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