#include <solveri.hpp>
Public Types | |
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 } |
Public Member Functions | |
virtual int | getError () const |
Return the latest error. | |
SolverI () | |
Initialize latest error to E_NOERROR. | |
virtual const char * | strError (const int error) const |
virtual void | updateInternalDataStructures ()=0 |
virtual | ~SolverI () |
Protected Attributes | |
int | error |
Latest error, initialized to E_NOERROR in constructor. |
Solver interface supporting storage and description of the latest error.
Error codes: Zero (0) indicates no error, positive error codes indicate more of a warning (e.g. a degraded solution, but motion can continue), and negative error codes indicate failure (e.g. a singularity, and motion can not continue).
Error codes between -99 and +99 (inclusive) are reserved for system-wide error codes. Derived classes should use values > +100, and < -100.
Example use
class MySolver : public SolverI { public: static const int E_CHILDFAILD = xxx; MySolver(SomeOtherSolver& other); virtual ~MySolver(); int CartToJnt(...); virtual const char* strError(const int error) const; protected: SomeOtherSolver& child; }; ... int MySolver::CartToJnt(...) { error = child->SomeCall(); if (E_NOERROR != error) { error = E_CHILDFAILED; } else { ... } return error; } const char* MySolver::strError(const int error) const { if (E_CHILDFAILED == error) return "Child solver failed"; else return SolverI::strError(error); } void someFunc() { SomeOtherSolver child = new SomeOtherSolver(...); MySolver parent = new MySolver(child); ... int rc = parent->CartToJnt(...); if (E_NOERROR != rc) { if (MySolver::E_CHILDFAILED == rc) { rc = child->getError(); // cope with child failure 'rc' } } ... }
Definition at line 84 of file solveri.hpp.
anonymous enum |
E_DEGRADED |
Converged but degraded solution (e.g. WDLS with psuedo-inverse singular) |
E_NOERROR |
No error. |
E_NO_CONVERGE |
Failed to converge. |
E_UNDEFINED |
Undefined value (e.g. computed a NAN, or tan(90 degrees) ) |
E_NOT_UP_TO_DATE |
Chain size changed. |
E_SIZE_MISMATCH |
Input size does not match internal state. |
E_MAX_ITERATIONS_EXCEEDED |
Maximum number of iterations exceeded. |
E_OUT_OF_RANGE |
Requested index out of range. |
E_NOT_IMPLEMENTED |
Not yet implemented. |
E_SVD_FAILED |
Internal svd calculation failed. |
Definition at line 87 of file solveri.hpp.
KDL::SolverI::SolverI | ( | ) | [inline] |
Initialize latest error to E_NOERROR.
Definition at line 111 of file solveri.hpp.
virtual KDL::SolverI::~SolverI | ( | ) | [inline, virtual] |
Definition at line 115 of file solveri.hpp.
virtual int KDL::SolverI::getError | ( | ) | const [inline, virtual] |
Return the latest error.
Definition at line 119 of file solveri.hpp.
virtual const char* KDL::SolverI::strError | ( | const int | error | ) | const [inline, virtual] |
Return a description of the latest error
Reimplemented in KDL::ChainIkSolverVel_wdls, KDL::ChainIkSolverPos_LMA, KDL::ChainJntToJacDotSolver, KDL::ChainIkSolverPos_NR_JL, KDL::ChainIkSolverVel_pinv, and KDL::ChainIkSolverPos_NR.
Definition at line 125 of file solveri.hpp.
virtual void KDL::SolverI::updateInternalDataStructures | ( | ) | [pure 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.
Implemented in KDL::ChainIkSolverVel_wdls, KDL::ChainIkSolverAcc, KDL::ChainIkSolverPos_LMA, KDL::ChainIkSolverVel_pinv_nso, KDL::ChainFkSolverAcc, KDL::ChainJntToJacDotSolver, KDL::ChainIkSolverPos_NR_JL, KDL::ChainIkSolverVel_pinv, KDL::ChainFkSolverVel, KDL::ChainIkSolverVel, KDL::ChainIkSolverPos_NR, KDL::ChainIdSolver_Vereshchagin, KDL::ChainJntToJacSolver, KDL::ChainFdSolver_RNE, KDL::ChainFkSolverPos, KDL::ChainIdSolver_RNE, KDL::TreeIdSolver_RNE, KDL::ChainDynParam, KDL::ChainIkSolverPos, KDL::ChainIkSolverVel_pinv_givens, KDL::ChainFkSolverPos_recursive, and KDL::ChainFkSolverVel_recursive.
int KDL::SolverI::error [protected] |
Latest error, initialized to E_NOERROR in constructor.
Definition at line 149 of file solveri.hpp.