盡著自己最大的努力,不加班不快樂(lè)
1.1 大賽介紹
全國(guó)大學(xué)生智能汽車(chē)競(jìng)賽是以“立足培養(yǎng)、重在參與、鼓勵(lì) 探索、追求卓越”為宗旨,鼓勵(lì)創(chuàng)新的一項(xiàng)科技競(jìng)賽活動(dòng)。今年首次新增了電 磁 AI 組別,希望通過(guò)神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)甚至超越傳統(tǒng)的 PID 控制方法。
在這份報(bào)告中,我們小組對(duì)小車(chē)設(shè)計(jì)制作整體思路、機(jī)械、電路、電控、 神經(jīng)網(wǎng)絡(luò)幾個(gè)方面進(jìn)行了詳細(xì)的介紹。
整體思路中主要概括了項(xiàng)目構(gòu)建時(shí)的主 要核心思想,機(jī)械部分中主要闡述了小車(chē)的機(jī)械部分中主要闡述了小車(chē)的結(jié)構(gòu) 設(shè)計(jì),包含各部件的安裝位置以及對(duì)車(chē)模的保護(hù)措施,電路部分主要闡述了小 車(chē)的電路結(jié)構(gòu)設(shè)計(jì)為軟件停工穩(wěn)定輸入與輸出環(huán)境減少外界干擾。
電控部分主 要闡述了如何采用 PID 進(jìn)行小車(chē)控制,包含舵機(jī)控制,差速控制,電機(jī)控制等。
神經(jīng)網(wǎng)絡(luò)部分主要闡述了如何采用神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)小車(chē)控制方法,包含數(shù)據(jù)集制 作,電感位置分布,網(wǎng)絡(luò)結(jié)構(gòu)創(chuàng)新等。
雖說(shuō)看似就是一簡(jiǎn)單巡線(xiàn)的項(xiàng)目,但是隨著深入地進(jìn)行研究,我們發(fā)現(xiàn)在 此之上可以用非常多方法大幅度提升巡線(xiàn)效果,比如可以通過(guò)無(wú)線(xiàn)串口進(jìn)行 PID 遠(yuǎn)程調(diào)參,通過(guò)神經(jīng)網(wǎng)絡(luò)去自動(dòng)地尋找較好的控制方法,通過(guò)陀螺儀和編碼器 去記錄整個(gè)賽道等等。
隨著一步步地迭代,我們的工程越來(lái)越大,完成的功能 也越來(lái)越多,自然而然速度也在一點(diǎn)一滴地提升。
1.2 整體方案設(shè)計(jì)
本節(jié)主要簡(jiǎn)要地介紹智能車(chē)系統(tǒng)總體設(shè)計(jì)思路,在后面的章節(jié)中將整個(gè)系 統(tǒng)分為機(jī)械結(jié)構(gòu),硬件電路設(shè)計(jì),傳統(tǒng) PID 設(shè)計(jì),神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)等四部分對(duì)智 能車(chē)控制系統(tǒng)進(jìn)行深入的介紹和分析。
根據(jù)第十五屆智能車(chē)競(jìng)賽規(guī)則,AI 電磁組比賽是在 PVC 賽道上進(jìn)行,賽道 采用黑色邊線(xiàn)引導(dǎo)。選手制作的車(chē)模完成賽道運(yùn)行一周。車(chē)輛運(yùn)行時(shí)間是從車(chē) 模沖過(guò)起跑線(xiàn)開(kāi)始,到最后車(chē)?;氐狡鹋芫€(xiàn)為止。賽道中存在的元素包括直線(xiàn) 道路、曲線(xiàn)彎道、十字交叉路口、環(huán)島(可不進(jìn)入)。
根據(jù)競(jìng)賽規(guī)則相關(guān)規(guī)定及以上任務(wù)要求,智能車(chē)系統(tǒng)采用大賽組委會(huì)統(tǒng)一 提供的 C 型車(chē)模,以恩智浦公司生產(chǎn)的 MIMXRT1064DVL6A 作為核心控制器,在 IAR 開(kāi)發(fā)環(huán)境中進(jìn)行軟件開(kāi)發(fā)。智能車(chē)系統(tǒng)檢測(cè)電磁場(chǎng)信號(hào)為基礎(chǔ),通過(guò)單片機(jī) 處理信號(hào)實(shí)現(xiàn)對(duì)車(chē)體控制。通過(guò)編碼器測(cè)速模塊來(lái)檢測(cè)車(chē)速,并采用 RT1064 的 輸入捕捉功能進(jìn)行脈沖計(jì)數(shù)計(jì)算速度和路程;電機(jī)轉(zhuǎn)速控制采用 PID 控制,通 過(guò) PWM 控制驅(qū)動(dòng)電路調(diào)整電機(jī)的轉(zhuǎn)速,完成智能車(chē)速度的閉環(huán)控制。
根據(jù)以上系統(tǒng)方案設(shè)計(jì),賽車(chē)總共包括一下幾個(gè)模塊:
1.RT1064 單片機(jī)最小系統(tǒng)模塊;2.電源模塊; 3.電機(jī)驅(qū)動(dòng)模塊 ;4.傳感器模塊; 5. 無(wú)線(xiàn)串口模塊; 6.編碼器測(cè)速模塊; 7.陀螺儀模塊; 8.停車(chē)線(xiàn)檢測(cè)模塊; 9.人機(jī)交互模塊。
▲ 圖1.2-1 系統(tǒng)框圖
機(jī)械設(shè)計(jì)中,我們需要考慮多電感的保護(hù),轉(zhuǎn)向機(jī)構(gòu)設(shè)計(jì),電路板放置, 車(chē)身強(qiáng)度等問(wèn)題。
2.1 智能汽車(chē)車(chē)體機(jī)械建模
此次競(jìng)賽選用的是東莞市博思電子數(shù)碼科技有限公司生產(chǎn)的智能車(chē)競(jìng)賽專(zhuān) 用模型車(chē)(C 型模型車(chē)),配套的電機(jī)型號(hào)為 RS-380,舵機(jī)的型號(hào)為 FUTABA3010。智能車(chē)的外形大致如下:
▲ 車(chē)模照片
2.2 轉(zhuǎn)向機(jī)構(gòu)設(shè)計(jì)
在調(diào)試過(guò)程中,我們發(fā)現(xiàn)原有的轉(zhuǎn)向機(jī)構(gòu)中舵機(jī)的轉(zhuǎn)角與前輪的轉(zhuǎn)角不為線(xiàn) 性關(guān)系,故嘗試更改前輪轉(zhuǎn)向機(jī)構(gòu)為線(xiàn)性控制,但導(dǎo)致前輪轉(zhuǎn)向時(shí)的響應(yīng)時(shí)間 增長(zhǎng),轉(zhuǎn)彎不及時(shí)。
最終我們使用了自制的舵機(jī)固定板與舵機(jī)轉(zhuǎn)向套裝,如下圖所示。
▲ 舵機(jī)固定板與舵機(jī)轉(zhuǎn)向套裝
最終雖然控制仍不為線(xiàn)性,但做到了前輪轉(zhuǎn)向的快速響應(yīng),轉(zhuǎn)向機(jī)構(gòu)整體如 下圖。
▲ 轉(zhuǎn)向機(jī)構(gòu)
2.3 電路板放置
對(duì)于電路板排布,我們經(jīng)過(guò)兩次迭代,最終選擇采用如下圖所示的碳板作為 整體的支撐結(jié)構(gòu),使用 4 根銅柱與車(chē)模底盤(pán)連接,保證強(qiáng)度的同時(shí),也能盡可 能地讓車(chē)身更輕,從而有更為穩(wěn)定的結(jié)構(gòu),且易于加裝/拆卸長(zhǎng)前瞻。
▲ 自制支撐結(jié)構(gòu)
為了維持多個(gè)電感與車(chē)模之間固定的相對(duì)位置,我們將所有裝有采集電感傳 感器的電路板都安裝在碳板上,同時(shí)為了操作、拆卸更加方便,我們將其他電 路板也固定在了碳板之上。
▲ 碳板固定
2.4 智能汽車(chē)傳感器的安裝
車(chē)模中的傳感器包括有:速度傳感器,車(chē)模姿態(tài)傳感器(陀螺儀、加速度計(jì)), 霍爾傳感器以及采集電感傳感器。下面分別介紹這些傳感器的安裝。
2.4.1 速度傳感器的安裝
速度傳感器使用了龍邱 512 線(xiàn) mini 編碼器,固定于車(chē)模的編碼器位置上。
2.4.2 姿態(tài)傳感器的安裝
車(chē)模使用了 HWT101 旋轉(zhuǎn)角姿態(tài)傳感器,固定于電路板上,俯視位置處于車(chē) 模的中心處,保證檢測(cè)數(shù)據(jù)的可靠性。
2.4.3 霍爾傳感器的安裝
車(chē)模使用了自制的霍爾傳感器模塊對(duì)終點(diǎn)線(xiàn)進(jìn)行檢測(cè),其安裝位置于車(chē)模最 前方的底板之上,使用熱熔膠固定,如下圖所示。
▲ 霍爾模塊
2.4.4 采集電感傳感器的安裝
車(chē)模共使用了 14 個(gè)采集電感傳感器,其中 11 個(gè)布置于電路板上,另有 3 個(gè)作備用。11 個(gè)位于電路板上的電感分 3 排擺放,第一排 7 個(gè)電感,第二排 2 個(gè)電感,第三批 2 個(gè)電感。為保護(hù)電感不受撞擊損傷,為每個(gè)電感都加裝了保護(hù) 殼,如下圖所示。
▲ 電感安裝
2.5車(chē)身強(qiáng)度
為了提升車(chē)身強(qiáng)度,除了支撐電路板的碳板以外,我們還在車(chē)模底部添加了 一塊碳板,從而提升了車(chē)模的強(qiáng)度。為了避免碰撞與剮蹭,我們?cè)谲?chē)模的正前 面加裝了防撞條。
2.6 輪胎處理
使用輪胎軟化劑浸泡之后打磨并用硅橡膠粘合輪胎與輪轂。
從最初進(jìn)行硬件電路設(shè)計(jì)時(shí)我們就既定了系統(tǒng)的設(shè)計(jì)目標(biāo):可靠、高效、簡(jiǎn) 潔,在整個(gè)系統(tǒng)設(shè)計(jì)過(guò)程中嚴(yán)格按照規(guī)范進(jìn)行。
可靠性是系統(tǒng)設(shè)計(jì)的第一要求, 我們對(duì)電路設(shè)計(jì)的所有環(huán)節(jié)都進(jìn)行了電磁 兼容性設(shè)計(jì),做好各部分的接地、屏蔽、濾波等工作,將高速數(shù)字電路與模擬 電路分開(kāi),考慮到走線(xiàn)問(wèn)題,設(shè)計(jì)為 4 個(gè)部分得 PCB 電路板,使本系統(tǒng)工作的 可靠性達(dá)到了設(shè)計(jì)要求。
3.1 電源管理模塊
在考慮離比賽開(kāi)始時(shí)間短的情況下,采用 RT1064 最小核心板,加快整個(gè)項(xiàng) 目的進(jìn)度。在保證電壓穩(wěn)定驅(qū)動(dòng)電流足夠紋波小盡可能沒(méi)有,用一片 LDO 芯片 LP38692MP-5.0 單獨(dú)給最小核心板供電。
▲ 核心板供電原理圖
一片 IDO 芯片 LP38692MP-5.0 給編碼器、陀螺儀、無(wú)線(xiàn)串口、主板上的磁傳 感器供電,一片 IDO 芯片 LP38692MP-3.3 給 OLED 液晶屏,起跑線(xiàn)檢測(cè)模塊供電, 一片 IDO 芯片 LP38692MP5.0 給外載磁傳感器供電。通過(guò)引腳(圖 3.1-2 中 PW_EN) 拉高給使能信號(hào)控制外設(shè)供電,保證核心板正常啟動(dòng)。
▲ 外設(shè)供電原理圖
3.2 電機(jī)驅(qū)動(dòng)模塊
電機(jī)驅(qū)動(dòng)使用芯片 BTN8982TA,搭建全橋驅(qū)動(dòng)電路。該芯片正常輸出電流可 以達(dá)到 50A,同時(shí) BTN8982 的輸出阻抗正常情況為 9 毫歐左右,阻抗越小,芯片 的發(fā)熱量越小,功耗也就越小。從另一個(gè)角度看,該芯片內(nèi)部集成了 H 橋驅(qū)動(dòng) 器以及由 MOS 管組成的半 H 橋電路,設(shè)計(jì)簡(jiǎn)單,布局方便。
▲ 電機(jī)驅(qū)動(dòng)原理圖
3.3 舵機(jī)供電
比賽提供的舵機(jī)為 FUTABA3010,該舵機(jī)工作電壓 4.0V-6.0V,工作時(shí)所需電 流為 175mA。為了保證舵機(jī)正常工作且不影響其他電路工作,為此我們采用線(xiàn)性 電源 LT1764 給舵機(jī)供電,該芯片輸出電流可達(dá) 3A,此時(shí)壓差為 340mV,輸入電壓范圍廣:2.7V-20V,輸出電壓范圍為 1.21V-20V,輸出電壓與外部配比電阻有 關(guān)。
▲ 舵機(jī)驅(qū)動(dòng)原理圖
輸出電壓計(jì)算公式:
其中IADJ = 3uA,與其他變量有數(shù)量級(jí)差別,故忽略不計(jì)。所以此時(shí)計(jì)算出VOUT = 5.957V。
3.4磁傳感器模塊
磁傳感器是電磁組小車(chē)最重要的模塊之一,根據(jù)變化的磁場(chǎng)信號(hào)作出靈敏的 檢測(cè),車(chē)體在賽道上位置判斷以及之后得控制起著至關(guān)重要的作用。本系統(tǒng)根 據(jù) LC 諧振的原理,選取 10mH 電感和 6.8nF 電容作為 LC 諧振電路,產(chǎn)生感應(yīng) 電流,再通過(guò)濾波、放大、檢波,然后將結(jié)果送入單片機(jī) AD 進(jìn)行相應(yīng)的處理, 以判斷賽道當(dāng)前信息。后級(jí)放大電路原理圖所示。
▲ 采集級(jí)放大電路原理圖
3.5 無(wú)線(xiàn)串口模塊
使用逐飛的無(wú)線(xiàn) USB/無(wú)線(xiàn)轉(zhuǎn)串口模塊套件,實(shí)現(xiàn)實(shí)時(shí)主機(jī)與核心板通信, 可以傳回神經(jīng)網(wǎng)絡(luò)需要的訓(xùn)練數(shù)據(jù),同時(shí)也可以實(shí)現(xiàn)遙控車(chē)無(wú)線(xiàn)更改參數(shù)等操 作,大大節(jié)約了時(shí)間。
3.6 編碼器測(cè)試模塊
本小車(chē)使用龍邱智能科技的 512 線(xiàn) mini 型編碼器進(jìn)行小車(chē)的測(cè)速,工作電 壓在 3.3V- 5V。處理器通過(guò)讀取編碼器脈沖數(shù)來(lái)實(shí)現(xiàn)小車(chē)速度的測(cè), 通過(guò)讀取 編碼器旋轉(zhuǎn)方向腳的高低電平來(lái)檢測(cè)電機(jī)的正反轉(zhuǎn)。
3.7 陀螺儀模塊
采用 HWT101 旋轉(zhuǎn)角姿態(tài)傳感器,內(nèi)部集成姿態(tài)解算器,配合動(dòng)態(tài)卡爾曼濾 波算法,能準(zhǔn)確的得出當(dāng)前姿態(tài),姿態(tài)測(cè)量精度靜態(tài) 0.05 度,動(dòng)態(tài) 0.1 度, 穩(wěn)定性極高,用于神經(jīng)網(wǎng)絡(luò)的記憶之中。
3.8 停車(chē)模塊選型
起跑線(xiàn)處布有磁鐵表面磁場(chǎng)強(qiáng)度為 3000-4000 G,針對(duì)磁場(chǎng)強(qiáng)度和車(chē)速兩個(gè) 條件下不斷嘗試不同霍爾元件型號(hào)如 SM351LT,SS41F,DRV5055,HAL145 等, 在最后根據(jù)車(chē)速和檢測(cè)準(zhǔn)確率我們選擇 HAL145。
這是一種全極性霍爾開(kāi)關(guān)。當(dāng) 霍爾開(kāi)關(guān)在磁鐵上方時(shí), 霍爾開(kāi)關(guān)輸出低電平,單片機(jī)檢測(cè)到低電平引發(fā)單片 機(jī)中斷。單個(gè)霍爾開(kāi)關(guān)的 電路原理圖如圖 3.2.6 所示。
▲ 霍爾開(kāi)關(guān)原理圖
3.9 人機(jī)交互模塊
為了方便調(diào)試,本車(chē)有無(wú)線(xiàn)串口模塊,有效進(jìn)行運(yùn)行參數(shù)之間的傳送,除此 之外,還設(shè)置了鍵盤(pán)、OLED 液晶顯示屏,以方便控制參數(shù)的修改,便捷的智能 車(chē)的調(diào)試。
傳統(tǒng) PID 控制部分,我們需要考慮基于電感電壓的數(shù)據(jù),控制舵機(jī)轉(zhuǎn)向和電 機(jī)轉(zhuǎn)速。另外,我們加入了陀螺儀和編碼器對(duì)賽道進(jìn)行建圖,以期獲得無(wú)限長(zhǎng) 前瞻。
4.1 舵機(jī)轉(zhuǎn)向控制
舵機(jī)控制中,我們的目標(biāo)是通過(guò)改變舵機(jī)轉(zhuǎn)向,讓車(chē)子盡量地保持在賽道中 間。我們希望車(chē)身在賽道中間,即誤差 Error 盡量地在 0 附近,當(dāng) Error<0 時(shí), 說(shuō)明車(chē)身偏右,需要舵機(jī)向左打角,同理當(dāng) Error>0 時(shí),說(shuō)明車(chē)身偏左,需要 舵機(jī)向右打角。
4.1.1 舵機(jī)轉(zhuǎn)向偏差計(jì)算方案
4.1.1.1 差值法
差值法,顧名思義,通過(guò)左右電感的差值作為偏差對(duì)小車(chē)進(jìn)行控制,符號(hào)判 斷方向,大小作為控制量,這是我們最開(kāi)始采用的控制小車(chē)的策略,這樣的控 制策略能夠在低速情況下滿(mǎn)足控制要求,但是極不穩(wěn)定,容易出界,經(jīng)過(guò)數(shù)據(jù) 采集和可視化,我們發(fā)現(xiàn)這種策略所計(jì)算出來(lái)偏差并不是單調(diào)的,而是隨著原 理賽道中線(xiàn)的距離增大先增,到達(dá)峰值,再遞減,這也解釋了當(dāng)其遠(yuǎn)離賽道中 線(xiàn)后其控制量不足,導(dǎo)致車(chē)身出界的情況。
4.1.1.2 三電感控制法
在我們發(fā)現(xiàn)偏差不單調(diào)后,我們就想找一種控制策略來(lái)解決這個(gè)問(wèn)題,我們 發(fā)現(xiàn),差值法判斷方向是比較準(zhǔn)確的,所以我們保留了其方向控制策略,在兩 個(gè)電感中間加了中間電感,以中間電感與其設(shè)定的最大值的差值作為偏差,這 種方案較好的解決了偏差不單調(diào)的問(wèn)題,在前瞻比較長(zhǎng)的情況下控制效果也很 不錯(cuò),但后面我們發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)不能很好的學(xué)習(xí)長(zhǎng)前瞻所收回的數(shù)據(jù)的時(shí)候, 我們改用短前瞻進(jìn)行數(shù)據(jù)收錄,這時(shí)我們發(fā)現(xiàn)這種策略在轉(zhuǎn)大彎時(shí)候效果不太 好,響應(yīng)太慢跟不上,由于信號(hào)線(xiàn)的鋪設(shè)問(wèn)題,不同的直道,中間電感所能測(cè)量的最大幅度也不同,導(dǎo)致在 Error 在直道上不一定為 0,會(huì)產(chǎn)生舵機(jī)的震蕩, 無(wú)法解決,因此也放棄這種方案。
4.1.1.3 歸一化法
在我們發(fā)現(xiàn)三電感方案不能滿(mǎn)足段前瞻控制需求后,我們和往屆學(xué)長(zhǎng)進(jìn)行溝 通交流,他們提出歸一化法方案,這種方案具體是用左右電感的差值比上左右 電感的和,我們嘗試了一段時(shí)間后,這種方案確實(shí)是有一定的效果,控制作用 在大彎的時(shí)候確實(shí)是得到了增強(qiáng),解決了三電感所存在的問(wèn)題,但在我們加速 后,發(fā)現(xiàn)它和差值法存在同樣的問(wèn)題,計(jì)算出來(lái)的偏差不單調(diào),所以在連續(xù)過(guò) 彎切邊的時(shí)候,誤差值會(huì)變小,非常容易跑飛出去,因此我們不得不尋找下一 種控制方案。
4.1.1.4 比值法
除了上面的方案,我們還嘗試了各種各樣的方案:比如放置斜電感、多個(gè)中 間電感模擬攝像頭等等,最終我們選取了下面這種方案。
構(gòu)建位置誤差公式:
L:左邊電感電壓值 R:右邊電感電壓值
這種計(jì)算式其實(shí)也存在不單調(diào)的情況,但單調(diào)的區(qū)間很大,在賽道的約束條 件下完全滿(mǎn)足要求,并且其對(duì)轉(zhuǎn)彎比較靈敏,有效的解決了過(guò)彎的難題。
4.1.2 舵機(jī)轉(zhuǎn)向控制策略
4.1.2.1 傳統(tǒng)控制策略
此部分中,我們只采用了 PD 控制,因?yàn)檐?chē)輛電感值在實(shí)時(shí)更新,需要進(jìn)行 實(shí)時(shí)轉(zhuǎn)向,因此不需要使用 I 控制。PD 控制中,P 為實(shí)時(shí)修改狀態(tài),而 D 是為 了修補(bǔ) P 實(shí)時(shí)性的不足,達(dá)到提前的作用。另外,為了提升大彎轉(zhuǎn)向的快速性 能和直道的穩(wěn)定性能,我們通過(guò) Error,劃分了兩組 PD,當(dāng) Error 較小時(shí),認(rèn) 為是在直道,采用較小的 PD 保證穩(wěn)定性,防止震蕩,當(dāng) Error 較大時(shí),認(rèn)為是在彎道,采用較大的 PD 保證快速轉(zhuǎn)向。
▲ 舵機(jī)控制模型
4.1.2.2 控制策略探索
運(yùn)用傳統(tǒng)控制策略進(jìn)行控制的時(shí)候,我們發(fā)現(xiàn)參數(shù)調(diào)節(jié)十分麻煩,而且適應(yīng) 性不強(qiáng),因此我們就想有沒(méi)有一種方案能不能在一定區(qū)間自動(dòng)調(diào)整 PID 參數(shù)去 適應(yīng)不同的條件,我們查閱了相關(guān)文獻(xiàn),幾乎都指向了模糊 PID 控制這一方向。
帶著探索的心,我們?nèi)チ私饬四:?PID 的相關(guān)理論,并試著寫(xiě)了一套模糊 PID 算法,發(fā)現(xiàn)這套算法調(diào)參難度并不亞于傳統(tǒng)的 PID,但是適應(yīng)性的確強(qiáng)了不少, 但這與我們想要簡(jiǎn)化調(diào)參過(guò)程的初衷并不一致,所以沒(méi)有更深入的去探索。
后 面根據(jù)我們對(duì)問(wèn)題的分析,我們發(fā)現(xiàn)舵機(jī)控制與當(dāng)前偏差、偏差的變化率息息 相關(guān),我們根據(jù)這兩者的狀態(tài)繪制了以下程序框圖并實(shí)現(xiàn):
▲ 模糊控制PID部分流程圖
我們僅僅需要確定每次調(diào)整步長(zhǎng),我們就可以是 PID 在一個(gè)范圍內(nèi)進(jìn)行變 動(dòng),滿(mǎn)足不同情況下的要求。
4.1.2.3 控制策略展望
為了簡(jiǎn)化調(diào)參和增強(qiáng)適應(yīng)性,在上一小節(jié)我們對(duì)控制策略進(jìn)行了探索,但是還是逃不掉反復(fù)調(diào)參的過(guò)程,這個(gè)過(guò)程枯燥乏味又不得不做,我們就想能不能 有一套系統(tǒng)能夠在調(diào)好一套參數(shù)的情況下,通過(guò)獎(jiǎng)勵(lì)——懲罰機(jī)制使其不斷提 速,參數(shù)不斷適應(yīng)速度的改變呢?
我們就想用一個(gè)攝像頭來(lái)捕捉車(chē)子在賽道上 的狀態(tài)信息,建立一套獎(jiǎng)勵(lì)懲罰機(jī)制,當(dāng)車(chē)子偏離賽道中央過(guò)大,說(shuō)明參數(shù)不 太好,給與一定的懲罰,反之亦反之,然后車(chē)子緩慢的提速,參數(shù)不斷適應(yīng)車(chē) 速達(dá)到自適應(yīng)的效果。
4.2 電機(jī)控制
電機(jī)控制中,我們使用 PID 控制電機(jī)的速度。另外,還需要由轉(zhuǎn)向角度控制 電機(jī)差速,從而讓車(chē)子更好過(guò)彎。
4.2.1 電機(jī)速度
電機(jī)轉(zhuǎn)速控制中,我們不斷地讀取編碼器返回的實(shí)際轉(zhuǎn)速,與期望轉(zhuǎn)速作差 得到 Error,我們希望轉(zhuǎn)速能夠快速跟隨,即希望 Error 能夠盡快地到 0。采用 最原始的位置式 PID 控制,加上積分抗飽和算法基本滿(mǎn)足控制要求。
▲ 電機(jī)速度控制模型
4.2.2 電機(jī)差速
電機(jī)差速的和舵機(jī)轉(zhuǎn)向相關(guān),基于阿克曼轉(zhuǎn)向模型,當(dāng)舵機(jī)需要轉(zhuǎn)向更大的 角度的時(shí)候,差速的值應(yīng)該越大,以輔助車(chē)身更好的入彎。另外,我們發(fā)現(xiàn)車(chē) 身出界的情況大多數(shù)是在入彎的過(guò)程中,在彎道部分一般是不會(huì)出的。
為了實(shí) 現(xiàn)彎道加速的功能,我們也讓其與舵機(jī)轉(zhuǎn)向變化率相關(guān),當(dāng)轉(zhuǎn)向變化率較大時(shí), 即入彎過(guò)程中,速度降低,而當(dāng)轉(zhuǎn)向變化率逐漸變小時(shí),即車(chē)身穩(wěn)定后,則可 以提高速度。因此,我們的速度是由需要轉(zhuǎn)彎的角度和轉(zhuǎn)彎角度的變化率二者 共同決定。
具體的計(jì)算流程如下圖:
▲ 電機(jī)差速控制流程圖
由圖中可以看到,當(dāng)突然出現(xiàn)需要打一個(gè)比較大的角度的時(shí)候,速度會(huì)減下來(lái),與此同時(shí),由于突然產(chǎn)生了如此大的角度,方向變化率也會(huì)變大,從而讓 小車(chē)順利減速過(guò)彎。但是在過(guò)彎的途中,雖然角度仍然是比較大的值,可是方 向變化率在減小,從而可以讓整體速度進(jìn)行提升,最終達(dá)到過(guò)彎加速的效果。
4.3 記憶方案
通常我們使用電感等傳感器實(shí)時(shí)檢測(cè)到的信息作為判斷依據(jù)來(lái)控制車(chē)模的 轉(zhuǎn)向和加減速,在限制前瞻長(zhǎng)度的情況下這樣的實(shí)時(shí)判斷相比于長(zhǎng)前瞻就有嚴(yán) 重的滯后性,我們嘗試不使用或少使用實(shí)時(shí)判斷的信息進(jìn)行控制。
我們先使車(chē)模在平穩(wěn)狀態(tài)下運(yùn)行一段賽道,記錄每個(gè)控制周期的陀螺儀 z 軸 轉(zhuǎn)角與編碼器數(shù)值,通過(guò)這些信息對(duì)賽道進(jìn)行解算,將賽道元素分為三類(lèi):直 道、左轉(zhuǎn)、右轉(zhuǎn),可以得到一個(gè)簡(jiǎn)化版的賽道數(shù)組(包含按順序排列的賽道的 每個(gè)元素以及對(duì)應(yīng)的直道長(zhǎng)度或彎道角度以及彎道半徑)。
▲ 某段賽道的結(jié)算數(shù)組及其圖像
發(fā)現(xiàn)效果良好,嘗試在第二圈時(shí)使用第一次運(yùn)行時(shí)記錄下的解算后的賽道信 息作為判斷依據(jù)通過(guò)如下步驟控制車(chē)模運(yùn)行(使用速度 PID 環(huán)作為內(nèi)環(huán)、位置 PID 環(huán)作為外環(huán)對(duì)車(chē)模進(jìn)行控制):
①進(jìn)入直道后使用速度圖像為拋物線(xiàn)的加速方式,加到設(shè)定的直道速度后勻 速運(yùn)行;
②在直道中根據(jù)編碼器的實(shí)時(shí)讀數(shù)計(jì)算減速至設(shè)定的彎道速度所需的距離與車(chē)模在當(dāng)前直道元素中已行進(jìn)的距離,當(dāng)減速所需的距離與車(chē)模進(jìn)入下一賽 道元素的剩余距離相差很小時(shí),使車(chē)模進(jìn)行拋物線(xiàn)減速,在進(jìn)入下一賽道元素 前就能減至設(shè)定的彎道速度;
③在彎道中根據(jù)彎道的半徑控制前輪的轉(zhuǎn)角與后輪的差速,并使車(chē)模勻速通 過(guò)彎道;
④重復(fù)①~③步驟;
⑤車(chē)模檢測(cè)到終點(diǎn)線(xiàn)后停止運(yùn)行。但由于備賽時(shí)間較短,未能完整實(shí)現(xiàn)上述控制方案。我們又嘗試使用車(chē)模第一次運(yùn)行賽道記憶的信息提升直道速度,只根據(jù)距離信息來(lái)進(jìn)行入彎時(shí)的提前減速。
不過(guò),我們發(fā)現(xiàn)直接加速會(huì)存在問(wèn)題,車(chē)子變得非常不好控制,很容易沖出賽道,因此后面我們只是略微增大了一些速度, 但是增加電機(jī)的 I 項(xiàng),從而讓整體的速度進(jìn)行提高。
神經(jīng)網(wǎng)絡(luò)控制部分,我們希望送入神經(jīng)網(wǎng)絡(luò)電感值,讓神經(jīng)網(wǎng)絡(luò)輸出舵機(jī)轉(zhuǎn) 向值。
5.1 數(shù)據(jù)收集
數(shù)據(jù)收集部分,我們分別采用了長(zhǎng)短前瞻的電感值電壓輸入作為 PID 控制, 進(jìn)行數(shù)據(jù)的采集。采集過(guò)程中,我們使用無(wú)線(xiàn)串口進(jìn)行上位機(jī)和 MCU 通信,通 過(guò) python 寫(xiě)上位機(jī)。其中 pyserial 進(jìn)行串口數(shù)據(jù)的解析,pygame 讀取鍵盤(pán)命 令從而達(dá)到小車(chē)控制的功能。另外,我們采用了 Matlabplotlib 的包進(jìn)行了多 種情況的可視化,便于進(jìn)行分析。
另外,我們對(duì)車(chē)子進(jìn)行了遠(yuǎn)程控制,通過(guò)串口,我們可以在上位機(jī)中實(shí)現(xiàn)控 制車(chē)輛啟停,車(chē)輛加減速,車(chē)輛拐彎等功能,從而更好地收集數(shù)據(jù)。與此同時(shí), 我們還通過(guò)遠(yuǎn)程串口,進(jìn)行了 PID 參數(shù)的調(diào)節(jié),從而大大方便了 PID 的調(diào)參過(guò) 程。
經(jīng)過(guò)整理,我們發(fā)現(xiàn)這個(gè)環(huán)境中徹底驗(yàn)證了"Garbage in, Garbage out" 的說(shuō)法,即數(shù)據(jù)好則神經(jīng)網(wǎng)絡(luò)效果好,數(shù)據(jù)不好,則神經(jīng)網(wǎng)絡(luò)效果很差。
我們 分別采用了長(zhǎng)前瞻和短前瞻作為 PID 數(shù)據(jù)源進(jìn)行車(chē)輛控制,然后在長(zhǎng)前瞻 PID 中收集了長(zhǎng)前瞻和短前瞻的電感數(shù)據(jù),在短前瞻 PID 中,收集短前瞻的電感數(shù) 據(jù),對(duì)這三種數(shù)據(jù)進(jìn)行學(xué)習(xí)。
實(shí)驗(yàn)發(fā)現(xiàn),當(dāng)長(zhǎng)前瞻跑 PID 時(shí),長(zhǎng)前瞻的電感送 入神經(jīng)網(wǎng)絡(luò)中擬合的很好,但是短前瞻電感值送入神經(jīng)網(wǎng)絡(luò)中擬合卻不行。短 前瞻跑 PID 時(shí),短前瞻電感值送入神經(jīng)網(wǎng)絡(luò)擬合很好。
因此實(shí)驗(yàn)結(jié)論是:基于 某幾個(gè)電感進(jìn)行 PID 控制,則采集對(duì)應(yīng)電感值作為神經(jīng)網(wǎng)絡(luò)輸入,神經(jīng)網(wǎng)絡(luò)的 擬合性能很好。
關(guān)于數(shù)據(jù)集制作,為了更好地收集數(shù)據(jù),我們?cè)谏衔粰C(jī)中遠(yuǎn)程控制車(chē)輛是否 發(fā)送數(shù)據(jù),從而可以有針對(duì)性地在各個(gè)環(huán)境中進(jìn)行數(shù)據(jù)制作。數(shù)據(jù)清洗方面, 因?yàn)榇诎l(fā)送的頻率過(guò)高,存在了大量的數(shù)據(jù)是重復(fù)的,因此我們針對(duì)性地對(duì) 相鄰兩幀之間電感數(shù)據(jù)差距不算很大的進(jìn)行了刪除。
另外,為了適應(yīng)不同的場(chǎng) 地,我們還進(jìn)行了數(shù)據(jù)歸一化的操作,每次啟動(dòng)車(chē)子之前,我們平移我們的車(chē)子,收取賽道中最大的電感值,然后所有的電感除以對(duì)應(yīng)最大電感值從而獲取 歸一化后的電感值。
在數(shù)據(jù)采集的過(guò)程中我們發(fā)現(xiàn)了訓(xùn)練出來(lái)的模型效果不是很好,經(jīng)過(guò)可視化 之后,發(fā)現(xiàn)靠近舵機(jī)的電感數(shù)據(jù)不穩(wěn)定,即使開(kāi)啟了硬件平均也有很大的抖動(dòng), 這對(duì)于訓(xùn)練必然是不好的。
▲ 某電感濾波前的圖像
在觀(guān)察到這樣的現(xiàn)象之后,我們決定加入軟件濾波,對(duì)于這種數(shù)據(jù)抖動(dòng)較大 的情況,最簡(jiǎn)單的濾波公式莫過(guò)于卡爾曼濾波,對(duì)于單片機(jī)性能的要求也最低, 在電感的采集過(guò)程中,只需要貯存上一個(gè)電感數(shù)據(jù)既可,下圖為濾波之后的效 果。
▲ 某電感濾波后的圖像
5.2 電感排布
電感排布部分,我們通過(guò)隨機(jī)增加擾動(dòng)的方式,尋找最為重要的電感。最終確定了 11 個(gè)電感排布的方案。假設(shè)有 3 個(gè)電感分別放置在車(chē)前左中右位置,前面的系數(shù)分別為 0.8,1.2, 0.8,則可列電感控制舵機(jī)的方程:
但是實(shí)際上,我們并不知道各個(gè)電感前的系數(shù),因此假設(shè)為 A,B,C,直觀(guān) 地,我們可以認(rèn)為:某個(gè)電感前系數(shù)較大,則某個(gè)電感更為重要,因?yàn)樗膶?duì) 舵機(jī)的影響更大。
雖然在神經(jīng)網(wǎng)絡(luò)中,每個(gè)電感與舵機(jī)輸出并不是線(xiàn)性關(guān)系, 但是我們不妨假設(shè):不同電感變化同一個(gè)幅度時(shí),哪個(gè)電感能導(dǎo)致舵機(jī)變化越 大,哪個(gè)電感就是更為重要的電感?;诖思僭O(shè),我們完成了電感排布的確定。
▲ 電感分布確定流程圖
具體步驟如下:每次我們隨機(jī)選擇放置電感排布,通過(guò)神經(jīng)網(wǎng)絡(luò)收取數(shù)據(jù)進(jìn) 行訓(xùn)練得到一個(gè)網(wǎng)絡(luò)模型。然后,我們對(duì)收集到的數(shù)據(jù)添加隨機(jī)擾動(dòng),從-0.1~ 0.1,分為 10 個(gè)范圍,即-0.1~-0.08,-0.08~-0.06....0.06~0.1。
得到隨機(jī)擾動(dòng)的數(shù)據(jù)集之后,我們把原始數(shù)據(jù)的輸出和擾動(dòng)數(shù)據(jù)的輸出(都 使用同一個(gè)網(wǎng)絡(luò))做差得到絕對(duì)值。如果某個(gè)電感的絕對(duì)值較大,則說(shuō)明此電 感輕微擾動(dòng)對(duì)網(wǎng)絡(luò)輸出影響大,是比較重要的電感。
基于此套方法,我們確定了 11 個(gè)電感的排布位置,下為某組數(shù)據(jù)擾動(dòng)之后 的誤差分布圖。
▲ 電感誤差分布
以第一列圖片為例,第一列對(duì)應(yīng)的是第一排最左邊的電感,從上到下,分別 對(duì)應(yīng)了施加擾動(dòng)的范圍為-0.1~-0.08,-0.08~-0.06.......0.06~0.08, 0.08~0.1。直方圖代表了施加擾動(dòng)前后輸出的差的絕對(duì)值的分布。從圖中我們 可以看到在中間部分的偏差靠近 0,而上下偏差靠近 1,符合邏輯。另外,橫向 對(duì)比,我們可以看到,第 1,2,3,4,5,8,9 列的影響相對(duì)比較大,他們對(duì) 應(yīng)了第一排左中右(1,2,3),第二排左右(4,5),第一排豎電感(8,9)。
5.3 網(wǎng)絡(luò)結(jié)構(gòu)
我們進(jìn)行了大量的網(wǎng)絡(luò)結(jié)構(gòu)測(cè)試,由于 NXP 芯片所限,基本上只能夠使用全 連接層。不過(guò)相比于直接送入電感值,我們將電感值和歷史 10 次網(wǎng)絡(luò)輸出值(舵 機(jī)期望值)共同送入網(wǎng)絡(luò),從而相同網(wǎng)絡(luò)結(jié)構(gòu)(只有輸入層不同)訓(xùn)練結(jié)果的 loss 從 0.04 降到了 0.02,網(wǎng)絡(luò)跟蹤的效果也變得更好。
另外,我們也發(fā)現(xiàn),基本上的全連接層已經(jīng)足夠訓(xùn)練網(wǎng)絡(luò),網(wǎng)絡(luò)的效果也是滿(mǎn)足需求的。基于此我們盡可能地縮小網(wǎng)絡(luò)大小,讓速度盡快,最終的網(wǎng)絡(luò)結(jié) 果為:
網(wǎng)絡(luò)結(jié)果輸入為 Nx21x1 的數(shù)據(jù),(11 個(gè)電感和前 10 幀的舵機(jī)控制角度), 分別經(jīng)過(guò) Dense,BatchNormal,Dropout 等的操作,最終生成一個(gè) 1 維度的舵 機(jī)值,即為目標(biāo)輸出,網(wǎng)絡(luò)結(jié)構(gòu)圖如下。
▲ 網(wǎng)絡(luò)結(jié)構(gòu)圖
電路部分嘗試過(guò)為軟件增加電機(jī)的電流環(huán),但由于 AI 電磁要求的磁傳感器 過(guò)多,芯片 ADC 引腳比較緊張,最后沒(méi)有落地。鑒于 AI 電磁本身的特殊性—— 對(duì)磁傳感器位置的嚴(yán)要求,電路部分將用于 AI 的磁傳感器分割到單獨(dú) PCB 板上, 確保位置固定,車(chē)與車(chē)差異小,算法可以移植,與機(jī)械部分一同做好電感保護(hù)。
機(jī)械方面,使用碳板制作的頂棚搭載多個(gè)電感,增強(qiáng)了電感數(shù)值的可靠性 電控方向,我們采用陀螺儀和編碼器進(jìn)行了全地圖的繪制,然后針對(duì)直道進(jìn)行了二次加速。
神經(jīng)網(wǎng)絡(luò)方向,我們將歷史的舵機(jī)控制值送入神經(jīng)網(wǎng)絡(luò),大大提升了網(wǎng)絡(luò)的 效果。
從機(jī)械到電路再到電控和神經(jīng)網(wǎng)絡(luò),我們搭建了一個(gè)完整的車(chē)子。對(duì)車(chē)子進(jìn) 行穩(wěn)定性測(cè)試,算法迭代優(yōu)化,我們才算是真正地完成了一個(gè)項(xiàng)目。小組成員 每個(gè)人都盡著自己最大的努力,不加班不快樂(lè),沒(méi)成果沒(méi)休息逐漸成為我們的 常態(tài)。這一次的磨礪,所有的隊(duì)員都有了非常大的進(jìn)步,與此同時(shí),我們也收 獲了一份友誼。
另外,感謝學(xué)校對(duì)我們的支持,在疫情期間仍然全力支持我們。感謝組委會(huì)提供的參賽機(jī)會(huì)。
[1] 卓晴,黃開(kāi)勝,邵貝貝等,《學(xué)做智能車(chē)——挑戰(zhàn)“飛思卡爾”杯》[c].北京:北京 航空航天大學(xué)出版社,2007.
[2] 譚浩強(qiáng),C 語(yǔ)言程序設(shè)計(jì)[M],北京:清華大學(xué)出版社,2005.
[3] 王宜杯,嵌入式系統(tǒng)原理與實(shí)踐:ARM Cortex-M4 Kinetis 微處理器,北京:電子工業(yè) 出版社,2012.
[4] 陶永樂(lè),新型 PID 控制及其應(yīng)用(第二版),北京:機(jī)械工業(yè)出版社 [5] 李發(fā)海,王巖等,電機(jī)與拖動(dòng)基礎(chǔ),北京:清華大學(xué)出版社
[6] 胡壽松,自動(dòng)控制原理(第六版),北京:科學(xué)出版社
1.軟件開(kāi)發(fā)平臺(tái):KEIL
▲ 軟件開(kāi)發(fā)平臺(tái) KEIL
2.神經(jīng)網(wǎng)絡(luò) h5 文件轉(zhuǎn)換工具:
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀(guān)點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!





