
LeRobot SO-101 机械臂从零组装与调试完全指南电机配置、逐步装配与标定【免费下载链接】lerobot LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot本指南以 LeRobot 的旗舰机械臂 SO-101 为核心完整讲解从零件采购、环境依赖安装、总线电机 ID 与波特率配置到六关节逐级装配和 leader/follower 双臂校准的完整实战流程。读完本文你将掌握使用lerobot-find-port、lerobot-setup-motors、lerobot-calibrate三条 CLI 命令及其等价 Python API完成 SO-101 双臂从硬件到软件的全链路就绪并为后续的遥操作、数据采集与模仿学习训练铺平道路。SO-101 是什么SO-101 是 LeRobot 项目的旗舰开源机器人一套由 3D 打印结构件、6 个 Feetech STS3215 总线舵机与 MotorBus 控制器板组成的 6 自由度机械臂5 个关节 1 个夹爪。它通常以「leader 臂 follower 臂」成对出现——leader 臂由人手直接操作follower 臂复现动作从而完成遥操作数据采集为端到端模仿学习提供训练数据。在仓库中SO-101 的底层实现集中在两个模块follower 臂src/lerobot/robots/so_follower/so_follower.py 中的SOFollower类SO101Follower即其别名见 so_follower.py 第 241-242 行leader 臂src/lerobot/teleoperators/so_leader/so_leader.py 中的SOLeader类SO101Leader同理。二者共享同一套 6 电机总线定义与标定流程仅在扭矩控制与数据流方向上有所分工。1. 采购零件SO-101 的物料清单BOM、零件采购渠道以及 3D 打印文件说明来自 SO-ARM100 项目 的 README。它同时提供了 3D 打印指南。如果你是第一打印或者手头没有 3D 打印机建议先阅读该 README 中的建议例如委托打印服务避免在打印环节走弯路。2. 安装 LeRobot 与 Feetech 依赖在开始之前需要先完成 LeRobot 的安装安装步骤见 docs/source/installation.mdx安装指南。除基础安装外SO-101 依赖 Feetech 总线舵机的 SDK必须追加安装对应 extrapip install -e .[feetech]feetechextra 会引入 FeetechMotorsBus 所需的底层通信库这是后续一切电机读写操作的前提。3. 理解 SO-101 的电机布局与齿轮比SO-101 的 follower 臂使用6 个 STS3215 电机统一采用 1/345 减速比。而 leader 臂为了保证「既能自持重量、又不需要很大力气就能推动」在 6 个关节上混用了三种不同减速比的电机具体分配如下表Leader-Arm AxisMotorGear RatioBase / Shoulder Pan11 / 191Shoulder Lift21 / 345Elbow Flex31 / 191Wrist Flex41 / 147Wrist Roll51 / 147Gripper61 / 147对应到软件侧so_follower.py 第 51-62 行 定义了 follower 臂的总线电机映射shoulder_pan(id1)、shoulder_lift(id2)、elbow_flex(id3)、wrist_flex(id4)、wrist_roll(id5)、gripper(id6)全部为sts3215型号。body 关节使用统一归一化模式而gripper单独使用RANGE_0_100归一化模式因为夹爪的物理输出范围与旋转关节不同。leader 臂的定义见 so_leader.py 第 43-54 行电机布局完全相同。4. 配置电机总线 ID 与波特率4.1 为什么需要配置每台电机在总线上通过唯一的id被识别。全新电机的出厂默认 id 通常是1若 6 个电机都保持 id1控制器将无法区分它们此外总线上的数据传输速率由波特率baudrate决定控制器与所有电机必须使用相同波特率才能互相通信。因此组装前必须为每台电机写入唯一 id 并统一波特率。这些参数被写入电机内部存储器的非易失区EEPROM因此只需配置一次。如果你是从其他机器人上拆下来的旧电机也建议重做本步骤因为旧电机的 id 和波特率很可能不匹配。SO-100 与 SO-101 的一个重要差异SO-101 的电机连接器在整机装配后仍然可插拔因此可以在组装之后再配置而 SO-100 装配完成后电机连接器不可触及必须在组装前完成配置。4.2 第一步查找每个臂对应的 USB 端口把 MotorBus 控制器板通过 USB 接到电脑并通电然后运行lerobot-find-port脚本会列出所有可用串口并提示你在识别当前总线后拔下 USB 以区分对应的臂。以下是典型输出macOSFinding 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。LinuxLinux 下可能需要先给 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即对应你的某条臂。请记下两条臂各自的端口后续所有命令都需要用到。4.3 第二步设置电机 id 与波特率配置的核心思想是一次只把一个电机接到控制器板上逐台写入 id 与波特率全部完成后再按菊花链daisy-chain方式串联起来。Follower 臂将 USB 线和电源接到 follower 臂的控制器板上用上一步得到的端口运行命令并通过id参数给 follower 臂起一个名字这个名字将作为标定文件的关联标识后续遥操作、录制、评估必须保持一致命令行方式lerobot-setup-motors \ --robot.typeso101_follower \ --robot.port/dev/tty.usbmodem585A0076841 # - 粘贴上一步找到的端口API 方式from lerobot.robots.so_follower import SO101Follower, SO101FollowerConfig config SO101FollowerConfig( port/dev/tty.usbmodem585A0076841, idmy_awesome_follower_arm, ) follower SO101Follower(config) follower.setup_motors()脚本启动后会提示Connect the controller board to the gripper motor only and press enter.此时只把gripper 电机id6接到控制器板上确保它是板上唯一电机且尚未与任何其他电机菊花链串联。按下[Enter]后脚本自动为该电机写入 id 与波特率随后输出gripper motor id set to 6接着提示连接下一个电机Connect the controller board to the wrist_roll motor only and press enter.可以把 3-pin 线从控制器板上拔下但另一端保持接在 gripper 电机上它最终就在那个位置再取一根新的 3-pin 线接上 wrist roll 电机并连到控制器板同样确保它孤零零地只连着板子。按此流程逐台完成所有 6 个电机。故障排查Troubleshooting若在此处报错逐项检查电源是否正常、电脑与控制器板之间的 USB 线、控制器板到电机的 3-pin 线如果使用 Waveshare 控制器板确认两个跳线帽位于B 通道USB。经验提示每次按下 Enter 前先检查一遍线缆——例如插拔过程中电源线可能意外松脱。全部完成后脚本自动结束此时电机已就绪。接下来就可以把每个电机的 3-pin 线首尾串联菊花链并把第一台电机id1 的shoulder_pan的线接到控制器板上控制器板随后可固定到机械臂底座。Leader 臂leader 臂重复同样流程仅参数命名空间不同leader 在配置体系中被归类为teleop命令行方式lerobot-setup-motors \ --teleop.typeso101_leader \ --teleop.port/dev/tty.usbmodem575E0031751 # - 粘贴上一步找到的端口API 方式from lerobot.teleoperators.so_leader import SO101Leader, SO101LeaderConfig config SO101LeaderConfig( port/dev/tty.usbmodem585A0076841, idmy_awesome_leader_arm, ) leader SO101Leader(config) leader.setup_motors()4.4 源码视角setup_motors 是如何工作的从源码看lerobot-setup-motors脚本src/lerobot/scripts/lerobot_setup_motors.py通过 draccus 解析配置后依据--robot还是--teleop构造对应设备并调用其setup_motors()方法。而 so_follower.py 第 173-177 行 与 so_leader.py 第 139-143 行 的实现是按reversed()逆序遍历电机从 gripper 到 shoulder_pan每轮用input()阻塞等待你接线确认然后调用self.bus.setup_motor(motor)完成单台电机的 id/波特率写入并打印motor motor id set to id。这正是前面交互流程的底层实现。5. 逐步装配 SO-1015.1 清理打印件先移除所有 3D 打印件上的支撑材料。最省事的方式是用小螺丝刀从支撑材料下方撬起。建议在放置电机后、继续装配之前为每台电机预先插好一根 3-pin 线后期布线会困难得多。5.2 Joint 1肩部底盘安装两个电机 horn舵盘。顶部 horn 用 1 颗 M3x6mm 螺丝固定底部 horn 无需螺丝。将第一个电机放入底座。用 4 颗 M2x6mm 螺丝最小号固定电机顶部 2 颗、底部 2 颗。套上第一个电机固定座用 2 颗 M2x6mm 螺丝每侧 1 颗固定。装上肩部零件。用顶部 4 颗 底部 4 颗 M3x6mm 螺丝拧紧肩部零件。加上肩部电机固定座。5.3 Joint 2肩部抬升安装两个电机 horn顶部 horn 用 M3x6mm 螺丝固定。从上方滑入第二个电机。用 4 颗 M2x6mm 螺丝固定第二电机。用每侧 4 颗 M3x6mm 螺丝装上大臂。5.4 Joint 3肘部弯曲安装两个电机 horn顶部 horn 用 M3x6mm 螺丝固定。插入电机 3用 4 颗 M2x6mm 螺丝固定。用每侧 4 颗 M3x6mm 螺丝将前臂连接到电机 3。5.5 Joint 4腕部弯曲安装两个电机 horn顶部 horn 用 M3x6mm 螺丝固定。套上电机 4 的固定座。滑入电机 4。用 4 颗 M2x6mm 螺丝固定电机 4。5.6 Joint 5腕部旋转将电机 5 插入腕部固定座用 2 颗 M2x6mm 前部螺丝固定。腕部电机只安装一个电机 horn用 1 颗 M3x6mm horn 螺丝固定。用两侧各 4 颗 M3x6mm 螺丝将腕部固定到电机 4 上。5.7 夹爪 / 把手Gripper / HandleFollower 臂将夹爪连接到电机 5腕部电机 horn 上用 4 颗 M3x6mm 螺丝固定。插入夹爪电机每侧用 2 颗 M2x6mm 螺丝固定。在夹爪电机上安装两个电机 horn顶部 horn 用 M3x6mm 螺丝底部 horn 无需螺丝。安装夹爪爪齿两侧各用 4 颗 M3x6mm 螺丝固定。Leader 臂将 leader 固定座安装到腕部用 4 颗 M3x6mm 螺丝固定。用 1 颗 M2x6mm 螺丝将把手固定到 leader 固定座。插入夹爪电机每侧用 2 颗 M2x6mm 螺丝固定再用 M3x6mm horn 螺丝安装一个电机 horn。用 4 颗 M3x6mm 螺丝固定 follower 扳机trigger即遥操作时手指扣动夹爪的部件。6. 标定双臂Calibrate6.1 为什么必须标定标定的目标是确保leader 臂与 follower 臂在相同物理位姿下输出相同的关节位置值。这一点至关重要标定让「在一台机器人上训练的神经网络能够迁移到另一台机器人上工作」成为可能例如用 leader 采集数据、用 follower 执行。从源码看so_follower.py 第 115-157 行标定流程为若已存在与id关联的标定文件脚本会询问是直接使用现有文件还是输入c重新标定禁用扭矩将所有电机切换到 POSITION 运行模式提示你将机械臂移动到所有关节量程中间位置并回车——此时通过set_half_turn_homings()记录每个电机的半圈归零偏移homing offset提示你依次把除wrist_roll外的所有关节完整走一遍量程脚本实时记录每个关节的range_min/range_max而wrist_roll是 360° 连续旋转关节其量程被直接固定为0到4095对应 12-bit 编码器全量程将homing_offset、range_min、range_max等构成MotorCalibration写入电机 EEPROM并保存到本地标定文件路径与id关联。leader 臂的标定实现见 so_leader.py 第 84-125 行流程一致。标定文件随后会保存在~/.cache/huggingface/lerobot/下按 robot id 命名的目录中。6.2 Follower 臂标定命令行方式lerobot-calibrate \ --robot.typeso101_follower \ --robot.port/dev/tty.usbmodem58760431551 \ # - 你的机械臂端口 --robot.idmy_awesome_follower_arm # - 给机械臂起个唯一名字API 方式from lerobot.robots.so_follower import SO101FollowerConfig, SO101Follower config SO101FollowerConfig( port/dev/tty.usbmodem585A0076891, idmy_awesome_follower_arm, ) follower SO101Follower(config) follower.connect(calibrateFalse) follower.calibrate() follower.disconnect()6.3 Leader 臂标定命令行方式lerobot-calibrate \ --teleop.typeso101_leader \ --teleop.port/dev/tty.usbmodem58760431551 \ # - 你的机械臂端口 --teleop.idmy_awesome_leader_arm # - 给机械臂起个唯一名字API 方式from lerobot.teleoperators.so_leader import SO101LeaderConfig, SO101Leader config SO101LeaderConfig( port/dev/tty.usbmodem58760431551, idmy_awesome_leader_arm, ) leader SO101Leader(config) leader.connect(calibrateFalse) leader.calibrate() leader.disconnect()标定过程的操作要点先把机械臂移到所有关节都在量程中间的位姿回车后逐个关节完整走满量程。另外注意lerobot-calibrate脚本src/lerobot/scripts/lerobot_calibrate.py同样通过--robot.*/--teleop.*前缀区分两条臂。标定完成后机械臂便已全部就绪可以开始学习任务了。7. 标定之后的完整闭环SO-101 就绪后接下来的标准流程是遥操作 → 录制数据集 → 训练策略 → 部署评估完整教程见 docs/source/il_robots.mdx真实世界机器人入门。以下是与 SO-101 直接相关的关键命令遥操作leader 驱动 followerlerobot-teleoperate \ --robot.typeso101_follower \ --robot.port/dev/tty.usbmodem58760431541 \ --robot.idmy_awesome_follower_arm \ --teleop.typeso101_leader \ --teleop.port/dev/tty.usbmodem58760431551 \ --teleop.idmy_awesome_leader_arm录制数据集以 5 个 episode 为例lerobot-record \ --robot.typeso101_follower \ --robot.port/dev/tty.usbmodem585A0076841 \ --robot.idmy_awesome_follower_arm \ --robot.cameras{ front: {type: opencv, index_or_path: 0, width: 1920, height: 1080, fps: 30}} \ --teleop.typeso101_leader \ --teleop.port/dev/tty.usbmodem58760431551 \ --teleop.idmy_awesome_leader_arm \ --display_datatrue \ --dataset.repo_id${HF_USER}/record-test \ --dataset.num_episodes5 \ --dataset.single_taskGrab the black cube \ --dataset.streaming_encodingtrue \ --dataset.encoder_threads2训练策略以 ACT 为例lerobot-train \ --dataset.repo_id${HF_USER}/so101_test \ --policy.typeact \ --output_diroutputs/train/act_so101_test \ --job_nameact_so101_test \ --policy.devicecuda \ --wandb.enabletrue \ --policy.repo_id${HF_USER}/my_policy部署评估base 模式lerobot-rollout \ --strategy.typebase \ --policy.path${HF_USER}/my_policy \ --robot.typeso101_follower \ --robot.port/dev/ttyACM1 \ --robot.cameras{ up: {type: opencv, index_or_path: /dev/video10, width: 640, height: 480, fps: 30}, side: {type: intelrealsense, serial_number_or_name: 233522074606, width: 640, height: 480, fps: 30}} \ --taskPut lego brick into the transparent box \ --duration608. 进阶配置参数速查围绕 SO-101源码中的可调配置集中在 src/lerobot/robots/so_follower/config_so_follower.py 与 src/lerobot/teleoperators/so_leader/config_so_leader.py常用参数如下参数默认值说明port必填总线串口路径如/dev/ttyACM1id必填设备唯一名称用于关联标定文件use_degreesTrue关节角度归一化是否使用度数设为False以兼容新策略/数据集max_relative_targetNone限制每次动作的关节相对目标幅值上限可传单个标量或按电机名的字典用于安全保护见 so_follower.py 第 219-230 行 的ensure_safe_goal_position裁剪逻辑position_p_coefficient16POSITION 模式 PID 的 P 系数连接时写入电机position_i_coefficient0PID 的 I 系数position_d_coefficient32PID 的 D 系数num_read_retries2电机sync_read失败时的重试次数Feetech 总线在多个关节同时运动时偶尔返回损坏状态包重试可避免控制循环中断disable_torque_on_disconnectTrue断开连接时是否禁用扭矩cameras{}相机配置字典如{front: OpenCVCameraConfig(...)}其中PID 系数与夹爪保护参数在configure()阶段so_follower.py 第 159-171 行写入电机夹爪电机还会被写入Max_Torque_Limit500最大扭矩的 50%防止烧毁、Protection_Current250最大电流的 50%与Overload_Torque25过载时扭矩 25%三个保护参数。总结SO-101 的从零就绪可以归纳为五步采购打印 → 安装依赖 → 配置电机 → 逐步装配 → 双臂标定。整个过程既有清晰的 CLI 工具支撑lerobot-find-port、lerobot-setup-motors、lerobot-calibrate也有完整的 Python API 等价实现SO101Follower/SO101Leader且标定文件与设备id强绑定保证了「leader 采集、follower 执行」的跨机迁移能力。完成上述步骤后即可进入 docs/source/il_robots.mdx 教程开始遥操作、录制数据集并训练你自己的端到端策略。【免费下载链接】lerobot LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考