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 ARACTIONSTALLRECOVER_H
00028 #define ARACTIONSTALLRECOVER_H
00029
00030 #include "ariaTypedefs.h"
00031 #include "ArAction.h"
00032
00033 class ArResolver;
00034
00036
00040 class ArActionStallRecover : public ArAction
00041 {
00042 public:
00044 ArActionStallRecover(const char * name = "stall recover",
00045 double obstacleDistance = 225, int cyclesToMove = 50,
00046 double speed = 150, double degreesToTurn = 45);
00048 virtual ~ArActionStallRecover();
00049 virtual ArActionDesired *fire(ArActionDesired currentDesired);
00050 virtual ArActionDesired *getDesired(void)
00051 { return &myActionDesired; }
00052 void addToConfig(ArConfig* config, const char* sectionName, int priority = ArPriority::NORMAL);
00053 protected:
00054
00055 void doit(void);
00056 void addSequence(int sequence);
00057 int myDoing;
00058 int myState;
00059 int myCount;
00060 int mySideStalled;
00061
00062 enum State
00063 {
00064 STATE_NOTHING = 0,
00065 STATE_GOING
00066 };
00067
00068 enum What
00069 {
00070 BACK=0x1,
00071 FORWARD=0x2,
00072 TURN=0x4,
00073 TURN_LEFT=0x8,
00074 TURN_RIGHT=0x10,
00075 MOVEMASK = BACK | FORWARD,
00076 TURNMASK = TURN | TURN_LEFT | TURN_RIGHT
00077 };
00078
00079 std::map<int, int> mySequence;
00080 int mySequenceNum;
00081 int mySequencePos;
00082 time_t myLastFired;
00083 double myObstacleDistance;
00084 int myCyclesToMove;
00085 double mySpeed;
00086 int myCyclesToTurn;
00087 double myDegreesToTurn;
00088 double myDesiredHeading;
00089 ArActionDesired myActionDesired;
00090
00091 ArResolver *myResolver;
00092 };
00093
00094 #endif //ARACTIONSTALLRECOVER_H