劉超慧 韓 晨 魏家華
(1.海軍航空大學(xué)航空作戰(zhàn)勤務(wù)學(xué)院 煙臺(tái) 264001)(2.空軍工程大學(xué)信息與導(dǎo)航學(xué)院 西安 710076)
在飛行學(xué)員的初級(jí)訓(xùn)練階段或各個(gè)機(jī)型改裝的起始階段,采用實(shí)裝對(duì)飛行學(xué)員進(jìn)行訓(xùn)練存在效率低、成本高、安全性差等諸多問題[1],隨著虛擬現(xiàn)實(shí)技術(shù)的發(fā)展,通過仿真工具軟件模擬飛機(jī)座艙訓(xùn)練環(huán)境,開發(fā)虛擬裝備開展訓(xùn)練是解決以上問題的有效途徑。
常用的仿真軟件有OpenGL、3Dmax、Creator等軟件,但都存在建模工作量大、效率低,并且對(duì)計(jì)算機(jī)的硬件設(shè)備要求較高等問題[2],GL Studio是DiSTI公司開發(fā)的獨(dú)立于平臺(tái)的快速原型工具,用于創(chuàng)建實(shí)時(shí)的、二維或三維的、交互式的圖形界面軟件[3~4]。GL Studio開發(fā)建模時(shí)不需要專業(yè)的圖形設(shè)計(jì)者和軟件工程師,不需要用戶具備專業(yè)的編程能力,就可以完成圖形對(duì)象的仿真與開發(fā)。
本文基于GL Studio4.0軟件,結(jié)合VC++6.0進(jìn)行混合編程,實(shí)現(xiàn)了對(duì)某型飛行模擬器導(dǎo)航菜單的仿真,并對(duì)開發(fā)過程中的幾個(gè)關(guān)鍵問題進(jìn)行了分析。
圖1 GL Studio建模流程圖
慣導(dǎo)系統(tǒng)的可視化顯示是成熟三代機(jī)應(yīng)當(dāng)具備的主要綜合性能標(biāo)志之一,通常通過多功能顯示器MFD進(jìn)行模塊化顯示。導(dǎo)航界面顯示的內(nèi)容豐富、信息量較大,而且,交聯(lián)關(guān)系較多、控制邏輯復(fù)雜。以某型飛行模擬器導(dǎo)航界面為例,建模與仿真過程中幾點(diǎn)關(guān)鍵問題如下:
多功能顯示器使用600×800的像素比例,導(dǎo)航畫面顯示時(shí),飛機(jī)始終位于屏幕中央偏下的位置固定不動(dòng),使用Creat圖標(biāo)將相關(guān)的各圖元繪制在相應(yīng)位置。模擬器工作時(shí),航路點(diǎn)、當(dāng)前航向、飛行狀態(tài)等數(shù)據(jù)根據(jù)實(shí)際模擬的飛行情況,由主控計(jì)算機(jī)解算后,通過以太網(wǎng)傳遞給航電計(jì)算機(jī),之后通過程序代碼的編寫,將各數(shù)據(jù)實(shí)時(shí)反映到導(dǎo)航界面的相應(yīng)位置上。
將處理好的多功能顯示器MFD的控制面板添加到GL Studio4.0的Resources對(duì)話框的Textures屬性對(duì)話窗口中,之后在導(dǎo)航界面中按照MFD控制面板的實(shí)際尺寸,以導(dǎo)航界面中心為中心繪制一個(gè)相同尺寸的Polygon,將導(dǎo)航面板插入到Polygon中,使用工具欄中貼圖布置模式圖標(biāo)“”,調(diào)整好控制面板大小。之后使用相同的方法將各周邊鍵、開關(guān)、旋鈕插入到導(dǎo)航界面中。
各周邊鍵相應(yīng)的響應(yīng)畫面繪制時(shí),應(yīng)使用Geometry窗口對(duì)象可視化圖標(biāo)“”,將導(dǎo)航系統(tǒng)主界面中的各圖元隱藏,之后使用Convert轉(zhuǎn)化工具的組合所選對(duì)象圖標(biāo)“”將各個(gè)響應(yīng)畫面分別建為一個(gè)組合。
圖2 建模后的導(dǎo)航仿真界面
依據(jù)整體畫面的建模規(guī)律,為各個(gè)組合命名。由于導(dǎo)航主界面中元素較多、復(fù)雜程度較高,使用Convert轉(zhuǎn)化工具中的轉(zhuǎn)化為組件圖標(biāo)“”將導(dǎo)航主界面的各圖元?jiǎng)澐譃槲鍌€(gè)類,減少各圖元間相互的干擾,也有利于調(diào)試時(shí)錯(cuò)誤的修改。導(dǎo)航仿真界面及Geometry窗口的具體情況如圖2所示。
為了實(shí)現(xiàn)多功能顯示器MFD導(dǎo)航界面各圖元的正確運(yùn)動(dòng)以及各界面對(duì)周邊鍵、電門及旋鈕的響應(yīng)邏輯,仿真過程中用戶需要在GL Studio軟件代碼生成器中完成運(yùn)動(dòng)圖元和響應(yīng)邏輯的程序編寫,該部分也是建模與仿真過程中最為重要的部分。
以當(dāng)前航向刻度帶模塊軟件開發(fā)為例。建模時(shí)將當(dāng)前航向刻度帶創(chuàng)建成導(dǎo)航主界面的一個(gè)類,防止各子畫面圖元間的相互干擾。飛行中當(dāng)前實(shí)時(shí)航向類應(yīng)實(shí)現(xiàn)以下功能:
1)顯示飛機(jī)當(dāng)前實(shí)時(shí)航向數(shù)值;
2)飛機(jī)顯示符固定不動(dòng);
3)航向刻度帶以飛機(jī)為中心旋轉(zhuǎn),相應(yīng)各航向讀數(shù)隨航向刻度帶旋轉(zhuǎn)保持水平,而讀數(shù)發(fā)生變化。
圖元?jiǎng)?chuàng)建時(shí)不需要畫出360°完整的航向刻度帶,可以采用“弧線+角度刻度盤”結(jié)合的模式。利用工具欄角度盤繪制圖標(biāo)“”,確定間隔與起始角,繪制角度盤刻度線,并輸入弧線弧度。
在Class Properties類屬性窗口創(chuàng)建當(dāng)前航向float型成員變量curCourse、differ,初始化各變量,并在用戶程序中添加幾行關(guān)鍵代碼:
static float scale=-30.0f/30.0f;//30°為30個(gè)邏輯單元
_curCourse=value;//當(dāng)前航向?yàn)閷?shí)時(shí)獲取值
int cur_course=(int)(_curCourse+0.5f);//對(duì)當(dāng)前航向整數(shù)值進(jìn)行四舍五入
center=(int)_curCourse;//中間航向值初始化
center=center-(center%30)+15;//中間航向值隨旋轉(zhuǎn)實(shí)時(shí)變化
sprint(f outputcurCourse,“%3d”,cur_course);
curCourseReadout->String(outputcurCourse);//顯示當(dāng)前航向
并且以 center<45、center<15、center>345、center>315、else幾種情況討論防止航向刻度值出現(xiàn)負(fù)數(shù)。
differ=_curCourse-(float)center;//當(dāng)前航向與中間航向差值
scaleGroup->DynamicRotate(-differ*scale,Z_AXIS);//驅(qū)動(dòng)刻度尺旋轉(zhuǎn)
leftAzimuthReadout->DynamicRotate (differ*scale,Z_AXIS);//航向刻度值讀數(shù)反向旋轉(zhuǎn)以保持水平(其它幾個(gè)航向刻度值讀數(shù)做相似旋轉(zhuǎn))
將需要顯示的航向刻度帶部分用一扇形覆蓋,命名為clipthis,并將扇形隱藏。在Class Method類方法的Initialize()窗口中添加程序代碼:
SetViewport(clipthis);//顯示扇形區(qū)域內(nèi)的內(nèi)容
scaleGroup->GetLocation(startLoc);//獲取航向角度盤刻盤的初始化位置
然后,在航電主界面Class Properties類屬性窗口創(chuàng)建相同的float型成員變量curCourse,并在用戶程序中添加程序代碼:
_curCourse=value;
ruler->curCourse(_curCourse);//ruler為類(當(dāng)前航向刻度帶)名稱
將實(shí)時(shí)獲取的當(dāng)前航向值傳遞給當(dāng)前航向刻度帶類中,然后進(jìn)行編譯與調(diào)試。
建模過程中,使用多功能顯示器MFD的實(shí)際像素尺寸進(jìn)行建模的優(yōu)點(diǎn)就在于當(dāng)控制面板及各周邊鍵、開關(guān)、旋鈕使用實(shí)裝時(shí),只需要在Application對(duì)話框的Initial Position窗口中設(shè)置生成界面的初始位置,不需對(duì)虛擬控制面板及各周邊鍵、開關(guān)、旋鈕做任何處理,即可直接應(yīng)用到模擬器中。
經(jīng)保密審查處理后“實(shí)裝+模擬”裝備運(yùn)行中的導(dǎo)航模擬仿真界面如圖3所示。
圖3 運(yùn)行中的導(dǎo)航仿真界面
鏈接調(diào)試時(shí)主要檢查航電計(jì)算機(jī)能否正常接收主控計(jì)算機(jī)傳輸?shù)膶?shí)時(shí)解算數(shù)據(jù);導(dǎo)航菜單對(duì)周邊鍵的反應(yīng)是否準(zhǔn)確;顯示界面的數(shù)據(jù)參數(shù)是否正確;各符號(hào)的位置關(guān)系及驅(qū)動(dòng)動(dòng)作是否運(yùn)行準(zhǔn)確無誤[11~12]。
調(diào)試方法可以通過用戶編寫的離線子程序進(jìn)行測(cè)試,該方法較為自由靈活,需要在GL Studio軟件代碼瀏覽器類方法Class Methods的Calculate(double time)代碼輸入窗口中使用RampFloa(t)函數(shù)模擬生成所需的飛行參數(shù),然后進(jìn)行測(cè)試。也可以通過以太網(wǎng)將航電計(jì)算機(jī)與主控計(jì)算機(jī)鏈接,通過在GL Studio軟件代碼瀏覽器源文件(file*。cpp)的代碼輸入窗口中編寫接收程序,程序代碼會(huì)在源文件中生成,通過網(wǎng)絡(luò)實(shí)時(shí)接收主控計(jì)算機(jī)的解算結(jié)果,然后進(jìn)行調(diào)試。具體情況如圖4所示。
圖4 鏈接調(diào)試接收數(shù)據(jù)程序輸入窗口
本文采用VC++6.0結(jié)合GL Studio軟件進(jìn)行混合編程的方法實(shí)現(xiàn)了對(duì)某型飛行模擬器導(dǎo)航界面的建模與功能仿真。
模擬器各系統(tǒng)進(jìn)行聯(lián)調(diào)測(cè)試時(shí)仿真界面平穩(wěn)清晰、主界面與各子界面之間切換靈活穩(wěn)定。經(jīng)過改裝該機(jī)型成熟飛行員實(shí)際飛行操作后反饋,該導(dǎo)航界面的建模與仿真效果良好,較為逼真,滿足改裝飛行學(xué)員日常模擬訓(xùn)練的任務(wù)需求。