?一、SLAM的引入
1.1定義
SLAM 是 Simultaneous Localization and Mapping 的縮寫(xiě),中文譯作“同時(shí)定位與地圖構(gòu)建”。它是指搭載特定傳感器的主體,在沒(méi)有環(huán)境先驗(yàn)信息的情況下,于運(yùn)動(dòng)過(guò)程中建立環(huán)境的模型,同時(shí)估計(jì)自己的運(yùn)動(dòng)。如果這里的傳感器主要為相機(jī),那就稱(chēng)為“視覺(jué) SLAM”。
1.2開(kāi)發(fā)背景
?圖1-1 SLAM中建圖的分類(lèi)與作用 ?引入SLAM的主要目的如下:
?1)建圖? 使用SLAM可在傳感器具有良好表現(xiàn)的環(huán)境下建立精度較高的全局地圖,建立好的地圖會(huì)為后面的定位、導(dǎo)航等功能提供服務(wù)。 ?2)定位 視覺(jué)SLAM中可通過(guò)幀間數(shù)據(jù)匹配計(jì)算相機(jī)的相對(duì)變換,對(duì)應(yīng)的就是機(jī)器人的位姿信息,不過(guò)該計(jì)算結(jié)果中存在累計(jì)誤差的影響;利用SLAM建立的全局地圖,通過(guò)相機(jī)采集到的環(huán)境信息與地圖進(jìn)行匹配可以減小累積誤差的影響,獲得更加精準(zhǔn)的機(jī)器人位姿。 ?3)導(dǎo)航 如果我們建立的地圖中包含了“哪些地方可以通過(guò),哪些地方不能通過(guò)”的信息,那么我們可以以此實(shí)現(xiàn)機(jī)器人在地圖中從某一起點(diǎn)到某一終點(diǎn)的路徑規(guī)劃與跟蹤,并能夠?qū)Φ貓D中固定障礙物實(shí)現(xiàn)避障。但這對(duì)我們能夠建立的地圖有要求,需要是“稠密”地圖。 ?
二、視覺(jué)SLAM
2.1 經(jīng)典視覺(jué)SLAM框架
SLAM至今已歷經(jīng)三十多年的研究,這里給出經(jīng)典視覺(jué)SLAM框架,這個(gè)框架本身及其包含的算法已經(jīng)基本定型,并且已經(jīng)在許多視覺(jué)程序庫(kù)和機(jī)器人程序庫(kù)中提供。
圖2-1 經(jīng)典視覺(jué)SLAM框架 我們把整個(gè)視覺(jué) SLAM 流程分為以下幾步:
1)傳感器信息讀取,在視覺(jué) SLAM 中主要為相機(jī)圖像信息的讀取和預(yù)處理。如果在機(jī)器人中,還可能有碼盤(pán)、慣性傳感器等信息的讀取和同步。
2)視覺(jué)里程計(jì)?(Visual Odometry, VO),視覺(jué)里程計(jì)任務(wù)是估算相鄰圖像間相機(jī)的運(yùn)動(dòng),以及局部地圖的樣子,VO 又稱(chēng)為前端(Front End)。
3)后端優(yōu)化(Optimization),后端接受不同時(shí)刻視覺(jué)里程計(jì)測(cè)量的相機(jī)位姿,以及回環(huán)檢測(cè)的信息,對(duì)它們進(jìn)行優(yōu)化,得到全局一致的軌跡和地圖。由于接在 VO 之后,又稱(chēng)為后端(Back End)。
4)回環(huán)檢測(cè)(Loop Closing),回環(huán)檢測(cè)判斷機(jī)器人是否曾經(jīng)到達(dá)過(guò)先前的位置。如果檢測(cè)到回環(huán),它會(huì)把信息提供給后端進(jìn)行處理。
5)建圖(Mapping),它根據(jù)估計(jì)的軌跡,建立與任務(wù)要求對(duì)應(yīng)的地圖。 某些使用場(chǎng)合中,我們只截取SLAM的部分功能應(yīng)用到實(shí)際場(chǎng)景中。舉例來(lái)說(shuō)只使用VO部分我們可以得到連續(xù)的相機(jī)相對(duì)運(yùn)動(dòng)信息,雖然該運(yùn)動(dòng)信息存在累計(jì)誤差,但應(yīng)用中對(duì)此要求不高甚至不做要求,譬如VR頭顯中計(jì)算頭顯設(shè)備運(yùn)動(dòng)時(shí)的位姿。 不過(guò)一般在機(jī)器人應(yīng)用場(chǎng)景中,個(gè)人認(rèn)為建圖功能也是不可或缺的。因?yàn)榍岸税ê蠖藘?yōu)化得到的運(yùn)動(dòng)信息始終包含累積誤差,該累積誤差在SLAM中只能通過(guò)回環(huán)檢測(cè)(機(jī)器人回到某一處曾經(jīng)經(jīng)過(guò)的地方且系統(tǒng)識(shí)別出來(lái))或者與事先建立好的具有較高精度的全局地圖匹配來(lái)消除。但是機(jī)器人在實(shí)際運(yùn)動(dòng)中,不能保證全局路徑一定會(huì)有重疊處,也就是說(shuō)在SLAM計(jì)算中很可能出現(xiàn)不存在回環(huán)的情況,此時(shí)累積誤差只能通過(guò)與全局地圖匹配來(lái)消除,因此SLAM的建圖功能也不可或缺。 ?
圖2-2 回環(huán)檢測(cè)消除累積誤差 這一點(diǎn)在VINS開(kāi)源項(xiàng)目(香港科技大學(xué)團(tuán)隊(duì)基于單目+IMU開(kāi)發(fā)的開(kāi)源SLAM方案)中的測(cè)試視頻(見(jiàn)“視頻/VINS/[Open Source] VINS-Mono_ Monocular Visual-Inertial System in EuRoC MAV Dataset (MH_05 V1_03).mp4”)中也有體現(xiàn)。在回環(huán)檢測(cè)前,SLAM計(jì)算得到的位姿與真實(shí)位姿之間已經(jīng)產(chǎn)生了很大的偏差,如圖2-3所示;該偏差只有在相機(jī)回到了曾經(jīng)經(jīng)過(guò)的地方且SLAM成功執(zhí)行了回環(huán)檢測(cè)后才得到了消除,如圖2-4所示。 ?
圖2-3 未進(jìn)行回環(huán)檢測(cè)前的位姿累積誤差
? 圖2-4 回環(huán)檢測(cè)消除累計(jì)誤差
2.2視覺(jué)SLAM方案的分類(lèi)
視覺(jué)SLAM方案可按照傳感器的不同(單目、雙目、RGBD、與IMU的組合等)、前端方法的不同(主要分為直接法和特征點(diǎn)法)、后端優(yōu)化方案的不同(濾波或者非線(xiàn)性?xún)?yōu)化)、生成地圖形式的不同(稀疏地圖、稠密地圖等)具有不同的劃分。這里主要以傳感器的不同對(duì)slam方案進(jìn)行簡(jiǎn)單的介紹。
1)單目slam 只使用一個(gè)攝像頭采集信息,在尺度完成初始化的情況下(即相機(jī)初始階段進(jìn)行了一段位移且確定了該段位移的實(shí)際大小作為參考),能夠完成連續(xù)圖像間相機(jī)位姿的計(jì)算與建圖。優(yōu)點(diǎn)在于設(shè)備簡(jiǎn)單,成本低。缺點(diǎn)在于存在尺度漂移現(xiàn)象;圖像的深度信息只能通過(guò)三角測(cè)量計(jì)算得到,對(duì)環(huán)境適應(yīng)性差;在相機(jī)位移較小時(shí)計(jì)算誤差較大,建圖精度不高。
2)雙目slam 使用雙目相機(jī)采集信息,雙目相機(jī)可以通過(guò)立體視覺(jué)原理計(jì)算得到像素深度,這樣就不存在單目slam中深度未知的情況。優(yōu)點(diǎn)在于對(duì)環(huán)境的適應(yīng)性要高于單目slam,且能夠計(jì)算得到像素真實(shí)深度;缺點(diǎn)在于像素深度計(jì)算量較大,一般通過(guò)FPGA或者GPU加速實(shí)現(xiàn)實(shí)時(shí)計(jì)算輸出。
3)RGBD SLAM?? RGBD相機(jī)是指能夠同時(shí)輸出RGB圖像和對(duì)應(yīng)的深度圖的相機(jī),其測(cè)量像素深度不再通過(guò)耗時(shí)的被動(dòng)雙目匹配計(jì)算,而是通過(guò)激光散斑增加圖像紋理加速計(jì)算或者硬件測(cè)量(結(jié)構(gòu)光、TOF等)實(shí)現(xiàn)。因此它可以看做減小了計(jì)算量的雙目SLAM,但是RGBD相機(jī)普遍在室外表現(xiàn)效果不佳,更多用于室內(nèi)環(huán)境。
4)近年來(lái)有學(xué)者提出單目/雙目+IMU的slam方案,其中IMU主要起到的作用包括: (1)解決單目slam的初始化尺度問(wèn)題 (2)追蹤中提供較好的初始位姿 (3)提供重力方向 (4)提供一個(gè)時(shí)間誤差項(xiàng)以供優(yōu)化。理 論上來(lái)說(shuō)IMU提供了冗余的運(yùn)動(dòng)信息,通過(guò)數(shù)據(jù)融合可以得到更加精確的運(yùn)動(dòng)估計(jì)。 從實(shí)現(xiàn)難度上來(lái)看:?jiǎn)文縎LAM>雙目SLAM>RGBD SLAM。
2.3 開(kāi)源視覺(jué)SLAM方案匯總
目前比較流行的開(kāi)源視覺(jué)SLAM方案如表2-1所示:
方案名稱(chēng) | 傳感器形式 | 地址 |
MonoSLAM | 單目 | https://github.com/hanmekim/SceneLib2 |
PTAM | 單目 | http://www.robots.ox.ac.uk/~gk/PTAM/ |
ORB-SLAM2 | 單目/雙目/RGBD | https://github.com/raulmur/ORB_SLAM2 |
LSD-SLAM | 單目為主 | http://vision.in.tum.de/research/vslam/lsdslam |
SVO | 單目 | https://github.com/uzh-rpg/rpg_svo |
DTAM | RGB-D | https://github.com/anuranbaka/OpenDTAM |
DVO | RGB-D | https://github.com/tum-vision/dvo_slam |
DSO | 單目 | https://github.com/JakobEngel/dso |
RTAB-MAP | 雙目/RGB-D | https://github.com/introlab/rtabmap |
RGBD-SLAM-V2 | RGB-D | https://github.com/felixendres/rgbdslam_v2 |
Elastic Fusion | RGB-D | https://github.com/mp3guy/ElasticFusion |
OKVIS | 多目+IMU | https://github.com/ethz-asl/okvis |
ROVIO | 單目+IMU | https://github.com/ethz-asl/rovio |
VINS | 單目+IMU | https://github.com/HKUST-Aerial-Robotics/VINS-Mono |
表2-1 開(kāi)源SLAM方案匯總 ?
三、視覺(jué)SLAM設(shè)備選型
3.1 設(shè)備選型的重要性
說(shuō)了這么多,終于到了設(shè)備選型這一部分。設(shè)備選型的重要性不言而喻,畢竟“好模型架不住壞數(shù)據(jù)”,SLAM模型建立得再好,如果設(shè)備采集的數(shù)據(jù)本身誤差過(guò)大,計(jì)算結(jié)果必定也不夠理想。先以VINS項(xiàng)目為例,根據(jù)論文內(nèi)容他們的設(shè)備型號(hào)和具體信息如下。 相機(jī)模塊:?jiǎn)文肯鄼C(jī),型號(hào)為MatrixVision的mvBlueFOX-MLC200w,具有全局快門(mén);cmos型號(hào)為MT9V034,單色,分辨率為752X480,幀率20Hz IMU:該模塊使用的是大疆的集成飛控模塊A3的內(nèi)置IMU模塊,芯片型號(hào)為ADXL278和ADXRS290(都為工業(yè)級(jí)IMU芯片);可以確定A3內(nèi)置對(duì)IMU的校準(zhǔn)去躁等處理算法。 ?
?圖3-1 VINS中設(shè)備型號(hào) 由此看來(lái)VINS選用的硬件是具有一定要求的,其采集數(shù)據(jù)的精度也對(duì)SLAM算法最終的效果產(chǎn)生正向作用。所以如果我們選用了精度沒(méi)那么高的消費(fèi)級(jí)IMU配合單目相機(jī)采集數(shù)據(jù)時(shí),VINS的輸出結(jié)果就不一定能夠達(dá)到論文中的精度了。
3.2 設(shè)備類(lèi)型選擇
我們的項(xiàng)目中工作環(huán)境為室外,對(duì)傳感器選型提出了較高要求。以RGBD相機(jī)為例,很多基于結(jié)構(gòu)光或者TOF方案的深度攝像頭在室外表現(xiàn)不佳,主要原因是室外自然光的影響。個(gè)人初步傾向于選用雙目或者RGBD(雙目某些情況下可視為RGBD)+IMU的方案,主要理由如下: 1)雙目/RGBD+IMU的硬件,可在此基礎(chǔ)上嘗試基于單目/雙目/RGBD/單目+IMU/雙目+IMU等多種開(kāi)源SLAM方案;反之單目+IMU的設(shè)備對(duì)開(kāi)源方案的限制較大(只能是單目/單目+IMU)。 2)單目SLAM在建圖方面,尤其是深度估計(jì)方面,對(duì)場(chǎng)景適應(yīng)性不好且精度較差。雙目/RGBD因?yàn)榭梢杂?jì)算得到深度,在建圖方面相對(duì)具有優(yōu)勢(shì),更容易建立“稠密”地圖。 3)SLAM定位實(shí)現(xiàn)中,基于單目的方案其計(jì)算量也要比基于雙目/RGBD要大,且因?yàn)橐肓巳菧y(cè)量部分,對(duì)于環(huán)境適應(yīng)性較差。 所以在選型方面,我們主要聚焦在雙目/RGBD類(lèi)型;同時(shí)為了加快開(kāi)發(fā)進(jìn)程,若選擇能夠提供開(kāi)發(fā)SDK等工具的廠(chǎng)家,則可以省去對(duì)于相機(jī)的標(biāo)定、數(shù)據(jù)同步等開(kāi)發(fā)工作。
編輯:黃飛
?
評(píng)論
查看更多