From 0ef33e5886d3f6c1a2c7bd8661dbbf33b4a02a5d Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 15 Oct 2025 18:11:59 +0200 Subject: [PATCH 01/23] blog(lerobot): init release 0.4.0 blog --- _blog.yml | 9 +++++++++ assets/lerobot-release-v040/thumbnail.png | 0 lerobot-release-v040.md | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 assets/lerobot-release-v040/thumbnail.png create mode 100644 lerobot-release-v040.md diff --git a/_blog.yml b/_blog.yml index fad1d8357f..7737a45a23 100644 --- a/_blog.yml +++ b/_blog.yml @@ -6798,3 +6798,12 @@ - optimum - quantization - inference + +- local: lerobot-release-v040 + title: "LeRobot v0.4.0: XXX" + author: imstevenpmwork + thumbnail: /blog/assets/lerobot-release-v040/thumbnail.png + date: Oct 27, 2025 + tags: + - lerobot + - robotics \ No newline at end of file diff --git a/assets/lerobot-release-v040/thumbnail.png b/assets/lerobot-release-v040/thumbnail.png new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md new file mode 100644 index 0000000000..15e9142344 --- /dev/null +++ b/lerobot-release-v040.md @@ -0,0 +1,18 @@ +--- +title: "LeRobot v0.4.0: XXX" +thumbnail: /blog/assets/lerobot-release-v040/thumbnail.png +authors: +- user: imstevenpmwork +--- + +# LeRobot v0.4.0: XXX + +(dataset tooling) https://x.com/LeRobotHF/status/1978126569055887421 -> https://github.com/huggingface/lerobot/pull/2100 +(metaworld) https://x.com/LeRobotHF/status/1978479965910811048 -> https://github.com/huggingface/lerobot/pull/2088 +(robot plugin) https://x.com/LeRobotHF/status/1975930970575397332 -> https://github.com/huggingface/lerobot/pull/2123 +(libero) https://x.com/LeRobotHF/status/1970880882530484241 -> https://github.com/huggingface/lerobot/pull/1984 +(processor + phone) https://x.com/LeRobotHF/status/1968670069237367288 -> https://github.com/huggingface/lerobot/pull/1431 & https://github.com/huggingface/lerobot/pull/1452 +(dataset v3 + streaming) https://x.com/LeRobotHF/status/1967985390117343737 -> https://github.com/huggingface/lerobot/pull/1412 & https://github.com/huggingface/lerobot/pull/1613 +(robot reachy 2) https://x.com/LeRobotHF/status/1963893227708133763 -> https://github.com/huggingface/lerobot/pull/1767 +(pi0) https://x.com/ClementDelangue/status/1974094115743711702 -> https://github.com/huggingface/lerobot/pull/1910 +(groot) \ No newline at end of file From 39ba1ed607397b827c38493b47cf418fddb69026 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 15 Oct 2025 19:03:13 +0200 Subject: [PATCH 02/23] blog(lerobot): first draft blog --- lerobot-release-v040.md | 105 +++++++++++++++++++++++++++++++++++----- 1 file changed, 94 insertions(+), 11 deletions(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index 15e9142344..fba4497faf 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -5,14 +5,97 @@ authors: - user: imstevenpmwork --- -# LeRobot v0.4.0: XXX - -(dataset tooling) https://x.com/LeRobotHF/status/1978126569055887421 -> https://github.com/huggingface/lerobot/pull/2100 -(metaworld) https://x.com/LeRobotHF/status/1978479965910811048 -> https://github.com/huggingface/lerobot/pull/2088 -(robot plugin) https://x.com/LeRobotHF/status/1975930970575397332 -> https://github.com/huggingface/lerobot/pull/2123 -(libero) https://x.com/LeRobotHF/status/1970880882530484241 -> https://github.com/huggingface/lerobot/pull/1984 -(processor + phone) https://x.com/LeRobotHF/status/1968670069237367288 -> https://github.com/huggingface/lerobot/pull/1431 & https://github.com/huggingface/lerobot/pull/1452 -(dataset v3 + streaming) https://x.com/LeRobotHF/status/1967985390117343737 -> https://github.com/huggingface/lerobot/pull/1412 & https://github.com/huggingface/lerobot/pull/1613 -(robot reachy 2) https://x.com/LeRobotHF/status/1963893227708133763 -> https://github.com/huggingface/lerobot/pull/1767 -(pi0) https://x.com/ClementDelangue/status/1974094115743711702 -> https://github.com/huggingface/lerobot/pull/1910 -(groot) \ No newline at end of file +# LeRobot's Latest Leap: Supercharging Robot Learning with Major Updates! +We're thrilled to announce a series of significant advancements across LeRobot, designed to make open-source robot learning more powerful, scalable, and user-friendly than ever before! From revamped datasets to versatile editing tools, new simulation environments, and a groundbreaking plugin system for hardware, LeRobot is continuously evolving to meet the demands of cutting-edge embodied AI. + +(TODO: IMAGE THUMBNAIL) + +## Datasets: Ready for the Next Wave of Large-Scale Robot Learning +We've completely overhauled our dataset infrastructure with **LeRobotDataset v3.0**, featuring a new chunked episode format and streaming capabilities. This is a game-changer for handling massive datasets like OXE, bringing unparalleled efficiency and scalability. + +(TODO: IMAGE) + +### What's New in v3.0? +* Chunked Episodes for Massive Scale: Our new format supports datasets at the OXE-level, enabling unprecedented scalability. +* Efficient Video Storage + Streaming: Enjoy faster loading times and seamless streaming of video data. +* Unified Parquet Metadata: Say goodbye to scattered JSONs! All episode metadata is now stored in unified, structured Parquet files for easier management and access. +* Faster Loading & Better Performance: Experience significantly reduced dataset initialization times and more efficient memory usage. + +We've also provided a conversion script to easily migrate your existing v2.1 datasets to the new v3.0 format, ensuring a smooth transition. Read more about it in our [blog post](https://huggingface.co/blog/lerobot-datasets-v3). Open-source robotics keeps leveling up! + +### New Feature: Dataset Editing Tools! +Working with LeRobot datasets just got a whole lot easier! We've introduced a powerful set of utilities for flexible dataset editing. + +With our new `lerobot-edit-dataset` CLI, you can now: +* Delete specific episodes from existing datasets. +* Split datasets by fractions or episode indices. +* Add or remove features with ease. +* Merge multiple datasets into one unified set. + +These tools streamline your workflow, allowing you to curate and optimize your robot datasets like never before. Check out the [docs](https://huggingface.co/docs/lerobot/using_dataset_tools) for more details! + +## Simulation Environments: Expanding Your Training Grounds +We're continuously expanding LeRobot's simulation capabilities to provide richer and more diverse training environments for your robotic policies. + +(TODO: IMAGE) + +### LIBERO Support: +LeRobot now officially supports **LIBERO**, one of the largest open benchmarks for Vision-Language-Action (VLA) policies, boasting over 130 tasks! This is a huge step toward building the go-to evaluation hub for VLAs, enabling easy integration and a unified setup for evaluating any VLA policy. + +Check out the [LIBERO dataset](https://huggingface.co/datasets/HuggingFaceVLA/libero) and our [docs](https://huggingface.co/docs/lerobot/en/libero) to get started! + +### Meta-World Integration: +We've integrated Meta-World, a premier benchmark for testing multi-task and generalization abilities in robotic manipulation, featuring over 50 diverse tasks. This integration, along with our standardized use of `gymnasium ≥ 1.0.0` and `mujoco ≥ 3.0.0`, ensures deterministic seeding and a robust simulation foundation. + +Train your policies with the [Meta-World dataset](https://huggingface.co/datasets/lerobot/metaworld_mt50) today! + +## Robots: A New Era of Hardware Integration with the Plugin System +Big news for hardware enthusiasts! We've launched a brand-new plugin system to revolutionize how you integrate third-party hardware with LeRobot. Now, connecting any robot, camera, or teleoperator is as simple as a `pip install`, eliminating the need to modify the core library. + +(TODO: IMAGE) + +### Key Benefits: +* Extensibility: Develop and integrate custom hardware in separate Python packages. +* Scalability: Supports a growing ecosystem of devices without bloating the core library. +* Community-Friendly: Lowers the barrier to entry for community contributions, fostering a more collaborative environment. + +Learn how to create your own plugin in our [documentation](https://huggingface.co/docs/lerobot/integrate_hardware#using-your-own-lerobot-devices-). + +### Reachy 2 Integration: +Thanks to our new plugin system, we've also added **Reachy 2** from Pollen Robotics to LeRobot! Reachy 2 is available for both real robot control and simulation, enabling you to experiment with teleoperation and autonomous demos right away. + +## Codebase and Robots: Enhanced Control and Mobile Teleoperation + +(TODO: I don't like this, need to also talk about the importance of pipeline in policies implementation) + +We're making robot control more flexible and accessible, enabling new possibilities for data collection and model training. + +(TODO: IMAGE) + +### RobotProcessor: The New Pipeline for Data Processing +We've introduced `RobotProcessor`, a powerful pipeline system for transforming data within LeRobot. This enables native support for end-effector control, making it easier to record and train AI models in end-effector space or with any other desired features. + +Key features of `RobotProcessor`: +* Modular Pipeline Architecture: Decouples data transformations from model logic, offering flexible robot control and cross-platform compatibility. +* End-Effector Control: Record and train using end-effector poses, opening up new avenues for robot manipulation. +* Phone Teleoperator: Now you can teleoperate your follower arm directly from your phone (iOS/Android), making the LeRobot SO101 setup 50% cheaper! + +This modular architecture, complete with over 30 registered processors, ensures type safety, performance, and flexibility across various robot platforms. Learn more about it in our [Introduction to Processors documentation](https://huggingface.co/docs/lerobot/introduction_processors). + +## Policies: Unleashing Open-World Generalization with pi0 and pi0.5 +In a major milestone for open-source robotics, we've integrated **pi0** and **pi0.5** policies by Physical Intelligence into LeRobot, fully ported to PyTorch! These Vision-Language-Action (VLA) models represent a significant leap towards addressing open-world generalization in robotics. + +(TODO: IMAGE) + +### What makes π₀.₅ revolutionary? +* Open-World Generalization: Designed to adapt to entirely new environments and situations, generalizing across physical, semantic, and environmental levels. +* Co-training on Heterogeneous Data: Learns from a diverse mix of multimodal web data, verbal instructions, subtask commands, and multi-environment robot data. +* Physical Intelligence Collaboration: Huge thanks to the Physical Intelligence team for their groundbreaking work! + +You can find the ported models on the Hugging Face Hub: [pi0.5_base](https://huggingface.co/lerobot/pi05_base), [pi0_base](https://huggingface.co/lerobot/pi0_base), and their Libero-tuned counterparts. + +This is a huge step forward in making robot learning as open and reproducible as NLP & CV. Try it out today, share your runs, and let's push forward the frontier of embodied AI together! + + +## TODO: Gr00t +XXX From 9b95af840dbc684561df351214c6eccef5eb01bc Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 15 Oct 2025 19:18:11 +0200 Subject: [PATCH 03/23] blog(lerobot): todo image links --- lerobot-release-v040.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index fba4497faf..f9e4904dd6 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -13,7 +13,7 @@ We're thrilled to announce a series of significant advancements across LeRobot, ## Datasets: Ready for the Next Wave of Large-Scale Robot Learning We've completely overhauled our dataset infrastructure with **LeRobotDataset v3.0**, featuring a new chunked episode format and streaming capabilities. This is a game-changer for handling massive datasets like OXE, bringing unparalleled efficiency and scalability. -(TODO: IMAGE) +![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) ### What's New in v3.0? * Chunked Episodes for Massive Scale: Our new format supports datasets at the OXE-level, enabling unprecedented scalability. @@ -37,7 +37,7 @@ These tools streamline your workflow, allowing you to curate and optimize your r ## Simulation Environments: Expanding Your Training Grounds We're continuously expanding LeRobot's simulation capabilities to provide richer and more diverse training environments for your robotic policies. -(TODO: IMAGE) +![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) ### LIBERO Support: LeRobot now officially supports **LIBERO**, one of the largest open benchmarks for Vision-Language-Action (VLA) policies, boasting over 130 tasks! This is a huge step toward building the go-to evaluation hub for VLAs, enabling easy integration and a unified setup for evaluating any VLA policy. @@ -52,7 +52,7 @@ Train your policies with the [Meta-World dataset](https://huggingface.co/dataset ## Robots: A New Era of Hardware Integration with the Plugin System Big news for hardware enthusiasts! We've launched a brand-new plugin system to revolutionize how you integrate third-party hardware with LeRobot. Now, connecting any robot, camera, or teleoperator is as simple as a `pip install`, eliminating the need to modify the core library. -(TODO: IMAGE) +![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) ### Key Benefits: * Extensibility: Develop and integrate custom hardware in separate Python packages. @@ -70,7 +70,7 @@ Thanks to our new plugin system, we've also added **Reachy 2** from Pollen Robot We're making robot control more flexible and accessible, enabling new possibilities for data collection and model training. -(TODO: IMAGE) +![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) ### RobotProcessor: The New Pipeline for Data Processing We've introduced `RobotProcessor`, a powerful pipeline system for transforming data within LeRobot. This enables native support for end-effector control, making it easier to record and train AI models in end-effector space or with any other desired features. @@ -85,7 +85,7 @@ This modular architecture, complete with over 30 registered processors, ensures ## Policies: Unleashing Open-World Generalization with pi0 and pi0.5 In a major milestone for open-source robotics, we've integrated **pi0** and **pi0.5** policies by Physical Intelligence into LeRobot, fully ported to PyTorch! These Vision-Language-Action (VLA) models represent a significant leap towards addressing open-world generalization in robotics. -(TODO: IMAGE) +![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) ### What makes π₀.₅ revolutionary? * Open-World Generalization: Designed to adapt to entirely new environments and situations, generalizing across physical, semantic, and environmental levels. From c538c6c88b13f8780c9cba1a9d2c3c367e11e04e Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Mon, 20 Oct 2025 14:55:02 +0200 Subject: [PATCH 04/23] blog(lerobot): complete sections --- lerobot-release-v040.md | 110 ++++++++++++++++++++++++++++++---------- 1 file changed, 82 insertions(+), 28 deletions(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index f9e4904dd6..63b9caf93c 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -3,18 +3,24 @@ title: "LeRobot v0.4.0: XXX" thumbnail: /blog/assets/lerobot-release-v040/thumbnail.png authors: - user: imstevenpmwork +- user: aractingi +- user: pepijn223 +- user: CarolinePascal +- user: jadechoghari +- user: fracapuano +- user: AdilZtn +- user: nepyope +- user: thomwolf --- # LeRobot's Latest Leap: Supercharging Robot Learning with Major Updates! We're thrilled to announce a series of significant advancements across LeRobot, designed to make open-source robot learning more powerful, scalable, and user-friendly than ever before! From revamped datasets to versatile editing tools, new simulation environments, and a groundbreaking plugin system for hardware, LeRobot is continuously evolving to meet the demands of cutting-edge embodied AI. -(TODO: IMAGE THUMBNAIL) +(XYZ: IMAGE THUMBNAIL) ## Datasets: Ready for the Next Wave of Large-Scale Robot Learning We've completely overhauled our dataset infrastructure with **LeRobotDataset v3.0**, featuring a new chunked episode format and streaming capabilities. This is a game-changer for handling massive datasets like OXE, bringing unparalleled efficiency and scalability. -![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) - ### What's New in v3.0? * Chunked Episodes for Massive Scale: Our new format supports datasets at the OXE-level, enabling unprecedented scalability. * Efficient Video Storage + Streaming: Enjoy faster loading times and seamless streaming of video data. @@ -37,7 +43,7 @@ These tools streamline your workflow, allowing you to curate and optimize your r ## Simulation Environments: Expanding Your Training Grounds We're continuously expanding LeRobot's simulation capabilities to provide richer and more diverse training environments for your robotic policies. -![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) +![XYZ](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) ### LIBERO Support: LeRobot now officially supports **LIBERO**, one of the largest open benchmarks for Vision-Language-Action (VLA) policies, boasting over 130 tasks! This is a huge step toward building the go-to evaluation hub for VLAs, enabling easy integration and a unified setup for evaluating any VLA policy. @@ -49,11 +55,60 @@ We've integrated Meta-World, a premier benchmark for testing multi-task and gene Train your policies with the [Meta-World dataset](https://huggingface.co/datasets/lerobot/metaworld_mt50) today! +## Codebase: Powerful Tools For Everyone +We're making robot control more flexible and accessible, enabling new possibilities for data collection and model training. + +### The New Pipeline for Data Processing + +Getting data from a robot to a model (and back!) is tricky. Raw sensor data, joint positions, and language instructions don't match what AI models expect. Models need normalized, batched tensors on the right device, while your robot hardware needs specific action commands. + +We're excited to introduce **Processors**: a new, modular pipeline that acts as a universal translator for your data. Think of it as an assembly line where each `ProcessorStep` handles one specific job—like normalizing, tokenizing text, or moving data to the GPU. + +You can chain these steps together into a powerful pipeline to perfectly manage your data flow. We've even created two distinct types to make life easier: + +* `PolicyProcessorPipeline`: Built for models. It expertly handles batched tensors for high-performance training and inference. +* `RobotProcessorPipeline`: Built for hardware. It processes individual data points (like a single observation or action) for real-time robot control. + +This system makes it simple to connect any policy to any robot, ensuring your data is always in the perfect format for every step of the way. Learn more about it in our [Introduction to Processors documentation](https://huggingface.co/docs/lerobot/introduction_processors). + +### Multi-GPU Training Made Easy + +Training large robot policies just got a lot faster\! We've integrated [Accelerate](https://github.com/huggingface/accelerate) directly into our training pipeline, making it incredibly simple to scale your experiments across multiple GPUs with just **one command**. + +Whether you're fine-tuning a policy or running large-scale experiments, LeRobot now handles all the complexities of distributed training for you. This means you can drastically reduce training time, cutting it in half with 2 GPUs, down to a third with 3 GPUs, and beyond. + +Check out the [documentation](https://huggingface.co/docs/lerobot/multi_gpu_training) to accelerate your robot learning\! + +## Policies: Unleashing Open-World Generalization + +![XYZ](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) + +### PI0 and PI0.5 +In a major milestone for open-source robotics, we've integrated **pi0** and **pi0.5** policies by Physical Intelligence into LeRobot, fully ported to PyTorch! These Vision-Language-Action (VLA) models represent a significant leap towards addressing open-world generalization in robotics. + +#### What makes π₀.₅ revolutionary? +* Open-World Generalization: Designed to adapt to entirely new environments and situations, generalizing across physical, semantic, and environmental levels. +* Co-training on Heterogeneous Data: Learns from a diverse mix of multimodal web data, verbal instructions, subtask commands, and multi-environment robot data. +* Physical Intelligence Collaboration: Huge thanks to the Physical Intelligence team for their groundbreaking work! + +You can find the ported models on the Hugging Face Hub: [pi0.5_base](https://huggingface.co/lerobot/pi05_base), [pi0_base](https://huggingface.co/lerobot/pi0_base), and their Libero-tuned counterparts. + +This is a huge step forward in making robot learning as open and reproducible as NLP & CV. Try it out today, share your runs, and let's push forward the frontier of embodied AI together! + +### Nvidia Gr00t N1.5 + +We're excited to announce the native integration of an experimental version of **Nvidia's Gr00t N1.5** into LeRobot\! This is another major step toward bringing cutting-edge, large-scale models to the open-source community. + +#### What is Gr00t? + + * General-Purpose Foundation Model: Gr00t N1.5 is designed as a foundation model for humanoid robots and robotic manipulation, stemming from NVIDIA's groundbreaking research. + * Experimental Integration: This integration is a **work-in-progress (WIP)**, and we are actively working to improve its performance within the LeRobot framework. + +We invite the community to experiment with this model and contribute to its development. You can learn more about the original model at the [NVIDIA Research page](https://research.nvidia.com/labs/gear/gr00t-n1_5/) and the [Isaac-GR00T repository](https://github.com/NVIDIA/Isaac-GR00T). + ## Robots: A New Era of Hardware Integration with the Plugin System Big news for hardware enthusiasts! We've launched a brand-new plugin system to revolutionize how you integrate third-party hardware with LeRobot. Now, connecting any robot, camera, or teleoperator is as simple as a `pip install`, eliminating the need to modify the core library. -![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) - ### Key Benefits: * Extensibility: Develop and integrate custom hardware in separate Python packages. * Scalability: Supports a growing ecosystem of devices without bloating the core library. @@ -64,38 +119,37 @@ Learn how to create your own plugin in our [documentation](https://huggingface.c ### Reachy 2 Integration: Thanks to our new plugin system, we've also added **Reachy 2** from Pollen Robotics to LeRobot! Reachy 2 is available for both real robot control and simulation, enabling you to experiment with teleoperation and autonomous demos right away. -## Codebase and Robots: Enhanced Control and Mobile Teleoperation +### Phone Integration -(TODO: I don't like this, need to also talk about the importance of pipeline in policies implementation) +Thanks to our powerful new pipeline system, you can now teleoperate your follower arm **right from your phone** (iOS/Android). The phone acts as a teleoperator device, and our `RobotProcessor` pipeline handles all the transformations, allowing you to drive robots in different action spaces (like end-effector space) with ease. -We're making robot control more flexible and accessible, enabling new possibilities for data collection and model training. +## The Hugging Face Robot Learning Course -![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) +![XYZ](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) -### RobotProcessor: The New Pipeline for Data Processing -We've introduced `RobotProcessor`, a powerful pipeline system for transforming data within LeRobot. This enables native support for end-effector control, making it easier to record and train AI models in end-effector space or with any other desired features. +We're launching a comprehensive, self-paced, and entirely **open-source course** designed to make robot learning accessible to everyone\! If you're curious about how real-world robots learn, this is the perfect place to start. -Key features of `RobotProcessor`: -* Modular Pipeline Architecture: Decouples data transformations from model logic, offering flexible robot control and cross-platform compatibility. -* End-Effector Control: Record and train using end-effector poses, opening up new avenues for robot manipulation. -* Phone Teleoperator: Now you can teleoperate your follower arm directly from your phone (iOS/Android), making the LeRobot SO101 setup 50% cheaper! +In this course, you’ll learn how to: -This modular architecture, complete with over 30 registered processors, ensures type safety, performance, and flexibility across various robot platforms. Learn more about it in our [Introduction to Processors documentation](https://huggingface.co/docs/lerobot/introduction_processors). + * Understand the fundamentals of classical robotics. + * Use generative models for imitation learning (VAEs, diffusion, etc.). + * Apply Reinforcement Learning to real-world robots. + * Explore the latest generalist robot policies like PI0 and SmolVLA. -## Policies: Unleashing Open-World Generalization with pi0 and pi0.5 -In a major milestone for open-source robotics, we've integrated **pi0** and **pi0.5** policies by Physical Intelligence into LeRobot, fully ported to PyTorch! These Vision-Language-Action (VLA) models represent a significant leap towards addressing open-world generalization in robotics. +Join the [Hugging Face Robotics organization](https://huggingface.co/robotics-course) to follow along and start your journey\! -![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) +### Deep Dive: The Modern Robot Learning Tutorial -### What makes π₀.₅ revolutionary? -* Open-World Generalization: Designed to adapt to entirely new environments and situations, generalizing across physical, semantic, and environmental levels. -* Co-training on Heterogeneous Data: Learns from a diverse mix of multimodal web data, verbal instructions, subtask commands, and multi-environment robot data. -* Physical Intelligence Collaboration: Huge thanks to the Physical Intelligence team for their groundbreaking work! +For those who want to go deeper, we've also published a **hands-on tutorial** on the most recent advancements in robotics. This guide provides self-contained explanations, re-derives modern techniques from first principles, and includes ready-to-use code examples using LeRobot and Hugging Face. -You can find the ported models on the Hugging Face Hub: [pi0.5_base](https://huggingface.co/lerobot/pi05_base), [pi0_base](https://huggingface.co/lerobot/pi0_base), and their Libero-tuned counterparts. +The tutorial itself is hosted in a [Space](https://huggingface.co/spaces/lerobot/robot-learning-tutorial) and it features practical examples using LeRobot, with all models and datasets on the Hugging Hub. You can also check out the [ArXiv paper](http://arxiv.org/abs/2510.12403) for a detailed overview. -This is a huge step forward in making robot learning as open and reproducible as NLP & CV. Try it out today, share your runs, and let's push forward the frontier of embodied AI together! +## Final thoughts from the team + +Beyond these major features, this release is packed with numerous bug fixes, documentation improvements, updated dependencies, and better infrastructure to make your experience with LeRobot smoother and more reliable. + +We want to extend a huge **thank you to everyone in the community** for your invaluable contributions, feedback, and support. We're incredibly excited about the future of open-source robotics and can't wait to show you what's next. -## TODO: Gr00t -XXX +Stay tuned for more to come\!
+– The LeRobot team ❤️ From 5a05429275a51f38796267c64180496454902be1 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 22 Oct 2025 12:43:02 +0200 Subject: [PATCH 05/23] clog(lerobot): add thumbnail --- assets/lerobot-release-v040/thumbnail.png | Bin 0 -> 116570 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/lerobot-release-v040/thumbnail.png b/assets/lerobot-release-v040/thumbnail.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ca22ddc8bb6dc308a18fef49e89063e55bd9ccbf 100644 GIT binary patch literal 116570 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 literal 0 HcmV?d00001 From a23fdf619dc568ca0bc7bae01415eea3347be612 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 22 Oct 2025 13:06:03 +0200 Subject: [PATCH 06/23] blog(lerobot): edit gr00t section + title + images --- lerobot-release-v040.md | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index 63b9caf93c..e9a2e4e67c 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -1,5 +1,5 @@ --- -title: "LeRobot v0.4.0: XXX" +title: "LeRobot v0.4.0: Super Charging OSS Robotics Learning" thumbnail: /blog/assets/lerobot-release-v040/thumbnail.png authors: - user: imstevenpmwork @@ -13,15 +13,13 @@ authors: - user: thomwolf --- -# LeRobot's Latest Leap: Supercharging Robot Learning with Major Updates! +# LeRobot's v0.4.0 Latest Major Updates! We're thrilled to announce a series of significant advancements across LeRobot, designed to make open-source robot learning more powerful, scalable, and user-friendly than ever before! From revamped datasets to versatile editing tools, new simulation environments, and a groundbreaking plugin system for hardware, LeRobot is continuously evolving to meet the demands of cutting-edge embodied AI. -(XYZ: IMAGE THUMBNAIL) - ## Datasets: Ready for the Next Wave of Large-Scale Robot Learning We've completely overhauled our dataset infrastructure with **LeRobotDataset v3.0**, featuring a new chunked episode format and streaming capabilities. This is a game-changer for handling massive datasets like OXE, bringing unparalleled efficiency and scalability. -### What's New in v3.0? +### What's New in Datasets v3.0? * Chunked Episodes for Massive Scale: Our new format supports datasets at the OXE-level, enabling unprecedented scalability. * Efficient Video Storage + Streaming: Enjoy faster loading times and seamless streaming of video data. * Unified Parquet Metadata: Say goodbye to scattered JSONs! All episode metadata is now stored in unified, structured Parquet files for easier management and access. @@ -43,7 +41,7 @@ These tools streamline your workflow, allowing you to curate and optimize your r ## Simulation Environments: Expanding Your Training Grounds We're continuously expanding LeRobot's simulation capabilities to provide richer and more diverse training environments for your robotic policies. -![XYZ](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) +![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) ### LIBERO Support: LeRobot now officially supports **LIBERO**, one of the largest open benchmarks for Vision-Language-Action (VLA) policies, boasting over 130 tasks! This is a huge step toward building the go-to evaluation hub for VLAs, enabling easy integration and a unified setup for evaluating any VLA policy. @@ -81,10 +79,10 @@ Check out the [documentation](https://huggingface.co/docs/lerobot/multi_gpu_trai ## Policies: Unleashing Open-World Generalization -![XYZ](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) +![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) ### PI0 and PI0.5 -In a major milestone for open-source robotics, we've integrated **pi0** and **pi0.5** policies by Physical Intelligence into LeRobot, fully ported to PyTorch! These Vision-Language-Action (VLA) models represent a significant leap towards addressing open-world generalization in robotics. +In a major milestone for open-source robotics, we've integrated **pi0** and **pi0.5** policies by Physical Intelligence into LeRobot! These Vision-Language-Action (VLA) models represent a significant leap towards addressing open-world generalization in robotics. #### What makes π₀.₅ revolutionary? * Open-World Generalization: Designed to adapt to entirely new environments and situations, generalizing across physical, semantic, and environmental levels. @@ -93,18 +91,17 @@ In a major milestone for open-source robotics, we've integrated **pi0** and **pi You can find the ported models on the Hugging Face Hub: [pi0.5_base](https://huggingface.co/lerobot/pi05_base), [pi0_base](https://huggingface.co/lerobot/pi0_base), and their Libero-tuned counterparts. -This is a huge step forward in making robot learning as open and reproducible as NLP & CV. Try it out today, share your runs, and let's push forward the frontier of embodied AI together! - -### Nvidia Gr00t N1.5 - -We're excited to announce the native integration of an experimental version of **Nvidia's Gr00t N1.5** into LeRobot\! This is another major step toward bringing cutting-edge, large-scale models to the open-source community. +### GR00T N1.5 +In another exciting development, we've integrated **NVIDIA's GR00T N1.5** into LeRobot, thanks to a fantastic collaboration with the NVIDIA robotics team! This open foundation model is a powerhouse for generalized robot reasoning and skills. As a cross-embodiment model, it takes multimodal input (like language and images) to perform complex manipulation tasks in diverse environments, marking another major leap in generalized robotics. -#### What is Gr00t? +#### What makes GR00T N1.5 a game-changer? +* Generalized Reasoning & Skills: Designed as a cross-embodiment foundation model, GR00T N1.5 excels at generalized reasoning and manipulation tasks, with improved language-following ability. +* Expansive Heterogeneous Training: It learns from a massive dataset combining real captured humanoid data, synthetic data generated by NVIDIA Isaac GR00T Blueprint, and internet-scale video data. +* NVIDIA Collaboration: We're thrilled to partner with the NVIDIA team to bring this state-of-the-art model to the open-source LeRobot community! - * General-Purpose Foundation Model: Gr00t N1.5 is designed as a foundation model for humanoid robots and robotic manipulation, stemming from NVIDIA's groundbreaking research. - * Experimental Integration: This integration is a **work-in-progress (WIP)**, and we are actively working to improve its performance within the LeRobot framework. +You can find the model on the Hugging Face Hub: [GR00T-N1.5-3B](https://huggingface.co/nvidia/GR00T-N1.5-3B). For more details, check out the [NVIDIA research page](https://research.nvidia.com/labs/gear/gr00t-n1_5/) and the [official GitHub repository](https://github.com/NVIDIA/Isaac-GR00T). -We invite the community to experiment with this model and contribute to its development. You can learn more about the original model at the [NVIDIA Research page](https://research.nvidia.com/labs/gear/gr00t-n1_5/) and the [Isaac-GR00T repository](https://github.com/NVIDIA/Isaac-GR00T). +The native integration of these policies in `lerobot` is a huge step forward in making robot learning as open and reproducible as it can be. Try them out today, share your runs, and let's push forward the frontier of embodied AI together! ## Robots: A New Era of Hardware Integration with the Plugin System Big news for hardware enthusiasts! We've launched a brand-new plugin system to revolutionize how you integrate third-party hardware with LeRobot. Now, connecting any robot, camera, or teleoperator is as simple as a `pip install`, eliminating the need to modify the core library. @@ -125,7 +122,7 @@ Thanks to our powerful new pipeline system, you can now teleoperate your followe ## The Hugging Face Robot Learning Course -![XYZ](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) +![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) We're launching a comprehensive, self-paced, and entirely **open-source course** designed to make robot learning accessible to everyone\! If you're curious about how real-world robots learn, this is the perfect place to start. From 6c12fa6cc722e117f09f2bdf52941f9067f1fa2e Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 22 Oct 2025 13:16:00 +0200 Subject: [PATCH 07/23] blog(lerobot): add examples note --- lerobot-release-v040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index e9a2e4e67c..ab963ab329 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -144,7 +144,7 @@ The tutorial itself is hosted in a [Space](https://huggingface.co/spaces/lerobot ## Final thoughts from the team -Beyond these major features, this release is packed with numerous bug fixes, documentation improvements, updated dependencies, and better infrastructure to make your experience with LeRobot smoother and more reliable. +Beyond these major features, this release is packed with numerous bug fixes, documentation improvements, updated dependencies, more examples and better infrastructure to make your experience with LeRobot smoother and more reliable. We want to extend a huge **thank you to everyone in the community** for your invaluable contributions, feedback, and support. We're incredibly excited about the future of open-source robotics and can't wait to show you what's next. From 8b18832e188112f1450c15f70ba1fdf4f7efb496 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 22 Oct 2025 14:21:22 +0200 Subject: [PATCH 08/23] blog(lerobot): update metadata --- _blog.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_blog.yml b/_blog.yml index 608da34190..4733978fca 100644 --- a/_blog.yml +++ b/_blog.yml @@ -6800,10 +6800,10 @@ - inference - local: lerobot-release-v040 - title: "LeRobot v0.4.0: XXX" + title: "LeRobot v0.4.0: Super Charging OSS Robotics Learning" author: imstevenpmwork thumbnail: /blog/assets/lerobot-release-v040/thumbnail.png - date: Oct 27, 2025 + date: Oct 24, 2025 tags: - lerobot - robotics @@ -6840,4 +6840,4 @@ - vision - multimodal - vlm - - open-source + - open-source \ No newline at end of file From 6dfc416d6bc95b054694407ba542259cedf47620 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 22 Oct 2025 17:00:09 +0200 Subject: [PATCH 09/23] Update lerobot-release-v040.md Co-authored-by: Merve Noyan --- lerobot-release-v040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index ab963ab329..1cd60f89c2 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -43,7 +43,7 @@ We're continuously expanding LeRobot's simulation capabilities to provide richer ![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) -### LIBERO Support: +### LIBERO Support LeRobot now officially supports **LIBERO**, one of the largest open benchmarks for Vision-Language-Action (VLA) policies, boasting over 130 tasks! This is a huge step toward building the go-to evaluation hub for VLAs, enabling easy integration and a unified setup for evaluating any VLA policy. Check out the [LIBERO dataset](https://huggingface.co/datasets/HuggingFaceVLA/libero) and our [docs](https://huggingface.co/docs/lerobot/en/libero) to get started! From a9151841175f6c03184587dd88e2b591a273b9a0 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 22 Oct 2025 17:00:29 +0200 Subject: [PATCH 10/23] Update lerobot-release-v040.md Co-authored-by: Merve Noyan --- lerobot-release-v040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index 1cd60f89c2..c1f7bee4fd 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -48,7 +48,7 @@ LeRobot now officially supports **LIBERO**, one of the largest open benchmarks f Check out the [LIBERO dataset](https://huggingface.co/datasets/HuggingFaceVLA/libero) and our [docs](https://huggingface.co/docs/lerobot/en/libero) to get started! -### Meta-World Integration: +### Meta-World Integration We've integrated Meta-World, a premier benchmark for testing multi-task and generalization abilities in robotic manipulation, featuring over 50 diverse tasks. This integration, along with our standardized use of `gymnasium ≥ 1.0.0` and `mujoco ≥ 3.0.0`, ensures deterministic seeding and a robust simulation foundation. Train your policies with the [Meta-World dataset](https://huggingface.co/datasets/lerobot/metaworld_mt50) today! From 1389d5a06e65cba5b90db25738e7d524a9d5fadc Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 22 Oct 2025 17:17:08 +0200 Subject: [PATCH 11/23] Update lerobot-release-v040.md Co-authored-by: Merve Noyan --- lerobot-release-v040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index c1f7bee4fd..a380f2a652 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -106,7 +106,7 @@ The native integration of these policies in `lerobot` is a huge step forward in ## Robots: A New Era of Hardware Integration with the Plugin System Big news for hardware enthusiasts! We've launched a brand-new plugin system to revolutionize how you integrate third-party hardware with LeRobot. Now, connecting any robot, camera, or teleoperator is as simple as a `pip install`, eliminating the need to modify the core library. -### Key Benefits: +### Key Benefits * Extensibility: Develop and integrate custom hardware in separate Python packages. * Scalability: Supports a growing ecosystem of devices without bloating the core library. * Community-Friendly: Lowers the barrier to entry for community contributions, fostering a more collaborative environment. From 92e97f597b317530e11c4c10b51e9cd8d31d6574 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 22 Oct 2025 17:19:33 +0200 Subject: [PATCH 12/23] Update lerobot-release-v040.md Co-authored-by: Merve Noyan --- lerobot-release-v040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index a380f2a652..fdb57ff9a0 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -124,7 +124,7 @@ Thanks to our powerful new pipeline system, you can now teleoperate your followe ![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) -We're launching a comprehensive, self-paced, and entirely **open-source course** designed to make robot learning accessible to everyone\! If you're curious about how real-world robots learn, this is the perfect place to start. +We're launching a comprehensive, self-paced, and entirely **open-source course** designed to make robot learning accessible to everyone! If you're curious about how real-world robots learn, this is the perfect place to start. In this course, you’ll learn how to: From 73c8d2a7a10b0743d1f6be0a6ba70f272e669c80 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 22 Oct 2025 17:21:05 +0200 Subject: [PATCH 13/23] Update lerobot-release-v040.md Co-authored-by: Merve Noyan --- lerobot-release-v040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index fdb57ff9a0..8d34721f55 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -113,7 +113,7 @@ Big news for hardware enthusiasts! We've launched a brand-new plugin system to r Learn how to create your own plugin in our [documentation](https://huggingface.co/docs/lerobot/integrate_hardware#using-your-own-lerobot-devices-). -### Reachy 2 Integration: +### Reachy 2 Integration Thanks to our new plugin system, we've also added **Reachy 2** from Pollen Robotics to LeRobot! Reachy 2 is available for both real robot control and simulation, enabling you to experiment with teleoperation and autonomous demos right away. ### Phone Integration From 13bbd0dc7304f8deb8bd704a2f8b052c757695bf Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 22 Oct 2025 17:22:18 +0200 Subject: [PATCH 14/23] Update lerobot-release-v040.md Co-authored-by: Merve Noyan --- lerobot-release-v040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index 8d34721f55..c334179748 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -148,5 +148,5 @@ Beyond these major features, this release is packed with numerous bug fixes, doc We want to extend a huge **thank you to everyone in the community** for your invaluable contributions, feedback, and support. We're incredibly excited about the future of open-source robotics and can't wait to show you what's next. -Stay tuned for more to come\!
+Stay tuned for more to come! – The LeRobot team ❤️ From 0e37958149f89bcdc4995105e2c49a52910a3a47 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 22 Oct 2025 17:26:19 +0200 Subject: [PATCH 15/23] blog(lerobot): address feedback --- lerobot-release-v040.md | 93 +++++++++++++++++++++++++++++++++++------ 1 file changed, 81 insertions(+), 12 deletions(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index c334179748..cf113fa36d 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -16,8 +16,35 @@ authors: # LeRobot's v0.4.0 Latest Major Updates! We're thrilled to announce a series of significant advancements across LeRobot, designed to make open-source robot learning more powerful, scalable, and user-friendly than ever before! From revamped datasets to versatile editing tools, new simulation environments, and a groundbreaking plugin system for hardware, LeRobot is continuously evolving to meet the demands of cutting-edge embodied AI. +## Table-of-Contents + +- [LeRobot's v0.4.0 Latest Major Updates!](#lerobots-v040-latest-major-updates) + - [Table-of-Contents](#table-of-contents) + - [Datasets: Ready for the Next Wave of Large-Scale Robot Learning](#datasets-ready-for-the-next-wave-of-large-scale-robot-learning) + - [What's New in Datasets v3.0?](#whats-new-in-datasets-v30) + - [New Feature: Dataset Editing Tools!](#new-feature-dataset-editing-tools) + - [Simulation Environments: Expanding Your Training Grounds](#simulation-environments-expanding-your-training-grounds) + - [LIBERO Support](#libero-support) + - [Meta-World Integration](#meta-world-integration) + - [Codebase: Powerful Tools For Everyone](#codebase-powerful-tools-for-everyone) + - [The New Pipeline for Data Processing](#the-new-pipeline-for-data-processing) + - [Multi-GPU Training Made Easy](#multi-gpu-training-made-easy) + - [Policies: Unleashing Open-World Generalization](#policies-unleashing-open-world-generalization) + - [PI0 and PI0.5](#pi0-and-pi05) + - [What makes π₀.₅ revolutionary?](#what-makes-π-revolutionary) + - [GR00T N1.5](#gr00t-n15) + - [What makes GR00T N1.5 a game-changer?](#what-makes-gr00t-n15-a-game-changer) + - [Robots: A New Era of Hardware Integration with the Plugin System](#robots-a-new-era-of-hardware-integration-with-the-plugin-system) + - [Key Benefits](#key-benefits) + - [Reachy 2 Integration](#reachy-2-integration) + - [Phone Integration](#phone-integration) + - [The Hugging Face Robot Learning Course](#the-hugging-face-robot-learning-course) + - [Deep Dive: The Modern Robot Learning Tutorial](#deep-dive-the-modern-robot-learning-tutorial) + - [Final thoughts from the team](#final-thoughts-from-the-team) + + ## Datasets: Ready for the Next Wave of Large-Scale Robot Learning -We've completely overhauled our dataset infrastructure with **LeRobotDataset v3.0**, featuring a new chunked episode format and streaming capabilities. This is a game-changer for handling massive datasets like OXE, bringing unparalleled efficiency and scalability. +We've completely overhauled our dataset infrastructure with **LeRobotDataset v3.0**, featuring a new chunked episode format and streaming capabilities. This is a game-changer for handling massive datasets like [OXE](https://huggingface.co/collections/lerobot/open-x-embodiment) and [Droid](https://huggingface.co/datasets/lerobot/droid_1.0.1), bringing unparalleled efficiency and scalability. ### What's New in Datasets v3.0? * Chunked Episodes for Massive Scale: Our new format supports datasets at the OXE-level, enabling unprecedented scalability. @@ -36,6 +63,21 @@ With our new `lerobot-edit-dataset` CLI, you can now: * Add or remove features with ease. * Merge multiple datasets into one unified set. +```bash +# Merge multiple datasets into a single dataset. +lerobot-edit-dataset \ + --repo_id lerobot/pusht_merged \ + --operation.type merge \ + --operation.repo_ids "['lerobot/pusht_train', 'lerobot/pusht_val']" + +# Delete episodes and save to a new dataset (preserves original dataset) +lerobot-edit-dataset \ + --repo_id lerobot/pusht \ + --new_repo_id lerobot/pusht_after_deletion \ + --operation.type delete_episodes \ + --operation.episode_indices "[0, 2, 5]" +``` + These tools streamline your workflow, allowing you to curate and optimize your robot datasets like never before. Check out the [docs](https://huggingface.co/docs/lerobot/using_dataset_tools) for more details! ## Simulation Environments: Expanding Your Training Grounds @@ -44,12 +86,12 @@ We're continuously expanding LeRobot's simulation capabilities to provide richer ![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) ### LIBERO Support -LeRobot now officially supports **LIBERO**, one of the largest open benchmarks for Vision-Language-Action (VLA) policies, boasting over 130 tasks! This is a huge step toward building the go-to evaluation hub for VLAs, enabling easy integration and a unified setup for evaluating any VLA policy. +LeRobot now officially supports [LIBERO](https://libero-project.github.io/intro.html), one of the largest open benchmarks for Vision-Language-Action (VLA) policies, boasting over 130 tasks! This is a huge step toward building the go-to evaluation hub for VLAs, enabling easy integration and a unified setup for evaluating any VLA policy. Check out the [LIBERO dataset](https://huggingface.co/datasets/HuggingFaceVLA/libero) and our [docs](https://huggingface.co/docs/lerobot/en/libero) to get started! ### Meta-World Integration -We've integrated Meta-World, a premier benchmark for testing multi-task and generalization abilities in robotic manipulation, featuring over 50 diverse tasks. This integration, along with our standardized use of `gymnasium ≥ 1.0.0` and `mujoco ≥ 3.0.0`, ensures deterministic seeding and a robust simulation foundation. +We've integrated [Meta-World](https://meta-world.github.io), a premier benchmark for testing multi-task and generalization abilities in robotic manipulation, featuring over 50 diverse manipulation tasks. This integration, along with our standardized use of `gymnasium ≥ 1.0.0` and `mujoco ≥ 3.0.0`, ensures deterministic seeding and a robust simulation foundation. Train your policies with the [Meta-World dataset](https://huggingface.co/datasets/lerobot/metaworld_mt50) today! @@ -67,11 +109,39 @@ You can chain these steps together into a powerful pipeline to perfectly manage * `PolicyProcessorPipeline`: Built for models. It expertly handles batched tensors for high-performance training and inference. * `RobotProcessorPipeline`: Built for hardware. It processes individual data points (like a single observation or action) for real-time robot control. +```python +# Get environment state +obs = robot.get_observation() + +# Rename, Batch, Normalize, Tokenize, Move Device ... +obs_processed = preprocess(obs) + +# Run inference +action = model.select_action(obs_processed) + +# Unnormalize, Move Device ... +action_processed = postprocess(action) + +# Execute action +robot.send_action(action_processed) +``` + This system makes it simple to connect any policy to any robot, ensuring your data is always in the perfect format for every step of the way. Learn more about it in our [Introduction to Processors documentation](https://huggingface.co/docs/lerobot/introduction_processors). ### Multi-GPU Training Made Easy -Training large robot policies just got a lot faster\! We've integrated [Accelerate](https://github.com/huggingface/accelerate) directly into our training pipeline, making it incredibly simple to scale your experiments across multiple GPUs with just **one command**. +Training large robot policies just got a lot faster\! We've integrated [Accelerate](https://github.com/huggingface/accelerate) directly into our training pipeline, making it incredibly simple to scale your experiments across multiple GPUs with just **one command**: + +```bash +accelerate launch \ + --multi_gpu \ + --num_processes=$NUM_GPUs \ + $(which lerobot-train) \ + --dataset.repo_id=${HF_USER}/my_dataset \ + --policy.repo_id=${HF_USER}/my_trained_policy \ + --policy.type=$POLICY_TYPE \ + # ... More training configuration flags +``` Whether you're fine-tuning a policy or running large-scale experiments, LeRobot now handles all the complexities of distributed training for you. This means you can drastically reduce training time, cutting it in half with 2 GPUs, down to a third with 3 GPUs, and beyond. @@ -87,9 +157,9 @@ In a major milestone for open-source robotics, we've integrated **pi0** and **pi #### What makes π₀.₅ revolutionary? * Open-World Generalization: Designed to adapt to entirely new environments and situations, generalizing across physical, semantic, and environmental levels. * Co-training on Heterogeneous Data: Learns from a diverse mix of multimodal web data, verbal instructions, subtask commands, and multi-environment robot data. -* Physical Intelligence Collaboration: Huge thanks to the Physical Intelligence team for their groundbreaking work! +* Physical Intelligence Collaboration: Huge thanks to the [Physical Intelligence team](https://huggingface.co/physical-intelligence) for their groundbreaking work! -You can find the ported models on the Hugging Face Hub: [pi0.5_base](https://huggingface.co/lerobot/pi05_base), [pi0_base](https://huggingface.co/lerobot/pi0_base), and their Libero-tuned counterparts. +You can find the ported models on the Hugging Face Hub: [pi0.5_base](https://huggingface.co/lerobot/pi05_base), [pi0_base](https://huggingface.co/lerobot/pi0_base), and their Libero-tuned counterparts. For more details, checkout the [Physical Intelligence Reasearch](https://www.physicalintelligence.company/blog/pi05) ### GR00T N1.5 In another exciting development, we've integrated **NVIDIA's GR00T N1.5** into LeRobot, thanks to a fantastic collaboration with the NVIDIA robotics team! This open foundation model is a powerhouse for generalized robot reasoning and skills. As a cross-embodiment model, it takes multimodal input (like language and images) to perform complex manipulation tasks in diverse environments, marking another major leap in generalized robotics. @@ -97,7 +167,7 @@ In another exciting development, we've integrated **NVIDIA's GR00T N1.5** into L #### What makes GR00T N1.5 a game-changer? * Generalized Reasoning & Skills: Designed as a cross-embodiment foundation model, GR00T N1.5 excels at generalized reasoning and manipulation tasks, with improved language-following ability. * Expansive Heterogeneous Training: It learns from a massive dataset combining real captured humanoid data, synthetic data generated by NVIDIA Isaac GR00T Blueprint, and internet-scale video data. -* NVIDIA Collaboration: We're thrilled to partner with the NVIDIA team to bring this state-of-the-art model to the open-source LeRobot community! +* NVIDIA Collaboration: We're thrilled to partner with the [NVIDIA team](https://huggingface.co/nvidia) to bring this state-of-the-art model to the open-source LeRobot community! You can find the model on the Hugging Face Hub: [GR00T-N1.5-3B](https://huggingface.co/nvidia/GR00T-N1.5-3B). For more details, check out the [NVIDIA research page](https://research.nvidia.com/labs/gear/gr00t-n1_5/) and the [official GitHub repository](https://github.com/NVIDIA/Isaac-GR00T). @@ -114,11 +184,10 @@ Big news for hardware enthusiasts! We've launched a brand-new plugin system to r Learn how to create your own plugin in our [documentation](https://huggingface.co/docs/lerobot/integrate_hardware#using-your-own-lerobot-devices-). ### Reachy 2 Integration -Thanks to our new plugin system, we've also added **Reachy 2** from Pollen Robotics to LeRobot! Reachy 2 is available for both real robot control and simulation, enabling you to experiment with teleoperation and autonomous demos right away. +Thanks to our new plugin system, we've also added [Reachy 2](https://www.pollen-robotics.com/reachy/) from Pollen Robotics to LeRobot! Reachy 2 is available for both real robot control and simulation, enabling you to experiment with teleoperation and autonomous demos right away. ### Phone Integration - -Thanks to our powerful new pipeline system, you can now teleoperate your follower arm **right from your phone** (iOS/Android). The phone acts as a teleoperator device, and our `RobotProcessor` pipeline handles all the transformations, allowing you to drive robots in different action spaces (like end-effector space) with ease. +Thanks to our powerful new pipeline system, you can now teleoperate your follower arm **right from your phone** (iOS/Android). The phone acts as a teleoperator device, and our `RobotProcessor` pipeline handles all the transformations, allowing you to drive robots in different action spaces (like end-effector space) with ease. [Check out the examples!](https://github.com/huggingface/lerobot/tree/main/examples/phone_to_so100) ## The Hugging Face Robot Learning Course @@ -139,7 +208,7 @@ Join the [Hugging Face Robotics organization](https://huggingface.co/robotics-co For those who want to go deeper, we've also published a **hands-on tutorial** on the most recent advancements in robotics. This guide provides self-contained explanations, re-derives modern techniques from first principles, and includes ready-to-use code examples using LeRobot and Hugging Face. -The tutorial itself is hosted in a [Space](https://huggingface.co/spaces/lerobot/robot-learning-tutorial) and it features practical examples using LeRobot, with all models and datasets on the Hugging Hub. You can also check out the [ArXiv paper](http://arxiv.org/abs/2510.12403) for a detailed overview. +The tutorial itself is hosted in a [Space](https://huggingface.co/spaces/lerobot/robot-learning-tutorial) and it features practical examples using LeRobot, with all models and datasets on the Hugging Hub. You can also check out the [HF paper](https://huggingface.co/spaces/lerobot/robot-learning-tutorial) for a detailed overview. ## Final thoughts from the team @@ -148,5 +217,5 @@ Beyond these major features, this release is packed with numerous bug fixes, doc We want to extend a huge **thank you to everyone in the community** for your invaluable contributions, feedback, and support. We're incredibly excited about the future of open-source robotics and can't wait to show you what's next. -Stay tuned for more to come! +Stay tuned for more to come 🤗 Get started [here](https://github.com/huggingface/lerobot)! – The LeRobot team ❤️ From f7221985b2a6b0274fe3ca8551d6dee4dc4a1e9d Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Wed, 22 Oct 2025 18:13:02 +0200 Subject: [PATCH 16/23] blog(lerobot): add images --- lerobot-release-v040.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index cf113fa36d..7daad5c861 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -83,7 +83,7 @@ These tools streamline your workflow, allowing you to curate and optimize your r ## Simulation Environments: Expanding Your Training Grounds We're continuously expanding LeRobot's simulation capabilities to provide richer and more diverse training environments for your robotic policies. -![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) +![libero-demo](https://huggingface.co/datasets/huggingface/documentation-images/blob/main/lerobot-blog/release-v0.4.0/lerobot-libero-groot-v040.gif) ### LIBERO Support LeRobot now officially supports [LIBERO](https://libero-project.github.io/intro.html), one of the largest open benchmarks for Vision-Language-Action (VLA) policies, boasting over 130 tasks! This is a huge step toward building the go-to evaluation hub for VLAs, enabling easy integration and a unified setup for evaluating any VLA policy. @@ -149,7 +149,7 @@ Check out the [documentation](https://huggingface.co/docs/lerobot/multi_gpu_trai ## Policies: Unleashing Open-World Generalization -![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) +![groot-demo](https://huggingface.co/datasets/huggingface/documentation-images/blob/main/lerobot-blog/release-v0.4.0/lerobot-libero-groot2-v040.gif) ### PI0 and PI0.5 In a major milestone for open-source robotics, we've integrated **pi0** and **pi0.5** policies by Physical Intelligence into LeRobot! These Vision-Language-Action (VLA) models represent a significant leap towards addressing open-world generalization in robotics. @@ -191,8 +191,6 @@ Thanks to our powerful new pipeline system, you can now teleoperate your followe ## The Hugging Face Robot Learning Course -![TODO](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-release-v040/XXX.png) - We're launching a comprehensive, self-paced, and entirely **open-source course** designed to make robot learning accessible to everyone! If you're curious about how real-world robots learn, this is the perfect place to start. In this course, you’ll learn how to: @@ -208,7 +206,7 @@ Join the [Hugging Face Robotics organization](https://huggingface.co/robotics-co For those who want to go deeper, we've also published a **hands-on tutorial** on the most recent advancements in robotics. This guide provides self-contained explanations, re-derives modern techniques from first principles, and includes ready-to-use code examples using LeRobot and Hugging Face. -The tutorial itself is hosted in a [Space](https://huggingface.co/spaces/lerobot/robot-learning-tutorial) and it features practical examples using LeRobot, with all models and datasets on the Hugging Hub. You can also check out the [HF paper](https://huggingface.co/spaces/lerobot/robot-learning-tutorial) for a detailed overview. +The tutorial itself is hosted in a [Space](https://huggingface.co/spaces/lerobot/robot-learning-tutorial) and it features practical examples using LeRobot, with all models and datasets on the Hugging Hub. You can also check out the [HF paper](https://huggingface.co/papers/2510.12403) for a detailed overview. ## Final thoughts from the team From 7ae09e225dd903efc7b0a2a6ac64ecb53485bb4a Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Thu, 23 Oct 2025 21:25:22 +0200 Subject: [PATCH 17/23] Apply suggestion from @pcuenca Co-authored-by: Pedro Cuenca --- lerobot-release-v040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index 7daad5c861..92fb161ec7 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -52,7 +52,7 @@ We've completely overhauled our dataset infrastructure with **LeRobotDataset v3. * Unified Parquet Metadata: Say goodbye to scattered JSONs! All episode metadata is now stored in unified, structured Parquet files for easier management and access. * Faster Loading & Better Performance: Experience significantly reduced dataset initialization times and more efficient memory usage. -We've also provided a conversion script to easily migrate your existing v2.1 datasets to the new v3.0 format, ensuring a smooth transition. Read more about it in our [blog post](https://huggingface.co/blog/lerobot-datasets-v3). Open-source robotics keeps leveling up! +We've also provided a conversion script to easily migrate your existing v2.1 datasets to the new v3.0 format, ensuring a smooth transition. Read more about it in our previous [blog post](https://huggingface.co/blog/lerobot-datasets-v3). Open-source robotics keeps leveling up! ### New Feature: Dataset Editing Tools! Working with LeRobot datasets just got a whole lot easier! We've introduced a powerful set of utilities for flexible dataset editing. From e59f7422cbb4e8d92265faad568e61cc44b2ab63 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Thu, 23 Oct 2025 21:25:47 +0200 Subject: [PATCH 18/23] Apply suggestion from @pcuenca Co-authored-by: Pedro Cuenca --- lerobot-release-v040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index 92fb161ec7..df50e2b8dc 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -83,7 +83,7 @@ These tools streamline your workflow, allowing you to curate and optimize your r ## Simulation Environments: Expanding Your Training Grounds We're continuously expanding LeRobot's simulation capabilities to provide richer and more diverse training environments for your robotic policies. -![libero-demo](https://huggingface.co/datasets/huggingface/documentation-images/blob/main/lerobot-blog/release-v0.4.0/lerobot-libero-groot-v040.gif) +![libero-demo](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-blog/release-v0.4.0/lerobot-libero-groot-v040.gif) ### LIBERO Support LeRobot now officially supports [LIBERO](https://libero-project.github.io/intro.html), one of the largest open benchmarks for Vision-Language-Action (VLA) policies, boasting over 130 tasks! This is a huge step toward building the go-to evaluation hub for VLAs, enabling easy integration and a unified setup for evaluating any VLA policy. From 07954b4fb7ff9153fc7c1d0cc99a4344a255ab97 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Thu, 23 Oct 2025 21:26:08 +0200 Subject: [PATCH 19/23] Apply suggestion from @pcuenca Co-authored-by: Pedro Cuenca --- lerobot-release-v040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index df50e2b8dc..773d0472be 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -139,7 +139,7 @@ accelerate launch \ $(which lerobot-train) \ --dataset.repo_id=${HF_USER}/my_dataset \ --policy.repo_id=${HF_USER}/my_trained_policy \ - --policy.type=$POLICY_TYPE \ + --policy.type=$POLICY_TYPE \ # ... More training configuration flags ``` From acc468ea316f4f0c04bbf890222881c2369139fa Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Thu, 23 Oct 2025 21:26:47 +0200 Subject: [PATCH 20/23] Apply suggestion from @pcuenca Co-authored-by: Pedro Cuenca --- lerobot-release-v040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index 773d0472be..525a8f1511 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -149,7 +149,7 @@ Check out the [documentation](https://huggingface.co/docs/lerobot/multi_gpu_trai ## Policies: Unleashing Open-World Generalization -![groot-demo](https://huggingface.co/datasets/huggingface/documentation-images/blob/main/lerobot-blog/release-v0.4.0/lerobot-libero-groot2-v040.gif) +![groot-demo](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-blog/release-v0.4.0/lerobot-libero-groot2-v040.gif) ### PI0 and PI0.5 In a major milestone for open-source robotics, we've integrated **pi0** and **pi0.5** policies by Physical Intelligence into LeRobot! These Vision-Language-Action (VLA) models represent a significant leap towards addressing open-world generalization in robotics. From 05eb173ed5feda3e4c2f90cd0d8cc6c1a77e565e Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Thu, 23 Oct 2025 21:27:30 +0200 Subject: [PATCH 21/23] Apply suggestion from @pcuenca Co-authored-by: Pedro Cuenca --- lerobot-release-v040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index 525a8f1511..2e49202d76 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -206,7 +206,7 @@ Join the [Hugging Face Robotics organization](https://huggingface.co/robotics-co For those who want to go deeper, we've also published a **hands-on tutorial** on the most recent advancements in robotics. This guide provides self-contained explanations, re-derives modern techniques from first principles, and includes ready-to-use code examples using LeRobot and Hugging Face. -The tutorial itself is hosted in a [Space](https://huggingface.co/spaces/lerobot/robot-learning-tutorial) and it features practical examples using LeRobot, with all models and datasets on the Hugging Hub. You can also check out the [HF paper](https://huggingface.co/papers/2510.12403) for a detailed overview. +The tutorial itself is hosted in a [Space](https://huggingface.co/spaces/lerobot/robot-learning-tutorial) and it features practical examples using LeRobot, with all models and datasets on the Hugging Hub. You can also check out [our paper](https://huggingface.co/papers/2510.12403) for a detailed overview. ## Final thoughts from the team From 5b9ac83115d9396b034eb0d223bf7bc3e8f5dc92 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Thu, 23 Oct 2025 21:28:06 +0200 Subject: [PATCH 22/23] Apply suggestion from @pcuenca Co-authored-by: Pedro Cuenca --- lerobot-release-v040.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index 2e49202d76..b41233e07e 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -213,7 +213,7 @@ The tutorial itself is hosted in a [Space](https://huggingface.co/spaces/lerobot Beyond these major features, this release is packed with numerous bug fixes, documentation improvements, updated dependencies, more examples and better infrastructure to make your experience with LeRobot smoother and more reliable. -We want to extend a huge **thank you to everyone in the community** for your invaluable contributions, feedback, and support. We're incredibly excited about the future of open-source robotics and can't wait to show you what's next. +We want to extend a huge **thank you to everyone in the community** for your invaluable contributions, feedback, and support. We're incredibly excited about the future of open-source robotics and can't wait to work with you on what's next! Stay tuned for more to come 🤗 Get started [here](https://github.com/huggingface/lerobot)! – The LeRobot team ❤️ From cd0cdafba8d993f3df47b0cf9cf670f9154b7fc5 Mon Sep 17 00:00:00 2001 From: Steven Palma Date: Thu, 23 Oct 2025 21:46:51 +0200 Subject: [PATCH 23/23] blog(lerobot): address feedback @pcuenca --- lerobot-release-v040.md | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/lerobot-release-v040.md b/lerobot-release-v040.md index b41233e07e..e42b4bd767 100644 --- a/lerobot-release-v040.md +++ b/lerobot-release-v040.md @@ -13,12 +13,17 @@ authors: - user: thomwolf --- -# LeRobot's v0.4.0 Latest Major Updates! +# LeRobot v0.4.0: Super Charging OSS Robotics Learning + We're thrilled to announce a series of significant advancements across LeRobot, designed to make open-source robot learning more powerful, scalable, and user-friendly than ever before! From revamped datasets to versatile editing tools, new simulation environments, and a groundbreaking plugin system for hardware, LeRobot is continuously evolving to meet the demands of cutting-edge embodied AI. +## TL;DR +LeRobot v0.4.0 delivers a major upgrade for open-source robotics, introducing scalable Datasets v3.0, powerful new VLA models like PI0.5 and GR00T N1.5, and a new plugin system for easier hardware integration. The release also adds support for LIBERO and Meta-World simulations, simplified multi-GPU training, and a new Hugging Face Robot Learning Course. + ## Table-of-Contents -- [LeRobot's v0.4.0 Latest Major Updates!](#lerobots-v040-latest-major-updates) +- [LeRobot v0.4.0: Super Charging OSS Robotics Learning](#lerobot-v040-super-charging-oss-robotics-learning) + - [TL;DR](#tldr) - [Table-of-Contents](#table-of-contents) - [Datasets: Ready for the Next Wave of Large-Scale Robot Learning](#datasets-ready-for-the-next-wave-of-large-scale-robot-learning) - [What's New in Datasets v3.0?](#whats-new-in-datasets-v30) @@ -31,9 +36,7 @@ We're thrilled to announce a series of significant advancements across LeRobot, - [Multi-GPU Training Made Easy](#multi-gpu-training-made-easy) - [Policies: Unleashing Open-World Generalization](#policies-unleashing-open-world-generalization) - [PI0 and PI0.5](#pi0-and-pi05) - - [What makes π₀.₅ revolutionary?](#what-makes-π-revolutionary) - [GR00T N1.5](#gr00t-n15) - - [What makes GR00T N1.5 a game-changer?](#what-makes-gr00t-n15-a-game-changer) - [Robots: A New Era of Hardware Integration with the Plugin System](#robots-a-new-era-of-hardware-integration-with-the-plugin-system) - [Key Benefits](#key-benefits) - [Reachy 2 Integration](#reachy-2-integration) @@ -44,10 +47,10 @@ We're thrilled to announce a series of significant advancements across LeRobot, ## Datasets: Ready for the Next Wave of Large-Scale Robot Learning -We've completely overhauled our dataset infrastructure with **LeRobotDataset v3.0**, featuring a new chunked episode format and streaming capabilities. This is a game-changer for handling massive datasets like [OXE](https://huggingface.co/collections/lerobot/open-x-embodiment) and [Droid](https://huggingface.co/datasets/lerobot/droid_1.0.1), bringing unparalleled efficiency and scalability. +We've completely overhauled our dataset infrastructure with **LeRobotDataset v3.0**, featuring a new chunked episode format and streaming capabilities. This is a game-changer for handling massive datasets like [OXE](https://huggingface.co/collections/lerobot/open-x-embodiment) (Open X Embodiment) and [Droid](https://huggingface.co/datasets/lerobot/droid_1.0.1), bringing unparalleled efficiency and scalability. ### What's New in Datasets v3.0? -* Chunked Episodes for Massive Scale: Our new format supports datasets at the OXE-level, enabling unprecedented scalability. +* Chunked Episodes for Massive Scale: Our new format supports datasets at the OXE-level (> 400GB), enabling unprecedented scalability. * Efficient Video Storage + Streaming: Enjoy faster loading times and seamless streaming of video data. * Unified Parquet Metadata: Say goodbye to scattered JSONs! All episode metadata is now stored in unified, structured Parquet files for easier management and access. * Faster Loading & Better Performance: Experience significantly reduced dataset initialization times and more efficient memory usage. @@ -152,19 +155,17 @@ Check out the [documentation](https://huggingface.co/docs/lerobot/multi_gpu_trai ![groot-demo](https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot-blog/release-v0.4.0/lerobot-libero-groot2-v040.gif) ### PI0 and PI0.5 -In a major milestone for open-source robotics, we've integrated **pi0** and **pi0.5** policies by Physical Intelligence into LeRobot! These Vision-Language-Action (VLA) models represent a significant leap towards addressing open-world generalization in robotics. +In a major milestone for open-source robotics, we've integrated **pi0** and **pi0.5** policies by Physical Intelligence into LeRobot! These Vision-Language-Action (VLA) models represent a significant leap towards addressing open-world generalization in robotics. But what makes π₀.₅ revolutionary? -#### What makes π₀.₅ revolutionary? * Open-World Generalization: Designed to adapt to entirely new environments and situations, generalizing across physical, semantic, and environmental levels. * Co-training on Heterogeneous Data: Learns from a diverse mix of multimodal web data, verbal instructions, subtask commands, and multi-environment robot data. * Physical Intelligence Collaboration: Huge thanks to the [Physical Intelligence team](https://huggingface.co/physical-intelligence) for their groundbreaking work! -You can find the ported models on the Hugging Face Hub: [pi0.5_base](https://huggingface.co/lerobot/pi05_base), [pi0_base](https://huggingface.co/lerobot/pi0_base), and their Libero-tuned counterparts. For more details, checkout the [Physical Intelligence Reasearch](https://www.physicalintelligence.company/blog/pi05) +You can find the models on the Hugging Face Hub: [pi0.5_base](https://huggingface.co/lerobot/pi05_base), [pi0_base](https://huggingface.co/lerobot/pi0_base), and their Libero-tuned counterparts. For more details, checkout the [Physical Intelligence Reasearch](https://www.physicalintelligence.company/blog/pi05) ### GR00T N1.5 -In another exciting development, we've integrated **NVIDIA's GR00T N1.5** into LeRobot, thanks to a fantastic collaboration with the NVIDIA robotics team! This open foundation model is a powerhouse for generalized robot reasoning and skills. As a cross-embodiment model, it takes multimodal input (like language and images) to perform complex manipulation tasks in diverse environments, marking another major leap in generalized robotics. +In another exciting development, we've integrated **NVIDIA's GR00T N1.5** into LeRobot, thanks to a fantastic collaboration with the NVIDIA robotics team! This open foundation model is a powerhouse for generalized robot reasoning and skills. As a cross-embodiment model, it takes multimodal input (like language and images) to perform complex manipulation tasks in diverse environments, marking another major leap in generalized robotics. But what makes GR00T N1.5 a game-changer? -#### What makes GR00T N1.5 a game-changer? * Generalized Reasoning & Skills: Designed as a cross-embodiment foundation model, GR00T N1.5 excels at generalized reasoning and manipulation tasks, with improved language-following ability. * Expansive Heterogeneous Training: It learns from a massive dataset combining real captured humanoid data, synthetic data generated by NVIDIA Isaac GR00T Blueprint, and internet-scale video data. * NVIDIA Collaboration: We're thrilled to partner with the [NVIDIA team](https://huggingface.co/nvidia) to bring this state-of-the-art model to the open-source LeRobot community! @@ -183,6 +184,11 @@ Big news for hardware enthusiasts! We've launched a brand-new plugin system to r Learn how to create your own plugin in our [documentation](https://huggingface.co/docs/lerobot/integrate_hardware#using-your-own-lerobot-devices-). +```bash +pip install lerobot_teleoperator_my_awesome_teleop +lerobot-teleoperate --teleop.type=my_awesome_teleop +``` + ### Reachy 2 Integration Thanks to our new plugin system, we've also added [Reachy 2](https://www.pollen-robotics.com/reachy/) from Pollen Robotics to LeRobot! Reachy 2 is available for both real robot control and simulation, enabling you to experiment with teleoperation and autonomous demos right away.