¿Cuál es el enfoque correcto para escribir el controlador de giro para un robot de fútbol?

14

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));  
        }
    }
}

correctiones un rango en el que el robot no tiene movimiento. degreees un número entre -127 y 128 que se devuelve desde la brújula. motorSpeedes un número entre 0 y 255 que se aplica al PWM.

Miro Markaravanes
fuente
Presumiblemente, esta rutina se ejecuta cada vez que el compas genera un nuevo valor para degree?
Mark Booth
@ MarkBooth Tengo mi código en un momento (1), por lo que en cada ciclo obtiene el valor de la brújula, lo da a la función y luego aplica el resultado a los motores.
Miro Markaravanes
Investigaría qué tipo de controlador utiliza un servo, ya que está tratando de duplicar el comportamiento del servo en el software.
Chris Laplante
Yo no uso servos. Yo uso motores paso a paso, por lo que no existe tal comportamiento en el motor.
Miro Markaravanes
2
Hola Miro, en el intercambio de pila es mejor editar tu pregunta en respuesta a las preguntas en los comentarios, de esa manera los comentarios se pueden ordenar (eliminar) para que no se distraigan de la pregunta en sí.
Mark Booth

Respuestas:

7

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 correctionvalor, ya que si el correctionvalor 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.

Mark Booth
fuente
8

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 ...

Njdart
fuente
1
Gracias por tu respuesta. Quería aceptar la respuesta pero me gustaría ver más respuestas, así que aceptaré cuando haya más respuestas;)
Miro Markaravanes