卡爾曼濾波器
卡爾曼濾波器是這樣一類問題的主力演算法:你要追蹤一個在動的東西,卻只能透過帶雜訊的感測器去看它。它把機器人的信念保存為一個高斯——一條帶有最佳猜測中心和誠實寬度的鐘形曲線——並在一個緊湊、無窮反覆的兩步迴圈裡更新這個信念。它先用一個關於系統如何運動的模型,預測此刻東西應該在哪;再用一個新鮮的感測器讀數,去糾正那個預測。不妨把它想成一位有紀律的樂觀主義者:先做出預報,再偷瞄一眼現實,然後每一次都恰好按正確的比例,悄悄把兩者折中。
那個「正確的比例」正是它的核心,而它由信任來決定。每一次糾正時,濾波器都會把兩個來源彼此掂量:它自己的預測,和新來的測量。如果已知感測器靠譜、而預測心裡沒底,它就重重地偏向測量;如果感測器抖、而預測扎實,它就大體保留自己的預報。這種自動的、按證據加權的摻和,由一個叫卡爾曼增益的量算出,正是它讓濾波器能從兩個各自單看都雜得沒法信賴的來源裡,擠出一個乾淨、穩定的估計。
卡爾曼濾波器特別之處在於:對於那些運動和感知都是線性的(直線式、成比例的數學)、且雜訊為高斯的系統,它被證明是最優的——用同樣資訊的任何別的估計器,在把平均平方誤差降到最小這件事上,都不可能做得更好。它還便宜得出奇:從不存歷史,只存一個滾動的均值和共變異數,所以能在小小的硬體上每秒跑上千次。正是這種數學上的最優與工程上的省儉合二為一,讓它的各種版本,坐進了航天器、手機、GPS 模組,以及路上幾乎每一套自動駕駛系統的肚子裡。
一輛車的 GPS 每秒才報一次位置,還會跳上跳下差出好幾公尺,而它的輪速感測器更新不停、卻會慢慢漂移。卡爾曼濾波器把兩者融合起來——在兩次 GPS 定位之間,靠輪速平滑地預測;每當一個 GPS 讀數到來,又拉回去對準它——於是地圖上那個小點是滑行的,而不是瞬移的。
濾波器把一個「平滑但漂移」的來源與一個「帶雜訊但錨定」的來源,融成一條乾淨的軌跡。
樸素的卡爾曼濾波器假設一切都是線性且高斯的。真實的機器人會拐彎、會轉身、還帶著古怪的雜訊,所以工程師通常會去拿它那幾個「掰彎了」的表親——擴展卡爾曼濾波器(EKF)或無跡卡爾曼濾波器(UKF)——它們保留了同樣的「預測—糾正」骨架,又加裝了一些機關,來對付彎曲的、非線性的運動。