加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

卷積神經(jīng)網(wǎng)絡(luò)控制巡線智能車

2020/07/08
236
閱讀需 6 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

簡介

Michal Nand[1] 在網(wǎng)站 HACKADAY.IO 上通過博文 Motoku Uprising ?Deep Neural Network 介紹了他利用卷積神經(jīng)網(wǎng)絡(luò)來幫助控制巡線智能車更加平穩(wěn)快速運(yùn)行的技術(shù)方案。特別是對神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)、訓(xùn)練、部署等方面進(jìn)行了詳細(xì)的介紹。

智能車的任務(wù)相對比較簡單,就是在平面賽道上,沿著彩色導(dǎo)引線(大部分是黑色)從出發(fā)點(diǎn)運(yùn)行到終點(diǎn)并折返到出發(fā)點(diǎn)。其中賽道上一段有一塊磚頭作為障礙物。

▲ 利用神經(jīng)網(wǎng)絡(luò)控制的巡線智能車

在作者的方案中,智能車運(yùn)行大部分控制算法都采用了常規(guī)的 PID、邏輯判斷都算法。他使用了 CNN 根據(jù)車模運(yùn)行過程中,通過傳感器搜集到的二維路面數(shù)據(jù)來對賽道的種類進(jìn)行分類判斷,并通過調(diào)整車模速度來適應(yīng)不同賽道的情況,達(dá)到又快又穩(wěn)的目的。

□ 機(jī)械結(jié)構(gòu)

1. 硬件構(gòu)成

這款智能車的硬件配置包括有:

嵌入式控制器:STM32F303,Cortex M4F 72MHz

電機(jī)驅(qū)動器:使用了 TI DRV8834 低電壓雙相步進(jìn)電機(jī)驅(qū)動器

電機(jī)型號:Pololu HP 電機(jī),減速齒輪箱 1:30,帶有磁編碼器

輪胎:Poloku 28mm 的輪胎,高黏著力

慣性導(dǎo)航器件:LSM6DS0

巡線傳感器:八個綠光(540nm)光電傳感器,三個紅外障礙日干起

電源:180mAh, LiPol 2S

編程結(jié)構(gòu):使用 USB 通過 Bootloader 完成程序下載。

▲ 智能車的硬件構(gòu)成

2. 組成器件

□ 控制算法

1. 控制調(diào)試界面

“磨刀不誤砍柴工”。作者還是利用 OPENGL 開發(fā)了用于調(diào)試的應(yīng)用軟件??梢酝ㄟ^界面:

顯示八個巡線光電傳感器的原始數(shù)值

顯示電機(jī)的狀態(tài):速度、編碼器值

顯示慣性傳感器的狀態(tài);

顯示神經(jīng)網(wǎng)絡(luò)分類處理過程

顯示通過串口獲得的 原始數(shù)據(jù)

▲ 編程調(diào)試界面

2. 智能車控制軟件要點(diǎn)

智能車軟件的主要的功能和指標(biāo)為:

通過二次插值算法,通過八個光電傳感器獲得更加精確的賽道到引線位置

主程序控制頻率為:200Hz

方向調(diào)節(jié)器:采用 PD 進(jìn)行方向控制

電機(jī)速度控制:采用雙串級 PID 控制完成電機(jī)速度控制

對賽道到引線預(yù)測:在直線賽道加速前行;在曲線拐彎時剎車慢行;通過深度神經(jīng)網(wǎng)絡(luò)進(jìn)行賽道識別和控制

控制軟件使用 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)引線的種類控制運(yùn)行速度:直線時快速通過,曲線時減速慢行

使用 DenseNet:稠密連接卷積神經(jīng)網(wǎng)絡(luò)完成對賽道引導(dǎo)線類型的分類

輸入數(shù)據(jù)為 8×8 傳感器數(shù)據(jù)矩陣??偣灿邪藗€配列成直線的光電傳感器,使用運(yùn)行前后相鄰八條數(shù)據(jù)組成 8×8 的數(shù)據(jù)矩陣

輸出物種曲線類型:兩種右拐,兩種左拐,一種直線

▲ 神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)圖

訓(xùn)練樣本采用人工生成的仿真數(shù)據(jù)訓(xùn)練神經(jīng)網(wǎng)絡(luò):

訓(xùn)練樣本的個數(shù):25000

測試樣本的個數(shù):5000

數(shù)據(jù)增強(qiáng):Luma 噪聲, White 噪聲

▲ 輸入訓(xùn)練數(shù)據(jù)樣本

下圖給出了 DenseNet 的網(wǎng)絡(luò)結(jié)構(gòu)。由于是部署在單片機(jī) STM303 中允許,作者在網(wǎng)絡(luò)的魯棒性以及運(yùn)行速度方面進(jìn)行了權(quán)衡。網(wǎng)絡(luò)運(yùn)行頻率為 200Hz,所以網(wǎng)絡(luò)執(zhí)行時間必須小于 5 毫秒。為了達(dá)到這個目的,作者選擇了 DenseNet 來提高計算效率,它比純卷積神經(jīng)網(wǎng)絡(luò)使用更少的卷積核。

▲ 神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)

最終網(wǎng)絡(luò)的識別準(zhǔn)確率達(dá)到了 95% 的精度。

4. 網(wǎng)絡(luò)最終結(jié)構(gòu)

CNN 神經(jīng)網(wǎng)絡(luò)的結(jié)果參數(shù)如下:
?

▲ 神經(jīng)網(wǎng)絡(luò)的各層結(jié)構(gòu)參數(shù)

5. 將網(wǎng)絡(luò)部署到單片機(jī)中

為了能夠在 32 位單片機(jī)中執(zhí)行神經(jīng)網(wǎng)絡(luò),對網(wǎng)絡(luò)進(jìn)行了如下的改動:

將所有的浮點(diǎn)數(shù)修改成 int8_t

將尺度權(quán)重轉(zhuǎn)換到 8bit 范圍

使用雙緩存技巧節(jié)省內(nèi)容,公用兩個內(nèi)存緩存來計算所有層的數(shù)據(jù)

▲ 雙內(nèi)存緩存的模式

※ 結(jié)論

通過本文作者介紹的車??刂浦械?CNN 網(wǎng)絡(luò)的應(yīng)用,了解了對于嵌入式單片機(jī)中使用神經(jīng)網(wǎng)絡(luò)的一般方法。

本文中的神經(jīng)網(wǎng)絡(luò)應(yīng)用還屬于輔助控制方面。也許通過部署更加強(qiáng)大算力的單片機(jī),使用更加復(fù)雜的算法可以完成智能車自主學(xué)習(xí)的目標(biāo)。這方面也為今年全國大學(xué)生智能汽車競賽中的 AI 電磁組給出了一定的參考意義。

參考資料

[1]Michal Nand: https://hackaday.io/michalkenshin

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

公眾號TsinghuaJoking主筆。清華大學(xué)自動化系教師,研究興趣范圍包括自動控制、智能信息處理、嵌入式電子系統(tǒng)等。全國大學(xué)生智能汽車競賽秘書處主任,技術(shù)組組長,網(wǎng)稱“卓大大”。