域随机化

本页仅描述仓库中已注册任务的域随机化现状。所有结论都来自代码;不从设计意图推断任何内容。

Manager-Based event term 是唯一 DR 声明路径:

  • Manager-Based(Compatible)任务:reset / interval 随机化通过 owner YAML 中的 Hydra events: manager term 声明;reset 生命周期的 event 在 reset 时采样,interval 生命周期的 event 在 step 之间施加扰动。例如 src/unilab/conf/ppo/task/go2_joystick_flat/base.yaml 的 events: 段。

这三条路径对应三个生命周期类别:

  • construction 生命周期 identity:固定 model/tool variant 及其 immutable env assignment,只在 backend construction/materialization 期间生效。

  • reset 生命周期 DR:不改变模型 identity,只在同一模型内改变参数或 reset 状态的项,例如 base_mass_delta、base_com_offset、gravity、kp、kd,以及 backend 显式声明支持的 geometry/model 字段。

  • interval 生命周期 DR:step 之间的外部扰动,例如 push。

状态结论

  1. reset/interval 随机化由 owner YAML 中的 events: manager term 声明,并由 manager 生命周期统一执行。

  2. Manager-Based owner 通过 Hydra command/event term 声明 reset 行为。G1 motion reset 扰动归 device-resident MotionCommandCfg 所有,WBT 另加 EventTermCfg reset 与 interval term。

  3. TensorResetRandomizationPayload(torch-first 的 reset payload)表达 curated reset terms;backend 必须在对应的 host/device 平面上声明每个请求 term,并拥有其派生量重算义务。

  4. MotrixBackend 目前支持 base_mass_delta、base_com_offset、kp、kd 和 interval push;并且它要求在初始化期间所有模型 actuator 都是 position actuator。

  5. 固定 mesh/tool identity 由 env.fixed_model_variants 声明;reset-time geometry 字段仍位于 backend capability 声明之后,且不会改变该 identity。

统一性评估表

Task

声明路径

结构化形式?

reset 形式

interval 形式

Code

Go2JoystickFlat

Hydra events: term

是:owner YAML 声明 reset event

root-state reset + pd_gains kp/kd

无

src/unilab/conf/ppo/task/go2_joystick_flat/base.yaml

G1WalkFlat

Hydra events: term

是:Hydra EventTermCfg + Manager-Based reset term

root-state reset + 经 pd_gains 的 kp/kd

无

g1/manager_terms.py

G1MotionTracking

Hydra command term

是:Hydra device-resident MotionCommandCfg + Manager-Based command reset

motion frame、root pose/velocity 与 joint-position 采样

无

motion_tracking/common/manager_terms.py

各任务域随机化清单

Task

当前已实现的 reset 域随机化

当前已实现的 interval 域随机化

默认状态

Go2JoystickFlat

经 reset_root_state_uniform 的 base xy/yaw 与 base qvel;command 采样;经 pd_gains 的 kp/kd

无

event term 在 src/unilab/conf/ppo/task/go2_joystick_flat/base.yaml 中默认声明并启用

G1WalkFlat

经 reset_root_state_uniform 的 base xy/yaw 与 base qvel;带平面死区的 command 采样;gait_phase 采样;经 pd_gains 的 kp/kd 随机化

无

mujoco owner 默认启用 kp/kd;motrix/mjwarp owner 默认禁用

G1MotionTracking

Motion-command frame 采样;root 位姿扰动 x/y/z/roll/pitch/yaw;root 速度扰动 x/y/z/roll/pitch/yaw;通过 public entity soft limit clip 的关节位置噪声;action-manager 状态 reset

无

base owner 中 pose_range、velocity_range 与 joint_position_range 默认有非零扰动

当前 DR 的能力与边界

owner YAML 声明 event term;ResetStateTransaction 组合 selected rows 并校验 shape;UniSim backend 声明并应用 curated payload。task-specific reset 采样仍由 command/event term 拥有:

  • G1MotionTracking 的 pose / velocity / joint noise 归 manager command 所有。

  • 固定 model/tool identity 是 construction-time,不是 reset-time DR。

未显式声明支持的后端能力会 fail closed;不存在过滤或静默回退。

Reset gravity 用法

gravity 是 reset 生命周期 DR:每次 reset 按选中环境采样完整的 MuJoCo gravity 向量 (gx, gy, gz),并通过 TensorResetRandomizationPayload.gravity 提交。请通过调用 randomize_physics_scene_gravity 的 reset EventTermCfg 配置;不支持的后端 fail closed。建议从较小倾斜范围开始,避免早期训练任务不可学习。

Interval push 用法

Manager-Based 任务通过 env.events.push_robot term 配置周期推扰,使用 push_by_setting_velocity,并按轴声明速度范围。

固定 Model/Tool Variant 边界

Manager-Based owner 在 environment config 中声明 fixed variants。Task 拥有 名称、source descriptor 和最终 assignment,但不编译模型:

env:
  fixed_model_variants:
    variants:
      - name: tool_a
        source_model_file: tools/tool_a.xml
      - name: tool_b
        source_model_file: tools/tool_b.xml
    # 省略 explicit_variant_names 时使用确定性 round-robin assignment。
    explicit_variant_names: [tool_a, tool_b]

Manager factory 会把它物化为形状 (num_envs,)、只读的 int32 assignment; 空 explicit list 选择 round-robin。Assignment 是 task identity:backend construction 后固定,reset event 不会重新采样。

UniLab 不打开、解析或编译 source_model_file,也不持有 MjSpec、MjModel、 mjbatch 或 Warp object。UniSim adapter 负责 source realization,并必须声明 supports_fixed_variants。在该 contract 落地前,配置 fixed variants 的 task 会在 env 构造前 fail closed。无法投影到统一 public state/action/sensor layout 的 heterogeneous variants 同样 fail closed。

Reset-time model-field DR 保持在已选 identity 内。其 canonical 或 per-env 基线来自 backend 声明的 get_reset_term_default(term) contract;Manager term 不会重新编译场景,也不会把 canonical 基线套到每个工具上。只随机化模型表的一 部分时,未写入的列保留所选环境的 variant 基线。

所有权边界以及 MJWarp/CPU executor 分工记录在 ADR-0010。

相关任务

有关后端能力边界,请参阅 Domain Randomization Contract。