Inicio » Aula » Robot Balancín: Kenny McCormick

Robot Balancín: Kenny McCormick

En esta entrada se mostrará el diseño y funcionamiento de un robot balancín construido con partes fabricadas mediante impresión 3D creado para la asignatura de Robótica Móvil del Grado en Ingeniería Electrónica Industrial y Automática de la UPV.

Introducción

El objetivo principal del Robot es mantenerse establemente en «pie». Mediante la información proporcionada por una IMU se generará una acción de control para los motores de las ruedas con dicho propósito.

Diseño y fabricación 3D

Para el diseño del Robot se han tenido en cuenta modelos estándares de robots balancín: una estructura rectangular verticalmente apoyada únicamente por dos ruedas.

El diseño montado en TinkerCAD en 3D lo podéis encontrar AQUÍ. Así mismo, podéis descargar las piezas por separado en la siguiente lista:

Como se puede observar se ha distribuido en 3 plantas unidas por 2 pilares, para tener espacio suficiente para toda la electrónica y dejarla accesible para poder hacer modificaciones sin necesidad de desmontar el robot completamente. Para la parte frontal del robot se ha escogido un personaje emblemático de la serie de televisión South Park: el tímido Kenny McCormick.

La estructura del robot se ha fabricado mediante la técnica de impresión 3D. Al usar esta técnica hay que tener en cuenta las tolerancias a al hora de diseñar las piezas. Por ello, por ejemplo, en los agujeros de los tornillos se ha dejando un margen de 0.15mm para que entren ajustados pero sin dificultad.

Por otra parte las ruedas también han sido impresas en 3D (STL de la rueda). A estas se les añadió un material antideslizante para conseguir un mejor agarre.

Diseño electrónico

A continuación se enumerarán los componentes electrónicos y se adjuntará el esquema electrónico.

Componentes

  • Arduino Mega
  • LiPo 3S 2200mAh
  • Fusibles y porta fusibles
  • Buck LM2595
  • 2x Motores bipolares 17HS4401
  • 2x Drivers DRV8825
  • 3x Ultrasonidos HC-SR04
  • Módulo Bluetooth HC-05
  • Matriz LED 8×8 + driver MAX7219
  • MPU-6050

Esquema electrónico

Para ver el esquema electrónico pinchad AQUÍ.

Debido a la cantidad de entradas y salidas necesarias se optó por el Arduino Mega, ya que dispone de más pines que otros modelos de Arduino.

Se ha decidido utilizar una LiPo de 11.1 V ya que esta hará posible que los motores trabajen a un rendimiento mayor que el se conseguiría alimentandolos con su tensión nominal. Para evitar que se sobrecalienten, los drivers escogidos limitarán la corriente por las bobinas.

Puesto que el Arduino Mega y el resto de componentes electrónicos necesitan ser alimentados a 5V, se ha utilizado un conversor Buck (LM2595) para reducir la tensión de la batería.

A la salida de la LiPo se decidió poner un fusible para protegerla en caso de cortocircuito. Así mismo, se añadió un divisor resistivo a la salida de esta para medir la tensión en todo momento desde el Arduino con una entrada analógica y encender un LED cuando el nivel de la batería sea bajo.

Por comodidad, para el conexionado que no requería mucha potencia se han usado cables jumper. Sin embargo, para los drivers y motores se decidió emplear cables multifilares más gruesos que soportaran una potencia más elevada.

Montaje

El montaje tanto mecánico como eléctrico se hizo de forma paralela. Una vez con todos los componentes listos se hizo un montaje de abajo hacia arriba por comodidad a la hora de hacer las conexiones.

A la izquierda la imagen de las piezas impresas en 3D y a la derecha todos los componentes electrónicos usados.

Primero se montaron los motores en sus soportes y posteriormente piso por piso los componentes electrónicos y sus respectivas conexiones. De tal forma que, la distribución por planta fue al siguiente:

  • Planta baja: MPU-6050
  • Primera planta: Arduino Mega, Buck, fusible, drivers
  • Segunda planta: ultrasonidos, LiPo, módulo Bluetooth

Cabe añadir que la alimentación del Arduino se hace directamente por la entrada del USB. Esto es posible ya que se cortó la parte del cable que va al ordenador y se soldaron los cables de alimentación a la salida de la buck.

 

Para la unión de las partes mecánicas se han usado tornillos M3 con diferentes longitudes y tuercas. Para insertar las tuercas a las piezas 3D y que quedaran completamente fijas, se usó un soldador para calentarlas  y incrustarlas en la pieza. De esta forma, el plástico se derretía y al enfriarse se endurecía de nuevo, dejando la tuerca perfectamente acoplada.

Finalmente se acoplaron las ruedas al eje del motor. En este caso se habían hecho pruebas previas para que la rueda quedara ajustada perfectamente al motor.

Pero a pesar de haberlas hecho, debido a la tolerancia de impresión, estas no encajaban correctamente. Por ello, se usó teflón para que quedaran fijas al eje del motor.

 

Programación y control de estabilidad

Antes de comenzar cabe decir que ha resultado de gran utilidad la información obtenida en un proyecto similar sobre un robot balancín llamado «The B-Robot Evo«. En el enlace podéis ver su proyecto, además de descargar su código.

El robot balancín resuelve el problema conocido como péndulo invertido. Para tener una idea más gráfica nos imaginaremos una estructura vertical sobre una estructura con ruedas con la capacidad de desplazarse en el plano horizontal. De por sí, es un sistema inestable, a la mínima variación si no se hace nada la estructura caerá. Mediante el movimiento de la plataforma móvil es posible mantener dicha estructura en «pie», siempre y cuando compense debidamente a estas variaciones.

Por ello, es necesario una estructura de control capaz de interpretar correctamente los datos captados por los sensores (en este caso acelerómetro y giroscopio integrados en el MPU-6050) y generar acciones de control adecuadas a los motores para mantener el sistema estable.

En concreto, se usó una estructura de control en cascada de dos reguladores un PI para la velocidad y un PID para la estabilidad, donde la salida del primero está conectado a la entrada del segundo.

La referencia de ángulo para que se estabilice el Robot no es cero, puesto que el centro de gravedad no está perfectamente localizado sobre el eje de las ruedas debido a que la batería se encuentra en la parte posterior. Por ello, nos valemos de un pequeño offset en el ángulo de inclinación. Gracias a esta estructura en cascada el robot es capaz de mantenerse en equilibro sin desplazarse, ya que cuando se le envía una velocidad cero como referencia la entrada del control de estabilidad será ese pequeño ángulo de inclinación para mantener el robot estable.

Entonces ¿Qué se hace para que el robot se desplace? Para que vaya hacía delante o hacía atrás se cambia el ángulo de referencia en la dirección deseada. Y para que gire se añaden a las velocidades de referencia de los motores un término con símbolo distinto a cada uno de ellos.

Para obtener los valores adecuados de los reguladores se ha optado por el uso de una herramienta para graficar llamada Telemetry Viewer. Con ella, se ha graficado tanto el ángulo de referencia como el actual y su error, además de visualizar la señal de control.

En las gráficas se puede observar como  a medida que se iban modificando los parámetros de los reguladores cambia el error del ángulo: si aumenta en amplitud, si cambia la frecuencia, si se empieza a volver inestable o lo rápido que se recupera ante perturbaciones (situación que se da cuando lo empujas por ejemplo).

Por otro lado, la lectura de los sensores integrados en el MPU-6050 se obtienen ya filtradas por el DMP (Digital Motion Processor) que incluye. Para que la frecuencia a la que se envían los datos sea la misma que el tiempo de muestreo (15ms) se ha modificado el valor del registro correspondiente. Además, se han trabajado con interrupciones, ya que de no hacerlo así el buffer del IMU hacía «overflow» y el programa se quedaba bloqueado.

Para generar los pulsos de los motores se han utilizado interrupciones con los «Timers» 1 y 3 del Arduino (uno para cada motor).

Finalmente, para los sensores de ultrasonidos se ha usado la librería NewPing, que utiliza interrupciones con el Timer 2, de modo que el programa no se quedará bloqueado mientras se espere la recepción del pulso de ultrasonidos.

 

Desarrollo de aplicaciones

Este Robot aparte de ser capaz de mantenerse estable sobre sus dos ruedas (como se puede observar en el siguiente vídeo) tiene programados 3 modos de funcionamiento: control remoto, evita obstáculos y seguimiento de un objeto a cierta distancia.

La interfaz general diseñada es la siguiente:

Como se puede observar es accesible a todas las opciones desde una única interfaz. En ella, se puede desconectar y conectar al Bluetooth, desactivar o activar el control y modificar su parámetros, y elegir uno de sus modos siempre y cuando esté conectado al Bluetooth y activado el control.

Por otra parte, la matriz LED incorporada en nuestro Robot cambiará con la dirección de movimiento del mismo, y mostrará una X cuando se encuentre parado.

Control remoto

El control remoto consiste en el control del movimiento del Robot por medio del móvil. El Robot se moverá dependiendo de la inclinación del móvil, puesto que gracias al acelerómetro del propio móvil y el siguiente programa es posible:   

El resultado se puede observar en el siguiente vídeo:

Evita obstáculos

En este caso el robot cuenta con 3 sensores de ultrasonido situados en frente, izquierda y derecha. Con ello, esta programado de tal forma que no solamente evita colisionar con obstáculos, sino que constantemente trata de encontrar una dirección libre de ellos.

Detección de objeto a cierta distancia

En este modo, el robot trata de mantener una distancia determinada a un objeto que se encuentra enfrente suyo.

Mediante el ajuste de un «slider» de la aplicación móvil, se puede especificar la distancia que se quiere mantener.

Autores

Francisco Martínez Claramunt

Diego Aldair Chango Figueroa