Skip to content

Integration of newton-actuators #1342

Merged
eric-heiden merged 35 commits into
newton-physics:mainfrom
jvonmuralt:actuators_integration
Feb 24, 2026
Merged

Integration of newton-actuators #1342
eric-heiden merged 35 commits into
newton-physics:mainfrom
jvonmuralt:actuators_integration

Conversation

@jvonmuralt

@jvonmuralt jvonmuralt commented Jan 13, 2026

Copy link
Copy Markdown
Member

Description

Newton Migration Guide

Please ensure the migration guide for warp.sim users is up-to-date with the changes made in this PR.

  • The migration guide in docs/migration.rst is up-to date

Before your PR is "Ready for review"

  • Necessary tests have been added and new examples are tested (see newton/tests/test_examples.py)
  • Documentation is up-to-date
  • Code passes formatting and linting checks with pre-commit run -a

Summary by CodeRabbit

  • New Features

    • Added actuator support in model building with public APIs to add/accumulate actuators; models now expose a list of actuator instances and group identical actuator definitions for efficiency.
    • Importers (USD/MJCF) accept an external actuator parse hook and include actuator counts in import results.
    • ArticulationView gains get/set actuator parameter access with optimized mapping and gather/scatter support.
  • Tests

    • Added comprehensive actuator integration tests covering parameter handling, grouping, multi-world offsets, 2D inputs, and importer parsing.
  • Chores

    • Added newton-actuators as an optional dependency.

@coderabbitai

coderabbitai Bot commented Jan 13, 2026

Copy link
Copy Markdown
Contributor

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Collects actuator definitions during model build (ActuatorEntry, ModelBuilder.add_actuator), wires a parse_external_actuator_fn through USD/MJCF importers, merges/offsets entries from sub-builders, finalizes actuator instances into Model.actuators, and adds selection APIs, tests, and a USDA asset for actuators.

Changes

Cohort / File(s) Summary
Core Builder Actuator Support
newton/_src/sim/builder.py
Add ActuatorEntry dataclass, ModelBuilder.actuator_entries, ModelBuilder.add_actuator(...), _stack_args_to_arrays(...), _build_index_array(...), and merge/offset logic for sub-builder actuator entries.
Model Finalization
newton/_src/sim/model.py
Add public Model.actuators attribute; Model.finalize now builds actuator instances from accumulated actuator_entries (construct index arrays, stack per-DOF arrays, pass scalar params).
USD Importer Integration
newton/_src/utils/import_usd.py
Rename/extend actuator hook to parse_external_actuator_fn, update parse flow and docstring, and include actuator_count in parse payload returned to callers.
MJCF / Importer Plumbing
.../add_mjcf, .../add_usd call sites (various)
Propagate parse_external_actuator_fn through higher-level importer call sites so actuator parsing flows through MJCF/USDMJCF import paths.
Selection / Articulation APIs
newton/_src/utils/selection.py
Add actuator DOF mapping/gather/scatter kernels and ArticulationView methods: _get_actuator_dof_mapping, _get_actuator_attribute_array, get_actuator_parameter, set_actuator_parameter.
Tests & Assets
newton/tests/test_actuators.py, newton/tests/assets/actuator_test.usda
Add comprehensive actuator unit tests (accumulation, grouping, multi-world offsets, USD parsing, ArticulationView parameter APIs) and a USDA asset defining joints and actuators.
Dependencies
pyproject.toml
Add optional dependency group actuators = ["newton-actuators"] and include newton-actuators in the dev dependency group.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant parse_usd
    participant parse_external_actuator_fn
    participant ModelBuilder
    participant Model
    participant Actuator

    User->>parse_usd: parse_usd(..., parse_external_actuator_fn=fn)
    parse_usd->>parse_external_actuator_fn: inspect USD prim
    parse_external_actuator_fn-->>parse_usd: (target_paths, actuator_class, kwargs)
    parse_usd->>ModelBuilder: add_actuator(actuator_class, input_indices, output_indices, **kwargs)
    User->>ModelBuilder: finalize()
    ModelBuilder->>Model: supply actuator_entries
    loop per ActuatorEntry
        Model->>Model: build index arrays & stack per-DOF arrays
        Model->>Actuator: instantiate(indices, arrays, scalar kwargs)
        Actuator-->>Model: instance
        Model-->>User: append to m.actuators
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested reviewers

  • eric-heiden
  • adenzler-nvidia
🚥 Pre-merge checks | ✅ 2 | ❌ 2
❌ Failed checks (2 warnings)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 63.27% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Merge Conflict Detection ⚠️ Warning ❌ Merge conflicts detected (13 files):

⚔️ newton/_src/sim/builder.py (content)
⚔️ newton/_src/sim/model.py (content)
⚔️ newton/_src/utils/import_mjcf.py (content)
⚔️ newton/_src/utils/import_urdf.py (content)
⚔️ newton/_src/utils/import_usd.py (content)
⚔️ newton/_src/utils/selection.py (content)
⚔️ newton/examples/basic/example_basic_urdf.py (content)
⚔️ newton/examples/ik/example_ik_cube_stacking.py (content)
⚔️ newton/examples/robot/example_robot_panda_hydro.py (content)
⚔️ newton/tests/test_fixed_tendon.py (content)
⚔️ newton/tests/test_import_mjcf.py (content)
⚔️ pyproject.toml (content)
⚔️ uv.lock (content)

These conflicts must be resolved before merging into main.
Resolve conflicts locally and push changes to this branch.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main change: this PR integrates the newton-actuators library into the Newton physics engine, adding comprehensive actuator support across ModelBuilder, Model, and selection APIs.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🤖 Fix all issues with AI agents
In @control:
- Line 1: The repository contains a gitlink for the submodule path "control"
pointing at commit 647e57297ded9dfd9abe48ba02c20b641fe391ba but lacks a
.gitmodules entry; either add a .gitmodules file mapping the "control" submodule
to the correct repository URL (e.g., the newton-actuators repo) and ensure the
referenced commit hash 647e5729... is the intended reviewed version, or remove
the gitlink/submodule entry entirely from the index and commit that removal;
update .git/config or run the appropriate git submodule commands (git submodule
add <url> control or git rm --cached control && rm -rf control) to reflect the
chosen fix and commit the change so git clone + git submodule init works without
errors.

In @newton/_src/sim/builder.py:
- Around line 1505-1506: The add_usd function's parse_actuator_fn parameter is
untyped and undocumented; update its signature to annotate parse_actuator_fn
with typing.Callable (e.g., Callable[[Any], Any] or a more specific Callable
matching your actuator parse input/output) and import Callable from typing if
needed, and add an Args entry in the add_usd docstring describing
parse_actuator_fn (what input it expects, what it returns, and its purpose).
Repeat the same typing + docstring update for the other occurrence of add_usd
mentioned (around the second occurrence at 1606-1607), ensuring both signatures
and docstrings stay consistent.
- Around line 2215-2225: When merging actuator entries in
builder.actuator_entries, avoid aliasing dicts by extending entry.args with
deep/shallow copies of each per-DOF arg dict from sub_entry.args (e.g., use
dict(arg) for each arg) instead of entry.args.extend(sub_entry.args); also
assert that len(sub_entry.args) == len(sub_entry.output_indices) and that after
offsetting the indices the invariant len(entry.args) ==
len(entry.output_indices) holds (raise/assert with a clear message) so
mismatches fail early; keep references to ActuatorEntry, entry, sub_entry, and
start_joint_dof_idx to locate the change.
- Around line 70-77: Rename the module-scoped ActuatorEntry dataclass to
_ActuatorEntry to mark it private and update every usage site in this module
(e.g., any references inside ModelBuilder, type annotations, lists, imports
within the file) to the new name; ensure the dataclass declaration and all
references (constructor calls, type hints, collections of ActuatorEntry) are
renamed consistently and run tests/type checks to catch any missed spots.
- Around line 6716-6731: The actuator parameter arrays created via
_stack_args_to_arrays do not inherit the model-level requires_grad flag from
finalize(); change the helper signature to def _stack_args_to_arrays(self,
args_list: list[dict], device=None, requires_grad: bool = False) and ensure each
wp.array(...) inside _stack_args_to_arrays receives requires_grad=requires_grad,
then update the call in finalize() where _stack_args_to_arrays is invoked
(currently in the loop that builds actuators from actuator_entries) to forward
the finalize() requires_grad value; drop the redundant len(args) and
index-bounds checks per the comment and optionally sort actuator_entries keys
for deterministic iteration.
- Around line 1152-1171: The _stack_args_to_arrays function currently ignores
requires_grad, lacks type hints, and doesn't validate inputs; update its
signature to accept requires_grad: bool and device: Devicelike | None and return
dict[str, wp.array]; inside, validate that args_list is non-empty, that every
dict in args_list has identical keys (raise a ValueError if not), iterate keys
in deterministic sorted(args_list[0].keys()) order, ensure every value for each
key is a numeric scalar (int/float) and raise a TypeError for non-scalar values,
build a list of scalar values per key, and create arrays with wp.array(values,
dtype=wp.float32, device=device, requires_grad=requires_grad); also update the
call site in finalize() where _stack_args_to_arrays is invoked to pass through
the requires_grad argument.

In @newton/_src/utils/import_usd.py:
- Line 60: Add a type annotation and docstring for the parse_actuator_fn
parameter: annotate parse_actuator_fn as Optional[Callable[[pxr.Usd.Prim],
Optional[Any]]] (or a more specific Protocol/TypedDict if available) and update
the function's docstring Args to describe that parse_actuator_fn is an optional
callback that accepts a single pxr.Usd.Prim and returns either None (to skip the
prim) or an object with attributes target_paths (list of joint prim paths),
actuator_class (class to instantiate, e.g., ActuatorPD) and kwargs (dict of
extra keyword args); also add to the Returns section that the returned dict
includes "actuator_count" describing the number of actuators added via
parse_actuator_fn.
🧹 Nitpick comments (6)
newton/_src/sim/model.py (1)

547-548: LGTM!

The new actuators attribute follows the pattern of other list-based model attributes like shape_source and body_key.

Consider adding a type annotation for improved documentation and IDE support:

-        self.actuators = []
-        """List of actuator instances for this model."""
+        self.actuators: list = []
+        """List of actuator instances for this model."""
newton/_src/utils/import_usd.py (1)

1651-1658: Consider adding error handling for parse_actuator_fn.

If the user-provided parse_actuator_fn callback raises an exception, the entire USD import will fail without a clear error message indicating which prim caused the issue.

🛡️ Suggested defensive handling
         for prim in Usd.PrimRange(stage.GetPrimAtPath(root_path)):
-            parsed = parse_actuator_fn(prim)
-            if parsed is None:
-                continue
+            try:
+                parsed = parse_actuator_fn(prim)
+                if parsed is None:
+                    continue
+            except Exception as e:
+                if verbose:
+                    print(f"Warning: parse_actuator_fn failed for prim {prim.GetPath()}: {e}")
+                continue
             dof_indices = [path_to_dof[p] for p in parsed.target_paths if p in path_to_dof]
newton/_src/sim/builder.py (1)

767-770: actuator_entries init looks fine; consider tightening the key type for readability.

The current annotation dict[tuple[type, tuple], ActuatorEntry] is pretty opaque; a small type alias would help future maintenance (and make it clearer that the 2nd tuple is (name, value) pairs).

newton/_src/utils/selection.py (1)

925-985: Consider the memory implications of functools.cache on instance methods.

Using functools.cache on instance methods can cause memory leaks because self becomes part of the cache key, preventing garbage collection of the instance. However, I see this pattern is already used on _get_attribute_array (line 601), and ArticulationView instances are typically long-lived simulation objects where the mapping is reused frequently.

If this becomes a concern, consider using a dictionary attribute (e.g., self._actuator_dof_mappings = {}) with the actuator as the key instead.

newton/tests/test_selection.py (1)

86-92: Prefix unused dofs variable with underscore.

The dofs return value is unpacked but not used in several tests. Per static analysis hint (RUF059), prefix with underscore to indicate intentionally unused.

♻️ Suggested fix
     def test_get_actuator_attribute_single_world(self):
-        model, dofs = self._build_single_world_model()
+        model, _dofs = self._build_single_world_model()
         view = ArticulationView(model, pattern="robot")

Apply the same pattern to lines 105, 152, 160, and 168 where dofs is unpacked but unused.

newton/tests/test_actuators.py (1)

180-185: Minor: Consider using assertGreater consistently.

Line 183 uses assertGreaterEqual(result2["actuator_count"], 0) but line 185 uses assertGreater(len(model2.actuators), 0). Since the test expects actuators to be parsed, consider using assertGreater on line 183 as well for consistency.

♻️ Suggested fix
         # With parse function - actuators parsed
         builder2 = newton.ModelBuilder()
         result2 = parse_usd(builder2, usd_path, parse_actuator_fn=parse_actuator_prim)
-        self.assertGreaterEqual(result2["actuator_count"], 0)
+        self.assertGreater(result2["actuator_count"], 0)
         model2 = builder2.finalize()
         self.assertGreater(len(model2.actuators), 0)
📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 8ccb2a9 and 3d42a80.

⛔ Files ignored due to path filters (1)
  • uv.lock is excluded by !**/*.lock
📒 Files selected for processing (9)
  • control
  • newton/_src/sim/builder.py
  • newton/_src/sim/model.py
  • newton/_src/utils/import_usd.py
  • newton/_src/utils/selection.py
  • newton/tests/assets/actuator_test.usda
  • newton/tests/test_actuators.py
  • newton/tests/test_selection.py
  • pyproject.toml
🧰 Additional context used
📓 Path-based instructions (4)
newton/_src/**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

The newton/_src/ directory is internal library implementation only and must not be imported by user code (examples, documentation, or external users)

Files:

  • newton/_src/sim/model.py
  • newton/_src/utils/import_usd.py
  • newton/_src/sim/builder.py
  • newton/_src/utils/selection.py
newton/**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

Any user-facing class/function/object added under _src must be exposed via the public Newton API through re-exports

Files:

  • newton/_src/sim/model.py
  • newton/tests/test_actuators.py
  • newton/_src/utils/import_usd.py
  • newton/tests/test_selection.py
  • newton/_src/sim/builder.py
  • newton/_src/utils/selection.py
**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

**/*.py: Use prefix-first naming for classes: ActuatorPD, ActuatorPID (not PDActuator, PIDActuator)
Use prefix-first naming for methods: add_shape_sphere() (not add_sphere_shape())
Method names must use snake_case
Prefer nested classes when self-contained: if a helper type or enum is only meaningful inside one parent class and doesn't need a public identity, define it as a nested class instead of a top-level class/module
Follow PEP 8 for Python code
Use Google-style docstrings with clear, concise explanations of what functions do, their parameters, and return values

Files:

  • newton/_src/sim/model.py
  • newton/tests/test_actuators.py
  • newton/_src/utils/import_usd.py
  • newton/tests/test_selection.py
  • newton/_src/sim/builder.py
  • newton/_src/utils/selection.py
**/*

📄 CodeRabbit inference engine (AGENTS.md)

CLI arguments must use kebab-case (e.g., --use-cuda-graph, not --use_cuda_graph)

Files:

  • newton/_src/sim/model.py
  • control
  • pyproject.toml
  • newton/tests/test_actuators.py
  • newton/_src/utils/import_usd.py
  • newton/tests/assets/actuator_test.usda
  • newton/tests/test_selection.py
  • newton/_src/sim/builder.py
  • newton/_src/utils/selection.py
🧠 Learnings (11)
📓 Common learnings
Learnt from: shi-eric
Repo: newton-physics/newton PR: 521
File: newton/examples/example_cloth_hanging.py:36-36
Timestamp: 2025-08-12T05:17:34.423Z
Learning: The Newton migration guide (docs/migration.rst) is specifically for documenting how to migrate existing warp.sim functionality to Newton equivalents. New Newton-only features that didn't exist in warp.sim do not need migration documentation.
📚 Learning: 2026-01-13T03:11:40.556Z
Learnt from: jumyungc
Repo: newton-physics/newton PR: 1333
File: newton/_src/sim/builder.py:0-0
Timestamp: 2026-01-13T03:11:40.556Z
Learning: Ensure all VBD damping semantics follow Rayleigh-style damping and are unitless. This convention, demonstrated in SolverVBD, should be applied consistently across all VBD-related constraints in the codebase. In newton/_src/sim/builder.py, validate that any damping terms use the same normalization and are treated as dimensionless; add comments and unit tests to enforce consistency across VBD components.

Applied to files:

  • newton/_src/sim/model.py
  • newton/tests/test_actuators.py
  • newton/_src/utils/import_usd.py
  • newton/tests/test_selection.py
  • newton/_src/sim/builder.py
  • newton/_src/utils/selection.py
📚 Learning: 2025-08-27T23:32:48.670Z
Learnt from: shi-eric
Repo: newton-physics/newton PR: 660
File: pyproject.toml:54-59
Timestamp: 2025-08-27T23:32:48.670Z
Learning: In the newton project's pyproject.toml, self-referential extras (e.g., `examples = ["newton[sim]", "newton[importers]", ...]`) are normal and encouraged for dependency management, rather than inlining the dependencies.

Applied to files:

  • pyproject.toml
📚 Learning: 2026-01-13T07:40:13.624Z
Learnt from: CR
Repo: newton-physics/newton PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-13T07:40:13.624Z
Learning: Applies to newton/**/*.py : Any user-facing class/function/object added under `_src` must be exposed via the public Newton API through re-exports

Applied to files:

  • pyproject.toml
📚 Learning: 2025-08-14T17:38:36.106Z
Learnt from: nvlukasz
Repo: newton-physics/newton PR: 519
File: newton/__init__.py:25-29
Timestamp: 2025-08-14T17:38:36.106Z
Learning: The Newton project prefers incremental __all__ building using __all__ += [...] pattern to group exports with their related imports, rather than a single consolidated __all__ at the end of the file.

Applied to files:

  • pyproject.toml
📚 Learning: 2025-08-12T18:04:06.577Z
Learnt from: nvlukasz
Repo: newton-physics/newton PR: 519
File: newton/_src/solvers/featherstone/kernels.py:75-75
Timestamp: 2025-08-12T18:04:06.577Z
Learning: The Newton physics framework requires nightly Warp builds, which means compatibility concerns with older stable Warp versions (like missing functions such as wp.spatial_adjoint) are not relevant for this project.

Applied to files:

  • pyproject.toml
📚 Learning: 2026-01-12T10:11:39.312Z
Learnt from: nvtw
Repo: newton-physics/newton PR: 1314
File: newton/_src/sim/builder.py:6061-6091
Timestamp: 2026-01-12T10:11:39.312Z
Learning: Repo: newton-physics/newton PR: 1314
File: newton/_src/sim/builder.py (ModelBuilder.finalize)
Learning: The project prefers to keep finalize() validation lightweight; do not add union-find/connected-components validation for loop joints. Current behavior (allow non-articulated joints when the child is in any articulation) is acceptable; avoid overengineering here.

Applied to files:

  • newton/tests/test_actuators.py
  • newton/_src/utils/import_usd.py
📚 Learning: 2025-08-12T18:07:17.267Z
Learnt from: nvlukasz
Repo: newton-physics/newton PR: 519
File: newton/utils.py:30-33
Timestamp: 2025-08-12T18:07:17.267Z
Learning: In newton/_src/utils/import_usd.py, the PXR/USD modules are lazily loaded using try-except blocks within the functions rather than at module import time, making it safe to import parse_usd at the module level without causing import-time failures for users without USD dependencies.

Applied to files:

  • newton/_src/utils/import_usd.py
📚 Learning: 2025-08-12T18:07:17.267Z
Learnt from: nvlukasz
Repo: newton-physics/newton PR: 519
File: newton/utils.py:30-33
Timestamp: 2025-08-12T18:07:17.267Z
Learning: In newton/_src/utils/import_usd.py, the PXR/USD modules are lazily loaded using try-except blocks within the functions (lines 109-111 and 1289-1291) rather than at module import time, making it safe to import parse_usd at the module level without causing import-time failures for users without USD dependencies.

Applied to files:

  • newton/_src/utils/import_usd.py
📚 Learning: 2026-01-12T10:11:39.312Z
Learnt from: nvtw
Repo: newton-physics/newton PR: 1314
File: newton/_src/sim/builder.py:6061-6091
Timestamp: 2026-01-12T10:11:39.312Z
Learning: In finalize() validation logic (e.g., newton/_src/sim/builder.py and similar files), keep the validation lightweight. Do not add union-find/connected-components validation for loop joints. The current behavior—allowing non-articulated joints when the child is in any articulation—is acceptable. Avoid overengineering here.

Applied to files:

  • newton/_src/sim/builder.py
📚 Learning: 2026-01-13T03:11:40.555Z
Learnt from: jumyungc
Repo: newton-physics/newton PR: 1333
File: newton/_src/sim/builder.py:0-0
Timestamp: 2026-01-13T03:11:40.555Z
Learning: In newton/_src/sim/builder.py, follow VBD conventions: treat radians as dimensionless. Prefer wording 'torque per radian' instead of writing 'N·m/rad' in any docs, strings, or generated text within this file. Ensure consistent usage in docstrings, comments, and documentation strings associated with this module.

Applied to files:

  • newton/_src/sim/builder.py
🧬 Code graph analysis (3)
newton/_src/utils/import_usd.py (1)
newton/_src/sim/builder.py (1)
  • add_actuator (1109-1150)
newton/tests/test_selection.py (1)
newton/_src/utils/selection.py (3)
  • ArticulationView (226-1092)
  • get_actuator_attribute (987-1015)
  • set_actuator_attribute (1017-1056)
newton/_src/utils/selection.py (3)
newton/_src/sim/model.py (2)
  • Model (100-912)
  • ModelAttributeFrequency (49-74)
newton/_src/sim/articulation.py (1)
  • eval_fk (414-471)
newton/_src/sim/builder.py (1)
  • copy (291-292)
🪛 Ruff (0.14.10)
newton/tests/test_selection.py

87-87: Unpacked variable dofs is never used

Prefix it with an underscore or any other dummy variable pattern

(RUF059)


105-105: Unpacked variable dofs is never used

Prefix it with an underscore or any other dummy variable pattern

(RUF059)


152-152: Unpacked variable dofs is never used

Prefix it with an underscore or any other dummy variable pattern

(RUF059)


160-160: Unpacked variable dofs is never used

Prefix it with an underscore or any other dummy variable pattern

(RUF059)


168-168: Unpacked variable dofs is never used

Prefix it with an underscore or any other dummy variable pattern

(RUF059)

newton/_src/utils/selection.py

925-925: Use of functools.lru_cache or functools.cache on methods can lead to memory leaks

(B019)


1041-1041: Avoid specifying long messages outside the exception class

(TRY003)

⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Run GPU Benchmarks / Run GPU Benchmarks on AWS EC2
🔇 Additional comments (21)
pyproject.toml (2)

31-34: LGTM!

The new actuators optional dependency group follows the established pattern in this project for optional dependencies.


123-123: The newton-actuators directory is missing from the repository.

The editable path dependency newton-actuators = { path = "newton-actuators", editable = true } references a non-existent directory. Either add the newton-actuators package directory to the repository root with a valid pyproject.toml or setup.py, or remove/correct the dependency configuration in [tool.uv.sources].

⛔ Skipped due to learnings
Learnt from: shi-eric
Repo: newton-physics/newton PR: 660
File: pyproject.toml:54-59
Timestamp: 2025-08-27T23:32:48.670Z
Learning: In the newton project's pyproject.toml, self-referential extras (e.g., `examples = ["newton[sim]", "newton[importers]", ...]`) are normal and encouraged for dependency management, rather than inlining the dependencies.
newton/_src/utils/import_usd.py (2)

1737-1737: LGTM!

The actuator_count return value follows the established pattern for metadata in the return dictionary.


1646-1650: This bounds check is correct and should not be changed.

The joint_qd_start list on the builder object does not have a sentinel value. The sentinel is only appended to the copy in finalize() when creating the Model object. Since builder.joint_qd_start is just a regular list that grows with each added joint, the condition if idx < len(builder.joint_qd_start) is the appropriate defensive check to prevent out-of-bounds access.

Likely an incorrect or invalid review comment.

newton/_src/sim/builder.py (1)

1109-1151: The concerns in this review are based on misunderstandings of the intended design.

  1. Mismatched input/output indices are intentional. The test test_accumulation_and_parameters explicitly uses input_indices=[dofs[1]], output_indices=[dofs[2]] to read state from one DOF and write output to a different DOF. This is an intended feature, not a bug.

  2. Multiple indices are already supported. Despite the comment "todo: case for len > 1", the test test_scalar_param_accumulation shows input_indices=[dofs[0], dofs[1]] already works. The comment is misleading but the functionality exists.

  3. resolve_arguments(kwargs) signature is correct. The calling convention passes a dict, which is confirmed by the implementation.

  4. Bounds validation is intentionally deferred. Per project guidance, finalize() validation is kept lightweight. Negative indices convert silently to large uint32 values in Warp arrays, but this is deferred to finalize. There are no existing tests for bounds errors at add_actuator time.

  5. Dict reference sharing is safe. Appending the same array_params dict multiple times works correctly because _stack_args_to_arrays extracts values independently from each dict.

Action: Remove or clarify the misleading "todo: case for len > 1" comment since multiple indices are already supported. No validation additions are needed.

Likely an incorrect or invalid review comment.

newton/_src/utils/selection.py (7)

26-28: LGTM on the TYPE_CHECKING import pattern.

This correctly uses TYPE_CHECKING to avoid importing newton_actuators at runtime, keeping it as an optional dependency while still providing type hints.


114-141: LGTM on slice-based DOF mapping kernel.

The kernel correctly maps actuator indices to view DOF positions by iterating over the first world's actuators and replicating the pattern across all worlds.


144-168: LGTM on index-based DOF mapping kernel.

The linear search through view_dof_indices has O(actuators × dofs) complexity, which should be acceptable for typical articulation sizes. The break correctly ensures only the first matching DOF index is mapped.


171-181: LGTM on gather kernel.

Simple and correct gather implementation with -1 sentinel for non-actuated DOFs.


184-204: LGTM on scatter kernel.

The 2D launch correctly handles per-articulation masking and skips non-actuated DOFs via the -1 sentinel in the mapping.


987-1015: LGTM on get_actuator_attribute implementation.

The method correctly handles the mapping, gathers values using the kernel, and reshapes to the expected batched format. Invalid attribute names will naturally raise AttributeError from getattr, which is appropriate.


1017-1056: LGTM on set_actuator_attribute implementation.

The validation, mask handling, and scatter kernel invocation are all correct. The shape validation on [:2] appropriately checks the critical dimensions for the 2D scatter kernel.

newton/tests/test_selection.py (2)

24-29: LGTM on conditional import pattern.

The try/except pattern with HAS_ACTUATORS flag correctly handles the optional newton-actuators dependency, allowing tests to be skipped gracefully when not installed.


54-192: Good test coverage for actuator selection API.

The test suite comprehensively covers:

  • Single and multi-world scenarios
  • Get and set operations
  • Masking behavior
  • Partial joint selection
  • Multiple parameters (kp, kd)
  • Non-actuated DOF handling (returns zeros)

This provides solid coverage for the new ArticulationView actuator methods.

newton/tests/assets/actuator_test.usda (2)

95-116: LGTM on actuator USD definitions.

The actuator prims correctly define:

  • Target relationships to their respective joints via newton:actuator:target
  • PD controller parameters (kp, kd, maxForce)
  • API schemas for controller type (PDControllerAPI, DelayAPI)

This provides good test coverage for the USD parsing hooks.


1-117: LGTM on USD test asset structure.

The asset properly defines:

  • Physics scene setup
  • Articulation root with rigid body hierarchy
  • Revolute joints with angular drive API
  • Collision geometry on all links

This is a well-structured test asset for validating the actuator USD import flow.

newton/tests/test_actuators.py (5)

24-30: LGTM on conditional imports.

The try/except pattern correctly handles the optional newton-actuators dependency, including all three actuator types that will be tested.


37-68: LGTM on accumulation test.

Thorough verification of:

  • Actuator accumulation (3 add_actuator calls → 1 actuator with 3 entries)
  • All parameter types (kp, kd, gear, constant_force, max_force)
  • Default values (kd=0.0, max_force=inf)
  • Input/output index handling

70-119: LGTM on mixed types with replication test.

Excellent coverage of:

  • Mixed actuator types (PD vs PID) creating separate actuator instances
  • DOF offset calculation across replicated worlds
  • Input/output index differentiation for cross-DOF actuators

121-151: LGTM on delay grouping test.

Good verification that:

  • Same delay values (delay=3) group into one actuator
  • Different delays (delay=3 vs delay=7) create separate actuators
  • Simple PD and DelayedPD remain separate

158-165: LGTM on in-method imports.

Placing imports inside the test method is appropriate here as it handles the case where USD dependencies may not be installed. The import from newton._src.utils.import_usd is acceptable in test code.

Comment thread control Outdated
Comment thread newton/_src/sim/builder.py Outdated
Comment thread newton/_src/sim/builder.py
Comment thread newton/_src/utils/import_usd.py Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Fix all issues with AI agents
In @newton/_src/sim/builder.py:
- Around line 1506-1507: The add_usd function signature should annotate
parse_actuator_fn with the type Callable[[Usd.Prim], Any | None] | None and
default it to None (i.e., parse_actuator_fn: Callable[[Usd.Prim], Any | None] |
None = None); also update add_usd's docstring Args section to document
parse_actuator_fn as a callback used for parsing actuator prims (returns parsed
actuator info or None) and mention it is forwarded to parse_usd so callers know
the plumbing.
🧹 Nitpick comments (3)
newton/_src/utils/import_usd.py (1)

1661-1677: Consider adding warnings or validation for missing target paths and malformed callback returns.

A few concerns with the current implementation:

  1. Silent failure on missing target paths (Line 1672): If parsed.target_paths contains paths that don't exist in path_to_dof, they are silently skipped. This could result in actuators with fewer DOFs than intended, or no actuator being created at all if all paths are invalid—with no warning to the user.

  2. No validation of callback return structure: If parse_actuator_fn returns an object missing required attributes (target_paths, actuator_class, kwargs), the resulting AttributeError won't clearly indicate the problem originated from the callback.

  3. DOF mapping only captures start index: path_to_dof maps to joint_qd_start[idx], which is correct for single-DOF joints but may need clarification in the docstring that multi-DOF joints should have each axis explicitly targeted.

💡 Suggested improvement for better error reporting
     actuator_count = 0
     if parse_actuator_fn is not None:
         path_to_dof = {
             path: builder.joint_qd_start[idx]
             for path, idx in path_joint_map.items()
             if idx < len(builder.joint_qd_start)
         }
         for prim in Usd.PrimRange(stage.GetPrimAtPath(root_path)):
             parsed = parse_actuator_fn(prim)
             if parsed is None:
                 continue
+            # Validate callback return has required attributes
+            for attr in ("target_paths", "actuator_class", "kwargs"):
+                if not hasattr(parsed, attr):
+                    raise ValueError(
+                        f"parse_actuator_fn returned object missing required attribute '{attr}' "
+                        f"for prim {prim.GetPath()}"
+                    )
             dof_indices = [path_to_dof[p] for p in parsed.target_paths if p in path_to_dof]
+            missing_paths = [p for p in parsed.target_paths if p not in path_to_dof]
+            if missing_paths and verbose:
+                print(f"Warning: Actuator at {prim.GetPath()} references unknown joint paths: {missing_paths}")
             if dof_indices:
                 builder.add_actuator(parsed.actuator_class, input_indices=dof_indices, **parsed.kwargs)
                 actuator_count += 1
+            elif verbose:
+                print(f"Warning: Actuator at {prim.GetPath()} has no valid DOF targets, skipping")
         if verbose and actuator_count > 0:
             print(f"Added {actuator_count} actuator(s) from USD")
newton/_src/sim/builder.py (2)

767-770: self.actuator_entries initialization looks fine; consider narrowing key typing.
Minor readability/typing improvement: dict[tuple[type[...], tuple[tuple[str, Any], ...]], ActuatorEntry] (or similar) to document expectations.


2216-2226: Actuator DOF offset merge looks correct; consider copying args to avoid shared references.

If sub_entry.args dicts are ever mutated later (even accidentally), merging by reference can cause cross-builder coupling. Safer to entry.args.extend([d.copy() for d in sub_entry.args]).

📜 Review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3d42a80 and abfced0.

📒 Files selected for processing (2)
  • newton/_src/sim/builder.py
  • newton/_src/utils/import_usd.py
🧰 Additional context used
📓 Path-based instructions (4)
newton/_src/**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

The newton/_src/ directory is internal library implementation only and must not be imported by user code (examples, documentation, or external users)

Files:

  • newton/_src/utils/import_usd.py
  • newton/_src/sim/builder.py
newton/**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

Any user-facing class/function/object added under _src must be exposed via the public Newton API through re-exports

Files:

  • newton/_src/utils/import_usd.py
  • newton/_src/sim/builder.py
**/*.py

📄 CodeRabbit inference engine (AGENTS.md)

**/*.py: Use prefix-first naming for classes: ActuatorPD, ActuatorPID (not PDActuator, PIDActuator)
Use prefix-first naming for methods: add_shape_sphere() (not add_sphere_shape())
Method names must use snake_case
Prefer nested classes when self-contained: if a helper type or enum is only meaningful inside one parent class and doesn't need a public identity, define it as a nested class instead of a top-level class/module
Follow PEP 8 for Python code
Use Google-style docstrings with clear, concise explanations of what functions do, their parameters, and return values

Files:

  • newton/_src/utils/import_usd.py
  • newton/_src/sim/builder.py
**/*

📄 CodeRabbit inference engine (AGENTS.md)

CLI arguments must use kebab-case (e.g., --use-cuda-graph, not --use_cuda_graph)

Files:

  • newton/_src/utils/import_usd.py
  • newton/_src/sim/builder.py
🧠 Learnings (12)
📓 Common learnings
Learnt from: shi-eric
Repo: newton-physics/newton PR: 521
File: newton/examples/example_cloth_hanging.py:36-36
Timestamp: 2025-08-12T05:17:34.423Z
Learning: The Newton migration guide (docs/migration.rst) is specifically for documenting how to migrate existing warp.sim functionality to Newton equivalents. New Newton-only features that didn't exist in warp.sim do not need migration documentation.
Learnt from: nvtw
Repo: newton-physics/newton PR: 1314
File: newton/_src/sim/builder.py:6061-6091
Timestamp: 2026-01-12T10:11:39.312Z
Learning: Repo: newton-physics/newton PR: 1314
File: newton/_src/sim/builder.py (ModelBuilder.finalize)
Learning: The project prefers to keep finalize() validation lightweight; do not add union-find/connected-components validation for loop joints. Current behavior (allow non-articulated joints when the child is in any articulation) is acceptable; avoid overengineering here.
Learnt from: nvlukasz
Repo: newton-physics/newton PR: 519
File: newton/_src/solvers/featherstone/kernels.py:75-75
Timestamp: 2025-08-12T18:04:06.577Z
Learning: The Newton physics framework requires nightly Warp builds, which means compatibility concerns with older stable Warp versions (like missing functions such as wp.spatial_adjoint) are not relevant for this project.
📚 Learning: 2025-08-12T18:07:17.267Z
Learnt from: nvlukasz
Repo: newton-physics/newton PR: 519
File: newton/utils.py:30-33
Timestamp: 2025-08-12T18:07:17.267Z
Learning: In newton/_src/utils/import_usd.py, the PXR/USD modules are lazily loaded using try-except blocks within the functions rather than at module import time, making it safe to import parse_usd at the module level without causing import-time failures for users without USD dependencies.

Applied to files:

  • newton/_src/utils/import_usd.py
📚 Learning: 2025-08-12T18:07:17.267Z
Learnt from: nvlukasz
Repo: newton-physics/newton PR: 519
File: newton/utils.py:30-33
Timestamp: 2025-08-12T18:07:17.267Z
Learning: In newton/_src/utils/import_usd.py, the PXR/USD modules are lazily loaded using try-except blocks within the functions (lines 109-111 and 1289-1291) rather than at module import time, making it safe to import parse_usd at the module level without causing import-time failures for users without USD dependencies.

Applied to files:

  • newton/_src/utils/import_usd.py
📚 Learning: 2026-01-12T10:11:39.312Z
Learnt from: nvtw
Repo: newton-physics/newton PR: 1314
File: newton/_src/sim/builder.py:6061-6091
Timestamp: 2026-01-12T10:11:39.312Z
Learning: Repo: newton-physics/newton PR: 1314
File: newton/_src/sim/builder.py (ModelBuilder.finalize)
Learning: The project prefers to keep finalize() validation lightweight; do not add union-find/connected-components validation for loop joints. Current behavior (allow non-articulated joints when the child is in any articulation) is acceptable; avoid overengineering here.

Applied to files:

  • newton/_src/utils/import_usd.py
📚 Learning: 2026-01-13T03:11:40.556Z
Learnt from: jumyungc
Repo: newton-physics/newton PR: 1333
File: newton/_src/sim/builder.py:0-0
Timestamp: 2026-01-13T03:11:40.556Z
Learning: Ensure all VBD damping semantics follow Rayleigh-style damping and are unitless. This convention, demonstrated in SolverVBD, should be applied consistently across all VBD-related constraints in the codebase. In newton/_src/sim/builder.py, validate that any damping terms use the same normalization and are treated as dimensionless; add comments and unit tests to enforce consistency across VBD components.

Applied to files:

  • newton/_src/utils/import_usd.py
  • newton/_src/sim/builder.py
📚 Learning: 2026-01-12T10:11:39.312Z
Learnt from: nvtw
Repo: newton-physics/newton PR: 1314
File: newton/_src/sim/builder.py:6061-6091
Timestamp: 2026-01-12T10:11:39.312Z
Learning: In finalize() validation logic (e.g., newton/_src/sim/builder.py and similar files), keep the validation lightweight. Do not add union-find/connected-components validation for loop joints. The current behavior—allowing non-articulated joints when the child is in any articulation—is acceptable. Avoid overengineering here.

Applied to files:

  • newton/_src/sim/builder.py
📚 Learning: 2026-01-13T07:40:13.624Z
Learnt from: CR
Repo: newton-physics/newton PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-13T07:40:13.624Z
Learning: Applies to newton/**/*.py : Any user-facing class/function/object added under `_src` must be exposed via the public Newton API through re-exports

Applied to files:

  • newton/_src/sim/builder.py
📚 Learning: 2026-01-13T07:40:13.624Z
Learnt from: CR
Repo: newton-physics/newton PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-13T07:40:13.624Z
Learning: Applies to newton/_src/**/*.py : The `newton/_src/` directory is internal library implementation only and must not be imported by user code (examples, documentation, or external users)

Applied to files:

  • newton/_src/sim/builder.py
📚 Learning: 2025-08-12T17:58:16.929Z
Learnt from: nvlukasz
Repo: newton-physics/newton PR: 519
File: newton/tests/test_ik.py:25-26
Timestamp: 2025-08-12T17:58:16.929Z
Learning: In the Newton physics engine codebase, it's acceptable for tests to import and use private `_src` internal modules and functions when needed for testing purposes, even though this breaks the public API boundary. This is an intentional project decision for test code.

Applied to files:

  • newton/_src/sim/builder.py
📚 Learning: 2026-01-13T07:40:13.624Z
Learnt from: CR
Repo: newton-physics/newton PR: 0
File: AGENTS.md:0-0
Timestamp: 2026-01-13T07:40:13.624Z
Learning: Applies to **/*.py : Use prefix-first naming for classes: `ActuatorPD`, `ActuatorPID` (not `PDActuator`, `PIDActuator`)

Applied to files:

  • newton/_src/sim/builder.py
📚 Learning: 2025-09-22T21:03:39.624Z
Learnt from: dylanturpin
Repo: newton-physics/newton PR: 806
File: newton/_src/sim/ik/ik_lbfgs_optimizer.py:739-752
Timestamp: 2025-09-22T21:03:39.624Z
Learning: The L-BFGS optimizer in newton/_src/sim/ik/ik_lbfgs_optimizer.py currently intentionally only supports additive updates (assuming n_coords == n_dofs). Velocity space integration for joints with mismatched coordinate/DOF dimensions (like free/ball joints) is planned for future work and should not be flagged as an issue in current reviews.

Applied to files:

  • newton/_src/sim/builder.py
📚 Learning: 2026-01-13T03:11:40.555Z
Learnt from: jumyungc
Repo: newton-physics/newton PR: 1333
File: newton/_src/sim/builder.py:0-0
Timestamp: 2026-01-13T03:11:40.555Z
Learning: In newton/_src/sim/builder.py, follow VBD conventions: treat radians as dimensionless. Prefer wording 'torque per radian' instead of writing 'N·m/rad' in any docs, strings, or generated text within this file. Ensure consistent usage in docstrings, comments, and documentation strings associated with this module.

Applied to files:

  • newton/_src/sim/builder.py
🧬 Code graph analysis (1)
newton/_src/utils/import_usd.py (1)
newton/_src/sim/builder.py (1)
  • add_actuator (1109-1150)
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Run GPU Benchmarks / Run GPU Benchmarks on AWS EC2
🔇 Additional comments (6)
newton/_src/utils/import_usd.py (5)

23-28: LGTM!

The TYPE_CHECKING guard for the Usd import is the correct pattern for type hints that reference optional dependencies. This is consistent with the existing lazy-loading approach in this file. Based on learnings, PXR/USD modules are lazily loaded within functions, so this pattern maintains safe module-level imports.


64-64: LGTM!

The parameter signature is well-designed with appropriate type hints and a safe None default.


104-113: LGTM!

The docstring clearly documents the expected callback interface with the required attributes (target_paths, actuator_class, kwargs). The reference to newton_actuators.parse_actuator_prim provides a concrete example for users.


151-152: LGTM!

Return value documentation follows the existing table format and clearly explains the default behavior.


1754-1754: LGTM!

The return value correctly includes actuator_count as documented in the docstring.

newton/_src/sim/builder.py (1)

1152-1171: Consider adding key validation and optional dtype customization to _stack_args_to_arrays()

The method currently assumes all dicts in args_list have identical keys but doesn't validate this. Additionally, hardcoding dtype=wp.float32 may be fragile if actuator parameters in the external newton_actuators package include non-float types.

If all array parameters are guaranteed to be floats, the current implementation is acceptable. Otherwise, consider:

  • Validating consistent keys across all dicts for clearer error messages
  • Adding an optional dtype_map parameter to support heterogeneous parameter types

Comment thread newton/_src/sim/builder.py Outdated
Comment thread newton/_src/sim/builder.py
Comment thread newton/_src/sim/builder.py Outdated
Comment thread newton/_src/sim/builder.py
@codecov

codecov Bot commented Feb 3, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 90.75145% with 16 lines in your changes missing coverage. Please review.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
newton/_src/utils/selection.py 88.40% 8 Missing ⚠️
newton/_src/sim/builder.py 93.05% 5 Missing ⚠️
newton/_src/utils/import_usd.py 88.88% 2 Missing ⚠️
newton/_src/sim/model.py 90.00% 1 Missing ⚠️

📢 Thoughts on this report? Let us know!

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@newton/_src/sim/builder.py`:
- Around line 783-785: The type annotation for self.actuator_entries refers to
ActuatorEntry unqualified and triggers Ruff F821; update the annotation to
reference the nested class by its fully-qualified name (e.g. replace
ActuatorEntry with <EnclosingClassName>.ActuatorEntry) so the annotation points
to the nested class where ActuatorEntry is defined; specifically edit the line
with self.actuator_entries: dict[tuple[type, tuple], ActuatorEntry] to use the
actual enclosing class name (the class that defines ActuatorEntry) in place of
ActuatorEntry.

In `@newton/tests/test_actuators.py`:
- Around line 182-187: The assertion for actuator counting is too weak: replace
the non-negative check on result2["actuator_count"] with a strict positive check
so the test verifies actuators were actually found; update the assertion that
references result2["actuator_count"] (in the parse_usd call using builder2 and
parse_actuator_prim) to assert that the count is greater than 0 (e.g., use
assertGreater) so the "With parse function - actuators parsed" case fails if no
actuators were parsed.
🧹 Nitpick comments (1)
newton/tests/test_actuators.py (1)

100-101: Consider using consistent type checking approach.

Lines 100-101 use different type checking patterns: type(a) is ActuatorPD (exact match) vs isinstance(a, ActuatorPID). While this works correctly since there's no inheritance relationship tested here, using a consistent approach improves readability.

♻️ Suggested fix for consistency
-        pd_act = next(a for a in model.actuators if type(a) is ActuatorPD)
-        pid_act = next(a for a in model.actuators if isinstance(a, ActuatorPID))
+        pd_act = next(a for a in model.actuators if type(a) is ActuatorPD)
+        pid_act = next(a for a in model.actuators if type(a) is ActuatorPID)

Comment thread newton/_src/sim/builder.py
Comment thread newton/tests/test_actuators.py Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@newton/_src/utils/selection.py`:
- Around line 181-239: Both kernels assume actuator_output_indices yields a
scalar per actuator and will crash for 2D multi-output arrays; update
build_actuator_dof_mapping_slice_kernel and
build_actuator_dof_mapping_indices_kernel to either (A) validate and raise a
clear error when actuator_output_indices is 2D (e.g., check shape/ndim and call
wp.error or set a clear mapping failure), or (B) implement 2D support: compute
outputs_per_actuator = actuator_output_indices.shape[1], loop over output_index
in range(outputs_per_actuator), read global_dof via
actuator_output_indices[local_idx, output_index], and when computing
actuator_idx incorporate the output offset (e.g., actuator_idx = world_idx *
actuators_per_world + local_idx * outputs_per_actuator + output_index) so
mapping positions map each output to its proper actuator-output slot; also
update docstrings to mention 2D support/validation.
🧹 Nitpick comments (1)
newton/_src/utils/selection.py (1)

1403-1435: Normalize values dtype before scattering.

If values is already a wp.array with a different dtype, it isn’t cast, but the kernel expects the actuator dtype. This can raise a Warp dtype error at launch. Consider mirroring _set_attribute_values by normalizing dtype.

♻️ Suggested tweak
-        if not is_array(values):
+        if not is_array(values) or values.dtype != dst.dtype:
             values = wp.array(values, dtype=dst.dtype, shape=expected_shape, device=self.device, copy=False)

Comment thread newton/_src/utils/selection.py Outdated
@jvonmuralt jvonmuralt changed the title WIP: Actuators integration Integration of newton-actuators Feb 6, 2026
Comment thread newton/_src/sim/model.py Outdated
Comment thread pyproject.toml Outdated
Comment thread newton/_src/sim/builder.py Outdated

@eric-heiden eric-heiden left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @jvonmuralt, LGTM! Could you rename add_external_actuator to add_actuator? See my comment on the point @adenzler-nvidia raised earlier, we can clarify in the docstring that this is an explicit actuator only that applies external joint forces, rather than implicit, solver-dependent joint drives. Then this should be good to merge.

Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com>
Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com>
@adenzler-nvidia

Copy link
Copy Markdown
Member

Nit: newton/tests/test_actuators.py uses Copyright (c) 2025 — should be 2026 per AGENTS.md ("New files must use the current year (2026)").

@eric-heiden eric-heiden left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be good to also test how the actuators get their inputs, or is that part even implemented? I'm not sure I follow how the user is giving control inputs to them, should there be some extra attributes now on the Control object?

@jvonmuralt

Copy link
Copy Markdown
Member Author

It would be good to also test how the actuators get their inputs, or is that part even implemented? I'm not sure I follow how the user is giving control inputs to them, should there be some extra attributes now on the Control object?

Yes, this is tested already in the library itself and I added the tests now. When there are only revolute and prismatic joints it is sufficient to pass state and control and corresponding attributes will be reused. I am unsure how to proceed when free joints are present. We would need to convert it to per-dof representation each step which is not very efficient

@eric-heiden

Copy link
Copy Markdown
Member

It would be good to also test how the actuators get their inputs, or is that part even implemented? I'm not sure I follow how the user is giving control inputs to them, should there be some extra attributes now on the Control object?

Yes, this is tested already in the library itself and I added the tests now. When there are only revolute and prismatic joints it is sufficient to pass state and control and corresponding attributes will be reused. I am unsure how to proceed when free joints are present. We would need to convert it to per-dof representation each step which is not very efficient

Thanks! Free joints don't need to be handled for now.

@eric-heiden eric-heiden added this pull request to the merge queue Feb 24, 2026
Merged via the queue into newton-physics:main with commit 28b79e3 Feb 24, 2026
22 checks passed
Comment on lines +107 to +115
def Actuator "Joint2Actuator" (
prepend apiSchemas = ["PDControllerAPI", "DelayAPI"]
)
{
rel newton:actuator:target = </World/Robot/Joint2>
float newton:actuator:kp = 200.0
float newton:actuator:kd = 20.0
int newton:actuator:delay = 5
}

@andrewkaufman andrewkaufman Feb 25, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is no actuator schema yet... where does this detail come from? Its problematic for a few reasons

  • The typed prim & the APIs require a Newton prefix -- we can't ship schemas that "appear" to be AOUSD / UsdPhysics things
  • The typed prim & the APIs need to be registered properly via a schema plugin or nothing (other than newton) will be able to parse them
  • The nested namespace on the attributes is legal & maybe fine, but we need to vet that with the schema design group as we so far have not used nested namespaces and instead preferred camelCase eg newton:actuatorKp

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The current implementation was intended as a functional placeholder to unblock development while we finalize the schema design, so this usd just corresponds to what I hardcoded temporarily in the string based schema parser in the library. This of course should not remain that way.
Regarding the workflow to finalize: Should I prepare a PR in the schema repo, or do we need a dedicated design session first?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the presentation you already did for the group was enough to move forward with a schema implementaiton. Maybe write up a summary as a Feature Request Issue here & we can debate any outstanding design decisions there.

vastsoun added a commit to vastsoun/newton that referenced this pull request Mar 3, 2026
* [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>
vastsoun added a commit to vastsoun/newton that referenced this pull request Mar 4, 2026
* [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>
vastsoun added a commit to vastsoun/newton that referenced this pull request Mar 4, 2026
* [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>
mmacklin pushed a commit to mmacklin/newton that referenced this pull request Apr 7, 2026
Signed-off-by: jvonmuralt <jvonmuralt@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants