Conversation
…controllers-unified-codex
…controllers-unified-codex
…controllers-unified-codex # Conflicts: # pyproject.toml
|
| motion_selection_axes=( | ||
| wp.spatial_vector(*self.cfg.motion_control_axes_task) if self._wrench_control else None | ||
| ), | ||
| wrench_selection_axes=( | ||
| wp.spatial_vector(*self.cfg.contact_wrench_control_axes_task) if self._wrench_control else None | ||
| ), |
There was a problem hiding this comment.
The new pre-inertia motion-axis selection is not compatible with the retained OSC configurations. test_franka_hybrid_variable_kp_impedance, test_franka_taskframe_hybrid, and test_franka_taskframe_hybrid_with_nullspace_centering pass with the original controller but fail with this adapter. These hybrid and task-frame paths therefore produce incorrect tracking or force-control behavior until the Newton mapping or affected configurations are corrected.
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!
There was a problem hiding this comment.
The force-tracking limitation remains; it has not been fixed by the adapter cleanup. Lab is now the default and Newton is explicitly selected with cfg.use_newton=True. The three Newton hybrid cases still execute as strict xfails, with unchanged convergence thresholds and active Lab counterparts. The task-frame convergence metric was also corrected. This keeps the unsupported Newton behavior visible while preserving the default Lab path; the PR description documents the limitation.
|
run-ci |
There was a problem hiding this comment.
Isaac Lab Review Bot
The Newton-backed consolidation introduces three concrete integration regressions: DiffIK action construction calls a lazy string as a class, the UR10 tutorial computes len() on a resolved slice, and OSC no longer supports the existing runtime gravity-compensation toggle used by backend validation.
- Design and architecture: The split between Isaac Lab command/configuration handling and Newton solver execution is coherent, but construction-time backend feature binding changes the mutability contract of OSC configuration. In particular, gravity compensation is now fixed when ports are created even though existing code changes the flag between control phases.
- API: The new
cfg.num_jointsand optionalcompute(out=...)paths are broadly propagated, including compatibility handling for custom four-argument controllers. However, controller factory support is currently broken becausecfg.controller.class_typemay remain a lazy import string and is invoked directly instead of being resolved before construction. - Implementation: Stable Torch/Warp buffers and output ownership are handled consistently, but two concrete paths need correction: derive the tutorial joint count without calling
len()onslice(None), and either rebuild OSC when gravity compensation changes or explicitly enforce construction-time immutability while updating the existing consumer. The DiffIK action must also resolve string-valued controller factories before invocation.
Significant concerns. Posted 3 actionable findings inline.
Automated review; human maintainers own approval decisions.
|
run-ci |
kellyguo11
left a comment
There was a problem hiding this comment.
if the breaking changes are unavoidable, I would recommend keeping the current controller path and marking it as deprecated. we can switch the legacy vs. newton path through a cfg setting, similar to the actuators.
it would also be good to validate that the behavior of the legacy and newton controllers are equivalent.
| * **Breaking:** DiffIK and OSC initialized Newton at construction and required ``cfg.num_joints``. | ||
| Set this field for standalone callers; action terms populated it from resolved joints. Use a separate controller | ||
| when changing the joint count; ``set_joint_pos_limits()`` remained available. | ||
| * **Breaking:** Controller solves used float32 internal buffers. Callers requiring float64 |
There was a problem hiding this comment.
what is the impact of this?
There was a problem hiding this comment.
For local testing, there's no impact atm. The failing tests are all on OSC
| * **Breaking:** Controller solves used float32 internal buffers. Callers requiring float64 | ||
| solver precision must retain the previous implementation; output tensors remain independent snapshots. | ||
|
|
||
| * **Breaking:** OSC adopted Newton's motion selection before inertia decoupling and required at least |
There was a problem hiding this comment.
why do we have this breaking change? does this mean newton OSC will be different in behavior?
There was a problem hiding this comment.
Newton OSC controller does have different behavior. Will confirm with Jeff.
…controllers-unified-codex # Conflicts: # source/isaaclab/test/controllers/test_operational_space.py
|
run-ci |
…controllers-unified-codex
|
run-ci |
Write controller targets in place on both paths so the Newton branch no longer needs special handling in set_command. Drop tests that checked private buffers or the convergence test helper, fold the late-limit check into the existing feature test, and condense the docs and changelog.
Replace the use_newton flag with implementation: Literal["native", "newton"] on the differential IK, joint impedance, and operational-space controller configurations, and shorten the config docstrings to one line. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Description
Added Newton 1.6 model-free differential IK, joint impedance, and OSC through
cfg.use_newton=True; the original Lab controllers remain the default. Consolidates #6693, #7482, and the differential-IK portion of #6654. Ackermann remains in its separate draft.Both paths share constructor, command, and compute signatures and return independent results. Controller selection is independent of the physics backend. Newton initializes from compute inputs, or from supplied DiffIK limits when avoidance is enabled. Existing callers and tutorials retain their setup; SO101 retains its wrist-orientation mask through a Newton-only Jacobian adaptation.
Newton uses float32 computation. Its OSC selects motion before inertia decoupling, requires at least six joints for decoupling, and retains motion-force coupling that fails three hybrid force-tracking cases. Those Newton cases run as strict expected failures; Lab cases remain active, and thresholds are unchanged. Convergence checks now apply masks in the actual control frame.
Newton DiffIK requires joint limits before the first compute when avoidance is enabled; later limit updates retain its buffers. Its
pinvalso rejects fewer controlled joints than active task axes. These differences prevent blanket replacement of the Lab path. Joint impedance retains the same control law, subject to Newton's precision boundary. Includes the position-only SVD and joint-impedance gain-clamping/batched-inertia fixes.Type of change
Release backport
Validation
Checklist
uv run isaaclab -f