PID(proportional–integral–derivative)制御は、目標値と測定値の差を見て操作量を変える、最も広く使われるフィードバック制御である。温度、モータ速度、位置、流量、ドローン姿勢まで守備範囲が広い理由は、対象の完全な数式モデルがなくても、誤差の「今」「積み残し」「変化の速さ」に反応できるからだ。ただし、PIDは三つのゲインを入力して終わる部品ではない。センサノイズ、演算周期、アクチュエータ飽和、遅れ、非常停止を無視すれば、よく調整されたはずのPIDも振動・暴走・破損の原因になり得る。

本稿では結論を先に示し、その後に直感、信号フロー、連続・離散の式、Ziegler–Nicholsを含む調整、制約と安全、現行の実装例を扱う。ROS 2で制御器をつなぐ際の基礎はROS 2入門を、位置推定が閉ループに与える影響はVisual SLAM入門も参照してほしい。

結論:まずP、次に制約、最後にIとD

直感:三人の操作者が同じ誤差を見る

室温が目標より低いとする。比例(P)担当は「今5 ℃低いなら、今すぐ大きく加熱する」と判断する。積分(I)担当は「小さくても低い状態が長く続いたので、ヒータの基準出力が不足している」と覚えて補う。微分(D)担当は「温度は急に上がっている。目標に着く前でも加熱を弱めよう」と言う。この三人を足すと、速い立上り、外乱への復帰、行き過ぎの抑制を両立しやすい。

ただし比喩には限界がある。ヒータには最大電力があり、温度計にはノイズがあり、部屋からセンサまで熱が伝わる遅れがある。D担当がノイズを「急な変化」と誤解し、I担当が最大出力中も不足を記憶し続ければ、制御器は正しい判断をしていない。このためPIDは、演算式より前に、何が測れ、何を安全に操作できるかを定義する。

信号フロー:閉ループにあるのは制御器だけではない

PID閉ループの信号フロー目標値、加算点、PID、飽和器、プラント、センサ、外乱がつながる概念図目標 rΣPIDP + I + D制限器u_min ≤ u ≤ u_max対象 Gモータ・炉・機体センサ H、標本化、遅れ、ノイズを含むフィードバック外乱 d+

図: Duskcoil作成の概念図。実測構成では、センサ較正、通信遅延、アクチュエータの内部ループもこの経路に加わる。

閉ループの対象を G、センサ・推定器を H と書くと、制御器 C だけを高性能にしても GH の遅れ・飽和・故障は消えない。たとえばSLAMの自己位置を使って移動ロボットを追従制御する場合、推定値のジャンプや遅延はPIDから見れば測定ノイズ・外乱になる。Visual SLAM入門で扱う座標系、時刻同期、再局在化を、制御器の外側の問題として放置してはならない。

PID制御器とアクチュエータの概念模式図PIDとアクチュエータの概念図

画像: サイト内の権利確認済み編集用アセット。一般的な制御構成を示す概念図であり、本文の特定製品・実測配線を表すものではない。

基本式と単位

連続時間の並列形PIDは、

u(t)=u_{ff}(t)+K_Pe(t)+K_I\int_0^t e(\tau)d\tau+K_D\frac{d e(t)}{dt}

で表せる。r は目標値、y は測定値、e=r-yu_{ff} はフィードフォワードである。K_P の単位は u/eK_Iu/(e\cdot s)K_Du\cdot s/e で、無次元とは限らない。角度をradで扱うかdegで扱うかを変えれば、同じ数値のゲインは別物になる。単位、符号、座標系、目標値の更新周期を仕様に書くことが、最初の調整作業である。

サンプリング周期を T_s とする離散実装では、積分状態 I_k と差分微分 D_k を例えば

I_k=I_{k-1}+T_s e_k,\qquad D_k=\frac{e_k-e_{k-1}}{T_s}

として u_k=K_Pe_k+K_II_k+K_DD_k を計算する。しかし周期が揺れたのに固定の T_s を使う、時刻が逆行する、通信で古い測定値を使う、といった実装は積分・微分を壊す。リアルタイム周期が保証できない上位ソフトウェアでは、ハードウェア近傍の高速ループと、経路計画・目標生成の低速ループを分ける。

微分は生の差分を使わず、一次ローパスを通すことが多い。例えば \alpha=\tau_f/(\tau_f+T_s) として

D_k=\alpha D_{k-1}+(1-\alpha)\frac{y_{k-1}-y_k}{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 を更新しない条件積分である。より滑らかな逆算法では、

I_k=I_{k-1}+T_se_k+K_{aw}T_s(u_k-u_k^*)

とし、飽和差を積分器へ戻す。K_{aw} は戻しの速さを決める。積分状態のクランプ、目標値ランプ、バンプレスな手動/自動切替も併用する。安全上重要なのは、アンチワインドアップは性能改善ではなく、飽和時の復帰を予測可能にする基本機能だという点である。

Ziegler–Nicholsは出発点であって免許ではない

古典的な閉ループZiegler–Nichols法では、IとDをゼロにし、Pゲインを上げて持続振動が起こる限界ゲイン K_u と周期 T_u を求める。理想的なPIDの初期値として、代表的には

K_P=0.6K_u,\quad T_i=0.5T_u,\quad T_d=0.125T_u,

すなわち K_I=K_P/T_iK_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を残す構成などが検討される。

実装チェックリスト

  1. 制御量、操作量、単位、正の向き、許容範囲を一枚に書いたか。
  2. センサの較正、時間印、更新周期、欠損・外れ値の扱いを試験したか。
  3. u の上限・下限、変化率、非常停止、通信断時の状態が独立しているか。
  4. Pのみ、PI、PIDの順にログを取り、目標追従と外乱応答を分けて評価したか。
  5. 積分状態、飽和フラグ、測定値、目標値、実出力を同じ時刻軸で保存したか。
  6. 周期ジッタ、遅延、負荷変化、再起動、センサ断線を注入しても安全側へ遷移するか。
  7. シミュレーションのモデルと実機の符号・単位・制限が一致しているか。ROS 2の構成はROS 2入門と照合したか。

参考資料

#制御工学 #PID制御 #フィードバック #ロボティクス #ROS 2 #安全