DISEÑO, CONSTRUCCION Y CONTROL DE UN ROBOT MOVIL DESARROLLADOR DE LABERINTO UTILIZANDO INTELIGENCIA ARTIFICIAL DESIGN, CONSTRUCTION AND CONTROL OF A MOBILE ROBOT DEVELOPER´S LABYRINTH USING ARTIFICIAL INTELLIGENCE
Gino Andrey Grimaldos Puerto. Estudiante de Ingeniería Electromecánica. Universidad Pedagógica y Tecnológica de Colombia.
[email protected] Camilo Andrés Moreno González. Estudiante de Ingeniería Electromecánica. Universidad Pedagógica y Tecnológica de Colombia.
[email protected] Iván Rodrigo Ochoa Rodríguez. Estudiante de Ingeniería Electromecánica. Universidad Pedagógica y Tecnológica de Colombia.
[email protected] María Luisa Pinto Salamanca. Ingeniera Electrónica, Magister en Ingeniería Automatización Industrial. Integrante Grupo de Investigación de Energía y Nuevas Tecnologías GENTE. Docente Escuela de Ingeniería Electromecánica. Universidad Pedagógica y Tecnológica de Colombia.
[email protected]
Resumen: Problema: los parámetros que definen la calidad de la producción en el sector avícola se relacionan con las características físicas de los huevos, por lo cual el proceso de clasificación para una empresa productora de huevos resulta crítico porque pueden presentarse perdidas por fracturas del huevo, errores de pesaje, tiempos excesivos del proceso y escasa accesibilidad en la tecnología local.
Métodos: se analizan las características físicas del huevo de gallina para definir la resistencia a la fractura en condiciones estáticas y dinámicas, así como los parámetros de energía para el posterior diseño de un sistema automático de clasificación para la empresa HUEVOS de Duitama Boyacá.
Resultados: Se encuentra la relación entre el peso, el tamaño del huevo, posición y la resistencia a la compresión del huevo de gallina es encontrada. Se presenta el diseño del sistema de clasificación automática y con su control y supervisión.
Conclusión: Existe una relación directamente proporcional entre la clasificación por peso y el tamaño del huevo de gallina, pero no hay relación entre el tamaño del huevo y la resistencia a la compresión. El sistema mecánico diseñado impide las fracturas de los huevos sanos y el control del sistema automático permite una fácil instalación.
Palabras clave: Huevos de gallina, caracterización, clasificación automática.
Abstract: Problem: the parameters that define the quality of production in the avian sector are related to the physical characteristics of the eggs, so the classification process for a producer of eggs is critical because can occur losses for egg fractures, weighing errors, excessive times of the process and low accessibility in local technology.
Methods: are analyzed the physical characteristics of hen egg to define the fracture toughness under static and dynamic conditions, and energy parameters for the subsequent design of an automatic classification system for the company HUEVOS in Duitama Boyacá.
Results: The relationship between weight, egg size, position and the compressive strength of hen egg is found. The design of automatic classification system and its control and supervision is presented.
Conclusion: There is a direct relationship between the classification by weight and size of hen eggs, but no relationship between egg size and compressive strength. The mechanical system designed
prevents fractures in healthy eggs and the automatic control system allows easy installation in the proposed design.
Key words: Hen eggs, Characterization, Automatic classification.
1. Introducción Con la robótica se ha tenido una renovación de la forma en que el hombre puede desarrollar un problema en la actualidad, pues hoy, ya no se piensa como lo desarrollare con mis manos o como lo desarrollara
uno del
talento humano, sino que se piensa en cómo hare un sistema que pueda
desarrollar la tarea propuesta de una manera eficaz y optima y que no ponga en riesgo la vida humana ; con esta nueva percepción surge la pregunta que es un sistema automático y que es un sistema inteligente los cuales se diferencian en que el sistema automático ya tiene una programación fija, mas el sistema inteligente tiene la posibilidad de interactuar con mas variables del medio y adaptarse al mismo. Con esto surge la inteligencia artificial la cual se ocupa de construir sistemas que tengan la capacidad de discernir, discriminar y evaluar en pocas palabras que tengan la capacidad de pensar. La inteligencia artificial ya ha sido utilizada en muchas áreas como desde el procesamiento de imágenes, videojuegos y hasta la industria en general, pero para poder desarrollarse surgieron métodos y estrategias de control que permiten su aplicación entre las cuales tenemos algoritmos genéticos, lógica difusa, redes bayesianas, redes neuronales, entre otras. La lógica difusa consiste en un sin número de condicionales, pero no de la forma en que se hace en programación normal sino con la utilización de un conjunto difuso el cual se procesara con un controlador difuso (una de las opciones de desarrollo y el que se va a utilizar es con la función fuzzi de Matlab). Las redes neuronales son un modelo que intenta imitar al cerebro humano que recibe t combina señales desde y hacia otras neuronas y si la combinación de entradas es suficientemente fuerte la salida de la neurona se activa. Así se tienen entradas las cuales son operadas de diversas formas según se programe
en la neurona y con una función de activación se da respuesta; luego se unen muchas neuronas y se tendrá una red neuronal que desarrolla un objetivo. (Una de las opciones de desarrollo y el que se va a utilizar es con la función nnstart de Matlab).
Lo que se va a desarrollar en este artículo es la aplicación de dos estrategias de inteligencia artificial: la lógica difusa y las redes neuronales con el fin de darle control a un robot móvil con plataforma tipo Ackerman para desarrollar un laberinto. Lo anterior se logra con la utilización de Matlab y una tarjeta de Arduino (Arduino mega) que se integran para leer las señales de distancia: adelante, lado derecho y lado izquierdo del robot, con tres sensores ultrasónicos. Con el procesamiento de estos datos se dará respuesta a un motor de corriente directa que actuara para dar tracción y un servomotor que se encargara de la dirección del robot para hacer del robot un sistema inteligente que pued a desarrollar cualquier tipo de laberinto.
2. MATERIALES Y METODOS 2.1 Materiales El robot en con un carro de tres niveles, con mecanismo de dirección Ackerman (Figura g1) , tiene unas dimensiones de 11 cm de ancho por 16 cm de largo y 15 cm de alto, las laminas bases de cada piso están construidas en laminas de madeflex y los apoyos entre cada una de estas esta construidas con cartón paja, el primer nivel del carro corresponde a los actuadores y los sensores, en el segundo nivel están ubicadas las placas de control, la de control del sistema completo, es decir el microcontrolador arduino uno y el puente H de control del motor DC ya en el tercer nivel está ubicada la etapa de alimentación, con una placa de control de la misma y a un lado del carro está dispuesto un lugar de ubicación para las baterías (Figura 1).
Figura 1. Carro construido. Los sensores usados son tres sensores ultrasónicos HC-SR04 (Figura 2) , los cuales tienen un rango de 2cm a 4m con un ángulo de medición de 15 grados, El sensor ultrasónico posee 4 terminales, GND es para tierra, +5 es la señal de alimentación lógica de 5V que viene de la baquelita de alimentación y dos terminales mas llamados trigger y echo, los cuales van conectados al microcontrolador, trigger como una salida y echo como una entrada, Trigger es el pin por el cual se envía el pulso y PW es el pin por el cual se lee el tiempo de duración del mismo, luego con este tiempo se hace una conversión sabiendo que el impulso se ha enviado a la velocidad del sonido y así tenemos las distancia a la que se está.
Figura 2. Sensores Ultrasónicos Como actuador en la tracción se optó por un motor con caja reductora Figura 3. La cual reduce la alta rotación del motor y aumenta el torque para un movimiento fluido del robot. Reduce de 3000 rpm a 70
rpm aproximadamente. Ya que tiene varias etapas de reducción las cuales son cada uno de los engranajes de diferentes tamaños vistos en la figura 3, el control del motor Dc se llevara a cabo por medio de un puente H L298 el cual sigue el esquema mostrado en la Figura 4, este puente H sirve para dos motores porque es este caso solo se usa la mitad, así el motor se energiza por los pines 2 y 3 que son los encargados de la salida, la señales lógicas que indicaran si es reversa o adelante serán dadas por los pines input 1 y 2, las cuales deben ser señales contrarias y el control de activación, desactivación y en el caso de regulación del motor de Pwm se dará por el pin 6 Enable A.
Figura 3. Caja Reductora.
Figura4. Puente H Para el control de la dirección se usara un servomotor acoplado a un mecanismo Ackerman (Figura 5), la cual consiste en cuatro ruedas, dos destinadas a la tracción (usualmente trasera) y las otras dos controlan la dirección de la plataforma móvil, Figura 5, el radio de giro esta dado por el largo, al ancho
y al ángulo que forman las llantas delanteras con el centro del eje trasero, el servomotor acoplado es un microservo (Figura 5) el cual posee un torque de 2.1 kg x cm lo cual es más que suficiente para mover la dirección de este robot, el servo tiene tres pines dos de alimentación 0 y 5V y uno de control que va directamente acoplado al microcontrolador arduino.
Figura 5. Esquematización de la configuración tipo Ackerman. La etapa de alimentación está dada por un regulador de tensión 7805 el cual toma la tensión de dos baterías de 2800mAh que dan una tensión a full carga de 8.3V y la regula a un 5V constante necesario para el microcontrolador, los sensores y los actuadores, al alimentar todo en el carro este regulador sufre de calentamiento por lo que lleva un disipador de potencia que permite su funcionamiento ideal. Para la realización de la aplicación anteriormente mencionada, se utilizaron dos equipos de procesamiento de información, por una parte se encuentra un computador personal y por otra el micro controlador. El primero cuenta con sistema operativo Windows 8 de 64bits, un procesador Intel Core I5-3210M a 2.5GHz, y 8Gb de memoria RAM, el en cual se encuentra instalado el programa MATLAB R2013b, con el cual se realizaron las programaciones y simulaciones pertinentes. El micro controlador es un Arduino Mega 2560 (ver figura 6) que es una plataforma de hardware libre diseñada para facilitar el uso de la electrónica en proyectos de distintas disciplinas. La tarjeta usada cuenta con un micro controlador atmel de referencia ATmega2560 el cual cuenta con 54
entradas/salidas digitales (15 usadas como PWM), 16 entradas analógicas que también se comportan como entradas/salidas, conexión USB, conector de alimentación y un botón reset; vale la pena aclarar que cada pin puede proporcionar o recibir una intensidad máxima de 40 mA, también que los pines PWM tienen 8 bits de resolución (valores de entre 0 a 225); Cuenta con una memoria flash de 256 KB una SRAM de 8KB, memoria EEPROM de 4KB y una velocidad de reloj de 16MHz.
Figura 6. Arduino mega 2560 Esta configuración evita el montaje en baquelita al micro controlador, da una gran ventaja al hecho de programar y en este orden de ideas se pueden hacer pruebas con mayor facilidad. El Arduino se puede alimentar de dos maneras: por medio de la conexión USB, contando con la posibilidad de lectura de datos en el PC que facilita en nuestro caso las pruebas de escritorio de la programación de los sensores y la otra forma de alimentar es con una fuente de alimentación externa de entre 6 a 20 Vdc aunque lo recomendado por el fabricante es entre 7 y 12 V.
2.2 Métodos 2.2.1 Lógica difusa Como estrategia de inteligencia artificial se probó hacer por medio de la lógica difusa, para posteriormente entrenar una red neuronal y así tecnificar mucho más el control, para la primera fase debemos tener en cuenta que la lógica difusa se centra en parámetros vagos (Encarnación, 2014), con este término el autor citado describe que mediante un adjetivo se puede determinar un grupo de estudio
o caracterizar una situación, da el ejemplo de la determinación de un numero ‘pequeño’ respecto a otro que es ‘muy pequeño’, así pues parametrizando cada conjunto con una determinación verbal se pueden hacer interacciones entre dichos conjuntos, dando condiciones específicas o difusas como es el caso para un grupo de datos, para nuestro caso que son vagos como conjunto pero que se vuelven específicos por medio de la matemática detrás de la lógica difusa. Así pues los componentes necesarios para hacer el control difuso son los mostrados en la figura 7, la cual presenta (Encarnación, 2014), donde entra una señal que para nuestro caso son las tres mediciones hechas por los sensores ultrasónicos, y dos salidas, que van a los actuadores, un motor de tracción y uno de dirección debido a la configuración Ackerman utilizada y descrita anteriormente.
Figura 7. Diagrama de la Lógica Difusa Así que para alimentar cada parámetro del esquema se presentará el procedimiento implementado mediante Matlab, por medio de su bloque en Simulink para el trabajo de lógica difusa (Fuzzy Logic), se tomará como procedimiento tipo, el realizado por (Tibaduiza et al., 2011) que utilizó un controlador difuso para controlar directamente un robot manipulador, donde se toman los componentes del diagrama (fuzzyficador, reglas difusas y desfuzzyficador) y se desarrolla cada parámetro individualmente.
Fuzzyficador Para la aplicación se tendrán tres entradas (sensor derecho, izquierdo y frente) y dos salidas (tracción y dirección) las cuales se pueden ver en la figura 8 como parámetros FIS en el entorno de Matlab.
Figura 8. Variables FIS sensor derecha e izquierda Las funciones de membrecía para la entrada sensor derecho y sensor izquierdo son: Muy cerca [0 0 4 8], cerca [2 7 12], centrado [6 11 16], alejado [10 15 20] y muy lejos [15 25 60 60], los intervalos presentados seguidamente de la función corresponde a las distancias que en teoría deberían captar los sensores cuando el robot móvil se encuentre en el laberinto. Las entradas de la izquierda y de la derecha son idénticas, debido a que la posición de dichos sensores son simétricas respecto a la plataforma móvil, en cambio para el sensor del frente que se muestra en la figura 9, se tomaron las siguientes consideraciones: muy cerca [0 0 10 15], Cerca [10 15 20], Centrado [15 20 25], entrado cuadro [19.87 24.87 29.87], no lejos [25 30 35], lejos[30 37.5 45], muy lejos [37.5 50 120 120].
Figura 9. Variables FIS sensor frente. En cuanto a las salidas del sistema, se tomó una variable que va de -1 a 1, siendo el positivo la dirección frente y derecha, respectivamente dirección y tracción, y como negativo atrás e izquierda.
Los parámetros para el motor de dirección (ver figura 10) son los siguientes: todo izquierda [-1 -1 -0.75 -0.25], izquierda [-0.8 -0.4 0], centrado [-0.25 0 -0.25], derecha [0 0.2 0.4], todo derecha [0.25 0.75 1 1].
Figura 10. Variable FIS para motor de dirección.
En la simulación se toma como actuadores motores Dc y el modelo cinemático directo de dichos motores, pero a la hora de la implementación se debe tener en cuenta las condiciones de las librerías de arduino en Matlab las cuales cambian los parámetros de entrada a solo positivos en el caso de un servo motor para dirección como es el caso de la implementación realizada. Los parámetros para el sensor de tracción (ver figura 11), son los siguientes: todo atrás [-1 -1 -0.75 0.25], trascorva [-0.8 -0.4 0], centrado [-0.25 0 -0.25], adelante curva [0 0.2 0.4], todo adelante [0.25 0.75 1 1].
Figura 11. Variable FIS para motor de tracción
Reglas difusas Teniendo las entradas y salidas el paso a seguir son las reglas que se procesaran internamente para lograr un comportamiento óptimo para los actuadores, así que se plantearon 30 reglas las cuales contemplan casi todas las posibilidades de entradas, suponiendo que el robot se encuentre dentro del laberinto, el comportamiento está planteado de la siguiente forma: Cada vez que el robot esté demasiado cerca de una lado, este evadirá la pared con la mayor velocidad posible dependiendo de qué tan cerca este de la pared, si hay un choque inminente se moverá con la función todo adelante o todo atrás, pero si se encuentra tan solo cerca el robot se moverá con menos velocidad es decir con los conjuntos adelante curva y atrás curva, según la medición del sensor frontal se toma la decisión si hacia adelante o hacia atrás, ver figura 12 a este caso pertenecen las reglas 1 a 8 (cuando se tiene espacio adelante) y 9 a 16 (cuando no hay espacio adelante); cuando el robot este centrado (sensor derecha e izquierda en dicho conjunto) y se tenga espacio hacia al frente, este se moverá hacia adelante a toda velocidad, este es el caso de las reglas 17 a 19, pero si por el contrario no se tiene espacio adelante, el robot debe ir en reversa, reglas 20 a 22; en cuanto a las curvas el robot se moverá hacia la medición las larga es decir, cuando el sensor de la derecha este lejos y el sensor izquierda este muy lejos, el robot girará hacia la izquierda, o si la situación es contraria debería girar a la derecha, este es el caso de las reglas 23 a 30.
Figura 12. Reglas del controlador.
Desfuzzyficador: Para cada regla existe una proporción de salida, dependiendo de la jerarquía que el dato tomado tome en el conjunto de salida como se menciona en el trabajo de Pérez et al., 2013, donde se desarrolla un algoritmo de detección de las marcas de las líneas en un campo de juego de la competición Robocup, considerando la proporción de la función de membrecía de la señal de salida para cada caso. En la aplicación se realizaron varias simulaciones teniendo como parámetro de entrada medidas tomadas por el robot siendo desplazado manualmente dentro del laberinto a desarrollar, pero existieron varios problemas a la hora de integrar esta información en tiempo real y además en el momento del procesamiento, temas que serán ahondados más adelante, el bloque de lógica difusa hace todo el procesamiento matemático sin que el usuario se percate de ello, por eso para el caso particular solo se trataba de hacer buen uso de las reglas para proporcionar las salidas deseadas, en la figura 13 se aprecia el intento de solución del problema propuesto mediante la simulación del robot dentro del laberinto, pero los comportamientos de simulación y realidad no fueron los mejores, debido a problemas de comunicación y tiempos de trabajo en el entorno real respecto al entorno simulado.
Figura 13. Simulación del problema a resolver.
2.3 Integración Para poder ver el comportamiento del carro en tiempo real en el computador, se hace uso del programa Matlab en su apartado Simulink, el cual posee una librería especial para arduino (Matlab 2014), la cual debe ser descargada directamente de la página oficial de Matlab, esta librería posee diferentes bloques, que corresponden a los pines del micro controlador es decir posee bloques de pines digitales y análogos de lectura y escritura, es por ello que el tratamiento que se le haga a ese bloque con las herramientas que posee Simulink, es como si se le realizará al pin directamente, además de los bloques de pines, esta librería posee un bloque especial dedicado al control del servomotor.
Así para poder llevar a cabo el control y la visualización del carro en tiempo real en el computador el archivo creado en Simulink posee 3 fases, cabe aclarar que para poder realizar y utilizar este programa se debe hacer uso del micro controlador Arduino mega o dúo ya que son los únicos que poseen el modo de simulación en modo externo, es decir en tiempo real, característica que no posee por ejemplo el Arduino uno, la primera fase es la referente a los sensores y es la forma en la que se capturan los datos y se pueden visualizar en tiempo real en Simulink, la segunda fase es la de correspondiente a el método de inteligencia virtual usado, en este caso se usará el método de lógica difusa, esto corresponderá a un bloque que es el que lleva a cabo este procesamiento, y la última fase es la de los actuadores en la cual el bloque de inteligencia artificial maneja ya el comportamiento del robot.
Figura 14. Bloques Simulink for Arduino y compilador del bloque s-function builder.
La primera fase es la referente a la captación de los sensores en el programa, para llevar esto a cabo se hace uso de un bloque que ofrece Simulink llamado S-function builder (Matlab 2014), el cual permite el manejo de señales mediante código escrito, además tiene la ventaja de manejar librerías arduino, en el cuadro de dialogo mostrado (Figura 14), se introduce el código tal cual se maneja, se definen las entradas y las salidas del bloque y con ayuda de un compilador llamado SDK for Windows se compila el programa (Figura 15), en la figura 15 se puede ver el uso del programa en una aplicación de un sonar (Simulink Arduino 2013).
Figura 15. Grafica Sonar y Programa en el s-function builder. La segunda fase correspondiente a lógica difusa se ha tratado previamente así que solo es cuestión de conectar al bloque que nos facilita la librería Fuzzy, las entradas de los sensores y la salida a los actuadores. Para el control del servomotor, se usa el bloque servo motor y en la entrada a este se pone el valor en ángulo que se le desee dar al servomotor, para el control del moto Dc solo se llaman 3 bloques de escritura PWM, en los de dirección se aplican la señal de alto y bajo según corresponda y en el Enable se conecta un bloque digital en el cual asigno un valor de 0 a 255 en donde 255 es la velocidad nominal del motor y 0 es el motor parado, se puede aplicar señales de rampa, de escalón, lo que se desee que este entre estos valores y el pin automáticamente creara la señal de Pwm que corresponda.
Como las salidas del bloque Fuzzy están dadas de -1 a 1, tanto para dirección como para tracción, es necesario crear una etapa de conversión de estas salidas para que sean acordes a las entradas que deben recibir los motores, en el caso de tracción el intervalo (0,-1), describe un comportamiento en reversa y (0,1) para adelante ya el valor entre 0 y 1 es un porcentaje de la velocidad total del motor, lo que se realiza para el Enable, es en primer lugar usar un valor absoluto para evitar valores negativos y le damos una ganancia de 0 a 255, para los valores lógicos de las entradas, se toma una entrada a 0 y otra a 1 y por medio de switches si la señal es menor a 1 los activamos de una manera y si es mayor de otra manera, este manejo lo vemos en la figura 6g.
Figura 16. Programa en Simulink para integración final. Para el control del servo se parte del hecho de que la dirección está alineada en 60°, por ello cuando la salida del bloque Fuzzy sea 0 la entrada en el servo es de 60°, cuando aumenta a 1 ese incremento se le da una ganancia de 60 y se le suman los 60° base, cuando disminuye a -1 se le da una ganancia de -60 y se le suma los 60° base y luego esas señales entran en el Bloque Servo de arduino.
3. Resultados y Discusión. 3.1 Lógica Difusa En cuanto a la lógica difusa, el proceso de programación y elaboración ya fue descrita anteriormente, aunque se tomaron varias precauciones, a la hora de la implementación existieron varios problemas, ya
que el control difuso como tal, no pudo ser incluido en el micro controlador, tal vez no se pueda hacerlo, o se realizó el procedimiento de forma inadecuada, cuando se trasladaba el programa que tenía el bloque ‘Fuzzy Logic’ al arduino, las salidas esperadas respecto a tensión no se cumplían, teniendo una salida casi permanente de un voltio, lo que imposibilitaba el control difuso, se realizó todo un tratamiento a las salidas, con las librerías ya descritas, pero las pruebas fueron insuficientes para llegar a una real integración, además los tiempos de lectura y procesamiento, respecto a la prueba hecha desplazando la plataforma manualmente, discordaban, por ello la simulación tampoco se comportó como lo esperado. En fin la integración del entorno de Matlab al entorno real presentó varios problemas de fondo, aunque investigando en la red se encuentran varias soluciones ingeniosas, por ello la solución real del problema aunque algo distante es posible.
3.2 Redes neuronales Una red neuronal es un sistema de procesadores paralelos conectados entre sí en forma de grafo dirigido (Freeman, 1993), cada neurona que en este orden de ideas es la encargada de procesar se encuentra en un nodo diferente organizando la información de entrada de forma jerárquica con el fin de poder tomar una decisión ante muchas variables de la vida real y poder desarrollar un problema. La capacidad de aprendizaje, dicho orden jerárquico y la posibilidad de captar mucha información hacen de las redes neuronales, una de las estrategias de inteligencia artificial que desarrollan problemas de más alta complejidad y por ello han sido usados en muchas ramas de la ingeniería, la medicina, la economía entre otras. Todo esto fue basado en uno de los más grandes inventos de Dios, el cerebro humano que cuenta con alrededor de diez mil millones de neuronas interconectadas (Guzmán, 2001). Las redes neuronales aprenden de la experiencia, generalizan de los ejemplos previos a ejemplos nuevos y abstraen las características principales de una serie de datos.
Esta estrategia es usada para el robot que se ha diseñado previamente, para lo cual se tomaron datos de distancias de los sensores ultrasónicos al desarrollar el laberinto con una integración entre Matlab y Arduino. Esta integración hacia que Arduino censara las distancias y Matlab usaba el puerto com que estaba utilizando Arduino con el fin de captar la información( Garcia Tiscar 2011), generar una grafica en tiempo real y al final de la toma de datos generaba una tabla de Excel. La grafica generada por Matlab se muestra en la figura 17; esta toma de datos se realizo tres veces con el fin de hallar exactitud.
Figura 17. Grafico de la toma de distancias por medio de los sensores ultrasónicos al desarrollar el laberinto de forma manual. Morado (izquierdo), azul claro (frontal) y azul oscuro (derecho) El paso a seguir fue el procesamiento de los datos tomados anteriormente, con el fin de integrarlo con redes neuronales. Se desarrollo una tabla ( mostrada en la figura 18) que daba las salidas según la relación de los sensores y los actuadores que para el caso son un motor Dc y un servomotor; para el motor Dc se utilizaría una salida con Pwm( modulador de ancho de pulso) por lo cual no iba a ser un valor de tensión sino proporción respecto de dicho Pwm que era de 255, y al ser 8 voltios la tensión máxima cada valor era multiplicado por la relación (255/8), para el otro actuador que era el servo, la salida sería en grados. De esta manera y a modo de ejemplo si el sensor derecho y el sensor izquierdo
están en 12 y el sensor frontal es 28 la salida del servo es 90 y la del motor Dc es de 8 (255) lo que indica que el robot va hacia adelante sin girar en ninguna dirección mientras que se el valor del sensor de la derecha es mayor que el del sensor de la izquierda quiere decir que el robot está pegado a una pared izquierda con por lo cual se debe dar un valor de grados entre 0 y 90 para que el robot ande por la mitad de la pista, y así se lleno la tabla para un total de 576 posibilidades.
Figura 18. Tabla de datos tomada por los sensores. Luego estos valores de Excel se incluyeron a Matlab como variables, con la función import data y como matriz; los de los tres sensores en uno solo pues son las entradas y los valores del servo y el Dc como variables diferentes. Esto se muestra en la figura 19 y en la figura 20 donde ya están las variables en el workspace de Matlab. Lo que queda es con estas variables entrenar la red neuronal que se hace desde Matlab con su función nnstart fitting Tool next inputs= sensores targets= Dc o servo (primero uno y luego el otro)
selección de matriz rows (que indica una relación entre filas) next
(para obtener la mayor exactitud) (entrenar)
next
next next obtener
validation
numero de neuronas internas = 10
el diagrama en simulink.
y testing = 5%
next
train
Figura 19. Forma como se importan los datos como variables a Matlab
Figura 20. Variables en el workspace importadas desde Excel El proceso anterior es el que desarrolla el entrenamiento de la red neuronal, que nos dará dos bloques de simulink los dos con la entrada de los sensores, (para lo cual es necesario colocar un muy por que en bloque solo nos da una salida), uno con la salida del motor Dc y otro con la salida del servo. El archivo de simulink desarrollado para la simulación virtual en el laberinto en 2d y en 3d se presenta en la figura 21.
Figura 21. Desarrollo final para el robot con redes neuronales en 2d y 3d.
Comportamiento en el laberinto con redes neuronales El comportamiento del robot en el laberinto con redes neuronales no fue muy óptimo, pues no desarrollo el laberinto; se piensa que fue por el procesamiento y la cantidad de posibilidades que se tuvieron en cuenta que hicieron que tomara un comportamiento aparentemente aleatorio que en 2d se muestra en la figura 22. Para próximos estudios se pueden hacer modificaciones en el conjunto de posibilidades con el fin de un óptimo desempeño del robot.
Figura 22. Comportamiento del robot en el laberinto con redes neuronales.
Conclusiones
El manejo de microcontroladores arduino por medio de Matlab se puede dar de dos maneras, en modo externo o en modo normal, el primero es en tiempo real y permite una mayor interacción con lo que sucede en el programa, el segundo solo carga el programa una vez y el microcontrolador lo repite de manera cíclica, para aplicaciones como la hecha en donde se desea ver y analizar las diferencias entre un comportamiento real y uno virtual, es necesario usar aquellos que permiten trabajar en modo externo, haciendo uso de esto podemos ver que una aplicación virtual dista mucho de una real, ya que son muchas las variables que el modelamiento de un sistema desprecia y que a la hora de la practica hacen falta, un modelo virtual que se comporte como uno real en este tipo de aplicaciones es muy complicado, son distancias, velocidades, dimensiones que deben concordar, por ejemplo es muy difícil que el modelo de un motor pueda llegar a actuar como uno real cuando se ignoran las corrientes de recirculación, la inercia del motor al parar, el comportamiento del mismo ante el peso del carro, todo esto lo ignoramos , para hacer una integración del modelo virtual que sea más cercano al real debemos hacer uso de otros elementos que me permitan tener mayor información de lo que acontece en cada momento , los que más llaman la atención son los acelerómetros y los giroscopios los cuales permitirían tener una ubicación real del robot y permitir así la corrección en el modelamiento.
Para la solución del problema, se utilizaron variadas estrategias de control, comenzando por una programación de la trayectoria por medio de prueba y error, calculando tiempos de comportamiento del robot en el laberinto, posteriormente se implementaron sensores ultrasónicos para que la programación consistiera en evaluar varios estados de los mismo y respecto a su posición en el laberinto tomase una decisión, así se introdujo el concepto de inteligencia artificial, por medio de estrategias como lo son la lógica difusa y las redes
neuronales, para ello la memoria del micro controlador no era suficiente para el procesamiento de los datos, y por ello se acudió a un computador por medio del programa Matlab que en Simulink puede hacer este procesamiento eficientemente usando la llamada máquina virtual, en la inteligencia artificial, se debían programar las condiciones iníciales y de comportamiento del robot, para ir tecnificando cada vez más la estrategia de control, intentando llegar a una solución lo más eficientemente posible.
6. Referencias bibliográficas Encarnación, Y 2014, ‘LA LOGICA DIFUSA APLICADA AL SECTOR MANUFACTURERO. Ciencia y sociedad, 39, 1, pp. 793-814, Fuente Académica Premier, EBSCOhost.
Perez-Hernandez, A, Gómez-García, A, Rojas-Martínez, E, Rodríguez-Rojas, C, López-Jiménez, J, & Calderón-Chávez, J 2013, 'Edge Detection Algorithm Based on Fuzzy Logic Theory for a Local Vision System of Robocup Humanoid League', Revista Tecno Lógicas, 30, pp. 33-50, Fuente Académica Premier, EBSCOhost.
Tibaduiza, D, Amaya, I, Rodríguez, S, Mejía, N, & Flórez, M 2011, 'Implementación de un control Fuzzy para el control cinemático directo en un robot manipulador. INGENIARE - Revista Chilena De Ingeniería, 19, 3, pp. 312-322, Fuente Académica Premier, EBSCOhost.
Freeman, J.A.; Skapura, DM. Redes Neuronales. Algoritmos, aplicaciones y técnicas de Propagación. México: Addison-Wesley. 1993; 306 p.
Eckel, Tim (2013).New Ping Library for Arduino. Extraído el 27 de Junio de 2014 ,de http://playground.arduino.cc/Code/NewPing
MatLab
(2014)
S-Funtion
Builder
Dialog
Box.
Extraido
el
24
de
Junio
http://www.mathworks.com/help/simulink/sfg/s-function-builder-dialog-box.html
de
2014
de
Garcia Tiscar, Jorge (2011) Arduino + Matlab: adquisición de datos. Extraido el 10 de Junio de 2014 de http://wechoosethemoon.es/2011/07/15/arduino-matlab-adquisicion-de-datos/
Simulik Arduino, Youtube (2013), Arduino Sonar. Extraido el 24 de Junio de 2014 de https://www.youtube.com/watch?v=ChXBD3u7vNQ
Freeman, J.A.; Skapura, DM. Redes Neuronales. Algoritmos, aplicaciones y técnicas de propagación. México: Addison-Wesley. 1993; 306 p.
Debouch, Guido J. Pattern (2000) recognition and prediction with self-organizing maps and ork / AIabtext.html supporting software review: visualization through viscovery Extraido el 26 de Junio de 2014 de http://www.gordiand-knot.com, Gordian Institute Electronic NewsLetter.