Math World Lab

PID制御の基礎

誤差の「今・積み重ね・変化」を微積分で読み取り、目標値へ滑らかに近づける制御工学の数学

この単元の発見をシェア
3行要約(Key Takeaways / AIOサマリー)
1
PID制御は、目標値と現在値の差である「誤差 e(t)e(t)」に対し、比例(P: 今の誤差の大きさ)、積分(I: 誤差の蓄積)、微分(D: 誤差の変化速度)の3つの働きを組み合わせて制御量を決める手法
2
比例だけの制御では目標値に到達しきらない定常偏差が残り、積分項がこれを解消する。一方、微分項は急激な変化を予測して抑え、行き過ぎ(オーバーシュート)や振動を抑制する
3
エアコンの温度調整、自動車のクルーズコントロール、ドローンの姿勢制御など、現代のあらゆるフィードバック制御システムの土台になっている最も基本的な制御アルゴリズム

なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値

Purpose & Motivation

なぜ生まれたのか?

PID制御は、目標値と現在値の差である「誤差 $e(t)$」に対し、比例(P: 今の誤差の大きさ)、積分(I: 誤差の蓄積)、微分(D: 誤差の変化速度)の3つの働きを組み合わせて制御量を決める手法

身につく武器・思考力

比例だけの制御では目標値に到達しきらない定常偏差が残り、積分項がこれを解消する。一方、微分項は急激な変化を予測して抑え、行き過ぎ(オーバーシュート)や振動を抑制する

実社会・ITでの活躍現場

  • •組み込み制御システムにおける離散時間PIDコントローラの実装
  • •ITシステム・アルゴリズム実装における論理設計
  • •データ分析やシミュレーションにおける数理モデリング

Layer 1 — 直感・シミュレーター

Kp(比例)・Ki(積分)・Kd(微分)の3つのゲインをスライダーで調整し、「シミュレーション実行」ボタンを押してみよう。目標値(点線)に対する系の応答曲線(実線)が時間とともにどう変化するかがグラフに描かれる。Kpを大きくしすぎると振動が起き、Kiを入れると徐々にずれが解消され、Kdを入れると行き過ぎが滑らかに抑えられる様子を観察できる。

Kp・Ki・Kdのゲインを調整すると、目標値(点線, y=1)に対する応答曲線がリアルタイムに再計算される。
Kp(比例)2.00
Ki(積分)0.50
Kd(微分)0.80
最大オーバーシュート: +0.52

u(t)=Kpe(t)+Ki∫0te(τ)dτ+Kddedtu(t) = K_p e(t) + K_i \int_0^t e(\tau)d\tau + K_d \frac{de}{dt}— Kpを上げすぎると振動し、Kiが定常偏差を消し、Kdが行き過ぎを滑らかに抑えます。

↑ このシミュレーションは簡易的な質点モデル(制御入力を加速度とみなし、摩擦による減衰を加えたもの)です。実際の温度制御やモーター制御でも、誤差の比例・積分・微分という同じ3つの働きの組み合わせで応答特性を調整します。

直感チェック!ミニクイズ

PID制御において、目標値に近づいた際の「オーバーシュート(行き過ぎて振動する現象)」を抑えるために最も直接的に働く項はどれか?

Layer 2 — 定義・受験・証明

定義

目標値 r(t)r(t)(目標温度・目標位置など)と実際の出力 y(t)y(t) の差を誤差 e(t)=r(t)−y(t)e(t) = r(t) - y(t) とする。PID制御は、この誤差から次式で制御入力 u(t)u(t) を決定する。

u(t)=Kp e(t)  +  Ki∫0te(τ) dτ  +  Kdde(t)dtu(t) = K_p\, e(t) \;+\; K_i \int_0^t e(\tau)\, d\tau \;+\; K_d \frac{de(t)}{dt}

第1項(比例項)は現在の誤差の大きさに比例した修正、第2項(積分項)は過去からの誤差の累積に比例した修正、第3項(微分項)は誤差の瞬間的な変化率(傾き)に比例した修正を表す。デジタル実装では微分・積分を離散化し、時刻ステップ Δt\Delta t ごとに次のように近似計算する。

uk=Kpek+KiΔt∑j=0kej+Kdek−ek−1Δtu_k = K_p e_k + K_i \Delta t \sum_{j=0}^{k} e_j + K_d \frac{e_k - e_{k-1}}{\Delta t}

公式・数理モデル

u(t)=Kp e(t)+Ki∫0te(τ) dτ+Kdde(t)dtu(t) = K_p\, e(t) + K_i \int_0^t e(\tau)\, d\tau + K_d \frac{de(t)}{dt}

証明・導出

各項の役割を微積分の観点から導出する:

【比例項が定常偏差を残す理由】 比例制御のみ(u=Kpeu = K_p e)で単純な一次遅れ系 dydt=−ay+bu\frac{dy}{dt} = -a y + b u を制御する場合、定常状態(dydt=0\frac{dy}{dt}=0)では y∞=bKpa+bKpry_{\infty} = \frac{bK_p}{a+bK_p} r となり、KpK_p をどれだけ大きくしても y∞=ry_\infty = r には理論上到達しない(Kp→∞K_p \to \infty の極限でのみ一致)。この残差 r−y∞r - y_\infty が「定常偏差」である。

【積分項が定常偏差を解消する理由】 積分項を加えると、定常状態では制御入力 uu 自身が一定値に収束するために誤差の積分 ∫e dτ\int e\,d\tau が有界であり続ける必要がある。誤差 ee が恒常的に正または負のままだと積分は無限に発散してしまうため、定常状態では必然的に e∞=0e_{\infty} = 0 となる(積分の発散を防ぐ唯一の解が誤差ゼロ)。これにより定常偏差が理論上完全に解消される。

【微分項がオーバーシュートを抑える理由】 誤差の時間微分 dedt\frac{de}{dt} は、誤差が今後どちらの方向にどれだけ速く変化しようとしているかを表す「予測」情報である。目標値に近づく速度が速い(dedt\frac{de}{dt} が大きく負)局面では、微分項 KddedtK_d \frac{de}{dt} が制御入力を早めに減速させるブレーキとして働き、慣性で目標値を通り過ぎてしまう現象(オーバーシュート)と、それに続く振動を抑制する。これはテイラー展開による1次近似 e(t+Δt)≈e(t)+dedtΔte(t+\Delta t) \approx e(t) + \frac{de}{dt}\Delta t を用いて未来の誤差を先読みして補正していると解釈できる。

押さえておきたいポイント

  • P単独では定常偏差が残り、PIで偏差は解消するが振動しやすくなり、PID(P+I+D)で追従性と安定性のバランスが取れる
  • 積分項の使いすぎは「積分ワインドアップ(integral windup)」と呼ばれる過剰な蓄積による大きなオーバーシュートを招くため、実装では積分項に上限値(アンチワインドアップ処理)を設けるのが一般的
  • 各ゲイン Kp,Ki,KdK_p, K_i, K_d の調整法として、Ziegler–Nichols法などの経験的チューニング手法が古くから使われている
  • PID制御はエアコン、サーモスタット、自動車のクルーズコントロール、産業用ロボットアーム、ドローンの姿勢安定化など、現代のフィードバック制御システム全般の基礎になっている
参照基準・学習指導要領との対応

本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。

Layer 3 — 工学応用・現場実装

組み込み制御システムにおける離散時間PIDコントローラの実装

センサーから読み取った現在値と目標値の誤差をもとに、離散時間で比例・積分・微分の3項を計算し、モーターやヒーターなどのアクチュエータへの制御入力を決定する、組み込みシステムで広く使われるPIDコントローラのTypeScript実装。

1class PIDController {
2 private integral = 0;
3 private prevError = 0;
4
5 constructor(
6 private kp: number,
7 private ki: number,
8 private kd: number,
9 private dt: number // 制御周期(秒)
10 ) {}
11
12 // 現在の目標値と実測値から制御入力を計算
13 update(setpoint: number, measured: number): number {
14 const error = setpoint - measured;
15
16 this.integral += error * this.dt; // 積分項: 誤差の累積
17 const derivative = (error - this.prevError) / this.dt; // 微分項: 誤差の変化率
18
19 const output =
20 this.kp * error + this.ki * this.integral + this.kd * derivative;
21
22 this.prevError = error;
23 return output;
24 }
25}
26
27// 例: 目標温度 25°C に向けたヒーター制御シミュレーション
28const pid = new PIDController(2.0, 0.5, 0.8, 0.1);
29let temperature = 18; // 現在温度
30const target = 25;
31
32for (let step = 0; step < 50; step++) {
33 const controlSignal = pid.update(target, temperature);
34 // 簡易的な一次遅れ系として温度を更新(実際はセンサー値を読み取る)
35 temperature += controlSignal * 0.05;
36 if (step % 10 === 0) {
37 console.log(`ステップ ${step}: 温度 = ${temperature.toFixed(2)}°C`);
38 }
39}

次に学ぶならコレ!おすすめトピック

この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元

数理モデル・概念が近い関連トピック

関連度高工学応用

勾配降下法

谷底を探すAIの基本アルゴリズム

関連度高高校数学

微分の基本(接線と変化率)

平均変化率の極限として現れる「その瞬間の傾き」

関連度高高校数学

積分の基本(面積と区分求積法)

微小な短冊を無限に足し合わせることで現れる「曲線下の面積」

同じレベルで次に挑戦したいトピック

同レベル推薦工学応用

ニューラルネットワークの数学(順伝播と活性化関数)

入力に重みを掛けて足し合わせ、非線形関数で発火させるAIの基本素子

同レベル推薦工学応用

レコメンドの仕組み(コサイン類似度とベクトル検索)

ユーザーの好みと商品の近さを「ベクトルのなす角」で判定するアルゴリズム

"PASS"c=mᵉ%n
同レベル推薦工学応用

RSA暗号と素数の秘密(公開鍵暗号)

「掛け算は簡単だが、素因数分解は極めて困難」という非対称性を利用した現代暗号の金字塔

工学・実社会での応用先でつながるトピック

工学・実践連携工学応用

最短経路探索(ダイクストラ法とA*アルゴリズム)

グラフ上の無数のルートから「最もコストが小さい道」を一瞬で見つけ出す数学

工学・実践連携工学応用

セル・オートマトン(ライフゲーム)

たった4つの単純なルールから、生命のような自己組織化と複雑系が創発する

工学・実践連携工学応用

当たり判定アルゴリズムの数学

2点間の距離公式と座標の不等式だけで、ゲームの「衝突」を判定する仕組み

あなたの数学力をさらに伸ばす

数学の弱点診断や算数パズルに挑戦してみませんか?

簡単な質問に答えてあなたにぴったりの学習ロードマップを発見したり、直感を試すパズルで数の面白さを体験できます。