Newton Runtime Qualification#
Newton runtime qualification is more specific than the backend name.
physics: newton selects the integration, but the resolved solver, device,
finalized scene contents, and requested operation determine what is actually
supported.
Current solver/device matrix#
This matrix describes the current EmbodiChain integration. An upstream solver feature does not imply that every asset or operation exposes it here.
Solver/device path |
Rigid/articulation stepping |
Deformables |
|
Qualification boundary |
|---|---|---|---|---|
MuJoCo-Warp, CUDA |
Supported |
No |
Geometry + impulse |
Primary articulated-rigid path. |
MuJoCo-Warp, CPU |
Supported |
No |
Unsupported |
CPU contact buffers are not exposed to the sensor. |
XPBD, CUDA |
Supported |
Scene-dependent |
Geometry-only where available |
Validate the exact joints, assets, and task. |
VBD, CUDA |
Limited by scene |
Volume/surface |
Geometry-only where available |
Deformable-focused path. |
DexUni, CUDA |
Coupled articulation/deformable stepping |
Volume/surface |
Unsupported |
No rigid-rigid or rigid-ground solve/publication on the current path. |
Semi-implicit, CUDA, gradients |
Not stepped by |
Unsupported |
Unsupported |
Current integration is a kinematics bridge only. |
The matrix is an admission guide, not a substitute for a task-level rollout. Joint types, source assets, contact geometry, deformable topology, and runtime controls can narrow support further.
Resolve before qualifying#
AutoSolver is unresolved until the complete Spawn scene is finalized. Query the
concrete value only after SimulationManager.prepare():
sim.prepare()
print(sim.physics.solver_type)
print(sim.device)
The startup summary also reports the resolved solver, device, substep count, CUDA Graph state, and renderer. Record these values with test or benchmark results. A configuration that merely decodes successfully has not yet passed runtime qualification.
For contact-dependent code, qualify the query itself:
capabilities = contact_sensor.contact_capabilities
if not capabilities.geometry:
raise RuntimeError("This runtime does not expose contact geometry.")
Geometry and impulse availability are distinct. Zero-valued impulse fields on a geometry-only path do not mean that no contact candidate exists. See Contact Sensor for filtering, frames, batching, and capacity behavior.
Deformable admission checks#
Volume soft bodies and surface cloth use VolumeDeformableObjectCfg and
SurfaceDeformableObjectCfg. The current integration requires:
CUDA execution;
auto,dexuni,xpbd,semi_implicit, orvbdas the configured solver;requires_grad=False;every deformable declaration before the first
prepare()/scene finalization.
This check does not claim identical material, self-collision, articulation, or contact behavior across the admitted solvers. Qualify the complete scene. For a robot plus deformable, start with DexSim Unified Coupled Solver For Embodied AI and account for its rigid-contact boundary.
Collision and contact qualification#
The selected solver determines which collision path is active:
MuJoCo-Warp can use its internal contacts or Newton-generated rigid contacts, controlled by its solver configuration.
XPBD and VBD consume solver-specific subsets of Newton collision/contact data; verify geometry and impulse capabilities at runtime.
DexUni owns particle-shape collision generation. An external
collision_cfgdoes not add rigid contacts and should beNonewhen DexUni is selected explicitly.
Do not tune external pipeline capacities or margins until the active solver is known to consume that pipeline. When reducing collision refresh frequency, measure penetration and contact continuity at the same physics/control timing.
Differentiable route#
The supported differentiable configuration is explicit:
from embodichain.lab.sim.cfg import NewtonPhysicsCfg
physics_cfg = NewtonPhysicsCfg(
device="cuda:0",
solver_cfg={"solver_type": "semi_implicit"},
requires_grad=True,
use_cuda_graph=False,
)
This enables EmbodiChain’s current differentiable kinematics bridge. It does not step the configured semi-implicit solver, run collision detection, or make an ordinary Gym rollout and arbitrary state mutation differentiable. The Franka reach APG example differentiates task-defined FK, action, and reward kernels recorded on a Warp tape; it is not qualification evidence for differentiable contact dynamics. See RL Algorithms.
CUDA Graph and rendering status#
For ordinary CUDA simulation, use_cuda_graph=True is a request rather than
proof that capture completed. Distinguish pending, captured, and disabled
states in the startup summary. Model changes and particle contact-material
schedules can invalidate or disable replay.
sync_to_renderer=None preserves DexSim’s consumer-aware policy. Camera
rendering and the post-reset observation path synchronize on demand, so camera
qualification does not require forcing every-step publication. Test the first
frame after prepare() and immediately after reset for camera-dependent tasks.
Minimum task-level check#
For the exact solver/device pair, exercise construction, prepare(), one
physics step, reset, observation/state readback, and teardown. For training,
run across at least one episode boundary and check that observations, targets,
velocities, forces, and statistics restart consistently. Compare backends by
task success, penetration, settling, joint tracking, and contact continuity—not
by expecting identical trajectories.
Use the Newton Solver Guide for native feature and joint-support tables, and the Solver Tuning Reference for upstream tuning guidance. This page remains limited to EmbodiChain’s integration qualification.