JJROBOTS (http://jjrobots.com) es el nuevo portal que hemos creado para los proyectos de robótica. Contiene blog, tienda online, instrucciones de montaje, "como funciona", foros... mas info.
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.
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)...
Hola Jose Julio,
ResponderEliminarEn el caso de que solo quiero equilibrar el robot, prodria omitir el speedPIControl() y solo usar el stabilityPDControl() metodo?
Un saludo y gracias por compartir este projecto!
-Al
Si, efectivamente podrías usar el StabilityPDControl() con un target_angle=0 para que mantenga la estabilidad. El otro control es solo para la velocidad.
EliminarHola Jose, primero de todo felicitarte por tu increíble proyecto, si no es el mejor que e visto, no le falta mucho para ser-lo.
ResponderEliminarEstoy intentando construir un robot auto balanceado como el tuyo, pero mis conocimientos sobre algoritmos y cosas de estas son bastante básicos por no decir nulos ya que acabo de terminar la ESO, por si fuera poco, mi nivel de programación no es suficiente para comprender tu código y modificar-lo para su uso sin el modulo wifi, por eso querría preguntarte si tienes y si podrías facilitarme alguna versión de el código en la que no la utilices.
Muchísimas gracias de antemano, un saludo
Marc
I'm very impressed with your cascaded solution to the balancing problem. The performance in the videos is remarkable. I have a few questions as I build my copy of your design.
ResponderEliminarI wonder if these stepper motors would be a good choice for the robot: https://www.adafruit.com/products/324
Enough torque?
Would I need to change your code if I used this stepper shield: https://www.adafruit.com/products/1438
I'm planning to use a 3s 1800mAh Lipo. Do you think the initial 12.6v will harm the 12v stepper motors?
Hi Bill, we have a new website JJROBOTS http://jjrobots.com where you could find a lot of info on this project, online shop, documentation, forums...
EliminarI hope you like it!
Hola, eu tenho um arduino Uno, como posso utilizar com o teu código sem modulo wifi?
ResponderEliminarBom projecto.
hello julio
ResponderEliminari would really need your help adjusting your code a little bit so it matches my parts (i for example dont use an servo and arm and i dont have an wifi shield and i´m not sure what party of code i can delete).
i´m doing this as a school project and have some trouble with it.
i would be really happy if you could contact me
I have send you an email
EliminarI am also a student and am having some difficulty getting the code to run. May I reach you by email also?
EliminarBill Baron
Bill, you could use the contact form on the right panel of the blog.
EliminarOk.
ResponderEliminarI'm going to give this a try since the Air Hockey table worked out so well.
Looks like a interesting project.
Great Robert!
EliminarWe are preparing an arduino shield for this project (to make hardware easy) and we are working to improve code and documentation...
Thanks Julio
EliminarI was scratching my head a lot !
I like the idea of the stepper motors but I admit
my breadboard shield is a mess. I'll keep checking back for updates.
FYI . My sister is in Spain right now for a month . Beautiful country. You are very fortunate.
Bob
The new website is ready! JJROBOTS just born! this is a wesite with blog, online shop, build instructions, "how it work", forums... for this and other projects.
EliminarPlease visit http://jjrobots.com
This is the wellcome post: http://cienciaycacharreo.blogspot.com.es/2015/02/jjrobots-just-born.html
Thanks! and I hope you like it!
Hey amigo, saludos desde mexico. Gran proyecto sin duda alguna, queria preguntarte que compilador usaste, checando el codigo hay cosas que no reconozco o no las habia visto antes. Tengo ya algunas semanas usando arduino. Espero que me puedas ayudar para comprender mejor el programa.
ResponderEliminarI finally got some spare time to put mine together. However, instead of using an IMU, I decided to installed an Android device on the robot and use its synthetic sensor to control the balance. Here you can see the preliminary result:
ResponderEliminarhttp://youtu.be/xtMCmuR8uNU
Kudos and thanks to Julio for sharing his project and providing ideas.
Great!! Thanks for share! I´d like the big RC tyres ;-)
EliminarHola estoy interesado en un proyecto como este queria controlar un robot equilibrista con el movil, utilizando un arduino uno me podria ayudar si tiene otro hecho por ahi o enviandome algun archivo o algo.Gracias. Un saludo
ResponderEliminarLa verdad es que el proyecto es alucinante, lo que estoy intentando hacer es el proyecto pero solo para controlar los movimientos y la estabilizacion no quiero controlar velocidades ni nada de eso. Estaria muy encantado si me pudiese enviar el codigo para controlarlo por la aplicacion que usted tiene en el movil pero solo sea controlar los movimientos y que el robot solo se estabilice. Gracias. Un saludo.
ResponderEliminar