Skip to content

Support Mink 1.4 - #35

Merged
kou merged 1 commit into
enactic:mainfrom
kou:support-mink-1.4
Nov 4, 2026
Merged

kou merged 1 commit into
enactic:mainfrom
kou:support-mink-1.4

Conversation

@kou

@kou kou commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

Mink 1.4.0 removed the private Task._assemble_qp
(kevinzakka/mink#189), which BoundedFrameTask and
NullspacePostureTask used in their compute_qp_objective() overrides.

Since Mink 1.2.0, solve_ik() builds the objective from compute_qp_residual() and doesn't call compute_qp_objective() for tasks that provide a residual. Both tasks already implement compute_qp_residual(), so drop the compute_qp_objective() overrides. Since Mink 1.4.0, Task.compute_qp_objective() is derived from compute_qp_residual().

Tests now compare residuals instead of objectives. They build the expected error with the same _error_and_jacobian() path as the implementation, because Mink 1.4.0's native compute_error() and _error_and_jacobian() can differ in the last few bits.

Also add Mink 1.3.0 to the CI matrix.

Mink 1.4.0 removed the private Task._assemble_qp
(kevinzakka/mink#189), which BoundedFrameTask and
NullspacePostureTask used in their compute_qp_objective() overrides.

Since Mink 1.2.0, solve_ik() builds the objective from
compute_qp_residual() and doesn't call compute_qp_objective() for
tasks that provide a residual. Both tasks already implement
compute_qp_residual(), so drop the compute_qp_objective() overrides.
Since Mink 1.4.0, Task.compute_qp_objective() is derived from
compute_qp_residual().

Tests now compare residuals instead of objectives. They build the
expected error with the same _error_and_jacobian() path as the
implementation, because Mink 1.4.0's native compute_error() and
_error_and_jacobian() can differ in the last few bits.

Also add Mink 1.3.0 to the CI matrix.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings November 4, 2026 05:07

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Changes recommended

Removing the override causes direct compute_qp_objective() calls on supported Mink versions to bypass position and orientation limits, requiring a compatibility override and bounded-objective regression coverage.

1 open issue
What changed in this PR

Updates the QP task wrappers for Mink 1.4, which removed the private _assemble_qp helper.

  • Removes objective overrides and unused identity-matrix caches from both task wrappers.
  • Updates tests to compare residuals and use Mink’s combined error/Jacobian path.
  • Adds Mink 1.3.0 to the CI matrix alongside 1.2.0 and the latest release.
File Description
tests/​test_qp_tasks.py Replaces private objective assembly with residual-based checks.
src/​openarm_control/​qp/​nullspace_posture_task.py Removes the objective override and identity cache.
src/​openarm_control/​qp/​bounded_frame_task.py Removes the objective override and identity cache.
.github/​workflows/​test.yaml Adds Mink 1.3.0 compatibility testing.

Review effort: Balanced

@@ -199,21 +198,3 @@ def _bounded_terms(
error[:3] - full_error[:3]
)
return error, jacobian
@kou
kou merged commit 3b262c7 into enactic:main Nov 4, 2026
7 checks passed
@kou
kou deleted the support-mink-1.4 branch November 4, 2026 06:04
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.

2 participants