庄严 卢阿丽 杨庆
摘 要 针对日益增长的机器人技术教学培训需求,研究并设计了一款机器人仿真实验系统。系统软件以FANUC M-iA系列工业机器人原型为依据,使用SolidWorks和3ds Max进行建模,并将模型导入Unity3D,编程实现对机器人的操控,软件效果逼真,可实时交互,为同类虚拟现实实验系统的开发设计提供了经验和参考。
【关键词】Unity3D 机器人 虚拟现实
实验是机器人技术教学中的重要环节,目前的授课,大多数是以理论讲解结合视频动画方式进行,缺少实际操作。而真实的工业机器人类型较多、价格昂贵,对实验环境要求严格,批量采购和建设存在一定的困难。随着虚拟现实(Virtual Reality,简称VR)技术的不断进步, 虚拟实验室已得到了广泛的认可和应用。其主要思路是通过VR技术,对实验设备和环境的仿真模拟,让实验者具有亲临工作现场进行实际操作的感受。
1 系统总体分析与三维建模
根据实际教学情况,虚拟实验系统的建立主要包括:实验室、机器人的仿真和示教器模拟三个部分。实验室仿真包含实验室建模和场景漫游设计;机器人仿真包含零部件的建模组合以及运动虚拟化;示教器模拟包括操作界面的制作和控制实现等。系统的开发流程分为两个阶段:建模和运动仿真。建模阶段:首先对教学单位进行调研,详细分析用户需求,收集实验室和机器人的数据和素材,然后使用建模工具进行各部件建模及场景搭建;系统仿真阶段:将制作完成的模型整体导入Unity3D开发环境,设计用户界面,编写脚本实现对机器人控制,最终进行封装并发布。
VR系统要求对实体与环境的模拟实时逼真。早期的三维模型多数是对物体形态的简化和抽象,随着建模工具的不断升级进步,用户越来越注重视觉效果,实物精度和逼真程度也成为建模工作的重要指标。本实验系统所需模型包括实验室内部实景和机器人实体,经实践和分析,选择了3ds Max和SolidWorks作为建模工具。3ds Max功能强大,控制选项丰富,但对于机械零件建模存在不足。首先,对于形状较规则的零件,绘制截面时,点的精准定位困难,过程相当繁琐;其次,不规则零件建模时,分几个部分利用不同的方法建模后再进行组合,不利于修改,并且表面圆滑处理会造成模型面数增多,文件体积增大。使用SolidWorks三维制图软件进行机械零件建模十分方便,模型尺寸都可用工具标注,在更改时只需改变尺寸,无需重建。对于标准部件,可先根据变量参数驱动三维结构直接得到模型,如需新建,只要更改变量重建即可,建模效率极高。虽然SolidWorks建模数据精度高,但对物体的表面渲染功能欠缺,逼真度不够。
基于以上原因,實验场景建模使用3ds Max完成,步骤包括:几何体建模和编辑、设置材质及灯光效果、进行场景渲染及烘焙、最后导出.fbx格式模型文件和.tga格式的贴图素材供Unity3D导入并使用。对于部件,先采用SolidWorks进行制作,模型保存为.STL格式文件然后再导入3ds Max进行渲染烘焙处理,同样得到.fbx及.tga格式文件供Unity3D处理。
2 实验环境场景设计
Unity3D是实现三维实时互动效果的综合开发软件,它支持多平台发布,效果逼真,已成为开发VR项目的主流引擎。Unity3D开发效率高,但它并非建模、渲染的专门工具,一些材质效果无法直接表现。较好的处理方式就是导入3ds Max渲染和烘培过的模型即表面素材文件,通过“贴图”方式为实体附上纹理,然后添加直射光对象呈现光照效果。本系统采用了C#语言进行脚本编写,实现各种功能。
2.1 场景漫游的实现
虚拟实验系统提供了漫游式的场景浏览界面,操作者使用鼠标控制位移和视角变化。该效果通过Unity3D引擎的内置摄像机(Camera)对象来实现。首先创建摄像机并设置其组件,然后编写脚本使其可以呈现并控制整个场景。设计中,采用了鼠标左键控制视角、滚轮控制前进后退的操控方式,关键代码如下:
//鼠标滚轮控制z轴视角前后方向的移动
if (Input.GetAxis("Mouse ScrollWheel") != 0){
Camera.main.transform.Translate (0, 0, Input.GetAxis ("Mouse ScrollWheel"));
}
// 按下鼠标左键控制视角左右方向的偏移及欧拉角度旋转偏移
if (Input.GetMouseButton (0)) {
Camera.main.transform.Rotate (-Input.GetAxis ("Mouse Y"),
Input.GetAxis ("Mouse X"), 0);
Camera.main.transform.eulerAngles = new Vector3(Camera.main.transform.eulerAngles.x,
Camera.main.transform.eulerAngles.y,0);
}
//按下鼠标中键或滚轮微调视角左右方向的偏移
if (Input.GetMouseButton (2)) {
Camera.main.transform.parent.Translate (-Input.GetAxis ("Mouse X")/50,
-Input.GetAxis ("Mouse Y")/50, 0);
}
2.2 设计物理阻挡
场景设计中,物理阻挡和碰撞的处理是不可缺少的部分。否则,在漫游操作时会穿过墙壁,物体在运动时也会穿透其它障碍物,产生场景的失真。
在Unity3D中,处理碰撞和阻挡的常用方法是为实体对象添加碰撞体(Collider)和刚体(Rigidbody)组件,然后通过编写碰撞体状态函数来体现阻挡或碰撞的效果。场景中的各种物体都可以添加不同形状的碰撞体,如:给桌子添加盒型碰撞体(Box Collider)、为地面添加地形碰撞体(Terrain Collider)等。
3 机器人及示教器仿真
实验系统以FANUC M-iA 系列机器人为参照依据。该系列机器人具有6 自由度关节动作, 每个关节都由一个电机驱动控制。机器人可以根据末端装置的不同, 从事喷涂、搬运或弧焊等不同工作。该系列机器人的外型结构基本一样,差别在于不同型号机器人关节转角范围、最大转速以及末端载重参数不同。因此,在进行运动仿真设计时,要结合不同型号的性能进行模拟。
3.1 机器人运动仿真
Unity3D 可将多个模型组合到一个预制体(Prefabs)中,组合后的预制体即为一个整体。逻辑上可以把预制体当作一个父对象来处理,当父对象运动时,它包含的每个子对象都会做同样的运动,虚拟机器人的运动正是通过这样的方式来实现的。机器人的手臂及手腕的运动取决于6个关节的旋转,一方面需将部件合理地组合成预制体,并确定它们相互间的层级关系;另一方面正确设置各预制体的旋转轴,编写脚本使其以及以指定的方向和速度旋转。即操作指令发出后,联动的预设体及其子部件一起沿指定中心轴旋转,从而呈现机器人的各种动作。
实际机器人具有6个旋转关节。在创建预制体时,关节J1~J6分别对应预制体j1~j2。 J1的旋转轴为Y 轴,J2、J3、J5 的旋转轴皆为 Z轴,J4、J6的旋转轴为X 轴。机器人外形、关节旋转方向、各预制体及部件的层级关系如图1所示。
机器人手臂运动的J2关节部分脚本代码如下(其它关节运动的处理方式相同):
switch (button_name) {
case"j2_0"://鼠标点击了示教器“+Y”按钮,J2手臂抬起
static_go.j_2.Rotate (0, 0, -rotate_speed(2));
break; //鼠标点击了示教器“-Y”按钮,J2手臂抬起
case"j2_1"://鼠标点击了 按钮
static_go.j_2.Rotate (0, 0,rotate_speed(2));
break;
}
3.2 示教器模擬
示教器是应用软件与机器人之间的接口装置,通过电缆与控制柜连接,可以直接手动控制机器人的运动,也可以通过创建程序并测试校正的方式对机器人示教,以完成姿态确认和特定的作业任务。本实验系统使用UGUI图形用户界面方法,参照 FANUC示教器的控制面板,模拟了虚拟机器人的操作界面,主要实现步骤如下:
(1)创建Canvas(画布)对象,并在右下角嵌入示教器键盘图像资源;
(2)在画布左下角添加图像(Image)对象,并为图像对象添加6组文本(Text)及输入栏(Input Field)子对象用于接收数据,分别用于控制相对应关节的旋转速度。
(3)编写脚本通过在文本输入栏接收转速数据,将输入的字符转换成数值传递给运动控制函数,从而调节6个关节旋转速度,部分关键代码如下:
float rotate_speed(int i){
try{ return float.Parse(static_go.cav.GetChild(1).GetChild(0).GetChild(i).GetComponent
}catch{
return 1.0f/5;
}
}
完成后的交互界面效果如图2所示。
4 结束语
虚拟实验室具有广阔的应用前景,本文设计的实验系统,效果清晰逼真,操作简单,
最后以Web Player形式发布,支持基于Web页面的远程访问,满足了不同条件的学习需求,在工业机器人教学及培训方面具有一定的实用价值和拓展空间,同时也为类似产品的开发提供了参考依据。
参考文献
[1]李仕强,王水平,李翔.基于Web的虚拟实验互动教学平台研究与设计[J].实验技术与管理,2012,29(11):90-93.
[2]周素萍,黄昆,张小瑞,杨松.虚拟仿真平台下弹跳机器人模型的设计和实现[J].测控技术,2014,33(10):126-128.
[3]刘宇轩.基于Unity3D的工业机器人虚拟操作系统的研究与实现[J].计算机与数字工程,2017,45(08):1615-1619.
[4] 刘谋玉,汪地,姜海龙.基于Unity3D 的机器人仿真和遥操作系统研究[J].工业控制计算机,2016,29(09):97-99.
[5]潘俊浩,卓勇,侯亮,卜祥建.一种基于Unity3d的工业机器人示教系统设计方法[J].组合机床与自动化加工技术,2017(07):110-115.
作者简介
庄严(1969-),男,江苏省南京市人。硕士学位。讲师。主要研究方向为图形图像处理,虚拟仿真技术。
作者单位
南京工程学院计算机工程学院 江苏省南京市 211167