Skip to content

Commit 31260cb

Browse files
mkqudakyoichi-sugahara
authored andcommitted
feat(lane_change): add text display for candidate path sampling metrics (autowarefoundation#9810)
* display candidate path sampling metrics on rviz Signed-off-by: mohammad alqudah <alqudah.mohammad@tier4.jp> * rename struct Signed-off-by: mohammad alqudah <alqudah.mohammad@tier4.jp> --------- Signed-off-by: mohammad alqudah <alqudah.mohammad@tier4.jp>
1 parent 42f3748 commit 31260cb

File tree

3 files changed

+61
-1
lines changed
  • planning/behavior_path_planner/autoware_behavior_path_lane_change_module

3 files changed

+61
-1
lines changed

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/debug.hpp

+12
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,20 @@
2525

2626
#include <limits>
2727
#include <string>
28+
#include <vector>
2829

2930
namespace autoware::behavior_path_planner::lane_change
3031
{
3132
using utils::path_safety_checker::CollisionCheckDebugMap;
33+
34+
struct MetricsDebug
35+
{
36+
LaneChangePhaseMetrics prep_metric;
37+
std::vector<LaneChangePhaseMetrics> lc_metrics;
38+
double max_prepare_length;
39+
double max_lane_changing_length;
40+
};
41+
3242
struct Debug
3343
{
3444
std::string module_type;
@@ -41,6 +51,7 @@ struct Debug
4151
lanelet::ConstLanelets current_lanes;
4252
lanelet::ConstLanelets target_lanes;
4353
lanelet::ConstLanelets target_backward_lanes;
54+
std::vector<MetricsDebug> lane_change_metrics;
4455
double collision_check_object_debug_lifetime{0.0};
4556
double distance_to_end_of_current_lane{std::numeric_limits<double>::max()};
4657
double distance_to_lane_change_finished{std::numeric_limits<double>::max()};
@@ -64,6 +75,7 @@ struct Debug
6475
current_lanes.clear();
6576
target_lanes.clear();
6677
target_backward_lanes.clear();
78+
lane_change_metrics.clear();
6779

6880
collision_check_object_debug_lifetime = 0.0;
6981
distance_to_end_of_current_lane = std::numeric_limits<double>::max();

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -1061,14 +1061,20 @@ std::vector<LaneChangePhaseMetrics> NormalLaneChange::get_lane_changing_metrics(
10611061
});
10621062

10631063
const auto max_path_velocity = prep_segment.points.back().point.longitudinal_velocity_mps;
1064-
return calculation::calc_shift_phase_metrics(
1064+
const auto lc_metrics = calculation::calc_shift_phase_metrics(
10651065
common_data_ptr_, shift_length, prep_metric.velocity, max_path_velocity,
10661066
prep_metric.sampled_lon_accel, max_lane_changing_length);
1067+
1068+
const auto max_prep_length = common_data_ptr_->transient_data.dist_to_terminal_start;
1069+
lane_change_debug_.lane_change_metrics.push_back(
1070+
{prep_metric, lc_metrics, max_prep_length, max_lane_changing_length});
1071+
return lc_metrics;
10671072
}
10681073

10691074
bool NormalLaneChange::get_lane_change_paths(LaneChangePaths & candidate_paths) const
10701075
{
10711076
lane_change_debug_.collision_check_objects.clear();
1077+
lane_change_debug_.lane_change_metrics.clear();
10721078

10731079
if (!common_data_ptr_->is_lanes_available()) {
10741080
RCLCPP_WARN(logger_, "lanes are not available. Not expected.");

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/markers.cpp

+42
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "autoware/behavior_path_planner_common/marker_utils/utils.hpp"
1717

1818
#include <autoware/behavior_path_lane_change_module/utils/markers.hpp>
19+
#include <autoware/universe_utils/geometry/geometry.hpp>
1920
#include <autoware/universe_utils/ros/marker_helper.hpp>
2021
#include <autoware_lanelet2_extension/visualization/visualization.hpp>
2122

@@ -185,6 +186,46 @@ MarkerArray showExecutionInfo(const Debug & debug_data, const geometry_msgs::msg
185186
return marker_array;
186187
}
187188

189+
MarkerArray ShowLaneChangeMetricsInfo(
190+
const Debug & debug_data, const geometry_msgs::msg::Pose & pose)
191+
{
192+
MarkerArray marker_array;
193+
if (debug_data.lane_change_metrics.empty()) {
194+
return marker_array;
195+
}
196+
197+
auto text_marker = createDefaultMarker(
198+
"map", rclcpp::Clock{RCL_ROS_TIME}.now(), "sampling_metrics", 0, Marker::TEXT_VIEW_FACING,
199+
createMarkerScale(0.6, 0.6, 0.6), colors::yellow());
200+
text_marker.pose = autoware::universe_utils::calcOffsetPose(pose, 10.0, 15.0, 0.0);
201+
202+
text_marker.text = fmt::format("{:<12}", "") + fmt::format("{:^18}|", "lat_accel[m/s2]") +
203+
fmt::format("{:^18}|", "lon_accel[m/s2]") +
204+
fmt::format("{:^17}|", "velocity[m/s]") +
205+
fmt::format("{:^15}|", "duration[s]") + fmt::format("{:^15}|", "length[m]") +
206+
fmt::format("{:^20}\n", "max_length_th[m]");
207+
for (const auto & metrics : debug_data.lane_change_metrics) {
208+
text_marker.text += fmt::format("{:-<170}\n", "");
209+
const auto & p_m = metrics.prep_metric;
210+
text_marker.text +=
211+
fmt::format("{:<17}", "prep_metrics:") + fmt::format("{:^10.3f}", p_m.lat_accel) +
212+
fmt::format("{:^21.3f}", p_m.actual_lon_accel) + fmt::format("{:^12.3f}", p_m.velocity) +
213+
fmt::format("{:^15.3f}", p_m.duration) + fmt::format("{:^15.3f}", p_m.length) +
214+
fmt::format("{:^17.3f}\n", metrics.max_prepare_length);
215+
text_marker.text += fmt::format("{:<20}\n", "lc_metrics:");
216+
for (const auto lc_m : metrics.lc_metrics) {
217+
text_marker.text +=
218+
fmt::format("{:<15}", "") + fmt::format("{:^10.3f}", lc_m.lat_accel) +
219+
fmt::format("{:^21.3f}", lc_m.actual_lon_accel) + fmt::format("{:^12.3f}", lc_m.velocity) +
220+
fmt::format("{:^15.3f}", lc_m.duration) + fmt::format("{:^15.3f}", lc_m.length) +
221+
fmt::format("{:^17.3f}\n", metrics.max_lane_changing_length);
222+
}
223+
}
224+
225+
marker_array.markers.push_back(text_marker);
226+
return marker_array;
227+
}
228+
188229
MarkerArray createDebugMarkerArray(
189230
const Debug & debug_data, const geometry_msgs::msg::Pose & ego_pose)
190231
{
@@ -212,6 +253,7 @@ MarkerArray createDebugMarkerArray(
212253
}
213254

214255
add(showExecutionInfo(debug_data, ego_pose));
256+
add(ShowLaneChangeMetricsInfo(debug_data, ego_pose));
215257

216258
// lanes
217259
add(laneletsAsTriangleMarkerArray(

0 commit comments

Comments
 (0)