Leap Motion 的原理(转)

從 API 的角度大概說一下。

Leap Motion 傳感器的結構:



大體上,Leap 傳感器根據內置的兩個攝像頭從不同角度捕捉的畫面,重建出手掌在真實世界三維空間的運動信息。檢測的範圍大體在傳感器上方 25 毫米到 600 毫米之間,檢測的空間大體是一個倒四棱錐體。

首先,Leap Motion 傳感器會建立一個直角座標系,座標的原點是傳感器的中心,座標的 X 軸平行於傳感器,指向屏幕右方。Y 軸指向上方。Z 軸指向背離屏幕的方向。單位爲真實世界的毫米。如圖:


在使用過程中, Leap Motion 傳感器會定期的發送關於手的運動信息,每份這樣的信息稱爲「幀」( frame )。每一個這樣的幀包含檢測到的:

  • 所有手掌的列表及信息;
  • 所有手指的列表及信息;
  • 手持工具(細的、筆直的、比手指長的東西,例如一枝筆)的列表及信息;
  • 所有可指向對象(Pointable Object),即所有手指和工具的列表及信息;

Leap 傳感器會給所有這些分配一個唯一標識(ID),在手掌、手指、工具保持在視野範圍內時,是不會改變的。根據這些 ID,可以通過 Frame::hand( ) , Frame::finger( ) 等函數來查詢每個運動對象的信息。

Leap 可以根據每幀和前幀檢測到的數據,生成運動信息。例如,若檢測到兩隻手,並且兩隻手都超一個方向移動,就認爲是平移;若是像握着球一樣轉動,則記爲旋轉。若兩隻手靠近或分開,則記爲縮放。所生成的數據包含:

  • 旋轉的軸向向量;
  • 旋轉的角度(順時針爲正);
  • 描述旋轉的矩陣;
  • 縮放因子;
  • 平移向量;
對於每隻手,可以檢測到如下信息:

  • 手掌中心的位置(三維向量,相對於傳感器座標原點,毫米爲單位);
  • 手掌移動的速度(毫米每秒);
  • 手掌的法向量(垂直於手掌平面,從手心指向外);
  • 手掌朝向的方向;
  • 根據手掌彎曲的弧度確定的虛擬球體的中心;
  • 根據手掌彎曲的弧度確定的虛擬球體的半徑;

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


「手掌球」的圓心和半徑:


對於每個手掌,亦可檢測出平移、旋轉(如轉動手腕帶動手掌轉動)、縮放(如手指分開、聚合)的信息。檢測的數據如全局變換一樣,包括:

  • 旋轉的軸向向量;
  • 旋轉的角度(順時針爲正);
  • 描述旋轉的矩陣;
  • 縮放因子;
  • 平移向量;
    Leap 除了可以檢測手指外,也可以檢測手持的工具。像上文所說的,就是細的、筆直的、比手指長的物件:



    對於手指和工具,會統一地稱爲可指向對象(Pointable Object,抱歉不太會翻譯),每個 Pointable Object 包含了這些信息:

    • 長度;
    • 寬度;
    • 方向;
    • 指尖位置;
    • 指尖速度;

    方向和指尖位置如下圖:
    根據全局的信息、運動變換,手掌、手指和工具的信息和變換,開發者就可以靠這些來製作遊戲、程序了。

    大概就是這樣了~

    參考:
    Leap Motion 的開發者文檔 Leap Motion | Developers

    转自:http://www.zhihu.com/question/20252985/answer/15966833
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值