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