51uwb.cn
标题:
【开源】UWB+IMU融合定位开源代码
[打印本页]
作者:
蓝点无限
时间:
2022-11-25 22:42
标题:
【开源】UWB+IMU融合定位开源代码
UWB定位结合运动传感器IMU可以实现更为精准的定位功能,在之前的一个帖子我们记录了当时imu 工程的开发历程。
参见之前的帖子:
http://51uwb.cn/forum.php?mod=viewthread&tid=410&extra=page%3D1
本帖主要是分享最新源代码。相对于之前的工程,这里的代码imu 支持STM32F1 BP30/BP50 两款模块做参考基站,降低学习成本。
工程代码上,属于我们我们第三代固件架构,
使用STM32Cube 初始化硬件,底层驱动大部分实现共用,易于二次移植开发
。
源码路径:
https://gitee.com/bpuwb/bpuwb_imu.git
代码工程截图:
(, 下载次数: 955)
上传
点击文件名下载附件
目录结构说明:
BP-UWB_LIB -- > 公共底层驱动
STM32F1_UWB -- > STM32F1 Cube 工程,基站硬件初始化
STM32F4_UWB_PA --> STM32F4 Cube 工程,IMU 标签硬件初始化
Trilateration_PyDQ5 --> 基于Python 的UWB上位机源码
测试HEX --> 已经编译好的HEX
twr_51uwb.exe --> 已经编译好的上位机
编译说明:
由于我们采用的标签和基站硬件不一样,需要再两个工程中分别编译基站和标签。
打开工程后,通过
bphero_uwb.h
文件对设备类型(标签或者基站)以及设备短地址等信息进行配置。
基站编译
基站使用的是STM32F1,Cube工程目录为STM32F1_UWB 。
如下图所示,基站编译,需要首先确保#define RX_NODE 是“打开的”,每个基站分配一个短地址(SHORT_ADDR),4个基站可以分配0x0001到0x0004
(, 下载次数: 937)
上传
点击文件名下载附件
标签编译
标签使用的是STM32F4 IMU,Cube工程目录为STM32F4_UWB_PA
如下图所示,标签编译,首先需要确保#define TX_NODE 是“打开”的,由于IMU 模块没有液晶,所以 #define LCD_ENABLE需要注释掉,
最重要一点,模块有IMU模块,通过#define IMU_ENABLE 使能IMU功能。 短地址保持默认不需要更改。
(, 下载次数: 920)
上传
点击文件名下载附件
硬件购买
这个帖子中的代码 基站可以采用BP30或者BP50,标签必须是F4_PA 标签。
以最高性价比组合,4个BP30基站+F4_PA模块
BP30 基站:
https://item.taobao.com/item.htm?ft=t&id=650965811316
F4_PA模块:
https://item.taobao.com/item.htm?ft=t&id=617598108897
(, 下载次数: 961)
上传
点击文件名下载附件
IMU数据测试
默认我们使用了运动检测(motion detection)功能,只有1bit数据,标识模块是否有移位改变。 在调试的时候,可以将九轴数据全部打印出来。
代码修改如下(注意,需要将
Enable_MPU9250_MovetionDetection 注释掉)
void Mpu9250_Test(void)
{
Sw_I2C_Init();
MPU9250_Init(&mpu9250, MPU9250_Device_0, ACCEL_SCALE_16G, GYRO_SCALE_2000dps, MAG_SCALE_16bit);
//Enable_MPU9250_MovetionDetection(&mpu9250);
while (1)
{
MPU9250_ReadAcc(&mpu9250);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, !GPIO_PIN_SET); //PB7 = 1 LED_ON
printf("acc.x = %0.2f acc.y = %0.2f acc.z= %0.2f\n",mpu9250.acc[0],mpu9250.acc[1],mpu9250.acc[2]);
MPU9250_ReadGyro(&mpu9250);
HAL_Delay(300);
printf("gyro.x = %0.2f gyro.y = %0.2f gyro.z= %0.2f\n",mpu9250.gyro[0],mpu9250.gyro[1],mpu9250.gyro[2]);
MPU9250_ReadMag(&mpu9250);
printf("mag.x = %0.2f mag.y = %0.2f mag.z = %0.2f\n",mpu9250.mag[0],mpu9250.mag[1],mpu9250.mag[2]);
MPU9250_ReadTemperature(&mpu9250);
printf("Temp = %0.2f\n",mpu9250.temp);
HAL_Delay(1000);
}
}
复制代码
串口log 打印如下:
acc.x = 0.01 acc.y = -0.27 acc.z= 0.95
gyro.x = -10.67 gyro.y = 0.37 gyro.z= 2.01
mag.x = 28.27 mag.y = 13.61 mag.z = 7.10
Temp = 41.36
acc.x = -0.14 acc.y = -0.01 acc.z= 0.96
gyro.x = 12.87 gyro.y = 4.21 gyro.z= -43.35
mag.x = 16.76 mag.y = 20.48 mag.z = 9.08
Temp = 41.31
acc.x = -0.18 acc.y = 0.04 acc.z= 0.97
gyro.x = 1.59 gyro.y = -0.43 gyro.z= -22.87
mag.x = 15.01 mag.y = 21.99 mag.z = 8.73
Temp = 41.31
复制代码
作者:
18671186057
时间:
2024-2-17 17:30
这套设备能不能直接给树莓派进行数据取用呢
作者:
liuyue
时间:
2024-3-1 15:17
作者:
zhaozhixin
时间:
2024-3-5 23:13
大佬牛蛙
作者:
jd_kelvin
时间:
2024-3-13 09:59
谢谢分享。
作者:
bsm321
时间:
2024-4-14 22:27
果然是牛,谢谢分享
作者:
catliker
时间:
2024-4-22 14:36
多源融合定位,很赞
作者:
yuqq
时间:
2024-4-24 15:39
谢谢分享,学习了
作者:
lidajiao
时间:
2024-4-29 15:25
太强了,代码太实用
作者:
asork
时间:
2024-5-13 20:54
感谢分享,在实际使用中还是遇到很多问题
作者:
asork
时间:
2024-5-13 20:55
怎么与STM32F103C8T6进行通讯呢?
作者:
asork
时间:
2024-5-13 20:56
在实际使用过程中,遇到WIFI连不上的问题
作者:
zsyeh
时间:
2024-7-11 10:01
请问怎么把数据实时导出,拜托了
作者:
zsyeh
时间:
2024-7-11 10:02
感谢分享,在实际使用中还是遇到很多问题
作者:
zsyeh
时间:
2024-7-11 10:02
yi
多源融合定位,很赞
作者:
zsyeh
时间:
2024-7-11 10:02
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
作者:
想起温柔沉默默
时间:
2024-7-19 17:41
感谢大佬分享
作者:
yzp123
时间:
2024-11-12 14:58
谢谢分享!
欢迎光临 51uwb.cn (http://51uwb.cn/)
Powered by Discuz! X3.3