00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "GT2005PotentialFieldBasicBehaviors.h"
00010 #include "Tools/FieldDimensions.h"
00011
00012
00013
00014 GT2005PotentialFieldBasicBehaviorSupport::GT2005PotentialFieldBasicBehaviorSupport(
00015 const BehaviorControlInterfaces& interfaces,
00016 Xabsl2ErrorHandler& errorHandler):
00017 GT2005PotentialFieldBasicBehavior(interfaces, errorHandler, "potential-field-support","GT2005/support.pfc")
00018 {
00019 registerParameter("potential-field-support.x", x);
00020 registerParameter("potential-field-support.y", y);
00021 registerParameter("potential-field-support.max-speed", maxSpeed);
00022 }
00023
00024
00025 void GT2005PotentialFieldBasicBehaviorSupport::execute()
00026 {
00027 Pose2D destination(0.0,x,y);
00028 Pose2D dummy;
00029 potentialfields.execute(robotPose, ballModel, playerPoseCollection,
00030 obstaclesModel, teamMessageCollection, destination, dummy, 1, result);
00031 motionRequest.motionType = MotionRequest::walk;
00032 motionRequest.walkRequest.walkType = WalkRequest::normal;
00033
00034 Vector2<double> relVec(-robotPose.translation + destination.translation);
00035 double distanceToPoint(relVec.abs());
00036 if(fabs(result.motion.speed) > 1.0) result.motion.speed = 1.0;
00037 motionRequest.walkRequest.walkParams.translation.x = maxSpeed * result.motion.speed * result.motion.pos.x;
00038 motionRequest.walkRequest.walkParams.translation.y = maxSpeed * result.motion.speed * result.motion.pos.y;
00039 motionRequest.walkRequest.walkParams.rotation = result.motion.rotation;
00040 if((distanceToPoint < 50.0) && fabs(toDegrees(result.motion.rotation)) < 15)
00041 {
00042 motionRequest.motionType = MotionRequest::stand;
00043 }
00044 else if(distanceToPoint < 50.0)
00045 {
00046 motionRequest.walkRequest.walkParams.translation.x = 0.0;
00047 motionRequest.walkRequest.walkParams.translation.y = 0.0;
00048 }
00049 else if(distanceToPoint < 300.0)
00050 {
00051 motionRequest.walkRequest.walkParams.translation *= distanceToPoint/300.0;
00052 }
00053 }
00054
00055
00056 GT2005PotentialFieldBasicBehaviorOffensiveSupport::GT2005PotentialFieldBasicBehaviorOffensiveSupport(
00057 const BehaviorControlInterfaces& interfaces,
00058 Xabsl2ErrorHandler& errorHandler):
00059 GT2005PotentialFieldBasicBehavior(interfaces, errorHandler, "potential-field-offensive-support","GT2005/offsupp.pfc")
00060 {
00061 registerParameter("potential-field-offensive-support.x", x);
00062 registerParameter("potential-field-offensive-support.y", y);
00063 registerParameter("potential-field-offensive-support.max-speed", maxSpeed);
00064 }
00065
00066
00067 void GT2005PotentialFieldBasicBehaviorOffensiveSupport::execute()
00068 {
00069 Pose2D destination(0.0,x,y);
00070
00071 Pose2D destination2;
00072 Vector2<double> knownBallPos(ballModel.getKnownPosition(BallModel::behaviorControlTimeAfterWhichCommunicatedBallsAreAccepted));
00073 Vector2<double> knownBallPosRobotRelative(Geometry::vectorTo(robotPose, knownBallPos));
00074 Vector2<double> rP(robotPose.translation);
00075
00076 Vector2<double> absGoalVec((double)xPosOpponentGoal,0.0);
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088 destination2.translation = knownBallPos;
00089
00090 potentialfields.execute(robotPose, ballModel, playerPoseCollection,
00091 obstaclesModel, teamMessageCollection, destination, destination2, 2, result);
00092
00093 motionRequest.motionType = MotionRequest::walk;
00094 motionRequest.walkRequest.walkType = WalkRequest::normal;
00095
00096 Vector2<double> relVec(-robotPose.translation + destination.translation);
00097 double distanceToPoint(relVec.abs());
00098 if(fabs(result.motion.speed) > 1.0) result.motion.speed = 1.0;
00099 motionRequest.walkRequest.walkParams.translation.x = maxSpeed * result.motion.speed * result.motion.pos.x;
00100 motionRequest.walkRequest.walkParams.translation.y = maxSpeed * result.motion.speed * result.motion.pos.y;
00101 motionRequest.walkRequest.walkParams.rotation = result.motion.rotation;
00102 if((distanceToPoint < 50.0) && fabs(toDegrees(result.motion.rotation)) < 15)
00103 {
00104 motionRequest.motionType = MotionRequest::stand;
00105 }
00106 else if(distanceToPoint < 50.0)
00107 {
00108 motionRequest.walkRequest.walkParams.translation.x = 0.0;
00109 motionRequest.walkRequest.walkParams.translation.y = 0.0;
00110 }
00111 else if(distanceToPoint < 300.0)
00112 {
00113 motionRequest.walkRequest.walkParams.translation *= distanceToPoint/300.0;
00114 }
00115 }
00116
00117
00118 GT2005PotentialFieldBasicBehaviorAvoidRobots::GT2005PotentialFieldBasicBehaviorAvoidRobots(
00119 const BehaviorControlInterfaces& interfaces,
00120 Xabsl2ErrorHandler& errorHandler):
00121 GT2005PotentialFieldBasicBehavior(interfaces, errorHandler, "potential-field-avoid-robots","GT2005/avoidbot.pfc")
00122 {
00123 registerParameter("potential-field-avoid-robots.x", x);
00124 registerParameter("potential-field-avoid-robots.y", y);
00125 registerParameter("potential-field-avoid-robots.max-speed", maxSpeed);
00126 }
00127
00128
00129 void GT2005PotentialFieldBasicBehaviorAvoidRobots::execute()
00130 {
00131 Pose2D destination(0.0,x,y);
00132 Pose2D dummy;
00133 potentialfields.execute(robotPose, ballModel, playerPoseCollection,
00134 obstaclesModel, teamMessageCollection, destination, dummy, 1, result);
00135 motionRequest.motionType = MotionRequest::walk;
00136 motionRequest.walkRequest.walkType = WalkRequest::normal;
00137
00138 Vector2<double> relVec(-robotPose.translation + destination.translation);
00139 double distanceToPoint(relVec.abs());
00140 if(fabs(result.motion.speed) > 1.0) result.motion.speed = 1.0;
00141 motionRequest.walkRequest.walkParams.translation.x = maxSpeed * result.motion.speed * result.motion.pos.x;
00142 motionRequest.walkRequest.walkParams.translation.y = maxSpeed * result.motion.speed * result.motion.pos.y;
00143 motionRequest.walkRequest.walkParams.rotation = result.motion.rotation;
00144 if((distanceToPoint < 50.0) && fabs(toDegrees(result.motion.rotation)) < 15)
00145 {
00146 motionRequest.motionType = MotionRequest::stand;
00147 }
00148 else if(distanceToPoint < 50.0)
00149 {
00150 motionRequest.walkRequest.walkParams.translation.x = 0.0;
00151 motionRequest.walkRequest.walkParams.translation.y = 0.0;
00152 }
00153 else if(distanceToPoint < 300.0)
00154 {
00155 motionRequest.walkRequest.walkParams.translation *= distanceToPoint/300.0;
00156 }
00157 }
00158