dwm1000 用c语言控制,DWM1000 测距原理简单分析(示例代码)

DWM1000 超宽带测距,使用的TOF(time of fly) 的方式,也就是计算无线电磁波传输时间,通过传输的时间换算成距离。 电磁波传输速率和光速一样,速度是299792.458km/s,可参见百度百科。如果想通过测试这个传播时间换算距离,那么就需要非常高的内部时钟。然。。。并不是有了高速的内部时钟即可测距,还需要一点,数据送达天线的精确时间,也就是我们发送数据时,何时将数据送到天线,以及接收到有效数据到天线时的确切时钟。 理论上所有满足以上两点的射频收发器都可以实现TOF测距。

DWM1000有一个delayed 发送,也就是延时发送,可以精确控制发送时间,其实这个可用可不用,用了它可以减少一次数据传输而已。

下面简单介绍官方提供基础例子中的SS-TWR 和 DS-TWR

不论SS-TWR 还是DS-TWR 都是双边测距,能够得到两个模块之间的距离信息,而不是位置信息,位置信息需要后期使用高中数学知识计算。

参考官方资料,但并不会逐句翻译,尽量写我的理解,且别人更容易理解的语句。

官方参考资料:《dw1000_user_manual_2.10》APPENDIX 3: Two-Way Ranging

1 Single-sided Two-way Ranging(SS-TWR)

7a2d9d43d5faf8dec221fde0f22b5903.png

一共有两个设备,也就是两个DWM1000 模块,分别称为DeviceA 和 DeviceB, DeviceA 在A 时刻发送一条信息给DeveiceB,经过空中一段时间传播(Tprop)在时刻B到达B设备。

我们很直观的可以看到,时刻B -  时刻A 就是信号的传播时间,也就是Tprop,然后换算距离,是否可行? 答案是不能! 因为A 和B 都有独立的时钟,并没有同步,假如二者时钟可以同步,那么这样计算是最好的。

什么是二者时钟同步? 就是某一个时刻下,设备A 和 设备B 时钟节拍一样,假如都是20180个时钟节拍(时钟节拍从系统上电或者PLL稳定后,从0到最大然后依次0 最大往复)或者两者知道确切的差值。然DWM1000 模块间显然没有这么高的能力让不同模块间时钟同步。

待续

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UWB是一种无线通信技术,DWM1000是一种UWB模块,可以用于测距、定位等应用。在跟随小车应用中,通常使用两个DWM1000模块,一个放在小车上,一个放在地面上。下面是UWB DWM1000跟随小车的原理代码解析。 1. 原理 UWB DWM1000跟随小车的原理如下: 1)通过UWB模块测量小车与地面的距离,得到距离数据。 2)将距离数据传输给控制器,控制器计算小车与地面的相对位置和方向。 3)根据相对位置和方向,控制器调整小车的速度和方向,使小车跟随地面。 2. 代码解析 UWB DWM1000跟随小车的代码如下: ```c++ #include <DWM1000.h> // 定义UWB模块对象 DWM1000 uwb; // 定义小车位置、速度、方向变量 float car_x, car_y, car_v, car_h; void setup() { // 初始化UWB模块 uwb.setup(); // 初始化小车位置、速度、方向 car_x = 0; car_y = 0; car_v = 0; car_h = 0; } void loop() { // 获取UWB距离数据 float dist = uwb.getDistance(); // 计算小车相对位置和方向 float car_dx = dist * sin(car_h); float car_dy = dist * cos(car_h); float car_dh = atan2(car_dy, car_dx); // 更新小车位置、速度、方向 car_x += car_dx; car_y += car_dy; car_v = dist / uwb.getInterval(); car_h += car_dh; // 控制小车运动 controlCar(car_v, car_h); } void controlCar(float v, float h) { // 控制小车运动,使其跟随地面 } ``` 代码中,我们先定义了一个UWB模块对象uwb,然后在setup函数中初始化UWB模块和小车位置、速度、方向。在loop函数中,获取UWB距离数据,计算小车相对位置和方向,更新小车位置、速度、方向,最后调用controlCar函数,控制小车运动。其中,controlCar函数需要根据小车速度和方向来控制小车运动,使其跟随地面。 以上就是UWB DWM1000跟随小车的原理代码解析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值