鄭慶云 徐立群 魏長(zhǎng)赟 楊金寶
(1.河海大學(xué)機(jī)電工程學(xué)院 常州 213022)(2.疏浚技術(shù)教育部工程研究中心 常州 213022)
?
基于XNA的絞吸式挖泥船操作過(guò)程建模與仿真
鄭慶云1,2徐立群1,2魏長(zhǎng)赟1,2楊金寶1,2
(1.河海大學(xué)機(jī)電工程學(xué)院常州213022)(2.疏浚技術(shù)教育部工程研究中心常州213022)
隨著國(guó)際航運(yùn)業(yè)和疏浚工程的不斷發(fā)展,對(duì)于絞吸式挖泥船的操作人員操控挖泥船技術(shù)的要求也越來(lái)越高,因此需要通過(guò)仿真系統(tǒng)來(lái)培訓(xùn)疏浚人員的操作技能。論文建立了基于XNA的絞吸式挖泥船運(yùn)動(dòng)仿真模型,從而實(shí)現(xiàn)了虛擬操作仿真。首先,利用3DS Max對(duì)絞吸式挖泥船進(jìn)行建模并進(jìn)行骨骼畫(huà)分,在Visual Studio環(huán)境中建立起運(yùn)動(dòng)模型的關(guān)聯(lián),最后在XNA中使用高級(jí)著色語(yǔ)言(HLSL)繪制動(dòng)態(tài)海洋場(chǎng)景。結(jié)果表明XNA可以高效地實(shí)現(xiàn)場(chǎng)景渲染與絞吸式挖泥船的實(shí)時(shí)虛擬控制,達(dá)到比較理想的仿真結(jié)果。
仿真; XNA; HLSL; 實(shí)時(shí)控制
Class NumberTP399
我國(guó)江河湖庫(kù)眾多,泥沙淤積嚴(yán)重[1]。在清理河道港口時(shí),絞吸式挖泥船是最常用的疏浚設(shè)備。國(guó)內(nèi)外每年都要培訓(xùn)一大批疏浚操作人員,使用真船培訓(xùn)具有諸多不便,所以通過(guò)疏浚仿真系統(tǒng)來(lái)進(jìn)行疏浚作業(yè)的培訓(xùn),教學(xué)以及產(chǎn)量預(yù)測(cè)[2]具有良好的前景。
在絞吸式挖泥船虛擬仿真的研究領(lǐng)域中,李俊賢等[3]利用UDK實(shí)現(xiàn)了絞吸式挖泥船的操作仿真,場(chǎng)景效果逼真,卻實(shí)現(xiàn)不了與下位機(jī)PLC的通訊,所以只能通過(guò)PC界面進(jìn)行操作仿真,實(shí)現(xiàn)不了復(fù)雜的人機(jī)交互。王伯勇,倪福生等[4]利用OpenGL對(duì)疏浚作業(yè)中挖泥船進(jìn)行仿真,可視化效果較好,但是算法運(yùn)算量較大,在實(shí)際運(yùn)用中對(duì)圖形的硬件要求較高。
針對(duì)以上仿真軟件存在的不足,本文采用基于Visual Studio開(kāi)發(fā)環(huán)境的XNA對(duì)絞吸式挖泥船進(jìn)行操作仿真。XNA是Microsoft Visual Studio集成開(kāi)發(fā)環(huán)境(IDE)的一個(gè)擴(kuò)展[5]。它使用XNA進(jìn)行仿真開(kāi)發(fā)時(shí),采用的是C#編程語(yǔ)言,所以可以實(shí)現(xiàn)與下位機(jī)PLC的實(shí)時(shí)通訊,最終可以實(shí)現(xiàn)可以使用控制臺(tái)對(duì)絞吸式挖泥船進(jìn)行操作仿真,真正的將“虛擬”轉(zhuǎn)換為“現(xiàn)實(shí)”,提高仿真的可觀性與真實(shí)性。
本文以“天鯨號(hào)”絞吸式挖泥船為仿真對(duì)象,“天鯨號(hào)”實(shí)際工作場(chǎng)景如圖1所示?!疤祧L號(hào)”船體復(fù)雜,機(jī)件較多,在XNA中使用現(xiàn)有的程序代碼是難以完成三維模型的建模。所以需要將XNA與三維建模軟件結(jié)合起來(lái)。3DS Max是目前三維建模使用較為廣泛的建模軟件,基于XNA對(duì)3DS Max的模型文件有著很好的支持[6],本文采用3DS Max對(duì)絞吸式挖泥船進(jìn)行建模,模型如圖2所示。
圖1 “天鯨號(hào)”絞吸式挖泥船
圖2 絞吸式挖泥船模型
2.1挖泥船骨骼的畫(huà)分
骨骼動(dòng)畫(huà)主要是通過(guò)控制骨骼動(dòng)作來(lái)實(shí)現(xiàn)對(duì)整個(gè)模型的運(yùn)動(dòng),就像人的行走,吃飯等動(dòng)作都是通過(guò)我們身體內(nèi)骨骼的協(xié)調(diào)運(yùn)動(dòng)來(lái)實(shí)現(xiàn)的。骨骼動(dòng)畫(huà)可以對(duì)任意骨骼進(jìn)行運(yùn)動(dòng)控制,靈活方便。挖泥船的骨骼模型如圖3所示。
2.2絞吸式挖泥船的工作原理
在進(jìn)行疏浚作業(yè)時(shí),先將工作樁打入海底,隨著錨桿的伸展,左右兩側(cè)的錨拋入土中,橋架慢慢下移到疏浚區(qū),然后絞刀頭高速旋轉(zhuǎn)破土后,通過(guò)離心式水下泥泵的作用,將松散的泥沙通過(guò)排泥管進(jìn)行輸送。橋架上附有纜繩,纜繩穿過(guò)定位錨與船上的纜車相連,然后通過(guò)船上纜車收緊纜繩來(lái)實(shí)現(xiàn)挖泥船的左右橫擺絞吸泥水,當(dāng)完成某片區(qū)域的疏浚后,挖泥船需要向前移動(dòng),工作樁一直插入在海底,工作樁與船體之間通過(guò)一個(gè)液壓裝置相連,通過(guò)液壓裝置的推動(dòng),使得挖泥船慢慢前進(jìn),當(dāng)液壓頂?shù)侥┒藭r(shí),插入定位樁,工作樁拔出并復(fù)位,再次插入海底,拔出定位樁,這樣就可以實(shí)現(xiàn)挖泥船不斷的作業(yè)[7]。
圖3 絞吸式挖泥船骨骼模型
根據(jù)絞吸式挖泥船的工作原理,本文在仿真過(guò)程中主要實(shí)現(xiàn)臺(tái)車橫移,鋼樁起降,橋架的起降,絞刀頭旋轉(zhuǎn),移錨等動(dòng)作。
3.1模型的導(dǎo)入
XNA中支持的模型的格式比較少,一般支持.X和.FBX兩種格式。本在在3DS Max中建好挖泥船模型后導(dǎo)成.FBX形式,.FBX文件格式中不僅包含了挖泥船的骨骼,貼圖,模型的拓?fù)湫畔⒑蛶缀谓Y(jié)構(gòu),還有場(chǎng)景中的攝像機(jī)角度,光照等都會(huì)被保存[8]。3DS Max中構(gòu)建的模型不能直接導(dǎo)成.X格式的文件,需要通過(guò)插件PandaDirectXMaxExporter進(jìn)行導(dǎo)出,在使用過(guò)程中容易丟失貼圖文件,所以本文將挖泥船模型導(dǎo)成.FBX格式后加載到XNA中。
dredgerModel= Content.Load〈Model〉(@"Modelsdredger"); //導(dǎo)入模型
boneTransforms = new Matrix[dredgerModel.Bones.Count];
dredgerModel.CopyAbsoluteBoneTransformsTo(boneTransforms);
//保存模型的初始骨骼矩陣
3.2模型的可視化
在導(dǎo)入模型之后,需要通過(guò)調(diào)整取景變換矩陣和投影變換矩陣來(lái)將挖泥顯示在屏幕中。如果把挖泥船模型顯示在電腦屏幕上想象成一個(gè)攝像的過(guò)程,那么觀察變換就像攝影中的攝像機(jī)如何拍攝的[9]。在明確了攝像機(jī)的位置和觀察目標(biāo)后,將挖泥船的三維模型投影到屏幕中的過(guò)程則是投影變換。取景變換矩陣和投影變換矩陣設(shè)置代碼如下:
be.View=camera.view; //設(shè)置取景矩陣
be.Projection=camera.projection; //設(shè)置投影矩陣
最后,挖泥船模型在XNA中顯示如圖4所示。
圖4 XNA運(yùn)行窗口中的挖泥船模型
3.3挖泥船模型的動(dòng)作實(shí)現(xiàn)
3.3.1絞刀頭運(yùn)動(dòng)與持續(xù)旋轉(zhuǎn)
在疏浚作業(yè)的過(guò)程中,絞刀頭不僅需要實(shí)現(xiàn)自身的高速旋轉(zhuǎn),還需要跟隨橋架一起下移至水底。由于部件相互獨(dú)立,所以使絞刀頭完成這種復(fù)合運(yùn)動(dòng)需要實(shí)現(xiàn)部件的關(guān)聯(lián)。在XNA中,通過(guò)子父階層關(guān)系來(lái)實(shí)現(xiàn)絞刀頭的運(yùn)動(dòng)。存在子父關(guān)系的骨骼需要在3DS Max中進(jìn)行鏈接與綁定,設(shè)定好父級(jí)對(duì)象,reamer為絞刀初始矩陣,reamerangle為絞刀旋轉(zhuǎn)變換矩陣,bridgeangle為橋架運(yùn)動(dòng)變換矩陣,然后在XNA中編寫(xiě)代碼實(shí)現(xiàn):
reamerbone.Transform =reamer * reamerangle * bridgeangle; //絞刀運(yùn)動(dòng)
要實(shí)現(xiàn)挖泥船與人的“交互”,就要使程序運(yùn)行期間不時(shí)的響應(yīng)用戶的輸入,然后做出相應(yīng)的運(yùn)動(dòng)變化。XNA框架負(fù)責(zé)處理鍵盤(pán)事件,本文在Draw方法中調(diào)用Keyboard類的靜態(tài)方法GetState()就可以得到鍵盤(pán)的狀態(tài)[10]。這樣,按下鍵盤(pán)某鍵時(shí)就能實(shí)現(xiàn)對(duì)應(yīng)的挖泥船動(dòng)作。但是,松開(kāi)某鍵時(shí),對(duì)應(yīng)的運(yùn)動(dòng)又將停止,要實(shí)現(xiàn)絞刀頭的持續(xù)旋轉(zhuǎn),則需要在dredgerGame中添加一個(gè)bool型變量cutterHeadState_1并賦值,并使用for循環(huán)進(jìn)行連續(xù)給絞刀旋轉(zhuǎn)變量賦值,最終達(dá)到連續(xù)旋轉(zhuǎn),具體實(shí)現(xiàn)如下:
if (newstate.IsKeyDown(Keys.C))
{
cutterHeadState_1 = true; //按下C鍵后賦值為真
if (cutterHeadState_1 == true)
{
for (int i = 1; i < 1000; i++)
{
reamervalue += 3f; //利用for循環(huán)實(shí)現(xiàn)絞刀的連續(xù)旋轉(zhuǎn)
}
}
}
3.3.2挖泥船的橫移運(yùn)動(dòng)與停止
當(dāng)絞刀下放到疏浚區(qū)域并進(jìn)行絞吸時(shí),需要通過(guò)挖泥船的左右橫移來(lái)實(shí)現(xiàn)不同區(qū)域的作業(yè)。XNA中通過(guò)世界變換矩陣中的旋轉(zhuǎn)變換矩陣來(lái)實(shí)現(xiàn)挖泥船的左右橫移。一般在疏浚作業(yè)中,疏浚區(qū)域?yàn)?0°的扇形,所以在超過(guò)該區(qū)域時(shí)需要停止左右橫移。本文中,通過(guò)靜態(tài)成員函數(shù)CreateRotation()來(lái)實(shí)現(xiàn)橫移運(yùn)動(dòng),同時(shí)還要圍繞工作樁進(jìn)行運(yùn)動(dòng),所以在3DS Max中需要綁定好階層關(guān)系,通過(guò)if判斷語(yǔ)句來(lái)實(shí)現(xiàn)超過(guò)疏浚區(qū)域時(shí)作業(yè)的停止,具體實(shí)現(xiàn)代碼如下所示:
Matrixdredgerangle = Matrix.CreateRotationZ(dredgervalue); //挖泥船橫移變換矩陣
3.3.3鋼樁上下移動(dòng)與拋錨運(yùn)動(dòng)
當(dāng)船只到達(dá)疏浚區(qū)域時(shí),需打下工作樁進(jìn)行固定,打下工作樁則是一種平移運(yùn)動(dòng),通過(guò)XNA中靜態(tài)成員函數(shù)CreateTranslation()來(lái)工作樁進(jìn)行上移與下移,同時(shí)用if判斷語(yǔ)句限定移動(dòng)量。拋錨運(yùn)動(dòng)則是錨桿的伸展(繞船體的旋轉(zhuǎn)運(yùn)動(dòng))與錨的平移運(yùn)動(dòng)的疊加,分別調(diào)用對(duì)應(yīng)的函數(shù)進(jìn)行實(shí)現(xiàn)。
3.3.4動(dòng)作的“一鍵復(fù)位”
當(dāng)挖泥船結(jié)束疏浚作業(yè)時(shí),由于對(duì)應(yīng)操作的按鈕較多,為減少操作失誤,想要實(shí)現(xiàn)一鍵復(fù)原。在dredgerGame添加一個(gè)bool類型變量,利用for循環(huán)執(zhí)行相應(yīng)動(dòng)作的反運(yùn)動(dòng),最終達(dá)到精確復(fù)位,提高了挖泥船的可操作性。
每個(gè)游戲若想完整都需要一個(gè)場(chǎng)景,挖泥船在江河湖泊中工作,所以需要構(gòu)建動(dòng)態(tài)海洋與天空。在繪制動(dòng)態(tài)海洋與天空時(shí)需要使用HLSL(High Level Shader Language)高級(jí)著色語(yǔ)言[11]。與C語(yǔ)言和C#語(yǔ)言相似但是又增加了一些數(shù)據(jù)類型,包括標(biāo)量類型,對(duì)象類型等[12]。Direct3D中提供了一個(gè)Effect類,在使用Effect這個(gè)類進(jìn)行處理HLSL語(yǔ)句之前,需要編寫(xiě)擴(kuò)展名為fx的文件。Effect類首先保存頂點(diǎn)著色和像素著色的HLSL語(yǔ)句的fx文件轉(zhuǎn)換為能在圖形卡的GPU中運(yùn)行的代碼,然后GPU使用這些代碼完成3D渲染[13]。所以在渲染動(dòng)態(tài)海洋和天空之前,首先編寫(xiě)OceanShader.fx和Skyshader.fx文件,并將這兩個(gè)文件添加到素材管道文件夾Content目錄下。隨后創(chuàng)建oceanEffect和skyEffect并進(jìn)行實(shí)例化,具體代碼實(shí)現(xiàn)如下:
oceanEffect=Content.Load〈Effect〉(“OceanShader.fx”);
skyEffect=Content.Load〈Effect〉(“skyShader.fx”);
最后在Draw方法中進(jìn)行渲染。最終實(shí)現(xiàn)的場(chǎng)景如圖5所示。
圖5 絞吸式挖泥船工作圖
本文利用XNA與3DS Max的有機(jī)結(jié)合,實(shí)現(xiàn)了絞吸式挖泥船的動(dòng)作仿真,并且利用HLSL高級(jí)著色語(yǔ)言繪制了動(dòng)態(tài)海洋與天空,達(dá)到了很好的仿真效果。論文的結(jié)果表明XNA這一三維游戲開(kāi)發(fā)平臺(tái)是完全適用于絞吸式挖泥船的操作仿真,并且也可以實(shí)現(xiàn)靈敏的人機(jī)“交互”,為自主研發(fā)國(guó)內(nèi)仿真系統(tǒng)提供了強(qiáng)大的支持,并且將XNA這一仿真平臺(tái)應(yīng)用于航空航天,軍事等領(lǐng)域,具有不錯(cuò)的前景。
[1] 丁宏鍇,倪福生.絞吸式挖泥船疏浚動(dòng)態(tài)特性與仿真系統(tǒng)設(shè)計(jì)[J].河海大學(xué)學(xué)報(bào),2002,30(6):1-3.
DING Hongkai, NI Fusheng. Cutter Suction Dredger Dredging System Design and Simulation of Dynamic Characteristics[J]. Journal of Hehai University(Natural Sciences),2002,30(6):1-3.
[2] IHC-Systens & Miedema, S. A. CSDS Cutter SuctionDredge Simulator[J]. Delft,1994.
[3] 李俊賢,倪福生.基于UDK的絞吸式挖泥船操作仿真[J].計(jì)算機(jī)與現(xiàn)代化,2014(1):55-57.
LI Junxian, NI Fusheng. Operation Simulation of Cutter Suction Dredger Based on UDK[J]. Computer and Modernization,2014(1):55-57.
[4] 王伯勇,倪福生.OpenGL在挖泥船疏浚仿真中的應(yīng)用[J].江蘇船舶,2005,22(4):10-11.
WANG Boyong, NI Fusheng. The Application of OpenGL in Dredging Simulation[J]. JIANG SU SHIP,2005,22(4):10-11.
[5] S A Kazarlis, A G Bakirtzis, V Petridis. A Genetic Algorithm Solution to the Unit Commitment Problem[J]. Power Systems, IEEE Transactions on,1996,11(1):83-92.
[6] 郭佳,劉春.基于XNA的3D角色骨骼蒙皮動(dòng)畫(huà)[J].沈陽(yáng)航空工業(yè)學(xué)院學(xué)報(bào),2008,02:59-61,54.
GUO Jia, LIU Chun. 3D Character Animation Skinned Based on XNA[J]. Journal of Shenyang Institute of Aeronautical Engineering,2008,02:59-61,54.
[7] 胡知斌,薄華,戴文伯.絞吸式挖泥船仿真訓(xùn)練系統(tǒng)的設(shè)計(jì)及實(shí)現(xiàn)[J].上海海事大學(xué)學(xué)報(bào),2011,32(3):64-67.
HU Zhibin, BO Hua, DAI Wenbo. Design and Implementation of Cutter Suction Dredger Simulation Training System[J]. Journal of Shanghai Maritime University,2011,32(3):64-67.
[8] 羅為君.基于XNA的虛擬現(xiàn)實(shí)三維引擎設(shè)計(jì)與實(shí)現(xiàn)[D].長(zhǎng)沙:湖南大學(xué),2010.
LUO Weijun. Design and Implementation of a Virtual Reality 3D Engine Based on XNA[D]. Changsha: Hunan University,2010.
[9] 繆儒歡.基于XNA的虛擬裝配技術(shù)研究[D].大連:大連理工大學(xué),2010.
MIU Ruhuan. Research on Technology of Virtual Assembly Based on XNA[D]. Liaoning: Dalian University of Technology,2010.
[10] 李新柱.基于XNA的船舶燃油凈化虛擬現(xiàn)實(shí)仿真系統(tǒng)的研究[D].大連:大連海事大學(xué),2012.
LI Xinzhu. Virtual Reality Simulation of the Fuel Oil Purifying System Based on the XNA[D]. Dalian: Dalian Maritime University,2012.
[11] 肖炳輝,史文彥,董冰.基于XNA的建筑虛擬仿真平臺(tái)的研究與開(kāi)發(fā)[J].東華大學(xué)學(xué)報(bào),2011,37(4):449-451.
XIAO Binhui, SHI Wenyan, DONG Bing. Research and development of XNA-Based Building Virtual Simulation Platform[J]. Journal of DongHua University(Natural Science),2011,37(4):449-451.
[12] 黃進(jìn).基于XNA的游戲設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2011.
HUANG Jin. Game Design and Implementation Based on XNA[D]. Beijing: Beijing Jiaotong University,2011.
[13] 潘軍,孫少斌,林學(xué)華,等.基于XNA的人體骨骼蒙皮動(dòng)畫(huà)關(guān)鍵技術(shù)研究[J].計(jì)算機(jī)時(shí)代,2013(3):13-16.
PAN Jun, SUN Shaobin, LIN Xuehua, et al. Research of Key Technology for Human Skeleton Skinned Mesh Animation Based on XNA[J]. Computer Era,2013(3):13-16.
Modeling and Simulation of Cutter Suction Dredger’s Operations Based on XNA
ZHENG Qingyun1,2XU Liqun1,2WEI Changyun1,2YANG Jinbao1,2
(1. School of Mechanical and Electrical Engineering, Hohai University, Changzhou213022)
(2. Engineering Research Center of Dredging Technology of Ministry of Education, Changzhou213022)
With the continuous development of international shipping and dredging, it has become more and more sophisticated for the manipulation of cutter suction dredgers. Therefore, it needs to train the skills of dredgers by simulation system. In this paper, the motion simulation model based on XNA is built and the virtual simulation of operations is conducted. Firstly, 3DS Max is used to build up the model of a cutter suction dredger and divide the model as different bones. Then, the association of motion model is made in the Visual Studio environment. Finally, high level shader language is used to draw dynamic ocean scene in XNA. It’s efficient to achieve the effect of scene rendering, the real-time virtual control of cutter suction dredger and the ideal simulation result by XNA, as is showed in the paper.
simulation, XNA, HLSL, real-time control
2016年2月3日,
2016年3月25日
鄭慶云,男,碩士研究生,研究方向:虛擬現(xiàn)實(shí)與計(jì)算機(jī)仿真。
TP399
10.3969/j.issn.1672-9722.2016.08.042