Articulation Body

Articulation Body can construct a physical linkage like a robotic arm. The current Omniverse Unity Connector exports only the ArticulationBody structure.

Note

Movements controlled by external data or scripts are not exported to USD.

Differences in Articulation handling between Unity and USD

  • ArticulationBody in Unity works by making it a hierarchy.

  • Articulation in USD consists of ArticulationRoot and RigidBody + Collider + Physics Joint.

In Unity, the root of the Articulation Body is the starting point, and the configuration is represented by the hierarchy of Articulation Bodies.
Articulation Body in Unity.

In USD, it is represented by Rigidbody and Physics Joint. The root Articulation specifies ArticulationRoot.

Note

USD does not allow Rigidbody to be nested in a hierarchical structure.

The Unity Omniverse Connector’s USD export relocates this Articulation hierarchy into a flat structure within the ArticulationRoot.

A RevoluteJoint connects two RigidBodies with rotation.

RevoluteJoint structure in USD.

There are some limitations on the use of Articulation Physics, as we describe in the specifications.

Specifications for exporting Articulation to USD

  • The hierarchical structure of the ArticulationBody in Unity is flattened out in the ArticulationRoot in USD.

  • In USD, the children of Articulation are replaced by RigidBody+Collider+PhysicsJoint.

  • If there is a Prefab in the ArticulationRoot. In that case, it will be expanded as an entity during export because by replacing the hierarchical structure, the hierarchy can no longer be expressed by Reference and Payload.

  • After exporting, the Articulation structure in USD will be the same as if it were “Immovable” in Unity.

Immovable.
  • Supported Articulation Joint Types: Fixed, Prismatic, Revolute, and Spherical.

  • The Articulation Joint Type of the first ArticulationBody in the ArticulationRoot should be Fixed.

  • When exported to USD, it will be immovable, just like a FixedJoint, even if another Joint Type is specified.

  • Supports the following parameters:

Parameters used in Articulation.
  • The parameters by joint type are the same as those for PhysicsJoint.

  • Articulation uses the PhysicsJoint feature when it is passed to USD.

Note

Articulation does not support Live Sync because of the change in hierarchical structure.*

How to use Articulation

In this example, the robot arm is arranged as a hierarchical structure.
Articulation structure.

Set the root of Articulation

Specify the Articulation Body as a component in the base GameObject. The Articulation Body component will be the Articulation Root in USD.

Here is an example of RobotArm as the root of Articulation.
Set the root of Articulation.
* A joint structure is created by specifying the Articulation Body from the root to the children of the hierarchy. * A Rigid Body is not used when using an Articulation Body in Unity. * A Collider can be used.

First ArticulationBody

Add an Articulation Body as a component to the child GameObject.
For the first ArticulationBody, specify “Fixed” in “Articulation Joint Type”.
First ArticulationBody.

When exported to USD, the base of this robot arm is fixed. The first Articulation Body is only connected to its own GameObject that has components assigned to it.

Other Articulation Joint Types can also be specified, but the beginning will be immovable in any of them in the USD Articulation structure.

Articulation Body Parameters

Specify the next Articulation Body.
Next ArticulationBody.
This Articulation will connect the parent Articulation Root to the current GameObject’s Articulation Body as a joint.
Specify the joint type in the “Articulation Joint Type” field. In this example, “Revolute” is specified.
Specify Revolute in "Articulation Joint Type".
This part of the rotation is Y-axis centered when viewed in world coordinates.
Since no angle restrictions exist, “Free” was selected for “Motion”.
Use “Anchor Position” and “Anchor Rotation” to adjust the position and orientation of the axis of rotation.
By selecting “Edit Joints”, you can check the position and orientation of the Anchor at this time.
Select "Edit Joints".
”Arm1” was adjusted in the same way by assigning an Articulation Body.
Specify the same parameters for "Arm1".
“Revolute” is specified for “Articulation Joint Type” and “Limited” for “Motion”.
The “Lower Limit” and “Upper Limit” of the X Drive are set to the minimum and maximum values of the angle limit.
The next “HansBase” was specified similarly to the Articulation Body.
Specify Articulation Body for "HansBase".

The Articulation designation is now complete.

Play

In this state, the movement is not visible due to gravity, so it was tilted at a slight angle.
Tilt it to give it gravity.
To make it easier to check, set “Joint Friction” of “Arm1” to 0 to disable friction.
Set "Joint Friction" of "Arm1".
When playing, the arm moved according to gravity.
Play animation.
The movement due to gravity here is just an example.
A program often controls articulation bodies.

Export USD

Export as USD with Omniverse Unity Connector.
Import this USD in USD Composer.
Articulation structure in USD Composer.
In Unity, the Articulation Body hierarchy was structured, but in USD, the “RobotArm” of the Articulation Root is the parent, and Physics Joints replace the child Articulation Bodies.
Tilt this robot arm and then Play to see how it moves.
Play animation in USD Composer.

Articulation/PhysicsJoint Parameters

In “RobotArm”, the Articulation Root is assigned.

Physics - Articulation Root.
In the next “Base”, a FixedJoint is assigned as a PhysicsJoint.
Reference to Body0 of Physics Joint.
This uses Body0 but not Body1.
This PhysicsJoint will be immovable.
In the next “SwivelStand”, a RevoluteJoint is assigned as the PhysicsJoint.
Reference to Body0 and Body1 of Physics Joint in "SwivelStand".
The PhysicsJoint is assigned its own Xform in Body0 and the parent’s Xform in Body1.
After that, the joints are connected by repeating this process, and the Articulation is constructed.

The parameters that can be assigned vary depending on the type of joint.

Articulation Joint Type in Unity

PhysicsJoint Type in USD

FixedJoint

FixedJoint

PrismaticJoint

PrismaticJoint

RevoluteJoint

RevoluteJoint

SphericalJoint

D6Joint