block by joyrexus 7217032

Leap websocket quick ref

Leap WebSocket Server

The Leap Motion service/daemon provides a WebSocket server listening to port 6347 on the localhost domain. The server provides tracking data in the form of JSON formated messages (i.e., time-stamped “frames” containing the tracking data at a given moment).

This gist demonstrates how to connect to the device’s websocket stream. It pipes a user specified number offrames from the Leap’s websocket stream to stdout or to a user specified filename.

See Protocol for communicating with leapd for more info and updates.

JSON Frames

The websocket stream emits JSON-formatted data frames. (See an example.) The attributes of a frame in the JSON message are similar, but not identical to those of a Frame object obtained through the javascript API:


  id: float
  r: array of floats (Matrix)
  s: float
  t:  array of floats (Vector)
  timestamp: integer

  hands: array of Hand objects
     direction: array of floats (Vector)
     id: integer
     palmNormal: array of floats (Vector)
     palmPosition: array of floats (Vector)
     palmVelocity: array of floats (Vector)
     r: array of floats (Matrix)
     s: float
     sphereCenter: array of floats (Vector)
     sphereRadius: float
     t: array of floats (Vector)

  interactionBox: object
     center: array of floats (Vector)
     size: array of floats  (Vector)

  pointables: array of Pointable objects
     direction: array of floats (Vector)
     handId: integer
     id: integer
     length: float
     stabilizedTipPosition: array of floats (Vector)
     tipPosition:  array of floats (Vector)
     tipVelocity:  array of floats (Vector)
     tool: boolean (true or false)
     touchDistance: float
     touchZone: string - one of none, hovering, touching

  gestures: array of Gesture objects
      center: array of floats (Vector)
      duration: integer microseconds
      handIds: array of integers
      id: integer
      normal: array of floats
      pointableIds: array
      progress: float,
      radius: float,
      state: string - one of start, update, stop
      type: string - one of circle, swipe, keyTap, screenTap

Motion deltas

The motion deltas (r, s, t) attached to Hand and Frame objects are snapshots of the motion changes occuring across frames. These deltas must be combined with those of a previous frame to derive the relative motion.

r

rotation delta

The matrix expressing the relative rotation between two frames can be calculated by multiplying the r matrix from the current frame by the inverse of the r matrix of the starting frame.

equation

s

scale factor

The relative scaling factor between two frames can be calculated by subtracting the s value from the starting frame from the current s value and taking the natural logarithm of the result.

equation

t

translation delta

The relative translation between two frames can be calculated by subtracting the t vector from the starting frame from the current t factor.

![equation](http://latex.codecogs.com/gif.latex? %5Cmathbf%7B%5Coverrightarrow%7Btranslation%7D%7D%3D%5Cmathbf%7B%5Cvec%7Bt%7D%7D_%7Bcurrent%7D-%5Cmathbf%7B%5Cvec%7Bt%7D%7D_%7Bprevious%7D)