Home/Software

LeRobot: turning "collect data, then make it move" into scripts

Apache 2.0, Python, and currently the shortest path from nothing to a moving robot on the hobbyist side. The barrier is not the concepts — it is whether you accept Linux and a command line.

Licence
Apache 2.0 — no fee for commercial use or redistribution
Language
Python; the hardware side expects a Linux environment and device permissions
Supported hardware
SO-100 / SO-101 / LeKiwi / Reachy Mini and similar low-cost hardware
Policies included
Working implementations of imitation-learning methods such as ACT and Diffusion Policy
Data side
Connects to the Hugging Face dataset hub and converts public datasets
Repo
github.com/huggingface/lerobot
What it solves
It solves a plumbing problem, not an algorithm problem. Recording by teleoperation, a consistent data format, a training script and real-robot inference are four separate jobs, and the expensive part has always been joining them up. LeRobot puts all four in one repository with one command style, validated on cheap hardware. For a solo builder that means someone else already walked through the environment-configuration swamp for you.
Alternatives
It is not a replacement for ROS 2 — they operate at different layers. LeRobot handles policies; ROS 2 handles messaging, drivers and real-time behaviour, and mature setups often train in LeRobot and deploy under ROS 2. For simulation-first work, Isaac Lab is the counterpart, but it leans towards large-scale parallel training and synthetic data rather than real-world data collection. Vendor SDKs let you command one specific machine but rarely give you a cross-hardware training chain.
What it takes to start
The cost is three things it does not control: a Linux environment (device permissions, serial ports and cameras all route through it), a GPU good enough to train on (inference can be lighter), and a willingness to calibrate. It does not pretend to be an appliance, and the documentation says so directly.
Known pitfalls
Three recurring ones: (1) expecting plug-and-play — calibration and camera setup are mandatory steps, and skipping them makes every dataset afterwards unusable; (2) hardware that drifts — cheap servos and printed parts shift with temperature and wear, so recalibrate before recording a new dataset; (3) installing into the system Python — dependency conflicts across versions are the most common way these projects die at the starting line.
What we checked
We checked the licence and commercial terms (Apache 2.0, no royalty), the list of hardware it explicitly supports, and the documentation's own statement that hands-on experience is required. Not checked: we have not run the full training flow from scratch, so estimates of how long a beginner needs to produce a first usable policy are not backed by first-hand data here.
This site's call

If your goal is to make a cheap arm do what you show it, this is the least painful route available. If your goal is to understand how the learning algorithms work inside, it sits too high up and you will want to read implementations directly. Do it in that order: get it working first, then go back and read the algorithm.

Where it sits in the stack

LayerHandled byRelation to LeRobot
Policies (how to move)LeRobot, Isaac LabThis is the layer it owns
Messaging and real timeROS 2Added on top when several subsystems must cooperate; not a replacement
Hardware controlVendor SDKs, servo bus protocolsReached through hardware adapters
DataDataset hub, public dataset conversionsProvides format normalisation and loading
A one-line test for whether you need it

If your question is "how do I make this arm repeat what I showed it", use LeRobot. If your question is "why will my policy not converge", go read the algorithm. These two questions get mixed up constantly, and mixing them means doing both badly.

Sources

  • Official repository and documentation (licence, supported hardware, setup requirements, stated limits)
  • Public technical reviews and usage reports (Linux/Python prerequisites, calibration burden)

Objects in this entry

Last checked 2026-09-28