From 7ed0746b3344a0ccb12533f9e4075884609f3ddc Mon Sep 17 00:00:00 2001 From: TLZH0001 Date: Fri, 3 Jan 2025 11:05:22 -0800 Subject: [PATCH 1/2] feat: changed to unique --- src/yolov8/src/ros_segmentation.cpp | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/yolov8/src/ros_segmentation.cpp b/src/yolov8/src/ros_segmentation.cpp index ca7ec69..eefdc15 100755 --- a/src/yolov8/src/ros_segmentation.cpp +++ b/src/yolov8/src/ros_segmentation.cpp @@ -56,12 +56,20 @@ class YoloV8Node : public rclcpp::Node // Create subscribers and publishers for all cameras for (const std::string& topic : camera_topics_) { + rclcpp::SubscriptionOptions sub_options; + sub_options.use_intra_process_comm = rclcpp::IntraProcessSetting::Enable; + + auto qos = rclcpp::QoS(10); + qos.best_effort(); + rclcpp::Subscription::SharedPtr subscription_ = this->create_subscription( - topic + "/image", 10, + topic + "/image", + qos, [this, topic](const sensor_msgs::msg::Image::SharedPtr msg) { this->addToBufferCallback(msg, topic); - } + }, + sub_options ); subscriptions_.push_back(subscription_); @@ -86,11 +94,11 @@ class YoloV8Node : public rclcpp::Node * @param image_msg: The image message from the camera * @param topic: The ROS topic the image message was published on */ - void addToBufferCallback(const sensor_msgs::msg::Image::SharedPtr &image_msg, const std::string topic) { + void addToBufferCallback(sensor_msgs::msg::Image::UniquePtr image_msg, const std::string topic) { // TODO: Will this be deleted in memory since it is passed? std::cout << "Received image message on topic " << topic << std::endl; std::unique_lock lock(buffer_mutex_); - current_buffer_[topic] = image_msg; + current_buffer_[topic] = std::move(image_msg); // Check if ready for batching if (current_buffer_.size() == camera_topics_.size()) { @@ -200,7 +208,7 @@ class YoloV8Node : public rclcpp::Node void preprocess_callback(std::map& images) { for (const auto& pair : processing_buffer_) { std::string camera_topic = pair.first; - const sensor_msgs::msg::Image::SharedPtr image_msg = pair.second; + const sensor_msgs::msg::Image::UniquePtr image_msg = pair.second; try { // Share the memory with the original image @@ -416,7 +424,7 @@ class YoloV8Node : public rclcpp::Node std::map processing_buffer_; std::mutex buffer_mutex_; - std::vector::SharedPtr> subscriptions_; + std::vector::UniquePtr> subscriptions_; YoloV8& yoloV8_; }; From 0be0361ec9b807971cc216142e0829b9c2ea88ac Mon Sep 17 00:00:00 2001 From: TLZH0001 Date: Fri, 3 Jan 2025 11:19:35 -0800 Subject: [PATCH 2/2] chore: added unique ptr --- src/yolov8/src/ros_segmentation.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/yolov8/src/ros_segmentation.cpp b/src/yolov8/src/ros_segmentation.cpp index eefdc15..20025bd 100755 --- a/src/yolov8/src/ros_segmentation.cpp +++ b/src/yolov8/src/ros_segmentation.cpp @@ -62,10 +62,10 @@ class YoloV8Node : public rclcpp::Node auto qos = rclcpp::QoS(10); qos.best_effort(); - rclcpp::Subscription::SharedPtr subscription_ = this->create_subscription( + rclcpp::Subscription::UniquePtr subscription_ = this->create_subscription( topic + "/image", qos, - [this, topic](const sensor_msgs::msg::Image::SharedPtr msg) + [this, topic](const sensor_msgs::msg::Image::UniquePtr msg) { this->addToBufferCallback(msg, topic); },