基于虚幻引擎的ROV实时运动仿真
2014-07-03廖华丽
李 珅,廖华丽
(河海大学机电工程学院,江苏 常州 213022)
0 引言
ROV(Remotely Operated Vehicle)在水下工程应用方面有着突出的实用性,普遍用于海洋湖泊水下构筑物的检测,然而其工作环境的特殊性导致人们无法直观地了解其工作状态和健康状况[1]。利用类似虚拟现实[2]中动作捕捉技术[3]实时检测穿戴者位姿并在三维图形软件中绘制动画的原理,可以开发一个实时仿真平台[4],利用ROV传感器传回的位姿信息,驱动三维模型运动[5],为观测者提供一目了然的视景平台。
UDK(Unreal Development Kit)是Epic公司著名的虚幻游戏引擎的免费版本,具有渲染效率高、物理属性逼真、与多种三维图形软件无缝相接等优势,不仅适用于大型网游制作,同样适用于仿真平台的开发。由于是免费版本,底层代码并未开放,故需用其脚本语言UnrealScript编写大部分代码[6]。
1 三维虚拟系统工作原理
1.1 ROV实物结构及其运动状态表征
图1 ROV实物结构图
这套水下构筑物探测机器人系统由机械结构和控制模块组成,后者被封装在密封舱内,而前者在人为控制和水流的综合作用下朝着指定的位置前进并进行作业。其中,除了机械框体本身,还产生“运动”的机械零部件有提供推进力的舵机螺旋桨和ROV用于贴着水下构筑物表面行走的万向轮。通过框体的位姿、螺旋桨的旋转速度及万向轮的前进方向、速度来表征ROV运动状态。此套ROV实物结构图如图1所示。
1.2 实时仿真系统的总体框架
本系统结构如图2所示,其开发可分为4个方面:通信协议、虚拟环境、模型控制和操作界面。要实时模拟ROV运动状态,需将传感器采集的GPS、位姿和ROV远程操纵杆上使用的速度等级信息通过通信协议实时传输到虚拟环境中来控制三维模型进行相同的动作[7],而用户则使用操作界面来与虚拟环境进行交互。这里需要用到的开发软件主要有3DS Max、UDK、VS2010和一些TCP/IP调试工具等。
图2 实时仿真系统结构图
2 ROV虚拟工作环境搭建
之所以选择UDK作为主要的开发软件,是因为虚幻引擎具有炫目逼真的视觉效果,区别于工程类仿真软件精确的数据计算,它更注重仿真效果的表现力和浸没感。因此,虚拟环境的搭建先在3DS Max和Photoshop中完成模型的形体、材质贴图和其他必要设置,通过FBX插件导入UDK中,再在VS2010中创建ROV整体和零部件自定义类[8],确定添加到环境中的模型组件类型和默认属性后,摆放到虚幻编辑器(UnrealEd)中[9],并用其自带的丰富的建模、材质、灯光、关卡设定工具来进一步完善虚拟环境[10],为之后的模型控制做好准备。
2.1 ROV 建模
ROV模型由框体和零部件组成,为了节省工作量,将重点放在ROV的控制代码上,将ROV框体、舵机极其涡轮建模为静态网格物体(StaticMesh),省去在3DS Max[11-13]中繁琐的骨骼蒙皮等问题。高低模型的创建有利于渲染光照、凹凸贴图,以更少的面片数获得更好的视觉效果,同时也节约软件运行消耗。
2.2 模型导入导出时的注意事项
模型在导出前必须坐标归零,保证导入到UDK中后坐标中心在正确的位置,方便后期模型按理想的参考点运动;须Reset Xform,保留模型最后的状态方可导出,避免导入后模型变形等问题。
3 实时仿真部分
实时仿真流程如图3所示,主要是仿真系统接收服务器发送的数据后,解析成驱动模型运动的变量;模型达到最后一组数据位姿后,向服务器反馈信号,提示可继续发送下一组数据。
图3 实时仿真流程图
3.1 通信协议
图4 客户机程序代码流程图
利用UnrealScript预留的TcpLink类,编写客户端程序,实现从网络服务器向UDK传输文本的功能[14]。将实时采集的ROV位姿、舵机速度等信号以TXT文本的形式发送到脚本工程并解析为位置(vector)、角度(rotator)和速度等级(speedgrade)信息。具体代码流程如图4所示。
3.2 模型控制
直接继承Actor类得到ROV框架类、舵机类、涡轮类,并按照舵机的方向布置分别得到另外2个子类。UnrealEd地图里摆放一个ROV框架,6个舵机和涡轮,需要在程序初始化时在主控制类里使用ForEach迭代器识别各个模型后方可进行控制。
3.2.1 框架控制
框架的运动状态表现为传感器实时测得的位置和角度信息,经由通信协议传递给框架类中的动态数组[15];由于ROV运动相对缓慢,每次测得的位姿差距并不大,加之仿真需尽量与ROV同步,故计算动态数组中前后2个位置和角度的矢量差值,即计算最短距离,然后用SetLocation()和SetRotation()函数分多次到达位姿,模拟连续平滑的运动效果;当框架位置和角度到达指定位置后,读取下一个位置和角度坐标;反复进行,当遍历过所有动态数组中坐标后,直到到达动态数组中最后一个位姿,反馈完成标识符给服务器,请求发送更多的数据。框架位置和角度运动流程图如图5所示。
图5 框架位姿控制流程图
3.2.2 舵机控制
舵机本身与框架的相对运动是静止的,故而作为子物体绑定在框架上,并将标识符bHardAttach设为True;涡轮在跟随舵机位置改变的同时也沿着舵机轴心自转,故也作为子物体绑定在舵机上,却保留其旋转自由度。其自转速度由通信协议解析TXT文本得到的速度等级信号(SpeedGrade)和舵机角度变化速率,即ROV框架角度变化速率共同决定。由于相对角度计算较为复杂,这里借助旋转矩阵[16-17],在UDK中,旋转量由回转角、俯仰角和偏转角决定,其轴向和正方向如图6所示。
图6 Rotator(Pitch,Yaw,Roll)空间表示
从图6可知,旋转坐标系相对参考坐标系的旋转矩阵有:
1)绕X轴旋转γ:
2)绕Y轴旋转α:
3)绕Z轴旋转β:
其中[9],Cα =cos α,Sα =sin α。
在UDK中,旋转坐标系相对参考坐标系的旋转矩阵表示为:
涡轮在以舵机坐标系为参考系沿着Yaw旋转角度Δ,得到的旋转矩阵表示为:M'=rot(z,Δ)×M。
从TcpLink类中解析得到ROV框架的角度值,即(α,β,γ)和涡轮速度等级低速、中速、高速分别设置Δ的值,由这4个已知量计算M',令M'=M,得到涡轮的旋转值(α',β',γ'),实现舵机和涡轮的同步。涡轮旋转速度快慢、起止时间流程如图7所示。
图7 涡轮旋转控制流程图
3.2.3 用于ROV模型运动控制的主要函数列表
运动控制主要函数列表见表1。
表1 运动控制主要函数列表
3.3 仿真结果
利用TCP/IP调试工具对仿真系统进行测试并将控制台输出的三维模型位姿与输入数据相比较来验证仿真结果的准确性,同时在渲染窗口中观察仿真效果。步骤如下:进入仿真系统界面;由控制台输入开启TCP/IP传输命令行;让TCP/IP调试工具作为服务端输入一组数据;仿真系统运行完成后反馈信息给服务端并请求下一组数据。
控制台初始化TCP/IP、三维模型实时位姿以及反馈信息如图8所示(以一组9套数据为例)。
图8 控制台信息显示图
这组数据对应的仿真界面渲染窗口中三维模型每到达一套数据的效果图如图9所示。用户在观察期间,可通过鼠标、键盘改变观测角度,以方便全方位了解ROV运动状态。
图9 渲染窗口效果图
4 结束语
用虚拟现实的表现手法来展示ROV的实时运动状态,讨论了基于3DS Max和UDK平台的实时仿真系统,包括三维建模、通信协议和模型控制。经调试,ROV模型能到达指定的位置和角度,各零部件也配合良好,让观测者对ROV运动状态有更加直观的感受。笔者将进一步研究ROV与虚拟环境的交互,及后者与前者拍摄的水下视频之间的融合,以便在逼真地还原前者运动状态的同时,获得更佳的浸没感。
[1] 葛新,郭威.基于虚拟现实的ROV辅助控制系统设计[J].机械设计与制造,2012(11):91-93.
[2] 胡西伟.基于三维动画与虚拟现实技术的理论研究[D].武汉:武汉大学,2005.
[3] 徐捷.结合动作捕捉数据的三维卡通人物的动画生成方法研究[D].杭州:浙江大学,2003.
[4] 张禹,刘开周,邢志伟,等.自治水下机器人实时仿真系统开发研究[J].计算机仿真,2004,21(4):155-158.
[5] 王清泉.基于UNREAL的虚拟环境与驾驶系统交互控制研究[D].秦皇岛:燕山大学,2011.
[6] Cordone R.Unreal Development Kit Game Programming with UnrealScript:Beginner’s Guide[M].Packt Publishing,2011.
[7] Epic Games.UDN虚幻引擎3技术指南[EB/OL].http://udn.epicgames.com/Three/WebHomeCH.html,2013-12-20.
[8] X9.Isometric Camera Including Pathfinding from the Ground Up[DB/OL].http://x9productions.com/blog/?page_id=357,2010-04-02.
[9] Busby J,Parrish Z,Wilson J.精通 Unreal Engine 3卷Ⅰ:3D游戏关卡设计基础篇[M].武侠,等译.北京:清华大学出版社,2011.
[10] Busby J,Parrish Z,Wilson J.精通 Unreal Engine 3卷Ⅱ:3D游戏关卡设计高级篇[M].武侠,等译.北京:清华大学出版社,2011.
[11] 王岩,陈邑.3DS Max材质与贴图技术精粹[M].北京:机械工业出版社,2007:149-198.
[12] 火星时代.3DS Max 2010大风暴[M].北京:人民邮电出版社,2010.
[13] 王琦.Autodesk 3DS Max 2010标准培训教材Ⅱ[M].北京:人民邮电出版社,2010.
[14] 任泰明.TCP/IP协议与网络编程[M].北京:人民邮电出版社,2009:184-199.
[15] Lippman S B,Lajoie J,Moo B E.C++Primer中文版[M].李师贤,等译.北京:人民邮电出版社,2012.
[16] Craig J J.机器人学导论[M].贠超,等译.北京:机械工业出版社,2013:30-35.
[17] 陈锐.C/C++函数与算法速查手册[M].北京:中国铁道出版社,2012.