葉夢君,黃仰來,雷改惠
(湖北師范大學(xué) 機(jī)電與控制工程學(xué)院,湖北 黃石 435002)
自動(dòng)循跡智能車相當(dāng)于無人駕駛智能車。無人駕駛技術(shù)難點(diǎn)在于路徑信息的采集、處理和判斷,其中路徑信息的采集、處理直接影響著智能車判斷的準(zhǔn)確性。OV7725攝像頭傳感器相當(dāng)于智能車的眼睛,小車通過傳感器獲取路徑信息,對采集的圖像信息進(jìn)行濾波、路徑識別,根據(jù)不同賽道的曲率值確定賽道類型;單片機(jī)采集到賽道圖像左右跳變沿位置的加權(quán)平均偏差,對加權(quán)平均偏差選擇合適的P、D參數(shù)進(jìn)行PD算法控制舵機(jī)轉(zhuǎn)向;將采集賽道圖像二值化數(shù)據(jù)中心位置與左右跳變點(diǎn)位置的加權(quán)偏差進(jìn)行函數(shù)擬合,調(diào)節(jié)參數(shù)得到合適的速度控制電機(jī),最終實(shí)現(xiàn)小車的自主尋跡功能。
攝像頭智能車系統(tǒng)硬件分為6大模塊:主控制器模塊、電源模塊、賽道信息采集模塊和圖像調(diào)試顯示模塊、方向控制模塊、速度控制電路模塊,攝像頭智能車系統(tǒng)硬件整體設(shè)計(jì)框圖如圖1所示。
主控制器模塊采用飛思卡爾公司推出的K60系列的32位微控制器MK60DN512ZVLQ10作為智能車嵌入式系統(tǒng)的核心控制單元,是整個(gè)攝像頭智能車的“大腦”,完成各項(xiàng)任務(wù)的分配與協(xié)調(diào)。電源模塊負(fù)責(zé)提供各子模塊所需的電壓,其中MK60DN512ZVLQ10需要3.3V電壓,獲取賽道信息的OV7725攝像頭供電電壓為3.3V,方向控制模塊中的SD5伺服舵機(jī)是6V供電,速度控制模塊中的74HC244芯片供電電壓為5V,測速編碼器歐姆龍E6A2-CW3C標(biāo)準(zhǔn)電壓為5V.賽道信息采集模塊采用攝像頭,通過攝像頭采樣以及硬件二值化,濾波處理,將得到的數(shù)據(jù)儲存在二維數(shù)組中,通過路徑識別算法提取偏差。方向控制模塊使用的是SD5數(shù)字舵機(jī),該舵機(jī)轉(zhuǎn)向靈活、反應(yīng)速度快且力矩較大,通過賽道中心線部位與小車位置的偏差,由相應(yīng)控制算法控制舵機(jī)靈活轉(zhuǎn)彎。通過PID算法以及靈活調(diào)整PID參數(shù),由給定中斷的時(shí)間間接獲取小車速度。停車由攝像頭采集圖像內(nèi)的黑白跳變沿個(gè)數(shù)來決定。
圖1 攝像頭智能車系統(tǒng)硬件整體設(shè)計(jì)框圖
采用飛思卡爾公司推出的K60系列的32位微控制器MK60DN512ZVLQ10作為智能車嵌入式系統(tǒng)的核心控制單元。MK60DN512ZVLQ10具有高達(dá)512KB片內(nèi)Flash程序存儲器,128KB SRAM,運(yùn)行頻率高達(dá)100MHz,16路通道的通用DMA控制器。片上集成有電壓調(diào)節(jié)、在線調(diào)試、時(shí)鐘產(chǎn)生定時(shí)器、A/D轉(zhuǎn)換、D/A轉(zhuǎn)換和PWM輸出等模塊,滿足智能車系統(tǒng)的需要[1]。
電源是保證智能車正常工作的基礎(chǔ),使用7.2V鎳鎘充電電池作為控制電源。由于系統(tǒng)各個(gè)部分所需額定電壓不同,主電源(7.2V)經(jīng)過升壓電路(MC34063)轉(zhuǎn)換為12V給速度控制電路模塊電機(jī)供電;主電源(7.2V)經(jīng)過降壓電路(TPS7350)轉(zhuǎn)換為5V給方向控制模塊舵機(jī)供電;主電源(7.2V)經(jīng)過降壓電路(AMS1117)轉(zhuǎn)換為3.3V給主控制器模塊、賽道信息采集模塊OV7725、圖像調(diào)試顯示模塊TFT小液晶供電[2]。
賽道信息獲取是智能車穩(wěn)定快速運(yùn)行的根本保障。賽道信息通過0V7725攝像頭進(jìn)行采集,0V7725攝像頭采集速率可達(dá)每秒150幀,具有強(qiáng)大的去噪點(diǎn)和抗干擾功能,直接采用硬件二值化,將采集的數(shù)據(jù)直接二值化處理,無需軟件二值化,減少CPU占用,提高智能車的速度[3]。
攝像頭智能車能夠圍繞著賽道中心線穩(wěn)定運(yùn)行依靠舵機(jī)轉(zhuǎn)向功能。方向控制模塊采用的是SD5數(shù)字舵機(jī),該舵機(jī)具體低成本、高扭矩、響應(yīng)速度快的優(yōu)點(diǎn)。舵機(jī)有三根接線,紅色線接6V電源、黑色線接GND、白色線為舵機(jī)信號控制線,接PWM輸出端。本智能車舵機(jī)信號線接單片機(jī)的PTA8引腳,通過單片機(jī)的控制信號來調(diào)節(jié)舵機(jī)的脈沖占空比來實(shí)現(xiàn)舵機(jī)的轉(zhuǎn)向功能[4]。
速度控制模塊主要由電機(jī)、電機(jī)驅(qū)動(dòng)電路、編碼器等組成,與主控器一起構(gòu)成閉環(huán)控制系統(tǒng)。如果單片機(jī)輸出的PWM信號直接給到電機(jī),會造成電機(jī)轉(zhuǎn)動(dòng)產(chǎn)生過大的電流可能將單片機(jī)燒毀,故需要通過電機(jī)驅(qū)動(dòng)電路來控制電機(jī)。因?yàn)殡姍C(jī)采用的RN-540直流大電機(jī),電流較大,驅(qū)動(dòng)電路采用IRF3205與IR2104組成的H橋電路更加安全有效,主控制器輸出一路PWM控制信號驅(qū)動(dòng)IR2104芯片,控制H橋以及驅(qū)動(dòng)電機(jī)正反轉(zhuǎn)[5]。
本智能車系統(tǒng)以MK60DN512VLQ10微控制器為核心控制單元,0V7725攝像頭傳感器采集賽道信息并直接進(jìn)行硬件二值化處理,單片機(jī)對攝像頭采集的二值化賽道信息進(jìn)行曲率計(jì)算以分辨賽道類型。利用攝像頭采集的賽道信息,對每一行取中值與物理中值作差,偏差加權(quán)取平均,采用不同的P、D參數(shù),利用偏差的PD控制算法,控制舵機(jī)轉(zhuǎn)向。針對不同的曲率給定不同的速度期望,由控制器、電機(jī)驅(qū)動(dòng)、編碼器構(gòu)成一個(gè)閉環(huán)控制系統(tǒng),通過PID算法,實(shí)現(xiàn)速度控制,速度與舵機(jī)偏差結(jié)合,實(shí)現(xiàn)速度分段控制。最終實(shí)現(xiàn)小車在不同曲率的賽道上穩(wěn)定快速的行駛。攝像頭智能車軟件系統(tǒng)主要由以下4個(gè)部分組成:圖像濾波、圖像類型識別、方向控制、速度控制。
0V7725攝像頭直接對采集的賽道信息進(jìn)行硬件二值化處理,為了較好地識別賽道類型,首先要對攝像頭采集賽道的二值化信息進(jìn)行濾波處理,采用中值濾波算法,即對每一行遍歷。當(dāng)發(fā)現(xiàn)某一點(diǎn)的前一個(gè)點(diǎn)和后一個(gè)點(diǎn)同為黑點(diǎn)或者白點(diǎn),與該點(diǎn)不同,則將其進(jìn)行平均轉(zhuǎn)化為黑點(diǎn)或者白點(diǎn)。針對0V7725攝像頭采集的直道、彎道、環(huán)島道、十字道和Ω道不同位置處賽道信息的二值化圖像經(jīng)過濾波處理后的二值化圖像,攝像頭采集不同賽道二值化圖像經(jīng)濾波處理后圖像如圖2所示。
(a)攝像頭采集的直道二值化圖像經(jīng)濾波處理后的圖像
(b)攝像頭采集的彎道二值化圖像經(jīng)濾波處理后的圖像
(c)攝像頭采集環(huán)島道前后二值化圖像經(jīng)濾波處理后圖像
(d)攝像頭采集的十字道二值化圖像和濾波處理后的圖像
(e)攝像頭采集的Ω道二值化圖像經(jīng)濾波處理后的圖像
在采集到濾波處理后的圖像,要對圖像的有用信息進(jìn)行壓縮處理,提取賽道中心線和判斷賽道類型。為保證小車在賽道行駛過程中舵機(jī)打角連貫及時(shí)且速度快,需要對不同的賽道類型選擇合適的參數(shù),因此識別出賽道類型十分重要。一般通過賽道曲率來識別賽道類型。曲率就是指賽道的彎曲程度,故區(qū)分不同賽道類型可以轉(zhuǎn)換為區(qū)分不同賽道的彎曲程度。如果能夠知道不同賽道的曲率值,那么就可以區(qū)分出賽道類型。
常用的曲率算法有三點(diǎn)求曲率法和單點(diǎn)求曲率法。由于攝像頭會存在圖形微小畸變,故選擇單點(diǎn)求曲率法,該曲率法在圖形畸變很小的情況下可以直接使用,無需校正圖像。如圖3單點(diǎn)求斜率法顯示小車在賽道上的模型。
圖3 單點(diǎn)求斜率法顯示小車在賽道上模型
小車當(dāng)前在賽道A處,攝像頭檢測到前瞻為h處的賽道信息。假設(shè)小車在白色賽道中心線上,這時(shí)攝像頭上中心探測線與賽道在小車車身處的切線垂直。根據(jù)小車硬件構(gòu)架,前瞻h數(shù)據(jù)已知,而傳感器又可測出小車前瞻處點(diǎn)B和賽道中心線的偏差l。又因?yàn)橘惖繟C段可看成一段圓弧,由圖中圖形的幾何性質(zhì),易知△ABC和△ODA相似。
因此可以算出AC段曲率:
式中h為常量,與硬件自身有關(guān),只需要知道變量l則可以計(jì)算出曲率。
即曲率k與小車前瞻處點(diǎn)B和賽道中心線的偏差l成正比。通過實(shí)驗(yàn)的反復(fù)測試,將小車在不同賽道類型上進(jìn)行推動(dòng),并左右移動(dòng),通過OLED進(jìn)行參數(shù)顯示,確定出小車在不同賽道類型曲率值最大范圍和最小范圍。通過測試直道曲率范圍[-0.1,0.1],小s彎道曲率范圍[-0.25,-0.12]或[0.12,0.25],大s彎道曲率范圍[-0.45,-0.25]或[0.25,0.45],直角彎道曲率范圍[-0.65,-0.5]或[0.5,0.65],Ω彎和直角彎道與大彎道曲率均有交集,因此將Ω彎曲率范圍取直角彎道曲率范圍[-0.65,-0.5]或[0.5,0.65].根據(jù)曲率值的大小,確定小車所在的賽道類型,針對不同賽道類型,選取合適的參數(shù),控制舵機(jī)靈活打角。
OV7725攝像頭采集到的圖像的二值化數(shù)據(jù)為60行80列,為減少單片機(jī)處理時(shí)間和舵機(jī)打角的準(zhǔn)確性,將采集圖像的二值化數(shù)據(jù)前6行和后6行丟掉,使用中間的48行數(shù)據(jù),從中間第40列處每行數(shù)據(jù)往兩邊掃直至找到左右跳邊點(diǎn)得到賽道左右寬度k1,k2,若找不到跳邊點(diǎn)則默認(rèn)第0列和第80列為跳變點(diǎn),算出每一行偏差k3=k2-k1,如果k3>0,代表舵機(jī)需右轉(zhuǎn);若果k3<0,舵機(jī)需左轉(zhuǎn),得出每一行的偏差后,將前16行偏差之和A1乘以一個(gè)權(quán)重k4,中間16行偏差之和A2乘以一個(gè)權(quán)重k5,后16行偏差之和A3乘以一個(gè)權(quán)重k6,再進(jìn)行加權(quán)平均得平均偏差A(yù)4=(A1*k4+A2*k5+A3*k6)/(k4+k5+k6);A4即為舵機(jī)位置式PID函數(shù)的輸入值,平均偏差A(yù)4=0,舵機(jī)不打角;平均偏差A(yù)4>0,小車位于賽道中心線的左邊,舵機(jī)需要右打角;平均偏差A(yù)4<0,小車位于賽道中心線的右邊,舵機(jī)需要左打角,為保證舵機(jī)打腳連貫順暢,可以將連續(xù)幾場的A4進(jìn)行權(quán)重再取平均。根據(jù)曲率值,得知不同賽道類型,選擇合適的參數(shù)P、D,使智能車在不同賽道類型達(dá)到較好的流暢打腳效果。通過反復(fù)實(shí)現(xiàn)測試,不同賽道類型,即不同曲率對應(yīng)的舵機(jī)P、D參數(shù)如下:曲率范圍為[-0.1,0.1],對應(yīng)直道,方向控制PD算法對應(yīng)參數(shù)為kp=0.3,kd=0;曲率范圍為[-0.25,-0.12]或[0.12,0.25],對應(yīng)小s彎道,方向控制PD算法對應(yīng)參數(shù)為kp=0.66,kd=0.1;曲率范圍為[-0.45,-0.25]或[0.25,0.45],對應(yīng)大s彎道,方向控制PD算法對應(yīng)參數(shù)為kp=0.75,kd=0.9;曲率范圍為[-0.65,-0.5]或[0.5,0.65],對應(yīng)Ω彎與直角彎道,方向控制PD算法對應(yīng)參數(shù)為kp=0.97,kd=1.
對于速度控制,主要是將主控制器、電機(jī)驅(qū)動(dòng)、電機(jī)、編碼器構(gòu)成一個(gè)閉環(huán)PID控制系統(tǒng)來進(jìn)行速度控制。由于賽道元素復(fù)雜,為了保證小車能在連續(xù)急彎快速穩(wěn)定地通過,需將小車速度與采集賽道圖像二值化數(shù)據(jù)中心位置與左右跳變點(diǎn)的位置的加權(quán)偏差進(jìn)行函數(shù)擬合,調(diào)節(jié)合適的參數(shù),得到合適的速度,確保小車在賽道外側(cè)通過舵機(jī)修正穩(wěn)定駛過賽道,在賽道中心快速行駛。依據(jù)曲率可以得出賽道類型,每一賽道類型會有一個(gè)速度期望,通過增量式函數(shù)計(jì)算出輸出速度,然后將輸出速度與舵機(jī)打腳偏差abs(ddeviation-dmedian)和連續(xù)兩次舵機(jī)偏差的差nerror擬合一個(gè)函數(shù)關(guān)系式,得出最后的輸出速度。
ecpectedspeed=speed-k1*kp1*abs(ddeviation-dmedian)-nerror*k2;
式中speed為增量式函數(shù)計(jì)算出的輸出值(即輸出脈沖);ddeviation為舵機(jī)偏差,即左右跳變點(diǎn)位置的加權(quán)偏差;dmedian為舵機(jī)中值,即采集賽道圖像二值化數(shù)據(jù)中心位置對應(yīng)舵機(jī)值;nerror為兩次舵機(jī)偏差之間的差;通過實(shí)驗(yàn)測試,k1=0.4,kp1=0.2,k2=0.5;
通過反復(fù)實(shí)驗(yàn)測試,不同賽道類型,即不同曲率對應(yīng)的電機(jī)期望值如下:曲率范圍對應(yīng)直道,電機(jī)期望值djexpect=400;曲率范圍對應(yīng)小s彎道,電機(jī)期望值djexpect=300;曲率范圍對應(yīng)大s彎道,電機(jī)期望值djexpect=250;曲率范圍對應(yīng)Ω彎與直角彎道,電機(jī)期望值djexpect=250.
本文介紹了攝像頭智能車系統(tǒng)各模塊的硬件設(shè)計(jì)和軟件設(shè)計(jì)及實(shí)現(xiàn)。通過反復(fù)調(diào)試,選擇合適的參數(shù),最終實(shí)現(xiàn)攝像頭智能車快速穩(wěn)定直行及循跡轉(zhuǎn)彎。
湖北師范大學(xué)學(xué)報(bào)(自然科學(xué)版)2020年2期