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 getAngleToOpponentGoal();
00043 double getAngleToPointBehindOpponentGoal();
00044
00045
00046 double getBestAngleToOpponentGoal();
00047 double getBestAngleToOpponentGoalNoObstacles();
00048 double getBestAngleAwayFromOwnGoal();
00049 double getBestAngleAwayFromOwnGoalNoObstacles();
00050 double getGoalieGoalKickAngle();
00051
00052
00053
00054
00055 enum Angles {
00056 undefined,
00057
00058 angleToCenterOfField,
00059 angleToOpponentGoal,
00060 angleToLeftOpponentGoalPost,
00061 angleToRightOpponentGoalPost,
00062 angleToLeftOpponentGoalCorner,
00063 angleToRightOpponentGoalCorner,
00064 angleToPointBehindOpponentGoal,
00065
00066
00067 angleToFreePartOfOpponentGoal,
00068
00069
00070 bestAngleToOpponentGoal,
00071 bestAngleToOpponentGoalNoObstacles,
00072 bestAngleAwayFromOwnGoal,
00073 bestAngleAwayFromOwnGoalNoObstacles,
00074 goalieGoalKickAngle,
00075
00076 numberOfAngles
00077 };
00078
00079 double getAngle(Angles id);
00080
00081 static const char* getAngleName(Angles id)
00082 {
00083 switch(id)
00084 {
00085 case undefined: return "undefined";
00086
00087 case angleToCenterOfField: return "angleToCenterOfField";
00088 case angleToOpponentGoal: return "angleToOpponentGoal";
00089 case angleToLeftOpponentGoalPost: return "angleToLeftOpponentGoalPost";
00090 case angleToRightOpponentGoalPost: return "angleToRightOpponentGoalPost";
00091 case angleToLeftOpponentGoalCorner: return "angleToLeftOpponentGoalCorner";
00092 case angleToRightOpponentGoalCorner: return "angleToRightOpponentGoalCorner";
00093 case angleToPointBehindOpponentGoal: return "angleToPointBehindOpponentGoal";
00094
00095
00096 case angleToFreePartOfOpponentGoal: return "angleToFreePartOfOpponentGoal";
00097
00098
00099 case bestAngleToOpponentGoal: return "bestAngleToOpponentGoal";
00100 case bestAngleToOpponentGoalNoObstacles: return "bestAngleToOpponentGoalNoObstacles";
00101 case bestAngleAwayFromOwnGoal: return "bestAngleAwayFromOwnGoal";
00102 case bestAngleAwayFromOwnGoalNoObstacles: return "bestAngleAwayFromOwnGoalNoObstacles";
00103 case goalieGoalKickAngle: return "goalieGoalKickAngle";
00104 default: return "please-edit-angle-name";
00105 }
00106 }
00107
00108 Angles angleShownByLEDs;
00109 void drawAngleShownByLeds();
00110
00111 private:
00112 void calculateVisionBasedAngles();
00113 void calculateLocalisationBasedAngles();
00114 void calculateCombinedAngles();
00115 double angles[numberOfAngles];
00116 };
00117
00118
00119 #endif // __AngleSymbols_h_
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132