SLAM的开源以及在移动端AR的适用分析
當(dāng)前的開源方案
當(dāng)下部分總結(jié)引用自blog:http://blog.csdn.net/OnafioO/article/details/73175835文章總結(jié)很好沒本文關(guān)于其在移動(dòng)端方面加以總結(jié),希望大家參與討論,不足之處,請(qǐng)指正。
本講的前半部分將帶領(lǐng)讀者參觀一下當(dāng)前的視覺SLAM方案,評(píng)述其歷史地位和優(yōu)缺點(diǎn)。表1列舉了一些常見的開源SLAM方案,讀者可以選擇感興趣的方案進(jìn)行研究和實(shí)驗(yàn)。限于篇幅,我們只選了一部分有代表性的方案,這肯定是不全面的。在后半部分,我們將探討未來可能的一些發(fā)展方向,并給出當(dāng)前的一些研究成果。
| 方案名稱 | 傳感器形式 | 地址 | 
|---|---|---|
| MonoSLAM | 單目 | https://github.com/hanmekim/SceneLib2 | 
| PTAM | 單目 | http://www.robots.ox.ac.uk/~gk/PTAM/ | 
| ORB-SLAM | 單目為主 | http://webdiis.unizar.es/~raulmur/orbslam/ | 
| 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 | 
| Hector SLAM | 激光 | http://wiki.ros.org/hector_slam | 
| GMapping | 激光 | http://wiki.ros.org/gmapping | 
| OKVIS | 多目+IMU | https://github.com/ethz-asl/okvis | 
| ROVIO | 單目+IMU | https://github.com/ethz-asl/rovio | 
?
表1 常用開源 SLAM 方案
?
MonoSLAM
說到視覺SLAM,很多研究者第一個(gè)想到的是A. J. Davison的單目SLAM工作。Davison教授是視覺SLAM研究領(lǐng)域的先驅(qū),他在2007年提出的MonoSLAM是第一個(gè)實(shí)時(shí)的單目視覺SLAM系統(tǒng)[2],被認(rèn)為是許多工作的發(fā)源地。MonoSLAM以擴(kuò)展卡爾曼濾波為后端,追蹤前端非常稀疏的特征點(diǎn)。由于EKF在早期SLAM中占據(jù)著明顯主導(dǎo)地位,所以MonoSLAM亦是建立在EKF的基礎(chǔ)之上,以相機(jī)的當(dāng)前狀態(tài)和所有路標(biāo)點(diǎn)為狀態(tài)量,更新其均值和協(xié)方差。
圖1所示是MonoSLAM在運(yùn)行時(shí)的情形。可以看到,單目相機(jī)在一幅圖像當(dāng)中追蹤了非常稀疏的特征點(diǎn)(且用到了主動(dòng)追蹤技術(shù))。在EKF中,每個(gè)特征點(diǎn)的位置服從高斯分布,所以我們能夠以一個(gè)橢球的形式表達(dá)它的均值和不確定性。在該圖的右半部分,我們可以找到一些在空間中分布著的小球。它們?cè)谀硞€(gè)方向上顯得越長,說明在該方向的位置就越不確定。我們可以想象,如果一個(gè)特征點(diǎn)收斂,我們應(yīng)該能看到它從一個(gè)很長的橢球(相機(jī)Z方向上非常不確定)最后變成一個(gè)小點(diǎn)的樣子。
圖1 MonoSLAM的運(yùn)行時(shí)截圖。左側(cè):追蹤特征點(diǎn)在圖像中的表示; 右側(cè):特征點(diǎn)在三維空間中的表示。
?
這種做法在今天看來固然存在許多弊端,但在當(dāng)時(shí)已經(jīng)是里程碑式的工作了,因?yàn)樵诖酥暗囊曈XSLAM系統(tǒng)基本不能在線運(yùn)行,只能靠機(jī)器人攜帶相機(jī)采集數(shù)據(jù),再離線地進(jìn)行定位與建圖。計(jì)算機(jī)性能的進(jìn)步,以及用稀疏的方式處理圖像,加在一起才使得一個(gè)SLAM系統(tǒng)能夠在線地運(yùn)行。從現(xiàn)代的角度來看,MonoSLAM存在諸如應(yīng)用場景很窄,路標(biāo)數(shù)量有限,稀疏特征點(diǎn)非常容易丟失的情況,對(duì)它的開發(fā)也已經(jīng)停止,取而代之的是更先進(jìn)的理論和編程工具。不過這并不妨礙我們對(duì)前人工作的理解和尊敬。幾個(gè)月以后再來看當(dāng)初入門時(shí)候的這篇文章 更加佩服這些先驅(qū) 參加過第一屆全國SLAM大會(huì)以后碰到很有優(yōu)秀的人 ,respect砥礪前行!!!
PTAM
2007年,Klein等人提出了PTAM(Parallel Tracking and Mapping),這也是視覺SLAM發(fā)展過程中的重要事件。PTAM的重要意義在于以下兩點(diǎn):
- PTAM提出并實(shí)現(xiàn)了跟蹤與建圖過程的并行化。我們現(xiàn)在已然清楚,跟蹤部分需要實(shí)時(shí)響應(yīng)圖像數(shù)據(jù),而對(duì)地圖的優(yōu)化則沒必要實(shí)時(shí)地計(jì)算。后端優(yōu)化可以在后臺(tái)慢慢進(jìn)行,然后在必要的時(shí)候進(jìn)行線程同步即可。這是視覺SLAM中首次區(qū)分出前后端的概念,引領(lǐng)了后來許多視覺SLAM系統(tǒng)的設(shè)計(jì)(我們現(xiàn)在看到的SLAM多半都分前后端)。
- PTAM是第一個(gè)使用非線性優(yōu)化,而不是使用傳統(tǒng)的濾波器作為后端的方案。它引入了關(guān)鍵幀機(jī)制:我們不必精細(xì)地處理每一幅圖像,而是把幾個(gè)關(guān)鍵圖像串起來,然后優(yōu)化其軌跡和地圖。早期的SLAM大多數(shù)使用EKF濾波器或其變種,以及粒子濾波器等;在PTAM之后,視覺SLAM研究逐漸轉(zhuǎn)向了以非線性優(yōu)化為主導(dǎo)的后端。由于之前人們未認(rèn)識(shí)到后端優(yōu)化的稀疏性,所以覺得優(yōu)化后端無法實(shí)時(shí)處理那樣大規(guī)模的數(shù)據(jù),而PTAM則是一個(gè)顯著的反例。
PTAM同時(shí)是一個(gè)增強(qiáng)現(xiàn)實(shí)軟件,演示了酷炫的AR效果(如所示)。根據(jù)PTAM估計(jì)的相機(jī)位姿,我們可以在一個(gè)虛擬的平面上放置虛擬物體,看起來就像在真實(shí)的場景中一樣。
圖2 PTAM的演示截圖。它既可以提供實(shí)時(shí)的定位和建圖,也可以在虛擬平面上疊加虛擬物體。
?
不過,從現(xiàn)代的眼光看來,PTAM也算是早期的結(jié)合AR的SLAM工作之一。與許多早期工作相似,存在著明顯的缺陷:場景小,跟蹤容易丟失,等等。這些又在后續(xù)的方案中得以修正。
ptam可以經(jīng)適當(dāng)?shù)母倪M(jìn)適用于AR的移動(dòng)端的開發(fā),但是其還不是一種比較成熟的框架,具有先天缺陷,而這些則是手機(jī)端現(xiàn)階段的面臨的主要問題。有單個(gè)有待克服的問題以及算法改進(jìn)思路如下:1、計(jì)算能力不足的問題,需要改進(jìn)算法的效率兼顧精度,研究適合移動(dòng)端的相關(guān)關(guān)算法 (neon) 2、窄視野問題,導(dǎo)致外點(diǎn)的增加如何克服 ?3、卷簾快門旋轉(zhuǎn)問題等
ORB-SLAM
介紹了歷史上的幾種方案之后,我們來看現(xiàn)代的一些SLAM系統(tǒng)。ORB-SLAM是PTAM的繼承者中非常有名的一位(見圖3)。它提出于2015年,是現(xiàn)代SLAM系統(tǒng)中做得非常完善、非常易用的系統(tǒng)之一(如果不是最完善易用的話)。ORB-SLAM代表著主流的特征點(diǎn)SLAM的一個(gè)高峰。相比于之前的工作,ORB-SLAM具有以下幾條明顯的優(yōu)勢:
圖3 ORB-SLAM運(yùn)行截圖。左側(cè)為圖像與追蹤到的特征點(diǎn),右側(cè)為相機(jī)軌跡與建模的特征點(diǎn)地圖。下方為其標(biāo)志性的三線程結(jié)構(gòu)。
?
- 支持單目、雙目、RGB-D三種模式(17年發(fā)表 tansactions on robotics)。這使得無論我們拿到了哪種常見的傳感器,都可以先放到ORB-SLAM上測試一下,它具有良好的泛用性。
- 整個(gè)系統(tǒng)圍繞ORB特征進(jìn)行計(jì)算,包括視覺里程計(jì)與回環(huán)檢測的ORB字典。它體現(xiàn)出ORB特征是現(xiàn)階段計(jì)算平臺(tái)的一種優(yōu)秀的效率與精度之間的折中方式。ORB不像SIFT或SURF那樣費(fèi)時(shí),在CPU上面即可實(shí)時(shí)計(jì)算;相比Harris角點(diǎn)等簡單角點(diǎn)特征,又具有良好的旋轉(zhuǎn)和縮放不變性。并且,ORB提供描述子,使我們?cè)?strong>大范圍運(yùn)動(dòng)時(shí)能夠進(jìn)行回環(huán)檢測和重定位(實(shí)際運(yùn)行中國的效果還是不如SIFT,單純可靠性的按進(jìn)度來說,SIFT是最好的,也是目前喝多研究者們的使用的特征,是一種十分可靠的特征提取和表達(dá)的方式)。
- ORB的回環(huán)檢測是它的亮點(diǎn)。優(yōu)秀的回環(huán)檢測算法保證了ORB-SLAM有效地防止累積誤差,并且在丟失之后還能迅速找回,這一點(diǎn)許多現(xiàn)有的SLAM系統(tǒng)都不夠完善。為此,ORB-SLAM在運(yùn)行之前必須加載一個(gè)很大的ORB字典 。
- ORB-SLAM創(chuàng)新式地使用了三個(gè)線程完成SLAM:實(shí)時(shí)跟蹤特征點(diǎn)的Tracking線程,局部Bundle Adjustment的優(yōu)化線程(Co-visibility Graph,俗稱小圖),以及全局Pose Graph的回環(huán)檢測與優(yōu)化線程(Essential Graph俗稱大圖)。其中,Tracking線程負(fù)責(zé)對(duì)每幅新來的圖像提取ORB特征點(diǎn),并與最近的關(guān)鍵幀進(jìn)行比較,計(jì)算特征點(diǎn)的位置并粗略估計(jì)相機(jī)位姿。小圖線程求解一個(gè)Bundle Adjustment問題,它包括局部空間內(nèi)的特征點(diǎn)與相機(jī)位姿。這個(gè)線程負(fù)責(zé)求解更精細(xì)的相機(jī)位姿與特征點(diǎn)空間位置。不過,僅有前兩個(gè)線程,只完成了一個(gè)比較好的視覺里程計(jì)。第三個(gè)線程,也就是大圖線程,對(duì)全局的地圖與關(guān)鍵幀進(jìn)行回環(huán)檢測,消除累積誤差。由于全局地圖中的地圖點(diǎn)太多,所以這個(gè)線程的優(yōu)化不包括地圖點(diǎn),而只有相機(jī)位姿組成的位姿圖。繼PTAM的雙線程結(jié)構(gòu)之后,ORB-SLAM的三線程結(jié)構(gòu)取得了非常好的跟蹤和建圖效果,能夠保證軌跡與地圖的全局一致性。這種三線程結(jié)構(gòu)也將被后續(xù)的研究者認(rèn)同和采用。總之,沿用了前人的額思想將系統(tǒng)分別多線程并發(fā)處理,前端為數(shù)據(jù)的采集與實(shí)時(shí)的粗處理,后端沿用BA處理,區(qū)分實(shí)時(shí)性,小圖的處理使得系統(tǒng)可以實(shí)時(shí)的實(shí)現(xiàn)對(duì)空間特征的位置求解和相機(jī)的位姿的求解;大圖的線程的到全局優(yōu)化,不追求實(shí)時(shí)處理,只需調(diào)用前的處理結(jié)果即可。
- ORB-SLAM圍繞特征點(diǎn)進(jìn)行了不少的優(yōu)化。例如,在OpenCV的特征提取基礎(chǔ)上保證了特征點(diǎn)的均勻分布,在優(yōu)化位姿時(shí)使用了一種循環(huán)優(yōu)化4遍以得到更多正確匹配的方法,比PTAM更為寬松的關(guān)鍵幀選取策略,等等。這些細(xì)小的改進(jìn)使得ORB-SLAM具有遠(yuǎn)超其他方案的穩(wěn)健性:即使對(duì)于較差的場景,較差的標(biāo)定內(nèi)參,ORB-SLAM都能夠順利地工作。
上述這些優(yōu)勢使得ORB-SLAM在特征點(diǎn)SLAM中達(dá)到頂峰,許多研究工作都以O(shè)RB-SLAM作為標(biāo)準(zhǔn),或者在它的基礎(chǔ)上進(jìn)行后續(xù)的開發(fā)。它的代碼以清晰易讀著稱,有著完善的注釋,可供后來的研究者進(jìn)一步理解。
當(dāng)然,ORB-SLAM也存在一些不足之處。首先,由于整個(gè)SLAM系統(tǒng)都采用特征點(diǎn)進(jìn)行計(jì)算,我們必須對(duì)每幅圖像都計(jì)算一遍ORB特征,這是非常耗時(shí)的。ORB-SLAM的三線程結(jié)構(gòu)也給CPU帶來了較重的負(fù)擔(dān),使得它只有在當(dāng)前PC架構(gòu)的CPU上才能實(shí)時(shí)運(yùn)算,移植到嵌入式設(shè)備上則有一定困難(近期,我又接著做了一些移動(dòng)端的工作,結(jié)果顯示,移植后如果嫩能夠優(yōu)化的不錯(cuò)的話,還是可以實(shí)時(shí)運(yùn)行的)。其次,ORB-SLAM的建圖為稀疏特征點(diǎn),目前還沒有開放存儲(chǔ)和讀取地圖后重新定位的功能(雖然從實(shí)現(xiàn)上來講并不困難)。根據(jù)我們?cè)诮▓D部分的分析,稀疏特征點(diǎn)地圖只能滿足我們對(duì)定位的需求,而無法提供導(dǎo)航、避障、交互等諸多功能。然而,如果我們僅用ORB-SLAM處理定位問題,似乎又顯得有些過于重量級(jí)了。相比之下,另外一些方案提供了更為輕量級(jí)的定位,使我們能夠在低端的處理器上運(yùn)行SLAM,或者讓CPU有余力處理其他的事務(wù)。
此法,在應(yīng)用的實(shí)用性上面具有較好的可以拓展性,小編你正在學(xué)習(xí)的過程中
LSD-SLAM
LSD-SLAM(Large Scale Direct monocular SLAM)是J. Engle等人于2014年提出的SLAM工作。類比于ORB-SLAM之于特征點(diǎn),LSD-SLAM則標(biāo)志著單目直接法在SLAM中的成功應(yīng)用。LSD-SLAM的核心貢獻(xiàn)是將直接法應(yīng)用到了半稠密的單目SLAM中。它不僅不需要計(jì)算特征點(diǎn),還能構(gòu)建半稠密的地圖——這里半稠密的意思主要是指估計(jì)梯度明顯的像素位置。它的主要優(yōu)點(diǎn)如下:
- LSD-SLAM的直接法是針對(duì)像素進(jìn)行的。作者有創(chuàng)見地提出了像素梯度與直接法的關(guān)系,以及像素梯度與極線方向在稠密重建中的角度關(guān)系。這些在本書的第8講和第13講均有討論。不過,LSD-SLAM是在單目圖像進(jìn)行半稠密的跟蹤,實(shí)現(xiàn)原理要比本書的例程更加復(fù)雜。
- LSD-SLAM在CPU上實(shí)現(xiàn)了半稠密場景的重建,這在之前的方案中是很少見到的。基于特征點(diǎn)的方法只能是稀疏的,而進(jìn)行稠密重建的方案大多要使用RGB-D傳感器,或者使用GPU構(gòu)建稠密地圖。TUM計(jì)算機(jī)視覺組在多年對(duì)直接法研究的基礎(chǔ)上,實(shí)現(xiàn)了這種CPU上的實(shí)時(shí)半稠密SLAM。
- 之前也說過,LSD-SLAM的半稠密追蹤使用了一些精妙的手段來保證追蹤的實(shí)時(shí)性與穩(wěn)定性。例如,LSD-SLAM既不是利用單個(gè)像素,也不是利用圖像塊,而是在極線上等距離取5個(gè)點(diǎn),度量其SSD;在深度估計(jì)時(shí),LSD-SLAM首先用隨機(jī)數(shù)初始化深度,在估計(jì)完后又把深度均值歸一化,以調(diào)整尺度;在度量深度不確定性時(shí),不僅考慮三角化的幾何關(guān)系,而且考慮了極線與深度的夾角,歸納成一個(gè)光度不確定性項(xiàng);關(guān)鍵幀之間的約束使用了相似變換群及與之對(duì)應(yīng)的李代數(shù)ζ∈sim(3)顯式地表達(dá)出尺度,在后端優(yōu)化中可以將不同尺度的場景考慮進(jìn)來,減小了尺度飄移現(xiàn)象。
圖4顯示了LSD的運(yùn)行情況。我們可以觀察一下這種微妙的半稠密地圖是怎樣一種介于稀疏地圖與稠密地圖之間的形式。半稠密地圖建模了灰度圖中有明顯梯度的部分,顯示在地圖中,很大一部分都是物體的邊緣或表面上帶紋理的部分。LSD-SLAM對(duì)它們進(jìn)行跟蹤并建立關(guān)鍵幀,最后優(yōu)化得到這樣的地圖。看起來比稀疏的地圖具有更多的信息,但又不像稠密地圖那樣擁有完整的表面(稠密地圖一般認(rèn)為無法僅用CPU實(shí)現(xiàn)實(shí)時(shí)性)。
圖4 LSD-SLAM運(yùn)行圖片。上半部分為估計(jì)的軌跡與地圖,下半部分為圖像中被建模的部分,即具有較好的像素梯度的部分。
?
由于LSD-SLAM使用了直接法進(jìn)行跟蹤,所以它既有直接法的優(yōu)點(diǎn)(對(duì)特征缺失區(qū)域不敏感),也繼承了直接法的缺點(diǎn)。例如,LSD-SLAM對(duì)相機(jī)內(nèi)參和曝光非常敏感,并且在相機(jī)快速運(yùn)動(dòng)時(shí)容易丟失。另外,在回環(huán)檢測部分,由于目前并沒有基于直接法實(shí)現(xiàn)的回環(huán)檢測方式,因此LSD-SLAM必須依賴于特征點(diǎn)方法進(jìn)行回環(huán)檢測,尚未完全擺脫特征點(diǎn)的計(jì)算。
SVO
SVO是Semi-direct Visual Odoemtry的縮寫[56]。它是由Forster等人于2014年提出的一種基于稀疏直接法的視覺里程計(jì)。按作者的稱呼應(yīng)該叫“半直接”法,然而按照本書的理念框架,稱為“稀疏直接法”可能更好一些。半直接在原文中的意思是指特征點(diǎn)與直接法的混合使用:SVO跟蹤了一些關(guān)鍵點(diǎn)(角點(diǎn),沒有描述子),然后像直接法那樣,根據(jù)這些關(guān)鍵點(diǎn)周圍的信息估計(jì)相機(jī)運(yùn)動(dòng)及其位置(如圖4所示)。在實(shí)現(xiàn)中,SVO使用了關(guān)鍵點(diǎn)周圍的4×4的小塊進(jìn)行塊匹配,估計(jì)相機(jī)自身的運(yùn)動(dòng)。
相比于其他方案,SVO的最大優(yōu)勢是速度極快。由于使用稀疏的直接法,它既不必費(fèi)力去計(jì)算描述子,也不必處理像稠密和半稠密那么多的信息,因此,即使在低端計(jì)算平臺(tái)上也能達(dá)到實(shí)時(shí)性,而在PC平臺(tái)上則可以達(dá)到每秒100多幀的速度。在后續(xù)的SVO 2.0中,速度更達(dá)到了驚人的每秒400幀。這使得SVO非常適用于計(jì)算平臺(tái)受限的場合,例如無人機(jī)、手持AR/VR設(shè)備的定位。無人機(jī)也是作者開發(fā)SVO的目標(biāo)應(yīng)用平臺(tái)。
圖5 SVO跟蹤關(guān)鍵點(diǎn)的圖片。
?
SVO的另一創(chuàng)新之處是提出了深度濾波器的概念,并推導(dǎo)了基于均勻?高斯混合分布的深度濾波器。這在本書的第13講有提及,但由于原理較為復(fù)雜,我們沒有詳細(xì)解釋。SVO將這種濾波器用于關(guān)鍵點(diǎn)的位置估計(jì),并使用了逆深度作為參數(shù)化形式,使之能夠更好地計(jì)算特征點(diǎn)位置。
開源版的SVO代碼清晰易讀,十分適合讀者作為第一個(gè)SLAM實(shí)例進(jìn)行分析。不過,開源版SVO也存在一些問題:
- 由于目標(biāo)應(yīng)用平臺(tái)為無人機(jī)的俯視相機(jī),其視野內(nèi)的物體主要是地面,而且相機(jī)的運(yùn)動(dòng)主要為水平和上下的移動(dòng),SVO的許多細(xì)節(jié)是圍繞這個(gè)應(yīng)用設(shè)計(jì)的,這使得它在平視相機(jī)中表現(xiàn)不佳。例如,SVO在單目初始化時(shí),使用了分解H矩陣而不是傳統(tǒng)的F或E矩陣的方式,這需要假設(shè)特征點(diǎn)位于平面上。該假設(shè)對(duì)俯視相機(jī)是成立的,但對(duì)平視相機(jī)通常是不成立的,可能導(dǎo)致初始化失敗。再如,SVO在關(guān)鍵幀選擇時(shí),使用了平移量作為確定新的關(guān)鍵幀的策略,而沒有考慮旋轉(zhuǎn)量。這同樣在無人機(jī)俯視配置下是有效的,但在平視相機(jī)中則會(huì)容易丟失。所以,如果讀者想要在平視相機(jī)中使用SVO,必須自己加以修改。
- SVO為了速度和輕量化,舍棄了后端優(yōu)化和回環(huán)檢測部分,也基本沒有建圖功能。這意味著SVO的位姿估計(jì)必然存在累積誤差,而且丟失后不太容易進(jìn)行重定位(因?yàn)闆]有描述子用來回環(huán)檢測)。所以,我們稱它為一個(gè)VO,而不是稱它為完整的SLAM。
RTAB-MAP
介紹了幾款單目SLAM方案后,我們?cè)賮砜匆恍㏑GB-D傳感器上的SLAM方案。相比于單目和雙目,RGB-D SLAM的原理要簡單很多(盡管實(shí)現(xiàn)上不一定),而且能夠在CPU上實(shí)時(shí)建立稠密的地圖。
RTAB-MAP(Real Time Appearance-Based Mapping)是RGB-D SLAM中比較經(jīng)典的一個(gè)方案。它實(shí)現(xiàn)了RGB-D SLAM中所有應(yīng)該有的東西:基于特征的視覺里程計(jì)、基于詞袋的回環(huán)檢測、后端的位姿圖優(yōu)化,以及點(diǎn)云和三角網(wǎng)格地圖。因此,RTAB-MAP給出了一套完整的(但有些龐大的)RGB-D SLAM方案。目前我們已經(jīng)可以直接從ROS中獲得其二進(jìn)制程序,此外,在Google Project Tango上也可以獲取其App使用(如圖6所示)。
圖6 RTAB-MAP在Google Project Tango上的運(yùn)行樣例。
?
RTAB-MAP支持一些常見的RGB-D和雙目傳感器,像Kinect、Xtion等,且提供實(shí)時(shí)的定位和建圖功能。不過由于集成度較高,使得其他開發(fā)者在它的基礎(chǔ)上進(jìn)行二次開發(fā)變得困難,所以RTAB-MAP更適合作為SLAM應(yīng)用而非研究使用。
其他
除了這些開源方案之外,讀者還能在openslam.org之類的網(wǎng)站上找到許多其他的研究,例如,DVO-SLAM、RGBD-SLAM-V2、DSO,以及一些Kinect Fusion相關(guān)的工作,等等。隨著時(shí)代發(fā)展,更新穎、更優(yōu)秀的開源SLAM作品亦將出現(xiàn)在人們的視野中,限于篇幅這里就不逐一介紹了。
未來的AR-SLAM話題
看過了現(xiàn)有的方案,我們?cè)賮碛懻撘恍┪磥淼陌l(fā)展方向。大體上講,SLAM將來的發(fā)展趨勢有兩大類:一是朝輕量級(jí)、小型化方向發(fā)展,讓SLAM能夠在嵌入式或手機(jī)等小型設(shè)備上良好運(yùn)行,然后考慮以它為底層功能的應(yīng)用。畢竟,大部分場合中,我們的真正目的都是實(shí)現(xiàn)機(jī)器人、AR/VR設(shè)備的功能,比如說運(yùn)動(dòng)、導(dǎo)航、教學(xué)、娛樂,而SLAM是為上層應(yīng)用提供自身的一個(gè)位姿估計(jì)。在這些應(yīng)用中,我們不希望SLAM占用所有計(jì)算資源,所以對(duì)SLAM的小型化和輕量化有非常強(qiáng)烈的需求,當(dāng)然,這也是我研究的重心所在,如果有感興趣的朋友,希望有機(jī)會(huì)和各位多交流。另一方面則是利用高性能計(jì)算設(shè)備,實(shí)現(xiàn)精密的三維重建、場景理解等功能。在這些應(yīng)用中,我們的目的是完美地重建場景,而對(duì)于計(jì)算資源和設(shè)備的便攜性則沒有多大限制。由于可以利用GPU,這個(gè)方向和深度學(xué)習(xí)亦有結(jié)合點(diǎn)。未來的一個(gè)曉得趨勢就是集成在輕便快捷的普遍持有的設(shè)備的應(yīng)用上,可以結(jié)合各個(gè)領(lǐng)域的特點(diǎn)做出,高精度集成系統(tǒng)系的的開發(fā)和相關(guān)的拓展。
視覺+慣性導(dǎo)航SLAM
首先,我們要談一個(gè)有很強(qiáng)應(yīng)用背景的方向:視覺?慣性導(dǎo)航融合SLAM方案。實(shí)際的機(jī)器人也好,硬件設(shè)備也好,通常都不會(huì)只攜帶一種傳感器,往往是多種傳感器的融合。可以將slam理解為一個(gè)多傳感器融合的問題,很控制。學(xué)術(shù)界的研究人員喜愛“大而且干凈的問題”(Big Clean Problem),比如說僅用單個(gè)攝像頭實(shí)現(xiàn)視覺SLAM。但產(chǎn)業(yè)界的朋友們則更注重讓算法更加實(shí)用,不得不面對(duì)一些復(fù)雜而瑣碎的場景。在這種應(yīng)用背景下,用視覺與慣性導(dǎo)航融合進(jìn)行SLAM成為了一個(gè)關(guān)注熱點(diǎn)。
慣性傳感器(IMU)能夠測量傳感器本體的角速度和加速度,被認(rèn)為與相機(jī)傳感器具有明顯的互補(bǔ)性,而且十分有潛力在融合之后得到更完善的SLAM系統(tǒng)(VIN港科大大牛沈老師團(tuán)隊(duì)研發(fā))。為什么這么說呢?
- IMU雖然可以測得角速度和加速度,但這些量都存在明顯的漂移(Drift),使得積分兩次得到的位姿數(shù)據(jù)非常不可靠。好比說,我們將IMU放在桌上不動(dòng),用它的讀數(shù)積分得到的位姿也會(huì)漂出十萬八千里。但是,對(duì)于短時(shí)間內(nèi)的快速運(yùn)動(dòng),IMU能夠提供一些較好的估計(jì)。這正是相機(jī)的弱點(diǎn)。當(dāng)運(yùn)動(dòng)過快時(shí),(卷簾快門的)相機(jī)會(huì)出現(xiàn)運(yùn)動(dòng)模糊,或者兩幀之間重疊區(qū)域太少以至于無法進(jìn)行特征匹配,所以純視覺SLAM非常害怕快速的運(yùn)動(dòng)。而有了IMU,即使在相機(jī)數(shù)據(jù)無效的那段時(shí)間內(nèi),我們也能保持一個(gè)較好的位姿估計(jì),這是純視覺SLAM無法做到的。
- 相比于IMU,相機(jī)數(shù)據(jù)基本不會(huì)有漂移。如果相機(jī)放在原地固定不動(dòng),那么(在靜態(tài)場景下)視覺SLAM的位姿估計(jì)也是固定不動(dòng)的。所以,相機(jī)數(shù)據(jù)可以有效地估計(jì)并修正IMU讀數(shù)中的漂移,使得在慢速運(yùn)動(dòng)后的位姿估計(jì)依然有效。
- 當(dāng)圖像發(fā)生變化時(shí),本質(zhì)上我們沒法知道是相機(jī)自身發(fā)生了運(yùn)動(dòng),還是外界條件發(fā)生了變化,所以純視覺SLAM難以處理動(dòng)態(tài)的障礙物。而IMU能夠感受到自己的運(yùn)動(dòng)信息,從某種程度上減輕動(dòng)態(tài)物體的影響。
總而言之,我們看到IMU為快速運(yùn)動(dòng)提供了較好的解決方式,而相機(jī)又能在慢速運(yùn)動(dòng)下解決IMU的漂移問題——在這個(gè)意義下,它們二者是互補(bǔ)的。
圖7 越來越多的相機(jī)開始集成IMU設(shè)備。
?
當(dāng)然,雖然說得很好聽,不管是理論還是實(shí)踐,VIO(Visual Inertial Odometry)都是相當(dāng)復(fù)雜的。其復(fù)雜性主要來源于IMU測量加速度和角速度這兩個(gè)量的事實(shí),所以不得不引入運(yùn)動(dòng)學(xué)計(jì)算。目前VIO的框架已經(jīng)定型為兩大類:松耦合(Loosely Coupled)和緊耦合(Tightly Coupled)。松耦合是指IMU和相機(jī)分別進(jìn)行自身的運(yùn)動(dòng)估計(jì),然后對(duì)其位姿估計(jì)結(jié)果進(jìn)行融合。緊耦合是指把IMU的狀態(tài)與相機(jī)的狀態(tài)合并在一起,共同構(gòu)建運(yùn)動(dòng)方程和觀測方程,然后進(jìn)行狀態(tài)估計(jì)——這和我們之前介紹的理論非常相似。我們可以預(yù)見,緊耦合理論也必將分為基于濾波和基于優(yōu)化兩個(gè)方向。在濾波方面,傳統(tǒng)的EKF以及改進(jìn)的MSCKF(Multi-State Constraint KF)都取得了一定的成果,研究者對(duì)EKF也進(jìn)行了深入的討論(例如能觀性);優(yōu)化方面亦有相應(yīng)的方案。值得一提的是,盡管在純視覺SLAM中優(yōu)化方法已經(jīng)占了主流,但在VIO中,由于IMU的數(shù)據(jù)頻率非常高,對(duì)狀態(tài)進(jìn)行優(yōu)化需要的計(jì)算量就更大,因此目前仍處于濾波與優(yōu)化并存的階段。由于過于復(fù)雜,限于篇幅,這里就只能大概地介紹一下這個(gè)方向了。
VIO為將來SLAM的小型化與低成本化提供了一個(gè)非常有效的方向。而且結(jié)合稀疏直接法,我們有望在低端硬件上取得良好的SLAM或VO效果,是非常有前景的,這成為眾多同行努力的焦點(diǎn)之一。
語義SLAM
SLAM的另一個(gè)大方向就是和深度學(xué)習(xí)技術(shù)結(jié)合。到目前為止,SLAM的方案都處于特征點(diǎn)或者像素的層級(jí)。關(guān)于這些特征點(diǎn)或像素到底來自于什么東西???,我們一無所知。這使得計(jì)算機(jī)視覺中的SLAM與我們?nèi)祟惖淖龇ú辉趺聪嗨?#xff0c;至少我們自己從來看不到特征點(diǎn),也不會(huì)去根據(jù)特征點(diǎn)判斷自身的運(yùn)動(dòng)方向。我們看到的是一個(gè)個(gè)物體,通過左右眼判斷它們的遠(yuǎn)近,然后基于它們?cè)趫D像當(dāng)中的運(yùn)動(dòng)推測相機(jī)的移動(dòng),總是深度學(xué)習(xí)也是一種基于生物啟發(fā)式的仿生的基于經(jīng)驗(yàn)的算法,雖然取得很好的效果,但是器里面的激勵(lì)不是很清晰,對(duì)于具體的問題沒有一個(gè)清晰的定義和數(shù)學(xué)表達(dá),一個(gè)和盒子不利于我們對(duì)問題的進(jìn)一步理解和分析。
很久之前,研究者就試圖將物體信息結(jié)合到SLAM中。很多文章曾把物體識(shí)別與視覺SLAM結(jié)合起來,基于深度學(xué)習(xí)的圖像分割、識(shí)別與三位重建會(huì)成為下一個(gè)熱點(diǎn),能力解決是什么的重要問題和在哪兒的問題,物體標(biāo)簽的地圖。另一方面,把標(biāo)簽信息引入到BA或優(yōu)化端的目標(biāo)函數(shù)和約束中,我們可以結(jié)合特征點(diǎn)的位置與標(biāo)簽信息進(jìn)行優(yōu)化。這些工作都可以稱為語義SLAM。綜合來說,SLAM和語義的結(jié)合點(diǎn)主要有兩個(gè)方面:
- 語義幫助SLAM。傳統(tǒng)的物體識(shí)別、分割算法往往只考慮一幅圖,而在SLAM中我們擁有一臺(tái)移動(dòng)的相機(jī)。如果我們把運(yùn)動(dòng)過程中的圖片都帶上物體標(biāo)簽,就能得到一個(gè)帶有標(biāo)簽的地圖。另外,物體信息亦可為回環(huán)檢測、BA優(yōu)化帶來更多的條件。
- SLAM幫助語義。物體識(shí)別和分割都需要大量的訓(xùn)練數(shù)據(jù)。要讓分類器識(shí)別各個(gè)角度的物體,需要從不同視角采集該物體的數(shù)據(jù),然后進(jìn)行人工標(biāo)定,非常辛苦。而SLAM中,由于我們可以估計(jì)相機(jī)的運(yùn)動(dòng),可以自動(dòng)地計(jì)算物體在圖像中的位置,節(jié)省人工標(biāo)定的成本。如果有自動(dòng)生成的帶高質(zhì)量標(biāo)注的樣本數(shù)據(jù),能夠很大程度上加速分類器的訓(xùn)練過程。
 圖8 語義SLAM的一些結(jié)果,左圖和右圖分別來自文獻(xiàn)色sematic slam。
在深度學(xué)習(xí)廣泛應(yīng)用之前,我們只能利用支持向量機(jī)、條件隨機(jī)場等傳統(tǒng)工具對(duì)物體或場景進(jìn)行分割和識(shí)別,或者直接將觀測數(shù)據(jù)與數(shù)據(jù)庫中的樣本進(jìn)行比較,嘗試構(gòu)建語義地圖。由于這些工具本身在分類正確率上存在限制,所以效果也往往不盡如人意。隨著深度學(xué)習(xí)的發(fā)展,我們開始使用網(wǎng)絡(luò),越來越準(zhǔn)確地對(duì)圖像進(jìn)行識(shí)別、檢測和分割。這為構(gòu)建準(zhǔn)確的語義地圖打下了更好的基礎(chǔ)。我們正看到,逐漸開始有學(xué)者將神經(jīng)網(wǎng)絡(luò)方法引入到SLAM中的物體識(shí)別和分割,甚至SLAM本身的位姿估計(jì)與回環(huán)檢測中。雖然這些方法目前還沒有成為主流,但將SLAM與深度學(xué)習(xí)結(jié)合來處理圖像,亦是一個(gè)很有前景的研究方向。未來的發(fā)展一定會(huì)結(jié)合語義信息,加上場景理解,這才是人們認(rèn)識(shí)世界的和理解世界的邏輯。幾何+語義似乎更加符合人類認(rèn)知的特點(diǎn)。隨著計(jì)算能力的增強(qiáng),這些信息的添加會(huì)使得計(jì)算機(jī)更好的處理世界,就像生物的最初的條件反射一樣的系統(tǒng),相信,那才是最完美的系統(tǒng)或者仿生系統(tǒng)。
總結(jié)
以上是生活随笔為你收集整理的SLAM的开源以及在移动端AR的适用分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: ORB-SLAM论文翻译
- 下一篇: 必采纳
