ETS.ikine_NR
- ETS.ikine_NR(Tep, q0=None, ilimit=30, slimit=100, tol=1e-06, mask=None, joint_limits=True, seed=None, pinv=False, kq=0.0, km=0.0, ps=0.0, pi=0.3, **kwargs)[source]
Newton-Raphson 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 configurationspinv (
bool) – use the pseudo-inverse in the step method instead of the normal inversekq (
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
A method which provides functionality to perform numerical inverse kinematics (IK) using the Newton-Raphson method.
See the Inverse Kinematics Docs Page for more details and for a tutorial on numerical IK, see here.
When using this method with redundant robots (>6 DoF),
pinvmust be set toTrue.Each iteration uses the Newton-Raphson optimisation method
\[\vec{q}_{k+1} = \vec{q}_k + {^0\mat{J}(\vec{q}_k)}^{-1} \vec{e}_k\]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_NRmethod.>>> import roboticstoolbox as rtb >>> panda = rtb.models.Panda().ets() >>> Tep = panda.fkine([0, -0.3, 0, -2.2, 0, 2, 0.7854]) >>> panda.ikine_NR(Tep) IKSolution(q=array([ 0.4496, 0.9133, -1.9684, -2.9689, -2.5681, 1.8771, 0.0901]), success=False, iterations=100, searches=100, residual=0.0, reason='iteration and search limit reached, 100 numpy.LinAlgError encountered')
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
ikine_LM()ikine_GN()ikine_QP()Changed in version 1.0.4: Added the Newton-Raphson IK solver method on the
ETSclass