MJWarp 调优#
本指南适用于 Newton 后端已能构建资产和任务之后的 MuJoCo-Warp(MJWarp)求解器调优。所有配置字段及其当前默认值,以 NewtonCfg 和 MJWarpSolverCfg 的自动生成 API 文档为准。
先决条件#
先按照 为 Newton MJWarp 准备资产 准备资产,再用固定的初始状态、随机种子和动作序列复现一个故障。修改求解器设置前,检查机械模型、碰撞几何、重置时的重叠、执行器限制及不受支持的功能。求解器设置无法修复无效资产或控制器。
参考持续维护的任务配置来了解相似负载,不要直接照搬其中的默认值。例如,可以比较规模较小的 Cartpole 配置 与接触密集的 Allegro Hand 配置 。只有验证新任务的重置分布和接触分布后,才能判断这些参数值是否适用。
建立明确的基准配置#
在任务配置中明确写出所选求解器、积分方法、时间步长、子步数和诊断设置。下面只是一个基准配置示例;应根据任务测量并设置接触容量,不要把省略的值或仓库中的配置值当作通用值。
from isaaclab.sim import SimulationCfg
from isaaclab_newton.physics import MJWarpSolverCfg, NewtonCfg
solver_cfg = MJWarpSolverCfg(solver="newton", integrator="implicitfast")
newton_cfg = NewtonCfg(
solver_cfg=solver_cfg,
num_substeps=1,
debug_mode=True,
)
sim_cfg = SimulationCfg(dt=1 / 120, physics=newton_cfg)
每次只改变一个变量;改变前记录固定状态下的行为、警告、接触数、穿透、滑移、任务指标和运行耗时。只有确认求解器容量覆盖完整的重置、指令和随机化分布后,才关闭 debug_mode 。
确定接触与约束容量#
nconmax 限制每个环境的接触点数量; njmax 限制每个环境的约束行数。一个接触可能占用多行,关节限位、驱动、等式约束和 mimic 约束也会占用约束行。因此,不能直接从 nconmax 推导 njmax 。
当诊断显示溢出、密集状态下接触消失,或行为随物体数量改变时,增加对应容量。测量各种重置和随机化场景的最坏情况,为任务预留余量,再验证相同的固定状态结果仍然稳定。增加容量无法修复错误的碰撞几何、接触材料或收敛问题。
选择时间步长与子步数#
每个求解器子步的时长为 SimulationCfg.dt / NewtonCfg.num_substeps 。先选择控制器能适应的策略周期;当驱动刚度高、物体轻、存在冲击或接触密集而导致不稳定时,再比较更小的 dt 或更多子步。子步数不会改变策略周期 SimulationCfg.dt * env.decimation 。
使用相同的物理指标和固定状态复现场景比较每种候选配置。不要仅为掩盖不稳定的物理步而改变策略的控制降采样倍数。
验证收敛#
诊断期间保持 NewtonCfg.debug_mode 开启。它会报告每个环境的求解迭代统计,并在环境达到 iterations 上限时发出警告。只有模型、重置、接触路径和容量均已验证后,才根据达到上限的情况或可复现的指标,扫描 iterations 、 ls_iterations 或 tolerance 。
每次扫描一项收敛限制,在物理和任务指标不再改善时停止。更多迭代无法弥补错误惯量、重置时的穿透、缺失的碰撞几何、不受支持的约束或过高的驱动刚度。
调整摩擦与接触行为#
修改全局摩擦设置前,验证碰撞体、接触位置、法向力、材料摩擦和 condim 。 cone 选择 MuJoCo 的摩擦锥表示;如果接触模型在物理上合理却仍有滑移,而且增加的开销可以接受,可测试椭圆摩擦锥。 impratio 调整摩擦阻抗相对于法向阻抗的比例。两者都会改变接触模型;每次修改后都应重新检查穿透、滑移、能量、收敛、任务成功率和运行耗时。
不要用 impratio 掩盖接触缺失、材料摩擦错误、夹爪驱动力不足或控制器松开抓取等问题。底层接触模型见 MuJoCo 接触文档 和 选项参考 。
选择接触管线#
最简单的基准配置采用 use_mujoco_contacts=True 。它选择 MuJoCo 的内置碰撞检测,不能与 collision_cfg 同时使用。
仅在任务需要 Newton 碰撞管线时,才设置 use_mujoco_contacts=False ,例如使用非凸网格、SDF 或水弹性接触。为 NewtonCfg 配置 NewtonCollisionPipelineCfg ,再根据实测溢出或接触缺失调整碰撞缓冲区容量。 collision_decimation 仅在使用此管线且求解器子步数大于一时有作用。对于变化快的接触,先提高接触刷新频率,再考虑减少计算量以改善性能。
验证后再优化性能#
任务在完整分布下稳定运行后,测量每项修改的开销,只保留能改善已记录结果的修改。逐项减少多余的容量、线搜索计算、碰撞刷新、子步和状态同步频率。
ccd_iterations 是 GJK/EPA 碰撞算法的收敛迭代上限,并非 PhysX 式连续碰撞检测的开关。仅在出现警告或可复现的复杂几何碰撞故障时增加它。在验证重置、Newton 侧状态写入、接触报告和传感器之前,保持 update_data_interval=1 ;更大的间隔能减少同步计算,但可能让数据过时。 save_to_mjcf 、 use_mujoco_cpu 和 disable_contacts 是诊断工具,不是生产环境的调优目标。
先诊断、后调优的顺序是:验证模型和固定的复现场景;选择时间步长和子步数;确定容量;验证收敛;调整接触行为和接触管线;最后优化实测开销。