Skip to content

Commit 36209bb

Browse files
authored
Merge pull request #1805 from tier4/cherry-pick/goal-planner
feat(goal_planner): cherry pick several fixes
2 parents f6dd2bd + 4eef2c7 commit 36209bb

File tree

12 files changed

+246
-280
lines changed

12 files changed

+246
-280
lines changed

planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md

-1
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,6 @@ In addition, the safety check has a time hysteresis, and if the path is judged "
384384

385385
| Name | Unit | Type | Description | Default value |
386386
| :----------------------------------- | :---- | :----- | :------------------------------------------------------------------------------------------------------- | :--------------------------- |
387-
| enable_safety_check | [-] | bool | flag whether to use safety check | true |
388387
| method | [-] | string | method for safety check. `RSS` or `integral_predicted_polygon` | `integral_predicted_polygon` |
389388
| keep_unsafe_time | [s] | double | safety check Hysteresis time. if the path is judged "safe" for the time it is finally treated as "safe". | 3.0 |
390389
| check_all_predicted_path | - | bool | Flag to check all predicted paths | true |

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

+5-9
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#ifndef AUTOWARE__BEHAVIOR_PATH_GOAL_PLANNER_MODULE__DECISION_STATE_HPP_
1616
#define AUTOWARE__BEHAVIOR_PATH_GOAL_PLANNER_MODULE__DECISION_STATE_HPP_
1717

18-
#include "autoware/behavior_path_goal_planner_module/goal_searcher_base.hpp"
18+
#include "autoware/behavior_path_goal_planner_module/goal_searcher.hpp"
1919
#include "autoware/behavior_path_goal_planner_module/pull_over_planner/pull_over_planner_base.hpp"
2020
#include "autoware/behavior_path_planner_common/utils/occupancy_grid_based_collision_detector/occupancy_grid_based_collision_detector.hpp"
2121

@@ -49,15 +49,13 @@ class PathDecisionStateController
4949
* @brief update current state and save old current state to prev state
5050
*/
5151
void transit_state(
52-
const bool found_pull_over_path, const rclcpp::Time & now,
52+
const std::optional<PullOverPath> & pull_over_path_opt, const rclcpp::Time & now,
5353
const autoware_perception_msgs::msg::PredictedObjects & static_target_objects,
5454
const autoware_perception_msgs::msg::PredictedObjects & dynamic_target_objects,
55-
const std::optional<GoalCandidate> modified_goal_opt,
5655
const std::shared_ptr<const PlannerData> planner_data,
5756
const std::shared_ptr<OccupancyGridBasedCollisionDetector> occupancy_grid_map,
5857
const bool is_current_safe, const GoalPlannerParameters & parameters,
59-
const std::shared_ptr<GoalSearcherBase> goal_searcher, const bool is_activated,
60-
const std::optional<PullOverPath> & pull_over_path,
58+
const GoalSearcher & goal_searcher,
6159
std::vector<autoware::universe_utils::Polygon2d> & ego_polygons_expanded);
6260

6361
PathDecisionState get_current_state() const { return current_state_; }
@@ -71,14 +69,12 @@ class PathDecisionStateController
7169
* @brief update current state and save old current state to prev state
7270
*/
7371
PathDecisionState get_next_state(
74-
const bool found_pull_over_path, const rclcpp::Time & now,
72+
const std::optional<PullOverPath> & pull_over_path_opt, const rclcpp::Time & now,
7573
const PredictedObjects & static_target_objects, const PredictedObjects & dynamic_target_objects,
76-
const std::optional<GoalCandidate> modified_goal_opt,
7774
const std::shared_ptr<const PlannerData> planner_data,
7875
const std::shared_ptr<OccupancyGridBasedCollisionDetector> occupancy_grid_map,
7976
const bool is_current_safe, const GoalPlannerParameters & parameters,
80-
const std::shared_ptr<GoalSearcherBase> goal_searcher, const bool is_activated,
81-
const std::optional<PullOverPath> & pull_over_path_opt,
77+
const GoalSearcher & goal_searcher,
8278
std::vector<autoware::universe_utils::Polygon2d> & ego_polygons_expanded) const;
8379
};
8480

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Copyright 2025 TIER IV, Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
#ifndef AUTOWARE__BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_CANDIDATE_HPP_
16+
#define AUTOWARE__BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_CANDIDATE_HPP_
17+
18+
#include <geometry_msgs/msg/pose.hpp>
19+
20+
#include <vector>
21+
22+
namespace autoware::behavior_path_planner
23+
{
24+
struct GoalCandidate
25+
{
26+
geometry_msgs::msg::Pose goal_pose{};
27+
double distance_from_original_goal{0.0};
28+
double lateral_offset{0.0};
29+
size_t id{0};
30+
bool is_safe{true};
31+
size_t num_objects_to_avoid{0};
32+
};
33+
using GoalCandidates = std::vector<GoalCandidate>;
34+
35+
} // namespace autoware::behavior_path_planner
36+
#endif // AUTOWARE__BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_CANDIDATE_HPP_

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

+4-12
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;
@@ -335,7 +327,7 @@ class GoalPlannerModule : public SceneModuleInterface
335327
std::unique_ptr<FixedGoalPlannerBase> fixed_goal_planner_;
336328

337329
// goal searcher
338-
std::shared_ptr<GoalSearcherBase> goal_searcher_;
330+
std::optional<GoalSearcher> goal_searcher_{};
339331
GoalCandidates goal_candidates_{};
340332

341333
bool use_bus_stop_area_{false};
@@ -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.
@@ -364,7 +356,8 @@ class GoalPlannerModule : public SceneModuleInterface
364356
mutable GoalPlannerDebugData debug_data_;
365357

366358
// goal seach
367-
GoalCandidates generateGoalCandidates(const bool use_bus_stop_area) const;
359+
GoalCandidates generateGoalCandidates(
360+
GoalSearcher & goal_searcher, const bool use_bus_stop_area) const;
368361

369362
/*
370363
* state transitions and plan function used in each state
@@ -433,7 +426,6 @@ class GoalPlannerModule : public SceneModuleInterface
433426
std::optional<PullOverPath> selectPullOverPath(
434427
const PullOverContextData & context_data,
435428
const std::vector<PullOverPath> & pull_over_path_candidates,
436-
const GoalCandidates & goal_candidates,
437429
const std::optional<std::vector<size_t>> sorted_bezier_indices_opt) const;
438430

439431
// lanes and drivable area

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

+35-12
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,12 @@
1515
#ifndef AUTOWARE__BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_HPP_
1616
#define AUTOWARE__BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_HPP_
1717

18-
#include "autoware/behavior_path_goal_planner_module/goal_searcher_base.hpp"
18+
#include "autoware/behavior_path_goal_planner_module/goal_candidate.hpp"
19+
#include "autoware/behavior_path_goal_planner_module/goal_planner_parameters.hpp"
20+
#include "autoware/behavior_path_planner_common/data_manager.hpp"
21+
#include "autoware/behavior_path_planner_common/utils/occupancy_grid_based_collision_detector/occupancy_grid_based_collision_detector.hpp"
22+
23+
#include <geometry_msgs/msg/pose_stamped.hpp>
1924

2025
#include <memory>
2126
#include <vector>
@@ -24,32 +29,45 @@ namespace autoware::behavior_path_planner
2429
{
2530
using autoware::universe_utils::LinearRing2d;
2631
using BasicPolygons2d = std::vector<lanelet::BasicPolygon2d>;
32+
using autoware::universe_utils::MultiPolygon2d;
2733

28-
class GoalSearcher : public GoalSearcherBase
34+
class GoalSearcher
2935
{
3036
public:
31-
GoalSearcher(const GoalPlannerParameters & parameters, const LinearRing2d & vehicle_footprint);
37+
static GoalSearcher create(
38+
const GoalPlannerParameters & parameters, const LinearRing2d & vehicle_footprint,
39+
const std::shared_ptr<const PlannerData> & planner_data);
3240

41+
public:
3342
GoalCandidates search(
34-
const std::shared_ptr<const PlannerData> & planner_data, const bool use_bus_stop_area) override;
43+
const std::shared_ptr<const PlannerData> & planner_data, const bool use_bus_stop_area);
3544
void update(
3645
GoalCandidates & goal_candidates,
3746
const std::shared_ptr<OccupancyGridBasedCollisionDetector> occupancy_grid_map,
3847
const std::shared_ptr<const PlannerData> & planner_data,
39-
const PredictedObjects & objects) const override;
48+
const PredictedObjects & objects) const;
4049

4150
// todo(kosuke55): Functions for this specific use should not be in the interface,
4251
// so it is better to consider interface design when we implement other goal searchers.
43-
GoalCandidate getClosetGoalCandidateAlongLanes(
52+
std::optional<GoalCandidate> getClosestGoalCandidateAlongLanes(
4453
const GoalCandidates & goal_candidates,
45-
const std::shared_ptr<const PlannerData> & planner_data) const override;
54+
const std::shared_ptr<const PlannerData> & planner_data) const;
4655
bool isSafeGoalWithMarginScaleFactor(
4756
const GoalCandidate & goal_candidate, const double margin_scale_factor,
4857
const std::shared_ptr<OccupancyGridBasedCollisionDetector> occupancy_grid_map,
4958
const std::shared_ptr<const PlannerData> & planner_data,
50-
const PredictedObjects & objects) const override;
59+
const PredictedObjects & objects) const;
60+
61+
MultiPolygon2d getAreaPolygons() const { return area_polygons_; }
5162

5263
private:
64+
GoalSearcher(
65+
const GoalPlannerParameters & parameters, const LinearRing2d & vehicle_footprint,
66+
const bool left_side_parking, const lanelet::ConstLanelets & pull_over_lanes,
67+
const lanelet::BasicPolygons2d & no_parking_area_polygons,
68+
const lanelet::BasicPolygons2d & no_stopping_area_polygons,
69+
const lanelet::BasicPolygons2d & bus_stop_area_polygons);
70+
5371
void countObjectsToAvoid(
5472
GoalCandidates & goal_candidates, const PredictedObjects & objects,
5573
const std::shared_ptr<const PlannerData> & planner_data,
@@ -64,11 +82,16 @@ class GoalSearcher : public GoalSearcherBase
6482
const Pose & ego_pose, const PredictedObjects & objects,
6583
const std::shared_ptr<OccupancyGridBasedCollisionDetector> occupancy_grid_map,
6684
const std::shared_ptr<const PlannerData> & planner_data) const;
67-
BasicPolygons2d getNoParkingAreaPolygons(const lanelet::ConstLanelets & lanes) const;
68-
BasicPolygons2d getNoStoppingAreaPolygons(const lanelet::ConstLanelets & lanes) const;
6985

70-
LinearRing2d vehicle_footprint_{};
71-
bool left_side_parking_{true};
86+
const GoalPlannerParameters parameters_;
87+
const LinearRing2d vehicle_footprint_;
88+
const bool left_side_parking_;
89+
const lanelet::ConstLanelets pull_over_lanes_;
90+
const lanelet::BasicPolygons2d no_parking_area_polygons_;
91+
const lanelet::BasicPolygons2d no_stopping_area_polygons_;
92+
const lanelet::BasicPolygons2d bus_stop_area_polygons_;
93+
94+
MultiPolygon2d area_polygons_{};
7295
};
7396
} // namespace autoware::behavior_path_planner
7497

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

-75
This file was deleted.

planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/pull_over_planner_base.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414

1515
#pragma once
1616

17+
#include "autoware/behavior_path_goal_planner_module/goal_candidate.hpp"
1718
#include "autoware/behavior_path_goal_planner_module/goal_planner_parameters.hpp"
18-
#include "autoware/behavior_path_goal_planner_module/goal_searcher_base.hpp"
1919
#include "autoware/behavior_path_planner_common/data_manager.hpp"
2020

2121
#include <autoware_internal_planning_msgs/msg/path_with_lane_id.hpp>

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#ifndef AUTOWARE__BEHAVIOR_PATH_GOAL_PLANNER_MODULE__UTIL_HPP_
1616
#define AUTOWARE__BEHAVIOR_PATH_GOAL_PLANNER_MODULE__UTIL_HPP_
1717

18-
#include "autoware/behavior_path_goal_planner_module/goal_searcher_base.hpp"
18+
#include "autoware/behavior_path_goal_planner_module/goal_candidate.hpp"
1919
#include "autoware/behavior_path_goal_planner_module/pull_over_planner/pull_over_planner_base.hpp"
2020

2121
#include <autoware/lane_departure_checker/lane_departure_checker.hpp>

0 commit comments

Comments
 (0)