陈学文,姜国华,刘玉庆
(中国航天员科研训练中心人因工程重点实验室,北京100094)
虚拟手交互操作是虚拟现实系统的一个重要方面。虚拟手在虚拟环境中运动由交互设备控制,目前的交互设备有三维鼠标、操作手柄、数据手套、力反馈数据装置、手势识别等设备。无论选用什么交互设备,在交互操作仿真时,都需要实现虚拟手对虚拟物体的抓取操作仿真。蔡娴娟、李志华、朱书敬等对稳定抓取和虚拟手的逼真表达进行了研究[1⁃3];胡晨等对多基本几何体组成的物体抓持规则进行了研究[4];邸伟等 对虚拟物体抓持力觉进行了研究[5];赵美荣等采用Kinect实现用户手部动作的获取并对虚拟手交互进行了研究[6]。这些研究主要集中在虚拟手抓取操作仿真上,对抓取后虚拟物体的随动没展开研究,默认是虚拟物体随着手一起运动。实际情况是,只有无约束自由移动类物体能够完全随手一起运动;对于有约束的物体,如沿固定方向移动类物体(抽屉等)、绕轴转动类物体(门等)[7],虚拟手抓住虚拟物体后的运动需要考虑物体的运动约束,在移动过程中保证虚拟手抓取时的位置不变,把现实用户手持虚拟现实交互设备无约束的运动映射到有约束的虚拟手上,同时实现虚拟物体按照自身运动自由度跟随虚拟手运动。
为了实现虚拟手交互操作过程仿真,把计算和图形显示分离,保证交互操作过程视觉连续,陈学文等提出了虚拟手设计两层模型:“仿真计算虚拟手”和“图形显示虚拟手”[8],如图1所示。在交互操作过程中当虚拟手没有抓取物体或抓取的是自由移动的物体时,“图形显示虚拟手”的位置和姿态与“仿真计算虚拟手”的位置和姿态完全一致,两者重合。当操作有约束沿固定方向移动类物体或绕固定轴转动类物体时,“图形显示虚拟手”和“仿真计算虚拟手”的位置和姿态可能分离。原因是“仿真计算虚拟手”由用户通过交互设备输入,而用户无相应实物运动约束,其相对于被抓持物体的运动关系很难保持固定不变,在操作仿真系统中如果不考虑这个因素,虚拟手与虚拟物体的接触状态和相互位置关系频繁变化,很难保证操作的连续性,同时导致操作难度大。因此需要开发相应的算法,根据“仿真计算虚拟手”的位置和姿态,针对不同约束类型的物体,计算“图形显示虚拟手”、被操作物体的位置和姿态。自由移动的物体和沿固定方向移动类物体计算方法参见文献[7],本文对有约束的绕轴转动类物体计算方法补充完善,并提出针对三类物体的统一交互操作仿真流程。
图1 虚拟手两层模型Fig.1 Two level model of virtual hand
虚拟手抓取虚拟物体后,虚拟物体随着虚拟手的运动就是随动,随动包括“仿真计算虚拟手”跟随交互设备的运动、“图形显示虚拟手”跟随“仿真计算虚拟手”运动及被操作对象的运动。仿真计算虚拟手跟随交互设备运动直接由交互设备输入的信息映射即可。图形显示虚拟手跟随仿真计算虚拟手运动和被操作对象运动需要考虑抓取状态、被操作对象的运动自由度,设计合适的算法。在三类物体中,无约束自由移动类物体、有约束沿固定方向移动类物体的随动算法在文献[7]中已描述清楚,本文不再论述;有约束绕轴转动类物体随动较为复杂,下面以空间站舱门的开启和关闭为例给出完善的随动算法。交互设备、仿真计算虚拟手、图形显示虚拟手和被操作设备的随动关系,如图2所示。
图2 随动关系Fig.2 Movement drove by interaction device
在虚拟手抓住舱门实施开舱门的过程中,虚拟手要保持与舱门接触位置不变,同时舱门随着虚拟手绕舱门轴转动。但是,在实际操作过程中,用户在无实物运动约束的情况下,手相对交互设备的运动半径与舱门把手绕舱门门轴的半径不一定相同,如果直接以仿真计算虚拟手的位置来设置图形显示虚拟手的位置,进而设置舱门开启角度,容易造成舱门、图形显示虚拟手相互错位,显然不合适。本文通过转动角度的方法来计算“图形显示虚拟手”位置。实际操作过程中,无论用户在开启舱门过程中手的转动半径如何,用户手部相对上一次的转动角度是一定的,手部转动多少角度,相应舱门就转多少角度。在保持虚拟手与舱门把手的抓取状态和接触位置不变的情况下,以该角度计算“图形显示虚拟手”的位置就很容易。
如图3所示,在计算“图形显示虚拟手”的位置时,记录首次抓住舱门时“仿真计算虚拟手”的位置向量OP0(虚拟手的位置与舱门轴点位置之间的向量差),并计算该向量OP0相对舱门关闭时的角度α(α角度计算方法参考文献[7]),在之后转动过程中,根据仿真计算虚拟手的位置向量OP计算该向量OP相对舱门关闭时的角度β(β角度计算方法参考文献[7])和本次转动的角度γ=β-α,根据角度γ和首次抓住舱门位置向量OP0计算当前抓取舱门的位置OP1,该位置为图形显示虚拟手的位置。
图3 以转动角度计算虚拟手的位置Fig.3 Calculating position of visual display virtual hand by rotated angle of simulated virtual hand
图4 图形显示虚拟手位置和姿态计算流程Fig.4 Position and posture calculation of visual hand
具体过程如图4所示。在第1)步中把交互设备输入的位置数据直接映射到“仿真计算虚拟手”的位置上,即虚拟手的初始位置加上交互设备输入的位置;在第7)步中通过把OP0绕轴点旋转γ角度计算得到“图形显示虚拟手”当前相对轴点位置向量OP1,即OP1=OP0×Rot(γ);在第8)步中由舱门轴点的位置vecDPI加上“图形显示虚拟手”当前相对轴点位置OP1,计算得到“图形显示虚拟手”的位置;把虚拟手刚抓取舱门时的姿态(记为quatHFG)绕轴旋转γ角度计算得到“图形显示虚拟手”的姿态,即:quatHFG × Rot(γ)。
被操作对象运动计算过程与虚拟手的位置、姿态映射相似,但是在计算角度α、β时有区别。计算虚拟手时采用的是虚拟手整体的位置(即根节点手掌的位置)相对舱门轴点向量来计算角度α、β;在计算舱门转动角度时,如果还选择根节点手掌的位置相对舱门轴点向量计算角度α、β,有可能导致舱门转动角度过大或过小,不能贴合虚拟手转动。在计算舱门转动角度时,选择与舱门把手接触的手指为计算依据,接触手指位置与轴点形成的向量(本文选择大拇指的指尖)来计算角度α、β。原因是在抓住舱门操作过程中,接触手指与舱门相对关系较固定,而虚拟手的其他部位、如手掌等,在虚拟手抓住舱门把手时可以相对舱门做相对转动,相互关系不固定,不能代表舱门实际转动的角度。计算舱门旋转角度γ=β-α,并把舱门旋转该角度即可。
把操作自由类物体(例如灭火器)、沿固定方向移动类物体(如抽屉)和绕固定轴转动类物体(舱门)的交互操作仿真流程统一起来,形成虚拟手操作物体仿真流程,如图5所示。
图5 虚拟手操作仿真流程Fig.5 Simulation process of virtual hand operation
其中,在第(1)步中,bGraspOld为上一帧抓取标志,bGraspCur为当前帧抓取标志记)。在第(2)大步中,先计算“仿真计算虚拟手”整体位置和姿态、各手指节段姿态;根据当前的抓取标志和物体移动自由度类型,由“仿真计算虚拟手”的位置和姿态计算“图形显示虚拟手”的位置和姿态;对于绕固定轴转动类物体计算方法参见本文2.1节描述,对于其他两类物体的计算方法参见文献[7]3.4(1)和(2)的描述;对于其他操作自由度类型的物体,可以开发相应的算法放到该流程相应位置处,具有扩展性。在第(4)大步中抓取条件和松开条件对于虚拟手抓取仿真很重要,条件不合适,容易导致误抓或抓不到,使得操作很费劲,本文在文献[2]和[4]的基础上通过反复试验,确定如下抓取条件和松开条件:
抓取条件:大拇指的中段或指尖与被操作物体接触,同时食指或中指任意一个节段与被操作物体接触,认为虚拟手抓取虚拟物体;
松开条件:松开条件比较多,只要满足其中一条就表示虚拟手不再抓住物体:①大拇指的中段或指尖不与被操作物体接触;②食指和中指没有一个节段与被操作物体接触;③手指当前接触角度大于刚接触物体时的接触角度(手指向松开物体的方向张开)。
在第(5)步中,根据上一帧和本帧的抓取状态bGraspOld和bGraspCur不同组合,分别进行处理计算。如果bGraspOld==false和bGraspCur==true时,表示最近首次抓住物体,记录接触信息。如果bGraspOld==true和bGraspCur==true,表示持续抓住物体,根据物体移动自由度类型按照相应的算法计算被操作物体随着虚拟手运动到新位置的位置和姿态;对于绕固定轴转动类物体计算方法见本文2.2节描述;对于其他两类物体计算方法见参考文献[7]3.4(1)、(2)的描述;如果有其他操作自由度类型的物体,还可以开发相应的算法放到该流程相应位置处,具有扩展性。如果bGraspOld==true和bGraspCur==false时,表示松开物体,被操作物体不随着虚拟手移动。如果bGraspOld==false和bGraspCur==false,不做任何处理。
使用中国航天员科研训练中心与东南大学研制的手臂力觉反馈装置作为交互设备[9],如图6所示。该设备能够实现用户手部整体3个自由度的平动、3个自由度的转动、3个手指的转动,每个自由度都有力觉反馈,运动范围为0.4 m×0.4 m×0.5 m。在Visual Studio开发环境下采用C++语言和OGRE图形引擎编写程序实现虚拟手的图形表达、虚拟手抓取操作仿真和虚拟手交互操作统一流程,并应用于空间站舱门(有约束绕轴转动类物体)的开启、关闭和灭火器(无约束自由移动类物体)的交互操作仿真。
图6 手臂力觉反馈装置Fig.6 Arm and hand force feedback device
经多人次测试,在抓住或松开舱门或灭火器把手时,抓持判断准确,状态切换连续自然,无跳跃感,用户抓取或松开动作与现实世界操作动作相似。抓住灭火器后,灭火器随着用户无约束地任意移动。抓住舱门把手后,用户做开启舱门或关闭舱门的动作,虚拟手和舱门按照随动算法,跟随用户动作绕舱门转轴转动,在这过程中,虚拟手与舱门把手直接的接触位置不变,虚拟手不断根据用户的动作调整姿态。整个操作过程,用户的动作输入和虚拟环境中的虚拟手和灭火器或舱门的运动视觉反馈一致,操作实时无延迟感,动作自然,同时在操作过程中手指有抓握力反馈。部分操作结果截图如图7和图8所示。
在虚拟手抓取舱门和灭火器移动过程中记录图像刷新率,开舱门过程中刷新率范围为[50,33],操作灭火器过程中刷新率范围[50,41],从动作输入到图像刷新输出无延迟感,达到实时交互操作仿真。
图7 开舱门操作仿真Fig.7 Simulation of hatch opening operation
图8 灭火器操作仿真Fig.8 Simulation of fire extinguisher operation
从应用实例可以看出,本文提出的操作仿真流程能处理不同约束类型物体的交互操作仿真;随动算法保证了在交互操作过程中手部动作与虚拟手及虚拟物体运动视觉反馈协调一致,操作结果显示,本文的随动算法有效;整个交互操作实时无延迟感,交互操作动作自然,抓持和随动过程均正常顺利完成,处理流程及抓持算法合理。
1)给出了交互操作仿真过程中绕轴转动类物体的随动算法,扩展了文献[7]中随动算法。该算法实现了虚拟手操作绕轴转动类物体过程中抓取位置不变,虚拟手和被操作物体能够跟随用户动作协调运动,保证了交互操作过程中手部动作与虚拟手及虚拟物体运动视觉反馈协调一致。
2)给出了支持三类约束类型物体的虚拟手操作仿真统一处理流程,经无约束自由移动类物体和绕轴转动类物体实际应用,该仿真流程合理。
3)通过空间站舱门和灭火器的操作仿真应用,证明了本文提出的仿真方法有效,为后续航天员虚拟现实训练提供了一种基础算法和理论基础。
[1] 蔡娴娟,程成,Alhazmi Marwah,等.虚拟制造环境中虚拟手的行为构造[J].计算机辅助设计与图形学学报,2015, 27(3): 499⁃507.
Cai X J, Cheng C, Alhazmi M, et al.Research on behavior simulation of virtual hand in virtual manufacturing environ⁃ment[ J].Journal of Computer⁃Aided Design &Computer Graphics, 2015, 27(3): 499⁃507.(in Chinese)
[2] 李志华,钟毅芳.虚拟手模型及其抓取技术[J].小型微型计算机系统, 2003, 24(6):1071⁃1074.
Li Z H,Zhong Y F.A virtual hand model and its rule for grasping[ J].Mini⁃Micro Systems, 2003, 24 (6): 1071⁃1074.(in Chinese)
[3] 朱书敬.具有运动真实感与抓取稳定性的虚拟手仿真技术研究[D].杭州:浙江大学,2012.
Zhu S J.Virtual Hand Simulation Research With Realistic Motion and Robust Grasping[D].Hangzhou: Zhejiang Uni⁃versity, 2012.(in Chinese)
[4] 胡晨,张学聃,马慧敏.适应物体形状的虚拟手抓取[J].中国图象图形学报, 2017,22(5): 663⁃670.
Hu C, Zhang X D, Ma H M.Shape⁃adaptive virtual hand⁃grasping method[J].Journal of Image and Graphics, 2017,22(5): 663⁃670.(in Chinese)
[5] 邸伟.虚拟手交互抓持力仿真研究[D].杭州:浙江理工大学,2015.
Di W.The Simulation Research of Virtual Hand Grasping Force[D].Hangzhou: Zhejiang Sci⁃Tech University, 2015.(in Chinese)
[6] 赵美荣.基于虚拟手交互技术的研究[D].太原:中北大学,2016.
Zhao M R.Study on the Interaction Technology Based on Vir⁃tual Hand[D].Taiyuan: North University of China,2016.(in Chinese)
[7] Chen X W,Liu Y Q,An M,et al.Astronaut operating simu⁃lation in space station based on virtual reality[C] //64th In⁃ternational Astronautical Congress, Beijing, 2013: 4666⁃4677.
[8] 陈学文,刘玉庆,朱秀庆,等.基于手指运动方向的动态碰撞检测算法及实现[J].系统仿真学报,2011, 23(12):2676⁃2681.
Chen X W,Liu Y Q,Zhu X Q,et al.Dynamic collision de⁃tection algorithm based on direction of fingers grasping virtual object and implementation[J].Journal of System Simulation,2011, 23(12): 2676⁃2681.(in Chinese)
[9] Qin H H,Song A G,Liu Y Q,et al.Design and calibration of a new 6 DOF haptic device[J].Sensors, 2015, 15(12):31293⁃31313.