第10章

伝達関数、極、零点

1つの分数から、系の性格が全部読み取れる?

第10章:伝達関数、極、零点 ↗

システムのレシピ

ジューン: ドローンを1 mでホバリングさせ、4.9 Nのベース推力で重力と釣り合わせる。そこからの要求変化と実際の高さ変化の両方を測る。新しい要求の直前では、どちらの変化もゼロ。ステップの例では、要求がt=0t=0で2 mに跳ね上がるので、ドローンがまだ1 mにいるときに変化は1 mになる。

テオ: よかった。前の章では−h(0)-h(0)の部分を捨てたせいで、式がうそをついたからね。ホバリングから測れば、その初期値は本当にゼロだ。だから今回は正々堂々と消える。

ΔH(s)=Kpms2+cs+Kp⏟G(s)⋅ΔR(s)\Delta\out{H}(s) = \underbrace{\frac{\eff{K_p}}{m s^2 + c s + \eff{K_p}}}_{G(s)} \cdot \Delta\sp{R}(s)

ΔR(s)\Delta\sp{R}(s)は1 mからの要求変化のラプラス変換、ΔH(s)\Delta\out{H}(s)は1 mからの実際の変化のラプラス変換。G(s)G(s)はドローンとコントローラーで決まる。これが伝達関数:出力変化を入力変化で割ったもので、どちらの変化もゼロから始まる。

グラフは地面からの高さを示している。式が予測する変化に初期高度1 mを足すと、グラフの青い高さになる。

ミカ: ジューンの言うとおりだった。この分数こそがドローンそのもの。いわばドローンのレシピだ。どんな材料を入れても、何が出てくるか教えてくれる!

同じドローンに3通りの入力を試してみよう。レシピは変わらない、変わるのはΔR(s)\Delta\sp{R}(s)だけ。

第10章:伝達関数、極、零点 ↗

新しい言葉

伝達関数 G(s)G(s)
同じ静止状態から始めて、変換後の出力変化 ÷ 変換後の入力変化。この線形なドローンでは、ssの多項式の分数になる。
静止状態から(初期値ゼロ)
t=0t = 0で、どの変化もその速さもゼロ。ホバリングから測るときがそうだ。すると第9章の−h(0)-h(0)のような初期値の項もゼロになり、G(s)G(s)だけですべてが決まる。

極:システムが住みたがる場所

G(s)G(s)が爆発するのはどこ? 分母がゼロになるところだ。その点が極で、×で描く。このドローンには2つあって、第7章で見た2つの自然なeste^{st}の動きに1つずつ対応している。

第8章では、eate^{at}の変換がs=as = aで叫んだ。これを逆から読もう。GGが叫ぶところには、必ず動きepte^{pt}が隠れている。

ジューン: じゃあ、極って第7章のモードが地図の上に座ってるってこと!

では逆に考えてみよう。ゲインを選んで極を求めるのではなく、極をドラッグして、どんなドローンになるかを見るんだ。それには2つ目のノブKd\eff{K_d}が必要になる。速さに逆らう押しで、第11章できちんと出会う。これが空気抵抗ccに加わって、2つの根はppとその鏡像の双子pˉ\bar pになる(上の棒は虚部の符号を反転させる。第6章の双子と同じだ):

ms2+(c+Kd) s+Kp=0⟹s=p, pˉ(極)\begin{aligned} & m s^2 + (c + \eff{K_d})\,s + \eff{K_p} = 0 \\ \Longrightarrow\quad & s = p,\ \bar p \qquad \text{(極)} \end{aligned}

第10章:伝達関数、極、零点 ↗

まず予想しよう! 極をs平面の右半分にドラッグしたら、ドローンはどうなる?

第10章:伝達関数、極、零点 ↗

地図の読み方

いろいろ動かしてみよう。いくつかのルールが見えてくる。どれも変装した昔なじみだ:

  • 左半分 = 落ち着く、右半分 = 爆発する。 実部σ\sigmaは、eσte^{\sigma t}が縮む(または大きくなる)速さだ。
  • 左に行くほど速い。 整定にかかるのは約4/∣σ∣4/|\sigma|秒(縦の破線)。第7章の「時定数4つ分」だ。e−∣σ∣te^{-|\sigma| t}はln⁡50/∣σ∣≈3.9/∣σ∣\ln 50/|\sigma| \approx 3.9/|\sigma|秒で2%を下回るからね。
  • 上に行くほど揺れる。 高さω\omegaは第7章の減衰固有振動数だから、1回の揺れには2π/ω2\pi/\omega秒かかる。
  • 角度がオーバーシュートを決める。 負の実軸からの角度θ\thetaでζ=cos⁡θ\zeta = \cos\theta(第7章の円)が決まり、オーバーシュートはe−π∣σ∣/ωe^{-\pi|\sigma|/\omega}(破線の放射線)。実軸の近くならほとんどオーバーシュートせず、縦軸の近くなら大きくオーバーシュートする。(極が2つで零点がなく、静止状態から始めたときに正確。零点があると変わる。次の節では、零点1つで12%が15%になる。)

ミカ: 極を高いところに1つ、低いところに1つ置きたかっただけなのに。させてくれない!下の極が上の極をずっと真似してくる。

テオ: 第6章の双子の回転子を覚えている?本物のドローンには本物の運動があるから、回転するeste^{st}にはそれぞれ、虚部を打ち消す鏡像の双子が必要なんだ。複素極は必ず鏡像のペアで現れる。

まず予想しよう! σ=−2\sigma = -2のまま、極を±4i\pm 4iから±8i\pm 8iへまっすぐ上に動かす。何が変わる?

ジューン: 答えたら遊び場が動いたよ。ゴーストのペアが±4i\pm 4i、新しいペアが±8i\pm 8i。包絡線は同じで、揺れは2倍、最初の揺れはずっと大きい。

ミカ: もし2つの極が両方とも実軸上、−0.2-0.2と−5-5にあったら?

ジューン: 速いほうは1秒で消える。親分は遅いほうだね。

第10章:伝達関数、極、零点 ↗

新しい言葉

極
伝達関数が爆発するssの値。極ppの1つ1つが、系の動きepte^{pt}の1つになる。
鏡像のペア p, pˉp,\ \bar p
実部が同じで、虚部の符号が逆の2つの極(共役複素数)。実在の系の複素極は、必ずこの形で現れる。
代表極
縦軸にいちばん近い極。その遅い動きがほかより長く残るので、ふつうは整定時間を決める。ただし、零点がほぼ真上にあるときは別だ(第11章にその例がある)。

零点:ちょっと見てみよう

分子もゼロになりうる。その点が零点で、○で描く。ふつう零点は、各極の動きが出力にどれだけ現れるかを変える。零点がちょうど極の上にあると、共通因数が約分されて、その極はこの入力から出力へのレシピから消える。それでも、極は系の中に残っている。突風のような別のやり方でドローンを押せば、その動きは戻ってくる。隠れた極が右側にあると、これはとても大事になる。

ここに、極が−2±3i-2 \pm 3iに固定されていて、零点を1つ動かせる系がある。(遊び場のKd\eff{K_d}はドローンの速さに逆らって押すので、そのレシピには零点がない。第11章のように偏差の速さに逆らって押すと、零点が−Kp/Kd-\eff{K_p}/\eff{K_d}に現れる。この極なら−6.5-6.5で、オーバーシュートは12%ではなく15%になる。)

第10章:伝達関数、極、零点 ↗

ジューン: 極は同じなのに、零点が原点に近づくと、応答はずっと速く跳ね上がって、オーバーシュートも大きくなる!

テオ: 極が同じなら、動きも同じ。だから零点が新しい動きを足すことはできない。もう持っている何かを、少し足しているはずだ。

第10章:伝達関数、極、零点 ↗

ssを掛けると傾きになる(第9章)。だから因子(1+s/∣z∣)(1 + s/|z|)は、傾きの1/∣z∣1/|z|倍を足すわけだ。原点近くの零点が入力の変化に系を強く反応させるのはそのためだ。極は動いていないのに、オーバーシュートが大きくなる。遠くにあれば、零点はほとんど効かない。零点については今のところこれで十分だ。

新しい言葉

零点
伝達関数がゼロになるssの値。系が通さない動きezte^{zt}のこと。

もっと左にあるほど、いつも良いのか?

ジューン: 簡単だよ。極をずっと左にドラッグすればいい。一瞬で落ち着く。最高のドローンだ!

テオ: でも、それにはどれだけの推力が必要だろう? これまでは、モーターが数学の望むだけ強く押せるふりをしてきた。

そろそろ正直になろう。私たちのモーターが押せるのは0 Nから20 Nの間だ(ドローンの重さの約4倍)。下では、極が45°の線に沿って左へ動く(ζ≈0.71\zeta \approx 0.71、第7章のちょうどいいところ)。破線の曲線は、空想上の無制限モーターを使った数学。実線は本物のモーターだ。

第10章:伝達関数、極、零点 ↗

第10章:伝達関数、極、零点 ↗

−3.9±3.9i-3.9 \pm 3.9iあたりを過ぎると、数学は20 Nより大きな推力を求める。オレンジの推力は限界にぶつかって平らになり、−6±6i-6 \pm 6iあたりを過ぎると、数学はドローンを下へ引っ張ろうとさえする。プロペラにはそれができない。本物のドローンは、きれいな線形予測に従わなくなる。整定時間は−6.5±6.5i-6.5 \pm 6.5i付近の約0.7 sで良くならなくなり、そこから左ではむしろ悪くなって、オーバーシュートも増える。

ジューン: −8±8i-8 \pm 8iまで思いっきり動かしてみた。数学では0.53 s。本物のドローンは0.77 s。−6.5-6.5のときより遅い!

ミカ: しかもオーバーシュートは4%から16%に増えた。あの余分な推力は、最初から手に入らなかったんだ。

ジューン: つまり「もっと左」が良いのは、モーターの力が尽きるまで。極を置くのは競争じゃなくて、トレードオフなんだ。

新しい言葉

最初の一押し
ステップの最初の瞬間、ドローンが動く前に求められる推力:mg+Kp Δrmg + \eff{K_p}\,\Delta r。
推力の予算
あるステップに対して、モーターがまかなえる極の位置。0を中心とする円になる。
モーター限界(飽和)
数学が何を求めても、本物の推力は0〜20 Nで頭打ちになる。

紙の上でループを閉じる

ジューン: 第1章では、ループを箱と矢印で描いたよね。sの世界では、どの箱もただ掛け算するだけ。箱に代数をやってもらえないかな?

それぞれの箱にレシピを与えよう。コントローラーはC(s)C(s)で、今のところは単にKp\eff{K_p}。ドローンだけなら、推力の変化が入って高さの変化が出るP(s)=1ms2+csP(s) = \frac{1}{ms^2 + cs}だ。このPは第1章の言葉、制御対象(プラント)のPで、P制御のPではない。上のレシピと同じように、ドローンの式からそのまま出てくる。

ジューン: 簡単だよ。要求はコントローラーを通って、それからドローンへ。線に沿って掛け算すればいい!

ΔH=?C P ΔR=Kpms2+cs ΔR\Delta\out{H} \overset{?}{=} C\,P\,\Delta\sp{R} = \frac{\eff{K_p}}{ms^2 + cs}\,\Delta\sp{R}

テオ: 極が0と−2? 揺れはまったくないし、0の極はいつまでも落ち着かない。それは第1章の開ループだよ。ドローンに指示するだけで、決して見ない。コントローラーが見るのは要求じゃないんだ、ジューン。見ているのは偏差だよ。

ドローンから戻ってくる矢印こそ、フィードバックのすべてだ。コントローラーはΔR−ΔH\Delta\sp{R} - \Delta\out{H}に対して動くので、出力が両辺に現れる。それを集めて、割ろう:

ΔH=C P (ΔR−ΔH)ΔH (1+C P)=C P ΔRΔH=C P1+C P ΔR\begin{aligned} \Delta\out{H} &= C\,P\,\big(\Delta\sp{R} - \Delta\out{H}\big) \\ \Delta\out{H}\,\big(1 + C\,P\big) &= C\,P\,\Delta\sp{R} \\ \Delta\out{H} &= \frac{C\,P}{1 + C\,P}\,\Delta\sp{R} \end{aligned}

C=KpC = \eff{K_p}とP=1/(ms2+cs)P = 1/(ms^2+cs)を入れて、分子と分母にms2+csms^2 + csを掛ける:

C P1+C P=Kp/(ms2+cs)1+Kp/(ms2+cs)=Kpms2+cs+Kp\frac{C\,P}{1 + C\,P} = \frac{\eff{K_p}/(ms^2+cs)}{1 + \eff{K_p}/(ms^2+cs)} = \frac{\eff{K_p}}{ms^2 + cs + \eff{K_p}}

ミカ: これ、この章の最初のレシピだ! 2回手に入れたんだね。1回はドローンの式から、もう1回は箱から。

つまりループの極は、分母1+C(s) P(s)1 + C(s)\,P(s)がゼロになるところ。それはC P=−1C\,P = -1と同じことだ。C PC\,Pを、ループの1周と読もう(教科書では一巡伝達関数と呼ぶ)。コントローラー、そしてドローンが信号にすることだ。極では、1周した信号が同じ大きさで、ひっくり返って戻ってくる。そして偏差のマイナス記号がそれをもう一度ひっくり返す。だから要求がまったくなくても、信号は自分で続いていく。

1+C(s) P(s)=0⟺C(s) P(s)=−11 + C(s)\,P(s) = 0 \quad\Longleftrightarrow\quad C(s)\,P(s) = -1

一定の揺れs=iωs = i\omegaで試してみよう。1周すると、揺れの矢印はC(iω) P(iω)C(i\omega)\,P(i\omega)になる。短くなったり長くなったりして、しかも戻される。ウィジェットは、どの揺れの速さについてもその矢印を描き、矢印が届かなければならない点−1も描く。

第10章:伝達関数、極、零点 ↗

テオ: Kp\eff{K_p}をどれだけ大きくしても、曲線は−1のほうへ曲がるけど、決して触れない。いちばん近づくのは、だいたいドローン自身の揺れの速さのところだ。

理由はこうだ。空気抵抗は1周を最大90°戻し、質量がさらに最大90°戻す。でも2つ合わせて180°に届くのは、無限に速い揺れのときだけ。だからP制御だけでは、このドローンを決して不安定にできない。Kp\eff{K_p}を大きくしても、1周が−1の近くを通るようになるだけ。そして近いほど減衰は小さい。第2章の「KpK_pを増やすと揺れも増える」が、今度は絵になった。

第10章:伝達関数、極、零点 ↗

新しい言葉

閉ループ
偏差に対して動くコントローラー。出力が自分の入力に戻ってくる:ΔH=C P1+C P ΔR\Delta H = \frac{C\,P}{1 + C\,P}\,\Delta R。
ループゲイン C(s) P(s)C(s)\,P(s)
ループを1周すると、信号に何が起こるか。閉ループの極は、これが−1になるところにある。

ここまででわかったこと

わかったこと

  • そう、分数1つで足りる。伝達関数 G(s)G(s) = sの世界での出力変化 ÷ 入力変化(静止状態から)。これは系のレシピΔH=G⋅ΔR\Delta\out{H} = G\cdot\Delta\sp{R}で、ドローンの式からそのまま出てくる。
  • 極(×)はG(s)G(s)が爆発する場所。系をつくっているepte^{pt}のモードだ。
  • 左半分 = 安定、右半分 = 爆発。左ほど速い(約4/∣σ∣4/|\sigma| sで落ち着く。目安だ)、上ほど揺れる(1回の揺れ = 2π/ω2\pi/\omega s)、角度 = 減衰ζ\zeta = オーバーシュートe−π∣σ∣/ωe^{-\pi|\sigma|/\omega}。軸にいちばん近い極が親分(代表極)。
  • 複素極はいつも鏡像のペアで現れる。
  • 零点(○)は、各モードがどれだけ出るかを変える。原点の近くではキックを加える。傾きの1/∣z∣1/|z|倍だ。
  • 紙の上でループを閉じると、レシピはC P1+C P\frac{C\,P}{1 + C\,P}。極は、ループ1周C PC\,Pが−1になるところにある。
  • 1 mのステップでの最初の一押しはmg+m∣p∣2mg + m|p|^2。だから遠くの極には、モーターにない推力が必要になる。

テオ:「極はきれいだね。でも待って。この章ではずっと、ドローンにホバリング推力をただで渡してずるをしていた。それがなければ、重力でまだ垂れ下がる。s平面のほうは問題ない。直すべきはコントローラーだ。」

第10章:伝達関数、極、零点 ↗