Simple to start. Precise once you're in it.
Our data collection stack is built around letting you feel as comfortable controlling the robot as possible.
ARMS
xArm-series robotic arms, controlled in Cartesian space
CAMERAS
Intel RealSense, RGB + aligned depth per arm and top-down
INPUT
Meta Quest Controllers with custom button mapping
Quest controllers, headset off
Teleoperation runs on standard Quest controllers — but you don't wear the headset. Set it down where it can see the controllers, and it becomes a tracking reference rather than something strapped to your face for hours of collection.
- Adjustable scaling factors. Switch between multiple scaling profiles with the push of a button — drop into a slow, accurate mode for fine manipulation, or a fast, sensitive mode for quick repositioning.
Cartesian Online Trajectory Planning
Arms are controlled in Cartesian space using dynamic online planning — a following mode built by UFactory for sensor-driven and reactive tasks, where new target coordinates stream in continuously rather than being interpolated ahead of time as a fixed trajectory. This creates fast and responsive arm movements, allowing for precise manipulation even in dynamic environments.
One interface for the whole session
Everything an operator needs — arm state, recording controls, labeling, camera feeds, and system health — lives in a single collection GUI.
ARM STATUS
QUEST STATUS
DATA LABELING
QUEST CONTROLLERS
CAMERA FEEDS
DATA RECORDING
Built for efficiency, not just capture
Collection is optimized to make the most of your system's throughput:
- Raw RGB and depth streams are written with no compression or alignment, keeping the recording path lightweight.
- After capture, raw RGB and depth streams are aligned and compressed automatically.
- Every run is saved as its own .mcap rosbag, and runs are grouped together by session.
- Rosbags convert directly into a LeRobot-format dataset, ready to upload to Hugging Face.
Published Topics
A representative topic set from a two-arm rig, grouped by what they carry. Quest controller input topics live under the /quest/ namespace.
Commanded and achieved poses (target_frame, actual_pose) are both expressed in each arm's base frame.
CAMERAS — per camera (left, right, top, base)
ROBOT STATE
QUEST INPUT
ARM & GRIPPER CONTROL
CONTROL & SCALING STATE
Mirroring flips an arm's input mapping so the controller normally driving the left arm can drive the right instead (and vice versa) — useful for switching which side of the robot you're working on.
Runs on ROS 2 Humble
The stack targets native Ubuntu 22.04, or Ubuntu 24.04 via Docker if that's what your workstation runs.
Coming soon
- A Quest app for controlling the arms remotely with the headset worn.
- More controller customization — wrist rotation and gripper-depth control mapped to joystick input.
- Headset mounts: a neck strap holding the headset below the chin, a wearable laptop stand holding it below the controllers, and a 3D-printed desk mount.
- Arm and camera pose locators using arm-mounted cameras and Aruco markers.
- Gello support.