Task-priority redundancy resolution is a velocity-level (resolved-motion-rate) inverse-kinematics
scheme for a kinematically redundant manipulator that satisfies several tasks in a strict order of
priority: the lower-priority (secondary / constraint) task is fulfilled only within the null space
of the higher-priority (primary / end-effector) task, so that — out of singularities — the secondary
task never corrupts the primary task. Chiaverini (1997) studies how this scheme degrades near two kinds
of singularity: kinematic singularities of the primary Jacobian JE, and algorithmic
singularities, where the projected secondary Jacobian J~C=JC(E−JE†JE)
loses rank even though JE and JC are individually full-rank. The paper is fixed-base
and terrestrial (a 7-DOF arm); it makes no space-base assumption — neither free-flying nor free-floating.
The Chiaverini task-priority symbols JE (primary / end-effector Jacobian), JC
(secondary / constraint Jacobian), x˙E,x˙C (task velocities) and the
Moore–Penrose pseudoinverse (⋅)† are not in notation.md (they are source-faithful generic
inverse-kinematics symbols); E is the identity per notation.md.
Classic task-priority solution (Nakamura–Hanafusa–Yoshikawa form; Eq. 8) — secondary task projected
through the augmented inverse J~C†:
+ \big(\mathbf{J}_{C}(\boldsymbol E-\mathbf{J}_{E}^{\dagger}\mathbf{J}_{E})\big)^{\dagger}
\big(\dot{\mathbf{x}}_{C}-\mathbf{J}_{C}\mathbf{J}_{E}^{\dagger}\dot{\mathbf{x}}_{E}\big).$$
**Proposed singularity-robust solution** (Eq. 34) — decouples algorithmic singularities from the
inversion by projecting the *separately* solved secondary velocity into the primary null space:
$$\dot{\mathbf{q}} = \mathbf{J}_E^{\dagger}\,\dot{\mathbf{x}}_E
+ \big(\boldsymbol E-\mathbf{J}_E^{\dagger}\mathbf{J}_E\big)\,\mathbf{J}_C^{\dagger}\,\dot{\mathbf{x}}_C.$$
Near an algorithmic singularity ($\tilde{\mathbf{J}}_C$ loses rank — in Chiaverini's SVD analysis this is
a row of the projected matrix going null, driven by the scalar products $\mathbf{v}_{C,i}^{T}\mathbf{v}_j\to0$,
distinct from a singularity of $\mathbf{J}_C$ where $\sigma_{C,i}\to0$) the classic form (8)
*raises* the null-space velocity to track the becoming-infeasible secondary component, whereas (34)
*lowers* it — yielding continuous joint velocities. When a kinematic singularity of $\mathbf{J}_E$ is also
present, either pseudoinverse may be swapped for a damped-least-squares inverse ([damped_least_squares](damped_least_squares.md)).
## Source Support
- [chiaverini1997singularity](../sources/chiaverini1997singularity.md) — primary source: defines the
task-priority strategy, distinguishes kinematic vs algorithmic singularities, derives the
singularity-robust solution (34), and shows in 7-DOF case studies that (34) keeps joint velocities
continuous and the primary task accurate where the classic solution (8) breaks down.
## Related Topics
- [task_priority_redundancy](task_priority_redundancy.md) — the broader strategy this page specializes;
the priority ordering and null-space subordination of secondary tasks.
- [kinematic_redundancy_resolution](kinematic_redundancy_resolution.md) — the parent problem of choosing
one inverse-kinematics solution among infinitely many for a redundant arm.
- [singularity_robust_inverse](singularity_robust_inverse.md) — the robustified Jacobian inverse used to
tame the ill-conditioning that task-priority resolution suffers near singularities.
- [redundancy_resolution](redundancy_resolution.md) — the general activity of exploiting extra DOF; this
page is the task-priority instance of it.
- [damped_least_squares](damped_least_squares.md) — the damping mechanism Chiaverini substitutes for the
pseudoinverse when a kinematic singularity coincides with the priority scheme.
- [algorithmic_singularity](algorithmic_singularity.md) — the rank loss of $\tilde{\mathbf{J}}_C$ that
this technique is specifically designed to survive.
- [null_space_projection](null_space_projection.md) — the projector $\boldsymbol E-\mathbf{J}_E^{\dagger}\mathbf{J}_E$
that enforces the priority by confining the secondary task to the primary null space.
## Open Questions
- The source is fixed-base and terrestrial. For our free-flying base, the relevant Jacobian is the
circumcentroidal $\boldsymbol J_{\nu_e}^{\oplus}$ (or $\boldsymbol\Gamma$); does the algorithmic-vs-kinematic
singularity split, and the (34) robustification, carry over when base actuation couples into the task map?
- Chiaverini's (34) sacrifices secondary-task accuracy for continuity; for our inspection viewpoint /
pointing secondary objectives, is that trade acceptable, or does the primary task itself need re-prioritizing?
- The closed-loop version of (34) (Case B: primary = EE position, secondary = EE orientation) left two
distinct steady-state errors: the *secondary* (orientation) error is due to the algorithmic singularity
and is unavoidable, while the *primary* (position) error is tied to the damping in the null-space-filtering
inverse $\mathbf{J}_E^{*}$. How do these interact with our [steady_state_error_floor](../results/steady_state_error_floor.md) (cruise-lag)?