鄭國慶,呂 品,賴際舟,方 瑋,范婉舒
(南京航空航天大學自動化學院,南京 211106)
近年來,無人車在園區(qū)巡檢、安全檢查及交通運輸?shù)裙I(yè)場景得到了廣泛應用。激光雷達和視覺傳感器被用于無人車的目標識別、路徑規(guī)劃及自主定位等多個領域[1-3]。通過激光雷達與視覺信息融合,可以實現(xiàn)對環(huán)境與目標的可靠感知,對于無人車的自主運行具有重要意義。
近年來,基于立體視覺的物體體積測量方法[4-5]得到了國內外學者的關注。文獻[6]提出了一種基于雙目立體視覺的小型煤堆體積測量方法,通過提取雙目視覺采集圖像中的SURF特征進行匹配,實現(xiàn)了小型煤堆體積的非接觸測量。然而,基于視覺的物體體積測量方法存在受光照影響大、計算時間長等缺陷。而激光掃描儀掃描線束密集,且測距精度高,廣泛應用于測繪領域。文獻[7]提出了一種基于三維激光掃描技術的糧食儲量在線監(jiān)測方法,可對糧食體積進行有效測量。然而,激光掃描儀數(shù)據(jù)量較大,大多采用離線方式解算,且主要用于固定場景的靜態(tài)測量。
激光雷達具有全天候、高精度的優(yōu)點。目前激光雷達較多用于無人車的實時定位與構圖(simultaneo-us localization and mapping,SLAM)。常用的二維激光雷達SLAM算法包括Hector SLAM[8]、Gma-pping[9]和Cartographer[10]等,其中Cartographer采用因子圖優(yōu)化的方法,魯棒性強,能在大規(guī)模復雜場景下實現(xiàn)精確的定位和地圖構建,代表了2D SLAM的最高水平。常見的三維激光雷達SLAM算法有LOAM[11]、LeGO-LOAM[12]和SuMa++[13]等,其中LeGO-LOAM在LOAM算法的基礎上,使用兩步法計算位姿變化,降低了計算負擔。同時該算法經(jīng)過了閉環(huán)優(yōu)化,較LOAM算法穩(wěn)定性更高,計算負擔更低,適合在低性能的嵌入式上使用,在室內和室外場景均得到了廣泛應用。通過激光雷達還可以實現(xiàn)對物體輪廓的掃描,從而估計其體積。文獻[14]利用激光雷達獲取物體的原始點云,使用隱式曲面重建算法構建了三維點云的mesh網(wǎng)絡模型,從而求取空間體積。該方法主要用于室內房間測量,且需事先安裝定位滑軌獲取激光雷達的實時位置,自主性受到一定限制。
針對于此,本文提出了一種基于激光雷達/視覺的物體體積自動測量方法。以無人車為載體,在LeGO-LOAM算法的基礎上進行點云畸變補償,獲得了精度更高的無人車位姿與三維點云地圖。同時將視覺與激光雷達融合獲取目標物的點云輪廓,通過點云切片的方法對目標物點云快速切割并進行體積計算,實現(xiàn)了無人車在行駛情況下對靜態(tài)目標體積的測量。本文方法可以實現(xiàn)無人車對目標物體的實時、自動測量,對于提升無人車的自主化能力具有積極意義。
傳統(tǒng)目標體積測量通常假設測量儀器位姿已知或靜止,繼而將物體輪廓在確定坐標系中擬合,其在無人車自主測量中的使用受到一定限制。針對于此,本文提出了一種面向無人車的激光雷達/視覺目標體積自動測量方法,其架構如圖1所示。首先,在LeGO-LOAM算法的基礎上對點云進行畸變補償處理,利用畸變補償后的點云依次進行特征提取、特征匹配與構圖優(yōu)化等步驟,提升了無人車的構圖與定位精度;接著,將視覺與點云信息融合,獲得目標的位姿,從而獲得目標在點云地圖中的絕對位置,并利用地面點剔除得到目標點云;最后,對目標進行聚類和降噪處理,獲取目標的點云輪廓,并采用點云切片法實現(xiàn)目標體積的實時解算。
圖1 激光雷達/視覺目標物體積測量算法框架Fig.1 Framework of lidar/vision target volume measurement algorithm
對物體體積進行動態(tài)測量需要無人車自身的實時運動信息以及目標輪廓。LeGO-LOAM是無人車常用的SLAM方法,其在LOAM的基礎上增加了回環(huán)檢測,且更加輕量化。LeGO-LOAM對激光雷達點云進行特征提取和幀幀匹配,在機動情況(如轉彎)下點云地圖會產(chǎn)生畸變。為了提升定位精度和地圖質量,本文利用高頻的慣性測量單元(inertial measurement unit, IMU)和里程計信息對點云進行去畸變補償,繼而利用去畸變后的點云進行特征提取,整體流程如圖2所示。
圖2 改進LeGO-LOAM構圖定位流程圖Fig.2 Flow chart of improved LeGO-LOAMcomposition and positioning
2.1.1 點云畸變補償
傳統(tǒng)激光雷達去畸變算法僅利用IMU數(shù)據(jù),對一幀點云中的每個點進行線性插值,獲得其相對于掃描開始時刻的位姿變化。然而,僅靠IMU解算的相對位置誤差較大,通過增加車載里程計信息可以有效提高相對位置估計精度。因此,本文利用IMU角速度信息與車載里程計進行航位推算,并對激光雷達點云進行畸變補償處理。
設pi,i=1,2,…,l為一幀點云中的一點,點云掃描的開始時間為t0,pi到t0的相對時間為ti。掃描到該點前已產(chǎn)生n個IMU數(shù)據(jù),其中每個數(shù)據(jù)相對于t0的間隔時間為tj,j=1,2,…,n。則掃描到該點時獲得的相對于t0的角度變化量為
(1)
(2)
(3)
經(jīng)過去畸變補償?shù)膯螏c云前后對比如圖3所示??梢钥闯?經(jīng)過畸變補償后,點云的畸變現(xiàn)象得到明顯改善。
圖3 點云畸變補償對比Fig.3 Comparison of point cloud distortion compensation
2.1.2 特征提取
本文采用LeGO-LOAM算法的特征提取方式,將去畸變之后的點云PLi投影至距離圖像Da×b中,a表示雷達線束,b表示激光雷達的水平分辨率。距離圖像Da×b中的每個像素對應PLi中的每個點pt,其像素值ri表示pt到激光雷達中心的歐式距離。對距離圖像進行聚類分割,剔除容易造成誤差的干擾點,并得到分割后的點云Lt。對分割后的點云進行特征提取,計算距離圖像中一行點云的曲率c
(4)
2.1.3 匹配構圖
(5)
(6)
為實現(xiàn)目標物體體積的自動測量,本文在無人車上搭載激光雷達與視覺傳感器,算法整體框架如圖4所示。首先通過目標檢測模塊獲取目標物體在圖像中的位置,并利用視覺成像進行坐標解算,實現(xiàn)對該物體的絕對位置的求解。繼而將包含目標物的點云進行地面點剔除,并對目標物進行聚類、降噪及濾波,獲得目標物體的點云輪廓。最后利用切片法對目標物的體積進行估計。
圖4 基于激光雷達/視覺融合的目標體積測量算法流程Fig.4 Flow chart of target volume measurement algorithm based on lidar/vision fusion
2.2.1 目標定位
(7)
為解算目標三維位置,首先根據(jù)目標檢測算法獲取其在平面圖像上的二維位置(x,y,w,h),其中(x,y)表示目標中心坐標,(w,h)表示目標寬與高,其具體流程可參照YOLO(you only look once)算法[16]。設O-u-v為圖像坐標系,其固定在成像平面上,O點位于圖像左上角,u軸向右與x軸平行,v軸向下與y軸平行。基于檢測框信息與對齊深度圖,取(x,y)為目標二維平面位置,設其對應于圖像坐標系下的坐標(u,v)。代入視覺傳感器的內參矩陣K,可得檢測目標三維位置為
(8)
(9)
2.2.2 地面點剔除
對目標點云進行聚類時,會誤將地面點云當作物體點云,因此在對目標點云聚類之前首先需剔除地面點。本文通過平面擬合算法對地面點進行平面擬合,可實現(xiàn)地面點的有效分割與剔除。
首先在去畸變點云Pdistor中篩選高度最低的部分點作為種子點集合Pseeds,繼而基于隨機抽樣一致(random sample consensus, RANSAC)算法[17]對Pseeds進行平面擬合,可以獲得地面平面模型。之后,計算原始點云中的每個點到平面的距離disti,i=1,2,…,l,l為點云個數(shù)。當點到平面的距離小于設定的距離閾值Thdist時,被當成新的種子點。之后重復以上操作,直到當前擬合平面的法向量與上一次擬合平面法向量的夾角θ之差小于一定閾值。此時的種子點即為地面點,記為Pground;其余點為非地面點,記為Pno_ground。
2.2.3 目標體積計算
在獲得目標點云與目標的全局位姿之后,通過點云拼接、聚類可以獲得物體的點云輪廓,此時即可對物體進行體積計算。以目標物位置為中心,進行歐式聚類可得到目標物的表面點云[18]。利用點云的法向量信息,剔除目標點云噪點,可獲得目標點云輪廓。切片法是在傳統(tǒng)切段法基礎上改進的物體體積測量方法,通過對物體點云輪廓切片求取體積,具有測量精度高、測量穩(wěn)定性強等優(yōu)點[19]。在切片法中,當切片足夠小時,可認為切片的體積等于切片的面積與切片厚度的乘積,逐個將切片體積累加即可獲得物體的體積。
如圖5所示,本文自上而下將目標的點云切成b段,設目標高為H,則每段的厚度為
圖5 激光雷達點云切片法原理示意圖Fig.5 Schematic diagram of lidar point cloud slicing method
(10)
此時,對目標體積的計算可轉換為每段的面積Si,i=1,2,…,b的計算。每一段是由單個點pj=(xj,yj),j=1,2,…,u構成的多邊形Ai,其中u為Ai中的點數(shù)。在計算Ai面積時,首先需要將點云按照一定方向排序。在Ai中選擇一個點ps,搜索其最近點獲得pe,兩點相連可以得到多邊形的一條邊。然后從剩下的點中搜索離ps(pe)最近的點p,并計算其到ps(pe)的距離ds(de)。若ds≤de,則將點p沿著ps方向更新ps,反之將點p沿著pe方向更新pe。依此類推,直到Ai中所有的點被搜索完。此時可以得到按順序排列的多邊形Ai點云。假設Ai中有u個點云p0,p1,…,pu=p0按逆時針排列,則Ai的面積Si為
(11)
繼而可以根據(jù)每個多邊形的面積,求解目標物的體積為
(12)
在本文研究中,通過激光雷達和視覺實現(xiàn)對目標體積的自動實時測量。為驗證本文提出算法的有效性,首先利用Gazebo仿真軟件搭建測量環(huán)境,模擬三維目標物體對算法精度進行驗證。繼而構建了無人車試驗系統(tǒng),在室外對真實物體的體積進行測量。
仿真平臺采用Gazebo機器人仿真系統(tǒng),Gazebo可以設計具體的三維仿真環(huán)境,能夠對無人系統(tǒng)和傳感器進行高保真的物理模擬。仿真平臺如圖6所示,主要包括:
圖6 仿真場景構建Fig.6 Simulation scenario construction
1)Summit_xl小型無人車載體,車體可發(fā)布實時位姿真值,可添加誤差值對體積測量誤差進行分析;
2) OS164線激光雷達,水平線數(shù)為2 048,水平視場360°,垂直視角±22.5°,測距誤差±1.5 cm,測距范圍0~120 m。
在上述環(huán)境中,設置了6個待測目標物體。通過本文算法對其體積進行測量,測量結果如表1所示。
表1 仿真環(huán)境下的測量結果Tab.1 Measurement results in simulation environment
由圖6和表1可以看出,本文提出的方法可以實現(xiàn)對6個目標物體體積的準確測量。其測量誤差最大為1.77%,平均相對誤差為0.99%。
為了驗證本文所提算法的實際性能,在室外搭建了試驗場景,如圖7所示。由于不規(guī)則物體的體積真值較難測量,因此選擇定制的長方體和圓柱體
圖7 試驗器材與試驗場景Fig.7 Test equipment and test scenario
道具作為目標物,并將規(guī)則物體堆疊模擬不規(guī)則物體,長方體與圓柱體尺寸的定制精度可以達到0.001 m。試驗中使用松靈SCOUT無人車平臺,搭載了Besos GX01微型主機、Intel RealSense D435i相機、OS1-64線激光雷達與FSS-6132 IMU。各傳感器性能參數(shù)如表2所示。
表2 傳感器性能參數(shù)Tab.2 Sensor performance parameters
3.2.1 定位試驗
定位試驗中,無人車搭載激光雷達、IMU、實時動態(tài)定位(real-time kinematic, RTK)在試驗場地以1.5 m/s的速度行駛,以RTK的定位結果作為基準,構圖結果如圖8所示,定位誤差對比如圖9和表3所示。
表3 試驗場景下LegGO-LOAM和本文算法的RMSE和最大定位誤差對比Tab.3 Comparison of RMSE and maximum positioning error between LeGO-LOAM and the algorithm in this paper in the test scenario
(a) LeGO-LOAM構建的點云地圖
(b) 本文算法構建的點云地圖圖8 點云地圖構建對比Fig.8 Comparison of point cloud map construction
(a) 試驗軌跡
(b) 定位誤差圖9 試驗軌跡與定位誤差Fig.9 Test track and positioning error
由圖8、圖9和表3可以看出:
1)LeGO-LOAM算法在構建地圖時,地圖產(chǎn)生了較為明顯的形變。而本文算法可以有效改善地圖形變問題,構圖精度得到提高。
2)LeGO-LOAM的全程定位均方根誤差(root mean square error,RMSE)為0.092 m,本文算法的全程定位RMSE為0.057 m,定位精度提升了38.0%。
同時LeGO-LOAM的最大定位誤差為0.314 m,而本文算法的最大定位誤差為0.165 m,最大定位誤差減少了47.5%。
3.2.2 體積測量試驗
設置6個測量目標,定制了2個長方體泡沫與2個圓柱體泡沫,并將規(guī)則物體堆疊模擬不規(guī)則物體。無人車在測量目標周邊3 m內運行,并進行目標體積測量,其場景如圖10所示。表4所示為目標體積測量結果。
圖10 試驗場景與測量過程Fig.10 Test scenario and measurement process
表4 試驗測試結果Tab.4 Test results
由圖10和表4可以看出,6個目標體積測量最大相對誤差為4.08%,平均誤差為2.61%,其中組合體的體積測量精度分別為1.33%與2.89%。相對仿真實際試驗測量精度有所下降,其主要原因為:當實際試驗時,定位精度降低導致物體點云輪廓擬合效果變差,測量誤差隨之增加。
本文面向無人車對目標體積測量的需求,提出了一種基于激光雷達/視覺的無人車目標體積自動測量方法。該方法利用IMU數(shù)據(jù)與車載里程計信息對原始LeGO-LOAM算法進行改進?;谀繕俗R別定位、地面分割及點云聚類,實現(xiàn)了目標物點云輪廓的自動提取,并設計了激光雷達點云體積切片計算方法。仿真和試驗結果表明:
1)基于畸變補償?shù)母倪MLeGO-LOAM算法在高速情況下能夠明顯補償點云畸變,提升了定位精度與構圖效果;
2)基于激光點云切片的目標體積計算方法可以實時測量目標的體積,實現(xiàn)了無人車對目標體積的測量。