張千宇,郭 巍,張 楊
(海軍航空工程學(xué)院指揮系,山東 煙臺(tái) 264001)
模擬訓(xùn)練以安全、經(jīng)濟(jì)、可控、無風(fēng)險(xiǎn)、不受氣候條件和場(chǎng)地空間限制、既能按常規(guī)進(jìn)行操作訓(xùn)練、又能培訓(xùn)處理各種事故的應(yīng)變能力以及訓(xùn)練的高效率、高效益等獨(dú)特優(yōu)勢(shì),一直受到各國(guó)軍方的高度重視,特別面對(duì)武器裝備日趨復(fù)雜化、購(gòu)買武器費(fèi)用不斷提高的現(xiàn)狀,致使世界各國(guó)軍事部門均將模擬器視為軍事訓(xùn)練必不可少的甚至是唯一安全、經(jīng)濟(jì)而有效的工具和手段,加以重點(diǎn)發(fā)展。美軍是世界上最早開展模擬訓(xùn)練研究和應(yīng)用的。其技術(shù)和裝備一直居于國(guó)際領(lǐng)先地位。長(zhǎng)期以來,主要發(fā)展各類武器裝備的使用操作訓(xùn)練模擬器,據(jù)統(tǒng)計(jì),僅1995~2000年用于三軍的模擬裝備費(fèi)用就高達(dá)36億美元。俄羅斯同樣是世界上的模擬訓(xùn)練的大國(guó)和強(qiáng)國(guó)。應(yīng)該說,俄羅斯在發(fā)展訓(xùn)練模擬器上是不惜代價(jià)的,其數(shù)量約占世界之半,僅俄試飛院就擁有昂貴的空中飛行模擬器十余種。他們的先進(jìn)武器裝備幾乎都編配有相應(yīng)的訓(xùn)練模擬器。西歐軍事強(qiáng)國(guó)(如英、法、德等國(guó))也十分重視模擬訓(xùn)練,模擬訓(xùn)練技術(shù)及應(yīng)用處于世界領(lǐng)先行列。
我國(guó)是發(fā)展和應(yīng)用模擬訓(xùn)練技術(shù)較早的國(guó)家之一。二十世紀(jì)六十年代初開始研制和使用射擊練習(xí)器和簡(jiǎn)易飛行模擬器。二十世紀(jì)八十年代以來模擬訓(xùn)練進(jìn)入了迅速發(fā)展階段,先后研制成功殲-6、殲-7、殲-8D、轟-6C等飛行模擬器,及HQ-2、HQ-7、HQ-6、C-300等防空導(dǎo)彈武器的指揮控制模擬訓(xùn)練系統(tǒng)。相繼掌握了計(jì)算機(jī)成像、圖形/圖像顯示技術(shù)、多媒體技術(shù)以及精確控制機(jī)體和彈體運(yùn)動(dòng)平臺(tái)技術(shù)等。二十世紀(jì)九十年代在分布式交互仿真(DIS)、虛擬現(xiàn)實(shí)(VR)和計(jì)算機(jī)生成兵力(CGF)技術(shù)等方面的研究和應(yīng)用上獲得了跨越式發(fā)展。
隨著國(guó)防現(xiàn)代化的發(fā)展,武器系統(tǒng)規(guī)模日益龐大,技術(shù)更加先進(jìn)和復(fù)雜,系統(tǒng)造價(jià)也更加昂貴,雖然訓(xùn)練時(shí)出現(xiàn)危險(xiǎn)性的可能性降低了,但是一旦操作不當(dāng),引起的破壞性和危險(xiǎn)性卻大為增加。因此,提高訓(xùn)練的經(jīng)濟(jì)性、安全性、可靠性至關(guān)重要。為了較好的解決這一問題,需要有相應(yīng)的模擬訓(xùn)練系統(tǒng)能夠模擬實(shí)際裝備的工作環(huán)境和工作狀況,價(jià)格要低廉,能夠避免采用實(shí)裝進(jìn)行訓(xùn)練時(shí)的巨大危險(xiǎn)性和高昂代價(jià)[1-2]。
某型導(dǎo)彈運(yùn)動(dòng)模型的建立可以為導(dǎo)彈攻擊的視景仿真或描述運(yùn)動(dòng)軌跡提供數(shù)據(jù)來源,使系統(tǒng)更加貼近實(shí)際,利于提高學(xué)習(xí)、訓(xùn)練質(zhì)量。
導(dǎo)彈運(yùn)動(dòng)模型的實(shí)現(xiàn)要盡量接近實(shí)際,以便能夠最大可能的反映出不同裝訂參數(shù)下導(dǎo)彈的運(yùn)動(dòng)狀態(tài)、軌跡等,最好能夠得到具體導(dǎo)彈的實(shí)際模型。
某型導(dǎo)彈的運(yùn)動(dòng)可以分解為隨質(zhì)心的移動(dòng)和繞質(zhì)心的轉(zhuǎn)動(dòng)。我們?cè)谶M(jìn)行導(dǎo)彈運(yùn)動(dòng)的控制時(shí)首先應(yīng)確定其運(yùn)動(dòng)的坐標(biāo)系:
Odxdydzd—表示大地坐標(biāo)系
Ojxjyjzj—表示艦艇坐標(biāo)系
OfxfyFzF—表示發(fā)射坐標(biāo)系
O1x1y1z1—表示彈體坐標(biāo)系
具體的坐標(biāo)之間的關(guān)系如圖1所示。
圖1 某型導(dǎo)彈運(yùn)動(dòng)的坐標(biāo)系Fig.1 Coordanition system of ship monted missile
有關(guān)導(dǎo)彈運(yùn)動(dòng)的一些相關(guān)參數(shù)是可以得到的,有了這些參數(shù),可以利用現(xiàn)有的公式進(jìn)行導(dǎo)彈速度的求解,得到導(dǎo)彈在任何時(shí)刻t的速度矢量,通過對(duì)這些速度矢量在各自的坐標(biāo)軸上的積分,就可以得出導(dǎo)彈在某一時(shí)刻t時(shí)的運(yùn)動(dòng)狀態(tài),包括導(dǎo)彈的空間坐標(biāo)(x,y,z)、以及導(dǎo)彈的姿態(tài)角(偏航角、俯仰角、滾轉(zhuǎn)角)、導(dǎo)彈的速度(空速)。
導(dǎo)彈模擬器在整個(gè)系統(tǒng)中主要起到近似模擬實(shí)際的導(dǎo)彈在射前檢查、參數(shù)裝訂、發(fā)射控制、目標(biāo)攻擊的過程中的姿態(tài)變化,配以一定的環(huán)境背景和逼真的視頻、音頻效果,渲染出臨近實(shí)戰(zhàn)的氛圍,有利于激發(fā)參訓(xùn)者的戰(zhàn)斗意識(shí),提高訓(xùn)練的熱情和效率。
本文設(shè)計(jì)的模擬器在實(shí)現(xiàn)導(dǎo)彈運(yùn)動(dòng)的過程中所要達(dá)到的控制上的要求:
1)接收彈道計(jì)算仿真結(jié)果并據(jù)此控制導(dǎo)彈姿態(tài)。
2)仿真系統(tǒng)動(dòng)畫演示及聲音媒體表現(xiàn);
3)可視化駕馭功能,可以不同的視角對(duì)導(dǎo)彈狀態(tài)進(jìn)行觀察。
在導(dǎo)彈模擬器上,主要仿真對(duì)象是導(dǎo)彈、艦艇。其中導(dǎo)彈的運(yùn)動(dòng)規(guī)律根據(jù)導(dǎo)彈空間運(yùn)動(dòng)模型和導(dǎo)彈導(dǎo)引率編寫;敵我艦艇運(yùn)動(dòng)假設(shè)只是考慮運(yùn)動(dòng)學(xué)關(guān)系,在勻速直線運(yùn)動(dòng)的基礎(chǔ)上根據(jù)來襲導(dǎo)彈的相對(duì)距離和方位進(jìn)行機(jī)動(dòng)。
在程序中為了能響應(yīng)整個(gè)示教系統(tǒng)的各種操作,需要在收到網(wǎng)絡(luò)數(shù)據(jù)后,及時(shí)的進(jìn)行判斷是否需要本系統(tǒng)做出反應(yīng),比如,在收到“開蓋”的指令后,若沒有設(shè)置“開蓋故障”,則在三維圖像顯示畫面中控制導(dǎo)彈發(fā)射架的蓋子打開,打開到位后使“開蓋到位”的標(biāo)志量有效,并將更改后的數(shù)據(jù)發(fā)向網(wǎng)絡(luò),而后控制臺(tái)會(huì)根據(jù)“開蓋到位”標(biāo)志量點(diǎn)亮控制臺(tái)面板上的“開蓋到位”指示燈,模擬訓(xùn)練系統(tǒng)其它部分的狀態(tài)顯示也會(huì)相應(yīng)地進(jìn)行更改。當(dāng)有導(dǎo)彈發(fā)射后要邊解算導(dǎo)彈的運(yùn)動(dòng)模型邊驅(qū)動(dòng)三維動(dòng)畫,所以要在Visual C++環(huán)境下運(yùn)行Vega應(yīng)用程序。
Vega是虛擬現(xiàn)實(shí)軟件MultiGen的一部分。Vega的作用是將Creator制作的三維模型渲染成場(chǎng)景、在場(chǎng)景上瀏覽、查詢、實(shí)例演示。Vega由Lynx軟件、多種動(dòng)態(tài)聯(lián)接庫(kù)(DLL)、函數(shù)庫(kù)(Lib)、應(yīng)用程序接口(API)組成[3-6]。
在Visual C++中應(yīng)用Vega首先要對(duì)頭文件和庫(kù)文件路徑進(jìn)行如下設(shè)置:
1)在 Visual C++的菜單項(xiàng)“Tools”選項(xiàng)中,選擇“Directories”標(biāo)簽,將“Show directories for:”選為“Include files”。
2)若“c:paradigmvegainclude”( c:paradigmvegainclude為Vega的安裝路徑)未出現(xiàn)在列表中,則將其添加進(jìn)來。
3)再將“Show directories for:”選為“Library files”。
4)若“c:paradigmvegalib”未出現(xiàn)在列表中,則將其添加進(jìn)來。
Vega應(yīng)用程序的啟動(dòng)步驟。
1)系統(tǒng)初始化:由函數(shù)vgInit Sys()完成初始化Vega系統(tǒng)并創(chuàng)建共享內(nèi)存以及信號(hào)量等。
2)系統(tǒng)定義:由函數(shù) vgDefineSys (“my.adf”)讀入 ADF文件,完成應(yīng)用程序各個(gè)類的屬性的定義和初始化。
3)系統(tǒng)配置:通過調(diào)用函數(shù)vgConfigSys()完成配置并啟動(dòng)系統(tǒng)。因此,每一個(gè)Vega應(yīng)用程序都必須包含以下函數(shù)語句:
vgInitSys( ) ; //系統(tǒng)初始化
vgDefineSys (“Ddgj.adf”); //系統(tǒng)定義,載入“.adf”文件
vgConfigSys( ); //系統(tǒng)配置
while (1)
{
vgSyncFrame() ; //幀同步
vgFrame(); //幀顯示
…… //系統(tǒng)仿真代碼或入口
}
Vega應(yīng)用程序每次執(zhí)行主循環(huán)刷新顯示幀時(shí),都要調(diào)用vgSyncFrame()和 vgFrame(),vgSyncFrame()函數(shù)完成幀同步,vgFrame()函數(shù)則完成幀的顯示。另外也可以在主循環(huán)中加入用戶的系統(tǒng)仿真模塊。
為了產(chǎn)生一個(gè)基于MFC的Vega應(yīng)用程序,首先要生成一個(gè)基于MFC的Visual C++單文檔應(yīng)用程序項(xiàng)目,通過AppWizard生成一個(gè)單文檔應(yīng)用程序框架完成新項(xiàng)目的建立。
為了將Vega的基本程序框架合理地嵌入到單文檔應(yīng)用程序框架中,必須在適當(dāng)?shù)臅r(shí)機(jī)啟動(dòng)一個(gè)Vega線程,由該線程完成虛擬場(chǎng)景的驅(qū)動(dòng)和渲染??梢栽贑View類和CMyView類之間再插入一個(gè)CVegaView類,在這個(gè)CVeg aView類中加入Vega線程代碼及其啟動(dòng)函數(shù),并在該線程中嵌入Vega的各個(gè)相關(guān)功能(主要為上述的建立Vega程序的3個(gè)步驟)。
由于是派生自CView類,CVegaView就擁有所有CView類的成員函數(shù)和消息映射。我們還必須為其添加專門的成員函數(shù)以完成建立Vega應(yīng)用程序的必要步驟。其中最主要的函數(shù)就是RunVega(),它的作用就是開啟Vega渲染線程和一些必要的初始設(shè)置。函數(shù)的主要代碼如下:
void CVegaView::RunVega(void )
{
vegaThread=afxBeginThread( RunVegaApp, this);
win=vgGetWin( 0 );
chan=vgGetChan( 0 );
obs=vgGetObserv( 0 );
scene=vgGetScene( 0 );
vgProp(win,VGWIN_WINBORDER,0);
}
線程函數(shù)RunVegaApp()是一個(gè)全局函數(shù),作為啟動(dòng)Vega線程的入口,完成Vega函數(shù)“初始化、定義、系統(tǒng)配置”和仿真循環(huán)的計(jì)算,其基本內(nèi)容如下:
UINT RunVegaApp(LPVOID pParam )
{
CVegaView*pOwner= (CVegaView*)pParam;
vgInitWinSys( AfxGetInstanceHandle(),
pOwner->GetSafeHwnd() );
vgDefineSys( pOwner->getAdfName() );
vgConfigSys();
while(pOwner->getContinueRunning())
{
vgSyncFrame ();
vgFrame ();
……. //系統(tǒng)仿真的相關(guān)運(yùn)算等操作
}
vgSyncFrame();
return 0;
}
至此,Vega渲染的函數(shù)就已經(jīng)基本完成,為了讓場(chǎng)景渲染到MFC的View里,還必須把主程序的View類 (假設(shè)為CMyView)的基類改成所引入的CVegaView類,也就是說,MFC的View就是Vega場(chǎng)景渲染區(qū)域,這也是我們?cè)O(shè)計(jì)CVegaView類的初衷。更改了基類之后,同時(shí)也要把該類的消息映射宏的基類參數(shù)進(jìn)行修改。在各文件中包含了適當(dāng)?shù)念^文件之后,一個(gè)完整的基于MFC的Vega應(yīng)用程序基本完成。
在飛行仿真過程中,可以配合鼠標(biāo)或鍵盤使多個(gè)視窗在主窗口和輔助窗口中切換,從而使重要視窗更便于觀察。由于Vega主循環(huán)每循環(huán)一次虛擬場(chǎng)景刷新一幀,因此我們?cè)赩ega主循環(huán)每循環(huán)一次時(shí)完成一次導(dǎo)彈數(shù)學(xué)模型的數(shù)值求解積分,并由計(jì)算求得的導(dǎo)彈空間位置和姿態(tài)位置來設(shè)置導(dǎo)彈在當(dāng)前幀中的位置。
該模擬器將基于計(jì)算機(jī)數(shù)值解法的彈道仿真和基于Visual C++的Vega虛擬現(xiàn)實(shí)仿真技術(shù)有機(jī)地結(jié)合在一起,實(shí)現(xiàn)導(dǎo)彈飛行的可視化。
圖2 導(dǎo)彈模擬器的視景仿真效果Fig.2 Scence simulation result of missile simulator
導(dǎo)彈模擬器是快速有效形成戰(zhàn)斗力的必需。本文研究了某型導(dǎo)彈的運(yùn)動(dòng)模型,提出了某型導(dǎo)彈模擬器的設(shè)計(jì)思路;建立了基于MFC的Vega應(yīng)用程序開發(fā)過程,實(shí)現(xiàn)了某型導(dǎo)彈模擬器的研制。
[1]喬海巖,可偉,姚廷偉.艦船及艦載導(dǎo)彈運(yùn)動(dòng)軌跡模擬器設(shè)計(jì)[J].艦船科學(xué)技術(shù),2012(34):30-47.QIAO Hai-yan,KE Wei,YAO Ting-wei.Design of the ships and sea-based missile track simulator[J].Ship Science and Technology,2012(34):30-47.
[2]史震.運(yùn)動(dòng)控制系統(tǒng)[M].北京:清華大學(xué)出版社,2008.
[3]龔卓蓉.LynX圖形界面[M].北京:國(guó)防工業(yè)出版社,2002.
[4]洪炳镕,蔡則蘇,唐好選.虛擬現(xiàn)實(shí)及其應(yīng)用[M].北京 :國(guó)防工業(yè)出版社,2005.
[5]胡小強(qiáng).虛擬現(xiàn)實(shí)技術(shù)[M].北京:北京郵電大學(xué)出版社,2005.
[6]孟曉梅,劉文慶.MultiGen Creator教程[M].北京:國(guó)防工業(yè)出版社,2005