FP Perception 0.1.2
Loading...
Searching...
No Matches
driver_manager.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <string>
5
6#include <pluginlib/class_loader.hpp>
7#include <rclcpp/rclcpp.hpp>
8
11
12namespace fp_perception
13{
14
16{
17public:
18 DriverManager(const rclcpp::Node::SharedPtr& node, pluginlib::ClassLoader<fp_perception::DriverBase>& loader)
19 : node_(node), loader_(loader)
20 {
21 }
22
23 template <typename DriverType>
24 std::shared_ptr<DriverType> loadDriver(const std::string& parameter_name, const std::string& default_plugin_name,
25 const std::string& driver_description,
26 const std::string& interface_description) const
27 {
28 node_->declare_parameter(parameter_name, default_plugin_name);
29 const auto plugin_name = node_->get_parameter(parameter_name).as_string();
30
31 RCLCPP_INFO(node_->get_logger(), "Loading %s plugin: %s", driver_description.c_str(), plugin_name.c_str());
32
33 auto driver_base = loader_.createSharedInstance(plugin_name);
34 driver_base->initialize(node_);
35
36 auto typed_driver = std::dynamic_pointer_cast<DriverType>(driver_base);
37 if (!typed_driver)
38 {
39 throw fp_perception_exception("Loaded " + driver_description + " does not implement " + interface_description +
40 ": " + plugin_name);
41 }
42
43 RCLCPP_INFO(node_->get_logger(), "Started %s plugin: %s", driver_description.c_str(), plugin_name.c_str());
44
45 return typed_driver;
46 }
47
48 template <typename DriverType>
49 static void testDriver(const rclcpp::Logger& logger, const std::shared_ptr<DriverType>& driver,
50 const std::string& driver_description)
51 {
52 if (!driver)
53 return;
54
55 RCLCPP_INFO(logger, "Testing %s...", driver_description.c_str());
56 driver->test();
57 }
58
59private:
60 rclcpp::Node::SharedPtr node_;
61 pluginlib::ClassLoader<fp_perception::DriverBase>& loader_;
62};
63
64} // namespace fp_perception
Definition driver_manager.hpp:16
pluginlib::ClassLoader< fp_perception::DriverBase > & loader_
Definition driver_manager.hpp:61
rclcpp::Node::SharedPtr node_
Definition driver_manager.hpp:60
static void testDriver(const rclcpp::Logger &logger, const std::shared_ptr< DriverType > &driver, const std::string &driver_description)
Definition driver_manager.hpp:49
std::shared_ptr< DriverType > loadDriver(const std::string &parameter_name, const std::string &default_plugin_name, const std::string &driver_description, const std::string &interface_description) const
Definition driver_manager.hpp:24
DriverManager(const rclcpp::Node::SharedPtr &node, pluginlib::ClassLoader< fp_perception::DriverBase > &loader)
Definition driver_manager.hpp:18
Definition audio_buffer.hpp:16
Base class for driver exceptions.
Definition exceptions.hpp:14