蓝点UWB实战
蓝点UWB实战
我们无人小车大创需要用到UWB来进行定位,我们挑选了性价比高的蓝点BP-TWR-30来进行小车实验的定位装置。
下面将进行一系列实验,看如何将这个UWB用在项目中。
用户手册
产品提供了完整的用户手册,可以根据用户手册进行一些列的操作。
三个基站一个标签。
上电测试
标签上电测试
基站上电测试
基站和标签同时上电测试
安装软件
- 安装STM32 ST-LINK Utility
- 安装Stlink V2驱动
3.安装串⼝驱动
- 安装MDK
点击Next,后面也是点击Next(采用默认配置就好,当然你也可以修改配置)
这个用户名和公司可以随便填。
安装过程需要一段时间。
下载测试HEX
由于设备发货前,已下载测试HEX,所以这步可以先跳过。
发现后面还是会涉及到HEX烧录,所以也不妨在这里进行练习。
正式HEX
源码的解压密码是www.51uwb.cn
打开软件Keil uVision5
选择ST-Link
根据实际情况修改代码:
当前由于拷的是基站,所以定义RX节点,SHORT_ADDR定为0x0001
查看串口信息
定位
定位的话就是利用三个基站获取的信息计算出小车的位置。
由于源程序默认是把三个基站的信息集中到基站0,然后再从串口读取出来,但我们的项目是要求在小车上进行运算,也就是下一步要修改一下源代码,使得三个基站的信息可以集中到标签上,然后小车从标签读取三个距离信息。
源代码修改
目前想要修改一下代码,使得三个基站的信息可以集中到标签上,然后小车从标签读取三个距离信息。
然而发现有点无从下手。因为源代码还挺长的,附带的教程也有点长。没有想象中的那么简单。
不过发现这是一个比较普遍的需求,所以论坛上有答案:
如何将定位信息通过标签串口传输到PC - 基础知识 51uwb.cn
UWB学习
基本概念
dw1000是符合UWB协议的一个芯片.
dwm1000是一个模组,它实现无线传输,并不是说一定要用来测距定位。
TWR和TDOA是软件算法实现,DWM1000是硬件。
测距定位:稳定度比精度更加重要。
两个模块之间的时间差可以换算距离,时间差除了空中传播,还有天线本身的延迟(和设备本身有关)。
UWB发的信号是高频的,障碍物对精度的影响会比较大。(实测1个手掌有10cm精度的定位影响)。
代码修改
修改Applicaton/User/Core的tx_main.c文件的Send_Dis_To_Anthor1函数。
添加代码
USART_puts((char*)msg_f_send.messageData,len);
发现不行,编译失败,提示没有USART_puts这个函数。
看来不是用这个函数。
然后找到了另外一个帖子。标签通过串口发送数据 - 问答社区 51uwb.cn
感觉按照他这个做法可行。就是在显示器输出的这个地方(LCD_Display_Distance函数)添加printf。
编译成功。
烧录并测试。发现printf的内容有些地方忘改了——都是an1,修改正确后再进行测试。
可以从标签的串口接收到与三个基站的信息。
定位代码实现
有个三个距离信息,我们就可以进行小车的定位了。从之前的经验来看,用这个UWB来做小车定位的人应该挺多的,所以大概率可以直接拿到能用的代码和相关资料。
到蓝点论坛看了一下,发现并没有可以直接用的资料,不过有一些可能会用到的资料,或者说和理想差别比较小的资料:
【开源项目】纯Python TWR算法UWB上位机 - 基础知识 51uwb.cn
【蓝点开源】UWB 运动传感器融合定位 - 基础知识 51uwb.cn
之前感觉这个很容易搞,大概是因为别人都把代码搞好了,现在看来要搞还是要花点心血的。
python上位机
蓝点uwb自带的定位上位机软件是exe文件,而且也不知道怎样输出定位信息。
小车该如何接收到自己定位信息?目前我想了两个方案:
- 实现一个python上位机软件,利用标签串口输出的数据计算出定位,然后直接在小车上跑。
- 定位上位机软件在电脑上跑,利用基站0的串口输出数据计算出定位,然后电脑再把定位信息发到小车上。