Skip to main content

PhysicalAI LeRobot Plugin

Bridges LeRobot robot and teleoperator configs into PhysicalAI, the Python library and runtime for robot control, transport, and CLI workflows. It registers with Physical AI Studio, the application that discovers catalog plugins and provides robot setup, teleoperation, and workflow experiences. Part of the physicalai-plugins monorepo.

PyPI version Python versions

Overview

This plugin lets Studio users select supported LeRobot hardware from a schema-driven UI, auto-resolve serial devices, and run them through a PhysicalAI-compatible adapter without writing robot-specific glue code.

Each installed LeRobot follower robot and teleoperator is registered as a Studio catalog entry:

  • follower type: LeRobot_<follower_type>_Follower
  • leader type: LeRobot_<teleoperator_type>_Leader

Screenshots

Placeholder images — replace them with real screenshots.

LeRobot entries in the PhysicalAI Studio robot catalog

A LeRobot robot in the PhysicalAI Studio catalog

Installation

uv add physicalai-lerobot-plugin

Run with the PhysicalAI CLI

The PhysicalAI CLI run subcommand executes a RobotRuntime from a YAML config. The bundled config teleoperates a LeRobot follower with its matching leader teleoperator:

uv run physicalai run --config packages/physicalai-lerobot-plugin/examples/runtime/teleop.yaml

The example uses the so101_follower / so101_leader pair; set config_type and config_kwargs to any of the bundled follower/leader types below. Press Ctrl+C to stop.

Third-party LeRobot extensions

Install this package first, then install a LeRobot extension into the same Python environment. On Studio startup, the catalog invokes LeRobot's native third-party discovery and imports installed extension packages with names that start with lerobot_robot_ or lerobot_teleoperator_.

For example, after installing a compatible LeSlider package, its registered follower and leader types appear automatically in the Studio catalog. An extension must import its config registration code from its package root and use LeRobot's register_subclass(...) mechanism. Hardware SDK dependencies remain the responsibility of the extension package.

Bundled LeRobot followers

  • bi_so_follower
  • bi_rebot_b601_follower
  • bi_openarm_follower
  • so100_follower
  • so101_follower
  • koch_follower
  • omx_follower
  • hope_jr_hand
  • hope_jr_arm
  • openarm_follower
  • rebot_b601_follower
  • reachy2
  • earthrover_mini_plus
  • unitree_g1
  • lekiwi
  • lekiwi_client

Bundled LeRobot leader teleoperators

  • so100_leader (for so100_follower)
  • so101_leader (for so101_follower)
  • koch_leader (for koch_follower)
  • omx_leader (for omx_follower)
  • openarm_leader (for openarm_follower)
  • rebot_102_leader (for rebot_b601_follower)
  • reachy2_teleoperator (for reachy2)

Payload models

How payload fields are built

Payload classes are generated dynamically from each LeRobot config dataclass.

  1. Fields are derived directly from the selected LeRobot config dataclass.
  2. Complex fields are supported recursively:
    • nested dataclasses, dict[...], list[...], tuples, optional/union types
  3. Required/default behavior:
    • fields without dataclass defaults are required
    • fields with defaults/factories are optional in payload
  4. Runtime endpoint resolution:
    • port fields are resolved at build time through the Studio factory when possible (including nested bimanual arm configs)
    • for configs with a serial port field, the schema is annotated with a Studio "Select robot" connection section bound to that port; the payload model itself adds no extra Studio fields

Common payload fields

There is no fixed cross-robot payload contract anymore. Fields come from the selected LeRobot config type.

Payload examples

1) LeRobot_so100_follower_Follower

{
  "port": "/dev/ttyACM0",
  "disable_torque_on_disconnect": true,
  "use_degrees": true,
  "id": "so100-main"
}

2) LeRobot_hope_jr_hand_Follower

{
  "port": "/dev/ttyACM1",
  "side": "left",
  "disable_torque_on_disconnect": true,
  "id": "hope-left-hand"
}

3) LeRobot_bi_so_follower_Follower (nested bimanual config)

{
  "left_arm_config": {
    "port": "/dev/ttyACM0",
    "disable_torque_on_disconnect": true
  },
  "right_arm_config": {
    "port": "/dev/ttyACM1",
    "disable_torque_on_disconnect": true
  },
  "id": "bi-so-main"
}

Notes

  • Test-only robots are intentionally not registered by this plugin.
  • Payload models are generated from LeRobot config dataclasses, so fields can differ by robot type.

Development

uv sync
uv run pytest

See docs/creating-a-studio-plugin.md for the full plugin development guide.

Metadata

Release files for physicalai-lerobot-plugin 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for physicalai-lerobot-plugin 0.3.0
File Size Uploaded
physicalai_lerobot_plugin-0.3.0.tar.gz 16.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for physicalai-lerobot-plugin 0.3.0
File Interpreter ABI Platform
physicalai_lerobot_plugin-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 33.7 kB

Release files / physicalai_lerobot_plugin-0.3.0.tar.gz

Download URL physicalai_lerobot_plugin-0.3.0.tar.gz
Size 16.3 kB
Tags Source
SHA-256 checksum
How to use checksums
e1928071748c3740c30fdc188308315ac5588ba60ae4a31ef00537abec754103
BLAKE2b-256 checksum
How to use checksums
c70ebd40d00db4e3ac28eb5bc53f6ec1ab8ef322fe082096e19f59bc2442a458
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 4, 2026.

Transparency log

Release files / physicalai_lerobot_plugin-0.3.0-py3-none-any.whl

Download URL physicalai_lerobot_plugin-0.3.0-py3-none-any.whl
Size 17.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3904b956dd161d4d68b8d01b2b3d1d30990bc3117f86683f0f1fa4885f9141f2
BLAKE2b-256 checksum
How to use checksums
54ae8d162485ef538dc28df898cdc0c90da4111ac1ca8b5c23fee9aa0f22a2cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 4, 2026.

Transparency log

Release history Release notifications | RSS feed

0.4.0

2 release files

0.3.1

2 release files

This release

0.3.0 This release

2 release files

0.2.3

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page