Skip to content

Commit 8314f38

Browse files
refactor(lane_change): separate leading and trailing objects (autowarefoundation#8214)
* refactor(lane_change): separate leading and trailing objects Signed-off-by: Muhammad Zulfaqar Azmi <zulfaqar.azmi@tier4.jp> * Refactor to use common function Signed-off-by: Zulfaqar Azmi <zulfaqar.azmi@tier4.jp> --------- Signed-off-by: Muhammad Zulfaqar Azmi <zulfaqar.azmi@tier4.jp> Signed-off-by: Zulfaqar Azmi <zulfaqar.azmi@tier4.jp>
1 parent b830618 commit 8314f38

File tree

10 files changed

+182
-120
lines changed

10 files changed

+182
-120
lines changed

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/scene.hpp

+7-10
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class NormalLaneChange : public LaneChangeBase
8282
PathSafetyStatus evaluateApprovedPathWithUnsafeHysteresis(
8383
PathSafetyStatus approved_path_safety_status) override;
8484

85-
bool isRequiredStop(const bool is_object_coming_from_rear) override;
85+
bool isRequiredStop(const bool is_trailing_object) override;
8686

8787
bool isNearEndOfCurrentLanes(
8888
const lanelet::ConstLanelets & current_lanes, const lanelet::ConstLanelets & target_lanes,
@@ -120,19 +120,16 @@ class NormalLaneChange : public LaneChangeBase
120120
const lanelet::ConstLanelets & current_lanes,
121121
const lanelet::ConstLanelets & target_lanes) const;
122122

123-
ExtendedPredictedObjects getTargetObjects(
124-
const LaneChangeLanesFilteredObjects & predicted_objects,
123+
lane_change::TargetObjects getTargetObjects(
124+
const FilteredByLanesExtendedObjects & predicted_objects,
125125
const lanelet::ConstLanelets & current_lanes) const;
126126

127-
LaneChangeLanesFilteredObjects filterObjects() const;
127+
FilteredByLanesExtendedObjects filterObjects() const;
128128

129129
void filterOncomingObjects(PredictedObjects & objects) const;
130130

131-
void filterObjectsByLanelets(
132-
const PredictedObjects & objects, const PathWithLaneId & current_lanes_ref_path,
133-
std::vector<PredictedObject> & current_lane_objects,
134-
std::vector<PredictedObject> & target_lane_objects,
135-
std::vector<PredictedObject> & other_lane_objects) const;
131+
FilteredByLanesObjects filterObjectsByLanelets(
132+
const PredictedObjects & objects, const PathWithLaneId & current_lanes_ref_path) const;
136133

137134
PathWithLaneId getPrepareSegment(
138135
const lanelet::ConstLanelets & current_lanes, const double backward_path_length,
@@ -170,7 +167,7 @@ class NormalLaneChange : public LaneChangeBase
170167

171168
PathSafetyStatus isLaneChangePathSafe(
172169
const LaneChangePath & lane_change_path,
173-
const ExtendedPredictedObjects & collision_check_objects,
170+
const lane_change::TargetObjects & collision_check_objects,
174171
const utils::path_safety_checker::RSSparams & rss_params,
175172
CollisionCheckDebugMap & debug_data) const;
176173

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/base_class.hpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class LaneChangeBase
9999

100100
virtual bool isEgoOnPreparePhase() const = 0;
101101

102-
virtual bool isRequiredStop(const bool is_object_coming_from_rear) = 0;
102+
virtual bool isRequiredStop(const bool is_trailing_object) = 0;
103103

104104
virtual PathSafetyStatus isApprovedPathSafe() const = 0;
105105

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/data_structs.hpp

+36-5
Original file line numberDiff line numberDiff line change
@@ -215,11 +215,33 @@ struct Info
215215
double terminal_lane_changing_velocity{0.0};
216216
};
217217

218+
template <typename Object>
218219
struct LanesObjects
219220
{
220-
ExtendedPredictedObjects current_lane{};
221-
ExtendedPredictedObjects target_lane{};
222-
ExtendedPredictedObjects other_lane{};
221+
Object current_lane{};
222+
Object target_lane_leading{};
223+
Object target_lane_trailing{};
224+
Object other_lane{};
225+
226+
LanesObjects() = default;
227+
LanesObjects(
228+
Object current_lane, Object target_lane_leading, Object target_lane_trailing, Object other_lane)
229+
: current_lane(std::move(current_lane)),
230+
target_lane_leading(std::move(target_lane_leading)),
231+
target_lane_trailing(std::move(target_lane_trailing)),
232+
other_lane(std::move(other_lane))
233+
{
234+
}
235+
};
236+
237+
struct TargetObjects
238+
{
239+
ExtendedPredictedObjects leading;
240+
ExtendedPredictedObjects trailing;
241+
TargetObjects(ExtendedPredictedObjects leading, ExtendedPredictedObjects trailing)
242+
: leading(std::move(leading)), trailing(std::move(trailing))
243+
{
244+
}
223245
};
224246

225247
enum class ModuleType {
@@ -231,7 +253,13 @@ enum class ModuleType {
231253
struct PathSafetyStatus
232254
{
233255
bool is_safe{true};
234-
bool is_object_coming_from_rear{false};
256+
bool is_trailing_object{false};
257+
258+
PathSafetyStatus() = default;
259+
PathSafetyStatus(const bool is_safe, const bool is_trailing_object)
260+
: is_safe(is_safe), is_trailing_object(is_trailing_object)
261+
{
262+
}
235263
};
236264

237265
struct LanesPolygon
@@ -280,12 +308,15 @@ using CommonDataPtr = std::shared_ptr<CommonData>;
280308

281309
namespace autoware::behavior_path_planner
282310
{
311+
using autoware_perception_msgs::msg::PredictedObject;
312+
using utils::path_safety_checker::ExtendedPredictedObjects;
283313
using LaneChangeModuleType = lane_change::ModuleType;
284314
using LaneChangeParameters = lane_change::Parameters;
285315
using LaneChangeStates = lane_change::States;
286316
using LaneChangePhaseInfo = lane_change::PhaseInfo;
287317
using LaneChangeInfo = lane_change::Info;
288-
using LaneChangeLanesFilteredObjects = lane_change::LanesObjects;
318+
using FilteredByLanesObjects = lane_change::LanesObjects<std::vector<PredictedObject>>;
319+
using FilteredByLanesExtendedObjects = lane_change::LanesObjects<ExtendedPredictedObjects>;
289320
using LateralAccelerationMap = lane_change::LateralAccelerationMap;
290321
} // namespace autoware::behavior_path_planner
291322

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/debug_structs.hpp

+3-2
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ struct Debug
3535
LaneChangePaths valid_paths;
3636
CollisionCheckDebugMap collision_check_objects;
3737
CollisionCheckDebugMap collision_check_objects_after_approval;
38-
LaneChangeLanesFilteredObjects filtered_objects;
38+
FilteredByLanesExtendedObjects filtered_objects;
3939
geometry_msgs::msg::Polygon execution_area;
4040
geometry_msgs::msg::Pose ego_pose;
4141
lanelet::ConstLanelets current_lanes;
@@ -55,7 +55,8 @@ struct Debug
5555
collision_check_objects.clear();
5656
collision_check_objects_after_approval.clear();
5757
filtered_objects.current_lane.clear();
58-
filtered_objects.target_lane.clear();
58+
filtered_objects.target_lane_leading.clear();
59+
filtered_objects.target_lane_trailing.clear();
5960
filtered_objects.other_lane.clear();
6061
execution_area.points.clear();
6162
current_lanes.clear();

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/markers.hpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929

3030
namespace marker_utils::lane_change_markers
3131
{
32+
using autoware::behavior_path_planner::FilteredByLanesExtendedObjects;
3233
using autoware::behavior_path_planner::LaneChangePath;
3334
using autoware::behavior_path_planner::lane_change::Debug;
3435
using autoware::behavior_path_planner::utils::path_safety_checker::ExtendedPredictedObjects;
@@ -39,9 +40,7 @@ MarkerArray createLaneChangingVirtualWallMarker(
3940
const geometry_msgs::msg::Pose & lane_changing_pose, const std::string & module_name,
4041
const rclcpp::Time & now, const std::string & ns);
4142
MarkerArray showFilteredObjects(
42-
const ExtendedPredictedObjects & current_lane_objects,
43-
const ExtendedPredictedObjects & target_lane_objects,
44-
const ExtendedPredictedObjects & other_lane_objects, const std::string & ns);
43+
const FilteredByLanesExtendedObjects & filtered_objects, const std::string & ns);
4544
MarkerArray createExecutionArea(const geometry_msgs::msg::Polygon & execution_area);
4645
MarkerArray showExecutionInfo(const Debug & debug_data, const geometry_msgs::msg::Pose & ego_pose);
4746
MarkerArray createDebugMarkerArray(

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/utils.hpp

+4
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,10 @@ bool is_before_terminal(
312312
const PredictedObject & object);
313313

314314
double calc_angle_to_lanelet_segment(const lanelet::ConstLanelets & lanelets, const Pose & pose);
315+
316+
ExtendedPredictedObjects transform_to_extended_objects(
317+
const CommonDataPtr & common_data_ptr, const std::vector<PredictedObject> & objects,
318+
const bool check_prepare_phase);
315319
} // namespace autoware::behavior_path_planner::utils::lane_change
316320

317321
namespace autoware::behavior_path_planner::utils::lane_change::debug

planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ bool LaneChangeInterface::canTransitFailureState()
276276
return false;
277277
}
278278

279-
if (module_type_->isRequiredStop(post_process_safety_status_.is_object_coming_from_rear)) {
279+
if (module_type_->isRequiredStop(post_process_safety_status_.is_trailing_object)) {
280280
log_debug_throttled("Module require stopping");
281281
}
282282

0 commit comments

Comments
 (0)