PIDループを調整するための良い戦略は何ですか?

コントローラーのゲインを調整するのは難しい場合がありますが、一般的な戦略は、適切なソリューションに収束する安定したシステムを取得するためにうまく機能しますか?

コメント

  • より具体的な質問を対象とした質問はより多くなります有用。それ以外の場合は、 PID の記事とチューニングに関するセクションをご覧ください
  • I ‘は常にPIDの調整がシステムの特性に大きく依存していることを発見しました。そのため、 auto-tune システムが auto-tune であることを発見したことはありません。ひどく便利です。これらは最初のパスでパフォーマンスの低いパラメータセットには問題ありませんが、最適とは遠いため、最適化されていない一般的な戦略でも同じ問題が発生します。特定のシステムの機械的、電気的、および制御の側面について。

回答

小型で低トルクのモーターの場合ギアリングがほとんどまたはまったくない場合、適切なベースライン調整を行うために使用できる1つの手順は、外乱に対する応答をプローブすることです。

PIDを調整するには、次の手順を使用します。

  1. すべてのゲインをゼロに設定します。
  2. 外乱への応答が安定した振動になるまでPゲインを増やします。
  3. 振動がなくなるまで(つまり、Dゲインを増やします)。それは非常に弱められています)。
  4. Dゲインを上げても発振が停止しないまで、手順2と3を繰り返します。
  5. PとDを最後の安定した値に設定します。
  6. 必要な振動数で設定値に到達するまでIゲインを増やします(通常はゼロですが、オーバーシュートの2回の振動を気にしない場合は、より速い応答が得られます)

使用する外乱は、コントローラーが接続されているメカニズムによって異なります。通常、メカニズムを手動で設定値から離して放すだけで十分です。振動がどんどん大きくなる場合は、振動を減らす必要があります。 Pゲイン。

Dゲインを高く設定しすぎると、システムがチャタリングを開始します(Pゲインの振動よりも高い周波数で振動します)。これが発生した場合は、Dゲインを停止するまで減らします。

このテクニックには名前があると思います。見つけたらここに入れます。

コメント

  • 次のように聞こえますZiegler-Nichols: en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method
  • @ Throwback1986、これは間違いなくない Ziegler-NicholsはPゲインのみを使用します。次に、振動するPゲインと振動周期からIゲインとDゲインが計算されます。
  • 特に、調整が必要な複数の関節を持つロボットアームを調整するための追加のアドバイスはありますか?ベースから始めて、エンドエフェクターに向かって外側に向かって作業しますか、それともその逆ですか、それとも重要ですか?
  • 学術または産業環境では、より高度な制御方法が必要になります。趣味の人のために;重力には減衰効果があるため、重力がモーターに与える影響が最も少ない角度で各ジョイントを調整します。たとえば、重力がモーターではなくベアリングに作用するように、アームを真上に向けます。順序は関係ありません。 ‘必要なパフォーマンスが得られない場合は、フィードフォワード重力補償項をコントロールに追加するのがおそらく最も簡単な改善です(シリアルアームには再帰的なNewton-Eulerを使用します)。
  • pidtuner.com ツールは、いくつかの既知の欠点があるZiegler-Nicholsメソッドよりも優れた結果を提供してくれました。 folk.ntnu.no/skoge/publications/2003/tuningPID/more/ …

回答

大学で教えられたhauptmechの回答と同様の実験方法:

  1. すべてのゲインを0に設定します。
  2. システムが振動するまで K d を増やします。
  3. K d を2〜4倍にします。
  4. K p の約1%に設定します。 K d
  5. 振動が始まるまで K p を増やします。
  6. 減らします。 K p を2〜4倍にします。
  7. K i を約 K p の1%。
  8. 振動が始まるまで K i を増やします。 li>
  9. K i を2〜4分の1に減らします。

Ziegler-Nichols法は、振動周期の正確な数値を取得できればより正確です。通常、「cla」を使用すると振動が発生します。 ssic PID “番号が指定されているため、常に最適であるとは限りません。

立ち上がり時間、オーバーシュート、整定時間、定常状態誤差、および安定性に対する各項の影響に関する一般的な規則については、表1を参照してください。 IEEE Control Systems MagazineのLi、Ang、およびChongによる「PID制御システムの分析と設計」の概要。

コメント

  • 最初にKd?私はいつもKpから始めるのが最善だと思っていました。
  • ‘ mは、古い講義のスライドから転記しています。’そのようにしない正当な理由私は’それを聞きたいと思っています。
  • その’は、ズボンの”シート”のチューニングに推奨するアルゴリズムです。 ‘を使用すると、システムをモデル化したり、その応答を測定したりすることなく、できる限り近づけることができます。 (本当に適切なチューニングが必要な場合は、モデリングや測定が唯一の方法です。)
  • Kdを最初にチューニングしても’意味がありません。 、実装したすべてのPID ‘と同様に、Kdの符号は負です。 ‘は、エラーに非常に大きな変化が発生したときに制御信号を低減するために使用され、本質的にシステムを減衰させます。 Kdしかない場合、システムは反対方向に移動し、エラーが増加して問題が悪化します。 Kdが正の場合、エラーの大きな変化が正しい方向に発生するたびに、’変化をさらに速くし、ターゲットをオーバーシュートします。
  • 実際には、Dゲインを調整することは最初はある程度意味がありますが、”増加する”

mです。 Dゲインは絶対値を増やすことを意味し、’はダンピングを増やすだけです。 Dゲインの最大の問題は、高周波ノイズを増幅することであり、’ Pゲインなしでその効果を確認できるのは素晴らしいことです。したがって、’は基本的に、ダンピングのように動作を停止し、ノイズと遅延エラー信号の増幅を開始するゲインを探すことから始めます。 ‘ステップ2では、植物を突いて振動するかどうかを確認する必要があります。

回答

Embedded.comは私の記事を再び移動しましたが、ここにあります。これは、PIDループを作成する方法(浮動小数点以外でそれを行う方法を理解することは読者の練習問題として残されています)とそれを調整する方法の両方を示しています。

博士号なしのPID

最善の方法はあなたの能力に大きく依存します。 最適な調整を取得する方法は、「経験豊富な制御システムの手である」と仮定して、通常、プラントの応答を測定することです(「プラント」==「あなたが制御しているもの」)。次に、測定の方法に応じて、プラントのモデルを抽出してそれに設計するか、測定値に直接設計します。

特定の難しいプラントでは、満足のいくものを作ることができないことがわかります。測定。この場合、モデルのみで行う必要があります。これらはまれですが、機能させると満足のいくものになります。

回答

Sebastian Thrunは、PIDを調整するための簡単なアルゴリズムを紹介しました。 「自動運転車のプログラミング方法」クラス。これは「twiddle」と呼ばれ、ここで説明されています。

Twiddleは極小値を見つける傾向があります。つまり、は問題ないが、状況に最適ではない3つの定数のセットを思い付く可能性があります。PID定数の調整の問題は、ユーティリティを最大化するために特定のパラメータを見つけるためのより一般的な検索問題のサブセットです(この場合、PIDアルゴリズムのエラーを最小限に抑えます。ヒルクライミング、シミュレートされたアニーリング、遺伝子アルゴリズムなど、この問題に対する他の一般的な解決策を調べて、より最適な解決策を見つけることができます。

回答

他の2つの回答とは対照的に、PIDを手動で調整する良い方法はKdを無視することです。したがって、0から開始し、ターゲットに到達するまでKpを増やし、次にKiを増やして定常状態エラーを取り除きます。

Kdはノイズへの応答が悪いため、問題を混乱させる可能性があります。その後、フィルターの追加を開始します。アナログ入力で、それがあなたのコントロールを遅くし、全体を理解するのを難しくする以外に何をするのか疑問に思う…

私を混乱させるもう一つのことは、PID方程式が標準形式であるかどうかですまたは独立した(ウィキペディアで並列)形式で。フォームがあなたが思っているものと間違った方法である場合、Kiの効果は逆になるようです。どちらのタイプも自動化で使用され、場合によってはそれらを切り替えるオプションがあります。

回答

システムモデリング

もちろん、他の回答で述べたように実験的な調整を行うことができますが、制御したいものに対して妥当な動的モデルを定義でき、そのパラメーターを特定すると、オーバーシュート立ち上がり時間整定時間定常-状態エラーなど。

MATLABにはツールもあり、これらの基準の組み合わせに合わせてコントローラーを調整できるため、さらに優れたものになります。使用します。

コントローラーを理解する

の各パラメーターの内容を学習するPIDコントローラーも非常に役立ちます。すべての実験アルゴリズムは、どういうわけかこの種の知識に基づいています。指示に従うだけでなく、自分でその感覚を得ることができれば、コントローラーを手動で調整する方が簡単な場合があります。

現実の問題

コントローラーを調整するときに、これらのうちの1つが邪魔になる可能性があります: windup 不十分なサンプリングレート飽和度

結論

結局のところ、それはすべて、実際に何ができるかによって異なります。それがどのように機能し、どのような実験を行うことができるかについての知識を得るためのシステム。最良のことは、実際にPIDコントローラーと制御理論一般、IMOについてもっと学ぶことですが、私は偏っています:)

コメント

  • I ‘ PIDを調整するために人々がヒューリスティックを提案し続ける理由を理解していませんが、今日では、プラントの識別とコントローラーの設計のための自動ツールがたくさん提供されています’深い理論的背景が必要です。この答えを高く評価してください。

答え

興味のある方のために、私の経験から少し広げてみます。問題は、いくらかアクセスできない(そして時には役に立たない)制御理論がたくさんあることだと思います。そして、しばしば不正確なシステムについての仮定を立てる経験則があります。

安定性

最初に、制御ループが不安定になる理由について説明します。この説明では、線形システムを想定します。 。非公式には、これは、制御信号が特定の周波数の正弦波である場合、観測された出力は同じ周波数であり、制御システムの振幅を変更すると、出力は同じ比率で応答することを意味します。この仮定は、多くの実際のシステムにとって適切な近似であり、さまざまな周波数を個別に調べることができます。

制御パスを見ると、設定値、PIDコントローラー、システム(別名「植物」)、そしてあなたのセンサー。センサーからの固定設定値と正弦波を想像してみてください(これは、フィードバックされたセンサーでの実際の外乱に相当します)。不安定なシステムでは、フィードバックによって制御ループがエラーを減らすのではなく増幅し、時間の経過とともに振幅が増加します。これが発生する理由は、遅延を行うか、この特定の周波数では入力と出力の間の位相シフトが原因です。与えられた周波数について、出力のその開ループ(つまりフィードバックなし)シフトと振幅を見ることができ、それらすべてをグラフに描くと、ボード線図のようなものが得られます。 。この開ループグラフでエラーが増幅され続ける状況がある場合は、システムが不安定です。遅延が波長の1/2未満、またはゲインがx1未満の場合、システムは安定します。実際には、そのポイントからある程度のマージン(ゲインマージンと位相マージン)が必要です。そのため、多くの手動/ヒューリスティック手法でこの「後退」が見られます。

これらの手動の主な問題方法は、あなたが「盲目的に飛んでいる」ということです。

また、P、I、Dの意味は、センサーが測定しているものに関連していることを忘れないでください。あなたが適用しているコントロール。自作のコントローラーでよくある間違いは、実際には適用されていないのに「Pを適用している」と人々が考えることです。モーターコントローラーには、多くの場合、トルクループ上で実行される速度ループ上で実行される位置ループがあります。 (カスケード

OKですが、これはどのように役立ちますか?

最初に言いたいのは、独自のPIDコントローラーを構築する場合は、開ループを測定する方法も構築する必要があるということです。応答。コントローラへの入力で周波数スイープを実行し、フィードバックを切断した状態でセンサーの出力を測定します。次に、開ループボード線図を描画して、システムが安定していてトレードできる理由を確認できます。さまざまなコントロールをオフにします。閉ループ応答を測定することも役立ちます。ループが閉じている間に設定値の周波数掃引を行うことにより、任意のシステムでそれを行うことができます。これらはどちらもそれほど難しくなく、多くの理論的知識を必要としません。

内部で何が起こっているのかを理解せずに単にコントロールを調整しているだけでは、できません。システムを最適化するために。これらのシステムについての直感を構築することはそれほど難しいことではありません。例えば。比例ゲインは位相に影響を与えませんが、すべての周波数で開ループゲインを増加させるだけです。したがって、これらすべての手動チューニング方法で比例ゲインを増加させるときに行うことは、位相が-180になる周波数を見つけることです。周波数応答に対するさまざまな制御の影響について詳しくは、これを参照してください。

多くの場合、最高の閉ループパフォーマンスを得るには次のことが必要です。コントローラーのゲインだけでなく、システムを微調整します。あなたが望むのは、システムを可能な限り「堅く」することです。これにより、制御パラメーターを増やして、最適な開ループ帯域幅と閉ループ帯域幅を得ることができます。モーター制御アプリケーションでの私の経験では、比例ゲインはほとんどの「作業」を実行し、積分器は「残り」を実行する必要があります。 D項はまったく必要ないと思います。ローパスフィルターとノッチフィルターを使用すると、機械的共振が発生する可能性があるが、ボード線図なしで設定するのが非常に難しい状況(観測される発振周波数)で大いに役立ちます。閉ループの下では、開ループのものとは異なる場合があります。

安全性が懸念される場合(非常に強力なモーターまたはモーターが制御不能になることによって破壊される可能性のあるシステム)、いくつかを入れる必要があります。システムを保護するためにチューニングを開始する前の制限(たとえば、電流制限、最大位置エラー)次に、パラメータの範囲について何らかの感覚を得る必要があります。フィードバックに1回転あたり40カウントまたは1回転あたり4000カウントがある場合、パラメータ与えられたシステムでは100倍になります。私のアプローチは、最初に制御性の悪い範囲を見つけてから、そこからP、次にIでランプアップすることです(ただし、ここでも「ブラインドで飛んでいます)。バックオフすると、この安定マージンが作成されます。

閉ループを超えて

閉ループシステムからエラーを取り除こうとします。パフォーマンスは常にいくらか制限されます。あなたがしたいのは、閉ループコントローラーが見るエラーを最小限に抑えることです。そのための1つの方法は、フィードと呼ばれる手法を使用することです。フォワード。フィードフォワードでは、コントローラーを回ってコマンドをシステムに直接駆動します。その例としては、加速フィードフォワードがあります。「モーター」のトルク定数がわかっていて、負荷は、負荷の特定の加速度を得るために駆動する必要のある電流の量をほぼ知ることができます。コマンド入力加速度を取得し、それを定数で乗算して、コントローラーの駆動コマンドに追加するだけです。あなたは基本的に、コントローラーがない場合にシステムを駆動するのに必要なことを行っており、近づくほどループを取り除く必要のあるエラーが少なくなり、システムのパフォーマンスが向上します。実際には大きな違いがあります。

コメント

  • “モーター制御アプリケーションでの私の経験では、比例ゲインはあるべきものです。 “作業”とインテグレーター”残りのほとんどを実行”。’ D項はまったく必要ないと思います。”同意します一般的なモーター制御アプリケーションの場合、Pが主な役割を果たし、Iが長期のドリフト/エラーを補正します。ただし、ここでは、クアッドコプターは多くの外部乱流にさらされるため、高速応答を得るにはD項が重要です。 I項の場合、クワッドが自律ナビゲーションモードでない限り、はそれほど重要ではありません。
  • @ dm76:私の経験のほとんどはモーター制御に関するものであり、その免責事項を作成します;-)私の直感では’は、クワッドコプターアプリケーションではまだIの余地があり、Pが非常に高い場合は、(モーター制御の場合と同じように)外乱に対処できると思います。クワッドコプターについて明確なことを言うには、これらのシステムを詳しく調べる必要があります…ここで私が言うことの多くが当てはまると思います(特に周波数領域でチューニングを行い、システムの開ループ応答があります)。
  • @ dm76:そして実際にはそれらの”経験則” PIDチューニングは、モーターで非常に平凡なパフォーマンスをもたらし、おそらくクワッドコプターでも同じです。適切に配置されたノッチフィルターは、桁違いの違いを生む場合があります…

回答

Ziegler-Nichols は簡単な手動の方法です。より堅牢な方法も存在します。これらは通常、数学的ソリューション(分析、反復最適化など)に依存します。

それ以外に、一部の自動化手法については、Googleの「自己調整PID」を使用します。私のお気に入りは、ニューラルネットワークをPID調整に適用することです。

回答

正確なPID係数が必要な場合:

  • 統計アクチュエータデータを取得します(つまり、入力電圧の収集 + エンコーダパルスを一定の頻度で取得します(0.01sec20secs3 x 2000マトリックスとしての時間)
  • アクチュエータの伝達関数(TF)を取得します(MATLABの Identity ツールボックスを使用)。
  • 最後に、

PIDTool ツールボックスを使用して、変換関数をアップロードします。


または、すばやく簡単な方法で:

Ziegler–Nichols と呼ばれるより迅速なアプローチがあります: enterここに画像の説明

そしてこの画像では、 PIDパラメーターの効果を示しています
PIDパラメーターの影響

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です