Skip to content

Commit 83f698d

Browse files
authored
feat(perception): add pipeline_latency_ms publisher (#6181)
Signed-off-by: kminoda <koji.minoda@tier4.jp>
1 parent 1c54d43 commit 83f698d

File tree

9 files changed

+62
-8
lines changed

9 files changed

+62
-8
lines changed

perception/detected_object_validation/include/detected_object_validation/detected_object_filter/object_lanelet_filter.hpp

+3
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#include <rclcpp/rclcpp.hpp>
2121
#include <tier4_autoware_utils/geometry/geometry.hpp>
22+
#include <tier4_autoware_utils/ros/debug_publisher.hpp>
2223

2324
#include <autoware_auto_mapping_msgs/msg/had_map_bin.hpp>
2425
#include <autoware_auto_perception_msgs/msg/detected_objects.hpp>
@@ -27,6 +28,7 @@
2728
#include <tf2_ros/buffer.h>
2829
#include <tf2_ros/transform_listener.h>
2930

31+
#include <memory>
3032
#include <string>
3133

3234
namespace object_lanelet_filter
@@ -48,6 +50,7 @@ class ObjectLaneletFilterNode : public rclcpp::Node
4850
rclcpp::Publisher<autoware_auto_perception_msgs::msg::DetectedObjects>::SharedPtr object_pub_;
4951
rclcpp::Subscription<autoware_auto_mapping_msgs::msg::HADMapBin>::SharedPtr map_sub_;
5052
rclcpp::Subscription<autoware_auto_perception_msgs::msg::DetectedObjects>::SharedPtr object_sub_;
53+
std::unique_ptr<tier4_autoware_utils::DebugPublisher> debug_publisher_{nullptr};
5154

5255
lanelet::LaneletMapPtr lanelet_map_ptr_;
5356
lanelet::ConstLanelets road_lanelets_;

perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/obstacle_pointcloud_based_validator.hpp

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "detected_object_validation/obstacle_pointcloud_based_validator/debugger.hpp"
2121

2222
#include <rclcpp/rclcpp.hpp>
23+
#include <tier4_autoware_utils/ros/debug_publisher.hpp>
2324

2425
#include <autoware_auto_perception_msgs/msg/detected_objects.hpp>
2526
#include <sensor_msgs/msg/point_cloud2.hpp>
@@ -133,6 +134,7 @@ class ObstaclePointCloudBasedValidator : public rclcpp::Node
133134
rclcpp::Publisher<autoware_auto_perception_msgs::msg::DetectedObjects>::SharedPtr objects_pub_;
134135
message_filters::Subscriber<autoware_auto_perception_msgs::msg::DetectedObjects> objects_sub_;
135136
message_filters::Subscriber<sensor_msgs::msg::PointCloud2> obstacle_pointcloud_sub_;
137+
std::unique_ptr<tier4_autoware_utils::DebugPublisher> debug_publisher_{nullptr};
136138
tf2_ros::Buffer tf_buffer_;
137139
tf2_ros::TransformListener tf_listener_;
138140

perception/detected_object_validation/src/object_lanelet_filter.cpp

+12
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ ObjectLaneletFilterNode::ObjectLaneletFilterNode(const rclcpp::NodeOptions & nod
5252
"input/object", rclcpp::QoS{1}, std::bind(&ObjectLaneletFilterNode::objectCallback, this, _1));
5353
object_pub_ = this->create_publisher<autoware_auto_perception_msgs::msg::DetectedObjects>(
5454
"output/object", rclcpp::QoS{1});
55+
56+
debug_publisher_ =
57+
std::make_unique<tier4_autoware_utils::DebugPublisher>(this, "object_lanelet_filter");
5558
}
5659

5760
void ObjectLaneletFilterNode::mapCallback(
@@ -116,6 +119,15 @@ void ObjectLaneletFilterNode::objectCallback(
116119
++index;
117120
}
118121
object_pub_->publish(output_object_msg);
122+
123+
// Publish debug info
124+
const double pipeline_latency =
125+
std::chrono::duration<double, std::milli>(
126+
std::chrono::nanoseconds(
127+
(this->get_clock()->now() - output_object_msg.header.stamp).nanoseconds()))
128+
.count();
129+
debug_publisher_->publish<tier4_debug_msgs::msg::Float64Stamped>(
130+
"debug/pipeline_latency_ms", pipeline_latency);
119131
}
120132

121133
geometry_msgs::msg::Polygon ObjectLaneletFilterNode::setFootprint(

perception/detected_object_validation/src/obstacle_pointcloud_based_validator.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -304,6 +304,8 @@ ObstaclePointCloudBasedValidator::ObstaclePointCloudBasedValidator(
304304

305305
objects_pub_ = create_publisher<autoware_auto_perception_msgs::msg::DetectedObjects>(
306306
"~/output/objects", rclcpp::QoS{1});
307+
debug_publisher_ = std::make_unique<tier4_autoware_utils::DebugPublisher>(
308+
this, "obstacle_pointcloud_based_validator");
307309

308310
const bool enable_debugger = declare_parameter<bool>("enable_debugger", false);
309311
if (enable_debugger) debugger_ = std::make_shared<Debugger>(this);
@@ -350,6 +352,14 @@ void ObstaclePointCloudBasedValidator::onObjectsAndObstaclePointCloud(
350352
debugger_->publishNeighborPointcloud(input_obstacle_pointcloud->header);
351353
debugger_->publishPointcloudWithinPolygon(input_obstacle_pointcloud->header);
352354
}
355+
356+
// Publish processing time info
357+
const double pipeline_latency =
358+
std::chrono::duration<double, std::milli>(
359+
std::chrono::nanoseconds((this->get_clock()->now() - output.header.stamp).nanoseconds()))
360+
.count();
361+
debug_publisher_->publish<tier4_debug_msgs::msg::Float64Stamped>(
362+
"debug/pipeline_latency_ms", pipeline_latency);
353363
}
354364

355365
} // namespace obstacle_pointcloud_based_validator

perception/euclidean_cluster/src/euclidean_cluster_node.cpp

+7-4
Original file line numberDiff line numberDiff line change
@@ -64,21 +64,24 @@ void EuclideanClusterNode::onPointCloud(
6464
cluster_pub_->publish(output);
6565

6666
// build debug msg
67-
if (debug_pub_->get_subscription_count() < 1) {
68-
return;
69-
}
70-
{
67+
if (debug_pub_->get_subscription_count() >= 1) {
7168
sensor_msgs::msg::PointCloud2 debug;
7269
convertObjectMsg2SensorMsg(output, debug);
7370
debug_pub_->publish(debug);
7471
}
7572
if (debug_publisher_) {
7673
const double cyclic_time_ms = stop_watch_ptr_->toc("cyclic_time", true);
7774
const double processing_time_ms = stop_watch_ptr_->toc("processing_time", true);
75+
const double pipeline_latency_ms =
76+
std::chrono::duration<double, std::milli>(
77+
std::chrono::nanoseconds((this->get_clock()->now() - output.header.stamp).nanoseconds()))
78+
.count();
7879
debug_publisher_->publish<tier4_debug_msgs::msg::Float64Stamped>(
7980
"debug/cyclic_time_ms", cyclic_time_ms);
8081
debug_publisher_->publish<tier4_debug_msgs::msg::Float64Stamped>(
8182
"debug/processing_time_ms", processing_time_ms);
83+
debug_publisher_->publish<tier4_debug_msgs::msg::Float64Stamped>(
84+
"debug/pipeline_latency_ms", pipeline_latency_ms);
8285
}
8386
}
8487

perception/euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.cpp

+7-4
Original file line numberDiff line numberDiff line change
@@ -76,21 +76,24 @@ void VoxelGridBasedEuclideanClusterNode::onPointCloud(
7676
cluster_pub_->publish(output);
7777

7878
// build debug msg
79-
if (debug_pub_->get_subscription_count() < 1) {
80-
return;
81-
}
82-
{
79+
if (debug_pub_->get_subscription_count() >= 1) {
8380
sensor_msgs::msg::PointCloud2 debug;
8481
convertObjectMsg2SensorMsg(output, debug);
8582
debug_pub_->publish(debug);
8683
}
8784
if (debug_publisher_) {
8885
const double processing_time_ms = stop_watch_ptr_->toc("processing_time", true);
8986
const double cyclic_time_ms = stop_watch_ptr_->toc("cyclic_time", true);
87+
const double pipeline_latency_ms =
88+
std::chrono::duration<double, std::milli>(
89+
std::chrono::nanoseconds((this->get_clock()->now() - output.header.stamp).nanoseconds()))
90+
.count();
9091
debug_publisher_->publish<tier4_debug_msgs::msg::Float64Stamped>(
9192
"debug/cyclic_time_ms", cyclic_time_ms);
9293
debug_publisher_->publish<tier4_debug_msgs::msg::Float64Stamped>(
9394
"debug/processing_time_ms", processing_time_ms);
95+
debug_publisher_->publish<tier4_debug_msgs::msg::Float64Stamped>(
96+
"debug/pipeline_latency_ms", pipeline_latency_ms);
9497
}
9598
}
9699

perception/image_projection_based_fusion/src/fusion_node.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -173,11 +173,18 @@ void FusionNode<Msg, Obj, Msg2D>::subCallback(const typename Msg::ConstSharedPtr
173173
// add processing time for debug
174174
if (debug_publisher_) {
175175
const double cyclic_time_ms = stop_watch_ptr_->toc("cyclic_time", true);
176+
const double pipeline_latency_ms =
177+
std::chrono::duration<double, std::milli>(
178+
std::chrono::nanoseconds(
179+
(this->get_clock()->now() - cached_msg_.second->header.stamp).nanoseconds()))
180+
.count();
176181
debug_publisher_->publish<tier4_debug_msgs::msg::Float64Stamped>(
177182
"debug/cyclic_time_ms", cyclic_time_ms);
178183
debug_publisher_->publish<tier4_debug_msgs::msg::Float64Stamped>(
179184
"debug/processing_time_ms",
180185
processing_time_ms + stop_watch_ptr_->toc("processing_time", true));
186+
debug_publisher_->publish<tier4_debug_msgs::msg::Float64Stamped>(
187+
"debug/pipeline_latency_ms", pipeline_latency_ms);
181188
processing_time_ms = 0;
182189
}
183190
}

perception/lidar_centerpoint/src/node.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,17 @@ void LidarCenterPointNode::pointCloudCallback(
169169
if (debug_publisher_ptr_ && stop_watch_ptr_) {
170170
const double cyclic_time_ms = stop_watch_ptr_->toc("cyclic_time", true);
171171
const double processing_time_ms = stop_watch_ptr_->toc("processing_time", true);
172+
const double pipeline_latency_ms =
173+
std::chrono::duration<double, std::milli>(
174+
std::chrono::nanoseconds(
175+
(this->get_clock()->now() - output_msg.header.stamp).nanoseconds()))
176+
.count();
172177
debug_publisher_ptr_->publish<tier4_debug_msgs::msg::Float64Stamped>(
173178
"debug/cyclic_time_ms", cyclic_time_ms);
174179
debug_publisher_ptr_->publish<tier4_debug_msgs::msg::Float64Stamped>(
175180
"debug/processing_time_ms", processing_time_ms);
181+
debug_publisher_ptr_->publish<tier4_debug_msgs::msg::Float64Stamped>(
182+
"debug/pipeline_latency_ms", pipeline_latency_ms);
176183
}
177184
}
178185

perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -206,10 +206,17 @@ void PointcloudBasedOccupancyGridMapNode::onPointcloudWithObstacleAndRaw(
206206
if (debug_publisher_ptr_ && stop_watch_ptr_) {
207207
const double cyclic_time_ms = stop_watch_ptr_->toc("cyclic_time", true);
208208
const double processing_time_ms = stop_watch_ptr_->toc("processing_time", true);
209+
const double pipeline_latency_ms =
210+
std::chrono::duration<double, std::milli>(
211+
std::chrono::nanoseconds(
212+
(this->get_clock()->now() - input_raw_msg->header.stamp).nanoseconds()))
213+
.count();
209214
debug_publisher_ptr_->publish<tier4_debug_msgs::msg::Float64Stamped>(
210215
"debug/cyclic_time_ms", cyclic_time_ms);
211216
debug_publisher_ptr_->publish<tier4_debug_msgs::msg::Float64Stamped>(
212217
"debug/processing_time_ms", processing_time_ms);
218+
debug_publisher_ptr_->publish<tier4_debug_msgs::msg::Float64Stamped>(
219+
"debug/pipeline_latency_ms", pipeline_latency_ms);
213220
}
214221
}
215222

0 commit comments

Comments
 (0)