Operational Space Control
Definition
Operational space control (OSC, Khatib’s framework) commands a manipulator directly in the task (end-effector) coordinates rather than at the joint level: the joint-space dynamics are projected through a dynamically-consistent generalized inverse of the task Jacobian to yield a decoupled “task-space” equation of motion, which is then feedback-linearized so the closed loop behaves like a unit mass driven by the commanded task acceleration. For a kinematically redundant arm the residual degrees of freedom span a dynamically-consistent task null space, controlled independently (posture / self-motion) without disturbing the task. In sentis2005control this is built for the free-floating regime (a humanoid / space base with no base actuation), so the task Jacobian is the generalized_jacobian that folds momentum conservation, and are the base-eliminated (Schur-complement) reduced quantities. For our free-flying system the base is fully actuated, so the base appears as a commandable input rather than a passive coupling to be eliminated — the OSC algebra carries over, but the Jacobian is the ordinary (or circumcentroidal) one, not the generalized Jacobian.
Key Equations
Symbols per notation.md.
Task-space (operational-space) dynamics obtained by projecting the reduced joint dynamics through (source eq. 15), with the operational-space (task) inertia and its dynamically-consistent generalized inverse:
\boldsymbol{\Lambda}=\left(\boldsymbol{J}\boldsymbol{M}^{-1}\boldsymbol{J}^{\top}\right)^{-1},\qquad \bar{\boldsymbol{J}}=\boldsymbol{M}^{-1}\boldsymbol{J}^{\top}\boldsymbol{\Lambda}$$ Feedback-linearizing task control torque giving the decoupled response $\ddot{\boldsymbol{x}}=\ddot{\boldsymbol{x}}_{\mathrm{ref}}$ (source eq. 16), and the dynamically-consistent null-space projector that carries the posture/self-motion torque (source eqs. 17, 19): $$\boldsymbol{\tau}_{\mathrm{task}}=\boldsymbol{J}^{\top}\!\left(\boldsymbol{\Lambda}\,\ddot{\boldsymbol{x}}_{\mathrm{ref}}+\boldsymbol{\mu}+\boldsymbol{p}\right), \qquad \boldsymbol{N}=\boldsymbol{E}-\bar{\boldsymbol{J}}\boldsymbol{J}, \qquad \boldsymbol{\tau}=\boldsymbol{\tau}_{\mathrm{task}}+\boldsymbol{N}^{\top}\boldsymbol{\tau}_{\mathrm{posture}}$$ > Notation flags: (i) the source writes the (reduced) inertia as $A$ and joint torques as $\Gamma$ — here mapped to [notation.md](../notation.md)'s $\boldsymbol{M}$ and $\boldsymbol{\tau}$. (ii) $\boldsymbol{\Lambda}$ is notation.md's registered task inertia $(\boldsymbol{J}\boldsymbol{M}^{-1}\boldsymbol{J}^{\top})^{-1}$, **not** the discrete-helix set $\boldsymbol\Lambda=\{\boldsymbol\lambda_i\}$ that shares the glyph — disambiguate by context. (iii) The load-bearing $\boldsymbol{\Gamma}$ in notation.md is the circumcentroidal coordinate transform and is **not** reused here for torque. $\boldsymbol{\mu},\boldsymbol{p}$ (task Coriolis/centrifugal and gravity) are local to this page and absent from notation.md. ## Source Support - [sentis2005control](../sources/sentis2005control.md) — primary: derives OSC for the **free-floating** humanoid/space base, using the generalized Jacobian as the task Jacobian and the Schur-complement reduced inertia; gives the task inertia $\boldsymbol\Lambda$, dynamically-consistent inverse $\bar{\boldsymbol J}$, decoupling control torque, and the null-space (posture) projection, then extends them to prioritized multi-task control under task singularity. ## Related Topics - [operational_space_formulation](operational_space_formulation.md) — the kinematic/dynamic substrate this control law sits on; OSC is the closed-loop controller built from that formulation. - [dynamically_consistent_inverse](dynamically_consistent_inverse.md) — $\bar{\boldsymbol J}=\boldsymbol M^{-1}\boldsymbol J^{\top}\boldsymbol\Lambda$ is the specific generalized inverse OSC uses so the null-space torque produces no task acceleration. - [null_space_control](null_space_control.md) — the $\boldsymbol N^{\top}\boldsymbol\tau_{\mathrm{posture}}$ term: posture/self-motion control of the redundant DOF, the redundancy this page tags. - [task_priority_control](task_priority_control.md) — the source's extension of OSC to a strict priority stack ($\boldsymbol\Lambda_{k|prev(k)}$ etc.); OSC is the single-task base case. - [cartesian_impedance_control](cartesian_impedance_control.md) — a sibling task-space law: OSC inverts the task inertia to *cancel* it, impedance control instead *shapes* an apparent inertia/stiffness/damping. - [generalized_jacobian](generalized_jacobian.md) — the task Jacobian $\boldsymbol J$ the source plugs into OSC for the free-floating regime (momentum-folded); our free-flying system would use the ordinary or circumcentroidal Jacobian instead. ## Open Questions - The source builds OSC on the **free-floating** base (no base actuation, generalized Jacobian, momentum conservation). With a fully-actuated 6-DOF base, the base is an input, not a constraint to eliminate — does the dynamic-decoupling argument still hold when the task Jacobian is the ordinary/circumcentroidal Jacobian rather than $\boldsymbol J_g$, and how is the base wrench shared between task and posture? - OSC inverts $\boldsymbol\Lambda=(\boldsymbol J\boldsymbol M^{-1}\boldsymbol J^{\top})^{-1}$, which blows up at task singularities; the source addresses this with robust/prioritized controllers. How does this interact with our circumcentroidal singularity treatment (Tikhonov-damped $\boldsymbol\Gamma^\oplus$, threshold cascade) rather than the operational-space-inertia route? - The humanoid case carries gravity ($\boldsymbol p\neq 0$); on orbit $\boldsymbol p=0$. Does dropping the gravity term change the posture-control conditioning or only simplify the feedforward?