安佳寧
(中國人民解放軍92419 部隊,遼寧興城125106)
某飛行視景仿真系統(tǒng)為半實物仿真系統(tǒng),能夠?qū)崿F(xiàn)特定型號無人機的全數(shù)字動態(tài)仿真,能在虛擬三維場景中顯示無人機從起飛前測試到空中飛行的全過程,在此過程中,需要同步顯示無人機的各項飛行參數(shù)。 通過基于VC++的GUI 編程方案來實現(xiàn)參數(shù)的通信、顯示較為成熟,但也存在開發(fā)的界面相對簡單,數(shù)據(jù)不直觀等問題,而通過VC++/GL Studio 的混合編程來開發(fā)圖形化界面以提升數(shù)據(jù)可視化效果是較為可行的技術(shù)途徑[1-3]。
GL Studio 是由美國DISTI 公司開發(fā)的專業(yè)儀表仿真軟件,它運用面向構(gòu)件的圖形化仿真技術(shù),能夠把繁雜的程序和數(shù)據(jù)變成直觀的儀表圖像進行顯示,使得開發(fā)人員在建模初期就可以實現(xiàn)所見即所得的效果,使仿真的重心從程序的編寫改為對仿真對象的分析和研究[4-6]。
根據(jù)顯示需求,組合儀表應顯示的信息包括無人機姿態(tài)、航向、速度、高度及發(fā)動機油門偏度狀態(tài)。 為此在組合儀表中設計了姿態(tài)顯示器和水平航向指示器。 速度和高度信息采用刻度條表示,分別用于顯示無人機的實時飛行速度和高度信息,發(fā)動機油門偏度狀態(tài)采用儀表刻度盤形式表示。 儀表的布局考慮到視覺可達性,將姿態(tài)顯示器居中,速度和高度刻度條分別在姿態(tài)顯示器左右,下方左邊為水平方位儀,右邊為油門偏度儀表[7]。
儀表的配色:儀表背景為黑色,姿態(tài)顯示器中地面背景為棕褐色,天空背景為藍色;其它儀表中刻度為白色,當前正在起作用的方式為綠色,刻度指示符為綠色[8]。
姿態(tài)顯示器提供姿態(tài)保護告警,當橫滾通道γ ≥30° 時,滾轉(zhuǎn)角指示符顯示為黃色,當γ ≥45°時,滾轉(zhuǎn)角指示符顯示為紅色。
發(fā)動機油門偏度儀表刻度盤中,油門小于70%為綠色,大于70%小于90%為黃色,大于90%為紅色。
GL Studio 的開發(fā)流程如圖1所示。
圖1 GL Studio 開發(fā)流程框圖Fig.1 Development flow chart of GL Studio
本項目中,由于無人機沒有駕駛座艙,因此無需按照真實座艙和儀表面板進行仿真,省卻了從照片開始進行處理的環(huán)節(jié)。 儀表的開發(fā)工作直接從創(chuàng)建組件開始,隨后為各組件創(chuàng)建行為屬性,生成C++代碼,在VC 環(huán)境下調(diào)試編譯運行。
視景仿真系統(tǒng)運行時,飛控計算機以有線通信方式向地面測控站發(fā)送下行數(shù)據(jù),地面測控站按固定幀周期通過以太網(wǎng)向視景仿真系統(tǒng)主控子程序發(fā)送遙測數(shù)據(jù),驅(qū)動飛機三維模型飛行和儀表顯示。
GL Studio 在用于人機界面開發(fā)時,可以各自獨立開發(fā)可重用軟件對象(Reusable Software Object,RSO),然后將其轉(zhuǎn)化成?. gls 組件,最后予以集成實現(xiàn)組合儀表功能。
3.1.1 速度刻度條
在GL Studio 中新建文件,設置窗口屬性,“Create”中通過選擇“Inserts a GlsLinear Scale”、“Line Object”等,生成刻度條及對應刻度數(shù)值。
在Code 中,為類屬性添加float 型成員變量_altitude,定義高度顯示函數(shù):
void Altitude(const float& value)
該函數(shù)的功能是將輸入的高度參數(shù)按比例在刻度條中移動,實現(xiàn)高度的動態(tài)顯示。
關鍵代碼為:
glData 為儀表控件通過網(wǎng)絡端口UDP 協(xié)議接收到的飛控數(shù)據(jù)幀。 最后通過“Convert component”將其轉(zhuǎn)化成組件對象。
3.1.2 高度刻度條
高度刻度條控件的設計與速度刻度條類似。
3.1.3 姿態(tài)顯示器
姿態(tài)顯示器用于顯示無人機的俯仰和橫滾角。新建文件,設置窗口屬性,“Create”中通過選擇“Inserts a GlsLinear Scale”、“Line Object”等,生成俯仰通道刻度條及對應刻度數(shù)值。
3.1.3.1 俯仰通道
在Code 中,為類屬性添加float 型成員變量_pitch,定義俯仰角顯示函數(shù)void Pitch(const float&value),實現(xiàn)將輸入的角度按比例在刻度條上顯示的功能。
temp 為通過飛控數(shù)據(jù)幀計算出的當前俯仰角值,需要判斷正負。
3.1.3.2 滾轉(zhuǎn)通道
在Code 中,為類屬性添加float 型成員變量_roll,定義滾轉(zhuǎn)角顯示函數(shù)void Roll(const float&value),實現(xiàn)將輸入的角度按比例在儀表刻度上顯示的功能。
部分實現(xiàn)關鍵代碼如下:
temp 為通過飛控數(shù)據(jù)幀計算出的當前滾轉(zhuǎn)角值,需要判斷正負。 最后通過“Convert component”將其轉(zhuǎn)化成組件對象。
3.1.4 水平方位儀
水平方位儀在GL Studio 中新建文件,設置窗口屬性,“Create”中通過選擇“Inserts a Gls Angular Scale”繪制圓盤刻度,再通過“Line Object”、“Text Box”等生成東南西北及刻度數(shù)值。
在Code 中,為類屬性添加float 型成員變量_heading,定義航向顯示函數(shù)void Heading(const float& value),實現(xiàn)將輸入的角度按比例在儀表刻度上顯示的功能。
glData 為儀表控件通過網(wǎng)絡端口UDP 協(xié)議接收到的飛控數(shù)據(jù)幀。 最后通過“Convert component”將其轉(zhuǎn)化成組件對象。
3.1.5 油門偏度
油門偏度控件的設計與水平方位儀類似。
3.1.6 組合儀表的集成
在VC++中新建Standalone AppWizard 工程,進入?.gls,將以上單獨設計的控件分別通過“Inserts a Component”加入組合儀表界面,并按設計界面布局,界面中的文字標注采用貼圖實現(xiàn),最后在Generation 中生成C++代碼。
Sockets 規(guī)范是得到廣泛應用的、開放的、支持多種協(xié)議的網(wǎng)絡編程接口[9],而網(wǎng)絡通信中常見的是傳輸控制協(xié)議TCP 和用戶數(shù)據(jù)報協(xié)議UDP。 前者面向連接、具有數(shù)據(jù)確認和重傳機制;后者不需要建立連接,實時性較好[10]。 考慮到本項目的實際應用情況,采用了UDP 協(xié)議。
組合儀表處于接收端,首先創(chuàng)建套接字,然后將套接字綁定到一個端口,循環(huán)接收數(shù)據(jù)即可。 關鍵實現(xiàn)代碼如下:
在初始化函數(shù)Initialize()中加載套接字庫:
在VC 環(huán)境下編譯調(diào)試,根據(jù)飛控幀協(xié)議對接收的飛控數(shù)據(jù)進行解析處理,并驅(qū)動對應的儀表顯示,運行顯示如圖2所示。
本文采用VC++/GL Studio 混合編程,實現(xiàn)了某無人機飛行仿真系統(tǒng)的儀表顯示需求,并通過VC++平臺實現(xiàn)了網(wǎng)絡通信和數(shù)據(jù)驅(qū)動儀表功能。實際應用表明:該組合儀表人機界面友好,儀表組件可重構(gòu)性好,工作性能可靠穩(wěn)定,能夠適用于其它同類無人機飛行仿真顯示系統(tǒng)和飛行訓練系統(tǒng)。
圖2 飛行組合儀表效果圖Fig.2 Effect picture of flight simulation integrated instrument