李杉格,林靜
(1.中電科(德陽(yáng)廣漢)特種飛機(jī)系統(tǒng)工程有限公司,成都611731;2.中電科航空電子有限公司,成都611731)
自1916年09月12日第一架無(wú)線電操縱的無(wú)人駕駛飛機(jī)在美國(guó)首飛已經(jīng)過去整整一百年,無(wú)人機(jī)憑借其低成本、高安全性、靈活高效等特有優(yōu)勢(shì),在軍民領(lǐng)域的應(yīng)用取得了長(zhǎng)足的進(jìn)步。無(wú)人機(jī)地面控制站作為無(wú)人機(jī)系統(tǒng)的重要組成部分,受到了多國(guó)的重視:美國(guó)海軍研制的通用無(wú)人機(jī)地面控制站戰(zhàn)術(shù)控制系統(tǒng)(TCS)提供了一個(gè)開放式體系結(jié)構(gòu)軟件,可實(shí)現(xiàn)任務(wù)規(guī)劃、指揮與控制以及情報(bào)數(shù)據(jù)收發(fā)等功能[1];北約頒布的“北約無(wú)人機(jī)控制站互操作標(biāo)準(zhǔn)化接口”(STANAG 4586)[2],為UAV系統(tǒng)制定了一個(gè)功能性結(jié)構(gòu)標(biāo)準(zhǔn)(Lockheed Martin已開發(fā)出世界上第一個(gè)符合該標(biāo)準(zhǔn)的商用貨架控制站軟件VCS-4586[3])。
本文從無(wú)人機(jī)地面控制軟件的功能需求分析出發(fā),介紹了一種無(wú)人機(jī)地面控制軟件的具體實(shí)現(xiàn)方法,在VS Express 2013集成開發(fā)環(huán)境中使用C#語(yǔ)言進(jìn)行研發(fā)。
圖1所示為無(wú)人機(jī)系統(tǒng)地面站信息流圖,無(wú)人機(jī)地面控制軟件運(yùn)行于飛行控制席位中,通過UDP組播與鏈路監(jiān)控席位、載荷控制席位進(jìn)行各類遙控/遙測(cè)數(shù)據(jù)的通信。根據(jù)系統(tǒng)需求,無(wú)人機(jī)地面控制軟件需具備以下功能:
圖1 無(wú)人機(jī)系統(tǒng)地面站信息流圖
(1)航路規(guī)劃功能:任務(wù)開始前,無(wú)人機(jī)操作員根據(jù)當(dāng)次任務(wù)的具體需求,提前編輯本次任務(wù)各航點(diǎn)信息、規(guī)劃飛行航路,而后注入航路,指引無(wú)人機(jī)按照指定航路進(jìn)入自動(dòng)模式飛行(滑行、起飛、爬升、巡航、下降、進(jìn)近、著陸);
(2)手動(dòng)模式功能:自動(dòng)飛行中若遇緊急情況,或有手動(dòng)控制必要,操作員可從自動(dòng)模式切入手動(dòng)模式,通過視距/超視距數(shù)據(jù)鏈發(fā)送操控指令手動(dòng)控制無(wú)人機(jī)飛行;
(3)狀態(tài)監(jiān)控功能:通過解析無(wú)人機(jī)發(fā)回的遙測(cè)數(shù)據(jù),以文字、數(shù)值、儀表等多種形式提供無(wú)人機(jī)飛行航跡、設(shè)備狀態(tài)、飛行參數(shù)等信息,供操作員實(shí)時(shí)監(jiān)控?zé)o人機(jī)狀態(tài);
(4)回放功能:無(wú)人機(jī)飛行時(shí),地面控制軟件可實(shí)時(shí)記錄地面站發(fā)往無(wú)人機(jī)的遙控指令和無(wú)人機(jī)發(fā)回的遙測(cè)信息,供任務(wù)完成后進(jìn)行回放分析。
圖2 無(wú)人機(jī)地面控制軟件界面設(shè)計(jì)
圖2所示為無(wú)人機(jī)地面控制軟件主界面,大量圖表、虛擬儀表的使用讓界面更加簡(jiǎn)潔、直觀。無(wú)人機(jī)地面控制軟件主要分為以下幾個(gè)模塊:
(1)電子地圖模塊:顯示導(dǎo)航地圖(可雙擊地圖全屏顯示)、飛機(jī)實(shí)時(shí)位置、航跡、航路、航點(diǎn)、空域、經(jīng)緯度等信息;
(2)航路規(guī)劃模塊:通過界面控件或者直接操作數(shù)據(jù)庫(kù)文件編輯航路、航點(diǎn)、空域信息,進(jìn)行航路注入等操作;
(3)中央顯控模塊:包括綜合顯控、飛控狀態(tài)、發(fā)動(dòng)機(jī)狀態(tài)三個(gè)部分,同時(shí)提供遙測(cè)源碼顯示、地圖快速定位等輔助功能;
(4)手動(dòng)控制模塊:提供各類無(wú)人機(jī)控制按鈕和操縱桿配置監(jiān)控接口,用以在必要時(shí)手動(dòng)干預(yù)無(wú)人機(jī)飛行。
(5)飛參顯示模塊:顯示飛機(jī)姿態(tài)指示器、速度/空速/高度等曲線和角速度、加速度、航跡角等數(shù)值。
XML(eXtensible Markup Language)作為一種廣泛使用的標(biāo)記語(yǔ)言,具有良好的數(shù)據(jù)存儲(chǔ)格式和可擴(kuò)展性,采用XML格式配置文件來(lái)存儲(chǔ)軟件的初始化信息(如界面參數(shù)、UDP/串口通信參數(shù)、地面站參數(shù)等),以下為配置文件片段:
……
圖3 無(wú)人機(jī)地面控制軟件工作流程
圖3所示為無(wú)人機(jī)地面控制軟件工作流程。軟件啟動(dòng)后,首先進(jìn)行相應(yīng)數(shù)據(jù)文件、軟件界面、網(wǎng)絡(luò)/串口通信、動(dòng)態(tài)鏈接庫(kù)的初始化,讀取數(shù)據(jù)庫(kù)文件將已有航路信息顯示在界面上供操作員編輯,而后,進(jìn)行航路規(guī)劃合法性校驗(yàn),若航路規(guī)劃滿足空域、飛機(jī)性能等限制,無(wú)人機(jī)則可進(jìn)入自動(dòng)模式飛行,并可隨時(shí)在手動(dòng)和自動(dòng)模式之間切換、進(jìn)行在線航路重規(guī)劃等。此外,軟件還可以執(zhí)行數(shù)據(jù)回放分析操作。
電子地圖使用GMap.NET實(shí)現(xiàn),GMap是一個(gè)跨平臺(tái)開源.NET控件,其代碼結(jié)構(gòu)清晰,每個(gè)模塊之間均基于接口進(jìn)行編程,可運(yùn)行于WinForm、WPF和Windows Mobile,支持 Google、Bing、ArcGIS等多種在線、離線地圖,功能強(qiáng)大[4]。
使用GMap,需首先實(shí)例化GMapControl類,而后即可用GMapProvider接口加載顯示地圖,進(jìn)行地圖初始化設(shè)置、添加圖層和鼠標(biāo)事件等操作。電子地圖上,將顯示航路(黃色線段)、航點(diǎn)(黃色水滴標(biāo)記)、航跡(橙黃色曲線)、空域(藍(lán)色線段)、飛機(jī)圖標(biāo)(半透明藍(lán)色箭頭)等信息,分別在GMapMarker、GMapOverlay層實(shí)現(xiàn),如下圖所示:
圖4 電子地圖及疊加信息顯示
此外,電子地圖上還將疊加顯示無(wú)人機(jī)與地面站的實(shí)時(shí)相對(duì)位置(距離、方位),相對(duì)位置簡(jiǎn)便解算思路:將以經(jīng)緯度、高度(dLng,dLat,dAlt)表示的球坐標(biāo)轉(zhuǎn)換為三維直角坐標(biāo)(Xa,Ya,Za),再利用平面幾何關(guān)系進(jìn)行計(jì)算。解算代碼如下:
const double dEarthRadius=6371393;//地球半徑
//三維直角坐標(biāo)
Xa=(dEarthRadius+dAAlt)*Math.Cos(D2R(dALat))*Math.Cos(D2R(dALng));
Ya=(dEarthRadius+dAAlt)*Math.Cos(D2R(dALat))*Math.Sin(D2R(dALng));
Za=(dEarthRadius+dAAlt)*Math.Sin(D2R(dALat));
Xb=(dEarthRadius+dBAlt)*Math.Cos(D2R(dBLat))*Math.Cos(D2R(dBLng));
Yb=(dEarthRadius+dBAlt)*Math.Cos(D2R(dBLat))*
Math.Sin(D2R(dBLng));
Zb=(dEarthRadius+dBAlt)*Math.Sin(D2R(dBLat));
//解算距離、方位
dDistance=Math.Sqrt(Math.Pow(Xa-Xb,2) +Math.Pow(Ya-Yb,2)+Math.Pow(Za-Zb,2));
dDirection=R2D(Math.Atan((D2R(dBLng)-D2R(dALng))*Math.Cos(D2R(dBLat))/(D2R(dBLat)-D2R(dALat))));
傳統(tǒng)的航路規(guī)劃文件多采用txt文本格式,開發(fā)簡(jiǎn)捷但查詢、編輯有所不便。本設(shè)計(jì)中,采用Microsoft Access數(shù)據(jù)庫(kù)進(jìn)行航路規(guī)劃文件管理,軟件啟動(dòng)后即自動(dòng)讀取數(shù)據(jù)庫(kù)文件中的航路、航點(diǎn)、空域信息并在界面上予以顯示。數(shù)據(jù)庫(kù)文件可通過軟件界面或直接打開.mdb數(shù)據(jù)庫(kù)文件進(jìn)行編輯,其中包括航路、航點(diǎn)、空域三張數(shù)據(jù)表[5]:
(1)航路表(Fairway):包括 ID、航路編號(hào)等信息;
(2)航點(diǎn)表(Waypoint):包括 ID、航點(diǎn)編號(hào)、經(jīng)緯度、高度、航向、速度、備注、所屬航路等信息;
(3)空域表(Airspace):包括 ID、航點(diǎn)編號(hào)、經(jīng)緯度、高度區(qū)間、備注等信息。
一個(gè)航路包含至多255個(gè)航點(diǎn),確認(rèn)航路信息無(wú)誤后,即可注入航路(幀格式定義見表1),通過無(wú)線鏈路將航路信息發(fā)至飛控計(jì)算機(jī),控制無(wú)人機(jī)按照規(guī)劃航路飛行。
表1 航路注入幀格式定義
表2 航點(diǎn)信息格式定義
為方便靈活定制,飛機(jī)姿態(tài)儀表、發(fā)動(dòng)機(jī)轉(zhuǎn)速、油量等虛擬儀表采用自定義控件(UserControl)實(shí)現(xiàn)。解決方案中,每個(gè)虛擬儀表皆為一個(gè)單獨(dú)項(xiàng)目,生成一個(gè)dll動(dòng)態(tài)鏈接庫(kù)供主項(xiàng)目調(diào)用,如此功能劃分更加清晰明了。同時(shí),還采用輔助緩沖區(qū)(this.DoubleBuffered=true;)進(jìn)行圖面重繪,以避免儀表閃爍、呈現(xiàn)不流暢。
本設(shè)計(jì)采用多線程實(shí)現(xiàn),為保證安全性,采用異步執(zhí)行指定委托的方式來(lái)實(shí)現(xiàn)虛擬儀表界面的更新顯示[6],關(guān)鍵代碼段如下:
Action
=delegate(float fAngleRoll,float fAnglePitch,float fAngleHead,float fAngleTrack)
{
ctrl.UpdateAI(fAngleRoll,fAnglePitch,fAngleHead,fAngleTrack);
};
ctrl.BeginInvoke(actionDelegate,fRoll,fPitch,fHead,fTrack);
本文介紹了一種基于GMap的無(wú)人機(jī)地面控制軟件的設(shè)計(jì)和實(shí)現(xiàn),其人機(jī)界面設(shè)計(jì)參考民航標(biāo)準(zhǔn)簡(jiǎn)潔友好[7],經(jīng)多次試飛測(cè)試,該軟件可有效地對(duì)無(wú)人機(jī)進(jìn)行狀態(tài)監(jiān)視、航路規(guī)劃和實(shí)時(shí)操控,各項(xiàng)功能得到了充分驗(yàn)證。
[1]馬聰穎,高瑞周,朱玉祜.無(wú)人機(jī)地面控制站通用化軟件架構(gòu)[J].航空計(jì)算技術(shù),2013,43(03):112-113+118.
[2]Stanag 4586:Standard Interfaces of UAV Control System(UCS)for Nato UAV Interoperability[S/OL].
[3]VCS-4586 Capabilities Guide-Ground Control Operator Software for Unmanned Vehicle Systems[M/OL].
[4]GMap.NET Tutorial[EB/OL].http://greatmaps.codeplex.com/documentation,2015.
[5]鄭昌文,嚴(yán)平,丁明躍,蘇康.飛行器航跡規(guī)劃研究現(xiàn)狀與趨勢(shì)[J].宇航學(xué)報(bào),2007,(06):1441-1446.
[6]Control.BeginInvoke Method(Delegate)[EB/OL].https://msdn.microsoft.com/en-us/library,2017.
[7]AC No:23.1311-1C,Installation of Electronic Display in Part 23 Airplanes[S].