tf2_server.h
Go to the documentation of this file.
1 #ifndef TF2_SERVER_TF2_SERVER_H
2 #define TF2_SERVER_TF2_SERVER_H
3 
4 #include <map>
5 #include <memory>
6 #include <mutex>
7 #include <unordered_set>
8 
11 #include <tf2_server/RequestTransformStream.h>
12 #include <ros/ros.h>
13 
14 namespace tf2_server
15 {
16 
18 {
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;
23 };
24 
26 {
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;
31 };
32 
33 class TF2Server
34 {
35 
36  protected: ros::NodeHandle& nh;
37  protected: ros::NodeHandle& pnh;
38 
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;
42  protected: std::mutex mutex;
43  protected: std::mutex subscriberMutex;
44  protected: std::mutex streamsMutex;
45 
47 
48  protected: std::unordered_set<std::string> topicNames;
49  protected: std::map<std::string, ros::Publisher> publishers;
50  protected: std::map<std::string, ros::Publisher> staticPublishers;
51  protected: std::map<std::string, tf2_msgs::TFMessage> lastStaticTransforms;
52 
53  protected: typedef std::pair<std::string, std::string> FrameSpec;
54  protected: typedef std::vector<FrameSpec> FramesList;
55  protected: std::map<RequestTransformStreamRequest, std::unique_ptr<FramesList>, RequestComparatorByFrames> frames;
56 
57  protected: typedef std::pair<std::string, std::string> TopicsSpec;
58  protected: std::map<TopicsSpec, ros::Timer> timers;
59  protected: std::map<TopicsSpec, size_t> subscriberNumbers;
60  protected: std::map<TopicsSpec, RequestTransformStreamRequest> streams;
61 
62  protected: std::vector<RequestTransformStreamRequest> initialStreams;
65 
68 
69  protected: bool started = false;
70 
71  public: explicit TF2Server(ros::NodeHandle& nh, ros::NodeHandle& pnh);
72 
73  public: virtual void start();
74 
75  protected: void registerInitialStreams();
76 
77  protected: virtual bool onRequestTransformStream(RequestTransformStreamRequest& req, RequestTransformStreamResponse& resp);
78 
79  protected: virtual void streamTransform(const ros::TimerEvent& event, const RequestTransformStreamRequest& request, const TopicsSpec& topics);
80 
81  protected: virtual std::unique_ptr<FramesList> getFramesList(const RequestTransformStreamRequest& req) const;
82 
83  protected: virtual TopicsSpec getTopicsNames(const RequestTransformStreamRequest& request);
84 
85  protected: virtual void updateFramesLists();
86 
87  protected: virtual void onSubscriberConnected(const TopicsSpec& topics);
88  protected: virtual void onSubscriberDisconnected(const TopicsSpec& topics);
89 
90 };
91 
92 }
93 
94 #endif //TF2_SERVER_TF2_SERVER_H
std::map< TopicsSpec, size_t > subscriberNumbers
Definition: tf2_server.h:59
ROSCPP_DECL void start()
std::unique_ptr< tf2_ros::Buffer > buffer
Definition: tf2_server.h:39
std::map< RequestTransformStreamRequest, std::unique_ptr< FramesList >, RequestComparatorByFrames > frames
Definition: tf2_server.h:55
std::map< TopicsSpec, ros::Timer > timers
Definition: tf2_server.h:58
std::unique_ptr< tf2_ros::TransformListener > listener
Definition: tf2_server.h:41
std::mutex streamsMutex
Definition: tf2_server.h:44
std::vector< FrameSpec > FramesList
Definition: tf2_server.h:54
ros::Duration initialStreamsWaitTime
Definition: tf2_server.h:63
std::vector< RequestTransformStreamRequest > initialStreams
Definition: tf2_server.h:62
ros::Timer initialStreamsTimer
Definition: tf2_server.h:64
std::map< TopicsSpec, RequestTransformStreamRequest > streams
Definition: tf2_server.h:60
bool operator()(const tf2_server::RequestTransformStreamRequest &r1, const tf2_server::RequestTransformStreamRequest &r2) const
Definition: tf2_server.cpp:551
ros::NodeHandle & pnh
Definition: tf2_server.h:37
ros::Duration transformsUpdatePeriod
Definition: tf2_server.h:67
std::map< std::string, ros::Publisher > staticPublishers
Definition: tf2_server.h:50
bool equals(const tf2_server::RequestTransformStreamRequest &r1, const tf2_server::RequestTransformStreamRequest &r2) const
Definition: tf2_server.cpp:574
ros::ServiceServer requestTransformStreamServer
Definition: tf2_server.h:46
std::pair< std::string, std::string > TopicsSpec
Definition: tf2_server.h:57
ros::Time lastTransformsUpdateTime
Definition: tf2_server.h:66
std::map< std::string, ros::Publisher > publishers
Definition: tf2_server.h:49
std::unordered_set< std::string > topicNames
Definition: tf2_server.h:48
std::map< std::string, tf2_msgs::TFMessage > lastStaticTransforms
Definition: tf2_server.h:51
std::unique_ptr< tf2_ros::BufferServer > server
Definition: tf2_server.h:40
std::pair< std::string, std::string > FrameSpec
Definition: tf2_server.h:53
ros::NodeHandle & nh
Definition: tf2_server.h:36
std::mutex subscriberMutex
Definition: tf2_server.h:43


tf2_server
Author(s): Martin Pecka
autogenerated on Sun Jun 12 2022 02:10:45