メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

Simulink Control Design による機体のトリムと線形化

この例では、Simulink ® Control Design™ ソフトウェアを使用して機体をトリミングおよび線形化する方法を示します。

従来の設計手法で自動操縦装置を設計するには、いくつかの調整された飛行条件に対する機体のピッチダイナミクスの線形モデルが必要です。MATLAB ® テクニカル コンピューティング環境では、トリム条件を決定し、非線形 Simulink ® および Aerospace Blockset ™ モデルから直接線形状態空間モデルを導出できます。このステップにより時間が節約され、モデルの検証に役立ちます。Simulink Control Design 関数を使用すると、オープンループ周波数または時間応答の観点から機体の動きを視覚化できます。

誘導モデルの初期化

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

open_system('aeroblk_guidance_airframe');

状態値の定義

トリミングの状態値を定義します。

  • 高さ [m]

  • マッハ数

  • 発生率 [rad]

  • 飛行経路角度 [rad]

  • 総速度 [m/s]

  • 初期ピッチボディレート [rad/sec]

heightIC    = 10000/m2ft;
machIC      = 3;
alphaIC     = -10*d2r;
thetaIC     = 0*d2r;
velocityIC  = machIC*(340+(295-340)*heightIC/11000);
pitchRateIC = 0;

操作点と状態仕様の設定

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

opspec = operspec('aeroblk_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('aeroblk_guidance_airframe',opspec);

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

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

opreport = 


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

Operating point specifications were successfully met.
States: 
----------
   Min         x         Max       dxMin        dx       dxMax   
__________ __________ __________ __________ __________ __________
                                                                 
(1.) aeroblk_guidance_airframe/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.) aeroblk_guidance_airframe/Aerodynamics & Equations of Motion/3DOF (Body Axes)/Theta
    0          0          0         -Inf     -0.21604     Inf    
(3.) aeroblk_guidance_airframe/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.) aeroblk_guidance_airframe/Aerodynamics & Equations of Motion/3DOF (Body Axes)/q
   -Inf     -0.21604     Inf         0      3.3582e-08     0     

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

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

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

状態ベクトル内の目的の状態のインデックスを見つけます。次に、LTI オブジェクトを作成し、周波数応答をボード線図として表示します。

names = sys.StateName;
q_idx = find(strcmp('q',names));
az_idx = find(strcmp('U,w(2)',names));

airframe = ss(sys.A([az_idx q_idx],[az_idx q_idx]),sys.B([az_idx q_idx],:),sys.C(:,[az_idx q_idx]),sys.D);

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

linearSystemAnalyzer('bode',airframe);

著作権 1990-2023 The MathWorks, Inc.

参考

ブロック

関数