SROI V2 dataset documentation

Strawberry-picking demonstrations for end-effector policy learning

Synchronized first-person RGB observations and 7-D end-effector actions derived from handheld SROI V2 demonstrations. This page documents the released LeRobot data, its source recordings, and the processing decisions needed to reproduce it.

COLOR / 640 × 480 / 30 FPS88 FRAMES / QC: OK
1,459training episodes
140,522training frames
30 Hzsampling frequency
7-Dend-effector action
LeRobot v3.0release format

Published V2 datasets

The LeRobot repositories are the intended inputs for model development. The MP4 and PNG trees described later are source and processing records, not alternate training releases.

Validation

July 2026 validation collection

zfff/sroiv2_strawberry_picking_lab_validation

100 episodes and 9,274 frames from the separate 14 July 2026 recording. All 100 episodes were classified ok by the documented trajectory and gripper QC rules.

Open on Hugging Face

RGB observation and next-frame pose target

Stereo infrared images are used to estimate motion during processing. They are not included in the final observation; the released policy input is the color stream.

Observation

First-person color image

Intel RealSense D405 color frames encoded as AV1 video under observation.images.camera.

video · [480, 640, 3] · yuv420p · 30 fps

Action

Transformed camera pose and gripper opening

For each frame, the target is taken from the following frame; the final frame repeats its own target. Position and rotation are derived from the transformed D405 trajectory.

[ee.x, ee.y, ee.z, ee.wx, ee.wy, ee.wz, ee.gripper_pos]
Interpretation of the metadata. The ee.* labels are a learning-schema convention: the current converter writes the transformed D405 camera pose directly to these fields. The measured camera-to-gripper-tip transform is used for projection-based QC and is not composed into the released action. Likewise, robot_type: so100 is a converter compatibility label; these are handheld SROI demonstrations, not SO-100 joint logs. No joint state or observation.state field is released.
FieldDefinitionType
observation.images.cameraD405 RGB image presented to the policyvideo [480, 640, 3]
ee.x / ee.y / ee.zCamera-trajectory translation after conversion to X-forward, Y-left, Z-up axes3 × float32
ee.wx / ee.wy / ee.wzOrientation of the transformed pose represented as a rotation vector3 × float32
ee.gripper_posAprilTag-derived gripper opening; 0 is closed and 1 is openfloat32 [0, 1]
taskTask vocabulary entry used by the release“pick the strawberry”

From synchronized camera streams to LeRobot episodes

The diagram and records below follow the implementation in sroi_dataprocess. Every visual is derived from validation episode 050 so the intermediate products can be compared directly.

01Captureleft IR · color · right IR
02DecodeMP4 → frame sequences
03Reconstructmasked stereo ORB-SLAM3
04Transformrobot-aligned coordinates
05Estimate gripperAprilTag separation
06QC + convertLeRobot v3.0
Trace example: validation_20260714_160922 / episode_050 88 frames · 32.5 cm recovered path · 0 missing gripper frames · QC category: ok
01

Direct acquisition

Record three synchronized D405 streams

The Raspberry Pi recorder uses pyrealsense2 to capture left infrared, color, and right infrared at 640 × 480 and 30 fps. Hardware timestamps and per-stream calibration are stored with each episode. ROS is not part of the current V2 acquisition path.

Tool
record_realsense.py --encode-video
Output
left.mp4, color.mp4, right.mp4, timestamps.json, camera calibration
Raw synchronized recording · left IR / color / right IR · validation episode 050
02

Regenerable workspace

Decode frames without modifying the raw recording

Compressed MP4 streams are expanded into a separate PNG processing tree. Calibration, timestamps, and the generated ORB-SLAM camera configuration remain attached to the episode. The raw MP4 directory is retained as the acquisition record.

Tool
batches/decode_batch.sh / decode_videos.py
Output
left_*.png, color_*.png, right_*.png, times.txt
03

Stereo reconstruction

Mask the gripper and estimate camera motion

The known finger region is blacked out in temporary copies of both infrared streams. ORB-SLAM3 then reconstructs the camera trajectory from the remaining stereo features, avoiding feature tracks on the moving gripper. Original PNG frames are not altered.

Tools
apply_gripper_mask.py + orbslam_batch_local.sh
Config
configs/gripper_mask_sroi_v2_d405.json
Output
CameraTrajectory.txt in KITTI 3 × 4 pose format
Decoded left infrared frame beside the temporary gripper-masked ORB-SLAM input
Frame 44 · decoded left IR compared with temporary masked SLAM input
04

Pose convention

Convert the trajectory into robot-aligned axes

The ORB-SLAM trajectory is transformed to the project convention: X forward, Y left, and Z up. Position and orientation from this transformed D405 camera pose become the first six action values during conversion.

Tool
transform_trajectory.py
Output
CameraTrajectoryTransformed.txt
QC view
visualization/visualize_traj_video.py
Projection check and recovered 3-D path · camera-to-tip extrinsics are used only in this QC view
05

Gripper state

Estimate opening from the two finger tags

AprilTag IDs 0 and 15 are detected in the lower region of each color image. Horizontal tag separation provides the raw opening signal, which is clipped and normalized to the [0, 1] convention used by the action vector.

Tool
gripper_estimation_april_tag.py
Output
gripper_distances.txt and normalization provenance where available
Meaning
0 = closed, 1 = open
Normalized gripper opening for validation episode 050, falling from open to closed
Episode 050 · normalized opening transitions from approximately 0.98 to 0.03
06

Acceptance and packaging

Review quality and create the LeRobot dataset

QC classifies episodes using trajectory availability and length, gripper validity and variation, and final closure. Selected episodes are converted to AV1 RGB video, Parquet action records, episode indices, task metadata, and aggregate statistics.

Tools
visualization/qc.py + lerobot/sroi_to_lerobot.py
Filter
qc_categories=ok for the documented releases
Output
LeRobot v3.0 dataset directory
EPISODE 050 / OK
  • Trajectory88 / 88 frames
  • Path length32.5 cm
  • Gripper NaN0 frames
  • Signal range0.961
data/
  chunk-000/file-000.parquet
videos/observation.images.camera/
  chunk-000/file-000.mp4
meta/
  info.json
  stats.json
  tasks.parquet
  episodes/…
Normalization provenance. The 1,459-episode training release records a shared range of 84.0789–261.7803 detector pixels across all merged inputs. The July validation release’s DATA_SOURCES.md instead records a range pooled over its own 100 episodes. Current pipeline documentation recommends the fixed training-reference configuration sroi_v2_d405_1000_onesb_range.json when building new comparable V2 releases. These are distinct provenance statements and should not be conflated.

Training release lineage

The final local release record documents both merge operations, input counts, codec compatibility, shared gripper range, and the exact official LeRobot merge command.

Composition of the 1,459-episode release

“Occlusion” in the repository name describes the targeted additions; it does not indicate that every episode in the base collection contains an occlusion.

1,125base set / QC ok
177July additions
157August additions
1,459 episodes · 140,522 frames
Official LeRobot merge operation · AV1 video copied unchanged
  • Created locally4 August 2026
  • Merge toolLeRobot 0.5.2
  • Video codecAV1 / yuv420p
  • Shared gripper range84.0789–261.7803 px
  • Task count1

Citing SROI

If you use the SROI datasets in your research, you are welcome to cite the following publication.

Hou, L., Lu, W., Wang, Y., Peng, C., & Fei, Z. (2025). Strawberry Robotic Operation Interface: An Open-Source Device for Collecting Dexterous Manipulation Data in Robotic Strawberry Cultivation. IFAC-PapersOnLine, 59(23), 303–308.

SROI V1 ROS bag archive

The original SROI field collection is preserved separately on Zenodo. It uses ROS bags and OAK-D-SR or RealSense D435i sensor configurations; it is not schema-compatible with the V2 LeRobot releases above.

OAK-D-SR configuration

Field stereo RGB and IMU

1280 × 720 stereo RGB at 30 fps with 400 Hz IMU data, camera calibration, and action-segmentation state.

RealSense D435i configuration

Stereo infrared, color, and IMU

848 × 480 left/right infrared and RGB at 30 fps with accelerometer and gyroscope streams.