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
147143void 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 ;
0 commit comments