智能車(chē)黑線(xiàn)識別算法及控制策略研究
2 黑色指引線(xiàn)的提取算法
賽道是由白色KT板上鋪設黑色指引線(xiàn)組成,外界干擾比較少容易提取黑線(xiàn)。據此采用的是圖像處理方法是較為簡(jiǎn)單的邊緣提取算法。邊緣與圖像的性質(zhì)之所以能聯(lián)系在一起,是由于圖像中的物體與物體,或者物體與背景之間的交界可以視為邊緣,圖像的灰度及顏色急劇變化的地方也可以看作是邊緣。在圖像中有顏色的變化必定會(huì )有灰度的變化,故對于邊緣的檢測與提取焦點(diǎn)集中在灰度上就可以。由于黑色指引線(xiàn)和白色跑道的色差較大,可以確定一個(gè)分別黑白色的閾值,通過(guò)實(shí)驗確定該閾值(VALUE)為8。由于光照強弱的原因黑色像素的灰度值可能不完全一樣,實(shí)際操作中我們發(fā)現只要灰度值小于4(DIFFVAL)的點(diǎn)即可視為黑色點(diǎn)。
攝像頭掃描的圖像分為一下兩種情況:
(1)掃描圖像只有一條豎直黑線(xiàn),如圖2所示
從左邊的第一個(gè)有效像素點(diǎn)(usefu1_line)開(kāi)始依次對相鄰的像素點(diǎn)進(jìn)行灰度值相減(左減右),當兩者的差值大于閾值(VALUE)時(shí),判定下一個(gè)像素點(diǎn)(usful_line+1)對應的為黑線(xiàn)的左邊緣。繼續相減當差值再次大于閾值時(shí),將此像素點(diǎn)定位黑線(xiàn)的右邊緣。該程序如下所示:
其中g(shù)_ucDif 為兩個(gè)像素灰度值之差的絕對值,LINE_MAX為采集圖像的最大有效列數,ROW_MAX為采集圖像的最大有效行數,ucImage_data[][]為存儲圖像像素點(diǎn)的一個(gè)二維數組,ucImage_temp為臨時(shí)存儲圖像的數組。
(2)掃描到的圖像為黑色交叉線(xiàn),如圖3所示
前面提到S12單片機的總線(xiàn)超頻以后通過(guò)AD轉換每一行圖像我們能采集到70個(gè)有效數據點(diǎn),而黑線(xiàn)的寬度只有25mm(大賽組委會(huì )規定),在這個(gè)寬度內最能只能包含6個(gè)有效的數據點(diǎn)。因此對于黑色交叉線(xiàn)我們只要將右邊緣(right)所在列數與左邊緣(1eft)所在列數相減,如果差值大于6,我們即可判定此時(shí)為黑色交叉線(xiàn)。程序只要在前面的基礎上加上一下語(yǔ)句即可完成。
其中B1ackwire_data[]為采集到的黑線(xiàn)中心線(xiàn)數據,它將在后面的控制策略中被用到。
3 智能車(chē)的控制算法
在比賽中,影響賽車(chē)速度的一個(gè)關(guān)鍵的因素就是賽車(chē)能不能提前識別彎道與直道,也就是說(shuō)賽車(chē)的控制算法對提高賽車(chē)的成績(jì)起到至關(guān)重要的作用。這里采用魯棒性好且算法簡(jiǎn)單的經(jīng)典PID算法。但普通的PID是線(xiàn)性算法,若參數設置太大則小車(chē)在走直道時(shí)很容易出現振蕩的情形,而在高速走彎道的時(shí)則易出現反應遲鈍、沖出賽道的情況。因此采用非線(xiàn)性的PID算法,使之對小偏差不敏感而對大偏差敏感,實(shí)現了直道平穩同時(shí)彎道靈敏的目的。
驅動(dòng)電機的PID控制部分通過(guò)下面算法實(shí)現:
評論