擴展卡爾曼濾波器
擴展卡爾曼濾波器(EKF)是當世界是彎曲的、而非筆直運行時,你會拿出來用的那種卡爾曼濾波器。普通卡爾曼濾波器假設一切都是線性的:行駛時間翻倍,走的距離就翻倍,是一種完全可預測的筆直關係。可是一台轉動輪子的機器人走的是曲線,一個報告角度或距離的感測器,也是以彎曲的、非線性的方式把輸入混在一起。把這些曲線餵給普通卡爾曼濾波器,它那套整潔的數學就會崩掉。EKF 就是這個補救辦法。
它的訣竅是把曲線假裝成一條直線——但只在機器人當前最佳猜測周圍那一小段範圍內這樣做。設想你站在一座山坡上:只要湊得足夠近、只看腳下,地面看起來就是平的,儘管整座山是彎的。EKF 對機器人的運動方程和感測器方程,做的正是這件事。它在每一步都測量這些曲線的局部斜率——這個量叫雅可比,無非就是在那一個點上的變化率——再用這個看起來平坦的近似,去跑普通卡爾曼濾波的預測與修正。然後它移到新的最佳猜測處,重新測量斜率,如此反覆。
這讓 EKF 成了真實機器人長期以來的主力——估計傾角的無人機、把 GPS 與輪速感測器融合的汽車——因為大多數真實系統都是非線性的。它的弱點恰恰來自驅動它的那個近似:如果曲線很陡,或者當前猜測偏得很遠,把它當作局部平坦就會引入誤差,濾波器可能漂移、甚至徹底崩潰。當這成為問題時,工程師就會轉向能更忠實地處理曲線的濾波器。
一輛汽車要從轉向速率估計自己的航向,面對的是一種非線性關係(航向是繞著一個圓環回轉的)。EKF 在每一拍都把這種關係在汽車當前航向附近壓平,於是它就能繼續套用簡單的卡爾曼數學。
EKF 把一個彎曲的問題變成筆直的問題,但只在一個小鄰域內有效,而且每一步都會刷新這個鄰域。
它所計算的局部斜率——雅可比——必須針對每個系統重新推導,這也是為什麼搭建一個 EKF 比普通卡爾曼濾波器更費人工。