AGXBreakableJoint

AGXBrekableJoint is a joint using AGX Dynamics, and when a certain condition is satisfied the joint will be broken(invalidated).
Hinge, Prismatic, LockJoint of AGX Dynamics are used for implementation.
../_images/breakable_joint.png

Sample

This section explains how to use samples. The sample project is below. Operate the robot DoubleArm and grasping and pulling the door. You will see that the hinge joint will be broken and the door comes off.

  • project file: chorenoid/sample/AGXDynamics/agxBreakableJoint.cnoid
  • body file: chorenoid/sample/AGXDynamics/agxBreakableJoint.body

Breaking condition

As explained at the beginning, AGXBreakableJoint triggers destruction if certain conditions are met. These conditions are two types, specified by the breakType parameter.

  • Receive force more than specified force continuously during specified time (breakType: force)
../_images/breakable_joint_breaklimitforce.png
  • Receive impulse more than specified threshold (breakType: impulse)
../_images/breakable_joint_breaklimitimpulse.png

breakType is used properly depending on how to receive force. For example, in a scene ( agx_breaking_door ) that removing a hinged door, breakType: force is suitable. On the other hand, breakType: impulse is suitable for drilling scene. Because it is difficult to receive force more than the specified force continuously. The drill add the force periodically.

How to write

Write and use AGXBreakableJoint as follows.

links:
  -
    name: Door
    parent: PillarL
    jointType: free
    elements:
      -
        type: AGXBreakableJointDevice
        link1Name: PillarL
        link2Name: Door
        jointType: revolute
        jointRange: [ 0, 180 ]
        position: [ 0, 0, 0 ]
        jointAxis: [ 0, 0, 1 ]
        jointCompliance: 1e-6
        breakType: force
        period: 3.0                 # More than 3sec,
        breakLimitForce: 3000       # receive more than 3000N force continuously
        validAxis: [0, 1, 0]        # on Y axis direction will break the joint
  1. Set the link you want to connect with AGXBreakableJoint to linkName
  2. Set joint type to jointType
  3. Set joint position and axis to position and jointAxis
  4. Set break type to breakType
  • breakType: force, required to set breakLimitForce and period additionally
  • breakType: impulse, required to set breakLimitImpulse additionally
  1. If necessary, set compliance, spook damping to jointCompliance and jointSpookDamping
  2. If necessary, set validAxis . validAxis can specify which axis of the joint to use for calculating breakLimit. For example, in the figure below, by setting validAxis to [0, 1, 0], it means that the forces applied in the XZ axis direction are not considered.
../_images/breakable_joint_validaxis.png

Parameter descriptionExplanation of parameters

The parameters are described below.

parameter default value unit data type explanation
type: AGXBreakableJointDevice - - string declaration of using AGXBreakableJoint
link1Name - - string name of the link1
link2Name - - string name of the link2
jointType - - string joint type: revolute, prismatic, fixed
position [ 0, 0, 0] m Vec3 joint position at the link1 coordinate
jointAxis [ 0, 0, 1] - Unit Vec3 axis of the joint at the link1 coordinate
jointRange [ -inf, inf ] m or deg Vec2 range of the joint motion
jointCompliance 1e-8 m/N or rad/Nm double compliance of the joint
jointSpookDamping 0.33 s double spook damping of the joint
breakType force - string break type: force, impulse
breakLimitForce double_max N double force threshold of joint broken
period 0 s double time threshold of joint broken
breakLimitImpulse double_max Ns double impulse threshold of joint broken
offsetForce 0 N double offset force