4. 定位算法基础:三边定位、最小二乘法与卡尔曼滤波入门

说到UWB定位,很多人第一反应就是“测距准不准”。但说实话,测距只是第一步。真正决定定位精度的,是后面的算法。我见过不少项目,硬件选型花了大价钱,结果算法没选对,定位飘得没法看。

这一章,我们就来聊聊定位算法的三个核心:三边定位、最小二乘法、卡尔曼滤波。这三者层层递进,基本覆盖了UWB定位从静态到动态、从理想到现实的全部场景。

4.1 三边定位:最直观的几何解法

三边定位的原理,说白了就是初中几何——已知三个点的坐标,以及目标点到这三个点的距离,求目标点的坐标。

你想想看,如果只有1个基站,目标点只能确定在一个圆上。2个基站,两个圆相交,得到两个候选点。3个基站,三个圆交于一点,位置就唯一确定了。

核心公式:

假设基站坐标分别为 (x₁, y₁), (x₂, y₂), (x₃, y₃),测距值分别为 d₁, d₂, d₃,目标点坐标为 (x, y)。

(x - x₁)² + (y - y₁)² = d₁²
(x - x₂)² + (y - y₂)² = d₂²
(x - x₃)² + (y - y₃)² = d₃²

解这个方程组,把后两个方程减去第一个,消去二次项,就得到一个线性方程组。然后直接求解即可。

我的经验:三边定位在理想环境下效果很好。但实际项目中,测距误差、基站位置误差、多径效应都会导致三个圆不交于一点。这时候,三边定位就失效了。

4.2 最小二乘法定位:让误差最小化

既然三边定位在现实中有局限,那怎么办?换个思路——我们不要求三个圆精确交于一点,而是找一个点,让它到三个基站的距离误差的平方和最小。

这就是最小二乘法的核心思想。

数学上,我们定义误差函数:

f(x, y) = Σ [√((x - xᵢ)² + (y - yᵢ)²) - dᵢ]²

然后求这个函数的最小值。通常的做法是线性化处理,把问题转化为求解一个超定线性方程组的最小二乘解。

具体步骤:

  1. 选择其中一个基站作为参考,比如基站1
  2. 将其他方程减去参考方程,消去二次项
  3. 得到形如 Ax = b 的线性方程组
  4. 求解 x = (AᵀA)⁻¹Aᵀb

避坑指南:我曾经在一个项目中,直接用三边定位,结果定位点经常跳到基站外面去。后来换成最小二乘法,虽然计算量大了点,但稳定性好很多。记住,基站数量越多,最小二乘法的优势越明显。

下面这张图展示了三边定位与最小二乘法的核心区别:

三边定位 vs 最小二乘法定位 三边定位(理想情况) 基站1 基站2 基站3 目标点 最小二乘法(现实情况) 基站1 基站2 基站3 最优估计 三边定位:三个圆精确交于一点 要求测距无误差,理想情况 最小二乘法:寻找误差平方和最小的点 容忍测距误差,更贴近实际

4.3 卡尔曼滤波入门:让定位“动”起来

前面讲的两种方法,都是基于单次测量做定位。但实际场景中,目标是在运动的。比如你拿着UWB标签在仓库里走,每次定位结果都会抖动。怎么办?

卡尔曼滤波就是干这个的。它把定位问题看作一个状态估计问题,结合运动模型和测量数据,给出最优估计。

核心思想就两句话:

  • 预测:根据上一时刻的状态,预测当前时刻的状态
  • 更新:用当前时刻的测量值,修正预测值

卡尔曼滤波的五个核心公式:

步骤 公式 说明
预测状态 x̂ₖ⁻ = A·x̂ₖ₋₁ + B·uₖ 根据运动模型预测位置
预测协方差 Pₖ⁻ = A·Pₖ₋₁·Aᵀ + Q 预测的不确定性
卡尔曼增益 Kₖ = Pₖ⁻·Hᵀ·(H·Pₖ⁻·Hᵀ + R)⁻¹ 测量值和预测值的权重
更新状态 x̂ₖ = x̂ₖ⁻ + Kₖ·(zₖ - H·x̂ₖ⁻) 融合测量值修正位置
更新协方差 Pₖ = (I - Kₖ·H)·Pₖ⁻ 更新后的不确定性

我的习惯:刚开始用卡尔曼滤波时,别纠结公式推导。先把它当黑盒用,调好两个关键参数:过程噪声协方差 Q 和 测量噪声协方差 R。Q 越大,滤波器越相信测量值;R 越大,滤波器越相信预测值。

下面这张图展示了卡尔曼滤波在UWB定位中的工作流程:

卡尔曼滤波在UWB定位中的工作流程 初始状态 x̂₀, P₀ 预测 x̂ₖ⁻, Pₖ⁻ 更新 x̂ₖ, Pₖ 定位输出 下一时刻迭代 UWB测距值 zₖ 卡尔曼滤波的关键优势: 1. 平滑抖动:单次测距误差被预测值“拉回来” 2. 自适应:测距质量好时更相信测量,差时更相信预测 3. 实时性:每次只处理当前时刻数据,计算量小

4.4 三种算法的对比与选型

说了这么多,到底该用哪个?我根据实际项目经验,整理了一个对比表:

算法 适用场景 优点 缺点
三边定位 静态定位、测距精度极高 计算简单、速度快 对误差敏感、基站数量要求严格
最小二乘法 静态/准静态、基站数量多 抗噪性强、可融合多基站 计算量稍大、无法处理动态
卡尔曼滤波 动态定位、实时跟踪 平滑轨迹、自适应性强 需要调参、模型依赖运动假设

我曾经踩过的坑:在一个AGV定位项目中,我直接用最小二乘法做实时定位,结果轨迹抖得像心电图。后来加上卡尔曼滤波,轨迹平滑了很多。但要注意,卡尔曼滤波的参数不是万能的——运动速度变了,Q和R就得重新调。

4.5 实战建议:从简单到复杂

如果你刚开始做UWB定位,我的建议是:

  1. 先跑通三边定位——理解几何原理,验证硬件测距是否正常
  2. 再升级到最小二乘法——提高稳定性,适应实际环境
  3. 最后加入卡尔曼滤波——处理动态场景,平滑输出