PIDループを調整するための適切な戦略は何ですか?


55

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


1
より具体的な質問を対象とした質問の方が便利です。それ以外の場合は、PIDの記事を
ご覧ください。

2
私は常にPIDの調整がシステムの特性に非常に依存していることを発見しました。そのため、自動調整システムが非常に有用であるとは思いませんでした。これらは最初のパス、低パフォーマンスのパラメーターセットには問題ありませんが、最適とはほど遠いものであり、特定のシステムの機械的、電気的、および制御の側面に最適化されていない一般的な戦略でも同じ問題が発生します。
マークブース

回答:


66

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

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

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

使用する妨害は、コントローラが接続されているメカニズムによって異なります。通常、セットポイントから手で機構を動かして放すだけで十分です。振動がますます大きくなる場合、Pゲインを下げる必要があります。

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

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



1
@ Throwback1986、これは間違いではないだけPゲインを使用し、IおよびDゲインは次に振動Pゲインとoscilation期間から応じて計算されるチーグラー・ニコルス
dm76

チューニングが必要な複数の関節を持つロボットアームをチューニングするための追加のアドバイスはありますか?ベースから始めて、エンドエフェクタに向かって外向きに作業しますか、それともその逆ですか?
アダムコンキー

1
学術的または工業的な環境では、より洗練された制御方法が必要になります。趣味のために。重力には減衰効果があるので、重力がモーターに最も影響を与えない角度で各ジョイントを調整します。たとえば、モーターではなくベアリングに重力が作用するように、アームがまっすぐ上を向いているとします。順序は関係ありません。希望するパフォーマンスが得られない場合、コントロールにフィードフォワード重力補償項を追加するのがおそらく最も簡単な改善です(シリアルアームには再帰的ニュートンオイラーを使用します)。
hauptmech

pidtuner.comのツールは、私に与えられた良い結果いくつかの既知の欠点を有しているツィーグラー-ニコルス法、よりを。folk.ntnu.no/skoge/publications/2003/tuningPID/more/...
フアン・ゴンザレスブルゴス

13

私が大学で教えられたハウプトメックの答えに似た実験方法:

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

ツィーグラー-ニコルス法を使用すると、振動周期の正確な数を取得することができれば、より正確です。通常、指定された「クラシックPID」番号を使用して振動が発生するため、常に最適とは限りません。

立ち上がり時間、オーバーシュート、整定時間、定常状態誤差、および安定性に対する各項の影響に関する一般的な規則については、IEEE Con​​trol SystemsのLi、Ang、およびChongによる「PID Control System Analysis and Design」の表1を参照してくださいマガジン。


2
Kdファースト?Kpから始めるのがベストだといつも思っていました。
Rocketmagnet

私は古い講義スライドを書き写しています。そうしない理由があれば、それを聞いてみたいと思います。
ジョーベイカー

1
それが「ズボンの座席」のチューニングのために私が提唱するアルゴリズムです。システムをモデリングしたり、その応答を測定したりすることなく、できる限り近くに到達します。(実際に適切なチューニングが必要な場合は、モデリングおよび/または測定が唯一の方法です)。
ティムウェスコット

私が実装したすべてのPIDでKdの符号が負であるため、Kdを最初に調整しても意味がありません。これは、エラーの非常に大きな変化が発生しているときに制御信号を減らすために使用され、本質的にはシステムを減衰させます。Kdしかない場合、システムは反対方向に移動し、エラーを増やして問題を悪化させます。Kdが正の場合、エラーの大きな変化が正しい方向に発生するたびに、それをさらに速く変化させ、ターゲットをオーバーシュートします。
アンドリューカポディエチ14

実際、Dゲインの調整はまず意味がありますが、Dゲインの「増加」は絶対値の増加を意味し、ダンピングの増加にすぎないと考えています。Dゲインの最大の問題は、高周波ノイズを増幅することであり、Pゲインなしでその効果を確認できるのは素晴らしいことです。したがって、基本的には、減衰のように振る舞うのをやめて、ノイズと遅延エラー信号を増幅し始めるゲインを探すことから始めています。ステップ2では、植物が振動するかどうかを確認するために植物をつつく必要があると仮定しています。
DrRobotNinja 14年

7

Embedded.comは私の記事を再び動かしましたが、今はここにあります。これは、PIDループの記述方法(浮動小数点以外での実行方法の設定は読者の演習として残されています)とそれを調整する方法の両方を示しています。

PhDなしのPID

最良の方法は、あなたの能力に大きく依存します。あなたが経験豊富な制御システムの手であると仮定して、最良のチューニングを得る方法は、通常、プラントの応答を測定することです( "plant" == "あなたが制御しているもの")。測定では、プラントのモデルを抽出し、それに合わせて設計するか、単に測定に直接設計します。

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


5

Sebastian Thrunは、「ロボット車のプログラミング方法」クラスでPIDを調整するための簡単なアルゴリズムを紹介しました。それは「ひねり」と呼ばれます、彼はそれをここで説明します

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


4

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

Kdはノイズへの反応が悪いため問題を混乱させ、アナログ入力にフィルターを追加し始めてから、コントロールの速度を落とし、全体の動作を難しくすることに加えて、それが何をするのかを質問します...

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


4

システムモデリング

もちろん、他の回答で述べたように実験的なチューニングを行うこともできますが、制御したいものに対して合理的な動的モデルを定義でき、そのパラメーター特定できる場合は、適切に基づいてコントローラーを設計できるはずです- オーバーシュート立ち上がり時間整定時間定常状態エラーなどの定義済み基準。

MATLABには、これらの基準の組み合わせに合わせて最適化するようにコントローラーを調整できるツールもあります。これにより、さらに使いやすくなります。

コントローラーを知る

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

実世界の問題

コントローラーを調整するときに、とりわけ、ワインドアップ不適切なサンプリングレート飽和のいずれかが発生する可能性があります。

結論

最終的には、システムが実際にどのように機能し、どのように実験できるかについての知識を得るために、システムで実際に何ができるかにかかっています。最良の方法は、実際にPIDコントローラーと制御理論、IMOについて実際に学習することですが、私は偏見があります:)


なぜ人々がPIDのチューニングのためにヒューリスティックを提案し続けるのか理解していませんが、今日では、深い理論的背景を必要としないプラント同定とコントローラー設計のための多くの自動ツールが提供されています。この答えを評価してください。
ウゴパッタチーニ

3

興味のある人のために、私の経験から少し拡大してみます。問題は、やや近づきにくい(時には役に立たない)制御理論がたくさんあり、不正確なことが多いシステムに関する仮定を立てる経験則があることだと思います。

安定

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

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

これらの手動による方法の主な問題は、あなたが盲目で飛んでいるということです。そして、あなたは貧弱な制御システムを得ることがほとんど保証されているということです。

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

わかりましたが、これはどのように役立ちますか?

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

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

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

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

閉ループを超えて

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


「モーター制御アプリケーションでの私の経験では、比例ゲインは「作業」のほとんどを行い、積分器は「残り」を行う必要があります。D項はまったく必要ないと思います。」私は、典型的なモーター制御アプリケーションのそれに同意します。Pは主な仕事を行い、Iは長期的なドリフト/エラーを補正します。しかし、ここでは、クワッドコプターは多くの外部乱流の影響を受けるため、高速応答を得るにはD項が重要です。I用語に関しては、クワッドが自律ナビゲーションモードでない限り、それほど重要ではありません。
dm76 14年

@ dm76:私の経験のほとんどはモーター制御に関するものであり、私はその免責事項を作ります;-)クアッドコプターのアプリケーションにはまだ私には余地があり、Pが非常に高い場合は外乱に対処できると思いますモーター制御で行います)。クワッドコプターについて明確なことを言うには、これらのシステムを詳しく調べる必要があります...ここで言うことの多くは当てはまると思います(特に周波数領域でチューニングを行い、システムの開ループ応答を得る)。
ガイサートン14年

1
@ dm76:そして、実際にそれらの「経験則」PIDチューニングは、モーターで非常に平凡なパフォーマンスをもたらし、おそらくクワッドコプターでも同じです。時にはうまく配置ノッチフィルタは、大きさの差の順序を作ることができます...
ガイSirton

0

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

さらに、自動化されたいくつかの手法については、「自己調整PID」をグーグルで検索します。私のお気に入りは、ニューラルネットワークをPIDチューニングに適用することです。


0

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

  • 統計アクチュエータデータを取得します(つまり、x 行列としてcollecting input voltages+ encoder pulses定数(+ 0.01sec)時間で)20secs32000
  • アクチュエータの伝達関数(TF)を取得します(MATLABのIdentツールボックスを使用)。
  • 最後に、MATLABでPIDToolツールボックスを使用して、変換関数をアップロードします。

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

Ziegler–Nicholsと呼ばれるより速いアプローチがあります: ここに画像の説明を入力してください

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.