【LeapMotion】LeapMotion学习笔记

Author:Solare @BUAA SCSE 2012

 

一、前言

最近在学习LeapMotion开发,现将学习过程保存在这里,方便查找和复习,最终整理成一份成型资料,作为BUAA SCSE资料保存。

 

二、LeapMotion介绍

Leap Motion是一个体感控制器,由Leap公司生产。售价约人民币500元。(leap:跳; motion:动作;移动;手势)

Leap Motion体感控制器(以下简称LM)支持Windows 7,Windows 8.x以及Mac OS X 10.7以上版本操作系统。

 

三、LM体感的原理

(以下资料大部分来自知乎)

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

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

使用过程中,LM定期发送关于手的运动信息,这样的信息称为“帧”。每一个帧包含检测到的:

  1. 所有手掌的列表及信息;
  2. 所有手指的列表及信息;
  3. 手持工具(细的,笔直的,比手指长的东西,如一支笔)的列表及信息;
  4. 所有可指向对象(Pointable对象)的列表及信息。

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

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

  1. 旋转的轴向向量;
  2. 旋转的角度(顺时针为正);
  3. 描述旋转的矩阵(--);
  4. 缩放因子;
  5. 平移向量;

对于每只手,可以检测到如下信息:

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

手掌的法向量说明图片

 对于手指和工具,统一的称为Pointable对象,每个对象包含以下信息:

  1. 长度;
  2. 宽度;
  3. 方向;
  4. 指尖位置;
  5. 指尖速度;

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

posted @ 2014-07-12 10:11  黄天河·Solare  阅读(922)  评论(0编辑  收藏  举报