ETS.ikine_QP
- ETS.ikine_QP(Tep, q0=None, ilimit=30, slimit=100, tol=1e-06, mask=None, joint_limits=True, seed=None, kj=1.0, ks=1.0, kq=0.0, km=0.0, ps=0.0, pi=0.3, **kwargs)[source]
Quadratic programming numerical inverse kinematics solver
- Parameters:
q0 (
Union[ndarray,List[float],Tuple[float,...],None]) – the initial joint coordinate vectorilimit (
int) – maximum iterations allowed per searchslimit (
int) – maximum search attempts before failuretol (
float) – maximum allowed residual error Emask (
Union[ndarray,List[float],Tuple[float,...],None]) – a 6-vector weighting Cartesian DoF error priorityjoint_limits (
bool) – reject solutions with joint limit violationsseed (
int|None) – seed for the RNG used to generate random joint configurationskj – gain for joint velocity norm minimisation
ks – gain adjusting the cost of slack (intentional error)
kq (
float) – gain for joint limit avoidance (0.0 disables)km (
float) – gain for manipulability maximisation (0.0 disables)ps (
float) – minimum joint approach distance to limit (radians or metres)pi (
ndarray|float) – null-space influence distance (radians or metres)
- Returns:
IK solution
- Raises:
ImportError – if the package
qpsolversis not installed
A method that provides functionality to perform numerical inverse kinematics (IK) using a quadratic programming approach.
See the Inverse Kinematics Docs Page for more details and for a tutorial on numerical IK, see here.
Each iteration uses the following approach
\[\vec{q}_{k+1} = \vec{q}_{k} + \dot{\vec{q}}.\]where the QP is defined as
\[\begin{split}\min_x \quad f_o(\vec{x}) &= \frac{1}{2} \vec{x}^\top \mathcal{Q} \vec{x}+ \mathcal{C}^\top \vec{x}, \\ \text{subject to} \quad \mathcal{J} \vec{x} &= \vec{\nu}, \\ \mathcal{A} \vec{x} &\leq \mathcal{B}, \\ \vec{x}^- &\leq \vec{x} \leq \vec{x}^+\end{split}\]with
\[\begin{split}\vec{x} &= \begin{pmatrix} \dvec{q} \\ \vec{\delta} \end{pmatrix} \in \mathbb{R}^{(n+6)} \\ \mathcal{Q} &= \begin{pmatrix} \lambda_q \mat{1}_{n} & \mathbf{0}_{6 \times 6} \\ \mathbf{0}_{n \times n} & \lambda_\delta \mat{1}_{6} \end{pmatrix} \in \mathbb{R}^{(n+6) \times (n+6)} \\ \mathcal{J} &= \begin{pmatrix} \mat{J}(\vec{q}) & \mat{1}_{6} \end{pmatrix} \in \mathbb{R}^{6 \times (n+6)} \\ \mathcal{C} &= \begin{pmatrix} \mat{J}_m \\ \bf{0}_{6 \times 1} \end{pmatrix} \in \mathbb{R}^{(n + 6)} \\ \mathcal{A} &= \begin{pmatrix} \mat{1}_{n \times n + 6} \\ \end{pmatrix} \in \mathbb{R}^{(l + n) \times (n + 6)} \\ \mathcal{B} &= \eta \begin{pmatrix} \frac{\rho_0 - \rho_s} {\rho_i - \rho_s} \\ \vdots \\ \frac{\rho_n - \rho_s} {\rho_i - \rho_s} \end{pmatrix} \in \mathbb{R}^{n} \\ \vec{x}^{-, +} &= \begin{pmatrix} \dvec{q}^{-, +} \\ \vec{\delta}^{-, +} \end{pmatrix} \in \mathbb{R}^{(n+6)},\end{split}\]where \(\vec{\delta} \in \mathbb{R}^6\) is the slack vector, \(\lambda_\delta \in \mathbb{R}^+\) is a gain term which adjusts the cost of the norm of the slack vector in the optimiser, \(\dvec{q}^{-,+}\) are the minimum and maximum joint velocities, and \(\dvec{\delta}^{-,+}\) are the minimum and maximum slack velocities.
Examples
The following example gets the
etsof apandarobot object, makes a goal poseTep, and then solves for the joint coordinates which result in the poseTepusing theikine_QPmethod.>>> import roboticstoolbox as rtb >>> panda = rtb.models.Panda().ets() >>> Tep = panda.fkine([0, -0.3, 0, -2.2, 0, 2, 0.7854]) >>> panda.ikine_QP(Tep) !! ImportError: the package qpsolvers is required for this class. Install using 'pip install qpsolvers' [ERR robot/ETS.py:110:roboticstoolbox.robot.ETS.ETS.ikine_QP (stubs/roboticstoolbox.robot.ETS.ETS.ikine_QP.rst)]
Notes
When using this method, the initial joint coordinates \(q_0\), should correspond to a non-singular manipulator pose, since it uses the manipulator Jacobian.
This class supports null-space motion to assist with maximising manipulability and avoiding joint limits. These are enabled by setting kq and km to non-zero values.
References
J. Haviland, and P. Corke. “Manipulator Differential Kinematics Part I: Kinematics, Velocity, and Applications.” arXiv preprint arXiv:2207.01796 (2022).
J. Haviland, and P. Corke. “Manipulator Differential Kinematics Part II: Acceleration and Advanced Applications.” arXiv preprint arXiv:2207.01794 (2022).
See also
Changed in version 1.0.4: Added the Quadratic Programming IK solver method on the
ETSclass