Matlabユザコミュニティ

MATLAB & 金宝appSimulinkユ,ザ,コミュニティ,向け日本語ブログ

金宝appSimulinkモデル実行中の可視化方法まとめてみた!

こんには,トレニングエンジニアの遠藤と申します。
前回の投稿は5/14ということで,なんと5ヶ月ぶりの投稿です。時が経......。

このブログでは,"金宝app SimulinkとMATLABをなぐ"をコンセプトとして,"金宝app仿真软件API“や”应用程序设计とSimulink金宝appの連携方法にいて書いてきました。

今回は,金宝app仿真软件のモデル内でMATLABのコードを使う大きな動機の一つである仿真软件の可視化,特に”モデル実行中の可視化”についてまとめてみたいと思います。

金宝appSimulinkにおける可視化

金宝appSimulinkでシミュレションを行う上で,“可視化”は重要な要素の一です。モデルが正しく作られているか,パラメータの値は適切か,意図しない結果となる原因は何か,などをチェックする上では欠かせないプロセスになります。

さて,金宝appSimulinkにおける可視化には主に2のタプがあります。

  • モデル実行後の可視化

    シミュレ,ションを一度行い,そのログデ,タを使って可視化を行う方法です。様々なシミュレーションデータを詳細に検証する場合,複数のシミュレーション結果を比較する場合はこちらを使用します。

  • モデル実行中の可視化

    シミュレ,ションを実行中に,計算結果を逐次的に可視化していく方法です。ハードウェアと連携してストリーミング処理を行う場合など,リアルタイムにモデルが正しく動いているかを監視する必要がある場合,モデル実行中の可視化が必要になります。

前者については,ログデータさえ取ってしまえば豊富なMATLABの可視化関数を使うことができるため比較的簡単です。それに対し,後者はモデルの実行中,すなわち仿金宝app真软件モデル内で可視化処理を行う必要があるため,使える可視化機能は限られてきます。

ただ,モデル実行中に可視化したいデータの中には,范围ブロックで時間応答を見るだけでは十分でないケースも多いです。特にハ,ドウェア連携を行うなら,見栄えという意味でもデ,タの可視化の部分を充実させたいですよね。例えば下の動画は仪表盘を使っていい感じの用户界面を作ってます。

そこで,今回はモデル実行中の可視化方法にいてどのようなものがあるのか,簡単にまとめていきたいと思います。

金宝appSimulinkの標準機能を使った可視化

冒頭で”モデル実行中の可視化”は”金宝app仿真软件のモデル内でMATLABのコードを使う大きな動機の一つである”と書きましたが,もちろんMATLABを使わなくても仿真软件の標準機能だけでいろいろな可視化を行うことができます。以下に例を示します。

范围ブロック

まずは最もメジャ,な范围ブロックです。信号の時間応答をプロットしてくれます。范围ブロックはモデル実行後の結果の確認に使用される場合も多いですが、一定時間ごとに結果が逐次更新されるため実行中の可視化にも使えます。

また、范围のメニューの”ツール”- >“測定値”から”ピークの検出“や“信号の統計”を選ぶと,信号のピーク値や最大/最小値といった情報をリアルタイムで確認することができます。ストリ,ミングデ,タにフィルタをかける場合など,リアルタ@ @ムで信号の詳細情報が必要な場合に有効です

なみにスコプビュア機能を使うと,わざわざ信号に范围ブロックを繋がなくても同等の可視化を行うことができるので,モデル上の複数の信号を可視化する際はオススメです。

XY图形ブロック

XY图ブロックは1つ目の信号を横軸,2つ目の信号を縦軸としたグラフを描画するブロックです。适用范围は1の信号の詳細情報を確認するのが得意ですが,XY图形は2の信号の関係性を視覚的に確認したい場合に有効です

例えば物体の位置を制御するモデルの場合,xとyの応答を単体で見ても状況が分かりにくいため,x - yグラフを書いて経路を見たほうが正常に動作しているかどうかわかりやすいですよね。こういった場合はXY图形ブロックが便利です。

注意点として、范围ブロックとは違い,XY图には座標軸のオートフィッティング機能がありません。モデルの実行中でもXY图ブロックのパラメータは自由に変更可能ですので,もし途中で座標軸の範囲を変更したい場合は,ブロックパラメータウィンドウから座標範囲の値を変更しましょう。

DashboardラDashboardブラリ

DashboardラDashboardブラリ内のブロックにも仪表板范围ブロックやブロックなどモデル実行中に更新される可視化機能があります。なみに冒頭で紹介した動画で使われていたのはこのライブラリのブロック群です。

仪表盘ラ电子设备ブラリの可視化用ブロック群は,モデル上に直接シミュレ,ション結果を可視化することができるため,大量の范围ウィンドウの表示を切り替える,モデルの階層を移動しながら適切な范围ブロックを開く,といった手間が生じにくいのが大きな利点です。モデル上に一種のシミュレ,ションアプリを作ることができるため,前回の記事と同様,金宝appSimulinkにあまり慣れていない方とモデルをやり取りする際にも効果的ですね。

シミュレションデタンスペクタ

シミュレーションデータインスペクターは仿金宝app真软件の可視化機能の一つで,“選択した信号のログ”を設定した信号の時間応答を可視化することができます。多くの場合はシミュレーション実行後に検証,比較を行うために使われますが,一度モデルを実行してプロットする信号を選択しておけば,シミュレーション実行中にその結果を確認することが可能です。

シミュレションデタンスペクタを使う一番の利点は,実行中のシミュレ,ション結果だけでなく,過去のシミュレ,ション結果も合わせて可視化できる点です。例えば↑のGIFは前の実行結果を赤で表示しつつ,モデルのパラメータを変えて再度実行した結果を青でプロットしています。モデル実行中に過去の結果と比較したい場合は特に有効な可視化方法となります。

Matlabの関数を使った可視化

MATLABには仿真金宝app软件の標準機能よりも多くの可視化関数がありますので,モデル内でそれらの関数を使うことでより高度な可視化を行うことができます。モデル内でmatlab関数を使用する方法は複数ありますが,ここ

  • MATLAB函数ブロック
  • 解释MATLAB函数ブロック
  • MATLAB系统ブロック

の3にいて紹介しようと思います。

MATLAB函数ブロック(+coder.extrinsic関数

MATLAB函数ブロックは,ブロックの処理をMATLABコードで記述することができるブロックです。おそらくモデル上でmatlab関数を使用する機能としては一番有名かと思います。

しかし,MATLAB函数ブロックはシミュレーション実行時にMATLABコードをコード生成しますので,コード生成に対応していない関数は使用できません。MATLABの可視化関数は基本的にコード生成非対応ですので,そのままでは使用できない,ということになってしまいます。

そこで使用するのがcoder.extrinsicという関数です。この関数を使うと,指定した関数がコ,ド生成されずにmatlab側で実行されるようになります。これによってコード生成非対応の可視化関数もMATLAB函数ブロック内で使用することができます(詳しくはこのドキュメントを参照)。

使い方は,MATLAB函数ブロックのコ,ドの冒頭に编码器。外在を1行入れるだけです。可視化の関数を自分で.mファescルとして作成しておき,それを编码器。外在的で指定して使用する場合が多いかと思います。

函数func (u)

coder.extrinsic (“myDispFun”);
myDispFun (u);

结束

myDispFun。mのコ,ド生成は行われないため,内部では自由にMATLABのコ,ドを書くことができます。可視化に使うときには,永続変数を使ってデ,タ点を追加していく処理を書く場合が多いですね。例えば,次のコードは最初のステップで情节をし,それ以降のステップではデータを追加する処理になります。

函数myDispFun (u)

持续的p
如果isempty (p)
P = plot(u(1),u(2));
轴([0 10 0 10]);
其他的
p. xdata = [p.]XData u (1)];
p. ydata = [p.]YData u (2)];
结束

结束

ただし,永続変数を使うと次回以降のシミュレ,ションに値が持,越されてしまいます。そのため,シミュレーションを実行するごとに清楚コマンドで永続変数をクリアする必要がある点に注意が必要です。

後述する2のブロックと比べると,制約が少なくコ,ドも書きやすい,というメリットがあります。とりあえずこのブロックを使っておけば,可視化できない,ということは起きにくいかと思います。

解释MATLAB函数ブロック

解释MATLAB函数ブロックは,指定したMATLAB関数をMATLAB上で実行し,結果を仿真软件に返すブロックです。金宝app

MATLAB函数ブロックと違ってそもそもコ,ド生成が行われないため,coder.extrinsic関数での外部関数指定を行うことなくそのまま MATLAB 関数を使用することができます

可視化用の関数を作成してそれをブロックで指定するだけなので,非常に手軽に使えるのがメリットかと思います。ょっとした可視化や動きのテストを行う場合は便利です。

ただし,解释MATLAB函数ブロックには”入力は双型のスカラ,ベクトル,行列のみ”という,入力信号に対する大きな制約があります。他のデ,タ型や总线信号は対応してないので注意が必要です。

また,何かしらの出力信号が必要なので,描画だけ行いたいという場合は,適当なダミー値を出力して终结者ブロックに接続する,といった工夫が必要です(上の画像を参照)。

MATLAB系统ブロック

こらはMATLABの系统对象をモデル上で呼び出すことができます。通常は信号処理や通信システム等の状態量保持が必要となるモデルで使用するブロックですが,個人的に可視化を行う際に便利だった経験があるので,上記2つのブロックと合わせて紹介したいと思います。

MATLAB系统ブロックはデフォルトではMATLAB函数ブロック同様コード生成が行われるように設定されていますが,“シミュレーション実行方法”を”インタープリター型実行“に設定すると,解释MATLAB函数ブロックと同様にMATLAB上で処理が実行されるようになるため,コード生成非対応の関数も使用することができます。

MATLAB系统ブロックと上記2のブロックの最大の違いは,プロパティ(内部デタ)を持ことができる点です。

例えば(解释)MATLAB函数ブロックでデータ点を追加していくような処理を書こうとした場合,前述の通り永続変数にプロットのハンドルを格納する必要があります。

これに対し,MATLAB系统ブロックでは永続変数を使わなくても内部プロパティにプロットのハンドルを保存しておくことができます。プロパティの値はシミュレーションごとにリセットされるので,わざわざ清楚関数でリセットする必要はありません。

ただし,系统对象を作る必要がある関係上,ある程度の系统对象に関する知識が必要となるので,慣れてない方には少しハ,ドルが高いかもしれません。

その他の可視化方法

上述した金宝app仿真软件の標準機能およびMATLAB関数を使う以外の方法についても簡単にご紹介します。

·从ベントリスナ到機能を使った可視化

ちょっとマイナーな方法ですが,イベントリスナー機能を使ってもモデル実行中の可視化を行うことができます。

イベントリスナーとは,”特定のイベントが発生したときに登録しておいた関数を自動的に実行する”機能のことです。金宝appSimulinkにはadd_exec_event_listenerという関数が用意されており,モデル上の特定のブロックが実行されたときに,特定の関数を自動的に呼び出すことが可能です。

残念ながら,イベントリスナーの機能の使い方をここで詳細に説明しようとするとそれだけで結構なボリュームになってしまうため,ここでは紹介のみとさせていただきます。詳細はこらの例がとてもわかりやすいと思いますので,興味ある方はぜひご参考ください。

·ルボックスの専用ブロックを使った可視化

ルボックスの中にはモデル実行中の可視化に使えるブロックがあります。例えばDSP系统工具箱の频谱分析仪ブロックや计算机视觉工具箱の视频查看器ブロックなどが挙げられます。

各ツールボックスにどんなブロックがあるかについては挙げ始めるとキリがないので,気になる方はドキュメントの左の”カテゴリ”からツールボックスを選び,上部メニューの”ブロック”からブロックリストをご確認いただければと思います。

おわりに

今回はS金宝appimulinkモデルの実行中の可視化方法にいてご紹介しました。

范围ブロックだけではわかりづらいという場合は,専用のブロックやMATLABコードの力を借りることでよりわかりやすい形に可視化でき,モデルの開発,検証を効率よく行えるようになるかもしれません!

|

댓글

댓글을남기려면링크를클릭하여MathWorks계정에로그하거나계정을새로만드십시오。