Skip to content

Commit a88fbde

Browse files
authored
Merge pull request #1644 from tier4/cherry-pick/control-evaluator-to-v4.0.0
feat(control_evaluator): cherry pick/control evaluator to v4.0.0
2 parents 510f8fa + 9a64647 commit a88fbde

File tree

17 files changed

+624
-75
lines changed

17 files changed

+624
-75
lines changed

.github/CODEOWNERS

+3-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ control/autoware_trajectory_follower_base/** takamasa.horibe@tier4.jp takayuki.m
6262
control/pure_pursuit/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
6363
control/shift_decider/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
6464
control/autoware_trajectory_follower_node/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp
65-
evaluator/autoware_control_evaluator/** daniel.sanchez@tier4.jp takayuki.murooka@tier4.jp
65+
evaluator/autoware_control_evaluator/** daniel.sanchez@tier4.jp takayuki.murooka@tier4.jp kosuke.takeuchi@tier4.jp
66+
evaluator/autoware_evaluator_utils/** daniel.sanchez@tier4.jp takayuki.murooka@tier4.jp
67+
evaluator/autoware_planning_evaluator/** kyoichi.sugahara@tier4.jp maxime.clement@tier4.jp
6668
evaluator/diagnostic_converter/** kyoichi.sugahara@tier4.jp maxime.clement@tier4.jp takamasa.horibe@tier4.jp
6769
evaluator/kinematic_evaluator/** dominik.jargot@robotec.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp
6870
evaluator/localization_evaluator/** dominik.jargot@robotec.ai koji.minoda@tier4.jp

evaluator/autoware_control_evaluator/CMakeLists.txt

+10-1
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,19 @@ ament_auto_add_library(control_evaluator_node SHARED
1212
)
1313

1414
rclcpp_components_register_node(control_evaluator_node
15-
PLUGIN "control_diagnostics::controlEvaluatorNode"
15+
PLUGIN "control_diagnostics::ControlEvaluatorNode"
1616
EXECUTABLE control_evaluator
1717
)
1818

19+
if(BUILD_TESTING)
20+
ament_add_ros_isolated_gtest(test_control_evaluator
21+
test/test_control_evaluator_node.cpp
22+
)
23+
target_link_libraries(test_control_evaluator
24+
control_evaluator_node
25+
)
26+
endif()
27+
1928

2029
ament_auto_package(
2130
INSTALL_TO_SHARE
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
1-
# Planning Evaluator
1+
# Control Evaluator
22

33
## Purpose
44

55
This package provides nodes that generate metrics to evaluate the quality of control.
6+
7+
It publishes diagnostic information about control modules' outputs as well as the ego vehicle's current kinematics and position.
8+
9+
## Evaluated metrics
10+
11+
The control evaluator uses the metrics defined in `include/autoware/control_evaluator/metrics/deviation_metrics.hpp`to calculate deviations in yaw and lateral distance from the ego's set-point. The control_evaluator can also be customized to offer metrics/evaluation about other control modules. Currently, the control_evaluator offers a simple diagnostic output based on the autonomous_emergency_braking node's output, but this functionality can be extended to evaluate other control modules' performance.
12+
13+
## Kinematics output
14+
15+
The control evaluator module also constantly publishes information regarding the ego vehicle's kinematics and position. It publishes the current ego lane id with the longitudinal `s` and lateral `t` arc coordinates. It also publishes the current ego speed, acceleration and jerk in its diagnostic messages.
16+
17+
This information can be used by other nodes to establish automated evaluation using rosbags: by crosschecking the ego position and kinematics with the evaluated control module's output, it is possible to judge if the evaluated control modules reacted in a satisfactory way at certain interesting points of the rosbag reproduction.

evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp

+26-13
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,17 @@
1717

1818
#include "autoware/control_evaluator/metrics/deviation_metrics.hpp"
1919

20+
#include <autoware/route_handler/route_handler.hpp>
2021
#include <autoware/universe_utils/ros/polling_subscriber.hpp>
2122
#include <rclcpp/rclcpp.hpp>
2223

24+
#include "geometry_msgs/msg/accel_with_covariance_stamped.hpp"
25+
#include <autoware_planning_msgs/msg/lanelet_route.hpp>
2326
#include <diagnostic_msgs/msg/diagnostic_array.hpp>
2427
#include <nav_msgs/msg/odometry.hpp>
2528

26-
#include <array>
2729
#include <deque>
28-
#include <memory>
30+
#include <optional>
2931
#include <string>
3032
#include <utility>
3133
#include <vector>
@@ -39,29 +41,29 @@ using diagnostic_msgs::msg::DiagnosticStatus;
3941
using geometry_msgs::msg::Point;
4042
using geometry_msgs::msg::Pose;
4143
using nav_msgs::msg::Odometry;
44+
using LaneletMapBin = autoware_map_msgs::msg::LaneletMapBin;
45+
using autoware_planning_msgs::msg::LaneletRoute;
46+
using geometry_msgs::msg::AccelWithCovarianceStamped;
4247

4348
/**
4449
* @brief Node for control evaluation
4550
*/
46-
class controlEvaluatorNode : public rclcpp::Node
51+
class ControlEvaluatorNode : public rclcpp::Node
4752
{
4853
public:
49-
explicit controlEvaluatorNode(const rclcpp::NodeOptions & node_options);
50-
void removeOldDiagnostics(const rclcpp::Time & stamp);
51-
void removeDiagnosticsByName(const std::string & name);
52-
void addDiagnostic(const DiagnosticStatus & diag, const rclcpp::Time & stamp);
53-
void updateDiagnosticQueue(
54-
const DiagnosticArray & input_diagnostics, const std::string & function,
55-
const rclcpp::Time & stamp);
56-
54+
explicit ControlEvaluatorNode(const rclcpp::NodeOptions & node_options);
5755
DiagnosticStatus generateLateralDeviationDiagnosticStatus(
5856
const Trajectory & traj, const Point & ego_point);
5957
DiagnosticStatus generateYawDeviationDiagnosticStatus(
6058
const Trajectory & traj, const Pose & ego_pose);
61-
std::optional<DiagnosticStatus> generateStopDiagnosticStatus(
62-
const DiagnosticArray & diag, const std::string & function_name);
59+
DiagnosticStatus generateGoalLongitudinalDeviationDiagnosticStatus(const Pose & ego_pose);
60+
DiagnosticStatus generateGoalLateralDeviationDiagnosticStatus(const Pose & ego_pose);
61+
DiagnosticStatus generateGoalYawDeviationDiagnosticStatus(const Pose & ego_pose);
6362

6463
DiagnosticStatus generateAEBDiagnosticStatus(const DiagnosticStatus & diag);
64+
DiagnosticStatus generateLaneletDiagnosticStatus(const Pose & ego_pose) const;
65+
DiagnosticStatus generateKinematicStateDiagnosticStatus(
66+
const Odometry & odom, const AccelWithCovarianceStamped & accel_stamped);
6567

6668
void onDiagnostics(const DiagnosticArray::ConstSharedPtr diag_msg);
6769
void onTimer();
@@ -74,11 +76,20 @@ class controlEvaluatorNode : public rclcpp::Node
7476

7577
autoware::universe_utils::InterProcessPollingSubscriber<Odometry> odometry_sub_{
7678
this, "~/input/odometry"};
79+
autoware::universe_utils::InterProcessPollingSubscriber<AccelWithCovarianceStamped> accel_sub_{
80+
this, "~/input/acceleration"};
7781
autoware::universe_utils::InterProcessPollingSubscriber<Trajectory> traj_sub_{
7882
this, "~/input/trajectory"};
83+
autoware::universe_utils::InterProcessPollingSubscriber<LaneletRoute> route_subscriber_{
84+
this, "~/input/route", rclcpp::QoS{1}.transient_local()};
85+
autoware::universe_utils::InterProcessPollingSubscriber<LaneletMapBin> vector_map_subscriber_{
86+
this, "~/input/vector_map", rclcpp::QoS{1}.transient_local()};
7987

8088
rclcpp::Publisher<DiagnosticArray>::SharedPtr metrics_pub_;
8189

90+
// update Route Handler
91+
void getRouteData();
92+
8293
// Calculator
8394
// Metrics
8495
std::deque<rclcpp::Time> stamps_;
@@ -87,7 +98,9 @@ class controlEvaluatorNode : public rclcpp::Node
8798
std::deque<std::pair<DiagnosticStatus, rclcpp::Time>> diag_queue_;
8899
const std::vector<std::string> target_functions_ = {"autonomous_emergency_braking"};
89100

101+
autoware::route_handler::RouteHandler route_handler_;
90102
rclcpp::TimerBase::SharedPtr timer_;
103+
std::optional<AccelWithCovarianceStamped> prev_acc_stamped_{std::nullopt};
91104
};
92105
} // namespace control_diagnostics
93106

evaluator/autoware_control_evaluator/include/autoware/control_evaluator/metrics/deviation_metrics.hpp

+24
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,30 @@ double calcLateralDeviation(const Trajectory & traj, const Point & point);
4242
*/
4343
double calcYawDeviation(const Trajectory & traj, const Pose & pose);
4444

45+
/**
46+
* @brief calculate longitudinal deviation from target_point to base_pose
47+
* @param [in] pose input base_pose
48+
* @param [in] point input target_point
49+
* @return longitudinal deviation from base_pose to target_point
50+
*/
51+
double calcLongitudinalDeviation(const Pose & base_pose, const Point & target_point);
52+
53+
/**
54+
* @brief calculate lateral deviation from target_point to base_pose
55+
* @param [in] pose input base_pose
56+
* @param [in] point input target_point
57+
* @return lateral deviation from base_pose to target_point
58+
*/
59+
double calcLateralDeviation(const Pose & base_pose, const Point & target_point);
60+
61+
/**
62+
* @brief calculate yaw deviation from base_pose to target_pose
63+
* @param [in] pose input base_pose
64+
* @param [in] pose input target_pose
65+
* @return yaw deviation from base_pose to target_pose
66+
*/
67+
double calcYawDeviation(const Pose & base_pose, const Pose & target_pose);
68+
4569
} // namespace metrics
4670
} // namespace control_diagnostics
4771

Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
<launch>
22
<arg name="input/diagnostics" default="/diagnostics"/>
33
<arg name="input/odometry" default="/localization/kinematic_state"/>
4+
<arg name="input/acceleration" default="/localization/acceleration"/>
45
<arg name="input/trajectory" default="/planning/scenario_planning/trajectory"/>
6+
<arg name="map_topic_name" default="/map/vector_map"/>
7+
<arg name="route_topic_name" default="/planning/mission_planning/route"/>
58
<!-- control evaluator -->
69
<group>
710
<node name="control_evaluator" exec="control_evaluator" pkg="autoware_control_evaluator">
811
<param from="$(find-pkg-share autoware_control_evaluator)/param/control_evaluator.defaults.yaml"/>
912
<remap from="~/input/diagnostics" to="$(var input/diagnostics)"/>
1013
<remap from="~/input/odometry" to="$(var input/odometry)"/>
14+
<remap from="~/input/acceleration" to="$(var input/acceleration)"/>
1115
<remap from="~/input/trajectory" to="$(var input/trajectory)"/>
1216
<remap from="~/metrics" to="/control/control_evaluator/metrics"/>
17+
<remap from="~/input/vector_map" to="$(var map_topic_name)"/>
18+
<remap from="~/input/route" to="$(var route_topic_name)"/>
1319
</node>
1420
</group>
1521
</launch>

evaluator/autoware_control_evaluator/package.xml

+8-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
<description>ROS 2 node for evaluating control</description>
77
<maintainer email="daniel.sanchez@tier4.jp">Daniel SANCHEZ</maintainer>
88
<maintainer email="takayuki.murooka@tier4.jp">takayuki MUROOKA</maintainer>
9+
<maintainer email="kosuke.takeuchi@tier4.jp">kosuke TAKEUCHI</maintainer>
10+
<maintainer email="temkei.kem@tier4.jp">Temkei Kem</maintainer>
911
<license>Apache License 2.0</license>
1012

1113
<author email="daniel.sanchez@tier4.jp">Daniel SANCHEZ</author>
@@ -14,14 +16,19 @@
1416
<buildtool_depend>ament_cmake_auto</buildtool_depend>
1517
<buildtool_depend>autoware_cmake</buildtool_depend>
1618

19+
<depend>autoware_evaluator_utils</depend>
1720
<depend>autoware_motion_utils</depend>
1821
<depend>autoware_planning_msgs</depend>
22+
<depend>autoware_route_handler</depend>
23+
<depend>autoware_test_utils</depend>
1924
<depend>autoware_universe_utils</depend>
2025
<depend>diagnostic_msgs</depend>
26+
<depend>nav_msgs</depend>
2127
<depend>pluginlib</depend>
2228
<depend>rclcpp</depend>
2329
<depend>rclcpp_components</depend>
24-
<!-- <depend>nav_msgs</depend> -->
30+
<depend>tf2</depend>
31+
<depend>tf2_ros</depend>
2532

2633
<test_depend>ament_cmake_ros</test_depend>
2734
<test_depend>ament_lint_auto</test_depend>

0 commit comments

Comments
 (0)