



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