00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __GT2004HeadControlBasicBehaviors_h_
00010 #define __GT2004HeadControlBasicBehaviors_h_
00011
00012 #include "Tools/Xabsl2/Xabsl2Engine/Xabsl2Engine.h"
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 class GT2004HeadControlBasicBehavior : public Xabsl2BasicBehavior, public HeadControlInterfaces
00023 {
00024 public:
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 GT2004HeadControlBasicBehavior(const char* name,
00036 Xabsl2ErrorHandler& errorHandler,
00037 HeadControlInterfaces interfaces,
00038 GT2004HeadControl& headControl,
00039 GT2004HeadPathPlanner& headPathPlanner,
00040 bool& lastScanWasLeft,
00041 CameraInfo& cameraInfo)
00042 : Xabsl2BasicBehavior(name, errorHandler),
00043 HeadControlInterfaces(interfaces),
00044 headControl(headControl),
00045 headPathPlanner(headPathPlanner),
00046 lastScanWasLeft(lastScanWasLeft),
00047 cameraInfo(cameraInfo)
00048 {}
00049
00050
00051 virtual void execute() = 0;
00052
00053 protected:
00054
00055 GT2004HeadControl& headControl;
00056
00057
00058 GT2004HeadPathPlanner& headPathPlanner;
00059
00060
00061 bool& lastScanWasLeft;
00062
00063
00064 CameraInfo& cameraInfo;
00065
00066
00067 OdometryData lastOdometryData;
00068
00069 unsigned long lastTimeOfGoodSL;
00070
00071
00072 int panCount;
00073 };
00074
00075
00076
00077
00078
00079
00080 #define DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(className,xmlName) \
00081 class className : public GT2004HeadControlBasicBehavior \
00082 { \
00083 public:\
00084 className(Xabsl2ErrorHandler& errorHandler, HeadControlInterfaces& interfaces, GT2004HeadControl& headControl,GT2004HeadPathPlanner& headPathPlanner,bool& lastScanWasLeft,CameraInfo& cameraInfo) \
00085 : GT2004HeadControlBasicBehavior(xmlName, errorHandler, interfaces, headControl,headPathPlanner,lastScanWasLeft,cameraInfo) {} \
00086 virtual void execute();\
00087 };
00088
00089
00090 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorOtherHeadMovements,"other-head-movements");
00091 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorLookAtBall,"look-at-ball");
00092 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorLookAtBallAndClosestLandmark, "look-at-ball-and-closest-landmark");
00093 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorBeginBallSearchAtBallPositionSeen, "begin-ball-search-at-seen");
00094 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorBeginBallSearchAtBallPositionCommunicated, "begin-ball-search-at-communicated");
00095 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorBeginBallSearchAtBallPositionPropagated, "begin-ball-search-at-propagated");
00096 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorLookAroundAtSeenBall, "look-around-at-seen-ball");
00097 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorFindBall,"find-ball");
00098 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorReturnToBall,"return-to-ball");
00099 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorScanBackToBall,"scan-back-to-ball");
00100 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorScanAwayFromBall,"scan-away-from-ball");
00101 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorGrabBall,"grab-ball");
00102 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorReleaseBall,"release-ball");
00103 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorWaitForGrab,"wait-for-grab");
00104 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorLookAtCloseLandmark,"look-at-close-landmark");
00105 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorSearchForBallLeft,"search-for-ball-left");
00106 DECLARE_GT2004_HEADCONTROL_BASIC_BEHAVIOR(GT2004BasicBehaviorSearchForBallRight,"search-for-ball-right");
00107
00108
00109
00110 class GT2004BasicBehaviorDirectedScanForLandmarks : public GT2004HeadControlBasicBehavior \
00111 {
00112 public:
00113
00114 GT2004BasicBehaviorDirectedScanForLandmarks(Xabsl2ErrorHandler& errorHandler, HeadControlInterfaces& interfaces, GT2004HeadControl& headControl,GT2004HeadPathPlanner& headPathPlanner,bool& lastScanWasLeft,CameraInfo& cameraInfo)
00115 : GT2004HeadControlBasicBehavior("directed-scan-for-landmarks", errorHandler, interfaces, headControl,headPathPlanner,lastScanWasLeft,cameraInfo), leftOrRight(1) {}
00116
00117
00118 virtual void execute();
00119
00120 bool nextLandmarkIsWithinReach;
00121
00122 private:
00123 double leftOrRight;
00124 int currentLandmark;
00125 int nextLandmark;
00126 int waitSomeBeforeLookingAtNextLandmark;
00127 };
00128
00129
00130
00131 #define INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehavior) \
00132 basicBehavior(errorHandler, interfaces, headControl, headPathPlanner, lastScanWasLeft, cameraInfo)
00133
00134
00135
00136
00137
00138
00139
00140 class GT2004HeadControlBasicBehaviors
00141 {
00142 public:
00143
00144 GT2004HeadControlBasicBehaviors(Xabsl2ErrorHandler& errorHandler, HeadControlInterfaces& interfaces, GT2004HeadControl& headControl,GT2004HeadPathPlanner& headPathPlanner,bool& lastScanWasLeft,CameraInfo& cameraInfo)
00145 : errorHandler(errorHandler), headControl(headControl),
00146 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorLookAtBall),
00147 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorLookAtCloseLandmark),
00148 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorLookAtBallAndClosestLandmark),
00149 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorBeginBallSearchAtBallPositionSeen),
00150 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorBeginBallSearchAtBallPositionPropagated),
00151 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorBeginBallSearchAtBallPositionCommunicated),
00152 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorFindBall),
00153 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorReturnToBall),
00154 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorScanAwayFromBall),
00155 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorScanBackToBall),
00156 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorGrabBall),
00157 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorReleaseBall),
00158 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorWaitForGrab),
00159 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorOtherHeadMovements),
00160 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorDirectedScanForLandmarks),
00161 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorLookAroundAtSeenBall),
00162 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorSearchForBallLeft),
00163 INIT_GT2004_HEADCONTROL_BASIC_BEHAVIOR(basicBehaviorSearchForBallRight)
00164 {}
00165
00166
00167 void registerBasicBehaviors(Xabsl2Engine& engine);
00168
00169
00170
00171 GT2004BasicBehaviorLookAtBall basicBehaviorLookAtBall;
00172 GT2004BasicBehaviorFindBall basicBehaviorFindBall;
00173 GT2004BasicBehaviorReturnToBall basicBehaviorReturnToBall;
00174 GT2004BasicBehaviorScanAwayFromBall basicBehaviorScanAwayFromBall;
00175 GT2004BasicBehaviorDirectedScanForLandmarks basicBehaviorDirectedScanForLandmarks;
00176 GT2004BasicBehaviorScanBackToBall basicBehaviorScanBackToBall;
00177 GT2004BasicBehaviorGrabBall basicBehaviorGrabBall;
00178 GT2004BasicBehaviorReleaseBall basicBehaviorReleaseBall;
00179 GT2004BasicBehaviorWaitForGrab basicBehaviorWaitForGrab;
00180 GT2004BasicBehaviorBeginBallSearchAtBallPositionSeen basicBehaviorBeginBallSearchAtBallPositionSeen;
00181 GT2004BasicBehaviorBeginBallSearchAtBallPositionCommunicated basicBehaviorBeginBallSearchAtBallPositionCommunicated;
00182 GT2004BasicBehaviorBeginBallSearchAtBallPositionPropagated basicBehaviorBeginBallSearchAtBallPositionPropagated;
00183 GT2004BasicBehaviorOtherHeadMovements basicBehaviorOtherHeadMovements;
00184 GT2004BasicBehaviorLookAtCloseLandmark basicBehaviorLookAtCloseLandmark;
00185 GT2004BasicBehaviorLookAtBallAndClosestLandmark basicBehaviorLookAtBallAndClosestLandmark;
00186 GT2004BasicBehaviorLookAroundAtSeenBall basicBehaviorLookAroundAtSeenBall;
00187 GT2004BasicBehaviorSearchForBallLeft basicBehaviorSearchForBallLeft;
00188 GT2004BasicBehaviorSearchForBallRight basicBehaviorSearchForBallRight;
00189
00190
00191 private:
00192
00193 Xabsl2ErrorHandler& errorHandler;
00194
00195
00196 GT2004HeadControl& headControl;
00197 };
00198
00199 #endif // __GT2004HeadControlBasicBehaviors_h_
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283