IK_QP - Numerical IK with Quadratic Programming

class roboticstoolbox.robot.IK.IK_QP(name='IK Solver', ilimit=30, slimit=100, tol=1e-06, mask=None, joint_limits=True, seed=None, kj=0.01, ks=1.0, kq=0.0, km=0.0, ps=0.0, pi=0.3, **kwargs)[source]

Bases: IKSolver

Quadratic Progamming Numerical Inverse Kinematics Solver

A class which provides functionality to perform numerical inverse kinematics (IK) using a quadratic progamming approach. See step method for mathematical description.

  • name (str) – The name of the IK algorithm

  • ilimit (int) – How many iterations are allowed within a search before a new search is started

  • slimit (int) – How many searches are allowed before being deemed unsuccessful

  • tol (float) – Maximum allowed residual error E

  • mask (Union[ndarray, List[float], Tuple[float], Set[float], None]) – A 6 vector which assigns weights to Cartesian degrees-of-freedom error priority

  • joint_limits (bool) – Reject solutions with joint limit violations

  • seed (Optional[int]) – A seed for the private RNG used to generate random joint coordinate vectors

  • kj – A gain for joint velocity norm minimisation

  • ks – A gain which adjusts the cost of slack (intentional error)

  • kq (float) – The gain for joint limit avoidance. Setting to 0.0 will remove this completely from the solution

  • km (float) – The gain for maximisation. Setting to 0.0 will remove this completely from the solution

  • ps (float) – The minimum angle/distance (in radians or metres) in which the joint is allowed to approach to its limit

  • pi (Union[ndarray, float]) – The influence angle/distance (in radians or metres) in null space motion becomes active


ImportError – If the package qpsolvers is not installed


The following example gets the ets of a panda robot object, instantiates the IK_QP solver class using default parameters, makes a goal pose Tep, and then solves for the joint coordinates which result in the pose Tep using the solve method.

Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'solver' is not defined


When using the this method, the initial joint coordinates \(q_0\), should correspond to a non-singular manipulator pose, since it uses the manipulator Jacobian. When the the problem is solvable, it converges very quickly.


  • J. Haviland, and P. Corke. “Manipulator Differential Kinematics Part II: Acceleration and Advanced Applications.” arXiv preprint arXiv:2207.01794 (2022).

See also


An abstract super class for numerical IK solvers


Implements IKSolver class using the Newton-Raphson method


Implements IKSolver class using the Gauss-Newton method


Implements IKSolver class using the Levemberg-Marquadt method

Changed in version 1.0.3: Added the Quadratic Programming IK solver class


step(ets, Tep, q)

Performs a single iteration of the Gauss-Newton optimisation method

solve(ets, Tep[, q0])

Solves the IK problem

error(Te, Tep)

Calculates the error between Te and Tep

Private Methods

_random_q(ets[, i])

Generate a random valid joint configuration using a private RNG

_check_jl(ets, q)

Checks if the joints are within their respective limits