SLAM——無人機、VR、AR、機器人定位技術介紹

一、關於SLAM

同步定位與地圖構建SLAMSimultaneous localization and mapping)是一種概念:希望機器人從未知環境的未知地點出發,在運動過程中通過重複觀測到的地圖特徵(比如,牆角,柱子等)定位自身位置和姿態,再根據自身位置增量式的構建地圖,從而達到同時定位和地圖構建的目的。SLAM主要用於解決移動機器人在未知環境中運行時定位導航與地圖構建的問題。SLAM既可以用於2D運動領域,也可以應用於3D運動領域。SLAM 技術涵蓋的範圍非常廣,按照不同的傳感器、應用場景、核心算法,SLAM 有很多種分類方法。按照傳感器的不同,可以分為基於激光雷達的 2D/3D SLAM、基於深度相機的 RGBD SLAM、基於視覺傳感器的Visual SLAM(vSLAM)、基於視覺傳感器和慣性單元的 Visual Inertial Odometry( VIO)

SLAM——無人機、VR、AR、機器人定位技術介紹

SLAM——無人機、VR、AR、機器人定位技術介紹

二、SLAM技術核心

要明白SLAM技術,就要知道:怎麼定位?如何構圖?怎麼規劃路徑最好?就如同我們去一個陌生的地方時,會情不自禁的想:我在哪兒?我周圍是什麼?我怎麼更快的到達目的地?SLAM就是試圖解決恢復觀察者自身與周圍環境的相對空間關係。“我在哪?”對應的就是定位問題;“我周圍是什麼?”對應的就是自身與周圍環境的建圖問題;而“我怎麼更快的到達目的地?”就是對應的路徑規劃問題。

SLAM——無人機、VR、AR、機器人定位技術介紹

三、SLAM的難點

我們需要通過分析傳感器的測量信息做個定性的分析。激光雷達或者 RGBD 相機可以直接獲取環境的點雲。對於點雲中的一個點,它告訴我們在某個方位和距離上存在一個障礙點。而視覺傳感器獲取的是灰度圖像或者彩色圖像。對於圖像中的一個像素,它只能告訴我們在某個方位有障礙點、障礙點周圍的表觀(local appearance)如何,但它不能告訴我們這個障礙點的距離。要想計算該點的距離,需要把相機挪動一個位置再對它觀察一次,然後按照三角測量的原理進行推算。

原理上很清晰,實際做起來並不簡單。首先需要在兩幅圖像中尋找點的對應,這涉及到特徵點的提取和匹配、或者準稠密點之間的匹配。計算機視覺發展到今天,其實還不存在性能和速度上很好滿足 vSLAM 的特徵提取和匹配算法。常見的特徵點提取算法,性能上大致可以認為 SIFT>SURF>ORB>FAST,效率上可以認為 FAST>ORB>SURF>SIFT(大於號左邊代表更優。性能主要包括匹配精度、特徵點的數量和空間分佈等)。為了在性能和效率上取得折中,通常採用 FAST 或者 ORB,只能捨棄性能更好的 SIFT、SURF 等。

其次,匹配點的圖像座標與空間座標之間的關係是非線性的,例如 2D-2D 點的對應滿足對極幾何、2D-3D 點的對應滿足 PnP 約束。這些匹配數量較多,前後兩幀圖像中一般有幾十至數百的匹配。這些匹配會引入眾多約束關係,使得待估計變量的關係錯綜複雜。為了得到一個較優的估計,通常需要建立優化問題,整體優化多個變量。說起來這無非是一個非線性最小二乘優化問題,但實現起來並不簡單,因為存在非線性約束、約束數量很多、存在誤差和野值點,並且要將計算時間控制在允許範圍。目前廣泛採用關鍵幀技術,並且通過很多方法來控制問題規模、保持問題的稀疏性等。

前面分析了 vSLAM 的兩個困難。前者導致了前端的特徵跟蹤不易,後者導致了後端的優化不易。想做出一個高效率、魯棒的 vSLAM 系統還是一個非常有挑戰的任務。效率方面,SLAM 必須是實時運行的。如果不能做到實時,就不能稱作 SLAM。不考慮實時性,採用從運動恢復結構(structure-from-motion)效果會更好。魯棒性方面,一個脆弱的系統會導致用戶體驗很差,功能有限。

四、SLAM的一般過程

SLAM通常包含幾個過程,這些過程的最終目的是更新機器人的位置估計信息。由於通過機器人運動估計得到的機器人位置信息通常具有較大的誤差,因而,我們不能單純的依靠機器人運動估計機器人位置信息。在使用機器人運動方程得到機器人位置估計後,我們可以使用測距單元得到的周圍環境信息更正機器人的位置。上述更正過程一般通過提取環境特徵,然後在機器人運動後重新觀測特徵的位置實現。SLAM的核心是EKF。EKF用於結合上述信息估計機器人準確位置。上述選取的特徵一般稱作地標。EKF將持續不斷的對上述機器人位置和周圍環境中地標位置進行估計。SLAM的一般過程如下圖所示:

SLAM——無人機、VR、AR、機器人定位技術介紹

當機器人運動時,其位置將會發生變化。此時,根據機器人位置傳感器的觀測,提取得到觀測信息中的特徵點,然後機器人通過EKF將目前觀測到特徵點的位置、機器人運動距離、機器人運動前觀測到特徵點的位置相互結合,對機器人當前位置和當前環境信息進行估計。下圖是估計的詳細過程。

SLAM——無人機、VR、AR、機器人定位技術介紹

上圖中三角形表示機器人,星號表示路標;機器人首先使用測距單元測量地標相對於機器人的距離和角度。

SLAM——無人機、VR、AR、機器人定位技術介紹

然後進行開始進行運動,並且到達一個新的位置,機器人根據其運動方程預測其現在所處於的新的位置。

SLAM——無人機、VR、AR、機器人定位技術介紹

在新的位置,機器人通過測距單元重新測量各個地標相對於機器人的距離和角度,測量得到的距離和角度與上述預測結果可能並不一致,因而,上述預測值可能並不是機器人準確位置。

SLAM——無人機、VR、AR、機器人定位技術介紹

在機器人看來,通過傳感器獲得的信息相對於通過運動方程得到的信息更為準確,因而,機器人將通過傳感器的數據更新對機器人位置的預測值,如上圖中實線三角形所示(虛線為第一步中通過運動信息預測的機器人位置)。

SLAM——無人機、VR、AR、機器人定位技術介紹

經過上述結合,我們重新估計得到的新的機器人位置如上圖實線三角形所示,但由於測距單元精度有限,因而,此時,機器人可能實際處於上圖點狀三角形位置,但此時估計結果相對於初始預測結果已經有明顯的改善。

五、SLAM應用領域

1)、機器人。SLAM 可以用於生成環境的地圖,基於這個地圖,機器人執行路徑規劃、自主探索、導航等任務。

2)、虛擬現實Virtual Reality(VR)、增強現實Augmented Reality(AR)以及混合現實Mix Reality(MR)。根據 SLAM 得到地圖和當前視角對疊加虛擬物體做相應渲染,這樣做可以使得疊加的虛擬物體看起來比較真實,沒有違和感。

3)、無人機。可以使用 SLAM 構建局部地圖,輔助無人機進行自主避障、規劃路徑。

4)、無人駕駛。可以使用 SLAM 技術提供視覺里程計功能,然後跟其他的定位方式融合。

附註:本想將SLAM技術的技術原理也加上,但是由於涉及的知識較多,也比較複雜,加上去很可能大家都一臉懵逼,故而刪減了枯燥的數學原理,如果感興趣的話,可以針對某個點自行去谷歌。對代碼感興趣的朋友可以去了解下谷歌的Google openCV,著重瞭解圖像前端,優化後端,閉環檢測這三個過程。


分享到:


相關文章: