視覺 SLAM
視覺 SLAM,就是用普通的攝影機當主要的「眼睛」,來完成「一邊搞清楚自己在哪、一邊建出一張地圖」這整套把戲。當攝影機在場景裡移動時,同一個物體——一個窗角、一張海報的邊緣、地板上的一個斑點——會一格又一格地出現,但每次都挪動一點點。透過追蹤這些視覺特徵在畫面裡如何滑動,機器人就能反推出兩件同時發生的事:攝影機自己一定是怎麼動的,以及這些特徵在空間裡究竟落在哪裡。這跟你把頭探出火車窗外時用的,是同一種本能:近處的東西飛快地掠過、遠處的東西緩緩地移動,你的大腦就從這種視差裡,同時讀出了你的速度和這個世界的佈局。
用攝影機來做這件事很有吸引力,因為攝影機便宜、輕巧,而且能傾瀉出海量的細節——單單一張影像裡就藏著成千上萬個可追蹤的點,而正是這份豐富,也驅動了迴環偵測,因為一個地方可以憑它的樣子被重新認出來。另一面則是:一台普通攝影機測得到方向,卻測不到距離——它告訴你某個點位於一條射線上的某處,卻說不出沿這條射線有多遠。視覺 SLAM 透過從兩個視角觀察同一個特徵、再做三角測量來找回深度,就像兩隻眼睛給你深度感一樣——這也正是為什麼「讓攝影機動起來」,或者「並排用兩台攝影機」,才能解鎖一張帶真實尺度的地圖。
由於它依賴外觀,視覺 SLAM 在光線充足、紋理豐富、到處是鮮明特徵的地方表現最好,而在面對一面空白的白牆、身處黑暗中、或者在快速轉身時畫面糊成一片時表現最差。真實系統往往會把攝影機和一個能感受加速度與旋轉的慣性感測器融合起來,給它撐腰,這樣當畫面短暫地變得沒有資訊時,運動估計還能繼續撐著,而不至於崩掉。
一部手持運行視覺 SLAM 的手機,能讓一個擴增實境應用把一盞虛擬檯燈釘在你真實的書桌上:透過追蹤即時影片裡的視覺特徵,它把手機的位姿摸得足夠清楚,於是當你繞著它走動時,那盞燈還能牢牢地黏在原處。
被追蹤的特徵,把一部手機攝影機變成了一個能自我定位、又能測繪世界的感測器。
單單一台普通攝影機,能復原世界的形狀,卻復原不出它真實的大小——透過同一隻鏡頭看,一套火車模型場景和一個真實的場景可以一模一樣;要釘住尺度,得靠第二台攝影機、一個深度感測器,或者一段已知的真實世界距離。