From 9babaeaa6a7b8daef5e7773c0191d5530d176c8f Mon Sep 17 00:00:00 2001 From: Kenji Brameld Date: Sun, 21 Aug 2022 07:16:32 +0900 Subject: [PATCH] add code to deprecate barcode topic Signed-off-by: Kenji Brameld --- README.md | 3 ++- .../include/zbar_ros/barcode_reader_node.hpp | 4 +++- zbar_ros/package.xml | 1 + zbar_ros/src/barcode_reader_node.cpp | 18 +++++++++++++----- zbar_ros_interfaces/msg/Symbol.msg | 2 +- 5 files changed, 20 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index e1f2e48..18379be 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,8 @@ Subscriptions: * `image` (`sensor_msgs/msg/Image.msg`) Publisher: -* `barcode` (`zbar_ros_interfaces/msg/Symbol`) +* `barcode` (`std_msgs/msg/String`) - **DEPRECATED** +* `symbol` (`zbar_ros_interfaces/msg/Symbol`) ### (Optional) Debugging the barcode_reader node diff --git a/zbar_ros/include/zbar_ros/barcode_reader_node.hpp b/zbar_ros/include/zbar_ros/barcode_reader_node.hpp index 7669e84..a80b4fb 100644 --- a/zbar_ros/include/zbar_ros/barcode_reader_node.hpp +++ b/zbar_ros/include/zbar_ros/barcode_reader_node.hpp @@ -37,6 +37,7 @@ #include "rclcpp/timer.hpp" #include "./zbar.h" #include "sensor_msgs/msg/image.hpp" +#include "std_msgs/msg/string.hpp" #include "zbar_ros_interfaces/msg/symbol.hpp" namespace zbar_ros @@ -52,7 +53,8 @@ class BarcodeReaderNode : public rclcpp::Node void cleanCb(); rclcpp::Subscription::SharedPtr camera_sub_; - rclcpp::Publisher::SharedPtr barcode_pub_; + rclcpp::Publisher::SharedPtr barcode_pub_; // DEPRECATED + rclcpp::Publisher::SharedPtr symbol_pub_; zbar::ImageScanner scanner_; rclcpp::TimerBase::SharedPtr clean_timer_; diff --git a/zbar_ros/package.xml b/zbar_ros/package.xml index 4c55d75..b9ed5c3 100644 --- a/zbar_ros/package.xml +++ b/zbar_ros/package.xml @@ -15,6 +15,7 @@ zbar cv_bridge sensor_msgs + std_msgs zbar_ros_interfaces ament_lint_auto diff --git a/zbar_ros/src/barcode_reader_node.cpp b/zbar_ros/src/barcode_reader_node.cpp index 3fa5235..59f8aa7 100644 --- a/zbar_ros/src/barcode_reader_node.cpp +++ b/zbar_ros/src/barcode_reader_node.cpp @@ -44,12 +44,11 @@ BarcodeReaderNode::BarcodeReaderNode() { scanner_.set_config(zbar::ZBAR_NONE, zbar::ZBAR_CFG_ENABLE, 1); - camera_sub_ = this->create_subscription( "image", 10, std::bind(&BarcodeReaderNode::imageCb, this, std::placeholders::_1)); barcode_pub_ = this->create_publisher("barcode", 10); - barcode_pub_ = this->create_publisher("symbol", 10); + symbol_pub_ = this->create_publisher("symbol", 10); throttle_ = this->declare_parameter("throttle_repeated_barcodes", 0.0); RCLCPP_DEBUG(get_logger(), "throttle_repeated_barcodes : %f", throttle_); @@ -77,7 +76,6 @@ void BarcodeReaderNode::imageCb(sensor_msgs::msg::Image::ConstSharedPtr image) // If there are barcodes in the image, iterate over all barcode readings from image for (zbar::Image::SymbolIterator symbol_it = it_start; symbol_it != it_end; ++symbol_it) { zbar_ros_interfaces::msg::Symbol symbol; - symbol.data = symbol_it->get_data(); RCLCPP_DEBUG(get_logger(), "Barcode detected with data: '%s'", symbol.data.c_str()); @@ -98,6 +96,7 @@ void BarcodeReaderNode::imageCb(sensor_msgs::msg::Image::ConstSharedPtr image) if (throttle_ > 0.0) { const std::lock_guard lock(memory_mutex_); + std::string barcode = symbol.data; // check if barcode has been recorded as seen, and skip detection if (barcode_memory_.count(barcode) > 0) { // check if time reached to forget barcode @@ -119,17 +118,26 @@ void BarcodeReaderNode::imageCb(sensor_msgs::msg::Image::ConstSharedPtr image) // publish barcode RCLCPP_DEBUG(get_logger(), "Publishing data as string"); std_msgs::msg::String barcode_string; - barcode_string.data = barcode; + barcode_string.data = symbol.data; barcode_pub_->publish(barcode_string); // publish symbol RCLCPP_DEBUG(get_logger(), "Publishing Symbol"); - barcode_pub_->publish(symbol); + symbol_pub_->publish(symbol); } } else { RCLCPP_DEBUG(get_logger(), "No barcode detected in image"); } + // Warn if there are subscriptions on barcode topic, because it's deprecated. + static bool alreadyWarnedDeprecation = false; + if (!alreadyWarnedDeprecation && count_subscribers("barcode") > 0) { + alreadyWarnedDeprecation = true; + RCLCPP_WARN(get_logger(), "A subscription was detected on the deprecated 'barcode'" + "topic. Please subscribe to the new 'symbol' topic with type" + "'zbar_ros_interfaces::msg::Symbol'."); + } + zbar_image.set_data(NULL, 0); } diff --git a/zbar_ros_interfaces/msg/Symbol.msg b/zbar_ros_interfaces/msg/Symbol.msg index 9b4e98d..11dae92 100644 --- a/zbar_ros_interfaces/msg/Symbol.msg +++ b/zbar_ros_interfaces/msg/Symbol.msg @@ -1,2 +1,2 @@ string data -geometry_msgs/Point[] points \ No newline at end of file +geometry_msgs/Point[] points