Interacció 3D amb Leap Motion

Enviat per Albert Almà el Dj, 02/10/2014 - 10:03

En aquesta entrada us presentem Leap Motion, l'últim dispositiu HMI (Human Machine Interface) amb el qual estem treballant en l'inLab. LeapMotion permet la interacció entre l'usuari i l'ordinador mitjançant gestos en l'espai, aconseguint una nova experiència d'usuari molt diferent a l'habitual amb la interacció a través del teclat i ratolí. Així doncs, a través del LeapMotion serà possible interactuar amb gestos en la demostració del projecte NECADA.

Fins ara la forma més comuna d'interactuar amb els nostres ordinadors ha estat el ratolí i el teclat, però a poc a poc veiem, amb la introducció de smartphones i tablets, com la forma d'interactuar està canviant i buscant noves formes d'interactuar i aquí és on entra Leap Motion.

Leap Motion és un sensor de moviment que ens permet controlar l'ordinador mitjançant gestos que realitzem a l'aire. Està format per una part hardware i una altra de software.

El hardware de Leap Motion està format per un petit aparell, compost per 2 càmeres i infrarojos. Aquest aparell detecta les dues mans, amb els seus respectius dits, juntament amb l'avantbraç de l'usuari.

La part de programari rep les dades del sensor i analitza per obtenir la informació sobre les mans, dits, braços i eines (punter). El programari conté un model intern d'una mà i el compara amb les dades que rep per obtenir la informació el més precisa possible.

¿Com començar a utilitzar-lo?

Per començar a utilitzar Leap Motion simplement n'hi ha prou amb connectar el controlador mitjançant un usb al nostre ordinador i instal·lar un programari que podem trobar a la seva pàgina web.

Amb aquest programari ve "Airpace" que té una sèrie d'aplicacions preinstal·lades amb les quals poder començar a provar Leap Motion.

Leap Motion funciona mitjançant les aplicacions que es troben a la "Airspace Store", la qual funciona com una botiga d'aplicacions on els usuaris poden trobar tot tipus d'aplicacions: jocs, musicals ... entre les quals també es troben algunes per poder utilitzar l'ordinador mitjançant gestos.

¿Com crear una aplicació?

Si volem desenvolupar els nostres propis projectes amb Leap Motion, podem realitzar en diferents entorns de desenvolupament:

 

En el nostre cas ens hem decantat per Unity/C#.

El primer que hem de fer és descarregar-nos el
sdk de Leap Motion i un cop descarregat copiar les llibreries a la carpeta arrel del nostre projecte:

A Windows:

x86/LeapCSharp.dll
x86/Leap.dll

A Mac:

libLeapCSharp.dylib
libLeap.dylib

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

Un cop tinguem descarregat el sdk, hem de tenir en compte que el programari de Leap Motion obté la informació "Frame by Frame" i és aquest "Frame" el que conté tota la informació de les nostres mans (posició, orientació , velocitat ...).

En el nostre cas com utilitzarem Unity, utilitzarem l'opció "Update ()" que és cridada automàticament per Unity a cada frame per obtenir el "Frame" de Leap Motion.

Heus aquí un petit exemple de com accedir a l'API de Leap Motion seria:

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

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

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

Les parts més importants d'aquest codi són:

Using Leap: S'encarrega d'accedir a l'API de Leap Motion
Controller: Representa el controlador de l'Leap Motion, que ens dóna la informació, per això ha de ser cridat al principi de tot sempre.

Frame frame = controller.Frame(): ens dóna la informació del "Frame" actual i a partir d'aquest obtenir la informació que volem.

A partir del frame podem obtenir diferent informació com:

Hands: Informació de les mans, la identitat (dreta o esquerra), la posició, orientació, velocitat, una llista amb els dits associats a la ...
Arm: Informació del braç, mida, orientació ...
Fingers: Informació de cada dit d'una mà, són identificats per nom i es pot obtenir l'adreça i posició. A més podem obtenir informació de cada un dels ossos:
    Bone: Descriu la posició i orientació de cada un dels ossos de la mà.

 

A més podem detectar diferents gestos (Gesture en Leap Motion API) predefinits com:

Circle: Dibuixar un cercle a l'aire.
Swipe: Moviment lineal amb la i dits.
Key Tap: Moviment com si premés un botó d'un teclat.
Screen Tap: Moviment com si premés sobre la pantalla.

Mostrarem un petit exemple de com utilitzar gestos, en el nostre cas el de "Circle":

Primer de tot, com hem indicat abans necessitarem tenir el controlador, i habilitarem el gest que volem utilitzar (podem habilitar més d'un).

controller.EnableGesture(Gesture.GestureType.TYPE_CIRCLE);

Podirem configurar els paràmetres per definir els gestos

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

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

controller.Config.Save();

Més endavant a cada frame obtindrem els gestos que Leap Motion hagi detectat.

GestureList gesturesInFrame = frame.Gestures();

I executarem el cas que vulguem:

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;
        }
    }
}

En utilitzar un switch podrem controlar tots els gestos que vulguem utilitzar, sempre recordant d'habilitar-lo primer.

Això seria el més bàsic per començar a crear la nostra aplicació amb Leap Motion i Unity a partir d'aquí, es poden provar diferents donem que ens ofereixen ells i mirar algunes llibreries d'ajuda.

Segueix-nos a

Els nostres articles del bloc d'inLab FIB

         
         

inLab FIB incorpora esCert

Icona ESCERT

inLab és membre de