LeapMotion体感的原理是什么?
了解完leapmotion是什么,再带大家了解一下leapmotion的原理。本文作者从API的角度大概描述了leapmotion的原理,图片解析很到位,是个不错的教程。
Leap Motion体感器的结构图
大体上,Leap 传感器根据内置的两个摄像头从不同角度捕捉的画面,重建出手掌在真实世界三维空间的运动信息。检测的范围大体在传感器上方25 毫米到600 毫米之间,检测的空间大体是一个倒四棱锥体。
首先,Leap Motion 传感器会建立一个直角座标系,座标的原点是传感器的中??心,座标的X 轴平行于传感器,指向屏幕右方。 Y 轴指向上方。 Z 轴指向背离屏幕的方向。单位为真实世界的毫米。如图: 在使用过程中,大跃进运动传感器会定期的发送关于手的运动信息,18 per这样的信息称为“帧的”(框架)。每一个这样的帧包含检测到的:
Leap 传感器会给所有这些分配一个唯一标识(ID),在手掌、手指、工具保持在视野范围内时,是不会改变的。根据这些ID,可以通过Frame::hand( ) , Frame::finger( ) 等函数来查询每个运动对象的信息。
Leap 可以根据每帧和前帧检测到的数据,生成运动信息。例如,若检测到两只手,并且两只手都超一个方向移动,就认为是平移;若是像握着球一样转动,则记为旋转。若两只手靠近或分开,则记为缩放。所生成的数据包含:
对于每只手,可以检测到如下信息:
其中,手掌的法向量和方向如下图所示:
「手掌球」的圆心和半径: 对于每个手掌,亦可检测出平移、旋转(如转动手腕带动手掌转动)、缩放(如手指分开、聚合)的信息。检测的数据如全局变换一样,包括:
Leap 除了可以检测手指外,也可以检测手持的工具。像上文所说的,就是细的、笔直的、比手指长的物件:
对于手指和工具,会统一地称为可指向对象对象(Pointable,抱歉不太会翻译),每个Pointable对象包含了这些信息:
Leap Motion体感器的结构图
大体上,Leap 传感器根据内置的两个摄像头从不同角度捕捉的画面,重建出手掌在真实世界三维空间的运动信息。检测的范围大体在传感器上方25 毫米到600 毫米之间,检测的空间大体是一个倒四棱锥体。
首先,Leap Motion 传感器会建立一个直角座标系,座标的原点是传感器的中??心,座标的X 轴平行于传感器,指向屏幕右方。 Y 轴指向上方。 Z 轴指向背离屏幕的方向。单位为真实世界的毫米。如图: 在使用过程中,大跃进运动传感器会定期的发送关于手的运动信息,18 per这样的信息称为“帧的”(框架)。每一个这样的帧包含检测到的:
- 所有手掌的列表及信息;
- 所有手指的列表及信息;
- 手持工具(细的,笔直的,比手指长的东西,例如一枝笔)的列表及信息;
- 所有可指向对象(Pointable对象),即所有手指和工具的列表及信息;
Leap 传感器会给所有这些分配一个唯一标识(ID),在手掌、手指、工具保持在视野范围内时,是不会改变的。根据这些ID,可以通过Frame::hand( ) , Frame::finger( ) 等函数来查询每个运动对象的信息。
Leap 可以根据每帧和前帧检测到的数据,生成运动信息。例如,若检测到两只手,并且两只手都超一个方向移动,就认为是平移;若是像握着球一样转动,则记为旋转。若两只手靠近或分开,则记为缩放。所生成的数据包含:
- 旋转的轴向向量;
- 旋转的角度(顺时针为正);
- 描述旋转的矩阵;
- 缩放因子;
- 平移向量;
对于每只手,可以检测到如下信息:
- 手掌中心的位置(三维向量,相对于传感器座标原点,毫米为单位);
- 手掌移动的速度(毫米每秒);
- 手掌的法向量(垂直于手掌平面,从手心指向外);
- 手掌朝向的方向;
- 根据手掌弯曲的弧度确定的虚拟球体的中心;
- 根据手掌弯曲的弧度确定的虚拟球体的半径;
其中,手掌的法向量和方向如下图所示:
「手掌球」的圆心和半径: 对于每个手掌,亦可检测出平移、旋转(如转动手腕带动手掌转动)、缩放(如手指分开、聚合)的信息。检测的数据如全局变换一样,包括:
- 旋转的轴向向量;
- 旋转的角度(顺时针为正);
- 描述旋转的矩阵;
- 缩放因子;
- 平移向量;
Leap 除了可以检测手指外,也可以检测手持的工具。像上文所说的,就是细的、笔直的、比手指长的物件:
对于手指和工具,会统一地称为可指向对象对象(Pointable,抱歉不太会翻译),每个Pointable对象包含了这些信息:
- 长度;
- 宽度;
- 方向;
- 指尖位置;
- 指尖速度;
上一篇:LeapMotion是什么?[ 01-17 ]
下一篇:3d眼镜有几种[ 01-17 ]