APP下载

基于XNA的绞吸式挖泥船操作过程建模与仿真

2016-09-10郑庆云徐立群魏长赟杨金宝

计算机与数字工程 2016年8期
关键词:绞刀挖泥船骨骼

郑庆云 徐立群 魏长赟 杨金宝

(1.河海大学机电工程学院 常州 213022)(2.疏浚技术教育部工程研究中心 常州 213022)



基于XNA的绞吸式挖泥船操作过程建模与仿真

郑庆云1,2徐立群1,2魏长赟1,2杨金宝1,2

(1.河海大学机电工程学院常州213022)(2.疏浚技术教育部工程研究中心常州213022)

随着国际航运业和疏浚工程的不断发展,对于绞吸式挖泥船的操作人员操控挖泥船技术的要求也越来越高,因此需要通过仿真系统来培训疏浚人员的操作技能。论文建立了基于XNA的绞吸式挖泥船运动仿真模型,从而实现了虚拟操作仿真。首先,利用3DS Max对绞吸式挖泥船进行建模并进行骨骼画分,在Visual Studio环境中建立起运动模型的关联,最后在XNA中使用高级着色语言(HLSL)绘制动态海洋场景。结果表明XNA可以高效地实现场景渲染与绞吸式挖泥船的实时虚拟控制,达到比较理想的仿真结果。

仿真; XNA; HLSL; 实时控制

Class NumberTP399

1 引言

我国江河湖库众多,泥沙淤积严重[1]。在清理河道港口时,绞吸式挖泥船是最常用的疏浚设备。国内外每年都要培训一大批疏浚操作人员,使用真船培训具有诸多不便,所以通过疏浚仿真系统来进行疏浚作业的培训,教学以及产量预测[2]具有良好的前景。

在绞吸式挖泥船虚拟仿真的研究领域中,李俊贤等[3]利用UDK实现了绞吸式挖泥船的操作仿真,场景效果逼真,却实现不了与下位机PLC的通讯,所以只能通过PC界面进行操作仿真,实现不了复杂的人机交互。王伯勇,倪福生等[4]利用OpenGL对疏浚作业中挖泥船进行仿真,可视化效果较好,但是算法运算量较大,在实际运用中对图形的硬件要求较高。

针对以上仿真软件存在的不足,本文采用基于Visual Studio开发环境的XNA对绞吸式挖泥船进行操作仿真。XNA是Microsoft Visual Studio集成开发环境(IDE)的一个扩展[5]。它使用XNA进行仿真开发时,采用的是C#编程语言,所以可以实现与下位机PLC的实时通讯,最终可以实现可以使用控制台对绞吸式挖泥船进行操作仿真,真正的将“虚拟”转换为“现实”,提高仿真的可观性与真实性。

2 绞吸式挖泥船建模

本文以“天鲸号”绞吸式挖泥船为仿真对象,“天鲸号”实际工作场景如图1所示。“天鲸号”船体复杂,机件较多,在XNA中使用现有的程序代码是难以完成三维模型的建模。所以需要将XNA与三维建模软件结合起来。3DS Max是目前三维建模使用较为广泛的建模软件,基于XNA对3DS Max的模型文件有着很好的支持[6],本文采用3DS Max对绞吸式挖泥船进行建模,模型如图2所示。

图1 “天鲸号”绞吸式挖泥船

图2 绞吸式挖泥船模型

2.1挖泥船骨骼的画分

骨骼动画主要是通过控制骨骼动作来实现对整个模型的运动,就像人的行走,吃饭等动作都是通过我们身体内骨骼的协调运动来实现的。骨骼动画可以对任意骨骼进行运动控制,灵活方便。挖泥船的骨骼模型如图3所示。

2.2绞吸式挖泥船的工作原理

在进行疏浚作业时,先将工作桩打入海底,随着锚杆的伸展,左右两侧的锚抛入土中,桥架慢慢下移到疏浚区,然后绞刀头高速旋转破土后,通过离心式水下泥泵的作用,将松散的泥沙通过排泥管进行输送。桥架上附有缆绳,缆绳穿过定位锚与船上的缆车相连,然后通过船上缆车收紧缆绳来实现挖泥船的左右横摆绞吸泥水,当完成某片区域的疏浚后,挖泥船需要向前移动,工作桩一直插入在海底,工作桩与船体之间通过一个液压装置相连,通过液压装置的推动,使得挖泥船慢慢前进,当液压顶到末端时,插入定位桩,工作桩拔出并复位,再次插入海底,拔出定位桩,这样就可以实现挖泥船不断的作业[7]。

图3 绞吸式挖泥船骨骼模型

3 绞吸式挖泥船运动模型的实现

根据绞吸式挖泥船的工作原理,本文在仿真过程中主要实现台车横移,钢桩起降,桥架的起降,绞刀头旋转,移锚等动作。

3.1模型的导入

XNA中支持的模型的格式比较少,一般支持.X和.FBX两种格式。本在在3DS Max中建好挖泥船模型后导成.FBX形式,.FBX文件格式中不仅包含了挖泥船的骨骼,贴图,模型的拓扑信息和几何结构,还有场景中的摄像机角度,光照等都会被保存[8]。3DS Max中构建的模型不能直接导成.X格式的文件,需要通过插件PandaDirectXMaxExporter进行导出,在使用过程中容易丢失贴图文件,所以本文将挖泥船模型导成.FBX格式后加载到XNA中。

dredgerModel= Content.Load〈Model〉(@"Modelsdredger"); //导入模型

boneTransforms = new Matrix[dredgerModel.Bones.Count];

dredgerModel.CopyAbsoluteBoneTransformsTo(boneTransforms);

//保存模型的初始骨骼矩阵

3.2模型的可视化

在导入模型之后,需要通过调整取景变换矩阵和投影变换矩阵来将挖泥显示在屏幕中。如果把挖泥船模型显示在电脑屏幕上想象成一个摄像的过程,那么观察变换就像摄影中的摄像机如何拍摄的[9]。在明确了摄像机的位置和观察目标后,将挖泥船的三维模型投影到屏幕中的过程则是投影变换。取景变换矩阵和投影变换矩阵设置代码如下:

be.View=camera.view; //设置取景矩阵

be.Projection=camera.projection; //设置投影矩阵

最后,挖泥船模型在XNA中显示如图4所示。

图4 XNA运行窗口中的挖泥船模型

3.3挖泥船模型的动作实现

3.3.1绞刀头运动与持续旋转

在疏浚作业的过程中,绞刀头不仅需要实现自身的高速旋转,还需要跟随桥架一起下移至水底。由于部件相互独立,所以使绞刀头完成这种复合运动需要实现部件的关联。在XNA中,通过子父阶层关系来实现绞刀头的运动。存在子父关系的骨骼需要在3DS Max中进行链接与绑定,设定好父级对象,reamer为绞刀初始矩阵,reamerangle为绞刀旋转变换矩阵,bridgeangle为桥架运动变换矩阵,然后在XNA中编写代码实现:

reamerbone.Transform =reamer * reamerangle * bridgeangle; //绞刀运动

要实现挖泥船与人的“交互”,就要使程序运行期间不时的响应用户的输入,然后做出相应的运动变化。XNA框架负责处理键盘事件,本文在Draw方法中调用Keyboard类的静态方法GetState()就可以得到键盘的状态[10]。这样,按下键盘某键时就能实现对应的挖泥船动作。但是,松开某键时,对应的运动又将停止,要实现绞刀头的持续旋转,则需要在dredgerGame中添加一个bool型变量cutterHeadState_1并赋值,并使用for循环进行连续给绞刀旋转变量赋值,最终达到连续旋转,具体实现如下:

if (newstate.IsKeyDown(Keys.C))

{

cutterHeadState_1 = true; //按下C键后赋值为真

if (cutterHeadState_1 == true)

{

for (int i = 1; i < 1000; i++)

{

reamervalue += 3f; //利用for循环实现绞刀的连续旋转

}

}

}

3.3.2挖泥船的横移运动与停止

当绞刀下放到疏浚区域并进行绞吸时,需要通过挖泥船的左右横移来实现不同区域的作业。XNA中通过世界变换矩阵中的旋转变换矩阵来实现挖泥船的左右横移。一般在疏浚作业中,疏浚区域为80°的扇形,所以在超过该区域时需要停止左右横移。本文中,通过静态成员函数CreateRotation()来实现横移运动,同时还要围绕工作桩进行运动,所以在3DS Max中需要绑定好阶层关系,通过if判断语句来实现超过疏浚区域时作业的停止,具体实现代码如下所示:

Matrixdredgerangle = Matrix.CreateRotationZ(dredgervalue); //挖泥船横移变换矩阵

3.3.3钢桩上下移动与抛锚运动

当船只到达疏浚区域时,需打下工作桩进行固定,打下工作桩则是一种平移运动,通过XNA中静态成员函数CreateTranslation()来工作桩进行上移与下移,同时用if判断语句限定移动量。抛锚运动则是锚杆的伸展(绕船体的旋转运动)与锚的平移运动的叠加,分别调用对应的函数进行实现。

3.3.4动作的“一键复位”

当挖泥船结束疏浚作业时,由于对应操作的按钮较多,为减少操作失误,想要实现一键复原。在dredgerGame添加一个bool类型变量,利用for循环执行相应动作的反运动,最终达到精确复位,提高了挖泥船的可操作性。

4 动态海洋与天空的实现

每个游戏若想完整都需要一个场景,挖泥船在江河湖泊中工作,所以需要构建动态海洋与天空。在绘制动态海洋与天空时需要使用HLSL(High Level Shader Language)高级着色语言[11]。与C语言和C#语言相似但是又增加了一些数据类型,包括标量类型,对象类型等[12]。Direct3D中提供了一个Effect类,在使用Effect这个类进行处理HLSL语句之前,需要编写扩展名为fx的文件。Effect类首先保存顶点着色和像素着色的HLSL语句的fx文件转换为能在图形卡的GPU中运行的代码,然后GPU使用这些代码完成3D渲染[13]。所以在渲染动态海洋和天空之前,首先编写OceanShader.fx和Skyshader.fx文件,并将这两个文件添加到素材管道文件夹Content目录下。随后创建oceanEffect和skyEffect并进行实例化,具体代码实现如下:

oceanEffect=Content.Load〈Effect〉(“OceanShader.fx”);

skyEffect=Content.Load〈Effect〉(“skyShader.fx”);

最后在Draw方法中进行渲染。最终实现的场景如图5所示。

图5 绞吸式挖泥船工作图

5 结语

本文利用XNA与3DS Max的有机结合,实现了绞吸式挖泥船的动作仿真,并且利用HLSL高级着色语言绘制了动态海洋与天空,达到了很好的仿真效果。论文的结果表明XNA这一三维游戏开发平台是完全适用于绞吸式挖泥船的操作仿真,并且也可以实现灵敏的人机“交互”,为自主研发国内仿真系统提供了强大的支持,并且将XNA这一仿真平台应用于航空航天,军事等领域,具有不错的前景。

[1] 丁宏锴,倪福生.绞吸式挖泥船疏浚动态特性与仿真系统设计[J].河海大学学报,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].计算机与现代化,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在挖泥船疏浚仿真中的应用[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角色骨骼蒙皮动画[J].沈阳航空工业学院学报,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] 胡知斌,薄华,戴文伯.绞吸式挖泥船仿真训练系统的设计及实现[J].上海海事大学学报,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的虚拟现实三维引擎设计与实现[D].长沙:湖南大学,2010.

LUO Weijun. Design and Implementation of a Virtual Reality 3D Engine Based on XNA[D]. Changsha: Hunan University,2010.

[9] 缪儒欢.基于XNA的虚拟装配技术研究[D].大连:大连理工大学,2010.

MIU Ruhuan. Research on Technology of Virtual Assembly Based on XNA[D]. Liaoning: Dalian University of Technology,2010.

[10] 李新柱.基于XNA的船舶燃油净化虚拟现实仿真系统的研究[D].大连:大连海事大学,2012.

LI Xinzhu. Virtual Reality Simulation of the Fuel Oil Purifying System Based on the XNA[D]. Dalian: Dalian Maritime University,2012.

[11] 肖炳辉,史文彦,董冰.基于XNA的建筑虚拟仿真平台的研究与开发[J].东华大学学报,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] 黄进.基于XNA的游戏设计与实现[D].北京:北京交通大学,2011.

HUANG Jin. Game Design and Implementation Based on XNA[D]. Beijing: Beijing Jiaotong University,2011.

[13] 潘军,孙少斌,林学华,等.基于XNA的人体骨骼蒙皮动画关键技术研究[J].计算机时代,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日

郑庆云,男,硕士研究生,研究方向:虚拟现实与计算机仿真。

TP399

10.3969/j.issn.1672-9722.2016.08.042

猜你喜欢

绞刀挖泥船骨骼
做家务的女性骨骼更强壮
三减三健全民行动——健康骨骼
绞吸挖泥船大功率挖岩绞刀的荷载分析*
绞吸挖泥船绞刀长轴系轴承支反力计算方法研究
绞吸挖泥船大功率挖岩绞刀设计与研究
骨骼和肌肉
高压潜水电动机在绞吸挖泥船上的应用管理
“吸盘3”号挖泥船核子密度计改进设计
绞吸式挖泥船仿生绞刀刀齿的蚁群优化
绞吸式挖泥船挖岩绞刀动载荷模拟分析