45 #define IKFAST_VERSION 61
82 virtual void GetSolution(T* solution,
const T* freevalues)
const = 0;
85 virtual void GetSolution(std::vector<T>& solution,
const std::vector<T>& freevalues)
const
88 GetSolution(&solution.at(0), freevalues.size() > 0 ? &freevalues.at(0) :
nullptr);
94 virtual const std::vector<int>&
GetFree()
const = 0;
101 template <
typename T>
128 template <
typename T>
153 typedef int* (*GetFreeParametersFn)();
159 typedef const char* (*GetIkFastVersionFn)();
163 typedef const char* (*GetKinematicsHashFn)();
170 template <
typename T>
182 for (std::size_t i = 0; i <
_vbasesol.size(); ++i)
189 if (solution[i] > T(3.14159265358979))
191 solution[i] -= T(6.28318530717959);
193 else if (solution[i] < T(-3.14159265358979))
195 solution[i] += T(6.28318530717959);
201 virtual void GetSolution(std::vector<T>& solution,
const std::vector<T>& freevalues)
const
203 solution.resize(
GetDOF());
204 GetSolution(&solution.at(0), freevalues.size() > 0 ? &freevalues.at(0) :
nullptr);
207 virtual const std::vector<int>&
GetFree()
const
213 return static_cast<int>(
_vbasesol.size());
218 for (
size_t i = 0; i <
_vbasesol.size(); ++i)
220 if (
_vbasesol[i].maxsolutions == (
unsigned char)-1)
222 throw std::runtime_error(
"max solutions for joint not initialized");
228 throw std::runtime_error(
"index >= max solutions for joint");
232 throw std::runtime_error(
"2nd index >= max solutions for joint");
242 for (
int i =
static_cast<int>(
_vbasesol.size()) - 1; i >= 0; --i)
246 for (
size_t j = 0; j < v.size(); ++j)
250 size_t orgsize = v.size();
251 if (
_vbasesol[i].indices[1] != (
unsigned char)-1)
253 for (
size_t j = 0; j < orgsize; ++j)
255 v.push_back(v[j] +
_vbasesol[i].indices[1]);
258 if (
_vbasesol[i].indices[0] != (
unsigned char)-1)
260 for (
size_t j = 0; j < orgsize; ++j)
274 template <
typename T>
289 throw std::runtime_error(
"GetSolution index is invalid");
291 typename std::list<IkSolution<T> >::const_iterator it =
_listsolutions.begin();
292 std::advance(it, index);
312 #ifdef IKFAST_HAS_LIBRARY
315 #ifdef IKFAST_CLIBRARY
317 #define IKFAST_API extern "C" __declspec(dllexport)
319 #define IKFAST_API extern "C"
325 #ifdef IKFAST_NAMESPACE
326 namespace IKFAST_NAMESPACE
331 typedef IKFAST_REAL IkReal;
333 typedef double IkReal;
347 IKFAST_API
bool ComputeIk(
const IkReal* eetrans,
const IkReal* eerot,
const IkReal* pfree,
351 IKFAST_API
void ComputeFk(
const IkReal* joints, IkReal* eetrans, IkReal* eerot);
374 #ifdef IKFAST_NAMESPACE
holds function pointers for all the exported functions of ikfast
GetIkFastVersionFn _GetIkFastVersion
GetFreeParametersFn _GetFreeParameters
const char *(* GetKinematicsHashFn)()
const char *(* GetIkFastVersionFn)()
int(* GetNumFreeParametersFn)()
void(* ComputeFkFn)(const T *, T *, T *)
GetIkRealSizeFn _GetIkRealSize
virtual ~IkFastFunctions()
GetKinematicsHashFn _GetKinematicsHash
GetNumJointsFn _GetNumJoints
int *(* GetFreeParametersFn)()
GetNumFreeParametersFn _GetNumFreeParameters
bool(* ComputeIkFn)(const T *, const T *, const T *, IkSolutionListBase< T > &)
holds the solution for a single dof
T foffset
joint value is fmul*sol[freeind]+foffset
unsigned char jointtype
joint type, 0x01 is revolute, 0x11 is slider
unsigned char maxsolutions
max possible indices, 0 if controlled by free index or a free joint itself
IkSingleDOFSolutionBase()
signed char freeind
if >= 0, mimics another joint
The discrete solutions are returned in this structure.
virtual const std::vector< int > & GetFree() const =0
Gets the indices of the configuration space that have to be preset before a full solution can be retu...
virtual void GetSolution(std::vector< T > &solution, const std::vector< T > &freevalues) const
std::vector version of GetSolution
virtual void GetSolution(T *solution, const T *freevalues) const =0
gets a concrete solution
virtual int GetDOF() const =0
the dof of the solution
virtual ~IkSolutionBase()
manages all the solutions
virtual ~IkSolutionListBase()
virtual const IkSolutionBase< T > & GetSolution(size_t index) const =0
returns the solution pointer
virtual size_t GetNumSolutions() const =0
returns the number of solutions stored
virtual void Clear()=0
clears all current solutions, note that any memory addresses returned from GetSolution will be invali...
virtual size_t AddSolution(const std::vector< IkSingleDOFSolutionBase< T > > &vinfos, const std::vector< int > &vfree)=0
add one solution and return its index for later retrieval
Default implementation of IkSolutionListBase.
virtual const IkSolutionBase< T > & GetSolution(size_t index) const
returns the solution pointer
std::list< IkSolution< T > > _listsolutions
virtual size_t AddSolution(const std::vector< IkSingleDOFSolutionBase< T > > &vinfos, const std::vector< int > &vfree)
add one solution and return its index for later retrieval
virtual size_t GetNumSolutions() const
returns the number of solutions stored
virtual void Clear()
clears all current solutions, note that any memory addresses returned from GetSolution will be invali...
Default implementation of IkSolutionBase.
virtual void Validate() const
virtual int GetDOF() const
the dof of the solution
virtual void GetSolutionIndices(std::vector< unsigned int > &v) const
virtual const std::vector< int > & GetFree() const
Gets the indices of the configuration space that have to be preset before a full solution can be retu...
IkSolution(const std::vector< IkSingleDOFSolutionBase< T > > &vinfos, const std::vector< int > &vfree)
std::vector< int > _vfree
virtual void GetSolution(std::vector< T > &solution, const std::vector< T > &freevalues) const
std::vector version of GetSolution
std::vector< IkSingleDOFSolutionBase< T > > _vbasesol
solution and their offsets if joints are mimiced
virtual void GetSolution(T *solution, const T *freevalues) const
gets a concrete solution
IKFAST_API int * GetFreeParameters()
IKFAST_API int GetNumJoints()
IKFAST_API int GetIkRealSize()
IKFAST_API int GetIkType()
IKFAST_API void ComputeFk(const IkReal *j, IkReal *eetrans, IkReal *eerot)
IKFAST_API bool ComputeIk(const IkReal *eetrans, const IkReal *eerot, const IkReal *pfree, IkSolutionListBase< IkReal > &solutions)
IKFAST_API const char * GetIkFastVersion()
IKFAST_API int GetNumFreeParameters()
IKFAST_API const char * GetKinematicsHash()