Para el control en espacio de estados¶
Para realizar control en espacio de estados debemos generar un lazo cerrado al rededor de la planta que queramos controlar. Podemos decir que controlamos un sistema si se cumplen las siguientes condiciones:
- Es estable
- Sigue el objetivo
- Se sobrepone a perturbaciones externas
Para averigüar si un sistema es estable, vamos a estudiar la matriz dinámica del sistema.
Análisis de estabilidad¶
Partiendo de la función de transferencia de un sistema ¿Cómo sabemos que el sistema es estable?
- Conociendo los polos del sistema
¿Cómo lo hacemos en un modelo en espacio de estados?
- Con los valores propios de la matriz dinámica
¿Cómo cálculamos los valores propios de una matriz?
Cálculo de los valores propios¶
Podemos cálcular los valores propios de una matriz, encontrando las raices del polinomio de la ecuación caracteristica de la matriz $M$. La ecuación característica es:
$$\text{det}\left(\lambda I-M\right)=0$$
donde los valores de $\lambda$ son los valores propios (polos) del sistema.
Condición de estabilidad¶
Los valores propios de la matrix dinámica $A$, definen la dinámica del sistema y por lo tanto su estabilidad. Luego el sistema será:
- Asintóticamente estable (si y solo si): $$Re(\lambda)<0, \forall\lambda \in \texttt{eig}(A)$$
- Inestable (si): $$\exists\lambda\in\texttt{eig}(A) : Re(\lambda)>0$$
- Críticamente estable (solo si): $$Re(\lambda)\le0, \forall\lambda \in \texttt{eig}(A)$$
- Críticamente estable (si): Un valor propio es cero y el resto tienen parte real negativa o Dos valores propios son puramente imaginarios y el resto tienen parte real negativa.
El cuento de dos pendulos¶
Dadas las matrices dinámicas para un péndulo regular y un péndulo invertido, sin fricción.
$$A_{\text{péndulo regular}} = \left[\array{0&1\\-1&0}\right] \qquad A_{\text{péndulo invertido}} = \left[\array{0&1\\1&0}\right]$$
Hacer un análisis de estabilidad para ambos péndulos
Para el péndulo regular tenemos: $$\lambda_1 = j \qquad \lambda_2=-j$$
Para el péndulo invertido tenemos: $$\lambda_1 = -1 \qquad \lambda_2=1$$
Realimentación del sistema en espacio de estados¶
Sabemos que lo primero que debemos hacer para controlar un sistema es llevarlo a ser asintóticamente estable. Es decir que la parte real de todos sus valores propios sea negativa.
Ejemplo con una particula en una linea recta sin fricción¶
Diseñemos un control proporcional para el sistema propuesto, utilizando el espacio de estados.
$$m \ddot{x} = F$$
La ecuación de estado quedaría asi (con $m=1$).
$$\dot{\mathbf{x}}=\left[\begin{array}{}0&1\\0&0\end{array}\right]\mathbf{x}+\left[\begin{array}{}0\\1\end{array}\right]\mathbf{u}$$
La ecuación de salida sería.
$$\mathbf{y}=\left[\begin{array}{}1&0\end{array}\right]\mathbf{x}$$
Control de la partícula¶
Si queremos controlar el sistema con un lazo cerrado debemos conectar de alguna forma la salida $\mathbf{y}$ con la entrada $\mathbf{u}$
plt.plot([-2,2],[0,0])
plt.plot([0,0],[-1,1],color='r')
plt.plot([-1],[0],color='k',marker='.',markersize=30)
plt.xlim(-2,2);
Control de la partícula¶
Definamos una simple ley de control:
$$\left.\begin{array}{}u>0 \text{ si } y<0 \\ u<0 \text{ si } y>0\end{array}\right\}\qquad \to \qquad u=-y$$
Modificación de la dinamica del sistema¶
En general tenemos:
$$\mathbf{u}=-K\mathbf{y} = -KC\mathbf{x} $$
entonces:
$$\dot{\mathbf{x}}=A\mathbf{x}+B\mathbf{u}=A\mathbf{x}-BKC\mathbf{x} = \left(A-BKC\right)\mathbf{x}$$
tenemos aquí un nuevo sistema, el sistema en lazo cerrado.
$$\dot{\mathbf{x}} = \left(A-BKC\right)\mathbf{x}=\hat{A}\mathbf{x}$$
nuestro trabajo ahora es seleccionar $K$ de tal forma que los valores propios de la matriz $\hat{A}$ den por lo menos un sistema estable.
$$Re(\lambda)<0,\quad \forall\lambda \in \texttt{eig}(A-BKC)$$
La matriz de estado del sistema en lazo cerrado¶
Remplazamos los valores de las matrices y de $K=1$
$$\hat{A}=\left(A-BKC\right)=\left(\left[\begin{array}{}0&1\\0&0\end{array}\right]-\left[\begin{array}{}0\\1\end{array}\right]1\left[\begin{array}{}1&0\end{array}\right]\right)$$
mA = sympy.Matrix([[0,1],[0,0]])-sympy.Matrix([0,1])*1*sympy.Matrix([[1,0]])
display(mA)
Analizando los valores propios del sistema tenemos que:
display(mA.eigenvals())
{-I: 1, I: 1}
El sistema es criticamente estable.
Respuesta de la particula al lazo cerrado¶
Con el controlador propuesto, la particula se comporta como se muestra.
display(ani)
Respuesta de la particula al lazo cerrado¶
¿Por qué no se queda en el origen si este es el objetivo?
- No tenemos en cuenta la velocidad.
- Necesitamos la información del estado (posición,velocidad) del sistema para estabilizarlo.
Estabilizando la particula¶
Para estabilizar la particula necesitamos conocer la información de todos los estados del sistema. Salvo que en nuestro sistema solo tenemos un sensor de posición:
$$\mathbf{y}=\left[\begin{array}{}1&0\end{array}\right]\mathbf{x}$$
El estado desconocido es la velocidad, el cual puede ser estimado de la posición. Por ahora supongamos que podemos medir ambos estados.
$$\mathbf{y}_{supuesto}=\left[\begin{array}{}1&0\\0&1\end{array}\right]\mathbf{x}$$
con esta nueva matriz $C$, proponemos un controlador $K$:
$$K = \left[\begin{array}{}k_1&k_2\end{array}\right]$$
Encontremos la nueva matriz $\hat{A}$ para el sistema en lazo cerrado.
Nueva matriz de estado del sistema en lazo cerrado¶
Recordemos que aquí estamos suponiendo que podemos medir ambos estados del sistema (posición y velocidad). Remplazamos los valores de las matrices y de $K$:
$$\hat{A}=\left(A-BKC\right)=\left(\left[\begin{array}{}0&1\\0&0\end{array}\right]-\left[\begin{array}{}0\\1\end{array}\right]\left[\begin{array}{}k_1&k_2\end{array}\right]\left[\begin{array}{}1&0\\0&1\end{array}\right]\right)$$
Luego $\hat{A}=$
k1,k2 = sympy.symbols('k_1 k_2')
mA3 = sympy.Matrix([[0,1],[0,0]])-sympy.Matrix([0,1])*sympy.Matrix([[k1,k2]])*sympy.Matrix([[1,0],[0,1]])
display(mA3)
Los valores propios o polos del sistema son:
sympy.init_printing()
eigen = mA3.eigenvals()
display(eigen)
Verifiquemos el comportamiento de la particula¶
- Tomemos los valores para el controlador $k_1=1$ y $k_2=1$
- Tomemos los valores para el controlador $k_1=0.1$ y $k_2=1$
Sobre los valores propios¶
- Es claro que algunos valores propios son mejores que otros.
- Algunos causan oscilaciones
- Algunos hacen que el sistema responda lentamente
- etc.