00001 /* 00002 * Ik.h 00003 * 00004 * Created on: 12.01.2012 00005 * Author: hess 00006 */ 00007 00008 #ifndef OPENRAVE_IK_H_ 00009 #define OPENRAVE_IK_H_ 00010 00011 typedef double IKReal; 00012 00013 00014 00015 struct VARIABLE { 00016 VARIABLE() : 00017 fmul(0), foffset(0), freeind(-1), maxsolutions(1) { 00018 indices[0] = indices[1] = -1; 00019 } 00020 IKReal fmul, foffset; 00021 signed char freeind; 00022 unsigned char maxsolutions; 00023 unsigned char indices[2]; 00024 }; 00025 00026 class IKSolution { 00027 public: 00030 void GetSolution(IKReal* psolution, const IKReal* pfree)const; 00031 00034 const std::vector<int>& GetFree() const; 00035 00036 std::vector<VARIABLE> basesol; 00037 std::vector<int> vfree; 00038 00039 bool Validate() const; 00040 00041 void GetSolutionIndices(std::vector<unsigned int>& v) const; 00042 }; 00043 00044 extern bool ik(const IKReal* eetrans, const IKReal* eerot, const IKReal* pfree, std::vector<IKSolution>& vsolutions); 00045 #endif /* IK_H_ */