齊竹昌,劉 莉,龍 騰,邢 超
(北京理工大學宇航學院,北京 100081)
隨著計算機技術的發展,視景仿真技術在導彈武器研發中的應用越來越廣泛。視景仿真技術采用計算機技術、圖形圖像技術、三維建模顯示技術,根據仿真目的,構造出仿真對象的三維模型及仿真場景,再現真實環境,使用戶產生身臨其境的感覺。視景仿真技術現已成為彈道設計、航跡規劃等一種直觀、便捷的仿真分析手段[1]。
彈道視景仿真是將彈道仿真與視景仿真相結合,通過視景畫面展現彈道仿真過程,避免了直接分析數據的枯燥性,方便了設計人員對導彈飛行中狀態信息變化情況的分析。傳統的彈道視景仿真設計流程中,通常將彈道仿真與視景仿真相分離,先進行彈道仿真,生成仿真結果數據文件,再通過視景仿真讀取文件中的數據驅動視景畫面更新[2-3]。這種設計流程易于程序實現,但不夠靈活。在彈道設計階段,需要不斷修改彈道設計參數,每次修改都要生成一個數據文件,使仿真過于煩瑣。同時對于視景仿真畫面的更新,通常直接采用幀循環進行驅動,而未對畫面更新時間進行限制。由于計算機處理速度很快,通常視景仿真時間遠小于導彈真實飛行時間,即畫面更新太快,對于飛行時間較短的戰術導彈而言,設計人員很難在如此短的時間內看清楚導彈飛行狀態的變化。文獻[2]通過建立導彈視景仿真模型并調用Vega API函數完成了導彈飛行視景仿真,文獻[3]以反坦克導彈為對象基于Visual C++和Vega進行了導彈虛擬仿真系統的開發,并將彈道仿真嵌入視景仿真中,但二者都未對仿真過程進行準實時性設計。所謂準實時仿真是指彈道視景仿真過程與導彈真實飛行過程在時間上基本一致。
文中通過分析導彈視景準實時仿真中存在的難題,基于Vega Prime對彈道視景準實時仿真進行了研究,建立了彈道視景仿真模型,分析了彈道視景仿真實現流程及關鍵技術。針對仿真中存在的問題,在Windows平臺下通過定制高精度多媒體定時器實現了仿真的準實時性,以內存映射文件技術實現了彈道仿真程序與視景仿真跨進程的數據交互,最后在.NET框架下選用C++編程完成了彈道視景準實時仿真程序的開發。
彈道視景仿真模型包括彈道仿真模型與視景仿真模型,彈道仿真模型即導彈飛行動力學數學模型,視景仿真模型包括導彈三維模型、地形場景模型及二者組成的視景仿真文件。
導彈是受多種力和力矩作用產生多種運動狀態的復雜系統。導彈飛行動力學數學模型由導彈動力學方程、運動學方程、控制方程、幾何關系方程及質量方程等組成。進行彈道仿真時,彈道仿真程序通過建立導彈飛行動力學模型,同時建立當地的大氣模型和發動機推力模型等,外加一定的控制導引方程,在給定初始條件下,采用一定的仿真算法(一般是積分算法)和仿真步長,對導彈飛行全過程進行仿真,得到導彈在任一時刻的位置和姿態。為了在Windows平臺下與視景仿真程序進行數據交互,選用C++語言在.NET框架下對彈道仿真程序進行設計與開發。
1.2.1 導彈三維模型
導彈三維模型是彈道視景仿真的仿真對象,模型的精細程度決定了視景仿真結果的逼真度。導彈通常是由頭部、中部、尾部和彈翼組成,各部分分別以不同的參數進行描述,如表1所示。使用Multigen Creator[4]創建導彈三維模型時,首先是在Multigen Creator中根據導彈的幾何外形參數通過點、線、面、體的順序進行建模,并采用拉伸、旋轉、布爾等操作,創建出導彈的三維模型,最后通過貼圖進行視覺渲染,使模型顯示更加逼真。通過Multigen Creator創建的導彈三維模型如圖1所示。

圖1 導彈三維模型圖

表1 導彈參數描述表
1.2.2 仿真地形場景模型
仿真地形場景是描述導彈真實飛行的地形環境,地形場景建模的目標是得到高低起伏符合實際情況的地形地表輪廓。為了增加仿真場景逼真性,需要構建房屋、道路、河流、樹木等標識特征。文中主要討論戰術導彈的彈道準實時視景仿真,導彈的射程較近,因此仿真場景不需太大,使用Multigen Creator三維地形工具根據地形的高程數據來構建地形模型,并使用紋理和貼圖技術,以增加仿真場景的真實性和細節程度。
1.2.3 視景仿真文件
使用Multigen Creator創建的導彈三維模型和地形場景模型并不能直接用于視景仿真,而需要通過Vega Prime[5]進行加載配置,構建成視景仿真文件。視景仿真文件的創建是利用Vega Prime將導彈三維模型(.flt)與地形場景模型(.flt)相結合,生成.acf視景仿真文件,從而省去大量的編程操作,極大的降低了仿真成本。同時,為了便于從不同角度不同位置觀察導彈的飛行狀態,利用Vega Prime在仿真環境中加入不同的觀察點和觀察通道;為了增加仿真的逼真性,在仿真環境中加入碰撞檢測和碰撞特效,視景仿真文件創建流程如圖2所示。

圖2 視景仿真文件配置流程
通過彈道仿真可以得到不同時刻導彈的位置和姿態等飛行狀態信息,視景仿真程序需要將這些仿真結果數據實時地接收并應用于視景仿真中,來更新視景畫面中導彈的位置和姿態,即存在彈道仿真與視景仿真之間跨進程的數據交互問題。同時,用計算機進行彈道數學仿真可在瞬間完成,仿真所花時間遠小于導彈真實飛行時間,在如此短的時間內,分析人員很難看清導彈飛行狀態的變化,即存在仿真實時性問題。因此,如何解決彈道視景仿真的實時性問題和彈道仿真程序與視景仿真程序之間快速數據交互問題成為彈道視景準實時仿真所必須解決的兩大難題。
針對此問題,文中通過定制高精度多媒體定時器實現彈道仿真的準實時性,即計算機仿真所花費時間與導彈的真實飛行時間基本相同,在視景仿真中同樣采用高精度多媒體定時器對畫面幀更新進行控制,以保證彈道仿真結果數據與視景仿真所顯示畫面相一致,視景仿真畫面顯示時間與真實飛行時間基本相同。通過內存映射文件技術將彈道仿真結果數據在彈道仿真程序和視景仿真程序不同進程間進行交互,實現數據共享。彈道視景準實時仿真的基本框圖如圖3所示,彈道視景準實時仿真由三部分組成,彈道仿真模塊、視景仿真模塊及由內存映射文件構成的跨進程數據交互模塊。

圖3 彈道視景準實時仿真框圖
在彈道仿真和視景仿真中加入定時器,使彈道解算和視景畫面更新能夠以固定時間間隔進行,同時使定時器的時間間隔與彈道仿真步長一致,如此便能保證彈道仿真的實時性。為了使彈道仿真有足夠的計算精度,積分步長不應太大,文中仿真步長選取為1ms,因此所需的定時器定時精度也應達到1ms。
微軟公司在Windows中提供了精確定時器的底層API支持,利用Windows多媒體定時器可以很精確地讀出系統的當前時間,定時精度可達1ms,并且能在非常精確的時間間隔內完成一個事件、函數或過程的調用[6]。因此,選用1ms的積分步長,不僅能夠滿足彈道仿真的計算精度,同時使定時器滿足精度要求;對于視景顯示方面,由于人眼視覺暫留作用的影響,當畫面更新速率達到25幀/s以上時,觀察者看到的是流暢的畫面,采用1ms定時間隔可以完全保證視景顯示的流暢性。
由于多媒體定時器不依賴于消息機制,而是產生一個獨立的線程,因此,在處理定時過程中需要用到多線程技術。采用多線程技術可以使應用程序更好的利用系統資源,更充分利用CPU的空閑時間片,用盡可能少的時間來對用戶的要求做出響應,使程序整體運行效率得到較大的提高,同時也增強了應用程序的靈活性。因此,多線程技術的采用極大的減小了定時器對彈道實時解算的影響。
為了盡量減少數據傳輸對定時器工作的影響,數據傳輸應采用一種快速高效的傳輸方法或機制,文中采用了內存映射文件技術來解決彈道仿真與視景仿真之間的數據傳輸問題。內存映射文件是一種程序間數據快速交互的方法,是目前使用最廣泛的數據共享與通信技術,尤其適用于管理大型數據流以及在單個計算機上運行的多個進程之間的數據交互[7]。文中采用內存映射文件技術在彈道仿真程序中將彈道仿真結果數據讀入到共享內存中,而在視景仿真程序中通過讀取內存中的數據來驅動視景仿真畫面的更新,從而實現了彈道仿真與視景仿真不同進程間的快速數據交互。
圖4為彈道視景準實時仿真的設計流程,由彈道仿真程序和視景仿真程序兩部分組成。在彈道仿真程序中,首先進入彈道仿真主線程,在主線程中需要為1ms多媒體定時器創建一新的線程,在定時器線程中完成多媒體定時器的創建、彈道的解算及仿真結果數據的發送。1ms定時器創建完成后開始工作計時,當1ms時間間隔未到達時,積分解算函數處于等待狀態;當1ms時間間隔到達時,積分解算函數進行彈道求解,并將解算得到的彈道參數通過內存映射文件讀入指定的內存塊中,同時更新積分初值,然后判斷彈道仿真時間是否到達定時器預設值,若到達,定時器工作結束,刪除定時器,結束定時器線程,彈道仿真結束;若未到達,定時器繼續計時,進行彈道積分解算,直到仿真時間到達定時器預設值。
在視景仿真程序中,首先進入視景仿真主線程,仿真開始后,需要對Vega Prime運行環境進行初始化,然后對配置完成的視景仿真ACF文件進行加載,該文件包含了視景仿真的仿真對象、仿真場景及觀察視窗和特效。下一步是對仿真對象(導彈和目標)定義和配置,完成仿真對象的初始位置和姿態的定義,然后進入仿真循環。在仿真循環中同樣需要創建1ms多媒體定時器線程,1ms定時器創建完成后開始計時,當1ms時間間隔未到達時,畫面保持;當1ms時間間隔到達時,通過內存映射文件從彈道仿真指定的內存塊中讀取導彈和目標的運動參數驅動視景畫面更新。當仿真計時未到達預定值時,定時器繼續計時工作,實時更新畫面;當仿真計時到達預設值時,仿真循環結束,刪除定時器,結束定時器線程,取消對象應用,退出Vega Prime應用程序環境,視景仿真結束。在彈道視景仿真中,為了使仿真更具有通用性,將彈道仿真程序與視景仿真程序相互獨立開來,通過在視景仿真中調用彈道程序的方式實現彈道仿真與視景仿真的結合,由此便完成了彈道視景準實時仿真的程序開發。

圖4 彈道視景準實時仿真流程圖
文中以反坦克導彈為例進行了彈道視景準實時仿真程序的開發,在.NET框架下采用 C++調用Windows多媒體定時器、多線程、內存映射文件及Vega Prime API編寫完成了彈道視景準實時仿真程序,圖5為彈道視景準實時仿真程序運行效果圖,仿真了導彈從發射準備段到命中目標的全過程,為了增加對目標的毀傷效果,在彈道設計中采用了二次爬升彈道方案,大大增加了導彈命中目標時的擊頂落角,從圖6中可以清晰地看到,導彈在命中目標時的擊頂落角近45°,證明了二次爬升彈道的可用性。同時,通過仿真畫面可以清楚地看到導彈在飛行過程中姿態的變化情況及二次爬升彈道的飛行軌跡。為了便于觀察分析,將視景仿真視場分成四部分,即主視場、目標視場、導彈俯仰視場和導彈偏航滾轉視場。通過不同的視場分析人員可以清晰地看到導彈飛行過程中的姿態位置變化和目標運動狀態。為了增強仿真的逼真性,在仿真場景中增加了碰撞檢測和煙火、粒子等特效,當導彈命中目標時,目標起火并飛散出粒子碎片,導彈命中目標時的效果如圖6所示。

圖5 彈道視景準實時仿真結果圖

圖6 導彈命中目標特效圖
文中分析了基于Vega Prime的彈道視景準實時仿真流程及其關鍵技術,采用多媒體定時器、多線程技術實現了彈道視景仿真的準實時性,采用內存映射文件技術實現了彈道仿真與視景仿真間的快速數據交互,在.NET環境下采用C++進行編程,實現了反坦克導彈攻擊目標全過程的彈道視景準實時仿真,設計人員可以通過視景仿真畫面直觀清晰的觀察導彈的飛行過程,為彈道設計合理性分析提供了參考。
[1]凌鋒.飛行視景仿真系統研究與開發[D].西安:西北工業大學,2003.
[2]蘇森煜,張曉東,婁術根,等.基于Vega的導彈飛行視景仿真[J].沈陽航空工業學院學報,2010,27(2):20-23.
[3]唐勝景,汪群山,王憲宗,等.基于Visual C++和Vega的導彈虛擬飛行仿真系統[J].北京理工大學學報,2007,27(5):413-416.
[4]The Multigen Creator Desktop Tutor[M].Multigen Paradigm Inc,2008.
[5]Lynx Prime user’s guide[M].Multigen Paradingm Inc,2008.
[6]常發亮,劉靜.多線程下多媒體定時器在快速數據采集中的應用[J].計算機應用,2003,23(S1):177-178.
[7]孫文慶,劉秉權,肖鏡輝.基于內存映射文件的數據共享技術研究與應用[J].微計算機應用,2005,26(2):192-194.