Stateflowでの状態遷移モデルの動的シミュレーション

ソフトウェアのモデル駆動開発ツールの一つに、Stateflowがある。

Stateflowは、MATLAB/Simulink上で状態遷移モデルと制御フローモデルを動かすための環境に該当する。
この環境、母体となるMATLAB/Simulinkが組み込み制御システムならあらかたシミュレートできる超高機能ツールなので、ソフトウェア設計モデルのツールとしてはオーバースペックと言えるかもしれない。ただMBSEのようにシステムレベルからモデル駆動やモデルベースの開発を行っている場合は、モデル駆動開発環境として有望な選択肢になると思う。

あまり情報がないので今回簡単に紹介したい。

モデルの記述

題材として、黒線を伝って走るライントレーサーを扱う。
なおMATLAB/Simulinkは、制御理論や信号処理のライブラリが充実しているので制御システムレベルからシミュレートしてこそ価値が出るけれど、今回はあくまで例示としてソフトウェア設計モデルのみを扱う。

全体のシステムのモデルは以下。

f:id:goyoki:20160414005646p:plain

「Line Sensor」がライントレーサーの右側センサ・左側センサの入力で、「Motor Signal」が(現実からかなり簡略化しているけれど)右側モータの駆動信号、左側モータの駆動信号を示す。
真ん中の「Line Tracer」がソフトウェア処理のモデルになる。このモデルを状態遷移モデルで記述・実行できるようにするのがStateflowになる。


「Line Tracer」の中のモデルは以下。ソフトウェアの状態遷移モデルを記述している。なおStateflowでは、状態遷移モデルを状態遷移図でも状態遷移表でも書けるようになっている。

f:id:goyoki:20160418005501p:plain

処理としては、一定周期ごとにセンサ入力を判定し、直進、左折、右折を実行するようにしている。またセンサが両側とも反応しない異常状態では人手で位置直しすることを期待して停止する。

モデルのシミュレーション

システムの「Line Sensor」はSignal Builderと呼ばれるもので、Excelで入力パターンを指定できる。
例として、停止、右折、左折、直線それぞれを網羅するセンサ入力データのパターンを0秒から8秒分まで指定し、その間のモデルの動きをSimulinkでシミュレートする。
シミュレート結果である入出力の推移は以下の様に表示される。

f:id:goyoki:20160418005616p:plain

指定したセンサ入力パターンに応じて、状態遷移モデルが動作し、モータが駆動されていることがわかる。
なおこうした入出力のプローブだけでなく、状態遷移をアニメーションで示したり、構造的な検査を行ったりすることもできる。