根據(jù)功能的不同,小車分為六部分:攝像頭圖像采集模塊、電源模塊、電機驅(qū)動模塊、測速模塊、舵機轉(zhuǎn)向模塊、輔助調(diào)試模塊。圖1是小車系統(tǒng)硬件模塊框圖。
(1)攝像頭圖像采集模塊
采用CMOS攝像頭作為識別路徑的傳感器。此模塊的主要作用是識別黑色引導線,工作原理為:攝像頭的信號通過LM1881視頻分離芯片向DGl28產(chǎn)生行信號中斷和場信號中斷,以控制圖像A/D值的采集;然后通過邊沿提取算法提取出每行黑線的位置,通過提取連續(xù)段重新購建一幀圖像的算法對整個圖像進行處理。
(2)驅(qū)動模塊
Freescale公司生產(chǎn)的MC33886芯片是一款性能優(yōu)良的直流電壓驅(qū)動芯片。通過輸入不同占空比的方波信號,可以在MC33886的輸出端得到不同的電壓,進而驅(qū)動電機,實現(xiàn)調(diào)速。
(3)測速模塊
采用光電耦合管和自制的碼盤作為測速的傳感器。光耦合管的輸出信號經(jīng)過555定時器組成的斯密特觸發(fā)器整形得到一定頻率的矩形波信號,再經(jīng)過DGl28的輸入捕捉功能提取出小車的速度值。
(4)舵機轉(zhuǎn)向模塊
為了保證小車在轉(zhuǎn)彎過程中既能快速響應,又防止速度過快沖出跑道,利用汽車轉(zhuǎn)向機構原理,把舵機的位置進行了提升。這樣可以增大力矩,使小車快速響應,按照軌跡進行快速轉(zhuǎn)彎。
2 圖像采集及處理
2.1 圖像采集
常用的攝像頭視頻輸出信號是電視機的PAL制式。它的工作原理與電視機的工作原理相似:在一定分辨率下,每秒掃描25幀圖像,每幀圖像含有625行信息;分為奇、偶場,隔行掃描;總共每秒50場信號,每場有312.5行信息;從奇數(shù)行開始掃描,即依次掃描第l、3、5、7、9……當掃描完奇數(shù)場后,再開始掃描偶數(shù)場,構成一幀圖像。
對圖像的采集是根據(jù)攝像頭的行信號和場信號對圖像模擬量的采集。如圖2所示,輸出信號包括行同步信號、場同步信號、圖像信號以及各種消隱信號。行同步信號代表一行的圖像數(shù)據(jù)掃描開始。場同步信號代表一幀的圖像數(shù)據(jù)掃描開始。要完成圖像的正確采集,必須嚴格遵守時序的要求:當捕捉到一行信號時,開始對該行各點的模擬量進行采集,當下一行信號發(fā)生時表明該行采集完畢,需要對下一行的模擬量進行采集。
由于MC9S12DGl28片內(nèi)A/D采樣頻率的影響,每一行采集的點數(shù)受到了限制,在系統(tǒng)時鐘倍頻到24MHz,A/D每次采集時間為2.3μs的情況下,每一行圖像的采集能達到34個點。這雖然遠遠小于攝像頭本身的分辨頻率,但在不使用2.8 mm廣角鏡頭的前提下,仍能分辨出黑線,因此我們將數(shù)組列數(shù)設為34,同時每間隔6個攝像頭行信號采集一次,一共有312個行信號,則一共可采集312/6=52行。去掉首尾干擾加大的行,選擇采集46行,因此數(shù)組的行數(shù)為46。最終,設定的數(shù)組大小為:data_savel[46][34],還原效果如圖3所示。
2.2 圖像采集的處理方法
這里的黑色引導線以白色為襯底,因黑線和白色底板存在很多大灰度比,在圖像信號上會形成相應高低不同的電壓值。當檢測到黑線時,圖像信號中將形成一個“凹”形槽,圖4中凹槽處即是黑線在一行數(shù)據(jù)中的相對位置(26)。
對圖像每行數(shù)據(jù)的處理將得到每行圖像中黑線的相對位置,即下面的行數(shù)據(jù)處理;而對每行圖像中黑線的位置的綜合分析將再現(xiàn)黑線的形狀,即下面的幀數(shù)據(jù)處理。本設計將采集的模擬量數(shù)據(jù)存放在一個二維數(shù)組中,當完成對一行數(shù)據(jù)的采集后,就可以對該行的數(shù)據(jù)進行處理,即提取黑線的算法。在提取黑線上采用邊沿提取法。該算法具有對黑線反應靈敏、準確度高、抗干擾能力強等特點。
圖5表示的是光線比較好的情況下,A/D采集一幀中一行圖像的數(shù)值結(jié)果,即二維數(shù)組中的某一行數(shù)據(jù)。小圓點的縱坐標表示A/D采集值,橫坐標表示采集點在二維數(shù)組該行中的相對位置。
邊沿提取法,即通過程序檢測到上述圖形的上升沿和下降沿,然后通過上升沿和下降沿的位置求出黑線的位置。邊沿提取算法流程:
①通過i控制循環(huán)語句不斷檢測上升沿或下降沿。當?shù)趇個點的A/D值與第i+2個點的A/D值之差大于設定的閾值時,表明出現(xiàn)了下降沿,這時讀取i的值。
②一旦出現(xiàn)了下降沿,就開始不斷地判斷第i+2個點的A/D值與第i個點的A/D值之差是否大于設定的閾值。如果大于則表明檢測到了上升沿,這時也讀取i的值。通過2次i的值,便能夠求得黑線對應的點是第幾個點,進而求出黑線與小車軸線的相對位置。其提取流程如圖6所示。
通過判斷下降沿位置和上升沿位置,來計算黑線的相對位置,并通過判斷上升沿之后的數(shù)據(jù)是否滿足相差不大于閾值來減小誤差,以精確計算黑線的相對位置。
在光線比較好的情況下,簡單地運用上述算法即可求得比較準確的相對位置,此時也不需要對閾值進行動態(tài)調(diào)整。當受到太陽光或其他比較強烈的光線影響時,就需要設置動態(tài)閾值。圖7為光線不理想時圖像的一種情況。
光線不好的情況下,采集的圖像通常會出現(xiàn)圖7中凸起的情形,這時,黑線提取算法的出錯幾率會大大增加。為了避免這種情況,可以根據(jù)圖像的變化趨勢將閾值附加上一個修正值。如圖7,在進行下降沿檢測時,可以在預
先設定的閾值上減去一個數(shù)值,以克服凸起處的變形造成實際閾值的變?。簧仙貦z測時,可以在預先設定的閾值上加上一個數(shù)值,克服圖像呈上升趨勢帶來的閾值變大。修正值的計算可以大致采用下式:
2.3 圖像幀數(shù)據(jù)的處理
經(jīng)過黑線提取算法得到每一行黑線的位置,并存在一個一維數(shù)組里,通過這個數(shù)組就可以粗糙地控制小車轉(zhuǎn)向。但攝像頭可能會將黑線以外的其他物體錯誤識別成黑線,直接使用數(shù)組不能滿足穩(wěn)定性的要求,還需要對數(shù)組的數(shù)據(jù)進行進一步的處理,把干擾圖像濾除,即這里所說的幀數(shù)據(jù)的處理。
在幀數(shù)據(jù)處理上采用提取連續(xù)段的方法,將圖像中錯誤的數(shù)據(jù)去除掉。圖8是把干擾圖像誤當成黑線的情況,虛線代表實際的黑線位置。
連續(xù)段提取算法的流程大致為:
①通過程序?qū)D像中連續(xù)的段提取出來,提取的方法即通過i控制循環(huán)語句不斷檢驗(Yi+1一Yi)的值是否大于設定的閾值。如果小于則表明第i個點和前面各點是連續(xù)的,否則和前面各點不連續(xù)。如圖能夠提取出3個連續(xù)的段,即連續(xù)段1、連續(xù)段2、連續(xù)段3。
②判斷連續(xù)段的可靠性,判斷的依據(jù)是連續(xù)段中的點越多表明該連續(xù)段越可靠,如圖8,顯然連續(xù)段1和連續(xù)段3比連續(xù)段2可靠。將可靠性好的段作為可用段,可靠性差的段作為不可用段。
③排除不可用段,將可用段連接起來形成一個大段。最后采用插補法,將不可用段歸算到這個大段中。
用該方法得到的歸算后的“大段”給下面循跡算法提供了依據(jù)。圖像處理的穩(wěn)定性,是小車循跡穩(wěn)定性的前提條件。實驗表明,該算法能夠很好地滿足穩(wěn)定性的要求。
3 小車循跡算法
由于選用的攝像頭的照射寬度比較小,使得算法上很難對賽道進行大面積的分析,因此循跡上,算法應該以適應性強為主。在舵機轉(zhuǎn)向上采用3個變量來控制舵機的值:part_l、part_2、part_3。part_1對應圖像的斜率,它是控制轉(zhuǎn)向的主要變量;part_2對應小車相對于黑線的位置,是控制轉(zhuǎn)向的輔助變量,它的目的是為了防止小車偏離引導線;part_3對應于轉(zhuǎn)向的超前校正,它由圖像前端的斜率求得。
/*line_data_refined[i]內(nèi)存儲的數(shù)據(jù)為一幀圖像數(shù)據(jù)處理后的黑線在每一行中的相對位置,“i‘代表采集的第i行,總共有46行。bottom為一幀圖像歸算后,整個連續(xù)段的最后一行;top為一幀圖像歸算后,整個連續(xù)段的首行*/
3.1 part_l的求取
通過求黑線對于小車的平均相對位置的方法來控制轉(zhuǎn)向,但這種方法具有靈敏度不高、適應性不強、小車側(cè)滑時容易出錯等缺點;最終采用了通過最小二乘法求圖像的斜率,再由斜率求part_l值的方法。part_1即控制小車轉(zhuǎn)向的主要變量。
如圖9所示,通過最小二乘法求斜率,運用公式如下:
3.2 part_2的求取
因為圖像的最近端和小車的前輪軸線之間仍有不可忽略的距離,因此攝像頭最近一行的數(shù)據(jù)不能反映小車相對于黑線的距離。這里仍然通過最小二乘法的方法將圖像延長到小車前輪軸線上(如圖9),這樣就可以將最近一行的相對位置distance_photo歸算為distance_near。dis-tance_near的值雖然和實際值仍有些誤差,但經(jīng)過實驗數(shù)據(jù)分析,distance_near的誤差在影響小車穩(wěn)定性上程度比較小,比重也很??;它的最大優(yōu)點就是能夠反映小車相對于黑線的實際位置。
在求出distance_near后,就可以進一步求出part_2的值:
part_2=k2xdistance_near (k2為常數(shù))
3.3 part_3的求取
因為舵機的滯后性對小車的性能有很大影響,速度越高,舵機滯后性帶來的負面影響就越大,在進入彎道就會出現(xiàn)側(cè)滑出跑道的情況。為了避免這種情況的發(fā)生和提高小車運行速度,需要對舵機的聯(lián)動機構及前輪機械結(jié)構進行調(diào)整,或者采用編程的方法使小車提前轉(zhuǎn)向。part_3的引入即是第2種方法。part_3作為一個附加的校正值加在舵機上,它的大小與速度有關系,同時又與圖像前端的斜率slope_front(圖9)有關。關于part_3的計算如下:
其中speed是小車的運行速度。
4 結(jié) 論
本文以追求穩(wěn)定性為前提,以提高小車行駛速度為目標,提出了一種抗干擾能力強的圖像處理算法和一種通用性強、適應性強的小車循跡算法。