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