基于Unity3D的液压元件虚拟拆装实验系统
2022-08-17宋辛辛陈永当顾金芋曹坤煜郑星
宋辛辛, 陈永当, 顾金芋, 曹坤煜, 郑星
(1.西安工程大学, 机电工程学院, 陕西, 西安 710600; 2.西安交通大学, 航天学院, 陕西, 西安 710048)
0 引言
液压传动作为机械专业中重要的课程之一,液压元件拆装实验有利于学生理解其内部复杂结构。传统液压实验课程存在着实验器材的种类和数量有限,操作不当易损坏,易受时间和空间限制等问题[1]。因此,设计开发出一款沉浸感强、交互性高的液压虚拟实验系统具有一定的意义。
目前,虚拟现实技术在机械、教育领域的应用已取得一定成果。李梦如等人采用Inventor构建虚拟实验场景,Unity3D为开发平台设计液压虚拟实验系统[2]。陈敏捷等人利用UG与3dsMax软件建立液压实验模型,导入Unity3D搭建了液压虚拟仿真实验系统[3]。吴飞等人使用Unity3D软件设计开发了一套颚式破碎机虚拟拆装实验教学系统,可准确展示其零件结构和工作原理[4]。以上研究在一定程度上实现了实验的虚拟化,但其交互方式通常以鼠标键盘为主,仍存在沉浸感不强,交互性差等问题。
因此,本文以液压元件拆装实验为研究对象,利用层次化割集法、混合包围盒碰撞检测算法和HTC Vive头戴式显示器及虚拟现实手柄进行开发研究。
1 系统总体设计
1.1 系统整体架构
斜轴式轴向柱塞泵是典型的液压动力元件,具有结构复杂、零件数量多等特点。因此,本文以斜轴式轴向柱塞泵为例,主要从用户管理、实验内容、关键技术、界面设计与系统发布等方面对系统进行开发研究,系统整体架构如图1所示。
图1 系统整体架构
1.2 系统开发平台
目前,常用的虚拟现实开发引擎有Virtools、Unreal、Converse3D、Unity3D等,其中,Unity3D是一款集场景管理、系统开发、交互实现等功能于一体的跨平台引擎,支持Windows、Linux、Mac OS、IOS、和Andriod等主流平台,且具有良好移植性、用户界面友好、编辑操作方便等优点[5-6]。因此,本系统以Unity3D为虚拟现实开发平台,C#为编程语言,3dsMax和SolidWorks为建模工具,Visual Studio2017为辅助工具对液压元件虚拟拆装系统进行开发。此外,为了提高虚拟实验真实性和沉浸感采用HTC Vive头显设备和手柄作为交互工具[7]。
1.3 系统开发流程
液压元件虚拟拆装实验系统开发流程如图2所示。首先,根据液压元件实际尺寸利用SolidWorks软件完成液压元件建模,3DsMax软件对实验场景进行建模;然后,在3DsMax软件中对模型进行模型优化处理;最后,导入Unity3D中进行系统界面开发,并结合拆装序列规划算法和碰撞检测算法实现液压元件装配与拆卸,并可根据不同需求选择教学模式或练习模式。
2 液压元件模型处理与装配序列规划
2.1 模型优化处理
SolidWorks模型存在面数较多的问题,导入Unity3D后会严重影响系统运行速度,因此需要在导入Unity3D软件前对模型进行面数优化和减面处理。在3DsMax中将斜轴式轴向柱塞泵模型转化为可编辑多边形,并在修改器中对每个零件分别进行面数优化,优化前后对比见图3。优化前的面数为4 655 284、顶点数为2 327 731,优化后的面数为1 640 642、顶点数为820 410,优化后模型面数减少了64.75%,顶点数减少了64.76%。
图2 系统开发流程
(a) 减面前模型
(b) 减面后模型图3 模型面数优化前后对比
2.2 液压元件装配序列规划
一方面,由于装配过程的不可逆性,必须按照一定的装配顺序将零件装配成一个整体;另一方面,由于液压元件的拆装实验需要确定可行的装配序列,使学生可以清晰了解液压元件的装配过程,以达到辅助教学的目的。因此,本文利用层次化割集法规划装配序列[8],其求解流程见图4。由于斜轴式轴向柱塞泵结构复杂,零件数量较多,是典型的液压动力元件,因此本文以斜轴式轴向柱塞泵为例建立如图5所示的装配信息模型,对其装配序列进行规划,零件名称见表1。
图4 层次化割集法算法流程图
图5 斜轴式轴向柱塞泵装配信息模型
表1 斜轴式轴向柱塞泵零件名称
利用层次化割集法,并从操作的并行性、重定向次数、聚合性准则和操作的复杂性4个方面进行评价,求解最优装配序列[9]。将斜轴式轴向柱塞泵根据装配体和聚族的定义分为5层,其中,聚族1包含零件7、8和10,聚族2包含零件1和2,聚族3包含零件3和5,聚族4包含零件9、24和25,子子装配体1包含零件18、22、23和聚族4,子子装配体2包含零件16、17、19、20和21,子装配体包含零件26、12、11、13、14、15、子子装配体1和子子装配体2。因此,斜轴式轴向柱塞泵可以看成由零件4、6、聚族2、聚族3和子装配体组成。按照层次化割集法求解得到每一层的装配序列见表2,并得到斜轴式轴向柱塞泵的最优装配序列为:9-25-24-23-22-18-26-12-15-13-11-16-17-19-20-21-14-7-8-10-6-4-5-3-2-1。
表2 斜轴式轴向柱塞泵装配序列
3 液压元件交互功能实现
3.1 碰撞检测算法
在虚拟拆装过程中,需要对每个零件添加包围盒碰撞器,以判断手柄与零件之间的接触状态。Unity3D中的Box Collider包围盒碰撞器构造简单、检测效率高,适用于类长方体形状对象,Mesh Collider包围盒密封性很高,适用于形状复杂对象。因此,为类长方体零件添加Box Collider包围盒碰撞器,其余零件添加Mesh Collider包围盒碰撞器。
由于网格包围盒主要由三角形面片组成,在虚拟场景中主要涉及AABB包围盒和网格包围盒相交测试。因此,碰撞检测可转化为两AABB包围盒之间、空间三角形面片和AABB包围盒、两三角形面片之间的图元相交测试,对应的相交测试原理示意如图6中①、②、③所示。
图6 碰撞检测原理示意图
(1) AABB包围盒之间相交测试
根据分离轴定律可知,若两凸多面体不相交,则必存在一条分离轴使得两凸多面体在该轴的投影区域分离,且该分离轴平行于两凸面体两条边的叉乘积或垂直于其中一个凸多面体的一个面[5]。因此,AABB包围盒之间的碰撞检测可转化为检测它们在三维坐标轴投影区域是否重合。设AABB1和AABB2的最小顶点分别为P1(L10,L11,L12),P2(L20,L21,L22),最大顶点分别为Q1(H10,H11,H12),Q2(H20,H21,H22),若满足式(1)中任一条件,则两AABB包围盒不相交。
L10>H20
L20>H10
L11>H21
L21>H11
L12>H22
L22>H12
(1)
(2) 空间三角面片和AABB包围盒之间相交测试
根据分离轴定律可知,可转化为检测AABB包围盒3条面法线、三角形1条面法线和边—边组合9条叉积轴的投影情况,若存在分离轴,则不相交,遍历该网格包围盒下一个三角形,若存在任一三角形和AABB包围盒相交,则AABB包围盒和网格包围盒相交。设AABB包围盒局部坐标轴为
u0=(1,0,0)
u1=(0,1,0)
u2=(0,0,1)
(2)
其中,u0、u1、u2的取值范围为e0、e1、e2。
测试三角形定义为
V0=(V0x,V0y,V0z)
V1=(V1x,V1y,V1z)
V2=(V2x,V2y,V2z)
(3)
为简化计算,将AABB包围盒中心移至原点,则三角形三条边可定义为
f0=V1-V0=(f0x,f0y,f0z)
f1=V2-V1=(f1x,f1y,f1z)
f2=V0-V2=(f2x,f2y,f2z)
(4)
9条叉积轴定义为
ai=ui×fj
(5)
其中,i,j=0,1,2。
故,轴n上盒体投影半径为
r=e0u0·n+e1u1·n+e2u2·n
(6)
设p0,p1,p2为原点到三角形顶点在n上的投影点之间的距离,则上述三角形的投影区间为:[min(p0,p1,p2),max(p0,p1,p2)]。若区间满足[-r,r]与三角形投影区间的交集为空集,则三角形与AABB包围盒不相交,并遍历该网格包围盒的下一个三角形面片进行测试。
(3) 两三角形面片之间的相交测试
采用分离轴定律对11条分离轴进行测试(2条平行于三角形面法线的轴,9种边边组合的叉积轴),针对每个轴,计算三角形在该轴上用于相交测试的投影区间,若任一轴上不存在投影区间的交集,则被测三角形面片间分离,若投影区间在11个轴上均相交,则两个三角形相交。
3.2 液压零件虚拟认知与拆装功能
1) 液压零件的认知与拾取功能
为每个零件和手柄添加包围盒碰撞器,设置碰撞标签,又由于两个网格碰撞器之间不会发生碰撞,因此需要将网格标记为凸起,以实现零件与零件、零件与手柄、零件与其他物体在虚拟场景中产生碰撞时可及时被检测,避免虚拟场景中物体之间出现干涉或穿透等情况。如图7所示,添加碰撞器后,主要实现功能如下。
(1) 零件认知功能:手柄接触到零件时产生震动,随即显示零件名称。
(2) 零件拾取功能:当手柄接触零件且同时按下手柄两侧的按钮时,可实现对元件的抓取移动,用于零件安装时和观察零件结构特征。
2) 液压零件的装配与拆卸功能
为实现斜轴式轴向柱塞泵元件的准确、快速装配,本系统为每个零件设置有待装配的虚位置。在装配时,根据表1中的规划序列从第5层至第1层用手柄逐一拾取零件进行装配,当零件被移动至对应安装位置时,手柄产生震动提醒,松开按键后零件即被安装至对应位置。装配的第一个零件首先被赋予Rigidbody重力和包围盒碰撞器属性,在装配完成一个零件后,下一个零件才被赋予以上属性,直至最后一个零件安装完成,即实现整个斜轴式轴向柱塞泵元件的装配,如图8所示。
(a) 零件认知功能
(b) 零件拾取功能图7 零件认知和拾取功能
图8 装配功能实现
在进行斜轴式轴向柱塞泵拆卸时,按照表1中规划的序列从第1层至第5层的相反装配序列进行拆卸,拆卸完成后可将零件放置实验台,以完成整个元件的虚拟拆卸实验。
4 系统界面设计及发布
液压元件虚拟拆装系统界面与场景主要包括登录界面、实验场景、实验原理展示和虚拟拆装试验台4个模块,见图9。完成液压拆装实验系统关键技术难点和功能开发后,发布至Windows平台,实验过程中通过手柄发射射线触发场景3DUI界面进行交互。
5 总结
本文主要从液压元件虚拟拆装系统总体设计、液压元件模型优化处理与装配序列规划、交互功能实现和系统界面设计与发布4个模块进行研究,采用混合包围盒碰撞检测算法解决零件之间干涉问题,以Unity3D为开发平台,HTC Vive为交互设备,开发了一个沉浸感强、交互性高的液压元件虚拟拆装实验系统。
图9 液压元件拆装系统模块