簡 介: 本文以第十六屆全國大學(xué)生智能車 競賽為背景,介紹了 AI視覺四輪智能車系統(tǒng)的軟硬件結(jié)構(gòu)和開發(fā)流程。采用大賽組委會指定的 C型車模,以恩智浦 32位微控制器 MIMXRT1064最小系統(tǒng)板作為核心控制單元,在 IAR開發(fā)環(huán)境中進行軟件開發(fā),使用 MT9V032攝像頭以及電感進行賽道信息采集。我們對小車的機械結(jié)構(gòu),硬件設(shè)計,軟件編程方面進行了深入的研究。多次嘗試改變小車的機械結(jié)構(gòu),深入考慮衡量硬件 PCB的布局,走線等。軟件采用多種算法結(jié)合,核心為攝像頭循跡與電磁 PID控制結(jié)合的算法,實現(xiàn)擁有較強魯棒性的尋跡小車。我們獨立完成了控制方案及系統(tǒng)設(shè)計,包括電磁信號采集處理、賽道圖像信號采集處理、循跡控制算法及執(zhí)行、動力電機驅(qū)動、十分類神經(jīng)網(wǎng)絡(luò)訓(xùn)練、靶標圖片識別、單片機之間通信等,最終實現(xiàn)了具有 AI視覺功能的基于電磁與攝像頭的快速尋跡智能車控制系統(tǒng)。 智能車是一個軟硬件與機械相結(jié)合的整體,其中硬件主要包括電源模塊、電機驅(qū)動模塊、速度測量模塊、圖像采集處理模塊、電磁傳感模塊、舵機控制模塊和單片機模塊等;軟件主要包括單片機初始化程序、速度測量程序、速度設(shè)定程序、速度控制程序、舵機控制程序、元素識別程序等方面的內(nèi)容,使用 Matlab進行了大量的數(shù)據(jù)分析以及上位機的設(shè)計調(diào)試,確定了現(xiàn)有的機械結(jié)構(gòu)和相關(guān)控制參數(shù)。關(guān)鍵詞
: 智能車 ,MIMXRT1064 ,MT9V032攝像頭 ,電感 引 言??
全 國大學(xué)生智能汽車競賽以 “立足培養(yǎng)、重在參與、鼓勵探索、追求卓越”為宗旨,是一項鼓勵創(chuàng)新的科技競賽活動。智能車設(shè)計內(nèi)容涵蓋了控制、模式識別、傳感技術(shù)、汽車電子、電氣、計算機、機械等多個學(xué)科的知識,對學(xué)生的知識融合和實踐動手能力的培養(yǎng),具有良好的推動作用。競賽要求在規(guī)定的汽車模型平臺上,使用微控制器作為核心控制模塊,通過增加道路傳感器、電機驅(qū)動模塊以及編寫相應(yīng)控制程序,制作完成一個能夠自主識別道路的模型汽車。??智能汽車競賽 AI視覺組別,要求采用第十六屆全國大學(xué)智能汽車競賽的 C型車模,采用恩智浦 32位微控制器 MIMXRT1064最小系統(tǒng)板作為核心控制單元,主頻為 600MHZ。我們對小車的機械結(jié)構(gòu),硬件設(shè)計,軟件編程方面進行了深入的研究。多次嘗試改變小車的機械結(jié)構(gòu),深入考慮衡量硬件 PCB的布局,走線等。軟件采用多種算法結(jié)合,核心為攝像頭循跡與電磁 PID控制結(jié)合的算法,實現(xiàn)小車魯棒性較強的尋跡。我們獨立完成了控制方案及系統(tǒng)設(shè)計,包括電磁信號采集處理、賽道圖像信號采集處理、循跡控制算法及執(zhí)行、動力電機驅(qū)動、十分類神經(jīng)網(wǎng)絡(luò)訓(xùn)練、靶標圖片識別、單片機之間通信等,最終實現(xiàn)了具有 AI視覺功能的基于電磁與攝像頭的快速尋跡智能車控制系統(tǒng)。??本次報告主要介紹攝像頭智能車硬件電路及車模機械的設(shè)計方案,以及軟件控制系統(tǒng)建立的方式方法。
第一章 車 模機械設(shè)計 ??
智 能車能夠穩(wěn)定的運行,良好的機械性能是必不可少的,機械安裝的布局、質(zhì)量將影響到道路信息的探測效果以及車子的拐彎轉(zhuǎn)向、加減速效果。只有整體把握好之后,才能對細節(jié)進行有效處理。前期我們花了一定時間去研究車模的安裝,攝像頭的選擇,電感的安裝,以及其他硬件安裝方案的實驗,大體上確定了車模的機械架法和硬件上的芯片選型, PCB布局等。中期是軟件調(diào)試為主,同時完善硬件,實踐證明在機械上的優(yōu)化對軟件的調(diào)車有很大的推動作用。后期軟件算法已經(jīng)確定,硬件上也比較穩(wěn)定。正是這種對智能車精益求精的追求,使得我們的智能車有了比較可靠得穩(wěn)定性。本章將介紹根據(jù)實際情況對車模機械做出的改進。
1.1前輪定位調(diào)整 ??四輪智能車出現(xiàn)直線走偏、轉(zhuǎn)彎費力、輪胎磨損快等情況時大多與輪胎安裝角度有關(guān),涉及到一個非常重要的轉(zhuǎn)向輪位置角度定位問題,叫做“前輪定位”。它的作用是保障智能車直線運行時的穩(wěn)定性,使其轉(zhuǎn)向輕便并減少輪胎的磨損。前輪是轉(zhuǎn)向輪,它的安裝位置由主銷內(nèi)傾、主銷后傾、前輪內(nèi)傾和前輪前束等四個項目決定,反映了轉(zhuǎn)向輪、主銷和前軸等三者在車架上的位置關(guān)系。
1.1.1主銷后傾角 ??在汽車縱向平面內(nèi),主銷軸線上端略向后傾斜,這種現(xiàn)象稱為主銷后傾。在縱向垂直平面內(nèi),主銷軸線與垂線之間的夾角叫主銷后傾角,其值大小對汽車轉(zhuǎn)向與操縱性能密切相關(guān)。設(shè)置主銷后傾角后,主銷中心線的接地點與車輪中心的地面投影點之間產(chǎn)生距離,使車輪的接地點位于轉(zhuǎn)向主銷延長線的后端,車輪就靠行駛中的滾動阻力被向后拉,使車輪的方向自然朝向行駛方向。設(shè)定很大的主銷后傾角可提高直線行駛性能,同時主銷縱傾移距也增大。但主銷縱傾移距過大,會使轉(zhuǎn)向沉重,而且路面干擾會加劇車輪的前后顛簸。
1.1.2主銷內(nèi)傾角 ??從車前后方向看輪胎時,主銷軸向車身內(nèi)側(cè)傾斜,該角度稱為主銷內(nèi)傾角。當車輪以主銷為中心回轉(zhuǎn)時,車輪的最低點將陷入路面以下,但實際上車輪下邊緣不可能陷入路面以下,而是將轉(zhuǎn)向車輪連同整個車模前部向上抬起一個相應(yīng)的高度,這樣車模本身的重力有使轉(zhuǎn)向車輪回復(fù)到原來中間位置的效應(yīng),因而車模容易回正。
▲ 圖 1主銷內(nèi)傾角 1.1.3前輪外傾 ??從前后方向看車輪時,輪胎并非垂直安裝,而是稍微傾倒呈現(xiàn) “八”字形張開,稱為負外傾,而朝反方向張開時稱正外傾。車模一般將外傾角設(shè)定得很小,接近垂直。若設(shè)定大外傾角會使輪胎磨偏,降低輪胎摩擦力。
1.1.4前輪前束 ??四輪定位前束值腳尖向內(nèi),所謂 “內(nèi)八字腳 ”的意思,指的是左右前輪分別向內(nèi)。采用這種結(jié)構(gòu)目的是修正上述前輪外傾角引起的車輪向外側(cè)轉(zhuǎn)動。如前所述,由于有外傾,轉(zhuǎn)向變得容易。另一方面,由于車輪傾斜,左右前輪分別向外側(cè)轉(zhuǎn)動,為了修正這個問題,如果左右兩輪帶有向內(nèi)的角度,則正負為零,左右兩輪可保持直線行進,減少輪胎磨損。在智能車程序基本完整,可以完成各類賽道元素后,根據(jù)實際情況對前輪定位進行調(diào)整。通過改變上橫梁墊片的數(shù)目,增大后傾角。在智能車長期調(diào)試后,發(fā)現(xiàn)適當增大內(nèi)傾角,可使轉(zhuǎn)彎時車輪和地面有更大的接觸面積,繼而增大車與地面的摩擦程度,使車轉(zhuǎn)向更靈活,減小因摩擦不夠而引起的轉(zhuǎn)向不足的情況。
1.2攝像頭安裝調(diào)整 ??本車模采用 MT9V032攝像頭采集賽道信息。攝像頭的安裝方式是否穩(wěn)固合理,是其能否采集到優(yōu)質(zhì)圖像的關(guān)鍵。經(jīng)過多次嘗試調(diào)整,最終使用一根碳素桿搭架攝像頭的方式,以減輕可能產(chǎn)生的不必要的重量。使用螺母將攝像頭支撐桿底部固定在車模中軸線上,保證與車身保持垂直。同時,碳素桿固定在車身左右中心位置,使車模轉(zhuǎn)向時不存在水平分量,保證圖像的穩(wěn)定性。
▲ 圖 2攝像頭安裝效果圖 1.3編碼器安裝調(diào)整 ??為使智能車能夠平穩(wěn)地沿著賽道運行,需要對車速進行精確控制,使賽車在急轉(zhuǎn)彎時速度不至過快而沖出賽道。理論上,通過控制驅(qū)動電機上的平均電壓即可控制智能車速度,但是如果開環(huán)控制電機轉(zhuǎn)速,會受很多因素影響,例如電池電壓、電機傳動摩擦力、道路摩擦力和前輪轉(zhuǎn)向角度等。這些因素會造成賽車運行不穩(wěn)定,需要檢測出智能車當前速度。通過速度檢測,對車模速度進行閉環(huán)反饋控制,即可消除上述各種因素的影響,使得車模運行得更穩(wěn)定。本次使用 mini編碼器,根據(jù)車模自身實際結(jié)構(gòu),自行制作了編碼器的安裝結(jié)構(gòu)件,使編碼器使用時不對電池的安裝產(chǎn)生影響。在使用時注意到,編碼器容易受到靜電或連接松動的影響,所以需要對編碼器進行保護,在編碼器各連接處進行加固處理,防止以上情況發(fā)生。
▲ 圖 3編碼器安裝效果圖 1.4電感的安裝 ??傳感器是電磁組小車最重要的模塊之一,能夠?qū)ψ兓拇艌鲂盘栕鞒雒舻臋z測,對道路狀況的檢測起著至關(guān)重要的作用。諧振電路產(chǎn)生感應(yīng)電流,再通過濾波、放大、檢波,然后將結(jié)果送入單片機 AD進行相應(yīng)的處理,以判斷賽道當前信息。傳感器的排布,直接影響了對磁場的敏感程度,針對直道和彎道的磁場特點,在傳感器的排布上,分別有對其敏感的檢測電感,以適應(yīng)各種情況的賽道要求。
▲ 圖 4電感安裝效果圖 1.5智能視覺模塊安裝 ??因為本屆賽道添加了數(shù)字動物水果標靶, AprilTag碼等元素,所以我們隊在傳統(tǒng)的車模上自主添加了智能視覺模塊模塊,采用 UART實現(xiàn)智能視覺與主控芯片的通信,用以實現(xiàn)數(shù)字和水果 /動物的分類與小車控制。使用兩個數(shù)字舵機 M3512D,控制攝像頭旋轉(zhuǎn),攝像頭旋轉(zhuǎn)至合適位置,使用帶有可調(diào)透鏡的微型激光器發(fā)射激光,觸發(fā)打靶裝置。激光器輸出功率為 5mW。??此外,起跑線檢測直接使用干簧管。當干簧管處于磁鐵上方時,干簧管導(dǎo)通從而產(chǎn)生下降沿,信號送到單片機引發(fā)單片機外部中斷。
▲ 圖 5智能視覺模塊安裝效果圖 1.6整車效果圖 ▲ 圖 6整車效果圖 第二章 硬 件系統(tǒng)設(shè)計 2.1主控板 ▲ 圖 7主控板 ??主控板對稱布置,每個電源網(wǎng)絡(luò)均設(shè)置 LED顯示各個供電芯片是否正常工作,減少故障排查時間,其中包括主 3.3V,5V,總鉆風攝像頭 3.3V和舵機可調(diào)穩(wěn)壓。根據(jù)各個傳感器的車身分布位置合理安排接口位置,為減輕質(zhì)量同時使電路板簡潔,同時主控板四個角采用圓角的形式,美觀且防止劃傷手指,四個固定孔的位置與底座空隙相吻合,固定孔周圍沒有元器件,這樣防止了銅柱安裝時壓壞元件。
2.1.1主控芯片 ??采用逐飛科技制作的恩智浦 32位微控制器 MIMXRT1064最小系統(tǒng)板作為核心控制單元,主頻相較 K66大大提高,達到了 600MHZ,省去了在主控板上為主控芯片布線的工作,弊端是占據(jù)了主控板更多的空間。核心板通過插針與主板相連,這樣防止了因主板故障而無法使用核心板的問題。
▲ 圖 8主控芯片 2.1.2電源管理模塊 ??電源模塊主要分為四部分,分別是舵機可調(diào)電源, 5V部分,主 3.3V部分和總鉆風攝像頭供電 3.3v,攝像頭單獨擁有 3.3v供電是為防止主 3.3v供電穩(wěn)壓芯片因通過電流過大而發(fā)熱嚴重。這是四個部分將電池電壓轉(zhuǎn)換為對應(yīng)電壓,為車模各個部分供電。??5V電壓使用的是 SY8205FCC穩(wěn)壓芯片,穩(wěn)定且不易發(fā)燙,首先給核心板供電,此外還為 uart串口和激光接口提供電壓,保證 OPENARTmini模塊和激光頭供電正常。??主3.3V電壓是保證 OLED模塊、運算放大器、編碼器、超聲波模塊等的供電需求,并對一些模塊提供上拉,我們采用 RT9013-33芯片將 5V轉(zhuǎn)換為 3.3V較為穩(wěn)定。??總鉆風攝像頭 3.3v單獨供電,使其電壓穩(wěn)定充足,響應(yīng)更快。??舵機可調(diào)電路是將 7.2V電池電壓,轉(zhuǎn)換到舵機可用電壓,一般為 5-6V,為不損傷舵機且響應(yīng)盡量塊通常是調(diào)至接近舵機的最大工作電壓 6v,這里使用的仍是高性能的穩(wěn)壓芯片 SY8205FCC,通過電位器調(diào)節(jié)輸出電壓。??在隔離方面由于 AI視覺組的舵機使用較多,容易在工作時對其他模塊產(chǎn)生影響,故通過 0歐姆電阻分割地的方法將舵機 GND和其他模塊的 GND分割隔離。
▲ 圖 9舵機穩(wěn)壓電路 ▲ 圖 105V穩(wěn)壓電路 ▲ 圖 11總鉆風攝像頭 3.3v穩(wěn)壓電路 2.1.3蜂鳴器模塊 ??我們采用蜂鳴器來幫助我們對某些判別條件觸發(fā)時有更加直觀的感受,方便更改參數(shù)。
▲ 圖 12蜂鳴器電路 2.2驅(qū)動板 ??使用 H橋驅(qū)動原理采用 DRV8701芯片和 MOS管進行正反雙向驅(qū)動,并利用 74HC125PW與主板隔離,有效保護核心板。
▲ 圖 13驅(qū)動電路隔離部分 ▲ 圖 14驅(qū)動電路驅(qū)動部分 ▲ 圖 15驅(qū)動板 2.3運放板 ??采用 opa4377芯片放大四路信號,通過調(diào)節(jié)電位器來改變放大倍數(shù)。
▲ 圖 16運放電路 ▲ 圖 17運放板 2.4電感板 ??將五個電感的走線集成在電感板中,使車模更加美觀,信號更不易干擾。
▲ 圖 18電磁模塊 ▲ 圖 19電感采集板正面 ▲ 圖 20電感采集板背面 第三章 軟 件系統(tǒng)設(shè)計及實現(xiàn) ??
穩(wěn) 定的程序是智能車高速平穩(wěn)自動尋線的基礎(chǔ)。本設(shè)計的智能車采用 CMOS攝像頭進行圖像的采集和二值化,圖像的采集和賽道信息的提取是整個程序的核心部分,只有在提取到正確信息的情況下我們才能對智能車作出精確有效的控制。而在智能車的轉(zhuǎn)向和速度控制方面,參考往屆的經(jīng)驗,使用了魯棒性很好位置式 PID控制算法,配合使用理論計算和動態(tài)參數(shù)補償?shù)霓k法,使智能車能夠穩(wěn)定快速尋線并作出相應(yīng)的控制。
3.1圖像處理部分 3.1.1賽道邊緣提取 ??在單片機采集圖像信號后需要對其進行處理以提取主要的賽道信息,同時,由于交叉道、起點線的存在,光線、雜點、賽道遠處圖像不清楚的干擾,圖像效果會大打折扣。因此,在軟件上必須排除干擾因素,對賽道進行有效識別,并提供盡可能多的賽道信息供決策使用。
▲ 圖 21攝像頭采集回傳圖像 3.1.2賽道信息分析與處理 ??中心線提取算法的基本思想如下:??1) 直接逐行掃描原始圖像,根據(jù)硬件二值化結(jié)果直接提取出邊界坐標;??2) 圖像數(shù)據(jù)量大,全部掃描一遍會浪費很多時間,利用前面已經(jīng)求出的中線位置判斷出中線的趨勢,從而推斷出下一行的中線大概位置,確定出掃描范圍,避免整行逐點掃描,節(jié)省時間。求中線時,因為近處的中線穩(wěn)定,遠處中線不穩(wěn)定,所以采用由近及遠的辦法;根據(jù)上一行的左右兩邊的坐標,確定本行的邊線掃描范圍。在確定的賽道寬度范圍內(nèi)提取有效賽道,這樣可以濾除不在寬度范圍內(nèi)的干擾;??3) 根據(jù)采集到的賽道寬度,判斷是否采集為真正賽道,濾除噪點造成的影響;??4) 圖像是遠處小近處大,所以賽道寬度范圍和前后行賽道中心的位置差別都要動態(tài)調(diào)整;??5) 比較左右賽道邊界坐標的大小,判斷賽道的有效性;
3.1.3坡道處理 ??坡道在掃描到特征的那幾行,賽道寬度都會突變得特別明顯,坡道的賽道寬度突變后不會突變回來,起跑線只是 2-3行有明顯的賽道寬度變小。據(jù)這個特征,當檢測到坡道時,目標速度降低,使得小車不會因為速度太快而飛起來,小車通過 PID控制,快速通過坡道。
▲ 圖 22坡道圖 3.2舵機控制 ??智能車是一個復(fù)雜的非線性系統(tǒng), PID控制的應(yīng)用十分廣泛。但是有很多不確定因素,導(dǎo)致傳統(tǒng)的 PID算法在智能車轉(zhuǎn)彎方面并不能很好的應(yīng)用,會出現(xiàn)入彎過慢,出現(xiàn)出彎不正等現(xiàn)象,為了讓智能車在轉(zhuǎn)彎時表現(xiàn)出更加優(yōu)秀的運動性能,通過將 PID控制中去掉 I項來加快系統(tǒng)的響應(yīng)速度,并將二次函數(shù)曲線結(jié)合 PD算法來優(yōu)化路徑,使得小車過彎更加流暢。通過測試發(fā)現(xiàn)用 PD控制來控制舵角可以取得較好的效果。將圖象經(jīng)過算法處理后得到的黑線位置和對應(yīng)的舵機 PD參照角度處理成一次線性關(guān)系。在 Ki置零的情況下,舵機在這種動態(tài)隨動系統(tǒng)對動態(tài)響應(yīng)性能要求更高。更重要的是,通過合理調(diào)節(jié) Kp參數(shù),發(fā)現(xiàn)車能在直線高速行駛時仍能保持車身非常穩(wěn)定,沒有震蕩,所以基本沒有必要使用 Ki參數(shù)。
3.3速度控制 ??要想智能車以最短的時間跑完整個賽道,不但要求優(yōu)越的方向控制算法,讓智能車盡量走更近的路,轉(zhuǎn)更少的彎。而且對于速度控制算法也有很高的要求,智能車在行駛過程中,不能夠完全勻速,在直道上應(yīng)該提速,而在彎道上應(yīng)該減速。在智能車沿著既定軌跡行駛的過程中,速度不能夠恒定不變,而應(yīng)該根據(jù)道路的具體形狀進行適當?shù)恼{(diào)整。當然,最好的方法是讓智能車始終以最快的速度通過整個賽道,但是如果速度始終調(diào)得太高,當小車遇到急彎或者是圓道時必然無法轉(zhuǎn)過來,就會沖出賽道。因此不能夠始終給最快的速度。然而,如果速度調(diào)得始終過低,就無法以最短的時間通過賽道。因此,速度應(yīng)該要隨著檢測到的道路形狀變化而變化。例如當前方道路為直道或類似直道時,應(yīng)該將 PWM波提得最高,讓通過主電機的電流達到最大,從而讓智能車以最快的速度行駛。當進入彎道時,應(yīng)該將 PWM波降到最低,讓通過主電機的反向電流達到最大,從而讓智能車以最短的時間將速度降到理想狀態(tài)。??賽道中的直道,是方向控制中最好處理的一種情況,因為只要小車沒有偏離賽道,就可以不進行偏轉(zhuǎn),而當智能車偏離賽道時也只需要一個較小的偏轉(zhuǎn),讓智能車能緩慢回歸賽道就可以了,具體的方法是計算掃描到圖像中線偏離賽道中線的平均值和中線的斜率,再將這兩個數(shù)分別乘上各自的比例系數(shù),加上舵機偏向中心位置時需要給出的高電平的值,作為 PWM波的高電平送入給舵機,就可以實現(xiàn)直道上的智能車方向控制了。
3.3.1大彎的方向控制算法 ??在道路中遇到大彎時需要轉(zhuǎn)彎,轉(zhuǎn)向角只受彎道的彎曲程度影響,但是距離大彎多遠就開始轉(zhuǎn)彎卻需要受到當前速度的影響,因為舵機在轉(zhuǎn)向時有一定的延時,舵機轉(zhuǎn) 60度大約需要 140毫秒,而智能車的最快速度可以達到 10米/ 秒,如果智能車當時運行的速度就是 10米/秒,那么當舵機轉(zhuǎn)過 60度時智能車已經(jīng)走過 1米多了,所以不能等到了彎道才開始轉(zhuǎn)彎,而是需要提前轉(zhuǎn)彎,而且速度越快,越是要提前得多,所以智能車轉(zhuǎn)彎提前多少就由速度控制,用比例控制就能收到很好的效果,而轉(zhuǎn)彎時轉(zhuǎn)多少卻僅僅受彎道的彎曲程度控制,彎曲程度越大,轉(zhuǎn)向角就也越大,彎曲程度越小,轉(zhuǎn)向角也就越小。具體的對應(yīng)關(guān)系通過實驗獲得,在此沒有列舉出具體的數(shù)據(jù)。
3.3.2急彎的方向控制算法 ??急彎的方向控制算法與大彎的方向控制算法相似,也是需要提前轉(zhuǎn)彎,而且提前多少轉(zhuǎn)彎也要受當前速度的控制,速度越大,越要提前轉(zhuǎn)彎,轉(zhuǎn)向角也是用彎道的彎道程度來決定的,急彎比大彎的彎曲程度更加大,因此需要的轉(zhuǎn)向角也要相應(yīng)增大。急彎的方向控制比大彎更難,很可能出線,因此在急彎的方向控制時更應(yīng)多加注意。
3.3.3“小 S型”道的方向控制算法 ??“小 S型”道一般是指“ S型”道彎曲角度小于等于 60度形成來回轉(zhuǎn)向,智能車過這種彎道時,基本可以從中間直接通過,而不需要轉(zhuǎn)彎和減速。因此,找準 “小 S型”道的正中心顯得至關(guān)重要,因為只有找準了“小 S型”道的正中心,智能車才能不轉(zhuǎn)彎不減速地通過 “小 S型”道,如果“小 S型”道的正中心找得不準,那么智能車就很容易沖出賽道。找 “小 S型”道的正中心的方法為:先找出“小 S型”道最左邊和最右邊的坐標值,然后將最左邊和最右邊的坐標值相加之后再除以 2,就得到了“小 S型”道的正中心坐標,智能車就可以沿著這個方向前進,而不需要轉(zhuǎn)彎。但是,由于 CMOS圖像傳感器掃描到的圖像可能出線誤差,那么智能車就有可能產(chǎn)生誤判,而沖出賽道。因此為了保險起見,必須當 “小 S型”道足夠小時,才能采用直接沖的辦法。
3.4智能車程序流程圖 ▲ 圖 23智能車程序流程圖 3.5 PID算法 3.5.1PID控制算法簡介 ??PID控制是工程實際中應(yīng)用最為廣泛的調(diào)節(jié)器控制規(guī)律。問世至今 70多年來,它以其結(jié)構(gòu)簡單、穩(wěn)定性好、工作可靠、調(diào)整方便而成為工業(yè)控制的主要技術(shù)之一。
▲ 圖 24單位反饋的 PID控制原理框圖 ??單位反饋 e代表理想輸入與實際輸出的誤差,這個誤差信號被送到控制器,控制器算出誤差信號的積分值和微分值,并將它們與原誤差信號進行線性組合,得到輸出量 u。
u(t)=kp[e(t) 1/TI∫e(t)dt TD*de(t)/dt] ??對應(yīng)的模擬 PID調(diào)節(jié)器的傳遞函數(shù)為
G(s)=U(s)/E(s)=kp[1 1/(TI*s) TD*s] 其中,??KP為比例增益, KP與比例帶 δ成倒數(shù)關(guān)系即 KP=1/δ, TI為積??分時間常數(shù), TD為微分時間常數(shù), u(t)為控制量, e(t)為偏差。
3.5.2增量式 PID控制算法 ??增量式 PID是指數(shù)字控制器的輸出只是控制量的增量 Δu(k)。采用增量式算法時,計算機輸出的控制量 Δ u(k)對應(yīng)的是本次執(zhí)行機構(gòu)位置的增量,而不是對應(yīng)執(zhí)行機構(gòu)的實際位置,因此要求執(zhí)行機構(gòu)必須具有對控制量增量的累積功能,才能完成對被控對象的控制操作。執(zhí)行機構(gòu)的累積功能可以采用硬件的方法實現(xiàn);也可以采用軟件來實現(xiàn),如利用算式程序化來完成。由式可得增量式 PID控制算式??u(k)=u(k-1) u(k)??Δu(k)=u(k)-u(k-1)=Kp[Δe(k)-e(k-1)] Kie(k) Kd[Δe(k)-2Δe(k-1)-e(k-2)]代碼實現(xiàn):??motor_duty=last_motor_duty motor_kp*(speed_pc[0]-speed_pc[1]) motor_ki
speed_pc[0] motor_kp (speed_pc[0] speed_pc[2]?2*speed_pc[1]);??增量式 PID具有以下優(yōu)點:??1) 由于計算機輸出增量,所以誤動作時影響小,必要時可用邏輯判斷的方法關(guān)掉。??2) 自動切換時沖擊小,便于實現(xiàn)無擾動切換。此外,當計算機發(fā)生故障時,由于輸出通道或執(zhí)行裝置具有信號的鎖存作用,故能保持原值。??3) 算式中不需要累加。控制增量△ u(k)的確定僅與最近 k次的采樣值有關(guān),所以較容易通過加權(quán)處理而獲得比較好的控制效果。在使用過程中我們發(fā)現(xiàn)傳統(tǒng)的增量式 PID,車速控制不及時 ,容易超調(diào) ,積分飽和。最終我們選擇的是增量式的 PID,能夠很好的滿足智能車的加減速以及停車問題。
3.5.3經(jīng)典 PID算法實現(xiàn)速度控制的具體實現(xiàn) ??我們對速度的控制采用了增量式 PID算法。該算法的基本策略是急彎降速,直道和小彎提速,由于我們的攝像頭掃描到的范圍較寬,所以在過急彎道時可以提前減速,先把掃描到的圖像進行處理,然后得出經(jīng)過反復(fù)實驗,將圖像經(jīng)過算法處理后得到的黑線位置和對應(yīng)的速度 PID參照速度處理成二次曲線的關(guān)系。在實際測試中,發(fā)現(xiàn)小車直道和彎道相互過度時加減速比較靈敏,與舵機轉(zhuǎn)向控制配合較好。但是,存在的局限一方面是車在彎道進直道后的加速和直道入彎道的速度控制并達不到最好的控制效果,彎道入直道減速不夠快速,直道入彎道加速得時機也不夠及時。我們做了進一步的改進,根據(jù)入彎時中線位置的特點動態(tài)改變二次曲線中最高點(直道的最高速度)和最低點(彎道的最低速度)的大小,使得控制效果更合理。
第四章 A I視覺部分 4.1任務(wù)概述 4.1.1.數(shù)字識別 ??在三岔路口需要對路口處的數(shù)字進行識別,并根據(jù)數(shù)字的奇偶性,來決策應(yīng)該走左邊還是走右邊。
4.1.2.AprilTag識別 ??AprilTag是一個視覺基準庫,在 AR,機器人,相機校準領(lǐng)域廣泛使用。設(shè)定為與二維碼相似但相對更簡單的特定標志,實現(xiàn)快速檢測。??在賽題中 AprilTag碼也代表著數(shù)字,依然通過識別其所代表的數(shù)字,并判斷奇偶性來得知靶標牌是在賽道的哪一側(cè)。
4.1.3.物體識別 ??賽題中包含動物圖案和水果圖案,動物類包含狗、貓、馬、豬、牛五個子類別,水果類包含蘋果、橘子、葡萄、香蕉、榴蓮五個子類別,圖案對象均為全身或整體照片。??如果路邊目標牌上的圖案屬于動物類,則車模需要在二維碼所在的區(qū)域(前后 50厘米)內(nèi)不少于 3秒鐘,方能駛出車模停止區(qū)域。如果路邊目標牌上的圖案屬于水果類,則車模需要使用激光發(fā)射器對準靶點中心發(fā)送一束激光,激發(fā)目標靶響應(yīng)。
4.2基于卷積神經(jīng)網(wǎng)絡(luò)的圖像識別的實現(xiàn) ??待檢測圖片內(nèi)部只包含其中一種物體,不涉及多物體檢測。其次待檢測圖片背景不復(fù)雜,全圖只有待檢物體本身,降低背景噪聲的引入對分類模型的影響。待檢測物體及其靶標如圖 25所示。??根據(jù)任務(wù)分別設(shè)計兩個十分類的模型,用來實現(xiàn)數(shù)字和水果 /動物的分類。實現(xiàn)流程相似,主要包括制作數(shù)據(jù)集,搭建神經(jīng)網(wǎng)絡(luò),模型訓(xùn)練,模型量化,硬件實現(xiàn)五個模塊,實現(xiàn)流程如圖 26所示。
▲ 圖 25靶標正面照 ▲ 圖 26卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)圖像識別流程用 ??到的模塊和包的版本如表 1:
??用到的包版本號
4.2.1收集數(shù)據(jù)及預(yù)處理 ??訓(xùn)練模型之前,我們需要先采集數(shù)據(jù)然后才能開始訓(xùn)練模型 .需要安裝任務(wù)分別采集數(shù)字與動物水果的照片。采集數(shù)據(jù)共有三種方法。??1. 通過爬蟲程序網(wǎng)上下載需要的圖片,爬蟲程序雖然能很快下載大量的圖片,但是存在圖片質(zhì)量低的問題,會下載很多錯誤的圖片,需要手動刪除掉。??2. 在網(wǎng)站上人工篩選符合要求的圖片,然后一張一張的下載下來,比較費時費力。??3. OpenARTmini模塊拍照并保存圖片在 SD卡,這種方法圖片質(zhì)量高,符合實際情況。??針對數(shù)據(jù)集不夠的問題,主要解決方法是數(shù)據(jù)增廣。用于增加訓(xùn)練數(shù)據(jù)集,使得訓(xùn)練的模型具有更強的泛化能力。需要根據(jù)自己的數(shù)據(jù)集特征來確定應(yīng)該使用哪幾種數(shù)據(jù)增廣方式,主要包括:水平翻轉(zhuǎn),旋轉(zhuǎn),縮放,噪聲等。圖 27是根據(jù)要求制作的原圖,圖 28是數(shù)據(jù)增廣后的數(shù)據(jù)集部分截圖,圖 29是拍攝的部分圖片。
▲ 圖 27原始圖像 ▲ 圖 28原始圖像數(shù)據(jù)增強部分后樣本 ▲ 圖 29攝像頭拍攝圖像數(shù)據(jù)增強后部分樣本 ▲ 圖 30文件夾分類命名為 0-9 ??使用以上方法生成的圖片保存在十個文件夾,命名為 0-9。編寫腳本從 Picture文件夾讀取圖片并轉(zhuǎn)換為數(shù)據(jù)集,生成 x.npy和 y.npy兩個文件。部分代碼圖 27所示。
▲ 圖 31讀取圖片轉(zhuǎn)換為 npy文件 ??設(shè)計模型進行訓(xùn)練之前,要進行數(shù)據(jù)預(yù)處理。在進行深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練時,一般要求輸入的數(shù)據(jù)范圍在 (-1,1)或(0,1)之間。對數(shù)據(jù)拆分 ,將其劃分為 80%的訓(xùn)練集與 20%測試集,訓(xùn)練集用于模型自身迭代,測試集用于診斷模型能力。然后,對數(shù)據(jù)進行歸一化處理,并通過 to_categorical函數(shù)將標簽數(shù)據(jù)轉(zhuǎn)換為 one-hot碼.本設(shè)計要訓(xùn)練一個 10分類的網(wǎng)絡(luò),那么要將標簽(圖片所對應(yīng)的類別號)轉(zhuǎn)換為長度為 10,并且僅有其所對應(yīng)的類別號的位置的數(shù)據(jù)為 1,其余均為 0,這樣一組 n維向量就被稱為 one-hot碼,以方便網(wǎng)絡(luò)進行迭代學(xué)習。
4.2.2搭建神經(jīng)網(wǎng)絡(luò) ??Keras是一個用 python編寫的深度學(xué)習 API,在機器學(xué)習平臺 Tensorflow上運行,換句話說他以 Tensorflow為后端,作為神經(jīng)網(wǎng)絡(luò)的推理引擎。最近的 Tensorflow也“高清復(fù)刻“了 Keras的 API。Keras的 API非常直奔主題,可以讓人盡快地將構(gòu)想轉(zhuǎn)變?yōu)榻Y(jié)果,簡化研究過程。正如官網(wǎng)對他的評價:簡單,靈活,強大。本設(shè)計采用的 Keras2.2.4版本以及 Tensorflow1.14.0版本,用到的庫、模塊和函數(shù)如表 2.
??表 2用到的庫、模塊和函數(shù) Keras有兩種排布的方式,一種是 Sequential方式,一種是 Function方式。前者像是串冰糖葫蘆,每一個都是一個單獨的個體,小兵之間是順序排列的,不能前后顛倒,不能互通有無。而 Function方式,像是各自組隊,可以一起也可以分開,但是最終還是一個整體,簡單的說, Sequential方式使用簡單,但是,只能搭建那些串行網(wǎng)絡(luò)。而 Function方式,則可以根據(jù)不同需求,進行排列布陣,形成各種各樣的陣型,搭配到一起使用,就像是編程時候用到的函數(shù)。??本設(shè)計將主要采用 Sequential模型構(gòu)建模式,相對來說, 0-9數(shù)字數(shù)據(jù)集顏色特征很少,數(shù)據(jù)集數(shù)目小,因此搭建一個具有 3層卷積和 1層全連接的簡單卷積神經(jīng)網(wǎng)絡(luò) 3
Conv 1 Dense的 CNN。如圖 30所示,該卷積神經(jīng)網(wǎng)絡(luò)的中間層采用 rule激活函數(shù),輸出層采用 softmax激活函數(shù)。??在動物 /水果十分類任務(wù)中,每一類原始圖片分別有 100張左右,經(jīng)過數(shù)據(jù)集增廣至每類 2000張左右,總共 2萬張左右。同樣搭建一個具有 3層卷積和 1層全連接的簡單卷積神經(jīng)網(wǎng)絡(luò),該卷積神經(jīng)網(wǎng)絡(luò)的中間層采用 rule激活函數(shù),輸出層采用 softmax激活函數(shù)。與數(shù)字分類不同的是,如圖 31所示,每個激活層前面添加 BatchNormalization層,使訓(xùn)練過程更加穩(wěn)定,提高訓(xùn)練速度,并且減少過擬合。在池化層后面加 dropout層,隨機丟棄一部分中間特征,防止模型過擬合。
4.2.3模型訓(xùn)練 ??優(yōu)化器負責模型的調(diào)優(yōu),學(xué)習率( lr)的設(shè)置有講究,過大的學(xué)習率會提高模型的學(xué)習速度,但是太大了可能反而適得其反,還可能會導(dǎo)致模型無法得到最優(yōu)解;而過小的學(xué)習率,會導(dǎo)致訓(xùn)練速度過慢,陷入局部最優(yōu)不能自拔,選擇上要進行試錯調(diào)整,這里選擇 opt = Adam(lr=0.001)。這里的評價標準,選擇 categorical_crossentropy,這也是專門適用于多分類問題的損失函數(shù)。這里的 epochs代表總共迭代遍歷數(shù)據(jù)集多少多少次, batch_size為一次迭代需要使用多少數(shù)據(jù)。小了能讓模型迭代快,但是訓(xùn)練效果容易震蕩,還妨礙學(xué)到全局特征;大了能讓學(xué)習過程更平穩(wěn),但模型收斂效率會下降,還可能陷入局部最優(yōu)。回調(diào)函數(shù) ModelCheckpoint負責模型的保存,會將訓(xùn)練過程中遇到的最好結(jié)果即時保存下來。數(shù)字分類模型訓(xùn)練部分代碼如圖 32所示。
▲ 圖 32 3*Conv 1*Dense的 CNN(數(shù)字任務(wù)) ▲ 圖 33模型訓(xùn)練 ??訓(xùn)練好的模型用可視化模型結(jié)構(gòu)工具 Netron進行查看。本設(shè)計搭建的網(wǎng)絡(luò)模型如圖 34、圖 35所示。
▲ 圖 34Netron可視化數(shù)字分類網(wǎng)絡(luò)模型結(jié)構(gòu) ▲ 圖 35可視化動物 /水果分類網(wǎng)絡(luò)模型結(jié)構(gòu) 4.2.4模型量化 ??神經(jīng)網(wǎng)絡(luò)模型權(quán)重的多少往往直接反映出一個模型的復(fù)雜程度,而權(quán)重越大,模型的效果一般會更加好。MCU的計算資源和存儲資源都遠不能和 PC相比,在 PC端可以良好運行的 AI模型在 MCU上運行有很大困難。出于這一目的,模型量化技術(shù)應(yīng)運而生。而量化又分為訓(xùn)練中量化,以及訓(xùn)練后量化。在模型訓(xùn)練時需要較高精度的權(quán)重,這樣才能精準地降低損失值,但是在模型預(yù)測時沒有這個要求,所以本設(shè)計選擇訓(xùn)練后進行模型量化。訓(xùn)練后量化技術(shù)可以理解成一種有損壓縮,會損失一點精度,但是,會顯著降低模型尺寸,同時提高運行效率。量化的原理其實很簡單。模型在訓(xùn)練時一般是使用 float32類型來存儲的,每一個權(quán)重數(shù)據(jù)需要占用 4個字節(jié),模型的推理改用 int8,這樣,每存儲一個權(quán)重,將只消耗 1個字節(jié),模型的尺寸會縮小為之前的 1/4,而且這樣對精度的影響通常極小,只要是在可接受的范圍內(nèi),我們就降低了模型的存儲尺寸。而且,目前神經(jīng)網(wǎng)絡(luò)加速器或是神經(jīng)網(wǎng)絡(luò)加速庫,一般只支持 int8類型的數(shù)據(jù)輸入,對 float類型無能為力。模型小也大大減輕了對存儲器系統(tǒng)和 Cache的壓力。這樣一來,在減小了模型尺寸的同時,還可以加速模型的運行。本設(shè)計借用 NNCU模型轉(zhuǎn)換器,其 GUI界面如圖 36所示。
▲ 圖 36NNCU模型轉(zhuǎn)換器 4.2.5實現(xiàn)結(jié)果 ??模型文件已經(jīng)量化完畢,接下來我們量化之后的模型文件放入 OpenART mini中跑起來。實現(xiàn)步驟的流程圖如下圖 37。
▲ 圖 37模型載入流程圖 ??運行模型進行模型預(yù)測,識別到帶黑框的圖片后可通過串行終端界面看到提示數(shù)據(jù)。實現(xiàn)結(jié)果表明,識別準確度較高與實時性較好,模型運行效果良好。實現(xiàn)結(jié)果如圖 38至圖 42圖像所示。
▲ 圖 38水果識別正確示例 -葡萄 ▲ 圖 39水果識別正確示例 -香蕉 ▲ 圖 40動物識別正確示例 -豬 ▲ 圖 41動物識別正確示例 -馬 ??圖 42分類錯誤,結(jié)果正確示例本設(shè)計分別對 0-9數(shù)字圖片和十種水果動物進行識別,實際測試中調(diào)整合適光照以及圖片大小,識別的準確率如下表 3所示。
▲ 表 3數(shù)據(jù)集及其識別準確率 4 .3AI識別控制算法??利用上文提到的 openmvIDE,采用 python編程控制 openartmini模塊及其外設(shè)。任務(wù)實現(xiàn)流程圖如圖 43所示。
▲ 圖 43任務(wù)實現(xiàn)流程圖 4.3.1識別 AprilTag ??AprilTag的家族為 TAG25H9,包含 0-34共35個數(shù)字,只需識別 0-9。首先制作AprilTag,直接從 OpenMV的IDE里生成。如圖所示。
▲ 圖 44TAG25H9 0-9 ??由于 openartmini模塊自帶識別 AprilTag庫函數(shù),調(diào)用函數(shù)即可識別。
4.3.2舵機控制 ??伺服電機通常被稱為舵機,它是一種帶有輸出軸的小裝置。向伺服器發(fā)送一個控制信號時,輸出軸就可以轉(zhuǎn)到特定的位置。只要控制信號持續(xù)不變,伺服機構(gòu)就會保持軸的角度位置不改變。如果控制信號發(fā)生變化,輸出軸的位置也會相應(yīng)發(fā)生變化。??我們使用了兩個數(shù)字舵機,設(shè)定舵機頻率均為 200HZ,控制信號來自 openartmini模塊給出的兩個 PWM信號。下方舵機實際控制角度范圍為 180°,用于改變攝像頭方向,以便尋找待識別圖像。上方舵機的控制信號保持不變,作用是穩(wěn)定攝像頭支架。
4.3.3激光發(fā)射器 ??使用帶有可調(diào)透鏡的微型激光器,輸出功率為 5mW。調(diào)整光斑直徑至合適大小。條件觸發(fā)后, openartmini模塊給出時長 1.2s,頻率 100HZ、占空比 50%的控制信號。激光發(fā)射器發(fā)射激光至靶心,即可認為打靶成功。
第五章 仿 真與調(diào)試 ??
要 想將所設(shè)計的算法運用到智能小車上,并很好的控制智能小車的各個機構(gòu)協(xié)調(diào)工作,并不是一蹴而就的事情,必須經(jīng)過初期的設(shè)計、仿真、制作和長期的調(diào)試工作。而這一系列工作也是反復(fù)循環(huán)進行的,在調(diào)試過程中對設(shè)計方案進行修改,然后重新仿真制作后再進行新一輪的調(diào)試。
5 .1 IAR在線調(diào)試??程序開放在 IAR Embedded Workbench IDE下進行, Embedded Workbench forARM是 IAR Systems公司為 ARM微處理器開發(fā)的一個集成開發(fā)環(huán)境 (下面簡稱 IAR EWARM)。比較其他的 ARM開發(fā)環(huán)境, IAR EWARM具有入門容易、使用方便和代碼緊湊等特點。EWARM中包含一個全軟件的模擬程序 (simulator)。用戶不需要任何硬件支持就可以模擬各種 ARM內(nèi)核、外部設(shè)備甚至中斷的軟件運行環(huán)境。從中可以了解和評估 IAR EWARM的功能和使用方法。IAR EWARM中包括集成開發(fā)環(huán)境 IDE、處理器專家、全芯片仿真、可視化參數(shù)顯示工具、項目工程管理、 C交叉編譯器、匯編器、鏈接器以及調(diào)試器。其中在本設(shè)計中重要的部分就是集成開發(fā)環(huán)境和調(diào)試器, IAR軟件自帶在線調(diào)試功能,在下載器下載完成后可以對智能車的各個參數(shù)進行直觀準確的觀察。
5.2MATLAB數(shù)據(jù)處理 ??MATLAB是矩陣實驗室( Matrix Laboratory)的簡稱,是美國 MathWorks公司出品的商業(yè)數(shù)學(xué)軟件,用于算法開發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計算的高級技術(shù)計算語言和交互式環(huán)境,主要包括 MATLAB和 Simulink兩大部分。本次主要使用 MATLAB完成數(shù)據(jù)的可視化處理以及算法仿真。通過藍牙串口將需要觀測的數(shù)據(jù)發(fā)至電腦,使用 MATLAB進行繪圖處理。根據(jù)采集到的數(shù)據(jù)進行相關(guān)參數(shù)的整定。??5.3按鍵及液晶輔助調(diào)試??調(diào)試賽車是比賽的重要一環(huán)。為了調(diào)試方便,設(shè)計了按鍵加 OLED的方案。這樣一來,可以通過 OLED屏幕很方便地觀看車模運行參數(shù)及攝像頭看到的路面圖像,方便對路況進行人工分析并采用按鍵和撥碼開關(guān)的方式及時調(diào)整,使得車??稍谫悎錾峡焖偾袚Q速度模式以適應(yīng)比賽。
▲ 圖 46按鍵液晶調(diào)試 5.4串口通信調(diào)試 ??openartmini模塊與主控單片機進行串口通信。先初始化串口,波特率設(shè)置為115200,設(shè)置發(fā)送和接受信息引腳。可以發(fā)送接受字符串、列表、多種進制數(shù)等信息。我們選擇雙方傳遞信息的形式為十六進制數(shù)據(jù), openartmini模塊發(fā)送信息使用 uart.write()函數(shù),接受信息使用 uart.read()函數(shù)。??實際測試時,先使用串口轉(zhuǎn) TTL模塊在電腦端進行測試,使用串口助手界面如下,簡單大方,滿足測試需求。后續(xù)測試與主控單片機能夠進行正常通信。
▲ 圖 47串口助手調(diào)試界面 第六章 心 得總結(jié) ??
報 名參加“恩智浦杯”智能汽車競賽,我們遵循學(xué)習知識第一,志同道合友誼第一,比賽獲獎第二的原則。??設(shè)計制作過程中,通過小組成員的努力思考與實踐,以及學(xué)長比賽的經(jīng)驗,我們有了基本思路,包括機械,電路,以及最重要的控制上的創(chuàng)新思想。機械方面我們的特色在于輪胎與舵機轉(zhuǎn)向結(jié)構(gòu)在傳感器布局。對于電感 ,我們采用傳統(tǒng)的電感排布方法。在電路方面,有 RT1064主控模塊、電機驅(qū)動模塊、電源模塊、傳感器模塊、放大電路、輔助模塊。這六個模塊分別設(shè)計,不同成員負責不同部分,比較芯片優(yōu)異和構(gòu)造合適電路。最終確定現(xiàn)在的電路。??在控制方面,我們使用比賽推薦的開發(fā)工具調(diào)試程序,充分利用上位機等工具以提高效率經(jīng)過小組成員不斷研討、爭論、改進,終于設(shè)計出三套適用于不同情況下的,穩(wěn)定的程序。??在幾個月的準備中,在場地、經(jīng)費方面都的到了學(xué)校和學(xué)院的大力支持,在此特別感謝一直支持和關(guān)注智能車比賽的學(xué)校和學(xué)院領(lǐng)導(dǎo)以及各位老師。同時也感謝比賽組委會能組織這樣一項很有意義的比賽。??這段歷程,我們一同熬過無數(shù)個日夜,熟悉了彼此也成長了自己。從走時關(guān)燈到天亮了記得把燈,關(guān)上實驗室就像我們另一個家。這段經(jīng)歷將永伴我們一生。比賽很艱辛 ,但我們享受其中的快樂,受益匪淺,
智能車 競賽的歷程會成為我們最珍貴的回憶。