Skip to main content
Data collection records teleoperation episodes — joint trajectories plus synchronized camera frames — into a LeRobot dataset you can later train on. Everything runs on one machine: the computer wired to the robot with the ZED cameras attached (typically a ZED Box / Jetson). Because it owns the dataset, runs teleop, and captures the cameras locally, every recorded frame and joint sample shares the same clock — no time sync to set up. You drive the arms over VR exactly as in teleoperation; the session runs in data collection mode, where the A (record) controller button starts and saves takes. You can launch it from the web control panel or the CLI (axol collect-data).

Before you start

  • Axol installed (one-command install), CAN up, and motors verified.
  • At least one ZED camera connected over GMSL (up to three: overhead / left arm / right arm), with their serial numbers on hand. (Camera serials are printed on the camera body, or read them from the Cameras settings tab / Python — see the tip below.)
  • The VR TLS certificate authorized once — see Teleoperation.
List the connected cameras and their serials from Python:
If a camera was plugged in after boot and doesn’t show up, restart the ZED X daemon (sudo systemctl restart zed_x_daemon), or press Restart daemon in the control panel’s Cameras settings tab.

Run it

1

Connect the robot and assign cameras

Connect the Axol Host and Axol, then open the Cameras settings tab and assign each detected camera to its slot (overhead / left arm / right arm) — at least one is required. Stereo ZED X cameras are detected automatically. See Cameras.
2

Select Collect Data and fill the fields

Pick Collect Data. Set the dataset repo id (e.g. myorg/pick-place) and the task description — the only per-run inputs. Everything reusable (fps, teleop rate, stiffness, push-to-hub) lives in the Settings tabs.
3

Start and record from the headset

Press Start, connect the headset, and drive the arms. Recording is controlled entirely from the VR controllers — see Recording an episode below.
Collect Data has no on-screen episode buttons — takes are driven from the VR controller (A to record/save, X to discard). The session is locked to data collection; there’s no mode toggle.

Controller layout

Episodes are driven entirely from the Quest controllers. The movement controls are the same as in teleoperation; data collection adds the A (record) button. The session is locked to data collection mode, so there’s no mode toggle to worry about. Quest controller diagram
The camera feeds are relayed to the headset during collection, so you can line up takes from the robot’s point of view.

Recording an episode

1

Drive to the start pose

The session is already in Data Collection — put on the headset, engage tracking, and drive the arms to where you want the take to begin.
2

Start a take

Press A to begin recording — a 3-second countdown runs, then frame capture begins. Press A again during the countdown, or X, to cancel.
3

Finish the take

Stopping is confirmation-gated — the first press arms an in-headset popup instead of stopping immediately, so a fumbled button never loses a take:
  • Press A to arm Save episode? — press A again to save, or X to cancel and keep recording.
  • Press X to arm Discard episode? — press X again to discard and re-record, or A to cancel and keep recording.
Nothing is committed until you confirm. After you confirm a save, the headset enters the Saving state and every control except Y (exit) is blocked while the episode is written to disk; when the write completes the headset returns to Data Collection and the arms move back to the rest pose, ready for the next take. Confirming a discard drops the take and rewinds to re-record it.
The HUD shows an Episode N readout (top-right) with the 1-based number of the episode you’re about to record, so you always know where you are in the dataset. Collection resumes from an existing dataset at --root; an aborted session that saved no episodes is cleaned up on shutdown.
Saved takes are integrity-checked. If the camera encoder drops frames during a take (a feed-queue overflow under heavy load), the video no longer lines up with its recorded rows — so that episode is discarded instead of saved, with an error explaining why (in the CLI output / control panel log console). Re-record it rather than adding a misaligned episode to the dataset.
The full controller bindings and headset state machine are documented in the VR Interface guide.

Next steps

Run Policy

Run a trained policy autonomously on the same machine.

collect-data reference

Every flag and the dataset capture internals.