扩展 UniLab:新任务¶
从契约出发:Env 契约、 任务 owner config 契约 与 ADR-0005 Unified Obs Critic Env And IPC Contract。
实现清单¶
在
src/unilab/envs/下选取最接近的 owner 包。定义或扩展一个 env config dataclass,并用
@registry.envcfg("EnvName")注册它。用
@registry.env("EnvName", sim_backend="mujoco")或@registry.env("EnvName", sim_backend="motrix")注册每个受支持的 后端实现。如果任务位于一个新模块中,请把该模块加入包的
__unilab_registry_modules__元组,以便ensure_registries()导入它。保持
obs_groups_spec准确。它必须包含obs,并且可以包含critic;wrapper 和 learner 都信任这些维度。把 reset 与 step 语义保留在 env owner 层:
reset(env_indices)返回(obs_dict, info_dict),而step(actions)返回NpEnvState。在相关 config 根目录下添加 owner YAML,例如
conf/ppo/task/<task>/<backend>.yaml或conf/offpolicy/task/<algo>/<task>/<backend>.yaml。把任务或场景的 keyframe 放进通过
SceneCfg.fragment_files引用的 任务/场景 XML fragment;不要把 task-level keyframe 放进robot.xml。
在风险点附近验证¶
Registry 与 config 形状:
tests/base/test_registry.py、tests/config/test_config_system.pyEnv observation/reset 行为:
tests/base/test_np_env.py以及tests/envs/下最接近的特定任务测试脚本组合:
tests/scripts/test_train_script_configs.py
仓库内证据¶
Registry API:
src/unilab/base/registry.pyEnv 状态契约:
src/unilab/base/np_env.py场景配置:
src/unilab/base/scene.py现有任务示例:
src/unilab/envs/locomotion/go2/joystick.py、src/unilab/envs/manipulation/allegro_inhand/rotation.py