IK_LM  LevembergMarquadt Numerical IK
 class roboticstoolbox.robot.IK.IK_LM(name='IK Solver', ilimit=30, slimit=100, tol=1e06, 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
LevembergMarquadt Numerical Inverse Kinematics Solver
A class which provides functionality to perform numerical inverse kinematics (IK) using the LevembergMarquadt method. See
step
method for mathematical description. Parameters:
name (
str
) – The name of the IK algorithmilimit (
int
) – How many iterations are allowed within a search before a new search is startedslimit (
int
) – How many searches are allowed before being deemed unsuccessfultol (
float
) – Maximum allowed residual error Emask (
Union
[ndarray
,List
[float
],Tuple
[float
],Set
[float
],None
]) – A 6 vector which assigns weights to Cartesian degreesoffreedom error priorityjoint_limits (
bool
) – Reject solutions with joint limit violationsseed (
Optional
[int
]) – A seed for the private RNG used to generate random joint coordinate vectorsk (
float
) – Sets the gain value for the damping matrix Wn in thestep
method. See notesmethod – One of “chan”, “sugihara” or “wampler”. Defines which method is used to calculate the damping matrix Wn in the
step
methodkq (
float
) – The gain for joint limit avoidance. Setting to 0.0 will remove this completely from the solutionkm (
float
) – The gain for maximisation. Setting to 0.0 will remove this completely from the solutionps (
float
) – The minimum angle/distance (in radians or metres) in which the joint is allowed to approach to its limitpi (
Union
[ndarray
,float
]) – The influence angle/distance (in radians or metres) in null space motion becomes active
Examples
The following example gets the
ets
of apanda
robot object, instantiates the IK_LM solver class using default parameters, makes a goal poseTep
, and then solves for the joint coordinates which result in the poseTep
using thesolve
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.9241014186806444e08, reason='Success')
Notes
The value for the
k
kwarg will depend on themethod
chosen and the arm you are using. Use the following as a rough guidechan, k = 1.0  0.01
,wampler, k = 0.01  0.0001
, andsugihara, k = 0.1  0.0001
When using the this method, the initial joint coordinates \(q_0\), should correspond to a nonsingular manipulator pose, since it uses the manipulator Jacobian.
This class supports nullspace motion to assist with maximising manipulability and avoiding joint limits. These are enabled by setting kq and km to nonzero 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.3: Added the LevembergMarquadt IK solver class
Methods

Performs a single iteration of the LevenbergMarquadt optimisation 

Solves the IK problem 

Calculates the error between Te and Tep 
Private Methods

Generate a random valid joint configuration using a private RNG 

Checks if the joints are within their respective limits 