智能車(chē)黑線識(shí)別算法及控制策略研究
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 智能車(chē)的控制算法
在比賽中,影響賽車(chē)速度的一個(gè)關(guān)鍵的因素就是賽車(chē)能不能提前識(shí)別彎道與直道,也就是說(shuō)賽車(chē)的控制算法對(duì)提高賽車(chē)的成績(jī)起到至關(guān)重要的作用。這里采用魯棒性好且算法簡(jiǎn)單的經(jīng)典PID算法。但普通的PID是線性算法,若參數(shù)設(shè)置太大則小車(chē)在走直道時(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):
評(píng)論