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