Inverse kinematics

Inverse kinematics#

Functional API#

mink_warp.solve_ik(configuration: ~mink_warp.configuration.Configuration, tasks: ~collections.abc.Sequence[~mink_warp.tasks.task.Task], dt: float, damping: float | None = None, *, solver: ~mink_warp.solvers.base.Solver | None = None, limits: ~collections.abc.Sequence[~mink_warp.limits.limit.Limit] | None = <object object>) array[source]#

Compute joint velocity tangent to the current configuration.

Differential IK minimizes a stacked task objective. Unconstrained (DLSSolver) solves the normal equations

\[(H + \lambda I)\, v = -c, \qquad v = \frac{\Delta q}{\mathrm{d}t}\]

where \(H, c\) come from compute_residual() and \(\lambda\) is Tikhonov damping in \([\mathrm{cost}]^2 / [\mathrm{tangent}]\).

With hard limits, ConstrainedSolver solves (per world):

\[\begin{split}\begin{aligned} \min_{\Delta q}\ & \tfrac{1}{2} \Delta q^\top H \Delta q + c^\top \Delta q \\ \text{s.t.}\ & \ell \leq \Delta q \leq u \quad \text{(box limits)} \\ & G \Delta q \leq h \quad \text{(general inequalities)} \end{aligned}\end{split}\]
Parameters:
  • configuration – Batched configuration; FK must be current.

  • tasks – Soft objectives to satisfy at weighted best.

  • dt – Integration timestep \(\mathrm{d}t\) in [s].

  • damping – Tikhonov weight \(\lambda\) on \(H\) (solver default when None).

  • solver – Backend instance. None auto-builds DLSSolver or ConstrainedSolver from limits.

  • limits – Hard limits (Mink-shaped). None → default ConfigurationLimit; [] → none; omitted → unconstrained.

Returns:

Velocity \(v\) with shape (nworld, nv).

mink_warp.solve_ik_iterations(configuration: Configuration, tasks: Sequence[Task], dt: float, iterations: int = 10, damping: float = 0.01, *, solver: Solver | None = None) array[source]#

Run iterations solve+integrate steps; returns final q.

Solver alias#

mink_warp.IKSolver is an alias for DLSSolver (Mink’s default differential step). See Solvers.