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





