LeRobot SO-101 机械臂从底层控制到 VLA 视觉语言动作模型完整实操复盘

📅 2026/7/26 6:14:05 👁️ 阅读次数 📝 编程学习
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.wchusbserial5AE60814261

Leader 主动臂:

/dev/tty.usbmodem5B3D0457201 /dev/tty.wchusbserial5AE60570281

在 macOS 中,同一个舵机控制板可能同时显示为usbmodemwchusbserial两种串口名称。这是正常现象,两个端口通常对应同一个物理设备,实际使用时选择其中一个即可。

如果程序提示没有串口权限,可以执行:

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, }

实验完成后,程序会读取机械臂的实际关节位置,并计算实际角度与目标角度之间的误差。

测试结果如下:

姿态最大误差结果
Home2.46°通过
Zero2.46°通过
Custom2.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