LQI制御の応用…Homework
[1] 倒立振子は制御なしには平衡状態を保てないので、制御技術の有効性を示すのに、よく研究されています。次図は様々な倒立振子を示しています。
図1 様々な倒立振子
これらの倒立振子について、非線形シミュレータを開発し、平衡状態まわりの挙動を表す線形状態方程式を得ていました。これらに基づいて、以下では、LQ制御系を設計します。
[2] CIP
平衡状態周りの挙動を表す線形状態方程式は次式で与えられます。
これに対して、倒立位置をに変更可能とする、積分動作をもつ状態フィードバック
を、LQI制御のアルゴリズムに沿って設計します。
ステップ1 被制御変数の決定
制御目的は倒立位置をに変更し、安定化することですから
のように選びます。このとき、明らかに次式が成り立ちます。
ここで、は正則であることから、倒立位置を変えたときの状態と入力が一意に定まります。
ステップ2 偏差系の安定化
偏差系
を、状態フィードバック
によるLQ制御で安定化します。その際、評価関数としてはたとえば
を選び、これを最小にするような(2.6)を設計します。
ステップ3 積分動作を加えた状態フィードバックの構成
次式から積分動作を加えた状態フィードバック(2.2)を構成します。
MATLAB |
%cCIP_lqi.m
%-----
clear all, close all
global mc m ell g th0
mc=1; m=0.1; ell=0.2; g=9.8;
th0=0/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);
%-----
Tcart=1; Mr=0.5;
Tpend=1/4*2*pi*sqrt(4/3*ell/g); Mth=3/180*pi;
Tamp=0.1; Mamp=1;
CM=eye(2,4); CS=[1 0]; C=CS*CM;
n=size(A,1); m=size(C,1); r=size(B,2);
%-----
AE=[A B;zeros(m,n+m)];
BE=[zeros(n,m);eye(m)];
CE=eye(n+m);
QE=diag([1/Mr 1/Mth Tcart/Mr*0 Tpend/Mth*0 1/Mamp].^2);
RE=(Tamp/Mamp)^2;
[KE,pcl]=opt(AE,BE,CE,QE,RE);
FE=KE/[A B;C zeros(m)];
pcl, F=FE(:,1:n), FI=FE(:,n+1:n+m)
%-----
CE=diag([100,180/pi])*eye(2,5);
sysE=ss(AE-BE*KE,[],[CE;-KE],[]);
t=0:0.05:5;
rc=0.5
xE0=[-rc;0;0;0;0];
initial(sysE,xE0,t), grid
%-----
xs=[0;0;0;0];
us=0;
sim("nCIP_lqi")
%-----
|
[3] CIP2
平衡状態と平衡入力周りの挙動を表す線形状態方程式は次式で与えられます。
これに対して、倒立位置をに変更可能とする、積分動作をもつ状態フィードバック
を、LQI制御のアルゴリズムに沿って設計します。
●レールの傾斜角は未知とするのが実際的です。そこで
として、レールの傾斜がないときの(2.1)に外乱が加わっていると考えます。もちろんは定値ではないのですが、どれくらいの効果があるかシミュレーションで確かめてみます。
MATLAB |
%cCIP2_lqi.m
%-----
clear all, close all
global mc m ell g alpha th0
mc=1; m=0.1; ell=0.2; g=9.8;
alpha=3/180*pi;
th0=3/180*pi %input('ths = <0,180> ')/180*pi;
%-----
A=[zeros(2,2) eye(2);zeros(2,4)];
A(3,1)=0;
A(3,2)=-6*cos(alpha)*m*g/(8*mc+(5-3*cos(2*alpha))*m);
A(4,1)=0;
A(4,2)=6*(m+mc)*g/((8*mc+(5-3*cos(2*alpha))*m)*ell);
B=zeros(4,1);
B(3)=8/(8*mc+(5-3*cos(2*alpha))*m);
B(4)=-6*cos(alpha)/((8*mc+(5-3*cos(2*alpha))*m)*ell);
%----- alpha=0の設計モデル
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);
%-----
Tcart=1; Mr=0.5;
Tpend=1/4*2*pi*sqrt(4/3*ell/g); Mth=3/180*pi;
Tamp=0.1; Mamp=1;
CM=eye(2,4); CS=[1 0]; C=CS*CM;
n=size(A,1); m=size(C,1); r=size(B,2);
%-----
AE=[A B;zeros(m,n+m)];
BE=[zeros(n,m);eye(m)];
CE=eye(n+m);
QE=diag([1/Mr 1/Mth Tcart/Mr*0 Tpend/Mth*0 1/Mamp].^2);
RE=(Tamp/Mamp)^2;
[KE,pcl]=opt(AE,BE,CE,QE,RE);
FE=KE/[A B;C zeros(m)];
pcl, F=FE(:,1:n), FI=FE(:,n+1:n+m)
%-----
CE=diag([100,180/pi])*eye(2,5);
sysE=ss(AE-BE*KE,[],[CE;-KE],[]);
t=0:0.05:5;
rc=0.5
xE0=[-rc;0;0;0;0];
initial(sysE,xE0,t), grid
%-----
xs=[0;0;0;0];
us=(mc+m)*g*sin(alpha)*0;
sim("nCIP2_lqi")
%-----
%eof
|
[4] AIP
平衡状態と平衡入力周りの挙動を表す線形状態方程式は次式で与えられます。
これに対して、アームの角度をに変更可能とする、積分動作をもつ状態フィードバック
を、LQI制御のアルゴリズムに沿って設計します。
MATLAB |
%cAIP_lq.m
%-----
clear all, close all
global m1 m2 ell1 ell2 g th10 th20
m1=0.1; m2=0.2; ell1=0.1; ell2=0.2; g=9.8;
th10=0/180*pi %input('th1(0) = <0,180> ')/180*pi;
th20=0/180*pi %input('th2(0) = <0,180> ')/180*pi;
%----- th10=0 における線形モデル
A=[zeros(2,2) eye(2);zeros(2,4)];
A(3,1)=3*(2*m2+m1)*g/((3*m2+4*m1)*ell1);
A(3,2)=-9*m2*g/(2*(3*m2+4*m1)*ell1);
A(4,1)=-9*(2*m2+m1)*g/(2*(3*m2+4*m1)*ell2);
A(4,2)=3*(3*m2+m1)*g/((3*m2+4*m1)*ell2);
B=zeros(4,1);
B(3)=3/((3*m2+4*m1)*ell1^2);
B(4)=-9/(2*(3*m2+4*m1)*ell1*ell2);
%-----
Tpend1=1/4*2*pi*sqrt(4/3*ell1/g); Mth1=3/180*pi;
Tpend2=1/4*2*pi*sqrt(4/3*ell2/g); Mth2=3/180*pi;
Tamp=0.1; Mamp=1;
CM=eye(2,4); CS=[1 0]; C=CS*CM;
n=size(A,1); m=size(C,1); r=size(B,2);
%-----
AE=[A B;zeros(m,n+m)];
BE=[zeros(n,m);eye(m)];
CE=eye(n+m);
QE=diag([1/Mth1 1/Mth2 Tpend1/Mth1*0 Tpend2/Mth2*0 1/Mamp].^2);
RE=(Tamp/Mamp)^2;
[KE,pcl]=opt(AE,BE,CE,QE,RE);
FE=KE/[A B;C zeros(m)];
pcl, F=FE(:,1:n), FI=FE(:,n+1:n+m)
%-----
CE=diag([180/pi,180/pi])*eye(2,5);
sysE=ss(AE-BE*KE,[],[CE;-KE],[]);
t=0:0.01:1;
th1c=10/180*pi
xE0=[-th10;-th20;0;0;0];
initial(sysE,xE0,t), grid
%-----
xs=[0;0;0;0];
us=-(m1+2*m2)*ell1*g*sin(th1c)
sim("nAIP_lqi")
%-----
%eof
|
[5] PIP
平衡状態周りの挙動を表す線形状態方程式は次式で与えられます。
これに対して、倒立位置をに変更可能とする、積分動作をもつ状態フィードバック
を、LQI制御のアルゴリズムに沿って設計します。
MATLAB |
%cPIP_lqi.m
%-----
clear all, close all
global mc m1 m2 ell1 ell2 g th10 th20
mc=1; m1=0.1; m2=0.2; ell1=0.15; ell2=0.2; g=9.8;
th10=0/180*pi %input('th1(0) = <0,180> ')/180*pi;
th20=-1/180*pi %input('th2(0) = <0,180> ')/180*pi;
%-----
A=[zeros(3,3) eye(3);zeros(3,6)];
A(4,1)=0;
A(4,2)=-3*m1*g/(m1+m2+4*mc);
A(4,3)=-3*m2*g/(m1+m2+4*mc);
A(5,1)=0;
A(5,2)=(12*m1+3*m2+12*mc)*g/((4*m1+4*m2+16*mc)*ell1);
A(5,3)=9*m2*g/((4*m1+4*m2+16*mc)*ell1);
A(6,1)=0;
A(6,2)=9*m1*g/((4*m1+4*m2+16*mc)*ell2);
A(6,3)=(3*m1+12*m2+12*mc)*g/((4*m1+4*m2+16*mc)*ell2);
B=zeros(6,1);
B(4)=4/(m1+m2+4*mc);
B(5)=-3/((m1+m2+4*mc)*ell1);
B(6)=-3/((m1+m2+4*mc)*ell2);
%-----
Tcart=1; Mr=0.5;
Tpend1=1/4*2*pi*sqrt(4/3*ell1/g); Mth1=3/180*pi;
Tpend2=1/4*2*pi*sqrt(4/3*ell2/g); Mth2=3/180*pi;
Tamp=0.1; Mamp=1;
CM=eye(3,6); CS=[1 0 0]; C=CS*CM;
n=size(A,1); m=size(C,1); r=size(B,2);
%-----
AE=[A B;zeros(m,n+m)];
BE=[zeros(n,m);eye(m)];
CE=eye(n+m);
QE=diag([1/Mr 1/Mth1 1/Mth2 Tcart/Mr*0 Tpend1/Mth1*0 Tpend2/Mth2*0 1/Mamp].^2);
RE=(Tamp/Mamp)^2;
[KE,pcl]=opt(AE,BE,CE,QE,RE);
FE=KE/[A B;C zeros(m)];
pcl, F=FE(:,1:n), FI=FE(:,n+1:n+m)
%-----
CE=diag([100,180/pi,180/pi])*eye(3,7);
sysE=ss(AE-BE*KE,[],[CE;-KE],[]);
t=0:0.05:5;
rc=0.5
xE0=[-rc;0;0;0;0;0;0];
initial(sysE,xE0,t), grid
%-----
xs=[0;0;0;0;0;0];
us=0;
sim("nPIP_lqi")
%-----
%eof
|
[6] DIP
平衡状態周りの挙動を表す線形状態方程式は次式で与えられます。
これに対して、倒立位置をに変更可能とする、積分動作をもつ状態フィードバック
を、LQI制御のアルゴリズムに沿って設計します。
MATLAB |
%cDIP_lqi.m
%-----
clear all, close all
global mc m1 m2 ell1 ell2 g th10 th20
mc=1; m=0.1; m1=m; m2=m; ell=0.15; ell1=ell; ell2=ell; g=9.8;
th10=1/180*pi %input('th1(0) = <0,180> ')/180*pi;
th20=0 %input('th2(0) = <0,180> ')/180*pi;
%-----
A=[zeros(3,3) eye(3);zeros(3,6)];
A(4,1)=0;
A(4,2)=-18*m*g/(2*m+7*mc);
A(4,3)=3*m*g/(4*m+14*mc);
A(5,1)=0;
A(5,2)=(15*m+12*mc)*g/((2*m+7*mc)*ell);
A(5,3)=-(9*m+18*mc)*g/((8*m+28*mc)*ell);
A(6,1)=0;
A(6,2)=-(9*m+18*mc)*g/((2*m+7*mc)*ell);
A(6,3)=(15*m+48*mc)*g/((8*m+28*mc)*ell);
B=zeros(6,1);
B(4)=7/(2*m+7*mc);
B(5)=-9/((4*m+14*mc)*ell);
B(6)=3/((4*m+14*mc)*ell);
%------
Tcart=1; Mr=0.5;
Tpend1=1/4*2*pi*sqrt(4/3*ell1/g); Mth1=3/180*pi;
Tpend2=1/4*2*pi*sqrt(4/3*ell2/g); Mth2=3/180*pi;
Tamp=0.1; Mamp=1;
CM=eye(3,6); CS=[1 0 0]; C=CS*CM;
n=size(A,1); m=size(C,1); r=size(B,2);
%-----
AE=[A B;zeros(m,n+m)];
BE=[zeros(n,m);eye(m)];
CE=eye(n+m);
QE=diag([1/Mr 1/Mth1 1/Mth2 Tcart/Mr*0 Tpend1/Mth1*0 Tpend2/Mth2*0 1/Mamp].^2);
RE=(Tamp/Mamp)^2;
[KE,pcl]=opt(AE,BE,CE,QE,RE);
FE=KE/[A B;C zeros(m)];
pcl, F=FE(:,1:n), FI=FE(:,n+1:n+m)
%-----
CE=diag([100,180/pi,180/pi])*eye(3,7);
sysE=ss(AE-BE*KE,[],[CE;-KE],[]);
t=0:0.05:5;
rc=0.5
xE0=[-rc;0;0;0;0;0;0];
initial(sysE,xE0,t), grid
%-----
xs=[0;0;0;0;0;0];
us=0;
sim("nDIP_lqi")
%-----
%eof
|