项目介绍
项目采用UC伯克利罗剑岚博士发表的HIL-SERL及SERL框架尝试通过“仿真经验 + 真实经验联合回放”的方式提升学习效率。
项目地址:
SERL(项目):https://serl-robot.github.io/
SERL(代码):https://github.com/rail-berkeley/serl
HIL-SERL(项目):https://hil-serl.github.io/
HIL-SERL(代码):https://github.com/rail-berkeley/hil-serl
Lerobot框架:https://github.com/huggingface/lerobot
一、项目简介:Human-in-the-LoopSERL 具身操作学习系统
1.项目概述
本项目围绕真实机械臂场景下的具身操作学习问题,构建了一套融合人类示教(Human-in-the-Loop)、模仿学习(Behavior Cloning, BC)与强化学习(Reinforcement Learning,RL)的完整系统框架,目标是在真实机器人硬件上实现可训练、可扩展、可闭环的操作策略学习流程。
2.重点突破
传统强化学习方法在真实机器人上面临三大核心困难:
1)试错代价高,纯 RL 探索存在安全与效率问题;
2)仿真到真实(Sim-to-Real)迁移误差大;
3)策略训练与真实控制系统之间存在明显工程割裂。
针对上述问题,本项目以SERL(Simulated Experience Replay Learning)为基础,引入Human-in-the-Loop思想,形成一套从人类示教 → 数据采集 → 策略训练 → 真机执行 → 人工干预修正的闭环学习系统,即HIL-SERL。
二、核心思想与方法
项目的核心思想不是“让机器人自己瞎学”,而是让人类在关键时刻介入学习过程,用最少的人工成本显著提升真实环境下的学习效率与稳定性。
具体而言,系统包含以下关键机制:
人类示教与数据采集通过 VR / 键盘 / 手柄等方式对真实机械臂进行遥操作,采集多模态示教数据,包括:
关节空间状态(Joint State)
末端位姿(TCP Pose)
RGB 视觉观测
模仿学习初始化(BC Pretraining)使用示教数据对策略网络进行行为克隆训练,使策略具备可执行的基础操作能力,避免随机初始化导致的无效探索。
奖励分类器与反馈建模通过训练奖励分类器(Reward Classifier),将人类偏好或成功/失败判断引入强化学习过程,降低对手工奖励函数的依赖。
Human-in-the-Loop强化学习在真实执行过程中,允许人类对策略行为进行实时或离线干预,将干预数据再次回流至经验池,实现“纠偏式学习”。
策略—控制桥接(Policy-to-RobotBridge)打通 Python 侧策略输出与 ROS2 / C++ 控制节点之间的接口,实现策略直接驱动真实机械臂运动,而非仅停留在仿真或数据层面。
三、系统架构概览
1.整体架构
(1)机器人与感知执行层(Robot & Execution Layer)
系统底层为真实机械臂及其控制系统,主要负责状态获取与动作执行,包括:
机械臂关节状态、末端位姿反馈
相机(RGB / RGB-D)等视觉传感器
基于 ROS2 的通信接口
C++ 轨迹规划与控制节点
该层保证策略输出能够安全、稳定地驱动真实机器人运动。
(2)策略推理与接口层(Policy Inference & Bridge Layer)
该层是学习算法与真实控制之间的桥梁,核心功能包括:
策略网络的实时推理(Python)
动作尺度变换与安全约束
策略动作到机器人控制指令的映射
ROS2 → C++ 控制接口对接
该层解决“策略能不能真的动机器人”这一工程关键问题。
(3)学习与数据管理层(Learning & Data Layer)
该层负责策略训练与经验管理,是系统的“智能中枢”,包括:
示教数据采集与存储
行为克隆(BC)策略训练
奖励分类器训练
SERL / HIL-SERL 强化学习
经验回放与数据再利用机制
学习层既可使用离线数据,也可吸收真实执行中的新经验。
(4)Human-in-the-Loop 交互层(Human Interaction Layer)
人类通过该层参与系统运行,主要体现在三个方面:
示教阶段:遥操作生成高质量初始数据
执行阶段:对策略行为进行干预或纠正
学习阶段:通过反馈影响奖励建模与策略更新
该层使系统具备可控探索、可纠偏学习的能力。
(5)结构框图
┌──────────────────────────────────────────────────────────────────────────────┐ │ HIL-SERL 工程总览 │ └──────────────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────┐ │ Human Operator (Teleop) │ │ VR / 手柄 / 键盘 / 其它输入 │ └───────────────┬──────────────┘ │ intervention action / 示教动作 │ + is_intervention 标记 v ┌──────────────────────────────────────────────────────────────────────────────┐ │ Data Recorder / Episode Logger │ │ 记录:obs(视觉/关节/位姿) + action + reward/label + is_intervention + time │ │ 输出:dataset / replay buffer(离线训练 + 在线回放共用) │ └───────────────────────────────────┬──────────────────────────────────────────┘ │ │ dataset / replay buffer v ┌──────────────────────────────────────────────────────────────────────────────┐ │ Learner (训练端,离线/在线) │ │ • BC 预训练 │ │ • RL (SAC/DrQ 等) + Replay ----改进SAC -> RLPD │ │ │ • Reward Classifier │ │ • 输出:policy checkpoint / weights │ └───────────────────────────────────┬──────────────────────────────────────────┘ │ policy weights v ┌──────────────────────────────────────────────────────────────────────────────┐ │ Actor / Inference (运行端,实时) │ │ 输入:当前 obs │ │ 输出:policy action(例如 7DoF 关节增量 or 关节目标 or 末端增量) │ │ 逻辑:policy action 与 teleop action 的仲裁(人类优先 / 安全回退) │ └───────────────────────────────────┬──────────────────────────────────────────┘ │ selected action v ┌──────────────────────────────────────────────────────────────────────────────┐ │ Policy-to-Robot Bridge(桥接层) │ │ • 动作格式映射:policy output → ROS2 msg │ │ • 单位/坐标变换:rad/deg、关节顺序、夹爪等 │ │ • 频率控制:rate limiting / hold-last │ │ • 安全约束:clip / workspace / joint-limit / E-stop gate │ └───────────────────────────────────┬──────────────────────────────────────────┘ │ ROS2 topics/services/actions v ┌──────────────────────────────────────────────────────────────────────────────┐ │ C++ Control Node(底层控制与规划) │ │ • 轨迹规划/插补:planner / trajectory execution │ │ • 控制模式:joint-space / cartesian-space │ │ • 状态发布:joint_state / tcp_pose / tool_in_world │ └───────────────────────────────────┬──────────────────────────────────────────┘ │ command v ┌──────────────────────┐ │ Real Robot Arm │ └──────────┬───────────┘ │ state / sensor feedback v ┌──────────────────────────────────────────────────────────────────────────────┐ │ Observations / Sensors(观测层) │ │ • /joint_states /tcp_pose /tool_in_world │ │ • cameras: RGB / Depth / multi-view (可选) │ │ • 时间同步与对齐:timestamp / frame_id │ └───────────────────────────────────┬──────────────────────────────────────────┘ │ obs └──────────────→ 回到 Actor / Recorder / Buffer2.Policy-to-Robot Bridge 细化链路
┌───────────────────────────────┐ │ Policy (Python/JAX) │ │ 输入:obs │ │ 输出:a_policy (rad) │ └───────────────┬───────────────┘ │ │ a_policy v ┌───────────────────────────────┐ │ Action Adapter / Validator │ │ • rad↔deg、关节顺序映射 │ │ • clip 限幅、速度/加速度约束 │ │ • workspace/joint-limit gate │ └───────────────┬───────────────┘ │ a_policy_safe │ ┌─────────┴─────────┐ │ │ │ │ v v ┌─────────────────┐ ┌──────────────────────────┐ │ Teleop Action │ │ Arbitration (人类优先) │ │ a_human + flag │ │ if is_intervention: │ │ is_intervention │ │ a = a_human │ └─────────┬────────┘ │ else: a = a_policy_safe │ │ └───────────┬──────────────┘ └────────────────────────┘ │ selected action a v ┌───────────────────────────────┐ │ ROS2 Publisher / Action Client│ │ • 发布目标关节/增量 │ │ • 发布夹爪命令 │ │ • 处理 ack/超时/重发 │ └───────────────┬───────────────┘ │ v ┌───────────────────────────────┐ │ C++ Controller / Planner │ │ • trajectory generation │ │ • execution + monitoring │ └───────────────┬───────────────┘ │ v ┌───────────────────────────────┐ │ Real Robot Arm │ └───────────────┬───────────────┘ │ state feedback v ┌───────────────────────────────┐ │ ROS2 State Topics (obs) │ │ /joint_states / tcp_pose ... │ └───────────────────────────────┘四、项目任务列表
对于机械臂抓取工作计划进行仿真+真机两个方案,达成对于某类别物品的抓取工作,要求成功率100%:
仿真环境(基于Lerobot框架):
利用Keyboards/Gamepad录制20-30条数据集(包含头部+腕部的观测及末端xyz)
修改config文件中训练参数,配置wandb、huggingface
进行Learner-Actor分布训练,观察Loss曲线及机器人抓取方块效果
真机部署(基于真实机器人):
完成真实机械臂的示教数据采集与多模态数据记录
实现 BC 策略训练并在真机上稳定执行
训练奖励分类器,支持非显式奖励建模
打通策略推理 → ROS2 → C++ 控制节点的执行链路
在真实硬件上完成基础操作任务的闭环验证
系统具备从“人类操作”到“策略接管”再到“人类纠偏”的完整闭环能力。