00001 
00002 
00003 
00004 
00006 
00007 #ifndef _Redundant_Header_
00008 #define _Redundant_Header_
00009 
00010 
00011 #include "CollisionDetectors\CD_BasicStyle.h"
00012 
00013 #include "Active.h"
00014 #include "Passive.h"
00015 
00016 class CRedundant
00017 {
00018 public:
00019         CRedundant();
00020         CRedundant(FrameManager *frameManager);
00021         ~CRedundant();
00022 
00023         
00024         void SetFrameManager(FrameManager* frameManager);
00025         virtual void SetCollisionDetector (CD_BasicStyle* collisionDetector);
00026 
00027         
00028         void SetPassiveBaseFrame(unsigned int frame);
00029         void SetPassiveFirstJoint(unsigned int joint);
00030         void SetPassiveLastJoint(unsigned int joint);
00031 
00032         
00033         void SetActiveBaseFrame(unsigned int frame);
00034         void SetActiveFirstJoint(unsigned int joint);
00035         void SetActiveLastJoint(unsigned int joint);
00036 
00037         
00038         void GetDesireFrameByConfiguration(const Configuration &conf, Frame &frame) const;
00039 
00040         
00041         virtual bool GetRandomConfiguration(Configuration &conf);
00042         
00043         virtual bool GetRandomConfiguration(Configuration &conf, Configuration &desire);
00044         
00045         virtual bool GetRandomConfiguration(Configuration &conf, Configuration &bias, Configuration &desire, double dist);
00046         
00047         virtual bool GetRandomConfiguration(Configuration &conf, Frame &frame);
00048         
00049         virtual bool GetRandomConfiguration(Configuration &conf, Configuration &bias, Frame &frame, double dist);
00050         
00051         virtual bool GetConfigurationByActive(Configuration &conf, Configuration &active, Frame &frame);
00052         
00053         virtual bool GetConfigurationByActive(Configuration &conf, Configuration &active, Configuration &bias, Frame &frame);
00054         
00055         virtual bool GetConfigurationByActive(Configuration &conf, Configuration &active, Configuration &bias, Frame &frame, double dist);
00056 
00057 protected:
00058         R_OpenChain *robot;
00059         CD_BasicStyle* collisionDetector;
00060         FrameManager *frameManager;
00061         CPassive passive;
00062         CActive active;
00063         std::vector< LinkBase*> links;
00064         int activeJointNum;
00065         int passiveJointNum;
00066 
00067 private:
00068         
00069         void CombineConfiguration(Configuration &conf, Configuration &activeConf, Configuration &passiveConf);
00070         
00071         void UpdateActiveConfiguration(Configuration &active);
00072 };
00073 
00074 #endif