韓 晨 劉超慧 陳雪英
(1.海軍航空兵學(xué)院艦載機(jī)系 葫蘆島 125001)(2.海軍航空兵學(xué)院作戰(zhàn)指揮系 葫蘆島 125001)
?
關(guān)于GL Studio在某型飛行模擬器多功能顯示器建模與仿真中幾點(diǎn)關(guān)鍵問(wèn)題的探究*
韓 晨1劉超慧2陳雪英2
(1.海軍航空兵學(xué)院艦載機(jī)系 葫蘆島 125001)(2.海軍航空兵學(xué)院作戰(zhàn)指揮系 葫蘆島 125001)
使用GL Studio軟件結(jié)合VC++6.0混合編程的設(shè)計(jì)方法,可以實(shí)現(xiàn)對(duì)飛行模擬器多功能顯示器的建模與仿真。但是由于多功能顯示器顯示的信息量較大、交聯(lián)關(guān)系較多、控制邏輯復(fù)雜,因此在建模與仿真過(guò)程中難度較大。論文就某型飛行模擬器多功能顯示器建模與仿真中的幾點(diǎn)關(guān)鍵問(wèn)題進(jìn)行了研究與分析,并給出了最終的仿真結(jié)果。實(shí)踐證明,論文提出的方法較好地解決了多功能顯示器建模與仿真中的幾個(gè)難點(diǎn)問(wèn)題。
GL Studio; VC++6.0; 多功能顯示器; 控制邏輯; 建模與仿真
Class Number TP391.9
隨著越來(lái)越多的高科技武器被應(yīng)用到部隊(duì),運(yùn)用虛擬現(xiàn)實(shí)技術(shù)對(duì)武器設(shè)備進(jìn)行仿真是解決使用實(shí)際裝備訓(xùn)練效率低、維護(hù)成本高、安全性差等諸多問(wèn)題的有效途徑。
由于飛行模擬器多功能顯示器顯示元素多、復(fù)雜程度高,無(wú)論是使用OpenGL語(yǔ)言,還是使用3Dmax、Creator等軟件進(jìn)行建模,工作量都較大,并且對(duì)計(jì)算機(jī)的硬件設(shè)備要求較高[1],使用GL Studio專業(yè)的儀表仿真軟件,結(jié)合VC++6.0的混合編程設(shè)計(jì)方法,可以明顯縮短開(kāi)發(fā)周期,并且達(dá)到較好的仿真效果。
本文對(duì)多功能顯示器的系統(tǒng)結(jié)構(gòu)進(jìn)行了梳理,介紹了GL Studio軟件的開(kāi)發(fā)流程,重點(diǎn)對(duì)某型飛行訓(xùn)練模擬器多功能顯示器建模與仿真過(guò)程中的幾點(diǎn)關(guān)鍵問(wèn)題進(jìn)行了研究與分析。
多功能顯示器中顯示的信息包括航行儀表信息、武器外掛信息、編隊(duì)信息、目標(biāo)信息,以及機(jī)載設(shè)備狀態(tài)信息五大類別[2]。具體內(nèi)容包括飛機(jī)位置、當(dāng)前航向、待飛距離與時(shí)間、外掛武器數(shù)量與狀態(tài)、編隊(duì)組成、目標(biāo)分配、目標(biāo)飛行狀態(tài)以及機(jī)載設(shè)備工作檢測(cè)信息等。
由于多功能顯示器顯示的元素較多、信息量較大、邏輯關(guān)系復(fù)雜,因此在對(duì)多功能顯示器建模與仿真之前,應(yīng)該對(duì)多功能顯示器的系統(tǒng)結(jié)構(gòu)進(jìn)行仔細(xì)梳理。多功能顯示器具體結(jié)構(gòu)圖如圖1所示。
圖1 MFD結(jié)構(gòu)圖
GL Studio是DiSTI公司開(kāi)發(fā)的獨(dú)立于平臺(tái)、面向?qū)ο蟮拈_(kāi)發(fā)工具,軟件工具包主要由圖形設(shè)計(jì)器與代碼生成器兩部分組成,圖形設(shè)計(jì)器支持所有繪圖操作,代碼生成器被內(nèi)建到GL Studio設(shè)計(jì)器中,能夠生成可移植的C++代碼。開(kāi)發(fā)過(guò)程分為組建圖形對(duì)象和編寫行為代碼兩個(gè)部分[3~4]。
為了實(shí)現(xiàn)對(duì)飛機(jī)多功能顯示器的建模與仿真,首先應(yīng)該創(chuàng)建紋理,對(duì)多功能顯示器的操作控制板進(jìn)行建模。方法有兩種[5~6]:一種是將去除了所有動(dòng)態(tài)圖形單元 (例如:按鍵、開(kāi)關(guān)、旋鈕等)的多功能顯示器控制面板的真實(shí)照片作為紋理;另一種是使用圖形編輯軟件(例如:PhotoShop),按照GL Studio對(duì)紋理制作的要求進(jìn)行處理后產(chǎn)生紋理。GL Studio提供的紋理制作工具支持BMP、PNG、GIF、TIFF、JPEG等圖片格式[1,6~7]。
然后,在圖形設(shè)計(jì)器中創(chuàng)建圖形單元,在GL Studio中進(jìn)行版面設(shè)計(jì),將處理好的控制面板和各動(dòng)態(tài)圖形單元紋理插入到圖形設(shè)計(jì)窗口中,并為所有的對(duì)象命名。在圖形設(shè)計(jì)畫布中,使用GL Studio工具欄中的各種圖元,分別繪制所有的子畫面,繪圖程序界面具有“所見(jiàn)即所得”的特點(diǎn)[3~4],設(shè)計(jì)畫布中顯示的圖元就是最終的顯示界面。
最后,在圖形用戶接口中為各對(duì)象編寫屬性和方法,實(shí)現(xiàn)對(duì)各圖元的動(dòng)態(tài)控制。GL Studio軟件將仿真中常見(jiàn)的開(kāi)關(guān)量與模擬量進(jìn)行了完整的封裝[8]。關(guān)于按鍵、旋鈕、開(kāi)關(guān)的制作,很多書(shū)籍和文章中都有詳細(xì)的介紹與講解[1,3~4]。之后使用代碼生成器生成源代碼,將源代碼嵌入到C++應(yīng)用程序中,編譯生成解決方案并鏈接調(diào)試。使用GL Studio的開(kāi)發(fā)流程如圖2所示[9~10]。
圖2 GL Studio開(kāi)發(fā)流程圖
采用GL Studio結(jié)合VC++6.0對(duì)多功能顯示器進(jìn)行建模與仿真時(shí),由于多功能顯示器顯示的子畫面眾多,控制邏輯復(fù)雜,因此在仿真過(guò)程中存在幾點(diǎn)關(guān)鍵問(wèn)題,具體情況如下。
4.1 導(dǎo)航界面中航向刻度帶的功能實(shí)現(xiàn)
航向刻度帶在建模時(shí)被劃分為導(dǎo)航界面的一個(gè)類,中間矩形方框中顯示飛機(jī)當(dāng)前的實(shí)時(shí)航向。飛行過(guò)程中,界面中的飛機(jī)固定不動(dòng),航向刻度帶以飛機(jī)為中心進(jìn)行旋轉(zhuǎn),各讀數(shù)不斷變化,并隨航向刻度帶的旋轉(zhuǎn)而旋轉(zhuǎn)。建模時(shí)沒(méi)有直接繪制360°完整的航向刻度帶,而是采用“弧線+角度盤”的模式。GL Studio4.0工具欄提供了角度盤繪制圖標(biāo)“”,以10°為間隔,起始角度為285°,繪制16個(gè)角度盤刻度線,弧線弧度為90°,弧線每側(cè)各多出3個(gè)角度盤刻度線。建模后如圖3所示。
然后,需要解決各圖元的驅(qū)動(dòng)問(wèn)題。
在類屬性Class Properties窗口創(chuàng)建float型成員變量currentCourse,并在用戶程序中添加代碼:
static float scale =-30.0f/30.0f; // 30 logical units, 30 degrees
char output[16], outputLeft[16], outputRight[16], outputLeft1[16], outputRight1[16];
char outputcurrentCourse[16];
_currentCourse = value; //當(dāng)前航向等于實(shí)時(shí)取值
int current_course = (int)(_currentCourse + 0.5f); //對(duì)當(dāng)前航向小數(shù)點(diǎn)后一位進(jìn)行四舍五入
float diff;
int center;
center = (int)_currentCourse; //初始化中間航向值
center = center-(center % 30)+15;
sprintf(outputcurrentCourse,"%3d",current_course);
currentCourseReadout->String(outputcurrentCourse); //顯示當(dāng)前航向
if(center<45) //分情況討論防止航向刻度值出現(xiàn)負(fù)數(shù)
{
sprintf(outputLeft1,"%3d",center-45+360);
sprintf(outputLeft,"%3d",center-15);
sprintf(outputRight,"%3d",center+15);
sprintf(outputRight1,"%3d",center+45);
leftAzimuth1Readout->String(outputLeft1);
leftAzimuthReadout->String(outputLeft);
rightAzimuthReadout->String(outputRight);
rightAzimuth1Readout->String(outputRight1);
}
else if(center<15)
{此處省略…}
else if(center>345)
{此處省略…}
else if(center>315)
{此處省略…}
else
{此處省略…}
diff = _currentCourse-(float)center;
scaleGroup->DynamicRotate(-diff*scale,Z_AXIS); //刻度帶進(jìn)行旋轉(zhuǎn)
leftAzimuthReadout->DynamicRotate (diff*scale,Z_AXIS); //航向刻度值讀數(shù)反向旋轉(zhuǎn)
此處省略…
之后,需要將航向刻度帶運(yùn)行顯示時(shí)多余的部分進(jìn)行遮擋。
在需要顯示的航向刻度帶部分上繪制一Polygon命名為clipthis,并隱藏。在類方法Class Methods的Initialize()窗口中添加程序:
SetViewport(clipthis); //顯示矩形區(qū)域內(nèi)內(nèi)容
scaleGroup->GetLocation(startLoc); //獲取航向角度盤刻度線及周邊度數(shù)的初始位置
最后,需要獲取當(dāng)前航向值。
在多功能顯示器主界面的類屬性Class Properties窗口創(chuàng)建相同的float型成員變量currentCourse,并在用戶程序中添加代碼:
_currentCourse = value;
ind->currentCourse(_currentCourse); //ind為當(dāng)前航向刻度帶類的名稱
將實(shí)時(shí)獲取的當(dāng)前航向數(shù)值傳遞到當(dāng)前航向刻度帶類中,之后進(jìn)行編譯、調(diào)試。
4.2 按鍵的采集及各子畫面之間的顯示邏輯問(wèn)題
多功能顯示器周邊存在大量控制按鍵,飛行員通過(guò)按壓這些按鍵來(lái)查看不同的子畫面。因此在建模中存在以下問(wèn)題。
4.2.1 按鍵的采集問(wèn)題
對(duì)于虛擬按鍵、開(kāi)關(guān)及旋鈕的建模本文不做太多解釋,在采用“實(shí)裝+模擬”形式的模擬器多功能顯示器界面仿真中,各周邊鍵的脈沖觸發(fā)信號(hào)很不穩(wěn)定,每按壓一次都會(huì)采集到2~4個(gè)脈沖信號(hào),但相應(yīng)的響應(yīng)只允許發(fā)生一次,針對(duì)這一問(wèn)題,提出以下解決方法:
在MFD主界面file *.h用戶程序中為每個(gè)周邊鍵分別添加兩個(gè)int型變量,以d1鍵為例:
int d1a;
int d1b;
之后在GL Studio軟件代碼瀏覽器類方法Class Methods的initialize()代碼輸入窗口中為變量初始化:
d1a = 1;
d1b = 0;
在類屬性Class Properties窗口創(chuàng)建int型成員變量d1,并在用戶程序中添加代碼:
_d1 = value;
if(_d1 != d1b)
{
d1b=_d1;
if(d1b==1)
{
d1a = d1a+1;
if(d1a % 2 == 0&&d1b==1)
{
*->Visibility(TRUE); //顯示需要的類或組
*->Visibility(FALSE); //隱藏需要的類或組
}
if(d1a % 2 > 0)
{
*->Visibility(TRUE);
*->Visibility(FALSE);
}
}
}
之后,運(yùn)行調(diào)試時(shí)即可實(shí)現(xiàn)周邊鍵的相應(yīng)功能。
4.2.2 各子畫面的顯示邏輯問(wèn)題
由于多功能顯示器同一個(gè)周邊鍵在不同的畫面中作用不同,這就需要對(duì)各按鍵之間的控制邏輯進(jìn)行分析并通過(guò)編程得以實(shí)現(xiàn)[2]。
有種方法是將所有頁(yè)面設(shè)計(jì)成獨(dú)立的組件,之后建立一個(gè)組(Group),將所有獨(dú)立組件置于其下。電源的開(kāi)關(guān)屬性與組(Group)的可見(jiàn)屬性相一致,并且每個(gè)頁(yè)面對(duì)應(yīng)一個(gè)索引號(hào),根據(jù)索引號(hào)控制其是否可見(jiàn)。對(duì)于同一按鍵的不同功能響應(yīng),采用虛函數(shù)的方法,通過(guò)繼承使各按鍵具有多樣性[11]。
本文除將較為復(fù)雜的導(dǎo)航子界面中各元素劃分為幾個(gè)類外,直接將其余各個(gè)子畫面建立成一個(gè)組,以d1鍵為例,在MFD主界面file *.h用戶程序中添加int型變量:
int _d1button;
在代碼瀏覽器類方法Class Methods的Calculate(double time)代碼輸入窗口中輸入:
_d1button=*->Visible(); //在*畫面顯示時(shí)變量_d1button=1
之后在相應(yīng)的各按鍵編程時(shí)添加條件語(yǔ)句,實(shí)現(xiàn)正確的邏輯顯示。該種方法的好處在于將編程過(guò)程變得方便、簡(jiǎn)單、更為靈活。
4.3 各子畫面仿真中的幾點(diǎn)問(wèn)題
多功能顯示器子畫面較多,在建模過(guò)程中遇到以下幾個(gè)問(wèn)題。
4.3.1 慣導(dǎo)快速對(duì)準(zhǔn)中加載矩形框的變化速度問(wèn)題
起初在主界面類方法Class Methods的Calculate(double time)代碼輸入窗口中使用 rectangle1_x(RampFloat(time*0.5, 0.0f, 340.0f));語(yǔ)句生成隨系統(tǒng)時(shí)間變化的float型變量rectangle1_x,之后將其賦予矩形右側(cè)的兩個(gè)頂點(diǎn),但矩形框變化時(shí)速度不穩(wěn)定。
之后在主界面類方法Class Methods的Calculate(double time)代碼輸入窗口中輸入:
objects->Group::Calculate(time);
if (_l4button>0) //對(duì)準(zhǔn)畫面顯示時(shí)的條件語(yǔ)句
{
if(_rectangle1_x < 最大值)
_rectangle1_x=_rectangle1_x+time*0.2;
if(_rectangle1_x> 最大值)
_rectangle1_x= 最大值;
Vertex *v ; //聲明矩形各頂點(diǎn)
v=rectangle1->Vertices() ; //獲取矩形頂點(diǎn)
v[0].x= 0 ;
v[0].y= -矩形寬度一半 ;
v[1].x= 0 ;
v[1].y= 矩形寬度一半 ;
v[2].x= _rectangle1_x;
v[2].y=矩形寬度一半;
v[3].x= _rectangle1_x;
v[3].y= -矩形寬度一半;
}
else
{
rectangle1_x( 0.0f);
Vertex *v ;
v=rectangle1->Vertices() ;
v[0].x= 0 ;
v[0].y= -矩形寬度一半;
v[1].x= 0 ;
v[1].y=矩形寬度一半;
v[2].x= 0;
v[2].y=矩形寬度一半;
v[3].x= 0;
v[3].y= -矩形寬度一半;
}
運(yùn)行時(shí),很好地解決了變化速度不一致的問(wèn)題。
4.3.2 漢字的顯示問(wèn)題
GL Studio軟件不支持漢字的直接輸入,要想完成漢字的顯示首先應(yīng)該使用圖形編輯軟件(例如:PhotoShop),制作字庫(kù)貼圖紋理。為了保證系統(tǒng)的實(shí)時(shí)性和充分利用系統(tǒng)資源,必須合理確定紋理的格式和大小。本文采用32像素/厘米,保存為PNG格式。在界面中需要輸入漢字的位置上添加一個(gè)Polygon,每個(gè)漢字對(duì)應(yīng)一個(gè)Polygon,英文和數(shù)字可以直接使用TEXT元件輸入。建模后的慣導(dǎo)快速對(duì)準(zhǔn)界面如圖4所示。
圖4 建模后的慣導(dǎo)快速對(duì)準(zhǔn)界面
本文對(duì)GL Studio軟件結(jié)合VC++6.0進(jìn)行混合編程實(shí)現(xiàn)某型飛行模擬器多功能顯示器建模與仿真中的幾個(gè)難點(diǎn)問(wèn)題進(jìn)行了研究與分析。經(jīng)保密處理后的“實(shí)裝+模擬”形式運(yùn)行中的多功能顯示器導(dǎo)航仿真界面如圖5所示。
圖5 運(yùn)行中的MFD導(dǎo)航仿真界面
仿真測(cè)試結(jié)果表明:多功能顯示器各界面清晰穩(wěn)定、各畫面對(duì)周邊鍵的響應(yīng)正確。飛行員實(shí)際操作后提供的反饋信息顯示多功能顯示器的仿真效果逼真,可以以此為基礎(chǔ),對(duì)飛行學(xué)員開(kāi)展模擬任務(wù)訓(xùn)練。
[1] 高穎,邵亞楠,鄭濤,等.GL Studio在飛行座艙模擬器中的仿真研究[J].彈箭與制導(dǎo)學(xué)報(bào),2008,28(1):257-260.
[2] 陳曦,李國(guó)清,宋吉江,等.某型軍機(jī)多功能顯示系統(tǒng)的仿真[J].系統(tǒng)仿真學(xué)報(bào),2006,18(增刊2):257-260.
[3] Distributed Simulation Technology Inc. GL Studio user’s guide Ver4.0[M]. Orlando,F(xiàn)L:Distributed Simulation Technology Inc.,2009.
[4] 于輝,趙經(jīng)成,付戰(zhàn)平,等.GL Studio虛擬儀表技術(shù)應(yīng)用與系統(tǒng)開(kāi)發(fā)[M].北京:國(guó)防工業(yè)出版社,2010.
[5] 李秀,宋麗梅,周興明,等.GL Studio在直升機(jī)儀表面板仿真中的應(yīng)用[J].計(jì)算機(jī)技術(shù)與應(yīng)用,2009,29(2):42-44.
[6] 許穎慧,楊峰.GL Studio在儀表仿真開(kāi)發(fā)中的關(guān)鍵技術(shù)研究[J].自動(dòng)化技術(shù)與應(yīng)用,2008,27(10):76-79.
[7] 王晶.虛擬座艙人機(jī)界面仿真[D].北京:北方工業(yè)大學(xué)碩士學(xué)位論文,2013.
[8] 陸志斌,郭廣利,魏靖彪,等.GL Studio在飛機(jī)模擬器虛擬儀表仿真中的應(yīng)用[J].電腦編程技術(shù)與維護(hù),2012(12):114-116.
[9] 楊大光,常波,孫國(guó)慶,等.GL Studio在飛機(jī)儀表板仿真中的應(yīng)用[J].現(xiàn)代電子技術(shù),2010(24):158-160.
[10] 藍(lán)仁恩,劉志成,王志樂(lè),等.機(jī)載慣導(dǎo)系統(tǒng)可視化仿真方法研究[J].現(xiàn)代電子技術(shù),2011,34(9):203-205.
[11] 于鳳全,李保剛.GL Studio在飛機(jī)多功能顯示器仿真中的應(yīng)用[J].數(shù)字技術(shù)與應(yīng)用,2011(1):29-3.
Exploration on Several Key Issues in MFD Modeling and Simulation of Some Model Flight Simulator Based on GL Studio
HAN Chen1LIU Chaohui2CHEN Xueying2
(1. Department of Carrier-based Aircraft, Naval Aviation Academy, Huludao 125001)(2. Department of Operational Command, Naval Aviation Academy, Huludao 125001)
Using the design method of hybrid programming with GL Studio software and VC++6.0, the modeling and simulation in MFD of some model flight simulator is realized. But for the reason of more information to be shown, more cross linking relationship and more complicated control logic in MFD, it is more difficult in the process of modeling and simulation. This article studies and analyses several key issues in MFD modeling and simulation of some model flight simulator, and the simulation results are shown in this paper. Practice has proved that the method proposed in this paper solves several difficult problems better in modeling and simulation of MFD.
GL Studio, VC++6.0, MFD, control logic, modeling and simulation
2016年5月7日,
2016年6月19日
2015軍事訓(xùn)練科研項(xiàng)目(**模擬訓(xùn)練系統(tǒng))資助。
韓晨,男,碩士,講師,研究方向:飛機(jī)結(jié)構(gòu)、導(dǎo)航與制導(dǎo)系統(tǒng)、海軍飛行。劉超慧,男,碩士,講師,研究方向:地面領(lǐng)航與指揮引導(dǎo)。陳雪英,女,碩士,講師,研究方向:地面領(lǐng)航與陸空通話英語(yǔ)。
TP391.9
10.3969/j.issn.1672-9730.2016.11.005