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