Joint Wrench Sensor
A ~sensors.JointWrenchSensor reports the incoming reaction wrench at each selected
articulation body’s parent joint. It exposes force [N] and torque [N·m] separately, with entries
ordered by sensors.JointWrenchSensor.body_names.
Wrench convention
The incoming_joint_frame convention expresses the wrench in the child-side joint frame at the
child-side joint anchor. This matches the placement of a six-axis force/torque sensor mounted at the
joint. Backend implementations convert their native solver output to this common convention.
PhysX’s get_link_incoming_joint_force() already returns the wrench in the child-side joint frame,
referenced at its anchor, so the PhysX sensor exposes those components directly. Applying the USD
localPos1 and localRot1 again would shift and rotate the wrench twice.
Configure the sensor
Set sensors.JointWrenchSensorCfg.prim_path to the articulation root. Reported body coverage
depends on the physics backend:
- PhysX and OVPhysX report every articulation link, including the root link.
- Newton reports the child link of each non-free joint in the articulation tree, including fixed connections between bodies such as a welded wrist sensor or tool flange. Free joints, fixed joints to the world, and loop-closing constraints are excluded. The reported wrench at a weld includes the loads transmitted by its child subtree, even though the joint has no degrees of freedom.
Use sensors.JointWrenchSensor.body_names or
~sensors.JointWrenchSensor.find_bodies instead of assuming that different backends expose
the same number or order of entries:
Manager-based environments can select a body subset through
~isaaclab.managers.SceneEntityCfg and use
~isaaclab.envs.mdp.body_incoming_wrench as an observation term:
Read the data
For E environments and B reported bodies, force.torch and torque.torch each have
shape (E, B, 3). Both buffers are None before simulation initialization.
The composed wrench has shape (E, num_selected_bodies, 6) with force components followed by
torque components. B and the entry ordering can differ between backends.