摘要:針對傳統(tǒng)的自主循跡避障小車在復雜路況下存在圖像識別精度低、處理時間長等問題,設計一種基于EdgeBoard的智能循跡避障小車。首先,通過USB攝像頭采集道路圖像;然后,采用基于OpenCV的道路循跡算法識別道路邊緣;最后,利用SSD_MobileNetV1深度學習模型識別特定的交通標志。經測試,該智能循跡避障小車具有良好的穩(wěn)定性和可靠性。
關鍵詞:循跡避障小車;EdgeBoard;OpenCV;深度學習;自主循跡避障
中圖分類號:TP242.6" " " " "文獻標志碼:A" " " " " " 文章編號:1674-2605(2024)02-0004-07
DOI:10.3969/j.issn.1674-2605.2024.02.004
Design of Intelligent Tracking and Obstacle Avoidance Vehicle" " " " " " Based on EdgeBoard
YANG Jingjing" CAO Haiping" DING Jie" GU Yinbo" HUO Xuan
(Zhangjian School, Nantong University, Nantong 226000, China)
Abstract: Aiming at the problems of low image recognition accuracy and long processing time in traditional autonomous obstacle avoidance vehicles under complex road conditions, a smart obstacle avoidance vehicle based on EdgeBoard is designed. Firstly, collect road images through a USB camera; Then, the road tracking algorithm based on OpenCV is used to identify the edges of the road; Finally, use the SSD_MobileNetV1 deep learning model to identify specific traffic signs. After testing, the intelligent tracking and obstacle avoidance car has good stability and reliability.
Keywords: tracking and obstacle avoidance vehicle; EdgeBoard; OpenCV; deep learning; autonomous tracking and obstacle avoidance
0" 引言
隨著社會經濟的發(fā)展,汽車數(shù)量不斷攀升,給人們生活帶來便利的同時,也帶來交通擁堵和環(huán)境污染等問題。自動駕駛技術以攝像頭、雷達、超聲波、傳感器等感知器件和圖像處理、神經網絡控制等技術為基礎,實現(xiàn)汽車之間的智能協(xié)同和路徑規(guī)劃,可有效提高行駛效率,緩解交通壓力[1]。
自主循跡避障是自動駕駛技術的重要組成部分。目前,自主循跡避障技術已經取得較大進展。文獻[2]提出一種紅外循跡的設計方案,但對跑道寬度要求較高。文獻[3]采用混合遺傳算法設計智能循跡小車,但受電磁干擾較強。在復雜場合下,如何合理地規(guī)劃路徑是當前自主循跡避障研究領域關注的重點。
為此,本文提出一種基于EdgeBoard的智能循跡避障小車(以下簡稱“智能車”),采用基于OpenCV的道路循跡算法和SSD_MobileNetV1深度學習模型,實現(xiàn)在不同道路條件下的穩(wěn)定行駛和及時避障,提升了智能車的安全性能和智能水平。
1" 智能車組成架構
本文設計的智能車主要包含視覺感知模塊、路徑規(guī)劃決策模塊、運動控制模塊等,總體架構如圖1所示[4]。其中,視覺感知模塊通過攝像頭獲取智能車周圍的道路信息;路徑規(guī)劃決策模塊的控制器上位機結合運動控制核心下位機,規(guī)劃決策智能車的行駛路徑,由此控制并驅動運動控制模塊中的電機和舵機,實現(xiàn)智能車循跡避障。
2" 硬件設計
智能車的視覺感知模塊選用USB攝像頭,上位機采用百度配置的EdgeBoard,運動控制模塊選用GA12-N20直流電機和MG995舵機;車身選用I型車模,采用碳纖維底盤搭建。
智能車的下位機主要包括核心板、驅動板、主控板。其中,核心板是下位機的控制中樞,用于編程開發(fā)和運動控制;驅動板接收核心板的控制指令,以驅動電機、舵機轉動,二者均采用TC264系列芯片;主控板根據(jù)智能車的需求自主設計,用于智能車供電,其部分電路圖如圖2所示。
智能車由5 V電源、3.3 V電源、11.1 V鋰電池3種電源供電。其中,5 V電源選用線性穩(wěn)壓芯片TPS5430,為電機供電;3.3 V電源選用線性穩(wěn)壓芯片AS1015,為單片機系統(tǒng)、舵機供電;11.1 V鋰電池為下位機的電路板供電,電路板通過LM2940S變壓器將11.1 V電壓供給電機、舵機等設備。此外,該電路還預留了引腳,用于連接驅動板和舵機,通過上位機與下位機的聯(lián)合控制,使驅動板和舵機分別實現(xiàn)智能車的速度、角度控制[5]。
3" 智能車控制流程
智能車控制流程如圖3所示。
通過安裝在智能車上的USB攝像頭采集道路圖像;利用基于OpenCV的道路循跡算法及SSD_ MobileNetV1深度學習模型,提取道路圖像的道路邊緣信息和圖像特征,進而判斷道路類型;EdgeBoard處理器通過USB轉TTL模塊發(fā)送加密指令給下位機;下位機解析收到的指令,并發(fā)送控制指令給電機、舵機等設備;電機采用PID控制算法,通過PWM控制驅動電路調整轉速,實現(xiàn)電機轉速的閉環(huán)控制,進而實現(xiàn)智能車的速度控制;舵機根據(jù)接收的PWM信號轉動對應的角度,實現(xiàn)智能車的角度控制。
4" 軟件設計
4.1" 總體方案
智能車的軟件采用SSH客戶端工具FinalShell進行開發(fā)和調試。FinalShell提供了可視化的控制界面,方便對EdgeBoard進行源程序編寫、編譯和鏈接等操作,并生成可執(zhí)行文件。
智能車的軟件主要包括基于OpenCV的道路循跡算法和SSD_MobileNetV1深度學習模型。其中,基于OpenCV的道路循跡算法可實現(xiàn)圖像預處理、二值化、道路識別等功能;SSD_MobileNetV1深度學習模型對USB攝像頭采集的特定交通標志進行有效標注,并利用神經網絡進行模型訓練和部署[6]。智能車的軟件設計流程圖如圖4所示。
4.2" 基于OpenCV的道路循跡算法
4.2.1" 圖像預處理
首先,利用顏色空間轉換函數(shù)cvtcolor()對USB攝像頭采集的道路圖像進行灰度化處理[7],簡化圖像信息,突出圖像特征,提高后續(xù)的處理效率。
然后,利用(3,3)卷積核的高斯濾波對灰度化處理后的道路圖像進行平滑處理,更多地保留道路圖像的總體灰度分布情況。
接著,利用OSTU算法進行二值化處理。通過最大化背景和道路之間的類間方差來區(qū)分背景和道路。類間方差越大,背景和道路的灰度差異越明顯,錯分的可能性越小[8]。
最后,得到由255(白色)和0(黑色)組成的道路預處理圖像,如圖5所示。
4.2.2" 道路邊緣信息存儲
在預處理后的道路圖像中,對每行色塊進行搜索,找出相鄰兩列之間的突變色塊。按照行列大小關系,分別存儲左右突變色塊的信息。左右突變色塊搜索存儲的主要代碼為:
if (imagePath.atlt;uchargt;(row, col) gt; 127 amp;amp;
imagePath.atlt;uchargt;(row, col - 1) lt;= 127)
{
startBlock[counterBlock] = col;" //黑色0,0,0,每行白色起點列數(shù)存儲
}
else
if (imagePath.atlt;uchargt;(row,col) lt;= 127 amp;amp;
imagePath.atlt;uchargt;(row, col - 1) gt; 127)
{
endBlock[counterBlock++] = col;" "http://每行白色終點列數(shù)存儲
if (counterBlock gt;= end(endBlock) - begin( endBlock) )
break;
}
如果某行的色塊寬度大于設置的色塊寬度widthBlocks,則認為其是左邊緣或右邊緣的信息,分別存儲到pointsEdgeLeft和pointsEdgeRight兩個vector向量中。
4.2.3" 道路邊緣信息處理與中心線修正
根據(jù)實時存儲的道路邊緣信息,搜索邊緣信息中突變行的左上(rowBreakLeftUp)、左下(rowBreakLeftDown)、右上(rowBreakRightUp)、右下(rowBreakRightDown)4個點,以便后續(xù)進行道路邊緣信息的更新[9]。
以搜索十字道路的左上邊緣突變點為例,從左邊緣信息的末尾元素位置開始向上搜索,判斷當前點的縱坐標是否大于2,并且與下一個點的縱坐標差是否小于3。如果滿足條件,說明當前點不是突變點,更新rowBreakLeftUp的值為當前索引i,繼續(xù)向上搜索;同時重置突變點計數(shù)器counter為0,增加過濾計數(shù)器counterFilter值。
若counterFilter的值大于10,且當前點的縱坐標突然小于等于2,表示可能找到了潛在的突變點,counter 的值增加1。如果counter累計值超過5,表示找到了連續(xù)的左上邊緣突變點,正式返回rowBreakLeftUp的值(以上參數(shù)數(shù)值根據(jù)實際情況均可調)。
搜索十字道路左上邊緣突變點的主要代碼片段:
for (int i = pointsEdgeLeft.size() - 5; i gt; 50; i--)
{
if (pointsEdgeLeft[i].y gt; 2 amp;amp; abs(pointsEdgeLeft[i].y - pointsEdgeLeft[i + 1].y) lt; 3)
{
rowBreakLeftUp = i;
counter = 0;
counterFilter++;
}
else if (pointsEdgeLeft[i].y lt;=2 amp;amp; counterFilter gt; 10)
{
counter++;
if (counter gt; 5)
return rowBreakLeftUp;
}
}
搜索結束后,由左上、左下、右上、右下4個突變點求取2條直線。設一直線L上的兩點、的坐標分別為、,且,則直線L的斜率、截距b分別為
(1)
將邊緣突變行的左上、左下、右上、右下4個點分別代入公式(1),計算出2條直線的斜率、截距,可得到2條直線方程。將位于左上到左下的行值分別代入2條直線方程中的,求出對應的值,即新的左右邊緣點列值。更換原來的邊緣點列值,并存入邊緣點集中,道路邊緣信息更新完成。
在更新后的道路左右邊緣信息中,首先,分別選取圖像的首行邊緣點、1/3處邊緣點、1/2處邊緣點、末行邊緣點,共4對左右邊緣點;然后,將4對左右邊緣點的行值、列值之和分別除以2,得到4對邊緣點的中點;最后,由4對邊緣點的中點坐標生成三次貝塞爾曲線:
(2)
式中:為貝塞爾曲線的控制點,為貝塞爾曲線上參數(shù)t處的點坐標[10]。
將4對邊緣點的中點坐標代入公式(2),得到的曲線即為道路的中心線。通過對比道路中心線與道路圖像中心的偏差及方向,計算需要修正的角度,計算方法如下:
float error = controlcenter - cOLSIMAGE / 2; //圖像控制中心轉換偏差
static int errorLast - e;//記錄前一次的偏差
if (abs(error - errorLast) gt; cOLSIMAGE / 10)
{
error = error gt; errorLast ? errorLast + COLSIMAGE / 10 :
errorLast - coLSIMAGE / 10;
}
根據(jù)PID控制算法的實時反饋,實現(xiàn)智能車方向和速度的精準控制,使其沿著道路中心線行駛。
4.3" SSD_MobileNetV1深度學習模型
智能車需要識別特定的道路交通標志,以完成特殊路段的通行。本文通過SSD_MobileNetV1深度學習模型識別特定的道路交通標志。
4.3.1" 數(shù)據(jù)集的采集與制作
將安裝了USB攝像頭的智能車放置在采集點,在EdgeBoard上運行collect.py圖像采集程序,通過手柄控制智能車前進,采集各路段的道路圖像。
利用開源軟件LabelImg對采集的道路圖像進行標注,將生成的xml與道路圖像一一對應,打包成數(shù)據(jù)集。將標注好的數(shù)據(jù)集的70%劃分為訓練集、15%劃分為驗證集、15%劃分為測試集。
4.3.2" 模型訓練
由于EdgeBoard處理器的計算資源有限,智能車選取SSD_MobileNetV1網絡進行模型訓練,以免出現(xiàn)幀率較低的情況。
SSD_MobileNetV1采用MobileNetV1作為主干特征提取網絡,共使用5個不同尺度的特征圖,預測不同大小比例的回歸候選框,網絡結構如圖6所示。
利用SSD_MobileNetV1模型識別特定的道路交通標志時:
首先,對輸入的道路圖像進行深度可分離卷積和池化操作,得到6個不同尺寸和深度的特征圖;
然后,通過多層卷積和池化操作,設置錨框(8 732個),得到一系列預測框和對應的置信度分數(shù),通過錨框的大小和長寬比確定特征圖層數(shù)和特定長寬比的比例尺;
接著,利用非極大值抑制法,選擇一組置信度高、不重疊的預測框,作為初始目標的檢測結果;
最后,計算高置信度分數(shù)的預測框與真實目標框之間的IoU值,并進行比對,以確定每個預測框是否包含目標,將這些預測框進行分類標記并計算預測框的位置回歸,得到最終目標的檢測結果。
此外,本文采用綜合考慮分類誤差和邊界框誤差的MultiBox損失函數(shù),并通過反向傳播算法更新模型參數(shù),使模型的性能和泛化能力進一步提高。
利用訓練后的SSD_MobileNetV1模型識別特定的道路交通標志,識別效果如圖7所示。
由圖7可知,SSD_MobileNetV1模型可識別USB攝像頭拍攝的交通標志和對應概率。
5" 智能車測試
為測試智能車在不同光照條件下的穩(wěn)定性和性能,在正常光照(12時,室內未開燈)和較暗光照(18時,室內開燈)下分別進行15次測試。
測試道路情況:地圖長為5.58 m,寬為5.21 m,道路總長度為27.9 m。
測試過程:
1) 準備工作,確保智能車和測試環(huán)境處于正常狀態(tài),包括智能車的電池電量穩(wěn)定在75%以上、USB攝像頭正常工作并提供清晰、穩(wěn)定的圖像;
2) 開始測試,在正常光照/較暗光照條件下,將智能車放置在車庫位置,秒表歸零,啟動智能車主程序,開始記錄時間;
3) 測試過程,記錄開始進入設置路段和完全通過設置路段的時間點;
4) 結束測試,當智能車第二次抵達車庫并完全進入車庫時(如圖8(c)所示),記錄此時的時間作為計時終點;
5)多次測試,為了確保測試結果的可靠性和穩(wěn)定性,進行多次測試。
測試效果如圖8所示,通過時間如表1所示。
由表1可知,在正常光照與較暗光照條件下,智能車各設置路段的通過時間相差在0.5 s內,可以順利完成出入庫、三岔拐彎等任務,具有良好的穩(wěn)定性和可靠性。
6" 結論
本文設計了一種基于EdgeBoard的智能循跡避障小車。測試結果表明;該智能車可以在設定的道路上實現(xiàn)自主規(guī)劃、識別特定的交通標志等功能,具有良好的穩(wěn)定性和可靠性。但智能車運行算法邏輯較復雜,代碼運行效率較低,后續(xù)會對智能車的運行算法進行優(yōu)化,減少代碼冗余部分,提高運行效率。
參考文獻
[1] 曹月花,李輝.一種基于EdgeBoard的智能車系統(tǒng)設計與實現(xiàn)[J].現(xiàn)代電子技術,2022,45(18):166-170.
[2] 張萍,陳國壯,候云雷,等.模糊控制紅外循跡小車的研究[J].實驗室研究與探索,2018,37(7):50-53;91.
[3] 莫太平,周園園,張云強.面向工業(yè)物流服務的智能車及循跡算法的研究[J].火力與指揮控制,2017,42(3):146-151.
[4] 張子涵.基于多傳感數(shù)據(jù)融合的自主巡航智能小車設計[D].杭州:浙江理工大學,2023.
[5] 黃凱龍.基于飛思卡爾單片機的智能車及其調試系統(tǒng)設計[D].長沙:湖南大學,2014.
[6] 于亞威.深度學習條件下的多攝像機行人視頻目標再識別研究[D].深圳:深圳大學,2019.
[7] 雷得超,任守華.基于OpenCV圖像處理車牌識別系統(tǒng)分析研究[J].電腦與信息技術,2022,30(4):15-17.
[8] 蔡文杰,丁青.基于大津算法的5GNR幀結構自動檢測方法[J].通信技術,2021,54(2):369-373.
[9] 楊萍,侯靜茹,曹強.基于單片機的智能車圖像處理與道路識別算法研究[J].機械制造,2017,55(1):32-35.
[10] 江浩,彭俠夫.基于三次貝塞爾曲線的軌跡規(guī)劃方法[J].數(shù)字技術與應用,2022,40(11):7-10.
作者簡介:
楊靜靜,女,2002年生,本科,學生,主要研究方向:電氣工程及其自動化。
曹海平(通信作者),男,1972年生,碩士研究生,高級實驗師,主要研究方向:電氣控制。E-mail: cao.hp@ntu.edu.cn
丁杰,男,2002年生,本科,學生,主要研究方向:電氣工程及其自動化。
顧銀波,男,2002年生,本科,學生,主要研究方向:計算機科學與技術。
霍旋,男,2002年生,本科,學生,主要研究方向:通信工程。