Model ElementMotionは、システムへのモーション入力を定義します。
説明
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の場合にのみ使用されます。その場合、以下のいずれかを選択する必要があります:
- 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の場合にのみ使用されます。その場合、以下のいずれかを選択する必要があります:
- jtype属性は、ジョイントタイプがCYLINDRICALの場合にのみ必要です。それ以外の場合は必要ありません。
Python関数で定義されるジョイントベースのモーション
- joint
- 既存のJointオブジェクトへの参照。
- モーション入力が適用されるjointを指定します。
- joint属性は必須です。
- function
- 有効なMotionSolve式を定義する文字列。
- データファイルから、Vforceが定義されるユーザー定義のサブルーチンに渡されるパラメータのリスト。
- function属性は必須です。
- routine
- Python内の呼び出し可能な関数へのポインタ。
- 例:routine=myMotsub
- myMotsubは、モデルが存在する場所ならどこからでも呼び出すことが可能なPython関数またはメソッドです。
- 属性routineは省略可能です。
- 指定しない場合、routineはデフォルトでMOTSUBになります。
- jtype
- 文字列
- 適用される入力のタイプを指定します。ジョイントタイプがCYLINDRICALの場合にのみ使用されます。その場合、以下のいずれかを選択する必要があります:
- 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属性は必須です。
- 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)")