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