8.4.3 最適サーボシステム


 Simulink を利用した最適サーボ制御のシミュレーションを行うためのファイル

 (1) 関数 "lqr" による最適サーボシステムの設計 ...... M ファイル optimal_servo.m (p.179-180)
clear
format compact

A = [ 0  1  0  0
     -4 -2  4  2
      0  0  0  1
      2  1 -2 -1 ];
B = [ 0
      2
      0
      0 ];
C = [ 0  0  1  0 ];

Ae = [  A  zeros(4,1)
       -C  zeros(1,1) ];
Be = [ B
       zeros(1,1) ];

Q11 = 100;  Q22 = 600;
Qe = [  C'*Q11*C   zeros(4,1)
       zeros(1,4)     Q22     ];
Re = 1;

Pe = care(Ae,Be,Qe,Re);
P11 = Pe(1:4,1:4)
P12 = Pe(1:4,5)
P22 = Pe(5,5)

K = - inv(Re)*B'*P11
G = - inv(Re)*B'*P12

M0 = [ A  B
       C  0 ];
Fa = [ -K+2*G*inv(P22)*P12'  1 ]*inv(M0)*[ zeros(4,1); 1 ]

Fb = - 2*G*inv(P22)*P12'

 (2) シミュレーション ...... Simulink モデル (p.181)
simulink_optimal_servo_R2010b.mdl(R2010b 以降のバージョン用)
simulink_optimal_servo_R2007b.mdl(R2007b 以降のバージョン用)
simulink_optimal_servo_R13SP1.mdl(R13SP1 以降のバージョン用)
 (3) シミュレーション結果の表示 ...... M ファイル plot_data_cart.m (p.111)
plot(t,y); 
grid;
xlabel('t [s]');
ylabel('position (cart2) [m]');

 (3') シミュレーション結果の表示(グラフのカスタマイズ) ...... M ファイル plot_data_cart2.m (本には記載していない)
figure(1);
plot(t,y,'r','linewidth',2); 
grid;

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

set(gca,'xtick',[0:1:10]);
set(gca,'ytick',[0:0.25:1.5]);

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

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

set(gcf,'position',[50 50 900 420])


 実行結果

 (1) 最適サーボシステムの設計と初期状態 x(0) の設定
>> optimal_servo
P11 =
    3.0880    1.9517   20.0795    7.7123
    1.9517    1.4273   11.5348    4.9775
   20.0795   11.5348  217.7154   60.8435
    7.7123    4.9775   60.8435   21.2483
P12 =
  -22.1183
  -12.2474
 -291.6503
  -72.3007
P22 =
  660.6984
K =
   -3.9033   -2.8546  -23.0696   -9.9549
G =
   24.4949
Fa =
    3.7074
Fb =
    1.6400    0.9081   21.6254    5.3610
>> x0 = [ 0  0  0.25  0 ]';
 (2) シミュレーション開始

    もしくは
    もしくは
>> sim('simulink_optimal_servo_R2010b')
 (3) シミュレーション結果の表示
>> plot_data_cart

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