Sunteți pe pagina 1din 175

EDUCACIN

INSTITUTO POLITECNICO NACIONAL

CONSERVACIN
D ET

INNOVACIN
EC
CI
CENTRO DE INNOVACION Y DESARROLLO
TECNOLOGICO EN COMPUTO

Software de Realidad Aumentada para la manipulacion de objetos


virtuales mediante el uso de gesturas de manos

Tesis que para obtener el grado de

Maestra en Tecnologa de Computo

Presenta:

Antonio Guadalupe Cruz Bautista

Directores de Tesis:

M.C. Juan Carlos Gonzalez Robles


DR. Gabriel Sepulveda Cervantes

Mexico, D.F.
Julio 2015.
Resumen

En el presente trabajo se presenta una forma de interactuar con objetos virtuales haciendo uso
de un dispositivo para detectar gesturas de las manos, las cuales van a indicar el tipo de interaccion
que se desea hacer con el objeto, o dicho de otra manera, las gesturas van a indicar una instruccion
o conjunto de instrucciones que se van a ejecutar sobre el objeto. El numero mnimo de gesturas
seran cuatro y se observara todo lo realizado en tiempo real haciendo uso de una pantalla montable
en la cabeza. Se pretende utilizar unas gafas de Realidad Aumentada, pero tambien existe la opcion
de utilizar unas gafas de Realidad Virtual y adaptarle una camara para que se comporte como gafas
de Realidad Aumentada.

I
Abstract

In this work it is presented a way of interact with virtual objects using a gadget for hand
gesture detection, the hand gesture will indicate the interaction type wished for the object, or in
other words, the gestures will indicate a instruction or group of instructions that are going to be
executed over the object. The minimun number of gestures will be four and it will be observed all
in real time, using a head monted display. It is pretended use augmented reality glasses, but it is
posible to use virtual reality glasses with a webcam mounted over the glasses simulating the use of
augmented reality glasses.

II
Agradecimientos

El principal agradecimiento de esta tesis va dedicado a mi madrecita, que siempre me brindo su


apoyo y me ayudo en todo lo que le fuese posible, gracias por creer siempre en m incluso aunque yo
no creyera en mi mismo, gracias por levantarme los animos cuando fracasaba o estaba desconsolado
y triste, por decirme que sin importar lo que pasara, la vida sigue y que siempre tendre a mi familia
que me apoyara y estara conmigo. Atribuyo todos mis exitos en esta vida a las ensenanzas y apoyo
que me dio mi madre. Mil gracias mama!!

Tambien doy gracias a mi ta por apoyarme y darme alojamiento el tiempo que necesite y gracias
tambien a mis asesores por apoyarme y guiarme en este camino que sin ellos no hubiera podido ser
capaz de recorrer. Gracias tambien a mi hijo que siempre estuvo presente en mi pensamiento y fue
una de las principales razones para seguir adelante.

Y por ultimo pero no menos importante, doy gracias a Dios por darme lo necesario para culminar
satisfactoriamente este trayecto que me fue otorgado, y por la compana que me brindo estos dos
anos en forma de un ser muy especial para mi.

III
Indice general

Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . I
Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . II
Agradecimientos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . III
Captulo 1 Introduccion 1
1.1 Historia de la Realidad Aumentada . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Aplicaciones de la Realidad Aumentada . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.1 Medicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.2 Manufactura y reparacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.3 Anotacion y visualizacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.4 Control de la ruta de un robot . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.5 Entretenimiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.6 Aeronaves militares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Problemas de la Realidad Aumentada . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.1 Desajustes de registros estaticos y dinamicos . . . . . . . . . . . . . . . . . . 9
1.3.2 Campo de vision restringido . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.3 Limitaciones y desajustes por claridad de imagen y resolucion . . . . . . . . 10
1.3.4 Desajustes y limitaciones de luminosidad . . . . . . . . . . . . . . . . . . . . 10
1.3.5 Desajustes de contraste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.6 Desajustes de tamano y distancia . . . . . . . . . . . . . . . . . . . . . . . . 10
1.3.7 Resolucion de profundidad limitada . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.8 Desajuste de alineamiento vertical . . . . . . . . . . . . . . . . . . . . . . . . 11
1.3.9 Fallas de interposicion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

IV
1.3.10 Ausencia de sombras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.4 Estado del arte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.5 Planteamiento del problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.5.1 Justificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.6 Objetivo General . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.6.1 Objetivos Particulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.7 Metodologa y discusion preliminar . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.8 Organizacion de la tesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Captulo 2 Dispositivos para la aplicacion 21
2.1 Deteccion de gesturas de manos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.1.1 Leap Motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.1.1 Gesturas disponibles en Leap Motion . . . . . . . . . . . . . . . . . 24
2.1.2 MYO[1] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.1.3 DepthSense 325[2] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.1.4 Touch+[3] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.1.5 Guante DG5-VHand 3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.2 Gafas de Realidad Aumentada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2.2.1 Google Glass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.2.2 Oculus Rift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.2.3 Meta Pro[4] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.2.4 Epson Moverio BT-200[5] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.2.5 ICIS[6] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.2.6 ORA[7] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.2.7 Vuzix M100[8] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
Captulo 3 Diseno y propuesta de la solucion 39
3.1 Integracion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.1.1 Montado de camara de video sobre Oculus . . . . . . . . . . . . . . . . . . . 40
3.1.2 Montado de Leap Motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.2 Sistema propuesto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

V
3.2.1 Usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2.2 HMD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.2.3 Leap Motion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.2.4 Procesamiento y RV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.2.5 Unity3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.3 Funcionamiento interno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.3.1 Blender-Unity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.3.2 Leap-Unity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.3.3 Oculus-Unity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.4 Especificaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.4.1 Software requerido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.4.1.1 Blender[9] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.4.1.2 Unity[10] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.4.1.3 Leap Motion Version 2 . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.4.1.4 Leap Motion V2 Skeletal Assets . . . . . . . . . . . . . . . . . . . . 51
3.4.1.5 Oculus Runtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.4.1.6 Oculus SDK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.4.1.7 Oculus-Unity Integration . . . . . . . . . . . . . . . . . . . . . . . 51
3.4.2 Objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.4.2.1 Calculadora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.4.2.2 Casa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.4.2.3 Silla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.4.3 Gesturas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.4.4 Programacion de scripts en Unity . . . . . . . . . . . . . . . . . . . . . . . . 61
3.4.5 Integracion de los elementos a Realidad Aumentada . . . . . . . . . . . . . . 63
3.4.6 Interaccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.4.6.1 Seleccion y de-seleccion . . . . . . . . . . . . . . . . . . . . . . . . 65
3.4.6.2 Arrastre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.4.6.3 Rotacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

VI
3.4.6.4 Rotacion en un eje . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.4.6.5 Escalado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.4.6.6 Eliminar objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Captulo 4 Pruebas experimentales 71
4.1 Pruebas de la aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.2 Comentarios personales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
Captulo 5 Conclusiones 80
5.1 Obstaculos, limitaciones, problemas y desafos . . . . . . . . . . . . . . . . . . . . . 81
5.2 Trabajo a futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Anexos 83
Anexo A. Diagramas de flujo 84
Anexo B. Especificaciones tecnicas de los dispositivos 87
DepthSense 325 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
Guante DG5-VHand 3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Google Glass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
Oculus Rift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
ICIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Meta Pro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Epson Moverio BT-200 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
ORA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Vuzix M100 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Camara web USB Logitech C170[11] . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Anexo C. Scripts de la aplicacion 97
Bibliografa 137
Glosario 141
Acronimos 155

VII
Indice de figuras

1.1 Uso de un marcador en AR.[12] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2


1.2 Aplicacion prototipo de mantenimiento a una impresora laser.[13] . . . . . . . . . . . . . . . . 6
1.3 Uso de etiquetas.[13] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4 Lineas virtuales para teleoperacion.[13] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5 Pantallas montables en la cabeza (HMD).[14] . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.6 Guantes para la deteccion de gesturas.[14] . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.7 Algoritmo simple de rastreo de mano usando Kinect. . . . . . . . . . . . . . . . . . . . . . . 14
1.8 Tiempos de respuesta entre diferentes metodos de interaccion. . . . . . . . . . . . . . . . . . 15
1.9 Concepto de vision basada en AR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.10 Imagenes del arte del renacimiento italiano. . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.11 Gafas con tecnologa i Air Touch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

2.1 Imagen del Leap Motion con sus respectivos ejes de coordenadas. . . . . . . . . . . . . . . . . 23
2.2 Gestura circular con el dedo ndice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3 Gestura tipo swipe horizontal. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4 Gestura tipo Key Tap con el dedo ndice. . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.5 Gestura tipo Screen Tap con el dedo ndice. . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.6 Dispositivo MYO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.7 Dispositivo DEPTHSENSE 325 de SoftKinetic. . . . . . . . . . . . . . . . . . . . . . . . . 27
2.8 Algunos componentes del dispositivo DEPTHSENSE . . . . . . . . . . . . . . . . . . . . . . 28
2.9 Una mirada dentro de las partes electronicas del dispositivo.[15] . . . . . . . . . . . . . . . . 29
2.10 Dispositivo Touch+.[15] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

VIII
2.11 Guante de datos DG5-VHand 3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.12 Imagen de las Google Glass. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
2.13 Imagen de las gafas Oculus Rift. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
2.14 Imagen de las gafas Meta Pro[16]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.15 Imagen de las gafas Epson Moverio BT-200. . . . . . . . . . . . . . . . . . . . . . . . . . . 35
2.16 Imagen de las gafas ICIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.17 Imagen de las gafas ORA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
2.18 Imagen de las gafas Vuzix M100. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

3.1 Imagen de la camara web a utilizar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40


3.2 Dispositivo para montar el Leap en el Oculus. . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.3 Dispositivo para montar el Leap en el Oculus. . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.4 Cuadros de montaje utilizados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3.5 Imagen de la combinacion de los dispositivos. . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.6 Diagrama de funcionamiento general del sistema . . . . . . . . . . . . . . . . . . . . . . . . 44
3.7 Diagrama de funcionamiento general de la computadora . . . . . . . . . . . . . . . . . . . . 45
3.8 Diagrama de funcionamiento general de Unity . . . . . . . . . . . . . . . . . . . . . . . . . 46
3.9 Diagrama de funcionamiento interno del sistema . . . . . . . . . . . . . . . . . . . . . . . . 47
3.10 Logo de Blender. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.11 Logo de Unity. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
3.12 Primer pantalla al iniciar Blender. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
3.13 Modos de interaccion en Blender. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.14 Modos de seleccion para el modo edicion. . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.15 Figura de calculadora sin botones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.16 Cuatro botones sin posicionar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.17 Calculadora finalizada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
3.18 Base de la casa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3.19 Casa con techo en formacion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.20 Casa finalizada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

IX
3.21 Base de la silla. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.22 Silla en formacion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.23 Silla finalizada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.24 Objetos fuera de lugar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.25 Planos de obstruccion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
3.26 Proceso de seleccion de objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.27 Proceso de arrastre de objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.28 Proceso de rotacion de objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
3.29 Proceso de rotacion en eje de imagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3.30 Proceso de escalado de objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
3.31 Proceso de eliminacion de objeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

4.1 Alumna A haciendo uso de la aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72


4.2 Alumna B haciendo uso de la aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.3 Alumno A haciendo uso de la aplicacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

A1 Diagrama general del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84


A2 Diagrama de gesturas no personalizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
A3 Diagrama de gesturas personalizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

X
Indice de tablas

4.1 Tiempos del desarrollador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76


4.2 Tiempos de la Alumna C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.3 Tiempos del Alumno B. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

XI
Captulo 1

Introduccion

Hoy en da la tecnologa forma parte importante de la vida diaria, puesto que la mayora de
las personas tiene en sus hogares refrigeradores, televisiones, radios y muchos otros dispositivos que
poco a poco se van haciendo mas populares y necesarios de lo que muchos pensaban que podan
lograr serlo.

Hablando de dispositivos mas actuales, existen los lectores de Blu-ray, las computadoras per-
sonales, las televisiones inteligentes, telefonos inteligentes, consolas de video juegos y ultimamente
los relojes inteligentes, todos estos tienen algo en comun, eso es que deben de tener una forma en
la que el usuario tiene que interactuar con ellos. En los primeros intentos de interacciones con los
dispositivos, bastaba con oprimir algun boton que estaba integrado directamente en el dispositivo,
despues se paso a la opcion de oprimir algun boton de un control remoto, pasando por oprimir
algun boton virtual en la pantalla del dispositivo, comandos de voz, entre muchas otras formas de
interaccion cuyo objetivo no es otro mas que el hacerle la vida mas facil al usuario.

1
Adentrandonos un poco mas al tema de interes, que en este caso es la Realidad Virtual (VR
por sus siglas en Ingles, Virtual Reality) y la Realidad Aumentada (AR por sus siglas en Ingles,
Augmented Reality), las consolas de video juegos son un ejemplo muy entendible de lo que es el
concepto de VR. Se sabe que estos dispositivos nos introducen a un mundo imaginario, un mundo
virtual en el que los jugadores interactuan con ese mundo y se sumergen tanto, que en ocasiones
lograran pensar que son parte de el. La AR es una combinacion de nuestro mundo real (todo lo
que tocamos y apreciamos diariamente) y ciertos objetos virtuales que no forman parte del mundo
real, pero que se ven como si estuvieran en el.

Los marcadores son algo a tener muy en cuenta en la AR, puesto que casi todo lo relacionado con
este tema trabaja con al menos un marcador. Un marcador es generalmente un dibujo que puede
variar, los mas comunes constan de un borde negro de un ancho determinado, y en su interior,
tienen un dibujo negro o un patron que hace que se diferencien unos de otros. En la Figura 1.1
se puede apreciar un ejemplo de la utilizacion de un marcador, donde la mujer que aparece en el
telefono celular en la imagen de la derecha, no existe en el mundo real.

Figura 1.1: Uso de un marcador en AR.[12]

2
La AR se clasifica en 4 niveles:[17]

Nivel 0: Hipervnculo del mundo fsico: Un simple enlace del mundo fsico al mundo virtual
sin involucrar graficas o algun renderizado en tiempo real. Los ejemplos incluyen codigos de
barras y reconocimiento de imagenes 2D.

Nivel 1: Marcador basado en AR: Marcadores de AR 2D basados en una computadora y


camara web. El nivel 1 de AR es muy desafiante para el uso en dispositivos moviles debido al
retraso por lo robusto de los marcadores y al poder de la computadora.

Nivel 2: AR sin marcadores: No hay requisitos para los marcadores en cuestion de metodos
de rastreo y de registro. El rastreo es mas robusto, permitiendo la realizacion de AR movil.

Nivel 3: Vision aumentada, la cual esta actualmente en desarrollo.

1.1. Historia de la Realidad Aumentada


Haciendo un pequeno recorrido de las ultimas tres decadas de la historia de la AR, de acuerdo
a [18], se tienen los siguientes inventos:

Sensorama: En los anos 1960-1962 Morton Heiling creo un simulador multi-sensorial. Una
pelcula pre-grabada en color, fue aumentada por un sonido binaural, esencia y experiencias
de vibracion. Esta fue la primera aproximacion para crear un sistema de VR y tiene todas las
caractersticas de dicho ambiente, pero no era interactivo.

La pantalla definitiva (The Ultimate Display): en 1965 Ivan Sutherland propuso la


ultima solucion para la VR: el concepto de una construccion de un mundo artificial que
inclua graficas del tipo interactivo, retroalimentacion de fuerza, sonido, olor y sabor.

La espada de Damocles: el primer sistema de VR realizado en hardware, no en concepto.


Ivan Sutherland construyo un dispositivo considerado como la primer pantalla montable en
la cabeza (HMD por sus siglas en ingles, Head Mounted Display), con el apropiado rastreo de
posicion de la cabeza. Soportaba una vista que era actualizada correctamente de acuerdo a la
posicion y orientacion de la cabeza del usuario.

3
GROPE: El primer prototipo de un sistema de retroalimentacion de fuerza realizada en la
Universidad de Carolina del Norte (UNC) en 1971.

VIDEOPLACE: Realidad artificial creada en 1975 por Myron Krueger, un entorno concep-
tual, sin existencia(basicamente es VR). En este sistema las siluetas de los usuarios tomadas
por las camaras eran proyectadas sobre una pantalla larga. Los participantes eran capaces de
interactuar uno con otro gracias a las tecnicas de procesamiento de imagen que determinaban
sus posiciones en una pantalla de espacio 2D.

VCASS: Thomas Furness en los Laboratorios de Investigacion Medica Armstrong de la Fuer-


za Aerea de los Estados Unidos, desarrollaron en 1982 un simulador de sistemas de vuelo
visualmente acoplados, un simulador avanzado de vuelo. El piloto de guerra uso un HMD
que aumento la vista exterior de la ventana por medio de graficas que describan blancos o
informacion optima de la ruta de vuelo.

VIVED: Pantalla visual de ambiete virtual (VIrtual Visual Environment Display). Cons-
truido por la NASA Ames en 1984 con tecnologa comercial, un HMD estereoscopico mono-
cromatico.

VPL: La compana VPL manufactura el popular Guante de datos (DataGlove, 1985) y la


pantalla montable en la cabeza Eyephone (1988), primeros dispositivos de VR disponibles
comercialmente.

BOOM: comercializado en 1989 por los laboratorios Fake Space. BOOM es una pequena caja
que contiene dos monitores CRT que pueden ser vistos a traves de unos agujeros para los ojos.
El usuario poda agarrar la caja, posicionar sus ojos y moverse a traves del mundo virtual,
mientras un brazo mecanico meda la posicion y orientacion de la caja.

Proyecto UNC Walkthrough: en la segunda mitad de los anos 1980 en la Universidad


de Carolina del Norte fue desarrollada una aplicacion arquitectonica walkthrough. Muchos
dispositivos de VR fueron construidos para mejorar la calidad de este sistema, como: HMDs,
seguidores opticos y motores graficos de pxeles planos.

4
CAVE: presentado en 1992, CAVE (Automatic Virtual Environment o ambiente virtual au-
tomatico) es un sistema de visualizacion cientfica de VR. En lugar de usar HMD, proyecta
imagenes de tipo estereoscopico en las paredes de un cuarto (el usuario debe usar lentes ob-
turadores LCD). Esta aproximacion asegura una mejor calidad y resolucion de las imagenes
vistas, y un campo mas amplio de vista en comparacion con sistemas basados en HMD.

Realidad Aumentada (AR, Augmented Reality): Es una tecnologa que presenta un


mundo virtual que enriquece el mundo real en lugar de reemplazarlo. Esto es alcanzado por
medio de un HMD que superpone objetos virtuales tridimensionales sobre los objetos reales.
Esta tecnologa fue previamente usada para enriquecer la vista de los pilotos de guerra con
informacion de vuelo adicional (VCASS). Gracias a su gran potencial (el enriquecimiento de la
vision humana), la AR se a convertido en el foco de muchos proyectos de investigacion desde
los anos 1990.

1.2. Aplicaciones de la Realidad Aumentada


Existen diferentes aplicaciones que se le pueden dar a la AR, de los cuales se tomaran los
mencionados en [13].

1.2.1. Medicas

Los doctores pueden usar AR como auxiliar para la visualizacion y entrenamiento para una
ciruga. Puede ser posible recolectar conjuntos de datos del paciente en tiempo real, usando sensores
no invasivos como imagen de resonancia magnetica.

1.2.2. Manufactura y reparacion

Otra categora de las aplicaciones de la AR son el ensamblado, mantenimiento y reparacion


de maquinaria compleja. Las instrucciones deben ser faciles de entender y estar disponibles, no
como manuales con texto e imagenes, sino como imagenes 3D superpuestas sobre el equipo actual,
mostrando paso a paso las tareas que necesitan ser ejecutadas y como hacerlo. Esta superposicion

5
de imagenes 3D pueden ser animadas, haciendo las instrucciones mas explicitas.

Muchos proyectos de investigacion han demostrados prototipos en esta area. El grupo de Steve
Feiner en Columbia construyo una aplicacion prototipo para el mantenimiento a una impresora
laser como se muestra en la Figura 1.2, ah se muestra como quitar la bandeja de papel.

Figura 1.2: Aplicacion prototipo de mantenimiento a una impresora laser.[13]

1.2.3. Anotacion y visualizacion

La AR puede ser usada para mostrar anotaciones sobre objetos y entornos, ya sea con informacion
publica o privada. Las aplicaciones que usan informacion publica asumen la disponibilidad de bases
de datos para su utilizacion. Por ejemplo, una pantalla de mano puede proveer informacion acerca
de contenidos de los estantes de una librera mientras el usuario camina por la librera. En el centro
de desarrollo de equipo para la industria Europea (European Computer-Industry Research Centre,
ECRC), un usuario puede apuntar a partes de un modelo de un motor y el sistema de AR muestra
el nombre de la parte que esta siendo apuntada. La Figura 1.3 muestra esto, cuando el usuario
apunta al colector de escape (exhaust manifold), sobre el modelo aparece la etiqueta colector de
escape, y dependiendo del lugar al que apunte el usuario, se muestra la etiqueta correspondiente
de la parte del modelo de un motor.

6
Figura 1.3: Uso de etiquetas.[13]

1.2.4. Control de la ruta de un robot

La teleoperacion de un robot es frecuentemente una dificultad, especialmente cuando el robot


esta muy lejos, provocando largos retrasos en el enlace de comunicacion. Bajo estas circunstancias,
en lugar de controlar el robot directamente, puede ser preferible en su lugar, una version de un
control virtual del robot. El usuario planea y especifica las acciones del robot por medio de la
manipulacion de una version virtual en tiempo real. Los resultados son mostrados directamente en
el mundo real. Una vez que el plan halla sido determinado y probado, entonces el usuario le dice al
robot real que ejecute el plan especificado. La Figura 1.4 muestra como un esquema virtual puede
representar una posicion futura de un brazo robotico por medio de lneas virtuales, mostrando el
movimiento planeado de un brazo robotico.

7
Figura 1.4: Lineas virtuales para teleoperacion.[13]

1.2.5. Entretenimiento

En SIGGRAPH de 1995, muchos exhibidores mostraron decoraciones virtuales que combinaron


actores reales con fondos virtuales, en tiempo real y en 3D. Los actores se paran en frente de una gran
pantalla azul, mientras una camara de movimiento controlada por computadora graba la escena, con
esto es posible digitalizar al actor dentro de un fondo virtual 3D. La industria de entretenimiento ve
esto como una manera de reducir los costos de produccion porque la creacion y almacenamiento de
escenarios virtuales es potencialmente mas barato que estar construyendo constantemente nuevos
escenarios fsicos de la nada.

1.2.6. Aeronaves militares

Por muchos anos, las aeronaves militares y los helicopteros han usado pantallas para la cabe-
za (Head-Up Displays, HUD) y cascos montados con vision (Helmet-Mounted Sights, HMS) para
superponer graficas vectoriales sobre la vista del mundo real del piloto. Ademas de proveer infor-
macion basica de navegacion y de vuelo, estas graficas en ocasiones son registradas con blancos en
el entorno, proveyendo una manera de apuntar las armas de las aeronaves.

8
1.3. Problemas de la Realidad Aumentada
Existen varias situaciones que debemos de tomar en cuenta debido a los problemas de la AR. A
continuacion se mencionaran los problemas obtenidos de [19].

1.3.1. Desajustes de registros estaticos y dinamicos

Asumiendo que una pantalla grafica calibrada y ortoscopica puede ser creada por un sistema de
pantalla de AR o mixta, el problema recae en como registrar o alinear el sistema de coordenadas del
mundo virtual con el mundo real. Por ejemplo, los cambios visuales asociados con girar la cabeza
de una persona son esencialmente instantaneos, mientras que el retraso en la respuesta visual del
sistema de graficos o de video pueden ser de muchas decenas o cientos de milisegundos. Mantener el
registro en un ambiente dinamico y cambiante es un aspecto tecnologico muy desafiante. Un sistema
de AR donde los graficos retrasan la vista inmediata, puede llevar rapidamente a mareos, nausea y
otros sntomas similares a una enfermedad simulada, la cual es causada por disparidades entre la
informacion recibida por los sentidos visuales, de balance y equilibrio.

1.3.2. Campo de vision restringido

Un completo y acertado sentido del espacio requiere un muy amplio campo de vision. Nuestro
entendimiento del mundo que nos rodea es generalmente construido una cosa a la vez usando
arreglos relativos a cada cosa para ayudar a solidificar nuestras percepciones. Debido a un campo
de vision estrecho antinatural, cuando no somos capaces de ver las partes importantes del mundo
como el piso y nuestro cuerpo dentro del mundo perdemos gran confianza en nuestro entendimiento
del mundo. Acciones simples, como dar la vuelta a una esquina, puede ser muy difcil cuando el
usuario esta usando una pantalla montable en la cabeza con un campo de vista muy limitado.
Mientras mas grande es el campo de vision, en general, mas completo y acertada sera nuestra
percepcion de la profundidad.

9
1.3.3. Limitaciones y desajustes por claridad de imagen y resolucion

Los objetos que son mostrados en un HMD, monitor o proyector, necesariamente tienen menos
resolucion o frecuencia espacial que los objetos vistos directamente. Esto significa que sera
provista menos textura que en un objeto real en la misma posicion. Si esta falta de detalle es
inapropiadamente interpretada como una textura en perspectiva, la imagen sobre el objeto puede
parecer mucho mas lejos que lo que debera parecer el objeto en el mundo real.

1.3.4. Desajustes y limitaciones de luminosidad

Pocas pantallas son capaces de producir el rango e intensidad de iluminacion que tpicamente es
experimentada en el mundo real. El uso de una fuente de luz mucho mas intensa, como la luz de sol
directa, o la luz intensa en un punto focal, o de un proyector grande, resulta en una imagen que es
mucho mas complaciente, con mucho mas sentido del espacio visual, y con mucha mayor sensacion
de presencia.

1.3.5. Desajustes de contraste

La proporcion de contraste se refiere a la diferencia de luminosidad entre dos puntos adyacentes.


La proporcion de contraste maxima de los sistemas HMDs, monitores y proyectores esta muy por
debajo de las proporciones de contraste experimentados con una vista directa sobre un da soleado
y brillante. Ese contraste bajo puede causar una interpretacion inapropiada de la perspectiva aerea,
y los objetos pueden parecer estar mucho mas lejos de lo que deberan.

1.3.6. Desajustes de tamano y distancia

Las imagenes borrosas no pueden ser acomodadas con precision, lo que lleva a la incertidumbre
o mala interpretacion del tamano y profundidad de las imagenes. Si el objeto es familiar o si el
observador asume conocer su tamano, entonces si el tamano aparenta ser mas pequeno de lo que
debera, esto implicara que esta mucho mas lejos de lo que debera, y viceversa. Los efectos de esto
podran ser significativos, y tambien podran variar dependiendo del ambiente de visualizacion.

10
1.3.7. Resolucion de profundidad limitada

La limitacion de la resolucion en las pantallas actuales, afecta no solamente la claridad y la


frecuencia espacial de los objetos mostrados, sino tambien limita la precision con la que las dispa-
ridades binoculares pueden ser percibidas. Este lmite en la resolucion puede afectar el rendimiento
de la tarea de alineacion, especialmente si la distancia de la alineacion deseada no es alcanzable.

1.3.8. Desajuste de alineamiento vertical

En pantallas de video cuidadosamente disenadas, es importante excluir errores de alineacion,


como disparidades verticales entre las imagenes de la izquierda y la derecha. Bajo la mayora de las
circunstancias, este problema de registro no se nota, hasta que el usuario deba alinear un objeto
virtual y uno real. Cuando los dos objetos estan juntos, la disparidad residual vertical en el objeto
grafico comparado con el del video lleva a una situacion de incertidumbre. Sin embargo, mientras
los dos objetos se aproximan, hay un punto en el que uno esta claramente en frente del otro.

1.3.9. Fallas de interposicion

La interposicion u oclusion, es la senal mas fuerte de profundidad, que puede sobrepasar todos
los otros. Un hecho que domina nuestra percepcion del mundo es que no importa que tan ambigua
pueda ser la situacion, los objetos cercanos no pueden ser ocluidos por objetos lejanos.

1.3.10. Ausencia de sombras

Independientemente de que tan bien desarrollado este un modelo del mundo real dentro de un
ambiente de AR, es casi imposible crear sombras realistas que aparenten caer en los objetos reales,
incluso para los sistemas de AR basados en video, especialmente bajo condiciones complejas del
mundo real. Las sombras son crticas para la teleoperacion que use video monoscopico, y juegan un
papel muy importante incluso con video estereoscopico.

11
1.4. Estado del arte
A continuacion, se presenta una revision de trabajos que utilizan AR:

En [20] se presenta un trabajo de como la AR debe de tener en cuenta la direccion en la que


la fuerza de gravedad es aplicada a los objetos para obtener un mejor posicionamiento dentro del
mundo virtual y una visualizacion mas realista en el dibujado de los objetos virtuales.

En [21] trata del potencial que proveen los ambientes virtuales para nuevas aplicaciones, pero
tambien de la complejidad y los problemas de interaccion con estos ambientes, ademas del soporte
para la navegacion dentro del mundo que proporcionan y la adicion de vida al ambiente.

En [22] se aprecia como la AR esta creciendo poco a poco y obteniendo gran impacto en el sector
comercial, y que algunos estudios indican que la AR puede mejorar la visualizacion e incrementar
la comprension por parte del usuario. Tambien se mencionan proyectos que utilizan AR y entornos
de desarrollo, todo lo anterior basandose en AEC/FM (Architecture, Engineering, Construction,
and Facility Management. Su traduccion sera, Arquitectura, Ingeniera, Construccion y Facilidad
de Administracion). Ademas menciona una Conferencia Internacional sobre Realidad Aumentada
llamada ISMAR (International Symposium on Mixed and Augmented Reality).

En [14] trata del impacto y el potencial de la AR en la educacion, de como puede ser una buena
herramienta para incrementar la comprension de los alumnos y algunos dispositivos que se suelen
usar para detectar la posicion de la cabeza y las manos de las personas, como por ejemplo una
camara, giroscopios, acelerometros y GPS. En la Figura 1.5 y la Figura 1.6 se pueden apreciar
dispositivos que utilizan camaras y giroscopios, entre otro tipo de sensores.

En [23] se menciona que la AR debe de tener modelos tridimensionales de las manos y la cabeza
para que puedan interactuar con el mundo virtual. Tambien menciona que en la AR, el punto crtico
es detectar un marcador para iniciar nuestra interaccion con el mundo virtual, pero que se puede
leer el modelo geometrico de una mano humana, y utilizar ese modelo como marcador.

En [24] se presenta una manera de utilizar gesturas basadas en dos manos para interactuar con
dispositivos. Utilizan un Wiimote.

12
Figura 1.5: Pantallas montables en la cabeza (HMD).[14]

Figura 1.6: Guantes para la deteccion de gesturas.[14]

En [17] menciona varias herramientas para la realizacion de aplicaciones de VR y AR, ademas


de una breve descripcion de las mismas. Ademas menciona una variedad de artculos que hablan de
AR.

En [25] se hacen comparaciones de diferentes formas de interaccion con el usuario, desde los
modos auditivos, los menus visuales, menus circulares entre otros. Se hacen comparaciones del
tiempo de respuesta que necesito el usuario para realizar ciertas acciones y como el usuario se senta
al realizarlas, ademas de cuales eran las formas en las que el usuario senta que era mas rapida la
ejecucion. En la Figura 1.7 se puede apreciar una forma de deteccion de gesturas de manos utilizada
en este artculo.

Tambien se realizo un experimento para determinar el tiempo promedio de respuesta entre


diferentes metodos de interaccion con una muestra de usuarios. En la Figura 1.8 se muestra la
grafica de los resultados obtenidos. Los metodos de interaccion evaluados son los siguientes:

13
Figura 1.7: Algoritmo simple de rastreo de mano usando Kinect. De izquierda a derecha: (1)imagen RGB de la
mano, (2)imagen de profundidad del Kinect, y (3)contornos detectados y un crculo blanco que marca
las puntas de los dedos y el punto a ser rastreado. [25]

TC V (Touch screen and visual circular menu, menu visual circular con pantalla tactil).

TC A (Touch screen and auditory circular menu, menu audible circular con pantalla tactil)

GC V (Gesture and visual circular menu, menu visual circular por gesturas)

GC A (Gesture and auditory circular menu, menu audible circular por gesturas)

TN V (Touch screen and visual numpad menu, menu visual con pantalla tactil y teclado
numerico)

TN A (Touch screen and auditory numpad menu, menu audible con pantalla tactil y teclado
numerico)

En [26] se menciona lo que es una camara de AR, en especfico una que trabaja con C, C++ y
OpenGL, y su funcionamiento, ya que lo que hace es sobreponer un objeto o imagen virtual en la
imagen que se tiene del mundo real, creando una combinacion entre ambos. Tambien define varios
aspectos de la camara de AR, coordenadas, algunas formulas y los sistemas que utiliza para el
posicionamiento.

En [27] se trata de las anotaciones, que es el proceso de agregar informacion extra a algun objeto
y su uso en ambientes de AR. En este artculo, se menciona que la forma mas comun para determinar
la posicion de la anotacion, es por medio de triangulaciones utilizando mas de una imagen.

En [28] se estudia una forma de que el marcador, que sirve como base, no este completamente
presente si algun objeto interfiere un poco en su vision, esto permite que el objeto virtual no

14
Figura 1.8: Tiempos de respuesta entre diferentes metodos de interaccion. Se puede observar como el metodo que
utiliza gesturas es mas lento debido a que los usuarios se encuentran mas familiarizados con el teclado
numerico, y el menu circular no es tan conocido.[25]

desaparezca porque no encuentra la posicion del marcador. El trabajo se basa en tecnologa RFID
(Radio Frecuency Identification).

En [29] se presenta una forma de como hacer que un objeto virtual se mueva sobre un plano
del mundo real, aplicando un algoritmo descrito en este mismo artculo. Todo esto se basa en el
posicionamiento de varios marcadores en diferentes lugares y planos del mundo real para determinar
las posibles opciones de movimiento del objeto virtual. En la Figura 1.9 se muestra la forma en que
se mezcla el mundo real con el mundo virtual.

Figura 1.9: Concepto de vision basada en AR. Un usuario puede observar tanto el mundo virtual y el real, sobre-
poniendo los objetos virtuales en las imagenes. Los usuarios observan un mundo mezclado.[29]

15
En [30] se hace un experimento para determinar el impacto positivo que tiene la AR en estu-
diantes de escuela media, ademas de mencionar algunas aplicaciones de AR enfocadas al entorno
academico. En la Figura 1.10 se muestran ejemplos de aplicaciones de AR sacados de este mismo
artculo.

Figura 1.10: Imagenes del arte del renacimiento italiano. Las imagenes estan aumentadas con informacion, pre-
guntas y objetos 3D.[30]

En [31] se presenta un artculo basado en la fotogrametra, la cual trata de la recoleccion de


imagenes para crear ambientes precisos y modelos tridimensionales fotorealsticos. En este artculo,
se muestra como se monta un modelo de una torre dentro de un campus escolar que pareca ser tan
real, puesto que dependiendo del punto de vision del usuario, se puede ver como parte del modelo
virtual se esconde detras de un edificio real.

En [32] trata de la interaccion directa con las manos en un ambiente de AR. Se utiliza un
dispositivo Kinect para la deteccion de la profundidad de la mano y brazo, y as determinar la
posicion del objeto virtual sin que este se encuentre sobre la mano, esto hace que la sensacion de
realidad sea mejor.

En [33] se presenta un artculo que trata acerca de unas gafas especiales que utilizan una nueva
tecnologa llamada iAir Touch, la cual permite que la mano del usuario este libre de algun
dispositivo como una pantalla tactil o algun teclado para realizar una entrada tactil. Las gafas
cuentan con una camara con tecnologa DDDR (por sus siglas en ingles, Defined Distance with
Defined Range) para ver e interactuar con dispositivos de entrada, como una pantalla tactil o un
raton que pareciera como si estuvieran flotando en el aire, mientras que todava se puede ver e
interactuar con el mundo real. En la Figura 1.11 se pueden apreciar estas gafas.

16
Figura 1.11: Gafas con tecnologa i Air Touch. La tecnologa permite la interaccion virtual con pantallas de
computadoras.[33]

1.5. Planteamiento del problema


Estudios previos han demostrado que la AR mejora e incrementa la comprension del conoci-
miento por parte del usuario [22]. El unico problema es que en ocasiones el usuario no comprende
como interactuar con un ambiente de AR debido a que las instrucciones o comandos para hacer
esto pueden llegar a ser muy complejos para el o simplemente se esta tan acostumbrado al mundo
real que intenta interactuar de la misma forma con todo.

Considerando esto se tiene el siguiente problema:

Como se puede lograr una interaccion mas natural con los objetos en un ambiente de AR?

Siempre se estan buscando formas para hacer que la interaccion con un ambiente de AR sea
cada vez mas natural para el usuario. Esta es la razon por la que esta tesis se centra en el desarrollo
de un software de AR para la manipulacion de objetos virtuales haciendo uso de gesturas de las
manos.

17
1.5.1. Justificacion

Como se mencionaba anteriormente, algunos estudios indican que la AR puede mejorar la vi-
sualizacion e incrementar la comprension por parte del usuario[22] por lo que puede ser de gran
ayuda para el sector educativo, ademas de proporcionar nuevas maneras y metodos de aprendizaje
que van estrechamente ligados a la tecnologa.

Este tema de tesis producira un prototipo que va a generar el conocimiento y los documentos
de como llegar a este mismo prototipo, para que si alguien quiera posteriormente utilizarlo en un
caso aplicado, darle las herramientas para lograr hacer algo como lo que se pretende realizar en este
tema.

Tambien se puede utilizar en proyectos de salud y de rehabilitacion, ya que haciendo uso del
movimiento de los dedos, manos o algun otro miembro del cuerpo, se puede poner a una persona
con problemas de movimiento en algun dedo a hacer ejercicios para mover ciertos objetos en un
ambiente de AR.

1.6. Objetivo General


Desarrollar un software de AR para la manipulacion de tres objetos virtuales mediante el uso
de cuatro gesturas diferentes de las manos.

1.6.1. Objetivos Particulares

Desarrollar por lo menos tres objetos virtuales en 3D.

Detectar por lo menos cuatro gesturas de las manos.

Hacer uso de las cuatro gesturas para interactuar con los tres objetos virtuales.

Integracion de los puntos anteriores en un ambiente de AR.

18
1.7. Metodologa y discusion preliminar
Se debera conocer el funcionamiento y las instrucciones del software y hardware requerido para
su posterior aplicacion. En cuanto al software requerido se encuentra Blender, el cual se utilizara
para el modelado de los objetos 3D debido a su gran potencial y licencia de software libre. Para el
hardware se necesitaran unas gafas de AR o algo similar y un dispositivo que permita la deteccion
de las gesturas de las manos. Tambien se debera utilizar AR y se debera hacer uso de por lo menos
cuatro gesturas de las manos para la interaccion con al menos tres objetos virtuales.

Se utilizara la metodologa de software llamada desarrollo interactivo y creciente. Esta meto-


dologa se basa en que, al principio, se deja un bloque simple que hace lo mnimo que se puede y
se deja funcionando, y despues, a ese bloque base se le agrega una funcionalidad y con esta funcio-
nalidad el modelo base crece un poco, se prueba, se checa y se valida, y posteriormente se agrega
otra funcionalidad y as sucesivamente hasta que se tenga el tamano y las funcionalidades que se
planearon desde el principio.

La idea principal es la manipulacion de objetos virtuales en un ambiente de AR para hacer mas


natural la interaccion del usuario con los objetos virtuales. Se planea utilizar unas gafas de AR, o
unas gafas de VR con una camara incorporada. Estas gafas proporcionaran la camara para detectar
el mundo real y tambien una pequena pantalla para la proyeccion del mundo virtual y as generar la
AR. Existe gran variedad de posibles gafas a utilizar, pero solo se tomaran en cuenta las que seran
mencionadas mas adelante.

1.8. Organizacion de la tesis


Como se pudo apreciar, en el Captulo 1 se hace una introduccion pasando por la historia
de la AR, mencionando tambien sus aplicaciones y problemas donde se puede notar la dificultad
de realizar una buena aplicacion que cubra con los parametros necesarios para que parezca real.
Posteriormente en este mismo captulo, se mencionan algunos artculos relacionados con la AR y
despues de ello, se plantean los objetivos de la tesis.

19
El Captulo 2 trata lo relacionado con los dispositivos que puedan ser de utilidad en la Tesis, los
dispositivos de deteccion de las gesturas de las manos y los que tienen capacidad de visualizacion de
sistemas de VR o AR. En esta tesis se debera de utilizar unas gafas de AR, pero existe la posibilidad
de utilizar unas gafas de VR adaptandole una camara digital con capacidad de video, y con el video
poder simular el ambiente de AR.

En el Captulo 3 se menciona la propuesta de la solucion, lo que se utilizo en la realizacion de


la tesis, el software y hardware requerido, ademas de como fueron elaborados los modelos 3D, las
gesturas que se utilizaran y una explicacion de la elaboracion de los scripts que se utilizaron para
que todo funcione.

El Captulo 4 trata de las pruebas que se le realizaron a la aplicacion, en otras palabras, trata
de la ejecucion de la aplicacion y prueba por parte de algunos usuarios.

El Captulo 5 trata de las conclusiones de la tesis, problemas, desafos comentarios personales, y


trabajo a futuro. Con este captulo finaliza la tesis y ya se tiene el producto final que es un software.

20
Captulo 2

Dispositivos para la aplicacion

Actualmente en el mercado, se puede encontrar una gran variedad de dispositivos tanto para la
deteccion de gesturas de manos como gafas de VR y gafas de AR. Estos pueden tener caractersticas
que van desde lo basico hasta lo mas complejo, as que es necesario examinar algunos de ellos para
determinar cuales son los dispositivos mas adecuados y factibles para la realizacion del proyecto.

Se comenzara el captulo con los dispositivos que realizan la deteccion de gesturas de manos,
analizando su utilidad, algunas de sus caractersticas, disponibilidad y precio.

21
2.1. Deteccion de gesturas de manos
El ser humano lleva mas de un millon de anos utilizando gestos y comunicacion no verbal.
Este tipo de comunicacion se ha empezado a estudiar hace solo unas decadas. El investigador
Albert Mehrabian descompuso en porcentajes el impacto de un mensaje: 7 % es verbal, 38 % vocal
(tono, matices y otras caractersticas) y un 55 % senales y gestos. El componente verbal se utiliza
para comunicar informacion y el no verbal para comunicar estados y actitudes personales. Este
investigador, Albert Mehrabian, afirma que en una conversacion cara a cara el componente verbal
es un 35 % y mas del 65 % es comunicacion no verbal[34].

Muchos gestos utilizados son comunes en la mayora de los pases, aunque otros pueden signi-
ficar cosas distintas dependiendo de donde estemos. La mayora de los gestos y movimientos que
utilizamos habitualmente, nos vienen condicionados por el entorno en el que nos hayamos criado.
Los matices culturales, son de gran importancia en el lenguaje corporal. Tambien el entorno fami-
liar, tiene una clara influencia en nuestro comportamiento y en nuestra manera de hablar con el
cuerpo[34].

El Reconocimiento de gestos es un tema en ciencias de la computacion y la tecnologa del


lenguaje con el objetivo de interpretar gestos humanos a traves de algoritmos matematicos. Los
gestos pueden ser cualquier movimiento corporal o estado, pero comunmente se originan a partir
de la cara o la mano. El reconocimiento de gestos puede ser visto como una manera para que las
computadoras empiecen a entender el lenguaje corporal humano, construyendo as una relacion mas
solida entre maquinas y seres humanos[35].

El reconocimiento de gestos permite a seres humanos comunicarse con la maquina (HMI) e


interactuar naturalmente sin dispositivos mecanicos. Utilizando el concepto de reconocimiento de
gestos, es posible usar los dedos en un espacio libre para relacionar movimientos del cursor con
el movimiento del usuario. Esto podra hacer que los dispositivos convencionales de entrada, tales
como raton, teclados e incluso pantallas tactiles sean redundantes[35].

A continuacion se van a explorar algunos dispositivos que pueden servir para la deteccion de las
gesturas de las manos.

22
2.1.1. Leap Motion

Este dispositivo maneja camaras infrarrojas que detectan la posicion y el movimiento de las
manos, el unico problema con este dispositivo es que el area de trabajo es de alrededor de medio
metro, que es el rango de alcance del dispositivo, ademas de que debe de estar conectado a un
ordenador por medio de un cable USB. En estos momentos existe en progreso un trabajo similar al
de esta tesis liderado por Elon Musk utilizando el Leap Motion[36]. El Leap Motion salio a la venta
el 15 de Agosto de 2013 y para el 19 de Agosto del mismo ano ya se encontraba disponible en las
instalaciones del CIDETEC, as que no exista en la comunidad cientfica hasta hace poco y se sabe
que apenas se estan desarrollando aplicaciones y explotando el potencial del mismo. En la Figura
2.1 se puede apreciar este dispositivo. Actualmente tiene un costo de 99.99 dolares.

Figura 2.1: Imagen del Leap Motion con sus respectivos ejes de coordenadas.

Las gesturas disponibles en el Leap Motion[37], son las que se describen a continuacion:

23
2.1.1.1. Gesturas disponibles en Leap Motion

A. Gestura Crculo

El Leap Motion reconoce el


movimiento de un dedo tra-
zando un crculo en el espacio
tal como se puede apreciar en
la Figura 2.2.

Figura 2.2: Gestura circular con el dedo ndice.

B. Gestura Swipe

El Leap Motion reconoce un


movimiento linear de un de-
do como una gestura como se
muestra en la Figura 2.3.

Figura 2.3: Gestura tipo swipe horizontal.

24
C. Gestura Key Tap

El Leap Motion reconoce un


movimiento de golpe rapido
hacia abajo con un dedo, es-
te movimiento se le denomina
una gestura Key Tap como se
aprecia en la Figura 2.4.

Figura 2.4: Gestura tipo Key Tap con el dedo ndice.

D. Gestura Screen Tap

El Leap Motion reconoce un


movimiento de golpe rapido
hacia adelante con un dedo,
este movimiento se le denomi-
na una gestura Screen Tap co-
mo se aprecia en la Figura 2.5.
Figura 2.5: Gestura tipo Screen Tap con el dedo ndice.

25
2.1.2. MYO[1]

Como se puede apreciar en la Figura 2.6, este dispositivo es como una pulsera que se coloca en
la parte superior del brazo y lo que hace es detectar los movimientos de los musculos de parte de
quien lo este usando, con esto se podran detectar las gesturas de las manos. MYO salio a la venta
a mediados del ano 2014 y este sera un dispositivo adecuado para la realizacion de la tesis puesto
que no se limita a un area en particular, su unico lmite sera la intensidad de la senal que sera
el rango de alcance de una senal Bluetooth (alrededor de 10 metros). Aunque tambien hara falta
ver la cantidad de gesturas que puede detectar este dispositivo, cuales son estas gesturas y si puede
proporcionar la posicion del mismo para poder trabajar con estas coordenadas en el mundo virtual.
Actualmente tiene un costo de 149 dolares.

Figura 2.6: Dispositivo MYO.

26
2.1.3. DepthSense 325[2]

Aqu tambien se tiene otra opcion, es el DepthSense de la compana SoftKinetic. Este dispositivo
tiene dos versiones, la 325 y la 311, siendo la primera especficamente para la deteccion de gesturas
de mano y la segunda sirve para la deteccion de siluetas del cuerpo. A continuacion se describe mas
a detalle el DepthSense 325 que sirve para la deteccion de la mano y los dedos.

La camara DS325 ve en tres dimensiones (incluye profundidad) y dos dimensiones de alta de-
finicion (para el color), permitiendo el rastreo preciso de los dedos y la mano en un amplio rango
de aplicaciones, incluyendo ordenadores portatiles, de escritorio y aplicaciones automovilsticas.
Actualmente tiene un costo de 249 dolares. En la Figura 2.7 se puede apreciar este dispositivo.

En la Figura 2.8 se pueden apreciar algunos componentes de este dispositivo con una breve
descripcion de los mismos.

Figura 2.7: Dispositivo DEPTHSENSE 325 de SoftKinetic.

27
Figura 2.8: Algunos componentes del dispositivo DEPTHSENSE

2.1.4. Touch+[3]

Este dispositivo es basicamente una camara, mas especficamente, consiste en dos sensores de
imagen CMOS (los que se encuentran en las camaras web), las cuales capturan la posicion de las
manos con una resolucion de 640x360, estan adjuntas a un microcontrolador, el cual hace la mayor
parte del procesamiento para que la computadora no tenga que hacerlo. Trabaja con luz visible,
pero emplea luz infrarroja cuando la iluminacion ambiental es baja, por lo que tambien trabaja
en la oscuridad. Se conecta a la computadora por medio de un cable USB 2.0. En la Figura 2.9 se
pueden ver los componentes internos del dispositivo.

Actualmente las dimensiones del dispositivo son 3 x 3 x 8 cm con un campo de vision de


120 grados, pero se pretende cambiarlo a 150 grados con lentes mejores sin incrementar el costo.
Actualmente tiene un costo de 74.99 dolares. En la Figura 2.10 se puede apreciar este dispositivo.

28
Figura 2.9: Una mirada dentro de las partes electronicas del dispositivo.[15]

Figura 2.10: Dispositivo Touch+.[15]

29
2.1.5. Guante DG5-VHand 3.0

Este guante de datos esta disenado para satisfacer los requerimientos rigurosos de la captura de
movimientos modernos y animaciones profesionales. Ofrece confort, facilidad de uso y multiples usos
de control para aplicaciones. Es ideal para animaciones realistas en tiempo real. Cuenta con paquetes
de expansion opcionales para comunicacion por puerto RS232 y otro para realizar comunicacion
inalambrica o por Bluetooth (hasta 20m de distancia) para conectividad de alta velocidad de hasta
8 horas con la batera. Hechos con tela de lycra. En la Figura 2.11 se puede apreciar este modelo
de guante.

Figura 2.11: Guante de datos DG5-VHand 3.0 de la compana Virtual Realities, LTD.[38]

Actualmente cuesta 895 dolares. De hecho, la mayora de los guantes de datos son caros y los
mas baratos cuestan alrededor de 300 dolares, por esta razon no se seleccionara ningun guante de
datos para la realizacion de este trabajo, pero es necesario conocer que tambien existe este tipo de
tecnologa.

30
2.2. Gafas de Realidad Aumentada
El mercado para las pantallas vestibles de AR es potencialmente grande. Algunas estimaciones
muestran que en un futuro no muy distante, los lentes de AR podran ser la interfaz de usuario de
moda y gradualmente remplazara a la interfaz tactil de los telefonos inteligentes de mano. Por lo
tanto, el mercado actual se basa en el uso de video movil, navegacion, AR y juegos. Los telefonos
inteligentes son capaces de mas funcionalidades que antes y los operadores de telecomunicaciones
estan buscando incrementar sus ingresos sin-voz, ofreciendo mas servicios (video bajo demanda,
navegacion, juegos, entre otros). El mayor problema es que las pantallas en los telefonos moviles no
son lo suficientemente grandes (tpicamente de tres a cuatro pulgadas en su diagonal) como para
poder explotar por completo estos nuevos modelos de uso.[7].

Ver a traves de pantallas vestibles de AR (Pantallas montables en la cabeza, HMD) que no


obstruyan la lnea de vision del usuario permiten tener una forma no intrusiva de tener las manos
libres, una experiencia de pantallas grandes y por lo tanto una alternativa deseable, permitiendo el
uso completo del poder computacional de los dispositivos inteligentes. Las pantallas vestibles son
irresistibles debido a que ofrecen la habilidad de mostrar video, navegacion, mensajera, aplicaciones
de AR y juegos en una gran pantalla virtual sin usar las manos. Sin embargo, cualquier dispositivo
de estos necesitara ser accesible y debera tener un factor que sea lo suficientemente atractivo para
que los usuarios lo adopten. Dado que los usuarios no visten los telefonos moviles, los desafos
para cambiar un factor son diferentes que con una pantalla vestible. Por otra parte, el dispositivo
necesitara tener suficiente inteligencia integrada en forma de sensores y procesamiento de video
para hacerlo util para la AR, posicionamiento y aplicaciones de juegos. Si una pantalla vestible
pudiera dar en el blanco al precio, rendimiento y forma, entonces sera posible esta revolucion de
manos libres siempre puesta. La llegada de la pantalla vestible no sera nada menos que un nuevo
paradigma que abrira un mundo de posibilidades.[7].

A continuacion se hara mencion de algunas gafas de AR y algunas otras de VR, pero que se le
podra agregar una camara de vdeo de tal manera que se pudiera convertir en AR.

31
2.2.1. Google Glass

Son unas gafas de AR fabricadas por Google. Este dispositivo salio a la venta a finales del ano
2014 solo para cierta parte de la poblacion de Estados Unidos, puesto que estaban en fase beta.
Algunos meses despues salio a la venta para toda la poblacion de Estados Unidos, pero debido al
alto costo de este producto, fue cancelado el proyecto a principios del 2015, dando senales de que
posteriormente saldran a la venta una vez mas con mejoras que haran posible su venta a gran escala.
Tambien cuenta con la opcion de poderse adaptar sobre gafas de prescripcion con aumento. Cuenta
con una superficie tactil que sirve para desplazarse entre los menus de las aplicaciones y tambien
cuenta con reconocimiento de voz. El ultimo costo conocido de estas gafas rondaba los 1500 dolares.
En la Figura 2.12 podemos observar una imagen de estas gafas.

Figura 2.12: Imagen de las Google Glass.

32
2.2.2. Oculus Rift

Son unas gafas de VR que estan disenadas especialmente para juegos. Ofrecen un rastreo de la
posicion de la cabeza completo, es decir, que abarca los 360 grados, y un amplio campo de vision de
100 grados. Aunque su principal aplicacion es para video juegos, se han hecho ya varias aplicaciones
para otros campos, como por ejemplo la investigacion. Este dispositivo concede a los usuarios una
mayor inmersion en el ambiente virtual al interactuar intuitivamente con su entorno visual, esto
lo hace sin la ayuda de algun dispositivo intermediario como por ejemplo un control. Actualmente
tienen un costo de 350 dolares. En la Figura 2.13 se puede apreciar este dispositivo.

Figura 2.13: Imagen de las gafas Oculus Rift.

33
2.2.3. Meta Pro[4]

Las gafas tienen dos pantallas LCD con resolucion de 1280x720, cada una con un campo de vision
de 40 grados y alineacion de tipo estereoscopico en 3D; dos camaras RGB, sonido 3D envolvente y
una unidad integrada de movimiento de 9 ejes con acelerometro, giroscopio y brujula.

La computadora de bolsillo de Meta Pro incluye un CPU Intel i5, 4 GB de RAM, 128 GB
de almacenamiento, WiFi 802.11n, Bluetooth 4.0, y una pila que debera de tener un rendimiento
mnimo de 4 horas. El peso de los lentes es de 180 gramos y soporta lentes de prescripcion que se
colocan por medio de un magneto.

Meta Pro tiene unos lentes mucho mas delgados y quince veces el area de vision de los Google
Glass, el cual solo presenta imagenes 2D. Sin embargo, Meta Pro es tres veces mas pesado que
Google Glass y su precio es substancialmente mayor. Actualmente tienen un costo de 3000 dolares.
En la Figura 2.14 se muestra una imagen de las gafas.

Figura 2.14: Imagen de las gafas Meta Pro[16].

34
2.2.4. Epson Moverio BT-200[5]

A diferencia de muchas gafas de AR, estas gafas requieren estar conectadas siempre a un telefono
inteligente con Android, es de aqu donde viene el poder de procesamiento. Por esto mismo puede
trabajar con la batera hasta por 6 horas. Cada lente tiene su propia pantalla, cuenta tambien
con camara y detector de movimiento ademas de Bluetooth y aplicaciones para Android. Su precio
actual es de $699.99 dolares y se pueden comprar por internet desde la pagina oficial. En la Figura
2.15 se muestra una imagen de las gafas.

Figura 2.15: Imagen de las gafas Epson Moverio BT-200.

35
2.2.5. ICIS[6]

Estas gafas de AR tienen gran variedad de disenos y estan listos para lentes de prescripcion
medica (con aumento). Este dispositivo muestra notificaciones directamente de tu telefono inteli-
gente, esto incluye actualizaciones en tiempo real de las redes sociales, lo cual permite interactuar
con tu telefono inteligente sin necesidad de sacarlo del bolsillo. Cuenta con camara, microfono y
bocinas. El precio de estas gafas es de $549 dolares y se puede ordenar el producto por internet
desde la pagina oficial. En la Figura 2.16 se muestra una imagen de las gafas.

Figura 2.16: Imagen de las gafas ICIS.

Existen tres tipos de estas gafas, el Icis Early Beta Kit (IeBK), el Icis Beta Kit y el Icis
BOLD, siendo estos ultimos los unicos que poseen camara para fotos de 5 MP, grabado de video de
720p HD y una resolucion de la pantalla de 800x600, los primeros dos tipos no cuentan con camara
y la resolucion de la pantalla es de 640x480.

36
2.2.6. ORA[7]

Estas gafas de AR pueden ejecutar aplicaciones como una computadora portatil y puede co-
nectarse va WiFi o Bluetooth a cualquier dispositivo inteligente. Su pantalla virtual tiene dos
configuraciones permitiendo tanto AR como modo discreto. Cuenta tambien con una caracterstica
que permite que la imagen se encuentre directamente en el campo de vista del usuario o por debajo
de su campo de vista. ORA esta equipado con un procesador de doble nucleo con GPU, camara,
microfono, sonido, sensores de inercia, WiFi, Bluetooth, GPS, sensor de luz ambiental, lentes foto-
sensibles y una batera de alta capacidad. El precio de este dispositivo es de $949 dolares y se puede
comprar por medio de la pagina oficial en internet. En la Figura 2.17 se muestra una imagen de las
gafas.

Figura 2.17: Imagen de las gafas ORA.

37
2.2.7. Vuzix M100[8]

Estas gafas inteligentes basicamente son un dispositivo portatil basado en Android mejorado
con una pantalla monocular portatil, computadora, caractersticas de grabado y capacidades de
conectividad inalambrica disenadas para usos comerciales, profesionales y usuarios comunes.

Las gafas Vuzix proveen las caractersticas y capacidades de un telefono inteligente moderno,
en un dispositivo portatil de manos libres. Incluye una camara de alta definicion para tomar fotos
o capturas de vdeo y le permite al usuario guardar su contenido en una memoria extrable o
transmitirlo en vivo. El precio de estas gafas es de $999.99 dolares y pueden comprarse por internet
desde la pagina oficial. En la Figura 2.18 se muestra una imagen de las gafas.

Figura 2.18: Imagen de las gafas Vuzix M100.

38
Captulo 3

Diseno y propuesta de la solucion

Una vez examinado el hardware, costos y disponibilidades, se tomo la decision de utilizar el Leap
Motion para la deteccion de gesturas de las manos y el Oculus Rift con una camara de vdeo como
sustituto de las gafas de AR. Ahora, teniendo esto en cuenta, se debe hacer la integracion del Leap
Motion y la camara de video con el Oculus, analizar el software que se utilizara para la realizacion
de esta tesis y los requerimientos mnimos del sistema. Posteriormente instalar lo necesario (tanto
software como controladores para los dispositivos) y despues continuar con la programacion e ir
paso a paso hasta la culminacion del trabajo.

Comenzaremos este captulo con la integracion del hardware, examinando los pasos para el
montado del Leap Motion en el Oculus, una vez hecho esto, se procedera a montar la camara
de video en el Oculus, se examinara el sistema propuesto para la solucion del problema y los
requerimientos mnimos que debe tener la computadora y los programas utilizados en esta tesis,
mencionando una breve descripcion de los mismos y para que fueron utilizados dichos programas.
Posteriormente, se disenaran tres modelos virtuales y se ira realizando lo que se vaya necesitando.

39
3.1. Integracion
El Oculus, por ser unas gafas de VR, no cuenta con AR, por esto es necesario adecuar estas gafas
a la necesidad de mostrar AR. Esto es posible si le agregamos una camara de video para mostrar
el entorno de nuestro mundo fsico. Una vez que el Oculus pueda realizar la funcion de unas gafas
de AR, sera necesario integrarle el Leap Motion para poder realizar la deteccion de gesturas de las
manos. Los siguientes puntos tratan estos temas con mas detalle.

3.1.1. Montado de camara de video sobre Oculus

Ahora bien, para la camara de vdeo se va a hacer uso de una camara web USB Logitech C170.
En la Figura 3.1 se puede observar la camara.

Figura 3.1: Imagen de la camara web a utilizar.

La camara web se va a sujetar de la parte superior del Oculus. El Oculus va a mostrar directa-
mente lo que va a ver la camara de vdeo y por medio de codigo y Unity se van a sobreponer las
imagenes y modelos 3D para convertir la VR del Oculus a AR y as cumplir con el requisito de que
el sistema debe de utilizar AR.

40
3.1.2. Montado de Leap Motion

Existe una manera de montar el Leap Motion en el Oculus Rift, y es mediante un dispositivo
que se pega directamente sobre el oculus. Este dispositivo cuesta 19.99 dolares mas envo y se
puede encontrar a traves de internet como VR Development mount for Leap. En la Figura 3.2 se
puede ver este dispositivo que consta de dos partes y en la Figura 3.3 se aprecian mejor las partes
individuales de este dispositivo, siendo la parte del fondo la que va pegada sobre el Oculus.

Figura 3.2: Dispositivo para montar el Leap en el Oculus.

Existe tambien la opcion de imprimir este dispositivo en una impresora 3D y es la opcion que
se va a ocupar en esta ocasion, puesto que en la institucion se cuenta con una impresora 3D. El
modelo para imprimir esta disponible en internet.

Tanto la camara web como el dispositivo para montar el Leap en el Oculus, fueron fijados por
unos cuadros de montaje, de los que se utilizan para fijar espejos en superficies planas. Estos cuadros
de montaje se pueden apreciar en la Figura 3.4.

41
Figura 3.3: Dispositivo para montar el Leap en el Oculus. En esta imagen se puede ver con mas detalle las partes
individuales y como van colocadas

Figura 3.4: Cuadros de montaje utilizados.

En la Figura 3.5 se puede observar la combinacion de los dispositivos, el Oculus con el Leap
Motion y la camara de video.

42
Figura 3.5: Imagen de la combinacion de los dispositivos. As queda el prototipo con el Leap Motion y la camara
de video.

3.2. Sistema propuesto


Para lograr una interaccion mas natural con los objetos en un ambiente de AR, se pretende el
uso de gestos naturales hechos con las manos del usuario.

En la Figura 3.1 se tiene el sistema propuesto. En esa imagen se puede observar como va colocado
el Oculus en la cabeza del usuario. El Leap Motion es el sistema de captura de datos, que se encarga
de detectar el movimiento de las manos del usuario, dando as la posibilidad de que con gesturas
de la mano, se pueda interactuar con el mundo virtual. Tambien sera necesaria una computadora
que sera la encargada del procesamiento y VR. Las imagenes seran transmitidas y visualizadas en
el Oculus por medio de un cable HDMI que tendra que estar conectada a la computadora. Los
movimientos que se hagan con la cabeza seran registrados y mandados a la computadora por medio
de un cable USB, a su vez, la camara de video y el Leap Motion tambien necesitaran un cable USB
conectado, dando un total de 3 conexiones USB que seran necesarias.

43
Figura 3.6: Diagrama de funcionamiento general del sistema

3.2.1. Usuario

El usuario debera tener conocimiento de las gesturas que son permitidas en el sistema, para esto
debera haber ledo anteriormente un documento que contenga informacion detallada de las gesturas
permitidas, o en su caso, debera contar con una persona con experiencia previa que le vaya guiando
a traves del proceso de interaccion con el mundo virtual.

3.2.2. HMD

El HMD (en este caso, el Oculus), sera el encargado de mostrar al usuario la AR, o bien, se
mostraran las imagenes de los objetos virtuales sobrepuestas en el mundo real que sera captado por
la camara de video. El HMD tambien se encargara de mandarle a la computadora el movimiento
de la cabeza de acuerdo a lo que detecten los sensores del mismo.

44
3.2.3. Leap Motion

Este dispositivo sera nuestro sistema de captura de datos, es decir, se encargara de obtener datos
del mundo real para traducirlo en informacion para la computadora, cabe mencionar que solamente
funcionara para la deteccion de las gesturas de las manos, detectando tambien la posicion de los
dedos.

3.2.4. Procesamiento y RV

En la Figura 3.7, se observa de manera general el funcionamiento de la computadora. Aqu la


computadora sera la encargada de adquirir la informacion del Leap Motion por medio de su API,
al mismo tiempo, se encargara de enviar imagenes e informacion al Oculus, tambien por medio de
su API especfica, para que el usuario pueda observar los objetos 3D.

Figura 3.7: Diagrama de funcionamiento general de la computadora

45
3.2.5. Unity3D

En la Figura 3.8, se muestra como recibe la informacion Unity. Primero debe de obtener los
modelos 3D de Blender, esto se hace simplemente colocando los archivos de los modelos en una
carpeta dentro de un proyecto de Unity, y la aplicacion hace el trabajo automaticamente por medio
de herramientas que se encargan de la interpretacion del archivo.

Figura 3.8: Diagrama de funcionamiento general de Unity

La API de Oculus le manda informacion de sus sensores a Unity, donde le indica la orientacion
de la cabeza del usuario. La API de Leap tambien le manda informacion a Unity de todo lo que
detecta como manos o dedos para que pueda trabajar con esa informacion y detectar gesturas o
movimientos de dedos y trabaje de acuerdo a sus necesidades. Todo esto esta determinado por
scripts hechos con codigo de C#. Este codigo le indica a Unity que hacer con cada uno de los datos
para obtener el resultado deseado.

3.3. Funcionamiento interno


En la Figura 3.9, tenemos el diagrama de funcionamiento interno del sistema, el cual nos muestra
el camino que recorre la informacion. Comenzaremos nuestro camino desde Unity, aqu se manda
la informacion que se tiene hacia el Oculus (informacion de la camara, manos y dedos, y objetos
virtuales), esto lo recibe el Oculus y los transforma en imagenes que son transmitidas al usuario.

46
El usuario observa las imagenes que le despliega el Oculus y con esa informacion, mueve sus manos
para tratar de interactuar con los objetos, al mover las manos el Leap detecta los movimientos de
las mismas y pasa la informacion a Unity. Por ultimo, Unity determina por medio de scripts si
es una gestura valida y en caso de que as sea, realiza una operacion con el objeto 3D y enva la
informacion al Oculus. Este proceso se repite infinidad de veces mientras el programa se encuentre
en ejecucion.

Figura 3.9: Diagrama de funcionamiento interno del sistema

3.3.1. Blender-Unity

Blender es el software que se utilizo para el modelado de los objetos 3D. Para mandar los modelos
que se elaboraron en Blender a Unity, simplemente es necesario ponerlos en una carpeta del proyecto
de Unity, y cuando se abra el proyecto, Unity hara el procesamiento y conversiones necesarias para
que el modelo realizado en Blender pueda ser utilizado en Unity. Esto se hace por medio de una
herramienta de Blender que se encarga de exportar a un tipo de archivo llamado FBX, y as, Unity
puede leer la informacion del modelo 3D.

47
3.3.2. Leap-Unity

El Leap Motion se encarga de determinar la posicion de las manos y los dedos detectados dentro
de cierta distancia cercana al dispositivo. Esta informacion es pasada a Unity para que pueda
determinar las gesturas predeterminadas o bien, que pueda manejar la informacion para detectar
gesturas propias por medio de scripts.

3.3.3. Oculus-Unity

Aqu, el Oculus enva informacion a Unity de la posicion de la cabeza del usuario, y dependiendo
de la informacion recibida, Unity se encarga de cambiar la posicion de su camara, haciendo creer
que el usuario esta viendo dentro del mundo virtual. Oculus trabaja con dos imagenes ligeramente
distintas, una para cada ojo, esta tecnica es conocida como esteroscopa, y es como funcionan
nuestros ojos, en otras palabras, nuestros ojos perciben dos imagenes ligeramente movidas una de
otra, esto es debido a la separacion que existe entre los ojos. Esta separacion de las dos imagenes,
nos permiten determinar que tan lejos se encuentran los objetos, o en otras palabras, gracias a esta
separacion podemos determinar la profundidad de los objetos. As mismo trabaja Oculus, mandando
una imagen ligeramente movida una de otra para dar la sensacion de profundidad.

3.4. Especificaciones

3.4.1. Software requerido

3.4.1.1. Blender[9]

Blender es una suite de animacion 3D gratuita y de software libre. Soporta la totalidad de lineas
de modelado, rigidez, animacion, simulacion, renderizado, composicion y rastreo de movimiento, in-
cluso edicion de video y creacion de juegos. Los usuarios avanzados emplean las API de Python para
realizar scripts y personalizar la aplicacion y escribir herramientas personalizadas; a menudo estas
son incluidas en versiones posteriores de Blender. Blender es adecuado para estudios individuales
y pequenos que se benefician de su linea y proceso de desarrollo sensible. Hay muchos ejemplos de

48
proyectos basados en Blender disponibles en linea.

Blender es multiplataforma y corre tanto en computadoras Linux, Windows y Macintosh. Su


interfaz utiliza OpenGL para proveer una experiencia consistente. Para confirmar la compatibilidad,
la lista de plataformas indicadas son las que regularmente son probadas por el equipo de desarrollo.

Como es un proyecto dirigido por la comunidad bajo la Licencia Publica General GNU (GPL),
el publico tiene el poder de hacer pequenas y grandes modificaciones al codigo fuente, que lleva
a nuevas caractersticas, correccion de errores y mejor usabilidad. Blender no tiene precio, pero se
puede invertir, participar y ayudar el avance de una poderosa herramienta colaborativa: Blender es
como tu propio software 3D.

Lo que se crea en Blender es de tu propiedad. Todas tus obras - imagenes o archivos de pelcula
- incluyendo los archivos .blend (archivos propios de Blender) y otros archivos de datos que Blender
pueda escribir, son libres para que tu los uses como quieras. Eso significa que Blender puede ser
usado comercialmente por artistas, por estudios para hacer pelculas de animacion, por artistas de
juegos para trabajar en juegos comerciales, por cientficos para investigacion y por estudiantes en
instituciones educativas. En la Figura 3.10 se puede ver el logotipo de Blender.

Figura 3.10: Logo de Blender.

49
3.4.1.2. Unity[10]

Unity es un ecosistema de desarrollo de juegos: un poderoso motor de renderizado totalmente


integrado con un conjunto completo de herramientas intuitivas y flujos de trabajo rapido para crear
contenido 3D interactivo; publicacion multiplataforma sencilla; miles de proyectos predefinidos de
calidad, listos para usar en la Asset Store y una Comunidad donde se intercambian conocimientos.

Para desarrolladores independientes y estudios, el ecosistema de Unity disminuye las barreras


de tiempo y costos para crear juegos singularmente bellos. Ellos utilizan Unity para ganarse la vida
haciendo lo que les encanta: crear juegos que enganchan y deleitan a los jugadores en cualquier
plataforma.

Tambien se puede utilizar codigo que permita manipular el comportamiento de los objetos y del
mundo virtual por medio de scripts. Estos scripts pueden ser programados en algunos lenguajes que
permite Unity, los mas populares son javascript y C#. En la Figura 3.11 se puede ver el logotipo
de Unity 3D.

Figura 3.11: Logo de Unity.

3.4.1.3. Leap Motion Version 2

Este software es obviamente una actualizacion de la Version 1 y se utiliza para que el dispositivo
Leap Motion pueda ser utilizado en la computadora, basicamente es el controlador del dispositivo
y contiene tambien ciertas herramientas para trabajar debidamente con el.

50
3.4.1.4. Leap Motion V2 Skeletal Assets

Este software es un paquete para Unity. Aqu contiene lo necesario para el correcto funciona-
miento del dispositivo Leap Motion en Unity, ademas de ciertos archivos de ejemplo para poder
familiarizarse con las cosas que se pueden hacer con el dispositivo. Este paquete se puede descargar
directamente de la pagina oficial de Unity, en la Asset Store.

3.4.1.5. Oculus Runtime

Este software viene siendo basicamente el controlador para el Oculus, ademas de que tiene ciertas
herramientas para su configuracion y correcto funcionamiento del dispositivo. Es necesario tenerlo
instalado para que se puedan ejecutar aplicaciones hechas para el Oculus.

3.4.1.6. Oculus SDK

Este software es necesario para poder programar aplicaciones para el Oculus en la computadora,
tiene todo lo necesario para que un desarrollador pueda trabajar y verificar que sus aplicaciones
hechas para el Oculus funcionen correctamente.

3.4.1.7. Oculus-Unity Integration

Este software sirve para poder programar aplicaciones para el Oculus desde Unity. Es un paquete
para Unity que se puede descargar desde la pagina oficial del Oculus.

51
3.4.2. Objetos

Aqu se va a hablar de como se crearon los tres objetos 3D en Blender. Ahora bien, la manera en
que se interactua con los objetos en Blender es un poco diferente a lo que se trabaja comunmente en
Windows, debido a que para hacer la seleccion de un objeto, se hace por medio de un clic derecho,
y el clic izquierdo que es el que se utiliza en Windows para seleccionar, en Blender tiene otras
funciones. En la Figura 3.12 se puede observar la primer pantalla que muestra Blender al abrirlo,
siempre inicia la escena con una camara y un cubo.

Figura 3.12: Primer pantalla al iniciar Blender.

Existen diferentes modos para trabajar en Blender, dependiendo de lo que necesitemos, pero los
principales dos son: el modo objeto y el modo edicion. El modo objeto es para trabajar directamente
con los objetos que esten creados en Blender, ah se podran mover, girar, escalar, y se podran realizar
muchas otras funciones del objeto en s. En el modo edicion, se pueden editar los vertices del objeto,
las caras y los bordes. En la Figura 3.13 se pueden apreciar los modos de iteracion permitidos.

52
Figura 3.13: Modos de interaccion en Blender.

3.4.2.1. Calculadora

Para hacer una calculadora sencilla, se va a comenzar de una figura basica de Blender, que es el
que siempre esta por defecto al iniciar una nueva escena, el cubo. Dentro del modo edicion podemos
editar los vertices, los bordes y las caras de la figura. En la Figura 3.14 se pueden apreciar los
botones para entrar a cada uno de estos modos de seleccion.

Figura 3.14: Modos de seleccion para el modo edicion. De izquierda a derecha tenemos: 1)Vertice 2)Borde 3)Cara.

Primero se debe de hacer un rectangulo aplanado con forma de calculadora e ir haciendo subdi-
biciones. Una subdivicion en Blender es basicamente partir la figura en una N cantidad de partes

53
iguales, esto se hace con el metodo de combinacion de teclas Ctrl-R. La idea es hacer todo con
figuras rectangulares para hacerlo mas sencillo, y al final utilizar un modificador que tiene Blender
para darle un terminado circular a lo cuadrado. En la Figura 3.15 se puede apreciar la imagen de
la calculadora despues de muchas subdiviciones con el objetivo de hacer un hueco que representara
la pantalla donde se muestran los numeros.

Figura 3.15: Figura de calculadora sin botones.

Ahora se haran los botones, primero se comienza con insertar un nuevo cubo en el modo de
edicion de la calculadora, esto hara que los vertices del cubo sean parte del objeto calculadora.
ahora se aplanara el cubo y se escalara hasta que tenga la forma de un boton cuadrado, el tamano
de este boton debera ser el necesario para que entren cuatro botones de manera horizontal. Una
vez hecho este boton, simplemente se haran copias del mismo con la combinacion de teclas Ctrl-D
y se posicionaran en el lugar correcto. En la Figura 3.16 se muestra lo que se acaba de explicar con
anterioridad.

Despues solo se seleccionan los cuatro botones y se duplican para hacer 4 filas de los mismos
y as concluir con los botones de una calculadora sencilla con los numeros del 0 al 9, botones de
encendido, suma, resta, multiplicacion, division e igual, que nos dan un total de 16 botones. Despues
de esto tenemos una calculadora muy cuadrada, lo que se necesita hacer es agregarle el modificador

54
Figura 3.16: Cuatro botones sin posicionar.

subdivision surface que lo que hace es hacer una subdivision de todos los vertices para hacer
que la figura tenga terminaciones redondeadas. Tambien hay que cambiar el parametro view del
modificador a cinco para que se vea mas redondo. En la Figura 3.17 se puede apreciar la calculadora
terminada y el modificador requerido.

Figura 3.17: Calculadora finalizada.

55
3.4.2.2. Casa

Para realizar el modelo 3D de una casa muy sencilla, tomamos el ejemplo pasado como referencia,
hay que partir de un cubo e ir agregando subdivisiones y cambiando el tamano segun sea necesario.
En este caso solamente se agregara una subdivision para la base de la casa y posteriormente hacer
un techo triangular. En la Figura 3.18 se muestra la base de la casa de donde todo parte.

Figura 3.18: Base de la casa.

Una vez teniendo la base de la casa, tomamos el modo de seleccion por caras y eliminamos
la parte superior de la casa, esto con el proposito de posteriormente formar el techo. Concluido
esto, elegimos el modo de seleccion por vertices y seleccionamos dos vertices, los que se encuentran
en medio, despues hacemos una extrusion de los vertices con las teclas Ctrl-E y acomodamos los
vertices alrededor de dos unidades arriba de donde estan. Lo que hace una extrusion es duplicar los
vertices, bordes o caras que se encuentren seleccionadas, pero agregandole una union a los vertices
originales. Una vez hecho esto tendremos que seleccionar los tres vertices de arriba y crear una cara,
esto se hace presionando la tecla F cuando ya se tienen los vertices seleccionados. Se hace lo mismo
para el otro lado de la casa. En la Figura 3.19 se muestra la base de la casa y como se va formando
el techo.

56
Figura 3.19: Casa con techo en formacion.

Posteriormente vamos seleccionando los grupos de vertices faltantes y creando las caras de una
por una hasta tener formado todo el techo. En la Figura 3.20 se muestra el modelo de la casa
finalizada.

Figura 3.20: Casa finalizada.

57
3.4.2.3. Silla

Para el modelado de una silla vamos a partir nuevamente de un cubo, lo aplanamos y lo movemos
un poco para arriba (eje z), puesto que este va a ser nuestro asiento y en la parte de abajo deben
de ir las patas, ahora hacemos cuatro subdivisiones tanto de manera vertical como horizontal y
se seleccionan los cuatro pequenos cuadrados interiores de la parte de abajo donde van a salir las
patas. En la Figura 3.21 se muestra como debe quedar la base de la silla de donde todo parte.

Figura 3.21: Base de la silla.

Despues, ya con los cuatro pequenos cuadrados seleccionados, extrumos con Ctrl-E y movemos
el raton hacia abajo para que se formen las patas de la silla. Una vez hecho esto, ahora se tiene que
crear el respaldo de la silla. Esto se hara algo similar a lo de las patas, pero ahora en la parte superior
y en lugar de ser cuatro, solamente tomaremos dos cuadrados, y despues extrumos nuevamente pero
ahora hacia arriba. Subdividimos en dos y quitamos la cara de la parte interna de en medio. En
la Figura 3.22 se muestra la silla con el asiento y las patas de la misma, ademas de los huecos que
debe de tener para crear el respaldo.

58
Figura 3.22: Silla en formacion.

Posteriormente, solo basta con seleccionar los vertices en grupos de cuatro y creando caras con
la tecla F para formar el respaldo de la silla. En la Figura 3.23 se muestra la silla finalizada.

Figura 3.23: Silla finalizada.

59
3.4.3. Gesturas

Como se va a utilizar el Leap Motion para la deteccion de gesturas de las manos, se van a utilizar
algunas gesturas predefinidas del mismo, las cuales fueron explicadas anteriormente. Se va a utilizar
la gestura key tap para la seleccion del objeto antes de hacer cualquier otra accion sobre este, y
se utilizaran algunas caractersticas del Leap para otras acciones. La lista completa de comandos
permitidos se mostrara a continuacion:

Seleccion y de-seleccion: Para la seleccion de un objeto en especfico se utilizara una


gestura predeterminada del Leap Motion, el key tap. Para trabajar y hacer cualquier operacion
sobre el objeto, primero sera necesario seleccionarlo y aparecera una pequena senal que indique
que el objeto ha sido seleccionado.

Arrastre: Para arrastrar (mover) un objeto de su posicion actual a otra, el objeto primero
debera estar seleccionado y la mano derecha debera estar abierta, luego la mano pasara de
estar abierta a estar completamente cerrada, como si se fuera a dar un golpe con el puno
cerrado, y sin abrir el puno, mover la mano, esto ocasionara que el objeto se mueva una
distancia semejante al movimiento que realice la mano. Cuando se quiera dejar de mover el
objeto, simplemente habra que abrir el puno y regresar la mano a una posicion natural y
abierta.

Rotacion: Para rotar un objeto de su posicion actual a otra, el objeto primero debera estar
seleccionado y tanto la mano izquierda como la mano derecha deberan estar abiertas, luego la
mano izquierda pasara de estar abierta a estar completamente cerrada y abrirla rapidamente
en un espacio de tiempo menor a medio segundo. Si se ejecuto bien la accion se podra rotar el
objeto de acuerdo a la rotacion de la mano derecha. Para dejar de rotar el objeto simplemente
se tendra que cerrar nuevamente el puno de la mano izquierda y abrirlo rapidamente como se
hizo al principio. Esta accion solo podra ser ejecutada en cualquier objeto a excepcion de las
imagenes.

Rotacion en un eje: Cabe mencionar que esta accion solo funciona para objetos de tipo
imagen. Para realizar esta accion, se debera tener seleccionado un objeto tipo imagen y pos-
teriormente, cerrar ambas manos (punos cerrados), teniendo en cuenta que primero se debera

60
cerrar la mano izquierda e inmediatamente despues cerrar la mano derecha, despues de hecho
esto, se deberan girar las manos como si se estuviera sosteniendo un volante, esto provocara
que la imagen gire de acuerdo al angulo que se genere entre ambas manos. Para dejar de
ejecutar esta accion, simplemente se debera de abrir ambas manos.

Escalado: Para realizar el escalado de algun objeto, se debera tener seleccionado un objeto,
y posteriormente cerrar ambas manos (punos cerrados), teniendo en cuenta que primero se
debera cerrar la mano derecha e inmediatamente despues cerrar la mano izquierda. Si se
ejecuto correctamente ahora se podra escalar el objeto, haciendolo mas pequeno o mas grande
dependiendo de la distancia que exista entre ambas manos. Para dejar de ejecutar esta accion,
simplemente se debera de abrir ambas manos.

Eliminar objeto: Para eliminar un objeto, primero se debe tener seleccionado el objeto que
se desea eliminar y despues de esto, se ejecuta la gestura predeterminada del Leap Motion
llamada swipe. Esto simula que se avienta el objeto como desechandolo y ocasiona su elimina-
cion completa del area de trabajo. Esta accion debera ser ejecutada dos veces en un lapso de
tiempo de alrededor de un segundo y medio, puesto que la primera vez, solo mostrara un men-
saje de confirmacion, y la segunda ves que se ejecute dentro del rango de tiempo establecido,
se eliminara definitivamente.

3.4.4. Programacion de scripts en Unity

Todos los scripts fueron realizados en codigo para C#, utilizando MonoDevelop, que es el en-
torno de desarrollo que tiene predeterminado Unity. Antes de programar fue necesario explorar y
experimentar con los archivos y scripts de prueba que venan con las integraciones para Unity.

Despues de analizar y a base de prueba y error, se obtuvieron tres archivos principales para la
deteccion de las gesturas de las manos. El primero fue llamado handleGestures. Este archivo se
encargara basicamente de la deteccion de las gesturas que estan ya predeterminadas en el dispositivo
Leap Motion. Cabe mencionar que el dispositivo tiene cuatro gesturas predefinidas, de las cuales
solo se ocuparon dos, la gestura keytap para la seleccion del objeto actual y la gestura swipe para
la eliminacion de un objeto. Este archivo detecta las gesturas predefinidas y con base a la gestura

61
detectada ejecuta cierta accion que se encuentra programada en otro archivo. Cada accion cuenta
con su propio archivo para facilitar la programacion.

El segundo archivo principal fue llamado handlePerGestures. Este archivo se encarga de la


deteccion de las gesturas personalizadas, es decir, las que no vienen predefinidas con el Leap Motion.
Aqu se detecta el arrastre, la rotacion para todos los objetos excepto las imagenes, la rotacion en
un eje que es solo para las imagenes y el escalado.

Para la deteccion del arrastre de un objeto, el SDK del Leap cuenta con una instruccion que
permite detectar la fuerza con la que se encuentra cerrada la mano, esta instruccion nos manda un
numero que vara entre cero y uno. Cero indica que la mano esta completamente abierta y uno que
se encuentra completamente cerrada. Aqu simplemente se realizo una comparacion, que en caso de
que el valor sea mayor a 0.95, entonces se ejecutara la accion, puesto que para esta aplicacion eso
es suficiente para determinar que la mano se encuentra cerrada.

Si se fue lo suficientemente observador, se noto que tanto para las gesturas de escalar y rotar en
un eje, se deben de tener ambas manos cerradas, esto resultaba en que, en ocasiones, la aplicacion no
detecta correctamente la accion deseada por el usuario, por esta razon, se opta por cerrar primero
la mano izquierda para el escalado, en caso opuesto, para la rotacion en un eje se debe cerrar
primero la mano derecha. Ademas, para la rotacion en un eje se tuvo que programar una funcion
para calcular el angulo, puesto que la funcion predeterminada de Unity, calcula el angulo entre
dos puntos pero utilizando al cero como punto de referencia, y esto no proporciona el resultado
deseado. La funcion que se programo para calcular el angulo, primero saca el punto medio entre
las dos manos, y al tener este punto medio, saca el angulo de cada mano tomando el punto medio
como referencia y se hace uso de la funcion trigonometrica seno inverso para calcular el angulo. Esto
siempre da un angulo en un rango de 0 a 90 grados, y se agrego un objeto temporal que se crea y
se elimina automaticamente, que mira hacia la posicion del usuario en el mundo virtual, esto para
determinar la posicion del angulo con una funcion predeterminada de Unity. Si se encuentra a la
derecha del punto de referencia, se mantiene igual el angulo, pero si se encuentra del lado izquierdo,
se hacen sumas algebraicas para obtener el rango deseado de 0-180 positivo y 0-180 negativo. Para

62
el escalado simplemente se toma la distancia entre las dos manos y se escala el objeto dependiendo
de si la distancia entre las manos aumenta o disminuye.

La ultima clase principal es para determinar si se ha hecho un tipo clic con la mano izquierda,
esto es para la rotacion normal de los objetos. Aqu simplemente se detecta si el tiempo en el que se
cierra y abre la mano izquierda esta dentro del rango especificado, se active o desactive un indicador.

3.4.5. Integracion de los elementos a Realidad Aumentada

Como ya se sabe, para que una aplicacion se pueda considerar como de AR, la aplicacion
debe tener imagenes del mundo real y sobreponer imagenes virtuales, u objetos virtuales sobre las
imagenes del mundo real, esto se va a realizar por medio de la camara web. Unity permite utilizar
video extrado de la camara web y ponerlo como textura sobre un objeto, generalmente un plano,
as que esta sera la manera en la que se visualizara el mundo real. El plano debe estar un poco lejos
del usuario en el mundo virtual para que este pueda verse claramente.

Aqu es donde surge un problema. En las especificaciones del Oculus se aprecia que su campo de
vision es de alrededor de unos 100 grados, y el campo de vision de la camara actual es de 58 grados,
es decir, que lo que abarca la camara no va a ser suficiente para cubrir todo lo que abarca el Oculus.
Esto se pudo apreciar en las pruebas, puesto que al intentar hacer coincidir lo que poda captar
la camara con el rango de vision del Oculus, todo pareca estar exageradamente grande, haciendo
que todo se viera irreal, tal como se menciono en la seccion anterior, en el punto Problemas de
la Realidad Aumentada, en especfico Desajustes de tamano y distancia. Para resolver esto, se
experimentaron diferentes posiciones y tamanos del plano hasta encontrar uno que fuera lo mas
acercado a la realidad, una vez hecho esto, se procedio a escalar el tamano de las manos del Leap
hasta que fueran lo bastante proximos al tamano de las manos reflejado en el video.

Despues de esto, los objetos virtuales parecan fuera de su lugar, como si estuvieran flotando en
un mundo inexistente como se puede apreciar en la Figura 3.24.

Para solucionar este detalle se hizo uso de cuatro planos de color negro colocados de tal forma
que solo permitieran observar lo que se encuentra en el rango del plano que nos muestra el video

63
Figura 3.24: Objetos fuera de lugar. La imagen pareciera que fueran dos imagenes en lugar de una, pero esto
es debido a que del lado izquierdo es lo que sera proyectado al ojo izquierdo y del lado derecho, lo
proyectado al otro ojo.

obtenido de la camara. En la Figura 3.25 se pueden apreciar los cuatro planos y al mismo tiempo
se muestra la vista que tendra el usuario en la aplicacion.

Figura 3.25: Planos de obstruccion. En la parte de arriba se muestran los cuatro planos colocados en frente de la
camara para obstruir lo que se sale del rango de vision para darle mas realismo a la aplicacion. En la
parte de abajo se muestra la forma en la que el usuario lo puede apreciar.

64
3.4.6. Interaccion

3.4.6.1. Seleccion y de-seleccion

En la Figura 3.26 se muestra el proceso de seleccion de un objeto virtual. Esta imagen cuenta a
su vez, con 4 capturas de pantalla tomadas en tiempos diferentes. De arriba a abajo, en la captura
A se muestra el puno cerrado a excepcion del dedo ndice, el cual se encuentra estirado y el objeto
cercano que es una calculadora, se encuentra en su color gris por defecto. En la captura B se muestra
el dedo ndice bajando hacia la calculadora. En la captura C se tiene que el dedo ndice ha hecho
contacto con la calculadora y ha subido ligeramente, esto hace que se detecte la gestura keytap,
muestre el mensaje correspondiente y seleccione el objeto, poniendolo de color azul. En la captura
D se muestra el dedo mas alejado de la calculadora.

Figura 3.26: Proceso de seleccion de objeto

65
3.4.6.2. Arrastre

En la Figura 3.27 se muestra el proceso de arrastre de un objeto virtual. Esta imagen cuenta
a su vez, con 4 capturas de pantalla tomadas en tiempos diferentes. De arriba a abajo, en la
captura A se muestra la mano derecha completamente abierta, en la captura B se muestra la misma
mano pero ahora con el puno cerrado, esto activa la accion de arrastrar y se muestra el mensaje
correspondiente en la pantalla. En la captura C, D y E se muestra como se mueve la mano con el
puno cerrado y a su vez se mueve el objeto en forma de espejo, haciendo el mismo recorrido que la
mano pero en su posicion correspondiente. En la captura F se muestra que el puno de la mano se
abrio, y en consecuencia la accion de arrastre del objeto se cancela quitando el mensaje que haba
anteriormente.

Figura 3.27: Proceso de arrastre de objeto

66
3.4.6.3. Rotacion

En la Figura 3.28 se muestra el proceso de rotacion de un objeto virtual. Esta imagen cuenta a
su vez, con 4 capturas de pantalla tomadas en tiempos diferentes. De arriba a abajo, en la captura
A se muestran las dos manos completamente abiertas. En la captura B se observa que el puno de
la mano izquierda esta cerrado, y en la captura C se muestra como la mano izquierda se abre, cabe
mencionar que el cierre y apertura de la mano izquierda debe hacerse rapidamente para que la
accion pueda activarse, si esto se realizo dentro del rango de tiempo establecido, se podra observar
un mensaje indicando que la accion se activo correctamente. En la captura D y E muestra como el
objeto rota dependiendo de la rotacion de la mano derecha.

Figura 3.28: Proceso de rotacion de objeto

67
3.4.6.4. Rotacion en un eje

En la Figura 3.29 se muestra el proceso de rotacion en un eje de una imagen dentro del mundo
virtual. Esta imagen cuenta a su vez, con 4 capturas de pantalla tomadas en tiempos diferentes.
De arriba a abajo, en la captura A se muestra que ambas manos estan completamente abiertas
y ya se tiene seleccionado el objeto de tipo imagen. En la captura B se muestra que el puno de
la mano derecha se encuentra cerrado, esto hace que se active la accion de arrastrar y muestra el
mensaje correspondiente. En la captura C se observa que el puno de la mano izquierda se cierra sin
abrir el de la mano derecha, esto hace que la accion de Rotar en eje se active y muestra el mensaje
correspondiente. En las capturas D y E se observa que las manos giran como si se estuviera girando
el volante de un automovil, y esto hace que la imagen gire en su eje imitando el movimiento de la
rotacion que hacen ambas manos.

Figura 3.29: Proceso de rotacion en eje de imagen

68
3.4.6.5. Escalado

En la Figura 3.30 se muestra el proceso de escalado de un objeto. Esta imagen cuenta a su vez,
con 4 capturas de pantalla tomadas en tiempos diferentes. De arriba a abajo, en la captura A se
muestran las dos manos abiertas. En la captura B se muestra que el puno de la mano izquierda se
cierra. La captura C ahora nos muestra que se cierra el puno de la mano derecha sin haber abierto
el de la izquierda, esto hace que la accion de escalar se active y muestre el mensaje correspondiente.
Las capturas D y E nos muestran como con los punos cerrados, las manos se van alejando haciendo
que el objeto se haga mas grande. La captura F nos muestra que se cancela la accion si se abre
cualquiera de los dos punos y en consecuencia se borra el mensaje de que se estaba escalando el
objeto.

Figura 3.30: Proceso de escalado de objeto

69
3.4.6.6. Eliminar objeto

En la Figura 3.31 se muestra el proceso de eliminacion de un objeto virtual. Esta imagen cuenta
a su vez, con 4 capturas de pantalla tomadas en tiempos diferentes. De arriba a abajo, en la captura
A se muestra la mano derecha abierta. En la captura B se observa como la mano se mueve hacia
el visor, posteriormente baja ligeramente activando la gestura swipe y su respectivo mensaje se
activa, como la accion de eliminar no se puede revertir, antes de eliminar muestra el mensaje de
confirmacion. En la captura C se ve la mano mas abajo que la captura anterior para tener espacio
para realizar nuevamente la gestura swipe. En la captura D se observa nuevamente como sube la
mano y la captura E nos muestra que al bajar la mano se activa nuevamente la accion y ahora, al
repetir la gestura, el objeto es eliminado y muestra su respectivo mensaje.

Figura 3.31: Proceso de eliminacion de objeto

70
Captulo 4

Pruebas experimentales

Una vez finalizada la aplicacion es necesario hacer pruebas con diferentes personas para ver
sus reacciones, tendencias, dificultades entre otros aspectos y conocer los comentarios que tiene los
usuarios de sus experiencias con la aplicacion, si les parecio facil, difcil o si tienen alguna sugerencia
para mejorar la aplicacion en sus versiones posteriores.

Este captulo se centra en realizar las pruebas que se consideran necesarias para determinar si la
aplicacion cumple con la caracterstica de manipular objetos virtuales mediante el uso de gesturas
de manos, as que se iniciara realizando las pruebas de la aplicacion.

Todas las pruebas fueron ejecutadas en una computadora Toshiba Satellite L845D, Procesador
doble nucleo a 2.7 GHz con graficos Radeon(tm) HD 7520G (usa la memoria RAM de la compu-
tadora), 4 GB en RAM y Sistema Operativo Windows 8 de 64 bits.

71
4.1. Pruebas de la aplicacion
Se realizo una prueba de la aplicacion con una alumna de Maestra, a la que se nombrara como
Alumna A, y antes de usar la aplicacion se le explico el funcionamiento de la misma y las gesturas
permitidas. En la Figura 4.1 se puede apreciar a la Alumna A haciendo uso de la aplicacion.

Figura 4.1: Alumna A haciendo uso de la aplicacion

Al finalizar, se le pidio a la Alumna A que explicara su experiencia con la aplicacion, sus


comentarios fueron los siguientes:

En mi experiencia con la aplicacion, cumple con el objetivo al permitir la interaccion


y manipulacion de objetos virtuales con movimientos comunes y faciles de aprender. La
interfaz es clara y amigable con el usuario. La gestura que tiene un grado de facultad
mayor, es la que se utiliza para seleccionar un objeto. Rotar, escalar y arrastrar son
completamente entendibles y estan basadas en las acciones de una aplicacion web ordi-
naria de manejo de objetos. Aunque es necesaria una extensa capacitacion previa para
comprender la funcionalidad y aprender a utilizar las gesturas de forma correcta para el
buen funcionamiento.

72
Se realizo otra prueba de la aplicacion con otra alumna de Maestra, a la que se nombrara como
Alumna B, y antes de usar la aplicacion se le explico el funcionamiento de la misma y las gesturas
permitidas. En la Figura 4.2 se puede apreciar a la Alumna B haciendo uso de la aplicacion.

Figura 4.2: Alumna B haciendo uso de la aplicacion

Al finalizar, se le pidio a la Alumna B que explicara su experiencia con la aplicacion, sus comen-
tarios fueron los siguientes:

Las instrucciones por parte del programador para utilizar el programa e interactuar
con los objetos me parecieron muy intuitivas; por ejemplo, seleccionar haciendo un clic
con el ndice en el objeto o dimensionar el mismo cerrando las manos en los extremos y
moverlas hacia afuera para agrandar el objeto y hacia el centro del mismo para hacerlo
mas pequeno. Al principio para seleccionar los objetos fue necesario solicitar apoyo con
un ejemplo por parte del programador para verificar la distancia y rapidez con que era
necesario ejecutar los movimientos. Sin embargo, considero que como en los videojuegos,
a medida que se practica es cada vez mas fluido el manejo de los objetos y en mi opinion
no toma mucho tiempo (menos de 10 minutos) familiarizarse con la aplicacion.

73
Se realizo otra prueba de la aplicacion ahora con un alumno de Maestra, al que se nombrara
Alumno A, y antes de usar la aplicacion se le explico el funcionamiento de la misma y las gesturas
permitidas. En la Figura 4.3 se puede apreciar al Alumno A haciendo uso de la aplicacion.

Figura 4.3: Alumno A haciendo uso de la aplicacion

Al finalizar, se le pidio al Alumno A que explicara su experiencia con la aplicacion, sus comen-
tarios fueron los siguientes:

La aplicacion me parece facil de usar, permite que el usuario interactue con el ambiente
de una forma intuitiva. Los gestos que se utilizan son muy intuitivos y permiten que el
usuario aprenda a utilizar la aplicacion mas facilmente. Las opciones de interaccion con
los objetos me parecen muy practicas para ser utilizadas en aplicaciones en las que el
usuario necesite manipular objetos en un entorno virtual.

Para mejorar la aplicacion se podra presentar un ambiente mas complejo, con mas
objetos para que el usuario pueda interactuar as como mejorar un poco la precision con
la que la aplicacion reconoce los gestos.

74
En las pruebas siguientes se tomaron tres usuarios, uno con conocimientos y experiencia en la
aplicacion (el desarrollador), y los otros dos sin experiencia. A los dos usuarios sin experiencia se les
explico la manera en realizar tres gesturas en el siguiente orden: seleccion, rotacion y arrastre, y el
desarrollador les guio y oriento de manera verbal. El unico objeto que se pide que sea seleccionado
para trabajar con el mismo, es la calculadora. Se le pidio al usuario que hiciera las gesturas antes
mencionadas en orden (seleccion, rotacion, y arrastre) y se toman los tiempos en que tarda en
realizar cada una. Una vez hecho esto, la aplicacion se reinicia para que todos los objetos queden en
su posicion inicial y se le pide que repita nuevamente las gesturas de seleccion, rotacion y arrastre
con el objeto calculadora. Esto se repitio diez veces para cada usuario y se asentaron sus tiempos en
una tabla. En el caso de que el usuario tardara mas de tres minutos (180 segundos) en realizar alguna
gestura, se pasa a la siguiente, poniendo una X representando que la gestura no fue concluida
satisfactoriamente. Para el calculo del promedio de los tiempos, en caso de que exista una X, se
tomo como valor los 180 segundos del intento. En caso de ser la opcion de seleccion la que no pueda
ejecutarse, el desarrollador reinicia la aplicacion poniendo a la calculadora como objeto seleccionado
por defecto, esto para que el usuario pueda realizar las otras gesturas. Para la rotacion, el objeto
no tendra que rotar a alguna posicion en especfico, solamente se tendra que ver en la pantalla
su rotacion en cualquier eje, y posteriormente finalizar la operacion. Para arrastrar, tampoco sera
necesario mover el objeto hacia algun lugar en especfico, solo se debera ver que el objeto se mueva,
terminar la operacion y que el objeto se quede en esa la posicion. Ademas de esto, antes de comenzar
se le hacen dos preguntas a los usuarios, esto con el fin de conocer sus experiencias pasadas con la
tecnologa y aplicaciones de AR. Las preguntas son las siguientes:

Como considera su relacion con la tecnologa?


Ninguna Baja Media Alta

Cuantas veces ha usado alguna aplicacion de AR?


Ninguna Menos de 10 veces 10 o mas veces

75
Primero se realizan las pruebas con el desarrollador, sus respuestas a las preguntas fueron las
siguientes:
Como considera su relacion con la tecnologa?
Ninguna Baja Media Alta

Cuantas veces ha usado alguna aplicacion de AR?


Ninguna Menos de 10 veces 10 o mas veces

Ahora se tomaron los tiempos que le toma al desarrollador realizar las acciones arriba mencio-
nadas. En la Tabla 4.1 se pueden ver los tiempos.

Tabla 4.1: Tiempos del desarrollador.

INTENTOS SELECCIONAR ROTAR ARRASTRAR


1 21 segs 7 segs 3 segs
2 38 segs 7 segs 3 segs
3 6 segs 5 segs 3 segs
4 8 segs 3 segs 4 segs
5 6 segs 8 segs 7 segs
6 6 segs 5 segs 7 segs
7 6 segs 9 segs 25 segs
8 7 segs 4 segs 4 segs
9 5 segs 7 segs 4 segs
10 4 segs 9 segs 4 segs
Promedio 10.7 segs 6.4 segs 6.4 segs

76
Se continua con la realizacion de las pruebas con otra alumna, a la que se nombrara Alumna
C, sus respuestas a las preguntas fueron las siguientes:
Como considera su relacion con la tecnologa?
Ninguna Baja Media Alta

Cuantas veces ha usado alguna aplicacion de AR?


Ninguna Menos de 10 veces 10 o mas veces

Ahora se registraron los tiempos que le tomo a la Alumna C realizar las acciones arriba men-
cionadas. En la Tabla 4.2 se pueden ver los tiempos.

Tabla 4.2: Tiempos de la Alumna C.

INTENTOS SELECCIONAR ROTAR ARRASTRAR


1 X 40 segs 10 segs
2 X 33 segs 7 segs
3 X 35 segs 6 segs
4 X 30 segs 6 segs
5 2 min 30 segs 15 segs 7 segs
6 X 20 segs 10 segs
7 2 min 13 segs 17 segs 5 segs
8 30 segs 15 segs 4 segs
9 X 15 segs 5 segs
10 43 segs 13 segs 4 segs
Promedio 143.67 segs 23.3 segs 6.4 segs

77
Se continua con la realizacion de las pruebas con un alumno, al que se nombrara como Alumno
B, sus respuestas a las preguntas fueron las siguientes:
Como considera su relacion con la tecnologa?
Ninguna Baja Media Alta

Cuantas veces ha usado alguna aplicacion de AR?


Ninguna Menos de 10 veces 10 o mas veces

Ahora se registraron los tiempos que le toma al Alumno B realizar las acciones arriba mencio-
nadas. En la Tabla 4.3 se pueden ver los tiempos.

Tabla 4.3: Tiempos del Alumno B.

INTENTOS SELECCIONAR ROTAR ARRASTRAR


1 20 segs 13 segs 4 segs
2 25 segs 15 segs 3 segs
3 15 segs 12 segs 4 segs
4 13 segs 15 segs 4 segs
5 17 segs 10 segs 5 segs
6 22 segs 15 segs 7 segs
7 13 segs 11 segs 7 segs
8 13 segs 13 segs 5 segs
9 14 segs 9 segs 6 segs
10 13 segs 10 segs 4 segs
Promedio 16.4 segs 12.3 segs 4.9 segs

78
4.2. Comentarios personales
Por lo que se pudo observar, existe cierta dificultad para la realizacion de las gesturas por parte
de usuarios que por primera vez usan la aplicacion, pero toda persona requiere de capacitacion o un
tiempo de aprendizaje previo para poder ejecutar nuevas acciones o desarrollar nuevas habilidades,
esto es parte de toda persona y es necesario para poder generar un conocimiento que permita realizar
mejor las actividades, en este caso las gesturas.

Tambien se pudo observar que existen algunos usuarios a los que no se les dificulto mucho
adaptarse a la aplicacion, y que tardaron unos cuantos segundos en realizar las gesturas y adaptarse
a los movimientos de las manos que se requeran para ellas. Por lo tanto, en mi opinion, la facilidad
o dificultad del uso de la aplicacion esta determinada tambien por experiencias previas en este tipo
de aplicaciones.

Ahora bien, con respecto a las tablas, se puede observar que la gestura que mas trabajo cuesta
realizar, es la seleccion, esto es debido a que el dispositivo Leap Motion todava cuenta con ciertos
detalles en la deteccion correcta de las manos. Debido a su experiencia y largo tiempo de trabajar
con la aplicacion, se aprecia que el desarrollador tiene mas facilidad con las gesturas y por esta
razon, la mayora de sus tiempos son menores, aunque el alumno demostro tambien facilidad y
adaptabilidad con la aplicacion.

79
Captulo 5

Conclusiones

La Realidad Aumentada es un tema muy interesante que tiene muchas aplicaciones y que todava
no se explota como se debera, pero poco a poco va ayudando a cubrir necesidades y haciendo mas
facil el trabajo de las personas, aunque el costo de esta es elevado. Debido a esto, la mayora de las
personas solo puede tener acceso a ella desde su telefono inteligente, puesto que estos dispositivos
cada vez son mas populares y su precio se esta haciendo accesible para el publico en general. Desde
el telefono inteligente se pueden tener aplicaciones de AR, aunque la limitacion en este es que se
debe de hacer uso de las manos para poder manipular hacia donde apunta la camara.

En cuanto a este trabajo de tesis, los objetivos fueron cumplidos y se puede ver que la AR tiene
muchas aplicaciones, aunque tambien existen desafos tecnologicos que deben ser cubiertos.

Se haba comentado que para la Realidad Aumentada era necesario el uso de marcadores, esto
es debido a que el marcador nos sirve como un punto de referencia, generalmente para determinar
el inicio (centro) de nuestro mundo virtual y de ah juntarlo con el mundo real. En este caso no se
utilizo ningun marcador, puesto que el Oculus era el que nos proporcionaba la referencia o centro
de nuestro mundo virtual.

80
5.1. Obstaculos, limitaciones, problemas y desafos
Algo que en lo personal me parecio algo frustrante, es que el Leap Motion, que es el dispositivo
que se utilizo para la deteccion de las gesturas, tena muchas limitaciones con respecto a la deteccion
de las manos, por ejemplo, cuando la mano estaba de espaldas al dispositivo, este detectaba que
estaba de frente, tambien en ocasiones la mano derecha la detectaba como si fuera la izquierda
o viceversa. Aunque este dispositivo es muy preciso y detecta muy bien la posicion de los dedos,
todava tiene muchos falsos cuando los dedos estan sobrepuestos y en ocasiones no es necesario que
esten sobrepuestos para que mande senales falsas. Este fue el mayor problema puesto que el punto
principal de esta tesis es la deteccion de las gesturas de las manos, y si el dispositivo con el que se
detectan las gesturas tiene falsos, entonces resulta difcil la deteccion.

Un problema que se tuvo, fue que la idea era hacer esta tesis con gafas de AR, en lo personal
se quiso desde el principio que fuera realizada con las Google Glass, pero hubo retrasos en su
lanzamiento, y cuando el dispositivo se lanzo al publico, fue solo para los residentes de Estados
Unidos. Hubo algunas que llegaron aqu a Mexico, sin embargo todas eran vendidas por fuentes
no oficiales y por lo tanto no se puede explotar al maximo todas sus caractersticas, debido a que
requieren de un servicio web que no ha sido lanzado en Mexico. Me hubiera gustado mucho trabajar
con estas gafas.

Un desafo fue la camara web, no su funcionamiento, sino su colocacion sobre el Oculus, debido
a que deba ponerse en un lugar determinado y estar en un angulo adecuado para que ambos
dispositivos (Leap y camara) funcionaran adecuadamente. Si la camara estaba apuntando muy
arriba o muy a la derecha, en la aplicacion las manos del Leap aparecan muy lejos de las manos
detectadas por la camara, haciendo la aplicacion irreal. Uno de los mayores temores fue que la
camara se desprendiera del Oculus y tener que volver a acomodarla correctamente. Tal vez esto no
dure mas de 1 hora en realizarse si se cuenta con los materiales a la mano, pero cuando no se sabe
identificar que este es el origen del problema, el tiempo perdido se incrementa considerablemente.

81
Tambien existen limitaciones economicas, puesto que tambien estaba la posibilidad de comprar
las gafas de AR Meta-Pro, pero su precio es exagerado para el publico en general, dejando acceso
solo a personas o empresas con altos ingresos.

5.2. Trabajo a futuro


Un posible trabajo a futuro es hacer esto pero de manera inalambrica. Existe actualmente una
version del Oculus que se puede utilizar con un telefono celular, y todo el trabajo de procesamiento
le es otorgado al telefono celular. Una aproximacion para la deteccion de gesturas con el Leap, es
utilizar una camara y procesamiento de imagenes para detectar las gesturas.

Otra cosa que se puede mejorar, es el poder moverse en el mundo virtual, esto podra hacerse
con alguna otra gestura de la mano, poder agregar mas objetos de una lista, ya sean sencillos o
complejos y modificar sus vertices, y una vez con la posibilidad de agregar mas objetos, se podran
guardar caractersticas de los objetos agregados a un archivo, esto con la finalidad de volver a cargar
todo desde el ultimo momento antes de salirse de la aplicacion, debido a que en estos momentos,
siempre que se sale de la aplicacion, el escenario es restablecido a sus valores por defecto y sin
importar que se muevan, roten o eliminen, al iniciar todo se restablece.

Tambien podra utilizarse para construccion o decoracion a escala, puesto que se podra tener
un modelo base de un edificio o incluso de una ciudad, seleccionar un edificio y entrar a algun piso
del mismo para agregar muebles, quitar o agregar paredes, cambiar posiciones de escaleras, agregar
pisos, ventanas, unir o dividir (cortar) objetos, en fin, el unico lmite sera nuestra imaginacion.

82
Anexos

83
Anexo A

Diagramas de flujo
En la Figura A1 se muestra el diagrama de flujo general del sistema, iniciando desde el momento
en que se ejecuta la aplicacion y finalizando solamente cuando se cierra el programa.

Figura A1: Diagrama general del sistema

84
En la Figura A2 se muestra el diagrama de flujo del script nombrado handleGestures, el cual es
el encargado de la deteccion de las gesturas que se encuentran predeterminadas en el Leap Motion.

Figura A2: Diagrama de gesturas no personalizadas (incluidas con el Leap Motion)

85
En la Figura A3 se muestra el diagrama de flujo del script nombrado handlePerGestures, el
cual es el encargado de la deteccion de las gesturas que fueron personalizadas, es decir, que no se
encuentran incluidas con el Leap Motion y fueron programadas por separado.

Figura A3: Diagrama de gesturas personalizadas (no incluidas con el Leap Motion)

86
Anexo B

Especificaciones tecnicas de los dispositivos

DepthSense 325

Tamano: 10.5cm/0.3pies(ancho) 3.1cm/0.1pies(alto) 2.7cm/0.1pies(profundidad).

Alcance: De 0.15m/0.5pies a 1m/3.25pies

Largo alcance: no aplica.

Microfonos: Dos microfonos integrados.

Alimentacion y conexion de datos: USB 2.0.

Resolucion del sensor de profundidad: QVGA (320x240).

Campo de vision del sensor de profundidad en grados (Horizontal X Vertical X


Profundidad): 74 x 58 x 87.

Velocidad de cuadro del sensor de profundidad: 25 FPS 30 FPS QVGA

50 FPS 60 FPS QVGA

Ruido: <1.4cm a 1m (50 % reflectividad) <3cm a 3m

Resolucion del sensor de color: 720p HD.

Campo de vision del sensor de color en grados (Horizontal X Vertical X Profun-


didad): 63.2 x 49.3 x 75.2

87
Guante DG5-VHand 3.0

Metodo de deteccion de curva: Sensores incrustados de fibra optica.

Numero de sensores: (Uno por dedo) y la orientacion (pendiente y giro) de la mano del
usuario.

Resolucion: 8 bits (256 posiciones/dedo).

Interfaz de salida: USB 1.1, rango de muestreo mnimo 75 Hz, Sensor integrado de pendiente
y giro.

Tamano del guante: Versiones de la mano izquierda y derecha; unitalla.

Rutina de calibracion: Abrir y cerrar la mano; cada usuario.

Software incluido: Rutinas de instalacion para la DLL para Windows de 32 bits, emulacion
del raton, visor de baja calidad de datos, modelo grafico poligonal de la mano, emulacion de
palanca de mando, codigo fuente de programa de ejemplo DOS para 16 y 32 bits.

Fuente de poder: Por interfaz USB.

Google Glass

Pantalla: De alta resolucion equivalente a una pantalla de alta definicion de 25 pulgadas


vista desde una distancia de 8 pies de lejana.

Camara: Fotos - 5 MP. Videos - 720p.

Audio: Por medio de transmision osea.

Conectividad: WiFi - 802.11b/g y Bluetooth.

Almacenamiento: 12 GB de memoria disponible, sincronizado con almacenamiento en la


nube de Google, 16 GB en total.

Batera: Un da de uso normal. Algunas caractersticas como la grabacion de video, son mas
demandantes para la batera.

88
Oculus Rift

Caractersticas generales

Sensores: Giroscopio, acelerometro, magnetometro

Velocidad de actualizacion: 1000 Hz

Tipo de rastreo: Rastreo posicional para detectar los movimientos del usuario

Pantalla

Resolucion: 960x1080 por ojo

Frecuencia de actualizacion: 75 Hz, 72 Hz, 60 Hz

Campo de vision: 100 grados

ICIS

Procesador: Sitara 1 GHz de Texas Instruments y 1 GB de memoria

Audio: Bocina direccional IambicFLO, microfono integrado

Cargador: Cargado NFC inalambrico

Compatibilidad: Mac, Windows, Android. Compatible con cualquier dispositivo con Blue-
tooth habilitado con sistema iOS 7, Windows Phone 8 o Android Ice Cream Sandwich (o
sistemas operativos posteriores).

Sensores: Giroscopio de tres ejes, acelerometro y pantalla tactil

89
Meta Pro

Pantalla

Resolucion: 960x540 pxeles (qHD)

Relacion de aspecto: 16:9

Campo de vision: 35 grados

Camara de profundidad

Resolucion: 320x240 (QVGA) pxeles con campo de vision (Horizontal x Vertical x Profun-
didad): 74 x 58 x 87 grados

Velocidad de cuadro: 30 FPS

Camara a color

Resolucion: 1280x720 (MJPEG)

Campo de vision (Horizontal x Vertical x Profundidad): 63.2 x 49.3 x 75.2

Velocidad de cuadro: 30 FPS

Seguimiento de cabeza

Seguimiento: De 360 grados

Acelerometro: 16g (+-)

Giroscopio: 2000 grados por segundo (+-)

Brujula: 1200(+-) microTesla

AUDIO

Tipo de audio: Dolby 3D

Microfonos: Dos microfonos integrados

90
Epson Moverio BT-200

Opticas

Tamano de la LCD: 0.42 pulgadas ancho del panel (16:9)

Numero de pxeles de la LCD: 518,400 puntos [(960x540) x 3]

Frecuencia de actualizacion: 60 Hz

Campo de vision: 23 grados

Tamano de la pantalla (Distancia proyectada): 80 pulgadas a 5m - 320 pulgadas a 20m

Color: 24 bits (16.77 millones de colores)

Sensores

Camara: VGA

GPS: Si, en el control

Brujula: Si, en control y auriculares

Giroscopio: Si, en control y auriculares

Acelerometro: Si, en control y auriculares

Microfono: Si

Conectividad

LAN inalambrica: IEEE 802.11b/g/n con WiFi Miracast

Bluetooth: 3.0

microUSB: USB 2.0

CPU y Memoria

CPU: TI OMAP 4460 1.2 GHz Doble nucleo

91
RAM: 1 GB

Memoria interna: 8 GB

Memoria externa: microSD(max 2 GB) / microSDHC(max 32 GB)

Interfaz de usuario

Metodo senalador Touch-pad: Capacitivo de multiple contacto

Teclas de funcion: Encendido (bloqueo), Inicio, Menu, Atras , Brillo, 2D/3D, Volumen
(+/-), Reinicio

92
ORA

Caractersticas de la pantalla

Modo de pantalla: Tipo paisaje a todo color

Relacion de aspecto: 4:3

Campo de vision (diagonal): 24 grados (84 pulgadas a 5m)

Resolucion: 33 pxeles / grado

Caractersticas mecanicas

Tipo de lentes: Lentes de sol con lentes fotosensibles

Peso total: incluyendo batera 80g

Caractersticas Electricas/Electronicas

Duracion de la batera (Li-Ion): Con cargador interno 4 horas al maximo u 8 horas de


uso normal

Conectividad: Bluetooth 4 y WiFi 802.11b/g/n con Miracast, microUSB para carga y enlace

Sonido: Por medio de enchufe de audio

Microfono: Eco acustico y cancelacion de ruido

Interfaz de usuario: Pantalla tactil grande, Encendido-Apagado / Despertar / Responder


/ Colgar / Volumen

Sensor de orientacion: De 9 ejes y GPS

Camara: Frontal de 5 MP con enfoque automatico y grabacion de vdeo de 1080p

Microprocesador: De doble nucleo a 1.2 GHz

Memoria: 1 GB DDR + 4 GB extrables

Sistema operativo: Android 4.2.2

93
Vuzix M100

Caractersticas generales

Resolucion de la pantalla: WQVGA a color

Relacion de aspecto: 16:9

Campo de vision (Diagonal): 15 grados, equivalente a 4 pulgadas. Pantalla de dispositivo


movil vista a 14 pulgadas

Brillo: Mas de 2000 nits

Color: 24 bits

Uso: Puede usarse tanto para el ojo izquierdo como para el derecho

Procesador: OMAP4460 a 1.2 GHz

Memoria: 1 GB RAM, 4 GB extrables

Sistemas operativos soportados: Android ICS 4.04, API 15, iOS (en desarrollo)

Ranura Flash externa microSD: Soporta hasta 32 GB

Controles

Botones: 4 botones de control

Control remoto: Aplicacion de control remoto, corre a la par con el dispositivo Android

Navegacion: Soporta navegacion por voz personalizable

Gesturas: Soporta gesturas

Sensores

Motor de gesturas: de tres profundidades (izquierda-derecha, arriba-abajo, Cerca-Lejos)

Luz: Luz de ambiente

GPS: Si

94
Proximidad: Si

Rastreo de cabeza integrado

Seguimiento de cabeza: de tres grados de libertad

Giroscopio: de tres ejes

Acelerometro: de tres ejes

Brujula integrada: de tres ejes

Batera

Batera interna: recargable de 550 mAh

Duracion con pantalla apagada: Hasta seis horas con manos libres

Duracion con pantalla prendida: Dos horas de manos libres

Duracion uso intenso: Una hora de manos libres + pantalla + camara + carga alta de
trabajo del CPU

Paquete de batera externa: Batera recargable de 3800 mAh

Camara

Resolucion: 5 MP

Video: 1080p

Relacion de aspecto: 16:9

Conectividad

MicroUSB: Para el control, poder, y actualizaciones

WiFi: 802.11b/g/n,

Bluetooth: Si

95
Camara web USB Logitech C170[11]

Caractersticas generales:

Tipo de entrada: USB 2.0

Microfono: Si

Tipo de microfono: Mono

Tipo de sensor y de lente: Plastico

Tipo de enfoque: Fijo

Resolucion optica: Verdadera 640x480

Campo de vision diagonal: 58 grados

Longitud focal: 2.3 mm

Velocidad de cuadro (max): 640x480 a 30 FPS

Indicador de luz (LED): Si

Longitud de cable: 4 pies, 121.92 cm

Dimensiones de la camara:

Ancho: 70.3 mm (2.77 pulgadas)

Profundidad: 71 mm (2.79 pulgadas)

Alto: 60.5 mm (2.38 pulgadas)

Peso: 75 g (2.65 onzas)

Requerimientos del sistema:

CPU: 1 GHz Mnimo, 1.6 GHz Recomendado

RAM: 512 MB Mnimo, 1 GB Recomendado

96
Anexo C

Scripts de la aplicacion
Archivo comandos.cs

using UnityEngine ;
using System . Collections ;

public enum comandos {


none ,
arrastrar ,
rotar ,
rotar1Eje ,
agregar ,
escalar ,

circle ,
keytap ,
screentap ,
swipe
}

97
Archivo CollisionIndex.cs

using UnityEngine ;
using System . Collections ;
using Leap ;

public class handleGestures : MonoBehaviour {


private Controller controller ;
private Frame frame ;
private Frame lastFrame ;
private detectaGestura ges ;
private Params p ;

private accionCircle accionAgregar ;


private accionKeyTap accionSeleccion ;
private accionSwipe accionBorrar ;

private void checarGesturas () {


if ( p . getComandoActual () == comandos . none ) {
GestureList manyGestures = frame . Gestures ( lastFrame ) ;

foreach ( Gesture gestureObject in manyGestures ) {


if ( gestureObject . IsValid ) {
if ( ges . actualizaEstado ( gestureObject . Type , gestureObject . State )
!= Gesture . GestureType . TYPEINVALID ) {
switch ( gestureObject . Type ) {
case Gesture . GestureType . TYPECIRCLE :
p . setComandoActual ( comandos . circle ) ;
break ;
case Gesture . GestureType . TYPEKEYTAP :
p . setComandoActual ( comandos . keytap ) ;
break ;

98
case Gesture . GestureType . TYPESCREENTAP :
p . setComandoActual ( comandos . screentap ) ;
break ;
case Gesture . GestureType . TYPESWIPE :
p . setComandoActual ( comandos . swipe ) ;
break ;
} // switch
}
}
} // foreach
}
}

private void ejecutarComando ( HandModel hm ) {


switch ( p . getComandoActual () ) {
case comandos . circle :
p . setComandoActual ( comandos . none ) ;
break ;
case comandos . keytap :
p . showOcuMessage ( " keytap - Seleccionar " , true ) ;
if ( accionSeleccion . ejecutaAccion ( hm , null ) )
p . setComandoActual ( comandos . none ) ;
break ;
case comandos . screentap :
p . setComandoActual ( comandos . none ) ;
break ;
case comandos . swipe :
if ( hm . GetLeapHand () . IsRight ) {
if ( p . objSelected != null ) {
if ( p . getLabelText () . Equals ( " swipe . Eliminar ? " ) ) {
p . showOcuMessage ( " swipe . Eliminado . " , true ) ;

99
accionBorrar . ejecutaAccion ( hm ,
p . objSelected . GetComponent < Collider >() ) ;
}
else p . showOcuMessage ( " swipe . Eliminar ? " , true ) ;
}
p . setComandoActual ( comandos . none ) ;
}
break ;
}
}

void Start () {
ges = new detectaGestura () ;

controller = new Controller () ;


frame = controller . Frame () ;
controller . EnableGesture ( Gesture . GestureType . TYPE_KEY_TAP ) ;
controller . EnableGesture ( Gesture . GestureType . TYPE_SCREEN_TAP ) ;
controller . EnableGesture ( Gesture . GestureType . TYPE_CIRCLE ) ;
controller . EnableGesture ( Gesture . GestureType . TYPE_SWIPE ) ;

accionAgregar = new accionCircle () ;


accionSeleccion = new accionKeyTap () ;
accionBorrar = new accionSwipe () ;

p = ( Params ) GameObject . Find ( " Scripts " ) . GetComponent ( typeof ( Params ) ) ;


}

void Update () {
if (! p . clk_izq_act ) {
if ( controller != null ) {

100
lastFrame = frame ;
frame = controller . Frame () ;

checarGesturas () ;
}

HandModel hand_model = GetComponent < HandModel >() ;


if ( hand_model == null ) return ;
ejecutarComando ( hand_model ) ;
}
else {
if ( controller != null ) {
lastFrame = frame ;
frame = controller . Frame () ;
}
}
}
}

Archivo handlePerGestures.cs
using UnityEngine ;
using System . Collections ;
using Leap ;

public class ha ndlePe rGestu res : MonoBehaviour {


private Params p ;
private accionGrab accionArrastrar ;
private ac ci on_ LC li ck _R Ro t accionRotar ;
private accionScale accionEscalar ;
private accionRotar1Eje accionRotarUnEje ;

101
public han dlePer Gestur es () {
}

private void ejecutarComando ( HandModel hm ) {


switch ( p . getComandoActual () ) {
case comandos . arrastrar :
if ( accionArrastrar . ejecutaAccion ( hm ,
p . objSelected . GetComponent < Collider >() ) ) {
p . setComandoActual ( comandos . none ) ;
p . openRHand () ;
p . hideMessage () ;
}
break ;
case comandos . rotar :
if ( accionRotar . ejecutaAccion ( hm ,
p . objSelected . GetComponent < Collider >() ) ) {
p . setComandoActual ( comandos . none ) ;
p . hideMessage () ;
}
break ;
case comandos . escalar :
if ( hm . GetLeapHand () . IsRight && accionEscalar . ejecutaAccion ( hm ,
p . objSelected . GetComponent < Collider >() ) ) {
p . setComandoActual ( comandos . none ) ;
p . openRHand () ;
p . hideMessage () ;
}
break ;
case comandos . rotar1Eje :
if ( hm . GetLeapHand () . IsLeft && accionRotarUnEje . ejecutaAccion ( hm ,
p . objSelected . GetComponent < Collider >() ) ) {

102
p . setComandoActual ( comandos . none ) ;
p . openLHand () ;
p . hideMessage () ;
}
break ;
}
}

private bool ch ecarMa noCerr ada ( Hand hnd ) {


if ( hnd . GrabStrength > p . g e t D e f a u l t G r a b S t r e n g t h () ) {
if ( hnd . IsLeft ) p . closeLHand ( hnd . S t a b i l i z e d P a l m P o s i t i o n . ToUnity () ) ;
else p . closeRHand ( hnd . S t a b i l i z e d P a l m P o s i t i o n . ToUnity () ) ;
return true ;
}
return false ;
}

private void checarArrastrar ( Hand hnd ) {


if ( p . getComandoActual () == comandos . none ) {
if ( p . setComandoActual ( comandos . arrastrar ) ) {
p . showOcuMessage ( " Arrastrando " , false ) ;
accionArrastrar . inici alizaR etardo () ;
}
}
}

private void checarRotar () {


if ( p . clk_izq_act && p . getComandoActual () == comandos . none ) {
if ( p . setComandoActual ( comandos . rotar ) )
p . showOcuMessage ( " Rotando " , false ) ;
}

103
}

private void checarEscalar ( Hand hnd ) {


if ( p . bot hHClos edLFi rst () && p . getComandoActual () == comandos . none ) {
if ( p . setComandoActual ( comandos . escalar ) ) {
accionEscalar . setObjScaleBase () ;
p . showOcuMessage ( " Escalando " , false ) ;
}
}
}

private void checarRotar1Eje ( Hand hnd ) {


if ( p . bot hHClos edRFi rst () && ( p . getComandoActual () == comandos . none ||
p . getComandoActual () == comandos . arrastrar ) ) {
if ( p . objSelected . GetComponent ( typeof ( imagenPlano ) ) != null ) {
if ( p . getComandoActual () == comandos . arrastrar )
accionArrastrar . baseToCero () ;
if ( p . setComandoActual ( comandos . rotar1Eje ) ) {
accionRotarUnEje . se tO bjR ot at io nB as e () ;
p . showOcuMessage ( " Rotando en eje " , false ) ;
}
}
else {
p . showOcuMessage ( " No es imagen " , true ) ;
p . setComandoActual ( comandos . none ) ;
}
}
}

private void c h e c a r R o t a c i o n N o r m a l () {
if ( p . getComandoActual () == comandos . none && p . clk_izq_act ) {

104
if ( p . objSelected . GetComponent ( typeof ( imagenPlano ) ) == null ) {
if ( p . setComandoActual ( comandos . rotar ) )
p . showOcuMessage ( " Rotando " , false ) ;
}
else {
p . showOcuMessage ( " NO CON IMAGEN " , true ) ;
p . clk_izq_act = false ;
}
}
}

private void checarGesturas2 ( Hand hnd ) {


if ( hnd != null && p . objSelected != null ) {
bool cerrada = ch ecarMa noCerr ada ( hnd ) ;
if ( cerrada ) {
if ( hnd . IsRight ) {
checarEscalar ( hnd ) ;
checarArrastrar ( hnd ) ;
}
else {
checarRotar1Eje ( hnd ) ;
}
}
else {
if ( hnd . IsLeft ) p . openLHand () ;
else {
p . openRHand () ;
c h e c a r R o t a c i o n N o r m a l () ;
}
}
}

105
}

void Start () {
accionArrastrar = new accionGrab () ;
accionRotar = new a cc io n_ LC lic k_ RR ot () ;
accionEscalar = new accionScale () ;
accionRotarUnEje = new accionRotar1Eje () ;
p = ( Params ) GameObject . Find ( " Scripts " ) . GetComponent ( typeof ( Params ) ) ;
Hand hnd = GetComponent < HandModel >() . GetLeapHand () ;
if ( hnd . IsLeft ) p . setLHand ( hnd ) ;
else p . setRHand ( hnd ) ;
}

void Update () {
HandModel hand_model = GetComponent < HandModel >() ;
if ( hand_model == null ) return ;

if ( hand_model . GetLeapHand () . IsLeft )


p . setLHand ( hand_model . GetLeapHand () ) ;
if ( hand_model . GetLeapHand () . IsRight )
p . setRHand ( hand_model . GetLeapHand () ) ;

checarGesturas2 ( hand_model . GetLeapHand () ) ;


ejecutarComando ( hand_model ) ;
}

void OnDestroy () {
if ( name . Equals ( " LeftRigidHand ( Clone ) " ) ) p . openLHand () ;
if ( name . Equals ( " RightRigidHand ( Clone ) " ) ) {
p . openRHand () ;
if (! p . clk_izq_act )

106
p . hideMessage () ;
}
}
}

Archivo imagenPlano.cs

using UnityEngine ;
using System . Collections ;

public class imagenPlano : MonoBehaviour {


public int widht ;
public int height ;
public float rotacion ;

// Use this for initialization


void Start () {
Texture2D t = ( Texture2D ) Resources . Load ( " ima " ) ;
widht = t . width ;
height = t . height ;
rotacion = 0;
GetComponent < Renderer >() . material . SetTexture (0 , t ) ;
GameObject obj = GameObject . Find ( " OVRCameraRig " ) ;

Vector3 pos2 = new Vector3 ( obj . transform . position .x ,


transform . position .y , obj . transform . position . z ) ;
transform . LookAt ( pos2 ) ;
transform . localRotation = transform . localRotation *
Quaternion . AngleAxis (90 , Vector3 . right ) ;
}
}

107
Archivo Params.cs

using UnityEngine ;
using System . Collections ;
using System . Collections . Generic ;
using Leap ;

public class Params : MonoBehaviour {


public List < GameObject > objsMenu = new List < GameObject >() ;

public bool clk_izq_act ;

public GameObject objSelected ;

public float magnetDistance ;


public Vector3 offset ;
public Vector3 span ;

public bool submenu ;


public bool showLabel ;

private Vector3 lHandPosBase ;


private Vector3 rHandPosBase ;

private Color pastColor ;


private Vector3 lastPos ;
private Quaternion quaternionZero ;

private bool autoHideMessage ;


private int frmsCount ;
private int maxFrames ;

108
private UILabel lbl ;
private bool lHandClosed ;
private bool rHandClosed ;
private bool lHandFirstClosed ;
public LineRenderer lr ;

private Hand lHand ;


private Hand rHand ;

private comandos comandoActual ;


private int t im e B et w e en G e st u r es ;
private int timeNextGesture ;
private GameObject centro ;
private GameObject lastCollisioned ;
private int timeForSeleccion ;

public Params () {
clk_izq_act = false ;
quaternionZero = new Quaternion (0 , 0 , 0 , 0) ;

pastColor = Color . white ;


lastPos = Vector3 . zero ;

magnetDistance = 1.0 f ;
offset = new Vector3 (0 , 0 , 0) ;
span = new Vector3 (0.02 f , 0.02 f , -0.02 f ) ;

submenu = false ;
autoHideMessage = false ;
frmsCount = 0;
maxFrames = 100;

109
lHandPosBase = Vector3 . zero ;
rHandPosBase = Vector3 . zero ;
comandoActual = comandos . none ;

timeBetw e e nG e s tu r e s = 25;
timeNextGesture = t i m eB e t we e n Ge s t ur e s ;
}

public void s et La st Co ll is io ne d ( GameObject lc ) {


timeForSeleccion =25;
lastCollisioned = lc ;
}

public GameObject g et La st Co ll is io ne d () {
return lastCollisioned ;
}

public void setCentro ( Vector3 newVal ) {


deleteCentro () ;
centro = new GameObject ( " centro " ) ;
centro . transform . position = newVal ;
centro . transform . LookAt (
GameObject . Find ( " OVRCameraRig " ) . transform . position ) ;
}

private void deleteCentro () {


if ( centro != null ) GameObject . Destroy ( centro ) ;
}

public Transform g et Ce nt ro Tr an sf or m () {

110
if ( centro == null ) return null ;
return centro . transform ;
}

public Vector3 palmPosToUnity ( Hand h ) {


return vectorToUnity ( h . S t a b i l i z e d P a l m P o s i t i o n ) ;
}

public Vector3 vectorToUnity ( Vector vec ) {


Vector3 v = vec . ToUnity () ;
return new Vector3 ( v . x * span .x , v . z * span .y , v . y * span . z ) ;
}

void Start () {
if ( objSelected != null ) s e l e c c i o n a r N o D e s e l e c c i o n a r ( objSelected ) ;

lbl = ( UILabel ) GameObject . Find ( " LabelInfo " ) . GetComponent (


typeof ( UILabel ) ) ;
lbl . text = " " ;

lHand = null ;
rHand = null ;

lr = gameObject . AddComponent < LineRenderer >() ;


lr . material = new Material ( Shader . Find ( " Particles / Additive " ) ) ;
lr . SetColors ( Color . yellow , Color . white ) ;
lr . SetWidth (0.02 F , 0.02 F ) ;
lr . SetVertexCount (2) ;
lr . enabled = false ;
}

111
void Update () {
if ( autoHideMessage ) {
if ( frmsCount == maxFrames ) {
autoHideMessage = false ;
frmsCount = 0;
lbl . text = " " ;
}
else frmsCount ++;
}
if ( timeNextGesture >0) timeNextGesture - -;
if ( timeForSeleccion >0) timeForSeleccion - -;
}

public float g e t D e f a u l t G r a b S t r e n g t h () { return 0.95 f ;}


public Quaternion getQuatZero () { return quaternionZero ;}
public Vector3 getLastPos () { return lastPos ;}

public void setRHand ( Hand newHnd ) { rHand = newHnd ;}


public void setLHand ( Hand newHnd ) { lHand = newHnd ;}
public Hand getRHand () { return rHand ;}
public Hand getLHand () { return lHand ;}

public Vector3 getRHandPosBase () { return rHandPosBase ;}


public Vector3 getLHandPosBase () { return lHandPosBase ;}

public void openRHand () { rHandClosed = false ;}


public void openLHand () { lHandClosed = false ;}
public float getMinimumScale () { return 0.025 f ;}
public comandos getComandoActual () { return comandoActual ;}

public bool setComandoActual ( comandos newCom ) {

112
if ( newCom == comandos . none ) {
comandoActual = newCom ;
timeNextGesture = t i m eB e t we e n Ge s t ur e s ;
deleteCentro () ;
return true ;
}
else {
if ( timeNextGesture ==0) {
comandoActual = newCom ;
// El if es para que se pueda ejecutar la rotarEje
if ( comandoActual != comandos . arrastrar )
timeNextGesture = t i m eB e t we e n Ge s t ur e s ;
return true ;
}
}
return false ;
}

public void closeRHand ( Vector3 posHand ) {


rHandClosed = true ;
rHandPosBase = posHand ;
lr . SetPosition (1 , posHand ) ;
if (! lHandClosed ) lHandFirstClosed = false ;
}

public void closeLHand ( Vector3 posHand ) {


lHandClosed = true ;
lHandPosBase = posHand ;
lr . SetPosition (0 , posHand ) ;
if (! rHandClosed ) lHandFirstClosed = true ;
}

113
public bool bot hHClos edLFirst () {
if ( rHandClosed && lHandClosed && lHandFirstClosed ) return true ;
return false ;
}

public bool bot hHClos edRFirst () {


if ( rHandClosed && lHandClosed && ! lHandFirstClosed ) return true ;
return false ;
}

public void setLastPos ( Vector3 newPos ) {


lastPos = new Vector3 ( newPos .x , newPos .y , newPos . z ) ;
}

public string getLabelText () {


if ( showLabel ) return lbl . text ;
return " " ;
}

public void e na bl eL in eR en de re r ( bool en ) {


// lr . enabled = en ;
}

public void lin eRende rerPoint ( int index , Vector3 pto ) {


lr . SetPosition ( index , new Vector3 ( pto . x * span .x , pto . y * span .y ,
pto . z * span . z ) ) ;
}

public void showOcuMessage ( string msj , bool autoHide ) {


if ( showLabel ) {

114
lbl . text = msj ;
autoHideMessage = autoHide ;
}
}

public void hideMessage () {


if ( showLabel ) { lbl . text = " " ; deleteCentro () ;}
}

public void deSeleccionar () {


if ( objSelected != null ) {
if ( objSelected . GetComponent < Renderer >() != null )
objSelected . GetComponent < Renderer >() . material . SetColor (
" _Color " , pastColor ) ;
foreach ( Component com in objSelected . G e t C o m p o n e n t s I n C h i l d r e n (
typeof ( MeshRenderer ) ) ) {
com . GetComponent < Renderer >() . material . SetColor (
" _Color " , pastColor ) ;
}
objSelected = null ;
}
}

public void seleccionar ( GameObject newObj ) {


if ( timeForSeleccion >0) {
bool mismoObjeto = false ;
if ( objSelected != null ) {
if ( newObj . Equals ( objSelected ) ) mismoObjeto = true ;
deSeleccionar () ;
}
if (! mismoObjeto )

115
s e l e c c i o n a r N o D e s e l e c c i o n a r ( newObj ) ;
}
}

private void s e l e c c i o n a r N o D e s e l e c c i o n a r ( GameObject newObj ) {


clk_izq_act = false ;
objSelected = newObj ;
lastPos = new Vector3 ( objSelected . transform . position .x ,
objSelected . transform . position .y ,
objSelected . transform . position . z ) ;
Color newCol = new Color ( pastColor .r , pastColor .g ,
pastColor . b + 20 ,
pastColor . a + 20) ;
if ( objSelected . GetComponent < Renderer >() != null ) {
pastColor = new Color ( objSelected . GetComponent <
Renderer >() . material . color .r ,
objSelected . GetComponent < Renderer >() . material . color .g ,
objSelected . GetComponent < Renderer >() . material . color .b ,
objSelected . GetComponent < Renderer >() . material . color . a ) ;
objSelected . GetComponent < Renderer >() . material . SetColor (
" _Color " , newCol ) ;
}
foreach ( Component com in
objSelected . G e t C o m p o n e n t s I n C h i l d r e n ( typeof ( MeshRenderer ) ) ) {
com . GetComponent < Renderer >() . material . SetColor ( " _Color " , newCol ) ;
}
}

public void createSubMenu () {


float newx = 0 , newy = 0;
foreach ( GameObject go in objsMenu ) {

116
GameObject ins = ( GameObject ) Instantiate ( Resources . Load ( go . name ) ) ;
ins . transform . localScale = new Vector3 (0.5 f , 0.5 f , 0.5 f ) ;
ins . transform . localPosition = new Vector3 ( newx , 0.0 f , newy ) ;
newx +=3;
}
submenu = true ;
}
}

Archivo RotateLeapWithObject.cs

using UnityEngine ;
using System . Collections ;

public class R o t a t e L e a p W i t h O b j e c t : MonoBehaviour {


public GameObject objeto ;

void Start () {
}

void Update () {
Vector3 r = objeto . transform . localRotation . eulerAngles ;
transform . eulerAngles = new Vector3 (270 - r .x , r . y +180 , r . z ) ;
}
}

Archivo webcam.cs

using UnityEngine ;

public class webcam : MonoBehaviour {


public MeshRenderer [] UseWebcamTexture ;

117
public WebCamTexture webcamTexture ;
private int timeForChanging ;
private bool change ;

void Start () {
timeForChanging = 10;
change = true ;

WebCamDevice [] devices = WebCamTexture . devices ;


if ( devices . Length > 0) {
foreach ( WebCamDevice c in devices ) {
Debug . Log ( c . name ) ;
}
}

webcamTexture = new WebCamTexture ( " Webcam C170 " , 1280 , 760 , 10) ;
GetComponent < Renderer >() . material . mainTexture = webcamTexture ;
webcamTexture . Play () ;
}

void Update () {
if ( change ) {
if ( timeForChanging ==0) {
change = false ;
(( Camera ) GameObject . Find ( " LeftEyeAnchor " ) . GetComponent (
typeof ( Camera ) ) ) . fieldOfView = 100;
(( Camera ) GameObject . Find ( " RightEyeAnchor " ) . GetComponent (
typeof ( Camera ) ) ) . fieldOfView = 100;
}
else timeForChanging - -;
}

118
}
}

Archivo accion LClick RRot.cs


using UnityEngine ;
using System . Collections ;

public class a cc io n_ LC li ck _R Ro t : iAccion {


private Quaternion objRotBase ;
private Quaternion handRotBase ;
private Quaternion rot ;
private bool rotando ;
private Params p ;

public acc io n_ LC li ck _R Ro t () {
p = ( Params ) GameObject . Find ( " Scripts " ) . GetComponent ( typeof ( Params ) ) ;
objRotBase = p . getQuatZero () ;
handRotBase = p . getQuatZero () ;
rot = p . getQuatZero () ;
rotando = false ;
}

public bool ejecutaAccion ( HandModel hm , Collider c ) {


if ( hm . GetLeapHand () . IsRight && c != null ) {
if ( p . clk_izq_act ) {
if ( objRotBase . Equals ( p . getQuatZero () ) ) {
Quaternion rotAux = c . transform . localRotation ;
objRotBase = new Quaternion ( rotAux .x , rotAux .y , rotAux .z ,
rotAux . w ) ;
handRotBase = new Quaternion ( hm . GetPalmRotation () .x ,
hm . GetPalmRotation () .y ,

119
hm . GetPalmRotation () .z ,
hm . GetPalmRotation () . w ) ;
rotando = true ;
}
else {
rot = hm . GetPalmRotation () ;
c . transform . localRotation = objRotBase *
Quaternion . AngleAxis ( -( rot . x -
handRotBase . x ) * Mathf . Rad2Deg *2 , Vector3 . right ) ;
c . transform . localRotation = c . transform . localRotation *
Quaternion . AngleAxis (( rot . z -
handRotBase . z ) * Mathf . Rad2Deg *2 , Vector3 . up ) ;
c . transform . localRotation = c . transform . localRotation *
Quaternion . AngleAxis (( rot . y -
handRotBase . y ) * Mathf . Rad2Deg *2 , Vector3 . forward ) ;
}
}
else {
if ( rotando ) {
rotando = false ;
objRotBase = p . getQuatZero () ;
handRotBase = p . getQuatZero () ;
rot = p . getQuatZero () ;
return true ;
}
}
}
return false ;
}
}

120
Archivo detectaGestura.cs

using UnityEngine ;
using System . Collections ;
using Leap ;

public class detectaGestura {


private char circulo ;
private char barrido ;
private bool keytap ;
private bool screentap ;

public detectaGestura () {
inicializa () ;
}

private void inicializa () {


circulo = 0 ;
barrido = 0 ;
keytap = false ;
screentap = false ;
}

private void actualizaCirculo ( Gesture . GestureState edo ) {


if ( edo == Gesture . GestureState . STATESTART && circulo == 0 )
circulo = 1 ;
else if ( edo == Gesture . GestureState . STATEUPDATE && circulo == 1 )
circulo = 2 ;
else if ( edo == Gesture . GestureState . STATESTOP && circulo == 2 )
circulo = 3 ;
}

121
private void actualizaBarrido ( Gesture . GestureState edo ) {
if ( edo == Gesture . GestureState . STATESTART && barrido == 0 )
barrido = 1 ;
else if ( edo == Gesture . GestureState . STATEUPDATE && barrido == 1 )
barrido = 2 ;
else if ( edo == Gesture . GestureState . STATESTOP && barrido == 2 )
barrido = 3 ;
}

private Gesture . GestureType getTipo () {


if ( circulo == 3 ) {
inicializa () ;
return Gesture . GestureType . TYPECIRCLE ;
}
if ( barrido == 3 ) {
inicializa () ;
return Gesture . GestureType . TYPESWIPE ;
}
if ( keytap ) { inicializa () ; return Gesture . GestureType . TYPEKEYTAP ;}
if ( screentap ) { inicializa () ; return
Gesture . GestureType . TYPESCREENTAP ;}
return Gesture . GestureType . TYPEINVALID ;
}

public Gesture . GestureType actualizaEstado ( Gesture . GestureType tipo ,


Gesture . GestureState edo ) {
switch ( edo ) {
case Gesture . GestureState . STATESTART :
switch ( tipo ) {
case Gesture . GestureType . TYPECIRCLE : actualizaCirculo ( edo ) ;
break ;

122
case Gesture . GestureType . TYPESWIPE : actualizaBarrido ( edo ) ;
break ;
}
break ;
case Gesture . GestureState . STATEUPDATE :
switch ( tipo ) {
case Gesture . GestureType . TYPECIRCLE : actualizaCirculo ( edo ) ;
break ;
case Gesture . GestureType . TYPESWIPE : actualizaBarrido ( edo ) ;
break ;
}
break ;
case Gesture . GestureState . STATESTOP :
switch ( tipo ) {
case Gesture . GestureType . TYPECIRCLE : actualizaCirculo ( edo ) ;
break ;
case Gesture . GestureType . TYPESWIPE : actualizaBarrido ( edo ) ;
break ;
case Gesture . GestureType . TYPEKEYTAP :
if ( circulo != 3 && barrido != 3 )
keytap = true ;
break ;
case Gesture . GestureType . TYPESCREENTAP :
if ( circulo != 3 && barrido != 3 )
screentap = true ;
break ;
}
break ;
case Gesture . GestureState . STATEINVALID :
break ;
} // switch

123
return getTipo () ;
}
}

Archivo LeftHandClick.cs
using UnityEngine ;
using System . Collections ;
using Leap ;

public class LeftHandClick : MonoBehaviour {


private short framesTimer ;
private short framesTimerCount ;
private Params p ;
private HandModel hand_model ;

void Start () {
framesTimer = 50;
framesTimerCount = 0;

hand_model = GetComponent < HandModel >() ;


p = ( Params ) GameObject . Find ( " Scripts " ) . GetComponent ( typeof ( Params ) ) ;
}

void VerifyGrabbing ( Hand hnd ) {


if ( hnd . GrabStrength >=0.95) {
if ( framesTimerCount < framesTimer )
framesTimerCount ++;
}
else {
if ( framesTimerCount >0 && framesTimerCount < framesTimer ) {
framesTimerCount =0;

124
if (! p . clk_izq_act ) {
p . clk_izq_act = true ;
}
else {
p . clk_izq_act = false ;
p . hideMessage () ;
}
}
framesTimerCount =0;
}
}

void Update () {
Hand leap_hand = hand_model . GetLeapHand () ;
if ( leap_hand . IsLeft )
VerifyGrabbing ( leap_hand ) ;
}
}

Archivo accionCircle.cs
using UnityEngine ;
using System . Collections ;

public class accionCircle : iAccion {


private Params p ;
public accionCircle () {
p = ( Params ) GameObject . Find ( " Scripts " ) . GetComponent ( typeof ( Params ) ) ;
}

public bool ejecutaAccion ( HandModel hm , Collider c ) {


if (! p . submenu ) {

125
Debug . Log ( " Creating sub menu " ) ;
p . createSubMenu () ;
}
else {
return true ;
}
return false ;
}
}

Archivo accionGrab.cs
using UnityEngine ;
using System . Collections ;
using Leap ;

public class accionGrab : iAccion {


private Vector3 handPosBase ;
private Params p ;
private int retardo ;
private GameObject camaraRig ;

public accionGrab () {
handPosBase = Vector3 . zero ;
p = ( Params ) GameObject . Find ( " Scripts " ) . GetComponent ( typeof ( Params ) ) ;
camaraRig = GameObject . Find ( " OVRCameraRig " ) ;
retardo = 0;
}

public void ini cializ aRetardo () {


retardo =0;
}

126
public void baseToCero () {
handPosBase = Vector2 . zero ;
}

private bool arrastrar ( Hand hnd , Collider c ) {


if ( hnd != null && hnd . IsRight && c != null ) {
if ( handPosBase == Vector3 . zero ) {
Leap . Vector posObj ;
posObj = hnd . S t a b i l i z e d P a l m P o s i t i o n ;
handPosBase = new Vector3 ( posObj . x * p . span .x , - posObj . z * p . span .y ,
posObj . y * p . span . z ) ;
}
else {
bool arr as tr eF in al iz ad o = false ;
if ( hnd . GrabStrength <= p . g e t D e f a u l t G r a b S t r e n g t h () )
ar ra st re Fi na li za do = true ;
arrastrarObj ( hnd , c ) ;
if ( a rr as tr eF in al iz ad o ) {
p . setLastPos ( c . transform . position ) ;
handPosBase = Vector3 . zero ;
return true ;
}
}
}
return false ;
}

private void arrastrarObj ( Hand hnd , Collider c ) {


Leap . Vector posObj = hnd . S t a b i l i z e d P a l m P o s i t i o n ;
c . transform . localPosition = p . getLastPos () + new Vector3 (

127
posObj . x * p . span .x , - posObj . z * p . span .y , posObj . y * p . span . z ) -
handPosBase ;

if ( p . objSelected . GetComponent ( typeof ( imagenPlano ) ) != null ) {


Vector3 pos2 = new Vector3 ( camaraRig . transform . position .x ,
c . transform . position .y , camaraRig . transform . position . z ) ;
c . transform . LookAt ( pos2 ) ;
c . transform . localRotation = c . transform . localRotation *
Quaternion . AngleAxis (90 , Vector3 . right ) ;
c . transform . localRotation = c . transform . localRotation *
Quaternion . AngleAxis (
(( imagenPlano ) p . objSelected . GetComponent (
typeof ( imagenPlano ) ) ) . rotacion , Vector3 . up ) ;
}
}

public bool ejecutaAccion ( HandModel hm , Collider c ) {


if ( retardo <20) {
retardo ++;
return false ;
}
return arrastrar ( hm . GetLeapHand () , c ) ;
}
}

Archivo accionRotar1Eje.cs
using UnityEngine ;
using System . Collections ;
using Leap ;

public class accionRotar1Eje : iAccion {

128
private Quaternion objRotBase ;
private Params p ;
private float angleBase ;
private float angleDer ;
private float tolerancia ;
private GameObject camaraRig ;
private imagenPlano img ;

public accionRotar1Eje () {
p = ( Params ) GameObject . Find ( " Scripts " ) . GetComponent ( typeof ( Params ) ) ;
camaraRig = GameObject . Find ( " OVRCameraRig " ) ;
objRotBase = p . getQuatZero () ;
tolerancia = 10;
}

public void s et Ob jR ot at io nB as e () {
objRotBase = new Quaternion ( p . objSelected . transform . localRotation .x ,
p . objSelected . transform . localRotation .y ,
p . objSelected . transform . localRotation .z ,
p . objSelected . transform . localRotation . w ) ;
Vector3 centro = Vector3 . Lerp ( p . palmPosToUnity ( p . getLHand () ) ,
p . palmPosToUnity ( p . getRHand () ) , 0.5 f ) ;
p . setCentro ( centro ) ;
angleBase = AngleSigned2 ( p . ge tC en tr oT ra ns fo rm () ,
p . palmPosToUnity ( p . getRHand () ) ) ;
p . enable Li ne Re nd er er ( true ) ;
img = ( imagenPlano ) p . objSelected . GetComponent ( typeof ( imagenPlano ) ) ;
}

public bool ejecutaAccion ( HandModel hm , Collider c ) {


if ( hm . GetLeapHand () . GrabStrength <= p . g e t D e f a u l t G r a b S t r e n g t h () ) {

129
img . rotacion = img . rotacion - ( angleDer - angleBase ) ;
return true ;
}
float angleIzq = AngleSigned2 ( p . ge tC en tr oT ra ns fo rm () ,
p . palmPosToUnity ( p . getLHand () ) ) ;
angleDer = AngleSigned2 ( p . g et Ce nt roT ra ns fo rm () ,
p . palmPosToUnity ( p . getRHand () ) ) ;
float diferencia =0;
if ( angleIzq <0) diferencia = angleIzq +180 - angleDer ;
else diferencia = angleIzq -180+ angleDer ;

if ( diferencia <0) diferencia = - diferencia ;


if ( tolerancia < diferencia )
rotarObj ( hm . GetLeapHand () , c , angleDer - angleBase ) ;
return false ;
}

private Vector3 getPto3 ( Vector3 v1 , Vector3 v2 ) {


return new Vector3 ( v2 .x , v1 .y , v2 . z ) ;
}

// ptoRef pto base para calcular el angulo


// v pto del cual se calculara el angulo con respecto de ptoRef
// NOTA : El ptoRef debe estar viendo hacia la camara para poder
identificar si el v esta a su izq o a su der
private float AngleSigned2 ( Transform ptoRef , Vector3 v ) {
float retorno = 0;
if ( ptoRef != null ) {
Vector3 it = ptoRef . I n v e r s e T r a n s f o r m P o i n t ( v ) ;
bool izquierda = false ;
if ( it .x >0) izquierda = true ;

130
float co = Vector3 . Distance ( getPto3 ( ptoRef . position , v ) , v ) ,
h = Vector3 . Distance ( ptoRef . position , v ) ;
retorno = Mathf . Asin ( co / h ) * Mathf . Rad2Deg ;

if ( izquierda && v .y > ptoRef . position . y ) retorno =180 - retorno ;


if ( v .y <= ptoRef . position . y ) {
retorno = - retorno ;
if ( izquierda ) retorno = -180 - retorno ;
}
}
return retorno ;
}

private void rotarObj ( Hand hnd , Collider c , float rotacion ) {


Vector3 pos2 = new Vector3 ( camaraRig . transform . position .x ,
c . transform . position .y , camaraRig . transform . position . z ) ;
c . transform . LookAt ( pos2 ) ;
c . transform . localRotation = objRotBase *
Quaternion . AngleAxis ( - rotacion , Vector3 . up ) ;
}
}

Archivo accionScale.cs
using UnityEngine ;
using System . Collections ;
using Leap ;

public class accionScale : iAccion {


private Vector3 objScaleBase ;
private Params p ;

131
private float distBase ;

public accionScale () {
p = ( Params ) GameObject . Find ( " Scripts " ) . GetComponent ( typeof ( Params ) ) ;
objScaleBase = Vector3 . zero ;
}

public void setObjScaleBase () {


objScaleBase = new Vector3 ( p . objSelected . transform . localScale .x ,
p . objSelected . transform . localScale .y ,
p . objSelected . transform . localScale . z ) ;
distBase = Vector3 . Distance ( p . getLHandPosBase () ,
p . getRHandPosBase () ) ;
p . enable Li ne Re nd er er ( true ) ;
}

public bool ejecutaAccion ( HandModel hm , Collider c ) {


if ( hm . GetLeapHand () . GrabStrength <= p . g e t D e f a u l t G r a b S t r e n g t h () ) {
p . enab le Li ne Re nd er er ( false ) ;
return true ;
}
p . lineR endere rPoint (1 ,
hm . GetLeapHand () . S t a b i l i z e d P a l m P o s i t i o n . ToUnity () ) ;
float dist = Vector3 . Distance ( p . getLHandPosBase () ,
hm . GetLeapHand () . S t a b i l i z e d P a l m P o s i t i o n . ToUnity () ) ;
EscalarObj ( hm . GetLeapHand () , c , ( dist - distBase ) /100.0 f ) ;
return false ;
}

private void EscalarObj ( Hand hnd , Collider c , float escalar ) {


escalar ++;

132
float newx = objScaleBase . x * escalar , newy = objScaleBase . y * escalar ,
newz = objScaleBase . z * escalar ;
newx = ( newx >= p . getMinimumScale () ? newx : p . getMinimumScale () ) ;
newy = ( newy >= p . getMinimumScale () ? newy : p . getMinimumScale () ) ;
newz = ( newz >= p . getMinimumScale () ? newz : p . getMinimumScale () ) ;
c . transform . localScale = new Vector3 ( newx , newy , newz ) ;
}
}

Archivo accionSeleccionar.cs
using UnityEngine ;
using Leap ;

public class ac cionSe leccio nar : iAccion {


private Params p ;

public acc ionSel eccion ar () {


p = ( Params ) GameObject . Find ( " Scripts " ) . GetComponent ( typeof ( Params ) ) ;
}

private bool isBoneOfHand ( Collider obj ) {


if ( obj . name . Equals ( " bone1 " ) || obj . name . Equals ( " bone2 " ) ||
obj . name . Equals ( " bone3 " ) || obj . name . Equals ( " palm " ) )
return true ;
return false ;
}

private Vector3 g et I n de x T ip P o si t i on ( FingerList lst ) {


foreach ( Finger dedo in lst ) {
if ( dedo . Type () == Finger . FingerType . TYPE_INDEX ) {
return p . vectorToUnity ( dedo . TipPosition ) ;

133
}
}
return Vector3 . zero ;
}

private Vector3 g e t I n d e x T i p P o s i t i o n C u r r H a n d ( Hand hnd ) {


Vector3 tp = g et I n de x T ip P o si t i on ( hnd . Fingers ) ;
if ( tp == Vector3 . zero ) return Vector3 . zero ;
return tp + p . offset ;
}

private void seleccionar ( Vector3 pos ) {


if ( pos != Vector3 . zero ) {
Collider [] close_things = Physics . OverlapSphere ( pos ,
p . magnetDistance ) ;
Vector3 distance = new Vector3 ( p . magnetDistance , 0.0 f , 0.0 f ) ;
bool pu doSele cciona rse = false ;
Collider aux = null ;

for ( int j = 0; j < close_things . Length ; ++ j ) {


Vector3 new_distance = pos - close_things [ j ]. transform . position ;
if ( close_things [ j ]. GetComponent < Rigidbody >() != null &&
new_distance . magnitude < distance . magnitude &&
! isBoneOfHand ( close_things [ j ]) ) {
aux = close_things [ j ];
distance = new_distance ;
pud oSelec cionar se = true ;
}
} // for
if ( pu doSele cciona rse ) {
p . seleccionar ( aux . gameObject ) ;

134
}
}
}

public bool ejecutaAccion ( HandModel hm , Collider c ) {


if ( p . get La st Co ll is io ne d () != null ) p . seleccionar ( p . get La st Co ll is io ne d () ) ;
return true ;
}
}

Archivo accionSwipe.cs

using UnityEngine ;
using System . Collections ;
using Leap ;

public class accionSwipe : iAccion {


public bool ejecutaAccion ( HandModel hm , Collider c ) {
if ( c != null ) {
Params p = (( Params ) GameObject . Find (
" Scripts " ) . GetComponent ( typeof ( Params ) ) ) ;
GameObject obj = p . objSelected ;
p . deSeleccionar () ;
UnityEngine . Object . Destroy ( obj ) ;
}
return true ;
}
}

135
Archivo iAccion.cs

using UnityEngine ;

public interface iAccion {


bool ejecutaAccion ( HandModel hm , Collider c ) ; // return true when
finalized
}

136
Bibliografa

[1] THALMIC LABS, Introducing MYO. https://www.thalmic.com/en/myo/, Consultada en


Diciembre 2013.

[2] SoftKinetic, DEPTHSENSE CAMERAS.


http://www.softkinetic.com/products/depthsensecameras.aspx, Consultada en Agosto 2014.

[3] RACTIV, TOUCH+. http://www.ractiv.com/index.html, Consultada en Agosto 2014.

[4] Dan Farber, Metas $3,000 3D glasses look to an augmented reality future.
http://www.cnet.com/news/metas-3000-3d-glasses-look-to-an-augmented-reality-future/,
Consultada en Agosto 2014.

[5] Epson, Moverio BT-200. http://www.epson.com/cgi-bin/Store/jsp/Landing/moverio-bt-


200-smart-glasses.do?ref=van moverio 2014, Consultada en Enero 2015.

[6] Laforge Optical, ICIS smart glasees. http://www.laforgeoptical.com/, Consultada en Enero


2015.

[7] Potinvent, Ora smart glasses. http://optinvent.com/buy-ORA-AR-glasses-SDK,


Consultada en Enero 2015.

[8] VUZIX, Vuzix M100 smart glasses - Enterprise.


http://www.vuzix.com/consumer/products m100/, Consultada en Enero 2015.

[9] Blender. https://www.blender.org/about/, Consultada en Enero 2015.

[10] Unity. http://unity3d.com/es/unity, Consultada en Enero 2015.

137
[11] Logitech, Webcam C170. http://support.logitech.com/product/webcam-c170, Consultada
en Marzo 2015.

[12] Alejandra Centeno, Especial Japon: Novias virtuales.

[13] Ronald T. Azuma, A Survey of Augmented Reality, PRESENCE, vol. 6, no. 4,


pp. 355385, 1997.

[14] Mehmet Kesim, Yasin Ozarslan, Augmented reality in education: current technologies and
the potential for education, Procedia - Social and Behavioral Sciences, vol. 47, pp. 297302,
2012.

[15] Haptics Touch, Haptix: Multitouch Reinvented.


https://www.kickstarter.com/projects/haptix/haptix-multitouch-reinvented, Consultada en
Agosto 2014.

[16] Meta. https://www.spaceglasses.com/, Consultada en Agosto 2014.

[17] Xiangyu Wang, Mi Jeong Kim, Peter E.D. Love, Shih-Chung Kang, Augmented Reality in
built environment: Classification and implications for future research, Automation in
Construction, vol. 32, pp. 113, 2013.

[18] Tomasz Mazuryk and Michael Gervautz, Virtual Reality. History, Applications, Technology
and Future, Institute of Computer Graphics. Vienna University of Technology, Austria, 1996.

[19] David Drascic and Paul Milgram, Perceptual Issues in Augmented Reality, SPIE, vol. 2653,
pp. 123134, 1996.

[20] Daniel Kurz, SelimBenhimane, Handheld Augmented Reality involving gravity


measurements, Computers & Graphics, vol. 36, pp. 866883, 2012.

[21] Jesus Ibanez, Carlos Delgado-Mata, Lessons from research on interaction with virtual
environment, Journal of Network and Computer Applications, vol. 34, pp. 268281, 2011.

138
[22] Hung-Lin Chi, Shih-Chung Kang, Xiangyu Wang, Research trends and opportunities of
augmented reality applications in architecture, engineering, and construction, Automation in
Construction, vol. 33, pp. 116122, 2013.

[23] Yoki Ariyana and Aciek Ida Wuryandari, Virtual Interaction on Augmented Reality for
Education with Nonparametric Belief Propagation Algorithm, Procedia - Social and
Behavioral Sciences, vol. 67, pp. 590599, 2012.

[24] Jiaqing Lin, Hiroaki Nishino, Tsuneo Kagawa, Kouichi Utsumiya, A method of two-handed
gesture interactions with applications based on commodity devices, Computers and
Mathematics with Applications, vol. 63 Issue 2, 2012.

[25] Raine Kajastilan, TapioLokki, Eyes-free interaction with free-hand gestures and auditory
menus, Int. J. Human-Computer Studies, vol. 71, pp. 627640, 2013.

[26] Do Hyoung Shin, Phillip S. Dunston, Technology development needs for advancing
Augmented Reality-based inspection, Automation in Construction, vol. 19, pp. 169182,
2010.

[27] Jason Wither, Stephen DiVerdi, Tobias Hollerer, Annotation in outdoor augmented reality,
Computers and Graphics, vol. 33, pp. 679689, 2009.

[28] Jae Yeol Lee, Dong Woo Seo, Gue Won Rhee, Tangible authoring of 3D virtual scenes in
dynamic augmented reality environment, Computers in Industry, vol. 62, pp. 107119, 2011.

[29] Yuko Uematsu, Hideo Saito, Multiple planes based registration using 3D Projective Space
for Augmented Reality, Image and Vision Computing, vol. 27, pp. 14841496, 2009.

[30] Angela Di Serio, Mara Blanca Ibanez, Carlos Delgado Kloos, Impact of an augmented
reality system on students motivation for a visual art course, Computers and Education,
vol. 68, pp. 586596, 2013.

[31] Cristina Portales, Jose Luis Lerma, Santiago Navarro, Augmented reality and
photogrammetry: A synergy to visualize physical and virtual city, ISPRS Journal of
Photogrammetry and Remote Sensing, vol. 65, pp. 134142, 2010.

139
[32] Dong Woo Seo, Jae Yeol Lee, Direct hand touchable interactions in augmented reality
environments for natural and intuitive user experiences, Expert Systems with Applications,
vol. 40, pp. 37843793, 2013.

[33] Lucas Mearian, Minority Report-style goolges enable interaction with floating display.

[34] protocolo.org, Comunicacion no verbal. La importancia de los gestos. I..


http://www.protocolo.org/social/conversar hablar/comunicacion no verbal la importancia
de los gestos i.html, Consultada en Enero 2015.

[35] Wikipedia, Reconocimiento de gestos.


http://es.wikipedia.org/wiki/Reconocimiento de gestos, Consultada en Enero 2015.

[36] Luis Miranda, As trabaja Elon Musk en su laboratorio de Iron Man.


http://www.fayerwayer.com/2013/09/asi-trabaja-elon-musk-en-su-laboratorio-de-iron-
man/?utm source=feedburner&utm medium=feed&utm campaign=Feed %3A+fayerwayer
+ %28FayerWayer %29, Consultada en Septiembre 2013.

[37] Leap Motion, Inc, Leap Motion Documentation - Overview.


https://developer.leapmotion.com/documentation/Languages/CSharpandUnity/Guides/
Leap Overview.html, Consultada en Diciembre 2013.

[38] VIRTUAL Realities LTD, DG5-VHand Glove 3.0.


http://www.vrealities.com/products/data-gloves/dg5-vhand-glove-3-0, Consultada en Agosto
2014.

140
Glosario

1080p

Es el nombre corto para una de las categoras de los modos de vdeo, usado principalmente
en la television de alta definicion. El numero 1080 representa 1080 lneas horizontales de
resolucion de pantalla, mientras que la letra p significa barrido progresivo, es decir, que las
1080 lineas que forman la imagen se van formando de una en una, de arriba hacia abajo. 93,
95

2D

Es una abreviacion para hacer referencia a dos dimensiones, es decir, alto y ancho, sin tomar
en cuenta la profundidad. 3, 4, 34, 92

3D

Es una abreviacion para hacer referencia a tres dimensiones, es decir, ancho, alto y
profundidad. 5, 6, 8, 16, 1820, 34, 40, 41, 4550, 52, 56, 90, 92

720p

Es el nombre corto para una de las categoras de los modos de vdeo, usado principalmente en
la television de alta definicion. El numero 720 representa 720 lneas horizontales de resolucion
de pantalla, mientras que la letra p significa barrido progresivo, es decir, que las 720 lineas
que forman la imagen se van formando de una en una, de arriba hacia abajo. 36, 87, 88

141
802.11

Es un estandar de la IEEE para conexiones inalambricas. La letra o letras que le siguen indican
el tipo de estandar del que se trata, variando basicamente la velocidad de transferencia de
datos. Si existe una diagonal entre letras, por ejemplo b/n, esto quiere decir que soporta ambas
velocidades. 34, 88, 91, 93, 95

Acelerometro

Es un instrumento capaz de medir aceleraciones. Es decir, mide el cambio de velocidad en una


unidad de tiempo. 12, 8991, 95

Adyacente

Quiere decir, que se encuentra muy cerca, generalmente lado a lado. 10

Algoritmo

Conjunto de instrucciones o reglas bien definidas, ordenadas y finitas que permite realizar
una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha
actividad. VIII, 14, 15, 22

Android

Es un sistema operativo basado en el nucleo Linux. Fue disenado principalmente para


dispositivos moviles con pantalla tactil, como telefonos inteligentes o tabletas electronicas.
35, 38, 89, 93, 94

Anotacion

Cuando se habla de una anotacion en Realidad Aumentada, quiere decir que se pone un texto
sobre alguna imagen, para as poder obtener mas informacion de la imagen o algun objeto, o
parte de un objeto dentro de esa imagen. IV, 6, 14

Asset Store

Es una tienda en lnea de complementos para Unity. 50, 51

142
Base de datos

Es un conjunto de datos pertenecientes a un mismo contexto que estan almacenados para su


uso futuro. 6

Binaural

Un ejemplo muy claro de algo binaural, son nuestros odos. Los odos estan separados cierta
distancia uno del otro, por lo cual, se puede saber de donde proviene el sonido. En otras
palabras, binaural es cuando se percibe un sonido de dos lugares diferentes. 3

Binocular

De acuerdo a su raz etimologica, bis = dos veces; oculus-i = ojo. Por lo tanto se refiere al
empleo de los dos ojos, simultaneamente. 11

Bit

Un bit es un dgito del sistema de numeracion binario, el cual puede representar solo uno
de dos valores, 0 o 1. Es muy usado en sistemas electronicos donde un 0 representa ausencia
de voltaje y un 1 significa presencia de voltaje. Un conjunto de muchos bit se utiliza para
representar datos. 71, 88, 91, 94

Bluetooth

Es una tecnologa de ondas de radio de corto alcance, que posibilita la transmision de voz y
datos entre diferentes dispositivos. 26, 30, 34, 35, 37, 88, 89, 91, 93, 95

Es un lenguaje de programacion utilizado para crear aplicaciones para computadoras o


dispositivos electronicos. Por medio de instrucciones en lenguaje C, se le puede indicar a un
dispositivo electronico que acciones realizar. Existen variaciones y mejoras para este lenguaje,
las mas comunes son C++ o C#. 14, 50, 61

143
Calibrada

Calibrar es el proceso de comparar los valores obtenidos por un instrumento de medicion con
la medida correspondiente de un patron de referencia (o estandar). 9

Capacitivo

Que posee lo que se llama Capacitancia, que es la capacidad de almacenar energa electrica
en forma de campo magnetico. 92

Colector de escape

Es un conjunto de tubos que conducen los gases de la combustion y los dirigen al exterior del
vehculo a traves del sistema de escape. 6

Contraste

Se define como la diferencia relativa en la intensidad entre un punto de una imagen. Un


ejemplo simple es el contraste entre un objeto de brillo constante sobre un fondo de un brillo
constante. Si ambas superficies tienen el mismo brillo, el contraste sera nulo y si el conjunto
esta en tonos de gris, el objeto sera tanto fsica como perceptiblemente indistinguible del
fondo. Segun se incrementa la diferencia en brillo el objeto sera perceptiblemente distinguible
del fondo. IV, 10

Controlador

Es un programa informatico que permite al sistema operativo interaccionar con un dispositivo.


Tambien es conocido por su palabra en ingles driver. 39, 50, 51

Cursor

Es un indicador que se usa para mostrar la posicion en un monitor o en otros dispositivos de


visualizacion. 22

Digitalizar

Es el proceso de convertir cualquier cosa, ya sea una imagen, texto, o algun objeto, en su
equivalente digital, es decir, por computadora. 8

144
Dinamico

Que esta cambiando constantemente. IV, 9

Disparidad

Es la diferencia o desemejanza entre dos cosas. En otras palabras, que no son iguales. 9, 11

Emulacion

Es una tecnica de imitacion con el fin de que un dispositivo realice el funcionamiento de otro.
88

Esquema

Representacion grafica o simbolica de una cosa o concepto. 7

Estereoscopico

Que da una impresion de profundidad parecida a la que percibe la vision normal o binocular.
4, 5, 11, 34

Estatico

Que no cambia. IV, 9

FBX

Es un tipo de formato de archivo que se utiliza para facilitar el transporte de los datos de un
modelo 3D entre aplicaciones. 47

Frecuencia espacial

Es una caracterstica de cualquier objeto cuya posicion en el espacio es continua. 10, 11

Gafas de AR

Son unas gafas cuya funcion principal es proporcionar un entorno de AR. I, 1921, 31, 32,
3537, 39, 40, 81, 82

145
Gafas de VR

Son unas gafas cuya funcion principal es proporcionar un entorno de VR. I, 1921, 33, 40

Gestura

Forma de comunicacion no verbal ni vocal en la cual ciertas acciones especficas visibles del
cuerpo comunican mensajes particulares. I, V, VIII, 1215, 1727, 39, 40, 4348, 6062, 65,
7075, 79, 81, 82, 85, 86, 94

Giroscopio

Es un dispositivo mecanico que sirve para medir, mantener o cambiar la orientacion en el


espacio de algun aparato o vehculo, en otras palabras, mide la rotacion del dispositivo. 12,
34, 8991, 95

Grafica vectorial

Son un tipo de graficas en las que las imagenes se almacenan y representan por medio de
trazos geometricos controlados por calculos y formulas matematicas, tomando algunos puntos
de la imagen como referencia para construir el resto. Esto significa que los graficos vectoriales
son creados con primitivas geometricas como puntos, lneas, curvas o polgonos a traves de
software o hardware. 8

Hardware

Es cualquier parte tangible de un sistema informatico, como pueden ser sus componentes
electricos, electronicos, electromecanicos y mecanicos. 3, 19, 20, 39

Hipervnculo

Es un enlace que nos lleva de un lugar a otro, generalmente se usa en internet donde nos
puede llevar a otra pagina, una imagen, texto o cualquier otro lugar. 3

Hz

Hercio, hertzio o hertz (smbolo Hz), es la unidad de frecuencia del Sistema Internacional
de Unidades. Este fue comenzado a adoptarse en 1960, y en la decada de 1970, reemplazo

146
completamente al nombre anterior de cps (ciclos por segundo), as como sus multiplos
relacionados. Se puede encontrar con sus multiplos relacionados, el mas comun actualmente
es GHz, que significa GigaHertz y equivale a 1 000 000 000 Hz. 71, 88, 89, 91, 93, 94, 96

Incertidumbre

Duda o indecision. 10, 11

Interaccion

Es una accion que se basa en el intercambio de informacion entre dos o mas personas o cosas.
I, VIII, 1, 12, 13, 1517, 19, 43, 44

Interactivo

Que permite en el intercambio de informacion entre dos o mas personas o cosas. 3, 50

Interactuar

Que estas intercambiando informacion entre personas o cosas. I, 1, 4, 12, 1618, 22, 33, 36

Interfaz

Es un elemento o conjunto de elementos que permiten el viaje de informacion entre dos objetos
o personas. 31, 49, 88, 92, 93

Interposicion

Es una accion que se produce cuando un objeto esta delante y entorpeciendo parcialmente la
vision de otro, es evidente que el objeto que esta delante, esta mas cerca, produciendose una
clara impresion de profundidad. IV, 11

Javascript

JavaScript es un lenguaje de programacion que se diseno con una sintaxis similar al C, aunque
adopta nombres y convenciones del lenguaje de programacion Java. Sin embargo Java y
JavaScript no estan relacionados y tienen semanticas y propositos diferentes. 50

147
Kinect

Es un accesorio principalmente ideado para la consola Xbox360 de Microsoft pero que


actualmente se aplica en varias areas. Este dispositivo cuenta con una combinacion de
camaras y microfonos, gracias a los cuales permite al usuario interactuar intuitivamente con
aplicaciones desarrolladas para este mismo dispositivo. VIII, 14, 16

Li-Ion

Esto se usa para indicar que la batera funciona a base de iones de litio. Un ion es una partcula
cargada electricamente constituida por un atomo o molecula que no es electricamente neutral,
es decir, debe de estar cargado positivamente o negativamente. 93

Luz infrarroja

Infrarrojo proviene de la palabra griega infra, que quiere decir por debajo de, por lo tanto
una luz infrarroja es una luz que se encuentra por debajo del rojo que puede percibir el ser
humano (que no puede ser vista). 28

Magnetometro

Es un dispositivo que sirve para cuantificar en fuerza o direccion la senal magnetica de una
muestra. 89

MAh

Es la abreviacion para mili amperio-hora. El amperio-hora representa la cantidad de


electricidad que, en una hora, atraviesa un conductor por el que circula una corriente. Entonces
un mAh es 0.001 amperio que circula en una hora. 95

Marcador

Es generalmente un dibujo que puede variar, los mas comunes constan de un borde negro de
un ancho determinado, y en su interior, tienen un dibujo negro o un patron que hace que se
diferencien unos de otros. VIII, 2, 3, 12, 14, 15, 80

148
Matiz

Variacion leve de tono, grado de luminosidad, color, entre otros. 22

MicroSD

Es un formato de tarjeta de memoria. Presentada por primera vez por SanDisk y es mas
pequena que la miniSD. 92

MicroSDHC

Es un formato de tarjeta de memoria donde SDHC son las siglas para Secure Digital High
Capacity, por lo tanto, estas son de alta capacidad a comparacion con las microSD. 92

Miracast

Es un estandar que permite transmitir audio y vdeo mediante WiFi entre distintos
dispositivos. 91, 93

Modelo geometrico

Es un modelo cuyos componentes del sistema se representan con entidades geometricas


como lneas, polgonos o circunferencias de modo que el termino modelo se refiere a una
representacion de estas entidades generada por la computadora. 12

Monocromatico

Del griego mono (uno) y chroma (superficie o color), es decir, que tiene un solo color. 4

Monoscopico

Es una accion por la cual se puede obtener una imagen de un solo punto de vista. 11

Nit

Un nit es la unidad de luminancia del Sistema Internacional de Unidades, y representa


una candela por metro cuadrado. La candela es una de las unidades basicas del Sistema
Internacional. Se define como la intensidad luminosa en una direccion dada, de una fuente
que emite una radiacion monocromatica. 94

149
Objeto virtual

Es un modelo tridimensional generado por computadora. I, 2, 5, 11, 12, 1419, 63

Obturador

Es un dispositivo que controla el tiempo durante el que llega la luz a un dispositivo fotosensible
(sensible a la luz). 5

Ocluido

Que existe un objeto que estan antes que este y por lo tanto, tapa una parte de el. 11

Oclusion

Es un efecto visual que se produce cuando el objeto mas cercano al observador impide ver al
objeto mas lejano. 11

OpenGL

Open Graphics Library, es una especificacion estandar que define una API multilenguaje y
multiplataforma para escribir aplicaciones que produzcan graficos 2D y 3D. 14, 49

Ortoscopica

Que no produce o que corrige deformaciones en imagenes. 9

Pantalla vestible

Son pantallas que se pueden usar como si fuera ropa, es decir, se visten, por ejemplo los
lentes. 31

Perspectiva

Es la ilusion visual que percibe el observador que le ayuda a determinar la profundidad y


situacion de los objetos a distintas distancias. 10

Prototipo

Un prototipo es un objeto disenado para una demostracion de cualquier tipo. VIII, 4, 6, 18

150
Python

Es un lenguaje de programacion de codigo abierto. 48

Pxel

Es un acronimo del ingles para picture element o bien en espanol, elemento de una imagen.
Es la menor unidad homogenea en color que forma parte de una imagen digital (un pequeno
punto diminuto de la imagen digital). 4, 90, 91, 93

Realidad Aumentada

Es un tipo de realidad virtual en la cual se registran estimulaciones sinteticas y superpuestas


sobre objetos del mundo real, a menudo suelen presentar informacion que de otra manera sera
imperceptible a los sentidos humanos. IV, VI, 2, 3, 5, 9, 12, 63, 80

Realidad Virtual

Es un medio compuesto de simulaciones interactivas por computadora que detectan la posicion


y las acciones del participante y remplazan o aumentan la sensacion de uno o mas sentidos,
dando la sensacion de estar inmerso mentalmente o presente en una simulacion. 2

Relacion de aspecto

Es la proporcion entre el ancho y la altura de una imagen. Se calcula dividiendo el ancho por
la altura de la imagen visible en pantalla, y se expresa normalmente como X:Y. 90, 94, 95

Renderizado

Es un termino usado en informatica para referirse al proceso de generar una imagen o vdeo
mediante el calculo de iluminacion partiendo de un modelo en 3D. 3, 48, 50

Resolucion

Es el numero de pxeles que pueden ser vistos en una pantalla y son representados en sentido
horizontal y vertical. Existen gran cantidad de resoluciones como por ejemplo: 320 x 480, 640
x 480, 800 x 600, 1280 x 800, etc. La multiplicacion de ambos numeros da como resultado el
total de pxeles que se representan en la pantalla. IV, 5, 10, 11, 28, 34, 36, 8790, 93, 94, 96

151
Resonancia magnetica

Es un examen que utiliza imanes y ondas de radio potentes para crear imagenes del cuerpo.
No se emplea radiacion (rayos X). 5

Retroalimentacion

Tambien conocida como realimentacion. Se utiliza para nombrar al regreso de una parte de la
salida de un sistema o circuito a su propia entrada, supone, por lo tanto, que una proporcion
de aquello que sale es redireccionado a la entrada. Esto permite regular el comportamiento y
controlar el sistema en cuestion. 3, 4

Script

Es un programa usualmente simple, que por lo regular se almacena en un archivo de texto.


VI, 20, 4648, 50, 61, 85, 86

Seguidor optico

Es generalmente una camara o dispositivo que se utiliza para rastrear (seguir) el movimiento
de algun objeto o persona. 4

Silueta

Es una vista de cierto objeto o escena que consiste en una representacion grafica sin rasgos
distintivos, generalmente se relaciona esto con algun tipo de sombra. 4, 27

Simulador

Es un aparato, por lo general informatico, que permite la reproduccion de un sistema. Los


simuladores reproducen sensaciones y experiencias que en la realidad pueden llegar a suceder.
3, 4

Sistema operativo

Es un programa o conjunto de programas de un sistema informatico que administra los


recursos de hardware y provee servicios a los programas de aplicacion, ejecutandose en modo
privilegiado respecto de los restantes. 89, 93, 94

152
Software

Es un conjunto de programas, instrucciones o reglas informaticas que permiten ejecutar


distintas tareas en una computadora. VI, 1720, 39, 4751, 88

Teleoperacion

Es un proceso que nos permite controlar el movimiento o la fuerza ejercida sobre algo,
generalmente ocupado sobre robots, pero el control se realiza de manera remota, es decir,
puede que el objeto controlado este realmente muy lejos o simplemente se necesite controlar a
cierta distancia para evitar estar presente en ese momento, como por ejemplo cuando se este
en un entorno hostil del que haya que proteger al operador. VIII, 7, 8, 11

Textura

Una textura es una imagen que se utiliza para cubrir la superficie de un objeto virtual ya sea
de dos o de tres dimensiones. En ocasiones una textura puede dar un efecto de relieve en el
objeto sobre el que es aplicado. 10, 63

Tiempo real

Esta palabra se usa en sistemas informaticos donde unicamente interesa la rapidez de dar
la respuesta dentro del intervalo de tiempo cuya medida, entre mas pequena es mejor, sin
importar el costo de generar esa respuesta. I, 3, 5, 7, 8, 30, 36

Triangulacion

Es el uso de formulas matematicas para determinar posiciones de puntos, medidas de distancias


o areas de figuras mediante puntos ya conocidos. 14

Virtual

Se refiere a algo que no es real ni se puede tocar y generalmente es creado por la computadora.
VIII, 15, 79, 12, 1417, 19, 26, 31, 33, 37, 39, 44, 50, 62, 63, 68, 80, 82

Walkthrough

Disenado para caminar a traves de el. 4

153
WiFi

Son las siglas para Wireless Fidelity, o bien, fidelidad inalambrica, que generalmente se usa
para representar que un dispositivo se puede conectar con otros sin la necesidad de cables. 34,
37, 88, 91, 93, 95

Wiimote

Es un control para la consola de videojuegos de la compana Nintendo llamada Wii. 12

154
Acronimos

AEC/FM Architecture, Engineering, Construction, and Facility Management. Su traduccion sera,


Arquitectura, Ingeniera, Construccion y Facilidad de Administracion. 12

API Application Programming Interface. Su traduccion sera Interfaz de programacion de


aplicaciones y son herramientas auxiliares para la programacion. 45, 46, 48, 94, 150

AR Augmented Reality. Su traduccion sera Realidad Aumentada. VIII, 2, 3, 5, 6, 9, 1121, 31,


32, 3537, 39, 40, 43, 44, 63, 7578, 8082, 145

CIDETEC Centro de Innovacion y Desarrollo Tecnologico en Computo. 23

CMOS Complementary Metal-OxideSemiconductor. (Semiconductor complementario de oxido


metalico). Es una tecnologa para construir circuitos integrados. La tecnologa CMOS es
utilizada en microprocesadores, microcontroladores y otros circuitos logicos digitales. Tambien
es usada para una gran variedad de circuitos analogicos como por ejemplo sensores de imagenes
(sensor CMOS). 28

CPU Central Process Unit. Su traduccion sera Unidad centra de procesamiento, y es el encargado
de realizar las operaciones y el control en un sistema de computo. 34, 91, 95, 96

CRT Cathode Ray Tube, o bien, tubo de rayos catodicos. Es una pantalla que permite visualizar
imagenes por medio de un haz de rayos catodicos. 4

DDDR Defined Distance with Defined Range. Su traduccion sera Distancia definida con Rango
Definido. 16

155
DDR Double Data Rate. Su traduccion sera Doble Velocidad de datos, y es un termino que se
utiliza para determinar el tipo de memoria RAM que ocupa una computadora. 93

DLL Dynamic Link Library. Su traduccion sera Librera de Enlace Dinamico, y basicamente es un
archivo que contiene instrucciones para permitir a los programadores desarrollar aplicaciones
con dispositivos que requieran este tipo de archivos. 88

DOS Disk Operating System. Su traduccion sera Sistema Operativo de Disco y basicamente es un
sistema operativo que funcionaba por medio de lineas de comandos en modo solo texto. 88

FPS Frames Per Second. Es la medida de la frecuencia a la cual un reproductor de imagenes genera
distintos fotogramas (frames), o en otras palabras, es la cantidad de imagenes que se generan
en un segundo. 87

GB Giga Bytes. Es un acronimo muy usado que se utiliza para representar una cantidad de 1 000
000 000 Bytes (mil millones de Bytes). Un byte es un conjunto de 8 bits. 34, 71, 88, 89, 9294,
96

GNU GNU is Not Unix. Es un acronimo que hace alusion a un proyecto del tipo Movimiento
y comunidad de Software y Conocimiento Libres, en otras palabras, un software que este
dentro de GNU, es libre y puede ser utilizado de manera gratuita por cualquier persona. 49

GPL General Public Licence. Su traduccion sera, Licencia Publica General. Esto quiere decir
que el software es libre y puede ser utilizado por cualquier persona sin costo alguno, y en
ciertos casos tambien permite la modificacion de la aplicacion con la condicion de que esta
modificacion se encuentre tambien bajo la misma licencia libre. 49

GPS Global Positioning System, o bien, sistema de posicionamiento global. Es un objeto que
permite a una persona determinar en todo el mundo la posicion de un objeto, una persona o
un vehculo con una gran precision. 12, 37, 91, 93, 94

GPU Graphics Processing Unit. Unidad de procesamiento grafico. Es un procesador dedicado al


procesamiento de graficos u operaciones con decimales, para aligerar la carga de trabajo del
procesador central en aplicaciones como los videojuegos o aplicaciones 3D interactivas. 37

156
HD High Definition. Alta definicion. 36, 71, 87

HDMI High Definition Multimedia Interface. Interfaz multimedia de alta definicion. Es una norma
de audio y vdeo digital cifrado sin compresion que permite el uso de vdeo computarizado,
mejorado o de alta definicion, as como audio digital multicanal en un unico cable. 43

HMD Head Mounted Display. Es un dispositivo de visualizacion que permite reproducir imagenes
creadas por ordenador sobre una pequena pantalla muy cercana a los ojos. VIII, 35, 10, 13,
31

HMI Human Machine Interface. Interfaz Hombre Maquina. Estas siglas se utilizan para referirse
a la interaccion entre humanos y maquinas. 22

HMS HelmetMounted Sights. Cascos montados con vision. Es un casco usado por pilotos de
aviones que proporcionan cierta informacion en el visor acerca de blancos, municiones, entre
otros. 8

HUD Head Up Display. Pantallas para la cabeza. 8

IEEE Institute of Electrical and Electronics Engineers. Sus siglas significan Instituto de Ingeniera
Electrica y Electronica, es una asociacion mundial de tecnicos e ingenieros que se encargan de
la estandarizacion y el desarrollo en areas tecnicas. 91, 142

ISMAR International Symposium on Mixed and Augmented Reality. Simposio Internacional de


Realidad Aumentada y Mixta. Es una conferencia que se lleva a cabo una vez al ano donde
se reunen expertos en estas areas para exponer sus descubrimientos. 12

LAN Local Area Network. Red de area local. Esta es una forma en la que se comunican dispositivos
electronicos ya sea de manera alambrica o inalambrica, con la restriccion de que debe ser de
un rango pequeno, generalmente abarca un edificio. 91

LCD Liquid Crystal Display. Pantalla de cristal lquido. Es una pantalla delgada y plana que utiliza
cantidades muy pequenas de energa electrica. 5, 34, 91

157
LED Lightemitting diode. Diodo emisor de luz. Un diodo es un componente electronico de dos
terminales que permite la circulacion de la corriente electrica a traves de el en un solo sentido.
Se puede decir entonces que el LED es un foco diminuto que tambien se puede encontrar en
diferentes colores. 96

MP Mega Pxeles. Representa 1 000 000 (un millon) de pxeles. 36, 88, 93, 95

NASA National Aeronautics and Space Administration. Administracion Nacional de la


Aeronautica y del Espacio. 4

NFC Near Field Communication. Comunicacion de campo cercano. Es una tecnologa de


comunicacion inalambrica, de corto alcance y alta frecuencia que permite el intercambio de
datos entre dispositivos. 89

QVGA Quarter Video Graphics Array. Es la resolucion grafica de 320x240 pxeles. Este termino
fue acunado as debido a que las pantallas QVGA ofrecen una cuarta parte de la resolucion
maxima del sistema VGA de IBM, es decir la cuarta parte de 640x480 pxeles. 87, 90

RAM RandomAccess Memory. Memoria de acceso aleatorio. Se utiliza como memoria de trabajo
de computadoras para el sistema operativo, los programas y la mayor parte del software. 34,
71, 92, 94, 96

RFID Radio Frequency IDentification. Identificacion por radiofrecuencia. Es un sistema de


almacenamiento y recuperacion de datos remoto que es utilizado en varios dispositivos. El
proposito fundamental de la tecnologa RFID es transmitir la identidad de un objeto (similar
a un numero de serie unico). 15

RGB Red Green Blue. Rojo Verde Azul. Es un modelo de color basado en la sntesis aditiva, con
el que es posible representar un color mediante la mezcla por adicion de los tres colores de
luz primarios. Es decir, que con la combinacion de estos tres colores, puedes representar una
gran variedad de colores. 14, 34

158
RS232 Recommended Standard 232. Estandar recomendado 232. Designa una norma para el
intercambio de una serie de datos binarios entre dos dispositivos que utilicen este estandar.
30

SDK Software Development Kit. Kit de desarrollo de software. Conjunto de herramientas de


desarrollo de software que le permite al programador crear aplicaciones para un sistema
concreto. VI, 51, 62

SIGGRAPH Special Interest Group on GRAPHics and Interactive Techniques. Es el nombre de


una conferencia anual de graficas computacionales. 8

USB Universal Serial Bus. Bus de Serie Universal. Es un estandar para la conexion de dispositivos,
como teclados, ratones, memorias, controles entre muchos otros. 23, 28, 40, 43, 87, 88, 91, 96

VGA Video Graphics Array. Adaptador Grafico de Video. Se utiliza para denominar a una pantalla
de computadora estandar la resolucion 640 x 480 pxeles. El conector VGA es de 15 contactos.
91

VR Virtual Reality. Su traduccion sera Realidad Virtual. 25, 13, 1921, 31, 33, 40, 43, 146

WQVGA Wide QVGA. Es la resolucion grafica de 400x240 pxeles. 94

159

S-ar putea să vă placă și