Skip to content

Commit

Permalink
feat(behavior_path_planner): add processOnEntry in start_planner (aut…
Browse files Browse the repository at this point in the history
…owarefoundation#4953)

* add process on entry in start_planner

Signed-off-by: kyoichi-sugahara <kyoichi.sugahara@tier4.jp>

* delete description

Signed-off-by: kyoichi-sugahara <kyoichi.sugahara@tier4.jp>

---------

Signed-off-by: kyoichi-sugahara <kyoichi.sugahara@tier4.jp>
  • Loading branch information
kyoichi-sugahara committed Sep 19, 2023
1 parent 9437f57 commit b81b10c
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -81,12 +81,12 @@ struct PullOverStatus
size_t current_path_idx{0};
bool require_increment_{true}; // if false, keep current path idx.
std::shared_ptr<PathWithLaneId> prev_stop_path{nullptr};
lanelet::ConstLanelets current_lanes{};
lanelet::ConstLanelets pull_over_lanes{};
std::vector<DrivableLanes> lanes{}; // current + pull_over
bool has_decided_path{false};
bool is_safe_static_objects{false}; // current path is safe against static objects
bool is_safe_dynamic_objects{false}; // current path is safe against dynamic objects
lanelet::ConstLanelets current_lanes{}; // TODO(someone): explain
lanelet::ConstLanelets pull_over_lanes{}; // TODO(someone): explain
std::vector<DrivableLanes> lanes{}; // current + pull_over
bool has_decided_path{false}; // if true, the path is decided and safe against static objects
bool is_safe_static_objects{false}; // current path is safe against *static* objects
bool is_safe_dynamic_objects{false}; // current path is safe against *dynamic* objects
bool prev_is_safe{false};
bool has_decided_velocity{false};
bool has_requested_approval{false};
Expand Down Expand Up @@ -286,6 +286,7 @@ class GoalPlannerModule : public SceneModuleInterface
std::pair<double, double> calcDistanceToPathChange() const;

// safety check
void initializeSafetyCheckParameters();
SafetyCheckParams createSafetyCheckParams() const;
void updateSafetyCheckTargetObjectsData(
const PredictedObjects & filtered_objects, const TargetObjectsOnLane & target_objects_on_lane,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ class StartPlannerModule : public SceneModuleInterface
BehaviorModuleOutput plan() override;
BehaviorModuleOutput planWaitingApproval() override;
CandidateOutput planCandidate() const override;
void processOnEntry() override;
void processOnExit() override;

void setParameters(const std::shared_ptr<StartPlannerParameters> & parameters)
Expand All @@ -116,6 +117,9 @@ class StartPlannerModule : public SceneModuleInterface
bool isFreespacePlanning() const { return status_.planner_type == PlannerType::FREESPACE; }

private:

void initializeSafetyCheckParameters();

std::shared_ptr<StartPlannerParameters> parameters_;
mutable std::shared_ptr<EgoPredictedPathParams> ego_predicted_path_params_;
mutable std::shared_ptr<ObjectsFilteringParams> objects_filtering_params_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,15 @@ void GoalPlannerModule::initializeOccupancyGridMap()
occupancy_grid_map_->setParam(occupancy_grid_map_param);
}

void GoalPlannerModule::initializeSafetyCheckParameters()
{
utils::start_goal_planner_common::updateEgoPredictedPathParams(
ego_predicted_path_params_, parameters_);
utils::start_goal_planner_common::updateSafetyCheckParams(safety_check_params_, parameters_);
utils::start_goal_planner_common::updateObjectsFilteringParams(
objects_filtering_params_, parameters_);
}

void GoalPlannerModule::processOnEntry()
{
// Initialize occupancy grid map
Expand All @@ -261,6 +270,10 @@ void GoalPlannerModule::processOnEntry()
parameters_->use_occupancy_grid_for_path_collision_check) {
initializeOccupancyGridMap();
}
// Initialize safety checker
if (parameters_->safety_check_params.enable_safety_check) {
initializeSafetyCheckParameters();
}
}

void GoalPlannerModule::processOnExit()
Expand Down Expand Up @@ -357,11 +370,6 @@ bool GoalPlannerModule::isExecutionReady() const
}

if (status_.is_safe_static_objects && parameters_->safety_check_params.enable_safety_check) {
utils::start_goal_planner_common::updateEgoPredictedPathParams(
ego_predicted_path_params_, parameters_);
utils::start_goal_planner_common::updateSafetyCheckParams(safety_check_params_, parameters_);
utils::start_goal_planner_common::updateObjectsFilteringParams(
objects_filtering_params_, parameters_);
if (!isSafePath()) {
RCLCPP_ERROR_THROTTLE(getLogger(), *clock_, 5000, "Path is not safe against dynamic objects");
return false;
Expand Down Expand Up @@ -690,7 +698,6 @@ void GoalPlannerModule::setStopPath(BehaviorModuleOutput & output)
if (status_.prev_is_safe || status_.prev_stop_path == nullptr) {
// safe -> not_safe or no prev_stop_path: generate new stop_path
output.path = std::make_shared<PathWithLaneId>(generateStopPath());
output.reference_path = getPreviousModuleOutput().reference_path;
status_.prev_stop_path = output.path;
// set stop path as pull over path
mutex_.lock();
Expand All @@ -705,10 +712,10 @@ void GoalPlannerModule::setStopPath(BehaviorModuleOutput & output)
} else {
// not_safe -> not_safe: use previous stop path
output.path = status_.prev_stop_path;
output.reference_path = getPreviousModuleOutput().reference_path;
RCLCPP_WARN_THROTTLE(
getLogger(), *clock_, 5000, "Not found safe pull_over path, use previous stop path");
}
output.reference_path = getPreviousModuleOutput().reference_path;
}

void GoalPlannerModule::setDrivableAreaInfo(BehaviorModuleOutput & output) const
Expand Down Expand Up @@ -1095,6 +1102,10 @@ bool GoalPlannerModule::incrementPathIndex()

PathWithLaneId GoalPlannerModule::getCurrentPath() const
{
if (status_.pull_over_path == nullptr) {
return PathWithLaneId{};
}

if (status_.pull_over_path->partial_paths.size() <= status_.current_path_idx) {
return PathWithLaneId{};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,14 @@ BehaviorModuleOutput StartPlannerModule::run()
return plan();
}

void StartPlannerModule::processOnEntry()
{
// Initialize safety checker
if (parameters_->safety_check_params.enable_safety_check) {
initializeSafetyCheckParameters();
}
}

void StartPlannerModule::processOnExit()
{
resetPathCandidate();
Expand Down Expand Up @@ -146,11 +154,6 @@ bool StartPlannerModule::isExecutionReady() const
}

if (status_.is_safe_static_objects && parameters_->safety_check_params.enable_safety_check) {
utils::start_goal_planner_common::updateEgoPredictedPathParams(
ego_predicted_path_params_, parameters_);
utils::start_goal_planner_common::updateSafetyCheckParams(safety_check_params_, parameters_);
utils::start_goal_planner_common::updateObjectsFilteringParams(
objects_filtering_params_, parameters_);
if (!isSafePath()) {
RCLCPP_ERROR_THROTTLE(getLogger(), *clock_, 5000, "Path is not safe against dynamic objects");
return false;
Expand Down Expand Up @@ -269,6 +272,15 @@ CandidateOutput StartPlannerModule::planCandidate() const
return CandidateOutput{};
}

void StartPlannerModule::initializeSafetyCheckParameters()
{
utils::start_goal_planner_common::updateEgoPredictedPathParams(
ego_predicted_path_params_, parameters_);
utils::start_goal_planner_common::updateSafetyCheckParams(safety_check_params_, parameters_);
utils::start_goal_planner_common::updateObjectsFilteringParams(
objects_filtering_params_, parameters_);
}

PathWithLaneId StartPlannerModule::getFullPath() const
{
// combine partial pull out path
Expand Down

0 comments on commit b81b10c

Please sign in to comment.