INSTITUTO POLITÉCNICO NACIONAL Centro de Investigación en Computación Laboratorio de Robótica y Mecatrónica

“Control inteligente de un robot humanoide para la recolección de objetos” TESIS Que para obtener el grado de Maestría en Ciencias en Ingeniería de Cómputo

PRESENTA Andrea Benítez Dávila

Directores de tesis: Dra. Elsa Rubio Espino Dr. Juan Humberto Sossa Azuela

México, D.F., Diciembre de 2013

~ II ~

~ III ~

Resumen El trabajo aquí expuesto, aborda el control tipo inteligente con el que fue dotado un robot tipo humanoide. Este control se basa en redes neuronales de primera generación para realizar la clasificación de objetos, así como en un sistema de inferencia difusa para indicar el movimiento que debe realizar dicho robot, lo anterior está alimentado por un sistema de visión por computador. El objetivo principal que se persigue, es que el robot humanoide busque objetos por medio del color, se dirija hacia ellos para recolectarlos y finalmente los deposite en un contenedor.

~ IV ~

Abstract The work presented incorporates the smart control which it was provided humanoid robot. This control is based on first-generation neural networks for the classification of objects as well as fuzzy inference system to indicate the movement to be performed by the robot, the above is powered by a computer vision system. The main goal to be achieved is that the humanoid robot find objects by color, is addressed towards them to collect them and finally deposited in a container.

~V~

Agradecimientos

Al Centro de Investigación en Computación del Instituto Politécnico Nacional, por darme la oportunidad de realizar una de las metas que más añoraba.

A la Dra. Elsa Rubio Espino, por otorgarme sus conocimientos para mi formación académica, por sus consejos, apoyo y comprensión en los momentos de tensión, por guiarme hacia mi futuro y ser un ejemplo a seguir.

Al Dr. Juan Humberto Sossa Azuela, por otorgarme sus conocimientos para mi formación académica y por brindarme su confianza para representar al Laboratorio de Robótica y Mecatrónica en el extranjero.

Agradezco al Consejo Nacional de Ciencia y Tecnología (CONACYT) por la beca otorgada para realizar mis estudios de tiempo completo en el periódo de dos años, por el apoyo brindado para realizar una estancia de investigación en una institución de prestigio en España y por el apoyo por medio del proyecto: 155014. Así mismo, agradezco el apoyo al Instituto Politécnico Nacional a través de la COFAA y a la SIP-IPN por medio de los proyectos: SIP 20121311, SIP 20131182, SIP 20131505. Al ICyTDF por el apoyo a través del proyecto: 325/2011.

Al Maestro en Estructuras Omar Domínguez Rodríguez por otorgarme su apoyo cuando fallé, por impulsarme a seguir y ponerme en el lugar indicado en el que la vida me dio la mejor oportunidad que fue cursar la maestría. Por cambiar la vida que él amaba para que yo fuera feliz desarrollando mi vida profesional, por amarme como lo hace y por permitirme caminar junto a él.

A mi familia Madre Rosalía, Padre José Luis, Hermana Ana, Hermana Alejandra, Sobrino Ricardo y Sobrina Emilia quienes me han dado siempre su incondicional apoyo, por tener siempre una palabra de aliento cuando las situaciones no iban bien, por darme ánimos para seguir cuando todo funcionaba perfecto y por dejarme ser.

~ VI ~

A mis incondicionales amigos, M. en E. Juan Antonio, M. en E. Sofía, Lic. Lilián, Dra. Jazmín, Lic. Idaly, M. en C. Magda, M. en C. Oscar, M. en C. Adolfo y Lic. Saud por brindarme un espacio en sus vidas y un poco de su tiempo para hacerme ver que la vida se disfruta gracias a las sonrisas.

A Andrea Seidel, por tener siempre los mejores consejos, el abrazo más fuerte y el tiempo para escucharme a pesar de la distancia.

A las personas que formaron mi familia durante tres meses, las cuales me ayudaron a disfrutar de la vida cuando me sentí sola, Anna, Lissa, Andrea, Sofía, Klara, Yerania y Ale. Fue una de las mejores experiencias que tuve, imposible de olvidar.

A Dios que está en el Universo lleno de posibilidades infinitas, por ser tan infinitamente amoroso conmigo y poner en mi camino a cada una de las personas que aquí se encuentran.

~ VII ~

Índice general Resumen ............................................................................................................................................. IV Abstract ............................................................................................................................................... V Agradecimientos ................................................................................................................................. VI Índice general.................................................................................................................................. VIII Índice de figuras ................................................................................................................................. XI

1. Introducción ................................................................................................................................. 1 1.1. Antecedentes ......................................................................................................................... 1 1.2. Planteamiento del problema ................................................................................................ 2 1.3. Justificación ......................................................................................................................... 3 1.4. Objetivos .............................................................................................................................. 3 1.4.1. Objetivo general ........................................................................................................... 3 1.4.2. Objetivos específicos .................................................................................................... 4 1.5. Alcances del trabajo ............................................................................................................ 4 1.6. Contribuciones ..................................................................................................................... 5 1.7. Método de investigación y desarrollo utilizado ................................................................... 4 1.8. Organización del trabajo ..................................................................................................... 6

2. Estado del arte.............................................................................................................................. 8 2.1. Control de mano con cinco dedos montada sobre robot humanoide para agarre y localización visual de objetos (2006) ................................................................................... 8

~ VIII ~

2.2. Manipulador generador de trayectorias para un robot humanoide basado en la visión (2008) .................................................................................................................................. 10 2.3. Control de un robot humanoide con un método no invasivo cerebro-computadora (2008) ............................................................................................................................................ 11 2.4. Localizar y manipular objetos por medio de un robot móvil Kephera II (2009) ................ 12 2.5. Clasificar objetos desconocidos para reciclaje (2010) ...................................................... 13 2.6. Comando de voz para informar al robot el objeto que debe buscar, tomar y transportar (2013) .................................................................................................................................. 15

3. Conceptos básicos y herramientas de diseño ............................................................................ 17 3.1. Conceptos básicos............................................................................................................... 17 3.1.1. Tratamiento de imágenes ............................................................................................ 17 3.1.2. Control difuso ............................................................................................................. 20 3.1.3. Redes neuronales ........................................................................................................ 23 3.1.4. Robot ........................................................................................................................... 26 3.2. Herramientas de diseño ...................................................................................................... 27 3.2.1. Robot humanoide ........................................................................................................ 27 3.2.2. Cámara ....................................................................................................................... 31 3.2.3. Software Matlab .......................................................................................................... 31

4. Metodología................................................................................................................................ 32 4.1. Modelo general del sistema ................................................................................................ 32 4.2. Etapa 1: Entrenamiento ...................................................................................................... 35 4.2.1. Identificación de rasgos en objetos ............................................................................. 35 4.2.2. Entrenamiento de la red neuronal .............................................................................. 38 4.3. Etapa 2: Sistema general .................................................................................................... 40 4.3.1. Búsqueda y segmentación de los objetos por color .................................................... 40 4.3.2. Proceso de reconocimiento y clasificación de objetos................................................ 44 4.3.3. Diseño del sistema de inferencia difusa ...................................................................... 45 4.3.4. Implementación del código para dirigir al robot ....................................................... 53 4.3.4.1. Recolección del objeto ................................................................................ 53 4.3.4.2. Depósito del objeto ..................................................................................... 55 4.3.4.3. Desarrollo de movimientos del robot ......................................................... 55

~ IX ~

4.3.5. Comunicación inalámbrica ......................................................................................... 56

5. Presentación y discusión de resultados ..................................................................................... 58 5.1. Entorno de trabajo .............................................................................................................. 58 5.2. Pruebas y resultados ........................................................................................................... 59 5.2.1. Desarrollo de prueba: Configuración tipo 1 .............................................................. 60 5.2.2. Desarrollo de prueba: Configuración tipo 2 .............................................................. 62 5.2.3. Desarrollo de prueba: Configuración tipo 3 .............................................................. 63 5.2.4. Desarrollo de prueba: Configuración tipo 4 .............................................................. 67 5.3. Fallas y correcciones .......................................................................................................... 69

6. Conclusiones y trabajo futuro ................................................................................................... 73 6.1. Conclusiones ....................................................................................................................... 73 6.2. Trabajo futuro ..................................................................................................................... 74

Referencias ....................................................................................................................................... 76 Apéndice A. Conexión del sistema .................................................................................................... 79 A.1. Cargar programas en la tarjeta CM510 ............................................................................ 79 A.2. Conexión general ............................................................................................................... 80 A.3. Fuente de alimentación del robot........................................................................................ 82 Apéndice B. Código generado en matlab ......................................................................................... 83 B.1. Código para obtener momento de Hu ................................................................................ 83 B.2. Código de entrenamiento de red neuronal ......................................................................... 84 B.3. Código general del proyecto ............................................................................................... 85

Apéndice C. Algoritmo para localizar diferentes tonos de color (estancia de investigación) ...... 137 C.1. Artículo presentado en congreso 2012 .............................................................................. 137 C.2. Algoritmo del complemento de la distancia de Manhatttan para calibrar color ............. 139 C.3. Algoritmo para seguimiento del color calibrado .............................................................. 140 C.4. Publicación ........................................................................................................................ 141

~X~

Índice de figuras 2.1 Robot ARMAR en ambiente de cocina .......................................................................................... 9 2.2 Robot HRP2-JSK ......................................................................................................................... 10 2.3 Robot que recolecta un objeto seleccionado por el usuario ...................................................... 12 2.4 Robot Kephera II ......................................................................................................................... 13 2.5 Robot realizando la clasificación de objetos considerados basura ........................................... 15 2.6 Robot Bioloid Premium recolectando el objeto previamente designado por comando de voz .. 17 3.1 Imagen en escala de grises.......................................................................................................... 18 3.2 Imagen en escala de grises e Imagen binarizada a través de un umbral ................................... 20 3.3 Set difuso A con su grado de membresía y universo de discurso ................................................ 21 3.4 Diagrama a bloques de un sistema difuso .................................................................................. 22 3.5 Sistema difuso implementado en Matlab ..................................................................................... 23 3.6 Conjunto de reglas base .............................................................................................................. 23 3.7 Partes que componen una neurona del sistema nervioso humano.............................................. 24 3.8 Modo de activación de la unidad lógica de umbralado .............................................................. 25 3.9 Separación entre dos clases por la operación lógica AND ........................................................ 26 3.10 Robot humanoide de la compañía Robotis ................................................................................ 28 3.11 Partes que incluye el kit de Robotis .......................................................................................... 29 3.12 Software Roboplus Motion ........................................................................................................ 29 3.13 Software Roboplus Task ............................................................................................................ 30 3.14 Tarjeta Zig2Serial conectada al adaptador USB2Dynamixel................................................... 30 3.15 Cámara web de la marca Acteck............................................................................................... 31 4.1 Modelo general del sistema......................................................................................................... 34 4.2 Muestra de imágenes que forman la base de datos..................................................................... 36 4.3 Gráfica comparativa de los rasgos de los objetos ...................................................................... 39

~ XI ~

4.4 Diagrama de flujo que busca el color y hace una segmentación del objeto deseado ................. 41 4.5 Imagen original ........................................................................................................................... 42 4.6 Imagen en el componente rojo. Imagen en escala de grises ....................................................... 42 4.7 Resultado de la resta entre las imágenes de la figura 4.6 .......................................................... 42 4.8. Imagen sin operación morfológica de apertura. Imagen con operación morfológica de apertura remiviendo objetos menores a 300 pixeles para este caso particular............................................... 43 4.9 Rasgo descriptor largo-ancho..................................................................................................... 44 4.10 Rasgo descriptor momento de Hu ............................................................................................. 45 4.11 Porción de código para la activación de la red neuronal......................................................... 45 4.12. Las 9 divisiones por regiones de interés en las cuales se puede localizar el centro de masa del objeto ................................................................................................................................................. 46 4.13 Objeto desplazado a la izquierda ubicado en la región 4 ......................................................... 48 4.14 Conjuntos difusos para ubicar la posición horizontal del objeto ............................................. 49 4. 15 Conjuntos difusos para ubicar la posición vertical del objeto ................................................ 49 4.16 Ventana del toolbox de lógica difusa de Matlab sobre la que se escriben las reglas base ..... 50 4.17 Ventana del toolbox de lógica difusa de Matlab en la que se observa la defusificación .......... 50 4.18 Diagrama de flujo del sistema difuso para controlar trayecto hacia el objeto ........................ 52 4.19 Porción de código en Roboplus Task que integra las tareas a realizar por el robot de acuerdo al valor recibido ................................................................................................................................ 53 4.20 El conteo de pixeles blancos pertenecientes al objeto en la fila 240 ........................................ 54 4.21 Programa Roboplus Motion con movimientos programados ................................................... 55 4.22 Sentencia en el software roboplus task .................................................................................... 56 4.23 Código utilizado para configurar, transmitir y recibir por comunicación Zigbee ................... 57 5.1 Objetos utilizados en las pruebas de recolección ...................................................................... 59 5.2 Configuración tipo 1 de los objetos para realizar la prueba ...................................................... 60 5.3 Promedio en porcentaje de cada tarea realizada en el conjunto de 30 experimentos. ............... 61 5.4 Secuencia de imágenes en la configuración tipo 1 ..................................................................... 62 5.5 Configuración tipo 2 de los objetos para realizar la prueba ..................................................... 62 5.6 Promedio en porcentaje de cada tarea realizada en el conjunto de 30 experimentos ............... 64 5.7 Secuencia de imágenes en la configuración tipo 2 ..................................................................... 64 5.8 Configuración tipo 3 de los objetos para realizar la prueba ..................................................... 65 5.9 Promedio en porcentaje de cada tarea realizada en el conjunto de 30 experimentos ............... 66 5.10 Secuencia de imágenes en la configuración tipo 3 ................................................................... 67 5.11 Configuración tipo 4 de los objetos para realizar la prueba ................................................... 67

~ XII ~

5.12 Promedio en porcentaje de cada tarea realizada en el conjunto de 30 experimentos ............. 69 5.13 Secuencia de imágenes en la configuración tipo 4 ................................................................... 69 5.14 Manos del robot bioloid con curvatura..................................................................................... 70 5.15 Postura incorrecta para movimientos del robot bioloid. .......................................................... 71 5.16 Postura correcta en el robot bioloid ......................................................................................... 72 A.1 Conexión de USB2Dynamiexl para cargar programas del software roboplus .......................... 79 A.2 Interfaz de la herramienta de adquisición de imágenes de Matlab ............................................ 80 A.3 Tarjeta Zig2Serial ....................................................................................................................... 80 A.4 Tarjeta Zig-100 ........................................................................................................................... 81 A.5 Conexión para establecer comunicación por Zigbee ................................................................. 81 A.6 Módulo Zig-110ª conectada a la tarjeta CM510 ........................................................................ 82 A.7 Batería Lipo y elementos de carga ............................................................................................ 82

~ XIII ~

1. Introducción 1.1.

Antecedentes

La robótica se desarrolla con el afán de realizar tareas que requerían alta precisión, así como evitar que el ser humano sufriera accidentes de trabajo por llevar a cabo procesos pesados o de alto riesgo. Por lo anterior, se comenzaron a crear máquinas para realizar acciones concretas. Éstas máquinas fueron dotadas con sensores y actuadores, lo cual las convertía en autónomas, es decir, no necesitaban de la mano del hombre para ser operadas. Con base en lo anterior, nacieron diferentes configuraciones robóticas capaces de llevar a cabo una cantidad significativa de tareas. J. Ruíz del Solar y R. Salazar en su documento [1], escriben una lista de aplicaciones las cuales hacen referencia a los usos dados a los robots: 

Industriales



De servicio



De exploración



Otros

En cuanto a los robots industriales, podemos decir que son aquellos que se utilizan en fábricas o, como su nombre lo indica, en la industria para realizar trabajos pesados o repetitivos. Los robots de servicios son diseñados para ayudar al hombre en labor doméstica, de medicina, limpieza, entre

1. Introducción otros. Los robots de exploración ayudan en la investigación de zonas con difícil acceso para los humanos, como ejemplo podemos mencionar a los robots espaciales o submarinos. En este caso particular nos centramos en los robots de servicio, ya que el destino de este documento es dejar como antecedente la iniciación de la separación de los residuos plásticos con interferencia robótica, los cuales pueden ser reciclados posteriormente. Esto con el afán de trabajar en favor del medio ambiente considerando al reciclaje como fuente primaria para salvaguardar la integridad terrestre. Tomando en cuenta que la configuración humana es perfecta para realizar casi cualquier tarea, se comenzaron a crear robots semejantes a la estructura de un hombre y de sus extremidades, es decir, el prototipo llamado robot humanoide. La configuración que este robot posee es similar a la estructura ósea del cuerpo humano, debido a que cuenta con dos piernas, dos brazos, un torso, cadera, hombros y cabeza. Todas las partes mencionadas son articuladas con servomotores, esto con la finalidad de que el robot pueda emular los movimientos del humano, como por ejemplo caminar y mover los brazos. Trabajar con este tipo de configuración sin un control previamente instalado hará que el sistema sea poco funcional, por lo tanto para tener un mejor desempeño, se le agregó información inteligente. Este tipo de información es apta para tener un acercamiento al modo de pensar y proceder de los humanos en tareas muy específicas, como ejemplo puedo mencionar el reconocer objetos. Las técnicas que se utilizan para controlar el robot son por ejemplo: las redes neuronales, el control clásico, sistemas de inferencia difusa, control difuso, algoritmos genéticos, etc. Las que se abordarán en este trabajo se describen en el capítulo tres con mayor claridad y amplitud.

1.2.

Planteamiento del problema

En la actualidad se encuentran residuos que son factibles para reciclarse, sin embargo el ser humano no ha sido capaz de llevar esta simple tarea en su totalidad, afectando seriamente el medio ambiente por la cantidad de basura generada día con día y su tardío proceso de degradación. Atacar un problema de esta magnitud suena ambicioso, ya que se debe pensar en problemas de colisiones, segmentación de regiones donde existe gran cantidad de información, robot que camine por superficies irregulares, incluso se podría pensar en la creación de una norma para botes de basura y colores en los plásticos. Sin pérdida de generalidad, en esta tesis se pretende dar una base para observar el panorama y atacar los principales problemas con los que se pueda enfrentar la solución

~2~

1. Introducción de la tarea. Como base principal para este proyecto, se plantea el desarrollo de un control inteligente implementado sobre un robot tipo humanoide, utilizando redes neuronales para realizar la clasificación de dos objetos plásticos de uso común, así como un sistema de inferencia difusa para corregir probables errores en el trayecto del robot hacia su objetivo. En conjunto se planea que el robot sea capaz de reconocer objetos, clasificarlos y por último, llevarlos a cuestas para transportarlos y depositarlos en un contenedor.

1.3.

Justificación

La industria se ha encargado de ofrecer sus productos en envases de plástico, estos, la mayoría de las veces, no son depositados en un contendedor especial y por consecuencia no son reciclados posterior a su uso, llegan a los basureros y tardan aproximadamente de 100 a 1000 años en degradarse. Pensando ecológicamente, estos residuos podrían ser reutilizados o incluso renovarse para crear otros productos o envases. Conseguir que un robot realice la tarea de reconocer los envases plásticos y realizar una clasificación adecuada antes de ser enviados al basurero de la ciudad, evita la contaminación y aumenta el reciclaje. El presente trabajo de investigación se basa en que el humanoide recoja esos desechos y los deposite en el contenedor para que los residuos almacenados sean reciclados en un proceso posterior. Este sistema presenta un control basado en los principios de las redes neuronales y en procesos de imagen por color, esto con la finalidad de optimizar el tiempo de respuesta del robot y también de hacer notar que es posible resolver un gran problema con una forma sencilla de operar. Aportando también a la ciencia, un enfoque práctico para un robot con características académicas.

1.4.

Objetivos

De acuerdo al problema planteado y con base en las investigaciones cercanas a este tema, realizadas con anterioridad, se han planteado dos objetivos: general y específicos.

1.4.1.

Objetivo general

Desarrollar un control inteligente, capaz de realizar la clasificación de dos objetos plásticos (diferentes en su estructura física) a través de sus características, guiar el trayecto del sistema

~3~

1. Introducción robótico tipo humanoide hacia el objeto para su recolección y por último, guiar el trayecto para depositar el objeto en un contenedor de basura. Todo el control es alimentado por medio de un dispositivo de visión.

1.4.2. 

Objetivos específicos

Implementar una serie de movimientos para realizar la recolección de los objetos, caminar con ellos y depositarlos en un contenedor.



Evaluar el desempeño del robot para cargar y caminar con un objeto.



Observar el comportamiento de una red neuronal para la clasificación de objetos.



Desarrollar un sistema difuso para corregir los posibles desvíos en el trayecto hacia el objeto.



Separar los temas de conocimiento para mejorar su desarrollo y comprensión.



Integrar las herramientas, antes mencionadas, para desarrollar un programa general, el cual se encargará de indicar al robot la secuencia de tareas a realizar.

1.5.

Alcances del trabajo

Desarrollar una clasificación de objetos por medio de redes neuronales de primera generación, esto en conjunto con un sistema de inferencia difuso para corregir movimientos y posturas del robot en dirección al objeto localizado. A este control se le realizará un procesamiento de la imagen, partiendo del color para la búsqueda de objetos. Como fin de la tarea, el robot deberá depositar el objeto en un contenedor para basura. Es importante destacar que estos alcances son basados en las limitaciones del proyecto, debido a que el robot utilizado para desarrollar ésta investigación es utilizado con fines académicos, no es posible que cargue un peso mayor a 300 gramos; es necesario tomar en cuenta que la superficie en la que se desplaza debe ser rígida y firme, de lo contrario, puede colapsar fácilmente dificultando las pruebas.

~4~

1. Introducción El robot cuenta con una cámara web conectada al computador, considerando que el cable tiene de largo 1 metro, el espacio de trabajo no debe sobrepasar ciertos límites para que el robot pueda desplazarse con libertad y realizar su tarea completa.

1.6.

Contribuciones

Se desea contribuir a la investigación y avance a los prototipos ya existentes, con un robot que recolecte y clasifique dos objetos diferentes fabricados con un material reutilizable, los cuales presenten características específicas y se encuentran en la vida cotidiana. La utilización de una cámara web para realizar procesamiento digital de señales, lo cual permite reconocer objetos de rasgos físicos similares, esto con el motivo de utilizar una red neuronal de primera generación para hacer una clasificación, que a su vez disminuye recursos del sistema. A diferencia de las investigaciones que anteceden a este trabajo, podemos decir que este robot posee la capacidad de clasificar objetos que pertenecen al medio en el que se desenvuelve y no sólo de objetos geométricos o prismáticos.

1.7.

Método de investigación y desarrollo utilizado

Se utiliza un robot tipo humanoide de uso académico e investigación en centros de estudio de la robótica, debido a su accesible adquisición y accesorios que lo complementan, una estructura robusta para ser manipulado, software con interfaz gráfica y amigable para grabar movimientos y programar tareas por medio de instrucciones que emulan las sentencias del lenguaje C. La parte principal de este proyecto son las técnicas de control inteligente, ya que si se desea utiliza un control clásico se deben tener modelos matemáticos, lo cuales no permite intromisiones de tipo heurístico, intuitivo y con base en la experiencia. A este tipo de control el grupo de control e integración de sistemas del Departamento de Ingeniería de Sistemas y Automática de la Universidad del País Vasco [8] lo concibe de la siguiente manera: 

Un sistema de control inteligente típicamente consiste por una parte, en una “base de conocimiento” con objeto de “representar” el conocimiento necesario para el control de la planta, y por otra de un “mecanismo de inferencia” que procese el conocimiento por medio

~5~

1. Introducción del razonamiento, utilizando quizás, un nuevo conjunto de datos, para la obtención de una decisión. Con base en lo anterior, se optó por trabajar con redes neuronales y control difuso. En el artículo de Juan F. Marulanda, et al [9], el cual está destinado al desarrollo de un control inteligente de un reactor químico, indica que una de las ventajas es que no se necesita conocer el modelo matemático. En cuanto a las redes neuronales escribe: basta con tener el conjunto de entradas y la salida del sistema. En cuanto al control difuso nos indica que es lo contrario, ya que es necesario conocer con exactitud el funcionamiento del sistema a controlar, debido a la variación de la entrada y el uso de reglas tipo si-entonces que son base para otorgar la salida. Por consiguiente, este trabajo comienza con el sistema de visión realizando la búsqueda de un color específico, posteriormente realiza un procesamiento digital de las imágenes adquiridas. Este proceso se basa en la segmentación de la imagen para visualizar únicamente el objeto del color encontrado. El robot realiza una serie de movimientos para que el objeto quede al centro de la imagen, cuando lo consigue obtiene las características principales de este y las envía a la red neuronal, la cual se ha entrenado previamente para clasificarlo. Después, se implementa un controlador difuso para guiar al robot en la trayectoria hacia el objeto. Estas tareas son repetitivas para la búsqueda de los contenedores que sirven como depósito.

1.8.

Organización del trabajo

En este primer capítulo se pone en contexto al lector acerca del trabajo a realizar, es decir se plantea el problema a investigar para desarrollar su solución de acuerdo a los métodos elegidos, los alcances del proyecto, así como los objetivos que se deben cumplir. En el capítulo 2 se presentan los trabajos relacionados a esta investigación escritos con antelación. Un breve resumen expone la solución que los investigadores dieron al problema. Se escriben sus características y una comparación con el presente proyecto, observando las cualidades de este trabajo respecto a las soluciones ya encontradas. El capítulo 3 da las bases teóricas implementadas en este proyecto, es decir, se escriben las definiciones, así como las formulaciones matemáticas, obtenidas de libros o artículos, que se utilizaron para dar vida al programa que controla las tareas del robot.

~6~

1. Introducción El capítulo 4 describe los bloques que conforman cada una de las partes del código, implementado en el programa Matlab, para indicarle al robot las tareas que debe llevar a cabo, es decir, en este apartado se explican con claridad las partes del control inteligente que integran la solución al problema presentado, para cumplimiento de los objetivos. Dentro del capítulo 5 son presentados los resultados obtenidos en las pruebas realizadas. Informa a detalle el funcionamiento del robot en la estación de trabajo, de acuerdo a las diferentes configuraciones en las que fueron colocados los objetos. Se encuentran también, las principales fallas que presentó el sistema cuando fue puesto en funcionamiento. En el capítulo 6 se escriben las conclusiones, basadas en los resultados presentados en el capítulo anterior, y con ello, la evaluación de la funcionalidad del proyecto al resolver la tarea con las técnicas mencionadas en el capítulo 3. Dentro de este capítulo, se escribe el trabajo que es posible desrrollar a futuro, basándose en esta investigación. Para finalizar, encontraremos las referencias las cuales se encuentran numeradas para un reconocimiento fácil, lo cual agiliza su búsqueda y lectura, así como tres apéndices. El apéndice A trata el tema de conexiones, puesta en funcionamiento y niveles de intensidad que son permitidos por el sistema. El apéndice B contiene el código completo y comentado, codificado en Matlab para la solución del problema. El apéndice C presenta el trabajo desarrollado en la estancia de investigación, realizada en la Universidad Complutense de Madrid, Facultad de Informática, departamento de Inteligencia Artificial, donde se implementó un código que segmenta una región en la imagen, la cual contiene un color específico. Esta investigación fue presentada en un congreso en Valencia del 2012.

~7~

2. Estado del arte En el presente capítulo se da un bosquejo de las investigaciones que se han realizado a lo largo de los últimos años, utilizando robots que hacen recolección o manipulación de objetos por medio de visión por computador. Por lo general, se reconocen cilindros, cubos, prismas o esferas, los cuales presentan un color distintivo y uniforme. Con base en lo anterior, se intenta acoplar estas publicaciones para el desarrollo de la recolección de objetos con un robot humanoide, lo cual da sustento a la presente investigación.

2.1.

Control de mano con cinco dedos montada sobre

robot humanoide para agarre y localización visual de objetos (2006) Antonio Morales, et al [2], en su artículo, describen el proceso que utilizaron para que el robot ARMAR, figura 2.1, tenga la habilidad de reconocer y tomar objetos encontrados en una cocina con una mano de cinco dedos. Para realizar la tarea, cuentan con una base de datos con las características de los objetos y un sistema que se encarga de obtener los mejores movimientos desde la base del brazo a la estación de trabajo. La finalidad es que el robot pueda tomar los objetos con mayor precisión por la mano robotizada.

2. Estado del Arte La investigación está pensada para ayudar a las personas en tareas diarias y comunes de su vida. Se centra en el desarrollo de dos módulos: *la visión, que se encarga de localizar y reconocer objetos, y *el sistema que analiza, fuera de línea, el mejor agarre para el objeto detectado por el módulo de visión, el movimiento es guardado en una base para ser usado en otra ocasión. Se utiliza un diseño asistido por computadora (CAD), el cual se comunica con los dos módulos mencionados y contiene el modelo del objeto a tomar. Características: Perfecto agarre de los objetos. Segmentación de los objetos para reconocimiento. Comparación: No busca los objetos en un espacio de trabajo. No realiza una clasificación de los objetos para realizar una tarea.

Figura 2.1. Robot ARMAR en un ambiente de cocina. Los objetos que se observan son los que el sistema de visión reconoce, posteriormente se procede a su agarre con la mano robótica articulada con cinco dedos. (Foto tomada de [2])

~9~

2. Estado del Arte

2.2.

Manipulador generador de trayectorias para un

robot humanoide basado en la visión (2008) En el artículo de Christian Eitner, et al [3], utilizan un robot HRP2-JSK, mostrado en la figura 2.2, para tomar cajas de leche o cereal, que se encuentran en un estante y posteriormente depositarlas en un carrito de supermercado. Para el sistema de visión se utiliza un algoritmo llamado “Scale Invariant Feature Transform” (SIFT) en conjunto con una proyección estéreo para obtener una imagen en 3D. Con este método no es posible conocer la profundidad del objeto, sin embargo las cajas que se utilizaron para las pruebas, no deben estar fuera de las medidas que el robot tiene para abrir la mano y tomarlas. Tomar el objeto implica tener obstáculos a su paso, por lo tanto se utilizó un algoritmo llamado “Collision Check”, el cual encuentra el contorno del obstáculo para poder evitarlo, generando una trayectoria viable. La secuencia que el robot sigue para tomar el objeto es la siguiente: 1. Se utiliza un sistema coordenado jacobiano para determinar el movimiento rotacional. 2. Se obtienen las velocidades angulares. 3. Se hace un ciclo de generación de trayectorias. Los resultados arrojaron que puede tomar las cajas, evitando colisiones con otros objetos presentes, y depositarlas en el carrito.

Figura 2.2. Robot HRP2-JSK realizando la tarea de identificación de prismas para depositarlos en un carrito de supermercado. (Foto tomada de [3])

~ 10 ~

2. Estado del Arte

Características: Evita colisiones realizando una trayectoria perfecta para tomar el objeto caja. Deposita las cajas en un contenedor. Comparación: No hace una búsqueda para ubicar el objeto. Sólo reconoce cajas y las deposita en un contenedor no hace una clasificación de ellas por alguna característica.

2.3.

Control de un robot humanoide con un método

no invasivo cerebro-computadora (2008) Uno de los artículos que tiene similitud con el presente trabajo, por la manipulación y clasificación de objetos, es el presentado por Christian J Bell, et al [4], el cual tiene como objetivo, controlar un robot humanoide por una interface no invasiva cerebro-computadora usando las señales cerebrales de personas saludables por medio de un electroencefalograma (EEC), por este medio se obtiene información a través de cables conectados al cuero cabelludo de los individuos que se prestaron para la prueba. El robot camina hacia los objetos, mientras el humano observa, por medio de monitores, la estación de trabajo donde se desenvuelve; la visión es otorgada por las cámaras que posee el robot en su estructura. El sistema le informa al robot la decisión que el humano ha tomado de acuerdo a las señales recibidas en el EEC, posteriormente el robot toma el objeto deseado y lo deposita en un lugar específico. Para entrenar al sistema, fue necesario conocer el desempeño del cerebro ante imágenes representativas para el desarrollo de la prueba, por lo tanto se diseñó un programa de clasificación con nueve sujetos desconocidos, observando las respuestas de sus cerebros. Con base a los resultados arrojados se calibró el sistema para realizar una prueba en el ambiente real, demostrando que la interfaz cerebro-computadora es factible para la interacción del robot con su alrededor, manipulando y transportando objetos como se observa en la figura 2.3.

~ 11 ~

2. Estado del Arte

Figura 2.3. Robot que recolecta un objeto seleccionado por el usuario. (Foto tomada de [4])

Características: Interfaz cerebro-computadora resulta muy eficiente. Toma el objeto y lo conduce a un lugar asignado por el usuario. Comparación: Trayetoria hacia el objeto planeada. Reconocimiento de objetos prismáticos.

2.4.

Localizar y manipular objetos por medio de un

robot móvil Kephera II (2009) La tesis que escribe Gabriel Omar Huerta Moreno [5], es una de las investigaciones apegadas a este trabajo por el método que utiliza para clasificar y dirigirse a los objetos. Este trabajo hace que el robot Kephera II, mostrado en la figura 2.4, localice los objetos, se dirija hacia ellos, los tome y realice alguna tarea de manipulación, todo lo anterior utilizando como sensor principal la visión y como parámetro el centro de masa. Para realizar la clasificación de objetos y discriminación por forma, utiliza una red neuronal perceptrón multicapa. Otra de las técnicas, es el uso de un controlador difuso tipo Mamdani para variar la magnitud de la velocidad que se le da a las llantas, esto orienta y dirige de forma correcta al robot para llegar al objetivo.

~ 12 ~

2. Estado del Arte Los resultados fueron favorables en la búsqueda y dirección del robot hacia el objeto, incluso se logró hacer manipulación, con un elemento mecánico prensil, para la tarea de colocar un objeto sobre otro.

Figura 2.4. Robot Kephera II con sistema de visión integrado y objeto prensil para manipulación de objetos. (Foto tomada de [5])

Características: Uso del control difuso para manejo de la velocidad en las llantas del robot. Realiza tareas de manipulación con los objetos encontrados. Comparación: Objetos prismáticos. No se mueve con los objetos para hace una clasificación, sólo los manipula.

2.5.

Clasificar objetos desconocidos para reciclaje

(2010) En el artículo de Amr Almaddah, et al. [6], se escribe una investigación semejante al presente proyecto por las tareas desarrolladas, ya que el sistema de visión estéreo integrado al robot debe ser capaz de segmentar objetos y realizar su clasificación, como lo muestra la figura 2.5. Lo anterior dentro de un ambiente poco controlado y con diferentes objetos colocados en desorden. Para desempeñar esta tarea, utilizaron una técnica de iluminación en diferentes frecuencias proyectadas desde los costados de la cabeza del robot. Lo novedoso de ésta técnica consiste, en

~ 13 ~

2. Estado del Arte otorgar información adicional al algoritmo de procesamiento de la imagen del lugar donde se desenvuelve; lo contrario a una técnica de segmentación común. Los principales objetivos que expone la investigación son: *Realizar una segmentación para separar el fondo de los objetos usando múltiples luces. *Realizar la clasificación de los objetos encontrados, por medio de una técnica de sensado de la carga electrostática. Para realizar la segmentación, los creadores desarrollaron una técnica basada en fuentes de luz diferentes. En los costados de la cabeza del robot se encuentra una luz en alta frecuencia y otra en baja frecuencia, con lo cual se ilumina a los objetos, también se incluye la luz presente en el ambiente de trabajo. El valor de reflectancia obtenido, dependerá del material con el que están frabicados los objetos. Se llevan a cabo una serie de operaciones entre la imagen original, la imagen de frecuencia proyectada por el lado izquierdo y el lado derecho, se define un valor de umbral y por último, se obtiene la separación del fondo de la imagen, dejando en primer plano los objetos deseados. Posterior a la segmentación, el robot debe clasificar los objetos encontrados que sostiene en su mano. Para esta tarea, los investigadores observaron que los materiales tienen diferente carga electrostática a su alrededor. Con este conocimiento construyeron un sensor que mide la cantidad de carga que tiene el material del que está formado el objeto, el valor obtenido lo utilizan para realizar la clasificación.

~ 14 ~

2. Estado del Arte

Figura 2.5. Robot realizando la clasificación de objetos considerados basura. (Foto tomada de [6])

Características: Excelente segmentación para separar objetos del fondo. Clasifica los objetos para reciclaje por medio del sensor de carga electrostática. Comparación: La visión sólo la utiliza para separar objetos del fondo. No busca objetos.

2.6.

Comando de voz para informar al robot el objeto

que debe buscar, tomar y transportar (2013) Una investigación reciente plasmada en una tesis, es la que realizó Mauricio Brauer [7], en esta se desarrolla el control de un humanoide plataforma Bioloid, el cual mediante un comando de voz le indica al robot qué color debe buscar. Los objetos son cilindros con un tono rojo y azul que al ser encontrados los transporta hacia un punto meta. Para ubicarse en el espacio de trabajo y caminar hacia el objeto, utiliza redes neuronales pulsantes. El sistema difuso es parte de este proyecto y tiene como finalidad, conocer el tiempo en el cual se realizan los movimientos del robot. La figura 2.6 muestra al robot y su ambiente de trabajo.

~ 15 ~

2. Estado del Arte

Figura 2.6. Robot Bioloid Premium recolectando el objeto previamente designado por comando de voz.

Características: Utiliza red neuronal para coordinar los movimientos en su trayectoria al objeto. Comando de voz para ubicar el objeto. Comparación: Objetos cilíndricos. No realiza una clasificación de los objetos sólo los desplaza hacia otro lugar del espacio de trabajo.

~ 16 ~

3. Conceptos básicos y herramientas de diseño En este capítulo se abordarán conceptos de temas fundamentales para esta tesis, como son robot, tratamiento de imágenes, redes neuronales de primera generación, control difuso. Tener claro cada uno de los conceptos que conforman este capítulo, permitirá ubicarlos en el control desarrollado para cumplir el objetivo general. De igual manera, es necesario tener presente las herramientas que se utilizaron para conjuntar los temas mencionados, así como la plataforma que se utilizó para realizar el proyecto.

3.1.

Conceptos básicos

3.1.1.

Tratamiento de imágenes

Al tratamiento de imágenes digitales Rafael González y Richard Woods en su libro [13], lo describen como el proceso que se realiza a una imagen por medio de una computadora. Al respecto menciona que imagen se define como una función bidimensional f(x, y), donde x y y son coordenadas en el plano, y la amplitud de f en cualquier par de coordenadas (x, y) es llamada la intensidad o nivel de gris en la imagen en ese punto. Cuando x, y y los valores de la amplitud de f son finitos y discretos, a la imagen se le llama imagen digital formada por M filas y N columnas.

3. Conceptos Básicos y Herramientas de Diseño Cuando hablamos de imagen digital debemos tomar en cuenta los elementos que la conforman, a los cuales se les denomina Pixel. Las imágenes utilizadas en el desarrollo del proyecto son monocromáticas, para esto se utilizó un proceso que separa la imagen en regiones similares de acuerdo a sus características, cada una las regiones de interés, es decir aquellas que tienen propiedades en común, se denomina objeto [11]. A este proceso se le conoce como segmentación. Una de las técnicas utilizadas para realizar segmentación es la de umbralado y se utiliza cuando hay una clara diferencia entre el objeto y el fondo. El umbralado obtiene el promedio de la escala de grises de una imagen, lo cual determina o resalta los elementos con mayor o menor intensidad del fondo de la imagen [10].

Figura 3.1 Imagen en escala de grises.

Obtener un nivel de umbral (T) se lleva a cabo en forma manual haciendo uso de la distribución de los niveles de gris encontrados en el histograma. Para optimizar la obtención de este valor y evitar errores, Nobuyuki Otsu desarrolla un método detallado en su libro “A Threshold Selection Method from Gray-Level Histograms” [12], que en resumen explica un método no paramétrico y no supervisado que selecciona un umbral óptimo para la segmentación de una imagen, utilizando la máxima separación entre clases de niveles de gris. Para comprender en forma sencilla este método, Iván López Espejo [18] explica la base matemática de Otsu partiendo de una imagen representada en L niveles de gris, el número de pixeles en el nivel de gris i es representado como ni y el total del número de pixeles como N. El nivel de gris en una imagen es considerado como la probabilidad de ocurrencia en la imagen, dado por:

~ 18 ~

3. Conceptos Básicos y Herramientas de Diseño (3.1) Para diferenciar el objeto del fondo se dividen los pixeles en dos clases C 0 y C1 que abarcan [1,…, k] y [k+1,…, L] respectivamente. Las distribuciones de probabilidad para dos clases son: C1: p1/w1(k)… pk/w1(k)

(3.2)

C2: pk+1/w2(k)… pL/w2(k)

(3.3)

donde, ( )



(3.4)

( )



(3.5)

Las medias para cada una de las clases se definen como: ∑

( )



(3.6)

( )

(3.7)

La intensidad media total de la imagen se define, (3.8) Otsu hace uso de un análisis discriminante y define la varianza entre clases de una imagen umbralada como: (

)

(

)

(3.9)

El nivel óptimo de umbralado es: ( )

(3.10)

Con (3.10) tenemos un valor certero para utilizar en la convención (3.11) mostrada a continuación [13], lo cual permite obtener una imagen en forma binaria como se observa en la figura 3.2 B, donde los pixeles etiquetados con el valor de 1 (blanco) pertenecen al objeto y los pixeles que son etiquetados con 0 (negro) pertenecen al fondo de la imagen. (

)

{

~ 19 ~

( (

) )

(3.11)

3. Conceptos Básicos y Herramientas de Diseño

Figura 3.2. A (Izquierda) Imagen en escala de grises. B (derecha) Imagen binaria a través de un umbral. (Imágenes obtenidas de [13])

3.1.2.

Control difuso

El razonamiento humano es capaz de estimar cantidades para tomar decisiones basado en experiencias, emociones, intuición, etc. Como ejemplo, las personas pensamos: hoy es un día nublado y hace un poco de frío entonces debo tomar un suéter. Mencionar que hace un poco de frío es basado en las sensaciones del cuerpo y no midiendo la temperatura real a la que se está expuesto. El control difuso intenta replicar este tipo de razonamiento que se realiza en forma lingüística, es decir, con base en expresiones similares a las que utilizan los humanos para tomar decisiones. Estas expresiones son obtenidas estudiando previamente el problema que se requiera controlar. Una de las ventajas que presenta este control, es que las variables a utilizar son palabras que están estrechamente relacionadas al problema, por ejemplo, distancia, torque, etc. Este tipo de variables se encuentran definidas en el conjunto de números reales llamado universo de discurso. Existen otras palabras que se les conoce como valores lingüísticos por ejemplo, caliente, muy lejos, etc., y se colocan en un conjunto de números el cual oscila entre [0,1] y se le conoce como grado de membresía. Para generalizar, se dice que un valor lingüístico junto con su grado de membresía, es llamado set difuso. Al conjuntar las definiciones dadas anteriormente, John Lilly en su libro [19] menciona la definición formal de un set difuso. Definición 3.1. Considere una variable con un universo de discurso como un número real (i.e. ( ) asociada con membresía de

a

). La letra

, y consideramos a

denota un set difuso en . Una función de membresía

es una función que mapea

.

~ 20 ~

en el intervalo [0,1] y otorga un grado de

3. Conceptos Básicos y Herramientas de Diseño (

( ))

(3.12)

El par que se encuentra en el conjunto (3.12) asocia un elemento del universo de discurso con su grado de membresía. En la figura 3.3 se puede apreciar un set difuso que posee un universo de discurso y sus correspondientes grados de membresía.

Figura 3.3. Set difuso A con su grado de membresía y universo de discurso.

Un set difuso es sólo una parte de un conjunto que debe armarse para ser controlado, es entonces cuando surge un sistema, que en pocas palabras, se define como el resultado que se obtiene de la integración ordenada de otros componentes y operan en función de entradas y salidas que dependen de la variable tiempo. Para controlar un sistema difuso es necesario involucrar la lógica difusa la cual se compone de reglas pensadas como lo hacen los humanos y escritas en la forma “sientonces”. Estas reglas son conocidas en la lógica clásica como modus ponens, para mayor información acerca de este tema es conveniente consultar “Introducción a la lógica matemática” [20]. Este tipo de sistema difuso es conocido como Mamdani propuesto en 1975 por Ebrahim Mamdani [14] y utilizado comúnmente debido a la estrecha relación que tiene con el razonamiento humano basado en la experiencia. En la figura 3.4 se encuentra el diagrama que describe este tipo de sistema.

~ 21 ~

3. Conceptos Básicos y Herramientas de Diseño

Entrada

Salida Inferencia

Fusificación

Defusificación

Reglas Base

Figura 3.4. Diagrama a bloques de un sistema difuso. La función que tiene el bloque titulado “Fusificación”, es la de convertir los valores de las variables de entrada, obtenidas del medio físico por medio de sensores o algún dispositivo de captura, en un set difuso. El bloque de inferencia esta comunicado con el bloque de las reglas base, el cual posee las reglas que fueron planeadas para el problema particular, estas reglas le dan pauta para convertir la salida de fusificación en un set difuso que representa las condiciones basadas en todas las reglas base. Es sabido que las salidas del bloque de inferencia no se pueden utilizar para tomar decisiones en el control, por lo tanto existe un módulo que convierte el set difuso, basado en las reglas, en una salida con valores reales para su uso, el cual se designa como bloque de defusificación. La forma comúnmente utilizada para este proceso es la de centro de gravedad. Esta técnica utiliza la expresión (3.13) que aparece a continuación e indica un promedio ponderado [19] de los puntos obtenidos en el set difuso basado en las reglas. ∑ ∑

Donde ∫

̂

̂

∫ ∫

̂

(3.13)

es el área bajo la función de membresía resultante de las reglas base, y

son los

puntos en el universo de discurso de la salida. Un ejemplo gráfico de un sistema difuso es el que se encuentra en la figura 3.5; en la figura 3.6 se encuentra el conjunto de reglas que lo definen.

~ 22 ~

3. Conceptos Básicos y Herramientas de Diseño

Figura 3.5. Sistema difuso implementado en Matlab.

Figura 3.6. Conjunto de reglas base.

3.1.3.

Redes neuronales.

Red Neuronal Artificial (RNA) se le llama a la interconexión de unidades de procesamiento, las cuales intentan asemejarse de una manera muy vaga al funcionamiento del sistema nervioso en los animales.

~ 23 ~

3. Conceptos Básicos y Herramientas de Diseño Para entrar en contexto debemos hablar en términos neurobiológicos. El cerebro humano contiene un estimado de cien mil millones de neuronas que forman una red, estas interconexiones están mandando impulsos a otras neuronas a través de los conductos llamados dendritas. Cada una de esas dendritas tienen conexiones a otras células nerviosas y en el momento que estas se conectan el nombre que se le otorga a esa terminal de llegada es axón. Para más información del tema puede consultar el documento del Dr. Diego Andina de la Fuente y Antonio Vega Corona [28].

Figura 3.7. Partes que componen una neurona del sistema nervioso humano.

Tomando la definición de RNA y recordando la forma del funcionamiento de nuestro sistema nervioso, podemos deducir que las redes neuronales artificiales se asemejan a las neuronas debido a que su aprendizaje es obtenido a través del ambiente y la fuerza que existe en la interconexión de unidades es utilizada para almacenar conocimiento. Asimismo, la forma de conexión de las redes neuronales artificiales es muy parecida a la que se encuentra en el cerebro ya que se tiene cierto valor de umbral para mandar los impulsos por medio de las terminales de la red. Conforme se han realizado avances en las RNA, la ciencia las ha catalogado por generaciones, denominadas como redes de primera, segunda y tercera generación. Para fines de esta tesis se abordaran sólo las de primera generación las cuales se explican a continuación y se deja al lector investigar las generaciones de su interés. En el año de 1943 se da a conocer el primer modelo de neurona artificial cuando McCulloch y Pitts [15] publican un artículo en el cual desarrollaban un modelo matemático sencillo de una neurona real a la que llamaron Unidad Lógica de Umbralado, TLU por sus siglas en inglés. La funcionalidad consiste en recibir

entradas, las cuales son multiplicadas por un número encontrado en cada

~ 24 ~

3. Conceptos Básicos y Herramientas de Diseño terminal de la neurona llamado peso

. Al tener estos productos se hace una suma ponderada de

ellos, este resultado es conocido como potencial sináptico.

Figura 3.8. Modo de activación de la Unidad Lógica de Umbralado (TLU).

El umbral

es un valor que sirve para generar la activación de la neurona, si el potencial sináptico

rebasa o es igual a

entonces emite una salida con valor de uno lo cual indica que esta activada o

encendida, de lo contrario entrega un valor de cero y se dice que está desactivada o apagada. La expresión matemática para activación de una TLU se escribe como: ∑ Donde

representa el valor de las entradas y

(3.14) representa el valor de los pesos.

La salida para la activación se define como: {

(3.15)

A finales de los años 50 Frank Rosenblatt [20] desarrolla un modelo que involucra la TLU y un método de aprendizaje que se basa en la corrección del error, producido por la introducción de los pesos de forma aleatoria. Este modelo tiene la capacidad de modificar lo pesos para que la red converja hacia una solución cuando esto sea posible. Se realiza de manera recursiva y supervisada, es decir, se tiene un conjunto de entrenamiento con una salida deseada, el conjunto de entradas (entrenamiento) son aplicadas a la red y su salida es comparada con la salida objetivo o deseada. El aprendizaje es conocido como regla del perceptrón simple y se rige por la expresión matemática (3.16). La modificación de pesos y de umbral para reforzar el aprendizaje de la neurona se encuentra expresada en (3.17). (

~ 25 ~

)

(3.16)

3. Conceptos Básicos y Herramientas de Diseño (

)

(3.17)

Como ejemplo recordemos la operación lógica “AND” la cual tiene como elementos dos entradas 1 y 0, el resultado que se obtiene al aplicarla se muestra en la tabla 3.1: Operación

Entrada X

Entrada Y

0

0

0

0

1

0

1

0

0

1

1

1

AND

Tabla 3.1. Tabla de verdad de la función lógica AND.

Es notorio que si ubicamos esta regla en un plano cartesiano obtenemos una separación entre dos clases, es decir, puntos que son de características semejantes pueden ser separados del que resulta diferente, para hacerlo más obvio se dibujó una recta llamada “línea de decisión”, como lo muestra la figura 3.9. Si esta línea existe y separa de manera clara dos clases se dice que son linealmente separables.

𝑥

(0,1)

(1,1)

𝑥 (0,0)

(1,0)

Figura 3.9. Separación entre dos clases por la operación lógica AND.

3.1.4.

Robot

Al escuchar la palabra robot, la mayoría de los humanos tienen una imagen general en su cabeza, es decir, visualizan partes de motores, hojalata o metal, cables y antenas integrando un máquina capaz de realizar casi cualquier tarea que se le ordene. La realidad no está alejada de la percepción general que se tiene en cuanto a la forma física de lo que es un robot, sin embargo aún en estos tiempos existe una separación en cuanto al hecho de realizar cualquier tipo de tarea.

~ 26 ~

3. Conceptos Básicos y Herramientas de Diseño Haciendo un poco de historia, en el año de 1921 el escritor Karel Capek desarrolla una obra literaria titulada “R.U.R. (Rossum's Universal Robots)” [17] e incluye la palabra robot para hacer alusión a máquinas con forma humana que desarrollaban tareas en una fábrica. Sin embargo, este término tiene su origen en la palabra checa robota, que significa trabajo o prestación personal según lo indica el diccionario de la Real Academia de la Lengua Española [22]. A lo largo del tiempo la definición de Robot se ha ido modificando y de acuerdo a los avances y técnicas empleadas que se tienen al respecto, es posible que su significado vuelva a sufrir variaciones. La forma general para definir a un robot es la siguiente: Definición 3.2. Máquina programable capaz de realizar tareas específicas, lo anterior por medio de actuadores y sensores que adquieren información del medio donde se desarrolla. Como se menciona al principio de este apartado, la estructura general de un robot es con forma humana, es decir, compuesta por extremidades, torso, cuello y cabeza. A pesar de que existen este tipo de configuraciones robóticas llamadas humanoides, no son las únicas a las que se les puede atribuir el término robot, este se puede aplicar a otros armazones en forma de brazo, insecto, carro o simplemente una herramienta que trabaja de forma automática, las cuales también manipulan objetos y realizan tareas.

3.2.

Herramientas de diseño

3.2.1.

Robot humanoide

En este proyecto se utilizó la configuración de robot humanoide del kit Bioloid Premium, desarrollado por la compañía Robotis.

~ 27 ~

3. Conceptos Básicos y Herramientas de Diseño

Figura 3.10. Robot humanoide de la compañía Robotis.

Este tipo de plataforma contiene un diseño de servomotores, propio de la marca coreana, llamados digitales o inteligentes, es decir, contienen un dispositivo programable en su interior el cual está programado para entregar la posición angular, voltaje, torque, velocidad, temperatura; todo lo anterior a través de un cable serial. Cada uno de los motores posee también un foco led, el cual indica cuando se han encendido y para notificar al usuario fallas que esté sufriendo cuando está trabajando. Es de gran ayuda que su forma física tenga una parte para atornillar partes plásticas y conseguir un armado en la manera que se requiera. Este kit cuenta con: 

Cables para conectar los servomotores.



Un sensor de giro y uno de proximidad, los cuales sirven para indicar posición y sufrimiento de caídas, así como para detectar obstáculos u objetos, respectivamente.



Un control para ser operado remotamente por medio de la comunicación Zigbee, la cual consta de los módulos ZIG-110A y ZIG-100,



Un bloque para programarle las tareas a realizar, un adaptador que convierte la conexión USB a Serial y una batería de 12 volts recargable



Manual de usuario.

~ 28 ~

3. Conceptos Básicos y Herramientas de Diseño

Figura 3.11. Partes que incluye el kit de Robotis.

Los movimientos del robot son programados en un software de interfaz visual como se muestra en la figura 3.12.

Figura 3.12. Software Roboplus Motion para programar los movimientos del robot humanoide.

~ 29 ~

3. Conceptos Básicos y Herramientas de Diseño Las tareas que debe realizar el robot se escriben en un programa que emula las secuencias y comandos del lenguaje C. El sistema que tiene implementado el robot en su controlador puede ser borrado y controlarse en su totalidad con lenguaje C.

Figura 3.13. Software Roboplus Task para programar las tareas al robot humanoide.

Para fines del proyecto, se utilizó una tarjeta llamada ZIG2Serial que realiza la comunicación serial con el robot Bioloid a través del módulo Zigbee.

Figura 3.14. Tarjeta Zig2serial conectada al adaptador USB2Dynamixel. Sobre la tarjeta observamos el módulo emisor Zig-100.

~ 30 ~

3. Conceptos Básicos y Herramientas de Diseño

3.2.2.

Cámara

Para trabajar la parte de visión se utilizó una cámara web VI Book, alámbrica con interfaz USB, desarrollada por la marca Acteck. Este dispositivo de visión es montado al robot humanoide en la parte superior y por medio del cable entrega las imágenes directo al computador para ser procesadas.

Figura 3.15. Cámara Web de la marca Acteck.

3.2.3.

Software Matlab

En 1984 nace la empresa Matworks la cual es la encargada de desarrollar un software de cómputo matemático con su propio lenguaje de programación, desarrollado por Jack Little y Cleve Moler [27]. Este software se caracteriza por trabajar con matrices, funciones, realizar algoritmos, interfaz visual para usuarios llamada GUI, comunicación con otros lenguajes como C, una herramienta a base de bloques para realizar simulaciones denominada Simulink y uno de los elementos importantes en esta tesis es que este software es capaz de comunicarse con otros dispositivos de hardware, para nuestro caso particular una webcam.

~ 31 ~

4. Metodología El control inteligente es el cerebro del robot bioloid, comanda cada una de las tareas que se deben llevar a cabo, por lo tanto este capítulo está destinado a explicar el modelo y desarrollo del código que da vida al proyecto.

4.1.

Modelo general del sistema

En las siguientes líneas se da el panorama general del sistema, el cual es dividido en dos etapas. La primera, representa la obtención de un conjunto de imágenes que sirven para obtener los rasgos que caracterizan a cada objeto. Con estos rasgos se obtiene el vector que forma el conjunto para entrenar un perceptrón simple, el cual nos dará los pesos adecuados para realizar la clasificación de los objetos. La segunda etapa incluye el sistema general, el cual se encarga de buscar un color uniforme dando instrucciones al robot para hacer un barrido circular sobre su eje. Ubicado el color, el robot centra el objeto a través del centro de masa, obtiene los rasgos característicos, los inserta en la red neuronal (entrenada en la etapa 1) y realiza la clasificación. Una vez que el sistema reconoce el objeto que tiene en su centro de visión, se dirige a él controlando sus movimientos con un sistema de inferencia difusa (que tiene como entrada el centro de masa del objeto) para no perder de vista el objetivo. Para conocer si el robot se encuentra cerca o lejos del objeto, después de dar un paso, el programa

4. Metodología debe ubicar la fila que divide la imagen en proporciones iguales, sobre esta se realiza un conteo de pixeles blancos (los cuales pertenecen al objeto), si la cantidad es igual o rebasa un umbral permitido de pixeles, el robot debe accionar el sistema de recolección, posteriormente comienza la búsqueda del color uniforme del depósito. El robot repite la tarea de búsqueda rotando sobre su eje, cuando lo encuentra camina hacia el depósito, sosteniendo al objeto con sus manos sobre su cabeza, cuando detecta que se encuentra a 15 cm de distancia o menos baja sus brazos y suelta el objeto, en este momento termina la tarea. En la figura 4.1 se observa el diseño del sistema en sus dos etapas y cada uno de los elementos que hacen posible el funcionamiento de la tarea.

~ 33 ~

Entrenamiento Red la de Neuronal para obtención de pesos.

de Conjunto imágenes para obtención de rasgos.

ETAPA 1

Vector de Pesos

~ 34 ~ para al

Movimientos del robot.

Código dirigir robot.

Figura 4.1. Modelo general del sistema.

de Sistema Inferencia para Difusa controlar movimientos del robot.

Reconocimiento y clasificación de los objetos.

Búsqueda y segmentación por color.

ETAPA 2

Comunicación inalámbrica por módulo Zigbee.

ENTORNO DE TRABAJO

4. Metodología

4. Metodología

4.2.

Etapa 1: Entrenamiento

Como se mencionó en el apartado anterior, la etapa 1 comprende el entrenamiento de la red neuronal para entregar al sistema su vector se pesos con el cual se pueda realizar una clasificación satisfactoria de los objetos.

4.2.1.

Identificación de rasgos en objetos

En la vida diaria las personas reconocen los objetos y los clasifican de acuerdo a las características que los definen, como ejemplo, si observamos un objeto que contiene hojas, acomodadas una tras otra y pegadas por un costado, podríamos decir que se trata de un libro, una libreta, un cuaderno, etc. Sin embargo, se necesitan otras descripciones para diferenciar entre los objetos mencionados anteriormente, es decir, si las hojas están en blanco o tienen letras, las dimensiones que tienen, etc. Esto también sucede cuando se utiliza la visión por computador para reconocer objetos, es necesario conocer sus rasgos, que dan una descripción de lo que la cámara observa, para realizar una posterior clasificación. En este caso particular, se quiere reconocer una botella y un vaso así como realizar su clasificación, por lo tanto se formó una base de datos con un compilado de imágenes monocromáticas para reconocer las características que nos permitan realizar una clasificación de los objetos. El conjunto de trabajo consta de 25 imágenes para cada objeto, cada una pasa por un procesamiento que tiene los siguientes pasos: 1. Tomar la fotografía del objeto (cada imagen tiene el objeto en diferente posición), 2. Realizar la conversión de la imagen a escala de grises, 3. Obtener un umbral por el método de Otsu para que la imagen sea binarizada y por último, 4. La imagen binarizada es almacenada en una carpeta. Los pasos anteriores se codificaron en Matlab ya que este programa cuenta con una herramienta que reconoce el dispositivo de visión, en este caso particular, una cámara web.

~ 35 ~

4. Metodología

Figura 4.2. Muestra de imágenes que forman la base de datos.

La base de datos de imágenes nos da pauta para obtener los rasgos, a los cuales Juan Humberto Sossa Azuela en su libro [25] los define como se aprecia en la definición 4.1 dada a continuación. Definición 4.1. Los rasgos son mediciones o cantidades que pueden obtenerse a través de: 

Los píxeles que componen la región del objeto,



Los píxeles del contorno del objeto,



Los vértices o esquinas del mismo objeto, o



Puntos característicos del esqueleto de un objeto como terminales y triadas.

La información que otorgan los rasgos, también conocidos como descriptores, son valores numéricos obtenidos de cada una de las imágenes que forman la base de datos. Para este caso, se formó un patrón con dos rasgos: uno estadístico que se conoce como primer momento de Hu y el segundo es geométrico y se obtiene de la relación largo-ancho del objeto. Para obtener el valor del primer momento de Hu, Leng y Huang en su artículo [26] destacan que se debe tomar el momento de orden (p+q)-ésimo dado por: ∫



~ 36 ~

(

)

(4.1)

4. Metodología Utilizar la expresión 4.1 puede ser no invariante si se somete a rotación, traslación o escalado por lo tanto se utilizan los momentos centrales dados por la expresión 4.2 lo cual hace invariantes a translaciones. ∫ donde ̅



∫ (

̅) (

̅)

(

)

(4.2)

y el punto ( ̅ ̅) indica el centroide de la imagen.

Normalizar los momentos centrales hace que sean invariantes a escalamiento, esto lo expresa 4.3. (4.3) Basado en la expresión 4.3, Hu introduce siete momentos, de los cuales para este caso sólo se utiliza el primero, como fue mencionado anteriormente. La expresión para este momento es: (4.4) Tomando lo anterior en cuenta, el primer momento de Hu (ecuación 4.4) se obtiene solo para la mitad superior del objeto, esto se debe a la forma que presentan en esta parte la botella y el vaso. Obtenido el primer elemento que formará el vector de rasgos, se decidió que el segundo descriptor fuera geométrico, ya que otra característica de los objetos son las medidas de largo y ancho que tienen. De acuerdo a una relación largo-ancho (ecuación 4.5) los objetos pueden ser diferenciados fácilmente. (4.5) Teniendo los dos descriptores, el patrón se almacena en forma de vector como se observa en 4.6. (4.6) donde

representa el patrón,

y

son los descriptores.

La tabla 4.1 contiene los valores de los rasgos para cada imagen del conjunto de los objetos botella y vaso.

~ 37 ~

4. Metodología Botella

Vaso

Imagen 1

0,18201548

2,34285714

Imagen 1

0,18692166

1,24528302

Imagen 2

0,180918

2,39805825

Imagen 2

0,18692166

1,24528302

Imagen 3

0,18094533

2,41747573

Imagen 3

0,18788755

1,28301887

Imagen 4

0,18122843

2,40384615

Imagen 4

0,19182368

1,22289157

Imagen 5

0,18132219

2,59615385

Imagen 5

0,19342222

1,22485207

Imagen 6

0,18095801

2,61165049

Imagen 6

0,19069556

1,23030303

Imagen 7

0,1805445

2,58653846

Imagen 7

0,18640121

1,18518519

Imagen 8

0,18704558

2,64356436

Imagen 8

0,18769117

1,19259259

Imagen 9

0,1867903

2,65346535

Imagen 9

0,18789213

1,20149254

Imagen 10

0,18642641

2,57692308

Imagen 10

0,18786862

1,20895522

Imagen 11

0,18998803

2,63414634

Imagen 11

0,1876719

1,20149254

Imagen 12

0,19030512

2,73417722

Imagen 12

0,18573962

1,20967742

Imagen 13

0,19008346

2,70886076

Imagen 13

0,18544286

1,216

Imagen 14

0,1903974

2,72151899

Imagen 14

0,18458597

1,22580645

Imagen 15

0,19073427

2,72151899

Imagen 15

0,18547127

1,22580645

Imagen 16

0,18800096

2,47619048

Imagen 16

0,18786377

1,18055556

Imagen 17

0,1883596

2,53658537

Imagen 17

0,18697343

1,18881119

Imagen 18

0,18696234

2,64044944

Imagen 18

0,18792987

1,17361111

Imagen 19

0,18637026

2,62921348

Imagen 19

0,1883095

1,17241379

Imagen 20

0,1865427

2,6

Imagen 20

0,18508919

1,21428571

Imagen 21

0,186881

2,57142857

Imagen 21

0,18469038

1,23423423

Imagen 22

0,18702673

2,58241758

Imagen 22

0,18413149

1,23214286

Imagen 23

0,19194604

2,82051282

Imagen 23

0,18745197

1,19642857

Imagen 24

0,19094254

2,82051282

Imagen 24

0,18781161

1,20535714

Imagen 25

0,18886144

2,79746835

Imagen 25

0,18773503

1,19469027

Tabla 4.1. Valores que se obtuvieron para formar el vector de rasgos de los objetos botella y vaso.

~ 38 ~

4. Metodología

4.2.2.

Entrenamiento de la red neuronal

Con los valores que se obtuvieron, mostrados en la tabla 4.1, se realiza una gráfica para conocer el comportamiento que tienen los rasgos en cuanto a su separación. 0,196

Primer Momento de Hu

0,194 0,192

0,19 0,188 0,186

Botella

0,184

Vaso

0,182 0,18 0,178 0

0,5

1

1,5

2

2,5

3

Relación Largo-Ancho

Figura 4.3. Gráfica comparativa de los rasgos de los objetos.

Podemos observar en la figura 4.3 que la separación de los rasgos de los objetos la realiza la relación largo-ancho. Concluimos que los objetos con estos descriptores son linealmente separables. Tomando en cuenta lo anterior, se decidió utilizar una red neuronal de primera generación conocida como Unidad Lógica de Umbralado (TLU) utilizando la regla de aprendizaje del perceptrón, esto debido a que si las clases son linealmente separables la red tiende a converger. Este tipo de red neuronal es de aprendizaje supervisado, es decir para entrenarla y obtener los pesos deseados se hace la comparación de la salida de la red con la salida deseada. El código para entrenar a la red neuronal se realizó en Matlab y se encuentra de forma explícita y comentada en el apéndice B, de acuerdo a este programa los pesos arrojados fueron los siguientes: 

Bias = 0.80



Peso 1 = 0.4749



Peso 2 = -0.0984

Con estos valores se procedió a probar la TLU para corroborar si la clasificación de los objetos era realizada al 100%, es decir comprobar que la red era capaz de clasificar cada objeto en su

~ 39 ~

4. Metodología correspondiente clase. A las entradas de prueba (valores de los rasgos) se les agregó ruido aditivo al 30%, sin embargo la clasificación siempre fue exitosa por lo tanto fue utilizada en el programa general.

4.3.

Etapa 2: Sistema general

Tomando los pesos obtenidos, se desarrolla la segunda etapa que abarca tomar el cuadro de visión por medio de la cámara, hacer el procesamiento de la imagen, tomar decisiones para la manipulación de los movimientos del robot y por último dar las órdenes por medio del módulo inalámbrico. Como se puede observar esta etapa reúne los bloques para realizar la tarea propuesta en el objetivo general del proyecto.

4.3.1.

Búsqueda y segmentación de objetos por

color El programa codificado en Matlab por A. Bhargav Anand [23] tiene la función de rastrear el color rojo por medio de una cámara web. Este código se utilizó en este proyecto y se acondicionó para ubicar el color azul y verde. El criterio de paro en la búsqueda se da cuando encuentra estos tonos. En la figura 4.4, mostrada a continuación, se desarrolla el diagrama de flujo de este código de búsqueda por color. Este programa se encarga de realizar una segmentación para ubicar el color deseado. El apartado de la segmentación se utilizó en el código general para conocer la orientación del objeto y dar instrucciones al sistema de inferencia difuso, el cual se tratará posteriormente. La funcionalidad de cada uno de los bloques de la figura 4.4 se expone a continuación.

~ 40 ~

4. Metodología

INICIO

Configura cámara

Inicializa variables=0

Var1=4.5 y evalV 5.5 NO

SI NO MUEVE CABEZA

NO

FIN

Figura 4.18. Diagrama de flujo del sistema difuso para controlar trayecto hacia el objeto.

~ 52 ~

NO

4. Metodología

4.3.4.

Implementación del código para dirigir al

robot Como se mencionó en el capítulo 3, el robot humanoide plataforma Bioloid contiene una herramienta de desarrollo para codificar las tareas a realizar llamada “RoboPlus Task”. Las sentencias utilizadas en este software son similares a las utilizadas en Lenguaje C de una forma visual amigable, contiene ciclos, condiciones, operaciones aritméticas, funciones. Incluye también sentencias para dar velocidad y posición a los motores en el robot, entre otras herramientas. La figura 4.19 muestra una parte del código implementado el cual muestra que el objetivo de este es recibir el valor que indica el movimiento a realizar.

Figura 4.19. Porción de código en RoboPlus Task que integra las tareas a realizar por el robot de acuerdo al valor recibido.

La tarea principal programada en esta herramienta es la recepción de datos y con base en ellos enviar información al robot para mover los motores.

4.3.4.1. Recolección del objeto El sistema difuso está inmerso en un ciclo, esto con la finalidad de tener un criterio de paro para el movimiento “caminar” cuando el robot ha concluido su trayectoria hacia el objeto.

~ 53 ~

4. Metodología La instrucción entregada al robot para saber que ha llegado al objeto, es el valor otorgado por el conteo de pixeles con valor de 1 en la imagen, esto es posible gracias a que la imagen es monocromática por segmentación, por lo tanto el fondo de la imagen tiene valor de 0 (color negro) resaltando sólo el objeto en color blanco. El conteo de pixeles se realiza ubicando la fila 240, la cual indica la mitad de la matriz bidimensional del cuadro de la imagen, cuando el robot se encuentra muy cerca del objeto en la imagen segmentada se observa una cantidad mayor de pixeles blancos en esa fila de la imagen, es decir la amplitud del objeto en la componente horizontal es mayor, como se observa en la figura 4.20.

Amplitud

Conteo de Pixeles en fila 240

Figura 4.20. El conteo de pixeles blancos pertenecientes al objeto en la fila 240, debido a que la amplitud es mayor si la cámara montada en el robot se acerca.

La distancia máxima para que el robot tome el objeto es de 15 cm de acuerdo a la longitud de sus brazos, por consiguiente el conteo de pixeles blancos (CPB) de la fila 240 de la imagen, para el objeto botella a la distancia mencionada es de CPB=286 y para el objeto vaso es de CPB=500. Cuando la cuenta es menor que CPB el robot debe seguir caminando y corrigiendo movimientos de trayectoria por medio del sistema de inferencia difusa, una vez que el conteo de pixeles es mayor o igual que CPB el robot debe parar y realizar los movimientos para recolectar el objeto.

~ 54 ~

4. Metodología

4.3.4.2. Depósito del objeto Posterior a la recolección el robot repite las siguientes tareas 

Búsqueda de color y segmentación de la imagen para ubicar el depósito en color verde,



Se utiliza el sistema de inferencia difuso para realizar un trayecto directo al depósito.

En este caso, el contenedor de basura es alto y sus dimensiones no son suficientes para realizar un conteo de pixeles ya que la amplitud de sus pixeles blancos en la línea 240, es siempre mayor cuando se presenta en el cuadro de visión, debido a esta situación se utiliza el sensor de distancia. Como se mencionó en el apartado anterior, la distancia de los brazos del robot es de 15 cm, por lo tanto cuando el sensor de distancia detecta que su medida es menor o igual a este valor, el programa envía la instrucción al robot para depositar el objeto.

4.3.4.3. Desarrollo de movimientos del robot Este bloque está desarrollado con la herramienta “Roboplus Motion” perteneciente a la plataforma Bioloid. Aquí es donde los motores se coordinan para realizar los movimientos del robot, programando velocidad y tiempo. En la figura 4.21 observamos la interfaz del programa y uno de los movimientos programados.

Figura 4.21. Programa Roboplus Motion el cual muestra uno de los movimientos programados para realizar la tarea de depositar el objeto en el contenedor.

~ 55 ~

4. Metodología

Estos movimientos son llamados en el programa codificado en Roboplus Task por medio de la sentencia “Página de Movimiento” y otorgándole el número de fila en la cual fue realizado y grabado el movimiento como se observa en la figura 4.22.

Figura 4.22. Sentencia en el software Roboplus Task la cual manda a llamar el número de fila en la cual fue grabado el movimiento.

Cada tarea tiene un movimiento específico, como se indica a continuación: 

Búsqueda de Objeto: El robot mueve sus piernas para girar en torno a su eje hasta encontrar el color.



Trayecto al Objeto: El robot camina, da paso a la izquierda, da paso a la derecha, sube y baja el motor de su cabeza.



Recolección: El robot mueve sus brazos para tomar al objeto, posteriormente sube sus brazos para cargarlo y caminar con él.



Depósito: El robot baja sus brazos, los abre para soltar el objeto y por último los coloca a sus costados.

4.3.5.

Comunicación inalámbrica

El módulo de comunicación se utiliza para que el programa de control general se comunique con el robot y se lleven a cabo movimientos programados para realizar la tarea en cuestión. La comunicación entre el programa Matlab y el robot es por medio de un código que reconoce el módulo de comunicación Zigbee incluido en el humanoide plataforma Bioloid. La parte principal del código se encuentra en la figura 4.23, cabe mencionar que en el apéndice B se encuentran sólo las sentencias de configuración, transmisión y recepción de valores.

~ 56 ~

4. Metodología loadlibrary('zigbee','zigbee.h'); DEFAULT_PORTNUM = 15; % COM15 TIMEOUT_TIME = 1000; % msec %%% Abre dispositivo%%% res = calllib('zigbee','zgb_initialize',DEFAULT_PORTNUM); pause on if (res ~= 1) disp('Falla al abrir Zig2Serial!\n'); disp('Presiona tecla para terminar...\n'); pause else TxData=0; RxData=0; i=0; disp('Apertura exitosa de Zig2Serial!\n'); while(1) res=input('Presiona tecla para continuar o 0 para salir\n'); if res == 0 break; end %%% Guarda el número en la variable %%% TxData=(número a enviar); %%% Transmite dato %%% res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Falla para transmitir\n'); end; end end

Figura 4.23. Código utilizado para configurar, transmitir y recibir por comunicación Zigbee.

Los comandos que se envían al robot son números reales elegidos por el desarrollador, para este caso los valores utilizados son los siguientes: 

2 - 11 se utilizan para movimientos de rotación, captura del objeto y colocación del objeto en el contendedor.



100 - 110 es para corregir la postura del robot para ubicar el objeto del centro de la imagen.



200 - 210 para corregir la postura frente al contenedor.

Cada movimiento del robot tiene un tiempo aproximado de 1.5 segundos, por lo tanto el programa debe ser pausado antes de ejecutar la instrucción escrita en Matlab posterior al envío del número de instrucción y ejecución movimiento.

~ 57 ~

5. Presentación

y

discusión

de

resultados Conocer el desempeño del sistema forma base para que la investigación se valore de acuerdo a los objetivos cumplidos.

Por consiguiente, este capítulo está dedicado a presentar las pruebas

realizadas en el entorno de trabajo, entregar los resultados que se obtuvieron, así como indicar las fallas y su correspondiente su solución, esto último en favor de que el sistema funcione de manera óptima.

5.1.

Entorno de trabajo

El robot se desarrolla y realiza sus tareas en un ambiente controlado, es decir, un espacio de trabajo de 1.20 x 1.34 con paredes de color blanco, estas se colocan para que el robot no se confunda con los colores que existen en el ambiente natural ya que algunos de ellos son iguales a los que se contemplan en el proyecto. El suelo debe ser liso y rígido para que los pasos del robot sean firmes, de lo contrario podría colapsar interrumpiendo el desemepeño de la tarea. Un aspecto importante en el desarrollo de la prueba es la luz, la cual debe ser directa en el espacio de trabajo e intensa para que los colores tengan el contraste necesario, esto hace que el dispositivo de visión observe los colores de los objetos con claridad y la segmentación sea uniforme.

5. Presentación y Discusión de Resultados En cuanto a los objetos que el robot debe recolectar, se realizaron pruebas de carga con el robot y fue notorio que un peso extra en su estructura causaba desequilibrios y colapsaba. Esta razón dio pauta a utilizar objetos realizados con un plástico ligero, como son aquellos formados con unicel y pet (polyethylene terephtalate) [24]. Estos materiales se encuentran en botellas de jugos y yogurt (envasados en industrias) y vasos que sirven de contenedor para bebidas calientes. Las ventajas que presentan son las siguientes: 

peso resulta ideal para que el robot los cargue



en la vida real los objetos de la figura 5.1 son aptos para reciclaje, lo cual es uno de los propósitos que dan vida a este proyecto.

Figura 5.1. Objetos utilizados en las pruebas de recolección.

Los contenedores para que el robot deposite los objetos, son recipientes comunes para basura en color verde.

5.2.

Pruebas y resultados

Probar el desarrollo de la tarea es importante para cumplir los objetivos, por lo tanto en el ambiente de trabajo se utilizaron diferentes configuraciones, es decir, los objetos utilizados para recolección y depósito de los objetos fueron situados en diferentes posiciones del espacio donde el robot se desenvuelve. De acuerdo a las 4 configuraciones, en las cuales se colocaron los objetos, se evaluó el desempeño del sistema por medio de las cinco tareas realizadas, las cuales son: búsqueda por color, clasificación de la red neruonal, desempeño del sistema de inferencia difusa, toma del objeto y depósito del objeto en el contenedor. A cada una de las tareas mencionadas les fue otorgado el 20%, ya que tienen la misma importancia para que la tarea se desarrolle conforme se acordó en el objetivo general. El experimento se llevo a cabo 30 ocasiones con cada configuración.

~ 59 ~

5. Presentación y Discusión de Resultados

5.2.1.

Desarrollo de prueba: Configuración tipo 1

Los objetos y el robot en la configuración tipo 1 estas colocados como se muestra en la figura 5.2. El robot se encuentra viendo hacia la pared izquierda, el objeto es una botella colocada en la esquina izquierda y el contenedor es ubicado en la esquina derecha.

Figura 5.2. Configuración tipo 1 de los objetos para realizar la prueba.

Los resultados se muestran en la tabla 5.1, como se puede observar las tareas fueron evaluadas en cada una de las pruebas realizadas con el porcentaje antes mencionado, al finalizar se realiza el promedio total de las tareas, así como del desempeño total del robot. Las observaciones son de gran importancia para reconocer las fallas y realizar las correcciones necesarias para optimizar el funcionamiento del robot. BC=Busca Color, RN=Red Neuronal, SID=Sistema de Inferencia Difusa, TO=Toma del Objeto, LLC=Llegar al contenedor, PROM=Promedio # BC RN SID TO LLC Total Observaciones 20% 20% 20% 20% 20% 100% ----1 20% 0% 0% 0% 0% 20% Pierde comunicación 2 20% 20% 20% 20% 0% 80% Trayecto incorrecto 3 20% 20% 20% 0% 20% 80% No toma el objeto 4 20% 20% 20% 20% 0% 80% Cae 5 20% 20% 20% 0% 20% 80% No toma el objeto 6 20% 20% 20% 0% 20% 80% No toma el objeto 7 20% 20% 20% 20% 20% 100% ----8

~ 60 ~

5. Presentación y Discusión de Resultados 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 PROM

20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20%

20% 20% 20% 0% 80% Pierde comunicación 20% 20% 20% 20% 100% ----20% 20% 0% 20% 80% No toma el objeto 20% 20% 20% 20% 100% ----20% 20% 0% 20% 80% No toma el objeto 20% 20% 0% 20% 80% No toma el objeto 20% 20% 20% 0% 80% Trayecto incorrecto 20% 20% 20% 20% 100% ----20% 20% 20% 10% 90% Tira el objeto fuera del contenedor 20% 20% 20% 20% 100% ----20% 20% 20% 20% 100% ----20% 20% 0% 20% 80% No toma el objeto 20% 20% 0% 0% 60% Trayecto incorrecto 20% 20% 0% 0% 60% No toma el objeto. Trayecto incorrecto 20% 20% 20% 20% 100% ----20% 20% 0% 20% 80% No toma el objeto 20% 20% 20% 20% 100% ----20% 20% 20% 20% 100% ----20% 20% 20% 0% 80% Trayecto incorrecto 20% 20% 20% 20% 100% ----20% 20% 0% 0% 60% No toma el objeto. Trayecto incorrecto 20% 20% 0% 20% 80% No toma el objeto 19% 19% 11% 14% 84% Tabla 5.1. Resultados de la prueba en la configuración tipo 1.

25%

20% Busca color 15%

Clasificación RN Sistema de Inferencia Difusa

10%

Toma del objeto Llegada al depósito

5%

0% Promedio de cada tarea

Figura 5.3. Promedio en porcentaje de cada tarea realizada en el conjunto de 30 experimentos en la configuración tipo 1.

~ 61 ~

5. Presentación y Discusión de Resultados

(1)

(2)

(3)

(4) (5) (6) Figura 5.4. Secuencia de imágenes que muestra el desarrollo del experimento en la configuración tipo 1.

5.2.2.

Desarrollo de prueba: Configuración tipo 2

Los objetos y el robot en la configuración tipo 2 estas colocados como se muestra en la figura 5.5. El robot se encuentra frente a la pared de fondo, el objeto es una botella colocada en la parte media de la pared derecha y el contenedor en la parte media de la pared izquierda.

Figura 5.5. Configuración tipo 2 de los objetos para realizar la prueba.

~ 62 ~

5. Presentación y Discusión de Resultados BC=Busca Color, RN=Red Neuronal, SID=Sistema de Inferencia Difusa, TO=Toma del Objeto, LLC=Llegar al contenedor, PROM=Promedio # BC RN SID TO LLC Total Observaciones 20% 20% 20% 20% 20% 100% ----1 20% 20% 20% 0% 20% 80% No toma el obeto 2 20% 20% 20% 20% 20% 100% ----3 20% 20% 20% 0% 20% 80% No toma el objeto 4 20% 20% 20% 20% 20% 100% ----5 20% 20% 20% 20% 20% 100% ----6 20% 20% 20% 20% 10% 90% Tira el objeto durante trayecto 7 20% 20% 20% 0% 0% 60% Conteo de pixeles del objeto incorrecto 8 20% 20% 20% 20% 20% 100% ----9 20% 20% 20% 0% 0% 80% Conteo de pixeles del objeto incorrecto 10 20% 20% 20% 0% 0% 80% Conteo de pixeles del objeto incorrecto 11 20% 20% 20% 20% 20% 100% ----12 20% 20% 20% 20% 20% 100% ----13 20% 20% 20% 20% 20% 100% ----14 20% 20% 20% 0% 20% 80% No toma el objeto 15 20% 20% 20% 20% 20% 100% ----16 20% 20% 20% 20% 20% 100% ----17 20% 20% 20% 0% 0% 60% No toma el objeto. Trayecto incorrecto 18 20% 20% 20% 20% 20% 100% ----19 20% 20% 20% 20% 20% 100% ----20 20% 20% 20% 20% 20% 100% ----21 20% 20% 20% 20% 20% 100% ----22 20% 20% 20% 20% 20% 100% ----23 20% 20% 20% 20% 20% 100% ----24 20% 20% 20% 20% 20% 100% ----25 20% 20% 20% 20% 20% 100% ----26 20% 20% 20% 20% 20% 100% ----27 20% 20% 20% 0% 20% 80% No toma el objeto 28 20% 20% 20% 20% 20% 100% ----29 20% 20% 20% 20% 20% 100% ----30 17% PROM 20% 20% 20% 15% 92% Tabla 5.2. Resultados de la prueba en la configuración tipo 2.

~ 63 ~

5. Presentación y Discusión de Resultados 25%

20% Busca color 15%

Clasificación RN Sistema de Inferencia Difusa

10%

Toma del objeto Llegada al depósito

5%

0% Promedio de cada tarea

Figura 5.6. Promedio en porcentaje de cada tarea realizada en el conjunto de 30 experimentos en la configuración tipo 2.

(1)

(2)

(3)

(4) (5) (6) Figura 5.7. Secuencia de imágenes que muestra el desarrollo del experimento en la configuración tipo 2.

5.2.3.

Desarrollo de prueba: Configuración tipo 3

Los objetos y el robot en la configuración tipo 3 estas colocados como se muestra en la figura 5.8. El robot se encuentra frente a la pared principal desde donde se observa el escenario de trabajo, el

~ 64 ~

5. Presentación y Discusión de Resultados objeto es un vaso colocado en la parte media de la pared del fondo y el contenedor en la esquina derecha de la pared principal.

Figura 5.8. Configuración tipo 3 de los objetos para realizar la prueba.

BC=Busca Color, RN=Red Neuronal, SID=Sistema de Inferencia Difusa, TO=Toma del Objeto, LLC=Llegar al contenedor, PROM=Promedio # BC RN SID TO LLC Total Observaciones 20% 20% 20% 20% 20% 100% ---1 20% 20% 20% 20% 20% 100% ---2 20% 20% 20% 20% 20% 100% ---3 20% 20% 20% 20% 20% 100% ---4 20% 20% 20% 20% 15% 95% Tira el objeto fuera del contendor 5 20% 20% 20% 20% 20% 100% ---6 20% 20% 20% 20% 20% 100% ---7 20% 20% 20% 20% 20% 100% ---8 20% 20% 20% 10% 20% 90% Color calibrado afectado por la luz 9 20% 20% 20% 20% 0% 80% Trayecto hacia contenedor incorrecto 10 20% 20% 20% 20% 20% 100% ---11 20% 20% 20% 0% 0% 60% Trayecto hacia objeto incorrecto 12 20% 20% 20% 20% 20% 100% ---13 20% 20% 20% 20% 20% 100% ---14 20% 20% 20% 10% 20% 90% Tira el objeto al tomarlo 15 20% 20% 20% 20% 15% 95% ---16 20% 20% 20% 20% 20% 100% ---17

~ 65 ~

5. Presentación y Discusión de Resultados 18 19 20 21 22 23 24 25 26 27 28 29 30 PROM

20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20%

20% 20% 20% 20% 100% ---20% 20% 10% 20% 90% Tira el objeto al tomarlo 20% 20% 20% 5% 85% Pierde de vista el contenedor 20% 20% 20% 20% 100% ---20% 20% 20% 15% 95% Tira el objeto fuera del contenedor 20% 20% 20% 20% 100% ---20% 20% 0% 0% 60% Toma la imagen errónea 20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% ---20% 20% 18% 17% 95% Tabla 5.3. Resultados de la prueba en la configuración tipo 3.

25%

20% Busca color 15%

Clasificación RN Sistema de Inferencia Difusa

10%

Toma del objeto

Llegada al depósito 5%

0% Promedio de cada tarea

Figura 5.9. Promedio en porcentaje de cada tarea realizada en el conjunto de 30 experimentos en la configuración tipo 3.

(1)

(2)

~ 66 ~

(3)

5. Presentación y Discusión de Resultados

(4) (5) (6) Figura 5.10. Secuencia de imágenes que muestra el desarrollo del experimento en la configuración tipo 3.

5.2.4.

Desarrollo de prueba: Configuración tipo 4

Los objetos y el robot, en la configuración tipo 4, estan colocados como se muestra en la figura 5.11. El robot se encuentra en la esquina derecha en la pared del fondo, el objeto es un vaso colocado en la esquina derecha de la pared principal y el contenedor en la esquina izquierda en la pared del fondo.

Figura 5.11. Configuración tipo 4 de los objetos para realizar la prueba.

BC=Busca Color, RN=Red Neuronal, SID=Sistema de Inferencia Difusa, TO=Toma del Objeto, LLC=Llegar al contenedor, PROM=Promedio # BC RN SID TO LLC Total Observaciones ---100% 20% 20% 20% 20% 20% 1

~ 67 ~

5. Presentación y Discusión de Resultados 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 PROM

20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20% 20%

---20% 20% 20% 20% 100% Conteo de pixeles del objeto incorrecto 20% 20% 0% 0% 60% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% Tira el objeto fuera del contenedor 20% 20% 20% 15% 95% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% Pierde de vista el contenedor 5% 85% 20% 20% 20% ---100% 20% 20% 20% 20% No toma el objeto 0% 20% 80% 20% 20% ---100% 20% 20% 20% 20% ---20% 20% 20% 20% 100% No toma el objeto 20% 20% 0% 20% 80% No toma el objeto 20% 20% 0% 20% 80% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% ---20% 20% 20% 20% 100% No toma el objeto 20% 20% 0% 20% 80% Tira el objeto fuera del contenedor 20% 20% 20% 15% 95% ---20% 20% 20% 20% 100% ---100% 20% 20% 20% 20% ---100% 20% 20% 20% 20% ---100% 20% 20% 20% 20% 95% 20% 20% 17% 19% Tabla 5.4. Resultados de la prueba en la configuración tipo 4.

~ 68 ~

5. Presentación y Discusión de Resultados 25%

20% Busca color 15%

Clasificación RN Sistema de Inferencia Difusa

10%

Toma del objeto Llegada al depósito

5%

0% Promedio de cada tarea

Figura 5.12 Promedio en porcentaje de cada tarea realizada en el conjunto de 30 experimentos en la configuración tipo 4.

(1)

(2)

(3)

(4) (5) (6) Figura 5.13. Secuencia de imágenes que muestra el desarrollo del experimento en la configuración tipo 4.

5.3.

Fallas y correcciones

Durante el desarrollo de las pruebas se corrigieron errores que dificultaban el proceso. Los errores se discuten a continuación así como la corrección encontrada.

~ 69 ~

5. Presentación y Discusión de Resultados 1. Falla: Agarre del objeto Los objetos plásticos que simulan manos en el robot son curvos, como lo muestra la figura 5.14 y no permiten sostener de manera correcta los objetos ya que al momento de ser levantados estos se escurren por el orificio que queda entre las manos.

Figura 5.14. Manos del robot bioloid con curvatura. Solución Para resolver este problema se utilizó material de unicel en forma de prisma rectangular, lo cual llena el espacio que queda en los huecos de las manos del robot. 2. Falla: Pierde comunicación módulo Zigbee El envío y recepción de datos se realiza mediante el módulo Zigbee incluido en el kit del robot bioloid, esta tecnología inalámbrica es de bajo alcance y debido a los obstáculos de las paredes en el ambiente de trabajo las antenas, conectadas una al robot y otra a la computadora de mando, perdían conexión. Solución Como se observa en la figura 5.2 la antena conectada al computador de mando debe estar cerca del ambiente donde el robot desarrolla su tarea. 3. Falla: Cámara inalámbrica El dispositivo de visión utilizado en primera instancia para desarrollar las tareas fue una cámara inalámbrica, ya que el uso de cables en robots humanoide resulta un problema para caminar en el ambiente de trabajo. Este dispositivo se utiliza para espionaje y trabaja por medio de radiofrecuencia. La cámara está diseñada para colocarse en un lugar fijo, por lo tanto su antena es de un material delicado. Puesta en marcha, la cámara fue montada sobre el robot con los movimientos de caminado, algunas veces este colapsaba, por consiguiente se perdía la conectividad y no era posible observar los colores del entorno entregando al programa principal imágenes erróneas.

~ 70 ~

5. Presentación y Discusión de Resultados Solución Se cambió la cámara de espionaje inalámbrica por una cámara web cableada a la computadora, aunque esto último puede presentar una desventaja, el desempeño del robot no se vio afectado como se observa en los resultados,. 4. Falla: Postura del robot Las instrucciones dadas en el kit bioloid indican que la postura del robot debe ser recta en su espalda, formando una línea perpendicular al piso. Sin embargo, el robot tenía una postura inclinada, es decir, su estructura presentaba una inclinación hacia el frente, como lo muestra la figura 5.15. Esto causaba desequilibrio y el robot continuamente sufría caídas.

Figura 5.15. Postura incorrecta para movimientos del robot bioloid. Solución El problema estaba situado en la tarjeta que contiene al microcontrolador llamada “CM510”, la cual contiene los movimientos del robot así como el programa que los comanda. El firmware de esta tarjeta había sido actualizado de manera incorrecta, por lo tanto entregaba instrucciones erróneas al hardware. La solución fue cambiar la tarjeta CM510 por otra que tuviera el firmware original y el robot corrigió su postura como se observa en la figura 5.16.

~ 71 ~

5. Presentación y Discusión de Resultados

Figura 5.16. Postura correcta en el robot bioloid, formando una línea perpendicular con el piso partiendo de su espalda.

~ 72 ~

6. Conclusiones y trabajo futuro Para dar fin a la investigación, este capítulo presenta la argumentación para enlazar los objetivos con los resultados que se obtuvieron y fueron presentados en el capítulo anterior. Proponer una investigación subsecuente es proyectar un futuro para el tema que aquí se presenta, es por esta razón que se propone un trabajo a futuro para optimizar el funcionamiento del sistema, es decir, que le permita el desempeño en un ambiente real menos controlado.

6.1.

Conclusiones

Con base en los resultados presentados en el capítulo anterior, la elección del tipo de red neuronal fue acertada ya que mostró un desempeño del cien por ciento. Los rasgos descriptores con los que fue entrenada es el aspecto más importante, por lo tanto deben ser tomados en consideración en el momento de su elección, esto garantiza un correcto funcionamiento como se pudo observar en las tablas presentadas anteriormente. Uno de los aspectos que tienen especial importancia es el sistema de inferencia difuso, el cual dio las instrucciones adecuadas para que el robot realizara los movimientos exactos y no perdiera al objeto del cuadro de visión, inlcuso optmiza los tiempos de respuesta, es decir no fue necesario que el robot utilizara una cantidad mayor de movimientos para ubicar el objeto exactamente en el centro de la imagen y posteriormente caminar hacia el, por lo tanto el desarrollo de la tarea es realizado en

6. Conclusiones y Trabajo Futuro un tiempo menor ya que bastaba con que el objeto se presentara en la región permitida en el cuadro de visión. La búsqueda de objetos por su color puede ser utilizada sólo en casos específicos como la detección de los contendores, los cuales tienen un color uniforme. Si se desea localizar objetos en los cuales su color varia en diferentes partes de su composición, es mejor utilizar otra herramienta como por ejemplo, textura, profundidad, etc. En esta investigación tomar el color como herramienta principal fue un acierto ya que siempre fue localizado, de esta manera la segmentación se llevó a cabo en su totalidad, sin embargo el ambiente de trabajo debe estar controlado ya que si se presenta un objeto que contenga el mismo color que el que se está buscando, el programa se confunde e intenta caminar hacia él para recolectarlo y llevarlo al contenedor. Esta desventaja puede solucionarse utilizando otro tipo de red neronal para que discrimine objetos que son del mismo color pero no cumplen las características con las que fue entrenada.

6.2.

Trabajo futuro

Como fue mencionado en el capítulo 1, este trabajo presenta las bases para realizar recolección de objetos. La propuesta para continuar con esta investigación es, como primer paso, mejorar los aspectos causantes de que el desempeño de la tarea completa no sea del 100%, en este caso se observa, por medio de los resultados, que la toma del objeto presentó errores los cuales deben ser erradicados. Como ejemplo, en la configuración tipo 1 la tarea “tomar el objeto” obtuvo un bajo desempeño el cual debe ser corregido. La siguiente propuesta de mejora, es permitir que el robot se desarrolle en un ambiente no controlado, es decir, que pueda interactuar en un espacio con diferentes objetos usados en la vida cotidiana, y detectar únicamente aquellos que representen basura que es candidata a reciclaje para depositarla en los contenedores. Esta tarea puede llevarse a cabo utilizando la técnica de descriptores de fourier, la cual puede hacer reconocimiento de objetos por forma. Con este procedimiento se puede quitar el uso del color como característica principal de búsqueda y ubicación del objeto. Es necesario tomar en cuenta que el procesamiento de imágenes que se requiere al utilizar esta herramienta, lleva un tiempo mayor para su ejecución.

~ 74 ~

6. Conclusiones y Trabajo Futuro La autonomía del robot es otra mejora que se debe tomar en cuenta, si bien en este trabajo se presenta como libre de un manejo remoto por cable o radiofrecuencia, es todavía dependiente de su conexión a la computadora de mando por el dispositivo de visión. La solución a este inconveniente es posible integrando a la estructura del robot un dispositivo programable, como por ejemplo una de las tarjetas FPGA, en especial la Cyclone II, debido a que es posible fijar en el robot por su tamaño, así como conectar el sensor de visión. Uno de los problemas que se pueden presentar al utilizar este dispositivo, es el voltaje que requiere para su operación, ya que si se tiene pensado utilizar la batería incluida en el kit bioloid, el desarrollo de las tareas realizadas por el robot se vería afectado disminuyendo el tiempo de operación, con riesgo de realizar por única vez la prueba completa y tener que esperar la recarga de la batería para continuar.

~ 75 ~

Referencias [1]

J. Ruíz Del Solar, R. Salazar. “Introducción a la Robótica”. Departamento de Ingeniería Eléctrica, Facultad de Cs., Fs., y Matemáticas, Universidad de Chile. Recuperado 7 de Agosto de 2013. http://robotica.li2.uchile.cl/EL63G/capitulo1.pdf

[2]

Morales, Antonio, Asfour, Tamim, Azad, Pedram, Knoop, Steffen, Dilmann, Rüdiger. (2006). “Integrated Grasp Planning and Visual Object Localization For a Humanoid Robot with Five-Fingered Hands”. IEEE/RSJ Internacional Conference con Intelligent Robots and Systems. Beijing, China. pp. 5663-5668.

[3]

Eitner, Christian, Yuto, Mori, Kei, Okada, Masayuki, Inaba. (2008). “Task and Vision Based Online Manipulator Trajectory Generation for a Humanoid Robot”. IEEE-RAS Internacional Conference on Humanoid Robots. Daejeon, Korea. pp. 293-298.

[4]

J Bell, Christian, Shenoy, Pradeep, Rawichote, Chalodhorn, P N Rao, Rajesh. (2008). “Control of a humanoid robot by a noninvasive bran-computer interface humans”. J. Neural Eng. 5. pp. 214-220.

[5]

Huerta Moreno, Gabriel Omar. (2009). “Localización y manipulación de objetos mediante un robot móvil Khepera II auxiliado de una cámara y un elemento prensil”. Centro de Investigación en Computación del Instituto Politécnico Nacional. México, Distrito Federal.

[6]

Amr Almaddah, Yasushi Mae, Kenichi Ohara, Tomohito Takubo, Tatsuo Arai. (2010). “Unknown Objects Segmentation and Material Classification for Separation”. International Conference on Robotics and Biomimetics. IEEE. Tianjin, China. pp. 1457-1462.

Referencias

[7]

Brauer, Mauricio. (2013). “Control de un robot humanoide mediante redes neuronales pulsantes para la manipulación de objetos”. Centro de Investigación en Computación del Instituto Politécnico Nacional. México, Distrito Federal.

[8]

Grupo de control e integración de sistemas del Departamento de ingeniería de Sistemas y Automática de la Universidad del País Vasco. Recuperado el 7 de Agosto del 2013.

http://www.disa.bi.ehu.es/gcis/spanish/lineas_de_investigacion/index.html [9]

Marulanda, Juan F, G. Barco, Martha, López, Jesús A. “Control Inteligente De Un Reactor Químico”. Grupo de Percepción y Sistemas Inteligentes. Universidad del Valle. Cali, Valle, Colombia. Recuperado el 7 de Agosto del 2013. http://objetos.univalle.edu.co/files/Control_inteligente_de_un_reactor_quimico.pdf

[10]

Rosales Méndez, A., Díaz Fergadiz Roldán, A.S., Bolaños Rodríguez E., Coello Galindo L.R., Solís Galindo, A. “Método de umbralado por determinación de pixeles para la segmentación de elementos en imágenes aplicado al análisis de problemas en la industria”. México: Escuela Superior de Tizayuca, Universidad Autónoma del Estado de Hidalgo. pp. 1-7.

[11]

Alba, José Luis, Cid, Jesús, Mora, Inmaculada. (2006). “Métodos de análisis de imágenes. Extracción de características”. España: Universidad de Vigo, Universidad Carlos III de Madrid, Universidad Rey Juan Carlos.

[12]

Otsu, Nobuyuki. (1979). “A Threshold Selection Method from Gray-Level Histograms”. IEEE Transactions on systems, man, and cybernetics, Vol. SMC-9, No.1. pp. 62-66.

[13]

C. Gonzalez, Rafael, E. Woods, Richard. Digital Image Processing. Second Edition”. Prentice Hall.

[14]

Mamdani, E.H. “Application of fuzzy logic to approximate reasoning using linguistic synthesis”. London: Queen Mary College (University of London). pp. 196-202.

[15]

S. McCulloch, Warren, Pitts, Walter. (1943). “A logical calculus of the ideas immanent in nervous activity”. Bulletin of Mathematical Biophysics, Volume 5.

[16]

Gutiérrez, José Manuel. “Introducción a las redes Neuronales”. Universidad de Cantabria. pp. 115-133.

[17]

Čapek, Karel. (1920). “R.U.R. Rossum’s Universal Robots”.

~ 77 ~

Referencias [18]

López Espejo, Iván. (2010). “Método de Otsu (Segmentación por umbralización)”. Recuperado el 11 de julio del 2013. www.ilopez.es/proyectos/matematicas/Otsu.pptx

[19]

H. Lilly, John. “Fuzzy Control and Indentification”. John Wiley & Sons, Inc.

[20]

Suppes, P., Hill, S. (1992). “Introducción a la lógica matemática”, Reverte, México.

[21]

Rosenblatt, F. (1962). “Principles of Neurodynamics”. Spartan Books. New York.

[22]

Real Academia de la Lengua Española. Recuperado el día 11 de julio del 2013. http://www.rae.es/rae.html

[23]

Bhargav Anand, A. (2010). “Tracking red color objects using Matlab”. Recuperado el día 23 de julio del 2013. http://www.mathworks.com/matlabcentral/fileexchange/28757-tracking-red-colorobjects-using-matlab/content/redObjectTrack.m

[24]

Wikipedia. La enciclopedia libre. Recuperado el día 24 de julio del 2013. http://es.wikipedia.org/wiki/Politereftalato_de_etileno

[25]

Sossa Azuela, Juan Humberto. (2010). “Rasgos Descriptores para el Reconocimiento de Objetos”. Primera Edición. México: Instituto Politécnico Nacional. Capítulo 2.

[26]

Huang, Z., Leng, J. (2010). “Analysis of Hu. Moment Invariants on Image Scaling and Rotation. Proceedings”. 2nd International Conference on Computer Engineering and Technology (ICCET). pp. 476-480. Chengdu, China. IEEE.

[27]

Little, Jack y Moler, Cleve. “MathWorks”. Recuperado el día 7 de Agosto del 2013. http://www.mathworks.com/company/

[28]

Andina de la Fuente, Diego, y Vega Corona, Antonio. “Redes Neuronales de Tipo Biológico”. Universidad Complutense de Madrid. España. Recuperado el día 7 de Agosto del 2013. http://www.gc.ssr.upm.es/inves/neural/ann2/concepts/biotype.htm

[29]

Wikipedia. La enciclopedia libre. Recuperado el día 27 de octubre del 2013. http://es.wikipedia.org/wiki/Batería_eléctrica

~ 78 ~

Apéndice A: Conexión del sistema Realizar las conexiones correctas en el sistema garantiza su funcionamiento, de lo contrario podría sufrir daños integrales que requieran cambios en hardware. Aquí se exponen los pasos a seguir para el manejo adecuado de los programas y las conexiones de cableado.

A.1. Cargar programas en la tarjeta CM510 El código utilizado para dirigir las tareas, así como los movimientos grabados en la plataforma Roboplus debe ser integrada a la tarjeta controladora del robot CM510, este software debe estar previamente instalado en la computadora. Los pasos a seguir son los siguientes: 1. Conectar la tarjeta USB2Dynamixel a la computadora y al robot como se observa en la figura A.1.

Figura A.1. Conexión de USB2Dynamixel para cargar programas del Software Roboplus 2. Abrir los programas previamente guardados en “Roboplus Task” y “Roboplus Motion”. Un programa a la vez, se abre el puerto que comunica la tarjeta USB2Dynamixel con el robot. Establecida la comunicación, presionar el botón “Descargar Programa”. En el software “Roboplus Motion” se debe desconectar el puerto para poder utilizarlo posteriormente.

Apéndice A: Conexión del Sistema, Voltaje y Corriente

A.2. Conexión general Una vez cargados los programas en el robot, procedemos a conectar el dispositivo de visión montado en el robot y el módulo Zigbee para establecer la comunicación de la computadora y el robot. 1. La cámara web Acteck alámbrica esta dotada con un puerto USB para concetar a la computadora. Se debe verificar que se ha instalado el controlador de la cámara para su uso. Esto puede realizarse en el software Matlab, abriendo el programa se presiona lo siguiente: 

StartToolboxesImage AcquisitionImage Acquisition Tool

Dentro de la interfaz visual de adquisición de imágenes, mostrada en la figura A.2, aparece la ventana “Hardware Browser”, la cual contiene los dispositivos de visión instalados.

Figura A.2. Interfaz de la herrmamienta de Adquisición de Imágenes de Matlab 2. Para instalar la comunicación Zigbee es necesario adquirir la tarjeta Zig2Serial mostrada en la figura A.3.

Figura A.3. Tarjeta Zig2Serial.

~ 80 ~

Apéndice A: Conexión del Sistema, Voltaje y Corriente A la tarjeta Zig2Serial se le conecta la tarjeta ZIG-100 que contiene una de las antenas para la comunicación Zigbee, figura A.4, la cual viene con el kit bioloid.

Figura A.4. Tarjeta ZIG-100. Estas dos tarjetas se integran al conector USB2Dynamixel el cual se conecta a un puerto USB de la computadora, es importante ubicar el número de puerto en el que fue instalada la tarjeta para escribir ese valor en el programa general. Las conexiones anteriores integradas se muestran en la figura A.5.

Figura A.5. Conexión para establecer comunicación por Zigbee. En la tarjeta controladora CM510 montada al robot, debe estar concetada la tarjeta ZIG110ª, la cual contiene otra de las antenas para establecer comunicación.

~ 81 ~

Apéndice A: Conexión del Sistema, Voltaje y Corriente

Figura A.6. Módulo ZIG-110A conectada a la tarjeta CM510 Al encender la tarjeta CM510 el parpadeo de un foco color rojo indica que se comienza a establecer comunicación entre las antenas.Cuando el parpadeo cesa, la comunicación se ha establecido, de lo contrario es necesario revisar la conexión por software. Realizados los pasos anteriores y observando la conexión establecida entre estos dispositivos, se procede a ubiar el robot en el ambiente de trabajo y correr el programa general codificado en Matlab, este último se encuentra en el apéndice B.

A.3. Fuente de alimentación del robot El kit bioliod está dotado con una batería recargable tipo Lipo [29], la cual entrega un voltaje de 11.1 V y tiene una capacidad de 1000mA para alimentar los actuadores, tiene además un control embebido para brindarle una protección contra sobrecargas, sobredescargas y excesos de corriente. La figura A.7 muestra la batería junto con sus elementos de carga.

Figura A.7. Batería Lipo (Color Gris) y elementos para recarga.

~ 82 ~

Apéndice B: Código generado en Matlab

B.1. Código para obtener momento de Hu Función para obtener el Centro de Masa function CentMasa(ImaUmb) global Area m10 m01 CdMx CdMy Area=0; m10=0; m01=0; dimension=size(ImaUmb); for i=1:dimension(1); for j=1:dimension(2); if (ImaUmb(i,j)==1); Area=Area+1; end end end for i=1:dimension(1); for j=1:dimension(2); if (ImaUmb(i,j)==1); m10=m10+j; end end end for i=1:dimension(1); for j=1:dimension(2); if (ImaUmb(i,j)==1); m01=m01+i; end end end CdMx=m10/Area; CdMy=m01/Area;

Apéndice B: Código Completo del Sistema Generado en Matlab

Función para obtener los Momentos Centrales function Momen_Cent(ImaUmb,dimension,p,q) global u CdMx CdMy u=0; for i=1:dimension(1); for j=1:dimension(2); if (ImaUmb(i,j)==1); u=u+(((j-CdMx).^p).*((i-CdMy)).^q); end end end

Función para obtener los dos primeros momentos de Hu, de los cuales sólo se utiliza el momento 1. function HuMoments(ImaUmb) global n20 n02 n11 Area Phi1 Phi2 u dimension=size(ImaUmb); Momen_Cent(ImaUmb,dimension,2,0) n20=u/power(Area,2); Momen_Cent(ImaUmb,dimension,0,2) n02=u/power(Area,2); Momen_Cent(ImaUmb,dimension,1,1) n11=u/(power(Area,2)); %%%Cálculo de las primeras Dos Invariantes de Hu%%% Phi1=n20+n02; Phi2=(n20-n02).^2+(4*power(n11,2));

B.2. Código de entrenamiento de red neuronal %%%PROGRAMA PARA ENTRENAR UNA RED TLU CON LA REGLA DEL PERCEPTRÓN%%% %%%CONJUNTO DE ENTRENAMIENTO OBTENIDO DE LOS RASGOS DESCRIPTORES clear all; clc; datos = [2.342857143 0.182015479; 2.398058252 0.180917997;2.417475728 0.180945329;2.403846154 0.181228435;2.596153846 0.181322189;2.611650485 0.180958007;2.586538462 0.180544504;2.643564356 0.187045576;2.653465347 0.186790295;2.576923077 0.186426407;2.634146341 0.189988027;2.734177215 0.19030512;2.708860759 0.190083459;2.721518987 0.190397403;2.721518987 0.19073427;2.476190476 0.188000957;2.536585366 0.1883596;2.640449438 0.186962337;2.629213483 0.186370255;2.6 0.186542697;2.571428571 0.186880997;2.582417582 0.187026733;2.820512821 0.191946042;2.820512821 0.190942536;2.797468354 0.188861442;... 1.245283019 0.186921663;1.245283019 0.186921663;1.283018868 0.187887549;1.222891566 0.191823681;1.224852071 0.193422222;1.23030303 0.190695558;1.185185185 0.186401207;1.192592593 0.187691166;1.201492537 0.187892134;1.208955224 0.187868623;1.201492537 0.1876719;1.209677419 0.185739619;1.216 0.185442859;1.225806452 0.184585969;1.225806452

~ 84 ~

Apéndice B: Código Completo del Sistema Generado en Matlab 0.185471272;1.180555556 0.187863774;1.188811189 0.186973427;1.173611111 0.187929873;1.172413793 0.188309497;1.214285714 0.185089189;1.234234234 0.184690377;1.232142857 0.18413149;1.196428571 0.187451974;1.205357143 0.187811608;1.194690265 0.187735026]; %%%VALORES DE SALIDA DESEADA t=[1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0]; datos1= -1; %BIAS %%%INGRESO DE LOS VALORES INICIALES peso1 =0; peso2 =0; theta =0.3; alfa= 0.25; x = zeros(50,1); %MATRIZ DE CEROS PARA GUARDAR LOS VALORES DE LA %COMPARACIÓN CON EL RESULTADO DE LA SALIDA y= 0;%MATRIZ DE CEROS PARA GUARDAR LOS VALORES DE LA COMPARACIÓN CON EL RESULTADO DE LA SALIDA for j=1:+1:50 %CICLO PARA CAMBIO CALCULO Y CAMBIO DE LOS PESOS while(x(j)~=t(j)) %CRITERIO DE PARO DEL ENTRENAMIENTO for i=1:+1:50 a = datos(i,1) * peso1 + datos(i,2) * peso2 + theta * datos1; %CALCULO DE LA SALIDA PARA CADA PAR DEL CONJUNTO DE ENTRENAMIENTO if (a > 0) %%CONIDICIÓN PARA ACTIVACIÓN EN LA SALIDA y=1; else y=0; end if (y~=t(i,1)) %CONIDICIÓN PARA CAMBIO DE LOS PESOS deltaomega1=peso1+alfa*(t(i,1)-y)*datos(i,1); %%%CALCULO DE LOS NUEVOS PESOS peso1=deltaomega1; deltaomega2=peso2+alfa*(t(i,1)-y)*datos(i,2); peso2=deltaomega2; deltatheta=theta+alfa*(t(i,1)-y)*datos1; theta=deltatheta; end x(i)= y; end %GUARDA EL VALOR DE LA SALIDA PARA HACER LA COMPARACIÓN CON LA SALIDA DESEADA Y REALIZAR LOS CICLOS end end %DESPLEGA LOS VALORES ALCANZADOS CON LOS PESOS CALCULADOS POR LA RED display (peso1); display (peso2); display (theta); display (x);

B.3. Código general del proyecto clear all;clc; global Phi1

~ 85 ~

Apéndice B: Código Completo del Sistema Generado en Matlab loadlibrary('zigbee','zigbee.h'); DEFAULT_PORTNUM = 15; % COM15 TIMEOUT_TIME = 1000; % msec res = calllib('zigbee','zgb_initialize',DEFAULT_PORTNUM); pause on if (res ~= 1) disp('Falla en la apertura de Zig2Serial!\n'); disp('Presiona cualquier tecla para terminar...\n'); pause else TxData=0; RxData=0; i=0; disp('Éxito en la apertura de Zig2Serial!\n'); vid = videoinput('winvideo', 2, 'RGB24_640x480');%2, 'UYVY_720x480' set(vid, 'FramesPerTrigger', Inf); set(vid, 'ReturnedColorspace', 'rgb') vid.FrameGrabInterval = 5; start(vid) res=input('Presiona cualquier tecla para continuar o presiona 0 para salir del programa\n'); if res == 0 stop(vid); break; end %% ----------------BUSCA COLOR AZUL O ROJO------------------------ %%%% bw=0; compara=0; compara2=0; while(compara15) pause(0.5) imagen = getsnapshot(vid); di=size(imagen); R=double(0)*ones(di(1),di(2)); G=double(162)*ones(di(1),di(2)); B=double(37)*ones(di(1),di(2)); threshold = 3500; imagen_final=imagen; rr=abs(imsubtract(double(imagen(:,:,1)),R)); gg=abs(imsubtract(double(imagen(:,:,2)),G)); bb=abs(imsubtract(double(imagen(:,:,3)),B)); drr=abs(imsubtract(rr,gg)); dgg=abs(imsubtract(gg,bb)); dbb=abs(imsubtract(bb,rr)); mcd=(rr+gg+bb).*(drr+dgg+dbb); for i=1:size(imagen,1) for j=1:size(imagen,2) if mcd(i,j)>threshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1);

~ 96 ~

Apéndice B: Código Completo del Sistema Generado en Matlab diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid'); imshow(etiqueta); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; compara=bb(3); compara2=bb(4); rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off restah=320-bc2(1); fismat = readfis('C:\Users\AZUL\Documents\Tesis\RobotV7_difuso\fuzzy_corrigeHor.fi s'); evalH= evalfis(restah,fismat); %%%CONTROL DIFUSO%%% if(evalH>=3.5 && evalHthreshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid'); imshow(etiqueta); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; compara=bb(3); compara2=bb(4); rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off restav=240-bc2(2); fismat = readfis('C:\Users\AZUL\Documents\Tesis\RobotV7_difuso\fuzzy_corrigeVer.fi s'); evalV= evalfis(restav,fismat); if(evalV>=3.5 && evalVthreshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid');

~ 99 ~

Apéndice B: Código Completo del Sistema Generado en Matlab imshow(etiqueta); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; compara=bb(3); compara2=bb(4); rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off restav=240-bc2(2); fismat = readfis('C:\Users\AZUL\Documents\Tesis\RobotV7_difuso\fuzzy_corrigeVer.fi s'); evalV= evalfis(restav,fismat); end pause(0.5) flushdata(vid) TxData=4; res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(0.5) for i = 1 : TIMEOUT_TIME res=calllib('zigbee','zgb_rx_check'); if(res == 1) RxData = calllib('zigbee','zgb_rx_data'); disp('Recibido: '); disp(RxData); end; end pause(0.5) flushdata(vid); pause(0.5) end TxData=10; res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(1) %% --------------------VASO DETECTADO -------------------------------else y=0; fprintf('EL OBJETO DETECTADO ES UN VASO\n') cuenta=0; for i=1:1:639 if(morfo2(240,i)==1) cuenta=cuenta+1; end

~ 100 ~

Apéndice B: Código Completo del Sistema Generado en Matlab end while(cuenta=4.8 && evalH=4.5 && evalV=80||restah=80) TxData=209; res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end

~ 105 ~

Apéndice B: Código Completo del Sistema Generado en Matlab pause(1.5) elseif(restahthreshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); etiqueta = bwareaopen(etiqueta,300); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid'); imshow(imagen_final); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid;

~ 106 ~

Apéndice B: Código Completo del Sistema Generado en Matlab rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off pause(1) restah=round(320-bc(1)); end TxData=4; res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(0.5) for i = 1 : TIMEOUT_TIME res=calllib('zigbee','zgb_rx_check'); if(res == 1) RxData = calllib('zigbee','zgb_rx_data'); disp('Recibido: '); disp(RxData); end; end while(RxData>15)%450 pause(0.5) imagen = getsnapshot(vid); di=size(imagen); R=double(151)*ones(di(1),di(2)); G=double(181)*ones(di(1),di(2)); B=double(91)*ones(di(1),di(2)); threshold = 3500; imagen_final=imagen; rr=abs(imsubtract(double(imagen(:,:,1)),R)); gg=abs(imsubtract(double(imagen(:,:,2)),G)); bb=abs(imsubtract(double(imagen(:,:,3)),B)); drr=abs(imsubtract(rr,gg)); dgg=abs(imsubtract(gg,bb)); dbb=abs(imsubtract(bb,rr)); mcd=(rr+gg+bb).*(drr+dgg+dbb); for i=1:size(imagen,1) for j=1:size(imagen,2) if mcd(i,j)>threshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level);

~ 107 ~

Apéndice B: Código Completo del Sistema Generado en Matlab diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); etiqueta = bwareaopen(etiqueta,300); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid'); imshow(imagen_final); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off pause(1) restah=320-bc(1); fismat = readfis('C:\Users\AZUL\Documents\Tesis\RobotV7_difuso\fuzzy_corrigeHor.fi s'); evalH= evalfis(restah,fismat); %%%CONTROL DIFUSO%%% if(evalH>=4 && evalHthreshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); etiqueta = bwareaopen(etiqueta,300); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid'); imshow(imagen_final); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off restav=240-bc(2); fismat = readfis('C:\Users\AZUL\Documents\Tesis\RobotV7_difuso\fuzzy_corrigeVer.fi s'); evalV= evalfis(restav,fismat); if(evalV>=4.5 && evalVthreshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); etiqueta = bwareaopen(etiqueta,300); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid');

~ 110 ~

Apéndice B: Código Completo del Sistema Generado en Matlab

imshow(imagen_final); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off restav=240-bc(2); fismat = readfis('C:\Users\AZUL\Documents\Tesis\RobotV7_difuso\fuzzy_corrigeVer.fi s'); evalV= evalfis(restav,fismat); end pause(0.5) flushdata(vid) TxData=4; res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(0.5) for i = 1 : TIMEOUT_TIME res=calllib('zigbee','zgb_rx_check'); if(res == 1) RxData = calllib('zigbee','zgb_rx_data'); disp('Recibido: '); disp(RxData); end; end pause(0.5) flushdata(vid); pause(0.5) end TxData=11;% Tira vaso y termina rutina res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(0.5) end pause(2) flushdata(vid); stop(vid); %% --------------------CONDICIÓN PARA SEGMENTAR COLOR AZUL--------------else %% --------------COMIENZA A CENTRAR EL OBJETO ------------------%%%CHECA EL HORIZONTAL%%% data1 = getsnapshot(vid); resta=imsubtract(data1(:,:,3), rgb2gray(data1));

~ 111 ~

Apéndice B: Código Completo del Sistema Generado en Matlab filtro=medfilt2(resta, [3 3]); bw2=im2bw(filtro,0.09); morfo=bwareaopen(bw2,300); recorta= imcrop(morfo,[1 1 638 478]); etiqueta = bwlabel(recorta,8); stats = regionprops(etiqueta, 'BoundingBox','Centroid'); imshow(etiqueta) hold on for object = 1:length(stats) bb2 = stats(object).BoundingBox; bc2 = stats(object).Centroid; rectangle('Position',bb2,'EdgeColor','r','LineWidth',2) plot(bc2(1),bc2(2), '-m+') end hold off pause(0.5) restah=round(320-bc2(1)); while(restah>=80||restah=80) TxData=100;%100,101,102,103 son para corregir postura frente al objeto res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(2) elseif(restah=40||restav=40) TxData=102;%en lugar de 300 res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(0.5) elseif(restav 0) %%CONIDICIÓN PARA ACTIVACIÓN EN LA SALIDA y=1; fprintf('EL OBJETO DETECTADO ES UNA BOTELLA\n\n') cuenta=0; for i=1:1:639 if(morfo2(240,i)==1) cuenta=cuenta+1; end end while(cuenta=4 && evalH=4.5 && evalV=80||restah=80) TxData=207;%207,208,209,210 son para corregir postura frente al bote res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(1) elseif(restahthreshold imagen_final(i,j,:)=255; end end

~ 119 ~

Apéndice B: Código Completo del Sistema Generado en Matlab end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid'); imshow(etiqueta); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; compara=bb(3); compara2=bb(4); rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off restah=round(320-bc(1)); end TxData=4; res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(0.5) for i = 1 : TIMEOUT_TIME res=calllib('zigbee','zgb_rx_check'); if(res == 1) RxData = calllib('zigbee','zgb_rx_data'); disp('Recibido: '); disp(RxData); end; end while(RxData>15) pause(0.5) imagen = getsnapshot(vid); di=size(imagen); R=double(10)*ones(di(1),di(2)); G=double(115)*ones(di(1),di(2)); B=double(80)*ones(di(1),di(2)); threshold = 3500; imagen_final=imagen; rr=abs(imsubtract(double(imagen(:,:,1)),R)); gg=abs(imsubtract(double(imagen(:,:,2)),G));

~ 120 ~

Apéndice B: Código Completo del Sistema Generado en Matlab bb=abs(imsubtract(double(imagen(:,:,3)),B)); drr=abs(imsubtract(rr,gg)); dgg=abs(imsubtract(gg,bb)); dbb=abs(imsubtract(bb,rr)); mcd=(rr+gg+bb).*(drr+dgg+dbb); for i=1:size(imagen,1) for j=1:size(imagen,2) if mcd(i,j)>threshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid'); imshow(etiqueta); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; compara=bb(3); compara2=bb(4); rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off restah=320-bc(1); fismat = readfis('C:\Users\AZUL\Documents\Tesis\RobotV7_difuso\fuzzy_corrigeHor.fi s'); evalH= evalfis(restah,fismat); %%%CONTROL DIFUSO%% if(evalH>=4 && evalHthreshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid'); imshow(etiqueta);

~ 122 ~

Apéndice B: Código Completo del Sistema Generado en Matlab

hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; compara=bb(3); compara2=bb(4); rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off restav=240-bc(2); fismat = readfis('C:\Users\AZUL\Documents\Tesis\RobotV7_difuso\fuzzy_corrigeVer.fi s'); evalV= evalfis(restav,fismat); if(evalV>=4.5 && evalVthreshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid'); imshow(etiqueta); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; compara=bb(3); compara2=bb(4); rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off restav=240-bc(2); fismat = readfis('C:\Users\AZUL\Documents\Tesis\RobotV7_difuso\fuzzy_corrigeVer.fi s'); evalV= evalfis(restav,fismat); end pause(0.5) flushdata(vid) TxData=4; res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(0.5) for i = 1 : TIMEOUT_TIME res=calllib('zigbee','zgb_rx_check'); if(res == 1) RxData = calllib('zigbee','zgb_rx_data');

~ 124 ~

Apéndice B: Código Completo del Sistema Generado en Matlab disp('Recibido: '); disp(RxData); end; end pause(0.5) flushdata(vid); pause(0.5) end TxData=10;%Tira la botella y termina rutina res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(0.5) %% --------------------CONDICIÓN PARA TOMAR EL VASO-----------------%%% else y=0; fprintf('EL OBJETO DETECTADO ES UN VASO\n\n') cuenta=0; for i=1:1:639 if(morfo2(240,i)==1) cuenta=cuenta+1; end end while(cuenta=4.8 && evalH=4.5 && evalV=80||restah=80) TxData=209; res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(1.5) elseif(restahthreshold imagen_final(i,j,:)=255; end

~ 130 ~

Apéndice B: Código Completo del Sistema Generado en Matlab end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); etiqueta = bwareaopen(etiqueta,300); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid'); imshow(imagen_final); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off restah=round(320-bc(1)); pause(1) end TxData=4; res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(0.5) for i = 1 : TIMEOUT_TIME res=calllib('zigbee','zgb_rx_check'); if(res == 1) RxData = calllib('zigbee','zgb_rx_data'); disp('Recibido: '); disp(RxData); end; end while(RxData>15)%450 pause(0.5) dimagen = getsnapshot(vid); di=size(imagen); R=double(151)*ones(di(1),di(2)); G=double(181)*ones(di(1),di(2)); B=double(91)*ones(di(1),di(2)); threshold = 3500; imagen_final=imagen; rr=abs(imsubtract(double(imagen(:,:,1)),R));

~ 131 ~

Apéndice B: Código Completo del Sistema Generado en Matlab gg=abs(imsubtract(double(imagen(:,:,2)),G)); bb=abs(imsubtract(double(imagen(:,:,3)),B)); drr=abs(imsubtract(rr,gg)); dgg=abs(imsubtract(gg,bb)); dbb=abs(imsubtract(bb,rr)); mcd=(rr+gg+bb).*(drr+dgg+dbb); for i=1:size(imagen,1) for j=1:size(imagen,2) if mcd(i,j)>threshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); etiqueta = bwareaopen(etiqueta,300); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid'); imshow(imagen_final); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off pause(1) restah=320-bc(1); fismat = readfis('C:\Users\AZUL\Documents\Tesis\RobotV7_difuso\fuzzy_corrigeHor.fi s'); evalH= evalfis(restah,fismat); %%%CONTROL DIFUSO%%% if(evalH>=4 && evalHthreshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); etiqueta = bwareaopen(etiqueta,300); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid');

~ 133 ~

Apéndice B: Código Completo del Sistema Generado en Matlab

imshow(imagen_final); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off restav=240-bc(2); fismat = readfis('C:\Users\AZUL\Documents\Tesis\RobotV7_difuso\fuzzy_corrigeVer.fi s'); evalV= evalfis(restav,fismat); if(evalV>=4.5 && evalVthreshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); etiqueta = bwlabel(diff_im2, 8); etiqueta = bwareaopen(etiqueta,300); stats = regionprops(etiqueta, 'BoundingBox', 'Centroid'); imshow(imagen_final); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') end hold off restav=240-bc(2); fismat = readfis('C:\Users\AZUL\Documents\Tesis\RobotV7_difuso\fuzzy_corrigeVer.fi s'); evalV= evalfis(restav,fismat); end pause(0.5) flushdata(vid) TxData=4;%En lugar de 200 res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(0.5) for i = 1 : TIMEOUT_TIME res=calllib('zigbee','zgb_rx_check'); if(res == 1) RxData = calllib('zigbee','zgb_rx_data'); disp('Recibido: ');

~ 135 ~

Apéndice B: Código Completo del Sistema Generado en Matlab disp(RxData); end; end pause(0.5) flushdata(vid); pause(0.5) end TxData=11;% Tira vaso y termina rutina res=calllib('zigbee','zgb_tx_data',TxData); if res == 0 disp('Failed to transmit\n'); end pause(0.5) end end flushdata(vid) stop(vid) calllib('zigbee','zgb_terminate'); unloadlibrary('zigbee') end

~ 136 ~

Apéndice C: Algoritmo para localizar diferentes tonos de color (Estancia de Investigación)

C.1. Artículo presentado en congreso 2012 El presente artículo fue presentado en Valencia, España, con motivo de mostrar un nuevo método para detectar un color específico, calibrado por el usuario, y posteriormente segmentar la imagen. La fórmula encontrada es llamada “Complemento de la distancia de Manhattan” y sirvió en la presente tesis para segmentar dos tonos de verde, los cuales están presentes en los botes de basura, lugar donde se depositan los objetos encontrados. El código presentado fue realizado para calibrar el color que se requiere y para hacer un seguimiento del objeto en tiempo real con el color calibrado. Title: Plants discrimination in maize fields applying human perception to digital images Preference: oral presentation Authors: J. Romeo, D. Oliva, J. M. Guerrero, M. Montalvo, G. Pajares. Keywords: Segmentation, Manhattan’s distance, color discrimination. Specific main topics: IT: Information Technology, Automation and Precision Farming. Congreso en Valencia Julio 2012, proyecto RHEA. 1. Introduction In Precision Agriculture (PA) image segmentation based on discrimination from the spectral components is a critical task. This affects mainly to green plants identification due to the fact that a single plant can be represented by different green tonalities. In this paper we propose a color detection method that resembles the way in which the human eye makes it. There are many ways to find the color difference of two pixels. All of them are based on metric distances calculated according to the color space in which they are. We introduce a complementary parameter to improve the results obtained with Manhatan’s distance. This distance only considers the sum of the total difference component by component but do not regard how the difference between the red, green and

Apéndice C: Algoritmo para localizar diferentes tonos de color blue components of two colors affects to human perception. For example, two pixels whose red, green and blue components differ in 10, 20 and 30 respectively is significantly closer (more similar for human perception) than other differing in 0 ,0 and 60, though Manhatan’s distance is the same in both cases.. 2. Material and Methods Materials A number of 200 real RGB images, captured with a camera (Canon Eos 400) during April/May 2011 have been used for testing. They were acquired under different environmental conditions: sunny and cloudy days, facing and back to the sun and with different plant growth stages. The digital images were stored as 24-bit color images with a jpeg format and 5 Mb of resolution. Methods The proposed algorithm can be summarized in the following steps: 1. The image is filtered using one of the existing methods to extract only green pixels. In our case we use the percentage of greenness of every pixel with a threshold of 36%. 2. A reference color is selected from the image. 3. For every green pixel (i) of the image we calculate: a. Manhattan’s distance (MD) to the reference pixel: MD = |Rref-Ri | + |Gref-Gi | + |Bref-Bi | b. The differences distribution (DD) which is our main contribution to this abstract: DD =[(|Rref-Ri| - |Gref-Gi|)+(|Rref-Ri| - |Bref-Bi|) + (|Gref-Gi| - |Bref-Bi|)] 4. Now, we calculate the new Manhattan’s Complemented Distance (MCD) as the product of these two parameters: MCD=MD x DD Where the smaller the MCD distance the closer to the reference pixel ‘i’. 5. According to this statement each pixel is classified using a predefined MCD threshold. 6. Finally the different colors detected are shown in the original image. 3. Results Figure 1(a) displays and original image containing different tones of green color. Figure 1(b) displays the detection results, where are classified according to their group.

4. Conclusions We have designed an alternative strategy for color detection in digital images, which has been applied to detect different tones of green in crop fields. This method is able to found the differences between two or more colors, on a similar way the human eye made it. In order to achieve this objective, the color references are chosen, then automatically all

~ 138 ~

Apéndice C: Algoritmo para localizar diferentes tonos de color pixels in the image are classified, according to the threshold values that defines the color groups. 5. Acknowledgments This research was partially supported by The National Council on Science and Technology (CONACYT) of Mexico (Grant number: 215517). 6. References [1] Pandya, A. S. and Macy, R.B. (1995). Pattern Recognition with Neural Networks. CRC Press, Boca Raton, FL. [2] Woebbecke, D.M., Meyer, G.E., von Bargen, K., & Mortensen, D.A. (1995). Shape features for identifying young weeds using image analysis. Transactions on American Society of Agricultural Engineering 38 (1), 271–281. [3] Otsu, N. (1979). A threshold selection method from gray-level histogram. IEEE Transactions on Systems Man and Cybernetics, 9, 62–66.

C.2. Algoritmo del complemento de la distancia de Manhattan para calibrar color clear all; clc; imagen = imread(''); %%Colocar entre las comillas la ruta de la imagen que contiene el color buscado figure (1) imshow(imagen); [columna,fila]=ginput(1); columna=round(columna); fila=round(fila); di=size(imagen); R=double(imagen(fila,columna,1))*ones(di(1),di(2)); G=double(imagen(fila,columna,2))*ones(di(1),di(2)); B=double(imagen(fila,columna,3))*ones(di(1),di(2)); threshold = 4000; imagen_final=imagen; %%%DISTANCIA DE MANHATTAN rr=abs(imsubtract(double(imagen(:,:,1)),R)); gg=abs(imsubtract(double(imagen(:,:,2)),G)); bb=abs(imsubtract(double(imagen(:,:,3)),B)); DM=rr+gg+bb; %%%DISTRIBUCIÓN DE DIFERENCIAS drr=abs(imsubtract(rr,gg));

~ 139 ~

Apéndice C: Algoritmo para localizar diferentes tonos de color dgg=abs(imsubtract(gg,bb)); dbb=abs(imsubtract(bb,rr)); DD=drr+dgg+dbb; %%COMPLEMENTO DE LA DISTANCIA DE MANHATTAN mcd=(DM).*(DD); for i=1:size(imagen,1) for j=1:size(imagen,2) if mcd(i,j)>threshold imagen_final(i,j,:)=255; end end end figure (2) imshow(imagen_final);

C.3. Algoritmo para seguimiento del color calibrado vid = videoinput('winvideo', 1); set(vid, 'FramesPerTrigger', Inf); set(vid, 'ReturnedColorspace', 'rgb') vid.FrameGrabInterval = 5; start(vid) while(vid.FramesAcquiredthreshold imagen_final(i,j,:)=255; end end end escala=rgb2gray(imagen_final); diff_im0 = medfilt2(escala, [3 3]); level = graythresh(diff_im0); diff_im1 = im2bw(diff_im0,level); diff_im1=not(diff_im1); diff_im2 = bwareaopen(diff_im1,300); bw = bwlabel(diff_im2, 8); stats = regionprops(bw, 'BoundingBox', 'Centroid'); imshow(imagen); hold on for object = 1:length(stats) bb = stats(object).BoundingBox; bc = stats(object).Centroid; rectangle('Position',bb,'EdgeColor','r','LineWidth',2) plot(bc(1),bc(2), '-m+') a=text(bc(1)+15,bc(2), strcat('X: ', num2str(round(bc(1))), ' Y: ', num2str(round(bc(2))))); set(a, 'FontName', 'Arial', 'FontWeight', 'bold', 'FontSize', 12, 'Color', 'yellow'); end hold off end stop(vid)

C.4. Publicación Dentro de la estancia, a la par trabajé en una investigación que detecta líneas de cultivo de maíz, por medio de visión por computador utilizando técnicas de geometría, estas son utilizadas para controlar un tractor robotizado. Las pruebas de eficiencia son realizadas en un ambiente real, es decir, un campo con cultivos de maíz, donde las condiciones de luz son variantes de acuerdo al clima. Los resultados arrojaron un 90% de eficiencia. La presente investigación fue documentada en un abstract, el cual fue enviado y aceptado en

~ 141 ~

el

Apéndice C: Algoritmo para localizar diferentes tonos de color congreso titulado “Robotics and associated high-technologies and equipment for agricultures and forestry”, que se llevará a cabo en Mayo del 2014 en Madrid, España. En fechas recientes, el artículo completo está siendo revisado en cuanto a la gramática del idioma inglés para su correcta divulgación en el congreso. El siguiente recuadro muestra el abtract del artículo expuesto. Abstract A common challenge nowadays in precision agriculture is to develop an autonomous vehicle for several purposes. With the mentioned target, this work describes a process, based on computer vision, for guiding a tractor in its way along maize crop lines. This is achieved by providing the horizontal displacement and the heading deviation of the tractor from the aligned and correct position to a wheels control system. The control system used is not described in this paper. A camera, mounted on the top of the tractor, captures the images that are processed on real time. Image process is divided in two steps: a) Crop row detection and b) Calculation of tractor deviation. Crop row detection is achieved by using the method described in J. Romeo et al. [1]. This method makes first an image segmentation using fuzzy clustering to find a green threshold. Then it detects the lines that fit better with the crop lines by using a new method able to work on real time and robust enough despite atmospherical changes and tractor oscillations. Once the tractor is aligned in its correct position, the horizontal displacement (d) and the heading or yaw angle () are set to zero as reference values. Then, as the tractor moves along the crop lines, the new horizontal displacements and heading angles are constantly compared and measured against the reference values. Figure 1(a) shows the line when the tractor is centered between the lines (d=0). On figure 1(b) the new line has been displaced horizontally. Figure 1(c) shows the crop line with the yaw angle set to zero. As the tractor moves along the crop lines, variations on its heading make  change from its original value (figure 1d).

(a)

(b)

(c)

(d)

d

Figure 1. Decomposition in two parameters with respect to vehicle motion. (a) and (b) show the horizontal displacement of the tractor, d. (c) and (d) show the horizontal rotation of the tractor, 

~ 142 ~

Apéndice C: Algoritmo para localizar diferentes tonos de color The system has been tested in real maize crops, mounted on the top of a tractor. Tests have been carried out in real-time and in different climatic and soil conditions. Tractor guidance results have been successful in 95% of the cases.

Reference [1] J. Romeo, G. Pajares, M. Montalvo, J. M. Guerrero, M. Guijarro and A. Ribeiro. “Crop row detection in maize fields inspired on the human visual perception”. The ScientificWorld Journal, 2012.

~ 143 ~