00001
00002
00003
00004
00005
00006
00007
00008 #ifndef UGVSYSTEM_H_
00009 #define UGVSYSTEM_H_
00010
00011 #include <uvsim/utilities/RealtimeThread.h>
00012 #include <uvsim/sensing/Imu6DofSensor.h>
00013 #include <uvsim/control/ControlComm.h>
00014 #include <uvsim/navigation/Ins.h>
00015 #include <uvsim/utilities/utilities.h>
00016 #include <iostream>
00017
00018
00019 namespace uvsim
00020 {
00021
00022 class VisionThread: public RealtimeThread
00023 {
00024 public:
00025 VisionThread(const char * port, float freq, int priority);
00026 virtual void loop();
00027 virtual ~VisionThread();
00028 };
00029
00030 enum ControlMode {AUTO, MANUAL};
00031
00032 class ControlThread: public RealtimeThread
00033 {
00034 private:
00035 ControlComm * m_controlComm;
00036 ControlMode m_mode;
00037 public:
00038 ControlThread(std::string port, float freq, int priority, bool useJoystick);
00039 virtual void loop();
00040 ControlMode getControlMode()
00041 {
00042 return m_mode;
00043 }
00044 void setControlMode(ControlMode mode)
00045 {
00046 m_mode = mode;
00047 }
00048 virtual ~ControlThread();
00049 };
00050
00051 class NavigationThread: public RealtimeThread
00052 {
00053 private:
00054 Imu6DofSensor * imu;
00055 Ins * ins;
00056 public:
00057 NavigationThread(const char * port, float freq, int priority);
00058 virtual void loop();
00059 virtual ~NavigationThread();
00060 };
00061
00062 class UgvSystem
00063 {
00064 public:
00065 UgvSystem(const char * visionPort, float visionFreq, int visionPriority,
00066 const char * controlPort, float controlFreq, int controlPriority,
00067 bool useJoystick, const char * navigationPort,
00068 float navigationFreq, int navigationPriority);
00069 UgvSystem();
00070 virtual ~UgvSystem();
00071 void run();
00072
00073
00074 VisionThread * getVisionThread()
00075 {
00076 return m_visionThread;
00077 }
00078 ControlThread * getControlThread()
00079 {
00080 return m_controlThread;
00081 }
00082 NavigationThread * getNavigationThread()
00083 {
00084 return m_navigationThread;
00085 }
00086
00087
00088 void setVisionThread(VisionThread * thread)
00089 {
00090 m_visionThread = thread;
00091 }
00092 void setControlThread(ControlThread * thread)
00093 {
00094 m_controlThread = thread;
00095 }
00096 void setNavigationThread(NavigationThread * thread)
00097 {
00098 m_navigationThread = thread;
00099 }
00100
00101
00102 private:
00103 VisionThread * m_visionThread;
00104 ControlThread * m_controlThread;
00105 NavigationThread * m_navigationThread;
00106 };
00107
00108 }
00109
00110 #endif