王 晉
(山西大眾電子信息產(chǎn)業(yè)集團(tuán)有限公司,山西 太原 030024)
隨著科技的進(jìn)步和多學(xué)科的交叉融合,人工智能領(lǐng)域已經(jīng)進(jìn)入了飛速發(fā)展的時代,其中,包含環(huán)境識別與定位建圖、自主導(dǎo)航與路徑規(guī)劃、行為控制與運動執(zhí)行等多種功能的無人駕駛技術(shù),成為人工智能領(lǐng)域的研究熱點[1]。無人駕駛技術(shù)中,要想實現(xiàn)自主導(dǎo)航,首先要明確無人車自身以及周圍障礙物的狀態(tài)和位置,這就需要借助傳感器的感知能力獲得目標(biāo)環(huán)境的三維空間模型,從而實現(xiàn)無人車的環(huán)境感知、定位建圖的功能。常用的傳感器主要有激光雷達(dá)、毫米波雷達(dá)、攝像頭等。其中,激光雷達(dá)是基于激光測距原理,直接得到與周圍目標(biāo)的距離和角度,獲得大量的點云數(shù)據(jù),從而對周圍空間環(huán)境進(jìn)行描述,生成地圖。激光雷達(dá)具有精度高、受光照強(qiáng)度等環(huán)境因素影響較小的優(yōu)點[2],適合室外環(huán)境的建圖。
跟室內(nèi)環(huán)境構(gòu)建三維點云地圖相比,室外環(huán)境主要有以下幾個技術(shù)難點:對傳感器要求更高,室內(nèi)定位多采用里程計融合慣性測量單元的方法,在短距離內(nèi)可以忽略累計誤差的影響,但室外空間大、距離遠(yuǎn),需使用NDT算法,結(jié)合GPS或RTK實現(xiàn)高精度定位[3];室內(nèi)環(huán)境距離短、多為靜態(tài),可用三角測距法,室外測距范圍大、多為動態(tài),要用飛行時間測量法,且反射信號是在不同時間接收的,加上激光雷達(dá)的運動,點云會出現(xiàn)變形[4];室內(nèi)環(huán)境特征點更穩(wěn)定、更易提取,室外環(huán)境存在不固定性、特征匹配難度變高[5-6];點云數(shù)據(jù)匹配算法不同,針對室外環(huán)境產(chǎn)生的大量點云數(shù)據(jù),需要選用合適的算法來精確地匹配點云、提高匹配效率[7]。Autoware是世界上第一款用于自動駕駛領(lǐng)域的“一體化”開源框架,包含建圖、定位、感知、規(guī)劃和運動控制等自動駕駛的關(guān)鍵技術(shù),依賴于ROS(機(jī)器人操作系統(tǒng))可提供豐富的開發(fā)和使用資源。本文中,利用五菱迷你電動車,基于鐳神16線激光雷達(dá),借助Autoware軟件,設(shè)計和實現(xiàn)了室外封閉小區(qū)域的三維點云地圖的構(gòu)建。
本文中激光雷達(dá)選用的是深圳市鐳神智能系統(tǒng)有限公司的鐳神多線激光雷達(dá)C16。該雷達(dá)外殼內(nèi),安裝有16對固定在軸承上的激光發(fā)射與接收裝置,通過內(nèi)部電機(jī)(轉(zhuǎn)速為5、10或20 rpm)沿順時針旋轉(zhuǎn),進(jìn)行360°全景掃描,生成目標(biāo)環(huán)境的三維點云地圖。激光雷達(dá)外形圖如圖1所示。
激光雷達(dá)安裝由4個安裝孔定位來實現(xiàn),數(shù)據(jù)線接口位置為規(guī)定的水平角度180°。采用鋁板將激光雷達(dá)固定在車頂,如圖2所示。設(shè)備供電電源推薦輸入電壓使用12 V DC。
圖1 激光雷達(dá)外形圖 圖2 激光雷達(dá)上裝圖
激光雷達(dá)測距原理為飛行時間測量法:在每一次測距時,激光雷達(dá)內(nèi)部的發(fā)射器發(fā)出激光脈沖,內(nèi)部定時器開始計時(設(shè)為t1),當(dāng)光波碰到物體部分能量被反射回來,激光接收器收到返回的激光信號時,停止內(nèi)部定時器計時(設(shè)為t2)。
距離=光速×(t2-t1)/2
.
該系列激光雷達(dá)測距精度為±3 cm,最小測程0.5 m,最大測程150 m(反射率為70%)。
激光雷達(dá)與車體為剛性連接,兩者之間的相對位置和姿態(tài)固定不變。為了建立激光雷達(dá)與車體之間的相對坐標(biāo)關(guān)系,需要對激光雷達(dá)的安裝進(jìn)行標(biāo)定,使激光雷達(dá)數(shù)據(jù)從激光雷達(dá)的坐標(biāo)系轉(zhuǎn)換至車體坐標(biāo)系上。
激光雷達(dá)坐標(biāo)系與車體坐標(biāo)系的相對關(guān)系包括旋轉(zhuǎn)角度與平移位置的差值,其中平移位置差值可通過激光測距儀等測量工具來測得。旋轉(zhuǎn)角度差值分為3個方向的角度差,即俯仰角(pitch)、翻滾角(roll)和航向角(yaw)。
本文中使用的激光雷達(dá)自帶內(nèi)部定位孔,將激光雷達(dá)通過定位銷上裝到車頂后,即可實現(xiàn)激光雷達(dá)水平方向和垂直方向的標(biāo)定。使用附帶的傾角傳感器進(jìn)行水平x軸和y軸方向上的角度測量,可以檢測和驗證標(biāo)定結(jié)果。激光雷達(dá)最終的標(biāo)定位置為x:0.7;y:0;z:1.8;yaw、pitch、roll均為0。
激光雷達(dá)對外通信接口為以太網(wǎng),與電腦之間使用UDP協(xié)議,協(xié)議包均為1248字節(jié)定長,與電腦的通信協(xié)議主要分三類:主數(shù)據(jù)流輸出協(xié)議、設(shè)備信息輸出協(xié)議、用戶權(quán)限寫入?yún)f(xié)議。
其中,主數(shù)據(jù)流輸出協(xié)議是將激光雷達(dá)掃描出來的距離、角度、反射率等信息封裝成包輸出給電腦;設(shè)備信息輸出協(xié)議用來監(jiān)聽此設(shè)備當(dāng)前狀態(tài)的各種配置信息;用戶權(quán)限寫入?yún)f(xié)議中,用戶可以根據(jù)自己需求,重新修改設(shè)備的某些配置參數(shù)。
激光雷達(dá)的掃描測距數(shù)據(jù)可通過其提供的UART或USB接口來傳輸。數(shù)據(jù)信息包括激光回波的反射率值,實測距離值,角度值,時間戳。一個完整的主數(shù)據(jù)流輸出協(xié)議的數(shù)據(jù)格式結(jié)構(gòu)包括幀頭、子幀、幀尾,每個數(shù)據(jù)包長1248字節(jié),其中42字節(jié)為UPD封包所用,1200字節(jié)子幀數(shù)據(jù)包區(qū)間,4字節(jié)時間戳,2字節(jié)幀尾。
本文中,基于鐳神C16激光雷達(dá)對室外封閉小區(qū)域的環(huán)境構(gòu)建三維點云地圖時,需要借助Autoware軟件。其默認(rèn)的激光雷達(dá)為velodyne 16線激光雷達(dá),故使用其他品牌的激光雷達(dá)時,需在對應(yīng)的程序文件中更改話題名稱和點云的坐標(biāo)系。
首先運行Autoware軟件,然后啟動激光雷達(dá)節(jié)點。
在Autoware界面,點擊ROSBAG按鈕,在彈出的對話框中點擊Refresh按鈕刷新話題列表,勾選/points_raw。點擊Start按鈕,開始錄制數(shù)據(jù)。駕駛汽車在目標(biāo)區(qū)域內(nèi)走完一圈后,點擊Stop按鈕,停止錄制數(shù)據(jù)。
構(gòu)建三維點云地圖時,需要完成world(世界坐標(biāo)系)到map(地圖坐標(biāo)系)、map到base_link(車體坐標(biāo)系)、base_link到velodyne(傳感器坐標(biāo)系)的坐標(biāo)系轉(zhuǎn)換。坐標(biāo)系轉(zhuǎn)換關(guān)系如圖3所示。
圖3 坐標(biāo)系轉(zhuǎn)換關(guān)系圖
world到map、base_link到velodyne的坐標(biāo)系轉(zhuǎn)換用TF工具即可,它們都是固定的。前者是在Autoware界面,選擇Map頁面,點擊TF右側(cè)的Ref按鈕,加載對應(yīng)的launch文件,點擊TF按鈕。后者是選擇Setup頁面,點選Velodyne,填寫激光雷達(dá)標(biāo)定的x、y、z、yaw、pitch、roll數(shù)值,點擊TF按鈕,點擊Vehicle Model按鈕(其后為空表示加載默認(rèn)模型)。以上坐標(biāo)系轉(zhuǎn)換如圖4(a)、(b)所示。
圖4 坐標(biāo)系轉(zhuǎn)換
map到base_link的坐標(biāo)系轉(zhuǎn)換,選擇Computing頁面,勾選ndt_mapping,如圖5所示。
坐標(biāo)變換設(shè)置完成后,選擇Simulation頁面,點擊Ref按鈕,加載錄制好的bag文件,將Start Time設(shè)為0,點擊Play按鈕播放數(shù)據(jù)進(jìn)行建圖。在建圖過程中,查看終端輸出信息,顯示Process/Input(已處理點云幀數(shù)/加載點云幀數(shù))的數(shù)值前后相等時,表示數(shù)據(jù)處理完成。
圖5 map到base_link的坐標(biāo)系轉(zhuǎn)換
當(dāng)數(shù)據(jù)包播放結(jié)束后,建圖完成,選擇Computing頁面,點擊ndt_mapping右側(cè)的app按鈕,點擊Ref按鈕選擇地圖保存路徑,點擊PCD OUTPUT按鈕,導(dǎo)出點云地圖。
選擇Map頁面,點擊Point Cloud右側(cè)的Ref按鈕,加載保存的.pcd文件,點擊Point Cloud按鈕,進(jìn)度條顯示OK,加載完畢。打開Rviz查看點云地圖。
構(gòu)建點云地圖的過程,是將激光雷達(dá)掃描到的一幀幀點云數(shù)據(jù)進(jìn)行匹配和拼接的過程。
本文中,使用NDT算法(ndt_mapping)實現(xiàn)精確地匹配點云。NDT最初在2003年提出,只用作2D點云匹配;在2009年3D NDT被提出,通過一系列局部概率密度函數(shù),將點云轉(zhuǎn)化為一種平滑的曲面表達(dá)方式。Autoware軟件使用3D NDT算法對點云數(shù)據(jù)進(jìn)行一幀幀匹配,然后直接將配準(zhǔn)后的點云疊加在一起,從而構(gòu)成三維點云地圖。該方式能夠忽略單幀點云配準(zhǔn)誤差,依賴NDT匹配時對噪聲不敏感的特性消除累積誤差。
NDT算法使用概率分布的概念來對點云的形狀進(jìn)行描述,充分考慮了點云的幾何特性,能夠有效地提高匹配效率。然而,因為該算法是基于非線性優(yōu)化的,故在遇到誤差較大的初值時,極易落入局部極值中。此外,每個柵格只在其范圍內(nèi)對局部概率有效,選擇的柵格尺寸過小會導(dǎo)致算法對于初值的敏感度增加,而選擇柵格的尺寸過大會使稀疏點云無法配準(zhǔn)??梢詫ζ溥M(jìn)行一定的約束,如回環(huán)檢測、使用RTK或者組合導(dǎo)航來進(jìn)行后端的優(yōu)化,進(jìn)一步提高匹配準(zhǔn)確度。
基于鐳神16線激光雷達(dá),借助Autoware軟件,本文設(shè)計和實現(xiàn)了室外封閉區(qū)域的三維點云地圖構(gòu)建。點云地圖的構(gòu)建使用了基于柵格地圖的NDT算法,其優(yōu)點是有更快的運行速度,且不受環(huán)境中細(xì)微變化的影響,可在室外封閉區(qū)域?qū)崿F(xiàn)較好的三維點云地圖構(gòu)建。但在回環(huán)路徑很大、沒有初始相對位姿的情況下,由于累積誤差的原因,僅基于NDT算法制作的地圖會與真實地圖的差異較大,需要對其進(jìn)行一定的約束,如回環(huán)檢測、使用RTK或者組合導(dǎo)航來完成后端優(yōu)化。