# IK_LM - Levemberg-Marquadt Numerical IK

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

Bases: IKSolver

A class which provides functionality to perform numerical inverse kinematics (IK) using the Levemberg-Marquadt method. See step method for mathematical description.

Parameters:

Examples

The following example gets the ets of a panda robot object, instantiates the IK_LM 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.

>>> import roboticstoolbox as rtb
>>> panda = rtb.models.Panda().ets()
>>> solver = rtb.IK_LM()
>>> Tep = panda.fkine([0, -0.3, 0, -2.2, 0, 2, 0.7854])
>>> solver.solve(panda, Tep)
IKSolution(q=array([-1.6464, -1.1822,  1.0484, -2.1051,  1.0311,  1.4364,  0.0173]), success=True, iterations=188, searches=17, residual=3.9241014186806444e-08, reason='Success')


Notes

The value for the k kwarg will depend on the method chosen and the arm you are using. Use the following as a rough guide chan, k = 1.0 - 0.01, wampler, k = 0.01 - 0.0001, and sugihara, k = 0.1 - 0.0001

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.

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).

IKSolver

An abstract super class for numerical IK solvers

IK_NR

Implements the IKSolver class using the Newton-Raphson method

IK_GN

Implements the IKSolver class using the Gauss-Newton method

IK_QP

Implements the IKSolver class using a quadratic programming approach

 step(ets, Tep, q) Performs a single iteration of the Levenberg-Marquadt optimisation solve(ets, Tep[, q0]) Solves the IK problem error(Te, Tep) Calculates the error between Te and Tep
 _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