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