基于Unity3D的激光熔覆虚拟试验平台开发
2022-04-28周金宇任维彬徐先宜
张 文,周金宇,任维彬,徐先宜
(1.江苏理工学院机械工程学院,江苏 常州 213001;2.金陵科技学院机电工程学院,江苏 南京 211169;3.机械科学研究总院江苏分院有限公司,江苏 常州 213001)
1 前言
激光熔覆是激光再制造的重要形式之一,作为先进的表面工程工艺和增材制造手段,成为了我国工业4.0发展的重点目标和内容。尤其是2017年2月以来,国家教育部积极推进新工科建设,先后发布了《关于开展新工科研究与实践的通知》、《关于推进新工科研究与实践项目的通知》等文件[1],其中都将激光增材制造技术作为新工科教育发展和研究的重点内容。但由于激光熔覆试验开展准备周期长、设备运行费用高、工艺开展过程要求较高、具有现场教学安全隐患等缺点,因此在试验广泛性开展和学生教学实践的个性化指导方面还需亟待提升。
基于三维计算机图形技术、云计算、人机交互以及数据库等技术的不断成熟,虚拟现实技术不断发展,其良好的交互性、浸入性以及智能化等特征优势愈加彰显[2]。尤其是该技术与教育教学试验的有机融合,极大程度地解决了试验危险性、时间地域限制性以及研究过程反复性等关键性的教育教学试验开展难题,对于提升教学资源有效利用率、教学服务对象广泛性、教学质量具有较大裨益
因此,本系统选取虚拟现实开发引擎Unity3D建立以激光熔覆工艺为支撑的网络化虚拟试验平台,该虚拟试验平台通过多款软件共同开发,有效地弥补了我国高校激光熔覆试验课程体系的不足。学生通过自行下载客户端操作虚拟试验平台不仅可以看到逼真形象的激光熔覆实验室现场和设备,还能在虚拟环境下完成沉浸式激光熔覆工艺操作体验。
2 系统设计
2.1 系统开发流程
利用Unity3D等软件开发激光熔覆虚拟试验平台的过程,实质上也就是开发虚拟现实内容的过程[3]。通过对激光熔覆实验室实景拍摄及网上信息采集,利用SolidWorks软件建立激光熔覆设备三维模型,其中重点建立KUKA(KR60HA)机器人以及激光熔覆头三维模型,然后将三维模型导入至3dsMax软件中,修剪多余贴图及调整各旋转轴轴心位置,导出为FBX 文件。在Unity3D中使用C#脚本编程完成激光熔覆仿真控制,采用NGUI制作系统界面完成人机交互功能。通过与Photon Server 服务器、MYSQL 数据库协同工作,实现系统多人协作以及试验评价反馈等功能。开发具体流程图,如图1所示。
图1 虚拟试验平台开发流程Fig.1 Development Process of Virtual Trial Platform
2.2 系统功能
激光熔覆虚拟试验平台其功能结构,如图2所示。大致分为试验场景漫游、试验参数制定、试验过程动态模拟、试验评价反馈四大模块,学生和老师分别使用指定账号登录系统。在场景漫游模块中,学生通过第一人称角色控制器浏览整个虚拟实验室,加强对激光熔覆实验室的认知。在试验参数制定模块,学生通过试验对象选择、工艺参数选择(主要为激光功率、送粉速度、扫描速度)、熔覆头运动路径选择制定熔覆计划。在试验过程模拟模块,根据之前学生自主选择的参数计划进行相应模拟,直观展现激光熔覆的全过程。而在试验评价模块,则是首先通过与服务器、数据库连接记录学生操作训练信息[4],根据制定的评价标准针对学生在虚拟试验环节出现的错误进行相应点评及纠正。
图2 虚拟试验平台功能框架Fig.2 Functional Framework of Virtual Test Platform
3 实现过程
3.1 三维建模及优化处理
由于Unity3D 自身无法建立复杂模型,因此本系统采用SolidWorks作为建模工具[5],本激光熔覆虚拟试验的主要控制模型为KUKA(KR60HA)转动机器人及激光熔覆头,在SolidWorks中建立的机器人及熔覆头三维模型,如图3所示。
在模型建立完成后,由于SolidWorks 不支持FBX 格式模型导出,先将三维模型导出为STL零件格式文件,通过3dsMax自带的合并导入的方式,依次将机器人各零部件模型导入至3dsMax中[6],同时用3dsMax 对模型各关节零部件旋转轴的位置和角度进行调整来匹配机器人运动功能需求。通过合并导入后机器人在3dsMax的效果图,如图3(c)所示。在3dsMax调整各关节旋转轴位置与角度后进行面数优化,减少模型占用的系统内存。修改完成后,将模型导出为FBX格式文件,拖拽至Unity3D中呈现效果,如图3(d)所示。
图3 机器人及熔覆头模型优化导入Fig.3 Introduction of Robot and Cladding Head Model Optimization
3.2 软件界面和场景设计
3.2.1 资源导入和场景搭建
模型在3dsMax 中导出为FBX 格式文件后可直接将文件拖拽至Unity3D 的Assets 工程文件下,Unity3D 将自动读取模型[7]。同时,为了方便管理及后续故障排查,在Assets下创建文件夹将所有工程素材、代码程序、场景动画分门别类存储起来。
在完成资源导入后,通过File→NewScene 创建新场景[8],将Assets 中Unity3D 读取的模型文件直接拖拽至Scene 窗口下,通过界面左侧Hierarchy 面板可查看管理已添加至场景中的模型,整个工程Asset文件下素材导入分类,如图4 所示。
图4 Project下模型及相关素材导入Fig.4 Model and Relevant Material Import Under Project
3.2.2 人机交互界面设计
一套完整的虚拟试验平台的开发不仅仅只满足于系统的功能设计,还需要设计一套与之相应的人机交互界面来匹配[9]。本系统采用NGUI插件进行界面设计,NGUI组件包含Canvs、Even‐System、Text、Image、Button、Panal等多种元素[10],根据上述确定的系统总体功能,本试验平台主要设计的UI界面,如图5所示。
图5 虚拟平台主要场景界面Fig.5 Main Scene Interface of Virtual Platform
在利用NGUI设计完成UI框架后,其中交互动作的实现主要是通过C#程序脚本编程实现并通过与MYSQL 数据库、Photon Server服务器对接完成信息存储功能。在注册界面通过Dictionary字典函数的遍历存储用户名及密码信息,通过Nhibernate传递给数据库。而在登入界面则又通过if函数判定输入用户名及密码是否符合数据库存储信息。在四个场景分别搭建完成后通过Button按钮及在按钮中添加Scene Manager函数实现场景跳转功能。
3.3 第一人称视角漫游
为了增强使用者的体验感,虚拟试验系统采用第一人称视角在整个场景中进行漫游。
通过Assets→import package→characters 导入人物包,将人物包中perfabs文件下第一个预设体“FPS Controller”拖拽至场景中,设置相应属性,添加胶囊碰撞器,为模拟人的视线高度,调整预制体高度距离地面1.6m左右,导入后第一人称角色控制器显示,如图6所示。其第一人称角色控制器为一个透明的胶囊体。通过编写C#脚本可以对实验室内设备采用鼠标进行操作,通过鼠标右键进行第一人称的转向,利用键盘上的按键进行前后左右的移动,从而达到在虚拟实验室中进行正常第一人称操作的真实感。
图6 第一人称角色控制器在系统中使用Fig.6 The First−Person Role Controller Used in the System
3.4 机器人熔覆路径选取
导入至Unity3D中的机器人模型实际是由基座、腰部、大臂、小臂、手腕等多关节组成的多零件模型,其本身各关节不具备层级关系,即在大臂旋转时,小臂、手腕等子关节不能跟随运动,当需要控制机器人运动时,往往会出现关节散架等情况。因此为实现机器人上关节转动带动下关节转动的效果,本虚拟试验平台采用构建父子关系[11]的方式来实现。在Hierarchy面板下创建六个空物体,通过C#脚本编程,将各关节放置在空物体下作为子物体,相关代码如下:
void SetPSRelationship()
{RobotArray[].transform.parent=jointArray[].transform;
jointArray[].transform.parent=jointArray[].transform;
…
}
每个空物体控制自己子关节的转动,同时每个空物体又是上关节的子物体,其子关节转动都是相对于其父物体坐标系的。机器人各关节在Unity3D 中Hierarchy 面板下构成的层级关系,如图7所示。
图7 在Unity3D中机械臂各关节父子关系Fig.7 Parent−Child Relationship of Each Joint of the Robotic Arm in Unity3D
在构成父子关系后由于激光熔覆过程机械臂由示教控制,所谓示教控制就是在使用机器人完成制定运动任务前,先教机器人如何运动,将机器人的位置、速度等信息记录下来。首先添加C#脚本,利用transform.localPosition、transform.localEulerAngles函数获取熔覆头末端位置坐标及旋转角度,进行熔覆起始点及终点定位。当确定熔覆路径起点及终点后,通过Unity3D的Mecanim系统根据之前试验参数选择模块选择的扫描速度、机器臂移动路径等调用对应动画进行熔覆路径模拟,分别为两点定位、直线运动和曲线运动显示图,如图8所示。
图8 熔覆头运动路径模拟Fig.8 Motion Path Simulation of Cladding Head
3.5 辅助功能设计
根据试验参数制定模块选择的工艺参数的不同,激光熔覆试验过程模拟的显示效果也应有相应的变化。在虚拟系统中体现激光功率及送粉速度两者选择不同最明显的特征就是熔覆过程中激光束的粗细及熔覆过程中试件表面火花飞溅的效果。本平台利用Unity3D 中的粒子系统(Particle System)和Line Renderer特效模块分别实现了激光熔覆过程中的火花飞溅效果和激光束模拟效果[12]。伴随激光功率和送粉速度逐渐增大,激光束及火花飞溅模拟效果,如图9所示。在Particle System 组件中设置粒子的大小、单位时间发射的数量、发射速度以及消失时间等参数,在Renderer模块下添加火花贴图实现火花飞溅效果,并将Hierarchy面板中的Particle System放入激光熔覆头模型文件夹下作为子物体,当机器人及熔覆头移动时即可模拟出相应的火花效果。激光束则由Line Renderer特效组件完成,在Hierarchy面板下新建一个空物体,给这个空物体添加Line Renderer 组件。具体操作如下:Component→Effects→Line Renderer。通过给材质球赋予激光束贴图模拟激光束效果。在Inspector面板下调整Start Width、End Width、Start Color、End Color等参数并如Particle System一样列为熔覆头模型文件的子物体。
图9 激光及火花溅射效果图Fig.9 Effect of Laser and Spark Sputtering
4 信息采集与通信
4.1 试验评价标准建立
在试验评价模块,系统需根据操作者选取的试验对象、试验工艺参数、熔覆路径以及在熔覆模拟阶段对熔覆速度等调节进行相应评分。为了评分的科学性、严谨性,制定合理的试验评价标准显得尤为重要。本平台目前以三种试样(钢板、轧辊、叶片)为试验对象,其具体工艺参数,如表1所示。一色标注为最优参数。在登入界面获取用户名及密码后,具体代码如下:
表1 实验工艺参数选择表Tab.1 Selection Table of Experimental Process Parameters
loginRequest.Username=usernameIF.text;
loginRequest.Password=passwordIF.text;
进入每一名学生数据库中,通过Dictionary
public UIPopupList TuchenList;
……
public GameObject tishi;
public void onsss()
{
string smsd_value=smsdLabel.value;
string jggl_value=jgglLabel.value;
string sfsd_value=sfsdLabel.value;
m_Score=GameObject.Find("Text").GetComponent
if(int.Parse(smsd_value)>800 || int.Parse(smsd_value) <600)
{
x−=20;
}
if(int.Parse(jggl_value)>12||int.Parse(jggl_value)<8)
{
x −=20;
}
i(ffloat.Parse(sfsd_value)>1.2||float.Parse(sfsd_value)<0.8)
{
x −=20;
}
tishi.SetActive(true);
m_Score.text=x.ToString();
}
4.2 Photon Server服务器与客户端通信过程
本试验平台选用Photon Server服务器,该服务器开发语言为C#语言,因此非常适应Unity3D中的编程。同时该服务器采用负载均衡的解决方案,能够自动处理通信过程中的异常[14],减轻了虚拟平台的开发难度。Photon Server 服务器、Unity3D 客户端和MYSQL数据库三者的交互模型,如图10所示。
图10 Photon Server服务器、MYSQL数据库和客户端交互模型Fig.10 Photon Server,MYSQL Database and Client Interaction Model
通过在Unity3D 创建空物体(PhotonEngine),调用Awake 方法,将其设置为单例模式,管理所有与服务器、数据库的交互。具体代码如下:
public static PhotonEngine Instance;
void Awake()
{
if(Instance==null)
{
Instance=this;
DontDestroyOnLoad(this.gameObject);
}
else i(fInstance!=this)
{
Destroy(this.gameObject);return;
}
}
客户端通过peer.Connec(t“127.0.0.1:UDP端口号”,“服务器项目号”)连接服务器端,利用Peer.OpCustom方法向服务器端发起请求,服务器端通过OnOperationRequest方法处理客户端的请求,并利用SendOperationResponse 方法响应客户端请求。通过Nhibernate工具映射MYSQL数据库,将Nhibernate连接数据库功能集成至服务器端。最后为保证peer一直在处理与服务器的连接,在update 中添加peer.Service()方法,通过该方法,peer持续将队列中的请求数据序列化发送给服务器。
5 系统运行及发布
在Photon Server安装目录下的deploy文件夹下找到Photon‐Server.config配置文件,创建服务器新项目,修改UDP协议,定义服务器名字、地址和端口号。修改完成后运行PhotonControl.exe的文件,然后在电脑右下角小菜单,选择MyGame项目,选择Start As application,完成服务器的启动。具体操作A,如图11、图12所示。
图11 修改UDP协议Fig.11 Modify UDP Protocol
图12 启动Photon Server服务器Fig.12 Start the Photon Server Server
在开启服务器后,运行虚拟系统,在测试虚拟试验平台能够满足与服务器、数据库对接后,通过Unity3D 中file→build&Run保存并发布为一个exe格式运行程序和一个配置文件夹[15]。用户只需下载这两个文件,打开运行程序即可启动虚拟试验平台。
6 结语
通过将虚拟现实技术与激光熔覆工艺相融合,基于虚拟现实引擎Unity3D 开发了一款激光熔覆虚拟试验平台。利用该平台学生可以独立完成激光熔覆试验的预习准备工作,初步掌握激光熔覆试验操作的流程。
在这种沉浸性强的虚拟试验中,学生将更加主动学习激光熔覆实验课程知识。同时在该平台的帮助下,教师也可以更加轻松地完成试验教学内容。实践表明,该试验平台在教学过程中尤其是模拟教学起到了较好的作用,可以满足激光熔覆试验课程的教学要求。