Leap Motion SDK Release Notes

Version 0.8.0

Topics:

Highlights

In this 0.8.0 release of the Leap Motion SDK, we introduce touch emulation APIs to the Pointable class. The logic uses a virtual, floating touch plane that adapts to the user's finger movement and hand posture.

We separated the Leap Motion software into two components. The core services component runs as a service on Windows and a daemon on Mac and communicates between the Leap Motion Controller and Leap-enabled applications. The second component is a task bar (Windows) or menu bar (Mac) application that provides a menu for controlling the Leap Motion software.

As part of the new architecture, we changed the Mac installation process to use a .pkg installer program that installs both Leap Motion components.

SDK folder contents

Hardware requirements

Supported operating systems

Supported compilers and runtimes

API documentation

Leap Motion API reference documentation is located in LeapSDK/docs/API_Reference, which outlines the Leap Motion API and the classes in the Leap namespace defined in LeapSDK/include/Leap.h and LeapSDK/include/LeapMath.h.

Objective-C programmers can install the Leap Motion documentation as an Xcode doc set. This provides context-sensitive help within the Xcode IDE. Instructions for installing the doc set are provided on the Leap Motion Developer Portal.

Sample application

A working sample application is provided for your reference, with versions written in C++, Objective-C, C#, Java, and Python. Tutorials for these sample applications are provided in the LeapSDK/docs folder. These tutorials are essentially the Leap Motion "Hello World" and should help you get your development environment set up for creating Leap-enabled applications. The sample code files are available in LeapSDK/samples. You can also find a Makefile, an Xcode project file, and Visual Studio project and solution files in the samples folder.

More complex demos and examples with source code are available in the Examples folder included with the SDK download.

JavaScript client library

The Leap Motion JavaScript client library, leap.js, is open-source and distributed separately from the main Leap Motion SDK. You can download leap.js from GitHub. We encourage community contributions to this library.

Developer account login

When you first run the Leap Motion software, it checks to see if you have logged in with your Leap Motion developer credentials.

Troubleshooting

If you have trouble getting reliable hand tracking data in your application, consider the following:

Known issues

Device recalibration

If for some reason the cameras on the Leap Motion device are knocked out of their initial alignment, the device must be recalibrated. Symptoms of this include persistent jumpiness or discontinuity in the motion of tracked fingertips, which you can view in the Leap Motion Visualizer. If this occurs and performing the steps listed in the troubleshooting section do not fix the problem, run the device calibration procedure from the Leap Motion menu.

To recalibrate your Leap Motion device:

  1. Launch the Leap Motion application, if it is not already running.

  2. Open the Leap Motion menu using the icon on the Windows Taskbar or Mac Finder bar.

  3. Select the Recalibrate command.

  4. Follow the on-screen instructions to perform the calibration procedure.

    You will need a flat, reflective surface. A mirror is ideal, but many other reflective surfaces like a flat screen monitor will work accetably as well. During the procedure, hold the Leap Motion controller so that the LEDs shine on the reflective surface and are reflected back into the top of the device. The calibration window displays a disk that moves as you change the angle between the surface and the device. Rotate the Leap Motion device to "paint" the window. Side-to-side and back-and-forth motion does not adversely affect the calibration, but calibration requires rotation.

If problems persist after recalibrating your device, please contact Leap Motion so we can help you resolve the issue.

Reporting bugs

If you experience problems with the Leap Motion device, the Leap Motion software, or the Leap Motion SDK, please submit a bug report. You can submit reports on the Leap Motion Developer Portal or by using the Bug Report form of the Leap Motion menu.

To use the Bug Report form:

  1. Open the Leap Motion menu using the icon on the Windows Taskbar or Mac Finder bar.
  2. Select the Report Bug command.
  3. On the Bug Report form, select the reason that best fits your bug from the Reason drop-down list.
  4. Add any important details, such as how to reproduce your bug in the Details section.
  5. For some types of bugs, you will be asked to record diagnostic information. To record diagnostics, click the Record button. If appropriate, perform the steps necessary to reproduce your bug during the recording.
  6. When finished, click the Send button. Your bug information and recorded diagnostics will be sent to Leap Motion.

Note that the data recorded is compressed and encrypted and is not useful for your local application debugging. The data file can grow large over time, so we do not recommend recording diagnostics for an extended period.

Automatic bug reporting

The Leap Motion Settings dialog provides the option to automatically send diagnostic information to Leap Motion when certain types of errors are encountered by the LeapMotion system. This option defaults to off, but we encourage you to turn it on to help us improve the Leap Motion software.

To turn on automatic bug reporting,

  1. Open the Leap Motion menu using the icon on the Windows Taskbar or Mac Finder bar.
  2. Select the Settings... command.
  3. On the Leap Motion Settings dialog, click the Logging tab.
  4. Check the Auto-Send Bug Reports option.
  5. Click OK.

Change log

Version 0.8.0

  • Separated the Leap Motion software into two components: a service (on Windows) or daemon (Mac) component and a task bar (Windows) or menu bar (Mac) application.
  • Added a .pkg installer for the Mac, which installs the Leap Motion daemon and menu bar application.
  • Added a touch emulation API to the Pointable class.
  • Added the InteractionBox class, which provides normalized coordinates for hands, fingers, and tools within this box. The InteractionBox can make it easier to map positions in the Leap Motion coordinate system to 2D or 3D coordinate systems used for application drawing.
  • Added the Device and DeviceList classes. The Device class provides information about the field of view of a Leap Motion Controller.
  • Fixed USB-related stability issues affecting first-generation Mac Pro and other legacy chipsets.
  • Corrected problems that prevented the Leap Motion software from running under Windows XP.
  • Added support for Ubuntu 13.04 Raring Ringtail.

Version 0.7.9

  • Added support for background applications (Mac and Windows only):
    • Added the Controller::PolicyFlag enumeration.
    • Added the Controller::policyFlag() method to get policy flag status.
    • Added the asynchronous Controller::setPolicyFlag() method to request a change to policy flags.
    • Added the Allow Background Apps checkbox to the Leap Motion settings to globally override background app policy requests.
  • Improved tracking accuracy when hands are distant from the Leap Motion device (more than 1 foot / 30 cm).
  • Fixed a tracking reliability issue introduced in version 0.7.8.
  • Fixed a bug in which the Leap Motion device was sometimes not recognized when first connected to a computer.
  • Fixed a bug that disabled auto-check for updates on Linux.
  • Digitally signed all binaries authored by Leap Motion (Mac and Windows only).
  • Updated device firmware to version 17.

Version 0.7.8

  • Applications no longer receive empty frames of data when they don't have operating system focus (Mac and Windows only).
  • Added an Objective-C documentation set that can be installed in Xcode and provide context-sensitive help (Mac only).
  • Changed the Objective-C PointableOrHandList category's leftmost, rightmost, and frontmost methods to work with empty lists by returning nil when the NSArray is empty (Mac only).
  • Fixed a bug with the Objective-C PointableOrHandList category's leftmost method (Mac only).
  • Fixed a bug in the Leap Motion JavaScript library (available from GitHub) that prevented apps using the library from running in browsers other than Google Chrome.
  • Disabled the Screen Locator tool in the Leap Motion application settings on Linux because it is not currently supported.
  • Updated device firmware to version 15.

Version 0.7.7

  • Improved hand/palm tracking robustness and noise rejection.
  • Added methods to the Frame and Hand classes that report probabilities that a frame or hand's motion is primarily translation, rotation, or scaling. You can use these probabilities to exclude or dampen unwanted transformations.
  • Added parameters for configuring gesture recognition:
    • SwipeGesture: minimum length and minimum velocity
    • CircleGesture: minimum radius and minimum traced arc
    • KeyTapGesture: minimum velocity, minimum distance and duration of recognition window
    • ScreenTapGesture: minimum velocity, minimum distance and duration of recognition window
  • Added setter methods to the Config class for changing gesture recognition parameters.
  • Added a save() method to the Config class for sending configuration changes to the Leap Motion application.
  • Added methods for getting the leftmost, rightmost, or frontmost entity to the PointableList, FingerList, ToolList, and HandList classes.
  • Added event callbacks to the Listener class that are dispatched by the Controller when an application gains or loses operating system focus (Mac and Windows only).
  • The Leap Motion application now only provides tracking data to the application which has the operating system's input focus (Mac and Windows only).
  • Added automatic detection of poor calibration to the Leap Motion application.
  • Added automatic detection of lens cover smudges to the Leap Motion application.
  • Added automatic error reporting to the Leap Motion application.
  • In the Objective-C API, changed the name of the [LeapController calibratedScreens] selector to [LeapController locatedScreens] (Mac only).
  • Deprecated the following methods:
    • Controller::calibratedScreens() — use Controller::locatedScreens() instead.
    • PointableList::empty() — use PointableList::isEmpty() instead.
    • FingerList::empty() — use FingerList::isEmpty() instead.
    • ToolList::empty() — use ToolList::isEmpty() instead.
    • HandList::empty() — use HandList::isEmpty() instead.
    • GestureList::empty() — use GestureList::isEmpty() instead.
    • ScreenList::empty() — use ScreenList::isEmpty() instead.

Note: The Leap Motion JavaScript library does not currently support focus events or configuration of gesture recognition parameters.

Version 0.7.6

  • New finger tracking technique that handles a greater variety of finger orientations, such as parallel to the Leap Motion device.
  • First Linux release of the Leap Motion software, SDK, and example applications.
  • Added a Screen::intersect() method to calculate the intersection point of a projected ray with the screen plane.
  • Added a Screen::project() method to calculate the location where a point is projected onto the screen plane.
  • Added a ScreenList::closestScreenHit() method to find the closest screen that a projected ray will intersect.
  • Added a ScreenList::closestScreen() method to find the closest screen to a point.
  • Added a new Screen projection mode to the Visualizer application. Press "B" to cycle between different modes.
  • Added a checkbox to enable/disable automatic device reorientation to the "Tracking" tab in the Leap Motion application settings.
  • Added a checkbox to enable/disable WebSocket connections in a new "WebSocket" tab in the Leap Motion application settings.
  • Added sliders to control framerate and range sensitivity in a new "Advanced" tab in the Leap Motion application settings.
  • Added a standby mode to the Leap Motion application, which reduces CPU usage and USB bandwidth to 10% after 5 minutes of inactivity.
  • Reduced the number of threads and sockets used by the Leap Motion application.
  • Added NSArray+LeapScreenList category to the Objective-C API providing functions for finding the closest screen (Mac only).
  • Removed all const qualifiers from Objective-C API return types (Mac only).
  • Removed unneccessary leapDelegate parameter from the Objective-C function: [LeapController removeDelegate:(id<LeapDelegate>)leapDelegate] (Mac only).
  • Added a complete Objective-C API reference and other Objective-C guides (Mac only).
  • Added a complete Java API reference.
  • Added preliminary API references for Python and C# containing API signatures only.
  • Fixed a bug where NaN values were sent out WebSocket in JSON data frame motion values.
  • Fixed a bug where CircleGesture::duration() started at 0 but progress() was > 0.
  • Updated device firmware to version 14 to improve robustness of firmware updates.

Version 0.7.5

  • Added gestures to the WebSocket JSON output and the JavaScript client library (available from GitHub).
  • Added Mac retina display support for Leap Motion application windows.
  • Fixed very low framerate on certain computers when objects enter device field of view.
  • Updated device firmware to version 13.

Version 0.7.4

  • Added an early-stage Gesture API supporting circle, swipe, and two tap gestures. (Not supported in the WebSocket JSON output or JavaScript client library in this version.)
  • Added Gesture visualization to the Visualizer application. Press "O" to turn gestures on and off.
  • Added a GesturesDemo particle field application with source code to the SDK examples.
  • Updated the C++, C#, Java, Python, and Objective-C sample applications to demonstrate the Gesture API.
  • Updated the JavaScript sample, Sample.html, to use the leap.js client library (available from GitHub).
  • Updated the recalibration utility to work with revision 6.5 Leap Motion devices.
  • Combined the example applications with the SDK so there is only one download package.
  • Removed underscore characters from library names. Important: This is a breaking change. You will have to update your project configurations when updating to version 0.7.4 of the SDK.
  • Objective-C (Mac only): Added NSNotification support for Leap Motion events and changed some method signatures to better conform to language conventions.

Version 0.7.3

  • Added the Leap Motion Device Recalibration utility to the Leap Motion application.
  • Updated device firmware to version 12.

Version 0.7.2

  • Added a Report Bug command to the Leap Motion application menu. This command opens a Bug Report form that allows you to more easily record diagnostics and submit them with bug reports to Leap Motion.
  • Added an option to automatically send diagnostic information to Leap Motion when certain types of errors are encountered by the Leap. This option defaults to off, but we encourage you to turn it on to help us improve the Leap Motion software.
  • Renamed the "Screen Calibration" settings tool to "Screen Locator" to avoid confusion with Leap Motion device calibration. Screen Location is only needed to use the Screen class in the Leap Motion API. No other features of the Leap Motion system are affected.
  • Added support for Unity 3.5 (in addition to 4.0) in the UnitySandbox example.
  • Changed the Objective-C library to use automatic reference counting.
  • Improved stability of Leap Motion application.
  • Improved support for revision 5 and 6 Leap Motion developer devices.
  • Tuned processing and motion tracking for revison 6 devices.
  • Updated device firmware to version 10.

Version 0.7.1

  • Added motion properties to Hand and Frame classes, which provide information about the translation, rotation, and scaling of a hand or all objects in a frame.
  • Added isConnected method to the to the Controller class, allowing polling-based applications to know when a controller is connected to the Leap Motion application and device.
  • Added Screen class to represent located screens and perform ray intersection.
  • Added ScreenList class to contain all located screens and find the closest screen intersection.
  • Added ability to establish screen locations to the Leap Motion application settings window.
  • Added ability to display screen information to the Visualizer.
  • Updated Objective-C wrapper for the complete API.
  • Changed format of JSON data sent through WebSocket to prepare for upcoming JavaScript client library.
  • Running a Leap-enabled application compiled with a Leap Motion library with a version greater than the Leap Motion application's version will trigger the Leap Motion application to check for an update.

Version 0.7.0

Important: Version 0.7.0 contains several changes to the Leap Motion API that are incompatible with previous versions. When updating from an earlier version, you will have to make code changes and recompile your applications. Applications compiled against earlier versions of the API will not work with version 0.7.0 of the Leap Motion application. See the 0.7.0 Migration Guide for tips on updating your application code to work with version 0.7.0 of the Leap Motion API.

  • Added LeapMath.h library containing Vector and Matrix struct definitions.
  • Added Pointable class to abstract characteristics common to fingers and tools.
  • Added Tool class which inherits from Pointable class.
  • Revised Finger class to inherit from Pointable class.
  • Replaced C++ STL vectors with HandList, FingerList, ToolList, and PointableList classes.
  • Replaced nearly all pointers with references (check for isValid() instead of a null pointer).
  • Added convenience methods for retrieving fingers, tools, and pointables directly from a frame or by ID.
  • Added addListener and removeListener methods to the Controller class, allowing multiple listeners to be added to a single controller instance.
  • Added onExit callback to the Listener class, allowing a listener to be notified when it has been removed from a controller.
  • Removed Ray and Ball classes, and flattened methods that returned these objects.
  • Removed hands with id = -1 ("phantom hands"), which were not visible in the frame but contained fingers.
  • Reversed direction vectors on Hand and Finger classes to point forward (this disagreed with documentation).
  • Fixed erroneous hand velocity reporting.
  • Changed the standard type for numeric values used in the API from double to float.
  • Changed member names in C# and Python to reflect the standard capitalization for each language.
  • Changed no-argument const methods to properties in C# and Python.
  • Updated C++, C#, Java, and Python sample applications to use the new API structure.
  • Fixed Java DLL issue for Eclipse on Windows.
  • Added libc++-compatible library on Mac.
  • Added preliminary Objective-C wrapper and sample project (Mac only).
  • Added support for Visual Studio 2008.
  • Added separate window to manage Leap Motion application settings.
  • Added ability for the Leap Motion application to automatically check for updates on startup.
  • Added ability for tracking direction to reorient when a full hand is seen.
  • Improved performance of devices that may have fallen out of calibration.
  • Updated device firmware to version 8.

Version 0.6.6

  • Added preliminary JavaScript support: the Leap Motion application provides a WebSocket server that sends tracking data as JSON messages.
  • Added ability to save Leap Motion application settings between sessions.
  • Added pause to the Leap Motion Visualizer. Use the P key to freeze and unfreeze the display.
  • Improved stability of tracking data.

Version 0.6.5

  • Added Leapd.lib and Leapd.dll for Visual Studio debug build configurations.
  • Added com.leapmotion.leap package to the Java library.
  • Added Leap namespace to the C# library.
  • Added support for Unity projects with C# and the UnityAssets plug-in.
  • Added finger velocity display to the Visualizer application. Use the L key to show finger velocities.
  • Improved transition to and from robust mode when bad lighting conditions are detected.
  • Updated device firmware to version 7.

Version 0.6.4

  • Added the Leap::Ball class to represent the position and radius of a sphere.
  • Added the following member functions to the Leap::Hand class:
    • Hand::normal() — a unit direction vector perpendicular to a plane tangent to the palm
    • Hand::ball() — a sphere fit to the curvature of the hand, as if the hand were holding a ball
  • Added tool detection and tracking. (For backwards compatibility, tools are included in the array of Finger objects attached to a Hand object.)
  • Added the following member functions to the Leap::Finger class:
    • Finger::isTool() — whether or not a finger is likely a tool (e.g., pen, pencil, chopstick)
    • Finger::length() — the length of the finger or tool (as much as is visible)
    • Finger::width() — the width of the finger or tool
  • Added new visualization modes to the Visualizer application:
    • Use the N key to cycle through the new hand properties visualization modes.
    • Use the T key to switch to the new finger and tool visualization mode.
  • Updated C++, C#, Java, and Python sample applications to make use of new hand properties.
  • Finger trails are now cleared in the Visualizer after the Leap Motion disconnects.
  • Axes are now labeled correctly in the Visualizer after recentering the view.
  • Arms are no longer occasionally misclassified as fingers.
  • Added separate C# libraries for .NET 3.5 and .NET 4.0.
  • Combined 32- and 64-bit versions of C# class definition libraries.
  • Fixed issues when using the release Leap.dll in debug mode on Windows.
  • Updated device firmware to version 6.

Version 0.6.3

  • Added robust lighting mode to permit operation in bright environments.
  • Added low resource mode to permit operation on slower computers.
  • Added ability to reverse tracking orientation manually.
  • Added support for 64-bit libraries on Windows.
  • Updated device firmware to version 5.

Version 0.6.2

  • Improved stability of C# sample application.
  • Added support for C# development on Mac with Mono.
  • Added support for 64-bit libraries on Mac.

Version 0.6.1

  • Improved stability when switching quality mode.

Version 0.6.0

  • Initial developer beta release of Leap Motion software and SDK.

Copyright © 2012-2013 Leap Motion, Inc. All rights reserved.

Leap Motion proprietary and confidential. Not for distribution. Use subject to the terms of the Leap Motion SDK Agreement available at https://developer.leapmotion.com/sdk_agreement, or another agreement between Leap Motion and you, your company or other organization.