第5章の2次系近似設計は「\(\zeta\) を選べば終わり」の明快さが魅力でした。 しかし、むだ時間はずっと近似の外に置かれたまま——攻めると突然現れる「崖」の 正体も、時間領域の言葉ではうまく説明できませんでした。 この章では視点を周波数領域に移します。 安全マージンを直接測って、指定して設計する——それがループ整形です。 実機 StampFly に載っている自動チューナも、この流儀で書かれています。
7.1 開ループという見方 — 安全マージンを測る
フィードバック系の安定性は、ループを一周する伝達関数 \(L(s) = C(s)G(s)\)(開ループ)で決まります。閉ループが発振する条件は、 ループ一周の信号が「大きさそのまま・位相がちょうど反転」で戻ってくること—— すなわち \(L(j\omega) = -1\) です。だから設計の関心事は、 \(L(j\omega)\) が \(-1\) にどれだけ近づくかに尽きます。 距離の測り方が2つあります:
- 位相余裕(PM): ループゲインが1になる周波数 (交差周波数 \(\omega_c\))で、位相が \(-180°\) まで あと何度残っているか。「発振まであと何度か」という安全マージン。
- ゲイン余裕(GM): 位相が \(-180°\) に達する周波数で、 ゲインが1まであと何倍(dB)余裕があるか。
経験則の目安は位相余裕 60° 以上。ドローンでもこの目安は 経験上有効です。そして交差周波数 \(\omega_c\) は応答の速さそのもの—— 高いほど機敏ですが、後で見るようにむだ時間の「家賃」が高くつく。 性能と安定性のトレードオフを、\(\omega_c\) と PM という2つの数字で 直接指定するのがループ整形の設計です。
7.2 位相予算の家計簿
交差周波数での位相を、収支表として書いてみます。持ち点は \(180°\)。 そこから各要素が位相を「支出」していき、残った分が位相余裕です。 第4〜5章で同定したロール・レートループなら:
家計簿の肝はむだ時間の項だけが \(\omega_c\) に比例することです。 モータ遅れの \(\tan^{-1}\) は 90° で頭打ちになりますが、むだ時間の支出は 交差を上げるほど際限なく増える——たとえば \(L=12\) ms なら、 \(\omega_c=25\) rad/s で 17°、76 rad/s なら 52°。 「交差周波数はプラントの帯域(とむだ時間)で決まる」という 設計則の正体はこの一行です。
7.3 触って確かめる — ボード線図の上でゲインを動かす
下の教材は、同定済みロール・レートプラントに PID を掛けた開ループ \(L(j\omega)\) のボード線図(ゲインと位相を周波数で並べた図)です。 初期値は実機の飛行実績ゲイン。\(K_p\) を上げると交差が右へ動いて PM が減る、\(T_d\) がリードの山で位相を返す、むだ時間 \(L\) が 高周波の位相をまっすぐ食い落とす——全部この1枚で見えます。 読み出しには位相予算の内訳も出ます。
条件: プラントは第4〜5章の同定値(\(I_{xx}=9.16\times10^{-6}\)、 \(\tau_m=20\) ms)。制御器は実装の形(PI-D・\(\eta=0.125\))。 上段=|L| [dB]、下段=∠L [°]。縦の点線が交差周波数、−180° 線との差が位相余裕。
7.4 第5章の「崖」の種明かし
第5章 5.4 節で、外側ループを攻めると突然発散する「崖」を見ました。 いまなら一行で説明できます。ゲインを上げる=交差周波数を上げる。 むだ時間の支出は交差に比例して増える。だからどこかで位相余裕が尽きる—— そして PM が 0° を切った瞬間が崖です。理想(\(L=0\))で崖が現れなかったのは、 支出が頭打ちのモータ遅れだけだったから。1/3 則とは、 「むだ時間の家賃が安い低層階に住む」という知恵だったわけです。 上の教材で \(L=12\) ms にして \(K_p\) を上げ、PM が溶けて 0 に触れる瞬間を 確かめてください。
7.5 実機の自動チューナを読む — 設計則はコードにある
StampFly には、この章の内容がそのままコードになったオンボード自動チューナが
載っています(CLI から autotune roll 一発)。中身は:
- 同定: 飛行中にステップドサイン(周波数を階段状に変えた 正弦波)で機体を揺すり、レートプラント \(b\,e^{-Ls}/(s(Ts+1))\) の 3パラメータを当てはめる。
- 設計: 仕様は交差周波数と位相余裕で指定。 既定は PM = 60°、\(\omega_c\) = 25 rad/s(ロール・ピッチ)/ 18 rad/s(ヨー——操縦権限が小さく同定の SN 比も低いため保守的に)。 \(T_i = 10/\omega_c\)(積分の支出を交差の1桁下に置く——第5章の位相コストの 話と同じ流儀)、\(T_d\) は位相条件を二分法で解き、\(K_p\) は振幅条件 \(|L(j\omega_c)|=1\) から決める。
- 検収: 設計後に数値検証し、PM 不足・ゲイン余裕不足・ 物理範囲外なら理由コードつきで棄却する。
仕様が「ゲインの値」ではなく「余裕」で書かれていることに注目してください。 モデルが多少ずれても、余裕という安全在庫で受け止める—— これがループ整形の思想です。
7.6 60° 設計 vs 実飛行ゲイン — 頑健さの値段、速さの値段
では、実際に飛んでいるゲイン(手動の試行錯誤で磨かれた値)は どんな余裕を持っているのでしょうか。同定モデルで勘定すると:
| むだ時間 L | 交差 \(\omega_c\) | 位相余裕 | ゲイン余裕 |
|---|---|---|---|
| 0 ms | 76 rad/s | 67.8° | — |
| 5 ms | 76 rad/s | 46.0° | 11.5 dB |
| 12 ms | 76 rad/s | 15.4° | 2.8 dB |
興味深いことに、実飛行ゲインはむだ時間を除いたモデル上でほぼ 60°を 満たしています。問題は「レートループが実際に見るむだ時間はいくつか」—— 12 ms(acro 飛行同定の値)が全部ループ内にいるなら PM 15° の綱渡り、 一部がループ外なら余裕はもっとある。実はこの観点での検証はまだ 足りていません。下の実験で、両者の性格の違いを見てください。
条件: ロールレート指令 +3 rad/s のステップ。赤=実飛行ゲイン、 青=自動チューナ既定仕様の設計解(\(\omega_c\)=25 rad/s・PM=60°・L=12ms 前提で 本文のアルゴリズムを解いた \(K_p=2.45\times10^{-4}, T_i=0.4, T_d=0.014\))。 むだ時間スライダーは「モデルのむだ時間が想定からずれたら」の実験。
- 実飛行ゲインは速いが、むだ時間に脆い: L を 0→15 ms へ 動かすと行き過ぎ 6% → 84%。想定が当たれば俊敏、外れれば振動的。
- 60° 設計は遅いが、崩れない: 同じ範囲で 10〜16% のまま。 余裕という安全在庫が、モデルのずれを吸収している。
まとめ
- ループ整形は \(L(j\omega)=C\,G\) が \(-1\) にどれだけ近いかを測り、 交差周波数(速さ)と位相余裕(安全在庫)で直接設計する流儀。 目安は PM 60° 以上、\(\omega_c\) はプラント帯域とのトレードオフ。
- 位相は家計簿で読める: 積分器 90°、モータ \(\tan^{-1}(\tau_m\omega)\)、 そしてむだ時間だけが \(\omega_c\) に比例して支出を増やす。 第5章の崖 = PM が尽きた場所。1/3 則 = 家賃の安い低層階。
- 実機の自動チューナは「同定 → \(\omega_c\)/PM 指定の設計 → 検収・棄却」を オンボードで実装(既定 60°、25/18 rad/s、\(T_i=10/\omega_c\))。
- 実飛行ゲインはむだ時間抜きモデルで 68°、L=12ms なら 15°——速いが脆い。 60° 設計は遅いが L のずれに崩れない。そして実機では手動値が まだ勝っている——理論と実機の溝は、これからの宿題。
ここまでで、姿勢と高度の制御・その設計法・実装の作法が揃いました。 次章(第8章 高度の制御)は執筆済みです——まだの方はそちらへ。 その先は、制御が信じている「測定値」の正体——センサと状態推定の世界です。
本章の対話記録: notes/qa_log.md の Q6-1〜Q6-3。実機実装の出典: stampfly_ecosystem firmware/vehicle(sf_autotune/autotune.cpp・api_task.cpp の autotune コマンド既定値)。余裕勘定・設計解・閉ループ比較は同定モデルによる 本章の計算(プラント: \(b\,e^{-Ls}/(s(Ts+1))\)、第4〜5章の実測値)。