Skip to main content

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

Metadata

Release files for odin-robotics 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for odin-robotics 0.1.0
File Size Uploaded
odin_robotics-0.1.0.tar.gz 360.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for odin-robotics 0.1.0
File Interpreter ABI Platform
odin_robotics-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 607.5 kB

Release files / odin_robotics-0.1.0.tar.gz

Download URL odin_robotics-0.1.0.tar.gz
Size 360.8 kB
Tags Source
SHA-256 checksum
How to use checksums
89ea9465048fa071b9ae1bbc946680c975ab703018db97b63ce5c0bd9b3b7bd7
BLAKE2b-256 checksum
How to use checksums
7f3800bef5168c0d2eda8f56d67a82954c43f6fa706979d1deff07433b4f8b4e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / odin_robotics-0.1.0-py3-none-any.whl

Download URL odin_robotics-0.1.0-py3-none-any.whl
Size 246.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8b5bcad487db8593b48de40d3428f793b3fc15409fbb1d00db7218d63f5180b3
BLAKE2b-256 checksum
How to use checksums
f07897f69ebccb0749f8a5a21d6f26f63154a3b31dd95f32d99cc54f605a89d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page