Koch v1.1
在以下步骤中,我们将说明如何组装 Koch v1.1 机器人。
订购和组装零件
请按照此 README 中提供的采购和组装说明进行操作。这将指导您设置从动臂和主动臂,如下图所示。
有关组装过程的视觉演示,您可以参考此视频教程。
[!WARNING] 自该视频制作以来,我们简化了配置阶段。因此,与该视频中的说明有两点不同:
安装 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 针电缆
然后您应该看到以下消息:
'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 上联系我们。