• 正文
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

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

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

簡(jiǎn)介

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

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

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

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

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

1. 硬件構(gòu)成

這款智能車(chē)的硬件配置包括有:

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

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

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

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

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

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

電源:180mAh, LiPol 2S

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

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

2. 組成器件

□ 控制算法

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

“磨刀不誤砍柴工”。作者還是利用 OPENGL 開(kāi)發(fā)了用于調(diào)試的應(yīng)用軟件。可以通過(guò)界面:

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

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

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

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

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

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

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

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

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

主程序控制頻率為:200Hz

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

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

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

控制軟件使用 C++編程

神經(jīng)網(wǎng)絡(luò)訓(xùn)練:采用 GPU 加速網(wǎng)絡(luò)訓(xùn)練

▲ 智能車(chē)的軟件控制框架

3. 神經(jīng)網(wǎng)絡(luò)用于引導(dǎo)線的預(yù)測(cè)

利用深度卷積神經(jīng)網(wǎng)絡(luò)完成對(duì)導(dǎo)引線的預(yù)測(cè)和分類:

根據(jù)導(dǎo)引線的種類控制運(yùn)行速度:直線時(shí)快速通過(guò),曲線時(shí)減速慢行

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

輸入數(shù)據(jù)為 8×8 傳感器數(shù)據(jù)矩陣??偣灿邪藗€(gè)配列成直線的光電傳感器,使用運(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)練樣本的個(gè)數(shù):25000

測(cè)試樣本的個(gè)數(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í)行時(shí)間必須小于 5 毫秒。為了達(dá)到這個(gè)目的,作者選擇了 DenseNet 來(lái)提高計(jì)算效率,它比純卷積神經(jīng)網(wǎng)絡(luò)使用更少的卷積核。

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

最終網(wǎng)絡(luò)的識(shí)別準(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ò),對(duì)網(wǎng)絡(luò)進(jìn)行了如下的改動(dòng):

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

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

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

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

※ 結(jié)論

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

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

參考資料

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

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計(jì)資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫(xiě)文章/發(fā)需求
立即登錄

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