短期連載：MBDでシミュレーションをしてみる＜第0回＞

# はじめに
<!-- 発端や概要を記載 -->
　社会人になってからずっと、**MBD：Model-Based Development**の手法を用いた様々なシステムの開発に携わって来ました。


短期集中連載として、MBDの肝であるシミュレーション環境の構築について、簡単に記事を書いてみたいと思います。

MBDは主に自動車業界を主流として、Mathworks社のソフトウェアである**MATLAB/Simulink**(とその周辺のツールチェイン)を用いて実現されることが多いです。この記事や今後の連載(予定)も例に漏れず、MATLAB/Simulinkを利用して構築してみたいと思います。


# 目次
<!-- タイトルとアンカー名を編集 -->
1. [モデルって何？シミュレーションとは？](#Chapter1)
2. [今後の連載予定](#Chapter2)
3. [参考文献](#reference)

<!-- 各チャプター -->
<a id="#Chapter1"></a>
# モデルって何？シミュレーションとは？

例えば、自動車に乗っていて、車速を目標の速度にしたいと思っているとします。

![speed_control_image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3461837/b1499ef1-57ed-07e4-9d04-a97a2ff0c8e0.png)


運転手は運転席に座って、アクセルとブレーキのペダルを操作します。

車は、アクセルとブレーキの踏み込み具合から速度が決まり、その結果が運転席のメーターに表示されます。運転手はそのメーターを見ながら、自分の思っている速度になるように、操作する量を考えてペダルを踏むわけです。

この状況をSimulinkのモデルで表現すると、例えば以下の様になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3461837/b705170b-a5dc-cf12-a39b-71cf5aca42bf.png)

* コントローラモデル：車両の速度を受けて、アクセルとブレーキの踏み込み量を決定する。かなりテキトーに書いていますが、現在速度と目標速度の差分に応じてフィードバック制御(P制御)をして操作量を決めさせています。中身は以下の様な感じ。

![controller_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3461837/b0e04df8-c0bc-1106-db9b-ac1dcceaf0d2.png)


* プラントモデル：コントローラモデルで制御される対象の振る舞いを記述したモデル。この場合はアクセルとブレーキの踏み込み量から車速を計算します。中身は以下の様な感じ。

![plant_sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3461837/c30d5465-b14a-9d42-4bad-d45b081b1b13.png)

こちらもかなりテキトーです。アクセルとブレーキの操作量から、車速を積分器を使って雑に計算させています。こんな車は存在しませんが、まぁ例ということで。

これで、制御する側とされる側、2つの振る舞いを持つモデルが構築できました。では、これらを組み合わせてシミュレーションをしてみましょう。MATLAB/Simulinkを使ってシミュレーション実行すると以下の様にグラフで時系列で結果を表示できます。

![sample_sim_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3461837/c9df5eec-d05f-539b-725b-aef0fcbf7c21.png)

黄色線が目標速度です。シミュレーション開始から25秒までは時速85kmを目標に、25秒以降は時速20kmが目標値という条件にしています。

青線が制御された結果の車速です。なんだかそれっぽい感じに目標速度に追従できていることがわかります。少し目標速度に到達するまでに時間がかかってるかもしれませんが、この人は運転が上手ですね。

試しに、アクセルをもっと踏み込みやすい感じのコントローラモデルにパラメータを変えてシミュレーションしてみます。

![sample_sim_result_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3461837/fa6c888f-6b0b-bf71-0b1c-0a1676ec42a6.png)

目標速度は85km/hなのに、100km/hくらいまで加速してしまいました、この人の運転には問題がありそうです。まあそもそも、0.1秒とかで時速100km/hに到達しているので、プラント側の計算の雑さにも問題がありそうですが・・・今は例なので目をつぶることにしましょう・・・。

ということで、シミュレーションにより車両制御を可視化して確認することができました。モデル化してシミュレーションすることにより、

* 実機が無い環境でも机上で動作を検証できる
* 動作の可視化により、皆でイメージを共有しやすい

などのメリットを得られます。これは別にMBDに限った話ではなく、モデル化する、シミュレーションすることの一般的なメリットです。MBDのデファクトスタンダードになっているMathworks社MATLAB/Simulinkを使ってモデル化する、シミュレーションすることのすごく雑なイメージはこんな感じです。

MBDでは他にもツールチェインにより自動化の恩恵が受けられたり、品質の担保ができたり、いろんなメリットがあります。なのでMBDはいろんな業界で開発手法として採用されていますが、またその辺の話も機会があれば。

<a id="#Chapter2"></a>
# 今後の連載予定

以下、今後の連載の予定です。

今回はジャブとして、アホみたいなモデルを書いて導入だけを書いてみましたが、さすがにこのレベルの記事を量産しているといろんなところからクレームが来そうなので(笑)、次回からはもうちょっと真面目にモデルを書いて遊びます。三相交流モータで動くEV自動車のシミュレーション環境を構築して、遊んでみる予定です。構想としてはこんな感じ。

![EV_simulator.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3461837/a52184c1-c1ce-0560-5a30-ca8ff0b53f6a.png)



＜第1回＞三相交流モータ制御ソフトと、三相交流モータプラントモデルを組んでシミュレーションしてみよう

＜第2回＞車両と周辺環境をモデルで組んでシミュレーションしてみよう

＜第3回＞Unityと組み合わせて3Dでシミュレーションしてみよう

＜第4回＞ただ走るだけではつまらないのでUnityで工事してみよう

<a id="#reference"></a>
# 参考文献
- [Mathworks社　MBDとは？](https://jp.mathworks.com/discovery/mbd.html)