卷積神經(jīng)網(wǎng)絡(luò)控制巡線智能車
■ 簡介
Michal Nand[1] 在網(wǎng)站 HACKADAY.IO 上通過博文 Motoku Uprising Deep Neural Network 介紹了他利用卷積神經(jīng)網(wǎng)絡(luò)來幫助控制巡線智能車更加平穩(wěn)快速運行的技術(shù)方案。特別是對神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)、訓(xùn)練、部署等方面進行了詳細的介紹。
智能車的任務(wù)相對比較簡單,就是在平面賽道上,沿著彩色導(dǎo)引線(大部分是黑色)從出發(fā)點運行到終點并折返到出發(fā)點。其中賽道上一段有一塊磚頭作為障礙物。
在作者的方案中,智能車運行大部分控制算法都采用了常規(guī)的PID、邏輯判斷都算法。他使用了CNN根據(jù)車模運行過程中,通過傳感器搜集到的二維路面數(shù)據(jù)來對賽道的種類進行分類判斷,并通過調(diào)整車模速度來適應(yīng)不同賽道的情況,達到又快又穩(wěn)的目的。
□ 機械結(jié)構(gòu)
1.硬件構(gòu)成
這款智能車的硬件配置包括有:
-
嵌入式控制器:STM32F303,Cortex M4F 72MHz -
電機驅(qū)動器:使用了TI DRV8834低電壓雙相步進電機驅(qū)動器 -
電機型號:Pololu HP電機,減速齒輪箱1:30,帶有磁編碼器 -
輪胎:Poloku 28mm的輪胎,高黏著力 -
慣性導(dǎo)航器件:LSM6DS0 -
巡線傳感器:八個綠光(540nm)光電傳感器,三個紅外障礙日干起 -
電源:180mAh, LiPol 2S -
編程結(jié)構(gòu):使用USB通過Bootloader完成程序下載。
2. 組成器件
序號 | 種類 | 數(shù)量 | 型號 |
---|---|---|---|
1 | MCU | 1 | STM32F303 72MHz ARM Cortex M4F |
2 | 電機驅(qū)動 | 1 | TI DRIV8834 |
3 | 電機 | 2 | 1:30 PoloHu,具有磁編碼器 |
4 | 輪胎 | 2 | Pololu直徑28mm |
5 | 巡線傳感器 | 8 | 540nm光電光電傳感器+白色補光LED |
6 | 紅外傳感器 | 3 | 表貼紅外傳感器+紅外LED |
7 | 慣性傳感器 | 1 | IMU LSM6DS0 陀螺儀+加速度計 |
□ 控制算法
1.控制調(diào)試界面
“磨刀不誤砍柴工”。作者還是利用OPENGL開發(fā)了用于調(diào)試的應(yīng)用軟件??梢酝ㄟ^界面:
-
顯示八個巡線光電傳感器的原始數(shù)值 -
顯示電機的狀態(tài):速度、編碼器值 -
顯示慣性傳感器的狀態(tài); -
顯示神經(jīng)網(wǎng)絡(luò)分類處理過程 -
顯示通過串口獲得的 原始數(shù)據(jù)
2. 智能車控制軟件要點
智能車軟件的主要的功能和指標(biāo)為:
-
通過二次插值算法,通過八個光電傳感器獲得更加精確的賽道到引線位置 -
主程序控制頻率為:200Hz -
方向調(diào)節(jié)器:采用PD進行方向控制 -
電機速度控制:采用雙串級PID控制完成電機速度控制 -
對賽道到引線預(yù)測:在直線賽道加速前行;在曲線拐彎時剎車慢行;通過深度神經(jīng)網(wǎng)絡(luò)進行賽道識別和控制 -
控制軟件使用C++編程 -
神經(jīng)網(wǎng)絡(luò)訓(xùn)練:采用GPU加速網(wǎng)絡(luò)訓(xùn)練
3. 神經(jīng)網(wǎng)絡(luò)用于引導(dǎo)線的預(yù)測
利用深度卷積神經(jīng)網(wǎng)絡(luò)完成對導(dǎo)引線的預(yù)測和分類:
-
根據(jù)導(dǎo)引線的種類控制運行速度:直線時快速通過,曲線時減速慢行 -
使用DenseNet:稠密連接卷積神經(jīng)網(wǎng)絡(luò)完成對賽道引導(dǎo)線類型的分類 -
輸入數(shù)據(jù)為8×8傳感器數(shù)據(jù)矩陣。總共有八個配列成直線的光電傳感器,使用運行前后相鄰八條數(shù)據(jù)組成8×8的數(shù)據(jù)矩陣 -
輸出物種曲線類型:兩種右拐,兩種左拐,一種直線
訓(xùn)練樣本采用人工生成的仿真數(shù)據(jù)訓(xùn)練神經(jīng)網(wǎng)絡(luò):
-
訓(xùn)練樣本的個數(shù):25000 -
測試樣本的個數(shù):5000 -
數(shù)據(jù)增強:Luma噪聲, White噪聲
下圖給出了DenseNet的網(wǎng)絡(luò)結(jié)構(gòu)。由于是部署在單片機STM303中允許,作者在網(wǎng)絡(luò)的魯棒性以及運行速度方面進行了權(quán)衡。網(wǎng)絡(luò)運行頻率為200Hz,所以網(wǎng)絡(luò)執(zhí)行時間必須小于5毫秒。為了達到這個目的,作者選擇了DenseNet來提高計算效率,它比純卷積神經(jīng)網(wǎng)絡(luò)使用更少的卷積核。
最終網(wǎng)絡(luò)的識別準(zhǔn)確率達到了95% 的精度。
4.網(wǎng)絡(luò)最終結(jié)構(gòu)
CNN神經(jīng)網(wǎng)絡(luò)的結(jié)果參數(shù)如下:
網(wǎng)絡(luò)層 | 網(wǎng)絡(luò)層類型 | 輸入特征圖張量尺寸 |
---|---|---|
1 | 卷積3×3×4 | 8×8×1 |
2 | MAX POOLING 2×2 | 8×8×4 |
3 | 稠密卷積3×3×4 | 4×4×4 |
4 | 稠密卷積3×3×4 | 4×4×8 |
5 | 全連接層 輸出5 | 4×4×12 |
5.將網(wǎng)絡(luò)部署到單片機中
為了能夠在32位單片機中執(zhí)行神經(jīng)網(wǎng)絡(luò),對網(wǎng)絡(luò)進行了如下的改動:
-
將所有的浮點數(shù)修改成int8_t -
將尺度權(quán)重轉(zhuǎn)換到8bit范圍 -
使用雙緩存技巧節(jié)省內(nèi)容,公用兩個內(nèi)存緩存來計算所有層的數(shù)據(jù)
※ 結(jié)論
通過本文作者介紹的車??刂浦械腃NN網(wǎng)絡(luò)的應(yīng)用,了解了對于嵌入式單片機中使用神經(jīng)網(wǎng)絡(luò)的一般方法。
本文中的神經(jīng)網(wǎng)絡(luò)應(yīng)用還屬于輔助控制方面。也許通過部署更加強大算力的單片機,使用更加復(fù)雜的算法可以完成智能車自主學(xué)習(xí)的目標(biāo)。這方面也為今年全國大學(xué)生智能汽車競賽中的AI電磁組給出了一定的參考意義。
參考資料
Michal Nand: https://hackaday.io/michalkenshin
公眾號留言
卓大大 可以點一首光輝歲月么?過幾天就要返校準(zhǔn)備比賽了,為了大一的夢想。
卓大大,我是北京學(xué)校的大三在校生。請問國賽會延期舉行嗎? 雖然疫情很艱難,但是車隊所有人在家也很努力地備賽,在暑假期間,天南海北的隊員聚在一起,盡力把車做好。我們都迫切地希望這次智能車比賽拿獎,保研、加分對我們來說,就差這場比賽,希望智能車比賽不會延期。
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!