15 #ifndef GENERIC_PUBLISHER_H 16 #define GENERIC_PUBLISHER_H 20 #include <rclcpp/rclcpp.hpp> 26 const std::string& topic_name,
27 const rosidl_message_type_support_t& type_support)
28 : rclcpp::PublisherBase(node_base, topic_name, type_support, rcl_publisher_get_default_options())
34 void publish(std::shared_ptr<rmw_serialized_message_t> message)
36 auto return_code = rcl_publish_serialized_message(get_publisher_handle().
get(), message.get(), NULL);
38 if (return_code != RCL_RET_OK)
40 rclcpp::exceptions::throw_from_rcl_error(return_code,
"failed to publish serialized message");
44 static std::shared_ptr<GenericPublisher>
create(rclcpp::Node& node,
45 const std::string& topic_name,
46 const std::string& topic_type)
49 auto library = std::move(rosbag2_cpp::get_typesupport_library(topic_type,
"rosidl_typesupport_cpp"));
50 auto type_support = rosbag2_cpp::get_typesupport_handle(topic_type,
"rosidl_typesupport_cpp",
library);
53 return std::make_shared<GenericPublisher>(node.get_node_base_interface().get(), topic_name, *type_support);
57 #endif // GENERIC_PUBLISHER_H
virtual ~GenericPublisher()=default
void publish(std::shared_ptr< rmw_serialized_message_t > message)
GenericPublisher(rclcpp::node_interfaces::NodeBaseInterface *node_base, const std::string &topic_name, const rosidl_message_type_support_t &type_support)
static std::shared_ptr< GenericPublisher > create(rclcpp::Node &node, const std::string &topic_name, const std::string &topic_type)