十四个开关 · 第 05 份 · 卡尔曼滤波 1960

卡尔曼开关

GPS 每秒报一次、误差 5 米,惯导每秒报五十次、可它会飘。两个都很烂的东西合起来,能比任何一个单独都准——阿波罗就是这么飞的。下面的开关可以把它关掉。

总闸

城区路网 · 一辆车走了一圈

右上角是跟车放大镜(视野 80 米),椭圆是卡尔曼自报的 2σ 不确定度
隧道中 · GPS 失锁 0.0 s
真值 只信 GPS 只信惯导 卡尔曼

定位误差 · 最近 120 秒

纵轴是对数轴,每一格是十倍

关掉的是哪一行

卡尔曼是预测 + 更新两步。「只信惯导」是把更新删掉——没人纠正它,零偏一路积分成二次发散。「只信 GPS」是把预测删掉——每秒一个孤立的点,点与点之间它一无所知。

三条路线喂的是同一份真值、同一批传感器读数,连随机种子都一样。差别只有那两行。

顺带一个容易看漏的:「只信 GPS」的误差不只是那 5 米噪声。它一秒才报一次,两次之间车已经开出去十几米——实测 RMSE 10.5 米,而纯噪声只该是 σ√2 = 7.1 米。多出来的是那一秒钟的空白。

为什么惯导会飘

不是因为噪声大,是因为零偏:加速度计有一个缓慢游走的常值偏差。它被积分两次,位置误差按 b·t²/2 长——默认零偏 0.06 m/s²,实测 120 秒漂 538 米

把零偏滑块拉到 0 再看一次:同样 120 秒,惯导最大只飘 68 米——差 8 倍。这就是为什么这份演示里那个滑块不能省:去掉零偏,惯导会好得不像话,整份对照当场垮掉。

那条虚线是下界

虚线是滤波器自己报的 1σ(协方差矩阵位置块的迹开方)。在线性高斯问题上,卡尔曼是有效估计量——这条线就是克拉美-罗下界,没有任何估计器能长期低于它。

所以真正该看的不是「它很准」,是实测那条线贴着虚线抖,以及右边那个「RMSE ÷ 自报 σ」——理想是 1.00。把 GPS 噪声从 1 米拧到 15 米、把零偏拧到 0,四种配置下实测是 0.93 / 0.96 / 1.01 / 1.02 —— 它报多少,就真错多少。这才是它配得上「下界」这两个字的理由,比「它很准」有用得多。

它不是魔法

按「进隧道」把 GPS 断 30 秒:卡尔曼的误差照样在涨,椭圆肉眼可见地鼓起来。实测这 30 秒里它从 2.5 米涨到 11.8 米(涨了 9.3 米)——而同期原始惯导涨了 314 米差 34 倍。它只是先把零偏估出来了,撑的时候扣掉了那一项。

模型也是有前提的:这里假设噪声是高斯的、运动是线性的。城市峡谷里的 GPS 多路径反射两条都不满足——那正是扩展卡尔曼和粒子滤波存在的理由。