44 CHECK_NOTNULL(reference_line_info);
46 double overlap_end_s = 0.0;
47 std::string current_overlap_id;
48 bool is_get_overlap_info = GetOverlapStopInfo(
49 frame, reference_line_info, &overlap_end_s, ¤t_overlap_id);
51 if (is_get_overlap_info) {
52 std::string virtual_obstacle_id = CREEP_VO_ID_PREFIX_ + current_overlap_id;
53 const double creep_stop_s =
54 GetCreepTargetS(overlap_end_s, *frame, *reference_line_info);
55 const std::vector<std::string> wait_for_obstacles;
57 StopReasonCode::STOP_REASON_CREEPER,
58 wait_for_obstacles,
"CreepDecider", frame,
81 const double traffic_sign_overlap_end_s,
const double wait_time_sec,
82 const double timeout_sec) {
83 const auto& creep_config = GetCreepStageConfig();
84 bool creep_done =
false;
86 GetCreepFinishS(traffic_sign_overlap_end_s, frame, reference_line_info);
88 const double distance =
90 if (distance < 0.0 || wait_time_sec >= timeout_sec) {
91 bool all_far_away =
true;
94 if (obstacle->IsVirtual() || obstacle->IsStatic()) {
97 if (obstacle->reference_line_st_boundary().min_t() <
98 creep_config.min_boundary_t()) {
99 const double kepsilon = 1e-6;
100 double obstacle_traveled_s =
101 obstacle->reference_line_st_boundary().bottom_left_point().s() -
102 obstacle->reference_line_st_boundary().bottom_right_point().s();
103 ADEBUG <<
"obstacle[" << obstacle->Id() <<
"] obstacle_st_min_t["
104 << obstacle->reference_line_st_boundary().min_t()
105 <<
"] obstacle_st_min_s["
106 << obstacle->reference_line_st_boundary().min_s()
107 <<
"] obstacle_traveled_s[" << obstacle_traveled_s <<
"]";
111 if (obstacle_traveled_s < kepsilon &&
112 obstacle->reference_line_st_boundary().min_t() <
113 creep_config.ignore_max_st_min_t() &&
114 obstacle->reference_line_st_boundary().min_s() >
115 creep_config.ignore_min_st_min_s()) {
118 all_far_away =
false;
122 auto* creep_decider_status =
injector_->planning_context()
123 ->mutable_planning_status()
124 ->mutable_creep_decider();
125 int creep_clear_counter = creep_decider_status->creep_clear_counter();
126 creep_clear_counter = all_far_away ? creep_clear_counter + 1 : 0;
127 if (creep_clear_counter >= 5) {
128 creep_clear_counter = 0;
132 creep_decider_status->set_creep_clear_counter(creep_clear_counter);
int BuildStopDecision(const std::string &stop_wall_id, const double stop_line_s, const double stop_distance, const StopReasonCode &stop_reason_code, const std::vector< std::string > &wait_for_obstacles, const std::string &decision_tag, Frame *const frame, ReferenceLineInfo *const reference_line_info, double stop_wall_width)