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