read_joints().
observation() gives the model the same thing a person looks at: a frame per
camera and the joint values from that frame’s own capture instant. Reading it
also stamps the next command with that observation’s id, so the recorded action
is paired with what caused it.
The safety envelope still applies
Everything a human operator passes through, the model passes through. The follower clamps tolimits(), caps the per tick step at slew, and holds if
commands stop arriving.
That matters for training: action in a recording is the clamped value, so a
policy trained on it learns the envelope rather than learning to command through
one it will not have. See
Exporting datasets.
Release the deadman to stop the model. The command stream stops, the
follower’s watchdog runs out, and the arm holds where it is. That is the same
stop a person gets, and it does not depend on the model cooperating.
Watching without driving
A third peer can join and see everything without ever taking control. Give the LeRobot leader adapter the joint names and no arm:read_joints() returns {} and the base refuses to send
anything at all. Do not call claim_control() on it. It is there to observe and
to record, which is useful when the person driving is not on the machine you
want the dataset on.
A leader recording is indexed by video frame rather than by observation, so it
samples the session differently from the follower’s copy. See
Recording.
Related
Leader
Every argument, method and event on this side.
Exporting datasets
Turn recorded sessions into training data.
Safety
The checks every command passes, whoever sent it.