LeRobot SO-101 机械臂从底层控制到 VLA 视觉语言动作模型完整实操复盘
Task 1
本次任务主要完成 LeRobot SO-101 机械臂的环境搭建、串口连接、机械臂校准、关节复位控制以及主从臂遥操作。
实验设备为 MacBook Air M5,机械臂由一台 Leader 主动臂和一台 Follower 从动臂组成。除了运行 LeRobot 自带的校准和遥操作程序外,我还编写了Task1.py,用于控制机械臂平滑运动到不同目标姿态。
实验代码已经上传至以下仓库:
https://github.com/LongtermFcq/lerobot-so101-vla-end2end-demo其中本任务对应的代码文件命名为:
Task1.py一、搭建 LeRobot 开发环境
首先创建 Python 3.12 的 Conda 虚拟环境:
conda create -y -n lerobot python=3.12 conda activate lerobot随后安装 FFmpeg:
conda install ffmpeg=7.1.1 -c conda-forge -y安装完成后,可以通过下面的命令进行验证:
ffmpeg -version接下来下载并安装 LeRobot:
git clone https://github.com/huggingface/lerobot.git cd lerobot pip install -e ".[feetech]"安装完成后运行:
lerobot-info也可以进入 Python,检查相关模块是否能够正常导入:
import lerobot import torch import scservo_sdk如果没有报错,说明 LeRobot 和飞特舵机相关依赖已经安装成功。
二、查看机械臂串口
将 Leader 和 Follower 机械臂连接到电脑后,执行:
ls /dev/tty.*本次实验中,两台机械臂对应的串口如下。
Follower 从动臂:
/dev/tty.usbmodem5B3D0458541 /dev/tty.wchusbserial5AE60814261Leader 主动臂:
/dev/tty.usbmodem5B3D0457201 /dev/tty.wchusbserial5AE60570281在 macOS 中,同一个舵机控制板可能同时显示为usbmodem和wchusbserial两种串口名称。这是正常现象,两个端口通常对应同一个物理设备,实际使用时选择其中一个即可。
如果程序提示没有串口权限,可以执行:
sudo chmod 666 /dev/tty.usbmodem5B3D0458541 sudo chmod 666 /dev/tty.usbmodem5B3D0457201需要注意,重新插拔设备后,串口名称和权限可能发生变化,因此每次实验前最好重新检查一次。
三、校准 Leader 和 Follower
正式校准前,需要先使用飞特舵机调试工具检查各个舵机的位置范围。
舵机原始位置应处于0~4095之间,不能出现负数或超过范围的数值。完成上下限检查后,将各个关节移动到大约2047的中位位置。
首先校准 Follower 从动臂:
lerobot-calibrate \ --robot.type=so101_follower \ --robot.port=/dev/tty.usbmodem5B3D0458541 \ --robot.id=monica_follower_arm然后校准 Leader 主动臂:
lerobot-calibrate \ --teleop.type=so101_leader \ --teleop.port=/dev/tty.usbmodem5B3D0457201 \ --teleop.id=monica_leader_arm运行命令后,根据终端提示移动机械臂各个关节,完成运动范围采集(第5个关节不用转动)。
四、使用 Task1.py 完成机械臂复位
完成校准后,运行仓库中的Task1.py:
python Task1.py该脚本用于控制机械臂平滑运动到指定姿态。为了避免机械臂突然运动产生冲击,程序采用分步插值方式,将整个运动过程划分为 60 步。
实验参数如下:
| 参数 | 数值 |
|---|---|
| 运动时间 | 3 秒 |
| 运动步数 | 60 步 |
| 每步间隔 | 50 ms |
| 到位容差 | ±3° |
本次共测试了三种姿态:
| 姿态 | 说明 |
|---|---|
| Home | 默认复位姿态 |
| Zero | 所有关节运动到 0° |
| Custom | 自定义安全姿态 |
Home 姿态的目标角度设置如下:
{ "shoulder_pan.pos": 0, "shoulder_lift.pos": -20, "elbow_flex.pos": 40, "wrist_flex.pos": 0, "wrist_roll.pos": 30, "gripper.pos": 40, }实验完成后,程序会读取机械臂的实际关节位置,并计算实际角度与目标角度之间的误差。
测试结果如下:
| 姿态 | 最大误差 | 结果 |
|---|---|---|
| Home | 2.46° | 通过 |
| Zero | 2.46° | 通过 |
| Custom | 2.42° | 通过 |
三组姿态的最大误差均小于设定的±3°,说明机械臂能够较稳定地运动到目标位置。其中误差较大的关节主要是elbow_flex.pos,但仍然满足实验要求。
五、主从臂遥操作
完成 Leader 和 Follower 校准后,可以运行 LeRobot 的遥操作命令:
lerobot-teleoperate \ --robot.type=so101_follower \ --robot.port=/dev/tty.usbmodem5B3D0458541 \ --robot.id=monica_follower_arm \ --teleop.type=so101_leader \ --teleop.port=/dev/tty.usbmodem5B3D0457201 \ --teleop.id=monica_leader_arm其中:
so101_leader表示主动臂;so101_follower表示从动臂。
程序启动后,手动移动 Leader 主动臂,Follower 从动臂会同步执行对应动作。
第一次遥操作时,建议缓慢移动主动臂,并提前清理机械臂周围的障碍物,避免从动臂与桌面、底座或其他设备发生碰撞。
本次实验中,从动臂能够正常跟随主动臂运动,并完成了遥操作视频录制。
六、实验总结
本次任务完成了 MacBook Air M5 上的 LeRobot 环境搭建,以及 SO-101 机械臂的串口连接、舵机校准、关节复位和主从遥操作。
通过Task1.py测试了 Home、Zero 和 Custom 三种姿态。三组姿态的最大误差均控制在±3°以内,机械臂能够平稳到达目标位置。
在遥操作实验中,Leader 主动臂能够同步控制 Follower 从动臂,说明机械臂的校准配置和主从控制流程均能够正常工作。
通过本次实验,我基本熟悉了 LeRobot SO-101 从环境安装、设备连接到关节控制和遥操作的完整流程。
参考资料
硬件组装教程:
https://www.bilibili.com/video/BV1oBjL6JEo8舵机校准与遥操作教程:
https://www.bilibili.com/video/BV1r6UUBFECD实验代码:
https://github.com/LongtermFcq/lerobot-so101-vla-end2end-demo