Diseñar un servocontrolador LQR en Simulink
Este ejemplo muestra el diseño de un servocontrolador LQR en Simulink® utilizando una aplicación de piloto automático de una aeronave.
Abra el modelo de la aeronave.
open_system("lqrpilot")
En este modelo:
El bloque
Linearized Dynamics
contiene el fuselaje linealizado.sf_aerodyn
es un bloque S-Function que contiene las ecuaciones no lineales para .La señal de error entre y se pasa por un integrador, que ayuda a llevar el error a cero.
Abrir el modelo también carga el archivo MAT lqrpilotData
, que contiene los siguientes datos.
Matrices de ecuaciones de estado
A
yB
Matriz de estado linealizada
A15
Matriz de ganancia final LQG
K_lqr
Ecuaciones del espacio de estados de la aeronave
La ecuación es la ecuación de estados estándar de un sistema de espacio de estados.
Para el sistema de la aeronave, el vector de estado es el siguiente.
Las variables , y son las tres velocidades con respecto a la estructura, como se muestra en la siguiente figura.
Las variables y son las velocidades de alabeo y cabeceo. , y son las tasas de alabeo, cabeceo y guiñada, respectivamente.
La dinámica del fuselaje no es lineal. La siguiente ecuación muestra los componentes no lineales añadidos a la ecuación de espacio de estados, donde es la aceleración debida a la gravedad.
Cálculo de puntos de equilibrio
Con el objetivo de diseñar el LQG, los puntos de equilibrio de la dinámica no lineal se calculan en y , , y se establecen en cero. Dado que , y no afectan al término no lineal de la ecuación anterior, el resultado es un modelo linealizado en torno a con todos los estados restantes establecidos en cero.
El script lqrdes
muestra cómo calcular el modelo linealizado A15
en este punto de funcionamiento para el que se han calculado los puntos de equilibrio.
Definición del problema
El objetivo del diseño es realizar un giro coordinado estable, como se muestra en esta figura.
Para lograrlo, debe diseñar un controlador que ordene un giro estable pasando por un alabeo de 60°. Además, supongamos que el ángulo de cabeceo debe permanecer lo más próximo posible a cero.
Resultados
El script lqrdes
muestra cómo calcular la matriz de ganancia LQG K_lqr
.
En el modelo lqrpilot
, asegúrese de que el bloque Switch está configurado para seleccionar la salida del bloque Nonlinear Dynamics.
Ejecute el modelo.
sim("lqrpilot")
Vea la respuesta del alabeo a un cambio de escalón de 60°. El sistema realiza el seguimiento del alabeo en unos 60 segundos.
open_system("lqrpilot/phi (roll angle)")
Vea el ángulo de cabeceo . El controlador ha sido capaz de mantener un ángulo de cabeceo relativamente pequeño.
open_system("lqrpilot/theta (pitch angle)")
Por último, vea las entradas de control.
open_system("lqrpilot/Control Inputs")
Puede ajustar los valores Q y R en el script lqrdes
para probar diferentes diseños potenciales. Además, puede comparar simulaciones de la dinámica del sistema lineal y no lineal para ver los efectos de las no linealidades en el rendimiento del sistema.