libmove3d
3.13.0
|
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