第12章
シャワーに戻ろう
なぜ振動したのか、そしてどれだけ限界に近いのか?
新しい目で見るシャワー
ジューン: ドローンのPIDをシャワーにつけてみた(同じきびきびした感じで、ノブの単位に合わせて)。そしたら熱い、冷たい、熱い…って振れた。第0章のミカとそっくり。ドローンはそんなこと一度もしなかったのに!
テオ: ドローンには大きな遅れがない。シャワーには配管の2.5秒がある。遅れが何をするのか、そろそろちゃんと解き明かそう。
シャワーには遅い部分が2つある。配管、これは純粋な2.5秒の遅れ。そしてなまし(一次遅れ)、これはシャワーヘッドと配管の壁が温まっていくことで、第3章の時定数 sを持つ(1秒後には、新しい温度までの差の63%を埋める)。
まず、第0章の「普通の手」について白状すると、お湯の具合がどれだけずれているかに比例した速さでノブを回していた。ノブの速さはで、1秒あたり1°Cにつきだけ回る。偏差に比例した速さということは、ノブの位置は過去の偏差の積み重ね。つまりこれはIコントローラーで、だ。
ミカ: 待って、じゃあ第0章の私はPIDコントローラーだったの? まあ、Iコントローラーだけど。張り切りすぎのやつ。
遅れとは揺れの遅れ
テオ: 遅れって、ただ全部を遅くするだけだと思うんだけど。何かを不安定にできるはずがないよ。
まず配管の純粋なむだ時間だけを取り出そう。配管の入口にサイン波を入れ、波形がなめらかにならずにシャワーヘッドまで届くと考える。出口の波は同じ形のまま、2.5秒遅れる。その遅れは1周期と比べてどれくらい?
テオ: 待って。5秒周期の揺れだと、ノブが冷たくしてと言ったまさにそのときに熱いお湯が届く。それって遅いんじゃない。逆だよ。
配管の遅れは2.5秒のまま変わらないが、その位相遅れは波がどれだけ速く揺れるかで決まる。遅れの角度を、遅れ時間をと呼ぼう。1回の揺れに秒かかるなら(ここでのは温度ではなく時間)、角速度はラジアン毎秒だ。遅れが正なら、出力は入力の後を追う。エンジニアは遅れを負の角度で書くので、下のグラフは下向きに進む。
揺れ1回分は、第5章の回転子のちょうど1回転:360°、つまり2πラジアン。だから大事なのは、遅れが揺れ1回の何割にあたるか、つまりだ。
5秒の揺れにとって、2.5秒は揺れの半分:180°だ。この純粋な遅れのモデルでは、出力の山がちょうど入力の谷に重なる。シャワーのなましは速い揺れを小さくもする。それは次に加えよう。
ミカ: つまり同じ2.5秒でも、のんびりした揺れにはちょっとした押し、速い揺れにはまるごとひっくり返し。配管は変わらない。変わるのは揺れのほうなんだ!
シャワーを1揺れずつ測る
次は配管の遅れになましを加えよう。シャワーヘッドと配管の壁は温まるのに時間がかかるので、シャワー全体はノブの変化を遅らせ、しかもならす。計画はこうだ:ノブをある速さで揺らし、リズムが安定するのを待ってから、2つの数を測る:
- ゲイン(コントローラーのゲインと同じ言葉:出てきた大きさ ÷ 入れた大きさ):温度の揺れが、こちらが求めた混合湯の揺れに比べてどれくらい大きいか。
- 位相: どれだけ後れているかを角度で表したもの。揺れ1回に占める割合 × 360°。
各測定は2つのプロットに点を落とす。遅いのと速いのを合わせて、少なくとも5つの速さで測ろう。
なましは速い揺れを小さくし、配管は位相遅れを足し続ける。揺れの速さに対するこのゲインと位相の曲線がボード線図だ。2つ合わせたものがシャワーの周波数応答:それぞれの揺れの速さをどう扱うか。ここでの入力は混合湯の温度なので、遅い揺れのゲインは1。ノブの開き具合を入力にすれば、ゲインは45倍になる。式から周波数応答を求めるにはとする。第11章の境目を見つけたのと同じ手だ。(これがうまくいくのは、シャワーだけなら安定だから。揺れが一定のリズムに落ち着いて、それを測れるんだ。)
なましは回転子に何をする?
テオ: また第4章の手だ。答えは同じ回転子で、大きさと角度が違うだけ、と当ててみる。
回転子をなましのルールに入れると、矢印はを満たさないといけない。第7章の矢印だ:の長さはで、角度だけ上を向いている。それで割ると、その長さだけ縮み、その角度だけ戻る。遅い揺れはほとんど気づかない。速い揺れはつぶされて、4分の1回転に向かって遅れていくが、決してそれを超えない。
ジューン: 見つけた! 0.95 rad/sあたりで、シャワーは単独で揺れを上下逆さまにする。この速さを覚えておいて。
崖までどれくらい?
さあループを閉じよう:手 → ノブ → 配管 → 肌 → 手。揺れを1周ずっと追いかける。第0章の手の場合、ループを1周する旅はだ(ループを表す小さな丸。はもう遅れに使っているから):
揺れの積み重ね
ミカ: 私の手は偏差を積み重ねる。積み重ねると、揺れはどうなるの?
コサインの下の面積はサインで、揺れ4分の1だけ後ろにある:どの速さでも90°の遅れ。しかも積み重ねは遅い揺れほど大きい。こぶ1つが打ち消されるまでに長く続くからだ:大きさはのように変わる。第5章では、速度は位置の倍だった。積み重ねるのはその逆:で割る。それがループの中のだ。
フィードバックは引き算をする(偏差 = 目標 − 温度)。これは×(−1)、第5章の半回転なので、波は1回ひっくり返る。ループを1周する旅がさらにちょうど180°遅らせると、2回のひっくり返しが打ち消し合って、どの修正も揺れとぴったり同じタイミングで届く。公園のブランコをちょうどいい瞬間に押すようなものだ。ループが波を同じ大きさで返せば(ゲイン1)、揺れは自分で続く。1より大きければ、大きくなっていく。これはまた第10章ので、今度は直線の上だ。ひっくり返って同じ大きさで戻ってくる1周は、になる。
ジューン: この単純なシャワーのループでは、位相が−180°を通過する揺れの速さが1つある。位相のグラフでその速さを見つけ、同じ速さでのループゲインをゲインのグラフで読み取ろう。それは1より下か、上か?
合計が180°を超えるまで動かしてみよう。0.45と0.46 rad/sの間だ。ちょうど交わる約0.457 rad/sでは、揺れは0.72倍の大きさで戻ってくる。だから手は崖っぷちに届くまでに、約1 ÷ 0.72 ≈ 1.4倍強くできる。
新しい言葉
- ゲイン余裕
- −180°の速さでループゲインが1に達するまで、コントローラーのゲインを何倍にできるか。1未満なら崖の向こうだ。
- 位相余裕
- ループゲインがちょうど1になる速さで、−180°に届くまでにあとどれだけ余分な遅れがあってよいか。大きいほど安全。よくある目標は45°–60°(下の寄り道でその理由がわかる)。
位相余裕は姿を変えた減衰
ジューン: なんで45°から60°なの? 誰が決めたの?
第7章の単純なループでは、位相余裕と減衰比は一緒に動く。約43°がζ = 0.4(オーバーシュート25%)、52°がζ = 0.5(16%)、59°がζ = 0.6(10%未満)に対応する。これらの組は、第7章のいちばん単純なループでは正確だ。つまり45°–60°の余裕はζ ≈ 0.4–0.6ということで、第7章の0.7–1より跳ねやすい。それでもよく使われる目標なのは、余裕がオーバーシュートの約束だけでなく、崖からの安全な距離(モデルがどれだけ間違っていてもいいか)でもあるからだ。ループに配管があるときは、正確な法則ではなく、よい目安になる。
私たちのシャワーでは、の位相が−180°になるのは rad/s、揺れの周期にして約13.8 s。普通の手()のゲイン余裕はわずか約1.4、位相余裕は約22°(ループゲインが1になる0.34 rad/sで、位相は−158°)。崖っぷちすれすれだ! 強い手はゲインを2倍にする:1.4 ÷ 2 = 0.7、崖の向こう。だから決して落ち着かなかったんだ。
まず予想しよう! 配管が2倍の長さだったら(5秒の遅れ)どうなる? 安定に保てる手のゲインの最大値は?
ミカ: 配管が2倍なら、手はだいたい半分。しかも限界での揺れも遅くなる:24秒近く!
テオ: わかった、前言撤回。遅れは物事を遅くするだけじゃない。位相余裕を食いつぶす。そして位相余裕は、僕らと振動の間にある唯一のものなんだ。
君の第0章のシャワーを解説しよう
これが第0章での君自身の記録だ。もし振動が限界に近かったなら、その周期はループが予測する値に近いはずだ。ここでひとつひねりがある:人間はみんな同じ種類のコントローラーではない。
速さの手(ずれていると感じる間、ノブを回し続ける)はIコントローラーだ。その限界は13.8 sの揺れ。位置の手(「熱すぎる、ノブはここ」)はPコントローラーのように働く:。位置の手には積み重ねがないので、自前の90°もない。配管となましだけで180°に届かないといけないので、それはもっと速い揺れ、 rad/s(ジューンの上下逆さまの速さ)で起きる。つまり6.6 sの揺れで、約0.031(ノブ/°C)を超えるどんなでもそうなる。たいていの人はその中間だ。(普通のロボットの手は13.8 sより少し遅い約15.5 sで揺れる。限界のすぐ内側にいるからだ。強い手の揺れ、約11.6 sは、ノブが端にぶつかることでつぶされている。)
ミカ: じゃあ、ノブをある位置までぐいっと回したとき、私は位置の手だったんだ。6秒の揺れは配管となましのせいで、不器用な指のせいじゃなかった。
ロボットシャワーを設計しよう
さあ、自分たちの手を超えよう。ロボットはPIを使う:Pは今の温度の偏差に反応し、Iは積み重なった偏差を覚えている。2つ合わせると、ノブはすぐに反応しつつ、Iがずっと続くちょうどいい位置を見つけてくれる。
ジューン: 簡単。ドローンのときみたいに大きなゲインを使えばいい。速くてきびきび。もう設定してあるよ。見てて!
ジューン: …ハンチングしてる。熱い–冷たい–熱い、6秒ごとに。第0章の位置の手みたいに。大きなゲインで、ゲイン1の速さが−180°の速さを追い越しちゃった。位相余裕がまったくない。
紙の上では10秒、シャワーでは6秒
ジューンのゲインは毎秒で、ちょうど。PIの零点がなましの極の上にのって打ち消し、が残る。紙の上では、このループはで−180°に達し、10秒の揺れになる。でもジューンのループは限界をはるかに越えているので、ノブは端から端までたたきつけられ、そのたたきつける揺れは約6.3秒ごとに来る:位置の手の6.6秒に近い。
テオ: ドローンが大きなゲインに耐えられたのは、遅れがほとんどなかったから。ここでロバストとはやさしいこと:遅れのために余裕を残しておく。僕のやさしいゲイン、だいたいとを試してみて。
Pは今に、Iは積み重ねに反応する。今を少し足すとノブが少し早く動き、位相が戻ってくる:位相進みだ。テオのゲインでは、元の−180°の速さで約37°。
余裕のあるPIなら、約9.4秒で快適になる。大きな揺れを繰り返すこともない。普通の手(1分の大半を揺れに費やしてから落ち着いた)やほとんどの人間より速い。でも物理には勝てない。まだ届いていないお湯には何も反応できないからね。長い遅れにはエンジニアの技がある。スミス予測器といって、配管の小さなシミュレーションをコントローラーの中で走らせるんだ。それはまた別のノートの話。
本当の教訓はロバスト性だ。シャワーのモデルは決して完璧じゃない。配管はもっと長いかもしれないし、ヒーターはもっと弱いかもしれない。余裕は、モデルがどれだけ間違っていてもいいかを、実感できる数字で教えてくれる。位相余裕(ラジアン)をゲイン1の速さで割ったものが遅れ余裕:ループが耐えられる余分な配管の秒数だ。
テオ: 普通の手が耐えられる余分な配管は約1.1秒だけ。僕のやさしいロボットは3.5秒耐える。ロバストってそういうことなんだ。
配管を短くする? ヒーターを速くする?
ミカ: 速いヒーターを買えば済むんじゃない?
なましの時間を半分(τ = 0.5 s)にしても、速さの手の限界は1.12から1.21%/(°C·s)にしか上がらない。配管を半分(1.25 s)にすると2.06まで上がる。位置の手にとっては、速いヒーターはむしろ悪くなる:限界が0.031から0.025(ノブ/°C)に下がる。なましがこっそり速い揺れを小さくしていたからだ。敵は遅れで、のろさじゃない。
ロボットは実際どうやってノブを回す?
ロボットのコードはPIをノブの速度として書く。偏差が残っている間はIがノブを動かし続け、Pは偏差の変化に反応する。起動時には、Pが今の偏差に基づいてノブをすぐ動かす。これは位置のルールと同じだが、ノブが端まで来たときは別だ。
ここまででわかったこと
わかったこと
- 遅れは揺れをだけ遅らせる。遅い揺れにはゼロ、速い揺れにはたくさん。
- 積み重ね(I)はどの揺れも90°遅らせる。なましは最大90°まで。配管はで、限りなく。
- 正弦波を入れてゲインと位相を測ると周波数応答が得られる。プロットするとボード線図で、これはただのだ。
- この単純なシャワーのループでは、ループがゲイン1で−180°の位相に達すると自励振動が始まる。ゲインが大きいほど揺れは限界が介入するまで成長する。
- ゲイン余裕と位相余裕はその崖までの距離を測る。遅れが長いほど余裕は減るので、制御はおだやかにする必要がある。
- 第0章の揺れは、余裕が足りないコントローラー(つまり私たち)だった。
これで道具は全部そろった。フィードバック、PID、極、余裕。いよいよ実戦だ。風、荷物の落下、そしてノイズだらけのセンサー。ドローンを2 mに保てるか?