Constraint: PTCV

Model ElementConstraint_PTCVは、高次ペア拘束を定義します。一方のボディ上の固定ポイントが、もう一方のボディに固定された曲線上をスライドします。このポイントは、この曲線からリフトオフすることはできません。

フォーマット

<Constraint_PTCV

     id             =     "integer"   
   [ label          =     "string" ]     
     i_marker_id    =     "integer"     
     j_marker_id    =     "integer"
   [ disp_xo        =     "real" ]
    
   [ disp_yo        =     "real" ]     
   [ disp_zo        =     "real" ]   
   [ vel_o          =     "real" ]
   [ zi_direction   =     {"PERPENDICULAR" | "PARALLEL"} ]
     
     curve_id       =     "integer"  
/>

属性

id
要素識別番号(整数 > 0)。この番号は、すべてのConstraint_PTCV要素の中で一意です。
label
Constraint_PTCV要素の名前。
i_marker_id
1つ目のボディ上の結合を定義するReference_Markerを指定します。このReference_Markerの原点によって、曲線上をスライドするように要求されるポイントが定義されます。このReference_Markerを含むボディは、剛体、弾性体、またはポイントボディのいずれかです。

このパラメータは必須です。

j_marker_id
曲線のポイントが定義される座標系を定義するReference_Markerを指定します。この曲線は、このReference_Markerが含まれているボディで定義され、このボディと共に動きます。この曲線を含むボディは、剛体またはポイントボディである必要があります。

このパラメータは必須です。

disp_x0, disp_y0, disp_z0
曲線上の初期接触ポイントの推測位置を定義します。座標は、全体座標系の原点を基準にして測定され、全体座標系で定義されます。

このパラメータは省略可能です。このデータの使用法については、コメント2をご参照ください。

vel_0
j_marker_idを基準にしたi_marker_idの原点の初期滑り速度を定義します。この速度は、接触ポイントにおける接線に沿って、曲線上の接触ポイントに配置された観測視点から測定されます。

このパラメータは省略可能です。このデータの使用法については、コメント4をご参照ください。

zi_direction
i_marker_idのz軸が曲線に対してPERPENDICULAR(法線)またはPARALLEL(接線)になるように強制します。このパラメータが定義されなかった場合は、曲線に対するz軸の向きを任意にすることができます。
このパラメータは省略可能です。
curve_id
2つ目のボディに固定する曲線のID。

次の図は、車をスプレー塗装するためのロボットを示しています。スプレー塗装作業中は、スプレーガンが取り付けられたロボットアームの先端は、3D空間内の指定された経路をたどります。この経路は図中に赤で示されています。


図 1. スプレー塗装ロボット
このスプレー塗装システムのプロパティは次のとおりです:
  • このシステムは、mmの長さ単位と秒の時間単位を使用してモデル化されています。
  • この曲線は全体座標系で定義され、Reference_ParamCurve 1によって表現されます。
  • この曲線は、地面に属するReference_Marker 21の座標系で定義されています。
  • Reference_Marker 11によって、エンドエフェクターの先端が定義されます。
  • この曲線上の初期接触ポイントは、全体座標系を基準にして、[263.2, 1342.7, 2343.02]と定義されています。
  • 曲線に沿ったポイントの初期滑り速度は50.23mm / 秒です。

上記システムのConstraint_PTCVオブジェクトは次のとおりです:

<Constraint_PTCV
     id            = "1"
     i_marker_id   = "11"
     j_marker_id   = "21"
     disp_xo       = "263.2"
     disp_yo       = "1342.7"
     disp_zo       = "2343.02"
     vel_o         = "50.23"
     curve_id      = "1"
/>

コメント

  1. Constraint_PTCVで定義される高次対偶拘束では、一方のボディ(Body-1)上の固定ポイントは、もう一方のボディ(Body-2)上で定義された曲線に沿ってスライドする必要があります。これを概略的に以下の図に示します。この曲線は3Dであってもかまわず、Reference_ParamCurve要素を使用してパラメータで表現されます。
    図 2. 曲線上のポイントの拘束

    マーカーIの原点によって、Body-1上の固定ポイントが定義されます。Body-1は、Body_RigidBody_Flexible、またはBody_Pointのどのボディでも構いません。

    この曲線は、Body-2上に“刻印”されています。曲線ポイントは、Body-2に対して固定されたままであり、Reference_Marker Jの座標系で定義されています。

  2. 属性disp_x0disp_y0disp_z0によって、曲線上の初期接触ポイントが定義されます。このポイント(下図のP0)は、厳密に曲線上に位置している必要はありません。
    MotionSolveによって、P0に最も近い曲線上のポイントPが検出されます。曲線上の初期ポイントを使用して、曲線パラメータα0の初期値が計算されます。次に、反復プロセスを使用してPの位置が特定されます。
    図 3. 初期接触ポイントP0の計算
  3. ポイントP0を曲線の端部付近に設定すると、曲線パラメータで摂動が生じた場合に、このポイントが曲線の範囲外になる可能性があります。これにより、MotionSolveで致命的なエラーが発生します。この問題を回避するには、長めの曲線を使用して、摂動に対応できる余裕を確保してください。
  4. 属性vel_0は、曲線を含むボディ上の観測視点から見た、曲線上の接触ポイントの速度を定義します。このデータを使用して、曲線パラメータの時間導関数の初期値が生成されます。正の値は、滑りの方向が、瞬間接線の方向(曲線パラメータが増大する方向)であることを意味します。負の値は、滑りの方向が瞬間接ベクトルの反対を向いていることを意味します。これは上図に示されています。
  5. この拘束では、曲線に対して指定されたデータの範囲内に接触ポイントが常に収まることは保証されません。この要件を満たすためには、端部における追加の力をユーザーが定義する必要があります。
  6. 開いた曲線と閉じた曲線の両方がサポートされています。閉じた曲線の場合、最初と最後のポイントは同じである必要があります。
  7. これらの曲線は、2次まで滑らかである必要があります。言い換えると、すべての箇所の曲線パラメータに関して、連続的な1次導関数と2次導関数を有している必要があります。滑らかでない曲線は数値的な問題を生じさせます。
  8. PTCV(...)関数を使用して、接触ポイントにおける任意方向の反力の成分を抽出できます。詳細については、MotionSolve Functionsをご参照ください。
  9. Constraint_PTCVでは、リフトオフは許可されません。反力を調べて、ポイントフォロワーが曲線からリフトオフする傾向があるかどうかを判断できます。共通法線に沿った反力の成分が正の値である場合、“接触”力は反発する方向に働きます。この成分が負の場合、“接触”力は引き寄せる方向に働くため、この拘束が適用されていなければ、ポイントフォロワーは曲線から離れていたと推測されます。
  10. “引き寄せる”反力が確認された場合は、リフトオフが許可されるForce_Contactオブジェクトを使用してサブシステムをモデル化することを検討してください。