智能循跡小車硬件設(shè)計(jì)及路徑識別算法
摘要:設(shè)計(jì)用于全國大學(xué)生智能汽車競賽用的循跡小車,攝像頭采集黑線引導(dǎo)線的位置,直流電動機(jī)驅(qū)動小車后輪,舵機(jī)作為轉(zhuǎn)向驅(qū)動。根據(jù)實(shí)際應(yīng)用環(huán)境,提出用于循跡的圖像處理方法,以排除黑線引導(dǎo)線以外物體的干擾,同時(shí)提出一種適應(yīng)力強(qiáng)的小車循跡策略。實(shí)驗(yàn)表明,在這種控制策略下,小車運(yùn)行穩(wěn)定,能夠排除各種干擾,并且能夠使小車維持很高的速度行駛。
關(guān)鍵詞:循跡;單片機(jī);圖像處理
全國大學(xué)生智能汽車競賽要求在組委會提供統(tǒng)一智能車競賽車模、單片機(jī)MC9S12DG128開發(fā)板、開發(fā)軟件Code Warrior和在線調(diào)試工具的基礎(chǔ)上,制作一個能夠自主識別路線的智能車,它將在專門設(shè)計(jì)的跑道上自動識別道路行駛。中心目標(biāo)是,在不違反大賽規(guī)則的情況下以最
短時(shí)間跑完單圈賽道。
本文主要對車模整體設(shè)計(jì)思路、硬件與軟件設(shè)計(jì)及車模的裝配調(diào)試過程作簡要的說明。
1 整體設(shè)計(jì)
系統(tǒng)按照功能劃分為:電源模塊、單片機(jī)控制系統(tǒng)模塊、運(yùn)行調(diào)試模塊、路徑識別模塊、直流電機(jī)驅(qū)動模塊、舵機(jī)轉(zhuǎn)向模塊、速度測量模塊等。圖1是小車系統(tǒng)硬件模塊圖。本文重點(diǎn)介紹路徑識別模塊、直流電機(jī)驅(qū)動模塊、舵機(jī)轉(zhuǎn)向模塊、速度測量模塊。
1.1 路徑識別模塊
路面信息檢測模塊要能夠?qū)崿F(xiàn)檢測路徑參數(shù)。將面陣CMOS用于賽道參數(shù)檢測的方案,充分利用S12單片機(jī)內(nèi)部硬件資源ATD模塊,直接采集CMOS輸出的模擬信號,可以獲得滿足參數(shù)檢測需要的圖像,計(jì)算出賽道參數(shù),進(jìn)而完成路面信息檢測。檢測路徑傳感器采用CMOS圖像傳感器。普通CMOS傳感器圖像分辨率都在300線之上,遠(yuǎn)大于光電管陣列。
通過鏡頭,可以將車模前方很遠(yuǎn)的道路圖像映射到CMOS器件中,從而得到車模前方很大范圍內(nèi)的道路信息。對圖像中的道路參數(shù)進(jìn)行檢測,不僅可以識別道路的中心位置,同時(shí)還可以獲得道路的方向、曲率等信息。利用CMOS器件,通過圖像信息處理的方式得到道路信息,可以有效控制車模運(yùn)動,提高路徑跟蹤精度和車模運(yùn)行速度。
1.2 直流電機(jī)驅(qū)動模塊
為了利用單片機(jī)實(shí)現(xiàn)對主電機(jī)的控制,使用Motorola公司的H橋芯片MC33886。該芯片的供電電壓在5~40 V之間,MOSFET管的導(dǎo)通電阻為120 mΩ,控制信號的輸入兼容TTL/CMOS電平,PWM的最高頻率可達(dá)10 kHz,同時(shí)具有短路保護(hù)功能和故障信號的輸出。
MC33886的應(yīng)用示意圖如圖2所示。圖中,V+是為直流電機(jī)供電的電源。IN1和IN2兩個邏輯電平輸入端分別控制輸出端OUT1和OUT2。當(dāng)IN1輸入高電平時(shí),OUT1輸出也為高電平——即通過H橋與V+導(dǎo)通;當(dāng)IN1輸入低電平時(shí),OUT1輸出也為低電平——即通過H橋與GND導(dǎo)通。IN2和UT2的關(guān)系與此相同。FS為故障信號開漏極輸出,低電平有效。當(dāng)D1是高電平或者D2是低電平時(shí),同時(shí)禁用OUT1和OUT2的輸出,使OUT1和OUT2同時(shí)變?yōu)楦咦钁B(tài)。通過控制IN1和IN2的電平,即可控制電機(jī)正轉(zhuǎn)、反轉(zhuǎn)、停轉(zhuǎn)。對IN1和IN2的電平信號進(jìn)行脈寬調(diào)制,即可控制電機(jī)的轉(zhuǎn)速。
[!--empirenews.page--]
主電機(jī)驅(qū)動電路采用大賽組委會指定的競賽用電池直接為MC33886及主電機(jī)供電。MC33886的所有輸入、輸出信號均采用TLP521-4光電耦合芯片隔離,以避免驅(qū)動電路對單片機(jī)的正常工作造成干擾。為了保證MC33886散熱良好,該電路板上依據(jù)MC33886數(shù)據(jù)手冊的推薦樣式設(shè)計(jì)了散熱敷銅并為MC33886安裝了散熱片。焊接、裝配時(shí),將電路板正面的敷銅與MC33886底部的裸露的散熱銅焊盤焊接在一起,可大大增強(qiáng)芯片的散熱能力。
1.3 舵機(jī)轉(zhuǎn)向模塊
利用汽車轉(zhuǎn)向機(jī)構(gòu)原理,為了保證小車在轉(zhuǎn)彎過程中,既能快速響應(yīng),又防止速度過快沖出跑道,把舵機(jī)的位置進(jìn)行了提升,可以增大力矩,使小車快速響應(yīng),按照軌跡進(jìn)行快速轉(zhuǎn)彎。測量出攝像頭能夠檢測到的黑線位置,并量車距離為b,測量車正中間和黑線的橫向距離為a,那么轉(zhuǎn)角的正切就等于b/a,如圖3所示??梢允褂眠@個方法,把黑線從視野最左端移動到最右端,分別測量出轉(zhuǎn)角。由于舵機(jī)連桿加長,可發(fā)現(xiàn)轉(zhuǎn)角于舵機(jī)的PWM值基本是線性的,所以舵機(jī)控制采用P控制即可。再考慮到轉(zhuǎn)彎必須有一定的及時(shí)性,所以并不采用PID控制。
1.4 速度測量模塊
考慮到成本要求,采用了紅外對管和黑白碼盤作為測速模塊的硬件構(gòu)成。其中碼盤為32格的黑白相間圓盤,如圖4所示。
紅外傳感器安裝在正對碼盤的前方,雖然這樣做精度比編碼器要低很多,但是成本低廉制作容易,如果智能車速度較快,可以考慮再減少碼盤上黑白色條的數(shù)量即可。
當(dāng)圓盤隨著齒輪轉(zhuǎn)動時(shí),光電管接收到的反射光強(qiáng)弱交替變化,由此可以得到一系列高低電脈沖。設(shè)置MC9S12DG128的ECT模塊,同時(shí)捕捉光電管輸出的電脈沖的上升沿和下降沿。通過累計(jì)一定時(shí)間內(nèi)的脈沖數(shù),或者記錄相鄰脈沖的間隔時(shí)間,可以得到和速度等價(jià)的參數(shù)值。
2 圖像采集及處理
2.1 圖像采集
常用的攝像頭視頻輸出信號是PAL電視機(jī)制式,它的工作原理與電視機(jī)的工作原理相似:在一定分辨率下,每秒掃描25幀圖像,每幀圖像含有625行信息,分為奇、偶場,進(jìn)行隔行掃描,總共每秒50場信號,每場有312.5行信息,從奇數(shù)行開始掃描,即依次掃描第1、3、5、7、
9……行,當(dāng)掃描完奇數(shù)場后,再開始掃描偶數(shù)場,構(gòu)成一幀圖像。
對圖像的采集即是根據(jù)攝像頭的行信號和場信號對圖像模擬量采集。輸出信號包括行同步信號,場同步信號,圖像時(shí)間,以及各種消隱時(shí)間。行同步信號代表一行的圖像數(shù)據(jù)掃描開始,場同步信號代表一幀的圖像數(shù)據(jù)掃描開始。要完成圖像的正確采集,必須嚴(yán)格遵守時(shí)序的要求:當(dāng)捕捉到一行信號時(shí),開始對該行各點(diǎn)的模擬量進(jìn)行采集,當(dāng)下一行信號發(fā)生時(shí)表明該行采集完畢,需要對下一行的模擬量進(jìn)行采集。
2.2 圖像采集的主要硬件設(shè)計(jì)
攝像頭產(chǎn)品說明上通常會給出有效像素和分辨率,分辨率即為每場信號中真正為視頻信號的行的數(shù)目。但產(chǎn)品說明上通常不會具體介紹視頻信號行的持續(xù)時(shí)間、它們在每場信號中的位置、行消隱脈沖的持續(xù)時(shí)間等參數(shù),而這些參數(shù)又關(guān)系到圖像采樣的有效實(shí)現(xiàn)。因此需要設(shè)計(jì)軟、硬件方法實(shí)際測量一下這些參數(shù)。
經(jīng)過測量,所采用的CMOS攝像頭每秒能夠輸出25幀圖像信號,每幀分為奇場和偶場,每場包含312線,那么,每條線的掃描時(shí)間大約為64 μs。
通常,攝像頭橫向(行方向)的像素?cái)?shù)遠(yuǎn)多于對單行視頻信號A/D采樣的點(diǎn)數(shù)。真正決定賽車圖像采樣模塊實(shí)際橫向分辨能力的不是攝像頭橫向的像素?cái)?shù),而是A/D采樣單行視頻信號的點(diǎn)數(shù)。所以,把攝像頭旋轉(zhuǎn)了90°使用,把以前的線信號組合起來,變成行信號,所以在一行的賽道信息上最多采集到312個點(diǎn),這樣就可以滿足路徑識別的需要了。
攝像頭使用12 V的電源供電,所以設(shè)計(jì)了升壓電路,如圖5所示。
[!--empirenews.page--]
在方案中,使用LM1881視頻分離芯片來輔助采樣視頻。LM1881提取攝像頭信號的行同步脈沖、消隱脈沖和場同步脈沖,并將它們轉(zhuǎn)換成數(shù)字電平直接輸給單片機(jī)的I/O口,可以使用S12單片機(jī)I/O口的中斷功能來接收這些信號。圖6為LM1881的電路圖。
引腳1為行同步信號輸出端,它輸出的信號波形只是輸入的攝像頭信號在黑屏電位之下的波形的簡單復(fù)制。引腳2為視頻信號輸入端,攝像頭信號即由此輸入LM1881。引腳3為場同步信號輸出端,當(dāng)攝像頭信號的場同步脈沖到來時(shí),該端將變?yōu)榈碗娖?,一般維持230μs,然后重新變回高電平。引腳7為場同步信號輸出端,當(dāng)攝像頭信號處于奇場時(shí),該端為高電平,當(dāng)處于偶場時(shí)為低電平。奇偶場的交替處與場同步信號的下降沿同步,也就是和場同步脈沖后的上升沿同步。
3 視頻信號的采樣和濾波
3.1 視頻信號的采樣
攝像頭每場信號包括312行,即每場會掃描產(chǎn)生312行的視頻信號。也就是說,攝像頭在縱向上有312像素的分辨能力,這對于本智能車定位系統(tǒng)設(shè)計(jì)所要求的圖像傳感精度來說遠(yuǎn)遠(yuǎn)夠用。為方便設(shè)計(jì),忽略奇場和偶場在掃描位置上的細(xì)微差別,認(rèn)為奇、偶場的掃描位置相同。當(dāng)然,在測試中發(fā)現(xiàn),312行信號并不能夠全部使用,其兩側(cè)信號并不是有效的視頻信號,而312個點(diǎn)顯然數(shù)量巨大且占用太多的計(jì)算時(shí)間。所以,每隔4行掃描一次,而排除首尾無效的信號點(diǎn)。一共使用了60行作為需要處理的視頻信號,顯然對于路徑檢測來說,已經(jīng)足夠了。而在采樣過程中發(fā)現(xiàn),如果不對ATD模塊進(jìn)行超頻,則很難采集在有效視野中的多行信號。所以,在把單片機(jī)總線頻率超頻到40 MHz的同時(shí),還需要把ATD模塊進(jìn)行超頻,這樣可以加快其采樣速度,能夠在同等的時(shí)間內(nèi)獲得更多的行視頻信號。視頻信號采集后,可以使用單行信號對舵機(jī)進(jìn)行P控制,也可以使用多行信號進(jìn)行大彎道和S彎的判斷。
3.2 視頻信號的濾波
拿一行視頻信號為例,采集到的60個數(shù)據(jù)逐個轉(zhuǎn)換為0和1存儲到一個一維數(shù)組中,這個數(shù)組是一個0和1組成的序列,“1”代表白色,“0”代表黑色。通常,由于各種原因,視頻信號里會帶有雜波,如果不濾除的話,會對路徑的判斷帶來麻煩。所以,編寫了濾波函數(shù)對視頻信號進(jìn)行濾波,事實(shí)證明,這樣的濾波函數(shù)在時(shí)間上完全滿足要求,并且濾波很可靠。濾波函數(shù)的主要原理是,濾波函數(shù)1主要負(fù)責(zé)把數(shù)組中異常的單個雜波信號濾除,如果有一個序列如下:
1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
則程序會檢測到0所在的位置,并且把它的值取反,而對于只有一個雜波1的序列,此方法同樣有效。在函數(shù)中一共作了60次循環(huán),如果檢測到第i個元素與第i-1個和i+1個都不相同的話,則把第i個元素進(jìn)行取反操作。這樣,使用此函數(shù)對行視頻信號進(jìn)行掃描,可以有效地濾除單個雜波信號。
濾波函數(shù)2主要負(fù)責(zé)把數(shù)組中異常的兩個雜波信號濾除,如果有一個序列如下:
1 1 1 1 1 1 0 0 1 1 1 1 1 1 1
則程序會檢測到0 0所在的位置,并且把它們的值取反,而對于只有兩個雜波11的序列,此方法同樣有效。在函數(shù)中一共作了58次循環(huán),如果檢測到第i個元素與第i-1個和i+2個都不相同而與第i+1個相同的話,則把第i個和i+1個元素進(jìn)行取反操作。這樣,使用此函數(shù)對行視
頻信號進(jìn)行掃描,可以有效地濾除兩個雜波信號。
4 結(jié)論
在實(shí)驗(yàn)中得到了測試結(jié)果,當(dāng)檢測到路徑信息時(shí),數(shù)組中0的個數(shù)一般不會低于3個。所以,濾除一個和兩個雜波數(shù)據(jù)并不會影響到正常的路徑識別,而同時(shí)出現(xiàn)3個雜波數(shù)據(jù)而且又處于相臨的位置,這樣的可能非常微小,可以忽略不計(jì)。事實(shí)證明,這個方法既可以濾除賽道上的雜波信號,也可以濾除路徑上的雜波信號,效果非常顯著。