浅谈ORB-SLAM3
??ORB-SLAM3一經提出便廣受好評(與上一代時隔3年,2020年推出),不僅適用范圍擴大,而且精度、速度、魯棒性都大大得到擴展。ORB-SLAM3還是延續了ORB-SLAM1、2的一貫思路。但整體來看,3和2的區別要遠大于2和1的區別。這篇文章主要介紹3的一些改進。ORB-SLAM3兼容純視覺、視覺慣性融合、構建多地圖。
??先把3的系統結構圖擺出來:
??從系統結構圖上可以看出,ORB-SLAM3引入了IMU模塊,同時增加了ATLAS部分,其余沒有太大的變化。
??下面介紹一下ORB-SLAM3新增加的一些特點(很多特點不是ORB-SLAM3首創,但是將其做了融合):
??1.引入IMU與視覺結合(VO→VIO),精度更好。在IMU初始化階段引入MAP(最后驗概率估計),初始化方法實時快速進行(IMU的初始化目的是為了給慣導的變量提供良好的初始值:機體速度、重力方向、還有IMU的偏置),魯棒性和速度上很大提升。適用于大小場景,室內/外。
??2.在place recognition處做改進,實現多子地圖系統(multi-maps)。跟丟的時候重建子地圖,回環的時候和之前的子地圖進行合并,
??3.ORB-SLAM3 是第一個可以重用歷史所有算法模塊的所有信息的系統(第一個同時利用短期、中期、長期數據進行數據關聯的系統)
??4.引入Atlas,Atlas代表一系列不連續地圖,可用于所有建圖過程。實現了用不同時間數據構建地圖。Atlas可應用于重定位,閉環檢測和地圖融合。Atlas中維護兩個地圖(active map和non-active map),active map可以定位新的關鍵幀,并在local mapping中不斷更新該地圖。若active-map在一段時間內,沒有重定位等事件就會變成non-active map,新的關鍵幀會被加到active-map中
??5.引入相機模型,提供了針孔模型和魚眼模型。
????注:想對相機模型有個快速了解,可以看看這個:相機模型(camera model)
??6.將雙目相機看作為兩個單目相機。面向未矯正的雙目SLAM,適用面更廣
??7.為了適應于慢速條件下的地圖初始化,令其快速收斂。提出一種新的尺度優化方法,這種方法基于改進的單慣導的優化方法,其中插入所有關鍵幀,但尺度和重力方向是唯一的估計參數。
??8.提出了一個在長期和混合地圖數據關聯的時候改進召回率的新場景重識別算法:設置多個跟蹤丟失狀態。設定跟蹤少于15個點的時候進入短期失敗狀態。短期失敗利用IMU讀書估計位姿,將MP投影到相機位姿上,再在圖像窗口中做匹配。匹配成功則跟蹤成功。5s內沒恢復,進入長期失敗狀態,重新進行VIO的初始化構建一個地圖作為active map(Atlas的作用),以上整個過程由tracking線程完成
??9.VIO模式下,在優化中加入慣性殘差來估計剛體速度和IMU偏差
??10.回環檢測線程工作方式轉變:當加入一個新的關鍵幀時,該線程在active-map和Atlas地圖中檢測公共區域。如果該公共區域屬于active-map,進行回環矯正(與之前版本相同)。如果公共區域屬于其他地圖(Atlas中的離散地圖,即non-active map),則將兩者融合作為新的active-map。
??11.Altas使用詞袋模型建立關鍵幀數據庫,后續的重定位、回環檢測、地圖融合都要用到該庫(凡是要搜索之前的KF都要用到)
??12.ORB-SLAM3為了解決全圖優化工作量大的問題,使用滑動窗口思想,把關鍵幀及地圖點的滑動窗口作為優化變量
??實現思路:ORB-SLAM3保持以KF為基本的數據結構,但將地圖分為active-map和non-active-map。這部分的主要工作都是圍繞ATLAS完成。avtive可變成non-active,所有non-active得到保存。所以在后續的重定位部分,可以利用所有的歷史信息。另外引入了IMU模塊,需要對IMU信息進行處理(IMU融合、IMU初始化、IMU尺度改進)。其余整個識別過程與ORB-SLAM1基本相同。
??作者原文中提到的創新點有兩個(但我覺得不止兩個~):
??1.IMU初始化階段引入MAP
??2.place recognition部分(利用ATALS),與歷史數據結合,大大提高召回率。對重定位、回環檢測、地圖融合都會產生影響
ORB-SLAM3開源代碼網址為:
https://github.com/UZ-SLAMLab/ORB_SLAM3
補充說明:
??1.IMU的作用:IMU可以測得角速度和加速度,用于短時間內快速運動的位姿估計(彌補快速運動時相機運動模糊的缺點)。但IMU測量的量都會存在明顯漂移,位姿數據不可靠。所以IMU只是一個輔助作用。另外當圖像發生變化時,純視覺無法確定是自身移動還是外部變換,而IMU確定判斷自身狀態,得到結論。
系列相關參考文章:
ORB-SLAM介紹(無源碼版本)
ORB-SLAM2和ORB-SLAM的區別
參考文獻:
一文詳解ORB-SLAM3 (360doc.com)
【開源方案共享】ORB-SLAM3開源啦!
ORB-SLAM3整體梳理 - 知乎 (zhihu.com)
因作者水平有限,如有錯誤之處,請在下方評論區指正,謝謝!
總結
以上是生活随笔為你收集整理的浅谈ORB-SLAM3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ActiveMQ、RabbitMQ、Ro
- 下一篇: 二十、子程序设计(函数)