基于分布式虚拟现实的连铸多人协作系统
2019-07-25阚阔张凯峰
阚阔 张凯峰
摘 要:针对连铸生产过程的多人协作培训,文中应用Unity 3D游戏引擎和Photon Server服务器引擎,设计并实现了一套基于客户端/服务器的分布式虚拟仿真协作系统。系统将地理上相互独立的用户通过计算机网络连接到同一个虚拟世界,使用户共享资源,实现多用户的协同工作,满足连铸培训的需求。
关键词:虚拟现实;分布式技术;多人协作;信息同步;仿真协作;分布式虚拟
中图分类号:TP393文献标识码:A文章编号:2095-1302(2019)04-0-02
0 引 言
连铸是指将液态钢水经过一系列复杂的工艺过程变为固态钢坯的工艺[1]。连铸生产工艺复杂,实际生产过程需要多工种配合工作。在连铸生产培训过程中,多工种的配合工作已经成为连铸生产培训的重要环节,也是连铸工人需要掌握的重要技能。所以实现连铸多人协作系统成为连铸培训的重要内容。
近年来,计算机网络通信技术的快速发展推动了信息技术的进步[2]。计算机网络技术的更新和变化改变了传统的信息应用方式。由于传统单机虚拟现实系统不能满足用户需求,因此分布式虚拟现实(Distributed Virtual Reality,DVR)系统应运而生[3]。
本文针对连铸生产过程中的多人协作培训过程,应用Unity 3D游戏引擎和Photon Sever服务器引擎,设计并实现了一个基于客户端/服务器的分布式虚拟仿真协作系统[4]。
1 系统协同架构
本系统采用混合式协同架构方法解决分布式虚拟现实时空不同步的问题[4-6],架構如图1所示,系统分为客户端和服务器两部分。
客户端负责用户的控制流程输入、场景实现、位置移动、碰撞检测、与服务器进行数据传输等操作。当用户进行操作时,如控制工艺生产流程操作或位置移动,客户端接收到操作信息后,执行动作完成任务,并将执行完的控制流程信号、位置信息和碰撞信息发送到服务器中。同时服务器监听发送的数据包端口,实时接收并更新和显示场景中的生产状态信息、位置信息和碰撞信息,及时把运行状态反馈给操作用户。
服务器的主要功能是对在线用户进行管理、多任务处理和场景中用户位置同步更新等。系统启动后,当有客户端成功连到服务端时,服务器按照用户选择的工种任务进行编号标识。多个用户同时操作后,服务器根据客户端传来的数据同步更新碰撞、用户位置和生产流程信息,再将同步后的信息分别发送到每个客户端,最终实现在虚拟场景的同步协作生产过程[6]。
2 平台开发环境搭建
平台开发环境构成如下:
(1)操作系统:Windows 7;
(2)集成开发环境:Visual Studio 2015;
(3)客户端开发:Unity 3D游戏引擎;
(4)服务器开发:Photon Server服务器引擎;
(5)开发语言:C#。
3 系统实现
3.1 服务器的实现
系统服务器采用Photon Server服务器引擎开发。Photon Server是网络游戏引擎供应商Exit Game开发的一套高性能服务器引擎。不同于其他服务器的套接字(Socket)采用Java实现,Photon Server的核心使用C++开发,其效能相较其他服务器更高[7-8]。
3.1.1 客户端连接
在服务器中,每当有一个客户端成功连接,服务器都会调用CreatePeer()函数创建客户端请求,并在客户端列表中加入客户端ID。当客户端断开连接,服务器调用Disconnect()处理客户端断开时需释放的资源等事项。代码如下:
3.1.2 服务器数据接收和同步
在一个分布式系统中,服务器最主要的工作就是接收来自不同客户端的数据信息,并将数据信息同步更新到其他客户端中。在Photon Server服务器中,采用OnOperationRequest()函数接收来自不同客户端的位置、碰撞和工序数据信息,再通过OnOperationReponse()函数将信息同步到其他客户端,如图2所示。
3.2 客户端实现
本系统采用Unity 3D游戏引擎开发客户端。Unity 3D是由Unity Technologies开发的一个让用户能轻松快速创建对象、引入外部资源以及通过代码把它们联系起来的物理引擎,同时也是一个全面整合的专业游戏引擎[9-10]。
3.2.1 用户获取位置、旋转信息
在Unity 3D中,Transform组件能用于控制模型旋转、移动、缩放等,是模型的基础组件。其中,Position变量用于表示模型在世界坐标的位置;Rotation变量用于表示模型按世界坐标系X,Y,Z坐标轴旋转的角度;Scale变量用于表示模型放大的倍数。
在多人协作操作中,每个客户端需要实时获取客户移动位置、旋转角度等数据,并将数据传到服务器中,同时接受服务器传送的其他客户端的数据进行同步。系统获取自身位置、旋转信息,并同步其他客户端位置、旋转,代码如下:
3.2.2 物体碰撞信息
Unity 3D的碰撞检测功能集成于其内置的PhysX物理引擎中,通过碰撞器组件(Collider)实现。其中Box Collider为轴对齐包围盒,Sphere Collider为球包围盒。碰撞器与处理物理运动特性的刚体组件(Rigidbody)配合使用。
为客户端上的所有用户在虚拟场景中添加空物体GameObject,此空物体表示用户的位置。在空物体上添加Box Collider组件和Rigidbody组件。其中Box Collider组件用于检测两个添加Box Collider组件的用户之间是否存在碰撞,Rigidbody组件能使两个发生碰撞的用户不存在穿透现象。当客户端检测到发生碰撞时,会记录下发生碰撞的用户名字和用户位置信息,并传到服务器中进行同步。其记录信息代码如下:
4 实际运行效果
连铸协作培训系统运行良好。图3展示了客户端连接服务器过程;图4展示了多个用户在虚拟场景中的移动情况;图5展示了两个客户端之间虚拟场景同步的情况。
5 结 语
本文针对连铸的多人协作培训,开发了以Photon Server服务器引擎和Unity 3D游戏引擎为核心的分布式虚拟现实连铸培训多人协作系统,实现了多用户在虚拟系统中的位置同步,碰撞检测和生产状态同步,满足了连铸多人培训的需求,具有良好的用户体验和使用效果。
参 考 文 献
[1]朱朝月.连铸虚拟交互系统的设计与实现[D].唐山:华北理工大学,2017.
[2]杜宝江,林灵,徐刚.分布式交互技术在虚拟培训中的研究与应用[J].信息技术,2015(6):157-161.
[3]谢敬伟.分布式虚拟现实交互仿真系统研究[D].杭州:浙江大学,2017.
[4]耿小兵,刘思江,朱晓阳,等.洗消分队战术技术仿真训练系统研究[J].系统仿真学报,2012,24(2):339-343.
[5]文娟.虚拟现实技术在出版和教育领域的应用分析[J].信息记录材料,2018,19(10):150-152.
[6]朱东方,苏群星,刘鹏远.装备分布式虚拟维修训练云仿真关键技术[J].计算机应用,2013,33(10):2778-2782.
[7]王立,张勇.船舶航行视景分布式可视化仿真技术研究[J].舰船科学技术,2016,38(22):76-78.
[8]黄鹏.基于Unity 3D的分布式协同虚拟装配仿真研究及实现[D].湘潭:湘潭大学,2017
[9]李大鹏.基于P2P架构的多人在线游戏的安全性研究[D].长春:吉林大学,2017.
[10]贺冯政.网络游戏服务器通信架构及关键技术研究[D].成都:电子科技大学,2008.