Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Developing for Leap Motion


Published on

Developing for Leap Motion

DotnetConf session here: ( 1 hour)

Video tutorial can be found here:

Developing for Leap Motion in C# Part 1:
Developing for Leap Motion in C# Part 2:

GitHub repository for the Leap Motion demo app:


Published in: Technology, Education
  • Be the first to comment

Developing for Leap Motion

  1. 1. Taking the Leap withLeap MotionIris Classon
  2. 2. About me• Technical Evangelist at Telerik (WinRT)• Software Developer at Dotnet Mentor• Microsoft MVP C# and member of MEET• MCSD, MCPD, MCTS• Organizer Sweden Pluralsight Study Group (Gothenburg)• Started learning programming from 0 summer 2011• Licensed clinical Dietitian and Int.Lic. Personal Trainer
  3. 3. Contact details•• Twitter• @IrisClasson• Email• Telerik –• Dotnet Mentor –
  4. 4. What is the Leap Motion?
  5. 5. To get started• Mac, Windows, Linux (latest OS – more or less)• Developer Unit of Leap Motion• Preorder or apply to get one• Purchase: release projected for 22nd of July•• SDK• Can’t be shared• Forum, samples and documentation available• Projects on GitHub• Breaking changes introduced between SDK versions- might need to update the code
  6. 6. Good to know• Still in Beta• Developer units vs. consumer units:• The size and weight• Final hardware components & casing• Field of view approx 20% wider in consume version
  7. 7. Do not forget• Dispose Frame object when done with it• RemoveListener from Controller when app closes• Dispose Controller afterwards• Add Leap.DLL, LeapCSHarp.DLL &LeapCSHarp.NET4.0.DLL• Set copy output to Copy Always• Reference the LeapCSHarp.NET4.0.DLL
  8. 8. When in trouble w. the device• USB-cable has been known to cause trouble• Change USB port and/or cable• Connect the Leap before running the executable• Make sure there is light and the device is clean• Calibrate screen• Use the Leap Vizualiser to check if it works
  9. 9. The Leap story• Small startup based in San Fransisco• Venture capital• Has grown from just a few people to 80 employees and still hiring• Asus and HP on board• 40 000 Devs signed up• 12 000 dev units shipped so far• Still shipping
  10. 10. Demo
  11. 11. The Airspace Store• Storefront to gather all the apps• Dev decides on pricing, distribution & platform supported• Non-exclusive distribution• Min price starts at jus below 1 USD• Industry standard at 70% to the developer• Apps manually tested before publishing
  12. 12. Available languages• C++• C#• Objective C• Java• Python• JavaScript• (Ruby => hack)
  13. 13. How the API works• Leap motion detects fingers/tools• Data captured as frames continously• Listener class handles events from the Frame class• Controller is the connection between device and app• To listen for the updates on the Frame data:controller.AddListener(listener)• Gestures must be enabled through the controllercontroller.EnableGesture(Gesture.GestureType.TYPESWIPE)
  14. 14. ID,Timestamp,Hands,Fingers,Tools,GesturesFrameTranslation,RotationAxis,RotationAngle,ScalefactorMotion factors
  15. 15. Code – C#class SampleListener : Listenerpublic override void OnFrame(Controller controller){// Get the most recent frame and report some basic informationFrame frame = controller.Frame();SafeWriteLine("Frame id: " + frame.Id+ ", timestamp: " + frame.Timestamp+ ", hands: " + frame.Hands.Count+ ", fingers: " + frame.Fingers.Count+ ", tools: " + frame.Tools.Count+ ", gestures: " + frame.Gestures().Count);if (!frame.Hands.Empty){// Get the first handHand hand = frame.Hands[0];// Check if the hand has any fingersFingerList fingers = hand.Fingers;if (!fingers.Empty){// Calculate the hands average finger tip positionVector avgPos = fingers.Aggregate(Vector.Zero, (current, finger) => current + finger.TipPosition);avgPos /= fingers.Count;SafeWriteLine("Hand has " + fingers.Count + " fingers, average finger tip position: " + avgPos);} ………private static void Main(string[] args){var listener = new SampleListener();var controller = new Controller();controller.AddListener(listener);// Remove the sample listener when donecontroller.RemoveListener(listener);controller.Dispose();}
  16. 16. Code – JavaScript// Display Frame object datavar frameOutput = document.getElementById("frameData");var frameString = "Frame ID: " + + "<br />"+ "Timestamp: " + frame.timestamp + " &micro;s<br />"+ "Hands: " + frame.hands.length + "<br />"+ "Fingers: " + frame.fingers.length + "<br />"+ "Tools: " + + "<br />"+ "Gestures: " + frame.gestures.length + "<br />";// Frame motion factorsif (previousFrame) {var translation = frame.translation(previousFrame);frameString += "Translation: " + vectorToString(translation) + " mm <br />";var rotationAxis = frame.rotationAxis(previousFrame);var rotationAngle = frame.rotationAngle(previousFrame);frameString += "Rotation axis: " + vectorToString(rotationAxis, 2) + "<br />";frameString += "Rotation angle: " + rotationAngle.toFixed(2) + " radians<br />";……// Setup Leap loop with frame callback functionvar controllerOptions = {enableGestures: true};Leap.loop(controllerOptions, function(frame) {// Body of callback function})
  17. 17. Making sense of movement
  18. 18. The screenScreen class- contains computer screeninformation- Position, orientation & vectorLeap/PC- Information from OSCan be invalidDevice should to be calibratedwith the screen
  19. 19. The tool• Based on:• Length• Shape• Width
  20. 20. The gestures• Predifined gestures:• Circle• Swipe• Key Tap (downward movement)• Screen Tap (forward movement)Turn, twist and tilt – and fist• Use Motion factors from frame class• Translation,• RotationAxis,• RotationAngle,• Scalefactor
  21. 21. UX guidelines• Avoid complexity• Use what is considered natural• Think outside the box• Positive experience for the user• Feedback• No clutter• Desctructive action• Navigation and interaction – keep them apart
  22. 22. Q and AInfra red light safety concerns• IR occours naturally in the physical world• Widely used in a variety of devices• No health risk found with general exposure of IRUsing Leap as a mouse out of the box• Developer unit no, consumer unit yes• CPU usage• Will be lower when released• New updates ’inactivates’ the device when not used, activated when it registersmotion
  23. 23. Thank youIris Classon