長安大學 汽車學院 西安 710064
三維同步定位與建圖(SLAM)由于定位精度高、累計誤差小等優(yōu)點,成為國內(nèi)外研究的熱點,并被廣泛應用于無人駕駛汽車的地圖構(gòu)建與定位。開源機器人操作系統(tǒng)是一種基于消息傳遞通信的分布式多進程框架[1],聚合了由全世界開發(fā)者實現(xiàn)的大量開源功能包,可以極大減小工作量,在各個領域得到大量運用?;陂_源機器人操作系統(tǒng),目前通過激光雷達進行地圖構(gòu)建的主流方法為激光雷達測距與建圖(LOAM)算法[2]。LOAM算法將SLAM分為高頻運動估計和低頻環(huán)境建圖,提高了SLAM的準確性。
評估激光雷達系統(tǒng)輸出的航跡位置精度,以全球定位系統(tǒng)(GPS)真值為標準,將差分GPS的坐標轉(zhuǎn)換至激光雷達的定位坐標系下,剔除異常值,繪制出GPS與激光雷達的軌跡比較圖,并進行誤差分析。
目前,相關(guān)研究多偏于理論,缺少對激光雷達定位精度的評估,而激光雷達在很大程度上決定了地圖構(gòu)建和定位的效果。筆者通過采用16線激光雷達實現(xiàn)無人駕駛汽車SLAM,并基于差分GPS評估其精度。
筆者采用的16線激光雷達是Velodyne公司出品的最小型三維激光雷達[3],保留了電機轉(zhuǎn)速可調(diào)節(jié)的功能,實時上傳周圍目標距離和反射率測量值,具有100 m遠程測量距離,安裝方便,質(zhì)量僅830 g。這一激光雷達可以實現(xiàn)每秒30萬個點數(shù)據(jù)的輸出,具有±15°豎直視場、360°水平視場掃描功能,防塵、防濕氣等級為IP67,支持兩次回波接收,能夠測量第一次回波和最后一次回波的距離與反射強度,水平方向角度分辨率為0.1°~0.4°,測量頻率為5~20 Hz,具有很高的精度。
激光傳感器數(shù)據(jù)在開源機器人操作系統(tǒng)分布式架構(gòu)下封裝為sensor_msgs與PointCloud數(shù)據(jù)格式[4],由/laser_odom_to_init完成激光數(shù)據(jù)的發(fā)布工作,通過節(jié)點即可獲得激光數(shù)據(jù)。
高精度車載GPS是當前無人駕駛汽車進行全方位定位不可或缺的設備,但僅僅依靠車載GPS進行定位,難以達到無人駕駛汽車的定位要求。在無人駕駛汽車領域,差分GPS應運而生。當前,差分基站通過電臺或者4G網(wǎng)絡將定位信息傳輸至車載GPS定位端,用于提高車載GPS的定位精度[5]。應用已知精確三維坐標的差分GPS基準臺,求得偽距修正量或位置修正量,再將這個修正量實時或事后發(fā)送至GPS導航儀,對用戶的測量數(shù)據(jù)進行修正,進而提高GPS的定位精度。
LOAM算法將激光雷達和慣性測量單元的信息作為輸入[6],分為高頻運動估計和低頻環(huán)境建圖兩個部分。高頻運動估計指在高頻率保真度下執(zhí)行雷達里程計,消除運動畸變。在此過程中,慣性測量單元提供優(yōu)先運動,并有助減輕總的高頻運動。低頻環(huán)境建圖時,以同一個數(shù)量級的低頻率運行,匹配和注冊點云信息。
圖1 LOAM算法框架
雷達里程計計算激光雷達在兩次連續(xù)掃描之間的運動,去除Pk中的運動畸變,以10 Hz頻率運行,稱為里程計算法。雷達建圖時進一步處理輸出,對未失真的點云進行匹配,并以1 Hz頻率輸出至地圖,稱為繪圖算法。對以上兩個輸出進行姿勢變換集成,以10 Hz頻率輸出。
激光雷達獲取點云數(shù)據(jù),提取特征點。特征點選取邊緣點和平面點,通過曲率計算進行選取。曲率C計算式為:
(1)
圖2 點云投影
激光雷達運動在掃描期間以恒定的角度和線速度建模,通過一幀數(shù)據(jù)終止點相對于起始點的轉(zhuǎn)換矩陣,可以對這一幀數(shù)據(jù)中的任意點按照其獲得時相對于起始點的時間進行插值。獲得每一個點的位姿。插值表達式為:
(2)
為了獲得這一幀數(shù)據(jù)中的點和上一幀數(shù)據(jù)中點的對應關(guān)系,使用一個旋轉(zhuǎn)矩陣R和一個平移向量τ來表示[7]。
(3)
通過計算點到線和點到面的距離,可以計算出用于優(yōu)化的誤差函數(shù):
(4)
式中:d為距離。
(5)
式中:J為雅可比矩陣;λ為由Levenberg-Marquardt算法確定的因數(shù)[8]。
特征點到對應邊或?qū)娴木嚯x越大,分配的權(quán)重就越小。如果距離大于閾值,那么將權(quán)重設置為0。
在算法中,將已經(jīng)消除畸變的點云先轉(zhuǎn)換至全局坐標系,再與局部地圖進行匹配。局部地圖指在已經(jīng)匹配好并且轉(zhuǎn)換至全局坐標系下的前10 m3點云。特征點的數(shù)量是里程計算法的10倍,在地圖點云Qk中確定特征點的關(guān)聯(lián)時,通過對特征點周圍點云簇進行主成分分析[9],求點云簇的協(xié)方差矩陣特征值和特征向量,從而得到對應邊和對應面。
圖3 姿勢變換集成
在LOAM算法的兩種具體算法中,需要提取位于目標邊緣和平面上的特征點,并分別將特征點匹配至目標邊緣直線段和平面。在里程計算法中,通過保證快速計算得到特征點的對應關(guān)系。在繪圖算法中,通過保證精度得到特征點的對應關(guān)系。
試驗平臺為一輛黃色園區(qū)車,其實物如圖4所示。激光雷達安裝在車前方,差分GPS安裝在車頂。Linux嵌入式平臺是一套免費使用和自由傳播的類Unix操作系統(tǒng)[10]。通過無線保真與計算機進行通信,計算機端運算能力強,可進行數(shù)據(jù)量較大的運算。Linux嵌入式平臺由于運算能力有限,只能運行基本的功能包。筆者采用如圖5所示GPS數(shù)據(jù)采集和繪圖軟件,繪制GPS路網(wǎng)文件和無人駕駛汽車實時路徑。當前幀GPS 數(shù)據(jù)顯示當前通過通用串行總線接口截取到的原始數(shù)據(jù),當前GPS位置顯示當前無人駕駛汽車定位的經(jīng)緯度,在GPS設備和測試通信區(qū)域,可以通過按鈕打開GPS設備。測試按鈕用于測試當前GPS數(shù)據(jù)采集和繪圖軟件與主控制軟件是否通信正常。
圖4 試驗平臺實物
圖5 GPS數(shù)據(jù)采集和繪圖軟件
試驗以圖6所示環(huán)境地圖為試驗場景,其中黑色曲線為GPS軌跡,由車載GPS得到。將GPS定位數(shù)據(jù)與激光雷達獲得的傳感器點云數(shù)據(jù)記錄在文件中,采用LOAM算法進行定位與建圖,對定位的精度進行評估。
在激光雷達的測量數(shù)據(jù)中,如果有非常明顯的異常值,可以對該值進行處理。在試驗中,為方便研究,將GPS數(shù)據(jù)值進行有效提取,使GPS數(shù)據(jù)與激光雷達數(shù)據(jù)長度保持一致,兩組數(shù)據(jù)的一次差值如果大于60 cm,那么認為是異常值。通過MATLAB軟件進行繪圖,對差分GPS和激光雷達的曲線進行誤差分析,如圖7、圖8所示。
圖6 試驗場景
圖7 差分GPS與激光雷達軌跡對比
圖8 激光雷達誤差分布
由圖7和圖8可以看出,基于LOAM算法的激光雷達定位精度較高,雖存在一定誤差,但能將誤差控制在30 cm內(nèi),累積誤差不隨無人駕駛汽車行駛距離的增大而增大。
在不同車速和轉(zhuǎn)向時,LOAM算法能很好地消除位姿估計誤差。隨著無人駕駛汽車的行駛,位姿估計累積誤差可以得到有效控制。彎道誤差波動較大,主要原因是無人駕駛汽車姿態(tài)瞬時改變量較大,從而造成障礙物匹配不佳。
筆者應用16線激光雷達和差分GPS進行SLAM試驗,對比基于LOAM算法的激光雷達定位和基于差分GPS的定位,確認激光雷達定位曲線與差分GPS軌跡基本保持一致。通過圖形直觀展示了激光雷達定位誤差分布的特點和變化規(guī)律,對影響定位誤差的主要因素進行了分析,對LOAM算法中的應用和SLAM的精度評估具有參考價值。