LeapMotion permite la interacción entre el usuario y el ordenador mediante gestos en el espacio, consiguiendo una nueva experiencia de usuario muy diferente a la habitual con la interacción a través del teclado y ratón. Así pues, LeapMotion permitirá interactuar con gestos en la demostración del proyecto NECADA.

En esta entrada os presentamos Leap Motion, el último dispositivo HMI (Human Machine Interface) con el que estamos trabajando en el inLab. LeapMotion permite la interacción entre el usuario y el ordenador mediante gestos en el espacio, consiguiendo una nueva experiencia de usuario muy diferente a la habitual con la interacción a través del teclado y ratón. Así pues, a través del LeapMotion será posible interactuar con gestos en la demostración del proyecto NECADA.

Hasta ahora la forma más común de interactuar con nuestros ordenadores ha sido el ratón y el teclado, pero poco a poco vemos, con la introducción de smartphones y tablets, como la forma de interactuar está cambiando y buscando nuevas formas de interactuar es donde entra Leap Motion.

Leap Motion es un sensor de movimiento que nos permite controlar el ordenador mediante gestos que realizamos en el aire. Está formado por una parte hardware y otra de software.

El hardware de Leap Motion está formado por un pequeño aparato, compuesto por 2 cámaras e infrarrojos.  Este aparato detecta ambas manos, con sus respectivos dedos, junto con el antebrazo del usuario.

La parte de software recibe los datos del sensor y analiza para obtener la información sobre las manos, dedos, brazos y herramientas (puntero). El software contiene un modelo interno de una mano y lo compara con los datos que recibe para obtener la información lo más precisa posible.

¿Cómo empezar a usarlo?

Para empezar a utilizar Leap Motion simplemente basta con conectar el controlador mediante un usb a nuestro ordenador e instalar un software que podemos encontrar en su página web.

Con dicho software viene  “Airpace” que tiene una serie de aplicaciones preinstaladas con las que poder empezar a probar Leap Motion.

Leap Motion funciona mediante las aplicaciones que se encuentran en la “Airspace Store”, la cual funciona como una tienda de aplicaciones donde los usuarios pueden encontrar todo tipo de aplicaciones: juegos, musicales… entre las que también se encuentran algunas para poder utilizar el ordenador mediante gestos.

¿Cómo crear una  aplicación?

Si queremos desarrollar nuestros propios proyectos con Leap Motion, podemos realizar en distintos entornos de desarrollo:

 

En nuestro caso nos hemos decantado por Unity/C#.

Lo primero que deberemos hacer es descargar el sdk de Leap Motion y una vez descargado copiar las siguientes librerías a la carpeta raíz de nuestro proyecto:

En Windows:

x86/LeapCSharp.dll
x86/Leap.dll

En Mac:

libLeapCSharp.dylib
libLeap.dylib

En la carpeta de Assets copiar: LeapCSharp.NET.3.5.dll.

Una vez tengamos descargado el sdk y todo puesto donde toca, hemos de tener en cuenta que el software de Leap Motion obtiene la información “Frame by Frame” y es este “Frame” el que contiene toda la información de nuestras manos (posición, orientación, velocidad…).

En nuestro caso como utilizaremos Unity, utilizaremos la función “Update()” que es llamada automáticamente por Unity a cada frame para obtener el “Frame” de Leap Motion.

He aquí un pequeño ejemplo de como acceder a la API de Leap Motion sería:

using UnityEngine;
using System.Collections;
using Leap;
public class LeapBehavior : MonoBehaviour {

    Controller controller;
    void Start ()
    {
        controller = new Controller();
    }

    void Update ()
    {
        Frame frame = controller.Frame();
        //…
    }
}

Las partes más importantes de este código son:

Using Leap: Se encarga de acceder a la API de Leap Motion
Controller: Representa el controlador del Leap Motion, que nos da la información, por eso debe ser llamado al principio de todo siempre.
Frame frame = controller.Frame(): nos da la información del “Frame” actual i a partir de este obtener la información que queremos.

A partir del frame podemos obtener distinta información como:

Hands: Información de las manos, la identidad (derecha o izquierda), la posición, orientación, velocidad, una lista con los dedos asociados a la mano…
Arm: Información del brazo, tamaño, orientación…
Fingers:  Información de cada dedo de una mano, son identificados por nombre y se puede obtener la dirección y posición. Además podemos obtener información de cada uno de los huesos:
    Bone: Describe la posición y orientación de cada uno de los huesos de la mano.

 

Además podemos detectar distintos gestos (Gesture en Leap Motion API) predefinidos como:

Circle: Dibujar un circulo en el aire.
Swipe: Movimiento lineal con la mano y dedos.
Key Tap: Movimiento como si pulsara un botón de un teclado.
Screen Tap: Movimiento como si pulsara sobre la pantalla.

Mostraremos un pequeño ejemplo de cómo utilizar gestos, en nuestro caso el de “Circle”:

Primero de todo, como hemos indicado antes necesitaremos tener el controlador, y habilitaremos el gesto que queremos utilizar (podemos habilitar más de uno).

controller.EnableGesture(Gesture.GestureType.TYPE_CIRCLE);

Luego podríamos configurar los parámetros de cómo queremos que sea el gesto.

controller.Config.SetFloat("Gesture.Circle.MinRadius", 10.0f);

controller.Config.SetFloat("Gesture.Circle.MinArc", .5f);

controller.Config.Save();

Más adelante a cada frame obtendremos los gestos que Leap Motion haya detectado.

GestureList gesturesInFrame = frame.Gestures();

Y ejecutaremos el caso que queramos.

if (!gesturesInFrame.IsEmpty) {
    foreach (Gesture gesture in gesturesInFrame) {
        switch (gesture.Type) {
            case Gesture.GestureType.TYPECIRCLE:
            //Handle circle gestures
            break;
            case Gesture.GestureType.TYPEKEYTAP:
            //Handle key tap gestures
            break;
            case Gesture.GestureType.TYPESCREENTAP:
            //Handle screen tap gestures
            break;
            case Gesture.GestureType.TYPESWIPE:
            //Handle swipe gestures
            break;
            default:
            //Handle unrecognized gestures
            break;
        }
    }
}

Al usar un switch podremos controlar todos los gestos que queramos utilizar, siempre acordándonos de habilitar-lo primero.

Esto sería lo más básico para empezar a crear nuestra aplicación con Leap Motion y Unity a partir de aquí, se pueden probar distintas demos que nos ofrecen ellos y mirar algunas librerías de ayuda.