張千宇,郭 巍,張 楊
(海軍航空工程學院指揮系,山東 煙臺 264001)
模擬訓練以安全、經濟、可控、無風險、不受氣候條件和場地空間限制、既能按常規進行操作訓練、又能培訓處理各種事故的應變能力以及訓練的高效率、高效益等獨特優勢,一直受到各國軍方的高度重視,特別面對武器裝備日趨復雜化、購買武器費用不斷提高的現狀,致使世界各國軍事部門均將模擬器視為軍事訓練必不可少的甚至是唯一安全、經濟而有效的工具和手段,加以重點發展。美軍是世界上最早開展模擬訓練研究和應用的。其技術和裝備一直居于國際領先地位。長期以來,主要發展各類武器裝備的使用操作訓練模擬器,據統計,僅1995~2000年用于三軍的模擬裝備費用就高達36億美元。俄羅斯同樣是世界上的模擬訓練的大國和強國。應該說,俄羅斯在發展訓練模擬器上是不惜代價的,其數量約占世界之半,僅俄試飛院就擁有昂貴的空中飛行模擬器十余種。他們的先進武器裝備幾乎都編配有相應的訓練模擬器。西歐軍事強國(如英、法、德等國)也十分重視模擬訓練,模擬訓練技術及應用處于世界領先行列。
我國是發展和應用模擬訓練技術較早的國家之一。二十世紀六十年代初開始研制和使用射擊練習器和簡易飛行模擬器。二十世紀八十年代以來模擬訓練進入了迅速發展階段,先后研制成功殲-6、殲-7、殲-8D、轟-6C等飛行模擬器,及HQ-2、HQ-7、HQ-6、C-300等防空導彈武器的指揮控制模擬訓練系統。相繼掌握了計算機成像、圖形/圖像顯示技術、多媒體技術以及精確控制機體和彈體運動平臺技術等。二十世紀九十年代在分布式交互仿真(DIS)、虛擬現實(VR)和計算機生成兵力(CGF)技術等方面的研究和應用上獲得了跨越式發展。
隨著國防現代化的發展,武器系統規模日益龐大,技術更加先進和復雜,系統造價也更加昂貴,雖然訓練時出現危險性的可能性降低了,但是一旦操作不當,引起的破壞性和危險性卻大為增加。因此,提高訓練的經濟性、安全性、可靠性至關重要。為了較好的解決這一問題,需要有相應的模擬訓練系統能夠模擬實際裝備的工作環境和工作狀況,價格要低廉,能夠避免采用實裝進行訓練時的巨大危險性和高昂代價[1-2]。
某型導彈運動模型的建立可以為導彈攻擊的視景仿真或描述運動軌跡提供數據來源,使系統更加貼近實際,利于提高學習、訓練質量。
導彈運動模型的實現要盡量接近實際,以便能夠最大可能的反映出不同裝訂參數下導彈的運動狀態、軌跡等,最好能夠得到具體導彈的實際模型。
某型導彈的運動可以分解為隨質心的移動和繞質心的轉動。我們在進行導彈運動的控制時首先應確定其運動的坐標系:
Odxdydzd—表示大地坐標系
Ojxjyjzj—表示艦艇坐標系
OfxfyFzF—表示發射坐標系
O1x1y1z1—表示彈體坐標系
具體的坐標之間的關系如圖1所示。

圖1 某型導彈運動的坐標系Fig.1 Coordanition system of ship monted missile
有關導彈運動的一些相關參數是可以得到的,有了這些參數,可以利用現有的公式進行導彈速度的求解,得到導彈在任何時刻t的速度矢量,通過對這些速度矢量在各自的坐標軸上的積分,就可以得出導彈在某一時刻t時的運動狀態,包括導彈的空間坐標(x,y,z)、以及導彈的姿態角(偏航角、俯仰角、滾轉角)、導彈的速度(空速)。
導彈模擬器在整個系統中主要起到近似模擬實際的導彈在射前檢查、參數裝訂、發射控制、目標攻擊的過程中的姿態變化,配以一定的環境背景和逼真的視頻、音頻效果,渲染出臨近實戰的氛圍,有利于激發參訓者的戰斗意識,提高訓練的熱情和效率。
本文設計的模擬器在實現導彈運動的過程中所要達到的控制上的要求:
1)接收彈道計算仿真結果并據此控制導彈姿態。
2)仿真系統動畫演示及聲音媒體表現;
3)可視化駕馭功能,可以不同的視角對導彈狀態進行觀察。
在導彈模擬器上,主要仿真對象是導彈、艦艇。其中導彈的運動規律根據導彈空間運動模型和導彈導引率編寫;敵我艦艇運動假設只是考慮運動學關系,在勻速直線運動的基礎上根據來襲導彈的相對距離和方位進行機動。
在程序中為了能響應整個示教系統的各種操作,需要在收到網絡數據后,及時的進行判斷是否需要本系統做出反應,比如,在收到“開蓋”的指令后,若沒有設置“開蓋故障”,則在三維圖像顯示畫面中控制導彈發射架的蓋子打開,打開到位后使“開蓋到位”的標志量有效,并將更改后的數據發向網絡,而后控制臺會根據“開蓋到位”標志量點亮控制臺面板上的“開蓋到位”指示燈,模擬訓練系統其它部分的狀態顯示也會相應地進行更改。當有導彈發射后要邊解算導彈的運動模型邊驅動三維動畫,所以要在Visual C++環境下運行Vega應用程序。
Vega是虛擬現實軟件MultiGen的一部分。Vega的作用是將Creator制作的三維模型渲染成場景、在場景上瀏覽、查詢、實例演示。Vega由Lynx軟件、多種動態聯接庫(DLL)、函數庫(Lib)、應用程序接口(API)組成[3-6]。
在Visual C++中應用Vega首先要對頭文件和庫文件路徑進行如下設置:
1)在 Visual C++的菜單項“Tools”選項中,選擇“Directories”標簽,將“Show directories for:”選為“Include files”。
2)若“c:paradigmvegainclude”( c:paradigmvegainclude為Vega的安裝路徑)未出現在列表中,則將其添加進來。
3)再將“Show directories for:”選為“Library files”。
4)若“c:paradigmvegalib”未出現在列表中,則將其添加進來。
Vega應用程序的啟動步驟。
1)系統初始化:由函數vgInit Sys()完成初始化Vega系統并創建共享內存以及信號量等。
2)系統定義:由函數 vgDefineSys (“my.adf”)讀入 ADF文件,完成應用程序各個類的屬性的定義和初始化。
3)系統配置:通過調用函數vgConfigSys()完成配置并啟動系統。因此,每一個Vega應用程序都必須包含以下函數語句:
vgInitSys( ) ; //系統初始化
vgDefineSys (“Ddgj.adf”); //系統定義,載入“.adf”文件
vgConfigSys( ); //系統配置
while (1)
{
vgSyncFrame() ; //幀同步
vgFrame(); //幀顯示
…… //系統仿真代碼或入口
}
Vega應用程序每次執行主循環刷新顯示幀時,都要調用vgSyncFrame()和 vgFrame(),vgSyncFrame()函數完成幀同步,vgFrame()函數則完成幀的顯示。另外也可以在主循環中加入用戶的系統仿真模塊。
為了產生一個基于MFC的Vega應用程序,首先要生成一個基于MFC的Visual C++單文檔應用程序項目,通過AppWizard生成一個單文檔應用程序框架完成新項目的建立。
為了將Vega的基本程序框架合理地嵌入到單文檔應用程序框架中,必須在適當的時機啟動一個Vega線程,由該線程完成虛擬場景的驅動和渲染??梢栽贑View類和CMyView類之間再插入一個CVegaView類,在這個CVeg aView類中加入Vega線程代碼及其啟動函數,并在該線程中嵌入Vega的各個相關功能(主要為上述的建立Vega程序的3個步驟)。
由于是派生自CView類,CVegaView就擁有所有CView類的成員函數和消息映射。我們還必須為其添加專門的成員函數以完成建立Vega應用程序的必要步驟。其中最主要的函數就是RunVega(),它的作用就是開啟Vega渲染線程和一些必要的初始設置。函數的主要代碼如下:
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);
}
線程函數RunVegaApp()是一個全局函數,作為啟動Vega線程的入口,完成Vega函數“初始化、定義、系統配置”和仿真循環的計算,其基本內容如下:
UINT RunVegaApp(LPVOID pParam )
{
CVegaView*pOwner= (CVegaView*)pParam;
vgInitWinSys( AfxGetInstanceHandle(),
pOwner->GetSafeHwnd() );
vgDefineSys( pOwner->getAdfName() );
vgConfigSys();
while(pOwner->getContinueRunning())
{
vgSyncFrame ();
vgFrame ();
……. //系統仿真的相關運算等操作
}
vgSyncFrame();
return 0;
}
至此,Vega渲染的函數就已經基本完成,為了讓場景渲染到MFC的View里,還必須把主程序的View類 (假設為CMyView)的基類改成所引入的CVegaView類,也就是說,MFC的View就是Vega場景渲染區域,這也是我們設計CVegaView類的初衷。更改了基類之后,同時也要把該類的消息映射宏的基類參數進行修改。在各文件中包含了適當的頭文件之后,一個完整的基于MFC的Vega應用程序基本完成。
在飛行仿真過程中,可以配合鼠標或鍵盤使多個視窗在主窗口和輔助窗口中切換,從而使重要視窗更便于觀察。由于Vega主循環每循環一次虛擬場景刷新一幀,因此我們在Vega主循環每循環一次時完成一次導彈數學模型的數值求解積分,并由計算求得的導彈空間位置和姿態位置來設置導彈在當前幀中的位置。
該模擬器將基于計算機數值解法的彈道仿真和基于Visual C++的Vega虛擬現實仿真技術有機地結合在一起,實現導彈飛行的可視化。

圖2 導彈模擬器的視景仿真效果Fig.2 Scence simulation result of missile simulator
導彈模擬器是快速有效形成戰斗力的必需。本文研究了某型導彈的運動模型,提出了某型導彈模擬器的設計思路;建立了基于MFC的Vega應用程序開發過程,實現了某型導彈模擬器的研制。
[1]喬海巖,可偉,姚廷偉.艦船及艦載導彈運動軌跡模擬器設計[J].艦船科學技術,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]史震.運動控制系統[M].北京:清華大學出版社,2008.
[3]龔卓蓉.LynX圖形界面[M].北京:國防工業出版社,2002.
[4]洪炳镕,蔡則蘇,唐好選.虛擬現實及其應用[M].北京 :國防工業出版社,2005.
[5]胡小強.虛擬現實技術[M].北京:北京郵電大學出版社,2005.
[6]孟曉梅,劉文慶.MultiGen Creator教程[M].北京:國防工業出版社,2005