Sensor-Joint Profile USD Authoring Guide#
This document describes how to author a USD asset that conforms to the
Sensor-Joint profile.
Sensor-Joint is a sensor profile: it validates the joint state sensors an
asset carries, not the asset itself. Stamp it alongside the asset’s primary
profile (Robot-Body, Robot-Gripper, or whichever profile matches the host asset — see the profile index). An asset that carries
several sensor types is stamped with one sensor profile per type.
Validating an asset against this profile requires both the Sensors tier and the Core tier:
pip install simready-validate simready-foundation-tier-sensors simready-foundation-tier-core
Profile definition#
The Sensor-Joint profile contains a single feature (see profiles.toml
alongside this document, and the
feature dependency graph):
[Sensor-Joint]
"1.0.0" = {features = [
{"FET_037_ISAAC" = {version = "0.1.0"}}, # "Joint Sensor"
]}
FET_037_ISAAC defines the simulation-readiness
contract for joint sensor prims. It has no feature dependencies, so this
profile checks joint sensor wiring only. The articulation itself — joint
topology, drives, articulation roots — is the responsibility of the asset’s
primary profile.
What the profile checks#
Requirement |
Capability |
Summary |
|---|---|---|
An |
The check applies only to the IsaacJointStateSensor prims a stage actually
contains. An asset with no joint sensor passes this profile without
asserting anything. A passing result therefore means “every joint sensor
present is wired correctly”, not “this asset reports joint state” — confirm
the sensor exists before treating conformance as evidence that it does.
Required USD authoring#
A joint state sensor reports the positions and velocities of the joints in an
articulation. The physics engine exposes that state through the articulation,
so the sensor must sit on the prim the engine treats as the articulation root.
Without PhysicsArticulationRootAPI the articulation is never initialized for
readback and the sensor returns nothing.
Note the difference from Sensor-IMU: PS.001 requires an
ancestor carrying PhysicsRigidBodyAPI, while PS.002 requires the API on
the same prim as the sensor. A parent with PhysicsArticulationRootAPI does
not satisfy PS.002.
# Valid: both the sensor type and the articulation root API on one prim
def IsaacJointStateSensor "Robot" (
prepend apiSchemas = ["PhysicsArticulationRootAPI"]
)
{
}
# Invalid: the articulation is never initialized for joint state readback
def IsaacJointStateSensor "Robot"
{
}
In practice this prim is the root of the articulated robot, which means the asset’s articulation root and its joint sensor are the same prim. Confirm this against the base articulation requirements in the asset’s primary profile so the two do not disagree about which prim is the root.
Validation#
A sensor profile is validated in its own run. “Stamping both profiles” means validating the asset against each one; there is no combined invocation:
simready-validate --profile Robot-Body --version 3.0.0 path/to/asset.usd
simready-validate --profile Sensor-Joint --version 1.0.0 path/to/asset.usd
Both runs must pass. The sensor profile is not a substitute for the primary one — on its own it says nothing about units, hierarchy, physics, materials, or packaging.
If you record the result in the optional validation dictionary under
SimReady_Metadata, note that the documented form holds a single profile
and profile_version. Record the primary profile there and track sensor
conformance alongside it; the metadata has no multi-profile form today.
Runtime verification#
Static validation confirms the API is applied. It cannot confirm the sensor
reports usable joint state. The Benchmark test joint_sensor_data checks that
the sensor reports valid joint positions after a drive target moves:
pip install "simready-foundation-tier-sensors[benchmark]"
simready-benchmark --features FET_037_ISAAC
The [benchmark] extra installs the Benchmark engine; a validator-only tier
install does not include it.
Samples#
Passing:
sample_content/common_assets/sensors/physics_sensors/JointSensorCheckerPass.usdaFailing:
sample_content/common_assets/sensors_fails/physics_sensors/JointSensorCheckerFail.usda
References#
profiles.toml, the profile definition alongside this document