PID(proportional–integral–derivative)制御は、目標値と測定値の差を見て操作量を変える、最も広く使われるフィードバック制御である。温度、モータ速度、位置、流量、ドローン姿勢まで守備範囲が広い理由は、対象の完全な数式モデルがなくても、誤差の「今」「積み残し」「変化の速さ」に反応できるからだ。ただし、PIDは三つのゲインを入力して終わる部品ではない。センサノイズ、演算周期、アクチュエータ飽和、遅れ、非常停止を無視すれば、よく調整されたはずのPIDも振動・暴走・破損の原因になり得る。
本稿では結論を先に示し、その後に直感、信号フロー、連続・離散の式、Ziegler–Nicholsを含む調整、制約と安全、現行の実装例を扱う。ROS 2で制御器をつなぐ際の基礎はROS 2入門を、位置推定が閉ループに与える影響はVisual SLAM入門も参照してほしい。
結論:まずP、次に制約、最後にIとD
- PIDの入力は誤差 e=r-y、出力は操作量 u である。Pは現在の誤差へ反応し、Iは残り続ける偏差を消し、Dは変化を先読みして減衰を足す。
- 実装順序は「対象と単位を決める→出力上限・停止条件を入れる→Pだけで反応を見る→Iで定常偏差を除く→必要なら測定値由来のDを少量加える」が安全である。
- 飽和する系でIをそのまま積むとワインドアップが起きる。積分の停止、クランプ、逆算(back-calculation)を設計の最初から入れる。
- Dは誤差に掛けると目標値の段差で大きなキックを出す。多くの実機では測定値の微分をフィルタして使う。Dはノイズの増幅器でもある。
- PIDはモデル予測制御の下位互換ではない。小さな遅れ、少ない入出力、明快な安全制約の系では、検証しやすく軽いPIDが合理的な選択である。
直感:三人の操作者が同じ誤差を見る
室温が目標より低いとする。比例(P)担当は「今5 ℃低いなら、今すぐ大きく加熱する」と判断する。積分(I)担当は「小さくても低い状態が長く続いたので、ヒータの基準出力が不足している」と覚えて補う。微分(D)担当は「温度は急に上がっている。目標に着く前でも加熱を弱めよう」と言う。この三人を足すと、速い立上り、外乱への復帰、行き過ぎの抑制を両立しやすい。
ただし比喩には限界がある。ヒータには最大電力があり、温度計にはノイズがあり、部屋からセンサまで熱が伝わる遅れがある。D担当がノイズを「急な変化」と誤解し、I担当が最大出力中も不足を記憶し続ければ、制御器は正しい判断をしていない。このためPIDは、演算式より前に、何が測れ、何を安全に操作できるかを定義する。
信号フロー:閉ループにあるのは制御器だけではない
図: Duskcoil作成の概念図。実測構成では、センサ較正、通信遅延、アクチュエータの内部ループもこの経路に加わる。
閉ループの対象を G、センサ・推定器を H と書くと、制御器 C だけを高性能にしても G と H の遅れ・飽和・故障は消えない。たとえばSLAMの自己位置を使って移動ロボットを追従制御する場合、推定値のジャンプや遅延はPIDから見れば測定ノイズ・外乱になる。Visual SLAM入門で扱う座標系、時刻同期、再局在化を、制御器の外側の問題として放置してはならない。
PIDとアクチュエータの概念図画像: サイト内の権利確認済み編集用アセット。一般的な制御構成を示す概念図であり、本文の特定製品・実測配線を表すものではない。
基本式と単位
連続時間の並列形PIDは、
で表せる。r は目標値、y は測定値、e=r-y、u_{ff} はフィードフォワードである。K_P の単位は u/e、K_I は u/(e\cdot s)、K_D は u\cdot s/e で、無次元とは限らない。角度をradで扱うかdegで扱うかを変えれば、同じ数値のゲインは別物になる。単位、符号、座標系、目標値の更新周期を仕様に書くことが、最初の調整作業である。
サンプリング周期を T_s とする離散実装では、積分状態 I_k と差分微分 D_k を例えば
として u_k=K_Pe_k+K_II_k+K_DD_k を計算する。しかし周期が揺れたのに固定の T_s を使う、時刻が逆行する、通信で古い測定値を使う、といった実装は積分・微分を壊す。リアルタイム周期が保証できない上位ソフトウェアでは、ハードウェア近傍の高速ループと、経路計画・目標生成の低速ループを分ける。
微分は生の差分を使わず、一次ローパスを通すことが多い。例えば \alpha=\tau_f/(\tau_f+T_s) として
とすれば、測定値由来のD(derivative on measurement)を作れる。目標値のステップによるDキックを避け、ノイズ帯域を抑える意図がある。フィルタを強くし過ぎれば位相遅れが増え、Dの減衰効果も薄くなる。
P、I、Dを一つずつ理解する
Pを増やすと、通常は立上りが速く、外乱に強くなる一方、行き過ぎと振動が増える。静的摩擦や重力のあるモータ位置制御では、Pだけでは小さな残差が残り得る。Iはその残差を時間とともに足し上げ、一定外乱を打ち消す。ただしIが速過ぎると、対象がまだ反応していない間に過剰な操作を蓄え、遅れて大きなオーバーシュートを作る。
Dは誤差変化への反応で、適切なら減衰を増やす。だが速度計・エンコーダの量子化、IMU振動、カメラ推定の揺れを増幅する。Dを入れる前にセンサ帯域、機械のガタ、サンプリング周波数を確認する方が、ゲインを増やすより有効なことは多い。位置外側・速度内側のカスケードPIDでは、内側を十分高速・安定にしてから外側を調整する。すべての誤差を一つのPIDへ入れる必要はない。
飽和とアンチワインドアップ
現実の操作量は u_{min}\leq u\leq u_{max} に制限される。計算上の未飽和出力を u^*、実際に送る値を u=\operatorname{sat}(u^*) とする。大きな目標変更時、u が上限に張り付いても積分器が e を蓄積し続ければ、誤差が反転した後も出力が戻らない。これが積分ワインドアップである。
最も単純な対策は、出力が飽和し、かつ積分が飽和方向へ出力を押すとき I_k を更新しない条件積分である。より滑らかな逆算法では、
とし、飽和差を積分器へ戻す。K_{aw} は戻しの速さを決める。積分状態のクランプ、目標値ランプ、バンプレスな手動/自動切替も併用する。安全上重要なのは、アンチワインドアップは性能改善ではなく、飽和時の復帰を予測可能にする基本機能だという点である。
Ziegler–Nicholsは出発点であって免許ではない
古典的な閉ループZiegler–Nichols法では、IとDをゼロにし、Pゲインを上げて持続振動が起こる限界ゲイン K_u と周期 T_u を求める。理想的なPIDの初期値として、代表的には
すなわち K_I=K_P/T_i、K_D=K_PT_d が与えられる。この方法は対象を意図的に限界振動へ近づけるため、実機の人・設備・熱・圧力・飛行体にそのまま適用してよい手順ではない。飽和、摩擦、遅れ、非線形を持つ対象では、初期値が攻撃的過ぎることも多い。
安全な代替は、シミュレータまたは低出力のステップ試験で、立上り時間、遅れ、時定数、静的ゲインを見積もる方法である。まずPだけを小さく上げ、目標変更と外乱の双方に対する応答を記録する。Iは定常偏差が残るときに少しずつ足す。Dは、PとIで必要な応答を作った後に、振動・オーバーシュートを抑える目的が明確な場合だけ加える。調整ごとに、最大温度、最大速度、最大電流、停止距離を確認する。
| 症状 | よくある原因 | 先に確認すること | 典型的な対処 |
|---|---|---|---|
| 遅い・偏差が残る | P不足、一定外乱、摩擦 | 単位、符号、出力上限 | Pを段階的に増加、必要なら弱いI |
| 振動・大きな行き過ぎ | P/I過大、遅れ、Dノイズ | 周期、遅れ、センサ波形 | P/Iを下げる、目標ランプ、Dフィルタ |
| 飽和後に戻らない | ワインドアップ | 出力と積分状態のログ | 条件積分・逆算・積分クランプ |
| 目標変更で大きく跳ねる | 誤差微分のキック | D項の入力 | 測定値微分、目標値重み付け |
| 低速でガクガクする | 摩擦、量子化、ガタ | エンコーダ分解能、機械部 | デッドバンド・摩擦補償・速度内側ループ |
制約・安全:PIDの外に安全を置く
PID出力を安全機能そのものにしてはならない。ソフトウェアの上限だけでなく、ハードウェアの非常停止、独立した過温・過電流・過圧保護、可動域リミット、通信断時のフェイルセーフを設ける。制御ループは「目標へ近づける」機能、安全系は「危険な状態へ入れない」機能で、故障の仮定が違う。
実装では少なくとも、(1) センサ範囲・時刻・欠損の検査、(2) 目標値と加速度の制限、(3) 操作量・変化率の制限、(4) 積分器のリセット/保持規則、(5) watchdogと通信断時の安全状態、(6) 手動操作へ切替える際のバンプレス移行、を設計する。ロボットであれば人との距離、接触力、停止距離、関節リミットが別途必要になる。ROS 2のノードが動いていることは、リアルタイム性や機能安全の証明ではない。
現行ソフトウェアと製品・研究例
ROS 2のros2_controlは、ハードウェアインターフェース、コントローラマネージャ、複数のコントローラを分け、PIDコントローラやチェーン化を提供する。ros2_control公式文書 のPIDコントローラは、P/I/Dゲイン、出力クランプ、アンチワインドアップなどのパラメータを公開している。PID Controller文書 これは「ROSがPIDを自動調整する」意味ではなく、入出力インターフェースと状態監視を明示して実装できるという意味である。
産業PLCでは、Siemens SIMATIC S7-1200/S7-1500向けにPID制御の機能マニュアルが提供されている。S7-1200システムマニュアル 製品名を挙げる目的は特定ベンダーを推奨することではない。温調・流量・速度制御が、センサ、出力制限、オートチューニング、アラームを含む工業製品として実装されている例を確認するためである。研究では、摩擦・バックラッシュ・時変遅れへの適応、データ駆動調整、学習器を上位の目標生成に使い、低位の安全なPIDを残す構成などが検討される。
実装チェックリスト
- 制御量、操作量、単位、正の向き、許容範囲を一枚に書いたか。
- センサの較正、時間印、更新周期、欠損・外れ値の扱いを試験したか。
- u の上限・下限、変化率、非常停止、通信断時の状態が独立しているか。
- Pのみ、PI、PIDの順にログを取り、目標追従と外乱応答を分けて評価したか。
- 積分状態、飽和フラグ、測定値、目標値、実出力を同じ時刻軸で保存したか。
- 周期ジッタ、遅延、負荷変化、再起動、センサ断線を注入しても安全側へ遷移するか。
- シミュレーションのモデルと実機の符号・単位・制限が一致しているか。ROS 2の構成はROS 2入門と照合したか。