スライディングモード制御シミュレーター 戻る
制御工学シミュレーター

スライディングモード制御 — VSC とロバスト性

外乱を受ける2次系にSMCを適用し、切換則 u=-k·sign(s) で原点へ収束させるリアルタイムシミュレーター。係数c・k・φ・dを変えて、ロバスト収束とチャタリング抑制の様子を可視化します。

パラメータ設定
スライディング面係数 c
切換ゲイン k
境界層幅 φ
外乱振幅 d

プラント: ẍ = -a·ẋ - b·x + u + d(t)、a=1、b=2、x(0)=2、ẋ(0)=0、外乱 d(t)=d·sin(5t)、dt=0.01、T=5s。

計算結果
到達時間 t_reach
整定時間 (2%帯)
チャタリング指標
到達後の最大 |s|
位相平面と時間応答

上:位相平面 (x₁, x₂) 軌跡(青)とスライディング面 s=c·x₁+x₂=0(緑直線)/下:時間応答 x₁(t)・x₂(t)・制御入力 u(t)

理論・主要公式

2次系 $\ddot x = -a\dot x - b x + u + d(t)$ に対し、状態 $x_1=x,\ x_2=\dot x$ を用いてスライディング面を設計します。

スライディング面 $s$。$c$ は面の傾きを決める正の係数:

$$s = c\,x_1 + x_2$$

フィードバック線形化と切換項を組み合わせた制御則。$k$ は切換ゲイン:

$$u = -k\,\mathrm{sign}(s) - c\,x_2 + a\,x_2 + b\,x_1$$

境界層 $\varphi$ によるチャタリング抑制(連続化):

$$\mathrm{sign}(s)\;\longrightarrow\;\tanh(s/\varphi)$$

スライディング条件と面上の動学:

$$s\,\dot s < 0,\qquad s=0\ \Rightarrow\ \dot x_1 = -c\,x_1$$

$k$ を外乱振幅より大きく取れば到達条件が満たされ、面に乗った後は係数 $c$ で決まる指数収束になります。

スライディングモード制御シミュレーターとは

🙋
スライディングモード制御って名前はよく聞くんですけど、何が「スライディング」してるんですか?
🎓
ざっくり言うと、状態空間にあらかじめ「滑り台」を引いておく制御だ。その滑り台のことを「スライディング面」と呼ぶ。シミュレーター上半分の位相平面を見てごらん。緑の点線が $s=c\,x_1+x_2=0$、つまり滑り台の式だ。青い軌跡は最初 (2, 0) からスタートして、まずこの緑の線まで一直線に「到達」して、そのあと線に沿って原点まで「滑って」いくだろう?
🙋
本当だ!でも、外乱が入ってるはずなのに、原点でちゃんと止まりますね。これがロバスト性ってやつですか?
🎓
そう、まさにそれ。式 $u=-k\,\mathrm{sign}(s)\,\cdots$ の切換ゲイン $k$ を外乱より大きく取ると、面まで有限時間で到達する。一度面に乗ってしまえば動学は $\dot x_1=-c\,x_1$ になって、外乱が何 Hz だろうと振幅がいくつだろうと、原点へ指数収束する。実務ではモーター制御や電力変換器でこの性質が重宝される。「外乱振幅 d」のスライダーを 5 まで上げても原点に収束するのを試してみて。
🙋
すごい!でも下のグラフの赤い線(制御入力 u)がギザギザしてます。これがチャタリングですか?
🎓
そう、$\mathrm{sign}(s)$ が原点で不連続だから、$s$ がゼロを跨ぐ瞬間に制御がパチパチ切り替わるんだ。「境界層幅 φ」を 0 にしてみて。チャタリング指標のカードが跳ね上がるはず。そのあと φ を 0.1 ぐらいまで上げると、$\mathrm{sign}$ が $\tanh(s/\varphi)$ に置き換わって、入力が滑らかになる。代償として原点に微小な残留誤差が残るけど、現実の機械では摩耗を防ぐためにこの妥協が必須なんだよ。
🙋
面の傾き c はどう決めるんですか?大きくしたほうが速く収束する気がするけど。
🎓
いい質問だ。$c$ は面上の収束速度を決める時定数 $1/c$ なので、大きくすると確かに速い。ただし $c$ を大きくしすぎると、到達フェーズで必要な制御入力が大きくなり、アクチュエータの飽和を招く。シミュレーターで $c$ を 10 にして、入力 u の振幅が跳ね上がるのを見てみて。実務では $c$ は機械の応答帯域より少し低めに、$k$ は外乱の見積もり + マージンで決めるのが定石だよ。

よくある質問

PID は誤差の比例・積分・微分を線形に重ね合わせる制御で、設計が直感的でチューニングも容易です。一方 SMC は「sign 関数」という非線形な切換項を持ち、外乱の上界が分かっていれば理論的にロバスト性を保証できます。ただし切換項によるチャタリングがあり、機械やパワー素子を傷めやすいため、境界層や高次 SMC で連続化するのが実務上の常套手段です。PID は穏やかな外乱に、SMC はパラメータ変動や強い外乱に強いと覚えてください。
到達条件 $V'=s\,\dot s<0$ を満たすため、$k$ は外乱とモデル誤差の上界を上回るように設計します。具体的には $k>|d|_\max+\eta$($\eta>0$ は到達率に対応する余裕)と取るのが基本です。ただし $k$ を大きくしすぎると切換による入力振幅も大きくなりチャタリングが増えるため、最小限の余裕で押さえます。外乱の見積もりが難しいときは、ゲインを状態に応じて自動調整する「適応スライディングモード」も選択肢です。
$|s|<\varphi$ の内側では $\mathrm{sign}(s)\approx s/\varphi$ となり、面に対する高ゲイン比例制御に切り替わります。比例制御は定常偏差を完全には消せないため、外乱の積分や DC 成分があると $s$ がゼロから微小オフセットして釣り合います。誤差の上界は $\varphi$ に比例するので、許容誤差から逆算して φ を選びます。チャタリングと残留誤差は典型的なトレードオフ関係です。完全に消したいなら積分スライディングモード(ISM)や Super-twisting を使います。
2次系では $s=c\,x_1+x_2$ という線形面が最も基本的ですが、必須ではありません。高次系では $s=(\frac{d}{dt}+c)^{n-1}x$ のように構成したり、終端時間有限収束を狙って $s=x_2+\beta|x_1|^{\alpha}\mathrm{sign}(x_1)$ のような非線形面(Terminal SMC)を使うこともあります。面の設計はそのままシステムの到達後の挙動を決めるため、応答時間・オーバーシュート・入力制約を考慮して選びます。

実世界での応用

ロボットアームの軌道追従:多関節ロボットは関節間の慣性結合や負荷変動が大きく、モデル誤差が必ず存在します。SMC は誤差の上界さえ分かれば追従誤差をゼロに収束させられるため、産業用ロボットの軌道制御や、力制御モードでよく使われます。境界層を入れて減速機への衝撃を抑える設計が一般的です。

電力変換器(DC-DC コンバータ・インバータ):スイッチング素子そのものが「切換」を体現しているため、SMC とパワーエレクトロニクスは相性が良い分野です。出力電圧の応答が高速で負荷急変にも強く、太陽光パワコンや EV モータ駆動のインバータで広く採用されています。スイッチング周波数を制限するために境界層付きで実装するのが標準的です。

航空機・ミサイルの姿勢制御:飛行体は速度や高度で空力係数が大きく変わるため、ゲインスケジューリング PID では追従できない場面があります。SMC はパラメータ変動への不感性を持つので、ミサイル誘導の終末誘導則や、再突入機の姿勢制御で研究・実装されています。

自動車の ABS・ESC・電動パワーステアリング:路面摩擦係数の不確かさが大きい自動車制御は SMC の好適応用先です。ABS では車輪スリップ率を目標値に追従させる SMC、ESC ではヨーレートの SMC、EPS ではアシストトルクの SMC が研究・量産されており、ロバスト性が安全性に直結します。

よくある誤解と注意点

最も多い誤解は、「ゲイン k を大きくすればするほど性能が良くなる」と考えてしまうことです。理論上は $k$ が外乱より大きければ到達条件は満たされますが、$k$ を過大に取ると入力振幅が増え、チャタリングが激化してアクチュエータを摩耗・破壊します。シミュレーターで $k$ を 20、$\varphi$ を 0 にしてみてください。チャタリング指標が天文学的に跳ね上がるはずです。実務では「外乱上界の見積もり + 安全率 1.5〜2 倍」程度に抑え、余ったロバスト性は境界層や適応則で補うのが王道です。

次に多いのが、境界層 φ を入れたら「ほぼ理想 SMC」だと思い込むことです。φ を入れた瞬間に厳密な不変性は失われ、有限の残留誤差と低周波数の振動が残ります。シミュレーターで φ を 0.5 まで上げると、原点近傍に小さな振動が出るのが分かります。誤差を許容できるかは応用次第で、精密位置決めには別途積分スライディングモード(ISM)や Super-twisting を組み合わせるのが現実解です。「境界層 = チャタリング解決」ではなく「境界層 = トレードオフの調整つまみ」と捉えてください。

最後に、本ツールが「完全モデル既知」の理想 SMC を示している点に注意してください。実装では制御則の $a\,x_2 + b\,x_1$ という打消し項にモデル誤差が混ざるため、その分だけ実効的な外乱が増えます。実機ではゲイン $k$ をモデル誤差込みで設計するか、System ID で同定したノミナルモデルに対する誤差バウンドを求めるのが標準手順です。さらに、離散時間で実装すると切換周波数がサンプリング周波数で制限され、これ自体がチャタリングの原因にもなります。連続シミュレータの結果が良くても、サンプリング 1 kHz で動かすと挙動が変わることがあります。