状态估计与滤波

卡尔曼滤波器

卡尔曼滤波器是这样一类问题的主力算法:你要追踪一个在动的东西,却只能透过带噪声的传感器去看它。它把机器人的信念保存为一个高斯——一条带有最佳猜测中心和诚实宽度的钟形曲线——并在一个紧凑、无穷反复的两步循环里更新这个信念。它先用一个关于系统如何运动的模型,预测此刻东西应该在哪;再用一个新鲜的传感器读数,去纠正那个预测。不妨把它想成一位有纪律的乐观主义者:先做出预报,再偷瞄一眼现实,然后每一次都恰好按正确的比例,悄悄把两者折中。

那个「正确的比例」正是它的核心,而它由信任来决定。每一次纠正时,滤波器都会把两个来源彼此掂量:它自己的预测,和新来的测量。如果已知传感器靠谱、而预测心里没底,它就重重地偏向测量;如果传感器抖、而预测扎实,它就大体保留自己的预报。这种自动的、按证据加权的掺和,由一个叫卡尔曼增益的量算出,正是它让滤波器能从两个各自单看都噪得没法信赖的来源里,挤出一个干净、稳定的估计。

卡尔曼滤波器特别之处在于:对于那些运动和感知都是线性的(直线式、成比例的数学)、且噪声为高斯的系统,它被证明是最优的——用同样信息的任何别的估计器,在把平均平方误差降到最小这件事上,都不可能做得更好。它还便宜得出奇:从不存历史,只存一个滚动的均值和协方差,所以能在小小的硬件上每秒跑上千次。正是这种数学上的最优与工程上的省俭合二为一,让它的各种版本,坐进了航天器、手机、GPS 模块,以及路上几乎每一套自动驾驶系统的肚子里。

一辆车的 GPS 每秒才报一次位置,还会跳上跳下差出好几米,而它的轮速传感器更新不停、却会慢慢漂移。卡尔曼滤波器把两者融合起来——在两次 GPS 定位之间,靠轮速平滑地预测;每当一个 GPS 读数到来,又拉回去对准它——于是地图上那个小点是滑行的,而不是瞬移的。

滤波器把一个「平滑但漂移」的来源与一个「带噪声但锚定」的来源,融成一条干净的轨迹。

朴素的卡尔曼滤波器假设一切都是线性且高斯的。真实的机器人会拐弯、会转身、还带着古怪的噪声,所以工程师通常会去拿它那几个「掰弯了」的表亲——扩展卡尔曼滤波器(EKF)或无迹卡尔曼滤波器(UKF)——它们保留了同样的「预测—纠正」骨架,又加装了一些机关,来对付弯曲的、非线性的运动。

又称
KFlinear Kalman filter卡尔曼滤波KF 滤波器