王進祺 高然 董瑞虎 常浩帛 陳熙文
摘要:針對在過往SLAM研究中使用激光雷達傳感器進行實時定位與地圖構建的各項缺點,如傳感器成本過高、缺少有效的回環檢測能力等問題,提出了在Linux系統下搭建基于雙目相機的SLAM系統來改善這些問題。研究采用的SLAM系統是ORB-SLAM系統,是一個它比較完整,不僅包含有視覺里程計、跟蹤特性,還具有回環檢測的功能。
關鍵詞:雙目相機;ORB-SLAM2;實時定位
同步定位與地圖構建在國外已經有了三十多年的研究歷史,但國內關于SLAM系統的文獻以及相關期刊雜志依然很少;并且SLAM的應用是隨著時代的進步,越來越需要的,比如無人駕駛的很多交通工具,無論是飛機、汽車亦或是無人機,還是家庭中所廣泛應用的的掃地機器人、智能服務機器人等大多數都是基于SLAM系統的基礎上研究的。可以使用的傳感器也有許多種,直至今日,激光雷達傳感器依然是在市面上應用較為廣泛的傳感器,然而激光雷達傳感器的成本依然非常昂貴的,并且使用激光雷達也是非常復雜的,因此現在越來越多的人開始研究用視覺傳感器來應用在此領域中。而ORB-SLAM系統正好是通過雙目相機傳感器來進行研究的一種關于SLAM的比較完善的系統,與激光雷達相比較而言,它不僅結構較為簡單,成本價格也較為低廉。
該系統的軟硬件包含:一臺運行內存約8GB的筆記本電腦、一個USB接口的雙目相機、ubuntu16.04及其以上版本的Linux系統和ROS Kenetic軟件平臺。在Linux系統中搭建ROS環境,在其創建的一個工作空間即src文件下安裝Pangolin、 OpenCV、Eigen3和ORB-SLAM2等四個數據庫。Pangolin被用作可視化以及用戶的界面,OpenCV是有著很多的開源算法的一種圖像處理的算法庫,其安裝是為了后期對圖像進行處理、Eigen3是各種矢量運算和各種矩陣的數據庫。
該雙目相機的SLAM系統的原理分為五個模塊,五個模塊各有分工而又為下一模塊的進行做好了鋪墊:
第一步:讀取視覺傳感器即雙目相機所掃描到的信息,主要讀取并預處理雙目相機的圖像信息。若在機器人上,會有其他信息如關于慣性傳感器、碼盤等信息被讀取。這是對雙目相機的數據的讀取。
第二步:通過視覺里程計估算毗鄰的圖像之間雙目相機的移動和被掃描到的局部地圖的大致樣子等信息。這即是視覺里程計的工作。
第三步:在視覺里程計的后端進行對視覺里程計測量到的雙目相機的位姿信息和經過回環檢測的信息進行一系列的非線性優化,就會收到全局移動的軌跡和大致地圖。
第四步:將通過回環檢測得到的相機的移動軌跡反饋給視覺里程計的后端,再由視覺里程計的后端進行處理。若在此處未能檢測到相應的軌跡信息,則不會進行信息的反饋,從而直接進入第五步。
第五步:相應的地圖將會被通過一系列讀取、預處理、并進行優化后,將其構建出來。
其中設計非線性優化和回環檢測兩個環節是為了解決視覺里程計工作時的漂移問題,該系統的運行原理圖如下圖1所示:
設計該系統時,大致分為四步,總體設計流程圖如圖2所示
搭建ROS平臺:首先更新Ubuntu系統的軟件列表,然后下載安裝git,其從Github上將項目克隆至本地,接著通過Cmake的安裝進行程序的編譯,安裝與Ubuntu16.04對應的軟件ROS Kenetic ,最后搭建ROS平臺,用于對ORB-SLAM2系統的在線實時運行。
各種依賴項的安裝測試:ROS安裝成功后,創建一個工作空間,后續工作均在此工作空間內完成,在剛剛建立好的工作空間下安裝各種依賴項,如Pangolin、 OpenCV、Eigen3和ORB-SLAM2四個數據庫,安裝ORB-SLAM2之前,還需要安裝一個索引圖像的C++數據庫DBoW2以及一個基于C++算法的框架g2o,它們的編譯與ORB-SLAM2統一編譯的,這里很重要的一點,每次在GitHub上克隆相應項目后都會測試其是否被成功地安裝上去。
數據集單目例子的測試:接下來就是對該系統進行測定,測試分單目的例子和ROS例子兩方面進行,單目例子即首先在網上下載TUM數據集進行測試,先下載TUM的數據集,解壓到本地以后,打開終端,輸入相關命令,這時還需要將命令中帶有的數據集名稱的類型做相應的修改,測試結果圖如圖3中a所示,
連接雙目相機后的實時測試:ROS例子即將雙目相機通過USB接口接入電腦,更改ORB-SLAM2訂閱的話題,即修改ORB-SLAM2項目的源代碼,使ORB-SLAM2訂閱的話題其與雙目相機usb_cam節點發出的話題相一致,然后打開ROS核,啟動雙目相機的節點,再運行ORB-SLAM2,結果如圖3中的b所示。Map Viewer中紅色點表示的是追蹤捕捉到的特征點,藍色方框的軌跡是裝置移動的路徑,Current Frank中掃描的綠色小方框是啟用雙目相機的節點后追蹤捕捉到的特征點。
本文介紹了關于雙目相機SLAM系統設計的基本組成、基本原理和該系統搭建的基本過程和實驗結果。研究的目的是解決激光雷達傳感器價格較為昂貴的問題,從而引進了視覺傳感器即雙目相機的使用,基于ORB-SLAM2算法在Linux系統下搭建了此SLAM系統,并通過實驗驗證了該系統的可實施性,該系統可以通過雙目相機實時采集到數據,然后將得到的圖像信息經過一系列處理后傳遞給PC端。該系統說明采用價格低廉的雙目相機被用來替代激光雷達傳感器的不足,且ORB-SLAM2系統的回環檢測是其特有的,回環檢測環節可以極大的減小建圖過程中所產生的誤差。該研究完成了該系統的設計進而驗證了系統的可行性。
參考文獻:
[1]沈燕芬,張小紅,朱鋒.ORB-SLAM2車載雙目視覺的自主導航性能評估[J].導航定位學報,2018,6(02):29-35.
[2]陸建偉,王耀力.基于ORB-SLAM2的實時網格地圖構建[J].計算機應用研究,2019,36(10):3124-3127+3131.
[3]侯榮波,魏武,黃婷,鄧超鋒.基于ORB-SLAM的室內機器人定位和三維稠密地圖構建[J].計算機應用,2017,37(05):1439-1444.