強明輝 把翠芳
(1.蘭州理工大學電氣工程與信息工程學院 蘭州 730050)(2.甘肅省工業(yè)過程先進控制重點實驗室 蘭州 730050)(3.蘭州理工大學電氣與控制工程國家級實驗教學示范中心 蘭州 730050)
無人機從軍用領(lǐng)域逐漸走向民用以及商用領(lǐng)域[1~2],便捷人們生活的同時,帶來的社會安全問題[3]也逐漸暴露,尤其是闖入禁飛區(qū)域,引發(fā)“黑飛”、“亂飛”現(xiàn)象,威脅人員或者破壞公共設(shè)備[4]。地理圍欄[5]技術(shù)是一種基于位置服務(wù)[5~6]的新應用,早在十多年前就被提出了,是人機交互服務(wù)類型中的一種,目前的應用場景多是應用程序[7]。地理圍欄技術(shù)在無人機中的應用是近幾年才被提出的,主要為了防止無人機進入禁飛區(qū)域,引發(fā)安全事故。國內(nèi)外對該技術(shù)在無人機的應用還在研究階段。2015年10月13日美國媒體KOED報道稱,美國國家航空航天局(NASA)的某研究中心[8]目前正在研究一種被稱為“地理圍欄”的技術(shù),通過該技術(shù)為無人機劃分靜態(tài)地理圍欄,設(shè)置圍欄事件。NASA無人機管理首席調(diào)查員KoDardekar還表示,設(shè)置兩類地理圍欄事件:禁止其他無人機飛入和禁止自家無人機飛出,同時依靠無人機飛行器中的傳感器進行識別并避障。在國內(nèi),作為全球民用無人機行業(yè)領(lǐng)軍企業(yè)的深圳大疆創(chuàng)新科技公司,目前是全球唯一一家研究地理圍欄技術(shù)的民用無人機制造商。
地理圍欄實質(zhì)是真實世界地理區(qū)域上的虛擬邊界,可以在定位源進入或離開時觸發(fā)圍欄事件。地理圍欄在無人機系統(tǒng)的主要是安全性方面的應用,可以在地面站引入地理圍欄,無人機無論在手動操控還是自動模式下,當進入禁飛域時,地理圍欄算法通過定義的圍欄事件,觸發(fā)聲音警報,使得操作人員能夠操控無人機避讓禁飛區(qū)域[9];也可以應用于無人機飛行控制系統(tǒng),當無人機在自動模式下飛行時,在地理圍欄算法的幫助下,無人機將不會進入禁飛區(qū)域。
本文將地理圍欄技術(shù)作為解決無人機“黑飛”、“亂飛”安全事故的一種“新”技術(shù)引入,主要研究在無人機地面站系統(tǒng)中的地理圍欄,在Visual Studio 2010.NET[10]的開發(fā)環(huán)境下,以C#語言為主,研究地理圍欄算法,劃分的地理圍欄可以是多邊形、圓形等,用戶可以選擇禁止無人機進入的范圍,利用地理圍欄算法畫出一個多邊形或者圓形禁飛區(qū)域,通過相應的地理圍欄算法解算并判斷無人機是否在禁飛區(qū)域內(nèi),實現(xiàn)如果無人機進入禁飛區(qū)域,就會顯示帶有信號框的報警信號或語音提示。
無人機是無人機系統(tǒng)的控制對象,包括了飛行器本體、飛行控制器、負載設(shè)備(包括電池、圖像傳輸[11]等)幾個部分。地面站系統(tǒng)是整個無人機系統(tǒng)的重要部分,可以稱之為無人機系統(tǒng)的大腦,協(xié)調(diào)整個系統(tǒng)的任務(wù)規(guī)劃和導航控制。本文所涉及的無人機系統(tǒng)總體結(jié)構(gòu)如圖1所示,地面站系統(tǒng)由便攜式PC機、地面站監(jiān)控軟件、圖像接收設(shè)備、地面數(shù)據(jù)終端、通信設(shè)備等幾個部分組成。
圖1 無人機系統(tǒng)總體結(jié)構(gòu)
地面站系統(tǒng)地面站監(jiān)控系統(tǒng)對導航位置的精度要求較高,本文利用Google Earth客戶端使得無人機監(jiān)控系統(tǒng)能夠加載更加精準地電子地圖,模擬無人機的飛行仿真,實時顯示觀察無人機的飛行狀態(tài)信息。但是目前無人機地面站的安全性能不高,尤其缺乏針對無人機“黑飛”、“亂飛”,引發(fā)事故的安全應用。在地面站中引入地理圍欄技術(shù),提高了無人機系統(tǒng)的安全水平,幫助無人機預先劃分禁飛區(qū)域,構(gòu)建基于地理圍欄的避讓禁飛區(qū)域的地面站,實現(xiàn)無人機的安全應用。
圖2 地面站軟件設(shè)計流程
基于Google Earth的無人機地面站系統(tǒng)[12]實現(xiàn)地理圍欄功能,在Google地圖中劃分禁飛區(qū)域,然后由無人機機載GPS定位模塊實時向地面站傳送無人機位置信息,利用地理圍欄算法解算無人機位置與預劃分禁飛區(qū)域的位置關(guān)系,從而判斷無人機是否進入禁飛區(qū)域,若未進入且沒有進入禁飛區(qū)域的趨勢,則無人機正常飛行;若進入禁飛區(qū)域,則通知地面操作人員,向飛行控制系統(tǒng)傳達返航或避讓指令,進而實現(xiàn)無人機對禁飛區(qū)域的避讓。還可以根據(jù)不同的需求加載不同的三維模型[12],對無人機進行飛行模擬仿真。具體的軟件設(shè)計流程如圖2所示。
本文主要介紹兩種典型常用的地理圍欄算法:多邊形地理圍欄和圓形的地理圍欄。基于Visual Studio 2010.NET開發(fā)地理圍欄算法,利用基于Google Earth的地面站實現(xiàn)地理圍欄功能,還包括像保存XML[13]格式的地圖數(shù)據(jù),加載已保存的數(shù)據(jù),選擇地圖類型等功能,為無人機的飛行和地理圍欄模擬提供基礎(chǔ)。
圓形地理圍欄的示意圖如圖3。假設(shè)圓形地理圍欄[15]圓心位置的為(x0,y0),地理圍欄半徑為r,無人機由機載GPS設(shè)備定位到的位置信息經(jīng)緯度(X,Y),無人機與地理圍欄中心點距離為d,那么存在如下判斷規(guī)則算法:
判斷規(guī)則1:d-r≤0時,此時無人機已到達指定的地理圍欄。
判斷規(guī)則2:d-r>0時,無人機在地理圍欄外部,同時可由與前一狀態(tài)的差值判斷此時的無人機是不斷接近或是遠離地理圍欄,若不斷接近,說明有進入地理圍欄的可能,需進行頻繁地判斷;若不斷遠離,正常飛行。
通過無人機飛行器系統(tǒng)的定位模塊可獲知無人機信息(X,Y),同時指定的圍欄中心點的經(jīng)緯度信息已知,求出無人機與圍欄中心點的距離d。進入圓形地理圍欄的算法為:d-r≤0,即設(shè)置的地理圍欄觸發(fā)事件。為了計算地理空間距離d,使用了“Haversine公式[16]”。
圖3 圓形方法示意圖
其中,R為地球半徑,可取平均值6371Km。
由式(1)、(2)可求出d,如下:
由于實際應用中,地理圍欄側(cè)重于對禁飛區(qū)域的實際形狀邊界的界定,因此地理圍欄基本都是不規(guī)則的復雜多邊形。多邊形地理圍欄算法的關(guān)鍵是找出有多少個節(jié)點在多邊形[17]地理圍欄內(nèi),即奇偶定理。
多邊形地理圍欄如圖4所示,由無人機定位位置A向左作射線,將其作為水平閾值線,多邊形每條邊與水平閾值線相交的點表示為一個節(jié)點。那么地理圍欄的算法判斷規(guī)則如下:
判斷規(guī)則1:在無人機位置的左側(cè)存在奇數(shù)個節(jié)點,那么無人機在地理圍欄內(nèi)部。
判斷規(guī)則2:在無人機位置的左側(cè)存在偶數(shù)個節(jié)點,那么無人機在地理圍欄外部。
圖4 射線與多邊形交點的幾種可能情況
但也有特殊情況:例如水平閾值線剛好經(jīng)過多邊形圍欄邊界的一個頂點,如圖4中所示,AB會被誤認為和地理圍欄兩條邊界都有交點,而AC與某一條邊界共線被誤認為與地理圍欄邊界有無窮多的交點。這些情況均會導致對于地理圍欄事件的錯誤判斷。
針對這些特殊情況進行判斷的規(guī)則如下:其中假設(shè)當前處理的邊是A1A2。
判斷規(guī)則1:如果點A為無人機的位置,在多邊形圍欄邊A1A2上,則直接判定無人機在地理圍欄內(nèi)部。
判斷規(guī)則2:如果水平閾值線正好穿過A1或者A1A2,那么,若無人機坐標的縱坐標與A1,A2中較小的縱坐標相同,且在此次判斷過程中,忽略這個交點。
判斷規(guī)則3:如果水平閾值線與多邊形圍欄邊A1A2平行,則忽略對其與該邊交點的判斷。
用戶可以在圓形地理圍欄功能選項中輸入任意半徑,在興趣點上繪制一個圓圈。這個圓圈將作為禁飛區(qū)域,如果無人機跨越禁飛區(qū)域邊界,則會出現(xiàn)語音提示以及消息框。與多邊形地理圍欄相比,圓形地理圍欄更容易,用圓形地理圍欄算法規(guī)則的C#代碼實現(xiàn)地理圍欄功能,實現(xiàn)效果圖如圖5所示。
圖5 圓形地理圍欄效果圖
實現(xiàn)圓形地理圍欄功能的C#代碼如下:
public double Distance(Point y0x0pos1,
Point YX pos2)
{
int Radius=6371;
//地球的半徑
double dY=this.toRad(pos2.Y-pos1.y0);
double dX=this.toRad(pos2.X-pos1.x0);
double inn_brckt=Math.Sin(dY/2)*Math.Sin(dY/2)+Math.Cos(this.toRad(pos1.x0))*Math.Cos(this.toRad(pos2.X))*Math.Sin(dX/2)*Math.Sin(dX/2);
double f=2*Math.Asin(Math.Min(1,Math.Sqrt(inn_brckt)));
double d=Radius*f;
return d;
}
private double toRad(double deg_val)
{
return(Math.PI/180)*deg_val;
}
if(r_circle.Checked==true & & r_poly.Checked ! =true)
{
Pointy0x0LL_circle=gMapfence1.Position;double d_re?sult=Distance(circle_centre,LL_circle);
if(d_result>(radius/1000))
{
Warningsound.Play() ; MessageBox.Show(“UAV Crossed boundary”,“Error”,MessageBoxButtons.OK);
}
}
在基于Google Earth的地面站的Google地圖上,在禁飛區(qū)域邊界上選擇關(guān)鍵頂點,連接繪制一個多邊形邊界,如圖6所示,將某機場沿其邊界劃分為禁飛區(qū)。
地理圍欄算法利用所選點來定義圍欄邊界,進而判斷無人機的位置是否在邊界內(nèi)。多邊形是任意形狀的,對于復雜的多邊形,很難判斷無人機是在邊界內(nèi)還是在邊界外[18],具體實現(xiàn)利用多邊形地理圍欄算法的判斷規(guī)則。確定無人機的位置是多邊形地理圍欄內(nèi)部或外部的C#代碼如下:
Public bool FindUAVPs(double X,double Y)
{
int no_of_pySides=this.Count()-1;
int j=no_of_pySides-1;
bool UAVStatus=false;
for(int i=0;i<no_of_pySides;i++)
{
if(boundryPt[i].Y<Y & & boundryPt[j].Y>=Y
||boundryPt[j].Y<Y & & boundryPt[i].Y>=Y)
{
if(boundryPt[i].X+(Y-bndryPt[i].Y)/( bndryPt[j].Y-bndryPt[i].Y)*(bndryPt[j].X-bndryPt[i].X)<X)
{
UAVStatus=! UAVStatus;
}
}
j=i;
}
return UAVStatus;
}
上面代碼的運行過程中,首先會檢查(bound?ryPt[i],boundryPt[j])范圍內(nèi)的無人機位置的Y坐標,如果檢查到,則繼續(xù)檢查無人機位置的X坐標是否在水平閾值線以下,從i點連接到j(luò)點,或者不連接。如果在這兩個條件在奇數(shù)次都為真,則“FindUAVPs()”函數(shù)將返回true,那么無人機就在地理圍欄里面;否則返回false,否則無人機就在地理圍欄外面。
圖6 多邊形地理圍欄效果圖
基于Google Earth的地面站系統(tǒng)[3]中地理圍欄功能的實現(xiàn),在Visual Studio 2010.NET的開發(fā)環(huán)境下,以C#語言為主,利用地理圍欄算法在地面站系統(tǒng)的Google電子地圖上用多邊形或圓形地理圍欄算法預先繪制虛擬邊界,為無人機劃分禁飛區(qū)域。無人機在飛行過程中,飛行控制系統(tǒng)通過遙測鏈路向地面站系統(tǒng)的地理圍欄模塊發(fā)送位置信息,通過地理圍欄算法解算檢查無人機是否進入禁飛區(qū)域,如果無人機越過禁飛區(qū)域邊界,則在地面站收到音頻和彈出消息框來通知操作人員。在具體實現(xiàn)應用方面,圓形地理圍欄比多邊形地理圍欄容易實現(xiàn),但是多邊形地理圍欄的精確度更高,后續(xù)工作中,進一步研究實現(xiàn)針對多邊形地理圍欄的實時地大范圍索引技術(shù),使基于地理圍欄的地面站更具有實際工程價值,對無人機的安全應用具有深遠意義。