本页面向正在基于 atom01 人形机器人 MuJoCo 模型构建强化学习训练管线的开发者,聚焦从 MJCF 模型配置到 RL 训练闭环的集成要点。内容涵盖观测空间构建、动作空间映射、奖励信号来源、终止条件设定、域随机化策略,以及平地与地形双场景的训练编排。掌握这些要点,可将前述执行器动力学、传感器系统与稳定性优化知识串联为完整的策略训练框架。
Sources: atom01.xml, atom01_terrain.xml
RL 闭环架构与数据流
atom01 的 MJCF 模型在设计上呈现出鲜明的强化学习友好特征:23 维直接扭矩控制接口免除了中间伺服层,88 维传感器输出覆盖了本体感觉与空间姿态的全量信息,1 kHz 仿真步长则为控制频率与策略推理频率的解耦提供了基础。一个典型的训练闭环可抽象为以下数据流:
graph LR
A[MuJoCo Physics<br/>timestep=0.001] -->|sensordata 88维| B[观测预处理<br/>归一化/滤波/降维]
B -->|obs| C[策略网络 πθ<br/>输出 action]
C -->|a ∈ [-1,1]²³| D[动作缩放<br/>映射至 ±200 N·m]
D -->|ctrl| E[23× Motor<br/>理想力源]
E -->|τ| A
F[物理衍生量<br/>qpos/qvel/contact] -->|reward| G[PPO/SAC<br/>梯度更新]
C -.->|log_prob| G
该架构的核心价值在于最小中间层干预:策略网络输出的动作向量经线性缩放后直接注入 mjData.ctrl,传感器数据则从 mjData.sensordata 按声明顺序扁平抽取,无需复杂的协议转换或逆运动学解算。这种端到端设计使得训练框架(如 Gymnasium、Isaac Gym 或 MJX)能够以极低耦合度接入 MuJoCo 后端。
Sources: atom01.xml, atom01.xml
观测空间构建与降维策略
MJCF 的 <sensor> 段落为强化学习提供了丰富的原始感知数据。若将 mjData.sensordata 数组中所有标量维度展开,原始观测向量共 88 维,其构成如下表所示:
| 传感器分组 | 传感器类型 | 标量维度 | 物理含义 | RL 建议 |
|---|---|---|---|---|
| 本体感觉 | actuatorpos |
23 | 关节位置 (rad) | 必选:策略感知自身构型 |
| 本体感觉 | actuatorvel |
23 | 关节速度 (rad/s) | 必选:提供动态状态 |
| 本体感觉 | actuatorfrc |
23 | 执行器力矩 (N·m) | 推荐:用于能量惩罚与接触推断 |
| IMU | framequat |
4 | 躯干姿态四元数 | 必选:平衡控制核心 |
| IMU | framepos |
3 | 全局位置 (m) | 可选:仅当任务需绝对定位 |
| IMU | gyro |
3 | 局部角速度 (rad/s) | 必选:与四元数互补 |
| IMU | velocimeter |
3 | 局部线速度 (m/s) | 必选:速度跟踪任务必需 |
| IMU | accelerometer |
3 | 局部线加速度 (m/s²) | 推荐:可用于摔倒检测 |
| IMU | magnetometer |
3 | 磁场方向 | 通常剔除:室内仿真无意义 |
在 Locomotion 任务的标准实践中,通常剔除 magnetometer(3 维)与 framepos(3 维),得到 82 维紧凑观测空间。若进一步出于计算效率考虑剔除 actuatorfrc(23 维)与 accelerometer(3 维),则降至 56 维,但会损失力控鲁棒性。值得注意的是,所有执行器传感器均携带 user="13" 标记,这一统一元数据便于下游训练框架按固定步长批量抽取观测切片。
观测归一化应充分利用模型文件中已编码的物理边界。关节位置可使用 MJCF 中声明的 range 上下限映射至 [-1, 1];关节速度可参考 URDF 中的 velocity 限位(主关节 25 rad/s,踝部与手臂 8 rad/s)进行缩放;IMU 角速度与线速度则可依据各自的 cutoff 阈值(34.9 rad/s 与 30 m/s)做饱和归一化。
Sources: atom01.xml, atom01.urdf
动作空间设计与力控接口
atom01 的动作空间由 23 个 <motor> 执行器隐式定义,其控制语义为理想直接扭矩控制。所有电机统一采用 gear="1",意味着策略输出的标量直接等价于关节轴扭矩(单位 N·m)。在 RL 框架中,通常将策略网络的输出通过 tanh 激活后映射至 [-1, 1],再线性缩放至 MJCF 定义的 ctrlrange="[-200, 200]"。
然而,这一统一量程与 URDF 中定义的硬件级 effort 限位存在显著差距:
| 关节分组 | URDF effort 上限 | MJCF ctrlrange | 差距倍数 | RL 工程建议 |
|---|---|---|---|---|
| 大腿/躯干/膝部 | 120 N·m | ±200 N·m | ~1.67× | 训练阶段保留 ±200,部署前施加软裁剪 |
| 踝部关节 | 27 N·m | ±200 N·m | ~7.4× | 必须在训练代码中额外限制 |
| 手臂关节 | 27 N·m | ±200 N·m | ~7.4× | 同上,避免非物理输出 |
对于追求 Sim-to-Real 迁移的开发者,推荐在训练环境中以 URDF 的 effort 限位作为动作软约束(如通过动作惩罚项),而非直接修改 MJCF 的 ctrlrange。这样可以保留 MJCF 在探索阶段给予策略的宽松动力学空间,同时通过奖励塑形引导策略学习硬件可执行的力矩分布。若策略直接输出关节位置指令而非力矩指令,则需要在训练框架中额外实现 PD 伺服环,将位置误差映射为力矩;此时 MJCF 的 <motor> 依然作为底层执行器,但策略的语义从 "期望力矩" 变为 "期望位置"。
Sources: atom01.xml, atom01.urdf
奖励信号来源与终止条件设计
MJCF 模型本身不定义奖励函数,但其传感器配置与刚体状态为奖励设计提供了完整的物理信号来源。以下信号可直接从 mjData 或传感器数据中导出:
| 奖励信号 | 数据来源 | 推导方式 | 典型用途 |
|---|---|---|---|
| 躯干高度 | framepos (Z轴) 或 qpos[2] |
直接读取 | 保持站立高度 |
| 躯干水平速度 | velocimeter (X/Y轴) |
直接读取 | 速度跟踪 |
| 朝向误差 | framequat → 欧拉角 |
四元数转 Roll/Pitch | 保持直立 |
| 关节能量 | actuatorfrc × actuatorvel |
逐关节乘积求和 | 能耗惩罚 |
| 足端高度 | body_xpos (踝部连杆) |
读取刚体全局位置 | 步态周期性 |
| 足端接触力 | mjData.contact + efc_force |
接触雅可比映射 | 接触奖励 |
终止条件(Termination)的设计应充分利用模型几何参数。以平地场景为例,base_link 的初始高度为 0.75 m,若躯干质心高度跌落至 0.4 m 以下即可判定摔倒终止;framequat 的 Roll 或 Pitch 分量超过 45° 亦可作为姿态失稳条件。此外,虽然 MJCF 中所有关节均设有限位,但当策略输出接近饱和力矩时,关节可能以极高速度撞击限位,建议在训练代码中监测关节速度突变(actuatorvel 的绝对值突增)作为辅助终止信号。
Sources: atom01.xml, atom01.xml
域随机化与 Sim-to-Real 迁移
从 MJCF 到实体机器人的迁移面临两类核心差异:一是动力学参数(质量、摩擦、阻尼)的不确定性,二是控制接口的量程差异。以下参数可直接在 MJCF 层面进行域随机化,以提升策略的鲁棒性:
| 随机化目标 | MJCF 参数 | 基线值 | 建议随机范围 | 物理意义 |
|---|---|---|---|---|
| 关节阻尼 | damping (default class) |
0.01 | [0.005, 0.02] | 模拟关节老化与润滑差异 |
| 库仑摩擦 | frictionloss (leg/arm/waist) |
0.01 | [0.0, 0.03] | 模拟减速器摩擦变化 |
| 踝部摩擦 | frictionloss (ankle实例) |
0.05 | [0.02, 0.08] | 足端被动稳定性的个体差异 |
| 电机惯量 | armature |
0.01 | [0.005, 0.03] | 模拟不同电机转子惯量 |
| 接触摩擦 | friction (geom default) |
0.9 / 0.2 / 0.2 | [0.7, 1.1] / [0.1, 0.3] / [0.1, 0.3] | 地面材质变化 |
| 连杆质量 | mass (body/inertial) |
逐连杆不同 | ±10% ~ ±20% | 制造公差与负载变化 |
| 传感器噪声 | noise (actuatorfrc/IMU) |
1e-3 ~ 0.005 | 0.5× ~ 2× 基线 | 模拟不同批次传感器精度 |
特别需要注意的是 关节运动范围差异。MJCF 中多个关节的范围与 URDF 不一致,例如 left_thigh_pitch_joint 在 MJCF 中为 [-2.5, 0.8],而 URDF 为 [-1.57, 1.57]。若策略充分利用了 MJCF 的扩展范围(如更大的后摆角度),则在实体机器人上将触发硬件限位保护。推荐在训练后期将关节动作裁剪至 URDF 限位内,或直接用 URDF 的 lower/upper 作为硬约束。此外,MJCF 中机器人连杆采用完整网格碰撞(mesh geom),而 URDF 中部分连杆仅使用简化box碰撞或已注释掉碰撞几何,这意味着在 MuJoCo 中训练的接触敏感策略可能在 Gazebo 中表现出不同的接触动力学。
Sources: atom01.xml, atom01.xml, atom01.urdf
双场景训练策略:平地与地形
项目提供了 atom01.xml(平地)与 atom01_terrain.xml(地形)两个场景文件,二者在传感器与执行器配置上逐字节一致,但在世界几何与初始条件上存在关键差异,为课程学习(Curriculum Learning)提供了天然的两阶段训练路径:
| 对比维度 | 平地场景 | 地形场景 | 训练策略含义 |
|---|---|---|---|
| 地面几何 | plane 无限平面 |
hfield PNG 高度场 |
地形引入不规则接触法向与多面片冗余约束 |
| 接触法向 | 恒定 +Z | 随局部曲面变化 | 地形场景要求策略具备坡度补偿能力 |
| 初始高度 | 0.75 m |
2.75 m |
地形场景包含更长的自由落体冲击,落地稳定性要求更高 |
| 地面类型 | 无纹理平面 | 基于 terrain_hfield.png 的起伏表面 |
地形训练可促进策略泛化至非结构化地面 |
建议的训练编排遵循由简入繁原则:首先在平地场景下训练基础行走策略,待奖励曲线收敛后,将策略权重迁移至地形场景进行微调。迁移时应注意调整终止条件中的高度阈值——地形场景的绝对地面高度不再是 0,而是随 hfield 的局部高程变化。若训练框架以全局 framepos[2] 判断摔倒,需引入高度场查询或改用躯干相对地面的局部高度,以避免因坡面自然高程导致的误判。
Sources: atom01.xml, atom01_terrain.xml
并行环境配置与性能边界
强化学习通常需要数千个并行环境收集样本。atom01 的 MJCF 通过 size 元素预分配了 njmax="5000" 与 nconmax="1000" 的内存池,这为中等规模的并行仿真提供了物理基础。njmax 定义了约束雅可比矩阵的最大非零元数量,对于 23 个主动关节加 6 自由度浮动基座的模型,单环境在双足支撑阶段的典型约束规模远低于 5000;nconmax="1000" 则允许在极端情况下(如机器人倒地后全身多部位同时接触地面)维持仿真不崩溃。
控制频率与仿真步长的解耦是 RL 训练的关键工程决策。MJCF 的 timestep="0.001" 对应 1 kHz 物理仿真频率,而策略网络通常以 50 Hz 或 100 Hz 运行。这意味着每两次策略推理之间需要执行 10~20 次 mj_step(),即**控制抽取率(Control Decimation)**为 10~20。过高的抽取率会引入仿真-控制延迟,可能破坏稳定性;过低则浪费计算资源。对于 atom01 这类中等复杂度的双足模型,50 Hz 策略频率配合 20 步抽取是较为均衡的起点。
iterations="100" 的 PGS 求解器配置在单步单环境下计算开销可控,但在千级并行环境中,每步 100 次迭代将成为主要算力瓶颈。若使用 GPU 并行仿真(如 MJX 或 Isaac Gym),需评估将 PGS 迭代次数降至 50~80 是否仍能满足双足支撑的接触收敛要求,或在平坦地面上切换至更快的 CG 求解器。但需注意,如 仿真稳定性优化指南 所述,condim="4" 的摩擦锥问题在 CG 求解器下存在已知 corner case,切换前应在平地场景完成充分回归测试。
Sources: atom01.xml
阅读导航
掌握强化学习训练集成要点后,建议根据当前开发阶段深入以下关联主题:
- 若需调整观测空间的噪声特性或传感器精度,请回顾 传感器系统与 IMU 配置,理解
noise与cutoff参数的工程含义; - 若需修改动作接口的量程或执行器动力学,请查阅 执行器与控制接口,明确
gear、ctrlrange与关节被动参数的耦合关系; - 若训练中出现发散、穿透或高频振荡,请参考 仿真稳定性优化指南 的系统诊断流程;
- 若计划将策略从 MuJoCo 迁移至 ROS 2 / Gazebo 或实体硬件,请阅读 URDF 到 MJCF 的映射与差异 与 与 ROS 2 / Gazebo 的集成使用。