Tesis Anterior
Tesis Anterior
POR:
RONALDO ARMANDO CANIZALES TURCIOS
BORIS ENRIQUE FRANCO ZELAYA
ALEJANDRA GUADALUPE MOLINA FLORES
RODOLFO ENRIQUE MONGE CÓRDOVA
SECRETARIA GENERAL
SILVIA ELINOR AZUCENA DE FERNÁNDEZ
LECTOR
ÁNGEL FERNANDO DUARTE NOVOA
ÍNDICE
RESUMEN........................................................................................................................................... i
NOMENCLATURA ........................................................................................................................... x
CAPÍTULO 1. INTRODUCCIÓN...................................................................................................... 1
1.1 Definición del problema............................................................................................................ 1
1.2 Objetivos ................................................................................................................................... 2
1.2.1 Objetivo general ................................................................................................................. 2
1.2.2 Objetivos específicos ......................................................................................................... 2
1.3 Límites y alcances ..................................................................................................................... 3
1.4 Antecedentes ............................................................................................................................. 4
1.4.1 Antecedentes directos......................................................................................................... 4
1.4.2 Antecedentes bibliográficos ............................................................................................... 8
CAPÍTULO 2. MARCO TEÓRICO ................................................................................................. 11
2.1 Tecnología Arduino ................................................................................................................ 11
2.1.1 Hardware de Arduino ....................................................................................................... 11
2.1.2 Software de Arduino ........................................................................................................ 12
2.1.3 Comunicación serial en placas Arduino ........................................................................... 13
2.1.4 Tecnología Bluetooth ....................................................................................................... 14
2.1.4 Bus I2C ............................................................................................................................ 15
2.1.5 Pantalla LCD .................................................................................................................... 16
2.2 Sensor Kinect .......................................................................................................................... 17
2.2.1 Hardware del sensor Kinect ............................................................................................. 18
2.2.2 Kit de desarrollo de software de Kinect para Windows ................................................... 22
2.3 Sensor Leap Motion ................................................................................................................ 24
2.3.1 Estructura externa del sensor Leap Motion ...................................................................... 24
2.3.2 Hardware interno del sensor Leap Motion ....................................................................... 25
2.3.3 Software de Leap Motion ................................................................................................. 26
2.4 Realidad aumentada ................................................................................................................ 31
2.4.1 Aplicaciones de la realidad aumentada ............................................................................ 32
2.5 Visión por computadora .......................................................................................................... 35
2.5.1 Imágenes digitales ............................................................................................................ 36
2.5.2 Open Source Computer Vision Library (OpenCV) .......................................................... 40
2.6 Funcionalidades o herramientas matemáticas de minería de datos ......................................... 40
2.6.1 Modelos de clasificación .................................................................................................. 40
2.6.2 Técnicas de agrupamiento (clustering) ............................................................................. 41
2.6.3 Medición de la precisión de un clasificador ..................................................................... 43
CAPÍTULO 3. METODOLOGÍA Y HERRAMIENTAS ................................................................. 45
3.1 Reunión inicial ........................................................................................................................ 45
3.2 Reunión con el coordinador de la carrera de ingeniería eléctrica............................................ 45
3.3 Comprensión del funcionamiento de los sensores................................................................... 45
3.4 Análisis del hardware y software del brazo robótico original ................................................. 46
3.5 Herramientas del Leap Motion ................................................................................................ 46
3.6 Gestos del Leap Motion .......................................................................................................... 47
3.7 Parámetros utilizados en Hidrología Superficial ..................................................................... 47
3.8 Especificaciones técnicas de la computadora utilizada para el desarrollo de la plataforma de
escritorio ........................................................................................................................................ 48
3.11 Utilización del sensor Kinect desde Windows Forms ........................................................... 51
3.12 Elección del lenguaje de programación y herramientas de software a utilizar ...................... 51
3.13 Cálculo empírico de la latencia en la plataforma de escritorio.............................................. 52
3.14 Cálculo del porcentaje de uso de los servomotores ............................................................... 53
CAPÍTULO 4. ANÁLISIS Y DISEÑO............................................................................................. 55
4.1 Descripción general ................................................................................................................. 55
4.2 Plataforma de escritorio........................................................................................................... 56
4.3 Panel de conexión.................................................................................................................... 57
4.3.1 Inicializar Leap Motion .................................................................................................... 57
4.3.2 Inicializar Kinect .............................................................................................................. 58
4.3.3 Inicializar Módulos Bluetooth .......................................................................................... 60
4.4 Imitación de movimientos en tiempo real ............................................................................... 60
4.4.1 Cálculos realizados con datos provistos por los sensores................................................. 61
4.4.2 Graficación de datos calculados ....................................................................................... 66
4.4.3 Ensamblaje de paquetes de datos que se enviarán al tablero indicador ............................ 67
4.4.4 Tablero indicador ............................................................................................................. 68
4.5 Grabación de movimientos para posterior reproducción ......................................................... 70
4.6 Reproducción de movimientos pre-grabados .......................................................................... 72
4.7 Reconocimiento autónomo de objetos..................................................................................... 73
4.7.1. Diseño y elaboración de figuras (clases del modelo) ...................................................... 74
4.7.2. Obtención de imágenes o fotografías para el conjunto de entrenamiento ....................... 75
4.7.3. Extracción de características del conjunto de entrenamiento .......................................... 77
4.7.4. Generación del modelo clasificador que trabaja en base a la distancia ........................... 81
4.7.5. Generación del modelo clasificador de figuras que trabaja en base al color................... 84
4.7.6. Cálculo de la precisión del clasificador (validación del modelo matemático) ................ 86
CAPÍTULO 5. PRUEBAS Y DEPURACIÓN ................................................................................. 91
5.1 Pruebas de Imitación de movimientos en tiempo real............................................................. 91
5.2 Pruebas de Grabación de secuencias de movimientos ............................................................ 99
5.3 Pruebas de Reconocimiento de objetos ................................................................................. 101
CAPÍTULO 6. CONCLUSIONES Y RECOMENDACIONES ..................................................... 107
6.1 Conclusiones ......................................................................................................................... 107
6.2 Recomendaciones.................................................................................................................. 108
GLOSARIO .................................................................................................................................... 111
REFERENCIAS .............................................................................................................................. 113
ANEXOS
ANEXO A. Código fuente C++: clasificador en base a distancia
ANEXO B. Código fuente C++: clasificador en base a colores
ANEXO C. Código fuente Arduino: control de brazo derecho
ANEXO D. Código fuente Arduino: control de brazo izquierdo
ANEXO E. Código fuente Arduino: control de mano derecha
ANEXO F. Código fuente Arduino: control de mano izquierda
ANEXO G. Pantallas plataforma de escritorio
ANEXO H. Diagramas de circuitos del tablero indicador de ledes
RESUMEN
El dispositivo posee un gran potencial, sin embargo su software se limita a la realización de una
única tarea: la imitación de movimientos en tiempo real. Aquí surge la necesidad de ampliar la
gama de situaciones prácticas en que este puede ser utilizado. El presente trabajo describe
detalladamente el proceso de creación de un nuevo sistema que implementa mayor cantidad de
funcionalidades, desde la etapa de diseño hasta la implementación y realización de pruebas.
Dicho sistema posee los siguientes módulos: imitación de movimientos en tiempo real,
reconocimiento de objetos y además la grabación, depuración y posterior reproducción
de secuencias de movimientos. Para esto se utilizaron dos sensores de realidad aumentada (Kinect
y Leap Motion), además de algoritmos de visión por computadora y de minería de datos.
El contenido del trabajo está estructurado en seis capítulos. En el capítulo 1 se definen los objetivos,
límites y alcances de la investigación. El capítulo 2 contiene todas las premisas necesarias para
comprender el resto del documento (realidad aumentada, sensores ópticos, visión por computadora,
minería de datos y la tecnología Arduino). El capítulo 3 menciona algunas herramientas que fueron
útiles para la elaboración del sistema así como una descripción de las etapas de concepción del
proyecto. El capítulo 4 describe detalladamente cada uno de los componentes que integran el
sistema, así como su funcionamiento teórico. El capítulo 5 muestra dieciocho pruebas realizadas al
sistema, distribuidas en sus distintos componentes con el fin de validar su comportamiento en
escenarios tanto idóneos como reales.
i
ÍNDICE DE FIGURAS
ii
Figura 2.23. Modelo de huesos utilizado por Leap Motion .............................................................. 31
Figura 2.24. Software VitalStream operando a través del dispositivo Google Glass ....................... 32
Figura 2.25. Feto virtual dentro del vientre de una mujer embarazada ............................................. 33
Figura 2.26. Avión virtual generado por el software Fused Reality ................................................. 34
Figura 2.27. Realidad aumentada a través de las consolas................................................................ 34
Figura 2.28. Representación de una imagen digital mediante una matriz de 35x35 ......................... 36
Figura 2.29. Imagen a) original junto con su imagen en b) escala de grises ..................................... 37
Figura 2.30. Ejemplo de una imagen binaria .................................................................................... 37
Figura 2.31. Modelo RGB................................................................................................................. 38
Figura 2.32. Imagen en escala de grises junto con su respectivo histograma ................................... 39
Figura 2.33. Imagen a) en escala de grises b) junto al resultado de su umbralización...................... 40
Figura 2.34. Ejemplo de un árbol de decisión ................................................................................... 41
Figura 2.35. Algoritmo básico de k-means ....................................................................................... 42
Figura 2.36. Clusterización de un conjunto de objetos usando k-means .......................................... 42
Figura 2.37. Ejemplos de matrices de confusión .............................................................................. 44
Figura 3.1. Herramienta interpretada por el sensor Leap Motion ..................................................... 47
Figura 3.2. Gestos que provee el Leap Motion ................................................................................. 47
Figura 3.3. Interfaz gráfica del complemento Rattle. ........................................................................ 49
Figura 3.4. Curva ROC generada utilizando la herramienta Rattle................................................... 49
Figura 3.5. Prototipo que implementa el algoritmo camshift utilizando la cámara a color del sensor
Kinect ................................................................................................................................................ 50
Figura 3.6. Archivo de valores separados por coma ......................................................................... 52
Figura 4.1. Estructura general del sistema. ....................................................................................... 55
Figura 4.2. Estructura general de la plataforma de escritorio ........................................................... 56
Figura 4.3. Diagrama de casos de uso de la plataforma de escritorio ............................................... 57
Figura 4.4. Consulta realizada al WMI ............................................................................................. 60
Figura 4.5. Proceso de imitación en tiempo real ............................................................................... 60
Figura 4.6. a) Vector Hand.Direction, b) vectores Finger.Direction, c) ángulo devuelto por la
operación Vector.AngleTo ................................................................................................................ 61
Figura 4.7. Articulaciones reconocidas por el Kinect v1 .................................................................. 62
Figura 4.8. a) Triángulo oblicuángulo, b) dos puntos en R3, c) triángulo rectángulo ...................... 62
Figura 4.9. Coordenadas de un hombro central, hombro derecho y codo derecho ........................... 64
Figura 4.10. Ángulo de abertura vertical del hombro ....................................................................... 64
Figura 4.11. Ángulo de abertura horizontal del hombro ................................................................... 65
Figura 4.12. Articulaciones interpretadas por la plataforma de escritorio ........................................ 66
iii
Figura 4.13. Huesos de las manos interpretadas por plataforma de escritorio .................................. 67
Figura 4.14. a) Programa esclavo de control del brazo, b) programa maestro de control de los
dedos, c) programa esclavo de control de los dedos ......................................................................... 67
Figura 4.15. Conversión de un flotante a un arreglo (conjunto) de bytes ......................................... 68
Figura 4.16. Interacción plataforma de escritorio y tablero indicador .............................................. 68
Figura 4.17. Estructura base del software de las placas Arduino ...................................................... 69
Figura 4.18. Proceso general de grabación de secuencias de movimientos ...................................... 70
Figura 4.19. Proceso general de reproducción de movimientos pre-grabados .................................. 72
Figura 4.20. Animación generada a partir de archivos de secuencias de movimientos .................... 72
Figura 4.21. Esquema general del proceso de reconocimiento de objetos ........................................ 73
Figura 4.22. Figuras a clasificar en base a su color ........................................................................... 74
Figura 4.23. Figuras utilizadas para la clasificación en base a distancia........................................... 75
Figura 4.24. Fotografías tomadas para entrenar clasificador en base a distancia .............................. 76
Figura 4.25. Fotografías tomadas para entrenar clasificador en base a color .................................... 77
Figura 4.26. Fotografía original a colores, no posee tratamiento alguno .......................................... 78
Figura 4.27. Regiones recortadas de imagen original ....................................................................... 78
Figura 4.28. Imágenes binarizadas utilizando umbral personalizado ................................................ 79
Figura 4.29. Contornos obtenidos a partir de imágenes binarizadas ................................................. 80
Figura 4.30. a) Rectángulo rotado de área mínima, b) envolvente convexa, c) triángulo de área
mínima, d) elipse que asemeja contorno, e) círculo de área mínima que envuelve la figura ........... 81
Figura 4.31. Programa escrito en R que grafica en 3D el conjunto de entrenamiento ...................... 81
Figura 4.32. Implementación de K-means en R ................................................................................ 82
Figura 4.33. Visualización de los clusters generados por K-means .................................................. 82
Figura 4.34. Variables que no caracterizan bien a las figuras ........................................................... 83
Figura 4.35. Variables que caracterizan muy bien cada clase de figuras .......................................... 83
Figura 4.36. Modelo de clasificación de figuras en base a distancia................................................. 84
Figura 4.37. Visualización en tres dimensiones de los datos de entrenamiento correspondientes a
los colores del margen y de las figuras.............................................................................................. 84
Figura 4.38. Componentes de los colores negro, blanco, rojo, verde y azul ..................................... 85
Figura 4.39. Distintas combinaciones de componentes de color ....................................................... 85
Figura 4.40. Modelo de clasificación de colores ............................................................................... 86
Figura 4.41. Modelo de clasificación de figuras en base a color....................................................... 86
Figura 4.42. a) Región denominada marco o fondo de la escena, b) figura que corresponde a la
silueta de un Cuadro grande ............................................................................................................. 88
Figura 5.1. Tomas realizadas a: a) 70 cm, b) 80 cm y c) 1 m............................................................ 91
Figura 5.2. Tomas realizadas a: a) 1.2 m, b) 1.5 m, c) 2 m y d) 2.5 m .............................................. 92
iv
Figura 5.3. Tomas realizadas a: a) 3.5 m, b) 3.75 m y c) 4 m ........................................................... 93
Figura 5.4. Tomas para una y ambas manos realizadas a: a) 10 cm, b) 20 cm ................................. 94
Figura 5.5. Tomas para una y ambas manos realizadas a: a) 30 cm, b) 40 cm ................................. 95
Figura 5.6. Tomas para una y ambas manos realizadas a: a) 50 cm, b) 60 cm ................................. 95
Figura 5.7. Iluminación excesiva frente a: a) sensor Kinect y b) sensor Leap Motion ..................... 96
Figura 5.8. Sensores operando bajo nula iluminación ...................................................................... 97
Figura 5.9. Superposición de objetos ................................................................................................ 98
Figura 5.10. Siluetas reflejadas en espejos........................................................................................ 99
Figura 5.11. Fotografías tomadas con excesiva iluminación .......................................................... 102
Figura 5.12. Fotografías tomadas con iluminación casi nula .......................................................... 103
Figura 5.13. Fotografías tomadas con ninguna figura en escena .................................................... 104
Figura 5.14. a) Imagen homogénea, b) imagen binarizada y c) silueta aleatoria encontrada ......... 104
Figura 5.15. Fotografías con figuras del mismo color de la escena ................................................ 105
Figura 5.16. Fotografías tomadas con iluminación casi nula .......................................................... 105
v
ÍNDICE DE TABLAS
Tabla 2.1. Clasificación de los dispositivos Bluetooth según su potencia y rango de transmisión. .. 15
Tabla 2.2. Datos recolectados por el sensor Leap Motion................................................................. 29
Tabla 3.1. Requisitos mínimos de la computadora a utilizar............................................................. 48
Tabla 3.2. Herramientas de software utilizadas para la realización del proyecto.............................. 51
Tabla 3.3. Especificaciones técnicas servomotores. .......................................................................... 53
Tabla 4.1. Distribución del procesamiento de frames ofrecidos por el Leap Motion. ...................... 58
Tabla 4.2. Distribución del procesamiento de frames ofrecidos por el sensor Kinect. ..................... 59
Tabla 4.3. Rangos de distancia al sensor Kinect. .............................................................................. 66
Tabla 4.4. Estructura de los archivo de secuencias de movimientos. ................................................ 71
Tabla 4.5. Matriz de confusión del clasificador por distancia. .......................................................... 87
Tabla 4.6. Matriz de confusión del clasificador por color. ................................................................ 87
Tabla 4.7. Matriz de confusión del clasificador de colores aplicado a los marcos............................ 88
Tabla 4.8. Matriz de confusión del clasificador de colores aplicado a las figuras. ........................... 89
Tabla 4.9. Precisión de cada clase del clasificador de figuras por distancia. .................................... 89
Tabla 5.1. Formato de registro de realización de pruebas. ................................................................ 91
Tabla 5.2. Registro de la primer prueba realizada. ............................................................................ 92
Tabla 5.3. Registro de la segunda prueba realizada. ......................................................................... 92
Tabla 5.4. Registro de la tercer prueba realizada. ............................................................................. 93
Tabla 5.5. Registro de la cuarta prueba realizada .............................................................................. 94
Tabla 5.6. Registro de la quinta prueba realizada ............................................................................. 94
Tabla 5.7. Registro de la sexta prueba realizada ............................................................................... 95
Tabla 5.8. Registro de la séptima prueba realizada ........................................................................... 96
Tabla 5.9. Registro de la octava prueba realizada ............................................................................. 97
Tabla 5.10. Registro de la novena prueba realizada .......................................................................... 98
Tabla 5.11. Registro de la décima prueba realizada .......................................................................... 99
Tabla 5.12. Registro de la undécima prueba realizada .................................................................... 100
Tabla 5.13. Características de archivos CSV generados durante las pruebas al módulo de grabación
de secuencias de movimientos. ....................................................................................................... 100
Tabla 5.14. Registro de la décimo segunda prueba realizada .......................................................... 100
Tabla 5.15. Registro de la décimo tercer prueba realizada .............................................................. 101
Tabla 5.16. Registro de la décimo cuarta prueba realizada ............................................................. 101
Tabla 5.17. Registro de la décimo quinta prueba realizada ............................................................. 102
vi
Tabla 5.18. Registro de la décimo sexta prueba realizada .............................................................. 103
Tabla 5.19. Registro de la décimo séptima prueba realizada .......................................................... 104
Tabla 5.20. Registro de la décimo octava prueba realizada ............................................................ 105
vii
SIGLAS
3D: Tridimensional
viii
NIR: Near-infrared technology (Tecnología de infrarrojo cercano)
ix
NOMENCLATURA
° grado sexagesimal
µs microsegundo
Bd Baudio
GHz Gigahertz
Kc coeficiente de compacidad
m metro
m3 metro cúbico
mW miliWatt
mm milímetro
nm nanómetro
Rx Recepción
Tx Transmisión
x
CAPÍTULO 1. INTRODUCCIÓN
El dispositivo es capaz de recrear una serie de movimientos que son realizados por una persona.
Para esto se requiere utilizar un sensor Kinect, encargado de la detección de los ángulos y
coordenadas del antebrazo, brazo y bíceps; y un guante con sensores para poder controlar la flexión
y contracción de los dedos de la mano.
Aunque el brazo robot es completamente funcional ya que todos los componentes son capaces de
realizar sus tareas correspondientes; su implementación presenta una serie de inconvenientes que
podrían ser corregidos.
Con el propósito de eliminar el riesgo de desconexión, el guante con sensores será reemplazado por
un dispositivo conocido como Leap Motion, que consiste en un sensor óptico de realidad aumentada
capaz de detectar los movimientos de las manos y de sus correspondientes dedos con un alto nivel
de precisión (hasta una centésima de milímetro). Garantizando que la interacción entre el usuario y
el brazo robot sea completamente inalámbrica.
Además se ha observado una serie de problemas relacionados con el software. El primero de ellos
es que todas las funciones son manejadas a nivel de consola, de modo que carece de una interfaz
1
gráfica que sea amigable con el usuario, aumentando el nivel de complejidad requerido para su
operación y volviendo indispensable que se reciba algún tipo de entrenamiento.
El segundo de los problemas radica en que el brazo únicamente puede ser utilizado en un reducido
número de situaciones prácticas, esto debido a la limitada cantidad de opciones implementadas en el
software de control, de modo que el dispositivo solo es capaz de realizar la imitación en tiempo real
de los movimientos del usuario.
Con el fin de expandir las posibilidades de uso del brazo y que en un futuro pueda ser ocupado en
escenarios de mayor complejidad, se vuelve necesario agregar funcionalidades que estén orientadas
a la realización de tareas autónomas y de otras que involucren la repetición de secuencias de
movimientos.
1.2 Objetivos
Desarrollar un sistema informático basado en realidad aumentada y visión por computadora que
controle, optimice y amplíe las funcionalidades del brazo robótico del Departamento de Electrónica
e Informática de la UCA.
a. Utilizar un sensor de realidad aumentada para detectar los movimientos de ambas manos,
izquierda y derecha, en reemplazo del guante con sensores de flexión originalmente
elaborado.
b. Implementar en el sistema la opción de grabar secuencias de movimientos para que estas
puedan ser reproducidas posteriormente por el brazo robótico.
c. Añadir al sistema la habilidad de clasificar objetos de forma autónoma mediante el uso de
visión por computadora.
2
d. Diseñar una interfaz gráfica de usuario amigable e intuitiva que emplee realidad aumentada
para facilitar la interpretación de los datos.
b. El software de control del brazo fue totalmente rediseñado, esto incluye a la plataforma de
escritorio y a las rutinas integradas en las placas microcontroladoras. Para este fin, se
utilizaron los lenguajes de programación C#, C++ y Arduino. El nuevo software se adaptó a
la estructura del hardware que posee el brazo robótico.
f. Debido a que no se tiene acceso al brazo robótico de la tesis anterior y con la finalidad de
facilitar una futura integración con el sistema, se diseñó, construyó y trabajó con un modelo
físico del dispositivo, que respeta la estructura del hardware original.
3
1.4 Antecedentes
Los antecedentes se han clasificado en dos categorías: directos y bibliográficos. La primera, incluye
una descripción del trabajo de investigación en el que se elaboró el brazo robótico del DEI, a partir
del cual se ha desarrollado la nueva plataforma de software. Mientras que la segunda categoría hace
referencia a proyectos con temáticas similares que han sido diseñados en otras universidades y
centros de investigación.
Consiste en una extremidad superior derecha robótica controlada por medio del reconocimiento de
gestos. Sus piezas se obtuvieron con el proceso de impresión 3D y su estructura está basada en el
diseño del proyecto de código abierto InMoov, diseñado en Francia por Gaël Langevin.
El control del brazo se logra a través del uso de un guante con sensores de flexión (flex sensors) y
un sensor Kinect, el primero está encargado de la detección de los movimientos de los cinco dedos
de la mano, mientras que el segundo se ocupa de rastrear y localizar el posicionamiento del brazo.
Fue elaborado durante el año 2017 por Federico Flamenco, Andrea Marroquín, Jaime Portillo y
Gustavo Rivas como trabajo de graduación para la carrera de ingeniería eléctrica.
El brazo robótico está formado por cinco partes: mano y muñeca, antebrazo, bíceps, hombro, pecho
y espalda; tal como se muestra en la Figura 1.1.
La mano tiene cinco dedos compuestos por tres falanges de dos piezas cada uno. Su interior posee
dos hilos de nylon amarrados a cinco servomotores ubicados en el antebrazo (le corresponde un
motor a cada dedo), simulando así, el funcionamiento de los tendones de una mano humana. Los
dedos pueden realizar los movimientos de contracción y de extensión que si bien son detectados con
mucha precisión, se reproducen a una velocidad lenta. Cabe mencionar que, dicho mecanismo es
capaz de sostener objetos livianos como un teléfono celular (Flamenco et al., 2017, p. 90).
4
D
Figura 1.1. Brazo robótico del DEI y sus partes, a) mano y muñeca, b) antebrazo, c) bíceps, d) hombro,
e) pecho y espalda. Adaptado de Flamenco et al. (2017, p. 27).
La muñeca se conecta con la palma de la mano por medio de una pieza conocida como eje de unión,
que a su vez, se encuentra unida a una base rotacional. Por último, todos estos elementos se colocan
sobre un soporte base, como se aprecia en la Figura 1.2.
Figura 1.2. Mano y muñeca del brazo unidas a la base rotacional y al soporte base.
Tomado de Flamenco et al. (2017, p.36).
El antebrazo (Figura 1.3) se encarga de realizar los movimientos de flexión y extensión utilizando
como eje la articulación del codo. Para esto se emplea un servomotor colocado en el interior de la
parte baja del bíceps.
5
Figura 1.3. Antebrazo del dispositivo. Tomado de Flamenco et al. (2017, pp. 36- 39).
A B
Figura 1.4. Estructura interna del bíceps: a) pistón y b) engranes del codo junto con el perno.
Adaptado de Flamenco et al. (2017, p. 45).
El hombro utiliza como base al pecho y la espalda. Es el encargado de realizar los movimientos de
abducción vertical, flexión, extensión y aducción horizontal utilizando dos servomotores ubicados
en el omóplato, como se muestra en la Figura 1.5.
Figura 1.5. Ubicación de los dos servomotores encargados de los movimientos del hombro.
Adaptado de Flamenco et al. (2017, pp. 49-50).
6
Funcionamiento del brazo robótico
Para controlar los movimientos de la mano se utiliza un guante que en su interior posee cinco
sensores de flexión, uno para cada dedo, como se muestra en la Figura 1.6. Al ser doblados, los
sensores cambian su valor de resistencia eléctrica y una placa microcontroladora de tipo Arduino
Leonardo lee la diferencia de voltaje, para luego enviar esta información de forma inalámbrica
mediante un módulo Bluetooth HC-05 hacia una placa Arduino Mega, que se encarga de mandar
señales hacia los cinco servomotores colocados en el antebrazo, permitiendo que estos giren y halen
de los hilos de nylon para poder ejecutar la contracción y extensión de los dedos.
Figura 1.6. Guante con sensores de flexión. Tomado de Flamenco et al. (2017, p.52).
La detección de los movimientos del hombro y del bíceps se realiza utilizando las cámaras del
dispositivo Kinect. Este sensor se encarga de recolectar datos sobre el posicionamiento del hombro
derecho, codo derecho, mano derecha y torso del usuario. Luego, los datos son enviados a una
computadora para que sean procesados mediante un software diseñado con el lenguaje de
programación Processing.
Por medio de una conexión USB 2.0, la información procesada se envía a una placa Arduino UNO,
que controla los servomotores encargados de los movimientos del hombro y bíceps.
En la Figura 1.7 se incluye un esquema donde se ilustra la forma de comunicación entre los
distintos dispositivos involucrados en el funcionamiento del brazo robótico.
7
Figura 1.7. Esquema de comunicación entre los dispositivos de control del brazo robótico del DEI.
Tomado de Flamenco et al. (2017, p.54).
En años recientes, a nivel internacional se han desarrollado distintos proyectos enfocados al uso de
sensores ópticos para la detección y rastreo del posicionamiento de las extremidades superiores
humanas y el diseño de dispositivos robóticos capaces de recrear sus movimientos. A continuación,
se muestra una descripción de algunos de estos proyectos.
Trabajo elaborado en la “Escola Senai Roberto Simonsen” de São Paulo, Brasil durante el año 2016
por Matheus Da Silva, Nádia Teixeira, Renan Da Fonseca y Stella Freire, estudiantes de un curso
técnico de mecatrónica. Es una investigación multidisciplinaria que involucra las áreas de mecánica,
biomecánica y control (Da Silva et al., 2016, p. 17).
Se diseñó una mano con piezas mecánicas, simulando la estructura anatómica y el funcionamiento
de una mano humana, para que esta fuese capaz de reproducir una serie de movimientos básicos,
por ejemplo, agarrar una pelota o una taza.
8
A B
Se elaboraron una serie de experimentos utilizando un robot industrial modelo Kuka KR 125/3
(Figura 1.9) que empleaba una herramienta de referencia, específicamente un lapicero o reference
pen. El objetivo principal de estas pruebas era poder determinar cómo el uso del dispositivo Leap
9
Motion permitiría mejorar el desarrollo de aplicaciones que requieren interacción entre un humano
y una computadora.
Luego de realizar las pruebas, los investigadores concluyen que el nivel de precisión promedio
logrado por el Leap Motion es de 0.7 mm, que difiere de los 0.01 mm que afirman los fabricantes
(Weichert et al., 2013, p. 6391). No obstante, se aclara que los ensayos se efectuaron usando una
versión preliminar del sensor y que la precisión puede variar para el producto lanzado al mercado
consumidor. Además, se comenta que otros sensores ópticos similares, como el Microsoft Kinect,
no son capaces de lograr estos niveles de precisión en cuanto a la detección de movimientos.
10
CAPÍTULO 2. MARCO TEÓRICO
Arduino ha sido utilizado en miles de proyectos y aplicaciones gracias a que proporciona una
experiencia de usuario simple y accesible. Una de las principales ventajas del software es que
resulta ser de fácil manejo para desarrolladores principiantes y lo suficientemente robusto para
cubrir las necesidades de programadores avanzados (Arduino, 2018a).
Consiste en una placa de circuito impreso que contiene un microcontrolador. A esta placa se le
pueden incorporar diversos componentes, tales como: interruptores, sensores ultrasónicos de
distancia, ledes y motores; de forma que pueda realizar una o varias tareas específicas. Las placas
Arduino son capaces de leer una serie de entradas como la luz en un sensor o un dedo presionando
un botón, para posteriormente convertirlas en salidas, por ejemplo, activar un motor o encender un
led. Schmidt (2011, p. 30) comenta que, por lo general, los microcontroladores integrados son
fabricados por la empresa Atmel, siendo los modelos más utilizados el ATmega328 o el
ATmega168.
Arduino se diferencia de otras tecnologías similares porque implementa el modelo de código abierto
(open-source), de modo que los esquemas de los circuitos son publicados bajo la licencia CC
(Creative Commons). Esto permite que los usuarios diseñen sus propias versiones de las placas e
incluso puedan mejorarlas y expandir sus funcionalidades (Arduino, 2018a).
11
usuarios. Algunas como Arduino UNO o Arduino Leonardo, están diseñadas para un nivel
introductorio o principiante, mientras que otras como Arduino Mega 2560 o Arduino Zero han sido
elaboradas para proyectos más complejos pues poseen funcionalidades avanzadas y un rendimiento
más rápido. Incluso, existen modelos desarrollados para propósitos específicos como el caso del
Arduino LilyPad, que fue creado para incorporar placas microcontroladoras en productos textiles,
de forma que puede utilizarse en la elaboración de camisetas interactivas. Si bien cada placa
presenta diferencias en cuanto a su diseño, todas pueden ser programadas utilizando las mismas
herramientas y librerías de software. Las imágenes de los modelos antes mencionados se pueden
apreciar en la Figura 2.1.
Figura 2.1. Diferentes versiones de placas Arduino disponibles en el mercado. Adaptado de Arduino (2018b).
La comunicación entre el hardware de una placa Arduino y una computadora se efectúa por medio
de un cable USB, esta conexión puede realizarse con diversos propósitos, entre ellos: actualizar el
software de la placa, suministrar energía eléctrica o para cargar un programa que realice una
función específica.
12
(Arduino, 2018c) es posible programar directamente en C++ siempre y cuando las librerías sean
soportadas por el compilador avr-gcc.
Arduino proporciona un IDE para la escritura, edición y carga de código. Este se encuentra basado
en el IDE del lenguaje Processing (que también es open-source). Se encuentra disponible para los
sistemas operativos Windows, Mac OS y GNU/Linux. Alternativamente es posible usar otros
entornos como AVR Studio o el Web Editor disponible en la página oficial de Arduino. La Figura
2.2 muestra el ejemplo de un sketch escrito y compilado en el IDE de Arduino.
13
En el caso de la placa Arduino UNO, existen dos pines digitales: el 0 y el 1. Estos se encuentran
conectados a un circuito integrado (IC) que convierte las señales para que sean compatibles con la
conexión USB. En este caso, el pin 0 es usado para recibir (RX) y el pin 1 es usado para transmitir
(TX). Cabe aclarar que si estos pines son utilizados para comunicación serial, no será posible
usarlos para la entrada y salida (I/O) de señales digitales. En cambio, la placa Arduino Mega posee
tres puertos seriales adicionales: Serial1 en los pines 19(RX) y 18(TX), Serial2 en los pines 17(RX)
y 16(TX), Serial3 en los pines 15(RX) y 14(TX).
La librería SoftwareSerial posee diversos métodos que permiten el acceso a los datos contenidos en
el búfer serial, por ejemplo: Serial.begin(9600) inicia la comunicación serial a una velocidad de
9600 Bd; Serial.available() permite saber cuántos datos se encuentran disponibles dentro del búfer
serial; Serial.read() y Serial.peek() devuelven el primer dato recibido, con la diferencia que el
primero lo elimina de la cola serial, mientras que el segundo no. Además, a través de esta librería es
posible lograr la comunicación serial en otros pines digitales de la placa microcontroladora
Arduino, replicando esta funcionalidad mediante software (Arduino, 2018e).
Su creación estuvo a cargo del Bluetooth Special Interest Group (consorcio formado en 1998 por las
empresas Ericsson, IBM, Intel, Nokia y Toshiba) que también es la autoridad encargada de
establecer sus especificaciones técnicas.
Según Tanenbaum y Wetherhall, fue diseñado con el propósito de eliminar la necesidad de utilizar
cables para la transferencia de información, estableciendo un protocolo que utilice tecnología de
corto alcance, consumo eléctrico reducido y de bajo costo.
Bluetooth opera a una frecuencia de 2.4 GHz que corresponde a la banda ISM, designada para fines
industriales, médicos y científicos (Bluetooth SIG, 2018). Además, dependiendo de la potencia y el
rango de distancia en el que operan los dispositivos, estos pueden clasificarse en tres clases, tal
como se indica en la Tabla 2.1.
14
Tabla 2.1. Clasificación de los dispositivos Bluetooth según su potencia y rango de transmisión.
Adaptado de Wright (s.f.).
Clase del Potencia de Rango óptimo/Alcance
dispositivo transmisión (mW) máximo (m)
Clase 3 1 Menor a 10
Clase 2 2.5 10
Clase 1 100 100
A B
Consiste en un bus en serie diseñado por Phillips a inicios de la década de 1980, para permitir una
comunicación de baja velocidad entre varios circuitos integrados. El protocolo fue estandarizado en
la década de 1990 y otras compañías rápidamente comenzaron a adoptarlo, lanzando sus propios
circuitos compatibles (Blum, 2013, p.164). Esta tecnología también se conoce como Circuito Inter-
Integrado (Inter-Integrated Circuit) o por las siglas I2C o IIC.
De acuerdo a Palacios, Remiro y López (2009, p. 332), el bus serie I2C está formado por dos hilos
que pueden conectar varios dispositivos mediante un hardware muy simple (Figura 2.4). Por esos
dos hilos se produce una comunicación serial, bit a bit. Dos señales son transmitidas, una por cada
línea: la primera es la Serial Clock (SCL), que es la señal de reloj utilizada para la sincronización de
los datos; la segunda es la Serial Data (SDA) que es la línea para la transferencia en serie de los
datos.
15
Figura 2.4. Estructura de un bus I2C. Tomado de Palacios et al. (2009, p. 332).
Los dispositivos conectados al bus I2C mantienen un protocolo de comunicación del tipo
maestro/esclavo (o master/slave). Las diferencias entre las funciones del maestro y del esclavo son:
La línea SDA es bidireccional, es decir, tanto el maestro como los esclavos pueden actuar como
transmisores o receptores de datos, dependiendo de la función del dispositivo. Así, por ejemplo, una
pantalla LCD es solo un receptor de datos mientras que una memoria recibe y transmite datos. La
generación de señales de reloj (SCL) es siempre responsabilidad del maestro.
Las placas Arduino son capaces de comunicarse con dispositivos I2C mediante el uso de librerías
(como LiquidCrystal I2C), que incluye una serie de comandos que permiten la lectura y escritura de
datos que provienen de pantallas LCD a través del protocolo I2C (Brabander, 2015).
En muchos proyectos es necesario visualizar información a través de una pantalla de bajo costo. La
forma más utilizada es mediante un display o pantalla LCD (Figura 2.5).
16
Figura 2.5. Pantalla LCD modelo 1602 I2C.
Las pantallas de cristal líquido o display LCD (Liquid Crystal Display) tienen la capacidad de
mostrar cualquier carácter alfanumérico, permitiendo representar la información generada por un
equipo electrónico de forma fácil y económica. La pantalla consta de una matriz de caracteres
distribuidos en una, dos o cuatro líneas de dieciséis, veinte y hasta cuarenta caracteres en cada línea
(Palacios et al., 2009, p. 187).
El objetivo de Kinect es proporcionar una Interfaz Natural de Usuario (Natural User Interface,
NUI) que permita a una persona interactuar con el sistema o las aplicaciones por medio del
reconocimiento de gestos de las manos, movimientos del cuerpo o comandos de voz; eliminando la
necesidad de utilizar un dispositivo de entrada como un control o un teclado.
Durante sus primeros meses de lanzamiento, el sensor Kinect estaba limitado al desarrollo de
videojuegos para la consola Xbox 360. Sin embargo, en febrero de 2012 Microsoft lanzó al
mercado una nueva versión del hardware y software conocido como Kinect for Windows Version 1
(Kinect V1), destinado al desarrollo de aplicaciones para el sistema operativo Windows (Kinect for
Windows Team, 2012a).
17
Nuevas revisiones del hardware serían lanzadas en años posteriores, la primera conocida como
Kinect for Xbox One, que estaba destinada al desarrollo de aplicaciones compatibles con la consola
de videojuegos de Microsoft más reciente. Su versión análoga para Windows, conocida como
Kinect for Windows Version 2 (Kinect V2), salió al mercado en julio de 2014 (Kinect for Windows
Team, 2014).
El sensor posee la forma de una barra horizontal colocada sobre una base que contiene una serie de
componentes en su interior: una cámara a color, un led de color verde, un emisor de luz infrarroja,
un sensor de profundidad infrarrojo, un motor de inclinación y un arreglo de micrófonos.
La ubicación de estos elementos se muestra en la Figura 2.6.
Figura 2.6. Partes del sensor Kinect. Adaptado de Jana (2012, p. 9).
Kinect se comunica con la computadora mediante un puerto USB 2.0, sin embargo necesita de una
fuente de poder adicional debido a que el puerto USB no es capaz de abastecer el consumo de
energía del dispositivo.
1. Cámara a color
Se encarga de la captura y transmisión de los datos de video en color. Su función es detectar los
colores RGB (rojo, verde y azul) de una imagen fuente. El número de cuadros por segundo
transmitidos por Kinect varía dependiendo de la resolución para el marco de la imagen. Soporta una
18
velocidad de transmisión de datos de 30 cuadros por segundo a una resolución de 640 x 480 pixeles
y una máxima resolución de 1280 x 960 pixeles a una velocidad de 12 cuadros por segundo.
Los rangos de visión para la cámara a color (tomando como punto de inicio el centro del sensor
Kinect) son de 57° para el ángulo horizontal y de 43° para el ángulo vertical, como se puede
apreciar en la Figura 2.7.
Figura 2.7. Ángulos de visión de la cámara del sensor Kinect. Tomado de Jana (2012, p. 10).
Para la detección de la profundidad de los objetos, Kinect cuenta con un emisor de luz encargado de
proyectar una luz infrarroja en forma de un patrón de puntos sobre todos los objetos que se
encuentran dentro del rango de visión (Figura 2.8). Estos puntos, si bien son invisibles para el ojo
humano, pueden ser detectados por el sensor de profundidad, que se encarga de realizar mediciones
sobre las distancias de los objetos respecto al sensor. Esto se calcula en base a la longitud entre el
sensor y la ubicación en donde fue detectado cada punto de luz infrarroja. Todo este proceso es
controlado por el chip PrimeSense (Jana, 2012, pp.11-13).
Figura 2.8. Luz infrarroja proyectada en forma de patrón de puntos. Tomado de Miller (2017).
19
En base a la documentación oficial del equipo de desarrollo Kinect for Windows Team (2012b), el
rango en el que trabaja el sensor de profundidad bajo el modo por defecto (Default Mode) se
encuentra entre 800 mm (0.8 m) y 4000 mm (4 m). Es importante aclarar que el dispositivo es capaz
de detectar objetos fuera de ese intervalo, pero no se garantiza que las coordenadas de las
articulaciones de la persona estén en concordancia con los datos de la realidad. La Figura 2.9
muestra un diagrama que ilustra cómo los rangos de distancia son interpretadas por el sensor
Kinect.
3. Motor de inclinación
El sensor Kinect posee un pequeño motor que le permite cambiar los ángulos de la cámara y del
sensor, además que conecta las partes superior e inferior del dispositivo. El motor está compuesto
por tres engranes que permiten la inclinación dentro de un específico rango de ángulos. Su
estructura puede apreciarse en la Figura 2.10.
Figura 2.10. Estructura interna del motor de inclinación del sensor Kinect.
Tomado de Jana (2012, p.13).
20
El ángulo máximo de inclinación vertical permitido por el motor es de 27° ya sea hacia arriba o
hacia abajo (Figura 2.11). Es importante mencionar que la inclinación del sensor debe manipularse
a través del software, ya que si el usuario intenta modificarla manualmente, el motor podría dañarse.
Figura 2.11. Ángulos de inclinación permitidos por el motor del sensor Kinect.
Tomado de Jana (2012, p.14).
4. Led indicador
Ubicado entre la cámara y el emisor infrarrojo. Se encarga de indicar el estado del sensor Kinect.
El led emite una luz de color verde constante cuando la computadora detecta la conexión con el
dispositivo y cuando todos los controladores o drivers han sido cargados adecuadamente.
Si el dispositivo está conectado físicamente, pero no es reconocido por la computadora, el led emite
una luz verde de forma intermitente (Jana, 2012, p. 15).
5. Arreglo de micrófonos
Conformado por cuatro micrófonos: tres de ellos se ubican en el lado derecho mientras que el
restante se encuentra del lado izquierdo. La Figura 2.12 muestra el posicionamiento de los
micrófonos y la distancia que hay entre cada uno de ellos dentro del dispositivo.
Figura 2.12. Ubicación y distancia de separación de los cuatro micrófonos integrados en el sensor Kinect.
Tomado de Jana (2012, p. 14).
21
Jana (2012, p. 211) menciona que las funciones del arreglo de micrófonos son:
Debido a que los micrófonos están colocados en diferentes posiciones, el sonido será percibido por
cada uno de ellos en distintos intervalos de tiempo. Esto implica que existirá cierto retraso en la
recepción de sonido para cada uno de los micrófonos. Por esta razón, el sensor Kinect es capaz de
comprender de qué dirección proviene el sonido entrante y de calcular la distancia aproximada entre
la fuente del sonido y el dispositivo (Jana, 2012, p. 217).
En la actualidad el software solo posee soporte oficial para el sistema operativo Windows,
específicamente en las versiones de Windows 7 o superiores. Además, el SDK es compatible con
los lenguajes de programación C#, C++ y Visual Basic .NET (Microsoft, 2013).
Desde su primer lanzamiento comercial en febrero de 2012, el SDK ha contado con múltiples
revisiones. La versión más reciente para Kinect V1 corresponde a la 1.8, lanzada el 19 de
septiembre de 2013. Esta se encuentra disponible para su descarga en el sitio web oficial de
Microsoft.
Es posible utilizar el Kinect for Windows SDK para crear aplicaciones compatibles con el Kinect
for Xbox 360. Sin embargo, Catuhe (2012, p.6) menciona que se producirá un mensaje de alerta,
avisando al usuario que Microsoft no garantiza la completa compatibilidad entre este dispositivo y
los programas desarrollados.
Con el objetivo de ayudar a los programadores, Microsoft provee una herramienta conocida como
Kinect Developer Toolkit, que contiene una serie de códigos de ejemplo y documentación sobre las
22
librerías disponibles en la API. En la Figura 2.13 se muestra el entorno del Kinect Developer
Toolikt.
Figura 2.13. Entorno del Kinect for Windows Developer Toolkit v1.8.0.
Tanto el Kinect for Windows Developer Toolkit como el Kinect SDK poseen su propio instalador,
esto, de acuerdo a Jana (2012, p. 23) con el fin de que las actualizaciones del primero, tales como
cambios realizados en los códigos de ejemplo, se efectúen sin la necesidad de realizar
modificaciones sobre el SDK. La Figura 2.14 muestra un esquema general de los componentes que
pertenecen tanto al Developer Toolkit como al Kinect SDK.
Figura 2.14. Componentes del Developer Toolkit y del Kinect for Windows SDK.
Adaptado de Jana (2012, p.23).
23
El SDK de Kinect también instala una herramienta conocida como Kinect Management. Este es un
servicio de Windows que se ejecuta en segundo plano (background) mientras la computadora se
comunica con el sensor Kinect. Algunas de sus funciones son la verificación de cambios en el
estado del dispositivo y el manejo de los componentes de audio mediante la interacción con los
drivers de sonido de la computadora. La Figura 2.15 muestra al Kinect Management dentro de la
lista de servicios de Windows 10.
Figura 2.15. Kinect Management dentro de la lista de servicios de Microsoft Windows 10.
El sensor tiene una forma rectangular, cuyas dimensiones son de 7.5 cm de largo, 3 cm de ancho y
un grosor de 1cm. Posee un led de color verde, que sirve como punto de referencia para el
posicionamiento del dispositivo. Dispone de un puerto USB 3.0 tipo micro-B en donde se conecta
un cable que establece la conexión con una computadora. Además, el sensor Leap Motion posee dos
superficies: una superior donde se ubican las cámaras y sensores encargados de la detección de los
movimientos del usuario y una inferior, donde está su logo en bajo relieve.
La Figura 2.16 muestra la imagen de un sensor Leap Motion donde se pueden apreciar su parte
superior, led indicador y cable USB.
24
Figura 2.16. Estructura externa del sensor Leap Motion.
Desde el punto de vista del hardware el sensor posee un diseño simple, compuesto por tres ledes y
dos cámaras monocromáticas como se muestra en la Figura 2.17. Al igual que el sensor Kinect, el
Leap Motion implementa la tecnología infrarroja.
Figura 2.17. a) Estructura interna del sensor Leap Motion y b) un esquema de sus componentes.
Adaptado de Weichert et al. (2013, p. 6382).
Colgan (2013) comenta que los ledes se encargan de iluminar la zona de interacción utilizando luz
infrarroja con una longitud de onda de 850 nm. Las cámaras son las encargadas de capturar las
imágenes de los objetos que reflejan la luz infrarroja emitida por los ledes y son capaces de generar
desde 20 hasta 200 cuadros por segundo dependiendo de las configuraciones del usuario y de la
capacidad de procesamiento de la computadora. Las imágenes obtenidas son enviadas a una
computadora por medio de un cable USB, en donde son analizadas por el software del sensor Leap
Motion.
El área de interacción o zona de cobertura 3D que provee el sensor tiene una dimensión de
aproximadamente 0.23 m3 distribuida de la siguiente forma: 61 cm de alto (sobre las cámaras y
25
ledes del sensor), 61 cm de ancho a cada uno de los lados (formando un ángulo de 150°) y una
profundidad de 61 cm a cada lado (con un ángulo de 120°). Como resultado de la intersección de
los campos de visión de las cámaras infrarrojas, el área posee la forma de una pirámide invertida,
tal como se puede apreciar en la Figura 2.18.
Figura 2.18. Dimensiones del área de interacción 3D que ofrece el sensor Leap Motion.
Adaptada de Colgan (2013).
Según la documentación oficial de Leap Motion Inc. (s.f.a) el software se ejecuta como un servicio
en el sistema operativo Microsoft Windows o como un demonio en Mac OS y en GNU/Linux. Las
aplicaciones compatibles acceden a este servicio o demonio para la obtención de los datos enviados
por el sensor.
Existen dos versiones del SDK del sensor Leap Motion con soporte oficial, estas son el Leap
Motion V2 (conocido como V2 Software) y el Leap Motion Orion. Ambas trabajan utilizando el
mismo hardware, la diferencia radica en que Orion está diseñado específicamente para el desarrollo
de aplicaciones de realidad virtual y presenta mayor precisión, distancia, velocidad y menor latencia
en la detección de movimientos si se compara con V2 (Feltham, 2016). Sin embargo, para
26
desarrollar aplicaciones en Mac OS, GNU/Linux o que requieran de rastreo de objetos (object
tracking) se vuelve necesario utilizar el V2 Software (Leap Motion Inc., 2017).
El software de Leap Motion actualmente posee librerías compatibles con los lenguajes de
programación C++, C#, Objective-C, Java, Python, JavaScript, Leap C (solo para Orion) y con los
motores de juego Unreal Engine y Unity (Leap Motion Inc., s.f.b).
El SDK de Leap Motion provee dos versiones de la API, la primera es la Interfaz de Aplicación
Nativa (Native Aplication Interface) utilizada para el desarrollo de aplicaciones de escritorio,
mientras que la segunda es la Interfaz WebSocket (WebSocket Interface) empleada para la creación
de programas que implementen tecnologías web.
La interfaz de aplicación nativa consiste en una biblioteca dinámica que permite la comunicación
entre la aplicación de escritorio desarrollada por el usuario y el servicio Leap Motion. Su estructura
se encuentra ilustrada en la Figura 2.19.
Mecanismo de comunicación entre los componentes del software del Leap Motion:
1- El sensor transfiere todos los datos recolectados al servicio Leap Motion (Leap Service)
por medio del puerto USB. Luego la información es procesada y enviada a los programas o
aplicaciones compatibles.
27
2- El servicio Leap Motion lee los ajustes de configuración establecidos por el usuario dentro
de la Leap Settings App, que es una aplicación independiente al servicio y se encuentra
disponible dentro del Panel de control de Leap Motion.
3- Las aplicaciones compatibles que se encuentran en primer plano (foreground) reciben los
datos del servicio Leap Motion.
4- Cuando una aplicación pasa a ejecutarse en segundo plano (background) automáticamente
deja de recibir datos, sin embargo, el usuario puede cambiar esta configuración y solicitar
que cierta aplicación reciba siempre datos del servicio.
Como se especifica en la documentación oficial de la API (Leap Motion Inc., s.f.c), el sensor Leap
Motion utiliza un sistema de coordenadas cartesianas diestro para poder determinar la ubicación de
los objetos en el espacio. Su origen está centrado en la parte superior del sensor (Figura 2.20).
Figura 2.20. Sistema de coordenadas 3D del sensor Leap Motion. Tomado de Leap Motion Inc. (s.f.c).
Para una correcta implementación de este sistema de coordenadas, el sensor debe colocarse en
posición estándar o normal, es decir, aquella en la cual el usuario se encuentra frente al led de color
verde (eje “z” positivo) y la computadora está en el lado opuesto (eje “z” negativo). El eje “y” es
vertical, con valores positivos hacia arriba, mientras que el eje “x” se encuentra sobre el plano
horizontal, paralelo al borde largo del sensor y posee valores positivos hacia la derecha del usuario.
El software del sensor es incapaz de detectar gestos u objetos si es colocado de lado o si las cámaras
están posicionadas hacia abajo. Dentro de la configuración, es posible ajustar el sistema de
coordenadas en caso que el usuario se encuentre en posición opuesta al led verde.
28
3. Datos recolectados por la API de Leap Motion
Las cantidades físicas que son registradas por el software del sensor Leap Motion se muestran en la
Tabla 2.2.
La API de Leap Motion contiene diversas clases que se utilizan en el desarrollo de aplicaciones.
Algunas de las más importantes son: Frame (Cuadro), Hand (Mano), Finger (Dedo) y Bone
(Hueso).
El sensor Leap Motion rastrea manos, dedos y herramientas dentro de su campo de visión. Estos
datos están contenidos en los atributos de la clase Frame. De acuerdo a la documentación oficial,
dicha clase es esencialmente la raíz del modelo de datos de Leap Motion.
Las manos son representadas mediante la clase Hand, que registra información sobre la posición,
los dedos y el brazo de cada mano detectada. El software utiliza un modelo interno de la mano
humana para proveer seguimiento predictivo incluso cuando algunas partes de una mano no pueden
ser vistas. Los objetos de la clase Hand proporcionan la posición de los cinco dedos, no obstante el
seguimiento es óptimo cuando la silueta de una mano y todos sus dedos son claramente visibles.
Para garantizar una calidad óptima en el seguimiento de datos, se recomienda que no aparezcan más
de dos manos u objetos similares dentro del campo de visión del sensor. La orientación de la mano
es definida por los vectores PalmNormal y Direction (Figura 2.21).
29
B
A
B
Figura 2.21. Representación visual de los vectores a) PalmNormal y b) Direction de la API de Leap Motion.
Adaptado de Leap Motion Inc. (s.f.c).
El sensor Leap Motion registra información sobre cada dedo en la clase Finger. Si todo un dedo o
una parte de él no son visibles, sus características son estimadas. Cada dedo es identificado
mediante su nombre correspondiente en inglés: thumb (pulgar), index (índice), middle (medio), ring
(anular) y pinky (meñique).
Cada objeto de la clase Finger posee un atributo denominado TipPosition, que contiene las
coordenadas de la punta del dedo al que representa. Además, se proporciona el vector Direction,
que apunta en la dirección de dicho dedo. Una representación gráfica de TipPosition y de Direction
puede apreciarse en la Figura 2.22.
Figura 2.22. Representación visual de los vectores Tip Position y Direction de la API de Leap Motion.
Tomado de Leap Motion Inc. (s.f.c).
La clase Bone describe la posición y orientación de los huesos de cada dedo. Según el modelo que
utiliza Leap Motion, cada dedo contiene cuatro huesos, desde la base hasta la punta. El software
trabaja con un esquema basado en la estructura anatómica de la mano humana (Figura 2.23). Es
importante destacar que el modelo utilizado para el dedo pulgar no coincide con el sistema de
nombres anatómico estándar, esto es debido a que, para facilitar la programación, el modelo del
pulgar del sensor Leap Motion incluye un hueso metacarpiano de longitud cero, de forma que el
número de huesos sea igual para todos los dedos. Esto implica que el metacarpiano anatómico del
30
pulgar es identificado como un falange proximal y el falange proximal anatómico es identificado
como un falange medio.
Azuma (1997, p. 2) comenta que la AR es una variante de la realidad virtual. Si bien, ambos
términos están relacionados, existe una diferencia principal entre estas tecnologías. La realidad
virtual coloca al usuario en un ambiente generado por una computadora, es decir, totalmente
sintético y mientras se encuentre inmerso dentro de él, no puede visualizar el verdadero mundo que
lo rodea. En contraste, la realidad aumentada permite que el usuario pueda ver objetos virtuales
superpuestos sobre el mundo físico, haciendo parecer que estos coexisten en el mismo espacio que
los objetos reales. De esta forma, la realidad se ve complementada en vez de ser reemplazada
completamente.
Muchas personas asocian la combinación de elementos reales y virtuales con el uso de efectos
especiales de producciones cinematográficas como Jurassic Park. No obstante, a pesar de que las
técnicas de gráficos por computadora usadas en las películas pueden ser aplicadas dentro de la
realidad aumentada, hace falta la existencia de un componente crucial: la interactividad. Por esta
31
razón, para evitar este tipo de confusiones, Azuma menciona que un sistema que implementa la
realidad aumentada debe cumplir con las siguientes características:
Schmalstieg y Höllerer (2016, p. 3) aclaran que la AR no se limita a medios visuales, ya que puede
ser aplicada al resto de sentidos humanos como el oído, tacto, gusto y olfato; aunque resultan ser
más difíciles de implementar.
En el campo de la salud, la realidad aumentada se utiliza como una herramienta que ayuda a los
cirujanos en tareas de visualización médica, permitiendo obtener información 3D empleando
sensores no invasivos, como los de resonancia magnética, tomografía axial computarizada o
ultrasonografía; permitiendo que el doctor tenga una visión interna del paciente en tiempo real sin
necesidad de realizar incisiones largas (Azuma, 1997, p. 3). Un ejemplo, es el software VitalStream
(figura 2.24), que provee información médica como los signos vitales o imágenes radiográficas
dentro del campo de visión del doctor y es compatible con gafas de realidad aumentada como
Google Glass o los R7 Smart Glasses (Aukstakalnis, 2017, p. 274).
Figura 2.24. Software VitalStream operando a través del dispositivo Google Glass.
Tomado de Aukstakalnis, (2017, p. 274).
32
La tecnología puede ser capaz de identificar órganos y ubicaciones específicas dentro del cuerpo
humano. Existen proyectos que han investigado esta área, como el caso de la Universidad de
Carolina del Norte en Chapel Hill, donde se han conducido experimentos en los que se realizaron
escaneos del vientre de una mujer embarazada utilizando un sensor de ultrasonidos para generar una
representación tridimensional del feto dentro del vientre, que es visualizada mediante unas gafas de
realidad aumentada (figura 2.25).
Figura 2.25. Feto virtual dentro del vientre de una mujer embarazada. Tomado de Azuma (1997, p.4).
Aukstakalnis (2017, p. 280) comenta que otras aplicaciones se pueden encontrar en la industria de
la aviación. La realidad aumentada ha sido utilizada en el desarrollo de software de entrenamiento
para pilotos. Un ejemplo es el simulador Fused Reality, diseñado por la NASA y la empresa System
Technology Inc. Este programa permite realizar misiones en las que al usuario se le presenta una
escena real donde se muestra el interior de la cabina y el mundo exterior, combinando imágenes de
objetos generados por computadora. Esto facilita a los pilotos la realización de sus prácticas de
vuelo sin los riesgo de los métodos de entrenamiento tradicionales, de este modo, si se da una
colisión con un avión virtual, simplemente se deberá reiniciar la aplicación para poder comenzar de
nuevo.
La Figura 2.26 muestra cómo Fused Reality añade un avión virtual generado por computadora a una
escena real del mundo exterior. Tanto la cabina como el paisaje del fondo son objetos verdaderos.
33
Figura 2.26. Avión virtual generado por el software Fused Reality. Tomado de Aukstakalnis (2017, p. 282).
Dentro de la industria del entretenimiento, uno de los usos más populares de la realidad aumentada
ha sido en el mercado de los videojuegos. Empresas como Nintendo y Sony han lanzado
aplicaciones interactivas para sus consolas portátiles, Nintendo 3DS (Figura 2.27a) y PlayStation
Vita (Figura 2.27b), que permiten ver personajes y objetos 3D virtuales dentro del mundo real a
través de la pantalla del dispositivo. Para ello únicamente se requiere que el usuario apunte la
cámara de la consola hacia una serie de cartas o tarjetas de realidad virtual.
Figura 2.27. Realidad aumentada a través de las consolas a) Nintendo 3DS y b) PlayStation Vita.
Adaptado de Nintendo (2018) y Hollister (2012).
34
Otros videojuegos basados en realidad aumentada han sido lanzados para plataformas como
celulares y tabletas. Unos de los más populares son Ingress y Pokemon Go, desarrollados por la
empresa Niantic. Los mundos virtuales de ambos videojuegos están directamente basados en
ubicaciones del mundo real y requieren que el usuario se desplace dentro de los espacios públicos
de las ciudades para poder cumplir con una serie de objetivos. Además, permiten la interacción con
una serie de personajes y localidades completamente digitales a través de la cámara del dispositivo
móvil (Graglia, 2016).
Según Huang (1996) desde un enfoque biológico, la visión por computadora pretende desarrollar
modelos computacionales basados en el sistema visual humano. Mientras que desde el punto de
vista de la ingeniería, el objetivo es la elaboración de sistemas autónomos capaces de realizar (y en
muchos casos superar) las funciones correspondientes a la visión humana.
Szeliski menciona que algunas de las aplicaciones modernas de la visión por computadora son las
siguientes:
35
2.5.1 Imágenes digitales
Las imágenes son el elemento central dentro de la visión por computadora. Consisten en una
representación visual de una escena del mundo tridimensional. Una imagen se define como una
matriz o vector de dos dimensiones conformada por una serie de elementos conocidos como píxeles
(picture element). Cada uno de ellos contiene el nivel de iluminación o el color de un punto en la
escena (Alegre, Pajares y De la Escalera, 2016, pp. 11-12). De esta forma, una imagen con una
resolución de 35 x 35 es una matriz que contiene 35 columnas y 35 filas, dando un total de 1255
elementos o píxeles, como se puede apreciar en la Figura 2.28.
Figura 2.28. Representación de una imagen digital mediante una matriz de 35x35.
Adaptado de Pesco y Bortolossi (s.f.).
Los valores que contiene cada píxel representan desde niveles oscuros de luminosidad hasta valores
claros. El valor más bajo del intervalo es el nivel más oscuro y viene representado por el color
negro mientras que el nivel más claro corresponde al color blanco y es el valor más alto.
Cada píxel de una imagen digital contiene información del brillo de una escena. Estos valores son
continuos pero es necesario representarlos discretamente usando valores digitales. Si una imagen se
representa utilizando b bits, se tiene un total de 2b valores para los niveles de brillo de cada píxel,
los cuales pertenecen a un rango que va desde 0 hasta 2b – 1 (Nixon y Aguado, 2012, p. 38).
36
2. Imágenes en escala de grises
Un formato de imagen digital comúnmente utilizado es el de b= 8 bits. Este formato provee niveles
de brillo que van desde 0 hasta 255 que usualmente corresponden a los colores negro y blanco
respectivamente, mientras que las tonalidades de grises toman los valores intermedios, de forma
que se tiene un total de 256 valores que se le pueden asignar a cada elemento de la matriz de una
imagen (Nixon y Aguado, 2012, p. 38). La Figura 2.29 muestra una imagen a color junto con su
correspondiente imagen a escala de grises.
3. Imágenes binarias
Son aquellas en las que solo existen dos valores para sus pixeles, generalmente el número 0
corresponde al color negro y el 1 corresponde al blanco, por esta razón son conocidas también como
imágenes a blanco y negro. Dawson-Howe (2014, p.49) comenta que estas imágenes se obtienen
mediante un proceso conocido como umbralización. Es importante no confundirlas con las
imágenes a escala de grises, anteriormente descritas. Un ejemplo de imagen binaria se presenta en
la Figura 2.30 donde se aprecia que el objeto (un triángulo) es de color negro, mientras que el fondo
es de color blanco.
37
4. Imágenes a color
Requieren de la utilización de múltiples canales para representar la información de color. Esto las
vuelve más complejas que las imágenes en escala de grises, ya que estas últimas utilizan un solo
canal, por eso se dicen que son monocromáticas (Dawson-Howe, 2014, p.13).
Aunque el color es una característica muy importante que define a los objetos del mundo real, es un
parámetro al que no se le prestó mucha atención dentro de la visión por computadora sino hasta
hace poco tiempo. Esto debido a la memoria requerida para procesar este tipo de imágenes (como
citan Alegre et al, 2016, p.50).
Existen múltiples métodos para la representación visual de color en imágenes digitales, uno de ellos
es el modelo RGB (Red, Green, Blue) que utiliza tres componentes o colores primarios: rojo, verde
y azul. De esta forma, dentro de la matriz que corresponde a una imagen digital, para poder
representar color mediante RGB, cada píxel contiene información sobre la intensidad del brillo de
cada una de las tres componentes, los cuales toman valores que van desde 0 hasta 255 (si se trabaja
con 8 bits), de modo que hay un total de 16.8 millones de colores (256 x 256 x 256) que pueden ser
representados mediante este modelo (Dawson-Howe, 2014, p.14-16).
En la Figura 2.31 se puede apreciar una imagen a color que es descompuesta en tres imágenes
diferentes, cada una corresponde a los tres canales del modelo RGB.
Figura 2.31. Modelo RGB: descomposición de una imagen en sus tres canales.
38
5. Histograma de una imagen
Los píxeles de una imagen en escala de grises poseen valores que van desde 0 hasta 255. El
histograma de la imagen es el gráfico obtenido de la representación de la frecuencia de aparición de
cada uno de esos valores. Tomando en cuenta que el color negro es representado por 0 y el blanco
por el 255, el histograma muestra desde los píxeles oscuros hasta los claros. En la Figura 2.32 se
presenta una imagen en escala de grises junto con su respectivo histograma.
Una imagen binaria se obtiene a partir de una imagen en escala de grises por medio del proceso
conocido como umbralización (thresholding). Sea I la imagen original e I’ su imagen umbralizada,
U el valor de intensidad establecido como umbral, cada nuevo pixel I’(i,j) se obtiene mediante el
siguiente algoritmo (Dawson-Howe, 2014, p. 49):
En este proceso, se seleccionan píxeles que poseen un valor particular o que se encuentran dentro de
un rango especificado. De esta forma, se les asigna el color blanco a todos los píxeles que sean
iguales o que se encuentran sobre el umbral y el color negro a aquellos que tienen valores por
debajo del umbral especificado. Generalmente se utiliza la umbralización para separar a un objeto
de interés de su fondo, esto se muestra en la Figura 2.33.
39
Figura 2.33. Imagen a) en escala de grises b) junto al resultado de su umbralización utilizando U = 145.
OpenCV es una librería de software utilizada dentro de las áreas de visión por computadora y de
aprendizaje de máquina (machine learning). A pesar de estar desarrollada nativamente en el
lenguaje de programación C++ posee implementaciones para Python, Java y MATLAB y se
encuentra disponible para los sistemas operativos Windows, Mac OS, GNU/Linux y Android
(OpenCV team, 2018).
Algunas de las actividades en las que la librería OpenCV ha sido implementada incluyen: detección
de intrusos en labores de videovigilancia, ayuda a robots en la navegación y recolección de objetos
en almacenes, arte interactivo y la inspección de etiquetas en productos de fábricas.
De acuerdo a Han y Kamber (2006, p. 21) las tareas de minerías de datos pueden ser clasificadas en
dos categorías: descripción y predicción. Las tareas de descripción caracterizan las propiedades de
los datos de una base de datos. Las tareas predictivas realizan inferencias en los datos actuales con
la finalidad de hacer predicciones.
40
Desde el punto de vista de los ejemplos, el conjunto de aprendizaje debe poseer las siguientes
características: ser significativo, debe haber un número suficiente de ejemplos y ser representativo,
es decir que las muestras deberán ser diversas. Si un conjunto de aprendizaje tiene muchos más
ejemplos de un tipo que del resto, el clasificador se especializará en dicho subconjunto de datos y
no será de aplicación general. Es importante que todas las clases estén suficientemente
representadas en el conjunto de aprendizaje (Isasi y Galván, 2004, p. 10).
El modelo resultante puede ser representado en varias formas, por ejemplo, mediante reglas de
clasificación, árboles de decisión, fórmulas matemáticas o redes de neuronas artificiales.
Un árbol de decisión es un flujograma que sigue la estructura de un árbol, donde cada nodo denota
la comparación de la variable, cada rama representa un resultado de dicha comparación y las hojas
representan clases o distribuciones de ellas. Cabe mencionar que los árboles de decisión pueden ser
convertidos fácilmente a reglas de clasificación. La Figura 2.34 muestra el ejemplo de un árbol de
decisión generado con una herramienta de software conocida como Rattle, compatible con el
lenguaje de programación R.
Figura 2.34. Ejemplo de un árbol de decisión generado con la herramienta Rattle del lenguaje R.
Contrario a los modelos de clasificación que analizan las etiquetas de clases de objetos, el clustering
analiza los datos del objeto sin consultar etiquetas de clase. En general, las etiquetas de clase no
están presenten en los datos de entrenamiento, simplemente porque éstos no se conocen a priori. El
clustering puede ser utilizado para generar dichas etiquetas de clase. Los objetos son agrupados
basándose en el principio de maximizar la similitud intra-clase y minimizar la similitud inter-clase.
41
Los clusters se forman de manera que los objetos dentro de un mismo cluster tengan alta similitud
entre ellos, mientras que son muy distintos de aquellos objetos que se encuentre en otros clusters.
Cada cluster está diseñado para ser interpretado como una clase (Han y Kamber, 2006, pp. 25-26).
El método tiene una fase de entrenamiento (Figura 2.36), que puede ser lenta dependiendo del
número de objetos a clasificar y de la dimensión del problema. Pero una vez terminado el
entrenamiento, la clasificación de nuevos datos es muy rápida, gracias a que la comparación de
distancias se realiza sólo con los prototipos o centros (Isasi y Galván, 2004, p. 206).
42
Según Witten y Frank (2005, pp. 187 – 188), los clusters finales son bastante sensibles a los centros
iniciales, esto implica que pequeñas variaciones pueden producir resultados completamente
diferentes. De hecho, esto es cierto en la práctica para todas las técnicas de clustering: es
prácticamente imposible encontrar clusters óptimos globales. Esto se debe a que el mínimo
encontrado es uno local y no hay garantía de que ese sea el mínimo global.
Cuando se conoce desde un inicio la etiqueta de clase de cada dato del conjunto de entrenamiento,
entonces se dice que el proceso de aprendizaje del clasificador es supervisado (ya que se sabe a qué
clase pertenece cada objeto). Lo contrario sucede con el aprendizaje no supervisado (o clustering)
donde las etiquetas de clase son desconocidas y tampoco se sabe la cantidad de clases existentes
(Han y Kamber, 2006, pp. 286-287).
Usar el conjunto de datos de entrenamiento para crear un clasificador y luego estimar la precisión
del modelo resultante puede resultar en estimaciones demasiado optimistas y erróneas, porque se
estaría probando el modelo con muestras que ya han sido visualizadas. Por el contrario, la precisión
debe ser medida en un conjunto de datos que contiene etiquetas de clase que no han sido usadas
para entrenar el modelo. La precisión del clasificador dado dicho conjunto de datos es el porcentaje
de objetos que fueron clasificados correctamente por el clasificador (Han y Kamber, 2006, p. 360).
La matriz de confusión es una herramienta útil para analizar qué tan efectivo es el proceso de
clasificación. Dada M clases, la matriz de confusión es una tabla de dimensiones de M columnas
por M filas donde se colocan, para cada clase, los objetos que han sido clasificados correcta e
incorrectamente. En un clasificador que tenga buena precisión, idealmente, la mayoría de los
objetos estaría representado a lo largo de la diagonal principal de la matriz de confusión, mientras
que el resto de las casillas debería ser cero o un valor cercano a cero. La Figura 2.37 muestra tres
ejemplos de matrices de confusión generadas con Microsoft Excel (2.37a), el lenguaje de
programación R (Figura 2.37b) y el software Neural Designer (Figura 2.37c).
43
Figura 2.37. Ejemplos de matrices de confusión generadas con a) Microsoft Excel,
b) Lenguaje de programación R y c) Neural Designer.
44
CAPÍTULO 3. METODOLOGÍA Y HERRAMIENTAS
Se realiza una descripción de las distintas etapas o fases que conformaron el desarrollo del proyecto.
Asimismo, se presentan herramientas que se usaron para llevar a cabo el proyecto y otras que
solamente se investigaron pero no fueron implementadas en el producto final debido a que estaban
fuera de los objetivos del mismo.
Se notificó que no se tendría acceso al brazo del trabajo de graduación precedente, pues para marzo
de 2018 este no estaba funcionando, además que sería utilizado por otro grupo de tesis durante todo
el tiempo de desarrollo del presente proyecto. De este modo, el hardware original sería respetado,
siendo la única modificación el reemplazo del guante con sensores de flexión por el sensor Leap
Motion. El proyecto se desarrollaría en base a un modelo físico del brazo, ocupando un tablero
indicador compuesto por ledes. Además, se dio autorización para poder utilizar el sensor Kinect for
Windows V1, propiedad del DEI.
Debido a que se trabajó con dos sensores ópticos de realidad aumentada (Kinect for Windows V1 y
Leap Motion) que poseen tecnologías diferentes y que son usados para propósitos distintos.
Se estudió detalladamente las especificaciones técnicas de ambos dispositivos, tomando en cuenta
45
las limitantes que estos presentan. Además, se analizó la forma en que estos operan a nivel de
software, para ello, fue necesario realizar la consulta de la documentación oficial, de libros
electrónicos y se revisaron múltiples tutoriales disponibles en internet.
El documento de tesis y todos los archivos de código fuente del brazo robótico fueron revisados
detenidamente. Se estudiaron todos los componentes involucrados en el proceso de control de la
extremidad robótica, haciendo especial énfasis en el modo en que estos se comunican.
La API del sensor Leap Motion provee soporte para la detección de herramientas (Figura 3.1).
Se describe como herramienta todo objeto que sea cilíndrico, más largo y más delgado que un dedo.
Se logró implementar esta funcionalidad en un prototipo aislado, pero no se incluyó en la
plataforma de escritorio final debido que, la interacción con herramientas no está contemplada
dentro de ningún objetivo del sistema.
46
Figura 3.1. Herramienta interpretada por el sensor Leap Motion.
Tomado de (Leap Motion Inc., s.f.g).
Otra característica que presenta el sensor Leap Motion es el reconocimiento de gestos, como los que
se presentan en la Figura 3.2. También se logró implementar esta funcionalidad en un prototipo
aislado, pero no se incluyó en la plataforma de escritorio final debido a que, el diseño de la
extremidad superior original carece de los grados de libertad suficientes para poder emular algunos
de ellos.
A
C
Figura 3.2. Gestos que provee el Leap Motion: a) dibujar un círculo, b) movimiento lineal de
un dedo, c) presionar una tecla imaginaria. Adaptado de (Leap Motion Inc., s.f.h).
Durante la realización de los modelos clasificadores de figuras (tanto en base a distancia como en
base a color) se tomó en cuenta ciertos coeficientes que se ocupan para estimar la forma de cuencas
hidrológicas. Según Breña y Jacobo (2006, p. 37), el coeficiente de compacidad Kc: es la relación
entre el perímetro de la cuenca y la circunferencia del círculo que tenga la misma superficie. Es
decir, que se puede saber qué tan compacta o cuadrada es una figura mediante la Ecuación 3.1.
47
(Ec. 3.1)
Otro ejemplo es la relación de circularidad Rci: es el cociente entre el área de la cuenca y el área
del círculo cuya circunferencia es equivalente al perímetro de dicha cuenca. Es decir que se puede
saber qué tan circular es una figura si se calcula la Ecuación 3.2.
(Ec. 3.2)
Estos coeficientes fueron calculados para cada figura de los conjuntos de entrenamiento de ambos
clasificadores, lastimosamente no ofrecieron resultados contundentes. En otras palabras, no
caracterizaban bien las clases y arrojaban valores cercanos inclusive en objetos de distintas clases.
Por eso se decidió no utilizarlos en el modelo final de los clasificadores.
La computadora en donde se desee instalar el sistema debe cumplir con ciertos requisitos mínimos,
detallados en la Tabla 3.1.
Es importante mencionar que los sensores de realidad aumentada no deberán ser conectados a la
computadora mediante un hub USB. Esto debido a que el sensor Leap Motion podría no recibir la
suficiente cantidad de energía o ancho de banda para poder funcionar correctamente (Edwin, 2018).
48
3.9 Herramienta de minería de datos Rattle
Una valiosa herramienta de minería de datos es el lenguaje de programación R. Con ella es posible
realizar una amplia gama de algoritmos matemáticos. Existe un complemento gratuito para R
llamado Rattle (Figura 3.3) que permite generar modelos de clasificación tales como: árboles de
decisión, bosques de decisión, máquinas de soporte vectorial, redes de neuronas artificiales, etc.
Además, Rattle es capaz de realizar diferentes algoritmos para evaluar los modelos de clasificación
generados, por ejemplo: matrices de confusión (también conocidas como matrices de errores),
curvas de costo, curvas ROC, entre otros. No obstante dicha herramienta está diseñada para trabajar
con volúmenes grandes de datos, se logró implementar algunos árboles de decisión y sus
correspondientes curvas ROC para validarlos (Figura 3.4).
49
Finalmente se decidió prescindir de dichos árboles de decisión por presentar el inconveniente de no
separar las características de las clases de manera óptima, es decir, los algoritmos que implementa
Rattle funcionan de mejor manera con conjuntos de entrenamiento más representativos (con mayor
cantidad de muestras) que los utilizados en el proyecto. Por eso se decidió crear árboles de decisión
manualmente utilizando el software Microsoft Excel.
Dicho curso tiene una duración de siete semanas, se imparte de manera gratuita y abarca temas
como: cámaras digitales, la biblioteca OpenCV, imágenes digitales, espacios de color, reducción de
ruido, realce y detección de bordes, detección de movimiento, umbralización, reconocimiento de
patrones, entre otros.
Es importante mencionar que en dicho curso se trata el tema del seguimiento de objetos en
secuencias de imágenes, específicamente el algoritmo conocido como camshift. Dicho algoritmo se
logró implementar exitosamente junto con la cámara a color del sensor Kinect, como se muestra en
la Figura 3.5, sin embargo no se incluyó en la plataforma de escritorio final debido a que no era de
utilidad para los objetivos del sistema.
Figura 3.5. Prototipo que implementa el algoritmo camshift utilizando la cámara a color del sensor Kinect.
50
3.11 Utilización del sensor Kinect desde Windows Forms
Cabe mencionar que WinForms actualmente está cayendo en desuso debido a que con WPF se
pueden crear interfaces de usuario visualmente más atractivas. Esto presenta un inconveniente, ya
que todos los tutoriales existentes en Internet que explican cómo utilizar el sensor Kinect, están
orientados al uso de WPF. Por tal razón se creó un prototipo que, a base de prueba y error,
permitiera el uso del SDK del sensor Kinect junto con la tecnología WinForms.
Software Versión
IDE Visual Studio Community 2015 14.0
.NET Framework 4.6
Lenguaje de programación C# 6.0
Microsoft Excel Professional Plus 2010 14.0
IDE R Studio 1.1
Lenguaje de programación R 3.4.1
Rattle 5.1.0
Leap Motion SDK 2.3.1
Kinect SDK 1.8
Arduino 1.6.9
Librerías OpenCV versión para C++ 3.4.1
51
Finalmente, para la creación de los archivos que almacenarán las secuencias de movimientos era
necesario utilizar algún formato sencillo pero robusto que fuese capaz de almacenar de manera
ordenada una gran cantidad de valores, correspondientes a coordenadas y ángulos. Se decidió
utilizar los archivos de valores separados por coma CSV (comma separated values) por su sencilla
creación, eficiente mantenimiento y completa compatibilidad con C#, Microsoft Excel, R y Rattle.
Un ejemplo de este formato de archivo se encuentra en la Figura 3.6.
Con el objetivo de saber cuánto tiempo transcurre desde que el usuario realiza una acción hasta que
dicha acción se envía vía Bluetooth ya sea al tablero indicador o al brazo robótico, pasando a través
de todas las clases y estructuras de datos respectivas a la plataforma de escritorio se realizaron
3 pruebas cuya duración fue de 1 min, 5 min y 10 min respectivamente.
Durante los 16 minutos (960 segundos) fueron recibidos, procesados y enviados en total
8757 paquetes. Es decir, en promedio 9.1219 paquetes por segundo. Si se divide 1 segundo entre la
cantidad anteriormente mencionada se obtiene como resultado una latencia aproximada
de 109.5 milisegundos.
52
3.14 Cálculo del porcentaje de uso de los servomotores
En el hardware original los servomotores del brazo y de los dedos eran utilizados en un 90% y en
un 9.7% respectivamente. Dichos porcentajes pueden calcularse a partir de sus especificaciones
técnicas, reflejadas en la Tabla 3.3:
La cantidad de aberturas que un servomotor es capaz de representar puede calcularse con Ec. 3.3.
Cabe mencionar que, para este caso, deadband significa la cantidad mínima de microsegundos que
deben de cambiar en la entrada para que cambie la salida. Es decir, si hay un cambio en menor
cantidad de microsegundos que los especificados en el deadband, el servomotor no se moverá.
microsegundosmáximo −microsegundosmínimo
Cantidad de aberturas = (Ec. 3.3)
deadband
Por tanto, si originalmente se utilizaban enteros, era posible representar 180 aberturas distintas.
En el caso de los servomotores del brazo eso representa un 90% del total, ya que si 45° representa
400 μs entonces 180° representarán 1600 μs, esto se divide entre 8 μs (su respectivo deadband)
resultando en 200 posibles aberturas.
Finalmente con el aumento de cifras significativas podemos afirmar que se podrían utilizar el 100%
de las posibles aberturas en ambos casos.
53
54
CAPÍTULO 4. ANÁLISIS Y DISEÑO
Desde una perspectiva muy amplia, el sistema para control de brazo robótico consta de cinco
componentes que interactúan entre ellos tal como muestra la Figura 4.1.
Los sensores ópticos de realidad aumentada utilizados son aquellos conocidos como Leap Motion y
la cámara Kinect for Windows v1, que detectan los movimientos que el usuario realiza y proveen
coordenadas de distintas partes de su cuerpo.
55
4.2 Plataforma de escritorio
Está conformada por diez clases, cada una realiza una tarea en específico. Se encuentran
organizadas en cuatro paquetes tal como expresa la Figura 4.2.
El paquete Vistas contiene la interfaz gráfica de usuario (GUI), consta de un solo formulario y es la
encargada de unificar todos los demás componentes del sistema.
El paquete Controladores contiene clases que interactúan directamente con el hardware, es decir,
procesan los datos crudos que se reciben de los sensores de realidad aumentada y también envían
los datos ya procesados (ángulos) a las placas Arduino del tablero indicador.
El paquete Herramientas es una colección de funciones que son utilizadas por las demás clases, es
capaz de generar y leer archivos de secuencias de movimientos, en ellos se colocan los datos ya
procesados (ángulos más las coordenadas). También contiene herramientas gráficas, como las
utilizadas para crear animaciones y guardar imágenes.
El paquete Clasificadores es el encargado de interactuar con programas escritos en C++ que utilizan
las librerías OpenCV para caracterizar objetos, es decir extraer datos útiles como áreas, perímetros,
colores de imágenes, entre otros. Además es capaz de clasificar objetos utilizando algoritmos de
minería de datos, que fueron generados utilizando Microsoft Excel y el software estadístico libre R.
56
En los siguientes apartados, se explicarán de manera detallada cada uno de los procesos que ejecuta
el sistema. Un resumen de ellos se aprecia en el diagrama de casos de uso de la Figura 4.3.
La primera tarea que debe ser ejecutada es la inicialización de todos los dispositivos, para esto el
sistema posee la pestaña mostrada en el Anexo G (p. G-1). Es importante recordar que la última
tarea que debe realizar el usuario antes de cerrar el sistema es des-inicializar los dispositivos, esto
con el fin de evitar futuros inconvenientes de conexión o su recalentamiento.
Dicha función recibe todos y cada uno de los paquetes de datos, sin embargo solamente se procesa
uno de cada ocho como se muestra en la Tabla 4.1, debido a la siguiente limitante mencionada en la
documentación oficial: el sensor Leap Motion usa cámaras infrarrojas para la detección y
seguimiento de manos, es posible tener acceso a las fotografías tomadas con dichas cámaras
mediante la función Frame.Images. Estas imágenes pueden ser utilizadas para realidad aumentada,
visión por computadora, entre otros fines (Leap Motion Inc., s.f.d). La función Wrap devuelve las
coordenadas en pixeles correspondientes a un objeto que se encuentre en escena, esta función por lo
general no es lo suficientemente rápida para transformar coordenadas a una alta cantidad de cuadros
por segundo. Para obtener cálculos en tiempo real se requeriría el uso de un programa sombreador
(shader program) compilado por aparte y ejecutado en una unidad de procesamiento gráfico (GPU),
comúnmente conocida como tarjeta gráfica (Leap Motion Inc., s.f.e).
En caso de presentarse algún problema, el usuario deberá asegurarse de: haber conectado
apropiadamente el sensor a un puerto USB 3.0, que el led verde se encuentre encendido y que el
servicio de Windows Leap Service se esté ejecutando.
Tabla 4.1. Distribución del procesamiento de frames ofrecidos por el Leap Motion.
58
sensor Kinect se encuentre conectado y que el servicio de Windows lo detecte correctamente, luego
se procede a activar cada uno de los tres Streams, que consisten en flujos de datos de distinta índole.
Primero se habilita el SkeletonStream que contiene coordenadas de hasta 20 puntos del cuerpo,
luego se habilita el DepthStream que puede visualizarse como un flujo de fotografías en escala de
grises donde el color de cada pixel indica la distancia de éste a la cámara y finalmente se habilita el
ColorStream que no es más que una secuencia de fotografías comunes y corrientes a colores, con
una resolución de 640x480 pixeles y velocidad máxima de 30 cuadros por segundo.
El siguiente paso es configurar el evento AllFramesReady que se activa cada vez que el sensor
Kinect tiene disponible un cuadro actualizado de cada uno de los tres Streams, es decir, espera que
los tres estén listos para lanzar el evento. Análogo al Leap Motion existe la función procesarFrame
que distribuye el procesamiento según muestra la Tabla 4.2.
Tabla 4.2. Distribución del procesamiento de frames ofrecidos por el sensor Kinect.
Finalmente, el usuario deberá des-inicializar el Kinect antes de cerrar la aplicación, esto con la
finalidad de detener la captura de datos y apagar las cámaras y micrófonos, ya que de no hacerlo
existe el riesgo de recalentamiento. Cabe mencionar que este proceso puede durar aproximadamente
20 segundos.
59
4.3.3 Inicializar Módulos Bluetooth
La comunicación entre el LeapMotion, Kinect y el tablero indicador se lleva a cabo mediante el uso
de cuatro receptores Bluetooth, cada uno conectado a una placa Arduino. Primero, se realiza la
búsqueda de los elementos Bluetooth activos en el sistema operativo, para esto se realizan consultas
a la herramienta conocida como Instrumental de Administración de Windows (Windows
Management Instrumentation). Donde se filtran los dispositivos en base a su Device ID, como se
puede apreciar en la Figura 4.4.
Los dispositivos Bluetooth conectados a las placas Arduino son los módulos HC-05 y HC-06.
Estos se identifican mediante un DeviceID, obtenido a través de su alias (BTHENUM). Posterior a
la identificación de cada puerto Bluetooth, se procede a asignar a cada uno con su correspondiente
parte del tablero indicador (mano derecha, mano izquierda, brazo derecho y brazo izquierdo).
La comunicación entre los sensores y los dispositivos Bluetooth se hace mediante la conexión a un
puerto COM (puerto serial), diferente para cada elemento de los brazos. De esta manera, todo
ángulo calculado por el sistema es enviado de forma inalámbrica a cada uno de los componentes del
tablero indicador utilizando un puerto de comunicación serial en particular.
El primer proceso realizado por el sistema es la imitación en tiempo real de los movimientos
realizados por el usuario, cuya estructura es mostrada en la Figura 4.5.
60
Como puede apreciarse, la imitación de los movimientos de las manos se hace de manera
simultánea a la de los brazos pero aislada de ésta. Es decir que son dos procesos distintos que
siguen la misma estructura y se ejecutan al mismo tiempo, pero de forma independiente uno del
otro. La plataforma de escritorio realiza este proceso en la pestaña Imitación (Anexo G, p. G-2).
Tanto la extremidad robótica original como el tablero indicador elaborado necesitan de dos tipos de
ángulos para que puedan operar los servomotores y los ledes respectivamente. El primer tipo
corresponde a los ángulos de abertura de cada dedo respecto a la palma de la mano. Mientras que el
segundo hace referencia a los brazos, específicamente los ángulos de abertura horizontal y vertical
de cada hombro y a los ángulos de abertura de cada codo.
Para calcular los ángulos relativos a la mano se utilizan los vectores Hand.Direction y
Finger.Direction, provistos por el Leap Motion, que devuelven un vector tangente a la palma de la
mano y un vector gradiente a la punta de cada dedo, es decir un vector posicionado en la punta de
los dedos con la dirección hacia donde apuntan, respectivamente. Dichos vectores pueden
apreciarse en la Figura 4.6.
C
A
B
A
A
Figura 4.6. a) Vector Hand.Direction, b) vectores Finger.Direction, c) ángulo devuelto por la operación
Vector.AngleTo. Adaptado de Leap Motion Inc. (s.f.c) y de Flamenco et al. (2017, p. B2)
61
Para calcular los ángulos relativos al brazo se utilizan las articulaciones humanas: muñecas, codos y
hombros tanto izquierdos como derechos y un punto llamado ShoulderCenter que está ubicado
ligeramente arriba del punto central de una línea imaginaria que une ambos hombros. Dichos puntos
están resaltados de color verde en la Figura 4.7.
Figura 4.7. Articulaciones reconocidas por el Kinect v1. Adaptado de (Deltakosh, 2011).
A B C
A A
62
La primera fórmula es la ley de los cosenos (Ec. 4.1) que se utiliza para relacionar la longitud y los
ángulos de cualquier triángulo, sea éste rectángulo o no. La segunda fórmula es la correspondiente a
la distancia entre dos puntos cualesquiera en el espacio (Ec. 4.3) y finalmente el coseno (Ec. 4.4), es
decir, la relación entre el cateto adyacente y la hipotenusa de un triángulo rectángulo.
(Ec. 4.1)
(Ec. 4.2)
(Ec. 4.3)
(Ec. 4.4)
Para el cálculo del ángulo de abertura de un codo (Ec. 4.5) se tomarán las coordenadas de un
hombro, un codo y una muñeca, denominados A, B y C respectivamente. Con estos tres puntos se
puede formar un triángulo oblicuángulo en el espacio, donde los vectores AB, BC y el ángulo B
corresponden a la longitud del bíceps, antebrazo y al ángulo de abertura del codo respectivamente.
Primero se usa (Ec. 4.3) para calcular dichas longitudes y finalmente (Ec. 4.2) para encontrar el
ángulo entre ellas.
(Ec. 4.5)
Los ángulos de abertura horizontal y vertical de los hombros son un tanto más complicados de
calcular, se tomarán las coordenadas de un hombro central, hombro derecho y codo derecho y se
llamarán puntos A, B y C respectivamente, tal como se muestra en la Figura 4.9.
63
Figura 4.9. Coordenadas de un hombro central, hombro derecho y codo derecho.
El punto resaltado en color verde que se encuentra más a la derecha en la Figura 4.9 corresponde a
una proyección del punto C en una traza del eje Z a la altura de la coordenada Z del punto B, en
otras palabras, desplazar el codo respetando la altura original, y colocarlo en un punto donde no esté
ni delante ni detrás del cuerpo. Esto con el fin de deshacerse de la abertura horizontal y quedarse
solamente con la vertical. Dicho punto se encuentra resaltado en color rojo en la Figura 4.10. Cabe
mencionar que al hacer esta proyección, se pasa del espacio XYZ al plano XY.
El punto resaltado en color naranja en la Figura 4.10 corresponde a aquella coordenada que forma
un triángulo rectángulo cuya altura es igual (en valor absoluto) que la diferencia de alturas entre el
64
codo y el hombro de la persona. El ángulo formado entre el cateto vertical y la hipotenusa
representa la abertura vertical del hombro y puede ser calculado usando (Ec. 4.6) en dicho triángulo
rectángulo.
(Ec. 4.6)
Para calcular el ángulo de abertura horizontal del hombro se realiza un proceso similar, proyectando
los puntos A y C de la Figura 4.9 en una traza del eje Y a la altura de la coordenada Y del punto B,
es decir, sería como estar viendo a la persona desde arriba. Esto para deshacerse de la abertura
vertical y quedarse solamente con la horizontal.
La magnitud del ángulo que interesa se encuentra resaltado de color naranja en la Figura 4.11,
correspondiente al ángulo suplementario (cuya suma da 180° o pi) al ángulo A’BC’ del triángulo
proyectado, cuya expresión matemática corresponde a la Ec. 4.7. Cabe notar que el signo depende
de las coordenadas Z de los puntos B y C, es decir, el signo depende de si el codo de la persona se
encuentra más cerca o más lejos del sensor Kinect que su hombro.
(Ec. 4.7)
65
4.4.2 Graficación de datos calculados
La plataforma de escritorio genera una visualización en tiempo real de las extremidades superiores
de la persona. Dicha visualización se ve enriquecida con el uso de realidad aumentada, es decir,
para facilitar la lectura de valores calculados por el sistema, estos son dibujados sobre cada imagen
o fotograma capturado por las cámaras, volviendo el proceso intuitivo y accesible para un usuario
sin entrenamiento.
En el caso de las imágenes provistas por el sensor Kinect, sobre ellas se dibujan los 23 elementos
que se muestran en la Figura 4.12: los seis ángulos calculados en el apartado 4.4.1, teniendo el
cuidado de dibujar cada uno lo más cerca posible de la articulación que representa y ocho
segmentos de recta que unen los nueve cuadros que representan algunas articulaciones del cuerpo,
cuyo color se encuentra en función de la distancia de cada una de ellas al Kinect, esto con la
finalidad de indicar al usuario si se encuentra muy cerca, muy lejos o en el rango óptimo de trabajo
del Kinect, estos valores se listan en la Tabla 4.3.
66
Simultáneamente se hace un proceso similar con las imágenes provistas por el sensor Leap Motion
sobre las que se dibujan hasta un máximo de 48 elementos: cada uno de los diecinueve huesos de
conforman cada mano y además, ligeramente arriba de la punta de cada dedo, se dibuja su
respectivo ángulo de abertura respecto a la palma de la mano. Como se aprecia en la Figura 4.13.
Una de las principales mejoras que proporciona la actual plataforma de escritorio respecto del
software anterior es el aumento en la cantidad de cifras significativas de los ángulos. La extremidad
superior original maneja los ángulos como cifras enteras, tanto los de las manos como los de los
brazos. Esto se evidencia en el sketch de Arduino original mostrado en la Figura 4.14.
En cambio, la nueva plataforma de escritorio es capaz de manejar los ángulos de los dedos hasta
con seis cifras decimales y los ángulos de los brazos hasta con dos cifras decimales. El
inconveniente se presenta al momento de enviar dichas cantidades a las placas Arduino vía
Bluetooth, ya que el buffer serial sólo permite recibir datos enteros de un byte de longitud (Arduino,
2018d). Para solventar dicho inconveniente se utiliza el proceso ilustrado en la Figura 4.15, donde
67
se convierte un flotante (cuyo valor sea mayor o igual a cero y menor a mil) a cinco bytes con un
valor que en este caso oscila entre 0 y 99.
Por lo tanto, los diez ángulos de las manos y los seis ángulos de los brazos de una persona se
descomponen en conjuntos de 50 y 18 bytes respectivamente. Para finalizar, se añade un byte al
inicio del paquete que tiene un valor de 100, dicho byte es utilizado para señalar el inicio del
paquete y se diferencia de los demás ya que se encuentra fuera de su rango de valores (que oscila
entre 0 y 99).
El tablero indicador está conformado internamente por cuatro placas Arduino distribuidas de la
manera que ilustra la Figura 4.16. Si bien están diseñadas para trabajar en conjunto, también es
posible que cada una opere de forma independiente a las demás.
68
Las placas Arduino Mega tienen anexada una pantalla LED donde se visualizan cada uno de los
ángulos designados a dicha placa, es decir, la placa Arduino que reciba el paquete de datos del Leap
Motion mostrará los ángulos de abertura de los dedos mientras que la placa que reciba el paquete de
datos del sensor Kinect mostrará los ángulos de abertura de los brazos. Es importante aclarar que es
el software y no el hardware el encargado de sincronizar los paquetes de datos brindados por los
sensores de realidad aumentada. Esto provoca que la velocidad de actualización de los paquetes no
sea necesariamente la misma para ambos sensores.
Cada placa Arduino contiene un software que sigue la estructura base que se muestra en la Figura
4.17. Es importante mencionar que dicha estructura está diseñada para ser compatible tanto con el
tablero indicador como con la extremidad superior original, de modo que la incorporación del
nuevo software debería ser tan sencilla como solamente subir el sketch a las placas embebidas en el
brazo y verificar que los pines se encuentren conectados donde deberían. Para mayor información,
el código fuente completo de las cuatro placas Arduino se encuentra en los Anexos C, D, E y F.
En el Anexo H (p. H-1) se aprecia el circuito correspondiente al Arduino del brazo derecho. Cabe
mencionar que el circuito de la mano derecha (Anexo H, p. H-3) sería muy similar, con la única
diferencia de que la cantidad de ledes y botones se incrementaría a cinco y diez respectivamente.
Respecto al circuito correspondiente al Arduino del brazo izquierdo, su diagrama puede apreciarse
en el Anexo H (p. H-2). Análogamente, el circuito de la mano derecha (Anexo H, p. H-2) es
idéntico a excepción de la cantidad de ledes. Estos se incrementan a cinco, uno por cada dedo.
69
4.5 Grabación de movimientos para posterior reproducción
Esta valiosa característica proporciona a la plataforma de escritorio varias utilidades que tienen el
potencial de ser implementadas en el futuro, como por ejemplo: almacenar posturas o gestos de
pacientes, reconocimiento de lenguaje de señas, corregir defectos de motricidad de personas, entre
otros. La plataforma de escritorio realiza este proceso en la pestaña Grabación (Anexo G, p. G-2).
Otra gran diferencia radica en que durante la imitación en tiempo real, el tratamiento de los datos
referentes a las manos se da de manera independiente o aislada a la de los brazos. Esta situación
cambia durante la grabación, ya que es necesario que exista sincronización entre ambos sensores
(Kinect y Leap Motion) para poder almacenar de manera ordenada todos los ángulos y coordenadas
en dichos archivos de valores separados por coma.
De lo anterior surge la necesidad de crear una estructura de datos compartida, que sea lo
suficientemente robusta como para almacenar tanto los datos referentes a los brazos (los ángulos de
abertura de ambos brazos y las coordenadas de todas las articulaciones utilizadas para graficación)
70
como los datos referentes a las manos (los ángulos de abertura de cada dedo, las coordenadas de
cada hueso que conforma cada mano y las coordenadas de la punta de cada dedo).
Además es necesario crear una clase que administre dicha estructura de datos compartida y que
durante la grabación, vaya almacenando los datos de ambos sensores de manera ordenada y
sincronizada. Dicha clase, cuyo nombre es Grabadora, también debe ofrecer la posibilidad de
generar archivos de secuencias de movimientos teniendo el cuidado de ser lo más apegada y fiel
posible a los movimientos que la persona esté realizando.
Los archivos de secuencias de movimientos están conformados por registros de 225 datos,
distribuidos de la siguiente manera:
a. Bandera indicadora del tipo de sensor que generó el presente registro. Toma el valor de 0 o 1
si se trató del Kinect o del Leap Motion respectivamente.
b. Paquete de datos de los brazos, formado por 33 cantidades (6 ángulos y 27 coordenadas).
c. Paquete de datos de las manos, formado por 191 valores (10 ángulos de abertura, 10
coordenadas de puntos ubicados en la punta de los dedos, 1 entero que indica la cantidad de
huesos detectados y finalmente las coordenadas de cada hueso, que pueden llegar a ser un
máximo de 80).
71
4.6 Reproducción de movimientos pre-grabados
El tercer proceso realizado por el sistema es la reproducción por parte del tablero indicador de
los movimientos que se grabaron en el pasado y que se encuentran almacenados en archivos de
valores separados por coma. Esto se realiza en la pestaña Reproducción (Anexo G, p. G-2).
Dicha funcionalidad puede dividirse en las cuatro etapas que se muestran en la Figura 4.19.
Durante la primera etapa la plataforma de escritorio lee, interpreta y carga en memoria todos los
datos contenidos en una secuencia pre-grabada. Dicho proceso sucede tan rápido que es
prácticamente imperceptible para el usuario.
En segundo lugar, se le ofrece al usuario la posibilidad de generar una animación a partir de dicha
secuencia pre-grabada. El proceso de graficación de dicha animación es similar al que se realiza en
el apartado de imitación en tiempo real (apartado 4.4.2), con la diferencia de que los datos
calculados (ángulos y coordenadas) son dibujados sobre un lienzo en blanco (Figura 4.20).
Una vez que el usuario ha visualizado la animación, es posible que esté conforme con ella o que
desee remover algunos cuadros de la secuencia pre-grabada. Esto podría ocurrir con mayor
72
frecuencia al inicio o al final, ya que la persona tiene que detenerse e interactuar con la plataforma
de escritorio para poder comenzar y detener la grabación, obligando a la persona a realizar algún
movimiento innecesario. Por esta razón se ha implementado la etapa llamada depuración de
secuencia pre-grabada, que el usuario puede optar por utilizar o no.
Finalmente la secuencia pre-grabada se encuentra lista para ser enviada al tablero indicador.
Este proceso es similar al descrito en el apartado 4.2 (imitación en tiempo real), con la diferencia de
que dicha acción puede ser repetida tantas veces como el usuario desee.
Cabe aclarar que la modalidad de detección por distancia se refiere a que el objeto se encuentre en
el rango óptimo de detección del Kinect pero no así su fondo (los objetos que lo rodean).
El reconocimiento comienza cuando el sensor Kinect toma una fotografía de los objetos que se
encuentran en escena. A continuación dicha fotografía es procesada por un programa que extrae sus
características (por ejemplo área, perímetro, entre otros) desarrollado en C++ utilizando las librerías
OpenCV, detallados en los Anexos A y B.
73
La plataforma de escritorio lee las características de cada objeto y las procesa con un algoritmo de
clasificación. Dicho algoritmo utiliza herramientas matemáticas de minería de datos (detalladas en
el apartado 4.7.4 de esta sección) para predecir la clase a la que pertenecen cada uno de los objetos.
Finalmente, teniendo ya clasificados los objetos, si se tiene una cruz roja al centro de la escena y el
usuario desea que el tablero indicador “señale” hacia las cruces o hacia los objetos rojos, bastaría
con enviar la instrucción correspondiente a “señalar hacia el centro”, almacenada como un archivo
de valores separados por coma.
La plataforma de escritorio ofrece dos modalidades distintas para la detección de objetos basado en
la idea de que en algún momento en el futuro, el software creado para el presente trabajo de
graduación se unifique con la extremidad superior derecha original reparada (para marzo de 2018
no se encontraba operativa, cabe mencionar que no se tuvo acceso a dicha extremidad durante todo
el tiempo que duró el proyecto) e integrada con una nueva extremidad superior izquierda.
De darse este suceso, el robot será capaz de reconocer tanto objetos que se encuentren entre 90cm y
2m (usando la modalidad de detección en base a distancia) como otros objetos que estén fuera de
ese rango (usando la modalidad de detección en base a colores) donde el Kinect estaría siendo
usado como una simple cámara que toma fotografías a color.
Cinco figuras fueron elegidas para realizar la detección por color, estas son: cuadro grande (5.5 cm
por lado), cuadro pequeño (2.5 cm por lado), cruz (5.5 cm de ancho y de alto), triángulo (5.5cm de
alto y 3cm de base) y círculo (3.5 cm de diámetro); mostradas en la Figura 4.22.
74
Se eligieron los colores rojo, verde y azul para imitar el modelo RGB. Además, se agregaron los
colores blanco y negro pues representan la suma y ausencia de los colores antes mencionados.
Cabe mencionar que el color de los objetos no es relevante para la detección en base a distancia, las
figuras hechas con cartón se dejaron con su color original. De igual manera con la botella y el
peluche con forma de pelota de baloncesto. Esta modalidad de detección funciona incluso en
escenarios de nula iluminación o con objetos que poseen colores complejos o muy parecidos a los
de su entorno. Es importante mencionar que este proceso sería extremadamente difícil de realizar
sin un sensor Kinect.
La etapa de aprendizaje es una de las fases más importantes en los problemas de clasificación, ya
que es aquí donde se determina los tipos de objetos que podrán ser reconocidos. Esto significa que
75
la capacidad de un clasificador para distinguir entre una clase de objetos y otra está ligada de forma
fundamental al tipo de ejemplos disponibles durante el proceso de aprendizaje.
Para cumplir con los criterios mencionados en el apartado 2.6.1 (modelos de clasificación) la
cantidad de fotografías que se tomen debe ser significativa (se necesita disponer de un número
suficiente de imágenes). Además, debe ser representativa, es decir, idealmente se debe tomar la
misma cantidad de imágenes para cada clase o tipo de objeto. Por ejemplo el número de fotografías
de los triángulos debe ser igual o similar que el número de fotografías de las cruces.
Para la modalidad de clasificación a distancia se tomaron un total de cien fotografías (una muestra
se puede apreciar en la Figura 4.24), distribuidas uniformemente entre las cinco clases de objetos
(veinte para cada una). Este número se elevó considerablemente en el caso de la clasificación por
color, ya que además de tomar en cuenta la cantidad de clases de objetos, es necesario considerar
todas las combinaciones de colores del fondo y de las figuras. No es lo mismo una imagen con una
figura de color negro y fondo blanco (que podría ser tratada en escala de grises) que otra imagen
con una figura de color azul y fondo verde (pues se tiene que trabajar con sus canales de color).
Si se quiere tener en el conjunto de entrenamiento diez ejemplos para cada una de las cinco clases,
entonces la cantidad de muestras que se capturarían (si no se tomara en cuenta el color) es de
cincuenta. Sin embargo, este número debe ser multiplicado por la cantidad de combinaciones
posibles de color del fondo y de la figura.
76
Ahora bien, descartando los casos donde el color de la figura es el mismo que el color del fondo,
entonces la cantidad de combinaciones posibles es de veinte. Porque para cada uno de los cinco
colores disponibles para el fondo, se pueden poner figuras de los cuatro colores sobrantes. Esto nos
conduce a la cantidad total de muestras que se tomaron para entrenar al clasificador: 1000, que
resulta de multiplicar 50 (total de muestras sin tomar en cuenta el color) con 20 (cantidad de
combinaciones posibles de colores). Finalmente, un subconjunto de dichas imágenes se aprecia en
la Figura 4.25.
A continuación se describe el proceso que toma como entrada cada una de las imágenes del
conjunto de entrenamiento y produce como salida un solo archivo de valores separados por coma
que contiene las características de todas ellas, expresadas como parámetros numéricos.
Esto es imprescindible, ya que dichas imágenes no pueden ser utilizadas directamente para entrenar
el clasificador. Para esto se codificó un programa en C++ que utiliza las librerías OpenCV. Este
proceso está conformado por las siguientes siete etapas:
En la primera etapa se carga en memoria la fotografía original provista por la cámara del Kinect
mediante la función imread (Anexo A, p.A-1), un ejemplo de ello se muestra en la Figura 4.26.
77
Figura 4.26. Fotografía original a colores, no posee tratamiento alguno.
Durante la segunda etapa, de la imagen original se toman por separado tres secciones de 200x200
pixeles (Figura 4.27) mediante la función copyTo (Anexo A, p.A-1), que corresponden a los objetos
situados al frente, a la izquierda y a la derecha de la cámara.
78
función threshold (Anexo A, p.A-1). El valor del umbral utilizado es 128 ya que es el punto
intermedio del rango de valores aceptados en un byte (cuyo mínimo es 0 y máximo es 255).
Para la modalidad de detección por color, la dificultad de umbralizar radica en que deben tomarse
en cuenta todas las combinaciones de color que presentan la figura y el fondo. Un ejemplo son los
umbrales basados en intensidad (valores en escala de grises, implementado usando la función
cvtColor, Anexo B, p.B-4) que sirven para separar objetos de su fondo en combinaciones blanco-
negro que podrían no funcionar para combinaciones rojo-verde.
Otro ejemplo es el de los umbrales basados en algún canal de color (obtenidos mediante la función
split, Anexo B, p.B-4), ya que si se escoge el canal verde para separar objetos verdes de fondos de
otros colores; dicho umbral no sería el más adecuado para detectar objetos rojos en escenarios
azules.
El proceso a seguir es el siguiente: se toman 392 pixeles de los bordes de la imagen y 64 pixeles del
centro para calcular los promedios respectivos. Tomando en cuenta que cada pixel provee cuatro
datos (su cantidad de rojo, verde, azul y su intensidad, es decir, el promedio de las tres anteriores)
esto puede realizarse de cuatro maneras distintas. Finalmente, se busca en cuál de dichas 4
posibilidades la diferencia entre los promedios es más grande. El umbral deseado es el punto
intermedio entre ambos promedios. Esto se encuentra implementado al final de la función
calcularUmbral (Anexo B, p.B-3).
79
La quinta etapa consiste en encontrar todos los contornos presentes en escena (Figura 4.29)
mediante la función findContours (Anexo B, p.B-4). En problemas de mayor complejidad es común
que este proceso arroje “basura”, es decir, detecte contornos que no son los que interesan. Esto
puede deberse a cambios bruscos de iluminación o umbralizaciones establecidas arbitrariamente.
La sexta etapa extrae características de los contornos obtenidos en la quita etapa (en forma de
coeficientes numéricos) con la finalidad de ofrecer al clasificador tantas variables como le sea
posible. Cabe mencionar que no se espera que el clasificador utilice todas las características
calculadas, pero sí que tenga más opciones de donde elegir.
Algunas de las características calculadas son: área, perímetro, altura y anchura (Figura 4.30a), área
de la envolvente convexa a la figura (Figura 4.30b) y el área mínima de diferentes figuras que
envuelven al objeto: triángulo (Figura 4.30c), elipse (Figura 4.30d) y círculo (Figura 4.30d).
La última etapa corresponde al proceso de almacenar las características extraídas en un solo archivo
de valores separados por coma, llamado resultadosCaracterizacionColores.csv (Anexo B, p.B-5).
80
Dicho archivo se somete a una serie de pruebas y algoritmos de minerías de datos mediante el uso
de software especializado como Microsoft Excel y R.
A B C
D E
Figura 4.30. a) Rectángulo rotado de área mínima, b) envolvente convexa, c) triángulo de área mínima,
d) elipse que asemeja contorno, e) círculo de área mínima que envuelve la figura.
En primera instancia, se codificó en R el programa que se muestra en la Figura 4.31 para visualizar
el conjunto de entrenamiento. Las variables que brindaron mayor separación entre cada clase de
objeto fueron el perímetro, el ancho y el alto.
81
Debido a la forma en que se agrupan los datos, se consideró a K-means un candidato perfecto para
realizar la clasificación. En la Figura 4.32 se aprecia un programa en R que ejecuta K-means en el
conjunto de entrenamiento, y también los centros a los que converge dicho método.
El método trabaja bastante bien, ya que ha logrado clasificar de manera casi perfecta. Esto queda en
evidencia en la Figura 4.33, que presenta a todas las muestras bien clasificadas a excepción de la
etiquetada con el número 77, que es agrupada dentro del clúster 5 a pesar de que debería pertenecer
al clúster 4.
En un problema más complejo, el hecho de que solamente clasifica mal una muestra se consideraría
un resultado excelente. Pero se quiso profundizar más y refinar el modelo de clasificación
añadiéndole un árbol de decisión en aquellos casos que K-medias no sea contundente, es decir,
cuando la distancia a los dos centros más cercanos sea parecida.
Para generar el modelo de árbol de decisión, se graficaron las características de cada clase haciendo
uso de Microsoft Excel. Algunas variables resultaron ser poco útiles, ya que sus valores no
mostraban diferencias significativas entre una clase y las demás, tal es el caso del perímetro o el
radio del círculo de área mínima que rodea al objeto (Figura 4.34). En otras palabras, hay cuadros
que tienen el mismo perímetro que algunas cruces y algunos triángulos.
82
Figura 4.34. Variables que no caracterizan bien a las figuras.
Mientras que unas variables sólo logran diferenciar algunas clases de otras, como el área sobrante
de la envolvente conexa respecto de la original (Figura 4.35a) y la proporción de espacio sobrante
del rectángulo de área mínima que envuelve a la figura (Figura 4.35b). Hay otras que hacen bien su
trabajo como el área (Figura 4.35c) y el área sobrante del triángulo más pequeño que envuelve a la
figura (Figura 4.35d).
A B
D C
Figura 4.35. Variables que caracterizan muy bien cada clase de figuras: a) área sobrante de la envolvente
conexa respecto de la original, b) proporción de espacio sobrante del rectángulo de área mínima que envuelve
a la figura, c) área de la silueta y d) área sobrante del triángulo más pequeño que envuelve a la figura.
Para finalizar, el proceso a seguir es el siguiente: primero se aplica k-means (Figura 4.36a) y se
verifica si el resultado ha sido contundente (esto puede suceder cuando la muestra es cercana a
algún centro de clase o cuando la distancia al centro más cercano es mucho menor que al segundo
centro más cercano), en caso contrario se aplican las reglas de clasificación obtenidas a partir del
árbol de decisión calculado (Figura 4.36b).
83
A B
4.7.5. Generación del modelo clasificador de figuras que trabaja en base al color
Este proceso se divide en tres etapas: separar la figura del fondo (se logra con el algoritmo de
umbralización y posterior binarización de la imagen), reconocimiento de colores (es decir, clasificar
el color del marco y la figura en uno de los cinco colores posibles) y finalmente clasificar la silueta
del objeto (que requiere de otro clasificador completamente independiente).
La Figura 4.37 presenta dos inconvenientes: el primero de ellos es que los colores no se agrupan
entre sí, esto imposibilita usar k-means ya que idealmente se deberían apreciar cinco grupos
84
aislados unos de otros. El segundo inconveniente es que incluso habiendo tomado las fotografías
con la misma iluminación, existen pequeños cambios en ella que se evidencian en la forma alargada
que tiene los datos, prácticamente paralela a la recta que une los colores negro y blanco perfectos.
Figura 4.38. Componentes de los colores negro, blanco, rojo, verde y azul.
A simple vista, dichos datos no aportan mayor utilidad. Hace falta notar pequeños detalles, como
por ejemplo: la componente roja separa los colores negro y azul de los demás (Figura 4.39a), las
componentes azul y verde difieren para el color verde (Figura 4.39a), las componentes azul y roja
difieren en los colores negro y azul (Figura 4.39b) y las componente roja y verde difieren en el
color rojo (Figura 4.39c).
En base a las gráficas de la Figura 4.39 es posible calcular un árbol de decisión que clasifique
efectivamente los colores. Las reglas de clasificación obtenidas a partir de éste, se listan en la
Figura 4.40 y se implementan en el Anexo B, p.B-2.
85
Figura 4.40. Modelo de clasificación de colores.
El segundo modelo clasificador, encargado de distinguir siluetas, fue generado de manera similar,
dando como resultado las reglas de clasificación que se muestran en la Figura 4.41.
Es de vital importancia que las muestras (en este caso, imágenes con objetos en escena) del
conjunto de validación no formen parte del conjunto de entrenamiento, ya que en ese caso se estaría
intentando probar el modelo de clasificación con una muestra para la que ya fue entrenado.
Lo anterior puede guiar a estimaciones de precisiones erróneas y demasiado optimistas.
86
Para cumplir con lo anterior, se tomó un total de 35 pruebas (siete para cada clase de figura) y 90
pruebas adicionales (uniformemente distribuidas en las cinco clases de figuras y los cinco colores
disponibles) para validar los clasificadores que detectan en base a distancia y color respectivamente.
Los resultados de las pruebas al clasificador de figuras que trabaja con detección en base a
distancia, pueden apreciarse en la Tabla 4.5. Cada fila de la tabla representa las siete pruebas
realizadas con un tipo de figura en específico, pero dentro de cada fila, los datos se colocan en la
columna correspondiente al resultado que ofrece el clasificador. Estos resultados son inesperados
pero a la vez excelentes, ya que así, el clasificador aparenta ser perfecto. En otras palabras, no se
equivocó ni siquiera una vez.
Los resultados de las pruebas al clasificador de figuras que trabaja con detección en base a colores,
pueden apreciarse en la Tabla 4.6. En la primera fila pueden contabilizarse las 18 pruebas realizadas
a la figura Cuadro grande, pero 3 de ellas están en la columna de la figura Cuadro pequeño
mientras que todas las demás están en la columna correcta, es decir, la del Cuadro grande.
Esto significa que en tres de las 18 ocasiones que se le presentó un Cuadro grande al clasificador,
éste arrojó una respuesta errónea, específicamente confundió la figura con un Cuadro pequeño.
87
Además se puede apreciar un fallo que tuvo el clasificador a la hora de enfrentarse a figuras de tipo
Cuadro pequeño, ya que predijo erróneamente que se trataba de una elipse.
Para el caso del modelo clasificador de colores, las pruebas se pueden dividir en dos tipos:
reconocimiento del color del fondo de la escena (Figura 4.42a) y reconocimiento del color de la
figura (Figura 4.42b). De manera análoga al clasificador de figuras, se realizaron noventa pruebas
distribuidas en dieciocho para cada color.
La Tabla 4.7 muestra los resultados de las pruebas de clasificación de colores correspondientes al
marco de la figura. Estos resultados son inesperados pero a la vez excelentes, ya que así, el
clasificador aparenta ser perfecto. En otras palabras, no se equivocó ni siquiera una vez.
Tabla 4.7. Matriz de confusión del clasificador de colores aplicado a los marcos.
88
perfecto, hecho que se visualiza en la matriz de confusión ya que todos los valores están colocados
en las casillas que forman la diagonal principal.
Tabla 4.8. Matriz de confusión del clasificador de colores aplicado a las figuras.
Finalmente, la precisión del modelo clasificador de color aparenta ser del 100%, mientras que para
el caso del modelo clasificador de figuras, su cálculo debe estimarse para cada clase, estos cálculos
se realizan en la Tabla 4.9.
Tabla 4.9. Precisión de cada clase del clasificador de figuras por distancia.
En base a los datos anteriores, se concluye que ambos modelos son aceptables y generan
predicciones acertadas.
89
90
CAPÍTULO 5. PRUEBAS Y DEPURACIÓN
La realización de pruebas es una etapa indispensable de todo sistema, ya que durante ellas se
observa el funcionamiento de éste en circunstancias reales. En otras palabras, durante el diseño e
implementación de los sistemas, éstos son probados una infinidad de veces pero, la mayoría de estas
pruebas se dan en ambientes controlados, semejantes a circunstancias ideales.
Dichos escenarios ideales raramente suceden en la vida real, razón que otorga mucha importancia a
las pruebas que se detallan a continuación. Pero antes de ello, se ha definido un formato que permite
documentar toda la información relacionada a cada una de las pruebas. En la Tabla 5.1 se presentan
los componentes del formato establecido.
Las primeras tres pruebas realizadas consisten en corroborar de manera experimental, el rango de
distancia con el que trabaja el sensor Kinect que aparece en su documentación oficial. Para ello se
hicieron varias tomas de datos a diferentes distancias del Kinect. En la Tabla 5.2 se presentan los
experimentos realizados alrededor del límite inferior del rango oficial de trabajo.
A B C
91
Tabla 5.2. Registro de la primer prueba realizada.
En la Tabla 5.3 se presentan los experimentos realizados respetando el rango oficial de trabajo.
Este es el caso donde se presentan las circunstancias ideales.
A B C D
92
En la Tabla 5.4 se presentan los experimentos realizados alrededor del límite superior del rango
oficial de trabajo.
A B C
93
Tabla 5.5. Registro de la cuarta prueba realizada
Prueba #04 Imitación de movimientos muy cerca del sensor Leap Motion
Objetivo Encontrar la menor distancia hacia el sensor Leap Motion, que sea cómoda para
usarse junto con el sensor Kinect y que detecte ambas manos de forma correcta.
Descripción Se realizaron tomas a 10 cm y 20 cm de distancia.
Resultado Basados en la documentación oficial y en la experiencia propia, se espera que
esperado ambas mediciones funciones correctamente.
Resultado La toma realizada a 10 cm (Figura 5.4a) resulta ser precisa para detectar una sola
obtenido mano, pero no así para ambas. Por el contrario, la toma realizada a 20 cm (Figura
5.4b) presenta alta calidad y precisión para ambas manos.
A B
Figura 5.4. Tomas para una y ambas manos realizadas a: a) 10 cm, b) 20 cm.
En la Tabla 5.6 se presentan los experimentos realizados respetando el rango oficial de trabajo.
Este es el caso donde se presentan las circunstancias ideales.
Prueba #05 Imitación de movimientos en el rango óptimo del sensor Leap Motion
Objetivo Comprobar que el sensor Leap Motion realiza correctamente la
detección de movimientos en su distancia ideal de trabajo.
Descripción Tomando en cuenta la comodidad para realizar mediciones
simultáneas con ambos sensores de realidad aumentada.
Para el sensor Leap Motion, de forma empírica se maneja
que dicha distancia ronde los 35 cm. Por lo tanto, las tomas se
realizaron a 30 cm y 40 cm del Leap Motion.
Resultado esperado Basados en la documentación oficial y en la experiencia propia
se espera que ambas tomas sean fieles a la realidad.
Resultado obtenido Todas las tomas mostradas en la Figura 5.5 resultados exitosas,
tanto las que detectan una mano como las que detectan ambas.
94
A B
Figura 5.5. Tomas para una y ambas manos realizadas a: a) 30 cm, b) 40 cm.
En la Tabla 5.7 se presentan los experimentos realizados alrededor del límite superior del rango
oficial de trabajo.
Prueba #06 Imitación de movimientos muy lejos del sensor Leap Motion
Objetivo Encontrar la distancia máxima hacia el sensor Leap Motion
que realiza detección de movimiento correctamente.
Descripción Tomando en cuenta que el límite superior oficial de detección
es 61 cm, se realizaron tomas a 50 cm y 60 cm de distancia
Resultado esperado Basados en la documentación oficial se espera que todas
las tomas sean fieles a la realidad.
Resultado obtenido Las tomas realizadas a 50 cm (Figura 5.6a) fueron exitosas.
Por el contrario, la toma desde 60 cm (Figura 5.6b) no logra
detectar una ni ambas manos. De manera inesperada,
pues contradice la documentación oficial.
A B
Figura 5.6. Tomas para una y ambas manos realizadas a: a) 50 cm, b) 60 cm.
95
Además de experimentar con diferentes distancias, otro caso real al que pueden enfrentarse los
sensores de realidad aumentada utilizados en el sistema es precisamente variaciones de iluminación
del ambiente. Por tal motivo, se realizaron las siguientes dos pruebas, donde se corrobora de manera
experimental el comportamiento de los sensores frente a iluminaciones drásticamente distintas. En
la Tabla 5.8 se presenta el caso de iluminación excesiva.
Figura 5.7. Iluminación excesiva frente a: a) sensor Kinect y b) sensor Leap Motion.
96
En la Tabla 5.9 se presentan los experimentos realizados con iluminación prácticamente nula. Es
decir, cuando la escena está en completa oscuridad.
A B
Figura 5.8. Sensores operando bajo nula iluminación: a) Kinect, b) Leap Motion.
Para finalizar los experimentos con los sensores de realidad aumentada, se decidió hacer dos
pruebas un tanto peculiares. La primera de ellas (Tabla 5.10) muestra el comportamiento de los
sensores ante superposición de extremidades o manos.
97
Tabla 5.10. Registro de la novena prueba realizada
A C
Figura 5.9. Superposición de objetos: a) tubo PVC situado entre persona y Kinect,
b) mano sosteniendo un lapicero y c) mano sosteniendo un lapicero y un plumón.
En la Tabla 5.11 se presenta el último experimento relacionado con sensores de realidad aumentada.
La presencia de espejos y la detección de las extremidades superiores y manos mediante el reflejo
que éstos proyectan, podrían dar pie a alguna funcionalidad útil en el futuro.
98
Tabla 5.11. Registro de la décima prueba realizada
A B
99
Tabla 5.12. Registro de la undécima prueba realizada
Duración Tamaño archivo Cantidad registros Registros Kinect Registros Leap Motion
1 min 598 KB 525 234 291
5 min 3.09 MB 2919 1336 1583
10 min 5.26 MB 5313 2288 3025
En la Tabla 5.14 se presenta el caso de que el usuario del sistema desee grabar secuencias de
movimiento durante cinco minutos de manera consecutiva.
Finalmente, en la Tabla 5.15 se presenta la situación poco probable de que la persona desee grabar
durante diez minutos consecutivos.
100
Tabla 5.15. Registro de la décimo tercer prueba realizada
Para terminar las pruebas realizadas al sistema, es necesario realizar experimentos con el módulo
correspondiente al reconocimiento de objetos. Cabe mencionar que se realizaron 90 pruebas en
circunstancias ideales, dichas pruebas se encuentran documentadas con amplio detalle en el literal 6
del apartado 4.4.7.
Las siguientes dos pruebas corroboran de manera experimental la clasificación de figuras y colores
frente a iluminaciones drásticamente distintas. En la Tabla 5.16 se presenta el caso de iluminación
excesiva.
101
Figura 5.11. Fotografías tomadas con excesiva iluminación.
En la Tabla 5.17 se presentan los experimentos realizados con iluminación prácticamente nula. Es
decir, cuando la escena está en casi completa oscuridad.
102
Figura 5.12. Fotografías tomadas con iluminación casi nula.
Las siguientes dos pruebas se relacionan con la ausencia de figuras a reconocer. En la Tabla 5.18 se
presentan los resultados de intentar clasificar figuras inexistentes.
103
Figura 5.13. Fotografías tomadas con ninguna figura en escena.
104
Figura 5.15. Fotografías con figuras del mismo color de la escena.
La última prueba realizada se refiere al clasificador de figuras que detecta en base a distancia.
Cabe mencionar que se realizaron 35 pruebas en circunstancias ideales, dichas pruebas se
encuentran documentadas con amplio detalle en el literal 6 del apartado 4.4.7.
105
106
CAPÍTULO 6. CONCLUSIONES Y RECOMENDACIONES
6.1 Conclusiones
Los sensores de realidad aumentada proveen mediciones con un alto grado de precisión, por lo
que se pueden realizar cálculos con mayor cantidad de cifras significativas, tanto en la
plataforma de escritorio como en el software de cada placa Arduino.
Mediante la utilización de cinco cifras decimales en el cálculo de los ángulos de las manos y dos
cifras en el caso de los brazos se utiliza el 100% de la precisión de ambos tipos de servomotores.
Mientras que anteriormente se utilizaban el 90% y el 9.7% de la precisión de los brazos y manos
respectivamente.
El tiempo de retraso desde que el usuario realiza una acción hasta que esta se visualiza en el
tablero indicador es de 109.5 ms aproximadamente.
La creación de archivos de valores separados por coma permite almacenar en disco duro gran
cantidad de coordenadas y ángulos de las extremidades superiores de la persona. Esta
información tiene un inmenso potencial en futuras aplicaciones, como por ejemplo: corrección
de la postura, traducción de lenguaje de señas, terapias de recuperación de la motricidad fina y
gruesa de gente que ha sufrido accidentes, entre otros.
La imitación en tiempo real de secuencias de movimientos tanto para brazos como para manos,
se realiza de manera exitosa. Cumpliéndose para ambas extremidades superiores.
Se demostró que es posible integrar tecnologías distintas entre sí para cumplir un único fin,
y lograr que trabajen en conjunto de manera ordenada. Referente a hardware, dos sensores de
realidad aumentada y un tablero indicador implementado usando Arduino. Y respecto a
107
software, una plataforma de escritorio desarrollada en dos lenguajes de programación diferentes
(C# y C++) donde se implementan modelos de minería de datos y visión por computadora.
La sustitución del guante de control por el sensor Leap Motion presenta una serie de ventajas,
que incluyen mayor precisión en la toma de datos y rango de movimientos detectados; así como
menor precio e incomodidad para el usuario a la hora de interactuar con él. De esta forma,
se logró reducir el precio a un tercio del original (si tuvieran que construirse dos guantes).
6.2 Recomendaciones
Ante la necesidad de realizar tareas que requieren de mayor precisión o de un mayor rango de
interacción que el ofrecido por la actual plataforma de escritorio, se recomienda realizar pruebas
con el SDK Orion del sensor Leap Motion.
Para que la detección de los movimientos de las extremidades superiores se realice con mayor
precisión y que los datos obtenidos sean más confiables, se deben estudiar las ventajas que la
implementación de un sensor Kinect for Windows Versión 2 podría aportar al sistema.
108
Se recomienda la construcción de un segundo brazo robot que corresponda a la extremidad
superior izquierda, para poder utilizar todos los datos que provee la plataforma de escritorio
desarrollada en este proyecto.
109
110
GLOSARIO
Clase (programación): abstracción de un ente del mundo real. Contiene una serie de características
y tareas, conocidas como atributos y métodos respectivamente. Define una plantilla que permite la
creación de otros elementos conocidos como objetos.
Clase (clustering): grupo de muestras que poseen características similares dentro de una serie de
datos.
D
Demonio: en los sistemas operativos Unix, es un proceso informático que se ejecuta en segundo
plano y de manera indefinida. Se encarga de realizar tareas específicas de forma periódica o como
respuesta a ciertos eventos del sistema. No posee interacción directa con el usuario.
Led: dispositivo emisor de luz, frecuentemente utilizado para comprobar el funcionamiento de los
circuitos.
Microcontrolador: circuito integrado programable que posee una memoria donde almacena una
serie de instrucciones que controla el funcionamiento de una tarea específica.
Objeto (programación): instancia de una clase. Representa una entidad en particular del mundo real.
Open-source: modelo de distribución de software y hardware que permite el libre acceso al código
fuente de ciertos programas, de forma que estos puedan ser modificados sin las restricciones que
impone una licencia. Se le conoce también como código abierto.
111
P
Píxel: unidad mínima que compone una imagen digital que es representada mediante una matriz
bidimensional. Contiene información sobre el brillo y color de una escena.
Radián: en trigonometría, consiste en una unidad de ángulo plano que pertenece al sistema
internacional de unidades. Equivale a un ángulo con un arco que posee la misma longitud que el
radio de una circunferencia.
112
REFERENCIAS
CATUHE, D. (2012). Programming with the Kinect for Windows Software Developtment Kit.
Redmond: Microsoft Press.
DA SILVA, M., TEIXEIRA, N., DA FONSECA, R. y FREIRE, S. (2016). Mão robótica. Escola
Senai “Roberto Simonsen”, São Paulo, Brasil.
FLAMENCO, F., MARROQUÍN, R., PORTILLO, J. y RIVAS, G. (2017). Brazo robot controlado
por gestos (Tesis de pregrado). UCA, Antiguo Cuscatlán, El Salvador.
HAN, J. & KAMBER, M. (2006). Data Mining: Concepts and Techniques. San Francisco: Morgan
Kaufmann.
JANA, A. (2012). Kinect for Windows SDK Programming Guide. Birmingham: Packt Publishing.
KLETTE, R. (2014). Concise Computer Vision: An Introduction into Theory and Algorithms.
Londres: Springer.
KURNIAWAN, A. (2017). Arduino Programming with .NET and Sketch. Nueva York: Apress.
113
MCNEIL, S. (2017). Sign language static gesture recognition using leap motion (Tesis de
maestría). Western Carolina University, Estados Unidos.
NIXON, M. y AGUADO, A. (2012). Feature Extraction & Image Processing for Computer Vision.
Reino Unido: Elsevier.
RAMOS, E., CASTRO, C. y JAWORSKI, P. (2012). Arduino and Kinect Projects. New York:
Apress.
WITTEN, I. y FRANK, E. (2005). Data Mining: Practical Machine Learning Tools and
Techniques. San Francisco: Elsevier.
114
FUENTES ELECTRÓNICAS
ALEGRE, E., PAJARES, G., DE LA ESCALERA, A. (2016). Conceptos y Métodos en Visión por
Computador. Recuperado de https://intranet.ceautomatica.es/sites/default/files/upload/8/files/
ConceptosyMetodosenVxC.pdf (Consulta 20/06/2018).
115
COLGAN, A. (25 de abril de 2013). How Does the Leap Motion Controller Work? [Mensaje en un
blog]. Recuperado de http://blog.leapmotion.com/hardware-to-software-how-does-the-leap-motion-
controller-work/ (Consulta: 20/04/2018).
DELTAKOSH. (2011). Unleash the power of Kinect for Windows SDK! Recuperado de
https://www.eternalcoding.com/?p=1663 (Consulta: 10/05/2018).
FELTHAM, J. (17 de febrero de 2016). Leap Motion Announces Orion For Faster, More Accurate
VR Hand Tracking. VR Focus. Recuperado de https://www.vrfocus.com/2016/02/leap-motion-
announces-orion-for-faster-more-accurate-vr-hand-tracking/ (Consulta: 24/06/2018).
GRAGLIA, D. (11 de julio de 2016). Niantic: la empresa que sacó los Pokémon a las calles y a
millones de jugadores detrás. Univision Noticias.
Recuperado de https://www.univision.com/noticias/desde-silicon-valley/niantic-la-empresa-que-
saco-los-pokemon-a-las-calles-y-a-millones-de-jugadores-detras (Consulta: 29/06/2018).
HOLLISTER, S. (12 de enero de 2012). PlayStation Vita plays augmented reality soccer (hands-on
video). The Verge. Recuperado de https://www.theverge.com/2012/1/12/2701266/playstation-vita-
plays-augmented-reality-soccer-hands-on-video (Consulta: 29/06/2018).
KINECT FOR WINDOWS TEAM (2012a). Starting February 1, 2012: Use the Power of Kinect
for Windows to Change the World. Recuperado de https://blogs.msdn.microsoft.com/
kinectforwindows/2012/01/09/starting-february-1-2012-use-the-power-of-kinect-for-windows-to-
change-the-world/ (Consulta: 20/05/2018).
116
KINECT FOR WINDOWS TEAM. (2012b). Near Mode: What it is (and isn’t). Recuperado de
https://blogs.msdn.microsoft.com/kinectforwindows/2012/01/20/near-mode-what-it-is-and-isnt/
(Consulta: 22/05/2018).
KINECT FOR WINDOWS TEAM. (2014). The Kinect for Windows v2 sensor and free SDK 2.0
public preview are here. Recuperado de https://blogs.msdn.microsoft.com/kinectforwindows/
2014/07/15/the-kinect-for-windows-v2-sensor-and-free-sdk-2-0-public-preview-are-here/
(Consulta: 22/05/2018).
LEAP MOTION INC. (2013). Leap Motion Launches World's Most Accurate 3-D Motion Control
Technology for Computing. Recuperado de https://www.leapmotion.com/news/leap-motion-
launches-worlds-most-accurate-3-d-motion-control-technology-for-computing
(Consulta: 14/05/2018).
LEAP MOTION INC. (2017). Get Started with Our SDK. Recuperado de
https://developer.leapmotion.com/get-started (Consulta: 24/06/2018).
LEAP MOTION INC. (Sin fecha A). System Architecture. Recuperado de https://developer-
archive.leapmotion.com/documentation/v2/csharp/devguide/Leap_Architecture.html
(Consulta: 15/05/2018).
LEAP MOTION INC. (Sin fecha B). Leap Motion SDK and Plugin Documentation. Recuperado de
https://developer-archive.leapmotion.com/documentation/index.html (Consulta: 15/05/2018).
LEAP MOTION INC. (Sin fecha C). API Overview. Recuperado de https://developer-
archive.leapmotion.com/documentation/v2/csharp/devguide/Leap_Overview.html
(Consulta: 25/05/2018).
LEAP MOTION INC. (Sin fecha D). Camera Images. Recuperado de https://developer-
archive.leapmotion.com/documentation/v2/csharp/devguide/Leap_Images.html
(Consulta: 24/06/2018).
117
LEAP MOTION INC. (Sin fecha F). Vector. Recuperado de https://developer-
archive.leapmotion.com/documentation/v2/csharp/api/Leap.Vector.html#csharpclass_leap_1_1_vec
tor (Consulta: 30/06/2018).
MICROSOFT. (2013). Kinect for Windows SDK v1.8. Recuperado de: https://www.microsoft.com/
en-us/download/details.aspx?id=40278 (Consulta 30/05/2018).
MILLER, P. (17 de septiembre de 2017). The iPhone X’s notch is basically a Kinect. The Verge.
Recuperado de https://www.theverge.com/circuitbreaker/2017/9/17/16315510/iphone-x-notch-
kinect-apple-primesense-microsoft (Consulta: 7/06/2018).
NINTENDO (2018). Tarjetas RA: Mira tus juegos en el mundo. Recuperado de:
https://www.nintendo.com/es_LA/3ds/ar-cards (Consulta: 04/07/2018).
PESCO, D. y BORTOLOSSI, H. (Sin fecha). Matrices and Digital Images. Recuperado del sitio de
Internet de Fluminense Federal University, Institute of Mathematics and Statistics:
http://dmuw.zum.de/images/6/6d/Matrix-en.pdf (Consulta: 20/06/2018).
118
SZELISKI, R. (2010). Computer Vision: Algorithms and Applications. Recuperado de
http://szeliski.org/Book/drafts/SzeliskiBook_20100903_draft.pdf (Consulta: 19/06/2018).
TOWERPRO (2014). MG946R. Recuperado de http://www.towerpro.com.tw/product/mg946r/
(Consulta 08/09/2018).
119
ANEXOS
ANEXO A. Código fuente C++: clasificador en base a distancia
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/ml/ml.hpp>
#include <iostream>
#include <fstream>
struct caracteristicas {
double area, perimetro;
int ancho, alto;
};
int main() {
string ruta = "imagenKinect.jpg";
cout << "Analizando imagen: " << ruta << endl;
Mat imagenOriginal = imread(ruta);
A-1
//Revisar cada figura (contorno) detectada
for (size_t idx = 0; idx < contours.size(); idx++) {
double area = contourArea(contours[idx], false);
A-2
ANEXO B. Código fuente C++: clasificador en base a colores
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <opencv2/ml/ml.hpp>
#include <iostream>
#include <fstream>
#include <cmath>
struct dupla {
int indice, magnitud;
//indice: 0(B), 1(G), 2(R), 3(Gray)
//magnitud: promedio || umbral
};
struct caracteristicas {
int colorM, colorC;
//0(negro) 1(blanco) 2(Red) 3(Green) 4(Blue)
int AreaCHull_Area, AreaTMin_Area;
double AreaElipse_Area;
};
B-1
//Centro
for (int i = 96; i < 104; i++) {
rowPtr = unaImagen.row(i).data;
for (int j = 96; j < 104; j++) {
acumuladorCentro[0] += rowPtr[j*cn + 0]; // B
acumuladorCentro[1] += rowPtr[j*cn + 1]; // G
acumuladorCentro[2] += rowPtr[j*cn + 2]; // R
}
}
//Borde inferior
rowPtr = unaImagen.row(198).data;
for (int j = 2; j < 198; j++)
acumuladorMarco[3] += rowPtr[j*cn + 0]; // gray
//Centro
for (int i = 96; i < 104; i++) {
rowPtr = unaImagen.row(i).data;
for (int j = 96; j < 104; j++)
acumuladorCentro[3] += rowPtr[j*cn + 0]; // gray
}
B-2
else if (promedioCentro[0] - promedioCentro[2] >= 30)
arreglo[iSeccion].colorC = 4;
else
arreglo[iSeccion].colorC = 0;
//Calcular diferencias
struct dupla distancias[4];
for (int i = 0; i < 4; i++) {
distancias[i].indice = i;
distancias[i].magnitud = abs(promedioMarco[i] - promedioCentro[i]);
}
//Ordenarlo
for (int x = 1; x < 4; x++)
for (int y = 0; y < 4 - 1; y++)
if (distancias[y].magnitud < distancias[y + 1].magnitud) {
struct dupla temp;
temp.indice = distancias[y].indice;
temp.magnitud = distancias[y].magnitud;
int main() {
string ruta = "imagenKinectColores.jpg";
cout << "Analizando imagen: " << ruta << endl;
Mat imagenOriginal = imread(ruta);
Mat seccionICD;
Mat r(imagenOriginal, Rect(0 + 220 * i, 180, 200, 200));
r.copyTo(seccionICD);
B-3
struct dupla umbral = calcularUmbral(seccionICD, i);
cout << "Umbral[indice] = " << umbral.indice << endl;
cout << "Umbral[magnitud] = " << umbral.magnitud << endl;
//Calcular Ellipse
RotatedRect elipse = fitEllipse(contours[idx]);
//caracteristicas
double areaElipse = 3.14159*elipse.size.width
*elipse.size.height / 4;
B-4
//Almacenar resultados en archivo
cout << "Almacenando resultados en archivo..." << endl;
ofstream o_archivo;
o_archivo.open("resultadosCaracterizacionColores.csv");
for (int i = 0; i < 3; i++) {
o_archivo << arreglo[i].colorM << "," << arreglo[i].colorC << ",";
o_archivo << arreglo[i].AreaCHull_Area << "," <<
arreglo[i].AreaTMin_Area << ",";
o_archivo << arreglo[i].AreaElipse_Area << endl;
}
o_archivo.close();
B-5
ANEXO C. Código fuente Arduino: control de brazo derecho
C-1
C-2
C-3
ANEXO D. Código fuente Arduino: control de brazo izquierdo
D-1
ANEXO E. Código fuente Arduino: control de mano derecha
E-1
E-2
E-3
E-4
ANEXO F. Código fuente Arduino: control de mano izquierda
F-1
F-2
ANEXO G. Pantallas plataforma de escritorio.
Pestaña de inicio.
Pestaña de conexión.
G-1
Pestaña de imitación.
Pestaña de grabación.
Pestaña de reproducción.
G-2
Pestaña de reconocimiento de objetos.
Pestaña de configuración.
G-3
ANEXO H. Diagramas de circuitos del tablero indicador de ledes.
B C
B
BRAZO DERECHO
D
A
A
E
D
A
G
A
F
A
Partes del circuito correspondiente al brazo derecho: a) placa Arduino Mega, b) ledes indicadores
de los ángulos de abertura del brazo, c) ledes indicadores de las posiciones de objetos en módulo de
reconocimiento, d) módulo Bluetooth, e) pantalla LCD, f) interfaz I2C, g) botones para seleccionar
ángulos a visualizar en pantalla LCD.
H-1
BRAZO IZQUIERDO
A
C
B
MANO IZQUIERDA
A B
C
B
H-2
B
MANO DERECHA
C
Partes del circuito correspondiente al mano derecha: a) placa Arduino Mega, b) ledes indicadores de
los ángulos de abertura de cada dedo, c) módulo Bluetooth, d) pantalla LCD, e) interfaz I2C,
f) botones para seleccionar ángulos a visualizar en pantalla LCD.
H-3