15 #ifndef GENERIC_PUBLISHER_H
16 #define GENERIC_PUBLISHER_H
20 #include <rclcpp/rclcpp.hpp>
21 #include <rclcpp/publisher_base.hpp>
27 const std::string& topic_name,
28 const rosidl_message_type_support_t& type_support)
30 : rclcpp::PublisherBase(node_base, topic_name, type_support, rcl_publisher_get_default_options())
32 : rclcpp::PublisherBase(node_base, topic_name, type_support, rcl_publisher_get_default_options(),
callbacks_,
true)
38 void publish(std::shared_ptr<rmw_serialized_message_t> message)
40 auto return_code = rcl_publish_serialized_message(get_publisher_handle().
get(), message.get(), NULL);
42 if (return_code != RCL_RET_OK)
44 rclcpp::exceptions::throw_from_rcl_error(return_code,
"failed to publish serialized message");
48 static std::shared_ptr<GenericPublisher>
create(rclcpp::Node& node,
49 const std::string& topic_name,
50 const std::string& topic_type)
53 auto library = std::move(rosbag2_cpp::get_typesupport_library(topic_type,
"rosidl_typesupport_cpp"));
54 auto type_support = rosbag2_cpp::get_typesupport_handle(topic_type,
"rosidl_typesupport_cpp", library);
57 return std::make_shared<GenericPublisher>(node.get_node_base_interface().get(), topic_name, *type_support);
65 #endif // GENERIC_PUBLISHER_H