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

モデル規範による追従制御…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) }

の状態を追従するように、すなわち追従誤差e(t)について

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

となるように制御則を決定したいとします。これは状態オブザーバの設計によく似ていますが、モデル(2)の入力が新規の入力r(t)であることが違います。

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

\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}=A_me+(A-A_m)x+Bu-B_mr\\ =A_me+(A-A_m)x+B(-Ke-Fx+Gr)-B_mr\\ =A_me+(A-A_m)x-BKe-BB^\dag(A-A_m)x+BB^\dag B_mr-B_mr\\ =(A_m-BK)e-\underbrace{(BB^\dag-I)(A-A_m)}_{0}x+\underbrace{(BB^\dag -I)B_m}_{0}r\\ \end{array} }

以上から、制御則(6)の設計の指針として、まずFGは(5)より

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

だから、望ましいモデル(2)を(1)に対する状態フィードバックと入力変換で得るものとします。特にGrから出力

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

までの定常ゲイン

\displaystyle{(11)\quad \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) }

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

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

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

[2] そこでスライディングモード制御を適用することを考えます。まずスイッチング関数を

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

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

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

すなわち

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

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

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

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

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

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

\displaystyle{(18)\quad { \begin{array}{l} u(t)=-Fx(t)+Gr(t)+u_\ell(t)+u_n(t)\\ u_\ell(t)=-(SB)^{-1}(SA_m-\Phi S)e(t)\\ u_n(t)=-(SB)^{-1}\rho(t,e)\frac{P_2s(t)}{||P_2s(t)||} \end{array}} }

ただし

\displaystyle{(19)\quad P_2\Phi+\Phi^TP_2=-I }

演習…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
SCILAB