李文海,李超榮,黃瑩飛,張 弛,郭 偉
(馬鞍山學院人工智能創新學院,安徽馬鞍山 243000)
障礙物檢測與自主導航路徑規劃是智能車的基本任務,也是該研究領域的一大熱點。由于路面環境的復雜性與多變性,智能車行駛過程中捕捉的畫面常出現光線不足或過強,障礙物遮擋等情況,使通過傳統數字圖像處理方法進行檢測存在識別準確率差、檢出率低等問題[1]。深度學習算法以強大的特征表征能力和泛化能力,可有效緩解識別準度差的問題。目前深度學習目標檢測算法廣泛采用的是YOLO 系列算法,考慮到智能車存在的低算力限制,使用YOLOv5 系列中網絡規模較小的YOLOv5s 算法框架[2],具有推理速度快、檢測精度高的優勢,適用于有限計算能力的智能車障礙物檢測的應用場景。
自主導航算法根據環境感知程度的不同,可分為全局路徑規劃算法與局部路徑規劃算法。全局路徑規劃算法是在已知的環境中進行路徑規劃,而局部路徑規劃算法則是在未知環境或部分可知環境的情況下進行路徑規劃。全局路徑規劃算法較為經典的是A*算法[3]、Dijkstra 算法[4],由于算法結構簡單、容易部署,常被廣泛采用。局部路徑規劃算法更加側重于當前的環境信息,對于效果較好的動態環境,常采用的是時間彈性帶法(TEB)、動態窗口法(DWA)[5]。目前兩種路徑規劃算法,多被單獨采用,易出現路徑規劃失敗或路徑非最優解的情況。本文設計的系統融合全局路徑規劃A*算法與局部路徑規劃TEB 算法,可同時進行路徑規劃,從而有效改善上述問題。
智能車由軟件層、驅動層、硬件層3 部分構成。驅動層用于驅動底層硬件,軟件層用于處理硬件層獲取的數據。軟件層包括ROS 操作系統與YOLOv5s 算法框架等,硬件層與驅動層主要包括各功能模組以及對應驅動,系統架構如圖1所示。

圖1 系統整體架構圖
采用訊飛U-CAR 曉mini 版本智能車作為硬件平臺,該智能車硬件架構如圖2所示,主要分為上位機和下位機。上位機是智能車的中央控制系統,搭載Jeston Nano 處理器和各功能模組,負責智能車環境數據的處理與分析。智能車功能模組主要涉及單目攝像頭、激光雷達和IMU 慣導模塊。各功能模組需要搭載各自對應的驅動,以使單目攝像頭獲取圖像數據,激光雷達采集環境信息,IMU 慣導模塊測量智能車在三維空間中的角速度和加速度數據。下位機由STM32F4控制器、蓄電池、電機和麥克納姆輪構成。控制器驅動程序驅動STM32F4,蓄電池為STM32F4 控制器供電,電機驅動麥克納姆輪。以STM32F4 為核心組成的底層控制器,實現智能車的全方位移動。

圖2 智能車硬件架構圖
系統軟件組成如圖3所示,其核心功能是完成障礙物檢測和自主導航。障礙物檢測功能經上位機的單目攝像頭獲取視頻流,通過YOLOv5s 模型實時輸出障礙物檢測信息。自主導航分為建圖、路徑規劃和PID(proportional integral derivative)控制3 大模塊。建圖通過SLAM 激光雷達,使用Gmapping 算法[6]生成的2D 地圖,采用粒子濾波方式,將激光與姿勢數據收集并創建柵格地圖。路徑規劃采用全局路徑規劃和局部路徑規劃融合的方式,全局路徑規劃采用A*算法進行構建,局部路徑規劃采用TEB(timed elastic band)算法實現。TEB 算法在全局路徑規劃的基礎上,滿足各種約束條件,生成局部路徑。經規劃得到轉向與轉速等信息,轉由下位機STM32F4 控制電機的工作頻率,進而改變麥克納姆輪的速度與方向,實現PID 控制。

圖3 智能車軟件組成
全局路徑規劃是基于已知地圖環境的靜態路徑規劃算法,主要有A*與Dijkstra 兩種算法[7]。Dijkstra 算法是一種廣度優先搜索路徑,優勢在于得到路徑多數較優,但缺陷在于每一個姿態點都需要遍歷整個路徑,效率低下,無法保證實時性。采用A*算法作為全局路徑規劃器,與Dijkstra 算法相比,優勢在于引入啟發路徑代價函數,提高搜索效率。A*算法的啟發路徑代價函數F(x),包括起始位置到達當前搜索點位置的代價函數G(x)與當前搜索點位置到目標位置的代價函數H(x)。A*算法利用F(x)作為判定下一搜索點位置的優劣,依次進行,直至到達終點。表達式如下:
F(x)=G(x)+H(x)
局部路徑規劃算法是在全局路徑的基礎上,結合實時更新的代價地圖,規劃出合理的軌跡。常見的局部路徑規劃算法含有動態窗口法(DWA)[8]、模型預測控制法(MPC)[9]、時間彈性帶法(timed elastic bands,TEB)等。
動態窗口法是在速度空間多次采樣,通過評估函數不斷對不同的速度與軌跡進行評價,并按照得分最高的速度與軌跡執行。該算法存在避障效果差、前瞻性不足等問題。模型預測控制法原理類似于PID 控制器,以當前車輛與目標軌跡的差距作為評價函數,調整速度與前進方向。該算法存在計算量大,泛化能力弱等問題。時間彈性帶法固定起始點與終點,可抽象為橡皮筋,皮筋上含有多個離散位姿約束,最終這些離散位姿組成的皮筋位置,即規劃出的軌跡。TEB 模型優化了前兩者的不足,有較強的前瞻性,避障效果好,但仍存在計算復雜度較大、速度和角度波動較大等問題。
2.2.1 TEB 算法原理
TEB 算法起源于EB(elastic bands),EB 算法規劃出的曲線可分為多段,其曲線抽象為橡皮筋,起始點與終點由全局規劃器指定后,由于受到外力的影響以及上一小段皮筋的形變,下一段的橡皮筋也會發生形變。橡皮筋有外力的影響,自然就有收縮力與之達到力平衡,平衡后的曲線即最優路徑。在EB 算法的基礎上,相鄰的運動狀態之間引入時間的概念,便于刻畫運動狀態,即為TEB 算法[10],具體軌跡示例如圖4所示。

圖4 TEB 算法軌跡示例
2.2.2 軌跡約束條件
TEB 算法中的外力就是各個狀態下的約束條件,包括跟隨路徑與避障約束、速度或加速度約束、運動學約束等。
(1)跟隨路徑與避障約束
跟隨路徑約束與避障約束相互制約,跟隨路徑施加外力將橡皮筋拉向全局路徑,避障約束施加外力使得橡皮筋遠離障礙物,二者受力方向恰好相反,圖5所示為xi到xi+2的3 種姿態關系。從xi到xi+1,跟隨路徑施加外力使得與全局路徑差距逐漸縮小,但與此同時智能車不斷靠近障礙物,距離也逐漸減小,容易碰撞到障礙物。所以,避障約束施加外力使之遠離障礙物,xi+1到xi+2的距離d逐漸增大。

圖5 跟隨路徑與避障約束受力圖
(2)速度或加速度約束
橡皮筋上的姿態點定義為一個向量[xi,yi,θi]T,包含3 個基本屬性:坐標x、y和偏轉角度θ。智能車速度過快可能會因為麥克納姆輪的抓地力不足,產生打滑現象。而速度過慢,則完成路徑時間長,性能達不到要求。因此,本文對速度和加速度進行限制,即速度和加速度均要在最小值和最大值之間:
Vmin≤Fv(B)≤Vmax
amin≤Fa(B)≤amax
(3)運動學約束
智能車要在滿足正確規劃出路徑且避開障礙物且不碰撞的前提下,盡量提高速度,行駛最優規劃路徑。
2.2.3 基于圖優化的目標函數求解
圖優化是通過節點和邊來表示路徑中各姿態之間的關系,節點為優化變量,邊為優化變量之間的限制條件,目標函數求解可通過圖優化轉化為待優化頂點與待優化邊的問題[11]。
智能車軌跡運動得到的目標函數是非線性的,非線性問題求解過程會消耗過多算力資源。因此須簡化模型,將連續運動的曲線近似于無數多個離散的位姿,這樣非線性問題就可轉化為線性問題來求解。通過圖優化來優化離散的位姿,使最終的離散位姿組成的軌跡能夠達到時間最短、距離最短、遠離障礙物等目標,同時滿足所有的軌跡約束條件。具體TEB 算法流程如圖6所示。

圖6 TEB 算法流程圖
實驗數據集由智能車攝像頭采集,共計圖片4600張,分為6 類,分別為人、自行車、汽車、摩托車、卡車、三角錐。為更好地表征學習,提升數據集的規模,對數據集進行不同程度的模糊處理、添加噪聲、亮度變化、旋轉等操作,如圖7所示。將數據集擴充至7000 張,按照8 ∶1 ∶1 的比例劃分為訓練集5600 張、驗證集700 張、測試集700 張。

圖7 數據增強
YOLOv5 根據不同的網絡深度和網絡寬度,可分為YOLOv5s、YOLOv5m、YOLOv5l 以及YOLOv5x[12]。考慮到智能車低算力的情況,采用網絡規模較小的YOLOv5s 模型進行障礙物檢測,在保證高準確率的前提下仍可保持較快的識別速度。
YOLOv5s 網絡結構如圖8所示,該模型由輸入網絡(Input)、骨干網絡(Backbone)、頸部網絡(Neck)、檢測網絡(Prediction)構成[13]。輸入網絡中增加自適應錨框計算和圖片縮放等操作;骨干網絡和頸部網絡采用不同的CSP 結構,豐富梯度組合的同時減少計算量;檢測網絡中針對不同大小的目標,采用不同尺寸的特征圖進行預測。

圖8 YOLOv5s 網絡結構
3.2.1 輸入網絡
YOLOv5s 模型在輸入網絡中分別使用Mosaic 數據增強、自適應錨框計算和自適應圖片縮放3 種操作。Mosaic 數據增強是由CutMix 數據增強演變而來,Cut-Mix 利用2 張圖片拼接,而Mosaic 利用4 張照片拼接,拼接的同時采用隨機裁剪、隨機縮放和隨機分布的方式豐富數據集,使模型的魯棒性提升。據先驗知識可知,將數據集圖片統一尺寸,檢測效果會更佳。若直接對不同尺寸的圖片,進行拉伸、收縮等操作,會造成圖片失真。針對這一情況,輸入網絡中使用自適應圖片縮放技術對圖片進行縮放填充,即先將圖片較長的邊縮放至預設尺寸,短邊通過灰色像素點填充。
3.2.2 骨干網絡
骨干網絡由Focus、CSP 以及SPP 模塊構成,主要作用是對圖片進行特征提取。Focus 模塊主要作用是在空間關系沒有被破壞的同時,增加感受野區域,由切片和卷積操作兩部分組成。以640×640×3 的一張圖片為例,在每個通道間隔采樣就得到320×320×3 的特征矩陣,再經由32 層卷積核卷積操作得到320×320×32 的特征矩陣,即得到無信息丟失的二倍下采樣特征圖。YOLOv5s 模型設計了兩種CSP 結構,這種結構減少了網絡參數數量,其中CSP1_X 應用于骨干網絡中,另外一種CSP2_X 應用于頸部網絡中。骨干網絡中的CSP模塊將淺層特征圖一分為二,一部分通過X個殘差單元(ResUnit)向后傳播,與之直接卷積后的特征進行拼接,而頸部網絡中的CSP 模塊將X個殘差單元替換成2X個CBL 模塊。SPP 模塊目的是提取到更有益的特征信息,采用3 種同一步長、不同卷積核尺寸的最大池化下采樣,與不進行任何處理的特征圖拼接,再通過卷積層實現降維。
3.2.3 頸部網絡
頸部網絡引用PANet 的思想,采用FPN(feature pyramid networks)與PAN(perceptual adversarial network)結構,如圖9所示。FPN 結構通過自頂向下進行上采樣,使底層特征圖包含更強特征信息。與之相反,PAN 結構是自底向上的,將高層特征通過下采樣和低層特征融合。

圖9 FPN 與PAN 結構
3.2.4 檢測網絡
檢測網絡接收上層頸部網絡輸出的3 種融合特征圖后,各通過一次卷積操作,得到3 種不同尺寸但維度相同的特征矩陣,用來檢測不同尺寸的物體。其大小分別為80×80×255、40×40×255、20×20×255,分別對小、中、大的物體進行檢測。
為減少訓練時間,GPU 采用 RTX 3080Ti,YOLOv5s 模型的訓練環境配置如表1所示。

表1 訓練環境配置
YOLOv5s 模型超參數設置如表2所示,模型迭代次數(iters)為500,根據服務器性能指標,將批次(batchsize)設置為32,學習率(learning_rate)作為影響網絡的關鍵因素,將其設置為0.001。學習率值過大容易造成模型不易收斂,從而忽略最優值;而過小容易造成模型收斂緩慢,達到最大迭代次數時,仍沒有找到最優解。權值衰減系數(weight_attenuation_coefficient)設置為0.0005,置信度(confidence)設置為0.6,即過濾置信度低于0.6的候選框。

表2 超參數設置
智能車的路徑規劃參數對于能否規劃出正確的路徑,行駛的穩定性尤為關鍵。調試過程中使用動態調參工具調參,在RVIZ 中可看見仿真環境地圖。ROS 中的TEB 功能包有智能車速度運動參數文件teb_local_planner_params.yaml、損失參數文件costmap_common_params.yaml、全局代價地圖參數文件global_costmap_params.yaml、局部代價地圖參數文件local_costmap_params.yaml,其重要參數、變量值及其含義如表3~表6所示。

表3 teb_local_planner_params.yaml 參數

表4 costmap_common_params.yaml 參數

表5 global_costmap_params.yaml 參數

表6 local_costmap_params.yaml 參數
YOLOv5s 模型采用精確率(Precision)、召回率(Recall)、調和值(F1)平均精度(AP)和平均精度均值(mAP)作為評價指標。精確率是所有預測為正樣本的結果中,預測正確的比率。召回率是所有正樣本的結果中被正確預測的比率。調和值是精確率與召回率的調和平均數;平均精度是橫坐標為召回率,縱坐標為精確率的二維曲線積分值。具體表達式如下:
將服務器上訓練好的YOLOv5s 模型在測試集上進行測試,結果如表7所示。由表7 可知,模型對人和三角錐的檢測效果最佳,對與人這一類別的平均精度高達99.5%,三角錐類別平均精度為99.3%,其調和平均值F1分別為97.7%和98.1%。這兩類別效果好的原因在于,人在數據集中的占比較多,且三角錐顏色、形狀等特征容易區分。摩托車類別在該模型上效果欠佳,平均精度僅達到92.6%。出現這種情況是由于摩托車在路面行駛速度較快,不易捕捉類別特征。綜上,YOLOv5s 的模型檢測結果符合實驗預期,各類別平均精度均保持在92%以上,最高可達到99%以上,滿足智能車行駛途中高精度的需求。

表7 模型檢測結果 單位:%
本文采用RVIZ 可視化呈現聯調實驗過程。首先導入柵格地圖,如圖10(a)所示。該圖使用Gmapping功能包建立完成,圖中的智能車需不斷移動直至掃描完全,受智能車抖動以及激光雷達精度影響,地圖邊界存在厚度不均勻現象。為保證實驗嚴謹性與規范性,優化后的柵格地圖如圖10(b)所示。之后,運行YOLOv5s 模型對障礙物進行檢測。最后,通過RVIZ中的2D_positive 工具,發布坐標信息,使小車到達指定地點,完成自主導航任務。

圖10 柵格地圖
本次實驗分別發布3 個目標點進行路徑規劃測試并進行障礙物檢測,實驗場地具體放置如圖11所示。鑒于場地限制,障礙物由障礙物圖片代替,水平貼墻放置,圖中藍色粗線為障礙物放置點。智能車起點位于地圖左下角,終點分別為3 個終點位置。通過RVIZ分別發布3 個目標點,進行聯調測試。

圖11 實驗場地圖
智能車路徑規劃情況與障礙物檢測情況,分別如圖12、圖13所示。智能車能夠基于全局路徑規劃A*算法與局部路徑規劃TEB 算法,完成起點與終點的路徑規劃,3 個不同目標點均能夠正確規劃出路線。障礙物檢測方面,通過YOLOv5s 模型,能夠精準檢測出障礙物。

圖12 路徑規劃情況

圖13 障礙物檢測情況
本次實驗記錄了碰撞情況、障礙物誤測情況、導航情況等。為避免偶然性的發生,實驗分為3 個終點,每個終點進行30 次重復實驗,共計90 次實驗。任務過程中無碰撞與誤檢,且成功路徑規劃,視為任務成功,實驗結果如表8所示。智能車路徑規劃的導航平均成功率為96.67%,導航時長隨著路線的長短依次增加,平均用時最快20.35 s,最慢27.53 s;障礙物檢測方面,每組實驗障礙物檢出率均為100%,最多誤檢2 次,最低誤檢1 次,在允許誤差的范圍內,能夠達到高準度的要求;最終任務成功率分別為93.33%、90.00%、96.67%,均高達90%以上。搭載該系統的智能車能夠完成障礙物檢測、自主導航的任務,具有障礙物檢測準確率高,泛化能力強,自主導航規劃路徑速度快、穩定性強的特點。實驗聯調測試結果表明,搭載ROS與YOLOv5s的智能車具有自主導航穩定性強,障礙物檢測準確率高的特性。
設計了一種ROS與YOLOv5s的智能車動態障礙物檢測導航系統。以Jeston Nano、STM32F4、SLAM 激光雷達、單目攝像頭、麥克納姆輪等作為硬件基礎,以ROS 操作系統與YOLOv5s 目標檢測算法框架作為軟件基礎。實驗結果表明,搭載該系統的智能車能夠完成障礙物檢測、自主導航的任務,路徑規劃平均成功率達到96.67%,障礙物檢測準確率在92%以上,綜合任務成功率在90%以上,具有障礙物檢測準確率高,自主導航路徑規劃穩定性強的特性。