1. 为什么需要卡尔曼滤波?
在任何需要"实时知道系统状态"的场景里------比如无人机定位、手机导航、自动驾驶------我们都面临同一个难题:测量值充满噪声,模型预测也并不完美。直接依赖其中任何一方都会出问题:
方案 | 优点 | 缺点 |
---|---|---|
只用测量值 | 反映真实瞬时状态 | 噪声大、跳动明显,控制指令会抖动 |
只用模型预测 | 连续、平滑 | 建模误差会积累,时间一长就"漂"得很远 |
简单平均/低通滤波 | 降噪简单 | 无法区分"可信预测"与"可信测量",反应迟钝 |
卡尔曼滤波的核心贡献就是:承认两边都有问题,并根据各自的可信度进行智能融合。它在每个时刻循环两步:
- 预测:利用系统动力学模型,推算下一步状态及其不确定度。
- 校正:拿到传感器数据后,计算"测量残差",依据预测协方差 P 和测量协方差 R 的大小,动态决定该信预测多还是信测量多,给出最优估计。
结果就是------轨迹既平滑又紧贴真实值,系统可以在噪声环境下仍保持高精度、低延迟的状态反馈。正因如此,卡尔曼滤波成为了现代控制、导航与感知系统里的"标配工具"。
2. 卡尔曼滤波的核心思路:预测 + 修正
卡尔曼滤波最核心的逻辑,其实可以用一句话概括:
我先根据系统模型预测一下现在的状态,再结合测量值进行修正,得到更可靠的结果。
这整个过程,每时每刻都在重复进行,构成了"预测---修正"的循环机制:
2.1 第一步:预测(Prediction)
根据已知的物理模型(例如速度带来位移),结合上一时刻的状态,推算出当前时刻的状态:
- 预测现在的位置、速度、方向等状态
- 同时也预测这些值可能有多大的不确定性(即预测误差)
这就像你闭着眼走路,凭经验猜自己现在走到了哪。
2.2 第二步:修正(Update)
当新的传感器测量值到来时,卡尔曼滤波会:
- 比较"我预测的位置" 和 "传感器说的位置" 的差值(叫测量残差)
- 根据"我对预测有多信任"和"对测量有多信任",加权融合这两个信息,更新自己的估计
这就像你睁眼看了一眼四周,感觉自己好像走偏了,于是稍微调整了下方向。
2.3 关键点:信谁多一点?
卡尔曼滤波器不会盲信模型或测量,而是根据它们的"可靠性"动态判断:
- 如果测量噪声大,预测更可信 → 更偏向模型预测
- 如果模型误差大,测量更可信 → 更偏向传感器数据
这个"权重"的自动调节就是通过一个叫 卡尔曼增益(Kalman Gain) 的值来完成的,它在后台悄悄平衡两者,帮助你做出最佳判断。
2.4 小结
卡尔曼滤波的整个过程如下图逻辑循环:
上一状态估计 ------→ 预测 ------→ 得到估计值(带不确定性)
↓
传感器测量值到达
↓
融合预测和测量 → 输出更准确的状态估计
↓
进入下一时刻
3. 通俗类比:到底在融合什么?
理解卡尔曼滤波最简单的方法,就是把它想象成一个在不确定中做判断的人。
3.1 情景设定:你在雾中走路
假设你正走在一条被浓雾包围的小路上,能见度很低。
你想知道:"我现在大概走到了哪里?"
你手里有两个工具:
- 地图和指南针(相当于系统模型):你可以根据步数、方向和速度预测你现在在哪。
- 模糊的 GPS(相当于测量值):能告诉你当前的位置,但它有抖动和误差。
3.2 怎么判断谁更可信?
- 如果你走得很稳、步幅也准确,那你更信自己的预测
- 如果你知道 GPS 很准,那你会更信测量值
- 如果你刚刚被风刮偏了方向,模型预测不太准了,那就该多听 GPS 一点
卡尔曼滤波器就像一个聪明的人,随时分析这两条信息各自有多靠谱,然后决定如何加权融合,得出最优判断。
3.3 卡尔曼增益就是"信任滑块"
你可以把卡尔曼增益 K 理解成一个滑动条:
K 值大小 | 表示信谁 |
---|---|
K 趋近于 1 | 信测量多(预测不靠谱) |
K 趋近于 0 | 信预测多(测量不准) |
这个值会根据测量噪声 R 和预测误差协方差 P自动调整。
3.4 总结一句话
卡尔曼滤波本质上是在"你预测的位置"与"你测得的位置"之间,找一个最可信的点作为当前位置,而且它能根据实时误差,自动动态调整你该信谁。