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

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

#include <src/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 }
 

Public Member Functions

 SolverI ()
 Initialize latest error to E_NOERROR. More...
 
virtual ~SolverI ()
 
virtual int getError () const
 Return the latest error. More...
 
virtual const char * strError (const int error) const
 Return a description of the latest error. More...
 

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

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) )

Constructor & Destructor Documentation

KDL::SolverI::SolverI ( )
inline

Initialize latest error to E_NOERROR.

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

Member Function Documentation

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

Return the latest error.

References error.

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::ChainIkSolverVel_pinv, KDL::ChainIkSolverPos_NR, and KDL::ChainJntToJacSolver.

References E_NO_CONVERGE, and E_NOERROR.

Referenced by KDL::ChainJntToJacSolver::strError(), KDL::ChainIkSolverPos_NR::strError(), KDL::ChainIkSolverVel_pinv::strError(), and KDL::ChainIkSolverVel_wdls::strError().

Member Data Documentation

int KDL::SolverI::error
protected

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