Skip to content

Commit 9e33303

Browse files
committed
feat: add diagnostics handler to warn when output pointcloud is empty
Signed-off-by: ktro2828 <kotaro.uetake@tier4.jp>
1 parent fb43521 commit 9e33303

File tree

2 files changed

+26
-0
lines changed
  • sensing/autoware_pointcloud_preprocessor

2 files changed

+26
-0
lines changed

sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/filter.hpp

+4
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
#include <autoware_utils/ros/managed_transform_buffer.hpp>
8080
#include <autoware_utils/ros/published_time_publisher.hpp>
8181
#include <autoware_utils/system/stop_watch.hpp>
82+
#include <autoware_utils_diagnostics/diagnostics_interface.hpp>
8283

8384
namespace autoware::pointcloud_preprocessor
8485
{
@@ -180,6 +181,9 @@ class Filter : public rclcpp::Node
180181
std::unique_ptr<autoware_utils::DebugPublisher> debug_publisher_;
181182
std::unique_ptr<autoware_utils::PublishedTimePublisher> published_time_publisher_;
182183

184+
/** \brief Diagnostics handler. **/
185+
std::unique_ptr<autoware_utils_diagnostics::DiagnosticsInterface> diagnostics_interface_ptr_;
186+
183187
/** \brief Virtual abstract filter method. To be implemented by every child.
184188
* \param input the input point cloud dataset.
185189
* \param indices a pointer to the vector of point indices to use.

sensing/autoware_pointcloud_preprocessor/src/filter.cpp

+22
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@
5555

5656
#include <pcl_ros/transforms.hpp>
5757

58+
#include <diagnostic_msgs/msg/diagnostic_status.hpp>
59+
5860
#include <pcl/io/io.h>
5961

6062
#include <memory>
@@ -107,6 +109,10 @@ autoware::pointcloud_preprocessor::Filter::Filter(
107109
set_param_res_filter_ = this->add_on_set_parameters_callback(
108110
std::bind(&Filter::filterParamCallback, this, std::placeholders::_1));
109111

112+
// Set diagnostics
113+
diagnostics_interface_ptr_ =
114+
std::make_unique<autoware_utils_diagnostics::DiagnosticsInterface>(this, filter_name);
115+
110116
published_time_publisher_ = std::make_unique<autoware_utils::PublishedTimePublisher>(this);
111117
RCLCPP_DEBUG(this->get_logger(), "[Filter Constructor] successfully created.");
112118
}
@@ -205,6 +211,14 @@ void autoware::pointcloud_preprocessor::Filter::computePublish(
205211
// Copy timestamp to keep it
206212
output->header.stamp = input->header.stamp;
207213

214+
diagnostics_interface_ptr_->clear();
215+
if (bool is_output_emtpy = output->data.empty(); is_output_emtpy) {
216+
diagnostics_interface_ptr_->add_key_value("is_pointcloud_empty", is_output_emtpy);
217+
diagnostics_interface_ptr_->update_level_and_message(
218+
diagnostic_msgs::msg::DiagnosticStatus::WARN, "Output pointcloud is empty.");
219+
diagnostics_interface_ptr_->publish(output->header.stamp);
220+
}
221+
208222
// Publish a boost shared ptr
209223
pub_output_->publish(std::move(output));
210224
published_time_publisher_->publish_if_subscribed(pub_output_, input->header.stamp);
@@ -440,6 +454,14 @@ void autoware::pointcloud_preprocessor::Filter::faster_input_indices_callback(
440454

441455
if (!convert_output_costly(output)) return;
442456

457+
diagnostics_interface_ptr_->clear();
458+
if (bool is_output_emtpy = output->data.empty(); is_output_emtpy) {
459+
diagnostics_interface_ptr_->add_key_value("is_pointcloud_empty", is_output_emtpy);
460+
diagnostics_interface_ptr_->update_level_and_message(
461+
diagnostic_msgs::msg::DiagnosticStatus::WARN, "Output pointcloud is empty.");
462+
diagnostics_interface_ptr_->publish(output->header.stamp);
463+
}
464+
443465
output->header.stamp = cloud->header.stamp;
444466
pub_output_->publish(std::move(output));
445467
published_time_publisher_->publish_if_subscribed(pub_output_, cloud->header.stamp);

0 commit comments

Comments
 (0)