MotionSolve
MotionSolve

2022

  1. ホーム
  2. チュートリアル

    インタラクティブなチュートリアルを使用してMotionSolveの機能について説明します。

  3. 連成シミュレーション

  4. MV-7009:Simulinkとのリモート連成シミュレーション

    このチュートリアルでは、MotionSolveとSimulinkとのリモート連成シミュレーションインターフェースを使用し、S-Functionを介してSimulinkからモデルを実行する方法について学習します。

  • 新機能
  • 概要
  • チュートリアル
  • MotionSolveユーザーズガイド
  • MotionSolveリファレンスガイド
索引
MotionSolve

2022

MotionSolve
  • 新機能

    MotionSolve 2022の新機能について説明します。

  • 概要

    MotionSolve®は、マルチボディシステムの性能を解析、評価、最適化するための統合ソリューションです。

  • チュートリアル

    インタラクティブなチュートリアルを使用してMotionSolveの機能について説明します。

    • モデルファイルへのアクセス

      必要なモデルファイルへのアクセスとダウンロードの方法を学びます。

    • 概要

    • 剛体の動解析

    • MDL(モデル定義言語)

    • 弾性体の動解析

    • 上級のシミュレーション

    • 最適化-DOE-確率統計解析

    • 耐久性–疲労解析

    • 自動化

    • ユーザーサブルーチン

    • 連成シミュレーション

      • MV-7010:Activateとの連成シミュレーション - クワッドローターの制御

        本チュートリアルでは、連成シミュレーションでMotionSolveとActivateを用いてクワッドローターを制御する方法について学習します。

      • MV-7011:Functional Mockup Interface(FMI)を介したActivateとの連成

        本チュートリアルでは、FMIを介してActivateと連成するためにMBSモデルをセットアップするプロセスについて学びます。

      • MV-7002:Simulinkとの連成シミュレーション

        このチュートリアルでは、MotionSolveとSimulinkとの連成シミュレーションインターフェースを使用し、S-Functionを介してSimulinkからモデルを実行する方法について学習します。MotionSolveでは、プロセス間通信(IPC)手法を使用してSimulinkとの連成シミュレーションが実行されます。

      • MV-7009:Simulinkとのリモート連成シミュレーション

        このチュートリアルでは、MotionSolveとSimulinkとのリモート連成シミュレーションインターフェースを使用し、S-Functionを介してSimulinkからモデルを実行する方法について学習します。

      • MV-7008:AcuSolveとの連成シミュレーションの概要

        本チュートリアルでは、AcuSolveと連成させるモデルをMotionViewでセットアップする方法について学習します。

      • MV-7021:MotionSolve/EDEMの連成シミュレーション

        本チュートリアルでは、MotionViewを介したMotionSolveとEDEMの連成のセットアップと実行について学びます。

    • MotionViewを使用した車両シミュレーション

    • MotionSolve APIの使用

  • MotionSolveユーザーズガイド

    MotionSolveは、力学の原理に基づいたシステムレベルのマルチボディソルバーです。

  • MotionSolveリファレンスガイド

    本マニュアルは、MotionSolveで使用できるコマンドステートメント、モデルステートメント、関数、サブルーチンインターフェースの一覧とそれぞれの使用方法の情報を提供しています。

MotionSolve
MotionSolve

2022

  1. ホーム
  2. チュートリアル

    インタラクティブなチュートリアルを使用してMotionSolveの機能について説明します。

  3. 連成シミュレーション

  4. MV-7009:Simulinkとのリモート連成シミュレーション

    このチュートリアルでは、MotionSolveとSimulinkとのリモート連成シミュレーションインターフェースを使用し、S-Functionを介してSimulinkからモデルを実行する方法について学習します。

  • 新機能
  • 概要
  • チュートリアル
  • MotionSolveユーザーズガイド
  • MotionSolveリファレンスガイド
索引

MV-7009:Simulinkとのリモート連成シミュレーション

このチュートリアルでは、MotionSolveとSimulinkとのリモート連成シミュレーションインターフェースを使用し、S-Functionを介してSimulinkからモデルを実行する方法について学習します。

MotionSolveは、ソケットを介したプロセス間通信(IPC)アプローチを実装することで、2つのソフトウェアが遠隔地にある場合にSimulinkとの連成シミュレーションを行うことができます。

ソフトウェア要件とハードウェア要件

ソフトウェア要件:
  • MotionSolve
  • MATLAB/Simulink(MATLABバージョンR2015a、Simulinkバージョン8.5以降)
注: これより前のバージョンのMATLAB/Simulinkも動作しますが、上記の最小バージョンが検証済みなので、これらのバージョンの使用をお勧めします。。
ハードウェア要件:
  • 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 ○
注: Simulinkから連成シミュレーションを開始する際、いくつかのMotionSolveバイナリファイルがSimulinkにより読み込まれます。この目的のために、MotionSolveは、Simulinkが存在するマシン上にインストールされている必要があります。また、このMotionSolveのインストレーションは、Simulinkと同じプラットフォームタイプでなければなりません。例えば、Linux上のSimulinkとWindows上のMotionSolveとの間でIPC連成シミュレーションを行うには、Simulinkソフトウェアがインストールされている同じマシンに特定のMotionSolve Linuxバイナリが必要になります。これらのライブラリは、Appendixにリストされています。これを反映させるために上の一覧を更新したものが、以下の一覧です:
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 ○
本チュートリアルでは、Machine “A”上のSimulinkの64-bitインストレーションとMachine “B”上のMotionSolveの64-bitインストレーションとの間(上の一覧で青いテキストの列)で連成シミュレーションを実施するプロセスを説明します。これは、下の図に示すとおりです。


図 1. 本チュートリアルに使用される連成シミュレーション環境

倒立振り子のコントローラー

カート上に搭載された倒立振り子について考えてみます。振り子はその底部で、回転ジョイントによってカートに拘束されています。カートはX方向にのみ自由に並進します。振り子には初期回転速度が指定されており、それによって底部を中心に回転します。

振り子とカートはどちらも剛体としてモデル化します。Simulinkでモデル化したコントローラーは、倒立振り子を安定した状態にして落下を防止するための制御力をカートに供給します。この制御力は、並進力を介してカートに適用されます。このモデルの設定は以下の図に示すとおりです。


図 2. 倒立振り子モデルの設定
事前設計したコントローラーでは、振り子を直立状態に保持する制御力が生成されます。コントローラーでは、カートの変位と速度とともに振り子の方向と角速度を入力として使用して、振り子を直立状態に保持するうえで必要な力の方向と大きさが計算されます。下の図は、この制御システムのブロック図を示しています。


図 3. コントローラーのブロック図
上記の図にある各値は次のとおりです:
  • θ は、モデル構成からの振り子の角変位です。
  • ω は、振り子の重心を中心とした振り子の角速度です。測定の基準は参照グラウンドフレームです。
  • x は、モデル構成からのカートの並進変位です。測定の基準は参照グラウンドフレームです。
  • x ˙ は、参照グラウンドフレームを基準として測定したカートの並進速度です。
  • R θ は、振り子の角変位から得られた参照信号です。
  • R ω は、振り子の角速度から得られた参照信号です。
  • R x は、カートの並進変位から得られた参照信号です。
  • R 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で制御力をモデル化します。カート上の荷重は次のように計算されます:

F cart = F control + F dist 、ここで、

F dist は外乱力、

F c o n t r o l = K 1 ( e r r o r θ ) + K 2 ( e r r o r ω ) + K 3 ( e r r o r x ) + K 4 ( e r r o r x ˙ ) は制御力、

K i は各エラー信号に適用されるゲイン

error は入力シグナル上のエラー(参照値と実際の値との差)

振子の角変位と速度はそれぞれ、式AY()とWY()を用いて得ることができます。同様に、カートの並進変位と速度はそれぞれ、式DX()とVX()から得られます。

  1. StartメニューからAll Programs > Altair <version number> > MotionView <version number>を選択します。
  2. 自身の作業ディレクトリ<Working Directory>にあるモデルInvertedPendulum_NoCosimulation.mdlを開きます。


    図 4. 倒立振子のMotionSolveモデル

    MotionSolveモデルは、以下のコンポーネントで構成されています:

    成分名 コンポーネントの種類 詳細
    Slider cart 剛体 カートボディ
    Pendulum 剛体 振子ボディ
    Slider Trans Joint 並進ジョイント カートボディとグラウンドの間の並進ジョイント
    Pendulum Rev Joint 回転ジョイント 振子ボディとカートボディの間の回転ジョイント
    制御力 ベクトル荷重 カートボディに適用される制御力
    Output control force 出力リクエスト 制御力をプロットするのに使用するリクエスト
    Output slider displacement 出力リクエスト カートの変位をプロットするのに使用するリクエスト
    Output slider velocity 出力リクエスト カートの速度をプロットするのに使用するリクエスト
    Output pendulum displacement 出力リクエスト このリクエストを用いて振子の変位をプロット
    Output pendulum velocity 出力リクエスト 振子の速度をプロットするのに使用するリクエスト
    Pendulum Rotation Angle ソルバー変数 式AY()を介して、振子の回転変位を保管
    Pendulum Angular Velocity ソルバー変数 式VY()を介して、振子の回転速度を保管
    Slider Displacement ソルバー変数 式DX()を介して、カートの並進変位を保管
    Slider Velocity ソルバー変数 式VX()を介して、カートの並進速度を保管
  3. Runパネルで、MotionSolveモデル名としてInvertedPendulum_NoCosimulation.xmlを指定し、Runをクリックします。
    ここで得られた結果が、連成シミュレーションからの結果と比較するためのベースラインとして使用されます。

制御系内のプラントの定義

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:振子の角変位と角速度; カートの並進変位と速度

環境変数の設定

MATLABを使用した連成シミュレーションを正常に実行するには、いくつかの環境変数が必要です。これらは以下のうちのいずれかを使って設定できます:
  • コントロールパネル(Windows)
  • MATLABをコールするシェル / コマンドウィンドウ(Windowsでのsetコマンド、またはLinuxでのsetenvコマンド)
  • MATLAB内でのsetenv()コマンドの使用

これらのコマンドを以下に示します:

環境変数 値 Windowsシェル Linuxシェル MATLABシェル
PATH \mypath set PATH=\mypath setenv PATH \mypath setenv('PATH','\mypath')
  1. 以下の環境変数を設定します:
    環境変数 Windowsパス Linuxパス
    NUSOL_DLL_DIR <altair>\hwsolvers\motionsolve\bin\win64 <altair>\hwsolvers\motionsolve\bin\linux64
    PATH <altair>\hwsolvers\common\bin\win64;%NUSOL_DLL_DIR%;%PATH% <altair>\hwsolvers\common\bin\linux64:$NUSOL_DLL_DIR:$PATH
    LD_LIBRARY_PATH - <altair>\hwsolvers\motionsolve\bin\linux64:$LD_LIBRARY_PATH
    MS_SERVER_IP_ADDRESS Machine “B”のIPアドレス Machine “B”のIPアドレス

    ここで、<altair>は、製品のインストール先へのフルパスです。例えばWindowsでは通常、C:\Program Files\Altair\<version>です。

  2. ライセンスや他のモデル条件のために、追加の環境変数が必要な場合があることにご留意ください。これらの環境変数の詳細については、MotionSolveの環境変数の項をご参照ください。

連成シミュレーションのセットアップ

連成シミュレーションを生成する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を使用できるようにする必要があります。

これは、以下のいずれかの方法で行うことができます:

  1. メニューオプションを使用:
    1. MatlabメニューからFile > Set Pathを選択します。


      図 7. MATLAB GUIからのパスの追加
    2. ダイアログで、mscosimipcライブラリが含まれるディレクトリを追加します。
      <altair>\hwsolvers\motionsolve\bin\win64
    3. SaveとCloseを選択します。
      このプロシージャは永久的に、このディレクトリをMATLAB/Simulinkサーチパスに追加します。
  2. MATLABコマンドを使用:
    1. mscosimipcライブラリが含まれるディレクトリをMATLABサーチパスに追加するには、MATLAB行で次のように入力します:
      addpath('<altair>\hwsolvers\motionsolve\bin\<platform>')
      これは、MATLABを終了するまで有効であり続けます。
      注: .mスクリプトを作成して、このプロセスをより簡単に反復実行できるようにすることもできます。
      例えば、MATLAB(.m)スクリプト内のMATLABコマンドを使って、MATLABパスおよび必要な環境変数を設定できます。
      addpath('<altair>\hwsolvers\motionsolve\bin\win64')
      setenv('NUSOL_DLL_DIR','<altair>\hwsolvers\motionsolve\bin\win64')
      setenv('RADFLEX_PATH',['<altair>\hwsolvers\common\bin\win64')
      setenv('PATH',['<altair >\hwsolvers\common\bin\win64;' getenv('PATH')])
      setenv('MS_SERVER_IP_ADDRRESS','192.168.1.123')
    2. Linuxマシンの場合は、追加としてsetenv('LD_LIBRARY_PATH', '<altair>\hwsolvers\motionsolve\bin\linux64:<altair>\hwsolvers\common\bin\linux64\')と入力します。

Simulinkでモデル化されたコントローラーの確認

  1. Machine “A”上のMATLABウィンドウで、File > Openを選択します。
    Open fileダイアログが表示されます。
  2. 作業ディレクトリ<Working Directory>からInvertedPendulum_ControlSystem.mdlを選択します。
  3. Openをクリックします。
    連成シミュレーションで使用される制御システムが確認できます。


    図 8. MATLABでの制御システム
  4. モデルには、S-functionブロックが含まれます。S-functionをmscosimipcと命名します。

    S-function(システム-関数)は、Simulinkによって用意されているブロックの1つで、MotionSolveモデルを表します。これは、Simulink User-Defined Functionsブロックライブラリ内に見つかります。S-Functionを使用すると、入力、出力、状態などを使用した任意の一般的な連立方程式をモデル化できます。この点は、ある程度MotionSolveのControl_StateEqnに似ています。詳細については、MATLAB/Simulinkドキュメントをご参照ください。

  5. mscosimipcという名称のS-functionをダブルクリックします。表示されるダイアログ内のS Function Parametersの下で、引用符 ' ' を使って以下のとおり入力します:
    'InvertedPendulum_Cosimulation.xml', 'InvertedPendulum_Cosimulation.mrf', ''
    3つのパラメータは以下のものです:
    • MotionSolve XMLモデル名
    • 出力MRF名
    • MotionSolveユーザーDLL名(オプション); 使用されない場合、空の引用符('')を入力

連成シミュレーションの実行

  1. Machine “B”のシェルプロンプトで、“msdaemon 22903”コマンドを実行します。
    このコマンドは、MotionSolve XMLが存在する作業ディレクトリから実行される必要があります。このコマンドで、MotionSolveを“listening”モードでセットアップしたことになります。Simulinkからシミュレーションが開始されると、連成シミュレーションが始まります。
  2. Machine “A”上でSimulation > Startをクリックし、連成シミュレーションを開始します。
    SimulinkはODE45を使って、Simulinkモデルの解析を行います。これより連成シミュレーションが始まり、SimulinkはMotionSolveモデルに結合するよう待機します。

    Simulinkでシミュレーションを開始した後、MotionSolveはSimulinkモデルと結合し、続く連成シミュレーションがポスト処理用の.mrfファイルを生成します。

  3. Simulinkモデルでスコープを設定し、結果を表示します。
  4. また、.logファイルをチェックし、MotionSolveでエラーや警告が出されていないことを確認します。
    注: MotionSolve用のライセンスは、Machine B上でのみチェックアウトされます。


    図 9. Simulinkからの連成シミュレーションの実行

MotionSolveのみでの結果と連成シミュレーション結果の比較

  1. StartメニューからAltair <version number> > HyperGraphを選択します。
  2. Build Plots をクリックします。
  3. ファイルブラウザアイコンをクリックし、InvertedPendulum_NoCosimulation.mrfファイルを読み込みます。これは、MotionSolve自体を実行することによって生成されたベースライン結果でした。
  4. Page Controlsツールバーで、2つの横並びプロットを作成します。


    図 10. 2つのプロットウィンドウの作成
  5. Y-TypeにMarker Displacement、Y RequestにREQ/70000004 Output slider displacement (on Slider cart)、Y ComponentにDXを選択し、カートの並進変位をプロットします:


    図 11. カートの変位をプロット
  6. 左側のウィンドウをクリックし、Applyをクリックします。
  7. Y-TypeにMarker Force、Y RequestにREQ/70000002 Output control force- (on Slider cart)、Y ComponentにFXを選択し、制御力のXコンポーネントをプロットします:


    図 12. カート上の制御力をプロット
  8. ファイルブラウザアイコンをクリックし、InvertedPendulum_Cosimulation.mrfファイルを読み込みます。これは、Simulinkと実行した連成シミュレーション結果でした。
  9. Y-TypeにMarker Displacement、Y RequestにREQ/70000004 Output slider displacement (on Slider cart)、Y ComponentにDXを選択し、左側のウィンドウ内のプロットをオーバーレイさせます:
  10. Y-TypeにMarker Force、Y RequestにREQ/70000002 Output control force- (on Slider cart)、Y ComponentにFXを選択し、右側のウィンドウ内のプロットをオーバーレイさせます:
    下図のように両方の信号が一致しています。


    図 13. 2つのモデル間のカート変位と制御力の比較

    青色のカーブはMotionSolveのみのモデルからの結果を、赤色のカーブは連成シミュレーションからの結果を示しています。

Appendix

リモート連成シミュレーションの場合、SimulinkがインストールされているマシンにMotionSolveをインストールするには2つのオプションがあります:
  • 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  
また、Option 2を使用する場合は、上記のファイルを任意のフォルダー、例えば../motionsolve/remote_cosimfiles/などにコピーすることができます。この場合、Simulinkで設定する環境変数は以下の表を基に変更します:
環境変数 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アドレス

© 2022 Altair Engineering, Inc. All Rights Reserved.

Intellectual Property Rights Notice | Technical Support