包文运 胡建垠 黄培德 盛步云 宋 寅
1(大唐环境产业集团股份有限公司特许经营分公司 江苏 南京 210000) 2(武汉理工大学 湖北 武汉 430070) 3(襄阳五二五泵业有限公司 湖北 襄阳 441004)
虚拟现实(Virtual Reality, VR)作为计算机图形学(Computer Graphics, CG)中最为火热的研究领域,目前广泛应用于交互式仿真培训,尤其是在高危险、高技术含量的工程领域,为专业技术人员的实际上岗操作提供逼真的沉浸式虚拟现实环境下的教学培训(如高精密机械设备装配、高压电力装备维修等)。该领域的核心为研究虚拟手与三维模型的自然交互技术,即通过相关体验设备采集手部实时数据,并将其映射到VR环境中所创建的虚拟手模型,使虚拟手位姿与其所交互的三维模型位姿实现实时精确同步,且交互过程须满足基本物理学原理,增强人机交互过程的沉浸感与真实感。目前,针对虚拟手与三维模型的自然交互技术研究大致可分为两类:基于物理学原理的交互方法和基于启发式的交互方法。
基于物理学原理的交互方法的核心思想是基于牛顿动力学的基本定律,以抓取对象是否受力平衡和虚拟手的手指接触面的摩擦来判断能否抓取,其实现原理是利用库伦摩擦力模型分析物体的受力状态。文献[1]通过引入代理手来提供正确的视觉反馈,还用于对虚拟手和三维模型之间的动态交互过程进行仿真。但是该方法的计算复杂度较高,导致系统运行帧率较低。文献[2]研究了一种基于库仑摩擦模型的虚拟手交互方法。该方法模拟许多类型的动作,如推、拉、抓等操作,而不受物体形状或手姿势的限制。但是该方法所采用的库伦模型仅为一种简单的摩擦模型,其仿真效果不够逼真,无法模拟较为复杂的实际工程场景。综上所述,基于物理学原理的交互方法普遍存在库伦摩擦力在虚拟环境下持续性较差、缺乏力反馈等问题,而在虚拟环境下进行物理学原理计算,其计算复杂度较高,导致系统运行帧率下降,降低了用户实际交互体验感。
基于启发式的交互方法,根据被抓取物体的几何形状,对抓取手势进行预定义,并分别制定相应的交互规则,通过判断是否满足特定验证条件来实现交互过程。文献[3]利用物体形状特征和手指抓握的接触关系制定抓取规则,实现适应物体形状的启发式抓取。但是该方法容易导致虚拟手与三维模型产生较为严重的干涉。文献[4]研究了一种虚拟抓握弹簧模型,通过对手指运动进行启发式分析和瞬态增量运动隐喻识别,用于解决虚拟手抓取或释放三维模型时的粘接问题。综上,基于启发式的交互方法虽然具备计算复杂度较低的优势,但是该类方法需要对交互规则进行预定义,导致须针对特定实际工程情形进行分析的问题,普适性较差。同时,该类方法还存在容易产生干涉、人机交互不自然等问题。
鉴于此,本文研究了一种VR环境下基于Leap Motion的三维模型空间位姿自适应调整方法,用于改善目前虚拟手与三维模型的自然交互技术所存在的上述问题,其主要研究内容包括:(1) 提出一种虚拟手交互过程防干涉方法,分别构建了虚拟手几何模型与运动模,并建立虚拟手碰撞检测模型和三维模型碰撞检测模型,通过计算虚拟手与三维模型之间接触点以避免干涉现象;(2) 提出一种三维模型形状自适应的虚拟手自然交互方法,定义抓取副作为稳定抓取的先决条件,并根据抓取的接触点集,求解虚拟手变换零件的位姿矩阵,实现对三维模型空间位姿随虚拟手空间位姿信息的实时自适应调整。
为研究三维模型空间位姿自适应调整方法,需要分析所提出方法的总体流程,如图 1所示。首先,对虚拟手与待抓取三维模型构建碰撞检测模型,在保障仿真可视化效果的前提下,为精确计算虚拟手与三维模型的接触点奠定基础。其次,在抓取交互过程中实时进行干涉检查,并计算接触点,实时判断该帧是否满足稳定抓取条件。若不满足,则在下一帧继续执行干涉检查;若满足,则计算该帧被抓取三维模型的平移矩阵递增量与旋转矩阵递增量,并合成位姿矩阵递增量,实时更新三维模型的位姿矩阵,达到空间位姿自适应调整的目的。
图1 三维模型空间位姿自适应调整方法总体流程
Leap Motion是一款由Leap公司研发的用于识别手部几何数据的体感控制器,其基于双目视觉技术采集手部数据,并在虚拟三维空间中构建虚拟手,采集精度可达到百分之一毫米[5]。
本研究中,基于Leap Motion所采集手部骨骼与关节数据,在Unity3D环境中构建虚拟手三维模型。当虚拟手接触三维模型后,降低其透明度,以此作为虚拟手交互的视觉反馈。如图2所示分别为虚拟手三角网格模型,以及采用半透明纹理渲染的虚拟手效果。
图2 基于Leap Motion所构建虚拟手三维模型效果
为精确计算虚拟手与三维模型碰撞接触时的接触点信息,以实现虚拟手与三维模型之间的空间位姿同步,需要分别对虚拟手与三维模型构建相应的碰撞检测模型。
1.2.1虚拟手碰撞检测模型
为避免虚拟手与三维模型出现干涉,确保接触与抓取的视觉真实感,构建复合虚拟手碰撞检测模型,包括虚拟手轮廓模型和虚拟手刚体模型。虚拟手轮廓模型即为能够真实反映手部轮廓特征的三角网格模型;虚拟手刚体模型由表征每根手指指骨与关节的三个胶囊体,以及表征手掌的长方体共同组成,用于检测虚拟手与虚拟物体之间的碰撞。根据虚拟手与三维模型之间的交互情形,分为两类情况讨论。
(1) 当虚拟手与被抓取三维模型无任何接触时,轮廓模型与刚体模型重合,由Leap Motion所采集手部数据驱动其自由运动,轮廓模型呈半透明状态,如图 3 (a)所示。(2) 当虚拟手与被抓取三维模型存在接触时,轮廓模型与被抓取三维模型位姿保持同步,且呈不透明状态,而刚体模型继续由Leap Motion所采集手部数据驱动,实时更新位姿信息,如图 3 (b)所示。当刚体模型中表征手指的胶囊体脱离被抓取三维模型时,表示该手指轮廓的部分实体模型也会随之脱离被抓取三维模型,如图 3 (c)所示。
图3 复合虚拟手碰撞检测模型
1.2.2三维模型碰撞检测模型
为了方便计算虚拟手和被抓取三维模型的碰撞接触点,并且使得所构建三维模型碰撞检测模型的轮廓接近其实际轮廓,尤其针对具备凹区域的三维模型,采用层级近似凸分解技术(HACD)对被抓取三维模型进行凸分解,进而对所分解凸块建立有向包围盒(OBB),实现碰撞检测模型的构建工作。设OBB包围的凸块为s,第i个三角面片的三个顶点矢量分别为pi、qi、ri,s中共含n块三角面片,则OBB的几何中心空间位置u可表示为[6]:
(1)
构建协方差矩阵[6],其元素Cjk计算为:
1≤j,k≤3
(2)
图4 被抓取三维模型碰撞检测模型构建效果
1.3.1接触点计算
如图5所示,为了防止操作过程中虚拟手与被抓取三维模型产生干涉,本文采用Unity3D内置的基于包围盒的碰撞检测方法来计算虚拟手与被抓取三维模型接触点。
图5 虚拟手与被抓取三维模型接触点估计效果
其具体步骤如下:
Step1定义接触偏移量λ,其值较小,作为在虚拟手碰撞三维模型之前触发碰撞事件的阈值,并且同时作为被抓取三维模型实际包围盒的外偏移边界,图5(a)所示虚线范围为由λ定义的被抓取三维模型实际包围盒。
Step2由Unity3D实时监控虚拟手是否与被抓取三维模型实际包围盒发生碰撞,并检测其碰撞点pi,图5(a)所示手指与虚线框的接触点即为pi。
Step3自pi出发,沿pi法向量的反方向发射射线Rayi,其与被抓取三维模型实际包围盒相交于点ci,将ci作为精确的接触点,并依据其坐标值计算被抓取三维模型的空间位姿信息。
如图5(b)所示为接触点计算的实际可视化效果,其中λ=3 mm,共计算出虚拟手与待抓取三维模型的14个接触点,其中射线表示接触点的法线方向。
1.3.2基于接触点的干涉检查
鉴于在Unity3D所构建三维场景中,用户实际手与虚拟手呈现单向耦合关系,即实际手数据单向驱动虚拟手位姿,进而容易导致虚拟手与被抓取三维模型产生干涉现象,严重影响人机交互过程的真实感与沉浸感。因此,本文将1.2.1节所构建虚拟手碰撞检测模型中的刚体模型完全基于Leap Motion所采集实际手数据驱动,而当虚拟手与被抓取三维模型发生碰撞时,使轮廓模型与被抓取三维模型保持碰撞瞬间的位姿同步,其具体流程详见图6。
图6 基于接触点的干涉检查流程
当检测到虚拟手指骨与三维模型发生碰撞时,以延迟时间t剔除驱动虚拟手与被抓取三维模型表面接触对应的手指,并使虚拟手轮廓模型从半透明变成不透明,从视觉上避免干涉现象。否则,虚拟手位姿继续由Leap Motion所采集数据驱动实时更新。t的计算为:
t=spc/vh
(3)
式中:vh表示碰撞点pi的瞬时速率;spc为碰撞点pi与其所对应接触点ci的欧氏距离。
结合基于启发式和基于物理抓取两种方法的优缺点,并参考文献[7],本文定义抓取副为三维模型是否被稳定抓取的判断条件。
定义1 抓取副假设虚拟手与被抓取三维模型的任意两个接触点为ci、cj,则这两个接触点构成一个稳定的抓取副g(ci,cj),其应满足:
(4)
式中:Vji为接触点ci到cj的向量;ni为接触点ci处的法向量;∠(ni,Vji)为向量ni与向量Vji之间的夹角;α为摩擦锥角度。图7展示了三个接触点c1、c2、c3形成两个稳定抓取副g(c1,c2)与g(c1,c3)的情况。
图7 稳定抓取副形成示意图
三维模型被抓取时的位姿信息可以通过求解虚拟手变换零件的位姿矩阵P得到:
(5)
为了表示任意时刻三维模型的位姿信息,则当抓取条件判断成功时,假设第k帧时,三维模型的位姿矩阵为P(k),其所有抓取副和组成抓取副的点集分别为G和Q(k),而第k+1帧时三维模型的位姿矩阵为P(k+1),其抓取副点集为Q(k+1),则G、Q(k)、P(k+1)分别表示为:
(6)
式中,gi为第i对抓取副;pi为第i个碰撞点;n表示共有n对抓取副;ΔT为抓取副点集中心m的平移矩阵;ΔR为抓取副点集从第k帧到第k+1帧的旋转矩阵,ΔQ为第k帧到第k+1帧抓取副点集的位姿矩阵变化量,可表示为:
(7)
由式(6)可知当虚拟手抓取三维模型时,求解ΔQ的值即可得到任意时刻三维模型的位姿矩阵,其中ΔQ由平移矩阵ΔT和旋转矩阵ΔR决定。
对于ΔQ的求解存在两种情况:一是虚拟手碰撞检测模型与被抓取三维模型表面接触;二是虚拟手碰撞检测模型与被抓取三维模型发生干涉。如图8所示。
(1) 虚拟手碰撞检测模型停留在三维模型表面。虚拟手碰撞检测模型在三维模型表面,和现实中抓取操作物体变换的接触点一致,因此可根据接触点的坐标信息计算位姿矩阵。
(2) 虚拟手碰撞检测模型与三维模型发生干涉。人手与虚拟手的映射是单向耦合关系,在抓取移动过程中,由于人手实际上没有抓着一个物体,人手可能会无意识的伸屈手指,虚拟手碰撞检测模型随即会与三维模型发生干涉。随着干涉程度的加深,操作变换的精度也会越低,考虑这种情况是为了增加系统的容错性。
引进ΔQ的求解存在两种情况,则抓取变换零件的位姿矩阵求解步骤如下:
Step1平移矩阵ΔT求解。虚拟手在对零件平移和旋转时,获取抓取副G后,位移矩阵ΔT的求解为:
(8)
式中:Δm表示抓取副点集中心m的位移量;Δt为第k帧到第k+1帧的时间差。
Step2如果虚拟手碰撞检测模停留在被抓取三维模型,则跳转至Step3。如果虚拟手碰撞检测模穿透到虚拟物体内,则跳转Step4。
Step3虚拟手碰撞检测模停留在三维模型表面时,旋转矩阵ΔR的求解步骤为,先计算抓取副点集旋转变化的四元数Δq,最后在将Δq换算为旋转矩阵ΔR。而Δq的计算与抓取副G成对数量有关,可分为n=1和n>1两种情况。
(1) 当n=1时,即零件上只有一对抓取副,Δq等于抓取副gi包含点pi、pj组成的线段Lij的姿态变化Δqi。此时Δq表示为:
Δq=ΔqiΔqi=qi(k)-1qi(k+1)
(9)
式中:qi(k)为第k帧时线段Lij的四元数;qi(k+1)为第帧时线段Lij的四元数。
此外,当线段Lij围绕自身旋转时,式(9)中的Δqi将不会产生任何变化,导致被抓取三维模型旋转信息不变。此时Δq等于线段Lij绕自身旋转的四元数Δqi’。
(2) 当n>1时,Δq由所有抓取副gi组成线段Lij的姿态变化Δqi共同决定,且每对抓取副gi对Δq的贡献存在差异。为每对抓取副gi定义一个权重系数wi:
(10)
式中:Δq等于每对抓取副gi组成线段Lij的姿态变化Δqi在权重wi下的四元数的平均值qmean。利用四元数平均值算法[8]计算qmean:
(11)
式中:M是根据四元数Δqi和其对应的权值wi构造的四阶矩阵,其最大特征值对应的单位特征向量就是所求的加权平均值qmean。
Step4虚拟手碰撞检测模型与被抓取三维模型发生干涉,此时旋转矩阵ΔR可根据Kabsch算法[9]来计算:
(12)
Step5ΔQ的求解。如果此时抓取副G判断有效,则由式(12)计算三维模型的旋转矩阵。否则更新抓取副G后,重新计算ΔR与ΔT,再次求得ΔQ。
Step6三维模型位姿调整后的位姿矩阵为:
P(k+1)=P(k)ΔQ
为验证本文方法的有效性,使用Unity3D构建试验环境进行实例验证。使用Leap Motion控制虚拟手模型,使用HTC VIVE来查看三维场景。
与基于手势识别建立不同抓取手势相比,本文抓取方法不预定义抓取手势,可以以比较自然的方式抓取三维模型。
图9展示了使用所提方法对不同机械领域的三维模型进行抓取效果,表明所提方法可以自然抓取各种类型的机械零件三维模型。
图9 抓取不同机械领域三维模型的方式
机械零件三维模型间的虚拟装配,对距离与角度的阈值设定有很高的要求,阈值设置过高,会增加装配约束误识别的概率并且装配约束识别时零件的位姿会突变,影响真实感。因此,为了评估本文抓取方法对零件操作的精确性,本文设计了一个操作误差测量实验,实验场景如图 10所示。
图10 操作误差测量实验场景
每一次实验中,在网格中区域内随机生成一个目标块B (图 10中右侧的矮方块),要求操作者将一个物体A (图10中左侧的高方块)移动到该目标上,一旦完成此操作,则重新随机更新该目标位置,操作者继续重复以上步骤,整个实验过程如图11所示。
图11 操作实验的过程
在图11所示的测试过程中,设第i次目标B的位置为TBi=(xBi,yBi,zBi),虚拟手将物体A放置到目标位置B上时,位置为TAi(xAi,yAi,zAi),物体A绕Z轴的旋转角度为αi。实验的次数为n,记虚拟手抓取变换物体的位置误差μ、角度误差η为:
(13)
本文共记录了150次实验的操作误差统计数据,详见表 1。
表1 操作误差统计结果
图12的数据表明误差距离和误差角度均呈正态分布的趋势,且位置误差小于10 mm的误差概率为93.3%,角度误差小于10°的概率为96%,表示所提方法可以对物体进行精确的操作变换。
图12 操作实验的结果
虚拟现实交互的实时性是体现系统性能、反映人机交互体验感的一个重要指标。为了验证本文方法的物理计算的性能,在如下硬件条件下进行测试:CPU-4 GHz Intel Corei 7-4790K;RAM-16 GB;GPU- NVIDIA GTX 1050。分别对2节指骨和12节指骨的接触计算效率进行测试,测试结果的物理帧速率分析如图13所示。
图13 物理计算的性能分析
测试结果为:渲染2节指骨只需 0.25 ms,渲染12节指骨只需0.69 ms。结果表明所提方法能够在VR环境下实现虚拟手交互过程的三维实时渲染,其计算效率满足VR环境下的性能要求。
针对目前基于Leap Motion的人机交互研究中存在的虚拟手与三维模型相互干涉、三维模型与虚拟手空间位姿同步率低的问题,提出一种基于Leap Motion的三维模型空间位姿自适应调整方法,实现了对VR环境下三维模型抓取、推、抬等交互操作的精确模拟。与其他基于手势的交互方法相比,本文方法在提升人机交互过程沉浸感方面具有较大优势,适用于机械零件的装配过程仿真、装配操作培训及虚拟产品维修,为实现在制造过程仿真领域的应用奠定了基础。