Metadata-Version: 2.4
Name: lerobot-robodriver
Version: 0.4.3
Summary: 🤗 LeRobot: State-of-the-art Machine Learning for Real-World Robotics in Pytorch
Author-email: Rémi Cadène <re.cadene@gmail.com>, Simon Alibert <alibert.sim@gmail.com>, Alexander Soare <alexander.soare159@gmail.com>, Quentin Gallouédec <quentin.gallouedec@ec-lyon.fr>, Steven Palma <imstevenpmwork@ieee.org>, Pepijn Kooijmans <pepijnkooijmans@outlook.com>, Michel Aractingi <michel.aractingi@gmail.com>, Adil Zouitine <adilzouitinegm@gmail.com>, Dana Aubakirova <danaaubakirova17@gmail.com>, Caroline Pascal <caroline8.pascal@gmail.com>, Martino Russi <nopyeps@gmail.com>, Thomas Wolf <thomaswolfcontact@gmail.com>
License: Apache-2.0
Project-URL: homepage, https://huggingface.co/lerobot
Project-URL: documentation, https://huggingface.co/docs/lerobot/index
Project-URL: source, https://github.com/huggingface/lerobot
Project-URL: issues, https://github.com/huggingface/lerobot/issues
Project-URL: discord, https://discord.gg/s3KuuzsPFb
Keywords: lerobot,huggingface,robotics,machine learning,artificial intelligence
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Education
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3.10
Classifier: Topic :: Software Development :: Build Tools
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: datasets<4.2.0,>=4.0.0
Requires-Dist: diffusers<0.36.0,>=0.27.2
Requires-Dist: huggingface-hub[cli,hf-transfer]<0.36.0,>=0.34.2
Requires-Dist: accelerate<2.0.0,>=1.10.0
Requires-Dist: setuptools<81.0.0,>=71.0.0
Requires-Dist: cmake<4.2.0,>=3.29.0.1
Requires-Dist: einops<0.9.0,>=0.8.0
Requires-Dist: opencv-python-headless<4.13.0,>=4.9.0
Requires-Dist: av<16.0.0,>=15.0.0
Requires-Dist: jsonlines<5.0.0,>=4.0.0
Requires-Dist: packaging<26.0,>=24.2
Requires-Dist: pynput<1.9.0,>=1.7.7
Requires-Dist: pyserial<4.0,>=3.5
Requires-Dist: wandb<0.22.0,>=0.20.0
Requires-Dist: torch<2.8.0,>=2.2.1
Requires-Dist: torchcodec<0.6.0,>=0.2.1; sys_platform != "win32" and (sys_platform != "linux" or (platform_machine != "aarch64" and platform_machine != "arm64" and platform_machine != "armv7l")) and (sys_platform != "darwin" or platform_machine != "x86_64")
Requires-Dist: torchvision<0.23.0,>=0.21.0
Requires-Dist: draccus==0.10.0
Requires-Dist: gymnasium<2.0.0,>=1.1.1
Requires-Dist: rerun-sdk<0.27.0,>=0.24.0
Requires-Dist: deepdiff<9.0.0,>=7.0.1
Requires-Dist: imageio[ffmpeg]<3.0.0,>=2.34.0
Requires-Dist: termcolor<4.0.0,>=2.4.0
Provides-Extra: pygame-dep
Requires-Dist: pygame<2.7.0,>=2.5.1; extra == "pygame-dep"
Provides-Extra: placo-dep
Requires-Dist: placo<0.10.0,>=0.9.6; extra == "placo-dep"
Provides-Extra: transformers-dep
Requires-Dist: transformers<5.0.0,>=4.57.1; extra == "transformers-dep"
Provides-Extra: grpcio-dep
Requires-Dist: grpcio==1.73.1; extra == "grpcio-dep"
Requires-Dist: protobuf==6.31.0; extra == "grpcio-dep"
Provides-Extra: feetech
Requires-Dist: feetech-servo-sdk<2.0.0,>=1.0.0; extra == "feetech"
Provides-Extra: dynamixel
Requires-Dist: dynamixel-sdk<3.9.0,>=3.7.31; extra == "dynamixel"
Provides-Extra: gamepad
Requires-Dist: lerobot[pygame-dep]; extra == "gamepad"
Requires-Dist: hidapi<0.15.0,>=0.14.0; extra == "gamepad"
Provides-Extra: hopejr
Requires-Dist: lerobot[feetech]; extra == "hopejr"
Requires-Dist: lerobot[pygame-dep]; extra == "hopejr"
Provides-Extra: lekiwi
Requires-Dist: lerobot[feetech]; extra == "lekiwi"
Requires-Dist: pyzmq<28.0.0,>=26.2.1; extra == "lekiwi"
Provides-Extra: unitree-g1
Requires-Dist: pyzmq<28.0.0,>=26.2.1; extra == "unitree-g1"
Requires-Dist: onnxruntime<2.0.0,>=1.16.0; extra == "unitree-g1"
Provides-Extra: reachy2
Requires-Dist: reachy2_sdk<1.1.0,>=1.0.15; extra == "reachy2"
Provides-Extra: kinematics
Requires-Dist: lerobot[placo-dep]; extra == "kinematics"
Provides-Extra: intelrealsense
Requires-Dist: pyrealsense2<2.57.0,>=2.55.1.6486; sys_platform != "darwin" and extra == "intelrealsense"
Requires-Dist: pyrealsense2-macosx<2.55.0,>=2.54; sys_platform == "darwin" and extra == "intelrealsense"
Provides-Extra: phone
Requires-Dist: hebi-py<2.12.0,>=2.8.0; extra == "phone"
Requires-Dist: teleop<0.2.0,>=0.1.0; extra == "phone"
Requires-Dist: fastapi<1.0; extra == "phone"
Provides-Extra: wallx
Requires-Dist: transformers==4.49.0; extra == "wallx"
Requires-Dist: peft==0.17.1; extra == "wallx"
Requires-Dist: scipy==1.15.3; extra == "wallx"
Requires-Dist: torchdiffeq==0.2.5; extra == "wallx"
Requires-Dist: qwen_vl_utils==0.0.11; extra == "wallx"
Provides-Extra: pi
Requires-Dist: transformers>=4.36.0; extra == "pi"
Requires-Dist: scipy<1.15,>=1.10.1; extra == "pi"
Provides-Extra: smolvla
Requires-Dist: lerobot[transformers-dep]; extra == "smolvla"
Requires-Dist: num2words<0.6.0,>=0.5.14; extra == "smolvla"
Requires-Dist: accelerate<2.0.0,>=1.7.0; extra == "smolvla"
Requires-Dist: safetensors<1.0.0,>=0.4.3; extra == "smolvla"
Provides-Extra: groot
Requires-Dist: lerobot[transformers-dep]; extra == "groot"
Requires-Dist: peft<1.0.0,>=0.13.0; extra == "groot"
Requires-Dist: dm-tree<1.0.0,>=0.1.8; extra == "groot"
Requires-Dist: timm<1.1.0,>=1.0.0; extra == "groot"
Requires-Dist: safetensors<1.0.0,>=0.4.3; extra == "groot"
Requires-Dist: Pillow<13.0.0,>=10.0.0; extra == "groot"
Requires-Dist: decord<1.0.0,>=0.6.0; (platform_machine == "AMD64" or platform_machine == "x86_64") and extra == "groot"
Requires-Dist: ninja<2.0.0,>=1.11.1; extra == "groot"
Requires-Dist: flash-attn<3.0.0,>=2.5.9; sys_platform != "darwin" and extra == "groot"
Provides-Extra: sarm
Requires-Dist: lerobot[transformers-dep]; extra == "sarm"
Requires-Dist: faker<35.0.0,>=33.0.0; extra == "sarm"
Requires-Dist: matplotlib<4.0.0,>=3.10.3; extra == "sarm"
Requires-Dist: qwen-vl-utils<0.1.0,>=0.0.14; extra == "sarm"
Provides-Extra: xvla
Requires-Dist: lerobot[transformers-dep]; extra == "xvla"
Provides-Extra: hilserl
Requires-Dist: lerobot[transformers-dep]; extra == "hilserl"
Requires-Dist: gym-hil<0.2.0,>=0.1.13; extra == "hilserl"
Requires-Dist: lerobot[grpcio-dep]; extra == "hilserl"
Requires-Dist: lerobot[placo-dep]; extra == "hilserl"
Provides-Extra: async
Requires-Dist: lerobot[grpcio-dep]; extra == "async"
Requires-Dist: matplotlib<4.0.0,>=3.10.3; extra == "async"
Provides-Extra: peft
Requires-Dist: lerobot[transformers-dep]; extra == "peft"
Requires-Dist: peft<1.0.0,>=0.18.0; extra == "peft"
Provides-Extra: dev
Requires-Dist: pre-commit<5.0.0,>=3.7.0; extra == "dev"
Requires-Dist: debugpy<1.9.0,>=1.8.1; extra == "dev"
Requires-Dist: lerobot[grpcio-dep]; extra == "dev"
Requires-Dist: grpcio-tools==1.73.1; extra == "dev"
Requires-Dist: mypy>=1.19.1; extra == "dev"
Provides-Extra: test
Requires-Dist: pytest<9.0.0,>=8.1.0; extra == "test"
Requires-Dist: pytest-timeout<3.0.0,>=2.4.0; extra == "test"
Requires-Dist: pytest-cov<8.0.0,>=5.0.0; extra == "test"
Requires-Dist: mock-serial<0.1.0,>=0.0.1; sys_platform != "win32" and extra == "test"
Provides-Extra: video-benchmark
Requires-Dist: scikit-image<0.26.0,>=0.23.2; extra == "video-benchmark"
Requires-Dist: pandas<2.4.0,>=2.2.2; extra == "video-benchmark"
Provides-Extra: aloha
Requires-Dist: gym-aloha<0.2.0,>=0.1.2; extra == "aloha"
Provides-Extra: pusht
Requires-Dist: gym-pusht<0.2.0,>=0.1.5; extra == "pusht"
Requires-Dist: pymunk<7.0.0,>=6.6.0; extra == "pusht"
Provides-Extra: libero
Requires-Dist: lerobot[transformers-dep]; extra == "libero"
Requires-Dist: hf-libero<0.2.0,>=0.1.3; extra == "libero"
Provides-Extra: metaworld
Requires-Dist: metaworld==3.0.0; extra == "metaworld"
Provides-Extra: all
Requires-Dist: lerobot[dynamixel]; extra == "all"
Requires-Dist: lerobot[gamepad]; extra == "all"
Requires-Dist: lerobot[hopejr]; extra == "all"
Requires-Dist: lerobot[lekiwi]; extra == "all"
Requires-Dist: lerobot[reachy2]; extra == "all"
Requires-Dist: lerobot[kinematics]; extra == "all"
Requires-Dist: lerobot[intelrealsense]; extra == "all"
Requires-Dist: lerobot[smolvla]; extra == "all"
Requires-Dist: lerobot[xvla]; extra == "all"
Requires-Dist: lerobot[hilserl]; extra == "all"
Requires-Dist: lerobot[async]; extra == "all"
Requires-Dist: lerobot[dev]; extra == "all"
Requires-Dist: lerobot[test]; extra == "all"
Requires-Dist: lerobot[video_benchmark]; extra == "all"
Requires-Dist: lerobot[aloha]; extra == "all"
Requires-Dist: lerobot[pusht]; extra == "all"
Requires-Dist: lerobot[phone]; extra == "all"
Requires-Dist: lerobot[libero]; extra == "all"
Requires-Dist: lerobot[metaworld]; extra == "all"
Requires-Dist: lerobot[sarm]; extra == "all"
Requires-Dist: lerobot[peft]; extra == "all"
Dynamic: description
Dynamic: description-content-type
Dynamic: license-file

<p align="center">
  <img alt="LeRobot, Hugging Face Robotics Library" src="https://raw.githubusercontent.com/huggingface/lerobot/v0.4.3/media/readme/lerobot-logo-thumbnail.png" width="100%">
</p>

<div align="center">

[![Tests](https://github.com/huggingface/lerobot/actions/workflows/nightly.yml/badge.svg?branch=main)](https://github.com/huggingface/lerobot/actions/workflows/nightly.yml?query=branch%3Amain)
[![Python versions](https://img.shields.io/pypi/pyversions/lerobot)](https://www.python.org/downloads/)
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/huggingface/lerobot/blob/main/LICENSE)
[![Status](https://img.shields.io/pypi/status/lerobot)](https://pypi.org/project/lerobot/)
[![Version](https://img.shields.io/pypi/v/lerobot)](https://pypi.org/project/lerobot/)
[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.1-ff69b4.svg)](https://github.com/huggingface/lerobot/blob/main/CODE_OF_CONDUCT.md)
[![Discord](https://img.shields.io/badge/Discord-Join_Us-5865F2?style=flat&logo=discord&logoColor=white)](https://discord.gg/q8Dzzpym3f)

</div>

**LeRobot** aims to provide models, datasets, and tools for real-world robotics in PyTorch. The goal is to lower the barrier to entry so that everyone can contribute to and benefit from shared datasets and pretrained models.

🤗 A hardware-agnostic, Python-native interface that standardizes control across diverse platforms, from low-cost arms (SO-100) to humanoids.

🤗 A standardized, scalable LeRobotDataset format (Parquet + MP4 or images) hosted on the Hugging Face Hub, enabling efficient storage, streaming and visualization of massive robotic datasets.

🤗 State-of-the-art policies that have been shown to transfer to the real-world ready for training and deployment.

🤗 Comprehensive support for the open-source ecosystem to democratize physical AI.

## Quick Start

LeRobot can be installed directly from PyPI.

```bash
pip install lerobot
lerobot-info
```

> [!IMPORTANT]
> For detailed installation guide, please see the [Installation Documentation](https://huggingface.co/docs/lerobot/installation).

## Robots & Control

<div align="center">
  <img src="https://raw.githubusercontent.com/huggingface/lerobot/v0.4.3/media/readme/robots_control_video.webp" width="640px" alt="Reachy 2 Demo">
</div>

LeRobot provides a unified `Robot` class interface that decouples control logic from hardware specifics. It supports a wide range of robots and teleoperation devices.

```python
from lerobot.robots.myrobot import MyRobot

# Connect to a robot
robot = MyRobot(config=...)
robot.connect()

# Read observation and send action
obs = robot.get_observation()
action = model.select_action(obs)
robot.send_action(action)
```

**Supported Hardware:** SO100, LeKiwi, Koch, HopeJR, OMX, EarthRover, Reachy2, Gamepads, Keyboards, Phones, OpenARM, Unitree G1.

While these devices are natively integrated into the LeRobot codebase, the library is designed to be extensible. You can easily implement the Robot interface to utilize LeRobot's data collection, training, and visualization tools for your own custom robot.

For detailed hardware setup guides, see the [Hardware Documentation](https://huggingface.co/docs/lerobot/integrate_hardware).

## LeRobot Dataset

To solve the data fragmentation problem in robotics, we utilize the **LeRobotDataset** format.

- **Structure:** Synchronized MP4 videos (or images) for vision and Parquet files for state/action data.
- **HF Hub Integration:** Explore thousands of robotics datasets on the [Hugging Face Hub](https://huggingface.co/lerobot).
- **Tools:** Seamlessly delete episodes, split by indices/fractions, add/remove features, and merge multiple datasets.

```python
from lerobot.datasets.lerobot_dataset import LeRobotDataset

# Load a dataset from the Hub
dataset = LeRobotDataset("lerobot/aloha_mobile_cabinet")

# Access data (automatically handles video decoding)
episode_index=0
print(f"{dataset[episode_index]['action'].shape=}\n")
```

Learn more about it in the [LeRobotDataset Documentation](https://huggingface.co/docs/lerobot/lerobot-dataset-v3)

## SoTA Models

LeRobot implements state-of-the-art policies in pure PyTorch, covering Imitation Learning, Reinforcement Learning, and Vision-Language-Action (VLA) models, with more coming soon. It also provides you with the tools to instrument and inspect your training process.

<p align="center">
  <img alt="Gr00t Architecture" src="https://raw.githubusercontent.com/huggingface/lerobot/v0.4.3/media/readme/VLA_architecture.jpg" width="640px">
</p>

Training a policy is as simple as running a script configuration:

```bash
lerobot-train \
  --policy=act \
  --dataset.repo_id=lerobot/aloha_mobile_cabinet
```

| Category                   | Models                                                                                                                                                                                                       |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Imitation Learning**     | [ACT](./docs/source/policy_act_README.md), [Diffusion](./docs/source/policy_diffusion_README.md), [VQ-BeT](./docs/source/policy_vqbet_README.md)                                                             |
| **Reinforcement Learning** | [HIL-SERL](./docs/source/hilserl.mdx), [TDMPC](./docs/source/policy_tdmpc_README.md) & QC-FQL (coming soon)                                                                                                  |
| **VLAs Models**            | [Pi0Fast](./docs/source/pi0fast.mdx), [Pi0.5](./docs/source/pi05.mdx), [GR00T N1.5](./docs/source/policy_groot_README.md), [SmolVLA](./docs/source/policy_smolvla_README.md), [XVLA](./docs/source/xvla.mdx) |

Similarly to the hardware, you can easily implement your own policy & leverage LeRobot's data collection, training, and visualization tools, and share your model to the HF Hub

For detailed policy setup guides, see the [Policy Documentation](https://huggingface.co/docs/lerobot/bring_your_own_policies).

## Inference & Evaluation

Evaluate your policies in simulation or on real hardware using the unified evaluation script. LeRobot supports standard benchmarks like **LIBERO**, **MetaWorld** and more to come.

```bash
# Evaluate a policy on the LIBERO benchmark
lerobot-eval \
  --policy.path=lerobot/pi0_libero_finetuned \
  --env.type=libero \
  --env.task=libero_object \
  --eval.n_episodes=10
```

Learn how to implement your own simulation environment or benchmark and distribute it from the HF Hub by following the [EnvHub Documentation](https://huggingface.co/docs/lerobot/envhub)

## Resources

- **[Documentation](https://huggingface.co/docs/lerobot/index):** The complete guide to tutorials & API.
- **[Discord](https://discord.gg/q8Dzzpym3f):** Join the `LeRobot` server to discuss with the community.
- **[X](https://x.com/LeRobotHF):** Follow us on X to stay up-to-date with the latest developments.
- **[Robot Learning Tutorial](https://huggingface.co/spaces/lerobot/robot-learning-tutorial):** A free, hands-on course to learn robot learning using LeRobot.

## Citation

If you use LeRobot in your research, please cite:

```bibtex
@misc{cadene2024lerobot,
    author = {Cadene, Remi and Alibert, Simon and Soare, Alexander and Gallouedec, Quentin and Zouitine, Adil and Palma, Steven and Kooijmans, Pepijn and Aractingi, Michel and Shukor, Mustafa and Aubakirova, Dana and Russi, Martino and Capuano, Francesco and Pascal, Caroline and Choghari, Jade and Moss, Jess and Wolf, Thomas},
    title = {LeRobot: State-of-the-art Machine Learning for Real-World Robotics in Pytorch},
    howpublished = "\url{https://github.com/huggingface/lerobot}",
    year = {2024}
}
```

## Contribute

We welcome contributions from everyone in the community! To get started, please read our [CONTRIBUTING.md](./CONTRIBUTING.md) guide. Whether you're adding a new feature, improving documentation, or fixing a bug, your help and feedback are invaluable. We're incredibly excited about the future of open-source robotics and can't wait to work with you on what's next—thank you for your support!

<p align="center">
  <img alt="SO101 Video" src="https://raw.githubusercontent.com/huggingface/lerobot/v0.4.3/media/readme/so100_video.webp" width="640px">
</p>

<div align="center">
<sub>Built by the <a href="https://huggingface.co/lerobot">LeRobot</a> team at <a href="https://huggingface.co">Hugging Face</a> with ❤️</sub>
</div>
