ユニット 5 / 9

制御アルゴリズム:PIDおよびAIサポートチューニング

利益:

  • P、I、D の用語と PID コントローラーの効果を適切なコンテキストで説明し、AI に適用する能力
  • AI の助けを借りて、Ziegler-Nichols および実験的な調整方法を段階的に実行する機能
  • AI 推奨における積分ワインドアップや微分ノイズなどの PID トラップを認識して排除する機能

オーブンの温度を一定に保ち、モーターの速度を希望の値で駆動し、ドローンの角度のバランスをとります。それらすべての中心となるのは制御アルゴリズムです。これらの中で最も一般的なのは、業界のバックボーンである PID コントローラーです。 PID;シンプルかつ堅牢で、幅広い問題に対応します。しかし、「シンプル」は「調整が簡単」という意味ではありません。PID が正しく設定されていないと、発振したり、オーバーシュートしたり、遅れたり、完全に不安定になったりします。ここでは人工知能が貴重なアシスタントです。人工知能は、PID 用語を説明し、調整方法をガイドし、典型的な落とし穴を診断し、調整コードを作成します。ただし、最終的な調整はシステムの物理的な動作を確認することによって行われ、安定性の決定はエンジニアに属します。この単元では、AI を使用して PID トラップをインストール、調整、検証する方法について説明します。

PID の 3 つの用語

PID は、次の 3 つの方法でエラー信号 (e = ターゲット − 測定値) に応答します。

期間

彼は何を見ているのでしょうか?

効果

極端に

P(比例)

現在のエラー

速い応答

発振、永久エラー

私(積分)

過去の累積誤差

永続的なエラーをリセットします

オーバーシュート、ワインドアップ、発振

D(導関数)

誤差の変化率

ダンピングによりオーバーシュートを低減

ノイズを増幅する

口頭での要約: P は「今、どのくらい離れていますか」、I は「どれくらい離れていますか」、D は「どれくらいの速さで近づいていますか」という質問に答えます。優れたコントローラーは 3 つすべてのバランスが取れています。

クラスPID:def __init__(self、Kp、Ki、Kd、output_min=-100、output_max=100):self.Kp、self.Ki、self.Kd = Kp、Ki、Kd self.out_min、self.out_max = Output_min、output_max self.integral = 0.0 self.previous_error = 0.0 def計算(self、ターゲット、測定、dt):error = target - 測定値 # P p = self.Kp * error # I -- ワインドアップ保護付き self.integral += error * dt i = self.Ki * self.integral # D -- 微分ノイズに敏感 d = self.Kd * (error - self.previous_error) / dt self.previous_error = error out = p + i + d # 出力 > self.output_max の場合、出力を飽和させ、ワインドアップを制限する: Output = self.out_max self.integral -= error * dt # アンチワインドアップ: 積分 elif を元に戻します 出力 < self.output_min: 出力 = self.output_min self.integral -= エラー * dt 出力を返します

このコードは「トレーニング PID」ではなく、本番ロジックに近いスケルトンであり、出力飽和とアンチワインドアップが含まれています。 AI によって与えられる単純な PID の多くは、これら 2 つの保護をバイパスします。これらがないと、アクチュエータが限界に達すると積分値が膨張し、システムが予期せずオーバーシュートしてしまいます。

ヒント: AI に PID を要求するときは、「出力飽和とアンチワインドアップを追加し、測定の微分を微分項に適用します」と言います。これら 3 つの追加により、教科書の PID がフィールド PID に変換されます。

積分ワインドアップと微分ノイズ

PID エラーの最も一般的な原因は、次の 2 つの典型的な落とし穴です。

積分ワインドアップ: アクチュエータが飽和すると (例、モーターがすでにフルパワーになっている場合)、誤差は持続し、積分項は増加し続けます。この膨らんだ積分により、システムがターゲットに到達したときに大きなオーバーシュートが発生します。解決策: 出力が飽和したときに積分を停止またはロールバックします (アンチワインドアップ、上記のコードで示されています)。

微分ノイズ: D 項は誤差の微分値を取得します。ノイズの多い測定値の導関数はさらにノイズが大きくなり、アクチュエータが振動します。解決策: 測定値から導関数を取得し (誤差ではなく測定値を導関数)、導関数項にローパス フィルターを追加します。

# 微分ノイズの削減: 測定微分 + filterd_raw = -(measured - self.previous_measured) / dt エラーの代わりに

AI はこうした落とし穴を特定するのが得意です。 「PID が目標値に到達するとオーバーシュートが大きくなる」という場合は、ワインドアップを推奨します。ただし、修正がシステム上で機能するかどうかを測定することで検証します。

ジーグラー・ニコルズとのセッティング

ゼロからゲイン (Kp、Ki、Kd) を求める古典的な方法は、Ziegler-Nichols です。その本質は、P のみから開始し、システムが持続的な発振に入るまで Kp を増加させることです。このときの臨界ゲインKuと発振周期TuのテーブルからKp、Ki、Kdを計算します。

コントローラー

kp

ティ

TD

P.

0.5・Ku

P.I.

0.45・Ku

火/1.2

PID

0.6・Ku

火/2

火/8

Ziegler-Nichols のステップ (AI によって作成される計画): 1. Ki=0、Kd=0 とします。 P.2を実行してください。安定した持続的な発振が始まるまで、Kp をゆっくりと増加させます。この Kp = Ku (臨界ゲイン)、振動周期 = Tu.4。表から Kp、Ti、Td を計算します。 Ki = Kp/Ti、Kd = Kp*Td.5。これらの値から始めて、実験的に調整を加えます。

注意: Ziegler-Nichols は、システムを意図的に安定限界 (持続発振) に近づけます。実際のハードウェアでこれを実行すると、機械的歪み、過電流、および危険が生じるリスクがあります。可能であれば、最初にシミュレーションで実行し、次にハードウェアで低電力制限と非常停止を使用して作業します。 AI によって提案された Ku は出発点であり、システム内で測定および検証されます。

AI 支援診断

PID の動作を AI に記述することで診断できます。症状 → 考えられる原因のマッピング:

症状

考えられる原因

AIが提案する方向性

ゆっくり座る

Kp/Kiが低い

KPを上げる

永続的なエラー

欠席しているか、非常に元気がありません

気の追加/増加

オーバーシュート+発振

Kp/Ki が高く、D なし

Kdを追加、Kiを減らす

アクチュエーターが震えている

微分ノイズ

D のフィルタリング/リデュース

大きく超えると

積分ワインドアップ

アンチワインドアップを追加する

弱いプロンプト / 強いプロンプト

弱:「PID ゲインを与えてください。」(どのシステムですか?動作はどうですか?測定値はありますか?乱数が来ます。)強:「DC モーターの速度制御の PID を調整しています。現在、Kp=2、Ki=0.5、Kd=0 です。ステップ入力で 35% オーバーシュートし、目標に達すると 2 番目のオーバーシュートが大きく、安定するまでに時間がかかります。サンプリングは 100 です。 Hz。これらの症状から考えられる理由を列挙してください。「どの方向に変更すべきかを提案し、オーバーシュートが積分ワインドアップであるかどうかをテストする方法を教えてください。」

ミニケース

制御エンジニアのケレムは、押出機の温度制御を調整します。 AI が提案するゲインにより、システムはすぐに目標に到達しますが、設定を変更するたびに大きなオーバーシュートが発生し、ゆっくりと安定します。ケレムは AI に症状を説明します。ヒーターがしばらくフルパワー(飽和)のままであるため、AI は積分ワインドアップを疑います。 Kerem は PID コードにアンチワインドアップを追加し、オーバーシュートが大幅に減少します。しかし今、ヒーターの出口にわずかなちらつきがあります。彼はこれを温度センサーのノイズを増幅する D 項に起因すると考え、導関数にローパス フィルターを追加しました。最後に、Ziegler-Nichols を使用してゲインを大まかに検証し、実験的な微調整を実行します。 AI による迅速な診断が可能です。しかし、ケレム氏は実際のステップ応答を測定することで各修正を確認しました。ワインドアップが修正されたか、ちらつきがなくなったかは、グラフでしか確認できませんでした。

よくある間違い

  • PID に出力飽和とアンチワインドアップを追加できず、アクチュエータの制限で大きなオーバーシュートが発生しました。
  • ノイズの多い測定値の微分値から微分値を取得し、アクチュエータを振動させます。
  • dt が一定であると仮定しますが、サンプリング周期は変化します。
  • 安全対策を講じずにハードウェアでジーグラー・ニコルス発振テストを実行する。
  • システム固有の検証を行わずに、AI によって生成された収益を「最終的な」ものとして受け入れる。
  • 単一のゲインを非常に大きなステップで変更し、システムを不安定にします。

要約すると

  • PID; P (現在の誤差)、I (累積誤差)、D (誤差の変化率) に反応します。
  • フィールド PID には、出力飽和、アンチワインドアップ、微分フィルターが含まれている必要があります。
  • 積分ワインドアップのオーバーシュートが大きく、派生ノイズがアクチュエータ振動の原因となります。
  • ジーグラー=ニコルズが利益を上げ始める。ハードウェアでのセキュリティ対策が施されています。
  • AI は症状から原因まで迅速に診断します。補正は測定によって確認されます。
  • dt は実際に測定されたものです。収益の変化は小さなステップと観察によって行われます。

アプリケーションタスク

システム (実際のモーター/ヒーター、または Python の単純な 1 次/2 次モデル) を選択し、AI に飽和 + アンチワインドアップを備えた PID クラスを生成させます。次に、(1) P のみから開始して Kp を増加させて発振挙動を観察します。(2) Ki を追加して永久誤差を除去し、オーバーシュートがどのように増加するかを確認します。(3) アンチワインドアップをオンまたはオフにして、大きなオーバーシュートに対する影響を比較します。各ステップでステップ応答をプロットし、どのゲインがどの動作を変化させるかを記録します。 Ziegler-Nichols からの利益と、あなた自身が見つけた利益を比較してください。