🤖 roboto_origin_03 Wiki
首页 / URDF / 强化学习训练集成要点

本页面向正在基于 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

阅读导航

掌握强化学习训练集成要点后,建议根据当前开发阶段深入以下关联主题: