先记住一句话
Newton 的核心抽象是:Model 保存结构,State 保存动态量,Control 保存输入,Contacts 保存当前接触;碰撞管线产生 contacts,选定的 solver 再把 state 推进一步。
1. 先消除三个命名歧义
| 名字 | 是什么 | 提供什么 |
|---|---|---|
| Warp | Python/CUDA kernel 与自动微分框架 | GPU arrays、kernel、Tape、graph capture |
| Newton Physics | 建立在 Warp 上的完整物理引擎 | 模型 API、资产导入、碰撞、solver、sensor、viewer |
| MuJoCo Warp | MuJoCo 在 Warp/GPU 上的实现 | 作为 Newton 的一个重要 rigid/articulation solver backend |
本文的 Newton 指 Linux Foundation 项目 newton-physics/newton,不是旧的 Newton Game Dynamics。warp.sim 是它的前身,现已从 Warp 移除。另外,Genesis 的 constraint_solver.Newton 只是“牛顿迭代法”,与 Newton Physics 项目无关。
2. 从资产到一步 simulation
Python primitives ─┐
URDF / MJCF / USD ─┼─► ModelBuilder ─finalize─► Model
│ ├─► State A / State B
│ ├─► Control
│ └─► CollisionPipeline
│ │
└──────────────────────────────► Contacts
│
State A + Control + Contacts ──► selected Solver ──► State B
ModelBuilder 汇总 body、joint、shape 和物理参数,finalize() 后变成适合设备执行的 SoA/Warp arrays。运行时的 Model 才是 standalone Newton 的 source of truth;USD 是重要 importer/schema 输入,却不像 Isaac Sim 那样持续充当 live scene graph。
仿真通常在两个 state buffer 间交换,避免原地更新破坏数据依赖。sensor 再从 state、contacts、site 或 shape 计算观测。调用者获得了底层控制力,也必须自己遵守 buffer、同步和 model rebuild 生命周期。
3. 碰撞与 solver 为什么分开
Newton 的 CollisionPipeline.collide(state, contacts) 显式生成接触集合,solver.step(...) 再消费它。这样可以:
- 让多个 solver 复用 Newton 的 broad/narrow phase;
- 让 MuJoCo solver 选择原生 MuJoCo Warp contacts,或换成 Newton 的 SDF/hydroelastic contacts;
- 单独替换碰撞、过滤或接触格式,而不重写整个积分器;
- 把 collide + solver step 一起 capture 成 CUDA Graph,减少每步 launch 开销。
4. Solver 是 Newton 最重要的扩展点
| 家族 | 表示/方法 | 适合先想到的任务 |
|---|---|---|
| MuJoCo | 广义坐标;MuJoCo/MJCF 语义;GPU MuJoCo Warp | 高吞吐 articulated robot learning |
| Featherstone | 广义坐标;CRBA + semi-implicit | 树形机器人、基础可微流程 |
| SemiImplicit / XPBD | 最大坐标;显式约束/位置式求解 | 刚体、粒子、软体原型 |
| Kamino | 最大坐标;硬接触、闭环与约束机构 | 复杂 constrained multibody;仍实验性 |
| VBD / Style3D | 隐式 deformable/cloth 方法 | 布料、cable、软体;支持范围各异 |
| Implicit MPM | material point method | 颗粒、弹塑性材料和 rigid-soft coupling |
“统一 API”不意味着 solver 行为统一。关节类型、摩擦字段、contact pipeline、坐标表示、可微分支持都不同;选 solver 必须对照 feature matrix,而不是只改一个字符串。跨 solver coupling 也仍是实验框架,不能理解成所有组合都已无缝双向耦合。
5. GPU 批处理的核心
Model/State/Control 本身就是 device arrays,world index 把独立环境放进同一 Model,相同 kernel 可按 world × entity 批量推进。v1.5 继续强化 multi-world reset、异构 robot batch、vectorized controller 与 graph capture。高吞吐来自:
- 让状态、控制和 contacts 常驻 GPU;
- 用 selection/view 按 label 找一批 articulation,而不是创建大量 Python object;
- 预分配有容量上限的 contacts/MPM grid,避免动态分配;
- 在固定执行图上做 CUDA Graph capture。
代价是生命周期更严格:model rebuild 后旧 view 失效;有些 solver 会交换 current/next state;直接写底层 array 时要自己维护 forward kinematics 与 cache invalidation。
6. 可微分不等于“所有接触都能反传”
Newton 用 wp.Tape() 记录 Warp kernel,随后从 scalar loss 反传到 state、control 或 model arrays。但当前 solver 支持并不一致:官方 matrix 只把 Featherstone 与 SemiImplicit 标为基础可微路径,MuJoCo、XPBD、VBD、Kamino、MPM 等不能笼统视为端到端可微。
碰撞集合变化本身是离散的。Newton 的 rigid-contact gradient 会冻结 narrow phase,再对选定接触几何做可微重建;官方明确要求逐任务验证梯度。可微物理适合短 horizon control/parameter fitting,不会自动解决长 horizon 梯度爆炸、消失或 sim-to-real 偏差。
7. 与 Isaac Sim / Isaac Lab 怎样组合
- Newton standalone:直接运行 physics + 轻量 viewer/export,适合 solver 开发和无 Kit 的训练。
- Isaac Lab + Newton:复用 task/env/robot-learning 接口,可 kit-less,也可接不同 visualizer/renderer。
- Isaac Sim + Newton backend:USD、Fabric、RTX、ROS 仍由 Isaac Sim 平台提供,Newton 负责物理;6.0.1 时仍属实验性路径。
因此“Isaac Sim vs Newton”并不总是二选一;Newton 可以成为 Isaac 生态中的 physics backend。
8. 四个 Newton 数据量级
例 1:batched joints
8192 个环境、每个 12 DoF,q 与 qd 各有 $8192×12=98{,}304$ 个 fp32;两者合计约 $98{,}304×2×4≈0.75$ MiB。
例 2:contact capacity
每环境最多 32 contacts、4096 环境,capacity 需 131,072。若实际峰值 40/环境而 buffer 仍 32,最坏每环境丢 8 个接触,不能只看程序是否继续运行。
例 3:substep 调用
Control 50 Hz、physics 200 Hz,每个 action 调 4 次 collide + solver。每秒 50 个控制步对应 200 次物理推进。
例 4:反向存储
可微 rollout 100 steps、每步需保存 2 MiB 中间量,朴素 tape 至少约 200 MiB;batch 扩 8 倍便约 1.6 GiB,还未计梯度和模型。
Newton 的目标不是“用一个 solver 取代所有引擎”,而是用共同数据模型和 Warp 执行层容纳不同 solver。数值行为是否适合任务,仍由选中的 solver、contact pipeline 和参数共同决定。
自测
1. Model 与 State 为什么要分开?
Model 保存相对静态的结构和参数,可被大量环境共享;State 保存每个 world 每一步变化的动态量,便于批处理和双缓冲。
2. 为什么 SolverMuJoCo 可能有两套 contact 路径?
它可使用 MuJoCo Warp 自带碰撞,也可关闭该路径并消费 Newton CollisionPipeline 生成的 SDF/hydroelastic contacts。
3. “Newton 可微”为什么不能推出“任何机器人 rollout 都能可靠求梯度”?
solver 支持有限,接触集合离散且部分梯度为近似;长 horizon 还有数值稳定与内存问题。
一手资料
Newton Overview 定义核心对象与循环;Solvers Guide 给出 feature/differentiability matrix;Collisions 解释碰撞与 solver 集成;Newton v1.5.1 是本文快照版本;Isaac Lab Newton Support 记录当前集成边界。