29 const double stop_distance,
30 const StopReasonCode& stop_reason_code,
31 const std::vector<std::string>& wait_for_obstacles,
32 const std::string& decision_tag,
Frame*
const frame,
34 double stop_wall_width) {
36 CHECK_NOTNULL(reference_line_info);
39 const auto& reference_line = reference_line_info->
reference_line();
40 if (!WithinBound(0.0, reference_line.Length(), stop_line_s)) {
41 AERROR <<
"stop_line_s[" << stop_line_s <<
"] is not on reference line";
46 const auto* obstacle =
48 stop_line_s, stop_wall_width);
50 AERROR <<
"Failed to create obstacle [" << stop_wall_id <<
"]";
55 AERROR <<
"Failed to add obstacle[" << stop_wall_id <<
"]";
60 const double stop_s = stop_line_s - stop_distance;
61 const auto& stop_point = reference_line.GetReferencePoint(stop_s);
62 const double stop_heading =
63 reference_line.GetReferencePoint(stop_s).heading();
65 ObjectDecisionType stop;
66 auto* stop_decision = stop.mutable_stop();
67 stop_decision->set_reason_code(stop_reason_code);
68 stop_decision->set_distance_s(-stop_distance);
69 stop_decision->set_stop_heading(stop_heading);
70 stop_decision->mutable_stop_point()->set_x(stop_point.x());
71 stop_decision->mutable_stop_point()->set_y(stop_point.y());
72 stop_decision->mutable_stop_point()->set_z(0.0);
74 for (
size_t i = 0; i < wait_for_obstacles.size(); ++i) {
75 stop_decision->add_wait_for_obstacle(wait_for_obstacles[i]);
85 const std::string& lane_id,
const double lane_s,
86 const double stop_distance,
87 const StopReasonCode& stop_reason_code,
88 const std::vector<std::string>& wait_for_obstacles,
89 const std::string& decision_tag,
Frame*
const frame,
92 CHECK_NOTNULL(reference_line_info);
94 const auto& reference_line = reference_line_info->
reference_line();
97 const auto* obstacle =
100 AERROR <<
"Failed to create obstacle [" << stop_wall_id <<
"]";
106 AERROR <<
"Failed to create obstacle for: " << stop_wall_id;
111 if (!reference_line.IsOnLane(stop_wall_box.center())) {
112 ADEBUG <<
"stop point is not on lane. SKIP STOP decision";
117 auto stop_point = reference_line.GetReferencePoint(
120 ObjectDecisionType stop;
121 auto* stop_decision = stop.mutable_stop();
122 stop_decision->set_reason_code(stop_reason_code);
123 stop_decision->set_distance_s(-stop_distance);
124 stop_decision->set_stop_heading(stop_point.heading());
125 stop_decision->mutable_stop_point()->set_x(stop_point.x());
126 stop_decision->mutable_stop_point()->set_y(stop_point.y());
127 stop_decision->mutable_stop_point()->set_z(0.0);