The standard library for robot learning data
Project description
ODIN Python SDK
Open Data for Intelligent Robotics - The standard library for robot learning data.
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
- ODIN Hub - Dataset hosting and discovery
- Documentation
- GitHub
- PyPI
- Rust SDK
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89ea9465048fa071b9ae1bbc946680c975ab703018db97b63ce5c0bd9b3b7bd7
|
|
| MD5 |
49d628dce71b510173ab57c900892893
|
|
| BLAKE2b-256 |
7f3800bef5168c0d2eda8f56d67a82954c43f6fa706979d1deff07433b4f8b4e
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b5bcad487db8593b48de40d3428f793b3fc15409fbb1d00db7218d63f5180b3
|
|
| MD5 |
fbecfc1b336d13b7e2f50eb4efed63ea
|
|
| BLAKE2b-256 |
f07897f69ebccb0749f8a5a21d6f26f63154a3b31dd95f32d99cc54f605a89d8
|