Skip to content

Commit 275f9e7

Browse files
refactor(lane_departure_checker): improve LaneDepartureChecker initialization and parameter handling
Signed-off-by: kyoichi-sugahara <kyoichi.sugahara@tier4.jp>
1 parent 1586372 commit 275f9e7

File tree

11 files changed

+188
-127
lines changed

11 files changed

+188
-127
lines changed

control/autoware_lane_departure_checker/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ ament_auto_add_library(autoware_lane_departure_checker SHARED
1414
src/lane_departure_checker_node/lane_departure_checker.cpp
1515
src/lane_departure_checker_node/lane_departure_checker_node.cpp
1616
src/lane_departure_checker_node/utils.cpp
17+
src/lane_departure_checker_node/parameters.cpp
1718
)
1819

1920
rclcpp_components_register_node(${PROJECT_NAME}

control/autoware_lane_departure_checker/include/autoware/lane_departure_checker/lane_departure_checker.hpp

+11-62
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,12 @@
1515
#ifndef AUTOWARE__LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_HPP_
1616
#define AUTOWARE__LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_HPP_
1717

18-
#include <autoware/universe_utils/geometry/boost_geometry.hpp>
19-
#include <autoware/universe_utils/geometry/pose_deviation.hpp>
18+
#include "autoware/lane_departure_checker/parameters.hpp"
19+
2020
#include <autoware/universe_utils/system/time_keeper.hpp>
2121
#include <autoware_vehicle_info_utils/vehicle_info_utils.hpp>
2222
#include <rosidl_runtime_cpp/message_initialization.hpp>
2323

24-
#include <autoware_planning_msgs/msg/lanelet_route.hpp>
25-
#include <autoware_planning_msgs/msg/trajectory.hpp>
26-
#include <autoware_planning_msgs/msg/trajectory_point.hpp>
2724
#include <geometry_msgs/msg/pose_stamped.hpp>
2825
#include <geometry_msgs/msg/pose_with_covariance_stamped.hpp>
2926
#include <geometry_msgs/msg/twist_stamped.hpp>
@@ -48,81 +45,33 @@
4845

4946
namespace autoware::lane_departure_checker
5047
{
51-
using autoware::universe_utils::LinearRing2d;
52-
using autoware::universe_utils::PoseDeviation;
5348
using autoware::universe_utils::Segment2d;
54-
using autoware_planning_msgs::msg::LaneletRoute;
55-
using autoware_planning_msgs::msg::Trajectory;
56-
using autoware_planning_msgs::msg::TrajectoryPoint;
5749
using tier4_planning_msgs::msg::PathWithLaneId;
58-
using TrajectoryPoints = std::vector<TrajectoryPoint>;
5950
typedef boost::geometry::index::rtree<Segment2d, boost::geometry::index::rstar<16>> SegmentRtree;
6051

61-
struct Param
62-
{
63-
double footprint_margin_scale{0.0};
64-
double footprint_extra_margin{0.0};
65-
double resample_interval{0.0};
66-
double max_deceleration{0.0};
67-
double delay_time{0.0};
68-
double max_lateral_deviation{0.0};
69-
double max_longitudinal_deviation{0.0};
70-
double max_yaw_deviation_deg{0.0};
71-
double min_braking_distance{0.0};
72-
// nearest search to ego
73-
double ego_nearest_dist_threshold{0.0};
74-
double ego_nearest_yaw_threshold{0.0};
75-
};
76-
77-
struct Input
78-
{
79-
nav_msgs::msg::Odometry::ConstSharedPtr current_odom{};
80-
lanelet::LaneletMapPtr lanelet_map{};
81-
LaneletRoute::ConstSharedPtr route{};
82-
lanelet::ConstLanelets route_lanelets{};
83-
lanelet::ConstLanelets shoulder_lanelets{};
84-
Trajectory::ConstSharedPtr reference_trajectory{};
85-
Trajectory::ConstSharedPtr predicted_trajectory{};
86-
std::vector<std::string> boundary_types_to_detect{};
87-
};
88-
89-
struct Output
90-
{
91-
std::map<std::string, double> processing_time_map{};
92-
bool will_leave_lane{};
93-
bool is_out_of_lane{};
94-
bool will_cross_boundary{};
95-
PoseDeviation trajectory_deviation{};
96-
lanelet::ConstLanelets candidate_lanelets{};
97-
TrajectoryPoints resampled_trajectory{};
98-
std::vector<LinearRing2d> vehicle_footprints{};
99-
std::vector<LinearRing2d> vehicle_passing_areas{};
100-
};
101-
10252
class LaneDepartureChecker
10353
{
10454
public:
105-
LaneDepartureChecker(
55+
explicit LaneDepartureChecker(
10656
std::shared_ptr<universe_utils::TimeKeeper> time_keeper =
10757
std::make_shared<universe_utils::TimeKeeper>())
10858
: time_keeper_(time_keeper)
10959
{
11060
}
111-
Output update(const Input & input);
11261

113-
void setParam(const Param & param, const autoware::vehicle_info_utils::VehicleInfo vehicle_info)
62+
LaneDepartureChecker(
63+
const Param & param, const autoware::vehicle_info_utils::VehicleInfo & vehicle_info,
64+
std::shared_ptr<universe_utils::TimeKeeper> time_keeper =
65+
std::make_shared<universe_utils::TimeKeeper>())
66+
: param_(param),
67+
vehicle_info_ptr_(std::make_shared<autoware::vehicle_info_utils::VehicleInfo>(vehicle_info)),
68+
time_keeper_(time_keeper)
11469
{
115-
param_ = param;
116-
vehicle_info_ptr_ = std::make_shared<autoware::vehicle_info_utils::VehicleInfo>(vehicle_info);
11770
}
71+
Output update(const Input & input);
11872

11973
void setParam(const Param & param) { param_ = param; }
12074

121-
void setVehicleInfo(const autoware::vehicle_info_utils::VehicleInfo vehicle_info)
122-
{
123-
vehicle_info_ptr_ = std::make_shared<autoware::vehicle_info_utils::VehicleInfo>(vehicle_info);
124-
}
125-
12675
bool checkPathWillLeaveLane(
12776
const lanelet::ConstLanelets & lanelets, const PathWithLaneId & path) const;
12877

control/autoware_lane_departure_checker/include/autoware/lane_departure_checker/lane_departure_checker_node.hpp

+1-15
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#define AUTOWARE__LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_NODE_HPP_
1717

1818
#include "autoware/lane_departure_checker/lane_departure_checker.hpp"
19+
#include "autoware/lane_departure_checker/parameters.hpp"
1920
#include "autoware/universe_utils/ros/polling_subscriber.hpp"
2021

2122
#include <autoware/universe_utils/ros/debug_publisher.hpp>
@@ -47,21 +48,6 @@ namespace autoware::lane_departure_checker
4748
{
4849
using autoware_map_msgs::msg::LaneletMapBin;
4950

50-
struct NodeParam
51-
{
52-
bool will_out_of_lane_checker;
53-
bool out_of_lane_checker;
54-
bool boundary_departure_checker;
55-
56-
double update_rate;
57-
bool visualize_lanelet;
58-
bool include_right_lanes;
59-
bool include_left_lanes;
60-
bool include_opposite_lanes;
61-
bool include_conflicting_lanes;
62-
std::vector<std::string> boundary_types_to_detect;
63-
};
64-
6551
class LaneDepartureCheckerNode : public rclcpp::Node
6652
{
6753
public:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
// Copyright 2024 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__LANE_DEPARTURE_CHECKER__PARAMETERS_HPP_
16+
#define AUTOWARE__LANE_DEPARTURE_CHECKER__PARAMETERS_HPP_
17+
18+
#include <autoware/universe_utils/geometry/boost_geometry.hpp>
19+
#include <autoware/universe_utils/geometry/pose_deviation.hpp>
20+
#include <rclcpp/node.hpp>
21+
22+
#include <autoware_planning_msgs/msg/lanelet_route.hpp>
23+
#include <autoware_planning_msgs/msg/trajectory.hpp>
24+
#include <autoware_planning_msgs/msg/trajectory_point.hpp>
25+
#include <nav_msgs/msg/odometry.hpp>
26+
27+
#include <lanelet2_core/LaneletMap.h>
28+
29+
#include <map>
30+
#include <string>
31+
#include <vector>
32+
33+
namespace autoware::lane_departure_checker
34+
{
35+
using autoware::universe_utils::PoseDeviation;
36+
using autoware_planning_msgs::msg::LaneletRoute;
37+
using autoware_planning_msgs::msg::Trajectory;
38+
using autoware_planning_msgs::msg::TrajectoryPoint;
39+
using TrajectoryPoints = std::vector<TrajectoryPoint>;
40+
using autoware::universe_utils::LinearRing2d;
41+
42+
struct Param
43+
{
44+
static Param init(rclcpp::Node & node);
45+
double footprint_margin_scale{};
46+
double footprint_extra_margin{};
47+
double resample_interval{};
48+
double max_deceleration{};
49+
double delay_time{};
50+
double max_lateral_deviation{};
51+
double max_longitudinal_deviation{};
52+
double max_yaw_deviation_deg{};
53+
double min_braking_distance{};
54+
// nearest search to ego
55+
double ego_nearest_dist_threshold{};
56+
double ego_nearest_yaw_threshold{};
57+
};
58+
59+
struct NodeParam
60+
{
61+
static NodeParam init(rclcpp::Node & node);
62+
bool will_out_of_lane_checker{};
63+
bool out_of_lane_checker{};
64+
bool boundary_departure_checker{};
65+
66+
double update_rate{};
67+
bool visualize_lanelet{};
68+
bool include_right_lanes{};
69+
bool include_left_lanes{};
70+
bool include_opposite_lanes{};
71+
bool include_conflicting_lanes{};
72+
std::vector<std::string> boundary_types_to_detect{};
73+
};
74+
75+
struct Input
76+
{
77+
nav_msgs::msg::Odometry::ConstSharedPtr current_odom{};
78+
lanelet::LaneletMapPtr lanelet_map{};
79+
LaneletRoute::ConstSharedPtr route{};
80+
lanelet::ConstLanelets route_lanelets{};
81+
lanelet::ConstLanelets shoulder_lanelets{};
82+
Trajectory::ConstSharedPtr reference_trajectory{};
83+
Trajectory::ConstSharedPtr predicted_trajectory{};
84+
std::vector<std::string> boundary_types_to_detect{};
85+
};
86+
87+
struct Output
88+
{
89+
std::map<std::string, double> processing_time_map{};
90+
bool will_leave_lane{};
91+
bool is_out_of_lane{};
92+
bool will_cross_boundary{};
93+
PoseDeviation trajectory_deviation{};
94+
lanelet::ConstLanelets candidate_lanelets{};
95+
TrajectoryPoints resampled_trajectory{};
96+
std::vector<LinearRing2d> vehicle_footprints{};
97+
std::vector<LinearRing2d> vehicle_passing_areas{};
98+
};
99+
} // namespace autoware::lane_departure_checker
100+
101+
#endif // AUTOWARE__LANE_DEPARTURE_CHECKER__PARAMETERS_HPP_

control/autoware_lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp

+3-32
Original file line numberDiff line numberDiff line change
@@ -126,48 +126,19 @@ LaneDepartureCheckerNode::LaneDepartureCheckerNode(const rclcpp::NodeOptions & o
126126
: Node("lane_departure_checker_node", options)
127127
{
128128
using std::placeholders::_1;
129-
130-
// Enable feature
131-
node_param_.will_out_of_lane_checker = declare_parameter<bool>("will_out_of_lane_checker");
132-
node_param_.out_of_lane_checker = declare_parameter<bool>("out_of_lane_checker");
133-
node_param_.boundary_departure_checker = declare_parameter<bool>("boundary_departure_checker");
134-
135-
// Node Parameter
136-
node_param_.update_rate = declare_parameter<double>("update_rate");
137-
node_param_.visualize_lanelet = declare_parameter<bool>("visualize_lanelet");
138-
node_param_.include_right_lanes = declare_parameter<bool>("include_right_lanes");
139-
node_param_.include_left_lanes = declare_parameter<bool>("include_left_lanes");
140-
node_param_.include_opposite_lanes = declare_parameter<bool>("include_opposite_lanes");
141-
node_param_.include_conflicting_lanes = declare_parameter<bool>("include_conflicting_lanes");
142-
143-
// Boundary_departure_checker
144-
node_param_.boundary_types_to_detect =
145-
declare_parameter<std::vector<std::string>>("boundary_types_to_detect");
129+
node_param_ = NodeParam::init(*this);
130+
param_ = Param::init(*this);
146131

147132
// Vehicle Info
148133
const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo();
149134
vehicle_length_m_ = vehicle_info.vehicle_length_m;
150135

151-
// Core Parameter
152-
param_.footprint_margin_scale = declare_parameter<double>("footprint_margin_scale");
153-
param_.footprint_extra_margin = declare_parameter<double>("footprint_extra_margin");
154-
param_.resample_interval = declare_parameter<double>("resample_interval");
155-
param_.max_deceleration = declare_parameter<double>("max_deceleration");
156-
param_.delay_time = declare_parameter<double>("delay_time");
157-
param_.max_lateral_deviation = declare_parameter<double>("max_lateral_deviation");
158-
param_.max_longitudinal_deviation = declare_parameter<double>("max_longitudinal_deviation");
159-
param_.max_yaw_deviation_deg = declare_parameter<double>("max_yaw_deviation_deg");
160-
param_.ego_nearest_dist_threshold = declare_parameter<double>("ego_nearest_dist_threshold");
161-
param_.ego_nearest_yaw_threshold = declare_parameter<double>("ego_nearest_yaw_threshold");
162-
param_.min_braking_distance = declare_parameter<double>("min_braking_distance");
163-
164136
// Parameter Callback
165137
set_param_res_ =
166138
add_on_set_parameters_callback(std::bind(&LaneDepartureCheckerNode::onParameter, this, _1));
167139

168140
// Core
169-
lane_departure_checker_ = std::make_unique<LaneDepartureChecker>();
170-
lane_departure_checker_->setParam(param_, vehicle_info);
141+
lane_departure_checker_ = std::make_unique<LaneDepartureChecker>(param_, vehicle_info);
171142

172143
// Publisher
173144
processing_time_publisher_ =
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// Copyright 2024 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+
#include "autoware/lane_departure_checker/parameters.hpp"
16+
17+
#include <autoware/universe_utils/ros/parameter.hpp>
18+
#include <rclcpp/node.hpp>
19+
20+
#include <string>
21+
22+
namespace autoware::lane_departure_checker
23+
{
24+
using autoware::universe_utils::getOrDeclareParameter;
25+
26+
Param Param::init(rclcpp::Node & node)
27+
{
28+
Param p;
29+
p.footprint_margin_scale = getOrDeclareParameter<double>(node, "footprint_margin_scale");
30+
p.footprint_extra_margin = getOrDeclareParameter<double>(node, "footprint_extra_margin");
31+
p.resample_interval = getOrDeclareParameter<double>(node, "resample_interval");
32+
p.max_deceleration = getOrDeclareParameter<double>(node, "max_deceleration");
33+
p.delay_time = getOrDeclareParameter<double>(node, "delay_time");
34+
p.max_lateral_deviation = getOrDeclareParameter<double>(node, "max_lateral_deviation");
35+
p.max_longitudinal_deviation = getOrDeclareParameter<double>(node, "max_longitudinal_deviation");
36+
p.max_yaw_deviation_deg = getOrDeclareParameter<double>(node, "max_yaw_deviation_deg");
37+
p.min_braking_distance = getOrDeclareParameter<double>(node, "min_braking_distance");
38+
p.ego_nearest_dist_threshold = getOrDeclareParameter<double>(node, "ego_nearest_dist_threshold");
39+
p.ego_nearest_yaw_threshold = getOrDeclareParameter<double>(node, "ego_nearest_yaw_threshold");
40+
return p;
41+
}
42+
43+
NodeParam NodeParam::init(rclcpp::Node & node)
44+
{
45+
NodeParam p;
46+
p.will_out_of_lane_checker = getOrDeclareParameter<bool>(node, "will_out_of_lane_checker");
47+
p.out_of_lane_checker = getOrDeclareParameter<bool>(node, "out_of_lane_checker");
48+
p.boundary_departure_checker = getOrDeclareParameter<bool>(node, "boundary_departure_checker");
49+
p.update_rate = getOrDeclareParameter<double>(node, "update_rate");
50+
p.visualize_lanelet = getOrDeclareParameter<bool>(node, "visualize_lanelet");
51+
p.include_right_lanes = getOrDeclareParameter<bool>(node, "include_right_lanes");
52+
p.include_left_lanes = getOrDeclareParameter<bool>(node, "include_left_lanes");
53+
p.include_opposite_lanes = getOrDeclareParameter<bool>(node, "include_opposite_lanes");
54+
p.include_conflicting_lanes = getOrDeclareParameter<bool>(node, "include_conflicting_lanes");
55+
p.boundary_types_to_detect =
56+
getOrDeclareParameter<std::vector<std::string>>(node, "boundary_types_to_detect");
57+
return p;
58+
}
59+
} // namespace autoware::lane_departure_checker

planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case1.cpp

+3-4
Original file line numberDiff line numberDiff line change
@@ -564,13 +564,12 @@ int main(int argc, char ** argv)
564564
node.get(), "goal_planner.");
565565
goal_planner_parameter.bus_stop_area.use_bus_stop_area = true;
566566
goal_planner_parameter.lane_departure_check_expansion_margin = 0.2;
567-
const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*node).getVehicleInfo();
568-
autoware::lane_departure_checker::LaneDepartureChecker lane_departure_checker{};
569-
lane_departure_checker.setVehicleInfo(vehicle_info);
570567
autoware::lane_departure_checker::Param lane_departure_checker_params;
571568
lane_departure_checker_params.footprint_extra_margin =
572569
goal_planner_parameter.lane_departure_check_expansion_margin;
573-
lane_departure_checker.setParam(lane_departure_checker_params);
570+
autoware::lane_departure_checker::LaneDepartureChecker lane_departure_checker(
571+
lane_departure_checker_params, vehicle_info);
572+
574573
const auto footprint = vehicle_info.createFootprint();
575574
autoware::behavior_path_planner::GoalSearcher goal_searcher(goal_planner_parameter, footprint);
576575
auto goal_candidates = goal_searcher.search(planner_data);

planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case2.cpp

+2-3
Original file line numberDiff line numberDiff line change
@@ -573,12 +573,11 @@ int main(int argc, char ** argv)
573573
autoware::behavior_path_planner::GoalPlannerModuleManager::initGoalPlannerParameters(
574574
node.get(), "goal_planner.");
575575
const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*node).getVehicleInfo();
576-
autoware::lane_departure_checker::LaneDepartureChecker lane_departure_checker{};
577-
lane_departure_checker.setVehicleInfo(vehicle_info);
578576
autoware::lane_departure_checker::Param lane_departure_checker_params;
579577
lane_departure_checker_params.footprint_extra_margin =
580578
goal_planner_parameter.lane_departure_check_expansion_margin;
581-
lane_departure_checker.setParam(lane_departure_checker_params);
579+
autoware::lane_departure_checker::LaneDepartureChecker lane_departure_checker(
580+
lane_departure_checker_params, vehicle_info);
582581
const auto footprint = vehicle_info.createFootprint();
583582
autoware::behavior_path_planner::GoalSearcher goal_searcher(goal_planner_parameter, footprint);
584583
auto goal_candidates = goal_searcher.search(planner_data);

0 commit comments

Comments
 (0)