安佳寧
(中國人民解放軍92419 部隊,遼寧興城125106)
某飛行視景仿真系統為半實物仿真系統,能夠實現特定型號無人機的全數字動態仿真,能在虛擬三維場景中顯示無人機從起飛前測試到空中飛行的全過程,在此過程中,需要同步顯示無人機的各項飛行參數。 通過基于VC++的GUI 編程方案來實現參數的通信、顯示較為成熟,但也存在開發的界面相對簡單,數據不直觀等問題,而通過VC++/GL Studio 的混合編程來開發圖形化界面以提升數據可視化效果是較為可行的技術途徑[1-3]。
GL Studio 是由美國DISTI 公司開發的專業儀表仿真軟件,它運用面向構件的圖形化仿真技術,能夠把繁雜的程序和數據變成直觀的儀表圖像進行顯示,使得開發人員在建模初期就可以實現所見即所得的效果,使仿真的重心從程序的編寫改為對仿真對象的分析和研究[4-6]。
根據顯示需求,組合儀表應顯示的信息包括無人機姿態、航向、速度、高度及發動機油門偏度狀態。 為此在組合儀表中設計了姿態顯示器和水平航向指示器。 速度和高度信息采用刻度條表示,分別用于顯示無人機的實時飛行速度和高度信息,發動機油門偏度狀態采用儀表刻度盤形式表示。 儀表的布局考慮到視覺可達性,將姿態顯示器居中,速度和高度刻度條分別在姿態顯示器左右,下方左邊為水平方位儀,右邊為油門偏度儀表[7]。
儀表的配色:儀表背景為黑色,姿態顯示器中地面背景為棕褐色,天空背景為藍色;其它儀表中刻度為白色,當前正在起作用的方式為綠色,刻度指示符為綠色[8]。
姿態顯示器提供姿態保護告警,當橫滾通道γ ≥30° 時,滾轉角指示符顯示為黃色,當γ ≥45°時,滾轉角指示符顯示為紅色。
發動機油門偏度儀表刻度盤中,油門小于70%為綠色,大于70%小于90%為黃色,大于90%為紅色。
GL Studio 的開發流程如圖1所示。

圖1 GL Studio 開發流程框圖Fig.1 Development flow chart of GL Studio
本項目中,由于無人機沒有駕駛座艙,因此無需按照真實座艙和儀表面板進行仿真,省卻了從照片開始進行處理的環節。 儀表的開發工作直接從創建組件開始,隨后為各組件創建行為屬性,生成C++代碼,在VC 環境下調試編譯運行。
視景仿真系統運行時,飛控計算機以有線通信方式向地面測控站發送下行數據,地面測控站按固定幀周期通過以太網向視景仿真系統主控子程序發送遙測數據,驅動飛機三維模型飛行和儀表顯示。
GL Studio 在用于人機界面開發時,可以各自獨立開發可重用軟件對象(Reusable Software Object,RSO),然后將其轉化成?. gls 組件,最后予以集成實現組合儀表功能。
3.1.1 速度刻度條
在GL Studio 中新建文件,設置窗口屬性,“Create”中通過選擇“Inserts a GlsLinear Scale”、“Line Object”等,生成刻度條及對應刻度數值。
在Code 中,為類屬性添加float 型成員變量_altitude,定義高度顯示函數:
void Altitude(const float& value)
該函數的功能是將輸入的高度參數按比例在刻度條中移動,實現高度的動態顯示。
關鍵代碼為:

glData 為儀表控件通過網絡端口UDP 協議接收到的飛控數據幀。 最后通過“Convert component”將其轉化成組件對象。
3.1.2 高度刻度條
高度刻度條控件的設計與速度刻度條類似。
3.1.3 姿態顯示器
姿態顯示器用于顯示無人機的俯仰和橫滾角。新建文件,設置窗口屬性,“Create”中通過選擇“Inserts a GlsLinear Scale”、“Line Object”等,生成俯仰通道刻度條及對應刻度數值。
3.1.3.1 俯仰通道
在Code 中,為類屬性添加float 型成員變量_pitch,定義俯仰角顯示函數void Pitch(const float&value),實現將輸入的角度按比例在刻度條上顯示的功能。

temp 為通過飛控數據幀計算出的當前俯仰角值,需要判斷正負。
3.1.3.2 滾轉通道
在Code 中,為類屬性添加float 型成員變量_roll,定義滾轉角顯示函數void Roll(const float&value),實現將輸入的角度按比例在儀表刻度上顯示的功能。
部分實現關鍵代碼如下:


temp 為通過飛控數據幀計算出的當前滾轉角值,需要判斷正負。 最后通過“Convert component”將其轉化成組件對象。
3.1.4 水平方位儀
水平方位儀在GL Studio 中新建文件,設置窗口屬性,“Create”中通過選擇“Inserts a Gls Angular Scale”繪制圓盤刻度,再通過“Line Object”、“Text Box”等生成東南西北及刻度數值。
在Code 中,為類屬性添加float 型成員變量_heading,定義航向顯示函數void Heading(const float& value),實現將輸入的角度按比例在儀表刻度上顯示的功能。

glData 為儀表控件通過網絡端口UDP 協議接收到的飛控數據幀。 最后通過“Convert component”將其轉化成組件對象。
3.1.5 油門偏度
油門偏度控件的設計與水平方位儀類似。
3.1.6 組合儀表的集成
在VC++中新建Standalone AppWizard 工程,進入?.gls,將以上單獨設計的控件分別通過“Inserts a Component”加入組合儀表界面,并按設計界面布局,界面中的文字標注采用貼圖實現,最后在Generation 中生成C++代碼。
Sockets 規范是得到廣泛應用的、開放的、支持多種協議的網絡編程接口[9],而網絡通信中常見的是傳輸控制協議TCP 和用戶數據報協議UDP。 前者面向連接、具有數據確認和重傳機制;后者不需要建立連接,實時性較好[10]。 考慮到本項目的實際應用情況,采用了UDP 協議。
組合儀表處于接收端,首先創建套接字,然后將套接字綁定到一個端口,循環接收數據即可。 關鍵實現代碼如下:
在初始化函數Initialize()中加載套接字庫:

在VC 環境下編譯調試,根據飛控幀協議對接收的飛控數據進行解析處理,并驅動對應的儀表顯示,運行顯示如圖2所示。
本文采用VC++/GL Studio 混合編程,實現了某無人機飛行仿真系統的儀表顯示需求,并通過VC++平臺實現了網絡通信和數據驅動儀表功能。實際應用表明:該組合儀表人機界面友好,儀表組件可重構性好,工作性能可靠穩定,能夠適用于其它同類無人機飛行仿真顯示系統和飛行訓練系統。

圖2 飛行組合儀表效果圖Fig.2 Effect picture of flight simulation integrated instrument