ロボット研究者の戯言

Simulinkでオリジナルのブロックを作成

   

今回はSimulinkでオリジナルのブロックを作成する方法を紹介します.

MATLAB/Simulinkはロボット分野のみならず様々な分野で使われており,数値計算ソフトのデファクトスタンダードとなっていますね.

Simulinkはグラフィカルなプログラミング言語で,簡単に(制御工学でブロック線図を習った人は特に)シミュレーションを行うことが出来,非常に重宝します.

しかし,モデルが複雑になるにしたがって可読性は低下していきます.当たり前ですが.

今回はc言語などのテキストベースのプログラミング言語と同様に,ある機能を関数化することにより可読性を大きく向上する方法について述べます.(簡単なのですぐに終わります…)




サンプルモデル

今回は以下の様なバネ・ダンパのモデルをサンプルとして使います.

バネ・ダンパ系

図1:バネ・ダンパ系

 

入力は「力」,出力は「変位」です.

入力から出力を計算するために4つのブロックが使用されていますが,可読性を上げるためにはより抽象的な(高レベルな)記述が望まれます.

つまり,この場合は力が入力されて変位が出力されるブロックが1つだけあれば良いのです.

そのような場合にはSimulinkのサブシステムという概念を用います.

サブシステム

サブシステムはC言語などで言う「関数」と同様のものです.

サブシステムを作成するにはサブシステムの中に入れ込む部分を複数選択し,「Ctrl + G」でサブシステムを作成することが出来ます.また,複数選択をして「右クリック」→「選択からサブシステムを作成」としても可能です.

実際にサブシステムを作成した場合のモデルが以下です.

サブシステム

図2:サブシステム化

 

真ん中のブロックがバネ・ダンパ系のモデルで,このプログラムでなにをやっているのかが分かりやすくなりました.

これでも十分わかりやすいのですが,もう一工夫してさらに直感的に理解可能なブロックにしてみましょう.




イメージの設定

先ほど作成したサブシステムはブロックの下に「Spring-Damper」と書いてあるので,バネ・ダンパ系だなというのがすぐ分かりますが,イラストで伝えることができるとより早く理解することが出来ます.(経験上Simulinkでは文字を極力使わない方がすっきりして可読性が高くなります.)

まずはIllustratorやペイントなどのソフトを使ってイラストを作りましょう.

作成したイラスト

図3:作成したイラスト

 

イラストを作成したら適当な場所にイラストを保存します.

次にサブシステムを右クリックし,「マスク」→「アイコンイメージの編集」で保存した画像を指定します.

するとサブシステムが以下のようになります.

オリジナルブロック

図4:完成したブロック

 

このようにひと目でバネ・ダンパ系であることが分かるようになりました.

これだけでも大分分かりやすくなったのですが,もう一工夫します.

パラメータの設定

図1を見るとわかりますが,ばね定数をspring,減衰係数をdamperとしています.

これではコマンドライン等でこれらのパラメータを定義する必要があり,simulinkから操作が出来ません.

ここで「マスク」という機能を使用して,これらのパラメータをブロックの設定として操作してみましょう.

サブシステムを右クリックし,「マスク」→「マスクの編集」をクリックすると,マスクエディタが起動します.

そこで「パラメーターとダイアログ」というタブを開き,以下のように設定します.

マスクエディタ

図5:マスクエディタ

 

このようにすることでサブシステムがマスク化されます.サブシステムをダブルクリックしても内部のブロックが展開されず,パラメータを編集する画面が表示されます.

図6:パラメータ設定画面

図6:パラメータ設定画面

 

マスク化はc++などの言語で言うと,privateなメンバ変数の定義に似ています.

このように具体的な(低レベルな)部分は隠すことでプログラム全体の構成を把握しやすくことが出来,保守性の向上に伴うバグの減少や可読性の向上が期待できます.

 

 - MATLAB/Simulink , , , , , ,