50 CHECK_NOTNULL(reference_line_info);
54 const std::vector<PathOverlap>& keep_clear_overlaps =
56 for (
const auto& keep_clear_overlap : keep_clear_overlaps) {
57 const auto obstacle_id =
58 KEEP_CLEAR_VO_ID_PREFIX + keep_clear_overlap.object_id;
60 if (BuildKeepClearObstacle(frame, reference_line_info, obstacle_id,
61 keep_clear_overlap.start_s,
62 keep_clear_overlap.end_s)) {
63 ADEBUG <<
"KEEP_CLAER for keep_clear_zone["
64 << keep_clear_overlap.object_id <<
"] s["
65 << keep_clear_overlap.start_s <<
", " << keep_clear_overlap.end_s
78 const auto& first_encountered_overlaps =
80 for (
const auto& overlap : first_encountered_overlaps) {
81 ADEBUG << overlap.first <<
", " << overlap.second.DebugString();
82 switch (overlap.first) {
84 ADEBUG <<
"CROSSWALK[" << overlap.second.object_id <<
"] s["
85 << overlap.second.start_s <<
", " << overlap.second.end_s
87 crosswalk_overlap =
const_cast<PathOverlap*
>(&overlap.second);
91 << overlap.second.start_s <<
", " << overlap.second.end_s
93 stop_sign_overlap =
const_cast<PathOverlap*
>(&overlap.second);
97 << overlap.second.start_s <<
", " << overlap.second.end_s
99 traffic_light_overlap =
const_cast<PathOverlap*
>(&overlap.second);
103 << overlap.second.start_s <<
", " << overlap.second.end_s
105 pnc_junction_overlap =
const_cast<PathOverlap*
>(&overlap.second);
112 if (pnc_junction_overlap !=
nullptr) {
113 const double adc_front_edge_s =
115 if (!IsCreeping(pnc_junction_overlap->
start_s, adc_front_edge_s)) {
118 double pnc_junction_start_s = pnc_junction_overlap->
start_s;
120 if (traffic_light_overlap !=
nullptr &&
121 std::fabs(pnc_junction_start_s - traffic_light_overlap->
start_s) <=
123 ADEBUG <<
"adjust pnc_junction_start_s[" << pnc_junction_start_s
124 <<
"] to traffic_light_start_s"
125 << traffic_light_overlap->
start_s <<
"]";
126 pnc_junction_start_s = traffic_light_overlap->
start_s;
127 }
else if (stop_sign_overlap !=
nullptr &&
128 std::fabs(pnc_junction_start_s -
131 ADEBUG <<
"adjust pnc_junction_start_s[" << pnc_junction_start_s
132 <<
"] to stop_sign_start_s" << stop_sign_overlap->
start_s
134 pnc_junction_start_s = stop_sign_overlap->
start_s;
135 }
else if (crosswalk_overlap !=
nullptr &&
136 std::fabs(pnc_junction_start_s -
139 ADEBUG <<
"adjust pnc_junction_start_s[" << pnc_junction_start_s
140 <<
"] to cross_walk_start_s" << crosswalk_overlap->
start_s
142 pnc_junction_start_s = crosswalk_overlap->
start_s;
145 const auto obstacle_id =
146 KEEP_CLEAR_JUNCTION_VO_ID_PREFIX + pnc_junction_overlap->
object_id;
148 if (BuildKeepClearObstacle(frame, reference_line_info, obstacle_id,
149 pnc_junction_start_s,
150 pnc_junction_overlap->
end_s)) {
151 ADEBUG <<
"KEEP_CLAER for junction["
152 << pnc_junction_overlap->
object_id <<
"] s["
153 << pnc_junction_start_s <<
", " << pnc_junction_overlap->
end_s