基于Unity3D的搬运机械手仿真
2014-09-14罗捷
罗 捷
(广西机电工业学校,广西 南宁 530023)
1 概述
机械手在工业生产中的应用日益广泛,在机械手的研发、应用和相关课程教学中往往希望能够通过机械仿真技术帮助验证、调试和展示机械手。进行机械仿真,通常有三种方法:
第一:使用机械仿真软件,如:ADAMS、Solidworks、Pro/E等。这些软件的的优点是精度高,能真实的反映机械的受力、运动情况,缺点是开发难度较大,交互性有限,难以通过网络、跨平台应用,不利于教学应用[1]。
第二:使用虚拟现实建模语言VRML。文献[2][3]提供了使用VRML仿真机械手的方法。使用此方法虽然可以在网络上发布,且交互性较强,但VRML本身不具备机械动力的分析能力,也无物理引擎,要进行机械仿真需要编写大量代码。
第三:使用虚拟现实引擎或游戏引擎,如:Virtools、Unity3D等。使用虚拟现实引擎进行机械仿真,可以方便的发布在网络上,有很强的交互性,且虚拟现实引擎自带物理引擎,可以很好的仿真各种机械、物理现象,其精度可以满足大多数情况的要求。Unity3D是一个可以让开发者轻松创建诸如三维游戏、建筑可视化、实时三维动画等类型互动内容的跨平台的专业虚拟现实引擎。文献[1]使用Unity3D对齿轮等简单机械进行了仿真尝试。
机械手是可以在自动生产线上搬运物料的一种典型自动化设备。研究使用Unity3D仿真机械手这一新的机器人仿真实现手段,对机械人的开发、应用以及相关课程的教学有十分重要的现实意义。
2 搬运机械手仿真原型
本平台仿真的搬运机械手结构如图 1所示。其主要部件包括:机架、底座、物料槽、机械手臂、气缸、电机、接线端口盒等组成。此机械手为气压式三自由度机械手。
该搬运机械手臂可由电机驱动进行水平移动,机械手臂和手爪可由气缸驱动完成手臂上升、下降,手爪张、合的运动,从而对物料槽中的物料(小球)实施搬运。机械手臂水平运动范围受左右两个限位开关限制,依靠三个行程开关进行定位,自右向左分别对应工位 1、2、3三个位置。机械手到达对应工位时,对应行程开关的接线端输出低电平。手臂上升、下降到位和手爪夹紧都会触发对应的光电传感器,使得对应接线端输出低电平。工位1、2底部的灵敏度可调红外光电传感器,用检测物料的反射光强。当反射光超过阀值时,输出低电平。手爪处的光纤传感器用于检测手爪处物料的反射光强,光强超过阀值时同样输出电平。
图1 搬运机械手结构
3 搬运机械手仿真的实现
要呈现真实的搬运机械手,几何和物理模型都要尽可能贴近实物,并辅以模型材质、场景光照、声音效果以及场景的配合,才能让使用者能够产生更强临场感。然而,由于现有设备的运算、显示能力的限制,这种想法不可能完全实现,必须在质量和效率之间进行权衡。
3.1 三维模型的建立
创建可由 Unity3D使用的搬运机械手的三维模型,需要经过以下三个步骤:
步骤一:零件模型的创建和装配。
由于 Unity3D本身建模功能较弱,使用其他工具创建三维模型会更为方便。本例中选用了Solidworks作为建模工具。根据搬运机械手的结构,将搬运机械手划分为底座(包括斜槽)、支架、电机架、机械臂支架、机械臂和手爪6个零件。通过对实物的外形尺寸测量,按照实物尺寸对各个部件分别建模,最终在Solidworks中将各个零件装配为完整的搬运机械手模型。
步骤二:模型调整和美化。
三维机械手模型在创建时产生了许多不必要的面,需将装配好的机械手模型导入 3ds Max中,对模型各部分进行塌陷处理,以减少不必要的面,提高显示效率。为模型添加材质、贴图增加显示的真实感。同时对各个部件的原点、坐标轴进行调整,以方便在Unity3D中对部件运动的控制。
步骤三:导入。
在3Ds MAX中将模型导出为Unity3D官方推荐的FBX格式,导入到 Unity3D场景中。为了在保持模型的尺寸,在导入后应将模型尺寸按比例放大100倍。
3.2 机械动力仿真的实现
Unity3D内置NVIDIA PhysX物理引擎,不同于在VRML环境中依靠纯代码实现虚拟机械动力效果的方法,在 Unity中可以不用或只需少量代码即可实现机械动力仿真效果。
3.2.1 零件连接方式的配置
在 Unity3D中提供了“关节”用于仿真零件间的连接方式。Unity3D中的关节分固定关节(FixedJoint)、铰链(Hinge Joint)、角色关节(Character Joint)和可配置关节(Configurable Joint)三种。由于以可配置关节的各项参数可以由开发者自行配置,因此用途最为广泛。
由前文可知,该机械手可以完成手臂平移、手臂升降、手爪张合三个动作。这三个动作分别涉及到手臂支架和电机架的连接、手臂支架和手臂的连接、手臂和手爪的连接。在本例中这三个连接均使用可配置关节实现。现以搬运机械手的手爪为例,说明Unity中活动关节的配置方法。
手爪与机械手臂连接处为铰链结构,在气缸驱动下,围绕转轴旋转,最大张开角度为30°。手爪可以将物料槽中的小球夹起、搬运。为了让手爪与机械臂连接,需将手爪和机械手臂设为刚体(Rigidbody),使用可配置关节连接。因为手爪相对手臂不需要进行平移,而只需要绕铰链轴旋转,所以需锁定三轴平移,锁定y轴和z轴旋转。同时,两爪分别限制绕x轴旋转角度为0°~30°和-30°~0°。由于此铰链结构弹性极小,因此将Projection Mode设为Position and Rotation,且弹性距离和角度均为0。配置完成后手爪则会受到关节的限制,与手臂连接,只能在限制的范围内运动。
对于固定于底座上的零件:底座、支架、电机架都以固定关节连接。
3.2.2 碰撞和摩擦的实现
为了能够实现碰撞和摩擦带来的物理效果,Unity3D在其物理组建中提供了多种碰撞器组件:盒碰撞器、胶囊碰撞器、球碰撞器、车轮碰撞器、网格碰撞器。前三种碰撞器分别可模拟立方体、胶囊体、球体形状物体的碰撞与摩擦作用。车轮碰撞器则用于模拟车轮的碰撞与摩擦。网格碰撞器则根据三维模型的网格外形模拟碰撞与摩擦效果。网格碰撞器是最为复杂的碰撞器,其碰撞运算复杂,因此 Unity3D中不检测两个网格碰撞器之间的碰撞。
在该搬运机械手运行中存在多个刚体间的碰撞与摩擦,现以小球与手爪间、小球与轨道间和手爪与轨道间的碰撞与摩擦为例,说明其配置方法。
小球外形是标准的球体,应添加与其几何外形相同的球碰撞器组件。由于小球是塑料球,因此设置其物质材质为塑料,质量为实测的 0.46kg。轨道外形复杂,应选用网格碰撞器,其物质材质为金属。手爪外形也较为复杂,本应选择网格碰撞器,但由于网格碰撞器间无法实现碰撞,且本例中需要模拟机械手臂在误操作时与导轨的碰撞,因而手爪不可选用网格碰撞器,而是使用了盒碰撞器进行近似模拟。手爪物质材质设置为金属。
3.2.3 驱动的实现
经过关节和碰撞器的设置,三维搬运机械手模型已经具备了仿真所需的物理参数,但没有电机和气泵的驱动力,还不能完整的仿真机械手。
在机械手实物上,机械手臂的平移是由电动机通过蜗杆驱动的,可近似看做匀速运动。因此,手臂的平移运动可由添加到手臂支架的脚本中的移位方法GameObject.transform.Translate()实现。
在机械手实物上,机械手臂的升降以及手爪的张合则是气动,可近似看做恒力驱动和恒力矩驱动。因此,机械手臂的升降由添加到手臂脚本中的施加恒力方法GameObject.rigidbody.AddForce()实现,手爪的张合运动由添加到手臂中脚本中的施加恒力矩方法GameObject.rigidbody.AddRelativeTorque()实现。
4 GUI界面
为了在仿真时与使用者交互,让使用者操作三维仿真机械手完成各项功能,GUI界面上设置了可操作机械手臂左右平移、升降和手爪张合的按钮。使用者可以通过这些按钮操作机械手臂完成各种动作,如搬运小球。同时,为了让使用者能够了解机械手上各种传感器的输出,GUI界面上以颜色和文字标注了各个端口输出的电平。创建好的虚拟机械手模型场景及GUI界面如图2所示。
图2 虚拟机械手模型场景及GUI界面
5 小结
本文则以某型搬运机械手为仿真原型,通过分析其机械结构,创建其三维零件模型,解决Unity3D组装零件模型为完整机械的连接问题,利用物理引擎实现碰撞与摩擦的仿真,通过编写脚本仿真了电动机驱动和气动的驱动方式,最终使用Unity3D仿真了搬运机械手这一较复杂机械。其仿真效果与实际设备有着较高的一致性,且使用者可在仿真时操作三维模型,有着良好的交互性。本搬运机械手的仿真方法在已有解决方案的基础上在实现的方便性,仿真的交互性方面有了不同程度的改进与提高。
[1]张帆.基于游戏引擎的机械动力仿真技术的研究与实现[J].软件导刊,2011(2):83-86.
[2]王余还.基于Java3D和VRML的空间机械手运动仿真[J].科技信息,2008(12):355-358.
[3]邱瑛,李为民.基于VRML的机械手仿真及其技术[J].机械设计,26(3):37-39.
[4]倪乐波,威鹏.Unity3d产品虚拟展示技术的研究与应用[J].数字技术与应用,2010(9):54-55.
[5]朱柱.基于 Unity3D的虚拟实验系统设计与应用研究[D].武汉:华中师范大学,2012.