李杉格,林靜
(1.中電科(德陽廣漢)特種飛機系統工程有限公司,成都611731;2.中電科航空電子有限公司,成都611731)
自1916年09月12日第一架無線電操縱的無人駕駛飛機在美國首飛已經過去整整一百年,無人機憑借其低成本、高安全性、靈活高效等特有優勢,在軍民領域的應用取得了長足的進步。無人機地面控制站作為無人機系統的重要組成部分,受到了多國的重視:美國海軍研制的通用無人機地面控制站戰術控制系統(TCS)提供了一個開放式體系結構軟件,可實現任務規劃、指揮與控制以及情報數據收發等功能[1];北約頒布的“北約無人機控制站互操作標準化接口”(STANAG 4586)[2],為UAV系統制定了一個功能性結構標準(Lockheed Martin已開發出世界上第一個符合該標準的商用貨架控制站軟件VCS-4586[3])。
本文從無人機地面控制軟件的功能需求分析出發,介紹了一種無人機地面控制軟件的具體實現方法,在VS Express 2013集成開發環境中使用C#語言進行研發。
圖1所示為無人機系統地面站信息流圖,無人機地面控制軟件運行于飛行控制席位中,通過UDP組播與鏈路監控席位、載荷控制席位進行各類遙控/遙測數據的通信。根據系統需求,無人機地面控制軟件需具備以下功能:

圖1 無人機系統地面站信息流圖
(1)航路規劃功能:任務開始前,無人機操作員根據當次任務的具體需求,提前編輯本次任務各航點信息、規劃飛行航路,而后注入航路,指引無人機按照指定航路進入自動模式飛行(滑行、起飛、爬升、巡航、下降、進近、著陸);
(2)手動模式功能:自動飛行中若遇緊急情況,或有手動控制必要,操作員可從自動模式切入手動模式,通過視距/超視距數據鏈發送操控指令手動控制無人機飛行;
(3)狀態監控功能:通過解析無人機發回的遙測數據,以文字、數值、儀表等多種形式提供無人機飛行航跡、設備狀態、飛行參數等信息,供操作員實時監控無人機狀態;
(4)回放功能:無人機飛行時,地面控制軟件可實時記錄地面站發往無人機的遙控指令和無人機發回的遙測信息,供任務完成后進行回放分析。

圖2 無人機地面控制軟件界面設計
圖2所示為無人機地面控制軟件主界面,大量圖表、虛擬儀表的使用讓界面更加簡潔、直觀。無人機地面控制軟件主要分為以下幾個模塊:
(1)電子地圖模塊:顯示導航地圖(可雙擊地圖全屏顯示)、飛機實時位置、航跡、航路、航點、空域、經緯度等信息;
(2)航路規劃模塊:通過界面控件或者直接操作數據庫文件編輯航路、航點、空域信息,進行航路注入等操作;
(3)中央顯控模塊:包括綜合顯控、飛控狀態、發動機狀態三個部分,同時提供遙測源碼顯示、地圖快速定位等輔助功能;
(4)手動控制模塊:提供各類無人機控制按鈕和操縱桿配置監控接口,用以在必要時手動干預無人機飛行。
(5)飛參顯示模塊:顯示飛機姿態指示器、速度/空速/高度等曲線和角速度、加速度、航跡角等數值。
XML(eXtensible Markup Language)作為一種廣泛使用的標記語言,具有良好的數據存儲格式和可擴展性,采用XML格式配置文件來存儲軟件的初始化信息(如界面參數、UDP/串口通信參數、地面站參數等),以下為配置文件片段:
……

圖3 無人機地面控制軟件工作流程
圖3所示為無人機地面控制軟件工作流程。軟件啟動后,首先進行相應數據文件、軟件界面、網絡/串口通信、動態鏈接庫的初始化,讀取數據庫文件將已有航路信息顯示在界面上供操作員編輯,而后,進行航路規劃合法性校驗,若航路規劃滿足空域、飛機性能等限制,無人機則可進入自動模式飛行,并可隨時在手動和自動模式之間切換、進行在線航路重規劃等。此外,軟件還可以執行數據回放分析操作。
電子地圖使用GMap.NET實現,GMap是一個跨平臺開源.NET控件,其代碼結構清晰,每個模塊之間均基于接口進行編程,可運行于WinForm、WPF和Windows Mobile,支持 Google、Bing、ArcGIS等多種在線、離線地圖,功能強大[4]。
使用GMap,需首先實例化GMapControl類,而后即可用GMapProvider接口加載顯示地圖,進行地圖初始化設置、添加圖層和鼠標事件等操作。電子地圖上,將顯示航路(黃色線段)、航點(黃色水滴標記)、航跡(橙黃色曲線)、空域(藍色線段)、飛機圖標(半透明藍色箭頭)等信息,分別在GMapMarker、GMapOverlay層實現,如下圖所示:

圖4 電子地圖及疊加信息顯示
此外,電子地圖上還將疊加顯示無人機與地面站的實時相對位置(距離、方位),相對位置簡便解算思路:將以經緯度、高度(dLng,dLat,dAlt)表示的球坐標轉換為三維直角坐標(Xa,Ya,Za),再利用平面幾何關系進行計算。解算代碼如下:
const double dEarthRadius=6371393;//地球半徑
//三維直角坐標
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))));
傳統的航路規劃文件多采用txt文本格式,開發簡捷但查詢、編輯有所不便。本設計中,采用Microsoft Access數據庫進行航路規劃文件管理,軟件啟動后即自動讀取數據庫文件中的航路、航點、空域信息并在界面上予以顯示。數據庫文件可通過軟件界面或直接打開.mdb數據庫文件進行編輯,其中包括航路、航點、空域三張數據表[5]:
(1)航路表(Fairway):包括 ID、航路編號等信息;
(2)航點表(Waypoint):包括 ID、航點編號、經緯度、高度、航向、速度、備注、所屬航路等信息;
(3)空域表(Airspace):包括 ID、航點編號、經緯度、高度區間、備注等信息。
一個航路包含至多255個航點,確認航路信息無誤后,即可注入航路(幀格式定義見表1),通過無線鏈路將航路信息發至飛控計算機,控制無人機按照規劃航路飛行。

表1 航路注入幀格式定義

表2 航點信息格式定義
為方便靈活定制,飛機姿態儀表、發動機轉速、油量等虛擬儀表采用自定義控件(UserControl)實現。解決方案中,每個虛擬儀表皆為一個單獨項目,生成一個dll動態鏈接庫供主項目調用,如此功能劃分更加清晰明了。同時,還采用輔助緩沖區(this.DoubleBuffered=true;)進行圖面重繪,以避免儀表閃爍、呈現不流暢。
本設計采用多線程實現,為保證安全性,采用異步執行指定委托的方式來實現虛擬儀表界面的更新顯示[6],關鍵代碼段如下:
Action
=delegate(float fAngleRoll,float fAnglePitch,float fAngleHead,float fAngleTrack)
{
ctrl.UpdateAI(fAngleRoll,fAnglePitch,fAngleHead,fAngleTrack);
};
ctrl.BeginInvoke(actionDelegate,fRoll,fPitch,fHead,fTrack);
本文介紹了一種基于GMap的無人機地面控制軟件的設計和實現,其人機界面設計參考民航標準簡潔友好[7],經多次試飛測試,該軟件可有效地對無人機進行狀態監視、航路規劃和實時操控,各項功能得到了充分驗證。
[1]馬聰穎,高瑞周,朱玉祜.無人機地面控制站通用化軟件架構[J].航空計算技術,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]鄭昌文,嚴平,丁明躍,蘇康.飛行器航跡規劃研究現狀與趨勢[J].宇航學報,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].