00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __AngleSymbols_h_
00010 #define __AngleSymbols_h_
00011
00012 #include "../BehaviorControl.h"
00013 #include "Tools/Xabsl2/Xabsl2Engine/Xabsl2Engine.h"
00014 #include "Tools/FieldDimensions.h"
00015 #include "Tools/Actorics/RobotDimensions.h"
00016
00017
00018
00019
00020
00021
00022 class AngleSymbols : public Xabsl2FunctionProvider, public BehaviorControlInterfaces
00023 {
00024 public:
00025
00026
00027
00028
00029 AngleSymbols(const BehaviorControlInterfaces& interfaces);
00030
00031
00032 void registerSymbols(Xabsl2Engine& engine);
00033
00034
00035 void update();
00036
00037
00038
00039
00040
00041 double getAngleToCenterOfField();
00042 double getAngleToBbSupporter();
00043 double getAngleToOpponentGoal();
00044 double getAngleToPointBehindOpponentGoal();
00045 double getAngleToCenterOfOpponentPenaltyArea();
00046
00047
00048 double getPerfectAngleToOpponentGoal();
00049
00050
00051 double getBestAngleToOpponentGoal();
00052 double getBestAngleToOpponentGoalNoObstacles();
00053 double getBestWidthOfOpponentGoal();
00054 double getBestWidthOfOpponentGoalNoObstacles();
00055 double getBestAngleAwayFromOwnGoal();
00056 double getBestAngleAwayFromOwnGoalNoObstacles();
00057 double getGoalieGoalKickAngle();
00058 double getTimeSinceOpponentGoalDetection();
00059
00060
00061 double getSeenAngleToOpponentGoal();
00062 double getTimeSinceLastSeenOpponentGoal();
00063 bool getTrustOfSeenAngleToOpponentGoal();
00064
00065
00066
00067 double getTestAngle();
00068
00069
00070
00071
00072 enum Angles {
00073 undefined,
00074
00075 angleToCenterOfField,
00076 angleToBbSupporter,
00077 angleToOpponentGoal,
00078 angleToLeftOpponentGoalPost,
00079 angleToRightOpponentGoalPost,
00080 angleToLeftOpponentGoalCorner,
00081 angleToRightOpponentGoalCorner,
00082 angleToPointBehindOpponentGoal,
00083 angleToCenterOfOpponentPenaltyArea,
00084
00085
00086 angleToFreePartOfOpponentGoalLeft,
00087 angleToFreePartOfOpponentGoalRight,
00088 angleToFreePartOfOpponentGoal,
00089 widthOfFreePartOfOpponentGoal,
00090
00091
00092 perfectAngleToOpponentGoal,
00093
00094 bestAngleToOpponentGoal,
00095 bestWidthOfOpponentGoal,
00096 bestAngleToOpponentGoalNoObstacles,
00097 bestWidthOfOpponentGoalNoObstacles,
00098 bestAngleAwayFromOwnGoal,
00099 bestAngleAwayFromOwnGoalNoObstacles,
00100 goalieGoalKickAngle,
00101
00102
00103 seenAngleToOpponentGoal,
00104 testAngle,
00105
00106 numberOfAngles
00107 };
00108
00109 double getAngle(Angles id);
00110
00111 static const char* getAngleName(Angles id)
00112 {
00113 switch(id)
00114 {
00115 case undefined: return "undefined";
00116
00117 case angleToCenterOfField: return "angleToCenterOfField";
00118 case angleToBbSupporter: return "angleToBbSupporter";
00119 case angleToOpponentGoal: return "angleToOpponentGoal";
00120 case angleToLeftOpponentGoalPost: return "angleToLeftOpponentGoalPost";
00121 case angleToRightOpponentGoalPost: return "angleToRightOpponentGoalPost";
00122 case angleToLeftOpponentGoalCorner: return "angleToLeftOpponentGoalCorner";
00123 case angleToRightOpponentGoalCorner: return "angleToRightOpponentGoalCorner";
00124 case angleToPointBehindOpponentGoal: return "angleToPointBehindOpponentGoal";
00125 case angleToCenterOfOpponentPenaltyArea: return "angleToCenterOfOpponentPenaltyArea";
00126
00127
00128 case angleToFreePartOfOpponentGoalLeft: return "angleToFreePartOfOpponentGoalLeft";
00129 case angleToFreePartOfOpponentGoalRight: return "angleToFreePartOfOpponentGoalRight";
00130 case angleToFreePartOfOpponentGoal: return "angleToFreePartOfOpponentGoal";
00131 case widthOfFreePartOfOpponentGoal: return "widthOfFreePartOfOpponentGoal";
00132
00133
00134 case perfectAngleToOpponentGoal: return "perfectAngleToOpponentGoal";
00135
00136 case bestAngleToOpponentGoal: return "bestAngleToOpponentGoal";
00137 case bestWidthOfOpponentGoal: return "bestWidthOfOpponentGoal";
00138 case bestAngleToOpponentGoalNoObstacles: return "bestAngleToOpponentGoalNoObstacles";
00139 case bestWidthOfOpponentGoalNoObstacles: return "bestWidthOfOpponentGoalNoObstacles";
00140 case bestAngleAwayFromOwnGoal: return "bestAngleAwayFromOwnGoal";
00141 case bestAngleAwayFromOwnGoalNoObstacles: return "bestAngleAwayFromOwnGoalNoObstacles";
00142 case goalieGoalKickAngle: return "goalieGoalKickAngle";
00143
00144
00145 case seenAngleToOpponentGoal: return "seenAngleToOpponentGoal";
00146
00147 case testAngle: return "testAngle";
00148 default: return "please-edit-angle-name";
00149 }
00150 }
00151
00152 Angles angleShownByLEDs;
00153 void drawAngleShownByLeds();
00154 void drawAngles();
00155 Angles angleUsedForPerfectAngle;
00156
00157 private:
00158 void setTestAngle();
00159 void calculateVisionBasedAngles();
00160 void calculateLocalisationBasedAngles();
00161 void calculateCombinedAngles();
00162 double angles[numberOfAngles];
00163 bool angleIsUsedByTheCurrentBehavior[numberOfAngles];
00164 };
00165
00166
00167 #endif // __AngleSymbols_h_
00168