第13章

ドローンチャレンジ

君はドローンをどんな状況でも2mに保てるか?

第13章:ドローンチャレンジ ↗

ミッションブリーフィング

ジューン: よし。本物のドローン、本物の配達だ。荷物を載せて離陸し、突風を耐え、荷物を落とし、その間ずっと2mを維持する。20秒間。

ミカ: そして飛行中は何も触ってはいけないの?

テオ: それが肝心なところだ。コントローラーがひとりでやるしかない。僕たちは3つの数字を選ぶだけ。いや、4つだ。フィルターもある。

ミッションを秒ごとに見ていこう:

  • 0秒: 0.2kgの荷物(合計0.7kg)を載せて地面から離陸。
  • 6~9秒: 下向きの突風が1.5Nで押す。
  • 12秒: 荷物が落ちる。突然ドローンは0.2kg軽くなる。
  • 20秒: ミッション終了。

最終章に向けて、ドローンのモデルはもう少し正直になる。どれも本物のドローンが付き合っていくしかないもので、どれも前の章でおなじみの顔だ:

  • モーターの遅れ(τ ≈ 0.05 s): プロペラは一瞬では回転を変えられない。推力は第3章の冷めていくコーヒーのように指令を追いかける。一次遅れで、0.05秒後に63%まで届く。遅れて届く一押しは、姿を変えた第12章の位相遅れだ。
  • **ノイズの多いセンサー(σn\sigma_n ≈ 2 cm、nはノイズ(noise)のn。極のσとは別物):** 高さの読み取りは毎回、ランダムに約2 cmずれる。それが毎秒千回。第11章で警告されたとおり、Dはこのゆらぎを大きな推力のスパイクに変えてしまう。
  • 限界のあるモーター(0〜20 N): 第10章の限界はそのまま。荷物を載せたドローンの重さは6.9 Nなので、20 Nは重さのたった3倍ほど。しかもモーターは下向きには引けない。モーターが限界に張り付いている間、積み重ねは一時停止する(第11章のアンチワインドアップ)。
  • Dにはフィルターがかかる: 第11章の対策だ。Dは、ならしたセンサーの読みの傾きを使う。時定数τf\tau_fはあなたが選ぶ一次遅れだ。τf\tau_fを長くすると落ち着くけれど、反応は遅くなる。

第13章:ドローンチャレンジ ↗

第12章ならこれを描くはずだ。これがドローン自身のループ、六つ星チューニングの1周だ:コントローラー、モーター、ドローン。モーターの遅れをスライドして、位相が下に曲がっていくのを見てみよう。

第13章:ドローンチャレンジ ↗

テオ: 遅れがなければ、位相は−180°に届かない。だから崖そのものがない。ゲインをどれだけ上げても、ループは第10章の−1に絶対たどり着けないんだ。モーターのほんの小さな遅れが、崖を作っているんだよ。

まず予想しよう! 12秒で荷物が落ちたとき、ドローンを正確に2mに戻すためにどの項が重労働を担う?

第13章:ドローンチャレンジ ↗

ミカ: 待って。じゃあ荷物が落ちたあと、ドローンはしばらく少し高すぎるところに浮いていなきゃいけないの? 積み重ねはその偏差から学び直すんだ!

ミッションを飛ばす

スライダーを変えるたびにミッションが最初からやり直しになり、前の飛行はゴーストとして残る。小さなs平面は公称の極を示す。モーターの遅れとフィルターは入っていて、外してあるのはノイズと荷物と限界だけ。だから、現実の乱れた飛行のすぐ横で、線形の姿を確かめられる。6つの星を全部取れば金メダルだ。

この基準は、配達を頼んだお客さんが気づくことばかりだ:3秒以内に落ち着く、10%より高く行き過ぎない、突風で手のひら1つ分(20 cm)より流されない、荷物を落としたあと2秒で戻る、地面をこすらない、そしてモーターがブンブンうならない(ばたつきが0.5 N未満)。

到着の星は、到着してから6秒の突風まで、真の高さが±5 cm以内にとどまることを意味する。2 mを一度横切っただけでは数えない。モーター静かの星は、離陸のあとで突風の前、3秒から6秒の推力の標準偏差を使う。平均のまわりの典型的なばらつきで、遅い整定やセンサーによるばたつきも含む。チェックリストの行を指す(またはTabで移動する)と、その行が判定する時間帯に影がつく。

第13章:ドローンチャレンジ ↗

ジューン: 頭の中で完璧なコントローラーをチューニングしたよ。KdK_dはうんと大きく、Dがすぐ反応するようにフィルターは一番小さく。穏やかな空気なら完璧! 見てて…

ジューン: …なんでモーターが悲鳴を上げてるの?オレンジの線はノイズだらけで、しかもオーバーシュートまでしてる!

テオ: 第11章の警告2だ。大きなKdK_dに小さなフィルターを掛けると、センサーの2 cmのゆらぎのたびに推力のスパイクが出る。しかもスパイクは20 Nより0 Nで頭打ちになることのほうがずっと多い(薄いオレンジの線はコントローラーが指令した推力だ。0 Nに当たる回数を見てごらん)。だから偏った余分な押しが加わる。それがオーバーシュートの正体で、第11章で見つけたのと同じ上向きのずれだ。完璧だったのは、想像上の穏やかな空気に完璧なセンサーがついていたからにすぎない。

第13章:ドローンチャレンジ ↗

ジューンの「穏やかな空気」チューニングを試して、「モーター静か」の星が落ちるのを見てみよう。それからフィルターを0.04 sに延ばし、KdK_dを7くらいまで下げる。KdK_d = 7だと到着まで約1.9秒で、ジューンが夢見た1.3秒には届かない。それが静かなモーターの代償だ。速さとノイズ、そしてロバスト性のあいだのこの取引こそが、制御工学そのものなんだ。

ジューン: ちょっと遅くなるだけで、モーターが悲鳴を上げなくなる。手を打とう。私の頭の中では、空気が穏やかでしかもセンサーが完璧だったんだね。

振り返り

ミカ: 最初は「もっと強く押せば全部うまくいく」と思ってた。でも逆なんだよね?トラブルのほとんどは、古い情報やノイズの多い情報に頼って強く押しすぎたことから来てた。くだらない質問もたくさんしたけど、よかった。くだらない質問なんて一つもなかった。

テオ: やっとラプラス変換が分かった気がする。これはただの早見表じゃない。信号に「este^{st}がどれだけ含まれている?」と尋ねる探針なんだ。傾きがssを掛けることに変わるから、微積分が代数になる。答えが発散する場所が極で、そこからその系を形づくるeste^{st}が見える。

ジューン: それから「多ければいい」わけじゃないって学んだ。ゲインも、減衰も、KiK_iも、速さも。どこかに崖があって、いい設計はそこから余裕を保つ。あと、必ずドローンで試すこと。

シャワーからフィナーレまで、僕たちが作ってきたすべてがここにある。どのバブルも、生まれた場所へリンクしているよ。

わかったこと

  • フィードバック:起きたことを測り、目標と比べ、偏差に応じて動く(第0〜1章)。
  • P制御は偏差に比例して押し返すが、ドループが残り、強くすると振動する(第2章)。
  • 微分・指数・回転する数は物事の変化を表す:este^{st}とs=σ+iωs = \sigma + i\omegaで、成長や減衰しながら振動する(第3〜7章)。
  • ラプラス変換は傾きをssの掛け算に変えるので、微積分が代数になる(第9章)。
  • 伝達関数の打ち消されていない極は、選んだ入力から出力までに見える自然な動きを示す:左半面の動きは消え、右半面の動きは成長する(第10章)。
  • PID:Iはドループを消し、Dは減衰を加え、それぞれが極を動かす(第11章)。
  • むだ時間は位相遅れを加える;余裕は崖っぷちまでどれだけあるかを教えてくれる(第12章)。
  • 実際のハードウェアには、限界(第10章)、位相余裕を食う遅れ(第3章+第12章)、Dが増幅するノイズ(第11章)が加わる。だから良いコントローラーは、速いだけでなく落ち着いてもいる(第13章)。

友達に説明してみよう

まずはあなたのミッション:星はいくつ取れた? 一番難しかったのはどれ? 先を読む前に、なぜかを声に出して言ってみよう。

ミカ: 私は「モーター静か」の星だった。モーターを静めようとしてDを足し続けたら、うるさくなる一方だったんだ。

理解の最良のテストは説明すること。各答えの前に、自分のバージョンを声に出してみよう。それから一番近い説明を選ぼう。

もう1枚の絵:状態平面

テオ: この講座のグラフは全部、時間に対する高さだった。でも高さだけじゃ、次に何が起きるか分からない。2 mにいて上昇中なのと、2 mにいて下降中なのは別物だ。

未来を決めるのは2つの数:目標から測った高さΔh\Delta hと、速度vv。この2つを合わせたものがドローンの状態だ。1枚の平面に、横に高さ、縦に速度をとって置けば、飛行全体が1つの動く点の軌跡になる。

そのルールは第3章の傾きで、数ごとに1つずつある:高さは速度で変わり、速度は第1章の式から出る加速度で変わる。ホバリング推力の分を差し引いて、その上にPD制御T=−Kp Δh−Kd vT = -K_p\,\Delta h - K_d\,vを加えると、2つのルールが1つの表に収まる:

ddt(Δhv)=(01−Kpm−c+Kdm)⏟A(Δhv)\frac{d}{dt}\begin{pmatrix}\Delta h\\ v\end{pmatrix} = \underbrace{\begin{pmatrix}0 & 1\\ -\frac{K_p}{m} & -\frac{c+K_d}{m}\end{pmatrix}}_{A}\begin{pmatrix}\Delta h\\ v\end{pmatrix}

この表AAが行列だ:状態に掛けると、状態の速度が出てくる。上の行は「高さは速度で変わる」と言っていて、下の行はニュートンの運動の法則だ。

まず予想しよう! KpK_p = 20 N/mでDなし。ドローンは1 m低いところで静止した状態から始まる。状態はどんな軌跡を描く?

第13章:ドローンチャレンジ ↗

ジューン: 第6章のらせんだ! それにKdK_dを約5.3より大きくすると、らせんがまっすぐになって、2本の破線に沿って滑り込んでいく。

あのまっすぐな線がモードだ:ちょうどその線の上から始めると、状態はそのモード自身の速さでまっすぐ滑り込む。その速さは行列の特別な数、固有値で、det⁡(sI−A)=0\det(sI - A) = 0となるところで見つかる:

det⁡(sI−A)=s2+c+Kdm s+Kpm=0\det(sI - A) = s^2 + \frac{c + K_d}{m}\,s + \frac{K_p}{m} = 0

ミカ: それって第7章の方程式だ! 固有値は極なんだ。同じドローン、新しい絵。

そして第10章の極の遊び場は、ずっとこっそり状態フィードバックをしていた:T=−Kp Δh−Kd vT = -K_p\,\Delta h - K_d\,vは状態の2つの数の両方を押していて、2つのゲインを選ぶことで2つの極を置いていたんだ。状態の数を増やせば(傾き、回転、横の位置)行列は大きくなるけれど、考え方は変わらない:固有値は極で、状態全体をフィードバックすれば、それを全部置ける。

もう1つ告白しよう。この講座のルールはどれも直線のルールだけど、本物は曲がっている。プロペラの推力は回転の2乗で増える:T=k w2T = k\,w^2。ホバリングの近くでは曲線はほとんどまっすぐなので、ホバリング点での接線、つまり第3章の定規に置き換える:

T≈T0+2k w0 ΔwT \approx T_0 + 2k\,w_0\,\Delta w

第13章:ドローンチャレンジ ↗

テオ: だから直線は嘘じゃなかった。拡大した絵なんだ:ホバリングの近くでは正直で、離れるほど悪くなる。だから僕たちの計算には、ドローンが2 mの近くにいることが必要だったんだ。

新しい言葉

状態
未来を決める数:このドローンなら高さと速度。状態平面の上の1つの点。
行列 AA
状態をその速度に変える、数の表。
固有値
行列の特別な速さで、det⁡(sI−A)=0\det(sI - A) = 0となるところ。ドローンのAAなら、それが極だ。
線形化
曲がったルールを、気になる点(ここではホバリング)の近くで接線に置き換えること。

次はどこへ

君はもう、ほとんどの人が出会うより多くの制御理論を知っている。ここから道は続く。それぞれ新しいノートブックだ:

  • 根軌跡: 極をドラッグする代わりにゲインをドラッグして、極がたどる道を見る。どのKpK_pが大きすぎるか、ひと目でわかる。
  • 状態空間制御: 上でひと口味見したね。たくさんのセンサーとモーターを一度に扱う。本物のドローンは傾きと回転と位置を同時に保たないといけないので、ノブを1つずつ調整するやり方は通用しなくなる。
  • ディジタル制御: 実際のコントローラーは、数ミリ秒ごとにサンプリングするコンピューターの上で動く。サンプリングも小さな遅れだ。そしてs平面には、いとこのz平面ができる。
  • カルマンフィルター: モデルの予測とセンサーの測定をうまく混ぜる。だから、遅いフィルターなしでノイズの多いセンサーを使える。
  • スミス予測器とモデル予測制御: 小さなシミュレーションを中に持っていて、遅れの先を見越すコントローラー。これこそシャワーの本当の治療法だ。
  • 非線形制御とロバスト制御: 空気抵抗が線形でないときや、ドローンが3次元で飛ぶときにどうするか。そして、それでも余裕があることをどう証明するか。

テオ: まずは根軌跡だ。ノブを1つ回しながら、極が動くのをこの目で見たい。

次にシャワーで熱湯と冷水を行ったり来たりするとき、何が起きているか正確にわかるはず。しかも、それは自分のせいじゃない。位相余裕のせいなんだ。

第13章:ドローンチャレンジ ↗