From e2b8a98a0d644ef56f4c0a3cc8a1817b4c64a450 Mon Sep 17 00:00:00 2001 From: TATP-233 Date: Tue, 15 Sep 2026 18:15:45 +0800 Subject: [PATCH] feat!: move G1 walk rough downstream --- .../en/2-user_guide/2-algorithms/3-sac.md | 1 - .../en/2-user_guide/4-tasks/1-locomotion.md | 2 +- .../5-domain_randomization/0-index.md | 3 - .../en/2-user_guide/6-terrain/1-procedural.md | 19 +++--- .../6-terrain/2-heightfield_import.md | 12 ++-- .../1-architecture/4-scene_composition.md | 8 +-- .../source/en/5-reference/5-support_matrix.md | 1 - .../zh_CN/2-user_guide/2-algorithms/3-sac.md | 1 - .../2-user_guide/4-tasks/1-locomotion.md | 2 +- .../5-domain_randomization/0-index.md | 3 - .../2-user_guide/6-terrain/1-procedural.md | 17 ++---- .../6-terrain/2-heightfield_import.md | 10 ++-- .../1-architecture/4-scene_composition.md | 8 +-- .../zh_CN/5-reference/5-support_matrix.md | 1 - scripts/benchmark/env/benchmark_env_step.py | 56 ------------------ scripts/tools/support_matrix.py | 12 ++-- .../assets/robots/g1/hfields/hfield.png | Bin 169681 -> 0 bytes src/unilab/assets/robots/g1/scene_rough.xml | 45 -------------- .../conf/sac/task/g1_walk_rough/motrix.yaml | 47 --------------- .../conf/sac/task/g1_walk_rough/mujoco.yaml | 23 ------- src/unilab/tasks/locomotion/g1/__init__.py | 4 -- src/unilab/tasks/migration_matrix.py | 1 - .../test_replay_buffer_placement_benchmark.py | 1 - tests/config/test_locomotion_params.py | 17 ------ .../locomotion/g1/test_g1_owner_contract.py | 36 ----------- tests/envs/test_env_configs.py | 12 ---- tests/scripts/test_train_script_configs.py | 1 - tests/scripts/test_train_scripts.py | 7 --- 28 files changed, 37 insertions(+), 313 deletions(-) delete mode 100644 src/unilab/assets/robots/g1/hfields/hfield.png delete mode 100644 src/unilab/assets/robots/g1/scene_rough.xml delete mode 100644 src/unilab/conf/sac/task/g1_walk_rough/motrix.yaml delete mode 100644 src/unilab/conf/sac/task/g1_walk_rough/mujoco.yaml diff --git a/docs/sphinx/source/en/2-user_guide/2-algorithms/3-sac.md b/docs/sphinx/source/en/2-user_guide/2-algorithms/3-sac.md index 1d945c93f..6f3f2ff3b 100644 --- a/docs/sphinx/source/en/2-user_guide/2-algorithms/3-sac.md +++ b/docs/sphinx/source/en/2-user_guide/2-algorithms/3-sac.md @@ -20,7 +20,6 @@ CPU and XPU training are unsupported; there is no alternate replay pipeline. ```bash uv run train --algo sac --task g1_walk_flat --sim mujoco -uv run train --algo sac --task g1_walk_rough --sim motrix training.no_play=true ``` ## Key Fields diff --git a/docs/sphinx/source/en/2-user_guide/4-tasks/1-locomotion.md b/docs/sphinx/source/en/2-user_guide/4-tasks/1-locomotion.md index e76ab2c67..633bc1ce2 100644 --- a/docs/sphinx/source/en/2-user_guide/4-tasks/1-locomotion.md +++ b/docs/sphinx/source/en/2-user_guide/4-tasks/1-locomotion.md @@ -7,7 +7,7 @@ Manager-Based runtime. Unitree production variants live in the downstream ## Core reference tasks - Go2 joystick: `go2_joystick_flat` -- G1 walking: `g1_walk_flat`, `g1_walk_rough` +- G1 walking: `g1_walk_flat` - G1 motion tracking reference profiles: see {doc}`2-motion_tracking` ```bash diff --git a/docs/sphinx/source/en/2-user_guide/5-domain_randomization/0-index.md b/docs/sphinx/source/en/2-user_guide/5-domain_randomization/0-index.md index c4f674973..15522dd4a 100644 --- a/docs/sphinx/source/en/2-user_guide/5-domain_randomization/0-index.md +++ b/docs/sphinx/source/en/2-user_guide/5-domain_randomization/0-index.md @@ -33,7 +33,6 @@ These three paths correspond to three lifecycle classes: | --- | --- | --- | --- | --- | --- | | `Go2JoystickFlat` | Hydra `events:` terms | Yes: owner YAML declares reset events | root-state reset + `pd_gains` kp/kd | none | `src/unilab/conf/ppo/task/go2_joystick_flat/base.yaml` | | `G1WalkFlat` | Hydra `events:` terms | Yes: Hydra `EventTermCfg` + Manager-Based reset terms | root-state reset + kp/kd via `pd_gains` | none | `g1/manager_terms.py` | -| `G1WalkRough` | Hydra `events:` terms | Yes: same Manager-Based event terms as `G1WalkFlat` | root-state reset + kp/kd via `pd_gains` | none | `g1/manager_terms.py` | | `G1MotionTracking` | Hydra command term | Yes: Hydra `MotionCommandCfg` + Manager-Based command reset | motion frame, root pose/velocity, and joint-position sampling | none | `motion_tracking/common/manager_terms.py` | | `G1WBTObs` | Hydra `events:` terms | Yes: same motion command + Hydra `EventTermCfg` | motion reset plus mass/COM/PD/friction/encoder-bias events | interval velocity kick | `motion_tracking/g1/manager_terms.py` | | `AllegroInhandRotation` | Hydra `events:` terms | Yes: Hydra `EventTermCfg` + Manager-Based reset term | entity-scoped hand/ball reset | none | `allegro_inhand/manager_terms.py` | @@ -45,7 +44,6 @@ These three paths correspond to three lifecycle classes: | --- | --- | --- | --- | | `Go2JoystickFlat` | base xy/yaw and base qvel via `reset_root_state_uniform`; command sampling; kp/kd via `pd_gains` | none | event terms declared and enabled by default in `src/unilab/conf/ppo/task/go2_joystick_flat/base.yaml` | | `G1WalkFlat` | base xy/yaw and base qvel via `reset_root_state_uniform`; command sampling with a planar dead zone; `gait_phase` sampling; kp/kd randomization via `pd_gains` | none | kp/kd enabled on mujoco owners by default; disabled on motrix/mjwarp owners | -| `G1WalkRough` | Same as `G1WalkFlat` (shared owner bases, rough scene) | none | Same defaults as `G1WalkFlat` | | `G1MotionTracking` | Motion-command frame sampling; root pose perturbation `x/y/z/roll/pitch/yaw`; root velocity perturbation `x/y/z/roll/pitch/yaw`; joint-position noise clipped through the public entity soft limits; action-manager state reset | none | `pose_range`, `velocity_range`, and `joint_position_range` have non-zero perturbations in the base owner | | `G1WBTObs` | Same motion reset plus base mass, base COM, PD gain, foot friction, and encoder-bias event terms | `push_by_setting_velocity` | The WBT owner explicitly enables all listed event terms; unsupported capabilities raise rather than fall back | | `AllegroInhandRotation` | Entity-scoped hand/ball reset; an explicitly configured grasp cache is sampled, otherwise `null` explicitly selects the model home pose; optional `joint_noise`, `ball_velocity_noise`, and `ball_z_offset` | none | owner YAML explicitly selects the home pose and zero reset noise; a configured missing or malformed cache fails closed | @@ -132,7 +130,6 @@ The ownership boundary and MJWarp/CPU executor split are recorded in ## Related Tasks - {doc}`G1 Motion Tracking <../4-tasks/2-motion_tracking>`: confirm motion assets and replay first before enabling DR. -- {doc}`Go2 Rough Terrain <../4-tasks/1-locomotion>`: common items are mass, COM, friction, and push. For the backend capability boundary, see {doc}`Domain Randomization Contract `. diff --git a/docs/sphinx/source/en/2-user_guide/6-terrain/1-procedural.md b/docs/sphinx/source/en/2-user_guide/6-terrain/1-procedural.md index ec3b2bf79..5c8bc8b12 100644 --- a/docs/sphinx/source/en/2-user_guide/6-terrain/1-procedural.md +++ b/docs/sphinx/source/en/2-user_guide/6-terrain/1-procedural.md @@ -28,10 +28,10 @@ env: seed: 42 ``` -UniLab does not retain a procedural-terrain production owner. The retained -`g1_walk_rough` task uses the static-heightfield form of the same cold-path -scene contract, while generator composition itself is covered by core terrain -and backend materialization tests. +UniLab does not retain a procedural-terrain production owner. Generator +composition and backend materialization are covered by core terrain and +materialization tests; task owners that enable the capability carry their own +training evidence. ## Materialization boundary @@ -47,15 +47,10 @@ During `registry.make(...)`: Step and reset never parse robot XML or inspect asset metadata. They consume cached IDs and public backend capabilities. -## Example +## Owner integration -Use the retained rough-scene reference task: - -```bash -uv run train --algo sac --task g1_walk_rough --sim mujoco training.no_play=true -``` - -Custom owners can tune the terrain grid and seed through Hydra: +Select a task owner that declares `env.scene.terrain`, then tune the terrain +grid and seed through Hydra: ```text env.scene.terrain.generator.num_rows=4 diff --git a/docs/sphinx/source/en/2-user_guide/6-terrain/2-heightfield_import.md b/docs/sphinx/source/en/2-user_guide/6-terrain/2-heightfield_import.md index 4514f4546..b5c3fd06c 100644 --- a/docs/sphinx/source/en/2-user_guide/6-terrain/2-heightfield_import.md +++ b/docs/sphinx/source/en/2-user_guide/6-terrain/2-heightfield_import.md @@ -1,25 +1,23 @@ # Heightfield Import Heightfield terrain is configured through `SceneCfg` and the terrain generator, -then materialized by the backend on the init path. The committed user-facing -example is the retained `g1_walk_rough` scene. +then materialized by the backend on the init path. Core tests exercise the +contract with a generated heightfield scene. ## Files To Read - `src/unilab/terrains/heightfield_terrains.py` - `unisim.terrain.generator` -- `src/unilab/assets/robots/g1/scene_rough.xml` - `src/unilab/tasks/locomotion/common/height_scan.py` +- `tests/utils/test_xml_utils.py` - `unisim.backend.mujoco.xml` - `unisim.backend.motrix.scene` ## Smoke Commands ```bash -uv run train --algo sac --task g1_walk_rough --sim mujoco \ - algo.max_iterations=2 \ - algo.num_envs=64 \ - training.no_play=true +uv run pytest tests/utils/test_xml_utils.py \ + -k materialize_mujoco_hfield_attached_scene ``` Height scan IDs and offsets are cached during env initialization; hot paths call diff --git a/docs/sphinx/source/en/4-developer_guide/1-architecture/4-scene_composition.md b/docs/sphinx/source/en/4-developer_guide/1-architecture/4-scene_composition.md index b76e9fe2f..bd0fc12af 100644 --- a/docs/sphinx/source/en/4-developer_guide/1-architecture/4-scene_composition.md +++ b/docs/sphinx/source/en/4-developer_guide/1-architecture/4-scene_composition.md @@ -101,14 +101,14 @@ Disallowed on hot paths: - Probing backend-private scene methods instead of using explicit contracts. - Regenerating terrain after env construction. -## Go2 Rough Terrain Evidence +## Terrain Contract Evidence -The current procedural terrain user-facing path is Go2 rough terrain: +The core repository keeps the terrain contract and its materialization tests, +but it does not own a production rough-terrain task: -- Task owner: `src/unilab/tasks/locomotion/g1/manager_terms.py` - Terrain generator: `unisim.terrain.generator` - MuJoCo materializer: `unisim.backend.mujoco.xml` - Motrix materializer: `unisim.backend.motrix.scene` -- Owner YAMLs: `src/unilab/conf/sac/task/g1_walk_rough/{mujoco,motrix}.yaml` +- Contract coverage: `tests/utils/test_xml_utils.py` User instructions are in {doc}`../../2-user_guide/6-terrain/1-procedural`. diff --git a/docs/sphinx/source/en/5-reference/5-support_matrix.md b/docs/sphinx/source/en/5-reference/5-support_matrix.md index 790990207..2131d83bd 100644 --- a/docs/sphinx/source/en/5-reference/5-support_matrix.md +++ b/docs/sphinx/source/en/5-reference/5-support_matrix.md @@ -94,7 +94,6 @@ rendering/playback paths remain unsupported. | APPO (torch) | `g1_flip_tracking` (G1 flip tracking) | Tested | - | Tested | - | - | - | - | - | | APPO (torch) | `allegro_inhand` (Allegro in-hand) | Tested | - | Tested | - | - | - | - | - | | SAC (torch) | `g1_walk_flat` (G1 walk flat) | Tested | Tested | Tested | Tested | Tested | Configured | Tested | - | -| SAC (torch) | `g1_walk_rough` (G1 walk rough) | Tested | - | Tested | - | - | - | - | - | | SAC (torch) | `g1_motion_tracking` (G1 motion tracking) | Tested | Configured | Tested | - | - | - | - | - | | SAC (torch) | `g1_flip_tracking` (G1 flip tracking) | Tested | - | Registered | - | - | - | - | - | | SAC (torch) | `g1_wbt_obs` (g1 wbt obs) | Tested | - | Registered | - | - | - | - | - | diff --git a/docs/sphinx/source/zh_CN/2-user_guide/2-algorithms/3-sac.md b/docs/sphinx/source/zh_CN/2-user_guide/2-algorithms/3-sac.md index 734044002..a03876dca 100644 --- a/docs/sphinx/source/zh_CN/2-user_guide/2-algorithms/3-sac.md +++ b/docs/sphinx/source/zh_CN/2-user_guide/2-algorithms/3-sac.md @@ -17,7 +17,6 @@ submission。CPU 与 XPU training 不受支持,也不存在第二套 replay pi ```bash uv run train --algo sac --task g1_walk_flat --sim mujoco -uv run train --algo sac --task g1_walk_rough --sim motrix training.no_play=true ``` ## 关键字段 diff --git a/docs/sphinx/source/zh_CN/2-user_guide/4-tasks/1-locomotion.md b/docs/sphinx/source/zh_CN/2-user_guide/4-tasks/1-locomotion.md index 39fdd518f..02a82561e 100644 --- a/docs/sphinx/source/zh_CN/2-user_guide/4-tasks/1-locomotion.md +++ b/docs/sphinx/source/zh_CN/2-user_guide/4-tasks/1-locomotion.md @@ -6,7 +6,7 @@ runtime。Unitree production 变体由下游 `unitree_rl_unilab` 包维护。 ## 核心参考任务 - Go2 joystick: `go2_joystick_flat` -- G1 walking: `g1_walk_flat`, `g1_walk_rough` +- G1 walking: `g1_walk_flat` - G1 motion tracking 参考配置:见 {doc}`2-motion_tracking` ```bash diff --git a/docs/sphinx/source/zh_CN/2-user_guide/5-domain_randomization/0-index.md b/docs/sphinx/source/zh_CN/2-user_guide/5-domain_randomization/0-index.md index fa8b5eda5..a44e8d707 100644 --- a/docs/sphinx/source/zh_CN/2-user_guide/5-domain_randomization/0-index.md +++ b/docs/sphinx/source/zh_CN/2-user_guide/5-domain_randomization/0-index.md @@ -29,7 +29,6 @@ Manager-Based event term 是唯一 DR 声明路径: | --- | --- | --- | --- | --- | --- | | `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` | -| `G1WalkRough` | Hydra `events:` term | 是:与 `G1WalkFlat` 相同的 Manager-Based event term | root-state reset + 经 `pd_gains` 的 kp/kd | 无 | `g1/manager_terms.py` | | `G1MotionTracking` | Hydra command term | 是:Hydra `MotionCommandCfg` + Manager-Based command reset | motion frame、root pose/velocity 与 joint-position 采样 | 无 | `motion_tracking/common/manager_terms.py` | | `G1WBTObs` | Hydra `events:` term | 是:同一 motion command + Hydra `EventTermCfg` | motion reset 加 mass/COM/PD/friction/encoder-bias event | interval velocity kick | `motion_tracking/g1/manager_terms.py` | | `AllegroInhandRotation` | Hydra `events:` term | 是:Hydra `EventTermCfg` + Manager-Based reset term | entity 范围的手/球 reset | 无 | `allegro_inhand/manager_terms.py` | @@ -41,7 +40,6 @@ Manager-Based event term 是唯一 DR 声明路径: | --- | --- | --- | --- | | `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 默认禁用 | -| `G1WalkRough` | 与 `G1WalkFlat` 相同(共享 owner base,rough 场景) | 无 | 与 `G1WalkFlat` 相同的默认值 | | `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` 默认有非零扰动 | | `G1WBTObs` | 同一 motion reset 加 base mass、base COM、PD gain、足端摩擦和 encoder-bias event term | `push_by_setting_velocity` | WBT owner 显式启用上述全部 event term;能力不支持时直接报错,不回退 | | `AllegroInhandRotation` | entity 范围的手/球 reset;显式配置 grasp cache 时进行采样,否则以 `null` 显式选择模型 home pose;可选 `joint_noise`、`ball_velocity_noise` 与 `ball_z_offset` | 无 | owner YAML 显式选择 home pose 与零 reset 噪声;配置的 cache 缺失或格式错误时 fail-closed | @@ -119,7 +117,6 @@ Reset-time model-field DR 保持在已选 identity 内。其 canonical 或 per-e ## 相关任务 - {doc}`G1 Motion Tracking <../4-tasks/2-motion_tracking>`:开启 DR 前先确认 motion 资产和 replay。 -- {doc}`Go2 Rough Terrain <../4-tasks/1-locomotion>`:常见的是 mass、COM、friction、push。 有关后端能力边界,请参阅 {doc}`Domain Randomization Contract `。 diff --git a/docs/sphinx/source/zh_CN/2-user_guide/6-terrain/1-procedural.md b/docs/sphinx/source/zh_CN/2-user_guide/6-terrain/1-procedural.md index b41fb1e6d..0d89145e5 100644 --- a/docs/sphinx/source/zh_CN/2-user_guide/6-terrain/1-procedural.md +++ b/docs/sphinx/source/zh_CN/2-user_guide/6-terrain/1-procedural.md @@ -26,9 +26,9 @@ env: seed: 42 ``` -UniLab 不保留 procedural-terrain production owner。保留的 `g1_walk_rough` -任务使用同一冷路径 scene contract 的静态 heightfield 形式;generator 组合 -本身由核心 terrain 与 backend materialization 测试覆盖。 +UniLab 不保留 procedural-terrain production owner。generator 组合与 backend +materialization 由核心 terrain 和 materialization 测试覆盖;启用该能力的 +task owner 需要自行持有训练证据。 ## 物化边界 @@ -44,15 +44,10 @@ UniLab 不保留 procedural-terrain production owner。保留的 `g1_walk_rough` step 和 reset 不解析机器人 XML,也不检查 asset metadata;它们只消费缓存 ID 和公开 backend capability。 -## 示例 +## Owner 集成 -使用保留的 rough-scene reference task: - -```bash -uv run train --algo sac --task g1_walk_rough --sim mujoco training.no_play=true -``` - -自定义 owner 可以通过 Hydra 调整 terrain 网格与 seed: +选择声明了 `env.scene.terrain` 的 task owner,然后通过 Hydra 调整 terrain +网格与 seed: ```text env.scene.terrain.generator.num_rows=4 diff --git a/docs/sphinx/source/zh_CN/2-user_guide/6-terrain/2-heightfield_import.md b/docs/sphinx/source/zh_CN/2-user_guide/6-terrain/2-heightfield_import.md index 58971c1c0..c920df7f9 100644 --- a/docs/sphinx/source/zh_CN/2-user_guide/6-terrain/2-heightfield_import.md +++ b/docs/sphinx/source/zh_CN/2-user_guide/6-terrain/2-heightfield_import.md @@ -1,23 +1,21 @@ # 高度场导入 -高度场地形通过 `SceneCfg` 和地形生成器进行配置,然后在 init 路径上由后端实例化。已提交的面向用户示例是保留的 `g1_walk_rough` 场景。 +高度场地形通过 `SceneCfg` 和地形生成器进行配置,然后在 init 路径上由后端实例化。核心测试使用生成式 heightfield 场景覆盖该契约。 ## 需要阅读的文件 - `src/unilab/terrains/heightfield_terrains.py` - `unisim.terrain.generator` -- `src/unilab/assets/robots/g1/scene_rough.xml` - `src/unilab/tasks/locomotion/common/height_scan.py` +- `tests/utils/test_xml_utils.py` - `unisim.backend.mujoco.xml` - `unisim.backend.motrix.scene` ## 冒烟命令 ```bash -uv run train --algo sac --task g1_walk_rough --sim mujoco \ - algo.max_iterations=2 \ - algo.num_envs=64 \ - training.no_play=true +uv run pytest tests/utils/test_xml_utils.py \ + -k materialize_mujoco_hfield_attached_scene ``` 高度扫描的 ID 和偏移在 env 初始化期间缓存;热路径调用后端高度 scanner contract,而不是解析 XML 或 asset 元数据。 diff --git a/docs/sphinx/source/zh_CN/4-developer_guide/1-architecture/4-scene_composition.md b/docs/sphinx/source/zh_CN/4-developer_guide/1-architecture/4-scene_composition.md index 76f0b5abd..7b4aa03aa 100644 --- a/docs/sphinx/source/zh_CN/4-developer_guide/1-architecture/4-scene_composition.md +++ b/docs/sphinx/source/zh_CN/4-developer_guide/1-architecture/4-scene_composition.md @@ -94,14 +94,14 @@ materializer。 - 探测 backend 私有的场景方法,而不使用明确的契约。 - 在 env 构造完成后重新生成地形。 -## Go2 崎岖地形证据 +## 地形契约证据 -当前面向用户的程序化地形路径是 Go2 崎岖地形: +核心仓库保留 terrain contract 与 materialization 测试,但不再持有 +production rough-terrain 任务: -- Task owner:`src/unilab/tasks/locomotion/g1/manager_terms.py` - 地形生成器:`unisim.terrain.generator` - MuJoCo materializer:`unisim.backend.mujoco.xml` - Motrix materializer:`unisim.backend.motrix.scene` -- Owner YAML:`src/unilab/conf/sac/task/g1_walk_rough/{mujoco,motrix}.yaml` +- 契约覆盖:`tests/utils/test_xml_utils.py` 用户使用说明见 {doc}`../../2-user_guide/6-terrain/1-procedural`。 diff --git a/docs/sphinx/source/zh_CN/5-reference/5-support_matrix.md b/docs/sphinx/source/zh_CN/5-reference/5-support_matrix.md index 35722ba4b..60f8c83a7 100644 --- a/docs/sphinx/source/zh_CN/5-reference/5-support_matrix.md +++ b/docs/sphinx/source/zh_CN/5-reference/5-support_matrix.md @@ -77,7 +77,6 @@ uv run scripts/generate_support_matrix.py --write | APPO (torch) | `g1_flip_tracking` (G1 flip tracking) | Tested | - | Tested | - | - | - | - | - | | APPO (torch) | `allegro_inhand` (Allegro in-hand) | Tested | - | Tested | - | - | - | - | - | | SAC (torch) | `g1_walk_flat` (G1 walk flat) | Tested | Tested | Tested | Tested | Tested | Configured | Tested | - | -| SAC (torch) | `g1_walk_rough` (G1 walk rough) | Tested | - | Tested | - | - | - | - | - | | SAC (torch) | `g1_motion_tracking` (G1 motion tracking) | Tested | Configured | Tested | - | - | - | - | - | | SAC (torch) | `g1_flip_tracking` (G1 flip tracking) | Tested | - | Registered | - | - | - | - | - | | SAC (torch) | `g1_wbt_obs` (g1 wbt obs) | Tested | - | Registered | - | - | - | - | - | diff --git a/scripts/benchmark/env/benchmark_env_step.py b/scripts/benchmark/env/benchmark_env_step.py index 51700ced4..e24a93473 100644 --- a/scripts/benchmark/env/benchmark_env_step.py +++ b/scripts/benchmark/env/benchmark_env_step.py @@ -6,7 +6,6 @@ # Single task + backend: uv run scripts/benchmark/env/benchmark_env_step.py task=g1_walk_flat/motrix - uv run scripts/benchmark/env/benchmark_env_step.py task=g1_walk_rough/mujoco # mjwarp backend (Phase 1: g1_walk_flat only) requires extra deps: uv run --with mujoco-warp --with warp-lang \\ @@ -185,44 +184,6 @@ def _ppo_owner_yaml_cfg( ) -def _sac_owner_yaml_cfg( - task_id: str, - backend: str, - env_cfg_cls: Callable[[], Any], - config_overrides: list[str], -) -> Any: - yaml_backend = _hydra_yaml_backend(backend) - return _owner_yaml_cfg( - config_root="sac", - algo_name="sac", - overrides=[f"task={task_id}/{yaml_backend}"], - config_overrides=config_overrides, - env_cfg_cls=env_cfg_cls, - ) - - -def _materialize_g1_rough_benchmark_scene() -> str: - import shutil - import xml.etree.ElementTree as ET - - source_dir = ROOT_DIR / "src" / "unilab" / "assets" / "robots" / "g1" - output_dir = Path("/tmp/unilab_benchmark_g1_rough_scene") - output_dir.mkdir(parents=True, exist_ok=True) - - for name in ("g1.xml",): - shutil.copy2(source_dir / name, output_dir / name) - for name in ("assets", "textures", "hfields"): - shutil.copytree(source_dir / name, output_dir / name, dirs_exist_ok=True) - - tree = ET.parse(source_dir / "scene_rough.xml") - hfield = tree.getroot().find("./asset/hfield[@name='hfield']") - if hfield is not None: - hfield.set("file", "hfields/hfield.png") - output_path = output_dir / "scene_rough.xml" - tree.write(output_path) - return str(output_path) - - def _manager_env_cls() -> Callable[..., Any]: from unilab.envs import make_manager_based_rl_env @@ -241,12 +202,6 @@ def _g1_flat_cfg(backend: str, config_overrides: list[str]) -> Any: return _ppo_owner_yaml_cfg("g1_walk_flat", backend, ManagerBasedRlEnvCfg, config_overrides) -def _g1_rough_cfg(backend: str, config_overrides: list[str]) -> Any: - from unilab.envs import ManagerBasedRlEnvCfg - - return _sac_owner_yaml_cfg("g1_walk_rough", backend, ManagerBasedRlEnvCfg, config_overrides) - - def _g1_motion_tracking_cfg(backend: str, config_overrides: list[str]) -> Any: from unilab.envs import ManagerBasedRlEnvCfg @@ -279,14 +234,6 @@ def _g1_walk_env_cls() -> type: env_cls_factory=_g1_walk_env_cls, backends=("mujoco", "motrix", "mjwarp"), ), - "g1_rough": TaskConfig( - task_id="g1_walk_rough", - env_name="G1WalkRough", - cfg_factory=_g1_rough_cfg, - env_cls_factory=_g1_walk_env_cls, - aliases=("sac/g1_walk_rough",), - backends=("mujoco", "motrix", "mjwarp"), - ), "g1_mt": TaskConfig( task_id="g1_motion_tracking", env_name="G1MotionTracking", @@ -305,7 +252,6 @@ def _g1_walk_env_cls() -> type: "go2": "#54A24B", "g1": "#F58518", "g1_mt": "#B279A2", - "g1_rough": "#E45756", } BACKEND_STYLES = { "mujoco": {"marker": "o", "linestyle": "-", "hatch": "//"}, @@ -653,8 +599,6 @@ def _short_task_label(task_name: str) -> str: name = task_name.lower() if "motiontracking" in name: return "g1_mt" - if "rough" in name and name.startswith("g1"): - return "g1_rough" for prefix in ("go2", "g1"): if name.startswith(prefix): return prefix diff --git a/scripts/tools/support_matrix.py b/scripts/tools/support_matrix.py index 80201d02d..0e9263d65 100644 --- a/scripts/tools/support_matrix.py +++ b/scripts/tools/support_matrix.py @@ -81,17 +81,15 @@ _TASK_ORDER = { "go2_joystick_flat": 0, "g1_walk_flat": 1, - "g1_walk_rough": 2, - "g1_motion_tracking": 3, - "g1_flip_tracking": 4, - "x2_wall_flip_tracking": 5, - "allegro_inhand": 6, - "allegro_sac": 7, + "g1_motion_tracking": 2, + "g1_flip_tracking": 3, + "x2_wall_flip_tracking": 4, + "allegro_inhand": 5, + "allegro_sac": 6, } _TASK_LABELS = { "go2_joystick_flat": "Go2 joystick", "g1_walk_flat": "G1 walk flat", - "g1_walk_rough": "G1 walk rough", "g1_motion_tracking": "G1 motion tracking", "g1_flip_tracking": "G1 flip tracking", "x2_wall_flip_tracking": "X2 wall flip tracking", diff --git a/src/unilab/assets/robots/g1/hfields/hfield.png b/src/unilab/assets/robots/g1/hfields/hfield.png deleted file mode 100644 index 62af27a2bcbd1d9ceb3ac6a8fcda9e28b437ffee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169681 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%0Arpmq~NH=tW?mQe}X8=pIu^#flt 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 diff --git a/src/unilab/assets/robots/g1/scene_rough.xml b/src/unilab/assets/robots/g1/scene_rough.xml deleted file mode 100644 index 6020238c0..000000000 --- a/src/unilab/assets/robots/g1/scene_rough.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/unilab/conf/sac/task/g1_walk_rough/motrix.yaml b/src/unilab/conf/sac/task/g1_walk_rough/motrix.yaml deleted file mode 100644 index e73c5b962..000000000 --- a/src/unilab/conf/sac/task/g1_walk_rough/motrix.yaml +++ /dev/null @@ -1,47 +0,0 @@ -# @package _global_ -# SAC Motrix rough owner: static-hfield rough scene, Motrix sim_dt=0.01, and -# the Motrix-direction reward retuning; kp/kd randomization stays disabled. -defaults: - - /task/g1_walk_flat/base - - _self_ - -training: - task_name: G1WalkRough - sim_backend: motrix -algo: - num_envs: 2048 - learning_starts: 1 - max_iterations: 5000 - save_interval: 1000 - updates_per_step: 8 - algo_params: - alpha_init: 0.001 - target_entropy_ratio: 0.0 -env: - sim_dt: 0.01 - scene: - model_file: src/unilab/assets/robots/g1/scene_rough.xml - events: - # Legacy Motrix owners disable kp/kd randomization. - pd_gains: null -reward: - tracking_lin_vel: - weight: 2.2 - tracking_ang_vel: - weight: 1.8 - penalty_ang_vel_xy: - weight: -1.2 - penalty_orientation: - weight: -12.0 - penalty_action_rate: - weight: -2.5 - pose: - weight: -0.6 - penalty_feet_ori: - weight: -5.0 - feet_phase: - weight: 6.0 - params: - tracking_sigma: 0.008 - alive: - weight: 12.0 diff --git a/src/unilab/conf/sac/task/g1_walk_rough/mujoco.yaml b/src/unilab/conf/sac/task/g1_walk_rough/mujoco.yaml deleted file mode 100644 index cce086903..000000000 --- a/src/unilab/conf/sac/task/g1_walk_rough/mujoco.yaml +++ /dev/null @@ -1,23 +0,0 @@ -# @package _global_ -# SAC MuJoCo rough owner: inherits the 29-DoF off-policy Manager-Based contract -# and swaps the scene to the static-hfield rough XML (no height-scan -# observation and no terrain curriculum, matching the legacy rough task). -defaults: - - /task/g1_walk_flat/base - - _self_ - -training: - task_name: G1WalkRough - sim_backend: mujoco -algo: - num_envs: 2048 - learning_starts: 10 - max_iterations: 5000 - save_interval: 1000 - updates_per_step: 8 - algo_params: - alpha_init: 0.001 - target_entropy_ratio: 0.0 -env: - scene: - model_file: src/unilab/assets/robots/g1/scene_rough.xml diff --git a/src/unilab/tasks/locomotion/g1/__init__.py b/src/unilab/tasks/locomotion/g1/__init__.py index 362637e16..2c9231788 100644 --- a/src/unilab/tasks/locomotion/g1/__init__.py +++ b/src/unilab/tasks/locomotion/g1/__init__.py @@ -14,10 +14,6 @@ registry.register_env("G1WalkFlat", make_g1_walk_env, sim_backend="isaacsim") registry.register_env("G1WalkFlat", make_g1_walk_env, sim_backend="newton") -registry.register_env_config("G1WalkRough", ManagerBasedRlEnvCfg) -registry.register_env("G1WalkRough", make_g1_walk_env, sim_backend="mujoco") -registry.register_env("G1WalkRough", make_g1_walk_env, sim_backend="motrix") - __all__ = [ "G1WalkManagerBasedEnv", "make_g1_walk_env", diff --git a/src/unilab/tasks/migration_matrix.py b/src/unilab/tasks/migration_matrix.py index b2ec4f844..80c63edf2 100644 --- a/src/unilab/tasks/migration_matrix.py +++ b/src/unilab/tasks/migration_matrix.py @@ -38,7 +38,6 @@ class TaskMigrationRecord: _G1_LOCOMOTION_TASKS = frozenset( { "G1WalkFlat", - "G1WalkRough", } ) diff --git a/tests/benchmark/test_replay_buffer_placement_benchmark.py b/tests/benchmark/test_replay_buffer_placement_benchmark.py index 4a704a699..4b2ce02c7 100644 --- a/tests/benchmark/test_replay_buffer_placement_benchmark.py +++ b/tests/benchmark/test_replay_buffer_placement_benchmark.py @@ -65,7 +65,6 @@ def test_default_discovery_includes_existing_offpolicy_mujoco_tasks() -> None: assert skipped == [] assert ("sac", "g1_walk_flat") in targets - assert ("sac", "g1_walk_rough") in targets assert ("sac", "g1_motion_tracking") in targets assert ("flashsac", "g1_walk_flat") in targets assert ("flashsac", "go2_joystick_flat") in targets diff --git a/tests/config/test_locomotion_params.py b/tests/config/test_locomotion_params.py index ecb564858..08f79ce7f 100644 --- a/tests/config/test_locomotion_params.py +++ b/tests/config/test_locomotion_params.py @@ -212,22 +212,6 @@ def test_offpolicy_flashsac_go2_task_overrides(): assert cfg.env.actions.joint_pos.scale == pytest.approx(0.4) -def test_offpolicy_g1_rough_terrain_task_overrides(): - from hydra import compose, initialize_config_dir - from hydra.core.global_hydra import GlobalHydra - - GlobalHydra.instance().clear() - with initialize_config_dir(config_dir=str(CONF_DIR / "sac"), version_base="1.3"): - cfg = compose( - "config", - overrides=["task=g1_walk_rough/mujoco"], - ) - assert cfg.algo.algo == "sac" - assert cfg.training.task_name == "G1WalkRough" - assert cfg.training.sim_backend == "mujoco" - assert cfg.env.scene.model_file.endswith("scene_rough.xml") - - def test_g1_task_owner_yamls_preserve_legacy_and_walk_observation_profiles(): from hydra import compose, initialize_config_dir from hydra.core.global_hydra import GlobalHydra @@ -248,7 +232,6 @@ def uses_walk_profile(config_group: str, overrides: list[str]) -> bool: assert uses_walk_profile("appo", ["task=g1_walk_flat/mujoco"]) is False assert uses_walk_profile("sac", ["task=g1_walk_flat/mujoco"]) is True assert uses_walk_profile("sac", ["task=g1_walk_flat/motrix"]) is True - assert uses_walk_profile("sac", ["task=g1_walk_rough/mujoco"]) is True assert uses_walk_profile("td3", ["task=g1_walk_flat/mujoco"]) is True assert uses_walk_profile("flashsac", ["task=g1_walk_flat/mujoco"]) is True diff --git a/tests/envs/locomotion/g1/test_g1_owner_contract.py b/tests/envs/locomotion/g1/test_g1_owner_contract.py index 23899196b..2f99a643a 100644 --- a/tests/envs/locomotion/g1/test_g1_owner_contract.py +++ b/tests/envs/locomotion/g1/test_g1_owner_contract.py @@ -275,32 +275,6 @@ True, id="sac-isaacsim", ), - pytest.param( - "sac", - ("task=g1_walk_rough/mujoco",), - "G1WalkRough", - "mujoco", - 29, - 1.0, - "scene_rough.xml", - _OFFPOLICY_REWARDS, - (*_RESET_EVENTS, "pd_gains"), - True, - id="sac-rough-mujoco", - ), - pytest.param( - "sac", - ("task=g1_walk_rough/motrix",), - "G1WalkRough", - "motrix", - 29, - 1.0, - "scene_rough.xml", - _OFFPOLICY_REWARDS, - _RESET_EVENTS, - True, - id="sac-rough-motrix", - ), pytest.param( "td3", ("task=g1_walk_flat/mujoco",), @@ -588,10 +562,6 @@ def test_g1_walk_registries_are_manager_only() -> None: "newton", ], } - assert metadata["G1WalkRough"] == { - "config_factory": "ManagerBasedRlEnvCfg", - "available_backends": ["mujoco", "motrix"], - } @pytest.mark.parametrize( @@ -799,12 +769,6 @@ def test_g1_penalty_curriculum_scales_negative_weights_from_start() -> None: "G1WalkFlat", id="sac-walk-flat", ), - pytest.param( - "sac", - ("task=g1_walk_rough/mujoco",), - "G1WalkRough", - id="sac-walk-rough", - ), pytest.param( "td3", ("task=g1_walk_flat/mujoco",), diff --git a/tests/envs/test_env_configs.py b/tests/envs/test_env_configs.py index ce2fed8f9..2c8a2adf3 100644 --- a/tests/envs/test_env_configs.py +++ b/tests/envs/test_env_configs.py @@ -59,15 +59,6 @@ def _g1_manager_override( from unilab.base.config_adapter import BackendAdapter repo_root = Path(__file__).parents[2] - if task == "g1_walk_rough": - # There is no ppo g1_walk_rough owner; use the SAC owner instead. - with initialize_config_dir( - config_dir=str(repo_root / "src" / "unilab" / "conf" / "sac"), version_base="1.3" - ): - cfg = compose("config", overrides=[f"task={task}/mujoco"]) - return BackendAdapter( - cfg, root_dir=repo_root, algo_name="sac" - ).build_task_env_cfg_override() with initialize_config_dir( config_dir=str(repo_root / "src" / "unilab" / "conf" / config_group), version_base="1.3" ): @@ -538,7 +529,6 @@ def test_allegro_grasp_recorder_close_autosaves_and_io_failure_is_fail_closed( # Environments that don't need special config overrides _STANDARD_ENVS = [ "G1WalkFlat", - "G1WalkRough", "AllegroInhandRotation", "AllegroInhandRotationGrasp", ] @@ -561,8 +551,6 @@ def test_env_reset_and_step(env_name: str): env_cfg_override = None if env_name == "G1WalkFlat": env_cfg_override = _g1_manager_override("g1_walk_flat") - elif env_name == "G1WalkRough": - env_cfg_override = _g1_manager_override("g1_walk_rough") elif env_name == "AllegroInhandRotation": env_cfg_override = _allegro_manager_override() elif env_name == "AllegroInhandRotationGrasp": diff --git a/tests/scripts/test_train_script_configs.py b/tests/scripts/test_train_script_configs.py index 76bc53903..3b95695c8 100644 --- a/tests/scripts/test_train_script_configs.py +++ b/tests/scripts/test_train_script_configs.py @@ -105,7 +105,6 @@ def test_appo_task_configs_load(task, tmp_path): ("algo", "task"), [ ("sac", "g1_walk_flat/mujoco"), - ("sac", "g1_walk_rough/mujoco"), ("td3", "g1_walk_flat/mujoco"), ], ) diff --git a/tests/scripts/test_train_scripts.py b/tests/scripts/test_train_scripts.py index 5d6300c90..6b6770d13 100644 --- a/tests/scripts/test_train_scripts.py +++ b/tests/scripts/test_train_scripts.py @@ -2210,13 +2210,6 @@ def test_offpolicy_flashsac_g1_walk_flat_task_composes() -> None: assert cfg.training.sim_backend == "mujoco" -def test_offpolicy_g1_rough_terrain_task_composes() -> None: - cfg = _offpolicy_cfg(["task=g1_walk_rough/mujoco"]) - - assert cfg.training.task_name == "G1WalkRough" - assert cfg.training.sim_backend == "mujoco" - - def test_offpolicy_rejects_algo_argument_mismatch(): """build_runner must reject an algo argument inconsistent with cfg.algo.algo.""" cfg = _offpolicy_cfg(["task=g1_walk_flat/mujoco"])