Motion

Model ElementMotionは、システムへのモーション入力を定義します。

クラス名

Motion

説明

Motionは、次の2つの方法のどちらかでシステムへのモーション入力を定義します:
  • ジョイントで許容される自由度
  • 2つのマーカー間の相対変位
ジョイントで入力を指定する場合は、次の3種類のジョイントのみを使用できます:
  • 回転ジョイント(回転運動のみ)
  • 並進ジョイント(並進運動のみ)
  • 円筒ジョイント(回転運動と並進運動のどちらか)

Markerでのより一般的なモーション入力は、Motion_Markerエンティティを使用して実現できます。

このインターフェースは、両方のタイプのモーション入力に対応します。

属性の概要

名前 プロパティ コマンドで変更可能か 設計可能か
id Int()    
label Str()  
i Reference("Marker")
j Reference("Marker")
joint Reference("Joint")  
jtype Enum("TRANSLATION ROTATION", default="TRANSLATION")    
direction Enum("X Y Z B1 B2 B3")  
dtype Enum("DISPLACEMENT VELOCITY ACCELERATION", default="DISPLACEMENT")  
icdisp Double(None) FDのみ
icvel Double(None) FDのみ
function Function("MOTSUB") FDのみ
routine Routine()   FDのみ
active Bool()  

使用法

# Joint-based motion specified as an expression
Motion (joint=objJoint, function=expressionString, optional_attributes)

# Joint-based motion specified in a compiled user-written subroutine
Motion (joint=objJoint, function=userString, routine=string optional_attributes)

# Joint-based motion specified in a Python function
Motion (joint=objJoint, function= userString, routine=functionPointer, optional_attributes)

# Marker-based motion specified as an expression
Motion (i=objMarker, j=objMarker, direction=string, function=expressionString, optional_attributes)

# Marker-based motion specified in a compiled user-written subroutine
Motion (i=objMarker, j=objMarker, direction=string, function=userString, routine=string, optional_attributes)

# Marker-based motion specified in a Python function
Motion (i=objMarker, j=objMarker, direction=string, function=userString, routine=functionPointer, optional_attributes)

属性

式として指定されたジョイントベースのモーション
joint
既存のJointオブジェクトへの参照。
モーション入力が適用されるjointを指定します。
joint属性は必須です。
function
有効なMotionSolve式を定義する文字列。
モーション出力を定義するMotionSolve式を指定します。任意の有効な実行時MotionSolve式を入力として指定できます。通常は、時間の関数です。
function属性は必須です。
jtype
文字列
適用される入力のタイプを指定します。ジョイントタイプがCYLINDRICALの場合にのみ使用されます。その場合、以下のいずれかを選択する必要があります:
  • "ROTATION"
  • "TRANSLATION"
jtype属性は、ジョイントタイプがCYLINDRICALの場合にのみ必要です。それ以外の場合は必要ありません。
コンパイルされたユーザー作成サブルーチンで指定されたジョイントベースのモーション。
joint
既存のJointオブジェクトへの参照。
モーション入力が適用されるjointを指定します。
joint属性は必須です。
function
有効なMotionSolve式を定義する文字列。
データファイルから、Vforceが定義されるユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
routine
文字列
ユーザーサブルーチンの代替名を指定します。この名前は、“∷”で区切られた情報の2つの部分で構成されます。1つ目は、ユーザー定義のVforceの応答を計算する関数を含む共有ライブラリへのパス名です。2つ目は、計算を実行する共有ライブラリ内の関数の名前です。
例: routine="/staff/Altair/engine.dll::myMotion"
  • ="/staff/Altair/engine.dllはDLLです。
  • "myMotion"は、計算を実行するこのDLL内の関数です。
属性routineは省略可能です。
指定しない場合、routineはデフォルトで"MOTSUB"になります。
jtype
文字列
適用される入力のタイプを指定します。ジョイントタイプがCYLINDRICALの場合にのみ使用されます。その場合、以下のいずれかを選択する必要があります:
  • "ROTATION"
  • "TRANSLATION"
jtype属性は、ジョイントタイプがCYLINDRICALの場合にのみ必要です。それ以外の場合は必要ありません。
Python関数で定義されるジョイントベースのモーション
joint
既存のJointオブジェクトへの参照。
モーション入力が適用されるjointを指定します。
joint属性は必須です。
function
有効なMotionSolve式を定義する文字列。
データファイルから、Vforceが定義されるユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
routine
Python内の呼び出し可能な関数へのポインタ。
例:routine=myMotsub
  • myMotsubは、モデルが存在する場所ならどこからでも呼び出すことが可能なPython関数またはメソッドです。
属性routineは省略可能です。
指定しない場合、routineはデフォルトでMOTSUBになります。
jtype
文字列
適用される入力のタイプを指定します。ジョイントタイプがCYLINDRICALの場合にのみ使用されます。その場合、以下のいずれかを選択する必要があります:
  • "ROTATION"
  • "TRANSLATION"
jtype属性は、ジョイントタイプがCYLINDRICALの場合にのみ必要です。それ以外の場合は必要ありません。
式として指定されたマーカーベースのモーション
i
既存のMarkerオブジェクトへの参照。
モーション入力が適用されるReference_Marker IDを指定します。
i属性は必須です。
j
既存のフローティングMarkerオブジェクトへの参照。
モーション入力が適用される基準となるReference_Marker IDを指定します。
j属性は必須です。
direction
文字列
入力が適用される方向を指定します。次のいずれかを選択します:
  • "X" - j Reference_Markerのx軸に沿った並進入力を適用(つまり、DX(I,J,J)を制御)します。
  • "Y" - j Reference_Markerのy軸に沿った並進入力を適用(つまり、DY(I,J,J)を制御)します。
  • "Z" - j Reference_Markerのz軸に沿った並進入力を適用(つまり、DZ(I,J,J)を制御)します。
  • "B1" - j Reference_Markerのx軸周りの回転入力を適用(つまり、B1(I,J)を制御)します。
  • "B2" - “Line of nodes”周りの回転入力を適用(つまり、B2(I,J)を制御)します。以下の説明をご参照ください。
  • "B3" - i Reference_Markerのz軸周りの入力を適用(つまり、B2(I,J)を制御)します。
direction属性は必須です。
  • 方向B1、B2、およびB3は、Jマーカーを基準にしてIマーカーを方向付けるために、ボディ固定の1、2、および3のオイラー角の1つ目、2つ目、および3つ目の角度を表します。下の図は、このシーケンスを示しています。


    図 1.
  • 座標系X-Y-Zで開始します。X軸を中心にシステムを回転します。これはB1の回転です。この回転により、YはY'に、ZはZ'に移動します。B1の回転により得られた座標系は、X-Y'-Z'です。
  • ここで、Y'軸の周りを角度B2だけ回転します。この回転により、Z'はその最終位置Z1に、XはX''に移動します。B2の回転により得られた座標系は、X''-Y'-Z1です。
    注: Y'軸は“Line of nodes”とも呼ばれます。
  • Z1軸を中心にして、最後の回転が発生します。この回転B3により、X''はその最終位置X1に、Y'はその最終位置Y1に移動します。元の方向はX-Y-Z、最終的な方向はX1-Y1-Z1です。角度B1、B2、B3は、ボディ固定の123(またはブライアン)角です。
function
有効なMotionSolve式を定義する文字列。
モーション出力を定義するMotionSolve式を指定します。任意の有効な実行時MotionSolve式を入力として指定できます。通常は、時間の関数です。
function属性は必須です。
コンパイルされたユーザー作成サブルーチンで指定されたマーカーベースのモーション
i
既存のMarkerオブジェクトへの参照。
モーション入力が適用されるReference_Marker IDを指定します。
i属性は必須です。
j
既存のフローティングMarkerオブジェクトへの参照。
モーション入力が適用される基準となるReference_Marker IDを指定します。
j属性は必須です。
direction
文字列
入力が適用される方向を指定します。次のいずれかを選択します:
  • "X" - j Reference_Markerのx軸に沿った並進入力を適用(つまり、DX(I,J,J)を制御)します。
  • "Y" - j Reference_Markerのy軸に沿った並進入力を適用(つまり、DY(I,J,J)を制御)します。
  • "Z" - j Reference_Markerのz軸に沿った並進入力を適用(つまり、DZ(I,J,J)を制御)します。
  • "B1" - j Reference_Markerのx軸周りの回転入力を適用(つまり、B1(I,J)を制御)します。
  • "B2" - “Line of nodes”周りの回転入力を適用(つまり、B2(I,J)を制御)します。
  • "B3" - i Reference_Markerのz軸周りの入力を適用(つまり、B2(I,J)を制御)します。
direction属性は必須です。
function
有効なMotionSolve式を定義する文字列。
データファイルから、Vforceが定義されるユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
routine
文字列
ユーザーサブルーチンの代替名を指定します。この名前は、“∷”で区切られた情報の2つの部分で構成されます。1つ目は、ユーザー定義のVforceの応答を計算する関数を含む共有ライブラリへのパス名です。2つ目は、計算を実行する共有ライブラリ内の関数の名前です。
例: routine="/staff/Altair/engine.dll::myMotion"
  • "/staff/Altair/engine.dllはDLLです。
  • "myMotion"は、計算を実行するこのDLL内の関数です。
属性routineは省略可能です。
指定しない場合、routineはデフォルトで"MOTSUB"になります。
Python関数で指定されるマーカーベースのモーション
i
既存のMarkerオブジェクトへの参照。
モーション入力が適用されるReference_Marker IDを指定します。
i属性は必須です。
j
既存のフローティングMarkerオブジェクトへの参照。
モーション入力が適用される基準となるReference_Marker IDを指定します。
j属性は必須です。
direction
文字列
入力が適用される方向を指定します。次のいずれかを選択します:
direction属性は必須です。
function
有効なMotionSolve式を定義する文字列。
データファイルから、Vforceが定義されるユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
routine
Python内の呼び出し可能な関数へのポインタ。
例:routine=myMotsub
  • myMotsubは、モデルが存在する場所ならどこからでも呼び出すことが可能なPython関数またはメソッドです。
属性routineは省略可能です。
指定しない場合、routineはデフォルトでMOTSUBになります。
オプション属性 - すべてのバリアントに使用できます。
id
整数
要素識別番号を指定します。この番号は、モデル内のすべてのVforceオブジェクトの中で一意にする必要があります。
この属性は省略可能です。MotionSolveは、IDが指定されていない場合、自動的にこれを作成します。
値の範囲:id > 0
label
文字列
Vforceオブジェクトの名前を指定します。
この属性は省略可能です。指定しない場合は、MotionSolveが代わりにラベルを作成します。
dtype
モーションが変位入力、速度入力、または加速度入力のうちのどれを適用するかを指定します。以下のいずれかの値を選択する必要があります:
  • dtype ="DISPLACEMENT" - 変位入力を指定します。
  • dtype ="VELOCITY" - 速度入力を指定します。
  • dtype ="ACCELERATION" - 加速度入力を指定します。
この属性は省略可能です。指定しない場合、dtypeはデフォルトで"DISPLACEMENT"になります。
icdisp
倍精度
dtype = "VELOCITY"またはdtype = "ACCELERATION"の場合に、必要な変位の初期条件を指定します。
icdispは、dtype = "VELOCITY"またはdtype = "ACCELERATION"の場合に指定する必要があります。
icvel
倍精度
dtype = "ACCELERATION"の場合に、必要な速度の初期条件を指定します。icvelは、dtype = "ACCELERATION"の場合に指定する必要があります。
active
ブーリアン
"TRUE"または"FALSE"のどちらかを選択します。
  • "TRUE"は、要素がモデル内でアクティブであり、システムの動作に影響を与えていることを示します。
  • "FALSE"は、要素がモデル内で非アクティブであり、システムの動作に影響を与えていないことを示します。エンティティがモデルから削除される場合とほとんど同じですが、必要に応じて“ON”にできる点が異なります。
属性activeは省略可能です。指定しない場合、activeはデフォルトで"TRUE"になります。

回転ジョイント上で加速度運動を定義します。
mot1 = Motion (label="mot1", joint=j301, dtype="ACCELERATION", 
               function="CUBSPL(Time, 0, 301001)")
並進ジョイント上で変位運動を定義します。
mot2 = Motion (label="mot2",joint=j302, function="CUBSPL(Time, 0, 301)")
全体座標系のY方向に沿った速度運動を定義します。
mot3 = Motion (label="mot3",i=j303, j=0,direction="Y",dtype="VELOCITY",
        function="-2*PI*Cos(2*PI*(Time-30D))")
全体座標系のx軸周りの変位回転運動を定義します。
mot4 = Motion (label="mot4", i=j303, j=0, direction="B1", dtype="DISPLACEMENT",
        function="CURVE(3, Time, 1)")
コンパイルされたユーザーサブルーチンでIマーカーのZ軸周りの変位運動を定義します。
mot5 = Motion (label="mot5", i=j305, j=j404, direction="B3", dtype="DISPLACEMENT",
        function="USER(1,2,9,-10.32)",routine="RobotMotion")
ユーザー作成Python関数で変位運動を定義します。
# Define the function
def RobotMotion (id, time, par, npar, dflag, iflag):
  x0 = par[0]
  x1 = par[1]
  h0 = par[2]
  h1 = par[3]
  
return STEP (time, x0, h0, x1, h1)

# Now refer to the function in the Motion object
mot5 = Motion (label="mot5",i=j305, j=j404, direction="B3", dtype="DISPLACEMENT",
       function="USER(1,2,9,-10.32)", routine=RobotMotion

ジョイントベースのモーションとマーカーベースのモーションの比較。

Iマーカーがcyl_Iで、Jマーカーがcyl_Jの円筒ジョイントcylが存在するものとします。

#Mot61 and mot62 are entirely equivalent:
Mot61 = Motion (label="mot61",i=cyl_I, j=cyl_J, direction="Z",
        function="2*sin(pi*time)")
Mot62 = Motion (label="mot62",joint=cyl1, jtype="TRANSLATION", 
        function="2*sin(pi*time)")

#Mot71 and mot72 are entirely equivalent:
Mot71 = Motion (label="mot71",i=cyl_I, j=cyl_J, direction="B3", 
function="2*sin(pi*time)")
Mot72 = Motion (label="mot72",joint=cyl, jtype="ROTATION", 
function="2*sin(pi*time)")