Leap Motion体感控制器_leapmotion
1.leap motion怎么和unity 3d 实现对接
2.如何在win7上用leap motion把屏幕变为触控屏?
3.关于深度相机的精度问题
4.quickswitch模块怎么用
根据我此前在Amazon购买过的kindle touch的经验表明,如果的语音是英语,那么你应该在收货地址里面填写英文,也就是你所在地方的英文地址。而不能填写汉语拼音或者中文。
如有帮助欢迎纳!!欢迎提问!
leap motion怎么和unity 3d 实现对接
体感音乐游戏融合了音乐,运动和游戏元素,使游戏玩家获得多种感官体验,受到
游戏玩家特别是年轻玩家的青睐。本文利用 unity3D 游戏引擎配合 leap motion 体感控
制设备实现了一种体感音乐交互游戏。主要使用了手势检测、节奏分析、碰撞检测等关
键技术实现游戏模式选择模块,音乐选择模块,游戏模块与分数结算模块。设计的游戏
利用 leap motion 体感控制设备将体感音乐融入到游戏环境中,游戏玩家可以通过手势
或键盘操纵游戏过程。由于加入体感控制设计,使游戏模式更加丰富,增强了游戏的可
玩性与玩家的活动范围。改变了传统的游戏模式,使得游戏过程更加灵活,更利于玩家
的身心健康。使用 DOTween 游戏动画引擎在游戏中添加的补帧动画效果使游戏界面更
加灵活,大大提升了玩家体验感。最后对实现的游戏进行了测试。
关键词 人机交互? Leap Motion 控制器? Unity3D? 体感游戏? 节奏分析
1.选择游戏模式
玩家进入游戏后,将会观看游戏进入指南与操作手势帮助(如图17、18所示),之后无需玩家操作,经过一段时间后自动进入模式选择场景。
玩家在此处可选择将手左滑锁定本地歌曲模式,这时可以看到写有“custom music”的游戏对象面积小幅度变大,而玩家将手右滑锁定内置歌曲模式时,可以看到写有“select music”的游戏对象面积以同等程度变大。
之后玩家握拳选定模式,这时被选中的模式相对应的游戏对象面积进一步增大,之后整个游戏场景逐渐消失黑屏数秒后进入相应的歌曲挑选场景,值得注意的是在场景黑屏之前取消握拳动作意味着玩家放弃选定,游戏对象的大小会恢复并等待玩家的下一次操作。
2.选择游戏歌曲
2.1本地模式
通过选定写有“custom music”的游戏对象进入本地歌曲挑选界面,玩家可以通过屏幕中显示的虚拟手型确定自己手部相对屏幕所处的位置 ,此时对于屏幕中所显示的歌曲对象,可以做出点击手势点击“listen”按钮试听音乐,点击“play”按钮开始所选择歌曲的游戏。
此时若界面中罗列了超出屏幕显示数量的歌曲,玩家可以通过手的上下滑动浏览歌曲列表。
2.2内置模式
通过选定写有“select music”的游戏对象进入内置歌曲挑选界面,玩家可以通过屏幕中显示的虚拟手型确定自己的手势动作,通过手的左右挥动来选择不同的歌曲,锁定歌曲后,玩家可以通过将手掌反转180°的操作来更换歌曲游戏的难易度,每翻转一次玩家都可以通过屏幕中的难易度栏来确认目前的游戏难易度,锁定难易度后,玩家通过握拳操作选定当前歌曲并且以此歌曲开始游戏,此时可以观察到屏幕中显示歌曲封面的对象面积逐渐增大,之后场景透明度降低,在数秒的黑屏缓冲后进入游戏场景。
值得注意的是,如果在场景进入黑屏之前取消握拳手势,则被认定为放弃进入游戏,屏幕中的封面游戏对象会逐渐恢复此前大小并等待玩家的下一次操作。
3.进入游戏
玩家进入游戏后可以看到以宇宙为背景的游戏场景,跟随音乐的节奏会在屏幕中出现蓝色节奏点,节奏点在运动至与屏幕下方的两个光球相同的z坐标位置时,玩家需要操纵两个光球,使其与节奏点x坐标重合,也就是所谓的“接住”节奏点。玩家“接住”节奏点时,屏幕上出现hit字样并增加玩家的生命值(如图23所示),当玩家错过某个节奏点时,屏幕上出现miss字样并减少玩家的生命值(如图24所示)。若玩家连续“接住”节奏点且没有任何一个点被错过时,玩家的数会根据“接住”的节奏点数量增加,一旦玩家错过了某一个节奏点,则数立即归零。
玩家通过手的左右滑动来操纵光球,光球时刻保持与玩家手所在位置相同的x坐标,而除此之外的y,z则保持游戏默认值不变,在游戏开始时玩家若判断音乐前奏过长影响游戏体验,可以通过握拳的手势跳过音乐前奏部分。在游戏进行的任何时间玩家都能够使用将手掌反转180°的方式更改游戏背景的颜色以享受更加舒适的游戏过程。
4.游戏结束
(1)显示游戏成绩
在歌曲结束后,游戏界面在数秒的黑屏缓冲后进入游戏分数结算场景,场景中会显示玩家当前游戏的得分与失分,也就是“接住”与错过的节奏点的数量,此外还会显示玩家的数与游戏等级,以此来判断本局游戏玩家的表现是否出色。
(2)选择下一步动作
此时屏幕右下方存在两个游戏对象分别写有“retry”与“back”字样,玩家通过手的左右挥动来做出不同的选择,被选择的游戏对象面积将会增大,锁定选择后玩家通过握拳动作进入相应的下一个场景,选择“retry”对象时,玩家将再次体验与上一局游戏相同的歌曲与难易度,选择“back”对象时,玩家将会回到相应的音乐挑选场景,从本地音乐模式进入时玩家回到本地音乐挑选场景,从内置音乐模式进入时玩家回到内置音乐挑选场景。
如何在win7上用leap motion把屏幕变为触控屏?
1、下载leap SDK for unity
leap SDK for unity是作为plugin library获取leap数据的,而免费版的U3D不支持native plugins。对此开发者中心也有办法能够使免费版的U3D使用leap SDK。
2、首先新建unity工程
3、在项目根目录下新建Plugins文件夹,从下载好的SDK(s://developer.leapmotion/downloads)中找到 ~/LeapSDK/lib/UnityAssets/Plugins,将里面的内容放到Plugins文件夹中。之后找到 ~/Examples/UnitySandbox/Assets/Scripts/Leap/LeapUnityExtensions.cs,同样复制到Plugins文件夹。这时plugins内应有LeapCSharp.bundle,LeapCSharp.NET3.5.dll,以及LeapUnityExtensions.cs,至此SDK就算搞定,十分方便。
4、场景内创建一个plain和一个cube(用以移动)
5、在plugins中新建cs脚本,命名LDCLeapControl.cs,在IDE中添加代码如下:
using?UnityEngine;?
using?System.Collections;?
using?System.Collections.Generic;?
using?Leap;?
public?static?class?LDCLeapControl?
{?
public?static?float?ROTATE_MOD?=?3.14F;?
//member?variables;?
static?Leap.Controller?_controller;?
static?Leap.Frame?_frame;?
static?Leap.Hand?_hand;?
static?LDCLeapControl()?
{?
_controller?=?new?Leap.Controller();?
}?
//getters?
public?static?Leap.Frame?Frame?
{?
get?
{?
return?_frame;?
}?
}?
public?static?Leap.Hand?Hand?
{?
get?
{?
return?_hand;?
}?
}?
//get?latest?frame?called?each?second?
public?static?void?Update?()
{?
if(_controller?!=?null)?
{?
Frame?lastFrame?=?_frame?==?nullFrame.Invalid?:?_frame;?
_frame?=?_controller.Frame();?
if(_frame?!=?null)?
{?
if(_frame.Hands.Count?>?0)?
{?
_hand?=?_frame.Hands[0];?
}?
}?
}?
}?
public?static?float?getHandInput(string?gesture)?
{?
float?leapData?=?getLeapData(gesture);?
return?leapData;?
}?
private?static?float?getLeapData(string?gesture)?
{?
Update();?
float?leapData?=?0.0F;?
if(_hand?!=?null)?
{?
Vector3?PalmPosition?=?new?Vector3(0,0,0);?
Vector3?PalmNormal?=?new?Vector3(0,0,0);?
Vector3?PalmDirection?=?new?Vector3(0,0,0);?
PalmPosition?=?_hand.PalmPosition.ToUnityTranslated();?
PalmNormal?=?_hand.PalmNormal.ToUnity();?
PalmDirection?=?_hand.PalmPosition.ToUnity();?
if(gesture?==?"Rotation")?
{?
leapData?=?-ROTATE_MOD?*?PalmNormal.x;?
}?
}?
return?leapData;?
}?
} ?
6、这时,LDCLeapControl作为一个native plugin已经可以为我们所用了,在Assets中新建脚本:moveBehiour.cs,并添加代码如下:
using?UnityEngine;?
using?System.Collections;?
public?class?moveBehiour?:?MonoBehiour?{?
public?float?smooth?=?2.0f;?
public?float?tiltAngle?=?60.0f;?
public?bool?leapIsEnabled?=?false;?
void?Update?()
{?
if(leapIsEnabled)?
{?
float?rotate?=?LDCLeapControl.getHandInput("Rotation");?
float?tiltAroundY?=?rotate?*?tiltAngle;?
Quaternion?target?=?Quaternion.Euler(0,?tiltAroundY,?0);?
transform.rotation?=?Quaternion.Slerp(transform.rotation,?target,?Time.deltaTime?*?smooth);?
}?
}?
} ?
在这里利用取得的leapData作为object旋转的quaternion值(position移动等变换同理,略),将该行为付给cube(打开leapIsEnabled开关),运行,现在随着你手腕的左右旋转,方块也会在y方向上旋转了。
关于深度相机的精度问题
打开“开始”菜单,在“计算机”上单击鼠标右键,在弹出的快捷菜单中选择“属性”,打开系统属性窗口。在“系统”类别下,有一个名为“笔和触摸” 的属性,只要这里显示为“可用”,那么就表示这台计算机是支持触摸操作的,如图1所示,如果显示为“单点触摸”,表示这台计算机支持单点触摸,也就是可以使用一根手指进行操作;如果显示为“多点触摸”,则表示这台计算机支持多点触摸,可同时使用两根或更多根手指进行操作。
2、首先介绍用触摸方式实现鼠标操作的方法。对于支持触摸屏的设备,可以直接用手指或专用的触控笔在屏幕上进行指点,实现鼠标操作的结果。例如,直接碰触屏幕上的内容一次,可以起到鼠标左键单击的效果,而快速碰触两次,则可起到左键双击的效果;如果碰触并保持,稍等片刻,碰触点周围会出现一个逐渐合拢的圆圈图案,当圆圈首尾相接后,就会出现右键菜单,而形成这个圆圈的时间就是为了预防误操作而设置的延迟时间。
左右键单击操作实现后,还有一个比较棘手的问题,那就是鼠标的指向操作。例如,在使用致标时,将鼠标指针指向屏幕上的某个文件,系统会自动用屏幕提示的方式显示有关该文件的相关信息。但在使用触摸方式操作时,这种指向操作就不太容易实现了。如果设备使用了电磁感应式触摸屏,那么把触控笔悬停在屏幕上方lcm左右的距离,即可实现“指向”操作;不过现在很多设备,尤其是多点触摸设备,大部分使用了压感式屏幕,要求必须将手指紧贴屏幕表面才能生效
3、为了解决这一问题,可以使用win7提供的虚拟鼠标,该功能可以在屏幕上虚拟出一个鼠标的图案,这个鼠标有左右键,用户可以通过拖动虚拟鼠标的方式移动鼠标指针,以实现指向、单击、双击,以及左右键单击等效果。该功能默认没有启用,需要按照下列步骤设置。
4、打开“控制面板”,依次进入“硬件和声音”一“笔和触摸”,打开“笔和触摸”对话框切换到“碰”选项卡,在“触摸指针”选项下,选中“与屏幕上的项交互时显示触摸指针”。
5、单击“高级选项”按钮,打开高级选项对话框,在这里可按需要对屏幕上显示的虚拟鼠 标进行设置,例如左手或右手习惯、虚拟鼠标的透明度和大小,以及光标的移动速度等设置完毕单击“确定”按钮,关闭所有打开的对话框。
6、在经过上述设置后,在使用手指或触控笔点击屏幕后,碰触点周围就会出现一个虚拟的鼠标图案,如图2所示,随后可以用手指或触控笔拖动这个鼠标,以移动指针,或者点击该鼠标的左右键,实现鼠标单击操作。
quickswitch模块怎么用
常用的三种类型的深度相机 [1] ,大致分为以下三种:基于主动投射结构光的深度相机(如 Kinect 1.0 , Intel RealSense, Enshape, Ensenso等)、被动双目相机(如STEROLABS 推出的 ZED 2K Stereo Camera , Point Grey 公司推出的 BumbleBee)以及ToF [2] 相机(如微软的 Kinect 2.0 , MESA 的 SR4000 , Google Project Tango 中使用的PMD Tech 的TOF相机,Intel 的 SoftKinect DepthSense, Basler基于松下的芯片开发的TOF相机以及国内一些初创公司基于TI的方案开发的TOF相机等等)
先给出结论, KinectV2的精度在2mm~4mm左右 ,距离越近精度越高,越远精度稍微差点;kinectV1误差约 2mm~30mm 。
Kinectv2 for Mobile Robot Nigation: Evaluationand Modeling
如上图所示,右侧大三角是KinectV2在纵向(垂直于地面)的精度分布,下侧大三角是KinectV2在水平面(平行于地面)上的精度分布。在绿色区域精度最高,误差 小于2mm ,在**区域误差在 2~4mm ,红色区域误差 大于4mm 。所以在设计交互场景时,在**区域以内会达到最好的效果(3.5m内)。如果对精度要求很高,如控制机械,最好在绿色区域进行交互。
Kinect v2的rgb视场(FOV [3] )是84.1 x 53.8,关于FOV的建模和模型可以 参考 。
如图所示,KinectV1随着距离增加,误差指数性增加,在距离达到4m时,kinectV1误差 接近0.2m 。而KinectV2的误差几乎不随距离增加而变化。V2比V1追踪准确度好20%。V2可以在户外进行人体跟踪,最远到4m。V2在近距离有比V1高2倍的精度,在6m有高数十倍的精度。
LeapMotion的精度平均下来是 0.7mm 的精度,也是达不到所谓的0.01mm的。
Analysis of the Accuracy and Robustness of the Leap
Motion Controller
上面的论文对初步版本中的Leap Motion控制器进行研究,分别在静态与动态设置下的精度和准确性,考虑到人手的可达到的平均约为0.4mm,实验用设备使用参考笔,位置精度可达0.2mm,且参考笔对仪器精度测量无可观察到的影响。在基于静态设置的测量下,获得了期望的3D位置与 小于0.2mm 的测量位置之间的与轴无关的偏差。在动态情况下,独立于平面,可以获得 小于2.5mm 的精度(平均1.2毫米)。重复性 平均小于0.17毫米 。在基于姿势的用户界面方面,在实际条件下不可能实现0.01mm的理论精度,而是高精度(总平均精度为 0.7mm )。
优点:
缺点:
优点:
缺点:
优点:
缺点:
优点:
缺点:
和 Kinect 一代的优缺点类似,
戴在头上。
QuickSwitch是配合LeapMotionController使用,装置在OculusRift头盔上。首先确保已安装最新版本的LeapMotion软件和OculusSDK4.2+。其次打开QuickSwitch的demo。最后在LeapMotionController前(距离1-3英尺之间)直接上下挥动你的手就可以切换AR和VR模式。
用是汉语通用规范一级字。此字始见于商代甲骨文。《说文》本义为施行、行用、使用。引申指任用、治理等。甲骨文、金文中又特指杀牲祭祀。还用作连词,表原因。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。