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.2.3

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.2.3
File Size Uploaded
physicalai_lerobot_plugin-0.2.3.tar.gz 16.2 kB Details

Built distribution (wheel)

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

Total release size: 33.5 kB

Release files / physicalai_lerobot_plugin-0.2.3.tar.gz

Download URL physicalai_lerobot_plugin-0.2.3.tar.gz
Size 16.2 kB
Tags Source
SHA-256 checksum
How to use checksums
9fda3b5ebf538ec5db145c1f610fb93812f869b689f8623939e80f40217127fa
BLAKE2b-256 checksum
How to use checksums
09e27dee24cb769e1a473859fbfdf5682747ac5d96b085bbc1562efb5f6108ec
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 Aug 29, 2026.

Transparency log

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

Download URL physicalai_lerobot_plugin-0.2.3-py3-none-any.whl
Size 17.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dccf5ff860fa3d701d22bf5cdc0d9a1b8ae452b33c5c4de307f7150636b254f2
BLAKE2b-256 checksum
How to use checksums
d6732a8f4b8b9a60d1dd1989478886b2c00d32fcd0ede0abe36ed60617c03318
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 Aug 29, 2026.

Transparency log

Release history Release notifications | RSS feed

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

This release

0.2.3 This release

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