李春風 唐世軒
(91388部隊91分隊 湛江 524022)
依托虛擬現(xiàn)實技術而產(chǎn)生的視景仿真技術為研究艦艇的運動提供了一種新的方法。艦艇運動視景仿真技術能夠方便地研究艦艇的各種運動,對艦艇運動控制器的各種控制算法的有效性進行評價和檢驗,提供合理的算法和參數(shù),實現(xiàn)減少海上試驗次數(shù),降低試驗成本,縮短開發(fā)周期,優(yōu)化控制系統(tǒng)的目的[1]。艦艇運動視景仿真技術以其優(yōu)質(zhì)的圖形界面和生動的場景改變了以往數(shù)值仿真中只有專業(yè)人員才能看懂的局面,對知識的通俗化和普及也有著極其重要的價值。
本文主要研究艦艇運動響應的可視化問題。以艦艇運動數(shù)學模型理論為基礎并使用視景仿真技術來模擬艦艇在海浪中的運動,將艦艇的數(shù)值仿真轉(zhuǎn)換到圖像的可視化仿真,使仿真系統(tǒng)更加真實易懂。本仿真系統(tǒng)設計的目的就是將艦艇運動仿真的結(jié)果以虛擬現(xiàn)實的方式形象、逼真地再現(xiàn)出來,讓人們能以最直觀的方式感受到艦艇在海浪中是如何運動的。
艦艇在波浪中的運動是一種復雜的多自由度的運動,本文忽略了前進、橫移、轉(zhuǎn)艏運動與垂蕩、橫搖、縱搖運動之間的耦合,取附體坐標系原點在艦艇重心,建立二自由度艦艇運動線性數(shù)學模型如下
其中Izz為船體對Z軸的慣性矩,Yv、Yr、Nv、Nr、Y˙v、Y˙r、N˙v、N˙r、Yδ、Nδ為流體 動力導 數(shù),m為艦艇排水量,δ為舵角。
舵機伺服系統(tǒng)的模型,可以被視為一階慣性環(huán)節(jié),其時間常數(shù)為Tr,則有
其中δr為命令舵角。
由式(1)、式(2)和下述艦艇運動數(shù)學模型的輔助方程(3)即可進行仿真。
本文中的艦艇數(shù)學模型主要是求出每一時刻的艦艇運動參數(shù)v、r、δ、ψ、x0、y0為輸出的一階常微分方程組。為了便于計算機求解,將上面建立的動力學模型無因次化并變形如下:
其中
為了使所開發(fā)的視景仿真系統(tǒng)能夠更好的方便用戶使用,對該視景仿真系統(tǒng)的設計提出了以下要求:
1)具有良好的逼真度和實時性,具有逼真的海浪、天空環(huán)境及聲音效果;
2)提供多通道顯示功能,使用戶能同時觀看多個部件運動姿態(tài)和全局態(tài)勢;
3)能夠進行視點切換,多角度、多方位觀看艦艇運動姿態(tài);
4)能夠在屏幕上動態(tài)顯示艦艇實時的位姿信息;
5)提供友好、易操作的人機界面。
目前流行的三維建模軟件有Maya、3DSMAX、AutoCAD、Creator等,視景軟件有 OpenGL、IRIS Performer、Vega、OpenGVS等。可視化仿真系統(tǒng)三維模型數(shù)據(jù)庫應當以滿足系統(tǒng)的實時性和交互性為基本特征,而采用傳統(tǒng)的三維模型數(shù)據(jù)庫如3DSMAX、CAD等雖然能夠建立精確、完整、逼真的數(shù)據(jù)模型,也可以在可視化仿真應用中使用,如文獻[2~3]分別開發(fā)了基于3DSMAX的艦艇三維運動仿真系統(tǒng),但是在實際應用中操作起來比較麻煩,而且仿真效率也比較低。文獻[4~5]雖然開發(fā)了基于Creator/Vega的的艦船運動視景仿真系統(tǒng),但是仿真功能單一,交互性不強,不具有視點切換和多通道顯示功能。
Multigen-Creator建模軟件在設計理念上完全針對實時仿真要求,獨創(chuàng)了用于描述三維虛擬場景的層次化數(shù)據(jù)結(jié)構(gòu)—OpenFlight數(shù)據(jù)結(jié)構(gòu),特別適合于圖像生成器對其進行實時的渲染操作[6]。視景仿真軟件Vega是美國MultiGen-Paradigm公司推出的用于虛擬現(xiàn)實、實時視景仿真、聲音仿真以及其它可視化領域的世界領先級應用軟件工具。包括友好的圖形環(huán)境界面LynX、完整的C語言應用程序接口API、豐富的相關實用庫函數(shù)和一批可選的功能模塊,能夠滿足多種特殊的仿真要求[7]。特別是提供的海洋模塊,對艦艇運動仿真提供了極大的便利條件。
Visua1C++6.0中的 MFC(Microsoft Foundation Class)類庫已是一個相當成熟的類庫,其中基于文檔/視圖結(jié)構(gòu)的應用程序框架,已成為開發(fā)Windows應用程序的主流框架結(jié)構(gòu)。該框架結(jié)構(gòu)能夠?qū)⒊绦蛑械臄?shù)據(jù)和顯示部分進行有效的隔離,并能將一個文檔類對象與多個視圖類對象進行對應,應用MFC類庫是Windows平臺下開發(fā)具有良好圖形用戶界面應用程序的方便途徑,因此,作者選擇了基于MFC的開發(fā)環(huán)境。
根據(jù)視景仿真系統(tǒng)的要求,確定仿真系統(tǒng)整體方案流程圖,如圖1所示。根據(jù)艦艇數(shù)據(jù)和圖像建立艦艇三維實體模型,形成 Warship.flt文件,將Warship.flt文件導入到Lynx圖形界面,在Lynx圖形界面中進行初始化設置:配置天空和海洋環(huán)境,添加尾跡、艏浪、冒煙等特殊效果,添加聲音效果等;編制VC++、Vega主程序,采用龍格-庫塔法對艦艇運動數(shù)學模型進行解算,將解算結(jié)果加載到艦艇模型上。
圖1 仿真系統(tǒng)整體方案流程圖
視景仿真系統(tǒng)中,模型建立無疑是最基礎的部分,在滿足實時渲染的基礎上,應盡可能提高模型的逼真度,模型建立的精確程度,直接關系到視景系統(tǒng)的真實性。
艦艇主體采用MultiGen-Creator軟件的面、體、拉伸和放樣等工具繪制,繪制的時候主要部位應建立獨立的節(jié)點以便于程序?qū)ζ淇刂?。對于活動部件,如舵、減搖鰭和螺旋槳等,應將其放入DOF節(jié)點下并設置自由度范圍。模型建好后,可利用Creator的優(yōu)化工具進行優(yōu)化,在保證效果的情況下,盡量減少面的數(shù)量,以提高渲染速度,保證刷新頻率。建好后的艦艇模型及OpenFlight層級結(jié)構(gòu)見圖2。
模擬海洋狀態(tài)是Vega軟件一個專門的應用模塊,它包括當前海上運動所必需的一些特點,例如:動態(tài)和靜態(tài)海洋模型中的動態(tài)學效果、域矢量特點以及海洋的特技效果[8]。
圖2 艦艇模型及OpenFlight層級結(jié)構(gòu)圖
在Vega海洋模塊中定義每個Ocean都包含動態(tài)和靜態(tài)兩個部分。宏觀的海洋是靜態(tài)的,但是也可把Observer和靜態(tài)海洋之間的海域定義為動態(tài)的,能夠模擬海浪效果。圖3表示一個動態(tài)海洋和靜態(tài)海洋之間的關系示意圖。
圖3 動態(tài)海洋和靜態(tài)海洋之間的關系
為節(jié)省系統(tǒng)資源,在觀察者一定視野范圍內(nèi)顯示動態(tài)的三維海浪,其它區(qū)域使用紋理顯示的靜態(tài)海面,并根據(jù)天氣、海情動態(tài)調(diào)節(jié)海洋的顏色及顯示效果。三維海洋場景的建立需要和海洋環(huán)境對象類相匹配,才能表示真實的場景環(huán)境,可以利用Vega下海洋環(huán)境的屬性參數(shù)實時改變海情狀態(tài)、波浪的高度和方向角。
仿真系統(tǒng)的軟件設計是整個系統(tǒng)的核心與基礎,它的性能的好壞以及工作可靠與否將直接影響整個系統(tǒng)的工作性能和可靠性。因此軟件設計是整個設計過程中一項重要的工作。
3.6.1 軟件實現(xiàn)框架
圖4 軟件實現(xiàn)框架流程圖
軟件采用基于MFC的類層次結(jié)構(gòu)下,建立Vega的基本程序框架,其工作原理為:利用ADF文件進行初始化設置;編寫仿真程序,調(diào)用初始化系統(tǒng)和模塊的函數(shù);讀入ADF文件中的數(shù)據(jù)并裝載相關的數(shù)據(jù)庫,創(chuàng)建并配置類的實例;完成初始化,調(diào)用幀循環(huán)函數(shù),執(zhí)行相關功能的程序以渲染、刷新場景。軟件實現(xiàn)框架見圖4。
3.6.2 軟件程序設計
MFC框架下的Vega應用程序主要有兩種方法,分別為:修改由向?qū)傻闹饕晥D類創(chuàng)建Vega應用程序和用Vega提供的zsVegaView類創(chuàng)建Vega應用程序。本文采用修改主視圖類開發(fā)MFC的應用程序。
在Windows環(huán)境下Vega圖形繪制工作由一個獨立線程進行,MFC把線程分為兩類:用戶界面線程和工作者線程。用戶界面線程一般用于處理用戶輸入事件并對事件做出響應,實現(xiàn)線程的代碼中含有消息循環(huán)。工作者線程與用戶界面無關,主要用于各種耗時的計算量大的場合。Vega系統(tǒng)需要實時地進行渲染循環(huán),這是個非常耗時的計算過程,因此創(chuàng)建單獨的工作者線程來完成Vega渲染任務是恰當?shù)?。CWinThread類提供的用于創(chuàng)建工作者線程的函數(shù)為:AfxBeginThread(),該線程控制函數(shù)必須聲明為如下所示的形式:
因此,為了實現(xiàn)單獨的Vega線程,還應在主視圖類中加入一個線程控制函數(shù)runVegaProc(),在其中完成系統(tǒng)初始化、定義、配置和幀循環(huán)。其中將初始化函數(shù)vgInitSys()替換成為以當前視口的句柄為參數(shù)調(diào)用的vgInitWinSys();使Vgea繪制區(qū)附于應用程序客戶區(qū)。
創(chuàng)建完線程函數(shù)之后,加入一個Vega啟動函數(shù),其目的是以當前視口句柄為參數(shù)調(diào)用AfxBeginThread()函數(shù)來啟動Vega繪制線程。
修改幾個自動生成的視類的成員函數(shù),在構(gòu)造函數(shù)CTest2View()中進行必要的變量初始化,在析構(gòu)函數(shù)~CTest2View()中加入已創(chuàng)建的停止Vega運行的函數(shù)stopVega();修改PreCreate-Window()函數(shù)以更改默認窗口的樣式;添加WM_SIZE消息處理函數(shù),以保證Vega窗口與視窗口大小一致。
在視圖類添加成員函數(shù)RungeKutta(floatt,float*y,float*Y1,float*f),其中y為狀態(tài)變量,Y1為控制變量,f為微分方程;在此函數(shù)中加入式(4)所建立的微分方程組。添加 Windows消息處理函數(shù)OnTimer(UINT nIDEvent),在其中應用龍格-庫塔法對微分方程組進行求解,從而得出每一時刻的艦艇運動參數(shù)v、r、δ、ψ、x0、y0。
圖5、圖6是本文所開發(fā)的艦艇運動視景仿真系統(tǒng)的仿真效果截圖,首先通過參數(shù)輸入對話框設置艦艇運動的初始參數(shù),通過多通道顯示菜單可以看到舵、螺旋槳的運動姿態(tài);視點切換菜單可以切換觀看的角度和位置;海情選擇、海面效果和顯示控制菜單可以動態(tài)改變海情、海面效果和環(huán)境效果;數(shù)據(jù)顯示和曲線顯示菜單可以實時顯示仿真數(shù)據(jù)及曲線;狀態(tài)欄實時顯示艦艇位姿。
圖5 數(shù)據(jù)顯示及正視效果圖
圖6 曲線顯示及繞船觀察效果圖
本文建立了二自由度艦艇運動數(shù)學模型并結(jié)合舵機模型和輔助方程用以研究艦艇的操縱運動,采用Creator軟件建立了三維艦艇實體模型,運用虛擬現(xiàn)實技術開發(fā)了艦艇操縱運動的視景仿真系統(tǒng),實現(xiàn)了具有真實感的、隨時間變化的艦艇操縱運動實時動態(tài)仿真,取得了理想的動畫演示效果,為進一步開發(fā)艦艇操縱模擬器奠定了基礎。
[1]卞鋼,劉寅東.基于3dsmax的船舶三維運動仿真[J].計算機仿真,2004,22(5):216~218
[2]劉亞東,李晗,譚家華.船舶運動仿真系統(tǒng)的開發(fā)[J].華東船舶工業(yè)學院學報(自然科學版),2005,19(5):15~19
[3]梁永恩,鄒勇,丁方頤.Creator/Vega及其在船舶航行視景仿真系統(tǒng)中的應用[J].應用科技,2005,32(4):37~39
[4]何金花,彭俠夫,王鶯.船舶運動視景仿真系統(tǒng)研究[J].計算機仿真,2007,24(8):198~200
[5]王乘,周均清,李利軍.Creator可視化仿真建模技術[M].武漢:華中科技大學出版社,2005:7~8
[6]龔卓容.Vega程序設計[M].北京:國防工業(yè)出版社,2002
[7]沈?qū)?,王新民,李?基于Creator/Vega的空中加油視景仿真系統(tǒng)[J].系統(tǒng)仿真學報,2008,20(20):5569~5572
[8]王乘,李利軍,周均清,等.Vega實時三維視景仿真技術[M].武漢:華中科技大學出版社,2005
[9]劉勝,李高云,方亮.船舶航向/橫搖魯棒容錯控制研究[J].大連海事大學學報,2009,11:4~8
[10]楊滌,李立濤,楊旭,等.系統(tǒng)實時仿真開發(fā)環(huán)境與應用[M].北京:清華大學出版社,2002
[11]應業(yè)炬.船舶快速性[M].北京:人民交通出版社,2007
[12]張桂臣,任光.船舶航跡復合預測控制模型[J].交通運輸工程學報,2007,7(6):41~45