
01引言

1.1 大賽介紹
全國大學生“恩智浦”杯智能汽車競賽是以“立足培養、重在參與、鼓勵 探索、追求卓越”為宗旨,鼓勵創新的一項科技競賽活動,今年首次新增了電 磁 AI 組別,希望通過神經網路學習甚至超越傳統的 PID 控制方法,
在這份報告中,我們小組對小車設計制作整體思路、機械、電路、電控、 神經網路幾個方面進行了詳細的介紹,整體思路中主要概括了專案構建時的主 要核心思想,機械部分中主要闡述了小車的機械部分中主要闡述了小車的結構 設計,包含各部件的安裝位置以及對車模的保護措施,電路部分主要闡述了小 車的電路結構設計為軟體停工穩定輸入與輸出環境減少外界干擾,電控部分主 要闡述了如何采用 PID 進行小車控制,包含舵機控制,差速控制,電機控制等, 神經網路部分主要闡述了如何采用神經網路學習小車控制方法,包含資料集制 作,電感位置分布,網路結構創新等,
雖說看似就是一簡單巡線的專案,但是隨著深入地進行研究,我們發現在 此之上可以用非常多方法大幅度提升巡線效果,比如可以通過無線串口進行 PID 遠程調參,通過神經網路去自動地尋找較好的控制方法,通過陀螺儀和編碼器 去記錄整個賽道等等,隨著一步步地迭代,我們的工程越來越大,完成的功能 也越來越多,自然而然速度也在一點一滴地提升,
1.2 整體方案設計
本節主要簡要地介紹智能車系統總體設計思路,在后面的章節中將整個系 統分為機械結構,硬體電路設計,傳統 PID 設計,神經網路設計等四部分對智 能車控制系統進行深入的介紹和分析,
根據第十五屆智能車競賽規則,AI 電磁組比賽是在 PVC 賽道上進行,賽道 采用黑色邊線引導,選手制作的車模完成賽道運行一周,車輛運行時間是從車 模沖過起跑線開始,到最后車模回到起跑線為止,賽道中存在的元素包括直線 道路、曲線彎道、十字交叉路口、環島(可不進入),
根據競賽規則相關規定及以上任務要求,智能車系統采用大賽組委會統一 提供的 C 型車模,以恩智浦公司生產的 MIMXRT1064DVL6A 作為核心控制器,在 IAR 開發環境中進行軟體開發,智能車系統檢測電磁場信號為基礎,通過單片機 處理信號實作對車體控制,通過編碼器測速模塊來檢測車速,并采用 RT1064 的 輸入捕捉功能進行脈沖計數計算速度和路程;電機轉速控制采用 PID 控制,通 過 PWM 控制驅動電路調整電機的轉速,完成智能車速度的倍訓控制,
根據以上系統方案設計,賽車總共包括一下幾個模塊:
1.RT1064 單片機最小系統模塊
2.電源模塊
3.電機驅動模塊
4.傳感器模塊
5. 無線串口模塊
6.編碼器測速模塊
7.陀螺儀模塊
8.停車線檢測模塊
9.人機互動模塊

▲ 圖1.2-1 系統框圖
02機械設計

機械設計中,我們需要考慮多電感的保護,轉向機構設計,電路板放置, 車身強度等問題,
2.1 智能汽車車體機械建模
此次競賽選用的是東莞市博思電子數碼科技有限公司生產的智能車競賽專 用模型車(C 型模型車),配套的電機型號為 RS-380,舵機的型號為 FUTABA3010, 智能車的外形大致如下:

▲ 車模照片
2.2 轉向機構設計
在除錯程序中,我們發現原有的轉向機構中舵機的轉角與前輪的轉角不為線 性關系,故嘗試更改前輪轉向機構為線性控制,但導致前輪轉向時的回應時間 增長,轉彎不及時,
最終我們使用了自制的舵機固定板與逐飛科技智能車基地的舵機轉向套裝,如下圖所示,

▲ 舵機固定板與舵機轉向套裝
最終雖然控制仍不為線性,但做到了前輪轉向的快速回應,轉向機構整體如 下圖,

▲ 轉向機構
2.3 電路板放置
對于電路板排布,我們經過兩次迭代,最終選擇采用如下圖所示的碳板作為 整體的支撐結構,使用 4 根銅柱與車模底盤連接,保證強度的同時,也能盡可 能地讓車身更輕,從而有更為穩定的結構,且易于加裝/拆卸長前瞻,

▲ 自制支撐結構
為了維持多個電感與車模之間固定的相對位置,我們將所有裝有采集電感傳 感器的電路板都安裝在碳板上,同時為了操作、拆卸更加方便,我們將其他電 路板也固定在了碳板之上,

▲ 碳板固定
2.4 智能汽車傳感器的安裝
車模中的傳感器包括有:速度傳感器,車模姿態傳感器(陀螺儀、加速度計), 霍爾傳感器以及采集電感傳感器,下面分別介紹這些傳感器的安裝,
2.4.1 速度傳感器的安裝
速度傳感器使用了龍邱 512 線 mini 編碼器,固定于車模的編碼器位置上,
2.4.2 姿態傳感器的安裝
車模使用了 HWT101 旋轉角姿態傳感器,固定于電路板上,俯視位置處于車 模的中心處,保證檢測資料的可靠性,
2.4.3 霍爾傳感器的安裝
車模使用了自制的霍爾傳感器模塊對終點線進行檢測,其安裝位置于車模最 前方的底板之上,使用熱熔膠固定,如下圖所示,

▲ 霍爾模塊
2.4.4 采集電感傳感器的安裝
車模共使用了 14 個采集電感傳感器,其中 11 個布置于電路板上,另有 3 個作備用,11 個位于電路板上的電感分 3 排擺放,第一排 7 個電感,第二排 2 個電感,第三批 2 個電感,為保護電感不受撞擊損傷,為每個電感都加裝了保護 殼,如下圖所示,

▲ 電感安裝
2.5車身強度
為了提升車身強度,除了支撐電路板的碳板以外,我們還在車模底部添加了 一塊碳板,從而提升了車模的強度,為了避免碰撞與剮蹭,我們在車模的正前 面加裝了防撞條,
2.6 輪胎處理
使用輪胎軟化劑浸泡之后打磨并用硅橡膠粘合輪胎與輪轂,
電路設計

從最初進行硬體電路設計時我們就既定了系統的設計目標:可靠、高效、簡 潔,在整個系統設計程序中嚴格按照規范進行,
可靠性是系統設計的第一要求, 我們對電路設計的所有環節都進行了電磁 兼容性設計,做好各部分的接地、屏蔽、濾波等作業,將高速數字電路與模擬 電路分開,考慮到走線問題,設計為 4 個部分得 PCB 電路板,使本系統作業的 可靠性達到了設計要求,
3.1 電源管理模塊
在考慮離比賽開始時間短的情況下,采用 RT1064 最小核心板,加快整個項 目的進度,在保證電壓穩定驅動電流足夠紋波小盡可能沒有,用一片 IDO 芯片 LP38692MP-5.0 單獨給最小核心板供電,

▲ 核心板供電原理圖
一片 IDO 芯片 LP38692MP-5.0 給編碼器、陀螺儀、無線串口、主板上的磁傳 感器供電,一片 IDO 芯片 LP38692MP-3.3 給 OLED 液晶屏,起跑線檢測模塊供電, 一片 IDO 芯片 LP38692MP5.0 給外載磁傳感器供電,通過引腳(圖 3.1-2 中 PW_EN) 拉高給使能信號控制外設供電,保證核心板正常啟動,

▲ 外設供電原理圖
3.2 電機驅動模塊
電機驅動使用芯片 BTN8982TA,搭建全橋驅動電路,該芯片正常輸出電流可 以達到 50A,同時 BTN8982 的輸出阻抗正常情況為 9 毫歐左右,阻抗越小,芯片 的發熱量越小,功耗也就越小,從另一個角度看,該芯片內部集成了 H 橋驅動 器以及由 MOS 管組成的半 H 橋電路,設計簡單,布局方便,

▲ 電機驅動原理圖
3.3 舵機供電
比賽提供的舵機為 FUTABA3010,該舵機作業電壓 4.0V-6.0V,作業時所需電 流為 175mA,為了保證舵機正常作業且不影響其他電路作業,為此我們采用線性 電源 LT1764 給舵機供電,該芯片輸出電流可達 3A,此時壓差為 340mV,輸入電壓范圍廣:2.7V-20V,輸出電壓范圍為 1.21V-20V,輸出電壓與外部配比電阻有 關,

▲ 舵機驅動原理圖
輸出電壓計算公式:
V
o
u
t
=
1.21
V
(
1
+
R
6
R
7
)
+
I
A
D
J
?
R
6
V_{out} = 1.21V\left( {1 + {{R_6 } \over {R_7 }}} \right) + I_{ADJ} \cdot R6
Vout?=1.21V(1+R7?R6??)+IADJ??R6
其中IADJ = 3uA,與其他變數有數量級差別,故忽略不計,所以此時計算出VOUT = 5.957V,
3.4磁傳感器模塊
磁傳感器是電磁組小車最重要的模塊之一,根據變化的磁場信號作出靈敏的 檢測,車體在賽道上位置判斷以及之后得控制起著至關重要的作用,本系統根 據 LC 諧振的原理,選取 10mH 電感和 6.8nF 電容作為 LC 諧振電路,產生感應 電流,再通過濾波、放大、檢波,然后將結果送入單片機 AD 進行相應的處理, 以判斷賽道當前資訊,后級放大電路原理圖所示,

▲ 采集級放大電路原理圖
3.5 無線串口模塊
使用逐飛的無線 USB/無線轉串口模塊套件,實作實時主機與核心板通信, 可以傳回神經網路需要的訓練資料,同時也可以實作遙控車無線更改引數等操 作,大大節約了時間,
3.6 編碼器測驗模塊
本小車使用龍邱智能科技的 512 線 mini 型編碼器進行小車的測速,作業電 壓在 3.3V- 5V,處理器通過讀取編碼器脈沖數來實作小車速度的測, 通過讀取 編碼器旋轉方向腳的高低電平來檢測電機的正反轉,
3.7 陀螺儀模塊
采用 HWT101 旋轉角姿態傳感器,內部集成姿態解算器,配合動態卡爾曼濾 波演算法,能準確的得出當前姿態,姿態測量精度靜態 0.05 度,動態 0.1 度, 穩定性極高,用于神經網路的記憶之中,
3.8 停車模塊選型
起跑線處布有磁鐵表面磁場強度為 3000-4000 G,針對磁場強度和車速兩個 條件下不斷嘗試不同霍爾元件型號如 SM351LT,SS41F,DRV5055,HAL145 等, 在最后根據車速和檢測準確率我們選擇 HAL145,這是一種全極性霍爾開關,當 霍爾開關在磁鐵上方時, 霍爾開關輸出低電平,單片機檢測到低電平引發單片 機中斷,單個霍爾開關的 電路原理圖如圖 3.2.6 所示,

▲ 霍爾開關原理圖
3.9 人機互動模塊
為了方便除錯,本車有無線串口模塊,有效進行運行引數之間的傳送,除此 之外,還設定了鍵盤、OLED 液晶顯示屏,以方便控制引數的修改,便捷的智能 車的除錯,
04傳統PID控制

傳統 PID 控制部分,我們需要考慮基于電感電壓的資料,控制舵機轉向和電 機轉速,另外,我們加入了陀螺儀和編碼器對賽道進行建圖,以期獲得無限長 前瞻,
4.1 舵機轉向控制
舵機控制中,我們的目標是通過改變舵機轉向,讓車子盡量地保持在賽道中 間,我們希望車身在賽道中間,即誤差 Error 盡量地在 0 附近,當 Error<0 時, 說明車身偏右,需要舵機向左打角,同理當 Error>0 時,說明車身偏左,需要 舵機向右打角,
4.1.1 舵機轉向偏差計算方案
4.1.1.1 差值法
差值法,顧名思義,通過左右電感的差值作為偏差對小車進行控制,符號判 斷方向,大小作為控制量,這是我們最開始采用的控制小車的策略,這樣的控 制策略能夠在低速情況下滿足控制要求,但是極不穩定,容易出界,經過資料 采集和可視化,我們發現這種策略所計算出來偏差并不是單調的,而是隨著原 理賽道中線的距離增大先增,到達峰值,再遞減,這也解釋了當其遠離賽道中 線后其控制量不足,導致車身出界的情況,
4.1.1.2 三電感控制法
在我們發現偏差不單調后,我們就想找一種控制策略來解決這個問題,我們 發現,差值法判斷方向是比較準確的,所以我們保留了其方向控制策略,在兩 個電感中間加了中間電感,以中間電感與其設定的最大值的差值作為偏差,這 種方案較好的解決了偏差不單調的問題,在前瞻比較長的情況下控制效果也很 不錯,但后面我們發現神經網路不能很好的學習長前瞻所識訓的資料的時候, 我們改用短前瞻進行資料收錄,這時我們發現這種策略在轉大彎時候效果不太 好,回應太慢跟不上,由于信號線的鋪設問題,不同的直道,中間電感所能測量的最大幅度也不同,導致在 Error 在直道上不一定為 0,會產生舵機的震蕩, 無法解決,因此也放棄這種方案,
4.1.1.3 歸一化法
在我們發現三電感方案不能滿足段前瞻控制需求后,我們和往屆學長進行溝 通交流,他們提出歸一化法方案,這種方案具體是用左右電感的差值比上左右 電感的和,我們嘗試了一段時間后,這種方案確實是有一定的效果,控制作用 在大彎的時候確實是得到了增強,解決了三電感所存在的問題,但在我們加速 后,發現它和差值法存在同樣的問題,計算出來的偏差不單調,所以在連續過 彎切邊的時候,誤差值會變小,非常容易跑飛出去,因此我們不得不尋找下一 種控制方案,
4.1.1.4 比值法
除了上面的方案,我們還嘗試了各種各樣的方案:比如放置斜電感、多個中 間電感模擬攝像頭等等,最終我們選取了下面這種方案,
構建位置誤差公式:
E
r
r
o
r
=
L
?
R
L
+
R
Error = {{\sqrt L - \sqrt R } \over {L + R}}
Error=L+RL
??R
??
L:左邊電感電壓值 R:右邊電感電壓值
這種計算式其實也存在不單調的情況,但單調的區間很大,在賽道的約束條 件下完全滿足要求,并且其對轉彎比較靈敏,有效的解決了過彎的難題,
4.1.2 舵機轉向控制策略
4.1.2.1 傳統控制策略
此部分中,我們只采用了 PD 控制,因為車輛電感值在實時更新,需要進行 實時轉向,因此不需要使用 I 控制,PD 控制中,P 為實時修改狀態,而 D 是為 了修補 P 實時性的不足,達到提前的作用,另外,為了提升大彎轉向的快速性 能和直道的穩定性能,我們通過 Error,劃分了兩組 PD,當 Error 較小時,認 為是在直道,采用較小的 PD 保證穩定性,防止震蕩,當 Error 較大時,認為是在彎道,采用較大的 PD 保證快速轉向,

▲ 舵機控制模型
4.1.2.2 控制策略探索
運用傳統控制策略進行控制的時候,我們發現引數調節十分麻煩,而且適應 性不強,因此我們就想有沒有一種方案能不能在一定區間自動調整 PID 引數去 適應不同的條件,我們查閱了相關文獻,幾乎都指向了模糊 PID 控制這一方向, 帶著探索的心,我們去了解了模糊 PID 的相關理論,并試著寫了一套模糊 PID 演算法,發現這套演算法調參難度并不亞于傳統的 PID,但是適應性的確強了不少, 但這與我們想要簡化調參程序的初衷并不一致,所以沒有更深入的去探索,后 面根據我們對問題的分析,我們發現舵機控制與當前偏差、偏差的變化率息息 相關,我們根據這兩者的狀態繪制了以下程式框圖并實作:

▲ 模糊控制PID部分流程圖
我們僅僅需要確定每次調整步長,我們就可以是 PID 在一個范圍內進行變 動,滿足不同情況下的要求,
4.1.2.3 控制策略展望
為了簡化調參和增強適應性,在上一小節我們對控制策略進行了探索,但是還是逃不掉反復調參的程序,這個程序枯燥乏味又不得不做,我們就想能不能 有一套系統能夠在調好一套引數的情況下,通過獎勵——懲罰機制使其不斷提 速,引數不斷適應速度的改變呢?我們就想用一個攝像頭來捕捉車子在賽道上 的狀態資訊,建立一套獎勵懲罰機制,當車子偏離賽道中央過大,說明引數不 太好,給與一定的懲罰,反之亦反之,然后車子緩慢的提速,引數不斷適應車 速達到自適應的效果,
4.2 電機控制
電機控制中,我們使用 PID 控制電機的速度,另外,還需要由轉向角度控制 電機差速,從而讓車子更好過彎,
4.2.1 電機速度
電機轉速控制中,我們不斷地讀取編碼器回傳的實際轉速,與期望轉速作差 得到 Error,我們希望轉速能夠快速跟隨,即希望 Error 能夠盡快地到 0,采用 最原始的位置式 PID 控制,加上積分抗飽和演算法基本滿足控制要求,

▲ 電機速度控制模型
4.2.2 電機差速
電機差速的和舵機轉向相關,基于阿克曼轉向模型,當舵機需要轉向更大的 角度的時候,差速的值應該越大,以輔助車身更好的入彎,另外,我們發現車 身出界的情況大多數是在入彎的程序中,在彎道部分一般是不會出的,為了實 現彎道加速的功能,我們也讓其與舵機轉向變化率相關,當轉向變化率較大時, 即入彎程序中,速度降低,而當轉向變化率逐漸變小時,即車身穩定后,則可 以提高速度,因此,我們的速度是由需要轉彎的角度和轉彎角度的變化率二者 共同決定,
具體的計算流程如下圖:

▲ 電機差速控制流程圖
由圖中可以看到,當突然出現需要打一個比較大的角度的時候,速度會減下來,與此同時,由于突然產生了如此大的角度,方向變化率也會變大,從而讓 小車順利減速過彎,但是在過彎的途中,雖然角度仍然是比較大的值,可是方 向變化率在減小,從而可以讓整體速度進行提升,最終達到過彎加速的效果,
4.3 記憶方案
通常我們使用電感等傳感器實時檢測到的資訊作為判斷依據來控制車模的 轉向和加減速,在限制前瞻長度的情況下這樣的實時判斷相比于長前瞻就有嚴 重的滯后性,我們嘗試不使用或少使用實時判斷的資訊進行控制,
我們先使車模在平穩狀態下運行一段賽道,記錄每個控制周期的陀螺儀 z 軸 轉角與編碼器數值,通過這些資訊對賽道進行解算,將賽道元素分為三類:直 道、左轉、右轉,可以得到一個簡化版的賽道陣列(包含按順序排列的賽道的 每個元素以及對應的直道長度或彎道角度以及彎道半徑),

▲ 某段賽道的結算陣列及其影像
發現效果良好,嘗試在第二圈時使用第一次運行時記錄下的解算后的賽道信 息作為判斷依據通過如下步驟控制車模運行(使用速度 PID 環作為內環、位置 PID 環作為外環對車模進行控制):
①進入直道后使用速度影像為拋物線的加速方式,加到設定的直道速度后勻 速運行;
②在直道中根據編碼器的實時讀數計算減速至設定的彎道速度所需的距離與車模在當前直道元素中已行進的距離,當減速所需的距離與車模進入下一賽 道元素的剩余距離相差很小時,使車模進行拋物線減速,在進入下一賽道元素 前就能減至設定的彎道速度;
③在彎道中根據彎道的半徑控制前輪的轉角與后輪的差速,并使車模勻速通 過彎道;
④重復①~③步驟;
⑤車模檢測到終點線后停止運行, 但由于備賽時間較短,未能完整實作上述控制方案, 我們又嘗試使用車模第一次運行賽道記憶的資訊提升直道速度,只根據距離資訊來進行入彎時的提前減速,不過,我們發現直接加速會存在問題,車子變得非常不好控制,很容易沖出賽道,因此后面我們只是略微增大了一些速度, 但是增加電機的 I 項,從而讓整體的速度進行提高,
05神經網路控制

神經網路控制部分,我們希望送入神經網路電感值,讓神經網路輸出舵機轉 向值,
5.1 資料收集
資料收集部分,我們分別采用了長短前瞻的電感值電壓輸入作為 PID 控制, 進行資料的采集,采集程序中,我們使用無線串口進行上位機和 MCU 通信,通 過 python 寫上位機,其中 pyserial 進行串口資料的決議,pygame 讀取鍵盤命 令從而達到小車控制的功能,另外,我們采用了 Matlabplotlib 的包進行了多 種情況的可視化,便于進行分析,
另外,我們對車子進行了遠程控制,通過串口,我們可以在上位機中實作控 制車輛啟停,車輛加減速,車輛拐彎等功能,從而更好地收集資料,與此同時, 我們還通過遠程串口,進行了 PID 引數的調節,從而大大方便了 PID 的調參過 程,
經過整理,我們發現這個環境中徹底驗證了"Garbage in, Garbage out" 的說法,即資料好則神經網路效果好,資料不好,則神經網路效果很差,我們 分別采用了長前瞻和短前瞻作為 PID 資料源進行車輛控制,然后在長前瞻 PID 中收集了長前瞻和短前瞻的電感資料,在短前瞻 PID 中,收集短前瞻的電感數 據,對這三種資料進行學習,實驗發現,當長前瞻跑 PID 時,長前瞻的電感送 入神經網路中擬合的很好,但是短前瞻電感值送入神經網路中擬合卻不行,短 前瞻跑 PID 時,短前瞻電感值送入神經網路擬合很好,因此實驗結論是:基于 某幾個電感進行 PID 控制,則采集對應電感值作為神經網路輸入,神經網路的 擬合性能很好,
關于資料集制作,為了更好地收集資料,我們在上位機中遠程控制車輛是否 發送資料,從而可以有針對性地在各個環境中進行資料制作,資料清洗方面, 因為串口發送的頻率過高,存在了大量的資料是重復的,因此我們針對性地對 相鄰兩幀之間電感資料差距不算很大的進行了洗掉,另外,為了適應不同的場 地,我們還進行了資料歸一化的操作,每次啟動車子之前,我們平移我們的車子,收取賽道中最大的電感值,然后所有的電感除以對應最大電感值從而獲取 歸一化后的電感值,
在資料采集的程序中我們發現了訓練出來的模型效果不是很好,經過可視化 之后,發現靠近舵機的電感資料不穩定,即使開啟了硬體平均也有很大的抖動, 這對于訓練必然是不好的,

▲ 某電感濾波前的影像
在觀察到這樣的現象之后,我們決定加入軟體濾波,對于這種資料抖動較大 的情況,最簡單的濾波公式莫過于卡爾曼濾波,對于單片機性能的要求也最低, 在電感的采集程序中,只需要貯存上一個電感資料既可,下圖為濾波之后的效 果,

▲ 某電感濾波后的影像
5.2 電感排布
電感排布部分,我們通過隨機增加擾動的方式,尋找最為重要的電感,最終確定了 11 個電感排布的方案, 假設有 3 個電感分別放置在車前左中右位置,前面的系數分別為 0.8,1.2, 0.8,則可列電感控制舵機的方程:
0.8 × L e f t + 1.2 × M i d d l e + 0.8 × R i g h t = O u t p u t 0.8 \times Left + 1.2 \times Middle + 0.8 \times Right = Output 0.8×Left+1.2×Middle+0.8×Right=Output
但是實際上,我們并不知道各個電感前的系數,因此假設為 A,B,C,直觀 地,我們可以認為:某個電感前系數較大,則某個電感更為重要,因為他的對 舵機的影響更大,雖然在神經網路中,每個電感與舵機輸出并不是線性關系, 但是我們不妨假設:不同電感變化同一個幅度時,哪個電感能導致舵機變化越 大,哪個電感就是更為重要的電感,基于此假設,我們完成了電感排布的確定,

▲ 電感分布確定流程圖
具體步驟如下:每次我們隨機選擇放置電感排布,通過神經網路收取資料進 行訓練得到一個網路模型,然后,我們對收集到的資料添加隨機擾動,從-0.1~ 0.1,分為 10 個范圍,即-0.1~-0.08,-0.08~-0.06…0.06~0.1,
得到隨機擾動的資料集之后,我們把原始資料的輸出和擾動資料的輸出(都 使用同一個網路)做差得到絕對值,如果某個電感的絕對值較大,則說明此電 感輕微擾動對網路輸出影響大,是比較重要的電感,
基于此套方法,我們確定了 11 個電感的排布位置,下為某組資料擾動之后 的誤差分布圖,

▲ 電感誤差分布
以第一列圖片為例,第一列對應的是第一排最左邊的電感,從上到下,分別 對應了施加擾動的范圍為-0.1~-0.08,-0.08~-0.06…0.06~0.08, 0.08~0.1,直方圖代表了施加擾動前后輸出的差的絕對值的分布,從圖中我們 可以看到在中間部分的偏差靠近 0,而上下偏差靠近 1,符合邏輯,另外,橫向 對比,我們可以看到,第 1,2,3,4,5,8,9 列的影響相對比較大,他們對 應了第一排左中右(1,2,3),第二排左右(4,5),第一排豎電感(8,9),
5.3 網路結構
我們進行了大量的網路結構測驗,由于 NXP 芯片所限,基本上只能夠使用全 連接層,不過相比于直接送入電感值,我們將電感值和歷史 10 次網路輸出值(舵 機期望值)共同送入網路,從而相同網路結構(只有輸入層不同)訓練結果的 loss 從 0.04 降到了 0.02,網路跟蹤的效果也變得更好,
另外,我們也發現,基本上的全連接層已經足夠訓練網路,網路的效果也是滿足需求的,基于此我們盡可能地縮小網路大小,讓速度盡快,最終的網路結 果為:
網路結果輸入為 Nx21x1 的資料,(11 個電感和前 10 幀的舵機控制角度), 分別經過 Dense,BatchNormal,Dropout 等的操作,最終生成一個 1 維度的舵 機值,即為目標輸出,網路結構圖如下,

▲ 網路結構圖
06結論

電路部分嘗試過為軟體增加電機的電流環,但由于 AI 電磁要求的磁傳感器 過多,芯片 ADC 引腳比較緊張,最后沒有落地,鑒于 AI 電磁本身的特殊性—— 對磁傳感器位置的嚴要求,電路部分將用于 AI 的磁傳感器分割到單獨 PCB 板上, 確保位置固定,車與車差異小,演算法可以移植,與機械部分一同做好電感保護,
機械方面,使用碳板制作的頂棚搭載多個電感,增強了電感數值的可靠性 電控方向,我們采用陀螺儀和編碼器進行了全地圖的繪制,然后針對直道進行了二次加速,
神經網路方向,我們將歷史的舵機控制值送入神經網路,大大提升了網路的 效果,
從機械到電路再到電控和神經網路,我們搭建了一個完整的車子,對車子進 行穩定性測驗,演算法迭代優化,我們才算是真正地完成了一個專案,小組成員 每個人都盡著自己最大的努力,不加班不快樂,沒成果沒休息逐漸成為我們的 常態,這一次的磨礪,所有的隊員都有了非常大的進步,與此同時,我們也收 獲了一份友誼,另外,感謝學校對我們的支持,在疫情期間仍然全力支持我們, 感謝組委會提供的參賽機會,
07參考文獻

[1] 卓晴,黃開勝,邵貝貝等,《學做智能車——挑戰“飛思卡爾”杯》[c].北京:北京 航空航天大學出版社,2007.
[2] 譚浩強,C 語言程式設計[M],北京:清華大學出版社,2005.
[3] 王宜杯,嵌入式系統原理與實踐:ARM Cortex-M4 Kinetis 微處理器,北京:電子工業 出版社,2012.
[4] 陶永樂,新型 PID 控制及其應用(第二版),北京:機械工業出版社 [5] 李發海,王巖等,電機與拖動基礎,北京:清華大學出版社
[6] 胡壽松,自動控制原理(第六版),北京:科學出版社
00除錯軟體

1.軟體開發平臺: KEIL

▲ 軟體開發平臺 KEIL
2.神經網路 h5 檔案轉換工具:

3. 匿名科創地面站

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/240054.html
標籤:其他
