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

Modules/BehaviorControl/CommonXabsl2Symbols/ObstaclesSymbols.cpp

Go to the documentation of this file.
00001 /** 
00002 * @file ObstaclesSymbols.cpp
00003 *
00004 * Implementation of class ObstaclesSymbols.
00005 *
00006 * @author Matthias Jüngel
00007 */
00008 
00009 #include "ObstaclesSymbols.h"
00010 
00011 ObstaclesSymbols::ObstaclesSymbols(const BehaviorControlInterfaces& interfaces)
00012 : BehaviorControlInterfaces(interfaces)
00013 {
00014 }
00015 
00016 
00017 void ObstaclesSymbols::registerSymbols(Xabsl2Engine& engine)
00018 {
00019   // "obstacles.collision-front-left"
00020   engine.registerBooleanInputSymbol("obstacles.collision-front-left",this,
00021     (bool (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getCollisionFrontLeft);
00022   // "obstacles.collision-front-left"
00023   engine.registerBooleanInputSymbol("obstacles.collision-front-right",this,
00024     (bool (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getCollisionFrontRight);
00025   // "obstacles.collision-front-left"
00026   engine.registerBooleanInputSymbol("obstacles.collision-hind-left",this,
00027     (bool (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getCollisionHindLeft);
00028   // "obstacles.collision-front-left"
00029   engine.registerBooleanInputSymbol("obstacles.collision-hind-right",this,
00030     (bool (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getCollisionHindRight);
00031   // "obstacles.collision-front-left"
00032   engine.registerBooleanInputSymbol("obstacles.collision-head",this,
00033     (bool (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getCollisionHead);
00034   // "obstacles.collision-front-left"
00035   engine.registerBooleanInputSymbol("obstacles.collision-aggregate",this,
00036     (bool (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getCollisionAggregate);
00037 
00038   // "obstacles.consecutive-collision-time-front-left"
00039   engine.registerDecimalInputSymbol("obstacles.consecutive-collision-time-front-left",this,
00040     (double (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getConsecutiveCollisionTimeFrontLeft);
00041   // "obstacles.collision-consecutive-front-time-left"
00042   engine.registerDecimalInputSymbol("obstacles.consecutive-collision-time-front-right",this,
00043     (double (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getConsecutiveCollisionTimeFrontRight);
00044   // "obstacles.collision-consecutive-front-time-left"
00045   engine.registerDecimalInputSymbol("obstacles.consecutive-collision-time-hind-left",this,
00046     (double (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getConsecutiveCollisionTimeHindLeft);
00047   // "obstacles.collision-consecutive-front-time-left"
00048   engine.registerDecimalInputSymbol("obstacles.consecutive-collision-time-hind-right",this,
00049     (double (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getConsecutiveCollisionTimeHindRight);
00050   // "obstacles.collision-consecutive-front-time-left"
00051   engine.registerDecimalInputSymbol("obstacles.consecutive-collision-time-head",this,
00052     (double (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getConsecutiveCollisionTimeHead);
00053   // "obstacles.collision-consecutive-front-time-left"
00054   engine.registerDecimalInputSymbol("obstacles.consecutive-collision-time-aggregate",this,
00055     (double (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getConsecutiveCollisionTimeAggregate);
00056   engine.registerEnumeratedInputSymbol("obstacles.collision-side",this,
00057     (int (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getCollisionSide);
00058 
00059   engine.registerEnumeratedInputSymbolEnumElement("obstacles.collision-side","left",1);
00060   engine.registerEnumeratedInputSymbolEnumElement("obstacles.collision-side","middle",0);
00061   engine.registerEnumeratedInputSymbolEnumElement("obstacles.collision-side","right",2);
00062 
00063 
00064   // "obstacles.robot-is-stuck"
00065   engine.registerBooleanInputSymbol("obstacles.robot-is-stuck", &robotIsStuck);
00066   
00067   // "obstacles.close"
00068   engine.registerBooleanInputSymbol("obstacles.close", &obstaclesAreClose);
00069 
00070   // "obstacles.opponents-close-to-ball"
00071   engine.registerBooleanInputSymbol("obstacles.opponents-close-to-ball", &opponentsCloseToBall);
00072 }
00073 
00074 void ObstaclesSymbols::update()
00075 {
00076   // robot is stuck
00077   if(obstaclesModel.getPercentageOfLowDistanceObstaclesInRange(0, pi_2, 300) > 0.2)
00078   {
00079     robotIsStuck = true;
00080     obstaclesAreClose = true;
00081   }
00082   else
00083   {
00084     robotIsStuck = false;
00085     obstaclesAreClose = (obstaclesModel.getPercentageOfLowDistanceObstaclesInRange(0, pi_2, 500) > 0.15);
00086   }
00087 
00088   // opponents close to ball
00089   double angleWithMinDistance;
00090   opponentsCloseToBall = (obstaclesModel.getMinimalDistanceInRange(
00091     Geometry::angleTo(robotPose.getPose(), ballModel.seen),
00092     fromDegrees(45),
00093     angleWithMinDistance,
00094     ObstaclesPercept::opponent) < ((int)Geometry::distanceTo(robotPose.getPose(),ballModel.seen)) + 1000);
00095 }
00096 
00097 bool ObstaclesSymbols::getCollisionFrontLeft()
00098 {
00099   return robotState.getCollisionFrontLeft();
00100 }
00101 
00102 bool ObstaclesSymbols::getCollisionFrontRight()
00103 {
00104   return robotState.getCollisionFrontRight();
00105 }
00106 
00107 bool ObstaclesSymbols::getCollisionHindLeft()
00108 {
00109   return robotState.getCollisionHindLeft();
00110 }
00111 
00112 bool ObstaclesSymbols::getCollisionHindRight()
00113 {
00114   return robotState.getCollisionHindRight();
00115 }
00116 
00117 bool ObstaclesSymbols::getCollisionHead()
00118 {
00119   return robotState.getCollisionHead();
00120 }
00121 
00122 bool ObstaclesSymbols::getCollisionAggregate()
00123 {
00124   return robotState.getCollisionAggregate();
00125 }
00126 
00127 double ObstaclesSymbols::getConsecutiveCollisionTimeFrontLeft()
00128 {
00129   return robotState.getConsecutiveCollisionTimeFrontLeft();
00130 }
00131 
00132 double ObstaclesSymbols::getConsecutiveCollisionTimeFrontRight()
00133 {
00134   return robotState.getConsecutiveCollisionTimeFrontRight();
00135 }
00136 
00137 double ObstaclesSymbols::getConsecutiveCollisionTimeHindLeft()
00138 {
00139   return robotState.getConsecutiveCollisionTimeHindLeft();
00140 }
00141 
00142 double ObstaclesSymbols::getConsecutiveCollisionTimeHindRight()
00143 {
00144   return robotState.getConsecutiveCollisionTimeHindRight();
00145 }
00146 
00147 double ObstaclesSymbols::getConsecutiveCollisionTimeHead()
00148 {
00149   return robotState.getConsecutiveCollisionTimeHead();
00150 }
00151 
00152 double ObstaclesSymbols::getConsecutiveCollisionTimeAggregate()
00153 {
00154   return robotState.getConsecutiveCollisionTimeAggregate();
00155 }
00156 
00157 int ObstaclesSymbols::getCollisionSide()
00158 {
00159   return robotState.getCollisionSide();
00160 }
00161 
00162 /*
00163 * Change Log
00164 * 
00165 * $Log: ObstaclesSymbols.cpp,v $
00166 * Revision 1.3  2004/06/23 13:55:26  juengel
00167 * Added enum elements for obstacles.collision-side
00168 *
00169 * Revision 1.2  2004/06/23 11:02:26  goehring
00170 * Xabsl symbol collision-side added
00171 *
00172 * Revision 1.1  2004/06/16 15:14:29  risler
00173 * added obstacles symbols
00174 * added symbol obstacles.opponent-close-to-ball
00175 *
00176 *
00177 */

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