跳转至

SO-100

在以下步骤中,我们将解释如何组装 SO-100 机器人。

采购零件

请遵循此 README。它包含物料清单,以及采购零件的链接,还有 3D 打印零件的说明。如果这是您第一次打印或者您没有 3D 打印机,它还会提供建议。

安装 LeRobot 🤗

要安装 LeRobot,请遵循我们的安装指南

除了这些说明之外,您还需要安装 Feetech SDK:

pip install -e ".[feetech]"

配置电机

注意: 与 SO-101 不同,一旦手臂组装完成,电机连接器就不容易接触到,因此必须事先完成配置步骤。

1. 找到与每个手臂关联的 USB 端口

要找到每个总线伺服适配器的端口,请运行此脚本:

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.

[...断开相应的 leader 或 follower 手臂并按 Enter...]

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

其中找到的端口是:/dev/tty.usbmodem575E0032081,对应您的 leader 或 follower 手臂。

在 Linux 上,您可能需要通过运行以下命令来授予对 USB 端口的访问权限:

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.

[...断开相应的 leader 或 follower 手臂并按 Enter...]

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

其中找到的端口是:/dev/ttyACM1,对应您的 leader 或 follower 手臂。

2. 设置电机 ID 和波特率

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

为此,我们首先需要使用控制器单独连接到每个电机以设置这些参数。由于我们将这些参数写入电机内部存储器(EEPROM)的非易失性部分,因此我们只需要执行一次此操作。

如果您正在重新利用来自另一个机器人的电机,您可能也需要执行此步骤,因为 ID 和波特率可能不匹配。

Follower

将 USB 电缆从您的计算机和电源连接到 follower 手臂的控制器板。然后,使用您在上一步中获得的端口运行以下命令或运行 API 示例。您还需要使用 id 参数为您的 leader 手臂命名。

有关如何设置电机 ID 的视觉参考,请参阅此视频,其中我们遵循 SO101 手臂的流程。

lerobot-setup-motors \
    --robot.type=so100_follower \
    --robot.port=/dev/tty.usbmodem585A0076841  # <- 在此粘贴上一步找到的端口

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 的 'shoulder pan')的电缆插入控制器板,该控制器板现在可以连接到手臂的底座。

Leader

对 leader 手臂执行相同的步骤。

lerobot-setup-motors \
    --teleop.type=so100_leader \
    --teleop.port=/dev/tty.usbmodem575E0031751  # <- 在此粘贴上一步找到的端口

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 个 leader 电机的齿轮

移除齿轮视频

按照视频移除齿轮。您需要移除 leader 手臂电机的齿轮。因此,您将只使用电机的位置编码并减少摩擦,以更轻松地操作 leader 手臂。

清洁零件

从 3D 打印零件中移除所有支撑材料。最简单的方法是使用小螺丝刀伸到支撑材料下方。

附加指导

组装手臂视频

注意: 此视频提供了组装手臂的视觉指导,但没有说明何时或如何进行接线。事先插入电缆比事后插入要容易得多。第一个手臂可能需要超过 1 小时才能组装完成,但一旦您习惯了,您可以在 1 小时内组装第二个手臂。


第一个电机

步骤 2:插入电线

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

步骤 3:安装到底座

  • 将第一个电机放入底座。

步骤 4:固定电机

  • 用 4 颗螺丝固定电机。底部两颗,顶部两颗。

步骤 5:连接电机支架

  • 滑过第一个电机支架并使用两颗螺丝(每侧一颗)固定。

步骤 6:连接电机角

  • 安装两个电机角,用螺丝固定顶部的角。尽量不要在连接电机角时移动电机位置,特别是对于我们移除了齿轮的 leader 手臂。

添加电机角视频

步骤 7:连接肩部零件

  • 将一根电线引导到机器人背面,另一根引导到左侧或朝向您(见照片)。
  • 连接肩部零件。

步骤 8:固定肩部

  • 用顶部 4 颗螺丝和底部 4 颗螺丝拧紧肩部零件 (通过转动肩部访问底部孔)。

第二个电机组装

步骤 9:安装电机 2

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

步骤 10:连接肩部支架

  • 添加肩部电机支架。
  • 确保从电机 1 到电机 2 的电线在支架后面,而另一根电线向上引导(见照片)。
  • 这个零件组装起来可能很紧,您可以使用工作台(如图像所示)或类似的设置将零件推到电机周围。

步骤 11:固定电机 2

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

步骤 12:连接电机角

  • 将两个电机角连接到电机 2,再次使用角螺丝。

步骤 13:连接底座

  • 使用 2 颗螺丝安装底座连接件。

步骤 14:连接上臂

  • 用每侧 4 颗螺丝连接上臂。


第三个电机组装

步骤 15:安装电机 3

  • 将电机 2 的电机电缆通过电缆支架引导到电机 3,然后用 4 颗螺丝固定电机 3。

步骤 16:连接电机角

  • 将两个电机角连接到电机 3,并再次用角螺丝固定一个。

步骤 17:连接前臂

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


第四个电机组装

步骤 18:安装电机 4

  • 滑入电机 4,连接来自电机 3 的电缆,并用螺丝将电缆固定在其支架中。

步骤 19:连接电机支架 4

  • 安装第四个电机支架(紧密配合)。确保一根电线向上引导,来自电机 3 的电线向下引导(见照片)。

步骤 20:固定电机 4 并连接角

  • 用 4 颗螺丝固定电机 4 并连接其电机角,其中一个使用角螺丝。


腕部组装

步骤 21:安装电机 5

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

步骤 22:连接腕部

  • 将电机 4 的电线连接到电机 5。并已经为夹爪插入另一根电线。
  • 使用两侧各 4 颗螺丝将腕部固定到电机 4。

步骤 23:连接腕部角

  • 仅在腕部电机上安装一个电机角,并用角螺丝固定。


Follower 配置

步骤 24:连接夹爪

  • 将夹爪连接到电机 5。

步骤 25:安装夹爪电机

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

步骤 26:连接夹爪角和爪

  • 连接电机角并再次使用角螺丝。
  • 安装夹爪爪并用两侧各 4 颗螺丝固定。

步骤 27:安装控制器

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

组装完成 – 继续进行 Leader 手臂组装。


Leader 配置

对于 leader 配置,执行步骤 1-23。确保您已从电机中移除了电机齿轮。

步骤 24:连接 Leader 支架

  • 将 leader 支架安装到腕部并用螺丝固定。

步骤 25:连接手柄

  • 使用 4 颗螺丝将手柄连接到电机 5。

步骤 26:安装夹爪电机

  • 插入夹爪电机,用每侧 3 颗螺丝固定,使用角螺丝连接电机角,并连接电机电线。

步骤 27:连接触发器

  • 用 4 颗螺丝连接 follower 触发器。

步骤 28:安装控制器

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

校准

接下来,您需要校准机器人,以确保 leader 和 follower 手臂在相同的物理位置时具有相同的位置值。 校准过程非常重要,因为它允许在一个机器人上训练的神经网络在另一个机器人上工作。

Follower

运行以下命令或 API 示例来校准 follower 手臂:

lerobot-calibrate \
    --robot.type=so100_follower \
    --robot.port=/dev/tty.usbmodem58760431551 \ # <- 您的机器人端口
    --robot.id=my_awesome_follower_arm # <- 给机器人一个唯一的名称

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 相同过程的视频作为参考

Leader

执行相同的步骤来校准 leader 手臂,运行以下命令或 API 示例:

lerobot-calibrate \
    --teleop.type=so100_leader \
    --teleop.port=/dev/tty.usbmodem58760431551 \ # <- 您的机器人端口
    --teleop.id=my_awesome_leader_arm # <- 给机器人一个唯一的名称

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()

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

[!TIP] 如果您有任何问题或需要帮助,请在 Discord 上联系我们。