Main Content

機体の平衡化と線形化

この例では、Simulink® Control Design™ を使用して機体の平衡化と線形化を実行する方法を示します。

標準的な設計法で自動操縦を設計するには、平衡化した多くの飛行条件に対する機体のピッチのダイナミクスの線形モデルが必要です。MATLAB® では、平衡化条件を決定し、線形状態空間モデルを非線形 Simulink® および Aerospace Blockset™ モデルから直接導き出すことができます。時間を節約でき、モデルの検証にも役立ちます。Simulink Control Design で提供されている関数を使用することにより、機体の動作を開ループ周波数 (または時間) 応答の観点から可視化できます。

誘導モデルの初期化

最初の問題は、昇降舵の偏差と、結果として得られる平衡化した本体比 (q) を見つけることです。これにより、ミサイルが設定速度で飛行しているときの所定の入射角値が生成されます。平衡化条件が見つかると、その平衡化条件周りの状態での摂動のダイナミクスに対する線形モデルを導出できます。

open_system('aero_guidance_airframe');

状態値の定義

h_ini     = 10000/m2ft;      % Trim Height [m]
M_ini     = 3;               % Trim Mach Number
alpha_ini = -10*d2r;         % Trim Incidence [rad]
theta_ini = 0*d2r;           % Trim Flightpath Angle [rad]
v_ini = M_ini*(340+(295-340)*h_ini/11000); 	% Total Velocity [m/s]

q_ini = 0;               % Initial pitch Body Rate [rad/sec]

操作点と状態仕様の設定

最初の状態仕様は Position 状態、2 番目の状態仕様は Theta です。どちらも既知のものですが、定常状態にはありません。3 番目の状態仕様は、変数 w が定常状態にあるボディ軸の角度比です。

opspec = operspec('aero_guidance_airframe');
opspec.States(1).Known = [1;1];
opspec.States(1).SteadyState = [0;0];
opspec.States(2).Known = 1;
opspec.States(2).SteadyState = 0;
opspec.States(3).Known = [1 1];
opspec.States(3).SteadyState = [0 1];

操作点の検索、I/O の設定、線形化

op = findop('aero_guidance_airframe',opspec);

io(1) = linio('aero_guidance_airframe/Fin Deflection',1,'input');
io(2) = linio('aero_guidance_airframe/Selector',1,'output');
io(3) = linio(sprintf(['aero_guidance_airframe/Aerodynamics &\n', ...
                    'Equations of Motion']),3,'output');

sys = linearize('aero_guidance_airframe',op,io);
 Operating point search report:
---------------------------------

opreport = 


 Operating point search report for the Model aero_guidance_airframe.
 (Time-Varying Components Evaluated at time t=0)

Operating point specifications were successfully met.
States: 
----------
   Min         x         Max       dxMin        dx       dxMax   
__________ __________ __________ __________ __________ __________
                                                                 
(1.) aero_guidance_airframe/Aerodynamics & Equations of Motion/ Equations of Motion (Body Axes)/Position
    0          0          0         -Inf     967.6649     Inf    
-3047.9999 -3047.9999 -3047.9999    -Inf    -170.6254     Inf    
(2.) aero_guidance_airframe/Aerodynamics & Equations of Motion/ Equations of Motion (Body Axes)/Theta
    0          0          0         -Inf     -0.21604     Inf    
(3.) aero_guidance_airframe/Aerodynamics & Equations of Motion/ Equations of Motion (Body Axes)/U,w
 967.6649   967.6649   967.6649     -Inf     -14.0977     Inf    
-170.6254  -170.6254  -170.6254      0      -7.439e-08     0     
(4.) aero_guidance_airframe/Aerodynamics & Equations of Motion/ Equations of Motion (Body Axes)/q
   -Inf     -0.21604     Inf         0      3.3582e-08     0     

Inputs: 
----------
  Min      u      Max  
_______ _______ _______
                       
(1.) aero_guidance_airframe/Fin Deflection
 -Inf   0.13615   Inf  

Outputs: 
----------
  Min       y       Max   
________ ________ ________
                          
(1.) aero_guidance_airframe/q
  -Inf   -0.21604   Inf   
(2.) aero_guidance_airframe/az
  -Inf   199.2481   Inf   

平衡化した状態の選択、LTI オブジェクトの作成、ボード応答のプロット

airframe = ss(sys.A(3:4,3:4),sys.B(3:4,:),sys.C(:,3:4),sys.D);

set(airframe,'inputname',{'Elevator'}, ...
             'outputname',[{'az'} {'q'}]);

ltiview('bode',airframe);

bdclose('aero_guidance_airframe');

関連するトピック