摘 要: 介紹了智能車模型系統(tǒng)。以MC9S12XS128微控制器為核心控制單元,通過OV7620數(shù)字?jǐn)z像頭檢測賽道信息,并對所采集到的圖像進(jìn)行二值化,提取兩邊黑色引導(dǎo)線,用于路徑識別;通過光電編碼器檢測模型車的速度,使用經(jīng)典PID控制算法控制舵機(jī)的轉(zhuǎn)向和驅(qū)動(dòng)電機(jī)的轉(zhuǎn)速。
關(guān)鍵詞: OV7620;算法;路徑識別;XS128
當(dāng)今汽車產(chǎn)業(yè)發(fā)展非常迅速,但隨之帶來的城市交通擁堵、交通事故也隨之增加。有統(tǒng)計(jì)顯示80%以上的交通擁堵和交通事故是人為原因造成的,隨著汽車飽有量越來越多如何解決這些問題就顯得十分重要,于是智能汽車算法的概念近些年被提出作為解決上述問題的一種方法。本文介紹了以O(shè)V7620數(shù)字?jǐn)z像頭來采集路面信息,以XS128單片機(jī)作為控制核心,進(jìn)行圖像處理、路徑識別并因此來控制電機(jī)轉(zhuǎn)速和舵機(jī)轉(zhuǎn)向的模擬自動(dòng)駕駛汽車的研究[1]。
1 系統(tǒng)概述
自動(dòng)駕駛的智能車應(yīng)具有良好的自主道路識別能力和穩(wěn)定性,并能以較快的速度行駛以及穩(wěn)定的轉(zhuǎn)向能力。本文的自動(dòng)駕駛智能車系統(tǒng)的設(shè)計(jì)主要包括以下兩部分:(1)自動(dòng)駕駛智能車控制器的硬件電路設(shè)計(jì),調(diào)整和改進(jìn)模擬測試車模的機(jī)械結(jié)構(gòu),最大限度地發(fā)揮車模的機(jī)械性能。(2)結(jié)合軟件算法,使小車轉(zhuǎn)向準(zhǔn)確、穩(wěn)定,能夠安全通過各種彎道和十字交叉路口,最大限度地模擬現(xiàn)實(shí)中的道路。同時(shí)在保證可靠運(yùn)行的前提下,電路設(shè)計(jì)盡量簡潔緊湊,以減輕系統(tǒng)負(fù)載,提高自動(dòng)駕駛智能車的靈活性,并以穩(wěn)定性為首要前提,實(shí)現(xiàn)車輛的快速運(yùn)行。作為能夠自動(dòng)識別道路運(yùn)行的自動(dòng)駕駛智能汽車,信息處理與控制算法至關(guān)重要,主要由運(yùn)行在XS128單片機(jī)中的控制算法來完成。因此,控制算法的設(shè)計(jì)是本文的核心部分。
測試跑道采用普通白色KT板,寬度為50 cm,KT板兩邊各有約2.5 cm的黑色膠帶。如圖1所示。
2 系統(tǒng)的硬件設(shè)計(jì)
2.1 圖像傳感
目前以圖像傳感器作為智能車路徑識別采集系統(tǒng),應(yīng)用比較多的圖像傳感器主要分為CCD和CMOS兩大類。CCD攝像頭具有對比度高、動(dòng)態(tài)特性好的優(yōu)點(diǎn),但需要工作在12 V電壓下,對于整個(gè)系統(tǒng)來說過于耗電,并且電路設(shè)計(jì)較為復(fù)雜,成本相對較高;CMOS攝像頭體積小,耗電量小,圖像穩(wěn)定性較高,電路設(shè)計(jì)簡單,工作在5 V電壓下即可,不用另作升壓電路,減少了設(shè)計(jì)難度。因此,經(jīng)過實(shí)驗(yàn)論證之后決定采用CMOS攝像頭。本文路徑識別系統(tǒng)的信號采集部分所使用的傳感器為Omni Vision公司的CMOS圖像傳感器,CMOS攝像頭又分為數(shù)字和模擬兩種,而數(shù)字?jǐn)z像頭和模擬攝像頭的區(qū)別在于模擬攝像頭在接入單片機(jī)之前需要加A/D轉(zhuǎn)換芯片,用來將模擬攝像頭采集的模擬信號轉(zhuǎn)換成能被單片機(jī)所識別的0~5 V電壓。數(shù)字?jǐn)z像頭則可以直接將信號線連接到單片機(jī),減少了單片機(jī)對A/D轉(zhuǎn)換的編程。本文采用OV7620數(shù)字?jǐn)z像頭采集測試跑道的路徑信息,為路徑識別提供輸入信號[2]。
數(shù)字?jǐn)z像頭OV7620可以直接輸出8路數(shù)字圖像信號,簡化主板硬件電路的設(shè)計(jì),總有效像素單元為664(水平方向)×492(垂直方向)像素;內(nèi)置10位雙通道A/D轉(zhuǎn)換器,輸出8位圖像數(shù)據(jù);具有自動(dòng)增益和自動(dòng)白平衡控制,能進(jìn)行亮度、對比度、飽和度、Y校正等多種調(diào)節(jié)功能;其視頻時(shí)序產(chǎn)生電路可產(chǎn)生行同步、場同步、混合視頻同步等多種同步信號和像素時(shí)鐘等多種時(shí)序信號;工作功耗<120 mW,待機(jī)功耗<10 μW,能夠滿足本系統(tǒng)測試識別的要求。OV7620的有效像素為664×492,但實(shí)際處理時(shí)無法處理這么多的數(shù)據(jù),同時(shí)也沒有必要處理這么多的數(shù)據(jù)。通過串口采集圖像進(jìn)行分析論證,采集40行120列作為圖像信號輸入。
首先將圖像通過奇、偶場信號輸出,即隔行采集的方法得到一場數(shù)據(jù),若是采奇數(shù)行稱為奇場信號,若是采集偶數(shù)行則稱為偶場信號。奇場和偶場所采集的圖像是一樣的,只要用奇、偶其中一場就可以完成系統(tǒng)識別的要求。
一場圖像的行數(shù)為246行,要從中提取40行作為本文模型車路徑識別系統(tǒng)的有效處理行,一場圖像的前15行左右為行消隱區(qū),16行之后為有效行。本文以17行做為圖像信號采集的第一行,由于OV7620攝像頭近處圖像看的比較清楚,遠(yuǎn)處圖像看的比較模糊,為了能夠更好地反映測試跑道的情況,采取不等間距采行法,即從間隔1行到間隔6行,形成近處采集的行數(shù)少,遠(yuǎn)處采集的行數(shù)多,最終所采集行數(shù)如表1所示。
列數(shù)采用等距采集,采取隔4列提取一列的方式,最終通過行和列的采集得到40(行)×120(列)的圖像信號,作為本文模型車路徑識別算法的圖像輸入信號。
2.2 系統(tǒng)整體框圖
由以上的分析確定系統(tǒng)的總體方案:采用CMOS攝像頭進(jìn)行路徑檢測,舵機(jī)實(shí)現(xiàn)車輛的轉(zhuǎn)向控制,速度閉環(huán)控制方式對車輛速度實(shí)施精確控制。系統(tǒng)的整體框圖如圖2所示。
2.3.2 重心調(diào)整
汽車在其他要素穩(wěn)定的情況下,車體重量對于車的加減速性能有著至關(guān)重要的影響,因此本文的機(jī)械設(shè)計(jì)中,在布置自動(dòng)駕駛模型車的傳感器支架和設(shè)備時(shí),應(yīng)該盡量減少不必要的配置,使車總重盡量減輕。車體重心高低主要影響車身運(yùn)動(dòng)中的穩(wěn)定性,對于拐彎的平滑性及穩(wěn)定性有很大的影響。在車體調(diào)整以及減輕車體總重量采用以下幾點(diǎn):(1)將測試模型車的前后結(jié)合懸掛拆掉,僅保留前后車體連接的金屬片,并用膠體加固。這樣已經(jīng)足夠模型測試車轉(zhuǎn)向時(shí)候的平衡。(2)將車上各種設(shè)備盡量布置在車體轉(zhuǎn)動(dòng)中心上,有利于車體在拐彎時(shí)的響應(yīng),車輛不易側(cè)翻。比如將電池移動(dòng)到車子前部,將電路板放在靠后的位置,整車的重心基本上在中間位置。(3)為了降低整車重心,本文嚴(yán)格控制攝像頭傳感器及其安裝架的重量。本文采用了小巧的OV7620攝像頭,重量輕但卻能夠滿足采集圖像的精度。設(shè)計(jì)了輕巧的鋁合金CMOS夾持組件,便于攝像頭的拆卸,并采用了碳纖維管作為安裝傳感器的主桿,這樣不僅重量輕而且剛度也能達(dá)到要求[3]。
3 系統(tǒng)電路設(shè)計(jì)
3.1 電源模塊
本文所設(shè)計(jì)的系統(tǒng)總電源供應(yīng)來自7.2 V大容量鎳鎘電池,但是單片機(jī)最小系統(tǒng)和一些芯片都需要5 V的電源,SD卡和無線調(diào)試模塊需要3.3 V低壓,伺服電機(jī)工作電壓范圍在4 V~6 V之間,CMOS攝像頭經(jīng)過改裝應(yīng)用5 V供電,驅(qū)動(dòng)電路需要5 V的電源,直流電機(jī)需要7.2 V電池直接供電,圖5為系統(tǒng)的穩(wěn)壓模塊。
3.2 電機(jī)驅(qū)動(dòng)
電機(jī)控制從控制方法上可以分為開環(huán)控制和閉環(huán)控制兩種。開環(huán)控制在用法上比較簡單,只需考慮輸出,不需要反饋信號,使用比較簡單,但是速度控制的精度較低,不能適應(yīng)不同的環(huán)境。另一種為閉環(huán)控制,電機(jī)的速度控制信號輸出由需要的速度和電機(jī)的實(shí)際轉(zhuǎn)速兩者決定,即需要對電機(jī)的實(shí)際轉(zhuǎn)速進(jìn)行采集和反饋。這種方法控制精度比較高,對賽道的適應(yīng)性較高。本文在電機(jī)驅(qū)動(dòng)電路和硬件反饋電路上做了多組試驗(yàn),最終確定了一種硬件的閉環(huán)控制方案。根據(jù)電子調(diào)速器的硬件原理,采用8個(gè)mosfet搭建電機(jī)驅(qū)動(dòng)電路。電機(jī)驅(qū)動(dòng)電路并不使用全橋驅(qū)動(dòng),而是使用半橋。這種電路結(jié)構(gòu)的好處是它可以比全橋少用一半的MOSFET,或者說在相同體積內(nèi)可以多并聯(lián)一倍的MOSFET來提升驅(qū)動(dòng)能力。此外,驅(qū)動(dòng)電路中還有一個(gè)需要注意的地方,一般的MOSFET的開啟電壓至少在4.5 V以上,而負(fù)責(zé)剎車的MOSFET其參考點(diǎn)與電池正極是連通的,因此其開啟電壓至少在12 V以上。實(shí)際設(shè)計(jì)中,本文驅(qū)動(dòng)電路使用了IRL2203作為驅(qū)動(dòng)芯片,采用4并聯(lián)驅(qū)動(dòng)、4并聯(lián)剎車的形式,使用IR2103作為mosfet driver,用MC34063升壓電路,升壓至12 V為mosfet driver供電。圖6為電機(jī)驅(qū)動(dòng)電路。
3.3 速度檢測模塊
本文自動(dòng)駕駛智能車在調(diào)試中經(jīng)常遇到速度失控的情況,例如直道速度可以很高,而彎道速度過大就會(huì)出現(xiàn)側(cè)滑,最終沖出測試跑道。各種不同的道路組合后速度時(shí)常應(yīng)對遲緩,要想改變這種情況,速度的反饋檢測就成為了速度控制的重要任務(wù)。
目前測速的方法有很多種,如:霍爾傳感器測速、紅外反射式光電測速、測速發(fā)電機(jī)、光電傳感器測速等等。通過多次試驗(yàn),霍爾測速法需加磁鋼而且間距不好控制,因此精度不高。測速發(fā)電機(jī)體積大、不易安裝,而且重量大,增大了電機(jī)負(fù)載,而且額外增加的ADC模塊也不適合;而光電傳感器檢測易受光源影響需加固定光源,因此也不能滿足要求;本文最終選擇了編碼器測速。
4 軟件設(shè)計(jì)
4.1 路徑識別
目前智能車使用比較多的路徑識別方法是通過確定跑道兩邊黑線的位置,通過求均值提取中心線的方法進(jìn)行路徑識別,所得到的中心線還需要進(jìn)行曲率計(jì)算來確定是直道還是彎道。這種路徑識別算法對圖像的質(zhì)量要求比較高,增加了濾波的難度,同時(shí)編程比較復(fù)雜,數(shù)據(jù)運(yùn)算量也比較大。
本文并沒有采用中心線提取的路徑識別算法,而是采用“全白”算法,“全白”算法指的是當(dāng)所提取的圖像信息全部為白色的時(shí)候,認(rèn)為是當(dāng)前路況為直道[4]。
首先將采樣的120列圖像分為兩部分:一部分是0~59,另一部分是60~119。將圖像分成左右兩個(gè)部分,是因?yàn)榕艿烙袃蓷l黑線分別在左右兩端,這樣分割可以保證每一部分各有一條黑線。由于單片機(jī)是逐行接收數(shù)據(jù),為了提高整個(gè)系統(tǒng)的響應(yīng)速度,沒有必要對所采樣的40行數(shù)據(jù)都要進(jìn)行判斷,只需對其中的幾行進(jìn)行判斷即可。本文選擇判斷三行,這樣既可以減少圖像噪點(diǎn)所帶來的信號采集誤差,也可以使單片機(jī)能夠及時(shí)處理[5]。
當(dāng)攝像頭采集到原始圖像后,本文采取“縮列”的方式來減少梯形失真對整個(gè)系統(tǒng)的影響,以0~59列為例,若當(dāng)前路況是直道,則反映到圖像上應(yīng)該是一條斜線且前端偏向圖像中心,所以只要是直道的情況下0~59列上一定有黑線。最終本文采用了“不全列”掃描法,“不全列”掃描法是在0~59、60~119這兩部分,只掃描其中的部分列,只要保證該部分列有黑線,即認(rèn)為該范圍內(nèi)有黑線。最終得出如下數(shù)據(jù):在0~59列的左側(cè)圖像掃描27~32列,在60~119列的右側(cè)圖像掃描75~85列,而行數(shù)掃描4、5、6行。
根據(jù)得到的行、列數(shù)據(jù)進(jìn)行路徑識別。首先要先選定一個(gè)閾值,本文經(jīng)過試驗(yàn)得出在閾值=100的時(shí)候,OV7620的成像情況比較理想,能夠很好地反映測試跑道情況。
4.2 舵機(jī)算法
彎道采用雙邊沿算法,采集到圖像中每一行的邊沿位置,并利用數(shù)組中存取兩個(gè)邊沿,進(jìn)而利用雙邊沿實(shí)現(xiàn)彎急走外道,彎緩走內(nèi)道。這樣的好處是:在彎急時(shí),由于車轉(zhuǎn)角比較大,車在大多數(shù)情況下會(huì)貼著內(nèi)道走,車輛行走的路徑的半徑比較小,一則轉(zhuǎn)彎的阻力非常大,二則程序中彎道減速非常大,這兩者的綜合結(jié)果是,車轉(zhuǎn)彎時(shí)車速非常慢,采用走外道的方法可以減弱這種狀況帶來的影響。在彎緩時(shí),由于這時(shí)車速比較快,車的轉(zhuǎn)角大,車的轉(zhuǎn)彎阻力也不大,轉(zhuǎn)向等狀況比較好,可以走內(nèi)道減少行車路徑的長度節(jié)約時(shí)間。
本文方向采用PID控制,由于積分項(xiàng)會(huì)引起滯后,而舵機(jī)轉(zhuǎn)向?qū)?dòng)態(tài)響應(yīng)性能要求較高,合適的調(diào)節(jié)比例項(xiàng)也能夠很好地保證智能車行駛的穩(wěn)定性,故將積分系數(shù)IK置0。而由于攝像頭前瞻較遠(yuǎn),不需要通過微分項(xiàng)來提高動(dòng)態(tài)響應(yīng)能力,加上微分項(xiàng)易受干擾,故將微分系數(shù)DK置0。轉(zhuǎn)向控制只使用比例項(xiàng)進(jìn)行控制。將比例系數(shù)PK按智能車速度大小進(jìn)行分段,速度小時(shí)使用小的比例系數(shù),高速時(shí)使用大的比例系數(shù),這樣在速度較低時(shí)能保證智能車不切彎過度,速度快時(shí)能提高響應(yīng)速度[6]。
4.3 控制策略與算法
本文采用增量式PID算法用來控制步進(jìn)電機(jī)(對直流電機(jī)也可以采用),其實(shí)如果對控制有更高的要求或者干擾因素較多,也可以對PID算法做各種改進(jìn),比如用梯形法做數(shù)值積分以提高精度,將差分改成一階數(shù)字濾波等。本文在實(shí)際調(diào)試的過程中,遇到過由于編碼器采樣得到的脈沖上升下降沿不夠陡峭,使得速度采樣出現(xiàn)不穩(wěn)定和失真,但由于這些附加處理比較耗費(fèi)代碼的運(yùn)行時(shí)間,出于代碼效率和實(shí)際效果的比較,因此本文沒有采用這些改進(jìn)的方案[7]。
本文介紹了基于OV7620攝像頭尋跡的智能車算法的研究。該系統(tǒng)以Freescale 16位單片機(jī)MC9S12XS128作為系統(tǒng)控制處理器,采用基于攝像頭的圖像采樣獲取賽道圖像信息,通過邊沿檢測方法提取賽道黑線,采用增量式PID控制算法,通過速度傳感器對小車形成速度閉環(huán)的控制。在硬件方面包括了電源分模塊供電和驅(qū)動(dòng)電路等部分,軟件方面包括“全白”算法、“不全列”算法等,為無人駕駛汽車提出了一種新的思路。
參考文獻(xiàn)
[1] 程亞龍.基于CMOS傳感器的智能車路徑識別研究[J].機(jī)械制造與研究,2007,36(5)13-15.
[2] Freescale Sem iconductor, Inc. MC9S12DG128 Device User Guide[M]. 2007.
[3] SHOJI M. CMOS Digital Circuit Technology Prentic Hal1[Z].1988.
[4] 譚浩強(qiáng).C語言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社(第2版)[M].2003 1-120.
[5] 夏良正.數(shù)字圖像處理[M].南京:東南大學(xué)出版社,1999.
[6] 李紹民.圖像傳感器OV7620在自主足球機(jī)器人中的應(yīng)用[J].國外電子元器件,2004(10):11-14.
[7] OmniVision Technologies, Inc.OV7620/OV7120 Specification[Z]. 2001.