MV-7002:Simulinkとの連成シミュレーション
このチュートリアルでは、MotionSolveとSimulinkとの連成シミュレーションインターフェースを使用し、S-Functionを介してSimulinkからモデルを実行する方法について学習します。MotionSolveでは、プロセス間通信(IPC)手法を使用してSimulinkとの連成シミュレーションが実行されます。
IPC連成シミュレーションでは、2つの独立したプロセスのそれぞれでソルバーが1つ実行され、ソケットを介してこれらのプロセス間でデータが交換されます。
ソフトウェア要件とハードウェア要件
- MotionSolve
- MATLAB/Simulink(MATLABバージョンR2015a、Simulinkバージョン8.5以降)
- 64ビットCPU搭載で、Windows 7/10以降が稼働しているPC
- Linux RHEL 6.6またはCentOS 7.2注: MATLAB R2019a以降は、Windows 10またはRHEL 7.8が必要。
倒立振り子のコントローラー
カート上に搭載された倒立振り子について考えてみます。振り子はその底部で、回転ジョイントによってカートに拘束されています。カートはX方向にのみ自由に並進します。振り子には初期回転速度が指定されており、それによって底部を中心に回転します。
- は、モデル構成からの振り子の角変位です。
- は、振り子の重心を中心とした振り子の角速度です。測定の基準は参照グラウンドフレームです。
- は、モデル構成からのカートの並進変位です。測定の基準は参照グラウンドフレームです。
- は、参照グラウンドフレームを基準として測定したカートの並進速度です。
- は、振り子の角変位から得られた参照信号です。
- は、振り子の角速度から得られた参照信号です。
- は、カートの並進変位から得られた参照信号です。
- は、カートの並進速度から得られた参照信号です。
計算した制御力に外乱を与えて、システム応答を評価します。制御力がカートのボディに作用し、カート質量の変位プロファイルと速度プロファイルが制御されます。
- Force_Vector_OneBody要素でモデル化した連続コントローラーを備えた倒立振り子モデルを使用することにより、MotionSolveのみでベースラインモデルを解析します(つまり、連成シミュレーションを実行しません)。これらの結果を、次のステップで同等の連成シミュレーションによる結果と比較します。
- 主にControl_PlantInputエンティティとControl_PlantOutputエンティティを追加することでSimulink連成シミュレーションのプラントとして機能できるように修正した、MotionSolveの倒立振り子モデルを確認します。
- Simulinkでコントローラーを確認します。
- 連成シミュレーションを実行して、スタンドアロンのMotionSolveモデルによる結果と、連成シミュレーションのモデルによる結果を比較します。
このシミュレーションを開始する前に、<installation_directory>\tutorials\mv_hv_hg\mbd_modeling\motionsolve\cosimulationフォルダにあるすべてのファイルを作業ディレクトリ(このチュートリアルでは<working directory>と表記します)にコピーしておきます。<altair>は、の製品のインストール先へのフルパスです。
MotionSolveモデルのベースライン解析の実行
このステップでは、単一ボディの作用のみのベクトル荷重(Force_Vector_OneBody)を使って、MotionSolveで制御力をモデル化します。カート上の荷重は次のように計算されます:
、ここで、
は外乱力、
は制御力、
は各エラー信号に適用されるゲイン
は入力シグナル上のエラー(参照値と実際の値との差)
振子の角変位と速度はそれぞれ、式AY()とWY()を用いて得ることができます。同様に、カートの並進変位と速度はそれぞれ、式DX()とVX()から得られます。
制御系内のプラントの定義
MotionSolveモデルには、Simulinkモデルへの入出力コネクションを指定するためのメカニズムが必要です。上記で用いられたMotionSolveモデル(XML)はControl_PlantInputおよびControl_PlantOutputモデル要素を含み、これらのコネクションを提供するよう修正されます。本チュートリアルではこの部分は既に行われており、自身の<working directory>からモデルInvertedPendulum_Cosimulation.mdlを開くことによって、それを確認することができます。
このモデルには、2つの追加のモデリングコンポーネントが含まれています:
成分名 | コンポーネントの種類 | 詳細 |
---|---|---|
Plant Input Simulink | プラント入力 | このControl_PlantInput要素は、MotionSolveモデルへの入力を定義するために使用されます。 |
Plant Output Simulink | プラント出力 | このControl_PlantOutput要素は、MotionSolveモデルからの出力を定義するために使用されます。 |
Control_PlantInputおよびControl_PlantOutput要素を使って指定された入力には、それぞれPINVAL()、POUVAL()関数を用いてアクセスすることが可能です。Control_PlantInputおよびControl_PlantOutputはソルバー変数のIDをリストするため、これらの入力および出力変数は、VARVAL()関数を用いてアクセスすることもできます。詳細については、MotionSolveユーザーズガイドをご参照ください。
本モデルでは、下記のコネクションがあります:
- Plant Input:カートに適用される制御力信号
- Plant Output:振子の角変位と角速度; カートの並進変位と速度
環境変数の設定
- コントロールパネル(Windows)
- MATLABをコールするシェル / コマンドウィンドウ(Windowsでのsetコマンド、またはLinuxでのexportコマンド)
- MATLAB内でのsetenv()コマンドの使用
これらのコマンドを以下に示します:
環境変数 値 Windowsシェル Linuxシェル MATLABシェル PATH \mypath set PATH=\mypath setenv PATH \mypath setenv('PATH','\mypath')
連成シミュレーションのセットアップ
連成シミュレーションを生成するSimulink内の中核的機能は、S-Function(System Function)ブロックです。このブロックは、その挙動を定義するためにS-Functionライブラリ(動的に読み込まれるライブラリ)を必要とします。MotionSolveによってこのライブラリが提供されますが、S-Function側でこのライブラリを検出できる必要があります。MATLAB/SimulinkがS-Functionを検出するのを助けるために、ユーザーは、MATLAB/Simulinkがライブラリの検索に使用するパスのリストにS-Functionの場所を追加する必要があります。
MotionSolveとの連成シミュレーションのためのS-Functionライブラリはmscosimipc
と呼ばれています(IPC(TCP/IPソケット)コミュニケーション用)。このファイルは、<installation_directory>\hwsolvers\motionsolve\bin\<platform>にインストールされています。
このファイルの場所は、MATLABのサーチパスに追加し、S-Functionがmscosimipc
を使用できるようにする必要があります。
これは、以下のいずれかの方法で行うことができます:
-
メニューオプションを使用:
-
MATLABコマンドを使用: