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.
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.
ResponderEliminarGracias Sam! y buen trabajo!, la verdad es que la placa es muy útil para este tipo de proyectos...
EliminarSaludos para ti y para Jordi
Espectacular.
ResponderEliminarTe dejo midies :)
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?
ResponderEliminarPara el material he encontrado esto:
EliminarGiroscopo + 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 ;-)
Cool project.
ResponderEliminarDo you have any drawings that explains the wiring of the different components ?
Thanks
Great work! I want very much put one B-Robot together. Are you releasing more information on how to assemble and set up?
ResponderEliminarThanks
Eduardo
Hi,
ResponderEliminarWhere can I buy the WITA board ? :)
Sascha
Hi Sascha,
ResponderEliminarWITA 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.
Hi Jose !
ResponderEliminarI 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
Muy buen proyecto... me encanta, con tu permiso intentaré construirme uno de estos.
ResponderEliminarHello! 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
ResponderEliminarArduino UNO
ResponderEliminarHola ! 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 ...
ResponderEliminarDesde ya muchas gracias !! Lucas E Blanco
Hola Lucas, te he contactado por Google+ y asi puedes preguntarme lo que quieras...
EliminarEncantado de intentar ayudarte...
Este comentario ha sido eliminado por el autor.
ResponderEliminarHI 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.
ResponderEliminarWhat did you use and how did it turn out?
Hi,
EliminarI 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...
Can you use an Ardiunio Yun instead of the custom WITA?
ResponderEliminarI 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...
EliminarHola Jose. Disculpa mi español, estoy escribiendo desde Suecia.
ResponderEliminarEstoy 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
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.
ResponderEliminarHave you seen this? Looks very similar!
ResponderEliminarhttp://www.wowwee.com/mip/
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
ResponderEliminarhola josé felicidades por este excelente proyecto, me preguntaba si podrías ayudarme con los diagramas de conexiones y algunas explicaciones sobre el montaje y funcionamiento del segway, soy estudiante del quinto semestre de ingeniería electrónica y no entiendo muy bien los PI, PD. PID, si me pudieras ayudar te lo agradecería mucho. (y)
ResponderEliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHi! Jose
ResponderEliminarGreat Project ^^;
I am making this.
Thanks for sharing your project!! every time.
Hi Jose,
ResponderEliminarWow, nice project, I almost finished printing mine :-)
However, I have a few questions:
- Can you tell me what you use for the rubber tires ?
- Can you tell me how big the eyes are in diameter ? (I'm going to 3D design & print them)
- What font did you use for the "B-robot" sign ?
I have my own blog http://www.digitalplayground.be , I hope it's OK for you if I refer to your blog, when I put up some pictures on my blog of my B-Robot ?
Best regards from Belgium,
Kris
Hi Kris,
EliminarI used a rubber that my wife use to make bracelets. It´s 2mm color rubber. Then I glued with cianocrylate.
The eyes are made of EVA foam (white part) and it´s about 3cm by 2cm, The black circle is 3D printed
I designed the B-ROBOT text with Sketchup but I don´t remmember the font now...
Yes you can referer the blog and use some pictures, no problem...
Regards,
Jose
Hi Jose,
ResponderEliminarits very great project .. :)
I would like to replicate it by my self, where I can get the wiring diagram?
Can I replace the stepper motor with other type? do you have any suggestion for that?
wiring is not so difficult, have a look at the arduino code :-)
EliminarYou need 2 stepsticks to control the stepper motors, look in google for stepsticks, you will find a diagram to connect the stepper to the stepstick.
Connecting the stepsticks to the Arduino can be found in the arduino code itself:
/ ENABLE PIN: D4
// STEP Motor1: D6 -> PORTD,7
// DIR Motor1: D8 -> PORTB,4
// STEP Motor2: D12-> PORTD,6
// DIR Motor2: D13-> PORTC,7
// Robot servo arm connected to D5
// Distance sensor (sonar) connected to A0 (analog 0)
// Battery monitor (voltage divider) connected to A5
Furthermore, you need a standard RN131 or RN171 Rover Network wifi module.
That should be it :-)
Good luck,
Kris
Thanks Kris for the help...
EliminarYes, I have no wiring scheme for this project but the comments on the code show all the connections to the drivers.
Thanks Kris & Jose.
EliminarHow about if I use another type of motor stepper? like this one http://www.4tronix.co.uk/arduino/Stepper-Motors.php ( 28BYJ48 ), can I use it?
Hi Jose,
ResponderEliminarI did almost done but I don't know the values - /1/fadder1,fadder2 Value range, and /2/fadder1,2,3,4 - of TouschOSC.
Could you share your TouchOSC layout or values?
Thank you so much!!!
I have added a new TouchOSC folder on the GitHub repo with the layout I used.
EliminarThanks Jose, It's very helpful.
EliminarThe name is diffrent from fadder1, fadder2..in B_ROBOT.ino to fader1, fader2... in TouchOSC.
fader1, fader2 ... in TouchOSC Should be chaged into fadder1, fadder2...?
and another problem is a 4988's 8 microstepping mode. It's really bad for stepper motor.
Stepper motor squeak!! and stop !!
but a 4988's 16 microstepping is ok. Do you have any suggestion for that?
It's good news.
ResponderEliminarI solved my problem above mentioned.
I changed stepper motor for 4V from stepper motor for 12V and A4988 adjusting pot for current.
My robot have to be arranged. It's really short video. Thanks jose!!
http://www.youtube.com/watch?v=B-1P-JLi5Ko&feature=share&list=UUMxUByEqCO6Ps_azcIrxa9w
Great!! Good job! It seems to work very nice and stable... Thanks for share the video!
EliminarHi Jose!
ResponderEliminarMagnificent project! Thanks for the idea!
A few weeks ago I started to implement it.
And the first thing I was unpleasantly surprised - you use it quite expensive and large in size components.
Quest to reduce the cost and size led me to the following components:
Arduino compatible board - Pro Micro;
WiFi module - HLK-RM04;
Sonar - HC-SR04;
Stepper motors - 17HS2408 (0.6A, 12H.cm).
Scheme will feed from the battery pack at 5A * h 3.7V (Li-Ion) through the boost converter to 5V.
Currently creative porting your program to the selected equipment. I want to add functionality. For example, (1) Please add a link with a remote control; (2) a discharge Bater make the robot look for the charging station and connect it to charge; (3 plans) add between narrow wheels suction skirt + DC motor creates a vacuum debris hopper + = funny robot vacuum cleaner, which will bring joy to the children and do the cleaning.
About their results will periodically report if you're interested.
Potential of your B-robot is not limited!
Regards, Oleg (Minsk, Belarus)
Hi Jose,
ResponderEliminarWhat pins do I connect the 6050MPU to?
I cant see anything in the code...
Thanks
Hi Luc,
ResponderEliminarIt all depends on the arduino board you are using.
6050MPU uses the standard I2C pins.
So, you only need to connect 4 pins to the MPU6050 sensor.
- SCL
- SDA
- GND
- VCC (to 5V)
pin layouts on different arduino's:
Uno, Ethernet A4 (SDA), A5 (SCL)
Mega2560 20 (SDA), 21 (SCL)
Leonardo 2 (SDA), 3 (SCL)
Due 20 (SDA), 21 (SCL), SDA1, SCL1
so, if you use a Leonardo, connect SDA to pin D2 and SCL to pin D3
(not the analog pin 2 and 3 !)
P.S. Since I have been ill for a few months, and even have been in hospital for a few weeks, my B-Robot is still not finished. I hope to get it up and running within the next week :-)
good luck,
Kris
http://www.digitalplayground.be
Where fun meets technology ...
Thanks for the help! I was on "holidays"... ;-)
EliminarI have a question.
ResponderEliminarI assume you use a simple voltage divider with 2 resistors for the battery monitoring ?
What ratio do you use ? 2.5 ?
Would a 10k resistor for the low side and a 15k resistor foe the high side be OK ?
I also use a 3s lipo 1800 mah)
Best regards,
Kris
Http://www.digitalplayground.be
Where fun meets technology ...
I had to check it. I used a 33k/22k voltage divider (22k for the low side). I used normal tolerance resistors, so I check with a tester to calculate the proper voltage cutoff on code.
EliminarEste comentario ha sido eliminado por el autor.
ResponderEliminarHola Jose,
ResponderEliminarGracias por compartir este excelente proyecto. Tengo una pregunta sobre la funcion dmpGetPhi(). Creo que la orientacion de mi MPU es distinta a la tuya en el robot (aunque no la puedo ver en las fotos). Como podria encontrar una funcion/formula para sacar el angulo Theta en vez de Phi a partir de los quaternion? Gracias una vez mas por compartir tu proyecto.
Gracias!
EliminarEn el propio codigo, en la funcion float dmpGetPhi() {
Tienes una linea comentada con la funcion para obtener el otro angulo:
//return( asin(-2*(q.x * q.z - q.w * q.y)) * 180/M_PI); //roll
Descomenta esta linea y comenta la siguiente (el return actual)...