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