Reference: Marker
Model ElementReference_Markerは、MotionSolve内の直交右手座標系と参照フレームを定義します。Reference_Markerはボディに属する必要があります。ボディは、任意のタイプ(剛体、弾性体、またはポイント)にできます。
説明
ニュートン参照フレーム(地面)は、剛体の特殊なケースと見なされます。

上の図で、Nはニュートン参照フレームおよび座標系を表します。これは全体座標系の原点Oと、右手系の相互に直交する3つの方向OX、OY、およびOZで構成されます。
Mは注目する別の座標系を表します。Mの原点はoMで表され、Mの軸はxM、yM、zMで表されます。この例では、MはNに対して固定と見なします。
Mを定義するには、座標系NでのベクトルO-oMの値が必要です。これはこの図ではrで表されています。
xM-yM-zMの基底からx-y-zの基底に変換する回転マトリクスが必要です。これはこの図ではNAMで表されています。
- ベクトルr。
- マトリクスNAM。
- 属するボディ。
- 剛体、弾性体、および質点の参照座標系(LPRF)の定義。
- 拘束要素での結合の指定。
- 力要素での結合の指定。
- Reference_Curve、Reference_Surface、およびPost_Graphicの参照座標系の定義。
- 変位、速度、および加速度の値の出力チャネルの定義。
id = 0のReference_Markerには特別な意味があります。これは、すべてのMotionSolve表現で、全体座標系を示すために使用されます。
属性node_idは省略可能です。これは、弾性体でのみ使用されます。
フォーマット
<Reference_Marker
id = "integer"
[ label = "string" ]
body_id = "integer"
[ body_type = {"RIGIDBODY" | "FLEXBODY" | "POINTBODY"} ]
[ rm_id = "integer" ]
[ node_id = "integer" ]
{
pos_x = "real"
pos_y = "real"
pos_z = "real"
[{
a00 = "real"
a10 = "real"
a20 = "real"
a01 = "real"
a11 = "real"
a21 = "real"
a02 = "real"
a12 = "real"
a22 = "real"
|
psi = "real"
theta = "real"
phi = "real"
|
yaw = "real"
pitch = "real"
roll = "real"
|
e0 = "real"
e1 = "real"
e2 = "real"
e3 = "real"
}]
}
|
{
usrsub_param_string = "USER(..,..)"
usrsub_fnc_name = "valid fnc name"
usr_dll_name = "valid dll name"
|
usrsub_param_string = "USER(..,..)"
usrsub_fnc_name = "valid fnc name"
interpreter = "PYTHON | MATLAB"
script_name = "valid script name"
}
/>
属性
- id
- 要素識別番号(整数 > 0)。この番号は、すべてのReference_Marker要素の中で一意です。
- label
- Reference_Marker要素の名前。
- body_id
- マーカーが属するボディのID。このボディは、地面、剛体、質点、または弾性体のいずれかです。
- body_type
-
ボディがRIGIDBODY、FLEXBODY、またはPOINTBODYのどのタイプかを指定します。
このパラメータは省略可能です。デフォルトのタイプはRIGIDBODYです。
- rm_id
-
Reference_Marker IDを指定するオプション属性。指定した場合、マーカーの位置と方向は参照マーカーを基準にしていると見なされます。
デフォルトのIDは0で、全体参照フレームを参照します。
- node_id
- 弾性体でのみ使用されるオプションの属性。
- pos_x, pos_y, pos_z
- 全体フレームを基準にして指定されたマーカー原点のx、y、z座標。pos_xは原点のx座標、pos_yは原点のy座標、pos_zは原点のz座標を定義します。
- a00a01a02
- a10a11a12
- a20a21a22
- 全体フレームを基準にしてReference_Markerの方向を定義する変換マトリクスの要素。
- psi
- 元のz軸の周りの回転(ラジアン単位)。
- theta
- Psiを適用した後の新しいx軸の周りの回転(ラジアン単位)。
- phi
- Thetaを適用した後の新しいz軸の周りの回転(ラジアン単位)。
- yaw
- マーカーの元のz軸の周りの回転(ラジアン単位)。
- pitch
- yawを適用した後のマーカーの新しい位置のy軸の周りの回転(ラジアン単位)。
- roll
- pitchを適用した後の新しい位置のx軸の周りの回転(ラジアン単位)。
- e0, e1, e2, e3
- 回転を表すオイラーパラメータ。
- usrsub_param_string
- データファイルからユーザー定義のサブルーチンに渡されるパラメータのリスト。
- usrsub_fnc_name
- ユーザーサブルーチンMARKER_READの代替名を指定します。
- usrsub_dll_name
- ユーザーサブルーチンを含むDLLまたは共有ライブラリのパスと名前を指定します。MotionSolveはこの情報を使用して、実行時にDLL内のユーザーサブルーチンを読み込みます。
- script_name
- usrsub_fnc_nameで指定されたルーチンを含むユーザー作成スクリプトのパスと名前を指定します。
- interpreter
- ユーザースクリプトが記述されたインタープリタ型言語を指定します。有効な選択肢は、MATLABまたはPYTHONです。
例
次の例では、剛体上のReference_Markerを定義します。
<Reference_Marker
id = "1012"
body_id = "1000"
body_type = "RIGIDBODY"
pos_x = "1.414"
pos_y = "3.14159"
pos_z = "1.61804"
a00 = "0."
a10 = "1."
a20 = "0."
a01 = "0.041630503"
a11 = "0."
a21 = "0.99913307"
a02 = "0.99913307"
a12 = "0."
a22 = "-0.04163050">
</Reference_Marker>
次の例では、DCマトリクスの2つの列(つまり、X軸とZ軸に対応した列)のみが指定されています。Y軸に対応した3つ目の列は、ZベクトルとXベクトルの外積を使用して計算されます。
<Reference_Marker
id = "90000072"
body_id = "30303"
body_type = "RigidBody"
pos_x = "-130."
pos_y = "0."
pos_z = "-50."
a00 = "0."
a10 = "1."
a20 = "0."
a02 = "0.447214"
a12 = "0."
a22 = "0.89442699"
/>
次の例では、DCマトリクスは省略されています。これはIDマトリクスであることを意味しています。pos_x、pos_y、およびpos_zも省略されています。これらはデフォルトですべてゼロであることを意味しています。
<Reference_Marker
id = "90000072"
body_id = "30303"
body_type = "RigidBody"
/>
次の例では、Pythonスクリプトを使用してReference_Markerが指定されています。
<Reference_Marker
id = "30102040"
label = "Joint 3-Marker I"
body_id = "30102"
body_type = "RigidBody"
usrsub_param_string = "USER(1,-0.5,0.3,0.,1.57079633,1.57079633,-1.57079633)"
interpreter = "Python"
script_name = "script/marker_read.py"
usrsub_fnc_name = "MARKER_READ"
/>
スクリプトmarker_read.pyは次のように定義されます:
def MARKER_READ(id, par, npar):
eflg = 0
errflg = 0
r = 3*[0.0]
angle = 6*[0.0]
angle_type = int(par[0])
r[0] = par[1]
r[1] = par[2]
r[2] = par[3]
if angle_type==0: # DCMTX
angle[0] = par[4]
angle[1] = par[5]
angle[2] = par[6]
angle[3] = par[7]
angle[4] = par[8]
angle[5] = par[9]
elif (angle_type ==1) | (angle_type ==2): # Euler angles (313 or YPR)
angle[0] = par[4]
angle[1] = par[5]
angle[2] = par[6]
elif angle_type ==3: # Euler parameters
angle[0] = par[4]
angle[1] = par[5]
angle[2] = par[6]
angle[3] = par[7]
else:
errflg = 1;
return errflg
eflg = py_put_marker(id, r, angle_type, angle)
return errflg
コメント
- 地面、質点、および剛体の要素上のReference_Markerは、それらの参照座標系に対して固定されています。
- 弾性体上のReference_Markerは、ボディの参照座標系に対して動くことができます。このようなことが起こるのは、弾性体はシミュレーション中に変形できるためです。
- 完全変換マトリクス(方向余弦(DC)マトリクスとも呼ぶ)を指定することは有効ですが、必須ではありません。任意の2軸を指定することで、MotionSolveがその2つの軸のベクトルの外積を使用して3つ目の軸を計算できます。
- DCマトリクスが指定されていない場合、これはデフォルトでIDマトリクスになります。