ORB-SLAM是一種基於ORB特征的三維定位與地圖構建算法(SLAM)[1]。該算法由Raul Mur-Artal,J. M. M. Montiel和Juan D. Tardos於2015年發表在IEEE Transactions on Robotics。ORB-SLAM基於PTAM架構,增加了地圖初始化和閉環檢測的功能,優化了關鍵幀選取和地圖構建的方法,在處理速度、追蹤效果和地圖精度上都取得了不錯的效果。要注意ORB-SLAM構建的地圖是稀疏的。
ORB-SLAM一開始基於monocular camera,后來擴展到Stereo和RGB-D sensor上。作者好像還會做Semi-dense mapping的擴展。作者的開源代碼都在GIT上[2]。
ORB-SLAM算法的一大特點是在所有步驟統一使用圖像的ORB特征。ORB特征是一種非常快速的特征提取方法,具有旋轉不變性,並可以利用金字塔構建出尺度不變性。使用統一的ORB特征有助於SLAM算法在特征提取與追蹤、關鍵幀選取、三維重建、閉環檢測等步驟具有內生的一致性。
ORB-SLAM架構如下:
ORB-SLAM利用三個線程分別進行追蹤、地圖構建和閉環檢測。
一、追蹤
- ORB特征提取
- 初始姿態估計(速度估計)
- 姿態優化(Track local map,利用鄰近的地圖點尋找更多的特征匹配,優化姿態)
- 選取關鍵幀
二、地圖構建
- 加入關鍵幀(更新各種圖)
- 驗證最近加入的地圖點(去除Outlier)
- 生成新的地圖點(三角法)
- 局部Bundle adjustment(該關鍵幀和鄰近關鍵幀,去除Outlier)
- 驗證關鍵幀(去除重復幀)
三、閉環檢測
- 選取相似幀(bag of words)
- 檢測閉環(計算相似變換(3D<->3D,存在尺度漂移,因此是相似變換),RANSAC計算內點數)
- 融合三維點,更新各種圖
- 圖優化(傳導變換矩陣),更新地圖所有點
作者提供了ORB-SLAM在New College Data[3]上的時間統計,如下圖。
1. 追蹤部分,平均每幀約30毫秒,基本達到了30fps。特征提取速度是非常快的,平均11毫秒左右,非常適合於實時SLAM。姿態估計稍微耗時一些,平均需要20毫秒,特別是姿態優化需要耗費16毫秒的時間。
2. 地圖構建部分,平均每關鍵幀約385毫秒。其中生成新的點約70毫秒,Local BA約300毫秒,相對還是比較耗時的。不知道這兩部分還有沒有優化的空間。
[1] ORB-SLAM: A Versatile and Accurate Monocular SLAM System
[2] https://github.com/raulmur/ORB_SLAM2
[3] http://www.robots.ox.ac.uk/NewCollegeData/
該系列的其它文章: