摘 要:本文設(shè)計(jì)的智能小車(chē)硬件系統(tǒng)使用英偉達(dá)的Jetson Nano開(kāi)發(fā)板,軟件系統(tǒng)使用Ubuntu18.04搭配ROS1.0。視覺(jué)巡航模塊運(yùn)用深度學(xué)習(xí)中的CNN網(wǎng)絡(luò)對(duì)賽道圖片和轉(zhuǎn)向數(shù)據(jù)進(jìn)行訓(xùn)練,建立賽道轉(zhuǎn)向的數(shù)學(xué)模型;交通標(biāo)志檢測(cè)模塊使用YOLOv5對(duì)特定的交通標(biāo)志進(jìn)行訓(xùn)練與識(shí)別;導(dǎo)航避障模塊使用激光SLAM的方法,采用Gmapping建圖算法建立實(shí)時(shí)局部地圖,然后運(yùn)用擴(kuò)展卡爾曼濾波算法融合里程計(jì)與IMU數(shù)據(jù)進(jìn)行定位,通過(guò)激光雷達(dá)掃描得到環(huán)境中障礙物的位置信息,再使用導(dǎo)航算法實(shí)現(xiàn)障礙物區(qū)域的路線制定,以此實(shí)現(xiàn)自動(dòng)行駛。
關(guān)鍵詞:深度學(xué)習(xí);目標(biāo)檢測(cè);SLAM;視覺(jué)巡航;多傳感器融合;避障導(dǎo)航
中圖分類(lèi)號(hào):TP29 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-1302(2024)03-0-05
0 引 言
近年來(lái)國(guó)內(nèi)循跡小車(chē)的主要類(lèi)型有紅外、超聲波、純視覺(jué),這些小車(chē)雖然材料價(jià)格低廉,但是在運(yùn)用中都有很大的缺陷。紅外測(cè)距會(huì)由于室外太陽(yáng)光線的強(qiáng)度和投射材料顏色的不同,導(dǎo)致紅外光和探測(cè)物體距離間非線性關(guān)系的產(chǎn)生[1];超聲波信號(hào)傳輸緩慢,要求測(cè)量的物體表面是平面,且在環(huán)境噪音的干擾下,不能對(duì)所有聲音信號(hào)同時(shí)進(jìn)行處理[2];只依靠攝像頭進(jìn)行循跡時(shí),需要對(duì)賽道提取邊線,計(jì)算中心線偏差,對(duì)環(huán)境的適應(yīng)度極低且不具有可移植性[3]。
全景化智能小車(chē)解決了上述小車(chē)的缺陷,不僅能強(qiáng)化感知,還能智能決策。在強(qiáng)化感知方面,把里程計(jì)和IMU的數(shù)據(jù)融合后進(jìn)行定位,同時(shí)使用激光雷達(dá)來(lái)建立障礙物區(qū)域地圖,幫助小車(chē)進(jìn)行導(dǎo)航與路徑規(guī)劃。在智能決策方面,通過(guò)對(duì)交通標(biāo)志的快速識(shí)別讓小車(chē)按照指示進(jìn)行運(yùn)動(dòng)。為了適應(yīng)不同賽道場(chǎng)景,全景化智能小車(chē)運(yùn)用了深度學(xué)習(xí)方法對(duì)大量賽道圖片進(jìn)行訓(xùn)練,得到控制舵機(jī)變化的轉(zhuǎn)向模型,這種方法的好處是在新的環(huán)境中只需要更新模型的訓(xùn)練數(shù)據(jù),訓(xùn)練完成后即可部署。
在PC端仿真軟件Gazebo中可對(duì)智能小車(chē)進(jìn)行3D建模,配合設(shè)計(jì)的功能模塊程序,可觀察其在虛擬場(chǎng)景中的運(yùn)動(dòng)情況[4]。這不僅能夠方便功能模塊的程序設(shè)計(jì)與調(diào)試,還能驗(yàn)證小車(chē)是否達(dá)到設(shè)計(jì)要求。
1 總體方案設(shè)計(jì)
全景化智能小車(chē)采用Jetson NanoB01作為硬件框架的核心板,使用Win11作為PC端操作系統(tǒng),安裝Pytorch、Tensorflow等深度學(xué)習(xí)平臺(tái),同時(shí)在VM虛擬機(jī)中安裝帶有ROS的Ubuntu18.04,在里面配置好虛擬仿真平臺(tái)Gazebo,以及環(huán)境信息可視化軟件RVIZ。小車(chē)整體構(gòu)造如圖1所示。
ROS為小車(chē)的控制系統(tǒng),Jetson Nano的HDML口連接7寸LCD顯示屏,虛擬機(jī)監(jiān)控終端通過(guò)SSH與小車(chē)相連,小車(chē)的數(shù)據(jù)信息可在虛擬機(jī)的RVIZ和RQT工具中顯示。激光雷達(dá)、攝像頭、鼠標(biāo)等外設(shè)連接在Jetson Nano板的USB接口。以STM32為核心的OpenCR板[5]控制編碼器電機(jī)、轉(zhuǎn)向舵機(jī),IMU通過(guò)串口與主控板Jetson Nano進(jìn)行數(shù)據(jù)通信。
2 系統(tǒng)主體設(shè)計(jì)
2.1 巡航模塊
小車(chē)的巡航模塊對(duì)不同彎度的賽道進(jìn)行主干提取,通過(guò)深度卷積神經(jīng)網(wǎng)絡(luò)來(lái)找到賽道主干曲度與舵機(jī)轉(zhuǎn)向角之間的規(guī)律,然后讓智能小車(chē)按照找到的規(guī)律(即特定的神經(jīng)網(wǎng)絡(luò)模型)在賽道內(nèi)行駛。深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過(guò)程包含數(shù)據(jù)采集、訓(xùn)練集制作、CNN網(wǎng)絡(luò)搭建、訓(xùn)練時(shí)優(yōu)化器的配置,最后進(jìn)行實(shí)際部署。CNN訓(xùn)練及部署流程如圖2所示。
第一步,數(shù)據(jù)采集。通過(guò)無(wú)線手柄控制智能小車(chē)進(jìn)行運(yùn)動(dòng),將小車(chē)的電機(jī)速度固定,通過(guò)手柄改變舵機(jī)值,在賽道中跑3圈進(jìn)行賽道圖片的采集,同時(shí)記錄每張賽道圖片對(duì)應(yīng)的舵機(jī)轉(zhuǎn)向值,圖片采集如圖3所示,圖片大小為480×720,共采集3圈約4 000組數(shù)據(jù),每組數(shù)據(jù)包含圖片與轉(zhuǎn)向值,轉(zhuǎn)向值在-1與1之間。
第二步,訓(xùn)練集制作。對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,將圖片調(diào)整到適合神經(jīng)網(wǎng)絡(luò)推理的大小,去除了圖片的1/3(頂部不包含賽道部分),只保留了圖片2/3的主要部分,然后將保留的這部分設(shè)置為120×240,以便在Pytorch平臺(tái)進(jìn)行訓(xùn)練。如圖4所示,將4 000組數(shù)據(jù)劃分為125個(gè)批次,每個(gè)批次里面有32組數(shù)據(jù),劃分批次時(shí)數(shù)據(jù)的順序可打亂。
第三步,建立如圖5所示的8層卷積神經(jīng)網(wǎng)絡(luò)模型[6]。
在特殊的賽道段小車(chē)轉(zhuǎn)向和道路曲線并不存在線性關(guān)系,網(wǎng)絡(luò)選擇含有正負(fù)雙邊的ReLU激活函數(shù)來(lái)對(duì)輸出形成非線性映射。同時(shí)為了避免模型參數(shù)的過(guò)度擬合,讓訓(xùn)練出的模型對(duì)賽道具有一定的容錯(cuò)能力,在訓(xùn)練網(wǎng)絡(luò)中添加了Dropout層,每次讓全連接層20%的神經(jīng)元不參與運(yùn)算,最后使用兩個(gè)全連接層對(duì)前4個(gè)卷積層的結(jié)果進(jìn)行分類(lèi),對(duì)分出的類(lèi)別以加權(quán)和的方式進(jìn)行處理。整個(gè)數(shù)據(jù)集經(jīng)過(guò)不斷地卷積與池化后,最后在Dropout與全連接層的調(diào)整下,從
57 600個(gè)類(lèi)別到100個(gè)類(lèi)別,再?gòu)?00個(gè)類(lèi)別到最后一個(gè)轉(zhuǎn)向類(lèi),即方向舵機(jī)的轉(zhuǎn)向數(shù)值。
第四步,模型訓(xùn)練。設(shè)置學(xué)習(xí)率為0.001,優(yōu)化器[7]選擇Adam,然后調(diào)用訓(xùn)練函數(shù),如圖6所示。
第五步,模型部署。由于模型是Pytorch平臺(tái)下的格式,可先轉(zhuǎn)換成trt或者onnx格式,再部署到Jetson Nano上。
2.2 交通標(biāo)志檢測(cè)模塊
YOLOv5交通標(biāo)志檢測(cè)訓(xùn)練流程如圖7所示。
第一步,對(duì)不同的交通標(biāo)志拍了共2 000張照片,然后在Win11平臺(tái)通過(guò)Labelimg進(jìn)行標(biāo)注,類(lèi)別分為人行橫道、上下坡、轉(zhuǎn)彎、限速、加速,如圖8所示。
第二步,在對(duì)交通標(biāo)志進(jìn)行類(lèi)別標(biāo)記后形成COCO數(shù)據(jù)集,然后對(duì)數(shù)據(jù)集進(jìn)行劃分。訓(xùn)練時(shí)選擇300張不同角度和不同分辨率大小的圖片作為測(cè)試集,另取100張作為驗(yàn)證集,剩下的1 600張作為訓(xùn)練集。
第三步,修改YOLOv5x的配置文件[8],使模型參數(shù)中的訓(xùn)練數(shù)據(jù)類(lèi)別的數(shù)量和名稱(chēng)與交通標(biāo)志中的類(lèi)別數(shù)量和名稱(chēng)一致。開(kāi)啟Adam優(yōu)化,設(shè)置學(xué)習(xí)率為0.002 5,學(xué)習(xí)率動(dòng)量為0.850,權(quán)重衰減系數(shù)為0.000 5,迭代次數(shù)為300。
第四步,采用tran.py程序結(jié)合yolov5x.yaml和yolov5x.pt文件進(jìn)行2 h的交通標(biāo)志識(shí)別模型的訓(xùn)練。
圖9顯示了采用交通標(biāo)志檢測(cè)模型后對(duì)路牌的識(shí)別效果。表1反映了模型對(duì)交通標(biāo)志識(shí)別的準(zhǔn)確度。
3 硬件設(shè)計(jì)
3.1 硬件總體布局
智能小車(chē)硬件布局如圖10所示。Jetson Nano的USB接口連接激光雷達(dá)與攝像頭后,可對(duì)周?chē)h(huán)境的點(diǎn)云數(shù)據(jù)以及圖像數(shù)據(jù)進(jìn)行采集,其GPU可快速進(jìn)行圖像處理。另外STM32控制板把IMU與里程計(jì)數(shù)據(jù)上傳到Nano主板并接受Nano主板的控制命令,對(duì)電機(jī)、舵機(jī)進(jìn)行控制。
3.2 激光雷達(dá)
全景化智能小車(chē)要對(duì)復(fù)雜的場(chǎng)景進(jìn)行探測(cè)建圖,需要對(duì)環(huán)境里面的障礙物進(jìn)行360°的感知。雖然智能小車(chē)是在小范圍場(chǎng)景進(jìn)行運(yùn)動(dòng),實(shí)時(shí)運(yùn)行只考慮在半徑2 m的范圍,但是為了探測(cè)的精確,搭載了測(cè)距范圍可達(dá)12 m、測(cè)量頻率為8 000次/秒、掃描頻率可達(dá)15 Hz的激光雷達(dá),同時(shí)其高頻率的特點(diǎn)也支撐了智能小車(chē)的導(dǎo)航避障。激光雷達(dá)感知環(huán)境地形如圖11所示。
3.3 編碼器電機(jī)模塊
全景化智能小車(chē)需要得到里程計(jì)數(shù)據(jù)來(lái)方便自身在環(huán)境當(dāng)中的定位,同時(shí)為了不讓電機(jī)與編碼器安裝方式分開(kāi),智能小車(chē)采用了一款帶編碼器的直流減速電機(jī)。編碼器電機(jī)構(gòu)造及性能如圖12所示。
4 程序邏輯設(shè)計(jì)
程序開(kāi)始運(yùn)行時(shí),同時(shí)啟動(dòng)攝像頭、激光雷達(dá)、IMU和里程計(jì),攝像頭負(fù)責(zé)采集賽道的圖像信息,IMU和里程計(jì)支撐定位需要的數(shù)據(jù)融合,激光雷達(dá)為后面環(huán)境中障礙物區(qū)做建圖準(zhǔn)備。接著對(duì)處理的賽道圖片進(jìn)行交通標(biāo)志檢測(cè),如果在圖片里面未檢測(cè)到障礙物區(qū)標(biāo)志,而是紅綠燈、上下坡、轉(zhuǎn)向、人行橫道等交通標(biāo)志,那么智能小車(chē)就會(huì)執(zhí)行該交通標(biāo)志下所規(guī)定的程序動(dòng)作。如果在圖片的檢測(cè)當(dāng)中識(shí)別到障礙物區(qū)的標(biāo)志,那么就會(huì)調(diào)用避障導(dǎo)航模塊使小車(chē)到達(dá)障礙物區(qū)的出口;成功到達(dá)出口后,小車(chē)回到交通標(biāo)志檢測(cè)模塊。如果圖片里面沒(méi)有出現(xiàn)任何交通標(biāo)志,那么再對(duì)圖片進(jìn)行處理后導(dǎo)入深度學(xué)習(xí)轉(zhuǎn)向板塊,此時(shí)智能小車(chē)會(huì)計(jì)算出實(shí)時(shí)環(huán)境下賽道曲線對(duì)應(yīng)的舵機(jī)轉(zhuǎn)向值,然后控制電機(jī)和舵機(jī)讓小車(chē)在賽道內(nèi)運(yùn)動(dòng)。小車(chē)的停止可通過(guò)PC端進(jìn)行命令控制。程序的主流程如圖13所示。
4.1 IMU與里程計(jì)數(shù)據(jù)融合定位
智能小車(chē)需要通過(guò)知道自身在環(huán)境當(dāng)中的位置來(lái)進(jìn)行下一時(shí)刻位置的預(yù)測(cè)。編碼器可以測(cè)量近距離的行進(jìn)長(zhǎng)度,但是需要在里程計(jì)里進(jìn)行積分,長(zhǎng)時(shí)間后會(huì)產(chǎn)生積分誤差而導(dǎo)致測(cè)量不準(zhǔn),而IMU模塊本身的零點(diǎn)漂移和受溫度影響的刻度漂移也會(huì)引起誤差。由于智能小車(chē)要在環(huán)境感知中進(jìn)行定位,考慮到非線性因素,拓展卡爾曼濾波算法(EKF)適合用來(lái)融合這兩種傳感器的數(shù)據(jù),并且能夠?qū)Ψ蔷€性函數(shù)進(jìn)行處理[9]。圖14中黑色線條為IMU和里程計(jì)經(jīng)過(guò)擴(kuò)展卡爾曼濾波融合后的軌跡。
4.2 Gmapping建圖
調(diào)用ROS系統(tǒng)中Gmapping算法包[10]實(shí)現(xiàn)激光SLAM。如圖15所示,先通過(guò)粒子濾波算法定位,粒子與已經(jīng)產(chǎn)生的環(huán)境地圖進(jìn)行掃描匹配,然后不斷矯正位置誤差并重新掃描匹配更新環(huán)境地圖。在構(gòu)建小場(chǎng)景地圖時(shí)Gmapping計(jì)算量要求低并且精度高,且對(duì)激光雷達(dá)頻率要求低。
4.3 TEB局部路徑規(guī)劃
第一步,發(fā)送障礙物區(qū)出口的位置坐標(biāo)(X,Y,車(chē)頭朝向)作為目標(biāo)點(diǎn),車(chē)頭朝向可以根據(jù)小車(chē)能夠從障礙區(qū)出口出去的朝向進(jìn)行設(shè)置,導(dǎo)航目標(biāo)點(diǎn)的平面坐標(biāo)(X,Y)為小車(chē)到達(dá)障礙物區(qū)入口處時(shí)的實(shí)際坐標(biāo)加上障礙物區(qū)出口相對(duì)障礙物區(qū)入口的相對(duì)坐標(biāo)。然后把目標(biāo)點(diǎn)位置坐標(biāo)發(fā)送給ROS系統(tǒng)的move_base模塊,這個(gè)模塊包含路徑規(guī)劃,會(huì)發(fā)布對(duì)電機(jī)和舵機(jī)的控制命令。
第二步,進(jìn)行路徑規(guī)劃,全局路徑規(guī)劃由Dijkstra算法實(shí)現(xiàn)。局部路徑規(guī)劃使用如圖16所示的TEB算法,從碰撞概率和時(shí)間長(zhǎng)短兩方面對(duì)能夠躲避障礙物的多條路徑進(jìn)行綜合評(píng)分,選擇最優(yōu)路徑;然后在行駛時(shí)間周期內(nèi)分配給智能小車(chē)線速度與角速度,進(jìn)而控制其電機(jī)和舵機(jī),讓智能小車(chē)導(dǎo)航避障。復(fù)雜環(huán)境中導(dǎo)航避障效果如圖17所示。
5 實(shí)驗(yàn)結(jié)果
系統(tǒng)聯(lián)調(diào)測(cè)試結(jié)果如圖18所示。實(shí)驗(yàn)結(jié)果表明,本文所設(shè)計(jì)的全景化智能小車(chē)能夠通過(guò)攝像頭、激光雷達(dá)、里程計(jì)、IMU等傳感器獲得自身運(yùn)動(dòng)信息和周?chē)h(huán)境信息,從而進(jìn)行航向角度計(jì)算和智能交通決策,同時(shí)能夠計(jì)算自身在障礙物區(qū)中運(yùn)動(dòng)時(shí)與障礙物的躲避時(shí)間和碰撞概率,并以此為依據(jù)進(jìn)行最佳行駛路線的選擇,達(dá)到自主避障和自動(dòng)巡航的功能。在實(shí)驗(yàn)過(guò)程中發(fā)現(xiàn),激光雷達(dá)避障導(dǎo)航模式對(duì)于試驗(yàn)場(chǎng)地有一定的要求,要求實(shí)驗(yàn)環(huán)境不能太過(guò)狹窄,太過(guò)狹窄的場(chǎng)地會(huì)在一定程度上影響激光雷達(dá)的掃描結(jié)果,從而會(huì)使障礙物的位置識(shí)別出現(xiàn)一定的偏差,導(dǎo)致智能小車(chē)避障失敗。
6 結(jié) 語(yǔ)
本文設(shè)計(jì)的智能小車(chē)在視覺(jué)巡航模式下能正常行駛于賽道,遇到特定交通標(biāo)志(紅綠燈、轉(zhuǎn)向、上下坡、限速、解除限速、障礙物)能用交通標(biāo)志檢測(cè)模塊進(jìn)行相應(yīng)交通決策。當(dāng)智能小車(chē)識(shí)別到前方存在障礙物標(biāo)志影響其正常前進(jìn)時(shí),會(huì)進(jìn)入雷達(dá)避障導(dǎo)航模式,并及時(shí)調(diào)整小車(chē)行駛路線,保證在避開(kāi)障礙物的情況下順利抵達(dá)障礙區(qū)出口,再回到正常的視覺(jué)巡航模式。
參考文獻(xiàn)
[1]朱丹,陶曉慶,羅琛.基于光電傳感器的智能小車(chē)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子測(cè)試,2020,48(22):11-13.
[2]李春杏.超聲波避障智能小車(chē)[J].電子世界,2021,43(19):11-12.
[3]陳小龍.基于灰度傳感器的智能小車(chē)避障尋優(yōu)系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)信息化,2018,15(2):66-67.
[4]姜玉,原明亭.基于Gazebo的機(jī)器人靈活操作控制平臺(tái)的搭建
[J].工業(yè)控制計(jì)算機(jī),2018,31(12):44-46.
[5] Anon. OpenCR:open source control module for ROS [EB/OL]. [2023-03-13]. https://robots.ros.org/opencr/.
[6]周飛燕,金林鵬,董軍.卷積神經(jīng)網(wǎng)絡(luò)研究綜述[J].計(jì)算機(jī)學(xué)報(bào),2017,40(6):1229-1251.
[7]姬壯偉.基于pytorch的神經(jīng)網(wǎng)絡(luò)優(yōu)化算法研究[J].山西大同大學(xué)學(xué)報(bào)(自然科學(xué)版),2020,36(6):51-53.
[8]顧德英,羅聿倫,李文超.基于改進(jìn)YOLOv5算法的復(fù)雜場(chǎng)交通目標(biāo)檢測(cè)[J].東北大學(xué)學(xué)報(bào)(自然科學(xué)版),2022,43(8):1073-1079.
[9]王博,張國(guó)偉,盧秋紅,等.基于擴(kuò)展卡爾曼濾波的2D激光SLAM研究[J].現(xiàn)代計(jì)算機(jī),2022,28(4):14-20.
[10]壽佳鑫,張志明,蘇永清,等.基于ROS和激光雷達(dá)的室內(nèi)移動(dòng)機(jī)器人定位和導(dǎo)航系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].機(jī)械與電子,2018,36(11):76-80.