Robot móvil de tracción de orugas con navegación por estima basado en Arduino

Tras haber probado el algoritmo de navegación por estima en nuestro robot de dos ruedas, llega el turno de su implementación en el vehículo de tracción de orugas, cuyos codificadores rotatorios son mucho más precisos. En este artículo indicaremos los pasos a seguir para que nuestro robot alcance un determinado punto de destino gracias al citado algoritmo.

Asimismo, podremos hacer uso del módulo bluetooth instalado en el vehículo para poder conocer desde el puesto de control -ya sea un terminal en un PC con bluetooth o un teléfono móvil- el recorrido llevado a cabo por nuestro robot.

Navegación por estima

Como ya sabemos, la navegación por estima o dead reckoning permite conocer la posición propia de un vehículo a partir de sus propios sensores, sin necesidad de asistencia externa (como podría ser un GPS).

Para el caso de nuestro robot, vamos a utilizar como base de los cálculos las medidas obtenidas a partir de los codificadores rotatorios incorporados en los motores del robot. Conociendo sus características podremos establecer los parámetros necesarios para poder determinar la posición propia.

Como conocemos la resolución del codificador (333,3 lecturas por vuelta), el diámetro de la rueda (62 milímetros) y la distancia de ejes (194 milímetros), podremos determinar el avance detectable mínimo por rueda, correspondiendo éste a 1 milímetro.

Identificación y distribución de elementos en el robot

Para llevar a cabo nuestro montaje, necesitaremos los siguientes componentes:

  • Plataforma Dagu Rover 5 de dos motores CC
  • Dos tableros o placas de aproximadamente 23 cm x 16 cm
  • Espaciadores
  • Arduino Mega 2560 R3
  • Puente en H basado en TB6612FNG
  • GY-521 (basado en MPU-6050)
  • Módulo bluetooth HC-06
  • Adaptador de niveles lógicos
  • SN74HC86
  • 4 resistencias de 100KΩ
  • Display LED de 8 dígitos basado en MAX7219
  • Sensor de obstáculos por infrarrojos de 4 canales
  • Convertidor DC-DC a 5 voltios
  • Protoboard de 400 contactos
  • Cables de conexión
  • Soporte de baterías
  • 2 baterías tipo 18650 de 3,7v
  • Voltímetro LED
  • Interruptor

Como podemos ver, la única adición destacable respecto a la versión anterior es el circuito integrado SN74HC86.

Distribución inferior

En el tablero inferior distribuiremos los elementos principales de nuestro desarrollo según se indica en la siguiente figura. Podemos distinguir el Arduino Mega, una protoboard con varios componentes, una unidad de acelerómetros y giroscopios, un módulo de control de los sensores de detección de obstáculos por IR y las baterías.

La protoboard montará el nuevo circuito de control de puente en H basado en TB6612FNG, un integrado 74HC86 con cuatro puertas XOR, un adaptador de niveles lógicos y un DC-DC de 5 voltios de salida. Con este último circuito aliviaremos de trabajo al regulador interno del Arduino, de modo que ahora la conversión de los 7,4 voltios de las baterías a los 5 voltios de trabajo de los distintos módulos se realice a través del DC-DC.

La unidad de acelerómetros y giroscopios de 6 ejes GY-521 será instalada en el centro geométrico del tablero inferior, de modo que no sea necesario realizar ajustes software para compensar offsets de posición. La tarea principal de este dispositivo será la detección de pendientes para evitar así vuelcos inesperados.

Los sensores de detección de obstáculos por infrarrojos estarán distribuidos en cada esquina del vehículo, de modo que nos permitan detectar cualquier obstrucción en el camino de nuestro vehículo a tiempo de evitar colisiones.

Distribución superior

En el tablero superior encontraremos, como indica la figura, un voltímetro LED, un display de 8 dígitos, un interruptor y un módulo bluetooth.

El voltímetro nos indicará en cada momento la carga de la batería, mientras que el display LED nos permitirá conocer el estado del vehículo en cada instante.

En cuanto al módulo bluetooth, usaremos el mismo modelo HC-06 que montamos en un anterior artículo.

Montaje del circuito

Realizaremos el montaje mostrado en la figura basado en los componentes enumerados en la sección anterior.

Como se puede comprobar en la figura, las baterías alimentan directamente con sus 7,4 voltios al Arduino, a la etapa de potencia del puente en H (pin «VM») y a la entrada del DC-DC. Este último, a su vez, distribuye 5 voltios al resto de los dispositivos del sistema.

Puente en H

Los motores irán conectados directamente al circuito de control del motor en las tomas reservadas para cada motor, señaladas como «AO1» y «AO2» para el primer motor y «BO1» y «BO2» para el segundo. Nótese que el sentido de giro por defecto para cada motor dependerá de que se respeten las polaridades señaladas en el gráfico.

Por su parte, las conexiones «PWMA» y «PWMB» permitirán el control de la velocidad de cada motor mediante una señal PWM generada por nuestro Arduino desde los pines 4 y 5 respectivamente.

El sentido de giro de los motores se determinará respectivamente por las combinaciones de los pines «AIN1», «AIN2», «BIN1» y «BIN2», que irán conectados a los pines 22, 23, 24 y 25. La habilitación del control de los motores se llevará a cabo desde la conexión «/STBY» con el pin 26 de Arduino.

Puertas XOR

Con las puertas XOR podremos indicar a Arduino las lecturas de los codificadores rotatorios solidarios a los motores del vehículo. Cada codificador provee de 2 salidas en cuadratura que leeremos en nuestro Arduino a partir de una puerta XOR. Éstas generarán las interrupciones necesarias para que nuestro software pueda contabilizar el avance de cada oruga. Con tal motivo se hará uso de los pines 18 y 19, respectivamente, que permiten el manejo de interrupciones.

Display de 8 dígitos

El display de 8 dígitos se basa en el protocolo SPI, por lo que haremos uso de las conexiones «MOSI» (pin 51) y «SCK» (pin 52) de Arduino Mega, que irán, respectivamente, a los pines «DIN» y «CLK» del controlador del display. La conexión «Select» se asignará al pin 41 de Arduino, correspondiendo al pin «LOAD» del display. No se hará uso del pin «MISO».

Bluetooth

El módulo bluetooth se conectará, a través del adaptador de niveles, al segundo puerto serie disponible en Arduino Mega, correspondiente a los pines 14 y 15, transmisión y recepción respectivamente del cuarto puerto serie integrado en nuestro Arduino Mega. Nótese que la transmisión del bluetooth conectará con la recepción del Arduino y viceversa.

Conjunto de acelerómetros y giroscopios de 6 ejes

El módulo GY-521 hará uso de los pines destinados al protocolo I2C, «SDA» y «SCL», disponible en los pines de Arduino Mega 20 y 21 respectivamente. Además, este dispositivo generará interrupciones que serán detectadas por Arduino a través de su pin 2.

Detector de obstáculos por IR

El módulo de detección de obstáculos por infrarrojos derivará 4 señales -una por sensor- a Arduino a través de los pines 30, 31, 32 y 33.

Programación de Arduino

Tomaremos como base la versión anterior, también controlada por bluetooth, con la salvedad de que, en este caso, no nos llegarán órdenes de movimiento sino coordenadas relativas a la posición inicial del robot. Este se desplazará hasta la posición indicada haciendo uso de navegación por estima, a partir de la librería DeadReckoning.

Durante el desplazamiento, se realizarán lecturas de los sensores de colisión basados en IR y los giroscopios de modo que el robot se detendría inmediatamente ante cualquier obstáculo o pendiente importante.

Para el control de los motores se hace uso de la librería PuenteH que fue descrita en otro artículo.

Realización de las pruebas y resultados

Una vez realizado el montaje anterior -e introducido el código en nuestro Arduino- se comprueba cómo el robot se desplaza con bastante aproximación hacia el punto indicado.

Deja un comentario