6.5.2 同一次元オブザーバを利用した出力フィードバック制御


 Simulink を利用した出力フィードバック制御のシミュレーションを行うためのファイル

 (1) 制御対象の状態空間表現の定義と極配置法による出力フィードバックコントローラ設計
    ...... M ファイル following_observer.m (p.135)
clear
format compact

M1 = 0.5;  M2 = 1; 
k  = 2;    mu = 1;

A = [  0      1      0      0
     -k/M1 -mu/M1   k/M1  mu/M1
       0      0      0      1
      k/M2  mu/M2  -k/M2 -mu/M2 ];
B = [  0
      1/M1
       0
       0  ];
C = [ 0  0  1  0 ];
% ----------------------------------
p(1) = -2+2j; p(2) = -2-2j;
p(3) = -2+j;  p(4) = -2-j;

K = - acker(A,B,p)
M0 = [ A  B
       C  0 ];
H = [ -K  1 ]*inv(M0)*[ zeros(4,1)
                            1      ]
disp('--- A + B*K の固有値 ---');
eig(A + B*K)
% ----------------------------------
q(1) = -4+4j; q(2) = -4-4j;
q(3) = -4+2j; q(4) = -4-2j;

L = - acker(A',C',q)'
disp('--- A + L*C の固有値 ---');
eig(A + L*C)
% ----------------------------------
Acl = [  A      B*K
       -L*C  A+B*K+L*C ];
disp('--- Acl の固有値 ---');
eig(Acl)
 (2) 制御対象のパラメータ変動と初期状態 x(0) = 0 の設定 ...... M ファイル parameter_variation.m (p.135-136)
disp('--- M1, M2 が公称値の N 倍 ---');
N = input('N = ');

M1v = N*M1;  M2v = N*M2;

Av = [    0       1       0       0
       -k/M1v -mu/M1v   k/M1v  mu/M1v
          0       0       0       1
        k/M2v  mu/M2v  -k/M2v -mu/M2v ];
Bv = [  0
      1/M1v
        0
        0  ];
x0 = [-0.5; 0; 0.5; 0];
 (3) 追従制御のシミュレーション ...... Simulink モデル (p.137)
simulink_following_observer_R2010b.mdl(R2010b 以降のバージョン用)
simulink_following_observer_R2007b.mdl(R2007b 以降のバージョン用)
simulink_following_observer_R13SP1.mdl(R13SP1 以降のバージョン用)
 (4) シミュレーション結果の表示 ...... M ファイル plot_data_output.m (p.136)
figure(1); subplot(2,2,1);
plot(t,x(:,1),t,x_hat(:,1),'--');
grid;
xlabel('t [s]');
ylabel('position (cart1) [m]')
legend('x1','x1hat',4)
xlim([0 5]);

figure(1); subplot(2,2,2);
plot(t,x(:,2),t,x_hat(:,2),'--');
grid;
xlabel('t [s]');
ylabel('velocity (cart1) [m/s]')
legend('x2','x2hat',4)
xlim([0 5]);

figure(1); subplot(2,2,3);
plot(t,x(:,3),t,x_hat(:,3),'--');
grid;
xlabel('t [s]');
ylabel('position (cart2) [m]')
legend('x3','x3hat',4)
xlim([0 5]);

figure(1); subplot(2,2,4);
plot(t,x(:,4),t,x_hat(:,4),'--');
grid;
xlabel('t [s]');
ylabel('velocity (cart2) [m/s]')
legend('x4','x4hat',4)
xlim([0 5]);
% ----------------------------------
figure(2); subplot(2,1,1);
plot(t,x(:,3));
grid;
xlabel('t [s]');
ylabel('position (cart2) [m]')
xlim([0 15]);

 (4') シミュレーション結果の表示(グラフのカスタマイズ) ...... M ファイル plot_data_cart2.m (本には記載していない)
% ===================================================================
figure(1)
set(gcf,'position',[100 100 900 650])

% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
figure(1); subplot(2,2,1);
plot(t,x(:,1),    'r',  'linewidth',2);   hold on
plot(t,x_hat(:,1),'b--','linewidth',2); hold off
grid;

xlim([0 5]);
ylim([-1 2]);

% --- グラフのカスタマイズ --------------------------------
set(gca,'xtick',[0:1:5]);
set(gca,'ytick',[-1:1:2]);

set(gca,'fontname','times','fontsize',16);

xlabel('{\it{t}} [s]','fontname','times','fontsize',18);
ylabel('position (cart1) [m]','fontname','times','fontsize',18);

legend('x1','x1hat',4)
set(legend,'fontname','times','fontsize',16);

% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
figure(1); subplot(2,2,2);
plot(t,x(:,2),    'r',  'linewidth',2);   hold on
plot(t,x_hat(:,2),'b--','linewidth',2); hold off
grid;

xlim([0 5]);
ylim([-4 8]);

% --- グラフのカスタマイズ --------------------------------
set(gca,'xtick',[0:1:5]);
set(gca,'ytick',[-4:4:8]);

set(gca,'fontname','times','fontsize',16);

xlabel('{\it{t}} [s]','fontname','times','fontsize',18);
ylabel('velocity (cart1) [m/s]','fontname','times','fontsize',18);

legend('x2','x2hat',4)
set(legend,'fontname','times','fontsize',16);

% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
figure(1); subplot(2,2,3);
plot(t,x(:,3),    'r',  'linewidth',2);   hold on
plot(t,x_hat(:,3),'b--','linewidth',2); hold off
grid;

xlim([0 5]);
ylim([0 1.5]);

% --- グラフのカスタマイズ --------------------------------
set(gca,'xtick',[0:1:5]);
set(gca,'ytick',[0:0.5:1.5]);

set(gca,'fontname','times','fontsize',16);

xlabel('{\it{t}} [s]','fontname','times','fontsize',18);
ylabel('position (cart2) [m]','fontname','times','fontsize',18);

legend('x3','x3hat',4)
set(legend,'fontname','times','fontsize',16);

% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
figure(1); subplot(2,2,4);
plot(t,x(:,4),    'r',  'linewidth',2);   hold on
plot(t,x_hat(:,4),'b--','linewidth',2); hold off
grid;

xlim([0 5]);
ylim([-1.5 3]);

% --- グラフのカスタマイズ --------------------------------
set(gca,'xtick',[0:1:5]);
set(gca,'ytick',[-1.5:1.5:3]);

set(gca,'fontname','times','fontsize',16);

xlabel('{\it{t}} [s]','fontname','times','fontsize',18);
ylabel('velocity (cart2) [m/s]','fontname','times','fontsize',18);

legend('x4','x4hat',4)
set(legend,'fontname','times','fontsize',16);


% ===================================================================
figure(2)
set(gcf,'position',[50 50 900 300])

figure(2); 
plot(t,x(:,3),'r','linewidth',2);
grid;

% --- グラフのカスタマイズ --------------------------------
xlim([0 15]);
ylim([-0.25 1.25]);

set(gca,'xtick',[0:1:15]);
set(gca,'ytick',[-0.25:0.25:1.25]);

set(gca,'fontname','times','fontsize',16);

xlabel('{\it{t}} [s]','fontname','times','fontsize',18);
ylabel('position (cart2) [m]','fontname','times','fontsize',18);


 実行結果(パラメータ変動なし)

 (1) 制御対象の状態空間表現の定義と極配置法による出力フィードバックコントローラ設計
>> following_observer
K =
   -3.5000   -2.5000   -6.5000   -5.5000
H =
    10
--- A + B*K の固有値 ---
ans =
  -2.0000 + 2.0000i
  -2.0000 - 2.0000i
  -2.0000 + 1.0000i
  -2.0000 - 1.0000i
L =
   -22
  -178
   -13
   -71
--- A + L*C の固有値 ---
ans =
  -4.0000 + 4.0000i
  -4.0000 - 4.0000i
  -4.0000 + 2.0000i
  -4.0000 - 2.0000i
--- Acl の固有値 ---
ans =
  -4.0000 + 4.0000i
  -4.0000 - 4.0000i
  -4.0000 + 2.0000i
  -4.0000 - 2.0000i
  -2.0000 + 2.0000i
  -2.0000 - 2.0000i
  -2.0000 + 1.0000i
  -2.0000 - 1.0000i
 (2) 制御対象のパラメータ変動と初期状態 x(0) = 0 の設定
>> parameter_variation
--- M1, M2 が公称値の N 倍 ---
N = 1
 (3) シミュレーション開始

    もしくは
    もしくは
>> sim('simulink_following_observer_R2010b')
 (4) シミュレーション結果の表示
>> plot_data_output

 (4') シミュレーション結果の表示(グラフのカスタマイズ)
>> plot_data_output2


 実行結果(パラメータ変動あり)

 (1) 制御対象の状態空間表現の定義と極配置法による出力フィードバックコントローラ設計

 (2) 制御対象のパラメータ変動と初期状態 x(0) = 0 の設定
>> parameter_variation
--- M1, M2 が公称値の N 倍 ---
N = 1.25
 (3) シミュレーション開始

 (4) シミュレーション結果の表示
>> plot_data_output

 (4') シミュレーション結果の表示(グラフのカスタマイズ)
>> plot_data_output2