基于Unity的模型虚拟装配系统研究
2018-10-11孔伟晶王鸿伟王荣海
孔伟晶 王鸿伟 王荣海
摘 要:为了改善Pro/E等软件进行零件装配不够直观,以及仅面向单个产品的虚拟装配系统花费成本高且适用性低的问题,本文将虚拟装配技术用于工业产品设计与制造的过程,实现了产品装配过程可视化,具有即导即用的特点,缩短了产品设计周期。使用Unity引擎,以及HTC Vive头盔式显示器,进行模型的组装与拆卸系统的设计与研究,提出了多零件模型在虚拟环境中定位与复位的实现方法,初步实现虚拟装配过程。实验结果表明:模型导入即可使用,并可在虚拟环境下进行基本组装与拆卸操作。
关键词:虚拟现实;Unity;HTC Vive;虚拟装配
中图分类号:TP391.9 文献标识码:A
1 引言(Introduction)
传统的计算机辅助工具,以及仿真软件虽然可以为设计者提供模拟装配操作,但是也具有场景不够直观的弊端,使得实际生产的产品与模拟装配的产品之间存在差异,影响产品投入使用。
在传统的产品设计过程中要进行模拟装配操作,而这个过程主要是根据以往的经验,以及模型大小比例实现。由于开发者的理论知识有限,而且建模之后的模型零件的装配操作更注重零件之间的装配约束关系而忽略了装配顺序,偏离实际装配过程。这就决定了无法在模拟装配过程中解决所有的问题,在产品实际投入市场之前,还需要多次进行实际产品生产,经过测试解决虚拟与现实之间的差异。整个产品设计的维护在开发周期中耗时大,需要进行一次又一次的设计更新来解决新发现的问题,如此便会造成时间消耗大、投入大,不利于产品更新换代频繁的新时代下企业的需求[1,2]。
虚拟装配技术的出现为尽早在设计阶段发现问题与解决问题提供了可能,在真实感上比传统计算机软件效果好,但是仅面向单个产品的虚拟装配系统花费成本高且适用性低,针对此问题,本系统设计了面向大众的虚拟装配系统,具有即导即用的特点[3]。
2 模型虚拟装配系统设计与实现(Design and
implementation of model virtual assembly system)
对VR场景预先进行结构设计,帮助体验者了解整体结构,也有助于开发者在整体开发过程中对整体结构有一定的把握,有助于开发者对界面功能与样式的设计。本系统共分为三个场景,主场景为main menu,子场景为拆卸场景和组装场景。主场景模拟展厅效果,通过对模型进行简单操作了解模型结构。然后在拆卸场景进行虚拟拆卸操作,在组装场景进行虚拟组装操作。用户通过控制手柄点击主场景main menu的拆卸或者组装按钮进入拆卸或组装场景[4]。
2.1 主场景功能设计
2.1.1 主场景主要功能
启动Unity模型自动旋转(模拟展厅效果)[5,6]。
①按动手柄Trigger键点击按键可对模型进行模型移位、放大、缩小、复位操作。
②拖动滑块位置改变模型旋转的速度。
③拉动左右两边边框可滑动文字进行阅读。左边为模型位置信息、大小信息、旋转信息,一旦移动模型数据就刷新,右边为“魔钉”简介。
④点击组装、拆卸按钮可跳转场景。
⑤场景启动自动找到特定名字模型自加组件并将模型定位到场景中心位置。
2.1.2 自加组件功能
主场景主要是模拟展厅的效果,可以给用户带来互动体验,提升新鲜感,同时展示完整模型的效果,为后续组装做准备。为给用户提供方便,减轻每次改变模型时需要手动添加组件的麻烦,经过代码控制可实现在场景启动时自动寻找指定名字的模型然后检测是否添加组件,一旦检测到没有添加,就自动加上相应的组件。用户只需要在导入模型时将模型名字改为固定的名字即可。主场景可实现自动添加MeshRenderer、碰撞体BoxCollider、刚体Rigidbody、抓取Draggable。只有组件添加之后才可以实现模型在展台上旋转不会掉落,通过手柄进行抓取的功能。
2.1.3 场景转换功能
中间Canvas主要是进行场景转换,提供用户从主场景转换到组装、拆卸场景的渠道,其次,还提供了模型放大、缩小的按钮。Canvas下提供一个可控制模型旋转速度的滑块,用户可调节到适合观看的旋转速度。为了界面的美观度,用多个image进行叠加,添加精灵格式的图片,改善页面显示效果。
场景转换功能是通过按钮连接场景转换代码实现的。当检测到手柄点击了按钮,就立即執行所连接的函数的操作指令。用户通过手柄Trigger键点击实现页面跳转。
模型放大、缩小功能和页面跳转功能都是通过按钮连接相应代码实现的。
2.2 拆卸场景功能设计
2.2.1 拆卸场景主要功能
①按动手柄Trigger键点击按键可对模型进行模型零件移位、放大、缩小、复位操作。
②点击可跳转到主场景。
③通过拖动零件的方式实现模型拆卸,可近距离观看。
④用户在操作过程中随时可保存,reset之后为上次点击保存的模型位置。
⑤场景启动自动找到特定名字模型自加组件并将模型定位到场景中心位置,并显示模型位置信息、大小信息、旋转信息,一旦移动模型数据就刷新。
拆卸过程如图1所示。
2.2.2 多零件复位功能
本场景主要是提供用户对模型的零件进行拆解,更加深入了解模型的内部构造,考虑到用户在进行对模型进行位置调节的时候会进行误操作,将当前用户认为适合观看的位置可进行实时保存便成为急需解决的问题。针对这个问题,提供了多零件可复位功能。用户可点击保存按钮对当前模型的各个零件进行位置、大小、旋转角度的保存,当用户点击reset按钮时,会检测当前是否点击了保存按钮,如果未点击保存(countsave=0)按钮,则调用reset1函数给当前模型各零件初始启动时参数,若检测到已经点击保存,则更新用户上次点击保存按钮时保存的参数值。
在对模型复位之前要对当前各零件位置信息进行保存,首先要在start函数内保存各零件位置初始值,其次,要实时监测当前是否点击了保存按钮,若点击保存按钮,则立即保存当前位置。由于模型位置信息并不是简单的一元数组,而是由x、y、z三元数据共同控制模型位置,通过定义一个三元向量存储模型各个零件的位置(用Vector3)。由于unity中模型旋转角度信息由四元数共同控制,通过定义一个四元数组存储各零件的旋转角度信息(Quaternion)。运用List数组的优点是存储数据可按需动态增加。所以要根据countsave次数找到上次保存的零件信息的初始保存位置,根据对应数据进行模型复位。即listi=i+(countsave-1)*modelcount。
2.2.3 多零件模型位置显示功能
为了用户与设计者便于得到模型所在位置信息,提供了模型位置信息在用户VR界面可显示的功能。位置信息包括模型位置信息、大小信息、旋转信息,一旦移动模型数据就刷新数据,保证用户可以实时地得到模型信息,为模型移位操作,以及了解模型复位、定位原理提供了方便。信息可通过右边滑块滑动,在信息较多的情况更加适用。由于模型数据随时需要刷新,所以整个多零件模型位置显示代码都必须在Update函数里面,保证刷新的实时性[7]。
2.3 组装场景功能设计
2.3.1 组装场景主要功能
①按动手柄Trigger键点击按键可对模型进行模型零件移位、放大、缩小、复位、保存操作。
②点击可跳转到主场景。
④通过拖动零件实现模型组装,可近距离观看。
⑤切换到此场景零件自动定位。
⑥用户在操作过程中随时可保存,reset之后为刚才保存的模型位置。
⑥场景显示模型位置信息、大小信息、旋转信息,一旦移动模型数据就刷新。
组装过程如图2所示。
2.3.2 多零件自定位
由于组装场景需要排列待组装的零件,所以提供了组装场景启动之后模型各个零件会自定位的功能。组装场景和拆卸场景最大的区别就是自定位。拆卸场景只需要将整体零件定位即可,而组装场景要多零件定位使其有空隙整齐的摆放,便于用户进行选取与抓取操作。
用户在导入模型的时候就要首先做好模型零件导入手动改名操作,将每一个零件的名字按照数字0、1、2、3、4、5、6改成顺序改名,并将整个模型名改成“model”,Unity便可以根据名字寻找到制定的零件获取其位置信息并根据程序指令进行定位。
首先,将名为“0”的零件进行定位,直接制定一个固定的位置,作为本场景中其他零件定位的一个参照物,为了零件摆放的美观度与整齐度,“0”所在位置大致在整个场景的中心点。然后名字所表示数字为偶数的零件依次排列在中间零件的右边,名字所表示数字为奇数的零件依次排列在中间零件的左边。对下一个零件名为“1”的模型进行定位时,因为都是在第一排,所以y、z轴的数据不需要改变,只需要将x轴位置减去“0”的x轴大小的一半再减去“1”自己本身的x轴大小的一半,以上为两个模型中心点之间的最短距离,为了更好分隔两个零件,在以上的基础上再减去0.1,为相邻的两个零件之间的固定间隔,即:
fx_kk-size[i].x/2*scale[i].x-size[i-1].x/2*scale[i-1].x-0.1f (1)
本式中scale[i].x是考虑到用户在组装过程中可能会进行放大缩小操作,与相应的大小倍数相乘即为此零件x轴的实际距离,即:
零件的实际大小=零件的尺寸*零件的缩放 (2)
根据此规律一直将零件排列下去。
第一排在排列过程中会一直进行是否超出展台大小的测试,如果超出,此时就开始进行第二排定位。为了场景的真实性,当检测到第一排排列好之后,就对展台进行放大操作,保证整个场景的美观度。
对第二排进行定位,与第一排相似,首先对中间位置的零件进行定位,然后第二排的各个零件才能以中间零件位置作为参照按照程序依次定位下去。首先要考虑两排之间的距离问题,中心位置与第一排相比不变的是x、y轴的数据,变化的是z轴数据,为了美观,每一排零件的z轴位置都是一致的,第二排也不例外,但是由于第一排零件大小不固定,这就预示着不能采用根据上一排零件的z轴大小去确定第二排的z轴位置,为此,在第一排零件进行定位的同时,就在寻找一个最大的z轴值maxsize,第二排中间z轴位置根据得到的maxsize值来进行定位就可以保证两排零件之间没有重合,加上0.1作為零件间隔增加排列整齐性,即:
model0.transform.position.z+0.1f+size[i].z/2*scale[i].z+maxsize/2 (3)
第二排同样是通过偶数名零件排在中间零件右边,奇数名零件排在中间零件左边进行依次定位。
零件定位原理如图3所示。
本场景目前只提供两排模型的定位,一是因为零件太精致小巧会不便于抓取,造成使用的不方便,二是因为模型放置太多于展厅会很凌乱,对视觉造成障碍。在对零件进行第二排排列的时候同样会进行是否超出展台的检测,如果超出,此时会输出报错信息,提醒用户将模型缩小后再重新进行定位操作。
模拟两排自定位效果如图4与图5所示。
2.4 实际功能与应用
本系统利用虚拟装配技术,使用Unity引擎,以及HTC Vive头盔式显示器进行设计与研究。可以实现用户与自己导入的模型进行虚拟组装、拆卸交互操作,交互过程具有更多的自由性,而且改变了传统在软件进行的装配操作,带来更具有真实感的VR体验。
首先,可以在工业新产品设计过程中及时纠错。通过在VR观看,以及虚拟组装操作在投入制造之前检查出设计、制造中可能出现的问题,及时采取必要的措施,提高设计成功率。还能更方便的根据市场的需求进行设计的更新,缩短产品开发周期,增强产品的竞争力,更快的适应市场。并且由于整个场景是虚拟的,只需要提供三维模型,不用进行实际生产,消耗的资源相对较少,为企业降低成本。
其次,虚拟装配也可用于高校教育,带来与传统教学模式不同的交互式、可见性的VR体验,提升学生学习的热情,带来更加直观的学习体验,学生可以进行多次组装操作练习熟练度,免去了实际组装完成后还需将零件拆除才能进行下一次组装的麻烦。虚拟装配对于新时代VR深入教育事业有深远的意义。
3 结论(Conclusion)
虚拟现实给人们带来更加方便化、沉浸式的体验,VR可用于工业产品的设计与装配操作过程,本系统采用虚拟装配技术,可以实现用户与自己导入的模型进行虚拟组装、拆卸交互操作,设计了模型可在虚拟展厅展示的功能,实现了Unity启动模型自加组件,零件自定位,以及零件组装过程中实时复位操作,具有即导即用的特点,应用面广,成本低。新产品设计者可以更快速、直观的发现设计错误。但是,本系统因为是通过手柄进行操作,灵敏度不及手指,零件抓取之后进行位置调整时不好控制,在交互方面需要进一步完善。再次,系统设计中碰撞的设计不合理,模型容易穿出展台,以及模型中心点不确定造成的自定位偏差问题都需要进一步解决。
虽然VR设备在硬件上尚有不足,由于其方便性、沉浸式、真实性的体验契合了用户的需求,VR逐渐成为全球新一代信息技术的焦点。在VR基础上的虚拟装配技术作为新兴行业其发展过程不会是一帆风顺,必然是曲折向前的,当硬件设备趋近于成熟时,虚拟装配技术在工业与教育领域的应用将带来新的变革。
参考文献(References)
[1] Zhang Hui.Head-mounted display-based intuitive virtual reality training system for the mining industry[J].International Journal of Mining Science and Technology,2017,27(04):717-722.
[2] Zun-rong Wang,Ping Wang,Liang Xing,et al.Leap Motion-based virtual reality training for improving motor functional recovery of upper limbs and neural reorganization in subacute stroke patients[J].Neural Regeneration Research,2017,12(11):1823-1831.
[3] LIU Zhenyu,TAN Jianrong,DUAN Guifang,et al.Force Feedback Coupling with Dynamics for Physical Simulation of Product Assembly and Operation Performance[J].Chinese Journal of Mechanical Engineering,2015,28(01):164-172.
[4] 褚晶莹.基于UNITY3D技术的VR展台的设计与实现[D].吉林大学,2016:22-30.
[5] 肖灑.VR技术在展示设计中的应用[D].山东工艺美术学院,2016:25-35.
[6] Jun Liu,Lin Xuan Zhang,Bing Cui.Real-Time Semi-Physical Simulation of Industry Design System Based on Virtual Reality Technology[J].Applied Mechanics and Materials,2014,607:413-416.
[7] 倪萌.基于Unity3D的汽车发动机虚拟装配训练考评系统的设计与实现[D].北京工业大学,2014:1-4.
作者简介:
孔伟晶(1996-),女,本科生.研究领域:虚拟现实.
王鸿伟(1980-),男,硕士,讲师.研究领域:虚拟现实,数据挖掘,电子商务.本文通讯作者.
王荣海(1972-),男,硕士,副教授.研究领域:移动互联网,虚拟现实,软件工程.