3. UWB定位原理

做UWB定位这行,算法就是灵魂。很多朋友一上来就问我:“哪种算法最好?”说实话,没有绝对的好坏,只有合不合适。今天我把四种最常用的定位原理掰开揉碎了讲,都是我这些年踩坑总结出来的经验。

核心观点:UWB定位不是单一算法的天下,TOF、TDOA、AOA、RSSI各有各的适用场景。选对算法,项目就成功了一半。

UWB定位算法体系 UWB定位引擎 TOF 测距原理 TDOA 定位原理 AOA 定位原理 RSSI 定位原理 ✅ 精度:10-30cm ✅ 需双向通信 ✅ 适合小范围 ✅ 精度:10-30cm ✅ 只需单向通信 ✅ 适合大范围 ✅ 精度:0.5-2m ✅ 需天线阵列 ✅ 适合少基站 ✅ 精度:3-10m ✅ 实现最简单 ✅ 适合粗定位

3.1 TOF测距原理:最直观的“时间差”

TOF,全称Time of Flight,飞行时间法。说白了就是测量信号从A点到B点飞了多久。光速是已知的,时间乘以光速除以2,就是距离。

公式很简单:距离 = 光速 × 飞行时间 / 2

为什么除以2?因为信号发过去再返回来,走了两趟。嗯,这里要注意,UWB信号是双向测距的,不是单向。

我的经验:TOF测距在室内10-50米范围内表现非常稳定。我做过一个仓库项目,用TOF方案,30米内误差基本控制在15厘米以内。但要注意,时钟同步精度是最大的坑。

TOF的典型实现流程:

  1. 标签发送测距请求(Poll消息)
  2. 基站接收后回复响应(Response消息)
  3. 标签计算往返时间
  4. 根据时间差算出距离

代码实现其实不复杂,我贴一段伪代码大家感受下:

// 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定位的基石。后面章节我们会深入讲每种算法的工程实现细节,包括时钟同步怎么做、天线阵列怎么设计、滤波算法怎么调参。到时候再结合具体项目案例,大家会理解得更深。