4. 部署场景勘察与需求分析
定位算法,说白了就是怎么把一堆测量距离转换成坐标。很多刚入行的朋友觉得硬件调通了就万事大吉,结果一跑定位,坐标满屏乱跳。嗯,我当年也踩过这个坑。
这一章我们不讲虚的,直接上干货。从最基础的三边定位开始,一步步深入到工程中最常用的几种算法。你跟着走一遍,就知道该怎么选了。
4.1 三边定位法:最直观的起点
三边定位的原理很简单。你想想看,如果我知道自己距离A点5米,距离B点4米,距离C点3米,那我的位置不就是三个圆的交点吗?
理想情况下,三个圆交于一点,那就是我们的坐标。但现实很骨感——测距总有误差,三个圆大概率不会交于一点,而是形成一个模糊区域。
核心公式:
假设基站坐标分别为 (x₁, y₁), (x₂, y₂), (x₃, y₃),测距分别为 d₁, d₂, d₃,则:
(x - x₁)² + (y - y₁)² = d₁²
(x - x₂)² + (y - y₂)² = d₂²
(x - x₃)² + (y - y₃)² = d₃²
解这个方程组,把第一个方程减去第二个、第一个减去第三个,消去二次项,就得到一个线性方程组。然后直接求解就行。
我的经验:三边定位只适合做演示和教学。我在原型阶段用过一次,发现只要有一个基站测距偏差超过20厘米,定位结果就飞了。所以它只适合做算法验证,不适合落地。
4.2 最小二乘法:工程入门首选
既然三个圆不交于一点,那我们就找一个点,让它到三个圆心的距离误差平方和最小。这就是最小二乘法的核心思想。
数学上,我们把问题写成:
Ax = b
其中A是系数矩阵,x是待求坐标,b是观测向量。最小二乘解就是:
x = (AᵀA)⁻¹Aᵀb
这个公式你肯定见过,但我要说的是——别直接套!
注意:当基站布局不好时(比如三个基站几乎在一条直线上),AᵀA 会接近奇异矩阵,求逆会出大问题。我曾经在一个狭长走廊里部署系统,直接用最小二乘法,结果定位结果沿着走廊方向来回飘。后来加了第四个基站才稳住。
最小二乘法假设所有测距误差是独立同分布的。但UWB的测距误差并不是这样——远距离的测距误差通常比近距离大。这就引出了加权最小二乘法。
4.3 加权最小二乘法:给数据分个三六九等
加权最小二乘法的思路很直接:测距质量好的,权重给大点;质量差的,权重给小点。
公式变成:
x = (AᵀWA)⁻¹AᵀWb
这里的W就是权重矩阵,通常取测距方差的倒数。怎么确定权重?我一般用两种方法:
- 基于距离的权重:距离越近,权重越大。比如 w = 1/d²
- 基于信噪比的权重:信号越强,权重越大。这个需要芯片提供RSSI或CIR信息
我建议:在实际项目中,先用基于距离的权重做一轮,再根据实测数据微调。我在一个仓库项目中,发现距离权重效果不好,后来改用信噪比权重,定位精度从50厘米降到了20厘米。
加权最小二乘法比普通最小二乘法好不少,但它有个前提——你得知道权重的分布。如果权重给错了,效果还不如不加权。
4.4 Chan算法:兼顾精度与效率
Chan算法是我个人比较喜欢的一种。它本质上是一种两步加权最小二乘法,专门针对TDOA(到达时间差)定位设计的。
第一步,先假设未知点与某个参考基站的距离是已知的,解一个加权最小二乘。第二步,利用第一步的结果和基站几何关系,再做一次加权最小二乘。
这样做的好处是:
- 精度比普通最小二乘法高
- 计算量比迭代法小得多
- 在NLOS(非视距)环境下表现相对稳健
Chan算法适用场景:
- 基站数量 ≥ 4 个
- 测距误差服从近似高斯分布
- 需要实时定位(计算量小)
不过Chan算法也有短板。当基站几何布局很差时(比如所有基站都在一个半圆内),它的性能会急剧下降。我曾经在测试中发现,基站围成的多边形面积越小,Chan算法的误差越大。
4.5 四种算法对比
我把这四种算法的特点整理成了一张表,方便你选型时参考:
| 算法 | 精度 | 计算量 | 抗NLOS能力 | 适用场景 |
|---|---|---|---|---|
| 三边定位法 | 低 | 极低 | 无 | 教学演示、理想环境 |
| 最小二乘法 | 中 | 低 | 弱 | 基站布局好、误差均匀 |
| 加权最小二乘法 | 中高 | 中 | 中 | 已知测距质量分布 |
| Chan算法 | 高 | 中 | 较强 | TDOA定位、实时系统 |
4.6 知识体系总览
下面这张图把四种算法的关系和适用边界画清楚了。你可以把它当作选型时的快速参考:
4.7 工程选型建议
说了这么多,到底该用哪个?我根据实际项目经验,给你几条实在的建议:
- 基站只有3个:用加权最小二乘法。三边定位太脆弱,普通最小二乘法又没考虑误差分布。
- 基站≥4个,且需要实时性:优先选Chan算法。精度和计算量的平衡最好。
- NLOS严重(比如室内有金属货架):加权最小二乘法+信噪比权重,或者上Chan算法。
- 只是做演示或验证:三边定位法就够了,简单直观。
避坑提醒:我曾经在一个项目中,迷信Chan算法,结果基站布局是L形,定位误差直接飙到1米以上。后来换成加权最小二乘法,反而稳定在30厘米。记住——没有万能的算法,只有适合场景的算法。