韓 晨 劉超慧 陳雪英
(1.海軍航空兵學(xué)院艦載機(jī)系 葫蘆島 125001)(2.海軍航空兵學(xué)院作戰(zhàn)指揮系 葫蘆島 125001)
?
關(guān)于GL Studio在某型飛行模擬器多功能顯示器建模與仿真中幾點關(guān)鍵問題的探究*
韓 晨1劉超慧2陳雪英2
(1.海軍航空兵學(xué)院艦載機(jī)系 葫蘆島 125001)(2.海軍航空兵學(xué)院作戰(zhàn)指揮系 葫蘆島 125001)
使用GL Studio軟件結(jié)合VC++6.0混合編程的設(shè)計方法,可以實現(xiàn)對飛行模擬器多功能顯示器的建模與仿真。但是由于多功能顯示器顯示的信息量較大、交聯(lián)關(guān)系較多、控制邏輯復(fù)雜,因此在建模與仿真過程中難度較大。論文就某型飛行模擬器多功能顯示器建模與仿真中的幾點關(guān)鍵問題進(jìn)行了研究與分析,并給出了最終的仿真結(jié)果。實踐證明,論文提出的方法較好地解決了多功能顯示器建模與仿真中的幾個難點問題。
GL Studio; VC++6.0; 多功能顯示器; 控制邏輯; 建模與仿真
Class Number TP391.9
隨著越來越多的高科技武器被應(yīng)用到部隊,運用虛擬現(xiàn)實技術(shù)對武器設(shè)備進(jìn)行仿真是解決使用實際裝備訓(xùn)練效率低、維護(hù)成本高、安全性差等諸多問題的有效途徑。
由于飛行模擬器多功能顯示器顯示元素多、復(fù)雜程度高,無論是使用OpenGL語言,還是使用3Dmax、Creator等軟件進(jìn)行建模,工作量都較大,并且對計算機(jī)的硬件設(shè)備要求較高[1],使用GL Studio專業(yè)的儀表仿真軟件,結(jié)合VC++6.0的混合編程設(shè)計方法,可以明顯縮短開發(fā)周期,并且達(dá)到較好的仿真效果。
本文對多功能顯示器的系統(tǒng)結(jié)構(gòu)進(jìn)行了梳理,介紹了GL Studio軟件的開發(fā)流程,重點對某型飛行訓(xùn)練模擬器多功能顯示器建模與仿真過程中的幾點關(guān)鍵問題進(jìn)行了研究與分析。
多功能顯示器中顯示的信息包括航行儀表信息、武器外掛信息、編隊信息、目標(biāo)信息,以及機(jī)載設(shè)備狀態(tài)信息五大類別[2]。具體內(nèi)容包括飛機(jī)位置、當(dāng)前航向、待飛距離與時間、外掛武器數(shù)量與狀態(tài)、編隊組成、目標(biāo)分配、目標(biāo)飛行狀態(tài)以及機(jī)載設(shè)備工作檢測信息等。
由于多功能顯示器顯示的元素較多、信息量較大、邏輯關(guān)系復(fù)雜,因此在對多功能顯示器建模與仿真之前,應(yīng)該對多功能顯示器的系統(tǒng)結(jié)構(gòu)進(jìn)行仔細(xì)梳理。多功能顯示器具體結(jié)構(gòu)圖如圖1所示。
圖1 MFD結(jié)構(gòu)圖
GL Studio是DiSTI公司開發(fā)的獨立于平臺、面向?qū)ο蟮拈_發(fā)工具,軟件工具包主要由圖形設(shè)計器與代碼生成器兩部分組成,圖形設(shè)計器支持所有繪圖操作,代碼生成器被內(nèi)建到GL Studio設(shè)計器中,能夠生成可移植的C++代碼。開發(fā)過程分為組建圖形對象和編寫行為代碼兩個部分[3~4]。
為了實現(xiàn)對飛機(jī)多功能顯示器的建模與仿真,首先應(yīng)該創(chuàng)建紋理,對多功能顯示器的操作控制板進(jìn)行建模。方法有兩種[5~6]:一種是將去除了所有動態(tài)圖形單元 (例如:按鍵、開關(guān)、旋鈕等)的多功能顯示器控制面板的真實照片作為紋理;另一種是使用圖形編輯軟件(例如:PhotoShop),按照GL Studio對紋理制作的要求進(jìn)行處理后產(chǎn)生紋理。GL Studio提供的紋理制作工具支持BMP、PNG、GIF、TIFF、JPEG等圖片格式[1,6~7]。
然后,在圖形設(shè)計器中創(chuàng)建圖形單元,在GL Studio中進(jìn)行版面設(shè)計,將處理好的控制面板和各動態(tài)圖形單元紋理插入到圖形設(shè)計窗口中,并為所有的對象命名。在圖形設(shè)計畫布中,使用GL Studio工具欄中的各種圖元,分別繪制所有的子畫面,繪圖程序界面具有“所見即所得”的特點[3~4],設(shè)計畫布中顯示的圖元就是最終的顯示界面。
最后,在圖形用戶接口中為各對象編寫屬性和方法,實現(xiàn)對各圖元的動態(tài)控制。GL Studio軟件將仿真中常見的開關(guān)量與模擬量進(jìn)行了完整的封裝[8]。關(guān)于按鍵、旋鈕、開關(guān)的制作,很多書籍和文章中都有詳細(xì)的介紹與講解[1,3~4]。之后使用代碼生成器生成源代碼,將源代碼嵌入到C++應(yīng)用程序中,編譯生成解決方案并鏈接調(diào)試。使用GL Studio的開發(fā)流程如圖2所示[9~10]。
圖2 GL Studio開發(fā)流程圖
采用GL Studio結(jié)合VC++6.0對多功能顯示器進(jìn)行建模與仿真時,由于多功能顯示器顯示的子畫面眾多,控制邏輯復(fù)雜,因此在仿真過程中存在幾點關(guān)鍵問題,具體情況如下。
4.1 導(dǎo)航界面中航向刻度帶的功能實現(xiàn)
航向刻度帶在建模時被劃分為導(dǎo)航界面的一個類,中間矩形方框中顯示飛機(jī)當(dāng)前的實時航向。飛行過程中,界面中的飛機(jī)固定不動,航向刻度帶以飛機(jī)為中心進(jìn)行旋轉(zhuǎn),各讀數(shù)不斷變化,并隨航向刻度帶的旋轉(zhuǎn)而旋轉(zhuǎn)。建模時沒有直接繪制360°完整的航向刻度帶,而是采用“弧線+角度盤”的模式。GL Studio4.0工具欄提供了角度盤繪制圖標(biāo)“”,以10°為間隔,起始角度為285°,繪制16個角度盤刻度線,弧線弧度為90°,弧線每側(cè)各多出3個角度盤刻度線。建模后如圖3所示。
然后,需要解決各圖元的驅(qū)動問題。
在類屬性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)前航向等于實時取值
int current_course = (int)(_currentCourse + 0.5f); //對當(dāng)前航向小數(shù)點后一位進(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)
此處省略…
之后,需要將航向刻度帶運行顯示時多余的部分進(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)前航向刻度帶類的名稱
將實時獲取的當(dāng)前航向數(shù)值傳遞到當(dāng)前航向刻度帶類中,之后進(jìn)行編譯、調(diào)試。
4.2 按鍵的采集及各子畫面之間的顯示邏輯問題
多功能顯示器周邊存在大量控制按鍵,飛行員通過按壓這些按鍵來查看不同的子畫面。因此在建模中存在以下問題。
4.2.1 按鍵的采集問題
對于虛擬按鍵、開關(guān)及旋鈕的建模本文不做太多解釋,在采用“實裝+模擬”形式的模擬器多功能顯示器界面仿真中,各周邊鍵的脈沖觸發(fā)信號很不穩(wěn)定,每按壓一次都會采集到2~4個脈沖信號,但相應(yīng)的響應(yīng)只允許發(fā)生一次,針對這一問題,提出以下解決方法:
在MFD主界面file *.h用戶程序中為每個周邊鍵分別添加兩個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);
}
}
}
之后,運行調(diào)試時即可實現(xiàn)周邊鍵的相應(yīng)功能。
4.2.2 各子畫面的顯示邏輯問題
由于多功能顯示器同一個周邊鍵在不同的畫面中作用不同,這就需要對各按鍵之間的控制邏輯進(jìn)行分析并通過編程得以實現(xiàn)[2]。
有種方法是將所有頁面設(shè)計成獨立的組件,之后建立一個組(Group),將所有獨立組件置于其下。電源的開關(guān)屬性與組(Group)的可見屬性相一致,并且每個頁面對應(yīng)一個索引號,根據(jù)索引號控制其是否可見。對于同一按鍵的不同功能響應(yīng),采用虛函數(shù)的方法,通過繼承使各按鍵具有多樣性[11]。
本文除將較為復(fù)雜的導(dǎo)航子界面中各元素劃分為幾個類外,直接將其余各個子畫面建立成一個組,以d1鍵為例,在MFD主界面file *.h用戶程序中添加int型變量:
int _d1button;
在代碼瀏覽器類方法Class Methods的Calculate(double time)代碼輸入窗口中輸入:
_d1button=*->Visible(); //在*畫面顯示時變量_d1button=1
之后在相應(yīng)的各按鍵編程時添加條件語句,實現(xiàn)正確的邏輯顯示。該種方法的好處在于將編程過程變得方便、簡單、更為靈活。
4.3 各子畫面仿真中的幾點問題
多功能顯示器子畫面較多,在建模過程中遇到以下幾個問題。
4.3.1 慣導(dǎo)快速對準(zhǔn)中加載矩形框的變化速度問題
起初在主界面類方法Class Methods的Calculate(double time)代碼輸入窗口中使用 rectangle1_x(RampFloat(time*0.5, 0.0f, 340.0f));語句生成隨系統(tǒng)時間變化的float型變量rectangle1_x,之后將其賦予矩形右側(cè)的兩個頂點,但矩形框變化時速度不穩(wěn)定。
之后在主界面類方法Class Methods的Calculate(double time)代碼輸入窗口中輸入:
objects->Group::Calculate(time);
if (_l4button>0) //對準(zhǔn)畫面顯示時的條件語句
{
if(_rectangle1_x < 最大值)
_rectangle1_x=_rectangle1_x+time*0.2;
if(_rectangle1_x> 最大值)
_rectangle1_x= 最大值;
Vertex *v ; //聲明矩形各頂點
v=rectangle1->Vertices() ; //獲取矩形頂點
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= -矩形寬度一半;
}
運行時,很好地解決了變化速度不一致的問題。
4.3.2 漢字的顯示問題
GL Studio軟件不支持漢字的直接輸入,要想完成漢字的顯示首先應(yīng)該使用圖形編輯軟件(例如:PhotoShop),制作字庫貼圖紋理。為了保證系統(tǒng)的實時性和充分利用系統(tǒng)資源,必須合理確定紋理的格式和大小。本文采用32像素/厘米,保存為PNG格式。在界面中需要輸入漢字的位置上添加一個Polygon,每個漢字對應(yīng)一個Polygon,英文和數(shù)字可以直接使用TEXT元件輸入。建模后的慣導(dǎo)快速對準(zhǔn)界面如圖4所示。
圖4 建模后的慣導(dǎo)快速對準(zhǔn)界面
本文對GL Studio軟件結(jié)合VC++6.0進(jìn)行混合編程實現(xiàn)某型飛行模擬器多功能顯示器建模與仿真中的幾個難點問題進(jìn)行了研究與分析。經(jīng)保密處理后的“實裝+模擬”形式運行中的多功能顯示器導(dǎo)航仿真界面如圖5所示。
圖5 運行中的MFD導(dǎo)航仿真界面
仿真測試結(jié)果表明:多功能顯示器各界面清晰穩(wěn)定、各畫面對周邊鍵的響應(yīng)正確。飛行員實際操作后提供的反饋信息顯示多功能顯示器的仿真效果逼真,可以以此為基礎(chǔ),對飛行學(xué)員開展模擬任務(wù)訓(xùn)練。
[1] 高穎,邵亞楠,鄭濤,等.GL Studio在飛行座艙模擬器中的仿真研究[J].彈箭與制導(dǎo)學(xué)報,2008,28(1):257-260.
[2] 陳曦,李國清,宋吉江,等.某型軍機(jī)多功能顯示系統(tǒng)的仿真[J].系統(tǒng)仿真學(xué)報,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)開發(fā)[M].北京:國防工業(yè)出版社,2010.
[5] 李秀,宋麗梅,周興明,等.GL Studio在直升機(jī)儀表面板仿真中的應(yīng)用[J].計算機(jī)技術(shù)與應(yīng)用,2009,29(2):42-44.
[6] 許穎慧,楊峰.GL Studio在儀表仿真開發(fā)中的關(guān)鍵技術(shù)研究[J].自動化技術(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] 楊大光,常波,孫國慶,等.GL Studio在飛機(jī)儀表板仿真中的應(yīng)用[J].現(xiàn)代電子技術(shù),2010(24):158-160.
[10] 藍(lán)仁恩,劉志成,王志樂,等.機(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)練科研項目(**模擬訓(xùn)練系統(tǒng))資助。
韓晨,男,碩士,講師,研究方向:飛機(jī)結(jié)構(gòu)、導(dǎo)航與制導(dǎo)系統(tǒng)、海軍飛行。劉超慧,男,碩士,講師,研究方向:地面領(lǐng)航與指揮引導(dǎo)。陳雪英,女,碩士,講師,研究方向:地面領(lǐng)航與陸空通話英語。
TP391.9
10.3969/j.issn.1672-9730.2016.11.005