mirror of
https://github.com/huggingface/lerobot.git
synced 2026-08-08 17:39:44 +00:00
2e8345a5cc
LeRobot's documentation build passes `--not_python_module`, which tells doc-builder there is no importable Python package and disables `[[autodoc]]` entirely. The result is that all 90+ pages are hand-written guides and there is no generated API reference at all. This is the machinery to change that. It deliberately contains no docstring changes of its own — every docstring edit lives in the follow-up PR, so this one can be reviewed as tooling and configuration alone. **The standard.** `docs/source/writing_docstrings.mdx` is the contract: Google section headers with Hugging Face type formatting, the machine-checked argument line, `**Attributes**:`, doc-builder cross-references, fenced doctest examples. It also records three behaviours that are not discoverable from the source and were verified against a local build: `[[autodoc]]` silently skips members with no docstring; doc-builder does not inherit docstrings from base classes, so a registered config shim whose body is `pass` renders every field with no description; and module-level aliases resolve to the canonical class. **Autodoc turned on**, with two changes that are not obvious: - `--version main` on the main-docs job. Without `--not_python_module`, doc-builder resolves the version from `lerobot.__version__` and only maps it to the default branch when it contains "dev". transformers relies on that; our main carries 0.6.2. Verified by building both ways — dropping the flag alone would publish the main docs to /lerobot/v0.6.2/ instead of /lerobot/main/ and disable notebook building. - `pre_command` on both jobs. doc-builder ships a mock-deps registry entry for lerobot, so the reusable workflow takes its light-install path, which cannot import the package. The heavy dependencies cannot be mocked either: draccus runs `register_subclass` at import time and `processor/converters.py` calls `functools.singledispatch.register(torch.Tensor)`, which needs a real class. `[dataset]` is the only extra required. Workflow triggers gain `src/**`, since the reference is now generated from docstrings. `docs/source/api/` is excluded from the prettier hook, which reads `[[autodoc]]` member lists as lazy paragraph continuations and joins a ten-entry list onto one line. Nine API reference pages, scaffolded with each module's base class. **Doctests.** `LeRobotDocTestParser` is mandatory rather than optional here: ruff's `docstring-code-format = true` drops the blank line before a closing fence, after which stdlib's `_EXAMPLE_RE` reads the fence as expected output and every example with output fails. It is written against the installed pytest rather than copied from transformers, whose version predates pytest 9's `import_path` signature and its own fix for the `@property` line-number bug. `preprocess_string` also diverges: the upstream fenced-block split puts a single-line example's code in a chunk with no `>>>` in it, so neither the CUDA skip nor the `+IGNORE_RESULT` injection fires for it. **Checkers.** `utils/check_docstrings.py` is the ~300-line core of the 2203-line transformers original; the `@auto_docstring` system, modular propagation, GitPython and `checkers.py` are not ported. `utils/check_config_docstrings.py` checks that every registered robot config documents its port and calibration semantics. **Gates**, all set to values that pass today: ruff `D` with per-file-ignores per unconverted module, `interrogate` at `fail-under = 52` against a measured 52.1%, and Makefile targets wired into the quality workflow. The doctest allowlist ships empty and the `doctest` target handles that, because the files carrying runnable examples arrive with the docstring PR. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
148 lines
3.7 KiB
Plaintext
148 lines
3.7 KiB
Plaintext
# Robots
|
|
|
|
Every robot in LeRobot implements the [`Robot`] interface: connect, read an observation, send an action,
|
|
disconnect. Writing a policy or a recording script against that interface means it works with any supported
|
|
arm without change.
|
|
|
|
This page is the generated reference. For wiring, calibration and first-run instructions, start with the
|
|
hardware guides — [SO-101](../so101), [LeKiwi](../lekiwi), [Hope Jr](../hope_jr), [Reachy 2](../reachy2),
|
|
[OpenArm](../openarm) — or [Imitation Learning for Robots](../il_robots) for the end-to-end workflow. To add
|
|
a robot of your own, see [Bring Your Own Hardware](../integrate_hardware).
|
|
|
|
## Robot
|
|
|
|
The abstract base class. Subclasses implement every method below; the contract described here is what a
|
|
policy or recording loop can rely on.
|
|
|
|
[[autodoc]] lerobot.robots.Robot
|
|
- connect
|
|
- disconnect
|
|
- configure
|
|
- calibrate
|
|
- get_observation
|
|
- send_action
|
|
- observation_features
|
|
- action_features
|
|
- is_connected
|
|
- is_calibrated
|
|
|
|
## RobotConfig
|
|
|
|
[[autodoc]] lerobot.robots.RobotConfig
|
|
|
|
## make_robot_from_config
|
|
|
|
[[autodoc]] lerobot.robots.make_robot_from_config
|
|
|
|
## SO-100 and SO-101 followers
|
|
|
|
`SO100Follower` and `SO101Follower` are aliases of the same `SOFollower` class; the two arms differ in their
|
|
configuration, not their control code. `SO100FollowerConfig` and `SO101FollowerConfig` are likewise aliases
|
|
of `SOFollowerRobotConfig`.
|
|
|
|
[[autodoc]] lerobot.robots.so_follower.SOFollower
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.so_follower.SOFollowerRobotConfig
|
|
|
|
## BiSOFollower
|
|
|
|
Two SO followers driven as one bimanual robot.
|
|
|
|
[[autodoc]] lerobot.robots.bi_so_follower.BiSOFollower
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.bi_so_follower.BiSOFollowerConfig
|
|
|
|
## KochFollower
|
|
|
|
[[autodoc]] lerobot.robots.koch_follower.KochFollower
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.koch_follower.KochFollowerConfig
|
|
|
|
## LeKiwi
|
|
|
|
`LeKiwi` runs on the robot itself. `LeKiwiClient` is the host-side proxy that talks to it over the network
|
|
and presents the same [`Robot`] interface.
|
|
|
|
[[autodoc]] lerobot.robots.lekiwi.LeKiwi
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.lekiwi.LeKiwiConfig
|
|
|
|
[[autodoc]] lerobot.robots.lekiwi.LeKiwiClient
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.lekiwi.LeKiwiClientConfig
|
|
|
|
## OpenArmFollower
|
|
|
|
[[autodoc]] lerobot.robots.openarm_follower.OpenArmFollower
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.openarm_follower.OpenArmFollowerConfig
|
|
|
|
## BiOpenArmFollower
|
|
|
|
[[autodoc]] lerobot.robots.bi_openarm_follower.BiOpenArmFollower
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.bi_openarm_follower.BiOpenArmFollowerConfig
|
|
|
|
## OmxFollower
|
|
|
|
[[autodoc]] lerobot.robots.omx_follower.OmxFollower
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.omx_follower.OmxFollowerConfig
|
|
|
|
## Reachy2Robot
|
|
|
|
[[autodoc]] lerobot.robots.reachy2.Reachy2Robot
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.reachy2.Reachy2RobotConfig
|
|
|
|
## UnitreeG1
|
|
|
|
[[autodoc]] lerobot.robots.unitree_g1.UnitreeG1
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.unitree_g1.UnitreeG1Config
|
|
|
|
## Hope Jr
|
|
|
|
The Hope Jr humanoid is exposed as two independent robots, an arm and a hand.
|
|
|
|
[[autodoc]] lerobot.robots.hope_jr.HopeJrArm
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.hope_jr.HopeJrArmConfig
|
|
|
|
[[autodoc]] lerobot.robots.hope_jr.HopeJrHand
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.hope_jr.HopeJrHandConfig
|
|
|
|
## RebotB601Follower
|
|
|
|
[[autodoc]] lerobot.robots.rebot_b601_follower.RebotB601Follower
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.rebot_b601_follower.RebotB601FollowerRobotConfig
|
|
|
|
## BiRebotB601Follower
|
|
|
|
[[autodoc]] lerobot.robots.bi_rebot_b601_follower.BiRebotB601Follower
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.bi_rebot_b601_follower.BiRebotB601FollowerConfig
|
|
|
|
## EarthRoverMiniPlus
|
|
|
|
[[autodoc]] lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlus
|
|
- all
|
|
|
|
[[autodoc]] lerobot.robots.earthrover_mini_plus.EarthRoverMiniPlusConfig
|