Browse Source

增加MR72 8目标解析

master
zbr 3 years ago
parent
commit
623c0923c7
  1. 10
      .vscode/settings.json
  2. 61
      App/freertos_action.c
  3. 11
      BSP/custom_data_def.h
  4. 184
      BSP/insifhtica_QOAR1271.c
  5. 3
      BSP/insifhtica_QOAR1271.h
  6. 4
      Core/Src/usart.c
  7. 28
      MDK-ARM/WaterLidar.uvoptx
  8. 18
      MDK-ARM/WaterLidar.uvprojx
  9. 3398
      MDK-ARM/WaterLidar/WaterLidar.hex

10
.vscode/settings.json vendored

@ -1,16 +1,16 @@ @@ -1,16 +1,16 @@
{
"workbench.colorCustomizations": {
"activityBar.activeBackground": "#f8bfcd",
"activityBar.activeBackground": "#5896f3",
"activityBar.activeBorder": "#2f9010",
"activityBar.background": "#f8bfcd",
"activityBar.background": "#6b9ae0",
"activityBar.foreground": "#15202b",
"activityBar.inactiveForeground": "#15202b99",
"activityBarBadge.background": "#2f9010",
"activityBarBadge.foreground": "#e7e7e7",
"statusBar.background": "#f391a9",
"statusBar.background": "#5b3fd8",
"statusBar.foreground": "#15202b",
"statusBarItem.hoverBackground": "#ee6385",
"titleBar.activeBackground": "#f391a9",
"statusBarItem.hoverBackground": "#024cbb",
"titleBar.activeBackground": "#2466c9",
"titleBar.activeForeground": "#15202b",
"titleBar.inactiveBackground": "#f391a999",
"titleBar.inactiveForeground": "#15202b99"

61
App/freertos_action.c

@ -117,34 +117,45 @@ void task_proximity(void) @@ -117,34 +117,45 @@ void task_proximity(void)
{
os_p1 = osMessageQueueGet(proximity1_queueHandle, &proximity1, NULL, 100);
os_p2 = osMessageQueueGet(proximity2_queueHandle, &proximity2, NULL, 100);
if ((os_p1 == osOK) && (os_p2 == osOK))
{
if((os_p1 == osOK) || (os_p2 == osOK)){
uavcan_proximity_t data = {0};
data.d0 = min(proximity1.d0, proximity2.d0);
data.d315 = proximity1.d_left;
data.d45 = proximity2.d_left;
data.d0 = proximity1.d0;
data.d45 = proximity1.d45;
data.d90 = proximity1.d90;
data.d135 = proximity1.d135;
data.d180 = proximity1.d180;
data.d225 = proximity1.d225;
data.d270 = proximity1.d270;
data.d315 = proximity1.d315;
send_uavcan_proximity(&data);
}
else
{
if (os_p1 == osOK) //左边的雷达是反的
{
uavcan_proximity_t data = {0};
data.d0 = proximity1.d0;
data.d315 = proximity1.d_right;
data.d45 = proximity1.d_left;
send_uavcan_proximity(&data);
}
else if (os_p2 == osOK)
{
uavcan_proximity_t data = {0};
data.d0 = proximity2.d0;
data.d315 = proximity2.d_left;
data.d45 = proximity2.d_right;
send_uavcan_proximity(&data);
}
}
// if ((os_p1 == osOK) && (os_p2 == osOK))
// {
// uavcan_proximity_t data = {0};
// data.d0 = min(proximity1.d0, proximity2.d0);
// data.d315 = proximity1.d315;
// data.d45 = proximity2.d45;
// send_uavcan_proximity(&data);
// }
// else
// {
// if (os_p1 == osOK) //左边的雷达是反的
// {
// uavcan_proximity_t data = {0};
// data.d0 = proximity1.d0;
// data.d315 = proximity1.d315;
// data.d45 = proximity1.d45;
// send_uavcan_proximity(&data);
// }
// else if (os_p2 == osOK)
// {
// uavcan_proximity_t data = {0};
// data.d0 = proximity2.d0;
// data.d315 = proximity2.d315;
// data.d45 = proximity2.d45;
// send_uavcan_proximity(&data);
// }
// }
}
}
}

11
BSP/custom_data_def.h

@ -15,9 +15,14 @@ typedef struct @@ -15,9 +15,14 @@ typedef struct
typedef struct
{
uint16_t d0;
uint16_t d_left;
uint16_t d_right;
uint16_t d0;
uint16_t d45;
uint16_t d90;
uint16_t d135;
uint16_t d180;
uint16_t d225;
uint16_t d270;
uint16_t d315;
}proximity_data_t;
#endif /* CUSTOM_DATA_DEF_H */

184
BSP/insifhtica_QOAR1271.c

@ -4,15 +4,48 @@ static uint8_t data = 0; @@ -4,15 +4,48 @@ static uint8_t data = 0;
static uint8_t step = 0;
uint16_t ar1271_rev_flag = 0;
struct mr72_c{
uint32_t time_ms;
float range_f;
uint16_t range;
float azimuth;
float vrel;
uint8_t index;
uint8_t rollcount;
uint8_t rcs;
}mr72_c_data;
uint16_t range_arr[8];
float last_range;
uint32_t last_time_ms;
uint8_t range_index;
uint8_t index_arr[8];
void decode_ar1271(char c,uint8_t index);
bool decode_mr72(int16_t c);
void data_process(void);
void sortA1(uint16_t a[], uint8_t length);
void parse_ar1271_data(usart_data_t *usart_data)
{
osSemaphoreAcquire(radar_parse_mutexHandle,30);
uint8_t buffer_count;
uint8_t buffer[LIDAR_360_SIZE] = {0};
uint8_t message_count;
for (int i = 0; i < usart_data->len; i++)
{
char c = usart_data->data[i];
if(1){
decode_mr72(c);
}else{
decode_ar1271(c,usart_data->usart_instance);
}
}
data_process();
osSemaphoreRelease(radar_parse_mutexHandle);
}
void decode_ar1271(char c,uint8_t index){
static uint8_t buffer_count;
static uint8_t buffer[LIDAR_360_SIZE] = {0};
static uint8_t message_count;
if ('T' == c)
{
buffer_count = 0;
@ -35,17 +68,17 @@ void parse_ar1271_data(usart_data_t *usart_data) @@ -35,17 +68,17 @@ void parse_ar1271_data(usart_data_t *usart_data)
{
proximity_data_t proximity_data = {0};
proximity_data.d0 = uint16_value(buffer[2], buffer[3]);
proximity_data.d_right = uint16_value(buffer[4], buffer[5]);
proximity_data.d_left = uint16_value(buffer[16], buffer[17]);
proximity_data.d315 = uint16_value(buffer[4], buffer[5]);
proximity_data.d45 = uint16_value(buffer[16], buffer[17]);
if (usart_data->usart_instance == 1)
if (index == 1)
{
if (proximity1_queueHandle != NULL)
{
osMessageQueuePut(proximity1_queueHandle, &proximity_data, 0, 10);
}
}
else if (usart_data->usart_instance == 2)
else if (index == 2)
{
if (proximity2_queueHandle != NULL)
{
@ -54,10 +87,145 @@ void parse_ar1271_data(usart_data_t *usart_data) @@ -54,10 +87,145 @@ void parse_ar1271_data(usart_data_t *usart_data)
}
}
}
}
bool decode_mr72(int16_t c)
{
bool ret = false;
static uint8_t decode_state;
static uint8_t data_len = 0;
static int8_t data_cnt;
static int16_t value_b[8];
int16_t temp = c;
switch (decode_state)
{
case 0:
if(temp == 0xAA)
decode_state = 1;
break;
case 1:
if(temp == 0xAA){
decode_state = 2;
}
else
decode_state = 0;
break;
case 2:
if(temp == 0x0c){
decode_state = 3;
}
else
decode_state = 0;
break;
case 3:
if(temp == 0x07){
decode_state = 4;
data_len = 8;
}
else
decode_state = 0;
break;
case 4:
data_cnt = 8 - data_len;
if(data_cnt < 7){{
value_b[data_cnt] = temp;
data_len -= 1;
}
}else{
decode_state = 5;
}
break;
case 5:
if(temp == 0x55){
decode_state = 6;
}
else
decode_state = 0;
break;
case 6:
if(temp == 0x55){
mr72_c_data.time_ms = HAL_GetTick();
mr72_c_data.index = value_b[0];
mr72_c_data.range_f = (value_b[2] * 256 + value_b[3]) * 0.01;
mr72_c_data.range = uint16_value(value_b[2], value_b[3]);
mr72_c_data.azimuth = (value_b[1] * 256 + value_b[4]) * 0.01 - 90;
mr72_c_data.vrel = (value_b[5] * 256 + value_b[6]) * 0.05 - 35;
mr72_c_data.rollcount = value_b[5] & 0x03;
mr72_c_data.rcs = value_b[7] * 0.5 - 50;
ret = true;
if((last_range - mr72_c_data.range_f > 0.5) || (last_range - mr72_c_data.range_f < -0.5)){
bool had_index = false;
for(uint8_t i=0; i<range_index; i++){
if(index_arr[i] == mr72_c_data.index){
had_index = true;
break;
}
}
last_range = mr72_c_data.range;
if(range_index < 8 && !had_index){
range_arr[range_index] = mr72_c_data.range;
index_arr[range_index] = mr72_c_data.index;
range_index +=1;
}
}
}
decode_state = 0;
break;
default:
break;
}
return ret;
}
void data_process(void){
if(mr72_c_data.time_ms - last_time_ms > 50 || HAL_GetTick() - last_time_ms > 150){
if(last_time_ms != mr72_c_data.time_ms){
last_time_ms = mr72_c_data.time_ms;
// gcs().send_text(MAV_SEVERITY_INFO, "a:%d , %d, %d, %d, %d, %d, %d, %d",range_arr[0],range_arr[1],range_arr[2],range_arr[3],range_arr[4],range_arr[5],range_arr[6],range_arr[7]);
sortA1(range_arr,8);
proximity_t data;
data.d315 = range_arr[0];
data.d0 = range_arr[1];
data.d45 = range_arr[2];
data.d90 = range_arr[3];
data.d135 = range_arr[4];
data.d180 = range_arr[5];
data.d225 = range_arr[6];
data.d270 = range_arr[7];
if (proximity1_queueHandle != NULL)
{
osMessageQueuePut(proximity1_queueHandle, &data, 0, 10);
}
for (uint8_t i = 0; i < 8; i++)
{
range_arr[i] = 4000;
index_arr[i] = 0;
}
}
range_index = 0;
}
osSemaphoreRelease(radar_parse_mutexHandle);
}
void sortA1(uint16_t a[], uint8_t length){
uint8_t i, j;
float temp;
for(i = 0; i < length; ++i){
for(j = i + 1; j < length; ++j){
a[i] = a[i] == 0? 4000:a[i];
a[j] = a[j] == 0? 4000:a[j];
if(a[j] < a[i]){ //如果后一个元素小于前一个元素则交换
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
static const uint8_t crc8_table[] = {
0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b, 0x12, 0x15, 0x38, 0x3f, 0x36, 0x31,
0x24, 0x23, 0x2a, 0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65,

3
BSP/insifhtica_QOAR1271.h

@ -19,9 +19,12 @@ typedef struct @@ -19,9 +19,12 @@ typedef struct
uint16_t d315;
} proximity_t;
uint8_t crc_crc8(const uint8_t *p, uint8_t len);
bool patse_ar1271_data(uint8_t *in_data, uint8_t datalengh, uint8_t *out_data);
uint16_t uint16_value(uint8_t h_byte,uint8_t l_byte);
void parse_ar1271_data(usart_data_t *usart_data);
void request_QOAR1271_data(void);
#endif /* INSIFHTICA_QOAR1271_H */

4
Core/Src/usart.c

@ -44,7 +44,7 @@ void MX_USART1_UART_Init(void) @@ -44,7 +44,7 @@ void MX_USART1_UART_Init(void)
/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 921600;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
@ -73,7 +73,7 @@ void MX_USART2_UART_Init(void) @@ -73,7 +73,7 @@ void MX_USART2_UART_Init(void)
/* USER CODE END USART2_Init 1 */
huart2.Instance = USART2;
huart2.Init.BaudRate = 921600;
huart2.Init.BaudRate = 115200;
huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE;

28
MDK-ARM/WaterLidar.uvoptx

@ -145,7 +145,7 @@ @@ -145,7 +145,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U-O142 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL010000 -FP0($$Device:STM32F103T8$Flash\STM32F10x_128.FLM)</Name>
<Name>-U9985090032124647524B4E00 -O2254 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(1BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL010000 -FP0($$Device:STM32F103T8$Flash\STM32F10x_128.FLM)</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
@ -155,6 +155,26 @@ @@ -155,6 +155,26 @@
<WinNumber>1</WinNumber>
<ItemText>hart1_rev_buff</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>c</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>1</WinNumber>
<ItemText>temp</ItemText>
</Ww>
<Ww>
<count>3</count>
<WinNumber>1</WinNumber>
<ItemText>range_arr</ItemText>
</Ww>
<Ww>
<count>4</count>
<WinNumber>1</WinNumber>
<ItemText>mr72_c_data</ItemText>
</Ww>
</WatchWindow1>
<Tracepoint>
<THDelay>0</THDelay>
@ -230,7 +250,7 @@ @@ -230,7 +250,7 @@
<Group>
<GroupName>Application/User/Core</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -726,7 +746,7 @@ @@ -726,7 +746,7 @@
<Group>
<GroupName>APP</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -746,7 +766,7 @@ @@ -746,7 +766,7 @@
<Group>
<GroupName>UAVCAN</GroupName>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>

18
MDK-ARM/WaterLidar.uvprojx

@ -10,13 +10,13 @@ @@ -10,13 +10,13 @@
<TargetName>WaterLidar</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
<Device>STM32F103T8</Device>
<Vendor>STMicroelectronics</Vendor>
<PackID>Keil.STM32F1xx_DFP.2.3.0</PackID>
<PackID>Keil.STM32F1xx_DFP.2.2.0</PackID>
<PackURL>http://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x800FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") TZ</Cpu>
<FlashUtilSpec></FlashUtilSpec>
@ -138,7 +138,7 @@ @@ -138,7 +138,7 @@
</Flash1>
<bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2V8M.DLL</Flash2>
<Flash3></Flash3>
<Flash3>"" ()</Flash3>
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
@ -185,7 +185,6 @@ @@ -185,7 +185,6 @@
<uocXRam>0</uocXRam>
<RvdsVP>0</RvdsVP>
<RvdsMve>0</RvdsMve>
<RvdsCdeCp>0</RvdsCdeCp>
<hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2>
<StupSel>8</StupSel>
@ -352,7 +351,7 @@ @@ -352,7 +351,7 @@
<NoWarn>0</NoWarn>
<uSurpInc>0</uSurpInc>
<useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt>
<uClangAs>0</uClangAs>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
@ -899,13 +898,4 @@ @@ -899,13 +898,4 @@
<files/>
</RTE>
<LayerInfo>
<Layers>
<Layer>
<LayName>WaterLidar</LayName>
<LayPrjMark>1</LayPrjMark>
</Layer>
</Layers>
</LayerInfo>
</Project>

3398
MDK-ARM/WaterLidar/WaterLidar.hex

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save