ワイヤのすり抜け対策

注意事項

  • agxWireは挟まれるような接触を想定して開発されていない

  • できる限りワイヤの接触を避けることが望ましい

ワイヤの接触をONにする

wire.setEnableCollisions(True)

ワイヤ自身の接触(セルフコリジョン、self collision)をONにする

agxWire.WireController.instance().setEnableCollisions(wire, wire, True)
  • ワイヤのセリフコリジョンはデフォルトでOFFなので、ON設定が必要

ワイヤ同士の接触をONにする

agxWire.WireController.instance().setEnableCollisions(wire1, wire2, True)
  • ワイヤ同士の接触はデフォルトでOFFなので、ON設定が必要

ワイヤ-オブジェクト間の接触をONにする

# rb: agx.RigidBody
agxWire.WireController.instance().setEnableCollisions(wire, rb, True)

# geometry: agxCollide.Geometry
agxWire.WireController.instance().setEnableCollisions(wire, geometry, True)

ワイヤとオブジェクト間のagx::ContactMaterialを調整する

# wireVsObjectCMat: agx.ContactMaterial
wireVsObjectCMat.setYoungsModulus()
wireVsObjectCMat.setDamping(2.0 * timeStep)
  • ヤング率を大きくし、物体間を硬くするすることで、お互いに侵入しにくくする

  • 過減衰となるようにSpookDampingを調整し、侵入の解消を早める

BodyFixedNodeでワイヤを固定する

bodyFixedNode = agxWire.BodyFixedNode(rb, Vec3( 1, 0, 1))
wire.add(bodyFixedNode)

EyeNodeでワイヤを這わせる

# rb: EyeNodeを設置するRigidBody
# relativeTranslate: rbからEyeNodeを設置する相対位置
# extraEyeVector: ワイヤの出口方向ベクトル
# agxWire.EyeNode(rb: agx.RigidBody, relativeTranslate: agx.Vec3, extraEyeVector: agx.Vec3)

eyeNode: agxWire.EyeNode = agxWire.EyeNode(rb, Vec3(1, 0, 1), Vec3( -2, 0, 0)
wire.add(eyeNode)

ワイヤ、接触対象のオブジェクトのサイズを大きく調整する

  • ワイヤまたは接触対象のオブジェクトのサイズを大きくし、接触判定漏れを起きにくくする

シミュレーションのタイムステップを小さくする

# sim: agxSDK.Simulation
sim.setTimeStep()
  • タイムステップを小さくすることで、接触判定の頻度を増やし、侵入の解消を早める