Como ya mencionamos al hablar del acelerómetro de un dispositivo Android,
hemos decidido implementar como mejora para nuestro proyecto el reconocimiento de gestos mediante este
sensor que incorporan todos los móviles Android.
Aunque al diseñar el proyecto y la planificación de
los hitos pensamos como mejoras en la integración de Wiimote y Kinect, hemos
decidido sustituir Wiimote por el
reconocimiento de gestos mediante el acelerómetro del móvil, pues esta es una
opción mucho más interesante y que tiene más sentido a la hora de integrarla en
la aplicación Android que ya tenemos diseñada. De esta manera, en lugar de
tener que manejar otro mando especial para ello, es haciendo gestos con su
propio móvil en la mano con lo que el usuario controlará a Kigo.
En esta entrada explicaremos de forma cualitativa el funcionamiento de
nuestro sistema de reconocimiento de gestos y todo lo que el usuario
necesitaría saber para manejarlo correctamente. Dejaremos para entradas posteriores
la explicación de la estructura compleja de Software que hemos desarrollado,
las modificaciones introducidas en el software de la aplicación Android y la
explicación del Algoritmo de Alineamiento
Temporal (DTW-Dynamic Time Warping),
gracias al que calculamos distancias entre dos vectores de aceleraciones.
FASES
DEL RECONOCIMIENTO DE GESTOS
Podemos dividir el reconocimiento de gestos mediante
el acelerómetro de un dispositivo Android en 4 fases distintas:
- Fase de entrenamiento
Para poder comparar gestos que realicemos con unos patrones, inicialmente tendremos que realizar un entrenamiento de aquellos gestos que queremos que se consideren “patrón”.
Cada gesto que enseñemos irá asociado mediante un número de identificación a uno de los comandos que puede reconocer el robot Kigo y permanecerá en memoria hasta que se cierre la aplicación Android.
En la aplicación Android, el entrenamiento se realiza a través del menú principal. En primer lugar, tenemos que seleccionar en una lista desplegable a qué comando queremos asociar el nuevo gesto cuyo entrenamiento vamos a realizar. Después, hay que accionar el botón de “Empezar Entrenamiento”.
El entrenamiento de un gesto patrón se completa cuando hayamos realizado 3 iteraciones del mismo. Esto nos permitirá almacenar en 3 estructuras de datos distintas las coordenadas de la aceleración sufrida por el dispositivo móvil al realizar ese movimiento. Hemos decidido realizar 3 iteraciones porque, si fuesen menos, sería menos precisa la comparación de gestos y, si fuesen más, la fase de entrenamiento se alargaría demasiado y no obtendríamos mucha más precisión.
Para completar una iteración, accionamos el botón “Empezar gesto”, realizamos el movimiento que queremos y accionamos “Finalizar gesto”. Repetimos este proceso 3 veces y, cuando hayamos terminado, accionamos “Finalizar entrenamiento”.
Tras esto, podemos entrenar un nuevo gesto cambiando la selección en la lista desplegable, modificar el que ya hemos enseñado o pasar a la fase de realización de gestos. - Fase de realización de gestos
Si ya tenemos algún gesto almacenado en memoria como patrón, podemos empezar a realizar movimientos para dar órdenes al robot Kigo.
Para ello, nos moveremos a la ventana de “Gestos” en la aplicación Android y accionaremos el botón “Iniciar gesto”. Esto hará que se cree un Listener de gestos que continuamente esté comprobando si realizamos algún movimiento.
Cuando se detecte que la energía de la aceleración sufrida por el dispositivo Android supera ciertos umbrales durante un determinado tiempo, se considerará que estamos realizando un gesto y se empezarán a almacenar coordenadas de esta aceleración. Este proceso será explicado con mucho más detalle cuando hablemos del software de reconocimiento de gestos.
Esto supone que podemos realizar gestos de una manera continua, pues los umbrales nos permiten distinguir lo que son movimientos hechos a propósito y lo que es estado de reposo. - Fase de comparación con los patrones
Una vez que se han almacenado las coordenadas del gesto que acabamos de realizar y se detecta que el movimiento ha terminado, se calcula la distancia de este gesto con todos los que tenemos como patrones mediante el algoritmo de alineamiento temporal dinámico (DTW) para saber a cuál se parece más.
Se le asocia al gesto realizado el número de identificación de aquel patrón respecto al cual su distancia es mínima. - Fase de envío de comandos
Cuando el gesto que hemos realizado ya tiene asignado un número de identificación, sólo queda enviarle por Bluetooth al robot el comando asociado a ese identificador:
Es la aplicación Android quien se encarga del envío de los comandos; además, nos muestra en la pantalla del móvil cuál de los comandos es el que se ha reconocido.


Cuando queramos dejar de controlar al robot mediante
este sistema de reconocimiento de gestos, tendremos que accionar el botón “Detener gesto” para deshabilitar el Listener de gestos. De lo contrario, el acelerómetro
seguirá constantemente detectando los movimientos del dispositivo y estaremos
consumiendo recursos del móvil.
No hay comentarios:
Publicar un comentario