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