バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia-backnumber/
はじめに
前回は、状態空間モデルをシミュレーションする上で必要な情報を整理。
各ツール、各言語で実際に試してみる。
※ ただし、MATLABはControl System Toolboxが手元に無いので、Simulinkの状態空間ブロックで代替。
というわけで、まずはMATLAB/Simulinkから
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
MATLAB/Simulinkで状態空間モデル

まずはMATLASB/Simulinkで動作確認かな。

必要なブロックが何個かあるから、
ブロックの説明、接続、実際のシミュレーション結果の流れで確認していこう。

ちなみに必要なブロックは何になるの?

以下だな。
- State-Space
- Step
- Scope
- Mux
State-Space

まずはState-Space。
ライブラリブラウザのContinuousの中にある。


これが状態空間モデルを実現してくれるブロックだねー。
Step

次はStep。
Sourcesの中にある。


これは・・・。
状態空間モデルへの入力用?

そうだね。
まずはシンプルなStep入力が良いだろう。
他のブロックでもOKだ。
複雑な入力をしたい場合は、SignalBuilderを使っても良いだろう。
Scope

次はScope。
Sinksの中にある。


これは出力確認用だね。
Mux

最後はMux。
Signal Routingの中にある。


これは・・・信号を束ねるやつだよね?
何に使うの?

出力と入力を束ねてScopeに入れるためだな。
同一Scope内の同一軸で複数の信号を見れるようになる。

なるほど。
入力と出力を同時に見るために使うのね。
接続について

そして、それぞれのブロックを以下のように接続する。


Simulinkだと入出力が分かり易くて良いねー。
諸設定

そして各ブロックに設定をする。
といっても、State-SpaceとStepだけだけど。

Stepはステップ時間を5。
State-Spaceは各行列パラメータ。
行列については前回だした以下にあわせる。
\(
\boldsymbol{A}=
\begin{bmatrix}
0 && 0 \\
1 && 0
\end{bmatrix}
\)
\(
\boldsymbol{B}=
\begin{bmatrix}
1/m \\
1
\end{bmatrix}
\)
\(
\boldsymbol{C}=
\begin{bmatrix}
1 && 0 \\
0 && 1
\end{bmatrix}
\)
\(
\boldsymbol{D}=
\begin{bmatrix}
0 \\
0
\end{bmatrix}
\)


シミュレーション

そして実際のシミュレーション結果が以下。


ちゃんと動いてそう!

でも、なんかどんどん加速し続けて行っているような・・・。

力を加え続けてるし、摩擦を加味してないからね。
宇宙空間で一方向に力を加え続けた際の結果と思えば良いと思うよ。

なんかいきなり宇宙空間とか・・・。
まぁいろいろ条件を入れると複雑になるから仕方ないのか・・・。
まとめ

まとめだよ。
- MATLAB/Simulinkで状態空間モデルのシミュレーション。
- 必要ブロックはState-Space、Step、Scope、Mux。
- 状態空間モデルの各行列の設定はState-Spaceの詳細設定で可能。
- シミュレーションは摩擦等を無視しているので宇宙空間での挙動と思って。
バックナンバーはこちら。
コメント