00001 00030 #ifndef _VECTORMOVERTRANSPORT_H 00031 #define _VECTORMOVERTRANSPORT_H 00032 #include <WritableType.H> 00033 #include <Capability.H> 00034 #include <COMObject.H> 00035 #include <queue> 00036 #include <vector> 00037 00038 // $Id: Type.H 66 2007-01-23 20:53:23Z fwph $ 00039 00040 #define VECTORMOVERTRANSPORT "VectorMoverTransport" 00041 // IDNUMBER is used to identify data events . IDNUMBER+1 is the info event. this 00042 // system will probably go away soon... 00043 //#define VECTORMOVERTRANSPORTIDNUMBER 36 00044 00045 namespace WURDE { 00046 class Capability; 00047 class CommsManager; 00048 class Logger; 00049 00050 00051 00052 00053 class VectorMoverTransportInfoStruct { 00054 public: std::string source; 00055 Writable< bool > absolute; 00056 Writable< float > maxTranslationVelocity; 00057 Writable< bool > goalHasLocation; 00058 MessageType mType; 00059 std::string target; 00060 Time timestamp; 00061 Writable< bool > goalHasTheta; 00062 Writable< bool > brake; 00063 Writable< float > maxRotationVelocity; 00064 Writable< Pose > goalPose; 00065 }; 00066 00067 00068 class VectorMoverTransportDataStruct { 00069 public: std::string source; 00070 float angleToGoal; 00071 bool hasGoal; 00072 Time timestamp; 00073 float distanceToGoal; 00074 }; 00075 00081 class VectorMoverTransport : virtual public Capability { 00082 00083 public: 00089 explicit VectorMoverTransport(const std::string & streamname); 00090 00096 VectorMoverTransport(const ConnectionStrategy & strategy,const std::string & gblName); 00097 00103 VectorMoverTransport(const std::string & streamname,const std::string & gblName); 00104 00105 ~VectorMoverTransport(); 00106 00107 00111 void init(const std::string & streamname,const ConnectionStrategy & strategy, const std::string & gblName); 00112 00113 00118 VectorMoverTransportDataStruct data; 00119 00123 VectorMoverTransportInfoStruct info; 00124 00128 VectorMoverTransportInfoStruct requests; 00129 00130 //RobotObject imps 00131 void runUpdate(); 00132 void setManager(CommsManager *myManager_); 00133 void setCOMObject(COMBase *object){ myCOMObject = dynamic_cast<COMObject<VectorMoverTransportInfoStruct,VectorMoverTransportDataStruct> *> (object);} 00134 void disconnect(){if(myCOMObject){myCOMObject->disconnect();}} 00135 void activateSupplier(); 00136 void activateConsumer(); 00137 std::string getInterfaceName(){ return VECTORMOVERTRANSPORT;} 00138 void setStreamName(const std::string & name); 00139 void setGlobalName(const std::string & name); 00140 bool newData(); 00141 bool newInfo(); 00142 void setAutoPing(const bool & val); 00143 void doPing(); 00144 // int getID(){return VECTORMOVERTRANSPORTIDNUMBER;} 00145 00149 bool getQueueMode(){return m_queue;}; 00150 00154 void setQueueMode(const bool & val); 00155 00160 VectorMoverTransportDataStruct getNextData(); 00161 00166 VectorMoverTransportInfoStruct getNextInfo(); 00167 00171 VectorMoverTransportInfoStruct getNextRequest(){return getNextInfo();} 00172 00173 void publishData(); 00174 void publishInfo(); 00175 //void publishRequest(); 00176 00177 protected: 00178 COMObject<VectorMoverTransportInfoStruct, VectorMoverTransportDataStruct> *myCOMObject; 00179 00180 bool m_queue; 00181 00182 //notes that the object should be initialized as soon as a streamname is received 00183 bool m_initialize; 00184 std::queue<VectorMoverTransportDataStruct> m_dataVector; 00185 std::queue<VectorMoverTransportInfoStruct> m_infoVector; 00186 std::queue<VectorMoverTransportInfoStruct> m_requestVector; 00187 00188 }; 00189 00190 } 00191 00192 00193 #endif