狀態估計與濾波

里程計

里程計是機器人靠觀察自己的運動、一步一步地把每一小步累加起來,從而推斷自己移動到哪裡的辦法。它並不是從外界被告知自己的位置;相反,它一遍又一遍地問:「我剛剛轉了多少、又向前滾了多遠?」並把這些不斷累計。這個詞來自一種古老的做法——透過數車輪轉了多少圈來度量行程,就像汽車的里程表一格格地累加里數,只不過機器人記錄的不只是距離,還包括不斷變化的方向,這樣它才能描繪出自己走過的整條曲折路徑。

它的工作方式,是頻繁地對增量運動做一些小小的測量——車輪編碼器察覺到輪子轉了四分之一圈,攝影機察覺到畫面向左滑了一點——再把這些拼接成對機器人位姿的猜測,也就是它的位置以及朝向哪個方向。單看每一次測量幾乎都微不足道,但一環扣一環地串起來,就能重建出整段旅程。問題在於,每一小步都帶著一點小誤差,而由於里程計是把一步疊加在另一步之上,這些誤差會越積越多:機器人走得越久,估計就會越慢慢偏離真相,正因如此,里程計通常要在漂移變得太大之前,用 GPS 或認得出來的地標這類外部參照來加以校正。

里程計之所以重要,是因為它是機器人對自身運動最廉價、也最隨時可用的感知——它不需要衛星、不需要地圖、不需要外部信標,只需關注自己運動的部件。它是那根可靠的主心骨,填補在那些更稀少、更可信的定位之間的空檔,讓機器人即便身處外界什麼都無法告知它的地方,也能有一種平滑、連續的對自身所在的感覺。

一台倉庫機器人離開充電樁,沿著三條通道滾動前行。室內沒有 GPS,它便數著自己車輪轉了多少圈、轉過多少角度,把每一小步移動累加起來,從而知道自己現在「越過了兩條通道、往裡走了四米」——全憑觀察自己的車輪。

在衛星夠不到的室內,機器人依靠里程計來記錄自己的運動。

里程計估計的是自上一刻以來位姿發生了怎樣的變化,而不是在地圖上的絕對位置。它告訴你走過的路徑是什麼形狀;要把這條路徑釘到真實世界的座標上,仍然需要一個外部參照。

又稱
odometric estimation里程估计里程推算