Pregunta sobre servos de movimiento contínuo


#1

Hola:
Estoy con la versión casera del Evolution de BQ. Le he puesto dos de estos servos para que se mueva y uno va sensiblemente más rápido que otro, por lo que el robot se desvia unos 30 cm cada metro.
¿Os ha pasado? ¿Hay solucion para esto?


#2

Si a los motores les puedes poner o vienen con encoder (que lo dudo), lo ideal es que uses esas señales y hagas un sistema de control para que calibre las velocidades de las ruedas. Normalmente se emplean sistema de control PID por “simplicidad” (no son nada simples) ¿Como funciona? En tu caso, el PID toma como entrada el error de velocidad en las ruedas, es decir, la velocidad real de cada rueda menos la velocidad que quieres en cada una. Dentro implementa un algoritmo PID que lo que hace es calibrar lo que tienes que meterle a cada rueda para que vaya como tu quieres.

Si el motor no tiene encoder, otra solución pasa por ponerle una IMU y hacer el pid de manera digital con este sensor. Como sabes yo tengo dos rovers (robots con ruedas), y tienen el mismo problema que dices, e iba a hacer esta solución. Podemos tratar de quedar un dia y hacerle esto que te digo :wink:

Googleando “Arduino PID” me ha salido este pdf que parece estar muy bien -> Arduino PID
Y este artículo de BricoGeek también está chupi -> BricoGeek Arduino PID

Tiene que haber tela de librerías sobre PIDs y Arduino


#3

No, en principio los servos que te digo no tienen encoders. Lo que no tengo muy claro es si puedo modificarles la velocidad o bien tendré que parar directamente el que va más rápido para or corrigiendo. El problema es que la programación se complica. Para mi no hay problema y me puedo tirar horas hasta que lo deje fino, pero el robot es para mi sobrina y está empezando ahora.
Otra cosa que estaba mirando ahora es ponerle un siguelineas y que lo programe ella.


#4

Otra solución más “tosca”, es que trates de obtener que diferencia tienen un motor y otro, ej:

  • Si le doy 3 unidades de velocidad al izquierda, el derecho necesita 3 + x unidades
  • Si le doy 10 al izquierda, el derecho necesita 10 + y

  • Es “más o menos” lo que te va a hacer el PID

#5

No, el motivo que haga esto es de los potenciometros. Seguramente deben de ser lineales y lo mismo no lo son. Posiblemente deban ser logaritmicos o no.
El caso es que en vez de utilizar los “servos de movimiento continuo” de bitbloq hay que utilizar los servos normales. Cuando el angulo se acerca más a los 90 grados gira más lento. Tras muchas pruebas he sacado los angulos para que giren a la misma velocidad.
Esto es un problema porque con bitbloq puedo hacer funciones, pero no cargarlas como si fueran una librerìa. Es una pena porque ese programa es el mejor de todos pero falla en cosas fundamentales.
Ya molaría tomar bitbloq y desarrollar lo que le falta o bien otro entorno y modificar la interfaz para que sea sencilla y mas atractiva visualmente para los niños, y no tan niños.
Bueno, gracias Cristo. Tus ideas me han ayudado. Lo mismo escribo algo por si alguien tiene el mismo problema.


#6

Si pones los dos a 90 se quedan parados?


#7

Por supuesto.
Ya se más o menos porqué puede pasar. Seguramente porque los servos, aunque son futaba, son de los chinos. Yo he tenido servos futaba y no son iguales a los chinorris. Los potenciometros no se ajustan mucho a la realidad.
Si mando que se ponga en 0 grados, vá más rápido que si lo pongo a 180. Por lo que ya no me vale la instruccion de bitbloq de servo continuo. Tengo que utilizar en servo normal y mandarle a uno 10 grados y al otro ya los 180.
Como tengo que recibir 2 servos más, si veo que las calibraciones son más o menos las mismas podría personalizar mis bloques ya calibrados.
No se, por ahora es mucha prueba y error hasta que le pille el punto.


#8

Este tema se cerró automáticamente 20 días después del último post. No se permiten nuevas respuestas.