PID制御とは、フィードバック制御の一種である。ある対象を制御するための入力量(操作量)を、目標値と制御量の誤差から比例(Proportional)、積分(Integral)、微分(Differential)で計算するためこの名がある。
概要
速度(制御量)をある一定(目標値)に保つアクセルの踏み加減(操作量)は、車のパワーや重さ、上り坂か下り坂か…などの影響(制御工学上では外乱という)を受ける。
したがって、速度を目標値に保つためには、速度が遅ければアクセルを強く踏み、速度が速ければアクセルの踏み加減を弱める必要がある。(これをフィードバック制御という)
人間であれば、この操作を経験や学習で自然に行えるが、機械(コンピュータを含む)を自動的に行わせる場合には、アクセルの踏み加減の調整方法(つまり制御手法)を機械に教えてあげる必要がある。
PID制御はこのアクセルの踏み加減を、速度の誤差を比例(Proportional)・積分(Integral)・微分(Derivative)それぞれの制御式で計算し、足し合わせることで決定する制御手法である。第二次世界大戦以前から理論化されており、現代では古典制御論と呼ばれる枠組みに属しているが、シンプルかつそこそこ優秀で汎用性の高い制御手法であるため、現役で様々な用途に用いられている。
ここではP・I・D各制御をかなり定性的かつ砕けた表現で説明するので、厳密な話はwikipediaあたりか制御工学の参考書などを見てほしい。
オン-オフ制御(PID制御以前)
まず、PID制御よりも単純なオン-オフ制御を考える。制御対象は例えばクルマの速度、天ぷら鍋の温度、エアコンの室温などなんでもよいが、オン-オフ制御の場合は目標の値を制御するための入力がオンとオフしかない。
クルマで言えばアクセルがエンジン全開と停止しかない状態、ガスコンロで言えば強火か火を消すかしかない状態である。このような制御の場合、目標値を超えたらスイッチをオフにして、外乱(摩擦で速度が下がったり、熱が天ぷら鍋の外に逃げて温度が下がったり)で目標値を下回るとスイッチをオンにすることになるが、常に実際値は目標値の上下を行ったり来たりして安定しない。
このような単純なオンオフ制御に対して、PID制御は「目標値と出力(実際値)の差を少なくする」「出力の変動を少なくする」「速やかに出力を目標値と近づける」といった利点を持つ。
P制御
単純にオンオフするだけではなく、速度の誤差(目標速度と現在速度の差)に、ある比例係数(Pゲイン)を掛け合わせ、アクセルの踏み加減(操作量)を決定するのがP制御(比例制御)である。
P制御の制御量は以下の式であらわされる。
アクセルの踏み加減(操作量)=(目標の速度 - 現在の速度)×Pゲイン
例えばPゲインが1、目標速度が40km/hの場合で、現在の速度が30km/hなら踏み加減は10。
目標値との誤差が大きければそれに比例して操作量が大きく、誤差が小さければ操作量が少なくなるため、オンオフ制御に比べてよりスムーズに目標値に制御量を近づけることができる。
P制御のキモは、比例係数(Pゲイン)の決定である。ゲインを大きくすれば操作量も大きくなり、小さくすれば操作量も小さくなる。実際の制御に適用するときにはPゲインを適当な値(物理的な方程式を解いたり、シミュレーションしたり、実験したり)に調整する必要がある。
また、計算上はアクセルの踏み加減は±∞の範囲となってしまうが、実際には制限があるため、リミッタを設けるなどの工夫が必要である。
I制御
先ほどの事例で、坂道に差し掛かった場合を考える。その坂は踏み加減10では30km/hまでしか出せないとすると、いつまでたっても目標値40km/hにはたどり着かないままになってしまう。このように、いつまでも誤差が残ったままになってしまうことをオフセットと呼ぶ。
オフセットが生じたときにいちいちPゲインをいじっていては大変なため、代わりに制御開始からの誤差を積分し、操作量に加算していくという方法が用いられる。この誤差を積分していく制御をI制御(積分制御)という。
I制御の操作量は次の式であらわされる。
踏み加減(制御量)=(目標の速度 - 現在の速度)の時間ごとの積分×Iゲイン
Iゲインが1、目標速度が40km/h、現在の速度が30km/hのままであれば、1秒後には踏み加減が10、2秒後には20に増える。つまり、偏差が残っている時間が長ければ、それだけ操作量が増えるのである。そして、いずれ坂道による減速に打ち勝ったうえで40km/hを保てる踏み加減で安定する。
ただし積分することで、速度の誤差に対するアクセルの踏み方は遅れ、最悪の場合加速と減速の繰り返しが止まらなくなることがある(発振)。
そうならないように、Iゲインも適当な値になるように調整する必要がある。
D制御
P制御やI制御の場合誤差が出て初めて制御を始めるため、アクセルに対する車の速度の反応が遅い場合は、手遅れになってしまう場合がある。
その場合、速度が目標に未達であっても、早めにアクセルを弱めてあげることで、行き過ぎることなく目標速度に到達できる。これを実現するのがD制御(微分制御)であり、誤差そのものではなく誤差の変化量=微分(誤差が減る傾向にあるのか、増える傾向にあるのか)を計算に織り込んでアクセルの踏み加減を決める制御である。
D制御の制御量は以下の式であらわされる。
Dゲインが 1、目標速度が40km/h 1秒前の速度が30km/h 現在の速度が40km/hなら、
踏み加減は-10となる。つまり、速度変化の傾向から今後の動きを予想し、あらかじめ踏み加減を減らしておくことができる。
逆に1秒前の速度が50km/h 現在の速度が40km/hなら、
踏み加減は10となり、今後目標より速度が下がらないように備えることができる。
誤差の変化を使って制御するため、D制御だけでは目標にたどり着くことはできない。また、あまりにDゲインを大きくすると、ノイズなどの影響でとんでもない操作をしてしまうのでほどほどに控えるのが大切である。
最終的なPID制御の制御量は以下の式のようになる。
制御量=P制御量+I制御量+D制御量
関連動画
ON-OFF制御とPID制御を比較すると、その滑らかさの違いが分かる。
いくつかのゲームでは、ゲーム内で実際にPID制御をおこなうことができる。
- 4
- 0pt