action column is sent to the arms frame by frame, then the robot returns to its rest pose. It’s the reverse of collect-data: instead of recording actions, it plays recorded ones back on the hardware.
Replay drives only the arms. It uses no cameras, teleop or policy server.
- The arms move to the rest pose along the same collision-aware path
run-policyuses. This first move goes through zero. Episodes are recorded from rest, so playback starts without a jump. - Each frame is sent at the dataset’s recorded fps, so the motion keeps its original timing.
- At the end the arms park: rest pose, then, with
--park_to_zero(on by default), the all-zero pose, holding their grasp.
--interpolate true, the recorded actions are spread over commands at about 120 Hz for smoother motion. The episode’s timing doesn’t change.
Replay refuses to start while any arm joint is more than 25° from zero, and names each joint that is out. See Starting needs the arms near zero.
Pass --loop true to replay the episode over and over, returning to rest between takes, until you press Ctrl+C or Stop in the control panel. Either way, the arms return to rest before the command exits.
From the control panel,
--repo_id must name a dataset under the configured dataset root. Passing a dataset folder path works only from the CLI.robot_config. Set them with dotted flags or a whole-config file. See Command configuration for the syntax and Replay Dataset Config Parameters for every field with its default.
If a joint pushes hard against something during a return to rest, or during playback with
--teleop_torque_threshold set, the arms stop and go limp in a gravity-compensation hold. Replay can’t retry, so free the arms and stop the run with Ctrl+C or Stop.
