- Main host (the upper computer) — owns the dataset, runs teleop and the recording loop.
- ZED box (the Jetson sender) — streams the three ZED-X One cameras.
Network setup
The two machines must be able to reach each other over the network. Configure each NIC with an IP however you like — DHCP on a shared switch, or static IPs (e.g.192.168.10.1/24 on the ZED box and 192.168.10.2/24 on the main host) over a direct ethernet cable. Find the ZED box’s IP (ip addr) and pass it to the main host as --robot_config.zed_host <zed-box-ip>.
Interface names vary by machine — the link might be eth0, enp3s0, eno1, and so on. Run ip link (or ip addr) on each machine to find the interface carrying the link, and substitute it for <iface> in the commands below.
PTP runs over whichever interface carries the link (zed.sync-clocks --iface). If the two machines are not on the same L2 segment (e.g. separated by a router rather than a switch), add --transport udpv4 to the clock-sync commands.
Prerequisites
- The
lerobotandvideoextras installed on the main host. The quick install includes both; on a development install runuv sync --extra lerobot --extra video(see Installation). - CAN set up on the main host (
can.setup) and motors verified (motor.info). pyzedinstalled on the ZED box (zed.install) and the three camera serial numbers on hand.- A network link between the two machines — either a direct ethernet cable or a shared router/switch (see Network setup).
ZED box (Jetson)
Open two terminals on the ZED box.Start clock sync (slave)
<iface> with the ZED box’s link interface (find it with ip link). Leave this running for the whole session. See zed.sync-clocks for transport and timestamping options.Stream the cameras
Ctrl+C. Note that IP — you’ll pass it to the main host as --robot_config.zed_host. If the overhead is a stereo ZED X, add --overhead-stereo (and set --robot_config.cameras.overhead.stereo true on the main host — the dataset then records overhead_left / overhead_right). See zed.stream for resolution, fps, and bitrate flags.Main host (upper computer)
Open two terminals on the main host.Start clock sync (master)
<iface> with the main host’s link interface (find it with ip link). The master role runs on the long-lived upper computer that owns the dataset. Leave it running for the whole session.Run data collection
192.168.1.42 with the ZED box’s IP.The robot is driven over VR (authorize the TLS certificate first — see the Teleoperation quickstart). See collect-data for the full field list, including --fps, --teleop_hz, stiffness, and --push_to_hub, and Command configuration for the draccus override syntax.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) and B (mode) buttons.
| # | Button | Action |
|---|---|---|
| 1 | Left grip | Press both grips (1 + 2) together to enable arm tracking; press either alone to disable (toggle, not hold) |
| 2 | Right grip | See above |
| 3 | Left trigger | Actuate left gripper |
| 4 | Right trigger | Actuate right gripper |
| 5 | X | Reset to rest pose. During a recording, stops and discards the take (re-record); during the start countdown, cancels it |
| 6 | A | Record: start a take (3-second countdown), or stop and save the current take |
| 7 | Y | Exit the VR session |
| 8 | B | Toggle between Teleop and Data Collection mode (disabled while recording or counting down) |
| — | Right thumbstick | Flick to switch camera view (overhead / wrists / split); click to reset the screens — see Camera views |
The camera feeds are relayed to the headset during collection (requires the
video extra on the main host), so you can line up takes from the robot’s point of view.Recording an episode
Enter Data Collection mode
Press B to switch from Teleop into Data Collection. You can drive the arms in either mode, but a take can only be started from Data Collection.
Start a take
Press A to begin recording — a 3-second countdown runs (the headset stays in Data Collection), then frame capture begins. Press A again during the countdown, or X, to cancel.
Finish the take
- Press A to stop and save the episode.
- Press X to stop and discard it (re-record).
| Headset state | Meaning |
|---|---|
Teleop | Driving the arms; recording not armed |
Data Collection | Driving the arms; ready to record |
Recording | Capturing frames to the dataset |
Saving | Episode being written to disk; controls blocked |
--root; an aborted session that saved no episodes is cleaned up on shutdown. Press Ctrl+C in the collect-data terminal to finish.
The full controller bindings and headset state machine are documented in the VR Interface guide. The interface source lives in this repo under
web/.Next steps
Policy Inference
Run a trained policy autonomously across the same two machines.
collect-data reference
Every flag and the dataset capture internals.
