00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef ARMODES_H
00028 #define ARMODES_H
00029
00030 #include "ariaTypedefs.h"
00031 #include "ArMode.h"
00032 #include "ArActionGroups.h"
00033 #include "ArGripper.h"
00034 #include "ArTcpConnection.h"
00035 #include "ArSerialConnection.h"
00036 #include "ArPTZ.h"
00037 #include "ArTCM2.h"
00038
00039 class ArTCM2;
00040 class ArACTS_1_2;
00041 class ArRobotPacket;
00042 class ArSick;
00043 class ArAnalogGyro;
00044
00046 class ArModeTeleop : public ArMode
00047 {
00048 public:
00050 ArModeTeleop(ArRobot *robot, const char *name, char key, char key2);
00052 virtual ~ArModeTeleop();
00053 virtual void activate(void);
00054 virtual void deactivate(void);
00055 virtual void help(void);
00056 virtual void userTask(void);
00057 protected:
00058
00059
00060 ArActionGroupRatioDrive myGroup;
00061 };
00062
00064 class ArModeUnguardedTeleop : public ArMode
00065 {
00066 public:
00068 ArModeUnguardedTeleop(ArRobot *robot, const char *name, char key, char key2);
00070 virtual ~ArModeUnguardedTeleop();
00071 virtual void activate(void);
00072 virtual void deactivate(void);
00073 virtual void help(void);
00074 virtual void userTask(void);
00075 protected:
00076
00077
00078 ArActionGroupRatioDriveUnsafe myGroup;
00079 };
00080
00082 class ArModeWander : public ArMode
00083 {
00084 public:
00086 ArModeWander(ArRobot *robot, const char *name, char key, char key2);
00088 virtual ~ArModeWander();
00089 virtual void activate(void);
00090 virtual void deactivate(void);
00091 virtual void help(void);
00092 virtual void userTask(void);
00093 protected:
00094 ArActionGroupWander myGroup;
00095 };
00096
00098 class ArModeGripper : public ArMode
00099 {
00100 public:
00102 ArModeGripper(ArRobot *robot, const char *name, char key,
00103 char key2);
00105 virtual ~ArModeGripper();
00106 virtual void activate(void);
00107 virtual void deactivate(void);
00108 virtual void userTask(void);
00109 virtual void help(void);
00110 void open(void);
00111 void close(void);
00112 void up(void);
00113 void down(void);
00114 void stop(void);
00115 void exercise(void);
00116 protected:
00117 enum ExerState {
00118 UP_OPEN,
00119 UP_CLOSE,
00120 DOWN_CLOSE,
00121 DOWN_OPEN
00122 };
00123 ArGripper myGripper;
00124 bool myExercising;
00125 ExerState myExerState;
00126 ArTime myLastExer;
00127 ArFunctorC<ArModeGripper> myOpenCB;
00128 ArFunctorC<ArModeGripper> myCloseCB;
00129 ArFunctorC<ArModeGripper> myUpCB;
00130 ArFunctorC<ArModeGripper> myDownCB;
00131 ArFunctorC<ArModeGripper> myStopCB;
00132 ArFunctorC<ArModeGripper> myExerciseCB;
00133
00134 };
00135
00137 class ArModeCamera : public ArMode
00138 {
00139 public:
00141 ArModeCamera(ArRobot *robot, const char *name, char key,
00142 char key2);
00144 virtual ~ArModeCamera();
00145 virtual void activate(void);
00146 virtual void deactivate(void);
00147 virtual void userTask(void);
00148 virtual void help(void);
00149 void up(void);
00150 void down(void);
00151 void left(void);
00152 void right(void);
00153 void center(void);
00154 void zoomIn(void);
00155 void zoomOut(void);
00156 void exercise(void);
00157 void sony(void);
00158 void canon(void);
00159 void dpptu(void);
00160 void amptu(void);
00161 void canonInverted(void);
00162 void sonySerial(void);
00163 void canonSerial(void);
00164 void dpptuSerial(void);
00165 void amptuSerial(void);
00166 void canonInvertedSerial(void);
00167 void com1(void);
00168 void com2(void);
00169 void com3(void);
00170 void com4(void);
00171 void aux1(void);
00172 void aux2(void);
00173 protected:
00174 void takeCameraKeys(void);
00175 void giveUpCameraKeys(void);
00176 void helpCameraKeys(void);
00177 void takePortKeys(void);
00178 void giveUpPortKeys(void);
00179 void helpPortKeys(void);
00180 void takeAuxKeys(void);
00181 void giveUpAuxKeys(void);
00182 void helpAuxKeys(void);
00183 void takeMovementKeys(void);
00184 void giveUpMovementKeys(void);
00185 void helpMovementKeys(void);
00186 enum State {
00187 STATE_CAMERA,
00188 STATE_PORT,
00189 STATE_MOVEMENT
00190 };
00191 void cameraToMovement(void);
00192 void cameraToPort(void);
00193 void cameraToAux(void);
00194 void portToMovement(void);
00195 void auxToMovement(void);
00196 enum ExerState {
00197 CENTER,
00198 UP_LEFT,
00199 UP_RIGHT,
00200 DOWN_RIGHT,
00201 DOWN_LEFT
00202 };
00203
00204 bool myExercising;
00205 State myState;
00206 ExerState myExerState;
00207 ArTime myLastExer;
00208 bool myExerZoomedIn;
00209 ArTime myLastExerZoomed;
00210 ArSerialConnection myConn;
00211 ArPTZ *myCam;
00212 ArFunctorC<ArModeCamera> myUpCB;
00213 ArFunctorC<ArModeCamera> myDownCB;
00214 ArFunctorC<ArModeCamera> myLeftCB;
00215 ArFunctorC<ArModeCamera> myRightCB;
00216 ArFunctorC<ArModeCamera> myCenterCB;
00217 ArFunctorC<ArModeCamera> myZoomInCB;
00218 ArFunctorC<ArModeCamera> myZoomOutCB;
00219 ArFunctorC<ArModeCamera> myExerciseCB;
00220 ArFunctorC<ArModeCamera> mySonyCB;
00221 ArFunctorC<ArModeCamera> myCanonCB;
00222 ArFunctorC<ArModeCamera> myDpptuCB;
00223 ArFunctorC<ArModeCamera> myAmptuCB;
00224 ArFunctorC<ArModeCamera> myCanonInvertedCB;
00225 ArFunctorC<ArModeCamera> mySonySerialCB;
00226 ArFunctorC<ArModeCamera> myCanonSerialCB;
00227 ArFunctorC<ArModeCamera> myDpptuSerialCB;
00228 ArFunctorC<ArModeCamera> myAmptuSerialCB;
00229 ArFunctorC<ArModeCamera> myCanonInvertedSerialCB;
00230 ArFunctorC<ArModeCamera> myCom1CB;
00231 ArFunctorC<ArModeCamera> myCom2CB;
00232 ArFunctorC<ArModeCamera> myCom3CB;
00233 ArFunctorC<ArModeCamera> myCom4CB;
00234 ArFunctorC<ArModeCamera> myAux1CB;
00235 ArFunctorC<ArModeCamera> myAux2CB;
00236
00237 };
00238
00240 class ArModeSonar : public ArMode
00241 {
00242 public:
00244 ArModeSonar(ArRobot *robot, const char *name, char key, char key2);
00246 virtual ~ArModeSonar();
00247 virtual void activate(void);
00248 virtual void deactivate(void);
00249 virtual void userTask(void);
00250 virtual void help(void);
00251 void allSonar(void);
00252 void firstSonar(void);
00253 void secondSonar(void);
00254 void thirdSonar(void);
00255 void fourthSonar(void);
00256 protected:
00257 enum State
00258 {
00259 STATE_ALL,
00260 STATE_FIRST,
00261 STATE_SECOND,
00262 STATE_THIRD,
00263 STATE_FOURTH
00264 };
00265 State myState;
00266 ArFunctorC<ArModeSonar> myAllSonarCB;
00267 ArFunctorC<ArModeSonar> myFirstSonarCB;
00268 ArFunctorC<ArModeSonar> mySecondSonarCB;
00269 ArFunctorC<ArModeSonar> myThirdSonarCB;
00270 ArFunctorC<ArModeSonar> myFourthSonarCB;
00271 };
00272
00273 class ArModeBumps : public ArMode
00274 {
00275 public:
00276 ArModeBumps(ArRobot *robot, const char *name, char key, char key2);
00277 ~ArModeBumps();
00278 virtual void activate(void);
00279 virtual void deactivate(void);
00280 virtual void userTask(void);
00281 virtual void help(void);
00282 };
00283
00284 class ArModePosition : public ArMode
00285 {
00286 public:
00287 ArModePosition(ArRobot *robot, const char *name, char key,
00288 char key2, ArAnalogGyro *gyro = NULL);
00289 ~ArModePosition();
00290 virtual void activate(void);
00291 virtual void deactivate(void);
00292 virtual void userTask(void);
00293 virtual void help(void);
00294 void up(void);
00295 void down(void);
00296 void left(void);
00297 void right(void);
00298 void stop(void);
00299 void reset(void);
00300 void mode(void);
00301 void gyro(void);
00302 void incDistance(void);
00303 void decDistance(void);
00304 protected:
00305 enum Mode { MODE_BOTH, MODE_EITHER };
00306 ArAnalogGyro *myGyro;
00307 double myGyroZero;
00308 double myRobotZero;
00309 Mode myMode;
00310 std::string myModeString;
00311 bool myInHeadingMode;
00312 double myHeading;
00313 double myDistance;
00314 ArFunctorC<ArModePosition> myUpCB;
00315 ArFunctorC<ArModePosition> myDownCB;
00316 ArFunctorC<ArModePosition> myLeftCB;
00317 ArFunctorC<ArModePosition> myRightCB;
00318 ArFunctorC<ArModePosition> myStopCB;
00319 ArFunctorC<ArModePosition> myResetCB;
00320 ArFunctorC<ArModePosition> myModeCB;
00321 ArFunctorC<ArModePosition> myGyroCB;
00322 ArFunctorC<ArModePosition> myIncDistCB;
00323 ArFunctorC<ArModePosition> myDecDistCB;
00324 };
00325
00326 class ArModeIO : public ArMode
00327 {
00328 public:
00329 ArModeIO(ArRobot *robot, const char *name, char key,
00330 char key2);
00331 ~ArModeIO();
00332 virtual void activate(void);
00333 virtual void deactivate(void);
00334 virtual void userTask(void);
00335 virtual void help(void);
00336 protected:
00337 bool myExplanationReady;
00338 bool myExplained;
00339 ArTime myLastPacketTime;
00340 char myExplanation[1024];
00341 char myOutput[1024];
00342 ArFunctorC<ArModeIO> myProcessIOCB;
00343 };
00344
00345 class ArModeLaser : public ArMode
00346 {
00347 public:
00348 ArModeLaser(ArRobot *robot, const char *name, char key,
00349 char key2, ArSick *sick);
00350 ~ArModeLaser();
00351 virtual void activate(void);
00352 virtual void deactivate(void);
00353 virtual void userTask(void);
00354 virtual void help(void);
00356 void failedConnect(void);
00357 protected:
00358 enum State {
00359 STATE_UNINITED,
00360 STATE_CONNECTING,
00361 STATE_CONNECTED
00362 };
00363 State myState;
00364 ArSick *mySick;
00365 bool myInitializedLaser;
00366 bool myConnectingLaser;
00367 ArFunctorC<ArModeLaser> myFailedConnectCB;
00368 };
00369
00371 class ArModeActs : public ArMode
00372 {
00373 public:
00375 ArModeActs(ArRobot *robot, const char *name, char key, char key2,
00376 ArACTS_1_2 *acts = NULL);
00378 virtual ~ArModeActs();
00379 virtual void activate(void);
00380 virtual void deactivate(void);
00381 virtual void help(void);
00382 virtual void userTask(void);
00383 virtual void channel1(void);
00384 virtual void channel2(void);
00385 virtual void channel3(void);
00386 virtual void channel4(void);
00387 virtual void channel5(void);
00388 virtual void channel6(void);
00389 virtual void channel7(void);
00390 virtual void channel8(void);
00391 virtual void stop(void);
00392 virtual void start(void);
00393 virtual void toggleAcquire(void);
00394
00395 protected:
00396 ArActionGroupColorFollow *myGroup;
00397 ArPTZ *camera;
00398 ArACTS_1_2 *myActs;
00399 ArRobot *myRobot;
00400
00401 ArFunctorC<ArModeActs> myChannel1CB;
00402 ArFunctorC<ArModeActs> myChannel2CB;
00403 ArFunctorC<ArModeActs> myChannel3CB;
00404 ArFunctorC<ArModeActs> myChannel4CB;
00405 ArFunctorC<ArModeActs> myChannel5CB;
00406 ArFunctorC<ArModeActs> myChannel6CB;
00407 ArFunctorC<ArModeActs> myChannel7CB;
00408 ArFunctorC<ArModeActs> myChannel8CB;
00409 ArFunctorC<ArModeActs> myStopCB;
00410 ArFunctorC<ArModeActs> myStartCB;
00411 ArFunctorC<ArModeActs> myToggleAcquireCB;
00412 };
00413
00414 class ArModeCommand : public ArMode
00415 {
00416 public:
00417 ArModeCommand(ArRobot *robot, const char *name, char key,
00418 char key2);
00419 ~ArModeCommand();
00420 virtual void activate(void);
00421 virtual void deactivate(void);
00422 virtual void help(void);
00423 protected:
00424 void takeKeys(void);
00425 void giveUpKeys(void);
00426 void addChar(int ch);
00427 void finishParsing(void);
00428 void reset(bool print = true);
00429 char myCommandString[70];
00430 ArFunctor1C<ArModeCommand, int> my0CB;
00431 ArFunctor1C<ArModeCommand, int> my1CB;
00432 ArFunctor1C<ArModeCommand, int> my2CB;
00433 ArFunctor1C<ArModeCommand, int> my3CB;
00434 ArFunctor1C<ArModeCommand, int> my4CB;
00435 ArFunctor1C<ArModeCommand, int> my5CB;
00436 ArFunctor1C<ArModeCommand, int> my6CB;
00437 ArFunctor1C<ArModeCommand, int> my7CB;
00438 ArFunctor1C<ArModeCommand, int> my8CB;
00439 ArFunctor1C<ArModeCommand, int> my9CB;
00440 ArFunctor1C<ArModeCommand, int> myMinusCB;
00441 ArFunctor1C<ArModeCommand, int> myBackspaceCB;
00442 ArFunctor1C<ArModeCommand, int> mySpaceCB;
00443 ArFunctorC<ArModeCommand> myEnterCB;
00444
00445 };
00446
00448 class ArModeTCM2 : public ArMode
00449 {
00450 public:
00452 ArModeTCM2(ArRobot *robot, const char *name, char key, char key2,
00453 ArTCM2 *tcm2 = NULL);
00455 virtual ~ArModeTCM2();
00456 virtual void activate(void);
00457 virtual void deactivate(void);
00458 virtual void help(void);
00459 virtual void userTask(void);
00460
00461 protected:
00462 ArTCM2 *myTCM2;
00463 ArRobot *myRobot;
00464 ArFunctorC<ArTCM2> *myOffCB;
00465 ArFunctorC<ArTCM2> *myCompassCB;
00466 ArFunctorC<ArTCM2> *myOnePacketCB;
00467 ArFunctorC<ArTCM2> *myContinuousPacketsCB;
00468 ArFunctorC<ArTCM2> *myUserCalibrationCB;
00469 ArFunctorC<ArTCM2> *myAutoCalibrationCB;
00470 ArFunctorC<ArTCM2> *myStopCalibrationCB;
00471 ArFunctorC<ArTCM2> *myResetCB;
00472
00473 };
00474
00475
00476 #endif // ARMODES_H