planners/closedchain/PL_PRM_ClosedChain.h

Go to the documentation of this file.
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,     //Randomized Gradient Descent
00018         ALG_CLOSEDCHAIN_APD,         //Active Passive Link Decomposition
00019         ALG_CLOSEDCHAIN_JACOBIAN,    //Jacobian
00020         ALG_CLOSEDCHAIN_LOCAL        //Local Jacobian-based
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         // Create the Random Configurations of the C-space.
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 );  // Connects the given node with edges, Full PRM style.
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         //bool ConnectNodes(Configuration &q1, Configuration &q2, Fragment *frag);
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;             // to get DH parameters
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

Generated on Sat Apr 1 21:30:42 2006 for Motion Planning Kernel by  doxygen 1.4.6-NO