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 の公開アカウントにご連絡ください。

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

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

ブログ    

推薦する

GoogleはColab上のディープフェイクプロジェクトをひそかに禁止した

最近、GoogleがColaboratory(Colab)サービス上のディープフェイクプロジェクトを...

AIエンジニアリングのためのJavaScriptツールトップ5

多くの人が驚くことに、Web 開発の分野で常に人気がある JavaScript は、大規模言語モデル...

...

...

NLP の学習を始める準備ができました。体系的に読むべき本やコースは何ですか?

私は、機械学習コミュニティで手動の特徴エンジニアリングが非常に人気があった 2013 年から自然言語...

...

日常のセキュリティ運用におけるChatGPTの実装

導入人工知能(AI)の急速な発展により、AIは多くの業界、特に情報セキュリティの分野で重要なツールと...

「Google版SORA」はぼやけたグラフィックで嘲笑されたが、世界シミュレーターとして新たな一歩を踏み出した。

インタラクティブな仮想世界を作成するために使用される、Google の 110 億のパラメータ Ge...

テスラ モデル3とYが再びハッカーのリレー攻撃の危険に直面、車は10秒で走り去られる可能性も

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

GPU 価格の急激な下落はチップ不足が終わった兆候でしょうか?

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

人工知能を活用した機械駆動型データ自動ラベル付け法

[[416242]]オブジェクト検出、オブジェクト認識、セグメンテーション タスク用の自動注釈ソリュ...

このAI企業はマスクを使って中国の顔認識システムを破る! WeChat、Alipay、鉄道駅もすべて影響を受けた

海外メディアの報道によると、人工知能企業Kneronは特製の3Dマスクを使い、AlipayやWeCh...

なぜアルゴリズムを犬のように飼いならすのか

[[114872]]進化人類学者の間では、子犬などのペットが野生動物から進化したのは、社会的な知性を...

AIと人間: 人工知能は常に進歩し、人間は常に進化している

この記事は、公開アカウント「Reading the Core」(ID: AI_Discovery)か...

人工知能研究における大きな進歩は人類に大きな変化をもたらすだろう

アメリカのテクノロジーの天才イーロン・マスク氏は、彼の研究チームが脳と機械の相互接続を可能にする脳・...