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