Skip to main content
A humanoid recording is kind: "humanoid" with one part per limb. Each part carries the data your robot logs: joint angles, a wrist pose, hand contact forces, ankle force-torque. This example is a humanoid with 7-DoF arms, 6-DoF hands with fingertip force sensors, 6-DoF legs with ankle force-torque sensors, a 3-DoF waist and a 2-DoF neck, recorded while it carries a mug to a sink.

Channels

Overlay

overlay.json

Notes

Body pose. The pelvis pose goes on its own foxglove.PoseInFrame channel (/body/pose) in a static, z-up world frame, and is not declared in the overlay. The wrist poses use the same world frame. If your robot logs poses in its pelvis frame, transform them to the world frame in your converter, using the pelvis pose. Hands on arms. The hands here have no end_pose of their own: a hand is paired with the arm of the same side (left_hand with left_arm), whose end_pose is the wrist. Give a hand its own end_pose only when it is not rigidly attached to that wrist pose. Joint vectors. One vector signal per part, with names in exactly the vector’s order. Prefer measured joint positions; publish commanded positions, velocities and motor torques as further signals under any name. Forces. The hands use the contact-force form (unit N, one value per fingertip). The ankles use the single-wrench form (dim 6, components fx … tz): it carries newtons and newton-metres together, so the unit is stated in note rather than unit. Tactile hands with a full wrench per fingertip use the per-contact wrench form.

Variations