拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Isaac Lab 求解器对比指南:PhysX TGS、Newton MuJoCo-Warp 与 Kamino 的行为差异与迁移实践

Isaac Lab 求解器对比指南PhysX TGS、Newton MuJoCo-Warp 与 Kamino 的行为差异与迁移实践【免费下载链接】IsaacLabUnified framework for robot learning with multi-physics/renderer support项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab本文是 Isaac Lab 多物理后端Multi-Backend体系的求解器对照参考。它系统对比了 PhysX TGS、Newton MuJoCo-WarpMJWarp与 Newton Kamino 三种求解器在摩擦、接触、恢复系数、约束稳定化、收敛机制、关节坐标、子步进与 GPU 缓冲等维度上的用户可见行为差异并给出从一个求解器迁移到另一个求解器时的调参与验证清单。读完本文你将掌握如何基于任务特性选择合适的求解器、理解各求解器关键配置项的真实语义并能在同一任务上通过 Hydra preset 快速完成求解器切换与重调参。背景为什么需要一份求解器对比Isaac Lab 3.0 通过统一 API 支持多个物理后端详见 物理后端总览PhysX是历史默认、特性覆盖最广且作为行为基准的后端Newton是基于 Warp 的 GPU 加速、可微后端随附 MuJoCo-Warp 求解器与 Beta 版 Kamino 求解器OvPhysX则是高度实验性的无 Kit 后端。绝大多数任务在不同后端之间复用同一套 USD 资产但接触、摩擦与稳定化行为差异显著跨求解器迁移时通常必须重新调参——这就是本页存在的意义它是一份移植参考porting reference而不是新手的入门教程。本文对比的三款求解器及其对应配置类如下求解器所属后端配置类说明PhysX TGSPhysX默认求解器PhysxCfgTemporal Gauss-Seidel。PhysX 还通过PhysxCfg.solver_type暴露 Projective Gauss-SeidelPGS变体行为与 TGS 在本文讨论的维度上相近Newton MuJoCo-WarpMJWarpNewton主求解器MJWarpSolverCfgGoogle DeepMind 的 MuJoCo-WarpNewton 后端默认与首要验证求解器Newton KaminoNewtonBetaKaminoSolverCfg基于 P-ADMM 的求解器处于 Beta 阶段Newton 还随附FeatherstoneSolverCfg与XPBDSolverCfg但截至本文撰写时两者均未接入任何 Isaac Lab 任务因此不在对比范围内。注意 Newton 侧的配置采用两层结构外层 NewtonCfg 负责num_substeps、debug_mode、use_cuda_graph等通用设置内层solver_cfgMJWarpSolverCfg或KaminoSolverCfg承载求解器专属参数NewtonCfg.__post_init__会把solver_cfg.class_type自动传播给NewtonCfg.class_type从而让SimulationContext通过既有分发路径解析出正确的 manager用户代码无需手动指定参见 newton_manager_cfg.py。摩擦模型patch 摩擦 vs 逐接触点摩擦各求解器对摩擦力的处理方式差异是迁移后手感变化最直接的来源。求解器摩擦处理PhysX TGS基于 patch 锚点patch-based anchors的库仑摩擦。切向力通过PhysxCfg.friction_correlation_distance默认0.025m将邻近接触合并后统一施加并受PhysxCfg.friction_offset_threshold默认0.04m约束施加摩擦力的接触点距离。摩擦锥始终为金字塔形pyramidalMJWarp采用 MuJoCo 的摩擦模型。摩擦锥形状由MJWarpSolverCfg.cone选择pyramidal或elliptic切向与法向约束阻抗比由MJWarpSolverCfg.impratio默认1.0暴露值越大越强调切向摩擦约束、越不易打滑Kamino摩擦在 P-ADMM 求解内部逐接触点per-contact求解。接触热启动warm-starting方式由KaminoSolverCfg.padmm_contact_warmstart_method选择已验证的预设使用geom_pair_net_force从源码看cone与impratio的默认值均定义在 mjwarp_manager_cfg.pyconepyramidal、impratio1.0它们是 MJWarp 摩擦行为最核心的两个旋钮。移植提示Porting implication针对 PhysX patch 摩擦调优过的任务在相同摩擦系数下会比 MJWarp 的逐接触点摩擦更抓grippier。将操作manipulation任务从 PhysX 迁移到 MJWarp 时预期需要调高摩擦系数并可考虑将cone切换为elliptic以获得更硬的接触堆叠stiffer contact stacks行为。接触检测与求解碰撞管线与 CCD 的差异求解器碰撞管线PhysX TGSPhysX 内置 broadphase narrowphase可通过PhysxCfg.enable_ccd开启连续碰撞检测。GPU 预分配缓冲如gpu_max_rigid_contact_count等gpu_*参数限制了每步的接触数量超限是硬错误MJWarp由MJWarpSolverCfg.use_mujoco_contacts默认True选择两种互斥模式MuJoCo 内部接触管线或 Newton 的NewtonCollisionPipelineCfg碰撞管线。GJK/EPA 迭代次数由MJWarpSolverCfg.ccd_iterations默认35控制复杂几何如多指灵巧手出现需要调大该值的警告时可按提示增加Kamino可通过KaminoSolverCfg.use_collision_detector选择使用 Kamino 内部碰撞检测器collision_detector_pipeline为primitive或unified否则回退到 Newton 的CollisionPipeline。接触穿透余量penetration margin由KaminoSolverCfg.constraints_delta默认1.0e-6m设定从 newton_manager_cfg.py 的NewtonCfg.collision_cfg注释可以看到管线激活的完整矩阵MJWarpSolverCfg且use_mujoco_contactsFalse、KaminoSolverCfg且use_collision_detectorFalse、以及XPBDSolverCfg/FeatherstoneSolverCfg时Newton 的CollisionPipeline处于激活状态collision_cfg为None时会自动创建broad_phaseexplicit的默认管线。同时存在约束关系当use_mujoco_contactsTrue时设置collision_cfg会抛出ValueError因为两种碰撞模式互斥。移植提示在 PhysX 上依赖--enable_ccd防护高速穿透的任务迁移到 MJWarp/Kamino 后在大dt下不会获得同样的保护——Newton 的 CCD 是凸体 GJK/EPA而非 PhysX 的 swept-shape CCD。Newton 侧的缓解手段是缩短dt或调高NewtonCfg.num_substeps。恢复系数与弹跳有无 bounce threshold 门控求解器恢复系数RestitutionPhysX TGS恢复系数是 USD shape 上的逐材质属性全局速度阈值PhysxCfg.bounce_threshold_velocity默认0.5m/s会抑制约 0.5 m/s 以下的反弹MJWarp恢复系数遵循从 USD 翻译出的 MJCF 模型。没有弹跳阈值门控——除非降低逐材质恢复系数否则小速度接触仍可能反弹Kamino恢复系数包含在接触约束集合内行为与 MJWarp 类似bounce_threshold_velocity的定义位于 physx_manager_cfg.pybounce_threshold_velocity: float 0.5Relative velocity threshold for contacts to bounce (in m/s)。移植提示依赖 PhysX 弹跳阈值抑制抖动jitter的任务例如平地脚步接触在迁移到 Newton 后可能直到降低恢复系数之前都会出现接触震颤contact chatter。约束稳定化隐式 vs 显式 Baumgarte求解器稳定化方式PhysX TGS通过 TGS 求解器隐式实现。可选附加 pass 由PhysxCfg.enable_stabilization开启——注意该 flag 会破坏接触传感器力幅值的准确性。源码注释physx_manager_cfg.py建议仅在模拟步长较大约 30 Hz 以下即dt 0.0333s时开启若依赖接触传感器输出力观测则保持关闭MJWarp隐式由 MuJoCo 求解器的每约束solref/solimp设定无顶层开关Kamino显式 Baumgarte 稳定化关节双边约束bilateral增益KaminoSolverCfg.constraints_alpha默认0.01、关节限位单边约束增益constraints_beta默认0.01、接触单边约束增益constraints_gamma默认0.01三者独立可调取值范围[0, 1]Kamino 的约束稳定化参数在 kamino_manager_cfg.py 中被组装为ConstraintStabilizationConfig(alpha, beta, gamma, delta)传入SolverKamino.Config与文档 Kamino 求解器页 中的描述一致调大constraints_alpha可降低关节约束漂移但会使求解更硬stiffer。求解器收敛迭代模型与容差求解器迭代模型PhysX TGS按 actor 有两组迭代计数位置迭代min/max_position_iteration_count默认 1/255与速度迭代min/max_velocity_iteration_count默认 0/255。求解器取最大 actor 的迭代数并钳制到场景范围[min, max]内无全局收敛容差MJWarpMJWarpSolverCfg.iterations默认100控制外层 Newton/CG 迭代数ls_iterations默认50控制每轮外层迭代的线搜索次数。收敛门控为MJWarpSolverCfg.tolerance默认1e-6MuJoCo 原生默认为1e-8。ls_parallel默认False将线搜索切换为并行执行以少量精度代价换取性能提升——启用时需要同步调高ls_iterations文档建议比串行时大约提高 50%以维持良好仿真行为KaminoP-ADMM 具有独立的原残差容差padmm_primal_tolerance、对偶残差容差padmm_dual_tolerance、互补残差容差padmm_compl_tolerance三者默认均为1e-6并以padmm_max_iterations默认200封顶。支持加速padmm_use_acceleration默认True与热启动padmm_warmstart_mode默认containers可选none/internal/containers均可调PhysX 侧迭代数默认值同样在 physx_manager_cfg.py 中有完整定义。需要注意PhysX 的迭代数同时受 USD 资产上每个 actor 自身声明的迭代数影响solver takes the number of iterations specified by the actor with the highest iteration and clamps it而 MJWarp 的收敛是全局容差驱动的。关节坐标表示reduced vs maximal求解器坐标表示PhysX TGSreduced-coordinate关节空间类 Featherstone。关节状态是唯一真值刚体位姿通过前向运动学FK派生MJWarpreduced-coordinate由 MuJoCo 求解器计算Kaminomaximal-coordinate每个刚体拥有独立的自由体状态约束通过 Baumgarte 稳定化施加。状态写入后的重置reset会经过专用的 FK passKaminoSolverCfg.use_fk_solver默认True使 maximal 刚体位姿与写入的 reduced 关节状态保持一致从 kamino_manager_cfg.py 源码注释看use_fk_solver被标记为 Required for proper environment resets——这是 maximal 坐标求解器在 Isaac Lab 中正常工作的关键前提除非有任务专属的重置路径否则应保持开启。移植提示Kamino 对不一致的重置状态更敏感——关节位置与刚体位姿必须一致。Isaac Lab 的资产写入路径已处理这一点但自定义重置代码可能破坏这一约束迁移到 Kamino 时必须重点验证 reset 行为。子步进与时间步长Newton 的核心调参旋钮求解器子步进模型PhysX TGS直接按仿真dt运行无外部子步进计数器内部子步进按 actor 进行MJWarp顶层NewtonCfg.num_substeps默认1控制每个 Isaac Lab 步内执行的求解器子步数有效求解器dt为SimulationCfg.dt / num_substepsKamino使用同一个NewtonCfg.num_substeps旋钮。已验证的 Kamino 任务预设通常使用 1–2 个子步接触密集型任务预期需要调高num_substeps的语义在 newton_manager_cfg.py 中定义为 Number of substeps to use for the solver并在 MJWarp 求解器页 中补充说明调大该值可以在两个子步之间不要求 Isaac Lab 处理数据的情况下进行降频decimate对隐式执行器implicit actuators等场景有价值。移植提示PhysX → Newton 迁移时接触密集任务通常至少需要 1–2 个子步操作类任务可能需要更多这是解决穿透与抖动最直接的手段。GPU 缓冲与吞吐预分配策略对比求解器内存模型PhysX TGS构造时静态分配 GPU 缓冲。缓冲不足会导致崩溃或在规模扩大时静默丢失接触——PhysX 会打印[PhysX]警告应视作硬失败并重新调整。相关gpu_*旋钮gpu_max_rigid_contact_count默认2**23、gpu_max_rigid_patch_count默认5 * 2**15、gpu_found_lost_pairs_capacity默认2**21等详见 PhysX 配置页MJWarp按环境environment预分配上限MJWarpSolverCfg.njmax默认300约束行数与nconmax默认None接触点数。其余状态存放于动态扩容的 Warp 数组。njmax过大拖慢仿真、过小会丢失约束需按任务接触规模设定Kamino继承 MJWarp 经 Newton 的预分配模式另在使用内部碰撞检测器时带有独立的接触对分配器KaminoSolverCfg.collision_detector_max_contacts_per_pair默认NonePhysX GPU 缓冲无法动态增长这一特性在 physx_manager_cfg.py 的类文档中有明确说明默认值按几百环境的 locomotion 任务调优大规模数千环境操作任务通常需要抬高各gpu_*容量。迁移检查清单跨求解器移植的六步验证当把一个任务从一个求解器迁移到另一个求解器时官方对比文档 建议按如下顺序执行重新验证接触行为先用最小num_envs配合可视化器运行任务在扩大规模前观察是否出现新的穿透penetration或抖动jitter。重调摩擦PhysX 的 patch 摩擦与 MJWarp 的逐接触点摩擦在相同摩擦系数下不可互换必须按上一节摩擦模型的说明调整。重调恢复系数MJWarp/Kamino 没有弹跳阈值门控需要降低逐材质恢复系数来抑制抖动。选择子步数PhysX → Newton 时接触密集任务至少需要 1–2 个子步操作任务可能需要更多。留意 CCD 差异依赖 PhysX swept CCD 的任务在 Newton 上应缩短dt或调高num_substeps。Kamino 专属项额外验证重置行为若关节或接触约束出现漂移考虑调整 Baumgarte 增益constraints_alpha/constraints_beta/constraints_gamma。实战如何在任务中切换求解器在 Isaac Lab 中求解器通过SimulationCfg.physics选择多后端任务将其声明为 HydraPresetCfg。以官方 Cartpole 直接式任务为例cartpole_env_cfg.py同一任务并列声明了default/physx/newton_mjwarp/newton_kamino/ovphysx五个后端预设from isaaclab_physx.physics import PhysxCfg from isaaclab_newton.physics import KaminoSolverCfg, MJWarpSolverCfg, NewtonCfg from isaaclab_ovphysx.physics import OvPhysxCfg configclass class CartpolePhysicsCfg(PresetCfg): default: PhysxCfg PhysxCfg() physx: PhysxCfg PhysxCfg() newton_mjwarp: NewtonCfg NewtonCfg( solver_cfgMJWarpSolverCfg( njmax5, nconmax3, conepyramidal, impratio1, integratorimplicitfast, ), num_substeps1, debug_modeFalse, use_cuda_graphTrue, ) newton_kamino: NewtonCfg NewtonCfg( solver_cfgKaminoSolverCfg( integratormoreau, use_collision_detectorTrue, sparse_jacobianTrue, constraints_alpha0.1, padmm_max_iterations100, padmm_primal_tolerance1e-4, padmm_dual_tolerance1e-4, padmm_compl_tolerance1e-4, padmm_rho_00.05, padmm_eta1e-5, padmm_use_accelerationTrue, padmm_warmstart_modecontainers, padmm_contact_warmstart_methodgeom_pair_net_force, padmm_use_graph_conditionalsFalse, collision_detector_pipelineunified, collision_detector_max_contacts_per_pair8, ), num_substeps1, debug_modeFalse, use_cuda_graphTrue, ) ovphysx: OvPhysxCfg OvPhysxCfg()这个预设本身就是一份高质量的求解器调参范本印证了本文各节的结论Cartpole 接触极简因此 MJWarp 预设把njmax压到 5、nconmax压到 3预分配越小越快而 Kamino 预设使用use_collision_detectorTruecollision_detector_pipelineunifiedcollision_detector_max_contacts_per_pair8对应接触检测一节中 Kamino 内部检测器的用法。Kamino 预设采用integratormoreau、sparse_jacobianTrue、padmm_contact_warmstart_methodgeom_pair_net_force与文档所述已验证预设一致同时把三个 P-ADMM 容差放宽到1e-4、padmm_max_iterations100、padmm_rho_00.05体现了小规模任务少迭代、宽容差的实际取向。constraints_alpha0.1比默认0.01高一个量级用于收紧关节双边约束。命令行切换求解器的方式有两种无需额外分隔符直接追加在常规参数之后# 全局切换任务配置中所有匹配的 physics preset 字段都解析为 newton_kamino ./isaaclab.sh train --rl_library rsl_rl --taskIsaac-Cartpole-v0 physicsnewton_kamino # 定点切换只覆盖单个字段 env.sim.physics ./isaaclab.sh train --rl_library rsl_rl --taskIsaac-Cartpole-v0 env.sim.physicsnewton_kamino先跑通 Newton 基线再叠加 Kamino详见 Kamino 求解器页 的启动流程# 1) 先用 MJWarp 验证任务在 Newton 后端可构建、可运行 ./isaaclab.sh -p scripts/environments/zero_agent.py --task Isaac-Cartpole-Direct-v0 --num_envs 128 --viz newton physicsnewton_mjwarp # 2) 再切换到 Kamino 预设仅对已定义 newton_kamino 预设的任务生效 ./isaaclab.sh -p scripts/environments/zero_agent.py --task Isaac-Cartpole-Direct-v0 --num_envs 128 --viz newton physicsnewton_kamino截至本文撰写时newton_kamino预设仅定义于Isaac-Cartpole-Direct-v0、Isaac-Ant-Direct-v0、Isaac-Cartpole-v0与Isaac-Ant-v0四个任务对其他任务传入physicsnewton_kamino不会自动启用 Kamino任务必须自行定义并验证专属预设。Kamino 目前是 Beta 功能对资产结构有额外要求与 MuJoCo-Warp 或 PhysX 兼容的资产仍可能需要更新模型结构后才能被 Kamino 消费接触密集任务还需要各自的碰撞模式、子步数与 P-ADMM 迭代/容差设置应从最接近的已验证预设出发再行调整。进一步阅读物理后端总览后端选择、特性支持矩阵与PresetCfg声明方式PhysX 配置页PhysxCfg常用参数与 GPU 缓冲调优MJWarp 求解器页njmax/nconmax/ls_iterations/cone/ls_parallel/impratio的详细语义与示例配置Kamino 求解器页Kamino 全部参数分组说明与调参工作流源码参考physx_manager_cfg.py、newton_manager_cfg.py、mjwarp_manager_cfg.py、kamino_manager_cfg.py【免费下载链接】IsaacLabUnified framework for robot learning with multi-physics/renderer support项目地址: https://gitcode.com/GitHub_Trending/is/IsaacLab创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门