MATLABで設計した状態フィードバック制御器をSimulinkでシミュレーションしてみる
前回はMATLABで以下の台車型倒立振子の状態フィードバック制御器を設計して初期状態の応答をシミュレーションしてみた。
今回はSimulinkを使って同じシミュレーションをやってみたいと思う。ちなみに状態方程式や使用するmファイルは前回と全く同じなので、前回のブログを参照↓
開発環境
MATLAB online(MATLAB R2022a)
Simulink
Control System Toolbox
初期状態の応答のシミュレーション
まずは以下のmファイルを実行して、ワークスペースに必要な値を一通り読み込む。前回のmファイルとほぼ同じだが、今回はMATLAB上でシミュレーションをする必要はないので「% Simulation」以下の部分は消している。
% Parameters M = 10; m = 1; L = 2; g = 9.8; % State Space A = [0 1 0 0 0 0 -3*m*g/(4*M+m) 0 0 0 0 1 0 0 6*g*(M+m)/(L*(4*M+m)) 0]; B = [0 4/(4*M+m) 0 -6/(L*(4*M+m))]; C = eye(4); D = zeros(4,1); % Check Controllability Co = ctrb(A,B); rank(Co) % Pole/Feedback Gain p = [-0.5 -1.0 -1.5 -2.0]; K = place(A,B,p);
次にSimulinkを起動する。Simulinkを起動する場合は、以下のSimulinkのボタンをクリックすればOK。
細かい操作説明は公式のチュートリアルを読んだり動画を見たりするのが一番だと思うのでここでは割愛するが、最終的なブロック図と各ブロックのパラメータは以下に記載しておく。まず今回は以下のようにブロックを組んだ。
State-Spaceのブロックは、mファイルで定義した各行列や初期条件などを設定した。
Gainもワークスペースの行列Kを設定したが、ゲインにマイナスをつけている点に注意。これでmファイルでのシミュレーションでss(A-B*K,B,C,D)と書いた部分と同じ関係になる。
ブロックを配置できたのでシミュレーションを実行してみる。まず、左側のシステムへの入力につないだScopeをダブルクリックしてみる。State-Spaceで定義したシステムに対して以下のように入力が入っていることがわかる。
次に、右側の出力につないだScopeをダブルクリックして状態変数の応答をみてみる。mファイルでのシミュレーションと同じく、θが0.1[rad]傾いた状態からスタートして、各状態変数が0に収束して安定化していることがわかる。
台車に力を加えてみた場合を想定したシミュレーション
やりたいことは達成できたが、せっかくなのでもう少し遊んでみる。さきほどのSimulinkのブロックを少しいじり、以下のようなブロックに変更してみた。
このブロック図では左端のPulse Generatorで、一定時間ごとに1Nの入力を加えている(台車型倒立振子を左からツンツンつついているイメージ)。
Pulse Generatorの波形をScopeで見ると以下のような感じ。
なお、今回はPulse Generatorの入力からフィードバックした値を引いているので、ゲインのKは符号は+にしている。
この状態でシミュレーションを実行してみる。まずシステムのへの入力波形をScopeで見てみると、前節のuの波形にPuluse Generatorからの出力が足されていることがわかる。
次に状態変数の応答をScopeで見てみると、Pulse Generatorからの入力がくるたびに波形が乱れているが、発散せずにおおむね振幅0付近でとどまっている。この結果を見ると、台車型倒立振子をある程度横からツンツンつついても倒立状態は維持できそう。
これでSimulinkの使い方もざっくりつかめた。ただ、波形だけみても少し味気ない。
ということで、私がゲーム製作でちょくちょく使っているUnityで台車型倒立振子のモデリング&MATLABで設計した状態フィードバック制御器を実装してみて、実際に制御の様子をアニメーションで確認してみたいと思う。
※Math WorksのツールであるSimscape Multibody&Mechanics Explorerを使えば、モデリングした倒立振子のアニメーションも表示できる。ただ、私が使っているMATLAB onlineでは制限があってMechanics Explorerが使えないので、今回はUnityでやってみることにした。MATLAB onlineの制限については以下を参照。
https://jp.mathworks.com/products/matlab-online/limitations.html
参考文献
この本のMATLAB/Simulink 6か月ライセンスを使ってやってます↓
Interface 2022年 9月号
MATLAB/Simulink記事まとめ
MATLABとSimulinkの記事は以下にまとめてます。