articulation#

Code

JT.ART.001

Validator

Compatibility

openusd

Tags

💎

Summary#

For stable and fast simulations of kinematic chains, an asset should define an articulation.

Description#

In physics simulation, reduced coordinate joints provide a more stable and faster simulation. They model only the allowed motion directly (e.g., the bending of a robot arm at its elbow), instead of describing the full 6 degrees of freedom (position + orientation) and then constraining them with forces.

In OpenUSD, reduced coordinate joint simulation is enabled by applying the UsdPhysics.Articulation schema.

The schema is either applied to:

  • The root body of the articulated object (free-floating articulations - such as a wheeled robot).

    • Note: It can also be applied to a direct or indirect parent of the root body.

  • The root joint which is connected to the world (fixed articulations - such as a robot arm bolted to the floor).

    • Note: It can also be applied to a direct or indirect parent of the root joint.

Why is it required?#

  • Reduced coordinate joints provide a more stable and faster simulation.

Examples#

def Xform "Link1" () {
    prepend apiSchemas = ["PhysicsRigidBodyAPI"]
}

def Xform "Link2" () {
    prepend apiSchemas = ["PhysicsRigidBodyAPI"]
}

def PhysicsRevoluteJoint "L1_L2"
{
    rel physics:body0 = </Link1>
    rel physics:body1 = </Link2>
}

# Inefficient: No articulation capability on root joint of a fixed articulation
def PhysicsFixedJoint "FloorBolt"
{
    rel physics:body0 = </Link1>
}

# Inefficient: No articulation capability on root joint of a fixed articulation
def PhysicsFixedJoint "FloorBolt" (
    prepend apiSchemas = ["PhysicsArticulationRootAPI"]
)
{
    rel physics:body0 = </Link1>
}
def Xform "wheel" () {
    prepend apiSchemas = ["PhysicsRigidBodyAPI"]
}

def PhysicsRevoluteJoint "wheel_body1"
{
    rel physics:body0 = </body1>
    rel physics:body1 = </wheel>
}

# Inefficient: No articulation capability on root joint of a fixed articulation
def Xform "body1" () {
    prepend apiSchemas = ["PhysicsRigidBodyAPI"]
}

# Efficient: Articulation capability on root body of a floating articulation
def Xform "body1" () {
    prepend apiSchemas = ["PhysicsRigidBodyAPI", "PhysicsArticulationRootAPI"]
}

How to comply?#

  • Apply the UsdPhysics.Articulation schema to the root body or root joint of the articulated object.

For More Information#