齊詠生 陳培亮 劉利強(qiáng) 董朝軼
(1.內(nèi)蒙古工業(yè)大學(xué)電力學(xué)院,呼和浩特 010051;2.內(nèi)蒙古機(jī)電控制重點(diǎn)實(shí)驗(yàn)室,呼和浩特 010051)
隨著人工智能和大數(shù)據(jù)等技術(shù)的不斷發(fā)展,智能機(jī)器人技術(shù)將提升到一個(gè)新的階段,智能機(jī)器人的自主定位已成為機(jī)器人研究領(lǐng)域的熱點(diǎn)問(wèn)題[1]。智能機(jī)器人涉及控制理論、人工智能技術(shù)、多傳感器數(shù)據(jù)融合技術(shù)、電子信息與計(jì)算機(jī)技術(shù)等多學(xué)科交叉,在很多領(lǐng)域得到了廣泛應(yīng)用[2]。同步定位與建圖(SLAM)技術(shù)是一種為解決機(jī)器人在位置環(huán)境中自主定位問(wèn)題而提出的,也是移動(dòng)機(jī)器人的一項(xiàng)基本能力。移動(dòng)機(jī)器人在未知環(huán)境中,利用板載傳感器嘗試構(gòu)建周圍環(huán)境地圖,并利用這幅地圖來(lái)確定自身的位置[3]。
在視覺(jué)SLAM算法中所用的相機(jī)主要有:?jiǎn)文肯鄼C(jī)、雙目相機(jī)和RGB-D相機(jī)。而單目相機(jī)具有價(jià)格低廉、功耗低、體積小、安裝方便、獲取信息量大、適用于大規(guī)模場(chǎng)景等優(yōu)點(diǎn),因此基于單目相機(jī)的單目SLAM(V-SLAM)算法被廣泛應(yīng)用。
迄今為止,已有一些比較經(jīng)典的V-SLAM算法問(wèn)世,如:MonoSLAM[4]、PTAM[5]、ORB-SLAM[6]、DSO[7]、SVO[8]等。其中ORB-SLAM是目前眾多V-SLAM算法中較為完善的一種開(kāi)源算法,但其本身仍然存在一些問(wèn)題,如:在紋理不明顯的場(chǎng)景無(wú)法初始化且容易跟丟,跟丟之后到重定位之前都不能建圖,丟失了這段地圖信息,如果重定位失敗則無(wú)法建圖;ORB-SLAM的建圖是基于場(chǎng)景的剛性不變的前提下完成的,因此在動(dòng)態(tài)環(huán)境下往往無(wú)法正常跟蹤和建圖。對(duì)于V-SLAM算法跟丟后無(wú)法建圖的問(wèn)題,有些學(xué)者曾經(jīng)提出建立多個(gè)地圖的想法來(lái)解決此問(wèn)題,但效果不理想。
由于V-SLAM算法能夠在動(dòng)態(tài)環(huán)境下正常工作的需求日益增長(zhǎng),近幾年研究人員提出了一些能夠工作于動(dòng)態(tài)環(huán)境下的V-SLAM算法。如2017年LI等[9]提出一種動(dòng)態(tài)環(huán)境下的V-SLAM算法,該算法測(cè)量邊緣點(diǎn)的深度,這些點(diǎn)有其對(duì)應(yīng)的權(quán)重,這些權(quán)重表示對(duì)應(yīng)的點(diǎn)屬于動(dòng)態(tài)物體的概率,而這些概率是通過(guò)地圖上所有邊緣的投影點(diǎn)之間的歐氏距離來(lái)計(jì)算。SUN等[10]在2016年也提出一種基于直接法的動(dòng)態(tài)環(huán)境V-SLAM算法,該算法計(jì)算了連續(xù)RGB圖像之間的強(qiáng)度差異,對(duì)量化后的深度圖像進(jìn)行了像素分類,以此來(lái)實(shí)現(xiàn)對(duì)環(huán)境中的動(dòng)態(tài)物體進(jìn)行檢測(cè)。但是上述兩種V-SLAM算法都只能檢測(cè)正在移動(dòng)的物體,不能檢測(cè)出不屬于靜態(tài)場(chǎng)景,但暫時(shí)未運(yùn)動(dòng)的物體(如:人、汽車、狗等)。
經(jīng)過(guò)前期研究和深入分析發(fā)現(xiàn),目前所研究的V-SLAM算法主要存在2個(gè)缺陷:①V-SLAM算法在跟丟后無(wú)法繼續(xù)建圖(即類似于機(jī)器人的“綁架劫持”)。②無(wú)法在動(dòng)態(tài)環(huán)境下建立環(huán)境真實(shí)地圖。針對(duì)缺陷,本文引入一種多地圖構(gòu)建思想。傳統(tǒng)算法中(如ORB-SLAM2)重定位是一個(gè)貪婪搜索過(guò)程,它要用當(dāng)前幀與之前的所有關(guān)鍵幀進(jìn)行匹配,費(fèi)時(shí)費(fèi)力且容易陷入死循環(huán)。為此本文提出采用局部多地圖構(gòu)建代替?zhèn)鹘y(tǒng)算法中的重定位環(huán)節(jié),即當(dāng)發(fā)生算法跟丟時(shí),直接建立新的局部地圖,而不是進(jìn)入重定位模式。同時(shí)引入基于區(qū)域卷積神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)與多視圖幾何相結(jié)合的動(dòng)態(tài)物體檢測(cè)機(jī)制,利用兩種方法各有優(yōu)勢(shì),解決不同目標(biāo)情況。深度學(xué)習(xí)對(duì)于先驗(yàn)動(dòng)態(tài)目標(biāo)有非常好的檢測(cè)精度,但對(duì)于一些偶然性或未學(xué)習(xí)動(dòng)態(tài)目標(biāo)檢測(cè)率較低。而多視圖幾何技術(shù)剛好可彌補(bǔ)這個(gè)缺失,由于它是利用空間幾何尺度進(jìn)行位姿計(jì)算,對(duì)正在移動(dòng)的目標(biāo)比較敏感。不過(guò),多視圖幾何技術(shù)也有缺陷,對(duì)緩變或暫時(shí)靜止目標(biāo)無(wú)法檢測(cè),如一個(gè)暫時(shí)不動(dòng)的動(dòng)態(tài)目標(biāo)人,多視圖幾何技術(shù)幾乎不能檢測(cè)出它是動(dòng)態(tài)目標(biāo)。最后,針對(duì)地圖構(gòu)建中背景修復(fù)問(wèn)題,本文提出一種基于時(shí)間加權(quán)濾波的多幀融合算法,對(duì)動(dòng)態(tài)物體遮擋部分的地圖進(jìn)行背景修復(fù)。
綜上,本文提出一種基于單目視覺(jué)的動(dòng)態(tài)環(huán)境同步定位與多地圖構(gòu)建(Dynamic environment simultaneous location and multi mapping,DE-SLAMM)算法。該算法分為5個(gè)線程,包含跟蹤、局部建圖、回環(huán)檢測(cè)、多地圖構(gòu)建和動(dòng)態(tài)目標(biāo)檢測(cè)與背景修復(fù)的完整過(guò)程。最后采用實(shí)際場(chǎng)景對(duì)算法的有效性進(jìn)行驗(yàn)證,并與3種經(jīng)典的V-SLAM算法進(jìn)行比較。
ORB-SLAM2算法[11]建立在ORB-SLAM算法的基礎(chǔ)上,是當(dāng)前主流的V-SLAM算法之一。該算法主要包含3個(gè)線程:跟蹤、建圖、回環(huán)檢測(cè)。跟蹤線程負(fù)責(zé)從圖像中提取ORB特征,根據(jù)上一幀進(jìn)行姿態(tài)估計(jì),或者通過(guò)全局重定位初始化位姿,然后跟蹤已經(jīng)構(gòu)建的局部地圖,優(yōu)化位姿,再根據(jù)一些規(guī)則確定新的關(guān)鍵幀。建圖線程主要完成局部地圖構(gòu)建,包括對(duì)關(guān)鍵幀的插入,驗(yàn)證最近生成的地圖點(diǎn)并進(jìn)行篩選,然后生成新的地圖點(diǎn),再使用局部捆綁調(diào)整(Local BA)進(jìn)行優(yōu)化,最后再對(duì)插入的關(guān)鍵幀進(jìn)行篩選,去除多余的關(guān)鍵幀?;丨h(huán)檢測(cè)線程主要分為閉環(huán)探測(cè)和閉環(huán)校正。閉環(huán)探測(cè)先使用詞袋(BOW)進(jìn)行探測(cè),然后通過(guò)Sim3算法計(jì)算相似變換;閉環(huán)校正主要是閉環(huán)融合和對(duì)本質(zhì)圖(Essential graph)的圖優(yōu)化。
分析可知,ORB-SLAM2算法常常存在算法跟丟后無(wú)法繼續(xù)跟蹤和建圖,以及無(wú)法在動(dòng)態(tài)環(huán)境下建圖的問(wèn)題。因?yàn)镺RB-SLAM2算法在跟丟后會(huì)直接進(jìn)入重定位模式,并在重定位模式中進(jìn)行無(wú)限的重定位直到回到之前重定位的位置才能跳出,然而很多情況達(dá)不到跳出條件而陷入長(zhǎng)循環(huán),導(dǎo)致算法失效。此外ORB-SLAM2無(wú)法在動(dòng)態(tài)環(huán)境下建立真實(shí)地圖,是因?yàn)樗狈?duì)動(dòng)態(tài)目標(biāo)的實(shí)時(shí)有效檢測(cè),導(dǎo)致地圖失效。為此,本文在ORB-SLAM2算法基礎(chǔ)上,對(duì)其原有3個(gè)線程進(jìn)行改進(jìn),并增加了2個(gè)新的線程,提出了DE-SLAMM算法。
多視圖幾何[12](Multiple view geometry)主要研究用幾何的方法,通過(guò)若干幅二維圖像,來(lái)恢復(fù)物體在三維空間的位置。
多視圖幾何技術(shù)有2種測(cè)量方法:
(1)用對(duì)極幾何計(jì)算相機(jī)的位姿,如圖1所示。
圖1 對(duì)極幾何測(cè)量方法示意圖Fig.1 Diagram of polar geometry measurement method
計(jì)算公式為
E=R
(1)
F=(K-1)TEK-1
(2)
式中R——當(dāng)前幀相對(duì)于前一幀圖像的旋轉(zhuǎn)矩陣
K——相機(jī)內(nèi)參矩陣
E——本質(zhì)矩陣
F——基本矩陣
之后利用八點(diǎn)法對(duì)式(2)求解,即可求出相機(jī)相對(duì)于前一幀圖像的位姿。
(2)用三角測(cè)量方法計(jì)算空間點(diǎn)的深度s1、s2,如圖2所示。
圖2 三角測(cè)量方法示意圖Fig.2 Schematic of triangulation method
設(shè)x1、x2為點(diǎn)p1、p2在圖像中的坐標(biāo),則
s2x2=s1Rx1+t
(3)
式中t——前一幀到當(dāng)前幀的平移向量
又因?yàn)?/p>
s22x2=0
(4)
則
s12Rx1+2t=0
(5)
最后通過(guò)式(4)和式(5)求出點(diǎn)p1、p2的深度s1、s2。
Mask R-CNN[13]是一種簡(jiǎn)單、靈活、通用的目標(biāo)實(shí)例分割框架,它能夠有效檢測(cè)圖像中的對(duì)象,同時(shí)生成每個(gè)先驗(yàn)實(shí)例的高質(zhì)量分割掩膜,其實(shí)例分割的實(shí)現(xiàn)是在Faster R-CNN的基礎(chǔ)上加了一個(gè)可以預(yù)測(cè)目標(biāo)掩膜(Mask)的分支,它很容易拓展到其他任務(wù),如:關(guān)鍵點(diǎn)的檢測(cè),該算法在COCO數(shù)據(jù)集中的目標(biāo)檢測(cè)、實(shí)例分割、人體關(guān)鍵點(diǎn)檢測(cè)都取得了較好的效果。
由于Mask R-CNN能夠有效檢測(cè)圖像中的對(duì)象且能夠?qū)ο闰?yàn)實(shí)例對(duì)象進(jìn)行分割,因此這種實(shí)例分割算法可用于V-SLAM中,用來(lái)提取環(huán)境中的動(dòng)態(tài)實(shí)例對(duì)象,從而達(dá)到對(duì)環(huán)境中先驗(yàn)動(dòng)態(tài)對(duì)象檢測(cè)的目的。
DE-SLAMM算法主要由跟蹤、局部建圖、回環(huán)檢測(cè)、多地圖構(gòu)建、動(dòng)態(tài)目標(biāo)檢測(cè)與背景修復(fù)5部分組成。
DE-SLAMM算法基本框架如圖3所示。跟蹤、局部建圖和回環(huán)檢測(cè)線程是以O(shè)RB-SLAM2算法為基礎(chǔ),本文算法對(duì)其進(jìn)行了一定的改進(jìn)。首先,考慮到大部分環(huán)境都是特征比較明顯的場(chǎng)景,因此,本算法對(duì)跟蹤線程中的初始化部分進(jìn)行修正,去除了對(duì)單應(yīng)性矩陣的計(jì)算,在不影響算法性能的基礎(chǔ)上提升算法初始化的速度;其次,在局部建圖線程中增加任務(wù)轉(zhuǎn)移功能,該功能由跟蹤線程發(fā)起,實(shí)現(xiàn)將建圖任務(wù)向新地圖的轉(zhuǎn)移;最后,在回環(huán)檢測(cè)線程中增加任務(wù)轉(zhuǎn)移功能和將局部關(guān)鍵幀數(shù)據(jù)庫(kù)添加到全局關(guān)鍵幀數(shù)據(jù)庫(kù)中的功能。
圖3 DE-SLAMM框架示意圖Fig.3 Schematic of DE-SLAMM framework
當(dāng)算法跟丟后,跟蹤線程會(huì)建立一個(gè)新的局部地圖插入到多地圖構(gòu)建線程中。并且在回環(huán)檢測(cè)時(shí),該線程將插入的新地圖與之前的地圖進(jìn)行融合。
動(dòng)態(tài)檢測(cè)與背景修復(fù)線程實(shí)現(xiàn)對(duì)動(dòng)態(tài)環(huán)境目標(biāo)進(jìn)行自動(dòng)檢測(cè)和背景修復(fù)的功能。該線程利用Mask R-CNN對(duì)單目相機(jī)獲取的圖像進(jìn)行像素語(yǔ)義分割即可分割出先驗(yàn)動(dòng)態(tài)對(duì)象;再利用多視圖幾何技術(shù)檢測(cè)出正在移動(dòng)的動(dòng)態(tài)對(duì)象,之后在建圖中去除動(dòng)態(tài)對(duì)象,實(shí)現(xiàn)動(dòng)態(tài)環(huán)境建圖。在動(dòng)態(tài)檢測(cè)線程中被剔除的動(dòng)態(tài)對(duì)象在地圖中顯示為空白部分,為此提出一種時(shí)間加權(quán)濾波的多幀融合背景修復(fù)算法,對(duì)空白部分的靜態(tài)地圖進(jìn)行修復(fù)。
2.2.1跟蹤線程改進(jìn)
跟蹤線程的任務(wù)主要是對(duì)新地圖進(jìn)行初始化和對(duì)環(huán)境進(jìn)行跟蹤。本文算法跟蹤線程中的初始化部分只要計(jì)算非平面場(chǎng)景的基本矩陣,不需要計(jì)算平面場(chǎng)景的單應(yīng)性矩陣。由于一般場(chǎng)景都是特征較為明顯的場(chǎng)景,而且本文算法包含多地圖構(gòu)建線程,無(wú)需考慮算法跟丟之后無(wú)法繼續(xù)建圖的問(wèn)題,因此,去掉單應(yīng)性矩陣計(jì)算,整體算法性能并不受影響,且可以顯著加快初始化速度。跟蹤線程初始化方法如下:
計(jì)算場(chǎng)景的基本矩陣Fcr為
(6)
式中xc——當(dāng)前幀的ORB特征點(diǎn)
xr——參考幀的ORB特征點(diǎn)
再由相機(jī)內(nèi)參矩陣K和基本矩陣Fcr計(jì)算本質(zhì)矩陣Erc為
Erc=KTFcrK
(7)
之后,對(duì)本質(zhì)矩陣進(jìn)行分解得到4個(gè)位姿,再通過(guò)三角測(cè)量的方法來(lái)驗(yàn)證這4個(gè)位姿以獲取相機(jī)正確的位姿,即可完成地圖的初始化,并建立初始地圖。
在初始化工作完成之后,先以1.2倍的比例因子提取8個(gè)金字塔級(jí)別的加速分段測(cè)試特征(Features from accelerated segment test,FAST)角點(diǎn),保留角點(diǎn)的數(shù)量取決于圖像尺寸和圖像內(nèi)角點(diǎn)的分布,然后再計(jì)算ORB描述符,檢測(cè)是否初始化,如果未初始化則重新初始化,若已完成初始化,則用運(yùn)動(dòng)模型來(lái)計(jì)算當(dāng)前位姿繼續(xù)跟蹤局部地圖中的所有點(diǎn),計(jì)算公式為
T′cw=MTcw
(8)
其中
式中T′cw——相機(jī)當(dāng)前幀位姿
ΔR——旋轉(zhuǎn)矩陣變化量
Δt——平移向量變化量
Tcw——相機(jī)上一幀位姿
若上一幀的地圖點(diǎn)與當(dāng)前幀地圖點(diǎn)匹配點(diǎn)數(shù)小于等于設(shè)定的閾值時(shí),就會(huì)將匹配模塊放在更寬的范圍內(nèi)匹配;若匹配點(diǎn)數(shù)大于閾值,則優(yōu)化當(dāng)前位姿,丟棄離群點(diǎn)。
本文算法中,若跟蹤成功,則算法會(huì)檢查是否需要一個(gè)新的關(guān)鍵幀,再通知局部建圖線程處理該關(guān)鍵幀,并將其加入到地圖中。若跟蹤失敗,則跟蹤線程會(huì)直接重新初始化建立一個(gè)新的局部地圖,再將新的局部地圖及其關(guān)鍵幀數(shù)據(jù)庫(kù)加入到多地圖構(gòu)建線程中,并通知局部建圖線程和回環(huán)檢測(cè)線程將建圖任務(wù)和回環(huán)檢測(cè)任務(wù)轉(zhuǎn)移到新的局部地圖中進(jìn)行,而不是進(jìn)入重定位模式進(jìn)行重定位。
2.2.2局部建圖線程改進(jìn)
局部建圖線程在地圖初始化完成后,首先插入第一個(gè)關(guān)鍵幀作為參考關(guān)鍵幀(Key frames,KFS)KFSr,且將此時(shí)相機(jī)位置設(shè)為世界坐標(biāo)的坐標(biāo)原點(diǎn)Ow,根據(jù)初始化中計(jì)算的特征點(diǎn)的深度信息計(jì)算出每個(gè)特征點(diǎn)在世界坐標(biāo)中的位置,最后創(chuàng)建初始地圖的地圖點(diǎn),如圖4所示。世界坐標(biāo)系計(jì)算公式為
圖4 地圖點(diǎn)計(jì)算示意圖Fig.4 Map point calculation schematic
Pw=sT-1K-1p1
(9)
式中Pw——世界坐標(biāo)
s——特征點(diǎn)的深度
T——相機(jī)位姿,在參考幀中相機(jī)位姿為1(相機(jī)坐標(biāo)系與世界坐標(biāo)系重合)
另外,局部建圖線程還會(huì)刪除初始地圖中一部分可見(jiàn)性低或不可跟蹤的地圖點(diǎn),最后對(duì)局部地圖進(jìn)行局部捆綁調(diào)整(BA)優(yōu)化。之后不斷地接受新關(guān)鍵幀,利用式(9)計(jì)算地圖點(diǎn)位置并建圖。
本文算法中,當(dāng)跟蹤失敗后,跟蹤線程創(chuàng)建一個(gè)新的局部地圖,局部建圖線程接收到跟蹤線程發(fā)出的任務(wù)轉(zhuǎn)移消息后,將建圖任務(wù)轉(zhuǎn)移到新的局部地圖中,重復(fù)上述建圖過(guò)程。
2.2.3回環(huán)檢測(cè)線程改進(jìn)
回環(huán)檢測(cè)線程在接收到一個(gè)關(guān)鍵幀時(shí),先將其轉(zhuǎn)換為視覺(jué)詞匯,描述如下:
設(shè)不同類型特征點(diǎn)的視覺(jué)詞匯分別為w1、w2、…、wn,再用一組向量表示一個(gè)關(guān)鍵幀
A′=a1w1+a2w2+…+anwn
(10)
A=(a1,a2,…,an)
(11)
式中A——接收到的關(guān)鍵幀的視覺(jué)詞匯向量
A′——接收到的關(guān)鍵幀的視覺(jué)詞匯
a1、a2、…、an——每一種特征點(diǎn)在關(guān)鍵幀中出現(xiàn)的次數(shù)
將一個(gè)關(guān)鍵幀轉(zhuǎn)換成了一個(gè)視覺(jué)詞匯向量。再將視覺(jué)詞匯插入到局部關(guān)鍵幀數(shù)據(jù)庫(kù)中,并計(jì)算當(dāng)前幀的視覺(jué)詞匯與局部關(guān)鍵幀數(shù)據(jù)庫(kù)中的其他關(guān)鍵幀的視覺(jué)詞匯的相似性評(píng)分S為
(12)
式中n——視覺(jué)詞匯數(shù)
ai——第i種特征點(diǎn)在關(guān)鍵幀數(shù)據(jù)庫(kù)中出現(xiàn)次數(shù)
bi——第i種特征點(diǎn)在局部關(guān)鍵幀數(shù)據(jù)庫(kù)中出現(xiàn)次數(shù)
由式(12)可知,S越小表示相似度越高,因此需要找到S小于設(shè)定閾值Smin(本文中Smin為0.05)且與當(dāng)前關(guān)鍵幀沒(méi)有直接鏈接的關(guān)鍵幀,將這些關(guān)鍵幀作為候選幀,再計(jì)算每個(gè)候選幀的相似變換來(lái)確定回環(huán)關(guān)鍵幀,若存在回環(huán)關(guān)鍵幀,則將回環(huán)的地圖點(diǎn)進(jìn)行融合,并對(duì)相機(jī)的位姿進(jìn)行修正,否則繼續(xù)在局部地圖中做回環(huán)檢測(cè)。
在本文算法中,當(dāng)跟蹤失敗后,跟蹤線程創(chuàng)建1個(gè)新的局部地圖,回環(huán)檢測(cè)線程接收到跟蹤線程發(fā)出的任務(wù)轉(zhuǎn)移消息后,將回環(huán)檢測(cè)的任務(wù)轉(zhuǎn)移到新的局部地圖中,將局部關(guān)鍵幀數(shù)據(jù)庫(kù)添加到全局關(guān)鍵幀數(shù)據(jù)庫(kù)中,再重復(fù)上述回環(huán)檢測(cè)過(guò)程。
傳統(tǒng)的V-SLAM算法在跟丟之后就會(huì)進(jìn)入重定位模式,由于重定位模式本質(zhì)上是一種貪婪搜索過(guò)程,需要進(jìn)行無(wú)限的重定位直到回到之前重定位的位置,若無(wú)法回到該位置,則會(huì)導(dǎo)致算法失效。為解決該問(wèn)題,本文引入了多地圖構(gòu)建思想,并設(shè)計(jì) 了一種多地圖構(gòu)建線程,算法示意圖如圖5所示。
圖5 多地圖構(gòu)建線程算法示意圖Fig.5 Schematic of multi-map builder thread algorithm
多地圖構(gòu)建線程主要功能是將基于局部建圖線程建立的多個(gè)局部地圖及其關(guān)鍵幀數(shù)據(jù)庫(kù)保存下來(lái),同時(shí)檢測(cè)正在跟蹤的當(dāng)前局部地圖與保存的全局地圖是否有回環(huán)現(xiàn)象,若有回環(huán)則進(jìn)行地圖融合,并同時(shí)優(yōu)化相機(jī)位姿。多地圖構(gòu)建線程具體流程如下:
(1)當(dāng)算法開(kāi)始運(yùn)行后,跟蹤線程會(huì)創(chuàng)建第1個(gè)地圖M0及其局部關(guān)鍵幀數(shù)據(jù)庫(kù)KFS0,并將其傳入到多地圖構(gòu)建線程中,再由跟蹤線程、局部建圖線程和回環(huán)檢測(cè)線程在地圖M0中進(jìn)行跟蹤和建圖,只要跟蹤線程沒(méi)有跟丟,多地圖構(gòu)建線程就處于空閑狀態(tài)。
(2)到第n次跟蹤線程跟丟后,跟蹤線程將創(chuàng)建一個(gè)新的地圖Mn及其關(guān)鍵幀數(shù)據(jù)庫(kù)KFSn,并將其傳遞給多地圖構(gòu)建線程中的全局地圖M和全局關(guān)鍵幀數(shù)據(jù)庫(kù)。
(3)跟蹤線程嘗試重新初始化,一旦初始化成功,就會(huì)通知各線程將跟蹤和建圖的任務(wù)轉(zhuǎn)移到局部地圖Mn中運(yùn)行,此時(shí)多地圖構(gòu)建線程會(huì)掃描新地圖的局部關(guān)鍵幀數(shù)據(jù)庫(kù)KFSn中存儲(chǔ)的關(guān)鍵幀,并與之前的全局關(guān)鍵幀數(shù)據(jù)庫(kù)中存儲(chǔ)的關(guān)鍵幀進(jìn)行匹配。
(4)匹配方法與回環(huán)檢測(cè)過(guò)程類似,多地圖構(gòu)建線程遍歷之前所有的局部關(guān)鍵幀數(shù)據(jù)庫(kù)(KFS0~KFS(n-1)),并計(jì)算之前所有關(guān)鍵幀與當(dāng)前關(guān)鍵幀之間的最小相似性評(píng)分來(lái)查詢之前的地圖中是否有與當(dāng)前關(guān)鍵幀Kc匹配的關(guān)鍵幀。
(5)對(duì)于每一個(gè)局部地圖Mi(i=1,2,…,n)中的關(guān)鍵幀Kj,若它與Kc有超過(guò)15個(gè)匹配點(diǎn),則讓求解器來(lái)計(jì)算它們之間的相似變換,或者對(duì)每個(gè)Kj執(zhí)行隨機(jī)采樣一致性(RANSC)迭代,直到找到具有足夠匹配點(diǎn)的Kj,或者所有的候選幀都失敗。若RANSC迭代后能夠返回一個(gè)相似變換,則可對(duì)這個(gè)相似變換進(jìn)行優(yōu)化,若優(yōu)化之后仍有足夠的匹配點(diǎn),則Kj被認(rèn)為是一個(gè)回環(huán)關(guān)鍵幀。而所有在Kj及其相鄰幀中看到的地圖點(diǎn)都會(huì)在Kc被檢測(cè)和重投影,再利用計(jì)算出的相似變換搜索更多的匹配幀。若所有的匹配幀對(duì)應(yīng)的點(diǎn)數(shù)超過(guò)閾值,則認(rèn)為此處為回環(huán)。
(6)多地圖構(gòu)建線程檢測(cè)到回環(huán)的地圖與當(dāng)前地圖進(jìn)行地圖融合,并對(duì)相機(jī)位姿進(jìn)行優(yōu)化,最后生成新的全局地圖M′。地圖融合的方法如下:多地圖構(gòu)建線程先計(jì)算出Kc與Kj的相似變換矩陣Scw,再利用Scw將局部地圖Mn與產(chǎn)生回環(huán)的地圖Mi通過(guò)回環(huán)融合(同回環(huán)檢測(cè)中的回環(huán)融合)連接在一起,若這兩個(gè)地圖是第1次融合,則檢索Mn的所有關(guān)鍵幀和地圖點(diǎn),否則就只檢索Kc的相鄰幀及其地圖點(diǎn),之后再將Kc的位姿設(shè)置為Scw進(jìn)行校正,并將檢測(cè)到的每個(gè)關(guān)鍵幀的位姿轉(zhuǎn)換為地圖Mi坐標(biāo)系下的坐標(biāo)
Tic=TiwTwc
(13)
Tcorr=TicTwc
(14)
式中Tiw——校正前檢索到的關(guān)鍵幀位姿
Twc——校正前Kc的逆位姿
Tcorr——在Mi坐標(biāo)系中對(duì)檢索到的關(guān)鍵幀進(jìn)行校正后的位姿
綜上,每個(gè)檢索到的關(guān)鍵幀及其相鄰幀的地圖點(diǎn)都被校正為地圖Mi坐標(biāo)系下的坐標(biāo),之后將Kj及其相鄰幀的地圖點(diǎn)投影到Kc及其相鄰幀中,這樣就完成了地圖之間的融合。
傳統(tǒng)的V-SLAM算法是基于剛性環(huán)境設(shè)計(jì)的,不適用于實(shí)際的動(dòng)態(tài)環(huán)境。為此,本文利用Mask R-CNN神經(jīng)網(wǎng)絡(luò)框架與多視圖幾何技術(shù)互補(bǔ)結(jié)合的方法,實(shí)現(xiàn)了一種動(dòng)態(tài)目標(biāo)實(shí)時(shí)檢測(cè)算法來(lái)解決動(dòng)態(tài)環(huán)境跟蹤問(wèn)題,算法的基本框架如圖6所示。
圖6 動(dòng)態(tài)檢測(cè)與背景修復(fù)線程算法示意圖Fig.6 Schematic of dynamic detection and background repair thread algorithm
如圖6所示,動(dòng)態(tài)檢測(cè)與背景修復(fù)線程主要包括:Mask R-CNN神經(jīng)網(wǎng)絡(luò)模塊、低成本跟蹤模塊、多視圖幾何模塊和背景修復(fù)模塊。
Mask R-CNN神經(jīng)網(wǎng)絡(luò)框架是一種對(duì)象實(shí)例分割算法,它既可以獲得像素級(jí)語(yǔ)義分割圖像,也可以獲取實(shí)例標(biāo)簽,而本文只使用Mask R-CNN獲取的像素級(jí)語(yǔ)義分割圖像,并將分割圖像傳給低成本跟蹤模塊。即先利用Pycharm平臺(tái)的TensorFlow訓(xùn)練出Mask R-CNN需要獲取的動(dòng)態(tài)對(duì)象的模型(如:人、牛、馬、羊、自行車、汽車和公交車等),然后再將此模型放入本文算法文件夾中,應(yīng)用此模型即可檢測(cè)到環(huán)境中的相應(yīng)動(dòng)態(tài)對(duì)象(先驗(yàn)對(duì)象)。
顯然,先驗(yàn)對(duì)象不可能涵蓋所有,一定存在一些動(dòng)態(tài)對(duì)象不能被Mask R-CNN算法分割出來(lái),例如一個(gè)人拿著一個(gè)椅子在走動(dòng),人可以被分割出來(lái),但是椅子卻不能,但椅子也屬于動(dòng)態(tài)物體卻未被分割。為此,引入多視圖幾何技術(shù),前人的研究已表明,該技術(shù)能夠很好地實(shí)現(xiàn)移動(dòng)對(duì)象的檢測(cè)[14]。因此,將其與Mask R-CNN算法相結(jié)合,可實(shí)現(xiàn)動(dòng)態(tài)目標(biāo)檢測(cè)的優(yōu)勢(shì)互補(bǔ)。
低成本跟蹤模塊是對(duì)跟蹤線程進(jìn)行簡(jiǎn)化后得到的一個(gè)模塊,采用低成本的跟蹤模塊將相機(jī)定位在已創(chuàng)建的場(chǎng)景地圖中,并為檢測(cè)潛在的動(dòng)態(tài)對(duì)象做鋪墊(如上述中的椅子)。首先,獲取Mask R-CNN處理后的圖像幀,將相機(jī)定位到已建立的地圖場(chǎng)景中;其次從該地圖場(chǎng)景將局部建圖線程生成的地圖點(diǎn)重投影到分割的圖像幀中,在圖像幀中搜索特征點(diǎn),保留靜態(tài)區(qū)域特征點(diǎn),刪除動(dòng)態(tài)區(qū)域的特征點(diǎn);最后,將該圖像幀傳入到多視圖幾何模塊。
利用多視圖幾何模塊對(duì)正在移動(dòng)的目標(biāo)進(jìn)行檢測(cè)。具體步驟如下:
(1)輸入幀要選擇重疊度最高的關(guān)鍵幀,為了充分考慮新幀與每個(gè)關(guān)鍵幀之間的距離和旋轉(zhuǎn)要求,將重疊關(guān)鍵幀的數(shù)量設(shè)置一個(gè)閾值(本文中設(shè)置為5),這個(gè)閾值表征了計(jì)算損失和檢測(cè)動(dòng)態(tài)對(duì)象準(zhǔn)確性之間的權(quán)衡,其目標(biāo)是在保證檢測(cè)到的動(dòng)態(tài)對(duì)象準(zhǔn)確的前提下,最大限度的降低計(jì)算帶來(lái)的損失,若閾值過(guò)大會(huì)使地圖更容易跟丟,而閾值太小則會(huì)使計(jì)算量過(guò)大,從而降低算法的執(zhí)行效率。
(2)利用三角測(cè)量方法計(jì)算上一幀的像素點(diǎn)x投影到當(dāng)前幀像素點(diǎn)x′的深度zproj,計(jì)算公式為
zproj′x′=0
(15)
計(jì)算x′和′的反向投影之間的視差角[8]α為
α=arccos〈n·n′〉
(16)
〈·〉——向量積運(yùn)算符號(hào)
判斷α是否大于設(shè)定閾值β(本例中取30°)。閾值β若偏大則檢測(cè)不到微弱運(yùn)動(dòng)的物體,閾值β若偏小則可能會(huì)將不動(dòng)的物體檢測(cè)為運(yùn)動(dòng)物體。若大于β,則認(rèn)為該關(guān)鍵點(diǎn)可能被遮擋,之后忽略此關(guān)鍵點(diǎn)。但有時(shí)靜態(tài)點(diǎn)也有可能會(huì)大于β,因此,需要增加一個(gè)限制條件,即先獲取當(dāng)前幀像素點(diǎn)x′的深度z′,再計(jì)算其重投影誤差zproj,最后比較z′與zproj的差值Δz,計(jì)算式為
Δz=zproj-z′
(17)
若Δz超過(guò)閾值τz,則認(rèn)為像素點(diǎn)x′屬于動(dòng)態(tài)對(duì)象,否則為靜態(tài)。因此,只要滿足Δz>τz,則認(rèn)為像素點(diǎn)為動(dòng)態(tài)點(diǎn),后續(xù)就忽略對(duì)應(yīng)的動(dòng)態(tài)點(diǎn)。圖7是靜態(tài)對(duì)象與動(dòng)態(tài)對(duì)象的檢測(cè)示意圖。
圖7 靜態(tài)對(duì)象與動(dòng)態(tài)對(duì)象檢測(cè)示意圖Fig.7 Static object and dynamic object detection schematics
(3)在正確判斷動(dòng)態(tài)對(duì)象之后,將動(dòng)態(tài)對(duì)象中包含的特征點(diǎn)去除,生成一個(gè)分割幀,將分割幀傳遞給跟蹤線程進(jìn)行跟蹤。
(4)由于動(dòng)態(tài)目標(biāo)被動(dòng)態(tài)檢測(cè)線程分割出來(lái),局部建圖線程建圖時(shí)就不會(huì)對(duì)動(dòng)態(tài)物體建圖,因此靜態(tài)地圖中出現(xiàn)動(dòng)態(tài)部分的空缺,需要對(duì)動(dòng)態(tài)空缺部分進(jìn)行修復(fù)。為此,本文提出了一種基于時(shí)間加權(quán)濾波的多幀融合算法來(lái)修復(fù)空缺部分的地圖,如圖8所示。
圖8 背景修復(fù)示意圖Fig.8 Background restoration diagram
從當(dāng)前時(shí)刻,回溯前n個(gè)時(shí)刻的關(guān)鍵幀圖像來(lái)進(jìn)行背景修復(fù),令不同時(shí)間的關(guān)鍵幀所占的融合權(quán)重不同,越靠近當(dāng)前幀的關(guān)鍵幀權(quán)重越大,則有
(18)
式中KFSi——ti時(shí)刻的關(guān)鍵幀
KFSc——當(dāng)前關(guān)鍵幀
KFS——修復(fù)關(guān)鍵幀
即可利用n個(gè)關(guān)鍵幀合成一個(gè)關(guān)鍵幀用于背景修復(fù)。不過(guò),合成后的關(guān)鍵幀仍然有可能會(huì)有少量空缺部分未被修復(fù),此時(shí)可對(duì)合成關(guān)鍵幀的像素進(jìn)行平滑濾波來(lái)修復(fù)少量未被修復(fù)的部分。若像素位置第i1~i2行、第j1~j2列未被修復(fù),則設(shè)置平滑濾波閾值k,進(jìn)行平滑濾波,計(jì)算公式為
(19)
式中ui,j——修復(fù)前圖像第i行第j列的像素值
u′i,j——修復(fù)后圖像第i行第j列的像素值
即可實(shí)現(xiàn)圖像修復(fù)。
為驗(yàn)證本文算法的有效性,采用TUM RGB-D Benchmark公共數(shù)據(jù)集[14-19]的多個(gè)典型視頻序列對(duì)算法進(jìn)行測(cè)試,包括初始化及跟蹤速度、算法跟丟后多地圖構(gòu)建、動(dòng)態(tài)環(huán)境下檢測(cè)效果和有效性問(wèn)題等。最后將本文提出的DE-SLAMM算法與ORB-SLAM2算法[11]、ORBSLAMM算法[3]和DynaSLAM算法[20]進(jìn)行了性能比較。實(shí)驗(yàn)平臺(tái)的硬件環(huán)境為Intel Core i7-10750 CPU,2.6 GHz,x6 cores,16 GB RAM,實(shí)驗(yàn)結(jié)果表明該算法能以每個(gè)序列的幀速率實(shí)時(shí)運(yùn)行。
此外,在實(shí)驗(yàn)前,算法會(huì)對(duì)先驗(yàn)對(duì)象進(jìn)行訓(xùn)練,以先驗(yàn)對(duì)象“人”為例簡(jiǎn)要說(shuō)明訓(xùn)練過(guò)程。首先,在COCO數(shù)據(jù)集中提取約1 000幅“人”的圖像及其標(biāo)簽文件,利用Mask R-CNN神經(jīng)網(wǎng)絡(luò)框架訓(xùn)練出先驗(yàn)動(dòng)態(tài)目標(biāo)“人”的模型文件;之后,將此模型文件加入本文算法的文件夾中;最后,在實(shí)驗(yàn)運(yùn)行階段,程序會(huì)自動(dòng)調(diào)用訓(xùn)練好的Mask R-CNN模型文件,檢測(cè)環(huán)境中的先驗(yàn)動(dòng)態(tài)目標(biāo)。
首先,本文利用TUM RGB-D Benchmark公共數(shù)據(jù)集中的fr1-xyz、fr1-desk、fr3-nostr-tex-far和fr3-nostr-tex-near-loop這4個(gè)視頻序列對(duì)本文算法的初始化及跟蹤速度進(jìn)行測(cè)試,并與上述3種算法的初始化速度及跟蹤時(shí)間進(jìn)行了比較,測(cè)試結(jié)果如表1所示。
表1 DE-SLAMM算法與其他3種SLAM算法的初始化及跟蹤速度比較Tab.1 Comparison of initialization and tracking speed between DE-SLAMM and other three SLAM algorithms
其中,fr1-xyz和fr1-desk視頻序列所用相機(jī)內(nèi)參矩陣為
fr3-nostr-tex-far和fr3-nostr-tex-near-loop視頻序列所用的相機(jī)內(nèi)參矩陣為
由表1可知,正常情況下在這幾個(gè)序列中,ORB-SLAM2算法的初始化時(shí)間平均為11 s左右;DynaSLAM算法的初始化時(shí)間平均為16 s左右;ORBSLAMM算法的初始化時(shí)間平均為6 s左右;而本文算法的初始化時(shí)間平均為7 s左右。分析可知,在ORB-SLAM2和DynaSLAM算法初始化時(shí),都需要計(jì)算一個(gè)單應(yīng)性矩陣和一個(gè)基本矩陣,導(dǎo)致其初始化時(shí)間較長(zhǎng);而在ORBSLAMM和本文算法中,只需要計(jì)算一個(gè)基本矩陣,因此初始化速度明顯加快。
在平均跟蹤時(shí)間上,由于DynaSLAM算法跟蹤線程的計(jì)算較復(fù)雜,而且還需要等待Mask R-CNN的處理結(jié)果,因此其跟蹤速度較慢;DE-SLAMM算法和ORB-SLAM2算法跟蹤速度近似,跟蹤速度較快;而ORBSLAMM算法的跟蹤線程最簡(jiǎn)單,因此其跟蹤速度最快。
在測(cè)試DE-SLAMM多地圖構(gòu)建性能時(shí),為了能夠更好地展現(xiàn)出DE-SLAMM算法在跟丟后能夠繼續(xù)跟蹤和建圖,采用了兩個(gè)比較典型的跟丟測(cè)試視頻序列fr2-360-kidnap、fr1-floor進(jìn)行實(shí)驗(yàn),仍與上述3種算法進(jìn)行了性能比較。
實(shí)驗(yàn)1使用fr2-360-kidnap視頻序列,這個(gè)視頻序列是在工廠里先讓相機(jī)運(yùn)動(dòng)十幾秒,再用物體將相機(jī)遮擋幾秒,并移動(dòng)到其他位置,讓相機(jī)無(wú)法捕捉到被蓋住這段時(shí)間的環(huán)境圖像,3 s后再去掉遮擋物,讓相機(jī)繼續(xù)在環(huán)境中跟蹤建圖,以此來(lái)模擬機(jī)器人的“綁架劫持”問(wèn)題。其中,fr2-360-kidnap視頻序列所用的相機(jī)內(nèi)參矩陣為
ORB-SLAM2算法的實(shí)驗(yàn)結(jié)果如圖9所示,藍(lán)色矩形框表示跟蹤過(guò)程的關(guān)鍵幀,紅色與黑色的點(diǎn)表示建立的地圖點(diǎn),ORB-SLAM2算法初始化后提取環(huán)境中的特征點(diǎn)開(kāi)始跟蹤和建圖,當(dāng)“綁架劫持”發(fā)生(被遮擋3 s)時(shí),ORB-SLAM2算法進(jìn)入重定位模式,但由于無(wú)法回到重定位位置,導(dǎo)致算法陷入重定位的死循環(huán)中,使后續(xù)無(wú)法繼續(xù)跟蹤和建圖,即關(guān)鍵幀與地圖點(diǎn)不再增加。
圖9 ORB-SLAM2在fr2-360-kidnap序列中運(yùn)行結(jié)果Fig.9 Processing results of ORB-SLAM2 in fr2-360-kidnap sequence
DynaSLAM算法的實(shí)驗(yàn)結(jié)果如圖10所示,它和ORB-SLAM2算法類似,初始化后提取環(huán)境中的特征點(diǎn)開(kāi)始跟蹤和建圖,當(dāng)“綁架劫持”發(fā)生時(shí),該算法也是進(jìn)入重定位模式,無(wú)法回到重定位位置,導(dǎo)致后續(xù)無(wú)法繼續(xù)跟蹤和建圖。
圖10 DynaSLAM在fr2-360-kidnap序列中運(yùn)行結(jié)果Fig.10 Processing results of DynaSLAM in fr2-360-kidnap sequence
ORBSLAMM算法的實(shí)驗(yàn)結(jié)果如圖11所示,算法初始化后提取環(huán)境中的特征點(diǎn)開(kāi)始跟蹤和建圖,建立出地圖1后,“綁架劫持”發(fā)生,ORBSLAMM算法重新初始化提取環(huán)境中的特征點(diǎn)繼續(xù)跟蹤和建圖,建立地圖2,該算法在跟丟后可以在遇到“綁架劫持”問(wèn)題后繼續(xù)跟蹤和建圖,優(yōu)于前兩種算法,但這是2個(gè)獨(dú)立的地圖,無(wú)法融合為一個(gè)完整的全局地圖,影響后續(xù)跟蹤效率和定位精度。
圖11 ORBSLAMM在fr2-360-kidnap序列中運(yùn)行結(jié)果Fig.11 Processing results of ORBSLAMM in fr2-360-kidnap sequence
本文算法的實(shí)驗(yàn)結(jié)果如圖12所示,算法初始化后開(kāi)始跟蹤和建圖,建立第1個(gè)局部地圖M1,在相機(jī)被“綁架劫持”后,本文算法能夠重新初始化繼續(xù)建立第2個(gè)局部地圖M2,繼續(xù)對(duì)當(dāng)前環(huán)境進(jìn)行跟蹤和建圖,并在檢測(cè)到回環(huán)幀時(shí),將地圖M1和M2融合為一個(gè)整體地圖,所以本文算法在遇到“綁架劫持”問(wèn)題后繼續(xù)跟蹤和建圖,優(yōu)于ORB-SLAM2算法和DynaSLAM算法,還能將建立的兩個(gè)局部地圖融合為一個(gè)完整的全局地圖,因此,在遇到“綁架劫持”問(wèn)題時(shí)本文算法優(yōu)于ORBSLAMM算法、ORB-SLAM2算法和DynaSLAM算法。
圖12 DE-SLAMM在fr2-360-kidnap序列中運(yùn)行結(jié)果Fig.12 Processing results of DE-SLAMM in fr2-360-kidnap sequence
實(shí)驗(yàn)2使用fr1-floor視頻序列,該視頻序列是相機(jī)在一個(gè)房間中快速運(yùn)動(dòng),本實(shí)驗(yàn)主要測(cè)試算法在遇到跟丟問(wèn)題時(shí)是否能夠繼續(xù)跟蹤和建圖。該視頻序列所用相機(jī)內(nèi)參矩陣為K1。圖13給出4種算法的實(shí)驗(yàn)結(jié)果,由結(jié)果可知,得到了與實(shí)驗(yàn)1相似的結(jié)論,本文算法在跟丟之后能夠重新初始化建立一個(gè)新地圖繼續(xù)跟蹤和建圖,在回環(huán)時(shí)能將2個(gè)局部地圖融合為一個(gè)完整的全局地圖,因此,本文算法在遇到跟丟問(wèn)題時(shí)優(yōu)于其他3種算法。
圖13 不同算法在fr1-floor序列中運(yùn)行結(jié)果Fig.13 Processing results of different algorithms in fr1-floor sequence
為了測(cè)試本文算法對(duì)動(dòng)態(tài)目標(biāo)檢測(cè)和背景修復(fù)的性能,利用動(dòng)態(tài)環(huán)境數(shù)據(jù)集中fr3-sitting-xyz、fr3-walking-xyz和fr3-walking-static這3個(gè)視頻序列進(jìn)行了實(shí)驗(yàn),仍與上述3種算法進(jìn)行了比較。上述3個(gè)視頻序列所用相機(jī)內(nèi)參矩陣均為K3。
實(shí)驗(yàn)1采用fr3-sitting-xyz視頻序列,該視頻是相機(jī)在X、Y、Z3個(gè)方向上移動(dòng),fr3-sitting-xyz視頻序列中的人僅坐在椅子上運(yùn)動(dòng),動(dòng)作幅度較小,因此,fr3-sitting-xyz視頻序列所屬環(huán)境屬于弱動(dòng)態(tài)環(huán)境。
在弱動(dòng)態(tài)環(huán)境中,人僅坐在椅子上,動(dòng)作幅度較小,相機(jī)在X、Y、Z3個(gè)方向上移動(dòng),ORB-SLAM2算法和ORBSLAMM算法在fr3-sitting-xyz視頻序列中的實(shí)驗(yàn)結(jié)果如圖14a、14b所示,ORB-SLAM2算法和ORBSLAMM算法在提取特征點(diǎn)進(jìn)行跟蹤和建圖時(shí)都會(huì)提取到動(dòng)態(tài)物體(人和椅子)上的點(diǎn),將動(dòng)態(tài)物體當(dāng)作地圖的一部分建入地圖中,因此,ORB-SLAM2算法和ORBSLAMM算法在弱動(dòng)態(tài)環(huán)境無(wú)法分割出環(huán)境中的動(dòng)態(tài)目標(biāo);而DynaSLAM算法在fr3-sitting-xyz視頻序列中的實(shí)驗(yàn)結(jié)果如圖14c所示,它能檢測(cè)出視頻中的先驗(yàn)動(dòng)態(tài)目標(biāo)(人),并能將其分割出來(lái)。由于該算法不對(duì)先驗(yàn)動(dòng)態(tài)目標(biāo)提取特征點(diǎn)進(jìn)行跟蹤和建圖,導(dǎo)致其無(wú)法檢測(cè)出非先驗(yàn)動(dòng)態(tài)目標(biāo)(正在移動(dòng)的椅子),且有時(shí)會(huì)出現(xiàn)誤檢測(cè)的情況,將靜態(tài)物體也誤檢測(cè)為動(dòng)態(tài)物體,因此,弱動(dòng)態(tài)環(huán)境中,DynaSLAM算法無(wú)法分割出環(huán)境中所有的動(dòng)態(tài)目標(biāo)。而本文算法運(yùn)行時(shí)會(huì)自動(dòng)調(diào)用訓(xùn)練好的Mask R-CNN模型文件,對(duì)環(huán)境中的先驗(yàn)動(dòng)態(tài)目標(biāo)(人)檢測(cè)并將其視為先驗(yàn)動(dòng)態(tài)目標(biāo)分割出來(lái),不對(duì)其進(jìn)行跟蹤和建圖;之后,再利用多視圖幾何技術(shù)檢測(cè)并分割出正在搖動(dòng)的椅子,進(jìn)而不對(duì)椅子提取特征點(diǎn)進(jìn)行跟蹤和建圖,如圖14d所示。因此,本文算法在弱動(dòng)態(tài)環(huán)境中幾乎可以分割出環(huán)境中所有動(dòng)態(tài)目標(biāo),本例中本文算法的動(dòng)態(tài)目標(biāo)檢測(cè)性能優(yōu)于其他3種SLAM算法。
圖14 不同算法在fr3-sitting-xyz序列中運(yùn)行結(jié)果Fig.14 Processing results of different algorithm in fr3-sitting-xyz sequence
實(shí)驗(yàn)2采用fr3-walking-xyz視頻序列,該視頻是相機(jī)在X、Y、Z3個(gè)方向上移動(dòng),fr3-walking-xyz視頻序列中的人來(lái)回走動(dòng),動(dòng)作幅度較大。因此,fr3-walking-xyz視頻序列所屬環(huán)境屬于強(qiáng)動(dòng)態(tài)環(huán)境。在強(qiáng)動(dòng)態(tài)環(huán)境中,人來(lái)回走動(dòng),動(dòng)作幅度較大,相機(jī)在X、Y、Z方向上移動(dòng),ORB-SLAM2算法和ORBSLAMM算法在fr3-walking-xyz視頻序列中的實(shí)驗(yàn)結(jié)果如圖15a、15b所示,ORB-SLAM2算法和ORBSLAMM算法在動(dòng)態(tài)物體(人和椅子)上提取的特征點(diǎn)較少,但仍然會(huì)對(duì)動(dòng)態(tài)物體提取特征點(diǎn)進(jìn)行跟蹤和建圖,因此,ORB-SLAM2算法在強(qiáng)動(dòng)態(tài)環(huán)境中無(wú)法分割出環(huán)境中的動(dòng)態(tài)目標(biāo),也無(wú)法建立環(huán)境的真實(shí)地圖;而DynaSLAM算法在fr3-walking-xyz視頻序列中的實(shí)驗(yàn)結(jié)果如圖15c所示。它能檢測(cè)出視頻中的先驗(yàn)動(dòng)態(tài)目標(biāo)(人),并能將其分割出來(lái),不對(duì)先驗(yàn)動(dòng)態(tài)目標(biāo)提取特征點(diǎn)進(jìn)行跟蹤和建圖,但其無(wú)法檢測(cè)出非先驗(yàn)動(dòng)態(tài)目標(biāo)(正在移動(dòng)的椅子),且有時(shí)會(huì)出現(xiàn)誤檢測(cè)的情況,將靜態(tài)物體也誤檢測(cè)為動(dòng)態(tài)物體,此外,該算法沒(méi)有對(duì)分割出的先驗(yàn)動(dòng)態(tài)目標(biāo)遮擋的背景進(jìn)行修復(fù),所以其建立的稀疏點(diǎn)云地圖中地圖點(diǎn)較少有很大的空缺部分。因此,強(qiáng)動(dòng)態(tài)環(huán)境中DynaSLAM算法無(wú)法建立環(huán)境的真實(shí)地圖。而本文算法利用Mask R-CNN神經(jīng)網(wǎng)絡(luò)框架對(duì)環(huán)境中的先驗(yàn)動(dòng)態(tài)目標(biāo)(人)檢測(cè)并分割出來(lái),再利用多視圖幾何技術(shù)檢測(cè)并分割出正在搖動(dòng)的椅子,不對(duì)分割出的動(dòng)態(tài)目標(biāo)(人和正在移動(dòng)的椅子)提取特征點(diǎn)進(jìn)行跟蹤和建圖,如圖15d所示。此外,本文算法還對(duì)第k幀中被動(dòng)態(tài)目標(biāo)遮擋的背景利用多幀融合的背景修復(fù)算法進(jìn)行修復(fù),所以本文算法建立的稀疏地圖明顯比圖15c中建立的稀疏地圖的地圖點(diǎn)更多。綜上所述,本文算法在強(qiáng)動(dòng)態(tài)環(huán)境中幾乎可以分割出環(huán)境中所有的動(dòng)態(tài)目標(biāo),還能修復(fù)被動(dòng)態(tài)目標(biāo)遮擋的背景地圖,因此,本例中本文算法優(yōu)于其他3種V-SLAM算法。
圖15 不同算法在fr3-walking-xyz序列運(yùn)行結(jié)果Fig.15 Processing results of different algorithms in fr3-walking-xyz sequence
實(shí)驗(yàn)3采用fr3-walking-static視頻序列,該視頻中的相機(jī)靜止不動(dòng),人來(lái)回走動(dòng),動(dòng)作幅度較大。圖16分別為4種算法的實(shí)驗(yàn)結(jié)果,得到了與實(shí)驗(yàn)2相同的結(jié)論,本文算法具有更好的動(dòng)態(tài)目標(biāo)檢測(cè)性能和背景修復(fù)能力。
圖16 不同算法在fr3-walking-static序列運(yùn)行結(jié)果Fig.16 Processing results of different algorithms in fr3-walking-static sequence
針對(duì)傳統(tǒng)V-SLAM算法無(wú)法實(shí)現(xiàn)動(dòng)態(tài)環(huán)境建圖,以及無(wú)法克服因環(huán)境特征不明顯或機(jī)器人被“綁架劫持”而導(dǎo)致場(chǎng)景跟丟的問(wèn)題,本文對(duì)ORB-SLAM算法中的3個(gè)線程做出改進(jìn),顯著提高了DE-SLAMM算法的初始化速度。其次,本文提出的多地圖構(gòu)建線程能夠有效克服傳統(tǒng)V-SLAM算法在遇到“綁架劫持”或跟丟后無(wú)法繼續(xù)建圖的問(wèn)題。本文所提出的深度學(xué)習(xí)與多視圖幾何技術(shù)相結(jié)合的動(dòng)態(tài)目標(biāo)檢測(cè)方法能夠更準(zhǔn)確地檢測(cè)出環(huán)境中存在的各類動(dòng)態(tài)物體。最后,本文提出的基于時(shí)間加權(quán)濾波的背景修復(fù)算法能夠有效地修復(fù)被動(dòng)態(tài)物體遮擋的背景地圖。