Skip to content

Commit 08b007c

Browse files
authored
feat(goal_planner): replace LastApprovalData with the time changed to DECIDED (#10066)
Signed-off-by: Mamoru Sobue <mamoru.sobue@tier4.jp>
1 parent 421d9ec commit 08b007c

File tree

2 files changed

+20
-28
lines changed

2 files changed

+20
-28
lines changed

planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/goal_planner_module.hpp

+1-9
Original file line numberDiff line numberDiff line change
@@ -73,14 +73,6 @@ struct GoalPlannerDebugData
7373
utils::path_safety_checker::CollisionCheckDebugMap collision_check{};
7474
};
7575

76-
struct LastApprovalData
77-
{
78-
LastApprovalData(rclcpp::Time time, Pose pose) : time(time), pose(pose) {}
79-
80-
rclcpp::Time time{};
81-
Pose pose{};
82-
};
83-
8476
struct PullOverContextData
8577
{
8678
PullOverContextData() = delete;
@@ -352,7 +344,7 @@ class GoalPlannerModule : public SceneModuleInterface
352344
std::optional<PullOverContextData> context_data_{std::nullopt};
353345
// path_decision_controller is updated in updateData(), and used in plan()
354346
PathDecisionStateController path_decision_controller_{getLogger()};
355-
std::unique_ptr<LastApprovalData> last_approval_data_{nullptr};
347+
std::optional<rclcpp::Time> decided_time_{};
356348

357349
// approximate distance from the start point to the end point of pull_over.
358350
// this is used as an assumed value to decelerate, etc., before generating the actual path.

planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/goal_planner_module.cpp

+19-19
Original file line numberDiff line numberDiff line change
@@ -778,30 +778,38 @@ void GoalPlannerModule::updateData()
778778
pull_over_path_recv, clock_->now(), static_target_objects, dynamic_target_objects,
779779
planner_data_, occupancy_grid_map_, is_current_safe, parameters_, goal_searcher,
780780
debug_data_.ego_polygons_expanded);
781+
const auto new_decision_state = path_decision_controller_.get_current_state();
781782

782783
auto [lane_parking_response, freespace_parking_response] = syncWithThreads();
784+
785+
// NOTE: currently occupancy_grid_map_ must be used after syncWithThreads
786+
goal_searcher.update(goal_candidates_, occupancy_grid_map_, planner_data_, static_target_objects);
787+
783788
if (context_data_) {
784789
context_data_.value().update(
785-
path_decision_controller_.get_current_state().is_stable_safe, static_target_objects,
786-
dynamic_target_objects, prev_decision_state,
790+
new_decision_state.is_stable_safe, static_target_objects, dynamic_target_objects,
791+
prev_decision_state,
787792
isStopped(
788793
odometry_buffer_stopped_, planner_data_->self_odometry, parameters_.th_stopped_time,
789794
parameters_.th_stopped_velocity),
790795
std::move(lane_parking_response), std::move(freespace_parking_response));
791796
} else {
792797
context_data_.emplace(
793-
path_decision_controller_.get_current_state().is_stable_safe, static_target_objects,
794-
dynamic_target_objects, prev_decision_state,
798+
new_decision_state.is_stable_safe, static_target_objects, dynamic_target_objects,
799+
prev_decision_state,
795800
isStopped(
796801
odometry_buffer_stopped_, planner_data_->self_odometry, parameters_.th_stopped_time,
797802
parameters_.th_stopped_velocity),
798803
std::move(lane_parking_response), std::move(freespace_parking_response));
799804
}
800-
const auto & ctx_data = context_data_.value();
801-
goal_searcher.update(
802-
goal_candidates_, occupancy_grid_map_, planner_data_, ctx_data.static_target_objects);
803805
auto & ctx_data_mut = context_data_.value();
804806

807+
if (!decided_time_ && new_decision_state.state == PathDecisionState::DecisionKind::DECIDED) {
808+
decided_time_ = clock_->now();
809+
// TODO(soblin): do not "plan" in updateData
810+
if (ctx_data_mut.pull_over_path_opt) decideVelocity(ctx_data_mut.pull_over_path_opt.value());
811+
}
812+
805813
if (!isActivated()) {
806814
return;
807815
}
@@ -814,13 +822,6 @@ void GoalPlannerModule::updateData()
814822
}
815823
}
816824
}
817-
818-
if (!last_approval_data_) {
819-
last_approval_data_ =
820-
std::make_unique<LastApprovalData>(clock_->now(), planner_data_->self_odometry->pose.pose);
821-
// TODO(soblin): do not "plan" in updateData
822-
if (ctx_data_mut.pull_over_path_opt) decideVelocity(ctx_data_mut.pull_over_path_opt.value());
823-
}
824825
}
825826

826827
void GoalPlannerModule::processOnExit()
@@ -829,7 +830,6 @@ void GoalPlannerModule::processOnExit()
829830
resetPathReference();
830831
debug_marker_.markers.clear();
831832
context_data_ = std::nullopt;
832-
last_approval_data_.reset();
833833
}
834834

835835
bool GoalPlannerModule::isExecutionRequested() const
@@ -1850,7 +1850,7 @@ bool GoalPlannerModule::hasFinishedCurrentPath(const PullOverContextData & ctx_d
18501850
{
18511851
universe_utils::ScopedTimeTrack st(__func__, *time_keeper_);
18521852

1853-
if (!last_approval_data_) {
1853+
if (!decided_time_) {
18541854
return false;
18551855
}
18561856

@@ -1860,10 +1860,10 @@ bool GoalPlannerModule::hasFinishedCurrentPath(const PullOverContextData & ctx_d
18601860

18611861
// check if enough time has passed since last approval
18621862
// this is necessary to give turn signal for enough time
1863-
const bool has_passed_enough_time_from_approval =
1864-
(clock_->now() - last_approval_data_->time).seconds() >
1863+
const bool has_passed_enough_time_from_decided =
1864+
(clock_->now() - decided_time_.value()).seconds() >
18651865
planner_data_->parameters.turn_signal_search_time;
1866-
if (!has_passed_enough_time_from_approval) {
1866+
if (!has_passed_enough_time_from_decided) {
18671867
return false;
18681868
}
18691869

0 commit comments

Comments
 (0)