mirror of
https://github.com/huggingface/lerobot.git
synced 2026-05-19 10:40:04 +00:00
3c15fd8537
* feat(robots): natively integrate Seeed Studio reBot B601-DM arm Add first-class LeRobot support for the Seeed Studio reBot arm, replacing the out-of-tree `lerobot-robot-seeed-b601` / `lerobot-teleoperator-rebot-arm-102` plugin packages. New devices: - robot `rebot_b601_follower` — single-arm B601-DM follower (6-DOF + gripper, Damiao CAN motors via `motorbridge`) - robot `bi_rebot_b601_follower` — bimanual follower composing two single arms - teleoperator `rebot_102_leader` — single-arm StarArm102 / reBot Arm 102 leader (FashionStar UART servos via `motorbridge-smart-servo`) - teleoperator `bi_rebot_102_leader` — bimanual leader composing two single arms The bimanual variants reuse the single-arm classes and namespace each arm's observation/action keys with `left_` / `right_` prefixes, so a bimanual StarArm102 leader can teleoperate a bimanual reBot B601 follower. Optional SDK imports are guarded; a `rebot` extra installs `motorbridge` and `motorbridge-smart-servo`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs: add reBot B601-DM calibration & dual-arm teleoperation guide Add docs/source/rebot_b601.mdx covering single-arm and bimanual calibration and teleoperation for the reBot B601-DM follower and reBot Arm 102 leader, with zero-position reference images from the Seeed Studio wiki. Register the page in the docs toctree. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs: fix reBot B601 MDX build (move JSON example out of <Tip>) The doc-builder parses `{...}` inside MDX component children as a Svelte expression, so the joint_directions JSON example broke the build. Move it into a top-level fenced code block. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs: apply prettier formatting to reBot B601 page Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs: remove duplicate colocated reBot B601 page docs/source/rebot_b601.mdx is the canonical, toctree-registered page; the colocated rebot_b601.md was a redundant thinner copy. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * docs: clarify 6-DOF leader fallback comment in reBot B601 follower Explain that holding wrist_yaw at zero is what lets a 6-DOF leader (e.g. so100_leader / so101_leader) teleoperate the 7-DOF follower. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * refactor: address Caroline's PR review on reBot B601 integration - leader: remove _validate_config (no other lerobot device validates its config; a key mismatch now surfaces as a plain KeyError) - leader: simplify _round_to_valid_range to direct modular arithmetic instead of a bidirectional search loop - leader: inline the single-use _clamp helper - follower & leader: write MotorCalibration range_min/range_max from the configured joint_limits / joint_ranges instead of a fixed [-90, 90] - docs: add a "Find the USB ports" section (lerobot-find-port) and move the brltty/permissions tip there; link the OpenArm page for SocketCAN adapter configuration Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
187 lines
6.5 KiB
Plaintext
187 lines
6.5 KiB
Plaintext
# reBot B601-DM
|
|
|
|
[reBot B601-DM](https://wiki.seeedstudio.com/rebot_arm_b601_dm_lerobot/) is an open-source, low-cost robot arm from Seeed Studio for embodied-AI and imitation learning. It comes as a **follower** arm (the `B601-DM`, a 6-DOF arm plus gripper driven by Damiao CAN motors) and a **leader** arm (the `StarArm102` / `reBot Arm 102`, driven by FashionStar UART smart servos) used to teleoperate it.
|
|
|
|
This page covers **calibration** and **teleoperation** for both single-arm and bimanual (dual-arm) setups.
|
|
|
|
<div style="display: flex; align-items: center; gap: 10px;">
|
|
<img
|
|
src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/b601dm_zeroposition.jpg"
|
|
alt="reBot B601-DM follower arm at its zero position"
|
|
width="48%"
|
|
/>
|
|
<img
|
|
src="https://files.seeedstudio.com/wiki/robotics/projects/lerobot/102_zeroposition.jpg"
|
|
alt="reBot Arm 102 leader arm at its zero position"
|
|
width="48%"
|
|
/>
|
|
</div>
|
|
|
|
_Left: the B601-DM follower at its zero position. Right: the reBot Arm 102 leader at its zero position. Images courtesy of [Seeed Studio](https://wiki.seeedstudio.com/rebot_arm_b601_dm_lerobot/)._
|
|
|
|
## Install LeRobot 🤗
|
|
|
|
Follow our [Installation Guide](./installation), then install the reBot support:
|
|
|
|
```bash
|
|
pip install -e ".[rebot]"
|
|
```
|
|
|
|
This pulls in `motorbridge` (CAN motor control for the B601-DM follower) and `motorbridge-smart-servo` (FashionStar UART servos for the reBot Arm 102 leader).
|
|
|
|
## Registered device types
|
|
|
|
| Type | Kind |
|
|
| ------------------------ | -------------------------------------------- |
|
|
| `rebot_b601_follower` | single-arm B601-DM follower robot |
|
|
| `bi_rebot_b601_follower` | bimanual (dual-arm) follower robot |
|
|
| `rebot_102_leader` | single-arm reBot Arm 102 leader teleoperator |
|
|
| `bi_rebot_102_leader` | bimanual (dual-arm) leader teleoperator |
|
|
|
|
The bimanual types compose two single-arm instances and namespace each arm's
|
|
observation/action keys with a `left_` / `right_` prefix. Per-arm settings are
|
|
passed through nested `left_arm_config.*` / `right_arm_config.*` arguments.
|
|
|
|
## Find the USB ports
|
|
|
|
For each device, find the USB port associated with its motor bus using:
|
|
|
|
```bash
|
|
lerobot-find-port
|
|
```
|
|
|
|
<Tip warning={true}>
|
|
On Linux, remove `brltty` (`sudo apt remove brltty`) so it does not hold the
|
|
leader's USB serial port. You may also need to grant access to the serial
|
|
devices: `sudo chmod 666 /dev/ttyACM* /dev/ttyUSB*`.
|
|
</Tip>
|
|
|
|
## Calibration
|
|
|
|
Neither arm stores a persistent hardware calibration: every time it connects, the motors are re-zeroed against the pose the arm is physically holding. Calibration simply records that zero pose. When prompted, **manually move the arm to its zero position** (the default sit-down pose shown above, gripper fully closed) and press <kbd>ENTER</kbd>.
|
|
|
|
### Follower (B601-DM)
|
|
|
|
<hfoptions id="calibrate-follower">
|
|
<hfoption id="Single arm">
|
|
|
|
```bash
|
|
lerobot-calibrate \
|
|
--robot.type=rebot_b601_follower \
|
|
--robot.port=/dev/ttyACM0 \
|
|
--robot.id=follower \
|
|
--robot.can_adapter=damiao
|
|
```
|
|
|
|
</hfoption>
|
|
<hfoption id="Dual arm">
|
|
|
|
Connect the bimanual follower; calibration runs for the left arm, then the right arm.
|
|
|
|
```bash
|
|
lerobot-calibrate \
|
|
--robot.type=bi_rebot_b601_follower \
|
|
--robot.id=bi_follower \
|
|
--robot.left_arm_config.port=/dev/ttyACM0 \
|
|
--robot.left_arm_config.can_adapter=damiao \
|
|
--robot.right_arm_config.port=/dev/ttyACM1 \
|
|
--robot.right_arm_config.can_adapter=damiao
|
|
```
|
|
|
|
Per-arm calibration files are saved with `_left` / `_right` suffixes on the id.
|
|
|
|
</hfoption>
|
|
</hfoptions>
|
|
|
|
### Leader (reBot Arm 102)
|
|
|
|
<hfoptions id="calibrate-leader">
|
|
<hfoption id="Single arm">
|
|
|
|
```bash
|
|
lerobot-calibrate \
|
|
--teleop.type=rebot_102_leader \
|
|
--teleop.port=/dev/ttyUSB0 \
|
|
--teleop.id=leader
|
|
```
|
|
|
|
</hfoption>
|
|
<hfoption id="Dual arm">
|
|
|
|
```bash
|
|
lerobot-calibrate \
|
|
--teleop.type=bi_rebot_102_leader \
|
|
--teleop.id=bi_leader \
|
|
--teleop.left_arm_config.port=/dev/ttyUSB0 \
|
|
--teleop.right_arm_config.port=/dev/ttyUSB1
|
|
```
|
|
|
|
</hfoption>
|
|
</hfoptions>
|
|
|
|
## Teleoperation
|
|
|
|
Once both arms are calibrated, drive the follower with the leader. The follower talks to its CAN bus through a Damiao serial bridge (`can_adapter=damiao`, the default) or a SocketCAN adapter (`can_adapter=socketcan`). See the [OpenArm page](./openarm) for more details on the SocketCAN adapter configuration.
|
|
|
|
<hfoptions id="teleoperate">
|
|
<hfoption id="Single arm">
|
|
|
|
```bash
|
|
lerobot-teleoperate \
|
|
--robot.type=rebot_b601_follower \
|
|
--robot.port=/dev/ttyACM0 \
|
|
--robot.id=follower \
|
|
--robot.can_adapter=damiao \
|
|
--teleop.type=rebot_102_leader \
|
|
--teleop.port=/dev/ttyUSB0 \
|
|
--teleop.id=leader
|
|
```
|
|
|
|
</hfoption>
|
|
<hfoption id="Dual arm">
|
|
|
|
The bimanual leader and follower reuse the single-arm classes; each arm is
|
|
configured through nested `left_arm_config.*` / `right_arm_config.*` arguments,
|
|
so a bimanual reBot Arm 102 leader drives a bimanual B601-DM follower.
|
|
|
|
```bash
|
|
lerobot-teleoperate \
|
|
--robot.type=bi_rebot_b601_follower \
|
|
--robot.id=bi_follower \
|
|
--robot.left_arm_config.port=/dev/ttyACM0 \
|
|
--robot.left_arm_config.can_adapter=damiao \
|
|
--robot.right_arm_config.port=/dev/ttyACM1 \
|
|
--robot.right_arm_config.can_adapter=damiao \
|
|
--teleop.type=bi_rebot_102_leader \
|
|
--teleop.id=bi_leader \
|
|
--teleop.left_arm_config.port=/dev/ttyUSB0 \
|
|
--teleop.right_arm_config.port=/dev/ttyUSB1
|
|
```
|
|
|
|
</hfoption>
|
|
</hfoptions>
|
|
|
|
<Tip>
|
|
The leader and follower share the same joint names (`shoulder_pan,
|
|
shoulder_lift, elbow_flex, wrist_flex, wrist_yaw, wrist_roll, gripper`), so
|
|
leader actions map directly onto the follower.
|
|
</Tip>
|
|
|
|
If the motion of a joint is reversed, flip its sign in the leader's `joint_directions` (the gripper also carries a scale to widen its range to the follower):
|
|
|
|
```bash
|
|
lerobot-teleoperate \
|
|
--robot.type=rebot_b601_follower \
|
|
--robot.port=/dev/ttyACM0 \
|
|
--robot.can_adapter=damiao \
|
|
--teleop.type=rebot_102_leader \
|
|
--teleop.port=/dev/ttyUSB0 \
|
|
--teleop.joint_directions='{"shoulder_pan":-1,"shoulder_lift":-1,"elbow_flex":1,"wrist_flex":1,"wrist_yaw":1,"wrist_roll":-1,"gripper":-6}'
|
|
```
|
|
|
|
## Recording datasets
|
|
|
|
Swap `lerobot-teleoperate` for `lerobot-record` (with the same `--robot.*` / `--teleop.*` arguments, plus `--dataset.*`) to record demonstrations for training. See [Imitation Learning for Robots](./il_robots) for the full workflow.
|
|
|
|
For hardware assembly and wiring, see the [Seeed Studio reBot wiki](https://wiki.seeedstudio.com/rebot_arm_b601_dm_lerobot/).
|