姚寿文,林 博,王 瑀,张家豪
(北京理工大学 机械与车辆学院, 北京 100081)
虚拟装配技术是近些年来被广泛研究的新兴技术,是虚拟现实技术在制造业的典型应用,它从产品装配设计的角度出发,利用虚拟现实技术建立一个具有听觉、视觉、触觉的多模式可交互的虚拟环境,借助于虚拟现实的输入输出设备,设计者在虚拟环境中人机交互式地进行装配和拆卸操作,检验和评价产品的装配性能,从而生成经济、合理、实用的装配方案[1]。近年来国内外在相关领域有许多研究和应用,如美国华盛顿州立大学VADE系统设计人员首先将在CAD环境建立的零件模型导入虚拟装配系统,然后在虚拟装配系统中直接操作虚拟零件进行装配,有关产品的可装配性得到了检验,同时也获得了产品设计和制造工艺信息[2]。国内虚拟装配的研究起步较晚,但近几年也取得了较大的发展[3],浙江大学刘振宇开发了VADAS系统,该系统可通过三维操作和语音指令实现对零部件实体模型的创建、修改,并可对其进行基于约束的装配操作。北京理工大学机械与车辆学院宁汝新等研发了可以进行实时碰撞检测,采样点装配路径规划记录的VAPP系统。上海交通大学CIM研究所的武殿梁等开发了IVAE系统,该系统能够实现分布式装配,拥有高性能的碰撞检测技术,可处理百万级的三角面片零部件模型。
国内外在虚拟装配上已作了大量研究,也有许多成功的应用。但总体上看,虚拟装配技术存在许多欠缺[4]。受制于硬件条件和技术条件的不成熟,目前国内许多虚拟装配的实时性、装配过程的仿真度存在不足,虚拟装配的体验不佳,装配过程及结果不具备较大的参考价值,而国外的关键技术不透明,无法直接利用。
如何将CAD软件中构造的模型信息导出到虚拟环境,重新构建适用于虚拟环境下装配约束计算的底层数据库,是实现动态虚拟装配的一个技术难题。数据要涵盖足够的信息,能使数据结构与约束算法匹配,不同的约束求解计算方法,可能需要不同的数据内容。同时对于大量的装配零件,需要有一个自动提取生成数据文件的方法。
美国芝加哥Illinois大学Banerjee等[5]通过在虚拟场景图中构建装配模型信息,把产品间的优先约束关系、事件驱动控制等信息封装在图中各节点中,在进行零部件装配时,读取节点的约束信息检测模型是否可装配。这种方法是人为对场景节点中的零件添加信息,效率不高,仅适用于装配关系较为简单,零部件数量不多的情况。
美国华盛顿州立大学Yong Wang和Jayaram S等[6]在VADE系统中采用基于物理属性和几何约束的混合建模方法,构建的模型包括了从CAD系统中导出的材质、质量、密度和摩擦因数等物理特征及部分约束信息,通过使用CAD二次开发的接口,将CAD与VADE系统之间的部分数据进行共享,包括产品的树状结构,几何信息和约束信息等。天津大学赵金才等[7]阐述了利用Pro/TOOLKIT提供的相关库函数访问PRO/E的单一数据库,以特征为单位对零件各组成特征的体素类型、形体尺寸、基点坐标、方向矢量等信息进行提取的方法,关键在于 C++程序的逻辑算法及其代码实现困难,不过这种方法确为信息的提取和重构提供了一个可行的思路。
虚拟装配中对三维约束的求解是实现零件装配的关键。约束求解算法的效率及稳定性直接影响装配品质。三维几何约束求解主要分为数值计算方法和几何推理方法。数值计算方法是通过将装配约束转化为一系列的点线关系,生成一组非线性方程组,自变量为各种角度及坐标位置,采用Newton-Raphson算法或该算法的改进算法进行数值迭代,从而确定几何实体满足约束后的位置和关系。吴永明[8]采用矢量闭环法建立约束闭环的矢量模型,并据此建立最小规模的约束方程组降低迭代求解的规模,但矢量闭环法求解约束闭环不具有通用性,仅能求解部分特殊约束闭环问题。通过其他预处理方式简化方程或者转化方程,文献[9]中提到了用符号推理方法将约束转换成代数方程组,该方法不是直接求解,而是通过使用Wu-Ritt特征集将方程组转换成新的形式,然后求解新形式的方程组使约束得到满足。但本质都是数值迭代计算。数值方法不仅能适应很大范围的约束类型,而且可以处理闭环约束。但数值迭代算法的缺点也很明显,依赖迭代初始值和步长的选择,稳定性较差,方程组的雅克比矩阵可能不满秩,方程组也可能存在多个解或无解,且当方程组结构复杂时,求解效率低,无法满足实时装配的要求。
几何推理方法是基于代数求解的自由度分析方法,每个零部件都有自己的局部坐标系,同时整个装配体在一个公共坐标系之中.相对于公共坐标系,可将各零件的局部坐标系之间的几何位置关系表示出来,通过分步削减自由度,确定出各零件在公共坐标系中的位置,形成整个装配体模型[10]。张清华[11]在几何推理法的基础上采用欧拉角逆向分解变换矩阵,根据几何推理得到的基体与待装配件之间自由度信息修正零件变换矩阵,实现对零件的约束。不足在于该方法仅针对一对一零件之间的约束,且没有提出自由度的判断具体流程和选择依据,没有考虑约束冗余的情形。文献[12-13]同样提出了基于自由度分析确定零件约束类型并求解约束矩阵的方法。
本文针对综合传动装置中零件的结构特点,建立了具有特征属性的零件模型,开发了对零件属性进行可视化编辑的插件,根据CAD造型过程时的数据丰富零件信息。与传统的一键式虚拟装配不同,采用碰撞检测和参数识别匹配相结合的方法进行特征约束识别和实时约束更新,结合几何推理法对零件的位姿进行实时求解。针对LeapMotion和HTC Vive等设备进行二次开发,利用OSG渲染引擎对场景渲染,实现人手与虚拟环境的交互和高沉浸感虚拟环境,完成实时动态的虚拟装配,满足高沉浸感虚拟装配的需求。
当前,虚拟装配系统中使用的模型主要通过CAD软件构建,除包含零部件几何信息外,还包含了许多工程语义信息,数据量较大。而在虚拟环境下,大量零部件需要实时渲染,为保证渲染速度,使用三角面片模型存储零件信息,所以无法将CAD模型直接导入虚拟环境中进行使用。目前许多虚拟装配平台采取的方式是通过CAD软件自带的导出插件生成记录三角面片信息的中性文件,如STL格式文件,利用中性文件在虚拟环境中渲染。虽然能满足渲染要求,但是这种转换方式丢失了大量信息,如约束树关系,装配顺序,零件体素类型及参数,而这些信息是进行具有约束识别过程动态虚拟装配所需要的关键信息。
因此,在虚拟环境中,进行约束的识别和解算,必须先建立算法所对应的数据结构,目前虚拟环境中的零件模型缺乏零件几何特征信息的表达,无法为零件的装配提供有效数据。参考CAD造型过程中保存的建模信息,本文提出了编辑和显示几何特征的零件模型的构建方法,如图1所示。
本文利用Pro/E提供的TOOLKIT接口并对其进行二次开发,利用相关API函数分类提取具体的体素和形体尺寸信息,建立了零件的数据结构,如图2所示。确定了数据结构以后,考虑到XML文件格式良好的数据组织和管理特点,本文以XML格式来保存模型数据。模型文件一旦生成后,随着零件模型的更新或者技术需求,可能要对文件内容进行修改。为实现文件的可读性和可操作性,本文使用了QT可视化编程设计了XML文件的编辑工具,如图3所示,实现即时修改数据并保存。
虚拟现实的本质是利用双目立体视觉原理,同时渲染左眼和右眼两幅图,传递给头显设备,戴上头显设备的操作者通过左右两个透镜看到两幅图片在大脑中形成具有立体和深度信息的图像。
为实现虚拟环境下产品的装配,最基本的两个问题是场景图的构建和实时渲染。目前广泛使用的渲染引擎有Unreal、Unity、OSG、OGRE、VTK等,各有独特功能,并在虚拟现实中都有所应用。从自主开源、多平台使用以及多种三维模型格式支持的角度出发,本文选择OSG作为图形渲染的工具,对导入模型进行处理和实时的渲染。OSG渲染引擎下的场景数据是一个树状的结构,如图4所示,由一个根节点作为场景的起始点,然后添加其他子节点。子节点可以是模型,也可以是位姿变换或渲染方式。父节点对子节点可以产生相同的影响,操作父节点便可以更改所有子节点的属性,以这种方式组织场景简明、高效。
通过这种组织方式,可以有效的绘制和管理复杂的场景,在这基础之上添加地形、灯光、树木等丰富场景,得到逼真的画面效果,不仅满足了对画面品质的要求,而且这种高效的组织方式有利于快速渲染处理,满足实时渲染的要求。
利用OSG将CAD造型软件生成的零件模型导入场景后,由于导入模型通常只有外形信息,还需要为其进行贴图,添加材质和光照效果。将图5所示的CAD模型导入场景,为其进行后期处理,为零件添加贴上金属材质设置镜面反射及漫反射系数控制零件的材质,如图6所示。
图6可以看出,原本的CAD模型仅仅是个灰色三维模型,不具备光泽和纹理,导入环境后为其贴图并设置光照,具有金属光泽。
沉浸感包括人的感官体验和认知,为实现高沉浸感的虚拟环境,可以从多感官感受的角度出发,提供视觉、听觉、触觉的反馈,提高场景渲染的模型精度和光影效果。在许多游戏及VR应用中,都使用了Cubemap纹理的环境天空盒技术。这里涉及到近景和远景的概念,在现实生活中,在人的视野里,周围的环境有近处的物体和远处的场景。近处的场景会随着人物的移动发生明显变化,由透视原因产生远小近大,由于光照效果,物体的表面光泽也会改变。而远景则不会随着人物在空间的移动发生较大改变,如星空和远方的群山。
之前的零件和内部环境都是操作者在虚拟环境中直接接触或者近处观察的,可以认为是近景,需要为他们构造实际的模型,而环境及背景则是不需要触及但却需要实际存在的,为此使用了立方体纹理为场景进行背景布置。
Cubemap是一个立方体纹理,如图7所示,它包含6个2D纹理,每个2D纹理是一个立方体(cube)的一个面,也就是说它是一个有贴图的立方体。它能实现在各个角度观察都能获得唯一且正确的纹理。Cubemap使用方向向量对它们索引和采样。方向向量的大小无关紧要。一旦提供了方向,OpenGL就会获取方向向量触碰到立方体表面上的相应的纹理像素(texel),这样就返回了正确的纹理采样值。
图8是Cubemap生成的场景图,图9是在场景图的基础上加载了模型。环境的背景效果可以根据实际的场景进行切换,而素材本身的获取可以通过全景相机进行拍摄或单独绘制。
虚拟环境下进行装配,交互手段非常重要,目前无论是HTC vive还是Oculus rift设备,都提供了良好的头显设备,通过高精度陀螺仪定位头部位姿,左右两个透镜分别渲染图片,利用了双目立体视觉原理,能够给佩戴者提供高沉浸感的体验。两家公司提供的操作器都为手柄,响应方式为各类按键,虽然操作方便,但操作性不够好。现实中的装配是通过手配合工具拾取安装零件,因此如何捕捉识别手部姿势并作出响应是提高交互性的有效方式。
为追求虚拟环境下装配操作的真实性,模拟正常拆装时手对零件的控制,利用了体感控制器LeapMotion进行手势捕捉,并基于捕捉量设计算法进行交互操作。LeapMotion体感控制器能够将每只手的各个节点在相对坐标系中的位置计算、捕捉及存储。根据关节的空间位置不同便可以计算得到各手指及手掌的朝向,从而得到当前手的各种姿态数据。通过设定不同的阈值创建判定条件,进行零件的抓取和移动。图10为LeapMotion虚拟手绘制并抓取零件的示例。
基于虚拟手的开发,对手势捏取、点选、托举等进行分类,定义各类手势所对应的手指骨节的相应弯曲角度区间,可以实现多种手势识别,图11为零件拾取流程。
LeapMotion是实现操作者与虚拟环境的交互设备,通过该方式可以将操作者的操作意图传递给虚拟环境。但在虚拟环境之内,仅仅通过手势传递信息是不够的,需要有交互界面及交互信息。
交互界面则采用HUD(Head Up Display)和Billboard技术使之在虚拟空间内面朝操作者。HUD技术用于显示装配过程中零件相关信息或提示信息,Billboard技术提供随视角改变悬浮的操作界面。目前这两个技术在桌面端都已成熟,若在虚拟环境下实现应用,需要对相关技术进行改进和移植。图12反映了交互界面的实现原理。首先,通过头盔内部的高精度陀螺仪获得头盔视点的坐标位置,作为虚拟场景相机节点的定位基础,UI界面的位置表达的基本过程为:
已知C点在世界坐标系中的位置,需要求解U点在世界坐标系中的位姿矩阵,即U点坐标,XU,YU,ZU三个坐标轴向量值。根据头盔的反馈数据可以得到视线向量Vview,XU与Vview共线反向,求得XU为XU=Vview。
UI距离人眼距离的预设值L,计算求得U点坐标为U=C+Vview×L。
YU垂直于Z轴和XU所在平面,由两向量叉乘所得,YU=Z×YU。ZU垂直于YU和XU所在平面,也由两向量叉乘所得,ZU=XU×YU。
经过计算获得UI界面相对于视点所在的位姿矩阵为
利用该方法将UI界面加入到虚拟场景中,如图13所示,通过手势控制UI界面,并可以用手指进行点选,利用该界面进行交互实现对场景的修改和调整。
待装配零件在进行装配时,可能存在一个或多个零件对该零件存在约束作用,称这些限制件为装配基体。所有基体与零件之间约束的集合最终限制零件在世界坐标系中的位姿状态。为便于计算分析,视所有零件为刚体。物体在空间中的位姿改变可以用绕X、Y、Z轴的旋转和沿X、Y、Z轴的平移这些运动的复合来表达,如图14所示。约束即为待装配件相对于基体的自由度限制,即相对于基体的位姿矩阵限制。
在装配过程中,使用虚拟手对零件进行装配。实际上,虚拟手捕捉的是操作者手部各关节的位姿数据,输入量是实时改变的人手位姿矩阵,而空间中的零件要伴随手部实时运动并添加约束修正,采用以往直接将手部位姿赋予零件或者通过数值求解法计算零件位姿很难满足实时动态的装配要求。因此,本文采取了对位姿矩阵改变量进行传递,根据约束情况修正改变量的方法,这样即能满足虚拟环境中被装配件随操作者手部实时运动,又能添加约束。
实现过程即把虚拟手的位姿矩阵改变量传递给零件,如若存在约束,则根据约束特征修正改变量后再进行传递。约束的识别方法是首先通过包围盒碰撞检测,判断两个零件之间哪个轴段发生了碰撞,再对该轴段存储的几何特征信息进行匹配比较,判断约束。约束建立及约束识别的实现流程如图15所示。
接下来推导位姿矩阵的表达式,并就一个简单约束说明矩阵修正的方法。
设零件位姿矩阵在世界坐标系中为P,LeapMotion捕捉到手掌的位姿矩阵换算到世界坐标系中为H。抓取的目的是让零件伴随手平移及旋转,但零件被抓取时手与零件的初始位置并不完全一致,直接将手的位姿矩阵赋给零件显然无法满足要求。因此考虑将每一帧中操作者手的位姿矩阵的变换量同时传递给零件,这样就能满足零件的随动。
设第n帧手的位姿矩阵为H(n),第n+1帧虚拟手的位姿矩阵为H(n+1),设世界坐标系中手的变换量为ΔH,可以得到:
H(n)ΔH=H(n+1)
(1)
则第n+1帧手的位姿矩阵变换量ΔH为:
ΔH=H-1(n)H(n+1)
(2)
H-1(n)为H(n)的逆矩阵,则第n+1帧零件的位姿矩阵为:
P(n+1)=P(n)H-1(n)H(n+1)
(3)
将式(3)位姿矩阵赋值给零件,便实现了用手控制虚拟环境中的零件位姿。
设修正后的ΔH矩阵在世界坐标系中的表达式为ΔH′,目的是求取ΔH′并将其赋给零件,但该值无法直接获得,需要计算确定ΔH在基体的局部坐标系中相对于各轴的运动分量,并剔除被约束的部分,然后转换回世界坐标系得到修正矩阵。
本文以零件之间发生轴孔约束为例进行说明:
首先计算ΔH对应B中的表达式。设某一物体在世界坐标系中位姿表达为T,则该矩阵在参考系B中的矩阵表达式X为TB-1。根据变换原理,有下式:
XΔHBB=TΔH
TB-1XΔHBB=TΔH
ΔHB=BΔHB-1
(4)
设ΔHB的齐次矩阵表达形式为
(5)
得到ΔHB之后,需要将复合运动的各分量分离出来,再根据约束对被限制量进行剔除。具体计算各运动量如下:
1) 计算ΔH对应基体局部坐标系B的各轴旋转角
设绕x轴的转角,绕y轴转角ψ,绕z轴转角φ。根据文献[14]的结论,可用欧拉角分析得出ΔH对应任意局部坐标系B的各轴旋转角:
(a) 当R31≠±1时
θ1=-arcsin(R31),θ2=π-θ1
(b) 当R31-±1时,φ为任意值,可设为0。
当R31=-1时,
当R31=1时,
2) 计算ΔH对应基体局部坐标系B的坐标轴平移量
计算ΔH对应B的各轴平移量,即计算ΔH的在世界坐标系中的平移向量在局部坐标系中各轴上的投影,这里以B的z轴为例进行推导。根据式(1)可设B的位姿矩阵在z轴向量为:
ZB=(Zx,Zy,Zz)T
设ΔH的平移向量为:
TΔH=(ZxΔH,ZyΔH,ZzΔH)T
向量TΔH在向量ZB上的投影z1为:
z1=|TΔH|cos〈TΔH,ZB〉
即得ΔH对应B坐标系中的z轴平移量。实际上,z1的数值与式(2)中ΔH矩阵中的T3相等,可直接得到。
经过以上计算,已经得到了ΔHB矩阵各运动分量。然后进行修正,轴孔约束两零件可以沿轴线方向移动,也可以绕轴线旋转。在该约束下拥有沿基体轴线移动和绕轴线转动2个自由度,即ΔHB矩阵只保留其沿Z轴方向移动量T3,还有其绕Z轴的旋转量φ,则得到ΔHB′为:
(6)
将式(6)矩阵赋给待装配件,即实现了具有约束效果的伴随移动。而对于不同的约束,只需要根据其约束产生的自由度限制效果,对改变量在约束所限定轴上的特定数值剔除,即可得到新的4阶位姿矩阵ΔHB′。
5.1节中建立了虚拟装配时具有约束的零件位姿修正方法。动态装配中,零件之间的约束是根据约束树中存储的基体件和装配件的约束关系确定的。为达到实时效果,约束树应该随着装配过程的进行而不断更新。而更新条件也不能仅以两两零件装配时约束更新的标准确定。当出现多个零件之间的约束关系时,实现动态装配就变得相当困难。考虑到虽然有多个基体件,但是装配中,约束的产生依然有先后顺序,首先对零件产生约束的是主要基体件,它对零件的自由度产生了限制。之后出现的次要基体件只能对零件剩余的自由度再进一步限制。
如齿轮约束,同一个零件会受到轴及另一个齿轮的影响。本文采取了主次约束分类,自由度归约的方法来处理多零件复杂约束,具体流程如图16所示。
使用这种方式装配,同一个零件会受到多个约束的影响,装配结果更符合实际。
利用该方法进行齿轮装配实验。首先齿轮摆放在地面,调取UI选择装配模式,主动齿轮装配过程如图17所示;被动齿轮的安装过程如图18所示。
图17(a)(b)(c)(d)演示了将齿轮从地面拾取并往第一根齿轮轴装配的过程,可以看到齿轮的位姿随着虚拟手的改变而改变,装配到轴上以后只能沿轴向移动。
图18(c)中右边齿轮要装到轴上,但受到左边齿轮的位置影响,需要调整角度才能进行安装,否则将会受到主动齿轮约束限制,无法继续沿轴向移动。调整了合适角度以后,两个齿轮的齿面不会发生碰撞,齿轮安装在轴上,并受到齿轮轴约束只能沿轴向移动,最终到达装配位置,完成了装配。
本文通过对CAD造型模型的信息提取和零件属性重构,建立了传动零件特征的零件数据结构和模型,开发了属性修改的界面,利用OSG渲染引擎及Cubemap技术构建了高沉浸虚拟装配场景。使用LeapMotion手势捕捉器作为交互装置,采用HUD(Head Up Display)和Billboard技术开发了交互界面,结合基于碰撞检测和特征参数匹配的动态约束识别及约束树构建方法建立了装配约束,确定了多零件装配的约束管理流程。对该方法进行了虚拟环境下齿轮的动态装配实验,实验过程流畅,操作者在环境中有高度沉浸感,该方法具有实时、高效、识别精度高的特点。
本文提出的虚拟环境建模方法、基于装配约束的虚拟装配技术和人机交互技术不仅可以满足高沉浸感体验和认知的需要,而且能够进行结构设计合理性检查,提高产品的装配设计。
参考文献:
[1] 夏平均,陈朋,郎跃东,等.虚拟装配技术的研究综述[J].系统仿真学报,2009,21(8):2267-2272.
[2] 韩勇,王洁,赵杰,等.国外虚拟装配技术研究综述[J].飞航导弹,2012(11):82-87.
[3] 魏巍.虚拟装配关键技术及其仿真应用的研究[D].大连:大连海事大学,2013.
[4] 于海霞,王家骐.虚拟装配技术的研究综述[J].电脑知识与技术,2011,7(18).
[5] BANERJEE A,BANERJEE P.A Behavior Scene Graph for Rule Enforcement in Interactive Virtual Assembly Sequence Planning[J].Computer in Industry,2000,42(2):147-157.
[6] YONG WANG,UMA JAYARAM,SANKARJAYARAM.Physically Based Modeling in Virtual Assembly[C].Proceedings of 2001 ASME Design Engineering Technical Conference.New York:ASME,2001:295-305.
[7] 赵金才,刘书桂.Pro/E零件模型几何信息的自动提取[J].机床与液压,2005(12):118-120.
[8] WU Y M.Dynamic recognition and solution of 3D geometric constraint loops[J].Journal of Computer-Aided Design and Computer Graphics,2000,12(8):624-629.
[9] GAO Xiao-shan,CHOU Shang-ching.Solving geometric constraint systemsII.A symbolic computational approach[J].Computer-Aided Design,1998,30(2):115-122.
[10] 李健,郭连水,王凯等.三维装配约束求解的几何推理法[J].机械设计,2001,18(7):30-32.
[11] 张清华.基于装配特征的传动装置轴系虚拟装配技术研究[D].北京:北京理工大学,2017.
[12] KRAMER G.Using degrees of freedom analysis to solve geometric constraint system[M].Proceedings of the First ACM Symposium on Solid Modeling Foundations and CAD/CAM Applications.New York:ACM Press,1991:371-378.
[13] 姜勇,王波兴,陈立平.三维几何约束求解的自由度归约算法[J].计算机辅助设计与图形学学报,2003,15(9):1128-1133.
[14] SLABAUGH G.Computing Euler angles from a rotation matrix.Technical Report[EB/OL].http://www.gregslabaugh.name/publications,1999.