Home » Arduino » Rufus2: Robot omnidireccional impreso en 3D

Login with your Social Account

Rufus2: Robot omnidireccional impreso en 3D

  •  
  •  
  •  
  •  
  •  
  •  

Rufus, robot omnidireccional impreso con aplicación de control remoto y aplicación autónoma para mantener las distancias y seguir paredes.

1. Introducción

Rufus2 es un robot omnidireccional de 4 ruedas controladas independientemente. Esto le permite realizar hasta 10 movimientos distintos (hacia delante, hacia atrás, derecha, izquierda, sobre sí mismo y en diagonal).

Además está pensando para ser una plataforma robótica para aprender con ella, por lo que tiene un diseño modular cuyo centro es la PCB desarrollada, que integra todo el control y potencia para los motores así como las conexiones para hasta 4 sensores ultrasonido y 3 sensores de linea infrarrojos.

Rufus2 está impreso en 3D en su totalidad, incluyendo las ruedas suecas.

Podéis encontrar todos los archivos necesarios para replicarlo en el repositorio de GitHub.

2. Ruedas suecas o mecanum

Es una rueda convencional con una serie de rodillos unidos a su circunferencia. Estos rodillos tienen cada uno, típicamente, un eje de rotación de 45º respecto al plano de la rueda y de 45º a una línea que atraviesa el centro del rodillo paralelo al eje de giro de la rueda.

Una configuración típica es la de cuatro ruedas del robot móvil omnidireccional. Al alternar las ruedas con los rodillos izquierdo y derecho, de tal manera que cada rueda aplique fuerza aproximadamente en ángulo recto a la diagonal de la distancia entre ejes de la rueda, el vehículo es estable y se puede hacer que se mueva en cualquier dirección y gire variando la velocidad y el sentido de giro de cada rueda, lo que aporta mucha flexibilidad de movimiento.

La desventaja es que no tienen tanto agarre como otras ruedas.

Rufus lleva 4 de estas ruedas impresas en 3D con una configuración tipo URANUS.

3. Materiales

3.1. Materiales chasis y ruedas

  • PLA Azul para el chasis y los ruedines
  • ABS amarillo fosforescente para las ruedas
  • Separadores de latón M3 25mm
  • Termoretractil 8mm para las ruedas
  • 36 x alfileres 10mm

3.2. Componentes electrónicos

  • Placa STM32F103C
  • 2 x Driver motor puente H L293
  • Interruptor 1P2T
  • 5 x PCB connector dual
  • 4 x ultrasonic sensor HC-SR04
  • 1 x Bluetooth module HC05
  • 1 x botón pulsador
  • 1 x LED verde indicador 3mm
  • Headers macho
  • Headers hembra
  • Resistencias SMD 1206
  • Condensador 100uF
  • Condensador 100nF
  • Bateria LiPo 2S 500mAh 7.4V

3.3. Componentes mecánicos

  • 4 x Micro-geared motor Pololu 12V 300rpm

4. Placa de circuito impreso

El robot consiste en un chasis doble sobre el que va montado una placa de circuito impreso que integra toda la electrónica en el chasis superior. Esto le confiere un diseño sencillo, sin cables y muy robusto, además de mantener el tamaño lo más reducido posible.

El objetivo es embeber toda la electrónica necesaria para el control de sensores y actuadores del robot, es decir, se pretende integrar los drivers de los 4 motores DC, así como la alimentación del módulo, la conexión Bluetooth, los conectores de las placas auxiliares de sensores, etc.

La placa de circuito impreso ha sido diseñada usando el software libre EasyEDA y está disponible públicamente para que podáis modificarla o replicarla en mi repositorio de EasyEDA.

Para el diseño se tuvo que crear el footprint de la placa ya que, al ser tan nueva, aún no estaba incluida en las bibliotecas de dicho software.

La PCB fue fabricada a mano mediante una insoladora, podéis consultar el proceso de diseño y fabricación completo en el siguiente documento: Proceso fabricación PCB Rufus2

El resultado final fue el siguiente:

El esquemático fue desarrollado teniendo en cuenta el PinOut de la placa, pero una vez fabricado me dí cuenta de que el PinOut que había encontrado tenía algunos errores con lo que los pines compatibles con PWM no eran los correctos, así que tuve que hacer algunos apaños con cables, en versiones posteriores convendría corregir dichos errores en el PCB y fabricarlo de nuevo. Además, fabricar una placa de circuito impreso de dos caras de forma casera es complejo y lleva a muchos errores de uniones no deseadas entre pistas, falsos contactos, etc. Esto complicó bastante la fabricación del robot.

Os adjunto el esquemático sin corregir, a falta de la versión definitiva: Main-Board_sch.

Y el PCB listo para imprimir y replicar:  Main Board PCB Rufus2

Adicionalmente, también se diseñó una placa para integrar los sensores infrarrojos de línea, pero no se llegó a fabricar por falta de tiempo. Podéis consultar el esquemático de dicha placa: IR-sensor-board

5. El cerebro: STM32F103C

El cerebro del robot no es un Arduino Nano como estamos acostumbrados. Al precisar de 8 salidas PWM para el control de velocidad de los 4 motores de forma independiente fue necesario usar otro microcontrolador, ya que el Nano(o el UNO) solo disponen de 6. Además dado el reducido tamaño del robot no quise hacerlo con un Arduino Mega, que hubiera sido lo más sencillo, así que me decante por experimentar con una pequeña placa de desarrollo que va rondando por Internet a un precio de risa (sobre unos 2€ en tu tienda china favorita).

La placa se conoce como Blue Pill e integra un potente STM32F1 de 32bits corriendo a una frecuencia de reloj de hasta 72MHz, 20KB de RAM y 64KB de Flash. Además cuenta con un ADC de 12bits (en vez de 10) y con salidas PWM con resolución de 16bits.

Tiene otras características interesantes como un DAC preparado para Audio, soporte para interrupción externa por todos los pines, 7 timers (uno de ellos especialmente diseñado para control PWM de motores) y conexión directa para programación por USB. Es decir, se trata de un microcontrolador bastante más potente que un Arduino Nano, con el tamaño de este y con la ventaja de que también se puede programar con Arduino IDE.

Para la programación por USB se debe cargar un pequeño bootloader que se inicia cada vez que se resetea el micro. Dicho bootloader activa la conexión USB OTG para funcionar como un puerto COM serie virtual (VCOM), lo que nos permite que sea programado directamente por Arduino IDE, tras haber instalado unas librerias hardware que lo soportan. Estas librerias se pueden encontrar en el GitHub del desarrollador: https://github.com/rogerclarkmelbourne/Arduino-STM32F1-corelibs

Para más información os invito a que visitéis la documentación completa de los STM32F1 en Arduino (STMduino) en LeafLabs.

6. Montaje

El montaje del robot es extremadamente sencillo, la única dificultad que nos podemos encontrar es en el montaje de los ruedines de las ruedas mecanum.

El chasis de Rufus2 consta de dos piezas: una superior y otra inferior. En la inferior van los micro-motores Pololu atornillados con una pieza que los sujeta al chasis, la superior tiene unos agujeros donde va atornillada la PCB con tornillos M2.

Entre el chasis superior e inferior van unos separadores de latón de 25mm de largo creando un hueco entre medias donde alojamos la batería (una LiPo 2S de 500mAh).

El montaje de las ruedas es algo complicado y  muy entretenido. Tras imprimir 2 cuerpos de ruedas izquierda, dos del lado derecho y 36 ruedines, hay que forrar estos con tubo termoretractil de 8mm para que tengan mejor agarre al suelo para posteriormente introducirlos en el cuerpo de las ruedas pasando un alfiler por medio a modo de eje transversal.

Sobre la PCB se montan los sensores ultrasonidos mediante unos headers que hay para ello. El diseño también contempla un par de agujeros en el frontal del robot para atornillar la placa del sensor de linea.

 7. Aplicación Android: Control remoto

Se ha desarrollado una aplicación para el control remoto de Rufus2 mediante Bluetooth a través de un móvil Android. La aplicación se ha desarrollado en AppInventor2, una plataforma online de Google para desarrollar aplicaciones de manera muy sencilla basada en una programación por bloques (tipo Scratch).

La aplicación es muy sencilla, consta de una sola interfaz visual con 11 botones principales destinados al control de los movimientos del robot, cada botón envía un comando por Bluetooth cuando lo pulsamos y un comando de parada cuando dejamos de pulsarlo. Además dispone de 4 botones para ajustar la velocidad desde un 25% a un 100% y dos botones para conectar y desconectarnos del robot.

En arduino se carga un programa que se encarga de interpretar el comando enviado y enviar la orden a los motores para realizar el comando solicitado.

El archivo del proyecto “.aia” se puede descargar desde el repositorio GitHub del proyecto e importar en AppInventor para ser modificado o ver como está desarrollada la App. También se puede descargar el .apk de Android.

Os dejo un vídeo del control remoto:

Imagen de previsualización de YouTube

8. Aplicaciones autónomas

8.1. Mateniendo las distancias

Se trata de un control proporcional básico para mantenimiento de distancias. El robot tiene como target mantenerse a una distancia de 10cm de cualquier objeto y para ello emplea un control proporcional para aplicar más o menos velocidad a los motores en función de la distancia a la que se encuentre el objeto.

Imagen de previsualización de YouTube
A %d blogueros les gusta esto: