Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Modules/BehaviorControl/GT2004BehaviorControl/GT2004Symbols/GT2004ConfigurationSymbols.cpp

Go to the documentation of this file.
00001 /** 
00002 * @file GT2004ConfigurationSymbols.cpp
00003 *
00004 * Implementation of class GT2004ConfigurationSymbols.
00005 *
00006 * @author Max Risler
00007 */
00008 
00009 #include "GT2004ConfigurationSymbols.h"
00010 
00011 GT2004ConfigurationSymbols::GT2004ConfigurationSymbols(
00012                            BehaviorControlInterfaces& interfaces)
00013 : BehaviorControlInterfaces(interfaces)
00014 {
00015   currentKickoff = 0;
00016     // start position for goalie (both kickoffs)
00017     goalie.x = -2000.0;
00018     goalie.y = 50;
00019     // start position for defensive supporter (both kickoffs)
00020     defensiveSupporter.x = -1000.0;
00021     defensiveSupporter.y = -200.0;
00022 
00023     // start position for offensive supporter (opponent kickoffs)
00024     offensiveSupporterOpponentKickoff.x = -1000.0;
00025     offensiveSupporterOpponentKickoff.y = -800.0;
00026     // start position for striker (opponent kickoffs)
00027     strikerOpponentKickoff.x = -1000.0;
00028     strikerOpponentKickoff.y = 500.0;
00029 
00030     // long kickoff to the right
00031     offensiveSupporterOwnKickoff[0].x = -100.0;
00032     offensiveSupporterOwnKickoff[0].y = -800.0;
00033     offensiveSupporterOwnKickoffAngle[0] = 0.0;
00034     strikerOwnKickoff[0].x = -130.0;
00035     strikerOwnKickoff[0].y = 130.0;
00036     strikerOwnKickoffAngle[0] = -45.0;
00037 
00038     // long kickoff to the left
00039     offensiveSupporterOwnKickoff[1].x = -100.0;
00040     offensiveSupporterOwnKickoff[1].y = 800.0;
00041     offensiveSupporterOwnKickoffAngle[1] = 0.0;
00042     strikerOwnKickoff[1].x = -130.0;
00043     strikerOwnKickoff[1].y = -130.0;
00044     strikerOwnKickoffAngle[1] = 45.0;
00045 
00046 }
00047 
00048 void GT2004ConfigurationSymbols::registerSymbols(Xabsl2Engine& engine)
00049 {
00050   engine.registerDecimalInputSymbol("current-kickoff-variant",this,
00051     (double (Xabsl2FunctionProvider::*)())&GT2004ConfigurationSymbols::getCurrentKickoff);
00052 
00053   engine.registerDecimalInputSymbol("own-kickoff.angle",this,
00054     (double (Xabsl2FunctionProvider::*)())&GT2004ConfigurationSymbols::getOwnKickoffAngle);
00055   engine.registerDecimalInputSymbol("own-kickoff.x",this,
00056     (double (Xabsl2FunctionProvider::*)())&GT2004ConfigurationSymbols::getOwnKickoffX);
00057   engine.registerDecimalInputSymbol("own-kickoff.y",this,
00058     (double (Xabsl2FunctionProvider::*)())&GT2004ConfigurationSymbols::getOwnKickoffY);
00059 
00060   engine.registerDecimalInputSymbol("opponent-kickoff.angle",this,
00061     (double (Xabsl2FunctionProvider::*)())&GT2004ConfigurationSymbols::getOpponentKickoffAngle);
00062   engine.registerDecimalInputSymbol("opponent-kickoff.x",this,
00063     (double (Xabsl2FunctionProvider::*)())&GT2004ConfigurationSymbols::getOpponentKickoffX);
00064   engine.registerDecimalInputSymbol("opponent-kickoff.y",this,
00065     (double (Xabsl2FunctionProvider::*)())&GT2004ConfigurationSymbols::getOpponentKickoffY);
00066 }
00067 
00068 void GT2004ConfigurationSymbols::update()
00069 {
00070   currentKickoff = gameControlData.data.opponentScore % numOfKickoff;
00071 
00072   // calculate kickoff position of striker based on obstacle-model
00073   double radius = 250.0;
00074 
00075   double leftAbs = fromDegrees(10.0);
00076   double rightAbs = fromDegrees(55.0);
00077   double freeWidth = fromDegrees(15.0);
00078 
00079   double step = fromDegrees(5.0);
00080   double bestAngle = 0.0;
00081   double bestDist = 0.0;
00082   
00083   double start = 0.0, end = 0.0;
00084   enum { left, right } direction = left;
00085 
00086   switch (currentKickoff % 2)
00087   {
00088     case 0: // right
00089       start = -1 * leftAbs;
00090       end = -1 * rightAbs;
00091       step *= -1;
00092       direction = right;
00093       break;
00094     case 1: // left
00095       start = leftAbs;
00096       end = rightAbs;
00097       step = step;
00098       direction = left;
00099       break;
00100   }
00101 
00102   for(
00103     double ang = start;
00104     (direction == left && ang <= end) || (direction == right && ang >= end);
00105     ang += step
00106   )
00107   {
00108     double currDist = obstaclesModel.getDistanceInCorridor(ang, freeWidth);
00109     double angAbs = ang - robotPose.getAngle();
00110     currDist = obstaclesModel.getDistanceInDirection(angAbs, freeWidth);
00111     if(currDist > bestDist)
00112     {
00113       bestDist = currDist;
00114       bestAngle = ang;
00115     }
00116   }
00117 
00118   double posX = - cos ( bestAngle ) * radius;
00119   double posY = - sin ( bestAngle ) * radius;
00120 
00121   obstacleKickoff.translation.x = posX;
00122   obstacleKickoff.translation.y = posY;
00123   obstacleKickoff.fromAngle(toDegrees(bestAngle));
00124 }
00125 
00126 double GT2004ConfigurationSymbols::getCurrentKickoff()
00127 {
00128   return currentKickoff;
00129 }
00130 
00131 double GT2004ConfigurationSymbols::getOwnKickoffAngle()
00132 {
00133   switch (getPlayer().getPlayerNumber())
00134   {
00135     case Player::one: // robot number 1
00136     case Player::two: // robot number 2
00137     default:
00138       return 0;
00139     case Player::three: // robot number 3
00140       return offensiveSupporterOwnKickoffAngle[currentKickoff];
00141     case Player::four: // robot number 4
00142       return getOwnKickoffAngleByObstacles();
00143       //return strikerOwnKickoffAngle[currentKickoff];
00144   }
00145 }
00146 
00147 double GT2004ConfigurationSymbols::getOwnKickoffX()
00148 {
00149   switch (getPlayer().getPlayerNumber())
00150   {
00151     case Player::one: // robot number 1
00152     default:
00153       return goalie.x;
00154     case Player::two: // robot number 2
00155       return defensiveSupporter.x;
00156     case Player::three: // robot number 3
00157       return offensiveSupporterOwnKickoff[currentKickoff].x;
00158     case Player::four: // robot number 4
00159       return getOwnKickoffXByObstacles();
00160       //return strikerOwnKickoff[currentKickoff].x;
00161   }
00162 }
00163 
00164 double GT2004ConfigurationSymbols::getOwnKickoffY()
00165 {
00166   switch (getPlayer().getPlayerNumber())
00167   {
00168     case Player::one: // robot number 1
00169     default:
00170       return goalie.y;
00171     case Player::two: // robot number 2
00172       return defensiveSupporter.y;
00173     case Player::three: // robot number 3
00174       return offensiveSupporterOwnKickoff[currentKickoff].y;
00175     case Player::four: // robot number 4
00176       return getOwnKickoffYByObstacles();
00177       //return strikerOwnKickoff[currentKickoff].y;
00178   }
00179 }
00180 
00181 double GT2004ConfigurationSymbols::getOwnKickoffXByObstacles()
00182 {
00183   return obstacleKickoff.translation.x;
00184 }
00185 
00186 double GT2004ConfigurationSymbols::getOwnKickoffYByObstacles()
00187 {
00188   return obstacleKickoff.translation.y;
00189 }
00190 
00191 double GT2004ConfigurationSymbols::getOwnKickoffAngleByObstacles()
00192 {
00193   return obstacleKickoff.getAngle();
00194 }
00195 
00196 double GT2004ConfigurationSymbols::getOpponentKickoffAngle()
00197 {
00198   switch (getPlayer().getPlayerNumber())
00199   {
00200     case Player::one: // robot number 1
00201     case Player::two: // robot number 2
00202     case Player::three: // robot number 3
00203     case Player::four: // robot number 4
00204     default:
00205       return 0;
00206   }
00207 }
00208 
00209 double GT2004ConfigurationSymbols::getOpponentKickoffX()
00210 {
00211   switch (getPlayer().getPlayerNumber())
00212   {
00213     case Player::one: // robot number 1
00214     default:
00215       return goalie.x;
00216     case Player::two: // robot number 2
00217       return defensiveSupporter.x;
00218     case Player::three: // robot number 3
00219       return offensiveSupporterOpponentKickoff.x;
00220     case Player::four: // robot number 4
00221       return strikerOpponentKickoff.x;
00222   }
00223 }
00224 
00225 double GT2004ConfigurationSymbols::getOpponentKickoffY()
00226 {
00227   switch (getPlayer().getPlayerNumber())
00228   {
00229     case Player::one: // robot number 1
00230     default:
00231       return goalie.y;
00232     case Player::two: // robot number 2
00233       return defensiveSupporter.y;
00234     case Player::three: // robot number 3
00235       return offensiveSupporterOpponentKickoff.y;
00236     case Player::four: // robot number 4
00237       return strikerOpponentKickoff.y;
00238   }
00239 }
00240 
00241 /*
00242 * Change Log
00243 * 
00244 * $Log: GT2004ConfigurationSymbols.cpp,v $
00245 * Revision 1.3  2004/09/08 12:41:43  wachter
00246 * - Fixed some warnings
00247 * - Fixed some documentation in network-code
00248 *
00249 * Revision 1.2  2004/07/02 16:52:55  thomas
00250 * modified kickoff
00251 * - striker positioning to angle based on obstacle-model
00252 * - supporter not so near to side-border and a bit more away from middle-line
00253 *
00254 * Revision 1.1.1.1  2004/05/22 17:18:02  cvsadm
00255 * created new repository GT2004_WM
00256 *
00257 * Revision 1.1  2004/05/02 13:23:45  juengel
00258 * Added GT2004BehaviorControl.
00259 *
00260 */
00261 

Generated on Thu Sep 23 19:57:26 2004 for GT2004 by doxygen 1.3.6