7.1 两只机械臂
7.1 两只机械臂
主臂(leader)——为教学与科研设计的低成本开源臂,有整机版和 DIY 套件 版。六个关节由 7.4 V 级 STS3215 舵机驱动,配 5 V 电源;它只读取关节角度。
从臂(follower)——执行的那只。Pro 套件上运行 12 V 舵机;遥操作时镜像 主臂,之后执行训练好的 VLA 策略。
主臂用 5 V,从臂用 12 V。接反可能损坏舵机。更换任何线缆之前先给两只臂 断电。
完整的组装教程在入门课程里: 入门第 6 章 —— 配置电机与组装 覆盖 3D 打印、电机规划、写 ID 与逐步组装; 入门第 7 章 —— 舵机调试 覆盖 Feetech 调试工具。
7.2 安装 LeRobot 环境
7.2 安装 LeRobot 环境
校准之前,先安装后续所有章节使用的环境。先装 uv,再创建工作区:
curl -LsSf https://astral.sh/uv/install.sh | sh
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
uv --version
mkdir ~/rebot_lerobot
cd ~/rebot_lerobot
sudo apt update
sudo apt install -y ffmpeg
# 下载 Seeed LeRobot 分支(含 SO101 主/从臂支持)
git clone https://github.com/Seeed-Projects/lerobot.git
# 创建虚拟环境(Python 3.12)
uv venv --python 3.12 .venv
source .venv/bin/activate
uv pip install --upgrade pip
uv pip install -e ./lerobot
# Feetech 舵机 SDK —— SO-01 总线必需
uv pip install feetech-servo-sdk
运行环境只需配置一次。后续章节假定你可以这样重新进入:
cd ~/rebot_lerobot && source .venv/bin/activate
7.3 套件还是整机?
7.3 套件还是整机?
| 你的情况 | 组装 | 写舵机 ID | 校准 |
|---|---|---|---|
| 3D 打印/套件版 | 需要 | 需要 | 需要 |
| 整机(出厂组装) | 已完成 | 跳过——工厂已写好 | 需要 |
如果买的是整机,直接跳到 7.5 校准双臂。
组装前给每个舵机贴标签——从臂写 F1–F6,主臂写 L1–L6。关节 1 = 肩 部左右、2 = 肩部俯仰、3 = 肘、4 = 腕俯仰、5 = 腕旋转、6 = 夹爪。SO-ARM101 主臂 1–3 关节的减速比与 SO-ARM100 不同——安装前先查 入门 6.2 的减速比表。
六只舵机共享一条串行总线。写 ID 时控制板上只接这一个舵机,否则重复的 ID 会同时写进所有拥有该 ID 的舵机。
7.4 写入舵机 ID(仅套件版)
7.4 写入舵机 ID(仅套件版)
先找控制板的端口:
lerobot-find-port
按提示拔掉再插上控制板,打印出来的端口就是你的(通常是 /dev/ttyACM0)。
逐关节写入 ID:
lerobot-setup-motors \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM0
工具会点名要连接的关节——只接那一个舵机,按回车,它就会写入 ID 和波特率:
Connect the controller board to the 'gripper' motor only and press enter.
从臂六个关节重复一遍,然后对主臂运行同样的工具:
lerobot-setup-motors \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM1
配置串口权限(重启后依然有效):
sudo usermod -aG dialout $USER # 重新登录一次生效
sudo chmod 666 /dev/ttyACM*
Ubuntu 上 brltty 服务可能抢占 USB 串口。如果端口几秒后消失,卸载它:
sudo apt remove brltty。
7.5 校准双臂
7.5 校准双臂
套件和整机都必须校准。校准让 LeRobot 知道每个关节的中位和两个机械
限位。校准文件保存在 ~/.cache/huggingface/lerobot/calibration/ 下,按臂的
ID 命名——同一个 ID 只能对应同一只物理臂。
找到两个端口,导出后续所有章节都会用到的变量:
export TELEOP_PORT=/dev/ttyACM0
export TELEOP_ID=so101_leader
export ROBOT_PORT=/dev/ttyACM1
export ROBOT_ID=so101_follower
校准主臂:
lerobot-calibrate \
--teleop.type=so101_leader \
--teleop.port=$TELEOP_PORT \
--teleop.id=$TELEOP_ID
- 把每个关节移到行程中间。腕旋转轴要特别居中——如果它一开始就停在 限位上,扫描时编码器可能溢出。
- 按回车,然后一次一个关节、缓慢地扫到两个机械限位。重复扫没关系,极值 会被覆盖。
- 按回车保存。
从臂同理:
lerobot-calibrate \
--robot.type=so101_follower \
--robot.port=$ROBOT_PORT \
--robot.id=$ROBOT_ID
从臂要停在真实的机械限位上——不是被线缆挡住,也不是被桌面挡住。被夹住的 线缆会记录一个假限位,压缩可用行程。
如果从臂只镜像主臂一半的动作,或者某个关节直接打到限位,说明扫描行程不够。 重新校准那只臂,每个关节走完整行程。
如果你运行 NVIDIA workshop 的工具链,可以验证从臂的校准质量:
export ROBOT_PORT ROBOT_ID
python ~/Sim-to-Real-SO-101-Workshop/docker/real/scripts/so101_check_calibration.py
好的校准会以这行结尾:
Overall: ✓ PASS — calibration looks good.
7.6 验证机械臂
7.6 验证机械臂
把两只臂摆到相近的姿态,然后运行:
lerobot-teleoperate \
--robot.type=so101_follower \
--robot.port=$ROBOT_PORT \
--robot.id=$ROBOT_ID \
--teleop.type=so101_leader \
--teleop.port=$TELEOP_PORT \
--teleop.id=$TELEOP_ID
缓慢移动主臂。从臂必须朝相同方向跟随每个关节,并到达相同的限位。Ctrl+C
停止。
这一步同时确认了课程后续使用的关节顺序:shoulder_pan、shoulder_lift、
elbow_flex、wrist_flex、wrist_roll、gripper。如果某个关节方向反了,
重新校准——不要用软件补偿。
第一次运行时,一只手随时放在从臂的电源开关旁边。
下一章:第 8 章 —— 搭建工作空间。