Universidad Nacional del Centro de la
Provincia de Buenos Aires Facultad de
Ciencias Exactas
Framework para incluir el reconocimiento de gestos
en aplicaciones móviles de realidad virtual
Alumnos
Quattrocchio Emilio - Alvarez Agustin
Directores
Agradecimientos
Queremos agradecer en especial a nuestras familias, nuestros amigos y a nuestros seres queridos por el apoyo en tiempos difíciles, la espera por el resultado de cada evaluación, las llamadas y mensajes para desearnos suerte antes de cada nuevo desafío y el incondicional amor y la compañía que nos brindaron a lo largo de todo el camino. En mi caso en particular (Emilio) quiero agradecer especialmente a mis padres, mi hermana, mis abuelas, mi novia y su familia, y a los increíbles amigos que me llevo de esta hermosa etapa (Marcos, Richard, Javi, Julieta, Majo, Mariel, Maro, Agustín y Martín). En mi caso (Agustín) quiero agradecerles a mis padres, a mi novia Magali, a su familia, y a
todas las personas que conocí y/o me ayudaron a transitar este largo y hermoso trayecto: Pela, Colo, Mati, Esteban, Diego, Lucas, Emilio, Edison, Pato, entre muchos otros.
Índice general
Índice de figuras ... 4
Índice de tablas ... 6
Resumen ... 7
1. Introducción ... 9
1.1. Enfoque propuesto... 10
1.2. Estructura de la tesis ... 11
2. Estado del arte, trabajos relacionados ... 13
2.1. Realidad virtual ... 13
2.2. Reconocimiento de gestos ... 16
2.3. Sistemas para la captura de movimientos ... 18
2.3.1. Sistemas mecánicos ... 19
2.3.2. Sistemas ópticos ... 20
2.3.3. Sistemas magnéticos ... 23
2.3.4. Sistemas acústicos ... 24
2.3.5. Sistemas de seguimiento inercial ... 25
2.4. Resumen ... 30
3. Sistema Basado en Reglas para el reconocimiento de gestos ... 33
3.1. Fase de Reconocimiento ... 33
3.2. Fase de Configuración ... 35
3.3. Ejemplo de funcionamiento del framework ... 36
3.3.1. Fase de reconocimiento ... 36
3.3.2. Fase de Configuración ... 46
3.4. Resumen ... 51
4. Materialización de VRGestures ... 54
4.1. Arquitectura general ... 54
4.2. Gestures Package ... 56
4.3. Conditions Package ... 60
4.4. Listeners Package ... 61
4.5. Relación entre los elementos de los paquetes ... 62
4.6. Resumen ... 65
5. Casos de Estudio ... 68
5.1. Setup ... 68
5.2. Caso 1 - Maze ... 69
5.2.1. Implementación sin utilizar el framework ... 70
5.2.2. Implementación utilizando el framework ... 77
5.2.3. Resultados obtenidos ... 83
5.3. Caso 2 - Sistema Solar ... 85
5.3.1. Implementación sin utilizar el framework ... 86
5.3.2. Implementación utilizando el framework ... 95
5.4. Caso 3 - Relaxity ... 103
5.4.1. Implementación sin utilizar el framework ... 103
5.4.2. Implementación utilizando el framework ... 109
5.4.3. Resultados obtenidos ... 115
5.5. Resumen ... 116
6. Conclusiones, limitaciones y trabajos futuros ... 119
6.1. Ventajas ... 119
6.2. Limitaciones y trabajos futuros ... 120
Índice de figuras
Figura 1.1. Presentación del enfoque. ... 10
Figura 2.1. “La espada de Damocles”. ... 14
Figura 2.2. Google Cardboard 1. ... 15
Figura 2.3. Algunos dispositivo comerciales similares al google cardboard. ... 16
Figura 2.4. Sistema mecánico con goniómetros. ... 19
Figura 2.5. Actor utilizando indicadores pasivos. ... 21
Figura 2.6. Actor utilizando indicadores activos de Leds IR... 21
Figura 2.7. Actor con indicadores semi-pasivos imperceptibles. ... 22
Figura 2.8. Microsoft Kinect.. ... 22
Figura 2.9. Leap Motion. ... 23
Figura 2.10. Traje con sensores magnéticos y unidad eléctrica central. ... 24
Figura 2.11. Sensor de rango que utiliza ultrasonido... 25
Figura 2.12. Esquema de funcionamiento de un acelerómetro. ... 26
Figura 2.13. Acelerómetro actual ... 27
Figura 2.14. Mapeo de chip analógico LSM3300DLC de 3 ejes. ... 27
Figura 2.15. Relación entre acelerómetro y smartphone. ... 28
Figura 2.16. Mapeo de ejes de rotación X, Y, Z a un dispositivo. ... 29
Figura 3.1. Esquema conceptual del enfoque propuesto ... 33
Figura 3.2. Aplicación ejemplo, Maze. ... 36
Figura 3.3. Etapas de la Fase de Reconocimiento ... 37
Figura 3.4. Usuario en el laberinto cerca de la primera puerta. ... 40
Figura 3.5. Usuario dentro de la zona definida en la condición. ... 40
Figura 3.6. Acelerómetro en Landscape Left. ... 41
Figura 3.7. Medición del acelerómetro en el tiempo. ... 42
Figura 3.8. Ejecución de acción de abrir la puerta. ... 43
Figura 3.9. Usuario frente a puerta que requiere realizar el gesto “LookRight”. ... 44
Figura 3.10. Valores arrojados por el giroscopio (celular en reposo). ... 46
Figura 3.11. Gráfico datos giroscopio giro a derecha. ... 46
Figura 3.12. Ejemplo de configuración de la condición Condition Near Cube. ... 48
Figura 3.13. Kyle se encuentra fuera de la zona de condición de la puerta 1. ... 51
Figura 3.14. Kyle se encuentra dentro de la zona de condición de la puerta 1. ... 51
Figura 3.15. Kyle realiza el gesto que ve en la puerta. ... 52
Figura 3.16. El motor de reglas ejecuta la acción y la puerta se abre. ... 52
Figura 4.1. Diagrama de paquetes de la implementación de VRGestures. ... 55
Figura 4.2. Primera parte del Diagrama de clases del paquete Gestures Package. ... 57
Figura 4.3. Segunda parte del Diagrama de clases del paquete Gestures Package. ... 59
Figura 4.4. Diagrama de clases del paquete Conditions Package. ... 60
Figura 4.5. Diagrama de clases del paquete Listeners Package. ... 61
Figura 4.6. Relación entre los elementos de los paquetes. ... 63
Figura 5.1. Juego Maze antes de incluir el reconocimiento de gestos. ... 69
Figura 5.2. Configuración del script AbrirPuerta1. ... 70
Figura 5.3. Script implementado para la operación de AbrirPuerta1. ... 71
Figura 5.4. Configuración del script AbrirPuerta2. ... 72
Figura 5.5. Script implementado para la operación de AbrirPuerta2. ... 73
Figura 5.6. Configuración del script AbrirPuerta3. ... 74
Figura 5.7. Script implementado para la operación de AbrirPuerta3. ... 75
Figura 5.8. Configuración del script AbrirPuerta4. ... 76
Figura 5.9. Script implementado para la operación de AbrirPuerta4. ... 77
Figura 5.10. Configuración de la regla 1. ... 79
Figura 5.11. Configuración de la regla 2. ... 80
Figura 5.12. Configuración de la regla 3. ... 81
Figura 5.13. Configuración de la regla 4. ... 82
Figura 5.14. Sistema Solar antes de incluir el reconocimiento de gestos. ... 86
Figura 5.15. Configuración del script DesplazarAIzq. ... 87
Figura 5.16. Script implementado para la operación de DesplzarAIzq. ... 88
Figura 5.17. Configuración del script DesplazarADer. ... 89
Figura 5.18. Script implementado para la operación de DesplazarAIzq. ... 90
Figura 5.19. Configuración del script ExitApp. ... 91
Figura 5.20. Script implementado para la operación de ExitApp. ... 92
Figura 5.21. Configuración del script ExitApp. ... 93
Figura 5.22. Script implementado para la operación de NotExitApp. ... 94
Figura 5.23. Configuración de la regla 1. ... 97
Figura 5.24. Configuración de la regla 2. ... 98
Figura 5.25. Configuración de la regla número 3. ... 99
Figura 5.26. Configuración de la regla número 4. ... 100
Figura 5.27. Relaxity antes de incluir el reconocimiento de gestos... 103
Figura 5.28. Configuración del script CambiarMusica. ... 104
Figura 5.29. Script implementado para la operación de CambiarMusica. ... 105
Figura 5.30. Configuración del script CambiarCielo. ... 106
Figura 5.31. Script implementado para la operación de CambiarCielo. ... 107
Figura 5.32. Configuración del script CambiarVolumen. ... 108
Figura 5.33. Script implementado para la operación de CambiarVolumen. ... 109
Figura 5.34. Configuración de la regla número 1. ... 111
Figura 5.35. Configuración de la regla número 2. ... 112
Figura 5.36. Configuración de la regla número 3. ... 113
Índice de tablas
Tabla 2.1. Tabla de valores iniciales aproximados del acelerómetro. ... 28
Tabla 2.2. Tabla de ventajas y desventajas de las tecnologías de captura de movimiento. 30 Tabla 3.1. Tabla de valores estimativos aproximados del acelerómetro. ... 38
Tabla 3.2. Tabla de valores para el giroscopio en reposo. ... 45
Tabla 3.3. Tabla de condiciones ... 47
Tabla 3.4. Tabla de gestos. ... 50
Tabla 5.1. Tabla de configuración de las reglas - Maze. ... 78
Tabla 5.2. Tabla de comparación de resultados de las métricas. ... 83
Tabla 5.3. Tabla de configuración de las reglas - Sistema Solar. ... 95
Tabla 5.4. Tabla de comparación de resultados de las métricas ... 101
Tabla 5.5. Tabla de configuración de las reglas - Relaxity. ... 110
Tabla 5.6. Tabla de comparación de resultados de las métricas ... 115
Resumen
Con el paso de los años, los avances en las tecnologías permitieron que las computadoras y dispositivos móviles tengan una potencia que anteriormente era impensada. Esto llevó a que se hiciera mayor énfasis en un tema del cual se viene hablando desde hace muchos años, la realidad virtual. La realidad virtual no es un concepto nuevo, pero siempre se vio limitada por sus altos costos y las limitaciones tecnológicas. Estas limitaciones hoy en día ya no son un problema ya que los avances tecnológicos no sólo facilitaron que las computadoras sean más potentes, sino que también facilitaron que puedan surgir nuevos dispositivos enfocados específicamente a la realidad virtual, como visores, o dispositivos de control que reconocen el movimiento del usuario que los está usando. Esto permitió que cualquier persona, con los suficientes recursos económicos, pueda acceder desde su casa a la realidad virtual, a través de distintas aplicaciones.
Sin embargo, uno de los problemas que se siguen manteniendo es la necesidad de tener que adquirir dispositivos que, en algunos casos, poseen un costo muy alto. Este último problema trató de abordar Google al presentar su alternativa a la realidad virtual, Google Cardboard. Con este concepto, se buscó utilizar la potencia alcanzada por los dispositivos móviles en los últimos años, sin la necesidad de tener que obtener dispositivos adicionales, para poder tener un acercamiento, de mucho menor costo a la realidad virtual. Este concepto desencadenó el interés de muchos desarrolladores para desarrollar aplicaciones de realidad virtual. Pero al utilizar tecnologías que ya estaban incluidas dentro de los dispositivos, muchos desarrolladores se encontraron con problemas al querer interpretar correctamente qué movimientos estaba realizando el usuario. La causa de esto es debido a los sensores utilizados dentro de estos dispositivos. Estos sensores arrojan valores que no son fáciles de interpretar, lo que lleva a que se deba invertir tiempo y esfuerzo en entenderlos en su totalidad.
1. Introducción
Desde los comienzos de la computación, el problema de elegir correctamente la forma en la que el usuario se comunicará con la máquina ha sido una de las cuestiones de mayor interés [1]. Esto se debe al hecho de que, a mayor facilidad para comunicarse con la máquina, mayor es el anhelo del usuario por utilizar la misma. Concretamente, muchos son los casos en los que la forma en la que el usuario se comunica con la máquina define en gran parte la experiencia del mismo con el sistema que ésta provee, y con sus aplicaciones.
Sin embargo, ¿Cómo hacer para facilitar al máximo la comunicación entre el usuario y la máquina? ¿Depende el modo de comunicación de la máquina, o depende del usuario? Ciertamente, la manera de comunicación de la máquina debe adaptarse al usuario para facilitarle a éste el entendimiento y un fácil uso de las herramientas que puede proveer. Pero no todas las máquinas son iguales, de esto se desprende que la forma de comunicarse de un usuario con una máquina tendrá sus variantes dependiendo de la máquina.
Algunos dispositivos, como los celulares, inclusive se comunican de forma diferente con el usuario dependiendo de la herramienta o aplicación que se esté utilizando. Si el usuario está utilizando el teléfono para realizar una llamada de forma convencional posiblemente posicionarán el celular al costado de su cara, si está utilizando la función de manos libre seguramente dejará al celular reposando sobre una superficie, si está escribiendo un mensaje de texto lo pondrán frente a sus ojos, etc.
Actualmente, existen formas aún más avanzadas de comunicación entre un teléfono inteligente y un usuario. Una de estas formas, es el reconocimiento de gestos. El reconocimiento de gestos puede ser visto como una manera por la que las computadoras empiezan a entender el lenguaje corporal humano, construyendo así una relación más sólida entre máquinas y seres humanos [2]. Ciertos smartphones actuales son capaces de detectar algunos de los siguientes gestos y, al notar su presencia, realizar acciones en consecuencia: Bajar la vista (el teléfono entiende que el usuario está alcanzando el fin de una página web y desliza la página para que éste pueda continuar leyéndola sin necesidad de tocar la pantalla), cerrar los ojos por una cierta cantidad de tiempo (el teléfono entiende que el usuario se durmió mientras veía la pantalla y apaga la misma para no malgastar la batería), etc.
convencionales es más difícil apoyarse en la comunidad cuando se presenta un problema relacionado estrechamente con cuestiones de realidad virtual como puede ser escalar los elementos del mundo VR en base al tamaño del usuario, lidiar con problemas de una tasa de frames constante y no menor a 90 para que el usuario no se maree [3], etc. Debido a esta dificultad, sumado a lo complejo que resulta comprender el funcionamiento de los sensores y aprender a tratar y aprovechar los datos que estos arrojan, los tiempos de desarrollo tienden a ser superiores a los de un desarrollo normal en el que el desarrollador conoce las herramientas que necesita para llevar a cabo el fin deseado. Además de este último problema, surge otra cuestión a tener en cuenta: ¿Cómo puede comunicarse el usuario con un dispositivo VR de forma sencilla y a la vez hacerlo de manera tal que no se corrompa la experiencia de la realidad virtual? Ahí es donde surgió la motivación de este trabajo, la creación de un Framework para el desarrollo de aplicaciones de realidad virtual que deseen incluir el reconocimiento de gestos (donde los gestos se interpretan a partir del análisis de los datos aportados por los sensores) mediante el uso de la cabeza del usuario, y poder realizar acciones en base a estos y además aportar en la reducción del tiempo de desarrollo de la aplicación.
1.1. Enfoque propuesto
Para la realización del framework se propone la utilización de un sistema basado en reglas. Los gestos a reconocer son representados como reglas. Estas reglas deben ser configuradas por el desarrollador de la aplicación a la que se quiere incluir gestos. Las reglas están constituidas por una condición que debe cumplirse dentro del espacio virtual, el movimiento de la cabeza ante el cual se quiere reaccionar y por la acción que debe ejecutarse en consecuencia del gesto. En la figura 1.1 se puede observar un esquema básico del sistema planteado.
Figura 1.1. Presentación del enfoque.
envían datos al motor de reglas quien se encarga de validar las reglas que tiene configuradas y ejecuta las acciones que corresponda para que el usuario pueda experimentar los cambios esperados. Para que una regla configurada se cumpla, en primer lugar, se debe evaluar la posición del usuario dentro del espacio virtual. Esta posición se debe corresponder con alguna posición especificada en las condiciones de las reglas. Si este es el caso, se considera la condición como cumplida, y se procede a analizar los datos de salida de los sensores. Los sensores devuelven datos que se corresponden con los movimientos del dispositivo, que, al estar sujeto a la cabeza del usuario, van a reflejar el movimiento de dicha parte del cuerpo. Estos datos deben interpretarse correctamente para saber efectivamente cual es el gesto que se está realizando. Una vez que el movimiento esperado es realizado por el usuario, se procede a ejecutar la acción asociada a la regla. Estas acciones generalmente son código que provocan algún cambio en el mundo virtual, pero podría ser también código que realice alguna acción en el mundo real.
1.2. Estructura de la tesis
2. Estado del arte, trabajos relacionados
El objetivo de este capítulo es brindar un marco teórico sobre los temas pertinentes a este trabajo, y mencionar otros trabajos relacionados.
Como punto de partida, el capítulo define qué es la realidad virtual, y menciona de qué forma se puede categorizar la misma, y a qué categoría apuntamos con este trabajo. Luego, la sección 2.2 habla sobre qué es el reconocimiento de gestos y de qué manera puede aplicarse a la realidad virtual. Posteriormente, la sección 2.3 menciona sistemas para capturar movimientos sobre los cuales pueden reconocerse gestos. Finalmente, el capítulo concluye haciendo mayor hincapié en el sistema que va a ser utilizado para el presente trabajo.
2.1. Realidad virtual
La realidad virtual (Virtual Reality, de ahora en más VR) no es un concepto nuevo, pero aun así no existe un consenso para dar una sola definición, ya que existen casi tantas definiciones, como autores han hablado del tema. La definición que vamos a utilizar en este trabajo es la utilizada en [4], la cual se refiere al “conjunto de tecnologías utilizadas para generar imágenes realistas, sonidos y otras sensaciones, simulando la presencia del usuario dentro de un escenario ficticio, distinto al que se encuentra físicamente”. Esta definición es derivada del trabajo presentado en [5].
En [6] se introdujo el concepto clave de inmersión sensorial en un mundo simulado. Debido a las limitaciones tecnológicas en ese momento, se determinaron una serie de “desafíos” a cumplir para llevar a esta inmersión sensorial:
“La pantalla es una ventana a través de la cual
uno puede ver un mundo virtual.
El desafío consiste en que ese mundo parezca
real, actúe
real, suene real, se sienta real”
Ivan Edward Sutherland. [6].
Estos criterios se convirtieron en el foco principal de los investigadores e industrias interesadas en la VR, principalmente por dos motivos. En primer lugar, debido a que son una forma de superar la mayor parte de las limitaciones de la comunicación tradicional humano-máquina, y, en segundo lugar, debido a la gran cantidad de usos que se le puede llegar a dar a estas tecnologías, que van desde el uso educativo [7], pasando por el área de la medicina [8], hasta incluso darle uso militar, entre muchos otros [9].
aumentada (RA). La RA consiste en, utilizando un dispositivo que tenga una cámara, generar contenido sobre el mundo real con el fin de brindar mayor información del mismo, o generar contenido adicional. Como ventaja de esta categoría, se tiene que, al no necesitar dispositivos especiales, tiene un menor costo. Como desventaja, no genera una inmersión total del usuario, que es lo que se busca según nuestra definición inicial. En cuanto a la segunda categoría, la realidad virtual inmersiva es a lo que apunta nuestro trabajo. En esta categoría se busca una mayor inmersión del usuario mediante la utilización de dispositivos específicos, como cascos con visores, guantes y otro tipo de aparatos que capturan los movimientos del cuerpo, o partes del mismo, y trasladan los movimientos al mundo virtual. La ventaja de esto es que se tiene una mayor inmersión, como se dijo anteriormente. Sin embargo, la desventaja son los altos costos de estos dispositivos, y, en un principio, lo incómodo que resultaba su utilización [Figura 2.1].
Aprovechándose de ésta, junto con los sensores que brinda el dispositivo, se facilita un acercamiento, con un costo mucho menor [9], a la VR. Esta solución ha adquirido una rápida adopción por parte de los usuarios lo que se ha transformado en dispositivos más robustos y comerciales que realizan las mismas operaciones, pero con dispositivos ensamblados comercialmente. En la figura 2.3 pueden verse ejemplos de distintos dispositivos que surgieron a partir del concepto del Google Cardboard.
Figura 2.2. Google Cardboard 1.
Figura 2.3. Algunos dispositivo comerciales similares al google cardboard.
En la actualidad, los distintos fabricantes de smartphones han ido incorporando a sus dispositivos distintas tecnologías con el fin de mejorar la comunicación del usuario con la interfaz de los mismos, aprovechándose del lenguaje corporal. Por ejemplo, algunos smartphones son capaces de detectar el movimiento de los ojos y reaccionar en respuesta a estos movimientos (cambiar de página de un texto, apagar la pantalla), otros sólo pueden interpretar determinadas acciones llevadas a cabo con los dedos sobre la pantalla táctil. Estas acciones llevadas a cabo por el usuario, se las denomina gestos. Partiendo de la idea de los gestos básicos que realiza el usuario con sus dedos surgió la idea de este trabajo, llevar esta interpretación de movimientos a una aplicación de realidad virtual. Primeramente, estos gestos requieren ser reconocidos e interpretados correctamente para darles un sentido y reaccionar en consecuencia. En la siguiente sección se hablará más en profundidad sobre el reconocimiento de gestos.
2.2. Reconocimiento de gestos
A lo largo del tiempo, el reconocimiento de gestos fue evolucionando junto con los avances tecnológicos, hasta llegar hoy en día a poder reconocer expresiones faciales [11], movimientos oculares [12], movimientos corporales [13], etc. Para poder explicar correctamente lo que es el reconocimiento de gestos, en primer lugar, se debe definir concretamente lo que es un gesto.
"Un gesto es un movimiento del cuerpo que contiene información. El
saludo de “adiós con la mano” es un gesto. Presionar una tecla en un
teclado no es un gesto, porque el movimiento de un dedo en su camino a
golpear la tecla no es ni observado ni significativo. Todo lo que importa
es qué tecla se ha presionado."
Gordon Kurtenbach y Eric A. Hulteen [14].
Sin embargo, esta definición aplicada sobre realidad virtual requiere un poco más de análisis, debido a que al aplicarla a dicho campo se producen ciertos inconvenientes. Los autores de [15] realizaron el siguiente análisis: si un diseñador realiza trazos con un lápiz no estaría realizando ningún gesto, dado que lo único que importa son las líneas que está trazando y no se estaría observando la postura o el movimiento de sus manos. Pero si trasladamos esto a la realidad virtual, el diseñador al utilizar un lápiz virtual o usando directamente sus dedos para dibujar en un mundo virtual, según la definición, estaría realizando gestos, los cuales deben ser interpretados por la máquina. Sin embargo, el resultado esperado por el diseñador en ambos casos es el mismo: realizar un trazo. De este análisis desprendieron la siguiente definición:
“Un gesto es un movimiento del propio cuerpo que transmite significado
a uno mis
mo o a un compañero en la comunicación.”
Caroline Hummels, Gerda Smets y Kees Overbeeke [15].
Posteriormente, dieron las siguientes aclaraciones: el compañero puede ser otra persona o una computadora y el significado es información que contribuye a un objetivo específico. Con esto último se refiere a que, por ejemplo, cuando el diseñador mueve su mano hasta el punto de inicio del trazo, no se considera como un gesto, debido a que es un movimiento necesario que no contribuye al objetivo final.
De esta última definición desprendemos la que utilizaremos para este trabajo: “Un gesto es una forma de comunicación no-verbal en la cual se realizan movimientos con el cuerpo de manera que se transmita alguna información desde un emisor a un receptor.”
objetos, como escalar y rotar. Por el contrario, los gestos fuera de línea se procesan generalmente después de que la interacción, por ejemplo, se dibuja un círculo para activar un menú contextual.
En el presente trabajo nos vamos a enfocar en los gestos fuera de línea, es decir, en aquellos que se realiza un movimiento específico, y posteriormente se ejecuta una acción en consecuencia de ese movimiento.
Para poder utilizar correctamente los gestos como medios de comunicación, en primer lugar, el dispositivo debe interpretar correctamente qué es lo que el usuario quiere transmitir con sus movimientos, de lo cual se encarga el reconocimiento de gestos.
Su significado depende del campo de investigación, pero para el presente trabajo adoptamos la siguiente: “El reconocimiento de gestos es la ciencia detrás del hardware y el software que permite el reconocimiento de movimientos humanos significativos como información de entrada para un dispositivo, y reaccionar de forma correcta a dicha información.”
Esto involucra el procesamiento, mediante distintas técnicas, de la información proveniente de los gestos que realiza un humano para que la computadora entienda cómo es un gesto y luego poder identificar efectivamente de qué gesto se trata. En general, los movimientos significativos comprendidos como gestos involucran las manos, la cara, y/o todo el cuerpo [17].
En la actualidad, existen diferentes sistemas para realizar la captura de movimiento. Dependiendo del sistema utilizado, varían las herramientas o dispositivos a utilizar, sus ventajas y sus desventajas. En la sección siguiente se van a abordar algunos sistemas de captura y se mencionan dispositivos que los utilizan.
2.3. Sistemas para la captura de movimientos
Con otros tipos de requerimientos en mente, fueron surgiendo distintos tipos de sistemas, los cuales pueden ser categorizados en mecánicos, ópticos, magnéticos, acústicos y de
seguimiento inercial. En general, para simplificar el cuerpo humano, los sistemas lo consideran como si fuera un sistema de enlaces rígidos (rigid links) unidos por articulaciones (joints). En las siguientes secciones detallaremos en mayor profundidad las categorías mencionadas anteriormente, y haremos mayor hincapié en los sistemas de seguimiento inercial, ya que nuestro trabajo utiliza como base estos últimos.
2.3.1. Sistemas mecánicos
Los sistemas mecánicos utilizan goniómetros (instrumentos utilizados para medir ángulos), potenciómetros y otros instrumentos, los cuales son llevados por los usuarios. Estos instrumentos brindan distintos datos sobre las articulaciones del cuerpo a los algoritmos cinemáticos, y en base a ellos calculan la posición del usuario. En la figura 2.4 puede verse una persona llevando un sistema mecánico muy básico.
Figura 2.4. Sistema mecánico con goniómetros.
Estos sistemas presentan las siguientes desventajas: cuando el usuario se mueve, los instrumentos se corren de lugar, causando que sea necesario calibrarlos; hay ciertas articulaciones en las cuales es muy difícil colocar estos instrumentos de medición, como los hombros, ya que limitan el movimiento; y, finalmente, como cada cuerpo es diferente, se debe recalibrar para cada usuario diferente que lo use.
2.3.2. Sistemas ópticos
Los sistemas ópticos utilizan dos o más cámaras colocadas alrededor del usuario, de manera en que se obtengan proyecciones que puedan solaparse. Utilizando estas imágenes obtenidas por las cámaras, se puede hacer una triangulación para obtener la posición del usuario.
Por lo general, se utilizan indicadores, los cuales son colocados en la ropa del usuario [Figura 2.5]. Existen diferentes tecnologías relacionadas a estos indicadores: indicadores pasivos, indicadores activos, indicadores semi-pasivos imperceptibles [20], y, recientemente, sin indicadores.
Como ventajas que pueden mencionarse sobre estos sistemas tenemos la rápida captura de muestras que posee, lo cual posibilita capturar movimientos muy rápidos, aunque esto depende de qué cámaras sean utilizadas. Otra ventaja es la libertad de movimiento que ofrece esta tecnología, debido a que el usuario no debe llevar ningún cable extra, o dispositivo que limite su movimiento.
Entre sus desventajas tenemos: el alto costo de las cámaras; cuando se requiere capturar gran detalle de objetos pequeños es necesario colocar mayor cantidad de indicadores, pero esto puede conllevar a otro problema conocido como “tracking-confusion”, en el cual la luz emitida por indicadores muy cercanos se solapa causando que sea imposible realizar la captura. Para solucionar este último problema, se requieren cámaras que capten mayor resolución, conllevando a un costo aún mayor. En los sistemas que no utilizan cámaras o marcadores no se tiene esta última desventaja, pero, en cambio, pierden precisión. Finalmente, la precisión de estos sistemas depende en gran medida de la iluminación del lugar.
A continuación, explicaremos con más detalle las tecnologías relacionadas a indicadores.
2.3.2.1. Indicadores pasivos
Figura 2.5. Actor utilizando indicadores pasivos. 2.3.2.2. Indicadores activos
Los indicadores activos funcionan de manera similar, pero en lugar de utilizar indicadores que reflejan luz, utilizan Leds que emiten su propia luz, como puede verse en la figura 2.6. Debido a que los Leds emiten más luz de la que es capaz de reflejar los indicadores pasivos (por la Ley de la inversa del cuadrado [21]), esta tecnología aumenta considerablemente la distancia y el volumen que es posible capturar.
2.3.2.3. Indicadores semi-pasivos imperceptibles
A diferencia de los indicadores mencionados anteriormente, estos indicadores son “etiquetas” fotosensibles, que son capaces de detectar su propia posición y orientación, e incluso la cantidad de luz que reciben. Luego se utilizan proyectores de múltiples Leds para lograr codificar el espacio 3D. Se los llama imperceptibles debido a que pueden ser colocados en cualquier superficie, y son apenas visibles [22]. En la figura 2.7 se puede observar la utilización de estos indicadores.
Figura 2.7. A la izquierda: Proyector de múltiples LED’s. A la derecha: Actor con indicadores semi-pasivos imperceptibles.
2.3.2.4. Tecnología sin indicadores
En los últimos años, los continuos avances en visión computacional permitieron que surgieran nuevos dispositivos capaces de reconocer movimientos del cuerpo humano, sin necesidad de utilizar ningún indicador, o algún traje especial. Estos sistemas utilizan algoritmos que analizan varias fuentes de imágenes, para identificar formas humanas. Luego de identificar las formas humanas, identifican las distintas secciones del cuerpo, para llevar el seguimiento de cada una de ellas. Dos dispositivos conocidos que utilizan esta tecnología son el Microsoft Kinect, figura 2.8, y Leap Motion, figura 2.9.
Figura 2.9. Leap Motion.
2.3.3. Sistemas magnéticos
Figura 2.10. Traje con sensores magnéticos y unidad eléctrica central.
2.3.4. Sistemas acústicos
Los sistemas acústicos están compuestos por uno o más transmisores que generan pulsos de ultrasonido, imperceptibles para los humanos. Luego, se colocan receptores en distintos puntos pre-establecidos que capturan estos pulsos (En la figura 2.11 se pueden ver dos sensores básicos de ultrasonido).
Figura 2.11. Sensor de rango que utiliza ultrasonido.
2.3.5. Sistemas de seguimiento inercial
Los sistemas de seguimiento inercial utilizan sensores muy pequeños y precisos. De estos sensores, los sistemas obtienen información acerca de la aceleración y la velocidad angular. Sabiendo la posición y la velocidad angular inicial, e integrando con los datos obtenidos por los sensores, se puede determinar la posición y los movimientos del usuario. La información obtenida es enviada en tiempo real hacia un computadora o dispositivo, la cual la interpreta y genera la respectiva representación de los datos. Como ventaja de estos sistemas se tiene la facilidad con la que pueden colocarse en un dispositivo o llevarse en un traje. También, tienen una alta precisión. Como desventaja se tiene el problema del drifting (se acumulan datos posicionales erróneamente lo cual genera un desplazamiento no deseado en la posición).
La mayoría de los sistemas de seguimiento inercial utilizan unidades de medición inercial (IMUs), que contienen una combinación de giroscopios, magnetómetros y acelerómetros. Para el propósito de este trabajo, explicaremos en mayor profundidad el funcionamiento de los giroscopios y acelerómetros, ya que son los sensores sobre los cuales hemos trabajado, y son los cuales se utilizan en los smartphones actuales para realizar el seguimiento de la cabeza del usuario cuando se está utilizando un visor de VR. Primero aclararemos brevemente que es un sensor.
2.3.5.1. Sensores
procesado por la unidad de control del sistema. Existen numerosos tipos de sensores hoy en día (de contacto, ópticos, térmicos, de humedad, magnéticos, de infrarrojos, etc.), pero como mencionamos anteriormente, nos centraremos en los acelerómetros y giroscopios.
2.3.5.2. Sensor Acelerómetro
Un acelerómetro [31] detecta las fuerzas de inercia que empujan al sensor y las descomponen en las tres direcciones principales de referencia (X, Y, Z).
Figura 2.12. Esquema de funcionamiento de un acelerómetro.
Cuando un acelerómetro es sometido a una fuerza lateral en una dirección, el sensor interno (en la figura 2.12, la esfera) tiende a retrasarse en la dirección contraria a la fuerza que actúa y al detectar en qué paredes choca y con qué intensidad, podemos calcular la dirección en intensidad de la fuerza aplicada. La flecha color azul indica la realización de un movimiento en dicha dirección con una determinada aceleración. En el caso de esta figura, la aceleración de 1g en la dirección que la flecha azul indica genera que la esfera se pegue a la pared contraria del sensor con una fuerza de igual magnitud, pero en dirección contraria. Esto le permite al sensor calcular la intensidad de la aceleración del movimiento realizado.
Figura 2.13. Acelerómetro actual
Esta aceleración permite poder determinar de qué manera se mueve el dispositivo. Los valores que devuelve este sensor dependen de que chip se esté utilizando, pero todos están o pueden ser mapeados a g’s, como puede verse en la figura 2.14. Las fuerzas g no son una medida de fuerza sino una medida intuitiva de aceleración. Está basada en la aceleración que produciría la gravedad terrestre en un objeto cualquiera en condiciones ideales (sin atmósfera u otro rozamiento).
Cada eje del acelerómetro se corresponde con los mismos ejes del smartphone [Figura 2.15]. Este chip es el que se va a utilizar a lo largo del desarrollo de la tesis. Al tener el dispositivo colocado de forma apaisada con la parte superior apuntando a la izquierda (esta posición se denomina comúnmente Landscape Left), los valores de partida del acelerómetro son los observados en la tabla 2.1.
En la figura 2.14 se puede apreciar como los valores de los ejes X y Z varían al realizar un movimiento de 90º desde arriba hacia abajo por el eje X partiendo de la posición inicial antes descrita (Landscape Left) y volviendo a dicha posición en un tiempo total de aproximadamente 2 segundos. Vemos que el eje Y no tiene mayores variantes dado que el celular no se desplaza hacia los costados.
Figura 2.15. Relación entre los ejes de coordenadas de un acelerómetro y un smartphone.
Eje Valor
X ~ 1
Y ~ 0
Z ~ 0
Tabla 2.1. Tabla de valores iniciales aproximados del acelerómetro.
Dada la anterior explicación, procederemos a explicar el funcionamiento de los giroscopios.
2.3.5.3. Sensor giroscopio
Figura 2.16. Mapeo de ejes de rotación X, Y, Z a un dispositivo.
2.4. Resumen
A lo largo del capítulo se introdujeron diversos conceptos que son necesarios para el propósito de este trabajo: realidad virtual, reconocimiento de gestos y captura de movimientos.
Además de los conceptos, se introdujeron diversas tecnologías relacionadas a la captura de movimientos, junto con sus ventajas y desventajas, las cuales pueden observarse en la tabla 2.2.
De estas tecnologías, se realizó mayor énfasis en los sistemas de seguimiento inercial, debido a que utilizan sensores que, hoy en día, se encuentran en cualquier smartphone (A excepción del giroscopio, que no todos lo incluyen). Debido a esto, es posible disfrutar un acercamiento a la realidad virtual, sin recurrir a gastos extras, lo cual es lo que también se busca con la utilización del Google Cardboard.
Enfoque Ventajas Desventajas
Sistemas mecánicos
+ No sufren interferencias + El proceso de
recalibración no es tan tedioso como en otros enfoques + Fácil de utilizar
- Se deben recalibrar cuando cambia el usuario, o se corren de lugar los instrumentos - Limitan mucho el movimiento
Sistemas ópticos
+ Puede reconocer movimientos rápidos + No limita el
movimiento
- La velocidad de captura de las muestras depende de qué cámara se utilice
- La precisión depende de una correcta iluminación
- Alto costo de las cámaras - Con indicadores: se puede
llegar a solapar la luz de varios de ellos (tracking-confusion)
Sistemas magnéticos
+ Puede capturar gran cantidad de usuarios simultáneamente
- Causan interferencia en los dispositivos cercanos - Baja tasa de captura - Baja precisión
Sistemas acústicos
+ Son baratos - No reconocen movimientos muy rápidos
Sistemas de seguimiento inercial
+ Son muy precisos + Los sensores son fáciles de llevar por el usuario
- Problema del drifting o desplazamiento por error acumulativo
3. Sistema Basado en Reglas para el reconocimiento de gestos
Para simplificar la tarea de agregar el reconocimiento de gestos a una aplicación de realidad virtual, y evitar un largo y complejo tiempo de entrenamiento, se propone el framework
VRGestures (a partir de ahora, VRG). El enfoque de VRG apunta a que el desarrollador no necesite ningún conocimiento técnico relacionado con la captura de datos ni la interpretación de los mismos, facilitando el desarrollo de una aplicación de realidad virtual basada en gestos. De esta forma el desarrollador se abstrae de las cuestiones técnicas y puede centrarse completamente en el desarrollo de la lógica del negocio de la aplicación. Esto permite un mejor aprovechamiento del uso del tiempo por parte del desarrollador, maximizando así el rendimiento de éste a la hora de llevar a cabo el reconocimiento de gestos y la posterior ejecución de acciones al éstos ser reconocidos. La figura 3.1 muestra un esquema conceptual del enfoque.
Figura 3.1. Esquema conceptual del enfoque propuesto
Como se puede apreciar en la figura, nuestro enfoque está basado en dos fases. Por un lado, se encuentra la fase de reconocimiento, encargada de reconocer los gestos que el usuario realiza y por el otro, se encuentra la fase de configuración. Esta última se encarga de permitir al desarrollador configurar gestos, condiciones y acciones.
3.1. Fase de Reconocimiento
Cuando el usuario realiza un movimiento con la cabeza, los sensores comienzan a generar datos. Estos datos son evaluados en tiempo real por el framework mediante distintas reglas comprendidas por el motor de reglas. Se optó por utilizar el sistema de reglas dado que los sistemas basados en reglas proveen gran modificabilidad, de esta forma para cambiar la funcionalidad solo se deben agregar o quitar reglas. Además, los sistemas basados en reglas brindan gran facilidad de uso, ya que el concepto de Si-Condición-Entonces-Acción de una regla es muy fácil de comprender para un desarrollador, lo cual permite una mejora en el tiempo de aprendizaje del framework como así también simplifica la tarea de agregar nuevos elementos que se desprendan de los ya existentes en VRG. Finalmente, estos sistemas permiten una gran extensibilidad ya que es posible crear reglas nuevas con condiciones nuevas creadas por el desarrollador, y que se adapten a sus necesidades.
Como se mencionó anteriormente, el movimiento de la cabeza del usuario (al estar utilizando el celular en un visor VR estilo Google Cardboard) es el impulso que desencadena que el framework realice el análisis de dicho movimiento. Una vez realizado el movimiento los sensores del teléfono comienzan a generar datos. Estos datos son brindados al motor de reglas del framework quién se encargará de analizar si los datos satisfacen una, algunas o ninguna de las reglas que se encuentran configuradas en él. Para entender cómo funciona este motor de reglas primero es necesario definir cómo está compuesta una regla: “Una regla
del motor de reglas está compuesta por la relación entre una condición, un gesto y una
acción a ejecutar.”
En primer lugar, el motor de reglas evalúa si la condición asociada a la regla se está cumpliendo. Una condición es una restricción que se debe cumplir dentro del espacio virtual. Cada condición se encarga de interpretar los datos recibidos desde la aplicación VR. Para esto, el motor de reglas solicita la posición del usuario en el mundo VR o de algún elemento dentro del mundo y evalúa si los datos obtenidos satisfacen la condición deseada. Cuando los datos leídos satisfacen los parámetros establecidos en la condición de una determinada regla, se considera que la condición se está cumpliendo. Actualmente, el framework reconoce un conjunto de condiciones predefinidas, que serán explicadas en detalle en el capítulo 4, y, además, se brinda la posibilidad de agregar nuevas condiciones fácilmente.
Una vez que la condición de una regla se satisface, se procede a evaluar el gesto asociado a dicha regla. Definamos qué es para nuestro framework un gesto:
determinada regla, se considera que el gesto se ha realizado satisfactoriamente. Actualmente, el framework reconoce un conjunto de gestos básicos (mirar a la derecha, hacia abajo, negar con la cabeza, etc.) que serán explicados en detalle en el capítulo 4 y se brinda la posibilidad de agregar nuevos. Cabe destacar que para que un gesto sea evaluado debe estar incluido en al menos una regla en la que la condición asociada a dicha regla está siendo satisfecha. En caso de que un gesto no esté incluido en ninguna regla, éste no será evaluado. De esta forma solo se trabaja en el reconocimiento de gestos “buscados” por el desarrollador. Finalmente, al ser reconocido el gesto y ser válida la condición, el motor de reglas ejecuta una acción. Cada regla lleva asociada una referencia a una acción. Una acción es cualquier funcionalidad que el desarrollador desee que se ejecute en respuesta al cumplimiento de la regla. Con este mecanismo se cierra el círculo mediante el cual el usuario interactúa en el mundo virtual.
Como precondición de la fase de reconocimiento, se encuentra la fase de configuración
donde un desarrollador puede configurar los componentes descritos en la fase de Reconocimiento con el objetivo de crear su aplicación personalizada.
3.2. Fase de Configuración
La Fase de Configuración comienza cuando el desarrollador desea incluir acciones a su aplicación VR. Para esto, el desarrollador debe configurar una regla. Como vimos en la etapa de Reconocimiento una regla queda constituida al configurar una condición, un gesto y una
acción.
Por un lado, se configura una condición. La condición posee sus propios parámetros de configuración dependiendo de qué tipo de condición sea. Actualmente el framework cuenta con 3 tipos de condiciones: True, Near Sphere (Proximidad a una zona esférica definida) y
Near Cube (Proximidad a una zona cúbica definida). La condición True no tiene parámetros dado que siempre será evaluada como verdadera. La utilidad que esto provee al desarrollador es la facilidad de poder reconocer un gesto en todo el espacio virtual y en cualquier momento minimizando las complicaciones a la hora de definir la condición. La condición Near Sphere
tiene tres parámetros: La posición de la esfera que delimita la zona de cumplimiento, el tamaño de la misma y una referencia al objeto que se desea analizar si ingresa a la esfera (generalmente el objeto que representa al usuario en el mundo virtual). Por último, la condición Near Cube también cuenta con tres parámetros: La posición del cubo que delimita la zona de cumplimiento, el tamaño de una de las caras y una referencia al objeto que se desea analizar si ingresa a la zona cúbica. Más adelante se hablará en detalle de dichas condiciones, sus parámetros, la forma de configurarlas, etc.
movimiento del giro de la cabeza, o, en el caso de los gestos Look Down (Mirar hacia abajo) y Look Up (Mirar hacia arriba), se puede configurar el ángulo de inclinación de la cabeza. Otro tipo de gestos, como el And (Operador lógico “y” entre dos gestos)y Or (Operador lógico “o” entre dos gestos), permiten especificar el tiempo que se puede tomar el usuario para realizar dicho gesto, etc.
Por último, al establecerse la relación entre la condición y el gesto, queda definida la regla con la acción a ejecutar. La acción puede ser cualquier funcionalidad implementada, o a implementar, por el desarrollador. Como vimos anteriormente, esta acción se ejecutará siempre que el motor de reglas considere que dicha regla haya sido satisfecha.
3.3. Ejemplo de funcionamiento del framework
Las siguientes secciones muestran con mayor detalle el funcionamiento de cada fase del enfoque. Para facilitar su comprensión se utilizará un ejemplo conductor. El ejemplo se desarrolla en el contexto de un juego para dispositivos móviles que simula un laberinto, el cual puede observarse en la figura 3.2. El juego consiste en entrar en las zonas cercanas a las puertas y realizar el gesto o la combinación de gestos descritos en dichas puertas para abrirlas. Dicho juego reacciona ante ciertos movimientos del usuario, por ejemplo, caminar hacia donde el usuario está mirando al agachar la cabeza con una cierta inclinación. De ahora en adelante, esta acción de mirar hacia abajo será denominada Look Down. Con el objetivo de facilitar la explicación de las distintas fases utilizaremos un ejemplo conductor que consiste en explicar primero el gesto Look Down antes mencionado y un nuevo gesto denominado
Look Right que consiste en girar la cabeza a una cierta velocidad hacia la derecha. Cada uno de estos gestos dependerá exclusivamente de los datos arrojados por un único sensor para verificar la validez del gesto (es decir, si se cumplió o no). El gesto Look Down tomará los datos del sensor acelerómetro y el gesto Look Right tomará los datos del sensor giroscopio. En las siguientes secciones iremos explicando paso a paso las diferentes fases que componen el framework (Fase de reconocimiento y Fase de configuración).
Figura 3.2. Aplicación Maze frente a una puerta en la cual debe mirarse hacia abajo para abrirla.
3.3.1. Fase de reconocimiento
validación de reglas que es donde se comprueba si alguna regla fue cumplida para ejecutar la acción asociada a la misma. Esta segunda etapa a su vez puede ser subdividida en tres sub etapas. Primero, la validación de condiciones, en las cual los datos recibidos desde la aplicación VR son evaluados para verificar si se está cumpliendo correctamente alguna condición. Segunda, la etapa de reconocimiento de gestos, donde los datos recibidos desde los sensores son evaluados y se comprueba que el usuario esté realizando algún gesto en particular. Finalmente, la tercera sub etapa, lanzamiento de la acción, que consiste en ejecutar correctamente la función asociada con la regla. Todas estas etapas serán explicadas en mayor profundidad a continuación, siguiendo el ejemplo conductor mencionado en el apartado anterior.
Figura 3.3. Etapas de la Fase de Reconocimiento 3.3.1.1. Captura de datos
Como se ve en la figura 3.2, el usuario se encuentra en el laberinto y tiene a la vista una puerta en la que está escrito el gesto que hace que ésta se abra (Look Down). Una vez que el usuario realiza el gesto, los valores de los sensores son evaluados por el motor de reglas y de cumplirse la regla correspondiente a dicha puerta se abrirá.
En el caso del ejemplo mencionado, los valores del dispositivo (tomando en cuenta sólo el sensor acelerómetro ya que es el único implicado en este gesto) parten de los valores iniciales mostrados en la tabla 3.2. Al inclinar la cabeza para mirar hacia abajo, el dato arrojado por el sensor en el eje Z, que se encuentra inicialmente en 0, ve su valor disminuirse (aumentar negativamente) dado que se está produciendo una aceleración en la dirección negativa en ese eje. Los valores de Y, X no influyen en este gesto dado que se supone que el teléfono está en la posición Landscape Left. Más adelante se analizará el gesto Look Right (gesto en el que sólo interviene el sensor acelerómetro) en el que se explican los datos que el sensor acelerómetro arroja y cómo este gesto los interpreta para lograr el fin deseado (comprobar si el gesto fue realizado o no).
Eje Valor
X ~ 1
Y ~ 0
Z Entre 0 y -1 dependiendo de la inclinación
Tabla 3.1. Tabla de valores estimativos aproximados del acelerómetro.
Estos valores se corresponden si al inclinar la cabeza se realiza de forma perfectamente recta. En caso de realizar alguna inclinación hacia la izquierda o la derecha se producirán variaciones en los otros ejes (concretamente, en el eje X).
Para la primera etapa de la fase de reconocimiento, la captura de datos, se optó por analizar en tiempo real los datos provenientes del acelerómetro y el giroscopio (Dependiendo del gesto en cuestión se analizan los datos del acelerómetro o los datos del giroscopio). Estos datos pasan a través de funciones matemáticas para ser luego evaluados por los gestos. Nuestro framework se encarga de tomar los datos de los sensores y simplificar el uso de los mismos para obtener el fin deseado por el desarrollador sin que éste tenga que tener un vasto conocimiento sobre cómo interpretar los datos provistos por estos sensores. Además, facilita la configuración de condiciones en el mundo VR gracias a las condiciones provistas en él. A continuación, se proseguirá con la explicación de las distintas etapas.
3.3.1.2. Validación de reglas
aplicación. Como ya se mencionó, las reglas van a estar compuestas por una condición a cumplirse, un gesto a reconocer y una acción a realizar. De esta forma, el framework evalúa constantemente mediante el motor de reglas si los datos obtenidos del mundo VR satisfacen las condiciones de las reglas configuradas por el desarrollador y, para las que se estén cumpliendo, realizará el análisis de los datos arrojados por los sensores para comprobar la realización de los gestos para los que las condiciones se estén cumpliendo. Luego de esto, el motor de reglas lanzará la acción asociada a cada regla en la que se haya cumplido la condición y el gesto en el orden especificado anteriormente.
En nuestro ejemplo, se va a tener una regla en la cual se necesite entrar en un área cúbica cercana a una puerta (Condición), se deba mirar hacia abajo (Gesto, analizado por el Reconocedor de gestos), y finalmente la acción para abrir la puerta (Acción) en consecuencia al cumplimiento de la condición y el gesto. Una vez que la condición se cumpla, se habilita el reconocimiento del gesto. Esto quiere decir, que una vez que se esté cumpliendo la condición se analizan los datos del sensor involucrado en el gesto en cuestión por el Reconocedor de Gestos asociado a dicho gesto en esa regla. Si éste se cumple y la condición se sigue cumpliendo, entonces la regla finalmente se reconoce como válida y se llama a ejecutar a la acción (en nuestro caso la apertura de la puerta).
3.3.1.3. Validación de las condiciones
Lo primero que debemos comprender es la forma en que se valida una condición. Con este fin, a medida que el jugador interactúa dentro del mundo virtual, se evalúan distintos datos provenientes del mismo para verificar si se cumplen las condiciones necesarias para realizar una acción.
Figura 3.4. Nuestro robot Kyle(representando un usuario VR) se encuentra en el laberinto y camina hacia una zona cercana a la primera puerta que observa.
En la figura 3.5 se puede apreciar que Kyle se encuentra dentro de la zona cúbica definida en la configuración de la condición. Para chequear si la condición se está cumpliendo ésta utiliza los valores seleccionados en su configuración y evalúa si Kyle se encuentra dentro de la zona delimitada o no.
Figura 3.5. El framework reconoce a nuestro robot Kyle dentro de la zona definida en la configuración de la condición y ésta se satisface.
3.3.1.4. Reconocimiento de los gestos
Continuando con nuestro ejemplo, Kyle realiza el gesto que lee en la puerta con la que se encuentra (Look Down). Para esto inclina su cabeza hacia abajo y el framework no detecta el gesto hasta que la inclinación iguale o supere a la establecida en la configuración de dicho gesto.
Figura 3.6. Acelerómetro en Landscape Left.
Para nuestro ejemplo en particular, supongamos que este valor es 0.7, que se corresponde aproximadamente con un ángulo de 45º. Al hacer esto, él o los sensores utilizados en la implementación de este gesto reflejarán el movimiento de la cabeza de Kyle y activarán el gesto como reconocido. En la figura 3.6, utilizando la aplicación Accelerometer Meter1 para apreciar los datos recogidos por el sensor acelerómetro, se puede observar cómo las tres coordenadas (X, Y, y Z) se mantienen de forma constante en valores cercanos a (X=1, Y=0, Z=0) al sostener el dispositivo de forma Landscape Left (apaisado hacia la izquierda). En la figura 3.7 puede apreciarse una medición en el tiempo sobre el sensor acelerómetro al realizar el movimiento antes mencionado partiendo desde tener la vista al frente (figura 3.6).
Figura 3.7. Medición del acelerómetro en el tiempo al mirar hacia abajo y luego volver a mirar al frente.
Figura 3.8. El framework reconoce la regla como satisfecha y ejecuta la acción de abrir la puerta para que Kyle pueda continuar su camino.
3.3.1.5. Ejecución de las acciones
Cumpliendo la condición y una vez que el gesto es reconocido, la regla se da por cumplida, por lo tanto, se debe proceder a ejecutar la acción asociada. Como vimos anteriormente nuestro robot de pruebas Kyle se posicionó dentro de la zona necesaria para que la condición se cumpla, habilitando así la detección del gesto asociado a la misma regla. Una vez que Kyle realiza el gesto estando dentro de la zona, la regla pasa a estar satisfecha y se procede a ejecutar la acción asociada. En este caso la acción asociada es la de abrir la puerta que se encuentra frente a él para que pueda lograr pasar y continuar su camino por el laberinto hacia la salida. La figura 3.8 muestra el resultado de ejecutar la acción asociada a la regla anteriormente explicada. Es necesario notar que en la detección de la condición y el gesto el framework provee mecanismos para abstraer al usuario y simplificar su utilización. Sin embargo, en el caso de ejecución de acciones dicha implementación se corresponde más a la interacción del juego y el usuario por lo tanto depende más de la lógica que el asigne el programador.
3.3.1.6. Gestos que utilizan el sensor giroscopio
que existe una regla que asocia una condición Near Cube (6 unidades de medición establecidas en dicha condición), con el gesto Look Right y con la acción para abrir dicha puerta.
Figura 3.9. Kyle se encuentra con una puerta que le pide realizar el gesto “LookRight” para poder continuar.
La figura 3.9 muestra nuevamente a nuestro robot Kyle frente a una puerta que en este caso contiene el texto “Look Right”. Supongamos que Kyle se encuentra dentro de la zona de Near Cube. Dicho esto, pasemos a explicar qué es lo que esperamos del movimiento Look Right
para que este sea satisfecho, la regla se cumpla y Kyle pueda avanzar hacia el final del juego.
3.3.1.7 Detección del gesto Look Right
angular de cada eje de rotación del sensor giroscopio, el rango de radianes/segundos que el sensor es capaz de distinguir, y también se puede apreciar el tiempo transcurrido de la medición (indicado en la parte inferior de la imagen de 0 segundos a 10 segundos. Cada eje de rotación (X, Y, Z) se encuentra mapeado directamente con un color. Como puede verse en la imagen: El color rojo representa la velocidad angular de giro sobre el eje X medida en Radianes/segundo, de igual forma el color verde representa la velocidad de giro sobre el eje Y, y el color azul la velocidad de giro sobre el eje Z. Para el caso del gesto Look Right
particularmente se espera que el valor de X disminuya dado que al tomar el celular de forma
Landscape Left con las manos, sin importar la posición del teléfono en el espacio, y generarle un giro al mismo hacia la derecha estaremos afectando de forma negativa al valor de X en consecuencia a nuestra acción.
Eje de rotación Velocidad de giro (Radianes/seg.)
X ~ 0
Y ~ 0
Z ~ 0
Tabla 3.2. Tabla de valores para el giroscopio cuando se encuentra en forma estacionaria.
Figura 3.10. Valores arrojados por el giroscopio (celular en reposo).
Al tomar el celular de forma Landscape Left como se espera que el usuario haga al utilizar el teléfono en un dispositivo VR estilo Google Cardboard y realizar el giro hacia la derecha antes descrito el sensor arroja los datos mostrados en el gráfico de la figura 3.11.
Figura 3.11. Gráfico datos giroscopio giro a derecha.
Como esperábamos, el valor de X disminuyó hasta un valor cercano al -2.6 y luego volvió al estado de reposo dado que no se realizaron más movimientos luego del giro a derecha. De esta forma si por ejemplo el valor de VelocidadDeGiro del gesto Look Right se encontraba establecido en 2.0 y Kyle realizó el movimiento reflejado por el gráfico de la figura 3.10 superando dicho valor estando Kyle dentro de la zona de la condición asociada (Near Cube) en la misma regla que el gesto antes mencionado, entonces la regla se reconoce como satisfecha y Kyle puede seguir su curso hacia el final del juego exitosamente.
3.3.2. Fase de Configuración
acciones que el desarrollador o la aplicación a la que se le está incluyendo una implementación del framework ya posea. Todo lo mencionado va a ser explicado en mayor profundidad en las secciones siguientes, siguiendo el ejemplo conductor del robot Kyle y la configuración del gesto Look Down.
3.3.2.1. Selección y Configuración de las condiciones
VRG cuenta con un conjunto de condiciones implementadas por defecto, de las cuales el desarrollador puede utilizar las que necesite, o bien implementar una condición nueva que se ajuste a sus necesidades puntuales. Las condiciones que actualmente dispone el framework son las que se pueden observar en la tabla 3.3.
Nombre condición Detalle
Near Sphere Se satisface cuando el usuario se encuentra dentro de los parámetros de un espacio esférico. Parámetros: Posición de la esfera, tamaño de la esfera, referencia al usuario.
Near Cube Se satisface cuando el usuario se encuentra dentro de los parámetros de un espacio cúbico. Posición del cubo, tamaño del cubo, referencia al usuario.
True Se satisface siempre. No tiene parámetros
Tabla 3.3. Tabla de condiciones
Figura 3.12. Ejemplo de configuración de la condición Condition Near Cube.
La figura 3.12 muestra la configuración de la condición Near Cube. En ésta, se pueden apreciar 4 cubos de distinto color. Cada cubo representa el tamaño que tendrá la zona cúbica asociada a la configuración de 4 posibles configuraciones. El cubo amarillo representa una configuración de tamaño de lado de 5 unidades de medición, el rojo representa un tamaño de lado de 4 unidades de medición, el azul un tamaño de lado de 3 unidades de medición, y por último el verde un tamaño de lado 2 unidades de medición. También puede apreciarse en la figura en la parte superior derecha que nos encontramos con la referencia al robot Kyle en el mundo VR y también con la configuración para especificar la posición central del cubo, en este caso (X = 22, Y = 0.7, Z = 13).
3.3.2.2. Selección y Configuración de los gestos y Acciones a realizar
Luego de seleccionar las condiciones se procede a seleccionar gestos del repertorio de gestos del framework o, en caso de ser necesario, a implementar los propios. La tabla 3.4 muestra el conjunto de gestos que actualmente ofrece VRGestures.
Nombre Detalle Sensor
involucrado
Look Left Se satisface cuando el usuario mira hacia la izquierda a una cierta velocidad. Parámetros: Tiempo de persistencia del gesto (el tiempo que el estado de reconocido persistirá luego de ser reconocido el gesto), velocidadDeGiro (representa la velocidad a partir de la cual el gesto será reconocido) medida en radianes/segundos.
Look Right Se satisface cuando el usuario mira hacia la derecha a una cierta velocidad. Parámetros: Tiempo de persistencia del gesto (el tiempo que este persistirá luego de ser reconocido),
velocidadDeGiro (representa la velocidad a partir de la cual el gesto será reconocido) medida en radianes/segundos-
Giroscopio
Look Up Se satisface cuando el usuario mira hacia arriba. Parámetros: Tiempo de persistencia del gesto (el tiempo que este persistirá luego de ser reconocido), inclinación (valor real que representa el ángulo de inclinación hacia arriba, tomando inicialmente al celular de forma Landscape Left)
Acelerómetro
Look Down Se satisface cuando el usuario mira hacia abajo. Parámetros: Tiempo de persistencia del gesto (el tiempo que este persistirá luego de ser reconocido), inclinación (valor real que representa el ángulo de inclinación hacia abajo, tomando inicialmente al celular de forma Landscape Left) medido en grados.
Acelerómetro
Tilt Left Se satisface cuando el usuario inclina la cabeza a la izquierda. Parámetros: Tiempo de persistencia del gesto (el tiempo que este persistirá luego de ser reconocido), inclinación (valor real que representa el ángulo de inclinación hacia la izquierda, tomando inicialmente al celular de forma Landscape Left) medido en grados.
Acelerómetro
Tilt Right Se satisface cuando el usuario inclina la cabeza a la derecha. Parámetros: Tiempo de persistencia del gesto (el tiempo que este persistirá luego de ser reconocido), inclinación (valor real que representa el ángulo de inclinación hacia la derecha, tomando inicialmente al celular de forma Landscape Left) medido en grados.
Acelerómetro
Or Se satisface cuando al menos un gesto es reconocido. Parámetros: Tiempo de persistencia del gesto (el tiempo que este persistirá luego de ser reconocido), dos gestos de cualquier tipo.
Depende de los gestos involucrados
And Se satisface cuando dos gestos se cumplen al mismo tiempo, o uno después de otro. Parámetros: Tiempo de persistencia del gesto (el tiempo que este persistirá luego de ser reconocido), dos gestos de cualquier tipo.
Depende de los gestos involucrados
Yes Se satisface cuando el usuario realiza asiente con la cabeza (arriba, abajo, arriba) Parámetros: Intervalo de tiempo en el cual se realiza el gesto (en segundos), y sensibilidad del gesto, es decir la velocidad con la cual debe inclinar la cabeza hacia arriba y hacia abajo (de 0 a 5, de menor a
mayor sensible).
No Se satisface cuando el usuario niega con la cabeza (izquierda, derecha, izquierda)
Parámetros: Intervalo de tiempo en el cual se realiza el gesto (en segundos), y sensibilidad del gesto, es decir la velocidad con la cual debe realizar el giro de a izquierda y a la derecha (de 0 a 5, de menor a mayor sensible).
Giroscopio
Tabla 3.4. Tabla de gestos.
Una vez seleccionados los gestos que se desean incorporar a la aplicación se procede a configurar los mismos. Siguiendo con el ejemplo procederemos a configurar los parámetros del gesto Look Down. Este gesto contiene un único parámetro que es denominado
inclinación y representa el valor que debe superar el dato arrojado por el acelerómetro en el eje Z. Establecemos el valor en 45 que es el equivalente a 45º de inclinación. Ahora, el desarrollador deberá asociar una acción a dicha regla. Para esto, simplemente selecciona la acción que desea que se ejecute al cumplirse la regla de su colección de funcionalidades o desarrollará una nueva y procederá a seleccionarla. Esto concluye la configuración de la regla. Ahora que todo se encuentra correctamente configurado, al satisfacerse una regla en el motor de reglas, éste llamará a ejecutar la acción asociada a ella. En el caso de los gestos compuestos por otros gestos como lo son el And y el Or se decidió utilizar la siguiente estrategia:
3.4. Resumen
Para concluir con el capítulo se presentan cuatro imágenes (3.13-3.16) a modo de resumen final del flujo desde la validación de la regla hasta la ejecución de la acción. Esto supone explicar el orden de ocurrencia de los eventos desde que Kyle se encuentra fuera de la zona de la condición de la puerta 1 hasta que logra abrir la misma.
Figura 3.13. Situación inicial: Kyle se encuentra fuera de la zona de condición de la puerta 1.
En la figura 3.13 se puede ver a Kyle fuera de la zona de cumplimiento de la condición, representada con fines explicativos por el cubo de color amarillo. Este cubo representa los límites de cumplimiento de la zona y se encuentra de color amarillo dado que actualmente no está siendo cumplida la condición. En la puerta se puede leer la palabra “Look Down” que indica el gesto que debe realizarse al ingresar en la zona para que la puerta se abra y poder continuar con el avance en el juego. Sin embargo, al estar afuera de la zona que establece la condición, si Kyle realiza el gesto Look Down, no se produce ninguna respuesta por parte del sistema. En la siguiente figura Kyle ingresará a la zona de cumplimiento de la condición.
Figura 3.14. Condición cumplida: Kyle se encuentra dentro de la zona de condición de la puerta 1 y por lo tanto ésta se satisface.
Look Down con su cabeza para abrir la puerta, mientras se encuentra dentro de la zona de cumplimiento. En la siguiente figura Kyle realizará el gesto mencionado.
Figura 3.15. Realización del gesto: Kyle realiza el gesto que ve en la puerta.
En la figura 3.15 Kyle se encuentra realizando el gesto de Look Down mientras se encuentra dentro de la zona de cumplimiento. Dado que Kyle realiza el gesto y la condición estaba siendo cumplida se procederá al lanzamiento de la acción asociada (en este caso la de abrir la puerta). En la siguiente figura se lanzará la acción y Kyle podrá avanzar.
Figura 3.16. Ejecución de la acción: Habiendo cumplido con la Condición y habiendo realizado el Gesto el motor de reglas ejecuta la acción y la puerta se abre.