Add Newton SemiImplicit solver support - #7779
Conversation
There was a problem hiding this comment.
Isaac Lab Review Bot
Adds Newton SolverSemiImplicit support through SemiImplicitSolverCfg and NewtonSemiImplicitManager, including generalized-coordinate synchronization, public exports, documentation, changelog metadata, and focused solver-path coverage. The inline solver-tuning section preceding the existing toctree does not establish a demonstrated documentation failure requiring correction.
- Design and architecture: The manager follows the existing standalone-solver architecture: it constructs the native solver, assigns canonical state through
NewtonManager, reuses shared collision, force, reset, double-buffer, and CUDA graph paths, and confines maximal-to-generalized state reconciliation to its_step_solveroverride. - API: The new configuration and manager are additive public APIs, exported through the package stub and included in generated API documentation. Deterministic-mode validation and collision-pipeline documentation were updated consistently, with no existing public symbols removed or renamed.
- Implementation: Constructor options flow through the existing solver-argument filtering mechanism, while manager flags select the expected double-buffered collision-pipeline behavior. The output state is reconciled with
eval_ikafter each substep so public root and joint consumers see current generalized coordinates; tests trace eager CPU, eager CUDA, CUDA graph, reset, force, and folded-actuator paths. Per-substep IK remains an inherent performance tradeoff to monitor for large articulated scenes, but the patch supplies a concrete correctness rationale and no demonstrated defect.
No blocking issues. No inline issue met the actionable-evidence threshold; the assessment above records the review feedback.
Automated review; human maintainers own approval decisions.
|
| consumes rigid-body force input, and steps with separate input/output | ||
| states, so the flags are fixed. | ||
| """ | ||
| NewtonManager._solver = cls._create_solver(model, solver_cfg) |
There was a problem hiding this comment.
Unsupported actuator modes accepted
Normal Isaac Lab articulations convert actuator gains into joint target modes before model finalization, but _build_solver() accepts these models even though SemiImplicit does not support joint target mode. An articulation using an implicit position or velocity actuator can therefore initialize successfully while its commands are not enforced. Please validate and reject unsupported actuator and model features during solver construction rather than silently accepting them.
Knowledge Base Used: Newton backend
| cls._solver.step(state_0, state_1, control, contacts, substep_dt) | ||
| # SemiImplicit integrates maximal coordinates only. Public root/joint bindings and | ||
| # the next folded actuator iteration read generalized coordinates from this state. | ||
| eval_ik(cls._model, state_1, state_1.joint_q, state_1.joint_qd) |
There was a problem hiding this comment.
Articulated graph coverage missing
The new state reconciliation runs inside every solver substep, including CUDA graph capture, but the CUDA-graph test uses only free rigid bodies with no generalized coordinates. The only articulated-state regression runs on CPU with graphs disabled. Please add an articulated CUDA-graph case that exercises eval_ik; otherwise, capture and replay failures in the new synchronization path can go undetected.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
Description
Expose Newton's
SolverSemiImplicitthrough the normalNewtonCfg(solver_cfg=SemiImplicitSolverCfg())configuration. The newNewtonSemiImplicitManageruses the shared collision, force, reset, double-buffered stepping, and CUDA graph paths, with the native constructor options exposed by its configuration class.SemiImplicit advances body coordinates. The manager synchronizes generalized coordinates after each solver substep so Isaac Lab root/joint observations and the next actuator update see the resulting motion. Documentation describes the native solver's supported features and stability limitations.
This branch starts directly from
developata8b4da3c29ae528b39d4b3c9444d782ce58d886d. It has no dependency on the separate USD importer and model lifecycle PRs and introduces no dependencies.Dependencies and merge order
The four PRs are independent and can merge into
developin any order:#7781 contains the complete hard-reset lifecycle change; it does not require a callback-removal API from #7778.
Type of change
Validation
uv run --no-sync python -m pytest -q source/isaaclab_newton/test/physics/test_newton_manager_abstraction.py -k semi_implicit: 12 passed, 188 unrelated cases deselected, with 3 existing dependency/fixture warnings.uv run --no-sync isaaclab -fandgit diff --checkpassed.These are Kit-less tests binding concrete Isaac Lab asset/data implementations to finalized Newton views. They exercise production public read/write methods. Full USD-bound asset lifecycle coverage remains outside this suite.
Release backport
developChecklist
CONTRIBUTORS.mduv run --no-sync isaaclab -f