Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions docs/source/so101.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -408,6 +408,48 @@ The video below shows how to perform the calibration. First you need to move the
</video>
</div>

#### Auto Calibrate (Follower)

As an alternative to manual calibration, you can use the automatic calibration script for the follower arm.
This drives each joint to its mechanical limits at low torque to find the full range of motion automatically — no manual movement required.

> [!WARNING]
> The arm will move on its own during auto-calibration. Make sure the workspace is clear and the arm is free to move without obstruction.

```bash
lerobot-auto-calibrate-feetech \
--port /dev/tty.usbmodem58760431551 \
--save \
--robot-id my_awesome_follower_arm
```

The script runs a 5-stage process:

| Stage | Description |
|-------|-------------|
| 0 | **Initialize** — stops all servos, enables torque, configures PID/acceleration |
| 2 | **Unfold** — extends joints 2–4 to avoid self-collision during calibration |
| 3 | **Calibrate joints 2–6** — probes mechanical limits in order (5→6→4→3→2) |
| 4 | **Calibrate joint 1** (shoulder_pan) and return to center |
| 5 | **Confirm** — waits for user confirmation, then releases torque |

##### Arguments

| Argument | Required | Default | Description |
|----------|----------|---------|-------------|
| `--port` | Yes | — | Serial port path (e.g. `/dev/ttyUSB0` or `/dev/tty.usbmodemXXX`) |
| `--save` | No | off | Write calibration to servo EEPROM and save to the local calibration file |
| `--robot-id` | No | `default` | Robot ID for the calibration file path (matches `config.id` at runtime) |
| `--motor` | No | all | Calibrate only a single motor by name (e.g. `shoulder_pan`) — skips unfolding |
| `--velocity-limit` | No | 1000 | Velocity for probing mechanical limits (Goal_Velocity in constant-speed mode) |
| `--timeout` | No | 20.0 | Timeout in seconds per direction when probing limits |
| `--unfold-angle` | No | 45.0 | Unfold angle in degrees — set to `0` to skip the unfold stage |
| `--unfold-timeout` | No | 6.0 | Timeout in seconds for each unfold movement |
| `--unfold-only` | No | off | Only run initialization + unfold (stages 0+2), skip calibration — useful for debugging |

> [!TIP]
> For questions about auto-calibration, join the [Maker-Mods Discord](https://discord.gg/4QNq2CpJ).

#### Leader

Do the same steps to calibrate the leader arm, run the following command or API example:
Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@ lerobot-find-joint-limits="lerobot.scripts.lerobot_find_joint_limits:main"
lerobot-imgtransform-viz="lerobot.scripts.lerobot_imgtransform_viz:main"
lerobot-edit-dataset="lerobot.scripts.lerobot_edit_dataset:main"
lerobot-setup-can="lerobot.scripts.lerobot_setup_can:main"
lerobot-auto-calibrate-feetech="lerobot.scripts.lerobot_auto_calibrate_feetech:main"

# ---------------- Tool Configurations ----------------
[tool.setuptools.package-data]
Expand Down
Loading