曹煜暉,黃 成,李 鵬,張 磊,晏 濤
(湖北文理學院 機械與汽車工程學院,湖北 襄陽 441053)
隨著機器視覺及人工智能技術的快速發(fā)展,無人駕駛技術已成為人們關注的焦點,無人駕駛技術有四大節(jié)點:感知,理解,決策,控制。要想使汽車平穩(wěn)高效地行使就必須把握好每一個節(jié)點[1-2]。通過舉辦智能小車比賽可為無人駕駛技術提供大量的人才儲備、可靠的數(shù)據(jù)及控制方法。
本文以“飛思卡爾杯”全國大學生智能車信標組競賽為項目主體研究智能小車的無人駕駛技術,其任務在于使小車以最快的速度達到指定目標位置。設計了一套信標組決策算法,使智能小車可以按照最優(yōu)路徑行駛,詳細描述了手推模擬法在智能車決策方面的實現(xiàn)過程。在控制方面,本文通過經(jīng)典PID閉環(huán)控制電機,用魯棒控制算法彌補電機加速度的不足,同時還對調(diào)試時出現(xiàn)的問題做出了具體分析。
無人小車攝像頭采用山外二值化高速攝像頭OV7725,其速率可達150幀/s,去噪點能力強,可對獲取的圖像進行二值化處理,運行穩(wěn)定。OV7725沒有采用奇偶場之分,傳入的圖像經(jīng)過設定閾值來劃分為0和255后存入圖像數(shù)組中。每采集完一幀圖片就刷新一下數(shù)組,這樣就可將處理圖片信息轉換成處理圖片對應數(shù)組的信息。
由于信標燈發(fā)出的光是混合光(包含紅外光),而普通照明燈的光是冷光,為了避免其他光線對攝像頭影響,采用紅外濾光片對采集的光線進行過濾,盡量過濾掉除紅外光以外的光線,進而削弱了普通照明燈對信標燈識別的影響,提高了識別信標燈的穩(wěn)定性。
對攝像頭采集的二值化圖像信息進行信標燈的中點提取,采用全圖逐行掃描,提取每行的白點個數(shù)(信標燈的光通過處理后是白色,而背景都是黑色),將提取出白點數(shù)最多的行放在midpointRow中,然后再提取該行白點的中點放在midpointColumns中。當每行都是全黑時(即沒有找到信標燈光),就將midpointRow與midpointColumns置-1,這樣的特殊處理可將數(shù)據(jù)處理狀態(tài)劃分為找到燈和無燈兩種狀態(tài),增加了轉彎的穩(wěn)定性。在一次總循環(huán)結束時將提取的中點變量賦值給oldRow與oldColumns做為上一幀圖的中點坐標。中點提取圖像如圖1所示。
圖1 中點提取圖像
飛思卡爾信標組比賽時,一般情況下會提示信標燈的擺放位置和亮燈的順序,利用這一點,可以找到整個流程中小車行駛的最優(yōu)路徑,擬合路徑流程如圖2所示。該方法不是由小車自行掃描場景后設定順序,而是提前感知場景信息后自行輸入到數(shù)組order[light number]中,然后小車按設定好的順序狀態(tài)行駛(每掃滅一個信標燈,指向數(shù)組order的指針地址就自動加1)。
圖2 擬合路徑流程圖
小車向信標燈行駛的順序可分為以下4種方式(如圖3所示):
(1) 向燈的左側行駛,然后向左轉找燈(轉彎前減速)。
(2) 向燈的右側行駛,然后向右轉找燈(轉彎前減速)。
(3) 向燈的左側行駛,然后直行找燈(不用減速)。
(4) 向燈的右側行駛,然后直行找燈(不用減速)。
圖3 4種情況路線圖
以方式(1)為例,用手推模擬的方法進行實現(xiàn)。首先,用藍牙等通信模塊將小車掃描到的中點信息傳輸?shù)缴衔粰C,用山外多功能調(diào)試助手的虛擬示波器接收。圖4為山外多功能調(diào)試助手接收的中點信息。關閉小車的驅動和舵機的驅動程序,用手將小車推向燈的左側,待掃滅信標燈后,舵機向左轉打死,其目的是獲取該過程中中點的變化值,然后計算出中點橫坐標mid_x和縱坐標mid_y變化的規(guī)律。
圖4 山外多功能調(diào)試助手接收的中點信息
當小車自主行駛時,可以把中點的橫坐標mid_x看成自變量,中點的縱坐標mid_y就是因變量。因為中點的橫坐標mid_x表示小車攝像頭離信標燈的距離,中點的縱坐標mid_y表示信標燈相對攝像頭的方位,影響著舵機的轉向。然后利用MATLAB的cftool工具將中點的橫坐標mid_x和縱坐標mid_y的關系擬合成mid_x為自變量、mid_y為因變量的函數(shù)f(x),如圖5所示。通過f(x)函數(shù)來控制舵機按手推的路徑行駛。但是當行駛速度越來越快時,路徑就會出現(xiàn)一定的偏差,此時可以通過微調(diào)函數(shù)的參數(shù)來糾偏。每次刷新圖像,提取到中點的mid_x后,代入函數(shù)f(mid_x)計算后得出的y當作小車前行的中點來控制舵機的輸出角度。
圖5 MATLAB的cftool工具對中點數(shù)據(jù)擬合
在用PID控制小車舵機時,因為小車舵機時刻都在改變角度,所以不宜采用加I的算法。因此采用PD算法,該算法如下:
(1) 當小車在遠處向燈行駛的時候,設定較小的Kp和Kd,這樣就可以降低舵機的靈敏度,不會因為有小的誤差而左右擺動,小車直道行駛的穩(wěn)定性就會大幅提高,這樣也便于直道加速[3]。
(2) 當小車行駛至距燈較近時,設定較大的Kp和適量的Kd,這樣就可以提前平滑地轉彎掃燈,而不會因為沒有反應過來就撞上信標燈[4-6]。具體公式如下:
ΔO=Kp·Error+Kd·(PreError-Error).
(1)
其中:ΔO為PD調(diào)節(jié)后的輸出量;Error為舵機中心值和小車軌跡中心點mid_y的偏差;PreError為舵機中心值和小車軌跡中心點mid_y前一個計算周期的偏差;Kp為比例系數(shù);Kd為微分系數(shù)。
3.2.1 PID閉環(huán)控制算法
小車在行駛的途中是一個慣性體,為了提高小車的提速性能,選用PID和魯棒相結合的方法進行速度控制。如果當前為遠離信標燈,則需要加速,若是靠近燈要轉彎了,則需要降速,而且根據(jù)不同的情景彎道減速也有所區(qū)別[7]。系統(tǒng)利用了測速模塊,由編碼器反饋當前速度值,通過增量式PID算法進行調(diào)節(jié),從而控制電機對當前情景快速反應。其具體算法為:
ΔP(k)=Kp[E(k)-E(k-1)]+KIE(k)+KD[E(k)-2E(k-1)+E(k-2)].
(2)
其中:ΔP(k)為PID調(diào)節(jié)后的輸出量;KI為積分系數(shù);E(k)為偏差量;E(k-1)為上一次的偏差量;E(k-2)為上上次的偏差量。
3.2.2 魯棒控制算法
待小車行駛出轉彎后找到下一個點亮的信標燈,全速向燈行駛。為了在有限時間內(nèi)盡量提高小車的速度,此處加入了“棒棒控制”(屬于魯棒控制法)[8-9]??刂扑惴ㄈ缦拢?/p>
(3)
其中:vs為最后實際速度輸出量;v為設定速度;ka為補償效果控制系數(shù),為常數(shù),初始化時設定;kP為調(diào)速補償變量,轉彎找到信標燈時刻初始化為0,每個控制周期累加1。
行駛實驗結果如下:
(1) 舵機方面:由于中點的數(shù)據(jù)是在低速狀態(tài)下提取的,因此在提高轉彎速度的同時,轉彎路徑會明顯靠燈(轉彎動作延遲)。在此情況下,可以通過調(diào)節(jié)PD各個參數(shù)的配合來實現(xiàn)舵機轉向的靈敏度。當速度提高到接近3 m/s時,僅靠PD的調(diào)節(jié)滿足不了轉彎的需求,此時可通過調(diào)節(jié)轉彎路徑函數(shù)來適應高速的轉彎,即提前轉彎拐點,然后逐步調(diào)試,得到最優(yōu)行駛路線。
(2) 電機方面:速度最好一直處于加速(離信標燈遠)、最大速度、減速(離信標燈近)的狀態(tài)。在路徑最佳的情況下,加速度越大,最大速度保持的時間越久,行駛完全程的時間越短。通過魯棒算法彌補PID算法加速度不足的缺陷,將加速度提高到電機加速度的極致。
本文以MK60FX512ZVLQ15單片機為核心,山外二值化高速攝像頭OV7725為傳感器,MATLAB為路徑模擬器,通過PID與魯棒調(diào)節(jié)相結合的形式控制智能小車按照最優(yōu)的路徑行駛,提高了智能小車行駛的速度與效率,縮短了調(diào)試周期。此外本文提出的小車最優(yōu)路徑行駛方法可以為無人駕駛汽車的控制提供參考。