定位、建圖與 SLAM

位姿圖最佳化(圖優化 SLAM)

位姿圖最佳化,是一種尋找機器人最可能走過的路徑的方法:它把整段旅程當作一張由相連節點構成的網絡,再輕輕地挪動每個節點,直到所有連接都盡可能地「滿意」。每一個「位姿」,是機器人在某一時刻所在位置及朝向的一張快照,畫成一個點。在兩個點之間,機器人畫一條邊,記錄一條約束:一種帶測量的信念,比如「我大約往前走了兩公尺、稍微向左轉了一點,才從這裡到了那裡」。把許多位姿串在一起,就得到一張圖——一串由這些相對運動的邊連接起來的點。

大多數邊連接的,是一個位姿和緊隨其後的那一個,也就是逐步行駛的尋常記錄。但真正特殊而有力的邊,是迴環偵測加進來的那些:「這個晚得多的位姿,其實又回到了那個早得多的位姿所在的同一個地方。」此時這張圖就被過度約束了——約束比可以鬆動的餘地還多——而它們會彼此衝突,因為每一次測量都帶著一點誤差。最佳化,就是把所有位姿同時滑動,挪到那個唯一的佈局:讓被違背的約束盡可能地少、違背的程度盡可能地小,就像一團亂糟糟的彈簧,最終安頓成總張力最低的那個形狀。每條邊都是一根彈簧,答案就是整張網靜止下來時的姿態。

這種「圖 SLAM」的視角之所以流行,是因為它把一個雜亂的問題拆成了兩件乾淨的活:先搭建這張圖(決定哪些位姿相連、連得有多緊),再求解它(找出最佳的佈局)。求解這一步可以借助快速而成熟的數學,因為這張圖大體上是局部的——每個位姿只跟少數幾個鄰居相連——所以即便有成千上萬個位姿,也能在不到一秒裡被平衡好。

一台配送機器人把整個園區測繪成一條由四千個位姿組成的鏈。當它認出一小時前離開的那個大堂時,便加進一條迴環邊;最佳化器隨即把全部四千個位姿重新平衡,讓大堂與它自己對齊,一舉把整張地圖都擺正。

只要加進一條新約束,整張位姿之網就會重新安頓成一致的形狀。

每條邊攜帶的不僅是一個相對測量值,還帶著它有多可信的分量;最佳化器會更倚重可信的邊、讓不太牢靠的邊多彎一些,於是最終的佈局會尊重「哪些約束更該勝出」。

又稱
graph SLAMpose graph图 SLAM位姿图圖 SLAM