SO-101

SO-101 SO-101

在以下步骤中,我们将说明如何组装我们的旗舰机器人 SO-101。

采购零件

请按照此 README 操作。其中包含物料清单(附有采购零件的链接)以及 3D 打印零件的说明。 如果你是第一次打印或没有 3D 打印机,它也会给出建议。

安装 LeRobot 🤗

要安装 LeRobot,请按照我们的安装指南操作

除这些说明外,你还需要安装 Feetech SDK:

pip install -e ".[feetech]"

分步组装说明

follower arm 使用 6 个 1/345 减速比的 STS3215 电机。而 leader arm 使用三个不同减速比的电机,以确保它既能承受自身重量,又能以较小的力被移动。下表显示了每个关节所需的电机。

leader arm 轴电机减速比
底座 / 肩部水平旋转11 / 191
肩部抬升21 / 345
肘部弯曲31 / 191
腕部弯曲41 / 147
腕部滚转51 / 147
gripper61 / 147

配置电机

1. 找到每只机械臂对应的 USB 端口

要找到每个总线舵机适配器的端口,请通过 USB 和电源将 MotorBus 连接到你的计算机。运行以下脚本,并在提示时断开 MotorBus:

lerobot-find-port
Mac
Linux

示例输出:

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 arm 或 follower arm。

2. 设置电机 id 和波特率

每个电机由总线上的唯一 id 标识。全新电机通常带有默认 id 1。为了让电机与控制器之间的通信正常工作,我们首先需要为每个电机设置一个唯一的、互不相同的 id。此外,总线上数据传输的速度由波特率决定。为了能够相互通信,控制器和所有电机都需要配置相同的波特率。

为此,我们首先需要用控制器逐个连接每个电机来设置这些参数。由于我们会将这些参数写入电机内部存储(EEPROM)的非易失性区域,因此只需执行一次。

如果你要复用另一台机器人的电机,很可能也需要执行此步骤,因为 id 和波特率可能不匹配。

下面的视频展示了设置电机 id 的步骤顺序。

设置电机视频

follower arm

将计算机的 USB 线和电源连接到 follower arm 的控制板。然后,使用上一步获得的端口运行以下命令或运行 API 示例。你还需要通过 id 参数为 follower arm 指定一个名称。

Command
API example
lerobot-setup-motors \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem585A0076841  # <- paste here the port found at previous step

你应该会看到以下指令

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

按照提示,插上 gripper 的电机。确保它是唯一连接到控制板的电机,并且该电机尚未与其他任何电机菊花链连接。当你按下 [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 针线缆,但另一端可以保持在 gripper 电机上连接,因为它已经在正确的位置。现在,将另一根 3 针线缆插到腕部滚转电机上,并将其连接到控制板。与前一个电机一样,确保它是唯一连接到控制板的电机,并且该电机本身未连接到任何其他电机。

按照提示对每个电机重复该操作。

在按 Enter 之前,每一步都要检查接线。例如,在操作控制板时,电源线可能会断开。

完成后,脚本将直接结束,此时电机即可使用。现在你可以将每个电机的 3 针线缆接到下一个电机,并将第一个电机(id=1 的“肩部水平旋转”)的线缆接到控制板,控制板此时可以安装到机械臂的底座上。

leader arm

对 leader arm 执行相同的步骤。

Command
API example
lerobot-setup-motors \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem575E0031751  # <- paste here the port found at previous step

清洁零件

去除 3D 打印零件上的所有支撑材料。最简单的方法是用小螺丝刀从支撑材料下方撬起。

建议在放置好电机后,先为每个电机安装一根 3 针线缆,然后再继续组装。

关节 1

  • 安装两个电机舵盘。用 M3x6mm 螺丝固定顶部舵盘。底部舵盘无需螺丝。
  • 将第一个电机放入底座。
  • 用 4 颗 M2x6mm 螺丝(最小的螺丝)固定电机。顶部两颗,底部两颗。
  • 套上第一个电机支架,并用两颗 M2x6mm 螺丝固定(每侧一颗)。
  • 安装肩部零件。
  • 用顶部 4 颗 M3x6mm 螺丝和底部 4 颗 M3x6mm 螺丝拧紧肩部零件
  • 添加肩部电机支架。

关节 2

  • 安装两个电机舵盘。用 M3x6mm 螺丝固定顶部舵盘。底部舵盘无需螺丝。
  • 从顶部滑入第二个电机。
  • 用 4 颗 M2x6mm 螺丝固定第二个电机。
  • 用每侧 4 颗 M3x6mm 螺丝安装上臂。

关节 3

  • 安装两个电机舵盘。用 M3x6mm 螺丝固定顶部舵盘。底部舵盘无需螺丝。
  • 插入电机 3,并用 4 颗 M2x6mm 螺丝固定。
  • 用每侧 4 颗 M3x6mm 螺丝将前臂连接到电机 3。

关节 4

  • 安装两个电机舵盘。用 M3x6mm 螺丝固定顶部舵盘。底部舵盘无需螺丝。
  • 套上电机支架 4。
  • 滑入电机 4。
  • 用 4 颗 M2x6mm 螺丝固定电机 4。

关节 5

  • 将电机 5 插入腕部支架,并用 2 颗 M2x6mm 前部螺丝固定。
  • 在腕部电机上只安装一个舵盘,并用一颗 M3x6mm 舵盘螺丝固定。
  • 用两侧 4 颗 M3x6mm 螺丝将腕部固定到电机 4。

gripper / 手柄

Follower
Leader
  • 将 gripper 安装到电机 5,用 4 颗 M3x6mm 螺丝将其固定到腕部的电机舵盘上。
  • 插入 gripper 电机,并用每侧 2 颗 M2x6mm 螺丝固定。
  • 在 gripper 电机上安装两个舵盘。用一颗 M3x6mm 螺丝固定顶部舵盘;底部舵盘无需螺丝。
  • 安装 gripper 爪部,并用两侧 4 颗 M3x6mm 螺丝固定。

calibration

接下来,你需要 calibrate 机器人,以确保 leader arm 和 follower arm 处于相同物理位置时具有相同的位置值。 calibration 过程非常重要,因为它能让在一台机器人上训练的神经网络在另一台机器人上工作。

follower arm

运行以下命令或 API 示例来 calibrate follower arm:

Command
API example
lerobot-calibrate \
    --robot.type=so101_follower \
    --robot.port=/dev/tty.usbmodem58760431551 \ # <- The port of your robot
    --robot.id=my_awesome_follower_arm # <- Give the robot a unique name

下面的视频展示了如何进行 calibration。首先,你需要将机器人移动到所有关节都处于其行程中点的位置。然后在按下回车后,你需要让每个关节完成其完整的运动范围。

calibration 视频

leader arm

按照相同步骤 calibrate leader arm,运行以下命令或 API 示例:

Command
API example
lerobot-calibrate \
    --teleop.type=so101_leader \
    --teleop.port=/dev/tty.usbmodem58760431551 \ # <- The port of your robot
    --teleop.id=my_awesome_leader_arm # <- Give the robot a unique name

恭喜 🎉,你的机器人已准备好自行学习任务。按照本教程开始训练它:真实世界机器人入门

如果你有任何问题或需要帮助,请在 Discord 上联系我们。

在 GitHub 上更新