¿Cómo ajustar el controlador PID para la servodirección?

0

Estoy tratando de diseñar un controlador PID para un auto de auto conducción. El controlador funciona con el servomotor de dirección y ayuda a que el automóvil se mantenga en el centro de una ruta bien definida.

Como no tengo un modelo matemático, estoy usando el método ziegler nichols para ajustar mi controlador.

Comencé estableciendo el ki y el kd en cero y subiendo mi kp hasta que el servomotor comience a girar hacia la izquierda y hacia la derecha. (Creo que esta es la oscilación que estoy buscando, no estoy seguro)

El valor Kp con el que terminé es .03.

Luego me moví a tuning kd; Noté que si establecía que kd era un valor positivo, superaba el kp, así que lo establecí en un pequeño número negativo. Kd = -0.00001 eliminó el exceso que estaba viendo.

Mi pregunta es ¿por qué obtengo valores tan pequeños y negativos? ¿Esto no afectará mi estabilidad? ¿Hay alguna otra forma de ajustar rápidamente el controlador pid? También por oscilación significa que el servo va de izquierda a derecha?

int target = 50, input=0;
float kp=0.03, kd=-0.00001, ki=0;
float error, previousError=0, derivative=0, integral=0;

while(1){

input = getInput();

//caluculate error
error = target - input;
//caluculate integral
integral += error;
//calculate derivative
derivative = error - previousError;
//calculate output
output = (kp*error) + (kd * derivative) + (ki * integral)
previousError = error;

SetServo(output);
}
    
pregunta ex080

0 respuestas

Lea otras preguntas en las etiquetas