libmove3d  3.13.0
/home/slemaign/softs-local/BioMove3D-git/lightPlanner/proto/ManipulationUtils.hpp
00001 #ifndef __MANIPULATIONUTILS_HPP__
00002 #define __MANIPULATIONUTILS_HPP__
00003 
00004 #include "ManipulationStruct.h"
00005 #ifdef GRASP_PLANNING
00006   #include "GraspPlanning-pkg.h"
00007 #endif
00008 #include "P3d-pkg.h"
00009 #include <vector>
00010 
00018 
00019 
00020 class  ManipulationUtils {
00021   public:
00022     /*Constructors and Destructors*/
00023 
00024     ManipulationUtils(){};
00025     virtual ~ManipulationUtils(){};
00026 
00027 
00028     /*############# Static Functions ############*/
00029 
00030     /* Message gestion */
00031     static void undefinedRobotMessage();
00032     static void undefinedObjectMessage();
00033     static void undefinedSupportMessage();
00034     static void undefinedCameraMessage();
00035     static void printManipulationMessage(MANIPULATION_TASK_MESSAGE message);
00036     static int printConstraintInfo(p3d_rob* robot);
00037     
00038     /* UI gestion */
00041     static int forbidWindowEvents();
00042     
00045     static int allowWindowEvents();
00046 
00049     static int copyConfigToFORM(p3d_rob* robot, configPt q);
00050 
00053     static bool isValidVector(std::vector<double> ObjectPos);
00054 
00056     static void fixAllHands(p3d_rob* robot, configPt q, bool rest);
00058     static void unFixAllHands(p3d_rob* robot);
00060     static void fixManipulationJoints(p3d_rob* robot, int armId, configPt q, p3d_rob* object);
00062     static void unfixManipulationJoints(p3d_rob* robot, int armId);
00063 };
00064 
00066 
00067 class ArmManipulationData {
00068                 
00069   public:
00070     ArmManipulationData(int id = 0, p3d_cntrt* ccCntrt = NULL, p3d_cntrt* fkCntrt = NULL, p3d_jnt *manipulationJnt = NULL, int cartesianGroup = -1, int cartesianSmGroup = -1, int handGroup = -1, int handSmGroup = -1){
00071        _id = id;
00072       _ccCntrt = ccCntrt;
00073       _fkCntrt = fkCntrt;
00074       _manipulationJnt = manipulationJnt;
00075       if(_ccCntrt == NULL){
00076         _tAtt[0][0] = _tAtt[0][1] = _tAtt[0][2] = _tAtt[0][3] =  0;
00077       }else{
00078         p3d_mat4Copy(_ccCntrt->Tatt, _tAtt);
00079       }
00080       _carriedObject = NULL;
00081       _placement = NULL;
00082       _human = NULL;
00083       _cartesian = false;
00084     };
00085 
00086     virtual ~ArmManipulationData(){};
00087 
00088     /*************/
00089     /* Functions */
00090     /*************/
00092     void fixHand(p3d_rob* robot, bool rest);
00094     void unFixHand(p3d_rob* robot);
00096     void deactivateManipulationCntrts(p3d_rob* robot);
00097 
00098     /***********/
00099     /* Setters */
00100     /***********/
00101     inline void setId(int id) {
00102       _id = id;
00103     }
00104     inline void setCcCntrt(p3d_cntrt* ccCntrt){
00105       _ccCntrt = ccCntrt;
00106     };
00107     inline void setCcCntrt(p3d_rob* robot, int id){
00108       _ccCntrt = robot->cntrt_manager->cntrts[id];
00109     };
00110     inline void setFkCntrt(p3d_cntrt* fkCntrt){
00111       _fkCntrt = fkCntrt;
00112     };
00113     inline void setFkCntrt(p3d_rob* robot, int id){
00114       _fkCntrt = robot->cntrt_manager->cntrts[id];
00115     };
00116     inline void setManipulationJnt(p3d_jnt* manipulationJnt){
00117       _manipulationJnt = manipulationJnt;
00118     };
00119     inline void setManipulationJnt(p3d_rob* robot, int manipulationJnt){
00120       _manipulationJnt = robot->joints[manipulationJnt];
00121     };
00122     inline void setAttachFrame(p3d_matrix4 tAtt){
00123       p3d_mat4Copy(tAtt, _tAtt);
00124     }
00125                 inline void setCarriedObject(p3d_rob* carriedObject){
00126                         _carriedObject = carriedObject;
00127                 };
00128                 inline void setCarriedObject(const char* robotName){
00129       if(robotName){
00130         _carriedObject = p3d_get_robot_by_name(robotName);
00131       }else{
00132         _carriedObject = NULL;
00133       }
00134                 };
00135     inline void setPlacement(p3d_rob* placement){
00136       _placement = placement;
00137     };
00138     inline void setHuman(p3d_rob* human){
00139       _human = human;
00140     };
00141 #ifdef GRASP_PLANNING
00142     inline void setHandProperties(int handId){
00143       _handProp.initialize((gpHand_type)handId);
00144     };
00145 #endif
00146     inline void setCartesian(bool cartesian){
00147       _cartesian = cartesian;
00148     };
00149 
00150     /***********/
00151     /* Getters */
00152     /***********/
00153     inline int getId() {
00154       return _id;
00155     }
00156     inline p3d_cntrt* getCcCntrt(void) const{
00157       return _ccCntrt;
00158     };
00159     inline p3d_cntrt* getFkCntrt(void) const{
00160       return _fkCntrt;
00161     };
00162     inline p3d_jnt* getManipulationJnt(void) const{
00163       return _manipulationJnt;
00164     };
00165     inline void getAttachFrame(p3d_matrix4 tAtt) const{
00166       p3d_mat4Copy((p3d_matrix_type(*)[4])_tAtt, tAtt);
00167     }
00168     inline p3d_rob* getCarriedObject(void) const{
00169       return _carriedObject;
00170     };
00171     inline p3d_rob* getPlacement(void) const{
00172       return _placement;
00173     };
00174     inline p3d_rob* getHuman(void) const{
00175       return _human;
00176     };
00177 #ifdef GRASP_PLANNING
00178     inline gpHand_properties getHandProperties() const{
00179       return _handProp;
00180     };
00181 #endif
00182     inline bool getCartesian(void) const{
00183       return _cartesian;
00184     };
00185   
00186         private :
00188   int _id;
00189 
00190         /***************/
00191         /* Constraints */
00192         /***************/
00194         p3d_cntrt * _ccCntrt;
00196         p3d_cntrt * _fkCntrt;
00198   p3d_matrix4 _tAtt;
00200         p3d_jnt * _manipulationJnt;
00202         bool _cartesian;
00203         
00204         /************************/
00205         /* Manipulation Objects */
00206         /************************/
00208         p3d_rob* _carriedObject;
00210         p3d_rob* _placement;
00212         p3d_rob* _human;
00213         
00214 #ifdef GRASP_PLANNING
00215         /************/
00216         /* Grasping */
00217         /************/
00219         gpHand_properties _handProp;
00220 #endif
00221         
00222 };
00223 
00228 class ManipulationData{
00229   public:
00230     ManipulationData(p3d_rob* robot){
00231       _robot = robot;
00232 #ifdef GRASP_PLANNING
00233       _grasp = NULL;
00234 #endif
00235       _graspConfig = NULL;
00236       _graspConfigCost = P3D_HUGE;
00237       _openConfig = NULL;
00238       _approachFreeConfig = NULL;
00239       _approachGraspConfig = NULL;
00240       _graspAttachFrame[0][0] = _graspAttachFrame[0][1] = _graspAttachFrame[0][2] = _graspAttachFrame[0][3] =  0;
00241     };
00242 #ifdef GRASP_PLANNING   
00243     ManipulationData(p3d_rob* robot, gpGrasp* grasp, configPt graspConfig, configPt openConfig, configPt approachFreeConfig, configPt approachGraspConfig, p3d_matrix4 graspAttachFrame){
00244       _robot = robot;
00245       _grasp = grasp;
00246       _graspConfig = p3d_copy_config(robot, graspConfig);
00247       _graspConfigCost = P3D_HUGE;
00248       _openConfig = p3d_copy_config(robot, openConfig);
00249       _approachFreeConfig = p3d_copy_config(robot, approachFreeConfig);
00250       _approachGraspConfig = p3d_copy_config(robot, approachGraspConfig);
00251       p3d_mat4Copy(graspAttachFrame ,_graspAttachFrame);
00252     };
00253 #endif
00254     virtual ~ManipulationData(){
00255       if(_graspConfig){
00256         p3d_destroy_config(_robot, _graspConfig);
00257         _graspConfig = NULL;
00258       }
00259       if(_openConfig){
00260         p3d_destroy_config(_robot, _openConfig);
00261         _openConfig = NULL;
00262       }
00263       if(_approachFreeConfig){
00264         p3d_destroy_config(_robot, _approachFreeConfig);
00265         _approachFreeConfig = NULL;
00266       }
00267       if(_approachGraspConfig){
00268         p3d_destroy_config(_robot, _approachGraspConfig);
00269         _approachGraspConfig = NULL;
00270       }
00271 #ifdef GRASP_PLANNING
00272       if(_grasp){
00273         delete(_grasp);
00274         _grasp = NULL;
00275       }
00276 #endif
00277       
00278     }
00279     //Reset
00280     void clear(){
00281       if(_graspConfig){
00282         p3d_destroy_config(_robot, _graspConfig);
00283         _graspConfig = NULL;
00284       }
00285       if(_openConfig){
00286         p3d_destroy_config(_robot, _openConfig);
00287         _openConfig = NULL;
00288       }
00289       if(_approachFreeConfig){
00290         p3d_destroy_config(_robot, _approachFreeConfig);
00291         _approachFreeConfig = NULL;
00292       }
00293       if(_approachGraspConfig){
00294         p3d_destroy_config(_robot, _approachGraspConfig);
00295         _approachGraspConfig = NULL;
00296       }
00297       #ifdef GRASP_PLANNING
00298       if(_grasp){
00299         delete(_grasp);
00300         _grasp = NULL;
00301       }
00302       #endif
00303     }
00304     //Getters
00305     inline p3d_rob* getRobot() const{
00306       return _robot;
00307     }
00308 #ifdef GRASP_PLANNING
00309     inline gpGrasp* getGrasp() const{
00310       return _grasp;
00311     }
00312 #endif
00313     inline configPt getGraspConfig() const{
00314       return _graspConfig;
00315     }
00316     inline configPt getOpenConfig() const{
00317       return _openConfig;
00318     }
00319     inline configPt getApproachFreeConfig() const{
00320       return _approachFreeConfig;
00321     }
00322     inline configPt getApproachGraspConfig() const{
00323       return _approachGraspConfig;
00324     }
00325                 std::vector<configPt> getAllConfigs() const{
00326                         std::vector<configPt> vect(4);
00327                         vect[0] =  _graspConfig;
00328                         vect[1] =  _openConfig;
00329                         vect[2] =  _approachFreeConfig;
00330                         vect[3] =  _approachGraspConfig;
00331                         return vect;
00332                 }
00333     inline void getAttachFrame(p3d_matrix4 graspAttachFrame) const{
00334       p3d_mat4Copy((p3d_matrix_type(*)[4])_graspAttachFrame, graspAttachFrame);
00335     }
00336     inline double getGraspConfigCost() const{
00337       return _graspConfigCost;
00338     }
00339     //Setters
00340 #ifdef GRASP_PLANNING
00341     inline void setGrasp(gpGrasp* grasp){
00342       if(_grasp == grasp){
00343         return;
00344       }
00345                         if (!grasp) {
00346         if(_grasp){
00347           delete(_grasp);
00348         }
00349                                 _grasp = NULL;
00350                                 return;
00351                         }
00352       if(_grasp){
00353         delete(_grasp);
00354         _grasp = NULL;
00355       }
00356       _grasp = new gpGrasp(*grasp);
00357     }
00358 #endif
00359     inline void setGraspConfig(configPt graspConfig){
00360       if(graspConfig){
00361         if(_graspConfig){
00362           p3d_copy_config_into(_robot, graspConfig, &_graspConfig);
00363         }else{
00364           _graspConfig = p3d_copy_config(_robot, graspConfig);
00365         }
00366       }
00367     }
00368     inline void setOpenConfig(configPt openConfig){
00369       if(openConfig){
00370         if(_openConfig){
00371           p3d_copy_config_into(_robot, openConfig, &_openConfig);
00372         }else{
00373           _openConfig = p3d_copy_config(_robot, openConfig);
00374         }
00375       }
00376     }
00377     inline void setApproachFreeConfig(configPt approachFreeConfig){
00378       if(approachFreeConfig){
00379         if(_approachFreeConfig){
00380           p3d_copy_config_into(_robot, approachFreeConfig, &_approachFreeConfig);
00381         }else{
00382           _approachFreeConfig = p3d_copy_config(_robot, approachFreeConfig);
00383         }
00384       }
00385     }
00386     inline void setApproachGraspConfig(configPt approachGraspConfig){
00387       if(approachGraspConfig){
00388         if(_approachGraspConfig){
00389         p3d_copy_config_into(_robot, approachGraspConfig, &_approachGraspConfig);
00390         }else{
00391           _approachGraspConfig = p3d_copy_config(_robot, approachGraspConfig);
00392         }
00393       }
00394     }
00395     inline void setAttachFrame(p3d_matrix4 graspAttachFrame){
00396       p3d_mat4Copy(graspAttachFrame, _graspAttachFrame);
00397     }
00398     inline void setGraspConfigCost(double graspConfigCost){
00399       _graspConfigCost = graspConfigCost;
00400     }
00401     ManipulationData& operator = (const ManipulationData& data){
00402       _robot = data.getRobot();
00403 #ifdef GRASP_PLANNING
00404       setGrasp(data.getGrasp());
00405 #endif
00406       setGraspConfig(data.getGraspConfig());
00407       setOpenConfig(data.getOpenConfig());
00408       setApproachFreeConfig(data.getApproachFreeConfig());
00409       setApproachGraspConfig(data.getApproachGraspConfig());
00410       data.getAttachFrame(_graspAttachFrame);
00411       setGraspConfigCost(data.getGraspConfigCost());
00412       return *this;
00413     }
00414   private:
00415     p3d_rob* _robot;
00416 #ifdef GRASP_PLANNING
00417     gpGrasp* _grasp;
00418 #endif
00419     configPt _graspConfig;
00420     configPt _openConfig;
00421     configPt _approachFreeConfig;
00422     configPt _approachGraspConfig;
00423     double _graspConfigCost;
00424     p3d_matrix4 _graspAttachFrame;
00425 };
00426 #endif
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines