Unity3D 碰撞检测技术在电力设备虚拟装配中的应用

2020-10-26 02:08李政峰王青霞肖昱锋
科学技术创新 2020年30期
关键词:碰撞检测触发器部件

李政峰 王青霞 肖昱锋

(湖南怀化学院 电气与信息工程学院,湖南 怀化418008)

随着虚拟现实技术的迅速发展,虚拟装配在产品开发,实训教学中得到了广泛的应用。虚拟装配无需产品或实际物理条件,在实验的过程中只需要在模型创建的基础上,对模型添加动画,在过程中应用可视化和数据表现方式,利用相关软件来辅助与装配相关的工作过程[1]。在基于Unity3D 电力设备的虚拟装配中,对多模型的装配涉及到的碰撞是装配中的一种重要问题。Unity3D 开发平台提供碰撞体添加功能,用户可以给设计好的模型添加相应的碰撞体,确定碰撞检测区域,当触发器碰到碰撞体后触发制定的转配操作[2]。

1 Unity3D 碰撞检测技术分析

虚拟装配中,不同的物理模型在装配的过程中需要碰撞检测技术的支持。在模型确定的基础上,给三维模型添加相应的碰撞体,可以实现碰撞的监测。Unity3D 碰撞检测的算法主要有以下两种包围盒算法:

(1)AABB 包围盒:AABB 包围盒是平行于坐标轴的最小六面体,故描述一个AABB,仅需六个标量。AABB 构造比较简单,存储空间小,但紧密性差,尤其对不规则几何形体,冗余空间很大,当对象旋转时,无法对其进行相应的旋转。Unity 里面有一个Bounds 类,里面采用的就是AABB 包围盒。

(2)OBB 包围盒:OBB 包围盒是包含该对象且相对于坐标轴方向任意的最小的长方体。OBB 最大特点是它的方向的任意性,这使得它可以根据被包围对象的形状特点尽可能紧密的包围对象,但同时也使得它的相交测试变得复杂。在Unity 里面,Boxcollider 可以随着物体的旋转而旋转,属于OBB 包围盒。本系统在设计中采用的是OBB 包围盒。

在unity3d 中,系统会默认给每个场景中的对象添加一个碰撞组件,能检测碰撞发生的方式有两种,一种是利用碰撞器,另一种是触发器:碰撞器是一群组件,包括很多种类,如Box Collider,Sphere Collider,Capsule Collider,Mesh Collider,Wheel Collider 等,相关碰撞器可以应用到不同场合,只需要加载到需要碰撞检测的对象即可,具体类型有Static Collider、Rigidbody Collider、Kinematic Rigidbody Collider、Character Controllers 四种类型选择;触发器在使用的过程中,只需要在unity3d 中的检视面板中打开配置器组件的Is Trigger 选项即可。两种检测语句区别如下:

MonoBehaviour.OnTriggerEnter(Collider other)当进入触发器

MonoBehaviour.OnTriggerExit(Collider other)当退出触发器

MonoBehaviour.OnTriggerStay(Collider other)当逗留触发器

MonoBehaviour.OnCollisionEnter(Collision collisionInfo)当 进入碰撞器

MonoBehaviour.OnCollisionExit(Collision collisionInfo)当退出碰撞器

MonoBehaviour.OnCollisionStay(Collision collisionInfo)当 逗留碰撞器

碰撞器根据物理引擎引发碰撞,产生碰撞的效果;触发器被物理引擎所忽略,没有碰撞效果。

2 虚拟装配系统设计说明

虚拟装配是根据设计的模型特征、精度特征,真实地模拟产品三维装配工程,并允许用户以交互方式控制产品的三维装配过程[3],系统以用户自主装配的方式进行,操作者自主拾取部件并将其装配到指定的位置完成模型的装配。在虚拟装配设计中,选择的是基于电动机的虚拟装配实训项目。首选进行电机设备的型号选择,按照尺寸比例得到具体的数据;接着进行设备的虚拟建模,建模主要采用CAD,3DMAX,PHOTOSHOP 完成(基本的建模思路是利用CAD 得到零部件路径图,导入3DMAX创建模型、ps 贴图等操作);最后在unity3d 中创建场景,导入模型,按照装配的需求对模型进行运动控制(碰撞检测的具体实现),完成后按要求输出打包为不同的格式,整个设计流程如图1。

图1 装配系统设计流程图

3 虚拟装配系统的具体设计与实现

3.1 虚拟模型的准备

电力设备的相关模型可以基于CAD 工程图纸获得具体的参数,在3DMAX 中根据倒入的路径文件通过挤出,车削,倒角等功能完成相关模型的准备;在模型创建的基础上,利用3DMAX 自带的标准材质给对象进行贴图(贴图主要应用Photoshop 处理)和渲染;最后根据装配的需求对相关的模型完成装配动画的设计。在模型准备中需要注意的问题:

(1)因为Unity3D 与3DMAX 的单位存在100:1 的现象,在3DMAX 中设置的单位采用厘米。

(2)相关模型动画设计过程中按照装配顺序进行零件的装配。装配好的动画对象导出为FBX 文件,导出路径为事先创建好的Unity3D 工程文件的资源文件夹。

3.2 虚拟场景设计

打开事先建立的Unity3D 工程文件,3DMAX 导出的文件(三维模型、模型贴图、动画文件等)已经自动存放在Unity3D 的资源文件夹Assets 中。

场景设计:根据组装的场景需求,应用工具中的立方体创建出三面墙,打上灯光并对灯光参数进行调整,保证场景的亮度。导入对象体到虚拟场景中,并对电动机三维模型进行缩放、移动、旋转、显示、隐藏等属性的设置。

3.3 虚拟场景中对象碰撞检测的应用

应用Unity3D 开发平台提供的碰撞体添加功能,可以给选定的模型添加相应的碰撞体,同时可以划定碰撞区域,当触发器碰到碰撞体后就触发指定的操作。在设计中,给虚拟装配的三维模型添加盒碰撞属性,对于外形简单的零部件模型,直接添加一个包围盒就能实现精确度较高的碰撞触发区域,如果是复杂的零部件,可以把模型进行物理分解,给模型添加多个碰撞体来提高识别的精度。在添加包围盒的基础上,为了增加控制的精度,可以通过调节包围盒的位置和大小以提高碰撞包围盒与实际模型形状特征的重合度。

装配过程通过编写JAVA 脚本实现。具体的设计思路是按照装配的步骤选定一个模型作为要装配的部件,另外一个模型以不同的颜色显示作为装配位置的标志物,还有一个为最终转配好的完整模型。使用者通过单击按钮控制对象的运动,运动的对象和标志位置的有颜色部件发生碰撞时,销毁拾取零件和有色部件,显示已经转配好的完整部件,同时显示下一个进行装配的零部件的位置[4]。按设定好的装配顺序完成电机的装配。

具体的实现过程:在系统实现中,主要需要解决的问题是通过按钮单击响应相应的动画播放,动画对象和设定的对象发生碰撞,给出提示信息完成模型部件的组装。对象运动通过动画控制器Animator 进行创建,在动画片段设置中,需要运动的对象的位移要大于给定的参照模型的位移量,保证后面运动能碰撞到对象;按钮通过2D 场景进行创建;对象运动通过按钮激活执行,在运动中和预定的对象进行碰撞后给出提示的信息,部分代码如下:

系统效果如图2。

图2 装配效果图

4 应用效果分析

在系统运行中,为了使装配系统具有更好的交互性,可以给整个场景设置一个实验室环境;在对象的运动中可以给对象进行颜色改变或者添加声音效果;碰撞的方式有多种方案可以选择,在碰撞设置中,可以针对不同的模型进行多碰撞体的设置,同时在碰撞的基础上,可以给出一些具有评价性的提示,比如音频、文字提示等。虚拟拆装设备可以通过各种模型的控制完成各种部件的拆装,学习者在学习的过程中可以多次重复使用。

猜你喜欢
碰撞检测触发器部件
基于动力学补偿的机器人电机力矩误差碰撞检测
汉字部件的避让变形
全新预测碰撞检测系统
配置触发器有条件启动Windows服务
奥迪e-tron纯电动汽车的高电压部件(下)
一种陀飞轮表的双秒轮结构
基于BIM的铁路信号室外设备布置与碰撞检测方法
现代汉字的两种分析法与国家文字规范(四)
触发器在酒店管理系统中的应用
基于Virtools的虚拟灭火系统碰撞检测设计与实现