このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
飛行中の UAV 故障回復
この例では、[制御システム調整器] を使用して、ノミナル飛行条件と故障条件に対してマルチコプターの固定構造 PID コントローラーを調整する方法を示します。ここでは、ゲイン スケジュール アプローチを使用して単一の回転子の故障から回復し、UAV を着陸します。
UAV 荷物配送モデル
この例では、UAV の荷物配送 (UAV Toolbox)の例で説明するモデルに基づくモデルを使用します。高忠実度 6-DOF プラント モデルは Simulink Drone Reference Application に基づいています。
Simulink® プロジェクトを開きます。
prj = openProject('scdUAVInflightFailureRecovery');
この例では、プラントに乗法的なゲイン ベクトルを注入することで、単一の回転子の故障がシミュレートされます。ゲイン スケジュール コントローラーのシミュレーション結果を示すために、故障検出アルゴリズムの設計にアクチュエータ コマンドが特徴として使用され、故障の検出にノミナル シミュレーションおよび故障に誘導されるシミュレーションに基づくしきい値が使用されます。
コントローラーは位置 (X, Y) と姿勢 (ピッチ、ロール) ループ、ヨー制御ループ、高度 (Z) 制御ループで構成されます。Rotor Fault Injection Gains ブロックは、プラント モデルの故障条件を定義するために使用されます。[制御システム調整器] は内側の姿勢コントローラーと高度コントローラーを調整するために使用されます。ゲインはノミナル飛行条件と故障条件に対して調整されます。故障回復の制御戦略は故障検出インジケーターに基づいてスケジュールされた Varying PID Controller ブロックと Lookup Table ブロックを使用して実装されます。次の図に、調整で使用するコントローラー サブシステムを示します。
open_system('MultirotorModel/Inner Loop and Plant Model/High-FidelityModel_RotorFault/Controller/Controller')
コントローラーの調整
この節では、[制御システム調整器] を使用して調整可能な要素を指定し、調整目標を作成する方法を説明します。代わりに事前設定済みセッションを起動する場合は、[プロジェクト ショートカット] を使用します。
コントローラーとプラントが個別のモデル MultirotorModelControlDesign.slx
で抽出されたら、[制御システム調整器] を使用してコントローラー ゲインの調整を設定します。積分ゲインの初期条件は 0.01 として設定され、定常偏差をゼロで維持しながらオーバーシュート抑制します。回転子ゲインの乗算器パラメーターはすべての回転子が動作可能なノミナル モードを示すように設定されます。
モデルを開きます。
open_system("MultirotorModelControlDesign.slx")
[制御システム調整器] アプリを起動するには、Simulink モデル ウィンドウの [アプリ] ギャラリーで、[制御システム調整器] をクリックします。
サンプル時間 0.005 秒でモデルを線形化するように指定します。そのためには、[線形化オプション] をクリックし、[サンプル時間で離散] を選択し、「0.005
」と入力します。
複数のモデルに対するパラメーターの変化
パラメーターの変化を指定するには、[Control System] タブで [パラメーターの変化] リストから Select parameters to vary
をクリックします。モデル変数を選択するには、[パラメーターの変化] タブで [パラメーターの管理] をクリックします。rotor4ThrustGain
パラメーターを選択して [OK] をクリックし、[パラメーターの変化] テーブルに追加します。
2 行目の値に「0
」と入力します。パラメーターの変化により、ノミナル飛行 (rotor4ThrustGain
= 1) と単一の回転子の故障 (rotor4ThrustGain
= 0) 条件が定義されます。
調整可能なブロックの選択
調整するブロックを選択するには、[調整] タブで、[ブロックの選択] をクリックします。[調整ブロックの選択] ダイアログで、[ブロックの追加] をクリックします。これにより調整ブロックのエディターが開き、調整可能なブロックを指定できます。
Attitude Controller サブシステムと Altitude Controller サブシステムでコントローラー ゲインを調整可能として選択します。
調整目標の指定
調整目標を指定するには、[調整] タブで、[新規目標] をクリックします。[ステップ追従目標] を使用して、ピッチ角とロール角を制御するための応答と目的の特性を指定します。基準のピッチ信号とロール信号および [UAVState] 信号内の測定信号は、調整目標の入力と出力としてそれぞれマークされます。姿勢制御ループを単独で調整する位置コントローラー ループが開きます。[時定数] パラメーターを 0.1 として入力し、調整目標をノミナル モデル ([パラメーターの変化] の最初の行) に適用します。
同様に、[ステップ追従目標] ダイアログと [ループ整形目標] ダイアログを使用して、姿勢コントローラー ゲインと高度コントローラー ゲインの調整に必要な調整目標の完全なセットを作成します。
姿勢ループの制御目的は次のとおりです。
0.1 秒の時定数で目的とする一次応答を使用してピッチとロールを制御するためのステップ追従調整目標
帯域幅 10 Hz の積分器として指定される、高周波数でピッチとロールのフィードバック ループのゲインを抑制するループ整形目標
高度ループの制御目的は次のとおりです。
1 秒の時定数で目的とする一次応答を使用するステップ追従調整目標
帯域幅 10 Hz の積分器として指定される、高周波数のフィードバックのゲインを抑制するループ整形目標
ノミナル モデルに対するコントローラー パラメーターの調整
前の節に従って、ノミナル飛行モードのコントローラー ゲインを調整するための [制御システム調整器] セッションを設定します。あるいは、プロジェクトのショートカット [Tune controller for nominal flight] を使用して事前設定されたセッション ファイルを含む [制御システム調整器] を起動します。
調整目標プロットは、調整されていないコントローラー ゲインでは、姿勢制御ループが不安定であり、高度制御ループに目的の応答がないことを示します。[目標の管理] オプションを使用して調整目標を選択および編集します。
[調整] をクリックし、調整可能なブロックの値を調整して調整目標を達成します。姿勢制御ループと高度制御ループの両方は固定されたヨー制御ループを使用して一緒に調整されます。
調整されたコントローラー ゲインの値を表示するには、[調整ブロック] でブロックを選択し、[制御システム調整器] の [データ プレビュー] 領域で値を表示します。詳細については、制御システム調整器での調整されたコントローラー パラメーターの確認を参照してください。
調整されたコントローラー ゲインは次のとおりです。
ピッチに対する外側の比例ループ制御 —
ピッチ角速度に対する内側の PI 制御 —
ロールに対する外側の比例ループ制御 —
ロール角速度に対する内側の PI 制御 —
高度に対する PID 制御 —
故障モデルに対するパラメーターの調整
定義されたパラメーターの変化 rotor4ThrustGain
= 0 は、単一の回転子の故障に対するモデルを生成します。ノミナル モデルの代わりに故障モデルに適用する調整目標を変更します。1 つの回転子への推力が失われると対角の回転子のペアが不安定になり、ヨーが制御されないため、ヨー制御ループはすべての調整目標に対して開かれるように設定されます。StepTracking - Altitude
調整目標に対する目的の時定数は 2 秒に変更され、これによりマルチコプターの着陸速度が低下します。
[データ ブラウザー] の [調整目標] で各目的をダブルクリックして開き、変更します。あるいは、プロジェクトのショートカット [Tune controller for rotor failure] を使用して事前設定されたセッション ファイルを含む [制御システム調整器] を起動します。
[調整] をクリックして故障モデルに基づいてパラメーターを再調整します。以下のプロットに示すように、回転子が故障した結果、ピッチとロールのステップ応答に小さいオーバーシュートと振動が発生しています。
単一の回転子の故障があるプラントに対して調整されたコントローラー ゲインは次のとおりです。
ピッチに対する外側の比例ループ制御 —
ピッチ角速度に対する内側の PI 制御 —
ロールに対する外側の比例ループ制御 —
ロール角速度に対する内側の PI 制御 —
高度に対する PID 制御 —
注入された故障とゲイン スケジュール PID コントローラーを使用したシミュレーション
シミュレーション モデルはアクチュエータ コマンドから特徴を抽出し、回転子 4 で故障を検出するしきい値を設定する、故障検出サブシステムを実装します。故障検出インジケーターは、姿勢ループと高度ループのゲイン スケジュール コントローラーに対するスケジューリング変数として使用されます。また、ピッチ、ロール、高度の基準入力は、安全な速度で着陸するようマルチコプターに指示するために再構成されます。
load_system("MultirotorModel"); open_system("MultirotorModel/Inner Loop and Plant Model/High-FidelityModel_RotorFault");
ゲイン スケジュール コントローラーは、ピッチ角速度コントローラーに対して示すように、Varying PID Controller ブロックと Lookup Table ブロックを使用して実装され、ゲインを指定します。ノミナルな動作 (0) と故障 (1) のブレークポイントで定義されたブロックのテーブル データで、前の節で計算したゲインを更新します。
同様に、残りのコントローラーのゲインを更新します。
あるいは、次のコマンドを使用してブロック パラメーターを設定できます。いずれかの調整目標を変更した場合は、指定した値を調整されたコントローラー ゲイン値に置き換えます。
ピッチ コントローラー パラメーターを次のように設定します。
set_param(['MultirotorModel/Inner Loop and Plant Model/High-FidelityModel_RotorFault/' ... 'Controller/Controller/Attitude Controller/Gain_PitchAngle'],'TableData','[9.669, 11.02]'); set_param(['MultirotorModel/Inner Loop and Plant Model/High-FidelityModel_RotorFault/' ... 'Controller/Controller/Attitude Controller/PI Pitch/Kp'],'TableData','[0.004296, 0.006416]'); set_param(['MultirotorModel/Inner Loop and Plant Model/High-FidelityModel_RotorFault/' ... 'Controller/Controller/Attitude Controller/PI Pitch/Ki'],'TableData','[0.01, 0.01]');
ロール コントローラー パラメーターを次のように設定します。
set_param(['MultirotorModel/Inner Loop and Plant Model/High-FidelityModel_RotorFault/' ... 'Controller/Controller/Attitude Controller/Gain_RollAngle'],'TableData','[9.572, 11.42]'); set_param(['MultirotorModel/Inner Loop and Plant Model/High-FidelityModel_RotorFault/' ... 'Controller/Controller/Attitude Controller/PI Roll/Kp'],'TableData','[0.003493, 0.005209]'); set_param(['MultirotorModel/Inner Loop and Plant Model/High-FidelityModel_RotorFault/' ... 'Controller/Controller/Attitude Controller/PI Roll/Ki'],'TableData','[0.01, 0.01]');
高度コントローラー パラメーターを次のように設定します。
set_param(['MultirotorModel/Inner Loop and Plant Model/High-FidelityModel_RotorFault/' ... 'Controller/Controller/gravity feedforward//equilibrium thrust/Kp'],'TableData','[3.004, 1.667]'); set_param(['MultirotorModel/Inner Loop and Plant Model/High-FidelityModel_RotorFault/' ... 'Controller/Controller/gravity feedforward//equilibrium thrust/Ki'],'TableData','[0.01, 0.01]'); set_param(['MultirotorModel/Inner Loop and Plant Model/High-FidelityModel_RotorFault/' ... 'Controller/Controller/gravity feedforward//equilibrium thrust/Kd'],'TableData','[3.308, 4.098]');
[Simulate model with fault injection] プロジェクト ショートカットを使用し、Guidance Logic サブシステムからの位置コマンドに基づいてマルチコプターを離陸および飛行させるモデルをシミュレートします。回転子の推力を 30% に削減することにより、30 秒で回転子の故障が発生します。[シミュレーション データ インスペクター] における高度の位置 (最上行) と姿勢 (中央行) の結果は、UAV が目的の高度の 5% 以内に整定し、X 位置と Y 位置を追跡できる滑らかなピッチとロールがあることを示しています。最下行は 4 つの回転子のアクチュエータ コマンドを示しています。
回転子が 30 秒で故障すると、UAV はピッチングとローリングを開始します。コントローラーは故障が検出されると再構成されます。ピッチとロールは 0 ラジアンで整定するように制御され、UAV は低速度を維持しながら着陸します。予想どおり、ヨーは制御されず、UAV は縦軸の周りを回転します。UAV が到達する最大のヨー レートはシミュレーションを通じて検証され、姿勢コントローラーと高度コントローラーは必要に応じて変更された調整目標とともに返されます。
UAV はフォトリアリスティックな環境で可視化され、現実的な世界で飛行している UAV が表示されます。シミュレーションが開始したら、'F'
を押して AutoVrtlEnv
ウィンドウでカメラ モードを Free
に設定し、マウスのスクロール ホイールを使用して UAV からのカメラの距離を増やします。これらのコントロールを使用して、回転子の故障後の着陸シーケンスを可視化できます。
次のプロットは、30 秒で故障が発生した後の過渡状態を示しています。
プロジェクトを閉じます。
close(prj);