劉榮華,溫垚珂,閆文敏,劉蘇蘇
(1. 南京理工大學機械工程學院,江蘇 南京 210094;2. 瞬態(tài)沖擊技術(shù)國防科技重點實驗室,北京 102202;3. 中國兵器工業(yè)第208研究所,北京 102202;4. 南通大學機械工程學院,江蘇 南通 226019)
人體易損性評估軟件可以快速評估各類殺傷元對人體靶標的殺傷效應,結(jié)合具體作戰(zhàn)任務還可評估人員的失能情況。為了在軟件界面快速直觀地再現(xiàn)槍彈侵徹過程及其在人體靶標內(nèi)造成的瞬時空腔膨脹過程,就需要結(jié)合相應終點彈道理論模型數(shù)據(jù),在軟件中虛擬再現(xiàn)侵徹過程。目前,對基于各類外彈道方程的槍彈和導彈飛行過程虛擬再現(xiàn)技術(shù)研究較多,對槍彈終點彈道的虛擬再現(xiàn)技術(shù)罕有文獻報道[1]。
張進強等人[3]通過構(gòu)建OpenGL的三維視景仿真環(huán)境,實現(xiàn)了基于數(shù)值仿真實時驅(qū)動的彈道可視化仿真平臺,對炮彈的飛行軌跡、實時運動姿態(tài)進行了仿真和分析。吳楓等人[4]利用虛擬現(xiàn)實技術(shù)、數(shù)據(jù)可視化技術(shù)等,構(gòu)建了一個航天發(fā)射可視化仿真平臺,并開展了相應可視化仿真應用案例。薛志斌等人[5]為降低工作量,通過專業(yè)三位建模軟件3DS MAX建立模型,并用C++語言將3DS文件導入OpenGL中,實現(xiàn)可視化以及人機交互控制。程翔等人[6]對六自由度算法模型進行了改進,實現(xiàn)了導彈六自由度彈道三維仿真,該仿真能夠真實可靠并且清晰直觀的反映導彈的六自由度彈道特性,其可視化效果良好。文雷[7]利用計算機圖形技術(shù),構(gòu)造導彈的三維模型并通過快速載入實體模型的方法載入OpenGL,最終實現(xiàn)了導彈飛行仿真,為導彈飛行軌跡研究提供了一種直觀、便捷的仿真分析方法。
目前,已有研究大都針對三維模型實時位移、旋轉(zhuǎn)實現(xiàn)了仿真[8],[9],但侵徹過程中的瞬時空腔是一個形狀實時變化的三維模型,動態(tài)變形特點給傷道仿真帶來困難。本文基于OpenGL設計了槍彈侵徹仿真程序,程序可以實現(xiàn)對槍彈侵徹全過程的三維可視化。通過引入阻力系數(shù)和升力系數(shù),建立槍彈運動和瞬時空腔運動模型。經(jīng)過與實驗對比發(fā)現(xiàn)模型具有良好的準確性。依據(jù)模型,獲取侵徹過程槍彈運動與空腔變形的實時數(shù)據(jù),設計算法實現(xiàn)對子彈運動和空腔運動的可視化仿真,為動態(tài)變形的三維模型仿真提供了一些參考。
在槍彈侵徹明膠過程中,槍彈的受力主要隨槍彈與明膠有效接觸面積變化,其中面積分離率和彈頭長徑比是描述有效接觸面積的重要因素。劉蘇蘇[8]通過分析侵徹過程中的不同方向受力,提出了阻力系數(shù)和升力系數(shù)與翻轉(zhuǎn)角的關(guān)系式,從而建立步槍彈在明膠中的運動模型和瞬時空腔運動模型。
當槍彈以非零度攻角侵徹明膠時,槍彈在明膠中的運動可以分為:質(zhì)點平動和繞質(zhì)心的轉(zhuǎn)動[11]-[13]。隨著槍彈翻轉(zhuǎn)角的增加,槍彈與明膠的有效接觸面積增大,因而槍彈不斷受到一個翻滾力矩的作用;與此同時,槍彈翻轉(zhuǎn)過程中,槍彈尾部會受到明膠的阻礙作用,從而形成一個阻尼力矩,始終阻礙槍彈的翻轉(zhuǎn)。結(jié)合這兩個在槍彈上作用相反的力矩,建立方程(1)。
質(zhì)點平動中受力分為水平方向的阻力和豎直方向的升力。關(guān)于阻力,通過引入空氣動力學中的阻力系數(shù),建立阻力模型。阻力的大小主要取決于有效接觸面積的大小。根據(jù)槍彈在明膠中翻轉(zhuǎn)的角度,可將翻轉(zhuǎn)分為三個階段即窄傷道段、快速翻轉(zhuǎn)階段、阻尼振蕩階段,并分別建立有效接觸面積與翻轉(zhuǎn)角的關(guān)系方程。結(jié)合升力的作用,引入升力系數(shù)最終建立方程(2)(3)(4)。
(1)
(2)
(3)
圖1圖2是以上理論模型與實驗結(jié)果的對比。從圖中可以看出,理論模型得到的數(shù)據(jù)與實驗結(jié)果重合度很好,這表明該理論模型能夠較為準確的反映侵徹過程。
圖1 侵徹深度隨時間變化曲線
圖2 翻轉(zhuǎn)角度隨時間變化曲線
取明膠深度S處,軸向厚度為ds的截面為研究對象,依據(jù)動能定理計算得到彈頭在該截面釋放的能量dEs。當該截面空腔膨脹至最大時,認為截面動能為0,變形能量最大,且該層明膠具有最大能量dEp??紤]到由于攻角的存在,彈頭會出現(xiàn)翻滾現(xiàn)象,明膠分層之間存在能量交換,分層能量不守恒,即dEs≠dEp。通過假設分層之間的能量交換與彈頭釋放能量和所有截面中彈頭最大釋放能量的差值正相關(guān),建立明膠截面的最大變形能與彈頭釋放能量的關(guān)系表達式。又考慮彈頭翻轉(zhuǎn)帶來的影響,引入彈頭有效接觸面積和明膠粘彈性的影響,表示截面變形能和動能之間的關(guān)系。最終瞬時空腔運動模型如下
(4)
圖3是是以上理論模型與實驗結(jié)果的對比(某7.62mm槍彈,入靶速度701m/s)。從圖中可以看出,理論模型可以很好地模擬空腔從開始膨脹到閉合運動過程的空腔輪廓。
圖3 理論模型結(jié)果與實驗結(jié)果典型時刻對比[8]
OpenGL庫一般包含兩個基本庫,一個用來實現(xiàn)開窗,另一個管理OpenGL函數(shù)指針[1][2]。實現(xiàn)這兩個功能的庫有很多。采用當前成熟、穩(wěn)定的GLFW、GLEW庫?;经h(huán)境的搭建需要將這兩個庫加載、驅(qū)動,其中初始化的關(guān)鍵語句如下:
表1 OpenGL初始化關(guān)鍵語句
OpenGL渲染模型的過程,是由CPU對模型數(shù)據(jù)(頂點、法線、紋理)進行讀取、處理,再將數(shù)據(jù)傳遞至GPU進行渲染顯示。對于復雜的幾何模型,手動輸入模型的頂點、法線和紋理坐標數(shù)據(jù)是極為困難的,其效率也較低。模型加載可以將建立好的幾何模型導入程序之中,極大提高了復雜場景可視化的效率。
在3dmax軟件中,畫出槍彈彈頭的幾何模型,保存為obj格式文件。利用ASSIMP模型加載庫將子彈模型加載到程序之中。在OpenGL中,模型的幾何數(shù)據(jù)以矩陣的形式進行操作,模型的幾何變換是由矩陣乘以相應的變換向量、矩陣實現(xiàn)的。GLM是一個專門為OpenGL量身定做的數(shù)學庫,該庫可以幫助得到幾何變換相應的矩陣。
利用函數(shù)glm∷mat4建立一個單位矩陣,通過glm∷translate、glm∷scale、glm∷rotate函數(shù)對單位矩陣進行變換,得到平移、縮放、旋轉(zhuǎn)的變換矩陣。其中g(shù)lm∷rotate()函數(shù)需要一個向量作為自變量,幾何模型會以該向量作為旋轉(zhuǎn)軸進行旋轉(zhuǎn)。這個旋轉(zhuǎn)軸向量的起點為子彈質(zhì)心,方向與旋轉(zhuǎn)平面垂直。而子彈在做平移時,質(zhì)心會不斷變化,使該旋轉(zhuǎn)向量需要不斷隨之變化。為解決該問題,使用一個函數(shù),因變量是初始旋轉(zhuǎn)軸向量和質(zhì)心動態(tài)坐標,函數(shù)返回一個不斷隨著質(zhì)心平移的旋轉(zhuǎn)軸向量。
子彈的運動分為質(zhì)心的平動和繞質(zhì)心的旋轉(zhuǎn),由運動方程求解,得到子彈隨時間的位移和翻轉(zhuǎn)角度數(shù)據(jù)。將子彈的位移值和翻轉(zhuǎn)角度數(shù)據(jù),作為變換矩陣的變換量,隨時間不斷切換到對應的值。最終實現(xiàn)子彈模型的運動可視化效果。圖4是子彈典型時刻姿態(tài)與實驗對比圖,從圖中可以看出,通過程序?qū)崿F(xiàn)的子彈運動可視化效果與實驗中較為符合。
圖4 子彈典型時刻姿態(tài)與實驗對比圖
圖4中,a:實驗高速攝影拍攝的子彈在明膠中運動過程,b:槍彈侵徹過程可視化效果。
目前OpenGL渲染圖形,主要應用于不變化模型的渲染,而對實時變換形狀的模型渲染少有應用。瞬時空腔是一個典型的幾何形狀隨時間不斷變換的模型,傳統(tǒng)的方式難以處理。OpenGL渲染的基礎圖元是三角形,將瞬時空腔劃分為有限多個三角形,并實時變換三角形的數(shù)據(jù),最終實現(xiàn)瞬時空腔運動的渲染動畫。算法原理如圖5所示。
圖5 依據(jù)數(shù)據(jù)渲染空腔原理圖
圖6是槍彈侵徹明膠數(shù)值計算結(jié)果中,垂直彈道一截面典型時刻的等效應力圖[14]。從圖中可以看出,在垂直侵徹方向,瞬時空腔的形狀可以看作一個圓。為此,將瞬時空腔視作沿著侵徹深度排列的一系列圓組成,這些圓的位置和大小都會隨時間變化。將每一時刻的空腔分為一系列圓,通過方程求解,可以獲得這一系列圓的圓心位置和半徑。
圖6 空腔一截面等效應力圖[14]
如圖7a所示,在一系列圓上取點,再從相鄰兩個圓上取四個點如圖7b所示,由這四個點分別組成兩個互補為矩形的三角形。沿著圓上對所有點進行以上操作,即可將兩個圓之間,由三角形進行縫補,最終形成一個圓臺的形狀。對沿著侵徹深度的所有圓進行以上操作,最終可以獲得空腔的形狀。依照以上原理,將空腔沿著侵徹深度方向劃分為50個圓,每個圓上取8個點。為確定每個點的頂點三維坐標,對一系列圓心位移、半徑數(shù)據(jù)進行以下處理
圖7 圓上選取三角形頂點
Xi=X0;
(5)
Yi=Y0+R*sin(i*2pi/n);
(6)
Zi=R*cos(i*2pi/n);
(7)
X0、Y0、Z0=0是圓心的坐標,R是圓半徑,Xi、Yi、Zi是圓上第i個點的坐標,n是在圓上劃分點的個數(shù)。建立一個循環(huán)將沿著圓上各點坐標求得,放入數(shù)組。(OpenGL坐標系遵循右手定則,在屏幕上向右為X正方向,向上為Y正方向,垂直屏幕向里是Z正方向)
OpenGL中渲染三角形,頂點數(shù)據(jù)需要按照逆時針三角形的順序排列。按照如圖7b的順序?qū)⑺许旤c排序從新放入數(shù)組。根據(jù)理論模型求解每一時刻的空腔數(shù)據(jù)較為繁瑣,因此只選取10個時間間隔相同的典型空腔數(shù)據(jù),并通過對數(shù)據(jù)進行插值計算,得到豐富的數(shù)據(jù),來驅(qū)動可視化仿真,以保證畫面的流暢性和變形過程清晰的展現(xiàn)。最后將該數(shù)組作為頂點數(shù)據(jù)傳遞至GPU進行渲染。
經(jīng)過對算法的測試,結(jié)果表明,該算法可以很好的呈現(xiàn)空腔的動態(tài)變形過程。截取典型時刻的空腔形狀,如圖8。
圖8 典型時刻空腔形狀
依據(jù)上述子彈運動模型和瞬時空腔運動模型,以某7.62mm槍彈為例,使用Matlab對微分方程組求解獲取數(shù)據(jù)。結(jié)合C++語言編寫的侵徹過程可視化程序,實現(xiàn)槍彈侵徹明膠的可視化,從而更快速直觀的觀察侵徹發(fā)生過程中的現(xiàn)象。
初始條件為:X方向位移為0,Y方向位移為0,偏轉(zhuǎn)角為0,X方向速度為700m/s,Y方向速度為36.678 m/s,偏轉(zhuǎn)角速度為0。
圖9是通過可視化程序?qū)崿F(xiàn)的槍彈侵徹明膠場景,并和實驗照片進行了對比。從圖中可以看出空腔的形狀與實驗高速攝影相似,可以較為真實地展示空腔的變形過程。經(jīng)過驗證,設計的算法可以將子彈侵徹明膠過程中空腔的動態(tài)變形完整的呈現(xiàn)。利用該程序可以進行各種初始條件的仿真,形象地預測傷道的形狀,為后續(xù)將其投影到人體上進行不同位置損傷評估有重要支撐作用。
圖9 可視化空腔與實驗典型時刻對比圖
1)建立的槍彈侵徹明膠運動方程可以較準確的描述槍彈侵徹過程中槍彈在明膠內(nèi)的侵徹深度和翻滾角度變化歷程。
2)建立的明膠內(nèi)瞬時空腔運動方程可以較準確描述明膠內(nèi)瞬時空腔的形狀輪廓隨時間和空腔的演化過程。
3)基于OpenGL技術(shù)開發(fā)的傷道可視化軟件可以快速直觀的再現(xiàn)槍彈侵徹人體模擬靶標過程中傷道的形成過程,為人體易損性評估軟件提供準確的人體損傷數(shù)據(jù)。