Skip to content

Commit 10c8aa2

Browse files
committed
refactor: nest epdms aggregation structs
1 parent dd8f05c commit 10c8aa2

4 files changed

Lines changed: 202 additions & 224 deletions

File tree

planning/autoware_planning_data_analyzer/src/metrics/epdms_aggregation.cpp

Lines changed: 58 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -39,74 +39,76 @@ HumanFilterMetrics calculate_human_filter_metrics(
3939
{
4040
HumanFilterMetrics result;
4141

42-
result.human_history_comfort = human_metrics.history_comfort;
43-
result.human_history_comfort_available = human_metrics.history_comfort_available;
44-
result.filtered_history_comfort = apply_human_filter(
42+
result.history_comfort.human_reference = human_metrics.history_comfort;
43+
result.history_comfort.human_reference_available = human_metrics.history_comfort_available;
44+
result.history_comfort.filtered = apply_human_filter(
4545
agent_metrics.history_comfort, agent_metrics.history_comfort_available,
4646
human_metrics.history_comfort, human_metrics.history_comfort_available,
47-
result.history_comfort_filter_applied);
47+
result.history_comfort.filter_applied);
4848

49-
result.human_extended_comfort = human_metrics.extended_comfort;
50-
result.human_extended_comfort_available = human_metrics.extended_comfort_available;
51-
result.filtered_extended_comfort = apply_human_filter(
49+
result.extended_comfort.human_reference = human_metrics.extended_comfort;
50+
result.extended_comfort.human_reference_available = human_metrics.extended_comfort_available;
51+
result.extended_comfort.filtered = apply_human_filter(
5252
agent_metrics.extended_comfort, agent_metrics.extended_comfort_available,
5353
human_metrics.extended_comfort, human_metrics.extended_comfort_available,
54-
result.extended_comfort_filter_applied);
54+
result.extended_comfort.filter_applied);
5555

56-
result.human_ego_progress = human_metrics.ego_progress;
57-
result.human_ego_progress_available = human_metrics.ego_progress_available;
58-
result.filtered_ego_progress = apply_human_filter(
56+
result.ego_progress.human_reference = human_metrics.ego_progress;
57+
result.ego_progress.human_reference_available = human_metrics.ego_progress_available;
58+
result.ego_progress.filtered = apply_human_filter(
5959
agent_metrics.ego_progress, agent_metrics.ego_progress_available, human_metrics.ego_progress,
60-
human_metrics.ego_progress_available, result.ego_progress_filter_applied);
60+
human_metrics.ego_progress_available, result.ego_progress.filter_applied);
6161

62-
result.human_time_to_collision_within_bound = human_metrics.time_to_collision_within_bound;
63-
result.human_time_to_collision_within_bound_available =
62+
result.time_to_collision_within_bound.human_reference =
63+
human_metrics.time_to_collision_within_bound;
64+
result.time_to_collision_within_bound.human_reference_available =
6465
human_metrics.time_to_collision_within_bound_available;
65-
result.filtered_time_to_collision_within_bound = apply_human_filter(
66+
result.time_to_collision_within_bound.filtered = apply_human_filter(
6667
agent_metrics.time_to_collision_within_bound,
6768
agent_metrics.time_to_collision_within_bound_available,
6869
human_metrics.time_to_collision_within_bound,
6970
human_metrics.time_to_collision_within_bound_available,
70-
result.time_to_collision_within_bound_filter_applied);
71+
result.time_to_collision_within_bound.filter_applied);
7172

72-
result.human_lane_keeping = human_metrics.lane_keeping;
73-
result.human_lane_keeping_available = human_metrics.lane_keeping_available;
74-
result.filtered_lane_keeping = apply_human_filter(
73+
result.lane_keeping.human_reference = human_metrics.lane_keeping;
74+
result.lane_keeping.human_reference_available = human_metrics.lane_keeping_available;
75+
result.lane_keeping.filtered = apply_human_filter(
7576
agent_metrics.lane_keeping, agent_metrics.lane_keeping_available, human_metrics.lane_keeping,
76-
human_metrics.lane_keeping_available, result.lane_keeping_filter_applied);
77+
human_metrics.lane_keeping_available, result.lane_keeping.filter_applied);
7778

78-
result.human_drivable_area_compliance = human_metrics.drivable_area_compliance;
79-
result.human_drivable_area_compliance_available =
79+
result.drivable_area_compliance.human_reference = human_metrics.drivable_area_compliance;
80+
result.drivable_area_compliance.human_reference_available =
8081
human_metrics.drivable_area_compliance_available;
81-
result.filtered_drivable_area_compliance = apply_human_filter(
82+
result.drivable_area_compliance.filtered = apply_human_filter(
8283
agent_metrics.drivable_area_compliance, agent_metrics.drivable_area_compliance_available,
8384
human_metrics.drivable_area_compliance, human_metrics.drivable_area_compliance_available,
84-
result.drivable_area_compliance_filter_applied);
85+
result.drivable_area_compliance.filter_applied);
8586

86-
result.human_no_at_fault_collision = human_metrics.no_at_fault_collision;
87-
result.human_no_at_fault_collision_available = human_metrics.no_at_fault_collision_available;
88-
result.filtered_no_at_fault_collision = apply_human_filter(
87+
result.no_at_fault_collision.human_reference = human_metrics.no_at_fault_collision;
88+
result.no_at_fault_collision.human_reference_available =
89+
human_metrics.no_at_fault_collision_available;
90+
result.no_at_fault_collision.filtered = apply_human_filter(
8991
agent_metrics.no_at_fault_collision, agent_metrics.no_at_fault_collision_available,
9092
human_metrics.no_at_fault_collision, human_metrics.no_at_fault_collision_available,
91-
result.no_at_fault_collision_filter_applied);
93+
result.no_at_fault_collision.filter_applied);
9294

93-
result.human_driving_direction_compliance = human_metrics.driving_direction_compliance;
94-
result.human_driving_direction_compliance_available =
95+
result.driving_direction_compliance.human_reference = human_metrics.driving_direction_compliance;
96+
result.driving_direction_compliance.human_reference_available =
9597
human_metrics.driving_direction_compliance_available;
96-
result.filtered_driving_direction_compliance = apply_human_filter(
98+
result.driving_direction_compliance.filtered = apply_human_filter(
9799
agent_metrics.driving_direction_compliance,
98100
agent_metrics.driving_direction_compliance_available,
99101
human_metrics.driving_direction_compliance,
100102
human_metrics.driving_direction_compliance_available,
101-
result.driving_direction_compliance_filter_applied);
103+
result.driving_direction_compliance.filter_applied);
102104

103-
result.human_traffic_light_compliance = human_metrics.traffic_light_compliance;
104-
result.human_traffic_light_compliance_available =
105+
result.traffic_light_compliance.human_reference = human_metrics.traffic_light_compliance;
106+
result.traffic_light_compliance.human_reference_available =
105107
human_metrics.traffic_light_compliance_available;
106-
result.filtered_traffic_light_compliance = apply_human_filter(
108+
result.traffic_light_compliance.filtered = apply_human_filter(
107109
agent_metrics.traffic_light_compliance, agent_metrics.traffic_light_compliance_available,
108110
human_metrics.traffic_light_compliance, human_metrics.traffic_light_compliance_available,
109-
result.traffic_light_compliance_filter_applied);
111+
result.traffic_light_compliance.filter_applied);
110112

111113
return result;
112114
}
@@ -126,17 +128,17 @@ SyntheticEpdmsMetrics calculate_synthetic_epdms(
126128
agent_metrics.lane_keeping_available &&
127129
agent_metrics.history_comfort_available &&
128130
agent_metrics.extended_comfort_available;
129-
result.raw_available = raw_multiplicative_available && raw_weighted_available;
130-
if (result.raw_available) {
131-
result.raw_multiplicative_metrics_prod =
131+
result.raw.available = raw_multiplicative_available && raw_weighted_available;
132+
if (result.raw.available) {
133+
result.raw.multiplicative_metrics_prod =
132134
agent_metrics.no_at_fault_collision * agent_metrics.drivable_area_compliance *
133135
agent_metrics.driving_direction_compliance * agent_metrics.traffic_light_compliance;
134-
result.raw_weighted_metrics =
136+
result.raw.weighted_metrics =
135137
(5.0 * agent_metrics.ego_progress + 5.0 * agent_metrics.time_to_collision_within_bound +
136138
2.0 * agent_metrics.lane_keeping + 2.0 * agent_metrics.history_comfort +
137139
2.0 * agent_metrics.extended_comfort) /
138140
kSyntheticWeightedDenominator;
139-
result.raw_epdms = result.raw_multiplicative_metrics_prod * result.raw_weighted_metrics;
141+
result.raw.epdms = result.raw.multiplicative_metrics_prod * result.raw.weighted_metrics;
140142
}
141143

142144
const bool human_filtered_multiplicative_available =
@@ -149,25 +151,25 @@ SyntheticEpdmsMetrics calculate_synthetic_epdms(
149151
agent_metrics.time_to_collision_within_bound_available &&
150152
agent_metrics.lane_keeping_available && agent_metrics.history_comfort_available &&
151153
agent_metrics.extended_comfort_available;
152-
result.human_filtered_available =
154+
result.human_filtered.available =
153155
human_filtered_multiplicative_available && human_filtered_weighted_available;
154-
if (result.human_filtered_available) {
155-
result.human_filtered_multiplicative_metrics_prod =
156-
human_filter_metrics.filtered_no_at_fault_collision *
157-
human_filter_metrics.filtered_drivable_area_compliance *
158-
human_filter_metrics.filtered_driving_direction_compliance *
159-
human_filter_metrics.filtered_traffic_light_compliance;
156+
if (result.human_filtered.available) {
157+
result.human_filtered.multiplicative_metrics_prod =
158+
human_filter_metrics.no_at_fault_collision.filtered *
159+
human_filter_metrics.drivable_area_compliance.filtered *
160+
human_filter_metrics.driving_direction_compliance.filtered *
161+
human_filter_metrics.traffic_light_compliance.filtered;
160162
const double filtered_ego_progress =
161-
human_filter_metrics.ego_progress_filter_applied ? 1.0 : agent_metrics.ego_progress;
162-
result.human_filtered_weighted_metrics =
163+
human_filter_metrics.ego_progress.filter_applied ? 1.0 : agent_metrics.ego_progress;
164+
result.human_filtered.weighted_metrics =
163165
(5.0 * filtered_ego_progress +
164-
5.0 * human_filter_metrics.filtered_time_to_collision_within_bound +
165-
2.0 * human_filter_metrics.filtered_lane_keeping +
166-
2.0 * human_filter_metrics.filtered_history_comfort +
167-
2.0 * human_filter_metrics.filtered_extended_comfort) /
166+
5.0 * human_filter_metrics.time_to_collision_within_bound.filtered +
167+
2.0 * human_filter_metrics.lane_keeping.filtered +
168+
2.0 * human_filter_metrics.history_comfort.filtered +
169+
2.0 * human_filter_metrics.extended_comfort.filtered) /
168170
kSyntheticWeightedDenominator;
169-
result.human_filtered_epdms =
170-
result.human_filtered_multiplicative_metrics_prod * result.human_filtered_weighted_metrics;
171+
result.human_filtered.epdms =
172+
result.human_filtered.multiplicative_metrics_prod * result.human_filtered.weighted_metrics;
171173
}
172174

173175
return result;

planning/autoware_planning_data_analyzer/src/metrics/epdms_aggregation.hpp

Lines changed: 27 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -52,63 +52,37 @@ struct EpdmsMetricSnapshot
5252

5353
struct HumanFilterMetrics
5454
{
55-
double human_history_comfort{0.0};
56-
bool human_history_comfort_available{false};
57-
double filtered_history_comfort{0.0};
58-
bool history_comfort_filter_applied{false};
59-
60-
double human_extended_comfort{0.0};
61-
bool human_extended_comfort_available{false};
62-
double filtered_extended_comfort{0.0};
63-
bool extended_comfort_filter_applied{false};
64-
65-
double human_ego_progress{0.0};
66-
bool human_ego_progress_available{false};
67-
double filtered_ego_progress{0.0};
68-
bool ego_progress_filter_applied{false};
69-
70-
double human_time_to_collision_within_bound{0.0};
71-
bool human_time_to_collision_within_bound_available{false};
72-
double filtered_time_to_collision_within_bound{0.0};
73-
bool time_to_collision_within_bound_filter_applied{false};
74-
75-
double human_lane_keeping{0.0};
76-
bool human_lane_keeping_available{false};
77-
double filtered_lane_keeping{0.0};
78-
bool lane_keeping_filter_applied{false};
79-
80-
double human_drivable_area_compliance{0.0};
81-
bool human_drivable_area_compliance_available{false};
82-
double filtered_drivable_area_compliance{0.0};
83-
bool drivable_area_compliance_filter_applied{false};
84-
85-
double human_no_at_fault_collision{0.0};
86-
bool human_no_at_fault_collision_available{false};
87-
double filtered_no_at_fault_collision{0.0};
88-
bool no_at_fault_collision_filter_applied{false};
89-
90-
double human_driving_direction_compliance{0.0};
91-
bool human_driving_direction_compliance_available{false};
92-
double filtered_driving_direction_compliance{0.0};
93-
bool driving_direction_compliance_filter_applied{false};
94-
95-
double human_traffic_light_compliance{0.0};
96-
bool human_traffic_light_compliance_available{false};
97-
double filtered_traffic_light_compliance{0.0};
98-
bool traffic_light_compliance_filter_applied{false};
55+
struct Metric
56+
{
57+
double human_reference{0.0};
58+
bool human_reference_available{false};
59+
double filtered{0.0};
60+
bool filter_applied{false};
61+
};
62+
63+
Metric history_comfort;
64+
Metric extended_comfort;
65+
Metric ego_progress;
66+
Metric time_to_collision_within_bound;
67+
Metric lane_keeping;
68+
Metric drivable_area_compliance;
69+
Metric no_at_fault_collision;
70+
Metric driving_direction_compliance;
71+
Metric traffic_light_compliance;
9972
};
10073

10174
struct SyntheticEpdmsMetrics
10275
{
103-
bool raw_available{false};
104-
double raw_multiplicative_metrics_prod{0.0};
105-
double raw_weighted_metrics{0.0};
106-
double raw_epdms{0.0};
107-
108-
bool human_filtered_available{false};
109-
double human_filtered_multiplicative_metrics_prod{0.0};
110-
double human_filtered_weighted_metrics{0.0};
111-
double human_filtered_epdms{0.0};
76+
struct Stage
77+
{
78+
bool available{false};
79+
double multiplicative_metrics_prod{0.0};
80+
double weighted_metrics{0.0};
81+
double epdms{0.0};
82+
};
83+
84+
Stage raw;
85+
Stage human_filtered;
11286
};
11387

11488
HumanFilterMetrics calculate_human_filter_metrics(

0 commit comments

Comments
 (0)