[蓝点无限] UWB 定位数据融合 之 固件实现
2021/8/31 23:07:00
本文主要是介绍[蓝点无限] UWB 定位数据融合 之 固件实现,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
在前面两个博文中已经提及到,我们打算做一个UWB 结合运动传感器 融合定位,这篇博文实现固件代码,代码git 链接参见本文末尾。
我们的固件实现基础是之前的《TWR算法-多基站多标签固件》,参考链接
https://www.cnblogs.com/tuzhuke/p/15170219.html
再此基础上将《UWB 定位数据融合 之 MPU9250 Wake-on-Motion 模式》 MPU9250 相关内容进行整合。
具体改动
1. 将MPU9250 相关驱动和初始化移植
2 定义全局变量isMpu9250_moved 用来保存是否在该定位周期内模块发生运动
if(Count_Anthor() < 4) { gProcess_Dis = 0; BPhero_TAG_Broadcast(); gSend_index = 0; // HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8); isMpu9250_moved = 0; HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, !GPIO_PIN_SET); //PB7 = 1 LED_ON } else { if(gSend_index ==Count_Anthor()) { gSend_index= 0; Send_Dis_To_Anthor0(); isMpu9250_moved = 0; HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, !GPIO_PIN_SET); //PB7 = 1 LED_ON } else { gProcess_Dis = 1; BPhero_Distance_Measure_Specail_ANTHOR();// 从1 2 3 4发送 // HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7); }
2 标签将isMpu9250_moved 打包并以广播的形式发送给各个模块
static void Send_Dis_To_Anthor0(void) { static int framenum = 0 ; char crc_byte = 0; //only send this message to anthor0:short address equal 0x0001 msg_f_send.destAddr[0] = 0xFF; msg_f_send.destAddr[1] = 0xFF; msg_f_send.seqNum = distance_seqnum; msg_f_send.messageData[0]='M'; msg_f_send.messageData[1] = 0;//数据包长度 uint8 *pAnthor_Str = &msg_f_send.messageData[2]; int str_len = 0x20; sprintf(pAnthor_Str, "&&&:%02X$%04X:%d:%02X$",str_len,SHORT_ADDR,isMpu9250_moved,msg_f_send.seqNum);//AA55 ANTHORID pAnthor_Str = pAnthor_Str + 15+2; isMpu9250_moved = 0; for(uint8 index = 0 ; index < MAX_ANTHOR; index++) { if(anthor_info[index].alive == 1) { sprintf(pAnthor_Str, "%04X:%04X:%02X#",anthor_info[index].short_address,anthor_info[index].distance,anthor_info[index].rssi_info); pAnthor_Str = pAnthor_Str + 13; } } pAnthor_Str = pAnthor_Str - 1; sprintf(pAnthor_Str, "$AA##\r\n"); while(msg_f_send.messageData[str_len] != '\n') { crc_byte =crc_byte^msg_f_send.messageData[str_len]; str_len++; } str_len++;//字符串最后追加'\n' printf(&msg_f_send.messageData[2]); msg_f_send.messageData[1] = str_len - 2;//有用数据,其他模块需要传输到串口的数据 HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, !GPIO_PIN_RESET);//PA node ,enable pa dwt_writetxdata(11 + str_len,(uint8 *)&msg_f_send, 0) ; // write the frame data dwt_writetxfctrl(11 + str_len, 0); dwt_starttx(DWT_START_TX_IMMEDIATE); while (!(dwt_read32bitreg(SYS_STATUS_ID) & SYS_STATUS_TXFRS)) { }; dwt_write32bitreg(SYS_STATUS_ID, SYS_STATUS_TXFRS); framenum++; LCD_Display_Distance(); }
3 基站收到‘M’信息,通过串口送出
case 'M': //将收到的距离信息通过串口发送给电脑上位机 USART_puts(&msg_f->messageData[2],msg_f->messageData[1]); break;
标签发送‘M’信息,第一个字节是‘M’,第二个字节保存了数据长度,在处理‘M’信息,直接使用msg_f->messageData[1] 定义送到串口的数据长度。
上位机测试效果:
源码链接:
固件源码:
固件源码已经放到git上,V1.0 版本开发完成,请详细看下面的描述
https://tuzhuke@bitbucket.org/tuzhuke/bp30_multianthor.git
Hash:3ec3d27cabc914365549fb0d907e034f3caa21ec
测试硬件
4个蓝点BP30 + 1 带黑色外壳的UWB
这篇关于[蓝点无限] UWB 定位数据融合 之 固件实现的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-12百万架构师第十五课:源码分析:Spring 源码分析:SpringMVC核心原理及源码分析|JavaGuide
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide