libmove3d  3.13.0
/home/slemaign/softs-local/BioMove3D-git/lightPlanner/proto/Manipulation.h
00001 #ifndef __MANIPULATION_H__
00002 #define __MANIPULATION_H__
00003 
00004 #if defined (GRASP_PLANNING) && defined (LIGHT_PLANNER)
00005 
00006 #include <vector>
00007 #include <map>
00008 
00009 #include "GraspPlanning-pkg.h"
00010 
00011 #include "P3d-pkg.h"
00012 #include <list>
00013 
00014 #include "ManipulationStruct.h"
00015 #include "ManipulationUtils.hpp"
00016 
00018 class DoubleGraspData{
00019   public:
00020   DoubleGraspData(p3d_rob* robot){
00021     _robot = robot;
00022     _config = p3d_alloc_config(robot);
00023   }
00024   DoubleGraspData(p3d_rob* robot, gpDoubleGrasp dGrasp, configPt cCConfig){
00025     _robot = robot;
00026     _doubleGrasp = dGrasp;
00027     _config = cCConfig;
00028   }
00029   virtual ~DoubleGraspData(){
00030     p3d_destroy_config(_robot, _config);
00031   }
00032   inline gpDoubleGrasp getDoubleGrasp(){
00033     return _doubleGrasp;
00034   }
00035   inline void setDoubleGrasp(gpDoubleGrasp doubleGrasp){
00036     _doubleGrasp = doubleGrasp;
00037   }
00038   inline configPt getConfig(){
00039     return _config;
00040   }
00041   inline void setConfig(configPt cCConfig){
00042     _config = cCConfig;
00043   }
00044   inline void setObjectExchangeMat(p3d_matrix4 objectExchangeMat){
00045     p3d_mat4Copy(objectExchangeMat, _objectExchangeMat);
00046   }
00047   inline void getObjectExchangeMat(p3d_matrix4 objectExchangeMat){
00048     p3d_mat4Copy(_objectExchangeMat, objectExchangeMat);
00049   }
00050   private:
00051   p3d_rob* _robot;
00052   gpDoubleGrasp _doubleGrasp;
00053   p3d_matrix4 _objectExchangeMat;
00054   configPt _config;
00055 };
00056 
00058 class Manipulation{
00059   public :
00060     Manipulation(p3d_rob *robot);
00061     virtual ~Manipulation();
00062     void clear();
00063     void computeOfflineRoadmap(); 
00064     p3d_traj* computeRegraspTask(configPt startConfig, configPt gotoConfig, std::string offlineFile);
00065     p3d_traj* computeRegraspTask(configPt startConfig, configPt gotoConfig, std::string offlineFile, int whichTest);
00066   
00067     int findAllArmsGraspsConfigs(p3d_matrix4 objectStartPos, p3d_matrix4 objectEndPos);
00068     int findAllSpecificArmGraspsConfigs(int armId, p3d_matrix4 objectPos);
00069     double getCollisionFreeGraspAndApproach(p3d_matrix4 objectPos, gpHand_properties handProp, gpGrasp grasp, int whichArm, p3d_matrix4 tAtt, configPt* graspConfig, configPt* approachConfig);
00070     void computeExchangeMat(configPt startConfig, configPt gotoConfig);
00071     void computeDoubleGraspConfigList();
00072     inline void setExchangeMat(p3d_matrix4 exchangeMat){
00073       p3d_mat4Copy(exchangeMat, _exchangeMat);
00074     }
00075     inline void getExchangeMat(p3d_matrix4 exchangeMat){
00076       p3d_mat4Copy(_exchangeMat, exchangeMat);
00077     }
00078     void drawSimpleGraspConfigs();
00079     void drawDoubleGraspConfigs();
00080     void printStatDatas();
00081   
00082   protected:
00083     double getRobotGraspArmCost(gpGrasp grasp, configPt q);
00084     int getCollisionFreeDoubleGraspAndApproach(p3d_matrix4 objectPos, std::vector<gpHand_properties> armsProp, gpDoubleGrasp doubleGrasp, configPt* doubleGraspConfig);
00085     std::vector<gpHand_properties> InitHandProp(int armId);
00086     std::list<gpGrasp>* getGraspListFromMap(int armId);
00087     int checkTraj(p3d_traj * traj, p3d_graph* graph);
00088   
00089   private :
00090     std::map < int, std::map<int, ManipulationData*, std::less<int> >, std::less<int> > _handsGraspsConfig;
00091     std::list<DoubleGraspData*> _handsDoubleGraspsConfigs;
00092     p3d_rob * _robot;
00093     p3d_graph * _offlineGraph;
00094     static const int _maxColGrasps = 10;
00095     p3d_matrix4 _exchangeMat;
00096     std::vector<std::vector<double> > _statDatas;
00097 };
00098 
00099 
00100 
00102 class  Manipulation_JIDO {
00103   private :
00104      p3d_rob * _robotPt; 
00105      p3d_rob * _hand_robotPt;  
00106      //gpHand_type _handType;
00107      gpHand_properties _handProp;  
00108      std::list<gpGrasp> _graspList; 
00109      gpGrasp _grasp;   
00110      unsigned int _graspID; 
00111      gpPlacement _placement;   
00112      p3d_jnt *_cameraJnt; 
00113      double _cameraFOV; 
00114      int _cameraImageWidth, _cameraImageHeight; 
00116      configPt _configStart;
00117      configPt _configGoto;
00118 
00119      std::vector<configPt> _configTraj; 
00121      double _liftUpDistance;  
00123      int _nbGraspsToTestForPickGoto; 
00125 
00126      double _placementTranslationStep; 
00127      double _placementNbOrientations; 
00128      double _placementOffset; 
00130      double _QCUR[6];
00131      double _QGOAL[6];
00132      double _XCUR[6];
00133      double _XGOAL[6];
00134      double _qrest[6];  
00136      p3d_rob *_object; 
00137      p3d_rob *_support; 
00138      p3d_rob *_human; 
00140      std::list<gpPlacement> _placementList; 
00141      std::list<gpPlacement> _placementOnSupportList; 
00142      bool _capture;
00143      bool _cartesian; 
00144      bool _objectGrabed; // not used for now (redundent with robot->isCarryingObject)
00145  public:
00146      bool displayGrasps; 
00147      bool displayPlacements; 
00148      std::vector < std::vector <double> > positions;
00149      std::vector <int> lp;
00150  public :
00151      Manipulation_JIDO(p3d_rob * robotPt, gpHand_type handType);
00152      virtual ~Manipulation_JIDO();
00153      void clear();
00154 
00155      configPt robotStart();
00156      configPt robotGoto();
00157      configPt robotRest();
00158 
00159      void setCapture(bool v);
00160      bool getCapture();
00161      int centerCamera();
00162      int forbidWindowEvents();
00163      int allowWindowEvents();
00164      /*Functions relative to JIDO */
00165      int setArmQ(double q1, double q2, double q3, double q4, double q5, double q6);
00166      int getArmQ(double *q1, double *q2, double *q3, double *q4, double *q5, double *q6);
00167      int setArmX(double x, double y, double z, double rx, double ry, double rz);
00168      int setArmX(double x, double y, double z, unsigned int nbTries= 30);
00169      int getArmX(double* x, double* y, double* z, double* rx, double* ry, double* rz);
00170      void setArmCartesian(bool v);
00171      bool getArmCartesian();
00172      int setArmTask(MANIPULATION_TASK_TYPE_STR t);
00173      int setObjectToManipulate(char *objectName);
00174      int setSupport(char *supportName);
00175      int setHuman(char *humanName);
00176      int setCameraJnt(char *cameraJntName);
00177      int setCameraFOV(double fov);
00178      int setCameraImageSize(int width, int height);
00179      int setNbGraspsToTestForPickGoto(int n);
00180      int reduceGraspList(int maxSize);
00181      int printConstraintInfo();
00182      int setPoseWrtEndEffector(double x, double y, double z, double rx, double ry, double rz, configPt q);
00183      int dynamicGrasping(char *robot_name, char *hand_robot_name, char *object_name);
00184      int robotBaseGraspConfig(char *objectName, double *x, double *y, double *theta);
00185      MANIPULATION_TASK_MESSAGE armPlanTask(MANIPULATION_TASK_TYPE_STR task, configPt qStart, configPt qGoal, char* objectName, std::vector <int> &lp, std::vector < std::vector <double> > &positions);
00186 
00187   
00188      int armComputePRM();
00189      
00190      int cleanRoadmap();
00191      int cleanTraj();
00192 
00193      int grabObject(char* objectName);
00194      int releaseObject();
00195 
00196      void draw();
00197  
00198      int setLiftUpDistance(double dist) {
00199        _liftUpDistance= fabs(dist); 
00200        return 0;
00201      }
00202      double liftUpDistance() {
00203        return _liftUpDistance;
00204      }
00205      
00206      /* Functions relative to other robots */
00207      int setFreeflyerPose(p3d_rob *robotPt, double x, double y, double z, double rx, double ry, double rz);
00208      int getObjectPose(p3d_matrix4 pose);
00209      int getObjectPose(double *x, double *y, double *z, double *rx, double *ry, double *rz);
00210      int setFreeflyerPoseByName(char *name, double x, double y, double z, double rx, double ry, double rz);
00211      p3d_obj * getObjectByName(char *object_name);
00212      int setObjectPoseWrtEndEffector(double x, double y, double z, double rx, double ry, double rz);
00213 
00214      /* Functions relative to object grasping */
00215     int findPregraspAndGraspConfiguration(double distance, double *pre_q1, double *pre_q2, double *pre_q3, double *pre_q4, double *pre_q5, double *pre_q6, double *q1, double *q2, double *q3, double *q4, double *q5, double *q6);
00216     bool isObjectGraspable(char *objectName);
00217 
00218      /* Functions relative to object placement */
00219     int findPlacementConfigurations(double distance, double *pre_q1, double *pre_q2, double *pre_q3, double *pre_q4, double *pre_q5, double *pre_q6, double *q1, double *q2, double *q3, double *q4, double *q5, double *q6);
00220 
00221     int addConfigTraj(configPt config);
00222     int clearConfigTraj();
00223     int copyConfigTrajToFORM();
00224     int destroyTrajectories();
00225     int checkCollisionOnTraj();
00226     int checkCollisionOnTraj(int currentLpId);
00227     int replanCollidingTraj(int currentLpId, std::vector <int> &lp, std::vector < std::vector <double> > &positions);
00228   protected:
00229      /*Functions relative to JIDO */
00230      int computeTrajBetweenTwoConfigs(bool cartesian, configPt qi, configPt qf);
00231      int computeGraspList();
00232      int findSimpleGraspConfiguration(double *q1, double *q2, double *q3, double *q4, double *q5, double *q6);
00233      int computePlacementList();
00234      int markGraspAsTested(int id);
00235 
00236      int computeRRT();
00237      int computeOptimTraj();
00238 };
00239 
00240 #endif
00241 
00242 #endif
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines