00001 #ifndef _HEADER_PL_PRM_CLOSED_
00002 #define _HEADER_PL_PRM_CLOSED_
00003
00004 #include "planners/prm/PL_PRM.h"
00005 #include <LEDA/dynamic_trees.h>
00006
00007 #undef array
00008 #undef vector
00009 #undef map
00010 #undef string
00011 #undef set
00012
00013 class IK_Jacobian;
00014 class CRedundant;
00015
00016 typedef enum{
00017 ALG_CLOSEDCHAIN_RGD = 0,
00018 ALG_CLOSEDCHAIN_APD,
00019 ALG_CLOSEDCHAIN_JACOBIAN,
00020 ALG_CLOSEDCHAIN_LOCAL
00021 } ClosedChainAlgorithm;
00022
00023 typedef list<Configuration> Fragment;
00024
00025 class LocalPlannerClosed : public IK_Jacobian
00026 {
00027 public:
00028 LocalPlannerClosed(){};
00029 ~LocalPlannerClosed(){};
00030 virtual bool Plan ();
00031
00032 protected:
00033 double Distance(Configuration &frame1, Configuration &frame2);
00034 };
00035
00036 class PL_PRM_ClosedBase: virtual public PL_PRM
00037 {
00038 public:
00039 PL_PRM_ClosedBase();
00040 ~PL_PRM_ClosedBase();
00041
00042 virtual bool Plan ();
00043 virtual bool MakeItClosed(Configuration &conf)=0;
00044 virtual bool IsInterfering ( const Configuration& c1, const Configuration& c2 ) = 0;
00045
00046 double Error(const Configuration &p1) const;
00047 Frame GetToolFrame( const Configuration& config ) const;
00048
00049 protected:
00050
00051 virtual Configuration GenerateRandomConfig ();
00052 virtual Configuration GenerateRandomConfig ( const Configuration& seed, const double& std_dev );
00053 virtual void ConnectEdgesFull( const node& n1, const double& radius_squared );
00054 virtual bool IsInterfering ( const Configuration& c1 );
00055 virtual SuccessResultType TranslatePath();
00056 void GetRotAngles( const Matrix4x4& frame, double& roll, double& pitch, double& yaw ) const;
00057
00058 protected:
00059 Fragment *edgeFrag;
00060
00061 bool IsClosed(const Configuration &conf) const;
00062
00063 protected:
00064 edge_map<Fragment> edgePath;
00065 };
00066
00067 class PL_PRM_ClosedRGD: virtual public PL_PRM_ClosedBase
00068 {
00069 public:
00070 PL_PRM_ClosedRGD();
00071 ~PL_PRM_ClosedRGD();
00072 virtual bool MakeItClosed(Configuration &conf);
00073 virtual bool IsInterfering ( const Configuration& c1, const Configuration& c2 );
00074
00075 };
00076
00077 class PL_PRM_ClosedLocalJacobian: virtual public PL_PRM_ClosedBase
00078 {
00079 public:
00080 PL_PRM_ClosedLocalJacobian();
00081 ~PL_PRM_ClosedLocalJacobian();
00082
00083 virtual bool Plan ();
00084 virtual void SetCollisionDetector (CD_BasicStyle* collisionDetector);
00085 virtual bool MakeItClosed(Configuration &conf);
00086 virtual bool IsInterfering ( const Configuration& c1, const Configuration& c2 );
00087
00088 protected:
00089 LocalPlannerClosed* planner;
00090 CD_BasicStyle *pCollisionDetector;
00091 };
00092
00093 class PL_PRM_ClosedJacobian: virtual public PL_PRM_ClosedBase
00094 {
00095 public:
00096 PL_PRM_ClosedJacobian();
00097 ~PL_PRM_ClosedJacobian();
00098
00099 virtual void SetCollisionDetector (CD_BasicStyle* collisionDetector);
00100 virtual bool MakeItClosed(Configuration &conf);
00101 virtual bool IsInterfering ( const Configuration& c1, const Configuration& c2 );
00102
00103 protected:
00104 R_OpenChain * m_pRobot;
00105 int m_nDof;
00106 int m_nToolFrame;
00107 Frame m_frEndEffector;
00108 CJacobian *jacobian;
00109
00110 };
00111
00112 class PL_PRM_ClosedAPDecomp: virtual public PL_PRM_ClosedBase
00113 {
00114 public:
00115 PL_PRM_ClosedAPDecomp();
00116 ~PL_PRM_ClosedAPDecomp();
00117
00118 protected:
00119 virtual bool MakeItClosed(Configuration &conf);
00120 virtual bool IsInterfering ( const Configuration& c1, const Configuration& c2 );
00121 virtual void SetCollisionDetector(CD_BasicStyle* collisionDetector);
00122
00123 protected:
00124 CRedundant redundant;
00125 };
00126
00127 class PL_PRM_ClosedChain:
00128 virtual public PL_PRM_ClosedRGD,
00129 virtual public PL_PRM_ClosedAPDecomp,
00130 virtual public PL_PRM_ClosedJacobian,
00131 virtual public PL_PRM_ClosedLocalJacobian
00132 {
00133 public:
00134 PL_PRM_ClosedChain();
00135 ~PL_PRM_ClosedChain();
00136
00137 virtual bool Plan ();
00138 virtual bool MakeItClosed(Configuration &conf);
00139 virtual bool IsInterfering ( const Configuration& c1, const Configuration& c2 );
00140 virtual void SetCollisionDetector(CD_BasicStyle* collisionDetector);
00141
00142 void SetAlgorithm(ClosedChainAlgorithm alg){m_nAlgorithm=alg;};
00143 ClosedChainAlgorithm GetAlgorithm(){return m_nAlgorithm;};
00144 protected:
00145 ClosedChainAlgorithm m_nAlgorithm;
00146 };
00147
00148 #endif