状态估计与滤波

扩展卡尔曼滤波器

扩展卡尔曼滤波器(EKF)是当世界是弯曲的、而非笔直运行时,你会拿出来用的那种卡尔曼滤波器。普通卡尔曼滤波器假设一切都是线性的:行驶时间翻倍,走的距离就翻倍,是一种完全可预测的笔直关系。可是一台转动轮子的机器人走的是曲线,一个报告角度或距离的传感器,也是以弯曲的、非线性的方式把输入混在一起。把这些曲线喂给普通卡尔曼滤波器,它那套整洁的数学就会崩掉。EKF 就是这个补救办法。

它的诀窍是把曲线假装成一条直线——但只在机器人当前最佳猜测周围那一小段范围内这样做。设想你站在一座山坡上:只要凑得足够近、只看脚下,地面看起来就是平的,尽管整座山是弯的。EKF 对机器人的运动方程和传感器方程,做的正是这件事。它在每一步都测量这些曲线的局部斜率——这个量叫雅可比,无非就是在那一个点上的变化率——再用这个看起来平坦的近似,去跑普通卡尔曼滤波的预测与修正。然后它移到新的最佳猜测处,重新测量斜率,如此反复。

这让 EKF 成了真实机器人长期以来的主力——估计倾角的无人机、把 GPS 与轮速传感器融合的汽车——因为大多数真实系统都是非线性的。它的弱点恰恰来自驱动它的那个近似:如果曲线很陡,或者当前猜测偏得很远,把它当作局部平坦就会引入误差,滤波器可能漂移、甚至彻底崩溃。当这成为问题时,工程师就会转向能更忠实地处理曲线的滤波器。

一辆汽车要从转向速率估计自己的航向,面对的是一种非线性关系(航向是绕着一个圆环回转的)。EKF 在每一拍都把这种关系在汽车当前航向附近压平,于是它就能继续套用简单的卡尔曼数学。

EKF 把一个弯曲的问题变成笔直的问题,但只在一个小邻域内有效,而且每一步都会刷新这个邻域。

它所计算的局部斜率——雅可比——必须针对每个系统重新推导,这也是为什么搭建一个 EKF 比普通卡尔曼滤波器更费人工。

又称
EKF扩展卡尔曼滤波擴展卡爾曼濾波