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

ArModes.h

00001 /*
00002 MobileRobots Advanced Robotics Interface for Applications (ARIA)
00003 Copyright (C) 2004, 2005 ActivMedia Robotics LLC
00004 Copyright (C) 2006, 2007 MobileRobots Inc.
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 MobileRobots for information about a commercial version of ARIA at 
00022 robots@mobilerobots.com or 
00023 MobileRobots Inc, 19 Columbia Drive, Amherst, NH 03031; 800-639-9481
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   //ArActionGroupTeleop myGroup;
00058   // use our new ratio drive instead
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   //ArActionGroupUnguardedTeleop myGroup;
00076   // use our new ratio drive instead
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

Generated on Tue Feb 20 10:51:40 2007 for Aria by  doxygen 1.4.0