丁毓峰, 徐 鑫, 闵新普, 宋春生
(武汉理工大学机电工程学院,武汉430070)
机械设计和机械原理等课程是机械工程、汽车工程相关专业的专业基础课,在这些课程中,学生应该在前期工程图学的基础上,熟悉机电产品的工作原理,典型机构的设计流程。鉴于此,很多高校的机械设计和机械原理课程都会开设减速器等产品的拆装实验课。传统的教学方式受限于空间、时间以及实验仪器设备数量等因素[1,2],学生往往在较短的时间内匆忙做完物理拆装实验,对典型直齿轮传动机构的原理有了初步认识,对众多行星轮减速器、手动变速箱等复杂产品的工作原理较少涉及,这在一定程度上影响了实验效果,不利于学生实践能力的培养。随着信息技术的发展,虚拟现实技术被越来越多地应用到了教学中[3,4],国内许多高等院校都积极开展采用虚拟现实、虚拟仿真等技术帮助开发各种类型的实验室。冯桂珍等[5]在研究了Unity3D 构建三维交互式虚拟场景的方法和关键技术的基础上,以典型的减速器为例,构建了减速器虚拟拆装实验,开发了基于移动平台独立运行的APP,在结构认知、产品拆装、课程设计等教学和实践环节中取得了良好的效果。丁雨等[6]通过分析减速器的机械结构和运动模型,在Unity3D 中完成了减速器模型的拆装,实现了减速器的碰撞与摩擦,并完成了减速器驱动方式的脚本仿真。
张厚升等[7]通过Simulink 建立了双闭环控制的绕线式异步电机串级调速系统仿真模型,并将其引入课堂。袁容等[8]使用Unity3D与HTC VIVE 虚拟现实开发工具,开发了虚拟场景下的减速器拆装实验教学平台,有效解决了实验课程对场地、器材、教师等教学资源的过度依赖。Ouyang 等[9]在Unity3D 上搭建了交互式化工三维虚拟实习平台,在虚拟环境中重新创建真实的化工厂部分,演示了主要设备的结构和工作原理,培养学生的操作能力,平台对突发事件的虚拟处理有助于提高学生的生产安全意识。Woodfield 等[10]将虚拟仿真实验与化学实验相结合,将复杂的化学实验通过虚拟现实系统引入课堂,并对学生的感受进行了评估,课程效果显著。朱安庆等[11]在Unity3D 中开发船舶制造虚拟仿真教学系统,将虚拟现实技术应用到船舶制造工程技术类课程教学中,提高了教学效率,增加了学生对相关知识的认知程度。Lu 等[12]基于Web开发了虚拟EPMA 实验室,包含了交互式模块,用于实验装置和仪器的虚拟操作实践,使得学生通过预习,在实验室可以直接进行实验。王建华等[13]将Unity3D与虚拟现实头戴设备进行交互连接,实现人机交互,将汽车零部件拆装过程虚拟化,使得教学过程更加生动,且突破了传统拆装实训中存在的设备数量有限、易损坏、教学用具更新速度有限等限制。
Unity3D 软件是三维游戏引擎,支持C #和JavaScript 语言进行开发,可以对虚拟对象进行逻辑控制和交互操作,该软件具有强大的跨平台特性,可以发布并运行在PC、IOS 和Android 等多种平台。Unity3D可通过WebGL工程选项将Unity3D 项目以JavaScript的形式发布,使用Html5 技术和WebGL 渲染API 接口,借助系统显卡在浏览器中展示3D 场景和模型。Web是基于超文本和HTTP的跨平台分布式图形信息系统,可以将图形、声音、视频集合于一体进行展示[14]。由于Unity3D与Web强大的跨平台特性,本实验系统采用Unity3D 为开发平台,结合SolidWorks、3DMax 和Photoshop等图形编辑工具,建立机电产品虚拟拆装模型,以C#脚本编程驱动,实现虚拟与现实的交互和机电产品的结构动态展示。将拆装模型发布为WebGL工程后,通过JavaScript嵌入Web端,完成Web端与虚拟模型的交互任务。
基于Unity3D 的机电产品虚拟拆装实验平台采用浏览器/服务器(Browser/Serves,B/S)架构,如图1 所示。模型和脚本运行在服务器上,在客户端使用浏览器访问服务器网址就可以进行虚拟拆装实验。系统包括电主轴,手动变速箱,行星轮减速器,2 级减速器等机电产品虚拟实验的交互拆装、零部件结构认知与分析、虚拟环境的设置等功能。
图1 机电产品虚拟拆装实验平台架构
采用模块化设计,便于系统功能的进一步扩展。定义虚拟拆装实验软件各组成模块,模块之间采用接口进行参数传递。
和开放图形库(Open Graphics Library,OpenGL)等图形化平台相比,将Unity3D 模型发布的WebGl 作为开发平台进行虚拟实验开发效率高,结合Solidworks、3DMax 和Photoshop等软件工具,利用C#编程控制交互和动态特性,以常见的齿轮减速器为例,构建了一个基于Web的虚拟拆装实验系统,如果有在移动平台上学习的需要,可以发布基于Android/IOS 的移动版虚拟拆装实验系统,便于学生使用。
Unity3D内部有一些快速简单形体构型选项,对于复杂形体,需要使用外部三维建模软件(Solidworks、Cinema4D 等)导入模型。具体的做法是,使用Solidworks进行机电产品建模并生成wrl 文件格式模型,将模型导入Cinema4D 中进行图形渲染,在Cinema4D 中修正模型各模块的坐标系,以方便在Unity3D中以脚本驱动模型的运动。将渲染后的模型导出为fbx格式文件,导入Unity3D中。
Unity3D模型通过C#脚本驱动,实现交互功能和动态特性。通过使用Unity3D API 实现鼠标、键盘触发模型动作,调整展示机电产品模型。将模型发布为WebGL,网页端JavaScript与Unity3D 能便捷地实现通信,完成数据在网页端的动态展示、通过网页端Button来操作模型等功能。虚拟实验平台开发流程如图2所示。
图2 系统开发流程
为解决产品三维模型在性能和资源有限的Web端上快速浏览的问题,需要利用三维建模工具对原始模型进行轻量化处理,得到通过WebGL浏览的轻量化模型[15]。生成的轻量化模型必须满足:
(1)保证在Web 端上的浏览体验。为了很好的浏览体验,WebGL 模型必须具有较快的显示速度,且具有快速的交互性能。所以模型文件必须合理组织,不能太过复杂。
(2)需要保证在工程教学领域的可用性。轻量化处理的模型能用于教学示例,完整展示机电产品的组成结构和拆卸装配过程。
(3)具有较小的文件体积。在轻量化处理的过程中,筛选出需要展示的几何构型。较小的文件体积能够保证模型在网页端快速加载。
在机电产品虚拟拆装实验系统中设计交互功能,能够提升学生学习过程中的参与感。交互功能包括对模型整体场景的操作交互、减速器拆装过程的交互以及Unity3D 模型与网页的交互。交互过程通过Unity3D 应用程序接口(Application Programming Interface,API)等工具实现。
2.4.1 场景交互
为了增加虚拟拆装实验的丰富性和场景的生动性,系统设计了整体场景的操作交互过程,包括拖动减速器模型移动和旋转、减速器模型外壳透明化等。方便学生更细致地了解模型的整体结构和局部细节。鼠标点击、拖动可以在场景中移动(鼠标左键操作)和旋转模型(鼠标右键操作)。减速器模型的移动和旋转是通过修改主相机(MainCamera)和模型的相对位置(Position)与方位(Rotation)来实现的。为方便开发过程,本系统采用摄像机围绕模型移动和旋转作为实现方法。给主相机绑定相应的驱动脚本,通过Unity-Scripting API 中的Input. GetMouseButton 来判断鼠标的操作事件。在脚本Update函数中,判断是鼠标左键还是右键点击,使用GameObject. transform.RotateAround 方法实现主相机绕模型的旋转,其中GameObject为声明的主相机对象,模型对象为该方法的参数。旋转角度和移动距离,通过Input. GetAxis(“Mouse X”)和Input.GetAxis(“Mouse Y”)返回的数值进行合适的缩放来确定,保证操作体验即可,如图3所示。
图3 场景交互实现原理
减速器模型外壳透明化的功能是为了方便从整体上观察减速器内部结构设计的。在场景中设置On/Off样式的UI,点击UI 来完成透明化的操作。使用NGUI插件来设计外壳透明按钮,NGUI 可以方便地添加组件Atlas 和Button。添加Button 后在Inspector-OnClick 属性中选择点击按钮后对应的通告物体(Notify)所绑定的脚本中的方法(Method),就可以选择点击按钮后执行的动作。
点击按钮后,gameObject. SetActive 方法可以使当前按钮不激活,并激活对应的另一个按钮。在减速器外壳的脚本中,首先声明有透明和不透明的两种材质,并在Inspector 中将其选定为对应的材质,修改Renderer 组件中的Material 属性即可修改物体的材质,改变gameObject. GetComponent <Renderer >().material的值即可。
2.4.2 拆装过程交互
减速器模型较为复杂,将减速器零件进行分组拆装可以方便学生对减速器的认知。以典型的2 级减速器为例,将2 级减速器分为5 个部分(底座无需拆装),依次拆卸和安装,如表1 所示。
表1 2 级减速器拆装部件
减速器的拆装方式为逐级拆装,拆装动作通过点击事件触发,上一组拆装完成后,才能进入下一组的拆装,且只有拆卸完成后才能开始装配。交互拆装的流程如图4 所示。
图4 减速器拆装流程
拆卸与装配控制按钮通过Unity3D 中内置UI 系统的OnGUI方法实现。
点击第1 组模型虚拟实体,使第1 组零件开始按预定轨迹拆卸。Unity3D API中的OnMouseDown 方法可以通过Unity射线(Ray)检测碰撞体(Collider)。给模型添加碰撞体组件后,就可以在OnMouseDown 方法下编写驱动模型运动的脚本了。后续的拆卸与装配过程实现方法与上述过程类似。
2.4.3 模型与网页交互
系统中设计了模型与网页交互的部分,主要是通过Web端中的按钮来控制产品工作原理的展示和实时绘制轴系运动状态曲线。为更直观展示减速器的工作原理,在Web端上设计了驱动模型传动链中轴系零件运动的按钮,点击按钮并输入输入轴的转速,能够在模型中展示减速器的运动过程。实时向网页端传输各轴的转速,通过Echarts控件将其绘制成n-t曲线。
当为Web构建内容时,WebGL 需要与Web 上的其他内容通信,或者使用Unity3D 中的API 来实现功能。在此情况下,Unity3D 需要直接与浏览器的JavaScript对接。
网页按钮驱动产品模型运动是通过Unity3D 和HTML 通信来完成的。ActiveX 控件具有一个SendMessage()的函数,HTML 通过该函数与Unity3D进行通信,通过该函数可以向Unity3D 中传递对象名称、函数名称和函数的参数。点击网页上的按钮后,gameInstance. SendMessage (“ GameObject ”,“FunName”,Parameter1,Parameter 2,Parameter 3)就会使Unity3D中名为“GameObject”的对象执行脚本中名为“FunName”的函数,函数的参数为Parameter1-3。也可以不传递参数或传递单参数。
Unity3D需要实时向网页端传递模型运行状态数据,例如轴的转速、转矩信息。Application.ExternalCall()可以调用HTML里定义的JavaScript 函数并传递参数。为了展示实时状态数据,将该函数写在Update 方法中,模型运行过程中该函数始终执行。在Unity3D端将模型的转速等信息存于链表中,参数形式传递给HTML后,JavaScript将每一次收到的参数通过Echarts控件绘制成对应的曲线。
2.4.4 产品工作原理的动态展示
以2 级齿轮减速器为例,减速器通过齿轮啮合传动降低转速,传动比与啮合齿轮副的齿数密切相关。输入轴转速为n时,假设输入轴齿轮齿数为z1,中间轴与输入轴啮合齿轮齿数为z2、与输出轴啮合齿轮为z3,输出轴齿轮齿数为z4,则减速器传动比为(z2/z1)×(z4/z3),输出轴的转速为n ×(z1×z3)/(z2×z4)。为了动态展示减速器的工作原理,Web 端按钮驱动Unity3D模型后,模型应该展示齿轮副的旋转运动以及减速器的减速效果。在系统设计中,将各轴所在的轴系零件打组,通过Transform组件的Rotate属性使轴系部件绕轴旋转,展示减速器工作的运动过程。通过网页端输入转速数值,传递给Unity3D模型中,实现调速的效果,展示减速器的减速原理。产品工作原理的动态展示如图5 所示。
图5 产品工作原理动态展示
实验系统依据B/S 架构,以4 种典型的机电产品为实验对象,构建一套基于Web/Unity3D 的虚拟拆装系统,包括电主轴、2 级锥齿轮减速箱、行星轮减速箱和手动减速箱。以WebGL 形式发布并嵌入Web 端中,可独立运行于支持WebGL的PC 端浏览器上。图6 为2 级锥齿轮减速器拆装界面,图7 为机电产品运动状态展示界面。
本文介绍了基于Unity3D的三维交互式虚拟场景的构建方法和关键技术。在外部三维CAD 工具软件中建立机电产品模型并进行轻量化处理,通过交互手段实现Unity3 D端外部事件的交互、Web和Unity3 D的交互,展示了机电产品的工作原理和运行数据,搭建了B/S架构的机电产品虚拟拆装系统。本系统兼容性强,可独立在浏览器上运行,访问速度快,降低了教学成本,减少实验过程可能发生的安全事故,便于实验室教师的工作和学生的学习。系统的可交互性强,过程展示清晰生动,提高了学生的学习兴趣和实验过程中的参与感,充分展示了高校以学生为主体的教学观念。实验系统的实施为高校工程类人才的培养提供了新的方法和思路。