同時定位與建圖(SLAM)
同時定位與建圖,幾乎總是被簡稱為 SLAM,是機器人在同一時間同時解開兩個糾纏在一起的難題:一邊給一個它從未見過的地方畫地圖,一邊又在這張正在畫的地圖上隨時記著自己身處何處。想像你被矇上眼,扔進一座漆黑、陌生的房子裡,被要求既畫出它的平面圖,又在摸索前行的同時,在圖上標出自己的位置。你沒有一張地圖可以拿來給自己定位,也沒有一個固定的位置可以據以畫圖——可你偏偏要把兩樣都做出來,而且每一樣都倚靠著另一樣。
這種循環依賴正是全部的難處所在,卻也是讓 SLAM 得以成立的訣竅。機器人一邊移動,一邊認出周圍的特徵——這裡一個角、那裡一根柱子——並記下每一個特徵離它多遠、在哪個方向。憑著這些方位,它既能修正自己「以為身在何處」,又能把這些特徵釘到它正在生長的地圖上。兩個估計互相撐著對方,就像兩個人靠在一起、彼此穩住身形:對自己位置稍好一點的判斷,會讓地圖更清晰;而稍好一點的地圖,又會讓你對自己位置的判斷更清晰。麻煩在於,每走一步都會悄悄滲進一點小誤差,並不聲不響地累積起來,於是地圖會慢慢扭曲變形。
對治這種漂移的解藥,是 SLAM 系統極為看重的一個時刻,叫作迴環閉合:當機器人重新走到一處它從前來過的地方、並認出了它,這一認出便把累積的誤差「啪」地拉回正軌,一舉把整張地圖收緊——就像拿一處你早已信得過的地標來核對你的工作,會把這中間所有的猜測一併糾正過來。SLAM 在它現代的各種形式中——在光達 SLAM 裡用雷射掃描儀,在視覺 SLAM 裡用普通攝影機——正是掃地機器人、自動駕駛汽車、無人機,以及那些在你客廳裡擺上虛擬家具的擴增實境應用,引擎蓋之下的技術。
一台新的掃地機器人第一次探索你的家時,手裡根本沒有地圖。它四處遊走,一邊發現牆、一邊把牆畫下來,並在這些牆之間追蹤自己的路徑;當它繞了一圈、回到出發時的那道廚房門口、並認出了它,整張地圖便俐落地「方正」了起來——那一認出,正是迴環閉合在起作用。
一邊建地圖、一邊在地圖上找到自己,兩件事同時進行——而起步時既沒有地圖,也沒有給定的位置。
人們常把 SLAM 想成兩半協同工作:一個前端,負責讀取原始感測器資料、認出特徵和重訪過的地點;以及一個後端,負責把所有這些觀測算成一張最一致的地圖和一條最一致的軌跡。