Main Content

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 (θ,ϕ)=(0,15).

  • La señal de error entre ϕ y ϕref 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 y B

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

x˙=Ax+Bu

Para el sistema de la aeronave, el vector de estado es el siguiente.

x=[u,v,w,p,q,r,θ,ϕ]T

Las variables u, v y w 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. p, q y r 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 g es la aceleración debida a la gravedad.

x˙=Ax+Bu+[-gsinθgcosθsinϕgcosθcosϕ000qcosϕ-rsinϕ(qsinϕ+rcosϕ)tanθ]

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 ϕ=15 y p, q, r y θ se establecen en cero. Dado que u, v y w no afectan al término no lineal de la ecuación anterior, el resultado es un modelo linealizado en torno a (θ,ϕ)=(0,15) 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.

Temas relacionados