Skip to content

Use default_body_armature for nonstatic link inertia in urdf parser#870

Merged
eric-heiden merged 15 commits into
newton-physics:mainfrom
lenroe-nv:main
Oct 9, 2025
Merged

Use default_body_armature for nonstatic link inertia in urdf parser#870
eric-heiden merged 15 commits into
newton-physics:mainfrom
lenroe-nv:main

Conversation

@lenroe-nv

@lenroe-nv lenroe-nv commented Oct 2, 2025

Copy link
Copy Markdown
Member

Description

Fixes a bug in the urdf parser that resulted in large inertias for links with zero mass (issue #838).
The behavior is now consistent with the mjcf parser.

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
  • [x ] Code passes formatting and linting checks with pre-commit run -a

Summary by CodeRabbit

  • Bug Fixes

    • Improved inertia initialization for forced non-static links by using the model's default armature for more consistent dynamics.
  • Tests

    • Removed a long-running integration test that stepped and rendered a full policy run.
    • Relaxed simulation checks: lowered an initial height threshold, added a preliminary directional movement check, and replaced strict velocity assertions with per-axis range-based validations.

@lenroe-nv lenroe-nv requested a review from eric-heiden October 2, 2025 08:24
@linux-foundation-easycla

linux-foundation-easycla Bot commented Oct 2, 2025

Copy link
Copy Markdown

CLA Signed

The committers listed above are authorized under a signed CLA.

@coderabbitai

coderabbitai Bot commented Oct 2, 2025

Copy link
Copy Markdown
Contributor
📝 Walkthrough

Walkthrough

Changed inertia initialization for forced non-static URDF links to use builder.default_body_armature as the identity-scaled term; removed an AnyMal unit test; and replaced exact velocity assertions in two examples with a directional check plus per-axis range checks and a lowered initial height threshold.

Changes

Cohort / File(s) Summary of changes
URDF import inertia initialization
newton/_src/utils/import_urdf.py
When forcing mass for a non-static link, the inertia additive term now uses builder.default_body_armature * Identity instead of the prior scalar default_shape_density. No new branches or error handling added.
Removed test
newton/tests/test_anymal_walk.py
Entire unittest file removed (previously ran an AnyMal example for 1000 steps and validated height/velocity).
Examples — directional + per-axis velocity checks
newton/examples/mpm/example_mpm_anymal.py, newton/examples/robot/example_robot_anymal_c_walk.py
Initial ground-clearance predicate loosened from q[2] > 0.2 to q[2] > 0.1; added an early directional-state check (q[1] > 0.9) and replaced exact/near-equal forward-velocity checks with per-axis forward_vel_min/forward_vel_max and vec_inside_limits (applied after the initial phase).

Sequence Diagram(s)

sequenceDiagram
  participant Sim as Simulation Loop
  participant Check as Example Validations
  Note over Sim,Check #DDEBF7: Per-step validation (examples)
  Sim->>Check: step(sim_time, q, qd, ...)
  alt sim_time <= 1.0
    Check->>Check: verify initial q[2] > 0.1
    Check->>Check: verify directional check q[1] > 0.9
  else sim_time > 1.0
    Check->>Check: build forward_vel_min / forward_vel_max
    Check->>Check: vec_inside_limits(qd, forward_vel_min, forward_vel_max)
  end
  Note over Sim,Check #F7F0F0: Pass/fail reported
Loading
sequenceDiagram
  participant Import as URDF Import
  participant Builder as ModelBuilder
  Note over Import,Builder #EFF8F0: Inertia initialization when forcing mass
  Import->>Builder: request default inertia scale
  Builder-->>Import: builder.default_body_armature
  Import->>Import: I_m += builder.default_body_armature * Identity
  Note right of Import #F7F7F7: replaces prior scalar `default_shape_density` usage
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Suggested reviewers

  • eric-heiden
  • mmacklin

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ 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 succinctly identifies the primary change of using default_body_armature for nonstatic link inertia in the URDF parser, matching the main code modification and intent. It is clear, specific, and avoids unnecessary detail or vague phrasing.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 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.

eric-heiden
eric-heiden previously approved these changes Oct 2, 2025
@shi-eric

shi-eric commented Oct 2, 2025

Copy link
Copy Markdown
Member

Hi @lenroe-nv, could you follow these instructions to make your newton-physics membership public? That way we won't have to manually approve your workflows to run in the future:

  1. Go to the organization's People page: https://github.com/orgs/newton-physics/people
  2. Find your username in the list.
  3. Click the dropdown next to your name and change your visibility from 'Private' to 'Public'.

@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 @lenroe-nv, this looks good! Can you fix the example test for robot_anymal_c_walk? Make sure to merge main first to get the latest example updates from #836.

@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

📜 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 60970ce and 05271cc.

📒 Files selected for processing (1)
  • newton/tests/test_anymal_walk.py (1 hunks)
🧰 Additional context used
🪛 GitHub Actions: GPU Unit Tests on AWS EC2
newton/tests/test_anymal_walk.py

[error] 52-52: Forward velocity too low: Step 700: Forward velocity 0.33740318 m/s (expected > 0.4) in test_anymal_walk_policy.

⏰ 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 (Pull Request)

Comment thread newton/tests/test_anymal_walk.py Outdated
@lenroe-nv

Copy link
Copy Markdown
Member Author

Had to adjust the example tests to account for the fact that angular velocity of the base is higher now (which is expected due to much smaller (i.e. more realistic) inertia).

@lenroe-nv

Copy link
Copy Markdown
Member Author

I don't understand why test_anymal_walk_policy is failing though, it keeps passing locally for me. Also, the test might be redundant now that we have the example test?

@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

📜 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 05271cc and 66aef2f.

📒 Files selected for processing (3)
  • newton/examples/mpm/example_mpm_anymal.py (1 hunks)
  • newton/examples/robot/example_robot_anymal_c_walk.py (1 hunks)
  • newton/tests/test_anymal_walk.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
newton/examples/robot/example_robot_anymal_c_walk.py (2)
newton/examples/__init__.py (1)
  • test_body_state (38-94)
newton/_src/utils/__init__.py (1)
  • vec_inside_limits (211-218)
newton/examples/mpm/example_mpm_anymal.py (2)
newton/examples/__init__.py (1)
  • test_body_state (38-94)
newton/_src/utils/__init__.py (1)
  • vec_inside_limits (211-218)
🪛 GitHub Actions: GPU Unit Tests on AWS EC2
newton/tests/test_anymal_walk.py

[error] 52-52: AssertionError: Forward velocity too low: Step 900: Forward velocity -0.0435 m/s (expected > 0.3).

🪛 Ruff (0.13.2)
newton/examples/robot/example_robot_anymal_c_walk.py

245-245: Unused lambda argument: q

(ARG005)

newton/examples/mpm/example_mpm_anymal.py

297-297: Unused lambda argument: qd

(ARG005)


306-306: Unused lambda argument: q

(ARG005)

🔇 Additional comments (3)
newton/examples/robot/example_robot_anymal_c_walk.py (1)

238-247: LGTM: Time-gated range check improves test robustness.

The shift from exact velocity assertions to a time-gated, range-based validation is a sound improvement. The sim_time > 1.0 guard allows the robot to stabilize before checking velocity ranges, and the per-axis limits (forward_vel_min, forward_vel_max) are more appropriate for validating physics simulation than exact equality checks.

The static analysis warning about the unused q parameter in the lambda (line 245) is a false positive—the (q, qd) signature is required by the test_body_state API, even if only qd is used in this particular validation.

newton/examples/mpm/example_mpm_anymal.py (2)

297-297: LGTM: Relaxed position threshold aligns with inertia changes.

Lowering the height threshold from 0.2 to 0.1 meters is appropriate given that the corrected inertia values (using default_body_armature instead of default_shape_density) may result in a slightly lower resting position for the robot. This adjustment ensures the test remains valid without being overly restrictive.

The static analysis warning about the unused qd parameter is a false positive—the (q, qd) lambda signature is required by the test_body_state API contract.


299-308: LGTM: Time-gated velocity validation is consistent and robust.

The addition of time-gated velocity validation (checking only after sim_time > 1.0) aligns with the pattern established in example_robot_anymal_c_walk.py. This approach allows the robot to stabilize before asserting velocity ranges, making the test more resilient to transient startup dynamics. The range-based validation using vec_inside_limits is more appropriate for physics simulation than exact equality checks.

The static analysis warning about the unused q parameter (line 306) is a false positive—the (q, qd) lambda signature is required by the test_body_state API.

Comment thread newton/tests/test_anymal_walk.py Outdated
Comment thread newton/tests/test_anymal_walk.py Outdated
@eric-heiden

Copy link
Copy Markdown
Member

I don't understand why test_anymal_walk_policy is failing though, it keeps passing locally for me. Also, the test might be redundant now that we have the example test?

Can you try maybe to rerun the test job on the CI to see if the test is just flaky?

@lenroe-nv

Copy link
Copy Markdown
Member Author

Yes, seems flaky indeed. It passed at retry. I am going to remove this test then.

@lenroe-nv lenroe-nv requested a review from eric-heiden October 4, 2025 09:53
Comment thread newton/examples/mpm/example_mpm_anymal.py Outdated
Comment thread newton/examples/mpm/example_mpm_anymal.py Outdated
Comment thread newton/examples/robot/example_robot_anymal_c_walk.py Outdated
eric-heiden
eric-heiden previously approved these changes Oct 7, 2025
@codecov

codecov Bot commented Oct 8, 2025

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

@eric-heiden eric-heiden enabled auto-merge (squash) October 8, 2025 00:10
@eric-heiden

Copy link
Copy Markdown
Member

@lenroe-nv The example_mpm_anymal test keeps failing- perhaps the bounds need to be increased again? Does it still look correct when you run it locally?

@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: 0

🧹 Nitpick comments (1)
newton/examples/mpm/example_mpm_anymal.py (1)

297-306: LGTM! Test bounds adjusted per feedback.

The changes directly address the failing test by:

  1. Lowering the ground clearance threshold (0.2 → 0.1m) to accommodate the robot's behavior with corrected inertias
  2. Replacing exact velocity matching with range-based validation using per-axis bounds

These adjustments align with the physics corrections from the URDF parser fix and the maintainer's suggestion to increase bounds.

Optional: Consider refactoring duplicated test logic.

The velocity bounds and test structure in lines 299-306 are nearly identical to newton/examples/robot/example_robot_anymal_c_walk.py lines 238-246. Consider extracting the shared validation logic into a helper function or test fixture in newton/examples/__init__.py to improve maintainability.

Note: The static analysis warnings about unused lambda arguments are false positives—the lambda signatures must match the expected (q, qd) interface.

📜 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 52109a8 and 4166e7b.

📒 Files selected for processing (2)
  • newton/examples/mpm/example_mpm_anymal.py (1 hunks)
  • newton/examples/robot/example_robot_anymal_c_walk.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
newton/examples/robot/example_robot_anymal_c_walk.py (2)
newton/examples/__init__.py (1)
  • test_body_state (38-94)
newton/_src/utils/__init__.py (1)
  • vec_inside_limits (211-218)
newton/examples/mpm/example_mpm_anymal.py (2)
newton/examples/__init__.py (1)
  • test_body_state (38-94)
newton/_src/utils/__init__.py (1)
  • vec_inside_limits (211-218)
🪛 Ruff (0.13.3)
newton/examples/robot/example_robot_anymal_c_walk.py

244-244: Unused lambda argument: q

(ARG005)

newton/examples/mpm/example_mpm_anymal.py

297-297: Unused lambda argument: qd

(ARG005)


305-305: Unused lambda argument: q

(ARG005)

⏰ 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). (2)
  • GitHub Check: Run GPU Benchmarks (Pull Request)
  • GitHub Check: Run GPU Unit Tests on AWS EC2 (Pull Request)
🔇 Additional comments (1)
newton/examples/robot/example_robot_anymal_c_walk.py (1)

238-246: LGTM! Range-based validation aligns with physics corrections.

The change from exact velocity matching to per-axis bounds validation is appropriate given the URDF parser fix that produces smaller, more realistic inertias. The bounds accommodate the higher base angular velocity that results from the corrected physics.

Note: The static analysis warning about unused lambda argument q is a false positive—the lambda signature must match the expected (q, qd) interface even though only qd is used for velocity validation.

@lenroe-nv

Copy link
Copy Markdown
Member Author

Yes, there is a diff between my local tests passing and the AWS job failing.

@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: 0

🧹 Nitpick comments (2)
newton/examples/robot/example_robot_anymal_c_walk.py (1)

246-254: Consider tightening angular velocity bounds if feasible.

The angular velocity tolerances (±0.5 to ±0.8 rad/s) are relatively wide. While the PR discussion acknowledges this is necessary after the inertia fix, consider whether these bounds can be tightened in the future as the physics simulation stabilizes.

The per-axis bounds approach using vec_inside_limits is good practice and more robust than exact checks.

Note: The static analysis warnings about unused lambda arguments (q and qd) are false positives—both parameters are required by the test_body_state signature defined in newton/examples/__init__.py.

newton/examples/mpm/example_mpm_anymal.py (1)

306-314: Consider tightening angular velocity bounds and addressing code duplication.

The angular velocity bounds (±0.5 to ±0.8 rad/s) are relatively wide, mirroring the same concern raised in the PR discussion. While necessary after the inertia fix, consider whether these can be tightened as the simulation stabilizes.

There's significant code duplication between this test method and example_robot_anymal_c_walk.py:test(). Both files use similar test patterns with forward_vel_min/max and directional checks. Consider extracting common test logic into a shared helper function in newton/examples/__init__.py to improve maintainability.

Based on the PR discussion, this test has been failing on CI while passing locally. The velocity bounds may need further adjustment to account for environment-specific behavior differences between local and CI environments.

Note: The static analysis warning about the unused q parameter at line 312 is a false positive—both parameters are required by the test_body_state signature.

📜 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 4166e7b and 4bb7091.

📒 Files selected for processing (2)
  • newton/examples/mpm/example_mpm_anymal.py (1 hunks)
  • newton/examples/robot/example_robot_anymal_c_walk.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
newton/examples/robot/example_robot_anymal_c_walk.py (2)
newton/examples/__init__.py (1)
  • test_body_state (38-94)
newton/_src/utils/__init__.py (1)
  • vec_inside_limits (211-218)
newton/examples/mpm/example_mpm_anymal.py (2)
newton/examples/__init__.py (1)
  • test_body_state (38-94)
newton/_src/utils/__init__.py (1)
  • vec_inside_limits (211-218)
🪛 Ruff (0.13.3)
newton/examples/robot/example_robot_anymal_c_walk.py

243-243: Unused lambda argument: qd

(ARG005)


252-252: Unused lambda argument: q

(ARG005)

newton/examples/mpm/example_mpm_anymal.py

297-297: Unused lambda argument: qd

(ARG005)


303-303: Unused lambda argument: qd

(ARG005)


312-312: Unused lambda argument: q

(ARG005)

⏰ 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). (2)
  • GitHub Check: Run GPU Unit Tests on AWS EC2 (Pull Request)
  • GitHub Check: Run GPU Benchmarks (Pull Request)
🔇 Additional comments (3)
newton/examples/robot/example_robot_anymal_c_walk.py (1)

239-244: LGTM: Directional check validates forward progress.

The directional threshold of 9.0 for 500 frames is appropriate for verifying the robot moved forward as expected.

newton/examples/mpm/example_mpm_anymal.py (2)

297-297: LGTM: Relaxed height threshold appropriate for MPM simulation.

The height check threshold of 0.1 is reasonable given the sand interaction and aligns with the same threshold used in example_robot_anymal_c_walk.py.

Note: The static analysis warning about the unused qd parameter is a false positive—both q and qd are required by the test_body_state signature.


299-304: LGTM: Directional check validates forward progress.

The threshold of 0.9 for 100 frames is proportionally consistent with the 9.0 threshold for 500 frames in example_robot_anymal_c_walk.py.

Note: The static analysis warning about the unused qd parameter is a false positive—both parameters are required by the test_body_state signature.

@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: 0

🧹 Nitpick comments (2)
newton/examples/robot/example_robot_anymal_c_walk.py (1)

246-254: Consider prefixing unused lambda argument with underscore.

The lambda at line 252 does not use the q argument. Per Python convention and the static analysis hint, consider prefixing it with _q to indicate it's intentionally unused.

Apply this diff:

-            lambda q, qd: newton.utils.vec_inside_limits(qd, forward_vel_min, forward_vel_max),
+            lambda _q, qd: newton.utils.vec_inside_limits(qd, forward_vel_min, forward_vel_max),

The velocity bounds approach is appropriate given the inertia fix.

newton/examples/mpm/example_mpm_anymal.py (1)

306-314: Consider prefixing unused lambda arguments with underscore.

Per Python convention and static analysis hints, unused lambda arguments should be prefixed with underscore. This applies to:

  • Line 297: qd is unused
  • Line 303: qd is unused
  • Line 312: q is unused

Apply this diff:

-            lambda q, qd: q[2] > 0.1,
+            lambda q, _qd: q[2] > 0.1,
         )
         newton.examples.test_body_state(
             self.model,
             self.state_0,
             "the robot went in the right direction",
-            lambda q, qd: q[1] > 0.9,  # This threshold assumes 100 frames
+            lambda q, _qd: q[1] > 0.9,  # This threshold assumes 100 frames
         )
 
         forward_vel_min = wp.spatial_vector(-0.2, 0.9, -0.2, -0.8, -0.5, -0.5)
         forward_vel_max = wp.spatial_vector(0.2, 1.1, 0.2, 0.8, 0.5, 0.5)
         newton.examples.test_body_state(
             self.model,
             self.state_0,
             "the robot is moving forward and not falling",
-            lambda q, qd: newton.utils.vec_inside_limits(qd, forward_vel_min, forward_vel_max),
+            lambda _q, qd: newton.utils.vec_inside_limits(qd, forward_vel_min, forward_vel_max),

The velocity bounds approach is appropriate. Based on past review comments, the angular velocity tolerances were already discussed and narrowed as needed.

📜 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 4166e7b and 4bb7091.

📒 Files selected for processing (2)
  • newton/examples/mpm/example_mpm_anymal.py (1 hunks)
  • newton/examples/robot/example_robot_anymal_c_walk.py (1 hunks)
🧰 Additional context used
🧬 Code graph analysis (2)
newton/examples/mpm/example_mpm_anymal.py (2)
newton/examples/__init__.py (1)
  • test_body_state (38-94)
newton/_src/utils/__init__.py (1)
  • vec_inside_limits (211-218)
newton/examples/robot/example_robot_anymal_c_walk.py (2)
newton/examples/__init__.py (1)
  • test_body_state (38-94)
newton/_src/utils/__init__.py (1)
  • vec_inside_limits (211-218)
🪛 Ruff (0.13.3)
newton/examples/mpm/example_mpm_anymal.py

297-297: Unused lambda argument: qd

(ARG005)


303-303: Unused lambda argument: qd

(ARG005)


312-312: Unused lambda argument: q

(ARG005)

newton/examples/robot/example_robot_anymal_c_walk.py

243-243: Unused lambda argument: qd

(ARG005)


252-252: Unused lambda argument: q

(ARG005)

⏰ 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). (2)
  • GitHub Check: Run GPU Unit Tests on AWS EC2 (Pull Request)
  • GitHub Check: Run GPU Benchmarks (Pull Request)
🔇 Additional comments (4)
newton/examples/robot/example_robot_anymal_c_walk.py (2)

232-237: LGTM: Ground clearance test updated appropriately.

The lowered threshold (0.1m) is reasonable after the inertia fix and aligns with the similar change in example_mpm_anymal.py.


239-244: Directional threshold calibration verified
The test runs for 500 frames (num-frames in add_example_test), so the q[1] > 9.0 threshold is correctly aligned.

newton/examples/mpm/example_mpm_anymal.py (2)

293-298: LGTM: Ground clearance threshold consistent across examples.

The lowered threshold (0.1m) matches the change in example_robot_anymal_c_walk.py, maintaining consistency across the test suite.


299-304: Directional movement check appropriately scaled.

The threshold of 0.9 for 100 frames appears proportional to the 9.0 threshold for 500 frames in example_robot_anymal_c_walk.py.

@lenroe-nv

Copy link
Copy Markdown
Member Author

The reason for needing to increase velocity bounds partly is that the linear velocity in world space drifts slightly to the left when running for longer, which is I think more of a neural network issue. anymal_c_walk.webm
I added a test for checking that it passed a certain distance in the right direction. The thresholds therefore make assumptions about the number of steps after which the tests are done. Please let me know if this is not desirable.

@eric-heiden

Copy link
Copy Markdown
Member

The reason for needing to increase velocity bounds partly is that the linear velocity in world space drifts slightly to the left when running for longer, which is I think more of a neural network issue. anymal_c_walk.webm I added a test for checking that it passed a certain distance in the right direction. The thresholds therefore make assumptions about the number of steps after which the tests are done. Please let me know if this is not desirable.

I've also noticed this drifting issue, so I think now with these new test bounds it looks good. Thanks @lenroe-nv!

@eric-heiden eric-heiden merged commit f0b6dbf into newton-physics:main Oct 9, 2025
15 checks passed
eric-heiden added a commit to eric-heiden/newton that referenced this pull request Jan 28, 2026
mmacklin pushed a commit to mmacklin/newton that referenced this pull request Apr 7, 2026
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.

3 participants