Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

UAV クワッドコプターの PID 自動調整

この例では、Closed-Loop PID Autotuner ブロックを使用して、小型クワッドコプターの姿勢と位置の制御に使用する PID コントローラーを 1 回のシミュレーションのみで調整する方法を示します。

UAV 荷物配送モデル

この例では、Simulink® で UAV Toolbox コンポーネントを使用してマルチローターをモデル化します。このモデルは UAV Toolbox の uavPackageDelivery モデルに基づいています。詳細については、UAV の荷物配送 (UAV Toolbox)を参照してください。

まず、Simulink プロジェクトを設定して開きます。

prj = openProject('scdUAVPIDAutotuning');

モデルのアーキテクチャと規則

最上位モデルは次のサブシステムとモデル参照で構成されます。

  1. Ground Control Station — 飛行中の機体の制御と監視に使用されます。

  2. External Sensors - Lidar & Camera — 事前に設計されたシナリオやフォトリアリスティックなシミュレーション環境への接続に使用されます。これらにより、機体の飛行中に環境から LIDAR 読み取り値が生成されます。

  3. On Board Computer — 自動操縦に依存せずにオンボード コンピューターで実行することを意図したアルゴリズムの実装に使用されます。

  4. Multirotor — 低忠実度モードと中忠実度モードに加え、誘導ロジックを含むフライト コントローラーが含まれています。

モデルの設計データは Simulink データ ディクショナリの "data" フォルダーに格納されています (uavPackageDeliveryDataDict.sldd)。また、モデルでは、モデルの異なる構成をVariant Subsystem を使用した個別の階層でのバリエーションの実装を使用して管理します。それらのバリアントは、ベース ワークスペースにある変数によってデータ ディクショナリの変更なしで構成されます。

PID コントローラーの自動調整

この例では、Simulink Control Design™ ソフトウェアの Closed-Loop PID Autotuner ブロックを使用して、マルチローターの姿勢と位置の制御に使用される 8 つのコントローラーを調整します。コントローラーの調整には、手動での調整や経験的計算など、さまざまな方法を使用できます。Closed-Loop PID Autotuner を使用すると、制御システムを事前に設定しておくことで、8 つすべてのループの調整をワンクリックのプロセスで実行できます。これにより、調整プロセス全体が再現可能になり、以降の調整で簡単に調整して使用できます。この例では、Simulink で 6 自由度のマルチローターのモデルを使用します。ただし、ハードウェアで Closed-Loop PID Autotuner を使用すれば、同じプロセスを実際のマルチローターを使用して実行することもできます。他のほとんどの調整手法は、実際のマルチローターに実装するのは難しく、時間がかかる場合もあり、簡単には再現できません。

この例では、コントローラーの調整に Closed-Loop PID Autotuner を使用するため、制御調整手法に関する高度な知識は必要ありません。

PID 自動調整のための UAV 荷物配送モデルの変更

PID 自動調整を容易にするために、元の UAV 荷物配送モデルに次の変更が加えられています。

  • Full Guidance Logic サブシステムにホバリング モードを追加

  • Ground Control Station サブシステムに 3 つ目のミッションのバリアントを追加

  • 高忠実度モデルの Attitude Controller サブシステムと Position Controller サブシステムに 4 つの Closed-Loop PID Autotuner ブロックを追加

  • Attitude Controller サブシステムと Position Controller サブシステムの PID コントローラーのコントローラー パラメーター [ソース]internal から external に変更

  • Multirotor サブシステムに Data Store Memory ブロックを追加

  • 既定のコントローラー ゲインを変更

  • ルート レベルのモデルに To Workspace を追加

これらの変更により、自動調整の実行時にマルチローターが離陸して固定の姿勢を保ち、PID コントローラーのゲインを 1 回のシミュレーションですべて更新できるようになります。

例のステップ実行

[プロジェクト ショートカット] を使用して例をステップ実行します。各ショートカットでプロジェクトに必要な変数が設定されます。

入門

[Getting Started] プロジェクト ショートカットをクリックすると、高忠実度マルチローター プラント モデルを使用して 4 ウェイポイント ミッション用にモデルが設定されます。uavPIDAutotuning モデルを "実行" すると、マルチローターの離陸、飛行、着陸が 3 次元プロットに表示されます。

モデルでは、飛行中のすべての時点のアクティブなウェイポイントを UAV Path Manager ブロックを使用して判別します。このアクティブなウェイポイントが Guidance Mode Selector Stateflow® チャートに渡されて、必要な内側のループの制御コマンドが生成されます。

シミュレーション データ インスペクターを使用して、マルチローター モデルの "UAVState" の出力を可視化します。

マルチローターが 4 ウェイポイントの経路を最後までたどるのに、ベースラインのゲインのセットで約 150 秒かかることがわかります。この性能を改善するために、マルチローターで使用されている PID コントローラーを再調整します。

自動調整ミッションの実行

基本ミッションの飛行が可能になったら、マルチローターの性能を改善するために姿勢と位置の制御ループの自動調整を開始できます。この例の制御システムには 8 つの PID コントローラーが含まれています。システムのカスケード制御ループは 4 つです。それぞれのループに、軸ごとに 1 つずつ、2 つのコントローラーが含まれています。次のブロック線図は、自動調整を実行するために Closed-Loop PID Autotuner ブロックで 8 つのコントローラーがどのように設定されているかを示しています。

PositionAttitudeControl_wAutotuning.png

Closed-Loop PID Autotuner ブロックは、8 つの既存の PID コントローラーのそれぞれの出力に摂動信号を挿入します。その後、自動調整器は、自動調整プロセスを実行するためにフィードバック信号と PID コントローラーの出力を使用します。最も内側のピッチ レートとロール レートの制御ループを除き、制御対象の 2 つの軸は互いに分離されています。たとえば、x 速度と y 速度のループは互いに分離されています。そのため、それらの 2 つのループを同時に調整することで自動調整の実行にかかる全体の時間を短縮できます。ピッチ レートとロール レートのループについては、連結されているため制御ループを順番に調整します。この結果、PID コントローラーを調整する順序は次のようになります。

  1. ピッチ レート

  2. ロール レート

  3. ピッチとロール

  4. X 速度と Y 速度

  5. X 位置と Y 位置

[Autotune PID Controllers] プロジェクト ショートカットをクリックすると、低い高度でホバリングして自動的に 4 つの PID コントローラーを調整するようにモデルが設定され、最初のステップと同じ 4 ウェイポイント ミッションが実行されます。

各制御ループの Closed-Loop PID Autotuner ブロックには、制御ループに応じた異なる性能基準が設定されています。この例で使用されているようなカスケード制御の場合、不安定になるのを防ぐために、内側のループの帯域幅を外側のループよりも高くする必要があります。つまり、この例では、ピッチ レートとロール レートの制御ループが最も高い帯域幅になり、x 位置と y 位置の制御ループが最も遅い帯域幅になります。

ピッチ レートとロール レートのループに使用される設定は次のとおりです。

  • 帯域幅 — 50 ラジアン/秒

  • 位相余裕 — 60 度

  • 摂動の振幅 — 0.001

ピッチとロールのループに使用される設定は次のとおりです。

  • 帯域幅 — 20 ラジアン/秒

  • 位相余裕 — 60 度

  • 摂動の振幅 — 0.1

x 速度と y 速度のループに使用される設定は次のとおりです。

  • 帯域幅 — 5 ラジアン/秒

  • 位相余裕 — 60 度

  • 摂動の振幅 — 0.02

x 位置と y 位置のループに使用される設定は次のとおりです。

  • 帯域幅 — 1 ラジアン/秒

  • 位相余裕 — 60 度

  • 摂動の振幅 — 0.1

性能を最大にするために、ピッチ レートとロール レートのループの帯域幅が 50 ラジアン/秒に設定されています。UAV 制御システムのサンプリング時間 Ts は 0.005 秒であり、Closed-Loop PID Autotuner は帯域幅 ω について ωTs0.3 を満たす必要があるため、帯域幅は 60 ラジアン/秒以下でなければなりません。求められる 60 ラジアン/秒よりも小さくなるように帯域幅を選択します。他の帯域幅については、内側のループで安定性の問題が発生しない範囲で可能な限り大きくなるように設定されています。

各ループの位相余裕は 60 度に設定されています。これは、性能と減衰のバランスが一般に良いとされる値です。この余裕は Closed-Loop PID Autotuner ブロックの既定の設定です。

摂動の振幅は、個々のコントローラーの想定される最大出力の 5% よりも小さくなるように設定されています。摂動の値が高すぎると、マルチローターが調整中に不安定になる可能性があります。摂動の値が低すぎると、自動調整器でプラントの正確な推定が得られず、計算されたゲインが目標の帯域幅や位相余裕を満たさなくなる可能性があります。

個々のループの設定は、データ ディクショナリ uavPackageDeliveryDataDict.sldd に格納されています。次の図は、ピッチ角速度の調整に使用される Closed-Loop PID Autotuner ブロックで、これらの設定を入力する方法の例を示しています。

uavPIDAutotuning モデルを "実行" すると、マルチローターの離陸、ホバリング、PID コントローラーの自動調整、飛行、着陸が 3 次元プロットに表示されます。

シミュレーション データ インスペクターを使用して、マルチローター モデルの "UAVState" の出力を可視化します。

これらから、マルチローターが自動調整を実行するために一定の時間にわたってホバリングしていることがわかります。シミュレーション開始から約 185 秒後の自動調整プロセスが完了した時点から、マルチローターはプロジェクトの最初のステップと同じ 4 ウェイポイントの経路をたどりますが、調整後のゲインによる性能の向上により、クワッドコプターははるかに短い時間で経路を最後までたどることができます。

これらのプロットは、経路上のマルチローターの位置と姿勢の応答を示したものです。青色の線はベースラインのゲインのセットでのマルチローターの性能を示し、赤色の線は調整後のゲインでのマルチローターの性能を示しています。調整後のゲインのセットでは、マルチローターは約 45 秒で経路を最後までたどることができます。一方、ベースラインのゲインのセットでは、マルチローターは約 150 秒かかっています。

自動調整プロセス中に、8 つのコントローラーのゲインは次のように更新されます。

  • ピッチ レート — Kp = 0.00425、Ki = 0.01479、Kd = 0.0000045、N = 398

  • ロール レート — Kp = 0.003477、Ki = 0.01215、Kd = 0.0000031、N = 398

  • ピッチ角 — Kp = 19.38

  • ロール角 — Kp = 18.95

  • X 速度 — Kp = 0.5153、Ki = 0.2581

  • Y 速度 — Kp = 0.5201、Ki = 0.2979

  • X 位置 — Kp = 0.9365

  • Y 位置 — Kp = 0.9291

高度と向首角/ヨー角の制御ループの自動調整

この例では、姿勢と位置の制御に使用される 4 組の制御ループについて、P、I、D、および N の各ゲインを自動的に調整する方法を学習しました。ただし、このモデル例にはあと 2 つ、高度の制御ループと向首角またはヨー角の制御ループがあります。この例で示した自動調整と同じ方法論を使用して、それらの他の制御ループの一方または両方に Closed-Loop PID Autotuner を追加し、自動調整プロセスを実行できます。

それらのループのいずれかのコントローラーを調整するには、必ず他のコントローラーに対する調整が行われていないときに調整が実行されるようにしてください。他のコントローラーの調整を無効にするか、それらのコントローラーの調整を位置と姿勢のコントローラーの調整が完了してから実行できます。

モデルの調査が完了したら、プロジェクト ファイルを閉じます。

close(prj)

参考

関連するトピック