羅瓊
(中航工業直升機設計研究所無人機部 江西省景德鎮市 333001)
為了實時監控無人直升機任務過程中的飛行狀態,地面站飛行監控軟件需要具備實時顯示下傳的無人直升機飛行參數、飛行模態和機載設備工作參數等信息,并且發送無人直升機飛行控制指令的功能。對于無人直升機來說,其任務過程中需要實時監控的狀態參數數量龐大,運用圖形化仿真技術,能夠把復雜的數據變成直觀的儀表圖像顯示。GL Studio[1]作為一款專業的儀表仿真軟件[2]~[4],且以C++/OpenGL為底層,具有豐富的外部程序接口,能夠創建實現進程間通信的人機交互界面,具有建模難度低、開發周期短等特點。本文利用QT搭建無人直升機地面站[5][6]飛行監控軟件運行框架,加載GL Studio編制的虛擬儀表模塊,且基于UDP通信原理,實現軟件對外通信[7]。
無人直升機飛行監控軟件采用QT Creator和GL Studio進行設計與開發。軟件采用模塊化設計,具有良好的復用性和擴展性。軟件架構如圖1所示。軟件包含界面顯示、數據解析、多線程網絡通信和XML協議讀取等四個軟件模塊。
其中界面顯示中的主頁面虛擬儀表部分主要由GL Studio進行開發,其余參數顯示和通信設置、數據存儲、數據回放、協議設置等子頁面由QT Creator開發。
軟件中的虛擬儀表模塊主要用于顯示無人直升機飛行姿態、發動機狀態和飛行控制系統狀態等需使用圖像形式顯示的參數,由GL Studio開發,以動態鏈接庫形式被QT開發的主程序調用。

圖1:基于GL Studio的飛行監控軟件架構圖

圖2:基于GL Studio的監控界面開發步驟流程圖

圖3:監控界面功能控件設計圖
GL Studio是由美國DISTI公司開發,目前世界上最先進的面向對象的界面開發工具之一,用于創建實時的、三維的、照片級的交互圖形界面,有效率高及使用簡便的特點。其使用的是面向對象的方法,能自動生成高質量的代碼,具有OpenGL的渲染技術。GL Studio在Windows下的編譯環境為Microsoft Visual Studio,在其安裝過程中將自動檢測Visual Studio的版本并匹配相應的工程創建向導。因此本文采用GL Studio在Visual Studio 2010環境下進行開發,具體分為以下幾個步驟,流程圖如圖2所示。
(1)利用Visual Studio 2010創建GL Studio工程,在工程目錄下會存在一個GL Studio (*.gls)文件,可以在這個文件中進行界面編制;
(2)根據需求設計界面整體布局;
(3)針對涉及的顯示參數制作需要使用的貼圖紋理及功能元件;
(4)將當前制作的圖形及功能元件轉換成C++源代碼,并添加通信代碼;
(5)測試與集成。
利用Visual Studio 2010開發工具創建一個GL Studio工程。在繪制界面之前需要對整個.gls文件的一些屬性進行設置,如定義界面窗口的名稱、生成代碼的類名及代碼文件的路徑等。
根據需求,操作人員在地面需要監測無人直升機的飛行姿態、發動機狀態、無人直升機的位置信息和飛行控制系統運行狀態等。飛行姿態所涉及的參數有俯仰角、滾轉角、航向角、高度、速度等,這些參數可用虛擬地平儀顯示。發動機狀態相關的參數有發動機轉速、旋翼轉速、發動機開車停車狀態、壓力、溫度等,這些參數可以用虛擬發動機儀表、溫度計和壓力計顯示。無人直升機位置信息可以使用簡易地圖或者表示與地面站相對位置的圖形示意上顯示。飛行控制系統運行狀態主要為一些參數狀態,可以使用狀態切換控件和數值顯示控件表示。
因此將監控界面劃分為飛行姿態區域、發動機狀態區域、位置信息區域和飛控系統參數區域四個部分。
首先制作功能元件的貼圖紋理,添加貼圖紋理是提高功能元件直觀真實的有效方法。貼圖紋理有兩種制作方法,一種是利用Photoshop等常用的圖形編輯軟件制作,還有一種是利用GL Studio自帶的圖形渲染技術進行繪制。由于本文監控界面中涉及的顯示參數比較簡單常見,因此采用第二種方法繪制貼圖紋理。其次命名對象,即對貼有紋理或需要接收數據等重要圖元命以恰當的名字,以便更方便的管理、分組、查找和編輯。最后添加相應的功能,為實現虛擬儀表的功能,即能夠將收到的數據實時地、動態地在界面上顯示和響應,如發動機指針的旋轉、參數的顯示、高度表的移動、壓力計的伸縮等功能,則需要在代碼編輯區中編寫實現各個部分響應的代碼。利用GL Studio提供的諸如實現圖元移動、旋轉、比例縮放、閃爍、切換及文本輸出等API函數,可有效實現以上功能。本文監控界面中制作的主要功能元件如下,效果圖如圖3所示。
2.2.1 地平儀
地平儀主要顯示無人直升機的俯仰角、滾轉角和航向等參數。利用函數DynamicTranslate (float x,float y,float z,bool relative=false)控制俯仰角刻度的移動;函數DynamicRotate (float x,float y,float z) 可以控制地平儀圖元以及航向角圖元的旋轉。
2.2.2 高度表和速度表
高度表和速度表的原理相同,都是通過使用函數DynamicTranslate (float x,float y,float z,bool relative=false)控制刻度的上下移動,并在移動超出刻度表長度范圍時利用String()函數改變刻度表上的數值,以此顯示更大范圍的數據。
2.2.3 發動機儀表盤
發動機儀表盤顯示的是發動機的轉速,通過使用函數DynamicRotate (float x,float y,float z)來控制發動機儀表盤指針的旋轉。
2.2.4 壓力計
壓力計的原理同發動機儀表盤,壓力計下的數值顯示是通過String()函數來實現的。
2.2.5 溫度計
通過使用函數DynamicScale(float x,float y,float z)來控制溫度計圖元的按比例伸縮,并通過函數DynamicTranslate (float x,float y,float z,bool relative=false)移動伸縮后的圖元到正確位置。溫度計上數值的顯示原理同壓力計。
GL Studio的代碼生成器能夠將當前制作的界面轉換成高質量的C++源代碼。將生成的源代碼添加到GL Studio工程中,并且編譯執行。若需要修改可重復功能元件設計、添加和生成代碼以及編譯執行的步驟。最終編譯執行后得到一個以.dll為后綴的動態鏈接庫文件。如圖4所示。

圖4:監控界面執行圖
在包括虛擬儀表模塊在內的軟件模塊設計完成后,使用QT Creator進行軟件集成框架開發,完成軟件數據交互和硬件適配。根據前期的需求和接口設計,本飛行監控軟件采用UDP組播的形式進行外部數據交互。硬件適配則是根據軟件運行的硬件環境,選擇對應的運行支撐庫進行添加。
飛行監控軟件應用于無人直升機地面站人機交互席位上。在軟件首次使用前,根據實際的使用情況設置好通信參數和協議版本。在經過以上配置后,軟件在運行過程中將自動開啟對應的數據接收線程,以及讀取對應的協議文件,以適應當前型號的使用要求。在軟件實際使用過程中,接收站內轉發的無人直升機下傳數據,并將其解析顯示在軟件界面上,如圖5所示。經模擬驗證,本軟件運行穩定,能夠對無人直升機下行遙測數據進行實時解析和顯示。

圖5:飛行監控軟件-監測部分
本文詳細介紹了基于GL Studio的無人直升機地面站飛行監控軟件的編制過程。用本文方法編制的監控軟件,經模擬無人直升機下傳數據驗證,該類監控軟件能夠實時監控并動態顯示無人直升機的各種參數,具有直觀、方便使用等特點,為無人直升機的飛行提供了一定的幫助。今后可以從提高監控界面的開發效率及其通用性的角度,將功能元件模塊化,達到進行簡單的組裝就可編譯集成的效果。