Excelを使用してPIDアルゴリズムを学習する

Excelを使用してPIDアルゴリズムを学習する

1. PIDの紹介

モーター制御

この方法ではフィードバックはありません。つまり、入力数値を完全に信じており、これは理想化されたモデルです。たとえば、入力デューティサイクルが50%で、PWMが25Kzの場合、ホイール速度は1m / sです。実際の製品は、地面抵抗、風圧などのさまざまな要因の影響を受け、入力デューティサイクルが50%で、PWMが25Kzの場合、ホイール速度は1m / sではありません。

今回はフィードバックシステムである測定ユニットを紹介します。

現時点で最も一般的なフィードバックは、フィードバック値を直接使用することです。たとえば、値 X と出力値 y の数式は y=2x であり、これが最も一般的な関係です。 7 を入力し、測定結果が 5 だった場合、入力を直接 7+2*(7-5)=11 に変更します。つまり、一度に直接調整を行うことができます。この調整は単純かつ大雑把すぎます。入力を直接 11 に変更すると、出力が直接 6 になり、予想値を超えてしまう可能性があるからです。この時点で、複数回の調整を行い、その都度少しずつ速度を上げていき、基準を満たしているかどうか速度を測定することを考えるのが自然です。

これが比例規制Kpです。

2. 比例調整

たとえば、現在の車の速度は 0.2 で、目標速度は 1 です。出力 y と入力 x の関係は y=1*x です。比例係数Kp=0.5。時間が経つにつれて、出力と入力の関係は次のようになります。

直感的な折れ線グラフを以下に示します。

これは完璧であることがわかりました。したがって、比例リンクは問題を完全に解決できますが、この結論を出す前に、特別な要因であるノイズ エラーを無視します。

多くのシステムにはノイズが存在します。例えば、自動車の場合、ノイズ誤差はモーターの誤差、風圧などの外部要因によって発生し、変動します。問題を単純化し、外部要因は一定であると仮定します。外部要因は、車の実際の出力速度から 1 を引いた値です。

上記の例を引き続き使用すると、現在の車の速度は 0.2 で、目標速度は 1 です。出力 y と入力 x の関係は y=1*x です。比例係数Kp=0.5、定数誤差は-0.1で、時間が増加すると、出力と入力の関係は次のようになります。

直感的な折れ線グラフを以下に示します。

初期値が 0.2 で、目標との最終的な差が 0.2、補正が 0.1、誤差が正確に -0.1 であるため、最終的な出力は 0.8 で安定します。つまり、補正はありません。

速度を 1 に到達させる必要がある場合はどうすればよいでしょうか。解決策は比例係数 Kp を増やすことです。

誤差が0.8の場合

誤差が1.9の場合

誤差が2のときは完全に振動しています。

結論: 比例制御では、排除できない定常誤差が発生します。比例定数を大きくすると定常誤差を減らすことができますが、大きすぎるとシステムの振動や不安定性が発生します。

3. 積分調整

定常誤差を除去するために、PI(比例積分制御)を使用して、2 回目の積分が追加されます。積分制御は、すべての履歴誤差を合計し、積分定数で乗算します。式は次のとおりです。

u(t) -------------出力曲線、時間とともに変化するPID出力値の曲線

Kp --------------比例係数

e(t)--------------偏差曲線、設定値と実際の値の間の偏差が時間とともに変化する曲線

t-----------------時間

定積分について、上級数学を履修していて寝ていない場合。

数式をコンピュータ システムで使用するには、まず離散化する必要があります。

①は時点tにおける出力値を示す

②は時点tにおける出力誤差を示す

③時刻0からtまでの累積誤差を示します。

Kiパラメータを追加した後の折れ線グラフは次のようになります。

結論は:

偏差がある限り、積分は誤差が 0 になるまで累積し続け、積分項は累積しなくなり定数となり、定常誤差を相殺することができます。

4. 差動調整

積分を導入すると定常エラーを排除できますが、オーバーシュートが増加し、Ki が増加するとオーバーシュートも増加します。

オーバーシュートをなくすために、微分作用を導入する。

積分はe(t)曲線の傾きです。

式を離散化すると

ekは現在の誤差、ek-1は前回の誤差なので、①は誤差曲線の傾きになります。

PID式の書き方は他にもあるが、本質は同じである。

離散化後、

u(t) -------------出力曲線、時間とともに変化するPID出力値の曲線

Kp --------------比例係数

e(t)-------------- 偏差曲線、設定値と実際の値の間の偏差が時間とともに変化する曲線

Ti--------------- 積分時間

Td--------------差分時間

T----------------調整サイクル

PIDのパラメータは次のようになります。

前の例に、微分項 Ki=0.3 を追加します。

折れ線グラフは次のようになります

結論: 差別化によりオーバーシュート傾向を弱めることができます。

5. まとめ

PID調整の概略図は次のとおりです。

次のことがわかります。

比例項は偏差を修正する主な力であり、偏差から遠いほど絶対値が大きくなり、偏差を素早く修正することができます。

積分項は前の状態と関係があります。面積の絶対値が大きいほど、その絶対値も大きくなります。その機能は、累積された偏差を解消することです。

微分項は傾きと関連しており、説明がより困難です。一般的に、微分項の機能は、ターゲットが設定値に近づくときに加速し、設定値から離れないようにすることです。したがって、目的地に到着した後は離脱が妨げられるため、差別化によってシステムの安定性を高めることができます。

6. 増分PID

上記で説明したのは位置PIDです。目標値ではなく前回の値との差分を出力する増分PIDもあります。直感的には、u(t)-u(t-1)となります。

するとu(t)-u(t-1)の式は次のようになる。

位置PIDコントローラの基本的な特性:

  1. 位置型PID制御の出力は過去の状態全体と関連し、偏差の累積値を使用するため、累積偏差が発生しやすくなります。
  2. 位置 PID は、アクチュエータに一体型コンポーネントがないオブジェクトに適しています。
  3. 位置出力はオブジェクト出力に直接対応し、システムに大きな影響を与えます。

インクリメンタル PID コントローラの基本的な特性:

  • 増分 PID アルゴリズムでは累積は必要ありません。制御量の増分の決定は最新の偏差値にのみ関連し、計算された偏差の影響は小さくなります。
  • 増分 PID アルゴリズムは、システムへの影響が比較的少ない制御量の増分を取得します。
  • 増分 PID アルゴリズムを使用すると、手動から自動への障害のない切り替えを簡単に実現できます。

7. コードプログラミング

位置PID

  1. /********************************************************************************
  2. 位置PID
  3. ****************************************************************************/
  4. ダブルPID(ダブル実際、ダブル セット
  5. {
  6. 静的  double E_sum,Error_last; //最後のエラー
  7.  
  8. ダブルkp=20.767、ki=1.867、kd=115.55;
  9.  
  10. ダブルpid_out;
  11. double Error_now; //現在のエラー
  12. Error_now = SET -Actual; //現在のエラー
  13. // if(Error_now>-0.9&&Error_now<0.9) //静的エラーを防ぐ
  14. // {
  15. // Error_now=0;
  16. // Error_last=0;
  17. // }
  18. E_sum += Error_now; //エラーの蓄積
  19. // if(E_sum>484)E_sum=484; //積分飽和を防ぐための積分制限振幅
  20. // if(E_sum<-484)E_sum=-484;
  21.  
  22. pid_out = kp * Error_now + ki * E_sum + kd * (Error_now-Error_last); //pid計算式
  23. Error_last=Error_now;
  24.  
  25. // if(pid>900) pid=900; // 出力制限
  26. // pid<-900の場合、pid=-900;
  27. -pid_outを返します
  28. }

インクリメンタルPID

  1. エラー = ターゲット速度 - 現在の速度;
  2. P_error = エラー;
  3. I_error = エラー - left_motor.L_error;
  4. D_error = error - 2*left_motor.L_error + left_motor.LL_error;
  5.  
  6. 追加= (s16)(KP * P_error + KI * I_error + KD * D_error);
  7. left_motor.ESC_output_PWM +=追加;
  8.  
  9. 左モーター.LL_error = 左モーター.L_error;
  10. left_motor.L_error = エラー;

この記事はWeChatの公開アカウント「Knowing Programming」から転載したものです。下のQRコードからフォローできます。この記事を転載する場合は、Zhixiao Programming の公開アカウントにご連絡ください。

<<:  ランサムウェア対策における人工知能の重要な役割

>>:  重要なお知らせです!顔認識のために服を着用する必要があります!

ブログ    
ブログ    
ブログ    

推薦する

シリコンバレーのAI界で注目の記事:ジャスパーとVCはAIGCブームの最大の敗者となり、潮が引いた後に初めて誰が裸で泳いでいるかがわかる

この夏、人工知能起業家サム・ホーガンが書いた記事がシリコンバレー中で話題になった。現在、AI と大規...

...

強化学習でデータ分析を行うにはどうすればいいでしょうか?シンガポール国立大学等によるTKDE 2022レビュー論文

データの処理と分析は基本的かつ広範囲にわたります。アルゴリズムはデータの処理と分析において重要な役割...

Baidu がモバイル検索ランキングアルゴリズムを調整し、アプリのランキング結果を改善

百度の関係者は、現在、携帯電話でPCのウェブサイトにアクセスした場合、最高の閲覧体験を得ることは難し...

人工知能は視覚効果アーティストの役割に取って代わるでしょうか?

視覚効果 (VFX) の分野における AI の統合は、シームレスでデータ主導のアプローチを導入するこ...

機械学習による建物のエネルギー効率の向上

エネルギー効率などの複雑な建物の問題を、人間の介入なしに解決するにはどうすればよいでしょうか。建物の...

...

ロボットのウォーリーがやってきた!ディズニーは、RLを使って歩くことを学び、社会的にも交流できる新しいロボットを発表した。

チン、チン、チン、『ウォーリー』が舞台に登場!頭は平らで、体は四角い。地面を指差して見るように言うと...

バブルソートに加えて、Python の組み込みソートアルゴリズムをご存知ですか?

プログラミング アルゴリズムに関して、多くの読者が学校で最初に学ぶのはバブル ソートかもしれませんが...

新しい機械学習の考え方を使用して、自然な異常と人間の誤解を区別する

ディープニューラルネットワークは、数学モデルを使用して画像やその他のデータを処理する多層システムであ...

とても驚きました! GPT-4V錯視チャレンジ記録: 間違っているはずのものは間違っていない、間違っているはずのないものも間違っている

GPT-4V は視覚エラーマップに挑戦し、その結果は「衝撃的」でした。 「どちらの側が明るいですか」...

スタンフォード大学: 人工知能に関する 4 年間の学部課程一覧

最近、数年間業界で働いているスタンフォード大学の AI 卒業生が、AI と機械学習のキャリアのために...

スマートインフラがコミュニティを良くする5つの方法

フロスト&サリバンによる最近の分析によると、スマートシティ技術への世界的な投資は2025年までに22...

最新の軌道予測の概要:基本的な定義からさまざまな方法と評価まで

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...