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


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.


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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.