面向虚拟维修的多点碰撞虚拟手研究
2019-07-17姚寿文胡子然张家豪刘智濛常富祥
姚寿文,胡子然,王 瑀,张家豪,刘智濛,丁 佳,常富祥
(北京理工大学 机械与车辆学院, 北京 100081)
1 背景
在传统的装备维修工作中,维修工具、维修场地、维修器材以及维修人员等都需要大量的成本。随着装备的复杂程度及精密程度的逐步提高,维修难度也随之加大。为保证高效的维修效率,对维修人员技术水平的要求也越来越高。虚拟维修(virtual maintenance,VM)是虚拟现实技术应用在维修性工程中的新兴技术手段[1],不仅可以保证维修的真实感,还能极大地节约成本,使维修人员在虚拟的环境中更好地进行维修训练,并提升操作技能[2]。
随着虚拟现实技术[3]的发展,出现了数据手套[4]、Kinect 3D体感摄影机[5]等交互设备,可以跟踪并采集人的肢体数据,提高交互的逼真程度。其中,手是人体最灵活的器官,在装备维修中,离不开单手以及双手对不同种类零部件的拆卸安装[6],以及用手抓取工具进行维修操作。将虚拟手引入虚拟维修中进行维修拆装[7],可以使维修人员高效地熟悉装备维修流程,更好地认知维修操作中的具体动作,完成复杂的维修操作[8]。其中,准确获取人手信息以及提升手与零件的交互性能是目前的研究难点。诸如数据手套并不能直接获取人手的姿态参数,Kinect虽能对人肢体进行跟踪,但体感交互性能较差。美国 LEAP 公司研发的 Leap Motion 体感控制器为解决该问题提供了可能。Leap Motion体感控制器可以专门捕获手部运动从而直接获取人手的姿态参数[9]。
快速而精确的碰撞检测[10]对提升虚拟维修的沉浸感[11]和交互的逼真感[12]起着至关重要的作用。虚拟环境中的碰撞检测问题有着较长的研究历史,目前已有很多较成熟的碰撞检测算法,例如基于包围盒的碰撞检测算法、基于距离计算的碰撞检测算法、基于图像处理的碰撞检测算法[13]、基于几何约束和轴向包围盒的方法[14]。这些碰撞检测算法多是基于层次包围盒法[15],适用于刚性物体间的碰撞[16],没有对手进行几何分割,无法根据掌骨、指骨的物理特点对虚拟手与零件和工具的碰撞检测做有针对性的研究。
在装备(例如军用装甲车辆[17]综合传动装置)维修中,存在零部件数量繁多、型号规格类似、空间布局紧凑、零件特征复杂等情况,在实际维修过程中需要采用不同的手势对不同的零件和工具进行操作。因此,在虚拟维修中,需要虚拟手采取不同的手势拾取不同的零件。而目前虚拟手[18]与零件的交互手势[19]多为虚拟手抓取规则[20]方面的研究,如基于点接触平面的法矢的抓取规则、基于有效阈值角度的抓取规则,以及这些规则的变形[21]。这些抓取规则使虚拟手的抓取动作过于单一,不能结合手掌实现对零件的抓握,也不能实现双手协同操作搬动较大零件。在利用骨骼动画技术驱动虚拟手运动[22]时,由于虚拟手的手掌和手指是刚体模型,无法实现虚拟手与模型的紧密贴合而抓稳零件,更不能通过碰撞检测技术提升维修操作的沉浸感[23]。这些都造成虚拟手不够灵巧且手势单一,虚拟维修操作不够真实稳定。为了完善虚拟手功能,使虚拟手在虚拟维修操作中更加贴近实际情况,需要研究一种适应虚拟维修的虚拟手模型的新方法,并运用此方法实现虚拟手拾取零部件和工具进行虚拟维修操作。
本文以Leap Motion获取的手部数据为基础,在对虚拟维修中的手势分类的基础上,建立了多种虚拟手型模型,基于凸体最短距离研究了虚拟手与被抓对象的多点碰撞检测方法。在Unity3D平台中开发了相应模块,以某综合传动装置为维修对象进行了零件拾取实验,结果表明:该虚拟手可以更加真实地在虚拟环境中拾取零件,丰富了虚拟维修的人机交互性能,满足了虚拟维修中对虚拟手的需求。
2 虚拟手建模
人手是一个灵活而复杂的多肢节系统,由手掌、手腕和手指组成。手骨共有27块,包括8块腕骨、5块掌骨和14块指骨。骨之间由不同的关节连接,关节具有移动自由度或转动自由度,可以做屈伸、收展或旋转运动。结合人手实际的维修操作过程,对拾取零件或工具的动作进行分解,分析了虚拟手建模、碰撞检测、拾取零件或工具所需的手部数据。本文采用Leap Motion设备提取人手数据进行建模,具体数据如下:① 手掌坐标(palm position)数据:手掌中心到Leap设备原点的距离;② 手掌法线方向(palm normal)数据:与手掌所形成的平面的垂直向量,其方向指向手掌内侧;③ 手掌宽度(palm width)数据:手掌的宽度;④ 手掌掌骨位置坐标(palm bone position)数据:手掌掌骨到Leap设备原点的距离;⑤ 手掌方向(palm direction)数据:手掌中心指向手指的向量;⑥ 手指尖端坐标(tip position)数据:手指尖端的位置;⑦ 手指尖端长度(bone length)数据:手指尖端骨头的可视长度;⑧ 手指尖端宽度(bone width)数据:手指尖端骨头的平均宽度;⑨ 手指尖端方向(bone direction)数据:一个方向与指尖指向相同的单位向量。
2.1 适应虚拟维修的手势分类
在装备维修中,维修人员的维修方式一般分为两类:① 徒手维修,包括单手操作零件和双手协同操作零件;② 使用工具辅助维修。实际维修操作中,根据零件或工具(以下简称被抓对象)的几何和质量特征的不同,维修人员采用不同的手势抓取物体:① 捏手势:大拇指和食指与零件接触进行捏取;② 抓手势:大拇指、食指、中指与零件接触抓起零件;③ 双手搬手势:左右手协同操作将零件搬起;④ 握手势:手指与手掌协同操作拾取零件。虚拟维修手势分类如图1所示。
图1 虚拟维修手势分类
2.2 虚拟手型模型
为使虚拟手的维修动作与人手的维修动作匹配,需将人手关键点姿态数据实时传递给虚拟手模型,实现虚拟手与人手关键点姿态的一一对应,驱动虚拟手模型进行相应的维修动作,实现虚拟维修动作与人手维修动作的实时同步。为使虚拟手更加真实地拾取物体,避免穿透,根据虚拟维修手势分类,本文建立了4种虚拟手型模型。
|L1-Lb|≤ε
(1)
图2 捏手势(点线模型)
|L2-Lb|≤ε
(2)
图3 抓手势(点面模型)
|L3-Lb|≤ε
(3)
图4 双手搬手势(点体模型)
4) 握手势(球模型)
采用握手势拾取零件,此时,手掌的一部分与零件贴合,可以近似认为手型近似球的一部分,手型半径与零件径向距离的一半相等,中心坐标在零件或工具轴线上,且平行于手掌的方向与零件或工具轴线方向平行。基于大拇指指尖位置坐标T1、食指指尖位置坐标T2、中指指尖位置坐标T3、无名指指尖位置坐标T4以及手掌中心坐标P的数据,建立过指尖和掌心的虚拟手型球模型,如图5所示。该球模型的数据结构为球心O和半径r。图5中零件(用线框表示)的径向距离为Lb,则虚拟手与零件接触需满足r与Lb的一半之差的绝对值小于等于ε,即
(4)
图5 握手势(球模型)
2.3 虚拟手碰撞检测
碰撞检测是对两个物体的位置关系进行计算,判断它们在空间上是否存在交集,避免虚拟手和虚拟零件穿透。在二维空间中,由于物体都处于同一平面,碰撞检测难度较低。在三维空间,多数进行碰撞检测的物体的几何形状较为复杂,若直接进行碰撞检测,会产生较大的计算量,大大降低了效率。包围盒方法[23]用简单凸体(即包围盒)代替复杂的被检测物体,虽然无法达到直接对被检测物体进行碰撞检测时的精确,但大大降低了计算量,提高了效率,因此是目前主要的研究方法。
包围盒决定碰撞发生时的边界条件。根据手指和手掌的几何特点,以手掌坐标数据、手掌方向数据、手掌宽度数据以及手掌掌骨位置坐标数据为基础,建立包含整个手掌模型且体积最小的AABB包围盒,并根据手指模型的轮廓特征建立胶囊包围盒。根据被抓对象的几何特征的不同,本文构建了AABB包围盒和胶囊包围盒。
虚拟手与被抓对象的碰撞检测可视为包围盒之间的碰撞。对于捏、抓手势以及双手搬手势,仅有手指与被抓对象的接触碰撞,即手指胶囊包围盒与被抓对象包围盒的碰撞。对于握手势,手指和手掌都与被抓对象进行接触碰撞,即手掌包围盒与手指胶囊包围盒同时与被抓对象包围盒的碰撞。本文中虚拟手与被抓对象的碰撞检测算法采用实时计算手掌包围盒与被抓对象包围盒之间的最短距离,或对手指包围盒与被抓对象包围盒之间的最短距离进行检测。基于此,碰撞检测可以分解为以下两种基本问题:
1) AABB包围盒与胶囊包围盒的距离计算。如图6所示的胶囊包围盒半径为rc,轴段为MN,分析计算过程如下:
当胶囊包围盒与AABB包围盒发生碰撞时,可以简化为AABB包围盒上的一些点进入胶囊包围盒的内部,并且这些点与胶囊包围盒轴段MN之间的距离小于半径rc,所以相交测试相当于测试AABB包围盒到胶囊包围盒轴段MN的最短距离。设最短距离为d,若d≤rc,则两个物体之间发生碰撞;若d>rc,则两个物体不相交。
图6 胶囊包围盒与AABB包围盒的碰撞检测
2) 胶囊包围盒与胶囊包围盒的距离计算。如图7所示,两个胶囊包围盒的半径分别为rc和rc1,轴段分别为MN和M1N1。两个胶囊包围盒发生碰撞时,可以简化为第1个胶囊包围盒上的一些点进入第2个胶囊包围盒的内部,并且这些点中的每一个与两个胶囊包围盒轴段MN和轴段M1N1之间的距离之和小于这两个胶囊包围盒的半径之和rc1+rc。因此,相交测试相当于测试轴段MN和轴段M1N1的最短距离。设最短距离为d′,两个胶囊包围盒的半径之和rc1+rc为r′,将距离d′与两个胶囊包围盒半径之和r′做比较,d′与r′的关系代表着两个胶囊包围盒之间的位置关系:若d′≤r′,两个胶囊包围盒之间发生碰撞;若d′>r′,两个胶囊包围盒不相交。
图7 两个胶囊包围盒之间的距离计算
结合虚拟手型模型,本文提出虚拟手与被抓对象的多点碰撞检测流程,如图8所示。对于捏、抓手势,以及双手搬动零件,仅有虚拟手的手指与零件发生碰撞。若手指包围盒与被抓对象包围盒相交测试成功,则碰撞检测成功。对于握手势,则需要依赖手指与手掌的协同操作,因此握手势抓取需要进行手掌AABB包围盒、手指胶囊包围盒与被抓对象包围盒的相交测试。若手掌、手指包围盒与被抓对象包围盒的相交测试都成功,则碰撞检测成功。
图8 虚拟手与被抓对象的多点碰撞检测流程
2.4 虚拟手拾取零件流程
在虚拟维修环境中,维修人员确定有可抓握的目标对象后,根据被抓对象的几何、质量特点,决定采用单手还是双手操作目标零件;然后调整手势,通过本文2.2节所建立的虚拟手型和被抓对象进行多点碰撞检测,若碰撞检测成功,则虚拟手抓取物体,否则维修人员调整手势。虚拟手拾取零件或工具方法如图9所示。
图9 虚拟手拾取零件或工具方法
3 虚拟手拾取零件或工具试验
基于Leap Motion设备,在Unity3D平台中进行虚拟手建模及功能开发,实现虚拟手拾取零件和工具功能,虚拟手抓取与释放零件流程如图10所示。
图10 虚拟手抓取与释放零件流程
以某综合传动装置为例,其零件种类如表1所示。该虚拟手模型对同一个零件可采用不同手势进行拾取,操作人员能根据零件的不同采用自己习惯且科学合理的手势拾取零件,满足维修中人手操作零件的要求。
表1 某综合传动装置零件种类
综合传动装置中质量小、轴向尺寸短、外径较小的零件(如挡圈、螺钉、螺母、垫片、隔环等零件),维修人员可采用捏手势和抓手势进行拾取。图11、12分别为虚拟手采用捏/抓手势拾取挡圈。
图11 虚拟手采用捏手势拾取挡圈
图12 虚拟手采用抓手势拾取挡圈
对于质量较大、轴向尺寸较小且外径不大的零件(如轴承),维修人员可采用抓手势和握手势进行拾取,如图13、14所示。
图13 虚拟手采用抓手势拾取轴承
图14 虚拟手采用握手势拾取轴承
对于被动齿轮等零件,其质量较大,维修人员可采用握手势和双手搬手势进行拾取,如图15、16所示。
图15 虚拟手采用握手势拾取被动齿轮
图16 虚拟手采用双手搬手势搬动被动齿轮
对于质量更大且外径较大的零件(如离合器被动齿轮),维修人员采用双手搬手势进行拾取,如图17所示。
对于传动轴零件以及带有手柄的工具(如扳手),虚拟手使用手指与手掌协同操作的握手势拾取零件或扳手,如图18所示。
图17 双手协同操作搬起离合器被动齿轮
图18 虚拟手采用握手势拾取零件或工具
上述试验结果表明:虚拟手可以对同一零件和工具采用不同手势拾取,满足了维修人员采用符合自身习惯且合理的手势拾取零件或工具的需求,提升了虚拟维修中的人机交互性能,可更好地进行人员的维修训练,提升操作技能。
4 结束语
在虚拟维修人机交互中,虚拟手需要满足虚拟维修对手的功能需求,使其贴近于实际维修效果,增强虚拟维修的沉浸感。本文以手掌和手指数据为基础,结合虚拟维修手势分类,建立了虚拟手型模型,采用计算两个凸体之间最短距离的相交测试方法,研究了虚拟手与零件或工具的多点碰撞检测方法。在此基础上,制定了虚拟手拾取零件或工具的流程,以Unity3D为开发平台,实现了虚拟手拾取和释放零件的功能,以某综合传动装置零件作为维修对象,进行了不同手势拾取零件或工具的试验。试验结果表明:该虚拟手可以满足虚拟维修中对虚拟手拾取零件的需求,更加贴近于实际维修情况,丰富了虚拟维修及培训中的人机交互功能,可以更好地锻炼维修人员的操作技能。