Skip to main content

The standard library for robot learning data

Project description

ODIN Python SDK

Open Data for Intelligent Robotics - The standard library for robot learning data.

PyPI version Python versions License Documentation

ODIN provides a unified format and tooling for robot learning datasets. It supports recording, loading, validating, converting, and sharing robotics data.

Installation

pip install odin-robotics

With optional dependencies:

# For PyTorch integration
pip install odin-robotics[torch]

# For JAX integration
pip install odin-robotics[jax]

# For all format converters
pip install odin-robotics[all]

Quick Start

Recording Data

from odin import Recorder

# Create a recorder
recorder = Recorder(name="my_robot_task", robot="franka_panda")

# Record episodes
with recorder.episode() as ep:
    for step_data in collect_data():
        ep.record(
            observation={
                "image": camera_image,
                "joint_pos": joint_positions,
            },
            action=commanded_action,
            reward=reward,
            done=done,
        )

# Save the dataset
dataset = recorder.to_dataset()
dataset.save("./my_dataset")

Loading Data

from odin import Dataset

# Load a dataset
dataset = Dataset.load("./my_dataset")

print(f"Dataset: {dataset.name}")
print(f"Episodes: {dataset.num_episodes}")
print(f"Total steps: {dataset.num_steps}")

# Iterate over episodes
for episode in dataset:
    print(f"Episode {episode.episode_id}: {len(episode)} steps")
    for step in episode:
        obs = step.observation
        action = step.action
        reward = step.reward

PyTorch DataLoader

from odin.torch import OdinDataset
from torch.utils.data import DataLoader

torch_dataset = OdinDataset("./my_dataset")
loader = DataLoader(torch_dataset, batch_size=32, shuffle=True)

for batch in loader:
    observations = batch["observation"]
    actions = batch["action"]
    # Train your model...

Hub Integration

from odin.hub import download, upload, search

# Download a dataset from ODIN Hub
dataset = download("lerobot/pusht", "./local_path")

# Search for datasets
results = search(query="manipulation", robot="franka")
for ds in results:
    print(f"{ds['name']}: {ds['num_episodes']} episodes")

# Upload your dataset
upload(dataset, "your-username/dataset-name")

CLI Usage

ODIN provides a comprehensive CLI for dataset operations:

# Show dataset information
odin info ./my_dataset

# Validate dataset structure
odin validate ./my_dataset --level strict

# Import from other formats
odin import lerobot lerobot/pusht -o ./pusht
odin import rosbag recording.bag -o ./rosbag_dataset

# Export to other formats
odin export lerobot ./my_dataset -o ./lerobot_output
odin export hdf5 ./my_dataset -o ./output.h5

# Split dataset for training
odin split ./my_dataset --train-ratio 0.8 -o ./splits/

# Merge multiple datasets
odin merge dataset1 dataset2 merged_output

# Batch import from multiple sources
odin batch import -o ./all_datasets -s lerobot -s rlds --workers 8

# Search and download from Hub
odin search --query "manipulation" --robot "franka"
odin download lerobot/pusht ./local_path

Supported Formats

Import From

  • LeRobot - HuggingFace LeRobot v2 format
  • RLDS/TFDS - TensorFlow Datasets format (Open X-Embodiment)
  • ROS Bags - ROS 1/2 bag files
  • MCAP - MCAP recording files
  • HDF5 - Generic HDF5 datasets
  • D4RL/Minari - RL benchmark datasets
  • robomimic - robomimic HDF5 format
  • LIBERO - LIBERO benchmark datasets
  • CALVIN - CALVIN benchmark datasets
  • Zarr - Zarr array format

Export To

  • LeRobot - Push to HuggingFace Hub
  • HDF5 - Standard HDF5 format
  • Parquet - Apache Parquet format
  • MCAP - MCAP recording format
  • RLDS - TensorFlow Datasets format

Dataset Schema

ODIN datasets are self-describing with embedded schema:

from odin import Schema, FieldSpec

schema = Schema(
    observation={
        "image": FieldSpec.image(480, 640, 3),
        "depth": FieldSpec.depth_image(480, 640),
        "joint_pos": FieldSpec.array("float32", 7),
        "gripper": FieldSpec.float(),
    },
    action={
        "joint_velocity": FieldSpec.array("float32", 7),
        "gripper_action": FieldSpec.float(),
    },
)

Cloud Streaming

Stream large datasets without downloading:

from odin.cloud import CloudDataset

# Stream from ODIN Hub
dataset = CloudDataset("stanford/droid-100k")

# Iterate without downloading full dataset
for episode in dataset.episodes():
    for step in episode:
        process(step.observation)

# Random batch sampling for training
batch = dataset.sample_batch(32)

Quality Validation

from odin import validate_dataset

report = validate_dataset("./my_dataset", level="strict")

print(f"Quality score: {report.overall_score:.2f}")
for issue in report.issues:
    print(f"  [{issue.severity}] {issue.message}")

Research Paper Integration

from odin import ResearchPaperManager

manager = ResearchPaperManager()

# Find papers related to a dataset
papers = manager.search_papers("robot manipulation", robotics_only=True)
for paper in papers[:5]:
    print(f"{paper.title} ({paper.year})")

Performance

  • Efficient Storage: MessagePack serialization with Zstandard compression (3-10x compression)
  • Streaming Access: Process terabyte-scale datasets without loading into memory
  • Parallel Loading: Multi-threaded data loading for training

Documentation

Full documentation is available at odin-hub.dev/docs.

Contributing

Contributions are welcome! Please see our Contributing Guide.

License

Apache-2.0

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

odin_robotics-0.1.0.tar.gz (360.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

odin_robotics-0.1.0-py3-none-any.whl (246.7 kB view details)

Uploaded Python 3

File details

Details for the file odin_robotics-0.1.0.tar.gz.

File metadata

  • Download URL: odin_robotics-0.1.0.tar.gz
  • Upload date:
  • Size: 360.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for odin_robotics-0.1.0.tar.gz
Algorithm Hash digest
SHA256 89ea9465048fa071b9ae1bbc946680c975ab703018db97b63ce5c0bd9b3b7bd7
MD5 49d628dce71b510173ab57c900892893
BLAKE2b-256 7f3800bef5168c0d2eda8f56d67a82954c43f6fa706979d1deff07433b4f8b4e

See more details on using hashes here.

File details

Details for the file odin_robotics-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: odin_robotics-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 246.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for odin_robotics-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8b5bcad487db8593b48de40d3428f793b3fc15409fbb1d00db7218d63f5180b3
MD5 fbecfc1b336d13b7e2f50eb4efed63ea
BLAKE2b-256 f07897f69ebccb0749f8a5a21d6f26f63154a3b31dd95f32d99cc54f605a89d8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page