◆殷惠莉 宋淑然 薛秀云 林景峰 姚俊光
MATLAB是當前國際最流行的面向工程、數(shù)值和科學計算的高級語言。MATLAB環(huán)境下的Simulink擁有豐富的系統(tǒng)建模、仿真和分析動態(tài)仿真環(huán)境工具箱[1]。華南農業(yè)大學電子工程學院的各個專業(yè)都有開設MATLAB仿真課程,但是學生大多是根據(jù)課程教學要求按部就班學習,沒有非常明確的目的,缺乏學習動力,學習效果一般。為充分利用虛擬仿真技術創(chuàng)新工程實踐教學方式,進一步培養(yǎng)學生基于模型設計的思想和解決問題的能力,讓學生了解前沿行業(yè)信息,全面提高學生的綜合能力,指導學生參加MATLAB杯全球(中國賽區(qū))大學生無人機競賽。該競賽是由MathWorks發(fā)起的無人機競賽,旨在幫助學生在畢業(yè)前了解工業(yè)界先進的基于模型設計理念,并學習行業(yè)通用的標準軟件?;谀P驮O計的方法正在改變工程師和科學工作者的工作方式,用建模仿真試驗替代實物測試試驗,可縮短工程設計時間與成本。
無人機是一種空中飛行器,無須安裝飛行員相關設備,通常受控于無線電遙控或自身程序。當前,無人機正呈現(xiàn)智能化和集群化發(fā)展態(tài)勢,各種無人機正漸漸進入公共服務體系,在軍用和民用領域廣泛應用,比如執(zhí)行偵察、通信、精確打擊等軍事任務,航拍、城市管理、農業(yè)等民用任務[2]。
從系統(tǒng)角度看,無人機是一種多輸入輸出的欠驅動系統(tǒng)[3]。無人機的控制是通過輸入四個可控變量來控制飛行時的六個自由度??煽刈兞繉o人機的控制存在強耦合,易受干擾,這就造成其飛行控制十分困難。為了滿足無人機的穩(wěn)定循跡,汪勇等[4]采用激光雷達掃描識別高壓電線,使得無人機隨高壓線的走向進行循跡,但是激光雷達檢測容易造成點云數(shù)據(jù)缺失、噪點多、建模復雜等缺點[5]。同時,這種方法只能識別突出的物體,對于平面線段無法識別。蔡鑫等[6]采用攝像頭捕獲軌道圖像,將整個圖像分割成五個區(qū)域,根據(jù)五個區(qū)域的像素點的信息特征來識別路徑,但是因為采用了大部分像素,增加了算法開銷,同時還有可能引進錯誤的像素,從而增大算法的復雜度。無人機采用攝像頭提取預期位置值時,其細微的姿態(tài)偏移可能會引起較大的預期位置的偏差。
本文在總結不同軌跡的圖像特征的情況下,設計一種復雜度低且能穩(wěn)定循跡的算法,這種算法提取部分像素,分析得出軌跡,通過位置控制實現(xiàn)循跡。
視覺循跡的基本思路是通過區(qū)分圖像中不同軌道的特征來判斷軌跡。為了盡量減輕硬件開銷,本文均采用灰度圖分析。在一個灰度圖像中,如果灰度局部發(fā)生劇烈變化,則以此為基礎檢測邊緣。
二值化灰度圖像后,算法通過基于一階導數(shù)的Sobel邊緣檢測算法提取灰度圖邊緣。該算法引入類似局部平均的運算,對噪聲具有平滑作用,能很好地消除噪聲的影響。經(jīng)過Sobel算法邊緣檢測模塊處理后,可以輸出圖像的兩個不同方向的梯度分量:一個是Gv垂直邊緣梯度響應矩陣,即縱向邊緣,該矩陣只顯示豎線,為豎線矩陣;另一個是Gh水平邊緣梯度響應矩陣,即橫向邊緣。
提取灰度圖像邊緣后,通過矩陣提取圖像中某一行或者一豎的像素點,將多維信息轉化為一維信息。經(jīng)過以上數(shù)據(jù)處理后的一維矩陣中,只有有限個元素的值是非零的。這些元素的個數(shù)定義為特征點個數(shù),這些非零元素的下標數(shù)值定義為特征點的值。
提取軌跡輪廓需要重點關注輪廓邊緣和噪聲點,噪聲點[7]包括孤立點、端點、交叉點。通過提取像素矩陣后,軌道輪廓邊緣具有連續(xù)性,會持續(xù)影響循跡決策。不具有連續(xù)性的噪聲點很難對循跡算法造成持續(xù)干擾,從而可以忽略其不良影響。
位置控制與姿態(tài)控制之間存在耦合。為了達到解耦控制的目的,李斌斌等[8]設計了一種甲烷型過驅動四旋翼無人機。這種通過改變無人機的結構達到解耦控制目的的方法,增大了硬件的開銷。在無人機姿態(tài)變化較小的情況下,為了消除耦合帶來的影響,本文提出一種方法——斜線補償。這種方法可以在不用引入硬件的情況下,在一定范圍內消除位置變化和姿態(tài)變化引起的誤差。
當發(fā)生耦合的時候,通過斜線補償可以計算出由于姿態(tài)變化而引起的誤差。誤差值的計算公式如式(1)、式(2)所示,其中,Ex、Ey為計算出來的誤差,K1與K2分別為解耦系數(shù),X、Y分別表示X軸、Y軸上的實際值,pitch與roll分別對應各自姿態(tài)角弧度。
解耦系數(shù)依據(jù)實際調試時測試得到。該方法可以在一定程度上解決由于姿態(tài)變化而帶來的影響。由于位置變化而引起的誤差,其值可以通過式(3)、式(4)計算。
其中,Exs、Eys分別為X軸和Y軸上計算出來的誤差,這個值會與預期值累加;W為軌道此時的寬度;Kxs、Kyx為X軸和Y軸上的誤差系數(shù),是一個正數(shù)。軌道的寬度可以根據(jù)特征點的值計算所得。要特別注意,如果無人機偏移軌跡不超過半個機身,就不需要計算其引起的誤差。
綜上所述,圖像處理算法流程如圖1所示,其中軌道此時在圖像中所占像素點個數(shù)為L1。攝像頭在軌道正上方時,軌道在圖像中所占像素點個數(shù)為L2。
圖1 圖 處理流程
為了發(fā)掘各種軌道的共性及特性,需要從根本上分析各種軌道的不同之處。為了操作方便,將無人機的運動先簡單地分為四種情況。同時從特征點個數(shù)的變化這個方面來考慮不同軌道的不同特征。
基本方向 如果不考慮高度變化,就可以將無人機運動的方向簡單分為向前、后、左、右四個基本方向,其中向前為實際坐標中X軸的正方向,向右為實際坐標中Y軸正方向。斜線循跡可以看為兩個方向上的運動的疊加。橫向矩陣指的是沿著X軸垂直的方向通過矩陣提取圖像中某一行的像素點。豎向矩陣指的是沿著Y軸垂直的方向通過矩陣提取圖像中某一豎的像素點。
橫向矩陣提取出來的特征點的信息可以反映實際坐標中X軸的變化,豎向矩陣提取出來的特征點的信息可以反映實際坐標中的Y軸的變化。如果要完成向左向右的基本方向的運動,采用橫向矩陣時,可以向左向右運動,采用豎向矩陣可以向前向后運動。假如這里采用橫向矩陣特征點,那么如果Y軸以固定距離輸出,則無人機可以完成向左和向右兩個基本方向,同時會根據(jù)特征點來調整在實際坐標中X軸的運動。向前向后的運動可以此類推。表1列出基本方向對應的運動方法。注意:該表中的X、Y軸為實際坐標軸。
表1 基本方向采用的不同矩陣及固定距離
基本運動 通過總結歸納,循跡的路線類型可以分為直線、鈍角彎道、直角彎道、銳角彎道、圓弧。表2列出了這五種基本運動的特征點信息,從特征點個數(shù)的角度分析五種路線類型。從特征點個數(shù)的變化可知,直線和鈍角彎道可以視為一種情況,圓弧和直角彎道有一段是相同的,它們都有從兩個點變?yōu)橐粋€點的過程,要保證轉彎后可以繼續(xù)走,就需要在兩個點變?yōu)橐粋€點時,采用另外一個矩陣提取出來的特征點。比如無人機要從向前轉為向右,就要從采用豎向矩陣的特征點變?yōu)椴捎脵M向矩陣的特征點。銳角彎道最為特殊,會有從三個點變?yōu)閮蓚€點的過程,可以在這個過程發(fā)生時進行矩陣的切換。
轉彎只會發(fā)生在橫向矩陣與豎向矩陣切換時,而每一次切換都會有特征點的消失。因此,當采集到的圖像信息表示需要矩陣切換時,就計算出上一個采樣時間到這一個采用時間里丟失的點,以該點作為下一個需要逼近的目標,當逼近時,由于慣性,無人機會先繼續(xù)保持原來的運動方向運動一段時間,這樣完成轉彎過程。
基本模式 在無人機飛行的過程中有四種飛行模式:
第一種是向前橫切模式,即規(guī)定與無人機機體垂直的方向為橫切,并且向前運動;
第二種是向后橫切模式,即與無人機機體垂直的方向為橫切,并且向后運動;
第三種是向左豎切模式,即規(guī)定與無人機機體平行的方向為豎切模式,并且向左運動;
第四種是向右豎切模式,即與無人機機體平行的方向為豎切模式,并且向右運動。
設置這四種不同的飛行模式是為了當軌道發(fā)生變化時無人機能及時作出調整,即由橫切模式切換到豎切模式,或者由豎切模式切換到橫切模式,或者做前后/左右模式的切換。其中橫切的標志位是0或2,豎切的標志位是1。
基于以上分析,循跡算法流程如圖2所示。其中初始化過程是確定最初的基本方向的過程。在初始化過程中分別采用橫向矩陣和豎向矩陣,選取特征點個數(shù)最多的矩陣為初始基本方向。初始化只會在剛起飛的時候執(zhí)行,執(zhí)行一次后就不再執(zhí)行。
圖2 循跡算法流程
用Simulink設計軌道,軌道如圖3所示,其中軌道寬度為100 cm,圖中箭頭所指方向為無人機起點。當直線與攝像機坐標中X軸平行時,特征點為48、69;當直線與攝像機坐標中Y軸平行時,特征點為62、83。無人機起飛穩(wěn)定后,攝像機以200 ms為周期拍攝圖片,圖片矩陣大小為120×80。無人機高度固定為1.1 m,起飛到機身穩(wěn)定高度所需要的時間為1.6 s,這段時間內完成初始化。仿真中Y軸對應的斜線補償誤差系數(shù)Kys為0.3,X軸對應的斜線補償誤差系數(shù)Kxs為0.1。解耦系數(shù)K1、K2均為0.35。如果解耦系數(shù)過大,無人機姿態(tài)很難發(fā)生改變,遇到轉彎等軌道就無法正常循跡。如果誤差系數(shù)過大,那么在循跡斜線的時候就會導致無人機劇烈晃動。解耦系數(shù)和誤差系數(shù)太小,就無法達到解耦控制的目的。
圖3 軌道圖
圖4所示為飛行仿真過程中,無人機在X軸和Y軸上與飛行原點的距離,正值表示沿軸正方向,負值表示沿軸負方向。由圖4可以看出:在0~20 s內,在X軸上的距離直線上升,Y軸的則保持不變,此時無人機正沿著圖4中第一段軌道循跡;在20~21 s完成直角轉彎之后,在21~40 s內沿著第二段軌道循跡,此時在X軸上的距離保持不變,Y軸的則直線上升。在循跡最后一段斜線的時候,兩軸實際距離均減小。整個過程仿真時間為83.88 s,飛行總距離為8.8 m,平均速度為0.105 m/s。
圖4 軌道各軸實際值
圖5所示為仿真飛行過程中的部分截圖,整個過程無人機基本不偏離軌道,證實了該算法的可行性。圖6為未采用斜線補償時,無人機循跡斜線時的狀態(tài),可以看出此時無人機大部分機身已經(jīng)偏離軌道。而在圖5所示的整個循跡過程中,即使是循跡幅度比較大的斜線,也有超過一半的機身是在循跡線上的,有力證實了斜線補償?shù)挠行浴?/p>
圖5 采用斜線補償算法仿真圖
圖6 未采用斜線補償算法仿真圖
本文提出的基于圖像分割的無人機位置控制循跡算法,可以通過采集圖像中的極少部分像素來達到循跡的目的,減少其他有誤差的像素造成的干擾。同時采用斜線補償?shù)姆椒ㄔ谝欢ǔ潭壬舷捎谖恢每刂坪妥藨B(tài)控制耦合引起的誤差。最后通過Simulink,完成包括前進、后退、轉彎等情況的循跡仿真,效果良好。參與比賽的學生都表示,無論是否獲獎,大家都通過大賽鍛煉了自己的團隊協(xié)作和溝通能力,充分認識到虛擬仿真技術的強大,掌握了圖形化仿真的方法,初步了解到基于模型設計理念,激發(fā)了學習興趣,找到了學習方向,更堅定了繼續(xù)深入學習實踐的信念。