MotionSolve
MotionSolve

2022

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

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

  3. MotionSolve APIの使用

  4. MV-9002:溝付きリンクチュートリアル

    本チュートリアルでは、形状をインポートし、Msolve MotionSolve Python APIを用いてシンプルなPoisson接触をモデル化する方法を学びます。

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

2022

MotionSolve
  • 新機能

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

  • 概要

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

  • チュートリアル

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

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

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

    • 概要

    • 剛体の動解析

    • MDL(モデル定義言語)

    • 弾性体の動解析

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

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

    • 耐久性–疲労解析

    • 自動化

    • ユーザーサブルーチン

    • 連成シミュレーション

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

    • MotionSolve APIの使用

      • MV-9000:跳ね返るボールのチュートリアル

        本チュートリアルでは、Msolve Python APIを用いてシンプルな自由度1の機構をモデル化する方法を学びます。

      • MV-9001:シンプルな振子のチュートリアル

        本チュートリアルでは、Msolve MotionSolve Python APIを用いてシンプルな自由度1の機構をモデル化する方法を学びます。

      • MV-9002:溝付きリンクチュートリアル

        本チュートリアルでは、形状をインポートし、Msolve MotionSolve Python APIを用いてシンプルなPoisson接触をモデル化する方法を学びます。

      • MV-9003:LuGre摩擦のチュートリアル

        本チュートリアルでは、新規MotionSolveオブジェクトの実装および使用法を学習します。

  • MotionSolveユーザーズガイド

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

  • MotionSolveリファレンスガイド

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

MotionSolve
MotionSolve

2022

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

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

  3. MotionSolve APIの使用

  4. MV-9002:溝付きリンクチュートリアル

    本チュートリアルでは、形状をインポートし、Msolve MotionSolve Python APIを用いてシンプルなPoisson接触をモデル化する方法を学びます。

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

MV-9002:溝付きリンクチュートリアル

本チュートリアルでは、形状をインポートし、Msolve MotionSolve Python APIを用いてシンプルなPoisson接触をモデル化する方法を学びます。

本チュートリアルをIPython notebookとして実施している場合、SHIFT-ENTERをクリックすることにより、各コードセルを内部的に実行することが可能です。Pythonコードの出力(存在する場合)が表示され、実行すると次のセルにジャンプします。これを実行したい場合は、ファイルslotted_link.femがフォルダー内にあることを確認してください。

msolveモジュールの読み込み

msolveモジュールを読み込むには、以下のコマンドを実行します:
In [1]: from msolve import*

上記のコマンドを実行するには、msolveモジュールがコンピュータのパスになければなりません。上記が成功したと仮定すると、msolveの名称は現在のネームスペースにインポートされています。これにより、msolveで定義されているすべてのクラスと関数にアクセスできるようになり、本ケースの作成を開始することができます。

モデルの作成

リンクの機構を作成するにはまず、モデルを作成する必要があります。モデルは、すべてのエンティティの親として機能するコンテナに他なりません。

このコマンドを実行します:
In [2]: model = Model() 

単位と重力の追加

モデルを作成した後、単位、重力や地面などのエンティティを追加することができます。ほとんどのエンティティはデフォルトのプロパティを有しています。例えば、長さの単位を'METER'から'MILLIMETER'に変更するだけで、それ以外はすべてSI単位になります。
  1. このコマンドを実行します:
    In [3]: units = Units(length ="MILLIMETER")
  2. 同様に、重力加速度場を作ることができます。重力がゼロに設定されていることに注意してください。これは、溝付きスライダーの動きには影響しません。
    In [4]: gravity = Accgrav()
  3. これで地面パートの作成が可能になりました。これを行うには、Partクラスを使用して、地面のBoolean属性を'True’に指定します。
    In [5]: ground = Part(ground=True)

パートの追加

次に、リンク、カム、ピン、溝付きリンクを表す4つのパーツを作成します。また、パーツの質量、初期プロパティ、重心を指定することができます。この情報は、CADやFEMファイルからMotionSolveに自動的にインポートはされません。

このコマンドを実行します:
In [6]: link = Part(cm=Marker(),mass = 0.0526,ip=[20.0844,21.7819,1.9169,0,0,0])
link.cm.qp = [0, -17.499994784, 33.609856169]
pin = Part(cm=Marker(),mass = 0.0972, ip = [15.3742, 4.8085, 15.37, 0,0,0])
pin.cm.qp = [0,-0.000001527,74.999999124]
cam = Part(cm=Marker(),mass = 1.2159, ip = [372.14,961.3416,913.45,0,0,0])
cam.cm.qp = [0,0,-21.22]
slotted_link = Part(cm=Marker(),mass = 5.8943,ip = [3721.7065,1.8e5,1.7689e5,0,0,0])
slotted_link.cm.qp = [224.988, 0, -63.813495]

形状用のマーカーの定義

形状をインポートする前に、その形状がリンクされているパートのマーカーを定義する必要があります。この場合、重心マーカーは使用できません。FEM内の節点の位置は全体参照フレームで測定され、重心マーカーはパートの局所参照を表します。したがって、全体座標系の原点と一致する4つのマーカーを作成する必要があります。

このコマンドを実行します:
In [7]: link_geo_marker = Marker(part = link)
pin_geo_marker = Marker(part = pin)
cam_geo_marker = Marker(part = cam)
slotted_link_geo_marker = Marker(part = slotted_link) 

形状のインポート

これで、パーツの形状をインポートできるようになりました。これを行うために、4つの外部インスタンスを作成します。クラスExternalは、CADファイルやFEMファイルのインポートを支援するために作成されています。インポートしたファイルに複数のコンポーネントがある場合は、'element'プロパティを指定することで、それらを1つずつ抽出することができます。CADファイルをインポートした際に、'refinement_level’の値を大きくすることでメッシュを改善することができます。以下の例では、この場合の外部インスタンスの作成方法を示しています。

このコマンドを実行します:
In [8]: link_geo = External(rm = link_geo_marker, file ="slotted_link.fem",
                    element=["Link"], refinement_level = 0)
pin_geo  = External(rm = pin_geo_marker,  file ="slotted_link.fem",
                    element=["Pin"], refinement_level = 0)
cam_geo  = External(rm = cam_geo_marker, file ="slotted_link.fem",
                    element=["Cam"], refinement_level = 0)
slotted_link_geo = External(rm = slotted_link_geo_marker, file ="slotted_link.fem",
                    element=["Slotted_Link"], refinement_level = 0)

ジョイントの追加

次のステップは、異なるパート間のジョイントの作成です。2つの固定ジョイントが作成されます。1つはピンとリンクの間、もう1つはリンクとカムを接続します。固定ジョイントの場合、iマーカーとjマーカーは、それらのx、y、z軸を揃えて一致させる必要があります。

  1. このコマンドを実行します:
    In [9]: ##  Pin-Link-Fix at Pin cm
    pin_link_i = pin.cm
    pin_link_j = Marker(part = link, qp = pin.cm.qp)
    pin_link_fix = Joint(type="FIXED", i = pin_link_i, j = pin_link_j)
    
    ##  Link-Cam-Fix at Link cm
    link_cam_i = link.cm
    link_cam_j = Marker(part = cam, qp = link.cm.qp)
    link_cam_fix = Joint(
    type ="FIXED", i = link_cam_i, j = link_cam_j)
  2. 溝付きリンクは、全体x軸に沿ってしかスライドさせることができません。ここで、並進ジョイントを作成します。
    In [10]: ##  Slotted-link-slider-Translational at slotted link cm
    marker_qp = slotted_link.cm.qp
    marker_xp = marker_qp + [0,0,1]
    marker_zp = marker_qp + [1,0,0]
    slotted_slider_i = Marker(part = slotted_link, qp = marker_qp, xp = marker_xp, zp = marker_zp)
    slotted_slider_j = Marker(part = ground, qp = marker_qp, xp = marker_xp, zp = marker_zp)
    slotted_slider_trans = Joint(type="TRANSLATIONAL", i = slotted_slider_i, j = slotted_slider_j)
  3. ピン-カム-リンクエンティティに回転運動を課すことができます。そのためにはまず、全体y軸に沿って回転する回転ジョイントを作成する必要があります。
    In [11]: ##  Cam-pivot-Revolute at global_origin
    cam_pivot_i = Marker(part = cam, xp=[1,0,0], zp=[0,1,0])
    cam_pivot_j = Marker(part = ground, xp=[1,0,0], zp=[0,1,0])
    cam_pivot_revolute = Joint(type="REVOLUTE", i = cam_pivot_i, j = cam_pivot_j)

運動の追加

msolveでMotionのインスタンスを作成することで、運動を作成することができます。プロパティ’function’を指定することで、運動のパターンを変更することが可能です。プロパティ’function’はMotionSolve式でなければなりません。

このコマンドを実行します:
In [12]: cam_pivot_motion = Motion(joint=cam_pivot_revolute, jtype="ROTATION",dtype=
"DISPLACEMENT",function='360d*TIME') 

接触の追加

最後のステップは、インポートした形状間の接触を作成することです。ここでは2つのPoisson接触が作成されます: 1つはカムとスロットリンクの間、もう1つはピンとスロットリンクの間です。

このコマンドを実行します:
In [13]: cam_slotted_contact = Contact(igeom=cam_geo,jgeom=slotted_link_geo,type="POISSON",
                             restitution_coefficient=0.5,penalty=1e5)
pin_slotted_contact = Contact(igeom=pin_geo,jgeom=slotted_link_geo,type="POISSON",
                              restitution_coefficient=0.5,penalty=1e5)

リクエストの作成

モデルを実行する前に、接触力と貫通の深さを追跡するリクエストを作成します。結果はpyplotを用いてプロットすることができます。

このコマンドを実行します:
In [14]:#forceRequest = Request(f2="FX({I})".format(I=slotted_link_geo_marker.id))
forceRequest = Request(f1="CONTACT({ID},{JFLAG},{COMP},{RM})".format(ID=cam_slotted_contact.id,
                        JFLAG=1,COMP=1,RM=0),
                       f2="CONTACT({ID},{JFLAG},{COMP},{RM})".format(ID=pin_slotted_contact.id,
                        JFLAG=1,COMP=1,RM=0))
depthRequest = Request(f1="CONTACT({ID},{INDEX},{RM})".format(ID=cam_slotted_contact.id,
                        INDEX=1,RM=0),
                       f2="CONTACT({ID},{INDEX},{RM})".format(ID=pin_slotted_contact.id,
                        INDEX=1,RM=0))

シミュレーションの実行

この時点で、過渡解析を実行する準備が整っています。シミュレート手法はMBSモデル上で起動されます。モデルを構成する各エンティティ上で、検証プロセスが実行されます。これは、正しいモデルのみがシミュレートされていることを確認するために必要なステップです。シミュレートコマンドは、オプションのフラグreturnResultsをTrueに設定して呼び出すことができます。これは以下に示すように、シミュレーションの結果をさらにポスト処理するために実行コンテナに保存します。

また、アニメーション用にMotionViewに取り込める出力ファイルを生成することも可能です。

以下のコマンドを実行します:
In [15]: run=model.simulate(type="DYNAMIC", returnResults=True, 
end=3, steps = 3000) 
model.generateOutput()

プロットとアニメーションの生成

以下のコマンドを実行します:
%matplotlib inline
force = run.getObject(forceRequest)
depth = run.getObject(depthRequest)
from matplotlib import pyplot
pyplot.subplot(2,1,1)
pyplot.plot(force.times, force.get
Component(0),'r',force.times, force.getComponent(1))
pyplot.title("Contact Force Magnitude")
pyplot.xlabel("Time(s)")
pyplot.ylabel("Contact Force (N)")
pyplot.grid(True)
pyplot.legend(["Cam-Slotted Contact","Pin-Slotted Contact"],loc="upper left",prop={'size':8})
pyplot.subplot(2,1,2)
pyplot.plot(depth.times, depth.getComponent(0),'r',depth.times, depth.getComponent(1))
pyplot.title("Maximum Penetration Depth")
pyplot.xlabel("Time(s)")
pyplot.ylabel("Penetration Depth (m)")
pyplot.grid(True)
pyplot.legend(["Cam-Slotted Contact","Pin-Slotted Contact"],loc="upper left",prop={'size':8})
pyplot.subplots_adjust(hspace=0.5)
pyplot.show()


図 1.
このチュートリアルで生成したH3DファイルをMotionViewにインポートしてポスト処理を行うことができます。下に示すアニメーションでは、カムが回転する際の溝付きリンクの動きを示しています。


図 2.

© 2022 Altair Engineering, Inc. All Rights Reserved.

Intellectual Property Rights Notice | Technical Support