張清宇,崔麗珍,李敏超,馬寶良
(內蒙古科技大學 信息工程學院,內蒙古 包頭 014010)
近年來,隨著自動駕駛領域的迅速發(fā)展,不斷的探索與創(chuàng)新也產生了許多新的技術問題,尤其需要進一步提高對環(huán)境的可靠感知。目前,自動化車輛基本配備了激光雷達(LiDAR),用于提供大量精確的3D測量值。但是并非所有獲得的信息都是“有效”的,必須區(qū)分相對于障礙物的測量和相對于地面的測量。尤其是在有坡度的地形,相對于平坦地形計算更困難。陳建等[1]利用地面二維激光雷達點云實現多車道車輛的檢測。周夢飛等[2]利用3D點云感知周圍環(huán)境和物體的屬性特征,以實現點云分類。Thrun等[3]采用基于網格的方法,將網格劃分為地面單元和非地面單元。Himmelsbach等[4]在柱坐標下處理點云,利用點的分布來擬合線段到點云,并設置坡度閾值。張子騰等[5]提出一種約束優(yōu)化的定位方法。
在平坦地形中,常使用隨機樣本一致性(RANSAC)算法[6-7]將點以平面或直線的方式擬合到單個平面中,但是很少有地形是完全平坦的,因此需要對地面點進行優(yōu)化處理。Zermas等[8]利用奇異值分解(SVD)和線束掃描法(SLR)聚類算法提取地面特征點,充分利用點云的結構分割地面點云。Nitsch等[9]使用當前點周圍相鄰的8個特征點計算點的法向量和質量值,使用基于距離的聚類算法對候選點進行分組并歸為地面點。對于地面上諸如樹木、車輛等障礙物的區(qū)分,Thrun等[3]將高程的點云劃分為單元格,并計算其中的最大高度差,如果該差值超過設定的閾值,則單元格內的所有點都被視為障礙。Rieken等[10]將初始地面點投影到柵格地圖中,存儲每個單元的平均高度,利用中值濾波器平滑柵格地圖中的高度并填補一些空的單元格。鄒兵等[11]通過引入方差信息來減少柵格處理中對于傳感器參數的依賴。Jiménez等[12]針對傾斜地形,利用馬爾可夫隨機場進行了障礙物的地面分類。此外還有地面輔助里程計的方法[13-15]來提高地面分割的精度,或在地面分割之前做預處理[16-17]來實現快速、魯棒的地面分割。然而,由于LiDAR傳感器本身的參數特性以及不同路況的特征信息,地面分割會對傳感器產生依賴,且在傾斜路面會有特征點的缺失,在垂直方向不能夠有效識別各障礙物。
針對這些問題,本文將對多組傾斜地形場景進行地面分割實驗,利用LiDAR所提供的點云數據,先進行點云預處理,對于地面點云,將3D點云投影為2D點云,并進行直線擬合,然后利用柵格地圖的方法來降低計算的復雜度,最終實現地面點云的分割。針對非地面的點云集合,首先利用SLR聚類算法處理,然后通過強度特征在垂直方向區(qū)分地面點與非地面點,并對掃描到的地面障礙物進行分類。
利用簡單的比較和局部直線擬合估計地平面點的方式來分割點云數據,避免了點云分割中建立復雜的鄰域關系和提取復雜的點特征,減少了計算的復雜度。
圖1 將3D空間劃分為大小相等的扇形區(qū)域Fig.1 3D space divided into sectors of equal size
對于任意一個點p,到扇形區(qū)域的所屬判定segment(pi)計算如下:
(1)
式中:atan 2(y,x)規(guī)定了平面的正x軸與p(x,y)之間的角度,并確保在(0,2π)。
為了應用直線提取的方式進行地面點分割,需要將3D的點云投影到2D平面計算。對于任意一個點pi∈P映射到容器(bin)中,用P表示映射到b的所有點的集合,即:
Ps={pi∈P|segment(pi)=s}。
(2)
圖2 3D點云投影Fig.2 3D point cloud projection
最終得到了一組新的2D點P:
(3)
算法 1Extraction of lines for one segment Ss1:Ls=?,c=0,Pl=?2:for i=1 to B do3: if P′bSi≠? then4: ifPl≥2 then5: (mc,bc)=fitline(Pl∪p′bSi)6: Ifmc≤Tm∧mc>Tmsmall∨bc≤Tb()∧fiterror(mc,bc,Pl∪p′bSi)≤TRMSEthen7: Pl=Pl∪p′bSi8: else9:(mc,bc)=fitline(Pl)10:Ls=Ls∪{(mc,bc)}11: c=c+112: Pl=?13: i=i-1
對原型點的地面擬合采用直線擬合的方式,三維點p(x,y,z)在投影過程中獲取的每個二維點對應的p(d,z),對每個segment擬合直線z=kd+b,其中k表示路面的坡度?;跀M合的直線來判斷點到路面的高度,如果高度小于設定的閾值,則該點為路面點,否則為障礙物點;如果路面有坡度,則擬合的直線是分段的。不同系數的(k,d)代表不同坡度的路面。
當前segment中的容器獲取到的第一個點line_start,即bin1,將其放入到current_line_points中,如果當前segment中的bins不包含點,則直接返回。從bin2開始判斷是否進行擬合直線。然后通過計算cur_point與current_line_points最后一個值的距離,即bin2與bin1之間的距離,來判斷兩點是否為長直線,開始擬合直線并返回k與b,計算擬合直線的最大誤差。具體的直線擬合流程如圖3所示。
圖3 直線擬合流程Fig.3 Flowchart of straight line fitting
傳統(tǒng)的基于柵格投影的地面分割算法通過計算柵格高度差或柵格單元的平均高度來實現地面點云的分割,然而LiDAR等傳感器自身的參數會對平均高度的評價指標造成很大的影響,并且在有坡度的地形會出現欠分割現象,對于被遮擋的物體存在過分割現象,因此通過引入柵格單元點云高度的方差信息來解決柵格投影對于計算高度差或平均高度存在的問題,減輕算法對于傳感器參數的依賴。
對于柵格單元ceil(i,j)的平均高度計算如下:
(4)
式中:(i,j)為柵格單元ceil(i,j)的行號與列號,number(·)為所求的柵格單元存儲點云的數量,q為柵格單元中的ceil(i,j)點,hq為q點的h值。相較于平坦的地面,傾斜路面非地面部分的點云柵格單元平均高度較大。
對于柵格單元ceil(i,j)的高度差計算如下:
Hdiff(i,j)=hmax-hmin,
(5)
式中:hmax和hmin分別表示柵格單元ceil(i,j)高度的最大值和最小值。在平坦路面非地面點云的高度差一般較大。
柵格單元ceil(i,j)高度方差的計算如下:
(6)
σ2(i,j)可以反映柵格點云的高度分布,對于地面點云,柵格單元的高度方差較小;對于非地面點云,柵格單元的高度方差較大。
LiDAR所提供的點云數據除了地面點云,還包括垂直方向,掃描到的物體主要有建筑物、樹木、汽車和行人等。
對于地面點云,首先進行點云數據預處理,將3D點云投影為2D點云,并進行直線擬合,然后利用柵格地圖的方法,通過計算柵格高度差和柵格單元的平均高度,降低計算的復雜度,來實現地面點云的分割。對于非地面的點云集合,采用SLR聚類算法處理,通過設定強度特征閾值,在垂直方向區(qū)分地面點與非地面點,并對掃描到的地面障礙物進行分類,算法的總體框架如圖4所示。
圖4 算法總體框架Fig.4 Overall framework of the algorithm
對于非地面點云集合,因為LiDAR掃描的區(qū)域有各種障礙物的遮擋等影響,會造成點云的缺失或稀疏,因此采用SLR聚類算法將非地面點云聚集,提高障礙物的識別精度與建圖的準確性。在SLR中,所有相同水平角度發(fā)散出的點作為一個Scan-line,在單個Scan-line中,所有距離小于閾值的點分組在一起組成一個run。
SLR對第一個line,獲取第一個line的runs,每個run都有不同的標簽;SLR對第二個line,重復run segmenting,檢查是否有新的run滿足閾值定義的合并條件,如果滿足合并條件,則將新的run與舊的合并,如果不滿足閾值條件,則新的run獲取新的標簽,直到把所有的線都掃一遍。SLR聚類算法如圖5所示。
圖5 SLR聚類算法Fig.5 SLR clustering algorithm
相同顏色的點組成一個run,每一條線表示一個line。通過SLR聚類算法,解決了非地面點云的稀疏性問題,將特征點聚集,以便對障礙物的分類。SLR算法偽代碼如算法2所示。
算法 2 SLR聚類偽代碼Result: labels : labels of the non ground point1Initialization:2P : input point cloud3Nscanlines: number of scan lines4Thrun: threshold for points to belong in the same run5Thmerge: threshold to merge neighboring runs6newLabel=1: label identity7Main LOOP:8runsAbove=Find Runs(scanline1);9Fori=1:runsAbove do10 runsAbovei.label=newLabel;11 newLabel++;12end13fori=2:Nscanlines do14 runsCurrent=Find Runs(scanlinei);15Update Labels(runsCurrent,runsAbove);16 runsAbove=runsCurrent;
本文算法采用的編程語言為C++,操作系統(tǒng)為Ubuntu18.04,實驗環(huán)境依賴于ROS操作系統(tǒng)和點云庫(PCL)。為了驗證算法的實際效果,本文采用傾斜場景的KITTI數據集的點云數據進行實驗,分別選取1、5、10 s處的地面分割效果與強度特征范圍進行對比分析,算法地面點分割的效果用圖表示,非地面點的障礙物區(qū)分由評價指標Intensitymax與Intensitymin表示。1 s時各算法的實時分割效果如圖6所示。
(a)未經過處理的LiDAR點云
1 s為機器人剛行駛進圓形區(qū)域。相對于圖6(a),圖6(b)所示的經過濾波預處理的LiDAR點云去除了噪聲的影響。圖6(c)所示的快速地面分割后的點云摒棄了非地面的點云,對地面點進行了分割。與圖6(c)相比,圖6(d)中地面點云分割使用了柵格地圖方法后能夠獲得更多有效的點。對非地面點進行SLR聚類算法處理后(圖6(f))相對非處理非地面點云(圖6(e)),能夠使得非地面點的點云更聚集,更清晰地區(qū)分障礙,物并顯示障礙物輪廓。
5 s時各算法的實時分割效果如圖7所示。
(a)未經過處理的LiDAR點云
5 s時LiDAR經過圓形地形中間部分剛轉向結束,考慮到傳感器本身的抖動,會造成LiDAR點云數據的缺失。由于轉向,圖像左上角造成了一些點云的缺失,使用柵格圖像的圖7(d)相對圖7(c)補償了較多的點云,提高了地面分割的精確性。同樣,對非地面點云進行SLR聚類算法處理后的圖7(f)也較未處理的圖7(e)在垂直方向有更多的特征點云,可以更好地識別障礙物。
10 s時各算法的實時分割效果如圖8所示。
(a)未經過處理的LiDAR點云
10 s為機器人駛離圓形區(qū)域,在傾斜路面下坡的時刻。由圖8(c)和圖8(d)可知,在傾斜地形使用地面分割算法可以實現,相較于圖8(e),經過SLR聚類算法處理后有更多的補償點云,且能夠清晰地顯示汽車、樹木等障礙物。
表1、表2、表3為1、5、10 s時刻分別在X、Y、Z方向點云對應強度特征值,強度值在設定閾值范圍內即為有效點云。其中Velo表示未進行分割的原始LiDAR點云,Grid為柵格地圖法分割后的地面點云,Fast為快速地面點云分割,SLR為經過聚類算法后處理后的非地面點云,obstacle為地面分割后添加未處理的非地面點云,Intensitymax與Intensitymin為強度的最大值與最小值。
表1 1、5、10 s時X方向對應強度特征值Tab.1 Corresponding strength characteristic values in X direction at 1, 5, 10 s
表2 1、5、10 s時Y方向對應強度特征值Tab.2 Corresponding strength characteristic values in Y direction at 1, 5, 10 s
表3 1、5、10 s時Z方向對應強度特征值Tab.3 Corresponding strength characteristic values in Z direction at 1, 5, 10 s
由表1、表2和表3可知,對于地面點云,使用柵格地圖法相較快速地面分割算法具有更好的效果;對于非地面點云,使用SLR聚類算法處理后可以更好地實現障礙物識別。在傾斜地形,算法可以有效實現地面分割與非地面點的障礙物識別。
本文通過對不同傾斜地形場景進行地面分割實驗,結果表明經過對原始LiDAR點云進行噪聲等預處理后,去除了一些無效的點云。使用柵格地圖的地面分割方法相較快速地面分割算法具有更好的地面分割效果,對非地面點進行SLR聚類算法處理后,補償了LiDAR點云的稀疏分布,通過設置強度閾值特征,能夠有效區(qū)分障礙物,并且在傾斜地形也能夠取得良好的效果。