范 蓉,姚嘉陵
(空軍軍訓器材研究所,北京 100195)
隨著數(shù)字航空電子技術(shù)的飛速發(fā)展和應(yīng)用,飛機座艙設(shè)備不斷地向綜合化、圖形化、數(shù)字化發(fā)展。為降低飛行訓練模擬器座艙設(shè)備仿真成本,便于安裝、使用和維護,當前在飛行訓練模擬器研制生產(chǎn)中,大量采用計算機實時圖形仿真儀表(也稱為“虛擬儀表”)技術(shù),實時地為飛行員提供導航參數(shù)、電氣系統(tǒng)參數(shù)、發(fā)動機參數(shù)、飛行參數(shù)、空中態(tài)勢、電磁對抗環(huán)境等,以滿足飛行訓練的需要。工程上,通常使用Visual C++對這些專用的設(shè)備和座艙人機界面進行開發(fā),雖然Visual C++是國際上通用的計算機高級語言,但是用來開發(fā)專用設(shè)備和座艙人機界面,手寫代碼的工作量非常大,并且隨著儀表的綜合性越來越強,以手寫代碼來描述儀表的復(fù)雜運動越來越困難,還容易造成儀表的某些特性被忽略,導致人機交互出現(xiàn)差錯,編程調(diào)試過程中會消耗大量的人力物力和時間,開發(fā)的顯示形式單一,不能滿足日益豐富的需要。因此,一種易于開發(fā)的、可快速配置、具有圖形化用戶界面的虛擬儀表開發(fā)軟件工具應(yīng)運而生。本文重點介紹在Windows2000/XP和Visual C++6.0開發(fā)環(huán)境中,如何使用IData軟件平臺實現(xiàn)飛行模擬器虛擬儀表的開發(fā)設(shè)計和關(guān)鍵技術(shù)的應(yīng)用。
IData是一套提供快速開發(fā)動態(tài)交互式2D OpenGL的圖形工具,能夠快捷地創(chuàng)建儀表模型,并能實時響應(yīng)程序變量和控制事件。其具有的跨平臺特性使得它非常適合用來進行嵌入式系統(tǒng)、設(shè)備顯示和仿真應(yīng)用的開發(fā)。IData無須進行費時的代碼生成和編譯連接,減少了應(yīng)用到仿真和其他數(shù)據(jù)顯示及可視化應(yīng)用中的圖形開發(fā)和集成時間。
IData利用功能強大的圖形用戶界面(GUI)編輯器為儀表建模,并使用“byte code”格式保存儀表建模文件,該文件由IData渲染引擎加載和渲染,IData本身不對圖形生成源代碼,圖形顯示實現(xiàn)更新不需要生成或者編譯任何代碼,以利于實時渲染。IData支持紋理幾何圖形,透明區(qū)域、模板遮擋、裁剪、平滑渲染、反走樣、高質(zhì)量的TrueType紋理字體、alpha混合等功能,可以完成可見度控制、動態(tài)顏色變化、旋轉(zhuǎn)數(shù)字、非線性縮放等任務(wù)[4]。它非常適用于飛行模擬器中模擬設(shè)備(如開關(guān)、模擬儀表等)的圖形化;各類綜合顯示器和平顯的圖形、字符、數(shù)字動態(tài)模擬顯示;與各類圖型的疊加顯示等。其特征和優(yōu)點如表1所示。
表1 IData的特征優(yōu)勢
仿真軟件設(shè)計主要包括系統(tǒng)建模和顯示驅(qū)動兩部分。系統(tǒng)建模由IData軟件實現(xiàn),顯示驅(qū)動由Visual C++6.0來完成,主要開發(fā)流程如圖1所示。圖中,方框下面的文字代表該步驟所用到的IData建模工具或APIs。在IData環(huán)境下進行系統(tǒng)建模時,首先對顯示的圖形進行分解,按要求完成圖形建模,并對需要動態(tài)顯示的畫面定義其控制變量和屬性。然后使用TestData-Generator對所建模型內(nèi)變量的控制邏輯進行自測,接著在IDataLayout Editor里完成對圖形的布局編輯,生成.idd文件。使用VC++6.0完成后臺運行的顯示驅(qū)動程序,該程序通過邏輯轉(zhuǎn)換,將航電主機實時提供的數(shù)據(jù)轉(zhuǎn)換成IData需要的數(shù)據(jù),通過數(shù)據(jù)傳輸接口把處理好的數(shù)據(jù)傳輸?shù)絀Data中,從而驅(qū)動IData界面中的受控圖形和字符顯示。
表2詳細闡述了開發(fā)流程的每一階段執(zhí)行的典型任務(wù)。
圖1 IData軟件開發(fā)流程
表2 開發(fā)流程中各階段主要任務(wù)
圖2 虛擬儀表地平儀數(shù)據(jù)測試界面
測試數(shù)據(jù)發(fā)生器是在虛擬儀表開發(fā)中,通過驅(qū)動IData命名內(nèi)存變量[4],對儀表中受變量控制的動態(tài)部分進行驗證和測試。它允許用戶添加獨立的成員變量來驅(qū)動仿真。此外對于添加的變量,可以根據(jù)變量實際需要進行變化范圍、變化方式等細節(jié)設(shè)置,從而使儀表中受控的動態(tài)部分遍歷所有的運動范圍和測試邊界條件,具體操作如圖2所示。圖2右側(cè)是使用IData繪制的飛機座艙內(nèi)地平儀儀表的畫面,左側(cè)是用于測試驅(qū)動地平儀儀表數(shù)據(jù)的測試數(shù)據(jù)發(fā)生器的界面。在此界面中,可以設(shè)置地平儀的側(cè)滑、俯仰、滾轉(zhuǎn)三個控制變量的運行范圍和步長,按下運行后,數(shù)據(jù)便可按照設(shè)定好的方式增加或減少,同時地平儀畫面會根據(jù)數(shù)據(jù)變化進行運轉(zhuǎn)。通過這種方式,就可以簡單地實現(xiàn)對所繪制的儀表中動態(tài)部件運行情況的檢測,不需要費時的搭建環(huán)境通過網(wǎng)絡(luò)傳數(shù)或者編寫發(fā)數(shù)程序來進行測試,也可以縮短聯(lián)網(wǎng)調(diào)試的時間。
在進行繪圖建模時,有些部件有一定的運動范圍,超出該范圍就不顯示,或者在指定范圍外才顯示。通過模板遮擋可以按照所設(shè)想方式進行顯示或隱藏。需要注意的是,在IData繪制圖像的時候,左側(cè)樹狀結(jié)構(gòu)圖中下層的畫面會遮蓋上層的畫面,所以無論是設(shè)置遮擋模板還是繪圖,都要適當?shù)卣{(diào)整畫面順序。如果一幅畫面有多個遮擋模板,建模時就需要將遮擋模板進行編號并且清楚與各個遮擋模板相關(guān)的畫面元素是在遮擋模板的內(nèi)部顯示還是外部顯示。具體設(shè)置是在IData的Edit shape窗口中Visibility屬性單下的Stencil中進行操作。在Index中輸入模板的編號,并選擇該畫面是作為此編號下的新增模板,還是該畫面在已經(jīng)定義好的此編號模板內(nèi)部顯示或者外部顯示。
利用模板遮擋和畫面元素的運動屬性可以解決平顯仿真、儀表仿真中的一些技術(shù)難點,如平顯中刻度帶建模、精高表中數(shù)字顯示窗口等需要表現(xiàn)滾動顯示刻度或數(shù)字的問題。為了使刻度帶畫面看起來是在平滑的運動,避免出現(xiàn)畫面抖動或刻度跳動顯示的問題,建模時需要注意以下幾點。
1)刻度帶繪制
在平顯中,指示空速刻度帶是在一定范圍內(nèi)垂直平移顯示的。假設(shè)飛機的指示空速范圍時0~1400km/h,刻度值間隔50km/h??潭葞У拈L度不可能依次繪制到1400km/h。所以只需要繪制出大于顯示范圍的畫滿即可。在繪制刻度帶時,要求刻度線之間距離均勻,并且以一個參考點垂直對齊,可以通過右鍵菜單中Replicate功能簡單實現(xiàn)。需要注意繪制刻度帶范圍上下至少超過顯示范圍即遮擋模板一個單位刻度的畫面。如果出現(xiàn)上述情況則在畫面運動時,會發(fā)生畫面抖動扭曲的現(xiàn)象。
2)屬性設(shè)置
圖3 平顯畫面建模
我們將繪制好的刻度帶畫面所有元素在窗口左側(cè)的樹狀列表中打包命名,雙擊重命名的Group,在Behaviors屬性頁中設(shè)置運動方式為Scaled translation,添加自定義變量,在坐標系中準確標定它的起始點、終止點和附著點,還要確定起始終止的參數(shù),該刻度帶間隔為50,所以參數(shù)設(shè)置為(0,50)。圖3為平顯畫面中刻度帶屬性設(shè)置界面和設(shè)置屬性后實時渲染的平顯畫面。
在IData中,可以利用Visibility選項,來控制繪制的畫面是否顯示。在建模時,把每個需要控制的畫面打包成一個group,對每個組的顯示與否都關(guān)聯(lián)與同一個變量Vis,并設(shè)置屬于自己的編號。這樣就可以通過控制變量的數(shù)值來控制顯示哪一個畫面,當Vis等于1時,其他的畫面隱藏,編號為1的畫面顯示。
圖4 某型飛機座艙內(nèi)開關(guān)面板
利用這個技術(shù),可以實現(xiàn)部件的閃爍,例如在平顯畫面中,飛行時飛機的迎角達到告警抖動迎角時,迎角顯示字符會閃爍。只需要將該字符與自定義變量int flash相關(guān)聯(lián),設(shè)置屬性為當flash=1時顯示,在程序中控制變量flash在0和1之間變化,即可使該部件閃爍。
同時,還可以動態(tài)的模擬出開關(guān)的開合和點亮顯示燈等效果。圖4為利用隱藏技術(shù)開發(fā)的某型飛機座艙內(nèi)開關(guān)面板的示例。
如果需要顯示圖4所示的效果,還需要為畫面中的控制變量添加邏輯關(guān)系。IData邏輯建模視圖允許用戶圖形化添加復(fù)雜的邏輯圖表與IData顯示交互,邏輯與圖形一起生成bytecode,邏輯可以代替編寫插件的源代碼,允許用戶組織邏輯關(guān)系圖進行畫面的分層控制,圖5為邏輯建模界面。邏輯與IData的繪圖模型使用的特征緊密相連。邏輯建模界面內(nèi)可以使用相同的變量,檢查受控的事件,甚至調(diào)用外部實體函數(shù)。
邏輯建模用于做復(fù)雜的變量分配,可以完成繪制虛擬儀表時常用的一些受控事件,并且通過簡單的點擊即可從一個圖形用戶界面跟隨相應(yīng)畫面一同拷貝到另一個界面。對于一些典型的畫面跟邏輯,例如:旋鈕,開關(guān),刻度帶等,IData允許用戶創(chuàng)建邏輯模板,并且IData自身也提供一些邏輯模板,這樣通過簡單的插入,和對畫面的顏色、位置、接口的修改即可完成新的對象繪制。
圖5 邏輯建模界面
IData布局編輯器用來定義布局文件(.idd)。一個布局文件可以添加多個顯示實例。通過布局編輯器,可以對添加的個體實例進行位置排版、大小縮放、圖像旋轉(zhuǎn)。IData提供了一個基于OpenGL的渲染程序IDataRL。此程序可以讀取并且渲染IData的布局文件。在布局編輯器中,通過渲染窗口性能區(qū)域的參數(shù)設(shè)置,允許用戶指定執(zhí)行文件的窗口大小、位置、全屏或者有無邊框等屬性。通過添加執(zhí)行參數(shù),可以在布局文件運行時,將指定的命令行添加到IDataRL中,實現(xiàn)加載外部插件、窗口命名、刷新率限制等功能。
飛行模擬器虛擬座艙設(shè)備主要應(yīng)用于人在回路的仿真系統(tǒng)[2],為滿足人眼連續(xù)感知和被仿真對象機動性強的需求,飛行模擬器對該軟件的實時性有很高的要求。在軟件平臺和硬件環(huán)境一定的情況下,影響虛擬座艙設(shè)備實時顯示的主要因素是:為了提高系統(tǒng)性價比和維修性,一般采用多屏驅(qū)動技術(shù);為使畫面效果逼真,需要增加畫面渲染的復(fù)雜度。分屏顯示實時性控制主要通過多屏顯示能力實驗和圖形更新率設(shè)定來實現(xiàn);降低畫面渲染復(fù)雜度主要通過添加外部插件、圖形紋理、模型優(yōu)化等制作技巧來實現(xiàn)。
IDataTransport通信庫提供了易于使用的接口,使得外部應(yīng)用程序可以向IData顯示畫面發(fā)送命名數(shù)據(jù)。例如,把VC中的馬赫數(shù)數(shù)據(jù)傳遞到IData中。
1)首先定義靜態(tài)變量machName和變量mach:
static unsigned int machName;
float mach;
2)通過下面的語句創(chuàng)建了用戶發(fā)送給IData渲染引擎的變量句柄。類型可以使整型、浮點型、字符型、雙精度浮點型、二進制型。名稱應(yīng)與IData顯示中設(shè)置的變量匹配。
machName=IDT-CreateSendName("mach",IDATATRANSPORT-TYPE-FLOAT,1,0,0);
3)通過下面的語句,添加一個變量到網(wǎng)絡(luò)的等候隊列,通過網(wǎng)絡(luò)發(fā)送。
IDT-AddFloatToSend(machName,mach,0);
4)當每一幀所有的數(shù)據(jù)被添加到隊列之后,需要調(diào)用函數(shù)進行刷新。IDT-SendFulcrum();
圖6 座艙儀表面板
當虛擬畫面有數(shù)據(jù)需要傳出到外部程序,例如開關(guān)狀態(tài)、按鍵等,通過函數(shù)IDT-GetNameAsInt(unsigned int handle,unsigned char arrayIndex)進行操作。
圖6是通過使用上述IData虛擬儀表的關(guān)鍵技術(shù)實時渲染的畫面。
IData軟件能夠輕松實現(xiàn)人機界面的設(shè)計,將開發(fā)人員從繁重的程序開發(fā)和調(diào)試中解放出來,縮短了虛擬儀表仿真軟件的開發(fā)周期。本文利用IData軟件和VC++開發(fā)的多型飛行模擬器虛擬儀表、平顯仿真等軟件,經(jīng)過飛行員實際飛行訓練,證明該套軟件具有畫面逼真、顯示信息完整、軟件性能穩(wěn)定、可擴展性好等特點,可以滿足多機型飛行模擬器研制生產(chǎn)要求。
[1] Donald Hearm,等.計算機圖形學[M].第3版.北京:電子工業(yè)出版社,2010:25-50.
[2] 李林,翁東東,王寶奇,等.飛行模擬器[M].北京:北京理工大學出版社,2012:125-149.
[3] 傅凱.色彩[M].上海:上海科學技術(shù)出版社,2012.
[4] 宋青.基于IData的高級座艙顯示界面設(shè)計方法研究[D].南京:南京航空航天大學,2009.
[5] 王行仁.飛行實時仿真系統(tǒng)及技術(shù)[M].北京:北京航空航天大學出版社,2003:44-54.
[6] 劉磊,王江云.虛擬座艙顯示系統(tǒng)的設(shè)計與仿真[C].2008年系統(tǒng)仿真技術(shù)及其應(yīng)用學術(shù)會議論文集.合肥:中國科學技術(shù)大學出版社,2008:424-428.
[7] 侯亮,李成貴.飛機綜合顯示系統(tǒng)中圖形填充與字符顯示[J].火力與指揮控制,2009,34(1):35-44.