Newton#
Newton 是 Warp 原生后端,可在不安装 Isaac Sim 的情况下运行。它在 Isaac Lab 中支持多个求解器系列。使用 NewtonCfg 配置后端,并通过其 solver_cfg 字段选择求解器配置。
请查看任务的 --help 或 环境目录,确认受支持的预设。为新资产调参前,请先阅读 为 Newton MJWarp 准备资产。
求解器选项#
下列链接介绍 Isaac Lab 的配置与调优。Newton 的 求解器指南 说明算法、功能和接触模型;Isaac Lab 的 API 参考列出配置字段及默认值。
其他求解器配置包括 XPBDSolverCfg 和 FeatherstoneSolverCfg 。评估任务特有的预设时,请查阅它们的自动生成 API 参考和 Newton 求解器指南。
访问原生接口#
当共享的资产和传感器 API 未提供所需数据或操作时,可使用原生访问接口。如果 Isaac Lab 持有的句柄已覆盖所需对象,请直接复用;只有需要额外功能时才创建底层访问对象。原生写入可能绕过 Isaac Lab 的缓存和校验,因此须遵循下述所有权与同步规则。
基本概念#
Newton 后端通过 isaaclab_newton.physics.NewtonManager 暴露引擎持有的 Model 、 State 、 Control 和可选的 Contacts 对象。它们的 Warp 数组就是引擎实时数据,而非读取到单独的各资源视图缓冲区中的副本。模型持有结构、静态数组和标签,状态持有随仿真演化的数组,控制对象持有驱动输入。接触对象是可选的,取决于当前求解器和碰撞路径。
生命周期前提#
在仿真上下文初始化物理后端并构建模型之后,才能访问 Newton 数据。模型重建后,应将现有对象视为失效,并在 Isaac Lab 重新初始化仿真后重新获取。此 API 面向能够承担必要生命周期管理和同步责任的代码。
复用 Isaac Lab 持有的访问对象#
使用仿真管理器实例 sim.backend_manager 的访问方法获取当前 Newton 对象:
backend_manager = sim.backend_manager
model = backend_manager.get_model()
state = backend_manager.get_state_0()
control = backend_manager.get_control()
contacts = backend_manager.get_contacts()
body_poses = state.body_q
joint_forces = control.joint_f
isaaclab_newton.physics.NewtonManager.get_model() 返回当前 Newton 物理模型;Newton 后端尚未构建模型时返回 None。可视化器用于渲染的模型不会通过此接口返回。本节的写入语义仅适用于 Newton 作为当前物理后端并管理权威物理状态的情况。
Isaac Lab 使用 Newton 后端的资源暴露同一种通用 newton.selection.ArticulationView 选择辅助对象。例如,复用关节体的根选择,而不是再次构建相同选择:
robot = scene["robot"]
selection = robot.root_view
joint_positions = selection.get_dof_positions(state)
Newton 对 Isaac Lab 关节体、刚体对象、刚体对象集合和线缆使用这一通用的基于标签的选择方式。它是模型索引上的选择辅助对象,不是各资源专用的类型化存储。
创建底层访问#
持有匹配模型的代码,可以根据模型和标签模式构建自己的选择:
from newton.selection import ArticulationView
selection = ArticulationView(
model,
pattern="/World/envs/env_*/Robot",
)
读写语义#
选择对象既提供类型化便捷方法,也提供以字符串为键的通用 get_attribute() 和 set_attribute() 方法。通用方法暴露没有专门选择方法的引擎属性。如果希望写入保持显式,应先克隆选定的值,再进行修改:
import warp as wp
from newton import ModelFlags
rolling_friction = wp.clone(
selection.get_attribute("shape_material_mu_rolling", model)
)
# Modify rolling_friction with a Warp kernel before writing it back.
selection.set_attribute(
"shape_material_mu_rolling",
model,
rolling_friction,
)
sim.backend_manager.add_model_change(ModelFlags.SHAPE_PROPERTIES)
这里的字符串指定的是 Newton 模型属性,而非 Isaac Lab 字段。示例选择滚动摩擦,是因为它没有专用的选择方法。请用与所修改属性对应的标志通知管理器;修改其他模型属性时可能需要不同标志。如果写入状态改变了广义坐标,则需通过 sim.backend_manager.invalidate_fk() 和 sim.backend_manager.forward() 同步正运动学。
所有权、同步与失效#
直接写入会绕过 Isaac Lab 缓存,以及形状与顺序验证。部分 Newton 求解器会交换当前与下一状态缓冲区,因此后续步中需要当前实际状态时,应重新调用 isaaclab_newton.physics.NewtonManager.get_state_0() 。选择对象描述模型索引,所以可以跨状态缓冲区交换继续使用,但模型重建后必须重新创建。广义坐标和最大坐标的约定仍以具体求解器为准。