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 知识体系总览

下面这张图把四种算法的关系和适用边界画清楚了。你可以把它当作选型时的快速参考:

定位算法知识体系 定位算法知识体系总览 定位算法 三边定位法 最小二乘法 加权最小二乘法 精度低 · 计算极低 精度中 · 计算低 精度中高 · 计算中 Chan算法 两步加权最小二乘 · TDOA专用 选型建议: • 教学/原型 → 三边定位法 • 工程落地 → 加权最小二乘法 或 Chan算法(基站≥4时优先)

4.7 工程选型建议

说了这么多,到底该用哪个?我根据实际项目经验,给你几条实在的建议:

  • 基站只有3个:用加权最小二乘法。三边定位太脆弱,普通最小二乘法又没考虑误差分布。
  • 基站≥4个,且需要实时性:优先选Chan算法。精度和计算量的平衡最好。
  • NLOS严重(比如室内有金属货架):加权最小二乘法+信噪比权重,或者上Chan算法。
  • 只是做演示或验证:三边定位法就够了,简单直观。

避坑提醒:我曾经在一个项目中,迷信Chan算法,结果基站布局是L形,定位误差直接飙到1米以上。后来换成加权最小二乘法,反而稳定在30厘米。记住——没有万能的算法,只有适合场景的算法。