何 松,孫 靜,郭樂江,陳 梁
(1.空軍預警學院,湖北 武漢 430019;2.空軍通信士官學校,遼寧 大連 116100;3.武漢大學 計算機學院,湖北 武漢 430072)
傳統的機器人SLAM(simultaneous localization and mapping)與導航避障算法,側重于標識出障礙物并進行規避,它并不知道障礙物是什么,只需要繞開障礙物到達目的地即可[1]。但在實際生活中,智能機器人所處的工作環境往往是動態的、未知的,移動機器人自主導航過程中,需要能夠實時地對周圍目標進行識別并做出反應,以完成更復雜的特定任務。通過將識別的物體及位置信息,標注在SLAM得到的地圖上,可以極好地提高地圖的可讀性和人機交互的便利性[2],同時也可應用于環境數據采集和物品搜索等多個方面。基于語義信息的地圖構建技術[3-4]逐漸成為移動機器人自主導航研究的熱點問題之一。
語義地圖構建技術,也稱為語義SLAM,其關鍵在于對環境中目標物體的語義識別和對其位置的精確標注[5]。結合語義信息的SLAM算法不僅能提升應用系統對環境的理解能力,還能提高SLAM算法定位與建圖的精度[6]。隨著深度學習技術的發展,特別是基于卷積神經網絡(convolutional neural network,CNN)的相關算法在目標識別領域的應用和識別效率的提升,結合視覺信息、雷達點云數據、超聲波數據等進行目標檢測和定位[7-8],都成為語義地圖研究的手段。近年來,國內外學者已提出較多的融合SLAM和深度學習的地圖構建技術,如Tateno等人[9]提出CNN-SLAM算法,利用卷積神經網絡預測的深度信息來取代SLAM算法本身對深度的假設和估計,McCormac等人[10]提出利用CNN架構結合ElasticFusion SLAM實現語義地圖,白云漢等人[11]提出基于視覺SLAM和深度神經網絡構建語義地圖,屈文彬等人[12]提出多特征融合的服務機器人語義地圖構建技術。
以上方法多是首先基于視覺SLAM構建環境地圖,然后結合視覺特征和深度學習方法獲取環境語義信息,進而構建語義地圖。在實際應用中,機器人是融合多源傳感器獲取環境信息,常用的SLAM方法有激光SLAM和視覺SLAM,這兩種方法各有優點和不足。其中激光SLAM技術起步較早,產品和理論成熟,運用激光雷達發射激光束來探測目標位置、速度等特征信息,并運用粒子濾波算法結合慣性傳感單元(IMU)和機器人里程計數據來估計自身位置,具有測量精度高、方向準、地圖數據量小,處理速度快等優點,但缺乏語義信息,基于激光點云特征進行目標匹配或深度學習的檢測算法發展也不夠成熟。而視覺SLAM可以獲取豐富的紋理信息,基于視覺信息的深度學習目標檢測獲取語義信息技術發展已非常成熟。但視覺SLAM存在受光線影響較大,邊界不夠清晰,暗處紋理少,且運算負荷大,地圖構建存在累計誤差,難以直接應用于路徑規劃和導航等缺點。因此,文中綜合激光雷達和視覺攝像頭兩類傳感器的優點,采用激光SLAM構建環境地圖,采用視覺信息運用深度神經網絡檢測算法識別目標語義,然后結合目標深度信息進行坐標轉換,最終實現更精確迅速的實時地圖語義信息標注,構建語義地圖。
結合現有的基于ROS的移動智能機器人,提出融合多源傳感器獲取語義地圖的系統框架,如圖1所示。

圖1 語義地圖系統框架
框架從上到下分為多源傳感器層、協同定位感知層、底層控制層。
多源傳感器層包括各類的傳感器模塊和地圖服務模塊,這一層主要依賴各類傳感器,對外界環境進行獨立感知,傳感器主要包括激光雷達、深度攝像頭、RGB攝像頭等。從傳感器獲取激光點云、視覺RGB圖像和深度圖像等數據,數據在各自的ROS模塊中進行處理,并發布成ROS標準消息格式,以供下層協同處理計算。地圖服務利用傳感器數據增量式構建地圖將并地圖數據交給下層。
協同定位感知層是機器人提高自我認知水平的核心,面向激光點云的AMCL(自適應蒙特卡羅)算法、里程計信息獲得機器人自身的定位結果,各定位結果在ROS系統中進行坐標轉換處理,實現機器人的協同定位,并將定位結果提供給自主規劃模塊和目標語義識別模塊。目標語義識別模塊將從上層獲取的RGB圖像信息帶入深度神經網絡中,獲得圖像中目標的語義信息及其在原始RGB圖像中的位置,由目標在RGB圖像中的位置可以從深度攝像頭獲得相應的物體深度圖像信息,由此計算物體相對機器人的位置,并通過機器人自身的協同定位結果確定物體位置,并完成地圖語義的添加。
底層控制層也稱基控制模塊,用于接收上層的運動控制信號,讓機器人按照指令移動,并將機器人自身的狀態信息反饋,進一步提高航跡推算與里程估計中的精度,它主要包含基控制器模塊,將運動控制信號轉化為電機運動的電信號,并將電機編碼器、運動傳感器信息反饋給上層,結合局部規則和全局規劃算法,實現邊定位邊建圖和自主導航避障,并完成語義級任務。
SLAM即同步定位與地圖構建,是機器人根據傳感器獲取外部環境信息,以此增量式地建立機器人所處環境的地圖,反過來又依靠建立的環境地圖確定自身的位姿的過程,即定位和構圖兩個程序同步進行。激光雷達定位與建圖的基本原理是根據雷達在高速旋轉過程中不斷發射激光束和獲取反射信息,以采集其四周工作范圍內障礙物的距離信息,組合成空間點云信息,經過濾波處理、地圖拼合、回環檢測從而得到空間地圖信息。
該系統采取Google開源的Catorgrapher SLAM算法,主要包含cartographer和cartographer_ros兩大部分。cartographer主要負責處理來自雷達、IMU和里程計的數據并基于這些數據進行地圖的構建,是cartographer理論的底層實現。cartographer_ros則基于ros的通信機制獲取傳感器的數據并將它們轉換成cartographer中定義的格式傳遞給cartographer處理,與此同時也將cartographer的處理結果發布用于顯示或保存,是基于cartographer的上層應用。地圖以占據柵格地圖表示。用大小相同的柵格來表示當前的環境,每個柵格至少存在三種狀態:未知、可通過、有障礙物。它盡可能保留了整個環境的各種信息,易于創建和維護。但是在環境范圍較大時柵格地圖占用空間過大,不易維護,此時的實時性也因為定位算法搜索空間太大而大打折扣。
而機器人同步定位應用的是AMCL算法,根據激光掃描特征,使用粒子濾波獲取最佳定位點,即作為機器人在地圖的位置點。其核心思想是用大量的粒子來描述機器人可能的位置,通過尋找一組在狀態空間傳播的隨機樣本對概率密度函數進行近似,以樣本均值代替狀態方程,從而獲得狀態最小方差分布的過程。
2.1.4 微量元素缺乏 放牧過程中,由于當地土壤內微量元素的含量各有差異,很容易造成羊只的鐵、硒、銅、鋅、鈷等微量元素的缺乏癥。所以在養殖時盡可能補飼。
為實現機器人“邊測繪,邊規劃”,系統采用一種基于D*動態規劃算法的D*-SLAM算法,將D*動態規劃和機器人SLAM構圖整合,并設計其在ROS中的全局規劃和局部規劃實現過程。D*也稱之為動態A*(D-Star,Dynamic A*),它是一種動態的路徑規劃算法,可在規劃后對環境變化做出反應,動態修改自己的規劃路徑。
通過以上三種算法的結合,即可實現機器人邊測繪邊建圖,實現自主路徑規劃和導航避障。但此處利用激光雷達所建環境地圖只有障礙物位置標記,沒有障礙物語義信息。
目標語義識別模塊是為了解決機器人對環境認知不足的問題,通過將基于深度學習的目標檢測算法移植到ROS中,結合機器人深度攝像頭測距與定位,實現機器人對目標的識別和地圖語義的添加,包括目標識別和目標定位兩大部分。常用的基于深度學習的目標檢測算法有Faster R-CNN[13]、YOLO(you only look once)[14]和SSD(single shot multibox detector)[15]等。相比較而言,Faster R-CNN擁有較高的準確率,YOLO速度較快,而SSD算法綜合二者的優點,其在實時性和檢測精度方面都有較好的表現。文中選取SSD算法進行目標檢測和識別。
2.2.1 基于深度學習的目標語義識別算法
SSD是一種基于深度學習卷積神經網絡的物體檢測模型,通過它可以獲取到物體的語義信息和物體在圖像中的位置,具有良好的實時性和準確率。它將整個物體識別過程整合成一個深度神經網絡,便于訓練和優化,從而提高檢測的速度。
SSD網絡結構如圖2所示,它在網絡的前半部分使用了一個普通的卷積神經網絡,用于對圖像中的目標進行分類,每一個類別會對應一個語義結果,如person、bottle、dog等,在網絡的后半部分實現目標在圖像中的定位。SSD網絡使用了大量的小的卷積核(1*1,3*3),用于提取邊緣特征和邊界框的位置回歸,通過一組邊界框集合實現不同長寬比的目標檢測,在卷積生成的多個尺度的特征圖上,將特征圖劃分為8*8或者4*4的方格,每個小方格都有一組邊界框集合,如圖3所示,包含4個:長的、寬的、小正方形、大正方形,用于匹配物體位置。網絡最終輸出的向量將會和前面各層邊界框與圖像對應關系相連接,以此來進行網絡的訓練和圖像中物體位置的確定。

圖2 SSD網絡模型

圖3 SSD邊界框示意圖
SSD識別多尺度目標是通過不同層的特征圖來實現的,低層的特征圖對圖像的細節表達出色從而可以提高語義分割質量,高層的特征圖可以平滑分割結果。于是,將低層和高層的特征圖綜合起來進行檢測。不同層的特征圖有不同的感受野尺寸,然而不需要給某一層特征圖構建不同尺寸的框,而是某層的特征圖只學習檢測某個尺度的對象,所以某一層的特征圖只有一個尺度的框。從網絡的低層到高層,框的縮放比例均勻地分布在0.2至1之間。為了進一步解決長寬比的問題,可設置不同長寬比的擴展框。
不同形狀的框、不同的縮放比、不同的分辨率使得框的空間參數離散化,從而大幅提高了計算的效率。真值框的類別和位置在網絡的訓練時都必須明確告知給網絡,并和網絡輸出進行比較,這樣才能讓損失函數的反向傳播是端對端的。在訓練時,需要將真值框和邊界框對應起來,只要和真值框的覆蓋率大于0.5,就能和該真值框對應上,每個真值框必須至少有一個邊界框與其對應。對匹配的每個框計算和真值框的位移和分類概率,通過計算加權位置損失和分類置信度損失獲得模型整體損失,最終結果通過極大值抑制來獲得。
2.2.2 目標語義識別硬件
Kinect for Xbox 360,也稱為Kinect,如圖4所示,是由微軟開發,應用于Xbox 360游戲主機的操控設備。它有深度攝像頭和多個麥克風,為用戶提供使用語音和肢體動作來操控游戲的體驗[16]。

圖4 Kinect攝像頭
Kinect從左到右依次為紅外發射鏡頭、RGB彩色攝像頭、紅外線CMOS攝像頭。3D圖像由紅外線CMOS攝像頭采集,它接收場景中的結構光,通過結構光來對鏡頭前的物體進行測距并形成深度的3D圖像。彩色攝像頭分辨率為1 280*960,紅外攝像頭分辨率為640*480。Kinect攝像頭同時具有RGB彩色攝像頭和紅外測距攝像頭,并且具有攝像頭標定功能,可將各個攝像頭獲取的圖像信息標定,形成同一幅圖的彩色圖像和深度圖像。彩色圖像可以用來做目標語義識別,深度圖像可用于物體的測距和定位[17]。Kinect還具有追焦技術,它的底座是可以移動的,當攝像頭對準焦點后,底座會跟著焦點轉動,讓攝像頭隨著焦點移動。Kinect微軟官方推薦的距離為1 220 mm~3 810 mm,經過測試,精度在距離1 m時精度較高,誤差在3 mm內,距離越遠,精度越低,在距離3.6 m時,誤差在3 cm內,采集頻率為30幀每秒。ROS集成了Kinect的驅動包OpenNI,該驅動包將Kinect攝像頭獲取的深度圖像信息、RGB圖像信息發布在ROS中的主題上。
2.2.3 ROS目標語義識別模塊設計
SSD算法可以識別出物體的語義信息和它在圖像中的位置,根據從深度攝像頭獲取的圖像深度信息,可以通過深度信息知道物體相對于深度攝像頭的角度、位置,從而實現物體的識別和地圖標注。
基于ROS的SSD目標語義識別模塊結構如圖5所示,它包含ObjectDection和UpdateMap兩個節點,在ObjectDection節點中主要訂閱Kinect圖像信息,將原始RGB圖像輸入到SSD網絡中,得到物體的語義信息和物體在原始RGB圖像中的邊界框。

圖5 ROS目標語義識別模塊結構
邊界框是以原始圖像左下角為坐標原點的四個坐標構成的方型框,框是算法識別出的物體范圍,目標語義識別結果如圖6所示。圖6(a)表示它識別出了顯示器,白色方框為顯示器的邊界框,算法認為框內物體為顯示器的概率為0.980;圖6(b)表示它識別出了椅子,并框出椅子位置,算法認為框內物體為椅子的概率是0.942。

圖6 目標語義識別結果
在UpdateMap節點中將識別結果和深度圖信息整合得到物體相對于機器自身的相對位置也就是在baselink坐標下的位置,將位置坐標通過baselink->odom->map坐標轉換后,得到物體在map坐標系下的位置,將物體信息發布,由UpdateMap更新地圖,實現目標語義信息在地圖上顯示。
目標語義識別算法流程如圖7所示。首先通過Kinect攝像頭獲取標定后的RGB圖和深度圖,將RGB圖帶入SSD算法中,得到物體的目標語義信息和圖像中的邊界框,根據邊界框確定深度圖像中物體的范圍,對該圖像范圍內的深度圖像進行濾波,背景切割,只保留物體的深度圖像信息,由物體的深度圖像信息確定物體距離機器人的水平距離、角度,也就是物體在ROS的baselink坐標系中的位置,將該位置通過ROS的坐標框架進行變換,得到物體在map地圖坐標系下的位置,將語義信息添加到地圖該處的柵格中,從而實現目標語義識別和地圖語義添加。

圖7 目標語義識別算法流程
機器人的控制部分采用一種集成高精度導航定位與深度學習的機器人嵌入式計算終端,集成設置的核心處理單元包括Jetson芯片、FPGA芯片、嵌入式ARM模塊和多種傳感器,所述傳感器IMU慣性導航模塊、激光雷達和攝像頭,核心處理單元Jetson芯片連接攝像頭和激光雷達,FPGA芯片分別連接GNSS衛星導航模塊和IMU慣性導航模塊、嵌入式ARM模塊;嵌入式ARM模塊連接控制機器人的伺服電機;搭載軟件棧,實現協同定位感知算法。運動部分采用turtlebot3機器人底盤,底盤有3個輪子,后兩輪為主動輪差速輪,前輪為萬向輪。主要硬件設備及軟件配置參數如表1所示,外接傳感器部分采用Rplidar雷達和Kinect攝像頭。

表1 實驗平臺配置
實現目標:在實驗室室內環境,分別檢驗機器人在靜止和移動情況下能否完成物體識別和地圖語義的添加。(1)靜止狀態下:如人站在椅子旁邊,檢驗機器人能否完成多目標識別和多目標地圖語義添加。(2)移動過程中:規劃路線使機器人自主移動并通過激光雷達傳感器掃描室內環境,構建室內二維地圖,檢驗構建地圖過程中是否同步添加語義信息。
實驗過程:在實驗室空地開啟機器人和其上的Kinect攝像頭,運行物體識別節點,界面彈出窗口顯示Kinect攝像頭通過SSD深度神經網絡對于物體的識別結果,可以看到程序在原始攝像頭圖像上疊加了物體的一些框,即物體的邊界,設置其語義信息標注于位置框右上角,包話該物體類別以及程序推斷其屬于某一類別的概率。當移動機器人構建室內地圖時,機器人能夠創建全局地圖,且地圖上也會顯示這些物體的標注,即語義信息,將其放大置于右側,即完成語義地圖構建,如圖8所示。

圖8 語義地圖構建實驗
由實驗結果可以看出,Kinect攝像頭成功識別出了椅子,并將椅子的地圖語義添加到地圖上,在地圖上可以看到地圖上椅子的位置顯示“chair:0.98”,表示該位置為一個椅子,機器識別其為椅子的概率為0.98。繼續移動機器人,椅子前方有一盆栽植物,地圖上顯示該位置“pollet plant:0.92”。表明當機器人在移動過程中識別出各個目標時,均能較準確地將語義和位置標注在地圖上。
從實驗結果可以看出,基于SSD深度學習神經網絡對于物體進行識別,結合Kinect的深度圖像,可以將物體的語義信息添加到地圖中,加深機器人對于環境的理解。該方法具有較高的識別率、較好的準確率,且在多目標情況下表現出了很好的多目標識別效果,地圖語義添加也比較準確,驗證了該方法的有效性、可行性。
該實驗是機器人感知、規劃、控制的一部分,為提升機器人的認知能力、規劃能力,基于ROS系統,設計了機器人協同定位感知算法,對機器人的自主規劃模塊、協同定位模塊、目標語義識別模塊進行統一設計和實現。自主規劃模塊實現了一種D*-SLAM算法,使機器人由先認知環境后規劃路徑的傳統方式轉變為邊認知環境邊規劃路徑的新型規劃方式,增強其對陌生環境的適應能力。定位模塊集成了現有的GNSS廣域高精度定位算法,使其能夠在ROS系統框架下持續、穩定地提供高精度的定位數據、里程信息,并實現和ROS坐標框架的整合,使它能與里程計和激光雷達AMCL組合進行協同定位,增強機器人在復雜環境下的自主定位能力。語義識別模塊集成了現有深度學習識別方法,在ROS平臺上實現高效的物體識別,在識別結束后,通過圖像深度信息確定物體在地圖中的位置,實現目標的地圖語義添加,提升機器人對局部環境的認知能力,以更好地進行路徑規劃和完成語義級任務。
語義識別模塊集成了現有深度學習目標檢測方法,在ROS平臺上實現高效的物體識別,在識別結束后,通過圖像深度信息確定物體在地圖中的位置,實現目標的地圖語義添加,其關鍵在于語義和位置的準確性。因采用的傳感器是單線激光雷達,目標語義識別模塊對于物體的識別和地圖語義的添加目前只是在二維平面上,后期可以考慮在三維空間內實現語義的添加,并且加強訓練集,以豐富地圖語義的內容,提升機器人對局部環境的認知能力,為后期基于地圖語義的機器人應用開發打下基礎。