GLIM
Loading...
Searching...
No Matches
extension_module_ros.hpp
1#pragma once
2
3#include <spdlog/spdlog.h>
4#include <ros/ros.h>
5#include <rosbag/message_instance.h>
6#include <glim/util/extension_module.hpp>
7
8namespace glim {
9
14public:
15 using Ptr = std::shared_ptr<GenericTopicSubscription>;
16
21 GenericTopicSubscription(const std::string& topic) : topic(topic) {}
22
27 virtual void create_subscriber(ros::NodeHandle& nh) = 0;
28
33 virtual void insert_message_instance(const rosbag::MessageInstance& m) = 0;
34
36 const std::string topic;
37};
38
42template <typename Msg>
44public:
49 template <typename Callback>
50 TopicSubscription(const std::string& topic, const Callback& callback) : GenericTopicSubscription(topic),
51 callback(callback) {}
52
53 virtual void create_subscriber(ros::NodeHandle& nh) override { sub = nh.subscribe<Msg>(topic, 10, callback); }
54
55 virtual void insert_message_instance(const rosbag::MessageInstance& m) override {
56 const auto msg = m.instantiate<Msg>();
57 if (msg == nullptr) {
58 spdlog::warn("failed to instantiate message on {}", topic);
59 return;
60 }
61
62 callback(msg);
63 }
64
65 const std::function<void(const std::shared_ptr<const Msg>&)> callback;
66 ros::Subscriber sub;
67};
68
73public:
75 virtual ~ExtensionModuleROS() {}
76
77 virtual std::vector<GenericTopicSubscription::Ptr> create_subscriptions() = 0;
78};
79
80} // namespace glim
Extension module with ROS1 topic subscription.
Definition extension_module_ros.hpp:72
Extension module to be dynamically loaded via dynamic linking.
Definition extension_module.hpp:10
Generic topic subscription that allows transparently subscribes to a topic through glim_rosnode and g...
Definition extension_module_ros.hpp:13
GenericTopicSubscription(const std::string &topic)
Constructor.
Definition extension_module_ros.hpp:21
virtual void insert_message_instance(const rosbag::MessageInstance &m)=0
Parse a rosbag message instance and feed the msg to the callback.
virtual void create_subscriber(ros::NodeHandle &nh)=0
Create a ROS subscriber.
const std::string topic
Topic name.
Definition extension_module_ros.hpp:36
Specialized topic subscription for type erasure.
Definition extension_module_ros.hpp:43
virtual void insert_message_instance(const rosbag::MessageInstance &m) override
Parse a rosbag message instance and feed the msg to the callback.
Definition extension_module_ros.hpp:55
TopicSubscription(const std::string &topic, const Callback &callback)
topic Topic name
Definition extension_module_ros.hpp:50
virtual void create_subscriber(ros::NodeHandle &nh) override
Create a ROS subscriber.
Definition extension_module_ros.hpp:53