Skip to content

Commit bff9d40

Browse files
committed
change message filter
Signed-off-by: MasatoSaeki <masato.saeki@tier4.jp>
1 parent e9c43b4 commit bff9d40

File tree

2 files changed

+17
-40
lines changed

2 files changed

+17
-40
lines changed

perception/autoware_traffic_light_selector/src/traffic_light_selector_node.cpp

+12-29
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ TrafficLightSelectorNode::TrafficLightSelectorNode(const rclcpp::NodeOptions & n
3333
detected_rois_sub_(this, "input/detected_rois", rclcpp::QoS{1}.get_rmw_qos_profile()),
3434
rough_rois_sub_(this, "input/rough_rois", rclcpp::QoS{1}.get_rmw_qos_profile()),
3535
expected_rois_sub_(this, "input/expect_rois", rclcpp::QoS{1}.get_rmw_qos_profile()),
36-
sync_(SyncPolicy(10), detected_rois_sub_, rough_rois_sub_, expected_rois_sub_),
37-
camera_info_subscribed_(false)
36+
camera_info_sub_(this, "input/camera_info", rclcpp::SensorDataQoS().get_rmw_qos_profile()),
37+
sync_(SyncPolicy(10), detected_rois_sub_, rough_rois_sub_, expected_rois_sub_, camera_info_sub_)
3838
{
3939
{
4040
stop_watch_ptr_ =
@@ -49,40 +49,23 @@ TrafficLightSelectorNode::TrafficLightSelectorNode(const rclcpp::NodeOptions & n
4949
using std::placeholders::_1;
5050
using std::placeholders::_2;
5151
using std::placeholders::_3;
52-
sync_.registerCallback(std::bind(&TrafficLightSelectorNode::objectsCallback, this, _1, _2, _3));
52+
using std::placeholders::_4;
53+
sync_.registerCallback(std::bind(&TrafficLightSelectorNode::objectsCallback, this, _1, _2, _3, _4));
5354

54-
camera_info_sub_ = create_subscription<sensor_msgs::msg::CameraInfo>(
55-
"input/camera_info", rclcpp::SensorDataQoS(),
56-
std::bind(&TrafficLightSelectorNode::cameraInfoCallback, this, _1));
5755
// Publisher
5856
pub_traffic_light_rois_ =
5957
create_publisher<TrafficLightRoiArray>("output/traffic_rois", rclcpp::QoS{1});
6058
}
6159

62-
void TrafficLightSelectorNode::cameraInfoCallback(
63-
const sensor_msgs::msg::CameraInfo::ConstSharedPtr input_msg)
64-
{
65-
std::lock_guard<std::mutex> lock(mutex_);
66-
if (camera_info_subscribed_) {
67-
return;
68-
}
69-
image_width_ = input_msg->width;
70-
image_height_ = input_msg->height;
71-
camera_info_subscribed_ = true;
72-
RCLCPP_INFO(get_logger(), "camera_info received");
73-
}
74-
7560
void TrafficLightSelectorNode::objectsCallback(
7661
const DetectedObjectsWithFeature::ConstSharedPtr & detected_traffic_light_msg,
7762
const TrafficLightRoiArray::ConstSharedPtr & rough_rois_msg,
78-
const TrafficLightRoiArray::ConstSharedPtr & expected_rois_msg)
63+
const TrafficLightRoiArray::ConstSharedPtr & expected_rois_msg,
64+
const sensor_msgs::msg::CameraInfo::ConstSharedPtr & camera_info_msg)
7965
{
8066
stop_watch_ptr_->toc("processing_time", true);
81-
mutex_.lock();
82-
if (!camera_info_subscribed_) {
83-
return;
84-
}
85-
mutex_.unlock();
67+
uint32_t image_width = camera_info_msg->width;
68+
uint32_t image_height = camera_info_msg->height;
8669
std::map<int, sensor_msgs::msg::RegionOfInterest> rough_rois_map;
8770
for (const auto & roi : rough_rois_msg->rois) {
8871
rough_rois_map[roi.traffic_light_id] = roi.roi;
@@ -103,9 +86,9 @@ void TrafficLightSelectorNode::objectsCallback(
10386
expect_rois.push_back(expected_roi.roi);
10487
}
10588
cv::Mat expect_roi_img =
106-
utils::createBinaryImageFromRois(expect_rois, cv::Size(image_width_, image_height_));
89+
utils::createBinaryImageFromRois(expect_rois, cv::Size(image_width, image_height));
10790
cv::Mat det_roi_img =
108-
utils::createBinaryImageFromRois(det_rois, cv::Size(image_width_, image_height_));
91+
utils::createBinaryImageFromRois(det_rois, cv::Size(image_width, image_height));
10992
// for (const auto expect_roi : expect_rois) {
11093
for (const auto & expect_traffic_roi : expected_rois_msg->rois) {
11194
const auto & expect_roi = expect_traffic_roi.roi;
@@ -139,10 +122,10 @@ void TrafficLightSelectorNode::objectsCallback(
139122
// fit top lef corner of detected roi to inside of image
140123
detected_roi_shifted.x_offset = std::clamp(
141124
static_cast<int>(detected_roi.feature.roi.x_offset) - det_roi_shift_x, 0,
142-
static_cast<int>(image_width_ - detected_roi.feature.roi.width));
125+
static_cast<int>(image_width - detected_roi.feature.roi.width));
143126
detected_roi_shifted.y_offset = std::clamp(
144127
static_cast<int>(detected_roi.feature.roi.y_offset) - det_roi_shift_y, 0,
145-
static_cast<int>(image_height_ - detected_roi.feature.roi.height));
128+
static_cast<int>(image_height - detected_roi.feature.roi.height));
146129

147130
double iou = utils::getGenIoU(expect_roi.roi, detected_roi_shifted);
148131
if (iou > max_iou) {

perception/autoware_traffic_light_selector/src/traffic_light_selector_node.hpp

+5-11
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
#include <tf2_ros/transform_listener.h>
3636

3737
#include <memory>
38-
#include <mutex>
3938

4039
namespace autoware::traffic_light
4140
{
@@ -58,27 +57,22 @@ class TrafficLightSelectorNode : public rclcpp::Node
5857
message_filters::Subscriber<DetectedObjectsWithFeature> detected_rois_sub_;
5958
message_filters::Subscriber<TrafficLightRoiArray> rough_rois_sub_;
6059
message_filters::Subscriber<TrafficLightRoiArray> expected_rois_sub_;
60+
message_filters::Subscriber<sensor_msgs::msg::CameraInfo> camera_info_sub_;
6161
typedef message_filters::sync_policies::ApproximateTime<
62-
DetectedObjectsWithFeature, TrafficLightRoiArray, TrafficLightRoiArray>
62+
DetectedObjectsWithFeature, TrafficLightRoiArray, TrafficLightRoiArray, sensor_msgs::msg::CameraInfo>
6363
SyncPolicy;
6464
typedef message_filters::Synchronizer<SyncPolicy> Sync;
6565
Sync sync_;
6666
void objectsCallback(
6767
const DetectedObjectsWithFeature::ConstSharedPtr & detected_rois_msg,
6868
const TrafficLightRoiArray::ConstSharedPtr & rough_rois_msg,
69-
const TrafficLightRoiArray::ConstSharedPtr & expect_rois_msg);
69+
const TrafficLightRoiArray::ConstSharedPtr & expect_rois_msg,
70+
const sensor_msgs::msg::CameraInfo::ConstSharedPtr & camera_info_msg);
7071

71-
void cameraInfoCallback(const sensor_msgs::msg::CameraInfo::ConstSharedPtr input_msg);
7272
// Publisher
7373
rclcpp::Publisher<TrafficLightRoiArray>::SharedPtr pub_traffic_light_rois_;
74-
// Subscribe camera_info to get width and height of image
75-
rclcpp::Subscription<sensor_msgs::msg::CameraInfo>::SharedPtr camera_info_sub_;
76-
bool camera_info_subscribed_;
77-
uint32_t image_width_;
78-
uint32_t image_height_;
79-
double max_iou_threshold_;
8074

81-
std::mutex mutex_;
75+
double max_iou_threshold_;
8276

8377
std::unique_ptr<autoware::universe_utils::StopWatch<std::chrono::milliseconds>> stop_watch_ptr_;
8478
std::unique_ptr<autoware::universe_utils::DebugPublisher> debug_publisher_;

0 commit comments

Comments
 (0)