El robot nunca va derecho

19

Estoy usando 2 motores DC idénticos y una rueda giratoria. Los motores están conectados al controlador de motor L293D y están controlados por RPi .

El robot no va en línea recta. Se desvía a la derecha. Estoy ejecutando ambos motores al 100% PWM .

Lo que traté de corregir el error:

  1. Ajusté el PWM de la rueda yendo más rápido al 99% , pero el robot simplemente gira hacia el otro lado;
  2. Ajusté el peso del robot y el problema aún persiste.

Una vez intenté hacer funcionar el motor sin ninguna carga. ¿Es esa la causa de esto, como más tarde me dijeron que, hacer funcionar un motor de CC sin ninguna carga los daña?

Si esa no es la causa, dígame cómo resolver este problema sin usar ningún sensor para controlarlo.

Ratón
fuente
En una configuración de unidad diferencial que imagino es lo que usa, es muy probable que esto suceda. Una pequeña diferencia entre los dos motores hará que el robot gire.
Demetris
44
Bienvenido al control de bucle abierto. Necesita sensores propios (sus ojos) para detectar el problema usted mismo, ¿cómo cree que el robot podrá detectarlo sin sensores adicionales? Cerrar el circuito de control con sensores es el camino a seguir.
Unidad de doblado 22 de
1
Los motores paso a paso pueden funcionar si desea evitar los sensores.
@bdares: si no hay sensores, ¿cómo sabe el robot cuándo corregir el rumbo? Si una rueda golpea un área de baja fricción (polvo, por ejemplo) y se desliza, el robot gira y nunca corregirá.
Chuck
Cuando dice que no hay sensores, ¿podría significar que no hay sensores externos o también está excluyendo los codificadores en las ruedas? porque esa es la solución típica a este problema.
JamesRyan

Respuestas:

29

Estoy publicando esto como respuesta porque es la respuesta.

No puedes

Como @ BendingUnit22 menciona, está intentando el control de "bucle abierto". El ruido y las variaciones significarán que su robot nunca conducirá una línea perfectamente recta.

Los motores podrían tener diferentes resistencias de bobinado (diferentes corrientes de transmisión / torque), las ruedas podrían tener diferentes tamaños, las ruedas podrían tener diferentes características de tracción, el rodamiento podría ser "rígido", la rueda podría no estar perfectamente recta cuando el vehículo arranque , el piso puede tener diferentes características de fricción superficial (léase: polvo o alfombra): la lista sigue y sigue.

La única forma de dar cuenta de las cosas que están fuera de su control (lo que menciono arriba y más) es usar sensores de retroalimentación.

Puede intentar obtener un mejor rendimiento de bucle abierto corrigiendo los problemas que enumeré, pero hay aún más y simplemente no puede controlar todo.

Chuck
fuente
55
¡Exactamente! El problema radica en la afirmación "Estoy usando 2 motores de CC idénticos". Nunca son perfectamente idénticos, y como @Chuck menciona, hay muchas otras consideraciones. Lo único seguro en robótica es que surgirán errores y ruidos.
Ryan Loggerythm
2
El uso de dos ruedas en el mismo eje aún debería arrojar resultados mucho mejores que simplemente usar dos del mismo motor, ¿no?
John Dvorak
@ JanDvorak: no estoy completamente seguro de lo que quieres decir cuando dices "Dos ruedas en el mismo eje", pero creo que se entiende / implica que las dos ruedas están en el mismo eje geométrico. Si te refieres al mismo eje de control (como en un motor) o eje (lo que nuevamente implica un motor), entonces señalaría que no es posible realizar una dirección de transmisión diferencial con un eje bloqueado. Para que un motor controle ambas ruedas a diferentes velocidades se requiere un diferencial (y otro equipo), y el diferencial efectivamente divide el eje en dos piezas y usted está de vuelta en el cuadrado.
Chuck
Me refería a un eje, lo siento. ¿No sabía que había un requisito para poder ir no derecho?
John Dvorak
2
@ JanDvorak - Creo que el robot de OP es un vehículo de estilo micromouse. Incluso si solo tuviera que ir en línea recta y usara un eje, todas las otras fuentes de error seguirían siendo válidas. Si una rueda es 0.1% más grande en diámetro que la otra, entonces viajará una longitud de camino que es 0.1% más lejos que la llanta más pequeña por revolución . Digamos, por ejemplo, que el tamaño nominal de la rueda es de 10 cm y el espacio entre ruedas es de 10 cm. El neumático más grande mide 10.01 cm y viaja 0.0314 cm más por revolución . Para la base de la rueda, el robot gira 0.12 grados por revolución de la rueda . 0,01 cm podrían ser fácilmente del polvo en un neumático.
Chuck
6

Como ya se mencionó el problema del bucle abierto-cerrado, haré un comentario al "Una vez intenté ejecutar un motor de CC sin carga".
Sí, puede dañar su motor con esto, pero también puede dañar o destruir su motor con una carga. La destrucción proviene de la temperatura actual y resultante. Si no hay humo y algún olor obvio proveniente del motor, lo más probable es que no esté dañado. Según mi experiencia, puedo decir que los motores de corriente continua a escala hobby comenzarán a degradarse a temperaturas superiores a los 100 ° C. Y definitivamente notarás tales temperaturas

EDITAR:
Pensé en esto otra vez y podría tener una idea de la que tu colega podría haber estado hablando. Hay un tipo especial de motor de corriente alterna. Estos son motores síncronos no excitados. Básicamente están construidos para la autodestrucción. Si los enciendes, comenzarán a acelerar hasta que se desmonten. Pero si coloca una carga pesada sobre ellos, no pueden alcanzar este estado, solo por el gran momento que tienen que aplicar a la carga. Para que pueda usarlos con fines razonables. De todos modos, definitivamente no tiene un motor como este en su aplicación.

TobiasK
fuente
1
También creo que, especialmente con los motores de pasatiempo, cuando lo calientas lo suficiente como para notar que hace calor o huele raro, probablemente ya hayas quemado el aislamiento de los devanados. Al igual que muchos equipos eléctricos, funciona bien o está roto. No hay muchos casos intermedios.
Chuck
No había tal humo ni ningún daño visible. Entonces, tal vez no esté dañado, ya que lo ejecuté durante menos de medio minuto.
Ratón
2

Lo que está describiendo se llama control de bucle abierto, y para hacer esto necesita dos motores que sean exactamente iguales, dos ruedas exactamente iguales, el centro de gravedad del robot para estar en el centro entre las ruedas, un circuito eléctrico simétrico perfecto, y finalmente una superficie nivelada uniforme perfecta para correr.

Para lograr esto, normalmente ordena decenas o cientos de cada parte, y luego realiza pruebas significativas para encontrar dos motores que sean los más similares entre sí en términos de potencia y velocidad frente a voltaje y PWM. Haga lo mismo para las ruedas, los controladores del motor y otras partes.

Este proceso se llama binning: después de estas pruebas, los clasifica según su capacidad o características. Se considera mucho más costoso, tanto en tiempo como en recursos, hacerlo correctamente que cambiar a un modelo de circuito cerrado, y ni siquiera tiene en cuenta las malas condiciones del suelo.

Sin embargo, es una forma de cumplir sus requisitos sin sensores adicionales.

Adam Davis
fuente
1

Aunque nunca será perfecto, puede haber una forma simple de hacerlo más directo.

Si al 100% -100% el automóvil siempre gira a la izquierda, y al 100% -99% el automóvil siempre gira a la derecha, debería ser capaz de mejorar eso probando valores intermedios.

Comience con 100% -99.5% y continúe con 100% -99.75% o 100% -99.25% dependiendo del resultado. Esto pronto debería converger a una situación en la que irá directamente 'en promedio'.

Dennis
fuente
0

Bueno, si el problema no radica en las diferencias en hardware o software para cada rueda, entonces probablemente sea un problema con imperfecciones naturales en la forma en que construyó el robot o en la forma en que se produjeron los motores. Es posible que las conexiones no sean sólidas o que el RPI no genere la misma corriente. Probablemente quieras usar controladores de velocidad. Intenta eso primero.

Si eso no funciona, su fabricante probablemente no hizo motores idénticos y probablemente solo tendrá que calibrar los motores. Podría significar escalar el valor del motor más fuerte para que el 100% de la potencia del motor fuerte coincida con el débil.

media papa
fuente
2
El uso de controladores de motor idénticos no resolverá el problema en cuestión. El problema radica en el núcleo de la robótica, que es "¿cómo corrijo el error?"
Ryan Loggerythm
He oído que los motores de corriente continua pueden funcionar un poco más lentamente hacia adelante y hacia atrás. Además, cualquier desequilibrio en el peso puede causar un cambio hacia un lado. Sin mencionar otras cosas como la fricción, etc. Hacer algo "idéntico" no funcionará. Los steppers pueden hacerlo un poco mejor, pero entonces no deberías conducir demasiado rápido ni nada ...
Paul
-2

Las ruedas con motores de corriente continua deben estar en la parte delantera. Y rueda coster en la espalda. Luego se moverá en línea recta solo hacia adelante

Arslan
fuente
Bienvenido a Robotics Arslan. En Stack Exchange buscamos respuestas integrales que brinden alguna explicación y contexto. Las respuestas muy cortas no pueden hacer esto, así que edite su respuesta para explicar por qué es correcta, idealmente con citas. Las respuestas que no incluyen explicaciones pueden eliminarse.
Mark Booth