在SLAM研究中,我們通常需要在各數(shù)據(jù)集上測試各個方案的性能情況。如下主要對表1中6個視覺SLAM方案進行相關(guān)測試,測試其在不同場景、要求下的精度和魯棒性,并給出最終方案選型。
【由于時間、場地等原因,整合前人測試結(jié)果,在此附上鏈接,謝謝大神的分享!】
**
開源SLAM方案選型:
**
**
數(shù)據(jù)集:
**
一、ORB-SLAM2
檢測流程:Kinect生成地圖【地圖主要可見的有關(guān)鍵幀(包括相機的pose,相機的內(nèi)參,ORB特征),3D的地圖點( 空間中3D位置,法線方向,ORB的描述子),詞袋向量,共視圖等】 → 保存地圖 → 加載地圖和重定位
缺點:1、不能解決實際問題。它基于特征點法,建的圖是稀疏的,只能滿足定位需求,而無法提供導航、避障、交互等諸多功能。而且目前還沒有開放存儲和讀取地圖后重新定位的功能。
2、受光照和車輛、行人等動態(tài)物體的影響太大
后續(xù)工作:對前端數(shù)據(jù)進行軌跡的優(yōu)化和回環(huán),稠密建圖
【自我備注:1、保存稀疏地圖的MapPoint和KeyFrame成.bin格式 ;2、如果保存成pcd格式,那么關(guān)鍵幀與關(guān)鍵點之間的關(guān)系沒有辦法保存。。。即pcd保存的地圖信息并不完整】
二、VINS MONO
參考博文:https://blog.csdn.net/Darlingqiang/article/details/80689123
實現(xiàn)原理:用緊耦合方法實現(xiàn)的,通過單目+IMU恢復(fù)出尺度
目標:AR
整體框架:
1、Measurement Preprocessing:觀測值數(shù)據(jù)預(yù)處理,包含圖像數(shù)據(jù)跟蹤IMU數(shù)據(jù)預(yù)積分;
2、Initialization:初始化,包含單純的視覺初始化和視覺慣性聯(lián)合初始化;
3、Local Visual-Inertia BA and Relocalization:局部BA聯(lián)合優(yōu)化和重定位,包含一個基于滑動窗口的BA優(yōu)化模型;
4、 Loop detection and Global Pose Graph Optimization:回環(huán)檢測;全局圖優(yōu)化,只對全局的位姿進行優(yōu)化;
代碼解讀:
VINS代碼主要包含在兩個文件中:
1、feature_tracker 接收圖像,使用KLT光流算法跟蹤
2、vins_estimate 包含相機和IMU數(shù)據(jù)的前端預(yù)處理(也就是預(yù)積分過程)、單目慣性聯(lián)合初始化(在線的標定過程)、基于滑動窗口的BA聯(lián)合優(yōu)化、全局的圖優(yōu)化和回環(huán)檢測
vins主要就是兩個節(jié)點:
1、一個節(jié)點算前端,為feature_tracker_node.cpp
2、另一個節(jié)點算后端,為estimator_node.cpp
三、ORB_SLAM2、VI ORB SLAM2 、 VINS Mono對比實驗
參考鏈接:http://www.liuxiao.org/2018/02/vi-orb-slam2-與-vins-對比實驗/
主要指標:均方根誤差
實驗結(jié)果:
1、ORB 與 VI ORB 對比
由表可以看出:
1)雙目 VIO 比單目 VIO 效果要更好也更穩(wěn)定;
2)原始 VO 的優(yōu)化已經(jīng)比較徹底,IMU 誤差項的加入給優(yōu)化結(jié)果造成了更多的不穩(wěn)定性,加入 IMU 的版本均不如原始雙目版本的精度。
2、VI ORB 與 VINS Mono 對比(開啟閉環(huán))
由表可以看出:
1)VINS Mono 精度與VIORB Mono/Stereo比,精度要高一些;
2)VI ORB 是不能完全跑過所有測試集的,特別是快速運動的 V2_03_difficult 測試集結(jié)尾階段會跟丟;而vins mono采用的光流跟蹤,不易跟丟。
3、VI ORB 與 VINS Mono 對比(關(guān)閉閉環(huán))
由表可以看出:
VINS Mono 對閉環(huán)依賴較大,在關(guān)閉閉環(huán)后,VINS Mono 的性能下降較多。
4、實驗小結(jié)
1)在沒有閉環(huán)情況下,VINS Mono 精度略低于 VIORB;而在有閉環(huán)情況下,二者精度差距不大。
2)由于開源 VIORB 版本并非官方實現(xiàn),與官方版本有很多不同之處,沒有辦法測試真實官方 VIORB 的性能;但基本可以看出對于VI ORB SLAM2 框架,IMU 的引入主要是在快速運動時能夠減少一些丟失,而精度上與 VO 相近或略有下降;
3)以光流作為前端的 VINS Mono 比描述子作為前端的 VIORB 具有更好的魯棒性,在快速運動時更不容易丟失。因此在類似于無人機這樣的場景,VINS 應(yīng)該是比 VIORB 更好的選擇;而對于精度要求較高、場景更大而運動較慢的場景,VIORB /ORB仍然更合適;
4)不論是否引入 IMU,雙目對于精度和魯棒性都會有一定的提升,VINS Fusion相比于vins mono,性能有所提升;{精度——慢速,雙目;魯棒——快速}
5)除前端差別較大外(比如光流與ORB、滑窗與局部地圖),雖然都是預(yù)積分,二者后端算法與實現(xiàn)亦有較大不同(李代數(shù)與四元數(shù)參數(shù)化不同、積分方式不同、g2o與ceres實現(xiàn)差別等),因此造成性能差異的原因較復(fù)雜。
5、 VI ORB-SLAM初始化與VINS初始化對比(將vi orb-slam初始化方法移植到vins中)
四、VIO:飛行機器人單目VIO算法測評
參考鏈接:https://blog.csdn.net/u012348774/article/details/81414264
核心思想:
全面的比較了各種公開的單目VIO算法(MSCKF、OKVIS、ROVIO、VINS-Mono、SVO+MSF和SVO+GTSAM);
在多個嵌入式平臺上(Laptop,Intel NUC,UP Board,ODROID)測試了各種單目VIO算法,并分析了算法的表現(xiàn);
3.選用EuRoC MAV數(shù)據(jù)集。
結(jié)論:SVO+MSF是計算效率最高的算法,而VINS-Mono是狀態(tài)估計精度最高的算法,ROVIO則處于兩者之間
五、VINS FUSION
推薦鏈接:https://blog.csdn.net/huanghaihui_123/article/details/86518880
發(fā)布信息:港科大 2019年1月12號
版本:
(1)單目+imu
(2)純雙目
(3)雙目+imu
(4)雙目+imu+GPS
和vins mono相比:
對比于VINS Mono,主要增加了global_fusion包,用來融合GPS以及視覺IMU定位的結(jié)果。代碼結(jié)構(gòu),之前的pose_graph節(jié)點更名為loop_fusion,之前的feature_track節(jié)點融合進vins_estimator內(nèi)部。vins_estimator中的factor殘差項增加了很多,主要是視覺的殘差項增加。
優(yōu)勢:可以靜止進行初始化;尺度信息不一定完全依靠IMU(有雙目),不會造成尺度不可關(guān)的情況;魯棒性上,雙目明顯優(yōu)于單目;
劣勢:由于視覺誤匹配等各種原因,雙目的精度會比單目差一點。
【自我備注:使用vinsfusion閉環(huán)跑KITTI的純雙目數(shù)據(jù)集,跑出來的output結(jié)果有vio.txt位姿文件,但這個沒有閉環(huán),閉環(huán)的數(shù)據(jù)在單獨的vio_loop.csv文件里,這個文件里的數(shù)據(jù)只有閉環(huán)幀,而且數(shù)據(jù)格式和真實軌跡不一樣,不是12列。如何將閉環(huán)的vio_loop.csv數(shù)據(jù)融合到未閉環(huán)的vio.txt數(shù)據(jù)里,然后畫出閉環(huán)后的整體軌跡估計?】
六、RTAB-MAP
概述:與其他視覺slam方案不同在于提供了一個與時間和尺度無關(guān)的基于外觀的定位與構(gòu)圖解決方案,優(yōu)化了大型環(huán)境的在線閉環(huán)檢測問題,主要是利用計算權(quán)重使得只利用有限數(shù)量的定位點參與閉環(huán)檢測,但是若需要也可以訪問全局的定位點。
流程:開始->特征提取和匹配->求兩兩幀的視覺里程計->優(yōu)化php的結(jié)果->局部地圖->運動狀態(tài)估計->運動狀態(tài)估計->位姿圖->詞袋模型->相似度計算->結(jié)束
特征點:使用詞袋法創(chuàng)建圖像的簽名,基于opencv從圖像中提取SURF特征來得到視覺單詞。
建圖方式:1.Octomap(3d占用柵格地圖)
2.稠密點云地圖
3.2d占用柵格地圖
ROS節(jié)點:輸入:1.TF(傳感器相對于機器人底座的位置)
2.里程計
3.相機輸入以及帶有校準的信息
輸出:1.Map Data和Graph
優(yōu)點:1.適用于長期和大規(guī)模環(huán)境在線建圖的要求
2.里程計魯棒性較好好且低漂移
3.定位魯棒性較好
4.地圖生成開發(fā)實用且簡便
5.提供軟件包
缺點:1.方案偏向于商品化,二次開發(fā)難
參考:https://blog.51cto.com/remyspot/1784914
七、RGBD-SLAM V2
概述:系統(tǒng)前端為視覺里程計,從每一幀的RGB提取特征,計算描述符,RANSAC+ICP計算兩幀之間的運動估計,并提出了一個EMM(環(huán)境測量模型)判斷運動估計是否可以接受,后端回環(huán)檢測基于G2O的位姿圖優(yōu)化
特征點:1.SIFT by GPU(綜合表現(xiàn)最好)
2.SURF by CPU(OPENCV)
3.ORB by CPU (OPENCV)(準確率,實時性更加好)
建圖方式:八叉樹地圖octomap(利于導航 ; 易于更新 ;存儲方式比較省空間)
優(yōu)點:1.二次開發(fā)較容易,可以在其基礎(chǔ)上繼續(xù)開發(fā)
缺點:1.實時性相對較差,相機要慢速運動
參考:http://www.cnblogs.com/voyagee/p/7027076.html
八、RTAB-MAP和RGBD-SLAM V2的對比
系統(tǒng)構(gòu)建:
1、RGBD_SLAM V2是一個非常全面優(yōu)秀的系統(tǒng),將SLAM領(lǐng)域的圖像特征、優(yōu)化、閉環(huán)檢測、點云、octomap等技術(shù)融為一體,
2、RTAB-Map是當前最優(yōu)秀的RGBD SLAM
開發(fā):RGBD_SLAM2適合RGBD SLAM初學者,也可以在其基礎(chǔ)上繼續(xù)開發(fā)。
RTAB-MAP二次開發(fā)難度較高(著名的Google Tango(見如何評價Google 的 Project Tango和Google Project Tango 有哪些黑科技)就是使用RTAB-Map做SLAM,)
實時性:RGBD_SLAM2的缺點是其算法實時性不好,相機必須慢速運動,
RTABMAP 通過STM/WM/LTM的內(nèi)存管理機制,減少圖優(yōu)化和閉環(huán)檢測中需要用到的結(jié)點數(shù),保證實時性以及閉環(huán)檢測的準確性,能夠在超大場景中運行。
回環(huán)檢測:RGBDSLAMV2:相機較快運動時,會出現(xiàn)很大的地圖重疊。
RTABMAP:穩(wěn)定性相對較好,但是也不穩(wěn)定。
個人:實際運行中RGBD SLAM V2用點云表達,點云表達方式耗費內(nèi)存,時間較長后,三維空間中的點云數(shù)量增多,畫面出現(xiàn)明顯的卡頓,但采集得結(jié)果細節(jié)表現(xiàn)得很好
RTAB-MAP實際運行過程中,畫面比較流暢,但是是使用3d柵格占用地圖表現(xiàn)的,細節(jié)表現(xiàn)得也不錯。
九、RTAB-MAP和ORB-SLAM的對比
系統(tǒng)構(gòu)建:RTAB-MAP:框架較全面,支持聯(lián)合建圖,建立的地圖包括三維稠密點云和二維柵格地圖(可以直接從ros獲取二進制程序)
ORB-SLAM:只滿足了定位的需求,無法提供導航,避障,交互等諸多功能 。
代碼可讀性:RTAB-MAP:差,基本上封裝了。
ORB-SLAM:可讀性好。
應(yīng)用:RTAB-MAP:適合作為slam應(yīng)用
ORB-SLAM:適合研究使用
計算量:RTAB-MAP:內(nèi)存管理方法計算量相對較小
ORB-SLAM:三線程結(jié)構(gòu),必須對每幅圖像計算一遍orb特征,耗時和計算量大
回環(huán)檢測:RTAB-MAP:回環(huán)檢測只訪問有限數(shù)量的定位點
ORB-SLAM:優(yōu)秀的回環(huán)檢測算法保證了ORB-SLAM2有效地防止累積誤差,并且在丟失之后還能迅速找回,這一點許多現(xiàn)有的SLAM系統(tǒng)都不夠完善。為此,ORB-SLAM2在運行之前必須加載一個很大的ORB字典 。
十、SLAM算法對比:
一:視覺和IMU前端數(shù)據(jù)處理
對于視覺前端做法基本分為三種:
①特征點提?。╢eature detection)+根據(jù)描述子匹配特征點
orbslam, okvis
優(yōu)點:因為有描述子,因此對地圖的維護很方便(包括重定位,閉環(huán),全局優(yōu)化)
尤其是對室內(nèi)環(huán)境,當視覺上共視關(guān)系較多的時候,這種方法能很大提高定位精度和局部的穩(wěn)定性。室內(nèi)移動機器人建議使用這種方法
缺點:每幀圖像都要提取特征點數(shù)量的描述子,浪費時間;在tracking過程中,如果運動過快(圖像出現(xiàn)模糊)比較容易tracking failed,而光流要好一些
②特征點提取+光流跟蹤
vins,svo的初始化
優(yōu)點:簡單高效,tracking要魯棒一些
缺點:不容易構(gòu)建全局map,視覺約束只靠滑窗里面的關(guān)鍵幀。
比如vins的閉環(huán)和重定位是需要另外再提取特征點和描述子的;但后端做得好
③直接法
lsdslam,dso
優(yōu)點:在弱紋理下,魯棒性好
缺點:不容易維護全局地圖,對光照影響較大,高精度地圖中無法使用等。
對于IMU前端:
IMU前端基本都是使用預(yù)積分的方式,和積分的區(qū)別(預(yù)積分把重力考慮進去了)。imu預(yù)積分主要是在兩幀圖像之間更新imu的5個狀態(tài)變量(p, v, q, ba, bg)的Jacobian和covariance。
PS:為了使得非線性優(yōu)化中,不用每次改變位姿后,積分需要重新計算的問題。
現(xiàn)在改變位姿(速度,位移,旋轉(zhuǎn)四元數(shù)關(guān)于世界坐標系的),預(yù)積分內(nèi)的項保持不變。
改變ba,bg(加速度和陀螺儀偏移)后,預(yù)積分的項可以通過泰勒一階展開來進行更新。
jacobian是單位矩陣,主要是為了求一階近似的p, v,q;covariance是零矩陣,主要是為了求imu誤差項的權(quán)重
IMU初值確定:一般結(jié)合vins mono 等的視覺信息來求
二:后端優(yōu)化
濾波:不需要做邊緣化,重定位難。因為不需要迭代,速度略快。
**優(yōu)化:**需要邊緣化(比較耗時間),重定位容易。迭代優(yōu)化,速度略慢。
VINS-Mono與OKVIS類似,是基于非線性優(yōu)化器優(yōu)化一個滑窗內(nèi)的關(guān)鍵幀,幀間通過魯棒的角點關(guān)聯(lián)。在系統(tǒng)初始化階段,通過松耦合的方式融合多種傳感器;在重定位階段,則通過緊耦合的方式融合傳感器。在優(yōu)化之前,也通過IMU預(yù)積分減少計算量。除此至外,VINS還提供了基于4DoF的位姿圖優(yōu)化和回環(huán)檢測。
十一、實體測試
十二、方案選型(個人觀點,不喜勿噴)
通過上述調(diào)研,出于資源等的考慮,初步將ORB_SLAM2、 VINS FUSION、RTAB MAP 和LSD SLAM列入后期調(diào)研中,擬再花兩周進行相機選型和實體場景測試,先給出現(xiàn)階段調(diào)研結(jié)果,希望大家相互學習,共同進步!
作者為CSDN博主「lark_ying」
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至2161241530@qq.com 舉報,一經(jīng)查實,本站將立刻刪除。如若轉(zhuǎn)載,請注明出處:http://www.parklessenses.com/uncategorized/40746/