跳转至

Koch v1.1

在以下步骤中,我们将说明如何组装 Koch v1.1 机器人。

订购和组装零件

请按照此 README 中提供的采购和组装说明进行操作。这将指导您设置从动臂和主动臂,如下图所示。

有关组装过程的视觉演示,您可以参考此视频教程

[!WARNING] 自该视频制作以来,我们简化了配置阶段。因此,与该视频中的说明有两点不同:

  • 不要立即插入所有电机电缆,请等待在配置电机中收到指示后再操作。
  • 不要立即将控制板(PCB)固定到底座上,请等待在配置电机中收到指示后再操作。

安装 LeRobot 🤗

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

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

pip install -e ".[dynamixel]"

配置电机

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.

[...断开相应的主动臂或从动臂并按 Enter...]

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

其中找到的端口是:/dev/tty.usbmodem575E0032081,对应于您的主动臂或从动臂。

在 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.

[...断开相应的主动臂或从动臂并按 Enter...]

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

其中找到的端口是:/dev/ttyACM1,对应于您的主动臂或从动臂。

2. 设置电机 ID 和波特率

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

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

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

从动臂

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

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

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

from lerobot.robots.koch_follower import KochFollower, KochFollowerConfig

config = KochFollowerConfig(
    port="/dev/tty.usbmodem575E0031751",
    id="my_awesome_follower_arm",
)
follower = KochFollower(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 的"肩部平移")的电缆插入控制板,现在可以将控制板固定到手臂的底座上。

主动臂

对主动臂执行相同的步骤,但相应地修改命令或脚本。

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

from lerobot.teleoperators.koch_leader import KochLeader, KochLeaderConfig

config = KochLeaderConfig(
    port="/dev/tty.usbmodem575E0031751",
    id="my_awesome_leader_arm",
)
leader = KochLeader(config)
leader.setup_motors()

校准

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

从动臂

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

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

from lerobot.robots.koch_follower import KochFollowerConfig, KochFollower

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

follower = KochFollower(config)
follower.connect(calibrate=False)
follower.calibrate()
follower.disconnect()

我们统一了大多数机器人的校准方法。因此,此 Koch 手臂的校准步骤与 SO100 和 SO101 的步骤相同。首先,我们必须将机器人移动到每个关节处于其范围中间的位置,然后按 Enter。其次,我们将所有关节移动通过其完整的运动范围。可以在此处找到 SO101 相同过程的参考视频。

主动臂

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

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

from lerobot.teleoperators.koch_leader import KochLeaderConfig, KochLeader

config = KochLeaderConfig(
    port="/dev/tty.usbmodem575E0031751",
    id="my_awesome_leader_arm",
)

leader = KochLeader(config)
leader.connect(calibrate=False)
leader.calibrate()
leader.disconnect()

恭喜 🎉,您的机器人已全部设置好,可以自己学习任务了。按照本教程开始训练它:真实世界机器人入门

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