| orocos_kdl
    | 
Solver for the inverse position kinematics that uses Levenberg-Marquardt. More...
#include <chainiksolverpos_lma.hpp>

| Public Member Functions | |
| virtual int | CartToJnt (const KDL::JntArray &q_init, const KDL::Frame &T_base_goal, KDL::JntArray &q_out) | 
| computes the inverse position kinematics.  More... | |
| ChainIkSolverPos_LMA (const KDL::Chain &_chain, const Eigen::Matrix< double, 6, 1 > &_l, double _eps=1E-5, int _maxiter=500, double _eps_joints=1E-15) | |
| constructs an ChainIkSolverPos_LMA solver.  More... | |
| ChainIkSolverPos_LMA (const KDL::Chain &_chain, double _eps=1E-5, int _maxiter=500, double _eps_joints=1E-15) | |
| identical the full constructor for ChainIkSolverPos_LMA, but provides for a default weight matrix.  More... | |
| void | compute_fwdpos (const VectorXq &q) | 
| for internal use only.  More... | |
| void | compute_jacobian (const VectorXq &q) | 
| for internal use only. Only exposed for test and diagnostic purposes. compute_fwdpos(q) should always have been called before.  More... | |
| void | display_jac (const KDL::JntArray &jval) | 
| for internal use only. Only exposed for test and diagnostic purposes.  More... | |
| virtual const char * | strError (const int error) const | 
| void | updateInternalDataStructures () | 
| virtual | ~ChainIkSolverPos_LMA () | 
| destructor.  More... | |
|  Public Member Functions inherited from KDL::ChainIkSolverPos | |
| virtual | ~ChainIkSolverPos () | 
|  Public Member Functions inherited from KDL::SolverI | |
| virtual int | getError () const | 
| Return the latest error.  More... | |
| SolverI () | |
| Initialize latest error to E_NOERROR.  More... | |
| virtual | ~SolverI () | 
| Public Attributes | |
| bool | display_information | 
| display information on each iteration step to the console.  More... | |
| VectorXq | grad | 
| for internal use only.  More... | |
| MatrixXq | jac | 
| for internal use only.  More... | |
| double | lastDifference | 
| contains the last value for \( E \) after an execution of CartToJnt.  More... | |
| int | lastNrOfIter | 
| contains the last number of iterations for an execution of CartToJnt.  More... | |
| double | lastRotDiff | 
| contains the last value for the (unweighted) rotational difference after an execution of CartToJnt.  More... | |
| VectorXq | lastSV | 
| contains the last values for the singular values of the weighted Jacobian after an execution of CartToJnt.  More... | |
| double | lastTransDiff | 
| contains the last value for the (unweighted) translational difference after an execution of CartToJnt.  More... | |
| KDL::Frame | T_base_head | 
| for internal use only.  More... | |
| Static Public Attributes | |
| static const int | E_GRADIENT_JOINTS_TOO_SMALL = -100 | 
| static const int | E_INCREMENT_JOINTS_TOO_SMALL = -101 | 
| Private Types | |
| typedef Eigen::Matrix< ScalarType, Eigen::Dynamic, Eigen::Dynamic > | MatrixXq | 
| typedef double | ScalarType | 
| typedef Eigen::Matrix< ScalarType, Eigen::Dynamic, 1 > | VectorXq | 
| Private Attributes | |
| MatrixXq | A | 
| const KDL::Chain & | chain | 
| VectorXq | diffq | 
| double | eps | 
| double | eps_joints | 
| Eigen::Matrix< ScalarType, 6, 1 > | L | 
| Eigen::LDLT< MatrixXq > | ldlt | 
| unsigned int | maxiter | 
| unsigned int | nj | 
| unsigned int | ns | 
| VectorXq | original_Aii | 
| VectorXq | q | 
| VectorXq | q_new | 
| Eigen::JacobiSVD< MatrixXq > | svd | 
| std::vector< KDL::Frame > | T_base_jointroot | 
| std::vector< KDL::Frame > | T_base_jointtip | 
| VectorXq | tmp | 
| Additional Inherited Members | |
|  Public Types inherited from KDL::SolverI | |
| enum | { E_DEGRADED = +1, E_NOERROR = 0, E_NO_CONVERGE = -1, E_UNDEFINED = -2, E_NOT_UP_TO_DATE = -3, E_SIZE_MISMATCH = -4, E_MAX_ITERATIONS_EXCEEDED = -5, E_OUT_OF_RANGE = -6, E_NOT_IMPLEMENTED = -7, E_SVD_FAILED = -8 } | 
|  Protected Attributes inherited from KDL::SolverI | |
| int | error | 
| Latest error, initialized to E_NOERROR in constructor.  More... | |
Solver for the inverse position kinematics that uses Levenberg-Marquardt.
The robustness and speed of this solver is improved in several ways:
De general principles behind the optimisation is inspired on: Jorge Nocedal, Stephen J. Wright, Numerical Optimization,Springer-Verlag New York, 1999.
Definition at line 87 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 114 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 113 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 115 of file chainiksolverpos_lma.hpp.
| KDL::ChainIkSolverPos_LMA::ChainIkSolverPos_LMA | ( | const KDL::Chain & | _chain, | 
| const Eigen::Matrix< double, 6, 1 > & | _l, | ||
| double | _eps = 1E-5, | ||
| int | _maxiter = 500, | ||
| double | _eps_joints = 1E-15 | ||
| ) | 
constructs an ChainIkSolverPos_LMA solver.
The default parameters are chosen to be applicable to industrial-size robots (e.g. 0.5 to 3 meters range in task space), with an accuracy that is more then sufficient for typical industrial applications.
Weights are applied in task space, i.e. the kinematic solver minimizes: \( E = \Delta \mathbf{x}^T \mathbf{L} \mathbf{L}^T \Delta \mathbf{x} \), with \(\mathbf{L}\) a diagonal matrix.
| _chain | specifies the kinematic chain. | 
| _l | specifies the "square root" of the weight (diagonal) matrix in task space. This diagonal matrix is specified as a vector. | 
| _eps | specifies the desired accuracy in task space; after weighing with the weight matrix, it is applied on \(E\). | 
| _maxiter | specifies the maximum number of iterations. | 
| _eps_joints | specifies that the algorithm has to stop when the computed joint angle increments are smaller then _eps_joints. This is to avoid unnecessary computations up to _maxiter when the joint angle increments are so small that they effectively (in floating point) do not change the joint angles any more. The default is a few digits above numerical accuracy. | 
Definition at line 73 of file chainiksolverpos_lma.cpp.
| KDL::ChainIkSolverPos_LMA::ChainIkSolverPos_LMA | ( | const KDL::Chain & | _chain, | 
| double | _eps = 1E-5, | ||
| int | _maxiter = 500, | ||
| double | _eps_joints = 1E-15 | ||
| ) | 
identical the full constructor for ChainIkSolverPos_LMA, but provides for a default weight matrix.
\(\mathbf{L} = \mathrm{diag}\left( \begin{bmatrix} 1 & 1 & 1 & 0.01 & 0.01 & 0.01 \end{bmatrix} \right) \).
Definition at line 107 of file chainiksolverpos_lma.cpp.
| 
 | virtual | 
destructor.
Definition at line 162 of file chainiksolverpos_lma.cpp.
| 
 | virtual | 
computes the inverse position kinematics.
| q_init | initial joint position. | 
| T_base_goal | goal position expressed with respect to the robot base. | 
| q_out | joint position that achieves the specified goal position (if successful). | 
Implements KDL::ChainIkSolverPos.
Definition at line 210 of file chainiksolverpos_lma.cpp.
| void KDL::ChainIkSolverPos_LMA::compute_fwdpos | ( | const VectorXq & | q | ) | 
for internal use only.
Only exposed for test and diagnostic purposes.
Definition at line 164 of file chainiksolverpos_lma.cpp.
| void KDL::ChainIkSolverPos_LMA::compute_jacobian | ( | const VectorXq & | q | ) | 
for internal use only. Only exposed for test and diagnostic purposes. compute_fwdpos(q) should always have been called before.
Definition at line 181 of file chainiksolverpos_lma.cpp.
| void KDL::ChainIkSolverPos_LMA::display_jac | ( | const KDL::JntArray & | jval | ) | 
for internal use only. Only exposed for test and diagnostic purposes.
Definition at line 200 of file chainiksolverpos_lma.cpp.
| 
 | virtual | 
Return a description of the latest error
Reimplemented from KDL::SolverI.
Definition at line 340 of file chainiksolverpos_lma.cpp.
| 
 | virtual | 
Update the internal data structures. This is required if the number of segments or number of joints of a chain/tree have changed. This provides a single point of contact for solver memory allocations.
Implements KDL::ChainIkSolverPos.
Definition at line 145 of file chainiksolverpos_lma.cpp.
| 
 | private | 
Definition at line 282 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 206 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 286 of file chainiksolverpos_lma.hpp.
| bool KDL::ChainIkSolverPos_LMA::display_information | 
display information on each iteration step to the console.
Definition at line 261 of file chainiksolverpos_lma.hpp.
| 
 | static | 
Definition at line 118 of file chainiksolverpos_lma.hpp.
| 
 | static | 
Definition at line 119 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 265 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 266 of file chainiksolverpos_lma.hpp.
| VectorXq KDL::ChainIkSolverPos_LMA::grad | 
for internal use only.
contains the gradient of the error criterion after an execution of CartToJnt.
Definition at line 250 of file chainiksolverpos_lma.hpp.
| MatrixXq KDL::ChainIkSolverPos_LMA::jac | 
for internal use only.
contains the last value for the Jacobian after an execution of compute_jacobian.
Definition at line 243 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 267 of file chainiksolverpos_lma.hpp.
| double KDL::ChainIkSolverPos_LMA::lastDifference | 
contains the last value for \( E \) after an execution of CartToJnt.
Definition at line 221 of file chainiksolverpos_lma.hpp.
| int KDL::ChainIkSolverPos_LMA::lastNrOfIter | 
contains the last number of iterations for an execution of CartToJnt.
Definition at line 216 of file chainiksolverpos_lma.hpp.
| double KDL::ChainIkSolverPos_LMA::lastRotDiff | 
contains the last value for the (unweighted) rotational difference after an execution of CartToJnt.
Definition at line 231 of file chainiksolverpos_lma.hpp.
| VectorXq KDL::ChainIkSolverPos_LMA::lastSV | 
contains the last values for the singular values of the weighted Jacobian after an execution of CartToJnt.
Definition at line 236 of file chainiksolverpos_lma.hpp.
| double KDL::ChainIkSolverPos_LMA::lastTransDiff | 
contains the last value for the (unweighted) translational difference after an execution of CartToJnt.
Definition at line 226 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 284 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 264 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 207 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 208 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 288 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 281 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 287 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 285 of file chainiksolverpos_lma.hpp.
| KDL::Frame KDL::ChainIkSolverPos_LMA::T_base_head | 
for internal use only.
contains the last value for the position of the tip of the robot (head) with respect to the base, after an execution of compute_jacobian.
Definition at line 256 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 272 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 273 of file chainiksolverpos_lma.hpp.
| 
 | private | 
Definition at line 283 of file chainiksolverpos_lma.hpp.
 1.8.17
 1.8.17