00001
00002 #ifndef INCLUDED_IKGradientSolver_h_
00003 #define INCLUDED_IKGradientSolver_h_
00004
00005 #include "IKSolver.h"
00006
00007
00008
00009
00010 class IKGradientSolver : public IKSolver {
00011 public:
00012
00013 IKGradientSolver(unsigned int iter=75, float posTolerance=0.5f, float oriTolerance=.001f) : IKSolver(), PTOL(posTolerance), OTOL(oriTolerance), QTOL(oriTolerance/50), MAX_ITER(iter) {}
00014
00015 IKGradientSolver(unsigned int iter, float posTolerance, float oriTolerance, float qTolerance) : IKSolver(), PTOL(posTolerance), OTOL(oriTolerance), QTOL(qTolerance), MAX_ITER(iter) {}
00016
00017 virtual bool solve(const Point& pEff, const Rotation& oriEff, KinematicJoint& j, const Position& pTgt, float posPri, const Orientation& oriTgt, float oriPri) const;
00018 using IKSolver::solve;
00019
00020 virtual IKSolver::StepResult_t step(const Point& pEff, const Rotation& oriEff, KinematicJoint& j, const Position& pTgt, float pDist, float posPri, const Orientation& oriTgt, float oriDist, float oriPri) const {
00021 return step(pEff,oriEff,j,pTgt,pDist,posPri,oriTgt,oriDist,oriPri,true);
00022 }
00023 virtual IKSolver::StepResult_t step(const Point& pEff, const Rotation& oriEff, KinematicJoint& j, const Position& pTgt, float pDist, float posPri, const Orientation& oriTgt, float oriDist, float oriPri, bool successInReach) const;
00024 using IKSolver::step;
00025
00026 protected:
00027 const float PTOL;
00028 const float OTOL;
00029 const float QTOL;
00030 const unsigned int MAX_ITER;
00031
00032 private:
00033
00034 static const std::string autoRegisterIKGradientSolver;
00035
00036 static const std::string autoRegisterDefaultIKSolver;
00037 };
00038
00039
00040
00041
00042
00043
00044 #endif