51uwb.cn

 找回密码
 立即注册
查看: 1368|回复: 6
打印 上一主题 下一主题

【开源】UWB+IMU融合定位开源代码

[复制链接]

35

主题

958

帖子

4032

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4032
跳转到指定楼层
楼主
发表于 2022-11-25 22:42:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
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

代码工程截图:


目录结构说明:
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


标签编译
标签使用的是STM32F4 IMU,Cube工程目录为STM32F4_UWB_PA
如下图所示,标签编译,首先需要确保#define TX_NODE 是“打开”的,由于IMU 模块没有液晶,所以 #define LCD_ENABLE需要注释掉,
最重要一点,模块有IMU模块,通过#define IMU_ENABLE 使能IMU功能。 短地址保持默认不需要更改。

硬件购买
这个帖子中的代码 基站可以采用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

IMU数据测试
默认我们使用了运动检测(motion detection)功能,只有1bit数据,标识模块是否有移位改变。 在调试的时候,可以将九轴数据全部打印出来。 代码修改如下(注意,需要将Enable_MPU9250_MovetionDetection 注释掉)
  1. void Mpu9250_Test(void)
  2. {
  3.     Sw_I2C_Init();
  4.     MPU9250_Init(&mpu9250, MPU9250_Device_0, ACCEL_SCALE_16G, GYRO_SCALE_2000dps, MAG_SCALE_16bit);
  5.     //Enable_MPU9250_MovetionDetection(&mpu9250);
  6.     while (1)
  7.     {
  8.         MPU9250_ReadAcc(&mpu9250);
  9.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, !GPIO_PIN_SET); //PB7 = 1 LED_ON
  10.        
  11.         printf("acc.x = %0.2f acc.y = %0.2f acc.z= %0.2f\n",mpu9250.acc[0],mpu9250.acc[1],mpu9250.acc[2]);
  12.         MPU9250_ReadGyro(&mpu9250);
  13.         HAL_Delay(300);
  14.         printf("gyro.x = %0.2f gyro.y = %0.2f gyro.z= %0.2f\n",mpu9250.gyro[0],mpu9250.gyro[1],mpu9250.gyro[2]);

  15.         MPU9250_ReadMag(&mpu9250);
  16.         printf("mag.x = %0.2f mag.y = %0.2f mag.z = %0.2f\n",mpu9250.mag[0],mpu9250.mag[1],mpu9250.mag[2]);

  17.         MPU9250_ReadTemperature(&mpu9250);
  18.         printf("Temp = %0.2f\n",mpu9250.temp);
  19.         HAL_Delay(1000);

  20.     }
  21. }
复制代码


串口log 打印如下:
  1. acc.x = 0.01 acc.y = -0.27 acc.z= 0.95
  2. gyro.x = -10.67 gyro.y = 0.37 gyro.z= 2.01
  3. mag.x = 28.27 mag.y = 13.61 mag.z = 7.10
  4. Temp = 41.36
  5. acc.x = -0.14 acc.y = -0.01 acc.z= 0.96
  6. gyro.x = 12.87 gyro.y = 4.21 gyro.z= -43.35
  7. mag.x = 16.76 mag.y = 20.48 mag.z = 9.08
  8. Temp = 41.31
  9. acc.x = -0.18 acc.y = 0.04 acc.z= 0.97
  10. gyro.x = 1.59 gyro.y = -0.43 gyro.z= -22.87
  11. mag.x = 15.01 mag.y = 21.99 mag.z = 8.73
  12. Temp = 41.31
复制代码




回复

使用道具 举报

1

主题

9

帖子

13

积分

新手上路

Rank: 1

积分
13
沙发
发表于 2024-2-17 17:30:49 | 只看该作者
这套设备能不能直接给树莓派进行数据取用呢
回复

使用道具 举报

0

主题

9

帖子

12

积分

新手上路

Rank: 1

积分
12
板凳
发表于 2024-3-1 15:17:29 | 只看该作者
回复

使用道具 举报

0

主题

4

帖子

5

积分

新手上路

Rank: 1

积分
5
地板
发表于 2024-3-5 23:13:45 | 只看该作者
大佬牛蛙
回复

使用道具 举报

0

主题

4

帖子

10

积分

新手上路

Rank: 1

积分
10
5#
发表于 2024-3-13 09:59:08 | 只看该作者
谢谢分享。
回复

使用道具 举报

0

主题

3

帖子

5

积分

新手上路

Rank: 1

积分
5
6#
发表于 2024-4-14 22:27:33 | 只看该作者
果然是牛,谢谢分享
回复

使用道具 举报

0

主题

4

帖子

4

积分

官方会员

Rank: 8Rank: 8

积分
4
7#
发表于 昨天 14:36 | 只看该作者
多源融合定位,很赞
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

bphero Inc.  

GMT+8, 2024-4-23 23:39 , Processed in 0.022761 second(s), 6 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表