モデル規範による追従SM制御

モデル規範による追従SM制御…Homework

[1] 次の状態方程式で表される制御対象を考えます。

\displaystyle{(1)\quad \dot{x}(t)=Ax(t)+Bu(t) }

この状態が理想的なモデル

\displaystyle{(2)\quad \dot{x}_m(t)=A_mx_m(t)+B_mr(t) }

の状態を追従するように、すなわち

\displaystyle{(3)\quad e(t)=x(t)-x_m(t)\rightarrow 0 \quad(t\rightarrow\infty) }

となるように制御則を決定したいとします。

●追従誤差のダイナミックスは

\displaystyle{(4)\quad \begin{array}{l} %\bullet \dot{e}(t)=Ax(t)+Bu(t)-(A_mx_m(t)+B_mr(t))\\ %=Ax(t)-Ax_m(t)+Ax_m(t)-A_mx_m(t)+Bu(t)-B_mr(t)\\ %=Ae(t)+(A-A_m)x_m(t)+Bu(t)-B_mr(t)\\ %\bullet \dot{e}(t)=Ax(t)+Bu(t)-(A_mx_m(t)+B_mr(t))\\ =Ax(t)-A_mx(t)+A_mx(t)-A_mx_m(t)+Bu(t)-B_mr(t)\\ =A_me(t)+(A-A_m)x(t)+Bu(t)-B_mr(t) \end{array} }

となります。いま条件

\displaystyle{(5)\quad \begin{array}{l} (BB^\dag-I)(A-A_m)=0\Leftrightarrow B\underbrace{B^\dag(A-A_m)}_{F}=A-A_m\\ (BB^\dag-I)B_m=0\Leftrightarrow B\underbrace{B^\dag B_m}_{G}=B_m \end{array} }

を仮定すると(B^\dagBB^\dag B=Bを満たす疑似逆行列)、制御則

\displaystyle{(6)\quad u(t)=-Ke(t)-Fx(t)+Gr(t) }

の下では、誤差方程式は次式となります。

\displaystyle{(7)\quad \dot{e}(t)=(A_m-BK)e(t) }

実際、

\displaystyle{(8)\quad \begin{array}{l} \dot{e}(t)=A_me(t)+(A-A_m)x(t)+Bu-B_mr(t)\\ =A_me(t)+(A-A_m)x(t)+B(-Ke(t)-Fx(t)+Gr(t))-B_mr(t)\\ =A_me(t)+(A-A_m)x(t)-BKe(t)-BB^\dag(A-A_m)x(t)\\ +BB^\dag B_mr(t)-B_mr(t)\\ =(A_m-BK)e(t)-\underbrace{(BB^\dag-I)(A-A_m)}_{0}x(t)+\underbrace{(BB^\dag -I)B_m}_{0}r(t)\\ \end{array} }

●以上から、制御則(6)の設計の指針として、望ましいモデル(2)を(1)に対する状態フィードバックと入力変換で得るものとします。すなわち

\displaystyle{(9)\quad \boxed{\begin{array}{l} A_m=A-BF\\ B_m=BG \end{array}} }

ここでGは、rから出力

\displaystyle{(10)\quad y(t)=Hx(t) }

までの定常ゲイン

\displaystyle{(11)\quad %\begin{array}{l} \left\{\begin{array}{l} 0=(A-BF)x(\infty)+BGr(\infty)\\ y(\infty)=Hx(\infty) \end{array}\right. \Rightarrow  y(\infty)=\underbrace{-H(A-BF)^{-1}BG}_{I}r(\infty) %\end{array} }

が単位行列となるように、次式で決めます。

\displaystyle{(12)\quad \boxed{G=-(H(A-BF)^{-1}B)^{-1}} }

ちなみにKについては、(7)が漸近安定であることが前提となり、望ましいモデル(2)より、追従誤差は速いダイナミックスをもつことが必要であることに注意します。

[2] 誤差方程式(4)すなわち

\displaystyle{(13)\quad \dot{e}(t)=A_me(t)+(A-A_m)x(t)+Bu(t)-B_mr(t) }

に対して、スライディングモード制御を適用することを考えます。スイッチング関数を

\displaystyle{(14)\quad s(t)=Se(t) }

とするとき、スライディングモード時は

\displaystyle{(15)\quad Se(t)=0\Rightarrow S\dot{e}(t)=0 }

すなわち

\displaystyle{(16)\quad S\dot{e}(t)=S(A_me(t)+(A-A_m)x(t)+Bu(t)-B_mr(t))=0 }

が成り立ち、等価制御は次式となります。

\displaystyle{(17)\quad u_{eq}(t)=-(SB)^{-1}S(A_me(t)+(A-A_m)x(t)-B_mr(t)) }

このとき追従誤差のダイナミックスは次式となります。

\displaystyle{(18)\quad \begin{array}{l} \dot{e}(t)=A_me(t)+(A-A_m)x(t)+Bu(t)-B_mr(t)\\ =A_me(t)+(A-A_m)x(t)\\ +B(-(SB)^{-1}S(A_me(t)+(A-A_m)x(t)-B_mr(t)))-B_mr(t)\\ =(I-B(SB)^{-1}S)(A_me(t)+(A-A_m)x(t)-B_mr(t))\\ =(I-B(SB)^{-1}S)(A_me(t)+BFx(t)-BGr(t))\\ =(I-B(SB)^{-1}S)A_me(t)+\underbrace{(I-B(SB)^{-1}S)B}_{0}(Fx(t)-Gr(t))\\ =\underbrace{(I-B(SB)^{-1}S)A_m}_{A_{eq}}e(t) \end{array} }

したがって、スライディングモード制御を適用する場合、全体の制御則は、次式で表されます。

\displaystyle{(19)\quad { \boxed{\begin{array}{l} u(t)=-Fx(t)+Gr(t)+\underbrace{u_\ell(t)}_{linear\ control}+\underbrace{u_n(t)}_{switching\ component}\\ u_\ell(t)=-\underbrace{(SB)^{-1}(SA_m-\Phi S)}_{L=L_{eq}+L_{phi}}x(t) \quad(\Phi:stable\ matrix)\\ \displaystyle{u_n(t)=-\underbrace{(SB)^{-1}\rho(t,x)}_{L_n}\frac{P_2s(t)}{||P_2s(t)||}\quad(P_2\Phi+\Phi^TP_2=-I)} \end{array}}} }

演習C51…Flipped Classroom

MATLAB
%cCIP_smcm.m
%-----
 clear all, close all
 global mc m ell g th0
 mc=1; m=0.1; ell=0.2; g=9.8;
 ths=0; %input('ths   = <0,180> ')/180*pi;
 th0=3/180*pi; %input('th(0) = <0,180> ')/180*pi;
%-----
 A=[zeros(2,2) eye(2);zeros(2,4)];
 A(3,1)=0; 
 A(3,2)=-3*m*g/(m+4*mc); 
 A(4,1)=0; 
 A(4,2)=3*(m+mc)*g/((m+4*mc)*ell);  
 B=zeros(4,1);
 B(3)=4/(m+4*mc);
 B(4)=-3/((m+4*mc)*ell); 
 H=[1 0 0 0];
%-----
 lambda=[-0.8*1.5 0.5 -1.5*1.5 1];
 nocomp=2;
 specpos=rand(4,4);
 specent=rand(4,4);
 F=vplace2(A,B,lambda,nocomp,specpos,specent)       
 pl=eig(A-B*F)
%-----
 H=[1 0 0 0];
 Am=A-B*F;
 G=-inv(H*(Am\B));
 Bm=B*G;
%-----
 Mr=0.5; Mth=3/180*pi; 
 Tc=1; Tpen=0.25*2*pi*sqrt(2*ell/g);
 Q=diag([1/Mr^2,1/Mth^2,Tc^2/Mr^2,Tpen^2/Mth^2]);
 S=swflqr(A,B,Q) 
%-----
 Phi=-0.1;
 P2=0.5*inv(-Phi);
 Check=P2*Phi+Phi*P2
 P2S=P2*S;
 Leq=inv(S*B)*S*A;
 LPhi=-inv(S*B)*Phi*S;
 L=Leq+LPhi;
 rho=1;
 Ln=inv(S*B)*rho;
%-----
 x0=[0;th0*0;0;0];
 sim('CIP_smcm_2015a.mdl')
%-----
%eof