一种虚拟现实场景中的拾取方法和装置与流程

文档序号:14835096发布日期:2018-06-30 12:03阅读:353来源:国知局
一种虚拟现实场景中的拾取方法和装置与流程

本发明涉及虚拟现实交互设计领域,特别涉及一种基于多触点压力判断的虚拟现实场景中的拾取方法和装置。



背景技术:

目前,现有的虚拟现实场景拾取技术,一般采用以下几种方式:

(1)使用控制手柄聚焦虚拟场景中的物体,利用手柄上的按钮确认拾取;

(2)使用眼球追踪,根据视线方向拾取物体;

(3)根据虚拟手的各个手指的位置关系进行手势识别以进行拾取。

公开号为CN103473814A的中国专利申请公开了一种基于GPU的三维几何图元拾取方法,其是在进行拾取绘制时关闭光栅化,将鼠标位置信息和图元顶点坐标变换到规范化设备坐标系或视口坐标系,通过在几何处理器中判断投影后的二维图元与鼠标位置或选择框的关系进行命中判定,并利用变换反馈将拾取结果返回应用程序。该专利申请主要是通过鼠标点击选取,通过GPU运算对小图元进行实时的精确的拾取。该专利申请的技术方案虚拟现实与实际动作之间的融合度小,无法用肢体的动作特别是手部的拾取动作而控制三维几何图元的拾取。

公开号为CN106406511A的中国专利申请公开了一种基于点接触式感应单元的动作信息判定方法,包括:一种基于点接触式感应单元数据手套和动作信息判定系统的信息采集方法,一种动作信息判定系统,一种点接触式感应单元数据手套,一种电感点接触式感应单元数据手套,一种压感点接触式感应单元数据手套,一种手握点接触式感应单元数据手套辅助工具;解决了传统数据手套成本高、构建复杂、使用时占用计算资源较多问题;该方案采用从数据采集设备表面采集各主要点接触数据,与设定的固定动作数据进行特征对比,得出所表达动作。该专利申请主要是通过固定动作数据的特征对比来完成手势动作识别,因为需要依赖于大量的原始的固定动作数据并依据经验判断采用某一动作时就必然要做某一事情,但是,对于尚未知晓的动作目的,仅依赖于固定动作数据特征,便容易出现错误判断。

公开号为CN106445085A的中国专利申请公开了一种基于虚拟现实的交互控制方法及装置,包括:在检测到视焦点处于控制对象对应的控制区域的情况下,将所述视焦点显示在所述控制对象上;在所述视焦点处于所述控制区域的持续时间达到第一预设值的情况下,执行所述控制对象对应的操作。通过在检测到视焦点处于控制对象对应的控制区域的情况下,将视焦点显示在控制对象上,在视焦点处于控制区域的持续时间达到第一预设值的情况下,执行控制对象对应的操作,根据本发明的基于虚拟现实的交互控制方法及装置能够降低对用户的操作精度的要求,从而能够提高用户体验。该专利申请主要通过焦点判断拾取对象,在焦点处于对象控制区域内时,需要经过一个预设时间的确定,才能完成拾取。该专利申请无法模仿人的肢体动作,无法给人以身临其境之感。

公开号为CN106445176A的中国专利申请公开了一种基于虚拟现实技术的人机交互系统及交互方法,包括:虚拟现实头显设备、控制器和体感识别装置,当用户需要与虚拟场景进行交互时,体感识别装置会捕捉用户的体感数据信息,并将体感数据信息输出至控制器,控制器将获取的体感数据集信息转换成用户运动数据处理信号,输出至虚拟现实头显设备,控制虚拟现实头显设备显示的虚拟场景中的运动模型同步运动,完成人机交互。该申请主要是将体感数据用于虚拟现实场景中实时地显示用户的运动情况,其缺乏用户与虚拟场景中的物体之间的交互控制。

公开号为CN103955295A的中国专利申请公开了一种基于数据手套和物理引擎的虚拟手的实时抓取方法,包括:一、启动计算机、数据手套和位置跟踪器;二、戴上数据手套,运行计算机获取数据手套和位置跟踪器发来的数据;三、佩戴数据手套做手指弯曲、手掌平移旋转,数据手套和位置跟踪器将手指和手掌的位置及变化数据发送给程序,程序通过接收数据驱动虚拟手的手指和手掌的运动;四、使用数据手套的手在现实中模拟抓取动作控制计算机中的虚拟手去抓取物体,程序会判断虚拟物体是否处于被抓取状态;若未满足被抓取,返回三,继续执行三、四,直到程序退出;若满足被抓取,执行五;五、通过计算虚拟手的位置和姿态的变化来控制虚拟物体的位置和姿态的变化,从而控制虚拟物体的移动和旋转。该专利申请技术方案仅依靠数据手套得到用户的手势以完成虚拟现实场景中的拾取动作,使用范围狭窄,当脱离数据手套时便因为无法确定用户手势的变化而不能进行虚拟场景中的抓取动作。

通过上述几遍公开专利文献以及现有技术中的各类文献可以看出,虚拟现实场景中的拾取交互多半由控制器选取、眼球追踪或者手势判断完成。其中,控制器选取和眼球追踪两种方法不能模拟真实的拾取动作,而手势判断方法的计算量较大,不适用于实时计算的场景。

现有的拾取技术,操作上无法贴近自然,会降低虚拟现实带来的真实感体验,或者成本较高,适用性不好:

(1)使用控制手柄:无法模拟真实的拾取操作,容易引起误操作,缺乏沉浸感;

(2)眼球追踪:响应速度慢,精度不好保证,无法进行操作反馈;

(3)手势判断:计算量大,不适用于精度较高的实时拾取判断。

因此,虚拟现实技术中的技术仍具有很大的改进空间。



技术实现要素:

有鉴于此,本发明提供一种虚拟现实场景中的拾取方法和装置,以高效地模拟真实的拾取操作,提升虚拟现实用户交互的沉浸感。

本发明的技术方案是这样实现的:

一种虚拟现实场景中的拾取方法,包括:

接收手指压力数据;

构建拾取几何体;

根据虚拟手在虚拟现实场景中的位置数据和朝向数据,确定或修改所述拾取几何体的空间位置和空间旋转度;

遍历虚拟现实场景中各个物体的包围盒;

当某一物体的包围盒与所述拾取几何体的空间位置相交时,将该物体确定为拾取对象;

根据所述手指压力数据修改所述拾取几何体的大小;

根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象。

进一步,所述方法还包括:

当确定拾取该拾取对象时,将拾取该拾取对象的控制信息发送给虚拟现实设备;

当确定松开该拾取对象时,将取消拾取该拾取对象的控制信息发送给虚拟现实设备。

进一步,所述手指压力数据来源于数据手套、柔性传感器或者安装于手指关节的压力传感器。

进一步,构建拾取几何体,包括:

获取所述虚拟手的度量参数;

构建拾取坐标系;

根据所述拾取坐标系和所述虚拟手的度量参数,确定所述拾取几何体的大小。

进一步,所述虚拟手的度量参数包括虚拟手的手掌长度L、虚拟手的手掌宽度W、虚拟手的大拇指长度R;

在所述虚拟手的手掌伸直,大拇指垂直于其余四指状态下,以所述虚拟手的食指方向为x轴正方向,以所述大拇指方向为z轴正方向,以垂直于手掌并向远离手掌的方向为y轴正方向,构建所述拾取坐标系;

所述拾取几何体位于所述虚拟手的手掌的一侧。

进一步,所述拾取几何体的几何形态包括:

拾取线段、拾取圆柱体、拾取球体、拾取棱台和拾取长方体。

进一步,所述几何形态根据所测手指的数量和用户的选择进行确定。

进一步,所测手指的数量为至少两个,其中,所测手指中必须包含大拇指。

进一步,当所测手指的数量为两个时,用户可选的几何形态为拾取线段;

当所测手指的数量为三个时,用户可选的几何形态包括拾取线段、拾取圆柱体和拾取球体;

当所测手指的数量为四个时,用户可选的几何形态包括拾取线段、拾取圆柱体、拾取球体、拾取棱台和拾取长方体;

当所测手指的数量为五个时,用户可选的几何形态包括拾取线段、拾取圆柱体、拾取球体、拾取棱台和拾取长方体。

进一步,当所述几何形态为拾取线段时:

该拾取线段位于所述x轴和z轴构成的平面中;

所述拾取线段的初始长度为所述拾取线段长度的变化范围为0至

进一步,根据所述手指压力数据修改所述拾取几何体的大小,包括:

获取大拇指的压力值,若大拇指的压力值增大,则减小所述拾取线段的长度,若大拇指的压力值减小,则增大所述拾取线段的长度;

获取除大拇指外其余手指的压力值中的最大压力值,若该最大压力值增大,则减小所述拾取线段的长度,若该最大压力值减小,则增大所述拾取线段的长度。

进一步,根据如下公式增大或者减小所述拾取线段的长度:

Length1'=Length1×α×F

其中,Length1'为拾取线段修改后的长度,Length1为拾取线段修改前的长度,α为调节系数,F为手指的压力值。

进一步,当所述几何形态为拾取圆柱体时:

所述拾取圆柱体的轴心平行于z轴,且所述拾取圆柱体的高度为W,所述拾取圆柱体的初始直径为所述拾取圆柱体直径的变化范围为0至且所述拾取圆柱体位于虚拟手中与所测手指相对应的虚拟手指之间。

进一步,根据所述手指压力数据修改所述拾取几何体的大小,包括:

获取大拇指的压力值,若大拇指的压力值增大,则减小所述拾取圆柱体的直径,若大拇指的压力值减小,则增大所述拾取圆柱体的直径;

获取除大拇指外其余手指的压力值中的最大压力值,若该最大压力值增大,则减小所述拾取圆柱体的直径,若该最大压力值减小,则增大所述拾取圆柱体的直径。

进一步,根据如下公式增大或者减小所述拾取圆柱体的直径:

Φ1'=Φ1×α×F

其中,Φ1'为拾取圆柱体修改后的直径,Φ1为拾取圆柱体修改前的直径,α为调节系数,F为手指的压力值。

进一步,当所述几何形态为拾取球体时:

所述拾取球体的初始直径为所述拾取球体直径的变化范围为0至且所述拾取球体位于虚拟手中与所测手指相对应的虚拟手指之间。

进一步,根据所述手指压力数据修改所述拾取几何体的大小,包括:

获取大拇指的压力值,若大拇指的压力值增大,则减小所述拾取球体的直径,若大拇指的压力值减小,则增大所述拾取球体的直径;

获取除大拇指外其余手指的压力值中的最大压力值,若该最大压力值增大,则减小所述拾取球体的直径,若该最大压力值减小,则增大所述拾取球体的直径。

进一步,根据如下公式增大或者减小所述拾取球体的直径:

Φ2'=Φ2×α×F

其中,Φ2'为拾取球体修改后的直径,Φ2为拾取球体修改前的直径,α为调节系数,F为手指的压力值。

进一步,当所述几何形态为拾取棱台时:

所述拾取棱台底面的长为H、宽为W,所述拾取棱台顶面的初始长度为L,所述拾取棱台顶面长度的变化范围为0至L,所述拾取棱台顶面的宽为W,所述拾取棱台的初始高度为R,所述拾取棱台高的变化范围为0至R。

进一步,根据所述手指压力数据修改所述拾取几何体的大小,包括:

获取大拇指的压力值,若大拇指的压力值增大,则减小所述拾取棱台在y轴方向上的长度,若大拇指的压力值减小,则增大所述拾取棱台在y轴方向上的长度;

获取除大拇指外其余手指的压力值中的最大压力值,若该最大压力值增大,则减小所述拾取棱台在x轴方向上的长度,若该最大压力值减小,则增大所述拾取棱台在x轴方向上的长度。

进一步,根据如下公式增大或者减小所述拾取棱台在x轴和/或y轴方向上的长度:

Length2'=Length2×α×F

其中,Length2'为拾取棱台在x轴和/或y轴方向上修改后的长度,Length2为拾取棱台在x轴和/或y轴方向上修改前的长度,α为调节系数,F为手指的压力值。

进一步,当所述几何形态为拾取长方体时:

所述拾取长方体在x轴方向的初始长度值为L,在y轴方向的初始长度值为R,在z轴方向的初始长度值为W。

进一步,根据所述手指压力数据修改所述拾取几何体的大小,包括:

获取大拇指的压力值,若大拇指的压力值增大,则减小所述拾取长方体在y轴方向上的长度,若大拇指的压力值减小,则增大所述拾取长方体在y轴方向上的长度;

获取除大拇指外其余手指的压力值中的最大压力值,若该最大压力值增大,则减小所述拾取长方体在x轴方向上的长度,若该最大压力值减小,则增大所述拾取长方体在x轴方向上的长度。

进一步,根据如下公式增大或者减小所述拾取棱台在x轴和/或y轴方向上的长度:

Length3'=Length3×α×F

其中,Length3'为拾取长方体在x轴和/或y轴方向上修改后的长度,Length3为拾取长方体在x轴和/或y轴方向上修改前的长度,α为调节系数,F为手指的压力值。

进一步,当所述几何形态为拾取线段时,根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象,包括:

若所述拾取对象并未处于拾取状态,则计算所述拾取线段与拾取对象的包围盒的相交部分的长度,并计算当前所述拾取线段的长度,若满足拾取条件公式(1),则将所述拾取对象确定为拾取状态:

Lintersect÷Lpick>β (1)

其中,Lintersect为所述拾取线段与拾取对象的包围盒的相交部分的长度,Lpick为当前所述拾取线段的长度,β为拾取判断阈值;

若所述拾取对象已处于拾取状态,则计算所述拾取线段与拾取对象的包围盒的相交部分的长度,并计算当前所述拾取线段的长度,若不再满足拾取条件公式(1)并且从不再满足拾取条件公式(1)的时刻开始的第一延迟时间段内均不满足拾取条件公式(1),则松开该拾取对象,并清除所述拾取对象的拾取状态。

进一步,当所述几何形态为拾取圆柱体时,根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象,包括:

若所述拾取对象并未处于拾取状态,则计算所述拾取圆柱体的横截面与拾取对象的包围盒的相交部分的面积,并计算当前所述拾取圆柱体的横截面面积,若满足拾取条件公式(2),则将所述拾取对象确定为拾取状态:

Aintersect1÷Apick1>β (2)

其中,Aintersect1为所述拾取圆柱体的横截面与拾取对象的包围盒的相交部分的面积,Apick1为当前所述拾取圆柱体的横截面面积,β为拾取判断阈值;

若所述拾取对象已处于拾取状态,则计算所述拾取圆柱体的横截面与拾取对象的包围盒的相交部分的面积,并计算当前所述拾取圆柱体的横截面面积,若不再满足拾取条件公式(2)并且从不再满足拾取条件公式(2)的时刻开始的第一延迟时间段内均不满足拾取条件公式(2),则松开该拾取对象,并清除所述拾取对象的拾取状态。

进一步,当所述几何形态为拾取球体时,根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象,包括:

若所述拾取对象并未处于拾取状态,则计算所述拾取球体的横截面与拾取对象的包围盒的相交部分的面积,并计算当前所述拾取球体的横截面面积,若满足拾取条件公式(3),则将所述拾取对象确定为拾取状态:

Aintersect2÷Apick2>β (3)

其中,Aintersect2为所述拾取球体的横截面与拾取对象的包围盒的相交部分的面积,Apick2为当前所述拾取球体的横截面面积,β为拾取判断阈值;

若所述拾取对象已处于拾取状态,则计算所述拾取球体的横截面与拾取对象的包围盒的相交部分的面积,并计算当前所述拾取球体的横截面面积,若不再满足拾取条件公式(3)并且从不再满足拾取条件公式(3)的时刻开始的第一延迟时间段内均不满足拾取条件公式(3),则松开该拾取对象,并清除所述拾取对象的拾取状态。

进一步,当所述几何形态为拾取棱台时,根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象,包括:

若所述拾取对象并未处于拾取状态,则计算所述拾取棱台与拾取对象的包围盒的相交部分的体积,并计算当前所述拾取棱台的体积,若满足拾取条件公式(4),则将所述拾取对象确定为拾取状态:

Vintersect1÷Vpick1>β (4)

其中,Vintersect1为所述拾取棱台与拾取对象的包围盒的相交部分的体积,Vpick1为当前所述拾取棱台的体积,β为拾取判断阈值;

若所述拾取对象已处于拾取状态,则计算所述拾取棱台与拾取对象的包围盒的相交部分的体积,并计算当前所述拾取棱台的体积,若不再满足拾取条件公式(4)并且从不再满足拾取条件公式(4)的时刻开始的第一延迟时间段内均不满足拾取条件公式(4),则松开该拾取对象,并清除所述拾取对象的拾取状态。

进一步,当所述几何形态为拾取长方体时,根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象,包括:

若所述拾取对象并未处于拾取状态,则计算所述拾取长方体与拾取对象的包围盒的相交部分的体积,并计算当前所述拾取长方体的体积,若满足拾取条件公式(5),则将所述拾取对象确定为拾取状态:

Vintersect2÷Vpick2>β (5)

其中,Vintersect2为所述拾取长方体与拾取对象的包围盒的相交部分的体积,Vpick2为当前所述拾取长方体的体积,β为拾取判断阈值;

若所述拾取对象已处于拾取状态,则计算所述拾取长方体与拾取对象的包围盒的相交部分的体积,并计算当前所述拾取长方体的体积,若不再满足拾取条件公式(5)并且从不再满足拾取条件公式(5)的时刻开始的第一延迟时间段内均不满足拾取条件公式(5),则松开该拾取对象,并清除所述拾取对象的拾取状态。

进一步,β为0.8~0.95。

进一步,所述第一延迟时间段的时长为0.2s~1.0s。

进一步,所述方法还包括:

进一步根据所述拾取对象的拾取要求,确定是否拾取该拾取对象。

进一步,所述拾取对象的拾取要求包括:单手拾取或者双手拾取。

进一步,当所述拾取对象的宽度超出拾取体积阈值时,和/或,当所述拾取对象的重量超出拾取重量阈值时:所述拾取对象的拾取要求为双手拾取;

当所述拾取对象的宽度未超出拾取体积阈值时,和/或,当所述拾取对象的重量未超出拾取重量阈值时,所述拾取对象的拾取要求为单手拾取。

进一步,所述虚拟手在虚拟现实场景中的位置数据和朝向数据,通过以下方法确定:

获取虚拟手在虚拟现实场景中的初始位置数据;

通过加速度计获取用于控制虚拟手的加速度;

通过陀螺仪获取用于控制虚拟手的角速度;

根据所述加速度以及所述虚拟现实场景的刷新时间,确定所述虚拟手的速度;

根据所述虚拟手的速度、所述虚拟现实场景的刷新时间、以及虚拟手在虚拟现实场景中的初始位置数据,获得所述虚拟手在虚拟现实场景中的新位置数据;

将所述加速度和角速度进行数据融合,以获得所述虚拟手的朝向数据。

进一步,通过互补滤波、卡尔曼滤波和/或剃度下降法进行所述数据融合。

一种虚拟现实场景中的拾取装置,包括:

数据采集模块,所述数据采集模块用于接收手指压力数据;

IMU模块,所述IMU模块用于获取虚拟手在虚拟现实场景中的位置数据和朝向数据;

物理计算模块,所述物理计算模块根据IMU模块提供的数据进行计算,以构建拾取几何体,确定或修改所述拾取几何体的空间位置和空间旋转度,遍历虚拟现实场景中各个物体的包围盒,当某一物体的包围盒与所述拾取几何体的空间位置相交时,将该物体确定为拾取对象,根据所述手指压力数据修改所述拾取几何体的大小,根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象。

进一步,所述装置还包括:

通信模块,所述通信模块连接于所述物理计算模块并与虚拟现实设备进行通信;

当确定拾取该拾取对象时,所述物理计算模块将拾取该拾取对象的控制信息通过所述通信模块发送给虚拟现实设备;

当确定松开该拾取对象时,所述物理计算模块将取消拾取该拾取对象的控制信息通过所述通信模块发送给虚拟现实设备。

进一步,所述数据采集模块连接至数据手套、柔性传感器或者安装于手指关节的压力传感器,以通过所述数据手套、柔性传感器或者安装于手指关节的压力传感器获取收手指压力数据。

从上述方案可以看出,本发明的虚拟现实场景中的拾取方法和装置,基于多触点压力判断虚拟现实场景中物体的拾取,其针对当前的虚拟现实设备提供了真实并且高效的拾取操作,与现有技术相比,本发明技术方案只需要对多触点的手部压力进行拾取判断,无需对具体的每个手指进行手势识别,降低了软件计算的复杂度,并且比现有的精确拾取判断方法更为高效。本发明同时提高了用户虚拟现实交互的沉浸感,提升了用户体验。

附图说明

图1为本发明的虚拟现实场景中的拾取方法的步骤流程图;

图2为本发明中构建拾取几何体的步骤流程图;

图3为虚拟手示意图;

图4为通过虚拟手构建拾取坐标系的示意图;

图5为拾取线段示意图;

图6为拾取圆柱体示意图;

图7为拾取球体示意图;

图8为拾取棱台示意图;

图9为拾取长方体示意图;

图10为拾取长方体另一示意图;

图11为获取所述虚拟手在虚拟现实场景中的位置数据和朝向数据的步骤流程图;

图12为本发明的虚拟现实场景中的拾取装置结构框图;

图13为采用本发明的方法和装置的一个具体实现过程流程图;

图14为更新虚拟手的位置流程示意图;

图15A为场景1中虚拟手靠近待拾取球的示意图;

图15B为场景1中用户弯曲手指试图拾取球的示意图;

图15C为场景1中球被用户拾取的示意图;

图16A为场景2中用户选取线段为“拾取几何体”的示意图;

图16B为场景2中用户弯曲手指开始拾取火柴的示意图;

图16C为场景2中火柴被拾取的示意图;

图17A为场景3中用户选取圆柱体为“拾取几何体”的示意图;

图17B为场景3中用户弯曲手指开始拾取水杯的示意图;

图17C为场景3中水杯被拾取的示意图;

图18A为场景4中用户选取球体为“拾取几何体”的示意图;

图18B为场景4中用户弯曲手指开始拾取苹果的示意图;

图18C为场景4中苹果被拾取的示意图;

图19A为场景5中用户选取长方体为“拾取几何体”的示意图;

图19B为场景5中用户弯曲手指开始拾取铅笔盒的示意图;

图19C为场景5中铅笔盒被拾取的示意图;

图20A为场景6中用户选取棱台为“拾取几何体”的示意图;

图20B为场景6中用户弯曲手指开始拾取饭盒的示意图;

图20C为场景6中饭盒被拾取的示意图;

图21A为场景7中用户仅有一只手满足大箱子拾取条件的示意图;

图21B为场景7中用户两只手均满足大箱子拾取条件的示意图;

图21C为场景7中大箱子被拾取的示意图;

图22A为场景8中用户仅有一只手满足铅球拾取条件的示意图;

图22B为场景8中用户两只手均满足铅球拾取条件的示意图;

图22C为场景8中铅球被拾取的示意图;

图23为场景9中询问用户是否使用现有的手势识别的拾取方法的界面窗口示意图;

图24A为场景10中拾取苹果时弹出消息显示当前所采用的拾取方法的示意图;

图24B为场景10中拾取铅笔盒时弹出消息显示当前所采用的拾取方法的示意图;

图25为场景11中VR设备进入节电模式自动切换到通过本发明实施例的拾取几何体进行水杯拾取的示意图;

图26A为场景12中温度升高超过VR设备的警戒线时自动切换到本发明实施例的拾取方法的示意图;

图26B为场景12中画面帧数不足时自动切换到本发明实施例的拾取方法的示意图;

图26C为场景12中自动切换到现有的手势识别拾取方法的示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。

如图1所示,本发明提供的虚拟现实场景中的拾取方法,主要包括以下步骤:

步骤1、接收手指压力数据;

步骤2、构建拾取几何体;

步骤3、根据虚拟手在虚拟现实场景中的位置数据和朝向数据,确定或修改所述拾取几何体的空间位置和空间旋转度;

步骤4、遍历虚拟现实场景中各个物体的包围盒;

步骤5、当某一物体的包围盒与所述拾取几何体的空间位置相交时,将该物体确定为拾取对象;

步骤6、根据所述手指压力数据修改所述拾取几何体的大小;

步骤7、根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象。

另外,本发明的虚拟现实场景中的拾取方法还进一步包括:

当确定拾取该拾取对象时,将拾取该拾取对象的控制信息发送给虚拟现实设备;

当确定松开该拾取对象时,将取消拾取该拾取对象的控制信息发送给虚拟现实设备。

其中,本发明实施例中,所述手指压力数据来源于数据手套、柔性传感器或者安装于手指关节的压力传感器。

本发明中,所述拾取几何体是用来判断虚拟空间中拾取对象是否处于虚拟手能够拾取以及握持的空间中,该拾取几何体位于虚拟手的手掌朝向的一侧而并不位于手背朝向的一侧,所述拾取几何体随着虚拟手的手指的运动而改变大小。本发明中,当拾取对象的包围盒与拾取几何体相交,则说明拾取对象位于虚拟手能够拾取以及握持的空间中,此后就可以进一步根据包围盒与拾取几何体的相交程度来判断是否进行虚拟物品的拾取。

如图2所示,本发明步骤2中,通过如下方法构建拾取几何体:

步骤21、获取所述虚拟手的度量参数;

步骤22、构建拾取坐标系;

步骤23、根据所述拾取坐标系和所述虚拟手的度量参数,确定所述拾取几何体的大小。

其中,如图3所示,所述虚拟手的度量参数包括虚拟手的手掌长度L、虚拟手的手掌宽度W、虚拟手的大拇指长度R。如图4所示,在所述虚拟手的手掌伸直,大拇指垂直于其余四指状态下,以所述虚拟手的食指方向为x轴正方向,以所述大拇指方向为z轴正方向,以垂直于手掌并向远离手掌的方向为y轴正方向,构建所述拾取坐标系。

本发明实施例中,所述拾取几何体包括如下几种几何形态:拾取线段、拾取圆柱体、拾取球体、拾取棱台和拾取长方体。根据本发明的精神,在拾取线段、拾取圆柱体、拾取球体、拾取棱台和拾取长方体几种几何形态的基础上采用其它种类似的几何形态均应当属于本发明所保护技术范围之内。

以下分别对拾取线段、拾取圆柱体、拾取球体、拾取棱台和拾取长方体的构建进行说明。

本发明实施例中,所述几何形态根据所测手指的数量和用户的选择进行确定。其中,所测手指的数量为至少两个,其中,所测手指中必须包含大拇指。

本发明实施例中,当所测手指的数量为两个时,用户可选的几何形态为拾取线段;当所测手指的数量为三个时,用户可选的几何形态包括拾取线段、拾取圆柱体和拾取球体;当所测手指的数量为四个时,用户可选的几何形态包括拾取线段、拾取圆柱体、拾取球体、拾取棱台和拾取长方体;当所测手指的数量为五个时,用户可选的几何形态包括拾取线段、拾取圆柱体、拾取球体、拾取棱台和拾取长方体。

(a)拾取线段

如图5所示,当所述几何形态为拾取线段时,该拾取线段位于所述x轴和z轴构成的平面中,所述拾取线段的初始长度为所述拾取线段长度的变化范围为0至当只能测量两个手指的压力值时,本发明实施例的几何形态只能采用拾取线段,当能够测量多余两个手指的压力值时,也可根据用户的选择和/或系统的设定而采用拾取线段。

进一步地,步骤6中,根据所述手指压力数据修改所述拾取几何体的大小,在拾取线段的几何形态中,即包括:

获取大拇指的压力值,若大拇指的压力值增大,则减小所述拾取线段的长度,若大拇指的压力值减小,则增大所述拾取线段的长度;

获取除大拇指外其余手指的压力值中的最大压力值,若该最大压力值增大,则减小所述拾取线段的长度,若该最大压力值减小,则增大所述拾取线段的长度。

具体地,根据如下公式增大或者减小所述拾取线段的长度:

Length1'=Length1×α×F

其中,Length1'为拾取线段修改后的长度,Length1为拾取线段修改前的长度,α为调节系数,F为手指的压力值。

(b)拾取圆柱体

如图6所示,当所述几何形态为拾取圆柱体时,所述拾取圆柱体的轴心平行于z轴,且所述拾取圆柱体的高度为W,所述拾取圆柱体的初始直径为所述拾取圆柱体直径的变化范围为0至且所述拾取圆柱体位于虚拟手中与所测手指相对应的虚拟手指之间。

进一步地,步骤6中,根据所述手指压力数据修改所述拾取几何体的大小,在拾取圆柱体的几何形态中,即包括:

获取大拇指的压力值,若大拇指的压力值增大,则减小所述拾取圆柱体的直径,若大拇指的压力值减小,则增大所述拾取圆柱体的直径;

获取除大拇指外其余手指的压力值中的最大压力值,若该最大压力值增大,则减小所述拾取圆柱体的直径,若该最大压力值减小,则增大所述拾取圆柱体的直径。

具体地,根据如下公式增大或者减小所述拾取圆柱体的直径:

Φ1'=Φ1×α×F

其中,Φ1'为拾取圆柱体修改后的直径,Φ1为拾取圆柱体修改前的直径,α为调节系数,F为手指的压力值。

(c)拾取球体

如图7所示,当所述几何形态为拾取球体时,所述拾取球体的初始直径为所述拾取球体直径的变化范围为0至且所述拾取球体位于虚拟手中与所测手指相对应的虚拟手指之间。

进一步地,步骤6中,根据所述手指压力数据修改所述拾取几何体的大小,在拾取球体的几何形态中,即包括:

获取大拇指的压力值,若大拇指的压力值增大,则减小所述拾取球体的直径,若大拇指的压力值减小,则增大所述拾取球体的直径;

获取除大拇指外其余手指的压力值中的最大压力值,若该最大压力值增大,则减小所述拾取球体的直径,若该最大压力值减小,则增大所述拾取球体的直径。

具体地,根据如下公式增大或者减小所述拾取球体的直径:

Φ2'=Φ2×α×F

其中,Φ2'为拾取球体修改后的直径,Φ2为拾取球体修改前的直径,α为调节系数,F为手指的压力值。

(d)拾取棱台

如图8所示,当所述几何形态为拾取棱台时,所述拾取棱台底面的长为H、宽为W,所述拾取棱台顶面的初始长度为L,所述拾取棱台顶面长度的变化范围为0至L,所述拾取棱台顶面的宽为W,所述拾取棱台的初始高度为R,所述拾取棱台高的变化范围为0至R。

进一步地,步骤6中,根据所述手指压力数据修改所述拾取几何体的大小,在拾取棱台的几何形态中,即包括:

获取大拇指的压力值,若大拇指的压力值增大,则减小所述拾取棱台在y轴方向上的长度,若大拇指的压力值减小,则增大所述拾取棱台在y轴方向上的长度;

获取除大拇指外其余手指的压力值中的最大压力值,若该最大压力值增大,则减小所述拾取棱台在x轴方向上的长度,若该最大压力值减小,则增大所述拾取棱台在x轴方向上的长度。

具体地,根据如下公式增大或者减小所述拾取棱台在x轴和/或y轴方向上的长度:

Length2'=Length2×α×F

其中,Length2'为拾取棱台在x轴和/或y轴方向上修改后的长度,Length2为拾取棱台在x轴和/或y轴方向上修改前的长度,α为调节系数,F为手指的压力值。

(e)拾取长方体

如图9所示,当所述几何形态为拾取长方体时,所述拾取长方体在x轴方向的初始长度值为L,在y轴方向的初始长度值为R,在z轴方向的初始长度值为W。

进一步地,步骤6中,根据所述手指压力数据修改所述拾取几何体的大小,在拾取长方体的几何形态中,即包括:

获取大拇指的压力值,若大拇指的压力值增大,则减小所述拾取长方体在y轴方向上的长度,若大拇指的压力值减小,则增大所述拾取长方体在y轴方向上的长度;

获取除大拇指外其余手指的压力值中的最大压力值,若该最大压力值增大,则减小所述拾取长方体在x轴方向上的长度,若该最大压力值减小,则增大所述拾取长方体在x轴方向上的长度。

具体地,根据如下公式增大或者减小所述拾取棱台在x轴和/或y轴方向上的长度:

Length3'=Length3×α×F

其中,Length3'为拾取长方体在x轴和/或y轴方向上修改后的长度,Length3为拾取长方体在x轴和/或y轴方向上修改前的长度,α为调节系数,F为手指的压力值。

另外,在一个具体实施例中,对于拾取长方体而言,如图10所示,所述拾取长方体的最大长度值为所述虚拟手的手掌长度L,所述拾取长方体的宽为所述虚拟手的手掌宽度W,所述拾取长方体的最大高度值为所述虚拟手的大拇指长度R。所述拾取长方体位于所述虚拟手的手掌的一侧,在图10所示的拾取长方体中,平面abgh为紧靠手掌的平面。当所述虚拟手平伸时,所述拾取长方体的长度达到L。

如图11所示,在步骤3中,所述虚拟手在虚拟现实场景中的位置数据和朝向数据,通过以下步骤确定:

步骤31、获取虚拟手在虚拟现实场景中的初始位置数据;

步骤32、通过加速度计获取用于控制虚拟手的加速度;

步骤33、通过陀螺仪获取用于控制虚拟手的角速度;

步骤34、根据所述加速度以及所述虚拟现实场景的刷新时间,确定所述虚拟手的速度;

步骤35、根据所述虚拟手的速度、所述虚拟现实场景的刷新时间、以及虚拟手在虚拟现实场景中的初始位置数据,获得所述虚拟手在虚拟现实场景中的新位置数据;

步骤36、将所述加速度和角速度进行数据融合,以获得所述虚拟手的朝向数据,其中,通过互补滤波、卡尔曼滤波和/或剃度下降法进行所述数据融合。

步骤7中,根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象,对于拾取几何体分别为拾取线段、拾取圆柱体、拾取球体、拾取棱台和拾取长方体,分别采用不同的形式,但其原理是相同的,具体如下。

(a)拾取线段

当所述几何形态为拾取线段时,步骤7中,根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象,包括:

若所述拾取对象并未处于拾取状态,则计算所述拾取线段与拾取对象的包围盒的相交部分的长度,并计算当前所述拾取线段的长度,若满足拾取条件公式(1),则将所述拾取对象确定为拾取状态:

Lintersect÷Lpick>β (1)

其中,Lintersect为所述拾取线段与拾取对象的包围盒的相交部分的长度,Lpick为当前所述拾取线段的长度,β为拾取判断阈值;

若所述拾取对象已处于拾取状态,则计算所述拾取线段与拾取对象的包围盒的相交部分的长度,并计算当前所述拾取线段的长度,若不再满足拾取条件公式(1)并且从不再满足拾取条件公式(1)的时刻开始的第一延迟时间段内均不满足拾取条件公式(1),则松开该拾取对象,并清除所述拾取对象的拾取状态。

(b)拾取圆柱体

当所述几何形态为拾取圆柱体时,步骤7中,根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象,包括:

若所述拾取对象并未处于拾取状态,则计算所述拾取圆柱体的横截面与拾取对象的包围盒的相交部分的面积,并计算当前所述拾取圆柱体的横截面面积,若满足拾取条件公式(2),则将所述拾取对象确定为拾取状态:

Aintersect1÷Apick1>β (2)

其中,Aintersect1为所述拾取圆柱体的横截面与拾取对象的包围盒的相交部分的面积,Apick1为当前所述拾取圆柱体的横截面面积,β为拾取判断阈值;

若所述拾取对象已处于拾取状态,则计算所述拾取圆柱体的横截面与拾取对象的包围盒的相交部分的面积,并计算当前所述拾取圆柱体的横截面面积,若不再满足拾取条件公式(2)并且从不再满足拾取条件公式(2)的时刻开始的第一延迟时间段内均不满足拾取条件公式(2),则松开该拾取对象,并清除所述拾取对象的拾取状态。

其中,拾取圆柱体的横截面是垂直于圆柱体轴心的任意一个平面。

(c)拾取球体

当所述几何形态为拾取球体时,步骤7中,根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象,包括:

若所述拾取对象并未处于拾取状态,则计算所述拾取球体的横截面与拾取对象的包围盒的相交部分的面积,并计算当前所述拾取球体的横截面面积,若满足拾取条件公式(3),则将所述拾取对象确定为拾取状态:

Aintersect2÷Apick2>β (3)

其中,Aintersect2为所述拾取球体的横截面与拾取对象的包围盒的相交部分的面积,Apick2为当前所述拾取球体的横截面面积,β为拾取判断阈值;

若所述拾取对象已处于拾取状态,则计算所述拾取球体的横截面与拾取对象的包围盒的相交部分的面积,并计算当前所述拾取球体的横截面面积,若不再满足拾取条件公式(3)并且从不再满足拾取条件公式(3)的时刻开始的第一延迟时间段内均不满足拾取条件公式(3),则松开该拾取对象,并清除所述拾取对象的拾取状态。

其中,拾取球体的横截面是经过球心的任意一个平面。

(d)拾取棱台

当所述几何形态为拾取棱台时,步骤7中,根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象,包括:

若所述拾取对象并未处于拾取状态,则计算所述拾取棱台与拾取对象的包围盒的相交部分的体积,并计算当前所述拾取棱台的体积,若满足拾取条件公式(4),则将所述拾取对象确定为拾取状态:

Vintersect1÷Vpick1>β (4)

其中,Vintersect1为所述拾取棱台与拾取对象的包围盒的相交部分的体积,Vpick1为当前所述拾取棱台的体积,β为拾取判断阈值;

若所述拾取对象已处于拾取状态,则计算所述拾取棱台与拾取对象的包围盒的相交部分的体积,并计算当前所述拾取棱台的体积,若不再满足拾取条件公式(4)并且从不再满足拾取条件公式(4)的时刻开始的第一延迟时间段内均不满足拾取条件公式(4),则松开该拾取对象,并清除所述拾取对象的拾取状态。

(e)拾取长方体

当所述几何形态为拾取长方体时,步骤7中,根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象,包括:

若所述拾取对象并未处于拾取状态,则计算所述拾取长方体与拾取对象的包围盒的相交部分的体积,并计算当前所述拾取长方体的体积,若满足拾取条件公式(5),则将所述拾取对象确定为拾取状态:

Vintersect2÷Vpick2>β (5)

其中,Vintersect2为所述拾取长方体与拾取对象的包围盒的相交部分的体积,Vpick2为当前所述拾取长方体的体积,β为拾取判断阈值;

若所述拾取对象已处于拾取状态,则计算所述拾取长方体与拾取对象的包围盒的相交部分的体积,并计算当前所述拾取长方体的体积,若不再满足拾取条件公式(5)并且从不再满足拾取条件公式(5)的时刻开始的第一延迟时间段内均不满足拾取条件公式(5),则松开该拾取对象,并清除所述拾取对象的拾取状态。

上述各个实施例中,β为0.8~0.95,所述第一延迟时间段的时长为0.2s~1.0s。

考虑到虚拟场景中的物体形状、体积以及重量参数各有不同,并且对于虚拟场景中的物体的拾取尽量真实,某些在现实中诸如较大或者较重的物体需要两只手进行拾取的,在虚拟场景中也应当采用两只手才能进行拾取。因此,本发明实施例中,所述方法还进一步包括:

进一步根据所述拾取对象的拾取要求,确定是否拾取该拾取对象。

其中,所述拾取对象的拾取要求包括:单手拾取或者双手拾取。

进一步地:

当所述拾取对象的宽度超出拾取体积阈值时,和/或,当所述拾取对象的重量超出拾取重量阈值时:所述拾取对象的拾取要求为双手拾取;

当所述拾取对象的宽度未超出拾取体积阈值时,和/或,当所述拾取对象的重量未超出拾取重量阈值时,所述拾取对象的拾取要求为单手拾取。

本发明还提供了一种虚拟现实场景中的拾取装置,如图12所示,包括数据采集模块1、IMU(Inertial measurement unit,惯性测量单元)模块2、物理计算模块3和通信模块4。其中,所述数据采集模块1用于接收手指压力数据。所述IMU模块2用于获取虚拟手在虚拟现实场景中的位置数据和朝向数据。所述物理计算模块3根据IMU模块2提供的数据进行计算,以构建拾取几何体,确定或修改所述拾取几何体的空间位置和空间旋转度,遍历虚拟现实场景中各个物体的包围盒,当某一物体的包围盒与所述拾取几何体的空间位置相交时,将该物体确定为拾取对象,根据所述手指压力数据修改所述拾取几何体的大小,根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象。所述通信模块4连接于所述物理计算模块3并与虚拟现实设备进行通信。当确定拾取该拾取对象时,所述物理计算模块3将拾取该拾取对象的控制信息通过所述通信模块4发送给虚拟现实设备;当确定松开该拾取对象时,所述物理计算模块3将取消拾取该拾取对象的控制信息通过所述通信模块4发送给虚拟现实设备。

所述数据采集模块1连接至数据手套、柔性传感器或者安装于手指关节的压力传感器,以通过所述数据手套、柔性传感器或者安装于手指关节的压力传感器获取收手指压力数据。

以下,对本发明的虚拟现实场景中的拾取方法和装置再次进行说明。

如图13所示,为采用本发明的虚拟现实场景中的拾取方法和装置的一个具体实现过程流程图,其包括以下步骤。

步骤a1、通过IMU模块获取虚拟手的位置信息,之后执行步骤a2。

步骤a2、由物理计算模块判断虚拟场景中是否有物体与拾取几何体相交,如果有则执行步骤a3,否则返回步骤a1。

步骤a3、通过数据采集模块获取手指压力数据,之后执行步骤a4。

步骤a4、通过IMU模块获取虚拟手的方向,之后执行步骤a5。

步骤a5、由物理计算模块判断物体是否可以被拾取,如果可以则执行步骤a6,否则返回至步骤a3。

步骤a6、通过通信模块发送拾取控制信息,以控制虚拟手拾取物体,之后执行步骤a7。

步骤a7、通过数据采集模块获取手指压力数据,之后执行步骤a8。

步骤a8、通过IMU模块获取虚拟手的方向,之后执行步骤a9。

步骤a9、由物理计算模块判断物体的拾取状态是否可以保持,如果可以则返回步骤a7,否则执行步骤a10。

本步骤a9中,判断物体的拾取状态是否可以保持,即为判断拾取几何体与拾取对象(物体)的包围盒的相交部分与拾取几何体相比是否超过拾取判断阈值,可参见公式(1)、公式(2)、公式(3)、公式(4)、公式(5)的相关说明。如果本步骤a9中,拾取几何体与拾取对象(物体)的包围盒的相交部分与拾取几何体相比超过了拾取判断阈值,即判断物体的拾取状态可以保持,随即返回执行步骤a7;如果本步骤a9中,拾取几何体与拾取对象(物体)的包围盒的相交部分与拾取几何体相比没有超过拾取判断阈值,即判断物体的拾取状态不可以保持,随即执行步骤a10。

步骤a10、由物理计算模块判断不可以保持拾取状态的持续时间是否超时,如果超时则执行步骤a11,否则返回步骤a7。

步骤a9和步骤a10的执行,实际上是完成本发明中根据所述拾取几何体和拾取对象的包围盒的相交程度,确定是否拾取该拾取对象以及确定何时松开该拾取对象的步骤。

步骤a11、通过通信模块发送释放控制信息,以控制虚拟手释放物体。

由步骤a1至步骤a11便执行完一次拾取、释放的过程。

数据采集模块:

数据采集模块主要用于获取各个手指关节的压力数据,获取的来源可以是数据手套、柔性传感器或者多个压力传感器的组合系统。

IMU模块:

IMU模块包含陀螺仪和加速度计两个部分,主要用于获取用户虚拟手在虚拟空间中的位置和朝向。

I、获取虚拟手的位置

如图14为更新虚拟手的位置流程图,包括以下步骤:

步骤b1、获取虚拟手的当前位置,之后进入步骤b2。

虚拟手的当前位置是从虚拟现实场景的程序中获取。

步骤b2、获取加速度计数据,过滤得出当前加速度,之后进入步骤b3。

加速度计数据的获取是在IMU模块中进行,对加速度计数据的数据进行过滤便可得出虚拟手的当前加速度。

步骤b3、根据当前加速度和刷新时间获得当前速度,之后进入步骤b4。

本步骤中,刷新时间是指虚拟现实场景的刷新时间,通过

速度=加速度×刷新时间

便可得出虚拟手的当前速度。

步骤b4、根据虚拟手的当前位置、当前速度、刷新时间和虚拟手的朝向,获得虚拟手的新位置,之后进入步骤b5。

本步骤中,通过

新位置=当前位置+当前速度×刷新时间×朝向

获得虚拟手的新位置。

步骤b5、通信模块将新位置信息传输至虚拟现实场景的应用程序以更新虚拟手的位置。

II、获取虚拟手的朝向

虚拟手的朝向主要通过对加速度计和陀螺仪的测量结果进行数据融合得到,可以通过互补滤波,卡尔曼滤波,梯度下降法进行数据融合。

物理计算模块:

物理计算模块主要用于对拾取的过程进行后台计算,拾取操作的计算包含三个步骤,初始化时确定拾取坐标系和用于拾取判断的“拾取几何体”以及拾取几何体的形状,确定拾取对象,判断是否可以拾取物体。

1、确定拾取坐标系和拾取几何体

(1)确定虚拟空间中虚拟手的手掌长度L、大拇指长度R和手掌宽度W,如图3所示。其中,虚拟手的长度是在虚拟手伸直的状态下从虚拟手的根部至中指尖的距离,虚拟手的宽度在虚拟手伸直的状态下最宽部分的距离,大拇指的长度是虚拟手的大拇指伸直状态下从大拇指的根部关节处至大拇指尖的距离。

(2)确定虚拟手的笛卡尔坐标系,在手掌平伸,大拇指与其余四指垂直的状态下,以食指方向为x轴正方向,大拇指方向为z轴正方向,垂直于手掌向下的方向为y轴正方向,如图4所示。

(3)根据所测手指的数量和用户的选择,确定“拾取几何体”的几何形态。

a、只能测量两根手指的压力:

如果只能测量包括大拇指在内两个手指的压力数据,则“拾取几何体”为一条线段,即拾取线段。该线段位于XOZ平面,初始的长度为如图5所示。由于用户拾取的动作一般是除大拇指以外的四个指头一起动,因此,只要监测其中一个手指的压力变化即可,因此,可以将线段位置处理为位于XOZ平面。

b、能测量三根手指的压力:

如果除了大拇指,还能测量其他四个手指中两根手指的压力数据,则可以跟a中一样选择线段作为“拾取几何体”,此外,还可以选择圆柱体或球体(即拾取圆柱体、拾取几何体)作为“拾取几何体”;

若选择圆柱体为“拾取几何体”,则圆柱体高度为W,初始的直径为如图6所示。

若选择球体为“拾取几何体”,则球体初始的直径为如图7所示。

c、能测量三根以上手指的压力:

如果能测量更多手指的压力数据,则可以选择a和b中所有的几何体作为“拾取几何体”,此外,还可以选择棱台(如图8所示)、长方体(如图9所示)、金字塔或者其它规则多面体作为“拾取几何体”。

若选择棱台为“拾取几何体”,则棱台底面的长度为H且恒定,棱台底面的宽为W且恒定,棱台顶面的长度初始为L,变化范围为0至L,棱台顶面的宽为W且恒定,棱台的高度初始为R,变化范围为0至R,即其初始化为在x轴方向上的长度为L,在y轴方向上长度为R,在z轴方向上长度为W,如图8所示。

若选择长方体为“拾取几何体”,则可以初始化为在x轴方向上长度为L,在y轴方向上长度为R,在z轴方向上长度为W,如图10所示。

2、确定拾取对象

(1)在虚拟现实场景的每帧画面刷新前,根据IMU模块得出的虚拟手的位置和朝向,修改拾取长方体的空间位置和空间旋转度。

由于拾取长方体是参照虚拟手的位置和朝向而设定,因而拾取长方体的空间位置会随虚拟手的位置的变化而同步变化,同样,拾取长方体的空间旋转度会随虚拟手的朝向的变化而旋转。

(2)遍历场景中各个物体的包围盒,判断若某个拾取对象的包围盒与拾取长方体相交,则将该拾取对象作为当前拾取对象。

(3)若有多个物体的包围盒与拾取长方体相交,则取包围盒最接近拾取长方体中心的物体作为当前拾取对象。

3、判断物体拾取

(1)在每帧画面刷新前,根据数据采集模块得到的各个手指的压力值,修改拾取几何体的大小,具体修改方法如下:

a、用线段作为“拾取几何体”:

获取大拇指的压力数据:

若压力值增大,则减小直线的长度;

若压力值减小,则增大直线的长度;

获取其他四指的压力数据,选取其中最大的压力数据:

若压力值增大,则减小直线的长度;

若压力值减小,则增大直线的长度;

b、用圆柱体或球体作为“拾取几何体”:

获取大拇指的压力数据:

若压力值增大,则减小圆柱体或球体的直径的长度;

若压力值减小,则增大圆柱体或球体的直径的长度;

获取其他四指的压力数据,选取其中最大的压力数据:

若压力值增大,则减小圆柱体或球体的直径的长度;

若压力值减小,则增大圆柱体或球体的直径的长度;

c、其他类型的“拾取几何体”:

获取大拇指的压力数据:

若压力值增大,则减小Y方向上的长度;

若压力值减小,则增大Y方向上的长度;

获取其他四指的压力数据,选取其中最大的压力数据:

若压力值增大,则减小X方向上的长度;

若压力值减小,则增大X方向上的长度。

在上述a、b、c中,根据压力增大或减小长度的计算采用如下公式

Length3'=Length3×α×F

其中,Length3'为拾取长方体在x轴和/或y轴方向上修改后的长度,Length3为拾取长方体在x轴和/或y轴方向上修改前的长度,α为调节系数,F为手指的压力值。其中,α与数据采集模块的敏感度有关,取值范围在0~1区间内。

(2)若没有处于拾取状态,则按照以下方法进行拾取判断:

a、用线段作为“拾取几何体”:

计算线段的长度,记为“Lpick”,计算线段与拾取对象包围盒相交部分的长度,记为“Lintersect”。定义β为拾取判断阈值,初始化值为0.9,取值范围为0.8~0.95,则拾取条件如公式(1)

Lintersect÷Lpick>β (1)

b、用圆柱体作为“拾取几何体”:

计算圆柱体横截面的面积,记为“Apick1”,计算横截面中与拾取对象包围盒相交部分的面积,记为“Aintersect1”。定义β为拾取判断阈值,初始化值为0.9,取值范围为0.8~0.95,则拾取条件如公式(2)

Aintersect1÷Apick1>β (2)

c、用球体作为“拾取几何体”:

计算球体横截面的面积,记为“Apick2”,计算横截面中与拾取对象包围盒相交部分的面积,记为“Aintersect2”。定义β为拾取判断阈值,初始化值为0.9,取值范围为0.8~0.95,则拾取条件如公式(3)

Aintersect2÷Apick2>β (3)

d、用棱台作为“拾取几何体”:

计算棱台的体积,记为“Vpick1”,计算棱台与拾取对象包围盒相交部分的体积,记为“Vintersect1”。定义β为拾取判断阈值,初始化值为0.9,取值范围为0.8~0.95,则拾取条件如公式(4)

Vintersect1÷Vpick1>β (4)

e、用长方体作为“拾取几何体”:

计算长方体的体积,记为“Vpick2”,计算长方体与拾取对象包围盒相交部分的体积,记为“Vintersect2”。定义β为拾取判断阈值,初始化值为0.9,取值范围为0.8~0.95,则拾取条件如公式(5)

Vintersect2÷Vpick2>β (5)

其它类型的“拾取几何体”如金字塔或者其它规则多面体,拾取条件的设定可参照上述d、e的棱台和长方体的拾取条件进行设定,不再赘述。

对于各种类型的“拾取几何体”,若满足对应的拾取判断条件,则修改状态为拾取该对象,否则继续判断。

(3)若处于拾取状态,判断“拾取几何体”与拾取对象包围盒的相交关系,若不满足上述(2)中a、b、c、d、e中公式(1)至公式(5)的对应拾取条件,则进入(4),否则继续判断;

(4)在时间t的范围内,每帧判断“拾取几何体”是否满足上述(2)中a、b、c、d、e中公式(1)至公式(5)的对应拾取条件,若在每帧都不满足,则松开物体,清除拾取状态,否则再从t时间开始重新判断,其中,t的时间可以由应用程序配置,范围为0.2s到1.0s。

通信模块:

通信模块例如蓝牙模块,蓝牙模块主要通过蓝牙协议将控制状态传输到虚拟现实设备(即运行虚拟现实场景软件的设备,亦即搭载所述虚拟现实场景的硬件平台),当切换到拾取状态时发送物体被拾取的消息,当拾取状态被取消时,发送取消拾取状态的消息。

本发明的虚拟现实场景中的拾取方法和装置实施例,用于实现虚拟现实场景中的例如以下各种拾取场景。

场景1:

用户从一堆球中拾取单个球:

(1)物理计算模块根据虚拟手的大小初始化“拾取几何体”;

(2)用户的虚拟手靠近待拾取的球,如图15A所示,IMU模块获取虚拟手在虚拟场景中的位置;

(3)物理计算模块检测到有球和“拾取几何体”相交,选取离“拾取几何体”最近的球作为拾取对象;

(4)用户弯曲手指试图拾取该球,如图15B所示,数据采集模块获取各个手指的压力数据;

(5)物理计算模块使用压力数据修改“拾取几何体”的大小;

(6)物理计算模块根据当前的“拾取几何体”判断球是否可以被拾取;

(7)当“拾取几何体”足够小的时候,物理计算模块判断出球可以被拾取,修改为拾取状态;

(8)通信模块发送拾取状态到VR app(虚拟现实应用程序,运行于虚拟现实设备),虚拟场景刷新并显示出球被用户拾取,如图15C所示。

场景2:

只监测两个手指的压力,选取直线为“拾取几何体”。

(1)用户选取线段为“拾取几何体”,如图16A所示,物理计算模块初始化“拾取几何体”为一条线段;

(2)用户试图拾取一根火柴并移动手,IMU模块获取虚拟手在虚拟场景中的位置;

(3)物理计算模块检测到线段与火柴相交,选取火柴为拾取对象;

(4)用户弯曲手指开始拾取火柴,如图16B所示,数据采集模块获取各个手指的压力数据;

(5)物理计算模块根据压力数据修改线段的长度;

(6)物理计算模块计算当前线段的长度和相交部分的长度,判断是否可以拾取火柴;

(7)当相交的部分足够长的时候,物理计算模块判断火柴可以被拾取,修改拾取状态为火柴被拾取;

(8)通信模块发送拾取状态到VR app,虚拟场景刷新并显示出火柴被用户拾取,如图16C所示。

场景3:

监测三个手指的压力,选取圆柱体为“拾取几何体”。

(1)用户选取圆柱体为“拾取几何体”,如图17A所示,物理计算模块初始化“拾取几何体”为圆柱体;

(2)用户试图拾取一个水杯并移动手,IMU模块获取虚拟手在虚拟场景中的位置;

(3)物理计算模块检测到圆柱体与水杯相交,选取水杯为拾取对象;

(4)用户弯曲手指开始拾取水杯,如图17B所示,数据采集模块获取各个手指的压力数据;

(5)物理计算模块根据压力数据修改圆柱体直径的大小;

(6)物理计算模块计算当前圆柱体的横截面面积和横截面在相交部分的面积,判断是否可以拾取水杯;

(7)当相交的部分足够大的时候,物理计算模块判断水杯可以被拾取,修改拾取状态为水杯被拾取;

(8)通信模块发送拾取状态到VR app,虚拟场景刷新并显示出水杯被用户拾取,如图17C所示。

场景4:

监测三个手指的压力,选取球体为“拾取几何体”:

(1)用户选取球体为“拾取几何体”,如图18A所示,物理计算模块初始化“拾取几何体”为球体;

(2)用户试图拾取一个苹果并移动手,IMU模块获取虚拟手在虚拟场景中的位置;

(3)物理计算模块检测到球体与苹果相交,选取苹果为拾取对象;

(4)用户弯曲手指开始拾取苹果,如图18B所示,数据采集模块获取各个手指的压力数据;

(5)物理计算模块根据压力数据修改球体的直径;

(6)物理计算模块计算当前球体的横截面面积和横截面在相交部分的面积,判断是否可以拾取苹果;

(7)当相交的部分足够大的时候,物理计算模块判断苹果可以被拾取,修改拾取状态为苹果被拾取;

(8)通信模块发送拾取状态到VR app,虚拟场景刷新并显示出苹果被用户拾取,如图18C所示。

场景5:

监测三个以上手指的压力,选取长方体为“拾取几何体”:

(1)用户选取长方体为“拾取几何体”,如图19A所示,物理计算模块初始化“拾取几何体”为长方体;

(2)用户试图拾取一个铅笔盒并移动手,IMU模块获取虚拟手在虚拟场景中的位置;

(3)物理计算模块检测到长方体与铅笔盒相交,选取铅笔盒为拾取对象;

(4)用户弯曲手指开始拾取铅笔盒,如图19B所示,数据采集模块获取各个手指的压力数据;

(5)物理计算模块根据压力数据修改长方体的大小;

(6)物理计算模块计算当前长方体的体积和相交部分的体积,判断是否可以拾取铅笔盒;

(7)当相交的部分足够大的时候,物理计算模块判断铅笔盒可以被拾取,修改拾取状态为铅笔盒被拾取;

(8)通信模块发送拾取状态到VR app,虚拟场景刷新并显示出铅笔盒被用户拾取,如图19C所示。

场景6:

监测三个以上手指的压力,选取棱台为“拾取几何体”:

(1)用户选取棱台为“拾取几何体”,如图20A所示,物理计算模块初始化“拾取几何体”为棱台;

(2)用户试图拾取一个饭盒并移动手,IMU模块获取虚拟手在虚拟场景中的位置;

(3)物理计算模块检测到棱台与饭盒相交,选取饭盒为拾取对象;

(4)用户弯曲手指开始拾取饭盒,如图20B所示,数据采集模块获取各个手指的压力数据;

(5)物理计算模块根据压力数据修改棱台的大小;

(6)物理计算模块计算当前棱台的体积和相交部分的体积,判断是否可以拾取饭盒;

(7)当相交的部分足够大的时候,物理计算模块判断饭盒可以被拾取,修改拾取状态为饭盒被拾取;

(8)蓝牙模块发送拾取状态到VR app,虚拟场景刷新并显示出饭盒被用户拾取,如图20C所示。

场景7:

用户试图拾取虚拟场景中的大体积物体。

(1)虚拟场景中有一个大箱子被定义为必须用两只手去拾取;

(2)物理计算模块初始化每只手的“拾取几何体”;

(3)用户试图拾取大箱子并移动手,IMU模块获取虚拟手在虚拟场景中的位置;

(4)物理计算模块检测到一只手的“拾取几何体”与大箱子相交,选取大箱子为拾取对象;

(5)数据采集模块获取各根手指的压力数据;

(6)物理计算模块针对当前每只手,计算“拾取几何体”并判断大箱子是否满足每只手的拾取条件;

(7)当仅一只手的“拾取几何体”满足拾取条件的时候,大箱子不会被拾取,如图21A所示;

(8)当两只手的“拾取几何体”都满足拾取条件时,如图21B所示,物理计算模块修改状态为大箱子被拾取;

(9)通信模块发送拾取状态到VR app,虚拟场景刷新并显示出大箱子被用户用双手拾取,如图21C所示。

场景8:

用户试图拾取虚拟场景中的重物

(1)虚拟场景中有一个很重的铅球被定义为必须用两个手去拾取。

(2)物理计算模块初始化每只手的“拾取几何体”;

(3)用户试图拾取铅球并移动手,IMU模块获取虚拟手在虚拟场景中的位置;

(4)物理计算模块检测到一只手的“拾取几何体”与铅球相交,选取铅球为拾取对象;

(5)数据采集模块获取各根手指的压力数据;

(6)物理计算模块对当前每只手,计算“拾取几何体”并判断铅球是否满足每只手的拾取条件;

(7)当一只手的“拾取几何体”满足拾取条件的时候,铅球不会被拾取,如图22A所示;

(8)当两只手的“拾取几何体”都满足拾取条件时,如图22B所示,物理计算模块修改状态为铅球被拾取;

(9)通信模块发送拾取状态到VR app,虚拟场景刷新并显示出铅球被用户用双手拾取,如图22C所示。

场景9:

本场景中,若一个VR app要求必须使用现有的手势识别的拾取方法,则在该VR app启动前会询问用户是否使用现有的手势识别的拾取方法以获得更高的精度,如图23所示的询问用户是否使用现有的手势识别的拾取方法的界面窗口;若AR app没有严格的要求,则不询问用户是否使用现有的手势识别。

场景10:

本场景中,本发明实施例的方法可以在“拾取几何体”和现有的手势识别之间自动切换(如果交互设备支持现有的手势识别的方法)。

(1)检测交互设备,如果支持现有的手势识别的方法,进入步骤(2);

(2)检测交互设备的芯片型号,以确定芯片的计算能力,如果芯片的计算能力足够强大,则自动选择现有的手势识别作为拾取方法,否则选择本发明是实力的方法通过“拾取几何体”实现拾取;

(3)使用例如弹出消息显示当前所采用的拾取方法,如图24A、图24B所示。

场景11:

本发明实施例的拾取方法也可以根据VR设备的电池状态在“拾取几何体”和现有的手势识别之间自动切换(如果交互设备支持现有的手势识别的方法)。

(1)启动VR app。若VR设备正处于节电模式下,则选择本发明的拾取方法通过“拾取几何体”实现拾取;

(2)若VR app正在使用现有的手势识别作为拾取方法,当VR设备进入节电模式时,自动切换到本发明的拾取方法通过“拾取几何体”实现拾取,如图25所示。

场景12:

本场景中可以根据VR设备的运行状态在本发明实施例的拾取方法和现有的手势识别之间自动切换(如果交互设备支持现有的手势识别的方法)。

(1)启动VR app,记录启动时使用的拾取方法,如果是现有的手势识别的方法,则进入(2)和(3);

(2)若温度升高超过VR设备的警戒线时,自动切换到本发明实施例的拾取方法,如图26A所示,并进入(4);

(3)若画面帧数不足时,自动切换到本发明实施例的拾取方法,如图26B所示,并进入(5);

(4)当温度恢复正常并维持一段时间,自动切换到现有的手势识别拾取方法,如图26C所示;

(5)当帧数恢复流畅并维持一段时间,自动切换到现有的手势识别拾取方法,如图26C所示。

本发明的虚拟现实场景中的拾取方法和装置,基于多触点压力判断虚拟现实场景中物体的拾取,其针对当前的虚拟现实设备提供了真实并且高效的拾取操作,与现有技术相比,本发明技术方案只需要对多触点的手部压力进行拾取判断,无需对具体的每个手指进行手势识别,降低了软件计算的复杂度,并且比现有的精确拾取判断方法更为高效。本发明同时提高了用户虚拟现实交互的沉浸感,提升了用户体验。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1