00001
00002 #ifndef INCLUDED_RoverControllerBehavior_h_
00003 #define INCLUDED_RoverControllerBehavior_h_
00004
00005 #include "Shared/RobotInfo.h"
00006 #if !defined(TGT_HAS_ARMS) && !defined(TGT_HAS_LEGS) || !defined(TGT_HAS_HEAD)
00007
00008 # warning RoverControllerBehavior can't find a manipulator, won't run
00009 #endif
00010
00011 #include "Behaviors/BehaviorBase.h"
00012 #include "Behaviors/Controller.h"
00013 #include "Events/EventRouter.h"
00014 #include "Motion/PostureMC.h"
00015 #include "Motion/HeadPointerMC.h"
00016
00017
00018 class RoverControllerBehavior : public BehaviorBase {
00019 public:
00020 static const int PORT=10056;
00021
00022
00023 static RoverControllerBehavior& getInstance() {
00024 if(theOne==NULL)
00025 theOne = new RoverControllerBehavior;
00026 return *theOne;
00027 }
00028
00029
00030 virtual ~RoverControllerBehavior() {
00031 if(isActive())
00032 DoStop();
00033 theOne=NULL;
00034 }
00035
00036 virtual void DoStart();
00037 virtual void DoStop();
00038
00039 static std::string getClassDescription() { return "DESCRIPTION"; }
00040 virtual std::string getDescription() const { return getClassDescription(); }
00041
00042
00043 protected:
00044
00045 RoverControllerBehavior()
00046 : BehaviorBase("Rover Remote Control"),
00047 tgtScale(1), tgtXOff(0), tgtYOff(0), heightScale(1), heightOff(0), distanceScale(1),
00048 tgtX(0),tgtY(0),tgtZ(0), lookX(0),lookY(0),lookD(0),
00049 gripperAngle(0),perspective(0),
00050 autoGripperAngle(true),autoPerspective(true),autoTrackGripper(true),maxDist(true),
00051 cmdsock(NULL), head(MotionManager::invalid_MC_ID), arm(MotionManager::invalid_MC_ID)
00052 {
00053 initScale();
00054 }
00055
00056 void initScale();
00057
00058
00059 static int callback(char *buf, int bytes) { return theOne->update(buf,bytes); }
00060
00061 int update(char *buf, int bytes);
00062
00063 void updateArm();
00064 void updateHead();
00065
00066 static RoverControllerBehavior * theOne;
00067
00068 float tgtScale;
00069 float tgtXOff;
00070 float tgtYOff;
00071 float heightScale;
00072 float heightOff;
00073 float distanceScale;
00074
00075 float tgtX;
00076 float tgtY;
00077 float tgtZ;
00078 float lookX;
00079 float lookY;
00080 float lookD;
00081
00082 float gripperAngle;
00083 float perspective;
00084
00085 bool autoGripperAngle;
00086 bool autoPerspective;
00087 bool autoTrackGripper;
00088 bool maxDist;
00089
00090 Socket *cmdsock;
00091
00092 MotionManager::MC_ID head;
00093 MotionManager::MC_ID arm;
00094
00095 private:
00096
00097
00098
00099
00100
00101 RoverControllerBehavior(const RoverControllerBehavior&);
00102 RoverControllerBehavior& operator=(const RoverControllerBehavior&);
00103 };
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116 #endif