李博威 侯明 蔣澤鑫
北京信息科技大學(xué),北京 100192
關(guān)鍵字:鷹眼;PID;單片機(jī);智能車
伴隨著科學(xué)技藝的快速發(fā)展,智能化技術(shù)的研究和開發(fā)勢頭強(qiáng)勁,發(fā)展越來越快,應(yīng)用的范圍也得到了極大的擴(kuò)展,復(fù)雜環(huán)境下的人工智能數(shù)量迅猛增加,其中,智能化車輛作為人工智能的一個(gè)重要旁支,也受到了日益增長的關(guān)注。
基于視覺的智能車輛可以在人類無法作業(yè)的環(huán)境中作業(yè),這種創(chuàng)新性技術(shù)的開發(fā)與研究,可以減少不必要的花費(fèi),加快工作進(jìn)程,提高效率,節(jié)約成本。
上個(gè)世紀(jì)80年代,機(jī)器視覺開始在車載視覺系統(tǒng)中出現(xiàn),汽車廠家的參與和政府的支持促進(jìn)了機(jī)器視覺的發(fā)展,主動(dòng)機(jī)器視覺的研究前期進(jìn)展緩慢,在完成了以聯(lián)合傳感器為基礎(chǔ)的硬件實(shí)驗(yàn)后,實(shí)現(xiàn)了對傳感器的主動(dòng)控制,從而通過對環(huán)境的識(shí)別和實(shí)時(shí)跟蹤實(shí)現(xiàn)了對運(yùn)動(dòng)的控制,從此攝像頭常用于檢驗(yàn)視覺的工作。目前,機(jī)器視覺具有能遙測、檢測信息大等優(yōu)點(diǎn),常用于路徑識(shí)別。因考慮成本,許多科研人員通過算法的改善減少計(jì)算量。
本文從智能車機(jī)械結(jié)構(gòu)、供電電路設(shè)計(jì)、控制算法等方面詳細(xì)介紹智能車的整個(gè)準(zhǔn)備過程。
小車整體結(jié)構(gòu)由舵機(jī)、攝像頭、編碼器等部分組成。如圖1所示。
1、舵機(jī)的安裝
舵機(jī)的安裝現(xiàn)在有兩種轉(zhuǎn)向器安裝方案:水平安裝、垂直安裝。 水平安裝方案的優(yōu)點(diǎn)是響應(yīng)速度較快,安裝比較方便,重心減少,但是左右的轉(zhuǎn)向桿的長度不一樣,導(dǎo)致兩側(cè)做出轉(zhuǎn)向時(shí)的響應(yīng)時(shí)間不同;垂直安裝則是增加了方向舵框架的高度,并使智能小車響應(yīng)更靈活。我們通過伺服性能的比較和實(shí)際情況的需求,選擇了垂直安裝的方案。為了能夠讓智能小車可以獲得更好的響應(yīng)速度,我們通過大量的實(shí)驗(yàn)測試,最終選用了一套舵機(jī)連片,實(shí)現(xiàn)了預(yù)期目標(biāo),安裝圖如圖2所示。
2、攝像頭的安裝
為了可以獲取穩(wěn)定可靠的信息,必須要將攝像頭固定牢固。在固定攝像機(jī)的過程中,它還需要可以進(jìn)行上下調(diào)整,所以我們使用輕質(zhì)鋁合金夾持組件,因此可以獲得最大的剛度質(zhì)量比,這樣整個(gè)設(shè)備就擁有了非常高的定位精度和剛度,并且攝像頭容易進(jìn)行拆卸和維護(hù),具有更好的保障能力。按照我們的需求,底座和攝像頭安裝的實(shí)際設(shè)計(jì)如圖3所示。
3、編碼器安裝
編碼器的齒輪需要調(diào)整,目的是使它與所配備的差速齒輪緊緊地契合在一起,以提高被測速度的精確度。如果咬合過緊,齒輪間隙過小,聲音會(huì)變得沉悶,有滯后的現(xiàn)象,這會(huì)使電機(jī)負(fù)載增加;如果齒輪間隙太大,那么將會(huì)發(fā)生電機(jī)的空轉(zhuǎn)現(xiàn)象,編碼器的齒輪和差速齒輪不能有效地契合,發(fā)出的聲音將會(huì)異常的刺耳。為了方便編碼器的安裝,在設(shè)計(jì)整體的小車框架時(shí),已經(jīng)預(yù)先留下了編碼器安裝位置,不需要再另外制作配件,安裝完成后如圖4所示。
智能車的控制方案中,采用單片機(jī)作為核心控制器,也就是智能車的“大腦”,是整個(gè)智能車的核心。K60核心板通過攝像頭對路徑信息采集、編碼器對脈沖信號的采集、智能車速度調(diào)節(jié),將控制算法寫入程序中,計(jì)算相應(yīng)的電機(jī)的控制量,對舵機(jī)與驅(qū)動(dòng)電機(jī)進(jìn)行控制,通過測速模塊的反饋,電機(jī)進(jìn)行的閉環(huán)控制控制了小車的整體運(yùn)動(dòng),如圖5所示。
電源是智能小車的動(dòng)力來源,也為智能小車的控制系統(tǒng)提供可靠的供電,我們采用電壓7.2 V、容量2000 mAh可充電鎳鎘電池作為系統(tǒng)的電源。由于7.2 V的鎳鎘電池不能為控制器和其他模塊直接供電,因此需要設(shè)計(jì)電源轉(zhuǎn)換電路。電源轉(zhuǎn)換電路對于任何一個(gè)電路系統(tǒng)都非常重要,是智能小車穩(wěn)定運(yùn)行的基礎(chǔ)。
本章主要介紹了我們設(shè)計(jì)的電源轉(zhuǎn)換電路,以及采用BTN7971為主要芯片的驅(qū)動(dòng)電路。
1、舵機(jī)供電模塊
這款小車裝配的轉(zhuǎn)向舵機(jī)采用的型號為FutabaS3010,其特點(diǎn)是成本較低、扭矩較高,電壓的變化范圍為4.5 V~6.0 V,為了使舵機(jī)具有更快的響應(yīng)速度和更大的轉(zhuǎn)矩,我們決定使用6.0 V電源電壓[1]。我們采用的是7.2 V電池,因此選擇了 Lm2941可調(diào)穩(wěn)壓芯片,經(jīng)過長時(shí)間的試驗(yàn),該模塊穩(wěn)定性很好。電路如圖6所示。
2、液晶屏、鷹眼供電模塊
液晶屏的型號是ST7735S,攝像頭的型號是OV7725,對數(shù)據(jù)手冊查詢,二者需要供電3.3 V,因此選用AMS1117-3.3[2],通過測試能夠滿足需要,這款穩(wěn)壓器性價(jià)比很高,能夠很穩(wěn)定地將電壓降至3.3 V。供電模塊如圖7所示。
3、MCU供電模塊
K60DN512ZVLQ10是Kinetis系列中的一款增強(qiáng)型32位單片機(jī),K60最小系統(tǒng)核心板是本控制體系的重要部分[3]。它主要是負(fù)責(zé)收取和分析所接收到的行進(jìn)路徑的信息、小車速度反饋等信息,并對信息進(jìn)行適當(dāng)操作。在控制算法的控制下,為舵機(jī)形成合適的輸出量。用驅(qū)動(dòng)電機(jī)操控小車速度,以便使整個(gè)小車快速前進(jìn),控制小車[4]。
K60核心板的電壓是3.3 V,因此,我們同樣使用穩(wěn)壓芯片AMS1117-3.3進(jìn)行穩(wěn)壓,MCU供電電路設(shè)計(jì)圖如圖8所示。
4、編碼器供電模塊
編碼器需要系統(tǒng)5 V的電壓進(jìn)行供電,從而我們運(yùn)用ASM1117系列的5.0版本的穩(wěn)壓芯片進(jìn)行穩(wěn)壓,其供電模塊如圖9所示。
5、驅(qū)動(dòng)電路
小車需要驅(qū)動(dòng)兩個(gè)電機(jī),我們選用了集成電機(jī)驅(qū)動(dòng)芯片的電機(jī)驅(qū)動(dòng)方式,現(xiàn)在非常實(shí)用的是BTN系列驅(qū)動(dòng)芯片,因此選擇了BTN7971芯片,此芯片是通過半橋來進(jìn)行驅(qū)動(dòng)的,因此要完成正轉(zhuǎn)和反轉(zhuǎn)則需要兩片芯片。
兩個(gè)半橋智能功率驅(qū)動(dòng)芯片BTN7971組合成一個(gè)全橋驅(qū)動(dòng)器,使電機(jī)發(fā)生旋轉(zhuǎn),通過施加頻率為20 kHz的PWM信號來掌控,以完成正向和反向PWM驅(qū)動(dòng)和正反向制動(dòng)[5],驅(qū)動(dòng)模塊如圖10所示。
整個(gè)軟件系統(tǒng)有兩部分:路徑識(shí)別和速度方向。這些都是通過控制車模的攝像頭和驅(qū)動(dòng)電機(jī)與舵機(jī)完成的。系統(tǒng)將攝像頭采集的數(shù)據(jù)處理,通過邊線處理達(dá)到路徑識(shí)別,進(jìn)而進(jìn)行舵機(jī)與電機(jī)的控制,兩者是相互協(xié)同配合的。
1、路徑邊線處理
(1)直接逐行掃描原始圖像,根據(jù)設(shè)置的閾值提取黑白跳變點(diǎn);
(2)按照循跡算法開始循跡,對于前三行,采用由視野中心向兩邊找點(diǎn)的方式,找出近處賽道邊沿線;
(3)行駛路徑寬度有一個(gè)范圍,在確定的路徑寬度的有效范圍內(nèi)提取邊沿,可以濾除不在邊沿內(nèi)的干擾;
(4)對于十字,由于雙側(cè)賽道邊沿的丟失,確定找點(diǎn)的初始位置,選擇由中間向兩邊找的方式尋找路徑,同時(shí)根據(jù)矯正圖像濾除十字拐角線,從而順利連線;
(5)中心引導(dǎo)線,從視野的兩邊向中間掃描,判斷中心引導(dǎo)線并控制舵機(jī)打角,讓小車沿引導(dǎo)線行駛。
邊沿提取算法的流程如圖11所示。
2、舵機(jī)PID參數(shù)整定
在舵機(jī)的控制方法中,通過測試之后發(fā)現(xiàn),在將積分項(xiàng)I置零的時(shí)候,舵機(jī)在需要快速響應(yīng)的情況下,它的響應(yīng)速度相比于穩(wěn)定性和準(zhǔn)確性而言,要具有更加重要的地位,并且,在將積分項(xiàng)I置零的同時(shí),智能小車在直道上快速行進(jìn)的時(shí)候,其舵機(jī)的轉(zhuǎn)向方面不會(huì)發(fā)生振蕩,所以基本上不需要Ki參數(shù)來進(jìn)行積分調(diào)節(jié),我們對于微分環(huán)節(jié)D的選取方法是采用定值,其原因是因?yàn)槎鏅C(jī)在智能小車的行進(jìn)過程中都需要較強(qiáng)的響應(yīng)能力,因此采取定值可以保證它的響應(yīng)能力。所以我們最終采取的Kd值為45,Kp則需要通過智能小車所采用的路線來進(jìn)行選擇,Kp是通過經(jīng)驗(yàn)法得出。
舵機(jī)控制采用位置式PID控制,因?yàn)槲恢檬絇ID不需要對控制量進(jìn)行復(fù)制,其公式為:
在從路徑信息中獲得Kp信息之后,再通過圖像處理,我們獲得了一個(gè)偏差值,并且記錄了上次的偏差值,從而根據(jù)PID公式計(jì)算獲得舵機(jī)最終需要的角度。其最終的完整程序的獲取Kp、計(jì)算誤差、記錄和改變誤差如下所示。
jiaodu_num=(int)(duoji_pid.Kp*duoji_pid.err+direct_Kd*(duoji_pid.err-duoji_pid.err_last))。
3、電機(jī)PID參數(shù)整定
在嘗試使用傳統(tǒng)的PID方法進(jìn)行速度控制時(shí),發(fā)現(xiàn)無法達(dá)到理想的速度要求,我們最后采用了增量式PID算法[6]:
我們要在程序中定義幾個(gè)變量:此時(shí)的速度,期望輸出的速度,本次PWM的輸出值,PID的分別數(shù)值,上次的差值和上上次的差值。其中,P、I、D的值按照公式(2)分別用本次偏差值、上次偏差值和上上次偏差值進(jìn)行運(yùn)算,PWM值則是通過將P、I、D值相加得到。其中,本次的偏差值是通過由預(yù)期的速度與目前的速度相減得到,當(dāng)前的速度是由編碼器采值等方式得到,在進(jìn)行完一次運(yùn)算之后,本次的偏差和上次的偏差依次變成上次的偏差和上上次偏差。得到的PWM就是占空比,從而進(jìn)行電機(jī)的控制[7]。
pidl.PWM+= (int16)(P*error1 + I*error0 + D*error2)。
總體來說,對車模方向、速度的控制方案可以使小車在賽道上行駛。但是在路徑識(shí)別方面,小車有時(shí)無法很好地提取邊線從而造成誤差,這是我們設(shè)計(jì)的短板,尚沒有做出更好的解決方案,從而使車模運(yùn)行到這些位置的時(shí)候行駛明顯不夠流暢,這是我們以后需要改進(jìn)的地方。
基于視覺的車輛控制是一個(gè)集動(dòng)態(tài)決策和規(guī)劃、環(huán)境感知、行為控制和執(zhí)行等多種功能于一體的綜合復(fù)雜系統(tǒng),其關(guān)鍵在于如何通過圖像處理更準(zhǔn)確地還原現(xiàn)實(shí)中的路況信息,進(jìn)而進(jìn)行車輛控制,最終實(shí)現(xiàn)車輛的平穩(wěn)安全行進(jìn)。