袁瑞豪 王一豪 孫振涵
摘? ?要:自動駕駛汽車制作一直是前沿的汽車工業(yè)發(fā)展方向。恩智浦公司舉辦的恩智浦杯智能車競賽為大學生提供了寬廣的平臺去了解和親身參與自動駕駛小車的制作。文章從攝像頭數(shù)字圖像處理、硬件搭建、PID控制算法3個方面對智能小車的制作進行分析。
關鍵詞:攝像頭;K66單片機;PID控制算法
1? ? 攝像頭
1.1? 圖像二值化處理
本次比賽中本研究采用的是灰度攝像頭,也就是每幅圖像的每一個像素點都有一個數(shù)字來表示它的灰度值。范圍是0~255,其中,0代表白色,255代表黑色。二值化就是把圖像上所有的點都用0和255表示,并存在點對應位置的二維數(shù)組中。具體將一個灰度存儲為0還是255需要設置相應的閾值,在本程序中,采用OSTU大津法,獲取全局閾值,大津法可以根據(jù)一幅圖像每個點的灰度值來設置動態(tài)閾值。
1.2? 尋中線算法
攝像頭的算法在自動駕駛小車比賽中至關重要,攝像頭算法的好壞直接決定了單片機能否高效處理攝像頭傳入的每一幀圖像,以及單位時間內(nèi)處理圖像的總數(shù)。而處理圖像的算法在處理不同的道路情況時有所不同。所以在單片機接收到每一幀圖像時,要按照順序做的事情就是:(1)判斷道路類型。(2)根據(jù)不同類型的道路選取相應的算法。(3)提取出每幅圖片上道路的中線值,然后將中線值傳遞給舵機電機控制函數(shù)。
無論處理哪一種賽道,首先要解決的就是攝像頭成像的逆透視變換問題。透視變形的矯正,根據(jù)攝像頭的視角進行校正,對校正圖像進行修正。我們采用記錄每一行賽道寬度的方式,首先,用小車攝像頭拍攝一張只有直道的圖形,利用串口通信讀出每一行的賽道寬度,并記錄在數(shù)組中。
直道類型的賽道是最基本也是最簡單的一種賽道,在提取中線時所用最基本的算法就是,從每一行的中點開始,向左掃描這一行的每一個點,記錄從白色點跳變至黑色點的位置,將這個值存在一個變量left_line當中,再用一個變量left_flag記錄是否找到邊線,如果找到將其置1,未找到則置0。再回到中點,向右做相同操作。判斷如果兩邊都找到了邊線,則這一行的中點值為(left_line+right_flag)/2,如存在未找到邊線情況,則道路類型不為直道。
對于彎道的判斷,如果檢測到一條邊線的丟失,另一邊未丟失,則判斷為小車進入彎道,如丟失右邊線則進入的是左轉彎,丟失左邊線進入的是右轉彎。左轉彎的中線為右邊線的值減去對應行數(shù)賽道寬度的一半,右轉彎的中線值為左邊線位置加上賽道寬度的一半。
如果兩邊邊線全部丟失,則進入十字路,在十字路口時,下一行賽道圖像的中線值和前一行中線值相等。在提取到一幅圖片所有行的中線值后,算出這幅圖像中線值的平均值,傳遞給控制函數(shù)從而對小車的速度,轉角進行控制。
2? ? 件電路設計方案
本系統(tǒng)的硬件電路采用模塊化設計方式。主要包括單片機最小系統(tǒng)模塊、電源模塊、圖像采集模塊、測速模塊、串口通信模塊、顯示模塊等部分。
2.1? 單片機最小系統(tǒng)模塊
本設計的核心控制器為恩智浦公司生產(chǎn)的32位單片機MK60DN512Z。該單片機具有144個引腳。MK60DN512Z具有豐富的系統(tǒng)資源和方便的外部電路接口,其中,包括32位中央處理單元,UART模塊,PIT定時中斷模塊,IIC模塊,DMA模塊,RAM存儲器,F(xiàn)LASH存儲器,EEPROM存儲器,F(xiàn)TMPWM模塊等。
2.2? 主控板模塊
2.2.1? 穩(wěn)6? V電源模塊
6 V穩(wěn)壓芯片選擇LM2941。LM2941芯片為可調(diào)穩(wěn)壓模塊,輸入電壓為7.2 V,調(diào)節(jié)R1和R2的值可改變輸出電壓(見圖1)。本車將電壓調(diào)到6V電壓給舵機供電。
2.2.2? 穩(wěn)5 V電源模塊
線性穩(wěn)5V穩(wěn)壓芯片很多,比如7805,TPS7350,LM2940-5.0,LM1084-5.0等,經(jīng)過實踐使用發(fā)現(xiàn),LM2940的線性度較為理想,且電路簡單、穩(wěn)定性好。所以5 V穩(wěn)壓芯片選擇LM2940。
通過LM2940芯片對7.2 V穩(wěn)壓得到5 V電壓,給放大電路、驅(qū)動電路等模塊供電;另取一片LM2940芯片穩(wěn)壓得到5 V電源,給編碼器供電。此處編碼器單獨供電是為了避免編碼器對放大和驅(qū)動電路產(chǎn)生干擾。
2.2.3? 穩(wěn)3.3 V電源模塊
穩(wěn)3.3 V穩(wěn)壓芯片有線性電源:ASM1117-3.3,LM2940-3.3,LM1084-3.3開關電源:LM2596。經(jīng)過比較,ASM1117的線性度較好且價格便宜,效率高,不易發(fā)熱,但有紋波,電路比較復雜,適用于單片機供電。通過LM1117芯片對5 V穩(wěn)壓得到3.3 V電壓,給單片機、液晶屏供電。此處采用對5 V穩(wěn)而非7.2 V穩(wěn)壓是為了減少損失的電壓,從而提高穩(wěn)壓的快速性和穩(wěn)定性。
2.3? 電機驅(qū)動模塊
本次采用的電機型號為RS540,該電機采用7.2 V電源供電時,最大電流為9.71 A,最大功率為61.75 W,因此,該電機的驅(qū)動電路設計尤為重要。常用的電機驅(qū)動有兩種方式:(1)采用集成電機驅(qū)動芯片驅(qū)動。(2)采用MOSFET和專用集成MOSFET驅(qū)動芯片驅(qū)動。使用集成芯片的電路設計簡單,可靠性高,但是性能受限。由于比賽電機內(nèi)阻僅為幾毫歐,而集成芯片內(nèi)部的每個MOSFET導通電阻在120 mΩ以上,大大增加了電樞回路總電阻,此時直流電動機轉速降落較大,驅(qū)動電路效率較低,電機性能不能充分發(fā)揮。由于分立的N溝道MOSFET具有極低的導通電阻,大大減小了電樞回路總電阻。另外,專門設計的柵極驅(qū)動電路可以提高MOSFET的開關速度,使PWM控制方式的調(diào)制頻率可以得到提高,從而減少電樞電流脈動。并且專用柵極驅(qū)動芯片通常具有防同臂導通、硬件死區(qū)、欠電壓保護等功能,可以提高電路工作的可靠性。目前常用電機驅(qū)動方案為直流電機的H橋驅(qū)動電路。H橋驅(qū)動電路的內(nèi)部原理解析如下。
圖2為一個典型的直流電機控制電路。電路得名于“H橋驅(qū)動電路”是因為它的形狀酷似字母H。4個MOS管(或三極管)組成H的4條垂直腿,而電機就是H中的橫杠。如圖2所示,H橋式電機驅(qū)動電路包括4個MOS管(或三極管)和一個電機。要使電機運轉,必須導通對角線上的一對MOS管(或三極管)。根據(jù)不同MOS管(或三極管)對的導通情況,電流可能會從左至右或從右至左流過電機,從而控制電機的轉向。
當Q1管和Q4管導通時,電流就從電源正極經(jīng)Q1從左至右穿過電機,然后再經(jīng)Q4回到電源負極。按圖2中電流箭頭所示,該流向的電流將驅(qū)動電機順時針轉動。當Q1和Q4導通時,電流將從左至右流過電機。對一對MOS管(或三極管)Q2和Q3導通的情況,電流將從右至左流過電機。當Q2和Q3導通時,電流將從右至左流過電機,從而驅(qū)動電機沿另一方向轉動。
3? ? PID控制算法
3.1? 算法簡介
在使用PID控制算法之前,應該先了解為什么要用PID控制算法來控制智能車以及基本原理。
在制作智能車的時候,之所以要用到PID控制算法,原因有二。
(1)MCU的處理速度并不是無限快的,預設值與實際控制效果之間存在一定的偏差、實際輸出與數(shù)據(jù)反饋之間存在一定的延時。在實際控制中加入PID算法將能達到系統(tǒng)不斷靈活變化的效果。
(2)PWM波的占空比控制的是小車的加速度,所以無法通過量化PWM的占空比來精確控制速度。因此,必須通過閉環(huán)調(diào)節(jié)來控制智能車的速度,而PID控制算法是目前較為成熟的控制算法。
PID算法的執(zhí)行流程是非常簡單的,即利用反饋來檢測偏差信號,并通過偏差信號來控制被控量。其功能框架如圖3所示。
3.2? 位置式PID
在計算機中只能對離散值進行處理,所以要對PID的模擬量公式進行離散化處理。
假設系統(tǒng)采樣周期為T,第K個采樣周期。PID算法的離線形式表示為:
3.3? 增量式PID
上面的公式描述了第k個采樣周期的結果,那么前一時刻也就是k-1個采樣周期就可表示為:
那么第K個采樣周期的增量,就是U(k)-U(k-1)。于是用第k個采樣周期公式減去第k-1個采樣周期的公式,就得到了增量型PID算法的表示公式:
3.4? 選擇
在此設計中選擇了增量式PID控制電極,因為位置PID需要的內(nèi)存較大,不利于較低級的處理芯片的數(shù)據(jù)處理。而位置PID控制舵機,因為舵機與之前的狀態(tài)無關只用PD調(diào)節(jié),無需積分項。
3.5? PID參數(shù)整定
3.5.1? 比例系數(shù)調(diào)節(jié)(Proportion)
控制對象為電機時,比例P越大時,電機轉速回歸到輸入值的速度將更快,及調(diào)節(jié)靈敏度就越高。
(1)舵機比例系數(shù)調(diào)節(jié):由于智能車處于不同狀態(tài)時所需要的響應速度和系統(tǒng)穩(wěn)定性各不相同。
所以對此智能車進行設計時,采用了動態(tài)二次P值的設定。P的大小與對中線偏差值呈二次函數(shù)關系,使得智能車可以對不同的情況進行不同的調(diào)節(jié)。
(2)電機比例系數(shù)調(diào)節(jié):則對此智能車進行設計時,采用了動態(tài)一次P值的設定。P的大小與速度和對中線偏差值呈一次函數(shù)關系,使得智能車可以對不同的情況進行不同的調(diào)節(jié)。
3.5.2? 積分系數(shù)調(diào)節(jié)(Integral)
積分環(huán)節(jié)的調(diào)節(jié)作用雖然會消除靜態(tài)誤差,但也會降低系統(tǒng)的響應速度,也就是積分項的調(diào)節(jié)存在明顯的滯后,增加系統(tǒng)的超調(diào)量。
舵機積分系數(shù)調(diào)節(jié):與之前的狀態(tài)無關不采取I調(diào)節(jié)。
電機積分系數(shù)調(diào)節(jié):采用了固定積分系數(shù)進行調(diào)節(jié)。
3.5.3? 微分系數(shù)調(diào)節(jié)(Differential)
微分反應了偏差信號的變化規(guī)律,或者說是變化趨勢,偏差的微分實際偏差的變化速率,變化越快,其微分絕對值越大。偏差增大時,其微分為正;偏差減小時,其微分為負。
舵機微分系數(shù)調(diào)節(jié):則對此智能車進行設計時,采用了動態(tài)一次D值的設定。D的大小與速度和對中線偏差值呈一次函數(shù)關系,使得智能車可以對不同的情況進行不同的調(diào)節(jié)。
電機微分系數(shù)調(diào)節(jié):采用了固定微分系數(shù)進行調(diào)節(jié)。
3.5.4? 控制算法
(1)賽道識別:在智能車偏離賽道中線較小的范圍內(nèi)采用之別中線的方法,當智能車偏離過大時用黑點計數(shù)循跡,這樣可以避免在S彎處擺動過大。
(2)斷路:遍歷圖像中的所有點,算出黑點的個數(shù),然后當黑點個數(shù)多于閾值時,判斷位斷路,切換為電磁,減速循跡。
(3)障礙:用超聲波檢測障礙,遇見障礙向右打死,駛出賽道。車識別到全黑,向左打死,回到賽道。調(diào)節(jié)向左打死與向右打死的時間差,使車剛好可以繞過障礙物。
[參考文獻]
[1]余卓平,邢星宇,陳君毅.自動駕駛汽車測試技術與應用進展[J].同濟大學學報(自然科學版),2019(4):540-547.
[2]張?zhí)燔?智能汽車自動駕駛的控制方法分析[J].時代汽車,2019(1):19-20.
[3]金鑫,高偉江,王云鵬,等.智能控制小車的設計[J].汽車實用技術,2019(9):64-65.
[4]蔡栩嘉,劉海剛,陳冠成,等.攝像頭智能小車設計與控制算法研究[J].工業(yè)控制計算機,2018(12):98-101.
[5]徐世豪.智能車設計中增量式PID控制算法的運用[J].中國新通信,2017(2):11-12.
NXP intelligent car based on K66MCU
Yuan Ruihao, WangYihao, Sun Zhenhan
(Xian University of Posts &Telecommunications, Xian 710000, China)
Abstract:Autonomous vehicle production has been the forefront of the automotive industry development direction.The NXP Cup Intelligent Car Competition held by NXP provides a wide platform for college students to learn about and participate in the production of self-driving cars.This paper analyzes the manufacture of intelligent car from three aspects:digital image processing, hardware construction and PID control algorithm.
Key words:camera; K66 Microcontrollers; PID control algorithm