@@ -515,7 +515,8 @@ ScenarioConfig::ScenarioType ScenarioManager::SelectTrafficLightScenario(
515515
516516 bool traffic_light_scenario = false ;
517517 bool red_light = false ;
518-
518+ bool left_turn_signal = false ;
519+ const auto hdmap_ptr = HDMapUtil::BaseMapPtr ();
519520 // note: need iterate all lights to check no RED/YELLOW/UNKNOWN
520521 for (const auto & traffic_light_overlap : next_traffic_lights) {
521522 const double adc_distance_to_traffic_light =
@@ -538,7 +539,15 @@ ScenarioConfig::ScenarioType ScenarioManager::SelectTrafficLightScenario(
538539 ADEBUG << " traffic_light_id[" << traffic_light_overlap.object_id
539540 << " ] start_s[" << traffic_light_overlap.start_s << " ] color["
540541 << signal_color << " ]" ;
541-
542+ apollo::hdmap::Id signal_id;
543+ signal_id.set_id (traffic_light_overlap.object_id );
544+ auto signal = hdmap_ptr->GetSignalById (signal_id)->signal ();
545+ for (auto subsignal : signal.subsignal ()) {
546+ if (subsignal.type () == apollo::hdmap::Subsignal::ARROW_LEFT) {
547+ left_turn_signal = true ;
548+ break ;
549+ }
550+ }
542551 if (signal_color != perception::TrafficLight::GREEN) {
543552 red_light = true ;
544553 break ;
@@ -565,7 +574,7 @@ ScenarioConfig::ScenarioType ScenarioManager::SelectTrafficLightScenario(
565574 scenario_config.start_traffic_light_scenario_distance ()) {
566575 traffic_light_unprotected_right_turn_scenario = true ;
567576 }
568- } else if (left_turn) {
577+ } else if (left_turn && !left_turn_signal ) {
569578 // check TRAFFIC_LIGHT_UNPROTECTED_LEFT_TURN
570579 const auto & scenario_config =
571580 config_map_[ScenarioConfig::TRAFFIC_LIGHT_UNPROTECTED_LEFT_TURN]
0 commit comments