提交 74844e08 编写于 作者: J Jiaming Tao

planning: stop-sign/traffic-light scenario needs clear stop_done_overlap_id...

planning: stop-sign/traffic-light scenario needs clear stop_done_overlap_id after passing the overlap (3189)
上级 4dd4d335
...@@ -153,10 +153,15 @@ void ScenarioManager::Observe(const Frame& frame) { ...@@ -153,10 +153,15 @@ void ScenarioManager::Observe(const Frame& frame) {
min_start_s = stop_sign_overlap.start_s; min_start_s = stop_sign_overlap.start_s;
PlanningContext::GetScenarioInfo()->next_stop_sign_overlap = PlanningContext::GetScenarioInfo()->next_stop_sign_overlap =
stop_sign_overlap; stop_sign_overlap;
} else {
// clear stop_done_overlap_id if already passed
if (PlanningContext::GetScenarioInfo()->stop_done_overlap_id ==
stop_sign_overlap.object_id) {
PlanningContext::GetScenarioInfo()->stop_done_overlap_id = "";
}
} }
} }
ADEBUG ADEBUG << "Stop Sign: "
<< "Stop Sign: "
<< PlanningContext::GetScenarioInfo()->next_stop_sign_overlap.object_id; << PlanningContext::GetScenarioInfo()->next_stop_sign_overlap.object_id;
// find next traffic_light_overlap // find next traffic_light_overlap
...@@ -170,6 +175,12 @@ void ScenarioManager::Observe(const Frame& frame) { ...@@ -170,6 +175,12 @@ void ScenarioManager::Observe(const Frame& frame) {
min_start_s = traffic_light_overlap.start_s; min_start_s = traffic_light_overlap.start_s;
PlanningContext::GetScenarioInfo()->next_traffic_light_overlap = PlanningContext::GetScenarioInfo()->next_traffic_light_overlap =
traffic_light_overlap; traffic_light_overlap;
} else {
// clear stop_done_overlap_id if already passed
if (PlanningContext::GetScenarioInfo()->stop_done_overlap_id ==
traffic_light_overlap.object_id) {
PlanningContext::GetScenarioInfo()->stop_done_overlap_id = "";
}
} }
} }
ADEBUG << "Traffic Light: " ADEBUG << "Traffic Light: "
...@@ -189,8 +200,7 @@ void ScenarioManager::Observe(const Frame& frame) { ...@@ -189,8 +200,7 @@ void ScenarioManager::Observe(const Frame& frame) {
crosswalk_overlap; crosswalk_overlap;
} }
} }
ADEBUG ADEBUG << "Crosswalk: "
<< "Crosswalk: "
<< PlanningContext::GetScenarioInfo()->next_crosswalk_overlap.object_id; << PlanningContext::GetScenarioInfo()->next_crosswalk_overlap.object_id;
} }
......
...@@ -106,6 +106,11 @@ bool Stage::ExecuteTaskOnReferenceLine( ...@@ -106,6 +106,11 @@ bool Stage::ExecuteTaskOnReferenceLine(
return true; return true;
} }
Stage::StageStatus Stage::FinishScenario() {
next_stage_ = ScenarioConfig::NO_STAGE;
return Stage::FINISHED;
}
} // namespace scenario } // namespace scenario
} // namespace planning } // namespace planning
} // namespace apollo } // namespace apollo
...@@ -82,6 +82,8 @@ class Stage { ...@@ -82,6 +82,8 @@ class Stage {
bool ExecuteTaskOnReferenceLine( bool ExecuteTaskOnReferenceLine(
const common::TrajectoryPoint& planning_start_point, Frame* frame); const common::TrajectoryPoint& planning_start_point, Frame* frame);
virtual Stage::StageStatus FinishScenario();
std::map<TaskConfig::TaskType, std::unique_ptr<Task>> tasks_; std::map<TaskConfig::TaskType, std::unique_ptr<Task>> tasks_;
std::vector<Task*> task_list_; std::vector<Task*> task_list_;
ScenarioConfig::StageConfig config_; ScenarioConfig::StageConfig config_;
......
...@@ -69,8 +69,7 @@ Stage::StageStatus StageCreep::Process( ...@@ -69,8 +69,7 @@ Stage::StageStatus StageCreep::Process(
return overlap.object_id == stop_sign_overlap_id; return overlap.object_id == stop_sign_overlap_id;
}); });
if (stop_sign_overlap_it == stop_sign_overlaps.end()) { if (stop_sign_overlap_it == stop_sign_overlaps.end()) {
next_stage_ = ScenarioConfig::NO_STAGE; return FinishScenario();
return Stage::FINISHED;
} }
const double wait_time = const double wait_time =
......
...@@ -62,7 +62,7 @@ Stage::StageStatus StageIntersectionCruise::Process( ...@@ -62,7 +62,7 @@ Stage::StageStatus StageIntersectionCruise::Process(
return overlap.object_id == stop_sign_overlap_id; return overlap.object_id == stop_sign_overlap_id;
}); });
if (stop_sign_overlap_it == stop_sign_overlaps.end()) { if (stop_sign_overlap_it == stop_sign_overlaps.end()) {
return FinishStage(); return FinishScenario();
} }
// check pass intersection // check pass intersection
...@@ -77,8 +77,7 @@ Stage::StageStatus StageIntersectionCruise::Process( ...@@ -77,8 +77,7 @@ Stage::StageStatus StageIntersectionCruise::Process(
} }
Stage::StageStatus StageIntersectionCruise::FinishStage() { Stage::StageStatus StageIntersectionCruise::FinishStage() {
next_stage_ = ScenarioConfig::NO_STAGE; return FinishScenario();
return Stage::FINISHED;
} }
} // namespace stop_sign } // namespace stop_sign
......
...@@ -73,8 +73,7 @@ Stage::StageStatus StagePreStop::Process( ...@@ -73,8 +73,7 @@ Stage::StageStatus StagePreStop::Process(
return overlap.object_id == stop_sign_overlap_id; return overlap.object_id == stop_sign_overlap_id;
}); });
if (stop_sign_overlap_it == stop_sign_overlaps.end()) { if (stop_sign_overlap_it == stop_sign_overlaps.end()) {
next_stage_ = ScenarioConfig::NO_STAGE; return FinishScenario();
return Stage::FINISHED;
} }
const double adc_front_edge_s = reference_line_info.AdcSlBoundary().end_s(); const double adc_front_edge_s = reference_line_info.AdcSlBoundary().end_s();
......
...@@ -73,8 +73,7 @@ Stage::StageStatus StageStop::Process( ...@@ -73,8 +73,7 @@ Stage::StageStatus StageStop::Process(
return overlap.object_id == stop_sign_overlap_id; return overlap.object_id == stop_sign_overlap_id;
}); });
if (stop_sign_overlap_it == stop_sign_overlaps.end()) { if (stop_sign_overlap_it == stop_sign_overlaps.end()) {
next_stage_ = ScenarioConfig::NO_STAGE; return FinishScenario();
return Stage::FINISHED;
} }
const double adc_front_edge_s = reference_line_info.AdcSlBoundary().end_s(); const double adc_front_edge_s = reference_line_info.AdcSlBoundary().end_s();
...@@ -221,6 +220,14 @@ int StageStop::RemoveWatchVehicle( ...@@ -221,6 +220,14 @@ int StageStop::RemoveWatchVehicle(
return 0; return 0;
} }
Stage::StageStatus StageStop::FinishScenario() {
PlanningContext::GetScenarioInfo()->stop_done_overlap_id = "";
PlanningContext::GetScenarioInfo()->stop_sign_wait_for_obstacles.clear();
next_stage_ = ScenarioConfig::NO_STAGE;
return Stage::FINISHED;
}
Stage::StageStatus StageStop::FinishStage() { Stage::StageStatus StageStop::FinishStage() {
PlanningContext::GetScenarioInfo()->stop_done_overlap_id = PlanningContext::GetScenarioInfo()->stop_done_overlap_id =
GetContext()->stop_sign_id; GetContext()->stop_sign_id;
......
...@@ -53,6 +53,7 @@ class StageStop : public Stage { ...@@ -53,6 +53,7 @@ class StageStop : public Stage {
watch_vehicles); watch_vehicles);
private: private:
Stage::StageStatus FinishScenario() override;
Stage::StageStatus FinishStage(); Stage::StageStatus FinishStage();
private: private:
......
...@@ -62,7 +62,7 @@ Stage::StageStatus StageIntersectionCruise::Process( ...@@ -62,7 +62,7 @@ Stage::StageStatus StageIntersectionCruise::Process(
return overlap.object_id == traffic_light_overlap_id; return overlap.object_id == traffic_light_overlap_id;
}); });
if (traffic_light_overlap_it == traffic_light_overlaps.end()) { if (traffic_light_overlap_it == traffic_light_overlaps.end()) {
return FinishStage(); return FinishScenario();
} }
// check pass intersection // check pass intersection
...@@ -77,8 +77,7 @@ Stage::StageStatus StageIntersectionCruise::Process( ...@@ -77,8 +77,7 @@ Stage::StageStatus StageIntersectionCruise::Process(
} }
Stage::StageStatus StageIntersectionCruise::FinishStage() { Stage::StageStatus StageIntersectionCruise::FinishStage() {
next_stage_ = ScenarioConfig::NO_STAGE; return FinishScenario();
return Stage::FINISHED;
} }
} // namespace traffic_light } // namespace traffic_light
......
...@@ -66,8 +66,7 @@ Stage::StageStatus StageStop::Process( ...@@ -66,8 +66,7 @@ Stage::StageStatus StageStop::Process(
return overlap.object_id == traffic_light_id; return overlap.object_id == traffic_light_id;
}); });
if (traffic_light_overlap_it == traffic_light_overlaps.end()) { if (traffic_light_overlap_it == traffic_light_overlaps.end()) {
next_stage_ = ScenarioConfig::NO_STAGE; return FinishScenario();
return Stage::FINISHED;
} }
const double adc_front_edge_s = reference_line_info.AdcSlBoundary().end_s(); const double adc_front_edge_s = reference_line_info.AdcSlBoundary().end_s();
...@@ -89,6 +88,13 @@ Stage::StageStatus StageStop::Process( ...@@ -89,6 +88,13 @@ Stage::StageStatus StageStop::Process(
return Stage::RUNNING; return Stage::RUNNING;
} }
Stage::StageStatus StageStop::FinishScenario() {
PlanningContext::GetScenarioInfo()->stop_done_overlap_id = "";
next_stage_ = ScenarioConfig::NO_STAGE;
return Stage::FINISHED;
}
Stage::StageStatus StageStop::FinishStage() { Stage::StageStatus StageStop::FinishStage() {
PlanningContext::GetScenarioInfo()->stop_done_overlap_id = PlanningContext::GetScenarioInfo()->stop_done_overlap_id =
GetContext()->traffic_light_id; GetContext()->traffic_light_id;
......
...@@ -48,6 +48,7 @@ class StageStop : public Stage { ...@@ -48,6 +48,7 @@ class StageStop : public Stage {
} }
private: private:
Stage::StageStatus FinishScenario() override;
Stage::StageStatus FinishStage(); Stage::StageStatus FinishStage();
private: private:
......
...@@ -71,8 +71,7 @@ Stage::StageStatus StageCreep::Process( ...@@ -71,8 +71,7 @@ Stage::StageStatus StageCreep::Process(
return overlap.object_id == traffic_light_overlap_id; return overlap.object_id == traffic_light_overlap_id;
}); });
if (traffic_light_overlap_it == traffic_light_overlaps.end()) { if (traffic_light_overlap_it == traffic_light_overlaps.end()) {
next_stage_ = ScenarioConfig::NO_STAGE; return FinishScenario();
return Stage::FINISHED;
} }
// check on traffic light color // check on traffic light color
......
...@@ -62,7 +62,7 @@ Stage::StageStatus StageIntersectionCruise::Process( ...@@ -62,7 +62,7 @@ Stage::StageStatus StageIntersectionCruise::Process(
return overlap.object_id == traffic_light_overlap_id; return overlap.object_id == traffic_light_overlap_id;
}); });
if (traffic_light_overlap_it == traffic_light_overlaps.end()) { if (traffic_light_overlap_it == traffic_light_overlaps.end()) {
return FinishStage(); return FinishScenario();
} }
// check pass intersection // check pass intersection
...@@ -77,8 +77,7 @@ Stage::StageStatus StageIntersectionCruise::Process( ...@@ -77,8 +77,7 @@ Stage::StageStatus StageIntersectionCruise::Process(
} }
Stage::StageStatus StageIntersectionCruise::FinishStage() { Stage::StageStatus StageIntersectionCruise::FinishStage() {
next_stage_ = ScenarioConfig::NO_STAGE; return FinishScenario();
return Stage::FINISHED;
} }
} // namespace traffic_light } // namespace traffic_light
......
...@@ -66,8 +66,7 @@ Stage::StageStatus StageStop::Process( ...@@ -66,8 +66,7 @@ Stage::StageStatus StageStop::Process(
return overlap.object_id == traffic_light_id; return overlap.object_id == traffic_light_id;
}); });
if (traffic_light_overlap_it == traffic_light_overlaps.end()) { if (traffic_light_overlap_it == traffic_light_overlaps.end()) {
next_stage_ = ScenarioConfig::NO_STAGE; return FinishScenario();
return Stage::FINISHED;
} }
const double adc_front_edge_s = reference_line_info.AdcSlBoundary().end_s(); const double adc_front_edge_s = reference_line_info.AdcSlBoundary().end_s();
...@@ -100,6 +99,13 @@ Stage::StageStatus StageStop::Process( ...@@ -100,6 +99,13 @@ Stage::StageStatus StageStop::Process(
return Stage::RUNNING; return Stage::RUNNING;
} }
Stage::StageStatus StageStop::FinishScenario() {
PlanningContext::GetScenarioInfo()->stop_done_overlap_id = "";
next_stage_ = ScenarioConfig::NO_STAGE;
return Stage::FINISHED;
}
Stage::StageStatus StageStop::FinishStage() { Stage::StageStatus StageStop::FinishStage() {
PlanningContext::GetScenarioInfo()->stop_done_overlap_id = PlanningContext::GetScenarioInfo()->stop_done_overlap_id =
GetContext()->traffic_light_id; GetContext()->traffic_light_id;
......
...@@ -48,6 +48,7 @@ class StageStop : public Stage { ...@@ -48,6 +48,7 @@ class StageStop : public Stage {
} }
private: private:
Stage::StageStatus FinishScenario() override;
Stage::StageStatus FinishStage(); Stage::StageStatus FinishStage();
private: private:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册