You are on page 1of 75

Universidad Nacional del Nordeste Facultad de Ciencias Exactas, Naturales y Agrimensura

Proyecto Final de Carrera Ingeniería en Electrónica

2013

Tema del proyecto:
“Clasificador inteligente de objetos con visión artificial utilizando un brazo articulado”

Alumnos:
Fernández, Diego Ibarra, Alexis Gabriel

Profesor:
Lombardero, Oscar Guillermo

Contactos:
axs.ibarra@gmail.com (Ibarra Alexis) diego.fernandez@yahoo.com.ar (Fernández Diego) webmaster@exa.unne.edu.ar (UNNe, FaCENA)

Agradecimientos
Dedicamos esta página, para salvar una deuda afectiva con todas las personas que estuvieron cerca y lejos, pero siempre presentes y siempre dispuestos a ofrecer su apoyo sin importar las circunstancias. A nuestras familias, en especial a Sequi, Axel, Ailen, Olga, Gabriel, Erica, Tony, Ceci, Merce y Javi. A Carolina. A Jimena. A Luciano Zini, Juanjo Cochia, Aquino Carlos, Julian Veglia, y todos nuestros amigos, profesores, compañeros y conocidos. Agradecemos a estas personas que estuvieron siempre, que nos brindaron apoyo y fuerzas en el transcurso de nuestra carrera, y que contribuyeron con opiniones, objeciones, ideas, cuestiones, preguntas, y todo tipo de aportes indispensables para haber logrado nuestro objetivo. Se agradece profundamente el tiempo que nos dedicaron a nosotros y al proyecto.

en donde se utilizó la visión artificial para la detección de las posiciones y las características de los objetos (color y tamaño).Resumen En este proyecto final se implementó un sistema clasificador de objetos. las librerías OpenCV y Qt. para que luego puedan ser manipulados por un brazo robot. Los mismos son capaces de adquirir imágenes. El tiempo de desarrollo completo del proyecto fue de aproximadamente un año. Para el logro del proyecto se desarrollaron programas y algoritmos utilizando el lenguaje de programación Python. . procesarlas y controlar el movimiento del brazo robótico. el control del brazo robot. y las plataformas de hardware Arduino y Pinguino (herramientas de código abierto). utilizando el mismo hardware desarrollado y a través de la captura de los movimientos de la mano del usuario. Adicionalmente se desarrolló una aplicación que permite.

.......... 6 2....4......2..... 17 3................................2.....................1 Python .. 23 3.... 34 3............... Sensores ópticos ...1.........2.............. Introducción: .......................2................ Qt4 y Qt4 Designer (librería e IDE para interfaz gráfica) ...........................................3......................................... Webcam .............................. Tasa de datos ......................4....................................................................... 22 3...............................2................................................................................. Software del microcontrolador .....1.....................2.... Acondicionamiento y transformaciones básicas .................2...........................................2............................. Brazo Robot......... Algoritmos básicos .........................1.2........... Software: Diseño y desarrollo del software especializado .............................2....................................................................................... 9 2.............................................. 9 2..................................................3.... Área o zona de trabajo ........................................................2.........1.................................................................................... 47 1 ............ 33 3.....................1............................................... 42 4...............2............................. 10 2... Introducción: ..........5................................. 32 3.........3............... 12 2..................... Cinemática ........................................................................ 7 2.............................................................. 42 4................................................................... Procesamiento digital de imágenes .........................2. 40 4......................................................................................... Procesamiento digital en una secuencia de imágenes (video) ....1............................................................................................................................. Introducción .............. 41 4... Aplicación 2: Interfaz inalámbrica usuario-robot ........................................ 25 3........... Algoritmos Específicos ......2.............2....Índice General Índice General: 1............... Procesos principales................... 28 3.............................2...................................................................................................................................................3......................... Arduino IDE .......................................................................................... 22 3........1....... Introducción: ...........................1...2....................................... Captura..................4 PC .4....................................... OpenCV .............................................. ¿Qué es tiempo real? ....2..............4....... Reconocimiento de ciertos objetos en imágenes .2....1...................................................................................................................2............1...........2....................... 9 2............................................................ 37 4...................... 44 4................................. 16 2...............2.................2............................................... Componentes: .......................................................................3...............................................................................................3............ 24 3..............1..........................2.....2.. 5 2.........2 Herramientas ............... 36 4..................................................1.......1..2.......................................................................... 37 4...........1. Editor de texto Gedit................3..................................................................................................................... 39 4....... Hardware de control ...... Interfaz gráfica ...... Materiales y métodos de construcción......................2.................. 34 4........... Aplicación 1: Reconocimiento de objetos ......... Hardware: Diseño de la plataforma de visión artificial ........................................................ 14 2.... 7 2.1.................................................................5.................... 21 3...................2............ 21 3.............................2.............2..............................3......................... Diseño y construcción de soporte.................... 6 2... Fundamentos teóricos: Visión por computadora ...........................................................1...................................... 36 4...................................2...... 43 4...............................................1..................2.........

..........3..... 66 8..................................................... Conclusiones ....... Trabajos futuros .................. 67 8..... Bibliografía .................................................. 53 5.2. 48 4........................................2..... 58 5.......................................... Anexo A: Programa del microcontrolador ................................................................................... 64 6.............1.................... Anexos .................................................................. Procesos principales........................................................................................4..... Brazo Robot................................................... 65 7............................................. 53 5....................... 67 2 ........................................................................................................................................4... Aplicación 2 ............................................................................................1.....1...................................................................... Implementación: Ensayos y resultados .......................................................................................... Aplicación 1 .................................................... 60 6...........1.......................................Índice General 4................... Interfaz gráfica .......................................................................... 50 5.......................

.... 11: Representación del brazo robot en 2 dimensiones. 34 Figura 4...................... 5: Ejemplo de erode..................................................................................... 13: Línea de montaje industrial....... ¡Error! Marcador no definido............ 22 Figura 3.................. 15: Cirugía a distancia..................... 1: Arquitectura del proyecto............................................................... 13 Figura 2.......... 21 Figura 3...................................................................................................................... 46 Figura 4............................... 8: Inscripción de una geometría..... 6 Figura 2........ 12 Figura 2........... ............. 2: Etapa de AOI......................................................... 17 Figura 2............................ 37 Figura 4......................................... 10: Estudio de convexidad......................... 8: Estudio de Cinemática..... 4: Ejemplo de smoothing............................. 26 Figura 3...................... 19 Figura 2............................................................ 14 Figura 2.......................................... 10 Figura 2............................................ .. 29 Figura 3......... 1: Esquema de las relaciones entre la visión por computadora y otras áreas afines....... 29 Figura 3.......................... 28 Figura 3............ ......... 6: Señales de control de un servomotor ....... 10: Representación del brazo robot en 3 dimensiones .................................... ........Índice de figuras y Tablas Índice de Figuras: Figura 1................ 31 Figura 3......... 7: Pestaña “Iniciar”..................................................... ... ................. 22 Figura 3............... Figura 2.............................................................. . 11: Esquematización del funcionamiento de MeanShift... 42 Figura 4.................. 18 Figura 2........... 1: Arquitectura del proyecto.... 8 Figura 2............................................................................................................. 2: Qt Designer utilizado para el diseño del GUI..................................................... ..................... 43 Figura 4.............. ............................................ 8 Figura 2........ 13 Figura 2. 7: Estructura del software del microcontrolador ................. ....................... 3: Detección de fallas en un circuito impreso........... 8: Pestaña “Configuración”.......................................................... 9: Representación gráfica del brazo robot............ 40 Figura 4.............................. 47 3 ...... ...................... 14: Filtro predictivo de Kalman.............. .................................................... 41 Figura 4............. 11 Figura 2.................... ...................... 3: Brazo robot desarrollado ..................................................................................................................................... ................. 9: Aproximación polinómica............................. 12: Pasos sucesivos para aislar un objeto de interés de una imagen capturada.................................................................................. .................................................. ................................................................ 23 Figura 3................................... .......... ............... 2: Arquitectura de una plataforma de visión artificial........ 30 Figura 3. ............................... 33 Figura 3.......................................................................... .................................................. 14 Figura 2..................................................................... 24 Figura 3................................................................. ........................ ...... 7: Resolución del histograma...................... .............................. 6: Ventana principal de la aplicación 1... 27 Figura 3........................................... 45 Figura 4...... 6: Ejemplo de ThresHold........................................................... 16 Figura 2..................................................................................... ............................................ 14: Soporte realizado.................. 1: Pasos seguidos en la elaboración del software...................................... ..................... . 4: Editor de textos Gedit............................................ 3: Entorno de desarrollo Arduino...................... ................................................... .......................................................... 4: Tubos de PVC utilizados.................... 20 Figura 3............................ implementada con equipo especializado.............................................. 5: Procesos de la aplicación 1........... .............................................................. 13: Webcam utilizada............................. ......... 5: Servos Hitec HS-311 y HS-55 utilizados.. 12: Valores extremos de θ.....................................................

. 3: Mediciones de posicionamiento del ángulo de la base................ 62 Figura 5......... 6: Mediciones de área de la mano abierta............. 57 Tabla 5...... 5: Mediciones de posicionamiento del ángulo de la base...... 59 Tabla 5...... 1: Mediciones de posicionamiento en X................................. 48 Figura 4............................ 1: Comparación entre las plataformas Arduino UNO y Pingüino 4550.................... 9: Diferencia entre áreas......... ........... .......................................... ........................... 61 4 ........................... ................ .................................................................................Índice de figuras y Tablas Figura 4........... 39 Tabla 5................. 51 Figura 4..................................................... 58 Figura 5......................................................................... 11: Pestaña “Inicio”. 9: Procesos de la aplicación 2................................................... 4: Medición de posiciones de objetos.................................... 50 Figura 4....................... 55 Tabla 5................. 55 Figura 5.. ................... 56 Figura 5..................................... 5: Mediciones de área de la mano abierta................................................ 61 Figura 5........................... 7: Mediciones de área de la mano cerrada........................... ......................................................... 1: Mediciones de posicionamiento en X....... 3: Mediciones de posicionamiento corregido en Z................................................................... ............. 10: Ventana principal de la aplicación 2... 12: Pestaña “Configuración”............................................................................. ......................................... ......... 7: Relación área de la mano abierta a altura. 52 Figura 5............ 63 Índice de Tablas: Tabla 3..................................................... 59 Figura 5... 61 Tabla 5................... 57 Tabla 5.................... .. 62 Figura 5.................................................................... ......... 54 Tabla 5........................................................ 4: Mediciones de posicionamiento del ángulo de la base.................................................................................. 25 Tabla 4.. .......................................... 2: Mediciones de posicionamiento en Z.................. ....... 2: Mediciones de posicionamiento en Z....... 1: Crecimiento de los lenguajes de programación.......................................... 8: Relación área de la mano cerrada a altura........................................................................................................ 6: Mediciones de área de la mano cerrada................. ........................ 62 Figura 5.................................................

etc. robótica. cada vez más procesos pueden ser automatizados. autodidactas. como aplicación adicional. sobre temas puntuales como programación. 5 . La unión de la visión computacional con la robótica permitirá el desarrollo de plataformas de manufactura flexibles. Estos sistemas se componen de cámaras de video especializadas encargadas de adquirir imágenes y de funciones y algoritmos cuyo objetivo es la obtención de información para el control de un proceso. Gracias al avance en los sistemas computacionales y las tecnologías empleadas. Valiéndose únicamente de conocimientos previos. mecánica. madera. linux. cuando empresas de EEUU empezaron a interesarse por la robótica. generando una producción más eficiente. manufactura. Introducción 1. fue el de incorporar a los procesos industriales y administrativos las nuevas tecnologías computacionales inteligentes como los sistemas de visión por computadora (mediados de los noventa).1. entre otros. la automatización es el paso más allá de la mecanización. Otro avance importante. Actualmente cumplen tareas de manipulación. logística. y mucho más reciente. manufactura. el control del brazo robot por medio de la captura de movimientos de la mano del usuario (aplicación 2). La realización del proyecto nace de la idea de juntar ambas tecnologías. electrónica. se procedió a la realización del proyecto previa búsqueda de información y elección de las herramientas a utilizar. en donde un brazo robot pueda manipular autónomamente los objetos a su alrededor (aplicación 1). fármacos. en donde los autómatas puedan realizar tareas con algoritmos de decisión y que no requieran ser reprogramados continuamente. en donde los procesos industriales son asistidos por máquinas o sistemas mecánicos que reemplazan las funciones que antes eran realizadas por el ser humano. Introducción En el enfoque industrial. Para el logro de dichas tareas estos robots deben ser previamente programados con rutinas que deberán realizar repetitivamente. rápida y con menores riesgos para los operarios. Se decidió realizar. Uno de los avances más importantes fue la incorporación de robots o autómatas a las líneas de producción industriales. Su uso ha ido en aumento desde fines de la década de 1970. Con esta idea en mente se optó por la realización de un sistema clasificador de objetos. ensamble y transporte de objetos. Actualmente se utilizan para tareas de control de calidad en los sectores de las industrias de packaging..

caras humanas). es un subcampo de la inteligencia artificial. segmentación. Fundamentos teóricos: Vision por computadora 2. Fundamentos teóricos: Visión por computadora 2. registro). El propósito de la visión artificial es programar un computador para que "entienda" una escena o las características de una imagen. La evaluación de los resultados (por ejemplo. La visión artificial. 6 . también conocida como visión por computador (del inglés computer vision) o visión técnica.1. segmentación. hacer concordar un mismo objeto en diversas imágenes. 1: Esquema de las relaciones entre la visión por computadora y otras áreas afines.2. Introducción: Figura 2. localización y reconocimiento de ciertos objetos en imágenes (por ejemplo. Los objetivos típicos de la visión artificial incluyen: ● ● ● ● La detección. Registro de diferentes imágenes de una misma escena u objeto. es decir. Seguimiento de un objeto en una secuencia de imágenes.

Involucra. procesar e interpretar los resultados.2. Esto quiere decir.2. uno para cada color básico. filtrar o acondicionar. verde y azul (RGB).y) en donde r es la intensidad luminosa del pixel. se implementaron principalmente las siguientes tareas: ● ● ● ● Reconocimiento de ciertos objetos en imágenes. Estimación de las posturas tridimensionales de humanos. En el prototipo desarrollado. Procesamiento digital de imágenes El procesamiento digital de imágenes se define como el campo que se encarga de manipular imágenes digitales con el objetivo de mejorarlas o identificar cierta información relevante. Búsqueda de imágenes digitales por su contenido. Matemáticamente una imagen se representa por r=f(x. Estos objetivos se consiguen por medio de reconocimiento de patrones. ● La tarea de implementar un sistema de procesamiento digital de imágenes involucra capturar. A continuación se presentan los conceptos básicos relacionados con el procesamiento de imágenes [2]: ● ● Pixel: elemento básico de una imagen. 2.1. 7 . Captura La captura de imagen representa el front-end del sistema en el cual intervienen las cámaras y adquisidores de imágenes. que una imagen a color está representada matemáticamente por 3 arreglos bidimensionales de píxeles (matrices). Imagen: arreglo bidimensional de píxeles con diferente intensidad luminosa (escala de gris). La visión artificial cognitiva está muy relacionada con la psicología cognitiva y la computación biológica. formadas. Color: el color se forma mediante la combinación de los tres colores básicos: rojo. teoría de grafos y otros campos. 2. al igual que el ojo humano. aprendizaje estadístico. tratamiento matemático de matrices y análisis estadístico. geometría de proyección. Fundamentos teóricos: Vision por computadora ● ● ● Mapeo de una escena para generar un modelo tridimensional de la escena. En campo de aplicación es entonces muy diverso.2. procesamiento de imágenes. este modelo podría ser usado por un robot para navegar por la escena. Seguimiento de objetos en una secuencia de imágenes Serie estadísticas de decisión. por una lente convergente que proyecta la imagen sobre una superficie sensible a la luz denominada sensor de imagen o sensor óptico.y). Evaluación de resultados (respuestas del autómata). desde el punto de vista de los cálculos. cuyas coordenadas son (x.

malas etiquetas en los componentes.3. se utiliza un equipo especializado. inspección óptica automática) en una línea de ensamblaje y soldado de placas electrónicas.2. con el propósito de detectar fallas en la placa final. 2: Etapa de AOI. 8 . en la etapa de AOI (automatic optic inspection. 3: Detección de fallas en un circuito impreso. Fundamentos teóricos: Vision por computadora Existen diversos sensores ópticos con varias configuraciones de conexión. infrarroja o rayos X. Figura 2. En algunos se provee de iluminación externa específica para la aplicación. como muestra en la figura 2. Tomando sucesivas fotos el equipo detecta. como ser luz UV. Figura 2. que se vale de cámaras de 5Mpx y de iluminación propia de rayos X e infrarrojo. entre otras cosas. Por ejemplo. donde un capacitor electrolítico fue puesto al revés.

1. Los sensores son realizados en dos tecnologías.2. También. La tecnología CCD es la que proporciona mejor calidad de imagen y con menor ruido.3. con una resolución de 1. Tasa de datos La reproducción de video y video en vivo son los archivos multimedia que más ancho de banda requieren para su correcto funcionamiento. como el cine. sin importar si en realidad son secuencias discretas de datos. se utilizan para aplicaciones de medida. que es de 16 ms. La tecnología CMOS es la más económica y ofrece un menor tamaño. incluso más que un juego en red. sumada a la persistencia de la corteza visual que oscila entre 100 y 400 ms.2. En la práctica el margen mínimo está en el orden de los 15 fps. Además puede capturar partes de la imagen no teniendo que transmitirla completamente. puede plantearse la siguiente situación: se debe guardar video de una cámara digital. principalmente en CCD y en CMOS.2. ¿Qué es tiempo real? Se puede decir que tiempo real es una interpretación de una persona que visualiza. durante un minuto seguido a una frecuencia de fotograma de 30 fps. Como ejemplo. Estos sensores suelen estar configurados en forma matricial de modo que proporcionan una imagen bidimensional.2. a nivel industrial. se emplean sensores en configuración de línea.3 Mpx (1280 x 960) y con una profundidad de color de 16bits.1.4 Gbits 9 . es decir una secuencia de imágenes. Sensores ópticos Los sensores digitales de imagen están formados por una serie de foto sensores que modifican su señal eléctrica según la intensidad luminosa que reciben. lo que permite la captura de los puntos que conforman la imagen.1. Un cálculo rápido da el tamaño del buffer requerido y la tasa de datos que deberá manejar el sistema: Buffer = 1280 * 960 * 30 * 60 * 16 = 35. Si los fotogramas pasan demasiado lento se percibirá una “secuencia por pasos”. El ejemplo más clásico es el del video en una cinta con fotogramas. Fundamentos teóricos: Vision por computadora 2. escucha.2. Dicho valor está determinado por la persistencia de una imagen en la retina del ojo humano. 2. 2. gracias a su grado de integración electrónica.1. siente o interpreta una secuencia multimedia como si fuera “fluida” o continua. que dada sus altas resoluciones. Sensores CMOS son generalmente más susceptibles al ruido pero consumen 100 veces menos potencia. Entonces esto lleva a definir un margen mínimo de fps (frames por segundo) necesario para que un sistema de captura de imágenes sea interpretado como de tiempo real.

10 . mucho del contenido matemático y fundamental implementado en el procesamiento de imágenes es válido para el procesamiento de video. métodos y funciones que OpenCV provee para tal finalidad [1]. ya que muchos de estos algoritmos son recursivos. Por lo tanto.4 se detallan los principales algoritmos de procesamiento de video utilizados. Acondicionamiento y transformaciones básicas Básicamente el procesamiento de video es el procesamiento de imágenes aplicado a una secuencia de imágenes sucesivas y relacionadas. 2. es decir. Esto condiciona a los desarrolladores.2. como en el caso de este proyecto. Si bien existen varias herramientas.2.2. Fundamentos teóricos: Vision por computadora Bit Rate = Buffer / 60 = 590 Mbits / seg Ambos son números difíciles de manejar a menos que se cuente con un servidor dedicado o un clúster. 4: Ejemplo de smoothing. Por otro parte puede decirse que el análisis y estudio de las imágenes relacionadas como secuencia de video es el punto crítico de todo sistema de visión artificial. muchísimas veces. a generar y programar sus propios algoritmos de procesamiento de video. En la sección 2. el procesamiento de video es diferente para cada sistema. Vale la pena aclarar que no se usaron parámetros reales de profundidad de imagen y resolución de píxeles. los cuales generalmente son de 32bits y 12Mpx. no pueden aplicarse a imágenes discontinuadas o aisladas. La principal diferencia existe en los estudios de tipo estadístico predictivo y el análisis de objetos particulares en una secuencia de video. A continuación se describen las principales funciones de acondicionamiento y transformación aplicadas a imágenes: Figura 2. sin ser funciones específicas para tal fin.

5: Ejemplo de erode. ya que matemáticamente hablando hacen una convolución en toda la imagen desplazando un kernel (o ventana superficial). también proporcionalmente al área del objeto. Fundamentos teóricos: Vision por computadora Smoothing El smoothing o difuminado hace exactamente lo que dice su nombre.Smooth() [1] [3]. y son prácticamente un filtro pasa banda de color de ventana cuadrada. por eso se los agrupa como un solo método. Erode y Dilate Los algoritmos de erosión (erode) y dilatación (dilate) rara vez aparecen independientes. obteniendo como resultado la imagen ubicada a la izquierda de la figura. y son transformaciones de tipo morfológicas. El mismo deja pasar sólo las 11 . Figura 2.4 puede verse la aplicación del smoothing a una imagen.2. difumina o elimina los cambios o flancos abruptos de color en una imagen. empezando por la imagen superior izquierda. Como puede verse. Threshold Los algoritmos de umbral (ThresHold) se aplican también a imágenes en escala de grises. Se aplican a imágenes grises (escala de blancos entre 0-255). En la figura 2. En la figura 2.5 se muestran cuatro etapas de erosión consecutiva. En openCV la función se llama cv. la erosión “achica proporcionalmente” los cuerpos u objetos cerrados y lo opuesto hace la dilatación.

o bidimensional. donde en cada eje se representa una característica de la imagen.valor. etc.2.3.6 esquematiza bastante bien lo que representa un histograma en una imagen y en donde puede verse que la resolución del histograma depende del tamaño de la grilla. Figura 2. Se usa habitualmente para binarizar imágenes. este último generalmente del mismo tamaño que la imagen. Fundamentos teóricos: Vision por computadora intensidades de color que estén dentro del rango especificado. Para usos aislados. 6: Ejemplo de ThresHold. Lo más utilizado es el gráfico de dos ejes. Algoritmos básicos Dentro de esta sección de algoritmos básicos se detallan las funciones que involucran una o varias de las transformaciones básicas nombradas en la sección anterior.2. DFT y IDFT La DFT aplicada a una imagen no es más que una DFT bidimensional y se aplica siempre a imágenes en escala de grises. 12 . La figura 2. cantidad-valor. como parte de la tarea total que realizan.cantidad. Aquí el concepto de “frecuencia y periodo” se ven ligeramente modificados ya que eso depende de la tasa de imágenes por segundo que tengamos y del tamaño de la misma. por ejemplo color . color . La utilización de la DFT es muy específica y generalmente parte de algoritmos más complejos. 2. rara vez se ve superada por la convolución espacial (transformada del kernel). es un gráfico de tipo estadístico de dos ejes. Histograma El cálculo de un histograma es básicamente una mensura de los componentes que integran una imagen.

8. Aproximación polinómica (interpolación).9. Los métodos existentes para detectar contornos son muy diversos. velocidad moderada. La detección de contornos es algo sencillo y fundamental en el procesamiento digital de imágenes y videos. figura 2. Figura 2. Fundamentos teóricos: Vision por computadora Figura 2. 7: Resolución del histograma. 13 . muy rápido. pero básicamente hay 3: ● ● ● Inscribir una geometría conocida (cuadrado o círculo). la imagen debe tener ciertas características como ser: estar binarizada. Búsqueda cruda (analiza cada pixel). 8: Aproximación polinómica. figura 2.Para que dicho algoritmo se ejecute adecuadamente. muy lento. Todas estas características se logran con las funciones previamente descriptas en el apartado anterior. Contours La detección de contornos realiza un seguimiento recursivo de flancos de color en una imagen.2. poseer contornos detectables y que los contornos sean de valor 1 y el fondo 0.

incluyendo momentos. destacando el uso de los momentos. lo mostrado en la figura 2. se utilizan la mayoría de dichos estudios. obteniendo como resultado.4. En la detección de manos. Figura 2. A partir de la obtención de contornos se pueden realizar diversos tipos de análisis. 2. 9: Inscripción de una geometría. la concordancia y la convexidad. por ejemplo. análisis geométrico. Algoritmos Específicos Se distingue entre un algoritmo básico y específico basándose en las siguientes consideraciones: 14 . estudio de convexidad.2.2. etc. concordancia. en donde las letras determinan los defectos de convexidad detectados. Fundamentos teóricos: Vision por computadora Figura 2. 8: Estudio de convexidad.10.

El algoritmo intenta. se ejecuta varias veces para una sola imagen. Esto muchas veces es más que suficiente para obtener otros parámetros como ser: el área. comparar dos contornos para evaluar un índice de similitud entre 0 y 1. 5) Retorna al punto 3 hasta que la diferencia de posición de dos centros de masa obtenidos sea menor que un delta definido. 4) Re-centra la ventana si el punto 3 genera un punto central distinto. determinar una ventana fija que involucre una porción de la imagen que tenga una “probabilidad” de interés definida por un histograma previo.2. por ende. el punto central del contorno. etc. Es la manera más simple de comparar contornos que ofrece OpenCV y se basa en obtener el “centro de masa” de un contorno en cuestión. Ambos valores están basados en una distribución de probabilidad aportada generalmente por un histograma previo calculado en la imagen. más precisamente. el número de dedos extendidos que tiene el usuario en ese momento. y detecta y describe en variables de salida la convexidad del contorno. si es convexo. Entonces. 2) Detecta una posición inicial de búsqueda y un tamaño fijo para la ventana. ConvexHull and ConvexDefects El algoritmo se basa en contornos como argumentos. El número de defectos puede indicar. Fundamentos teóricos: Vision por computadora a b c d Un algoritmo básico permite separar información fundamental de la imagen. Los resultados de un algoritmo específico son más abstractos que los de los algoritmos básicos. Un algoritmo específico permite utilizar la información fundamental para interpretar detalles de la misma. es decir. Con todo esto. entre otras cosas. o se cumplan con el número máximo de iteraciones seteadas. busca recursivamente el centro de masa de la “distribución de interés”. Moments Usa como argumentos los contornos de una imagen.10. 3) Calcula el centro de masa de la ventana (basado en probabilidad). MeanShift and Camshift Meanshift es un algoritmo de tipo recursivo pues intenta determinar posiciones en varias pruebas sucesivas. requieren de un post-procesado para adecuarlos al entorno. haciéndolo por pasos: 1) Meanshift elige una ventana (un sector de la imagen) y define su tipo y geometría. Un algoritmo específico siempre depende de uno básico para poder efectuarse. básicamente. 15 . Ambos algoritmos se ejemplifican en la figura 2. genera una “cáscara” geométrica asociada al contorno.

lugar. puede ser el color. esta rama se fundamenta en Redes Neuronales. El tamaño de la ventana de búsqueda puede crecer. ®. Reconocimiento de ciertos objetos en imágenes En esta sección se explican las secuencias de algoritmos utilizadas para extraer. CamShift y MeanShift son algoritmos de seguimiento básicos que proveen un método rápido para implementar seguimiento en tiempo real. el tamaño de la misma va cambiando a medida que se ejecuta. La otra rama se basa en identificar un objeto sin saber a priori datos exactos del mismo. Por dar un ejemplo. Fundamentos teóricos: Vision por computadora Figura 2. a nivel comercial. Las flechas indican el desplazamiento recursivo de la ventana. la forma. el concepto de “cara de una persona” a la cara de cualquier persona. 9: Esquematización del funcionamiento de MeanShift. Además vale aclarar que no están basados en color sino en probabilidad.2. para asociar. hace unos meses Google inc. Esto ofrece una mayor robustez y abstracción de capas de procesamiento. Implementó cerebro artificial autónomo de búsqueda que 16 . pero en vez de utilizar una ventana fija. La tarea de identificar objetos en una imagen o secuencia de video se divide prácticamente en dos ramas independientes *1+. por ejemplo.2. se puede decir que CamShift es un algoritmo similar a MeanShift. etc. Una de ellas se basa en saber “a priori” algún dato del objeto a identificar. tamaño. identificar. En la figura 2. algoritmos predictivos y estudios estadísticos profundos. Obviando algunas diferencias menores. 2. disminuir o mantenerse en el mismo tamaño. Este último método es el de mayor interés actualmente.11 se da un ejemplo gráfico del funcionamiento de MeanShift.5. aislar y procesar objetos de interés que representen información importante para el usuario.

solo el texto entre comillas y la posibilidad de buscar imágenes en internet. 2.12 se grafican los pasos que se siguen para lograr aislar un objeto de interés. 10: Pasos sucesivos para aislar un objeto de interés de una imagen capturada. muchas veces no encuadran con las necesidades del sistema en particular. en donde la metodología usada es detectar un objeto conociendo su color y tamaño.2. El método de auto aprendizaje es extremadamente complejo y experimental. Suponiendo que se parte de los resultados de la figura 2. los algoritmos y funciones prediseñadas. Figura 2. Los algoritmos utilizados se describen en la sección 4. Al cabo de unos días el cerebro artificial identificó perfectamente lo que era un gato.11.4. Fundamentos teóricos: Vision por computadora tenía una sola tarea. En la figura 2. A dicho sistema no le dio ningún otro dato. Procesamiento digital en una secuencia de imágenes (video) El seguimiento de un objeto una vez aislado no es una tarea sencilla. en donde el objeto de interés ya se encuentra aislado. Es por ello que para efectuar algunas tareas se requiera el diseño de algoritmos complejos valiéndose de algoritmos básicos. en comparación a al método de conocer datos previos.3. 17 . identificar “¿qué es un gato?”. Aquí es fundamental el análisis estadístico. A continuación se detallan algunos. hay que definir algún método o algoritmo para lograr identificarlo en sucesivas muestras de imágenes. Vale aclarar que todas estas etapas son aplicadas a cada imagen que captura la cámara. Como se dijo anteriormente.

el rastreado a lo largo de la imagen. 18 . por ejemplo. relacionar esta posición con el “retardo” que tendrá el robot hasta llegar al objeto en cuestión. se procede a analizar tamaños de los objetos presentes en la imagen basándose en criterios seteados previamente por el usuario.13. Existen varios métodos. todos estadísticos. el algoritmo vuelve a ejecutar esta tarea de evaluación de criterios. Una vez que el objeto esté fuera del área de trabajo. por lo tanto es necesario. se debe plantear algún algoritmo que permita saber su posición futura en la imagen en función del movimiento que este objeto realiza.12 en su sub-imagen 4.12 sub-imagen 5 a 7.2. Una vez que el objeto encuadre dentro del criterio especificado. Estimación de posición futura de un objeto Siguiendo con el ejemplo de la figura 2. Esto último genera interés cuando un brazo robot o cualquier autómata debe actuar sobre el objeto en movimiento. Fundamentos teóricos: Vision por computadora Identificación de objetos Una vez aislados los objetos de interés. a una línea de montaje industrial. Entonces. será este y solo este objeto. 11: Línea de montaje industrial. como lo ilustra la Figura 2.12. como se muestra en la figura 2. además de inferir la posición futura. Figura 2. una situación que puede plantearse es que el objeto puede ir desplazándose en la imagen de manera similar. situación que puede verse en la figura 2. suponiendo que ya se tiene identificado el objeto a seguir.

2. Fundamentos teóricos: Vision por computadora Se utiliza el método de interpolación lineal con el cual se asumen 2 características fundamentales de la línea de montaje: 1 2 La velocidad es constante, es decir, matemáticamente es un movimiento rectilíneo uniforme (MRU). El objeto no cambia de forma a medida que se mueve dentro de la imagen.

Con los dos axiomas nombrados es sencillo determinar la posición futura aplicando un método de interpolación lineal entre sucesivas imágenes. Para lograr que el brazo llegue en el momento preciso al objeto deseado debe vincularse la velocidad de movimiento del objeto con el retardo que tenga el autómata en actuar y llegar a destino. La realidad dice que este retardo depende de la distancia recorrida, o más precisamente, del algoritmo de movimiento empleado por el robot. Otros continuación: ● ● ● algoritmos para inferir la posición futura son, por ejemplo, los que se listan a Filtro predictivo de Kalman Interpolación polinómica Flujo óptico

Figura 2. 12: Filtro predictivo de Kalman.

Estabilización de datos (filtrado de ruido) Otra cuestión importante es el filtrado de datos erróneos o ruido. Es un algoritmo aplicado, por ejemplo, a la detección de la mano del usuario. En esta aplicación el principal ruido lo proporciona el pulso o inestabilidad del usuario. Errores en la interpretación del movimiento provocados por un pulso inestable se pueden traducir en catástrofes, dependiendo del entorno en el que se utilice el sistema. 19

2. Fundamentos teóricos: Vision por computadora

Por dar un ejemplo, si se está realizando una cirugía a distancia como la esquematizada en la figura 2.15, si no se filtrara el ruido de la inestabilidad del médico, se podría asegurar que la operación no sería exitosa.

Figura 2. 13: Cirugía a distancia, implementada con equipo especializado. Una solución para el filtrado del ruido se realiza básicamente con un promedio general o filtro promediador digital. Consiste simplemente en incluir los valores obtenidos de posición en un registro de desplazamiento de n valores del cual se debe hallar su promedio continuamente. Esto permite que las variaciones en el movimiento del autómata sean más suaves y más lentas. Obviamente este filtro puede mejorarse mucho, incluso es posible agregar análisis de ruido blanco, con lo cual se eliminarían movimientos muy pronunciados que no son reales.

20

3. Hardware: Diseño de plataforma Vision artificial

3. Hardware: Diseño de la plataforma de visión artificial
3.1. Introducción:
Una plataforma de visión artificial consiste en la implementación de un sistema de captura y procesamiento de imagen a un sistema dinámico. El sistema de captura es el encargado de recoger las características del ambiente u objeto de estudio y proporcionar los datos para su procesamiento, por medio de una imagen digital. El procesamiento consiste en la aplicación de algoritmos y transformaciones de las imágenes de forma de obtener la información necesaria para manipular el sistema dinámico y realizar la tarea asignada. La Figura 3.1 esquematiza, didácticamente, como quedó constituida la estructura del hardware del proyecto, también se idealizan las conexiones entre componentes de la arquitectura.

Figura 3. 1: Arquitectura del proyecto.

21

Componentes: A continuación se describen en detalle los componentes que integran la plataforma de visión artificial desarrollada. 2: Arquitectura de una plataforma de visión artificial. Figura 3.3.2. Figura 3. Brazo Robot El brazo robot es el sistema dinámico de la plataforma encargado de interactuar con el medio exterior. 3. 3: Brazo robot desarrollado 22 . El autómata construido se muestra en la figura 3. 3.1.2.2.2. Hardware: Diseño de plataforma Vision artificial Los componentes básicos de una plataforma de visión artificial se presentan en la figura 3.

Para la fabricación de las piezas se reciclaron tubos de PVC para la conducción de agua. por lo que se vuelve flexible y moldeable sin necesidad de someterlo a altas temperaturas. Una vez obtenidas las planchas. se calentaron en agua hirviendo y se aplanaron de tal forma de obtener planchas de PVC.3. Las mismas fueron diseñadas previamente considerando los tamaños de los servos a utilizar y las dimensiones del brazo deseado. lo cual facilita su modificación. Este requerimiento no lo podía cumplir un motor paso a paso debido a que el mismo es un sistema a lazo abierto. Su elección se debió a que se caracteriza por ser un material dúctil. Esto permite que mediante una determinada señal eléctrica se obtenga una respuesta mecánica controlada. Además mantiene la forma dada y propiedades una vez enfriado a temperatura ambiente. Por otro lado se requería la motricidad de las articulaciones del brazo robot de manera controlada y estable. 23 .1. Hardware: Diseño de plataforma Vision artificial 3. estable y altamente resistente. cortaron y moldearon las distintas piezas. Materiales y métodos de construcción Para la estructura del brazo robot se utilizó como material principal el PVC (policloruro de vinilo). 4: Tubos de PVC utilizados. Los mismos se cortaron longitudinalmente. El mismo comienza a reblandecer alrededor de los 80°C y se descompone sobre los 140°C. Esta característica nos permitió la fácil fabricación de las piezas del brazo robot. el cual posee un sistema de control para poder controlar su posición.1. Es por ello que se optó por la utilización de los denominados servomotores. Un servomotor es un actuador mecánico basado en un motor de corriente continua y un conjunto de engranajes que permiten multiplicar el torque del sistema final.2. Figura 3. se dibujaron. por lo que se necesitaba la incorporación de un sistema de control mediante encoders para poder controlar su posición y corregir las eventuales pérdidas de pasos.

3. A continuación se muestra una tabla comparativa entre ambas placas: 24 . Para el logro de dichas tareas se optó por la utilización de las plataformas de hardware Arduino UNO y Pingüino 4550.2. Por otro lado la plataforma Pingüino 4550 está formada por un microcontrolador PIC 18F4550 de la empresa Microchip. El consumo máximo medido del brazo robot fue de 2.1. Figura 3. Esto quiere decir que pueden utilizarse libremente para el desarrollo de cualquier tipo de proyecto sin haber adquirido ninguna licencia. Hardware: Diseño de plataforma Vision artificial Se utilizaron los siguientes servomotores comerciales: ● ● ● ● ● ● Base: Hitec HS-311 Hombro: 2x Hitec HS-311 Codo: Hitec HS-311 Muñeca: Hitec HS-311 Muñeca Rotacional: Hitec HS-55 Pinzas: Hitec HS-55 En el anexo se incluye la información técnica de servomotores y los datos de cada uno. y generar las señales necesarias para accionar los servos a través de sus puertos I/O. Su función principal es la de recibir comandos y datos por parte de la PC. La elección de dichas plataformas está fundamentada por las facilidades que ofrecen a la hora de desarrollar hardware para proyectos multidisciplinares.2. Para la alimentación del conjunto de servos se utilizó una fuente de PC de 250W. Hardware de control El hardware de control es el encargado de ser la interfaz física entre la PC (encargada del procesamiento de imagen) y el brazo robot. tanto su diseño como su distribución. 5: Servos Hitec HS-311 y HS-55 utilizados. y ofrecen un entorno de desarrollo y librerías libres. La plataforma Arduino UNO en particular está formada por un microcontrolador Atmega328 de la empresa Atmel y puertos de entrada/salida. Las mismas son plataformas de hardware libres.7A a 5V.3.

2. 25 .27 U$S (DigiKey) 3. De esta forma. éste (a pesar de estar energizado) dejará de mantenerse en la posición preestablecida y adoptará cualquier orientación regida por el esfuerzo al que esté sometido.1. Característica Voltaje operativo Pines de I/O Pines de entrada analógica Corriente por cada pin I/O Memoria Flash SRAM EEPROM Frecuencia USB Nativo Precio Arduino UNO (Atmega328) 5V 14 (6 PWM) 6 40 mA 32 KB (0.3. Los servomotores se controlan mediante impulsos de ancho variable que deben refrescarse periódicamente (figura 3.5 KB reservados) 2 KB 1 KB 16 MHz No 26. Para fijar la posición de un servomotor es necesario enviarle continuamente la señal con la posición deseada. Esto significa que si se deja de enviar la señal de control en el tiempo en el que el servomotor lo necesita. 1: Comparación entre las plataformas Arduino UNO y Pingüino 4550.39 U$S (DigiKey) Pingüino (PIC 18F4550) 5V 20 (2 PWM) 8 25 mA 32 KB (8 KB reservados) 2 KB 256 Bytes 20 MHz Si 23. el sistema de control seguirá operando y el servo conservará su posición y se resistirá a las fuerzas externas que intenten cambiarlo de posición.2.6). la función principal que debe cumplir el microcontrolador es la de recibir instrucciones y datos por parte de la PC y generar las señales necesarias para el control de los servos.1. Software del microcontrolador Como se dijo en la sección anterior. Hardware: Diseño de plataforma Vision artificial Tabla 3.

Hardware: Diseño de plataforma Vision artificial Figura 3.3. 6: Señales de control de un servomotor Los procesos realizados por el software diseñado se muestra en la figura 3.7 y a continuación se detallan cada uno de ellos. 26 .

ya sean instrucciones o valores de ángulos. inmediatamente recibe los valores de los ángulos que deben adoptar cada uno de los servos. el mismo es analizado para determinar si se trata de una instrucción y luego. Los datos recibidos son cadenas de texto. Recepción de los ángulos de cada servomotor: si el microcontrolador recibe el comando ‘bu’ o ‘ir’. por lo que fue necesario realizar una rutina en donde se espere la recepción de un dato en el puerto UART Rx. ○ ‘ir’: es la instrucción que envía la PC cuando es necesario que el brazo se ubique en una determinada posición (utilizada en la aplicación 2). si es el caso. Hardware: Diseño de plataforma Vision artificial Figura 3. por lo que es necesario hacer la conversión de cadena (string) a entero (int) utilizando la función atoi(). 2 3 27 . Determinación de acción a realizar: Una vez que se produce la recepción de un dato. 7: Estructura del software del microcontrolador 1 Bucle de espera y recepción de instrucción: La comunicación puede realizarse en cualquier momento. ○ ‘bu’: es la instrucción de búsqueda de un objeto (utilizada en la aplicación 1). determinar la tarea a realizar. Las instrucciones posibles son: ○ ‘co’: esta instrucción es enviada por la PC cuando necesita saber si el microcontrolador se encuentra conectado.3.

Hardware: Diseño de plataforma Vision artificial 4 Recepción del estado de la pinza: esta tarea solo se realiza si el comando recibido fue ‘ir’. 5 6 La comunicación con la plataforma de hardware se realiza por USB a través de un puerto COM virtual. Es por ello que el control de los cambios de estado de cada uno se realiza por interrupciones del timer. 28 . para que su movimiento sea controlado. ● Cinemática Directa: Conjunto de ecuaciones que relacionan el valor de cada una de las coordenadas articulares con la posición del extremo (efector) del robot en coordenadas espaciales y su orientación. 3. El microcontrolador recibe una cadena de 3 ceros si la pinza del brazo robot debe cerrarse.3. En el anexo se incluye el código fuente del software desarrollado. Dichos trenes de pulsos deben permanecer activos simultáneamente y durante la ejecución de las demás instrucciones. Control de la posición de cada servo: se generan los trenes de pulsos en cada puerto de salida para el control de los servos. 2350). 650.2.writeMicroseconds(). De esto se encarga la función servo.65 ms a 2. A su vez comprende dos análisis: cinemática directa y cinemática inversa. y como su nombre lo indica. 8: Estudio de Cinemática. La velocidad de transmisión debe ser lo más alta posible para que no se produzca un retardo considerable entre el envío de datos y el movimiento del robot. o una cadena de 3 unos si la misma debe abrirse. Por este motivo se utilizó la máxima velocidad posible. 180. el estudio cinemático de un robot permite obtener un modelo matemático que representa el comportamiento cinemático del robot. ● Figura 3. 0.35 ms) utilizando la función map(x. Cinemática La cinemática [13] forma parte del extenso estudio de la robótica cuyo objetivo final es el de obtener un modelo matemático preciso del robot.1. Particularmente. Conversión de ángulos a duración de pulsos: Se realiza el mapeo de los ángulos recibidos (entre 0 y 180°) a los valores de duración de pulsos (de 0. Cinemática Inversa: Algoritmo o conjunto de ecuaciones que representan los valores de las “N” coordenadas articulares en función de los valores de posición y orientación requeridos en el extremo del robot. 115200 Baudios.3.

Hardware: Diseño de plataforma Vision artificial Fue de interés. se optó por utilizar el método geométrico [4]. particularmente. debido a que la aplicación no requería gran precisión. el análisis de cinemática inversa. obtener las ecuaciones de cinemática inversa. El método elegido requirió primero la obtención de las ecuaciones de cinemática directa. Figura 3. Particularmente. por despeje. estará definida la complejidad de las mismas. Existen distintos métodos y herramientas matemáticas para lograr dicho estudio.8 se puede ver la representación gráfica del brazo robot en donde los círculos son puntos de flexión y los triángulos representan puntos de rotación. para luego. Figura 3. 9: Representación gráfica del brazo robot. En la figura 2.3. y según la precisión que se quiera lograr. 10: Representación del brazo robot en 3 dimensiones 29 . ya que era necesario contar con una expresión matemática que permita obtener las posiciones que deben adoptar cada servo para que el extremo del brazo alcance una coordenada deseada.

y. Como puede verse. como se muestra en la figura 2. dado un punto P(x. y’) ). debe adoptar el valor de 0°. para poder independizarnos de la variable se propuso que adopte posiciones entre 0° y 90° según la distancia x deseada. Figura 3. y. Esto quiere decir que. 11: Representación del brazo robot en 2 dimensiones. debe adoptar el valor de 90°. La fórmula lineal a utilizar es: 30 . El ángulo corresponde al ángulo que debe adoptar la base del brazo robot.10. son: Para la obtención de las ecuaciones de cinemática inversa deben despejarse los valores de .3. se trata de un sistema de dos ecuaciones y tres incógnitas. Por lo tanto. Las ecuaciones de cinemática directa obtenidas. z). En la figura 3. y para alcanzar el punto más lejano posible. se tendrán infinitos valores de ángulos que cumplen dicho sistema. por lo que su obtención reduce el problema a dos coordenadas (x’ e y’). y en función de x’ e y’. dados los valores de x’ e y’. . z) donde se encuentra el extremo del brazo. se realizó el mapeo a coordenadas cilíndricas ( P(x’. Hardware: Diseño de plataforma Vision artificial Conocido el punto P(x.11 puede notarse que para que el extremo del brazo alcance un punto cercano.

Resumiendo. De la ecuación Se utilizaron las siguientes identidades trigonométricas para despejar . Hardware: Diseño de plataforma Vision artificial Siendo Xmáx y Xmín el alcance máximo y mínimo del brazo robot. De esta forma. las ecuaciones de cinemática inversa que deben realizarse. el problema se redujo a la obtención de los valores de de y’ se despejó . para luego ser reemplazado en la ecuación de x’.3. z). y. Figura 3. expresados en centímetros. 12: Valores extremos de θ. y . para obtener los valores de ángulos de cada articulación del brazo robot. son: 31 . dado el punto P(x.

“USB video device class”. Webcam Para la selección del sensor óptico se tuvo en cuenta que el mismo debía cubrir dos necesidades. Hardware: Diseño de plataforma Vision artificial Siendo: 3. De todas formas.2. que para el prototipo fue adecuada. La primera es la de poder contar con una calidad de imagen tal que permita el desarrollo del proyecto. este precio eleva considerablemente el costo del proyecto. Por otro lado. era necesario que se trate de un dispositivo del tipo UVC. a precios accesibles. de fabricación china y con un precio rondando los 10U$S. alrededor de 100 U$S. En el mercado local se ofrecen webcams de muy buena calidad con soporte UVC. marca Seisa. Por este motivo se optó por una webcam de calidad regular y con soporte UVC.3. y que resultan ideales para la aplicación. para que sea compatible con el software a desarrollar *11+. 32 .2.

la tasa de datos mínima que el sistema debe manejar es de 30 Mbits/s. es decir no existe un mínimo ni un máximo.2.2. 3. Para lograr esto y darle mayor movilidad al sistema (portabilidad) se diseñó y fabricó un soporte para la webcam. El sistema de software desarrollado implementa imágenes de resolución 640x480. que permite trabajar en tiempo real con los siguientes parámetros: ○ ○ ○ ○ Resolución: 640X480 Fps: 15 a 30 fps Color: 8 bits Ajustes: automático o manual. Hardware: Diseño de plataforma Vision artificial Figura 3.1. Fue realizado en madera y cuenta con 4 niveles de altura. color de 8 bits.2. Diseño y construcción de soporte La aplicación requiere que el dispositivo adquisidor de imágenes se ubique por encima del brazo robot y enfocando el área de trabajo.3. 13: Webcam utilizada. condición que se describe más adelante en la sección 3.4. Esto condiciona la PC a utilizar. Por lo tanto. 33 . Posee un sensor óptico CMOS. y fps a demanda. Dichas alturas están en función de las distancias necesarias para implementar la visión artificial del sistema. ya que depende del procesamiento que se realice entre capturas.

3. es necesario que el ambiente en donde se ubique cuente con una iluminación omnidireccional y difusa. preferentemente de color blanco o negro.3. para favorecer la detección de objetos se requiere de un fondo contrastante. 34 . Comunicarse con el hardware de control del brazo robot.4 PC El sistema de visión artificial debe contar con un sistema computacional que se encargue de las siguientes tareas: ● ● ● ● ● Realizar la lectura de las imágenes. Dado que la imagen se forma a partir de la luz que reflejan los objetos. Controlar el buen funcionamiento de todos los elementos hardware.2. 3. permitiendo y facilitando la extracción de los rasgos de interés para la aplicación. Brindar la interfaz gráfica al usuario.3. Cumpliendo con estas dos condiciones se logró un correcto funcionamiento del sistema. Con esto se conseguiría una imagen sin sombras y con alto contraste.2. Hardware: Diseño de plataforma Vision artificial Figura 3. Dado que la plataforma desarrollada es portable. Área o zona de trabajo En una plataforma de visión artificial la iluminación del ambiente cumple un papel muy importante. Por otra parte. se debe proporcionar al sistema de condiciones de iluminación uniformes e independientes del entorno. 14: Soporte realizado. gracias a que los objetos son iluminados en todas direcciones con luz difusa. Procesar los datos proporcionados por la cámara para realizar el análisis de imagen (realización de los algoritmos y transformaciones de las imágenes).

Además. pues. El puerto USB en su versión 1. cabe destacar que el núcleo o intérprete python administra de la mejor manera los recursos de memoria y CPU necesarios. sistema operativo Windows 7 o Linux.0.0. dos puertos USB 2. 1.1 admite una tasa de 12 Mbits/s.2. los requisitos mínimos que debe cumplir la PC a utilizar son: procesador de 2GHz.3. debe ser capaz de manejar un flujo continuo de datos de 30 Mbit/s como mínimo.2. Esto se puede lograr utilizando puertos USB 2. 35 . como se dijo en la sección 3. El sistema de software y hardware de la plataforma se diseñó para que pueda ser utilizado en cualquier computadora estándar de escritorio o notebook.5 GB de memoria RAM. por lo que no es posible su utilización. Hardware: Diseño de plataforma Vision artificial Una condición limitante es la tasa de datos que debe manipular la computadora anfitriona. en donde la tasa de transferencia máxima posible es de 480 Mbits/s (60 MB/s). placa de video integrada con 256 Mb dedicados. Por lo tanto.

permiten esas características y aúnmás. librerías y módulos libres y de código abierto. Entonces. El software fue desarrollado siguiendo los pasos mostrados en la figura 4. En esta sección se presentan las herramientas utilizadas. dependiendo el caso). Para lograr flexibilidad. Por dar ejemplos. ¿Existen soluciones de software libre? Dentro de las plataformas GNU o BSD hay infinidad de opciones y de comunidades. publicación. pero son plataformas privadas donde se requieren licencias pagas para uso. pero se caracterizan por requerir mucho más conocimiento en programación. a costa de tener un mayor tiempo de desarrollo. Introducción: En todo proyecto que involucre un sistema de cómputo automático. distribución y edición de contenidos.1. LabView. El desarrollador sabe. pero esto implica un costo. así como también.4. se puede asegurar que la etapa más laboriosa y que requiere mayor tiempo de dedicación es el desarrollo del software (o firmware. la descripción del software desarrollado.1.. principalmente por sus problemas de actualización. Software: Diseño y desarrollo del software especializado 4. Entonces. una PC. se requieren soluciones rápidas y concretas dejando de lado las premisas de portabilidad. etc. que un sistema desarrollado íntegramente para una solución particular es altamente sensible a fallos y probablemente inflexible al momento de querer ampliar sus características. ¿No existe forma de generar sistemas que sean flexibles y actualizables? Obviamente sí. la Suite de Matlab. 36 . o algún dispositivo inteligente. además. National Instruments. flexibilidad y estructura o gramática del software. Esto ha generado a lo largo del tiempo muchísimos sistemas personalizados o puntuales a una tarea que han quedado en completo desuso. para una solución del tipo ingenieril en donde generalmente el sistema de cómputo no es el punto central del estudio. portabilidad y la posibilidad de realizar futuras mejoras al software especializado se decidió desarrollarlo íntegramente utilizando herramientas de programación. Software: Diseño y desarrollo del software especializado 4.

2 Herramientas 4. 1: Pasos seguidos en la elaboración del software. Se trata de un lenguaje interpretado o de script. muchas de las características de los lenguajes compilados. se optó por la utilización del lenguaje Python. y analizando las distintas alternativas de lenguajes de programación.2. no obstante. Un lenguaje interpretado o de script es aquel que se ejecuta utilizando un programa intermedio llamado intérprete en lugar de compilar el código a lenguaje máquina que pueda comprender y ejecutar directamente una computadora (lenguajes compilados). Software: Diseño y desarrollo del software especializado Figura 4. por lo que se podría decir que es semi 37 . Python tiene.1 Python Para el logro de un software especializado que cuente con las características deseadas y descriptas anteriormente. Python [5] es un lenguaje de programación creado por Guido van Rossum a principios de los años 90. La desventaja que presentan los lenguajes interpretados es que su ejecución es más lenta. con la particularidad de que cuenta con una sintaxis muy limpia y que favorece un código legible. Sin embargo son más flexibles y más portables que otros lenguajes.4. con tipado dinámico. 4. multiplataforma y orientado a objetos. fuertemente tipado.

etc. sino que su tipo se determinará en tiempo de ejecución según el tipo del valor al que se asigne. La característica de tipado dinámico se refiere a que no es necesario declarar el tipo de dato que va a contener una determinada variable. Por ejemplo. aunque esto es más propenso a errores. 38 . En la tabla 4.) permitiendo que el software desarrollado corra en todos estos sistemas sin grandes cambios. no se permite tratar a una variable como si fuera de un tipo distinto al que tiene. como en Java y muchos otros lenguajes. El intérprete de Python está disponible en multitud de plataformas (UNIX.pyo (bytecode optimizado). y el tipo de esta variable puede cambiar si se le asigna un valor de otro tipo. En Python. Linux. generando archivos . que son los que se ejecutarán en sucesivas ocasiones.pyc o . estando atrás de objective-c (Apple) y C++. OS/2. DOS. Solaris. Software: Diseño y desarrollo del software especializado interpretado. es necesario convertir de forma explícita dicha variable al nuevo tipo previamente. Por otra parte.4. el código fuente se traduce a un pseudo código máquina intermedio llamado bytecode la primera vez que se ejecuta. Mac OS.1 se puede ver que Python es el lenguaje de programación de nueva generación muy popular y el de tercer mayor crecimiento en el último año. Windows. si tenemos una variable que contiene un texto (variable de tipo cadena o string) no podremos tratarla como un número (sumar la cadena “9” y el número 8). En otros lenguajes el tipo de la variable cambiaría para adaptarse al comportamiento esperado.

Google Earth. Es distribuida bajo licencia GNU y otras licencias comerciales. Qt utiliza el lenguaje de programación C++ de forma nativa. Mathematica. como herramientas para la línea de comandos y consolas para servidores. la gran cantidad de librerías disponibles y la potencia del lenguaje. pero.2. 1: Crecimiento de los lenguajes de programación. adicionalmente. Por su sintaxis simple.2. y es utilizada.4. puede ser utilizado en varios otros lenguajes de programación a través de “bindings”. así como también para el desarrollo de programas sin interfaz gráfica. se utilizó Python como lenguaje principal del software desarrollado. por ejemplo. en los programas Adobe Photoshop. 4. Qt4 y Qt4 Designer (librería e IDE para interfaz gráfica) Qt es una biblioteca multiplataforma ampliamente usada para desarrollar aplicaciones con interfaz gráfica de usuario. Skype. clara y sencilla. el gestor de memoria. entre otros. Software: Diseño y desarrollo del software especializado Tabla 4. el tipado dinámico. Siemens. etc. Un binding es una adaptación de una biblioteca para ser usada en un lenguaje de programación distinto de aquél en el 39 .

si Python fuera la cabeza del proyecto. hasta aplicativos de control de procesos donde se requiere reconocimiento de objetos. por hardware. Desde que apareció su primera versión alfa en el mes de enero de 1999. OpenCV es el corazón del mismo. OpenCV Haciendo analogías. Software: Diseño y desarrollo del software especializado que ha sido escrita. se utilizó Qt Designer para el diseño de la interfaz gráfica (ventanas) y las librerías de qt para la gestión de ejecución del sistema en sí.2. ya que básicamente esta API (interfaz de programación de aplicaciones) es la que proporciona todas las funcionalidades de procesamiento de video e inteligencia artificial en tiempo real.3. OpenCV es una biblioteca libre de visión artificial originalmente desarrollada por Intel.4. Por otro lado. Particularmente se utilizó PyQt [17]. un binding de la biblioteca gráfica Qt para el lenguaje de programación Python. 4. se ha utilizado en infinidad de aplicaciones. 40 . una característica altamente distintiva. Esto se debe a que su publicación se da bajo licencia BSD que permite que sea usada libremente para propósitos comerciales y de investigación con las condiciones en ella expresadas. para mejorar rendimiento de gráficos. Figura 4. Desde sistemas de seguridad con detección de movimiento. QT provee además de compatibilidades GPU. 2: Qt Designer utilizado para el diseño del GUI.

Figura 4. El objetivo principal de OpenCV es proveer al desarrollador de una infraestructura en visión computacional simple de utilizar y reduciendo el tiempo de desarrollo de aplicaciones complejas. como se mencionó anteriormente. es una plataforma de hardware libre. imágenes médicas. Esta aplicación se utiliza para la programación en lenguaje C y C++ de la plataforma de hardware Arduino [7]. calibración de cámara.4. Arduino IDE Arduino. interfaces de usuario.2. Su utilización también es posible en Python. Matlab y otros lenguajes de programación. Ruby. 4. incluyendo inspección de productos.4. Software: Diseño y desarrollo del software especializado La librería está escrita en C y C++ y corre en los entornos Linux. visión estéreo y robótica. La librería contiene cerca de 500 funciones [3] que abarcan la mayoría de los campos de aplicación de la visión artificial. basada en una placa con un microcontrolador y un entorno de desarrollo. El mismo. para luego grabarlo en el microcontrolador con un simple clic. seguridad. diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares. Windows y Mac OS X. El entorno de desarrollo integrado Arduino es una aplicación multiplataforma escrita en Java y derivada del IDE del lenguaje de programación Processing. cuenta con un editor de textos y es capaz de compilar el código. 3: Entorno de desarrollo Arduino. 41 .

Gedit es un editor de textos enriquecido compatible con UTF-8 (formato de codificación de caracteres) para GNU/Linux. Para la aplicación de la sección 4. Software: Diseño y desarrollo del software especializado 4. como lenguajes de marcado. Además. Figura 4.5. Para esta aplicación fue el color y márgenes de tamaño máximo y mínimo. 4. Diseñado como un editor de textos de propósito general. es que está distribuido bajo las condiciones de la licencia GPL. es decir que es software libre. se realizó la programación de todo el sistema en un editor simple de texto.5) es algo extremadamente complejo aplicar. 42 . Incluye herramientas para la edición de código fuente y textos estructurados. quien únicamente se encarga del seteo inicial del sistema. para que luego el brazo pueda tomarlos y depositarlos en un lugar específico definido como “basurero”.2. y uno de los motivos de su elección. El método de auto aprendizaje (explicado en la sección 2. Aplicación 1: Reconocimiento de objetos La aplicación desarrollada consiste en la utilización de los algoritmos de procesamiento de imagen para el reconocimiento del color. principalmente por la falta de portabilidad a la hora de editar código.3. Mac OS X y Microsoft Windows. gedit enfatiza la simplicidad y facilidad de uso. 4: Editor de textos Gedit.4.4 fue la geometría del objeto (su forma) y tamaño en pixeles. por lo que se decidió que las tareas de detección se basen en conocer parámetros previos del objeto de interés.2. Editor de texto Gedit Ante la complicación que acarrera utilizar un entorno de desarrollo integrado. tamaño y las posiciones de los objetos dentro de un espacio de trabajo. como por ejemplo Eclipse. El brazo robot interactúa con su entorno sin necesidad del usuario.

Saturación. ● Se calcula el área de cada contorno y se descartan aquellos que no cumplan con el tamaño mínimo y máximo. ● Utilizando la función cv. Procesos principales Se explicarán más detalladamente los procesos más importantes: 1) Búsqueda de objetos: ● Se convierte la imagen original capturada a formato HSV (Hue. Valor) y se separa el canal Hue (matiz). el canal Hue y el histograma definido por el usuario.5. 5: Procesos de la aplicación 1. 43 .1. 2) Selección de objeto: ● Se obtienen los contornos y las posiciones de todos los objetos utilizando las funciones cv. se obtienen los pixeles de la imagen que cumplen con el rango de color establecido por el histograma. Figura 4. formando la imagen “back projection”.Moments().FindContours() y cv.CalcArrBackProject. Saturation. Value – Matiz. 4.4. Software: Diseño y desarrollo del software especializado El algoritmo básico utilizado para el software es el esquematizado en la figura 4.3. ● Se selecciona el objeto según el criterio preestablecido por el usuario.

implementa un algoritmo de búsqueda iterativo en donde la ventana de búsqueda se va ubicando recursivamente en el centro de masa del “back projection” del objeto. luego. Las principales funciones que debía brindar la interfaz a desarrollar eran: ○ Inicio y detención de la aplicación ○ Control de las funciones ○ Configuración del sistema ○ Calibración ○ Información del estado del sistema ○ Ayuda e instrucciones de utilización 44 . se realiza un escalado de los valores de X e Y en píxeles a centímetros. Esta función. ● La posición calculada se encuentra expresada en píxeles. 4. Si bien la mejor solución hubiera sido utilizar un filtro de Kalman. por lo tanto. conociendo de antemano su relación (por parámetros de configuración). luego.2. la posición del objeto sea obtenida por interpolación. volver nuevamente a la captura de imagen. Interfaz gráfica El principal objetivo de la interfaz gráfica es brindar al usuario un medio de comunicación con el sistema de visión artificial.3. Se espera un cierto tiempo de respuesta de confirmación para. 5) Cinemática inversa: ● Utilizando la posición del objeto y las fórmulas de cinemática inversa del brazo robot (detalladas anteriormente) se obtienen las posiciones en que deben estar cada servo del brazo. 6) Comunicación con el hardware: ● Las posiciones de cada servo (expresadas en ángulos) son enviadas al hardware de control por USB y utilizando un puerto COM virtual de la PC. Conociendo los tiempos de respuesta del sistema y considerando que el autómata presenta un retardo general de 3 segundos a cualquier parte de la imagen. considerando que el movimiento del objeto es rectilíneo y con velocidad constante. como se explicó anteriormente. en el momento de la búsqueda. se calcula la posición futura del objeto. Software: Diseño y desarrollo del software especializado 3) Obtención de las posiciones: ● Se utiliza el algoritmo cv. más precisamente. alcance la posición deseada. se realiza una interpolación lineal para estimar dicha posición.CamShift para obtener el centro del objeto.4. ● Se realiza dicha función una determinada cantidad de veces (configurable por el usuario) para que. para que su efector final. 4) Cálculo de posición futura:  Del proceso anterior se tiene una serie de posiciones que adopta el objeto detectado.

).7). b Ayuda: Allí se incluyen los instructivos de uso del sistema y los datos de contacto. Software: Diseño y desarrollo del software especializado Por otro lado. Con esto se logró que la ventana principal no se sobrecargue de elementos y que resulte sencilla y organizada para el usuario. en otra (figura 4.4. Barra de menú: Se incluyeron los menús de opciones y ayuda. Selección de pestañas: Se organizaron todas las opciones de configuración y calibración en una pestaña aparte a las opciones de inicio. a Opciones: Cuenta con las opciones de cambio de aplicación. La ventana principal de la aplicación 1 puede verse en la figura 4. como se mencionó anteriormente. 3 4 Figura 4. Siguiendo estos objetivos se diseñó la interfaz gráfica en el entorno Qt Designer. carga y guardado de los datos de configuración y salida del sistema. Contenido de la pestaña: Allí se incluyen todos los elementos propios de cada pestaña (informaciones. etc. 45 .6 y consta de los siguientes elementos: 1 2 Cuadro de imagen: allí se muestran tanto las imágenes capturadas por la webcam así como las figuras de detección y los recuadros del área de trabajo. botones. también fue importante lograr que la comunicación entre usuario y el equipo pueda realizarse de forma fácil e intuitiva. Como se mencionó anteriormente. se organizaron todas las opciones de configuración y calibración en una pestaña (figura 4. y las opciones de inicio. detención e información de estado del sistema. y así brindar comodidad y eficiencia al usuario. 6: Ventana principal de la aplicación 1. Cada pestaña se muestra en detalle más adelante. detención e información de estado del sistema.8). sliders.

Estado del sistema: allí se informa al usuario de todos los eventos que realiza el sistema. 2 3 Cada vez que la aplicación se ejecute en condiciones de entorno o ambiente diferente se debe realizar la calibración y configuración del sistema. Botón Probar: ejecuta los algoritmos de búsqueda y detección de objetos. También avisa o alerta cuando ocurre un error o es necesario que el usuario realice alguna tarea. 7: Pestaña “Iniciar”. 3 46 . Los elementos que forman parte de la pestaña “Iniciar” (figura 4. y lo muestra en pantalla. Además habilita los controles de “Ajustes finos” para que se pueda mejorar la detección de objetos.7) son: 1 Información de configuración: en esta sección se muestran los valores de configuración actuales del sistema. Software: Diseño y desarrollo del software especializado Figura 4. Esto tiene la función de evitar que se produzcan cambios en la configuración durante la ejecución del sistema. Dichos valores pueden ser extraídos (leídos) de un archivo de configuración como también pueden ser seteados por el usuario en la sección de configuración. criterio de búsqueda (por tamaño o aleatoriamente) y los tamaños mínimo y máximo de objetos a detectar. Valores de configuración: Allí se ingresan los valores que necesita el sistema para funcionar. Esto es para que el usuario se asegure que el sistema funcione correctamente. Ellos son el valor de la línea blanca (se muestra en pantalla). Para ello la pestaña “Configuración” (figura 4. Botón Iniciar o Detener: cumple la función de poner en marcha el sistema o detenerlo una vez que el mismo está en funcionamiento.8) cuenta con los siguientes elementos: 1 2 Botón Configurar: habilita los demás controles.4.

Evaluando esto último y en vista de que nuestra aplicación no sacaría un amplio provecho de la visión estéreo se decidió por la utilización de una sola webcam para alcanzar el objetivo. cumplen la función de mejorar la detección de objetos. sin estar necesariamente el usuario cerca del brazo o expuesto a un medio hostil. el usuario puede seleccionar en la imagen el color del objeto a detectar. En el inicio se planteó realizar el programa utilizando visión estereoscópica digital. Dicho color (o gama de colores) seleccionado se muestra en la escala cromática inferior.9. 5 Figura 4. 4. El objetivo principal del software es detectar la posición de la mano en las 3 dimensiones. usando dos webcams simultáneamente. Para que el sistema se adapte al medio. Erode y Dilate que deben utilizarse para que el objeto de interés sea detectado correctamente. Aplicación 2: Interfaz inalámbrica usuario-robot En esta aplicación el sistema capta a través de la cámara movimientos o posiciones de la mano del usuario. Ajustes finos: Como se mencionó previamente. su utilización requiere de una calibración casi constante y muy precisa. incluso limita su uso a cámaras de buena calidad.4. los sliders configuran los valores de Threshold. Software: Diseño y desarrollo del software especializado 4 Histograma: Al presionar el botón “Dibujar Histograma”.4. quien de esta manera controla el brazo robot en todo su espacio de acción. Pero en contrapartida. 47 . Las condiciones de iluminación del ambiente pueden causar errores o ruidos en los algoritmos de visión computacional. El algoritmo básico utilizado para el software se muestra en la figura 4. 8: Pestaña “Configuración”. Esta tecnología es utilizada para distinguir profundidad de los objetos análogamente como lo efectúa la visión humana.

● Se realiza una operación lógica NOT para intercambiar zonas oscuras por zonas blancas. del fondo de la imagen (tomada previamente a iniciar el programa) con la imagen S de la mano. ● Se separa de la imagen solo los valores de saturación S. ● Se efectúa la diferencia. Procesos principales Se explicarán más detalladamente los procesos más importantes: 1) Extracción de fondo: ● Se convierte la imagen capturada por la webcam de RGB a HSV.4. 48 .1. 4. Software: Diseño y desarrollo del software especializado Figura 4.4. 9: Procesos de la aplicación 2. en valor absoluto.

Con esto se logra obtener el centro de masa de la mano. y operaciones morfológicas simples: Erode y dilate.ConvexHull2(). 5) Cálculo de posición en Z: ● Sabiendo por ensayos previos la relación entre distancia de la mano al lente de la cámara y el área de la mano en la pantalla: Z=f(area_de_mano). 5) Comunicación con el hardware: ● Las posiciones de cada servo (expresadas en ángulos) son enviadas al hardware de control por USB y utilizando un puerto COM virtual de la PC. Se espera un cierto tiempo de respuesta de confirmación para. es decir se encuentra expresada en píxeles.FindContours(). se calcula la posición en Z en centímetros.Y) a la cual debe dirigirse el extremo del brazo robot. 49 . Con esto se obtiene la mano del usuario aislada del fondo. seguido por la detección de la cáscara o envoltura con cv. 4) Obtención de las coordenadas de posición en X e Y: ● Utilizando el contorno de la mano se extraen los momentos con la función cv.ConvexityDefects. para que su efector final alcance la posición deseada. ● Con el análisis de los defectos se detecta el antebrazo y se lo elimina de la imagen. 3) Reconocimiento de mano abierta o cerrada: ● Con la relación entre el área del contorno y el área de la cáscara se determina si la mano está “ABIERTA” o “CERRADA”. 2) Detección de la mano del usuario: ● Una vez aislada la mano del fondo. se realiza la función ThresHold. se realiza un escalado de los valores de X. volver nuevamente a la captura de imagen. luego. se detecta el contorno con la función cv. 6) Traducción y envío de datos al robot: ● Del proceso anterior se cuenta con la posición de la mano del usuario relativa a su posición en la imagen. Por lo tanto. como un área independiente. Con los defectos de concavidad se puede analizar la imagen y detectar dedos. posición de la mano y antebrazo. conociendo de antemano su relación (por parámetros de configuración).4. ● De la cáscara y el contorno se realiza la detección de los defectos de concavidad con cv. Software: Diseño y desarrollo del software especializado ● Con los valores de configuración definidos por el usuario. se obtienen las posiciones en que deben estar cada servo del brazo. comando que se enviará luego al brazo robot.Y en píxeles a centímetros. 4) Cinemática inversa: ● Utilizando la posición obtenida en el proceso anterior y las fórmulas de cinemática inversa del brazo robot.Moments(). es decir se obtiene la posición (X. palma de la mano.

Botón Iniciar o Detener: pone en marcha el sistema o lo detiene si se encuentra en funcionamiento. Figura 4.11) son los mismos que para la aplicación 1: 1 2 3 Información de configuración: en donde se muestran los valores de calibración actuales del sistema.2. 50 . detención e información de estado del sistema. Interfaz gráfica La ventana principal de la aplicación 2 (figura 4. Los elementos que forman parte de la pestaña “Iniciar” (figura 4. Contenido de la pestaña: Allí se incluyen los elementos propios de cada pestaña.10) se organiza y posee la misma estructura que la aplicación número 1. Consta de los siguientes elementos: 1 2 3 4 Cuadro de imagen: allí se muestran las imágenes capturadas por la webcam y las figuras de detección de la mano del usuario (contorno y defectos). 10: Ventana principal de la aplicación 2. Selección de pestañas: Las opciones calibración se encuentran en una pestaña aparte a las opciones de inicio.4. Software: Diseño y desarrollo del software especializado 4. que se detallan más adelante.4. Estado del sistema: en donde el sistema se comunica con el usuario. Barra de menú: Se incluyen los menús de opciones y ayuda de la misma forma que en la aplicación de detección de objetos.

En la figura 4. por lo que cualquier ruido en la imagen o cambio en la iluminación puede ocasionar un funcionamiento incorrecto o incluso que el sistema no funcione. mostrando la detección de la mano en la pantalla. Allí se calibra. Botón Ver Detección: Al presionar se realizan los mismos algoritmos que el programa principal. Controles de calibración: posee sliders que configuran los valores de Threshold. con la diferencia que no se envían datos al brazo robot.12 se muestra la pestaña de “Calibración” en la que se incluye: 1 2 Botón Calibrar: habilita los demás controles e inicia los algoritmos de calibración (que se muestran en pantalla). Este control se utiliza para asegurarse de que el sistema funciona correctamente con la calibración realizada. 3 51 . la relación píxeles a centímetros ingresando el valor de la longitud de una línea que se muestra en pantalla. además. particularmente. Hay que recordar que el programa principal detecta continuamente el contorno de la mano del usuario y calcula su área. Software: Diseño y desarrollo del software especializado Figura 4. Esta aplicación. es muy sensible a las condiciones de iluminación del ambiente y del fondo del espacio de trabajo.4. 11: Pestaña “Inicio”. Erode y Dilate que deben utilizarse para que la mano del usuario sea detectada correctamente. Para ello la calibración inicial del sistema es fundamental para que la detección de la mano del usuario sea posible.

52 . Software: Diseño y desarrollo del software especializado Figura 4.4. 12: Pestaña “Configuración”.

Una vez realizado el cálculo de cinemática inversa. Manteniendo X en un valor constante (13 cm). Brazo Robot Para lograr el buen funcionamiento del brazo robot se realizaron pruebas de su sistema de control. Se calculó el error relativo de cada medida. 5. Prueba de posicionamiento de la base. 53 . Uno de los componentes más importantes de dicho sistema es el cálculo de cinemática inversa. Ellas son: ○ ○ Prueba de posicionamiento en X e Y. se deben tomar los objetos dependiendo de su color y tamaño. Implementación: Ensayos y resultados En la presente sección se describen las pruebas realizadas para comprobar el buen funcionamiento del proyecto y los resultados obtenidos. se enviaron sucesivamente dichos datos al hardware de control del brazo robot.2). se realizó la medida de cada altura Z obtenida (figura 5. Se realizó la medida de cada distancia X obtenida (como se muestra en la figura 5. Prueba de posicionamiento en X y Z La prueba de posicionamiento se realizó siguiendo los siguientes pasos: 1 2 3 4 5 6 Manteniendo Z en un valor constante (1 cm). y enviados los datos al brazo robot.1. se fue variando Z entre 0 cm y 12 cm. se realizaron los cálculos de cinemática inversa para valores de X entre 5 cm y 27 cm (máxima extensión del brazo robot). Sus resultados permitieron la corrección de errores y la determinación de las restricciones y consideraciones especiales que se debían tener en cuenta a la hora de la implementación de la plataforma. donde a partir de las coordenadas obtenidas del software de visión artificial. De igual forma. Una vez obtenidos los valores de ángulos de cada articulación.1). Es por ello que se realizaron dos pruebas de posicionamiento con el objetivo de corregir desviaciones y determinar el rango de trabajo del brazo robot.5. Implementación: Ensayos y resultados 5. se realizó la prueba para el eje Z. Se realizaron ensayos al sistema de visión artificial y al sistema de control del brazo robot.

22 92.5.5 5.75 45 41.84 17.8 21.01 0.38 24.75 30 26.14 88.1 95.07 68.79 42.055 0.011 54 .5 9. Implementación: Ensayos y resultados Los datos obtenidos fueron: Tabla 5.007 0.031 0.5 24.8 26.56 26.5 7.3 100.5 63.27 28.2 6.5 48.008 0.1 13.25 22.8 85.25 37.61 34.75 60 56.25 81.071 0.4 14.02 0.59 42.4 15.92 53.012 0 0. (°) (°) (°) Xmed (cm) 108 105.79 38.7 103.55 63.087 0.87 23.7 X (cm) 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 E relativo 0.005 0.9 21.33 32. 1: Mediciones de posicionamiento en X.1 18.58 48.13 37.8 25.25 52.42 31.89 47.19 90 86.2 30.46 20.62 32.03 0.2 17 18.84 48.8 12.43 77.4 39.25 67.2 48.6 23.37 73.7 10.7 22.021 0.8 20.008 0.033 0.1 24.028 0.58 43.3 6.018 0.3 8.5 78.75 15 11.75 75 71.28 48.009 0.99 37.5 33.48 8.25 82.38 45.83 58.05 44.3 16.013 0.12 45.25 7.34 47.8 98.017 0.5 18.06 0.9 19.005 0.

87 -4.625 0.37 22.2 5.5 2.1 4.266 0.85 94.9 0 0.5 6.227 0.47 92.7 60 60 60 60 60 60 60 60 60 60 60 60 60 -1.5 -0.54 0.4 91.3 8.6 7.7 87.4 0.44 85.25 93. (°) (°) (°) Zmed (cm) 73. Implementación: Ensayos y resultados Figura 5.9 1 0.69 1.75 -33.5.2 E relativo 1.5 90.31 78.67 8.7 0.312 0.89 15.4 94.86 -11.3 3.12 38.83 89. 1: Mediciones de posicionamiento en X.233 55 .95 83. Z (cm) 0 1 2 3 4 5 6 7 8 9 10 11 12 Tabla 5.5 -25.6 -18.25 46.483 0.1 30.98 54. 2: Mediciones de posicionamiento en Z.56 93.27 0.9 1.5 9.

7 %). Como solución se propuso agregar un valor de offset. Implementación: Ensayos y resultados Figura 5. Los errores de posición para la coordenada Z. Resultados: Los errores de posición para la coordenada X tuvieron un máximo de 0.3. Los resultados de dicha corrección se pueden ver en la tabla 5. 2: Mediciones de posicionamiento en Z. Analizando los valores de Z medidos se notó que se encuentran aproximadamente de 2. de 2. 56 . Esto se debe principalmente al peso del extremo del brazo robot. el nivel de error obtenido es aceptable. Considerando la aplicación y las dimensiones de los objetos a clasificar mediante el brazo.3 cm. Puede notarse que el error cometido resultó considerablemente menor.087 (8.5.3 cm (en promedio) por debajo de los valores reales de Z. resultaron muy superiores en comparación a la coordenada X. a las fórmulas de cinemática inversa.

5 6.87 -13.56 6.9 Z (cm) 0 1 2 3 4 5 6 7 8 9 10 11 E relativo 0.18 91.03 94.18 91.18 91. se enviaron sucesivamente dichos datos al hardware de control del brazo robot.18 91.7 20.18 93.8 4.009 Prueba de posicionamiento de la base La prueba de posicionamiento de la base se realizó siguiendo los siguientes pasos: 1 2 Manteniendo X y Z en un valor constante (13 y 1 cm respectivamente).5 1.7 20.7 20.7 10.011 0.51 91.32 -46.9 9.025 0. 4: Mediciones de posicionamiento del ángulo de la base.5.43 94.77 28. Una vez obtenidos los valores de ángulos de cada articulación.09 20.18 91.7 20.7 20.07 93.03 0. Se calculó el error relativo de cada medida. (°) (°) (°) Zmed (cm) 84.005 57 .63 -28.18 91. se realizó el cálculo de cinemática inversa.18 91. 3: Mediciones de posicionamiento corregido en Z.1 0.95 88.18 20.15 -6.3 3.05 0.01 0.7 20.7 20. Los datos obtenidos fueron: Tabla 5. variando el ángulo (ángulo de la base) entre 0 y 180°.3).8 8.05 0.53 84.7 5.66 78.04 -36.083 0.65 -20.18 91.69 60 60 60 60 60 60 60 60 60 60 60 60 0.7 60 60 60 60 60 60 60 60 60 60 2 21 42 63 82 99 119 140 160 179 3 4 (°) 0 20 40 60 80 100 120 140 160 180 E relativo 0.01 91. Se realizó la medida de cada ángulo obtenido (como se muestra en la figura 5.4 2. (°) (°) (°) medido (°) 91.7 20.6 7.2 88.06 0.7 20.58 35.4 0.05 0.09 94.025 0.057 0.008 0 0 0.18 91. Implementación: Ensayos y resultados Tabla 5.63 -0.1 0.2 3.7 13.05 0.

Se siguieron los siguientes pasos: 1 2 Se realizó un algoritmo similar al utilizado en la aplicación 1 para detectar objetos y determinar su posición en un plano. Resultados: Los errores de posición para el ángulo de la base del robot fueron como máximo del 0. Implementación: Ensayos y resultados Figura 5. Se realizaron medidas de posición (X.2.Y) para un mismo objeto ubicado en distintas posiciones del plano al mismo tiempo que se tomaban las lecturas de las posiciones detectadas por el algoritmo (figura 5.5.05 (5%). El nivel de error obtenido fue aceptable por lo que no fue necesaria ninguna calibración del sistema.4). Se calculó el error relativo de cada medida 3 58 . Aplicación 1 Para lograr que la aplicación 1 funcione correctamente fue necesario comprobar que la determinación de las posiciones de los objetos detectados por parte del algoritmo sean lo más precisa posible. 5. 3: Mediciones de posicionamiento del ángulo de la base. Para ello se realizó una prueba de comparación de las posiciones detectadas respecto a las reales.

5 7 13. (cm) Y detec.01 0.3 5. por lo que el funcionamiento del algoritmo resultó muy aceptable.7 -5. solo en dos mediciones se obtuvieron errores del 15%.4 5.014 Como se expone en la tabla 5.05 6.011 0.075 0. La aplicación alertaba de que el objeto detectado se encontraba fuera de área.15 X (cm) 8 -0.018 0.75 15.16 0.5 12.5 3. Cabe aclarar que en el transcurso del ensayo se debió corregir un error que se producía en la ejecución del algoritmo.025 0.05 -7.044 0.25 8. Esto se producía debido al ruido que contenía la imagen capturada.2 -0. 59 .6 -6 -8.019 0.25 0.65 13.05 0. cuando este se encontraba realmente dentro del rectángulo de trabajo. Implementación: Ensayos y resultados Figura 5. 4: Medición de posiciones de objetos.3 9.5 14.088 0. 5: Mediciones de posicionamiento del ángulo de la base.5.051 0 0.5.75 3.55 -9. (cm) E relativo (X) 6.8 0.55 10.3 10. Los datos obtenidos fueron: Tabla 5.025 0.45 -5 0 -7.033 0.038 0.5 6 17 8.4 9.55 -5. El mismo ocasionaba que las posiciones detectadas sean erróneas y por ende la función encargada de realizar la interpolación de las muestras entregaba un valor fuera de los límites del área de trabajo. El resto de las posiciones detectadas contuvieron menos del 8% de error.1 6.4 9 9.5 8.034 0.85 17. Y (cm) X detec.5 6 Resultados: E relativo (Y) 0.166 0. El problema se corrigió incorporando al software una rutina que descarte los valores erróneos de posiciones (aquellos que se encuentren fuera del rango de trabajo) y que inicialice la detección nuevamente.25 13.

Se intentó también utilizar la luz solar como fuente de iluminación del sistema. se realizó la lectura de los valores de área medidos para distintas alturas. Esto ocasionaba que la reflexión de la luz en los objetos sea excesiva. Para ello se realizaron distintas mediciones del área de la mano del usuario. la misma no resulta constante a lo largo del día. como se expone en la tabla 5. La prueba de medición de área de la mano se realizó siguiendo los siguientes pasos: 4 5 6 7 Se realizó un algoritmo similar al utilizado en la aplicación 2 para detectar la mano del usuario. Eligiendo la técnica adecuada de iluminación se pudo lograr un aumento en la exactitud. en la fiabilidad del sistema y en su tiempo de respuesta.Z) a un espacio en coordenadas cilíndricas (X. De esta forma se pretendió obtener una función que describiera el movimiento del brazo en el eje Z. La complejidad surge al momento de la medición de la altura Z. 5. Manteniendo la mano abierta en una posición constante de X e Y. La misma debía ser difusa. Se realizaron gráficos de forma de mostrar el tipo de relación que existe entre el área calculada y la altura. . por lo que los colores detectados por la webcam diferían a lo largo del tiempo. Si bien la misma era difusa. Se anotaron dichos valores en la tabla 5. coordenadas necesarias para la cinemática inversa del brazo robot. Las coordenadas X e Y pueden conocerse fácilmente ya que representan la posición de la mano en la pantalla (centro de masa de la mano).4).5. mejorando las prestaciones de la plataforma. enfocada por la webcam. La aplicación se basa en mapear un espacio de coordenadas ortogonal (X. omnidireccional y constante a lo largo del tiempo. capturaba imágenes con mucho brillo. obtener su contorno y calcular el área del mismo. y la webcam.Z). a distintas alturas (figura 5. por poseer capacidades limitadas. 60 . De la misma forma se leyeron los valores de área de la mano cerrada a distintas alturas.7.6. por lo tanto es una medición directa.Y. En los primeros intentos de la prueba se contaba con una iluminación directa por parte de una lámpara halógena. Implementación: Ensayos y resultados Por otra parte se puede decir que gracias al ensayo realizado se pudo comprobar que las condiciones de iluminación del ambiente influyen permanentemente en el funcionamiento de los procesos de visión artificial. utilizando su propia mano para manipular el robot. Aplicación 2 En esta aplicación el usuario interactúa con el sistema de manera constante.3.

7: Mediciones de área de la mano cerrada.5. Z medido (cm) Área Calculada ( í 8 10 12 14 16 18 20 28058 30626 33105 37865 42584 48116 54354 ) 61 . Implementación: Ensayos y resultados Los datos obtenidos para el caso de la mano abierta fueron: Tabla 5. 5: Mediciones de área de la mano abierta. 6: Mediciones de área de la mano abierta. Los datos obtenidos para el caso de la mano cerrada fueron: Tabla 5. Z medido (cm) Área Calculada ( í 0 2 4 6 8 10 12 14 16 18 20 50345 54072 59744 57350 69625 76049 80328 84314 93915 10013 113292 ) Figura 5.

7: Relación área de la mano abierta a altura. 6: Mediciones de área de la mano cerrada. Implementación: Ensayos y resultados Figura 5. Gráficos obtenidos: Figura 5. 8: Relación área de la mano cerrada a altura. 62 . Figura 5.5.

5. La prueba realizada permitió asegurar que el método de determinación de altura en función de su área en la pantalla genera buenos resultados. y como puede verse. Dicha diferencia se muestra en la figura 5. Este valor se incluye en el algoritmo de la aplicación 2 para corrección de la altura (cuando se cierra la mano). 63 .7. Implementación: Ensayos y resultados Figura 5. es un valor prácticamente constante para las distintas alturas (47315 í en promedio). es necesario conocer la diferencia que existe entre ambas áreas para realizar la corrección correspondiente. dentro del rango de alturas a utilizar.8. Resultados: Analizando las figuras 5.6 y 5. Debido a que la altura no debe variar en gran medida si la mano se abre o se cierra. 9: Diferencia entre áreas. puede decirse que las relaciones entre ambas magnitudes son prácticamente lineales.

Es decir que es independiente tanto del autómata. siempre y cuando cumpla la misma función y respete el protocolo de comunicación utilizado. 64 . como del entorno en el cual se implementa. Se ha logrado el diseño e implementación de una plataforma de visión artificial. Se logró que la interfaz gráfica resulte sencilla e intuitiva. La adecuada selección de las herramientas de software empleadas permitió que la aplicación final sea portable y pueda ser ejecutada en cualquier computadora estándar. permitiendo al usuario realizar la configuración del sistema de forma fácil. Además se realizó el estudio de cinemática inversa permitiendo que el autómata manipule y clasifique los objetos conociendo solamente sus posiciones. una webcam (para la captura de imágenes) y un sistema computacional (para el procesamiento de datos). en entornos Windows y Linux. El método geométrico utilizado fue una buena opción ya que. El mismo permite que cualquier componente sea reemplazado por otro. Se diseñó y construyó un brazo robot de 5 grados de libertad (DOF) con materiales de bajo costo. La misma quedó conformada por el brazo robot construido (sistema dinámico) y su hardware de control. Conclusiones 6. puede decirse que depende de la iluminación del ambiente en donde se encuentre. permitió resolver el problema de las múltiples soluciones determinando la posición del efector final al momento de manipular los objetos. encargado de realizar los algoritmos y funciones necesarias. Para la implementación de la visión artificial en la plataforma se desarrolló un sistema de software especializado. cumpliendo con el objetivo principal del proyecto. En cuanto a su funcionamiento. Conclusiones Con los estudios y las tareas realizadas se logró desarrollar un sistema clasificador de objetos.6. en donde se utiliza la visión artificial para la detección de las posiciones y las características de los objetos (color y tamaño). siendo un método sencillo. Por otra parte. El sistema de visión computarizada realizado es portable y flexible. Se elaboraron y aplicaron algoritmos de visión por computadora capaces de extraer la información visual necesaria para detectar objetos y reconocer la mano del usuario. el software también se encarga de brindar una interfaz gráfica al usuario y de comunicarse con el hardware de control del brazo robot. Gracias a la facilidad de uso de los lenguajes de programación y librerías utilizadas se puede dar mayor funcionalidad al sistema e implementar nuevas aplicaciones mediante simples modificaciones. del sensor óptico y del sistema de cómputos utilizados. Se debe proporcionar al sistema de condiciones de iluminación uniformes generando el menor contenido de ruido en la imagen capturada.

presión.) con el fin de ampliar la funcionalidad del sistema.6. Implementación de visión estéreo que permitan el análisis de profundidad. Utilizar cámaras digitales de mayor calidad para mejorar el desempeño de los algoritmos de visión artificial. Conclusiones 6. Agregar funciones al sistema (más aplicaciones). y de incorporar nuevas funcionalidades. Implementar realimentación activa del brazo robot. humedad.1. etc. Implementar un control a distancia del sistema vía Internet (servidor SSL). Independizarse del uso de una PC o notebook desarrollando un sistema embebido capaz de realizar el procesamiento de datos. Aumentar grados de libertad del autómata (incluir ruedas y hacerlo móvil). 65 . con el objetivo de mejorar su control. Trabajos futuros Del desarrollo de este proyecto y de las conclusiones obtenidas surgen propuestas de trabajos futuros que pueden realizarse de forma de mejorar el funcionamiento y desempeño del sistema. Integración del sistema desarrollado al entorno ROS [8]. Incorporar a la plataforma un autómata de mayor tamaño y capacidad (brazo industrial). A continuación se nombran algunas de ellas: ● ● ● ● ● ● ● ● ● ● ● Inclusión de filtros predictivos Kalman para la determinación de posiciones de objetos en movimiento. que permita conocer las posiciones de sus articulaciones. Agregar sensores al efector final del brazo robot (temperatura.

Ctypes Package Examples.ros.uk/.com/robot_arm_tutorial. 2010. 2008. Raúl González Duque. 2012. Introducción a los sistemas de visión artificial. O’Reilly Media.ideasonboard. 2012.cc/index. OpenCV v2.net/tutorial-python/. Arduino Language Reference. 2012. PyQt Class Reference. http://mundogeek. Tutorial de OpenCV. 2012. Bibliografía 7. 2012. Learning OpenCV.sourceforge. Rick McClelland.org/uvc/.co/ndetalle/article/usan-la-magia-de-los-numerospara-encontrar-objetos-ocultos. 2007.0 Documentation. Adrian Kaehler. http://www.python. 2012.csail. http://wiki.neuroforge. 2005.html. José Jaime Esqueda Elizondo. 2012.google. Fundamentos de procesamiento de imágenes. Python para todos. Laboratorio del MIT. Robótica: manipuladores y robots móviles. http://blog. Universidad Autónoma de Baja California. Robot Operative System (ROS) Documentation. http://arduino.agenciadenoticias.edu.net/Docs/PyQt4/classes.societyofrobots.html/. https://code. Luis Enrique Palafox Maestre.mit.4.com/p/ctypes-opencv/.org/wiki/. 2001.co. Artículo periodístico sobre estudios en Universidad Nacional de Colombia.shtml/. http://www. http://pyqt. http://www. http://docs.php/Main_Page/. 2010.opencv.unal.pinguino. Computer Vision Lab. 2012. http://docs. Marcombo. 2005. 2011. http://www.com/. John Daniel Bell. Bibliografía [1] [2] Gary Bradski. Blog de Visión Artificial y Robótica. OpenCV Tutorials.7.edu/. 2009.org/2/.7. [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] 66 . 2012. Raúl Igual.cc/en/Reference/HomePage/. Linux UVC Driver Support.martinperis. 2008. Martin Peris. http://www. http://www. Aníbal Ollero Baturone.org/. especializado en Computer Vision. Jorge Rodríguez Araújo. Carlos Medrano.3 documentation. Python v2. Robot Arm Tutorial. Pingüino Reference.

Servo pinza. Servo servo3. servo1. // incoming serial byte char z_servo1[4].attach(9). 67 .setTimeout(700). #define cerrado 1550 #define abierto 800 int i=1. int i1=800. int i3=1600. int hand. int zbasei. Servo servo2. // digital sensor int j=0. int i2=2350. char z_servo2[4].attach(11). char cadena1[10]. char base_servo[4]. int z1. Servo giromano. char mano[4]. Anexos 8. servo3. giromano. Anexos 8. int z3.1. Servo base. Anexo A: Programa del microcontrolador #include <Servo.8. Serial. int zbaseb. int zbase. void setup() { //nuetros servos van desde 700 a 2450 useg Serial.h> Servo servo1. char z_servo3[4].h> #include <stdlib. int z2.attach(12). String cadena2. servo2.attach(8). base.attach(13).begin(115200).

} else {i1--.attach(10). Anexos pinza.}} } void levantar() { z1=800.writeMicroseconds(i1).writeMicroseconds(650).} servo2. z3=1600.} else {zbase--.} if (i3!=z3) { if (i3<z3) { i3++.writeMicroseconds(2350).} base. servo3.} servo3. servo2. Serial.writeMicroseconds(cerrado). servo1. z2=2350.}} while (zbase!=zbasei){ if (zbase!=zbasei) { if (zbase<zbasei) { zbase++.8. delayMicroseconds(500). delayMicroseconds(500). while (i1!=z1||i2!=z2||i3!=z3){ if (i1!=z1) { if (i1<z1) { i1++.flush(). giromano. delayMicroseconds(500).} 68 . z2=2350.} servo1.writeMicroseconds(800).writeMicroseconds(1500).writeMicroseconds(1600).writeMicroseconds(zbase). z3=1600. while (i1!=z1||i2!=z2||i3!=z3){ if (i1!=z1) { if (i1<z1) { i1++.} else {i2--. } void irinicio() { z1=800. delayMicroseconds(500).} else {i1--.writeMicroseconds(i3). zbasei=1500.} if (i2!=z2) { if (i2<z2) { i2++.} else {i3--.writeMicroseconds(i2). base. pinza.

} if (i2!=z2) { if (i2<z2) { i2++.} else {i2--.writeMicroseconds(i2). delayMicroseconds(500).} servo3. zbaseb=2450.writeMicroseconds(i1).} servo2.} if (i3!=z3) { if (i3<z3) { i3++. delayMicroseconds(500).} if (i2!=z2) { if (i2<z2) { i2++. while (zbase!=zbaseb){ if (zbase!=zbaseb) { if (zbase<zbaseb) { zbase++. delayMicroseconds(500).writeMicroseconds(zbase).} }} void irbasurero() { z1=1600. delayMicroseconds(500). delayMicroseconds(500).} servo1. delayMicroseconds(500).writeMicroseconds(i1).} if (i3!=z3) { if (i3<z3) { i3++.writeMicroseconds(i2).8.}} } void ir() { base.writeMicroseconds(i3).} servo2. z3=1600. Anexos servo1. delayMicroseconds(500).} else {i3--.} else {i3--.} else {i1--.writeMicroseconds(zbase).} else {zbase--. z2=1600. while (i1!=z1||i2!=z2||i3!=z3){ if (i1!=z1) { 69 .} else {i2--.} servo3.} base.}} while (i1!=z1||i2!=z2||i3!=z3){ if (i1!=z1) { if (i1<z1) { i1++.writeMicroseconds(i3).

readBytes(z_servo2.3). 0. 650. Serial.8. 650. Serial.j<=9. if(strcmp(cadena1. Serial.3). for (j=0. zbase=map(zbase. 0. delayMicroseconds(500). z3=map(z3. 650.flush(). 2350).j++){ // bucle para borrar cadena cadena1[j]='\0'.} servo1. } } if(strcmp(cadena1. 2350). z1=map(z1. zbase=atoi(base_servo).println("busco"). Serial."bu")==0){ Serial."co")==0){ Serial. Anexos if (i1<z1) { i1++. Serial.println("buscando").} servo2.flush().writeMicroseconds(i3). z2=map(z2.readBytes(cadena1. z1=atoi(z_servo1).readBytes(z_servo3. delayMicroseconds(500). 0. 180.readBytes(z_servo1. Serial. delay(1).3). Serial. z2=atoi(z_servo2). Serial.}} } void loop() { if (Serial. 2350).println("conectados"). if (z1!=650&&z2!=650&&z3!=650&&zbase!=650) { pinza.} else {i2--.} if (i3!=z3) { if (i3<z3) { i3++. ir().} else {i1--.writeMicroseconds(i1).writeMicroseconds(i2). z3=atoi(z_servo3).} servo3.2). 0.flush().available() > 0){ delay(1).} else {i3--. 2350).3).} if (i2!=z2) { if (i2<z2) { i2++. delayMicroseconds(500).writeMicroseconds(abierto). 180. 180. 70 . Serial. 180. delay(500).readBytes(base_servo. 650.

hand=atoi(mano).j++){ // bucle para borrar cadena cadena1[j]='\0'.} ir().println("voy").3).writeMicroseconds(abierto). 650.3). 180.readBytes(z_servo1. irinicio()."ir")==0){ Serial. Serial.flush(). z1=map(z1. delay(500). Serial. pinza. } } if(strcmp(cadena1. z1=atoi(z_servo1). if (z1!=650&&z2!=650&&z3!=650&&zbase!=650) { if (hand==1){ pinza. } else{pinza. Serial. Anexos pinza. 2350). Serial.readBytes(z_servo2. delay(500). 180.writeMicroseconds(cerrado). 0.writeMicroseconds(cerrado). z3=map(z3.writeMicroseconds(cerrado). 180. delay(100). pinza. zbase=atoi(base_servo).3).readBytes(base_servo.j<=9.3).flush(). z2=atoi(z_servo2). z3=atoi(z_servo3). 2350). z2=map(z2. 0. Serial. 650.3).readBytes(z_servo3. 0. 0.readBytes(mano. zbase=map(zbase. Serial. 650. irbasurero(). } } Serial. levantar().writeMicroseconds(abierto). 2350). } for (j=0. } } 71 . 650.8. 2350). 180.