Skip to content

Commit f5bdffb

Browse files
committed
fix(planning_data_analyzer): use normalize_radian and separate AHE/FHE outputs
1 parent 4384819 commit f5bdffb

4 files changed

Lines changed: 14 additions & 7 deletions

File tree

planning/autoware_planning_data_analyzer/package.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<depend>autoware_planning_msgs</depend>
2626
<depend>autoware_route_handler</depend>
2727
<depend>autoware_utils</depend>
28+
<depend>autoware_utils_math</depend>
2829
<depend>autoware_utils_rclcpp</depend>
2930
<depend>autoware_vehicle_info_utils</depend>
3031
<depend>autoware_vehicle_msgs</depend>

planning/autoware_planning_data_analyzer/src/open_loop_evaluator.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <autoware/motion_utils/trajectory/conversion.hpp>
2020
#include <autoware/motion_utils/trajectory/trajectory.hpp>
2121
#include <autoware_utils_geometry/geometry.hpp>
22+
#include <autoware_utils_math/normalization.hpp>
2223
#include <rclcpp/serialization.hpp>
2324
#include <rosbag2_cpp/reader.hpp>
2425

@@ -137,11 +138,6 @@ static std::string result_summary(bool has_frame, size_t num_points)
137138
: "Open-loop trajectory metrics unavailable";
138139
}
139140

140-
static double wrap_angle(const double angle)
141-
{
142-
return std::atan2(std::sin(angle), std::cos(angle));
143-
}
144-
145141
// Constructor implementation moved to header file
146142

147143
void OpenLoopEvaluator::evaluate(
@@ -443,6 +439,7 @@ OpenLoopTrajectoryMetrics OpenLoopEvaluator::evaluate_trajectory(const Evaluatio
443439
metrics.displacement_errors.resize(metrics.num_points, 0.0);
444440
metrics.ground_truth_poses.resize(metrics.num_points);
445441
metrics.ade.resize(metrics.num_points, 0.0);
442+
metrics.ahe.resize(metrics.num_points, 0.0);
446443
metrics.heading_errors.resize(metrics.num_points, 0.0);
447444
metrics.ttc.resize(metrics.num_points, std::numeric_limits<double>::max());
448445

@@ -478,7 +475,8 @@ OpenLoopTrajectoryMetrics OpenLoopEvaluator::evaluate_trajectory(const Evaluatio
478475
calculate_errors_in_vehicle_frame(traj_point.pose, gt_pose);
479476
const double pred_yaw = tf2::getYaw(traj_point.pose.orientation);
480477
const double gt_yaw = tf2::getYaw(gt_pose.orientation);
481-
const double heading_error = std::abs(wrap_angle(pred_yaw - gt_yaw));
478+
const double heading_error =
479+
std::abs(autoware_utils_math::normalize_radian(pred_yaw - gt_yaw));
482480

483481
metrics.longitudinal_deviations[i] = longitudinal_error;
484482
metrics.lateral_deviations[i] = lateral_error;
@@ -487,6 +485,7 @@ OpenLoopTrajectoryMetrics OpenLoopEvaluator::evaluate_trajectory(const Evaluatio
487485
lat_sum += std::abs(lateral_error);
488486
lon_sum += std::abs(longitudinal_error);
489487
heading_sum += heading_error;
488+
metrics.ahe[i] = heading_sum / (i + 1);
490489
lat_max = std::max(lat_max, std::abs(lateral_error));
491490
lon_max = std::max(lon_max, std::abs(longitudinal_error));
492491
lat_prefix_sum[i] = lat_sum;
@@ -774,7 +773,7 @@ void OpenLoopEvaluator::save_metrics_to_bag(
774773
bag_writer.write(array_msg, metric_topic("fde"), message_timestamp);
775774

776775
// AHE
777-
array_msg.data = metrics.heading_errors;
776+
array_msg.data = metrics.ahe;
778777
bag_writer.write(array_msg, metric_topic("ahe"), message_timestamp);
779778

780779
// FHE
@@ -1037,6 +1036,7 @@ nlohmann::json OpenLoopEvaluator::get_full_results_as_json() const
10371036
traj["trajectory_duration_sec"] = m.trajectory_duration;
10381037

10391038
traj["ade"] = m.ade;
1039+
traj["ahe"] = m.ahe;
10401040
traj["displacement_errors"] = m.displacement_errors;
10411041
traj["heading_errors"] = m.heading_errors;
10421042
traj["lateral_deviations"] = m.lateral_deviations;

planning/autoware_planning_data_analyzer/src/open_loop_evaluator.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ struct OpenLoopTrajectoryMetrics
5757
longitudinal_deviations; // Longitudinal deviation at each trajectory point (in vehicle frame)
5858
std::vector<double> displacement_errors; // Euclidean distance at each trajectory point
5959
std::vector<double> ade; // Average Displacement Error at each trajectory point
60+
std::vector<double> ahe; // Average heading error at each trajectory point [rad]
6061
std::vector<double> heading_errors; // Absolute heading error at each trajectory point [rad]
6162
std::vector<double> ttc; // Time To Collision at each trajectory point
6263

planning/autoware_planning_data_analyzer/test/test_open_loop_gt_source_mode.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,13 @@ TEST_F(OpenLoopGTSourceModeTest, HeadingMetricsUseWrappedYawErrorPerHorizon)
199199
evaluator.evaluate(sync_data_list, nullptr);
200200
const auto metrics = evaluator.get_metrics();
201201
ASSERT_EQ(metrics.size(), 1u);
202+
ASSERT_EQ(metrics.front().ahe.size(), 4u);
202203
ASSERT_EQ(metrics.front().heading_errors.size(), 4u);
203204

205+
EXPECT_NEAR(metrics.front().ahe[0], 0.2, 1e-6);
206+
EXPECT_NEAR(metrics.front().ahe[1], 0.2, 1e-6);
207+
EXPECT_NEAR(metrics.front().ahe[2], 0.233333333333, 1e-6);
208+
EXPECT_NEAR(metrics.front().ahe[3], 0.275, 1e-6);
204209
EXPECT_NEAR(metrics.front().heading_errors[0], 0.2, 1e-6);
205210
EXPECT_NEAR(metrics.front().heading_errors[1], 0.2, 1e-6);
206211
EXPECT_NEAR(metrics.front().heading_errors[2], 0.3, 1e-6);

0 commit comments

Comments
 (0)