kinematic-chain-hierarchy#
Code |
HI.007 |
---|---|
Validator |
|
Compatibility |
openusd |
Tags |
✅ |
Summary#
For articulated assets without joint definitions, the prim hierarchy should reflect the kinematic chain.
Description#
Assets with posable bodies should organize their hierarchy to reflect the kinematic relationships between parts. Each transformable link in the kinematic chain should have its own Xformable prim. For links with multiple kinematic parents (such as four-bar linkages or Stewart platforms), one of the parents should be chosen as the hierarchical parent.
Note
Kinematics may also be described with USDPhysics Joints, in which case the prim hierarchy does not need to reflect the kinematic chain.
Why is it required?#
Supports posing and placement
Supports animation and rigging workflows
Provides clear structure for robotic and mechanical systems
Examples#
#usda 1.0
# Valid: Robot arm with kinematic chain hierarchy
def Xform "RobotArm"
{
def Xform "Base" (
)
{
def Mesh "BaseMesh" {
# Base geometry
}
def Xform "Shoulder" (
)
{
float3 xformOp:rotateXYZ = (0, 0, 0) # Shoulder joint rotation
uniform token[] xformOpOrder = ["xformOp:rotateXYZ"]
def Mesh "ShoulderMesh" {
# Shoulder link geometry
}
def Xform "Elbow" (
prepend apiSchemas = ["GeomXformCommonAPI"]
)
{
float3 xformOp:translate = (0, 0, 0.3) # Link offset
float3 xformOp:rotateXYZ = (0, 0, 0) # Elbow joint rotation
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ"]
def Mesh "ElbowMesh" {
# Elbow link geometry
}
def Xform "Wrist" (
prepend apiSchemas = ["GeomXformCommonAPI"]
)
{
float3 xformOp:translate = (0, 0, 0.25)
float3 xformOp:rotateXYZ = (0, 0, 0)
uniform token[] xformOpOrder = ["xformOp:translate", "xformOp:rotateXYZ"]
def Mesh "WristMesh" {
# Wrist geometry
}
}
}
}
}
}
# Not recommended: Flat hierarchy ignoring kinematic relationships
def Xform "RobotArm"
{
def Mesh "ShoulderMesh" {
}
def Mesh "ElbowMesh" {
# Unaffected by the Shoulder
}
def Mesh "WristMesh" {
# Unaffected by the Wrist
}
}
How to comply#
Structure hierarchy to follow the kinematic chain from base to end-effector
Create Xform prims for each transformable link in the chain
Position joint transformation points at the actual joint locations
For complex linkages with multiple parents, choose one as the hierarchical parent
Use meaningful names that reflect the mechanical function of each link
Ensure transformation order supports the intended motion