付 豪,徐和根,張志明,齊少華
(同濟大學電子與信息工程學院,上海 201804)
隨著計算機科學和傳感器技術的發展,機器人進入快速發展階段。同步定位與地圖構建(Simultaneous Localization And Mapping,SLAM)是機器人導航與定位的基礎技術之一[1]。由于相機具有豐富的場景感知能力和價格低廉等優勢,近年來,采用相機作為主傳感器的視覺SLAM 受到了廣泛的關注[2]。在最近的研究中,大多數SLAM系統都采用了靜態場景假設,即假設場景不隨時間變化[3]。然而在實際的機器人應用場景中,不可避免地會存在動態物體。同時,為了讓機器人完成更復雜的任務,機器人對場景的理解能力受到了研究者的廣泛關注[4]。因此,在動態環境下建立更利于機器人理解的語義地圖成為一個研究熱點。
為了解決動態環境下的機器人定位問題,Fang 等[5]和Wang 等[6]采用光流法過濾場景中的移動物體;Bakkay 等[7]采用基于光流法的改進場景流來過濾移動物體;Zhao 等[8]使用深度圖像和多視角幾何方法檢測動態物體。這些算法對光照等環境變化敏感,魯棒性較差。深度學習的發展為這個問題帶來了新的解決方案。基于卷積神經網絡(Convolutional Neural Network,CNN),有許多優秀的語義分割算法被提出,如SegNet[9]、DeepLab[10]、Mask-RCNN(Mask Region-based CNN)[11]等。語義分割算法可以實現圖片的像素級分類,從而獲得圖片中物體的邊界以及語義信息。在深度學習的基礎上,Zhong 等[12]使用SSD(Single Shot multibox Detector)檢測圖片中的物體,對于先驗標記為動態的物體種類,過濾其上的所有特征點,再進行后續的相機位姿估計。Bescos 等[13]利用Mask-RCNN 和多視角幾何方法檢測動態物體,并在ORBSLAM2 系統的基礎上提出DynaSLAM 算法,通過Mask-RCNN和多視角幾何方法檢測動態特征點,并將其過濾。Yu等[14]利用SegNet 獲取圖像中的語義信息,并結合運動一致性檢測來過濾動態物體上的動態點,在ORB-SLAM 的基礎上提出DSSLAM 算法。這些算法都需要先驗性假設哪些種類的物體會發生運動,如人類。在地圖構建上,DynaSLAM 建立了稠密的點云地圖,不利于機器人的存儲與使用,DS-SLAM 建立了語義八叉樹[15]地圖。
本文針對動態場景下的相機位姿估計以及語義地圖構建問題進行研究,主要的工作如下:
1)結合了語義分割和光流,提出了一種新的動態特征點過濾算法,在取得較好的過濾效果的同時降低了對先驗知識的依賴性。
2)提出了一種動態環境下的靜態語義地圖構建算法。在保留主體信息的同時,極大降低了存儲空間的需求,能夠更好地應用于后續地任務。
在公開的TUM 數據集上將本文提出的算法與ORBSLAM2、DS-SLAM 以及DynaSLAM 作對比,實驗結果驗證了本文算法的有效性。
ORB-SLAM2 系統作為目前最為完整、穩定的開源視覺SLAM 系統之一,得到了研究人員的廣泛使用。本文所提出的動態場景SLAM 算法也是在該系統框架上進行改進的。圖1 是本文提出的SLAM 算法的完整框架,在原有的跟蹤、局部建圖和回環檢測線程的基礎上,增加了動態物體檢測和語義地圖構建線程。圖中短虛線框選的部分為本文添加的線程,長虛線框選的部分為ORB-SLAM2 原有線程。首先,攝像機獲取的每一幀在進行跟蹤線程之前要經過語義分割網絡,得到包含物體語義標簽的掩模,并聯合光流法計算物體的動態概率。局部建圖和回環檢測線程與ORB-SLAM2 相同。最后,根據本文提出的關鍵幀選擇策略挑選部分關鍵幀用于構建靜態語義地圖。本文算法通過物體動態概率去除動態點,建立靜態點云圖,并利用語義信息更新語義八樹圖;基于語義分割,對場景中的物體點云進行分割與聚類,建立稀疏語義地圖。

圖1 本文算法總體框架Fig.1 Overall framework of proposed algorithm
本文提出基于語義和光流約束的動態特征點過濾算法,整體框架如圖2所示。

圖2 動態特征點過濾算法的框架Fig.2 Framework of dynamic feature point filtering algorithm
該算法首先提取當前幀的ORB 特征,同時通過語義分割網絡得到物體的掩碼;接著,采用多視角幾何方法初步過濾當前幀中不符合極線約束的特征點;然后,通過滑動窗口法計算出當前幀和5 幀前的稠密光流;最后,結合語義分割與光流得到物體的動態概率。在有人、顯示器和椅子的圖中,人的動態概率為0.971,顯示器的動態概率為0.047,椅子的動態概率為0.014。因為人的動態概率大于閾值0.5,得以確定人是動態物體。對人身上的特征點也進行過濾,得到最終的靜態特征點。
1.2.1 語義分割網絡
本文采用DeepLab v3語義分割網絡。網絡采用編解碼結構,并通過空洞卷積平衡精度和耗時。
本文在PASCAL VOC 數據集上訓練DeepLab v3,該數據集包含20 個類別,如車輛、人類、椅子、顯示器等。使用TUM數據集中的RGB 圖片進行測試,圖3 顯示了語義分割算法的結果。其中,紅色代表人類,綠色代表顯示器,藍色代表椅子。這些都是室內場景下可能具有移動屬性的物體。

圖3 語義分割網絡的分割結果Fig.3 Segmentation results of semantic segmentation network
1.2.2 幾何約束
語義分割網絡不能識別場景中的所有物體。為了過濾網絡無法識別的物體種類上的動態特征點,本文采用幾何約束。對極幾何約束是攝像機運動學的重要組成部分,只與攝像機的內參和相機位姿有關,如圖4所示。

圖4 對極幾何示意圖Fig.4 Schematic diagram of epipolar geometry
假設相機從不同的角度觀測到同一個空間點p。根據針孔相機模型,它在兩個圖像上的像素坐標x=[u v1]T,即x1、x2符合約束:

其中:K代表相機的內參矩陣;R、T分別表示兩個相機坐標系間的旋轉與平移矩陣;s表示像素點的深度信息。
在理想情況下,兩張圖片中匹配的點對的坐標符合約束:

其中,F為基礎矩陣(Fundamental matrix)。而在真實的場景下,由于相機采集的照片并非理想圖片,存在一定程度的畸變和噪聲,使得相鄰幀間的點無法完美匹配上極線l:

其中:X、Y和Z為極線的向量。點x2到極線l1的距離D為:

若距離D大于閾值,則認為該點不符合極線約束。有兩種原因造成這種結果:首先,這些點本身是不匹配的;其次,這些點存在于動態物體上,這些點隨著物體的運動而移動,造成了不匹配,這些點為動態點。因此,過濾所有不符合極線約束的特征點。
1.2.3 光流約束
光流法是運動檢測中的常用方法。光流法計算圖像序列中的像素在時間域上的變化以及幀間的關聯性,從而得出相鄰幀中物體的運動關系。光流法主要有以下三個假設:圖像中的像素亮度在連續幀間不會發生變化;幀間的時間間隔相對較短;相鄰像素具有相似的運動。從而有:

其中:I(u,v,t)代表像素點(u,v)在t幀的光強度。式(5)表明像素點(u,v)在dt時間內移動了(du,dv)像素距離。
U、V定義了光流值在單位時間內橫縱坐標下的像素偏移:

由于相機的采樣頻率較高(通常為30 frame/s),關聯的兩幀之間物體運動通常不明顯,為此,本文采用滑動視窗法,設置視窗為5。前端采集當前幀與5幀以前的圖像計算光流場。
本文采用DeepFlow 算法[16]計算稠密光流。由于攝像機的不規則運動會造成前景和背景的同時運動,因此很難判斷像素點的偏移是由攝像機運動還是物體運動引起的。如圖5所示,直接計算光流時,由于攝像機本身的運動,整個畫面都有較大的光流值。為了使光流可視化,每個點的像素值被填充為

圖5 直接計算光流的結果Fig.5 Results of direct calculation of optical flow
由于為了盡可能消除背景運動對光流的影響,根據1.2.2 節得到的靜態特征點對,采用隨機抽樣一致算法(RANdom SAmple Consensus,RANSAC)算法,計算兩幀間的基礎矩陣F。根據基礎矩陣,求解前第5幀的射影變換,之后,對變換后的圖片計算稠密光流,結果如圖6 所示。經過變換后,計算出的光流場基本只包含運動物體,在這兩幀中只有部分人體被檢測出來。光流的可視化方法和圖4相同。

圖6 矯正后的光流計算結果Fig.6 Results of optical flow calculation after correction
從圖6 中可以看出,利用光流法難以得到物體清晰的輪廓,而采用語義分割的方法難以判斷物體是否處于運動狀態。本文算法對語義和光流約束進行結合,對于圖片中的每一個像素點n,計算其動態概率pn:

因此對于每一個物體,其動態概率pobj為物體上所有像素點動態概率的平均值:

在沒有先驗的情況下(事先不指定運動物體的類別),如果pobj>0.5,則認為該物體是動態的,需要對該物體上的特征點進行過濾;否則,則認為該物體是靜態的,可以用于后續的跟蹤以及地圖構建任務。
地圖構建是SLAM 系統的重要組成部分。在ORBSLAM2 系統中,只構建了基于特征點的稀疏地圖,不利于機器人導航等任務的使用。本文算法使用RGB-D 圖像,結合語義信息和稠密運動概率,構建靜態點云地圖,并更新語義八叉樹地圖,最終構建出稀疏語義地圖,便于后續任務的使用。
1.3.1 關鍵幀選擇
對于SLAM 系統來說,視覺傳感器傳入的圖像數量非常多,為了減少系統資源的消耗,ORB-SLAM2 采取選擇關鍵幀的策略方法。但是,這種選擇策略是針對ORB-SLAM2 設計的,并不完全適合本文算法的語義地圖構建。在本文中,對ORB-SLAM2的關鍵幀序列進行了二次篩選。
對于關鍵幀序列,第一幀直接構建地圖,后續的每一幀都需要滿足以下兩個條件:
首先,在一個新的關鍵幀傳入后,計算當前關鍵幀和前一個地圖構建關鍵幀的相機平移和旋轉。當攝像機平移大于0.3 m 或旋轉角度大于5°時,將該關鍵幀加入到地圖構建幀序列中,否則跳過該關鍵幀。
其次,在動態場景中,物體可能會發生移動。當發生移動時,即使攝像機位置保持穩定,也需要更新地圖中的物體。采用了常用指標交并比(Intersection over Union,IoU)評測物體檢測。在新增加的關鍵幀Fi與上一幀Fi-1中,計算所有靜態物體掩模的IoU:

1.3.2 靜態點云地圖構建
本文在ORB-SLAM2 基礎上新增點云構建線程。經過1.3.1 節的關鍵幀過濾后,得到用于地圖構建的關鍵幀序列。對于序列中的每一幀,利用式(10),結合SLAM 系統在運行過程中獲得的相機位置姿勢信息和圖像的深度值,將點p從圖像坐標系轉換到世界坐標系中,構建點云。

其中:K代表相機的內參矩陣;R和T分別代表相機的旋轉和平移;d代表像素點的深度值;[u v1]T代表點p在圖片坐標系下的位置;[a b b]T代表點p在空間坐標系下的位置。
如果地圖中包含動態物體,地圖將難以使用。在常見的抓取或避障任務中,包含動態物體的地圖使得算法難以判斷物體是否還存在,障礙物是否可以通過。因此,結合1.3.1 節得到的動態物體掩模以及光流值,對動態物體進行過濾。
對輸入圖像中的每一個像素點n,如果n是某個物體上的點,那么其動態概率pn=pobj,否則按照式(7)計算。如果pn>0.5,該點被視為動態點,不能用于點云地圖構建。從圖7中可以看出,經過過濾后的靜態點云地圖幾乎不包含動態點。通過聯合多視角下的不同關鍵幀,對背景進行填充,構建靜態點云地圖。

圖7 根據動態物體掩膜和光流過濾動態點建立靜態點云圖Fig.7 Using moving object masks and optical flow to filter out dynamic points for constructing static point cloud map
1.3.3 語義八叉樹地圖構建
雖然點云的表示方式很直觀,但點云圖也會存在一些不足。點云地圖占用存儲空間,而在大部分情況下,很多點的位置信息都是冗余的。點云地圖不能直接用于導航任務。因此,本文將點云轉化為八叉樹地圖,構建全局語義八樹圖。
八叉樹地圖使用八叉樹來存儲地圖,最小節點大小由分辨率決定。由于存在攝像機的噪聲和動態物體等干擾因素,同一個體素在不同時間處于不同的狀態。因此,每個體素的占用概率應結合多次觀測的聯合概率得到:

將占據概率進行Logit變換:

體素被占據的更新方式可以表示為:

其中:ZT=1 表示該體素在時間T被觀察到,ZT=0 表示該體素在時間T沒有被觀察到;locc=0.8為預設值。當一個節點被反復觀察到時,其體素的占用概率會增加,與此同時,其語義信息也被賦予,當一個節點沒有被觀察到時,其占用概率會降低。而動態物體的運動概率越高,其占用概率會降低,反之則會增加。當一個體素的占用概率大于預設閾值(0.8)時,該節點將在地圖中顯示出來。
1.3.4 稀疏語義地圖構建
在某些情況下,系統更關注場景中目標物體。例如,在抓取任務中,機器人手臂更關注待抓取目標的位置信息。為了方便后續任務能夠更方便地搜索目標,本文建立了一個稀疏語義地圖。
直接對點云進行分割是難以得到準確結果的。基于算法性能的限制,語義分割得到的掩模與物體也并不完全對應,尤其是在物體邊界處。在大多數情況下,二維圖像中難以精確劃分的物體邊界在三維空間中距離較遠,容易區分。因此,本文采用了一種基于語義分割的點云分割方法。該方法的步驟如下:
步驟1 利用關鍵幀投影到世界坐標構建三維點云;
步驟2 對構建的點云進行體素化濾波,過濾由圖片噪聲產生的點云;
步驟3 根據點云和圖片的對應關系,將語義信息綁定到點云中;
步驟4 基于語義信息對點云進行歐氏聚類,分割出每一個物體。
基于語義分割的點云分割結果如圖8所示。

圖8 基于語義分割的點云分割結果Fig.8 Point cloud segmentation results based on semantic segmentation
為了更簡單地表示物體,針對每一個物體的點云,通過主成分分析(Principal Component Analysis,PCA)獲取特征向量,構建方向包圍盒(Oriented Bounding Box,OBB)。通過具有方向性的最小包圍盒表征物體,它很容易用于導航中的碰撞檢測等任務,結果如圖9(a)所示。
在得到每一類物體的邊界框后,根據1.3.3 節得到的物體動態概率,去除動態物體。如果pobj>0.5,則算法認為該物體是動態的,不能添加到地圖中。在這一幀中,pchair=0.03,pmonitor=0.07。因此,判斷人是動態物體,將其過濾掉。如圖9(b)所示,利用顯示器和椅子的邊界框來構建靜態稀疏語義地圖。

圖9 物體包圍盒Fig.9 Object bounding box
在動態場景中,物體的位置可能會發生變化,所以需要更新地圖中物體的位置。本文算法將稀疏語義地圖以物體數據庫的形式存放,用于存儲物體的類別和位置信息。數據庫中包含以下信息:每一個物體的包圍框世界坐標和它的物體種類屬性。本文算法按照如圖10所示的策略更新語義圖。

圖10 語義地圖更新流程Fig.10 Flow chart of semantic map updating
當獲得一個新的靜態物體語義時,如果數據庫中沒有同類物體,則直接將新物體添加到數據庫中。當數據庫中存在同類物體,如果新物體與數據庫中所有同類物體邊界框沒有重合,則將新物體添加到數據庫中。如果邊界框重合,即與數據庫中已有物體距離小于閾值,則算法認為物體發生移動,更新數據庫中物體的位置。
實驗主要在TUM 數據集上進行測試,主要包括兩個方面:一是SLAM系統的跟蹤定位性能;二是地圖構建任務。
TUM數據集是用于評估SLAM算法性能的經典RGB-D數據集。它被廣泛用于測試SLAM 算法在動態環境下的定位準確性和魯棒性。該數據集包含39 個不同的序列,每個序列有640 × 480大小的彩色圖像、與之匹配的深度圖像和攝像機的真實軌跡。其中,相機的真實軌跡是由高速運動捕捉系統確定的,以確保軌跡的準確性。它可以很容易地與SLAM 系統估計的軌跡進行比較,以評估算法的魯棒性。
本測試運行在一臺PC 上,CPU 為AMD 銳龍R52600,內存為16 GB,顯卡為NVIDIA 1660。系統環境為Ubuntu 16.04,語義分割網絡采用Python3.6 編寫,SLAM 主程序使用C++編寫。
SLAM 系統的定位精度是評價SLAM 系統性能以及魯棒性的重要部分。本文在TUM 數據集上進行了兩類場景的測試,即高動態場景和低動態場景。在高動態場景中,人在場景中持續行走,因此,以下將高動態場景簡稱為W(walking);在低動態場景中,人坐在椅子上,沒有明顯的動作,因此,以下將低動態場景簡稱為S(sitting)。每個場景都包含四種不同的攝像機運動軌跡,分別是halfsphere、rpy、static 和xyz。在halfsphere(以下簡稱hs)軌跡中,相機沿著半球運動;在rpy 軌跡中,相機進行搖擺、俯仰運動;在static(以下簡稱s)軌跡中,相機的位置幾乎沒有變化;在xyz 軌跡中,攝像頭沿著x、y和z軸運動。
本文使用絕對軌跡誤差(Absolute Trajectory Error,ATE)和相對位姿誤差(Relative Pose Error,RPE)來評估算法在定位上的性能。為了更好地反映SLAM 系統的魯棒性,采用平均數、中位數、標準差(Standard Deviation,SD)和均方根誤差(Root Mean Square Error,RMSE)作為評價指標。其中:平均數和中位數可以更直觀地顯示誤差的整體情況;而標準差可以更好地反映系統的穩定性;RMSE 對異常值比較敏感,可以反映系統的魯棒性。表1 為軌跡絕對誤差,表2 為RPE 的平移誤差,表3為RPE的旋轉誤差。

表1 絕對軌跡誤差結果比較Tab.1 Result comparison of absolute trajectory error

表2 相對位姿誤差的平移誤差結果比較Tab.2 Result comparison of translation error of relative pose error

表3 相對位姿誤差的旋轉誤差結果比較Tab.3 Result comparison of rotation error of relative pose error
表1~3 中,W 代表高動態場景,S 代表低動態場景,hs、rpy等分別代表對應的運動軌跡。W-hs 即代表在高動態場景下,相機以halfsphere 的軌跡進行運動,其余的命名方式以此類推。通過對ATE和RPE的評估,從表1~3中可以看出,本文所提出的算法在高動態場景下的性能相較ORB-SLAM2 有很大的提升。性能的提升Adv計算方法如式(15)所示:

其中:Ecom表示用于比較的算法的誤差;Eour表示本文所提出算法的誤差。從表1~3 中還可以看出,在所有的高動態場景中,本文算法都有95%以上的提升。在W-xyz軌跡中,相機大范圍的運動,場景中的人也在不斷移動,這對SLAM 系統來說是一個很大的挑戰。在W-xyz 軌跡的一些評價指標中,本文算法相較ORB-SLAM2減小了98%的誤差。
在低動態場景中,由于ORB-SLAM2也具有一定的動態特征點過濾能力,本文算法表現與ORB-SLAM2相似。
同時,還將本文算法與最先進的動態場景下的SLAM 算法,即DynaSLAM 和DS-SLAM 在高動態場景下對系統的定位性能進行了比較,以ATE的RMSE作為比較項。
在實驗室環境中,對本文算法進行測試。由于沒有TUM數據集中的高速運動捕捉相機,難以確定相機的真實位姿,本文控制相機在實驗室場景中沿著標準的矩形行走,矩形的大小為4 m×4 m。如圖11所示,場景中有人員在不斷走動。

圖11 實驗室環境圖片Fig.11 Photograph of laboratory environment
DynaSLAM 和DS-SLAM 算法的性能采用其原文中的數據,對比結果如表4 所示。從表4 可以看出,本文算法在所有數據集中的定位誤差都小于DS-SLAM;在W-rpy 和W-xyz 軌跡中,相較于DynaSLAM 有一定的定位性能提升。對比算法都需要先驗地指定場景中的運動物體種類,而本文的算法無需先驗知識,也能實現較好的性能。

表4 不同算法的絕對軌跡誤差對比 單位:mTab.4 Comparison of absolute trajectory error of different algorithms unit:m
圖12 顯示了ORB-SLAM2 和本文算法在高動態場景下估計的軌跡。ORB-SLAM2 簡稱為ORB,W-hs-ORB 表示ORBSLAM2 算法在高動態場景下,算法對hs 軌跡的估計結果,其他圖片的命名規則相同。圖中,黑色線條是真實的軌跡(ground truth),紅色線條(深灰)是SLAM 系統估計的軌跡(estimated),藍色線條(淺灰)是估計軌跡與真實軌跡之間的誤差(difference)。
從圖12 可以看出,ORB-SLAM2 算法在高動態場景下,估計軌跡與真實值有較大的誤差。相比之下,本文算法與真實軌跡更加接近,可以有效去除動態環境下的干擾,魯棒性較好。

圖12 不同算法在高動態場景下估計的軌跡對比Fig.12 Comparison of trajectories estimated by different algorithms in highly dynamic scenes
不同算法估計的軌跡結果如圖13 所示。由于缺少實際軌跡的絕對世界坐標,算法的性能難以量化。但從圖13 中可以看出,與ORB-SLAM2 相比,本文提出的算法估計的軌跡更接近4 × 4的矩形,算法在真實環境也有較好的表現。

圖13 實驗室環境下不同算法估計的軌跡Fig.13 Trajectories estimated by different algorithms in laboratory environment
本文在ORB-SLAM2 的基礎上新增了動態物體過濾以及語義地圖過濾線程。由于地圖構建只對關鍵幀作處理,且該線程與主線程并行執行,對算法運行效率影響不大。對于每一幀輸入圖像,動態物體過濾線程每一模塊的運行時間如表5所示。
從表5 中可以看出,對于算法的實時性影響最大的是語義分割模塊。在目前的測試平臺下,算法還無法實現實時檢測。在未來,更換硬件條件更好的測試平臺或采用高精度且快速的語義分割網絡,系統的實時性可以得到進一步提升。

表5 不同模塊的運行時間Tab.5 Running times of different modules
本文算法構建了三種類型的地圖,分別是點云地圖、語義八樹地圖和稀疏語義地圖。本節將會構建三類地圖并進行評估。由于本文的算法主要針對高動態場景,所以本節只對算法在高動態場景下的性能進行比較。
2.4.1 點云地圖
在本節中,測試了三種方法的地圖構建性能,分別為:直接根據ORB-SLAM2 建立點云地圖,根據光流過濾動態物體,以及本文的基于語義和光流約束的靜態點云構建算法。數據集的表示方法和前文相同,ORB-SLAM2 簡稱為ORB,OF 代表只用光流過濾動態點。從圖14 來看,本文算法構建的地圖更接近真實場景,而由ORB-SLAM2 構建的地圖有很多動態點。在W-static(W-s)軌跡中,攝像機位置相對固定,在ORBSLAM2 構建的地圖中可以看到背景的大致輪廓。由于光流難以得到物體的完整輪廓,使得只使用光流時無法過濾掉所有的動態點,其結果如圖14(b)、(e)所示,地圖中仍可以看到人體。本文算法利用語義約束提供了更好的物體邊界分割,使得過濾大部分動態點成為可能。從圖14(c)、(f)中可以看出,本文算法建立的點云圖幾乎不包含動態點,可以更好地表現靜態場景。

圖14 稠密點云地圖Fig.14 Dense point cloud map
2.4.2 語義地圖構建
動態場景下生成的語義八叉樹地圖如圖15(a)、(d)所示。為了便于可視化,代表顯示器的體素用綠色顯示,而代表椅子的體素用藍色顯示,其余體素顯示物體本身的顏色。圖中不存在典型的動態物體如人類,說明較好地完成了靜態地圖的構建工作。從圖中的體素顏色覆蓋區域可以看出,顯示器部分體素的語義得到較好的賦予,可以從圖中識別出來,但椅子部分相對較差。這主要是因為語義分割網絡不能很好地分割出椅子。本文分割網絡在VOC 數據集上進行訓練,其中的椅子與TUM 數據集中的椅子差異較大,這使得算法對于椅子難以得到較好的分割結果。

圖15 語義地圖Fig.15 Semantic map
基于點云圖和語義信息,本文生成了一個稀疏語義地圖,如圖15(b)、(e)所示。圖中綠色(淺灰)包圍框代表顯示器,而藍色(深灰)包圍框代表椅子。該圖可以更直觀地了解物體的位置。由于缺乏數據集中的物體真實位置信息,本文將目標的三維包圍框以覆蓋在點云圖的形式展示,可以用來直觀地了解檢測的準確性,如圖15(c)、(f)所示,顯示器的邊界框相對準確,而椅子的邊界框只包含椅子的一部分,主要原因是在語義分割網絡中很難獲得椅子的準確像素級分割。如果對于場景中的物體有完整的數據集可以供網絡有監督地學習,算法的性能可以得到一定程度的提升。
稀疏的語義地圖在保留主要信息的同時,可以極大降低存儲空間的要求,地圖文件的存儲需求如表6所示。從表6中可以看出,相較點云地圖,八叉樹地圖所需的存儲空間顯著降低,而本文建立的稀疏語義地圖存儲空間進一步減少,更有利于嵌入式系統的存儲。

表6 地圖文件存儲空間對比Tab.6 Comparison of map file storage space
為了減少動態物體對SLAM 系統的干擾,本文提出了一種針對動態環境的更為魯棒的視覺SLAM 算法。該算法建立在ORB-SLAM2的基礎上,利用語義和光流約束來過濾動態物體。首先,利用語義分割網絡來獲取幀中每一類物體的像素級掩碼;然后,通過光流匹配得到每個物體的動態概率,動態概率高的物體將被過濾。在公共TUM 數據集上對本文算法以及其他先進的SLAM 算法進行對比,驗證了本文算法在高動態場景下具有更好的定位精度和魯棒性。在地圖構建方面,本文構建了靜態點云圖、語義八樹圖和稀疏語義圖。實驗結果表明,本文算法有效地過濾掉了動態物體,構建了靜態地圖。同時,構建的稀疏語義地圖在保留主要信息的同時,極大降低了存儲空間的要求。但是本文算法的性能受到語義分割結果的影響,不準確的分割結果將對后續工作產生不利影響。在以后的工作中,考慮采用點云分割網絡來提高分割結果。