Skip to content

Commit d33d98c

Browse files
Merge branch 'feat/v0.48/e2e' into feat/v0.48/enable_dp_traffic_light
2 parents d539669 + ec56d0d commit d33d98c

32 files changed

+487
-277
lines changed

common/autoware_boundary_departure_checker/include/autoware/boundary_departure_checker/parameters.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ struct Param
147147
double critical_departure_on_time_buffer_s{0.15};
148148
double critical_departure_off_time_buffer_s{0.15};
149149
AbnormalitiesConfigs abnormality_configs;
150-
std::vector<std::string> boundary_types_to_detect;
150+
std::vector<std::string> boundary_types_to_detect{"road_border"};
151151
std::vector<FootprintType> footprint_types_to_check;
152152

153153
template <typename ConfigType>

common/autoware_boundary_departure_checker/include/autoware/boundary_departure_checker/utils.hpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -257,17 +257,13 @@ UncrossableBoundRTree build_uncrossable_boundaries_rtree(
257257
* If it is within the segment's bounds, it returns the projection point. If it's outside,
258258
* an error is returned indicating the relative position.
259259
*
260-
* The `swap_points` flag controls the order of the returned pair, useful when projection
261-
* direction matters (e.g., from ego to boundary vs. from boundary to ego).
262-
*
263260
* @param p The point to be projected.
264261
* @param segment The line segment to project onto.
265-
* @param swap_points Whether to swap the order of the original and projected point in the result.
266262
* @return A tuple containing the original point, projection point, and the distance between them,
267263
* or an error message if the point lies outside the segment.
268264
*/
269-
tl::expected<std::tuple<Point2d, Point2d, double>, std::string> point_to_segment_projection(
270-
const Point2d & p, const Segment2d & segment, const bool swap_points = false);
265+
tl::expected<std::pair<Point2d, double>, std::string> point_to_segment_projection(
266+
const Point2d & p, const Segment2d & segment);
271267

272268
/**
273269
* @brief Computes the nearest projection between two segments, used to assess lateral distance.

common/autoware_boundary_departure_checker/src/uncrossable_boundary_departure_checker.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,12 @@ tl::expected<DepartureData, std::string> UncrossableBoundaryDepartureChecker::ge
297297
trimmed_pred_traj, *vehicle_info_ptr_, curr_pose_with_cov, param_);
298298
const auto & footprint_type_order = footprint_manager_->get_footprint_type_order();
299299

300+
if (
301+
generated_footprints.empty() || footprint_type_order.empty() ||
302+
generated_footprints.at(footprint_type_order.front()).empty()) {
303+
return tl::make_unexpected("Failed to generate any footprints for abnormalities");
304+
}
305+
300306
if (generated_footprints.empty() || footprint_type_order.empty()) {
301307
return tl::make_unexpected("Failed to generate any footprints");
302308
}

common/autoware_boundary_departure_checker/src/utils.cpp

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -418,35 +418,25 @@ UncrossableBoundRTree build_uncrossable_boundaries_rtree(
418418
return {segments.begin(), segments.end()};
419419
}
420420

421-
tl::expected<std::tuple<Point2d, Point2d, double>, std::string> point_to_segment_projection(
422-
const Point2d & p, const Segment2d & segment, const bool swap_points)
421+
tl::expected<std::pair<Point2d, double>, std::string> point_to_segment_projection(
422+
const Point2d & p, const Segment2d & segment)
423423
{
424424
const auto & p1 = segment.first;
425425
const auto & p2 = segment.second;
426426

427427
const Point2d p2_vec = {p2.x() - p1.x(), p2.y() - p1.y()};
428428
const Point2d p_vec = {p.x() - p1.x(), p.y() - p1.y()};
429429

430-
const auto result = [&swap_points](
431-
const Point2d & orig,
432-
const Point2d & proj) -> std::tuple<Point2d, Point2d, double> {
433-
return swap_points ? std::make_tuple(proj, orig, boost::geometry::distance(proj, orig))
434-
: std::make_tuple(orig, proj, boost::geometry::distance(orig, proj));
435-
};
436-
437430
const auto c1 = boost::geometry::dot_product(p_vec, p2_vec);
438431
if (c1 < 0.0) return tl::make_unexpected("Point before segment start");
439-
if (c1 == 0.0) return result(p, p1);
440432

441433
const auto c2 = boost::geometry::dot_product(p2_vec, p2_vec);
442434
if (c1 > c2) return tl::make_unexpected("Point after segment end");
443435

444-
if (c1 == c2) return result(p, p2);
445-
446436
const auto projection = p1 + (p2_vec * c1 / c2);
447437
const auto projection_point = Point2d{projection.x(), projection.y()};
448438

449-
return result(p, projection_point);
439+
return std::make_pair(projection_point, boost::geometry::distance(p, projection_point));
450440
}
451441

452442
tl::expected<ProjectionToBound, std::string> segment_to_segment_nearest_projection(
@@ -465,29 +455,28 @@ tl::expected<ProjectionToBound, std::string> segment_to_segment_nearest_projecti
465455

466456
ProjectionsToBound projections;
467457
projections.reserve(4);
468-
constexpr bool swap_result = true;
469-
if (const auto projection_opt = point_to_segment_projection(ego_f, lane_seg, swap_result)) {
470-
const auto & [pt_ego, pt_lane, dist] = *projection_opt;
471-
const auto lon_offset = boost::geometry::distance(pt_ego, ego_f);
472-
projections.emplace_back(pt_ego, pt_lane, lane_seg, dist, lon_offset, ego_sides_idx);
458+
if (const auto projection_opt = point_to_segment_projection(ego_f, lane_seg)) {
459+
const auto & [proj, dist] = *projection_opt;
460+
constexpr auto lon_offset = 0.0;
461+
projections.emplace_back(ego_f, proj, lane_seg, dist, lon_offset, ego_sides_idx);
473462
}
474463

475-
if (const auto projection_opt = point_to_segment_projection(ego_b, lane_seg, swap_result)) {
476-
const auto & [pt_ego, pt_lane, dist] = *projection_opt;
477-
const auto lon_offset = boost::geometry::distance(pt_ego, ego_f);
478-
projections.emplace_back(pt_ego, pt_lane, lane_seg, dist, lon_offset, ego_sides_idx);
464+
if (const auto projection_opt = point_to_segment_projection(ego_b, lane_seg)) {
465+
const auto & [proj, dist] = *projection_opt;
466+
const auto lon_offset = boost::geometry::distance(ego_b, ego_f);
467+
projections.emplace_back(ego_b, proj, lane_seg, dist, lon_offset, ego_sides_idx);
479468
}
480469

481-
if (const auto projection_opt = point_to_segment_projection(lane_pt1, ego_seg, !swap_result)) {
482-
const auto & [pt_ego, pt_lane, dist] = *projection_opt;
483-
const auto lon_offset = boost::geometry::distance(pt_ego, ego_f);
484-
projections.emplace_back(pt_ego, pt_lane, lane_seg, dist, lon_offset, ego_sides_idx);
470+
if (const auto projection_opt = point_to_segment_projection(lane_pt1, ego_seg)) {
471+
const auto & [proj, dist] = *projection_opt;
472+
const auto lon_offset = boost::geometry::distance(proj, ego_f);
473+
projections.emplace_back(proj, lane_pt1, lane_seg, dist, lon_offset, ego_sides_idx);
485474
}
486475

487-
if (const auto projection_opt = point_to_segment_projection(lane_pt2, ego_seg, !swap_result)) {
488-
const auto & [pt_ego, pt_lane, dist] = *projection_opt;
489-
const auto lon_offset = boost::geometry::distance(pt_ego, ego_f);
490-
projections.emplace_back(pt_ego, pt_lane, lane_seg, dist, lon_offset, ego_sides_idx);
476+
if (const auto projection_opt = point_to_segment_projection(lane_pt2, ego_seg)) {
477+
const auto & [proj, dist] = *projection_opt;
478+
const auto lon_offset = boost::geometry::distance(proj, ego_f);
479+
projections.emplace_back(proj, lane_pt2, lane_seg, dist, lon_offset, ego_sides_idx);
491480
}
492481

493482
if (projections.empty())

planning/autoware_trajectory_modifier/CMakeLists.txt

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,37 @@ project(autoware_trajectory_modifier)
33

44
find_package(autoware_cmake REQUIRED)
55
autoware_package()
6+
pluginlib_export_plugin_description_file(autoware_trajectory_modifier plugins.xml)
67

7-
ament_auto_add_library(autoware_trajectory_modifier_component SHARED
8+
generate_parameter_library(trajectory_modifier_param
9+
param/trajectory_modifier_parameter_struct.yaml
10+
)
11+
12+
ament_auto_add_library(${PROJECT_NAME} SHARED
813
src/trajectory_modifier.cpp
914
src/utils.cpp
10-
src/trajectory_modifier_plugins/stop_point_fixer.cpp
1115
)
1216

13-
target_link_libraries(autoware_trajectory_modifier_component)
17+
target_link_libraries(${PROJECT_NAME}
18+
trajectory_modifier_param
19+
)
20+
21+
target_compile_options(${PROJECT_NAME} PUBLIC
22+
-Wno-error=deprecated-declarations
23+
)
1424

15-
rclcpp_components_register_node(autoware_trajectory_modifier_component
25+
rclcpp_components_register_node(${PROJECT_NAME}
1626
PLUGIN "autoware::trajectory_modifier::TrajectoryModifier"
17-
EXECUTABLE autoware_trajectory_modifier_node
27+
EXECUTABLE ${PROJECT_NAME}_node
28+
)
29+
30+
ament_auto_add_library(${PROJECT_NAME}_plugins SHARED
31+
src/trajectory_modifier_plugins/stop_point_fixer.cpp
32+
)
33+
34+
target_link_libraries(${PROJECT_NAME}_plugins
35+
${PROJECT_NAME}
36+
trajectory_modifier_param
1837
)
1938

2039
if(BUILD_TESTING)
@@ -26,7 +45,8 @@ if(BUILD_TESTING)
2645
${TEST_SOURCES}
2746
)
2847
target_link_libraries(test_autoware_trajectory_modifier
29-
autoware_trajectory_modifier_component
48+
${PROJECT_NAME}
49+
${PROJECT_NAME}_plugins
3050
)
3151
endif()
3252

planning/autoware_trajectory_modifier/config/trajectory_modifier.param.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/trajectory_modifier:
1+
/**:
22
ros__parameters:
33
use_stop_point_fixer: true
44

planning/autoware_trajectory_modifier/include/autoware/trajectory_modifier/trajectory_modifier.hpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919
#include "autoware/trajectory_modifier/trajectory_modifier_plugins/trajectory_modifier_plugin_base.hpp"
2020
#include "autoware/trajectory_modifier/trajectory_modifier_structs.hpp"
2121

22+
#include <autoware_trajectory_modifier/trajectory_modifier_param.hpp>
2223
#include <autoware_utils_debug/time_keeper.hpp>
2324
#include <autoware_utils_rclcpp/polling_subscriber.hpp>
25+
#include <pluginlib/class_loader.hpp>
2426
#include <rclcpp/rclcpp.hpp>
2527
#include <rclcpp/subscription.hpp>
2628

@@ -51,16 +53,16 @@ class TrajectoryModifier : public rclcpp::Node
5153

5254
private:
5355
void on_traj(const CandidateTrajectories::ConstSharedPtr msg);
54-
void set_up_params();
5556
void initialize_modifiers();
57+
void load_plugin(const std::string & name);
58+
void unload_plugin(const std::string & name);
5659
void reset_previous_data();
5760
bool initialized_modifiers_{false};
5861

59-
rcl_interfaces::msg::SetParametersResult on_parameter(
60-
const std::vector<rclcpp::Parameter> & parameters);
62+
std::unique_ptr<trajectory_modifier_params::ParamListener> param_listener_;
63+
trajectory_modifier_params::Params params_;
6164

62-
std::vector<std::shared_ptr<plugin::TrajectoryModifierPluginBase>> modifier_plugins_;
63-
std::shared_ptr<plugin::StopPointFixer> stop_point_fixer_ptr_;
65+
void update_params();
6466

6567
rclcpp::Subscription<CandidateTrajectories>::SharedPtr trajectories_sub_;
6668
rclcpp::Publisher<CandidateTrajectories>::SharedPtr trajectories_pub_;
@@ -79,9 +81,10 @@ class TrajectoryModifier : public rclcpp::Node
7981
debug_processing_time_detail_pub_;
8082
mutable std::shared_ptr<autoware_utils_debug::TimeKeeper> time_keeper_{nullptr};
8183

82-
TrajectoryModifierParams params_;
84+
pluginlib::ClassLoader<plugin::TrajectoryModifierPluginBase> plugin_loader_;
85+
std::vector<std::shared_ptr<plugin::TrajectoryModifierPluginBase>> plugins_;
86+
8387
TrajectoryModifierData data_;
84-
OnSetParametersCallbackHandle::SharedPtr set_param_res_;
8588
};
8689

8790
} // namespace autoware::trajectory_modifier

planning/autoware_trajectory_modifier/include/autoware/trajectory_modifier/trajectory_modifier_plugins/stop_point_fixer.hpp

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,29 +27,27 @@ namespace autoware::trajectory_modifier::plugin
2727
class StopPointFixer : public TrajectoryModifierPluginBase
2828
{
2929
public:
30-
StopPointFixer(
31-
const std::string & name, rclcpp::Node * node_ptr,
32-
const std::shared_ptr<autoware_utils_debug::TimeKeeper> & time_keeper,
33-
const TrajectoryModifierParams & params);
30+
StopPointFixer() = default;
3431

3532
void modify_trajectory(
36-
TrajectoryPoints & traj_points, const TrajectoryModifierParams & params,
37-
const TrajectoryModifierData & data) override;
38-
void set_up_params() override;
39-
rcl_interfaces::msg::SetParametersResult on_parameter(
40-
const std::vector<rclcpp::Parameter> & parameters) override;
41-
bool is_trajectory_modification_required(
42-
const TrajectoryPoints & traj_points, const TrajectoryModifierParams & params,
43-
const TrajectoryModifierData & data) const override;
33+
TrajectoryPoints & traj_points, const TrajectoryModifierData & data) override;
4434

45-
private:
46-
struct Parameters
35+
[[nodiscard]] bool is_trajectory_modification_required(
36+
const TrajectoryPoints & traj_points, const TrajectoryModifierData & data) const override;
37+
38+
void update_params(const TrajectoryModifierParams & params) override
4739
{
48-
double velocity_threshold_mps{0.1};
49-
double min_distance_threshold_m{1.0};
50-
};
40+
params_ = params.stop_point_fixer;
41+
enabled_ = params.use_stop_point_fixer;
42+
}
43+
44+
const TrajectoryModifierParams::StopPointFixer & get_params() const { return params_; }
5145

52-
Parameters params_;
46+
protected:
47+
void on_initialize(const TrajectoryModifierParams & params) override;
48+
49+
private:
50+
TrajectoryModifierParams::StopPointFixer params_;
5351
};
5452

5553
} // namespace autoware::trajectory_modifier::plugin

planning/autoware_trajectory_modifier/include/autoware/trajectory_modifier/trajectory_modifier_plugins/trajectory_modifier_plugin_base.hpp

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "autoware/trajectory_modifier/trajectory_modifier_structs.hpp"
2020

2121
#include <autoware/planning_factor_interface/planning_factor_interface.hpp>
22+
#include <autoware_trajectory_modifier/trajectory_modifier_param.hpp>
2223
#include <autoware_utils_debug/time_keeper.hpp>
2324
#include <rclcpp/rclcpp.hpp>
2425

@@ -36,32 +37,35 @@ namespace autoware::trajectory_modifier::plugin
3637
using autoware_internal_planning_msgs::msg::PlanningFactor;
3738
using autoware_planning_msgs::msg::TrajectoryPoint;
3839
using TrajectoryPoints = std::vector<TrajectoryPoint>;
40+
using TrajectoryModifierParams = trajectory_modifier_params::Params;
3941

4042
class TrajectoryModifierPluginBase
4143
{
4244
public:
43-
TrajectoryModifierPluginBase(
45+
TrajectoryModifierPluginBase() = default;
46+
47+
void initialize(
4448
std::string name, rclcpp::Node * node_ptr,
4549
const std::shared_ptr<autoware_utils_debug::TimeKeeper> time_keeper,
4650
[[maybe_unused]] const TrajectoryModifierParams & params)
47-
: name_(std::move(name)), node_ptr_(node_ptr), time_keeper_(time_keeper)
4851
{
52+
name_ = std::move(name);
53+
node_ptr_ = node_ptr;
54+
time_keeper_ = time_keeper;
4955
RCLCPP_DEBUG(
5056
node_ptr_->get_logger(), "instantiated TrajectoryModifierPluginBase: %s", name_.c_str());
57+
on_initialize(params);
5158
}
59+
5260
virtual ~TrajectoryModifierPluginBase() = default;
5361
virtual void modify_trajectory(
54-
TrajectoryPoints & traj_points, const TrajectoryModifierParams & params,
55-
const TrajectoryModifierData & data) = 0;
56-
virtual void set_up_params() = 0;
57-
virtual rcl_interfaces::msg::SetParametersResult on_parameter(
58-
const std::vector<rclcpp::Parameter> & parameters) = 0;
62+
TrajectoryPoints & traj_points, const TrajectoryModifierData & data) = 0;
5963
virtual bool is_trajectory_modification_required(
60-
const TrajectoryPoints & traj_points, const TrajectoryModifierParams & params,
61-
const TrajectoryModifierData & data) const = 0;
64+
const TrajectoryPoints & traj_points, const TrajectoryModifierData & data) const = 0;
6265
std::string get_name() const { return name_; }
6366
rclcpp::Node * get_node_ptr() const { return node_ptr_; }
6467
std::shared_ptr<autoware_utils_debug::TimeKeeper> get_time_keeper() const { return time_keeper_; }
68+
virtual void update_params(const TrajectoryModifierParams & params) = 0;
6569

6670
virtual void publish_planning_factor()
6771
{
@@ -78,8 +82,10 @@ class TrajectoryModifierPluginBase
7882
}
7983

8084
protected:
85+
virtual void on_initialize(const TrajectoryModifierParams & params) = 0;
8186
std::unique_ptr<autoware::planning_factor_interface::PlanningFactorInterface>
8287
planning_factor_interface_;
88+
bool enabled_{true};
8389

8490
private:
8591
std::string name_;

planning/autoware_trajectory_modifier/include/autoware/trajectory_modifier/trajectory_modifier_structs.hpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,6 @@ namespace autoware::trajectory_modifier
2222
using geometry_msgs::msg::AccelWithCovarianceStamped;
2323
using nav_msgs::msg::Odometry;
2424

25-
struct TrajectoryModifierParams
26-
{
27-
bool use_stop_point_fixer{true};
28-
};
29-
3025
struct TrajectoryModifierData
3126
{
3227
Odometry current_odometry;

0 commit comments

Comments
 (0)