深度神經網絡控制的巡線智能車

■ 簡介


Michal Nand 在網站 HACKADAY.IO 上通過博文 Motoku Uprising Deep Neural Network 介紹了他利用卷積神經網絡來幫助控制巡線智能車更加平穩快速運行的技術方案。特別是對神經網絡的結構、訓練、部署等方面進行了詳細的介紹。

智能車的任務相對比較簡單,就是在平面賽道上,沿着彩色導引線(大部分是黑色)從出發點運行到終點並折返到出發點。其中賽道上一段有一塊磚頭作爲障礙物。

▲ 利用神經網絡控制的巡線智能車

▲ 利用神經網絡控制的巡線智能車

在作者的方案中,智能車運行大部分控制算法都採用了常規的PID、邏輯判斷都算法。他使用了CNN根據車模運行過程中,通過傳感器蒐集到的二維路面數據來對賽道的種類進行分類判斷,並通過調整車模速度來適應不同賽道的情況,達到又快又穩的目的。

 

□ 機械結構


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開發了用於調試的應用軟件。可以通過界面:

  • 顯示八個巡線光電傳感器的原始數值
  • 顯示電機的狀態:速度、編碼器值
  • 顯示慣性傳感器的狀態;
  • 顯示神經網絡分類處理過程
  • 顯示通過串口獲得的 原始數據

▲ 編程調試界面

▲ 編程調試界面

2. 智能車控制軟件要點

智能車軟件的主要的功能和指標爲:

  • 通過二次插值算法,通過八個光電傳感器獲得更加精確的賽道到引線位置
  • 主程序控制頻率爲:200Hz
  • 方向調節器:採用PD進行方向控制
  • 電機速度控制:採用雙串級PID控制完成電機速度控制
  • 對賽道到引線預測:在直線賽道加速前行;在曲線拐彎時剎車慢行;通過深度神經網絡進行賽道識別和控制
  • 控制軟件使用C++編程
  • 神經網絡訓練:採用GPU加速網絡訓練

▲ 智能車的軟件控制框架

▲ 智能車的軟件控制框架

3. 神經網絡用於引導線的預測

利用深度卷積神經網絡完成對導引線的預測和分類:

  • 根據導引線的種類控制運行速度:直線時快速通過,曲線時減速慢行
  • 使用DenseNet:稠密連接卷積神經網絡完成對賽道引導線類型的分類
  • 輸入數據爲8×8傳感器數據矩陣。總共有八個配列成直線的光電傳感器,使用運行前後相鄰八條數據組成8×8的數據矩陣
  • 輸出物種曲線類型:兩種右拐,兩種左拐,一種直線

▲ 神經網絡結構圖

▲ 神經網絡結構圖

訓練樣本採用人工生成的仿真數據訓練神經網絡:

  • 訓練樣本的個數:25000
  • 測試樣本的個數:5000
  • 數據增強: Luma噪聲, White噪聲

▲ 輸入訓練數據樣本

▲ 輸入訓練數據樣本

下圖給出了DenseNet的網絡結構。由於是部署在單片機STM303中允許,作者在網絡的魯棒性以及運行速度方面進行了權衡。網絡運行頻率爲200Hz,所以網絡執行時間必須小於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位單片機中執行神經網絡,對網絡進行了如下的改動:

  • 將所有的浮點數修改成int8_t
  • 將尺度權重轉換到8bit範圍
  • 使用雙緩存技巧節省內容,公用兩個內存緩存來計算所有層的數據

▲ 雙內存緩存的模式

▲ 雙內存緩存的模式

 

※ 結論


通過本文作者介紹的車模控制中的CNN網絡的應用,瞭解了對於嵌入式單片機中使用神經網絡的一半方法。

本文中的神經網絡應用還屬於輔助控制方面。也許通過部署更加強大算力的單片機,使用更加複雜的算法可以完成智能車自主學習的目標。這方面也爲今年全國大學生智能汽車競賽中的AI電磁組給出了一定的參考意義。

留言:桌大大 可以點一首光輝歲月麼?過幾天就要返校準備比賽了,爲了大一的夢想。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章