スライディングモード制御(SMC)

2025年4月10日木曜日

13. スライディングモード制御

t f B! P L

はじめに

前回このブロブでは、適応制御(セルフチューニングレギュレータ)について書きました。制御対象の動特性を制御中に変更するなど、セルフチューニングレギュレータのロバスト性について、EXCELでシミュレーションして確認しました。マスプロダクトでは、物バラつきや経年劣化、使われ方や使われる環境も様々なため、適用する制御には高いロバスト性が必要です。

スライディングモード制御(SMC)も高いロバスト性を持つ制御手法と言われています。
今回は、Excelで評価できるようにスライディングモード制御を離散時間系で設計し、Excelでのシミュレーションにて、そのロバスト性を最適レギュレータ(LQR)と比較していきます。

離散時間系で設計するので、組み込みターゲットに実装することを考えている方にも参考になると思います。

参考図書

まず参考図書を紹介します。コロナ社さんの「スライディングモード制御」です。
昔々、勉強した記憶はありますが、「スライディングモード制御って、切り替え平面に拘束するやつだよね」くらいしか覚えてなかったので、改めてこの本を開いてみました。
この本には、スライディングモード制御に関する理論が網羅的に幅広く記述されており、スライディングモード制御のバイブルみたいな本です。
あまりにも多くの設計理論が書かれているので、どれを選択すれば良いのか迷う読者も多いのではないかと思う程です。尚、今年2024年2月に改訂版の「スライディングモード制御入門」が発行されています。

スライディングモード制御(SMC)とは

スライディングモード制御では、システムの状態を特定の平面(切り替え平面)に拘束することで、システムの挙動を制御します。
システムを状態方程式\[\frac{dx(t)}{dt}=Ax(t)+Bu(t)\]と、切り替え関数\[\sigma = Sx\]で表現します。システムの状態を切り替え平面に拘束することで、状態が目標とする平衡点へと切り替え平面を滑っていくという独特な制御手法であるため、現代制御の知識のベースがあっても、そこから学ぶことが山盛りです。

  • システムの状態を拘束する切り替え平面をどのように設計するのか
  • 切り替え平面への拘束のための制御入力をどのように作るのか
  • 拘束するための制御入力のスイッチングによる影響を如何に抑えるのか
  • これらを離散時間系で実装するための計算方法

について順次説明していきます。

EXCELファイルのダウンロード

スライディングモード制御(SMC)のExcelファイルはこちら → リンク からダウンロードできます。スライディングモード制御(SMC).xlsm です。

Excelファイルには、以下のシートが含まれます。

  • 状態方程式:制御対象の状態方程式と離散時間系への変換
  • 状態方程式(安定余裕度確保):切り替え平面設計のための状態方程式
  • SMC:スライディングモード制御のシミュレーション
  • LQR:最適レギュレータのシミュレーション
  • mファイル:最適レギュレータのフィードバックゲインを算出するmファイル
  • mファイル (安定余裕度確保):切り替え平面設計のためのmファイル

制御設計

紹介した参考図書には、多数の設計方法が解説されています。今回はスライディングモード制御のロバスト性を最適レギュレータ(LQR)と比較するという観点で、最も簡潔(手っ取り早くショートカットして、ある意味手抜き)と思われる設計方法を選択しています。

制御対象

今回はスライディングモード制御と最適レギュレータのロバスト性の比較であるため、制御対象は、最適レギュレータ(LQR)で既にモデル化しているダンパー機構がないバネマスモデルとし、スライディングモード制御に置き換えてみます。

質点の質量 \(M=1.00 [kg]\)
ばね定数 \(K=10.00 \)

とすると、重力下では自然長に対してバネは \(0.98[m]\) 縮むので、質点の初期位置を \(L0 = -0.98[m] \)とし、バネの支点を推力 \(F[N]\) 速度 \(V[m/s]\) で運動させて、\(L = 0[m] \)に戻す制御をスライディングモード制御で行います。

切り替え平面の設計

切り替え平面の設計とは、\(\sigma = Sx \) の \(S\) の定め方になります。
参考図書には様々な設計方法が紹介されていますが、システムの零点を利用する設計方法を採用します。これは、切り替え平面の決定方法として、切り替え平面 \(S\) に最適レギュレータのフィードバックゲイン値を設定する方法です。

おぉ! そんな方法があったのか!!

どうして、最適レギュレータのフィードバックゲイン切り替え平面 \(S\) に選ぶことができるのか?については下手な説明よりも参考図書などを参照していただく方が良いと思います。

最適レギュレータ(LQR)でも説明していますが、最適レギュレータでは、下記の評価関数 \(J\) を設定し、それが最小になるようにフィードバックゲインを決定しています。
\[ J = \int_0^\infty \{x^T Q x + u^T R u\} \; dt \] \(Q\) と\(R\) は 、その対角値に重み係数を設定しています。
フィードバックゲイン \(K\) は、Riccati方程式\[ PA+A^TP – PBR^{–1}B^TP + Q = 0 \]より \(P\) の解を求め、\[K = R^{–1}B^TP \]から求めることができます。
具体的な方法としては、こちら→ 最適レギュレータ(LQR) で紹介しているように、状態方程式の行列\(A,B\)を 離散化 した後、MATLABのコマンド  dlqr 離散時間系のフィードバックゲイン \(K\) を求めています。この時は、MATLAB Online(BASIC)を利用しています。

安定余裕度の確保

今回の制御対象のフィードバックゲイン \(K\) は、既に最適レギュレータ(LQR)で算出済なので、その値をそのまま切り替え平面 \(S\) に流用する\[K = R^{–1}B^TP \rightarrow S \]というある意味手抜きをしたいところですが・・・誠に残念ながら、ひと手間掛ける必要があります。

最適レギュレータ(LQR)に用いたフィードバックゲイン値のままでは、スライディングモード制御の切り替え平面 \(S\) には安定余裕度が不足しているのです。

そのまま切り替え平面 \(S\) に設定すると、こちら → 6.3.安定余裕度確保の補足

なので、安定余裕度を確保できるように、状態方程式の行列\(A\)の対角値に \(\varepsilon\) を加算します。(状態方程式の行列\(A\)の対角値をいじると安定余裕度を調整できるんですね。)
\[A_{\varepsilon} = A+\varepsilon I \hspace{1cm} \varepsilon>0\]今回は、\(\varepsilon\) = 1.0 としています。

システムの安定条件については、特性方程式と固有値 で説明していますが、離散時間系では 固有値の絶対値<1 が条件になります。今回の安定余裕度の確保によって、例えば固有値の1つは、0.9504 → 0.8965 と若干小さくなります。1よりも小さくなれば安定余裕度が増えていきます。

この状態方程式の行列\(A_{\varepsilon},B\)を 離散化 した後、あらためて最適レギュレータ(LQR)の離散時間系のフィードバックゲインをMATLABのコマンド  dlqr で求め、切り替え平面 \(S\) に設定します。これで、切り替え平面の設計は完了です。

EXCELファイルの関連するシートについて簡単に説明します。

Excelファイルのシート 状態方程式(安定余裕度確保)では、状態方程式の安定余裕度の確保と離散時間系の状態方程式の行列 \(P_\varepsilon\), \(Q_\varepsilon\) の算出を行っています。

また、Excelファイルのシート mファイル (安定余裕度確保) では、算出した状態方程式の行列 \(P_\varepsilon\), \(Q_\varepsilon\) の値を用いて、MATLABのコマンド dlqr にて安定余裕度を確保したフィードバックゲインを求めています。今回も MATLAB Online(BASIC) を利用しました。

Excelファイルのシート mファイル (安定余裕度確保) には、計算結果も記載しています。K が安定余裕度\(\varepsilon\)を確保した最適レギュレータのフィードバックゲインですが、この値が切り替え平面 \(S\) の設定値になります。

固有値 e から、シート mファイル の固有値よりも小さくなっており、安定余裕度が確保されていることが確認できます。


Excelファイルのシート SMC に上記で求めた値(K)を切り替え平面 \(S\) に設定しています。切り替え平面の関数 \(\sigma = Sx \) は下記のように算出しています。

スライディングモード制御器の設計

システムの状態を切り替え平面に到達、拘束させるコントローラを設計します。参考図書には様々な設計方法が紹介されていますが、最終スライディングモード制御法を採用。制御入力は、等価制御入力\(u_{eq}\)と非線形制御入力\(u_{nl}\)の2つの項の構成になります。
\[u=u_{eq}+u_{nl}\]

等価制御入力  \(u_{eq}\)

等価制御入力は、システムが切り替え平面上を滑っている状態のときに、等価的に発生していると見なせる制御入力です。状態方程式の \(A, B\) と、切り替え平面の \(S\) より

\[u_{eq}= -(SB)^{-1} (SA)x \]です。等価制御入力では、安定余裕度を確保した \(A_{\varepsilon}\) は使いません。また、等価制御入力\(u_{eq}\)の算出式には、状態方程式の \(A, B\) が含まれているので、離散時間系の式に変換する必要があります。
状態方程式を逐次式
\[x(k+1)=P x(k)+Q u(k) \]に変換すると離散時間系の等価制御入力\(u_{eq}\)は、\[u_{eq}= -(SQ)^{-1} (S(P-I))x \]で算出できます。

等価制御入力\(u_{eq}\)は、Excelファイルのシート SMC で下記のように算出しています。

非線形制御入力 \(u_{nl}\)

\(u_{nl}\)は、システムの状態を切り替え平面に拘束するための制御入力です。
\[u_{nl}= -k\ sgn(\sigma) \] \(k\)はスイッチング幅、\(sgn()\)は符号関数で、上記の場合\(\sigma\)の符号を示します。\(\sigma\)の符号によって\(u_{nl}\)をプラス側、マイナス側にスイッチングすることでシステムの状態を切り替え平面に拘束します。

チャタリング防止策

切り替え平面近傍で非線形制御入力\(u_{nl}\)のスイッチングによるチャタリングが発生してしまいます。このチャタリングを防止する方法として、参考図書には様々な設計方法が紹介されていますが、平滑な関数による方法を採用します。
\[u_{nl}= -k\ sgn(\sigma) \longrightarrow -k \frac{\sigma}{\|\sigma\| + \delta } \]\(\delta\)はチャタリングを防止する平滑化項です。\(\delta\)によりシステムの状態が切り替え平面に近づくにつれて\(u_{nl}\)を小さくすることでチャタリングを防止します。\(k\)と\(\delta\)は、本来は想定される外乱の大きさを基に決定するべきですが、今回は、\(k=0.8, \delta=0.4\) としています。

Excelファイルのシート SMC で非線形制御入力\(u_{nl}\)は、下記のように算出しています。

切り替え平面への拘束

Excelファイルのシート SMC のデータを見ると、切り替え平面の関数 \(\sigma\) の符号に応じて非線形制御入力\(u_{nl}\)が切り替わり、切り替え平面に拘束(\(\sigma=0\))されていくのが分かります。

制御結果

外乱なし

外乱のない状態で、スライディングモード制御の収束速度を最適レギュレータ(LQR)と比較します。結果は、最適レギュレータ(LQR)と同等レベルです。


外乱がある場合

制御入力に +0.1[N] の外乱(オフセット)が発生した場合の比較です。
最適レギュレータ(LQR)では、制御入力の外乱の影響で、リフト量に1.15E-01[m]のオフセットが発生します。一方、スライディングモード制御では、リフト量のオフセットは、1.05E-02[m]であり、外乱の影響は最適レギュレータ(LQR)と比較すると極めて限定的です。1つの例だけですが、最適レギュレータ(LQR)よりもロバスト性が高いかもしれませんね。


安定余裕度確保の補足

再度計算するのが面倒だからと言って、最適レギュレータ(LQR)のフィードバックゲイン値をそのまま切り替え平面 \(S\) に設定してしまうと、安定余裕度が不足しているため、スライディングモード制御の応答は発散気味となり、収束が非常に遅くなってしまいます。


安定余裕度の確保 \(A_{\varepsilon} = A+\varepsilon I \) (\(\varepsilon\)=1.0)によって、例えば固有値の1つは、0.950 → 0.896 と若干小さくなっているだけですが、制御応答としては大幅に改善します。
また、\(\varepsilon\)を大きくしすぎると、安定しすぎとなって収束が遅くなります。こういったシステムの安定条件については、特性方程式と固有値 の所で説明しています。

チャタリング防止機能の補足

非線形制御入力\(u_{nl}\)のスイッチングによるチャタリング防止機能として、平滑化項 \(\delta\) を用いています。この平滑化項の効果を確認するため、\(\delta\) を0.4から0.28に変更してみると 


スライディングモード制御っぽい動作ですが、制御入力のスイッチングにより、システムの状態に微小な変動が残っています。平滑な関数による方法は、\(\delta\) の設定値を適切に調整することで、チャタリングを防止しつつ切り替え平面に拘束できる巧妙な仕組みになっています。

最後に

今回は、EXCELでスライディングモード制御を動かしてみた というレベルです。参考図書はスライディングモード制御に関する様々な設計方法を網羅しており、このブログで取り上げた設計方法は、ごく一例に過ぎません。切り替え平面 \(S\) を求めるための安定余裕度\(\varepsilon\)や、非線形制御入力\(u_{nl}\)の切り替え幅 \(k\)、チャタリング防止機能の平滑化項 \(\delta\) なども、とりあえず動かしてみた というレベルです。また、ロバスト性についても、モデル誤差や外乱に対するマッチング条件も考慮すべきですが、そういった点も考慮できていません。

浅学ゆえ間違いにお気付きの方は末尾のコメント欄からご指摘いただけると幸いです。


QooQ