Leap Motion JS API整理文档.docx
《Leap Motion JS API整理文档.docx》由会员分享,可在线阅读,更多相关《Leap Motion JS API整理文档.docx(14页珍藏版)》请在冰豆网上搜索。
LeapMotionJSAPI整理文档
LeapMotion文档
IntroducingtheSkeletalTrackingModel:
LeapMotion2.0API引入一个新的骨骼追踪模型,提供了关于手和手指额外信息并提高了整体的数据追踪水平。
通过对人手掌的建模,LeapMotipn能够更好的预测视野中手和手指的位置。
五根手指总是出现跟随手掌出现,两手交叉也同样能被追踪到。
为了控制器也需要能够看到手指或手掌的以便能够追踪到它们精确的位置。
骨模型:
Frames:
LeapJS通过运行在本地的LeapService连接WebSocketServer工作,每隔10msLeapService会通过WebSocket向打开的浏览器页面发送一个frame,frame是一串包含手和手指位置信息的json数据。
使用LEAPLOOP是获取frame数据的简单的方式。
FramesObjects:
LeapMotion相对应的物理单位:
距离:
millimeters毫米
时间:
microseconds微秒
速度:
millimeters/second毫米/秒
Angle:
radians
LeapMotion可以追踪的数据:
hands、arms、fingers、tools、gestures、
Hands:
Leapmotion利用内部的人类手的模型支持预先的追踪手掌直至超出LeapMotion的可视范围。
手模型可以提供五个手指的位置,当手、和手指的轮廓是清晰可见且最佳的追踪。
Leapmotion软件利用手掌的可视部分、内部的模型以及以往的观测值去计算当前其他不可见部分的位置信息。
记录下隐藏在手掌中或者远离LeapMotion传感器的不被检测到的手指细微的动作。
Hand.confidence返回的值反映了观测到的数据与内部模型的匹配情况。
Arms:
hand.arm给出了手臂的方向、长度、宽度以及终点等数据。
当肘部不在leap的视野内,LeapMotion控制器会根据过去的观测数据以及典型的人体比例估算其位置。
Fingers:
LeapMotion控制器提供手掌的每一根手指的信息。
如果一个手指的部分或全部是不可见的,这根手指的特征会根据最近的观测值和手的解剖模型去估算。
一个finger对象提供了一bone对象,描述了每一个结构上的手指骨头的位置和方向。
所有的手指都包含四根骨头从指跟(base)到指尖(tip)。
骨头的定义:
Metacarpal(掌骨):
手掌上连接手指和手腕的骨头(食指除外)
ProximalPhalanx(近节指骨):
手指的根部,连接手掌。
IntermediatePhalanx(中间指骨)
DistalPhalanx(外端指骨)
这个模型的拇指不匹配标准解剖的命名系统,真实的拇指比其他的手指少一根骨头。
然而,为了便于编程,LeapMotion的拇指模型包括一个零长度的掌骨,所以大拇指和其他手指有着四根骨头。
结果是,大拇指的解剖掌骨被标记为近节指骨(ProximalPhalanx),而近节指骨被标记为中间指骨在LeapMotipn的手指骨模型中。
Tools:
工具可以是一个类似于铅笔的物体。
Tool类描述了Tools。
一个工具要比手指更长,更纤细,更笔直。
只有纤细的圆柱物体才能被当做工具追踪。
Gestures:
LeapMotion通过识别特定的运动模式作为手势来表明用户的意图和指令。
每根手指或工具的姿势被单独的观测。
LeapMotion通过一个frame告诉我们观测到的姿势以及其他的追踪到的手指和手掌的数据。
Gesture类以及它的子类CircleGestures、KeyTapGesture、ScreenTapGesture、SwipeGesture描述了手势。
Motions:
估算一段时间内用户的手固有的基本运动类型的改变,包括大小、旋转、和移动。
Motions是计算两个两个帧(frames)之间的动作。
APIReference:
●Frame
Attribute:
⏹frame.currentFrameRate
Type:
float–帧数
返回LeapMotion控制器产生frames的即时速率
用法:
varfps=frame.currentFrameRate;
⏹frame.id帧的唯一编号
⏹hands[]保存探测到手的信息
⏹tools[]保存侦测到的tools信息
⏹fingers[]五根手指信息的数组对象
⏹pointables[]保存侦测到的fingers和tools信息
⏹gestures[]保存手势信息旋转(Circle)和猛击(swipe)在每一帧中更新,轻打(Tap)只存在单独的帧中
Method:
⏹dump()返回json格式的字符串,包括hands、pointables、gestures信息
⏹hand(id)同pointable()
⏹finger(id)同pointable()
⏹tool(id)同pointable()
⏹pointable(id).valid匹配对应的id是否存在,如果不存在返回false
⏹rotationAngle(sinceFrame)返回相对于sinceFrame的旋转角度number
⏹rotationAxis(sinceFrame)返回一个单位方向向量member[]三个参数
⏹rotationMatrix(sinceFrame)返回旋转变换3*3矩阵number[]九个参数
⏹translation(sinceFrame)返回相对与sinceFrame的移动的三维向量单位millimeters
⏹scaleFactor(sinceFrame)规模因素来源于当前帧之间的整体运动和指定的帧。
●Hand
Attribute:
⏹五根手指thumb、indexFinger、middleFinger、ringFinger、pinky
⏹pinchStrength捏的力度值,范围[0,1]
⏹grabStrength抓的力度值,范围[0,1]
⏹palmPosition手掌的位置
⏹SphereCenter、SphereCenter适合手掌抓的球的球心坐标和球的半径
⏹palmNormal手掌的法向量,单位向量
⏹palmWidth手掌的宽度,Theaverageouterwidthofthehand(notincludingfingersorthumb)inmillimeters.
⏹timeVisible手掌在leap的可见范围内存在的时间
⏹direction沿手掌指向手指方向的单位方向向量
⏹fingers[]保存fingers的信息
⏹pointables[]保存fingers和tools信息的list,
⏹tools[]保存tools的信息
⏹palmVelocity改变手掌位置的速度,member[]三的参数的数组
⏹confidence内部的手模型和观测到的数据的匹配情况
⏹valid告诉我们是不是一个有效的对象boolean型
Method:
⏹finger(id)
⏹rotationMatrix(sinceFrame)
⏹rotationAxis(sinceFrame)
⏹scaleFactor(sinceFrame)
⏹translation(sinceFrame)
⏹rotationMatrix(sinceFrame)
⏹hand.toString()返回的值和frame.hands属性的返回值一样
⏹pitch()返回倾斜(绕x轴)的角度(弧度单位),是向量在y-z平面上的的投影和-z轴方向之间的夹角,换句话说,展示的是绕x轴的旋转。
Number类型
⏹roll()返回绕z轴倾斜的角度,是向量在x-y平面上的投影和y轴
⏹yaw()返回向量在x-z平面的投影和-z轴方向之间的夹角。
描述的是绕y轴的旋转。
●Pointable该类记录了探测到的手指和tools的物理特征
⏹Attributes:
◆id返回的是该pointable的id号
◆length估算的手指和tool的长度,单位毫米
◆width估算的手指和工具的宽度,单位毫米
◆direction手指或tool的指向,类型:
三维单位方向向量
◆touchZone返回一个String,”touching”或”hovering”。
手指向前触返回touching,缩回返回hovering。
◆touchDistance返回手指或tool与触碰平面之间的相对应的值[-1,1]之间
◆tipPosition手指或tool顶端相对leap坐标原点的位置
◆tipVelocity顶端位置变化的速率mm/s
Type:
number[],a3-elementarrayrepresentingavector.
◆stabilizedTipPosition基于pointable速率的稳定更容易定位
◆timeVisible可视时间
◆tool返回boolean类型,判断pointable是否被认为是一种工具
◆valid
●Finger继承Pointable
⏹Attributes:
◆bones
◆type
◆distal远端指骨。
Type:
Bone()
◆medial中间指骨。
Type:
Bone()
◆proximal近节指骨。
Type:
Bone()
◆metacarpal手指的掌骨。
Type:
Bone()
◆carpPosition掌骨的末端位置(接近手腕)。
◆mcpPosition掌骨(Metacarpals)和近节指骨(proximalphalanx)之间的关节位置
◆pipPosition位置:
近节指骨(proximal)和中间指骨(intermediatephalanges)之间的关节位置
◆dipPosition远端骨(distalphalanges)和中间骨(intermediatephalanges)之间的关节位置
●Bone该类描绘了追踪到的手指的骨头信息
⏹Attributes:
◆basis类型:
member[][]一个二维数组,3*3数组,骨头的标准正交基向量
basis[0],x-basis
basis[1],y-basis
basis[2],z-basis
◆typeinteger-acodeindicatingthebonename
0=Metacarpal掌骨
1=Proximalphalanx近节指骨
2=Intermediatephalanx中间指骨
3=Distalphalanx远端指骨
4=forearm前臂
◆length骨头的长度
◆width骨头的宽度
◆nextJoint下一个关节的位置(靠近指尖)Thedistalendoftheboneclosesttothefingertip.number[]
◆prevJoint(前一个关节的位置靠近指根)Theproximalendoftheboneclosesttothetorso
⏹Functions:
◆center():
在LeapMotion坐标系统中骨头的中心坐标。
◆left():
判断骨头是否属于左手的boolean。
◆matrix()
◆direction():
沿着骨头纵轴的方向向量
◆lerp()
●Controller
Controller()类是LeapMotion控制器的主接口。
⏹Attribute
frameEventName类型String返回“animationFrame”或“deviceFrame”eg:
varloopType=controller.frameEventName;
⏹Event
事件有:
blur、connect、deviceAttached、deviceConnected、deviceDisconnected、deviceRemoved、deviceStopped、deviceStreaming、disconnect、focus、frame、gesture、frameEnd、protocol、streamingStarted、streamingStopped
eg:
varcontroller=newLeap.Controller();//当屏幕失去焦点时执行onBlur
controller.connect();
controller.on("blur",onBlur);
functiononBlur(frame){
console.log("blurevent");
}
⏹function:
connect()、connected()、disconnect()、frame()
on()、setBackground()、setOptimizeHMD()、streaming()
用法:
controller.connect()连接leapmotion
controller.connected()判断是否连接,返回true或者false
controller.on(‘event’,function())事件触发
●Gesture识别用户的动作
⏹Attributes:
◆duration类型number
返回用户动作持续时间,微秒级
◆id类型number
返回动作的id
◆state动作姿势的状态三种状态start、update、stop
◆handIds完成姿势的手的id
◆pointableIds完成手势的手指或tools的id
◆type手势的类型可能的类型:
circle、swipe、screenTap、keyTap
●CircleGesture
⏹Attributes:
◆center画圆的中心点number[]数组
◆normal所画圆的单位法向量
◆state状态start、update、stop
◆duration持续时间
◆pointableIds手指或tools的id
◆type手势类型在这里就是“circle”
◆handIds手的id
◆progress作出画圆手势进行画圆的次数。
number
◆id手势的id
◆radius手势画出园的半径,mm级
●SwipeGesture
⏹Attribute
◆direction平行于动作的单位方向向量
◆position当前位置
◆speed速度mm/s
◆startPosition开始位置
●ScreenTapGesture
⏹Attribute以下返回的值同其他手势
◆direction
◆duration
◆handIds
◆id
◆pointableIds
◆position
●KeyTapGesture
⏹Attribute以下返回的值同其他手势
◆direction
◆duration
◆handIds
◆id
◆pointableIds
◆position
◆state
◆type
●InteractionBox
leapmotion视野内的一个盒装区域
⏹Attributes
◆center盒子的中心坐标
◆depth沿z轴的深度mm
◆height沿着y轴的高度mm
◆width宽度沿着x轴mm
◆sizeThewidth,height,anddepthoftheInteractionBoxinmillimeters,asanarray.
◆valid是否有效的
⏹function
◆denormalizePoint(normalizedPosition)将规范化InteractionBox定义的位置坐标转换为设备坐标。
◆normalizePoint(position,clamp)规范化盒中的坐标点。
◆toString()返回AdescriptionoftheInteractionBoxobject.
eg:
frame.interactionBox.toString()
UsingtheTrackingAPI:
●ConnectingtotheController连接控制器
controller对象协调连接应用和LeapMotipn服务,可以通过
Leap.loop()函数创建一个Controller:
varcontroller=Leap.loop({enableGestures:
true},function(frame){
//...
});
也可以直接创建一个Controller:
varcontroller=newLeap.Controller();
controller.connect();
●TrackingModel追踪模型
定义了不同的类代表每一个追踪的对象。