本发明属于增强现实以及人机交互领域,涉及了一种基于增强现实的虚拟雕塑方法。
背景技术:
传统的雕塑是通过雕刻家们用刻刀雕刻出来的,这种方式不仅浪费雕刻材料,而且对雕刻的技巧要求比较高,往往雕错了很难再撤销掉重新开始。随着计算机功能的不断强大,通过计算机来进行三维建模的软件也越来越多,人们可以通过这些软件来建立各种各样的三维模型。但同时,这些建模软件的使用门槛也变得越来越高,操作也越来越复杂,初学者不得不花费很大的精力掌握这些软件的操作方式。而众所周知,人的双手是最灵活的器官之一,人的双手可以比划出各种各样的手势,例如聋哑人可以通过手势来进行交流。而本发明利用手势来进行三维建模,通过传感器来获取手势数据,然后在增强现实的场景当中显示出来。
技术实现要素:
本发明的目的在于克服现有技术存在的上述不足,提供基于增强现实的虚拟雕塑方法。
本发明提出的一种基于增强现实的虚拟雕塑方法,这个方法通过传感器来获取操作者的手势数据,然后通过增强现实头盔,在增强现实的场景当中完成虚拟雕塑的功能。
本发明基于增强现实的虚拟雕塑方法,包括如下步骤:
s1、手势数据的获取;
s2、坐标系配准以及手势建模;
s3、虚实碰撞检测;
s4、雕塑模型的形变。
进一步地,所述步骤s1包括以下步骤:
手势数据是通过leapmotion传感器获取得到的,在获取的过程当中,存在着一些设备误差以及环境噪声误差,所以可以通过kalman滤波算法来估计手势的位姿数据。
卡尔曼滤波算法可以从一系列的环境噪声和不完整的测量数据当中估计手的状态。四元数q相对于时间t的微分方程为:
其中,ωx,ωy,ωz是人手在x轴、y轴和z轴三个方向的角速度分量。由于xk包括了四元数状态和角速度,所以xk的格式为:
xk=[q0,kq1,kq2,kq3,kωx,kωy,kωz,k](2)
其中q0,k,q1,k,q2,k,q3,k是时刻k下的四元数分量,ωx,k,ωy,k,ωz,k是时刻k下的角速度分量。四元数分量的计算可以由角速度分量的测量来获得,具体的迭代过程如下:
其中t是采样时间。
所以从以上的公式可以推导得到,状态转换矩阵为:
其中δt是系统的数据采样时间,在实际的操作中将矩阵γk设为零矩阵。在整个过程当中是使用角速度来估计四元数状态的,因此将过程噪声向量设置为:
wk=[0000wxwywz]t(5)
其中wx,wy,wz是角速度在x,y,z三个方向上的测量分量。由于用的是leapmotion来测量角速度的,所以观察矩阵hk为:
hk=[0n×pin×n](6)
其中n是角速度向量的数量,p是四元数的数量。最后需要对四元数进行规范化操作,在时间k下的标准四元数为:
进一步地,所述步骤s2包括以下步骤:
在leapmotion坐标系和手掌坐标系中需要同步手势动作,而在这个过程中坐标系标定就显得特别重要。假设手掌坐标系为[xhyhzh],leapmotion坐标系为[xlylzl]。因此,有如下映射关系:
其中t1是从世界坐标系到手掌坐标系的转换矩阵,通过计算t1,可以将手掌坐标系中的点与leapmotion坐标系中的点对应起来。
在增强现实的场景当中需要进行虚实之间的坐标系标定,即leapmotion坐标系与雕塑模型坐标系之间的标定。虚拟环境中的雕塑模型是通过一个标记物来确定位置的,所以事先需要在真实环境当中摆放一个标记物,设这个标记物坐标系为[xmymzm],标记物坐标系和leapmotion坐标系之间的转换关系可以通过事先测量知道,假设为t2,则有如下转换关系:
设雕塑模型坐标系为[xsyszs],雕塑模型坐标系相对于标记物坐标系也有一个转换关系,这个转换关系是自己设置的,假设为t3,则有如下转化关系:
由以上几个等式可以得出:
通过等式(11),可以对虚实之间的坐标系进行配准。
在leapmotion获取到手势数据之后,需要在增强现实的场景当中对虚拟手进行数学建模,在leapmotion的一帧数据当中,挑选了与虚拟手运动密切相关的一些手势数据,将之传送给增强现实场景当中。
所传送的手势数据为:
(1)左右手的手掌位置坐标以及姿态方向角;
(2)左右手大拇指的各个关节的起始位置和终点位置坐标,大拇指指尖关节的姿态方向角;
(3)左右手食指的各个关节的起始位置和终点位置坐标,食指指尖关节的姿态方向角;
(4)左右手中指的各个关节的起始位置和终点位置坐标,中指指尖关节的姿态方向角;
(5)左右手无名指的各个关节的起始位置和终点位置坐标,无名指指尖关节的姿态方向角;(6)左右手小拇指的各个关节的起始位置和终点位置坐标,小拇指指尖关节的姿态方向角;
所以,在对三维手势进行数学建模时,用的是一些基本的几何体来近似模拟三维手势,手掌部分使用的是方体,手指关节部分使用的是圆柱体,指尖部分使用的是球体。这些几何体根据leapmotion的手势数据来不断的变换自身的位置以及姿态,从而构建起三维手势的数学模型,为接下来的碰撞检测以及模型变形做好准备。
进一步地,所述步骤s3包括以下步骤:
在虚拟手与雕塑模型的碰撞检测当中,使用了一种混合包围盒的碰撞检测算法来检测虚拟手模型的碰撞。在虚拟手进行雕塑的过程中,主要使用的是手指来与雕塑模型进行碰撞。而在手指的各个部位当中,指尖的使用特别频繁,指尖的运动也十分的灵活,通常需要各种角度的旋转,而且指尖一般是最先接触到雕塑模型的,其后才是手指的各个关节。所以出于这方面的考虑,打算在指尖部位使用球包围盒算法,而在手指的关节部分使用obb包围盒算法。
对于虚拟手,只考虑其手指的碰撞,手掌部分的碰撞忽略掉了。所以对每只虚拟手,只需构建五个手指的包围盒,考虑到人体手指的真实结构,对每个手指的关节数量也进行了区分。由于大拇指的关节数量只有两个,所以在构建大拇指包围盒的时候,只用了两个obb包围盒和一个球包围盒,而对于食指、中指、无名指和小指,均使用了三个obb包围盒和一个球包围盒。在实际的碰撞检测过程当中,设计了如下的碰撞检测策略:
(1)检测指尖的球包围盒是否与雕塑模型发生碰撞
(2)如果指尖的球包围盒没有与雕塑模型产生碰撞,则认为整个虚拟手都没有与雕塑模型产生碰撞,整个碰撞检测的过程结束
(3)如果指尖的球包围盒与雕塑模型产生了碰撞,接下来依次检测手指关节的obb包围盒是否与雕塑模型产生碰撞
这个策略可以降低算法的复杂度,因为在很多情况下,虚拟手是没有与雕塑模型发生碰撞的,这个时候只需要检测指尖的球包围盒即可,而不需要对整个虚拟手进行全面的碰撞检测。
进一步地,所述步骤s4包括以下步骤:
检测到三维手势与雕塑模型的碰撞之后,需要对雕塑模型进行变形以达到雕塑的效果。在这里使用的是一种网格形变算法,具体的算法流程如下所示:
(1)获取雕塑模型的全部网格顶点,将之存放在一个vector3数组当中
(2)通过for循环来遍历网格中的每一个顶点
(3)对于遍历得到每一个顶点,进行三维手势模型的碰撞检测
(4)如果没有检测到碰撞,则网格顶点不发生变化
(5)如果检测到了碰撞,则获取碰撞包围盒的中心坐标以及尺寸大小,同时计算出三维手势的移动方向,则网格顶点坐标向这个移动方向移动一定的距离,直到没有检测到碰撞为止。
(6)一遍for循环下来之后,雕塑模型中的网格顶点坐标有的会发生变化,有的会保持不变,统一对网格顶点进行更新一遍。
(7)更新之后重新计算网格的包围顶点,删除一些冗余的点,以及对网格进行整体的优化。通过对以上流程的不断循环下去,就可以实现虚拟雕塑的效果。
与现有技术相比,本发明具有如下优点和技术效果:
本发明通过人的三维手势来进行虚拟雕塑,然后在增强现实头盔hololens中显示出来,以达到一个增强现实的效果。首先是通过leapmotion传感器采集手势的位置以及姿态数据,由于设备误差以及一些环境噪声误差,测量误差会随着时间不断的增加,所以采用kalman滤波算法对手势的位置以及姿态进行了估计,从而提高手势数据的准确性。为了达到雕塑的效果,需要对雕塑模型和双手进行碰撞检测,碰撞检测之后还需要对雕塑模型进行形状的改变。最后通过实验验证了这种方式,实验结果也表明了基于增强现实的虚拟雕塑可以运用在的实际生活当中。这种基于增强现实的雕塑方式具有很高的灵活性,准确性和高效性,操作员只需要使用自己的双手,传感器就可以获取手势的数据,然后在增强现实的场景当中完成虚拟雕塑的功能。
附图说明
图1是基于增强现实的虚拟雕塑流程图。
图2是手指的包围盒构建图。
具体实施方式
以下结合实施例对本发明作进一步详细的描述,但本发明的实施方式不限于此,以下若有未特别详细说明之处,均是本领域技术人员可参照现有技术实现或理解的。
如图1,本实例基于增强现实的虚拟雕塑方法,包括如下步骤:
s1、手势数据的获取;
s2、坐标系配准以及手势建模;
s3、虚实碰撞检测;
s4、雕塑模型的形变。
所述步骤s1包括以下步骤:
手势数据是通过leapmotion传感器获取得到的,在获取的过程当中,存在着一些设备误差以及环境噪声误差,所以可以通过kalman滤波算法来估计手势的位姿数据。
卡尔曼滤波算法可以从一系列的环境噪声和不完整的测量数据当中估计手的状态。四元数q相对于时间t的微分方程为:
其中,ωx,ωy,ωz是人手在x轴、y轴和z轴三个方向的角速度分量。由于xk包括了四元数状态和角速度,所以xk的格式为:
xk=[q0,kq1,kq2,kq3,kωx,kωy,kωz,k](2)
其中q0,k,q1,k,q2,k,q3,k是时刻k下的四元数分量,ωx,k,ωy,k,ωz,k是时刻k下的角速度分量。四元数分量的计算可以由角速度分量的测量来获得,具体的迭代过程如下:
其中t是采样时间。
所以从以上的公式可以推导得到,状态转换矩阵为:
其中δt是系统的数据采样时间,在实际的操作中将矩阵γk设为零矩阵。在整个过程当中是使用角速度来估计四元数状态的,因此将过程噪声向量设置为:
wk=[0000wxwywz]t(5)
其中wx,wy,wz是角速度在x,y,z三个方向上的测量分量。由于用的是leapmotion来测
量角速度的,所以观察矩阵hk为:
hk=[0n×pin×n](6)
其中n是角速度向量的数量,p是四元数的数量。最后需要对四元数进行规范化操作,在时
间k下的标准四元数为:
所述步骤s2包括以下步骤:
在leapmotion坐标系和手掌坐标系中需要同步手势动作,而在这个过程中坐标系标定就显得特别重要。假设手掌坐标系为[xhyhzh],leapmotion坐标系为[xlylzl]。因此,有如下映射关系:
其中t1是从世界坐标系到手掌坐标系的转换矩阵,通过计算t1,可以将手掌坐标系中的点与leapmotion坐标系中的点对应起来。
在增强现实的场景当中需要进行虚实之间的坐标系标定,即leapmotion坐标系与雕塑模型坐标系之间的标定。虚拟环境中的雕塑模型是通过一个标记物来确定位置的,所以事先需要在真实环境当中摆放一个标记物,设这个标记物坐标系为[xmymzm],标记物坐标系和leapmotion坐标系之间的转换关系可以通过事先测量知道,假设为t2,则有如下转换关系:
设雕塑模型坐标系为[xsyszs],雕塑模型坐标系相对于标记物坐标系也有一个转换关系,这个转换关系是自己设置的,假设为t3,则有如下转化关系:
由以上几个等式可以得出:
通过等式(11),可以对虚实之间的坐标系进行配准。
在leapmotion获取到手势数据之后,需要在增强现实的场景当中对虚拟手进行数学建模,在leapmotion的一帧数据当中,挑选了与虚拟手运动密切相关的一些手势数据,将之传送给增强现实场景当中。
所传送的手势数据为:
(1)左右手的手掌位置坐标以及姿态方向角
(2)左右手大拇指的各个关节的起始位置和终点位置坐标,大拇指指尖关节的姿态方向角
(3)左右手食指的各个关节的起始位置和终点位置坐标,食指指尖关节的姿态方向角
(4)左右手中指的各个关节的起始位置和终点位置坐标,中指指尖关节的姿态方向角
(5)左右手无名指的各个关节的起始位置和终点位置坐标,无名指指尖关节的姿态方向角
(6)左右手小拇指的各个关节的起始位置和终点位置坐标,小拇指指尖关节的姿态方向角
所以,在对三维手势进行数学建模时,用的是一些基本的几何体来近似模拟三维手势,手掌部分使用的是方体,手指关节部分202使用的是圆柱体,指尖201部分使用的是球体。这些几何体根据leapmotion的手势数据来不断的变换自身的位置以及姿态,从而构建起三维手势的数学模型,为接下来的碰撞检测以及模型变形做好准备。
所述步骤s3包括以下步骤:
在虚拟手与雕塑模型的碰撞检测当中,使用了一种混合包围盒的碰撞检测算法来检测虚拟手模型的碰撞。在虚拟手进行雕塑的过程中,主要使用的是手指来与雕塑模型进行碰撞。而在手指的各个部位当中,指尖的使用特别频繁,指尖的运动也十分的灵活,通常需要各种角度的旋转,而且指尖一般是最先接触到雕塑模型的,其后才是手指的各个关节。所以出于这方面的考虑,打算在指尖部位使用球包围盒算法,而在手指的关节部分使用obb包围盒算法。
如图2所示,对于虚拟手,只考虑其手指的碰撞,手掌部分的碰撞忽略掉了。所以对每只虚拟手,只需构建五个手指的包围盒,考虑到人体手指的真实结构,对每个手指的关节数量也进行了区分。由于大拇指的关节数量只有两个,所以在构建大拇指包围盒的时候,只用了两个obb包围盒和一个球包围盒,而对于食指、中指、无名指和小指,均使用了三个obb包围盒202和一个球包围盒201。在实际的碰撞检测过程当中,设计了如下的碰撞检测策略:
(1)检测指尖的球包围盒201是否与雕塑模型发生碰撞;
(2)如果指尖的球包围盒没有与雕塑模型产生碰撞,则认为整个虚拟手都没有与雕塑模型产生碰撞,整个碰撞检测的过程结束;
(3)如果指尖的球包围盒与雕塑模型产生了碰撞,接下来依次检测手指关节的obb包围盒202是否与雕塑模型产生碰撞;
这个策略可以降低算法的复杂度,因为在很多情况下,虚拟手是没有与雕塑模型发生碰撞的,这个时候只需要检测指尖的球包围盒即可,而不需要对整个虚拟手进行全面的碰撞检测。
所述步骤s4包括以下步骤:
检测到三维手势与雕塑模型的碰撞之后,需要对雕塑模型进行变形以达到雕塑的效果。在这里使用的是一种网格形变算法,具体的算法流程如下所示:
(1)获取雕塑模型的全部网格顶点,将之存放在一个vector3数组当中;
(2)通过for循环来遍历网格中的每一个顶点;
(3)对于遍历得到每一个顶点,进行三维手势模型的碰撞检测;
(4)如果没有检测到碰撞,则网格顶点不发生变化;
(5)如果检测到了碰撞,则获取碰撞包围盒的中心坐标以及尺寸大小,同时计算出三维手势的移动方向,则网格顶点坐标向这个移动方向移动一定的距离,直到没有检测到碰撞为止;
(6)一遍for循环下来之后,雕塑模型中的网格顶点坐标有的会发生变化,有的会保持不变,统一对网格顶点进行更新一遍;
(7)更新之后重新计算网格的包围顶点,删除一些冗余的点,以及对网格进行整体的优化。可以通过对以上流程的不断循环,实现虚拟雕塑的效果。上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。