lunes, 28 de octubre de 2013

B-ROBOT: Un robot equilibrista impreso en 3D...

Bueno, ya he terminado mi primer robot totalmente diseñado e impreso con la impresora 3D (ruedas, estructura, cuerpo...  hasta los ojos!).
Se trata de un robot tipo SegWay con solo dos ruedas, que tiene que mantener el equilibrio y que se puede controlar desde un Smartphone/tablet via Wifi. También funciona en modo autónomo con un sonar para detectar obstáculos y alguna que otra sorpresa que se puede ver en el vídeo...



La verdad es que después de "pelearme" un poco con los algoritmos de control ha quedado muy suave y controlable. Inicialmente empecé probando un típico control PID que recibía como entrada el ángulo del robot (calculado con la IMU) y como salida controlaba la velocidad de los motores. El resultado no era muy bueno y sólo conseguía corregir bien en la zona cerca del equilibrio (0 grados) donde el problema parece ser más lineal. La verdadera mejora vino cuando cambié el algoritmo y probé un control PD donde la salida es la aceleración de los motores. Esto sí que permite controlar el balanceo del péndulo inverso y de hecho tiene lógica desde el punto de vista físico del sistema. El problema está en que de esta forma el robot no tiene la "obligación" de quedarse quieto, al fin y al cabo una aceleración 0 no implica velocidad 0, así que añadí un segundo control (control en cascada) PI de velocidad que gobierna al control PD interno de aceleración. Visto esquemáticamente:



La placa principal (WITA) es un diseño que realicé junto con Jordi Muñoz (de 3DRobotics) y se trata de un Arduino Leonardo con un módulo Wifi integrado (RN131 o RN171). Esta placa permite diseñar fácilmente proyectos que se controlan desde dispositivos remotos via Wifi o proyectos de Intenet of Things. En cualquier caso el proyecto podría reproducirse con una placa de Arduino Leonardo y un módulo Wifi externo (tipo RN-XV por ejemplo) o incluso modificando el código supongo que podría hacerse compatible con un Arduino Yun.



La IMU utilizada es un sensor MPU6050 con 3 acelerómetros y 3 giróscopos y usamos además el procesamiento interno DMP para conseguir una solución de actitud (ángulos del robot) a 200Hz.
Los motores empleados son Steppers de tipo NEMA17 (de los cortos) con drivers A4988 y Mircrosteping a 1/8. He montado los 2 drivers necesarios en una pequeña placa aparte añadiendo los condensadores y resistencias necesarios (ver datasheet del driver).



Las librerías de Steppers para Arduino que he podido ver permiten controlar la posición de los steppers pero no su velocidad y la mayoría de ellas son MUY ineficientes! así que me he tenido que hacer un pequeño driver en Arduino usando interrupciones para realizar un control preciso de velocidad (funciona a 25Khz).



La interfaz con los smarphone esta basada en el interfaz abierta OSC (mensajes tipo UDP). La aplicación que suelo usar (tanto para Iphone como Android) se llama TouchOSC.
Para el brazo que permite levantar al robot del suelo uso un servo tamaño mini (20gramos)
Por último el sonar empleado es un LV-MaxSonar-EZ3 que tenía libre de otros proyectos...
Todos los diseños 3D de las piezas han sido realizados en OpenSCAD.



Todo el proyecto: códigos (Open Source), librerías y diseños 3D están públicos y compartidos en un repositorio de GitHub: https://github.com/jjulio/b-robot

Llevo bastantes años dedicado a la robótica y es la primera vez que puedo partir de un lienzo totalmente en blanco y con toda la libertad para hacer lo que quiera. Lo normal (y muchos me comprenderán...) era hacer una visita a Leroy Merlin (o equivalente) ver lo que hay, planchas, varillas, etc... y diseñar condicionado por eso... Ahora cambia el paradigma, abres un OpenSCAD y ha pensar... un paso más adelante en el mundo DIY, me gusta!

Gracias a Ramon por ayudarme como el video como siempre... ;-)

Jose.

24 comentarios:

  1. Recuerdo que Jordi me encargó que revisara sus dibujos de la placa WITA hace mucho, y que le entregara prototipos listos para enviartelos a ti. Que bien que sirve de algo ese hardware! Un saludo desde 3D Robotics.

    ResponderEliminar
    Respuestas
    1. Gracias Sam! y buen trabajo!, la verdad es que la placa es muy útil para este tipo de proyectos...
      Saludos para ti y para Jordi

      Eliminar
  2. Me encanta Jose Julian. Felicidades por tu proyecto. Me esta picando aun más montar un pequeñín de estoy, ahora que veo algo de documentación en castellano y aun que no entiendo nada de algoritmos suena divertido. No as pensado en hacer un paso a paso de como montarlo?

    ResponderEliminar
    Respuestas
    1. Para el material he encontrado esto:

      Giroscopo + acelerometro: 6,63€
      http://dx.com/es/p/gy-521-mpu6050-3-axis-acceleration-gyroscope-6dof-module-blue-154602

      Arduino leonardo (compatible): 9,12 €
      http://dx.com/es/p/diy-eduino-leonardo-module-blue-black-213956

      Driver A4988 7,17 €
      http://dx.com/es/p/stepstick-a4988-stepper-motor-driver-module-white-black-186465

      Sonar sensor 26,95€
      http://www.pololu.com/catalog/product/793

      motor nama 17 corto 12,45 € por motor
      http://www.ebay.es/itm/Nema17-56-6-Oz-In-reprap-3d-printer-cnc-prusa-mendel-/151149334304?pt=LH_DefaultDomain_186&hash=item233133cf20&_uhb=1

      modulo wifi ¿esto sería trasparente?
      38,66€ + portes
      http://www.bricogeek.com/shop/wifi/410-rn-xv-wifly-80211-b-g.html


      si Compro todo esto, he probado a compilar el código arduino con las librerias. OK y ahora como monto todo el cambalache ;-)

      Eliminar
  3. Cool project.
    Do you have any drawings that explains the wiring of the different components ?

    Thanks

    ResponderEliminar
  4. Great work! I want very much put one B-Robot together. Are you releasing more information on how to assemble and set up?

    Thanks

    Eduardo

    ResponderEliminar
  5. Hi,
    Where can I buy the WITA board ? :)

    Sascha

    ResponderEliminar
  6. Hi Sascha,
    WITA board is not a comercial product now, but you can emulate the board with more "stardard" components (as described on blog).
    We will release the WITA board schematic if someone wants to replicate it.
    I will make a diagram with the wirings also...

    Thanks,
    Jose.

    ResponderEliminar
  7. Hi Jose !
    I have seen your project and like it very much.
    You don't write much about the app to run the smartphone. What is it called and where can it be downloaded from ?
    Thank you

    ResponderEliminar
  8. Muy buen proyecto... me encanta, con tu permiso intentaré construirme uno de estos.

    ResponderEliminar
  9. Hello! Arduino1.0.5 compile your code errors. Show arduino-1.0.5-windows\arduino-1.0.5\libraries\WITA\WITA.cpp:259: warning: deprecated conversion from string constant to 'char*' Many errors

    ResponderEliminar
  10. Hola ! antes que nada muchísimas Felicitaciones por su B-RoBot!!! admiro mucho estos logros.. Me gustaría que me explicara ya que tengo dudas sobre como aplicar los controladores PD y PI . La Velocidad del robot es la Velocidad de las ruedas?, la Velocidad Deseada a que se refiere? el Angulo del robot es el de la IMU? me preguntaba si por casualidad me podría conectar por Skype , Face Time... ya que hace mucho pero mucho tiempo que llevo con este proyecto y no lo puedo sacar adelante ...
    Desde ya muchas gracias !! Lucas E Blanco

    ResponderEliminar
    Respuestas
    1. Hola Lucas, te he contactado por Google+ y asi puedes preguntarme lo que quieras...
      Encantado de intentar ayudarte...

      Eliminar
  11. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  12. HI there! We love your project and are using as the basis for a CoderDojo class in SF. We have most of the parts sourced and connected, but we are very curious about what power supply you used here.

    What did you use and how did it turn out?

    ResponderEliminar
    Respuestas
    1. Hi,
      I used an 3S1000 LiPo battery (typical RC equipment). I have not make an specific test but I think that I could play more than 30 minutes on one charge...

      Eliminar
  13. Can you use an Ardiunio Yun instead of the custom WITA?

    ResponderEliminar
    Respuestas
    1. I suppose that the answer is yes, you could use an Arduino Yun but you have to rewrite some parts of the code (outputs, Wifi module conection and protocol,packet decoding...). I don´t have an Arduino Yun so I have not tested...

      Eliminar
  14. Hola Jose. Disculpa mi español, estoy escribiendo desde Suecia.
    Estoy muy impresionado con tu proyecto! Y me decidí por hacer un B-robot yo tambien.
    Quería preguntarte si tienes la esquemática de los componentes electrónicos que me parece lo único que falta en tu documentación.

    Pensé usar otro tipo de Arduino sin Wifi y talvez xbee y de allí tratar de cambiar lo necesario en el código. Aparte de eso estoy usando los mismos mosfets, motores y accelerómetro. Hasta la misma impresora ;)

    Saludos de Suecia

    ResponderEliminar
  15. I am doing a project where I need to control the speed of stepper motors with a microcontroller. I was looking at your code and I don't quite understand how you are controlling the speed. I understand that you have an interrupt at 25KHz and I see you are doing something with sub periods but I don't understand how it works. I was wondering if you could explain it a little more so I could adapt it to my project. If you could I would be very grateful.

    ResponderEliminar
  16. Have you seen this? Looks very similar!
    http://www.wowwee.com/mip/

    ResponderEliminar
  17. Hola amigos, espectacular en verdad que solo de verlo funcionando me a dejado impresionado. De ahora en adelante amigo sere casi casi tu Padawan. Estoy con la idea de hacer un robot aunq no de tales complejidad, solo mantener el equilibrio y ya. Dispongo de la tarjeta Arduino Uno mmm supongo que trasladarlo a esta tarjeta no sera muy complicado amigo mio

    ResponderEliminar