引言
按照首屆全國大學生“飛思卡爾”智能車大賽規則要求,根據賽道特點,主要有兩種尋線設計方案:光電傳感器方案和攝像頭方案。
這兩種方案各有特點:光電傳感器構成“線型檢測陣列”的方案簡單易行,但由于受規則限制(傳感器數量不超過16個),光電管的數量不可能太多,從而單個線型檢測陣列所能確定的指引線信息較少。所以采用此方案尋線精度不夠高,在舵桃轉向控制時會產生直道蛇行或彎道舵機回擺,并且判斷距離有限。
因此我們選擇采用攝像頭作為尋線傳感器,一方面攝像頭探測的賽道信息和距離更出色;另一方面,規定使用的MC9S12DG128運算速度和自身AD口的采樣速度能夠適應對黑白低線數攝像頭的有效視頻采樣和對大量圖像數據的處理。
圖像數據信息特點
攝像頭的主要工作原理具體而言,攝像頭連續地掃描圖像上的一行,則輸出就是一段連續的電壓視頻信號,該電壓信號的高低起伏正反映了該行圖像的灰度變化情況。當掃描完一行,視頻信號端就輸出低于最低視頻信號電壓的電平(如0.3V),并保持一段時間。這樣相當于,緊接著每行圖像對應的電壓信號之后會有一個電壓“凹槽”,此“凹槽”叫做行同步脈沖,它是掃描換行的標志。然后,跳過一行后(因為攝像頭是隔行掃描的方式),開始掃描新的一行,如此下去,直到掃描完該場的視頻信號,接著就會出現一段場消隱區。此區中有若干個復合消隱脈沖,其中有個脈沖遠寬于(即持續時間長于)其他的消隱脈沖,該消隱脈沖又稱為場同步脈沖,它是掃描換場的標志。場同步脈沖標志著新的一場的到來,不過,場消隱區恰好跨在上一場的結尾部分和下一場的開始部分,得等場消隱區過去,下一場的視頻信號才真正到來。攝像頭每秒掃描25幅圖像,每幅又分奇、偶兩場,先奇場后偶場,故每秒掃描50場圖像。奇場時只掃描圖像中的奇數行,偶場時則只掃描偶數行。
由于S12芯片的處理能力不足以支持像PC那樣的運算能力,因此我們采用了只有黑自制式、320×240的CMOS單板攝像頭(每秒50幀)。
但是對于比賽來說,賽道是在白色底板上鋪設黑色引導線,因此它的干擾信息會少很多。只要在單行上有足夠多的信息點,較少的行數就可以實現對黑線的檢測;在綜合了實踐比對之后,最終方案決定采用10行的信息來判斷前方是直道還是彎道。
單行黑線提取算法
由于黑色賽道和白色底板之間的色差較大,直接反映在圖像數據中就是大于一個黑白色閥值。通過實驗可以基本上確定該閥值的大小,根據現場光線的變化影響會有略微的變化。但是該閥值基本上介于22~30之間。因為可以通過判斷相鄰數據點的差是否大于該闊值,作為邊沿提取算法的依據和主要參數。
該算法的主要過程為:從最左端的第一個有效數據點開始依次向右進行,第line為原點,判斷和line+3的差是否大于閥值,如果是則將line+3記為i,從i開始判斷在接下來的從i+3到該行最末一個點之間的差值是否大于閥值,如果大于則將line+i/2+2的坐標賦值給黑線中心位置。
利用該算法所得到的黑線提取效果不僅可靠,而且實時性好;在失去黑線目標以后能夠記住是從左側或者右側超出視野,從而控制舵機轉向讓賽車回到正常賽道。如果更進一步可以設置閥值根據現場情況的變化而變化。在黑色引導線已經能夠可靠提取的基礎上,我們可以利用它來進行相應的彎、直道判斷,以及速度和轉向舵機控制算法的研究。
彎、直道判斷、以及速度和舵機控制算法
影響賽車速度成績的一個非常重要因素就是對彎道和直道的提前識別判斷,從而實現安全過彎、快速通過直道,提高比賽成績。而攝像頭方案在這方面有天然的優勢。根據前面提到的最終以10行黑線信息作為彎、直道的判斷算法依據,下面簡單介紹一下該算法。
在單行黑線邊沿檢測提取算法的基礎上,我們可以根據10行的數據中每行黑線位置與10行平均位置(公式1)之相對位移,然后求
