Public Types | Public Member Functions | Protected Attributes | List of all members
KDL::SolverI Class Referenceabstract

#include <solveri.hpp>

Inheritance diagram for KDL::SolverI:
Inheritance graph
[legend]

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. More...
 
 SolverI ()
 Initialize latest error to E_NOERROR. More...
 
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. More...
 

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'
}
}
...
}

Definition at line 84 of file solveri.hpp.

Member Enumeration Documentation

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.

Definition at line 87 of file solveri.hpp.

Constructor & Destructor Documentation

KDL::SolverI::SolverI ( )
inline

Initialize latest error to E_NOERROR.

Definition at line 111 of file solveri.hpp.

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

Definition at line 115 of file solveri.hpp.

Member Function Documentation

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

Return the latest error.

Definition at line 119 of file solveri.hpp.

virtual const char* KDL::SolverI::strError ( const int  error) const
inlinevirtual

Return a description of the latest error

Returns
if error is known then a description of error, otherwise "UNKNOWN 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

Member Data Documentation

int KDL::SolverI::error
protected

Latest error, initialized to E_NOERROR in constructor.

Definition at line 149 of file solveri.hpp.


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


orocos_kdl
Author(s):
autogenerated on Sat Jul 21 2018 02:10:47