00001 #include "Shared/RobotInfo.h"
00002 #if (defined(TGT_HAS_ARMS) || !defined(STRICT_TGT_MODEL)) && !defined(TGT_IS_AIBO)
00003
00004 #if defined(TGT_HANDEYE) or defined(TGT_CHIARA) or defined(TGT_CHIARA2)
00005 # include "Crew/CBracketGrasperPredicate.h"
00006 #endif
00007 #include "Crew/GrasperRequest.h"
00008
00009 GrasperRequest::GrasperRequest(GrasperRequestType_t _type) :
00010 objectPlannerObstacle(NULL),
00011 requestType(_type),
00012 restType(GrasperRequest::stationary),
00013 armRestState(),
00014 setVerbosity(0),
00015 clearVerbosity(0),
00016 effectorOffset(),
00017 rrtMaxIterations(2000),
00018 rrtInflation(10),
00019 rrtInterpolationStep(),
00020 armTimeFactor(1.0f),
00021 openGripperOnRest(false),
00022 object(),
00023 targetLocation(),
00024 gripperAngleRangesX(),
00025 gripperAngleRangesY(),
00026 gripperAngleRangesZ(),
00027 maxNumberOfAngles(1000000000),
00028 angleResolution((float)M_PI/12),
00029 sweepObjects(),
00030 envObstacles(),
00031 plannerObstacles(),
00032 moveConstrainedPath(),
00033 moveFreePath(),
00034 disengagePath(),
00035 predicate(NULL),
00036 displayPath(false),
00037 displayTree(false),
00038 requestingBehavior(),
00039 verbosity(0),
00040 populateEventPathWith(noPath),
00041 requestID(0)
00042 {
00043 #if defined(TGT_HANDEYE) or defined(TGT_CHIARA) or defined(TGT_CHIARA2)
00044 predicate = new CBracketGrasperPredicate<NumArmJoints>();
00045 effectorOffset = RobotInfo::GripperFrameOffset;
00046 #endif
00047 #if defined(TGT_CHIARA) or defined(TGT_CHIARA2)
00048 restType = GrasperRequest::settleBodyAndArm;
00049 #endif
00050 for (unsigned int i = 0; i < NumArmJoints; i++) {
00051 armRestState[i] = 0.0f;
00052 rrtInterpolationStep[i] = M_PI / 180;
00053 }
00054 }
00055
00056 GrasperRequest::GrasperRequest(const GrasperRequest &req) :
00057 objectPlannerObstacle(req.objectPlannerObstacle),
00058 requestType(req.requestType),
00059 restType(req.restType),
00060 armRestState(req.armRestState),
00061 setVerbosity(req.setVerbosity), clearVerbosity(req.clearVerbosity),
00062 effectorOffset(req.effectorOffset),
00063 rrtMaxIterations(req.rrtMaxIterations),
00064 rrtInflation(req.rrtInflation),
00065 rrtInterpolationStep(req.rrtInterpolationStep),
00066 armTimeFactor(req.armTimeFactor),
00067 openGripperOnRest(req.openGripperOnRest),
00068 object(req.object),
00069 targetLocation(req.targetLocation),
00070 gripperAngleRangesX(req.gripperAngleRangesX),
00071 gripperAngleRangesY(req.gripperAngleRangesY),
00072 gripperAngleRangesZ(req.gripperAngleRangesZ),
00073 maxNumberOfAngles(req.maxNumberOfAngles),
00074 angleResolution(req.angleResolution),
00075 sweepObjects(req.sweepObjects),
00076 envObstacles(req.envObstacles),
00077 plannerObstacles(req.plannerObstacles),
00078 moveConstrainedPath(req.moveConstrainedPath),
00079 moveFreePath(req.moveFreePath),
00080 disengagePath(req.disengagePath),
00081 predicate(req.predicate),
00082 displayPath(req.displayPath),
00083 displayTree(req.displayTree),
00084 requestingBehavior(req.requestingBehavior),
00085 verbosity(req.verbosity),
00086 populateEventPathWith(req.populateEventPathWith),
00087 requestID(req.requestID)
00088 {}
00089
00090 GrasperRequest::~GrasperRequest() {
00091 for (unsigned i = 0; i < plannerObstacles.size(); i++)
00092 delete plannerObstacles[i];
00093 plannerObstacles.clear();
00094
00095 }
00096
00097 GrasperRequest::GrasperErrorType_t GrasperRequest::validateRequest() {
00098
00099 switch ( requestType ) {
00100 case checkGraspable:
00101 case checkMovable:
00102 case computeMove:
00103 case grasp:
00104 case computeReach:
00105 case reach:
00106 case touch:
00107 case moveTo:
00108 if ( ! object.isValid() ) {
00109 cout << "GrasperRequest of this type requires a valid 'object' field. " << endl;
00110 return invalidRequest;
00111 }
00112 break;
00113 default:
00114 break;
00115 }
00116
00117
00118 switch ( requestType ) {
00119 case checkMovable:
00120 case computeMove:
00121 case grasp:
00122 case computeReach:
00123 case reach:
00124 case moveTo:
00125 if ( ! targetLocation.isValid() ) {
00126 cout << "GrasperRequest of this type requires a valid 'targetLocation' field. " << endl;
00127 return invalidRequest;
00128 }
00129 break;
00130 default:
00131 break;
00132 }
00133
00134 if (armTimeFactor < 0) {
00135 cout << "Grasper request has armTimeFactor < 0: changing to 1." << endl;
00136 armTimeFactor = 1;
00137 }
00138
00139 return noError;
00140 }
00141
00142 #endif