You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
背景
PolySim(本地调研副本基于 HumanoidVerse/ASAP 二次开发,论文 arXiv:2510.01708)提出了一种"统一物理后端"设计,核心卖点是 multi-simulator dynamics randomization:单次训练 run 内同时从 IsaacGym / IsaacSim / Genesis 起并行环境,把"引擎差异"当作 domain randomization 的一个维度,以对抗 simulator inductive bias。本帖对照 UniLab 现有后端体系(
src/unilab/base/backend/base.py的SimBackend+ 5 个后端 + sim2sim 契约),评估其设计对 UniLab 的借鉴价值。PolySim 设计要点(事实陈述)
BaseSimulator(humanoidverse/simulator/base_simulator/base_simulator.py,约 170 行),非abc.ABC,以raise NotImplementedError表达约 15 个生命周期方法(setup / load_assets / create_envs / prepare_sim / refresh_sim_tensors / apply_torques_at_dof / simulate_at_each_physics_step等)。dof_pos / robot_root_states / contact_forces / _rigid_body_*,全部(num_envs, ...)、四元数 xyzw),env 层直接读写这些属性(例如直接改simulator.robot_root_states再写回)。gymtorch.wrap_tensor零拷贝驻留 GPU;四元数序、link 顺序映射等转换逻辑内联在各后端的refresh_sim_tensors。apply_torques_at_dof;P/V/T 控制律(含 PD)在 env 层实现。subprocess.Popen(各自独立 conda 环境,绕开引擎间 import 冲突)+ Torch RPC/TensorPipe;EnvClient把多个 server 聚合为单个向量化 env——action 按num_envs_list切片并发下发,obs/reward 沿 batch 维torch.cat合并,info 按 env 数加权,对 PPO 完全透明。_target_直接实例化,无 registry;+simulator=isaacgym切换。urdf_file / usd_file / xml_file,config 是唯一事实源;仅 IsaacGym 后端在 load 后断言资产与 config 的 dof/body 名与限位一致,其余后端 fail-open。genesis_0903.py)。与 UniLab 现状的对照
SimBackend(约 1100 行):抽象方法 + fail-closed 可选方法 + 显式类型(BackendSensorView/DomainRandomizationCapabilities/BackendPlayCapabilities)NotImplementedErrorsim2sim.pyDENYLIST 快照 +scripts/audit_sim2sim_contracts.py+ conformance/AST 静态测试评估
两者在解不同的问题。 PolySim 的目标是"异构引擎共训"(把引擎 inductive bias 当 DR 维度),UniLab 的目标是"后端可替换 + 跨后端 play 一致性"(sim2sim transfer)。接口形态差异是目标差异的后果,不是优劣本身。
值得借鉴的:
不应照搬的:
BackendSensorView校验虽然"重",但换来可静态检查、可 fail-closed 的边界(由tests/base/test_backend_conformance.py的 AST 检查守护)。如果 UniLab 要引入 multi-sim 共训,两条候选路径:
SimBackend契约,复用现有各后端能力声明;obs/reward 合并点集中在 runner。预计规模:新增一个 multi-backend collector + config 表达(约几百行 + 测试)。长期成本:跨后端 obs 对齐仍受 sim2sim DENYLIST 约束——这是好事,共训时 obs/action 契约本应 fail-closed。SimBackend实例内部承载异构引擎。会击穿现有"后端 = 单一引擎"的抽象,污染 DR/set_state 语义,不推荐。无论哪条路径,前置工作都是把 sim2sim 契约从"play 时校验"扩展为"共训时 obs/reward/action 对齐校验",并补跨后端 parity 的测试门禁(PolySim 的教训:没有门禁的约定一定会漂移)。
待 maintainer 决策的问题
All reactions