Closed bjsowa closed 3 months ago
are you planning to make some changes in
image_transport_plugins
too ? using this new API ?
I don't see how the compressed image transports can take advantage of the image ownership as they still have to copy the data, BUT they might avoid copying the resulting compressed data by publishing it using std::unique_ptr
so I was planning to make them use the more generic publish(const sensor_msgs::msg::Image & message, const PublisherT & publisher)
method to publish unique_ptr instead of const reference.
I marked the method as deprecated. Also, I think that we should not add default implementations that are empty or don't make sense. I also can't make these methods abstract, so instead I just throw exceptions. @ahcorde What do you think?
@ahcorde Could this be backported to Jazzy?
https://github.com/Mergifyio backport jazzy
backport jazzy
ROS2 supports intra-process communication when composing multiple nodes in a single process. It additionally can avoid doing any copies of the data when published using
std::unique_ptr<MessageT>
and subscribed usingshared_ptr<const MessageT>
orstd::unique_ptr<MessageT>
(at most 1 subscriber)This PR is my attempt to add support for publishing using
std::unique_ptr
without breaking any of the existing APIs.The idea is that:
raw
can take advantage of the ownership).Publisher::publish(sensor_msgs::msg::Image::UniquePtr message)
method first publishes using the const reference to plugins that don't supportstd::unique_ptr
, then moves the ownership of the message to (at most 1) plugin that supports it.std::unique_ptr
and has subscriptions, we pass the ownership to only one such plugin (the first we find), and for the rest we still use const reference, delegating doing any extra copies to plugin implementations.Related issues/prs:
212
215
216 (kinda)