From 94231f0f4b9bbb0ddf05457f291b757f29441edb Mon Sep 17 00:00:00 2001 From: Nathan Hughes Date: Fri, 6 Mar 2026 03:06:41 +0000 Subject: [PATCH 1/3] allow rgb toggling --- .../src/backprojection_nodelet.cpp | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/semantic_inference_ros/src/backprojection_nodelet.cpp b/semantic_inference_ros/src/backprojection_nodelet.cpp index 7763e00..fcf04a1 100644 --- a/semantic_inference_ros/src/backprojection_nodelet.cpp +++ b/semantic_inference_ros/src/backprojection_nodelet.cpp @@ -37,8 +37,9 @@ struct BackprojectionNode : public rclcpp::Node { size_t output_queue_size = 1; bool show_config = true; std::string camera_frame; - std::string lidar_frame; + std::string lidar_fid; bool use_image_stamp = false; + bool use_recolor = false; } const config; explicit BackprojectionNode(const rclcpp::NodeOptions& options); @@ -68,14 +69,17 @@ struct BackprojectionNode : public rclcpp::Node { void declare_config(BackprojectionNode::Config& config) { using namespace config; name("BackprojectionNode::Config"); + field(config.projection, "projection"); field(config.recolor, "recolor"); field(config.input_queue_size, "input_queue_size"); field(config.output_queue_size, "output_queue_size"); field(config.show_config, "show_config"); field(config.camera_frame, "camera_frame"); - field(config.lidar_frame, "lidar_frame"); + field(config.lidar_fid, "lidar_fid"); field(config.use_image_stamp, "use_image_stamp"); + field(config.use_recolor, "use_recolor"); + check(config.input_queue_size, GT, 0, "input_queue_size"); check(config.output_queue_size, GT, 0, "output_queue_size"); } @@ -136,10 +140,11 @@ void BackprojectionNode::callback(const Image::ConstSharedPtr& label_msg, const PointCloud2::ConstSharedPtr& cloud_msg) { // Find transform from cloud to image frame const rclcpp::Time stamp(cloud_msg->header.stamp); - const auto image_T_cloud = getTransform( - !config.camera_frame.empty() ? config.camera_frame : info_msg->header.frame_id, - !config.lidar_frame.empty() ? config.lidar_frame : cloud_msg->header.frame_id, - stamp); + const auto image_fid = + !config.camera_frame.empty() ? config.camera_frame : info_msg->header.frame_id; + const auto lidar_fid = + !config.lidar_fid.empty() ? config.lidar_fid : cloud_msg->header.frame_id; + const auto image_T_cloud = getTransform(image_fid, lidar_fid, stamp); if (!image_T_cloud) { return; } @@ -162,6 +167,7 @@ void BackprojectionNode::callback(const Image::ConstSharedPtr& label_msg, } auto output = std::make_unique(); + const auto recolor = config.use_recolor ? recolor_.get() : nullptr; const auto valid = projectSemanticImage(config.projection, *info_msg, label_ptr->image, @@ -169,18 +175,15 @@ void BackprojectionNode::callback(const Image::ConstSharedPtr& label_msg, image_T_cloud.value(), *output, color_ptr->image, - recolor_.get()); + recolor); if (!valid) { return; } output->header = cloud_msg->header; - output->header.frame_id = config.projection.use_lidar_frame - ? cloud_msg->header.frame_id - : label_msg->header.frame_id; - // modify the output header stamp to be the image timestamp to reflect the time of the - // semantic labels + output->header.frame_id = config.projection.use_lidar_frame ? lidar_fid : image_fid; if (config.use_image_stamp) { + // force the lidar timestamp to be identical to the image timestamp output->header.stamp = label_msg->header.stamp; } From c3c236e88826f2f0dcb698194ebbe33664c17954 Mon Sep 17 00:00:00 2001 From: Nathan Hughes Date: Sun, 15 Mar 2026 20:48:37 +0000 Subject: [PATCH 2/3] fix param name --- semantic_inference_ros/src/backprojection_nodelet.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/semantic_inference_ros/src/backprojection_nodelet.cpp b/semantic_inference_ros/src/backprojection_nodelet.cpp index fcf04a1..dbd9e26 100644 --- a/semantic_inference_ros/src/backprojection_nodelet.cpp +++ b/semantic_inference_ros/src/backprojection_nodelet.cpp @@ -37,7 +37,7 @@ struct BackprojectionNode : public rclcpp::Node { size_t output_queue_size = 1; bool show_config = true; std::string camera_frame; - std::string lidar_fid; + std::string lidar_frame; bool use_image_stamp = false; bool use_recolor = false; } const config; @@ -76,7 +76,7 @@ void declare_config(BackprojectionNode::Config& config) { field(config.output_queue_size, "output_queue_size"); field(config.show_config, "show_config"); field(config.camera_frame, "camera_frame"); - field(config.lidar_fid, "lidar_fid"); + field(config.lidar_frame, "lidar_frame"); field(config.use_image_stamp, "use_image_stamp"); field(config.use_recolor, "use_recolor"); @@ -143,7 +143,7 @@ void BackprojectionNode::callback(const Image::ConstSharedPtr& label_msg, const auto image_fid = !config.camera_frame.empty() ? config.camera_frame : info_msg->header.frame_id; const auto lidar_fid = - !config.lidar_fid.empty() ? config.lidar_fid : cloud_msg->header.frame_id; + !config.lidar_frame.empty() ? config.lidar_frame : cloud_msg->header.frame_id; const auto image_T_cloud = getTransform(image_fid, lidar_fid, stamp); if (!image_T_cloud) { return; From f65b25542361c53de9a3b0fb38dd5740cd4896a0 Mon Sep 17 00:00:00 2001 From: Nathan Hughes Date: Sun, 15 Mar 2026 20:52:26 +0000 Subject: [PATCH 3/3] fix formatting slightly --- semantic_inference_ros/src/backprojection_nodelet.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/semantic_inference_ros/src/backprojection_nodelet.cpp b/semantic_inference_ros/src/backprojection_nodelet.cpp index dbd9e26..ac6a9ee 100644 --- a/semantic_inference_ros/src/backprojection_nodelet.cpp +++ b/semantic_inference_ros/src/backprojection_nodelet.cpp @@ -69,7 +69,6 @@ struct BackprojectionNode : public rclcpp::Node { void declare_config(BackprojectionNode::Config& config) { using namespace config; name("BackprojectionNode::Config"); - field(config.projection, "projection"); field(config.recolor, "recolor"); field(config.input_queue_size, "input_queue_size");