Main Content

このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。

UAV Guidance Model ブロックを使用した高忠実度 UAV モデルの近似

シミュレーション モデルでは、開発段階によって異なるレベルの忠実度を必要とすることがよくあります。ラピッド プロトタイピング段階では、パラメーターを短時間で実験および調整し、さまざまな自律アルゴリズムをテストする必要があります。生産開発段階では、忠実度を上げたモデルに対してアルゴリズムを検証する必要があります。この例では、ブロックを使用して高忠実度モデルを近似し、それを使用して中間点追従ナビゲーション システムを試作し、調整する方法を示します。固定翼 UAV の中間点追従の調整を参照してください。同じナビゲーション システムを高忠実度モデルに対してテストして、そのパフォーマンスを検証します。

このモデル例では、プラント モデルと中間レベルの内蔵自動操縦で構成される、高忠実度の無人航空機 (UAV) モデルを使用します。このモデルには、1000 個近いブロックが含まれており、処理が非常に複雑です。開発プロセスの最初のステップとして、この高忠実度モデルと UAV Guidance Model ブロックの切り替えが可能なバリアント システムを作成しました。高忠実度モデルは、File Exchange のエントリ、Simulink Drone Reference Application から抽出しています。

忠実度の異なる UAV モデル

uavModel = 'FixedWingModel.slx';
open_system(uavModel);

低忠実度モデルと高忠実度モデルを切り替えるには、このモデルに関連付けられているデータ ディクショナリに格納されている MATLAB® 変数値を変更します。

plantDataDictionary = Simulink.data.dictionary.open('pathFollowingData.sldd');
plantDataSet = getSection(plantDataDictionary,'Design Data');

% Switch to high-fidelity model
assignin(plantDataSet,'useHighFidelity',1);

% Switch to low-fidelity model
assignin(plantDataSet,'useHighFidelity',0);

低忠実度の誘導モデルを使用した、高忠実度の固定翼モデルの近似

UAV Guidance Model ブロックを使用して高忠実度モデルを近似するには、ステップ制御信号を作成してモデルに供給し、RollAngleHeightAirSpeed の各コマンドに対するステップ応答を観察します。

stepModel = 'stepResponse';
open_system(stepModel)

まず、ロール角の変更を指示します。

controlBlock = get_param('stepResponse/Step Control Input','Object');
controlBlock.StepControl = 'RollAngle Step Control';

assignin(plantDataSet,'useHighFidelity',1);

sim(stepModel);
### Starting serial model reference simulation build
### Successfully updated the model reference simulation target for: PlantModel
### Successfully updated the model reference simulation target for: FixedWingModel
highFidelityRollAngle = RollAngle.Data(:);
highFidelityTime = RollAngle.Time;

figure()
plot(highFidelityTime, highFidelityRollAngle,'--r');
title('Roll Angle Step Response')

上記のシミュレーション結果にズームインすると、高忠実度モデルに組み込まれたロール角コントローラーの特性を確認できます。ロール角の整定時間は 2.5 秒前後です。

xlim([75 80])
ylim([-0.1 0.548])

2 次 PD コントローラーの場合、臨界減衰システムでこの整定時間を達成するには、以下のゲインを使用して、UAV モデルの低忠実度バリアント内で UAV Guidance Model ブロックを構成する必要があります。この例では、コード生成を使用して複数の実行の速度を上げることにより、UAV Guidance Model ブロックをシミュレートします。ブロックのパラメーターを確認します。

zeta = 1.0; % critically damped
ts = 2.5; % 2 percent settling time
wn = 5.8335/(ts*zeta);
newRollPD = [wn^2 2*zeta*wn];

新しいゲインを設定し、低忠実度モデルのステップ応答をシミュレートします。これを元の応答と比較します。

load_system(uavModel)
set_param('FixedWingModel/FixedWingModel/LowFidelity/Fixed Wing UAV Guidance Model',...
    'PDRollFixedWing',strcat('[',num2str(newRollPD),']'))
save_system(uavModel)

assignin(plantDataSet, 'useHighFidelity', 0);

sim(stepModel);
### Starting serial model reference simulation build
### Successfully updated the model reference simulation target for: FixedWingModel
lowFidelityRollAngle = RollAngle.Data(:);
lowFidelityTime = RollAngle.Time;

hold on;
plot(lowFidelityTime, lowFidelityRollAngle,'-b');
legend('High-Fidelity Response', 'Low-Fidelity Response', 'Location','southeast');

低忠実度モデルは同様のステップ応答に達します。同様に、他の 2 つの制御チャネル Height および AirSpeed も調整できます。ここでは、制御応答を視覚的に検査する代わりに、より洗練された方法を使用して制御ゲインを最適化することができます。System Identification Toolbox® を使用して、高忠実度 UAV モデルの動作をさらに解析することを検討してください。

controlBlock.StepControl = 'AirSpeed Step Control';
assignin(plantDataSet, 'useHighFidelity', 0);

sim(stepModel);
### Starting serial model reference simulation build
### Model reference simulation target for FixedWingModel is up to date.
lowFidelityAirSpeed = AirSpeed.Data(:);
lowFidelityTime = AirSpeed.Time;

assignin(plantDataSet, 'useHighFidelity', 1);

sim(stepModel);
### Starting serial model reference simulation build
### Model reference simulation target for PlantModel is up to date.
### Successfully updated the model reference simulation target for: FixedWingModel
highFidelityAirSpeed = AirSpeed.Data(:);
highFidelityTime = AirSpeed.Time;

figure()
plot(lowFidelityTime, lowFidelityAirSpeed,'-b');
hold on;
plot(highFidelityTime, highFidelityAirSpeed,'--r');
legend('Low-Fidelity Response', 'High-Fidelity Response', 'Location','southeast');
title('Air Speed Step Response')
xlim([70 80])
ylim([17.5 19.2])

controlBlock.StepControl = 'Height Step Control';
assignin(plantDataSet, 'useHighFidelity', 0);

sim(stepModel);
### Starting serial model reference simulation build
### Successfully updated the model reference simulation target for: FixedWingModel
lowFidelityHeight = Height.Data(:);
lowFidelityTime = Height.Time;

assignin(plantDataSet, 'useHighFidelity', 1);

sim(stepModel);
### Starting serial model reference simulation build
### Model reference simulation target for PlantModel is up to date.
### Successfully updated the model reference simulation target for: FixedWingModel
highFidelityHeight = Height.Data(:);
highFidelityTime = Height.Time;

figure()
plot(lowFidelityTime, lowFidelityHeight,'-b');
hold on;
plot(highFidelityTime, highFidelityHeight,'--r');
legend('Low-Fidelity Response', 'High-Fidelity Response', 'Location','southeast');
title('Height Step Response')
xlim([70 150])
ylim([49 56])

低忠実度モデルによるナビゲーション アルゴリズムのテスト

UAV Guidance Model ブロックを使用して高忠実度モデルを近似したところで、これを固定翼 UAV の中間点追従の調整の例にある UAV Guidance Model ブロックに置き換えることができます。忠実度の異なるこれらのモデルに対する前方注視距離と進行方向制御のゲインの効果をテストします。

navigationModel = 'pathFollowing';
open_system(navigationModel);
assignin(plantDataSet,'useHighFidelity',0);

sim(navigationModel);
### Starting serial model reference simulation build
### Successfully updated the model reference simulation target for: FixedWingModel
figure
visualizeSimStates(simStates);

高忠実度モデルによる検証

assignin(plantDataSet,'useHighFidelity',1);

sim(navigationModel);
### Starting serial model reference simulation build
### Model reference simulation target for PlantModel is up to date.
### Successfully updated the model reference simulation target for: FixedWingModel
figure
visualizeSimStates(simStates);

まとめ

この例では、固定翼 UAV の低忠実度の抽象化を使用して高忠実度モデルを近似する方法を示します。逆のアプローチを使用して、高忠実度モデルの自動操縦制御ゲインの選択に役立てることもできます。まず、さまざまなテストシナリオで低忠実度モデルをシミュレートすることによって自動操縦制御応答の許容される特性を特定してから、高忠実度モデルの自動操縦を適宜調整することができます。

discardChanges(plantDataDictionary);

参考

| |

関連するトピック