69 const auto& first_encountered_overlaps =
70 reference_line_info.FirstEncounteredOverlaps();
71 if (first_encountered_overlaps.empty()) {
75 for (
const auto& overlap : first_encountered_overlaps) {
84 if (traffic_sign_overlap ==
nullptr) {
87 const std::vector<hdmap::PathOverlap>& traffic_light_overlaps =
88 reference_line_info.reference_line().map_path().signal_overlaps();
89 const double start_check_distance =
91 const double adc_front_edge_s = reference_line_info.AdcSlBoundary().end_s();
94 std::vector<hdmap::PathOverlap> next_traffic_lights;
95 static constexpr double kTrafficLightGroupingMaxDist = 2.0;
96 for (
const auto& overlap : traffic_light_overlaps) {
97 const double dist = overlap.start_s - traffic_sign_overlap->
start_s;
98 if (fabs(dist) <= kTrafficLightGroupingMaxDist) {
99 next_traffic_lights.push_back(overlap);
102 bool traffic_light_scenario =
false;
104 for (
const auto& overlap : next_traffic_lights) {
105 const double adc_distance_to_traffic_light =
106 overlap.start_s - adc_front_edge_s;
107 ADEBUG <<
"traffic_light[" << overlap.object_id <<
"] start_s["
108 << overlap.start_s <<
"] adc_distance_to_traffic_light["
109 << adc_distance_to_traffic_light <<
"]";
112 if (adc_distance_to_traffic_light <= 0.0 ||
113 adc_distance_to_traffic_light > start_check_distance) {
117 const auto& signal_color = frame.
GetSignal(overlap.object_id).
color();
118 ADEBUG <<
"traffic_light_id[" << overlap.object_id <<
"] start_s["
119 << overlap.start_s <<
"] color[" << signal_color <<
"]";
123 traffic_light_scenario =
true;
127 if (!traffic_light_scenario) {
131 const auto& turn_type =
132 reference_line_info.GetPathTurnType(traffic_sign_overlap->
start_s);
137 for (
const auto& overlap : next_traffic_lights) {
154 std::string current_traffic_light_overlap_id;
155 const auto& overlaps = reference_line_info.FirstEncounteredOverlaps();
156 for (
auto overlap : overlaps) {
158 current_traffic_light_overlap_id = overlap.second.object_id;
163 if (current_traffic_light_overlap_id.empty()) {
165 ->mutable_planning_status()
166 ->mutable_traffic_light()
168 AERROR <<
"Can not find traffic light overlap in reference line!";
173 const std::vector<apollo::hdmap::PathOverlap>& traffic_light_overlaps =
174 reference_line_info.reference_line().map_path().signal_overlaps();
175 auto traffic_light_overlap_itr = std::find_if(
176 traffic_light_overlaps.begin(), traffic_light_overlaps.end(),
178 return overlap.object_id == current_traffic_light_overlap_id;
180 if (traffic_light_overlap_itr == traffic_light_overlaps.end()) {
182 ->mutable_planning_status()
183 ->mutable_traffic_light()
188 static constexpr double kTrafficLightGroupingMaxDist = 2.0;
189 const double current_traffic_light_overlap_start_s =
190 traffic_light_overlap_itr->start_s;
191 for (
const auto& traffic_light_overlap : traffic_light_overlaps) {
193 traffic_light_overlap.start_s - current_traffic_light_overlap_start_s;
194 if (fabs(dist) <= kTrafficLightGroupingMaxDist) {
196 ->mutable_planning_status()
197 ->mutable_traffic_light()
198 ->add_current_traffic_light_overlap_id(
199 traffic_light_overlap.object_id);
200 ADEBUG <<
"Update PlanningContext with first_encountered traffic_light["
201 << traffic_light_overlap.object_id <<
"] start_s["
202 << traffic_light_overlap.start_s <<
"]";
ScenarioTrafficLightUnprotectedLeftTurnConfig scenario_config
std::vector< std::string > current_traffic_light_overlap_ids