?

基于深度學習的智能車行駛控制系統設計與實現?

2024-01-29 02:23張德龍趙興哲
電子器件 2023年6期
關鍵詞:狀態機車道小車

劉 晨,葉 浩,張德龍,趙興哲

(東北大學計算機科學與工程學院,遼寧 沈陽 110819)

隨著車聯網及人工智能技術的進步,傳統汽車正逐步向智能化方向發展。智能車的發展定位已從車聯網的組成部分,上升到國家戰略層面[1]。

車輛行駛控制是智能車的技術基礎之一,車載攝像頭是車輛感知外界信息時最常用的傳感器,結合深度學習算法,可實現道路場景中目標的檢測與識別,包括車道線檢測、交通標志識別和交通信號燈檢測等[2]。傳統的目標檢測方法對于場景要求較高,魯棒性較差,很難在真實的道路場景中應用[3]。而基于深度學習的檢測方法通常復雜度較高,計算量過大,無法保證檢測速度[4-6]。

本文提出了一種基于深度學習的智能車行駛控制方法,通過U-Net 網絡模型完成車道線檢測,提升檢測速度的同時保證了檢測效果和抗干擾能力,使用YOLO 模型實現了道路標識識別。在實現上述功能的基礎下,設計沿車道線行駛的PID 算法模型,并設計控制無人行駛的智能車行為狀態機,以應對復雜交通情況。該方法可以自動識別車道線,實現智能車無干預實時校正行駛方向,同時通過識別車道標識、紅綠燈等道路目標,正確及時地進行行駛控制。

1 系統總體設計

系統通過車載MX219 廣角攝像頭實時進行環境信息感知,利用U-Net 網絡進行車道線檢測,并將檢測性能與傳統計算機視覺算法進行對比。同時基于YOLO 深度學習模型,使用分割與灰度計算的方案進行障礙物和交通燈識別。最后在模擬的道路場景中進行測試,基于車輛行駛的有限狀態機和PID 算法,完成車輛的行駛控制。系統工作流程如圖1 所示。

圖1 智能車行駛控制系統基本工作流程圖

2 模塊化設計

2.1 車道線檢測

車道線檢測是系統的關鍵部分,也是系統實現的難點,需要同時考慮速度與精度。由于車道圖像具有復雜度高、圖像邊界不清晰等特點,而基于Encoder-Decoder 結構的U-Net 網絡通過下采樣和上采樣結合、底層信息和高層信息結合的方式,可以顯著提高分割的精度,因此決定使用U-Net 網絡結構進行車道線檢測[7-9],車道線檢測工作流程如圖2 所示。

圖2 車道線檢測工作流程圖

①數據采集

首先收集數據集并進行標注,攝像頭進行圖片采集,并使用Labelme 進行標定,將黃線標定為lane1,將虛線標定為lane2,得到相應的json 數據。之后將json 數據批量處理,得到相應圖片和mask,自行采集的圖片數據集如圖3 所示。

圖3 自行采集圖片數據集

②模型訓練

使用U-Net 模型進行訓練,同時進行了適當的修改:初始學習率設置為0.001 到0.005,衰減率設置為0.1,訓練的輪數比較多,設置為1 000 輪左右,每20 次輪數進行驗證,每200 次左右調整學習效率,觀察驗證集loss,在400 個epoch 之后驗證集loss 便不會再下降,如圖4 所示,說明模型已經訓練成熟。最后保存模型權重文件Unet.pt。

圖4 訓練loss 情況

③TensorRT 加速推斷

將訓練好的U-Net 模型unet.pt 轉換成unet.onnx;隨后將unet.onnx 轉換得到Unet.trt 工程文件進行模型加速。分別運行加速推斷與非加速推斷,打印耗費時間,對比其速度。并且將推斷過程中的圖片進行可視化,方便查看深度學習模型的推斷效果。

④霍夫直線檢測

使用cv2.HoughLinesP()函數對U-Net 輸出的圖像進行檢測直線,在工程中通過可視化輸出圖像,選取最佳的相關參數為threshold =10,min_line_len =8,max_line_gap =12,并且打印霍夫直線檢測的耗費時間。

⑤計算模塊

計算模塊的工作流程如圖5 所示。首先計算出兩邊車道線的特定P 點的位置,通過P 點位置,計算兩車道線的中位線,以確定小車的行進方向。通過顏色閾值和長度閾值判斷車道線是實線或虛線、白線或黃線,這兩個閾值可以通過測試場地情況進行調整。同時,計算車道中心點到中位線的距離,即偏移距離。將計算信息送進PID 算法模塊,控制小車沿車道線行駛。

圖5 計算模塊工作流程圖

2.2 標識識別

YOLO 模型是基于一個獨立的end-to-end 網絡,將物體檢測作為回歸問題求解,將候選區和對象識別合二為一[10]。YOLO 模型結構簡單,由24 個卷積層與2 個全連接層組成,因為模型不僅需要預測對象概率,還需要對邊框的位置進行預測,故而與其他網絡不同,以線性函數作為輸出層的激活函數[11-12]。

車道標識以及車道內可能出現物體的識別需要較快的速度才能留有足夠時間供車輛準確進行駕駛操作以及及時應對突發情況,故而選擇網絡較為簡單、識別效率高的YOLO 模型。

2.2.1 識別道路標識

①數據采集

通過攝像頭采集車道環境圖片,并使用LabelImg 進行標定。對于車道環境中可能出現的標識與物體設置了8 種標簽,并在標定的過程中,保持8 種標簽的數量基本接近,以防出現深度學習模型過擬合的情況。每種標簽的數量基本在200 張左右,如圖6 所示。

圖6 物體標簽數量

②YOLO 模型訓練

用xml 格式的標簽以其對應的圖片生成相對應的train.txt 和val.txt,進而使用開源的YOLOV5 模型開源代碼,將其中的訓練參數flip_lr 參數應該設置成0,禁止對輸入圖像進行翻轉,以防YOLO 模型區別左轉或右轉標識時“左右不分”。最后保存模型權重文件YOLO.pt。

③TensorRT 加速推斷

將YOLO.pt 通過YOLO.onnx 轉換成YOLO.trt,進行模型加速。分別運行加速推斷與非加速推斷,打印耗費時間,對比其速度。并且將推斷過程中的圖片進行可視化,方便查看深度學習模型的推斷效果。

2.2.2 交通燈識別

在YOLO.trt 模型識別出交通燈的基礎上,得到交通燈BOX 的具體位置,即一個矩形BOX。對該交通燈的矩形進行三等分割,隨后將RGB 圖像轉換成灰度圖像,計算每個色塊的灰度,取灰度最大的色塊,該色塊即亮燈的色塊。再根據交通燈的色塊順序“紅、黃、綠”,來判斷此時交通燈的信號狀態。

2.3 行駛控制

智能車的控制模塊由上位機和下位機組成。上位機負責圖像采集、視覺識別、行動決策、PID 控制,下位機負責控制電機和舵機,操縱智能車行動。設計了智能車自主行駛控制決策核心的有限狀態機[13],用于接受環境信息,并對環境信息進行分析,進行智能決策,接著將決策信息傳給PID 控制算法模型,最后向阿克曼模型傳送速度和角度,向電機和舵機傳送信息,以控制智能車的行駛。行駛控制流程如圖7 所示。

圖7 車輛行駛控制工作流程圖

2.3.1 智能車行駛控制決策核心的有限狀態機

智能車行駛控制決策核心的有限狀態機共有五種狀態,將各種狀態封裝為一個函數,通過判斷環境信息來調用不同的函數,進入不同的狀態,如圖8所示。

圖8 有限狀態機邏輯示意圖

①停止:此為初始狀態,為了防止智能車沖撞行人或者違反交通規則,其他四個狀態都有可能變成停止狀態。

②循跡前進:根據車道線信息,若前方無任何障礙,便循跡前進。

③減速:遇見障礙物的情況下,先進入減速狀態,并進行后續判斷。

④變道:遇見路障的情況下,越過虛線向旁邊車道進行變道。

⑤轉彎:遇見路口的情況下,進入轉彎狀態。

使用python3 面向對象的語言特性,將狀態機封裝為一個類,將各種狀態封裝為一個函數,通過判斷環境信息來調用不同的函數,進入不同的狀態。在實際編程實現中,代碼邏輯比較復雜,但是其思想基本符合上文中描述的行為狀態機。通過狀態機,可以更方便地管理智能車的行為狀態與代碼邏輯,針對環境信息做出相應的智能決策。

2.3.2 PID 控制算法

采用PID 控制算法來控制智能車行駛的角度與速度。輸入速度或角度信息之后,通過比例、積分和微分的調節,將之傳給執行結構電機和舵機,控制小車速度和角度,小車在行駛過程中不斷測量與車道線和其他物體的距離,將此距離傳回輸入,繼而間接對其輸出進行調整,形成閉環控制[14]。

①控制角度

當小車處于循跡或減速前進狀態時,需要控制其角度,保證小車沿車道線行駛,通過與物體的距離不斷調節小車的行駛角度,防止其壓線。速度則保持不變。

②控制速度

當小車遇見斑馬線、行人、紅綠燈時,會進入減速狀態,在減速狀態下需要控制速度,通過計算與物體的距離不斷調節智能車的速度,保證小車在斑馬線前減速。

2.3.3 阿克曼運動模型

采用阿克曼運動模型控制車輛的運動,首先要對車輛的運動建立數字化模型,模型建立得越準確,對車輛運動的描述越準確,對車輛的跟蹤控制的效果就越好。

①阿克曼運動模型原理

小車在轉彎時,后輪的行駛時間相同,但是后輪內輪和后輪外輪行駛距離不同。轉彎的時候后輪內輪比后輪外輪轉速慢,但是轉彎的角速度相同,故可推出后輪內輪的轉彎半徑小于后輪外輪。傳統汽車的模型是使用機械差速器來輔助完成差速,近年來電動汽車的發展為本文實現阿克曼模型提供了新思路。由于電動汽車使用兩個電機直接驅動后輪,所以可以通過對兩個電機的差速控制來實現等價的效果[15]。

與此同時,前輪內側輪胎的轉彎半徑小于前輪外側輪胎,前輪的內外輪轉過的角度也不一樣。在車輛沿著彎道轉彎時,利用四連桿的相等曲柄可以使內側輪的轉向角比外側輪大約2°~4°,同時使四個輪子路徑的圓心大致上相交于后軸的延長線上瞬時轉向中心,從而使車輛能夠順利轉彎。

②阿克曼模型運動學分析

由于只采用一個舵機帶動曲柄來控制小車的轉向,故可以用圖9 對小車的運動進行分析。

圖9 小車運動分析

設舵機控制轉角為θ,車前進速度為V,前后輪中心距為L,后輪輪距為T,后轉彎內測輪速度為V1,轉彎外側輪速度為V2。

四連桿的相等曲柄,使四個輪子路徑的圓心大致上相交于后軸的延長線上瞬時轉向中心。

因為角速度一樣,故有下列關系式成立:

因為是對速度進行控制,對V1和V2進行求解可以得到:

③基于阿克曼模型轉向的關鍵變量

為實現小車在轉向時,兩個后輪的差速控制,那么根據上面推導出來的公式,需要兩個變量,即需要控制者給出:小車的平均轉向速度V和小車的轉向角度θ。

3 系統測試分析

3.1 車道線檢測

沿車道線行駛是車輛自主行駛最基本的功能,實時性和識別效果是重要的測試指標,基于模擬的道路場景在智能車搭載的Jatson Nano 平臺中設置測試方案,并將測試結果與傳統的計算機視覺方案進行對比。

①速度指標

分別運行U-Net 方案和傳統視覺方案兩種程序,通過攝像頭采集圖片,圖片大小為256×256,并通過time()函數記錄處理速度,表1 列出了單張圖片的各項流程的處理速度。

表1 單張圖片處理速度對比

從表1 可以看出,本文提出的基于U-Net 深度學習模型方案的單張圖片處理速度能達到接近26 FPS 的處理速度,傳統計算機視覺方案由于手工處理后的圖片噪聲和細短直線多,導致霍夫變換直線檢測的速度慢,拖累了處理速度,檢測速度只有8 FPS。本文提出的模型方案在圖片處理速度上較傳統視覺方案有顯著提升。

②檢測效果

從圖10(a)的右側圖可以發現U-Net 網絡正確識別出了所有的車道線,在后續的圖片中通過程序對車道線進行特定處理,篩選近處的車道。最右側圖表示已經正確識別出車道線,并且能很好地抑制反光效果。而由圖10(b)的右側圖片則可以發現傳統方案的識別效果不清晰,雖然在錄像視頻上處理效果很好,但在實地測試效果中,會受到光照的影響。在行駛過程中若速度過高,會出現偏離道路的情況。

圖10 實際檢測效果對比

③抗干擾能力

路口存在著斑馬線,容易對識別造成干擾。首先,斑馬線與車道線的斜率一致,計算機容易將其識別成車道線。其次,智能車需停在斑馬線前往遠處識別車道線,而遠距離車道線識別很困難。這對于車輛自主行駛是需要克服的困難。

圖11(a)的右側圖片顯示出U-Net 網絡正確識別出了遠處的車道線,而排除了近處的斑馬線,因此在后續的圖片中可以看到,程序對車道線進行正確地處理,正確識別出車道線。但是在圖11(b)右側圖中斑馬線是一個很大的影響因素,而且遠處的車道線并沒有識別出來。在實際場地的測試過程中,利用傳統計算機視覺方案的智能車在穿越路口的時候會出現偏離道路的情況。因此U-Net 模型方案更加穩定。

圖11 干擾情況下檢測效果對比

3.2 標識識別

3.2.1 識別道路標識和行人

將YOLO 模型訓練之后的進行測試,測試效果如圖12 所示,可以看到其驗證的損失很小,分類準確率接近1,可以達到很好的識別效果。

圖12 YOLO 模型測試效果

使用保存的YOLO.pt 文件放進平臺中進行實地推斷測試,圖13 為YOLO 模型的實地測試效果。從圖中可以看出智能車能識別出遠處的障礙、行人、左轉標識以及紅綠燈,并打上框和標簽,方便決策系統做后續的處理。

圖13 YOLO 模型實地測試效果

3.2.2 紅綠燈識別

紅綠燈實地檢測效果如圖14 所示,將紅綠燈放在斑馬線對面,智能車停在斑馬線前進行識別,可以識別出此時綠燈的灰度最高,因此識別為綠燈,可以通行。

圖14 紅綠燈檢測效果

3.3 行駛控制

通過運行該狀態機,基于環境信息來管理智能車的各種狀態,進行智能決策。在模擬的道路場景中進行測試,小車從指定起點行駛到終點過程中可以準確完成表2 中的內容,實現智能車行駛控制。

表2 車輛完成內容

4 結語

本文提出的基于深度學習的智能車行駛控制方法,可以準確識別車道線和道路標識。測試結果表明,該方法可以在模擬的道路場景中準確完成車道線檢測和標識識別,且在車道線檢測方面較傳統的計算機視覺方案在檢測速度、檢測效果及抗干擾能力等方面均得到提升。

猜你喜歡
狀態機車道小車
北斗+手機實現車道級導航應用
避免跟車闖紅燈的地面車道線
淺談MTC車道改造
大車拉小車
自制小車來比賽
基于有限狀態機的交會對接飛行任務規劃方法
劉老師想開小車
兩輪自平衡小車的設計與實現
低速ETC/MTC混合式收費車道的設計與實現
FPGA設計中狀態機安全性研究
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合