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