【新手入门】全网最全Leap Motion技术总结

不好意思有点标题党了hhh~

本科毕设使用了Leap Motion完成了一个双手交互体验的小程序,在查阅相关资料时发现网上的资料良莠不齐、不够系统,常常是花费了很多精力搜集资料却得不到想要的答案。正好借此机会总结一下自己走过的坑,回馈给我很多帮助的CSDN平台,如果能对后人有一点帮助就有意义。

Leap Motion官方案例中有很多酷炫的效果,但是实现起来并不那么美好。识别精度确实很高,但因为技术实现原理的缺陷,并不能做到十分准确。如果使用时间较长还会有设备发热的问题。在人机交互方面,用户一直举着双手会很累,不够用户友好。现有的研究更多是讨论优化识别算法、训练模型、或是和其他领域结合做一些实际应用的效果,并没有很好的应用前景。

学习资料

上传了一个LeapMotion学习资料包,内含适用于unity2019+的SDK开发工具包,包含Core/Hands/Interaction Engine;学习资料pdf电子版,包含四本英文书和一个中文翻译的官方开发文档。
LeapMotion学习资料包

开发工具包下载

开发者网站下载 Leap Motion – Unity SDK
https://developer.leapmotion.com/unity

GitHub下载更全的 Leap Motion – Unity Modules
https://github.com/leapmotion/UnityModules

开发工具包讲解

Leap Motion – Unity官方SDK技术手册
https://leapmotion.github.io/UnityModules/

b站教学视频:Unity – Leap Motion官方示例讲解
https://www.bilibili.com/video/BV1oT4y1N7hD

应用实例

官方案例
https://gallery.leapmotion.com/

游戏应用
https://itch.io/games/leap-motion

Leap Motion 3D Jam
https://www.roadtovr.com/leap-motion-3d-jam-winners-announced-indiecade-oculus-rift-virtual-reality/

其他

官方技术论坛
https://forums.leapmotion.com/c/development

技术原理介绍

(这一部分本来是写在论文里的,在指导老师的建议下删掉了很多,但也还有一部分还在最终版的论文里,不知道发在这里会不会有风险kkk,如侵删hhh。都是自己查阅各种资料总结汇总的,对正确性不敢保证,仅供参考。)

技术原理

Leap Motion体感交互器使用光学手势追踪技术,拥有两个带广角镜头的高帧率灰度红外摄像头和四个红外LED,最佳的工作环境是可产生清晰的、高对比度对象轮廓的光照环境,如图2.1所示。顶层滤光层只允许红外光波进出,对摄像头所采集的数据进行了初步处理,简化后期运算复杂度;采用双目摄像头通过双目立体视觉成像原理提取手部三维位置,建立手部立体模型;采用灰度摄像头减少运算数据量,提高算法速度。基于以上硬件和算法的优化,使得Leap Motion每秒可采集200帧手部数据,精度可达0.01mm。
Leap Motion可追踪的区域范围在空间中呈一个倒四棱锥型,水平视场角达140°,垂直视场角达120°,可交互深度在10cm-60cm之间,最大不超过80cm,如图2.2所示。Leap Motion的尺寸大小为80mm长*30mm宽11.3mm高,重量只有32g。
图2.1 Leap Motion结构图
图2.1 Leap Motion结构图 图2.2 Leap Motion可识别区域
图2.2 Leap Motion可识别区域

Leap Motion针对PC端支持Windows和Mac系统,针对VR设备支持适配Oculus Rift和HTC Vive头盔,编程语言支持C++、C#、Java、JavaScript、Python等,可使用Unity和Unreal引擎进行开发。官网中针对各开发环境和平台提供有稳定的SDK工具包和详细的学习文档,对开发者非常友好。

追踪数据

当有手进入Leap Motion的识别区域时,它会进行自动追踪,输出一系列实时刷新的数据帧。帧数据(Frame)是Leap Motion数据的核心,在每一帧数据中包含了所有有关手部运动的信息,如所有的手(Hands)、手指(Fingers)、端点物体(Pointables)、工具(Tools)、手势(Gestures)及其位置(Position)、速率(Velocity)、方向(Direction)、旋转角度(Rotation)等信息,详细数据如图2.3所示。

对于每只手生成的手部模型,如图2.4所示,具体包含大拇指(Thumb)、食指(Index)、中指(Middle)、无名指(Ring)、小拇指(Pinky)和手腕关节(Wrist);对于每根手指,包含远端指骨(Distal)、中间指骨(Intermediate)、近端指骨(Proximal)和掌骨(Metacarpal)。Leap Motion模拟了真实人手的骨骼关节,通过每帧信息的更新获取,能够实现实时、快速、准确的手部追踪效果。
在这里插入图片描述
图2.3 帧数据信息在这里插入图片描述
图2.4 手部骨骼信息

Leap Motion导入Unity3D

Leap Motion SDK
在Leap Motion开发者网站中可以下载到官方发布的Unity开发工具包,如图2.5所示,在Unity3D项目中点击Assets->Import package即可导入SDK工具包进行开发。
在这里插入图片描述
图2.5 Leap Motion SDK

Core是最重要的SDK包,提供了封装好的Leap Motion和Unity3D的接口服务,使得开发者能够直接在Unity3D中调用Leap Motion的全部手部数据,为后续开发工作奠定基础。Hands SDK包中预置了不同的手部模型,同时提供针对个性化的手部模型fbx文件进行自动绑定骨骼的功能,以满足开发者的不同风格需求。Interaction Engine SDK包中提供了手和物体的物理交互方法,如靠近悬停、触摸、抓取、投掷等功能,并给出了八个示例场景供开发者学习使用。

导入工具包后,为了将物理时间步长与渲染帧速率设置相同,需要修改项目的Fixed Timestep为0.0111111(相当于每秒90帧)。另外,经多次试验,发现将重力设置为现实世界的一半时,使用物理对象的反应更自然,故将项目Gravity中的Y轴设置为-4.905。上述操作的具体流程为Edit->Project Settings->Time-Fixed Timestep/Physics-Gravity-Y。

Leap Rig预制体
Leap Motion针对桌面和VR设备分别提供了Desktop Leap Rig和XR Leap Rig两种不同的Leap Rig预制体,以适应不同的硬件设备需求。
如图2.6和图2.7所示,二者均包含了提供Leap服务的Leap Provider组件、手部模型Hand Models模块、提供物理交互的Interaction Manager模块,二者的区别主要有以下两点:一,提供Leap服务的组件分别为Leap Service Provider和Leap XR Service Provider。其中,Leap XR Service Provider直接放置在XR相机上,可以正确解决传感器与头盔设备的姿势跟踪之间的时序差异。开发者需要根据项目需求选择相应的预制体,否则会出现手的方向相反、识别不准确等问题;二,在XR Leap Rig的Interaction Manger部分中,设有针对Oculus Rift和HTC Vive设备的Controllers手柄预制体,方便开发者在项目中直接修改使用。
在这里插入图片描述
图2.6 Desktop Leap Rig
在这里插入图片描述
图2.7 XR Leap Rig

组件模块功能
针对Leap Rig预制体中的各部分组件和模块的功能,具体介绍如下。
Leap Provider是最核心的组件,封装了从Leap Motion到Unity3D的数据接口,与平台上运行的Leap服务进行通信,为应用程序提供帧数据中跟踪的全部手部信息。此外,Leap Provider完成了从Leap Motion到Unity3D的坐标系统的转化。如图2.8所示,Leap Motion使用右手坐标系,单位为毫米,但是Unity3D使用左手坐标系,单位为米。Leap Provider将坐标系和单位转化为Unity3D的标准,供开发者直接开发,免去坐标系转化统一的工作。图2.9展示了分别针对桌面和VR设备的Leap Service Provider和Leap XR Service Provider组件。
在这里插入图片描述在这里插入图片描述
图2.8 Leap Motion和Unity3D坐标系对比
在这里插入图片描述在这里插入图片描述
图2.9 Leap Service Provider和Leap XR Service Provider

Hand Models模块负责管理手部模型的渲染。如图2.10所示,父节点Hand Models是一个空物体,其下包含了左右手的手部模型,其上挂载了Hand Model Manager组件,需要指定提供Leap服务的Leap Provider和所管理控制的左右手模型。每只手模型的父节点LoPoly Rigged Hand上挂载了Rigged Hand组件,需要指定手指、关节点、手掌及其局部旋转、位移等信息。每只手模型的各个关节节点,按照手腕、掌心、手指的顺序依次向下继承;对于每根手指,又按照掌骨、近端指骨、中间指骨、远端指骨的顺序依次向下继承。

在这里插入图片描述在这里插入图片描述
图2.10 Hand Models模块

Interaction Manager模块负责管理手部模型的物体交互,为手部模型添加刚体(Rigidbody)和碰撞体(Collider),在Unity中的FixedUpdate函数里进行更新计算,处理物理碰撞和控制物体交互,更新手和交互对象的数据。如图2.11所示,对于每只交互手,可以选择是否启用悬浮、接触、抓取交互类型,可以指定可交互手指。对于外部的物体对象,只需为其增加Interaction Behaviour组件,手部模型即可对其完成悬浮提示、接触碰撞、抓取投掷等功能。在这里插入图片描述
图2.11 Interaction Manager模块

欢迎来到Unity Leap Motion入门指南! Leap Motion是一种基于手势识别的控制器,可以让您使用手势进行交互,而无需触摸屏幕或鼠标。Unity是一款流行的游戏引擎,可以帮助您创建游戏和应用程序。 在本指南中,我们将介绍如何在Unity中使用Leap Motion控制器。我们将涵盖以下内容: 1. 下载和安装Leap Motion SDK 2. 在Unity中设置Leap Motion 3. 使用Leap Motion控制器进行交互 让我们开始吧! 1. 下载和安装Leap Motion SDK 首先,您需要下载和安装Leap Motion SDK。您可以在Leap Motion官方网站上找到最新的SDK版本。 下载完成后,按照Leap Motion网站上的说明进行安装。安装程序将指导您完成安装过程。 2. 在Unity中设置Leap Motion 现在,您需要在Unity中设置Leap Motion。以下是设置步骤: 步骤1:将Leap Motion控制器连接到计算机。 步骤2:启动Unity并打开您的项目。 步骤3:单击“Assets”窗口中的“Import Package”按钮,然后选择“Custom Package”。 步骤4:在“Import Custom Package”对话框中,选择从Leap Motion SDK下载的Unity插件文件。 步骤5:单击“Import”按钮以安装插件。 步骤6:将Leap Motion控制器添加到场景中。在场景视图中,单击“GameObject”菜单,然后选择“Leap Motion”>“Hands Controller”。 步骤7:在“Leap Controller”组件中,启用“Enable hands”选项。 现在,您已经在Unity中成功设置了Leap Motion控制器。 3. 使用Leap Motion控制器进行交互 现在,您可以使用Leap Motion控制器进行交互。以下是一个简单的例子: 步骤1:创建一个新的Unity场景。 步骤2:向场景中添加一个3D对象,例如立方体。 步骤3:在场景视图中,单击“GameObject”菜单,然后选择“Leap Motion”>“Hands Controller”。 步骤4:在“Hands Controller”组件中,启用“Enable hands”选项。 步骤5:单击“Play”按钮以启动场景。 步骤6:使用您的手在场景中移动和旋转立方体。 完成!现在您已经成功地在Unity中使用Leap Motion控制器进行交互。 总结 在本指南中,我们介绍了如何在Unity中使用Leap Motion控制器。我们涵盖了下载和安装Leap Motion SDK,设置Leap Motion控制器以及使用Leap Motion控制器进行交互的步骤。希望这个指南能够帮助您入门Leap Motion控制器并开始使用它。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值