1. 项目概述
在机器人强化学习领域,Unitree RL GYM 是一个基于 Unitree 四足机器人的开源强化学习控制框架。作为该系列文章的第三期,我们将深入解析其中的三个核心组件:OnPolicyRunner、VecEnv 和 RolloutStorage 的实现原理与代码细节。这些组件共同构成了一个完整的强化学习训练系统,支持从仿真到真实世界的策略迁移(sim-to-real)。
1.1 核心需求解析
在强化学习训练过程中,我们需要解决以下几个关键问题:
- 高效数据采集:需要并行运行多个环境实例以加速数据收集
- 轨迹存储与管理:需要有效存储和管理采样得到的轨迹数据
- 策略优化:需要实现PPO等策略优化算法的核心计算逻辑
这三个组件分别对应了这些需求:
- VecEnv:负责多环境并行运行
- RolloutStorage:负责轨迹数据的存储和管理
- OnPolicyRunner:协调整个训练流程
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心组件解析
2.1 观测与特权观测系统
在深入代码前,我们需要理解一个关键概念:Asymmetric Actor-Critic(非对称Actor-Critic)架构中的观测系统设计。
2.1.1 观测(Observation)设计
对于四足机器人(如Go2、H1等),观测通常包含以下信息:
| 类型 | 说明 | 示例维度 |
|---|---|---|
| 关节位置 | 当前各关节角度 | 12 |
| 关节速度 | 各关节角速度 | 12 |
| 基座线速度 | 机器人底盘在x,y,z方向的速度 | 3 |
| 基座角速度 | 机器人底盘绕x,y,z轴的角速度 | 3 |
| IMU加速度 | 加速度传感器读数 | 3 |
| IMU角速度 | 陀螺仪读数 | 3 |
| 末端足接触 | 各足是否接触地面(触觉传感器) | 4 |
| 目标信息 | 目标位置或运动指令 | 3 |
这些观测构成了Actor网络的输入,决定了策略可以看到环境的哪些信息。
2.1.2 特权观测(Privileged Observation)设计
特权观测是Critic网络独有的输入,通常包含更多环境信息:
| 类型 | 说明 | 示例维度 |
|---|---|---|
| 完整机器人状态 | 包含底盘位姿(位置+姿态) | 6 |
| 关节力矩 | 各关节实际力矩 | 12 |
| 地形高度图 | 机器人下方或周围地形信息 | 12~20 |
| 物理全局状态 | 机器人每个关节和连杆的全局位置/速度 | N/A |
| 环境动态信息 | 例如障碍物位置、速度 | 可选 |
2.1.3 非对称架构的优势
这种设计形成了以下数据流:
code复制Environment ──> observation ──> Actor ──> action ──> Environment
└─> privileged_observation ──> Critic ──> value
其优势在于:
- Actor只需依赖真实机器人可获取的传感器数据,确保策略可在真实环境中部署
- Critic利用更多信息计算更准确的价值函数,加速训练过程
- 特别适合sim-to-real迁移学习场景
3. RolloutStorage实现详解
RolloutStorage是PPO算法中用于存储和管理采样轨迹的核心组件。
3.1 类结构与初始化
python复制class RolloutStorage:
class Transition:
def __init__(self):
self.observations = None
self.critic_observations = None
self.actions = None
self.rewards = None
self.dones = None
self.values = None
self.actions_log_prob = None
self.action_mean = None
self.action_sigma = None
self.hidden_states = None
def clear(self):
self.__init__()
def __init__(self, num_envs,
