KDL 1.5.1
Loading...
Searching...
No Matches
KDL::SolverI Class Referenceabstract

Solver interface supporting storage and description of the latest error. More...

#include <src/solveri.hpp>

Inheritance diagram for KDL::SolverI:

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

 SolverI ()
 Initialize latest error to E_NOERROR.
 
virtual ~SolverI ()
 
virtual int getError () const
 Return the latest error.
 
virtual const char * strError (const int error) const
 Return a description of the latest error.
 
virtual void updateInternalDataStructures ()=0
 Update the internal data structures.
 

Protected Attributes

int error
 Latest error, initialized to E_NOERROR in constructor.
 

Detailed Description

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'
}
}
...
}
Solver interface supporting storage and description of the latest error.
Definition solveri.hpp:85
int error
Latest error, initialized to E_NOERROR in constructor.
Definition solveri.hpp:149
@ E_NOERROR
No error.
Definition solveri.hpp:91
virtual const char * strError(const int error) const
Return a description of the latest error.
Definition solveri.hpp:125

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
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.

Constructor & Destructor Documentation

◆ SolverI()

KDL::SolverI::SolverI ( )
inline

Initialize latest error to E_NOERROR.

◆ ~SolverI()

virtual KDL::SolverI::~SolverI ( )
inlinevirtual

Member Function Documentation

◆ getError()

virtual int KDL::SolverI::getError ( ) const
inlinevirtual

Return the latest error.

References error.

◆ strError()

◆ updateInternalDataStructures()

Member Data Documentation

◆ error

int KDL::SolverI::error
protected

Latest error, initialized to E_NOERROR in constructor.

Referenced by KDL::ChainFdSolver_RNE::CartToJnt(), KDL::ChainHdSolver_Vereshchagin::CartToJnt(), KDL::ChainIdSolver_RNE::CartToJnt(), KDL::ChainIkSolverPos_LMA::CartToJnt(), KDL::ChainIkSolverPos_NR::CartToJnt(), KDL::ChainIkSolverPos_NR_JL::CartToJnt(), KDL::ChainIkSolverVel_pinv::CartToJnt(), KDL::ChainIkSolverVel_pinv_givens::CartToJnt(), KDL::ChainIkSolverVel_pinv_givens::CartToJnt(), KDL::ChainIkSolverVel_pinv_nso::CartToJnt(), KDL::ChainIkSolverVel_wdls::CartToJnt(), KDL::TreeIdSolver_RNE::CartToJnt(), getError(), KDL::ChainIkSolverVel_wdls::getSigma(), KDL::ChainFkSolverPos_recursive::JntToCart(), KDL::ChainFkSolverVel_recursive::JntToCart(), KDL::ChainExternalWrenchEstimator::JntToExtWrench(), KDL::ChainJntToJacSolver::JntToJac(), KDL::ChainJntToJacDotSolver::JntToJacDot(), KDL::ChainJntToJacDotSolver::JntToJacDot(), KDL::ChainDynParam::JntToMass(), KDL::ChainExternalWrenchEstimator::setInitialMomentum(), KDL::ChainIkSolverPos_NR_JL::setJointLimits(), KDL::ChainJntToJacDotSolver::setLockedJoints(), KDL::ChainJntToJacSolver::setLockedJoints(), KDL::ChainIkSolverVel_pinv_nso::setOptPos(), KDL::ChainIkSolverVel_wdls::setWeightJS(), KDL::ChainIkSolverVel_pinv_nso::setWeights(), KDL::ChainIkSolverVel_wdls::setWeightTS(), KDL::ChainExternalWrenchEstimator::strError(), KDL::ChainIkSolverPos_LMA::strError(), KDL::ChainIkSolverPos_NR::strError(), KDL::ChainIkSolverPos_NR_JL::strError(), KDL::ChainIkSolverVel_pinv::strError(), KDL::ChainIkSolverVel_wdls::strError(), KDL::ChainJntToJacDotSolver::strError(), and strError().


The documentation for this class was generated from the following file: