基于Unity3D的凸轮机构虚拟设计与仿真研究
2015-04-26韩瑞凯池建斌
韩瑞凯, 池建斌
(石家庄铁道大学 机械工程学院,河北 石家庄 050043)
0 引言
虚拟实验是以计算机为控制中心,利用软件技术构建系统的逻辑结构模型,基于模块化和层次化的设计思想,采用软硬件结合的方式,协调相关硬件和设备形成的虚拟实验系统[1]。虚拟实验按照应用形式分为桌面式和沉浸式。传统实验主要借助专业硬件设备实现,实验效率低,灵活性差,受时间和空间的限制。虚拟实验的实验设备和实验场景是数字的和虚拟的,方便扩展与维护,内容和形式更加灵活。随着移动设备性能的提高和Android及IOS等操作系统的普及,手机、平板电脑等移动设备因其便捷性和灵活性逐渐成为重要的信息交流平台。在移动设备上运行的凸轮机构虚拟实验进一步打破了空间和时间对实验的限制,用户可以随时随地进行实验,面对面交流,分享实验结果和实验过程。
凸轮机构虚拟实验系统主要用于凸轮机构实验验证和实验教学,目前主要使用CAD软件和动力学仿真软件开发,使用平台主要为PC平台。使用Unity3D开发虚拟实验台可以发布到PC平台和移动平台上使用。因为计算机的性能较高,计算精度高,可以运行要求相对复杂的实验。而移动平台凸轮虚拟实验不受时空的限制,可以随时随地进行实验,展示实验过程,分享实验结果。结合二者的优势,一个虚拟实验台有计算机和移动平台两个版本,功能类似但是各有侧重。
1 研究背景与现状
凸轮机构虚拟实验主要为桌面式,包括虚拟实验构件,交互界面,虚拟实验场景等。虚拟实验构件包括凸轮,从动件,机架和其他构件。主要功能包括凸轮廓线设计,凸轮运动仿真和凸轮机构设计及运动仿真。目前,构建凸轮机构虚拟实验使用的工具主要有CAD软件的二次开发和动力学仿真软件等。
CAD软件和动力学仿真软件具有较为完善的图形编辑功能,建模功能和仿真功能,通过对其进行二次开发可以实现自定义的功能。如穆立茂等人使用CAXA二次开发功能开发出了直动从动件盘形凸轮廓线设计虚拟实验[2]。实验系统可以演示凸轮廓线设计过程和绘制从动件运动规律。刘善林等人借助Solidworks二次开发功能开发出了凸轮廓线的精确设计和运动仿真系统[3]。范云霄等人使用ADAMS建立凸轮虚拟样机。根据凸轮理论尺寸计算出凸轮廓线曲线,输入到ADAMS中生成凸轮模型,然后使用ADAMS的自动修改功能对廓线进行修改,减少失真[4]。但是使用CAD软件和动力学软件构建虚拟实验,需要用户掌握相应的软件,操作过程复杂,扩展性和可移植性差。
____使用虚拟现实工具构建的凸轮机构虚拟实验系统有更好的交互性和沉浸感,可以获得较为真实的实验过程,其组成如图1。虚拟现实工具主要包括Java3D,X3D和Unity3D等。高校使用虚拟现实工具构建了不同学科领域的虚拟实验。不仅解决了高校中实验设备和场地紧张问题,而且可以使学生尽快接触到价格昂贵或者前沿的实验设备。如合肥工业大学开发出了机械基础虚拟实验软件,加强了学生对问题的认识和理解[5]。王荣芝等人利用Java3D和3DMAX研究了虚拟实验元件的建模和与可视化[6]。陈敏等人使用X3D实现了网络分布式机械创新设计虚拟实验系统,用户可以利用网络与其他用户交流[7]。Unity3D目前主要应用于游戏、场景漫游、虚拟培训、工业仿真等领域,可以进行场景漫游,构建虚拟场景和实现交互[8-10]。使用虚拟现实工具构建的虚拟实验效果比较真实,而且用户不需要掌握专业CAD软件和仿真软件即可进行凸轮设计与运动仿真,扩展性和灵活性高。
图1 凸轮机构虚拟实验台组成
凸轮机构实验主要涉及凸轮廓线设计、凸轮运动仿真和凸轮机构设计及其运动仿真等。凸轮廓线设计是指根据运动曲线设计凸轮廓线,基本原理是“反转法”,包括作图法和解析法。传统作图法简单直观但是精度不高。解析法通过构建数学模型计算得到廓线方程,精度高,需要大量运算。虚拟实验中结合两种方法,从运动曲线中读取点,通过数学模型计算得到廓线点[11]。凸轮运动仿真包含获取从动件运动曲线和获取凸轮相关参数的功能。
2 关键技术
使用Unity3D开凸轮机构虚拟实验系统,涉及虚拟实验设备的建模、物理引擎、交互界面、凸轮廓线设计、凸轮机构运动仿真等,包括设计运动曲线、生成平面凸轮实体、界面布局、机构组装等技术。
2.1 设计运动曲线
凸轮轮廓廓线设计的依据是从动件运动曲线,从动件运动曲线用于描述从动件在各个阶段的运动状态,包括各个阶段的运动初始状态和运动规律。运动曲线具体通过位移时间曲线,速度时间曲线,加速度时间曲线描述运动。
文献[12]介绍了使用7段加速度曲线作为通用运动曲线,通过修改各段曲线的时间区间和最大(最小)加速度即可生成不同运动规律的运动曲线[12]。借助通用运动曲线可以生成不同类型的运动规律,作为实验系统内置的曲线类型提供给用户,但是实际应用中用户希望自定义运动曲线。解决方法是允许用户输入曲线方程,由曲线方程生成运动曲线。
凸轮机构每个区间内的位移曲线一般是单调连续的,曲线表达式由数字、常量、变量、运算符、数字分组符号等组成,运算符的优先级和操作符数如表1所示。用户输入的表达式属于字符类型,需要将字符型表达式转化为可读的表达式。
表1 表达式运算
表达式实质是变量x到变量y的映射关系,x与y一一对应,变量x是一系列离散值,得到的变量y也是一系列离散值。读取表达式基本思想是按照优先级逐步计算表达式y值,具体过程如图2所示。
图2 读取表达式
(1)将字符型表达式中的x值替换为给定值。
(2)检测表达式中是否存在括号。如存在则提取括号内表达式并记录为子表达式,回到步骤(1),按照读取表达式过程计算该子表达式值。通过此步骤,表达式中括号内的表达式转化为常值。
(3)检测表达式中是否存在字符串”sin”,”cos”,”tan”,”cot”,若存在,则获取该字符串附近的数字字符,记录为子表达式,计算该子表达式的值。通过此步骤,表达式中三角函数运算转化为常值
(4)检测表达式中是否存在字符’^’,若存在,则获取字符’^’附近的数字字符,记录为子表达式,计算该子表达式的值。通过此步骤,表达中的乘方和开方运算转化为常值。
(5)至此,表达式中仅有加减法运算。按照字符”+”和”-”分隔表达式为若干变量,相加得到最终结果。
设计凸轮廓线的过程主要是设计运动曲线的过程。设计运动曲线的步骤是:①确定运动区间和每个区间的初始条件。②确定每个运动区间内的运动规律。用户既可以使用预设的运动规律,也可以输入表达式自定义运动规律。通过此方法,用户可以快速地设计符合要求的运动曲线。
2.2 生成平面凸轮实体
从动件运动曲线由若干离散点组成,与凸轮廓线点一一对应。根据从动件运动曲线点计算得到凸轮廓线上的点。从运动曲线上选取的点越多,生成的凸轮模型就越精细,但是过多的点会影响程序的执行速度。因此需要在保证模型精细程度前提下,选取最少点。
平面凸轮一般由三个面组成,工作面和两个非工作面。工作面需要满足工程需要,网格面相对较多,而非工作面使用较少的三角面。具体过程是:
(1)从从动件运动曲线上选取离散点。运动曲线是由不同区间的曲线组成,每段曲线的区间大小不一样,运动规律也不一样。为了减少模型的面数,应该根据每段曲线的区间大小确定每段曲线应该选取的点数。
(2)根据运动曲线点集合和凸轮厚度计算凸轮廓线点集合。
(3)由凸轮廓线点生成凸轮网格模型。构造网格模型需要指定构造网格用到的点,面法线,点构成的三角面等。Mesh.vertices()函数功能是为模型指定构造网格用到的所有点。点按照列举的顺序依次用0、1、2、3……代表。平面凸轮的工作面由两组数组点生成,非工作面由一组数组点和中心点生成。所以,构造平面凸轮网格需要4组凸轮廓线点集合和两个中心点。Mesh.triangles()函数的功能是使用Mesh.vertices中包含的点为每个网格三角面指定顶点,顶点的列举顺序决定面法线的方向。如图3所示。
(4)将点、三角面等参数赋给凸轮模型的MeshFilter组件,得到凸轮网格模型。
通过解析法得到凸轮廓线点集合可以精确地将运动曲线映射为凸轮廓线,生成精细的凸轮。用户根据需要选择凸轮模型的精细程度以满足不同要求。
图3 凸轮网格的生成
2.3 跨平台界面自适应
虚拟实验系统应该有友好的交互界面,友好的交互界面保证了用户与虚拟实验系统信息交流的流畅性和便捷性。使用Unity3D开发的凸轮机构虚拟实验台可以跨平台使用,提高了实验台的便捷性,但带来的问题是不同分辨率的平台可能引起界面布局的错位。为了使虚拟实验系统有友好的交互界面,交互界面上的菜单、按钮等控件应该自动定位到设定的位置并有合理的比例大小。具体包括控件的绝对位置,相对位置和比例大小。
界面控件包括按钮、列表、菜单、输入框等,按照形式可以分为固定控件和浮动控件,按照功能分为显示控件和操作控件。根据移动设备操作习惯,操作控件应该在屏幕下侧和左右侧,上侧主要是提示控件。操作控件组以屏幕左下侧或者右下侧为基准点,调整组内控件相对位置设计布局,提示控件组类似。屏幕坐标系的原点在屏幕中心,通过Screen.width和Screen.height获取屏幕长宽分辨率大小,屏幕左下侧位置为(-Screen.width/2,-Screen.height/2)。使用浮动控件组将类似且不常用的控件集合起来,默认状态下不显示。这样整个界面布局比较整洁,方便交互。
控件组的比例大小使用缩放因数S控制,缩放因数由两个参数S1,S2确定。分别为:
S1=当前分辨率的长度/预先设定分辨率的长度;
S2=当前分辨率的宽度/预先设定分辨率的宽度。
当实验台运行的屏幕分辨率改变时,缩放因数也会改变。避免了界面控件过大或者过小的情况。
2.4 机构组装
机构组装是用户控制虚拟实验系统中的实验构件到达指定位置,赋予其运动副,组成机构。主要包括构件的平移,旋转和运动副的添加等。平移和旋转用于调节构件的相对位置和相对姿态。运动副主要包括旋转副,移动副,滚动副等,主要应用于从动件。凸轮机构中主要包括凸轮、从动件、机架和其他构件等。
在使用过程中,用户需要调整构件姿态和移动构件。调整构件姿态通过Transform.Rotate()函数实现。移动构件通过实时监测鼠标或触点位置来改变构件位置。
凸轮一般用作主动件,做旋转运动和直线往返运动。主动件旋转使用Transform.Rotate()函数实现。在FixedUpdate()函数中使用Transform.Rotate()函数,表示在特定时间内模型旋转特定角度。通过控制每段时间内的旋转角度控制凸轮的旋转方向和旋转速度。直线往返运动使用Transform.Translate()实现,具体过程是:实时检测并记录凸轮位移值,位移大于特定值后反向运动,且凸轮位移值归零。Transform.Rotate和Transform.Translate均是通过控制构件的世界坐标值实现凸轮运动,其他力和碰撞体不会对主动件产生影响,保证主动件运动的流畅性。
Rigidbody组件和MeshCollider组件使模型拥有质量属性和碰撞属性,质量和碰撞体是构件之间发生相互作用的前提条件,具体通过运动副与其他构件发生作用。机构运动副主要包括移动副,旋转副,滚动副。移动副实现方法是设定构件的Rigidbody组件中的Constrains属性值,Constrains属性提供限定模型在特定轴向移动和旋转的功能。移动副参数包括限定轴的方向和移动副构件。旋转副实现方法是给模型添加HingeJoint组件。HingeJoint组件可以使构件绕其他构件或者场景(即机架)的特定点旋转。旋转副参数包括旋转轴位置,旋转轴方向和旋转构件。
机构组装步骤为:(1)用户添加和调整机构所需构件至特定位置,此时构件的重力不起作用。(2)为构件添加运动副并设置运动副参数,设定后开启构件重力,从动件在重力作用下与凸轮接触。(3)在已经添加的构件的基础上添加其他构件。实验系统提供基本或者常见的构件库,同样允许由用户导入自己设计或者创建的模型。用户导入的模型一般是网格模型,加入质量,碰撞体和运动副后,可以进行运动仿真。因此,虚拟实验系统不局限于预设的凸轮机构,允许用户自定义凸轮机构,有助于提高用户创新设计能力。
3 系统仿真实例
根据凸轮机构相关理论和虚拟实验系统设计,使用Unity3D工具开发凸轮机构移动虚拟实验系统。该系统能够在Android系统下运行,版本最低要求为Android4.2。凸轮机构移动虚拟实验系统包括三个模块:凸轮廓线设计模块、凸轮运动仿真模块和凸轮机构设计模块。凸轮廓线设计模块和凸轮运动仿真模块主要功能是演示凸轮机构相关理论知识,凸轮机构设计模块主要是培养用户创新设计能力。
凸轮廓线设计模块主要是根据运动要求分段设计运动曲线,然后根据运动曲线生成凸轮。运动曲线横坐标为凸轮旋转角度,与时间成比正。该模块包含功能如下:分段描述运动曲线,生成凸轮廓线及凸轮模型实体,数据读取与导出。
分段描述运动曲线包括曲线分段数目、每段曲线初始和终止点的坐标值、每段运动曲线的运动规律。分段数目通过位置点的添加和删除确定,每个位置点的坐标可以随时改变。运动规律包括系统内置运动规律和自定义运动规律。系统提供的运动规律包括均速运动、等加速度运动、简谐运动、摆线运动和修正梯形运动。凸轮模型根据运动曲线和相关凸轮基本参数生成。如图4(a)所示,此运动曲线分为4段,各段运动规律分别为等加速等减速运动、静止、匀速运动和静止,对应的凸轮在其右侧显示。用户可以观察每段运动曲线的无量纲位移曲线,无量纲速度曲线和无量纲加速度曲线。如图4(b)所示。
图4 凸轮机构仿真模块
凸轮运动仿真模块是对凸轮机构进行运动仿真,以运动曲线的形式表达从动件运动状态,识别凸轮相关基本参数。具体功能包括导入STL格式的凸轮模型,选择从动件,设置偏距,识别凸轮基圆半径,行程,最大速度,绘制从动件运动曲线。如图5所示。
凸轮机构设计模块是用户自定义凸轮机构的主动件、从动件和运动副。功能包括编辑构件,添加运动副,组装机构,观察构件运动和机构可视化框图展示。系统不仅向用户提供构件库和运动副库,而且允许用户导入外部模型以实现构件的自定义,这样既提高了机构丰富性,又有助于培养用户创新设计能力。构件库包括平面盘形凸轮,直动凸轮,圆柱凸轮,圆柱共轭凸轮等。运动副库包括移动副,转动副,平面高副和圆柱套筒副。如图6所示。
图5 凸轮机构仿真模块界面
图6 凸轮机构设计模块
4 结论
根据相关关键技术,实现了凸轮机构虚拟实验仿真系统,使用系统时,用户根据运动要求设计凸轮运动曲线,系统根据运动曲线计算得到凸轮轮廓廓线,通过凸轮廓线点构造三角网格,生成凸轮实体。完成凸轮实体后放入自定义的机构中进行运动仿真,此时可观察特定构件的运动情况。用户通过交互界面控制虚拟实验系统,实时动态地编辑凸轮机构参数,达到设计凸轮和进行运动仿真的目的。使用Unity3D开发的凸轮机构虚拟实验系统可以跨平台使用,而且可以自适应不同分辨率的屏幕。
[1]朱敏.虚拟实验与教学应用研究[D].上海:华东师范大学,2006.
[2]穆立茂,黄海英,王克印,等.直动从动件盘形凸轮轮廓线设计虚拟实验的实现[J].设计与研究,2011(4):13-16.
[3]刘善林,胡鹏浩,王会生.基于SolidWorks二次开发的凸轮廓线精确设计及运动仿真[J].机械传动,2008(5):46-49.
[4]范云霄,尤振环.基于 ADAMS的凸轮设计[J].煤矿机械,2011,32(2):35-37.
[5]陈小红.虚拟实验室的研究现状及其发展趋势[J].中国现代教育技术装备,2010(17):107-109.
[6]王荣芝,杨雪.基于Java3D的网络虚拟实验的开发[J].实验室研究与探索,2006,25(8):933-936.
[7]陈敏,伍胜男,刘晓秋.基于 X3D实现机械创新设计虚拟实验系统的构建[J].机械设计,2008,25(7):13-16.
[8]干建松.基于 Unity3d的室内漫游的关键技术研究[J].盐城工学院学报,2011,24(4):56-59.
[9]陈晓青,王少伟.基于 Unity的虚拟现实技术在教育中的应用[J].技术应用,2011,12:76-78.
[10]孙恒宇,尤超,王洋.基于 Unity3D的数字站区管理应用系统优化研究[J].技术应用,2012,20(1):103-106.
[11]张婉云,陆颖荣,梁冬青,等.图解法与解析法设计凸轮机构的精度对比[J].机械与电气,2011(10):57-58.
[12]刘昌祺,牧野洋,曹西京.凸轮机构设计[M].北京:机械工业出版社,2005.