[0] このページは、「SCILABによる倒立振子の特性解析」の続きです。以下では、物理定数を次のように仮定します。
[kg], [m], [m], [deg]
[1] まず,安定性を調べます。そのために,SCILABの関数specを用いて,行列の固有値を求めると,次のように得られます。
したがって,3つの固有値の実部が負ではなく,漸近安定性の条件(すべての固有値の実部が負)を満足していません。よって,倒立振子は不安定な制御対象であると判定します。
次に,可制御性の判定を行ないます。そのために,可制御性行列の階数が,制御対象の次数4に等しいか,すなわち
が成り立つかどうかを調べます。行列 の最小特異値を求めると,次のように得られます。
すべての最小特異値は正なので,倒立振子の可制御性は成り立つと判定します。
次に,可観測性の判定を行ないます。そのために,可観測性行列の階数が,制御対象の次数4に等しいか,すなわち
が成り立つかどうかを調べます。行列 の最小特異値を求めると,次のように得られます。
すべての最小特異値は正なので,倒立振子の可観測性は成り立つと判定します。
以上の計算を,SCILABで行うためのプログラムを,次に示します。
//cip.sce
M=0.94; m=0.23; ell=0.6413/2; g=9.8;
alpha=5/180*%pi
a32=-6*m*g/(8*M+(5-3*cos(2*alpha))*m);
b3=8/(8*M+(5-3*cos(2*alpha))*m);
a42=6*(M+m)*g/(8*M+(5-3*cos(2*alpha))*m)/ell;
b4=-6*cos(alpha)/(8*M+(5-3*cos(2*alpha))*m)/ell;
A=[0 0 1 0;0 0 0 1;0 a32 0 0;0 a42 0 0];
B=[0;0;b3;b4];
C=eye(2,4);
r=spec(A)
for i=1:4, min(svd([B A-r(i)*eye(4,4)])), end
for i=1:4, min(svd([C; A-r(i)*eye(4,4)])), end
[2] 不安定な倒立振子を安定化するための状態フィードバック
を決定することを考えます。そのために安定な閉ループ系
の応答に対して,2次形式評価関数
ただし、
を最小化するものを選ぶことを考えます。そのような安定化状態フードバックのゲイン行列は,リッカチ方程式CARE
ただし、
の解を用いて,次のように与えられます。
以上の計算を,SCILABで行うためのプログラムを,次に示します。
Mr=1; Tr=0.1; Mth=5/180*%pi;
Tth=(1/4)*(2*%pi*sqrt(4/3*ell/g)); Mu=5;
q1=1/Mr; q2=1/Mth; q3=Tr/Mr; q4=Tth/Mth; r1=1/Mu; rho=1;
Q=diag([q1^2,q2^2,q3^2,q4^2]); R=rho^2*r1^2;
//—–
function [F,p]=opt(A,B,C,Q,R)
w2=R\B’;
[v,p]=spec([A -B*w2;-C’*Q*C -A’]); p=diag(p);
[dummy,index]=sort(real(p));
n=size(A,1); j=index(n+1:n+n);
p=p(j); x=v(1:n,j); y=v(n+1:n+n,j);
X=real(y/x); F=w2*X;
endfunction
//—–
[F,p]=opt(A,B,eye(4,4),Q,R);
function dz=clps1(t,z),dz=(A-B*F)*z,endfunction
t0=0; t=0:0.01:10; x0=[0;3/180*%pi;0;0];
z=ode(x0,t0,t,clps1);
scf(0);
subplot(211),plot(t,diag([100 180/%pi])*C*z); mtlb_grid
subplot(212),plot(t,-F*z); mtlb_grid