3. UWB定位原理
做UWB定位这行,算法就是灵魂。很多朋友一上来就问我:“哪种算法最好?”说实话,没有绝对的好坏,只有合不合适。今天我把四种最常用的定位原理掰开揉碎了讲,都是我这些年踩坑总结出来的经验。
核心观点:UWB定位不是单一算法的天下,TOF、TDOA、AOA、RSSI各有各的适用场景。选对算法,项目就成功了一半。
3.1 TOF测距原理:最直观的“时间差”
TOF,全称Time of Flight,飞行时间法。说白了就是测量信号从A点到B点飞了多久。光速是已知的,时间乘以光速除以2,就是距离。
公式很简单:距离 = 光速 × 飞行时间 / 2
为什么除以2?因为信号发过去再返回来,走了两趟。嗯,这里要注意,UWB信号是双向测距的,不是单向。
我的经验:TOF测距在室内10-50米范围内表现非常稳定。我做过一个仓库项目,用TOF方案,30米内误差基本控制在15厘米以内。但要注意,时钟同步精度是最大的坑。
TOF的典型实现流程:
- 标签发送测距请求(Poll消息)
- 基站接收后回复响应(Response消息)
- 标签计算往返时间
- 根据时间差算出距离
代码实现其实不复杂,我贴一段伪代码大家感受下:
// TOF测距伪代码
function TOF_measure(tag, anchor):
t1 = get_current_time() // 标签发送时间
anchor.receive_and_reply() // 基站接收并回复
t4 = get_current_time() // 标签接收回复时间
T_round = t4 - t1 // 往返总时间
T_reply = anchor.get_reply_delay() // 基站处理延迟
T_of = (T_round - T_reply) / 2 // 单程飞行时间
distance = C * T_of // C = 光速
return distance
我曾经在一个隧道项目里吃过亏。隧道里多径反射严重,TOF测出来的距离忽大忽小。后来加了首径检测算法,才把问题解决。首径检测就是只认第一个到达的信号,不认反射回来的。
3.2 TDOA定位原理:时间差定位法
TDOA,Time Difference of Arrival,到达时间差。和TOF不同,TDOA不需要标签和基站来回通信,而是多个基站同时监听标签发出的信号。
核心思想:标签发一个信号,基站A和基站B收到的时间不一样。这个时间差对应一个距离差,多个距离差交汇就能算出位置。
关键区别:TOF测的是绝对距离,TDOA测的是距离差。TDOA要求所有基站时钟严格同步,误差不能超过纳秒级。
TDOA的数学原理:
- 基站A和基站B收到信号的时间差 Δt_AB
- 对应的距离差 Δd_AB = C × Δt_AB
- 标签位置在一条双曲线上(到两定点距离差为常数)
- 至少需要3个基站形成两条双曲线,交点就是位置
我记得有个客户非要在一个工厂里用TDOA,但他们的基站时钟用的是普通晶振。结果呢?定位误差直接飙到5米以上。后来我给他们换了温补晶振(TCXO),配合有线时钟同步,精度才回到30厘米以内。
避坑指南:我曾经见过一个团队,TDOA算法写得没问题,但基站部署时没考虑几何分布。四个基站排成一条直线,结果定位结果在垂直方向上完全发散。记住,基站不能共线,最好呈四边形分布。
3.3 AOA定位原理:角度决定位置
AOA,Angle of Arrival,到达角定位。这个思路和前面两个完全不同——我不测时间,我测角度。
原理:基站用天线阵列接收信号,通过不同天线接收到的信号相位差,算出信号来的方向。两个基站各自测出一个角度,两条射线一交叉,位置就出来了。
你想想看,这就像你在山上用两个观测点同时看一个目标,每个观测点报一个方位角,两个方位角一交汇,目标位置就确定了。
AOA的优缺点很明显:
| 优势 | 劣势 |
|---|---|
| 只需要2个基站就能定位 | 天线阵列成本高 |
| 不需要时钟同步 | 角度误差随距离放大 |
| 适合狭长场景 | 多径环境下角度不准 |
我做过一个停车场项目,车位窄长,用TOF需要很多基站。后来改用AOA,两个基站覆盖一整条车道。但有个问题——车一多,信号反射严重,角度偏差能到10度以上。最后我们加了角度滤波,把突变的角度值剔除掉,才稳定下来。
个人建议:AOA适合基站数量受限的场景,比如隧道、走廊、停车场。但如果你对精度要求很高(10厘米以内),还是老老实实用TOF或TDOA吧。
3.4 RSSI定位原理:最简单的“信号强度”法
RSSI,Received Signal Strength Indicator,接收信号强度指示。这个原理最简单——信号越强,离得越近;信号越弱,离得越远。
公式:距离 = 10^((P_tx - P_rx - 常数) / (10 × n))
其中n是路径损耗指数,室内一般取2-4。
说实话,RSSI在UWB里用得不多。为什么?因为UWB的优势就是精度高,RSSI的精度实在拿不出手。我测试过,在空旷环境下RSSI误差3-5米,有遮挡时误差能到10米以上。
但RSSI有个好处——实现成本几乎为零。所有无线芯片都自带RSSI功能,不需要额外硬件。所以有些场景还是会用它:
- 区域级定位(判断人在哪个房间)
- 辅助其他算法做粗定位
- 低功耗场景(不需要频繁通信)
我曾经踩过的坑:有个项目想用RSSI做人员定位,结果发现不同厂家的手机RSSI值差异巨大。同一位置,iPhone和安卓手机测出来的RSSI能差10dBm。后来我们做了设备校准,每个设备单独建一个RSSI-距离映射表,才勉强能用。
3.5 四种算法对比总结
说了这么多,最后给个对比表,方便大家选型时参考:
| 特性 | TOF | TDOA | AOA | RSSI |
|---|---|---|---|---|
| 典型精度 | 10-30cm | 10-30cm | 0.5-2m | 3-10m |
| 基站数量 | ≥3 | ≥3 | ≥2 | ≥3 |
| 时钟要求 | 低(双向测距) | 高(纳秒级同步) | 低 | 低 |
| 硬件成本 | 中 | 高(需同步模块) | 高(天线阵列) | 低 |
| 抗多径能力 | 强 | 强 | 弱 | 弱 |
| 适用场景 | 室内定位、机器人 | 大规模部署 | 狭长空间 | 区域级定位 |
选算法的时候,我建议你先问自己三个问题:精度要多少?预算有多少?现场环境什么样?答案出来了,算法自然就定了。
嗯,这四种原理是UWB定位的基石。后面章节我们会深入讲每种算法的工程实现细节,包括时钟同步怎么做、天线阵列怎么设计、滤波算法怎么调参。到时候再结合具体项目案例,大家会理解得更深。