编辑
2020-01-23
实用笔记
00
请注意,本文编写于 1564 天前,最后修改于 641 天前,其中某些信息可能已经过时。

目录

目的和要求
1.目的
2.要求
实验器材和开发环境
器材
开发环境
实验原理
实验方案
1.总体的设计方案:
2.测距原理
3.具体步骤
1) keil源代码及其调试
2) 定位算法的研究
3) 上位机客户端的开发
实验结果与分析
客户端和相关资料下载

现已开源 github:RTLS-UWB
最近做了课程设计,是 基于UWB的室内三维定位,现在大概过程整理如下:

目的和要求

1.目的

  1. 实现STM32F103与DWM1000模块通信;
  2. 实现UWB模块之间的TWR(双边测距)完成测距,并将距离信息发送至PC电脑;
  3. 利用采集的距离信息和基站的坐标求解标签位置坐标并显示。

2.要求

  1. UWB模块之间的通信距离不低于15m;
  2. 在空旷环境下可以得出X,Y,Z轴坐标,其中X,Y轴坐标误差在50cm以内;
  3. 标签的位置坐标显示延时不超过0.5s;

实验器材和开发环境

器材

  1. 研创物联的 UWB Mini 3s Plus开发版,板载 dw1000芯片(用于UWB通讯),STM32F103T8U6芯片用于主控。

开发环境

  1. keil v5 用于修改单片机代码
  2. blend vs2019用于开发上位机客户端(采用 c#/.net4.8)

实验原理

采用STM32F103和UWB通信模块DWM1000组成一个设备,通过软件编写分别设置成标签或基站。在房间的四个角落布置四个基站,标签通过TWR(双边测距)方式依次完成(TDMA)与各基站之间的测距,将标签与基站的距离消息发送至PC端,利用三边定位原理求解标签的位置坐标并显示。

实验方案

大体分为四部分:设计方案、keil源代码修改与调试、定位算法的研究与实现、上位机的客户端的开发;我主要负责keil源码和上位机的开发部分。

1.总体的设计方案:

芯片选取:我们采取了研创物联的 Mini 3s Plus一体化模块,主芯片是一个中等容量的 stm32f103t8u8芯片,通讯芯片是 dw1000芯片,中间通过 spi总线进行连接,如下图:

2.测距原理

双向飞行时间法(TW-TOF, two way-time of flight)每个模块从启动开始即会生成一条独立的时间戳。模块A 的发射机在其时间戳上的Ta1发射请求性质的脉冲信号,模块B 在Tb2时刻发射一个响应性质的信号,被模块A 在自己的时间戳Ta2时刻接收。有次可以计算出脉冲信号在两个模块之间的飞行时间,从而确定飞行距离S。 S=Cx[(Ta2-Ta1)-(Tb2-Tb1)]/2 (C 为光速)

3.具体步骤

我们采用4个不共面的、已经标定好的基站和一个标签来实现3维室内测距,首先标签会每隔一定时间闪烁发送数据包,各个基站收到数据包后会通过双向飞行时间法来测出4个基站分别和标签的距离,并把距离数据传回A0基站,由A0基站通过usb模拟串口传输给上位机的客户端界面,上位机的客户端界面收到信息后,根据最小二乘法来计算出可能的标签坐标,在计算过程中,我们会添加一些修正参数来修正系统的天线时延,在空旷的室内环境,它是线性的。为了防止冲突和碰撞,具体的原理大概如下图:

1) keil源代码及其调试

Keil源码我们在熟读官方例程的基础上进行了一些修改

2) 定位算法的研究

整个算法我们基于最小二乘法,这是我们了解到的,比较容易实现的精度符合要求的算法,大体分为三步。 建立信标节点与未知节点距离方程组其中:(xi,yi,zi)为基站坐标;(x,y,z)为标签坐标;

方程组为非线性方程组,用方程组中前n-1个方程减去第n个方程后,得到线性化的方程: AX=b

用最小二乘法求解方程:

由于客户端采用C#/.NET开发,所以我们集成到里面,如下图:

3) 上位机客户端的开发

这是主窗体的设计图,里面包含了一个串口调试助手,包含了一些调试功能,自定义功能,和纠错功能,完美支持原厂的帧格式(只需要点一下原厂兼容就可以了)。

实验结果与分析

最后我们选择在长9.6m,宽6m的大厅进行测试,xy轴误差在20cm左右,在28m的通信距离下依旧能保持良好的准确率,符合了最初的目的。 并且制作了展示视频,如下:

客户端和相关资料下载

百度网盘(提取码:mu0r)

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:mereith

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!