域随机化¶
本页仅描述仓库中已注册任务的域随机化现状。所有结论都来自代码;不从设计意图推断任何内容。
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。
状态结论¶
reset/interval 随机化由 owner YAML 中的
events:manager term 声明,并由 manager 生命周期统一执行。Manager-Based owner 通过 Hydra command/event term 声明 reset 行为。G1 motion reset 扰动归 device-resident
MotionCommandCfg所有,WBT 另加EventTermCfgreset 与 interval term。TensorResetRandomizationPayload(torch-first 的 reset payload)表达 curated reset terms;backend 必须在对应的 host/device 平面上声明每个请求 term,并拥有其派生量重算义务。MotrixBackend目前支持base_mass_delta、base_com_offset、kp、kd和 interval push;并且它要求在初始化期间所有模型 actuator 都是 position actuator。固定 mesh/tool identity 由
env.fixed_model_variants声明;reset-time geometry 字段仍位于 backend capability 声明之后,且不会改变该 identity。
统一性评估表¶
Task |
声明路径 |
结构化形式? |
reset 形式 |
interval 形式 |
Code |
|---|---|---|---|---|---|
|
Hydra |
是:owner YAML 声明 reset event |
root-state reset + |
无 |
|
|
Hydra |
是:Hydra |
root-state reset + 经 |
无 |
|
|
Hydra command term |
是:Hydra device-resident |
motion frame、root pose/velocity 与 joint-position 采样 |
无 |
|
各任务域随机化清单¶
Task |
当前已实现的 reset 域随机化 |
当前已实现的 interval 域随机化 |
默认状态 |
|---|---|---|---|
|
经 |
无 |
event term 在 |
|
经 |
无 |
mujoco owner 默认启用 kp/kd;motrix/mjwarp owner 默认禁用 |
|
Motion-command frame 采样;root 位姿扰动 |
无 |
base owner 中 |
当前 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。
相关任务¶
G1 Motion Tracking:开启 DR 前先确认 motion 资产和 replay。
有关后端能力边界,请参阅 Domain Randomization Contract。