00001
00002
00003
00004
00005
00006
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
00020 engine.registerBooleanInputSymbol("obstacles.collision-front-left",this,
00021 (bool (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getCollisionFrontLeft);
00022
00023 engine.registerBooleanInputSymbol("obstacles.collision-front-right",this,
00024 (bool (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getCollisionFrontRight);
00025
00026 engine.registerBooleanInputSymbol("obstacles.collision-hind-left",this,
00027 (bool (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getCollisionHindLeft);
00028
00029 engine.registerBooleanInputSymbol("obstacles.collision-hind-right",this,
00030 (bool (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getCollisionHindRight);
00031
00032 engine.registerBooleanInputSymbol("obstacles.collision-head",this,
00033 (bool (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getCollisionHead);
00034
00035 engine.registerBooleanInputSymbol("obstacles.collision-aggregate",this,
00036 (bool (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getCollisionAggregate);
00037
00038
00039 engine.registerDecimalInputSymbol("obstacles.consecutive-collision-time-front-left",this,
00040 (double (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getConsecutiveCollisionTimeFrontLeft);
00041
00042 engine.registerDecimalInputSymbol("obstacles.consecutive-collision-time-front-right",this,
00043 (double (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getConsecutiveCollisionTimeFrontRight);
00044
00045 engine.registerDecimalInputSymbol("obstacles.consecutive-collision-time-hind-left",this,
00046 (double (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getConsecutiveCollisionTimeHindLeft);
00047
00048 engine.registerDecimalInputSymbol("obstacles.consecutive-collision-time-hind-right",this,
00049 (double (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getConsecutiveCollisionTimeHindRight);
00050
00051 engine.registerDecimalInputSymbol("obstacles.consecutive-collision-time-head",this,
00052 (double (Xabsl2FunctionProvider::*)())&ObstaclesSymbols::getConsecutiveCollisionTimeHead);
00053
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
00065 engine.registerBooleanInputSymbol("obstacles.robot-is-stuck", &robotIsStuck);
00066
00067
00068 engine.registerBooleanInputSymbol("obstacles.close", &obstaclesAreClose);
00069
00070
00071 engine.registerBooleanInputSymbol("obstacles.opponents-close-to-ball", &opponentsCloseToBall);
00072 }
00073
00074 void ObstaclesSymbols::update()
00075 {
00076
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
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
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177