Skip to content

Instantly share code, notes, and snippets.

@ar90n
Last active January 6, 2024 21:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ar90n/811fb05fb1630ed0532e1fa8f5d9429e to your computer and use it in GitHub Desktop.
Save ar90n/811fb05fb1630ed0532e1fa8f5d9429e to your computer and use it in GitHub Desktop.
PID memo

以下の資料が非常にわかりやすかったので自分の理解をメモに残しておく。 http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/

Sample Time

http://brettbeauregard.com/blog/2011/04/improving-the-beginner%e2%80%99s-pid-sample-time/

サンプリング間隔を固定とすることで計算負荷を低減することができる。 具体的には

  • Kiにサンプリング間隔を乗じる
  • Kdをサンプリング間隔で割る

Derivative Kick

http://brettbeauregard.com/blog/2011/04/improving-the-beginner%e2%80%99s-pid-derivative-kick/

目標値が変化したときに、微分項が大きくなってしまう現象。 目標値を定数とみなすと、残差の微分は入力の微分にマイナスをかけたものになる。

$$ \frac{d}{dt}e(t) = \frac{d}{dt}(dst(t) - input(t)) = \frac{d}{dt}dst(t) - \frac{d}{dt}input(t) = -\frac{d}{dt}input(t) $$

Tuning Changes

http://brettbeauregard.com/blog/2011/04/improving-the-beginner%e2%80%99s-pid-tuning-changes/

積分項の計算においてKpを出力時に乗ずる場合、その値が途中で変化するとその分だけ積分項が変化してしまう。 したがって、Kpを乗じた値を積算する。

Reset Windup

http://brettbeauregard.com/blog/2011/04/improving-the-beginner%e2%80%99s-pid-reset-windup/

PID出力が出力範囲を超えた場合、値をクリップする。この処理を出力値のみに適用すると積算値はクリップ前の値で積算され続けるため、誤差が大きくなり変化の追従性が悪化する。 そこで、積算値もクリップする。

On/Off

http://brettbeauregard.com/blog/2011/04/improving-the-beginner%e2%80%99s-pid-onoff/

PID出力をOFFにする場合、積算処理も停止する。

Initialization

http://brettbeauregard.com/blog/2011/04/improving-the-beginner%e2%80%99s-pid-initialization/

PID処理を有効化するタイミングは初期化を行う。 初期化処理では、積算に直近の入力値を設定する。

Direction

http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-direction/

PIDの出力が内部制御値に対して正負どちらを向くかを決める。 内部制御値が大きくなるほど出力が大きくなる場合は正、小さくなるほど出力が大きくなる場合は負とする。 こられの処理はKp, Ki, Kdの符号を変えることで実現できる。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment