DESARROLLO DE UN ROBOT PARA LA COMPETENCIA...

7
202 DESARROLLO DE UN ROBOT PARA LA COMPETENCIA RESUELVE LABERINTO DEL 5TO. ENCUENTRO ESTATAL DE PROTOTIPOS DE ROBÓTICA Y DESARROLLO TECNOLÓGICO, MICHOACÁN 2015 Roberto Rangel Heras 80 , Leonardo Romero Muñoz 81 y Moisés García Villanueva 82 Resumen Se describe la construcción de un robot móvil que participará en la competencia de “Robots resuelve laberintos” del “5to. Encuentro estatal de prototipos de robótica y desarrollo tecnológico, Michoacán 2015”. Se trata de un robot de locomoción diferencial que utiliza dos motores de CD con reducción de 75:1, con encoders acoplados a las flechas de los motores, una rueda loca trasera y una batería LIPO de 7.4 volts, 2200 mAH. Cuenta además con 3 sensores infrarrojos de distancia en el rango 4-30cm, para detectar las paredes; un arreglo de sensores reflexivos al frente del robot, dirigidos al piso, para detectar la salida del laberinto; y un microcontrolador arduino due. El microcontrolador tiene la rapidez y memoria suficiente para procesar las entradas de los encoders, de los sensores de distancia y de los sensores reflexivos, así como los comandos de movimiento a los motores, para llevar a cabo la tarea de encontrar la salida del laberinto. Se describen tanto los elementos de hardware, como los algoritmos y estrategias de control utilizadas. Se espera que este robot tenga un buen desempeño en la competencia de robots resuelve laberinto en este año. Palabras Clave: Robot móvil, robot resuelve laberintos, encuentro robótica Michoacán 2015. Introducción Desde hace 4 años se llevan a cabo competencias estatales de robótica en Michoacán y una de ellas se llama “Robots resuelve laberintos”. La figura 1 muestra un ejemplo del escenario de dicha competencia. La competencia consiste en colocar un pequeño robot móvil dentro del laberinto. El robot deberá moverse, evitando colisionar con las paredes y encontrar la salida del laberinto lo más rápido posible. Gana el robot que escapa del laberinto en el tiempo más corto. 80 Facultad de Ingeniería Eléctrica, Universidad Michoacana de San Nicolás de Hidalgo; [email protected] 81 Facultad de Ingeniería Eléctrica, Universidad Michoacana de San Nicolás de Hidalgo; [email protected] 82 Facultad de Ingeniería Eléctrica, Universidad Michoacana de San Nicolás de Hidalgo; [email protected]

Transcript of DESARROLLO DE UN ROBOT PARA LA COMPETENCIA...

202

DESARROLLO DE UN ROBOT PARA LA COMPETENCIA RESUELVE LABERINTO DEL 5TO. ENCUENTRO ESTATAL DE PROTOTIPOS DE

ROBÓTICA Y DESARROLLO TECNOLÓGICO, MICHOACÁN 2015

Roberto Rangel Heras80, Leonardo Romero Muñoz81 y Moisés García Villanueva82

Resumen Se describe la construcción de un robot móvil que participará en la competencia de “Robots resuelve laberintos” del “5to. Encuentro estatal de prototipos de robótica y desarrollo tecnológico, Michoacán 2015”. Se trata de un robot de locomoción diferencial que utiliza dos motores de CD con reducción de 75:1, con encoders acoplados a las flechas de los motores, una rueda loca trasera y una batería LIPO de 7.4 volts, 2200 mAH. Cuenta además con 3 sensores infrarrojos de distancia en el rango 4-30cm, para detectar las paredes; un arreglo de sensores reflexivos al frente del robot, dirigidos al piso, para detectar la salida del laberinto; y un microcontrolador arduino due. El microcontrolador tiene la rapidez y memoria suficiente para procesar las entradas de los encoders, de los sensores de distancia y de los sensores reflexivos, así como los comandos de movimiento a los motores, para llevar a cabo la tarea de encontrar la salida del laberinto. Se describen tanto los elementos de hardware, como los algoritmos y estrategias de control utilizadas. Se espera que este robot tenga un buen desempeño en la competencia de robots resuelve laberinto en este año. Palabras Clave: Robot móvil, robot resuelve laberintos, encuentro robótica Michoacán 2015.

Introducción Desde hace 4 años se llevan a cabo competencias estatales de robótica en Michoacán y una de ellas se llama “Robots resuelve laberintos”. La figura 1 muestra un ejemplo del escenario de dicha competencia. La competencia consiste en colocar un pequeño robot móvil dentro del laberinto. El robot deberá moverse, evitando colisionar con las paredes y encontrar la salida del laberinto lo más rápido posible. Gana el robot que escapa del laberinto en el tiempo más corto.

80Facultad de Ingeniería Eléctrica, Universidad Michoacana de San Nicolás de Hidalgo; [email protected] 81Facultad de Ingeniería Eléctrica, Universidad Michoacana de San Nicolás de Hidalgo; [email protected] 82Facultad de Ingeniería Eléctrica, Universidad Michoacana de San Nicolás de Hidalgo; [email protected]

203

Figura 1. Ejemplo de un robot en un laberinto.

A diferencia de las competencias anteriores, en las competencias estatales de este año, a celebrarse en Pátzcuaro Mich., el 4 de septiembre de 2015, se permiten dos oportunidades para encontrar la salida del laberinto, tomando en cuenta solamente el menor de los dos tiempos. Un robot podría tomar decisiones diferentes en cada oportunidad (en aquellas situaciones donde exista más de una alternativa, como seguir adelante o dar vuelta), con la expectativa de encontrar más rápido la salida. Otra alternativa se explora en este artículo: el robot intenta construir un mapa del ambiente en la primera oportunidad y en la segunda oportunidad dirigirse directamente a la salida más cercana, aprovechando el mapa construido. Para lograr este propósito, es necesario que el robot disponga de algún sensor que le permita conocer su ubicación a medida que se desplaza en el laberinto. Al robot que simplemente responde a los estímulos que recibe, como puede ser la información de sus sensores, se le conoce como un robot reactivo. En contraste el robot que construye el mapa aborda el problema conocido como localización simultánea y mapeo (SLAM, por sus siglas en inglés). Las personas que deseen profundizar en el área de robótica móvil pueden consultar los libros [R. Siegwart et al, 2011] y [G. Dudek y M. Jenkin, 2011] para conocer más sobre el área, en particular sobre los tipos de mapas, los métodos para resolver el problema del SLAM y algoritmos de planeación de movimientos. Este artículo se organiza como sigue. En la sección 2 se describe los componentes de hardware del robot construido para la competencia de este año, así como los criterios de selección de los mismos. En la sección 3 se describe los aspectos más relevantes del software del robot y los algoritmos de control utilizados. En la sección 4 se analizan algunas conclusiones y se describen trabajos futuros a realizar, antes de la competencia de este año.

Componentes de hardware. En las figuras 2 y 3 se muestra el robot móvil construido, un robot de forma circular de 18 cm de diámetro, de locomoción diferencial, con dos ruedas de tracción y una rueda trasera de soporte (rueda loca).

204

a) b)

Figura 2. Vista lateral y de frente del robot construido.

a) b)

Figura 3. Vista inferior del robot. Se utilizan dos motores Micro Metal Gearmotor HP con relación de engranes 75:1, 6V, 400RPM, 120mA sin carga y torque máximo de 1.6kg-cm a 1.6A; acoplados a dos ruedas Pololu Wheel 32x7mm. De manera que la velocidad máxima del robot es vel= (400rev/min)(pi*3.22cm/rev)(1min/60s) = 67cm/s, una velocidad adecuada para recorrer el laberinto. Los motores tiene la fecha extendida que se acopla un encoder magnético, 12CPR, 2.7-18V, para medir la rotación y velocidad del motor. Considerando los 12 pasos por revolución del encoder y la reducción de 75:1, se generan 12*75=900 pulsos por cada revolución de la rueda acoplada al motor. Si consideramos la velocidad máxima de (400rev/min)(1min/60s) = 6.666 rev/s, se podrían alcanzar 6.666*900=6000 pasos del encoder por segundo por cada motor, un total máximo de 12000 pulsos por los dos motores. Si cada pulso genera una interrupción del microcontrolador, esto nos da una idea de la gran cantidad de pulsos que el microcontrolador tiene que atender. Se utiliza el driver dual TB6612FNG para controlar los dos motores en un esquema de PWM (modulación de ancho de pulso), admitiendo voltajes de entrada de 4.5V a 13.5V y corriente pico por motor de 3A (1A continuo).

205

Como sensores se utiliza un arreglo QTR-8A de sensores 8 reflexivos (ver figura 3a). Con este arreglo se detecta cuando termina el piso del laberinto, indicando la salida del mismo. Aún cuando es suficiente un sensor, se utilizó un arreglo de 8 para tener también un robot demostrativo de los algoritmos de control de un robot seguidor de línea. Para detectar las paredes del laberinto se dispone de 3 sensores analógicos infrarrojos Sharp GP2Y0A41SK0F para medir distancias de 4 a 30cm, uno dirigido al frente del robot, otro a su lado izquierdo y otro a su lado derecho, como se observan en la figura 1. Los sensores infrarrojos están cerca del centro del robot, de manera que miden justamente distancias entre 4 y 30cm. Para ello se utiliza tres pequeños popotes recubiertos con cinta negra aislante para dirigir la emisión de la luz infrarroja. El propósito es doble: no se detectan como obstáculos los elementos internos del robot y ayudan a reducir el cono de dispersión de la luz, logrando así una medición más precisa del objeto que se encuentra justo enfrente del sensor. Considerando la gran cantidad de interrupciones que se pueden generar por los encoders de los motores, se utiliza un microcontrolador arduino Due, el cual tiene como características principales un núcleo de 32-bits, una velocidad de 84Mhz, 96Kb de SRAM, 512 KB de memoria Flash para el código del programa, 12 señales analógicas de entrada y 54 señales digitales de entrada/salida. Se utilizan 11 señales analógicas de entrada para los 8 sensores reflexivos y los 3 sensores infrarrojos de distancia. Se reciben las entradas digitales A y B de los dos encoders. Por cada motor se tienen tres salidas digitales: una para la señal de control PWM y dos para definir el sentido de giro o para frenar el motor.

Software y algoritmos de control.

La primera situación a resolver es leer adecuadamente los encoders de los motores para conocer cuanto han girado y cual es su velocidad de giro. Después implementan algoritmos de control PID (Proporcional, Integral, Derivativo) que permitan al robot realizar giros y avanzar o retroceder cierta distancia en línea recta a una velocidad determinada y siguiendo un esquema de aceleración/desaceleración definido. Esto otorga al robot la capacidad básica de moverse. Otra tarea es convertir la entrada de voltaje de los sensores de distancia en lecturas de distancia, en milímetros por ejemplo, tomando en cuenta que la salida del sensor es un voltaje con un comportamiento no lineal con respecto a la distancia al obstáculo más cercano. Con dichas lecturas como entrada se tienen algoritmos de control PID para seguir una pared por la derecha o por la izquierda, mantenido constante la distancia entre el robot y la pared. Con esto, tenemos la capacidad de desplazamiento básica en el laberinto. Finalmente, aprovechando las funciones básicas de movimiento del robot, así como la lectura de los sensores de distancia y reflexivos, se puede abordar la tarea de construcción del mapa y planeación de movimientos. La idea básica es utilizar una

206

matriz de números reales, donde cada elemento del arreglo corresponde al estado de ocupación de una celda cuadrada del ambiente (típicamente de 10cm x 10cm). El valor en el arreglo denota una probabilidad de estar libre u ocupada. Al inicio todo el arreglo tiene valores de 0.5 indicando que no se conoce el estado de las celdas, excepto la celda asociada a la posición del robot que tendrá un valor de 0.0 (libre). A medida que se desplace el robot se irán cambiando los valores de 0.5 de las celdas a 0.0 (libre o 1.0 (bloqueado). Al principio el robot tiene la tarea de explorar el ambiente, dirigiendo a la celda inexplorada más cercana, -utilizando un algoritmo de búsqueda de anchura por ejemplo- y la tarea de exploración termina cuando no haya celdas con valor de 0.5 que pueda alcanzar el robot. Una vez terminado el mapa, se puede utilizar el mismo algoritmo de búsqueda en anchura para encontrar la salida del laberinto más cercana. El robot sólo tiene que seguir la ruta planeada para salir rápidamente del laberinto. Enseguida se amplia un poco más los detalles de la lectura de los encoders, por ser la primera que se tiene que abordar para estimar los movimientos del robot. Lectura de los encoders En internet existen varios sitios que explican el funcionamiento de las señales A y B de un encoder en cuadratura. Por ejemplo la página [PJRC, 2015] proporciona una demostración animada de la generación de las señales A y B a medida que el robot gira en un sentido o en otro. Un ejemplo se muestra en la figura 4.

Figura 4. Señales A y B (Pin1 y Pin2) a girar el rotor del motor [PJRC, 2015].

El siguiente fragmento de código se utiliza para detectar los cambios en las señales A y B del encoder del motor derecho en el microcontrolador arduino Due. 1 #include <DueTimer.h> // https://github.com/ivanseidel/DueTimer 2 const int ENCB_RIGHT_MOTOR = 9; // Out B encoder motor derecho (pin amarillo) 3 const int ENCA_RIGHT_MOTOR = 10; // Out A encoder motor derecho (pin verde) 4 int g_rightEncMotor = 0, g_rightVelMotor = 0; 5 long g_rightPosMotor = 0; 6 void doEncoderARight() 7 { // Si A y B son simultáneamente altas o bajas, está girando hacia adelante, 8 // si son diferentes, está girando hacia atrás. 9 if (digitalRead(ENCA_RIGHT_MOTOR) == digitalRead(ENCB_RIGHT_MOTOR))

207

10 g_rightEncMotor--; 11 else 12 g_rightEncMotor++; 13 } 14 void doEncoderBRight() 15 { if (digitalRead(ENCA_RIGHT_MOTOR) != digitalRead(ENCB_RIGHT_MOTOR)) 16 g_rightEncMotor--; 17 else 18 g_rightEncMotor++; 19 } 20 void handlerTimer() 21 { 22 static int left, right; 23 right = g_rightEncMotor; 24 g_rightEncMotor = 0; 25 g_rightVelMotor = right; 26 g_rightPosMotor += right; 27 } 28 void setup() 29 { pinMode(ENCB_RIGHT_MOTOR, INPUT); 30 pinMode(ENCA_RIGHT_MOTOR, INPUT); 31 attachInterrupt(ENCA_RIGHT_MOTOR, doEncoderARight, CHANGE); 32 attachInterrupt(ENCB_RIGHT_MOTOR, doEncoderBRight, CHANGE); 33 Timer7.attachInterrupt(handlerTimer).start(20000);//Define un timer cada 20ms 34 } //Utilizando una interrupción diferente a las empleadas por las señales PWM En las líneas 31 y 32 se asocian interrupciones a las señales A y B del encoder, ante cualquier cambio (de bajo a alto y de alto a bajo). Las rutinas de atención a interrupción doEncoderARight y doEncoderBRight son llamadas ante los cambios de las señales A y B de entrada y se incrementa o decrementa el contador g_rightEncMotor dependiendo del giro del motor. En la línea 33 se define un timer cada 20ms para llamar a la función handlerTimer que copia el valor del contador a una variable g_rightVelMotor que indica la velocidad del motor. De esta manera se implementa un estimación de la velocidad en pulsos por cada 20ms. Adicionalmente se incrementa una variable g_rightPosMotor que guarda el total de pulsos generados por el motor. Si el robot va hacia adelante, con este valor puede estimar la distancia recorrida; si está girando, con este valor puede estimar el ángulo girado.

Conclusiones y trabajos futuros. Se ha presentado brevemente las características principales de un robot que intenta construir un mapa del laberinto y en la segunda oportunidad salir rápidamente de él. En

208

estos días se estará afinando la parte de software del robot. Es muy posible que se incluya una computadora de tarjeta Raspberry PI para acelerar el desarrollo del software de alto nivel y reservar el microcontrolador arduino Due para sensar y controlar los movimientos del robot.

Referencias [G. Dudek y M. Jenkin, 2011] Gregory Dudek and Michael Jenkin. Computational

Principles of Mobile Robotics. Second edition. Cambridge University Press. 2010. [PJRC, 2015] PJRC Electronics Projects. Encoder Library. Fecha de consulta:

16/Agosto/2015. https://www.pjrc.com/teensy/td_libs_Encoder.html [R. Siegwart et al, 2011] Rolan Siegwart, Illah R. Nourbakhsh, and Davide Scaramuzza.

Introduction to Autonomous Mobile Robots. Second edition, The MIT Press, 2011.