Estoy haciendo un proyecto que requiere que implemente un sistema de control de crucero en un auto RC usando un GPS para retroalimentación.
He implementado controladores PID anteriormente, pero esto es un poco nuevo para mí porque en lugar de generar un delta de corrección como -8 o +6, el controlador debe generar un valor de 0 a 100, siendo 100 tan rápido como el coche puede irse, y 0 es un punto muerto.
Al principio, intenté usar una solución en la que mantuve una cuenta corriente del acelerador actual y simplemente le agregué el mv del controlador PID. Esto se convirtió en un gran problema porque la variable "currentThrottle" se convirtió esencialmente en un segundo integrador y con frecuencia se liquidaba cuando el automóvil no respondía lo suficientemente rápido.
Una limitación de este proyecto es que no puedo modificar el algoritmo utilizado para generar el delta de corrección PID, pero puedo hacer lo que quiera con el punto de ajuste y mv antes / después de que se genere la corrección PID:
(int)cruiseControl.CalculateCorrection(8, rmc.Speed);
Donde 8 es el punto de ajuste (8kts) y rmc.La velocidad es la velocidad actual. Esto devolverá el delta de corrección calculado a partir de las variables PidConfig (Kp, Ki, Kd, control de conclusión del integrador, etc.) cuando construí el objeto PidController.
¿Alguna idea?