Newton#
Newton 是 Warp 原生后端,可在不安装 Isaac Sim 的情况下运行。它在 Isaac Lab 中支持多个求解器系列。使用 NewtonCfg 配置后端,并通过其 solver_cfg 字段选择求解器配置。
任务和组件支持范围取决于具体任务。当前可用预设请查看任务的 --help 和 环境目录 ;存在某个求解器配置,并不意味着任务支持它。调整新资产或任务之前,请先阅读 为 Newton MJWarp 准备资产 。
求解器选项#
下列链接介绍 Isaac Lab 配置和工作流程。求解器公式、功能支持及接触模型,请查阅 Newton 的 求解器指南 及其链接的求解器参考。配置字段和默认值仍以自动生成的 Isaac Lab API 为准。
其他求解器配置包括 XPBDSolverCfg 和 FeatherstoneSolverCfg 。评估任务特有的预设时,请查阅它们的自动生成 API 参考和 Newton 求解器指南。
访问原生接口#
基本概念#
Newton 后端通过 isaaclab_newton.physics.NewtonManager 暴露引擎持有的 Model 、 State 、 Control 和可选的 Contacts 对象。它们的 Warp 数组就是引擎实时数据,而非读取到单独的各资源视图缓冲区中的副本。模型持有结构、静态数组和标签,状态持有随仿真演化的数组,控制对象持有驱动输入。接触对象是可选的,取决于当前求解器和碰撞路径。
生命周期前提#
在仿真上下文初始化物理后端并构建模型之后,才能访问 Newton 数据。模型重建后,应将现有对象视为失效,并在 Isaac Lab 重新初始化仿真后重新获取。此 API 面向能够承担必要生命周期管理和同步责任的代码。
复用 Isaac Lab 持有的访问对象#
通过管理器访问器获取当前 Newton 对象:
from isaaclab_newton.physics import NewtonManager
model = NewtonManager.get_model()
state = NewtonManager.get_state_0()
control = NewtonManager.get_control()
contacts = NewtonManager.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
from isaaclab_newton.physics import NewtonManager
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,
)
NewtonManager.add_model_change(ModelFlags.SHAPE_PROPERTIES)
字符串指定的是 Newton 模型属性,不是 Isaac Lab 字段。本例使用滚动摩擦,因为它没有专门的选择方法。根据修改的属性,使用适当的标志通知管理器;其他模型写入可能需要不同标志。如果状态写入改变广义坐标,则需要通过 NewtonManager.invalidate_fk() 和 NewtonManager.forward() 同步正向运动学。
所有权、同步与失效#
直接写入会绕过 Isaac Lab 缓存,以及形状与顺序验证。部分 Newton 求解器会交换当前与下一状态缓冲区,因此后续步中需要当前实际状态时,应重新调用 isaaclab_newton.physics.NewtonManager.get_state_0() 。选择对象描述模型索引,所以可以跨状态缓冲区交换继续使用,但模型重建后必须重新创建。广义坐标和最大坐标的约定仍以具体求解器为准。