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