端口识别与机械臂校准
Port Detection & Calibration
识别机械臂端口,完成电机校准,确保运动精度
未开始
完成后会同步到学习路径和首页统计
两条 USB 都接上了,ls /dev/tty* 也能看到 ttyUSB0 和 ttyUSB1。但你还差两步才能开始采数据:
- 告诉 LeRobot 哪个端口是 Leader、哪个是 Follower —— 写进配置文件
- 校准 —— 让电脑知道每个电机的"真零点"
校准是这一章的重点,也是最容易被忽略、忽略了又必然出问题的一步。机械臂出厂时每个电机的零点都有装配公差:你说"去 30 度",它实际可能去了 31 度或 28 度。不校准的话,Follower 跟随会偏、录的数据会失真、训练出来的模型必崩。
这一步跳不过去,但好在脚本会一步步引导,3 分钟搞定。
校准是数据质量的第一道闸门:
- 没校准 → Leader 读 30 度但 Follower 实际 33 度 → 你以为录的是 A 动作,存进数据集的是 B → 模型学到的是错的
- 端口配错 → 脚本直接报
Missing required field(s) port或连不上 - 校准是"垃圾进垃圾出"里最前端的环节:这里偏一点,后面训练再用力也白搭
- 正确识别 Leader 和 Follower 端口
- 完成机械臂零点校准
- 验证校准结果的准确性
- 1校准确保电机角度与实际位置一致
- 2校准数据保存在配置文件中
- 3每次更换电机或重新组装后需要重新校准
校准前 vs 校准后
flowchart LR
subgraph Before ["未校准"]
B1["Leader 读 30度"] -.->|"偏差 3度"| B2["Follower 实际 33度"]
end
subgraph After ["校准后"]
A1["Leader 读 30度"] -->|"一致"| A2["Follower 实际 30度"]
end
style Before fill:#fef2f2,stroke:#dc2626
style After fill:#f0fdf4,stroke:#16a34a认出哪个端口是哪条臂
最稳的土办法:ls /dev/tty* 看一次 → 拔掉 Leader 的 USB → 再看一次,少掉的那个就是 Leader。
LeRobot 也自带探测工具 find_motors_bus_port.py,会逐个端口询问"你是几号电机"来告诉你对应关系,不用拔线。
查看串口(拔线前后各一次对比)
ls /dev/tty*第一次: ttyUSB0 ttyUSB1 第二次: ttyUSB0 ← 少了 ttyUSB1,它就是刚拔的 Leader
把端口写进配置文件
知道哪个 ttyUSB 是哪个角色后,编辑 lerobot/configs/robot/so100.yaml,把端口填进 leader_arms / follower_arms。
main 只是个名字,可以叫任何东西;port 填上一步认出的实际设备路径。改完保存,之后所有命令都会读这份配置。
so100.yaml 里的端口配置
leader_arms: main: port: /dev/ttyUSB1follower_arms: main: port: /dev/ttyUSB0重启后 ttyUSB 编号可能对调,届时要回来改这里 —— 这是 Missing required field(s) port 之外最常见的"昨天还好好的今天连不上"。
运行校准
跑校准脚本,它会一步步引导你把机械臂手动摆到指定姿态(如完全伸展、回零位),每摆一个按一次 Enter。整个过程 1-2 分钟,数据自动保存到 ~/.cache/.../calibration.json。
启动校准
python lerobot/scripts/control_robot.py calibrate \ --robot-path lerobot/configs/robot/so100.yamlCalibrating leader_arms/main... [INFO] Move arm to fully-extended pose, press Enter... [INFO] Move arm to home pose, press Enter... [INFO] Saving calibration ... Done!
手动摆姿态时轻柔扳动。SO101 电机不带阻尼,硬扳可能损坏齿轮。
运行校准脚本
python lerobot/scripts/control_robot.py calibrate --robot-path lerobot/configs/robot/so100.yaml查看校准结果
cat ~/.cache/huggingface/lerobot/calibration/so100.json校准做完了,但 Follower 跟随还是偏。
根本原因
摆姿态时不够准 —— "完全伸展"其实只伸了 80%,导致参考点偏。
正确认识
重跑校准,严格按提示/图示摆到位,可拿尺子比对。校准数据会覆盖旧的,重做安全。
`Missing required field(s) port`
根本原因
yaml 里没写 port,或缩进错了导致没被解析。
正确认识
在 leader_arms / follower_arms 下补上正确缩进的 port: 字段。YAML 对缩进敏感,用空格不要用 Tab。
「校准一次就一劳永逸了吧?」
根本原因
以为校准是终身有效的。
正确认识
校准数据存硬盘,关机不丢;但换电机、拆装、运输颠簸后零点会变,需重新校准。平时不用反复做。
- 端口正确识别
- 校准数据保存成功
- 关节运动范围正确
判断要不要重新校准
下面哪些情况需要重新校准?
A. 关机一晚,第二天开机
B. 机械臂从桌上摔了一下
C. 换了一个电机
D. 只是重新插了下 USB
Missing required field(s) port
- 原因:
- 配置文件中未指定端口
- 解决:
- 在 robot 配置中添加 port 字段
vim lerobot/configs/robot/so100.yaml- LeRobot 机器人控制脚本文档
control_robot.py 的 calibrate / teleoperate / record 子命令说明。
两步走:认端口(拔线法或 find_motors)→ 写进 so100.yaml 的 leader_arms / follower_arms;校准(跑 calibrate 脚本,手动摆姿态记零点)。
校准对齐了 Leader 读数与 Follower 实际姿态,是数据质量的第一道闸门,硬件没变动就不用重做。
下一章是最爽的部分:真的拿起机械臂演示动作,把数据录下来。
本章讨论区
登录后即可参与讨论 —— 点击右上角的 登录 按钮
加载中…