Strictly aligned with VITRA / LeRobot data standards · Timestamped directory structure · 4-channel video + IMU hardware sync · Training-ready, no alignment required
20260520_173140_stack_bowls/
├── cam0.mp4 # front-left 1280x720 @ 30fps
├── cam1.mp4 # front-right 1280x720 @ 30fps
├── cam2.mp4 # rear-left 1280x720 @ 30fps
├── cam3.mp4 # rear-right 1280x720 @ 30fps
├── imu.bin # 6-DoF + magnetometer ~200Hz
├── imu.csv # IMU CSV format (optional)
├── intrinsics.json # intrinsics of 4 cameras
├── extrinsics.json # camera-to-IMU calibration
└── meta.json # device/firmware/fps/resolution
The M0 coprocessor drives the FSYNC sync signal, and three independent GPIO lines connect to the CMOS shutter trigger, the IMU interrupt and the magnetometer ready signal. All sensors latch on the same time base, with frame-to-IMU jitter <10 µs. The output data is directly compatible with the data loaders of mainstream training frameworks (OpenRobotLab, VLA, etc.).
EGO-DAQ output data maps directly to the Hugging Face LeRobot v2.1 standard format fields:
| EGO-DAQ Output | LeRobot v2.1 Field | Description |
|---|---|---|
| cam0.mp4 | observation.images.cam0 | 30fps, H.264, hardware sync |
| cam1.mp4 | observation.images.cam1 | 30fps, H.264, hardware sync |
| cam2.mp4 | observation.images.cam2 | 30fps, H.264, hardware sync |
| cam3.mp4 | observation.images.cam3 | 30fps, H.264, hardware sync |
| imu.bin | observation.state | 10-DoF: acc(3)+gyro(3)+mag(3)+temp(1) |
| intrinsics.json | camera_info | fx/fy/cx/cy + distortion coefficients |
| extrinsics.json | extrinsics | Camera→IMU transformation matrix |
| meta.json | info.json features | Device/firmware/fps/resolution |
Technical specifications behind the data capture and the data indexing standard
| Codec | H.264 (avc1), HEVC/SVT-AV1 supported |
| Resolution | 1280 × 720 |
| Frame Rate | 30 fps, 4 independent MIPI CSI |
| Sync Method | FSYNC frame-level hardware sync, trigger phase offset <50µs |
| Degrees of Freedom | 6-DoF + 3-DoF magnetometer = 10-DoF |
| Output Rate | ≈200 Hz |
| Timestamp Precision | Hardware latched by M0 coprocessor |
| Frame-to-IMU Jitter | <10 µs |
Following the LeRobot v2.1 indexing standard, EGO-DAQ adopts the following frame index conventions:
| Field | Type | Description |
|---|---|---|
| episode_index | uint32 | Recording index, incrementing from 0 |
| frame_index | uint32 | Frame index within an episode, starting from 0 |
| index | uint64 | Global frame ID (unique across episodes) |
| timestamp | float64 | Time offset within the episode (seconds) |
| next.done | bool | Whether it is the last frame of an episode (optional) |
Human hand state dimension definition (VITRA paper, Sec.3.2):
pad_state_human()
All sensor data is latched on the same hardware time base (M0 coprocessor RTC clock). The PTS (presentation timestamp) of each video frame and the timestamps of IMU samples are driven by the same clock source, ensuring timestamp consistency. The calibration files (intrinsics.json / extrinsics.json) are calibrated before the device leaves the factory and are delivered with the terminal.
The following code converts the EGO-DAQ timestamped directory structure into a Hugging Face LeRobot v2.1 standard dataset:
[1] Li Q, Deng Y, Liang Y, et al. "Scalable Vision-Language-Action Model Pretraining for Robotic Manipulation with Real-Life Human Activity Videos." ICRA 2026. arXiv:2510.21571.
[2] Hugging Face. "LeRobot: Open-Source Robot Learning Library." Documentation | Dataset Format v2.1.