LeRobot documentation
SO-101
SO-101

在下面的步骤中,我们将介绍如何组装我们的旗舰机器人 SO-101。
获取部件
请遵循此 README。其中包含物料清单,并附有获取零件的链接,以及 3D 打印零件的说明。 如果您是首次打印或没有 3D 打印机,其中也提供了相关建议。
安装 LeRobot 🤗
要安装 LeRobot,请遵循我们的安装指南
除了这些说明,您还需要安装 Feetech SDK(如果您从 PyPI 安装了 LeRobot,请改为运行 pip install 'lerobot[feetech]'):
pip install -e ".[feetech]"分步组装说明
从动臂使用 6 个 1/345 减速比的 STS3215 电机。然而,主动臂使用三个不同减速比的电机,以确保它既能承受自身重量,又能以较小的力被移动。下表显示了每个关节所需的电机。
| Leader-Arm 轴 | Motor | 齿轮比 |
|---|---|---|
| / | 1 | 1 / 191 |
| 肩部抬升 | 2 | 1 / 345 |
| 肘部弯曲 | 3 | 1 / 191 |
| 手腕屈伸 | 4 | 1 / 147 |
| 手腕翻转 | 5 | 1 / 147 |
| 夹爪 | 6 | 1 / 147 |
配置电机
1. 找到与每条机械臂关联的 USB 端口
要查找每个总线舵机适配器的端口,请通过 USB 和电源将 MotorBus 连接到计算机。运行以下脚本,并在提示时断开 MotorBus:
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 端口的访问权限:
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 和波特率可能不匹配。
下面的视频展示了设置电机 ID 的步骤顺序。
设置电机视频
跟随者
将 USB 线缆从计算机和电源连接到跟随臂的控制器板。然后,运行以下命令,或使用上一步中获取的端口运行 API 示例。您还需要使用 id 参数为您的跟随臂指定一个名称。
lerobot-setup-motors \
--robot.type=so101_follower \
--robot.port=/dev/tty.usbmodem585A0076841 # <- paste here the port found at previous stepfrom lerobot.robots.so_follower import SO101Follower, SO101FollowerConfig
config = SO101FollowerConfig(
port="/dev/tty.usbmodem585A0076841",
id="my_awesome_follower_arm",
)
follower = SO101Follower(config)
follower.setup_motors()您应该会看到以下说明
Connect the controller board to the 'gripper' motor only and press enter.按照说明,将夹爪的电机接入。请确保它是连接到板卡上的唯一电机,并且该电机本身尚未通过菊花链方式连接到任何其他电机。当您按下[Enter]时,脚本会自动为该电机设置 id 和波特率。
Troubleshooting
如果在此处出现错误,请检查线缆并确保其已正确插入:
- 电源
- 连接计算机和控制器板的 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 针线缆插入腕部旋转电机,并将其连接到控制板。与之前的电机一样,请确保它是唯一连接到该板的电机,并且该电机本身未连接到任何其他电机。
按照说明,对每个电机重复此操作。
在按下 Enter 键之前,请在每一步检查线缆连接。例如,在操作主板时,电源线可能会意外断开。
完成后,脚本将直接结束,此时电机已准备就绪。现在,您可以将每个电机的 3 针电缆依次连接到下一个电机,并将第一个电机(id=1 的“shoulder pan”)的电缆连接到控制器板,该控制器板现在可以安装在机械臂的底座上。
领导者
对主臂执行相同的步骤。
lerobot-setup-motors \
--teleop.type=so101_leader \
--teleop.port=/dev/tty.usbmodem575E0031751 # <- paste here the port found at previous stepfrom lerobot.teleoperators.so_leader import SO101Leader, SO101LeaderConfig
config = SO101LeaderConfig(
port="/dev/tty.usbmodem585A0076841",
id="my_awesome_leader_arm",
)
leader = SO101Leader(config)
leader.setup_motors()清理部件
请从 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 的两侧。
夹爪 / 手柄
- 将夹爪安装到电机 5 上,并使用 4 颗 M3x6mm 螺丝将其固定到手腕处的电机角上。
- 插入夹爪电机,并在每侧使用 2 颗 M2x6mm 螺丝将其固定。
- 在夹爪电机上安装两个电机角。使用 M3x6mm 螺钉固定顶部角;底部角无需使用螺钉。
- 安装夹爪,并在两侧各使用 4 颗 M3x6mm 螺丝将其固定。
- 将领导者支架安装到手腕上,并使用 4 颗 M3x6mm 螺丝固定。
- 使用 1 颗 M2x6mm 螺丝将手柄固定到领导者支架上。
- 插入夹爪电机,每侧使用 2 颗 M2x6mm 螺丝固定,并使用 M3x6mm 喇叭螺丝安装电机喇叭。
- 使用 4 颗 M3x6mm 螺丝固定从动触发器。
校准
接下来,您需要对机器人进行校准,以确保主臂和从臂在处于相同物理位置时具有相同的位置值。 校准过程非常重要,因为它使得在一个机器人上训练的神经网络能够在另一个机器人上运行。
跟随者
运行以下命令或 API 示例来校准从动臂:
# Use the port of your follower arm, and give the arm a unique name with --robot.id
lerobot-calibrate \
--robot.type=so101_follower \
--robot.port=/dev/tty.usbmodem58760431551 \
--robot.id=my_awesome_follower_armfrom lerobot.robots.so_follower import SO101FollowerConfig, SO101Follower
config = SO101FollowerConfig(
port="/dev/tty.usbmodem585A0076891",
id="my_awesome_follower_arm",
)
follower = SO101Follower(config)
follower.connect(calibrate=False)
follower.calibrate()
follower.disconnect()下方的视频演示了如何执行校准。首先,您需要将机器人移动到所有关节均处于其活动范围中间位置的状态。然后,在按下回车键后,您需要将每个关节移动至其完整的活动范围。
校准视频
领导者
执行相同的步骤来校准主臂,运行以下命令或 API 示例:
# Use the port of your leader arm, and give the arm a unique name with --teleop.id
lerobot-calibrate \
--teleop.type=so101_leader \
--teleop.port=/dev/tty.usbmodem58760431551 \
--teleop.id=my_awesome_leader_armfrom lerobot.teleoperators.so_leader import SO101LeaderConfig, SO101Leader
config = SO101LeaderConfig(
port="/dev/tty.usbmodem58760431551",
id="my_awesome_leader_arm",
)
leader = SO101Leader(config)
leader.connect(calibrate=False)
leader.calibrate()
leader.disconnect()恭喜 🎉,你的机器人已准备好自主学习任务。按照本教程开始训练它:使用真实机器人入门
Update on GitHub如果您有任何问题或需要帮助,请在 Discord 上联系我们。