# SO-100

在下面的步骤中，我们将介绍如何组装 SO-100 机器人。

## 获取部件

请遵循此 [README](https://github.com/TheRobotStudio/SO-ARM100/blob/main/SO100.md)。其中包含物料清单（附有零件采购链接）以及 3D 打印零件的说明。如果你是第一次打印，或者没有 3D 打印机，请提前告知。

## 安装 LeRobot 🤗

要安装 LeRobot，请遵循我们的[安装指南](./installation)

除了这些说明，您还需要安装 Feetech SDK（如果您从 PyPI 安装了 LeRobot，请改为运行 `pip install 'lerobot[feetech]'`）：

```bash
pip install -e ".[feetech]"
```

## 配置电机

**注意：**与 SO-101 不同，机械臂组装完成后，电机连接器不易触及，因此必须提前完成配置步骤。

### 1. 找到与每条机械臂关联的 USB 端口

要查找每个总线舵机适配器的端口，请运行此脚本：

```bash
lerobot-find-port
```

示例输出：

```
Finding all available ports for the MotorBus.
['/dev/tty.usbmodem575E0032081', '/dev/tty.usbmodem575E0031751']
Remove the USB cable from your MotorsBus and press Enter when done.

[...Disconnect corresponding leader or follower arm and press Enter...]

The port of this MotorsBus is /dev/tty.usbmodem575E0032081
Reconnect the USB cable.
```

找到的端口为：`/dev/tty.usbmodem575E0032081`，对应您的 leader 或 follower 机械臂。

在 Linux 上，您可能需要运行以下命令来授予 USB 端口的访问权限：

```bash
sudo chmod 666 /dev/ttyACM0
sudo chmod 666 /dev/ttyACM1
```

示例输出：

```
Finding all available ports for the MotorBus.
['/dev/ttyACM0', '/dev/ttyACM1']
Remove the usb cable from your MotorsBus and press Enter when done.

[...Disconnect corresponding leader or follower arm and press Enter...]

The port of this MotorsBus is /dev/ttyACM1
Reconnect the USB cable.
```

找到的端口为：`/dev/ttyACM1`，对应您的主臂或从臂。

### 2. 设置电机 ID 和波特率

每个电机在总线上都有一个唯一的 id。全新电机出厂时通常默认 id 为 `1`。为了确保电机与控制器之间的通信正常工作，我们首先需要为每个电机设置一个唯一的、互不相同的 id。此外，总线上传输数据的速度由波特率（baudrate）决定。为了让控制器和所有电机能够相互通信，它们必须配置为相同的波特率。

为此，我们首先需要通过控制器单独连接每个电机以设置这些参数。由于我们将把这些参数写入电机内部存储器（EEPROM）的非易失性区域，因此只需执行一次即可。

如果您正在复用来自其他机器人的电机，那么您很可能也需要执行此步骤，因为 id 和波特率可能不匹配。

#### 跟随者

将 USB 线缆从计算机和电源连接到跟随臂的控制器板。然后，运行以下命令，或使用上一步中获取的端口运行 API 示例。您还需要使用 `id` 参数为您的跟随臂指定一个名称。

有关如何设置电机 ID 的视觉参考，请参阅 [此视频](https://huggingface.co/docs/lerobot/en/so101#setup-motors-video)，其中我们演示了 SO101 机械臂的设置流程。

```bash
lerobot-setup-motors \
    --robot.type=so100_follower \
    --robot.port=/dev/tty.usbmodem585A0076841  # <- paste here the port found at previous step
```

```python
from lerobot.robots.so_follower import SO100Follower, SO100FollowerConfig

config = SO100FollowerConfig(
    port="/dev/tty.usbmodem585A0076841",
    id="my_awesome_follower_arm",
)
follower = SO100Follower(config)
follower.setup_motors()
```

您应该会看到以下说明

```
Connect the controller board to the 'gripper' motor only and press enter.
```

按照说明，将夹爪的电机接入。请确保它是连接到板卡上的唯一电机，并且该电机本身尚未通过菊花链方式连接到任何其他电机。当您按下`[Enter]`时，脚本将自动为该电机设置 id 和波特率。

故障排除

如果在此处出现错误，请检查线缆并确保其已正确插入：

  计算机与控制器板之间的电源 USB 线 从控制器板到电机的 3 针线缆

如果您使用的是 Waveshare 控制板，请确保两个跳线设置在 `B` 通道（USB）上。

随后您应该会看到以下消息：

```
'gripper' motor id set to 6
```

随后是下一条指令：

```
Connect the controller board to the 'wrist_roll' motor only and press enter.
```

您可以将 3 针线缆从控制板上断开，但另一端可以保持与夹爪电机的连接，因为它已经处于正确的位置。现在，将另一根 3 针线缆插入腕部旋转电机，并将其连接到控制板。与之前的电机一样，请确保它是唯一连接到该板的电机，并且该电机本身未连接到任何其他电机。

按照说明，对每个电机重复此操作。

> [!TIP]
> 在按下 Enter 键之前，请在每一步检查线缆连接。例如，在操作主板时，电源线可能会意外断开。

完成后，脚本将直接结束，此时电机已准备就绪。现在，您可以将每个电机的 3 针电缆依次连接到下一个电机，并将第一个电机（id=1 的“肩部水平旋转”电机）的电缆连接到控制器板，该控制器板现在可以安装在机械臂的底座上。

#### 领导者

对主臂执行相同的步骤。

```bash
lerobot-setup-motors \
    --teleop.type=so100_leader \
    --teleop.port=/dev/tty.usbmodem575E0031751  # <- paste here the port found at previous step
```

```python
from lerobot.teleoperators.so_leader import SO100Leader, SO100LeaderConfig

config = SO100LeaderConfig(
    port="/dev/tty.usbmodem585A0076841",
    id="my_awesome_leader_arm",
)
leader = SO100Leader(config)
leader.setup_motors()
```

## 分步组装说明

## 移除 6 个主电机的齿轮

视频移除齿轮

  
    <source
      src="https://github.com/user-attachments/assets/0c95b88c-5b85-413d-ba19-aee2f864f2a7"
      type="video/mp4"
    />
  

请按照视频中的步骤拆卸齿轮。您需要拆下主臂电机上的齿轮。这样，您将仅使用电机的位置编码，并减少摩擦，从而更轻松地操作主臂。

### 清理部件

请从 3D 打印部件上移除所有支撑材料。最简单的方法是使用小螺丝刀从支撑材料下方将其撬起。

### 附加指导

视频组装臂

  
    <source
      src="https://github.com/user-attachments/assets/488a39de-0189-4461-9de3-05b015f90cca"
      type="video/mp4"
    />
  

**注意：**该视频提供了组装手臂的视觉指导，但未说明何时以及如何布线。提前插入线缆比事后操作要容易得多。第一只手臂的组装可能需要超过 1 小时，但熟悉之后，你可以在 1 小时内完成第二只手臂的组装。

---

### 第一台电机

**步骤 2：插入导线**

- 将两根导线插入第一个电机。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_1.webp"
  style="height:300px;"
/>

**步骤 3：在 Base 中安装**

- 将第一个电机放入底座中。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_2.webp"
  style="height:300px;"
/>

**步骤 4：固定电机**

- 用 4 颗螺丝固定电机。底部两颗，顶部两颗。

**步骤 5：安装电机支架**

- 将第一个电机支架滑入到位，并使用两颗螺丝将其固定（每侧各一颗）。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_4.webp"
  style="height:300px;"
/>

**步骤 6：安装电机角**

- 安装两个电机角，并用螺丝固定上方的角。在连接电机角时，尽量不要移动电机的位置，尤其是对于我们已拆除齿轮的领导者臂。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_5.webp"
  style="height:300px;"
/>

  
    视频添加汽车喇叭
  
  

**步骤 7：安装肩部部件**

- 将一根导线连接到机器人的背面，另一根连接到左侧或朝向你的方向（参见照片）。
- 安装肩部部件。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_6.webp"
  style="height:300px;"
/>

**第 8 步：稳固肩部**

- 用顶部 4 颗和底部 4 颗螺丝拧紧肩部部件 _（旋转肩部以访问底部孔位）。_

---

### 第二电机组件

**步骤 9：安装 Motor 2**

- 将第二个电机从顶部滑入，并将电机 1 的导线连接到电机 2。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_8.webp"
  style="height:300px;"
/>

**步骤 10：安装肩部支架**

- 添加肩部电机支架。
- 确保从电机 1 到电机 2 的导线从支架后方穿过，而另一根导线则向上布线（参见照片）。
- 这部分可能比较难安装，您可以使用如图所示的工作台或类似的装置，将零件推过电机。

  <img
    src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_9.webp"
    style="height:250px;"
  />
  <img
    src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_10.webp"
    style="height:250px;"
  />
  <img
    src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_12.webp"
    style="height:250px;"
  />

**步骤 11：固定电机 2**

- 用 4 颗螺丝固定第二个电机。

**步骤 12：安装电机喇叭**

- 将两个电机喇叭都安装到电机 2 上，同样使用喇叭螺丝。

**步骤 13：安装底座**

- 使用 2 颗螺丝安装底座附件。

**步骤 14：安装上臂**

- 用每侧 4 颗螺丝固定上臂。

---

### 第三电机组件

**步骤 15：安装 Motor 3**

- 将电机 2 的电机电缆通过电缆夹固定到电机 3，然后用 4 颗螺丝固定电机 3。

**步骤 16：安装电机喇叭**

- 将两个电机喇叭都安装到电机 3 上，并用一个喇叭螺丝再次固定其中一个。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_14.webp"
  style="height:300px;"
/>

**第 17 步：安装前臂**

- 使用每侧 4 颗螺丝将前臂连接到电机 3。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_15.webp"
  style="height:300px;"
/>

---

### 第四电机组件

**步骤 18：安装 Motor 4**

- 插入电机 4，连接来自电机 3 的电缆，并用螺丝将电缆固定在支架中。

  <img
    src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_16.webp"
    style="height:300px;"
  />
  <img
    src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_19.webp"
    style="height:300px;"
  />

**步骤 19：安装电机支架 4**

- 安装第四个电机支架（配合较紧）。确保一根导线向上走线，电机 3 的导线向下走线（参见照片）。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_17.webp"
  style="height:300px;"
/>

**步骤 20：固定电机 4 并安装喇叭**

- 使用 4 颗螺丝固定电机 4，并安装其电机角，其中一个角使用角螺丝。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_18.webp"
  style="height:300px;"
/>

---

### 手腕组件

**步骤 21：安装 Motor 5**

- 将电机 5 插入腕部支架，并用 2 颗前部螺丝固定。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_20.webp"
  style="height:300px;"
/>

**步骤 22：连接手腕**

- 将电机 4 的导线连接到电机 5。同时，预先插入夹爪的另一根导线。
- 使用 4 颗螺丝将手腕固定在电机 4 的两侧。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_22.webp"
  style="height:300px;"
/>

**步骤 23：安装手腕角**

- 仅在手腕电机上安装一个电机喇叭，并使用喇叭螺丝将其固定。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_23.webp"
  style="height:300px;"
/>

---

### Follower 配置

**步骤 24：安装夹爪**

- 将夹爪连接到电机 5。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_24.webp"
  style="height:300px;"
/>

**步骤 25：安装夹爪电机**

- 插入夹爪电机，将电机 5 的电机线连接到电机 6，并在每侧使用 3 颗螺丝固定。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_25.webp"
  style="height:300px;"
/>

**步骤 26：安装夹爪角和爪**

- 安装电机喇叭，并再次使用喇叭螺钉。
- 安装夹爪并用两侧的 4 颗螺丝固定。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_26.webp"
  style="height:300px;"
/>

**步骤 27：安装控制器**

- 将电机控制器连接到机器人的背面。

  <img
    src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_27.webp"
    style="height:300px;"
  />
  <img
    src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_28.webp"
    style="height:300px;"
  />

_组装完成 – 请继续组装 Leader 臂。_

---

### Leader 配置

对于领导者配置，请执行**步骤 1–23**。请确保已从电机上拆下电机齿轮。

**步骤 24：安装领导者支架**

- 将领导者支架安装到手腕上，并用螺丝固定。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_29.webp"
  style="height:300px;"
/>

**步骤 25：附加句柄**

- 使用 4 颗螺丝将手柄固定到电机 5 上。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_30.webp"
  style="height:300px;"
/>

**步骤 26：安装夹爪电机**

- 插入夹爪电机，每侧用 3 颗螺丝固定，使用喇叭螺丝安装电机喇叭，并连接电机线。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_31.webp"
  style="height:300px;"
/>

**步骤 27：附加触发器**

- 使用 4 颗螺丝固定从动触发器。

<img
  src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_32.webp"
  style="height:300px;"
/>

**步骤 28：安装控制器**

- 将电机控制器连接到机器人的背面。

  <img
    src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_27.webp"
    style="height:300px;"
  />
  <img
    src="https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/lerobot/so100_assembly_28.webp"
    style="height:300px;"
  />

## 校准

接下来，您需要对机器人进行校准，以确保主臂和从臂在处于相同物理位置时具有相同的位置值。校准过程非常重要，因为它使得在一个机器人上训练的神经网络能够在另一个机器人上运行。

#### 跟随者

运行以下命令或 API 示例来校准从动臂：

```bash
# Use the port of your follower arm, and give the arm a unique name with --robot.id
lerobot-calibrate \
    --robot.type=so100_follower \
    --robot.port=/dev/tty.usbmodem58760431551 \
    --robot.id=my_awesome_follower_arm
```

```python
from lerobot.robots.so_follower import SO100FollowerConfig, SO100Follower

config = SO100FollowerConfig(
    port="/dev/tty.usbmodem585A0076891",
    id="my_awesome_follower_arm",
)

follower = SO100Follower(config)
follower.connect(calibrate=False)
follower.calibrate()
follower.disconnect()
```

我们统一了大多数机器人的校准方法。因此，这款 SO100 机械臂的校准步骤与 Koch 和 SO101 的步骤相同。首先，我们需要将机器人移动到每个关节处于其活动范围中间的位置，然后按下 `Enter`。其次，我们将所有关节移动至其完整活动范围。可以参考 SO101 的相同过程视频，链接在[这里](https://huggingface.co/docs/lerobot/en/so101#calibration-video)

#### 领导者

执行相同的步骤来校准主臂，运行以下命令或 API 示例：

```bash
# Use the port of your leader arm, and give the arm a unique name with --teleop.id
lerobot-calibrate \
    --teleop.type=so100_leader \
    --teleop.port=/dev/tty.usbmodem58760431551 \
    --teleop.id=my_awesome_leader_arm
```

```python
from lerobot.teleoperators.so_leader import SO100LeaderConfig, SO100Leader

config = SO100LeaderConfig(
    port="/dev/tty.usbmodem58760431551",
    id="my_awesome_leader_arm",
)

leader = SO100Leader(config)
leader.connect(calibrate=False)
leader.calibrate()
leader.disconnect()
```

恭喜 🎉，你的机器人已准备好自主学习任务。按照本教程开始训练它：[使用真实机器人入门](./il_robots)

> [!TIP]
> 如果您有任何问题或需要帮助，请在 [Discord](https://discord.com/invite/s3KuuzsPFb) 上联系我们。

