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