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