您当前的位置:首页 VR硬件 输入交互 正文

Leap Motion运行原理介绍

查看: 573| 评论: 0 2016-12-25 11:37 PM| 发布者: administrator

52VR非常关注定位与输入交互这一块的VR技术,leap Motion使用的是一种基于计算机视觉原理的识别技术。目前在业内比较有代表性的就是Leap Motion的手势识别技术,当然这并非Leap Motion独有的技术,Hololens上同样搭载该技术。从 API 的角度大概说一下。
Leap Motion 传感器的结构:

233209mymby1mmtkkk0ypm

大体上,Leap 传感器根据内置的两个摄像头从不同角度捕捉的画面,重建出手掌在真实世界三维空间的运动信息。检测的范围大体在传感器上方 25 毫米到 600 毫米之间,检测的空间大体是一个倒四棱锥体。

首先,Leap Motion 传感器会建立一个直角座标系,座标的原点是传感器的中心,座标的 X 轴平行于传感器,指向屏幕右方。Y 轴指向上方。Z 轴指向背离屏幕的方向。单位为真实世界的毫米。如图:

233209nu7jj8udeir6uwr2


在使用过程中, Leap Motion 传感器会定期的发送关于手的运动信息,每份这样的信息称为“帧”( frame )。每一个这样的帧包含检测到的:

  • 所有手掌的列表及信息;
  • 所有手指的列表及信息;
  • 手持工具(细的、笔直的、比手指长的东西,例如一枝笔)的列表及信息;
  • 所有可指向对象(Pointable Object),即所有手指和工具的列表及信息;

Leap 传感器会给所有这些分配一个唯一标识(ID),在手掌、手指、工具保持在视野范围内时,是不会改变的。根据这些 ID,可以通过 Frame::hand( ) , Frame::finger( ) 等函数来查询每个运动对象的信息。

Leap 可以根据每帧和前帧检测到的数据,生成运动信息。例如,若检测到两只手,并且两只手都超一个方向移动,就认为是平移;若是像握着球一样转动,则记为旋转。若两只手靠近或分开,则记为缩放。所生成的数据包含:

  • 旋转的轴向向量;
  • 旋转的角度(顺时针为正);
  • 描述旋转的矩阵;
  • 缩放因子;
  • 平移向量;
对于每只手,可以检测到如下信息:

  • 手掌中心的位置(三维向量,相对于传感器座标原点,毫米为单位);
  • 手掌移动的速度(毫米每秒);
  • 手掌的法向量(垂直于手掌平面,从手心指向外);
  • 手掌朝向的方向;
  • 根据手掌弯曲的弧度确定的虚拟球体的中心;
  • 根据手掌弯曲的弧度确定的虚拟球体的半径;

其中,手掌的法向量和方向如下图所示:

233210im66e9hxryeyxe5y

“手掌球”的圆心和半径:

233210gswleemgw4eicib4

对于每个手掌,亦可检测出平移、旋转(如转动手腕带动手掌转动)、缩放(如手指分开、聚合)的信息。检测的数据如全局变换一样,包括:

  • 旋转的轴向向量;
  • 旋转的角度(顺时针为正);
  • 描述旋转的矩阵;
  • 缩放因子;
  • 平移向量;

  • Leap 除了可以检测手指外,也可以检测手持的工具。像上文所说的,就是细的、笔直的、比手指长的物件:

    233211x48gabgps2laybbs


    对于手指和工具,会统一地称为可指向对象(Pointable Object,抱歉不太会翻译),每个 Pointable Object 包含了这些信息:

    • 长度;
    • 宽度;
    • 方向;
    • 指尖位置;
    • 指尖速度;

    方向和指尖位置如下图:

    233211whj5x1vhvi1ip5vh

    根据全局的信息、运动变换,手掌、手指和工具的信息和变换,开发者就可以靠这些来制作游戏、程序了。

    参考:
    Leap Motion 的开发者文档 Leap Motion | Developers
    52VR.COM微信扫一扫
    52vr公众号
    专注于VR的学习、开发和人才交流

    52VR开发交流

    相关推荐

    已有 0 人参与

    发表评论

    您需要登录才可以回帖 登录 | 立即注册

    手机版|VR开发网 |网站地图 统计  津ICP备16006248号

    GMT+8, 2017-6-27 03:10 AM

    返回顶部