PID制御
🔥 Vibe プロンプト
「PIDで温度制御をシミュレーション。目標100°C。Kp、Ki、Kdを調整してオーバーシュート最小化。」
PID制御とは?
PID制御は、産業界で最も広く使われているフィードバック制御アルゴリズムです。3つの項の組み合わせで目標値を追跡します:
| 項 | 正式名 | 役割 | |----|--------|------| | Kp | 比例(Proportional) | 現在の誤差に比例した出力 | | Ki | 積分(Integral) | 過去の誤差の累積(定常偏差を除去) | | Kd | 微分(Derivative) | 未来の誤差の予測(オーバーシュート低減) |
実装
class PID:
def __init__(self, Kp, Ki, Kd, setpoint):
self.Kp, self.Ki, self.Kd = Kp, Ki, Kd
self.setpoint = setpoint
self.prev_error = 0
self.integral = 0
def update(self, measurement, dt):
error = self.setpoint - measurement
self.integral += error * dt
derivative = (error - self.prev_error) / dt
self.prev_error = error
return self.Kp*error + self.Ki*self.integral + self.Kd*derivative
# 温度制御シミュレーション
pid = PID(Kp=2.0, Ki=0.5, Kd=1.0, setpoint=100)
temp = 25.0; dt = 0.01
for _ in range(1000):
output = pid.update(temp, dt)
temp += output * dt * 10
temp -= (temp - 25) * 0.01 * dt
print(f"最終温度: {temp:.1f}°C")
ジーグラー・ニコルス調整法
- Ki = Kd = 0 に設定
- 持続振動が発生するまでKpを増加(Ku = 限界感度)
- 振動周期(Pu)を測定
- 以下の式で設定:
| 制御器 | Kp | Ki | Kd | |--------|-----|-----|-----| | Pのみ | 0.5 × Ku | — | — | | PI | 0.45 × Ku | 0.54 × Ku / Pu | — | | PID | 0.60 × Ku | 1.20 × Ku / Pu | 0.075 × Ku × Pu |
応用
| 産業 | 用途 | |------|------| | 🚁 ドローン | 姿勢安定化(ロール、ピッチ、ヨー) | | 🚗 自動車 | クルーズコントロール、ABS | | 🏭 産業 | 温度、圧力、流量制御 | | 🤖 ロボット | モーター位置/速度制御 | | 🔥 HVAC | 建物の温度調整 |
まとめ
| 項目 | 詳細 | |------|------| | Kp | 比例 — 現在の誤差に応答 | | Ki | 積分 — 定常偏差を除去(過去の累積) | | Kd | 微分 — 将来の誤差を予測、オーバーシュート低減 | | 調整 | ジーグラー・ニコルス法、試行錯誤、自動調整 | | 課題 | 微分項のノイズ増幅、積分ワインドアップ |
重要なポイント
- コアコンセプトをしっかり理解する
- ハンズオンコード例で実践する
- 実世界の問題に応用する
- 演習で知識を強化する
さらに学ぶ
- 公式ドキュメント
- GitHubのオープンソースプロジェクト
- コミュニティフォーラムとディスカッション
- 関連コースとチュートリアル