Skip to content

DR 声明式模型字段声明层:requires_model_fields 风格的 per-term 声明与需求驱动展开(roadmap #1252 第 2 点遗留) #1498

Description

@TATP-233

来自 roadmap #1252 第 2 点的遗留部分(该 roadmap 已检查关闭)。

现状(已落地部分)

mjlab 的 expand_model_fields() 机制已移植到 unisim mjwarp 后端(UniLab PR #1401,后随 backend 抽取进入 unisim):

  • unisim/backend/mjwarp/randomization.py:47expand_model_fields() 把声明字段 tile 成 per-world (nworld, ...) Warp 数组,带分级重算(SET_CONST_FIELDS / SET_CONST_0_FIELDS / NO_RECOMPUTE_FIELDS);
  • unisim/backend/mjwarp/backend.py:250 — 构造期冷路径展开,先于 CUDA graph capture,后续 DR 写入全部原地 assign,graph-safe;
  • 写入路径 _apply_reset_randomizationbackend.py:1293):host mirror → 整数组上传 → set_const* 重算;mujoco CPU 后端经 mujoco_uni native 字段注册表天然 per-env。

遗留缺口(本 issue 的范围)

  1. 声明式 per-term 字段声明层缺失:mjlab 的 @requires_model_fields(*fields, recompute=...)(mjlab managers/event_manager.py:70)让每个 DR term 在定义处声明所需模型字段,env 收集后按需展开;当前 unisim 无条件展开硬编码的 EXPANDED_MODEL_FIELDS 超集(randomization.py:25-44),DR 关闭时也付内存成本,字段→重算级别映射硬编码在 backend 而非 term 声明处。
  2. 字段 schema 封闭且偏窄unisim/dr/types.py 的 11 个 RESET_TERM_* 常量之外,新增字段(如 dof_frictionlossdof_dampingjnt_stiffnessqpos0、tendon/material 等)需要同时动 types、各 backend 翻译层、mujoco_uni native 注册表和 src/unilab/dr/dr_utils.py;mjlab 的 _randomize_model_field 是通用引擎。
  3. 重算分级较粗:3 档 vs mjlab 4 档(含 set_const_fixed)。
  4. per-world gravity:mujoco 支持,mjwarp fail-closed(backend.py:133 类 docstring 明示)。

交付边界

  • 在 unisim 侧引入 per-term 声明与需求驱动展开(unisim/dr/types.py + mjwarp backend),UniLab src/unilab/dr/ 的 term/provider 层对接声明;保持 DomainRandomizationCapabilities fail-closed 过滤契约不变;
  • 测试沿用 tests/base/test_mjwarp_dr.py 的真实 CUDA 效应测试模式(per-world 隔离、物理效应、跨后端分布对照)。

预计规模:接近 roadmap 估计上限(约 15 文件 / 800 行),跨 unisim + UniLab 两仓,unisim 侧先行发版。

参照:mjlab v1.6.0 src/mjlab/envs/mdp/dr/src/mjlab/sim/randomization.py(本机 /home/user/ws/simulator/mjlab)。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions