実際に使える制御工学:基礎編(4)「PID制御。PとDはバネ・ダンパ、Iというのは人の知恵。」
<この記事で伝えたい事>
PID制御は、モノの動きを思い通りに制御するための方法の1つです
我々の目的はあくまで
「モノの動きを思いどおりに制御する」
ことです。
...とはいえ、よく使う方法なので知っておいて損はないです。PID制御は、フィードバック制御と呼ばれる方法の1つでもあります
「モノの動きを思いどおりに制御する」方法は
フィードバック(FB:Feedback)制御と
フィードフォワード(FF:Feed Forward)制御
の2種類に大別できます。
1. はじめに
自己紹介はこちらです。
この記事は、主に制御系の学生や若手エンジニアに向けた基礎知識紹介・解説記事シリーズの第4弾です。
今回は、代表的な制御方法であるPID制御を紹介・解説します。
2. フィードバック制御とフィードフォワード制御とは?
まずは、フィードバック制御について説明します。
フィードバック制御は、ビジネスの場でよく使われる「フィードバック」という言葉の語源でもあります。
フィードバック制御のやることは、ビジネスにおけるフィードバックとほぼ同じです。

フィードバック制御では、コントローラが目標$${r}$$と出力$${y}$$の誤差$${e}$$を0に近づけるよう入力$${u}$$を決定します。
(リーダーがフォロワーに対して目標と現状の差を埋めるよう指示やアドバイスをする様子とよく似ていますね)
誤差$${e}$$が0になったとき、出力$${y}$$は目標$${r}$$と完璧に一致する=思い通りに動かせたということになります。
なお、制御の対象となるシステムは制御対象と呼ばれます。
(そのまんまのネーミングですね)
次に、フィードフォワード制御について説明します。
ビジネスに例えると、フィードフォワード制御はトップダウンの命令です。

これら2つの制御方法には、それぞれメリット・デメリットがあります。
(これもビジネスと似ています)
フィードバック制御
メリット:
制御対象の動きを見てコントローラが動くので、想定外の要因(外乱)に対して強い
デメリット:
制御対象の動きを見ないとコントローラが動かないので反応が鈍い
フィードフォワード制御
メリット:
制御対象の動きを見ずに、決め打ちでコントローラが動くので反応が迅速
デメリット:
外乱の影響をダイレクトに受ける(後から補正が効かない)
2つの制御方法は、互いに一長一短があります。
このため、開発現場では2つを組み合わせて使うケースが多いです。
ただ、工業製品に個体バラつき等の想定外要因はつきものなので、どちらかというとフィードバック制御の方が重視されることが多いです。
3. PID制御のはたらきと構造
まずは、PID制御のP・I・Dについて説明します。
記号の意味とそれぞれの動き・役割を下表にまとめます。

下図は、PID制御をブロック線図化したものです。

フィードバック制御の1つだけあって、PID制御でも目標$${r}$$と出力$${y}$$の誤差$${e}$$に基づき入力$${u}$$を決めるのは変わりません。
4. P・D制御をもっと詳しく
3章の内容だけだと「そんな漠然としたこと言われても、ちょっと...」と思うことでしょう。
そこで話を深掘りしたいと思います。
まず、制御対象として下図のシステムを考えます。

制御の目的は
「ブロック位置$${x}$$を思いどおりに動かすこと」
とします。
すると、自然のなりゆきで制御対象の出力は位置$${x}$$になります。
また、図を見ると力$${F}$$は自在に調節できることになっています。
力$${F}$$をうまく調節すればブロック位置$${x}$$を思いどおりに動かせるかも?
というのは何となくイメージできると思います。
このため、力$${F}$$は制御対象の入力とみなせそうです。
そして、ニュートンの運動方程式から制御対象の入力$${F}$$と出力$${x}$$の関係性は下式で表せます。
$$
m\cdot \frac{d^2x_{(t)}}{dt^2}=F_{(t)}
$$
制御対象の全体像が見えてきたので、ようやくP・D制御の話ができます。
前述のとおり、力$${F}$$は我々が自在に調節できます。
ここで、調節のルールにP・D制御を使うことを考えます。
「こういうふうに動かしたい」
という目標位置を$${x^{ref}_{(t)}}$$とすると、誤差$${e}$$やP・D制御適用時の力$${F}$$は下式で表されます。
$$
e_{(t)}=x^{ref}_{(t)}-x_{(t)}
$$
$$
\begin{array}{cl}
F_{(t)}&=K_{p}\cdot e_{(t)}+K_{d}\cdot\cfrac{de_{(t)}}{dt} \\
&=K_{p}\cdot (x^{ref}_{(t)}-x_{(t)}) \\
& +K_{d}\cdot \cfrac{d}{dt}(x^{ref}_{(t)}-x_{(t)})
\end{array}
$$
これを制御対象(ニュートンの運動方程式)の入力$${F}$$に代入します。
すると、以下のようにP・D制御適用時の制御システム全体の動きを表す微分方程式が得られます。
$$
\begin{array}{cl}
m\cdot \cfrac{d^2x_{(t)}}{dt^2}&=K_{p}\cdot(x^{ref}_{(t)}-x_{(t)})\\
& +K_{d}\cdot\cfrac{d}{dt}(x^{ref}_{(t)}-x_{(t)})
\end{array}
$$
ここで右辺を少し変形します。
$$
\begin{array}{cl}
m\cdot \cfrac{d^2x_{(t)}}{dt^2}&=-K_{p}\cdot(x_{(t)}-x^{ref}_{(t)})\\
& -K_{d}\cdot\cfrac{dx_{(t)}}{dt}+K_{d}\cdot\cfrac{dx^{ref}_{(t)}}{dt}
\end{array}
$$
この形はどこかで見たことがある方が多いのではないでしょうか?
そう、高校物理で教わるバネ振動の運動方程式と非常に似ているのです。
それでは、バネ振動の運動方程式を思い出してみましょう。
下図は、バネ振動系のイメージです。

バネ振動の運動方程式とP・D制御適用時の制御システム微分方程式を並べてみましょう。
バネ運動方程式
$${m\cdot \cfrac{d^2x_{(t)}}{dt^2}=-K\cdot(x_{(t)}-x_{0})-D\cdot\cfrac{dx_{(t)}}{dt}}$$
P・D制御システム微分方程式
$${m\cdot \cfrac{d^2x_{(t)}}{dt^2}=-K_{p}\cdot(x_{(t)}-x^{ref}_{(t)})}$$
$${ -K_{d}\cdot\cfrac{dx_{(t)}}{dt}+K_{d}\cdot\cfrac{dx^{ref}_{(t)}}{dt}}$$
比例ゲイン$${\bm{K_{p}}}$$とバネ定数$${\bm{K}}$$が、
微分ゲイン$${\bm{K_{d}}}$$と粘性摩擦係数$${\bm{D}}$$が、
目標位置$${\bm{x^{ref}_{(t)}}}$$とバネの自由長$${\bm{x_{0}}}$$が
それぞれ対応しているのが分かります。
($${+K_{d}\cdot\cfrac{dx^{ref}_{(t)}}{dt}}$$だけは余ります)
このことから、
比例ゲイン$${\bm{K_{p}}}$$は仮想的なバネ定数で目標位置への復元力を再現する
微分ゲイン$${\bm{K_{d}}}$$は仮想的な粘性摩擦係数で摩擦のブレーキ作用を再現する
と分かります。
目標位置$${x^{ref}_{(t)}}$$はバネの自由長$${x_{0}}$$に相当しますが、実物と違って我々が自由に決められます。
これは制御ならではの強みですね。
少し話を戻します。
余った$${+K_{d}\cdot\cfrac{dx^{ref}_{(t)}}{dt}}$$はただの余分なものなのでしょうか?
いいえ、そうではありません。
位置$${x}$$を動かすと必ず速度が発生します。
目標位置どおりに動くにはそれに応じた速度(目標速度)が出てくれないと困ります。
目標速度にまで粘性摩擦によるブレーキがかかると思いどおりの動きを実現する妨げになります。
そこで効果を発揮するのが$${+K_{d}\cdot\cfrac{dx^{ref}_{(t)}}{dt}}$$です。
これがあるおかげで、目標速度に対して余計なブレーキがはたらかず、ブロックをスムーズに動かせます。
このように、P・D制御については自然の物理現象との類似性から動作を直感的に理解できます。
(これも一種のアナロジーですね)
下図は、P・D制御適用時の制御システムシミュレーション波形です。
$${m=2_{[kg]} , K_{p}=1000}$$として$${K_{d}}$$を変えています。
(目標位置$${x^{ref}_{(t)}=1_{[m]}}$$です)

$${K_{d}=0}$$のときは振動し続けます。
これは、仮想摩擦がゼロだからです。
$${K_{d}}$$が大きいほど仮想摩擦によるブレーキが強くかかります。
シミュレーション波形には振動の減衰が早まるという形でそれが表れます。
次に、$${m=2_{[kg]} , K_{d}=10}$$として$${K_{p}}$$を変えたときのシミュレーション結果を示します。
(目標位置$${x^{ref}_{(t)}=1_{[m]}}$$です)

$${K_{p}}$$が大きいほど仮想バネの復元力(=目標位置に引き戻す力)が大きくなります。
力が大きいと動きが速くなり、振動の周波数も高くなります。
これら2つのシミュレーション結果は、高校物理で教わったバネ振動のイメージと一致するはずです。
5. I制御をもっと詳しく
P・D制御については、バネ・粘性摩擦(ダンパとも呼ばれる)という物理要素と対応づけできます。
一方で、I制御については対応づけできる物理要素が見当たりません。
(私の知る範囲では)
これが、P・D制御とI制御の説明を分けた理由です。
自然界に類似の要素が見当たらないことから、I制御は人間の知恵の産物という側面が強く出ている方法と言えそうです。
さて、このI制御の効果とはどんなものでしょうか?
それは外乱が加わったときの定常偏差を抑え込むことです。
下図はP・D制御時に5[s]のタイミングで100[N]の一定値外乱を加えたときのシミュレーション波形です。
($${m=2.0_{[kg]} , K_{p}=1000 , K_{d}=2000 , x^{ref}_{(t)}=1_{[m]}}$$)

外乱が加わる5[s]までは、いい感じに実際位置を目標位置どおりに動かせています。
しかし、外乱が加わる5[s]以降は目標と出力に誤差が出ます。
誤差は徐々に大きくなって、最終的に一定の誤差が出続けます。
(このような誤差を定常偏差と呼びます)
こうなる理由は
「バネ(P制御)に対して一定の力を加えると変形するから」
です。
(変形量はバネの硬さと力の大きさで決まる)
また、バネが伸びきると速度=0になって、D制御は無反応になります。
こんなとき効果を発揮するのがI制御です。
P・D制御にIを追加したP・I・D制御時に、5[s]のタイミングで100[N]の一定値外乱を加えたときのシミュレーション波形が下図です。
($${m=2.0_{[kg]} , K_{p}=1000 , K_{d}=2000 , K_{i}=300 , x^{ref}_{(t)}=1_{[m]}}$$)

I制御を追加後も外乱が加わる5[s]直後では、誤差が大きめに出ます。
しかし、そこから時間が経つと誤差が小さくなっていきます。
これがI制御の効果です。
(I制御ゲインを大きくするほど速く誤差を小さくできますが、振動を伴うこともあるのでゲイン調整にはバランス感覚が必要です)
こうなる理由は、一定値の誤差を時間積分すると時間経過と共に積分結果が大きくなっていくことにあります。

仮に、定常偏差が出たとして、その積分値に基づいて入力を決めれば、いつかはブロック(制御対象)を動かすだけの力を出せるわけです。
そして、誤差が0になれば誤差の時間積分値はそれ以上大きくなりません。
誤差が0になればその後の動きに悪影響を与える心配はありません。
実際には、外乱がかかった瞬間からI制御が誤差を小さくするよう動きます。
このため、I制御適用時に定常偏差は出なくなりますが、大まかな動きのイメージはこのように説明できます。
今回は、一定値外乱を引き合いに出しましたが、ブロックが一定速度で動いているときは粘性摩擦力も一定(=一定値外乱がかかる)になります。
現実的に、摩擦がゼロという状態はほぼあり得ないので
「モノの動きを思いどおりに制御する」
にはI制御が不可欠と言えます。
6. おわりに
この記事では、PID制御の仕組みやはたらきを紹介・解説しました。
今回は抽象的な仕組みや性質の説明に留めましたが、次回はゲイン調整をどうするか?などの具体的な使い方を説明しようと思います。
なお、記事冒頭で触れたフィードフォワード制御については別の機会に紹介・解説しようと思います。
