controlemos el mundo
Dado un sistema lineal:
$$\dot{x}=A\,x+B\,u \qquad y \qquad y=C\,x$$Paso #1 : Diseña la realimentación de estados usando el posicionamiento de polos.
Supongamos una realimentación de estados
$$u=-K\,x = - \left[\array{k_1&k_2}\right]x $$¿Cómo seleccionamos la ganancia de los controladores?
Idea: Seleccionarlas para ubicar los polos del sistema en los valores deseados (posicionamiento de polos)
Dada una matriz $M$, sus valores propios satisfacen la ecuación característica:
$$\chi M (\lambda) = \text{det}(\lambda\,I- M) = 0$$Para una matriz $M$ (2x2):
$$M=\left[\array{ m_1 & m_2 \\ m_3 & m_4 }\right]$$tendremos:
$$\lambda\,I- M = \lambda\left[\array{ 1 & 0 \\ 0 & 1 }\right]-M = \left[\array{ \lambda - m_1 & -m_2 \\ -m_3 & \lambda-m_4 }\right]$$Dada una matriz $M$, sus valores propios satisfacen la ecuación característica:
$$\chi M (\lambda) = \text{det}(\lambda\,I- M) = 0$$continuando:
$$\text{det}(\lambda\,I- M) = \left|\array{ \lambda - m_1 & -m_2 \\ -m_3 & \lambda-m_4 }\right| $$$$ = (\lambda - m_1)(\lambda-m_4)-m_2m_3$$$$ = \lambda^2-(m_1+m_4)\lambda+m_1m_4-m_2m_3 = 0$$Dada una matriz $M$, sus valores propios satisfacen la ecuación característica:
$$\chi M (\lambda) = \text{det}(\lambda\,I- M) = 0$$continuando:
$$\chi M (\lambda) = \lambda^2-(m_1+m_4)\lambda+m_1m_4-m_2m_3 = 0$$de aquí tenemos:
$$\lambda = \frac{m1+m4}{2}\pm \sqrt{\frac{(m1+m4)^2}{4}-m_1m_4+m_2m_3}$$¿Hay una forma más sencilla de hacer esto?
El teorema fundamental del algebra dice:
"Las raices de un polinomio estan completamente determinadas por sus coeficientes"
$$\chi M (\lambda) = \lambda^2-(m_1+m_4)\lambda+m_1m_4-m_2m_3 = 0$$De $\dot{x}=A\,x+B\,u$ y $u=-K\,x$ tenemos que $\dot{x}=(A-BK)x$
entonces:
$$A-BK = \left[\array{0&1\\0&0}\right] - \left[\array{0\\1}\right]\left[\array{k_1&k_2}\right] = \left[\array{0&1\\-k_1&-k_2}\right]$$luego,
$$\chi A-BK (\lambda) = \left|\array{\lambda&-1\\k_1&\lambda+k_2}\right| = \lambda^2+\lambda k_2+k_1$$Seleccionemos los valores propios que queramos que el sistema en lazo cerrado tenga.
$$\lambda_1,\ldots,\lambda_n$$Si estos son los valores propios del sistema entonces, el polinomio característico sería
$$\varphi(\lambda) = (\lambda-\lambda_1)(\lambda-\lambda_2)\cdots(\lambda-\lambda_n)=\prod_{i=1}^n(\lambda-\lambda_i)$$Para el robot tomemos ambos valores propios como $-1$
$$\varphi(\lambda) = (\lambda+1)(\lambda+1) = \lambda^2+2\lambda+1$$Ahora solo alineamos los coeficientes
De anteriores diapositivas:
$$\chi A-BK (\lambda) = \lambda^2+\lambda k_2+k_1$$$$\varphi(\lambda) = (\lambda+1)(\lambda+1) = \lambda^2+2\lambda+1$$alineando:
$$\array{ \lambda^1: & k_2 = 2\\ \lambda^2: & k_1 = 1} \qquad \text{entonces} \qquad K=\left[\array{1&2}\right]$$Es seleccionar las ganancias del controlador de tal manera que los polos del sistema en lazo cerrado concuerden con los polos deseados.
$$\array{ & \chi A-BK (\lambda) =& \lambda^n + a_{n-1}\lambda^{n-1}+\ldots+a_1\lambda+a_0\\ \varphi(\lambda) =& \prod_{i=1}^n(\lambda-\lambda_i) =& \lambda^n + b_{n-1}\lambda^{n-1}+\ldots+b_1\lambda+b_0}$$Las ganacias del controlador saldrán del sistema de ecuaciones generado:
$$\array{ \lambda^n_1: & a_{n-1}(K) = b_{n-1}\\ &\vdots \\ \lambda^0: & a_0(K) = b_0}$$en MATLAB:
>> P = [lambda1,lambda2,lambda3,...];
>> K = place(A,B,P);
Dado el siguiente sistema ubicar los polos en $-1$, $$\dot{x}=A\,x+B\,u \qquad A=\left[\array{2&0\\1&1}\right] \qquad B=\left[\array{1\\1}\right] \qquad u=-K\,x = - \left[\array{k_1&k_2}\right]x$$
El sistema en lazo cerrado:
$$A-BK = \left[\array{2-k_1&-k_2\\1-k_1&1-k_2}\right]$$$$\chi A-BK(\lambda) = \left|\array{\lambda-2+k_1&k_2\\-1+k_1&\lambda-1+k_2}\right| = \lambda^2+\lambda\, (-3+k_1+k_2)+2-k_1-k_2$$de la ecuación caracteristica y el polinomio.
$$\array{ \chi A-BK (\lambda) =& \lambda^2+\lambda\, (-3+k_1+k_2)+2-k_1-k_2\\ \varphi(\lambda) =& (\lambda+1)^2 \lambda^2 + 2\lambda+1}$$asociando:
$$\array{ \lambda^1: & -3 + k_1 + k_2 = 2\\ \lambda^2: & 2 - k_1 - k_2 = 1} \qquad \to \qquad \array{ k_1 + k_2 = 5\\ k_1 + k_2 = 1}$$Lo que ocurre con este ejemplo es una falta de controlabilidad, es decir, el efecto de las entradas no es lo suficientemente rico para influenciar el sistema.
Asumiendo que tenemos suficiente autoridad en el control para hacer el posicionamiento de los polos.
no existe una única respuesta
Algunas observaciones para tener en cuenta:
Teniendo,
$$\dot{x} = (A-BK)\, x,\qquad \text{Re}(\lambda)<0, \qquad \forall\lambda \in \text{eig}(A-BK)$$el valor propio más pequeño dominará la tasa de convergencia ~ tiempo de respuesta:
$$\lambda{min} = \text{argmin}_\lambda|\text{Re}(\lambda)|$$entre más grandes los valores de los polos, más grandes las ganancias del controlador y las señales de control.
% Matrices del sistema
A = [2,0;1,-1];
B = [1;1];
% Selecionemos los polos
P = [-0.5+1i,-0.5-1i];
% Realicemos el posicionamiento de polos
K = place(A,B,P);
% Calculemos la solución
x=[1;1]; t=0; tf=30; dt=0.01;
X=[]; T=[];
while (t<tf)
x = x+dt.*(A-B*K)*x;
t = t+dt;
X = cat(2,X,x);
T = cat(2,T,t);
end
plot(T,X)
de aquí podemos ver que:
$$x^\star = \left[\array{B&AB&\cdots&A^{n-1}B}\right] \left[\array{u_{n-1}\\\vdots\\u_1\\u_0}\right] = \Gamma \left[\array{u_{n-1}\\\vdots\\u_1\\u_0}\right]$$Es posible llegar a un estado $x^\star$ si y solo si:
$$\text{rank}\left(\Gamma\right) = n$$Esto se generaliza fácilmente.
Para un sistema $\dot{x}=Ax+Bu, x \in \mathscr{R}^n$
Definición El sistema es completamente controlable (CC) si es posible ir de cualquier estado inicial a cualquier estado final.
$$\Gamma = \left[\array{B&AB&\cdots&A^{n-1}B}\right] \qquad \text{Matriz de controlabilidad}$$Teorema 1 El sistema es completamente controlable (CC) si y solo si
$$\text{rank}\left(\Gamma\right) = n$$rank(M) =
al número de filas o columnas independientes de M
Sistema #1
$$\dot{x}=\left[\array{2&0\\1&1}\right]x+\left[\array{1\\1}\right]u \qquad n=2 \qquad \Gamma = \left[\array{B&AB}\right] $$en donde,
$$AB = \left[\array{2\\2}\right] \quad \Gamma = \left[\array{1&2\\1&2}\right] \quad \to \quad \text{rank}\left(\Gamma\right) = 1 $$Sistema #2
$$\dot{x}=\left[\array{0&1\\0&0}\right]x+\left[\array{0\\1}\right]u \qquad n=2 \qquad \Gamma = \left[\array{B&AB}\right] $$en donde,
$$AB = \left[\array{1\\0}\right] \quad \Gamma = \left[\array{0&1\\1&0}\right] \quad \to \quad \text{rank}\left(\Gamma\right) = 2 $$El sistema #1 no es CC, el sistema #2 es CC
asumiendo lo siguiente:
$$u = -Kx \qquad\qquad \dot{x}=(A-BK)x$$Teorema 2 El posicionamiento de polos a valores arbitrarios es posible si y solo si el sistema es CC.
en MATLAB:
>> G = ctrb(A,B);
>> rank(G);
ans: 2
plt.plot(-1,1,'*b');
plt.plot(1,1,'or');
Sabemos diseñar controladores efectivamente usando la realimentación del estado. Pero como hacemos con $y$ ?
A partir de la medida $y$ debemos encontrar los estados del sistema $x$ a traves de una predición $\hat{x}$.
Supongamos un sistema:
$$\dot{x}=A\,x \qquad y=C\, x$$Esto se conoce como el observador de Luenberger
Lo que queremos estabilizar (llevar a cero) es la estimación del error, es decir, la diferencia del estado actual y la estimación del estado $e=x-\hat{x}$
$$\dot{e} = \dot{x} - \dot{\hat{x}} = Ax - A\hat{x} - L(y-C\hat{x}) \qquad \text{con} \qquad y=Cx$$luego,
$$\dot{e} = A(x-\hat{x}) - LC(x-\hat{x}) = (A-LC)e$$por lo que debemos elegir L de tal forma que los valores propios de $A-LC$ tenga parte real negativa.
queremos
$$\text{Re}\left(\text{eig}(A-LC)\right)<0$$ya sabemos hacer posicionamiento de polos.
Partimos de:
$$\dot{x} = \left[\array{-1&2\\0&-2}\right]x \qquad y = \left[\array{1&-1}\right]x$$el error será:
$$\dot{e} = (A-LC)e = \left(\left[\array{-1&2\\0&-2}\right]-\left[\array{L_1\\L_2}\right]\left[\array{1&-1}\right]\right)e$$$$\dot{e}= \left[\array{-1-L_1&2+L_1\\-L_2&-2+L_2}\right]e$$Ecuación característica:
$$\chi A-LC (\lambda) = \left|\array{\lambda+1+L_1&-2-L_1\\L_2&\lambda+2-L_2}\right|$$$$\chi A-LC (\lambda) = \lambda^2 + \lambda (3+L_1-L_2) + 2 + 2L_1+L_2$$$$\varphi(\lambda) = (\lambda+1)^2 = \lambda^2 + 2\lambda+1$$de aquí:
$$L_1 = -2/3 \qquad \text{y} \qquad L_2=1/3$$Podemos diseñar observadores todo el tiempo?
Necesitamos hacer lo que hicimos para el diseño del controlador para entender cuando podemos recuperar la información del estado de la salidad.
Dado un sistema en tiempo discreto: $$x_{k+1}= A\, x_k \qquad y_k = C x_k$$
¿Podemos recuperar la condición inicial recolectando n valores de salida?
donde $\Omega$ es la matriz de observabilidad. La condición inicial del sistema puede ser recuperadad de las medidas/salidas del sistema cuando la matriz de observabilidad tiene rango completo.
Dado un sistema:
$$x_{k+1}= A\, x_k \qquad y_k = C x_k \qquad x \in \mathscr{R}^n$$
Definición el sistema es completamente observable (CO) si es posible recuperar la condicion inicial a partir de su salida.
$$\Omega = \left[\array{C\\CA\\CA^2\\\vdots\\CA^{n-1}}\right]$$Teorema 1 el sistema es CO si y solo si
$$\text{rank}\left(\Omega\right) = n$$Dado un estimador:
$$\dot{\hat{x}}= A\, \hat{x} + L(y-C\, \hat{x}) \qquad \dot{e} = (A-LC)e$$Teorema 2 se puede hacer un posicionamiento de polos arbitrariamente si y solo if el sistema es CO.
Estamos muy cerca de poder diseñar controladores como si tuvieramos el estado $x$ aunque solo conozcamos $y$, ya que podemos estimar $x$.
En este momento tenemos muchos buenos bloques para construir un controlador:
¿Cómo ponemos todo esto juntos?
El principio de separación
Tenemos un sistema:
$$\dot{x}=Ax+Bu \qquad y=Cx$$asumiendo CC y CO.
Paso 1 Diseñamos un control en realimentación de estado como si conocieramos $x$.
$$u=-Kx \quad\to\quad \dot{x} = (A-BK)x$$aunque solo conozcamos $\hat{x}$
$$u=-K\hat{x}$$Paso 2 Estimar $x$ usando un observador (en este caso también contiene $u$).
$$\dot{\hat{x}}=A\hat{x}+Bu+L(y-C\hat{x})$$encontrando $L$ para:
$$\dot{e}=(A-LC)e$$Queremos estabilizar ambos $x$ y $e$. Analizemos la dinámica conjunta.
$$\dot{x} = Ax - BK \hat{x} = Ax - BK(x-e)= (A-BK)x + BK e$$$$\dot{e} = (A-LC)e \qquad e= x-\hat{x}$$Podemos verlo en conjunto:
$$\left[\array{\dot{x}\\\dot{e}}\right]=\left[\array{A-BK&BK\\0&A-LC}\right]\left[\array{x\\e}\right]$$Esta estrategia funciona si y solo si la matriz anterior genera un sistema asintóticamente estable.
Para esta matriz triangular superior. Sus valores propios estan dados por los valores propios de los bloques diagonales.
$$\chi M(\lambda) = \chi A-BK (\lambda) \, \chi A-LC (\lambda)$$Si no nos equivocamos en el diseño, tendremos qué:
$$\text{Re}\left(\text{eig}(A-BK)\right)<0$$$$\text{Re}\left(\text{eig}(A-LC)\right)<0$$Es decir que todo funciona.
El principio de separación significa que podemos desacoplar el diseño del controlador del diseño del observador (en teoría).
“In theory, theory and practice are the
same. In practice they are not.” -Yogi Berra
Típicamente el observador debe ser más rápido que el controlador, ya que el controlador no hará nada útil mientras que la estimación del estado no esté cerca del estado.
Nota Grandes valores de los valores propios del observador generan grandes ganancias en el observador, lo que no es un problema ya que el observador es una construcción computacional.