IK_NR - Newton-Raphson Numerical IK
- class roboticstoolbox.robot.IK.IK_NR(name='IK Solver', 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)
Newton-Raphson Numerical Inverse Kinematics Solver
A class which provides functionality to perform numerical inverse kinematics (IK) using the Newton-Raphson method. See
stepmethod for mathematical description.
When using this class with redundant robots (>6 DoF),
pinvmust be set to
str) – The name of the IK algorithm
int) – How many iterations are allowed within a search before a new search is started
int) – How many searches are allowed before being deemed unsuccessful
float) – Maximum allowed residual error E
bool) – Reject solutions with joint limit violations
float) – The gain for joint limit avoidance. Setting to 0.0 will remove this completely from the solution
float) – The gain for maximisation. Setting to 0.0 will remove this completely from the solution
float) – The minimum angle/distance (in radians or metres) in which the joint is allowed to approach to its limit
The following example gets the
pandarobot object, instantiates the IK_NR solver class using default parameters, makes a goal pose
Tep, and then solves for the joint coordinates which result in the pose
>>> import roboticstoolbox as rtb >>> panda = rtb.models.Panda().ets() >>> solver = rtb.IK_NR(pinv=True) >>> Tep = panda.fkine([0, -0.3, 0, -2.2, 0, 2, 0.7854]) >>> solver.solve(panda, Tep) IKSolution(q=array([ 1.2505, 1.5365, -2.2182, -2.0732, 1.2797, 1.0943, -0.1109]), success=True, iterations=192, searches=11, residual=2.9663814367895835e-09, reason='Success')
When using the NR 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. However, this method frequently fails to converge on the goal.
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.
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).
Changed in version 1.0.3: Added the Newton-Raphson IK solver class
Performs a single iteration of the Newton-Raphson optimisation method
Solves the IK problem
Calculates the error between Te and Tep
Generate a random valid joint configuration using a private RNG
Checks if the joints are within their respective limits