Skip to main content
LeRobot provides support for a wide variety of robots, from low-cost robotic arms to advanced humanoid systems. All robots implement the standardized Robot interface, making it easy to switch between different hardware platforms.

Supported Robots

Robotic Arms

SO-101

Affordable robotic arm with Feetech STS3215 servos

SO-100

Compact version of the SO series arm

Koch v1.1

Low-cost arm with Dynamixel servos by Tau Robotics

OpenArm

7-DOF arm with Damiao motors and CAN-FD

OMX

Modular robotic arm platform

Hope Jr

Arm and hand system for dexterous manipulation

Mobile Platforms

LeKiwi

Three-wheel omnidirectional mobile manipulator

Earth Rover Mini

Cloud-controlled mobile robot via Frodobots SDK

Humanoid Robots

Reachy 2

Expressive humanoid by Pollen Robotics

Unitree G1

Full-body humanoid with advanced locomotion

Robot Interface

All robots in LeRobot inherit from the base Robot class and implement:
from lerobot.robots import Robot, RobotConfig
from lerobot.robots.utils import make_robot_from_config

# Load a robot from configuration
robot = make_robot_from_config(config)

# Or use context manager (auto connect/disconnect)
with robot:
    observation = robot.get_observation()
    robot.send_action(action)

Core Methods

MethodDescription
connect()Establish connection to the robot
disconnect()Safely disconnect and cleanup
get_observation()Get current robot state and sensor data
send_action()Send control commands to actuators
calibrate()Run calibration procedure (if needed)
configure()Apply runtime configuration

Properties

PropertyDescription
observation_featuresDictionary describing observation structure
action_featuresDictionary describing action structure
is_connectedWhether robot is currently connected
is_calibratedWhether robot is calibrated

Configuration

Each robot has a corresponding configuration class that extends RobotConfig:
from dataclasses import dataclass
from lerobot.robots import RobotConfig
from lerobot.cameras import CameraConfig

@RobotConfig.register_subclass("my_robot")
@dataclass
class MyRobotConfig(RobotConfig):
    # Robot-specific parameters
    port: str
    cameras: dict[str, CameraConfig]

Common Features

Camera Integration

Most robots support multiple cameras for visual observations:
from lerobot.cameras.opencv import OpenCVCameraConfig

config = RobotConfig(
    cameras={
        "top": OpenCVCameraConfig(
            index_or_path=0,
            fps=30,
            width=640,
            height=480
        )
    }
)

Calibration

Motor-based robots typically require calibration:
# Calibration is automatically prompted on first connection
with robot:
    pass  # Robot will guide you through calibration

# Or manually trigger calibration
robot.connect(calibrate=True)
robot.calibrate()

Safety Features

Many robots support safety limits:
config = RobotConfig(
    # Limit maximum change per action for safety
    max_relative_target=10.0,  # degrees or normalized units
    
    # Disable torque when disconnecting
    disable_torque_on_disconnect=True
)

Next Steps

Choose Your Robot

Explore the specific robot you want to work with

Recording Data

Learn how to collect datasets with your robot

Training Policies

Train models using data from your robot

API Reference

Detailed API documentation

Build docs developers (and LLMs) love