譚哲卿,辛長范,闞 煌,高 鑫,史銘姍
(中北大學 機電工程學院,太原 030051)
制導彈藥一直是各國重點研究對象,為了節省實驗經費,盡可能減少實彈射擊次數,研發過程中需要進行大量的仿真實驗,其中彈道仿真是研究制導彈藥控制系統的重要手段[1-3]。早期常用的彈道仿真多為數值仿真[4-6],研究人員只能使用數值計算結果繪制二維的曲線來判斷制導系統的性能。后來出現了比較直觀的圖形仿真,其使用數值計算結果給圖形仿真提供真實的仿真數據。但是目前在彈道可視化研究中,常用的圖形仿真方法較為簡單,彈藥與目標的三維模型比較簡陋,作戰場景設置得比較理想,大多只能觀察制導彈藥的飛行姿態,難以展現實戰條件下制導彈藥從發射到命中目標的全過程。
文獻[7-10]在Simulink平臺上搭建了制導彈藥的六自由度彈道仿真模型并對可視化進行了一定研究,其使用的VRML、Vega Prime軟件開發難度高、開發周期長、僅能表現出制導彈藥飛行中的姿態,無法對戰場環境進行模擬,文獻[11]使用的MBVC平臺雖能簡單地表現戰場環境,但場景搭建復雜、畫面與現實世界差距較大。文獻[12-13]使用了FlightGear、OpenGL作為可視化平臺,但搭建過程復雜且缺少彈道的數值仿真部分。文獻[14-17]雖然都使用了Unity3D進行可視化仿真,但其中文獻[14]完全沒有數值計算過程,僅僅是單純的視景呈現。文獻[15-16]的仿真模型部分較為簡單,且文章中沒有體現數值仿真的計算過程,使仿真的真實度打了一定折扣。文獻[17]雖然有較為細致的數值計算過程,但其通過TXT文件將數值計算結果傳遞給Unity3D,總體仿真步驟較多,過程較為繁瑣。
為彌補以上不足,本文選擇Unity3D軟件作為可視化平臺,該軟件是一款結合了圖形、物理、音頻、網絡等多方面引擎的專業開發平臺,從發布至今已有十余年歷史,它的底層架構成熟、平臺的穩定性高,成熟的案例較多、開發相對簡單、開發周期短,圖形技術先進、顯示畫面生動。本文選擇的數值計算平臺是在制導彈藥彈道仿真中常用的Matlab/Simulink軟件,文獻[18-19]均進行了詳細的研究分析。將Simulink和Unity3D結合起來的聯合仿真模型能得到準確的數值仿真結果[20],也能多視角全方位的觀察制導彈藥的飛行姿態和彈道,從而較為逼真的展現戰場環境下制導彈藥的運動和對目標的探測和打擊過程。
本文的聯合仿真系統包括Simulink軟件中的制導彈藥彈道仿真模型和Unity3D軟件中的可視化窗口,前者包括描述制導彈藥運動的六自由度動力學和運動學方程組,使用Simulink編程工具將方程組搭建為圖形化的彈道仿真模型,搭建過程中使用Simulink自帶的圖形化用戶接口,能夠快速、準確地搭建仿真模型,且能保證仿真算法的可靠性[21]。可視化部分由Unity3D軟件、制導彈藥和目標的三維模型、真實世界的高程數據和衛星地圖、驅動模型運動的腳本文件組成。Unity3D支持fbx、obj、dxf等多種格式的三維模型,用戶可以根據需要添加彈藥或目標的模型。本文使用AutoCAD建立制導彈藥和目標的三維模型,對模型進行格式轉換后再導入到Unity3D中。在Unity3D中使用真實世界的高程數據和衛星地圖可以搭建出基于真實數據的三維場景模型,增添了可視化仿真的真實性。
Unity3D中的功能主要由腳本文件實現,腳本支持JavaScript、C#、Boo三種語言。本文中的腳本文件主要由C#語言寫成,除了使用UDP通信協議處理Matlab/Simulink端發送來的仿真數據,還可以實現三維模型的移動、攝像機的移動、特效展現等功能。整個系統的架構如圖1所示。

圖1 可視化平臺整體架構
本文在研究制導彈藥六自由度彈道可視化仿真的基礎上,創造性地加入一種數值可視化技術,在顯示制導彈藥彈道的同時,也能實時顯示制導彈藥在飛行過程中所受到的過載。
2.1.1 六自由度彈道仿真模型
在Simulink中搭建數值仿真時,為了方便修改和調試參數,常常將一個龐大且復雜的系統分成多個子模塊,并構建出各模塊之間清晰的輸入輸出關系,再將各個子模塊連接并封裝起來,從而建立起一個完整的Simulink仿真系統。制導彈藥的六自由度彈道仿真模型由4個子模塊構成,分別是彈體運動學與動力學模塊、氣動力模塊、制導模塊和目標運動模塊。
彈體動力學與運動學模塊用于解算制導彈藥在飛行過程中受到的力,力矩與運動相關參數之間的關系。為了設計穩定的姿態控制系統,需設立關于制導彈藥的六自由度運動學和動力學模型[22]。
氣動力模塊用于制導彈藥的氣動特性仿真,首先根據運動參數計算縱向與橫向的氣動力系數和氣動力矩系數,再根據氣動力和氣動力矩公式計算軸向力、徑向力、側向力、俯仰力矩、偏航力矩和滾轉力矩。具體計算公式取自此文[23]。
本文使用Missile Datcom計算該型制導彈藥的氣動參數,該軟件能夠根據飛行器的條件參數進行經驗數據的擬合并選取公式計算氣動系數和導數。將該彈的外形參數輸入Missile Datcom,即可得到帶有氣動系數、靜導數、動導數和操縱系數的“for006.dat”的輸出文件。在Matlab中使用命令“datcomimport”即可將Datcom計算結果導入Matlab工作區中以備使用。在仿真過程中將動力學與運動學模塊計算出來的飛行狀態參數和舵偏角導入到氣動力模塊即可得到該狀態下制導彈藥受到的空氣動力。
制導模塊分為導引頭子模塊與自動駕駛儀子模塊,導引頭子模塊根據目標和彈體之間的相對位置,計算出彈目距離和視線高低角、方位角等信息,再根據特定的導引規律形成過載指令信號輸出給自動駕駛儀模塊。自動駕駛儀模塊根據制導系統輸出的指令,通過一定的控制規律輸出舵機控制信號使舵面發生偏轉,從而產生改變導彈姿態所需要的力和力矩[24]。
目標的運動模塊在整個系統中用于模擬目標的運動狀態,各模塊的結構如圖2所示。

圖2 六自由度彈道Simulink模型
2.1.2 目標與制導彈藥建模
Unity3D引擎中使用的模型一般先在AutoCAD、3DMax等專業三維建模軟件中搭建好再導入到Unity3D中使用,Unity3D自身的建模功能比較簡陋,較難完成復雜模型的搭建。本文使用某型火箭彈和某型裝甲車作為彈藥和目標模型,先在AutoCAD軟件中建模后導出為stl格式,再使用blender軟件轉換為fbx格式后即可導入到Unity3D中使用。導入模型時要注意根據現實世界中的尺寸調整模型的比例,本文所使用的制導彈藥模型和目標車輛模型如圖3所示。

圖3 目標與彈藥的三維模型圖
2.1.3 三維地形建模
在Unity3D中對環境進行建模有許多成熟的方法和工具[25],一般使用引擎中的Terrian地形作為環境模型使用。Unity3D中的默認Terrian模型為2048 m×2048 m的正方形平面模型,制作者可以使用不同的筆刷來升高或降低Terrian模型的某一塊區域來構建各種地形,再對這個Terrian模型進行貼圖即可使用。
為了搭建地球上某一地點的真實地形,首先需要獲取該位置的高程圖和衛星影像圖。這兩種圖片可以使用互聯網上的免費或收費資源。高程圖的作用是作為Terrian模型的高度圖來生成模型的網格,而衛星影像圖則是作為Terrian模型的表面貼圖。
本文中的地形模型選取某省最高精度為30 m的ASTGTM地形高程數據,該數據為tif格式文件,需要在QGIS軟件中轉換為raw格式的文件并在Photoshop軟件中裁剪為2048 × 2048 像素的尺寸才可供Unity3D使用。
Unity3D也可以儲存多個搭建好的地形,仿真時可以根據需求切換不同環境。圖4為本文使用的高程圖與衛星影像圖,圖5為處理好后的真實地形模型。

圖4 高程圖與衛星影像圖

圖5 Unity3D中搭建好的地形模型
在高動態可視化場景中,系統需要及時地檢測模型之間的碰撞。Unity3D中內置有物理引擎PhysX,該引擎能快速、高效地完成碰撞檢測需求。PhysX引擎是通過掛載在三維模型上的以“Collider”(碰撞體)為結尾的組件進行碰撞檢測的,若三維模型沒有掛載“Collider”組件,則仿真運行時不對該模型進行碰撞檢測。Unity3D中的“Collider”組件根據形狀分為“BoxCollider”(方形碰撞體)、“SphereCollider”(球形碰撞體)、“CapsuleCollider”(圓柱形碰撞體)這樣的默認組件,也有供用戶自定義碰撞計算模型的”MeshCollider“(網格碰撞體)組件。
若需要檢測碰撞的物體模型幾何面較少,可以使用Unity3D自帶的“BoxCollider”、“SphereCollider”組件實現碰撞檢測。這種默認組件的運行速度快且占用計算資源少,缺點是結構比較單一。對于幾何面復雜的目標、為了保證碰撞檢測的準確性,需要使用“MeshCollider”組件進行檢測,此時可以使用自定義的模型網格作為碰撞體檢測網格。本仿真針對制導彈藥這樣瘦長的物體使用“CapsuleCollider”組件,針對目標車輛則使用“MeshCollider”組件。
設置好碰撞體后,就需要掛載相應的腳本檢測模型之間的碰撞并執行碰撞發生后的下一步動作。一般用“OnTriggerEnter”(進入觸發器)函數來執行下一步動作,例如碰撞發生后的爆炸特效和被命中目標的燃燒特效等。編寫好腳本后需要將其掛載在目標模型上,這樣程序開始運行時就可以執行腳本中的代碼。本文中制導彈藥和目標三維模型設置的碰撞體如圖6所示。

圖6 碰撞體模型

圖7 UDP數據通信協議
仿真系統建立完后,Matlab/Simulink需要將計算結果及時地傳輸到Unity3D中以驅動整個場景,現在主流通訊方式有傳輸控制協議/網際協議(TCP/IP,transmission control protocol/internet protocol)、控制器局域網總線(CAN,controller area network)等。TCP/IP作為一種以太網接口通信技術被廣泛應用在各種工控自動化行業中。TCP/IP中的用戶數據報協議(UDP,user datagram protocol)在數據傳輸前不需要建立連接,因此實時性較高,能快速傳輸數據。因為本仿真對實時性有較高的要求,故選擇UDP協議進行Matlab與Unity3D之間的通信。
為此,需要在Matlab/Simulink端和Unity3D端各自建立數據傳輸模塊,在Matlab端可以使用Simulink模塊庫中自帶的UDP發送與接收模塊,設置好IP地址和端口號后就可以進行數據的發送與接收。
在Unity3D端則需要設置數據接收腳本。接收腳本中的IP地址字符串和連接端口號要和Simulink中UDP發送模塊的值一樣,之后即可設置數據的接收循環。Unity端開始運行后,UDP接受腳本就會時刻監聽對應IP地址和端口廣播的數據,當Simulink的仿真開始并廣播數據后,Unity3D就能接收到制導彈藥和目標的位置、速度等數據。
傳統意義上的可視化仿真技術使用計算結果驅動模型運動,但在仿真進行時,無法一邊觀察三維模型的運動一邊觀察實時計算出來的數值大小。為了滿足仿真時能兼顧觀察模型運動姿態與數值結果的要求,本文提出一種數值可視化技術,其原理是每隔一個固定的時間間隔或一段固定的移動距離就在物體的運動軌跡上生成這一時刻的指示條,通過指示條的大小和方向來反映彈體在這一時刻的過載情況。
此時Unity3D端設置的生成條件為每隔一段固定的飛行距離就生成指示條。如圖8所示,圖中軌跡線是制導彈藥在飛行過程中質心位置形成的軌跡線,球體為當前時刻的質心位置,數字表示指示條生成時的飛行時間,“n_y=(數字)”表示當前位置彈體所受法向過載的數值大小,指示條的長度代表制導彈藥在彈體坐標系中所受法向過載的大小,指示條向下伸長表示此時的法向過載為負值,指示條向上伸長表示此時的過載值為正值。Simulink中的仿真模型設置了舵機在發射后4.00 s開始工作,圖8中能直觀地看到彈體在4.00 s開始產生向下的過載。

圖8 數值可視化示意圖
要讓仿真環境在運行時產生諸如模型運動、視角跟隨、尾焰與爆炸特效的生成、彈體軌跡的繪制等一系列行為,就需要編寫相應的行為腳本并掛載到對應的模型組件上運行。
以驅動模型運動的腳本為例,這種腳本就需要以一定的頻率從UDP數據接收腳本中獲取模型的新坐標,并將物體本身的舊坐標值不斷修改為新坐標值,從而轉化為三維模型的平動和轉動,模型運動腳本的作用原理如圖9所示,該腳本的作用為在仿真運行開始時實時從UDP接收腳本中獲取目標模型的坐標和姿態角數據,同時將模型本身的舊坐標和姿態角數據更改為新的坐標和姿態角數據。

圖9 控制物體運動腳本的工作原理
視角的設置是整個彈道可視化仿真中最重要的問題,設置的正確與否直接影響到最終的顯示結果。在Unity3D中,場景運行的最終結果會統一輸出到Game視窗。Game視窗顯示的畫面通過“Hierarchy”(層次視圖)中的“Camera”(攝像機)組件來實現,設置好攝像機組件的畫面范圍和位置后就可以將其拍攝到的畫面顯示在Game視窗上。
如圖10(a)所示,圖中線框顯示的就是側視圖攝像機的取景范圍。為了滿足制導彈藥飛行姿態和彈道的觀察需求,本文設置了4部攝像機,其中3個攝像機用來拍攝制導彈藥的三視圖視角,一個攝像機為自由視角,使用鼠標實現攝像機的移動和視角的縮放,如圖10(b)所示。

圖10 跟蹤攝像機的設置
在Unity3D中,火焰、煙霧和爆炸等特效均使用Unity3D編輯器內自帶的“ParticleSystem”(粒子系統)組件進行控制,該組件可以控制粒子的形狀、大小和持續時間等。本文使用“ParticleSystem”制作發動機尾焰和彈藥命中后目標產生爆炸的特效。
本仿真設定該型制導彈藥的發動機分為兩級工作,第一級工作時間為0.00~0.04 s,第二級工作時間為0.15~2.65 s。因此仿真中需要對發動機尾焰的表現時長進行控制,本文使用一個單獨的控制腳本,在檢測到發動機推力不為0時開啟尾焰特效,其余時間則關閉。同樣編寫一個腳本控制爆炸特效,使用“OnTriggerEnter”函數監測制導彈藥與目標的碰撞,在檢測到制導彈藥和目標車輛發生碰撞后使用“Instantiate”(實例化)函數生成一個爆炸特效。最終尾焰與爆炸特效的效果如圖11所示。

圖11 視覺效果圖
搭建好Simulink數值仿真模型和Unity3D三維仿真場景后,即可設定初始仿真參數,本文所使用的主要參數見表1所示。由于激光制導彈藥在攻擊過程中需要持續對目標進行照射,一旦敵方目標的激光告警器感知到激光的照射,那么敵方就可能啟動反制措施使制導彈藥無法命中。

表1 制導彈藥主要參數
因此,本文對制導彈藥攻擊目標的過程進行仿真,尋找在敵方存在反制措施的情況下,對不同運動狀態的目標進行激光照射的窗口期。
本仿真中主要通過Unity3D中的碰撞檢測來判斷制導彈藥是否命中目標,設置的條件為只要制導彈藥的三維模型和目標的三維模型發生接觸即判定為命中。此外,攻擊過程中需要滿足一定的約束條件,若仿真過程中的參數超過下列約束,則可以認為攻擊失敗:
1)被動段最小飛行速度限制:因本文中制導彈藥的彈翼所能提供的升力有限,因此在制導彈藥的無動力段速度低于某值時彈翼無法提供足夠的升力,從而視為喪失制導能力,本文設定最小飛行速度為180 m/s。
2)敵目標反制限制:在敵方目標的激光告警器感應到激光照射后會在一定時間內采取快速機動或釋放煙霧等反制措施使制導彈藥失去目標,本文設定敵方目標在感知到威脅后的4.0 s做出反制措施,反制措施執行1.0 s后制導彈藥失控。因此制導彈藥需要在激光照射有效的5.0 s內命中目標。
3)激光最小照射時間限制:由于反制措施的存在,攻擊方的激光照射時間有限,如果激光照射時間過小,則制導系統來不及修正軌跡造成脫靶。
4)飛行高度限制:若制導彈藥的飛行高度小于0 m,則視為攻擊失敗。
5)飛行時間限制:制導彈藥需要在彈上自毀裝置啟動前命中目標,自毀裝置的啟動時間為飛行開始后的第15.0 s。
4.2.1 目標為靜止狀態
假定紅方在距離發射點2 100 m處發現藍方靜止目標后發射制導彈藥,從發射到命中目標這段時間藍方目標保持靜止,首先假設藍方激光反制措施不工作,仿真顯示制導彈藥大約在9.73 s命中目標。那么可以得出在藍方激光反制措施正常工作時,紅方開始激光照射的時間t不能早于4.73 s,否則目標就會啟動反制措施使制導彈藥脫靶。接著以0.1 s為開啟激光照射的時間間隔,得出當激光開始照射的時間晚于8.7 s時,制導彈藥就會來不及進行機動而脫靶。從而得出紅方開始激光照射的時間既不能早于4.73 s,也不能晚于8.7 s,窗口期一共是3.97 s。仿真部分彈道如圖12所示,仿真途中的輸出界面如圖13所示。

圖12 照射開始時間t在8.8 s附近的彈道軌跡圖

圖13 攻擊靜止目標時,飛行時間為9.70 s時的輸出視圖
4.2.2 目標為運動狀態
假定紅方在距離發射點2 100 m處發現藍方運動目標后發射制導彈藥,從發射到命中目標這段時間藍方目標以10 m/s的速度向z軸負方向運動,首先假設藍方激光反制措施不工作,仿真顯示制導彈藥大約在9.76 s命中目標。那么可以得出在藍方激光反制措施開始工作時,紅方開始激光照射的時間t不能早于4.76 s,否則目標就會啟動反制措施。接著以0.1 s為開啟激光照射的時間間隔,得出當激光開始照射的時間晚于7.3 s時,制導彈藥就會來不及進行機動而脫靶。從而得出紅方開始激光照射的時間不能早于4.73 s,也不能晚于7.3 s,窗口期一共有2.57 s。仿真部分彈道如圖14所示,仿真過程中的輸出界面如圖15所示。

圖14 照射開始時間t在7.4 s附近的彈道軌跡圖

圖15 攻擊運動目標時,飛行時間為9.70 s時的輸出視圖
本文基于Siumlink和Unity3D軟件,建立了一種制導彈藥的六自由度彈道可視化平臺,可以實現制導彈藥從發射到命中目標的完整攻擊過程仿真。本文的應用實例表明該平臺能夠模擬目標的運動狀態對激光照射窗口期的影響,對制導彈藥的研制、使用和作戰決策提供一定的參考價值。后續將考慮更多的制導手段和場景設置,逐步拓展該平臺的仿真能力,進一步逼近真實的攻防對抗過程。