簡 介: 本文主要介紹了第十六屆智能車競賽智能視覺組別參賽車模的相關(guān)設(shè)計思想。此四輪車模使用C型車模、RT1064作為核心控制單元。利用總鉆風(fēng)灰度攝像頭采集的圖像數(shù)據(jù)進行基本循跡和元素識別;利用OPENART mini進行部署神經(jīng)網(wǎng)絡(luò)模型進行圖像分類識別;利用PID控制調(diào)節(jié)電機的輸出,達到對車模速度的閉環(huán)控制。為了提高模型車的速度和穩(wěn)定性,使用山外調(diào)試助手、匿名上位機等軟件硬件進行了大量調(diào)試測試工作。實際調(diào)試結(jié)果表明,該系統(tǒng)設(shè)計方案確實可行。學(xué) ? ?校:首都師范大學(xué)關(guān)鍵詞
: RT1064,電路設(shè)計,傳感器,攝像頭循跡,機器學(xué)習(xí),PID控制
隊伍名稱:首師智能視覺
參賽隊員:李秉蔚???
王琪????
陳翔宇???
帶隊教師:張盛博???
第一章 ?引言
??全國大學(xué)生智能汽車競賽是以立足培養(yǎng)、重在參與、鼓勵探索、追求卓越為指導(dǎo)思想,鼓勵創(chuàng)新的一項科技競賽活動。智能視覺組別要求在規(guī)定的汽車模型——C型車模上,使用NXP公司的微控制器作為核心控制模塊,通過增加道路傳感器、電機驅(qū)動模塊以及編寫相應(yīng)控制程序,制作完成一個能夠自主識別道路的模型汽車。特別地,智能視覺組別還加入了圖片識別分類的賽題任務(wù),要求參賽選手不僅要完成賽道組的元素,還要對固定位置處的圖片標靶進行識別并完成相應(yīng)的動作任務(wù),于我們來講是一項難度不小的挑戰(zhàn)。??在這份報告中,我們小組通過對小車設(shè)計電路制作、機械結(jié)構(gòu)、電控算法的介紹,詳盡地闡述了我們的思想和創(chuàng)意,具體表現(xiàn)在硬件上的創(chuàng)新設(shè)計,以及軟件上的獨特想法,凝聚著我們的心血和智慧。此次備賽過程中,我們在付出了艱辛的努力勞動去調(diào)節(jié)軟件中算法與參數(shù),調(diào)節(jié)車模機械結(jié)構(gòu)和電路板焊接測試等工作。我們小組的三位組員相互配合,分別涉及了控制、傳感器技術(shù)、AI識別、電工電子技術(shù)、計算機、機械等多個學(xué)科,這對我們的知識融合和實踐動手能力的培養(yǎng)有極大的推動作用。當(dāng)然由于準備時間有限,我們的方案還有許多不足之處,在比賽中還暴露出了很多問題,這些問題會在我們學(xué)習(xí)更多專業(yè)知識、掌握更多經(jīng)驗后,在未來逐步解決。第二章 ?電路設(shè)計
??我們車上有三塊電路板:負責(zé)所有控制、為各種元件提供電源,帶有各種接口的主板;負責(zé)電機驅(qū)動的驅(qū)動板;負責(zé)收集電磁信號,帶有電感的電磁棍。2.1 主板(PCB35221)
2.1.1 核心板
??在我們車上直接用的是逐飛科技所給的核心板。2.1.2 電源部分
??我們車上的傳感器和器件需要不同電壓的供電:單片機,攝像頭,屏幕,蜂鳴器,按鍵,撥碼開關(guān),按鍵擴展板,五軸按鍵等器件需要3.3V電壓;編碼器,無線串口,有線串口等需要5V電壓;舵機需要6V電壓。故為了滿足不同器件的需求,我們采用多個電源芯片供電。??電源由XT30接口接入,在通過一個470mF電解電容濾波后,經(jīng)過主電源開關(guān),再通過電路保護后,輸入給電源芯片。??由于RT1064有上電時序問題所以先要給核心板進行供電,才能對外設(shè)進行供電,核心板支持5V和3.3V供電,我用的是5V供電,使用ME6118(5V)將輸入電壓轉(zhuǎn)為5V,給核心板上電。??由于舵機供電需要6V,而且外設(shè)供電要求晚于核心板供電,所以我選用TPS54302輸出6V。1腳接地,2腳為輸出電壓,3腳接輸入電壓,4腳接反饋電阻,通過反饋電阻的分壓值來確定輸出電壓的大小,5腳用來對TPS54302一反面進行開關(guān)控制,另一方面是為了在CR引腳為低時讓TPS54302的電平為低,因為TPS54302的EN引腳有電壓限制所以并聯(lián)電阻分電壓,6引腳接一個0.1uF??的陶瓷電容與SW腳相隔。??分別使用RT9013和ME6118解決除攝像頭外的3.3V和5V用電器的供電問題。??由于攝像頭屬于金貴器件,為保護攝像頭,使其供電盡可能正常所以特別用一個單獨的電源芯片為其產(chǎn)生電壓。我這里使用的是RT9013。2.1.3 接口部分
??車上所有的傳感器和模塊需要連接到主板,我們的主板上設(shè)置了這些傳感器和模塊所需的接口。??因為舵機、攝像頭和激光都在車的前部所以把它們放在主板的前面,所有的開關(guān)都放在板子的外側(cè),因為電機和編碼器電池都在車的后側(cè)所以把編碼器、電機信號和電源輸入都放在了主板的后方2.1.4 輔助調(diào)試部分
??為輔助調(diào)試,主板上設(shè)計有4個LED作為電源指示燈,指示電源芯片工作狀態(tài),當(dāng)他們不正常熄滅時應(yīng)立即斷開電源;此外還有1個RGB燈,1個有源蜂鳴器用于輔助調(diào)試。2.2 電機驅(qū)動板(PCB35221)
2.2.1 電機驅(qū)動雙橋模型
??電機驅(qū)動的核心部分由IR2104半橋驅(qū)動芯片和LR7843MOS管組成,IR2104的1腳接VCC12V,2腳為PWM控制信號輸入,4腳接地,5腳為LO為低輸出,其輸出信號與輸入信號反相,幅值加大為20V,7腳HO為高輸出,其輸出信號與輸入信號同相,幅值加大為20V,3腳SD為使能,接地時輸出為低。??LR7843為N溝道增強型場效應(yīng)管,其1腳為G級,2腳為D級,3腳為S級,當(dāng)G級與S級有一個正電壓時,D級與S級會導(dǎo)通。故將控制信號接G,電池和電機分別接到D和S級,即可用控制信號控制電池與電機間的通斷,從而實現(xiàn)驅(qū)動電機的功能。??RT1064輸出的PWM信號進入電機驅(qū)動板后,經(jīng)過IR2104后變成了兩個幅值為20V的方波,其中一個與最開始的PWM信號同相,另一個反相,這兩個信號分別接入其后的LR7843的G級,分別控制電機的一個引腳與電池正或電池負的通斷,由于兩個控制信號反相,所以當(dāng)電機引腳和電池正極被導(dǎo)通時,與電池負極會被斷開。以上一個IR2104控制兩個LR7843驅(qū)動電機的一個引腳為一路,我們的電機驅(qū)動板上一共有這樣的四路,從而可以控制兩個電機以不同轉(zhuǎn)速正反轉(zhuǎn)。??需要注意的是,MOS管的D、S級與電池、電機間的連線會有很大電流流過(尤其是在電機不正常運行時,如:堵轉(zhuǎn))(超過3A),故建議這些線越粗越好。2.2.2 隔離模塊
??使用74hc245進行信號隔離,當(dāng)OE腳接低電平時信號導(dǎo)通,當(dāng)OE腳接高電平時信號不導(dǎo)通,這取決于DIR引腳是高電平還是低電平2.2.3 電壓轉(zhuǎn)換模塊
??在驅(qū)動板中74hc245需要5V的電壓所以需要進行電壓轉(zhuǎn)換為5V, 而IR2104芯片和LR7843MOS管需要12V電壓,可以使用B0512對5V電壓轉(zhuǎn)換為12V。2.3 電磁傳感器(PCB35710)
??我們使用了五組由10mH電感和6.8nF電容并聯(lián)組成頻率約為20kHz的諧振電路,可以感應(yīng)出幾十mV的正弦電壓信號,用放大電路對該信號進行放大檢波將其轉(zhuǎn)換為直流電壓,用ADC讀取該電壓以計算賽道中線位置。2.4 陀螺儀加速度計
??我們使用FXAS21002陀螺儀和FXO8700加速度計作為姿態(tài)傳感器。2.5 調(diào)試和比賽過程中發(fā)現(xiàn)的電路部分的問題
第三章 ?機械結(jié)構(gòu)
3.1 車模
??此次競賽的四輪賽車車模選用C1型車模。3.2 云臺
??為了方便OPENART mini對圖片進行識別并對水果進行打靶,在車的前部使用了自主設(shè)計的云臺,在固定了OPENART mini的高度后使用一個舵機,實現(xiàn)使OPENART mini在車的舵機上方可以左右的轉(zhuǎn)動,從而可以較好的完成比賽任務(wù)。第四章 ?微控制器控制
4.1 開發(fā)工具及模塊功能庫
??針對本組采用的NXP i.MX RT1064芯片,我們使用了主流的Keil uVision5(5.28)作為微控制器軟件開發(fā)工具,搭配逐飛科技提供的DAP-Link下載編程燒錄器進行程序燒錄。在獲取相關(guān)資料后,在Keil中安裝該芯片的Pack包即可完成軟件開發(fā)環(huán)境的搭建。??我們參考了逐飛提供的各功能模塊的范例程序和庫函數(shù),并將庫函數(shù)整理成實驗室通用函數(shù),符合個人的編程習(xí)慣,提高使用效率。4.2 ?PID控制原理
4.3 基于攝像頭的賽道信息檢測
??我們采用總鉆風(fēng)灰度攝像頭進行圖像獲取,通過軟件二值化的方法來獲取圖像中的軌跡特征。根據(jù)閾值選取的不同,二值化的算法分為固定閾值和動態(tài)閾值。??固定閾值的二值化,一個閾值往往只對應(yīng)一類圖像,如果圖像的光照變暗了,或者其他因素改變了,那個單閾值情況的二值化效果會大打折扣,其適應(yīng)性很低。動態(tài)二值化是根據(jù)圖片的灰度直方圖,得到一個適合本圖像的二值化閾值,顯然這種方法得到的閾值是適合實時的圖像的,但也隨之帶來了對整幅圖像數(shù)組進行計算的要求,若調(diào)教不好,則會每處理一張圖片耗費過長時間,影響整個程序的效率。??二值化方法我們嘗試了大津法和均值法求閾值。對比兩種方法,大津法確實能夠在光線均勻的情況下有很好的表現(xiàn),能夠很好提取出賽道特征,但是在賽道的某些部分由于光線或背景干擾,因該方法計算圖像前景和背景求類內(nèi)方差的原因,對灰度分布不均勻的情況下表現(xiàn)很差。且該方法是通過比較類內(nèi)方差最小來獲得最好的閾值,因此在沒有優(yōu)化過的該方法是耗時的且普適性較低的。而均值二值化是求取整個圖像的像素點,進行相加然后求平均值獲得的閾值,他的計算顯然要節(jié)省很多,并且效果較優(yōu)。若在過亮過暗背景下,可通過直接在求得均值后加或減OFFSET_AVE來進行調(diào)整即可。??我們直接獲取的圖像大小為188120,經(jīng)過處理壓縮獲得圖像大小為8260。首先,是在對圖像的保真影響很小的前提下,通過在原獲取圖像上每兩個像素點取一個像素點進行壓縮,壓縮后的圖像數(shù)組的減小可以提高程序的運行效率。其次,為了解決采集圖像不正的問題,經(jīng)過測試,82*60圖像最為居中,在取列時進行縮減,來保證圖像的對稱,方便處理。4.4基于攝像頭的基本循線
??對于基本循線來講,我們采取了最普通的搜線方式,通過上一行中點的列坐標向左向右進行搜線,尋找黑白色跳變點,找到左右邊線后即可計算出新中點的坐標。我們通過當(dāng)前中值上方為黑且沒頂格的規(guī)則來判斷有效行,該檢測規(guī)則對于彎道與直道都適用,能夠在一定程度上避免賽道外的圖像對我們的處理造成影響。??在方向環(huán)控制中,將求取的各行中線縱坐標與圖像中值的偏差參與方向環(huán)PD的控制計算,通過系數(shù)的整定來確定舵機的轉(zhuǎn)向打角。根據(jù)車模運行速度的不同,我們所取用參與計算的圖像行也不同,低速運行的車模取用圖像靠下部分的權(quán)重較大,在提速后,對于前瞻性的要求更高,則需要在偏差計算中將圖像上方的權(quán)重增加,讓車模在過彎時較早響應(yīng)并轉(zhuǎn)向。4.5 基于攝像頭的特殊元素處理
4.5.1 十字處理
??由于攝像頭的高度較高,車模在以斜入十字的姿態(tài)下通過十字元素的時候可能會左轉(zhuǎn)或右轉(zhuǎn),所以必須要對十字進行特殊處理。??最初,對十字處理的方式比較粗暴,由于過十字時會先遠處行兩側(cè)丟線,這時直接將近處未丟線行的中線直接復(fù)制到遠處丟線行。當(dāng)近處行都丟線時,在將遠處未丟線行復(fù)制到近處行。但是,這就存在著一個問題,當(dāng)十字接彎道時,十字中補到的線就會偏向一側(cè)。因此最終這個方法沒有被采用。??另外一種則是在檢測到十字標志位時,則去找到左上左下、右上右下的拐點,記錄四個拐點的橫縱坐標,將左右兩側(cè)的拐點分別拉線即可補出線來,經(jīng)測試該方法效果較優(yōu)。4.5.2 車庫處理
??車庫元素的解決相對簡單,只要在幾行檢測到多個跳變點即可。但是在本賽題內(nèi)的賽道中會貼有AprilTag碼,其在幾行內(nèi)的跳變點和斑馬線的特征相似,誤判兩個賽道元素會導(dǎo)致在斑馬線處停車、車模運行幾周的計數(shù)錯誤等問題出現(xiàn)。由于斑馬線相較于車庫,車庫的一側(cè)無黑色邊線,因此需要通過該特征進行區(qū)分,在車庫的判斷中加入有多個跳變點的一行的一側(cè)丟線、一側(cè)不丟線的判斷條件加以限制。4.5.3 三岔處理
??判斷三岔賽道元素采用三個條件同時判斷來避免和其他賽道元素誤判,條件一是找到左下拐點和右下拐點,條件二是上方某兩行左右皆丟線,條件三是圖像上方黑點數(shù)大于某個值。只有這三個條件同時成立時,方進入三岔標志位。4.5.4 環(huán)島處理
??我將整個環(huán)島處理為一個狀態(tài)機,該方案計算量較小,但是該方案為流程化方案,若在判斷過程中有一個步驟意外出錯都無法正確判斷為環(huán)島入口,將導(dǎo)致車模無法入環(huán)甚至沖出賽道。??如上圖,我們進入環(huán)島的方案分為多個標志位進行判斷,必須在上一個標志位判斷完畢后再進入下一個標志位。??以找到右環(huán)島為例,找到右下拐點且找到弧形的拐點用來判斷確認該元素為環(huán)島,將找到的弧形拐點和右下的拐點記錄下來,將兩個點進行補線,并且標志位置1,開始進入狀態(tài)機判斷;當(dāng)找到右下的弧形拐點且右上有拐點時,環(huán)島標志位置2;當(dāng)賽道寬度減小,左右兩側(cè)皆不丟線,環(huán)島標志位置3;當(dāng)檢測到某幾行左右兩側(cè)皆丟線時,標志位置4,在該標志位下,左邊不再丟線且找到右上拐點時,將右上拐點與弧形拐點或者與屏幕右下的像素點進行拉線,在兩側(cè)邊線恢復(fù)正常后,清標志位,出環(huán)島。4.6 基于OPENART mini的AI視覺任務(wù)實現(xiàn)
4.6.1 識別方案及技術(shù)路線
4.6.2 人工神經(jīng)網(wǎng)絡(luò)
① 數(shù)據(jù)采集及分析
??數(shù)據(jù)集通過OpenART mini采集,提供模型訓(xùn)練時所需要的訓(xùn)練集、驗證集和測試集。② 模型的搭建及訓(xùn)練
??完整的卷積神經(jīng)網(wǎng)絡(luò)先通過幾個卷積層(conv) 和池化層(pool) 處理,然后再由幾個全連接層(fc) 進行處理。- 離線訓(xùn)練:采用由Python編寫的開源人工神經(jīng)網(wǎng)絡(luò)庫Keras進行搭建模型,其是一個高級神經(jīng)網(wǎng)絡(luò)API,能夠以Tensorflow作為后臺運行。
- 在線訓(xùn)練:EDGE IMPULSE平臺