恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Newton 物理引擎核心解析:从 ModelBuilder 到求解器步进的 GPU 可微仿真工作流
首页
资讯中心
/
Newton 物理引擎核心解析:从 ModelBuilder 到求解器步进的 GPU 可微仿真工作流
Newton 物理引擎核心解析:从 ModelBuilder 到求解器步进的 GPU 可微仿真工作流
发布时间:2026/9/17 7:44:19
Newton 物理引擎核心解析从 ModelBuilder 到求解器步进的 GPU 可微仿真工作流【免费下载链接】newtonAn open-source, GPU-accelerated physics simulation engine built upon NVIDIA Warp, specifically targeting roboticists and simulation researchers.项目地址: https://gitcode.com/GitHub_Trending/newton9/newton本篇基于 Newton 官方文档的概览页 overview.rst 展开系统梳理 Newton——一个构建在 NVIDIA Warp 之上、面向机器人与仿真研究的 GPU 加速、可扩展、可微物理引擎——的核心数据模型ModelBuilder / Model / State / Contacts / Control、六步仿真主循环以及 XPBD、VBD、MuJoCo、Kamino、ImplicitMPM、Style3D 等八类求解器后端的定位与选择依据。读完本文你能够独立用 Python API 搭建模型、驱动标准仿真循环并结合源码理解每个核心对象在数据流中的角色与底层实现位置。项目定位与关键特性Newton 的官方定义是一个GPU 加速、可扩展、可微的物理仿真引擎服务于机器人、科研与高级仿真工作流。它构建在 NVIDIA Warp 之上并集成了 MuJoCo Warp目标是同时为使用者和开发者提供高性能仿真、现代化 Python API 和灵活的架构。由 Disney Research、Google DeepMind 和 NVIDIA 共同维护采用 Apache-2.0 协议开源见 LICENSE.md 与 CITATION.cff。关键特性可归纳为六点每一条都能在仓库中找到对应实现特性说明仓库佐证GPU 加速基于 NVIDIA Warp 实现快速、可扩展的仿真内核以wp.kernel编写如 solver.py 中的粒子积分内核多求解器实现XPBD、VBD、MuJoCo、Featherstone、SemiImplicit、Kamino、ImplicitMPM、Style3D各后端位于 newton/_src/solvers/导出表见 solvers/init.py模块化设计易于扩展新的求解器与组件求解器通过统一的SolverBase.step接口接入见 solver.py可微仿真支持面向机器学习与优化的可微仿真官方 diffsim 示例目录 newton/examples/diffsim/丰富的导入/导出支持 URDF、MJCF、USD 等模型格式导入入口为ModelBuilder.add_urdf / add_mjcf / add_usd开源协作Disney Research、Google DeepMind、NVIDIA 联合维护见 CONTRIBUTING.md 与 docs/guide/development.rst核心概念模型构建、状态与仿真循环的数据流官方概览用一张流程图描述了 Newton 的数据组织模型创作Model Authoring通过 Python API 的ModelBuilder直接构建或将 URDF / MJCF / USD 资产交给 Importeradd_urdf/add_mjcf/add_usd最终汇入同一个ModelBuilder产出Model仿真循环Simulation LoopState状态、Control控制、Contacts接触三者共同输入Solver输出更新后的状态输出OutputsSensors传感器从更新后的状态与接触集中计算观测Viewer负责实时可视化。下面逐个说明这些核心对象并标注其在源码中的位置。ModelBuilder模型的构建入口ModelBuilder是构建仿真模型的统一入口既可以用图元体、形状、关节、粒子直接搭建场景也可以从外部格式导入资产。从源码结构看其关键方法分布在 builder.py 中add_bodybuilder.py#L4963添加刚体add_shape_spherebuilder.py#L7578为体添加球形形状add_ground_planebuilder.py#L7547添加地平面replicatebuilder.py#L3093将单个模板模型复制为上千个并行世界是 GPU 批量仿真的基础finalizebuilder.py#L12414将 Builder 固化为只读的Model并支持requires_gradTrue参数为可微仿真做准备。Model仿真世界的静态描述Model封装了仿真世界的物理结构、参数与配置包括刚体bodies、关节joints、形状shapes以及质量、惯性等物理属性。它由ModelBuilder.finalize()生成之后不再被常规流程修改若确实需要更新模型数据SolverBase提供了notify_model_changed(flags)机制solver.py#L588-L610通过ModelFlags位掩码告知求解器刷新对应的内部缓冲而无需重建求解器对象。State某时刻的动态状态State表示给定时刻的动态状态包含位置与速度等由求解器在每个时间步更新的量。此外Newton 支持可选的扩展属性extended attributes用于存放刚体加速度等派生量供传感器读取参见 docs/concepts/extended_attributes.rst。所有核心类从 newton/init.py 统一导出Model、ModelBuilder、State、StateFlags、CollisionPipeline、Contacts、Control等均可直接从import newton获得。Contacts碰撞流水线产出的接触集合Contacts保存由CollisionPipeline.collide(state, contacts)产生的当前活动接触集可选地携带接触力等扩展属性以支持传感与分析。collide方法的实现位于 collide.py#L2176-L2184其文档字符串明确指出该方法可安全地在wp.Tape上下文中调用——非可微的广相/窄相检测内核以record_tapeFalse启动而软接触生成与刚接触增广内核会被记录进 tape使梯度能够流经state.body_q与state.particle_q。这是 Newton 可微接触能力的关键设计。Control控制输入Control编码仿真循环中施加的控制输入如关节目标joint_target_q/joint_target_qd与前馈力joint_f。值得注意的一个全局开关是 newton/init.py#L14-L37 中的use_coord_layout_targets它决定Model.joint_target_q与Control.joint_target_q的形状是关节坐标数默认与State.joint_q对齐还是已弃用的关节DOF 数布局需在构造ModelBuilder之前设置。Solver推进仿真的引擎核心求解器负责积分物理、处理接触并强制执行约束是整个数据流的发动机。Newton 内置八类后端newton/_src/solvers/ ├── solver.py # SolverBase统一接口step(state_in, state_out, control, contacts, dt) ├── xpbd/ # SolverXPBD —— 隐式最大坐标支持粒子/布料/软体 ├── vbd/ # SolverVBD —— 隐式有限关节支持 ├── mujoco/ # SolverMuJoCo —— 广义坐标兼容 MuJoCo/MJCF 工作流 ├── featherstone/ # SolverFeatherstone —— 半隐式广义坐标 ├── semi_implicit/ # SolverSemiImplicit —— 半隐式最大坐标 ├── kamino/ # SolverKamino —— 实验性带闭环运动学与硬摩擦接触 ├── implicit_mpm/ # SolverImplicitMPM —— 隐式 MPM粒子/颗粒介质 └── style3d/ # SolverStyle3D —— 隐式布料所有后端实现同一step接口solver.py#L571-L586输入当前状态、控制与接触输出更新后的状态。一个体现工程细节的设计是solvers/init.py 通过 PEP 562 的模块级__getattr__实现惰性导入——每个公开符号映射到其真实所在模块首次属性访问时才导入对应后端从而避免import newton时付出加载全部求解器后端的成本。选择求解器时的一个首要判据是坐标表示摘自 docs/solvers/index.rst面向刚体关节机器人先决定用哪套坐标——SolverMuJoCo与SolverFeatherstone采用广义坐标SolverXPBD、SolverSemiImplicit、SolverKamino采用最大坐标涉及可变形体、粒子或可微仿真时则参考官方特性对照表。其中 Kamino 与 VBD 被标注为实验性公共 API 可能随时变化。更完整的积分方法、关节类型、关节属性、接触材料与可微性支持矩阵均可在 docs/solvers/index.rst 中查证。Sensors从状态到观测传感器从State、Contacts、sites 与 shapes 计算观测值许多传感器依赖存放派生求解器输出的扩展属性。源码位于 newton/_src/sensors/包含接触传感器、IMU、帧变换与分块相机tiled camera等实现概念文档见 docs/concepts/sensors.rst。Importer外部格式导入Importer 通过三个方法加载外部模型实现均位于 builder.pyModelBuilder.add_urdfbuilder.py#L3737——URDF 机器人描述ModelBuilder.add_mjcfbuilder.py#L4201——MuJoCo XML 场景ModelBuilder.add_usdbuilder.py#L3883——USD 资产并支持 deformable 附件、cloth、cable、volume 等专用导入工具见 newton/src/utils/import_usd_deformable*.py。Viewer可视化与调试newton.viewer模块提供实时渲染与离线检视能力后端包括 GUI、Rerun、RTX、viser 等见 newton/_src/viewer/配套指南为 docs/guide/visualization.rst。仿真主循环六步标准工作流官方文档将标准仿真流程归纳为六个步骤下面结合可运行的代码逐一印证用ModelBuilder构建或导入模型finalize()固化为Model创建传感器与CollisionPipeline分配一个或多个State对象外加Control输入与Contacts调用CollisionPipeline.collide为当前状态填充接触集用当前状态、控制与接触步进求解器solver.step更新传感器、检视输出、渲染或导出结果。最小可运行示例以下示例仅依赖pip install newton安装的基础包代码继承自官方安装指南 docs/guide/installation.rst 的 Quick Start 一节import warp as wp import newton # 步骤 1构建模型 builder newton.ModelBuilder() body builder.add_body( xformwp.transform((0.0, 1.0, 0.0), wp.quat_identity()), mass1.0, ) builder.add_shape_sphere(body, radius0.25) builder.add_ground_plane() # 步骤 2固化为 Model model builder.finalize() # 步骤 3创建求解器与状态缓冲 solver newton.solvers.SolverXPBD(model) state_0 model.state() state_1 model.state() control model.control() collision_pipeline newton.CollisionPipeline(model) contacts collision_pipeline.contacts() # 用前向运动学初始化状态 newton.eval_fk(model, model.joint_q, model.joint_qd, state_0) # 步骤 4-5标准仿真循环 for step in range(120): state_0.clear_forces() collision_pipeline.collide(state_0, contacts) # 步骤 4生成接触集 solver.step(state_0, state_1, control, contacts, 1.0 / 60.0) # 步骤 5推进物理 state_0, state_1 state_1, state_0 # 双缓冲交换几个值得注意的实现细节循环中使用双缓冲state_0/state_1交换与SolverBase.step(state_in, state_out, ...)的输入/输出签名solver.py#L571-L573一一对应每步先clear_forces()再collide保证接触力从干净的力缓冲开始累加若需使用SolverMuJoCo等依赖 MuJoCo 的后端需先安装pip install newton[sim]可选依赖组sim、importers、onnx、examples、torch-cu12/13、dev等的完整说明见 docs/guide/installation.rst 的 Extra Dependencies 一节。GPU 多世界并行replicate 工作流Newton 面向强化学习场景的典型用法是单模板 大规模并行世界# 构建单个机器人模板 template newton.ModelBuilder() template.add_mjcf(humanoid.xml) # 复制为 1024 个并行世界 builder newton.ModelBuilder() builder.replicate(template, world_count1024) builder.add_ground_plane() model builder.finalize() # 求解器一次性并行推进全部 1024 个世界 solver newton.solvers.SolverMuJoCo(model)这正是核心数据流图的意义所在Model一旦finalize求解器内核即可按world维度在 GPU 上批量展开State/Control/Contacts均以向量化数组承载多世界数据。replicate的实现在 builder.py#L3093相关行为由 newton/tests/test_builder_replicate.py 覆盖。可微仿真的入口概览中强调的可微特性在源码层面体现为一条清晰的通路ModelBuilder.finalize(requires_gradTrue)→ 在wp.Tape()内执行前向 rollout →tape.backward(loss)填充梯度。碰撞侧的梯度支持如前所述由collide内部区分可微/不可微内核实现collide.py#L2185-L2198。官方 docs/solvers/index.rst 给出了一个完整的最小可微示例SolverSemiImplicitwp.Tape 自定义 loss 内核并指出 Featherstone 与 SemiImplicit 目前提供基础可微性完整参考工作流见 newton/examples/diffsim/。快速索引与延伸阅读按概览文档给出的 Quick Links围绕 Newton 继续深入的路径均已转换为仓库根目录相对路径主题位置安装与首个示例docs/guide/installation.rst ——pip install newton[examples]后运行python -m newton.examples教程入口docs/guide/tutorials.rst 与 docs/tutorials/00_introduction.ipynb求解器对比与调参docs/solvers/index.rst、MuJoCo 后端指南 docs/solvers/mujoco.rst、Kamino 后端指南 docs/solvers/kamino.rst概念文档关节 docs/concepts/articulations.rst、碰撞 docs/concepts/collisions.rst、传感器 docs/concepts/sensors.rst、扩展属性 docs/concepts/extended_attributes.rst、坐标系约定 docs/concepts/conventions.rst常见问题docs/faq.rst开发者指南docs/guide/development.rst完整 API 参考docs/api/newton.rst示例合集newton/examples/运行python -m newton.examples --list查看全部一句话总结 Newton 的心智模型ModelBuilder 负责造世界原生图元或 URDF/MJCF/USD 导入Model 是世界的只读蓝图State/Control/Contacts 是每步流动的三股数据Solver 是消费它们并输出新状态的 GPU 内核——掌握这条数据链再配合replicate多世界并行与wp.Tape可微通路即可覆盖从单机刚体仿真到大规模可微强化学习的主要场景。【免费下载链接】newtonAn open-source, GPU-accelerated physics simulation engine built upon NVIDIA Warp, specifically targeting roboticists and simulation researchers.项目地址: https://gitcode.com/GitHub_Trending/newton9/newton创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考