TODOPIC

Mecatrónica => Robótica => Mensaje iniciado por: Nocturno en 26 de Junio de 2009, 18:07:18

Título: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: Nocturno en 26 de Junio de 2009, 18:07:18
Hola amigos, dispongo de una plataforma con dos motores DC con encoders acoplados a sendas ruedas a ambos lados de la plataforma. Un poco más adelante y en el centro hay una rueda loca.

Los motores están controlados por PWM mediante un L298 y, gracias a los encoders, siempre sé cuánto están girando.

Pues bien, no consigo que el dispositivo se mueva en línea recta. Si aplico máxima potencia a los motores siempre hay uno que gira un poco más que el otro y el movimiento va resultando curvo.

Me decidí por implementar un control PID en cada uno, para asegurarme que giran exactamente a la misma velocidad. Y he conseguido que funcione, al menos en teoría. Las pruebas en vacío y mirando la frecuencia de giro con el osciloscopio arrojaban buenos resultados.

Pero me he llevado un chasco al montar ambos motores porque tampoco va en línea recta. Creo que puedo mejorar el algoritmo PID, pero no tengo claro que sea la mejor estrategia para conseguir el movimiento rectilíneo.

¿Qué otras opciones consideráis?
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: vixctor en 26 de Junio de 2009, 18:23:08
     Considero que es dificil que se vaya recto por si solo, debido a la naturaleza del sistema
Ademas, jamas he usado enconders porque en realidad me indican cuanto se ha movido una rueda, no cuanto se mueve en la realidad el robot, ambas ruedas podrian ir casi igual, pero al ser rueda loca, una pequeña variacion haria que perdiera la linea recta

   Yo sugeririra:

a) Usar una brujula electronica y corregir el rumbo si hay desviacion durante el trayecto
b) Fijar un pequeño servo en lugar de rueda loca y usar el sistema con direccion y claro, los dos motores como los tienes

    Ciertamente, el uso de enconders aunque mejoraras el PID esta sujeto a desviarse porque no te dicen exactamente hacia adonde se mueve el robot, ademas que en el mejor de los casos, funcionan solo en piso liso y limpio, ya no digamos en otros terrenos
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: RedPic en 26 de Junio de 2009, 18:37:24
Manolo, por mi experiencia en vuelo RC puedo decirte que hagas lo que hagas con los parámetros de frecuencia, velocidad de giro o consumos ... valores "teóricos" al fin y al cabo siempre vas a tener que adaptarte a la física real del sistema.

Yo lo hice con dos motores glow a los que comandaba el control de gases y la variable de entrada era la velocidad de giro de cada una de las palas. "Teóricamente" ambas palas girando a la misma velocidad deberían proporcionar el mismo impulso y el avión volar recto sin intentar guiñar ni a babor ni a estribor.

Sin embargo es totalmente falso, y entre otros muchos efectos distorsionantes algo tan simple como que las palas no son exactamente iguales, ni en peso ni en geometría por lo que sus respectivos empujes son distintos girando ambas exactamente a la misma velocidad.

Monté una rueda horizontalmente sobre un eje vertical, y cada uno de los motores fijados en los extremos de un diámetro de dicha rueda con sus ejes de pala o planos de giro lo mas perfectamente paralelos que pude conseguir. Con este montaje, en teoría con ambos motores con el mismo empuje deberían mantener la rueda perfectamente estable, cualquier diferencia entre los respectivos empujes generaría un par de giro y comenzaría a girar en el sentido contrario al del motor con mayor empuje.

Esto, que parece muy complejo, solo nos lleva a una idea y que es que tenemos que utilizar un "trimado" o ajuste real del sistema a mano, o a ojo.

En tu caso imagino que cualquier pequeña diferencia entre el alineado de los ejes de las respectivas ruedas, o pequeña diferencia entre sus diámetros o incluso entre sus respectivas superficies de rodadura y por ende en sus coeficientes de rozamiento hace que una avance mas que la otra y el vehículo gire hacia el lado contrario al de la rueda que mas empuja.

Móntale un mecanismo que pueda "avanzar" o "retrasar" de forma fina el avance de una de las ruedas y utilízalo para conseguir un ajuste a ojo de la "derechura" del avance. A partir de ahí toma en consideración este parámetro e investiga si es constante o solo se produce en linea recta, no me extrañaría que fuese variable y que tuviese distintos valores por ejemplo cuando está girando.

En fin, es una idea que te lanzo.  :mrgreen:

Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: Nocturno en 26 de Junio de 2009, 20:44:50
Estoy de acuerdo Vixctor en que este sistema no funcionará en terrenos irregulares, o en sitios donde las ruedas puedan patinar. Sin embargo, en un suelo liso y con grip la matemática dice que debería ser posible.

Diego, la diferencia entre mi sistema y el de tu avión es que yo tengo retroalimentación de posición de cada rueda, por lo que debería ser capaz de mantener las dos a la par. Puede que tengas razón y una vez más tenga que rendirme ante la evidencia y la voz de la experiencia, pero de momento no lo descarto.

Además, juraría que el amigo Dogflu implementó algún algoritmo parecido en su robot Miguelito. A ver si asoma por aquí y nos cuenta cómo funcionaba.
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: RedPic en 27 de Junio de 2009, 05:31:41

Diego, la diferencia entre mi sistema y el de tu avión es que yo tengo retroalimentación de posición de cada rueda, por lo que debería ser capaz de mantener las dos a la par. Puede que tengas razón y una vez más tenga que rendirme ante la evidencia y la voz de la experiencia, pero de momento no lo descarto.


Yo también tenía retroalimentación, las RPM reales de cada pala girando con un sensor IR.

Si las RPM de ambas eran iguales teóricamente ofrecerían el mismo empuje, y eso era falso. Con las mismas RPM cada pala ofrecía un empuje distinto.

Así que las trimé para que con dos RPM distintas ofreciesen un empuje igual, o sea que equilibré los empujes modificando sus regímenes de giro.  :mrgreen:
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: dogflu66 en 27 de Junio de 2009, 23:10:34
La verdad es que no puedo ayudar mucho. Hice las pruebas para corregir el problema y no me fueron mal, tan solo me limitaba a penalizar la rueda que iba más rápida. Programaba un número determinado de rpm a una rutina principal y otra en segundo término más simple de supervisión que se activaba si había desfase entre los puntos acumulados de los encoder de las ruedas y, lo que hacía era simplemente penalizar a la rueda que más puntos llevaba hasta igualar los puntos acumulados. Por lo tanto ambas ruedas siempre hacían el mismo recorrido y como te indican es fundamental que la mecánica este lo más simétrica posible. En mi caso al usar dos servos del mismo modelo y piezas lego conseguia una buena simetria. En realidad en estos casos por muy bien que se corrija el defecto por soft y se utilice una buena mecánica simétrica, es cuestión de recorrer mas metros para que se aprecie las perdidas, todo está que el error no sea apreciable en la distancia máxima en línea recta que pueda recorrer nuestro cacharro. Por ejemplo, mi bot limpiador da la sensación de que se desplaza completamente recto, pero es que a los pocos metros ya choca con algún obstáculo.
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: Nocturno en 28 de Junio de 2009, 18:54:35
Creo que casi lo tengo. Estuve ajustando los parámetros del PID y el resultado es bastante satisfactorio.
Aún tengo que pulir algún detalle, pero estoy contento.
De hecho se observa cómo a veces se desajusta un poco y él mismo corrige volviendo a la trayectoria original.
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: stk500 en 28 de Junio de 2009, 23:20:08
 :-/ :-/ Felicidades Maestro  :-/ :-/ ya se vez la luz de tu frijolito  :D :D

Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: Nocturno en 09 de Enero de 2010, 08:53:38
Gracias a los sabios consejos del maestro Bruno y a la ayuda en este hilo (Dudas PID (http://www.todopic.com.ar/foros/index.php?topic=28925.0)) he mejorado el PID, dejo vídeo:
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: Strepto en 09 de Enero de 2010, 11:31:27
Tiene muy buena pinta y parece que anda de perlas! Sigue asi!

Un saludo!
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: JCCC en 09 de Enero de 2010, 16:58:25
Hola amigos, este tema me parece interesante por los retos.
Teóricamente 2 motores de parámetros iguales, con la misma carga, con la misma alimentación de voltaje y en tu caso con 2 ruedas iguales deberían ir a la misma velocidad. Así que no tendrías problema (claro también digo que el piso es uniforme y rugoso).
En el video puedo ver que la batería ofrece más carga a un motor que a otro y que lo corregiste en el segundo video, ya va más cerca al C.G. de tu plataforma, al ofrecer más carga a un motor generas un desequilibro que tal vez afecte tu rueda loca (habría que ver qué tipo de rueda loca usas) también generas que una rueda tenga más agarre que la otra rueda y puede afectar el resultado dependiendo del tipo de suelo.
Todos estos problemas lo puedes solucionar con el método de prueba y error, considerando que tu planta es invariante en el tiempo, consideras diferentes voltajes para las ruedas (porque cada motor es una planta diferente) puedes llegar a encontrar 2 valores de voltajes diferentes que hagan que tu plataforma vaya en línea recta y es lo que creo que buscas.
En tu control PID buscas que las 2 ruedas giren a la misma velocidad pero 2 ruedas a la misma velocidad no garantizan que tu plataforma ira en línea recta, tal vez se vea afectada por el peso de la batería, por la rueda loca (todo eso lo tienes que modelar o interpretar para que consideres que son variables despreciables).
Lo que sería interesante seria diseñar el control para una plataforma variable (en peso, Centro de Gravedad y Masa, tal vez tamaño de llantas) el gran reto :P
Espero que estos consejos te sirvan…
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: Nocturno en 09 de Enero de 2010, 18:32:10
Muchas gracias por los consejos. Estoy de acuerdo con bastantes cosas, pero discrepo con una de ellas: si las dos ruedas van a la misma velocidad, y no hay derrapes, necesariamente se moverá en linea recta.
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: BrunoF en 09 de Enero de 2010, 19:47:41
Me alegro mano que ya responda bien el programa a bajas velocidades.

P.D. No trates tan mal al pobre catalogo...:D
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: Nocturno en 24 de Enero de 2010, 16:45:58
He seguido depurando el algoritmo para que autocorrija la dirección ante las adversidades que encuentre en el camino, garantizando así que mantiene la línea recta.
Al final del vídeo se puede observar cómo corrige incluso agresiones externas  :D

Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: stk500 en 24 de Enero de 2010, 16:59:36
 :D :osea que transportando la leche de tu hijo :D :D
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: MGLSOFT en 24 de Enero de 2010, 17:00:20
Excelente!!

Una pregunta:
Como fijas el rumbo y como lo mantienes??
No vi esa explicacion en ningun lado...
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: Nocturno en 24 de Enero de 2010, 17:08:27
:D :osea que transportando la leche de tu hijo :D :D

Jaja, sí, es que necesitaba lastrarlo con 6.5Kg por necesidades de diseño y no encontré nada mejor.

Excelente!!

Una pregunta:
Como fijas el rumbo y como lo mantienes??
No vi esa explicacion en ningun lado...

El rumbo es línea recta. Lo mantengo cuando veo que una rueda ha girado más que la otra; es sencillo  :D
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: BrunoF en 24 de Enero de 2010, 17:22:13
Grande Mano!

Ya lo tienes!
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: Leon Pic en 24 de Enero de 2010, 18:31:02
Felicitaciones Manolo por el logro obtenido. Me dio impresión como estaba el eje del robot, pero veo que lo aguantó muy bien.

Por cierto, MGLSOFT se refiere como logra que vuelva al rumbo anterior. En el vídeo se ve que le cambias el rumbo. Aquí podría optar por seguir en línea recta pero vuelve al curso anterior.
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: MGLSOFT en 25 de Enero de 2010, 08:24:29
Asi es, Leon lo explico mejor... :mrgreen: :mrgreen:
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: Nocturno en 25 de Enero de 2010, 08:26:32
Pues es como digo: en teoría en línea recta las ruedas avanzan al mismo ritmo.
Si la controladora ve que una se adelanta a la otra, la frena hasta que empatan de nuevo.
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: dogflu66 en 25 de Enero de 2010, 09:05:50
Se ve muy bien el control. :-)
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: Strepto en 25 de Enero de 2010, 11:28:45
Muy buen curro! Si es que al final va a ir recto hasta cuando le queramos torzer!  :D

Un saludo!
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: PFER90 en 28 de Noviembre de 2012, 19:33:00
Por favor Nocturno, podrías subir algún esquemático y el programa para experimentar. Tengo la idea de hacer una cortadora de césped automática. Estaría bueno si la hicieramos entre todos ya que plantea varios desafíos. Tu logro tal vez solucione el tema de mantener una linea recta para que el corte sea prolijo y no deje lineas sin cortar.
Muchas gracias y felicitaciones
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: Nocturno en 29 de Noviembre de 2012, 03:56:50
Hola Peer, el algoritmo del movimiento forma parte de un proyecto comercial y no puedo publicarlo, pero no tendré inconveniente en ayudarte en lo que necesites.
Básicamente mi algoritmo se trata de un control PID para cada motor en el que el error depende de la velocidad y de la diferencia de avance de cada rueda. Así, cuando una adelanta a la otra, automáticamente se frena hasta que ambas se igualan.
Título: Re: Movimiento en línea recta: ¿cuál es la mejor estrategia?
Publicado por: Nocturno en 25 de Septiembre de 2014, 02:29:16
Estos fueron los motores que utilicé
http://www.superrobotica.com/S330100.htm