![飛思卡爾__所有的算法_第1頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/5/f0b84a27-8722-48d3-b30f-923aa32b5e15/f0b84a27-8722-48d3-b30f-923aa32b5e151.gif)
![飛思卡爾__所有的算法_第2頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/5/f0b84a27-8722-48d3-b30f-923aa32b5e15/f0b84a27-8722-48d3-b30f-923aa32b5e152.gif)
![飛思卡爾__所有的算法_第3頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/5/f0b84a27-8722-48d3-b30f-923aa32b5e15/f0b84a27-8722-48d3-b30f-923aa32b5e153.gif)
![飛思卡爾__所有的算法_第4頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/5/f0b84a27-8722-48d3-b30f-923aa32b5e15/f0b84a27-8722-48d3-b30f-923aa32b5e154.gif)
![飛思卡爾__所有的算法_第5頁](http://file1.renrendoc.com/fileroot_temp2/2020-12/5/f0b84a27-8722-48d3-b30f-923aa32b5e15/f0b84a27-8722-48d3-b30f-923aa32b5e155.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第1章 電機(jī)控制1.1. 直流電機(jī)控制策略:針對本文所研究的智能車來說,車體速度是大慣性的被控對象。算法輸出的控制量只能對電機(jī)輸出力進(jìn)行控制。而有一定負(fù)載時電機(jī)的輸出力無論對車輪的轉(zhuǎn)速還是車體的形式速度都是不成正比的,車在剛開始啟動的時候速度是零,而電機(jī)的輸出可能很大;車在勻速行駛的時候速度很快,而電機(jī)的輸出可能并不是很大。而且電池電量、車體重量都會對車速造成影響。因此只有用閉環(huán)才能對車速進(jìn)行良好的控制。在車輪對地面不打滑的情況下車體的速度和后輪的轉(zhuǎn)動速度是成正比的。因此我們可以直接用光電碼盤對后輪的轉(zhuǎn)速進(jìn)行控制。對于這樣一個大慣性系統(tǒng),我們選用PID和魯棒相結(jié)合的辦法進(jìn)行速度控制?;芈返脑O(shè)定
2、值由經(jīng)驗值確定。考慮到速度控制通道的時間滯后比較小,因此采用PID控制方案,并在進(jìn)行加減速控制時,引入了“棒棒控制”。U(k + 1) = U(K) + P1 * e(k) + P2 * (e(k) e(k - 1) + P3 * (e(k) e(k-1) (e(k-1) e(k - 2);公式 11 PID的公式其中第一項為積分項;第二項為比例項;第三項為微分項??紤]到被控對象(車體速度)本身是一個大的積分環(huán)節(jié),公式中可以將第一項省略,即采用PD控制。E為誤差。同時設(shè)定誤差門限,在誤差比較大的時候采用大輸出控制電機(jī),將誤差在最短時間內(nèi)減小到所要求的范圍,這就是魯棒控制的思想。電機(jī)控制策略,其
3、實就是對模型車速度的控制策略,它是繼路徑識別之后非常重要的策略,直接關(guān)系到整個模型車比賽的性能。速度控制得當(dāng),小車才能以最好的狀態(tài),在最短的時間完成比賽路程。1.1.1. 彎道速度控制 在模型車入彎時刻出于穩(wěn)定性考慮做減速控制。減速原則是在原來直道速度設(shè)定值的基礎(chǔ)上,減小速度設(shè)定值到低速擋,保證模型車可以安全入彎。另一方面,入彎之后,為了過彎時模型車能夠不明顯的左右擺動并采用較好的姿態(tài)通過彎路,令車速與偏差成線性關(guān)系,偏差越大速度設(shè)定值越小。速度設(shè)定方法如Error! Reference source not found.。.公式 12其中:為速度閉環(huán)設(shè)定值; 模型車全程運(yùn)動平均速度設(shè)定值;
4、車體偏離理想軌跡的當(dāng)前偏差值;為減速控制比例系數(shù)。 同時,通過實驗發(fā)現(xiàn)模型車入彎之后,令模型車以某一線性規(guī)律加速運(yùn)行可以使車在不沖出軌道的前提下以更短的時間通過彎道。控制規(guī)律 如Error! Reference source not found.。.公式 13其中:為彎道加速系數(shù); 彎道加速變量;為常數(shù),初始化時設(shè)定。入彎時刻初始化為0,每個控制周期累加1。1.1.2. 直道速度控制直道采用勻速控制方案,速度設(shè)定在此控制系統(tǒng)下可以控制的最大入彎速度。在從彎道駛出進(jìn)入直道后須進(jìn)行加速控制,增大速度設(shè)定值。因速度控制回路有一定的慣性,所以在提速時為了使速度迅速改變,加入了“棒棒控制”??刂埔?guī)律如E
5、rror! Reference source not found.。公式 14其中: 補(bǔ)償效果控制系數(shù); 調(diào)速補(bǔ)償變量。為常數(shù),初始化時設(shè)定。出彎時刻初始化為,每個控制周期累加。1.1.3. PID閉環(huán)控制算法 根據(jù)路徑識別的情況,如果當(dāng)前路徑為直道,則需要加速;若是彎道,則需要降速,而且根據(jù)不同的彎道速度也是有所區(qū)別。系統(tǒng)利用測速模塊反饋的當(dāng)前速度值,通過增量式PID算法進(jìn)行調(diào)節(jié),從而控制直流電機(jī)對當(dāng)前路徑進(jìn)行快速反應(yīng)。增量式PID的算式為:在增量式PID處理的過程中,有一個步驟需要注意,即在算完u (k)后,需要把它賦值給電機(jī)控制對應(yīng)的PWM通道信號,這時要判斷該u (k)的值,如果它小于
6、0,則把PWM信號賦值為0,如果它大于PWM信號的最大值,即大于PWM整個周期所對應(yīng)的數(shù)值時,要把PWM信號賦值為該最大值。然后,再存儲本次u (k),和上次u (k)。error=speed_v-infrared_value7;pwmtemp=PWMDTY23+PID_P*(error-last_error)+PID_I*(error)+PID_D*(error+pre_error-2*last_error);由上述代碼中,speed_v表示標(biāo)準(zhǔn)速度,infrared_value7表示ATD1轉(zhuǎn)換的經(jīng)公式4.5計算出的即時速度值,通過計算它們的差值error,再利用增量PID控制算法計算出p
7、wmtemp,再對pwmtemp進(jìn)行處理,最后PID程序處理的結(jié)果是給出一個PWM信號,而這個信號就是驅(qū)動電機(jī)的,當(dāng)error大,即標(biāo)準(zhǔn)速度和即時速度相差的比較多時,pwmtemp的絕對值相對比較大,則給電機(jī)的PWM信號相對較大,這樣電機(jī)轉(zhuǎn)速相對較快;反之,電機(jī)轉(zhuǎn)速則相對較慢。由此可以看出,PID算法主要的功能是,在閉環(huán)系統(tǒng)中,利用即時速度的反饋,使得即時速度逼近標(biāo)準(zhǔn)速度的時間盡量變短,這樣小車就可以根據(jù)路徑識別得出的速度標(biāo)準(zhǔn)值,及時調(diào)整自己的速度,以適應(yīng)各種路況。例如,小車正在直道上行進(jìn),而且直道的時速應(yīng)該是各種賽道中最快的,當(dāng)系統(tǒng)的路徑識別算法察覺到前方出現(xiàn)弧度大的彎道后,系統(tǒng)會根據(jù)事先調(diào)
8、試的結(jié)果,給出大弧度彎道的速度標(biāo)準(zhǔn)值,然后PID算法根據(jù)速度標(biāo)準(zhǔn)值speed_v和即時速度反饋值infrared_value7對電機(jī)的輸入信號PWM進(jìn)行及時調(diào)整,反映到實際中,就是小車及時減速并順利通過彎道。在增量式PID處理的過程中,有一個步驟需要注意,即在算完u (k)后,需要把它賦值給電機(jī)控制對應(yīng)的PWM通道信號,這時要判斷該u (k)的值,如果它小于0,則把PWM信號賦值為0,如果它大于PWM信號的最大值,即大于PWM整個周期所對應(yīng)的數(shù)值時,要把PWM信號賦值為該最大值。1.2. 反向制動算法要使賽車在較短的時間完成比賽,速度自然越高越好,顯然速度太高彎道是過不去的,如果以彎道的極限速
9、度勻速跑,又浪費(fèi)了直道的時間。所以最佳的策略是直道以較高的速度跑,到彎道時再盡快將速度降下來。在入彎減速時如果只靠賽道的摩擦阻力效果顯然是不夠理想的。為此我們引入反向制動算法。由于MC33886芯片集成的H橋驅(qū)動電路本身就具有反向制動功能,所以不需再外加硬件電路。反向制動流程圖如圖:在制動時,電機(jī)反向電動勢對整個系統(tǒng)電路造成的沖擊,從而引起單片機(jī)工作不穩(wěn)定,電流過大導(dǎo)致電機(jī)過熱、電機(jī)頻繁換向?qū)е码娝⒋蚧饎×覍?dǎo)致電機(jī)壽命縮短等一系列問題都是需要考慮的。1.3. 速度控制策略1、為了達(dá)到好的速度控制效果,對速度進(jìn)行閉環(huán)控制是必須的。這里所說的速度控制策略是指設(shè)定速度的確定方法設(shè)定速度主要由道路與直
10、道的偏差來決定,道路越接近直道,設(shè)定速度越高,反之越低。車模行駛中的最低速度是這樣確定的:令車模以較低的速度勻速行使,在保證無犯規(guī)行為出現(xiàn)的前提下,逐漸提高勻速行使的速度,直到車模出現(xiàn)犯規(guī)行為,此速度再減去一個安全量,即為所需的最低速度。簡單的說,變速行使的最低速度等于勻速行使的最高速度。車模行駛中的最高速度是這樣確定的:在確定最低速度以后,加入變速策略,不斷提高最高速度的設(shè)定值,直到模型車出現(xiàn)犯規(guī)行為,此速度再減去一個安全量,即為所需的最高速度。車模行駛過程中難免出現(xiàn)“失去道路”的情況,對此需要采取一定的安全策略,防止賽車“盲跑”而導(dǎo)致犯規(guī)。2、針對本文所研究的智能車來說,車體速度是大慣性的
11、被控對象。算法輸出的控制量只能對電機(jī)輸出力進(jìn)行控制。而有一定負(fù)載時電機(jī)的輸出力無論對車輪的轉(zhuǎn)速還是車體的形式速度都是不成正比的,車在剛開始啟動的時候速度是零,而電機(jī)的輸出可能很大;車在勻速行駛的時候速度很快,而電機(jī)的輸出可能并不是很大。而且電池電量、車體重量都會對車速造成影響。因此只有用閉環(huán)才能對車速進(jìn)行良好的控制。在車輪對地面不打滑的情況下車體的速度和后輪的轉(zhuǎn)動速度是成正比的。因此我們可以直接用光電碼盤對后輪的轉(zhuǎn)速進(jìn)行控制。對于這樣一個大慣性系統(tǒng),我們選用PID和棒棒相結(jié)合的辦法進(jìn)行速度控制?;芈返脑O(shè)定值由經(jīng)驗值確定??紤]到速度控制通道的時間滯后比較小,因此采用PID控制方案,并在進(jìn)行加減速
12、控制時,引入了“棒棒控制”。U(k + 1) = U(K) + P1 * e(k) + P2 * (e(k) e(k - 1) + P3 * (e(k) e(k-1) (e(k-1) e(k - 2);公式 15 PID的公式其中第一項為積分項;第二項為比例項;第三項為微分項。考慮到被控對象(車體速度)本身是一個大的積分環(huán)節(jié),公式中可以將第一項省略,即采用PD控制。E為誤差。同時設(shè)定誤差門限,在誤差比較大的時候采用大輸出控制電機(jī),將誤差在最短時間內(nèi)減小到所要求的范圍,這就是棒棒控制的思想。電機(jī)控制策略,其實就是對模型車速度的控制策略,它是繼路徑識別之后非常重要的策略,直接關(guān)系到整個模型車比賽的
13、性能。速度控制得當(dāng),小車才能以最好的狀態(tài),在最短的時間完成比賽路程。1.3.1. 彎道速度控制在模型車入彎時刻出于穩(wěn)定性考慮做減速控制。減速原則是在原來直道速度設(shè)定值的基礎(chǔ)上,減小速度設(shè)定值到低速擋,保證模型車可以安全入彎。另一方面,入彎之后,為了過彎時模型車能夠不明顯的左右擺動并采用較好的姿態(tài)通過彎路,令車速與偏差成線性關(guān)系,偏差越大速度設(shè)定值越小。速度設(shè)定方法如Error! Reference source not found.。.公式 16其中:為速度閉環(huán)設(shè)定值; 模型車全程運(yùn)動平均速度設(shè)定值; 車體偏離理想軌跡的當(dāng)前偏差值;為減速控制比例系數(shù)同時,通過實驗發(fā)現(xiàn)模型車入彎之后,令模型車以
14、某一線性規(guī)律加速運(yùn)行可以使車在不沖出軌道的前提下以更短的時間通過彎道。控制規(guī)律如Error! Reference source not found.。.公式 17其中:為彎道加速系數(shù); 彎道加速變量;為常數(shù),初始化時設(shè)定。入彎時刻初始化為0,每個控制周期累加1。1.3.2. 直道速度控制直道采用勻速控制方案,速度設(shè)定在此控制系統(tǒng)下可以控制的最大入彎速度。在從彎道駛出進(jìn)入直道后須進(jìn)行加速控制,增大速度設(shè)定值。因速度控制回路有一定的慣性,所以在提速時為了使速度迅速改變,加入了“棒棒控制”??刂埔?guī)律如Error! Reference source not found.。公式 18其中: 補(bǔ)償效果控制
15、系數(shù); 調(diào)速補(bǔ)償變量。為常數(shù),初始化時設(shè)定。出彎時刻初始化為,每個控制周期累加。 1.3.3. 速度及加速度信號采集子程序當(dāng)圖像數(shù)據(jù)采集處理完后,我們讀取速度傳感器和加速度傳感器的值,采集這兩個傳感器信號的頻率也為60Hz。流程圖如圖4.3所示。子程序入口讀速度傳感器的值讀加速度傳感器的值讀兩個16位脈沖計數(shù)器的值返回主程序圖4.3速度及加速度信號采集子程序流程圖1.4. 速度PID算法根據(jù)偏差的比例(Proportional)、積分(Integral)、微分(Derivative)的線性組合進(jìn)行反饋控制(簡稱PID控制),數(shù)字PID控制算法是電機(jī)微機(jī)控制中常用的一種基本控制算法9。在連續(xù)系統(tǒng)
16、中,模擬PID調(diào)節(jié)器是一種線性調(diào)節(jié)器,控制系統(tǒng)原理框圖如圖5.10。圖5.10 PID控制系統(tǒng)原理框圖控制規(guī)律為: (5.1)式中:比例增益,的倒數(shù)稱為比例帶;:積分時間常數(shù);:微分時間常數(shù);:控制量;:偏差,等于給定量與反饋量的差。在計算機(jī)控制系統(tǒng)中,數(shù)字PID控制算法通常又分為位置式PID和增量式PID。本次設(shè)計中,我們采用增量式PID。增量型算法與位置型算法相比,具有以下優(yōu)點(diǎn):增量型算法不需要做累加,增量的確定僅與最近幾次偏差采樣值有關(guān),計算精度對控制量的計算影響較小,而位置型算法要用到過去偏差的累加值,容易產(chǎn)生大的累加誤差;增量型算法得出的是控制量的增量,而位置型算法的輸出是控制量的全
17、量輸出,誤動作影響大;采用增量型算法,易于實現(xiàn)手動到自動的無沖擊切換。在實際應(yīng)用中,采樣的反饋值即為脈沖累加器中的PACN32中的脈沖數(shù),預(yù)設(shè)門限值在參數(shù)整定時根據(jù)實際情況調(diào)節(jié),輸出并不能直接用來控制電機(jī),需要將其轉(zhuǎn)換為控制PWM占空比,然后用增大或減小PWM占空比的方法來實現(xiàn)對電機(jī)的加減速的控制。換句話說,在求偏差量時,實際上用的是每20ms電機(jī)轉(zhuǎn)過的齒輪數(shù)和實際期望電機(jī)轉(zhuǎn)過的齒輪數(shù),通過二者的差值,再乘以相應(yīng)的系數(shù),即KP、KI、KD的協(xié)調(diào)控制,計算出相應(yīng)的PWM占空比,實際上用的是PWMDTY的值10。本設(shè)計中綜合考慮各種因素,最后選用的采樣周期為20ms,即每20ms對電機(jī)進(jìn)行一次PI
18、D調(diào)節(jié)。由于在程序中,對圖像的采集使用的是PH口的中斷程序,因此,PID采樣周期的選擇實際上是受限制與圖像采集,因為每行的掃描周期為64s,有效掃描時間為52s,采用的是隔行掃描的方式,即每隔6行采集一行圖像的信息,如果在每行之間加入PID調(diào)節(jié)的話,那么處理PID子程序的時間必須控制在64*5320s之內(nèi),另外圖像采集只是采集了奇場中的行數(shù),在偶場中沒有采集,因此PID子程序的執(zhí)行是不均勻的,并沒有達(dá)到預(yù)期的效果,同時還可能會影響到視頻采集,因此,經(jīng)過分析,最終決定將PID的采樣周期定為20ms,即當(dāng)進(jìn)行一次場采集進(jìn)行一次PID調(diào)節(jié)。而且經(jīng)過最終的檢驗,這樣能夠滿足對速度控制的需要。電機(jī)調(diào)速本
19、作品采用增量式的PI控制。增量式PI調(diào)節(jié)set_value電機(jī)輸出測速檢測圖4.12增量式PI算法: pwm=Kp*(errork0-errork1)/100+Ki*errork0/100+pwm;1.5. 直流驅(qū)動電機(jī)控制子程序本設(shè)計通過調(diào)整方波的占空比來實現(xiàn)電機(jī)的調(diào)速。經(jīng)過初始化子程序的設(shè)置,PWM0和PWM5都能輸出頻率為5KHz的方波。由硬件部分可知,PWM0產(chǎn)生的方波經(jīng)MC33886功率放大后接到電機(jī)的負(fù)極,PWM5產(chǎn)生的方波經(jīng)MC33886功率放大后接到電機(jī)的正極。車模向前行駛時,PWM0輸出方波的占空比為零,通過調(diào)整PWM5輸出方波的占空比實現(xiàn)加速或緩慢減速。當(dāng)需要快速減速時,P
20、WM5輸出方波的占空比為零,PWM0輸出方波的占空比為合適的值,電機(jī)反轉(zhuǎn)實現(xiàn)車模制動。該部分程序工作流程圖如圖4.7所示。YN圖4.7 驅(qū)動電機(jī)控制子程序流程圖是否需要制動返回主程序修改PWMDTY5的值獲得速度控制值子程序入口修改PWMDTY0及PWMDTY5值返回主程序1.6. 舵機(jī)控制1.6.1. 舵機(jī)轉(zhuǎn)角的決策由于CCD圖像傳感器的應(yīng)用,大大提高了車的前瞻性。經(jīng)測量,本系統(tǒng)預(yù)測距離可達(dá)1米以上。但是,考慮到各部件延時嚴(yán)重且具有很大不確定性,所以預(yù)測距離越遠(yuǎn),控制算法就會越復(fù)雜。綜合各種因素考慮,我們最終將預(yù)測距離定在80100cm。黑線中心位置軌跡中包含著兩方面的信息,一方面是反映前方
21、道路趨勢的信息,另一方面是反映車體與軌道偏離程度的信息。經(jīng)過反復(fù)試驗,我們發(fā)現(xiàn),前者可以通過計算黑線的斜率來很好的描述。而后者,恰恰就是屏幕最下端黑線的位置。最后用這二者的線性組合得到舵機(jī)轉(zhuǎn)角。有了這兩方面信息,可以使智能車既能充分利用前瞻性,又能不過分地偏離軌道。從而得到了較理想的轉(zhuǎn)角控制策略解決方案。1.6.2. 偏航距離的計算由于已經(jīng)獲得了賽道中心線的位置,所以計算偏航距離的問題是選取何處的中心線的距離為當(dāng)前的偏航距離。控制算法的執(zhí)行周期為40ms,如果賽車的速度為2m/s,則在兩次控制算法的執(zhí)行中間,賽車要前進(jìn)8cm,賽車所處的環(huán)境將發(fā)生比較大的改變,所以賽車的控制只能算是半實時控制,
22、這是所有使用攝像頭作為主要尋線傳感器的參賽隊都避免不了的問題。因為算法的滯后性,賽車需要將“當(dāng)前位置”進(jìn)行適當(dāng)前移。前移量應(yīng)該跟賽車當(dāng)前速度成正比,但實際中我們發(fā)現(xiàn),適當(dāng)增加一些前移距離是有好處的,因為可以在入彎處提前轉(zhuǎn)彎,使得賽車沿彎道內(nèi)側(cè)行駛,縮短了過彎距離。1.6.3. 舵機(jī)參數(shù)測定通過實驗測出已安裝在模型車上的舵機(jī)的中位PWM值(Servo_center),模型車轉(zhuǎn)向輪左右極限時舵機(jī)PWM(Servo_left、Servo_right)值是舵機(jī)控制的基礎(chǔ)。測試舵機(jī)中位時,先在舵機(jī)控制模塊中給舵機(jī)PWM設(shè)計一個全局變量(Pwm_Servo),將賽車放在長直道上,保證車身放正并處于賽道正中
23、間,利用BDM查看此時Pwm_Servo的值,將此值直接賦給舵機(jī)PWM,并將賽車放到直道上跑,看是否跑偏,微調(diào)Pwm_Servo的值,直到賽車在直道上不再跑偏為止。測定舵機(jī)左右極限時,可根據(jù)轉(zhuǎn)向輪的左右極限轉(zhuǎn)角,利用BDM查看舵機(jī)Servo_left和Servo_right的值。注意轉(zhuǎn)向輪在左右極限轉(zhuǎn)角時,轉(zhuǎn)向輪不可被賽車底盤卡住,這樣不但會增加轉(zhuǎn)向阻力,嚴(yán)重時還可能使轉(zhuǎn)向輪抱死,失去轉(zhuǎn)向能力。舵機(jī)的PWM計算公式為:Pwm_Servo=Servo_center+(Servo_left-Servo_right)/Simage_number*offline_one; 公式四式中Simage_nu
24、mber為每行采集的點(diǎn)數(shù),offline_one為黑線在整幅圖像中的位置。1.6.4. 路徑規(guī)劃要想以最短的時間完成比賽,并不需要嚴(yán)格按照黑色引導(dǎo)線行駛,我們需要找出相對較短的行駛路徑,即路徑規(guī)劃。例如 過普通彎道的時候,以同樣的速度走內(nèi)彎顯然比走中間或外彎所花時間少,過小S形彎時。直接過去和嚴(yán)格循跡相比速度快,行駛距離短等等。(圖)如果能提前預(yù)知前方賽道信息,那么我們就有可能對路徑進(jìn)行規(guī)劃。由于我們采用的是攝像頭,掃描距離較大,這就為我們進(jìn)行路徑規(guī)劃提供了條件,這也是我們選擇攝像頭的原因之一。由于攝像頭看得較遠(yuǎn),每幅圖像反映的賽道信息量較大,我們需要針對賽車在不同位置,對其有側(cè)重的采用。具體
25、就是將采到的15行劃分為幾個區(qū)域,針對不同路況對每個區(qū)域賦以不同的權(quán)值。其原理圖如圖:圖5.10 路徑規(guī)劃示意圖1.7. 偏航距離的計算由于已經(jīng)獲得了賽道中心線的位置,所以計算偏航距離的問題是選取何處的中心線的距離為當(dāng)前的偏航距離??刂扑惴ǖ膱?zhí)行周期為40ms,如果賽車的速度為2m/s,則在兩次控制算法的執(zhí)行中間,賽車要前進(jìn)8cm,賽車所處的環(huán)境將發(fā)生比較大的改變,所以賽車的控制只能算是半實時控制,這是所有使用攝像頭作為主要尋線傳感器的參賽隊都避免不了的問題。因為算法的滯后性,賽車需要將“當(dāng)前位置”進(jìn)行適當(dāng)前移。前移量應(yīng)該跟賽車當(dāng)前速度成正比,但實際中我們發(fā)現(xiàn),適當(dāng)增加一些前移距離是有好處的,
26、因為可以在入彎處提前轉(zhuǎn)彎,使得賽車沿彎道內(nèi)側(cè)行駛,縮短了過彎距離。1.7.1. 偏航角度的計算計算偏航角度的實質(zhì)是直線擬合問題,因為賽道中心線所在的直線確定了,而直線的斜率與偏航角度一一對應(yīng)。直線擬合最有效的方法是最小二乘法7,但是直接應(yīng)用存在一個問題,即如何確定進(jìn)行直線擬合的區(qū)間?在整個成功識別出賽道的區(qū)間內(nèi)進(jìn)行直線擬合顯然是欠缺考慮的,因為在彎道的情況下,這種方法擬合出的是一條弦線,而不是當(dāng)前該彎道處的切線。攝像頭視野越大,彎道曲率越大,弦線偏離切線的程度也就越大。為了能夠在直道和彎道上都能正確的擬合出正確的直線,我們采用了直線檢測的方法,即首先根據(jù)殘差的大小確定直線的范圍,然后在這一范圍
27、內(nèi)進(jìn)行直線擬合。1.7.2. 曲率的計算如果說斜率的計算需要某種技巧的話,計算曲率則更是一種技巧的應(yīng)用。首屆時很多參賽隊針對各自的實際需要,提出了自己的方法。其中最普遍的是根據(jù)斜率的導(dǎo)數(shù)來計算曲率8。但是斜率的計算本身就很不準(zhǔn)確,特別是某個點(diǎn)的斜率,對斜率求導(dǎo)就更不準(zhǔn)確,所以使用這種方法只能得出一個大致的結(jié)果。本文作者提出了另外一種方法,首先對獲得的路徑進(jìn)行濾波,使得路徑盡可能平滑,然后取其兩個端點(diǎn)和中間點(diǎn),計算這3個點(diǎn)組成的三角形的外接圓的半徑,半徑的倒數(shù)就是這段路徑的曲率。經(jīng)過多次實驗,這種方法的誤差一般不大于20%,對智能車的控制來說已經(jīng)足夠了。圖5.8是實驗賽道的照片,讓賽車從起跑線開
28、始,在賽道上行駛一圈,記錄下每個時刻的曲率,如圖5.9。從圖5.9可以看出,計算出的曲率能較為正確的反映實際賽道的彎曲情況。但是這種方法得出的曲率不是攝像頭所看到的當(dāng)前位置的曲率,而是攝像頭所看到的路徑的整體曲率,因為這種算法僅僅與路徑中三個點(diǎn)的位置有關(guān)。然而實驗中卻發(fā)現(xiàn),這種特點(diǎn)反而給賽車帶來了一個好處:即攝像頭在小S型彎道時舵機(jī)幾乎不跟隨路徑的擺動而擺動,而是直線沖過。這是因為較小的S型路徑其彎曲部分能完整的顯現(xiàn)在攝像頭的視野中,而算法中對路徑進(jìn)行了濾波,濾除了中間部分的彎曲,使得路徑變直了,賽車因此就直線走過。1.8. 車輛橫向控制算法本設(shè)計采用的橫向控制算法是模擬人駕駛汽車的方式控制車
29、模轉(zhuǎn)向。首先,根據(jù)圖像數(shù)據(jù)處理后的數(shù)據(jù)判斷車模偏離黑線的距離。其次,綜合考慮車速傳感器獲得的當(dāng)前速度值,計算目標(biāo)轉(zhuǎn)角。然后,在下一次采樣時,與上次采樣值比較,判斷偏離距離的變化趨勢,再次計算目標(biāo)轉(zhuǎn)角,當(dāng)車模回到中線位置時,前輪回正。該部分程序流程圖如圖4.4所示。返回主程序返回主程序Y子程序入口對近距離光電傳感器編碼,獲得車輛偏離距離是否偏離黑線?前輪回正與上次采樣值比較,判斷偏離距離變化趨勢結(jié)合車速信號,得到目標(biāo)轉(zhuǎn)角N 圖4.4 橫向控制算法流程圖1.9. 車輛縱向控制算法本設(shè)計中模型車的速度控制采用PID控制算法。首先,圖像數(shù)據(jù)處理后的數(shù)據(jù)判斷車模當(dāng)前行駛的路況,得到目標(biāo)速度值。其次,根據(jù)
30、車速度傳感器的值,判斷車速是否達(dá)到目標(biāo)速度,進(jìn)行加減速。第三,結(jié)合加速度傳感器的值判斷模型車是否發(fā)生滑移,如果滑移進(jìn)行防滑處理。該部分程序流程圖如圖4.5所示。N加速控制YNYY子程序入口由前輪速度傳感器的值計算車速是否達(dá)到目標(biāo)速度?加速控制是否發(fā)生滑轉(zhuǎn)?是否進(jìn)入彎道?防滑處理返回主程序返回主程序制動控制N圖4.5 縱向控制算法流程圖1.10. 轉(zhuǎn)向控制子程序由于舵機(jī)反應(yīng)速度的局限,本設(shè)計每10ms對舵機(jī)控制一次??芍狿WM23已經(jīng)在初始化子程序中設(shè)置完畢,其能產(chǎn)生周期為20ms的方波,在此我們只需修改PWMDTY23寄存器即可改變方波的占空比,進(jìn)而控制舵機(jī)轉(zhuǎn)向。本車舵機(jī)的安裝位置和PWM23
31、通道的設(shè)置使得前輪在中間位置時,PWMDTY23的值為4960,左極限位置時值為5300,右極限位置時為4640,即將左極限位置到右極限位置的轉(zhuǎn)向級別分為660級。為了防止舵機(jī)轉(zhuǎn)向超過極限位置,發(fā)生卡死現(xiàn)象,損壞舵機(jī),本設(shè)計通過軟件限定極限轉(zhuǎn)角。該子程序工作過程如圖4.6所示。N是否超出范圍?返回主程序修改PWMDTY23的值獲得轉(zhuǎn)向角度值子程序入口賦給極限角度值YN圖4.6 舵機(jī)控制子程序流程圖1.11. 車體控制策略:對于硬件結(jié)果已經(jīng)確定的智能車來說,算法控制的實際上就是車體的方向和速度,即前輪舵機(jī)的轉(zhuǎn)角和后輪的轉(zhuǎn)速。如果前面圖像識別和慮噪環(huán)節(jié)做的好的話,對于控制量的給出的算法就相對容易,
32、但是需要花很大精力進(jìn)行參數(shù)的調(diào)整,使得車的行駛軌跡更加優(yōu)化,并且讓速度盡可能的提高。對于前輪的控制來說,由于執(zhí)行機(jī)構(gòu)(舵機(jī))和被控對象的慣性相對較小,換句話說算法給出的控制量在誤差允許 的范圍內(nèi)可以認(rèn)為由執(zhí)行機(jī)構(gòu)準(zhǔn)確執(zhí)行,可以進(jìn)行開環(huán)的控制2。我們的控制算法是在圖像中分別取上、中、下三個點(diǎn),即在23行的數(shù)組中取3、12、21三個點(diǎn),計算出圖像的位置,然后用最上面一點(diǎn)和最下面一點(diǎn)的差做為圖像的斜率。然后用兩者的線性組合算出舵機(jī)的轉(zhuǎn)角。用下面公式給出:Warp = P1 * ( Average2 + Average11 + Average20) + P2 * (Average20 Average2
33、)公式 19 舵機(jī)的轉(zhuǎn)角公式其中,warp 是車體對于黑線的誤差,也是舵機(jī)應(yīng)該轉(zhuǎn)動的角度。同時,我們發(fā)現(xiàn)在車運(yùn)行過程當(dāng)中經(jīng)常會出現(xiàn)圖像中只有半幅圖像有線,或者整幅圖像都沒有黑線的情況。在半幅圖像有線的情況下,我們就用圖像的在視野中的終點(diǎn)、圖像最下面的點(diǎn)及兩者的中點(diǎn)進(jìn)行控制;如果整幅圖像都沒有黑線,就讓車的舵機(jī)保持上一次的轉(zhuǎn)角,一直到圖像重新恢復(fù)到視野。對于前輪的控制來說,由于執(zhí)行機(jī)構(gòu)(舵機(jī))和被控對象的慣性相對較小,換句話說算法給出的控制量在誤差允許 的范圍內(nèi)可以認(rèn)為由執(zhí)行機(jī)構(gòu)準(zhǔn)確執(zhí)行,可以進(jìn)行開環(huán)的控制。第2章 圖象采集2.1. 采集1、一場圖像采集完成后,得到一幅20*20的原始二值圖像信
34、息,如圖4.3(A)所示,同時給標(biāo)志變量VideoFinFlag置1。主程序中檢測到此標(biāo)志的時候,啟動濾噪程序。考慮到圖像中有效的信息為簡單的黑色線條,必然具有很強(qiáng)的連續(xù)性。所以,可以采用從圖像一側(cè)到另一側(cè),逐行鄰域查詢的辦法。具體來說,就是根據(jù)已經(jīng)確定的前行黑線中心位置,在本行的一個鄰域內(nèi)查找黑點(diǎn)。超出這個鄰域的黑點(diǎn)都認(rèn)為是無效的。這樣,只要能夠確定某一行黑線的中心位置,就能逐行確定各行黑線的中心位置,從而,也就提取出了圖像中最基本的信息黑線中心位置軌跡(如圖4.3(B)所示)。原始圖像信息 處理后的信息 221100000-1-1000-1-1-2-2-2-3(A)(B)圖4.3 處理前后
35、的圖像信息2、閾值分割法是一種基于區(qū)域的分割技術(shù),它對物體與背景有較強(qiáng)對比的景物的分割特別有用。它計算簡單,而且總能用封閉且連通的邊界定義不交疊的區(qū)域。閾值分割法的關(guān)鍵在于閾值的確定。如果閾值是不隨時間和空間而變的,稱為靜態(tài)閾值;如果閾值隨時間或空間而變化,稱為而動態(tài)閾值?;陟o態(tài)閾值的分割方法算法簡單,計算量小,但是適應(yīng)性差。基于動態(tài)閾值的分割方法其復(fù)雜程度取決于動態(tài)閾值的計算方法6。針對本智能車系統(tǒng),普通的雙峰法就能適合絕大部分情況,因為智能車的運(yùn)行環(huán)境是比賽賽道,背景和前景區(qū)分明顯,且背景簡約。但是實驗環(huán)境并不理想,由于受到光線斜射的影響,有時背景和前景的對比十分不明顯。結(jié)合實際需要,提
36、出了一種新的計算閾值的方法,這種方法的思想與迭代法有些相似。首先我們假定,智能車系統(tǒng)運(yùn)行時,開始時采集的第一幅圖像是良好的。這個“良好”含義是:第一行也就是最近處的一行,完整的包含了導(dǎo)航線,并且使用“雙峰法”能正確提取。其次,我們對每一行都定義一個閾值Tr,每一行都用該行的閾值Tr進(jìn)行分割。在此基礎(chǔ)上按照以下規(guī)則進(jìn)行閾值傳遞:a) 如果第r行分割出來的黑色區(qū)域(線段)是連續(xù)的,那么計算目標(biāo)區(qū)域和背景區(qū)域的平均灰度值,并取其中值,做為當(dāng)前行和下一行的Tr。b) 如果第r行分割出來的黑色區(qū)域是空集或者不連續(xù),則保持當(dāng)前行和下一行的閾值不變。下濾波算法:當(dāng)某點(diǎn)的灰度值與其左邊和右邊點(diǎn)的灰度值的差同時
37、大于某個正閾值或同時小于某個負(fù)閾值時,認(rèn)為該點(diǎn)是干擾點(diǎn),取其左右兩邊灰度值的平均值作為該點(diǎn)的灰度值。2.2. 圖像抗干擾處理抗干擾處理包括以下方面的內(nèi)容:1)消除信號產(chǎn)生和傳輸?shù)倪^程中造成的噪聲;2)消除賽道不理想或光線不均勻形成的干擾;3)消除賽道中的交叉線、斷續(xù)線;4)識別起跑線。信號產(chǎn)生和傳輸?shù)倪^程中造成的噪聲具有普遍性,但是只有當(dāng)其非常嚴(yán)重時才對路徑的識別造成影響。所以采取以下濾波算法:當(dāng)某點(diǎn)的灰度值與其左邊和右邊點(diǎn)的灰度值的差同時大于某個正閾值或同時小于某個負(fù)閾值時,認(rèn)為該點(diǎn)是干擾點(diǎn),取其左右兩邊灰度值的平均值作為該點(diǎn)的灰度值。對于賽道不理想或光線不均勻形成的干擾,其一般特點(diǎn)是散布于
38、賽道黑線的兩邊,所以采用以下算法處理:步驟1 從最近的第一行開始,尋找這樣一個行:該行只有一段連續(xù)黑色線段,且線段的左右邊均不是圖像的左右邊。標(biāo)記該行為Start行。步驟2 在下一行中尋找這樣一段連續(xù)黑色線段,滿足這樣的條件:其左邊緣不在上一行黑線右邊緣的右邊,且其右邊緣不在上一行黑線左邊緣的左邊。步驟3 如果存在步驟2中的黑色線段,認(rèn)為該段黑線是賽道黑線,其余黑點(diǎn)(線段)均認(rèn)為是干擾,跳步驟2。否則,標(biāo)記該行為End行,并計算該行與Start行之差,如果大于3,則結(jié)束搜索,如果小于等于3,則返回步驟1。這種算法的實質(zhì)是搜索連續(xù)的黑線。因為賽道是連續(xù)的,而干擾卻大部分是離散分布的。對于賽道中的
39、交叉線,可以統(tǒng)計一行中黑點(diǎn)的個數(shù),因為正常的黑線只有2.5cm,在圖像中不超過6個點(diǎn)。所以把6作為一個閾值TN,如果一行黑點(diǎn)的個數(shù)超過TN個點(diǎn),就可以認(rèn)為是交叉干擾。實際上,我們做了更復(fù)雜的處理,就是根據(jù)當(dāng)前賽道的傾斜程度來調(diào)節(jié)TN,因為當(dāng)賽道傾斜時其寬度將發(fā)生變化。并且,我們不只是識別出交叉干擾,而且“砍掉”它的左右兩支,保留一條連續(xù)的賽道黑線。起跑線是在賽道黑線的左右兩邊,對稱存在兩條長度各為10cm,相距6cm,且與賽道黑線垂直的黑色線段。正確的識別起跑線是應(yīng)用更高級控制算法如記憶算法的基礎(chǔ)。我們使用如下算法識別起跑線:在已識別出賽道黑線的行,保證該行不是交叉行(前面已經(jīng)識別出),然后確
40、定其左右兩邊各一個矩形區(qū)域,統(tǒng)計兩個區(qū)域中黑點(diǎn)的個數(shù),如果均大于某一閾值,則判斷該行出現(xiàn)了起跑線。比賽中將設(shè)置限速段,限速段的一種可能的標(biāo)記法就是把賽道黑線做成斷續(xù)的,斷續(xù)寬度2cm,間隔2cm,所以并不是所有不連續(xù)的黑點(diǎn)都是干擾。這給參賽選手帶來了很大的挑戰(zhàn)。我們采取的應(yīng)對算法是,在遇到斷續(xù)的行時,按當(dāng)前已識別出的黑線的走向趨勢延伸黑線到該行,如果在3行內(nèi)發(fā)現(xiàn)了可以連接的黑線,則認(rèn)為延伸成功,否則結(jié)束搜索。經(jīng)過以上處理,我們得到了如下信息:首先是兩個標(biāo)記Start和End,這兩個標(biāo)記標(biāo)記了成功識別出的賽道的最近一行和最遠(yuǎn)一行;其次是在Start和End之間的每一行,記錄了其賽道的左邊緣位置和
41、右邊緣位置,并且通過坐標(biāo)變換算法,計算出每行賽道中心線的實際位置。最后留下了一些其它標(biāo)志,比如每行是否是交叉、起跑線或者斷續(xù)線。這些標(biāo)志在我們調(diào)試的過程中都用某種方式以圖像的形式反映出來。整個處理過程如圖5.6。如果說斜率的計算需要某種技巧的話,計算曲率則更是一種技巧的應(yīng)用。首屆時很多參賽隊針對各自的實際需要,提出了自己的方法。其中最普遍的是根據(jù)斜率的導(dǎo)數(shù)來計算曲率8。但是斜率的計算本身就很不準(zhǔn)確,特別是某個點(diǎn)的斜率,對斜率求導(dǎo)就更不準(zhǔn)確,所以使用這種方法只能得出一個大致的結(jié)果。本文作者提出了另外一種方法,首先對獲得的路徑進(jìn)行濾波,使得路徑盡可能平滑,然后取其兩個端點(diǎn)和中間點(diǎn),計算這3個點(diǎn)組成
42、的三角形的外接圓的半徑,半徑的倒數(shù)就是這段路徑的曲率。經(jīng)過多次實驗,這種方法的誤差一般不大于20%,對智能車的控制來說已經(jīng)足夠了。圖5.8是實驗賽道的照片,讓賽車從起跑線開始,在賽道上行駛一圈,記錄下每個時刻的曲率,如圖5.9。從圖5.9可以看出,計算出的曲率能較為正確的反映實際賽道的彎曲情況。但是這種方法得出的曲率不是攝像頭所看到的當(dāng)前位置的曲率,而是攝像頭所看到的路徑的整體曲率,因為這種算法僅僅與路徑中三個點(diǎn)的位置有關(guān)。然而實驗中卻發(fā)現(xiàn),這種特點(diǎn)反而給賽車帶來了一個好處:即攝像頭在小S型彎道時舵機(jī)幾乎不跟隨路徑的擺動而擺動,而是直線沖過。這是因為較小的S型路徑其彎曲部分能完整的顯現(xiàn)在攝像頭
43、的視野中,而算法中對路徑進(jìn)行了濾波,濾除了中間部分的彎曲,使得路徑變直了,賽車因此就直線走過。2.3. 圖像濾波找出二值化以后的圖像每一行中的黑色區(qū)域,如果只有一個黑色區(qū)域,則記下黑色區(qū)域起始點(diǎn)對應(yīng)的列號和結(jié)束點(diǎn)對應(yīng)的列號,求平均值即為黑線中心,如果黑色區(qū)域大于或者等于兩個該行圖像信息有錯,則利用該行相鄰行找出正確的黑線位置。 如果連續(xù)幾行都為錯,則放棄這幾行,直道找到正確行為止,再將剛才放棄的部分黑線補(bǔ)上。2.4. 梯形失真校正梯形失真會導(dǎo)致路進(jìn)識別不準(zhǔn)甚至出錯,我們對梯形失真進(jìn)行了簡單校正。我們采用比例法來矯正梯形失真。由于攝像頭視野最遠(yuǎn)處的寬度和最近出的寬度顯然是不一樣的,而攝像頭的行分
44、辨率是相同的,這就導(dǎo)致兩個采樣點(diǎn)之間的實際距離是不一樣的,而單片機(jī)卻認(rèn)為他們是一樣的,這也是導(dǎo)致梯形失真的原因。我們測量出攝像頭掃描賽道最近處和最遠(yuǎn)處視野寬度,算出相鄰兩個采樣點(diǎn)所代表的實際距離,再量出視野長度,中間各行相鄰兩采樣點(diǎn)之間的距離根據(jù)其行號按比例計算出來。 1:原始圖片2:閾值分割3:消除干擾4:提取中心線并進(jìn)行坐標(biāo)變換1 23 4圖5.7 賽道抗干擾處理2.5. 路徑識別路徑識別是整個算法的重點(diǎn),幾乎所有的控制算法都是建立在路徑識別上的。路徑識別主要是普通彎道、小S形彎道、大S形彎道、十字交叉道的識別。普通彎道是最容易識別的,可以根據(jù)偏移量、曲率等來識別。我們采用前一種,這種方法
45、不但算法簡單,而且還可以用于識別多種路況。其具體思路就是將整幅圖像的引導(dǎo)線位置相加再求平均值,再根據(jù)我們試驗得到的數(shù)據(jù)設(shè)定閾值:直道和小S形彎道判斷的閾值(我們將小S形彎道也處理成直道),只要平均值小于該值就為直道,大于該值則為普通彎道或大S形彎道,再根據(jù)平均值的大小和當(dāng)前車速做加減速控制和舵機(jī)打角控制。十字交叉道識別也較重要,該處處理不好賽車則不會按預(yù)定路線行進(jìn),圖為我們處理前后的交叉道的情況:圖5.7 路徑識別前后的交叉道2. 圖像平滑(去噪):用信號處理的理論來解釋,我們的做法實現(xiàn)的是一種簡單的低通濾波器(low pass filter)。在灰度連續(xù)變化的圖象中,如果出現(xiàn)了與相鄰像素的灰
46、度相差很大的點(diǎn),比如說一片暗區(qū)中突然出現(xiàn)了一個早點(diǎn),這種情況被認(rèn)為是一種噪聲。灰度突變在頻域中代表了一種高頻分量,低通濾波器的作用就是濾掉高頻分量,從而達(dá)到減少圖象噪聲的目的。為了方便的敘述上面所說的“將原圖中的每一點(diǎn)的灰度和它周圍八個點(diǎn)的灰度相加,然后除以9,作為新圖中對應(yīng)點(diǎn)的灰度”這一操作,我們用如下的表示方法:圖 21模板表示方法這種表示方法有點(diǎn)象矩陣,我們稱其為模板(template)。中間的黑點(diǎn)表示中心元素(此處用*表示),即,用哪個元素做為處理后的元素。例如 表示將自身的2倍加上右邊的元素作為新值,而 表示將自身加上左邊元素的2倍作為新值。通常,模板不允許移出邊界,所以結(jié)果圖象會比
47、原圖小。模板操作實現(xiàn)了一種鄰域運(yùn)算(Neighborhood Operation),即,某個像素點(diǎn)的結(jié)果不僅和本像素灰度有關(guān),而且和其鄰域點(diǎn)的值有關(guān)。在以后介紹的細(xì)化算法中,我們還將接觸到鄰域運(yùn)算。模板運(yùn)算的數(shù)學(xué)涵義是一種卷積(或互相關(guān))運(yùn)算。這樣可以濾除圖像中大部分的噪點(diǎn)。同時,我們根據(jù)賽道的具體信息進(jìn)行慮噪:圖像中黑線必然是連續(xù)的,上一行中黑線位置和本行黑線位置相差太遠(yuǎn)就認(rèn)為本行信息是錯誤的,將其保持為上一行的信息。事實證明這種算法可以比較好的適應(yīng)賽道的具體情況并產(chǎn)生良好的慮噪效果。3. 畸變校正:由于攝像頭看賽道是有一定角度的,實際上是把賽道上一個梯形映射為一個矩形存儲到單片機(jī)中了,畸變
48、校正的目的就是將原來的梯形還原出來。畸變校正實際上是一種坐標(biāo)系的轉(zhuǎn)換。考慮到圖形從上到下基本是線性的畸變,所以只要每行的點(diǎn)的橫坐標(biāo)乘以不同的系數(shù)就可以達(dá)到畸變校正的目的。如我們的設(shè)想頭看到梯形的上底邊80cm,下底邊35cm只要將最下面的點(diǎn)的橫坐標(biāo) 乘以16,最上面點(diǎn)的橫坐標(biāo)乘以7,并由線性算出中間點(diǎn)的橫坐標(biāo)乘的系數(shù)即可將圖像中的點(diǎn)較好的還原到原來的位置。當(dāng)然,算法中沒有考慮縱坐標(biāo)的畸變,是有一定誤差的,但是這種誤差是控制算法可以接受的。4. 圖像邊緣提?。鹤R別一個對象是從其邊緣開始的,一幅圖像不同部分的邊緣是模式識別最重要的特征。在邊沿檢測中,常用的一種模板是Sobel 算子。Sobel邊緣
49、算子是一種一階差分算子,它可以有效地消除道路圖像中的大部分無用信息離散Sobel算法的定義如下:公式 210 離散Sobel算法為了編程容易實現(xiàn),將Sobel算子轉(zhuǎn)換為兩個卷積核,分別為水平核和垂直核,圖像中的每個點(diǎn)都用這兩個核做卷積,兩處卷積的最大值作為該點(diǎn)的輸出值,運(yùn)算結(jié)果即為經(jīng)過邊緣增強(qiáng)的圖像。5. 計算黑線位置:提取出圖像的邊緣以后只要將每行圖像的邊緣進(jìn)行平均就是圖像中黑線的重心位置(Average23)。能夠準(zhǔn)確的辨識黑線位置對于下面控制量的給出是至關(guān)重要的。圖 21 采集到的圖像圖 22 經(jīng)過處理后的圖像1、路徑信息采集處理方法智能車通過CCD視頻傳感器采集到的路徑信息都是模擬值,
50、然后將一場數(shù)據(jù)的模擬值通過MC9S12DG128的ATD0通道轉(zhuǎn)換成數(shù)字量,這樣,這一場的數(shù)據(jù)就變成了一個260*33的二維矩陣,其中的每個數(shù)字代表著一場圖像中對應(yīng)位置點(diǎn)的象素灰度值。但是,單片機(jī)處理這么多的數(shù)據(jù)會十分消耗資源,而且單片機(jī)的內(nèi)存也不可能給這個存放圖像數(shù)據(jù)的二維矩陣分配太多的存儲空間。所以,為了節(jié)省單片機(jī)的資源和減少處理時間,就必須對每場的圖像做一些處理,本隊采取的方法是,每隔10行進(jìn)行一次處理,這樣,該場圖像的數(shù)據(jù)就變成了一個26*33二維矩陣。圖5.3就是一條直線的二維矩陣圖。圖5.3 直線賽道圖像數(shù)據(jù)圖接著,就要對CCD視頻傳感器采集的視頻數(shù)據(jù)進(jìn)行路徑判斷處理,這時,需要確
51、定視頻閾值的大小。如果象素點(diǎn)灰度值小于該閾值,則確定該點(diǎn)為黑點(diǎn),否則,確定其為白點(diǎn)。這樣,就可以在一場數(shù)據(jù)中分辨出象素點(diǎn)是黑色還是白色。處理后的結(jié)果如圖5.4所示。圖5.4 處理后的直線賽道圖像數(shù)據(jù)圖 由圖5.3可知,圖像近處的灰度閾值為31,所以,灰度值小于31的點(diǎn)都被判定為黑點(diǎn),為了調(diào)試方便,把黑點(diǎn)對應(yīng)的灰度值都置為0。但是,在上數(shù)第8行時出現(xiàn)了31的灰度值,如果按照近處的灰度閾值來判斷的話,該點(diǎn)會被判定為白點(diǎn),而實際圖像中該點(diǎn)的位置卻為黑點(diǎn)。因此,為了得到正確的判定結(jié)果,可以將遠(yuǎn)處(圖5.3中為第8行以上)的數(shù)據(jù)的灰度閾值稍作調(diào)整,將其加1,變?yōu)?2,這樣,遠(yuǎn)處的點(diǎn)也可以被判定為黑點(diǎn),也
52、就符合實際圖像中的情況了。這里提到的“遠(yuǎn)處”開始的位置是通過實踐測定的結(jié)果,是一個經(jīng)驗值。這也 是灰度閾值自適應(yīng)的一種實現(xiàn)方法。在確定某點(diǎn)是黑(白)點(diǎn)之后,就可以確定黑線的位置了,下面介紹一下具體的實現(xiàn)方法。因為每行有33個象素點(diǎn),所以把這33個點(diǎn)分別標(biāo)號,記為032。第一次處理的時候,先按照從左向右的順序,進(jìn)行比較,當(dāng)遇到第一個黑點(diǎn)的時候,記下該點(diǎn)的序號A,接著繼續(xù)比較,當(dāng)遇到第一個白點(diǎn)的時候,也記下該點(diǎn)的序號B,其后的數(shù)據(jù)可以不處理。這樣,將序號(BA)/2,就可以得到該行黑點(diǎn)的中心位置坐標(biāo)C,(BA)即為該行的黑點(diǎn)個數(shù),記為D。以上就是第一行的數(shù)據(jù),為了提高系統(tǒng)處理的速度,降低系統(tǒng)資源的
53、消耗,以后各行數(shù)據(jù)的處理方式與第一行有所區(qū)別。在處理后面的行時,可以根據(jù)上一行得出的黑點(diǎn)中心坐標(biāo)C決定比較的順序。例如,如果上一行的黑點(diǎn)中心坐標(biāo)C大于行中心坐標(biāo)16,那么就從右向左開始比較。再者,通過實踐測試觀察,攝像頭采集的數(shù)據(jù)中,近處的數(shù)據(jù)一直是比較準(zhǔn)確的,因此,處理的順序是從近向遠(yuǎn)。通過實踐測試,近7行(對應(yīng)原始圖像的前70行)作為近處數(shù)據(jù),其它的數(shù)據(jù)作為遠(yuǎn)處數(shù)據(jù)。對處理過程再作進(jìn)一步的優(yōu)化方法為,遠(yuǎn)處數(shù)據(jù)的處理范圍為,第8行數(shù)據(jù)參照第7行數(shù)據(jù)得出的黑點(diǎn)中心坐標(biāo)C的位置,將其左右各5個點(diǎn)作為第8行的待處理數(shù)據(jù),然后在遵照上面的方法進(jìn)行比較。第9行再參照第8行得出的黑點(diǎn)中心坐標(biāo)這樣,就可以
54、大大減少待處理的數(shù)據(jù),從而降低了數(shù)據(jù)處理的時間,加快了系統(tǒng)處理數(shù)據(jù)的速度。經(jīng)過上述圖像處理后,可以獲得兩個主要的參數(shù):每行黑點(diǎn)的中心位置坐標(biāo)和每行的黑點(diǎn)總數(shù)。依據(jù)這兩個參數(shù),可以判斷當(dāng)前的路徑信息。經(jīng)過條件判斷,確定出可靠的最遠(yuǎn)處的一行數(shù)據(jù)作為路徑判斷的依據(jù),即該行的黑點(diǎn)中心位置坐標(biāo)。2、舵機(jī)轉(zhuǎn)向控制算法經(jīng)過上面的圖像處理方法,得到了路徑識別的結(jié)果,記為可靠的最遠(yuǎn)處的一行數(shù)據(jù)黑點(diǎn)中心位置坐標(biāo)。根據(jù)此坐標(biāo),來控制舵機(jī)的轉(zhuǎn)向。因為這個數(shù)據(jù)是遠(yuǎn)處的,所以有一些前瞻性,因此,可以提前做出轉(zhuǎn)向的動作,這樣,在急轉(zhuǎn)彎的時候?qū)泻艽蟮膬?yōu)勢。為了更好的解決轉(zhuǎn)向的問題,本隊采用查表的方法進(jìn)行控制。設(shè)置一個一維
55、數(shù)組,其中有33個元素,對應(yīng)每行的33行坐標(biāo)位置,不同的坐標(biāo)對應(yīng)不同的轉(zhuǎn)角。而這33個轉(zhuǎn)角的大小都是通過實際測量實驗得到的。2.6. 有一定抗干擾和抗反光能力的黑線提取算法(1)原始圖像特點(diǎn):原始圖像是一個將模擬圖像經(jīng)A/D轉(zhuǎn)換得到的12030的二位數(shù)據(jù)矩陣,矩陣的每一個元素對應(yīng)一個像素點(diǎn)的灰度值,黑色的灰度值低,白色的灰度值高。圖像的第一行對應(yīng)最遠(yuǎn)處,大約150cm ,圖像的最低部一行對應(yīng)最近處,大約20cm。遠(yuǎn)處的圖像小,近處的圖像大,黑線為梯形狀。圖4.4直道圖4.5 彎道圖4.6 S彎圖4.7 手(2)基本思想:a) 直接利用原始圖像,因為如果采用33均值濾波或中值濾波會占用大量的計算時間,況且在閾值選擇合理的情況下原始圖像黑線比較清晰,容易提取。b) 逐行掃描,小于閾值的點(diǎn)判斷為黑點(diǎn)。c) 黑線寬度有一個范圍,在確定的黑線寬度范圍內(nèi)才認(rèn)為黑線有效,這樣可以濾除不在寬度范圍內(nèi)的黑點(diǎn)干擾。d) 利用黑線的連續(xù)性來確定求出的黑線中心
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年數(shù)控銑床高速切削企業(yè)制定與實施新質(zhì)生產(chǎn)力戰(zhàn)略研究報告
- 電池充電器項目效益評估報告
- 2025年度房屋置換項目可行性研究報告合同
- 2025年度住宅小區(qū)高低壓配電室設(shè)施更新與維護(hù)合同
- 2025年度基坑支護(hù)與降水施工后期維護(hù)合同
- 2025年度汽車銷售居間服務(wù)合同匯編
- 2025年度國際郵政包裹運(yùn)輸合同
- 2025年度新能源車輛銷售代理合同
- 2025年度建筑外架施工合同履約驗收協(xié)議
- 2025年度家居定制家具制造及安裝合同
- 縮窄性心包炎課件
- 《工程電磁場》配套教學(xué)課件
- 遼寧省錦州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)及行政區(qū)劃代碼
- 改革開放的歷程(終稿)課件
- 職位管理手冊
- IPQC首檢巡檢操作培訓(xùn)
- (中職)Dreamweaver-CC網(wǎng)頁設(shè)計與制作(3版)電子課件(完整版)
- 東南大學(xué) 固體物理課件
- 行政人事助理崗位月度KPI績效考核表
- 紀(jì)檢監(jiān)察機(jī)關(guān)派駐機(jī)構(gòu)工作規(guī)則全文詳解PPT
- BP-2C 微機(jī)母線保護(hù)裝置技術(shù)說明書 (3)
評論
0/150
提交評論