ジェット旅客機の固定構造自動操縦
この例では、slTuner と systune を使用して縦方向の自動操縦の標準的な構成を調整する方法を説明します。航空機モデルの提供については Institut Superieur de l'Aeronautique et de l'Espace の D. Alazard 教授にご協力いただき、例の作成については ONERA の Pierre Apkarian 教授にご協力いただきました。
航空機モデルと自動操縦の構成
マッハ 0.7 で 5,000 フィートの高さを飛行する超音速旅客機の縦方向の自動操縦を図 1 に示します。自動操縦の主な目的は、パイロットによって発行される垂直加速度コマンド
に従うことです。フィードバック構造は、ピッチ レート
を制御する内側のループと垂直加速度
を制御する外側のループで構成されています。自動操縦には、フィードフォワード コンポーネントと、ステップ コマンド
への望ましい応答を指定する参照モデル
も含まれます。最後に、次の 2 次ロールオフ フィルター

を使用してノイズを減少させ、モデル化されていないダイナミクスに対する予防策として制御帯域幅を制限します。調整可能なコンポーネントはオレンジ色で強調表示されています。

図 1: 縦方向の自動操縦の構成。
航空機モデル
は 5 状態モデルで、状態変数は、空力速度
(m/s)、上昇角度
(rad)、迎角
(rad)、ピッチ レート
(rad/s)、高度
(m) です。昇降舵の偏向角
(rad) は、垂直負荷係数
を制御するために使用されます。開ループ ダイナミクスには、周波数と減衰比が
= 1.7 (rad/s) および
= 0.33 の
発振、フゴイド モード
= 0.64 (rad/s) と
= 0.06、および低速高度モード
= -0.0026 が含まれます。
load ConcordeData G bode(G,{1e-3,1e2}), grid title('Aircraft Model')

の原点の 0 に注目してください。この 0 により、ゼロの定常偏差は達成できず、代わりに加速度コマンドへの過渡応答に焦点を当てなければなりません。加速度コマンドは一般的に過渡的であるため、定常状態の動作は問題にはなりません。この原点の 0 は純粋な積分動作も除外するため、
= 0.001 として疑似積分器
を使用します。
調整の設定
制御システムが Simulink® でモデル化されている場合は、slTuner インターフェイスを使用して調整タスクをすばやく設定できます。自動操縦の Simulink モデルを開きます。
open_system('rct_concorde')

Simulink モデルの調整ブロック (オレンジで強調表示) をリストして、slTuner インターフェイスを構成します。これにより、モデル内のすべての線形解析ポイントが解析および調整対象のポイントとして自動的に選択されます。
ST0 = slTuner('rct_concorde',{'Ki','Kp','Kq','Kf','RollOff'});
また、各調整ブロックがパラメーター化され、Simulink モデルのそれらの値に基づいてブロック パラメーターが初期化されます。この例では、4 つのゲイン Ki,Kp,Kq,Kf が 0 に初期化されます。既定では、ロールオフ フィルター
は汎用 2 次伝達関数としてパラメーター化されます。次のようにパラメーター化するには、

実数パラメーター
を作成し、上記の伝達関数を作成して RollOff ブロックに関連付けます。
wn = realp('wn', 3); % natural frequency zeta = realp('zeta',0.8); % damping Fro = tf(wn^2,[1 2*zeta*wn wn^2]); % parametric transfer function setBlockParam(ST0,'RollOff',Fro) % use Fro to parameterize "RollOff" block
設計要件
自動操縦は次の 3 つの主要な設計要件を満たすように調整されなければなりません。
1. 設定点の追従: コマンド
への応答
が、次の参照モデルの応答とよく一致する。

この参照モデルは、2 秒の整定時間で適切に減衰される応答を指定します。
2. 高周波数のロールオフ: ノイズ信号から
への閉ループ応答は、少なくとも -40 dB/decade の傾きで 8 rad/s を超えた後にロールオフする。
3. 安定余裕: プラント入力
の安定余裕は少なくとも 7 dB および 45 度にする。
設定点の追従では、コマンド
から追従誤差
への閉ループ伝達のゲインを周波数帯域 [0.05,5] rad/s で小さくする必要があります (プラントは s=0 でゼロであるため、定常偏差をゼロにできません)。いくつかの周波数点を使用して、最大追従誤差を周波数の関数としてスケッチし、それを使用して
から
へのゲインを制限します。
Freqs = [0.005 0.05 5 50]; Gains = [5 0.05 0.05 5]; Req1 = TuningGoal.Gain('Nzc','e',frd(Gains,Freqs)); Req1.Name = 'Maximum tracking error';
TuningGoal.Gain コンストラクターは、最大誤差のスケッチを滑らかな重み付け関数に自動的に変換します。viewGoal を使用して目的の誤差プロファイルをグラフで確認します。
viewGoal(Req1)

同じ過程を繰り返してノイズ入力から
への高周波ゲインを制限し、8 ~ 800 rad/s の周波数帯域で -40 dB/decade の傾きを適用します。
Freqs = [0.8 8 800]; Gains = [10 1 1e-4]; Req2 = TuningGoal.Gain('n','delta_m',frd(Gains,Freqs)); Req2.Name = 'Roll-off requirement'; viewGoal(Req2)

最後に、プラント入力
を開ループ解析のサイトとして登録し、TuningGoal.Margins を使用して安定余裕要件を取得します。
addPoint(ST0,'delta_m') Req3 = TuningGoal.Margins('delta_m',7,45);
自動操縦の調整
systune を使用して自動操縦パラメーターを調整する準備ができました。このコマンドは、調整されていない構成 ST0 と 3 つの設計要件を受け取り、ST0 の調整バージョン ST を返します。最終的な値が 1 未満の場合、すべての要件が満たされます。
[ST,fSoft] = systune(ST0,[Req1 Req2 Req3]);
Final: Soft = 0.966, Hard = -Inf, Iterations = 105
showTunable を使用して調整ブロックの値を確認します。
showTunable(ST)
Block 1: rct_concorde/Ki =
D =
u1
y1 -0.03036
Name: Ki
Static gain.
-----------------------------------
Block 2: rct_concorde/Kp =
D =
u1
y1 -0.009222
Name: Kp
Static gain.
-----------------------------------
Block 3: rct_concorde/Kq =
D =
u1
y1 -0.29
Name: Kq
Static gain.
-----------------------------------
Block 4: rct_concorde/Kf =
D =
u1
y1 -0.02332
Name: Kf
Static gain.
-----------------------------------
wn = 4.84
-----------------------------------
zeta = 0.516
の調整後の値を取得するには、getBlockValue を使用して ST の調整後のパラメーター値に対して Fro を評価します。
Fro = getBlockValue(ST,'RollOff');
tf(Fro)
ans =
23.4
--------------------
s^2 + 4.993 s + 23.4
Continuous-time transfer function.
最後に、viewGoal を使用して、すべての要件が満たされていることをグラフで確認します。
figure('Position',[100,100,550,710])
viewGoal([Req1 Req2 Req3],ST)

閉ループのシミュレーション
ここでは調整した自動操縦が設計要件を満たしているか確認します。最初に、
のステップ応答を、参照モデル
のステップ応答と比較します。再度 getIOTransfer を使用して、Nzc から Nz への調整後の閉ループ伝達を計算します。
Gref = tf(1.7^2,[1 2*0.7*1.7 1.7^2]); % reference model T = getIOTransfer(ST,'Nzc','Nz'); % transfer Nzc -> Nz figure, step(T,'b',Gref,'b--',6), grid, ylabel('N_z'), legend('Actual response','Reference model')

偏向角
およびフィードフォワード パスとフィードバック パスそれぞれの寄与もプロットします。
T = getIOTransfer(ST,'Nzc','delta_m'); % transfer Nzc -> delta_m Kf = getBlockValue(ST,'Kf'); % tuned value of Kf Tff = Fro*Kf; % feedforward contribution to delta_m step(T,'b',Tff,'g--',T-Tff,'r-.',6), grid ylabel('\delta_m'), legend('Total','Feedforward','Feedback')

最後に、
での開ループ応答を計算してロールオフ要件と安定余裕の要件をチェックします。
OL = getLoopTransfer(ST,'delta_m',-1); % negative-feedback loop transfer margin(OL); grid; xlim([1e-3,1e2]);

ボード線図では、-40 dB/decade のロールオフが 8 rad/s を超えていることが確認され、ゲイン余裕と位相余裕が 10 dB および 70 度を上回ることを示しています。
参考
systune (slTuner) | slTuner | TuningGoal.Gain | TuningGoal.Margins