定位、建圖與 SLAM

因子圖

因子圖是一張整潔的圖畫,它把你想求解的東西,和約束這些東西的一條條證據,乾淨地分了開來。它是一張有兩類節點、且兩類永不混在一起的圖——這正是「二部」的意思。一類是變數,也就是你要求解的未知量:機器人在每一時刻所在的位置,以及每個地標在世界中的所在。另一類是因子,也就是一條條證據:每個因子都是從某次測量裡抽出的一條小規則,比如「輪子說我走了一公尺」,或者「攝影機說那棵樹在我左前方三公尺處」。一個因子只連向它真正約束到的那些變數,每有這樣一條約束,就畫一條線。

這張圖畫的妙處在於,它一眼就能讓你看清究竟誰依賴於誰。一個寫著「我在第 12 個位姿處看到了第 7 號地標」的因子,只連接這兩個節點;對於樓那頭第 50 個位姿,它什麼也沒得說。於是這張圖是稀疏的——大多數變數彼此相距很遠、互不相連——而正是這種稀疏,讓 SLAM 求解器能夠跑得很快,因為它可以只對一小簇一小簇緊密相關的東西推理,而不必面對一整團亂麻。每個因子還會悄悄告訴你它對自己那條規則有多篤信,於是當各片證據彼此矛盾時,求解器就知道該信誰。

因子圖和位姿圖是近親:位姿圖本質上就是一種變數只有機器人位姿的因子圖,而更完整的因子圖還把地標也當作變數,並讓許許多多種證據——輪式里程計、攝影機觀測、GPS 定位、一個慣性感測器——都作為不同的因子,插進同一張圖裡。正是這套共通的語言,讓因子圖成了現代 SLAM 的公共骨架:任何能把自己的測量表述成一個因子的感測器,都能加入這場對話。

在紙上畫出來,一個小小的 SLAM 問題就變成了一串代表機器人位姿和地標的圓圈、以及一個個代表每次測量的小方塊,再用線標出哪個方塊約束著哪些圓圈——在動手算任何一個數字之前,整個問題的地圖就已經擺在眼前。

圓圈是未知量,方塊是證據——線條標明誰約束著誰。

「二部」不過是說節點分成兩組,而每條邊都跨在兩組之間、絕不在同一組內部相連——在這裡,每條線都把一個變數連到一個因子,絕不會把變數連到變數。

又稱
factor graph SLAM概率因子图機率因子圖