个人项目:Lerobot机械臂和模仿学习相关实践(基于SO101)
项目概述
本项目基于SO101单臂机械臂平台,结合单腕部相机与手柄遥操作,对动作分块Transformer(ACT)模仿学习算法进行了实践与评估。项目核心目标是复现并探索ACT在真实机器人抓放(Pick-and-Place)任务中的表现与局限性。

第一阶段(2025年7月 – 2025年8月)
使用SO101机械臂及ACT算法,初步复现了基础的抓放任务。进一步设计并实现了苹果自动削皮任务,系统可在苹果氧化前完成削皮流程。因硬件资源与备考限制,本阶段未进行更深入的算法探索。任务演示视频见B站(BV1ybbaz9EQ7)。
第二阶段(2026年1月 – 2026年2月)
对ACT算法在抓放任务上进行了系统性实验与分析,训练了多个模型进行性能对比。
Real-World ACT 在 SO100 单臂上的实验分析
1. 实验配置
- 硬件平台:SO100 单臂机械臂
- 数据采集:Joycon手柄遥操作 + 夹爪视角单目RGB相机
- 算法框架:Hugging Face LeRobot 中的 ACT 实现
- 训练环境:本地单机,RTX 3060 Laptop GPU
任务定义:抓取桌面上的USB充电器(姿态包括竖立、平放、侧放),并将其放置于左侧纸盒内。
2. 初始参数与数据
- 策略:
act_so100_real_single - 关键参数:
chunk_size: 100,n_action_steps: 100,n_obs_steps: 1 - 训练步数:
offline_steps: 2000 - 数据规模:原始演示轨迹(Episode)10条
3. 实验结果与分析
3.1 基准表现
- 训练集:模型能高度复现演示轨迹,在分布内成功率较高。
- 泛化测试:当物体起始位置偏离演示分布时,任务成功率显著下降。
初步结论:在当前配置下,ACT更接近于一个开环轨迹生成器,其性能严重依赖于演示数据的分布。
3.2 规划时域调整实验
- 实验1(
chunk_size: 50):任务成功率接近0。模型生成的动作序列在约80-100步才能完整执行抓放任务,缩短时域导致动作提前终止。 - 实验2(
chunk_size: 100,n_action_steps: 20):表现不稳定。由于观测步数n_obs_steps=1,策略实质为开环生成,滚动执行时潜在状态漂移导致性能下降。
3.3 多帧输入尝试
尝试将 n_obs_steps调整为4,但LeRobot框架当前ACT实现报错,提示尚未支持多帧观测输入。
3.4 数据扩展实验
在原始数据基础上,新增5条演示轨迹,内容包含抓取失败重试、物体搜索行为及不同起始位姿。
- 结果:模型泛化边界略有扩展,但性能提升有限。
4. 综合结论
在 单帧视觉输入、小规模真实世界演示数据、低数据量 的条件下,本实验中的ACT模型呈现出以下特征:
- 表现为对演示分布敏感的开环轨迹生成器。
- 泛化能力强烈依赖于演示数据分布的覆盖范围。
- 在小数据量下,模型难以形成稳定的闭环控制策略。
- 增加数据多样性带来的性能提升有限。
- 模型架构缺乏显式的时间建模能力是当前主要瓶颈。
因此,在此设定下,ACT更适用于 记忆并复现特定轨迹,而非构建具备强泛化能力的通用闭环控制策略。
5. 后续探索方向
- 扩大演示数据的分布覆盖范围。
- 降低遥操作采集数据的噪声。
- 修改框架以支持多帧观测输入。
- 尝试对比Diffusion Policy等其他模仿学习算法。
6. 配套工具开发:Lerobot Web控制台
为解决手柄控制不便及提升实验效率,独立设计开发了一套基于Web的机器人远程控制与可视化系统。
项目地址:https://github.com/ruali-dev/lerobot-web-console
演示视频:B站 BV1MbfABTEPJ

6.1 系统架构
采用前后端解耦的双进程设计:
- 控制侧进程 (
lerobot_agent):基于Flask封装机械臂原厂SDK,提供本地HTTP控制接口,并集成机器人安全状态机与软限位保护逻辑。 - 应用侧进程 (
lerobot_webui):作为代理服务器,向局域网提供Web服务与API转发,实现对底层控制代码的无侵入集成。
6.2 核心功能
- 安全控制:通过状态机管理机器人使能、急停等状态,对关节指令进行软件限幅,并设置看门狗线程进行超时监控。
- Web控制台:前端使用原生JavaScript与Three.js实现机械臂3D模型的实时姿态渲染与相机视频画中画叠加。控制面板提供启停、急停、关节滑块等控件,并通过防抖策略优化指令发送频率。
- 标准化API:设计并实现了完整的RESTful API(如
/api/v1/control/*,/api/v1/state),前端通过轮询状态与命令队列与管理后端交互。同时预留/act/infer接口,为未来集成AI决策模型提供标准接入方式。