1 #ifndef TF2_SERVER_TF2_SERVER_H 2 #define TF2_SERVER_TF2_SERVER_H 7 #include <unordered_set> 11 #include <tf2_server/RequestTransformStream.h> 19 bool operator()(
const tf2_server::RequestTransformStreamRequest& r1,
20 const tf2_server::RequestTransformStreamRequest& r2)
const;
21 bool equals(
const tf2_server::RequestTransformStreamRequest& r1,
22 const tf2_server::RequestTransformStreamRequest& r2)
const;
27 bool operator()(
const tf2_server::RequestTransformStreamRequest& r1,
28 const tf2_server::RequestTransformStreamRequest& r2)
const;
29 bool equals(
const tf2_server::RequestTransformStreamRequest& r1,
30 const tf2_server::RequestTransformStreamRequest& r2)
const;
39 protected: std::unique_ptr<tf2_ros::Buffer>
buffer;
40 protected: std::unique_ptr<tf2_ros::BufferServer>
server;
41 protected: std::unique_ptr<tf2_ros::TransformListener>
listener;
49 protected: std::map<std::string, ros::Publisher>
publishers;
53 protected:
typedef std::pair<std::string, std::string>
FrameSpec;
57 protected:
typedef std::pair<std::string, std::string>
TopicsSpec;
58 protected: std::map<TopicsSpec, ros::Timer>
timers;
60 protected: std::map<TopicsSpec, RequestTransformStreamRequest>
streams;
69 protected:
bool started =
false;
73 public:
virtual void start();
75 protected:
void registerInitialStreams();
77 protected:
virtual bool onRequestTransformStream(RequestTransformStreamRequest& req, RequestTransformStreamResponse& resp);
79 protected:
virtual void streamTransform(
const ros::TimerEvent& event,
const RequestTransformStreamRequest& request,
const TopicsSpec& topics);
81 protected:
virtual std::unique_ptr<FramesList> getFramesList(
const RequestTransformStreamRequest& req)
const;
83 protected:
virtual TopicsSpec getTopicsNames(
const RequestTransformStreamRequest& request);
85 protected:
virtual void updateFramesLists();
87 protected:
virtual void onSubscriberConnected(
const TopicsSpec& topics);
88 protected:
virtual void onSubscriberDisconnected(
const TopicsSpec& topics);
94 #endif //TF2_SERVER_TF2_SERVER_H std::map< TopicsSpec, size_t > subscriberNumbers
std::unique_ptr< tf2_ros::Buffer > buffer
std::map< RequestTransformStreamRequest, std::unique_ptr< FramesList >, RequestComparatorByFrames > frames
std::map< TopicsSpec, ros::Timer > timers
std::unique_ptr< tf2_ros::TransformListener > listener
std::vector< FrameSpec > FramesList
ros::Duration initialStreamsWaitTime
std::vector< RequestTransformStreamRequest > initialStreams
ros::Timer initialStreamsTimer
std::map< TopicsSpec, RequestTransformStreamRequest > streams
bool operator()(const tf2_server::RequestTransformStreamRequest &r1, const tf2_server::RequestTransformStreamRequest &r2) const
ros::Duration transformsUpdatePeriod
std::map< std::string, ros::Publisher > staticPublishers
bool equals(const tf2_server::RequestTransformStreamRequest &r1, const tf2_server::RequestTransformStreamRequest &r2) const
ros::ServiceServer requestTransformStreamServer
std::pair< std::string, std::string > TopicsSpec
ros::Time lastTransformsUpdateTime
std::map< std::string, ros::Publisher > publishers
std::unordered_set< std::string > topicNames
std::map< std::string, tf2_msgs::TFMessage > lastStaticTransforms
std::unique_ptr< tf2_ros::BufferServer > server
std::pair< std::string, std::string > FrameSpec
std::mutex subscriberMutex