Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

GrasperRequest.cc

Go to the documentation of this file.
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   // Don't also delete objectPlannerObstacle because its value was included in plannerObstacles
00095 }
00096 
00097 GrasperRequest::GrasperErrorType_t GrasperRequest::validateRequest() {
00098   // If grasper action requires an object, make sure that one was supplied
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   // If grasper action requires a taget location, make sure that one was supplied
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

Tekkotsu v5.1CVS
Generated Fri Mar 16 05:26:41 2012 by Doxygen 1.6.3