基于IdeaVR工业机器人分拣系统的虚拟仿真系统开发*
2021-04-15崔泽强俞泽育
崔泽强 , 任 明 , 俞泽育 , 荣 盼
(温州大学机电工程学院,浙江 温州 325035)
工业机器人分拣系统结构复杂、操作困难、内部结构难以展示,且费用较高,使得学生在学习过程中只能借助想象,教学效果不佳。IdeaVR以其较好的沉浸性和交互性,构建了一个基于现实工业机器人分拣系统的虚拟分拣系统[1-4],可以让学生在学习过程中进行动手操作、观察机器人内部结构,借助于IdeaVR建立三维虚拟仿真平台,学生能更好理解工业机器人分拣系统,使得教学更加顺利。
1 建立虚拟工业机器人分拣系统平台
在建立虚拟工业机器人分拣系统平台前,首先需要了解自动化生产所需要的生产设备,学习各设备的使用方法以及其原理,然后需要实地测量各设备的数据参数,了解各零件的运动方式,并在SolidWorks软件中进行实体建模与装配,装配完成后导入3D Max中改变格式,改变格式后将其导入到IdeaVR中进行调整位置、添加光源、模型贴图、场景渲染、添加物理效果等优化设计,若优化设计出现问题,则重新进行三维实体建模。基于IdeaVR工业机器人分拣系统的虚拟仿真平台开发过程如图1所示。
1.1 建立虚拟工业机器人模型
建立虚拟工业机器人分拣系统平台包括建立虚拟场景和建立虚拟机器人两部分。由于在IdeaVR引擎中构建复杂的几何体相对困难,不利于工业机器人虚拟体的构建,因此采用SolidWorks软件进行工业机器人的构建设计。SolidWorks软件能够方便设计具有复杂功能的物体图形,利用该软件设计工业机器人的虚拟构建,建模结束后,将模型导入到3D Max中转换格式。建立的工业机器人分拣系统虚拟场景如图2所示。
图1 基于IdeaVR工业机器人分拣系统的虚拟仿真平台开发过程
图2 虚拟场景
1.2 进行优化设计
导入到IdeaVR的模型以及虚拟场景会与实际场景存在一定的差距,可以进行调整位置、添加光源、模型贴图、场景渲染、添加物理效果等操作,让虚拟现实场景可以真实还原现实场景。在虚拟现实内容的制作中,模型的材质贴图直接决定了最终整个项目的画面呈现效果。受美术资源制作难度限制,有些模型无法达到所需要精度,这就意味着需要通过合理处理材质贴图来进行弥补,从而达到令人满意的视觉渲染效果。
场景渲染设计对虚拟仿真系统的整体沉浸性、真实性非常重要。在渲染过程中,如果渲染的程度过小,虚拟环境的真实性将会降低,给操作者造成较差的虚拟仿真体验。但如果渲染的程度过大,会造成虚拟引擎的负担过重,从而影响虚拟仿真系统的整体的流畅度。基于场景渲染的理论,针对工业机器人虚拟仿真教学系统,考虑到其实际应用环境,使得设计的系统能够更好地进行教学推广。因此,选择使用IdeaVR引擎中自带的着色器处理工业机器人的表面材质,将机器人表面的光滑度调节到适当的数值。本虚拟仿真系统场景的灯光使用上,采用了引擎中自带的点光源与平行光源相结合的方式。通过这种处理方式,可以通过简化虚拟场景中物体的具体细节来减少复性,进而减轻虚拟场景的运行负担,同时整体虚拟场景的视觉效果不受到较大的影响,从而使得虚拟场景运行更加流畅。
在 IdeaVR 创世中,加入了物理引擎应用系统,赋予虚拟场景中的物体物理属性,可以让场景中的物体符合现实世界中的物理定律。提供物理系统中的刚体和布料的模拟,通过赋予场景中物体刚体及柔性体属性,使得虚拟场景更加真实和生动。
2 编程控制
2.1 登录界面代码编写
导入IVREngine类:import IVREngine
通过这个类调用项目运行路径、引擎运行时的屏幕尺寸等参数。例如通过IVREngine.getWidth()可以获取屏幕宽度。
定义登录类Login:class Login
定义初始化函数Start()每次类加载时会自动调用这个函数,用于获取引擎信息、生成UI控制界面:def Start(self):
通过函数获取需要渲染的屏幕大小:self.width =IVREngine.getWidth()
self.height = IVREngine.getHeight()
得到项目根目录路径:self.fileDir = IVREngine.getProjectPath()
获取全局GUI,用其调用各种控件:self.gui =IVREngine.engineGui()
设置登录界面背景图片:
self.backGround = IVREngine.WidgetSprite(self.gui)
self.backGround.setWidth(self.width)
self.backGround.setHeight(self.height)
self.backGround.setTexture( self.fileDir + ‘/python/Login/backGround.jpg‘)
self.backGround.setColor(IVREngine.vec4(1,1,1,1))
同样的,可以通过函数生成用户名栏、密码栏、登录按钮等UI界面。
结束后通过OnDestroy函数进行资源释放:
def OnDestroy(self):
if self.backGround != None:
del self.backGround
if self.layout != None:
del self.layout
2.2 机器人运动学解算
在编程控制前,首先需要实现机器人运动学方程的构建,本次仿真系统设计使用ABB机器人是:IRB 1410型机器人。其主要参数如3图所示。
图3 IRB 1410型机器主要参数图
据此建立DH参数表:
通过代码建立每一个轴的齐次矩阵A1~A6,并对它们进行相乘运算获得最终的运动学方程,这里以A1矩阵为例:
通过一个统一的函数生成所有的UI按钮,每个按钮通过传入不同的参数,来改变按钮的形状与功能,每个按钮都会传入对应的控制函数名,并生成相应的实例对象,当按键按下时就会调用对应的控制函数。Button.setCallback()函数用于在鼠标按下时调用:IVREngine.createWidgetCallback(cmd)函数,这个函数将调用对应的command方法以控制ABB机器人的运动:
设置机器人的控制函数,可以通过UI控制机器人的运动。一共有6个控制函数,通过t键可以切换控制模式,在每次调用控制函数时都会更新UI界面当中的运动学参数。
3 结论
本项目通过IdeaVR将工业机器人分拣系统与虚拟现实技术结合,提供了一种全新的教学方式,使得学生在学习过程中更容易了解工业机器人分拣系统的内部结构及其运行方式,增加了学习的趣味性、直观性。并且使每个同学都有充裕时间进行操作,有效解决了教学过程中资源不足的问题。