劉超慧 韓 晨 魏家華
(1.海軍航空大學航空作戰勤務學院 煙臺 264001)(2.空軍工程大學信息與導航學院 西安 710076)
在飛行學員的初級訓練階段或各個機型改裝的起始階段,采用實裝對飛行學員進行訓練存在效率低、成本高、安全性差等諸多問題[1],隨著虛擬現實技術的發展,通過仿真工具軟件模擬飛機座艙訓練環境,開發虛擬裝備開展訓練是解決以上問題的有效途徑。
常用的仿真軟件有OpenGL、3Dmax、Creator等軟件,但都存在建模工作量大、效率低,并且對計算機的硬件設備要求較高等問題[2],GL Studio是DiSTI公司開發的獨立于平臺的快速原型工具,用于創建實時的、二維或三維的、交互式的圖形界面軟件[3~4]。GL Studio開發建模時不需要專業的圖形設計者和軟件工程師,不需要用戶具備專業的編程能力,就可以完成圖形對象的仿真與開發。
本文基于GL Studio4.0軟件,結合VC++6.0進行混合編程,實現了對某型飛行模擬器導航菜單的仿真,并對開發過程中的幾個關鍵問題進行了分析。

圖1 GL Studio建模流程圖
慣導系統的可視化顯示是成熟三代機應當具備的主要綜合性能標志之一,通常通過多功能顯示器MFD進行模塊化顯示。導航界面顯示的內容豐富、信息量較大,而且,交聯關系較多、控制邏輯復雜。以某型飛行模擬器導航界面為例,建模與仿真過程中幾點關鍵問題如下:
多功能顯示器使用600×800的像素比例,導航畫面顯示時,飛機始終位于屏幕中央偏下的位置固定不動,使用Creat圖標將相關的各圖元繪制在相應位置。模擬器工作時,航路點、當前航向、飛行狀態等數據根據實際模擬的飛行情況,由主控計算機解算后,通過以太網傳遞給航電計算機,之后通過程序代碼的編寫,將各數據實時反映到導航界面的相應位置上。
將處理好的多功能顯示器MFD的控制面板添加到GL Studio4.0的Resources對話框的Textures屬性對話窗口中,之后在導航界面中按照MFD控制面板的實際尺寸,以導航界面中心為中心繪制一個相同尺寸的Polygon,將導航面板插入到Polygon中,使用工具欄中貼圖布置模式圖標“”,調整好控制面板大小。之后使用相同的方法將各周邊鍵、開關、旋鈕插入到導航界面中。
各周邊鍵相應的響應畫面繪制時,應使用Geometry窗口對象可視化圖標“”,將導航系統主界面中的各圖元隱藏,之后使用Convert轉化工具的組合所選對象圖標“”將各個響應畫面分別建為一個組合。

圖2 建模后的導航仿真界面
依據整體畫面的建模規律,為各個組合命名。由于導航主界面中元素較多、復雜程度較高,使用Convert轉化工具中的轉化為組件圖標“”將導航主界面的各圖元劃分為五個類,減少各圖元間相互的干擾,也有利于調試時錯誤的修改。導航仿真界面及Geometry窗口的具體情況如圖2所示。
為了實現多功能顯示器MFD導航界面各圖元的正確運動以及各界面對周邊鍵、電門及旋鈕的響應邏輯,仿真過程中用戶需要在GL Studio軟件代碼生成器中完成運動圖元和響應邏輯的程序編寫,該部分也是建模與仿真過程中最為重要的部分。
以當前航向刻度帶模塊軟件開發為例。建模時將當前航向刻度帶創建成導航主界面的一個類,防止各子畫面圖元間的相互干擾。飛行中當前實時航向類應實現以下功能:
1)顯示飛機當前實時航向數值;
2)飛機顯示符固定不動;
3)航向刻度帶以飛機為中心旋轉,相應各航向讀數隨航向刻度帶旋轉保持水平,而讀數發生變化。
圖元創建時不需要畫出360°完整的航向刻度帶,可以采用“弧線+角度刻度盤”結合的模式。利用工具欄角度盤繪制圖標“”,確定間隔與起始角,繪制角度盤刻度線,并輸入弧線弧度。
在Class Properties類屬性窗口創建當前航向float型成員變量curCourse、differ,初始化各變量,并在用戶程序中添加幾行關鍵代碼:
static float scale=-30.0f/30.0f;//30°為30個邏輯單元
_curCourse=value;//當前航向為實時獲取值
int cur_course=(int)(_curCourse+0.5f);//對當前航向整數值進行四舍五入
center=(int)_curCourse;//中間航向值初始化
center=center-(center%30)+15;//中間航向值隨旋轉實時變化
sprint(f outputcurCourse,“%3d”,cur_course);
curCourseReadout->String(outputcurCourse);//顯示當前航向
并且以 center<45、center<15、center>345、center>315、else幾種情況討論防止航向刻度值出現負數。
differ=_curCourse-(float)center;//當前航向與中間航向差值
scaleGroup->DynamicRotate(-differ*scale,Z_AXIS);//驅動刻度尺旋轉
leftAzimuthReadout->DynamicRotate (differ*scale,Z_AXIS);//航向刻度值讀數反向旋轉以保持水平(其它幾個航向刻度值讀數做相似旋轉)
將需要顯示的航向刻度帶部分用一扇形覆蓋,命名為clipthis,并將扇形隱藏。在Class Method類方法的Initialize()窗口中添加程序代碼:
SetViewport(clipthis);//顯示扇形區域內的內容
scaleGroup->GetLocation(startLoc);//獲取航向角度盤刻盤的初始化位置
然后,在航電主界面Class Properties類屬性窗口創建相同的float型成員變量curCourse,并在用戶程序中添加程序代碼:
_curCourse=value;
ruler->curCourse(_curCourse);//ruler為類(當前航向刻度帶)名稱
將實時獲取的當前航向值傳遞給當前航向刻度帶類中,然后進行編譯與調試。
建模過程中,使用多功能顯示器MFD的實際像素尺寸進行建模的優點就在于當控制面板及各周邊鍵、開關、旋鈕使用實裝時,只需要在Application對話框的Initial Position窗口中設置生成界面的初始位置,不需對虛擬控制面板及各周邊鍵、開關、旋鈕做任何處理,即可直接應用到模擬器中。
經保密審查處理后“實裝+模擬”裝備運行中的導航模擬仿真界面如圖3所示。

圖3 運行中的導航仿真界面
鏈接調試時主要檢查航電計算機能否正常接收主控計算機傳輸的實時解算數據;導航菜單對周邊鍵的反應是否準確;顯示界面的數據參數是否正確;各符號的位置關系及驅動動作是否運行準確無誤[11~12]。
調試方法可以通過用戶編寫的離線子程序進行測試,該方法較為自由靈活,需要在GL Studio軟件代碼瀏覽器類方法Class Methods的Calculate(double time)代碼輸入窗口中使用RampFloa(t)函數模擬生成所需的飛行參數,然后進行測試。也可以通過以太網將航電計算機與主控計算機鏈接,通過在GL Studio軟件代碼瀏覽器源文件(file*。cpp)的代碼輸入窗口中編寫接收程序,程序代碼會在源文件中生成,通過網絡實時接收主控計算機的解算結果,然后進行調試。具體情況如圖4所示。

圖4 鏈接調試接收數據程序輸入窗口
本文采用VC++6.0結合GL Studio軟件進行混合編程的方法實現了對某型飛行模擬器導航界面的建模與功能仿真。
模擬器各系統進行聯調測試時仿真界面平穩清晰、主界面與各子界面之間切換靈活穩定。經過改裝該機型成熟飛行員實際飛行操作后反饋,該導航界面的建模與仿真效果良好,較為逼真,滿足改裝飛行學員日常模擬訓練的任務需求。