66 const auto& first_encountered_overlaps =
67 reference_line_info.FirstEncounteredOverlaps();
69 for (
const auto& overlap : first_encountered_overlaps) {
78 if (yield_sign_overlap ==
nullptr) {
81 const double adc_front_edge_s = reference_line_info.AdcSlBoundary().
end_s();
82 const double adc_distance_to_yield_sign =
83 yield_sign_overlap->
start_s - adc_front_edge_s;
84 const bool yield_sign_scenario =
85 (adc_distance_to_yield_sign > 0.0 &&
86 adc_distance_to_yield_sign <=
88 return yield_sign_scenario;
102 std::string current_yield_sign_overlap_id;
103 const auto& overlaps = reference_line_info.FirstEncounteredOverlaps();
104 for (
auto overlap : overlaps) {
106 current_yield_sign_overlap_id = overlap.second.object_id;
111 if (current_yield_sign_overlap_id.empty()) {
113 ->mutable_planning_status()
114 ->mutable_yield_sign()
116 AERROR <<
"Can not find yield sign overlap in reference line!";
121 const std::vector<hdmap::PathOverlap>& yield_sign_overlaps =
122 reference_line_info.reference_line().map_path().yield_sign_overlaps();
123 auto yield_sign_overlap_itr = std::find_if(
124 yield_sign_overlaps.begin(), yield_sign_overlaps.end(),
126 return overlap.object_id == current_yield_sign_overlap_id;
128 if (yield_sign_overlap_itr == yield_sign_overlaps.end()) {
130 ->mutable_planning_status()
131 ->mutable_yield_sign()
133 AERROR <<
"Can not find yield sign overlap "
134 << current_yield_sign_overlap_id;
138 static constexpr double kTrafficLightGroupingMaxDist = 2.0;
139 const double current_yield_sign_overlap_start_s =
140 yield_sign_overlap_itr->start_s;
142 for (
const auto& yield_sign_overlap : yield_sign_overlaps) {
144 yield_sign_overlap.start_s - current_yield_sign_overlap_start_s;
145 if (fabs(dist) <= kTrafficLightGroupingMaxDist) {
147 ->mutable_planning_status()
148 ->mutable_yield_sign()
149 ->add_current_yield_sign_overlap_id(yield_sign_overlap.object_id);
150 ADEBUG <<
"Update PlanningContext with first_encountered yield_sign["
151 << yield_sign_overlap.object_id <<
"] start_s["
152 << yield_sign_overlap.start_s <<
"]";
154 yield_sign_overlap.object_id);
bool IsTransferable(const Scenario *const other_scenario, const Frame &frame) override
Each scenario should define its own transfer condition, i.e., when it should allow to transfer from o...
std::vector< std::string > current_yield_sign_overlap_ids
ScenarioYieldSignConfig scenario_config