先日、MBDって何なんやというのを軽く書いてみたわけですが(こちら参照)、実際に手を動かしてやってみないと、MBDだとどういうところが嬉しくて、どういうところが大変かというのもわかりにくいと思います。
ということで、Scilabを使って試しにモデルを作ってみましょう。
ダウンロードはこちらから。
Scilabを使うことのメリット
なんといっても無料。これにつきます。お金かかるのとかからないのとでは手軽さが違う。
正直、MATLABに慣れてる身からすると、レイアウト整えやすさとか、直感的な使いやすさとか、細々したところでMATLAB(simulink)っていいなと思うところはありますし、真面目に使っていくのであれば買ったほうが色んなことができるし、便利だと思います。が、諭吉単位で出費するのでなかなか手を出しにくい。。
学生であれば生協とかでstudent版が買えますし(もちろん商用利用不可。アクティベートには学生証の情報が必要)、そっちはいくつかオプションのパッケージがついて1万円程度なので、かなりお得な感じになってます。私自身も2013の学生用持ってますが、結構便利でしたよ。
(さすがにもう使えないけど)
簡単にモデルを作ってみる
ということで、さっそくScilabを立ち上げてみましょう。
こんな感じでコンソールが立ち上がります。MATLABみたいな感じ。
ここで、ツールバーのところにある”xcos”というものをクリックして立ち上げます。
要はScilab版 simulink です。見た目もかなり本家に似てます。
パレットブラウザ部分に色んなブロックがあるので、あとはこれを組み合わせてシミュレーションに用いるモデルを作るだけ。
例えば、ステップ入力に対して、むだ時間と一時遅れを含んだ出力となるようなモデルを作ってみます。
ブロックをつなげてみるとこんな感じ。
むだ時間とか一次遅れって何ぞや?という話は、下記を参考にしてみてください。

これらは割と色んなものに含まれる要素なので、今回のモデル番シンプルですが応用先は色々あると思います。
上記の説明だけだといまいちイメージが湧かない、という人のために、クルマのデータを例に見てみましょう。
赤線がスロットル開度、青線が車速ですが、スロットルが開いてから車両が加速(発進)するまでに若干のラグがあると思います。つまり、車両への入力をスロットル開度、出力を車速とみたとき、入出力の間にむだ時間を含んでいることがわかります。
もっと言うと、スロットルはユーザーがアクセルペダルを踏みこんだ量に応じて開閉します。実際、ユーザーは緑点線のような踏み方をしているので、ユーザーの踏み方(目標とする開度)に対してみると、実際の開度の動きは遅れをもっていることになります。
さて、モデルに話を戻します。
実際にシミュレーションをしてみると、下記のようなグラフが得られます。
点線が入力、赤線が出力です。確かにむだ時間と一次遅れを表現できていると思います。
モデルを作るのに考えるべきこと
ざっくりscilabでのモデルの作り方を書いてきましたが、実際にMBD開発の中でモデルを作っていくときに、どんな事を考えなくてはならないかというのも書いておこうと思います。
モデルで「何をしたいのか」を明確にする
モデルというのは、制御対象の「ある側面」の振る舞いを図式および数式化したものです。よって、「何をしたいのか」でどんなモデルを作るべきかが変わってきます。
例えば、自動車の加速性の検討をしたいのにエアコンの動きをモデル化するのは明らかにおかしいですよね。
まぁそれは極端としても、やりたいことに対してモデルは極力シンプルに作るべきものであるということを念頭に置く必要があります。むだな部分まで再現してしまうと、ただ計算が重くなってしまうだけなので。
モデルの作り方は2通りある
制御対象のモデルを作るにあたって、やり方が大きく2通りあります。
1つ目は、上で作ったように入出力関係に着目して作る方法。内部構造はブラックボックスでよくわからないけど、入力に対してむだ時間があるとか、これぐらい遅れて出力されるとか、そういった情報がわかっている場合に有効な方法です。
2つ目は、物理的な内部構造をそのままモデル化して組み合わせる方法。制御対象がどんな部品で構成されていて、それぞれの部品の動きがどんな関係式で表されるかがわかっていれば、それをモデル化して組み合わせることで制御対象のモデルが出来上がります。
それぞれに一長一短あるので、現場では両者を組み合わせてモデルを作ることが多いです。
例えば、内部構造が複雑で、関係式で表しにくいような部品は入出力の関係からモデル化しておき、それ以外の部品は内部構造をそのままモデル化して組み合わせる、といった感じ。
モデルの作り方は一長一短
入出力関係のモデルは表現がシンプルになる一方、実物の動きとモデルの動きを合わせるため、色んなテスト入力を加えて出力を観測して、どれぐらいの遅れだとか、むだ時間がどれぐらいだとかを推定する必要があります(これを同定といいます)。つまり実物のデータがないと作れません。
逆に、内部構造から作るモデルは、構成部品の基本的な物理特性(重さ、粘度など)がわかってさえいれば、制御対象そのものがなくても動きを精度よく再現できるモデルが作れます。ただし、構造が物理式で表現できていないとモデル化できません。
なので、構造がはっきり分かっている部分はそれをモデルにし、表現しにくいところは実験結果から入出力の関係をみてモデル化する、という方法がよくとられます。
「嬉しさ」はどういうモデルかによって変わってくる
モデルベースで開発することで何が嬉しいのか?というところですが、一言でいえば「実物がなくても動きをシミュレーションして特性把握ができる」という点。
ここで、「モノがなくても」というところはさらに2つに分けることが出来て、
- 実物が完成していなくても、部品の素性さえ分かっていれば作る前にシミュレーションできる
- 実物は完成しているが、他の誰かが使っているなどの理由でモノが使えない時でもシミュレーションで確認きる
という嬉しさがあります。
基本、モノづくりをする行程では何度も試作と試験評価を重ねて完成度を上げていくわけですが、シミュレーションを上手く活用すれば、試作品を作ったり試験評価する手間が省けます。つまり、その分開発にかかるコストと時間を削ることができるわけです。
とはいえ、そのためには上で書いたようなモデル化の仕方が重要になってきて、単なる入出力関係のモデルだけでしか表現できないと、実物を作る前にシミュレーションをすることはできません。(ただし、作りたいものが制御対象ではなく、制御器の場合はその限りではない)
なので、ある程度作りたいものの構造を把握できているということが、モデルベース先行で開発ができる前提になると思います。
もちろん、先行でモデルが使えなくとも、「モノは出来上がっているけど膨大なパターンの評価をしないといけない」といった状況であれば、シミュレーションを活用して評価の手間を少なくすることができると思います。
まとめ
実際にモデルを作ってみると、どういうことが出来るのかを実感とともに理解できるかなと思い、簡単なモデルづくりを通して書いてみました。
モデルベース開発に興味があるけどよくわからん、という方は試しにscilabを使ってみてはいかがでしょうか。
scilabは関連書籍なんかもけっこう出てるので、不安であれば下記のような本を参考にしてみてもいいかもしれません。
コメント