MV-7009:Simulinkとのリモート連成シミュレーション
このチュートリアルでは、MotionSolveとSimulinkとのリモート連成シミュレーションインターフェースを使用し、S-Functionを介してSimulinkからモデルを実行する方法について学習します。
MotionSolveは、ソケットを介したプロセス間通信(IPC)アプローチを実装することで、2つのソフトウェアが遠隔地にある場合にSimulinkとの連成シミュレーションを行うことができます。
ソフトウェア要件とハードウェア要件
- MotionSolve
- MATLAB/Simulink(MATLABバージョンR2015a、Simulinkバージョン8.5以降)
- 64bitCPU搭載で、Windows 7/10以降が稼働しているPC
- Linux RHEL 6.6またはCentOS 7.27.2
シミュレーションの環境
本チュートリアルでは、MATLABがMachine “A”に、MotionSolveがMachine “B”にインストールされていると仮定します。以下の設定が可能です:
Machine "A" | Machine "B" | IPC連成シミュレーションは可能? |
---|---|---|
MATLAB/Simulink, Windows 64-bit | MotionSolve、 Windows 64-bit | ○ |
MATLAB/Simulink, Windows 64-bit | MotionSolve、Linux 64-bit | ○ |
MATLAB/Simulink、Linux 64-bit | MotionSolve、 Windows 64-bit | ○ |
MATLAB/Simulink、Linux 64-bit | MotionSolve、Linux 64-bit | ○ |
Machine "A" | Machine "B" | IPC連成シミュレーションは可能? |
---|---|---|
MATLAB/Simulink, Windows 64-bit(Windows 64-bit MotionSolveインストレーションが必要) | MotionSolve、 Windows 64-bit | ○ |
MATLAB/Simulink, Windows 64-bit(Windows 64-bit MotionSolveインストレーションが必要) | MotionSolve、Linux 64-bit | ○ |
MATLAB/Simulink、Linux 64-bit (Requires a Linux 64-bit MotionSolveインストレーションが必要) | MotionSolve、 Windows 64-bit | ○ |
MATLAB/Simulink、Linux 64-bit (Requires a Linux 64-bit MotionSolveインストレーションが必要) | MotionSolve、Linux 64-bit | ○ |

図 1. 本チュートリアルに使用される連成シミュレーション環境
倒立振り子のコントローラー
カート上に搭載された倒立振り子について考えてみます。振り子はその底部で、回転ジョイントによってカートに拘束されています。カートはX方向にのみ自由に並進します。振り子には初期回転速度が指定されており、それによって底部を中心に回転します。
図 2. 倒立振り子モデルの設定

図 3. コントローラーのブロック図
- は、モデル構成からの振り子の角変位です。
- ω は、振り子の重心を中心とした振り子の角速度です。測定の基準は参照グラウンドフレームです。
- x は、モデル構成からのカートの並進変位です。測定の基準は参照グラウンドフレームです。
- は、参照グラウンドフレームを基準として測定したカートの並進速度です。
- は、振り子の角変位から得られた参照信号です。
- は、振り子の角速度から得られた参照信号です。
- は、カートの並進変位から得られた参照信号です。
- は、カートの並進速度から得られた参照信号です。
計算した制御力に外乱を与えて、システム応答を評価します。制御力がカートのボディに作用し、カート質量の変位プロファイルと速度プロファイルが制御されます。
- Force_Vector_OneBody要素でモデル化した連続コントローラーを備えた倒立振り子モデルを使用することにより、MotionSolveのみでベースラインモデルを解析します(つまり、連成シミュレーションを実行しません)。これらの結果を、次のステップで同等の連成シミュレーションによる結果と比較します。
- 主にControl_PlantInputエンティティとControl_PlantOutputエンティティを追加することでSimulink連成シミュレーションのプラントとして機能できるように修正した、MotionSolveの倒立振り子モデルを確認します。
- Simulinkでコントローラーを確認します。
- 連成シミュレーションを実行して、スタンドアロンのMotionSolveモデルによる結果と、連成シミュレーションのモデルによる結果を比較します。
このシミュレーションを開始する前に、<altair>\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要素は、機構システムまたはプラントへの入力を定義します。このモデルについては、1つのみの入力が“Plant Input Simulink”ソルバーアレー内に定義されます。これは、Simulinkからの制御力を保持するソルバー変数のIDに設定されます。
図 5. MotionSolveへの入力チャンネルの定義 - Control_PlantOutput要素は、機械システムまたはプラントからの出力を定義します。このモデルについては、4つの出力が“Plant Output Simulink”ソルバーアレー内に定義されます。これらは、振子の回転角、振子の角速度、カートの変位およびカートの速度です。
図 6. MotionSolveからの出力チャンネルの定義Control_PlantInputおよびControl_PlantOutput要素を使って指定された入力には、それぞれPINVAL()、POUVAL()関数を用いてアクセスすることが可能です。Control_PlantInputおよびControl_PlantOutputはソルバー変数のIDをリストするため、これらの入力および出力変数は、VARVAL()関数を用いてアクセスすることもできます。詳細については、MotionSolveユーザーズガイドオンラインヘルプをご参照ください。
本モデルでは、下記のコネクションがあります:- Plant Input:カートに適用される制御力信号
- Plant Output:振子の角変位と角速度; カートの並進変位と速度
環境変数の設定
- コントロールパネル(Windows)
- MATLABをコールするシェル / コマンドウィンドウ(Windowsでのsetコマンド、またはLinuxでのsetenvコマンド)
- 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コマンドを使用:
Simulinkでモデル化されたコントローラーの確認
連成シミュレーションの実行
MotionSolveのみでの結果と連成シミュレーション結果の比較
Appendix
- Option 1:MotionSolveをMachine BのようにMachine Aに完全インストール
- Option 2:Machine Aにライブラリの一部をインストール
上記Option 2を行使した場合、Simulinkが置かれているマシンにコピー/インストールする必要があるファイルのリストには、以下のものが含まれます:
Windows | Linuxパス |
---|---|
mscosimipc.mexw64 | mscosimipc.mexa64 |
msdaemon.exe | msdaemon |
nuclient.dll | nuclient.so |
pthreadVC2.dll |
環境変数 | Windowsパス | Linuxパス |
---|---|---|
NUSOL_DLL_DIR | ..\motionsolve\remote_cosimfiles\ | ../motionsolve/remote_cosimfiles |
PATH | ..\motionsolve\remote_cosimfiles\;%PATH% | ../motionsolve/remote_cosimfiles:$PATH |
LD_LIBRARY_PATH | - | ../motionsolve/remote_cosimfiles: $LD_LIBRARY_PATH |
MS_SERVER_IP_ADDRESS | Machine “B”のIPアドレス | Machine “B”のIPアドレス |