智能車黑線識(shí)別算法及控制策略研究
0 引言
“飛思卡爾”杯全國(guó)大學(xué)生智能車大賽是由摩托羅拉旗下飛思卡爾公司贊助由高等學(xué)校自動(dòng)化專業(yè)教學(xué)指導(dǎo)委員會(huì)負(fù)責(zé)主辦的全國(guó)性的賽事,旨在加強(qiáng)大學(xué)生的創(chuàng)新意識(shí)、團(tuán)隊(duì)合作精神和培養(yǎng)學(xué)生的創(chuàng)新能力。此項(xiàng)賽事專業(yè)知識(shí)涉及控制、模式識(shí)別、傳感技術(shù)、汽車電子、電氣、計(jì)算機(jī)、機(jī)械等多個(gè)學(xué)科,對(duì)學(xué)生的知識(shí)融合和動(dòng)手能力的培養(yǎng),對(duì)高等學(xué)??刂萍捌囯娮訉W(xué)科學(xué)術(shù)水平的提高,具有良好的推動(dòng)作用。
智能車競(jìng)賽所使用的車模是一款帶有差速器的后輪驅(qū)動(dòng)模型賽車,它由大賽組委會(huì)統(tǒng)一提供。自動(dòng)控制器是以飛思卡爾16位微控制器MC9S12DGl28(S12)為核心控制單元,配合有傳感器、電機(jī)、舵機(jī)、電池以及相應(yīng)的驅(qū)動(dòng)電路,它能夠自主識(shí)別路徑,控制車高速穩(wěn)定運(yùn)行在跑道上。比賽要求自己設(shè)計(jì)控制系統(tǒng)及自行確定控制策略,在規(guī)定的賽道上以比賽完成的時(shí)間短者為優(yōu)勝者。賽道由白色底板和黑色的指引線組成。根據(jù)賽道的特點(diǎn),比賽組委會(huì)確定了兩種尋線方案:1.光電傳感器。
2.?dāng)z像頭。
兩種尋線方案的特點(diǎn)如下:
(1)光電傳感器方案。通過(guò)紅外發(fā)射管發(fā)射紅外線光照射跑道,跑道表面與中心指引線具有不同的反射強(qiáng)度,利用紅外接收管可以檢測(cè)到這些信息。此方案簡(jiǎn)單易行程序調(diào)試也簡(jiǎn)單且成本低廉,但是它受到競(jìng)賽規(guī)則的一些限制(組委會(huì)要求傳感器數(shù)量不超過(guò)16個(gè)(紅外傳感器的每對(duì)發(fā)射與接收單元計(jì)為一個(gè)傳感器,CCD傳感器計(jì)為1個(gè)傳感器)),傳感器的數(shù)量不可能安放的太多,因而道路檢測(cè)的精度較低,能得到指引線的信息量也較少。若采用此方案容易引起舵機(jī)的回?cái)[走蛇形路線。
(2)攝像頭方案。根據(jù)賽道的特點(diǎn)斯用黑白圖像傳感器即可滿足要求。CCD攝像頭有面陣和線陣兩種類型,它們?cè)诮涌陔娐?、輸出信?hào)以及檢測(cè)信息等方面有著較大的區(qū)別,面陣攝像頭可以獲取前方賽道的圖像信息,而線陣CCD只能獲取賽道一條直線上的圖像信息。攝像頭方案的所能探測(cè)的道路信息量遠(yuǎn)大于光電傳感器方案,而且攝像頭也可以探測(cè)足夠遠(yuǎn)的距離以方便控制器對(duì)前方道路進(jìn)行預(yù)判。雖然此方案對(duì)控制器的要求比較高,但組委會(huì)提供的MC9S12DGl28(S12)的運(yùn)算能力以及自身AD口的采樣速度完全能夠滿足攝像頭的視頻采樣和大量圖像數(shù)據(jù)的處理的要求。
本文就是在攝像頭方案的前提下,在實(shí)時(shí)的圖像數(shù)據(jù)獲取的基礎(chǔ)上對(duì)圖像信息進(jìn)行數(shù)據(jù)處理,從而提取賽道中心的黑色指引線,再以此來(lái)作為舵機(jī)和驅(qū)動(dòng)電機(jī)的控制依據(jù)。
1 攝像頭采樣數(shù)據(jù)的特點(diǎn)
采用的黑白攝像頭的主要工作原理為:按一定的分辨率,以隔行掃描的方式采集圖像上的點(diǎn),當(dāng)掃描到某點(diǎn)時(shí),就通過(guò)圖像傳感芯片將該點(diǎn)處圖像的灰度轉(zhuǎn)換成與灰度一一對(duì)應(yīng)的電壓值,然后將此電壓值通過(guò)視頻信號(hào)端輸出,見(jiàn)圖1。攝像頭連續(xù)地掃描圖像上的一行,則輸出就是一段連續(xù)的電壓信號(hào),該電壓信號(hào)的高低起伏反映了該行圖像的灰度變化。當(dāng)掃描完一行,視頻信號(hào)端就輸出一個(gè)低于最低視頻信號(hào)電壓的電平(如O.3V),并保持一段時(shí)間。這樣相當(dāng)于緊接著每行圖像信號(hào)之后會(huì)有一個(gè)電壓“凹槽”,此“凹槽”叫做行同步脈沖,它是掃描換行的標(biāo)志。然后,跳過(guò)一行后(因?yàn)閿z像頭是隔行掃描的),開(kāi)始掃描新的一行,如此下去,直到掃描完該場(chǎng)的視頻信號(hào),接著又會(huì)出現(xiàn)一段場(chǎng)消隱區(qū)。該區(qū)中有若干個(gè)復(fù)合消隱脈沖,其中有個(gè)遠(yuǎn)寬于(即持續(xù)時(shí)間長(zhǎng)于)其它的消隱脈沖,稱為場(chǎng)同步脈沖,它是掃描換場(chǎng)的標(biāo)志。場(chǎng)同步脈沖標(biāo)志著新的一場(chǎng)的到來(lái),不過(guò),場(chǎng)消隱區(qū)恰好跨在上一場(chǎng)的結(jié)尾和下一場(chǎng)的開(kāi)始部分,到該場(chǎng)消隱區(qū)過(guò)去,下一場(chǎng)的視頻信號(hào)才真正到來(lái)。攝像頭每秒掃描25幅圖像,每幅又分奇、偶兩場(chǎng),先奇場(chǎng)后偶場(chǎng),故每秒掃描50場(chǎng)圖像。奇場(chǎng)時(shí)只掃描圖像中的奇數(shù)行,偶場(chǎng)時(shí)則只掃描偶數(shù)行。
因MC9S12DGl28(S12)控制芯片的處理能力達(dá)不到計(jì)算機(jī)的運(yùn)算速度,故采用了目前市面上分辨率最小的320X240的CMOS單板攝像頭,它同樣可以每秒掃描501幅圖像。為了擴(kuò)大攝像頭的掃描距離來(lái)滿足圖像和控制處理的需要,將S12單片機(jī)的總線周期超頻到32M,這樣攝像頭每行最多能夠采集70個(gè)點(diǎn)。
通過(guò)實(shí)驗(yàn)測(cè)得攝像頭掃描的每場(chǎng)圖像中有320個(gè)行信號(hào),其中的第23行到第310行是視頻信號(hào),即每場(chǎng)中有用的視頻信號(hào)有288行。第3ll行到下一場(chǎng)第22行是場(chǎng)消隱信號(hào)。在實(shí)際的圖像處理和控制過(guò)程當(dāng)中完全沒(méi)有必要對(duì)全部288行視頻信號(hào)進(jìn)行處理。由于每行能采集到80個(gè)有點(diǎn)像素點(diǎn),所以在每場(chǎng)視頻信號(hào)中每隔15行對(duì)行信號(hào)采集一次,用18行視頻信號(hào)來(lái)判斷前方是直道還是彎道,從而對(duì)小車進(jìn)行速度和轉(zhuǎn)向的控制。
2 黑色指引線的提取算法
賽道是由白色KT板上鋪設(shè)黑色指引線組成,外界干擾比較少容易提取黑線。據(jù)此采用的是圖像處理方法是較為簡(jiǎn)單的邊緣提取算法。邊緣與圖像的性質(zhì)之所以能聯(lián)系在一起,是由于圖像中的物體與物體,或者物體與背景之間的交界可以視為邊緣,圖像的灰度及顏色急劇變化的地方也可以看作是邊緣。在圖像中有顏色的變化必定會(huì)有灰度的變化,故對(duì)于邊緣的檢測(cè)與提取焦點(diǎn)集中在灰度上就可以。由于黑色指引線和白色跑道的色差較大,可以確定一個(gè)分別黑白色的閾值,通過(guò)實(shí)驗(yàn)確定該閾值(VALUE)為8。由于光照強(qiáng)弱的原因黑色像素的灰度值可能不完全一樣,實(shí)際操作中我們發(fā)現(xiàn)只要灰度值小于4(DIFFVAL)的點(diǎn)即可視為黑色點(diǎn)。
攝像頭掃描的圖像分為一下兩種情況:
(1)掃描圖像只有一條豎直黑線,如圖2所示
從左邊的第一個(gè)有效像素點(diǎn)(usefu1_line)開(kāi)始依次對(duì)相鄰的像素點(diǎn)進(jìn)行灰度值相減(左減右),當(dāng)兩者的差值大于閾值(VALUE)時(shí),判定下一個(gè)像素點(diǎn)(usful_line+1)對(duì)應(yīng)的為黑線的左邊緣。繼續(xù)相減當(dāng)差值再次大于閾值時(shí),將此像素點(diǎn)定位黑線的右邊緣。該程序如下所示:
其中g(shù)_ucDif 為兩個(gè)像素灰度值之差的絕對(duì)值,LINE_MAX為采集圖像的最大有效列數(shù),ROW_MAX為采集圖像的最大有效行數(shù),ucImage_data[][]為存儲(chǔ)圖像像素點(diǎn)的一個(gè)二維數(shù)組,ucImage_temp為臨時(shí)存儲(chǔ)圖像的數(shù)組。
(2)掃描到的圖像為黑色交叉線,如圖3所示
前面提到S12單片機(jī)的總線超頻以后通過(guò)AD轉(zhuǎn)換每一行圖像我們能采集到70個(gè)有效數(shù)據(jù)點(diǎn),而黑線的寬度只有25mm(大賽組委會(huì)規(guī)定),在這個(gè)寬度內(nèi)最能只能包含6個(gè)有效的數(shù)據(jù)點(diǎn)。因此對(duì)于黑色交叉線我們只要將右邊緣(right)所在列數(shù)與左邊緣(1eft)所在列數(shù)相減,如果差值大于6,我們即可判定此時(shí)為黑色交叉線。程序只要在前面的基礎(chǔ)上加上一下語(yǔ)句即可完成。
其中B1ackwire_data[]為采集到的黑線中心線數(shù)據(jù),它將在后面的控制策略中被用到。
3 智能車的控制算法
在比賽中,影響賽車速度的一個(gè)關(guān)鍵的因素就是賽車能不能提前識(shí)別彎道與直道,也就是說(shuō)賽車的控制算法對(duì)提高賽車的成績(jī)起到至關(guān)重要的作用。這里采用魯棒性好且算法簡(jiǎn)單的經(jīng)典PID算法。但普通的PID是線性算法,若參數(shù)設(shè)置太大則小車在走直道時(shí)很容易出現(xiàn)振蕩的情形,而在高速走彎道的時(shí)則易出現(xiàn)反應(yīng)遲鈍、沖出賽道的情況。因此采用非線性的PID算法,使之對(duì)小偏差不敏感而對(duì)大偏差敏感,實(shí)現(xiàn)了直道平穩(wěn)同時(shí)彎道靈敏的目的。
驅(qū)動(dòng)電機(jī)的PID控制部分通過(guò)下面算法實(shí)現(xiàn):
其中,MVn、MVn-1;當(dāng)前和上次操作量;△MVn:當(dāng)前操作量微分;en、en-1、en-2:當(dāng)前,上次,上上次偏差;KP、Ki、Kd的數(shù)值通過(guò)實(shí)驗(yàn)得到。
經(jīng)過(guò)測(cè)試發(fā)現(xiàn),對(duì)于舵機(jī)控制當(dāng)它的積分環(huán)節(jié)ki為O時(shí),小車的表現(xiàn)性能要更好,所以對(duì)舵機(jī)采用的是帶非線性的PD算法。
該算法首先需要知道所采集圖像中黑線的轉(zhuǎn)彎斜率(如圖4所示),圖中直線表示賽道為直道,左右兩邊的線分別表示左轉(zhuǎn)彎和右轉(zhuǎn)彎時(shí)攝像頭可能采集到的黑線情形,不同的線表示不同的轉(zhuǎn)彎斜率(slope),在后面的PD控制中我們將用到此斜率。
采用的是帶有預(yù)判的控制策略(如圖5所示),具體分為以下幾種情況:
(1)賽道一直為直道時(shí),程序如下:
其中,STEER_CENTER為舵機(jī)轉(zhuǎn)向中心,g_lOldPwm為前一步的PWM輸出,g_sCurE為當(dāng)前的轉(zhuǎn)彎偏差,g_soldE為前一步的轉(zhuǎn)彎偏差。
4 結(jié)論
本文在攝像頭已經(jīng)能夠采集較為準(zhǔn)確圖像的基礎(chǔ)上,提出并研究了黑色指引線的邊緣提取算法,然后在該算法的基礎(chǔ)上決定了舵機(jī)轉(zhuǎn)向的控制策略,通過(guò)實(shí)踐證明,采用此種算法和控制策略可以使賽車獲得較快的行駛速度和較為可靠的轉(zhuǎn)向性能。