HL-20 機体の平衡化と線形化
これは、HL-20 機体用の飛行制御システムの設計と調整に関する 5 部構成の例のシリーズのパート 1 です。このパートでは、機体の平衡化と線形化について説明します。
HL-20 モデル
HL-20 モデルは、NASA HL-20 揚力体機体 (Aerospace Blockset)で説明されているモデルを応用したものです。これは飛行の最終降下と着陸のフェーズにおける機体の 6-DOF モデルです。このフェーズでは推力を使用せず、機体は滑走路に向けて滑空しています。
open_system('csthl20_trim')

このバージョンのモデルには、運動方程式 (EOM)、空力テーブルを用いた力とモーメントの計算、環境モデル、および補助翼、昇降舵、方向舵の要求を 6 つのコントロール サーフェスの偏向角にマッピングする "Controls Selector" ブロックが含まれています。
バッチ平衡化
平衡化では、機体の力とモーメントがゼロになる補助翼、昇降舵および方向舵の偏向角が計算されます。これは、機体の速度 ub、vb、wb および角速度 p、q、r を定常状態に保つことと等価です。降下中は推力が使用されないため、自由度 1 が失われ、平衡化条件を緩和して ub を変化させなければなりません。偏向角 da、de、dr の平衡値は、風に対する機体の方向により異なります。この方向は迎角 (AoA) alpha と横滑り角 (AoS) beta によって特徴付けられます。

関数 operspec と関数 findop を使用して、機体の操作範囲をカバーする (alpha,beta) 値のグリッド上で平衡偏向角を効率的に計算することができます。ここでは -10 ~ 25 度の 8 つの alpha 値と、-10 ~ +10 度の 5 つの beta 値に対してモデルを平衡化します。ノミナルの高度と速度はそれぞれ 10,000 フィートとマッハ 0.6 に設定します。
d2r = pi/180; % degrees to radians m2ft = 3.28084; % meter to feet Altitude = 10000/m2ft; % Nominal altitude Mach = 0.6; % Nominal Mach alpha_vec = -10:5:25; % Alpha Range beta_vec = -10:5:10; % Beta Range [alpha,beta] = ndgrid(alpha_vec,beta_vec); % (Alpha,Beta) grid
操作点仕様の配列を作成するには operspec を使用します。
opspec = operspec('csthl20_trim',size(alpha));
opspec(1)
ans =
Operating point specification for the Model csthl20_trim.
(Time-Varying Components Evaluated at time t=0)
States:
----------
x Known SteadyState Min Max dxMin dxMax
___________ ___________ ___________ ___________ ___________ ___________ ___________
(1.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/Calculate DCM & Euler Angles/phi theta psi
0 false true -Inf Inf -Inf Inf
-0.19945 false true -Inf Inf -Inf Inf
0 false true -Inf Inf -Inf Inf
(2.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/p,q,r
0 false true -Inf Inf -Inf Inf
0 false true -Inf Inf -Inf Inf
0 false true -Inf Inf -Inf Inf
(3.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/ub,vb,wb
202.67 false true -Inf Inf -Inf Inf
0 false true -Inf Inf -Inf Inf
23.257 false true -Inf Inf -Inf Inf
(4.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/xe,ye,ze
-12071.9115 false true -Inf Inf -Inf Inf
0 false true -Inf Inf -Inf Inf
-3047.9999 false true -Inf Inf -Inf Inf
Inputs:
----------
u Known Min Max
_____ _____ _____ _____
(1.) csthl20_trim/da
0 false -Inf Inf
(2.) csthl20_trim/de
0 false -Inf Inf
(3.) csthl20_trim/dr
0 false -Inf Inf
Outputs:
----------
y Known Min Max
_____ _____ _____ _____
(1.) csthl20_trim/p;q;r (1-3)
0 false -Inf Inf
0 false -Inf Inf
0 false -Inf Inf
(2.) csthl20_trim/phi;theta;psi (4-6)
0 false -Inf Inf
0 false -Inf Inf
0 false -Inf Inf
(3.) csthl20_trim/alpha (7)
0 false -Inf Inf
(4.) csthl20_trim/beta (8)
0 false -Inf Inf
(5.) csthl20_trim/Mach (9)
0 false -Inf Inf
(6.) csthl20_trim/Ax,Ay,Az (10-12)
0 false -Inf Inf
0 false -Inf Inf
0 false -Inf Inf
機体の各方向について平衡条件を指定します。このためには、次を行います。
出力 alpha および beta をそれぞれの目的値に固定して、方向を指定します。
マッハ出力を 0.6 に固定して、機体速度を指定します。
角速度 p、q、r を定常としてマークします。
速度 vb および wb を定常としてマークします。
for ct=1:40 % Specify alpha angle opspec(ct).Outputs(3).y = alpha(ct); opspec(ct).Outputs(3).Known = true; % Specify beta angle opspec(ct).Outputs(4).y = beta(ct); opspec(ct).Outputs(4).Known = true; % Specify Mach speed opspec(ct).Outputs(5).y = Mach; opspec(ct).Outputs(5).Known = true; % Mark p,q,r as steady opspec(ct).States(2).SteadyState = true(3,1); % Mark vb,wb as steady opspec(ct).States(3).SteadyState = [false;true;true]; % (phi,theta,psi) and (Xe,Ye,Ze) are not steady opspec(ct).States(1).SteadyState = false(3,1); opspec(ct).States(4).SteadyState = false(3,1); end
平衡化の条件を完全に特徴付けるために次も行います。
p=0 を設定して、ローリングを回避します。
ロール角、ピッチ角、ヨー角 (phi,theta,psi) を (0,alpha,beta) に設定して、風座標系と地球座標系を揃えます。
機体の位置 (Xe,Ye,Ze) を (0,0,-Altitude) に指定します。
for ct=1:40 % Set (phi,theta,psi) to (0,alpha,beta) opspec(ct).States(1).x = [0 ; alpha(ct)*d2r ; beta(ct)*d2r]; opspec(ct).States(1).Known = true(3,1); % Set p=0 (no rolling) opspec(ct).States(2).x(1) = 0; opspec(ct).States(2).Known(1) = true; % Set (Xe,Ye,Ze) to (0,0,-Altitude) opspec(ct).States(4).x = [0 ; 0 ; -Altitude]; opspec(ct).States(4).Known = true(3,1); end
次に findop を使用して、(alpha,beta) の 40 個の組み合わせすべての平衡化条件を一度に計算します。このバッチ モードによる方法ではモデルが 1 回コンパイルされます。FINDOP は最適化を使って各平衡を特徴付ける非線形方程式を解きます。ここではこのタスクに "SQP" アルゴリズムを使用します。
% Set options for FINDOP solver TrimOptions = findopOptions; TrimOptions.OptimizationOptions.Algorithm = 'sqp'; TrimOptions.DisplayReport = 'off'; % Trim model [ops,rps] = findop('csthl20_trim',opspec,TrimOptions);
これにより 8 行 5 列の配列 OPS (操作条件) および RPS (最適化レポート) が返されます。RPS を使用して、各平衡化条件が正しく計算されたことを確認できます。以下は最初の (alpha,beta) ペアの結果を示しています。
[alpha(1) beta(1)]
ans = -10 -10
ops(1)
ans =
Operating point for the Model csthl20_trim.
(Time-Varying Components Evaluated at time t=0)
States:
----------
x
__________
(1.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/Calculate DCM & Euler Angles/phi theta psi
0
-0.17453
-0.17453
(2.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/p,q,r
0
-0.15825
0.008004
(3.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/ub,vb,wb
191.0911
-34.2143
-33.6945
(4.) csthl20_trim/HL20 Airframe/6DOF (Euler Angles)/xe,ye,ze
0
0
-3047.9999
Inputs:
----------
u
________
(1.) csthl20_trim/da
-23.9841
(2.) csthl20_trim/de
-6.4896
(3.) csthl20_trim/dr
4.0858
rps(1).TerminationString
ans =
'Operating point specifications were successfully met.'
バッチ線形化
通常、飛行制御システムのゲインは alpha と beta の関数としてスケジュールされます。詳細については、パート 2 (HL-20 の自動操縦における角速度の制御) を参照してください。これらのゲインを調整するには、40 の平衡化条件における HL-20 機体の線形化モデルが必要です。linearize を使用して、平衡化の操作条件 ops からこれらのモデルを計算します。
% Linearize airframe dynamics at each trim condition G = linearize('csthl20_trim','csthl20_trim/HL20 Airframe',ops); size(G)
8x5 array of state-space models. Each model has 34 outputs, 9 inputs, and 12 states.
"Controls Selector" ブロックの線形バージョンは、昇降舵の偏向の量に依存し、qbar_inv=1 (ノミナル動的圧力 Mach=0.6) について計算する必要があります。便宜上、このブロックも 40 の平衡化条件で線形化します。
CS = linearize('csthl20_trim','csthl20_trim/Controls Selector',ops); % Zero out a/b and qbar_inv channels CS = [CS(:,1:3) zeros(6,2)];
線形モデルの簡略化
線形化された機体モデルには、次のように 12 の状態があります。
xG = G.StateName
xG =
12×1 cell array
{'phi theta psi(1)'}
{'phi theta psi(2)'}
{'phi theta psi(3)'}
{'p,q,r (1)' }
{'p,q,r (2)' }
{'p,q,r (3)' }
{'ub,vb,wb(1)' }
{'ub,vb,wb(2)' }
{'ub,vb,wb(3)' }
{'xe,ye,ze(1)' }
{'xe,ye,ze(2)' }
{'xe,ye,ze(3)' }
これにはロール/ピッチ/ヨー自動操縦の制御下にない状態や、この自動操縦の設計にほとんど寄与しない状態も含まれています。制御目的の場合、最も重要な状態は、ロール角 phi、機体の速度 ub、vb、wb、および角速度 p、q、r です。したがって、xelim を使用して、これらの状態のみを保持する 7 次モデルを取得します。
G7 = G;
xKeep = {...
'phi theta psi(1)'
'ub,vb,wb(1)'
'ub,vb,wb(2)'
'ub,vb,wb(3)'
'p,q,r (1)'
'p,q,r (2)'
'p,q,r (3)'};
[~,xElim] = setdiff(xG,xKeep);
for ct=1:40
G7(:,:,ct) = xelim(G(:,:,ct),xElim,'Truncate');
end
これらの線形化モデルが得られたら、飛行制御システム ゲインの調整とスケジューリングのタスクに進むことができます。この例のパート 2 については、HL-20 の自動操縦における角速度の制御を参照してください。