中文内容
物理学构成了机器人仿真的基础,使运动和交互的真实建模成为可能。对于行走和操作等任务,仿真器必须处理接触力和可变形物体等复杂动力学。虽然大多数引擎会在速度和真实感之间取舍,但 Newton——一款 GPU 加速的开源仿真器——旨在同时兼顾二者。
在 NVIDIA GTC 2026 上发布的 Newton 1.0 GA,正在为灵巧操作和行走任务提供加速且可用于生产的基础。作为一款基于 NVIDIA Warp 和 OpenUSD 构建的可扩展物理引擎,机器人可以在使用 NVIDIA Isaac Lab 和 NVIDIA Isaac Sim 等框架时,以更高的精度、速度和可扩展性学习如何处理复杂任务。
Newton 是一个模块化框架,在统一架构下汇集了多个求解器和仿真组件。它并不绑定于单一场景格式,而是支持涵盖 MJCF、URDF 和 OpenUSD 等常见机器人描述的广泛运行时数据模型,从而更容易连接现有机器人资产和工作流。团队可以混合搭配碰撞检测、接触模型、传感器、控制和求解器后端——包括刚体和可变形求解器以及自定义求解器——同时为机器人学习和开发保持一致的仿真栈。

本次发布的亮点包括:
- 稳定的 API:Newton API 为仿真中的建模、求解、控制和传感等广泛功能提供了稳定、统一的接口。
- 多功能刚体求解器:Newton 随附多个刚体求解器。MuJoCo 和 Kamino 具备最先进且互补的能力:由 Disney Research 开发的 Kamino 可处理复杂机构,例如带有闭环连杆和被动驱动的机器人手和足式系统。它实现了一类新的仿真能力,使机械设计师能够自由设计系统,而无需担心可仿真性,同时为可扩展的强化学习铺平道路。MuJoCo 3.5(MJWarp)基于机器人社区已信赖的 MuJoCo 的稳定性和准确性而构建;MuJoCo 由 Google DeepMind 开发,现在已扩展到 GPU 规模吞吐量,可支持数千个并行训练环境。新的优化使 MuJoCo Warp 在 NVIDIA RTX PRO 6000 Blackwell Series 上相较 MJX,在移动任务中加速 252 倍,在操作任务中加速 475 倍。
- 丰富的可变形仿真:在 Vertex Block Descent(VBD)求解器的驱动下,Newton 可处理线性可变形体(线缆)、薄型可变形体(布料)和体积可变形体(橡胶部件),覆盖真实工业场景中常见的材料。此外,隐式物质点法(iMPM)可处理适用于崎岖地形运动场景的粒子仿真(颗粒材料)。VBD 和 MPM 求解器可以与 MuJoCo Warp 显式耦合,以支持机器人系统中的可变形体操作和运动场景。
- 碰撞库:一个灵活且快速的碰撞检测流水线,能够根据场景复杂度选择合适的宽相和窄相检测方法。该流水线可复用,并可加速自定义求解器开发。该库包含先进的接触生成与建模:基于有符号距离场(SDF)的碰撞可直接从 CAD 导出的网格中捕捉复杂几何形状,无需使用网格近似方法。这对于连接器插入或手内操作等高公差要求任务至关重要。受 Drake 接触模型启发的 Hydroelastic contacts,使用跨有限面积接触斑块的连续压力分布,而不是一组接触点。这提供了触觉感知和操作策略所需的更高保真度、更稳健的物体交互,最终实现更好的 sim-to-real
- OpenUSD 与 Isaac 集成:借助 OpenUSD 作为通用数据层,Newton 可与 NVIDIA Isaac Sim 6.0 和 Isaac Lab 3.0 早期访问版本原生集成,从而在强化学习和模仿学习工作流中,实现从机器人描述到训练后策略及评估流水线的更快速工作流。
- 平铺相机传感器:基于 Warp 的平铺相机传感器支持高吞吐量的简化渲染,并提供 RGB、深度、反照率、表面法线和实例分割等通道。它旨在扩展基于视觉的 RL 策略,使端到端感知训练流水线能够在 NVIDIA DGX 平台上运行。该渲染后端基于光线追踪,并支持多种场景表示,包括三角网格和 Gaussian splats。
Newton 是一个由 NVIDIA、Google DeepMind 和 Disney Research 创立的 Linux Foundation 项目。物理 AI 仿真基础设施领域的领先者 Lightwheel 已与 Newton 联手,推进求解器校准、定义 SimReady 标准,并开发下一代具有物理基础的 SimReady 资产。Drake 物理引擎的开发者 Toyota Research Institute(TRI)也正与 Newton 合作,推进求解器开发和接触建模能力。
下一节将介绍这些能力如何在运动和操作工作流中结合起来。
使用 Kamino 模拟复杂机构
Kamino 求解器能够处理复杂而精细的闭链机构,例如包含平行连杆机构等运动学结构的机器人。这使得多连杆行走机器人等机构的模拟成为可能,其运动学结构可以在每条腿中包含多个闭环。Dr. Legs 就是一个示例,它是 Newton 资产库中提供的闭链机器人腿部机构,展示了 Kamino 如何处理具有多个闭环的关节结构。
Newton 工作流遵循一致的模式:构建或导入模型,初始化状态,应用控制(例如关节目标或力),并推进 Kamino 等求解器以演进物理仿真,结果通过查看器进行可视化。
import newton
# Import the articulation model from USD
builder = newton.ModelBuilder()
# Register attributes to be parsed specific to Kamino
newton.solvers.SolverKamino.register_custom_attributes(builder)
# Import USD asset
builder.add_usd("robot.usd")
# Finalize the model (upload to GPU)
model = builder.finalize()
# Create Kamino solver
solver = newton.solvers.SolverKamino(model)
# Create state and control objects
state_0 = model.state()
state_1 = model.state()
control = model.control()
contacts = model.contacts()
# Simulation loop
for i in range(num_steps):
state_0.clear_forces()
model.collide(state_0, contacts)
# Forward dynamics
solver.step(state_0, state_1,
control, contacts, sim_dt)
# Swap states
state_0, state_1 = state_1, state_0
使用 Newton 和 Isaac Lab 的操作工作流

NVIDIA Isaac Lab 是一个用于机器人学习的开源框架。研究人员和开发者可以定义仿真环境,设置强化学习(RL)和模仿学习流程,并以 GPU 规模训练策略。用户定义场景(机器人、物体、地形)、MDP(观测、动作、奖励、终止条件)以及仿真后端。Newton 作为新的物理和相机传感器后端与 Isaac Lab 集成,进一步扩展了 Isaac Lab 的能力。
在 Isaac Lab 的 RL 工作流中,物理层之上的所有内容——任务定义、PPO 训练循环、观测和奖励函数——都保持不变。只有仿真后端发生变化。这意味着开发者可以一次性编写环境,并在不同物理引擎中对其进行验证,从而在真实世界部署之前增强对策略鲁棒性的信心。
Newton 和 Isaac Lab 可以共同构建一个 RL 流水线,用于训练 Franka 机器人抓取立方体物体。场景配置完成后,配置物理设置。以下示例展示了 Isaac Lab 如何在 Franka 机器人立方体操作环境中使用三层物理配置。
from isaaclab.sim import SimulationCfg
from isaaclab_newton.physics import NewtonCfg, MJWarpSolverCfg
# Configure Newton MJWarp simulation for the Franka Cube Env
FrankaCubeEnvCfg.solver_cfg = MJWarpSolverCfg(
solver="newton",
integrator="implicitfast",
njmax=2000,
nconmax=1000,
impratio=1000.0,
cone="elliptic",
update_data_interval=2,
iterations=20,
ls_iterations=100,
ls_parallel=True,
)
FrankaCubeEnvCfg.newton_cfg = NewtonCfg(
solver_cfg=FrankaCubeEnvCfg.solver_cfg,
num_substeps=2,
debug_mode=False,
)
FrankaCubeEnvCfg.sim = SimulationCfg(
dt=1 / 120,
render_interval=FrankaCubeEnvCfg.decimation,
physics=FrankaCubeEnvCfg.newton_cfg,
)
所有其他步骤,例如应用动作、获取奖励和重置环境,都保持不变。
Newton 如何应用于工业场景
以下两个示例展示了 Newton 的能力如何在生产机器人工作流中协同发挥作用。一个侧重于刚体精密装配,另一个侧重于可变形材料的灵巧操作。
GPU 机架组装自动化
Skild AI 正在为其工业终端用户训练用于 GPU 机架组装的强化学习策略,这是电子制造中对接触要求最严苛的任务之一。连接器插入、电路板放置和紧固需要稳定的碰撞与接触、可靠的力反馈,以及大多数仿真器无法在训练规模下提供的全保真几何表示。
Skild 正在将采用 Newton 后端的 Isaac Lab 用于其电子组装自动化任务。在他们的工作流中,基于 SDF 的碰撞检测和流体弹性接触建模被用于绕过 MuJoCo Warp 原生的碰撞与接触管线,从而实现更高的接触保真度。形状使用由原始 CAD 几何构建的预计算 SDF 进行配置,使 Newton 能够在非凸三角网格模型上运行,从而准确表示组装部件的几何形状。
SDF 碰撞适用于具有复杂几何形状的刚性、非柔顺交互,能够针对连接器、电路板和其他公差严格的部件进行精确的接触查询。
为了实现更丰富的接触动力学,水弹性建模引入了柔顺性,从而产生分布式压力接触,而不是点接触近似。这会形成更大的接触区域,能够捕捉摩擦行为,包括在复杂物体操作序列中可能出现的扭转摩擦效应。SDF 几何表示与水弹性接触模型共同提供了训练策略所需的保真度,使其能够可靠地迁移到真实的工业装配系统中。
以下代码片段展示了如何配置 SDF 碰撞和水弹性接触:
import newton
from newton.geometry import HydroelasticSDF
# --- 1. Shape configuration: enable hydroelastic contact ---
shape_cfg = newton.ModelBuilder.ShapeConfig(
mu=1.0, # friction coefficient
gap=0.01, # contact detection margin [m]
ke=5.0e4, # elastic contact stiffness (MJWarp fallback)
kd=5.0e2, # contact damping
kh=1.0e11, # hydroelastic stiffness [Pa/m] — controls
# pressure vs. penetration across the contact patch
)
# --- 2. Build SDF on each collision mesh ---
# Precompute a sparse signed-distance field so Newton can find
# sub-voxel contact surfaces via marching cubes at runtime.
for mesh in assembly_meshes:
mesh.build_sdf(
max_resolution=128, # SDF grid resolution
narrow_band_range=(-0.01, 0.01), # ±10 mm band around surface
margin=shape_cfg.gap,
)
# --- 3. Mark shapes as hydroelastic ---
# When both shapes in a colliding pair carry this flag, Newton
# routes them through the SDF-hydroelastic pipeline instead of
# MJWarp's native point-contact solver.
for shape_idx in range(builder.shape_count):
builder.shape_flags[shape_idx] |= newton.ShapeFlags.HYDROELASTIC
# --- 4. Create the collision pipeline with hydroelastic config ---
collision_pipeline = newton.CollisionPipeline(
model,
reduce_contacts=True, # contact-reduction for stable solving
broad_phase="explicit", # precomputed shape pairs (few shapes)
sdf_hydroelastic_config=HydroelasticSDF.Config(
output_contact_surface=False, # skip surface mesh export
),
)
# --- 5. Simulation loop (unchanged from standard Newton) ---
# The solver receives distributed contact patches transparently.
collision_pipeline.collide(state, contacts)
solver.step(state_0, state_1, control, contacts, dt)
用于冰箱装配的线缆操作
Samsung 将使用 Newton 生成具有物理基础的合成数据(SDG),用于训练其视觉-语言-动作(VLA)模型。
Lightwheel 正在应用 Newton 生成适用于 Newton 的 SimReady 资产,并基于真实世界测量和验证进行适当调优。这使其能够支持多种复杂的工业装配任务,包括 Samsung 制造工作流程中的线缆操作任务。线缆是最难可靠模拟的物体之一,它们表现出复杂的一维可变形行为、自碰撞以及依赖力的形状变化,而经典求解器无法准确捕捉这些特性。
Samsung 和 Lightwheel 的工作展示了 Newton 的可变形仿真栈如何覆盖从线缆到体积实体的范围,从而支持在真实电子装配线上所见全范围材料上的合成数据生成和策略训练。
Newton 的 VBD 求解器支持模拟线缆等线性可变形体。与 MuJoCo Warp 等刚体求解器进行双向耦合,使机器人运动能够在仿真过程中与线缆变形发生物理交互。结合 Newton 稳定的碰撞处理和高保真接触建模,这一设置能够模拟诸如将冰箱水管连接器插入其外壳等任务。该代码片段展示了 VBD 与 MuJoCo Warp 如何耦合。
import warp as wp
import newton
from newton.solvers import SolverMuJoCo, SolverVBD
# --- Universe A: MuJoCo rigid-body robot ---
robot_model = robot_builder.finalize()
mj_solver = SolverMuJoCo(
robot_model,
solver="newton",
integrator="implicitfast",
cone="elliptic",
iterations=20,
ls_iterations=10,
ls_parallel=True,
impratio=1000.0,
)
robot_state_0 = robot_model.state()
robot_state_1 = robot_model.state()
control = robot_model.control()
mj_collision_pipeline = newton.CollisionPipeline(
robot_model,
reduce_contacts=True,
broad_phase="explicit",
)
mj_contacts = mj_collision_pipeline.contacts()
# --- Universe B: VBD deformable cable ---
cable_builder = newton.ModelBuilder()
cable_builder.add_rod(
positions=cable_points, # polyline vertices [m]
quaternions=cable_quats, # parallel-transport frames
radius=0.003, # cable cross-section radius [m]
stretch_stiffness=1e12, # EA [N]
bend_stiffness=3.0, # EI [N*m^2]
stretch_damping=1e-3,
bend_damping=1.0,
)
# --- Proxy bodies: robot links mirrored into VBD ---
for body_id in proxy_body_ids:
# Effective mass: reflects the inertia of the full articulated
# chain when applicable, optionally scaled for coupling stability.
proxy_id = cable_builder.add_body(
xform=robot_state_0.body_q[body_id],
mass=effective_mass[body_id],
)
for shape in shapes_on_body(robot_model, body_id):
cable_builder.add_shape(body=proxy_id, **shape)
robot_to_vbd[body_id] = proxy_id
cable_model = cable_builder.finalize()
vbd_solver = SolverVBD(
cable_model,
iterations=10,
)
vbd_state_0 = cable_model.state()
vbd_state_1 = cable_model.state()
vbd_control = cable_model.control()
vbd_collision_pipeline = newton.CollisionPipeline(cable_model)
vbd_contacts = vbd_collision_pipeline.contacts()
proxy_forces = wp.zeros(robot_model.body_count, dtype=wp.spatial_vector)
coupling_forces_cache = wp.zeros_like(proxy_forces)
@wp.kernel
def sync_proxy_state(
robot_ids: wp.array(dtype=int),
proxy_ids: wp.array(dtype=int),
src_body_q: wp.array(dtype=wp.transform),
src_body_qd: wp.array(dtype=wp.spatial_vector),
dst_body_q: wp.array(dtype=wp.transform),
dst_body_qd: wp.array(dtype=wp.spatial_vector),
proxy_forces: wp.array(dtype=wp.spatial_vector),
body_inv_mass: wp.array(dtype=float),
body_inv_inertia: wp.array(dtype=wp.mat33),
gravity: wp.vec3,
dt: float,
):
i = wp.tid()
rid = robot_ids[i]
pid = proxy_ids[i]
# Copy pose and velocity from robot to proxy
dst_body_q[pid] = src_body_q[rid]
qd = src_body_qd[rid]
# Undo coupling forces + gravity on proxy velocity
f = proxy_forces[rid]
delta_v = dt * body_inv_mass[pid] * wp.spatial_top(f)
r = wp.transform_get_rotation(dst_body_q[pid])
delta_w = dt * wp.quat_rotate(r, body_inv_inertia[pid] * wp.quat_rotate_inv(r, wp.spatial_bottom(f)))
qd = qd - wp.spatial_vector(delta_v + dt * body_inv_mass[pid] * gravity, delta_w)
dst_body_qd[pid] = qd
# --- Coupled step (staggered, one-step lag) ---
# Step 1 -- Apply lagged VBD-to-MuJoCo wrenches
robot_state_0.clear_forces()
coupling_forces_cache.assign(proxy_forces)
robot_state_0.body_f.assign(robot_state_0.body_f + coupling_forces_cache)
# Step 2 -- Advance MuJoCo (rigid-body robot)
mj_collision_pipeline.collide(robot_state_0, mj_contacts)
mj_solver.step(robot_state_0, robot_state_1, control, mj_contacts, dt)
robot_state_0, robot_state_1 = robot_state_1, robot_state_0
# Step 3 + 4 -- Sync proxy poses/velocities and undo coupling forces (single kernel)
wp.launch(
sync_proxy_state,
dim=len(proxy_body_ids),
inputs=[
robot_ids_wp, proxy_ids_wp,
robot_state_0.body_q, robot_state_0.body_qd,
vbd_state_0.body_q, vbd_state_0.body_qd,
coupling_forces_cache,
cable_model.body_inv_mass, cable_model.body_inv_inertia,
gravity, dt,
],
)
# Step 5 -- Advance VBD (cable deformation + cable-proxy contacts)
vbd_collision_pipeline.collide(vbd_state_0, vbd_contacts)
vbd_solver.step(vbd_state_0, vbd_state_1, vbd_control, vbd_contacts, dt)
# Step 6 -- Harvest contact wrenches from proxy bodies (applied at next step)
proxy_forces = harvest_proxy_wrenches(vbd_solver, vbd_state_1, vbd_contacts, dt)
vbd_state_0, vbd_state_1 = vbd_state_1, vbd_state_0
Samsung 和 Lightwheel 的工作展示了 Newton 的可变形体仿真栈如何支持针对真实电子装配线中各类材料的合成数据生成和策略训练。
如何开始使用 Newton
Newton 可免费使用、修改和扩展。开始使用:
- 浏览 newton-physics/newton GitHub 仓库,获取独立的 Newton 示例和文档。
- 在 isaac-sim/IsaacLab GitHub 上尝试灵巧操作和运动工作流。
如果你将参加 NVIDIA GTC 2026,请关注以下会议:
- Disney 的机器人角色:通过物理 AI 从屏幕走向现实
- Newton 机器人物理引擎简介
- 使用 NVIDIA Isaac Lab 和 Newton 加速机器人学习
- 使用 Lightwheel 为物理精确的仿真构建机器人就绪资产
- 如何使用 NVIDIA Warp 构建 GPU 加速的计算物理仿真
订阅我们的新闻通讯,并在 LinkedIn、Instagram、X 和 Facebook 上关注 NVIDIA Robotics,以获取最新动态。探索 NVIDIA 文档和 YouTube 频道,并加入 NVIDIA Developer Robotics 论坛。要开启您的机器人技术之旅,请立即报名参加我们的免费 NVIDIA Robotics Fundamentals 课程。
开始使用 NVIDIA Isaac 库和 AI 模型来开发物理 AI 系统。
观看 NVIDIA 创始人兼首席执行官 Jensen Huang 的 NVIDIA GTC 2026 主题演讲,并探索更多关于物理 AI、机器人技术和视觉 AI 的 GTC 会议。
标签





















