摘 要:針對移動機(jī)器人的自動駕駛問題,提出了一種以樹莓派為核心的基于視覺的自動駕駛控制系統(tǒng)設(shè)計(jì)方案。通過解析基于麥克納姆輪的全向移動機(jī)器人運(yùn)動模型,設(shè)計(jì)了移動機(jī)器人的硬件控制系統(tǒng)。通過攝像頭采集道路圖像,利用OpenCV技術(shù)獲取道路圖像信息。根據(jù)樹莓派圖像處理的數(shù)據(jù),采用PID算法控制機(jī)器人移動,使其能按照指定軌跡行駛。結(jié)果表明:利用該系統(tǒng),移動機(jī)器人能自主識別路徑并實(shí)現(xiàn)自動駕駛。
關(guān)鍵詞:自動駕駛;OpenCV技術(shù);圖像識別;PID算法;自主識別路徑;麥克納姆輪
中圖分類號:TP242.6 文獻(xiàn)標(biāo)識碼:A 文章編號:2095-1302(2024)10-0-04
0 引 言
隨著人工智能時代的到來,人們的交通方式也開始發(fā)生改變,各種交通工具不斷升級,逐漸變得智能化。從自行車、汽車到高鐵、飛機(jī),再到共享單車、共享汽車、無人駕駛汽車,等等,交通方式的變化得益于科技的迅速發(fā)展,這些智能交通工具大大便利了我們的出行,提升了生活的幸福感。
當(dāng)前,無人駕駛汽車在交通發(fā)展領(lǐng)域備受重視,而自動駕駛技術(shù)是無人汽車的核心。引導(dǎo)方法是目前應(yīng)用最多的導(dǎo)航方式,即機(jī)器人對感知的某些外部連續(xù)路徑參照線作出相應(yīng)反應(yīng)來進(jìn)行導(dǎo)航[1]。比如,在地下埋引導(dǎo)線等。但該方法在維修成本、可靠性、抗干擾能力等方面難以滿足用戶需求。近年來,視覺方法被廣泛認(rèn)為是一種更合適的導(dǎo)航方式,當(dāng)路面上有路徑引導(dǎo)線時,機(jī)器人就能通過視覺系統(tǒng)按照指定路線行進(jìn)。本文設(shè)計(jì)了一種移動機(jī)器人,其行進(jìn)功能主要由4個電機(jī)驅(qū)動的麥克納姆輪來實(shí)現(xiàn),通過攝像頭采集路徑信息,利用OpenCV技術(shù)進(jìn)行圖像處理,并通過PID控制算法計(jì)算移動參數(shù),將參數(shù)提供給底盤運(yùn)動控制系統(tǒng),實(shí)現(xiàn)機(jī)器人的前行或轉(zhuǎn)彎。
1 移動機(jī)器人的運(yùn)動原理分析
機(jī)器人采用麥克納姆輪作為基礎(chǔ)原件,實(shí)現(xiàn)360°全向運(yùn)動。麥克納姆輪由輪和圍繞輪的輥?zhàn)咏M成,輥?zhàn)虞S線和輪的軸線夾角是45°。麥克納姆輪有互為鏡像關(guān)系的A、B輪,A輪向前運(yùn)動時同時向右運(yùn)動,即斜向右前方運(yùn)動,向后運(yùn)動的同時會向左運(yùn)動,即斜向左后方運(yùn)動;相應(yīng)B輪就可以斜向左前和右后方運(yùn)動。如圖1所示,4個麥克納姆輪位于機(jī)器人正方形底座的4個頂點(diǎn),本設(shè)計(jì)采用ABBA的分布方式,移動平臺固定安裝4個直流電機(jī)分別驅(qū)動4個輪子,機(jī)器人能夠?qū)崿F(xiàn)前后運(yùn)動、水平移動、繞中心自轉(zhuǎn)等功能[2]。
圖2對單個麥克納姆輪進(jìn)行運(yùn)動學(xué)分析,R表示輪的半徑,實(shí)際輥?zhàn)娱L度為l0。Vix為第i輪沿X軸方向的分速度,Viy為第i輪沿Y軸方向上的分速度,Vg為輥?zhàn)拥乃俣?,輥?zhàn)虞S線與全向輪軸線夾角為α,ωi為全向輪繞輪軸的轉(zhuǎn)速,i=1,2,3,4,分別代表了左前輪、右前輪、左后輪、右后輪,4個輪的轉(zhuǎn)速和移動平臺的運(yùn)動呈一一對應(yīng)關(guān)系。本設(shè)計(jì)通過調(diào)節(jié)各輪的轉(zhuǎn)速,實(shí)現(xiàn)了移動平臺的不同運(yùn)動狀態(tài)[3],公式如下:
2 移動機(jī)器人控制系統(tǒng)設(shè)計(jì)
移動機(jī)器人最重要的組成部分是控制系統(tǒng)。框架采用亞克力板制作,控制系統(tǒng)采用分層結(jié)構(gòu)設(shè)計(jì):最上層安裝攝像頭,用于實(shí)時采集圖像;中間層安裝樹莓派控制板,負(fù)責(zé)處理圖像,通過串口與攝像頭連接;底層安裝下位機(jī)STM32控制板,通過串口與樹莓派連接。此外,還包括為整個系統(tǒng)供電的電源模塊、促使機(jī)器人移動的電機(jī)驅(qū)動模塊等??刂葡到y(tǒng)總體結(jié)構(gòu)如圖3所示。
上位機(jī)采用樹莓派進(jìn)行圖像處理,并給下位機(jī)傳輸運(yùn)動指令。下位機(jī)通過STM32驅(qū)動機(jī)器人的底盤并實(shí)現(xiàn)其他硬件的信號處理。
圖像采集模塊:攝像頭模塊在PWM舵機(jī)的控制下,進(jìn)行三自由度道路圖像信息采集。
圖像處理模塊:主控芯片實(shí)時接收并分析圖像信息,獲得圖像中路徑引導(dǎo)線的位置坐標(biāo),通過計(jì)算將數(shù)據(jù)傳輸至下位機(jī)。
驅(qū)動控制模塊:STM32控制板接收程序并分析上位機(jī)下發(fā)的指令,控制電機(jī)驅(qū)動機(jī)器人行進(jìn);同時采集移動平臺上搭載的相關(guān)模塊狀態(tài)及傳感器數(shù)據(jù)并上傳至樹莓派[4]。編碼器用來測量機(jī)器人4個輪子的旋轉(zhuǎn)速度,并反饋測量值到單片機(jī),實(shí)現(xiàn)機(jī)器人運(yùn)動速度的閉環(huán)控制。MPU6050陀螺儀負(fù)責(zé)采集機(jī)器人的偏航角度[5]。
電源模塊:通過18650電池組為STM32供電,再通過12 V轉(zhuǎn)5 V模塊為系統(tǒng)各功能模塊供電。
3 移動機(jī)器人視覺導(dǎo)航系統(tǒng)設(shè)計(jì)
移動機(jī)器人在自動駕駛過程中,最重要的是道路引導(dǎo)線識別。本設(shè)計(jì)采用樹莓派原裝Raspberry Pi Camera模塊進(jìn)行圖像采集,其具備500萬像素的OV5647鏡頭,靜態(tài)圖片分辨率為2 592×1 944,編程語言選擇Python,在Jupyter Lab中實(shí)現(xiàn)編程[6]。
如圖4所示,系統(tǒng)首先對原始輸入圖像進(jìn)行透視變換,然后根據(jù)設(shè)定的閾值二值化圖像挑選出目標(biāo)點(diǎn)(即路徑中的引導(dǎo)線)并消除其中的噪聲點(diǎn),從而構(gòu)成目標(biāo)的支持點(diǎn)集;路線辨識模塊可以通過目標(biāo)支持點(diǎn)集來檢查工作場景中的引導(dǎo)線,得到所需要的路線信號;根據(jù)機(jī)器人路徑走向偏離中線角度的大小,分直行和左右轉(zhuǎn)彎兩類,通過調(diào)整麥克納姆輪的轉(zhuǎn)速和轉(zhuǎn)向,實(shí)現(xiàn)機(jī)器人的路徑跟蹤[7]。路線識別具體步驟如下:
(1)建立OpenCV坐標(biāo)系,通過圖片讀取函數(shù)獲取圖像,并設(shè)定圖像尺寸為320×240。利用OpenCV提供的投影變換函數(shù)實(shí)現(xiàn)透視變換,把車身前的區(qū)域變換成俯視圖。
(2)為了降低圖像處理過程中的噪聲影響,引入改進(jìn)的中值濾波器算法。算法可有效降低中值濾波的時間復(fù)雜度,達(dá)到對圖像進(jìn)行實(shí)時處理的要求[8]。再對去除噪點(diǎn)的圖像進(jìn)行二值化處理,可以創(chuàng)建點(diǎn)集直方圖。
(3)取直方圖數(shù)組左半部分中最大值的坐標(biāo)位置為左線,同理為右線。利用數(shù)據(jù)確定黑線的位置,并繪制兩條黑線,之后計(jì)算圖像中線和實(shí)際中線的位置。
(4)找到黑線后,返回實(shí)際中線和圖像中線的差值。
4 移動控制算法設(shè)計(jì)
目前,PID算法被廣泛應(yīng)用于生活和工業(yè)生產(chǎn)中。PID控制算法基本原理如圖5所示,對輸入偏差進(jìn)行比例積分、微分運(yùn)算,利用運(yùn)算的疊加結(jié)果控制執(zhí)行機(jī)構(gòu)。比例環(huán)節(jié)可對偏差做出及時響應(yīng),積分環(huán)節(jié)用于消除靜態(tài)誤差,微分環(huán)節(jié)可阻止偏差的變化。圖5中:u(t)為PID調(diào)節(jié)器的輸出;e(t)為PID調(diào)節(jié)器的偏差,即設(shè)定值r(t)與實(shí)際測量值y(t)的偏差[9]。
數(shù)字PID控制算法可以分為位置式PID和增量式PID控制算法。本設(shè)計(jì)采用位置式PID控制算法,其輸出是被控對象的實(shí)際控制量。算法表達(dá)式如下:
class PositionalPID:
def _init_(self, P, I, D):
self.Kp = P
self.Ki = I
self.Kd = D
self.SystemOutput = 0.0
self.ResultValueBack = 0.0
self.PidOutput = 0.0
self.PIDErrADD = 0.0
self.ErrBack = 0.0
設(shè)置PID控制器參數(shù):
def SetStepSignal(self,StepSignal):
Err = StepSignal - self.SystemOutput
KpWork = self.Kp * Err
KiWork = self.Ki * self.PIDErrADD
KdWork = self.Kd * (Err - self.ErrBack)
self.PidOutput = KpWork + KiWork + KdWork
self.PIDErrADD += Err
self.ErrBack = Err
設(shè)置一階慣性環(huán)節(jié)系統(tǒng)(InertiaTime為慣性時間常數(shù)):
def SetInertiaTime(self, InertiaTime,SampleTime):
self.SystemOutput = (InertiaTime * self.ResultValueBack + \
SampleTime * self.PidOutput) / (SampleTime + InertiaTime)
self.ResultValueBack = self.SystemOutput
通過視覺圖像處理計(jì)算的偏移量Bias即為PID出口值,將偏移量限制在-20~20,防止轉(zhuǎn)向過快丟失賽道黑線。通過函數(shù)Z_axis_pid.SetInertiaTime(0.5,0.2)配置慣性時間常數(shù)。最后通過均值濾波法找出點(diǎn)集直方圖中的峰值個數(shù),2或4個峰值時認(rèn)為車身偏移不大,直接利用機(jī)器人速度控制函數(shù)控制小車左右轉(zhuǎn)向即可。1個峰值時機(jī)器人即將跑出賽道,分為看見左線和看見右線兩種情況,若Bias=-20實(shí)現(xiàn)右轉(zhuǎn),若Bias=20則實(shí)現(xiàn)左轉(zhuǎn),其他峰值時機(jī)器人直走。
5 測試結(jié)果及分析
5.1 測試環(huán)境
機(jī)器人移動測試場地如圖6所示。場地中有兩條5 cm寬的黑色引導(dǎo)線。為檢驗(yàn)機(jī)器人的路線識別能力,在場地中設(shè)置了直線、曲線和拐角。在實(shí)驗(yàn)過程中,機(jī)器人未提前裝載地圖路線,全程跟隨引導(dǎo)線行駛。實(shí)驗(yàn)路線邊界清晰。
實(shí)驗(yàn)機(jī)器人采用麥克納姆輪底盤作為移動平臺,4路直流電機(jī)負(fù)責(zé)驅(qū)動,安裝并連接了12.6 V的電池模塊到STM32控制板。
安裝圖像分辨率為2 592×1 944的樹莓派原裝OV5647攝像頭以采集視覺圖像。通過WiFi連接手機(jī),實(shí)時顯示攝像頭采集的路線圖像。
5.2 引導(dǎo)線檢測測試
移動機(jī)器人在行駛過程中,通過攝像頭模塊采集圖像并對采集的圖像進(jìn)行處理,確定是否有引導(dǎo)線出現(xiàn)。本測試采用的引導(dǎo)線如圖6所示。當(dāng)檢測到有引導(dǎo)線時,對該圖像做進(jìn)一步處理,獲取引導(dǎo)線的位置坐標(biāo)信息。由于機(jī)器人在不斷行進(jìn),所以要求對圖像檢測快且準(zhǔn)。對直行和彎道引導(dǎo)線進(jìn)行測試,效果如圖7所示。在引導(dǎo)線檢測調(diào)試過程中,經(jīng)過反復(fù)實(shí)驗(yàn),發(fā)現(xiàn)燈光的反射還有地板顏色會在一定程度上影響圖像二值化處理的準(zhǔn)確性。
5.3 自動駕駛測試
通過人為放置方式測試移動機(jī)器人的自動駕駛功能。放置路線后,通過WiFi連接機(jī)器人和手機(jī),使機(jī)器人開啟自動駕駛模式。為保證機(jī)器人行駛的準(zhǔn)確性,在直行路線和彎道處進(jìn)行多次測試,效果如圖8所示。
在圖6所示的模擬場景中進(jìn)行50次模擬駕駛測試,結(jié)果見表1所列。
5.4 實(shí)驗(yàn)結(jié)果及分析
將機(jī)器人放在引導(dǎo)地圖上,經(jīng)過多次實(shí)驗(yàn),其均能以較快的速度進(jìn)行直走和轉(zhuǎn)彎,并且通過多次測試,機(jī)器人行駛過程中均未超出引導(dǎo)線。實(shí)驗(yàn)表明,該機(jī)器人具有良好的自動駕駛功能。
引導(dǎo)線識別測試過程中,在外界環(huán)境良好的情況下機(jī)器人能夠準(zhǔn)確識別黑色引導(dǎo)線。在掃描到地圖外側(cè)地板的情況下,受顏色影響,機(jī)器人在識別黑色引導(dǎo)線與深色地板時會產(chǎn)生一定程度的偏差。自動駕駛測試過程中,移動機(jī)器人能準(zhǔn)確識別引導(dǎo)線,并按照路線成功直行和轉(zhuǎn)彎。通過多次測試,證明在引導(dǎo)線內(nèi)直行和轉(zhuǎn)彎成功率均較高。
6 結(jié) 語
針對移動機(jī)器人的自動駕駛問題,利用OpenCV在樹莓派中設(shè)計(jì)了路線識別算法,以視覺方式實(shí)時獲取兩側(cè)引導(dǎo)線與中線坐標(biāo);運(yùn)用位置式PID控制算法,根據(jù)圖像計(jì)算的中線與實(shí)際中線的偏差,控制調(diào)節(jié)機(jī)器人的轉(zhuǎn)向角度。結(jié)果表明:該控制方法實(shí)現(xiàn)了基于視覺的機(jī)器人自動駕駛,并經(jīng)過多次重復(fù)實(shí)驗(yàn)檢測,證明了在簡單直行道路和彎路中成功率很高,移動機(jī)器人可以在引導(dǎo)線內(nèi)準(zhǔn)確行駛。
參考文獻(xiàn)
[1]張海波,原魁,周慶瑞.基于路徑識別的移動機(jī)器人視覺導(dǎo)航[J].中國圖象圖形學(xué)報(bào),2004,9(7):89-93.
[2]王興松. Mecanum輪全方位移動機(jī)器人技術(shù)及其應(yīng)用[J].機(jī)械制造與自動化,2014,43(3):1-6.
[3]張忠民,鄭仁輝.基于模糊PID的麥克納姆輪移動平臺的控制算法[J].應(yīng)用科技,2017,44(6):53-59.
[4]封斌,閆志燁.基于Arduino的服務(wù)機(jī)器人控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].廣州航海學(xué)院學(xué)報(bào),2018,26(1):63-66.
[5]李娟,秦偉.基于視覺的移動機(jī)器人避障控制系統(tǒng)設(shè)計(jì)[J].機(jī)床與液壓,2021,49(15):24-28.
[6]韓宇,張磊,吳澤民,等.基于嵌入式樹莓派和OpenCV的運(yùn)動檢測與跟蹤系統(tǒng)[J].電視技術(shù),2017,41(2):6-10.
[7]周南.基于圖像識別的智能小車路徑跟隨系統(tǒng)設(shè)計(jì)[D].長沙:湖南大學(xué),2017.
[8]楊春暉.基于地面軌線的單目機(jī)器人視覺導(dǎo)航系統(tǒng)設(shè)計(jì)[D].蘇州:蘇州大學(xué),2010.
[9]朱嶸濤,武洪濤.基于增量式PID算法的直流電機(jī)調(diào)速系統(tǒng)[J].儀表技術(shù)與傳感器,2017(7):121-126.
[10]謝芳芳,楊鑒.單關(guān)節(jié)機(jī)器人伺服系統(tǒng)的建模與仿真[J].湖南工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報(bào),2021,21(1):47-52.