求解器过渡#
过渡到 Newton 物理引擎引入了使用不同数值方法处理模拟的新物理求解器。尽管 Newton 支持几种不同的求解器,但我们在 Isaac Lab 中的最初关注点是使用 Google DeepMind 的 MuJoCo-Warp 求解器。
物理场景本身的定义方式不会改变 - 我们继续使用 USD 作为设置场景中对象和机器人基本参数的主要方式,并且对于目前的环境,使用与基于 PhysX 的 Isaac Lab 使用的完全相同的 USD 文件。未来可能会发生变化,因为正在开发捕获额外物理参数的新 USD 模式。
需要更改的是某些特定求解器设置的配置方式。调整这些参数对模拟性能和行为都可能产生重大影响。
目前,我们将展示设置这些参数的示例,以帮助了解这些变化。请注意, NewtonCfg
代替了 PhysxCfg
并且用于设置与物理模拟参数相关的所有内容,除了 dt
之外:
from isaaclab.sim._impl.newton_manager_cfg import NewtonCfg
from isaaclab.sim._impl.solvers_cfg import MJWarpSolverCfg
solver_cfg = MJWarpSolverCfg(
nefc_per_env=35,
ls_iterations=10,
cone="pyramidal",
ls_parallel=True,
impratio=1,
)
newton_cfg = NewtonCfg(
solver_cfg=solver_cfg,
num_substeps=1,
debug_mode=False,
)
sim: SimulationCfg = SimulationCfg(dt=1 / 120, render_interval=decimation, newton_cfg=newton_cfg)
这里是上述一些关键参数的非常简要解释:
nefc_per_env
: 这是我们希望 MuJoCo warp 为给定环境预先分配的约束缓冲区的大小。较大的值会降低模拟速度,而过小的值可能导致一些接触被忽略。ls_iterations
: MuJoCo Warp 求解器执行的线搜索次数。线搜索用于找到最佳步长,在每次求解器步长时,最多会执行ls_iterations
次线搜索。将此数字保持较低对于性能是重要的。当未设置ls_parallel
时,此数字也是一个上限。cone
: 此参数提供了在接触处理中使用的摩擦锥的金字塔形和椭圆形逼近之间的选择。请查看 MuJoCo 文档以获取有关接触的额外信息:https://mujoco.readthedocs.io/en/stable/computation/index.html#contactls_parallel
: 将线搜索从迭代执行切换到并行执行。启用ls_parallel
可以提供性能提升,但会牺牲一些模拟稳定性。在启用ls_parallel
时,需要较高的ls_iterations
设置以确保良好的模拟行为。通常在禁用ls_parallel
时,最好将ls_iterations
设置增加约50%。impratio
: 这是摩擦到法向约束阻抗比率,可实现对切向力与法向力重要性的更精细控制。更多关于如何调整此参数(和 cone)的信息可以在 MuJoCo 文档中找到: https://mujoco.readthedocs.io/en/stable/XMLreference.html#option-imprationum_substeps
: 运行模拟时执行的子步数。将其设置为大于1的数字允许在两个子步之间不需要 Isaac Lab 处理数据进行模拟。例如,在使用隐式执行器时,这可能很有价值。
一个更详细的过渡指南,涵盖所有可用参数并描述调整方法,将在即将发布的版本中提供。