Saltar al contenido
Control Automático Educación

Control por Realimentación de Estados

En esta ocasión vamos a aprender paso a paso con teoría, ejemplos y videos como realizar un control por realimentación de estados aplicados a sistemas dinámicos lineales en la teoría del control.

Antes de comenzar mira las otras entradas sobre Variables de Estados para que entiendas mejor los conceptos.

Suscribete al canal de YouTube para que sigas aprendiendo más sobre estos temas de la teoría del control moderno.

Qué es la Realimentación de Estados?

Entendamos cuál es el efecto que causa realizar una realimentación de estados en nuestro sistema y como esta irá a afectar los polos del mismo.

Como ya sabemos los polos gobiernan en gran medida la dinámica del proceso.

Representación en Función de Transferencia

Comencemos considerando un sistema en lazo abierto, donde inicialmente vamos a considerarlo en su representación de función de transferencia multiplicado por una ganancia k, como puede ser observado a continuación, demostrando que la dinámica efectivamente la gobiernan los polos:

Lazo Abierto Función de Transferencia
Sistema en Lazo Abierto representado por Función de Transferencia

Sin embargo, al momento de realizar una realimentación negativa:

Realimentación Negativa Función de Transferencia
Realimentación Negativa de la Función de Transferencia

La función de transferencia del diagrama de bloques en lazo cerrado vendría dada por:

\dfrac{Y(s)}{R(s)}=\dfrac{G(s)}{1+kG(s)}

Vemos que, en este caso, la ganancia k aparece en el polinomio del denominador (función característica) por lo tanto ahora esa ganancia tiene la capacidad de poder alterar los polos del sistema.

Tomando como ejemplo, un sistema de segundo orden cualquiera:

G(s)=\dfrac{b_0s}{s^2+a_1s+a_2}

Si colocamos esa función de transferencia dentro de la función de transferencia en lazo cerrado:

\dfrac{Y(s)}{R(s)}=\dfrac{\dfrac{b_0s}{s^2+a_1s+a_2}}{1+k\dfrac{b_0s}{s^2+a_1s+a_2}}

\dfrac{Y(s)}{R(s)}=\dfrac{b_0s}{s^2+(kb_0+a_1)s+a_2}

En este caso PARTICULAR, notemos que la ganancia k para este sistema solo afectaría el coeficiente del medio del sistema en lazo abierto (a_1), sin embargo, no afecta el tercer coeficiente (a_2).

En consecuencia simplemente alterando el parámetro k, no hay posibilidad de escoger la ecuación característica del sistema, dado a que solo contamos con UN SOLO grado de libertad k para modificar este comportamiento y tenemos en este caso 2 coeficientes que deben ser alterados.

Por lo tanto, necesitamos encontrar la forma de PODER modificar todos los coeficientes (que alteran las raíces) de la ecuación característica.

Representación en Variables de Estado

En primer lugar, partiendo de la idea que solo queremos realizar regulación en nuestro sistema de control, o sea rechazar toda posible perturbación y mantener estable el sistema (referencia igual a cero)

Por lo que representando el sistema en variables de estado:

\dot{x}(t)=\mathbf{A}\vec{x}(t)+\vec{b}u(t)

y(t)=\vec{c}^T\vec{x}(t)

Sistema en Variables de Estado
Sistema SISO en Variables de Estado

Podremos partir de la suposición que tuvo Rudolf Kalman en su articulo de 1960, donde aplica que el principio propuesto por Richard Bellman, que en 1950 dijo que las entradas del sistema deben ser computadas usando el vector de estados.

Kalman partió de esta idea para la ley de control como una función del estado:

u(t)=k(\vec{x}(t),t)

entonces comenzó realizando unas suposiciones donde la función no dependería del tiempo y que podría ser una función lineal, donde para indicar la realimentación negativa se coloca el menos al frente de k:

u(t)=-k\vec{x}(t),\ \vec{x}\in\Re^n,\ k\in\Re^{1\times n}

Como resultado, el producto entre una fila y una columna se obtiene un escalar (ley de control) para el caso SISO.

\dot{x}(t)=\mathbf{A}\vec{x}(t)-\vec{b}k\vec{x}(t)

\dot{x}(t)=(\mathbf{A}-\vec{b}k)\vec{x}(t)

\dot{x}(t)=\mathbf{\tilde{A}}\vec{x}(t)

donde:

\mathbf{\tilde{A}}=\mathbf{A}-\vec{b}k

En consecuencia, los autovalores de \mathbf{\tilde{A}} comienza a dominar la dinámica del nuevo sistema el cual es dependiente de la ganancia k

Como la ganancia k afecta al sistema

Si comparamos esto con el primer ejemplo, vamos a notar inicialmente que en lugar de realimentar la salida del sistema, se está realimenta los estados y con eso, en lugar de tener una única ganancia k, ahora pasamos a tener un vector de ganancias k.

G(s)=\dfrac{b_0s}{s^2+a_1s+a_2}

Representando el sistema en la forma canónica controlable:

\dot{\vec{x}}=\begin{bmatrix}-a_1 & -a_2\\1 & 0\end{bmatrix}\vec{x}

y=\begin{bmatrix}b_0 & 0\end{bmatrix}\vec{x}

aplicando la realimentación de estados:

\dot{x}(t)=(\mathbf{A}-\vec{b}k)\vec{x}(t)

\dot{\vec{x}}(t)=\begin{bmatrix}-a_1-k_1&-a_2-k_2 \\1 & 0\end{bmatrix}\vec{x}(t)

De esa forma, se vuelve factible poder modificar las n raíces de la ecuación característica de nuestra función de transferencia.

Lo más importante, es entender que para poder modificar el comportamiento dinámico del sistema es necesario que el par \mathbf{A},\ \vec{b} sean totalmente controlables.

Seguimiento de Referencia

Por otro lado, si deseo seguir una referencia, basta con agregar la referencia a la ecuación de la ley de control:

u(t)=-k\vec{x}(t)+r(t)

Que nuevamente, en la representación de variables de estado vendría dado por:

\dot{x}(t)=(\mathbf{A}-\vec{b}k)\vec{x}(t)+\vec{b}r(t)

Realimentación de Estados con Referencia
Realimentación de Estados con Referencia

Representación Entrada Salida

Viendo la función de transferencia de lazo cerrado de nuestro sistema de realimentación de estados tenemos que:

Partiendo de la ecuación para transformar EE a FT

G(s)=\vec{c}(s\mathbf{I}-\mathbf{A})^{-1}\vec{b}

La FT en lazo cerrado vendría dada por:

G_{LC}(s)=\vec{c}(s\mathbf{I}-(\mathbf{A}-\vec{b}k))^{-1}\vec{b}

Regulación – Realimentación de Estados

En el problema de regulación solo se está interesado en establecer una trayectoria del sistema, o rechazar perturbación o estabilizar la plantal

\dot{x}(t)=(\mathbf{A}-\vec{b}k)\vec{x}(t)

En este punto es importante entender los conceptos de controlabilidad y observabilidad de un sistema.

Ya sabemos que la dinámica del sistema está dominada por los autovalores de (\mathbf{A}-\vec{b}k)

Para el caso de la controlabilidad del sistema tenemos que si el par (\mathbf{A}-\vec{b}k,b) es controlable si y solamente si el par (\mathbf{A},\vec{b}) es controlable.

Controlabilidad

Para demostrar este teorema podemos partir de un sistema de orden 4, n=4

donde la matriz de conrolabilidad suponemos es de rango completo (\rho) dado por:

\mathbb{C}=\begin{bmatrix}\vec{b} & \mathbf{A}\vec{b}& \mathbf{A}^2\vec{b} & \mathbf{A}^3\vec{b}\end{bmatrix},\ \rho(\mathbb{C})=4

Pero en este caso se analiza la matriz de controlabilidad con la ley de control de realimentacion de estados:

\mathbb{C}_f=\begin{bmatrix}\vec{b} & (\mathbf{A}-\vec{b}k)\vec{b}& (\mathbf{A}-\vec{b}k)^2\vec{b} & (\mathbf{A}-\vec{b}k)^3\vec{b}\end{bmatrix}

La matriz anterior es posible dividirla en dos componentes que tendrá la forma de la matriz de controlabilidad de lazo abierto multiplicado por una matriz triangular superior:

\mathbb{C}_f=\underset{\rho(\cdot )=4}{\underbrace{\begin{bmatrix}\vec{b} & \mathbf{A}\vec{b}& \mathbf{A}^2\vec{b} & \mathbf{A}^3\vec{b}\end{bmatrix}}}\underset{\rho(\cdot )=4}{\underbrace{\begin{bmatrix}1 & -k\vec{b} & -k(\mathbf{A}-\vec{b}k)\vec{b} & -k(\mathbf{A}-\vec{b}k)^2\vec{b}\\0 & 1& -k\vec{b} & -k(\mathbf{A}-\vec{b}k)\vec{b}\\0& 0& 1& -k\vec{b}\\0& 0& 0& 1\end{bmatrix}}}

Se evidencia que ambas matrices son de rango completo, la primera matriz obviamente es, dado que es la controlabilidad de lazo abierto y la segunda observemos que su determinante es 1, rango igual a 4, por lo tanto se muestra que la realimentación de estados preserva la controlabilidad del sistema.

Observabilidad

La obsevabilidad de estados por otro lado va a depender de la realimentación de estados utilizada en el sistema. Es decir que la realimentación de estados no siempre va a garantizar la obsevabilidad del sistema.

Un ejemplo típico donde podemos perder observabilidad es cuando el sistema no tiene una realización mínima (o sea que puede existir un cancelamiento dentre un polo y un cero) Por lo tanto si se modifica los autovalores del sistema para un cero va a existir un cancelamiento y si esto ocurre se pierde la observabilidad.

Ejemplo

Dado el siguiente sistema:

\dot{\vec{x}}=\begin{bmatrix}1 & 2\\3 & 1\end{bmatrix}\vec{x}+\begin{bmatrix}0\\1\end{bmatrix}u

y=\begin{bmatrix}1 & 2\end{bmatrix}\vec{x}

El sistema anterior expresado en función de transferencia:

G(s)=\dfrac{2s}{s^2 - 2 s - 5}

Con la siguiente ley de control, vamos a cancelar el cero en el origen que se puede observar en la función de transferencia anterior, para la respuesta en lazo cerrado del sistema:

u=-\begin{bmatrix}3 & 1\end{bmatrix}

\vec{x}=-3x_1-x_2

El sistema en lazo cerrado, reemplazando (\mathbf{A}-\vec{b}k):

\dot{\vec{x}}=\begin{bmatrix}1 & 2\\0 & 0\end{bmatrix}\vec{x}

y=\begin{bmatrix}1 & 2\end{bmatrix}\vec{x}

Veamos que los autovalores del sistema anterior, con esa ley de control, ubican un autovalor en cero, que tendrá eventualmente un cancelamiento:

\lambda=\begin{bmatrix}1\\0\end{bmatrix}

La matriz de observabilidad del sistema es dado por:

\mathbb{O}_f=\begin{bmatrix}1 & 2\\1 & 2\end{bmatrix}

Dado que el rango es diferente a la dimensión, se comprueba que para la ley de control seleccionada, el sistema no conserva la observabilidad.

\rho(\mathbb{O}_f)=1

Asignación de Polos – Caso 1

Una de las formas de proyectar la acción de control para obtener una dinámica deseada en lazo cerrado es ubicando los autovalores de la matriz A en una región deseada siempre y cuando dicho sistema sea controlable.

El método más sencillo de abordar este proyecto de control es utilizando la forma canónica controlable del sistema.

La cual parte de una función de transferencia expresada en la forma:

g(s)=\dfrac{y(s)}{u(s)}=\dfrac{\beta_1s^3+\beta_2s^2+\beta_3s+\beta_4}{s^4+\alpha_1s^3+\alpha_2s^2+\alpha_3s+\alpha_4}

Donde la forma canónica controlable (FCC) es:

\begin{bmatrix}\dot{x_1}(t)\\\dot{x_2}(t)\\\dot{x_3}(t)\\\dot{x_4}(t)\end{bmatrix}=\begin{bmatrix}-\alpha_1 & -\alpha_2 & -\alpha_3 & -\alpha_4\\1&0&0&0\\0&1&0&0\\0&0&1&0\end{bmatrix}\begin{bmatrix}x_1(t)\\x_2(t)\\x_3(t)\\x_4(t)\end{bmatrix}+\begin{bmatrix}1\\0\\0\\0 \end{bmatrix}u(t)

y(s)=\begin{bmatrix}\beta_1&\beta_2&\beta_3&\beta_4 \end{bmatrix}\vec{x}(t)

Observemos que la primera fila de la matriz A de la FCC pertenece a la ecuación característica del sistema (denominador de la función de transferencia en caso de ser controlable), donde recordemos que la ecuación característica es la encargada de definir los autovalores.

Si un sistema lineal de dimensión n es controlable, entonces existe una realimentación de estados que va a posicionar arbitrariamente los autovalores de la matriz (\mathbf{A}-\vec{b}k)

El lazo cerrado viene dado por:

\begin{bmatrix}\dot{x_1}(t)\\\dot{x_2}(t)\\\dot{x_3}(t)\\\dot{x_4}(t)\end{bmatrix}=\begin{bmatrix}-(\alpha_1+k_1) & -(\alpha_2+k_2) & -(\alpha_3+k_3) & -(\alpha_4+k_4)\\1&0&0&0\\0&1&0&0\\0&0&1&0\end{bmatrix}\begin{bmatrix}x_1(t)\\x_2(t)\\x_3(t)\\x_4(t)\end{bmatrix}+\begin{bmatrix}1\\0\\0\\0 \end{bmatrix}r(t)

Su ecuación característica por:

\Delta_f=s^4+(\alpha_1+k_1) s^3+(\alpha_2+k_2)s^2+(\alpha_3+k_3)s+(\alpha_4+k_4)

Ejemplo de Ubicación de Polos por Realimentación de Estados

Dada la siguiente función de transferencia:

G(s)=\dfrac{2}{s^2 + 3 s +1}

Donde su ecuación característica es:

s^2 + 3 s +1=0

y sus polos son:

s_1=-2.618,\ s_2=-0.382

Y su representación FCC:

\dot{\vec{x}}=\begin{bmatrix}-3& -1 \\1 & 0\end{bmatrix}\vec{x}+\begin{bmatrix}1\\0\end{bmatrix}u(t)

y(s)=\begin{bmatrix}0&2 \end{bmatrix}\vec{x}

Donde claramente podemos obtener los autovalores del sistema:

\Delta(\lambda)=det(\lambda \mathbf{I}-\mathbf{A})

\Delta(\lambda)=det\left( \begin{bmatrix}\lambda+3& 1 \\-1 & \lambda\end{bmatrix}\right)

\Delta(\lambda)=\lambda^2+3\lambda+1

\lambda_1=-2.618,\ \lambda_2=-0.382

De lo anterior comprobamos que los autovalores de la FCC son iguales a la ecuación característica del sistema, por lo tanto si se desea modificar la posición de los polos o los autovalores unicamente necesitamos modificar la primera fila de la matriz A del sistema FCC.

Aplicando una ley de control del tipo:

u(t)=-k\vec{x}

tenemos:

\dot{\vec{x}}=\begin{bmatrix}-3& -1 \\1 & 0\end{bmatrix}\vec{x}+\begin{bmatrix}1\\0\end{bmatrix}\begin{bmatrix}-k_1& -k_2 \end{bmatrix}\vec{x}

\dot{\vec{x}}=\left(\begin{bmatrix}-3& -1 \\1 & 0\end{bmatrix}-\begin{bmatrix}k_1 &k_2\\0&0\end{bmatrix}\right)\vec{x}

\dot{\vec{x}}=\begin{bmatrix}-3-k_1& -1-k_2 \\1 & 0\end{bmatrix}\vec{x}

Note que las ganancias k aparecen en todos los términos de la primera fila de la nueva matriz A de lazo cerrado del sistema.

Vamos a ubicar los polos para tener un tiempo de establecimiento de un 75% mas rápido que el lazo abierto y con un factor de amortiguamiento de \zeta=0.707 (en el código de matlab al final del post se muestra los cálculos) de esa forma nuestra ecuación caraterística viene dado por:

\Delta(\lambda)=\lambda^2+1.041\lambda+0.5425

Con esto podemos resolver el sistema de ecuaciónes para encontrar el valor del vector de ganancias k

Para la ganancia 1

-3-k_1=-1.041

k_1=-1.9585

Para la ganancia 2

-1-k_2=-0.5425

k_2=-0.4575

Con esto la ley de control es

u(t)=\begin{bmatrix}-1.9585& -0.4575 \end{bmatrix}\vec{x}

Y el sistema en lazo cerrado una vez implementado el control por realimentación de estados viene dado por:

\dot{\vec{x}}=\begin{bmatrix}-1.0415& -0.5425 \\1 & 0\end{bmatrix}\vec{x}

Esta realimentación de estados solo funciona en la forma canónica controlable, porque el vector de ganancias k solo modifica la ecuación característica del sistema.

Si el sistema esta representado de una forma diferente, el vector de ganancias k puede aparecer en cualquier parte de la matriz dinámica.

Para esos casos se procede a convertir el sistema a la forma canónica controlable utilizando el concepto de la transformación de similitud.

Código de implementación del control por asignación de polos en variables de estado al final de esta entrada.

Suscríbete a este sitio WEB para estar enterado de las nuevas entradas!

Ubicación de Polos por Formula de Ackerman – Caso 2

Cuando nos enfrentamos a un problema de control en variables de estado monovariable (SISO), otra de las formas de encontrar la matriz de ganancias K de la realimentación de Estados es Usando la formula de Ackerman.

Esta fórmula permite calcular directamente la matriz de ganancia de realimentación en el espacio de estados, a partir de la siguiente ecuación si el sistema está en la forma canónica controlable (FCC):

\mathbf{k}=\begin{bmatrix}0& 0 & … & 1\end{bmatrix}\ \ \mathbb{C}^{-1}\ \ \mathbf{\phi(A)}

donde \mathbb{C} es la matriz de controlabilidad del sistema y \mathbf{\phi(A)} viene dado por:

\mathbf{\phi(A)}=\lambda^n+\alpha_1\lambda^{n-1}+\alpha_2\lambda^{n-2}+…+\alpha_{n-1}\lambda+\alpha_n

siendo \alpha_1,\alpha_2,...,\alpha_n los coeficientes de la ecuación característica deseada.

Ejemplo en variables de estado de la formula de Ackerman

Realizar un control en variables de estado para el ejemplo del video anterior, donde la representación en el espacio de estados viene dado por:

\dot{\vec{x}}=\begin{bmatrix}0 & 1\\1 & 0\end{bmatrix}\vec{x}+\begin{bmatrix}1\\0\end{bmatrix}u

y=\begin{bmatrix}1 & 0 \end{bmatrix}\vec{x}

Procedemos a verificar la controlabilidad del sistema en espacio de estados:

\mathbb{C}=\begin{bmatrix}\vec{b} & \mathbf{A}\vec{b}\end{bmatrix}

\mathbb{C}=\begin{bmatrix}
1& 0 \
0 & 1
\end{bmatrix}
\rho(\mathbb{C})=2

Sistema es controlable dado que el rango de la matriz es igual a la dimensión.

Ecuación característica deseada del sistema representado en espacio de estado viene representado por:

\Delta_f(\lambda)=\lambda^2+7\lambda+3

Aplicando la Formula de Ackerman para encontrar la ganancia por realimentación de estados

\mathbf{k}=\begin{bmatrix}
0& 0 & ... & 1
\end{bmatrix}\ \ \mathbb{C}^{-1}\ \ \mathbf{\phi(A)}

donde a partir de la ecuación característica deseada de lazo cerrado se obtiene \mathbf{\phi(A)}

\mathbf{\phi(A)}=\begin{bmatrix}
0 & 1\
1 & 0
\end{bmatrix}^2+7\begin{bmatrix}
0 & 1\
1 & 0
\end{bmatrix}+3\begin{bmatrix}
1 & 0\
0 & 1
\end{bmatrix}=\begin{bmatrix}
4 & 7\
7 & 4
\end{bmatrix}

Solucionando:

\mathbf{k}=\begin{bmatrix}
0& 1 
\end{bmatrix}\ \ \begin{bmatrix}
1 & 0\
0 & 1
\end{bmatrix}^{-1}\ \begin{bmatrix}
4 & 7\
7 & 4
\end{bmatrix}
\mathbf{k}=\begin{bmatrix}
7& 4 
\end{bmatrix}

Código de implementación para el cálculo de la ganancia de realimentación de estados usando la fórmula de Ackerman en Matlab y Python al final de esta entrada.

Asignación de Polos – Caso 3

Veremos el procedimiento que debe ser aplicado en el caso de nuestro sistema NO estar en la forma FCC y al final comprobaremos el resultado con MATLAB.

Todo este procedimiento es ejecutado automáticamente por la función place de Matlab, y aquí vamos a entender que es lo que hace la función por dentro.

Suponga que tenemos el siguiente sistema que NO está en la FCC:

\dot{\vec{x}}=\begin{bmatrix}
0& 1 & 0 & 0\
0 & 0 & -1 &0 \
0 & 0 & 0 &1 \
0 & 0 & 5 &0
\end{bmatrix}\vec{x}+\begin{bmatrix}0\1\0\-2\end{bmatrix}u(t)
y(s)=\begin{bmatrix}1 & 0 & 0&0 \end{bmatrix}\vec{x}

Procedemos a inicialmente a verificar la controlabilidad del sistema

\mathbb{C}=\begin{bmatrix}
\vec{b} &  \mathbf{A}\vec{b}& \mathbf{A}^2\vec{b} & \mathbf{A}^3\vec{b}
\end{bmatrix}
\mathbb{C}=\begin{bmatrix}
0& 1 & 0 & 2\
1 & 0 & 2 &0 \
0 & -2 & 0 &10 \
-2& 0 & -10 &0
\end{bmatrix}
\rho(\mathbb{C})=4\rightarrow Controlable

Calculo la ecuación característica del sistema que independe del tipo de representación del sistema.

\Delta(\lambda)=det(\lambda \mathbf{I}-\mathbf{A})
\Delta(\lambda)=\lambda^2(\lambda^2-5)=\lambda^4-5\lambda^2

En este caso, DE LOS AUTOVALORES vemos que el sistema es inestable dado que tiene un polo en 2.2361 y dos polos en el origen.

Suponga que se desea establecer en lazo cerrado los siguientes autovalores:

\lambda_{1,2}=-1.5\pm j0.5
\lambda_{3,4}=-1\pm j

La ecuación característica deseada es:

\Delta_f(\lambda)=\lambda^4+5\lambda^3+10.5\lambda^2+11\lambda+5

Para solucionar este problema, partimos inicialmente calculando el vector de ganancias k de la misma forma como se hace cuando el sistema esta en la forma FCC, en este caso vamos a llamar el vector de ganancias como \bar{k}

\begin{bmatrix}
\dot{x_1}(t)\
\dot{x_2}(t)\
\dot{x_3}(t)\
\dot{x_4}(t)
\end{bmatrix}=\begin{bmatrix}
-(\alpha_1+k_1) & -(\alpha_2+k_2) & -(\alpha_3+k_3) & -(\alpha_4+k_4)\
1&0&0&0\
0&1&0&0\
0&0&1&0
\end{bmatrix}\begin{bmatrix}
x_1(t)\
x_2(t)\
x_3(t)\
x_4(t)
\end{bmatrix}+\begin{bmatrix}1\0\0\0 \end{bmatrix}r(t)

Cuya ecuación característica se obtiene de la primera fila del sistema FCC

\Delta_f=s^4+(\alpha_1+k_1) s^3+(\alpha_2+k_2)s^2+(\alpha_3+k_3)s+(\alpha_4+k_4)

Un método rápido de obtener el vector de ganancias es tomar el polinomio de la ecuación característica deseada y restarla con el polinomio de la ecuación característica en lazo abierto:

\lambda^4+5\lambda^3+10.5\lambda^2+11\lambda+5-(\lambda^4-5\lambda^2)
= 5\lambda^3-15.5\lambda^2+11\lambda+5

el vector de ganancias  \bar{k}:

\bar{k}=\begin{bmatrix}
5&  15.5&  11& 5
\end{bmatrix}

\bar{k} no puede ser aplicado al sistema, por lo tanto se debe multiplicar ese vector por una matriz de similitud P

k=\bar{k}\mathbf{P}

Para encontrar la matriz de similitud basta con resolver la siguiente matriz que es dependiente de la matriz de controlabilidad.

Esta matriz Parte de una ecuación característica de la forma:

\Delta(\lambda)=\lambda^4+\alpha_1 \lambda^3+\alpha_2\lambda^2+\alpha_3\lambda+\alpha_4

Considerando que el sistema es controlable entonces existe una transformación de similitud \bar{x}=\mathbf{P}x donde:

\mathbf{Q}=\mathbf{P}^{-1}=\mathbb{C}\begin{bmatrix}
1& \alpha_1 & \alpha_2 & \alpha_3\
0 & 1 & \alpha_1 &\alpha_2 \
0 & 0 & 1 &\alpha_1 \
0& 0 & 0 &1
\end{bmatrix}

De esa forma, encontrando la matriz de transformación de similitud realizando el producto anterior viene dado por:

\mathbf{P}=\left(\begin{bmatrix}
0& 1 & 0 & 2\
1 & 0 & 2 &0 \
0 & -2 & 0 &10 \
-2& 0 & -10 &0
\end{bmatrix}
\begin{bmatrix}
1& 0 & -5 & 0\
0 & 1 & 0 &-5 \
0 & 0 & 1 &0 \
0& 0 & 0 &1
\end{bmatrix}
 \right)^{-1}
\mathbf{P}=\begin{bmatrix}
0& 0 & 0 & -1/2\
0 & 0 & -1/2 &0 \
0 & -1/3 & 0 &-1/6 \
-1/3& 0 & -1/6 &0
\end{bmatrix}

▪De esa forma el vector de ganancias de realimentación de estados es:

k=\bar{k}\mathbf{P}
k=\begin{bmatrix}
5&  15.5&  11& 5
\end{bmatrix}\begin{bmatrix}
0& 0 & 0 & -1/2\
0 & 0 & -1/2 &0 \
0 & -1/3 & 0 &-1/6 \
-1/3& 0 & -1/6 &0
\end{bmatrix}
k=\begin{bmatrix}
-1.6667&   -3.6667 &  -8.5833 &  -4.3333
\end{bmatrix}

El lazo cerrado del sistema viene dado por:

\dot{x}(t)=(\mathbf{A}-\vec{b}k)\vec{x}(t)
\dot{x}(t)=\begin{bmatrix}
      0    &1.0000        & 0        & 0\
    1.6667   & 3.6667  &  7.5833  &  4.3333\
         0    &     0       &  0    1.0000\
   -3.3333 &  -7.3333 & -12.1667 &  -8.6667
\end{bmatrix}\vec{x}(t)

La respuesta del sistema comparando el lazo abierto con el lazo cerrado es:

Realimentación de Estados usando la Ecuación de Lyapunov

La realimentación de estados es posible realizarla resolviendo un sistema de ecuaciones utilizando una ecuación similar a la ecuación de Lyapunov.

La ventaja de este método es que puede ser usado tanto para sistemas SISO cuanto para sistemas MIMO.

El inconveniente de esta técnica es que no pueden existir autovalores comunes en las matrices \mathbf{A} y (\mathbf{A}-\mathbf{B}\mathbf{K}).

La idea esencial del método es resolver la siguiente ecuación:

\mathbf{A}-\mathbf{B}\mathbf{K}=\mathbf{T}\mathbf{F}\mathbf{T}^{-1}

donde ABK es lo que se desea proyectar, la variable F es una matriz cualquiera cuyos autovalores son los autovalores deseados en lazo cerrado (por ejemplo usando la representación FCC).

La matriz T es una variable a ser determinada que representa la matriz de transformación de similitud entre la representación F y la representación ABK. Por lo tanto T no puede ser NO SNGULAR.

Teorema: Si A y F no tienen autovalores en común, entonces la solución T de la siguiente ecuación:

\mathbf{A}\mathbf{T}-\mathbf{T}\mathbf{F}=\mathbf{B}\bar{\mathbf{K}}

será singular si y solamente si (A,B) son controlables y (F,K) son observables.

Para el caso monovariable (SISO), T es NO SINGULAR si (A,B) son controlables y (F,K) son observables.

Procedimiento

  1. Escoger una ecuación característica deseada para el sistema en lazo cerrado \Delta_f(s) y determinar una matriz F de forma que:
    \Delta_f(s)=det(s\mathbf{I}-\mathbf{F})
  2. Escoger una matriz \bar{K}∈R^{p\times n} tal que el par (F,K ̅) sea observable.
  3. Determinar una matriz T a través de la siguiente ecuación:
    \mathbf{A}\mathbf{T}-\mathbf{T}\mathbf{F}=\mathbf{B}\bar{\mathbf{K}}
  4. Obtener la ganancia de realimentación de estados por la relación:
    \mathbf{K}=\bar{\mathbf{K}}\mathbf{T}^{-1}

Ejemplo

Tomando un sistema en la forma FCC:

\dot{\vec{x}}=\begin{bmatrix}
0 & 1\
1 & 0
\end{bmatrix}\vec{x}+\begin{bmatrix}
1\
0
\end{bmatrix}u

▪La ecuación característica del sistema es:

\Delta(\lambda)=\lambda^2-1

Definimos una ecuación característica deseada:

\Delta_f(\lambda)=\lambda^2+7\lambda+3

Como el sistema ya se encuentra en la forma FCC la ganancia por realimentación de estados que consigue la ecuación característica anterior será dado por:

\underline{\begin{matrix}
 \lambda^2& +7\lambda &+3 \
 -(\lambda^2& +0\lambda &-1)
\end{matrix}}\
\begin{matrix}
0\lambda^2&  +7\lambda& +4
\end{matrix}

Donde el vector k es

k=\begin{bmatrix}
7&  4
\end{bmatrix}

Esa sería la respuesta que se obtiene directamente de la forma FCC, debemos llegar a la misma respuesta si aplicamos el método de Lyapunov, y para eso vamos a comprobarlo siguiendo los 4 pasos descritos anteriormente:

  1. Debemos definir una matriz \mathbf{F} que contenga nuestra ecuación característica deseada, la forma más facil es crear una forma FCC.
\mathbf{F}=\begin{bmatrix}
0 & 1\
-3 & -7
\end{bmatrix}

2. Tomo una matriz \bar{\mathbf{K}}\in \Re^{p\times n} cualquiera:

\bar{\mathbf{K}}=\begin{bmatrix}
0 & 1
\end{bmatrix}

Ahora debo hacer que el par (\mathbf{F},\bar{\mathbf{K}}) sea observable

rank\begin{bmatrix}
\bar{\mathbf{K}} \ \bar{\mathbf{K}}\mathbf{F}
\end{bmatrix}=
rank\begin{bmatrix}
0&1 \ -3 & -7
\end{bmatrix}=2

Determinar la matriz \mathbf{T}

\begin{bmatrix}
0 & 1\
1 & 0
\end{bmatrix}
\begin{bmatrix}
t_{11} & t_{12}\
t_{21} & t_{22}
\end{bmatrix}-
\begin{bmatrix}
t_{11} & t_{12}\
t_{21} & t_{22}
\end{bmatrix}
\begin{bmatrix}
0 & 1\
-3 & -7
\end{bmatrix}=
\begin{bmatrix}
1\
0
\end{bmatrix}
\begin{bmatrix}
0 & 1
\end{bmatrix}
\begin{bmatrix}
t_{21} & t_{22}\
t_{11} & t_{12}
\end{bmatrix}-
\begin{bmatrix}
-3t_{12} & t_{11}-7t_{12}\
-3t_{22} & t_{21}-7t_{22}
\end{bmatrix}=
\begin{bmatrix}
0 & 1\
0 & 0
\end{bmatrix}
\begin{bmatrix}
t_{21}+3t_{12} & t_{22}-t_{11}+7t_{12}\
t_{11}+3t_{22} & t_{12}-t_{21}+7t_{22}
\end{bmatrix}=
\begin{bmatrix}
0 & 1\
0 & 0
\end{bmatrix}

De esa forma tengo el siguiente sistema de ecuaciones:

(1) t_{21}+3t_{12}=0

(2) t_{22}-t_{11}+7t_{12}=1

(3) t_{11}+3t_{22}=0

(4) t_{12}-t_{21}+7t_{22}=0

En forma matricial tenemos que:

\begin{bmatrix}
0 & 3&1&0\
-1 & 7&0&1\
1 & 0&0&3\
0 & 1&-1&7
\end{bmatrix}\begin{bmatrix}
t_{11} \ t_{12}\
t_{21} \ t_{22}
\end{bmatrix}=
\begin{bmatrix}
0 \ 1\
0 \ 0
\end{bmatrix}

solucionando

\mathbf{T}=\begin{bmatrix}
0.3636 & 0.2121\
-0.6364 & -0.1212
\end{bmatrix}

4. Obtener la ganancia de realimentación de estados por la relación:

\mathbf{K}=\bar{\mathbf{K}}\mathbf{T}^{-1}
\mathbf{K}=\begin{bmatrix}
0 & 1
\end{bmatrix}\begin{bmatrix}
0.3636 & 0.2121\
-0.6364 & -0.1212
\end{bmatrix}^{-1}
\mathbf{K}=\begin{bmatrix}
7 & 4
\end{bmatrix}

Quedando demostrado que llegamos a la misma respuesta, y de esa forma tenemos otro método para calcular la realimentación de estados.

Comandos en MATLAB

Estos son los comandos que podremos utilizar directamente en MATLAB para realizar el cálculo de las ganancias de un control por realimentación de estados mostradas en esta entrada:

Para un sistema SISO puede ser empleado el comando de Ackerman de Matlab:

>> k2 = acker(A,b,Ed)

  • k2 = La ganancia por Realimentación de Estados
  • A = Matriz de Estados
  • b = Vector de entrada
  • Ed = Vector con los polos de la ecuación característica deseada.

Un comando más general para el calculo de la realimentación de estados es el place:

>> k = place(A,B,Ed)

  • k = La ganancia por Realimentación de Estados
  • A = Matriz de Estados
  • B = Matriz de entrada
  • Ed = Vector con los polos de la ecuación característica deseada.

También puede calcularse por medio del comando de Lyapunov de Matlab Lyap usando la ecuación de Sylvester siguiendo el mismo procedimiento expuesto en esta entrada con las mismas variables mostradas aquí.

\mathbf{A}\mathbf{T}-\mathbf{T}\mathbf{F}=\mathbf{B}\bar{\mathbf{K}}

>> T=lyap(A,-F,-b*k_bar);
>> k = k_bar/T

  • k = La ganancia por Realimentación de Estados
  • A = Matriz de Estados
  • F = Matriz cuyos autovalores son los autovalores deseados
  • b = Vector de entrada
  • k_bar = matriz cualquiera que cumpla que el par (F,k_bar) sea observable
  • T = variable a ser determinada que representa la matriz de transformación de similitud

Códigos de Implementación

A continuación se muestran los códigos de implementación de todos los ejemplos tratados en este post en Matlab y algunos en Python para que los puedas descargar e implementar en tu computador.

[sociallocker id=”948″]

Código en Matlab Asignación de Polos

%Sergio Castaño
%Realimentación de estados en la forma canónica controlable
clc
clear 
close all
%Función de transferencia
G= tf(2,[1 3 1]);
%Sistema en lazo abierto
A=[-3 -1;1 0];
b=[1;0];
c=[0 2];
%Espacio de Estados
sys=ss(A,b,c,0);
%% Ubicación de los polos deseados
s=pole(G);
%Tiempo de establecimiento aproximado llegando al 2% del estado estable
ts=3.912/min(abs(s)); %(mas o menos 10 segundos)
%Definamos una respuesta subamortiguada para el sistema en lazo cerrado
zeta=0.707; %Factor de amortiguamiento (diseño)
tsd=ts*0.75; %Tiempo de establecimiento deseado (diseño)
wn=4/(tsd*zeta);
s1=-zeta*wn+wn*sqrt(zeta^2-1);
s2=-zeta*wn-wn*sqrt(zeta^2-1);
%Polos del sistema deseado
sf=[s1;s2];
%ecuación característica deseada
Pd=poly(sf)
% ley de control
k=[A(1,1)+Pd(2) A(1,2)+Pd(3)];
%Lazo cerrado
Af=A-b*k;
%El autovalor CERO va ser cancelado con el cero de la FT
eig(Af)
%Matriz de Observabildiad
Of=[c;c*Af]
%observable, 
rank(Of)
%Sistema con realimentación en espacio de estados
slc=ss(Af,[],c,0);
%Condicion inicial
x0=[1 1];
%Respuesta del sistema
initial(sys,x0)
hold on
initial(slc,x0)
legend('Lazo Abierto','Lazo Cerrado')

Código por Fórmula de Ackerman

Código del ejemplo sin la forma canónica controlable (FCC)

%% Realimentación de estados SIN la forma canónica controlable
%  by: Sergio Andres Castaño Giraldo
%  Rio de Janeiro - 2020
%  https://controlautomaticoeducacion.com/sistemas-dinamicos-lineales/control-por-realimentacion-de-estados/
% ______________________________________________________________________
clc
clear 
close all
%Sistema en lazo abierto NO esta en la forma FCC
A=[0 1 0 0;
   0 0 -1 0;
   0 0 0 1;
   0 0 5 0];
b=[0;1;0;-2];
c=[1 0 0 0];
%Espacio de Estados
sys=ss(A,b,c,0);
%% Controlabilidad
Co = ctrb(sys)
rank(Co)
%% Ecuación característica del Sistema
E_Ca=poly(eig(sys));
%% Ecuación deseada
Ps= [1 5 10.5 11 5];
Ed=roots(Ps)
%% Ganancia k_bar 
k_bar=Ps(2:end)-E_Ca(2:end);
%% Transformación de Similitud
Ci = toeplitz(E_Ca(1:end-1));
Ci = triu(Ci);
Q=(Co*Ci)^(-1)
%% Ganancia de Realimentación de Estados
k1 = k_bar*Q
%Puede ser calculado con comando place
k2 = place(A,b,Ed)
%% Lazo cerrado
Af=A-b*k1;
%% Calculando los autovalores del sistema en lazo cerrado
eig(Af)
%Condicion inicial
x0=[1 1 1 1];
%Sistema con realimentación en espacio de estados
slc=ss(Af,b,c,0);
%Respuesta del sistema
figure
subplot(211)
initial(sys,x0)
title('Lazo Abierto (CI)');
subplot(212)
initial(slc,x0)
title('Lazo Cerrado (CI)')
figure
subplot(211)
step(sys)
title('Lazo Abierto (Step)');
subplot(212)
step(slc)
title('Lazo Cerrado (Step)')

Código usando Ecuación de Lyapunov

%% Realimentación de estados usando la ecuación de Lyapunov
%  by: Sergio Andres Castaño Giraldo
%  Rio de Janeiro - 2020
%  https://controlautomaticoeducacion.com/sistemas-dinamicos-lineales/control-por-realimentacion-de-estados/
% ______________________________________________________________________

clc
clear 
close all

% Sistema
A = [0,1;1,0];
b = [1;0];
c=[1 0];

%Espacio de Estados
sys=ss(A,b,c,0);

%% Controlabilidad
Co = ctrb(sys)
rank(Co)

%% Ecuación característica del Sistema
E_Ca=poly(eig(sys));

%% Ecuación deseada
Ps= [1 7 3];
Ed=roots(Ps)

%% Ganancia k
k=Ps(2:end)-E_Ca(2:end)

%% Matriz F
F = [0,1;-3,-7];

%% Ganancia k Cualquiera arbitraria
k_bar=[0 1];

%% Matriz T
beq = [0;1;0;0];
Aeq = [0 3 1 0;
      -1 7 0 1;
      1 0 0 3;
      0 1 -1 7];
t=Aeq\beq;
T=[t(1) t(2); t(3) t(4)];

%% Ganancia de la Realimentación de Estados
k1 = k_bar/T %K_bar*inv(T)

%% Usando comando de Matlab lyap
% X = lyap(A,B,C) solves the Sylvester equation
% AX+XB+C=0
% The matrices A, B, and C must have compatible dimensions but need not be square.
% (Descomentar las dos instrucciones a continuación:)

%         T=lyap(A,-F,-b*k_bar);
%         k1 = k_bar/T

%% Lazo cerrado
Af=A-b*k1;

%% Calculando los autovalores del sistema en lazo cerrado
eig(Af)

%Condicion inicial
x0=[1 1];

%Sistema con realimentación en espacio de estados
slc=ss(Af,b,c,0);

%Respuesta del sistema
figure
subplot(211)
initial(sys,x0)
title('Lazo Abierto (CI)');
subplot(212)
initial(slc,x0)
title('Lazo Cerrado (CI)')

figure
subplot(211)
step(sys)
title('Lazo Abierto (Step)');
subplot(212)
step(slc)
title('Lazo Cerrado (Step)')

[/sociallocker]

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.