From 241dddbf2211e6d8db0da71f34f7094d3bff1de0 Mon Sep 17 00:00:00 2001
From: xtk8532704 <1041084556@qq.com>
Date: Mon, 2 Sep 2024 19:30:06 +0900
Subject: [PATCH 01/21] first commit
Signed-off-by: xtk8532704 <1041084556@qq.com>
---
.../CMakeLists.txt | 22 +++++++++++++++++++
.../msg/Metric.msg | 8 +++++++
.../msg/MetricList.msg | 5 +++++
.../autoware_planning_evaluator/package.xml | 5 +++++
4 files changed, 40 insertions(+)
create mode 100644 evaluator/autoware_planning_evaluator/msg/Metric.msg
create mode 100644 evaluator/autoware_planning_evaluator/msg/MetricList.msg
diff --git a/evaluator/autoware_planning_evaluator/CMakeLists.txt b/evaluator/autoware_planning_evaluator/CMakeLists.txt
index 371182bd2e388..792803e93226a 100644
--- a/evaluator/autoware_planning_evaluator/CMakeLists.txt
+++ b/evaluator/autoware_planning_evaluator/CMakeLists.txt
@@ -10,6 +10,28 @@ ament_auto_add_library(planning_evaluator_node SHARED
DIRECTORY src
)
+
+# ------------------------------------------------------------------------------
+find_package(builtin_interfaces REQUIRED)
+find_package(rosidl_default_generators REQUIRED)
+rosidl_generate_interfaces(
+ ${PROJECT_NAME}
+ "msg/Metric.msg"
+ "msg/MetricList.msg"
+ DEPENDENCIES builtin_interfaces
+)
+
+# For using message definitions from the same package
+if(${rosidl_cmake_VERSION} VERSION_LESS 2.5.0)
+ rosidl_target_interfaces(planning_evaluator_node
+ ${PROJECT_NAME} "rosidl_typesupport_cpp")
+else()
+ rosidl_get_typesupport_target(
+ cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp")
+ target_link_libraries(planning_evaluator_node "${cpp_typesupport_target}")
+endif()
+# ------------------------------------------------------------------------------
+
rclcpp_components_register_node(planning_evaluator_node
PLUGIN "planning_diagnostics::PlanningEvaluatorNode"
EXECUTABLE planning_evaluator
diff --git a/evaluator/autoware_planning_evaluator/msg/Metric.msg b/evaluator/autoware_planning_evaluator/msg/Metric.msg
new file mode 100644
index 0000000000000..02ea0122d2078
--- /dev/null
+++ b/evaluator/autoware_planning_evaluator/msg/Metric.msg
@@ -0,0 +1,8 @@
+# name of the metric
+string name
+
+# unit (or type) of the metric
+string unit
+
+# value of the metric
+string value
\ No newline at end of file
diff --git a/evaluator/autoware_planning_evaluator/msg/MetricList.msg b/evaluator/autoware_planning_evaluator/msg/MetricList.msg
new file mode 100644
index 0000000000000..b27c357b1fce7
--- /dev/null
+++ b/evaluator/autoware_planning_evaluator/msg/MetricList.msg
@@ -0,0 +1,5 @@
+# time stamp
+builtin_interface/Time stamp
+
+# metrics list
+Mtric[] metric_list
diff --git a/evaluator/autoware_planning_evaluator/package.xml b/evaluator/autoware_planning_evaluator/package.xml
index 38d83d46e915d..a71791a5e1a64 100644
--- a/evaluator/autoware_planning_evaluator/package.xml
+++ b/evaluator/autoware_planning_evaluator/package.xml
@@ -6,12 +6,15 @@
ROS 2 node for evaluating planners
Maxime CLEMENT
Kyoichi Sugahara
+ Temkei Kem
Apache License 2.0
Maxime CLEMENT
ament_cmake_auto
autoware_cmake
+ rosidl_default_generators
+ ament_cmake_python
autoware_evaluator_utils
autoware_motion_utils
@@ -28,6 +31,8 @@
rclcpp_components
tf2
tf2_ros
+
+ rosidl_interface_packages
ament_cmake_ros
ament_lint_auto
From 735f082512447b28bcb81fc934ffb5850b0aad5e Mon Sep 17 00:00:00 2001
From: xtk8532704 <1041084556@qq.com>
Date: Mon, 2 Sep 2024 19:57:05 +0900
Subject: [PATCH 02/21] fix building errs.
Signed-off-by: xtk8532704 <1041084556@qq.com>
---
evaluator/autoware_planning_evaluator/CMakeLists.txt | 9 +++------
evaluator/autoware_planning_evaluator/msg/MetricList.msg | 4 ++--
evaluator/autoware_planning_evaluator/package.xml | 2 +-
3 files changed, 6 insertions(+), 9 deletions(-)
diff --git a/evaluator/autoware_planning_evaluator/CMakeLists.txt b/evaluator/autoware_planning_evaluator/CMakeLists.txt
index 792803e93226a..836409f753241 100644
--- a/evaluator/autoware_planning_evaluator/CMakeLists.txt
+++ b/evaluator/autoware_planning_evaluator/CMakeLists.txt
@@ -1,19 +1,17 @@
-cmake_minimum_required(VERSION 3.14)
+cmake_minimum_required(VERSION 3.22)
project(autoware_planning_evaluator)
find_package(autoware_cmake REQUIRED)
autoware_package()
find_package(pluginlib REQUIRED)
+find_package(builtin_interfaces REQUIRED)
+find_package(rosidl_default_generators REQUIRED)
ament_auto_add_library(planning_evaluator_node SHARED
DIRECTORY src
)
-
-# ------------------------------------------------------------------------------
-find_package(builtin_interfaces REQUIRED)
-find_package(rosidl_default_generators REQUIRED)
rosidl_generate_interfaces(
${PROJECT_NAME}
"msg/Metric.msg"
@@ -30,7 +28,6 @@ else()
cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp")
target_link_libraries(planning_evaluator_node "${cpp_typesupport_target}")
endif()
-# ------------------------------------------------------------------------------
rclcpp_components_register_node(planning_evaluator_node
PLUGIN "planning_diagnostics::PlanningEvaluatorNode"
diff --git a/evaluator/autoware_planning_evaluator/msg/MetricList.msg b/evaluator/autoware_planning_evaluator/msg/MetricList.msg
index b27c357b1fce7..3964dfba47153 100644
--- a/evaluator/autoware_planning_evaluator/msg/MetricList.msg
+++ b/evaluator/autoware_planning_evaluator/msg/MetricList.msg
@@ -1,5 +1,5 @@
# time stamp
-builtin_interface/Time stamp
+builtin_interfaces/Time stamp
# metrics list
-Mtric[] metric_list
+Metric[] metric_list
diff --git a/evaluator/autoware_planning_evaluator/package.xml b/evaluator/autoware_planning_evaluator/package.xml
index a71791a5e1a64..61312ec710d06 100644
--- a/evaluator/autoware_planning_evaluator/package.xml
+++ b/evaluator/autoware_planning_evaluator/package.xml
@@ -14,7 +14,6 @@
ament_cmake_auto
autoware_cmake
rosidl_default_generators
- ament_cmake_python
autoware_evaluator_utils
autoware_motion_utils
@@ -31,6 +30,7 @@
rclcpp_components
tf2
tf2_ros
+ builtin_interfaces
rosidl_interface_packages
From 2250f599d7152991c6267f331a3ce6f8db5d6ac3 Mon Sep 17 00:00:00 2001
From: xtk8532704 <1041084556@qq.com>
Date: Tue, 3 Sep 2024 17:41:22 +0900
Subject: [PATCH 03/21] change diagnostic messages to metric messages for
publishing decision.
Signed-off-by: xtk8532704 <1041084556@qq.com>
---
.../launch/motion_velocity_planner.launch.xml | 1 +
.../package.xml | 2 +-
.../src/node.cpp | 13 ++---
.../src/node.hpp | 5 +-
.../src/planner_manager.cpp | 55 ++++++++-----------
.../src/planner_manager.hpp | 18 +++---
6 files changed, 43 insertions(+), 51 deletions(-)
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/launch/motion_velocity_planner.launch.xml b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/launch/motion_velocity_planner.launch.xml
index 3732d86ef380a..be748ec7c7ef2 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/launch/motion_velocity_planner.launch.xml
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/launch/motion_velocity_planner.launch.xml
@@ -27,6 +27,7 @@
+
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/package.xml b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/package.xml
index bf4e8a242d576..f8f3ed9d13d95 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/package.xml
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/package.xml
@@ -25,7 +25,7 @@
autoware_planning_msgs
autoware_universe_utils
autoware_velocity_smoother
- diagnostic_msgs
+ tier4_metric_msgs
eigen
geometry_msgs
libboost-dev
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp
index eaa3b8c17402e..fb52720b5c176 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp
@@ -26,7 +26,6 @@
#include
#include
-#include
#include
#include
@@ -89,7 +88,7 @@ MotionVelocityPlannerNode::MotionVelocityPlannerNode(const rclcpp::NodeOptions &
this->create_publisher("~/debug/processing_time_ms", 1);
debug_viz_pub_ =
this->create_publisher("~/debug/markers", 1);
- diagnostics_pub_ = this->create_publisher("/diagnostics", 10);
+ metrics_pub_ = this->create_publisher("/metrics", 10);
// Parameters
smooth_velocity_before_planning_ = declare_parameter("smooth_velocity_before_planning");
@@ -307,12 +306,12 @@ void MotionVelocityPlannerNode::on_trajectory(
processing_time_msg.data = processing_times["Total"];
processing_time_publisher_->publish(processing_time_msg);
- std::shared_ptr diagnostics =
- planner_manager_.get_diagnostics(get_clock()->now());
- if (!diagnostics->status.empty()) {
- diagnostics_pub_->publish(*diagnostics);
+ std::shared_ptr metrics =
+ planner_manager_.get_metrics(get_clock()->now());
+ if (!metrics->metric_array.empty()) {
+ metrics_pub_->publish(*metrics);
}
- planner_manager_.clear_diagnostics();
+ planner_manager_.clear_metrics();
}
void MotionVelocityPlannerNode::insert_stop(
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp
index 8283396d17414..47253ca658751 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp
@@ -33,6 +33,7 @@
#include
#include
#include
+#include
#include
#include
@@ -44,7 +45,7 @@
#include
#include
-using DiagnosticArray = diagnostic_msgs::msg::DiagnosticArray;
+using MetricArray = tier4_metric_msgs::msg::MetricArray;
namespace autoware::motion_velocity_planner
{
@@ -104,7 +105,7 @@ class MotionVelocityPlannerNode : public rclcpp::Node
this, "~/debug/processing_time_ms_diag"};
rclcpp::Publisher::SharedPtr processing_time_publisher_;
autoware::universe_utils::PublishedTimePublisher published_time_publisher_{this};
- rclcpp::Publisher::SharedPtr diagnostics_pub_;
+ rclcpp::Publisher::SharedPtr metrics_pub_;
// parameters
rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr set_param_callback_;
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp
index 04641e0cea6bb..b4ae24e319529 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp
@@ -71,41 +71,32 @@ void MotionVelocityPlannerManager::update_module_parameters(
for (auto & plugin : loaded_plugins_) plugin->update_parameters(parameters);
}
-std::shared_ptr MotionVelocityPlannerManager::make_diagnostic(
+
+std::shared_ptr MotionVelocityPlannerManager::make_decision_metric(
const std::string & module_name, const std::string & reason, const bool is_decided)
{
- auto status = std::make_shared();
- status->level = status->OK;
- status->name = module_name + '.' + reason;
- diagnostic_msgs::msg::KeyValue key_value;
- {
- // Decision
- key_value.key = "decision";
- if (is_decided)
- key_value.value = reason;
- else
- key_value.value = "none";
- status->values.push_back(key_value);
- }
- // Add other information to the status if necessary in the future.
- return status;
+ auto metric = std::make_shared();
+ metric->name = module_name + '/' + 'decision';
+ metric->unit = "string";
+ if (is_decided)
+ metric->value = reason;
+ else
+ metric->value = "none";
+ return metric;
}
-std::shared_ptr MotionVelocityPlannerManager::get_diagnostics(
+std::shared_ptr MotionVelocityPlannerManager::get_metrics(
const rclcpp::Time & current_time) const
{
- auto diagnostics = std::make_shared();
+ auto metrics = std::make_shared();
- for (const auto & ds_ptr : diagnostics_) {
- if (
- !ds_ptr->values.empty() && ds_ptr->values[0].key == "decision" &&
- ds_ptr->values[0].value != "none") {
- diagnostics->status.push_back(*ds_ptr);
+ for (const auto & mtr_ptr : metrics_) {
+ if (mtr_ptr.value != "none") {
+ metrics->metric_array.push_back(*mtr_ptr);
}
}
- diagnostics->header.stamp = current_time;
- diagnostics->header.frame_id = "map";
- return diagnostics;
+ metrics->stamp = current_time;
+ return metrics;
}
std::vector MotionVelocityPlannerManager::plan_velocities(
@@ -117,13 +108,13 @@ std::vector MotionVelocityPlannerManager::plan_velocitie
VelocityPlanningResult res = plugin->plan(ego_trajectory_points, planner_data);
results.push_back(res);
- const auto stop_reason_diag =
- make_diagnostic(plugin->get_module_name(), "stop", res.stop_points.size() > 0);
- diagnostics_.push_back(stop_reason_diag);
+ const auto stop_decition_metric =
+ make_decision_metric(plugin->get_module_name(), "stop", res.stop_points.size() > 0);
+ metrics_.push_back(stop_decition_metric);
- const auto slow_down_reason_diag =
- make_diagnostic(plugin->get_module_name(), "slow_down", res.slowdown_intervals.size() > 0);
- diagnostics_.push_back(slow_down_reason_diag);
+ const auto slow_down_decition_metric =
+ make_decision_metric(plugin->get_module_name(), "slow_down", res.slowdown_intervals.size() > 0);
+ metrics_.push_back(slow_down_decition_metric);
}
return results;
}
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.hpp
index ac2e421d30cb6..753843b8908f7 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.hpp
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.hpp
@@ -23,8 +23,8 @@
#include
#include
#include
-#include
-#include
+#include
+#include
#include
#include
@@ -36,8 +36,8 @@
#include
#include
-using DiagnosticStatus = diagnostic_msgs::msg::DiagnosticStatus;
-using DiagnosticArray = diagnostic_msgs::msg::DiagnosticArray;
+using Metric = tier4_metric_msgs::msg::Metric;
+using MetricArray = tier4_metric_msgs::msg::MetricArray;
namespace autoware::motion_velocity_planner
{
@@ -52,14 +52,14 @@ class MotionVelocityPlannerManager
const std::vector & ego_trajectory_points,
const std::shared_ptr planner_data);
- // Diagnostic
- std::shared_ptr make_diagnostic(
+ // Metrics
+ std::shared_ptr make_metric(
const std::string & module_name, const std::string & reason, const bool is_decided = true);
- std::shared_ptr get_diagnostics(const rclcpp::Time & current_time) const;
- void clear_diagnostics() { diagnostics_.clear(); }
+ std::shared_ptr get_metrics(const rclcpp::Time & current_time) const;
+ void clear_metrics() { metrics_.clear(); }
private:
- std::vector> diagnostics_;
+ std::vector> metrics_;
pluginlib::ClassLoader plugin_loader_;
std::vector> loaded_plugins_;
};
From b957f8bf3aac4a2ad2a36da46a85d5c107323b9b Mon Sep 17 00:00:00 2001
From: xtk8532704 <1041084556@qq.com>
Date: Wed, 4 Sep 2024 00:26:08 +0900
Subject: [PATCH 04/21] fix bug about motion_velocity_planner
Signed-off-by: xtk8532704 <1041084556@qq.com>
---
.../autoware_motion_velocity_planner_node/package.xml | 2 +-
.../autoware_motion_velocity_planner_node/src/node.hpp | 3 ---
.../src/planner_manager.cpp | 6 +++---
.../src/planner_manager.hpp | 6 +++---
4 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/package.xml b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/package.xml
index f8f3ed9d13d95..ae7e80e927988 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/package.xml
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/package.xml
@@ -25,7 +25,6 @@
autoware_planning_msgs
autoware_universe_utils
autoware_velocity_smoother
- tier4_metric_msgs
eigen
geometry_msgs
libboost-dev
@@ -40,6 +39,7 @@
tf2_ros
tier4_debug_msgs
tier4_planning_msgs
+ tier4_metric_msgs
visualization_msgs
rosidl_default_runtime
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp
index 47253ca658751..757be518e018a 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp
@@ -33,7 +33,6 @@
#include
#include
#include
-#include
#include
#include
@@ -45,8 +44,6 @@
#include
#include
-using MetricArray = tier4_metric_msgs::msg::MetricArray;
-
namespace autoware::motion_velocity_planner
{
using autoware_map_msgs::msg::LaneletMapBin;
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp
index b4ae24e319529..af816f6f77679 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp
@@ -76,7 +76,7 @@ std::shared_ptr MotionVelocityPlannerManager::make_decision_metric(
const std::string & module_name, const std::string & reason, const bool is_decided)
{
auto metric = std::make_shared();
- metric->name = module_name + '/' + 'decision';
+ metric->name = module_name + "/decision";
metric->unit = "string";
if (is_decided)
metric->value = reason;
@@ -89,13 +89,13 @@ std::shared_ptr MotionVelocityPlannerManager::get_metrics(
const rclcpp::Time & current_time) const
{
auto metrics = std::make_shared();
+ metrics->stamp = current_time;
for (const auto & mtr_ptr : metrics_) {
- if (mtr_ptr.value != "none") {
+ if (mtr_ptr->value != "none") {
metrics->metric_array.push_back(*mtr_ptr);
}
}
- metrics->stamp = current_time;
return metrics;
}
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.hpp
index 753843b8908f7..47180f9bc5a46 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.hpp
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.hpp
@@ -23,8 +23,8 @@
#include
#include
#include
-#include
-#include
+#include
+#include
#include
#include
@@ -53,7 +53,7 @@ class MotionVelocityPlannerManager
const std::shared_ptr planner_data);
// Metrics
- std::shared_ptr make_metric(
+ std::shared_ptr make_decision_metric(
const std::string & module_name, const std::string & reason, const bool is_decided = true);
std::shared_ptr get_metrics(const rclcpp::Time & current_time) const;
void clear_metrics() { metrics_.clear(); }
From 9d9a5bc34ebeb0e14be5400148bc4e39012ed5e9 Mon Sep 17 00:00:00 2001
From: xtk8532704 <1041084556@qq.com>
Date: Wed, 4 Sep 2024 01:20:47 +0900
Subject: [PATCH 05/21] change the diagnostic msg to metric msg in
autoware_obstacle_cruise_planner.
Signed-off-by: xtk8532704 <1041084556@qq.com>
---
.../common_structs.hpp | 12 +-
.../planner_interface.hpp | 19 +--
.../package.xml | 1 +
.../src/node.cpp | 2 +-
.../optimization_based_planner.cpp | 4 +-
.../pid_based_planner/pid_based_planner.cpp | 2 +-
.../src/planner_interface.cpp | 120 +++++++++---------
7 files changed, 84 insertions(+), 76 deletions(-)
diff --git a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/common_structs.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/common_structs.hpp
index 0f35960c350a8..7bd4d37ba5797 100644
--- a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/common_structs.hpp
+++ b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/common_structs.hpp
@@ -25,12 +25,16 @@
#include
-#include
+#include
+#include
#include
#include
#include
+using Metric = tier4_metric_msgs::msg::Metric;
+using MetricArray = tier4_metric_msgs::msg::MetricArray;
+
struct PlannerData
{
rclcpp::Time current_time;
@@ -293,9 +297,9 @@ struct DebugData
MarkerArray cruise_wall_marker;
MarkerArray slow_down_wall_marker;
std::vector detection_polygons;
- std::optional stop_reason_diag{std::nullopt};
- std::optional slow_down_reason_diag{std::nullopt};
- std::optional cruise_reason_diag{std::nullopt};
+ std::optional> stop_metrics{std::nullopt};
+ std::optional> slow_down_metrics{std::nullopt};
+ std::optional> cruise_metrics{std::nullopt};
};
struct EgoNearestParam
diff --git a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp
index 099d80306bb4e..7b17f7b003976 100644
--- a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp
+++ b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp
@@ -23,7 +23,8 @@
#include "autoware/universe_utils/ros/update_param.hpp"
#include "autoware/universe_utils/system/stop_watch.hpp"
-#include
+#include
+#include
#include
#include
@@ -35,8 +36,9 @@
#include
#include
-using DiagnosticStatus = diagnostic_msgs::msg::DiagnosticStatus;
-using DiagnosticArray = diagnostic_msgs::msg::DiagnosticArray;
+using Metric = tier4_metric_msgs::msg::Metric;
+using MetricArray = tier4_metric_msgs::msg::MetricArray;
+
class PlannerInterface
{
public:
@@ -56,7 +58,7 @@ class PlannerInterface
node.create_publisher("/planning/velocity_factors/obstacle_cruise", 1);
stop_speed_exceeded_pub_ =
node.create_publisher("~/output/stop_speed_exceeded", 1);
- diagnostics_pub_ = node.create_publisher("/diagnostics", 10);
+ metrics_pub_ = node.create_publisher("/metrics", 10);
moving_object_speed_threshold =
node.declare_parameter("slow_down.moving_object_speed_threshold");
@@ -95,13 +97,12 @@ class PlannerInterface
const std::vector & slow_down_obstacles,
std::optional & vel_limit);
- DiagnosticStatus makeEmptyDiagnostic(const std::string & reason);
- DiagnosticStatus makeDiagnostic(
+ std::vector makeDicisionMetrics(
const std::string & reason, const std::optional & planner_data = std::nullopt,
const std::optional & stop_pose = std::nullopt,
const std::optional & stop_obstacle = std::nullopt);
- void publishDiagnostics(const rclcpp::Time & current_time);
- void clearDiagnostics();
+ void publishMetrics(const rclcpp::Time & current_time);
+ void clearMetrics();
void onParam(const std::vector & parameters)
{
@@ -148,7 +149,7 @@ class PlannerInterface
rclcpp::Publisher::SharedPtr stop_reasons_pub_;
rclcpp::Publisher::SharedPtr velocity_factors_pub_;
rclcpp::Publisher::SharedPtr stop_speed_exceeded_pub_;
- rclcpp::Publisher::SharedPtr diagnostics_pub_;
+ rclcpp::Publisher::SharedPtr metrics_pub_;
// Vehicle Parameters
autoware::vehicle_info_utils::VehicleInfo vehicle_info_;
diff --git a/planning/autoware_obstacle_cruise_planner/package.xml b/planning/autoware_obstacle_cruise_planner/package.xml
index d73f86d27a781..58420072b2ac8 100644
--- a/planning/autoware_obstacle_cruise_planner/package.xml
+++ b/planning/autoware_obstacle_cruise_planner/package.xml
@@ -39,6 +39,7 @@
tf2_ros
tier4_debug_msgs
tier4_planning_msgs
+ tier4_metric_msgs
visualization_msgs
ament_cmake_ros
diff --git a/planning/autoware_obstacle_cruise_planner/src/node.cpp b/planning/autoware_obstacle_cruise_planner/src/node.cpp
index 37b82ecb66e74..a6a029530b1a5 100644
--- a/planning/autoware_obstacle_cruise_planner/src/node.cpp
+++ b/planning/autoware_obstacle_cruise_planner/src/node.cpp
@@ -719,7 +719,7 @@ void ObstacleCruisePlannerNode::onTrajectory(const Trajectory::ConstSharedPtr ms
// 8. Publish debug data
published_time_publisher_->publish_if_subscribed(trajectory_pub_, output_traj.header.stamp);
- planner_ptr_->publishDiagnostics(now());
+ planner_ptr_->publishMetrics(now());
publishDebugMarker();
publishDebugInfo();
diff --git a/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp b/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp
index 3a24cfa7dcfe0..9711fbc4c4fee 100644
--- a/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp
+++ b/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp
@@ -199,7 +199,7 @@ std::vector OptimizationBasedPlanner::generateCruiseTrajectory(
output.at(i).longitudinal_velocity_mps = 0.0;
}
prev_output_ = output;
- debug_data_ptr_->cruise_reason_diag = makeDiagnostic("cruise", planner_data);
+ debug_data_ptr_->cruise_metrics = makeDicisionMetrics("cruise", planner_data);
return output;
} else if (opt_position.size() == 1) {
RCLCPP_DEBUG(
@@ -256,7 +256,7 @@ std::vector OptimizationBasedPlanner::generateCruiseTrajectory(
// Insert Closest Stop Point
autoware::motion_utils::insertStopPoint(0, closest_stop_dist, output);
- debug_data_ptr_->cruise_reason_diag = makeDiagnostic("cruise", planner_data);
+ debug_data_ptr_->cruise_metrics = makeDicisionMetrics("cruise", planner_data);
prev_output_ = output;
return output;
}
diff --git a/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp b/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp
index fefe7fd06007e..cca7a5137c8c5 100644
--- a/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp
+++ b/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp
@@ -325,7 +325,7 @@ std::vector PIDBasedPlanner::planCruise(
// cruise obstacle
debug_data_ptr_->obstacles_to_cruise.push_back(cruise_obstacle_info->obstacle);
- debug_data_ptr_->cruise_reason_diag = makeDiagnostic("cruise", planner_data);
+ debug_data_ptr_->cruise_metrics = makeDicisionMetrics("cruise", planner_data);
}
// do cruise planning
diff --git a/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp b/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp
index ba93efc1f10c4..f1cd5efb12e5e 100644
--- a/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp
+++ b/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp
@@ -405,8 +405,8 @@ std::vector PlannerInterface::generateStopTrajectory(
stop_reasons_pub_->publish(stop_reasons_msg);
velocity_factors_pub_->publish(makeVelocityFactorArray(planner_data.current_time, stop_pose));
// Store stop reason debug data
- debug_data_ptr_->stop_reason_diag =
- makeDiagnostic("stop", planner_data, stop_pose, *determined_stop_obstacle);
+ debug_data_ptr_->stop_metrics =
+ makeDicisionMetrics("stop", planner_data, stop_pose, *determined_stop_obstacle);
// Publish if ego vehicle will over run against the stop point with a limit acceleration
const bool will_over_run = determined_zero_vel_dist.value() >
@@ -677,8 +677,8 @@ std::vector PlannerInterface::generateSlowDownTrajectory(
// Add debug data
debug_data_ptr_->obstacles_to_slow_down.push_back(obstacle);
- if (!debug_data_ptr_->slow_down_reason_diag.has_value()) {
- debug_data_ptr_->slow_down_reason_diag = makeDiagnostic("slow_down", planner_data);
+ if (!debug_data_ptr_->stop_metrics.has_value()) {
+ debug_data_ptr_->slow_down_metrics = makeDicisionMetrics("slow_down", planner_data);
}
// update prev_slow_down_output_
@@ -837,89 +837,91 @@ PlannerInterface::calculateDistanceToSlowDownWithConstraints(
filtered_dist_to_slow_down_start, filtered_dist_to_slow_down_end, feasible_slow_down_vel);
}
-DiagnosticStatus PlannerInterface::makeEmptyDiagnostic(const std::string & reason)
-{
- // Create status
- DiagnosticStatus status;
- status.level = status.OK;
- status.name = "obstacle_cruise_planner_" + reason;
- diagnostic_msgs::msg::KeyValue key_value;
- {
- // Decision
- key_value.key = "decision";
- key_value.value = "none";
- status.values.push_back(key_value);
- }
-
- return status;
-}
-
-DiagnosticStatus PlannerInterface::makeDiagnostic(
+std::vector PlannerInterface::makeDicisionMetrics(
const std::string & reason, const std::optional & planner_data,
const std::optional & stop_pose,
const std::optional & stop_obstacle)
{
+
+ auto metrics = std::vector();
+
// Create status
- DiagnosticStatus status;
- status.level = status.OK;
- status.name = "obstacle_cruise_planner_" + reason;
- diagnostic_msgs::msg::KeyValue key_value;
+ std::string metrics_name = "obstacle_cruise_planner/" + reason;
{
// Decision
- key_value.key = "decision";
- key_value.value = reason;
- status.values.push_back(key_value);
+ Metric decision_metric;
+ decision_metric.name = metrics_name + "/decision";
+ decision_metric.unit = "string";
+ decision_metric.value = reason;
+ metrics.push_back(decision_metric);
}
if (stop_pose.has_value() && planner_data.has_value()) { // Stop info
- key_value.key = "stop_position";
+ Metric stop_posision_metric;
+ stop_posision_metric.name = metrics_name + "/stop_position";
+ stop_posision_metric.unit = "string";
const auto & p = stop_pose.value().position;
- key_value.value =
+ stop_posision_metric.value =
"{" + std::to_string(p.x) + ", " + std::to_string(p.y) + ", " + std::to_string(p.z) + "}";
- status.values.push_back(key_value);
- key_value.key = "stop_orientation";
+ metrics.push_back(stop_posision_metric);
+
+ Metric stop_orientation_metric;
+ stop_orientation_metric.name = metrics_name + "/stop_orientation";
+ stop_orientation_metric.unit = "string";
const auto & o = stop_pose.value().orientation;
- key_value.value = "{" + std::to_string(o.w) + ", " + std::to_string(o.x) + ", " +
- std::to_string(o.y) + ", " + std::to_string(o.z) + "}";
- status.values.push_back(key_value);
+ stop_orientation_metric.value = "{" + std::to_string(o.w) + ", " + std::to_string(o.x) + ", " +
+ std::to_string(o.y) + ", " + std::to_string(o.z) + "}";
+ metrics.push_back(stop_orientation_metric);
+
const auto dist_to_stop_pose = autoware::motion_utils::calcSignedArcLength(
planner_data.value().traj_points, planner_data.value().ego_pose.position,
stop_pose.value().position);
- key_value.key = "distance_to_stop_pose";
- key_value.value = std::to_string(dist_to_stop_pose);
- status.values.push_back(key_value);
+
+ Metric dist_to_stop_pose_metric;
+ dist_to_stop_pose_metric.name = metrics_name + "/distance_to_stop_pose";
+ dist_to_stop_pose_metric.unit = "double";
+ dist_to_stop_pose_metric.value = std::to_string(dist_to_stop_pose);
+ metrics.push_back(dist_to_stop_pose_metric);
}
if (stop_obstacle.has_value()) {
// Obstacle info
+ Metric collision_point_metric;
const auto & p = stop_obstacle.value().collision_point;
- key_value.key = "collision_point";
- key_value.value =
+ collision_point_metric.name = metrics_name + "/collision_point";
+ collision_point_metric.unit = "string";
+ collision_point_metric.value =
"{" + std::to_string(p.x) + ", " + std::to_string(p.y) + ", " + std::to_string(p.z) + "}";
- status.values.push_back(key_value);
+ metrics.push_back(collision_point_metric);
}
-
- return status;
+ return metrics;
}
-void PlannerInterface::publishDiagnostics(const rclcpp::Time & current_time)
+void PlannerInterface::publishMetrics(const rclcpp::Time & current_time)
{
// create array
- DiagnosticArray diagnostics;
- diagnostics.header.stamp = current_time;
- diagnostics.header.frame_id = "map";
- const auto & d = debug_data_ptr_;
- diagnostics.status = {
- (d->stop_reason_diag) ? d->stop_reason_diag.value() : makeEmptyDiagnostic("stop"),
- (d->slow_down_reason_diag) ? *(d->slow_down_reason_diag) : makeEmptyDiagnostic("slow_down"),
- (d->cruise_reason_diag) ? d->cruise_reason_diag.value() : makeEmptyDiagnostic("cruise")};
- diagnostics_pub_->publish(diagnostics);
- clearDiagnostics();
+ MetricArray metrics_msg;
+ metrics_msg.stamp = current_time;
+
+ auto addMetrics = [&metrics_msg](std::optional>& opt_metrics) {
+ if (opt_metrics) {
+ metrics_msg.metric_array.insert(
+ metrics_msg.metric_array.end(),
+ opt_metrics->begin(),
+ opt_metrics->end()
+ );
+ }
+ };
+ addMetrics(debug_data_ptr_->stop_metrics);
+ addMetrics(debug_data_ptr_->slow_down_metrics);
+ addMetrics(debug_data_ptr_->cruise_metrics);
+ metrics_pub_->publish(metrics_msg);
+ clearMetrics();
}
-void PlannerInterface::clearDiagnostics()
+void PlannerInterface::clearMetrics()
{
- debug_data_ptr_->stop_reason_diag = std::nullopt;
- debug_data_ptr_->slow_down_reason_diag = std::nullopt;
- debug_data_ptr_->cruise_reason_diag = std::nullopt;
+ debug_data_ptr_->stop_metrics = std::nullopt;
+ debug_data_ptr_->slow_down_metrics = std::nullopt;
+ debug_data_ptr_->cruise_metrics = std::nullopt;
}
From 5b1788455663d8f20698a8597785f7f6b66fb18f Mon Sep 17 00:00:00 2001
From: xtk8532704 <1041084556@qq.com>
Date: Wed, 4 Sep 2024 01:21:11 +0900
Subject: [PATCH 06/21] tmp save for planning_evaluator
Signed-off-by: xtk8532704 <1041084556@qq.com>
---
.../CMakeLists.txt | 19 ---------------
.../planning_evaluator_node.hpp | 24 +++++++++----------
.../msg/Metric.msg | 8 -------
.../msg/MetricList.msg | 5 ----
.../autoware_planning_evaluator/package.xml | 5 +---
.../src/planning_evaluator_node.cpp | 8 +++----
6 files changed, 17 insertions(+), 52 deletions(-)
delete mode 100644 evaluator/autoware_planning_evaluator/msg/Metric.msg
delete mode 100644 evaluator/autoware_planning_evaluator/msg/MetricList.msg
diff --git a/evaluator/autoware_planning_evaluator/CMakeLists.txt b/evaluator/autoware_planning_evaluator/CMakeLists.txt
index 836409f753241..23959cefdcca4 100644
--- a/evaluator/autoware_planning_evaluator/CMakeLists.txt
+++ b/evaluator/autoware_planning_evaluator/CMakeLists.txt
@@ -5,30 +5,11 @@ find_package(autoware_cmake REQUIRED)
autoware_package()
find_package(pluginlib REQUIRED)
-find_package(builtin_interfaces REQUIRED)
-find_package(rosidl_default_generators REQUIRED)
ament_auto_add_library(planning_evaluator_node SHARED
DIRECTORY src
)
-rosidl_generate_interfaces(
- ${PROJECT_NAME}
- "msg/Metric.msg"
- "msg/MetricList.msg"
- DEPENDENCIES builtin_interfaces
-)
-
-# For using message definitions from the same package
-if(${rosidl_cmake_VERSION} VERSION_LESS 2.5.0)
- rosidl_target_interfaces(planning_evaluator_node
- ${PROJECT_NAME} "rosidl_typesupport_cpp")
-else()
- rosidl_get_typesupport_target(
- cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp")
- target_link_libraries(planning_evaluator_node "${cpp_typesupport_target}")
-endif()
-
rclcpp_components_register_node(planning_evaluator_node
PLUGIN "planning_diagnostics::PlanningEvaluatorNode"
EXECUTABLE planning_evaluator
diff --git a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp
index 4a84bdd2ffcd5..c80c3c78e714a 100644
--- a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp
+++ b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp
@@ -17,6 +17,8 @@
#include "autoware/planning_evaluator/metrics_calculator.hpp"
#include "autoware/planning_evaluator/stat.hpp"
+#include "tier4_metric_msgs/msg/Metric.hpp"
+#include "tier4_metric_msgs/msg/MetricList.hpp"
#include "rclcpp/rclcpp.hpp"
#include "tf2_ros/buffer.h"
#include "tf2_ros/transform_listener.h"
@@ -28,11 +30,9 @@
#include "autoware_planning_msgs/msg/pose_with_uuid_stamped.hpp"
#include "autoware_planning_msgs/msg/trajectory.hpp"
#include "autoware_planning_msgs/msg/trajectory_point.hpp"
-#include "diagnostic_msgs/msg/diagnostic_array.hpp"
#include "geometry_msgs/msg/accel_with_covariance_stamped.hpp"
#include "nav_msgs/msg/odometry.hpp"
#include
-#include
#include
#include
@@ -46,8 +46,8 @@ using autoware_perception_msgs::msg::PredictedObjects;
using autoware_planning_msgs::msg::PoseWithUuidStamped;
using autoware_planning_msgs::msg::Trajectory;
using autoware_planning_msgs::msg::TrajectoryPoint;
-using diagnostic_msgs::msg::DiagnosticArray;
-using diagnostic_msgs::msg::DiagnosticStatus;
+using autoware::planning_evaluator::msg::Metric;
+using autoware::planning_evaluator::msg::MetricList;
using nav_msgs::msg::Odometry;
using LaneletMapBin = autoware_map_msgs::msg::LaneletMapBin;
using autoware_planning_msgs::msg::LaneletRoute;
@@ -97,28 +97,28 @@ class PlanningEvaluatorNode : public rclcpp::Node
/**
* @brief obtain diagnostics information
*/
- void onDiagnostics(const DiagnosticArray::ConstSharedPtr diag_msg);
+ void onDiagnostics(const MetricList::ConstSharedPtr diag_msg);
/**
* @brief publish the given metric statistic
*/
- DiagnosticStatus generateDiagnosticStatus(
+ Metric generateDiagnosticStatus(
const Metric & metric, const Stat & metric_stat) const;
/**
* @brief publish current ego lane info
*/
- DiagnosticStatus generateDiagnosticEvaluationStatus(const DiagnosticStatus & diag);
+ Metric generateDiagnosticEvaluationStatus(const Metric & diag);
/**
* @brief publish current ego lane info
*/
- DiagnosticStatus generateLaneletDiagnosticStatus(const Odometry::ConstSharedPtr ego_state_ptr);
+ Metric generateLaneletDiagnosticStatus(const Odometry::ConstSharedPtr ego_state_ptr);
/**
* @brief publish current ego kinematic state
*/
- DiagnosticStatus generateKinematicStateDiagnosticStatus(
+ Metric generateKinematicStateDiagnosticStatus(
const AccelWithCovarianceStamped & accel_stamped, const Odometry::ConstSharedPtr ego_state_ptr);
private:
@@ -163,12 +163,12 @@ class PlanningEvaluatorNode : public rclcpp::Node
autoware::universe_utils::InterProcessPollingSubscriber accel_sub_{
this, "~/input/acceleration"};
- rclcpp::Publisher::SharedPtr metrics_pub_;
+ rclcpp::Publisher::SharedPtr metrics_pub_;
std::shared_ptr transform_listener_{nullptr};
std::unique_ptr tf_buffer_;
autoware::route_handler::RouteHandler route_handler_;
- DiagnosticArray metrics_msg_;
+ MetricList metrics_msg_;
// Parameters
std::string output_file_str_;
std::string ego_frame_str_;
@@ -182,7 +182,7 @@ class PlanningEvaluatorNode : public rclcpp::Node
rclcpp::TimerBase::SharedPtr timer_;
// queue for diagnostics and time stamp
- std::deque> diag_queue_;
+ std::deque> diag_queue_;
const std::vector target_functions_ = {
"obstacle_cruise_planner_stop",
"obstacle_cruise_planner_slow_down",
diff --git a/evaluator/autoware_planning_evaluator/msg/Metric.msg b/evaluator/autoware_planning_evaluator/msg/Metric.msg
deleted file mode 100644
index 02ea0122d2078..0000000000000
--- a/evaluator/autoware_planning_evaluator/msg/Metric.msg
+++ /dev/null
@@ -1,8 +0,0 @@
-# name of the metric
-string name
-
-# unit (or type) of the metric
-string unit
-
-# value of the metric
-string value
\ No newline at end of file
diff --git a/evaluator/autoware_planning_evaluator/msg/MetricList.msg b/evaluator/autoware_planning_evaluator/msg/MetricList.msg
deleted file mode 100644
index 3964dfba47153..0000000000000
--- a/evaluator/autoware_planning_evaluator/msg/MetricList.msg
+++ /dev/null
@@ -1,5 +0,0 @@
-# time stamp
-builtin_interfaces/Time stamp
-
-# metrics list
-Metric[] metric_list
diff --git a/evaluator/autoware_planning_evaluator/package.xml b/evaluator/autoware_planning_evaluator/package.xml
index 61312ec710d06..c2f9f43b91130 100644
--- a/evaluator/autoware_planning_evaluator/package.xml
+++ b/evaluator/autoware_planning_evaluator/package.xml
@@ -13,7 +13,6 @@
ament_cmake_auto
autoware_cmake
- rosidl_default_generators
autoware_evaluator_utils
autoware_motion_utils
@@ -21,6 +20,7 @@
autoware_planning_msgs
autoware_route_handler
autoware_universe_utils
+ tier4_metric_msgs
diagnostic_msgs
eigen
geometry_msgs
@@ -30,9 +30,6 @@
rclcpp_components
tf2
tf2_ros
- builtin_interfaces
-
- rosidl_interface_packages
ament_cmake_ros
ament_lint_auto
diff --git a/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp b/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp
index d378d55dd2a46..1e90d7af111f2 100644
--- a/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp
+++ b/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp
@@ -62,7 +62,7 @@ PlanningEvaluatorNode::PlanningEvaluatorNode(const rclcpp::NodeOptions & node_op
"~/input/diagnostics", 1, std::bind(&PlanningEvaluatorNode::onDiagnostics, this, _1));
// List of metrics to calculate and publish
- metrics_pub_ = create_publisher("~/metrics", 1);
+ metrics_pub_ = create_publisher("~/metrics", 1);
for (const std::string & selected_metric :
declare_parameter>("selected_metrics")) {
Metric metric = str_to_metric.at(selected_metric);
@@ -111,8 +111,8 @@ void PlanningEvaluatorNode::onDiagnostics(const DiagnosticArray::ConstSharedPtr
}
}
-DiagnosticStatus PlanningEvaluatorNode::generateDiagnosticEvaluationStatus(
- const DiagnosticStatus & diag)
+Metric PlanningEvaluatorNode::generateDiagnosticEvaluationStatus(
+ const Metric & diag)
{
DiagnosticStatus status;
status.name = diag.name;
@@ -232,7 +232,7 @@ DiagnosticStatus PlanningEvaluatorNode::generateKinematicStateDiagnosticStatus(
return status;
}
-DiagnosticStatus PlanningEvaluatorNode::generateDiagnosticStatus(
+Metric PlanningEvaluatorNode::generateDiagnosticStatus(
const Metric & metric, const Stat & metric_stat) const
{
DiagnosticStatus status;
From ed9fe723655a85fd2f67fd2509d15fab305e7f62 Mon Sep 17 00:00:00 2001
From: xtk8532704 <1041084556@qq.com>
Date: Wed, 4 Sep 2024 01:40:34 +0900
Subject: [PATCH 07/21] change the topic to which metrics published to.
Signed-off-by: xtk8532704 <1041084556@qq.com>
---
.../autoware/obstacle_cruise_planner/planner_interface.hpp | 2 +-
.../launch/obstacle_cruise_planner.launch.xml | 1 +
.../launch/motion_velocity_planner.launch.xml | 2 +-
.../autoware_motion_velocity_planner_node/src/node.cpp | 2 +-
4 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp
index 7b17f7b003976..f5c719a8f4867 100644
--- a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp
+++ b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp
@@ -58,7 +58,7 @@ class PlannerInterface
node.create_publisher("/planning/velocity_factors/obstacle_cruise", 1);
stop_speed_exceeded_pub_ =
node.create_publisher("~/output/stop_speed_exceeded", 1);
- metrics_pub_ = node.create_publisher("/metrics", 10);
+ metrics_pub_ = node.create_publisher("~/metrics", 10);
moving_object_speed_threshold =
node.declare_parameter("slow_down.moving_object_speed_threshold");
diff --git a/planning/autoware_obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml b/planning/autoware_obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml
index aaf6db3e36613..018d120879ff2 100644
--- a/planning/autoware_obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml
+++ b/planning/autoware_obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml
@@ -32,5 +32,6 @@
+
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/launch/motion_velocity_planner.launch.xml b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/launch/motion_velocity_planner.launch.xml
index be748ec7c7ef2..7fb3b3a1bd5f8 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/launch/motion_velocity_planner.launch.xml
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/launch/motion_velocity_planner.launch.xml
@@ -27,7 +27,7 @@
-
+
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp
index fb52720b5c176..13d767ff9ea6b 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp
@@ -88,7 +88,7 @@ MotionVelocityPlannerNode::MotionVelocityPlannerNode(const rclcpp::NodeOptions &
this->create_publisher("~/debug/processing_time_ms", 1);
debug_viz_pub_ =
this->create_publisher("~/debug/markers", 1);
- metrics_pub_ = this->create_publisher("/metrics", 10);
+ metrics_pub_ = this->create_publisher("~/metrics", 10);
// Parameters
smooth_velocity_before_planning_ = declare_parameter("smooth_velocity_before_planning");
From 0ae67d3699aec7f9f0de64c48b14ed203d0939cf Mon Sep 17 00:00:00 2001
From: xtk8532704 <1041084556@qq.com>
Date: Wed, 4 Sep 2024 01:51:51 +0900
Subject: [PATCH 08/21] fix typo.
Signed-off-by: xtk8532704 <1041084556@qq.com>
---
.../src/planner_manager.cpp | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp
index af816f6f77679..30a1e7bd34bb3 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp
@@ -108,13 +108,13 @@ std::vector MotionVelocityPlannerManager::plan_velocitie
VelocityPlanningResult res = plugin->plan(ego_trajectory_points, planner_data);
results.push_back(res);
- const auto stop_decition_metric =
+ const auto stop_decision_metric =
make_decision_metric(plugin->get_module_name(), "stop", res.stop_points.size() > 0);
- metrics_.push_back(stop_decition_metric);
+ metrics_.push_back(stop_decision_metric);
- const auto slow_down_decition_metric =
+ const auto slow_down_decision_metric =
make_decision_metric(plugin->get_module_name(), "slow_down", res.slowdown_intervals.size() > 0);
- metrics_.push_back(slow_down_decition_metric);
+ metrics_.push_back(slow_down_decision_metric);
}
return results;
}
From 254f1a401f856204a01678b47e42c246099801ba Mon Sep 17 00:00:00 2001
From: xtk8532704 <1041084556@qq.com>
Date: Wed, 4 Sep 2024 03:05:14 +0900
Subject: [PATCH 09/21] remove unnesessary publishing of metrics.
Signed-off-by: xtk8532704 <1041084556@qq.com>
---
.../planner_interface.hpp | 5 ++-
.../optimization_based_planner.cpp | 4 +-
.../pid_based_planner/pid_based_planner.cpp | 2 +-
.../src/planner_interface.cpp | 41 +++++++++----------
.../src/planner_manager.cpp | 28 ++++++-------
.../src/planner_manager.hpp | 4 +-
6 files changed, 40 insertions(+), 44 deletions(-)
diff --git a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp
index f5c719a8f4867..a2265ea6affa0 100644
--- a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp
+++ b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp
@@ -97,8 +97,9 @@ class PlannerInterface
const std::vector & slow_down_obstacles,
std::optional & vel_limit);
- std::vector makeDicisionMetrics(
- const std::string & reason, const std::optional & planner_data = std::nullopt,
+ std::vector makeMetrics(
+ const std::string & module_name, const std::string & reason,
+ const std::optional & planner_data = std::nullopt,
const std::optional & stop_pose = std::nullopt,
const std::optional & stop_obstacle = std::nullopt);
void publishMetrics(const rclcpp::Time & current_time);
diff --git a/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp b/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp
index 9711fbc4c4fee..5c1d60d200b1a 100644
--- a/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp
+++ b/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp
@@ -199,7 +199,7 @@ std::vector OptimizationBasedPlanner::generateCruiseTrajectory(
output.at(i).longitudinal_velocity_mps = 0.0;
}
prev_output_ = output;
- debug_data_ptr_->cruise_metrics = makeDicisionMetrics("cruise", planner_data);
+ debug_data_ptr_->cruise_metrics = makeMetrics("OptimizationBasedPlanner","cruise", planner_data);
return output;
} else if (opt_position.size() == 1) {
RCLCPP_DEBUG(
@@ -256,7 +256,7 @@ std::vector OptimizationBasedPlanner::generateCruiseTrajectory(
// Insert Closest Stop Point
autoware::motion_utils::insertStopPoint(0, closest_stop_dist, output);
- debug_data_ptr_->cruise_metrics = makeDicisionMetrics("cruise", planner_data);
+ debug_data_ptr_->cruise_metrics = makeMetrics("OptimizationBasedPlanner","cruise", planner_data);
prev_output_ = output;
return output;
}
diff --git a/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp b/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp
index cca7a5137c8c5..761e2b05b548b 100644
--- a/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp
+++ b/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp
@@ -325,7 +325,7 @@ std::vector PIDBasedPlanner::planCruise(
// cruise obstacle
debug_data_ptr_->obstacles_to_cruise.push_back(cruise_obstacle_info->obstacle);
- debug_data_ptr_->cruise_metrics = makeDicisionMetrics("cruise", planner_data);
+ debug_data_ptr_->cruise_metrics = makeMetrics("PIDBasedPlanner","cruise", planner_data);
}
// do cruise planning
diff --git a/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp b/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp
index f1cd5efb12e5e..612726f5cd23e 100644
--- a/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp
+++ b/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp
@@ -406,7 +406,7 @@ std::vector PlannerInterface::generateStopTrajectory(
velocity_factors_pub_->publish(makeVelocityFactorArray(planner_data.current_time, stop_pose));
// Store stop reason debug data
debug_data_ptr_->stop_metrics =
- makeDicisionMetrics("stop", planner_data, stop_pose, *determined_stop_obstacle);
+ makeMetrics("PlannerInterface", "stop", planner_data, stop_pose, *determined_stop_obstacle);
// Publish if ego vehicle will over run against the stop point with a limit acceleration
const bool will_over_run = determined_zero_vel_dist.value() >
@@ -678,7 +678,8 @@ std::vector PlannerInterface::generateSlowDownTrajectory(
// Add debug data
debug_data_ptr_->obstacles_to_slow_down.push_back(obstacle);
if (!debug_data_ptr_->stop_metrics.has_value()) {
- debug_data_ptr_->slow_down_metrics = makeDicisionMetrics("slow_down", planner_data);
+ debug_data_ptr_->slow_down_metrics =
+ makeMetrics("PlannerInterface", "slow_down", planner_data);
}
// update prev_slow_down_output_
@@ -837,20 +838,19 @@ PlannerInterface::calculateDistanceToSlowDownWithConstraints(
filtered_dist_to_slow_down_start, filtered_dist_to_slow_down_end, feasible_slow_down_vel);
}
-std::vector PlannerInterface::makeDicisionMetrics(
- const std::string & reason, const std::optional & planner_data,
+std::vector PlannerInterface::makeMetrics(
+ const std::string & module_name, const std::string & reason,
+ const std::optional & planner_data,
const std::optional & stop_pose,
const std::optional & stop_obstacle)
{
-
auto metrics = std::vector();
// Create status
- std::string metrics_name = "obstacle_cruise_planner/" + reason;
{
// Decision
Metric decision_metric;
- decision_metric.name = metrics_name + "/decision";
+ decision_metric.name = module_name + "/decision";
decision_metric.unit = "string";
decision_metric.value = reason;
metrics.push_back(decision_metric);
@@ -858,7 +858,7 @@ std::vector PlannerInterface::makeDicisionMetrics(
if (stop_pose.has_value() && planner_data.has_value()) { // Stop info
Metric stop_posision_metric;
- stop_posision_metric.name = metrics_name + "/stop_position";
+ stop_posision_metric.name = module_name + "/stop_position";
stop_posision_metric.unit = "string";
const auto & p = stop_pose.value().position;
stop_posision_metric.value =
@@ -866,7 +866,7 @@ std::vector PlannerInterface::makeDicisionMetrics(
metrics.push_back(stop_posision_metric);
Metric stop_orientation_metric;
- stop_orientation_metric.name = metrics_name + "/stop_orientation";
+ stop_orientation_metric.name = module_name + "/stop_orientation";
stop_orientation_metric.unit = "string";
const auto & o = stop_pose.value().orientation;
stop_orientation_metric.value = "{" + std::to_string(o.w) + ", " + std::to_string(o.x) + ", " +
@@ -878,7 +878,7 @@ std::vector PlannerInterface::makeDicisionMetrics(
stop_pose.value().position);
Metric dist_to_stop_pose_metric;
- dist_to_stop_pose_metric.name = metrics_name + "/distance_to_stop_pose";
+ dist_to_stop_pose_metric.name = module_name + "/distance_to_stop_pose";
dist_to_stop_pose_metric.unit = "double";
dist_to_stop_pose_metric.value = std::to_string(dist_to_stop_pose);
metrics.push_back(dist_to_stop_pose_metric);
@@ -888,7 +888,7 @@ std::vector PlannerInterface::makeDicisionMetrics(
// Obstacle info
Metric collision_point_metric;
const auto & p = stop_obstacle.value().collision_point;
- collision_point_metric.name = metrics_name + "/collision_point";
+ collision_point_metric.name = module_name + "/collision_point";
collision_point_metric.unit = "string";
collision_point_metric.value =
"{" + std::to_string(p.x) + ", " + std::to_string(p.y) + ", " + std::to_string(p.z) + "}";
@@ -902,20 +902,19 @@ void PlannerInterface::publishMetrics(const rclcpp::Time & current_time)
// create array
MetricArray metrics_msg;
metrics_msg.stamp = current_time;
-
- auto addMetrics = [&metrics_msg](std::optional>& opt_metrics) {
- if (opt_metrics) {
- metrics_msg.metric_array.insert(
- metrics_msg.metric_array.end(),
- opt_metrics->begin(),
- opt_metrics->end()
- );
- }
+
+ auto addMetrics = [&metrics_msg](std::optional> & opt_metrics) {
+ if (opt_metrics) {
+ metrics_msg.metric_array.insert(
+ metrics_msg.metric_array.end(), opt_metrics->begin(), opt_metrics->end());
+ }
};
addMetrics(debug_data_ptr_->stop_metrics);
addMetrics(debug_data_ptr_->slow_down_metrics);
addMetrics(debug_data_ptr_->cruise_metrics);
- metrics_pub_->publish(metrics_msg);
+ if (!metrics_msg.metric_array.empty()) {
+ metrics_pub_->publish(metrics_msg);
+ }
clearMetrics();
}
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp
index 30a1e7bd34bb3..0cba5b16c19b5 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.cpp
@@ -71,17 +71,13 @@ void MotionVelocityPlannerManager::update_module_parameters(
for (auto & plugin : loaded_plugins_) plugin->update_parameters(parameters);
}
-
std::shared_ptr MotionVelocityPlannerManager::make_decision_metric(
- const std::string & module_name, const std::string & reason, const bool is_decided)
+ const std::string & module_name, const std::string & reason)
{
auto metric = std::make_shared();
metric->name = module_name + "/decision";
metric->unit = "string";
- if (is_decided)
- metric->value = reason;
- else
- metric->value = "none";
+ metric->value = reason;
return metric;
}
@@ -92,9 +88,7 @@ std::shared_ptr MotionVelocityPlannerManager::get_metrics(
metrics->stamp = current_time;
for (const auto & mtr_ptr : metrics_) {
- if (mtr_ptr->value != "none") {
- metrics->metric_array.push_back(*mtr_ptr);
- }
+ metrics->metric_array.push_back(*mtr_ptr);
}
return metrics;
}
@@ -108,13 +102,15 @@ std::vector MotionVelocityPlannerManager::plan_velocitie
VelocityPlanningResult res = plugin->plan(ego_trajectory_points, planner_data);
results.push_back(res);
- const auto stop_decision_metric =
- make_decision_metric(plugin->get_module_name(), "stop", res.stop_points.size() > 0);
- metrics_.push_back(stop_decision_metric);
-
- const auto slow_down_decision_metric =
- make_decision_metric(plugin->get_module_name(), "slow_down", res.slowdown_intervals.size() > 0);
- metrics_.push_back(slow_down_decision_metric);
+ if (res.stop_points.size() > 0) {
+ const auto stop_decision_metric = make_decision_metric(plugin->get_module_name(), "stop");
+ metrics_.push_back(stop_decision_metric);
+ }
+ if (res.slowdown_intervals.size() > 0) {
+ const auto slow_down_decision_metric =
+ make_decision_metric(plugin->get_module_name(), "slow_down");
+ metrics_.push_back(slow_down_decision_metric);
+ }
}
return results;
}
diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.hpp
index 47180f9bc5a46..0e3bd77180f6e 100644
--- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.hpp
+++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/planner_manager.hpp
@@ -23,9 +23,9 @@
#include
#include
#include
+#include
#include
#include
-#include
#include
#include
@@ -54,7 +54,7 @@ class MotionVelocityPlannerManager
// Metrics
std::shared_ptr make_decision_metric(
- const std::string & module_name, const std::string & reason, const bool is_decided = true);
+ const std::string & module_name, const std::string & reason);
std::shared_ptr get_metrics(const rclcpp::Time & current_time) const;
void clear_metrics() { metrics_.clear(); }
From bf45efcb33f1d8c24abeff4ebb0f863da3890b01 Mon Sep 17 00:00:00 2001
From: xtk8532704 <1041084556@qq.com>
Date: Wed, 25 Sep 2024 18:45:37 +0900
Subject: [PATCH 10/21] mke planning_evaluator publish msg of MetricArray
instead of Diags.
Signed-off-by: xtk8532704 <1041084556@qq.com>
---
.../autoware_planning_evaluator/README.md | 2 +-
.../planning_evaluator_node.hpp | 55 ++----
.../launch/planning_evaluator.launch.xml | 2 -
.../src/planning_evaluator_node.cpp | 182 +++++++-----------
4 files changed, 83 insertions(+), 158 deletions(-)
diff --git a/evaluator/autoware_planning_evaluator/README.md b/evaluator/autoware_planning_evaluator/README.md
index d03603e51351a..cadf8e24c4c1f 100644
--- a/evaluator/autoware_planning_evaluator/README.md
+++ b/evaluator/autoware_planning_evaluator/README.md
@@ -60,7 +60,7 @@ Each metric is published on a topic named after the metric name.
| Name | Type | Description |
| ----------- | --------------------------------------- | ------------------------------------------------------- |
-| `~/metrics` | `diagnostic_msgs::msg::DiagnosticArray` | DiagnosticArray with a DiagnosticStatus for each metric |
+| `~/metrics` | `tier4_metric_msgs::msg::MetricArray` | MetricArray with many metrics of `tier4_metric_msgs::msg::Metric`|
When shut down, the evaluation node writes the values of the metrics measured during its lifetime
to a file as specified by the `output_file` parameter.
diff --git a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp
index c80c3c78e714a..371370ee54813 100644
--- a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp
+++ b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp
@@ -17,8 +17,6 @@
#include "autoware/planning_evaluator/metrics_calculator.hpp"
#include "autoware/planning_evaluator/stat.hpp"
-#include "tier4_metric_msgs/msg/Metric.hpp"
-#include "tier4_metric_msgs/msg/MetricList.hpp"
#include "rclcpp/rclcpp.hpp"
#include "tf2_ros/buffer.h"
#include "tf2_ros/transform_listener.h"
@@ -33,12 +31,13 @@
#include "geometry_msgs/msg/accel_with_covariance_stamped.hpp"
#include "nav_msgs/msg/odometry.hpp"
#include
+#include
+#include
#include
#include
#include
#include
-#include
#include
namespace planning_diagnostics
{
@@ -46,8 +45,8 @@ using autoware_perception_msgs::msg::PredictedObjects;
using autoware_planning_msgs::msg::PoseWithUuidStamped;
using autoware_planning_msgs::msg::Trajectory;
using autoware_planning_msgs::msg::TrajectoryPoint;
-using autoware::planning_evaluator::msg::Metric;
-using autoware::planning_evaluator::msg::MetricList;
+using MetricMsg = tier4_metric_msgs::msg::Metric;
+using MetricArrayMsg = tier4_metric_msgs::msg::MetricArray;
using nav_msgs::msg::Odometry;
using LaneletMapBin = autoware_map_msgs::msg::LaneletMapBin;
using autoware_planning_msgs::msg::LaneletRoute;
@@ -94,31 +93,21 @@ class PlanningEvaluatorNode : public rclcpp::Node
const PoseWithUuidStamped::ConstSharedPtr modified_goal_msg,
const Odometry::ConstSharedPtr ego_state_ptr);
- /**
- * @brief obtain diagnostics information
- */
- void onDiagnostics(const MetricList::ConstSharedPtr diag_msg);
-
/**
* @brief publish the given metric statistic
*/
- Metric generateDiagnosticStatus(
- const Metric & metric, const Stat & metric_stat) const;
+ void AddMetricMsg(
+ const Metric & metric, const Stat & metric_stat);
/**
* @brief publish current ego lane info
*/
- Metric generateDiagnosticEvaluationStatus(const Metric & diag);
-
- /**
- * @brief publish current ego lane info
- */
- Metric generateLaneletDiagnosticStatus(const Odometry::ConstSharedPtr ego_state_ptr);
+ void AddLaneletMetricMsg(const Odometry::ConstSharedPtr ego_state_ptr);
/**
* @brief publish current ego kinematic state
*/
- Metric generateKinematicStateDiagnosticStatus(
+ void AddKinematicStateMetricMsg(
const AccelWithCovarianceStamped & accel_stamped, const Odometry::ConstSharedPtr ego_state_ptr);
private:
@@ -134,15 +123,6 @@ class PlanningEvaluatorNode : public rclcpp::Node
*/
void onTimer();
- /**
- * @brief fetch topic data
- */
- void fetchData();
- // The diagnostics cycle is faster than timer, and each node publishes diagnostic separately.
- // takeData() in onTimer() with a polling subscriber will miss a topic, so save all topics with
- // onDiagnostics().
- rclcpp::Subscription::SharedPtr planning_diag_sub_;
-
// ROS
autoware::universe_utils::InterProcessPollingSubscriber traj_sub_{
this, "~/input/trajectory"};
@@ -163,12 +143,14 @@ class PlanningEvaluatorNode : public rclcpp::Node
autoware::universe_utils::InterProcessPollingSubscriber accel_sub_{
this, "~/input/acceleration"};
- rclcpp::Publisher::SharedPtr metrics_pub_;
+ rclcpp::Publisher::SharedPtr metrics_pub_;
std::shared_ptr transform_listener_{nullptr};
std::unique_ptr tf_buffer_;
autoware::route_handler::RouteHandler route_handler_;
- MetricList metrics_msg_;
+ // Message to publish
+ MetricArrayMsg metrics_msg_;
+
// Parameters
std::string output_file_str_;
std::string ego_frame_str_;
@@ -181,19 +163,6 @@ class PlanningEvaluatorNode : public rclcpp::Node
std::array>, static_cast(Metric::SIZE)> metric_stats_;
rclcpp::TimerBase::SharedPtr timer_;
- // queue for diagnostics and time stamp
- std::deque> diag_queue_;
- const std::vector target_functions_ = {
- "obstacle_cruise_planner_stop",
- "obstacle_cruise_planner_slow_down",
- "obstacle_cruise_planner_cruise",
- "autoware::motion_velocity_planner::OutOfLaneModule.stop",
- "autoware::motion_velocity_planner::OutOfLaneModule.slow_down",
- "autoware::motion_velocity_planner::ObstacleVelocityLimiterModule.stop",
- "autoware::motion_velocity_planner::ObstacleVelocityLimiterModule.slow_down",
- "autoware::motion_velocity_planner::DynamicObstacleStopModule.stop",
- "autoware::motion_velocity_planner::DynamicObstacleStopModule.slow_down",
- };
std::optional prev_acc_stamped_{std::nullopt};
};
} // namespace planning_diagnostics
diff --git a/evaluator/autoware_planning_evaluator/launch/planning_evaluator.launch.xml b/evaluator/autoware_planning_evaluator/launch/planning_evaluator.launch.xml
index e20cda378f188..41767a927fe96 100644
--- a/evaluator/autoware_planning_evaluator/launch/planning_evaluator.launch.xml
+++ b/evaluator/autoware_planning_evaluator/launch/planning_evaluator.launch.xml
@@ -7,7 +7,6 @@
-
@@ -16,7 +15,6 @@
-
diff --git a/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp b/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp
index 1e90d7af111f2..c9b2fe63a05a2 100644
--- a/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp
+++ b/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp
@@ -14,8 +14,6 @@
#include "autoware/planning_evaluator/planning_evaluator_node.hpp"
-#include "autoware/evaluator_utils/evaluator_utils.hpp"
-
#include
#include
@@ -58,11 +56,8 @@ PlanningEvaluatorNode::PlanningEvaluatorNode(const rclcpp::NodeOptions & node_op
output_file_str_ = declare_parameter("output_file");
ego_frame_str_ = declare_parameter("ego_frame");
- planning_diag_sub_ = create_subscription(
- "~/input/diagnostics", 1, std::bind(&PlanningEvaluatorNode::onDiagnostics, this, _1));
-
// List of metrics to calculate and publish
- metrics_pub_ = create_publisher("~/metrics", 1);
+ metrics_pub_ = create_publisher("~/metrics", 1);
for (const std::string & selected_metric :
declare_parameter>("selected_metrics")) {
Metric metric = str_to_metric.at(selected_metric);
@@ -103,43 +98,6 @@ PlanningEvaluatorNode::~PlanningEvaluatorNode()
}
}
-void PlanningEvaluatorNode::onDiagnostics(const DiagnosticArray::ConstSharedPtr diag_msg)
-{
- // add target diagnostics to the queue and remove old ones
- for (const auto & function : target_functions_) {
- autoware::evaluator_utils::updateDiagnosticQueue(*diag_msg, function, now(), diag_queue_);
- }
-}
-
-Metric PlanningEvaluatorNode::generateDiagnosticEvaluationStatus(
- const Metric & diag)
-{
- DiagnosticStatus status;
- status.name = diag.name;
-
- const auto it = std::find_if(diag.values.begin(), diag.values.end(), [](const auto & key_value) {
- return key_value.key.find("decision") != std::string::npos;
- });
- const bool found = it != diag.values.end();
- status.level = (found) ? status.OK : status.ERROR;
-
- auto get_key_value = [&]() {
- if (!found) {
- return diagnostic_msgs::msg::KeyValue{};
- }
- if (it->value.find("none") != std::string::npos) {
- return *it;
- }
- diagnostic_msgs::msg::KeyValue key_value;
- key_value.key = "decision";
- key_value.value = "deceleration";
- return key_value;
- };
-
- status.values.push_back(get_key_value());
- return status;
-}
-
void PlanningEvaluatorNode::getRouteData()
{
// route
@@ -163,7 +121,7 @@ void PlanningEvaluatorNode::getRouteData()
}
}
-DiagnosticStatus PlanningEvaluatorNode::generateLaneletDiagnosticStatus(
+void PlanningEvaluatorNode::AddLaneletMetricMsg(
const Odometry::ConstSharedPtr ego_state_ptr)
{
const auto & ego_pose = ego_state_ptr->pose.pose;
@@ -180,37 +138,45 @@ DiagnosticStatus PlanningEvaluatorNode::generateLaneletDiagnosticStatus(
lanelet::ConstLanelet current_lane;
lanelet::utils::query::getClosestLanelet(current_lanelets, ego_pose, ¤t_lane);
- DiagnosticStatus status;
- status.name = "ego_lane_info";
- status.level = status.OK;
- diagnostic_msgs::msg::KeyValue key_value;
- key_value.key = "lane_id";
- key_value.value = std::to_string(current_lane.id());
- status.values.push_back(key_value);
- key_value.key = "s";
- key_value.value = std::to_string(arc_coordinates.length);
- status.values.push_back(key_value);
- key_value.key = "t";
- key_value.value = std::to_string(arc_coordinates.distance);
- status.values.push_back(key_value);
- return status;
+ // push_back lanelet info to MetricArrayMsg
+ const std::string base_name = "ego_lane_info/";
+ MetricMsg metric_msg;
+
+ {
+ metric_msg.name = base_name+ "lane_id";
+ metric_msg.value = std::to_string(current_lane.id());
+ metrics_msg_.metric_array.push_back(metric_msg);
+ }
+
+ {
+ metric_msg.name = base_name + "s";
+ metric_msg.value = std::to_string(arc_coordinates.length);
+ metrics_msg_.metric_array.push_back(metric_msg);
+ }
+
+ {
+ metric_msg.name = base_name + "t";
+ metric_msg.value = std::to_string(arc_coordinates.distance);
+ metrics_msg_.metric_array.push_back(metric_msg);
+ }
+ return;
}
-DiagnosticStatus PlanningEvaluatorNode::generateKinematicStateDiagnosticStatus(
+void PlanningEvaluatorNode::AddKinematicStateMetricMsg(
const AccelWithCovarianceStamped & accel_stamped, const Odometry::ConstSharedPtr ego_state_ptr)
{
- DiagnosticStatus status;
- status.name = "kinematic_state";
- status.level = status.OK;
- diagnostic_msgs::msg::KeyValue key_value;
- key_value.key = "vel";
- key_value.value = std::to_string(ego_state_ptr->twist.twist.linear.x);
- status.values.push_back(key_value);
- key_value.key = "acc";
+ const std::string base_name = "ego_lane_info/";
+ MetricMsg metric_msg;
+
+ metric_msg.name = base_name + "vel";
+ metric_msg.value = std::to_string(ego_state_ptr->twist.twist.linear.x);
+ metrics_msg_.metric_array.push_back(metric_msg);
+
+ metric_msg.name = base_name + "acc";
const auto & acc = accel_stamped.accel.accel.linear.x;
- key_value.value = std::to_string(acc);
- status.values.push_back(key_value);
- key_value.key = "jerk";
+ metric_msg.value = std::to_string(acc);
+ metrics_msg_.metric_array.push_back(metric_msg);
+
const auto jerk = [&]() {
if (!prev_acc_stamped_.has_value()) {
prev_acc_stamped_ = accel_stamped;
@@ -227,33 +193,41 @@ DiagnosticStatus PlanningEvaluatorNode::generateKinematicStateDiagnosticStatus(
prev_acc_stamped_ = accel_stamped;
return (acc - prev_acc) / dt;
}();
- key_value.value = std::to_string(jerk);
- status.values.push_back(key_value);
- return status;
+ metric_msg.name = base_name + "jerk";
+ metric_msg.value = std::to_string(jerk);
+ metrics_msg_.metric_array.push_back(metric_msg);
+ return;
}
-Metric PlanningEvaluatorNode::generateDiagnosticStatus(
- const Metric & metric, const Stat & metric_stat) const
+void PlanningEvaluatorNode::AddMetricMsg(
+ const Metric & metric, const Stat & metric_stat)
{
- DiagnosticStatus status;
- status.level = status.OK;
- status.name = metric_to_str.at(metric);
- diagnostic_msgs::msg::KeyValue key_value;
- key_value.key = "min";
- key_value.value = boost::lexical_cast(metric_stat.min());
- status.values.push_back(key_value);
- key_value.key = "max";
- key_value.value = boost::lexical_cast(metric_stat.max());
- status.values.push_back(key_value);
- key_value.key = "mean";
- key_value.value = boost::lexical_cast(metric_stat.mean());
- status.values.push_back(key_value);
- return status;
+ const std::string base_name = metric_to_str.at(metric) + "/";
+ MetricMsg metric_msg;
+ {
+ metric_msg.name = base_name + "min";
+ metric_msg.value = boost::lexical_cast(metric_stat.min());
+ metrics_msg_.metric_array.push_back(metric_msg);
+ }
+
+ {
+ metric_msg.name = base_name + "max";
+ metric_msg.value = boost::lexical_cast(metric_stat.max());
+ metrics_msg_.metric_array.push_back(metric_msg);
+ }
+
+ {
+ metric_msg.name = base_name + "mean";
+ metric_msg.value = boost::lexical_cast(metric_stat.mean());
+ metrics_msg_.metric_array.push_back(metric_msg);
+ }
+
+ return;
}
void PlanningEvaluatorNode::onTimer()
{
- metrics_msg_.header.stamp = now();
+ metrics_msg_.stamp = now();
const auto ego_state_ptr = odometry_sub_.takeData();
onOdometry(ego_state_ptr);
@@ -276,26 +250,10 @@ void PlanningEvaluatorNode::onTimer()
onModifiedGoal(modified_goal_msg, ego_state_ptr);
}
- {
- // generate decision diagnostics from input diagnostics
- for (const auto & function : target_functions_) {
- const auto it = std::find_if(
- diag_queue_.begin(), diag_queue_.end(),
- [&function](const std::pair & p) {
- return p.first.name.find(function) != std::string::npos;
- });
- if (it == diag_queue_.end()) {
- continue;
- }
- // generate each decision diagnostics
- metrics_msg_.status.push_back(generateDiagnosticEvaluationStatus(it->first));
- }
- }
-
- if (!metrics_msg_.status.empty()) {
+ if (!metrics_msg_.metric_array.empty()) {
metrics_pub_->publish(metrics_msg_);
}
- metrics_msg_ = DiagnosticArray{};
+ metrics_msg_ = MetricArrayMsg{};
}
void PlanningEvaluatorNode::onTrajectory(
@@ -321,7 +279,7 @@ void PlanningEvaluatorNode::onTrajectory(
}
if (metric_stat->count() > 0) {
- metrics_msg_.status.push_back(generateDiagnosticStatus(metric, *metric_stat));
+ AddMetricMsg(metric, *metric_stat);
}
}
@@ -347,7 +305,7 @@ void PlanningEvaluatorNode::onModifiedGoal(
}
metric_stats_[static_cast(metric)].push_back(*metric_stat);
if (metric_stat->count() > 0) {
- metrics_msg_.status.push_back(generateDiagnosticStatus(metric, *metric_stat));
+ AddMetricMsg(metric, *metric_stat);
}
}
auto runtime = (now() - start).seconds();
@@ -363,12 +321,12 @@ void PlanningEvaluatorNode::onOdometry(const Odometry::ConstSharedPtr odometry_m
{
getRouteData();
if (route_handler_.isHandlerReady() && odometry_msg) {
- metrics_msg_.status.push_back(generateLaneletDiagnosticStatus(odometry_msg));
+ AddLaneletMetricMsg(odometry_msg);
}
const auto acc_msg = accel_sub_.takeData();
if (acc_msg && odometry_msg) {
- metrics_msg_.status.push_back(generateKinematicStateDiagnosticStatus(*acc_msg, odometry_msg));
+ AddKinematicStateMetricMsg(*acc_msg, odometry_msg);
}
}
}
From b1e56dc9592bbb36af723c8fe591ca8d440089b9 Mon Sep 17 00:00:00 2001
From: xtk8532704 <1041084556@qq.com>
Date: Thu, 3 Oct 2024 13:27:51 +0900
Subject: [PATCH 11/21] update aeb with metric type for decision.
Signed-off-by: xtk8532704 <1041084556@qq.com>
---
.../autoware/autonomous_emergency_braking/node.hpp | 5 +++++
.../autoware_autonomous_emergency_braking/package.xml | 1 +
.../src/node.cpp | 11 +++++++++++
.../launch/planning_evaluator.launch.xml | 1 -
.../launch/obstacle_cruise_planner.launch.xml | 1 -
.../launch/motion_velocity_planner.launch.xml | 1 -
.../src/node.cpp | 2 +-
.../src/planner_manager.cpp | 1 -
8 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/control/autoware_autonomous_emergency_braking/include/autoware/autonomous_emergency_braking/node.hpp b/control/autoware_autonomous_emergency_braking/include/autoware/autonomous_emergency_braking/node.hpp
index 32bedd15c5c53..1bb72af2892bf 100644
--- a/control/autoware_autonomous_emergency_braking/include/autoware/autonomous_emergency_braking/node.hpp
+++ b/control/autoware_autonomous_emergency_braking/include/autoware/autonomous_emergency_braking/node.hpp
@@ -36,6 +36,8 @@
#include
#include
#include
+#include
+#include
#include
@@ -77,6 +79,8 @@ using Vector3 = geometry_msgs::msg::Vector3;
using autoware_perception_msgs::msg::PredictedObject;
using autoware_perception_msgs::msg::PredictedObjects;
using colorTuple = std::tuple;
+using Metric = tier4_metric_msgs::msg::Metric;
+using MetricArray = tier4_metric_msgs::msg::MetricArray;
/**
* @brief Struct to store object data
@@ -345,6 +349,7 @@ class AEB : public rclcpp::Node
rclcpp::Publisher::SharedPtr
debug_processing_time_detail_pub_;
rclcpp::Publisher::SharedPtr debug_rss_distance_publisher_;
+ rclcpp::Publisher::SharedPtr metrics_pub_;
// timer
rclcpp::TimerBase::SharedPtr timer_;
mutable std::shared_ptr time_keeper_{nullptr};
diff --git a/control/autoware_autonomous_emergency_braking/package.xml b/control/autoware_autonomous_emergency_braking/package.xml
index 2fc87ee0a8acd..053c447ac0c5b 100644
--- a/control/autoware_autonomous_emergency_braking/package.xml
+++ b/control/autoware_autonomous_emergency_braking/package.xml
@@ -43,6 +43,7 @@
tf2_ros
tier4_debug_msgs
visualization_msgs
+ tier4_metric_msgs
ament_cmake
diff --git a/control/autoware_autonomous_emergency_braking/src/node.cpp b/control/autoware_autonomous_emergency_braking/src/node.cpp
index c785ab661060d..0e1ce4bf3c77d 100644
--- a/control/autoware_autonomous_emergency_braking/src/node.cpp
+++ b/control/autoware_autonomous_emergency_braking/src/node.cpp
@@ -142,6 +142,7 @@ AEB::AEB(const rclcpp::NodeOptions & node_options)
virtual_wall_publisher_ = this->create_publisher("~/virtual_wall", 1);
debug_rss_distance_publisher_ =
this->create_publisher("~/debug/rss_distance", 1);
+ metrics_pub_ = this->create_publisher("~/metrics", 1);
}
// Diagnostics
{
@@ -416,6 +417,16 @@ void AEB::onCheckCollision(DiagnosticStatusWrapper & stat)
}
}
addVirtualStopWallMarker(virtual_wall_marker);
+
+ // publish metrics
+ auto metric = Metric();
+ metric.name = "decision";
+ metric.value = "brake";
+ auto metrics = MetricArray();
+ metrics.stamp = get_clock()->now();
+ metrics.metric_array.push_back(metric);
+ metrics_pub_->publish(metrics);
+
} else {
const std::string error_msg = "[AEB]: No Collision";
const auto diag_level = DiagnosticStatus::OK;
diff --git a/evaluator/autoware_planning_evaluator/launch/planning_evaluator.launch.xml b/evaluator/autoware_planning_evaluator/launch/planning_evaluator.launch.xml
index 41767a927fe96..90c205dd55f1f 100644
--- a/evaluator/autoware_planning_evaluator/launch/planning_evaluator.launch.xml
+++ b/evaluator/autoware_planning_evaluator/launch/planning_evaluator.launch.xml
@@ -20,7 +20,6 @@