PIDって実際どうなってるの?

Last-modified: 2022-06-14 (火) 15:06:21

編集時Ver3.4.3.10

先触れ

Luaで実装できたので復習も兼ねてざっくりと簡潔にまとめました。
そして一応そのLuaを載せたビークルです。
Lua self-made helicopter manoeuvre【HelicopterDrone】V05-β Pigeon


それとこちらに既存のPID解説があります。
僕が書いたのは一部抜粋して言い方変えて+αしただけになってしまってるのでおまけ程度に見てもらえたらと思います。

概要

ゲーム内表記説明
P制御ゲイン目標までの偏差で制御-ゲイン * 偏差
I制御積分偏差の累積で制御-ゲイン * (累積 / 積分)
D制御微分偏差の速度で制御-ゲイン * 速度 * 微分
PID制御-ゲイン * (偏差 + 累積 / 積分 + 速度 * 微分)

※ここに書いた式はうちで使ってるモノでFTDのPIDとは異なるかも知れません。

特筆

P制御
現在から目標までの偏差をなくそうとする制御です。
値が大きいと応答性がよくなりますが大きすぎると振り切ってしまう制御になるのでほどほどに。

I制御
偏差を累積し目標までの足りない隙間を埋めてくれる制御です。
重力や空力抵抗など持続的な影響を受けるときに使えますが、
制御不能などによって偏差が詰まらない状態が続くと過剰な累積となってしまい、制御が戻っても過剰分を減らすのに時間を要しがちです。
そういった不測の事態も考慮して値は少なめか、オフにしておくのが無難です。

D制御
制動させる制御です。
値が小さすぎると制動が足りず往復を繰り返し、大きすぎると制動の効きすぎで微振動してしまいます。

コメント