event_detector 1.0.0
Loading...
Searching...
No Matches
EventDetector.hpp
1
25#pragma once
26
27#include <map>
28#include <memory>
29#include <optional>
30#include <string>
31
32#include <tf2_ros/transform_listener.h>
33#include <lifecycle_msgs/msg/transition.hpp>
34#include <rclcpp/rclcpp.hpp>
35#include <rclcpp/time.hpp>
36#include <rclcpp/time_source.hpp>
37#include <rclcpp_lifecycle/lifecycle_node.hpp>
38#include <rclcpp_lifecycle/lifecycle_publisher.hpp>
39#include <rosbag2_cpp/reader.hpp>
40#include <rosbag2_cpp/writer.hpp>
41
42#include "event_detector/AnalysisManager.hpp"
43#include "event_detector/BufferManager.hpp"
44
45namespace event_detector {
46
47class EventDetector;
48
49class EventDetector : public rclcpp_lifecycle::LifecycleNode {
50 public:
56 explicit EventDetector(rclcpp::NodeOptions options);
57
63 std::vector<ClientConnection> getConnectedClients() const;
64
65 private:
69 std::shared_ptr<rclcpp::TimeSource> time_source_;
70
71 protected:
79 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_configure(
80 const rclcpp_lifecycle::State& state) override;
81
89 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_activate(
90 const rclcpp_lifecycle::State& state) override;
91
99 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_deactivate(
100 const rclcpp_lifecycle::State& state) override;
101
109 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_cleanup(
110 const rclcpp_lifecycle::State& state) override;
111
119 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_shutdown(
120 const rclcpp_lifecycle::State& state) override;
121
130
139 void insertTransformPassthrough(const std::shared_ptr<const tf2_msgs::msg::TFMessage>& transforms,
140 const std::string& topic,
141 std::optional<rclcpp::Time> stamp_override = std::optional<rclcpp::Time>());
142
143 protected:
148
162 void setup();
179 template <typename T>
180 void insertPassthrough(const std::shared_ptr<const T>& sample, const std::string& client_id, const std::string& topic,
181 std::optional<rclcpp::Time> stamp_override = std::optional<rclcpp::Time>());
186 template <typename T>
187 rclcpp::Time getSampleStamp(const T& sample);
188
192 rcl_interfaces::msg::SetParametersResult onParametersSetCallback(const std::vector<rclcpp::Parameter>& params);
193
197 void postParameterSetCallback(rcl_interfaces::msg::ParameterEvent::UniquePtr event);
198
202 OnSetParametersCallbackHandle::SharedPtr callback_handle_;
203
207 rclcpp::SyncParametersClient::SharedPtr parameters_client_;
208
212 rclcpp::Subscription<rcl_interfaces::msg::ParameterEvent>::SharedPtr param_sub_;
213
217 struct {
221 std::vector<std::string> initialization_bags;
223
227 struct {
230
234 std::shared_ptr<BufferManager> buffer_manager_;
235
239 std::shared_ptr<AnalysisManager> analysis_manager_;
240
244 std::vector<ClientConnection> connected_clients_;
245
249 mutable std::shared_mutex reconfigure_mutex_;
250
254 rclcpp::Subscription<tf2_msgs::msg::TFMessage>::SharedPtr transforms_subscriber_;
255
259 rclcpp::Subscription<tf2_msgs::msg::TFMessage>::SharedPtr static_transforms_subscriber_;
260
264#define DATATYPE(TYPE, VAR) std::map<std::string, rclcpp::Subscription<TYPE>::ConstSharedPtr> VAR##_subscribers_;
265#include "event_detector/datatypes.macro"
266#undef DATATYPE
267};
268
269} // namespace event_detector
270
271#include "event_detector/EventDetector.tpp"
std::shared_ptr< BufferManager > buffer_manager_
BufferManager component.
void loadParameters()
Loads ROS parameters used in the node.
rclcpp::Subscription< rcl_interfaces::msg::ParameterEvent >::SharedPtr param_sub_
Subscription to parameter events.
std::vector< ClientConnection > getConnectedClients() const
Returns client connection details.
rclcpp::SyncParametersClient::SharedPtr parameters_client_
Client for receiving parameter changes.
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_shutdown(const rclcpp_lifecycle::State &state) override
State transition callback for 'shutdown' transition.
OnSetParametersCallbackHandle::SharedPtr callback_handle_
Callback handle for onParameterSetCallback.
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_configure(const rclcpp_lifecycle::State &state) override
State transition callback for 'configure' transition.
void initializeBufferFromBag()
initializes buffer from bag
int default_queue_size
default subscriber queue size
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_activate(const rclcpp_lifecycle::State &state) override
State transition callback for 'activate' transition.
void waitForTimeToStart()
Waits until the ROS 2 time has started.
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_deactivate(const rclcpp_lifecycle::State &state) override
State transition callback for 'deactivate' transition.
rclcpp::Subscription< tf2_msgs::msg::TFMessage >::SharedPtr static_transforms_subscriber_
struct event_detector::EventDetector::@0 buffer_config_
buffer configuration
void insertTransformPassthrough(const std::shared_ptr< const tf2_msgs::msg::TFMessage > &transforms, const std::string &topic, std::optional< rclcpp::Time > stamp_override=std::optional< rclcpp::Time >())
Callback for tf2_msgs::msg::TFMessage that groups the transforms by clients and passes them to the co...
rclcpp::Subscription< tf2_msgs::msg::TFMessage >::SharedPtr transforms_subscriber_
ROS subscriber for transforms.
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_cleanup(const rclcpp_lifecycle::State &state) override
State transition callback for 'cleanup' transition.
void postParameterSetCallback(rcl_interfaces::msg::ParameterEvent::UniquePtr event)
Callback for acting upon parameter changes.
EventDetector(rclcpp::NodeOptions options)
Constructor getting its options e.g. from ComposableNodeContainer.
bool use_msg_stamp
whether to use msg stamp for sorting if possible
void loadClientParameters()
Loads ROS parameters for EventDetector clients.
struct event_detector::EventDetector::@1 analysis_config_
analysis configuration
void insertPassthrough(const std::shared_ptr< const T > &sample, const std::string &client_id, const std::string &topic, std::optional< rclcpp::Time > stamp_override=std::optional< rclcpp::Time >())
Callback template for inserting data into the buffer.
std::vector< std::string > initialization_bags
filepaths used for initializing buffer at startup
void registerClients()
Sets up subscriptions for connected client.
double default_period
default analysis interval
rclcpp::Time getSampleStamp(const T &sample)
Function for retrieving a time stamp to associate with a received message depending on buffer paramet...
double default_time
default buffer time
rcl_interfaces::msg::SetParametersResult onParametersSetCallback(const std::vector< rclcpp::Parameter > &params)
Callback for validating parameter changes.
std::shared_ptr< AnalysisManager > analysis_manager_
AnalysisManager component.
std::shared_mutex reconfigure_mutex_
mutex for connected clients vector
void setup()
Sets up BufferManager, DatabaseInterface, subscribers and registers the clients.
std::vector< ClientConnection > connected_clients_
client connection details