UNIVERSIDAD TECNOLÓGICA...

108
UNIVERSIDAD TECNOLÓGICA EQUINOCCIAL FACULTAD DE CIENCIAS DE LA INGENIERÍA E INDUSTRIAS CARRERA DE INGENIERÍA MECATRÓNICA SISTEMA DE CONTROL DE MANO ROBÓTICA MEDIANTE SENSOR DE REALIDAD VIRTUAL TRABAJO PREVIO A LA OBTENCIÓN DEL TÍTULO DE INGENIERO MECATRÓNICO DAVID ALEJANDRO VEGA PÉREZ DIRECTOR: DANIEL ALEJANDRO MIDEROS MORA PhD. Quito, julio 2018

Transcript of UNIVERSIDAD TECNOLÓGICA...

  • UNIVERSIDAD TECNOLÓGICA EQUINOCCIAL

    FACULTAD DE CIENCIAS DE LA INGENIERÍA E

    INDUSTRIAS

    CARRERA DE INGENIERÍA MECATRÓNICA

    SISTEMA DE CONTROL DE MANO ROBÓTICA MEDIANTE

    SENSOR DE REALIDAD VIRTUAL

    TRABAJO PREVIO A LA OBTENCIÓN DEL TÍTULO

    DE INGENIERO MECATRÓNICO

    DAVID ALEJANDRO VEGA PÉREZ

    DIRECTOR: DANIEL ALEJANDRO MIDEROS MORA PhD.

    Quito, julio 2018

  • © Universidad Tecnológica Equinoccial 2018.

  • FORMULARIO DE REGISTRO BIBLIOGRÁFICO

    PROYECTO DE TITULACIÓN

    DATOS DE CONTACTO

    CÉDULA DE IDENTIDAD: 1720351046

    APELLIDO Y NOMBRES: VEGA PÉREZ DAVID ALEJANDRO

    DIRECCIÓN: TUMBACO, PIO JARAMILLO Y JORGE

    ICAZA E28-88

    EMAIL: [email protected]

    TELÉFONO FIJO: 022373691

    TELÉFONO MOVIL: 0992517444

    DATOS DE LA OBRA

    TITULO: SISTEMA DE CONTROL DE MANO

    ROBÓTICA MEDIANTE SENSOR DE

    REALIDAD VIRTUAL

    AUTOR O AUTORES: Vega Pérez David Alejandro

    FECHA DE ENTREGA DEL PROYECTO

    DE TITULACIÓN:

    2018-04-18

    DIRECTOR DEL PROYECTO DE

    TITULACIÓN:

    DANIEL ALEJANDRO MIDEROS MORA

    PhD.

    PROGRAMA PREGRADO POSGRADO

    TITULO POR EL QUE OPTA: Ingeniero en Mecatrónica

    RESUMEN: Mínimo 250 palabras Debido a la necesidad de precisión al controlar sistemas robóticos de una manera natural se propone implementar un sistema de control de lazo abierto sobre una mano robótica mediante un sensor de movimiento 3D y control de gestos. Se utilizó la metodología de modelo en V siendo un estándar para el diseño de sistemas mecatrónicos donde las etapas generales son los requerimientos del sistema, diseño de sistemas, diseño especifico e integración de sistemas, resultando el producto final. El modelo de datos creado obtiene los parámetros para el controlador de tareas sobre los datos en el sistema conectado al sensor y en el ordenador, este envía los datos hacia la interfaz gráfica como también al sistema de control de los actuadores. El ángulo enviado es mapeado dentro del micro-controlador para acoplarse a los rangos de movimiento del prototipo físico. Los datos obtenidos como

    X

  • muestra fueron analizados y así se obtuvo resultados estadísticos como los son los valores promedio y variación porcentual de cada vector de posición, manteniendo la mano estatica sobre el sensor. La interfaz gráfica muestra los datos que arroja el sensor y los transforma en vectores, una vez que se obtienen estos datos se los va mostrando cuadro por cuadro dependiendo de la unidad de procesamiento gráfico que el ordenador posea para un mejor desempeño de la aplicación. Finalmente se integró los sistemas desarrollados en conjunto para controlar el prototipo físico de manera que la adquisición de datos esté vinculada con el control del prototipo físico y también tenga sincronización en la interfaz. La respuesta del prototipo físico generada por el sistema de control y envío de datos implementado para Leap Motion, fue calibrada con posiciones directamente hacia los dedos del prototipo.

    PALABRAS CLAVES: Interfaz gráfica del usuario,

    interacción humano-computadora,

    radiotransmisión, comunicación

    serial, emisor, receptor, sensor.,

    mano robótica, Leap motion.

    ABSTRACT:

    Due to the need of precision when controlling robotic systems in a natural way it is proposed to implement an open loop control system on a robotic mechanical hand prototype using a 3D motion sensor and gesture control. The V model methodology was used being a standard for the design of mechatronic systems where the general stages are the system requirements, system design, specific design and system integration, resulting in the final product. The data model created obtains the parameters

  • DEDICATORIA

    Dedico el presente trabajo a mi padre por brindarme su apoyo y cariño

    incondicional e impulsarme a mejorar en todos los aspectos posibles de mi

    vida, por siempre creer en mí y ser mi guía en todas las etapas de mi vida, sin

    el nada hubiera sido posible este es tanto su logro como mío. A mi madre por

    haberme enseñado a ser una persona de buen corazón y haberme inculcado

    el ser un buen ser humano, este logro y cada uno de los que vienen es en su

    memoria y su cariño. A mi hermano por aconsejarme, acompañarme y estar

    siempre pendiente, en todo lo que puede. A mis amigos que son la familia que

    elegí y brindarme su apoyo en todo lo que pueden.

  • AGRADECIMIENTOS

    Agradezco este logro a Dios por jamás abandonarme ni dejarme a la deriva,

    también estoy muy agradecido con mi padre por ser el pilar de mi familia,

    siempre estar presente y pendiente de mí, para darme su apoyo. A mi

    hermano por el apoyo constante así como a mis amigos por ser un factor

    importante y un aliento para llegar a esta meta, agradezco a mis maestros que

    sin su sabiduría y enseñanzas esto no sería posible.

  • i

    INDICE DE CONTENIDO

    PÁGINA RESUMEN ..................................................................................................... 1

    ABSTRACT ................................................................................................... 2

    1. INTRODUCCIÓN ................................................................................ 3

    Arquitectura del sistema de adquisición de datos Leap Motion® ................ 8

    Sistema de comunicación para aplicaciones nativas .................................. 9

    Mano Robótica .......................................................................................... 11

    2. METODOLOGÍA Y DISEÑO ............................................................... 9

    Requerimientos funcionales ...................................................................... 18

    Restricciones del sistema .......................................................................... 18

    Especificaciones del sistema .................................................................... 19

    Análisis funcional ...................................................................................... 19

    Diseño conceptual ..................................................................................... 22

    Arquitectura Modelo – Vista - Controlador ................................................ 24

    Diseño especifico sistema electrónico y de control ................................... 38

    Diagrama de procesos para recepción de señal y control de

    Servomotores en MCU .............................................................................. 46

    Mantenimiento y calibración del prototipo físico ........................................ 50

    Integración de sistemas ............................................................................ 50

    Validación de sistemas .............................................................................. 51

    3. RESULTADOS Y DISCUSIÓN ......................................................... 45

    4. CONCLUSIONES Y RECOMENDACIONES .................................... 70

    BIBLIOGRAFÍA ........................................................................................... 71

  • ii

    INDICE DE TABLA

    PÁGINA

    Tabla 1. Comparativa de lenguajes de alto nivel ......................................... 10

    Tabla 2. Comparación Modelos Mecánicos Existentes de Mano Robótica . 11

    Tabla 3. Datos de Servo-motor.................................................................... 38

    Tabla 4. Comparativa placas con MCU para control ................................... 41

    Tabla 5. Datos promedio de "huesos" y dedos obtenidos a partir de SDK

    Leap Motion ................................................................................................. 53

    Tabla 6. Datos de variación porcentual de "huesos" y dedos, en muestra

    de datos Leap Motion - mano abierta .......................................................... 55

    Tabla 7. Datos estadísticos tiempo de envío de datos ordenador – Serial

    Com/Xbee maestro ...................................................................................... 61

    Tabla 8. Datos estadísticos de tiempo de respuesta Xbee esclavo - MCU . 64

    Tabla 9. Datos estadísticos de tiempo de respuesta de todo el sistema ..... 66

    Tabla 10. Porcentaje de desviación del dedo físico vs datos de Leap

    Motion .......................................................................................................... 67

  • iii

    INDICE DE FIGURAS

    PÁGINA

    Figura 1. Campo de Vista Leap Motion ......................................................... 5

    Figura 2. Partes de Sistema DAQ ................................................................. 6

    Figura 3. Arquitectura del Sistema para interfaz de aplicaciones Nativas ..... 9

    Figura 4. Demora con USB 2 60Hz en pantalla y sincronización de

    pantalla encencida ....................................................................................... 13

    Figura 5. Demora con USB 3 60Hz en pantalla y sincronización de

    pantalla apagada ......................................................................................... 13

    Figura 6. Esquema de Proyecto .................................................................. 14

    Figura 7. Desviación (%) Leap Motion vs Dedo .......................................... 15

    Figura 8. Velocidad de respuesta Sistema Zigbee ...................................... 15

    Figura 9. Fuerza ejercida por cada dedo mano robótica UTE ..................... 16

    Figura 10. Metodología en V con sistemas embebidos ............................... 17

    Figura 11. Análisis Funcional del Proyecto ................................................. 21

    Figura 12. Diseño Conceptual del Proyecto ................................................ 23

    Figura 13. Arquitectura MVC ....................................................................... 24

    Figura 14. Modelo de Datos Leap Motion ................................................... 25

    Figura 15. Estructura de clase LeapApp .................................................... 26

    Figura 16. Controlador de Aplicación .......................................................... 27

    Figura 17. Diseño de interfaz gráfica de aplicación para el ordenador

    JavaFx ......................................................................................................... 29

    Figura 18. Jerarquía objetos aplicación JavaFx .......................................... 30

    Figura 19. Cilindro con rotación eje Z ......................................................... 34

    Figura 20. Flujo de aplicación con arquitectura MVC .................................. 37

    Figura 21. Dimensiones de Servo Motor ..................................................... 38

    Figura 22. Captura de Configuración Xbee Master&Slave 1 ....................... 42

    Figura 23. Captura de Configuración Xbee Master&Slave 2 ....................... 43

    Figura 24. Captura de Configuración Xbee Master&Slave 3 ....................... 44

    Figura 25. Captura de Configuración Xbee Master&Slave 4 ....................... 45

    Figura 26. Captura de Configuración Xbee Master&Slave 6 ....................... 46

    Figura 27. Simulación de Sistema electrónico y de Control con

    ATMEGA328 - MCU Arduino Nano .............................................................. 46

    Figura 28. Clase ServoBarrido Arduino ....................................................... 47

    Figura 29. Flujo de Control y recepción de señal ........................................ 49

    Figura 30. Sistema de coordenadas cartesianas Leap Motion.................... 56

    Figura 31. Gráfico de vectores de dedo Índice en el espacio sistema de

    coordenadas (X, Y, Z) .................................................................................. 57

    Figura 32. Tipo de "Hueso" SDK Leap Motion ............................................ 58

    Figura 33. Vista de medición de dedo índice en sistema de coordenadas

    3D (X, Y, Z) .................................................................................................. 58

  • iv

    Figura 34. Interfaz gráfica para visualización de datos JavaFx, toma de

    muestras ...................................................................................................... 59

    Figura 35. a). Ensamble final Mano Robótica Vista isométrica – b).

    Ensamble final Mano Robótica Vista lateral ................................................. 60

    Figura 36. Ensamble de Prototipo Físico con Motores ................................ 60

    Figura 37. Prueba de movimiento con prototipo físico y software

    desarrollado en JavaFx ................................................................................ 60

    Figura 38. Pruebas de movimiento del conjunto total del proyecto a)

    Mano Abierta – b) Mano cerrada ................................................................. 61

    Figura 39. Datos estadísticos tiempo de respuesta -Serial Com. CPU -

    Xbee (Master) .............................................................................................. 62

    Figura 40. Datos estadísticos tiempo de respuesta - Xbee Com. (Slave) -

    MCU ............................................................................................................. 65

    Figura 41. Datos estadísticos tiempo de respuesta todo el sistema ........... 66

    Figura 42. Medida de angulos en variación de dedos a) 15° - b)45° .......... 68

  • v

    INDICE DE ANEXOS

    PÁGINA

    ANEXOS ...................................................................................................... 74

    ANEXO 1 ..................................................................................................... 74

    Detalle lectura fin de posición huesos ....................................................... 74

    ANEXO 2 ..................................................................................................... 76

    Detalle variación porcentual en pos. de huesos ........................................ 76

    ANEXO 3 ..................................................................................................... 78

    Porcentaje de desviación del dedo físico vs datos de leap motion ........... 78

    ANEXO 4 ..................................................................................................... 78

    Dispersión respuesta com serial ............................................................... 78

    ANEXO 5 ..................................................................................................... 79

    Medición de ángulos resultantes en prototipo físico .................................. 79

  • 1

    RESUMEN

    Debido a la necesidad de precisión al controlar sistemas robóticos de una

    manera natural se propone implementar un sistema de control de lazo abierto

    sobre una mano robótica mediante un sensor de movimiento 3D y control de

    gestos. Se utilizó la metodología de modelo en V siendo un estándar para el

    diseño de sistemas mecatrónicos donde las etapas generales son los

    requerimientos del sistema, diseño de sistemas, diseño especifico e

    integración de sistemas, resultando el producto final. El modelo de datos

    creado obtiene los parámetros para el controlador de tareas sobre los datos

    en el sistema conectado al sensor y en el ordenador, este envía los datos

    hacia la interfaz gráfica como también al sistema de control de los actuadores.

    El ángulo enviado es mapeado dentro del micro-controlador para acoplarse a

    los rangos de movimiento del prototipo físico. Los datos obtenidos como

    muestra fueron analizados y así se obtuvo resultados estadísticos como los

    son los valores promedio y variación porcentual de cada vector de posición,

    manteniendo la mano estatica sobre el sensor. La interfaz gráfica muestra los

    datos que arroja el sensor y los transforma en vectores, una vez que se

    obtienen estos datos se los va mostrando cuadro por cuadro dependiendo de

    la unidad de procesamiento gráfico que el ordenador posea para un mejor

    desempeño de la aplicación. Finalmente se integró los sistemas desarrollados

    en conjunto para controlar el prototipo físico de manera que la adquisición de

    datos esté vinculada con el control del prototipo físico y también tenga

    sincronización en la interfaz. La respuesta del prototipo físico generada por el

    sistema de control y envío de datos implementado para Leap Motion, fue

    calibrada con posiciones directamente hacia los dedos del prototipo.

    Palabras clave: interfaz gráfica del usuario, interacción humano-computadora,

    radiotransmisión, comunicación serial, emisor, receptor, sensor., mano

    robótica, Leap motion.

  • 2

    ABSTRACT

    Due to the need of precision when controlling robotic systems in a natural way

    it is proposed to implement an open loop control system on a robotic

    mechanical hand prototype using a 3D motion sensor and gesture control. The

    V model methodology was used being a standard for the design of mechatronic

    systems where the general stages are the system requirements, system

    design, specific design and system integration, resulting in the final product.

    The data model created obtains the parameters for the task controller on the

    data in the system connected to the sensor and in the computer, which sends

    the data to the graphic interface as well as to the control system of the

    actuators. The angle sent is mapped within the microcontroller to fit the ranges

    of motion of the physical prototype. The data obtained as a sample were

    analyzed and thus statistical results were obtained, such as the average

    values and percentage variation of each position vector, keeping the static

    hand on the sensor. The graphical interface shows the data thrown by the

    sensor and transforms them into vectors, once these data are obtained they

    are shown frame by frame depending on the graphic processing unit that the

    computer has for a better performance of the application. Finally, the systems

    developed together were integrated to control the physical prototype so that

    the data acquisition is linked to the control of the physical prototype and also

    has synchronization in the interface. The response of the physical prototype

    generated by the control and data delivery system implemented for Leap

    Motion was calibrated with positions directly towards the fingers of the

    prototype.

    Keywords: graphical user interface, human-computer interaction, radio

    transmission, serial communication, transmitter, receiver, sensor, Robotic

    hand, Leap motion.

  • 1. INTRODUCCIÓN

  • 3

    La electrónica y el control en contexto de manipulación de sistemas en los

    últimos años se ha visto soportada de diferentes fuentes científicas para

    mejorar la manera de interactuar entre el usuario y los sistemas robóticos o

    conjuntos de actuadores.

    Debido a la necesidad de precisión al controlar sistemas robóticos, de una

    manera natural, es decir sin artefactos que deban colocarse físicamente o se

    deban manipular con contacto físico.

    Existen diferentes variaciones de diseños para control de Mano robótica, entre

    estos esta la creación de un guante que incluye sensores de flexión en cada

    dedo, para poder obtener la señal del movimiento o los vectores aproximados

    de la posición de cada dedo. (Zubrycki & Granosik, 2014)

    En comparación con la opción de un guante con sensores, o un sensor de

    gestos electromiógrafo se propuso implementar un sistema de control con un

    sensor de gestos 3D, que permita el movimiento de una mano robótica que

    seguirá los movimientos de la mano normal solo con la lectura del sensor.

    De los diseños revisados como son: Modelo de control con señales EMG

    (Micera, Carpaneto, & Raspopovic, 2010) o el modelo con sensores en un

    guante (Zubrycki & Granosik, 2014), son modelos que funcionan directamente

    sin procesamiento de datos o sin GUI.

    De las diferentes maneras observadas en el control de una mano robótica, se

    pudo analizar que no se ha encontrado un modelo con la misma arquitectura,

    entre el sistema de control de lazo abierto.

    La adquisición, procesamiento de datos y sistema de envío de datos, de

    manera que permita el manejo sin utilizar artefactos en la mano que controla

    el modelo robótico.

    También se observó que con sensores analógicos, la calibración viene a ser

    una etapa importante, y en vista de que son equipos físicos y en constante

    manipulación la tendencia a perder precisión es repetitiva.

    Como utilidad principal la elaboración e implementación de este sistema se

    tiene la obtención de valores vectoriales en un plano con referencia inicial en

    el centro del sensor y posiciones que le corresponden a cada parte de la

    mano.

    Se observó en el prototipo físico el momento que se tiene el sistema en línea

    y se coloca la mano sobre el sensor, la transferencia de datos y posiciones en

  • 4

    tiempo “real” hacia el modelo físico, se encuentra precisamente en poder

    obtener datos acercados a la realidad de los movimientos.

    Sin necesidad de continuas calibraciones se debe notar que el sensor de

    movimiento 3D y control de gestos junto con el driver de conexión y el módulo

    de adquisición de datos, puede utilizarse en diferentes tipos de sistemas

    físicos como:

    brazos robóticos

    robots pincher

    robots exploradores

    drones, entre otros. (Justinico, Cárdenas, & Rodríguez, 2015)

    Con la información mencionada anteriormente se planteó como objetivos del

    proyecto, los siguientes:

    El objetivo general es implementar un sistema de control de lazo abierto sobre

    una mano robótica mediante un sensor de movimiento 3D y control de gestos.

    Para poder completar el objetivo antes mencionado se debe ejecutar los

    siguientes objetivos específicos, para que de esta manera se valide la

    implementación del sistema de control para el prototipo físico.

    Implementar sistema de adquisición de datos desde el sensor de

    movimiento 3D y control de gestos.

    Diseñar la interfaz de visualización de acciones y datos adquiridos desde

    el sensor de movimiento 3D y control de gestos.

    Integrar los modelos de adquisición, visualización, procesamiento y control.

    Controlar movimientos en la mano robótica por medio de señales

    adquiridas desde el sensor de movimiento 3D y control de gestos.

    La interacción Humano-Computadora (HCI)(Silva, S, Eduardo., Anderson,

    Jader., Henrique, Janiel., Teichrieb & Ramalho, 2013) se ha convertido en un

    importante campo de estudio que ha ido ganando atención de parte de la

    investigación en diferentes y nuevos dispositivos de interacción como: Control

    remoto del Nintendo Wii (Nintendo©, 2017), Kinect Microsoft(Microsoft©,

    2017a), Leap Motion (Leap Motion inc., 2012), entre otros.

    Controlador Leap Motion®

    El Leap Motion® trabaja con dos cámaras infrarrojas y tres leds IR, como

    sensores de profundidad, en un campo de alcance limitado de 8 pies cúbicos

    (aproximadamente 61 centímetros cúbicos).

  • 5

    Utilizando la estereoscopia desde las dos cámaras, el dispositivo puede

    minimizar el error mediante las herramientas, los dedos y la mano son

    características construidas con un único modelo matemático para maximizar

    la velocidad y la precisión.(Silva, S, Eduardo., Anderson, Jader., Henrique,

    Janiel., Teichrieb & Ramalho, 2013)

    De acuerdo a la figura 1 se observa, las distancias que aproximadamente se

    tiene desde el punto inicial del sensor hacia cada uno de sus extremos, las

    medidas son aproximadas debido a variables físicas que limitan estos

    extremos como pueden ser la luz o la posición del sensor.

    Figura 1. Campo de Vista Leap Motion

    (Silva, S, Eduardo, 2013)

    De acuerdo a los autores Pedro Andrey Cañón, Pedro Cárdenas, Oscar

    Rodríguez, el sensor Leap Motion, permite al usuario utilizarlo como un

    servicio dentro de Windows, el cual permite conectar el controlador del aparato

    a través del protocolo USB.

    Los API (Application Programming Interface)(Cañón, Cárdenas, & Rodríguez,

    2015) que se tiene a disposición para manipular este dispositivo son dos, el

    SDK (Software Development Kit) propio de los creadores/proveedores y una

    interfaz que permite el uso de WebSockets, la cual facilita el uso de Leap

    Motion® mediante aplicaciones Web.

    El reconocimiento de gestos es utilizado en robótica con mayor frecuencia, en

    general de manera simple con señales hechas con la mano.(Justinico et al.,

    2015). Prácticamente viene a ser un sistema de visión artificial, y se lo puede

    programar para reconocer ciertos patrones repetitivos, y recibir las posiciones

    de la mano, asignándole así una acción el momento de reconocer este patrón.

    Leap Motion® es un sistema que combina la visión artificial mediante sus

    cámaras infrarrojas, la ventaja que este dispositivo muestra frente a otros del

  • 6

    mismo tipo (HCI), está en la eficacia para el análisis de los gestos y

    movimientos de la mano, con mayor precisión y resolución frente a sus

    adversarios(González, Bellucci, & Cuevas, 2012).

    Las tecnologías de Interacción Humano-Computadora (HCI), han sido

    exploradas para varias aplicaciones como juegos, modelado 3D inmersivo,

    aplicaciones de realidad aumentada, pintado de aire, escritura y diseño, entre

    otros.(Khademi et al., 2014)

    Adquisición de Datos (DAQ)

    Adquisición de datos (DAQ), es el procedimiento para poder medir fenómenos

    físicos o eléctricos como la corriente, el voltaje, temperatura, presión o sonido,

    entre otros. Y poder transferir los datos a un repositorio u ordenador.

    Un sistema de adquisición de datos está compuesto por elementos como:

    sensores, sistemas de medición, y ordenadores con software programable

    (figura 2), a diferencia de los sistemas de medición actuales el sistema de

    medición DAQ, obtiene el mayor desempeño de procesador del ordenador

    disponible, las capacidades de conexión, conectividad, producción del

    estándar industrial y flexible brinda una solución más viable. (National

    Instruments, 2016)

    Figura 2. Partes de Sistema DAQ

    (National Instruments, 2016)

    Para el desarrollo del enlace de adquisición de datos se utilizó un lenguaje de

    alto nivel, con el que se generó los respectivos módulos que comunican el

    sensor con la interfaz gráfica y el envío de datos al sistema de control.

    Entre los principios más importantes para una interfaz gráfica están la

    simplicidad, funcionalidad, el contexto, la consistencia, sensibilidad y el

    diseño.

    Dentro de los lenguajes de programación de alto nivel existen diferentes

    opciones aptas para lograr generar un GUI compatible con el sistema como

  • 7

    aplicación de escritorio, el cual permita tener control y visualización adecuada

    de las funcionalidades contenidas en el proyecto.

    La interfaz gráfica debe cumplir características y satisfacer las necesidades

    hacia el usuario cumpliendo cualidades como lo son ser intuitiva, permitir al

    usuario enfocarse en la función principal y la información del sistema, no en

    cómo debería funcionar el GUI, también debe ser de rápida

    respuesta.(Dragutin Petkovic, 2015)

    Los lenguajes de alto nivel permiten a la solución de un problema específico

    en términos cercanos a los usados por humanos, estos tipos de lenguajes

    como C, C++, Java, C#, entre otros. Fueron diseñados para facilitar la

    programación, menos susceptible a errores y para evitar que el programador

    se vea obligado a conocer la estructura interna de un ordenador en particular.

    (Sun, 2016)

    Para los lenguajes abiertos como son: Java y Python, se tiene una gama

    amplia de IDEs de desarrollo sin necesidad de pagar una licencia con la

    ventaja de utilizar todos los beneficios y herramientas disponibles en estos

    lenguajes, como son Netbeans o Eclipse para Java y Eclipse o PyDev para

    Python.

    En C# se puede utilizar versiones anteriores de Visual Studio de Microsoft

    para desarrollo sin necesidad de licencia, pero si se necesita un IDE

    actualizado con herramientas completas se debe adquirir una licencia.

    (Microsoft©, 2017b)

    Para esta aplicación se utilizaron las siguientes reglas y convenciones para

    clases reutilizables que son implementadas dentro de la codificación:

    Inicio de recursión. Si una clase se comunica con un atributo de otra clase,

    la interfaz entre estas debe ser la misma (tipo de dato).

    Eliminar el análisis de casos. Los métodos de una clase deben ser creados

    en varias posibles clases de un objeto para responder a los diferentes

    casos generando un código dinámico en las respuestas.

    Reducir el número de argumentos. Los mensajes o respuestas generados,

    deben ser construidos por el programa para reducir la cantidad de

    opciones que se codifican.

    Reducir el tamaño de los métodos. Los métodos efectivos usualmente son

    pequeños, es fácil sub-instanciar una clase con métodos pequeños.

    Las jerarquías de clases deben ser profundas y estrechas. Una buena

    jerarquía de clases debe ser de profundidad con varias capas, haciendo el

    programa estable y difícil de craquear.

  • 8

    La clase de la parte superior de la jerarquía debe ser abstracta. La herencia

    o la compartición de código usualmente indica la necesidad de una nueva

    subclase.

    Minimizar acceso a las variables. Los atributos deben ser privados, y

    respetando la jerarquía y la herencia.

    Las sub-clases deben ser especializaciones. La especialización de una

    clase consiste en que los atributos de la clase padre sean genéricos y en

    la sub-clase estos tengan funciones específicas.

    Dividir clases largas. Si una clase tiene entre 50 a 100 métodos entonces

    representara una difícil abstracción, por lo que debe ser redefinida en

    diferentes clases.

    El factor de las diferencias de implementación en los subcomponentes. Si

    un método es implementado de una manera y otros son implementados de

    otra diferente de ese mismo método, eso crea un método independiente

    de la super-clase lo cual se debe depurar encapsulando este método en

    un componente separado.

    Separar métodos que no se comunican. Una clase debe ser siempre

    dividida cuando la mitad de sus métodos acceden a la mitad de sus

    variables implementadas.

    Enviar mensajes a componentes en vez de a sí misma. Una estructura

    basada en jerarquía puede convertirse en una estructura basada en

    componentes, reemplazando los métodos sobrescritos por componentes

    enviados.

    Reducir el paso de parámetros implícitos. A veces es difícil dividir una clase

    den dos partes, ya que los métodos pueden ir a diferentes clases y acceder

    a la misma variable implementada, esto puede suceder debido a que la

    variable es global, cambiando los métodos para pasar el parámetro

    explícitamente hará la división de esta clase dinámica. (Johnson & Foote,

    1988).

    ARQUITECTURA DEL SISTEMA DE ADQUISICIÓN DE DATOS

    LEAP MOTION®

    El software de Leap Motion® se ejecuta como un servicio dentro de Windows.

    Este servicio conecta al sensor mediante comunicación USB. Las aplicaciones

    acceden al servicio de Leap Motion® para recibir los datos del seguimiento

    del movimiento.

    El SDK del proveedor tiene dos variedades de API, para poder obtener los

    datos del sensor: Un sistema de comunicación nativo (Interfaz) y un sistema

    de comunicación mediante WebSocket.

  • 9

    Estos APIs permiten crear aplicaciones con acceso al sensor en varios

    lenguajes de programación los que se pueden encontrar en la documentación

    del sensor incluyendo Javascript ejecutado en un navegador web. (LEAP

    MOTION DEVELOPER PORTAL, 2017)

    SISTEMA DE COMUNICACIÓN PARA APLICACIONES

    NATIVAS

    La interfaz para aplicaciones nativas es funcional mediante una librería

    cargada dinámicamente. La cual conecta al servicio de Leap Motion® y

    permite obtener los datos en la aplicación. Se puede conectar a esta librería

    directamente mediante lenguajes como C++, Objective-C, Java, C# y Python,

    en la figura 3 se explica gráficamente la arquitectura del sistema.

    Figura 3. Arquitectura del Sistema para interfaz de aplicaciones Nativas

    (LEAP MOTION DEVELOPER PORTAL, 2017)

    1. El servicio de Leap Motion®, recibe los datos mediante comunicación

    USB, procesa la información y la envía a las aplicaciones con acceso al

    sensor. Por defecto el servicios solo envía datos en primer plano a la

    aplicación, pero las aplicaciones pueden obtener los datos en segundo

    plano (backend) estas peticiones pueden ser negadas por el usuario local.

    2. La aplicación de Leap Motion®, esta se ejecuta por separado del servicio

    (API) y permite que el usuario del ordenador configurar el sensor. Esta

    aplicación nativa del proveedor, es un panel de control en Windows.

    3. Aplicación con acceso de primer plano, recibe los datos de del

    seguimiento del movimiento directamente del servicio, la aplicación está

    conectada directamente con los lenguajes de alto nivel antes

    mencionados.

  • 10

    4. Aplicación con acceso de segundo plano, cuando la aplicación pierde

    foco, es decir está funcionando en segundo plano (backend) en el

    ordenador, esta aplicación debe estar configurada como proceso en

    segundo plano dentro del sistema. (LEAP MOTION DEVELOPER

    PORTAL, 2017).

    Leap Motion® ha generado diferentes APIs para el desarrollo de aplicaciones,

    y tanto como el lenguaje y el SDK de desarrollo están disponibles en los 3

    lenguajes elegidos, C# y Java son lenguajes compilados.

    La ventaja sobre los desarrollos en estos ya que el código compilado puede

    ser ejecutado directamente por el CPU del ordenador mientras los lenguajes

    interpretados (Python) deben ser primero traducidos a lenguaje de máquina

    para luego ser ejecutados. (Sun, 2016)

    En Java se tiene la plataforma de desarrollo de JavaFx (RUZMAN, 2014) la

    cual permite a los desarrolladores construir rápidamente aplicaciones gráficas

    multiplataforma, en Python se tiene el módulo de interfaz “Tk interface” o

    “Tkinter”, consiste en un número de módulos, son herramientas desde el

    código, “Tkinter” es una plataforma disponible para sistemas Unix, Windows y

    Macintosh, desde la versión 8.0 “Tk” tiene un aspecto nativo para cada

    plataforma. (Lundh, 2003)

    Entre las opciones de lenguaje de alto nivel que se pudo tomar en cuenta por

    su facilidad de implementación e interfaces de desarrollo comprensibles,

    están: C#, Python, Java, la selección del lenguaje de alto nivel para realizar el

    desarrollo se lo hizo bajo parámetros de comparativa citados en la tabla 2.

    En la tabla 1, los lenguajes seleccionados se analizaron, C# tiene la limitante

    que solo puede ejecutarse en SO Windows, mientras que Java y Python tienen

    la ventaja de ser compatibles con cualquier SO.

    Tabla 1. Comparativa de lenguajes de alto nivel

    Características Java C# Python

    Multiplataforma

    (Sistema Operativo)

    X X

    Compatible con Leap

    Motion

    X X X

    SDK Disponible X X X

    Compilado X X

    IDE Necesita Licencia X

    Toolkit para GUI X X X

    Experiencia previa con

    el lenguaje

    X X X

  • 11

    Para C#, ocupa Windows Forms, la cual es fácil de configurar y utilizar dentro

    del IDE de Microsoft: Visual Studio 2017 o posteriores versiones, esta

    plataforma de desarrollo es intuitiva y fácil, utilizando un método de

    “drag&drop”, con lo que solo se debió arrastrar y ubicar los componentes

    según se requiere en la pantalla.(Microsoft©, 2017b)

    MANO ROBÓTICA

    La habilidad de sujetar es una función motora humana fundamental, como

    también un prerrequisito para desempeñar una innumerable cantidad de

    manipulaciones en objetos. Por lo tanto “sujetar” viene a ser también una

    habilidad fundamental para asistencia robótica.(Ben Amor, Kroemer,

    Hillenbrand, Neumann, & Peters, 2012)

    En la tabla 2 se compara y analiza diferentes opciones de diseños

    previamente implementados en otros proyectos similares, los que pueden ser

    extruidos en impresora 3d, y se puede construir el prototipo sin necesidad de

    recurrir a procesos de manufactura que requieran recursos que sobrepasen

    el presupuesto y alcance de este proyecto:

    Tabla 2. Comparación Modelos Mecánicos Existentes de Mano Robótica

    a) (Cyborg Beast, 2017) b) (As, 2011)

    c) (Martínez, 2016) d) (HACKberry, 2016)

    e) (InMoov, 2017) f) (GYROBOT, 2015)

    Cyborg

    Beast (a)

    Robohand

    (b)

    Mano

    robótica

    U.T.E.(c)

    Exii-

    Hackberry (d)

    Bionic

    Inmoov (f)

    FLEXY

    HAND 2

    (g)

    Impresión 3d TRUE TRUE TRUE TRUE TRUE TRUE

    Modelo

    mecánico

    disponible

    FALSE FALSE TRUE TRUE TRUE FALSE

    Modelo

    Impresión

    disponible

    TRUE TRUE TRUE TRUE TRUE TRUE

    Producto

    Final (Modelo

    comercial)

    TRUE FALSE FALSE TRUE FALSE FALSE

    Flexibilidad de

    Modelo

    FALSE FALSE TRUE TRUE TRUE FALSE

    Control de

    dedos por

    separado

    TRUE TRUE TRUE TRUE TRUE TRUE

    Movimiento

    de muñeca

    FALSE FALSE TRUE TRUE TRUE FALSE

    Posibilidad de

    Control con

    MCU

    FALSE FALSE TRUE TRUE TRUE TRUE

  • 12

    Los resultados de la comparativa en los modelos anteriores permiten tener

    claro el panorama en el momento de seleccionar el modelo para el prototipo,

    este modelo debe cumplir ciertos requerimientos como son:

    Permita controlar los dedos por separado.

    Exista movimiento de muñeca

    Se pueda controlar mediante un MCU (micro-controller unit)

    Permita extruir las piezas por impresión 3D

    Realizando la comparación entre los modelos aptos para la implementación y

    desarrollo de objetivos así como también acorde con el cumplimento de

    requerimientos y restricciones, están los modelos Bionic Inmoov, mano

    robótica UTE(Universidad Tecnológica Equinoccial).

    Donde por motivos de ensamble y construcción siendo este trabajo la

    implementación lazo abierto sobre una mano robótica mediante un sensor de

    movimiento 3D y control de gestos se procede a elegir el modelo construido

    en la UTE, teniendo este prototipo las características necesarias en cuanto al

    cumplimiento de requerimientos.

    Este es un prototipo físico ya construido por el Ingeniero Josué Martínez en el

    año 2016 previo a la obtención de su título de ingeniero mecatrónico, este

    modelo optimizó la utilización de recursos y sirvió como prototipo de pruebas

    para el sistema de control en general.

    Una ventaja del modelo escogido es que los actuadores se ubican dentro del

    antebrazo y estéticamente parece un brazo y mano real, también esto ayuda

    a la portabilidad del prototipo, así como la adaptabilidad con diferentes

    sistemas electrónicos para el control de este modelo robótico.

    El capturar los movimientos y transmitirlos, fue inicialmente creado para

    propósitos médicos y militares, los sistemas de visión y reconocimiento

    pueden ser utilizados directamente para la manipulación de brazos o manos

    robóticas. (Vani & Reddy, 2015)

    Los datos pueden venir de diversos artefactos de sensado ya sea de visión

    artificial, como pueden ser dispositivos EMG (Electromiografía) multicanal que

    son nada más que electrodos para detectar señales eléctricas, la velocidad de

    conductividad del musculo, el tiempo de acción, entre otros.. (Micera et al.,

    2010)

    También existen otros métodos como son escáner 3D o guantes con

    sensores, transformando así los comandos gestuales de la mano hacia el

    nodo generador de trayectoria de los actuadores. (Zubrycki & Granosik, 2014)

  • 13

    Se puede observar como las restricciones en el hardware, software e interfaz

    gráfica pueden juntarse para producir latencia, la manera más entendible de

    ilustrar el impacto de estos diferentes factores es observar sus contribuciones

    en los diferentes escenarios. (BEDIKIAN, 2017)

    Se observa en la figura 4 como los tiempos de latencia con una mala

    comunicación serial (USB2) y con sincronización de video mediante software

    crea una demora alta solo en la lectura serial y adquisición de datos desde el

    sensor.

    Figura 4. Demora con USB 2 60Hz en pantalla y sincronización de pantalla encencida

    (BEDIKIAN, 2017)

    Al elegir una mejor tecnología en cuando a la comunicación serial (USB3) y

    retirando la sincronización de video mediante software mejora notablemente

    el tiempo de respuesta, esto se observa en la figura 5.

    Figura 5. Demora con USB 3 60Hz en pantalla y sincronización de pantalla apagada

    (BEDIKIAN, 2017)

    En conclusión según los estudios en la demora de Leap Motion, se tiene un

    tiempo aproximado de entre 5 [ms] a 15 [ms] en la obtención de datos y

    procesamiento en el API de forma nativa, cabe mencionar que todas las

    aplicaciones de Leap Motion utilizan el API de este sensor, incluso aquellas

  • 14

    que vienen de fábrica, debido a que el sensor posee un firmware embebido

    que responde específicamente a su SDK y su API para obtención de datos.

    Se toma en cuenta en las figuras 3 y 4 sobre el conjunto de procesos de

    obtención de datos, uso de API, procesamiento gráfico y muestra de datos en

    interfaz gráfica con su demora total.

    Los autores del artículo “ROBOTIC HAND CONTROLLED THROUGH VISION

    AND BIOMECHANICAL SENSORS” (ALPISTE PENALBA, TORNER RIBE, &

    BRIGOS HERMIDA, 2017) esquematizan el sistema como se muestra en la

    figura 6.

    Figura 6. Esquema de Proyecto

    Donde cada dedo del prototipo físico es direccionado por un servomotor, estos

    actuadores son controlados por una placa programable Arduino UNO, los

    servomotores halan un cable para causar el movimiento en el ensamble que

    constan los dedos, estos filamentos tienen un diámetro de 0.45mm y una

    resistencia de 91Kg. (ALPISTE PENALBA et al., 2017)

    En la figura 7 se muestran resultados de la variación porcentual de los datos

    enviados a los actuadores en comparación de los dedos en el prototipo físico,

    los autores en este artículo utilizaron el modelo de Bionic – Inmoov.

  • 15

    Figura 7. Desviación (%) Leap Motion vs Dedo

    (ALPISTE PENALBA et al., 2017)

    El autor Josué Martínez en la tesis “DISEÑO Y CONSTRUCCIÓN DE MANO

    ROBÓTICA CONTROLADA A DISTANCIA CON UN MANDO DE GUANTE”

    cuyo proyecto consiste en un guante con sensores de flexión en cada dedo

    para poder obtener el ángulo de giro de cada dedo, el mismo que se transmite

    a los servo-motores.

    Utiliza un sistema de comunicación en una red Zigbee, en los que tanto

    maestro como esclavo están conectados a placas Arduino independientes

    para generar la comunicación.

    Los resultados en el tiempo de transmisión de datos que obtiene este proyecto

    son de aproximadamente 184[ms] a 548.6[ms] en los diferentes dedos como

    se muestra en la figura 8, el autor redacta el haber tomado como referencia

    una muestra de 5 datos por cada dedo en el prototipo físico.

    Figura 8. Velocidad de respuesta Sistema Zigbee

    (Martínez, 2016)

  • 16

    Uno de los resultados importantes de este proyecto es el de la prueba de

    fuerza en el prototipo físico, donde el autor toma una muestra de 5 datos por

    cada dedo y muestra un promedio de cada dedo, donde se puede apreciar en

    la figura 9 que ninguno de dichos dedos supera a 1[N].

    Figura 9. Fuerza ejercida por cada dedo mano robótica UTE

    (Martínez, 2016)

  • 2. METODOLOGÍA Y DISEÑO

  • 17

    El proyecto consistió en implementar un sistema de control de lazo abierto

    sobre una mano robótica mediante un sensor de movimiento 3D y control de

    gestos, los datos fueron adquiridos y procesados mediante un ordenador.

    Tuvo como tarea por medio de un lenguaje de alto nivel, mapear y decodificar

    la señal adquirida desde el sensor de movimiento 3D y control de gestos, y

    transmitirla mediante la interfaz de comunicación serial (SCI).

    Se utilizó un emisor y un receptor para crear una red de radiodifusión Zigbee,

    el uno conectado directamente al ordenador con protocolo universal

    asíncrono (UART) y el otro funcionando en conjunto con la placa Arduino,

    respectivamente.

    Los datos y acciones se reflejaron en la interfaz gráfica del usuario (GUI) la

    que por su diseño con la persona que estuvo utilizando el sistema, se mostró

    un modelo de mano gráficando las posiciones y cada articulación de la mano

    sensada respecto a la adquisición de datos y el envío de los mismos hacia el

    prototipo físico.

    La metodología que se utilizó es la del modelo en V (figura 10) o metodología

    en V, siendo un procedimiento estándar para el diseño de sistemas

    mecatrónicos, donde el proceso se divide en etapas generales tomando como

    referencia los requerimientos del sistema que da origen al diseño de sistemas,

    diseño especifico e integración de sistemas, resultando el producto final.

    Figura 10. Metodología en V con sistemas embebidos

    (Ivanov, Augsburg, Ruderman, Schiffer, & Horn, 2017)

  • 18

    Cada una de estas etapas puede también dividirse en algunas sub-etapas,

    dependiendo de los diseños específicos y las tareas de estos mismos,

    considerando los sistemas mecatrónicos, modelos complejos y con

    estándares avanzados. (Ivanov et al., 2017)

    Se analizó los requerimientos del sistema, para poder estimar los alcances del

    mismo, luego se procedió a esquematizar un diseño de cada sistema

    embebido dentro del producto final.

    Se implementó un software para adquirir y procesar los datos del sensor, el

    mismo que transmite sus datos al GUI, detrás de estos 2 sistemas

    funcionando conjuntamente existe un módulo para envío de datos del

    ordenador al emisor Zigbee o de ser el caso por comunicación serial, que es

    ejecutado como un hilo separado.

    Como elemento final al sistema completo se añade el envío de datos del

    emisor Zigbee hacia el sistema de recepción y control montado en el prototipo

    físico, el que procede a generar los movimientos en los actuadores.

    Estos sistemas diseñados y creados por separado se integraron para poder

    obtener resultados en conjunto, los que fueron evidenciados con el

    movimiento del prototipo físico, sincronizado con tiempos de demora de

    aproximadamente 10[ms] o 1000[ms] en modo serial o Zigbee

    respectivamente.

    REQUERIMIENTOS FUNCIONALES

    Debe adquirir datos de posiciones y movimientos desde el sensor de

    movimiento 3D y control de gestos en tipo de vector para procesarlo y

    enviarlo hacia los actuadores y la interfaz gráfica.

    El sistema debe procesar y verificar los datos y transmitirlos al sistema de

    control de actuadores del prototipo físico.

    El sistema debe mostrar los datos obtenidos y transferidos en tiempo real

    sobre el GUI que es observado por el usuario.

    El sistema debe recibir los datos y de serializarlos para generar el

    movimiento en los actuadores del prototipo físico.

    RESTRICCIONES DEL SISTEMA

    El sistema maneja el desbordamiento de datos desde el emisor hacia el

    receptor el momento que el MCU durante la recepción esté procesando los

    datos y no esté disponible para seguir recibiendo datos hasta terminar el

    proceso anterior.

  • 19

    El sistema propuesto no controla la exactitud de las fuerzas aplicadas en

    cada dedo, así como la magnitud del torque que este genera en cada

    actuador.

    El sistema no posee ningún repositorio de almacenamiento de históricos o

    base de datos de los movimientos realizados por la mano, genera una

    interfaz gráfica y un enlace de comunicación para el control con datos en

    línea, es decir todos los datos adquiridos por el sensor se llevan

    conjuntamente a la interfaz y al prototipo físico.

    ESPECIFICACIONES DEL SISTEMA

    El sistema se basa en un Sensor de movimiento 3D y control de gestos que

    recolecta los vectores generados por movimientos que se realizan en una

    mano humana, estos datos se procesan y se envían al ordenador donde el

    usuario visualiza diferentes cuadros de simulación.

    Se gráficaron los vectores adquiridos, también estos datos se envían hacia el

    prototipo físico mediante comunicación inalámbrica y serial, desde el

    ordenador.

    Los vectores se obtienen con el SDK del sensor de movimiento 3D y control

    de gestos utilizando un lenguaje de alto nivel que facilitó el desarrollo de la

    interfaz por encima del enlace de comunicación para adquisición y control.

    El envío hacia el MCU se lo hace mediante comunicación serial y esta se logra

    con módulos de comunicación inalámbrica, emisor y receptor

    respectivamente.

    El sistema tiene una alimentación externa tanto para los motores que

    conforman el prototipo físico como para la parte del control, que necesita estar

    protegida y aislada debido a las altas corrientes que se puedan generar en los

    motores.

    La alimentación del sensor es la misma que ocupa el ordenador por lo que

    estos se aíslan del resto del sistema.

    ANÁLISIS FUNCIONAL

    El sistema en general consta de un sensor movimiento 3D y control de gestos,

    un sistema de adquisición de datos, una interfaz gráfica y un sistema de

    control para accionar actuadores, estos dan movimiento a un prototipo físico

    prediseñado.

  • 20

    El sensor de movimiento 3D y control de gestos posee accesibilidad mediante

    un SDK de desarrollo. El sensor permite mapear y reconocer una mano

    humana con sus articulaciones y dedos como también posee comunicación

    directa con diferentes sistemas operativos, como IOS (Mac) o Microsoft

    Windows, entre otros.

    La interfaz gráfica que se diseñó tiene como funcionalidades principales, la

    visualización de vectores adquiridos en tiempo real, junto con una simulación

    de una mano virtual generada a partir de lo obtenido por el sensor.

    El sistema de adquisición de datos tiene como cometido la recepción de

    señales desde el sensor, el procesamiento de los vectores adquiridos para

    poder mapearlos y la transmisión de estas señales según sea el requerimiento

    hacia el sistema de control, la interfaz gráfica y el prototipo físico.

    El sistema de control de actuadores del prototipo físico, como funcionalidad

    principal transmite los vectores por las comunicaciones serial y

    radiofrecuencia de ser el caso de uso.

    En el caso del proyecto, se utiliza el protocolo serial tanto en las pruebas con

    comunicación directa (serial) hacia el sistema de control de actuadores, como

    en la comunicación por radiofrecuencia.

    En la figura 11 se puede observar un diagrama de la estructura y las

    funcionalidades del sistema, con sus tareas principales.

  • 21

    Figura 11. Análisis Funcional del Proyecto

  • 22

    DISEÑO CONCEPTUAL

    En la figura 12 se aprecia un diagrama de comportamiento, para inicio del

    diseño conceptual del proyecto, se diseña el sistema de manera específica

    prestando importancia a todas las funciones para cada subsistema.

    Notando la importancia que los elementos y protocolos seleccionados para el

    proyecto cumplan las funciones y tareas requeridas y que sean compatibles

    entre estos para facilitar la comunicación.

    Los vectores obtenidos provienen del sensor Leap Motion® que es un aparato

    HCI(Human Computer Interface) que gracias a su tecnología, logra detectar

    los movimientos realizados por la mano humana.

    Los vectores que arroja el sensor son transmitidos hacia el ordenador, luego

    se procesan mediante el software desarrollado para el proyecto en lenguaje

    de alto nivel Java con la plataforma JavaFx que es la base de la aplicación

    gráfica.

    También se utiliza un controlador que permite la transmisión de estos vectores

    hacia la GUI (Graphical user interface) como también al sistema de control

    que se comunica con el ordenador por protocolo serial.

    La interfaz gráfica recibe las posiciones en tiempo real, después que el

    sistema entrega las posiciones por protocolo serial, la información viaja hacia

    el micro-controlador o emisor RF de ser el caso.

    Una vez que el sistema de control entrega las posiciones al micro-controlador,

    los valores se des-encriptan, y se asignan las posiciones a los servo-motores.

    Estos valores son mapeados para los rangos permitidos dentro de cada motor.

    Los rangos de posición vienen dados como restricción del modelo

    prediseñado utilizado, una vez que estos datos se mapean se envían los

    pulsos a cada servo-motor y se completa el ciclo, el mismo que se repite hasta

    que el usuario cierra la aplicación.

  • 23

    Figura 12. Diseño Conceptual del Proyecto

  • 24

    ARQUITECTURA MODELO – VISTA - CONTROLADOR

    La arquitectura utilizada para poder controlar y mostrar los datos es la de MVC

    (Model-View-Controller) (figura 13), este modelo permite la separación de la

    Vista, el controlador y el modelo, estos componentes cuyas alteraciones no

    afectan la accesibilidad del sistema de comunicación y el sistema de

    actuadores.

    Figura 13. Arquitectura MVC

    MODELO DE DATOS

    El modelo representa todo lo referente a la estructura de datos que se necesita

    exponer y controlar en la aplicación esta estructura permite informar al objeto

    los cambios y operaciones que son aplicadas por los factores internos y

    externos de la aplicación.

    Dentro del proyecto la persistencia de datos no existe, por lo que los vectores

    son almacenados temporalmente en arreglos dentro de la estructura del

    controlador.

    Una vez en el controlador son manipulados y enviados a los subsistemas de

    control e interfaz gráfica por lo que los históricos desaparecen para almacenar

    los nuevos vectores que ingresan.

    Para la manipulación del modelo se encuentra las principales funciones que

    se programaron para poder realizar la conexión y obtención de datos con el

    sensor.

  • 25

    Estos métodos son derivados de la clase principal de la librería de Leap

    Motion, utilizando el objeto Controller el que utiliza el API para sincronizar el

    programa con los datos que se obtuvieron del sensor.

    En la figura 14 se tiene una descripción de la estructura de datos que maneja

    Leap Motion con su API estos son los datos arrojados en cada lectura, en el

    caso de este proyecto 60 lecturas por segundo.

    Figura 14. Modelo de Datos Leap Motion

    Para el desarrollo realizado fueron utilizadas las estructuras de ImageList para

    obtención de la lectura, HandList para obtener el número de manos sobre el

    sensor y validar que solo exista una.

    Dentro de la estructura de la mano se obtuvo las sub estructuras de dedos y

    huesos, en el caso de la estructura de herramienta y gestos, no se les dio

    ningún uso.

    DISEÑO DE CONTROLADOR PARA MANEJO Y RECEPCIÓN DE DATOS

    Para el desarrollo del controlador y que este pueda realizar el envío de datos

    hacia el sistema de control se utilizan 3 objetos que interactúan conjuntamente

    para poder manejar correctamente cada actualización de datos del sensor.

    El objeto principal dentro del diseño del controlador viene a ser la clase

    LeapEventHandler la que se instancia mediante el objeto generado en

  • 26

    LeapEvent este a su vez interactúa con la interfaz que actualiza los datos

    obtenidos en toda la aplicación.

    La clase programada (figura 15) utiliza las principales funciones y validaciones

    para el sensor como son crear el evento de obtención de datos (getInstance),

    registrar movimientos, obtener la instancia de la conexión, obtener el estado

    de la conexión, obtener el número de las manos reconocidas sobre el sensor

    y actualizar los datos del controlador, entre otros métodos nativos del API del

    sensor.

    Figura 15. Estructura de clase LeapApp

    En la figura 16 se puede observar el papel que cumple cada uno de estos

    objetos, junto con los métodos que contienen para poder controlar los datos y

    enviarlos a los subsistemas correspondientes.

  • 27

    Figura 16. Controlador de Aplicación

    Específicamente dentro de la clase principal que maneja los eventos del

    sensor, existe el método utilizado en la interfaz gráfica para la actualización

    constante y la visualización en línea de los movimientos de la mano.

    Este método es el que esta sincronizado con el sensor, también es el puente

    entre los datos detectados en cada cuadro del sensor llevados hacia el

    ordenador.

    Parte del controlador también hace referencia la transferencia de datos y su

    manipulación, funciones creadas para transferir las posiciones al sistema de

    control de actuadores, así como controlar la comunicación serial del

    ordenador.

    En el paso inicial se tuvo que declarar el puerto al que se va a acceder, la tasa

    de envío, el estado de conexión y de ser necesario el dispositivo a donde se

    envía.

    1

    2

    3

    4

    5

    6

    private static final String PORT = "COM3";

    // TODO Replace with the baud rate of your sender module.

    private static final int BAUD_RATE = 9600;

    private static final String DATA_TO_SEND = "\nInicializando Comunicación

    serial\n";

  • 28

    7

    8

    9

    private static XBeeDevice myDevice;

    private boolean sendDataState = true;//if busy =false if open = true

    Dentro de la inicialización de esta clase existen 2 métodos importantes para

    la estabilización de la conexión y el envío de datos, estos métodos contienen

    el control de errores y de excepciones para de ser el caso no se detenga el

    programa completamente y vuelva a realizar el ciclo.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    public XBeeDevice openConn() {

    try {

    myDevice = new XBeeDevice(PORT, BAUD_RATE);

    if(!myDevice.isOpen()){

    myDevice.open();

    }else{

    System.out.println("Conexión ya establecida");

    }

    } catch (XBeeException e) {

    System.out.println("Error");

    e.printStackTrace();

    System.exit(1);

    }

    return myDevice;

    }

    Es importante aclarar que el método de abrir conexión se lo instancia una sola

    vez para que no exista una sobrecarga de llamados sobre este puerto, y de

    ser el caso se cierra la conexión y se la vuelve a instanciar una vez cerrada la

    última que estuvo activa.

    Como se había comentado, el método para envío de datos también es

    declarado, y es utilizado a lo largo del programa para enviar la información

    tomada del sensor, esto agiliza y dinamiza el uso de esta clase siendo este

    un método privado de la instancia que se crea en un inicio.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    private void sendData(String message){

    this.setSendDataState(false);

    try {

    byte[] dataToSend = message.getBytes();

    myDevice.sendBroadcastData(dataToSend);

    System.out.println("Success");

    this.setSendDataState( true);

    } catch (XBeeException e) {

    System.out.println("Error");

  • 29

    11

    12

    13

    14

    15

    e.printStackTrace();

    //System.exit(1);

    this.setSendDataState(true);

    }

    }

    DISEÑO ESPECÍFICO DEL GUI

    En la figura 17 se puede observar un bosquejo de la interfaz gráfica que se

    planteó obtener con el lenguaje escogido, de ser necesario se tendrá que

    redibujar la interfaz completa en cada cuadro gráfico mostrado al usuario.

    Se tomó en cuenta que los datos ingresan en tiempo real, y la posición puede

    variar aproximadamente cada 16.6 [ms], debido a la lectura estándar del

    sensor es de 60fps (frames per second).

    Figura 17. Diseño de interfaz gráfica de aplicación para el ordenador JavaFx

    1. Indicador de conexión Indica si el dispositivo está en línea o

    conectado.

    2. Tabla de datos de Posiciones Muestra las posiciones vectoriales en

    el sistema de referencia prestablecido por el proveedor de Leap Motion® de

    cada nodo dentro de la mano sensada por el Leap Motion®.

    3. Tabla de posiciones de motores Representa las posiciones

    angulares de cada uno de los motores utilizados en el prototipo mecánico.

    4. Representación de mano en Ordenador Es la representación gráfica

    de cada una de las posiciones de articulaciones en la mano sensada por el

    Leap Motion.

  • 30

    Para haber llegado al resultado del bosquejo propuesto, se debe desarrollar

    la aplicación sobre la plataforma JavaFx con cada uno de sus elementos

    tomando en cuenta que para poder mostrar la variación de cada movimiento

    en la pantalla en la aplicación gráfica se necesita tener los siguientes

    elementos en la jerarquía mostrada en la figura 18.

    Figura 18. Jerarquía objetos aplicación JavaFx

    Donde la escena viene a ser la zona completa de la aplicación la cual contiene

    al marco, que a su vez contiene estos otros elementos que son el contenedor

    y la barra superior.

    Lo primero que se realizó fue generar la escena dentro de la clase principal

    que viene a ser una subclase de Applicatión, esta es una clase nativa de

    JavaFx que le da a la aplicación el ciclo de vida correspondiente para este tipo

    de aplicaciones gráficas: crear preparar iniciar parar.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    public class MainApp extends Application {

    public static void main(String[] args) {

    launch(args);

    }

    @Override

    public void start(Stage primaryStage) throws Exception {

    Group group = new Group();

    Scene scene = new Scene(group, 500, 500);

    PerspectiveCamera camera = new

    PerspectiveCamera(true);

    camera.setTranslateZ(-10);

    scene.setCamera(camera);

    group.getChildren().add(create3DBall());

    primaryStage.setScene(scene);

    primaryStage.show();

    }

    }

    EscenaMarco o cuadro

    Contenedor

    Barra superior

  • 31

    Se tomó en cuenta que el sistema de referencia que retorna el API de Leap

    motion frente al sistema de referencia de una escena en JavaFx es invertido

    en los ejes Z y Y, es decir en la aplicación JavaFx se debe rotar la cámara de

    manera que los puntos que se gráfican sean los mismos que detecta en la

    mano desde el sensor.

    Para esto se insertó los siguientes comandos de manera que el objeto dentro

    de la escena rote:

    1

    2

    3

    4

    5

    PerspectiveCamera camera = new PerspectiveCamera(true);

    camera.setTranslateZ(-500);

    camera.setTranslateY(-200);

    camera.setFarClip(1000);

    camera.setFieldOfView(40);

    Para poder tener una sincronización precisa entre la interfaz gráfica y los datos

    obtenidos del sensor que vayan acorde con el tiempo de ejecución, se

    instancia un objeto Timeline, que llevó el proceso integrado.

    Cabe recalcar que este método también declara la cantidad de cuadros por

    segundo que el programa obtiene del sensor y muestra al usuario, en la línea

    5 se observa la variable “ea” que es la cantidad de fps (frames per second)

    que se obtienen en el sensor y genera una instancia temprana que ejecuta el

    método de la clase LeapApp.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    private void synchronizeWithLeapMotion() {

    Timeline timeline = new Timeline();

    timeline.setCycleCount(Timeline.INDEFINITE);

    timeline.getKeyFrames().add(

    new KeyFrame(Duration.seconds(1.0 / 60.0), ea ->

    LeapApp.update()));//

    timeline.play();

    }

    De los elementos más importantes dentro del desarrollo de la interfaz gráfica

    se tuvo el método pointMoved, el mismo que es llamado cada que la aplicación

    gráfica muestra los vectores en la interfaz (frame) dentro de la escena, de

    manera que con nuevos vectores en escena los anteriores son eliminados,

    este método es generado como comportamiento dentro de la clase principal

    por lo que debe declararse con el tag de @Override.

  • 32

    1

    2

    3

    4

    @Override

    public void pointMoved(PointEvent event) {

    int handId = event.getSource().id();

    Hand3DCreatorUpdatehand = hands.get(handId);

    El momento que se generó el método pointMoved, como se observa en la

    línea 4 se instanció un objeto de la clase encargada de tomar los datos

    directamente del API de Leap Motion.

    Se debió empezar por crear el objeto esfera para poder instanciarlo,

    inicializarlo y ubicarlo en la escena, para esto se debe crear un método que

    permita realizar esta acción cada que sea necesaria la gráfica.

    Hand3DCreatorUpdate contiene el método para creación de esferas dentro de

    la interfaz gráfica, esta clase permite canalizar todos los datos hacia la

    aplicación principal, utilizando los atributos que facilita el SDK del sensor y

    plasmándolos en la escena para que el usuario pueda observar el esqueleto

    de la mano.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    public class Hand3DCreatorUpdate extends Group {

    private Sphere palm;

    private Sphere wrist;

    private Sphere[] fingers = new Sphere[5];

    private Sphere[] distal = new Sphere[5];

    private Sphere[] proximal = new Sphere[5];

    private Sphere[] intermediate = new Sphere[5];

    public Hand3DCreatorUpdate (int handId) {

    palm = createSphere();

    wrist = createSphere();

    for(int i = 0; i < fingers.length; i++) {

    fingers[i] = createSphere();

    distal[i] = createSphere();

    intermediate[i] = createSphere();

    proximal[i] = createSphere();

    getChildren().addAll(fingers[i], distal[i],

    proximal[i], intermediate[i]);

    }

    getChildren().addAll(palm, wrist);

    }

    }

  • 33

    La clase Hand3DCreatorUpdate se utilizó para la generación de una gráfica

    de los puntos de las juntas de cada dedo, palma y muñeca, de esta manera

    se gráfica cada cuadro por segundo, en esta clase se puede aumentar los

    elementos que varían en la escena de acuerdo a los datos que ingresen desde

    el sensor.

    En las líneas 2 a 7 se generan los arreglo de puntos, que vienen a ser esferas

    3D, por cada punto referencial de la mano graficada, en las líneas 12 a 20 se

    aprecia un bucle que genera y renderiza las esferas por cada dedo y cada

    parte del tendón.

    Una vez que se creó la gráfica 3D de la mano es necesario declarar el método

    que se llamó en cada cuadro de actualización el momento que se empezó a

    ejecutar la aplicación, este método actualiza el gráfico en cada cuadro por

    segundo.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    public void update(Hand hand) {

    FXUtil.translate(palm, hand.palmPosition());

    Iterator itFinger = hand.fingers().iterator();

    Finger finger = null;

    for (int i = 0; i < fingers.length; i++) {

    finger = itFinger.next();

    FXUtil.translate(fingers[i], finger.tipPosition());

    FXUtil.translate(distal[i],

    finger.bone(Type.TYPE_DISTAL).prevJoint());

    FXUtil.translate(intermediate[i],

    finger.bone(Type.TYPE_INTERMEDIATE).prevJoint());

    FXUtil.translate(proximal[i],

    finger.bone(Type.TYPE_PROXIMAL).prevJoint());

    }

    FXUtil.translate(metacarpal,

    finger.bone(Type.TYPE_METACARPAL)

    .prevJoint());

    for (MergeJoint3D joint : joints) {

    joint.update();

    }

    }

    Para poder simular los tendones y generar una conexión entre las esferas y

    de esta manera obtener una gráfica acorde con una mano humana, se utiliza

  • 34

    otro gráfico 3D nativo de JavaFx, los cuales son los cilindros como se observa

    en la figura 19.

    Figura 19. Cilindro con rotación eje Z

    Dentro de la clase Hand3DCreatorUpdate fue necesario crear una subclase

    que sirva para fusionar las figuras 3D utilizadas, en el caso de las esferas que

    son los puntos referenciales de cada dedo de la mano así como la muñeca y

    la palma, junto con los cilindros que vienen a representar las uniones entre los

    puntos referenciales, lo que le da una forma más parecida al esqueleto de una

    mano real.

    La clase llamada MergeJoint3D contiene los atributos necesarios para realizar

    esta fusión de objetos así como su constructor para atributos los objetos

    principales en el objeto declarado.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    private class MergeJoint3D {

    private Sphere fromSphere;

    private Sphere toSphere;

    private Cylinder bone;

    private Rotate joint;

    public MergeJoint3D(Sphere fromSphere, Sphere

    toSphere) {

    this.fromSphere = fromSphere;

    this.toSphere = toSphere;

    this.joint = new Rotate();

    this.bone = createBone(joint);

    }

    }

    Se definió un método que crea la unión entre 2 esferas mediante un cilindro,

    ubicándolo y configurando sus atributos como tamaño, color y acabado de

    superficie de las imágenes en 3D.

    1 private Cylinder createBone(Rotate joint) {

  • 35

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    PhongMaterial material = new PhongMaterial();

    material.setSpecularColor(Color.BLUE);

    material.setDiffuseColor(Color.DARKBLUE);

    Cylinder cylinder = new Cylinder();

    cylinder.setRadius(2);

    cylinder.setMaterial(material);

    cylinder.getTransforms().add(joint);

    return cylinder;

    }

    Dentro de la clase MergeJoint3D se encuentra también un método que se

    utilizó para la actualización constante de las uniones con cilindros en la

    visualización gráfica, este método realiza las funciones de translación y

    rotación de las uniones para que la gráfica forme la mano, y es ejecutada cada

    que se generan los puntos de referencia de las articulaciones de la mano.

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    public void update() {

    double dx = (float) (fromSphere.getTranslateX() -

    toSphere.getTranslateX());

    double dy = (float) (fromSphere.getTranslateY() -

    toSphere.getTranslateY());

    double dz = (float) (fromSphere.getTranslateZ() -

    toSphere.getTranslateZ());

    bone.setHeight(Math.sqrt(Math.pow(dx, 2) + Math.pow(dy, 2) +

    Math.pow(dz, 2)));

    bone.setTranslateX(fromSphere.getTranslateX());

    bone.setTranslateY(fromSphere.getTranslateY() - bone.getHeight() / 2);

    bone.setTranslateZ(fromSphere.getTranslateZ());

    joint.setPivotY(bone.getHeight() / 2);

    joint.setAxis(new Point3D(dz, 0, -dx));

    joint.setAngle(180 - new Point3D(dx, -dy, dz).angle(Rotate.Y_AXIS));

    }

    Este método se ejecuta una vez que la función update de la clase principal

    Hand3DCreatorUpdate se efectúa, de esta manera se obtiene en una primera

    instancia las esferas de referencia de las articulaciones de los dedos para

    después completar la gráfica con las conexiones mediante cilindros.

    En la figura 20 es representado el algoritmo con el que se adquiere, actualiza

    y envía los datos, mediante el movimiento cartesiano (X, Y y Z), cada que los

    datos de un cuadro son adquiridos, para refrescar de nuevo la interfaz gráfica,

  • 36

    y volver a gráficar las posiciones, así como enviar los datos a el sistema de

    comunicación donde inicia el control.

  • 37

    Figura 20. Flujo de aplicación con arquitectura MVC

  • 38

    DISEÑO ESPECIFICO SISTEMA ELECTRÓNICO Y DE

    CONTROL

    1. Sistema de Servo-Motores

    En la figura 21 se esquematiza el servo motor de manera que sus medidas se

    puedan reconocer a continuación.

    Figura 21. Dimensiones de Servo Motor

    (Robotzone, 2017)

    Se utilizó cinco motores en el proyecto para poder mover los diferentes dedos

    en el ensamble mecánico. Al tener una fuente de computador para alimentar

    los servo-motores es necesario calcular la corriente que se necesita, para

    asegurarse de que la salida a utilizar en la fuente de alimentación es la

    correcta.

    El modelo implementado en el prototipo físico viene a ser Turnigy 380MAX

    Micro Servo (Metal Gear) según cita el autor este modelo fue el que

    proporcionaba mayor torque, velocidad y menor tamaño (tabla 3), para

    acoplarse al ensamble realizado. (Martínez, 2016)

    Tabla 3. Datos de Servo-motor

    2. Fuente de poder 12V3A y regulador de Voltaje

    Corriente de alimentación

    Marca Torque

    (Kgf.cm)

    Velocidad

    (grados/s)

    Dimensión

    (mm)

    Engrane

    Metálico

    Precio

    (USD)

    Turnigy 380MAX

    Micro Servo

    (Metal Gear)

    4.1 60/0.16 A=13

    M=22

    H+G=33

    J=37

    SI 16.7

  • 39

    Debido a que solo se utilizó el sistema mecánico del proyecto de la mano

    robótica, se debió realizar cálculos que se acoplen al sistema electrónico del

    presente proyecto tomando como referencia los cálculos del autor en la tesis

    de diseño del prototipo físico. (Martínez, 2016)

    Para el cálculo de la corriente máxima consumida por los servomotores, se

    considera la corriente con un voltaje de 5V que es el recomendado por el

    proveedor y utilizado por el autor Martínez, para funcionar al torque máximo

    en el motor.

    Donde:

    𝑇 = 𝑇𝑜𝑟𝑞𝑢𝑒

    𝜔 = 𝑉𝑒𝑙𝑜𝑐𝑖𝑑𝑎𝑑 𝐴𝑛𝑔𝑢𝑙𝑎𝑟

    𝑃 = 𝑃𝑜𝑡𝑒𝑛𝑐𝑖𝑎

    𝐼 = 𝐶𝑜𝑟𝑟𝑖𝑒𝑛𝑡𝑒

    𝑉 = 𝑉𝑜𝑙𝑡𝑎𝑗𝑒

    𝑇 = 8.5 [𝐾𝑔𝑓 ∗ 𝑐𝑚]

    𝝎 =𝟔𝟎[°]

    𝟎. 𝟐[𝒔]

    𝑻 = 𝟖. 𝟓 [𝑲𝒈𝒇 ∗ 𝒄𝒎] 𝟗. 𝟖[𝑵]

    𝟏[𝑲𝒈]

    𝟏[𝒎]

    𝟏𝟎𝟎[𝒄𝒎]= 𝟎. 𝟖𝟑𝟑[𝑵 ∗ 𝒎]

    𝝎 =𝟔𝟎

    𝟎. 𝟐𝒔

    𝝅

    𝟏𝟖𝟎= 𝟓. 𝟐𝟑𝟓𝟗[

    𝒓𝒂𝒅

    𝒔]

    𝑷 = (𝟓. 𝟐𝟑𝟓𝟗[𝒓𝒂𝒅

    𝒔]) (𝟎. 𝟖𝟑𝟑 [𝑵 ∗ 𝒎]) = 𝟒. 𝟑𝟔𝟏𝟓[𝑾]

    𝑰 =𝑷

    𝑽=

    𝟒. 𝟑𝟔𝟏𝟓[𝑾]

    𝟔[𝑽]= 𝟎. 𝟕𝟐𝟔𝟗[𝑨]

    La corriente requerida para los 5 motores es:

    𝑰 = 𝟎. 𝟕𝟐𝟔𝟗[𝑨] ∗ 𝟓 = 𝟑. 𝟔𝟑[𝑨]

    Se alimenta esta fuente con 110VAC de entrada con una frecuencia de 50/60

    Hz, la fuente tiene las salidas de 5V con diferentes amperajes como son:

    0.5[A], 2[A] y 14[A], con esta información se selecciona la salida que arroja un

    voltaje de salida de 5VDC 14A para alimentar los servomotores.

    3. MCU

    La selección del Micro controlador Programable (Microcontroller Unit) se lo

    realiza bajo los parámetros de comparativa: modelo, procesador, fabricante,

  • 40

    memoria flash, RAM/SRAM, EEPROM, reloj Interno, puertos digitales, puertos

    analógicos, IDE (Entorno de desarrollo integrado), tamaño (mm) y precio ($).

    Como se observa en la tabla 3, las mejores características se encuentran en

    la placa Mbed NXP LPC1768 en cuanto a memoria, velocidad y tamaño viene

    a ser la mejor opción sin embargo el precio es elevado sin mencionar que

    sobrepasa las características necesarias para el proyecto el cual está

    inclinado al control de servomotores y recepción de señales, por lo que esta

    placa con MCU para control estaría subutilizando.

    Las placas restantes: Arduino y Pingüino, por comparación de tamaño y

    precio, así como la disponibilidad en el mercado local, también la capacidad

    de almacenamiento del programa, como la memoria RAM.

    En los dos procesadores es la misma, las características en pines digitales

    con capacidad de utilizar PWM (para control de servo-motores) son suficientes

    en las dos opciones.

    La opción que se ajusta a las necesidades y alcance del proyecto sin

    problemas es la placa de Arduino.

    En la tabla 4 se presenta la comparativa de las diferentes placas con cada una

    de sus características tomadas en cuenta para la finalización del proyecto.

  • 41

    Tabla 4. Comparativa placas con MCU para control

    a) (Arduino LLC, 2015)

    b) (Pinguino Shop, 2017)

    c) (Mbed, 2010)

    4. Comunicación Serial y transmisor RF (Master&Slave)

    Para la comunicación entre el sistema de control de lazo abierto y el prototipo

    físico se utilizó comunicación serial

    La cual se puede cambiar para el envío directo mediante serial hacia el MCU

    o mediante radiofrecuencia utilizando un emisor conectado mediante

    protocolo UART con el ordenador.

    En cuanto a la comunicación serial directa, se utilizó la librería serial para Java

    RxTx, la que mediante una clase implementada permite al ordenador

    comunicarse con cualquier dispositivo conectado mediante protocolo serial.

    Para la comunicación mediante radiofrecuencia se escogió el protocolo

    Zigbee por la apertura que tiene para poder crear una red Maestro esclavo

    privada ocupando el adaptador de Xbee USB para el ordenador mediante

    protocolo serial transmite automáticamente los datos obtenidos por el sensor

    (Leap Motion) previamente encriptados para ser recibidos y des encriptados

    por el MCU.

    Características Arduino(a)

    Pinguino (b)

    Mbed NXP Sem.(c)

    Modelo Nano 45K50 NXP LPC1768

    Procesador ATmega328 PIC18F45K50 ARM Cortex-M3

    core

    Fabricante Microchip Atmel Microchip ARM Ltd

    Memoria Flash 32 KB 32 KB 512 KB

    RAM/SRAM 2 KB 2 KB 64 KB

    EEPROM 1 KB 256 Bytes 4 KB

    Reloj Interno 16 MHz 48 MHz 100 MHz

    Puertos

    Digitales

    14 17 40

    Puertos

    Analógicos

    8 5 6

    IDE (Entorno

    de desarrollo

    integrado)

    Arduino Pinguino The mbed Compiler

    Tamaño (mm) 43.18x17.78 71x26 55.25x23.35

    Precio ($) 12 20 70

  • 42

    La ventaja de este adaptador y de utilizar Xbee es la conexión directa con el

    módulo FTDI embebido en el adaptador lo que agiliza la comunicación desde

    la aplicación Java hacia el módulo transmisor Master Xbee.

    Para configurar la red Zigbee de estos módulos se utilizó el software XCTU el

    mismo que permite configurar y guardar los datos necesarios para la red P2P

    que se utilizó, con esto se logra la radiodifusión del módulo maestro a los

    esclavos en este caso existirá solo un esclavo.

    En la figura 22 se aprecia que al abrir el software utilizado para configuración

    de módulos Zigbee, XCTU automáticamente reconoce los dispositivos

    seriales conectados gracias al adaptador USB Xbee, lo primero que se debe

    realizar es elegir el módulo que se va a proceder a configurar.

    Figura 22. Captura de Configuración Xbee Master&Slave 1

    Una vez seleccionado el dispositivo, XCTU procede a cargar y leer el módulo,

    al momento que el software tiene lista la interface, se procede a configurar el

    canal para la radiodifusión en la opción ID – PAN ID.

    Este número es un hexadecimal en el rango de 0 a FFFF, en este caso se ha

    escogido el canal 777, los esclavos también deben ser configurados en el

    mismo canal para poder ser compatibles en la comunicación; como también

  • 43

    se debe colocar la opción CE-Coordinator Enable en Enabled [1] para el

    módulo Master y Disabled [0] para los esclavos (figura 23).

    Figura 23. Captura de Configuración Xbee Master&Slave 2

    Como último paso en el módulo Master, se debe cambiar la opción DH-

    Destination Address High a 0 y DL-Destination Address Low a FFFF, esto

    permite a el modulo RF que se configure en modo de radiodifusión, y transmita

    a todos los módulos RF que se encuentren en el mismo PANID (figura 24).

  • 44

    Figura 24. Captura de Configuración Xbee Master&Slave 3

    Para configurar el router o receptor dentro de la red de radiodifusión, se debe

    colocar el mismo canal en ID-PANID como también JV-Channel Verification

    se debe colocar la opción de Enabled[1] para que el dispositivo permita al

    coordinador verficar el canal de funcionamiento, otra de las opciones que se

    debe cambiar es la de CE-Coodinator Enable se debe colocar Disabled[0] de

    esta manera se configura el dispositivo como esclavo (figura 25).

  • 45

    Figura 25. Captura de Configuración Xbee Master&Slave 4

    Una vez que los módulos están configurados, y su configuración se ha

    cargado en cada uno de los dispositivos, se puede proceder a realizar pruebas

    de la red de radiodifusión y verificar la velocidad y retraso de la señal.

    Como se puede apreciar en la figura 26, para poder realizar las pruebas se

    debe abrir dos instancias separadas del programa XCTU e iniciar con los

    diferentes módulos en cada instancia del programa. La figura indica las

    instancias, se selecciona el botón de Terminal (A) en las dos instancias y se

    cierra la conexión (B) para empezar la radiodifusión.

    Para efectos de pruebas XCTU permite programar un bucle infinito para envío

    de paquetes insertando estos en la lista de paquetes de la interfaz gráfica del

    programa (C), se inserta el tiempo de latencia entre paquetes enviados (D) en

    este caso se coloca el intervalo en 400 milisegundos [ms].

  • 46

    Figura 26. Captura de Configuración Xbee Master&Slave 6

    El diseño de la figura 27 indica el esquemático de la conexión de cada uno de

    los elementos en el diseño del sistema de comunicación para el prototipo

    mecánico de la mano robótica.

    Figura 27. Simulación de Sistema electrónico y de Control con ATMEGA328 - MCU Arduino

    Nano

    DIAGRAMA DE PROCESOS PARA RECEPCIÓN DE SEÑAL Y

    CONTROL DE SERVOMOTORES EN MCU

  • 47

    El micro controlador forma un papel importante en el proyecto, como se puede

    notar es el dispositivo encargad