メインコンテンツ

機体の平衡化と線形化

この例では、Simulink® Control Design™、Control System Toolbox™、および Aerospace Blockset™ を使用して機体モデルの平衡化と線形化を実行する方法を示します。

古典制御設計法を使用して自動操縦を設計するには、指定した操作 (平衡化) の条件に関する機体のダイナミクスの線形モデルが必要です。MATLAB® では、これらの平衡化条件を計算し、線形状態空間モデルを非線形 Simulink モデルから直接導き出すことができます。結果として得られる線形モデルを使用して、時間領域または周波数領域で機体のダイナミクスを解析できます。

機体モデルを開く

モデルは、操作可能な高度における音速と空気密度を計算するための ISA Atmosphere Model で構成されています。機体は 2 つの主要なサブシステムで構成されています。1 つは空力 (Fx, Fz) とピッチのモーメント (M) を計算する Aerodynamics サブシステム、もう 1 つはボディ座標軸に剛体運動方程式を実装する 3DOF (Body Axes) ブロックです。

open_system('AirframeTrim');

初期条件の定義

システムを平衡化および線形化する必要がある、目的の飛行条件を指定します。

hInitial     = 10000/m2ft;      % Trim Height [m]
MInitial     = 3;               % Trim Mach Number
alphaInitial = -10*d2r;         % Trim Incidence [rad]
thetaInitial = 0*d2r;           % Trim Flightpath Angle [rad]
vInitial     = MInitial*(340+(295-340)*hInitial/11000); 	% Total Velocity [m/s]
qInitial     = 0;               % Initial pitch Body Rate [rad/sec]

操作点の仕様の設定

operspec オブジェクトを使用して、操作点において既知の状態と、定常状態の条件を満たす必要がある状態を指定します。最初の状態である慣性位置と 2 番目の状態であるピッチ角は、既知の値として指定されていますが、定常状態である必要はありません。3 番目の状態であるボディ軸速度も既知の値として指定されていますが、正味の垂直加速度を避けるために、垂直速度成分のみが定常状態である必要があります。

opspec = operspec('AirframeTrim');
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];

モデルの線形化

平衡化の制約を満たす操作点を計算します。

op = findop('AirframeTrim',opspec);
 Operating point search report:
---------------------------------

opreport = 


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

Operating point search completed successfully using optimization.
States: 
----------
   Min         x         Max       dxMin        dx       dxMax   
__________ __________ __________ __________ __________ __________
                                                                 
(1.) AirframeTrim/Aerodynamics & Equations of Motion/3DOF (Body Axes)/Position
    0          0          0         -Inf     967.6649     Inf    
-3047.9999 -3047.9999 -3047.9999    -Inf    -170.6254     Inf    
(2.) AirframeTrim/Aerodynamics & Equations of Motion/3DOF (Body Axes)/Theta
    0          0          0         -Inf     -0.21604     Inf    
(3.) AirframeTrim/Aerodynamics & Equations of Motion/3DOF (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.) AirframeTrim/Aerodynamics & Equations of Motion/3DOF (Body Axes)/q
   -Inf     -0.21604     Inf         0      3.3582e-08     0     

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

Outputs: 
----------
   Min         y         Max    
__________ __________ __________
                                
(1.) AirframeTrim/q
   -Inf     -0.21604     Inf    
(2.) AirframeTrim/Az
   -Inf    -7.439e-08    Inf    

昇降舵の偏向角を入力として定義し、法線加速度とピッチ レートを出力として選択することで、線形化によって昇降舵のコマンドへの主要な縦方向の応答が得られるようにします。

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

平衡化された操作点に関して、機体のダイナミクスを線形化します。

sys = linearize('AirframeTrim',op,io);

線形化モデルの解析

短周期ダイナミクスに関連付けられている縦方向のピッチ軸の状態を抽出し、低次元化された状態空間モデルを構築します。

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'}]);

線形システム アナライザーを使用して、周波数領域で線形化された機体モデルを解析します。

linearSystemAnalyzer('bode',airframe);

ボード線図には、短周期ダイナミクスが主に影響する中周波数において、機体が昇降舵の入力に最も強く応答することが示されています。

参考

トピック