零基础搭好 SO-101 双臂协作:LeRobot 一步步跑通舵机同步到数据采集
【免费下载链接】lerobot🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot
副标题:从两只机械臂到一份可训练的数据集,这篇文章带你完整搭出一个能跑的双臂系统
开头概要
最终成品是一个能跑起来的双臂系统:一只领袖臂、一只跟随臂,都是 SO-101,由 LeRobot 控制——你手动操纵领袖臂,跟随臂实时同步动作,过程中还能完整录下一份双臂轨迹数据集。LeRobot 是基于 PyTorch 的开源机器人学习框架,核心功能是端到端:从舵机驱动、遥操作、数据集采集到策略训练与部署,全部由它接管,不需要你自己去搭通讯协议或选机器人操作系统。
一分钟看懂:LeRobot 给双臂系统带来什么
| 问题 | 回答 |
|---|---|
| 它是什么 | 基于 PyTorch 的开源机器人框架,内置 SO-101 单臂(so101_follower)与双臂(bi_so_follower)的完整驱动实现 |
| 适合谁 | 没有 ROS 背景、想用低成本机械臂练手双臂协作和数据采集的开发者 |
| 能拿到什么 | 可遥操作的双臂联动 + 结构化数据集(关节角、相机画面、任务描述)+ 可训练、可部署的策略 |
| 上手前需要什么 | 两只 SO-101(一领袖一跟随)、一台电脑、Python 3.12 环境 |
准备清单:硬件、软件与环境逐项核对
硬件
- 跟随臂 SO-101 ×1:6 个 Feetech STS3215 舵机(1/345 减速比),⚠️ 必需
- 领袖臂 SO-101 ×1:6 个不同减速比的 STS3215 舵机(1/191、1/345、1/147 混配,见 docs/source/so101.mdx),⚠️ 必需
- 两块舵机控制板(MotorBus 或 Waveshare 板)+ 12V 电源,⚠️ 必需
- 相机(USB 摄像头即可,如 RealSense 可加深度流),可选——没有也能先跑通遥操作
软件
- LeRobot 框架本体(含 Feetech 舵机 SDK,安装时带
.[feetech]附加依赖),⚠️ 必需 - 3D 打印的臂体结构件(官方文档给出了物料清单入口),⚠️ 必需
环境
- Python 3.12 虚拟环境,⚠️ 必需;步骤见 docs/source/installation.mdx
- Linux 下需给串口开放访问权限(文档中有对应命令),⚠️ 必需
- 训练策略用的 GPU,可选——采集和遥操作阶段纯 CPU 即可
分步实操:三张任务卡跑通双臂
任务卡一:让单只 SO-101 先动起来
目标:跟随臂能被电脑识别,6 个关节全部可动、位置读数准确。
- 克隆仓库并装好环境:
git clone https://gitcode.com/GitHub_Trending/le/lerobot- 把控制板接上 USB 和电源,运行端口检测脚本,按提示拔掉再插上 USB,得到跟随臂的串口号:
lerobot-find-port- 给 6 个舵机逐个设置唯一 ID 和波特率——新舵机出厂 ID 都是 1,不改无法区分,脚本会引导你一次只接一个舵机、逐个写入:
lerobot-setup-motors --robot.type=so101_follower --robot.port=<上一步得到的端口>- 把舵机首尾串联成总线,固定到臂体上。
- 运行
lerobot-calibrate,先把臂摆到各关节行程中点,再逐个关节手动打到行程两端,写入校准文件。⚠️ 校准时臂会做全行程运动,先清空工作范围内的障碍物。
完成标准✅:每个关节能完整走完正负满行程且不卡顿;校准文件生成后,同样的物理姿势下读数稳定一致(同一姿势重复读数差异应远小于 1°)。
任务卡二:跑通领袖-跟随双臂同步
目标:动领袖臂,跟随臂实时跟着动。
- 对领袖臂重复任务卡一的 2、3、5 步(
lerobot-setup-motors换成--teleop.type=so101_leader,lerobot-calibrate同理)。 - 两只臂的
id各自取固定名字,后续所有命令都用同样的id——LeRobot 靠它找到对应的校准文件,改了就失效。 - 启动遥操作,核心命令如下(
robot段配跟随臂,teleop段配领袖臂,端口、id 换成自己的):
lerobot-teleoperate \ --robot.type=so101_follower --robot.port=<跟随臂端口> --robot.id=follower_arm \ --teleop.type=so101_leader --teleop.port=<领袖臂端口> --teleop.id=leader_arm- 如果目标从一开始就是"两只跟随臂同时动",把
--robot.type换成bi_so_follower(左臂、右臂各配一组端口),--teleop.type换成bi_so_leader,命令形态不变,实现见 src/lerobot/robots/bi_so_follower/。 - 快速挥动、缓慢平移各做几组,观察跟随情况。
完成标准✅:领袖臂停稳后 1 秒内跟随臂完全静止;跟随臂起动的滞后感官上不可察觉;静止时两臂对应关节的读数差稳定在 ±2° 以内。
任务卡三:录出一份可训练的双臂数据集
目标:边遥操作边录制,得到 N 条带画面、有关节轨迹、有任务描述的完整 episode。
- 在任务卡二的命令基础上改用
lerobot-record,给--robot.cameras加上相机配置(OpenCV 相机,640×480、30fps 是文档示例的默认参数)。 - 用
--dataset.repo_id指定数据集归属、--dataset.single_task写一句任务描述(如 "put the red brick in a bowl")、--dataset.num_episodes定条数。 - 录制中用键盘接管流程:右键保存当前 episode 进入下一条,左键删除重试,Esc 结束并编码上传。
完成标准✅:每条 episode 都完整落盘,关节角与视频时间轴对齐,任务描述不为空。所有命令参数以 docs/source/cheat-sheet.mdx 为准。
问题速查:双臂系统常见异常对照表
| 现象 | 常见原因 | 一行解决动作 |
|---|---|---|
| 检测不到串口 | USB 未插好或 Linux 无设备权限 | 按 docs/source/so101.mdx 给/dev/ttyACM*放行权限后重跑lerobot-find-port |
| 设置 ID 时报错 | 3-pin 线或电源线松了 | 检查电源、USB、舵机线三处,确认只接了一个舵机再按回车 |
| 两臂位置对不上 | 漏校准,或校准后id变了 | 重跑lerobot-calibrate,之后所有命令用同一个id |
| 跟随臂动作发涩 | 电源带载不足或 USB 接触不良 | 换足功率的 12V 电源,重插 USB 线 |
| 相机无画面 | 相机编号(index_or_path)填错 | 跑lerobot-find-cameras确认编号再改配置 |
| 舵机读数跳变 | 舵机未连成总线、首尾断线 | 重新串联 6 个舵机,首端接控制板 |
继续探索:把双臂系统带向智能操作
- 训练策略让双臂自主干活:录完数据用
lerobot-train训练 ACT 等策略,再用lerobot-rollout部署回机械臂,完整流程见 docs/source/il_robots.mdx,策略实现都在 src/lerobot/policies/。 - 加深度感知:接 Intel RealSense 并开启
use_depth,让数据集带上深度流,抓取类任务效果更稳,相机代码在 src/lerobot/cameras/realsense/。 - 推理与执行解耦:异步推理模块把策略推理和机械臂执行放到不同进程,控制更平稳,代码在 src/lerobot/async_inference/。
结尾
双臂系统的难点从来不在某一行代码,而在驱动、校准、采集这条链路能一次性走通——LeRobot 把这条链路打包好了,你要做的只是按任务卡核对。现在就可以做的一步:接上跟随臂,跑起lerobot-find-port,拿到你的第一个串口号。
【免费下载链接】lerobot🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning项目地址: https://gitcode.com/GitHub_Trending/le/lerobot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考