Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

ArModes.h

00001 /*
00002 ActivMedia Robotics Interface for Applications (ARIA)
00003 Copyright (C) 2004,2005 ActivMedia Robotics, LLC
00004 
00005 
00006      This program is free software; you can redistribute it and/or modify
00007      it under the terms of the GNU General Public License as published by
00008      the Free Software Foundation; either version 2 of the License, or
00009      (at your option) any later version.
00010 
00011      This program is distributed in the hope that it will be useful,
00012      but WITHOUT ANY WARRANTY; without even the implied warranty of
00013      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014      GNU General Public License for more details.
00015 
00016      You should have received a copy of the GNU General Public License
00017      along with this program; if not, write to the Free Software
00018      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019 
00020 If you wish to redistribute ARIA under different terms, contact 
00021 ActivMedia Robotics for information about a commercial version of ARIA at 
00022 robots@activmedia.com or 
00023 ActivMedia Robotics, 19 Columbia Drive, Amherst, NH 03031; 800-639-9481
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   //ArActionGroupTeleop myGroup;
00059   // use our new ratio drive instead
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   //ArActionGroupUnguardedTeleop myGroup;
00077   // use our new ratio drive instead
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

Generated on Wed Oct 19 12:56:36 2005 for Aria by  doxygen 1.4.0