现有DS-TWR算法
现在稳定运行的UWB定位设备是基于Decawave的TREK1000套件进行移植的。
- 设备端使用的双边双向测距(DS-TWR)算法来获取测距结果
- 上位机使用三边测量(Trilateration)算法来解算测距结果得到标签的坐标信息
TREK1000是针对室内定位而设计的
- 在室内空旷区域内,使用3个固定基站进行二维空间定位,或使用4个固定基站进行三维空间定位,最多支持10个移动标签
- DS-TWR算法中使用了TDMA(时分复用)的方法,TDMA的时隙是由基站0来维护的,其他基站和标签需要与基站0同步,否则TDMA的时隙将错乱
ARM端源码指南中对TWR协议的实现做了详细的解释:DecaRangeRTLS_ARM_Source_Code_Guide.pdf 以下是和TDMA有关的部分
翻译 基站0负责分配并维护标签的时隙(Slot)。 基站0用于为每个标签分配活动时隙,以便它们的测距数据交换不会产生干扰。 基站0通过在每次响应标签的测距尝试时包含休眠时间调整值来实现此目的。
在A0的Response消息中将包含一个睡眠时间调整值,来提前或延后对应标签发送Poll消息的时机。
其实从这里可以看出,TWR算法其实也需要时间同步(所有的时隙是以A0的时间为基准的),只是TWR中有Guard Time,并且只是用于TDMA时隙同步,并不影响测距精度,所以时间同步的精度远没有TDoA算法严格,TDoA的时间同步精度会直接影响测距精度。
小结
现有DS-TWR算法测距的局限性
- 所有基站必须在同一个区域里协同工作,可扩展性差,并且时隙需要与A0保持同步(基站和标签均不能失去与A0的连接,TDMA将无人管理)
- 基站数量固定为4个,不过理论上通过增加每个时隙的时长是可以扩充基站数量的
- 在没有收到标签的Poll消息之前,基站必须一直处于接收状态,监听空中是否有Poll消息,这一要求使得TWR算法下的基站功耗必然会比较高。
方案1.交换基站和标签的角色
原理分析
这个方案可以解决原基站长期监听造成的功耗较高问题。
具体做法就是将头盔配置为A0、A1、A2……,基站配置为T0、T1、T2……,这样基站只需要按照固定的时间发送Poll消息(时间非常短)然后立即休眠即可,功耗将显著降低。
但这个方案也带来了一些新问题:所有设备还是要与A0同步时隙,也就是说,只有头盔A0出现的地方才能保证正常测距,如果没有头盔A0而只有头盔A1或A2,那么TDMA时隙将有可能错乱。
邢工提出的解决方案
通过拉长基站T0发送轮询消息的周期,来降低碰撞的概率,所有的头盔和基站都不去调整其他设备的发送时间。
实现思路
- 基于原来的TWR协议栈实现进行修改,头盔的数量最大为4个(A0~A3),基站的数量最大为8个(T0~T7)
- 修改协议栈,使A1~A3能够独立工作
- 修改协议栈,屏蔽掉A0对Tn的时隙调整(放弃TDMA)
- 到此头盔应该是可以独立工作的,如果头盔出现在同一区域将会有一定几率发生碰撞,接下来需要根据碰撞的情况来看,要不要想办法降低碰撞概率
方案2.对基站进行间断性休眠
试验
试验过后发现基站A0无论休眠多久都可以正常响应标签,但其他基站(A1~A3)在周期性休眠且没有A0存在的情况下,是无法响应标签的。
分析原因
基站A0会调整标签的发送时间(维护时隙),其他的基站不会。失去了基站A0则无法正常通信。