バンバン制御シミュレーター 戻る
制御工学

バンバン制御シミュレーター — 時間最適制御

二重積分系 ẍ = u を、入力上下限 |u| ≤ u_max のもとで最短時間で原点へ到達させる「バンバン制御」を可視化するツールです。初期位置・初期速度・最大入力を変えると、切替曲線・位相平面の軌道・最短到達時間・切替時刻がリアルタイムで分かります。

パラメータ設定
初期位置 x₀
原点からの最初のずれ(無次元)
初期速度 v₀
スタート時点の速度(無次元)
最大制御入力 u_max
入力の上下限(加速度の最大値)
この系は二重積分系(ダブルインテグレータ)です。制御入力 u は加速度に相当し、+u_max(全力加速)か −u_max(全力ブレーキ)のどちらか一方だけを取り、原点 (0,0) へ最短時間で到達するよう高々1回だけ切り替わります。
計算結果
最短到達時間 t_final (s)
切替時刻 t_switch (s)
第1制御入力
第2制御入力
切替点の速度 v_sw
制御入力の大きさ u_max
位相平面 — 切替曲線とバンバン軌道

横軸が位置 x、縦軸が速度 v。S字の切替曲線に対し、初期点から放物線の弧を描いて切替曲線に到達し、制御を反転して原点へ滑り込みます。マーカーが軌道上を周回します。

位置・速度の時間応答
制御入力 u(t) — 矩形波
理論・主要公式

$$\ddot x = u,\qquad |u|\le u_{max}$$

二重積分系の状態方程式。位置 x、速度 v=ẋ、制御入力 u は加速度に相当し、上下限 ±u_max で制約される。

$$x = -\frac{v\,|v|}{2\,u_{max}}$$

切替曲線(スイッチング曲線)。この曲線上の状態は、1回も切替えずに原点へ到達できる。曲線の上側では u=−u_max、下側では u=+u_max を加える。

$$u^{*}(t)=\pm u_{max}\quad(\text{切替は高々1回})$$

ポントリャーギンの最小原理より、二重積分系の時間最適入力はバンバン構造を取り、切替回数は高々1回となる。

バンバン制御とは

🙋
「バンバン制御」って名前、なんだか物騒ですね。どういう制御なんですか?
🎓
名前は「バン!バン!」とスイッチを叩くイメージから来ているんだ。ざっくり言うと、制御入力を中間の値で使わず、いつも上限 +u_max か下限 −u_max のどちらかに「振り切る」制御だよ。アクセルとブレーキで言えば、半分踏むことはせず、常に「全力アクセル」か「全力ブレーキ」のどちらか。on/off の二択だから bang-bang と呼ばれるんだ。
🙋
全力か全力かの二択なんて、雑な制御に聞こえます。それで何かいいことがあるんですか?
🎓
それがね、「最短時間で目標に着く」という意味では、バンバン制御こそが最適解なんだ。入力に上下限がある系を考えてみて。とにかく速く動かしたいなら、力を出し惜しみする理由はないよね。だから「行きは全力で加速、帰りは全力でブレーキ」が答えになる。このツールが扱う二重積分系 ẍ = u では、それが数学的にも証明できる。中途半端なアクセルワークはむしろ遅くなるんだ。
🙋
なるほど。でも、いつ全力アクセルから全力ブレーキに切り替えればいいんですか?タイミングが難しそう。
🎓
そこで出てくるのが「切替曲線」だよ。上の位相平面(横軸が位置、縦軸が速度)を見て。S字のカーブが描いてあるだろう。これが切替曲線で、x = −v·|v|/(2·u_max) という式で表される。「この曲線の上に乗っていれば、あとはブレーキだけで原点にぴったり止まれる」という曲線なんだ。だから制御則はシンプル。曲線より上にいたら u=−u_max、下にいたら u=+u_max。状態が放物線を描いて切替曲線にぶつかった瞬間が、切替のタイミングになる。
🙋
放物線になるのはなぜですか?グラフでも初期点からカーブを描いて曲線にぶつかっていますね。
🎓
入力 u が一定なら、加速度が一定だから等加速度運動になる。位置 x と速度 v の関係を取ると、ちょうど v² = 一定×x という放物線になるんだ。だから位相平面では、+u_max のときと −u_max のときで向きの違う放物線の弧を2本つないだ形になる。1本目で切替曲線に到達し、2本目(=切替曲線そのもの)で原点へ。切替が高々1回というのは、この「放物線2本」という構造から来ているんだよ。
🙋
理論はわかってきました。実際のエレベータやロボットでも、このままバンバン制御を使っているんですか?
🎓
考え方は使われているけど、そのまま「全力⇔全力」だと欠点もある。入力が一瞬で +u_max から −u_max へ跳ぶから、機械にガツンと衝撃が来るし、人を運ぶエレベータなら乗り心地が最悪だ。それに切替タイミングがわずかにズレると原点を通り過ぎてチャタリング(細かい振動の繰り返し)を起こす。だから実務では切替付近を滑らかに丸めたり、目標近くではフィードバック制御に切り替えたりする。「理論的な最速」を知った上で、現実的に少し譲歩する、というのが設計の腕の見せどころなんだ。

よくある質問

バンバン制御(bang-bang control)とは、制御入力 u を許容範囲の上限 +u_max か下限 −u_max のどちらか一方だけに張り付かせる制御方式です。中間の値を一切使わず、スイッチを「入/切」のように切り替えます。二重積分系 ẍ = u のように入力に上下限の制約 |u| ≤ u_max がある系を最短時間で目標へ到達させる「時間最適制御」の解が、まさにこのバンバン制御になります。本ツールは初期状態から原点まで、何回の切替で最短到達できるかを計算します。
ポントリャーギンの最小原理(最大原理)によると、入力 u に対してハミルトニアンが線形なとき、最適な u は各時刻でハミルトニアンを最小化する端点 ±u_max を取ります。中間値が最適になるのは、共役変数がちょうど 0 になる特異区間のときだけです。二重積分系は特異区間を持たないため、最適入力は常に +u_max か −u_max のどちらかで、しかも切替は高々1回です。最短で動かすには「全力で加速し、ぎりぎりで全力ブレーキ」が答えになる、と直感的にも理解できます。
切替曲線とは、位相平面(横軸 x・縦軸 v)上で「そこから1回も切替えずに原点へ到達できる状態の集合」を表す曲線です。二重積分系では x = −v·|v|/(2·u_max) というS字状の曲線になります。現在の状態がこの曲線より上側にあれば u = −u_max、下側にあれば u = +u_max を加えます。状態が放物線を描いて切替曲線に到達したら制御を反転し、曲線に沿って原点へ滑り込みます。切替曲線は最適制御の「地図」のような役割を果たします。
理論上は最速ですが、そのまま使うと欠点もあります。第一に、入力が瞬間的に +u_max から −u_max へ跳ぶため、アクチュエータや構造に大きな衝撃・振動を与えます。第二に、切替時刻のわずかな誤差やモデル誤差で、原点を行き過ぎてチャタリング(細かい振動の繰り返し)を起こしやすくなります。実務ではエレベータやハードディスクのヘッド位置決めなどで「ほぼバンバン」のプロファイルを使いますが、切替付近を滑らかに丸める、近傍ではフィードバック制御に切り替える、といった対策を併用します。

実世界での応用

HDD・光ディスクのヘッド位置決め:ハードディスクの磁気ヘッドを目標トラックへ最短時間で動かす「シーク制御」は、バンバン制御の代表例です。アクセス時間を1ミリ秒でも縮めたい記憶装置では、ボイスコイルモータを電流上限まで使い切って加速し、途中で全力減速に切り替えます。実際には切替付近を滑らかにした「準バンバン(near-time-optimal)」プロファイルが使われ、整定後はフィードバック制御へ引き継ぎます。

エレベータ・搬送機械の運転プロファイル:エレベータやクレーン、半導体製造装置の搬送ステージは「できるだけ速く、しかし衝撃なく」運びたい装置です。理想は加速・減速を全力で行うバンバンですが、加速度の急変(ジャーク)は乗り心地や荷崩れの原因になります。そこで台形速度プロファイルやS字プロファイルとして、バンバンの角を意図的に丸めた「衝撃を抑えた時間最適」が採用されます。

宇宙機の姿勢制御・推力噴射:スラスタ(ガスジェット)は本質的に on/off でしか動かせないアクチュエータで、まさにバンバン制御そのものです。人工衛星の姿勢変更や軌道修正では、噴射のオン時間と切替タイミングを時間最適制御の理論で決めます。推進剤を節約しつつ最短で目標姿勢へ到達させる設計に、二重積分系の切替曲線の考え方が直接生きています。

ロボット・工作機械の高速位置決め:産業用ロボットのアームや工作機械の送り軸を、点から点へ最短時間で動かす point-to-point 動作では、モータトルクの上限を使い切るバンバン的なプロファイルが基本になります。サイクルタイムの短縮が生産性に直結するため、トルク制約・速度制約のもとでの時間最適軌道生成が広く研究・実装されています。

よくある誤解と注意点

まず多いのが、「バンバン制御は最短だから常に最良の制御だ」という誤解です。バンバン制御が最適なのは、あくまで「到達時間を最小化する」という目的関数を選んだ場合に限られます。評価関数を「消費エネルギー最小」や「ジャーク(加速度変化)最小」に変えれば、最適解はもはやバンバンにはなりません。実際の機械では、入力の急変が振動・摩耗・騒音を生むため、時間最適性を少し犠牲にしてでも滑らかな入力を選ぶのが普通です。「何を最適化したいのか」を先に決めることが、制御設計の出発点になります。

次に、「切替時刻さえ計算すれば、あとは時間どおりに入力を切り替えればよい」という思い込み。本ツールのように切替時刻を厳密に計算できるのは、モデル(ẍ=u、u_max が正確)が現実と完全に一致している場合だけです。実機には摩擦・外乱・モデル誤差が必ずあり、計算どおりの時刻で切り替えても原点ぴったりには止まりません。少し行き過ぎると、状態が切替曲線をまたいで往復し、入力が高速で +u_max と −u_max を行き来する「チャタリング」に陥ります。実装では切替曲線に細い不感帯(デッドバンド)を設けたり、原点近傍で線形フィードバックに切り替えたりして、この振動を防ぎます。

最後に、「切替は必ず1回だけ」と一般化してしまう誤解です。切替が高々1回で済むのは、この二重積分系(2次系)に限った性質です。より高次の系や、複数の極を持つ系では、時間最適制御の切替回数は系の次数に応じて増えます(n 次系では最大 n−1 回というのが一つの目安)。「バンバン=1回切替」と覚えてしまうと、より複雑な系に応用したときに誤ります。本ツールはあくまで二重積分系という最も基本的なケースを扱っていることに注意してください。

使い方ガイド

  1. 初期位置x0(m)と初期速度v0(m/s)を設定します。例えば位置10m、速度0m/sから原点への制御を想定
  2. 最大制御入力umaxをN/kgで指定します。産業用ロボットアームでは3~8m/s²が標準値
  3. シミュレーション実行後、位相平面上に最適軌跡と切替曲線が描画され、t_switch時刻での切替動作を確認
  4. 結果の最短到達時間t_finalと第1・第2制御入力の符号反転を検証

具体的な計算例

初期値x0=5m、v0=2m/s、umax=4m/s²の場合:第1段階でu=-4m/s²で加速度制御を開始し、切替曲線上の点(x≈1.5m、v≈-2.6m/s)に到達するまで約1.2秒動作。その後u=+4m/s²に切り替え、残り0.9秒で原点へ到達。総最短到達時間t_final≈2.1秒。切替時刻t_switch=1.2秒での速度v_sw=-2.6m/sが最適性条件を満たします

実務での注意点

  1. CNC工作機械の送り軸制御:umaxは機械の最大加速度制限値(通常5~10m/s²)に設定し、実装可能な時間軌跡を確認
  2. パラボラ型切替曲線上での入力飽和が発生しない場合は、線形フィードバック制御へ切り替える必要があります
  3. 摩擦や粘性減衰を含む実機では理論値より10~20%遅延するため、安全係数1.3を乗算
  4. サーボモータ制御時は電流飽和による遅れを考慮し、umaxを動特性の95%に設定