呂 游 俞藝涵 穆 楊
(中國人民解放軍91475部隊(duì) 葫蘆島 125001)
隨著仿真、虛擬現(xiàn)實(shí)等技術(shù)的快速發(fā)展,使得飛行模擬器的模擬效果越來越貼近實(shí)裝。在飛行學(xué)員培養(yǎng)鏈路中模擬飛行訓(xùn)練越來越受到重視,模擬飛行訓(xùn)練在飛行學(xué)員培養(yǎng)初期可以高效迅速地培養(yǎng)學(xué)員適應(yīng)飛機(jī)操作習(xí)慣,規(guī)范動(dòng)作。
某型初級(jí)教練機(jī)儀表板用于顯示所有飛行參數(shù),如飛機(jī)姿態(tài)參數(shù)、發(fā)動(dòng)機(jī)參數(shù)等,飛行員通過儀表信息掌握飛機(jī)實(shí)時(shí)飛行狀態(tài),做出相應(yīng)操作,在飛行過程中飛行員須將70%的注意力分配在儀表數(shù)據(jù)上,是操縱飛機(jī)的重要依據(jù)。因此飛機(jī)飛行模擬訓(xùn)練系統(tǒng)的研制過程中,飛機(jī)儀表系統(tǒng)的仿真至關(guān)重要。
GL Studio 是集成圖形界面與代碼開發(fā)兩種功能的仿真儀表開發(fā)平臺(tái)[1]。GL Studio 基于實(shí)際拍攝圖片的仿真開發(fā)過程一般需要兩部分,即圖形對(duì)象組建與行為代碼編寫。具體開發(fā)過程如圖1 所示。
GL Studio 基于圖形的開發(fā)平臺(tái)具有以下特點(diǎn)。
1)GL Studio 具有強(qiáng)大的函數(shù)庫[2],能夠自動(dòng)為基于圖形界面開發(fā)的虛擬儀表創(chuàng)建OpenGL 代碼,從而減少開發(fā)時(shí)間,降低開發(fā)過程中的代碼工作量[3~5]。
2)GL Studio 能夠通過利用高質(zhì)量的紋理圖片素材實(shí)現(xiàn)高逼真度的儀表仿真,虛擬儀表仿真效果貼近實(shí)裝,紋理圖片素材可以通過圖像處理軟件加工處理[6~9]。

圖1 GL Studio 開發(fā)流程
利用GL Studio 開發(fā)的仿真儀表具有很好的重用性,開發(fā)的工程可以生成gls 文件格式或dll 插件形式,其中g(shù)ls 格式可以以插件形式重用在其他工程中,dll 插件可應(yīng)用在其他C++工程中,大大減少了重復(fù)開發(fā)的工作量[10~12]。開發(fā)過程中值得注意的是,應(yīng)用代碼生成功能時(shí)會(huì)覆蓋所有代碼,建議將GL Studio 外編寫的代碼加到編輯器中,防止生成代碼時(shí)覆蓋。利用GL Studio 的開發(fā)過程如圖1所示。
為提高仿真儀表的真實(shí)度,儀表紋理采用實(shí)裝儀表圖片,首先通過拍照獲取實(shí)裝儀表的圖片資源,拍照時(shí)要注意光線,好的圖片資源可以極大減少后續(xù)圖片處理的工作量。
利用Photoshop 等圖片處理工具對(duì)素材進(jìn)行加工處理,將儀表的靜態(tài)部分(如表盤)與動(dòng)態(tài)部分(如指針)分離,以便仿真控制過程中分別加載。處理過程中還要注意以下幾點(diǎn)。
1)同一個(gè)儀表處理后的紋理素材盡量放在一個(gè)圖片文件里,這樣可以保證仿真儀表各部件比例相當(dāng);
2)圖片文件大小滿足2n*2n,經(jīng)過大量測(cè)試,GL Studio在運(yùn)行2n大小文件時(shí)速度最快,儀表板需要仿真很多塊儀表,每個(gè)儀表都是一個(gè)小程序,小程序集中起來時(shí)運(yùn)行效率就顯得尤為重要;
3)紋理文件要存儲(chǔ)成png格式;
4)紋理背景要透明;
5)紋理文件要固定存儲(chǔ)在工程指定目錄中,這樣可以保證項(xiàng)目在移植時(shí)避免發(fā)生找不到文件的問題,如圖2所示。

圖2 經(jīng)處理后儀表素材
下面以高度表為例介紹仿真儀表開發(fā)流程。
首先,在VS2008 中新建GL Studio 4.0 Application Wizard 項(xiàng)目,建立完成后會(huì)在目錄文件夾自動(dòng)生成。gls文件及頭文件和源代碼文件。用GL Studio 4.0 打開.gls 文件,在圖形面板上新建一個(gè)GL Polygon命名為panel,在panel中插入修改好的紋理素材,通過調(diào)整紋理大小及位置將表盤調(diào)整至圖形中心位置,再分別新建兩個(gè)GL Polygon 用于儀表指針的構(gòu)建,命名為needle1、needle2,分別插入紋理并調(diào)整位置大小,將指針轉(zhuǎn)動(dòng)原點(diǎn)調(diào)整至表盤中心位置。至此高度表的圖形界面制作完畢,如圖3 所示。

圖3 GL Studio中建立的高度表
為指針添加邏輯代碼,在類屬性Class Properties 窗口中新建float 類型成員變量heightnum,初始值設(shè)置為0.0f。該高度表大圈量程為1000m,每小格10m,長(zhǎng)指針(needle_1)指示,小圈量程 為12000m,每小格1000m,短指針(needle_2)指示。右側(cè)為場(chǎng)壓顯示。添加代碼如下:

利用DynamicRotate()函數(shù)將高度數(shù)值轉(zhuǎn)換成指針旋轉(zhuǎn)角度,進(jìn)行指示顯示。在單個(gè)儀表制作過程中,需在GL Studio 面板Generation 選項(xiàng)卡Generation Mode 復(fù)選框中選擇Component 模式,以便全部?jī)x表開發(fā)完成后集成到儀表板中。
建立儀表板集成項(xiàng)目,將獨(dú)立開發(fā)的仿真儀表以Component 形式集成到項(xiàng)目中,按實(shí)裝儀表板調(diào)整各儀表相應(yīng)位置大小,如圖4所示。

圖4 儀表板仿真
在集成項(xiàng)目中按各儀表所需接收的參數(shù)建立參數(shù)傳遞函數(shù),以高度表為例,在類屬性Class Properties 窗口中新建float 類型成員變量Altitude,其中定義語句:

將集成項(xiàng)目中收到的value 傳遞到高度表中的heightnum()函數(shù)中。
飛行模擬器主要由主控、視景及儀表三部分組成,如圖5 所示,在工作過程中主控系統(tǒng)通過采集飛行員操縱數(shù)據(jù),將數(shù)據(jù)導(dǎo)入到飛行運(yùn)動(dòng)方程進(jìn)行解算后得到飛機(jī)飛行狀態(tài)數(shù)據(jù),再將飛行狀態(tài)數(shù)據(jù)實(shí)時(shí)分發(fā)給視景、儀表系統(tǒng),通過兩個(gè)系統(tǒng)的顯示呈現(xiàn)給飛行員當(dāng)前飛機(jī)飛行狀態(tài)。因此,仿真儀表制作完成后,在投入使用前還要建立其與主控系統(tǒng)的實(shí)時(shí)數(shù)據(jù)通信,該數(shù)據(jù)通信要符合實(shí)時(shí)性、可靠性的要求,并具有通信設(shè)備少、數(shù)據(jù)傳輸量小等特點(diǎn),綜合數(shù)據(jù)通信的特點(diǎn)和要求,本文采用以太網(wǎng)的方式進(jìn)行組網(wǎng),以UDP∕IP 協(xié)議作為高層的數(shù)據(jù)傳輸協(xié)議。
網(wǎng)卡傳輸速率為100Mbps,按20%利用率計(jì)算,主控系統(tǒng)發(fā)送給仿真儀表的數(shù)據(jù)結(jié)構(gòu)中包含32 個(gè)浮點(diǎn)數(shù)和8 個(gè)整形數(shù),其中浮點(diǎn)數(shù)占用4 字節(jié),整形數(shù)占用2 字節(jié),通過計(jì)算可得數(shù)據(jù)傳輸速率為

60 是仿真儀表顯示器的刷新頻率,可以看出UDP協(xié)議下傳輸速率遠(yuǎn)大于顯示刷新率,完全滿足實(shí)時(shí)仿真的需求。儀表數(shù)據(jù)接收過程,為保證儀表指示數(shù)據(jù)的實(shí)時(shí)性和指針動(dòng)作的連貫性,將UDP接收語句加入到Initialize()方法中,將賦值語句加入到Calculate(double time)方法中,做到了數(shù)據(jù)接收與儀表繪制頻率相一致。儀表系統(tǒng)與主控系統(tǒng)間通過UDP協(xié)議進(jìn)行數(shù)據(jù)通信流程如圖6所示。

圖5 飛行模擬器結(jié)構(gòu)圖

圖6 UDP通信流程
經(jīng)過某型初級(jí)教練機(jī)儀表系統(tǒng)的開發(fā)實(shí)踐,GL Studio 4.0 搭配Visual Studio 2008 的開發(fā)形式具有仿真度高、程序運(yùn)行速度快、開發(fā)簡(jiǎn)單代碼可讀性好等特點(diǎn),滿足模擬器儀表仿真開發(fā)需求。下一步工作可以以此為基礎(chǔ),進(jìn)行邏輯關(guān)系復(fù)雜的HUD、MFD等屏顯儀表的開發(fā)。