Reduce the memory consumption of hydroelastic contacts#1609
Conversation
📝 WalkthroughWalkthroughAdds octahedral normal encoding and moves effective stiffness to per-entry storage; removes moment-matching; introduces hydroelastic pre-pruning and new HydroelasticSDF.Config fields ( Changes
Sequence Diagram(s)sequenceDiagram
participant Generator as SDF Generator
participant PrePrune as Local Pre-prune
participant Reducer as Global Reducer (Hashtable)
participant Exporter as Contact Exporter
participant Simulation as Simulator
Generator->>Generator: rasterize faces, compute normals, encode_oct → store wp.vec2
alt pre_prune enabled
Generator->>PrePrune: collect local penetrating & top candidates (batched)
PrePrune->>Reducer: batch write compacted candidates into global buffer
else
Generator->>Reducer: write contacts directly into global buffer
end
Reducer->>Reducer: decode_oct normals → compute per-entry entry_k_eff via _effective_stiffness
Reducer->>Exporter: reduce/aggregate entries and export reduced contacts (decoded normals + entry_k_eff)
Exporter->>Simulation: supply final contacts for resolution
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codecov Report❌ Patch coverage is
📢 Thoughts on this report? Let us know! |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
newton/_src/geometry/contact_reduction_global.py (1)
468-472:⚠️ Potential issue | 🟡 MinorStale docstring:
normalis now vec2, not vec3.The contact data storage documentation still describes
normalasvec3(normal.x, normal.y, normal.z), but the actual storage isvec2(octahedral-encoded).Proposed fix
- - normal: vec3(normal.x, normal.y, normal.z) + - normal: vec2 (octahedral-encoded unit normal, see encode_oct/decode_oct)docs/concepts/collisions.rst (1)
557-564:⚠️ Potential issue | 🟠 MajorRemove non-existent parameters from
SDFHydroelasticConfigexample.The documentation example at lines 557–564 includes
betas,sticky_contacts, andmoment_matching, which do not exist in theSDFHydroelasticConfigdataclass. Using this example will raise a TypeError. Update the example to only include valid parameters:reduce_contacts,buffer_fraction,normal_matching, and optionally others such asanchor_contact,contact_buffer_fraction, etc.
🧹 Nitpick comments (4)
newton/_src/geometry/contact_reduction_hydroelastic.py (1)
150-164:shape_transformparameter is unused in the reduction kernel.Static analysis correctly flags that
shape_transform(Line 154) is never read inside this kernel. In the hydroelastic pipeline, contact positions are already in shape_b's local frame, so no world→local transform is needed for voxel computation (unlike the global reducer which operates in world space).If kept for API symmetry with the global reducer, consider adding a brief inline comment explaining why. Otherwise, consider removing it to avoid confusion and reduce kernel argument overhead.
newton/_src/geometry/sdf_hydroelastic.py (3)
80-82: Duplicate of_effective_stiffnessincontact_reduction_hydroelastic.py.This function is identical to
_effective_stiffnessincontact_reduction_hydroelastic.py(Line 84-86). Consider consolidating into a single shared@wp.func(e.g., incontact_reduction_global.py) and importing it in both modules.
1250-1254: Unused kernel parameters are documented but should be cleaned up if unused in both code paths.The comment at Line 1251 says these are "kept for signature compatibility," but they are unused in both the
pre_prune=Trueandpre_prune=Falsecode paths within the kernel body. If they were added anticipating future pre-prune in-kernel hashtable writes that never materialized, consider removing them from the kernel signature and the_generate_contactscall site to reduce kernel argument overhead.
462-473:_generate_contactscalled without AABB arrays in both branches.Both the
reduce_contacts=Truebranch (Line 463) and thereduce_contacts=Falsebranch (Line 473) call_generate_contactswithout passingshape_local_aabb_lower,shape_local_aabb_upper, orshape_voxel_resolution. These default toNoneand are replaced by empty placeholder arrays in_generate_contacts. This is fine today since the kernel doesn't use them, but it creates a latent inconsistency: the kernel signature suggests they're meaningful inputs. If/when these parameters become genuinely needed, this silent fallback to empty arrays could mask bugs.
There was a problem hiding this comment.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (5)
docs/concepts/collisions.rst (1)
555-564:⚠️ Potential issue | 🟡 MinorRemove
moment_matchingfrom the config example to match the API.The example still lists
moment_matching, but the config no longer exposes it. Please drop it here (and in the options table) to avoid stale docs.newton/tests/test_hydroelastic.py (1)
83-140:⚠️ Potential issue | 🟡 MinorUpdate
build_stacked_cubes_scenedocstring for the new config parameter.Please document
sdf_hydroelastic_configand switch to Google-style Args/Returns for this helper.As per coding guidelines, Use Google-style docstrings with clear, concise explanations of what the function does, its parameters, and return value.
newton/_src/geometry/sdf_hydroelastic.py (2)
115-141:⚠️ Potential issue | 🟡 MinorValidate
contact_buffer_fractionrange.The docstring states (0, 1], but there’s no check. Add a validation alongside
buffer_fractionto prevent zero/oversized buffers.🔧 Suggested fix (in __init__)
frac = float(self.config.buffer_fraction) if frac <= 0.0 or frac > 1.0: raise ValueError(f"SDFHydroelasticConfig.buffer_fraction must be in (0, 1], got {frac}") + + contact_frac = float(self.config.contact_buffer_fraction) + if contact_frac <= 0.0 or contact_frac > 1.0: + raise ValueError( + f"SDFHydroelasticConfig.contact_buffer_fraction must be in (0, 1], got {contact_frac}" + )
1214-1490:⚠️ Potential issue | 🟡 MinorAdd underscores to unused kernel parameters to silence Ruff ARG001.
These three parameters are kept for positional argument compatibility with callers but unused in the kernel body. Prefixing with
_silences the lint warning while maintaining signature compatibility since arguments are passed positionally viawp.launch().🧹 Suggested fix
- shape_local_aabb_lower: wp.array(dtype=wp.vec3), - shape_local_aabb_upper: wp.array(dtype=wp.vec3), - shape_voxel_resolution: wp.array(dtype=wp.vec3i), + _shape_local_aabb_lower: wp.array(dtype=wp.vec3), + _shape_local_aabb_upper: wp.array(dtype=wp.vec3), + _shape_voxel_resolution: wp.array(dtype=wp.vec3i),newton/_src/geometry/contact_reduction_hydroelastic.py (1)
94-129:⚠️ Potential issue | 🟡 Minor
k_effparameter is unused—fix misleading docstring.The function accepts
k_effbut never uses it. The docstring incorrectly suggests the function stores stiffness data, when it only stores contact area. Effective stiffness is stored per hashtable entry elsewhere, not per contact.📝 Suggested doc update
- Extends :func:`export_contact_to_buffer` by storing additional hydroelastic - data (area and effective stiffness). + Extends :func:`export_contact_to_buffer` by storing additional hydroelastic + data (area). Per-entry stiffness is stored separately. @@ - k_eff: Effective stiffness coefficient k_a*k_b/(k_a+k_b) + k_eff: Unused (per-entry stiffness stored in reducer_data.entry_k_eff)
🤖 Fix all issues with AI agents
In `@newton/_src/geometry/contact_reduction_global.py`:
- Around line 278-327: encode_oct currently divides by the L1 norm without
guarding against a zero-length normal which yields NaNs; update encode_oct to
compute the L1 sum = (wp.abs(n[0]) + wp.abs(n[1]) + wp.abs(n[2])) and if that
sum is zero return wp.vec2(0.0, 0.0) (or set inv_l1 = 0.0 and ox/oy/oz = 0.0)
before doing the division, preserving the existing fold/reflect logic otherwise;
also add Google-style Args and Returns sections to the docstrings of both
encode_oct (documenting parameter n: wp.vec3 unit normal and return wp.vec2
encoded octahedral coords) and decode_oct (documenting parameter e: wp.vec2
encoded coords and return wp.vec3 decoded unit normal) so both functions comply
with the codebase docstring style.
In `@newton/_src/geometry/contact_reduction_hydroelastic.py`:
- Around line 84-86: Update the _effective_stiffness function to handle the
zero-denominator case and add a Google-style docstring: add a docstring
explaining the harmonic mean of two stiffnesses, parameters (k_a, k_b), return
value, and behavior when both are zero; implement a guard in
_effective_stiffness that returns 0.0 (or another specified safe value) if k_a +
k_b == 0.0 to avoid division by zero, otherwise compute (k_a * k_b) / (k_a +
k_b). Ensure you reference the function name _effective_stiffness and keep types
as wp.float32.
- Around line 150-159: The parameter shape_transform in the kernel
reduce_hydroelastic_contacts_kernel is unused and triggers linter warnings;
rename it to _shape_transform in the function signature and any internal
references (if any) to silence the warning without changing behavior, ensuring
the parameter order and types remain unchanged for the wp.kernel decorator.
In `@newton/tests/test_hydroelastic.py`:
- Around line 158-170: The docstring for run_stacked_cubes_hydroelastic_test is
missing documentation for the new config parameter; update the Google-style
docstring of run_stacked_cubes_hydroelastic_test to include an Args section that
lists and describes all parameters (test, device, solver_fn, shape_type,
cube_half, reduce_contacts, config: SDFHydroelasticConfig | None) and describe
what config controls, and update the Returns section to state what the function
returns (model, solver, state_0, state_1, control, collision_pipeline,
initial_positions, cube_half) so callers and readers can see the new parameter
and return values clearly.
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
newton/tests/test_hydroelastic.py (1)
83-150:⚠️ Potential issue | 🟠 Major
reduce_contactsparameter can diverge fromconfig.reduce_contacts, mis-sizingrigid_contact_max.Line 143 sizes
rigid_contact_maxbased on the standalonereduce_contactsparameter, but the pipeline's actual behavior is governed byconfig.reduce_contacts. If a caller supplies a custom config withreduce_contacts=Falsebut omits thereduce_contactskeyword argument (which defaults toTrue), the buffer will be allocated for only 100 contacts while the pipeline generates up to 6000—risking silent truncation.Consider deriving
rigid_contact_maxfrom the config rather than the separate parameter, or removing the standalonereduce_contactsparameter now that config carries it:Suggested fix
def build_stacked_cubes_scene( device, solver_fn, shape_type: ShapeType, cube_half: float = CUBE_HALF_LARGE, - reduce_contacts: bool = True, sdf_hydroelastic_config: SDFHydroelasticConfig | None = None, ): ... if sdf_hydroelastic_config is None: sdf_hydroelastic_config = SDFHydroelasticConfig( output_contact_surface=True, - reduce_contacts=reduce_contacts, + reduce_contacts=True, anchor_contact=True, buffer_fraction=1.0, ) # Hydroelastic without contact reduction can generate many contacts - rigid_contact_max = 6000 if not reduce_contacts else 100 + rigid_contact_max = 6000 if not sdf_hydroelastic_config.reduce_contacts else 100
🧹 Nitpick comments (1)
newton/tests/test_hydroelastic.py (1)
158-169: Inconsistent parameter naming:configvssdf_hydroelastic_config.This function names the parameter
config(line 165) whilebuild_stacked_cubes_scenecalls itsdf_hydroelastic_config(line 89). Using the same name in both would reduce ambiguity, especially sinceconfigis very generic.
# Conflicts: # newton/tests/test_hydroelastic.py
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
newton/tests/test_hydroelastic.py (1)
83-152:⚠️ Potential issue | 🟡 Minor
reduce_contactsis silently ignored when a caller suppliessdf_hydroelastic_config.When a non-
Noneconfig is passed, thereduce_contactsparameter on line 88 is never applied to it (lines 134-140 are skipped), yet it still governsrigid_contact_maxon line 143. If someone later passes a config withreduce_contacts=Falsewhile relying on the function-parameter default (True), the contact-max budget will be wrong (100 instead of 6000).Consider deriving
rigid_contact_maxfrom the config that is actually used:Proposed fix
- # Hydroelastic without contact reduction can generate many contacts - rigid_contact_max = 6000 if not reduce_contacts else 100 + # Hydroelastic without contact reduction can generate many contacts + rigid_contact_max = 6000 if not sdf_hydroelastic_config.reduce_contacts else 100
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
newton/tests/test_hydroelastic.py (1)
134-150:⚠️ Potential issue | 🟡 Minor
rigid_contact_maxcan diverge from the config'sreduce_contactsflag.When a caller supplies
sdf_hydroelastic_configwithreduce_contacts=Falsebut leaves the function parameterreduce_contactsat its default (True), line 143 computesrigid_contact_max = 100instead of6000, which is likely too small and will silently drop contacts. Consider deriving the value from the config when one is provided:Proposed fix
+ effective_reduce = sdf_hydroelastic_config.reduce_contacts if sdf_hydroelastic_config else reduce_contacts # Hydroelastic without contact reduction can generate many contacts - rigid_contact_max = 6000 if not reduce_contacts else 100 + rigid_contact_max = 6000 if not effective_reduce else 100
🧹 Nitpick comments (1)
newton/tests/test_hydroelastic.py (1)
221-236: Stress-test configs omitanchor_contact=Trueandoutput_contact_surface=Trueunlike the default path.When
build_stacked_cubes_scenecreates a default config (line 135-140), it setsanchor_contact=Trueandoutput_contact_surface=True. These stress-test configs only setbuffer_mult_contact=2, so the other fields take class defaults (anchor_contact=False,output_contact_surface=False). If this is intentional (lighter config for stress tests), a brief comment would help; otherwise, consider aligning the fields.
lenroe
left a comment
There was a problem hiding this comment.
@nvtw nice! I think this makes a lot of sense to save memory. Left a few comments above. Also: I guess adding wrench matching back in after this would likely need a 2nd pass, which would make it slow. But that's a tradeoff worth taking as opt-in?
adenzler-nvidia
left a comment
There was a problem hiding this comment.
Review Summary
Critical Issues (3)
-
Docs reference non-existent
SDFHydroelasticConfig—collisions.rstuses:class:~newton.SDFHydroelasticConfigandSDFHydroelasticConfig(...)in a code example. Should beHydroelasticSDF.Config. -
Docs still reference removed
moment_matching— The Config code example at line 563 still hasmoment_matching=False(would raiseTypeError), and the "Other reduction options" table still has amoment_matchingrow. These need to be removed. -
Wrong copyright year in new example —
example_nut_bolt_hydro.pyuses 2025 but AGENTS.md requires 2026 for new files.
Important Issues (3)
-
contact_buffer_fractionhas no validation —buffer_fractionvalidates(0, 1]withValueError, butcontact_buffer_fraction(documented as "Range: (0, 1]") has no validation. Values like0.0,-1.0, or5.0are silently accepted. -
_effective_stiffnessdivision by zero —(k_a * k_b) / (k_a + k_b)produces NaN on GPU when both shapes havekh=0.0. Pre-existing pattern but duplicated in a new function. Consider guarding withif denom <= 0.0: return 0.0. -
encode_octdivision by zero for degenerate normals —1.0 / (abs(n[0]) + abs(n[1]) + abs(n[2]))produces Inf for(0,0,0)normals from degenerate marching-cubes triangles. Consider an L1-norm guard.
Suggestions (3)
-
Parameter naming inconsistency — New
example_nut_bolt_hydro.pyusesnum_worldswhile siblingexample_nut_bolt_sdf.pyusesworld_count. -
Commented-out code —
example_nut_bolt_hydro.py:313has a commented-outmodel.collide()call. Either remove or explain. -
No unit test for octahedral encode/decode round-trip — A battery test asserting
||decode(encode(n)) - n|| < epsfor various normals would catch sign errors in the z<0 hemisphere.
Strengths
- Algorithmically sound: octahedral encoding, per-entry k_eff, pre-prune top-K, and aggregate accumulation are correctly implemented with consistent encode/decode at all store/load sites.
- Good defensive coding: per-slot bounds checks,
max(..., 64)floors,wp.min(num_contacts, capacity)caps. - Actionable overflow warnings mentioning
buffer_fractionas a tuning knob. - Well-structured tests with monotonicity invariants (
test_buffer_fraction_no_crash). - Clean moment-matching removal with friction_scale set to constant 1.0.
Most of it should now be addressed |
adenzler-nvidia
left a comment
There was a problem hiding this comment.
Second Review Pass
Critical Issues
1. Stale docs reference removed betas and sticky_contacts (docs/concepts/collisions.rst): The code example and "Other reduction options" table still reference betas=(10.0, -0.5) and sticky_contacts=0.0 — parameters from the old moment-matching system removed in this PR. Users copying the example will get TypeError. The "Understanding betas" subsection is also now obsolete.
2. body_key instead of body_label (example_nut_bolt_hydro.py): _init_test_tracking() uses self.model.body_key but the standard API attribute is body_label (see recent rename in 446b60da). Will cause AttributeError in test mode.
Important Issues
3. New example not registered in test_examples.py: example_nut_bolt_hydro has a test_final() method but no corresponding add_example_test() entry.
4. Hashtable full silently drops contacts with no warning (see inline comment).
5. verify_collision_step warnings only via wp.printf: In production (GUI apps, headless servers, redirected stdout), these are the only signal that contacts are being dropped, and they're easily missed. Consider also setting a GPU-visible flag that the host can check and issue a Python warnings.warn().
Suggestions
GlobalContactReducerclass docstring still saysnormal: vec3— should bevec2(octahedral-encoded).- No test covers
reduce_contacts=True, pre_prune_contacts=False— this is a distinct code path. entry_k_effcorrectness not directly unit-tested — only indirectly via equilibrium checks.
There was a problem hiding this comment.
Actionable comments posted: 8
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
docs/concepts/collisions.rst (1)
556-564:⚠️ Potential issue | 🟠 MajorRemove unsupported
HydroelasticSDF.Configparameters from the example.
betasandsticky_contactsare not part ofHydroelasticSDF.Config, so the snippet will error if copied verbatim.✏️ Suggested fix
config = HydroelasticSDF.Config( reduce_contacts=True, # Enable contact reduction buffer_fraction=0.2, # Reduce hydroelastic GPU buffer allocations - betas=(10.0, -0.5), # Scoring thresholds (default) - sticky_contacts=0.0, # Temporal persistence (0 = disabled) normal_matching=True, # Align reduced normals with aggregate force )🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@docs/concepts/collisions.rst` around lines 556 - 564, The example uses unsupported parameters on HydroelasticSDF.Config (remove the invalid keys): delete the betas and sticky_contacts entries from the config literal and leave only supported fields (e.g., reduce_contacts, buffer_fraction, normal_matching); update any inline comments to reflect the remaining valid options and ensure the snippet constructs HydroelasticSDF.Config(...) with only valid attributes.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@asv/benchmarks/simulation/bench_contacts.py`:
- Around line 35-106: Add Google-style docstrings to the helper and benchmark
classes: document the function _import_example_class (describe its purpose,
Args: module_names: list[str], Returns: the Example class or raises
SkipNotImplemented) and add docstrings to FastExampleContactSdfDefaults and
FastExampleContactHydroWorkingDefaults (describe the benchmark purpose,
attributes like repeat/number/num_frames with units where applicable, and
setup/setup_cache/time_simulate behavior). Use Google-style sections (Args,
Returns, Raises) and include SI unit notation [unit] for any physical quantities
referenced.
In `@newton/_src/geometry/sdf_hydroelastic.py`:
- Around line 1333-1336: Rename the intentionally unused kernel parameters
shape_local_aabb_lower, shape_local_aabb_upper, and shape_voxel_resolution by
prefixing each with an underscore (e.g., _shape_local_aabb_lower,
_shape_local_aabb_upper, _shape_voxel_resolution) in the kernel/function
signature in sdf_hydroelastic.py to silence ARG001 warnings; also update any
internal references (if present) to the new underscore-prefixed names to keep
the signature consistent and avoid unused-variable linter errors.
In `@newton/examples/__init__.py`:
- Around line 38-41: The wrapper function download_external_git_folder currently
imports download_git_folder from the internal module
newton._src.utils.download_assets; change this to import the public re-export
(e.g., from newton.utils import download_git_folder) and remove the noqa comment
and any reference to newton._src; if the public re-export does not exist, add a
re-export of download_git_folder in the public module (newton.utils) that
imports from newton._src.utils.download_assets and exposes download_git_folder,
then update download_external_git_folder to import from newton.utils so examples
no longer import from internal modules.
In `@newton/examples/contacts/example_nut_bolt_hydro.py`:
- Around line 154-205: The two long ValueError messages in the scene and solver
selection branches (the raises in the scene handling after
_build_nut_bolt_scene/_build_gears_scene and the solver selection where
self.solver_type is checked) trigger Ruff TRY003; replace them with either short
error messages (e.g., "unknown scene" and "unknown solver") or introduce small
custom exception classes (e.g., class UnknownSceneError(Exception) and class
UnknownSolverError(Exception)) and raise those with concise messages; ensure the
new exception symbols (UnknownSceneError/UnknownSolverError) are defined near
the top of the module and used in place of the long f-string ValueError() calls
so the checks in scene and solver selection use the new exceptions.
- Around line 64-107: Add Google-style docstrings to the new helper functions
add_mesh_object and load_mesh_with_sdf: for each function add a short summary
line, an Args section that documents every parameter (e.g., builder:
ModelBuilder, mesh: Mesh, transform: wp.transform with position in [m],
shape_cfg: ModelBuilder.ShapeConfig or None, key: str or None, center_vec:
wp.vec3 [m] or None, scale: float [unitless], mesh_file: str, center_origin:
bool), include units for all physical quantities such as transform position [m]
and contact_margin [m], and a Returns section describing the return types
(add_mesh_object -> int body id; load_mesh_with_sdf -> tuple[newton.Mesh,
wp.vec3] with center_vec in [m]); follow Google docstring formatting and apply
the same docstring style and unit annotations to other new helper methods in
this file.
In `@newton/examples/contacts/example_nut_bolt_sdf.py`:
- Around line 243-245: Add an entry for the nut_bolt_sdf example to README.md
mirroring other example entries (Basic/Robot/Cable): mention the run command "uv
run -m newton.examples nut_bolt_sdf", include a short description referencing
the Example class in newton/examples/contacts/example_nut_bolt_sdf.py and its
meaningful test_final() method, and add a screenshot (thumbnail) and caption
showing the example output; follow the same formatting, section placement, and
caption style used by the other examples.
In `@newton/tests/test_contact_reduction_global.py`:
- Around line 620-651: The test function test_oct_encode_decode_roundtrip uses a
single-line docstring; replace it with a Google-style docstring that briefly
describes the test purpose and adds Args and Returns sections: describe the
parameters (test, device) under Args and state that the function returns None
under Returns; mention units where relevant (e.g., error is dimensionless) if
you reference the measured max_error, and keep the description concise; update
only the docstring for test_oct_encode_decode_roundtrip (no code changes to
roundtrip_error_kernel).
In `@newton/tests/test_hydroelastic.py`:
- Around line 267-417: Several tests and the helper
_compute_total_active_weight_sum use short single-line docstrings; update each
to Google-style docstrings including a short description, Args with parameter
names and SI units (e.g., cube_half [m], contact_margin [m], buffer_fraction
[unitless], device, test where applicable), and Returns (with types and units if
applicable). Specifically, replace the docstrings in
test_buffer_fraction_no_crash, _compute_total_active_weight_sum,
test_iso_scan_scratch_buffers_are_level_sized, and
test_pre_prune_accumulate_all_penetrating_aggregates_increases_total_weight_sum
with Google-style blocks that list Args and Returns and annotate all physical
quantities with [m] or other SI units; keep descriptions concise and consistent
with project guidelines.
---
Outside diff comments:
In `@docs/concepts/collisions.rst`:
- Around line 556-564: The example uses unsupported parameters on
HydroelasticSDF.Config (remove the invalid keys): delete the betas and
sticky_contacts entries from the config literal and leave only supported fields
(e.g., reduce_contacts, buffer_fraction, normal_matching); update any inline
comments to reflect the remaining valid options and ensure the snippet
constructs HydroelasticSDF.Config(...) with only valid attributes.
---
Duplicate comments:
In `@newton/_src/geometry/contact_reduction_global.py`:
- Around line 278-313: Update the encode_oct and decode_oct docstrings to
Google-style with explicit Args and Returns sections: for encode_oct(document
that n: wp.vec3 is a unit (normalized) surface normal, type wp.vec3,
unitless/normalized) and that it returns wp.vec2 (the octahedral 2D encoding,
unitless); for decode_oct(document that e: wp.vec2 is the oct-encoded vector,
type wp.vec2, unitless) and that it returns wp.vec3 (the reconstructed unit
normal, type wp.vec3, unitless/normalized). Keep the existing brief description,
mention precision/behavior as before, and follow the repo’s docstring formatting
(Args:, Returns:) for both functions (encode_oct, decode_oct).
In `@newton/_src/geometry/contact_reduction_hydroelastic.py`:
- Around line 83-88: Add a Google-style docstring to the _effective_stiffness
function describing the purpose and documenting Args and Returns with SI units:
explain k_a and k_b are stiffness values (units [N/m]) and the function returns
the effective stiffness (units [N/m]); also note the behavior when denom <= 0.0
(returns 0.0). Place the docstring immediately above the def
_effective_stiffness(...) and keep content concise following the project's
docstring conventions.
- Around line 152-160: The kernel reduce_hydroelastic_contacts_kernel has an
unused parameter shape_transform causing ARG001; rename it to _shape_transform
(or prefix with an underscore) in the function signature to silence the linter
and update any internal references to use the new name if they exist (leave
actual logic unchanged if the parameter truly isn’t used).
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (3)
newton/examples/robot/example_robot_panda_hydro.py (1)
234-234: Nit:-0.0is misleading — simplify to0.0.
-0.0is IEEE 754 negative zero and is arithmetic-equivalent to0.0in all float operations (including addition on lines 500–501). The leading minus appears to be a leftover from the previous value (-0.015) and will confuse readers.♻️ Proposed fix
- self.place_offset = -0.0 + self.place_offset = 0.0🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@newton/examples/robot/example_robot_panda_hydro.py` at line 234, The assignment sets self.place_offset = -0.0 which is misleading; change the initialization of the place_offset attribute (self.place_offset) to use 0.0 instead of -0.0 so the value is canonical and clearer (the rest of the code, e.g., arithmetic using place_offset, remains unchanged).newton/_src/geometry/sdf_hydroelastic.py (2)
1423-1543: Pre-prune local compaction logic is correct but carries high register load.The top-2 penetrating + 1 non-penetrating selection is implemented correctly. The shift from pen0→pen1 on a new best score maintains the proper ranking invariant.
One note: the 9
face_vertsvec3 variables (best_pen0_v0..v2,best_pen1_v0..v1,best_nonpen_v0..v2) are assigned unconditionally inside the face loop but only read whenoutput_vertices=True. When visualization is disabled, these 27 floats may still consume registers depending on compiler dead-store elimination.If register pressure becomes an issue on occupancy-sensitive workloads, consider guarding the vertex assignments with
wp.static(output_vertices)as well:Sketch
best_pen0_center = face_center + if wp.static(output_vertices): best_pen0_v0 = face_verts[0] best_pen0_v1 = face_verts[1] best_pen0_v2 = face_verts[2](Apply the same pattern to pen1 and nonpen assignments.)
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@newton/_src/geometry/sdf_hydroelastic.py` around lines 1423 - 1543, The loop stores face_verts into the many temp vertex slots (best_pen0_v0..v2, best_pen1_v0..v2, best_nonpen_v0..v2) even when output_vertices is false, increasing register pressure; wrap the assignments to those vertex variables in a wp.static(output_vertices) guard so the stores are compiled out when visualization is disabled (apply the same pattern for the pen0, pen1 and nonpen assignment sites where face_verts[...] are written and for the iso_vertex writes if already present), referencing the variables best_pen0_v0..best_pen0_v2, best_pen1_v0..best_pen1_v2, best_nonpen_v0..best_nonpen_v2, face_verts and the output_vertices flag to locate the code to change.
108-113: Consolidate duplicate@wp.func:get_effective_stiffnessand_effective_stiffnessBoth functions compute identical harmonic-mean stiffness logic. Move the shared function to
contact_reduction_global.py(which already houses shared@wp.funcutilities likecompute_effective_radiusandmake_contact_key) to prevent maintenance divergence.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@newton/_src/geometry/sdf_hydroelastic.py` around lines 108 - 113, Move the duplicate harmonic-mean stiffness logic out of newton/_src/geometry/sdf_hydroelastic.py by removing get_effective_stiffness and instead reuse a single `@wp.func` placed in contact_reduction_global.py (where compute_effective_radius and make_contact_key live); implement the function there with the same signature (e.g., effective_stiffness or get_effective_stiffness) and update callers in sdf_hydroelastic.py and anywhere _effective_stiffness was used to import/alias and call that centralized `@wp.func` so both modules share the one implementation.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@newton/examples/contacts/example_nut_bolt_sdf.py`:
- Around line 63-110: Add Google-style docstrings to the new helper functions
add_mesh_object and load_mesh_with_sdf: for each function include a short
summary, an Args section listing each parameter with its type and SI units where
applicable (e.g., transform.p and center_vec as positions [m], scale as
unitless, mesh_file as path string, shape_cfg as newton.ModelBuilder.ShapeConfig
or None), and a Returns section describing return values and their types/units
(e.g., mesh: newton.Mesh, center_vec: wp.vec3 [m]); include notes about behavior
(e.g., center_origin shifts vertices by center [m]) and any defaults (e.g.,
default margin value) to match repository docstring standards.
In `@newton/tests/test_hydroelastic.py`:
- Around line 82-90: Update the build_stacked_cubes_scene docstring to
Google-style with an Args/Returns section that documents the new
sdf_hydroelastic_config param and units for physical values: list each parameter
(device, solver_fn, shape_type, cube_half [m], reduce_contacts,
sdf_hydroelastic_config) with a one-line description and units for cube_half and
any other physical quantities, describe the expected type for
sdf_hydroelastic_config (HydroelasticSDF.Config | None) and its effect, and add
a Returns block that enumerates the returned components (scene, bodies, solvers,
etc.) and their types/units where applicable; keep the top-line summary sentence
and ensure clarity for testers using build_stacked_cubes_scene.
---
Duplicate comments:
In `@newton/_src/geometry/contact_reduction_global.py`:
- Around line 278-305: The encode_oct function already adds a numerical guard
using l1 < 1.0e-20 to avoid division-by-zero for degenerate normals; ensure the
guard remains in place in encode_oct (and that it returns wp.vec2(0.0, 0.0) for
that case) and keep the octahedral flip logic (oz < 0.0 branch) intact so
encode_oct, ox, oy, oz, inv_l1 operate as intended.
In `@newton/_src/geometry/contact_reduction_hydroelastic.py`:
- Around line 83-88: The division-by-zero guard in _effective_stiffness is
correct and resolves the prior issue: keep the denom <= 0.0 check in the
_effective_stiffness(k_a, k_b) wp.func and return 0.0 when triggered; ensure
returned literals and comparisons remain compatible with wp.float32 (cast
constants if necessary) to avoid type warnings but no further code change is
required.
- Around line 152-161: The parameter shape_transform in the
reduce_hydroelastic_contacts_kernel function is unused and triggers ARG001;
either remove it from the signature if it's truly unnecessary or rename it to
_shape_transform (or prefix with an underscore) so static analysis ignores it,
or add a short in-signature comment explaining why it must remain (e.g.,
reserved for future use) — update the function signature for
reduce_hydroelastic_contacts_kernel accordingly and ensure any callers are
adjusted if you remove or rename the parameter.
In `@newton/examples/__init__.py`:
- Around line 38-41: The example wrapper download_external_git_folder currently
imports from the internal module newton._src.utils.download_assets; add a public
re-export for download_git_folder (for example expose it from a public package
like newton.utils or newton.downloads) and then change the import in
download_external_git_folder to import download_git_folder from that public
module instead of newton._src.utils.download_assets, removing the
now-unnecessary noqa; keep the function signature and return behavior the same.
In `@newton/examples/contacts/example_nut_bolt_hydro.py`:
- Around line 179-230: Replace the long ValueError uses in the scene and solver
selection with dedicated exceptions: define small custom exceptions (e.g.,
UnknownSceneError and UnknownSolverError) at module scope and raise
UnknownSceneError when the branch currently does raise ValueError(f"Unknown
scene '{scene}') and raise UnknownSolverError when the branch currently does
raise ValueError(f"Unknown solver '{self.solver_type}'); keep the raised message
short (or none) to satisfy TRY003 and update any callers/imports if needed so
the new exception types are used instead of ValueError.
In `@newton/tests/test_contact_reduction_global.py`:
- Around line 620-626: The docstring for test_oct_encode_decode_roundtrip is
missing a Returns section; update the Google-style docstring for the function
(test_oct_encode_decode_roundtrip) to include a Returns: entry (e.g., "None")
describing the function's return value so it is fully compliant with the project
docstring guidelines.
In `@newton/tests/test_hydroelastic.py`:
- Around line 181-193: The docstring for run_stacked_cubes_hydroelastic_test is
missing Google-style Args/Returns details (including the new config parameter);
update the triple-quoted docstring to describe the function purpose and add an
Args section documenting test, device, solver_fn, shape_type, cube_half,
reduce_contacts, and particularly config: type and meaning, and add a Returns
section describing the tuple returned (model, solver, state_0, state_1, control,
collision_pipeline, initial_positions, cube_half) and their types/semantics so
it conforms to the project's Google-style docstring guidelines.
---
Nitpick comments:
In `@newton/_src/geometry/sdf_hydroelastic.py`:
- Around line 1423-1543: The loop stores face_verts into the many temp vertex
slots (best_pen0_v0..v2, best_pen1_v0..v2, best_nonpen_v0..v2) even when
output_vertices is false, increasing register pressure; wrap the assignments to
those vertex variables in a wp.static(output_vertices) guard so the stores are
compiled out when visualization is disabled (apply the same pattern for the
pen0, pen1 and nonpen assignment sites where face_verts[...] are written and for
the iso_vertex writes if already present), referencing the variables
best_pen0_v0..best_pen0_v2, best_pen1_v0..best_pen1_v2,
best_nonpen_v0..best_nonpen_v2, face_verts and the output_vertices flag to
locate the code to change.
- Around line 108-113: Move the duplicate harmonic-mean stiffness logic out of
newton/_src/geometry/sdf_hydroelastic.py by removing get_effective_stiffness and
instead reuse a single `@wp.func` placed in contact_reduction_global.py (where
compute_effective_radius and make_contact_key live); implement the function
there with the same signature (e.g., effective_stiffness or
get_effective_stiffness) and update callers in sdf_hydroelastic.py and anywhere
_effective_stiffness was used to import/alias and call that centralized `@wp.func`
so both modules share the one implementation.
In `@newton/examples/robot/example_robot_panda_hydro.py`:
- Line 234: The assignment sets self.place_offset = -0.0 which is misleading;
change the initialization of the place_offset attribute (self.place_offset) to
use 0.0 instead of -0.0 so the value is canonical and clearer (the rest of the
code, e.g., arithmetic using place_offset, remains unchanged).
* [Warp Raytrace] Added device parameter (newton-physics#1544) * [Warp Raytrace] Added device parameter to previously overlooked call (newton-physics#1545) * SolverMuJoCo: Fix tolerance clamping in update_solver_options_kernel (newton-physics#1546) * Change default shape_ke to align with MuJoCo, parse geom solref from MJCF for contact stiffness/damping (newton-physics#1491) Signed-off-by: Alain Denzler <adenzler@nvidia.com> * Fix log_shapes broadcasting for length-1 warp arrays (newton-physics#1550) * Fix XPBD restitution particle index (newton-physics#1557) * Out-of-Bound memory read in example_diffsim_bear newton-physics#1386 (newton-physics#1533) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Add versioned documentation deployment to GitHub Pages (newton-physics#1560) * Fix broken documentation links after versioned docs deployment (newton-physics#1566) * VBD New Features (newton-physics#1479) Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> * Add banners to membership verification workflow steps (newton-physics#1569) * Support cable junctions (newton-physics#1519) Signed-off-by: JC <jumyungc@nvidia.com> * Rename parameter I to inertia newton-physics#1543 (newton-physics#1551) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Fix example_robot_anymal_c_walk.py (newton-physics#1574) * Change everywhere linesearch to iterative (newton-physics#1573) * Remove standard collision pipeline (newton-physics#1538) * USD Plumbing MJC solver attributes through resolver and custom attribute framework (newton-physics#1463) Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com> Signed-off-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: adenzler-nvidia <adenzler@nvidia.com> * Fix child shape filtering (newton-physics#1559) * Fix ViewerRerun ignoring hidden parameter in log_mesh and log_instances (newton-physics#1555) * Make NxN and SAP broad phase respect filtered pairs (newton-physics#1554) * Add --quiet flag to examples to suppress Warp messages (newton-physics#1585) * Defer resolution of MESH_MAXHULLVERT default in importers (newton-physics#1587) * Fix TypeError when finalizing SDF geometry with device kwarg (newton-physics#1586) * Make MESH_MAXHULLVERT a static class attribute Mesh.MAX_HULL_VERTICES. (newton-physics#1598) * Significant non-determinism in unified collision pipeline for anymal_c_walking example newton-physics#1505 (newton-physics#1588) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Add test for non-contiguous case (newton-physics#1549) * Fix nightly Warp CI to resolve pre-release builds (newton-physics#1606) * Verify default class and value handling (newton-physics#1556) * SolverMuJoCo: Expand geom_margin to avoid OOB read with heterogeneous worlds (newton-physics#1607) * Fix bug in control clear method (newton-physics#1602) * Enable Use of Newton IK in Lab newton-physics#662 (newton-physics#1539) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Fix import of non-articulated joints (newton-physics#1535) * Deduplicate _process_joint_custom_attributes frequency handling (newton-physics#1584) * Add CI check for stale API docs and fix local build warnings (newton-physics#1570) * Update Pillow 12.0.0 to 12.1.1 (newton-physics#1612) * Prepare handling of mimic constraints in Newton (newton-physics#1523) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Support floating, base_joint and parent_body arguments for importers (newton-physics#1498) * Fix contact buffer memory overestimation (newton-physics#1614) * Configure banned-module-level-imports for ruff (newton-physics#1583) * Explicit `Contacts` instantiation with `Model.contacts()` and `CollisionPipeline.contacts()` (newton-physics#1445) * Fix the quadruped benchmark regression (newton-physics#1615) * Change default ignore_inertial_definitions from True to False (newton-physics#1537) * Finalize the Recording API (newton-physics#1600) * SolverMuJoCo: Fix ccd_iterations default (newton-physics#1631) * update gitignore to ignore Claude Code sandbox files (newton-physics#1628) * Add mimic joint support to SolverMuJoCo (newton-physics#1627) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Add --no-cache-clear flag to test runner (newton-physics#1629) * Update MuJoCo and MuJoCo Warp to 3.5.0 release (newton-physics#1633) * Improve inertia parsing from USD (newton-physics#1605) Signed-off-by: Eric Heiden <eheiden@nvidia.com> Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Remove standalone .typos.toml in favor of pyproject.toml config (newton-physics#1642) * Heightfield support newton-physics#1189 (newton-physics#1547) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Example_robot_policy: Replace ValueError with clean error for missing PhysX policy (newton-physics#1636) Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com> * Avoid unnecessary inflation of the contact reduction voxel aabb (newton-physics#1650) * Rename num_worlds to world_count (newton-physics#1634) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Support parsing autolimits from MJCF (newton-physics#1651) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Fix particle-shape restitution ignoring body velocity (newton-physics#1273) (newton-physics#1580) * Add overflow warnings for narrow-phase collision buffers (newton-physics#1643) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Documentation: add units to model/state docstrings (newton-physics#1649) * fix(viewer): add missing JointType.BALL support to contact line kernel (newton-physics#1640) * Make terrain mesh visual-only in anymal C walking example (newton-physics#1660) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Fix initialization of collider state in MPM finite difference mode (newton-physics#1652) * docs: document ModelBuilder.default_shape_cfg (newton-physics#1662) * Finalize the collision API (newton-physics#1581) * Remove hardcoded subnet ID from AWS workflow (newton-physics#1664) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Attempt to fix AWS config (newton-physics#1666) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Update AWS workflows to g7e.2xlarge with multi-AZ failover (newton-physics#1669) * fix(viewer-usd): disambiguate log_points colors for N=3 warp arrays (newton-physics#1661) * Viewer gl optimizations (newton-physics#1656) Signed-off-by: Miles Macklin <mmacklin@nvidia.com> Signed-off-by: Eric Heiden <eheiden@nvidia.com> Co-authored-by: Eric Heiden <eheiden@nvidia.com> * docs: add articulation workflow guidance and regression check (newton-physics#1663) * fix(examples): propagate IK solution to model state in Franka example (newton-physics#1637) * fix(deps,docs): bump nbconvert to 7.17.0 and fix ArticulationView doctest (newton-physics#1670) * Cleanup and improve some example (newton-physics#1625) Signed-off-by: adenzler-nvidia <adenzler@nvidia.com> Co-authored-by: adenzler-nvidia <adenzler@nvidia.com> * Handle zero-mass bodies and flip ensure_nonstatic_links default (newton-physics#1635) * Additional testing for ArticulationView (newton-physics#1527) Co-authored-by: Eric Heiden <eheiden@nvidia.com> * Update warp-lang nightly to 1.12.0.dev20260217 (newton-physics#1677) * Change default friction coefficients to match MuJoCo (newton-physics#1681) * Refactor mesh creation functions (newton-physics#1654) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Parse joint frictionloss from MJCF (newton-physics#1680) * Fix free joint body_pos and add ref/qpos0 support for MuJoCo solver (newton-physics#1645) * Fix root shapes in ArticulationView with fixed base (newton-physics#1639) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Use model collision methods and remove `create_collision_pipeline` from examples (newton-physics#1648) Co-authored-by: nvtw <110816143+nvtw@users.noreply.github.com> * Fix XPBD apply_joint_forces ignoring child joint transform (newton-physics#1582) * Adjust SDF API (newton-physics#1644) Co-authored-by: Eric Heiden <eheiden@nvidia.com> * Optimize test suite runtime (~18% faster) (newton-physics#1689) * Remove ensure_nonstatic_links option from importers (newton-physics#1682) Signed-off-by: adenzler-nvidia <adenzler@nvidia.com> * SolverMuJoCo: Add geom_margin support, align thickness default with MuJoCo and schemas (newton-physics#1653) * refactor: privatize non-public solver internals (newton-physics#1683) * Fix option parsing with multiple <option> elements from includes (newton-physics#1692) * Bump warp-lang nightly and newton-usd-schemas (newton-physics#1693) * Get rid of tkinter dependency (newton-physics#1676) * Fix SDF example contact buffer overflow (newton-physics#1695) * Fix implicit biastype for position/velocity actuator shortcuts (newton-physics#1678) * Fix include processor to respect meshdir/texturedir (newton-physics#1685) * Reduce cold-cache Warp compile time for geometry modules (newton-physics#1618) Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: adenzler-nvidia <adenzler@nvidia.com> * Fix xyzw-to-wxyz quaternion conversion in body inertia kernel (newton-physics#1694) * Rename key to label and add hierarchical labels (newton-physics#1592) (newton-physics#1632) * Expose geometry SDF helpers on public API (newton-physics#1684) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Improve custom frequency handling from USD, parse MuJoCo actuators and tendons (newton-physics#1510) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Signed-off-by: Eric Heiden <eheiden@nvidia.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Collapse fixed joints with non articulated bodies (newton-physics#1608) * Fix renaming joint_key -> joint_label (newton-physics#1700) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Bump .python-version from 3.11 to 3.12 (newton-physics#1702) * Replace CITATION.md with CITATION.cff (newton-physics#1706) * Respect MJCF contype=conaffinity=0 via collision_group=0 (newton-physics#1703) * Make ViewerUSD reuse existing USD layers for the same output path (newton-physics#1704) Signed-off-by: Eric Heiden <eheiden@nvidia.com> Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Remove dead up-axis conversion from MuJoCo solver (newton-physics#1707) * Skip IK cube stacking example test (newton-physics#1713) * Fix global pairs (world=-1) not exported to MuJoCo spec (newton-physics#1705) * Reduce the memory consumption of hydroelastic contacts (newton-physics#1609) * Fix flakiness cube stacking (newton-physics#1714) * Fix collision shapes not toggleable in viewer UI (newton-physics#1715) * Fix softbody examples table layout in README (newton-physics#1716) * Standardize sensor APIs: label matching, keyword args, and update() method naming (newton-physics#1665) * Fix intermittent crash in parallel test runner from Manager proxy race (newton-physics#1721) * Clean up inertia.py function arguments to match Mesh.create_* API (newton-physics#1719) * Reduce default test runner verbosity (newton-physics#1723) * Add menagerie comparison tests for SolverMuJoCo (newton-physics#1720) Signed-off-by: Alain Denzler <adenzler@nvidia.com> Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com> Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com> * Add spatial tendon support for MuJoCo solver (newton-physics#1687) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Expose qfrc_actuator from mujoco (newton-physics#1698) * Skip non-MODEL custom attributes in finalize validation (newton-physics#1734) * Resolve inheritrange for position actuators in MJCF parser (newton-physics#1727) * Support dampratio for position/velocity actuator shortcuts (newton-physics#1722) * Limit concurrency to 1 (newton-physics#1736) * Add a helper method for checking applied usd (newton-physics#1731) * Enhance playback URL handling in ViewerViser (newton-physics#1742) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Removed RenderShapeType (newton-physics#1748) * Override only MassAPI attributes that have been authored (newton-physics#1688) * Integration of newton-actuators (newton-physics#1342) Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com> * Fix ArticulationView crash with fixed-joint-only articulations (newton-physics#1726) * Improve retrieval of Jupyter base URL in ViewerViser (newton-physics#1750) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Disable dynamics testing for UR5e and Apollo tests to avoid CI flakiness (newton-physics#1755) * Margin and Gap rename (newton-physics#1732) * Vbd Demos Fixing (newton-physics#1740) * Fix ViewerViser.log_lines method (newton-physics#1764) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Update warp-lang dependency to 1.12.0rc1 (newton-physics#1763) * Fix fromto capsule/cylinder orientation in MJCF parser (newton-physics#1741) * fix: multi-world particle BVH indexing (newton-physics#1641) Co-authored-by: Eric Heiden <eheiden@nvidia.com> * Clean up unused and internal-only kwargs in SolverMuJoCo (newton-physics#1766) * Parsing of the mimic joint and contact gap/margin from newton schemas (newton-physics#1690) Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com> * API Refactor v2 (newton-physics#1749) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Support explicit geom mass attributes in MJCF (newton-physics#1744) * Bump flask and werkzeug in lockfile for security (newton-physics#1769) Co-authored-by: Cursor <cursoragent@cursor.com> * Split MJCF worldbody root bodies into separate articulations (newton-physics#1754) * Expose VBD rigid contact forces for solver coupling (newton-physics#1745) Signed-off-by: JC <jumyungc@nvidia.com> * Add MJCF ellipsoid geom import and regression test (newton-physics#1772) Co-authored-by: Cursor <cursoragent@cursor.com> * Weld equality constraints parsed from mjcf are given Nan as the default value of torquescale. The correct default should be 1.0 (newton-physics#1760) * Improve picking accuracy and stability (newton-physics#1712) * Franka cloth demo improvement (newton-physics#1765) * Support computing sensing object transforms & API cleanup (newton-physics#1759) * Remove threading workaround (newton-physics#1751) * [Warp Raytrace] Consolidated ray intersect functions, renamed Options to Config (newton-physics#1767) * Improve README example gallery for PyPI compatibility (newton-physics#1776) * Fix issue with mesh in rerun viewer (newton-physics#1768) * Add PhysxMimicJointAPI parsing to USD importer (newton-physics#1735) * Move some math functions to Warp (newton-physics#1717) Signed-off-by: Eric Heiden <eheiden@nvidia.com> Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Add test to ensure MJCF xform argument is relative (newton-physics#1777) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Emit diaginertia instead of fullinertia for diagonal body inertia (newton-physics#1780) * Change default joint armature from 0.01 to 0 (newton-physics#1782) * Fix default kp/kv for position and velocity actuators (newton-physics#1786) * Lock body inertia after explicit MJCF <inertial> element (newton-physics#1784) * Fix for MJCF actuator custom attributes (newton-physics#1783) * Bump version to 0.2.3 Prepare the package metadata for the v0.2.3 release tag. * Fix ViewerRerun rendering of instances from hidden meshes (newton-physics#1788) * API cleanup (newton-physics#1789) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * BODY actuator target name bypasses body name de-duplication in SolverMuJoCo (newton-physics#1729) * Use default density for visual geoms in MJCF import (newton-physics#1781) * Fix GL viewer crash on Wayland (newton-physics#1793) * Make USD xform parameter control absolute articulation placement (newton-physics#1771) * Fix CUDA context corruption in SDF implementation (newton-physics#1792) * Bump mujoco-warp dependency to 3.5.0.2 (newton-physics#1779) * Fix MuJoCo margin/gap conversion (newton-physics#1785) * Bump version to 1.1.0.dev0 (newton-physics#1798) * Missing unittest.main added back to test_import_mjcf.py. Helps with F5 debugging in VS Code. (newton-physics#1796) * Improve H1 example (newton-physics#1801) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Fix ViewerViser.set_camera() (newton-physics#1805) * Rename examples to follow prefix-first naming convention (newton-physics#1802) * Improve MuJoCo actuator domain randomization (newton-physics#1773) * Restore in_cup test in hydro example (newton-physics#1775) * Fix `newton.geometry` imports and change of Mesh maxhullverts global constant * Adapt to having both margin and gap arrays for each geom/shape * Fix for newton.geometry API changes in primitive/narrowphase.py * Fix removal of `BroadPhaseMode` IntEnum and revert to newton-sytle string literals * WIP: Adapt geometry/unified.py to fix breaking changes to `newton.geometry` API * First pass of API adjustments * Patch more gaps (with respect to margin and gap renaming) * GeoType.SDF was removed - reflect that in Kamino * Introduce CoM position offsets w.r.t body frame and operations to convert between body CoM state and generic local body-fixed reference frames. * Add caching of per-entity labels/names/keys in the Model subcontainers * Remove SDF shape wrapper since it's now internal to mesh handling in CD pipelines * Fix USD test assets * Add Newton <--> Kamino joint type conversion operations and per-space default limit constants * Add some cleanup to geometry and unified CD + UTs * Add Newton <--> Kamino shape type conversion operations * Apply new default joint coord limit constants to limits.py * Adapt foubrar model builder and USD asset to produce the same result in sim example * Purge "physical" goems and collapse all into a single group, and purge geometry "layers" * Disable allocation per-joint wrenches by default and make them optional * Make `Model` a dataclass * Separate ModelData* containers into own `core/data.py` module * Fix imports of ModelData * Rename `Model` as `ModelKamino` * Rename `ModelData` as `DataKamino` * Rename `State` as `StateKamino` * Rename `Control` as `ControlKamino` * Rename `Limits` as `LimitsKamino` * Rename `Contacts` as `ContactsKamino` * Rename `ModelBuilder` as `ModelBuilderKamino` * Make imports in test utilities relative * Revise CD meta-data attributes and their computation in GeometryModel and ModelBuilderKamino * Revise primitive CD pipeline * Revise unified CD pipeline * Revise CD front-end interfaces * Fix UTs and relevant utils for interface changes to CD * Change to `wp.DeviceLike` to account for upcoming deprecation of `Devicelike` * Depracate legacy HDF5 data io (will be replaced in the future) * Fix banned imports at module level * Modify USD importer to detect articulations and order geoms and joints similarly to how the Newton `parse_usd` function does. * Add conversion operation from `newton.Model` to `ModelKamino` * Add data, state and control container conversions * Add SolverKamino wrapper that fullfils newton integration interface * Add newton integration examples * Add SolverKamino to newton solver module imports * WIP: fix problem with lambda_j being allocated for only kinematic constraints and failing on array copying * Fix banned git import in benchmark * Rename *Settings to *Config (#213) * Rename SolverKaminoSettings -> SolverKaminoConfig * Rename DualProblemSettings -> DualProblemConfig * Rename CollisionDetectorSettings -> CollisionDetectorConfig * Rename PADMMSettings -> PADMMConfig * Rename ForwardKinematicsSolverSettings -> ForwardKinematicsSolverConfig * Rename SimulatorSettings -> SimulatorConfig * Add check for model compatibility in SolverKamino (#209) * Fix device assignment in sparse CG test on CPU (#216) * Replace Enum-type config attributes with Literal (#215) * Replace warmstart mode config param with literal * Replace contact warmstart mode config param with literal * Replace rotation correction config param with literal * Replace penalty update config param with literal * Replace FK preconditioner option config param with literal * Add post-init checks for dual/PADMM configs * Rename FKPreconditionerOptions to FKPreconditionerType * Remove WorldDescriptor from ModelKamino (#219) * Add geom index offset array to model info * Replace access to world description in model * Remove world descriptor from model * Fix computation of kinematics residual with sparse Jacobian (#220) * Migrates `ModelKaminoSize` to it's own module to avoid circular dependency between core/model.py and core/state.py and rename it as `SizeKamino`. * WIP: Fix SolverKamino wrapper * Fix circular dependency in conversions.py * Fix some broken unit tests and WIP to fix fourbar contact conversions and rendering * Make some conversions @staticmethods instead, because they dont need common class attributes * Fix declaration of custom state attributes and their conversion to/from newton and kamino * WIP: Debug model conversion and newton sim examples * Rename and cleanup start index array of per-world geoms * Model conversion and newton sim examples now work. * Make gravity conversion operation re-usable * Migrates boxes_fourbar builder using newton.ModelBuilder to it's own module to prepare for migration. * Use gravity conversion utility func in SolverKamino * Add reusable joint-parameterization conversion utility * Remove world-descriptor from model converter * Rename helper converter that handles entity-local transforms * Add some cleanup to DR Legs, ANYmal D and basic four-bar examples * Fix module-level imports of additional kamino-specific development dependencies * Fix module-level imports of additional kamino-specific development dependencies * Fix erroneous merge conflict. --------- Signed-off-by: Alain Denzler <adenzler@nvidia.com> Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> Signed-off-by: JC <jumyungc@nvidia.com> Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com> Signed-off-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com> Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Signed-off-by: Eric Heiden <eheiden@nvidia.com> Signed-off-by: Miles Macklin <mmacklin@nvidia.com> Signed-off-by: adenzler-nvidia <adenzler@nvidia.com> Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com> Co-authored-by: Daniela Hase <116915287+daniela-hase@users.noreply.github.com> Co-authored-by: adenzler-nvidia <adenzler@nvidia.com> Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com> Co-authored-by: Eric Shi <97630937+shi-eric@users.noreply.github.com> Co-authored-by: Anka Chen <AnkaChan@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> Co-authored-by: JC-nvidia <116605903+jumyungc@users.noreply.github.com> Co-authored-by: Kenny Vilella <kvilella@nvidia.com> Co-authored-by: nvtw <110816143+nvtw@users.noreply.github.com> Co-authored-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Lennart Röstel <65088822+lenroe@users.noreply.github.com> Co-authored-by: Eric Heiden <eheiden@nvidia.com> Co-authored-by: jvonmuralt <jvonmuralt@nvidia.com> Co-authored-by: camevor <camevor@nvidia.com> Co-authored-by: mzamoramora-nvidia <mzamoramora@nvidia.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Alessandro Roncone <alecive87@gmail.com> Co-authored-by: gdaviet <57617656+gdaviet@users.noreply.github.com> Co-authored-by: Miles Macklin <mmacklin@nvidia.com> Co-authored-by: Gordon Yeoman <gyeomannvidia@users.noreply.github.com> Co-authored-by: Lukasz Wawrzyniak <lwawrzyniak@nvidia.com> Co-authored-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com> Co-authored-by: Lorenzo Terenzi <lorenzoterenzi96@gmail.com> Co-authored-by: smollerNV <164020096+smollerNV@users.noreply.github.com> Co-authored-by: twidmer <twidmer@nvidia.com> Co-authored-by: Christian Schumacher <christian.schumacher@disney.com> Co-authored-by: Guirec-Maloisel <25688871+Guirec-Maloisel@users.noreply.github.com>
* [Warp Raytrace] Added device parameter (newton-physics#1544) * [Warp Raytrace] Added device parameter to previously overlooked call (newton-physics#1545) * SolverMuJoCo: Fix tolerance clamping in update_solver_options_kernel (newton-physics#1546) * Change default shape_ke to align with MuJoCo, parse geom solref from MJCF for contact stiffness/damping (newton-physics#1491) Signed-off-by: Alain Denzler <adenzler@nvidia.com> * Fix log_shapes broadcasting for length-1 warp arrays (newton-physics#1550) * Fix XPBD restitution particle index (newton-physics#1557) * Out-of-Bound memory read in example_diffsim_bear newton-physics#1386 (newton-physics#1533) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Add versioned documentation deployment to GitHub Pages (newton-physics#1560) * Fix broken documentation links after versioned docs deployment (newton-physics#1566) * VBD New Features (newton-physics#1479) Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> * Add banners to membership verification workflow steps (newton-physics#1569) * Support cable junctions (newton-physics#1519) Signed-off-by: JC <jumyungc@nvidia.com> * Rename parameter I to inertia newton-physics#1543 (newton-physics#1551) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Fix example_robot_anymal_c_walk.py (newton-physics#1574) * Change everywhere linesearch to iterative (newton-physics#1573) * Remove standard collision pipeline (newton-physics#1538) * USD Plumbing MJC solver attributes through resolver and custom attribute framework (newton-physics#1463) Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com> Signed-off-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: adenzler-nvidia <adenzler@nvidia.com> * Fix child shape filtering (newton-physics#1559) * Fix ViewerRerun ignoring hidden parameter in log_mesh and log_instances (newton-physics#1555) * Make NxN and SAP broad phase respect filtered pairs (newton-physics#1554) * Add --quiet flag to examples to suppress Warp messages (newton-physics#1585) * Defer resolution of MESH_MAXHULLVERT default in importers (newton-physics#1587) * Fix TypeError when finalizing SDF geometry with device kwarg (newton-physics#1586) * Make MESH_MAXHULLVERT a static class attribute Mesh.MAX_HULL_VERTICES. (newton-physics#1598) * Significant non-determinism in unified collision pipeline for anymal_c_walking example newton-physics#1505 (newton-physics#1588) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Add test for non-contiguous case (newton-physics#1549) * Fix nightly Warp CI to resolve pre-release builds (newton-physics#1606) * Verify default class and value handling (newton-physics#1556) * SolverMuJoCo: Expand geom_margin to avoid OOB read with heterogeneous worlds (newton-physics#1607) * Fix bug in control clear method (newton-physics#1602) * Enable Use of Newton IK in Lab newton-physics#662 (newton-physics#1539) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Fix import of non-articulated joints (newton-physics#1535) * Deduplicate _process_joint_custom_attributes frequency handling (newton-physics#1584) * Add CI check for stale API docs and fix local build warnings (newton-physics#1570) * Update Pillow 12.0.0 to 12.1.1 (newton-physics#1612) * Prepare handling of mimic constraints in Newton (newton-physics#1523) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Support floating, base_joint and parent_body arguments for importers (newton-physics#1498) * Fix contact buffer memory overestimation (newton-physics#1614) * Configure banned-module-level-imports for ruff (newton-physics#1583) * Explicit `Contacts` instantiation with `Model.contacts()` and `CollisionPipeline.contacts()` (newton-physics#1445) * Fix the quadruped benchmark regression (newton-physics#1615) * Change default ignore_inertial_definitions from True to False (newton-physics#1537) * Finalize the Recording API (newton-physics#1600) * SolverMuJoCo: Fix ccd_iterations default (newton-physics#1631) * update gitignore to ignore Claude Code sandbox files (newton-physics#1628) * Add mimic joint support to SolverMuJoCo (newton-physics#1627) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Add --no-cache-clear flag to test runner (newton-physics#1629) * Update MuJoCo and MuJoCo Warp to 3.5.0 release (newton-physics#1633) * Improve inertia parsing from USD (newton-physics#1605) Signed-off-by: Eric Heiden <eheiden@nvidia.com> Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Remove standalone .typos.toml in favor of pyproject.toml config (newton-physics#1642) * Heightfield support newton-physics#1189 (newton-physics#1547) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Example_robot_policy: Replace ValueError with clean error for missing PhysX policy (newton-physics#1636) Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com> * Avoid unnecessary inflation of the contact reduction voxel aabb (newton-physics#1650) * Rename num_worlds to world_count (newton-physics#1634) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Support parsing autolimits from MJCF (newton-physics#1651) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Fix particle-shape restitution ignoring body velocity (newton-physics#1273) (newton-physics#1580) * Add overflow warnings for narrow-phase collision buffers (newton-physics#1643) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Documentation: add units to model/state docstrings (newton-physics#1649) * fix(viewer): add missing JointType.BALL support to contact line kernel (newton-physics#1640) * Make terrain mesh visual-only in anymal C walking example (newton-physics#1660) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Fix initialization of collider state in MPM finite difference mode (newton-physics#1652) * docs: document ModelBuilder.default_shape_cfg (newton-physics#1662) * Finalize the collision API (newton-physics#1581) * Remove hardcoded subnet ID from AWS workflow (newton-physics#1664) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Attempt to fix AWS config (newton-physics#1666) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Update AWS workflows to g7e.2xlarge with multi-AZ failover (newton-physics#1669) * fix(viewer-usd): disambiguate log_points colors for N=3 warp arrays (newton-physics#1661) * Viewer gl optimizations (newton-physics#1656) Signed-off-by: Miles Macklin <mmacklin@nvidia.com> Signed-off-by: Eric Heiden <eheiden@nvidia.com> Co-authored-by: Eric Heiden <eheiden@nvidia.com> * docs: add articulation workflow guidance and regression check (newton-physics#1663) * fix(examples): propagate IK solution to model state in Franka example (newton-physics#1637) * fix(deps,docs): bump nbconvert to 7.17.0 and fix ArticulationView doctest (newton-physics#1670) * Cleanup and improve some example (newton-physics#1625) Signed-off-by: adenzler-nvidia <adenzler@nvidia.com> Co-authored-by: adenzler-nvidia <adenzler@nvidia.com> * Handle zero-mass bodies and flip ensure_nonstatic_links default (newton-physics#1635) * Additional testing for ArticulationView (newton-physics#1527) Co-authored-by: Eric Heiden <eheiden@nvidia.com> * Update warp-lang nightly to 1.12.0.dev20260217 (newton-physics#1677) * Change default friction coefficients to match MuJoCo (newton-physics#1681) * Refactor mesh creation functions (newton-physics#1654) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Parse joint frictionloss from MJCF (newton-physics#1680) * Fix free joint body_pos and add ref/qpos0 support for MuJoCo solver (newton-physics#1645) * Fix root shapes in ArticulationView with fixed base (newton-physics#1639) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Use model collision methods and remove `create_collision_pipeline` from examples (newton-physics#1648) Co-authored-by: nvtw <110816143+nvtw@users.noreply.github.com> * Fix XPBD apply_joint_forces ignoring child joint transform (newton-physics#1582) * Adjust SDF API (newton-physics#1644) Co-authored-by: Eric Heiden <eheiden@nvidia.com> * Optimize test suite runtime (~18% faster) (newton-physics#1689) * Remove ensure_nonstatic_links option from importers (newton-physics#1682) Signed-off-by: adenzler-nvidia <adenzler@nvidia.com> * SolverMuJoCo: Add geom_margin support, align thickness default with MuJoCo and schemas (newton-physics#1653) * refactor: privatize non-public solver internals (newton-physics#1683) * Fix option parsing with multiple <option> elements from includes (newton-physics#1692) * Bump warp-lang nightly and newton-usd-schemas (newton-physics#1693) * Get rid of tkinter dependency (newton-physics#1676) * Fix SDF example contact buffer overflow (newton-physics#1695) * Fix implicit biastype for position/velocity actuator shortcuts (newton-physics#1678) * Fix include processor to respect meshdir/texturedir (newton-physics#1685) * Reduce cold-cache Warp compile time for geometry modules (newton-physics#1618) Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: adenzler-nvidia <adenzler@nvidia.com> * Fix xyzw-to-wxyz quaternion conversion in body inertia kernel (newton-physics#1694) * Rename key to label and add hierarchical labels (newton-physics#1592) (newton-physics#1632) * Expose geometry SDF helpers on public API (newton-physics#1684) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Improve custom frequency handling from USD, parse MuJoCo actuators and tendons (newton-physics#1510) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Signed-off-by: Eric Heiden <eheiden@nvidia.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Collapse fixed joints with non articulated bodies (newton-physics#1608) * Fix renaming joint_key -> joint_label (newton-physics#1700) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Bump .python-version from 3.11 to 3.12 (newton-physics#1702) * Replace CITATION.md with CITATION.cff (newton-physics#1706) * Respect MJCF contype=conaffinity=0 via collision_group=0 (newton-physics#1703) * Make ViewerUSD reuse existing USD layers for the same output path (newton-physics#1704) Signed-off-by: Eric Heiden <eheiden@nvidia.com> Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Remove dead up-axis conversion from MuJoCo solver (newton-physics#1707) * Skip IK cube stacking example test (newton-physics#1713) * Fix global pairs (world=-1) not exported to MuJoCo spec (newton-physics#1705) * Reduce the memory consumption of hydroelastic contacts (newton-physics#1609) * Fix flakiness cube stacking (newton-physics#1714) * Fix collision shapes not toggleable in viewer UI (newton-physics#1715) * Fix softbody examples table layout in README (newton-physics#1716) * Standardize sensor APIs: label matching, keyword args, and update() method naming (newton-physics#1665) * Fix intermittent crash in parallel test runner from Manager proxy race (newton-physics#1721) * Clean up inertia.py function arguments to match Mesh.create_* API (newton-physics#1719) * Reduce default test runner verbosity (newton-physics#1723) * Add menagerie comparison tests for SolverMuJoCo (newton-physics#1720) Signed-off-by: Alain Denzler <adenzler@nvidia.com> Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com> Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com> * Add spatial tendon support for MuJoCo solver (newton-physics#1687) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Expose qfrc_actuator from mujoco (newton-physics#1698) * Skip non-MODEL custom attributes in finalize validation (newton-physics#1734) * Resolve inheritrange for position actuators in MJCF parser (newton-physics#1727) * Support dampratio for position/velocity actuator shortcuts (newton-physics#1722) * Limit concurrency to 1 (newton-physics#1736) * Add a helper method for checking applied usd (newton-physics#1731) * Enhance playback URL handling in ViewerViser (newton-physics#1742) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Removed RenderShapeType (newton-physics#1748) * Override only MassAPI attributes that have been authored (newton-physics#1688) * Integration of newton-actuators (newton-physics#1342) Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com> * Fix ArticulationView crash with fixed-joint-only articulations (newton-physics#1726) * Improve retrieval of Jupyter base URL in ViewerViser (newton-physics#1750) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Disable dynamics testing for UR5e and Apollo tests to avoid CI flakiness (newton-physics#1755) * Margin and Gap rename (newton-physics#1732) * Vbd Demos Fixing (newton-physics#1740) * Fix ViewerViser.log_lines method (newton-physics#1764) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Update warp-lang dependency to 1.12.0rc1 (newton-physics#1763) * Fix fromto capsule/cylinder orientation in MJCF parser (newton-physics#1741) * fix: multi-world particle BVH indexing (newton-physics#1641) Co-authored-by: Eric Heiden <eheiden@nvidia.com> * Clean up unused and internal-only kwargs in SolverMuJoCo (newton-physics#1766) * Parsing of the mimic joint and contact gap/margin from newton schemas (newton-physics#1690) Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com> * API Refactor v2 (newton-physics#1749) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Support explicit geom mass attributes in MJCF (newton-physics#1744) * Bump flask and werkzeug in lockfile for security (newton-physics#1769) Co-authored-by: Cursor <cursoragent@cursor.com> * Split MJCF worldbody root bodies into separate articulations (newton-physics#1754) * Expose VBD rigid contact forces for solver coupling (newton-physics#1745) Signed-off-by: JC <jumyungc@nvidia.com> * Add MJCF ellipsoid geom import and regression test (newton-physics#1772) Co-authored-by: Cursor <cursoragent@cursor.com> * Weld equality constraints parsed from mjcf are given Nan as the default value of torquescale. The correct default should be 1.0 (newton-physics#1760) * Improve picking accuracy and stability (newton-physics#1712) * Franka cloth demo improvement (newton-physics#1765) * Support computing sensing object transforms & API cleanup (newton-physics#1759) * Remove threading workaround (newton-physics#1751) * [Warp Raytrace] Consolidated ray intersect functions, renamed Options to Config (newton-physics#1767) * Improve README example gallery for PyPI compatibility (newton-physics#1776) * Fix issue with mesh in rerun viewer (newton-physics#1768) * Add PhysxMimicJointAPI parsing to USD importer (newton-physics#1735) * Move some math functions to Warp (newton-physics#1717) Signed-off-by: Eric Heiden <eheiden@nvidia.com> Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Add test to ensure MJCF xform argument is relative (newton-physics#1777) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Emit diaginertia instead of fullinertia for diagonal body inertia (newton-physics#1780) * Change default joint armature from 0.01 to 0 (newton-physics#1782) * Fix default kp/kv for position and velocity actuators (newton-physics#1786) * Lock body inertia after explicit MJCF <inertial> element (newton-physics#1784) * Fix for MJCF actuator custom attributes (newton-physics#1783) * Bump version to 0.2.3 Prepare the package metadata for the v0.2.3 release tag. * Fix ViewerRerun rendering of instances from hidden meshes (newton-physics#1788) * API cleanup (newton-physics#1789) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * BODY actuator target name bypasses body name de-duplication in SolverMuJoCo (newton-physics#1729) * Use default density for visual geoms in MJCF import (newton-physics#1781) * Fix GL viewer crash on Wayland (newton-physics#1793) * Make USD xform parameter control absolute articulation placement (newton-physics#1771) * Fix CUDA context corruption in SDF implementation (newton-physics#1792) * Bump mujoco-warp dependency to 3.5.0.2 (newton-physics#1779) * Fix MuJoCo margin/gap conversion (newton-physics#1785) * Bump version to 1.1.0.dev0 (newton-physics#1798) * Missing unittest.main added back to test_import_mjcf.py. Helps with F5 debugging in VS Code. (newton-physics#1796) * Improve H1 example (newton-physics#1801) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Fix ViewerViser.set_camera() (newton-physics#1805) * Rename examples to follow prefix-first naming convention (newton-physics#1802) * Improve MuJoCo actuator domain randomization (newton-physics#1773) * Restore in_cup test in hydro example (newton-physics#1775) * Fix `newton.geometry` imports and change of Mesh maxhullverts global constant * Adapt to having both margin and gap arrays for each geom/shape * Fix for newton.geometry API changes in primitive/narrowphase.py * Fix removal of `BroadPhaseMode` IntEnum and revert to newton-sytle string literals * WIP: Adapt geometry/unified.py to fix breaking changes to `newton.geometry` API * First pass of API adjustments * Patch more gaps (with respect to margin and gap renaming) * GeoType.SDF was removed - reflect that in Kamino * Introduce CoM position offsets w.r.t body frame and operations to convert between body CoM state and generic local body-fixed reference frames. * Add caching of per-entity labels/names/keys in the Model subcontainers * Remove SDF shape wrapper since it's now internal to mesh handling in CD pipelines * Fix USD test assets * Add Newton <--> Kamino joint type conversion operations and per-space default limit constants * Add some cleanup to geometry and unified CD + UTs * Add Newton <--> Kamino shape type conversion operations * Apply new default joint coord limit constants to limits.py * Adapt foubrar model builder and USD asset to produce the same result in sim example * Purge "physical" goems and collapse all into a single group, and purge geometry "layers" * Disable allocation per-joint wrenches by default and make them optional * Make `Model` a dataclass * Separate ModelData* containers into own `core/data.py` module * Fix imports of ModelData * Rename `Model` as `ModelKamino` * Rename `ModelData` as `DataKamino` * Rename `State` as `StateKamino` * Rename `Control` as `ControlKamino` * Rename `Limits` as `LimitsKamino` * Rename `Contacts` as `ContactsKamino` * Rename `ModelBuilder` as `ModelBuilderKamino` * Make imports in test utilities relative * Revise CD meta-data attributes and their computation in GeometryModel and ModelBuilderKamino * Revise primitive CD pipeline * Revise unified CD pipeline * Revise CD front-end interfaces * Fix UTs and relevant utils for interface changes to CD * Change to `wp.DeviceLike` to account for upcoming deprecation of `Devicelike` * Depracate legacy HDF5 data io (will be replaced in the future) * Fix banned imports at module level * Modify USD importer to detect articulations and order geoms and joints similarly to how the Newton `parse_usd` function does. * Add conversion operation from `newton.Model` to `ModelKamino` * Add data, state and control container conversions * Add SolverKamino wrapper that fullfils newton integration interface * Add newton integration examples * Add SolverKamino to newton solver module imports * WIP: fix problem with lambda_j being allocated for only kinematic constraints and failing on array copying * Fix banned git import in benchmark * Rename *Settings to *Config (#213) * Rename SolverKaminoSettings -> SolverKaminoConfig * Rename DualProblemSettings -> DualProblemConfig * Rename CollisionDetectorSettings -> CollisionDetectorConfig * Rename PADMMSettings -> PADMMConfig * Rename ForwardKinematicsSolverSettings -> ForwardKinematicsSolverConfig * Rename SimulatorSettings -> SimulatorConfig * Add check for model compatibility in SolverKamino (#209) * Fix device assignment in sparse CG test on CPU (#216) * Replace Enum-type config attributes with Literal (#215) * Replace warmstart mode config param with literal * Replace contact warmstart mode config param with literal * Replace rotation correction config param with literal * Replace penalty update config param with literal * Replace FK preconditioner option config param with literal * Add post-init checks for dual/PADMM configs * Rename FKPreconditionerOptions to FKPreconditionerType * Remove WorldDescriptor from ModelKamino (#219) * Add geom index offset array to model info * Replace access to world description in model * Remove world descriptor from model * Fix computation of kinematics residual with sparse Jacobian (#220) * Migrates `ModelKaminoSize` to it's own module to avoid circular dependency between core/model.py and core/state.py and rename it as `SizeKamino`. * WIP: Fix SolverKamino wrapper * Fix circular dependency in conversions.py * Fix some broken unit tests and WIP to fix fourbar contact conversions and rendering * Make some conversions @staticmethods instead, because they dont need common class attributes * Fix declaration of custom state attributes and their conversion to/from newton and kamino * WIP: Debug model conversion and newton sim examples * Rename and cleanup start index array of per-world geoms * Model conversion and newton sim examples now work. * Make gravity conversion operation re-usable * Migrates boxes_fourbar builder using newton.ModelBuilder to it's own module to prepare for migration. * Use gravity conversion utility func in SolverKamino * Add reusable joint-parameterization conversion utility * Remove world-descriptor from model converter * Rename helper converter that handles entity-local transforms * Add some cleanup to DR Legs, ANYmal D and basic four-bar examples * Fix module-level imports of additional kamino-specific development dependencies * Fix module-level imports of additional kamino-specific development dependencies * Fix erroneous merge conflict. --------- Signed-off-by: Alain Denzler <adenzler@nvidia.com> Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> Signed-off-by: JC <jumyungc@nvidia.com> Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com> Signed-off-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com> Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Signed-off-by: Eric Heiden <eheiden@nvidia.com> Signed-off-by: Miles Macklin <mmacklin@nvidia.com> Signed-off-by: adenzler-nvidia <adenzler@nvidia.com> Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com> Co-authored-by: Daniela Hase <116915287+daniela-hase@users.noreply.github.com> Co-authored-by: adenzler-nvidia <adenzler@nvidia.com> Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com> Co-authored-by: Eric Shi <97630937+shi-eric@users.noreply.github.com> Co-authored-by: Anka Chen <AnkaChan@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> Co-authored-by: JC-nvidia <116605903+jumyungc@users.noreply.github.com> Co-authored-by: Kenny Vilella <kvilella@nvidia.com> Co-authored-by: nvtw <110816143+nvtw@users.noreply.github.com> Co-authored-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Lennart Röstel <65088822+lenroe@users.noreply.github.com> Co-authored-by: Eric Heiden <eheiden@nvidia.com> Co-authored-by: jvonmuralt <jvonmuralt@nvidia.com> Co-authored-by: camevor <camevor@nvidia.com> Co-authored-by: mzamoramora-nvidia <mzamoramora@nvidia.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Alessandro Roncone <alecive87@gmail.com> Co-authored-by: gdaviet <57617656+gdaviet@users.noreply.github.com> Co-authored-by: Miles Macklin <mmacklin@nvidia.com> Co-authored-by: Gordon Yeoman <gyeomannvidia@users.noreply.github.com> Co-authored-by: Lukasz Wawrzyniak <lwawrzyniak@nvidia.com> Co-authored-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com> Co-authored-by: Lorenzo Terenzi <lorenzoterenzi96@gmail.com> Co-authored-by: smollerNV <164020096+smollerNV@users.noreply.github.com> Co-authored-by: twidmer <twidmer@nvidia.com> Co-authored-by: Christian Schumacher <christian.schumacher@disney.com> Co-authored-by: Guirec-Maloisel <25688871+Guirec-Maloisel@users.noreply.github.com>
* [Warp Raytrace] Added device parameter (newton-physics#1544) * [Warp Raytrace] Added device parameter to previously overlooked call (newton-physics#1545) * SolverMuJoCo: Fix tolerance clamping in update_solver_options_kernel (newton-physics#1546) * Change default shape_ke to align with MuJoCo, parse geom solref from MJCF for contact stiffness/damping (newton-physics#1491) Signed-off-by: Alain Denzler <adenzler@nvidia.com> * Fix log_shapes broadcasting for length-1 warp arrays (newton-physics#1550) * Fix XPBD restitution particle index (newton-physics#1557) * Out-of-Bound memory read in example_diffsim_bear newton-physics#1386 (newton-physics#1533) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Add versioned documentation deployment to GitHub Pages (newton-physics#1560) * Fix broken documentation links after versioned docs deployment (newton-physics#1566) * VBD New Features (newton-physics#1479) Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> * Add banners to membership verification workflow steps (newton-physics#1569) * Support cable junctions (newton-physics#1519) Signed-off-by: JC <jumyungc@nvidia.com> * Rename parameter I to inertia newton-physics#1543 (newton-physics#1551) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Fix example_robot_anymal_c_walk.py (newton-physics#1574) * Change everywhere linesearch to iterative (newton-physics#1573) * Remove standard collision pipeline (newton-physics#1538) * USD Plumbing MJC solver attributes through resolver and custom attribute framework (newton-physics#1463) Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com> Signed-off-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: adenzler-nvidia <adenzler@nvidia.com> * Fix child shape filtering (newton-physics#1559) * Fix ViewerRerun ignoring hidden parameter in log_mesh and log_instances (newton-physics#1555) * Make NxN and SAP broad phase respect filtered pairs (newton-physics#1554) * Add --quiet flag to examples to suppress Warp messages (newton-physics#1585) * Defer resolution of MESH_MAXHULLVERT default in importers (newton-physics#1587) * Fix TypeError when finalizing SDF geometry with device kwarg (newton-physics#1586) * Make MESH_MAXHULLVERT a static class attribute Mesh.MAX_HULL_VERTICES. (newton-physics#1598) * Significant non-determinism in unified collision pipeline for anymal_c_walking example newton-physics#1505 (newton-physics#1588) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Add test for non-contiguous case (newton-physics#1549) * Fix nightly Warp CI to resolve pre-release builds (newton-physics#1606) * Verify default class and value handling (newton-physics#1556) * SolverMuJoCo: Expand geom_margin to avoid OOB read with heterogeneous worlds (newton-physics#1607) * Fix bug in control clear method (newton-physics#1602) * Enable Use of Newton IK in Lab newton-physics#662 (newton-physics#1539) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Fix import of non-articulated joints (newton-physics#1535) * Deduplicate _process_joint_custom_attributes frequency handling (newton-physics#1584) * Add CI check for stale API docs and fix local build warnings (newton-physics#1570) * Update Pillow 12.0.0 to 12.1.1 (newton-physics#1612) * Prepare handling of mimic constraints in Newton (newton-physics#1523) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Support floating, base_joint and parent_body arguments for importers (newton-physics#1498) * Fix contact buffer memory overestimation (newton-physics#1614) * Configure banned-module-level-imports for ruff (newton-physics#1583) * Explicit `Contacts` instantiation with `Model.contacts()` and `CollisionPipeline.contacts()` (newton-physics#1445) * Fix the quadruped benchmark regression (newton-physics#1615) * Change default ignore_inertial_definitions from True to False (newton-physics#1537) * Finalize the Recording API (newton-physics#1600) * SolverMuJoCo: Fix ccd_iterations default (newton-physics#1631) * update gitignore to ignore Claude Code sandbox files (newton-physics#1628) * Add mimic joint support to SolverMuJoCo (newton-physics#1627) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Add --no-cache-clear flag to test runner (newton-physics#1629) * Update MuJoCo and MuJoCo Warp to 3.5.0 release (newton-physics#1633) * Improve inertia parsing from USD (newton-physics#1605) Signed-off-by: Eric Heiden <eheiden@nvidia.com> Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Remove standalone .typos.toml in favor of pyproject.toml config (newton-physics#1642) * Heightfield support newton-physics#1189 (newton-physics#1547) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Example_robot_policy: Replace ValueError with clean error for missing PhysX policy (newton-physics#1636) Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com> * Avoid unnecessary inflation of the contact reduction voxel aabb (newton-physics#1650) * Rename num_worlds to world_count (newton-physics#1634) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Support parsing autolimits from MJCF (newton-physics#1651) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Fix particle-shape restitution ignoring body velocity (newton-physics#1273) (newton-physics#1580) * Add overflow warnings for narrow-phase collision buffers (newton-physics#1643) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Documentation: add units to model/state docstrings (newton-physics#1649) * fix(viewer): add missing JointType.BALL support to contact line kernel (newton-physics#1640) * Make terrain mesh visual-only in anymal C walking example (newton-physics#1660) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Fix initialization of collider state in MPM finite difference mode (newton-physics#1652) * docs: document ModelBuilder.default_shape_cfg (newton-physics#1662) * Finalize the collision API (newton-physics#1581) * Remove hardcoded subnet ID from AWS workflow (newton-physics#1664) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Attempt to fix AWS config (newton-physics#1666) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Update AWS workflows to g7e.2xlarge with multi-AZ failover (newton-physics#1669) * fix(viewer-usd): disambiguate log_points colors for N=3 warp arrays (newton-physics#1661) * Viewer gl optimizations (newton-physics#1656) Signed-off-by: Miles Macklin <mmacklin@nvidia.com> Signed-off-by: Eric Heiden <eheiden@nvidia.com> Co-authored-by: Eric Heiden <eheiden@nvidia.com> * docs: add articulation workflow guidance and regression check (newton-physics#1663) * fix(examples): propagate IK solution to model state in Franka example (newton-physics#1637) * fix(deps,docs): bump nbconvert to 7.17.0 and fix ArticulationView doctest (newton-physics#1670) * Cleanup and improve some example (newton-physics#1625) Signed-off-by: adenzler-nvidia <adenzler@nvidia.com> Co-authored-by: adenzler-nvidia <adenzler@nvidia.com> * Handle zero-mass bodies and flip ensure_nonstatic_links default (newton-physics#1635) * Additional testing for ArticulationView (newton-physics#1527) Co-authored-by: Eric Heiden <eheiden@nvidia.com> * Update warp-lang nightly to 1.12.0.dev20260217 (newton-physics#1677) * Change default friction coefficients to match MuJoCo (newton-physics#1681) * Refactor mesh creation functions (newton-physics#1654) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Parse joint frictionloss from MJCF (newton-physics#1680) * Fix free joint body_pos and add ref/qpos0 support for MuJoCo solver (newton-physics#1645) * Fix root shapes in ArticulationView with fixed base (newton-physics#1639) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Use model collision methods and remove `create_collision_pipeline` from examples (newton-physics#1648) Co-authored-by: nvtw <110816143+nvtw@users.noreply.github.com> * Fix XPBD apply_joint_forces ignoring child joint transform (newton-physics#1582) * Adjust SDF API (newton-physics#1644) Co-authored-by: Eric Heiden <eheiden@nvidia.com> * Optimize test suite runtime (~18% faster) (newton-physics#1689) * Remove ensure_nonstatic_links option from importers (newton-physics#1682) Signed-off-by: adenzler-nvidia <adenzler@nvidia.com> * SolverMuJoCo: Add geom_margin support, align thickness default with MuJoCo and schemas (newton-physics#1653) * refactor: privatize non-public solver internals (newton-physics#1683) * Fix option parsing with multiple <option> elements from includes (newton-physics#1692) * Bump warp-lang nightly and newton-usd-schemas (newton-physics#1693) * Get rid of tkinter dependency (newton-physics#1676) * Fix SDF example contact buffer overflow (newton-physics#1695) * Fix implicit biastype for position/velocity actuator shortcuts (newton-physics#1678) * Fix include processor to respect meshdir/texturedir (newton-physics#1685) * Reduce cold-cache Warp compile time for geometry modules (newton-physics#1618) Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: adenzler-nvidia <adenzler@nvidia.com> * Fix xyzw-to-wxyz quaternion conversion in body inertia kernel (newton-physics#1694) * Rename key to label and add hierarchical labels (newton-physics#1592) (newton-physics#1632) * Expose geometry SDF helpers on public API (newton-physics#1684) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Improve custom frequency handling from USD, parse MuJoCo actuators and tendons (newton-physics#1510) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Signed-off-by: Eric Heiden <eheiden@nvidia.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Collapse fixed joints with non articulated bodies (newton-physics#1608) * Fix renaming joint_key -> joint_label (newton-physics#1700) Signed-off-by: Eric Heiden <eheiden@nvidia.com> * Bump .python-version from 3.11 to 3.12 (newton-physics#1702) * Replace CITATION.md with CITATION.cff (newton-physics#1706) * Respect MJCF contype=conaffinity=0 via collision_group=0 (newton-physics#1703) * Make ViewerUSD reuse existing USD layers for the same output path (newton-physics#1704) Signed-off-by: Eric Heiden <eheiden@nvidia.com> Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Remove dead up-axis conversion from MuJoCo solver (newton-physics#1707) * Skip IK cube stacking example test (newton-physics#1713) * Fix global pairs (world=-1) not exported to MuJoCo spec (newton-physics#1705) * Reduce the memory consumption of hydroelastic contacts (newton-physics#1609) * Fix flakiness cube stacking (newton-physics#1714) * Fix collision shapes not toggleable in viewer UI (newton-physics#1715) * Fix softbody examples table layout in README (newton-physics#1716) * Standardize sensor APIs: label matching, keyword args, and update() method naming (newton-physics#1665) * Fix intermittent crash in parallel test runner from Manager proxy race (newton-physics#1721) * Clean up inertia.py function arguments to match Mesh.create_* API (newton-physics#1719) * Reduce default test runner verbosity (newton-physics#1723) * Add menagerie comparison tests for SolverMuJoCo (newton-physics#1720) Signed-off-by: Alain Denzler <adenzler@nvidia.com> Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com> Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com> * Add spatial tendon support for MuJoCo solver (newton-physics#1687) Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> * Expose qfrc_actuator from mujoco (newton-physics#1698) * Skip non-MODEL custom attributes in finalize validation (newton-physics#1734) * Resolve inheritrange for position actuators in MJCF parser (newton-physics#1727) * Support dampratio for position/velocity actuator shortcuts (newton-physics#1722) * Limit concurrency to 1 (newton-physics#1736) * Add a helper method for checking applied usd (newton-physics#1731) * Enhance playback URL handling in ViewerViser (newton-physics#1742) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Removed RenderShapeType (newton-physics#1748) * Override only MassAPI attributes that have been authored (newton-physics#1688) * Integration of newton-actuators (newton-physics#1342) Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com> * Fix ArticulationView crash with fixed-joint-only articulations (newton-physics#1726) * Improve retrieval of Jupyter base URL in ViewerViser (newton-physics#1750) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Disable dynamics testing for UR5e and Apollo tests to avoid CI flakiness (newton-physics#1755) * Margin and Gap rename (newton-physics#1732) * Vbd Demos Fixing (newton-physics#1740) * Fix ViewerViser.log_lines method (newton-physics#1764) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Update warp-lang dependency to 1.12.0rc1 (newton-physics#1763) * Fix fromto capsule/cylinder orientation in MJCF parser (newton-physics#1741) * fix: multi-world particle BVH indexing (newton-physics#1641) Co-authored-by: Eric Heiden <eheiden@nvidia.com> * Clean up unused and internal-only kwargs in SolverMuJoCo (newton-physics#1766) * Parsing of the mimic joint and contact gap/margin from newton schemas (newton-physics#1690) Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com> * API Refactor v2 (newton-physics#1749) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Support explicit geom mass attributes in MJCF (newton-physics#1744) * Bump flask and werkzeug in lockfile for security (newton-physics#1769) Co-authored-by: Cursor <cursoragent@cursor.com> * Split MJCF worldbody root bodies into separate articulations (newton-physics#1754) * Expose VBD rigid contact forces for solver coupling (newton-physics#1745) Signed-off-by: JC <jumyungc@nvidia.com> * Add MJCF ellipsoid geom import and regression test (newton-physics#1772) Co-authored-by: Cursor <cursoragent@cursor.com> * Weld equality constraints parsed from mjcf are given Nan as the default value of torquescale. The correct default should be 1.0 (newton-physics#1760) * Improve picking accuracy and stability (newton-physics#1712) * Franka cloth demo improvement (newton-physics#1765) * Support computing sensing object transforms & API cleanup (newton-physics#1759) * Remove threading workaround (newton-physics#1751) * [Warp Raytrace] Consolidated ray intersect functions, renamed Options to Config (newton-physics#1767) * Improve README example gallery for PyPI compatibility (newton-physics#1776) * Fix issue with mesh in rerun viewer (newton-physics#1768) * Add PhysxMimicJointAPI parsing to USD importer (newton-physics#1735) * Move some math functions to Warp (newton-physics#1717) Signed-off-by: Eric Heiden <eheiden@nvidia.com> Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Add test to ensure MJCF xform argument is relative (newton-physics#1777) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Emit diaginertia instead of fullinertia for diagonal body inertia (newton-physics#1780) * Change default joint armature from 0.01 to 0 (newton-physics#1782) * Fix default kp/kv for position and velocity actuators (newton-physics#1786) * Lock body inertia after explicit MJCF <inertial> element (newton-physics#1784) * Fix for MJCF actuator custom attributes (newton-physics#1783) * Bump version to 0.2.3 Prepare the package metadata for the v0.2.3 release tag. * Fix ViewerRerun rendering of instances from hidden meshes (newton-physics#1788) * API cleanup (newton-physics#1789) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * BODY actuator target name bypasses body name de-duplication in SolverMuJoCo (newton-physics#1729) * Use default density for visual geoms in MJCF import (newton-physics#1781) * Fix GL viewer crash on Wayland (newton-physics#1793) * Make USD xform parameter control absolute articulation placement (newton-physics#1771) * Fix CUDA context corruption in SDF implementation (newton-physics#1792) * Bump mujoco-warp dependency to 3.5.0.2 (newton-physics#1779) * Fix MuJoCo margin/gap conversion (newton-physics#1785) * Bump version to 1.1.0.dev0 (newton-physics#1798) * Missing unittest.main added back to test_import_mjcf.py. Helps with F5 debugging in VS Code. (newton-physics#1796) * Improve H1 example (newton-physics#1801) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> * Fix ViewerViser.set_camera() (newton-physics#1805) * Rename examples to follow prefix-first naming convention (newton-physics#1802) * Improve MuJoCo actuator domain randomization (newton-physics#1773) * Restore in_cup test in hydro example (newton-physics#1775) * Fix `newton.geometry` imports and change of Mesh maxhullverts global constant * Adapt to having both margin and gap arrays for each geom/shape * Fix for newton.geometry API changes in primitive/narrowphase.py * Fix removal of `BroadPhaseMode` IntEnum and revert to newton-sytle string literals * WIP: Adapt geometry/unified.py to fix breaking changes to `newton.geometry` API * First pass of API adjustments * Patch more gaps (with respect to margin and gap renaming) * GeoType.SDF was removed - reflect that in Kamino * Introduce CoM position offsets w.r.t body frame and operations to convert between body CoM state and generic local body-fixed reference frames. * Add caching of per-entity labels/names/keys in the Model subcontainers * Remove SDF shape wrapper since it's now internal to mesh handling in CD pipelines * Fix USD test assets * Add Newton <--> Kamino joint type conversion operations and per-space default limit constants * Add some cleanup to geometry and unified CD + UTs * Add Newton <--> Kamino shape type conversion operations * Apply new default joint coord limit constants to limits.py * Adapt foubrar model builder and USD asset to produce the same result in sim example * Purge "physical" goems and collapse all into a single group, and purge geometry "layers" * Disable allocation per-joint wrenches by default and make them optional * Make `Model` a dataclass * Separate ModelData* containers into own `core/data.py` module * Fix imports of ModelData * Rename `Model` as `ModelKamino` * Rename `ModelData` as `DataKamino` * Rename `State` as `StateKamino` * Rename `Control` as `ControlKamino` * Rename `Limits` as `LimitsKamino` * Rename `Contacts` as `ContactsKamino` * Rename `ModelBuilder` as `ModelBuilderKamino` * Make imports in test utilities relative * Revise CD meta-data attributes and their computation in GeometryModel and ModelBuilderKamino * Revise primitive CD pipeline * Revise unified CD pipeline * Revise CD front-end interfaces * Fix UTs and relevant utils for interface changes to CD * Change to `wp.DeviceLike` to account for upcoming deprecation of `Devicelike` * Depracate legacy HDF5 data io (will be replaced in the future) * Fix banned imports at module level * Modify USD importer to detect articulations and order geoms and joints similarly to how the Newton `parse_usd` function does. * Add conversion operation from `newton.Model` to `ModelKamino` * Add data, state and control container conversions * Add SolverKamino wrapper that fullfils newton integration interface * Add newton integration examples * Add SolverKamino to newton solver module imports * WIP: fix problem with lambda_j being allocated for only kinematic constraints and failing on array copying * Fix banned git import in benchmark * Rename *Settings to *Config (#213) * Rename SolverKaminoSettings -> SolverKaminoConfig * Rename DualProblemSettings -> DualProblemConfig * Rename CollisionDetectorSettings -> CollisionDetectorConfig * Rename PADMMSettings -> PADMMConfig * Rename ForwardKinematicsSolverSettings -> ForwardKinematicsSolverConfig * Rename SimulatorSettings -> SimulatorConfig * Add check for model compatibility in SolverKamino (#209) * Fix device assignment in sparse CG test on CPU (#216) * Replace Enum-type config attributes with Literal (#215) * Replace warmstart mode config param with literal * Replace contact warmstart mode config param with literal * Replace rotation correction config param with literal * Replace penalty update config param with literal * Replace FK preconditioner option config param with literal * Add post-init checks for dual/PADMM configs * Rename FKPreconditionerOptions to FKPreconditionerType * Remove WorldDescriptor from ModelKamino (#219) * Add geom index offset array to model info * Replace access to world description in model * Remove world descriptor from model * Fix computation of kinematics residual with sparse Jacobian (#220) * Migrates `ModelKaminoSize` to it's own module to avoid circular dependency between core/model.py and core/state.py and rename it as `SizeKamino`. * WIP: Fix SolverKamino wrapper * Fix circular dependency in conversions.py * Fix some broken unit tests and WIP to fix fourbar contact conversions and rendering * Make some conversions @staticmethods instead, because they dont need common class attributes * Fix declaration of custom state attributes and their conversion to/from newton and kamino * WIP: Debug model conversion and newton sim examples * Rename and cleanup start index array of per-world geoms * Model conversion and newton sim examples now work. * Make gravity conversion operation re-usable * Migrates boxes_fourbar builder using newton.ModelBuilder to it's own module to prepare for migration. * Use gravity conversion utility func in SolverKamino * Add reusable joint-parameterization conversion utility * Remove world-descriptor from model converter * Rename helper converter that handles entity-local transforms * Add some cleanup to DR Legs, ANYmal D and basic four-bar examples * Fix module-level imports of additional kamino-specific development dependencies * Fix module-level imports of additional kamino-specific development dependencies * Fix erroneous merge conflict. --------- Signed-off-by: Alain Denzler <adenzler@nvidia.com> Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> Signed-off-by: JC <jumyungc@nvidia.com> Signed-off-by: Milad Rakhsha <mrakhsha@nvidia.com> Signed-off-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com> Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Signed-off-by: Eric Heiden <eheiden@nvidia.com> Signed-off-by: Miles Macklin <mmacklin@nvidia.com> Signed-off-by: adenzler-nvidia <adenzler@nvidia.com> Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com> Co-authored-by: Daniela Hase <116915287+daniela-hase@users.noreply.github.com> Co-authored-by: adenzler-nvidia <adenzler@nvidia.com> Co-authored-by: Viktor Reutskyy <33062116+vreutskyy@users.noreply.github.com> Co-authored-by: Eric Shi <97630937+shi-eric@users.noreply.github.com> Co-authored-by: Anka Chen <AnkaChan@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> Co-authored-by: JC-nvidia <116605903+jumyungc@users.noreply.github.com> Co-authored-by: Kenny Vilella <kvilella@nvidia.com> Co-authored-by: nvtw <110816143+nvtw@users.noreply.github.com> Co-authored-by: Milad-Rakhsha-NV <167464435+Milad-Rakhsha-NV@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Lennart Röstel <65088822+lenroe@users.noreply.github.com> Co-authored-by: Eric Heiden <eheiden@nvidia.com> Co-authored-by: jvonmuralt <jvonmuralt@nvidia.com> Co-authored-by: camevor <camevor@nvidia.com> Co-authored-by: mzamoramora-nvidia <mzamoramora@nvidia.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Alessandro Roncone <alecive87@gmail.com> Co-authored-by: gdaviet <57617656+gdaviet@users.noreply.github.com> Co-authored-by: Miles Macklin <mmacklin@nvidia.com> Co-authored-by: Gordon Yeoman <gyeomannvidia@users.noreply.github.com> Co-authored-by: Lukasz Wawrzyniak <lwawrzyniak@nvidia.com> Co-authored-by: Eric Heiden <eric-heiden@outlook.com> Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com> Co-authored-by: Lorenzo Terenzi <lorenzoterenzi96@gmail.com> Co-authored-by: smollerNV <164020096+smollerNV@users.noreply.github.com> Co-authored-by: twidmer <twidmer@nvidia.com> Co-authored-by: Christian Schumacher <christian.schumacher@disney.com> Co-authored-by: Guirec-Maloisel <25688871+Guirec-Maloisel@users.noreply.github.com>
Description
Reduce the memory consumption of hydroelastic contacts. It also removes moment matching for now in favor of one pass, on-the-fly contact reduction which saves a ton of memory.
Newton Migration Guide
Please ensure the migration guide for warp.sim users is up-to-date with the changes made in this PR.
docs/migration.rstis up-to dateBefore your PR is "Ready for review"
newton/tests/test_examples.py)pre-commit run -aSummary by CodeRabbit
New Features
Documentation
Chores
Tests