基于U3d的电缆射孔仿真培训系统的设计与开发
2020-06-30蔡蒙蒙杨丽波
蔡蒙蒙 杨丽波
摘 要: 针对传统石油行业培训方式缺乏交互性且无法满足员工实践需求等问题,设计并开发了一套交互性较强的电缆射孔实训系统。描述了使用Unity 3D引擎开发仿真培训系统的设计思路,总结了系统中用到的三维模型压缩优化、碰撞检测、键盘交互等关键技术。该系统通过逼真的射孔施工虚拟环境,使员工达到“身临其境”的感觉,从而快速掌握培训内容,提高培训效率。该系统还能增加员工对所负责业务的熟练程度,降低由于错误操作造成安全事故发生的可能性。
关键词: Unity 3D; 油田作业; 培训系统; 虚拟仿真
中图分类号: TP 37
文献标志码: A
Design and Development of Simulation Training System for
Cable Perforation Based on U3D
CAI Mengmeng, YANG Libo
(School of Computer and Information Technology, Northeastern University of Petroleum, Daqing, Heilongjiang 163318, China)
Abstract:
Aiming at the problem that the traditional petroleum industry training method lacks interactivity and cannot meet the practical needs of employees, a set of cable perforation training system with strong interactivity is designed and developed. This paper describes the design idea of developing simulation training system using Unity 3D engine, and summarizes the key technologies used in the system, such as 3D model compression optimization, collision detection and keyboard interaction. Through the realistic virtual environment of perforation construction, the system enables employees to achieve the feeling of "being in the scene", so as to quickly grasp the training content, improve the training efficiency, increase the proficiency of employees in the business which they are responsible for, and reduce the possibility of safety accidents caused by wrong operations.
Key words:
Unity 3D; oilfield operation; training system; virtual simulation
0 引言
由于石油行业实践过程中所拥有的安全问题和工艺复杂性,导致了现阶段常用的培训方式是依据观看视频的多媒体培训方式等来了解和掌握理论知识、学习事故案例以及井场跟班操作等来集中培训相关技术,这也是油田企业现阶段最重要的一种安全的培训方式[1]。但在实际应用中,这种操作方式存在着长周期、高成本、抽象难理解、限制培训效果等一些弊端。而当下的虚拟现实技术若能很好的与石油行业的培训方式进行结合,则可以很大程度改变传统培训方式中的一些弊端,通过更直观、生动的学习在一定程度上提高培训效率。
1 系统设计思路与构成框架
针对于电缆射孔实训系统的设计,通过了解和结合实际参加培训人员水平层次不齐的实际情况,在系统设计时,运用了香农-施拉姆模式的教育培训模式。当香浓-施拉姆模式的教育培训模式与三维仿真培训相结合时,由于三维仿真培训是以软件系统的形式进行无导师教学的一种方式,所以决定了香农-施拉姆模式需要经过一定的改进才能应用到三维仿真培训中,发挥其优势,提高培训人员的兴趣,进而快速的扩大培训人员的经验领域[2]。
如图1所示。
本系统主要内容由三大模块构成,其包括:三维动画演示模块、三维交互式演练学习模块、三维考试测评模块。首先,通过相关知识的文档阅览和动画演示,进行灌输式学习,使学习者掌握培训中的基本知识;其次,在对基础知识有了一定了解的基础上,在通过在三维环境中进行交互式演练学习,对学习的内容进行强化和扩展,以便学习者对基础知识的巩固和深化;最后,通过三维考试系统对学习到的知识进行测试,并把测试结果反馈给培训人员,根据反馈信息重新进行针对性的培训学习,直至完全掌握。
2 关键技术
2.1 三维模型的压缩优化技术
虚拟射孔井场是个非常复杂的模型集合,在渲染过程中需要实时生成大量的多边形,增加系统运行时的开销,降低了系统的实时交互速度。为此,不仅要在建模的过程中综合应用各种三维模型优化技术,而且还要在三维场景中通过使用有效的优化算法进行优化。优化结果的好坏直接影响系统运行效率及显示速度,良好的优化策略及方法可以极大减少模型所占据的内存空间,使系统运行更加流畅。三维模型的压缩优化贯穿整个模型及场景的创建過程,其主要从两个方面进行:建模和贴图。
(1)建模过程中的压缩优化
从模型的个数上进行优化。场景中的模型个数过多会直接影响到三维场景的导出及场景的打开速度。如果当前场景里的模型个数过多,计算机的计算量太大,可能会使部分物体无法加载,造成模型丢失现象;即使所有模型都加载了,其运行速度也会很慢。因此,在实际解决中,将相同材质的物体分别赋好材质,调整好各自的贴图坐标,再将这些相同材质的物体进行合并以减少模型个数。在虚拟射孔井场中,很多模型就采用了从个数上的整合来达到建模过程中的压缩优化,如采油树法兰螺丝,一共为十二个,大小颜色均相同,所以在场景中,将法兰螺丝整合在一个空物体中,并调整好位置坐标,进而减少场景模型渲染所需要的时间。
从模型的分段及布面上进行优化。在建模时,针对不同的模型采用合适的分段数,可以尽量减小模型的顶点数及面数,从而减少不必要的点、线、面所占据的空间。主要用到了Plane模型面的精简和Cylinder模型面的精简。其次合理的布面也是很重要的,通过适当的删除模型之间重叠的面和模型底部看不到的面来降低整个场景的面数,这样能提高贴图的利用率,进而提高交互场景的运行速度。如:场景中,贴着地面的井架底座面。
在场景中,简模的运用十分重要。对于大多数相对不重要的模型或者较远处作为陪衬的模型要使用简模,比如在虚拟射孔井场,为了场景的完整性而作为陪衬的枪身车、运输车等,其车内的构造、车身的细节均不需要进行精细的制作,放置简模即可。
(2)贴图过程中的压缩优化
贴图的大小对系统运行速度影响很大,精简的贴图既可以保证效果,又可以减少系统大小提高系统运行效率。在保证图像质量的前提下,运用纹理压缩技术对纹理图片进行必要的压缩处理,减少图片文件的大小,通过减小纹理图片几何尺寸的大小来实现纹理压缩。进行模型贴图时采用UV贴图,能比其他贴图方式所占的容量更小,且颜色相近的模型,可以选择共用一张贴图,从而达到减少模型文件的大小。
2.2 碰撞检测技术
虚拟现实要求系统能够实现与用戶的交互,在其中便会遇到有关碰撞检测的问题,甚至会成为其中的关键问题[3]。在电缆起下枪身工序中,有较多的操作中,两个不可穿透的对象不可能在同一时间共享相同的空间区域[4]。为了防止系统中运动的物体发生彼此穿透的现象,工序中的紧固操作、下井操作等均采用了碰撞检测技术。
此外,在场景中,会有一个观察者的身份存在,其在虚拟环境中进行漫游时,也需要进行碰撞检测。进而可以避免诸如观察者飞入地下或者穿墙而过等不真实情况的发生[5]。而在unity3d中,碰撞检测的功能是有函数封装好的,我们调用函数就可以实现了。OnControllerColliderHit()函数是用于角色碰撞的,物体如果附加了CharactorController则可使用这个函数检测碰撞。
碰撞检测技术在虚拟射孔井场中运用时,有两个很重要且需要了解的概念:刚体组件与碰撞体组件,且对于创建在Unity3D中的物体来说,碰撞体和刚体是比较容易混淆的两个概念,将以简易的Cube图形为展示,表现了几组不同的碰撞反应,如图2所示。
(1)在Unity 3D创建一个放置在地面的Cube物体,一般创建后的物体会自带碰撞体组件(Collider),若需要给物体添加刚体或者碰撞体时,先选中该物体,然后选择Component > Physics,在Physics里可以添加Collider碰撞体组件,如图3所示。
以及Rigidbody刚体组件,如图4所示。一个在地面的物体若只有刚体而没有碰撞体,此时它是不会运动并碰撞到其他物体的,因为它会直接掉落到地面以下。
(2)当一个带有碰撞体组件与刚体组件的Cube A撞向没有添加碰撞体和刚体的Cube B时,会发现Cube A会直接穿过Cube B。
(3)当一个带有碰撞体组件与刚体组件的Cube A撞向添加了碰撞体而没有刚体的Cube B时,Cube A与Cube B会发生碰撞,且可以通过碰撞信息监测反馈出来,但是此时的Cube A能撞到B却不会穿过Cube B。这个方法在虚拟射孔井场中的运用十分常见,因为在射孔工序操作中,有较多类似拧螺丝,紧固管钳等操作,在虚拟场景中进行这些操作时,可能会因为移动距离或位置坐标的精度不够,而导致穿模现象的出现。若利用该种碰撞的方法,则不管A物体如何撞击B,都无法穿过B物体,也就避免了在场景中,出现A物体穿过B物体的失真现象。
(4)当一个带有碰撞体组件与刚体组件的Cube A撞向同样添加了碰撞体和刚体的Cube B时,Cube A与Cube B会发生碰撞,且会根据实际情况产生碰撞反应,例如:若Cube A的质量足够大于B时,A可以将B撞开,且此时的碰撞可以通过碰撞信息监测函数void OnCollisionEnter(Collision other)反映出来。
2.3 键盘交互技术
键盘交互主要是指能够控制操作者在系统中进行漫游,参观各个位置的三维物体。在虚拟射孔井场中,有许多操作是在不同的位置完成的,而键盘交互技术的加入能使操作者更有身临其境的感觉。键盘交互以设置方向键“↑”、“↓”、“←”、“→”或者“W”、“S”、“A”、“D”为控制键,分别用来控制化身的“前”、“后”、“左”、“右”的走动。在unity3d中,可以通过函数实现这些功能,以用“W”、“S”、“A”、“D”为控制键为例,代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public test : MonoBehaviour {
private Transform m_Transform;
void Start () {
m_Transform = gameObject.GetComponent
}
void Update () {
if (Input.GetKey (KeyCode.W))//判断按键
{
m_Transform.Translate (Vector3.forward * 0.1f, Space.Self);//前进与速度
}
if (Input.GetKey (KeyCode.S)) {
m_Transform.Translate (Vector3.back * 0.1f, Space.Self);
}
if (Input.GetKey (KeyCode.A)) {
m_Transform.Translate (Vector3.left * 0.1f, Space.Self);
}
if (Input.GetKey (KeyCode.D)) {
m_Transform.Translate (Vector3.right * 0.1f, Space.Self);
}
}
}
3 總结
电缆射孔工序是一项复杂的系统工程,需要多种专业操作人员利用适合的机械设备进行联合作业。面对这样较为复杂、要求较高且有一定危险性的工程,利用传统的多媒体培训或实际场地观摩,都可能使培训的效果达不到理想标准。而基于虚拟现实技术的实训系统则很好地解决上述问题。它不但解决了现实培训中的时间环境限制和设备不足的问题,同时降低了实训运行的成本,可提供反复练习。此外,还能将抽象的概念与问题直观、形象的反应给培训人员,从而调动他们的学习积极性和主动性,进而提高教学质量,让培训的效果能更加显著[6]。
参考文献
[1]刘贤梅,郝爱民.油田安全作业虚拟仿真训练系统研究[J].系统仿真学报,2006(11):3082-3087.
[2] 解红涛,张丽娜.香农-施拉姆模式的改进及应用研究[J].西南民族大学学报(自然科学版),2011,37(1):136-139.
[3] 高春晓,刘玉树.碰撞检测技术综述[J].计算机工程与应用,2002(5):9-11.
[4] 张红岩.基于虚拟现实技术的煤矿安全培训系统[J].工矿自动化,2014,40(2):88-92.
[5] 熊伟,毛善君,马蔼乃.基于观察者的碰撞检测技术在虚拟环境漫游中的应用[J].计算机应用,2002(11):6-7.
[6] 陈良英,罗凡.基于VR的电梯拆装实训系统的研究[J].微型电脑应用,2017,33(4):59-61.
(收稿日期: 2019.05.29)