汽车主减速器虚拟装配中的关键技术研究
2021-09-23陈春晓徐劲力
吴 波,陈春晓,徐劲力
(武汉理工大学机电工程学院,湖北 武汉430070)
1 引言
随着计算机图像处理与识别等技术的发展,选择使用Unity游戏引擎作为虚拟装配系统开发工具的研究成为了当前的热门,再加上HoloLens头戴式显示器的出现,已经有越来越多的学者开始使用Unity来探索HoloLens在虚拟装配系统中可发挥的潜能。文献[1]使用Unity来构建应用程序对HoloLens的虚拟装配能力进行了评估,并表明虽然HoloLens是一个具有虚拟装配能力前景的设备,但是要将其应用在工厂的组装环境中,某些领域还需要进一步的改进,比如追踪的准确性等;文献[2]使用Unity和HoloLens实现了一个允许用户与虚拟物体交互时不需要将其视线从物理环境中移开的增强现实系统;文献[3]基于Unity和Holo-Lens开发了一套虚实结合的船舶辅机拆装系统;文献[4]设计并实现了基于HoloLens的基站线束设备AR辅助布线系统;文献[5]提出一种基于HoloLens的核电站设备维修辅助系统应用构想。
另外,在对虚拟装配进行研究的同时必不可少的需要对其所包含的关键技术进行详细的探究。文献[6]在开发虚拟吊装训练系统的同时对零件实体的表达和显示、自由度规约运动导航和实时碰撞检测等关键技术进行了研究;文献[7]通过探究人机交互、装配序列规划、碰撞检测等虚拟装配过程中的关键技术开发了主轴箱的虚拟装配系统。
针对上述内容,以Unity为三维引擎,结合HoloLens设备,对汽车主减速器虚拟装配中的着色器、碰撞检测和人机交互等关键技术进行深入的研究,为进一步实现主减速器虚拟装配系统奠定坚实的基础。
2 着色器技术
着色器技术是通过对三维模型进行渲染来使用户可以观察到各种各样的图像显示效果,目前Unity中比较常用的是顶点/片元着色器。
2.1 光照模型分析
光照模型是对真实世界中复杂光照进行一定简化后的理想模型,可以模拟光从发射到与物体相交再到人眼中的效果,是影响虚拟场景中模型渲染效果的关键因素之一。
2.1.1 漫反射与Lambert光照模型
由于漫反射光照符合Lambert定律,即反射光线的强度与入射点表面法向和光源方向之间夹角的余弦成正比。为此可将Lambert漫反射光照方程写为式(1)所示:
式中:Idiff—漫反射的光照强度;kd(0<kd<1)—漫反射系数;Il—点光源的光照强度;N—入射点表面的单位法向量;L—从入射点指向光源的单位方向向量;另外,为了防止的N与L之间夹角的余弦值为负从而避免物体被从后面来的光源照亮,使用max函数来将其最小值截取到0。
在Unity中选择顶点/片元着色器并使用Cg/HLSL语言构建Lambert光照模型,得到其材质球如图1(a)所示,将其应用于主减速器零部件中的主动齿轮上渲染效果,如图1(b)所示。
图1 Lambert光照模型的材质球及其渲染效果Fig.1 Material of Lambert Lighting Model and Its Rendering Effect
从上图中可以看出,虽然Lambert光照模型可以表现出主动齿轮的光照现象,但是对其表面上的金属光泽效果却显得力不从心,为此,可在漫反射的基础上加上镜面反射从而得到渲染效果更好的Phong光照模型。
2.1.2 镜面反射与Phong光照模型
镜面反射的光照强度与反射光线和观察视线之间的夹角有关,其光照模型,如式(2)所示:
式中:Ispec—镜面反射的光照强度;ks表示镜面反射系数;ns—高光指数;V—从入射点指向视点的单位观察向量。
所以综合考虑漫反射和镜面反射两个因素,可得出式(3)所示的光照方程:
在Unity中以同样的方法构建Phong光照模型,得到其材质球如图2(a)所示,将其应用于主动齿轮上渲染效果,如图2(b)所示。
图2 Phong光照模型的材质球及其渲染效果Fig.2 Material of Phong Lighting Model and Its Rendering Effect
从图中可以看出,Phong光照模型已经可以实现主动齿轮表面上的金属光泽,但是其渲染效果依旧不够明显。为此,提出Blinn-Phong光照模型。
2.1.3 Blinn-Phong光照模型
Blinn-Phong的基本思想是引入L和V的中间向量H,从而将Phong光照模型的表达式改为,如式(4)所示:
综合考虑漫反射和镜面反射两个因素,可得出式(5)所示的光照方程:
在Unity中以同样的方法构建Blinn-Phong光照模型,得到其材质球效果如图3(a)所示,将其应用于主动齿轮上效果,如图3(b)所示。
图3 Blinn-Phong光照模型的材质球及其渲染效果Fig.3 Material of Blinn-Phong Lighting Model and Its Rendering Effect
从上图中可以看出,Blinn-Phong光照模型对于主动齿轮表面上的金属光泽渲染效果要比Phong光照模型更加明显与自然。
2.2 Half Lambert光照模型的引入
对于上述所实现的光照模型着色器来说,在光照无法到达的区域,其所渲染的主动齿轮外观通常是全黑的,没有任何的明暗变化效果,因此这会使主动齿轮的背光面失去所有的细节表现。为此,可在原Lambert光照模型的基础上进行一个简单的修改,即引入Half Lambert光照模型,从而来克服模型背光面明暗一样的问题。根据文献[8]在《Unity Shader入门精要》中对Half Lambert光照模型的叙述,可将广义的Half Lambert光照模型公式概括,如式(6)所示:
在绝大多数情况下,α和β的值均为0.5,因此,式(6)可进一步改写式(7)为:
从式(7)中可以看出Half Lambert光照模型将N·L的结果范围从[-1,1]映射到[0,1]范围内,也就是说,对于模型的背光面,Lambert光照模型将点积结果都映射在同一个值,即0值处,而在Half Lambert光照模型中,不同的点积结果会映射在不同的值上,因此,背光面也出现相应的明暗变化。
最后,可将综合考虑Half Lambert和Blinn-Phong模型的光照方程表达式,如式(8)所示:
在Unity中以同样的方法构建Half Lambert和Blinn-Phong相结合的光照模型,得到其材质球如图4(a)所示,将其应用于主动齿轮上效果,如图4(b)所示。
图4 Half Lambert和Blinn-Phong光照模型的材质球及其渲染效果Fig.4 Material of Half Lambert & Blinn-Phong Lighting Model and Its Rendering Effect
从图中可以看出,Half Lambert和Blinn-Phong相结合的光照模型不仅改善了主动齿轮背光区域的明暗效果,使其具有相应的细节表现,同时在需要有金属光泽的材质表面上也有很好的渲染效果。为此,可将基于Half Lambert和Blinn-Phong光照模型的着色器技术作为主减速器虚拟装配中三维模型的渲染方式,以便可以获取到高真实度的虚拟场景。
3 碰撞检测技术
碰撞检测的本质就是在同一时刻检测虚拟环境中是否有两个或者多个虚拟物体占据同一个空间区域,从而来判断虚拟物体之间是否产生了碰撞。
3.1 基于Unity的碰撞检测
Unity中的碰撞检测机理使用的是基于层次包围盒的算法。层次包围盒方法的核心思想是用体积略大而几何特性简单的包围盒来近似地描述复杂的几何对象,从而只需对包围盒重叠的对象进行进一步的相交测试[9],这样可以大大提高碰撞检测的速度从而快速筛选出产生碰撞的物体。
在Unity中如果想要实现模型对象之间的碰撞检测,首先必须要给其添加合适的Collider(碰撞器)。目前,Unity提供了6种碰撞器,分别是适用于规则六面体的Box Collider(盒子碰撞器)、适用于球体或者旋转物体的Sphere Collider(球体碰撞器)、适用于类似椭圆物体的Capsule Collider(胶囊碰撞器)、适用于形状复杂物体的Mesh Collider(网格碰撞器)、适合在车轮与其他物体碰撞时使用的Wheel Collider(车轮碰撞器)和适用于地形表面的Terrain Collider(地形碰撞器)。其中,盒子碰撞器、球体碰撞器和胶囊碰撞器作为基本碰撞器,其结构简单、检测效率高,但是密封性较差;而网格碰撞器虽然可以通过物体的网格构建适合任何形状对象的碰撞器,从而可以实现很高的检测精度,但是两个网格碰撞器之间通常不会发生碰撞,即便将网格碰撞器标记为Convex(凸起的),其在使用时仍具有很大的限制。
此外,在Unity中要实现碰撞检测还需要为物体添加Rigidbody(刚体)组件,刚体组件可以使物体具有重力、摩擦力等物理属性并能够在约束条件和物理影响下发生运动[10]。
3.2 主减速器虚拟装配的碰撞检测方法
综上所述,为了能够在本系统中实现碰撞检测,并且尽可能提高检测精度和效率,可结合基本碰撞器和网格碰撞器的使用特点设计出一种针对于主减速器虚拟装配系统的碰撞检测方法,如图5所示。
图5 基于主减速器虚拟装配的碰撞检测方法Fig.5 Collision Detection Method Based on Virtual Assembly of Main Reducer
(1)对于装配过程中不需要发生位移的物体,例如主夹具和某些辅助工具等,可直接对其添加网格碰撞器;
(2)对于待装配零部件等装配过程中需要发生位移的物体,可对其同时添加网格碰撞器和基本碰撞器,当待装配零部件未到达装配工位上时,可在脚本中通过使用GetComponent函数来获取该物体上的网格碰撞器并将其设置为false,从而由基本碰撞器发挥功能,反之,则由网格碰撞器发挥功能;
(3)对于基本碰撞器的使用,为了达到更好的密封性,可对形状比较复杂的对象添加若干个基本碰撞器的组合从而使其更加符合物体的几何外观;
(4)由于本系统只需对场景中是否有碰撞的发生做出检测,而并不想在场景中看到由于碰撞发生所产生的效果,因此需要勾选基本碰撞器中的Is Trigger(触发器)选项,从而将碰撞检测改为触发检测使用;
(5)由于本系统中没有将对象的网格碰撞器标记为凸起的,所以需要在刚体组件下勾选Is Kinematic(运动学刚体)选项,用以保证网格碰撞器可以正常使用。
根据上述碰撞检测方法依次给主减速器的零部件、装配所用夹具以及辅助工具等对象添加相应的碰撞器,其中图6所示的是给连接法兰总成添加网格碰撞器和5个盒子碰撞器,图7所示的是给主动齿轮添加网格碰撞器以及2个盒子碰撞器和1个胶囊碰撞器。
图6 给连接法兰总成添加网格碰撞器和5个盒子碰撞器Fig.6 Add Mesh Collider and 5 Box Colliders to The Connection Flange Assembly
图7 给主动齿轮添加网格碰撞器以及2个盒子碰撞器和1个胶囊碰撞器Fig.7 Add Mesh Collider and 2 Box Colliders and 1 Capsule Collider to The Drive Gear
4 人机交互技术
在以虚拟装配为主导功能的系统中,人机交互更关键的核心技术之一。本研究基于HoloLens的三大基本输入方式——凝视、手势和语音,同时结合C#编程脚本实现了一整套全新的人机交互内容,为主减速器虚拟装配中的操作奠定了基础。
4.1 虚拟物体的选取
在一个虚实融合的场景中往往会有很多虚拟物体,而用户意图进行交互操作的对象通常只是其中一个。因此,用户在进行人机交互之前,首先需要完成的是虚拟物体的选取。传统的基于电脑和手机移动终端的AR系统是通过在二维显示平面内借助鼠标或者触摸屏等进行虚拟物体的选取,而HoloLens的解决方案是利用凝视来选取意图进行交互操作的虚拟物体,如图8所示。
图8 HoloLens使用凝视选取交互对象Fig.8 HoloLens Uses Gaze to Select Interactive Objects
但是目前在Unity中没有明确关于凝视的应用程序编程接口(API)或者相关组件,因此需要借助射线碰撞检测的方式实现虚拟物体的选取。射线碰撞的原理是系统首先通过HoloLens向用户眼镜凝视的方向发射一条射线,然后再与带有碰撞器组件的虚拟物体进行碰撞检测。具体的实现过程是通过在脚本中实例化射线类Ray函数,同时利用摄像头调用Physics.RayCast函数发出射线,与虚拟物体的表面在某一点相交得出RaycastHit结果,该结果即包含了碰撞点的三维位置参数和碰撞对象等信息。
4.2 选取信息的反馈
由于场景中的射线是不可见的,若直接使用射线的注视矢量作为选取物体的输入形式,用户很难在没有标记凝视中心的情境下对意图交互的物体进行精确定位,所以使用Cursor(光标)作为选取物体时信息反馈的指示器,用以帮助用户更精准的了解到他们视线的注视中心。
对于光标本身来说,不同的外观会给用户带来不同的观感和相应信息的提取,因此,为了更好地发挥光标在系统中的作用,在设计光标时应必须满足始终存在、大小合适、无方向性和颜色醒目等几点原则。另外,为了给用户带来更全面的信息反馈,光标的设计应根据虚实融合场景中视线与不同的对象发生碰撞并结合用户的交互需求产生不一样的外观显示效果,如表1所示。
表1 光标不同状态下外观显示效果及其表达含义Tab.1 Appearance Display Effect and Its Meaning in Different States of The Cursor
4.3 基于手势识别的人机交互
在使用凝视射线选取意图交互的对象之后,用户即可通过手势输入对虚拟物体进行控制。根据主减速器虚拟装配中对手势交互的需求,确定选取Air Tap(点击)和Tap and Hold(拖拽)作为主要的手势输入方式。另外,用户在进行手势操作之前通常都需要有一个Ready(预备)手势的操作。综上,可将主减速器虚拟装配中的手势指令及其表达含义概括,如表2所示。
表2 主减速器虚拟装配中的手势指令及其表达含义Tab.2 Gesture Instructions and Their Meanings in The Virtual Assembly of Main Reducer
在Unity中进行手势交互的开发时,需要在脚本中添加GestureRecognizer(手势识别器)用以实现系统对用户手势的感知。其中,点击手势作为最基本的手势输入,可在本系统中实现多种功能,例如零部件观察场景中的模型信息查看和虚拟装配场景中的自动装配等,为此需要在脚本中设计一个点击手势的响应函数OnTap,用以响应不同功能事件的发生;而拖拽手势主要是在本系统的手动装配模式中实现物体Manipulation(平移)和Navigation(转动)两种功能,因此需要在脚本中设定一个bool(布尔)变量isManipulationEnabled来控制拖拽时平移和转动之间的切换,其中,平移是通过在初始位置的基础上加上拖拽的总偏移量来改变物体的空间位置所实现的,而转动需要先定义一个回转因子来控制旋转量,然后根据物体装配需求设定相应的转动方向即可。
综上,可将HoloLens中凝视选取目标对象和手势操作结合实现交互的流程归纳为,如图9所示。
图9 HoloLens中结合凝视与手势实现交互的流程Fig.9 The Process of Interacting with Gestures and Gestures in HoloLens
4.4 基于语音识别的人机交互
语音输入是以一种自然的方式对用户意图操作的物体进行信息传达,用户既可以在场景中直接说出语音指令来实现某种交互功能,也可以在凝视选择目标物体的同时使用预设好的语音命令来实现交互效果。
在Unity中进行语音交互的开发时,首先需要在脚本中添加KeywordRecognizer(关键词识别器)用以实现应用上的语音识别,然后尽可能通过使用常见的英文短语来确定关键词的名称用以调用并执行动作事件,最后通过HoloLens的麦克风硬件对用户的关键词口语表达进行识别,进而触发功能事件达到交互效果。
另外,在手势交互设计中,由于拖拽手势需要响应物体的移动和转动两种功能事件,因此为了方便用户在拖拽移动和拖拽转动之间进行自由地切换,选择语音交互功能来对此进行辅助。在设计时,可在脚本中选择“Rotate Model”和“Move Model”作为语音输入的关键词来对拖拽手势脚本中布尔变量isManipulationEnabled的值进行控制。如图10所示,当用户在凝视可进行拖拽手势的目标对象时说出“Rotate Model”,那么将isManipulationEnabled的值设置为false,此时拖拽手势响应转动功能事件;当用户在凝视可进行拖拽手势的目标对象时说出“Move Model”,那么将isManipulationEnabled的值设置为true,此时拖拽手势响应移动功能事件。
图10 语音输入控制拖拽手势的响应事件Fig.10 Voice Input Controls The Response Event of Tap and Hold Gesture
5 结论
基于Unity和HoloLens对汽车主减速器虚拟装配中的关键技术进行了相关研究,将着色器、碰撞检测和人机交互等技术在理论分析的基础上进行编程解决和实现,主要结论如下:
(1)在基本光照模型的分析与渲染效果对比下,提出将Half Lambert光照模型,并将其与Blinn-Phong光照模型相结合实现了能够获取逼真场景的着色器渲染方式;
(2)结合Unity中的基本碰撞器和网格碰撞器提出一种针对主减速器虚拟装配的碰撞检测方法,提高了系统的碰撞检测精度和效率;
(3)基于HoloLens的凝视、手势和语音三大基本输入方式,并结合C#编程脚本实现了更为简单、自然、人性化的全新交互方式,为虚拟装配中的交互操作奠定了基础。
通过对主减速器虚拟装配中关键技术的分析和解决,一方面为进一步开发和实现主减速器虚拟装配系统提供了技术支持,另一方面为基于Unity和HoloLens的虚拟装配研究提供了一定的参考价值。