执行状态:A/B/C/D 已实现并合入各仓 dev/issue-1528-extract-go2-arm;联合验收通过;最终 PR 为新仓 #3、UniLab #1537、unilab_rl #15(均已提交,待 main 合并)。原仓版本号保持 1.1.0,不创建 release/tag、不进行 PyPI 发布;机器人 XML/mesh/texture 全部随新仓和安装包分发,运行时不从 HF 下载。此状态及下述更新覆盖原方案中的资源托管/版本选择。
目标与交付边界
将 UniLab 的 go2_arm_manip_loco / Go2ArmManipLoco 任务及 unilab_rl 中相关的 HIM-PPO 算法完整迁移到独立仓库 unilabsim/legged-manipulation_unilab。新仓成为任务、专属算法、配置、资产定义、工具、测试和使用文档的唯一维护位置。
推荐路径:先在新仓完成可安装、可训练和可回放的迁移闭环,再分别清理 UniLab 与 unilab_rl,最后在两个源仓清理后的版本上做联合验收。预计 4 个可独立评审的交付单元,跨 3 个仓库;不是仅复制任务目录。
硬性要求:两个原仓库的当前受维护代码树不保留任何本任务/HIM-PPO 的专属实现、配置、注册、资产条目、工具、测试或现行使用文档;不保留兼容转发、旧 import shim、可选回装依赖或双份实现。 历史 Git 提交不重写;必要的历史 changelog/迁移公告只记录事实,不承担运行或使用入口。共享代码仅在仍有其他消费者时留在原 owner,移除本任务专属分支。
长期责任:新仓维护 legged manipulation 任务与 HIM-PPO;UniLab 继续维护共享环境/配置/注册能力;unilab_rl 继续维护通用算法和 runtime;unisim 继续维护仿真后端。新仓可以依赖这些基础包,但不得要求用户保留旧源码 checkout、手动复制配置或修改 site-packages。
本 issue 为实施和验收依据。子任务:A #1529、B #1530、C #1531、D #1532;最终 PR 合并前保持 roadmap 开放。
仓库证据
核对基线:UniLab d9afc9656e63c82a64263f5a4dbd938ba1652af2;unilab_rl 801ab92328d892aa7a084a8217aee8cc16eb0e20。目标 GitHub 仓库已存在、为 public、目前为空。实施前重新核对最新 main。
| 来源 |
必须迁移的内容 |
连带清理 / 依赖 |
| UniLab |
src/unilab/tasks/locomotion/go2_arm/,包括 base.py、manip_loco.py |
从 tasks/__init__.py、migration matrix、demo、任务列表、补全和支持矩阵清除专属项 |
| UniLab |
src/unilab/conf/ppo/task/go2_arm_manip_loco/{mujoco,motrix}.yaml,整个 src/unilab/conf/ppo_him/ |
HIM 配置树当前只有该任务;标准 PPO 及其他任务 owner 保留 |
| UniLab |
scripts/train_him_ppo.py、整个 scripts/manip_loco/ |
包含 IK 诊断、姿态校准、IK-only playback、site Jacobian benchmark;同步处理打包后的脚本入口 |
| UniLab |
src/unilab/assets/robots/go2_arm/ 内 XML/场景及专属资产解析责任 |
删除 hub 的 go2_arm 项、对应 .gitignore 和打包排除项;共享 Go2 mesh 与 G1 地面纹理仍有其他消费者 |
| UniLab |
tests/envs/locomotion/go2_arm/,混合测试文件中的专属用例 |
涵盖 train/play、配置、注册/包边界、资产、backend/Jacobian、demo/CLI 等;通用测试改用通用 fixture,不能整文件误删 |
| UniLab |
中英文 manip-loco、HIM-PPO 文档和有效使用说明 |
同步清理 toctree、API、算法索引、DR 示例、部署/ONNX、项目结构、支持矩阵及交叉链接 |
| unilab_rl |
src/uni_rl/algos/him_ppo/ 全部 6 个文件,tests/algos/test_him_ppo_runner.py |
删除原算法 namespace,更新 README 中英文、AGENTS、包描述和现行算法列表 |
HIM-PPO 六个模块为 __init__、actor_critic、estimator、algorithm、storage、runner。当前其他算法没有引用它们;这些模块依赖 torch、tensordict、可选 TensorBoard。训练入口仍使用通用 uni_rl.algos.rsl_rl.RslRlVecEnvWrapper / get_policy_obs_dims,这些共享组件不随任务删除。通用 PPO/APPO/SAC/TD3/FlashSAC/HORA、IPC、日志、共享 locomotion rewards/commands/DR、backend Jacobian 能力维持原 owner。
关键迁移设计
- 独立安装与命名空间。 新仓使用独立 Python 包(建议
legged_manipulation_unilab),拥有任务、算法、Hydra config、资产与训练/回放入口;不向 unilab 或 uni_rl namespace 写文件。wheel/sdist 必须包含运行所需配置和小型资产,记录源仓 commit 与文件来源。
- 注册和配置。 UniLab 已有
unilab.tasks entry-point discovery 与 __unilab_registry_modules__ 契约,可直接接入,包括 spawn 子进程。现有 UniLab CLI 按本包内 conf/ 查 owner,不能把“任务注册成功”等同于“外部配置可路由”。由新仓提供读取自身 owner YAML 的训练/回放入口,复用既有公共能力;源仓不得加入本任务特判。保持 backend identity 和 reward/env 配置的单一 owner。
- 算法与行为。 HIM-PPO 移到新包 namespace;复用通用 PPO 实现。保留现有 PPO MuJoCo/Motrix、HIM-PPO MuJoCo 组合及各 owner 的阶段设置,不借迁移统一奖励、DR、IK 或冻结机械臂参数,不新增后端支持承诺。核对当前 HIM actor
76 × 5 = 380、critic 79 的维度及 history 顺序。
- 资产闭环。 新仓拥有机械臂 XML、场景及 mesh/texture 资源清单;机器人资产直接提交 Git 并随 wheel/sdist 分发,运行时无 HF 下载。迁移后解析
../go2/assets、机械臂 mesh 及 Motrix play profile 的 G1 texture 依赖,全新缓存仅从安装包物化,支持离线复用。不得依赖 UniLab 被删除的 go2_arm hub 项或旧仓绝对路径。既有共享 HF 资产内容不在此工作中删除。
- 现有工具缺口。
calibrate_go2_arm_ee_orientation.py 引用 scripts/play_go2_arm_onnx_sim2sim.py,当前 tracked tree 中不存在该文件。迁移前定位依赖并使校准工具形成可运行闭环;不能把断链脚本原样复制后宣称工具迁移完成。ONNX/JIT 导出和 sim2sim/checkpoint guard 也需重新验证。
- 版本与来源。 新仓锁定在两个源仓清理后仍可用的依赖版本/commit;移除
uni_rl.algos.him_ppo 是公开 API 删除,记录影响并精确固定配套 Git commit;按维护者要求原仓版本号全部不变,不发布 PyPI、不创建 release/tag。保留迁入代码的版权、BSD-3-Clause SPDX 与所需许可证文本,记录源项目许可。历史 checkpoint 用新 namespace 验证;不通过原仓 shim 兜底。
交付拆分与依赖
执行时将下列交付单元落实为子 issue/PR 并回链本 roadmap;当前不将未开工事项标为完成。
PR base:两个源仓各以实施时最新 main 为 declared base,建立 dev/issue-1528-extract-go2-arm 集成分支,子 PR 指向各自集成分支,最终 PR 指向 main;新仓以初始化后的 main 为 declared base,并按同样原则记录实际分支。A 先就绪,B/C 配套交付,D 必须使用最终清理后的提交。未获得验证前不先删除唯一可运行副本。
验收标准
契约依据与实施前需落实的事项
新仓初始化 PR 记录这次独立 owner 决策,并落实包名、依赖版本、随包资产策略、固定提交依赖和各交付负责人。范围内复用现有注册/配置/后端契约;若实现需要扩展这些公共契约,再在对应子 issue/ADR 中明确新增范围。此 roadmap 不包含改写 Git 历史、删除共享资产托管内容、扩展新算法/后端、常态化性能 benchmark 或自动 PyPI 发布。
目标与交付边界
将 UniLab 的
go2_arm_manip_loco/Go2ArmManipLoco任务及unilab_rl中相关的 HIM-PPO 算法完整迁移到独立仓库 unilabsim/legged-manipulation_unilab。新仓成为任务、专属算法、配置、资产定义、工具、测试和使用文档的唯一维护位置。推荐路径:先在新仓完成可安装、可训练和可回放的迁移闭环,再分别清理 UniLab 与 unilab_rl,最后在两个源仓清理后的版本上做联合验收。预计 4 个可独立评审的交付单元,跨 3 个仓库;不是仅复制任务目录。
硬性要求:两个原仓库的当前受维护代码树不保留任何本任务/HIM-PPO 的专属实现、配置、注册、资产条目、工具、测试或现行使用文档;不保留兼容转发、旧 import shim、可选回装依赖或双份实现。 历史 Git 提交不重写;必要的历史 changelog/迁移公告只记录事实,不承担运行或使用入口。共享代码仅在仍有其他消费者时留在原 owner,移除本任务专属分支。
长期责任:新仓维护 legged manipulation 任务与 HIM-PPO;UniLab 继续维护共享环境/配置/注册能力;unilab_rl 继续维护通用算法和 runtime;unisim 继续维护仿真后端。新仓可以依赖这些基础包,但不得要求用户保留旧源码 checkout、手动复制配置或修改 site-packages。
本 issue 为实施和验收依据。子任务:A #1529、B #1530、C #1531、D #1532;最终 PR 合并前保持 roadmap 开放。
仓库证据
核对基线:UniLab
d9afc9656e63c82a64263f5a4dbd938ba1652af2;unilab_rl801ab92328d892aa7a084a8217aee8cc16eb0e20。目标 GitHub 仓库已存在、为 public、目前为空。实施前重新核对最新 main。src/unilab/tasks/locomotion/go2_arm/,包括base.py、manip_loco.pytasks/__init__.py、migration matrix、demo、任务列表、补全和支持矩阵清除专属项src/unilab/conf/ppo/task/go2_arm_manip_loco/{mujoco,motrix}.yaml,整个src/unilab/conf/ppo_him/scripts/train_him_ppo.py、整个scripts/manip_loco/src/unilab/assets/robots/go2_arm/内 XML/场景及专属资产解析责任go2_arm项、对应.gitignore和打包排除项;共享 Go2 mesh 与 G1 地面纹理仍有其他消费者tests/envs/locomotion/go2_arm/,混合测试文件中的专属用例src/uni_rl/algos/him_ppo/全部 6 个文件,tests/algos/test_him_ppo_runner.pyHIM-PPO 六个模块为
__init__、actor_critic、estimator、algorithm、storage、runner。当前其他算法没有引用它们;这些模块依赖 torch、tensordict、可选 TensorBoard。训练入口仍使用通用uni_rl.algos.rsl_rl.RslRlVecEnvWrapper/get_policy_obs_dims,这些共享组件不随任务删除。通用 PPO/APPO/SAC/TD3/FlashSAC/HORA、IPC、日志、共享 locomotion rewards/commands/DR、backend Jacobian 能力维持原 owner。关键迁移设计
legged_manipulation_unilab),拥有任务、算法、Hydra config、资产与训练/回放入口;不向unilab或uni_rlnamespace 写文件。wheel/sdist 必须包含运行所需配置和小型资产,记录源仓 commit 与文件来源。unilab.tasksentry-point discovery 与__unilab_registry_modules__契约,可直接接入,包括 spawn 子进程。现有 UniLab CLI 按本包内conf/查 owner,不能把“任务注册成功”等同于“外部配置可路由”。由新仓提供读取自身 owner YAML 的训练/回放入口,复用既有公共能力;源仓不得加入本任务特判。保持 backend identity 和 reward/env 配置的单一 owner。76 × 5 = 380、critic79的维度及 history 顺序。../go2/assets、机械臂 mesh 及 Motrix play profile 的 G1 texture 依赖,全新缓存仅从安装包物化,支持离线复用。不得依赖 UniLab 被删除的go2_armhub 项或旧仓绝对路径。既有共享 HF 资产内容不在此工作中删除。calibrate_go2_arm_ee_orientation.py引用scripts/play_go2_arm_onnx_sim2sim.py,当前 tracked tree 中不存在该文件。迁移前定位依赖并使校准工具形成可运行闭环;不能把断链脚本原样复制后宣称工具迁移完成。ONNX/JIT 导出和 sim2sim/checkpoint guard 也需重新验证。uni_rl.algos.him_ppo是公开 API 删除,记录影响并精确固定配套 Git commit;按维护者要求原仓版本号全部不变,不发布 PyPI、不创建 release/tag。保留迁入代码的版权、BSD-3-Clause SPDX 与所需许可证文本,记录源项目许可。历史 checkpoint 用新 namespace 验证;不通过原仓 shim 兜底。交付拆分与依赖
执行时将下列交付单元落实为子 issue/PR 并回链本 roadmap;当前不将未开工事项标为完成。
uni_rl不依赖unilab/unisim的边界测试通过。PR base:两个源仓各以实施时最新
main为 declared base,建立dev/issue-1528-extract-go2-arm集成分支,子 PR 指向各自集成分支,最终 PR 指向main;新仓以初始化后的main为 declared base,并按同样原则记录实际分支。A 先就绪,B/C 配套交付,D 必须使用最终清理后的提交。未获得验证前不先删除唯一可运行副本。验收标准
PYTHONPATH补丁;空缓存资产解析与复用缓存均通过。git ls-files路径检查和git grep -n -i -E 'go2.?arm|manip.?loco|him.?ppo|ppo_him|HIMActorCritic|HIMOnPolicyRunner|HIMEstimator|HIMRolloutStorage'内容审计覆盖 tracked tree;每个剩余命中逐项分类,任何专属可执行代码、配置、测试或现行文档残留均阻止关闭。历史记录例外明确列出。make check、make test,创建/更新 PR 前make test-all;unilab_rl:ruff lint/format、uv run mypy src/uni_rl、uv run pyright、uv run pytest --cov=src/uni_rl。新仓运行迁入任务/算法测试、配置/安装/资产/训练回放 smoke。记录最终 head 的准确命令与结果;最终 PR 合入 main 前等待对应 head 适用远程 CI 通过。契约依据与实施前需落实的事项
新仓初始化 PR 记录这次独立 owner 决策,并落实包名、依赖版本、随包资产策略、固定提交依赖和各交付负责人。范围内复用现有注册/配置/后端契约;若实现需要扩展这些公共契约,再在对应子 issue/ADR 中明确新增范围。此 roadmap 不包含改写 Git 历史、删除共享资产托管内容、扩展新算法/后端、常态化性能 benchmark 或自动 PyPI 发布。