Fix mesh geom transform issues, remove +Y up axis handling logic in MuJoCoSolver #326#376
Conversation
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
|
Caution Review failedThe pull request is closed. 📝 Walkthrough""" WalkthroughThe changes remove all conditional logic and code paths related to handling different up-axis conventions (specifically Changes
Assessment against linked issues
Assessment against linked issues: Out-of-scope changesNo out-of-scope changes found. 📜 Recent review detailsConfiguration used: .coderabbit.yml 📒 Files selected for processing (3)
✨ Finishing Touches
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Actionable comments posted: 2
🔭 Outside diff range comments (3)
newton/solvers/mujoco/solver_mujoco.py (3)
521-524: Critical: Remove remaining up-axis == 1 handling.This kernel still contains conditional logic for Y-up axis, which should be removed according to the PR objective.
- if up_axis == 1: - body_ipos[worldid, mjc_idx] = wp.vec3f(body_com[tid][0], -body_com[tid][2], body_com[tid][1]) - else: - body_ipos[worldid, mjc_idx] = body_com[tid] + body_ipos[worldid, mjc_idx] = body_com[tid]
742-750: Critical: Remove remaining up-axis == 1 handling in geom properties.This section still contains Y-up axis conversion logic that should be removed.
- if up_axis == 1: - # MuJoCo uses Z-up, Newton Y-up requires conversion - # for static geoms, position conversion is handled by perm_position flag in add_geoms - if body_idx == -1: - pos = wp.vec3f(pos[0], -pos[2], pos[1]) - rot_y2z = wp.quat_from_axis_angle(wp.vec3(1.0, 0.0, 0.0), -wp.pi * 0.5) - quat = rot_y2z * quatAlso remove the now-obsolete comment about perm_position flag since that parameter was removed.
494-499: Remove all residual +Y up-axis branches in solver_mujoco.pyThe following instances still reference
up_axisand must be removed or refactored to fully drop +Y up‐axis support:• Line 494:
if up_axis == 1:inconvert_body_xforms_to_warp_kernel
• Line 521:if up_axis == 1:inupdate_body_mass_ipos_kernel
• Line 573:# if up_axis == 1:(commented) inupdate_geom_properties_kernel— remove dead code
• Line 737:if up_axis == 2 and body_idx == -1:— verify necessity or remove
• Line 742:if up_axis == 1:inupdate_geom_properties_kernelPlease eliminate these conditionals so that all +Y up-axis handling is consistently removed.
🧹 Nitpick comments (1)
newton/solvers/mujoco/solver_mujoco.py (1)
85-113: LGTM! Simplified coordinate conversion by removing axis swapping.The removal of conditional axis swapping for positions and velocities is consistent with the PR objective of removing +Y up axis handling.
Note: The
up_axisparameter on line 66 is no longer used in theJOINT_FREEcase after these changes. Consider removing it or documenting why it's retained for other joint types.
📜 Review details
Configuration used: .coderabbit.yml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
newton/solvers/mujoco/solver_mujoco.py(12 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
newton/solvers/mujoco/solver_mujoco.py (1)
newton/sim/builder.py (1)
add_body(685-746)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: run-newton-tests / newton-unittests (windows-latest)
- GitHub Check: run-newton-tests / newton-unittests (ubuntu-latest)
- GitHub Check: run-asv-benchmarks
🔇 Additional comments (4)
newton/solvers/mujoco/solver_mujoco.py (4)
163-185: LGTM! Consistent removal of axis transformations.The direct assignment of positions, quaternions, and velocities without conditional transformations aligns with the PR objective.
1211-1211: LGTM! Simplified gravity assignment.Direct assignment of gravity without coordinate conversion is correct for removing up-axis handling.
1407-1498: Breaking change: Removed position permutation parameter.The removal of
perm_positionparameter fromadd_geomsis a breaking change that affects how static geometry positions are handled. Ensure this change is documented in the migration guide mentioned in the PR description.
1299-1300: No action required: the –90° rotation is intentional and consistent.The switch from +π/2 to –π/2 around the X-axis now matches all other
rot_y2zuses (up_axis handling, static‐shape alignment, and default cases) and aligns correctly with the accompanying position swaps.
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
…on-physics#365 Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>
|
@eric-heiden I guess this needs a mention here: #378 |
…nes-cylinders-planes Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>
…nes-cylinders-planes
Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
There was a problem hiding this comment.
Actionable comments posted: 0
♻️ Duplicate comments (1)
newton/solvers/mujoco/solver_mujoco.py (1)
729-733: Good extension of rotation correction to planes.Adding planes to the shape types requiring rotation correction is logical and consistent with the axis standardization effort.
🧹 Nitpick comments (1)
newton/solvers/mujoco/solver_mujoco.py (1)
737-745: Remove debug print statement.The debug print statement will spam the output and impact performance. Consider removing it or making it conditional on a debug flag.
- wp.printf( - "pos before: %.3f %.3f %.3f after: %.3f %.3f %.3f\n", - geom_pos[worldid, geom_idx][0], - geom_pos[worldid, geom_idx][1], - geom_pos[worldid, geom_idx][2], - pos[0], - pos[1], - pos[2], - )
📜 Review details
Configuration used: .coderabbit.yml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
newton/solvers/mujoco/solver_mujoco.py(14 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: run-newton-tests / newton-unittests (ubuntu-latest)
- GitHub Check: run-newton-tests / newton-unittests (windows-latest)
- GitHub Check: pull-request-docs
- GitHub Check: run-asv-benchmarks
🔇 Additional comments (14)
newton/solvers/mujoco/solver_mujoco.py (14)
85-86: Good simplification of coordinate conversion.The removal of conditional up-axis handling streamlines the coordinate conversion logic. This assumes a standardized axis convention across the system.
111-113: Consistent velocity conversion simplification.The direct assignment of linear velocity components aligns with the position conversion changes and removes the Y-up axis special case.
163-164: Consistent reverse coordinate conversion.The position conversion logic correctly mirrors the forward conversion changes.
173-176: Streamlined quaternion conversion.The direct quaternion component assignment removes the conditional axis correction and maintains the wxyz order conversion.
183-185: Completes velocity conversion simplification.The linear velocity conversion is now consistent with the forward conversion and removes the Y-up axis special case.
1202-1208: Improved function naming and symmetry.The renaming to
quat_to_mjcand addition ofquat_from_mjcprovides better naming consistency and bidirectional conversion symmetry.
1212-1212: Direct gravity assignment removes up-axis complexity.The direct assignment of the gravity vector from the model is consistent with removing the up-axis handling logic.
1410-1410: Good simplification of function signature.Removing the
perm_positionparameter simplifies the function and is consistent with removing the up-axis handling logic.
1426-1427: Streamlined transform assignment.The direct transform assignment removes the conditional position permutation logic and is consistent with the axis standardization.
1447-1448: Consistent transform handling.The transform assignment logic is now consistent throughout the function without conditional axis handling.
1506-1524: Simplified body creation logic.The removal of conditional axis handling in body creation streamlines the code and maintains consistency with the overall axis standardization effort.
1699-1713: Improved approach for shape transform corrections.Computing the corrective transforms after model compilation is more robust than predicting them beforehand. This ensures accurate transform corrections based on MuJoCo's actual internal transforms.
1-2007: Well-executed refactoring removing up-axis complexity.The changes consistently remove conditional up-axis handling throughout the MuJoCo solver, resulting in cleaner and more maintainable code. The standardization on a single axis convention eliminates the need for coordinate permutations and conditional quaternion rotations.
Key improvements:
- Simplified coordinate conversion kernels
- Streamlined transform handling
- Consistent quaternion conversion
- Robust post-compilation transform corrections
The refactoring aligns well with the PR objective of removing +Y up axis handling logic.
1299-1300: Rotation direction change requires manual verificationThe sign of the 90° rotation about the X-axis was flipped (now –π/2 instead of +π/2) in newton/solvers/mujoco/solver_mujoco.py (lines 1299–1300). We couldn’t locate any other uses of this quaternion to confirm the intended axis convention.
Please manually verify that rotating by –90° around X correctly maps the Y axis to Z under the new convention:
- Check the
convert_to_mjccoordinate‐system mapping logic for Y→Z conversion.- Add or run a simple unit test: apply
rot_y2zto wp.vec3(0,1,0) and ensure the result is (0,0,1).- Visually inspect a representative Mujoco model (e.g., a capsule) to confirm correct alignment.
…rs-planes' of github.com:vreutskyy/newton into mujoco-up-axis Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
There was a problem hiding this comment.
Actionable comments posted: 0
🧹 Nitpick comments (1)
newton/solvers/mujoco/solver_mujoco.py (1)
66-66: Consider removing unused up_axis parameters.The
up_axisparameter is still passed to several kernels but is no longer used in the logic. Consider removing these unused parameters to clean up the API.@wp.kernel def convert_mj_coords_to_warp_kernel( qpos: wp.array2d(dtype=wp.float32), qvel: wp.array2d(dtype=wp.float32), joints_per_env: int, - up_axis: int, joint_type: wp.array(dtype=wp.int32), # ... rest of parameters ):Apply similar changes to other kernels that no longer use the
up_axisparameter.Also applies to: 144-144, 234-234, 498-498, 528-528
📜 Review details
Configuration used: .coderabbit.yml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (12)
newton/geometry/kernels.py(9 hunks)newton/sim/builder.py(8 hunks)newton/solvers/mujoco/solver_mujoco.py(12 hunks)newton/tests/test_collision.py(1 hunks)newton/tests/test_import_urdf.py(1 hunks)newton/tests/test_mujoco_solver.py(0 hunks)newton/tests/test_rigid_contact.py(1 hunks)newton/tests/test_up_axis.py(1 hunks)newton/utils/import_mjcf.py(2 hunks)newton/utils/import_urdf.py(2 hunks)newton/utils/import_usd.py(2 hunks)newton/utils/render.py(2 hunks)
💤 Files with no reviewable changes (1)
- newton/tests/test_mujoco_solver.py
✅ Files skipped from review due to trivial changes (1)
- newton/tests/test_up_axis.py
🧰 Additional context used
🧬 Code Graph Analysis (4)
newton/tests/test_collision.py (1)
newton/tests/unittest_utils.py (1)
assert_np_equal(240-246)
newton/tests/test_rigid_contact.py (1)
newton/core/types.py (1)
Axis(64-121)
newton/utils/import_usd.py (3)
newton/sim/builder.py (2)
add_shape_capsule(1925-1970)add_shape_cone(2019-2064)newton/core/types.py (1)
Axis(64-121)newton/core/spatial.py (1)
quat_between_axes(237-257)
newton/solvers/mujoco/solver_mujoco.py (1)
newton/sim/builder.py (1)
add_body(685-746)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: run-asv-benchmarks
- GitHub Check: run-newton-tests / newton-unittests (ubuntu-latest)
- GitHub Check: run-newton-tests / newton-unittests (windows-latest)
🔇 Additional comments (35)
newton/utils/import_urdf.py (1)
161-161: LGTM - Parameter name standardizationThe parameter name changes from
up_axistoaxisalign with the broader standardization effort across the codebase for shape orientation parameters. The functionality remains unchanged.Also applies to: 172-172
newton/tests/test_rigid_contact.py (1)
118-118: LGTM - Parameter name updateThe parameter name change from
up_axistoaxisis consistent with the API standardization across the codebase. The test logic remains unchanged.newton/tests/test_collision.py (1)
784-786: LGTM - Added tolerance for numerical precisionThe addition of
tol=1e-6to theassert_np_equalcalls appropriately handles small numerical differences that may result from the coordinate system convention changes (Y-up to Z-up). The tolerance is appropriately small to maintain test accuracy while accounting for floating-point precision differences.newton/utils/import_mjcf.py (1)
379-379: LGTM - Parameter name standardizationThe parameter name changes from
up_axistoaxisfor both cylinder and capsule geometries align with the codebase-wide standardization effort. The functionality remains unchanged.Also applies to: 388-388
newton/tests/test_import_urdf.py (1)
198-198: LGTM - Updated expected rotation for new axis conventionsThe change from a 90-degree rotation around the X-axis (
[0.7071068, 0.0, 0.0, 0.7071068]) to the identity quaternion ([0.0, 0.0, 0.0, 1.0]) correctly reflects the new Z-up coordinate system conventions. This eliminates the special-case rotation that was previously needed for Y-up axis handling.newton/utils/import_usd.py (2)
870-870: LGTM: Parameter renaming is consistent with the broader refactoring.The parameter renaming from
up_axistoaxisin the shape creation methods aligns with the standardization shown in the relevant code snippets fromnewton/sim/builder.py. This change maintains consistency across the codebase.Also applies to: 877-877, 883-883, 890-890
918-922: LGTM: Plane axis convention updated correctly.The plane handling logic correctly implements the switch from +Y to +Z axis convention. The comment clarifies that "Warp uses +Z convention for planes" and the conditional logic appropriately applies rotation when the axis is not Z, using the
quat_between_axesfunction to compute the correct transformation.newton/utils/render.py (2)
178-178: LGTM: Ground plane normal correctly updated for Z-up convention.The ground plane normal vector is correctly changed from
(0,1,0)to(0,0,1)to align with the Z-up coordinate system convention. This ensures the plane lies in the XY-plane with normal along +Z.
237-240: LGTM: Shape rotation correction properly implements Z-up alignment.The rotation correction applies a -90 degree rotation around the X-axis for capsule, cylinder, and cone geometries, which correctly aligns these shapes' default axis from +Y to +Z. This is consistent with the coordinate system standardization across the codebase and matches the changes in
newton/sim/builder.pywhere the default axis for these shapes was changed to Z.newton/solvers/mujoco/solver_mujoco.py (9)
85-86: Clean removal of Y-up axis handling in coordinate conversion.The direct copying of position and velocity components without conditional axis swapping correctly standardizes the coordinate conversion to a single axis convention.
Also applies to: 111-113
163-164: Consistent coordinate conversion simplification.The reverse conversion kernel correctly mirrors the simplification in the forward conversion, maintaining consistency in the coordinate transformation pipeline.
Also applies to: 173-176, 183-185
1169-1175: Simplified quaternion conversion functions.The renamed and simplified quaternion conversion functions correctly remove axis-dependent quaternion rotations, providing straightforward wxyz ↔ xyzw conversion.
1179-1179: Direct gravity assignment simplification.Setting gravity directly from
model.gravitywithout conditional axis permutation correctly standardizes the gravity handling.
1374-1413: Improved transform handling in geometry addition.The refactored
add_geomsfunction with theincoming_xformparameter provides a cleaner approach to handling transforms. The direct application of transforms removes the need for conditional axis handling.
1465-1473: Streamlined body and joint transform handling.The direct usage of joint parent transforms and conditional application of incoming transforms correctly removes axis-specific handling while maintaining proper transform composition.
1477-1482: Clean body name uniqueness handling.The refactored unique name generation logic is cleaner and more maintainable than the previous approach.
1487-1490: Direct body creation without axis permutation.The direct usage of transform components and COM values correctly removes conditional axis handling in body creation.
1658-1672: Improved post-compilation transform correction approach.Computing corrective transforms after model compilation rather than applying corrections during construction is a cleaner architectural approach. This should provide more accurate transform handling.
newton/sim/builder.py (7)
780-816: LGTM: Plane equation and orientation correctly updated to Z-up conventionThe changes properly implement the coordinate system shift:
- Default plane equation changed from Y-up
(0,1,0,0)to Z-up(0,0,1,0)- Documentation updated to reflect XY plane at Z=0 instead of XZ plane at Y=0
- Quaternion rotation correctly uses +Z axis as reference instead of +Y
931-958: LGTM: Capsule orientation updated to Z-up conventionThe changes properly implement the coordinate system shift:
- Parameter renamed from
up_axistoaxisfor clarity- Default axis changed from
Axis.YtoAxis.Z- Documentation updated to reflect Z-axis alignment
- Internal rotation logic correctly uses Z-axis as reference
978-1005: LGTM: Cylinder orientation updated to Z-up conventionThe changes are consistent with the capsule method and properly implement the coordinate system shift:
- Parameter renamed from
up_axistoaxisfor clarity- Default axis changed from
Axis.YtoAxis.Z- Documentation updated to reflect Z-axis alignment
- Internal rotation logic correctly uses Z-axis as reference
1025-1052: LGTM: Cone orientation updated to Z-up conventionThe changes maintain consistency with the capsule and cylinder methods:
- Parameter renamed from
up_axistoaxisfor clarity- Default axis changed from
Axis.YtoAxis.Z- Documentation updated to reflect Z-axis alignment for base to apex direction
- Internal rotation logic correctly uses Z-axis as reference
845-851: Ground plane implementation is consistent with Z-up conventionThe
add_ground_planemethod correctly usesself.up_vectorwhich is computed fromself.up_axis(defaulting toAxis.Z). This ensures the ground plane is properly oriented according to the new coordinate system convention.
254-406: Coordinate system convention changes are well-implementedThe constructor properly initializes with
up_axis: AxisType = Axis.Zandgravity: float = -9.81, which is consistent with the new Z-up convention. Theup_vectorproperty correctly computes the 3D vector from the axis setting.These changes align well with the broader coordinate system standardization effort described in the PR objectives.
931-1052: Ignore changes toup_axisin import utilities and testsThe
up_axisparameter in utilities, importers, examples, and tests refers to the scene’s up‐axis (Y vs Z) and is intentionally distinct from shape‐orientation’saxisparameter in the builder methods. All found references toup_axisare correct and should remain unchanged.Likely an incorrect or invalid review comment.
newton/geometry/kernels.py (10)
237-256: LGTM! Capsule orientation correctly updated to Z-axis.The capsule SDF and gradient functions have been properly updated to use the Z-axis (index 2) for height calculations instead of the Y-axis (index 1), consistent with the Z-up convention.
259-272: LGTM! Cylinder orientation correctly updated to Z-axis.The cylinder SDF and gradient functions properly compute radial distance in the XY plane and height along the Z-axis, consistent with the new coordinate convention.
275-288: LGTM! Cone orientation correctly updated to Z-axis.The cone SDF and gradient functions have been properly updated to orient the cone along the Z-axis with radius variation in the XY plane.
291-297: Plane SDF correctly updated for XY plane orientation.The function now properly computes the SDF for a plane in the XY plane with Z as the normal direction. The existing comment "SDF for a quad in the xy plane" is now accurate with this change.
300-311: LGTM! Plane projection correctly updated to XY plane.The function now properly projects points onto the XY plane (Z=0) with appropriate clamping of X and Y coordinates based on width and length parameters.
381-392: LGTM! Plane edge generation correctly updated for XY plane.The function now properly generates edges for a plane in the XY plane with all Z-coordinates set to 0.
747-747: Plane normals consistently updated throughout collision detection.All plane normal vectors have been correctly changed from (0,1,0) to (0,0,1), maintaining consistency with the XY plane orientation where Z is the normal direction.
Also applies to: 1206-1206, 1265-1265, 1303-1303, 1398-1398, 1419-1419, 1510-1510
1390-1391: LGTM! Capsule collision points correctly updated to Z-axis orientation.The capsule endpoint calculations in collision detection have been properly updated to use the Z-axis for height offsets, maintaining consistency with the new capsule orientation.
Also applies to: 1415-1417
1507-1511: LGTM! Plane boundary checks correctly updated for XY orientation.The boundary verification now properly checks X and Y coordinates against plane width and length, consistent with the XY plane orientation.
237-1511: Action required: Update Y-up references to Z-up across dependent codeThe Z-up conversion is correctly implemented in newton/geometry/kernels.py, but the following areas still assume Y-up and must be updated:
• Utility modules
- newton/utils/render.py (up_axis handling,
y_axis = wp.vec3(0.0, 1.0, 0.0))- newton/utils/import_usd.py, import_mjcf.py, isaaclab.py (builder.up_axis assignments)
• Simulation builder
- newton/sim/model.py (
self.up_axis = 2)- newton/sim/builder.py (propagating up_axis)
• Quaternion/spatial helpers
- newton/utils/init.py (
wp.quat_rotatewith Y axis)- newton/sim/articulation.py (multiple
wp.quat_rotate(q, wp.vec3(0.0, 1.0, 0.0)))- newton/core/spatial.py, solvers/featherstone/kernels.py, solvers/euler/kernels.py
• Tests (all up_axis and vec3 Y-up patterns)
- test_up_axis.py, test_mujoco_solver.py, test_import_urdf.py, test_collision.py, test_joint_controllers.py, test_joint_drive.py, test_implicit_mpm.py, test_import_mjcf.py, test_cloth.py, test_body_force.py, test_kinematics.py, test_model.py, test_gjk.py
• Examples under newton/examples/ (up_axis="Y",
wp.vec3(0.0, 1.0, 0.0))Next steps:
- Replace all
wp.vec3(0.0, 1.0, 0.0)Y-up vectors withwp.vec3(0.0, 0.0, 1.0)Z-up equivalents.- Update builder default up_axis values and all
ModelBuilder(up_axis=…)calls in tests and examples.- Adjust tests to expect Z-up behavior.
- Expand the migration guide to list these files and codemod steps.
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
adenzler-nvidia
left a comment
There was a problem hiding this comment.
Looks good. Impossible to tell whether we caught everything, but we'll find the bugs as we go.
Very cool to clean up all of this up-axis handling! Thanks!
|
Does this need a warp.sim migration guide update? |
Signed-off-by: Eric Heiden <eric-heiden@outlook.com>
…uJoCoSolver newton-physics#326 (newton-physics#376) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com>
…uJoCoSolver newton-physics#326 (newton-physics#376) Signed-off-by: Eric Heiden <eric-heiden@outlook.com> Signed-off-by: Viktor Reutskyy <vreutskyy@nvidia.com> Co-authored-by: Viktor Reutskyy <vreutskyy@nvidia.com>
Description
Computes transform corrections for shapes in the MuJoCoSolver which account for the joint child transform and the mesh transformation MuJoCo does in its compilation step.
This PR is based on #378 (closes #365):
It standardizes the internal representation of primitive shapes (capsules, cones, cylinders, and planes) to use the +Z axis as their primary axis or normal. This change, which closes #365, aligns Newton's conventions with other simulation environments like MuJoCo and simplifies the conversion process between them.
Key changes include:
newton/geometry/kernels.py):newton/sim/builder.py):add_shape_capsule,add_shape_cylinder,add_shape_cone) now apply a rotation to align the user-specifiedaxiswith the internal +Z axis.up_axisparameter has been renamed toaxisfor clarity.add_shape_planehas been updated to correctly handle plane equations and compute robust rotations, including for normals opposite to +Z.newton/utils/render.py):newton/solvers/mujoco/solver_mujoco.py):newton/utils/import_*.py):axisparameter correctly.Newton Migration Guide
Please ensure the migration guide for warp.sim users is up-to-date with the changes made in this MR.
docs/migration.rstis up-to dateBefore your PR is "Ready for review"
pre-commit run -aSummary by CodeRabbit
Summary by CodeRabbit
up_axistoaxisacross shape-related methods and shape additions for clarity and consistency.