Imagina programar un robot de fútbol de 3 ruedas. ¿Qué tipo de controlador usarías para girarlo? ¿PAG? PID?
El objetivo de este controlador es que debe hacer que el robot se pare en un ángulo definido (0 grados) y retroceda si lo gira con la mano u otro robot.
¡Utilizo motores paso a paso para mi robot y no servos, así que necesito implementar esto en mi software!
Ya he escrito un controlador de tipo P de muestra y el movimiento es bastante bueno. Pero me gustaría mejorarlo si es posible. El código es el siguiente:
void spinSpeed(int devidedValue, int addedValue, int correction) {
if(degree<correction && degree>-correction) {
motorSpeed = 0;
} else {
if(degree > 0) {
motorSpeed = ((degree)/(devidedValue) + (addedValue));
} else {
motorSpeed = ((degree)/(devidedValue) - (addedValue));
}
}
}
correction
es un rango en el que el robot no tiene movimiento.
degree
es un número entre -127 y 128 que se devuelve desde la brújula.
motorSpeed
es un número entre 0 y 255 que se aplica al PWM.
degree
?Respuestas:
Lo importante para recordar acerca de un ciclo de control PID es que cada término está destinado a dominar el control en diferentes momentos durante un movimiento.
El término proporcional está destinado a dominar y proporcionar un mayor par (o en su caso, la velocidad) cuanto más lejos esté de su posición de destino.
El término derivado está destinado a dominar durante la fase de 'crucero' de su movimiento trapezoidal típico. Ayuda a reinar un término proporcional muy alto y a limitar la aceleración fuera de control cuando está lejos de su destino, pero también puede ayudar a aumentar la velocidad a la que converge en su destino cuando se acerca y el término proporcional contribuye mucho menos .
Si está utilizando un controlador de velocidad en lugar de un controlador de par, entonces el término derivado puede estar oculto dentro de su controlador de velocidad y no ser directamente accesible a su circuito PID. Esto puede hacer que el control sea más simple (por lo general, acelerará tan rápido como pueda hasta la velocidad deseada o la velocidad máxima, la que sea menor), pero también puede hacer que sea menos predecible. A menudo, un término D (o P) demasiado agresivo puede dar lugar a un ciclo límite (a menudo llamado incorrectamente resonancia u oscilación debido al sonido de los motores zumbando o incluso gritando en este estado, aunque el ciclo límite es una descripción mucho más precisa) )
El término integral está ahí para corregir el error residual de estado estable , que es donde hay una diferencia persistente a largo plazo entre dónde se le pide que vaya y dónde se encuentra realmente. Su valor actual
correction
(realmente solo tolerancia) funciona como lo opuesto a un término integral, corta el motor por completo cuando está dentro de una banda muerta alrededor de la posición deseada.Debido a estos factores, obtendrá poco al implementar un bucle PID completo a menos que también planifique en un perfil de velocidad con distintas fases de aceleración, crucero y desaceleración.
También tenga en cuenta que la banda muerta y la falta de término I significarán que la posición final siempre será algo aleatoria y probablemente diferirá dependiendo de la dirección en la que se acerque a la posición deseada. Como tal, su repetibilidad bidireccional podría ser mucho peor que su repetibilidad estándar.
Para obtener más información sobre la diferencia entre precisión, repetibilidad y resolución, consulte esta excelente descripción . En su caso, su resolución es su sensor de brújula, mientras que la precisión y la repetibilidad probablemente estén limitadas por su
correction
valor, ya que si elcorrection
valor es mayor que la resolución de su brújula, está desechando parte de su precisión posicional a cambio de poder apague el motor cuando esté cerca.fuente
Un controlador PID sería lo mejor, usar una brújula es una tarea relativamente sencilla de obtener el rumbo de su robot y compararlo con el rumbo que desea lograr, y usar algunas técnicas de ajuste PID para lograr un movimiento de giro suave para Su rumbo deseado. Este enfoque también se puede aplicar a la rotación en una cantidad determinada con precisión.
Ya he hecho algo de robótica en este campo, esto es lo que usamos en nuestro robot, haciendo una tarea no muy diferente a la tuya ...
fuente