文/楊承忠
隨著虛擬現實和無人駕駛等技術的發展,同時定位與地圖創建(SLAM)受到越來越多的關注,而且在機器人領域一直被認為是實現移動機器人完全自主導航的關鍵。本文主要對目前主流的采用特征點法的ORB-SLAM在選取關鍵幀環節做了改進,使系統具有更好的魯棒性。
2007年由Davison等首次完成了在單目攝像頭上的SLAM問題求解,完成了第一個基于純單目視覺的MonoSLAM系統。隨之Klein等也完成了第一個基于關鍵幀的PTAM系統。直到現在的ORB-SLAM系統仍然采用了PTAM的算法框架。
單目視覺slam根據多視圖幾何原理,恢復出每幀圖像對應的相機位姿P1...Pn和場景的三維結構X1...Xn。通過觀測方程得到空間點在相機圖像上的投影量hij:

其中nij表示觀測噪聲,然后通過優化目標函數:

來得到不同圖像中對應于同一場景點的匹配。不過在圖像的求解過程中,必須假設圖像觀測點符合高斯分布。
視覺slam的整體框架可以分為四個部分,首先是前端的圖像采集與特征點的檢測,然后根據關鍵幀構建視覺里程計,后端通過非線性優化和回環檢測,最后構建全局地圖。目前的視覺slam主要有基于特征點法和直接法。ORB-SLAM使用ORB特征子來進行圖像匹配,具有較高的魯棒性,更容易進行重定位。但是計算量比較大,而且對光照和圖像質量比較敏感,在弱紋理環境下容易失效。圖像檢測的特征子只使用了環境的極少數信息,只能構建出稀疏的環境地圖,忽略了在圖像中占據大量部分的線段與平面信息。李海豐[7]等融合了環境中點、線、面特征構建包含更多信息量的環境地圖。
由于特征點檢測與匹配過程總會存在一定誤差,導致相機位姿估計不精確,而且在相機運動過程中,幀間運動估計誤差會造成更大的累計漂移,減小這種誤差即成為了研究重點。通過優化關鍵幀部分,選擇位置估計準確性較高關鍵幀能保證系統定位精度,并提高了構建全局地圖效率。
為了減小系統運算和存儲量,關鍵幀部分優化的整個流程如圖1所示。初始時選擇準確率更高的n個關鍵幀來計算相機的位姿,從而提高定位精度,并丟棄哪些關聯性不強的關鍵幀,以減小后期構建全局地圖時運算量。
(1)在初始化時,選擇前n個包含特征點數多與一個閾值量的幀來估計相機位姿,從而最優一個初始相機姿態;
(2)在創建關鍵幀后必須至少經過n個幀再創建一個關鍵幀,并加入約束條件:
1.當前幀至少能看到k個地圖點;
2.位置估計準確性較高;
3.計算一個幀間運動距離,其距離必須大于D。
(3)如果檢測到的特征點過少,當參考幀與當前幀觀測到的共同路標點數少于一定數量時,創建一個新的關鍵幀。
(4)在創建地圖時,采用RANSAC算法,去除冗余關鍵幀,使系統負載變小。
本文在視覺SLAM關鍵幀選擇中做了改進,減小了運算量和系統負載。僅采用一個攝像頭作為外部傳感器進行定位與建圖仍然是一個具有挑戰性的領域。隨著無人駕駛和虛擬現實等技術的發展,視覺slam也得到快速發展,但是實時性和挑戰更復雜的環境還需要深入研究。

圖1