diff --git a/modules/prediction/evaluator/evaluator_manager.cc b/modules/prediction/evaluator/evaluator_manager.cc index 8ea902d94adef4154636d3280934e9f4bc06a9c3..6cb7843e89e482ea18009a177f38626fb7ba71c9 100644 --- a/modules/prediction/evaluator/evaluator_manager.cc +++ b/modules/prediction/evaluator/evaluator_manager.cc @@ -238,35 +238,40 @@ void EvaluatorManager::EvaluateObstacle(Obstacle* obstacle, // Select different evaluators depending on the obstacle's type. switch (obstacle->type()) { case PerceptionObstacle::VEHICLE: { - if (obstacle->HasJunctionFeatureWithExits() && - !obstacle->IsCloseToJunctionExit()) { - if (obstacle->latest_feature().priority().priority() == - ObstaclePriority::CAUTION) { + if (obstacle->latest_feature().priority().priority() == + ObstaclePriority::CAUTION) { + if (obstacle->IsNearJunction()) { evaluator = GetEvaluator(vehicle_in_junction_caution_evaluator_); - CHECK_NOTNULL(evaluator); - if (evaluator->Evaluate(obstacle, obstacles_container)) { - break; - } - } - evaluator = GetEvaluator(vehicle_in_junction_evaluator_); - CHECK_NOTNULL(evaluator); - evaluator->Evaluate(obstacle, obstacles_container); - } else if (obstacle->IsOnLane()) { - if (obstacle->latest_feature().priority().priority() == - ObstaclePriority::CAUTION) { + } else if (obstacle->IsOnLane()) { evaluator = GetEvaluator(vehicle_on_lane_caution_evaluator_); } else { - evaluator = GetEvaluator(vehicle_on_lane_evaluator_); + evaluator = GetEvaluator(vehicle_default_caution_evaluator_); } CHECK_NOTNULL(evaluator); - if (evaluator->GetName() == "LANE_SCANNING_EVALUATOR") { - evaluator->Evaluate(obstacle, obstacles_container, dynamic_env); + // Evaluate and break if success + if (evaluator->Evaluate(obstacle, obstacles_container)) { + break; } else { - evaluator->Evaluate(obstacle, obstacles_container); + AERROR << "Obstacle: " << obstacle->id() + << " caution evaluator failed, downgrade to normal level!"; } + } + // if obstacle is not caution or caution_evaluator run failed + if (obstacle->HasJunctionFeatureWithExits() && + !obstacle->IsCloseToJunctionExit()) { + evaluator = GetEvaluator(vehicle_in_junction_evaluator_); + } else if (obstacle->IsOnLane()) { + evaluator = GetEvaluator(vehicle_on_lane_evaluator_); } else { ADEBUG << "Obstacle: " << obstacle->id() << " is neither on lane, nor in junction. Skip evaluating."; + break; + } + CHECK_NOTNULL(evaluator); + if (evaluator->GetName() == "LANE_SCANNING_EVALUATOR") { + evaluator->Evaluate(obstacle, obstacles_container, dynamic_env); + } else { + evaluator->Evaluate(obstacle, obstacles_container); } break; } diff --git a/modules/prediction/evaluator/evaluator_manager.h b/modules/prediction/evaluator/evaluator_manager.h index f338444681273c0e7cb8c4d1f4514846fea319e9..f6deadfa9d42ae1ce16d9b670aa4e487e7d12591 100644 --- a/modules/prediction/evaluator/evaluator_manager.h +++ b/modules/prediction/evaluator/evaluator_manager.h @@ -108,6 +108,9 @@ class EvaluatorManager { ObstacleConf::EvaluatorType vehicle_in_junction_caution_evaluator_ = ObstacleConf::JUNCTION_MAP_EVALUATOR; + ObstacleConf::EvaluatorType vehicle_default_caution_evaluator_ = + ObstacleConf::SEMANTIC_LSTM_EVALUATOR; + ObstacleConf::EvaluatorType cyclist_on_lane_evaluator_ = ObstacleConf::CYCLIST_KEEP_LANE_EVALUATOR;