From cc9512be8c16138b9e8dd1da7c623a657b3f14c1 Mon Sep 17 00:00:00 2001 From: Kento Yabuuchi Date: Fri, 7 Jun 2024 13:03:14 +0900 Subject: [PATCH 001/142] fix(yabloc): suppress no viable conversion error (#7299) * use tier4_autoware_utils instead of yabloc::Color Signed-off-by: Kento Yabuuchi * use static_cast to convert Color to RGBA Signed-off-by: Kento Yabuuchi * use tier4_autoware_utils instead of yabloc::Color Signed-off-by: Kento Yabuuchi * use static_cast to convert Color to RGBA Signed-off-by: Kento Yabuuchi * style(pre-commit): autofix --------- Signed-off-by: Kento Yabuuchi Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- localization/yabloc/yabloc_common/package.xml | 1 + .../src/ll2_decomposer/ll2_decomposer_core.cpp | 6 +++--- .../src/common/particle_visualize_node.cpp | 3 ++- .../yabloc/yabloc_particle_filter/src/common/visualize.cpp | 3 ++- .../src/gnss_corrector/gnss_corrector_core.cpp | 2 +- .../src/ll2_cost_map/hierarchical_cost_map.cpp | 4 ++-- .../yabloc_pose_initializer/src/camera/marker_module.cpp | 3 ++- 7 files changed, 13 insertions(+), 9 deletions(-) diff --git a/localization/yabloc/yabloc_common/package.xml b/localization/yabloc/yabloc_common/package.xml index de675da5cc2d4..d4c8b71fa6b66 100644 --- a/localization/yabloc/yabloc_common/package.xml +++ b/localization/yabloc/yabloc_common/package.xml @@ -29,6 +29,7 @@ sophus std_msgs tf2_ros + tier4_autoware_utils visualization_msgs ament_lint_auto diff --git a/localization/yabloc/yabloc_common/src/ll2_decomposer/ll2_decomposer_core.cpp b/localization/yabloc/yabloc_common/src/ll2_decomposer/ll2_decomposer_core.cpp index d0dfc87067f7f..1126d6260b911 100644 --- a/localization/yabloc/yabloc_common/src/ll2_decomposer/ll2_decomposer_core.cpp +++ b/localization/yabloc/yabloc_common/src/ll2_decomposer/ll2_decomposer_core.cpp @@ -15,7 +15,7 @@ #include "yabloc_common/ll2_decomposer/ll2_decomposer.hpp" #include -#include +#include #include #include @@ -198,7 +198,7 @@ Ll2Decomposer::MarkerArray Ll2Decomposer::make_sign_marker_msg( marker.header.frame_id = "map"; marker.header.stamp = get_clock()->now(); marker.type = Marker::LINE_STRIP; - marker.color = common::Color(0.6f, 0.6f, 0.6f, 0.999f); + marker.color = tier4_autoware_utils::createMarkerColor(0.6f, 0.6f, 0.6f, 0.999f); marker.scale.x = 0.1; marker.ns = ns; marker.id = id++; @@ -228,7 +228,7 @@ Ll2Decomposer::MarkerArray Ll2Decomposer::make_polygon_marker_msg( marker.header.frame_id = "map"; marker.header.stamp = get_clock()->now(); marker.type = Marker::LINE_STRIP; - marker.color = common::Color(0.4f, 0.4f, 0.8f, 0.999f); + marker.color = tier4_autoware_utils::createMarkerColor(0.4f, 0.4f, 0.8f, 0.999f); marker.scale.x = 0.2; marker.ns = ns; marker.id = id++; diff --git a/localization/yabloc/yabloc_particle_filter/src/common/particle_visualize_node.cpp b/localization/yabloc/yabloc_particle_filter/src/common/particle_visualize_node.cpp index 90cd62883e339..e6e59a836f6db 100644 --- a/localization/yabloc/yabloc_particle_filter/src/common/particle_visualize_node.cpp +++ b/localization/yabloc/yabloc_particle_filter/src/common/particle_visualize_node.cpp @@ -93,7 +93,8 @@ class ParticleVisualize : public rclcpp::Node marker.scale.y = 0.1; marker.scale.z = 0.1; - marker.color = common::color_scale::rainbow(bound_weight(p.weight)); + marker.color = + static_cast(common::color_scale::rainbow(bound_weight(p.weight))); marker.pose.orientation = p.pose.orientation; marker.pose.position.x = p.pose.position.x; marker.pose.position.y = p.pose.position.y; diff --git a/localization/yabloc/yabloc_particle_filter/src/common/visualize.cpp b/localization/yabloc/yabloc_particle_filter/src/common/visualize.cpp index 955ed84fdea2d..888baf0bea0ac 100644 --- a/localization/yabloc/yabloc_particle_filter/src/common/visualize.cpp +++ b/localization/yabloc/yabloc_particle_filter/src/common/visualize.cpp @@ -45,7 +45,8 @@ void ParticleVisualizer::publish(const ParticleArray & msg) marker.scale.x = 0.3; marker.scale.y = 0.1; marker.scale.z = 0.1; - marker.color = common::color_scale::rainbow(boundWeight(p.weight)); + marker.color = + static_cast(common::color_scale::rainbow(boundWeight(p.weight))); marker.pose.orientation = p.pose.orientation; marker.pose.position.x = p.pose.position.x; marker.pose.position.y = p.pose.position.y; diff --git a/localization/yabloc/yabloc_particle_filter/src/gnss_corrector/gnss_corrector_core.cpp b/localization/yabloc/yabloc_particle_filter/src/gnss_corrector/gnss_corrector_core.cpp index b321986240b69..e8c8890561a7f 100644 --- a/localization/yabloc/yabloc_particle_filter/src/gnss_corrector/gnss_corrector_core.cpp +++ b/localization/yabloc/yabloc_particle_filter/src/gnss_corrector/gnss_corrector_core.cpp @@ -136,7 +136,7 @@ void GnssParticleCorrector::publish_marker(const Eigen::Vector3f & position, boo marker.pose.position.z = latest_height_.data; float prob = i / 4.0f; - marker.color = common::color_scale::rainbow(prob); + marker.color = static_cast(common::color_scale::rainbow(prob)); marker.color.a = 0.5f; marker.scale.x = 0.1; drawCircle(marker.points, weight_manager_.inverse_normal_pdf(prob, is_rtk_fixed)); diff --git a/localization/yabloc/yabloc_particle_filter/src/ll2_cost_map/hierarchical_cost_map.cpp b/localization/yabloc/yabloc_particle_filter/src/ll2_cost_map/hierarchical_cost_map.cpp index ebd9c424edf5e..62d8ed826b373 100644 --- a/localization/yabloc/yabloc_particle_filter/src/ll2_cost_map/hierarchical_cost_map.cpp +++ b/localization/yabloc/yabloc_particle_filter/src/ll2_cost_map/hierarchical_cost_map.cpp @@ -18,7 +18,7 @@ #include #include -#include +#include #include @@ -169,7 +169,7 @@ HierarchicalCostMap::MarkerArray HierarchicalCostMap::show_map_range() const marker.header.frame_id = "map"; marker.id = id++; marker.type = Marker::LINE_STRIP; - marker.color = common::Color(0, 0, 1.0f, 1.0f); + marker.color = tier4_autoware_utils::createMarkerColor(0, 0, 1.0f, 1.0f); marker.scale.x = 0.1; Eigen::Vector2f xy = area.real_scale(); marker.points.push_back(point_msg(xy.x(), xy.y())); diff --git a/localization/yabloc/yabloc_pose_initializer/src/camera/marker_module.cpp b/localization/yabloc/yabloc_pose_initializer/src/camera/marker_module.cpp index c6c34f0e28a42..8a5fc65e2fac3 100644 --- a/localization/yabloc/yabloc_pose_initializer/src/camera/marker_module.cpp +++ b/localization/yabloc/yabloc_pose_initializer/src/camera/marker_module.cpp @@ -42,7 +42,8 @@ void MarkerModule::publish_marker( marker.type = Marker::ARROW; marker.id = i; marker.ns = "arrow"; - marker.color = common::color_scale::rainbow(normalize(scores.at(i))); + marker.color = + static_cast(common::color_scale::rainbow(normalize(scores.at(i)))); marker.color.a = 0.5; marker.pose.position.x = position.x(); From d54e1ff0aba56bf5b9fbbde93d76d8cb41f26b2d Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Fri, 7 Jun 2024 13:22:15 +0900 Subject: [PATCH 002/142] feat(obstacle_curise): revert lateral stop margin for unknown objects (#7230) Signed-off-by: Yuki Takagi --- .../config/obstacle_cruise_planner.param.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml b/planning/obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml index 2ccd000657948..08cee3d58152e 100644 --- a/planning/obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml +++ b/planning/obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml @@ -88,7 +88,7 @@ stop: max_lat_margin: 0.3 # lateral margin between the obstacles except for unknown and ego's footprint - max_lat_margin_against_unknown: -0.3 # lateral margin between the unknown obstacles and ego's footprint + max_lat_margin_against_unknown: 0.3 # lateral margin between the unknown obstacles and ego's footprint crossing_obstacle: collision_time_margin : 4.0 # time threshold of collision between obstacle adn ego for cruise or stop [s] From 9202dabc91ebf764090e951a60a6e018fb322a63 Mon Sep 17 00:00:00 2001 From: "Takagi, Isamu" <43976882+isamu-takagi@users.noreply.github.com> Date: Fri, 7 Jun 2024 13:22:40 +0900 Subject: [PATCH 003/142] chore(mrm_comfortable_stop_operator): remove unused main file (#7191) Signed-off-by: Takagi, Isamu --- .../mrm_comfortable_stop_operator_node.cpp | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 system/mrm_comfortable_stop_operator/src/mrm_comfortable_stop_operator/mrm_comfortable_stop_operator_node.cpp diff --git a/system/mrm_comfortable_stop_operator/src/mrm_comfortable_stop_operator/mrm_comfortable_stop_operator_node.cpp b/system/mrm_comfortable_stop_operator/src/mrm_comfortable_stop_operator/mrm_comfortable_stop_operator_node.cpp deleted file mode 100644 index 03bad4198776d..0000000000000 --- a/system/mrm_comfortable_stop_operator/src/mrm_comfortable_stop_operator/mrm_comfortable_stop_operator_node.cpp +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2022 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "mrm_comfortable_stop_operator/mrm_comfortable_stop_operator_core.hpp" - -#include - -int main(int argc, char ** argv) -{ - rclcpp::init(argc, argv); - auto node = std::make_shared(); - rclcpp::spin(node); - rclcpp::shutdown(); - - return 0; -} From c672f861cd1adbb8f5fff580a46bb370b12cf9e0 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Fri, 7 Jun 2024 13:27:22 +0900 Subject: [PATCH 004/142] refactor(sampling_based_planner): add autoware prefix (#7348) Signed-off-by: Maxime CLEMENT --- .github/CODEOWNERS | 8 +- .../motion_planning.launch.xml | 2 +- planning/.pages | 8 +- planning/behavior_path_planner/package.xml | 4 +- .../sampling_planner_module.hpp | 28 +++--- .../sampling_planner_parameters.hpp | 8 +- .../util.hpp | 22 +++-- .../package.xml | 6 +- .../src/sampling_planner_module.cpp | 98 ++++++++++--------- .../CMakeLists.txt | 4 +- .../README.md | 0 .../autoware_bezier_sampler}/bezier.hpp | 10 +- .../bezier_sampling.hpp | 16 +-- .../package.xml | 4 +- .../src/bezier.cpp | 6 +- .../src/bezier_sampling.cpp | 8 +- .../CMakeLists.txt | 4 +- .../README.md | 0 .../autoware_frenet_planner}/conversions.hpp | 14 +-- .../frenet_planner.hpp | 33 ++++--- .../autoware_frenet_planner}/polynomials.hpp | 10 +- .../autoware_frenet_planner}/structures.hpp | 50 +++++----- .../launch/frenet_planner.launch | 2 +- .../package.xml | 6 +- .../src/frenet_planner/frenet_planner.cpp | 33 ++++--- .../src/frenet_planner/polynomials.cpp | 6 +- .../CMakeLists.txt | 8 +- .../README.md | 0 .../autoware_path_sampler}/common_structs.hpp | 18 ++-- .../include/autoware_path_sampler}/node.hpp | 34 ++++--- .../autoware_path_sampler}/parameters.hpp | 14 +-- .../autoware_path_sampler/path_generation.hpp | 52 ++++++++++ .../autoware_path_sampler}/prepare_inputs.hpp | 28 +++--- .../autoware_path_sampler}/type_alias.hpp | 10 +- .../utils/geometry_utils.hpp | 14 +-- .../utils/trajectory_utils.hpp | 23 ++--- .../package.xml | 6 +- .../src/node.cpp | 50 +++++----- .../src/path_generation.cpp | 47 ++++----- .../src/prepare_inputs.cpp | 32 +++--- .../src/utils/trajectory_utils.cpp | 8 +- .../CMakeLists.txt | 6 +- .../README.md | 0 .../constraints/footprint.hpp | 12 +-- .../constraints/hard_constraint.hpp | 12 +-- .../constraints/map_constraints.hpp | 12 +-- .../constraints/soft_constraint.hpp | 14 +-- .../autoware_sampler_common}/structures.hpp | 10 +- .../transform/spline_transform.hpp | 14 +-- .../package.xml | 2 +- .../sampler_common/constraints/footprint.cpp | 8 +- .../constraints/hard_constraint.cpp | 8 +- .../constraints/soft_constraint.cpp | 10 +- .../transform/spline_transform.cpp | 6 +- .../test/test_structures.cpp | 8 +- .../test/test_transform.cpp | 14 +-- .../include/path_sampler/path_generation.hpp | 52 ---------- 57 files changed, 474 insertions(+), 448 deletions(-) rename planning/sampling_based_planner/{bezier_sampler => autoware_bezier_sampler}/CMakeLists.txt (80%) rename planning/sampling_based_planner/{bezier_sampler => autoware_bezier_sampler}/README.md (100%) rename planning/sampling_based_planner/{bezier_sampler/include/bezier_sampler => autoware_bezier_sampler/include/autoware_bezier_sampler}/bezier.hpp (94%) rename planning/sampling_based_planner/{bezier_sampler/include/bezier_sampler => autoware_bezier_sampler/include/autoware_bezier_sampler}/bezier_sampling.hpp (80%) rename planning/sampling_based_planner/{bezier_sampler => autoware_bezier_sampler}/package.xml (89%) rename planning/sampling_based_planner/{bezier_sampler => autoware_bezier_sampler}/src/bezier.cpp (96%) rename planning/sampling_based_planner/{bezier_sampler => autoware_bezier_sampler}/src/bezier_sampling.cpp (94%) rename planning/sampling_based_planner/{frenet_planner => autoware_frenet_planner}/CMakeLists.txt (78%) rename planning/sampling_based_planner/{frenet_planner => autoware_frenet_planner}/README.md (100%) rename planning/sampling_based_planner/{frenet_planner/include/frenet_planner => autoware_frenet_planner/include/autoware_frenet_planner}/conversions.hpp (81%) rename planning/sampling_based_planner/{frenet_planner/include/frenet_planner => autoware_frenet_planner/include/autoware_frenet_planner}/frenet_planner.hpp (67%) rename planning/sampling_based_planner/{frenet_planner/include/frenet_planner => autoware_frenet_planner/include/autoware_frenet_planner}/polynomials.hpp (88%) rename planning/sampling_based_planner/{frenet_planner/include/frenet_planner => autoware_frenet_planner/include/autoware_frenet_planner}/structures.hpp (73%) rename planning/sampling_based_planner/{frenet_planner => autoware_frenet_planner}/launch/frenet_planner.launch (78%) rename planning/sampling_based_planner/{frenet_planner => autoware_frenet_planner}/package.xml (76%) rename planning/sampling_based_planner/{frenet_planner => autoware_frenet_planner}/src/frenet_planner/frenet_planner.cpp (89%) rename planning/sampling_based_planner/{frenet_planner => autoware_frenet_planner}/src/frenet_planner/polynomials.cpp (94%) rename planning/sampling_based_planner/{path_sampler => autoware_path_sampler}/CMakeLists.txt (52%) rename planning/sampling_based_planner/{path_sampler => autoware_path_sampler}/README.md (100%) rename planning/sampling_based_planner/{path_sampler/include/path_sampler => autoware_path_sampler/include/autoware_path_sampler}/common_structs.hpp (87%) rename planning/sampling_based_planner/{path_sampler/include/path_sampler => autoware_path_sampler/include/autoware_path_sampler}/node.hpp (77%) rename planning/sampling_based_planner/{path_sampler/include/path_sampler => autoware_path_sampler/include/autoware_path_sampler}/parameters.hpp (77%) create mode 100644 planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/path_generation.hpp rename planning/sampling_based_planner/{path_sampler/include/path_sampler => autoware_path_sampler/include/autoware_path_sampler}/prepare_inputs.hpp (64%) rename planning/sampling_based_planner/{path_sampler/include/path_sampler => autoware_path_sampler/include/autoware_path_sampler}/type_alias.hpp (88%) rename planning/sampling_based_planner/{path_sampler/include/path_sampler => autoware_path_sampler/include/autoware_path_sampler}/utils/geometry_utils.hpp (81%) rename planning/sampling_based_planner/{path_sampler/include/path_sampler => autoware_path_sampler/include/autoware_path_sampler}/utils/trajectory_utils.hpp (90%) rename planning/sampling_based_planner/{path_sampler => autoware_path_sampler}/package.xml (92%) rename planning/sampling_based_planner/{path_sampler => autoware_path_sampler}/src/node.cpp (94%) rename planning/sampling_based_planner/{path_sampler => autoware_path_sampler}/src/path_generation.cpp (72%) rename planning/sampling_based_planner/{path_sampler => autoware_path_sampler}/src/prepare_inputs.cpp (84%) rename planning/sampling_based_planner/{path_sampler => autoware_path_sampler}/src/utils/trajectory_utils.cpp (95%) rename planning/sampling_based_planner/{sampler_common => autoware_sampler_common}/CMakeLists.txt (81%) rename planning/sampling_based_planner/{sampler_common => autoware_sampler_common}/README.md (100%) rename planning/sampling_based_planner/{sampler_common/include/sampler_common => autoware_sampler_common/include/autoware_sampler_common}/constraints/footprint.hpp (73%) rename planning/sampling_based_planner/{sampler_common/include/sampler_common => autoware_sampler_common/include/autoware_sampler_common}/constraints/hard_constraint.hpp (73%) rename planning/sampling_based_planner/{sampler_common/include/sampler_common => autoware_sampler_common/include/autoware_sampler_common}/constraints/map_constraints.hpp (80%) rename planning/sampling_based_planner/{sampler_common/include/sampler_common => autoware_sampler_common/include/autoware_sampler_common}/constraints/soft_constraint.hpp (74%) rename planning/sampling_based_planner/{sampler_common/include/sampler_common => autoware_sampler_common/include/autoware_sampler_common}/structures.hpp (98%) rename planning/sampling_based_planner/{sampler_common/include/sampler_common => autoware_sampler_common/include/autoware_sampler_common}/transform/spline_transform.hpp (88%) rename planning/sampling_based_planner/{sampler_common => autoware_sampler_common}/package.xml (94%) rename planning/sampling_based_planner/{sampler_common => autoware_sampler_common}/src/sampler_common/constraints/footprint.cpp (87%) rename planning/sampling_based_planner/{sampler_common => autoware_sampler_common}/src/sampler_common/constraints/hard_constraint.cpp (89%) rename planning/sampling_based_planner/{sampler_common => autoware_sampler_common}/src/sampler_common/constraints/soft_constraint.cpp (85%) rename planning/sampling_based_planner/{sampler_common => autoware_sampler_common}/src/sampler_common/transform/spline_transform.cpp (98%) rename planning/sampling_based_planner/{sampler_common => autoware_sampler_common}/test/test_structures.cpp (96%) rename planning/sampling_based_planner/{sampler_common => autoware_sampler_common}/test/test_transform.cpp (85%) delete mode 100644 planning/sampling_based_planner/path_sampler/include/path_sampler/path_generation.hpp diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1ee1d82297baf..603ddac6802a6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -194,10 +194,10 @@ planning/planning_validator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp planning/route_handler/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp takayuki.murooka@tier4.jp zulfaqar.azmi@tier4.jp planning/rtc_interface/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp taiki.tanaka@tier4.jp planning/rtc_replayer/** fumiya.watanabe@tier4.jp taiki.tanaka@tier4.jp -planning/sampling_based_planner/bezier_sampler/** maxime.clement@tier4.jp -planning/sampling_based_planner/frenet_planner/** maxime.clement@tier4.jp -planning/sampling_based_planner/path_sampler/** maxime.clement@tier4.jp -planning/sampling_based_planner/sampler_common/** maxime.clement@tier4.jp +planning/sampling_based_planner/autoware_bezier_sampler/** maxime.clement@tier4.jp +planning/sampling_based_planner/autoware_frenet_planner/** maxime.clement@tier4.jp +planning/sampling_based_planner/autoware_path_sampler/** maxime.clement@tier4.jp +planning/sampling_based_planner/autoware_sampler_common/** maxime.clement@tier4.jp planning/scenario_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/autoware_surround_obstacle_checker/** satoshi.ota@tier4.jp sensing/gnss_poser/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml index 5fcbfe512e3e1..b5173d6a98b2e 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml @@ -80,7 +80,7 @@ - + diff --git a/planning/.pages b/planning/.pages index 4f1d928252185..f7acd1b5efad5 100644 --- a/planning/.pages +++ b/planning/.pages @@ -56,10 +56,10 @@ nav: - 'About Path Smoother': planning/path_smoother - 'Elastic Band': planning/path_smoother/docs/eb - 'Sampling Based Planner': - - 'Path Sample': planning/sampling_based_planner/path_sampler - - 'Common library': planning/sampling_based_planner/sampler_common - - 'Frenet Planner': planning/sampling_based_planner/frenet_planner - - 'Bezier Sampler': planning/sampling_based_planner/bezier_sampler + - 'Path Sample': planning/sampling_based_planner/autoware_path_sampler + - 'Common library': planning/sampling_based_planner/autoware_sampler_common + - 'Frenet Planner': planning/sampling_based_planner/autoware_frenet_planner + - 'Bezier Sampler': planning/sampling_based_planner/autoware_bezier_sampler - 'Surround Obstacle Checker': - 'About Surround Obstacle Checker': planning/autoware_surround_obstacle_checker - 'About Surround Obstacle Checker (Japanese)': planning/autoware_surround_obstacle_checker/surround_obstacle_checker-design.ja diff --git a/planning/behavior_path_planner/package.xml b/planning/behavior_path_planner/package.xml index e4fe3d0e9d3e4..a646621e5b089 100644 --- a/planning/behavior_path_planner/package.xml +++ b/planning/behavior_path_planner/package.xml @@ -38,13 +38,14 @@ autoware_adapi_v1_msgs autoware_behavior_path_planner_common + autoware_frenet_planner + autoware_path_sampler autoware_perception_msgs autoware_planning_msgs autoware_planning_test_manager autoware_vehicle_msgs behaviortree_cpp_v3 freespace_planning_algorithms - frenet_planner geometry_msgs interpolation lane_departure_checker @@ -54,7 +55,6 @@ magic_enum motion_utils object_recognition_utils - path_sampler pluginlib rclcpp rclcpp_components diff --git a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_module.hpp b/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_module.hpp index 3f3d144952d8e..0a5dec8d07b4f 100644 --- a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_module.hpp +++ b/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_module.hpp @@ -21,19 +21,19 @@ #include "autoware_behavior_path_planner_common/utils/drivable_area_expansion/static_drivable_area.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" +#include "autoware_bezier_sampler/bezier_sampling.hpp" +#include "autoware_frenet_planner/frenet_planner.hpp" +#include "autoware_sampler_common/constraints/footprint.hpp" +#include "autoware_sampler_common/constraints/hard_constraint.hpp" +#include "autoware_sampler_common/constraints/soft_constraint.hpp" +#include "autoware_sampler_common/structures.hpp" +#include "autoware_sampler_common/transform/spline_transform.hpp" #include "behavior_path_sampling_planner_module/sampling_planner_parameters.hpp" #include "behavior_path_sampling_planner_module/util.hpp" -#include "bezier_sampler/bezier_sampling.hpp" -#include "frenet_planner/frenet_planner.hpp" #include "lanelet2_extension/utility/query.hpp" #include "lanelet2_extension/utility/utilities.hpp" #include "motion_utils/trajectory/path_with_lane_id.hpp" #include "rclcpp/rclcpp.hpp" -#include "sampler_common/constraints/footprint.hpp" -#include "sampler_common/constraints/hard_constraint.hpp" -#include "sampler_common/constraints/soft_constraint.hpp" -#include "sampler_common/structures.hpp" -#include "sampler_common/transform/spline_transform.hpp" #include "tier4_autoware_utils/geometry/boost_geometry.hpp" #include "tier4_autoware_utils/geometry/boost_polygon_utils.hpp" #include "tier4_autoware_utils/math/constants.hpp" @@ -73,7 +73,7 @@ struct SamplingPlannerData struct SamplingPlannerDebugData { - std::vector sampled_candidates{}; + std::vector sampled_candidates{}; size_t previous_sampled_candidates_nb = 0UL; std::vector obstacles{}; std::vector footprints{}; @@ -231,25 +231,25 @@ class SamplingPlannerModule : public SceneModuleInterface void updateDebugMarkers(); void prepareConstraints( - sampler_common::Constraints & constraints, + autoware::sampler_common::Constraints & constraints, const PredictedObjects::ConstSharedPtr & predicted_objects, const std::vector & left_bound, const std::vector & right_bound) const; - frenet_planner::SamplingParameters prepareSamplingParameters( - const sampler_common::State & initial_state, - const sampler_common::transform::Spline2D & path_spline, + autoware::frenet_planner::SamplingParameters prepareSamplingParameters( + const autoware::sampler_common::State & initial_state, + const autoware::sampler_common::transform::Spline2D & path_spline, const SamplingPlannerInternalParameters & internal_params_); PathWithLaneId convertFrenetPathToPathWithLaneID( - const frenet_planner::Path frenet_path, const lanelet::ConstLanelets & lanelets, + const autoware::frenet_planner::Path frenet_path, const lanelet::ConstLanelets & lanelets, const double path_z); // member // std::shared_ptr params_; std::shared_ptr internal_params_; vehicle_info_util::VehicleInfo vehicle_info_{}; - std::optional prev_sampling_path_ = std::nullopt; + std::optional prev_sampling_path_ = std::nullopt; // move to utils void extendOutputDrivableArea( diff --git a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_parameters.hpp b/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_parameters.hpp index 6e00fefe89574..4ddfbf436ffaf 100644 --- a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_parameters.hpp +++ b/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_parameters.hpp @@ -15,8 +15,8 @@ #ifndef BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_PARAMETERS_HPP_ #define BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_PARAMETERS_HPP_ -#include "bezier_sampler/bezier_sampling.hpp" -#include "sampler_common/structures.hpp" +#include "autoware_bezier_sampler/bezier_sampling.hpp" +#include "autoware_sampler_common/structures.hpp" #include namespace behavior_path_planner @@ -78,12 +78,12 @@ struct Sampling std::vector target_lateral_positions{}; int nb_target_lateral_positions{}; Frenet frenet; - bezier_sampler::SamplingParameters bezier{}; + autoware::bezier_sampler::SamplingParameters bezier{}; }; struct SamplingPlannerInternalParameters { - sampler_common::Constraints constraints; + autoware::sampler_common::Constraints constraints; Sampling sampling; Preprocessing preprocessing{}; }; diff --git a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/util.hpp b/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/util.hpp index ac8ba788cb9bd..2825ead2a9fee 100644 --- a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/util.hpp +++ b/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/util.hpp @@ -14,8 +14,8 @@ #ifndef BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__UTIL_HPP_ #define BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__UTIL_HPP_ -#include "sampler_common/structures.hpp" -#include "sampler_common/transform/spline_transform.hpp" +#include "autoware_sampler_common/structures.hpp" +#include "autoware_sampler_common/transform/spline_transform.hpp" #include @@ -40,18 +40,20 @@ struct SoftConstraintsInputs lanelet::ConstLanelets closest_lanelets_to_goal; behavior_path_planner::PlanResult reference_path; behavior_path_planner::PlanResult prev_module_path; - std::optional prev_path; + std::optional prev_path; lanelet::ConstLanelets current_lanes; }; using SoftConstraintsFunctionVector = std::vector>; + autoware::sampler_common::Path &, const autoware::sampler_common::Constraints &, + const SoftConstraintsInputs &)>>; using HardConstraintsFunctionVector = std::vector>; + autoware::sampler_common::Path &, const autoware::sampler_common::Constraints &, + const MultiPoint2d &)>>; inline std::vector evaluateSoftConstraints( - sampler_common::Path & path, const sampler_common::Constraints & constraints, + autoware::sampler_common::Path & path, const autoware::sampler_common::Constraints & constraints, const SoftConstraintsFunctionVector & soft_constraints_functions, const SoftConstraintsInputs & input_data) { @@ -71,7 +73,7 @@ inline std::vector evaluateSoftConstraints( } inline std::vector evaluateHardConstraints( - sampler_common::Path & path, const sampler_common::Constraints & constraints, + autoware::sampler_common::Path & path, const autoware::sampler_common::Constraints & constraints, const MultiPoint2d & footprint, const HardConstraintsFunctionVector & hard_constraints) { std::vector constraints_results; @@ -86,11 +88,11 @@ inline std::vector evaluateHardConstraints( return constraints_results; } -inline sampler_common::State getInitialState( +inline autoware::sampler_common::State getInitialState( const geometry_msgs::msg::Pose & pose, - const sampler_common::transform::Spline2D & reference_spline) + const autoware::sampler_common::transform::Spline2D & reference_spline) { - sampler_common::State initial_state; + autoware::sampler_common::State initial_state; Point2d initial_state_pose{pose.position.x, pose.position.y}; const auto rpy = tier4_autoware_utils::getRPY(pose.orientation); initial_state.pose = initial_state_pose; diff --git a/planning/behavior_path_sampling_planner_module/package.xml b/planning/behavior_path_sampling_planner_module/package.xml index e6fb0d4d0f573..0583056db4293 100644 --- a/planning/behavior_path_sampling_planner_module/package.xml +++ b/planning/behavior_path_sampling_planner_module/package.xml @@ -14,17 +14,17 @@ autoware_cmake autoware_behavior_path_planner_common + autoware_bezier_sampler + autoware_frenet_planner + autoware_path_sampler autoware_perception_msgs autoware_planning_msgs autoware_planning_test_manager autoware_vehicle_msgs - bezier_sampler - frenet_planner geometry_msgs interpolation lanelet2_extension motion_utils - path_sampler pluginlib rclcpp rclcpp_components diff --git a/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp b/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp index 4b0ecdcd24e14..8788b446e4384 100644 --- a/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp +++ b/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp @@ -44,14 +44,16 @@ SamplingPlannerModule::SamplingPlannerModule( // check if the path is empty hard_constraints_.emplace_back( []( - sampler_common::Path & path, [[maybe_unused]] const sampler_common::Constraints & constraints, + autoware::sampler_common::Path & path, + [[maybe_unused]] const autoware::sampler_common::Constraints & constraints, [[maybe_unused]] const MultiPoint2d & footprint) -> bool { return !path.points.empty() && !path.poses.empty(); }); hard_constraints_.emplace_back( []( - sampler_common::Path & path, const sampler_common::Constraints & constraints, + autoware::sampler_common::Path & path, + const autoware::sampler_common::Constraints & constraints, const MultiPoint2d & footprint) -> bool { if (!footprint.empty()) { path.constraint_results.inside_drivable_area = @@ -71,7 +73,8 @@ SamplingPlannerModule::SamplingPlannerModule( hard_constraints_.emplace_back( []( - sampler_common::Path & path, const sampler_common::Constraints & constraints, + autoware::sampler_common::Path & path, + const autoware::sampler_common::Constraints & constraints, [[maybe_unused]] const MultiPoint2d & footprint) -> bool { if (path.curvatures.empty()) { path.constraint_results.valid_curvature = false; @@ -96,8 +99,8 @@ SamplingPlannerModule::SamplingPlannerModule( // Yaw difference soft constraint cost -> Considering implementation // soft_constraints_.emplace_back( // [&]( - // sampler_common::Path & path, [[maybe_unused]] const sampler_common::Constraints & - // constraints, + // autoware::sampler_common::Path & path, [[maybe_unused]] const + // autoware::sampler_common::Constraints & constraints, // [[maybe_unused]] const SoftConstraintsInputs & input_data) -> double { // if (path.points.empty()) return 0.0; // const auto & goal_pose_yaw = @@ -109,7 +112,8 @@ SamplingPlannerModule::SamplingPlannerModule( // Remaining path length soft_constraints_.emplace_back( [&]( - sampler_common::Path & path, [[maybe_unused]] const sampler_common::Constraints & constraints, + autoware::sampler_common::Path & path, + [[maybe_unused]] const autoware::sampler_common::Constraints & constraints, [[maybe_unused]] const SoftConstraintsInputs & input_data) -> double { if (path.points.empty()) return 0.0; if (path.poses.empty()) return 0.0; @@ -142,8 +146,8 @@ SamplingPlannerModule::SamplingPlannerModule( // Distance to centerline soft_constraints_.emplace_back( [&]( - [[maybe_unused]] sampler_common::Path & path, - [[maybe_unused]] const sampler_common::Constraints & constraints, + [[maybe_unused]] autoware::sampler_common::Path & path, + [[maybe_unused]] const autoware::sampler_common::Constraints & constraints, [[maybe_unused]] const SoftConstraintsInputs & input_data) -> double { if (path.poses.empty()) return 0.0; const auto & last_pose = path.poses.back(); @@ -159,7 +163,8 @@ SamplingPlannerModule::SamplingPlannerModule( // // Curvature cost soft_constraints_.emplace_back( []( - sampler_common::Path & path, [[maybe_unused]] const sampler_common::Constraints & constraints, + autoware::sampler_common::Path & path, + [[maybe_unused]] const autoware::sampler_common::Constraints & constraints, [[maybe_unused]] const SoftConstraintsInputs & input_data) -> double { if (path.curvatures.empty()) return std::numeric_limits::max(); @@ -244,7 +249,7 @@ bool SamplingPlannerModule::isReferencePathSafe() const std::vector hard_constraints_results; auto transform_to_sampling_path = [](const PlanResult plan) { - sampler_common::Path path; + autoware::sampler_common::Path path; for (size_t i = 0; i < plan->points.size(); ++i) { const auto x = plan->points[i].point.pose.position.x; const auto y = plan->points[i].point.pose.position.y; @@ -258,17 +263,20 @@ bool SamplingPlannerModule::isReferencePathSafe() const } return path; }; - sampler_common::Path reference_path = transform_to_sampling_path(prev_module_reference_path); - const auto footprint = sampler_common::constraints::buildFootprintPoints( + autoware::sampler_common::Path reference_path = + transform_to_sampling_path(prev_module_reference_path); + const auto footprint = autoware::sampler_common::constraints::buildFootprintPoints( reference_path, internal_params_->constraints); behavior_path_planner::HardConstraintsFunctionVector hard_constraints_reference_path; hard_constraints_reference_path.emplace_back( []( - sampler_common::Path & path, const sampler_common::Constraints & constraints, + autoware::sampler_common::Path & path, + const autoware::sampler_common::Constraints & constraints, const MultiPoint2d & footprint) -> bool { path.constraint_results.collision_free = - !sampler_common::constraints::has_collision(footprint, constraints.obstacle_polygons); + !autoware::sampler_common::constraints::has_collision( + footprint, constraints.obstacle_polygons); return path.constraint_results.collision_free; }); evaluateHardConstraints( @@ -295,7 +303,7 @@ SamplingPlannerData SamplingPlannerModule::createPlannerData( } PathWithLaneId SamplingPlannerModule::convertFrenetPathToPathWithLaneID( - const frenet_planner::Path frenet_path, const lanelet::ConstLanelets & lanelets, + const autoware::frenet_planner::Path frenet_path, const lanelet::ConstLanelets & lanelets, const double path_z) { auto quaternion_from_rpy = [](double roll, double pitch, double yaw) -> tf2::Quaternion { @@ -348,12 +356,12 @@ PathWithLaneId SamplingPlannerModule::convertFrenetPathToPathWithLaneID( } void SamplingPlannerModule::prepareConstraints( - sampler_common::Constraints & constraints, + autoware::sampler_common::Constraints & constraints, const PredictedObjects::ConstSharedPtr & predicted_objects, const std::vector & left_bound, const std::vector & right_bound) const { - constraints.obstacle_polygons = sampler_common::MultiPolygon2d(); + constraints.obstacle_polygons = autoware::sampler_common::MultiPolygon2d(); constraints.rtree.clear(); size_t i = 0; for (const auto & o : predicted_objects->objects) { @@ -370,7 +378,7 @@ void SamplingPlannerModule::prepareConstraints( // TODO(Maxime): directly use lines instead of polygon - sampler_common::Polygon2d drivable_area_polygon; + autoware::sampler_common::Polygon2d drivable_area_polygon; for (const auto & p : right_bound) { drivable_area_polygon.outer().emplace_back(p.x, p.y); } @@ -392,7 +400,7 @@ BehaviorModuleOutput SamplingPlannerModule::plan() if (reference_path_ptr->points.empty()) { return {}; } - auto reference_spline = [&]() -> sampler_common::transform::Spline2D { + auto reference_spline = [&]() -> autoware::sampler_common::transform::Spline2D { std::vector x; std::vector y; x.reserve(reference_path_ptr->points.size()); @@ -404,19 +412,19 @@ BehaviorModuleOutput SamplingPlannerModule::plan() return {x, y}; }(); - frenet_planner::FrenetState frenet_initial_state; - frenet_planner::SamplingParameters sampling_parameters; + autoware::frenet_planner::FrenetState frenet_initial_state; + autoware::frenet_planner::SamplingParameters sampling_parameters; const auto & pose = planner_data_->self_odometry->pose.pose; - sampler_common::State initial_state = + autoware::sampler_common::State initial_state = behavior_path_planner::getInitialState(pose, reference_spline); sampling_parameters = prepareSamplingParameters(initial_state, reference_spline, *internal_params_); auto set_frenet_state = []( - const sampler_common::State & initial_state, - const sampler_common::transform::Spline2D & reference_spline, - frenet_planner::FrenetState & frenet_initial_state) + const autoware::sampler_common::State & initial_state, + const autoware::sampler_common::transform::Spline2D & reference_spline, + autoware::frenet_planner::FrenetState & frenet_initial_state) { frenet_initial_state.position = initial_state.frenet; @@ -496,14 +504,16 @@ BehaviorModuleOutput SamplingPlannerModule::plan() const int path_divisions = internal_params_->sampling.previous_path_reuse_points_nb; const bool is_extend_previous_path = path_divisions > 0; - std::vector frenet_paths; + std::vector frenet_paths; // Extend prev path if (prev_path_is_valid && is_extend_previous_path) { - frenet_planner::Path prev_path_frenet = prev_sampling_path_.value(); + autoware::frenet_planner::Path prev_path_frenet = prev_sampling_path_.value(); frenet_paths.push_back(prev_path_frenet); - auto get_subset = [](const frenet_planner::Path & path, size_t offset) -> frenet_planner::Path { - frenet_planner::Path s; + auto get_subset = []( + const autoware::frenet_planner::Path & path, + size_t offset) -> autoware::frenet_planner::Path { + autoware::frenet_planner::Path s; s.points = {path.points.begin(), path.points.begin() + offset}; s.curvatures = {path.curvatures.begin(), path.curvatures.begin() + offset}; s.yaws = {path.yaws.begin(), path.yaws.begin() + offset}; @@ -512,7 +522,7 @@ BehaviorModuleOutput SamplingPlannerModule::plan() return s; }; - sampler_common::State current_state; + autoware::sampler_common::State current_state; current_state.pose = {ego_pose.position.x, ego_pose.position.y}; const auto closest_iter = std::min_element( @@ -537,22 +547,22 @@ BehaviorModuleOutput SamplingPlannerModule::plan() const auto reused_path = get_subset(prev_path_frenet, reuse_idx); geometry_msgs::msg::Pose future_pose = reused_path.poses.back(); - sampler_common::State future_state = + autoware::sampler_common::State future_state = behavior_path_planner::getInitialState(future_pose, reference_spline); - frenet_planner::FrenetState frenet_reuse_state; + autoware::frenet_planner::FrenetState frenet_reuse_state; set_frenet_state(future_state, reference_spline, frenet_reuse_state); - frenet_planner::SamplingParameters extension_sampling_parameters = + autoware::frenet_planner::SamplingParameters extension_sampling_parameters = prepareSamplingParameters(future_state, reference_spline, *internal_params_); - auto extension_frenet_paths = frenet_planner::generatePaths( + auto extension_frenet_paths = autoware::frenet_planner::generatePaths( reference_spline, frenet_reuse_state, extension_sampling_parameters); for (auto & p : extension_frenet_paths) { if (!p.points.empty()) frenet_paths.push_back(reused_path.extend(p)); } } } else { - frenet_paths = - frenet_planner::generatePaths(reference_spline, frenet_initial_state, sampling_parameters); + frenet_paths = autoware::frenet_planner::generatePaths( + reference_spline, frenet_initial_state, sampling_parameters); } const auto path_for_calculating_bounds = getPreviousModuleOutput().reference_path; @@ -587,8 +597,8 @@ BehaviorModuleOutput SamplingPlannerModule::plan() std::vector> hard_constraints_results_full; std::vector> soft_constraints_results_full; for (auto & path : frenet_paths) { - const auto footprint = - sampler_common::constraints::buildFootprintPoints(path, internal_params_->constraints); + const auto footprint = autoware::sampler_common::constraints::buildFootprintPoints( + path, internal_params_->constraints); std::vector hard_constraints_results = evaluateHardConstraints(path, internal_params_->constraints, footprint, hard_constraints_); path.constraint_results.valid_curvature = true; @@ -598,7 +608,7 @@ BehaviorModuleOutput SamplingPlannerModule::plan() soft_constraints_results_full.push_back(soft_constraints_results); } - std::vector candidate_paths; + std::vector candidate_paths; const auto move_to_paths = [&candidate_paths](auto & paths_to_move) { candidate_paths.insert( candidate_paths.end(), std::make_move_iterator(paths_to_move.begin()), @@ -917,9 +927,9 @@ DrivableLanes SamplingPlannerModule::generateExpandDrivableLanes( return current_drivable_lanes; } -frenet_planner::SamplingParameters SamplingPlannerModule::prepareSamplingParameters( - const sampler_common::State & initial_state, - const sampler_common::transform::Spline2D & path_spline, +autoware::frenet_planner::SamplingParameters SamplingPlannerModule::prepareSamplingParameters( + const autoware::sampler_common::State & initial_state, + const autoware::sampler_common::transform::Spline2D & path_spline, const SamplingPlannerInternalParameters & params_) { // calculate target lateral positions @@ -953,10 +963,10 @@ frenet_planner::SamplingParameters SamplingPlannerModule::prepareSamplingParamet } else { target_lateral_positions = params_.sampling.target_lateral_positions; } - frenet_planner::SamplingParameters sampling_parameters; + autoware::frenet_planner::SamplingParameters sampling_parameters; sampling_parameters.resolution = params_.sampling.resolution; const auto max_s = path_spline.lastS(); - frenet_planner::SamplingParameter p; + autoware::frenet_planner::SamplingParameter p; for (const auto target_length : params_.sampling.target_lengths) { p.target_state.position.s = std::min(max_s, path_spline.frenet(initial_state.pose).s + std::max(0.0, target_length)); diff --git a/planning/sampling_based_planner/bezier_sampler/CMakeLists.txt b/planning/sampling_based_planner/autoware_bezier_sampler/CMakeLists.txt similarity index 80% rename from planning/sampling_based_planner/bezier_sampler/CMakeLists.txt rename to planning/sampling_based_planner/autoware_bezier_sampler/CMakeLists.txt index 76d0fc99843f1..8d5bd554ab282 100644 --- a/planning/sampling_based_planner/bezier_sampler/CMakeLists.txt +++ b/planning/sampling_based_planner/autoware_bezier_sampler/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) -project(bezier_sampler) +project(autoware_bezier_sampler) find_package(autoware_cmake REQUIRED) autoware_package() @@ -7,7 +7,7 @@ autoware_package() find_package(eigen3_cmake_module REQUIRED) find_package(Eigen3 REQUIRED) -ament_auto_add_library(bezier_sampler SHARED +ament_auto_add_library(autoware_bezier_sampler SHARED src/bezier.cpp src/bezier_sampling.cpp ) diff --git a/planning/sampling_based_planner/bezier_sampler/README.md b/planning/sampling_based_planner/autoware_bezier_sampler/README.md similarity index 100% rename from planning/sampling_based_planner/bezier_sampler/README.md rename to planning/sampling_based_planner/autoware_bezier_sampler/README.md diff --git a/planning/sampling_based_planner/bezier_sampler/include/bezier_sampler/bezier.hpp b/planning/sampling_based_planner/autoware_bezier_sampler/include/autoware_bezier_sampler/bezier.hpp similarity index 94% rename from planning/sampling_based_planner/bezier_sampler/include/bezier_sampler/bezier.hpp rename to planning/sampling_based_planner/autoware_bezier_sampler/include/autoware_bezier_sampler/bezier.hpp index 93c6ec6b87f36..5d16c55d793af 100644 --- a/planning/sampling_based_planner/bezier_sampler/include/bezier_sampler/bezier.hpp +++ b/planning/sampling_based_planner/autoware_bezier_sampler/include/autoware_bezier_sampler/bezier.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEZIER_SAMPLER__BEZIER_HPP_ -#define BEZIER_SAMPLER__BEZIER_HPP_ +#ifndef AUTOWARE_BEZIER_SAMPLER__BEZIER_HPP_ +#define AUTOWARE_BEZIER_SAMPLER__BEZIER_HPP_ #include #include -namespace bezier_sampler +namespace autoware::bezier_sampler { // Coefficients for matrix calculation of the quintic Bézier curve. @@ -70,6 +70,6 @@ class Bezier /// @brief calculate the curvature for the given parameter t [[nodiscard]] double curvature(const double t) const; }; -} // namespace bezier_sampler +} // namespace autoware::bezier_sampler -#endif // BEZIER_SAMPLER__BEZIER_HPP_ +#endif // AUTOWARE_BEZIER_SAMPLER__BEZIER_HPP_ diff --git a/planning/sampling_based_planner/bezier_sampler/include/bezier_sampler/bezier_sampling.hpp b/planning/sampling_based_planner/autoware_bezier_sampler/include/autoware_bezier_sampler/bezier_sampling.hpp similarity index 80% rename from planning/sampling_based_planner/bezier_sampler/include/bezier_sampler/bezier_sampling.hpp rename to planning/sampling_based_planner/autoware_bezier_sampler/include/autoware_bezier_sampler/bezier_sampling.hpp index 18df9dcb796d8..a832ef1f5cd39 100644 --- a/planning/sampling_based_planner/bezier_sampler/include/bezier_sampler/bezier_sampling.hpp +++ b/planning/sampling_based_planner/autoware_bezier_sampler/include/autoware_bezier_sampler/bezier_sampling.hpp @@ -12,17 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEZIER_SAMPLER__BEZIER_SAMPLING_HPP_ -#define BEZIER_SAMPLER__BEZIER_SAMPLING_HPP_ +#ifndef AUTOWARE_BEZIER_SAMPLER__BEZIER_SAMPLING_HPP_ +#define AUTOWARE_BEZIER_SAMPLER__BEZIER_SAMPLING_HPP_ -#include +#include +#include #include #include -#include #include -namespace bezier_sampler +namespace autoware::bezier_sampler { struct SamplingParameters { @@ -38,13 +38,13 @@ struct SamplingParameters /// @details from Section IV of A. Artuñedoet al.: Real-Time Motion Planning Approach for Automated /// Driving in Urban Environments std::vector sample( - const sampler_common::State & initial, const sampler_common::State & final, + const autoware::sampler_common::State & initial, const autoware::sampler_common::State & final, const SamplingParameters & params); /// @brief generate a Bezier curve for the given states, velocities, and accelerations Bezier generate( const Eigen::Vector2d & initial_pose, const Eigen::Vector2d & final_pose, const Eigen::Vector2d & initial_velocity, const Eigen::Vector2d & initial_acceleration, const Eigen::Vector2d & final_velocity, const Eigen::Vector2d & final_acceleration); -} // namespace bezier_sampler +} // namespace autoware::bezier_sampler -#endif // BEZIER_SAMPLER__BEZIER_SAMPLING_HPP_ +#endif // AUTOWARE_BEZIER_SAMPLER__BEZIER_SAMPLING_HPP_ diff --git a/planning/sampling_based_planner/bezier_sampler/package.xml b/planning/sampling_based_planner/autoware_bezier_sampler/package.xml similarity index 89% rename from planning/sampling_based_planner/bezier_sampler/package.xml rename to planning/sampling_based_planner/autoware_bezier_sampler/package.xml index efe65e830871a..62dce46816119 100644 --- a/planning/sampling_based_planner/bezier_sampler/package.xml +++ b/planning/sampling_based_planner/autoware_bezier_sampler/package.xml @@ -1,6 +1,6 @@ - bezier_sampler + autoware_bezier_sampler 0.0.1 Package to sample trajectories using Bézier curves Maxime CLEMENT @@ -11,8 +11,8 @@ autoware_cmake + autoware_sampler_common eigen - sampler_common ament_cmake_ros ament_lint_auto diff --git a/planning/sampling_based_planner/bezier_sampler/src/bezier.cpp b/planning/sampling_based_planner/autoware_bezier_sampler/src/bezier.cpp similarity index 96% rename from planning/sampling_based_planner/bezier_sampler/src/bezier.cpp rename to planning/sampling_based_planner/autoware_bezier_sampler/src/bezier.cpp index fc4c09840f507..9a882ad06659a 100644 --- a/planning/sampling_based_planner/bezier_sampler/src/bezier.cpp +++ b/planning/sampling_based_planner/autoware_bezier_sampler/src/bezier.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include #include -namespace bezier_sampler +namespace autoware::bezier_sampler { Bezier::Bezier(Eigen::Matrix control_points) : control_points_(std::move(control_points)) @@ -117,4 +117,4 @@ double Bezier::heading(const double t) const return std::atan2(vel.y(), vel.x()); } -} // namespace bezier_sampler +} // namespace autoware::bezier_sampler diff --git a/planning/sampling_based_planner/bezier_sampler/src/bezier_sampling.cpp b/planning/sampling_based_planner/autoware_bezier_sampler/src/bezier_sampling.cpp similarity index 94% rename from planning/sampling_based_planner/bezier_sampler/src/bezier_sampling.cpp rename to planning/sampling_based_planner/autoware_bezier_sampler/src/bezier_sampling.cpp index a9fa318980250..e9a1a9ef32de5 100644 --- a/planning/sampling_based_planner/bezier_sampler/src/bezier_sampling.cpp +++ b/planning/sampling_based_planner/autoware_bezier_sampler/src/bezier_sampling.cpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include -namespace bezier_sampler +namespace autoware::bezier_sampler { std::vector sample( - const sampler_common::State & initial, const sampler_common::State & final, + const autoware::sampler_common::State & initial, const autoware::sampler_common::State & final, const SamplingParameters & params) { std::vector curves; @@ -75,4 +75,4 @@ Bezier generate( (1.0 / 20.0) * final_acceleration.transpose(); return Bezier(control_points); } -} // namespace bezier_sampler +} // namespace autoware::bezier_sampler diff --git a/planning/sampling_based_planner/frenet_planner/CMakeLists.txt b/planning/sampling_based_planner/autoware_frenet_planner/CMakeLists.txt similarity index 78% rename from planning/sampling_based_planner/frenet_planner/CMakeLists.txt rename to planning/sampling_based_planner/autoware_frenet_planner/CMakeLists.txt index 0d7918daa215b..f928702a387b9 100644 --- a/planning/sampling_based_planner/frenet_planner/CMakeLists.txt +++ b/planning/sampling_based_planner/autoware_frenet_planner/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) -project(frenet_planner) +project(autoware_frenet_planner) find_package(autoware_cmake REQUIRED) autoware_package() @@ -7,7 +7,7 @@ autoware_package() find_package(eigen3_cmake_module REQUIRED) find_package(Eigen3 REQUIRED) -ament_auto_add_library(frenet_planner SHARED +ament_auto_add_library(autoware_frenet_planner SHARED DIRECTORY src/ ) diff --git a/planning/sampling_based_planner/frenet_planner/README.md b/planning/sampling_based_planner/autoware_frenet_planner/README.md similarity index 100% rename from planning/sampling_based_planner/frenet_planner/README.md rename to planning/sampling_based_planner/autoware_frenet_planner/README.md diff --git a/planning/sampling_based_planner/frenet_planner/include/frenet_planner/conversions.hpp b/planning/sampling_based_planner/autoware_frenet_planner/include/autoware_frenet_planner/conversions.hpp similarity index 81% rename from planning/sampling_based_planner/frenet_planner/include/frenet_planner/conversions.hpp rename to planning/sampling_based_planner/autoware_frenet_planner/include/autoware_frenet_planner/conversions.hpp index f8575d8f65936..dc504ba1386eb 100644 --- a/planning/sampling_based_planner/frenet_planner/include/frenet_planner/conversions.hpp +++ b/planning/sampling_based_planner/autoware_frenet_planner/include/autoware_frenet_planner/conversions.hpp @@ -12,16 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef FRENET_PLANNER__CONVERSIONS_HPP_ -#define FRENET_PLANNER__CONVERSIONS_HPP_ +#ifndef AUTOWARE_FRENET_PLANNER__CONVERSIONS_HPP_ +#define AUTOWARE_FRENET_PLANNER__CONVERSIONS_HPP_ -#include "frenet_planner/polynomials.hpp" +#include "autoware_frenet_planner/polynomials.hpp" -#include +#include #include -namespace frenet_planner +namespace autoware::frenet_planner { /// @brief calculate the lengths and yaws vectors of the given trajectory @@ -44,6 +44,6 @@ inline void calculateLengthsAndYaws(Trajectory & trajectory) const auto last_yaw = trajectory.yaws.empty() ? 0.0 : trajectory.yaws.back(); trajectory.yaws.push_back(last_yaw); } -} // namespace frenet_planner +} // namespace autoware::frenet_planner -#endif // FRENET_PLANNER__CONVERSIONS_HPP_ +#endif // AUTOWARE_FRENET_PLANNER__CONVERSIONS_HPP_ diff --git a/planning/sampling_based_planner/frenet_planner/include/frenet_planner/frenet_planner.hpp b/planning/sampling_based_planner/autoware_frenet_planner/include/autoware_frenet_planner/frenet_planner.hpp similarity index 67% rename from planning/sampling_based_planner/frenet_planner/include/frenet_planner/frenet_planner.hpp rename to planning/sampling_based_planner/autoware_frenet_planner/include/autoware_frenet_planner/frenet_planner.hpp index 7d60214a52722..88eb2f3244e40 100644 --- a/planning/sampling_based_planner/frenet_planner/include/frenet_planner/frenet_planner.hpp +++ b/planning/sampling_based_planner/autoware_frenet_planner/include/autoware_frenet_planner/frenet_planner.hpp @@ -12,34 +12,34 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef FRENET_PLANNER__FRENET_PLANNER_HPP_ -#define FRENET_PLANNER__FRENET_PLANNER_HPP_ +#ifndef AUTOWARE_FRENET_PLANNER__FRENET_PLANNER_HPP_ +#define AUTOWARE_FRENET_PLANNER__FRENET_PLANNER_HPP_ -#include "frenet_planner/structures.hpp" -#include "sampler_common/structures.hpp" -#include "sampler_common/transform/spline_transform.hpp" +#include "autoware_frenet_planner/structures.hpp" +#include "autoware_sampler_common/structures.hpp" +#include "autoware_sampler_common/transform/spline_transform.hpp" #include "tier4_autoware_utils/geometry/geometry.hpp" #include #include -namespace frenet_planner +namespace autoware::frenet_planner { /// @brief generate trajectories relative to the reference for the given initial state and sampling /// parameters std::vector generateTrajectories( - const sampler_common::transform::Spline2D & reference_spline, const FrenetState & initial_state, - const SamplingParameters & sampling_parameters); + const autoware::sampler_common::transform::Spline2D & reference_spline, + const FrenetState & initial_state, const SamplingParameters & sampling_parameters); /// @brief generate trajectories relative to the reference for the given initial state and sampling /// parameters std::vector generateLowVelocityTrajectories( - const sampler_common::transform::Spline2D & reference_spline, const FrenetState & initial_state, - const SamplingParameters & sampling_parameters); + const autoware::sampler_common::transform::Spline2D & reference_spline, + const FrenetState & initial_state, const SamplingParameters & sampling_parameters); /// @brief generate paths relative to the reference for the given initial state and sampling /// parameters std::vector generatePaths( - const sampler_common::transform::Spline2D & reference_spline, const FrenetState & initial_state, - const SamplingParameters & sampling_parameters); + const autoware::sampler_common::transform::Spline2D & reference_spline, + const FrenetState & initial_state, const SamplingParameters & sampling_parameters); /// @brief generate a candidate path /// @details one polynomial for lateral motion (d) is calculated over the longitudinal displacement /// (s): d(s). @@ -58,11 +58,12 @@ Trajectory generateLowVelocityCandidate( const FrenetState & initial_state, const FrenetState & target_state, const double duration, const double time_resolution); /// @brief calculate the cartesian frame of the given path -void calculateCartesian(const sampler_common::transform::Spline2D & reference, Path & path); +void calculateCartesian( + const autoware::sampler_common::transform::Spline2D & reference, Path & path); /// @brief calculate the cartesian frame of the given trajectory void calculateCartesian( - const sampler_common::transform::Spline2D & reference, Trajectory & trajectory); + const autoware::sampler_common::transform::Spline2D & reference, Trajectory & trajectory); -} // namespace frenet_planner +} // namespace autoware::frenet_planner -#endif // FRENET_PLANNER__FRENET_PLANNER_HPP_ +#endif // AUTOWARE_FRENET_PLANNER__FRENET_PLANNER_HPP_ diff --git a/planning/sampling_based_planner/frenet_planner/include/frenet_planner/polynomials.hpp b/planning/sampling_based_planner/autoware_frenet_planner/include/autoware_frenet_planner/polynomials.hpp similarity index 88% rename from planning/sampling_based_planner/frenet_planner/include/frenet_planner/polynomials.hpp rename to planning/sampling_based_planner/autoware_frenet_planner/include/autoware_frenet_planner/polynomials.hpp index 65157c76d5db3..02217ef8ad444 100644 --- a/planning/sampling_based_planner/frenet_planner/include/frenet_planner/polynomials.hpp +++ b/planning/sampling_based_planner/autoware_frenet_planner/include/autoware_frenet_planner/polynomials.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef FRENET_PLANNER__POLYNOMIALS_HPP_ -#define FRENET_PLANNER__POLYNOMIALS_HPP_ +#ifndef AUTOWARE_FRENET_PLANNER__POLYNOMIALS_HPP_ +#define AUTOWARE_FRENET_PLANNER__POLYNOMIALS_HPP_ -namespace frenet_planner +namespace autoware::frenet_planner { class Polynomial { @@ -50,6 +50,6 @@ class Polynomial /// @brief Get the jerk at the given time [[nodiscard]] double jerk(const double t) const; }; -} // namespace frenet_planner +} // namespace autoware::frenet_planner -#endif // FRENET_PLANNER__POLYNOMIALS_HPP_ +#endif // AUTOWARE_FRENET_PLANNER__POLYNOMIALS_HPP_ diff --git a/planning/sampling_based_planner/frenet_planner/include/frenet_planner/structures.hpp b/planning/sampling_based_planner/autoware_frenet_planner/include/autoware_frenet_planner/structures.hpp similarity index 73% rename from planning/sampling_based_planner/frenet_planner/include/frenet_planner/structures.hpp rename to planning/sampling_based_planner/autoware_frenet_planner/include/autoware_frenet_planner/structures.hpp index c44cb5d814d71..d2a71d06a7933 100644 --- a/planning/sampling_based_planner/frenet_planner/include/frenet_planner/structures.hpp +++ b/planning/sampling_based_planner/autoware_frenet_planner/include/autoware_frenet_planner/structures.hpp @@ -12,52 +12,54 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef FRENET_PLANNER__STRUCTURES_HPP_ -#define FRENET_PLANNER__STRUCTURES_HPP_ +#ifndef AUTOWARE_FRENET_PLANNER__STRUCTURES_HPP_ +#define AUTOWARE_FRENET_PLANNER__STRUCTURES_HPP_ -#include "frenet_planner/polynomials.hpp" +#include "autoware_frenet_planner/polynomials.hpp" -#include +#include #include #include -namespace frenet_planner +namespace autoware::frenet_planner { struct FrenetState { - sampler_common::FrenetPoint position = {0, 0}; + autoware::sampler_common::FrenetPoint position = {0, 0}; double lateral_velocity{}; double longitudinal_velocity{}; double lateral_acceleration{}; double longitudinal_acceleration{}; }; -struct Path : sampler_common::Path +struct Path : autoware::sampler_common::Path { - std::vector frenet_points{}; + std::vector frenet_points{}; std::optional lateral_polynomial{}; Path() = default; - explicit Path(const sampler_common::Path & path) : sampler_common::Path(path) {} + explicit Path(const autoware::sampler_common::Path & path) : autoware::sampler_common::Path(path) + { + } void clear() override { - sampler_common::Path::clear(); + autoware::sampler_common::Path::clear(); frenet_points.clear(); lateral_polynomial.reset(); } void reserve(const size_t size) override { - sampler_common::Path::reserve(size); + autoware::sampler_common::Path::reserve(size); frenet_points.reserve(size); } [[nodiscard]] Path extend(const Path & path) const { - Path extended_traj(sampler_common::Path::extend(path)); + Path extended_traj(autoware::sampler_common::Path::extend(path)); extended_traj.frenet_points.insert( extended_traj.frenet_points.end(), frenet_points.begin(), frenet_points.end()); extended_traj.frenet_points.insert( @@ -69,7 +71,7 @@ struct Path : sampler_common::Path [[nodiscard]] Path * subset(const size_t from_idx, const size_t to_idx) const override { - auto * subpath = new Path(*sampler_common::Path::subset(from_idx, to_idx)); + auto * subpath = new Path(*autoware::sampler_common::Path::subset(from_idx, to_idx)); assert(to_idx >= from_idx); subpath->reserve(to_idx - from_idx); @@ -87,19 +89,22 @@ struct SamplingParameter FrenetState target_state; }; -struct Trajectory : sampler_common::Trajectory +struct Trajectory : autoware::sampler_common::Trajectory { - std::vector frenet_points{}; + std::vector frenet_points{}; std::optional lateral_polynomial{}; std::optional longitudinal_polynomial{}; SamplingParameter sampling_parameter; Trajectory() = default; - explicit Trajectory(const sampler_common::Trajectory & traj) : sampler_common::Trajectory(traj) {} + explicit Trajectory(const autoware::sampler_common::Trajectory & traj) + : autoware::sampler_common::Trajectory(traj) + { + } void clear() override { - sampler_common::Trajectory::clear(); + autoware::sampler_common::Trajectory::clear(); frenet_points.clear(); lateral_polynomial.reset(); longitudinal_polynomial.reset(); @@ -107,13 +112,13 @@ struct Trajectory : sampler_common::Trajectory void reserve(const size_t size) override { - sampler_common::Trajectory::reserve(size); + autoware::sampler_common::Trajectory::reserve(size); frenet_points.reserve(size); } [[nodiscard]] Trajectory extend(const Trajectory & traj) const { - Trajectory extended_traj(sampler_common::Trajectory::extend(traj)); + Trajectory extended_traj(autoware::sampler_common::Trajectory::extend(traj)); extended_traj.frenet_points.insert( extended_traj.frenet_points.end(), frenet_points.begin(), frenet_points.end()); extended_traj.frenet_points.insert( @@ -126,7 +131,8 @@ struct Trajectory : sampler_common::Trajectory [[nodiscard]] Trajectory * subset(const size_t from_idx, const size_t to_idx) const override { - auto * sub_trajectory = new Trajectory(*sampler_common::Trajectory::subset(from_idx, to_idx)); + auto * sub_trajectory = + new Trajectory(*autoware::sampler_common::Trajectory::subset(from_idx, to_idx)); assert(to_idx >= from_idx); sub_trajectory->reserve(to_idx - from_idx); @@ -151,6 +157,6 @@ struct SamplingParameters std::vector parameters; double resolution; }; -} // namespace frenet_planner +} // namespace autoware::frenet_planner -#endif // FRENET_PLANNER__STRUCTURES_HPP_ +#endif // AUTOWARE_FRENET_PLANNER__STRUCTURES_HPP_ diff --git a/planning/sampling_based_planner/frenet_planner/launch/frenet_planner.launch b/planning/sampling_based_planner/autoware_frenet_planner/launch/frenet_planner.launch similarity index 78% rename from planning/sampling_based_planner/frenet_planner/launch/frenet_planner.launch rename to planning/sampling_based_planner/autoware_frenet_planner/launch/frenet_planner.launch index 9570d488eaecc..69e5961b9cdb8 100644 --- a/planning/sampling_based_planner/frenet_planner/launch/frenet_planner.launch +++ b/planning/sampling_based_planner/autoware_frenet_planner/launch/frenet_planner.launch @@ -3,7 +3,7 @@ - + diff --git a/planning/sampling_based_planner/frenet_planner/package.xml b/planning/sampling_based_planner/autoware_frenet_planner/package.xml similarity index 76% rename from planning/sampling_based_planner/frenet_planner/package.xml rename to planning/sampling_based_planner/autoware_frenet_planner/package.xml index c378c6ae25e9b..1ba7c8a148007 100644 --- a/planning/sampling_based_planner/frenet_planner/package.xml +++ b/planning/sampling_based_planner/autoware_frenet_planner/package.xml @@ -1,8 +1,8 @@ - frenet_planner + autoware_frenet_planner 0.0.1 - The frenet_planner package for trajectory generation in Frenet frame + The autoware_frenet_planner package for trajectory generation in Frenet frame Maxime CLEMENT Maxime CLEMENT Apache License 2.0 @@ -12,7 +12,7 @@ autoware_cmake autoware_auto_common - sampler_common + autoware_sampler_common ament_cmake_ros ament_lint_auto diff --git a/planning/sampling_based_planner/frenet_planner/src/frenet_planner/frenet_planner.cpp b/planning/sampling_based_planner/autoware_frenet_planner/src/frenet_planner/frenet_planner.cpp similarity index 89% rename from planning/sampling_based_planner/frenet_planner/src/frenet_planner/frenet_planner.cpp rename to planning/sampling_based_planner/autoware_frenet_planner/src/frenet_planner/frenet_planner.cpp index 6f0bef882743c..ba3156c6b085d 100644 --- a/planning/sampling_based_planner/frenet_planner/src/frenet_planner/frenet_planner.cpp +++ b/planning/sampling_based_planner/autoware_frenet_planner/src/frenet_planner/frenet_planner.cpp @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "frenet_planner/frenet_planner.hpp" +#include "autoware_frenet_planner/frenet_planner.hpp" #include +#include +#include +#include +#include +#include #include -#include -#include -#include -#include -#include #include "autoware_planning_msgs/msg/path.hpp" #include @@ -31,11 +31,11 @@ #include #include -namespace frenet_planner +namespace autoware::frenet_planner { std::vector generateTrajectories( - const sampler_common::transform::Spline2D & reference_spline, const FrenetState & initial_state, - const SamplingParameters & sampling_parameters) + const autoware::sampler_common::transform::Spline2D & reference_spline, + const FrenetState & initial_state, const SamplingParameters & sampling_parameters) { std::vector trajectories; trajectories.reserve(sampling_parameters.parameters.size()); @@ -54,8 +54,8 @@ std::vector generateTrajectories( } std::vector generateLowVelocityTrajectories( - const sampler_common::transform::Spline2D & reference_spline, const FrenetState & initial_state, - const SamplingParameters & sampling_parameters) + const autoware::sampler_common::transform::Spline2D & reference_spline, + const FrenetState & initial_state, const SamplingParameters & sampling_parameters) { std::vector trajectories; trajectories.reserve(sampling_parameters.parameters.size()); @@ -73,8 +73,8 @@ std::vector generateLowVelocityTrajectories( } std::vector generatePaths( - const sampler_common::transform::Spline2D & reference_spline, const FrenetState & initial_state, - const SamplingParameters & sampling_parameters) + const autoware::sampler_common::transform::Spline2D & reference_spline, + const FrenetState & initial_state, const SamplingParameters & sampling_parameters) { std::vector candidates; candidates.reserve(sampling_parameters.parameters.size()); @@ -148,7 +148,8 @@ Path generateCandidate( return path; } -void calculateCartesian(const sampler_common::transform::Spline2D & reference, Path & path) +void calculateCartesian( + const autoware::sampler_common::transform::Spline2D & reference, Path & path) { if (!path.frenet_points.empty()) { path.points.reserve(path.frenet_points.size()); @@ -191,7 +192,7 @@ void calculateCartesian(const sampler_common::transform::Spline2D & reference, P } } void calculateCartesian( - const sampler_common::transform::Spline2D & reference, Trajectory & trajectory) + const autoware::sampler_common::transform::Spline2D & reference, Trajectory & trajectory) { if (!trajectory.frenet_points.empty()) { trajectory.points.reserve(trajectory.frenet_points.size()); @@ -240,4 +241,4 @@ void calculateCartesian( } } -} // namespace frenet_planner +} // namespace autoware::frenet_planner diff --git a/planning/sampling_based_planner/frenet_planner/src/frenet_planner/polynomials.cpp b/planning/sampling_based_planner/autoware_frenet_planner/src/frenet_planner/polynomials.cpp similarity index 94% rename from planning/sampling_based_planner/frenet_planner/src/frenet_planner/polynomials.cpp rename to planning/sampling_based_planner/autoware_frenet_planner/src/frenet_planner/polynomials.cpp index 13f71dc88f9d6..b785255cd856c 100644 --- a/planning/sampling_based_planner/frenet_planner/src/frenet_planner/polynomials.cpp +++ b/planning/sampling_based_planner/autoware_frenet_planner/src/frenet_planner/polynomials.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include #include -#include -namespace frenet_planner +namespace autoware::frenet_planner { // @brief Create a polynomial connecting the given initial and target configuration over the given // duration @@ -72,4 +72,4 @@ double Polynomial::jerk(const double t) const const double t2 = t * t; return 60 * a_ * t2 + 24 * b_ * t + 6 * c_; } -} // namespace frenet_planner +} // namespace autoware::frenet_planner diff --git a/planning/sampling_based_planner/path_sampler/CMakeLists.txt b/planning/sampling_based_planner/autoware_path_sampler/CMakeLists.txt similarity index 52% rename from planning/sampling_based_planner/path_sampler/CMakeLists.txt rename to planning/sampling_based_planner/autoware_path_sampler/CMakeLists.txt index 5a5b99f0aff3a..170646b0c0c9a 100644 --- a/planning/sampling_based_planner/path_sampler/CMakeLists.txt +++ b/planning/sampling_based_planner/autoware_path_sampler/CMakeLists.txt @@ -1,16 +1,16 @@ cmake_minimum_required(VERSION 3.14) -project(path_sampler) +project(autoware_path_sampler) find_package(autoware_cmake REQUIRED) autoware_package() -ament_auto_add_library(path_sampler SHARED +ament_auto_add_library(autoware_path_sampler SHARED DIRECTORY src ) # register node -rclcpp_components_register_node(path_sampler - PLUGIN "path_sampler::PathSampler" +rclcpp_components_register_node(autoware_path_sampler + PLUGIN "autoware::path_sampler::PathSampler" EXECUTABLE path_sampler_exe ) diff --git a/planning/sampling_based_planner/path_sampler/README.md b/planning/sampling_based_planner/autoware_path_sampler/README.md similarity index 100% rename from planning/sampling_based_planner/path_sampler/README.md rename to planning/sampling_based_planner/autoware_path_sampler/README.md diff --git a/planning/sampling_based_planner/path_sampler/include/path_sampler/common_structs.hpp b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/common_structs.hpp similarity index 87% rename from planning/sampling_based_planner/path_sampler/include/path_sampler/common_structs.hpp rename to planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/common_structs.hpp index 7cf88cb75e13a..5a8183d8e5926 100644 --- a/planning/sampling_based_planner/path_sampler/include/path_sampler/common_structs.hpp +++ b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/common_structs.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SAMPLER__COMMON_STRUCTS_HPP_ -#define PATH_SAMPLER__COMMON_STRUCTS_HPP_ +#ifndef AUTOWARE_PATH_SAMPLER__COMMON_STRUCTS_HPP_ +#define AUTOWARE_PATH_SAMPLER__COMMON_STRUCTS_HPP_ -#include "path_sampler/type_alias.hpp" +#include "autoware_path_sampler/type_alias.hpp" +#include "autoware_sampler_common/structures.hpp" #include "rclcpp/rclcpp.hpp" -#include "sampler_common/structures.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" @@ -28,7 +28,7 @@ #include #include -namespace path_sampler +namespace autoware::path_sampler { struct PlannerData { @@ -61,7 +61,7 @@ struct TimeKeeper latest_stream.str(""); if (enable_calculation_time_info) { - RCLCPP_INFO_STREAM(rclcpp::get_logger("path_sampler.time"), msg); + RCLCPP_INFO_STREAM(rclcpp::get_logger("autoware_path_sampler.time"), msg); } } @@ -87,7 +87,7 @@ struct TimeKeeper struct DebugData { - std::vector sampled_candidates{}; + std::vector sampled_candidates{}; size_t previous_sampled_candidates_nb = 0UL; std::vector obstacles{}; std::vector footprints{}; @@ -131,6 +131,6 @@ struct EgoNearestParam double dist_threshold{0.0}; double yaw_threshold{0.0}; }; -} // namespace path_sampler +} // namespace autoware::path_sampler -#endif // PATH_SAMPLER__COMMON_STRUCTS_HPP_ +#endif // AUTOWARE_PATH_SAMPLER__COMMON_STRUCTS_HPP_ diff --git a/planning/sampling_based_planner/path_sampler/include/path_sampler/node.hpp b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/node.hpp similarity index 77% rename from planning/sampling_based_planner/path_sampler/include/path_sampler/node.hpp rename to planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/node.hpp index ab9bc71bc79e4..e44c38aed2b53 100644 --- a/planning/sampling_based_planner/path_sampler/include/path_sampler/node.hpp +++ b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/node.hpp @@ -12,17 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SAMPLER__NODE_HPP_ -#define PATH_SAMPLER__NODE_HPP_ +#ifndef AUTOWARE_PATH_SAMPLER__NODE_HPP_ +#define AUTOWARE_PATH_SAMPLER__NODE_HPP_ -#include "path_sampler/common_structs.hpp" -#include "path_sampler/parameters.hpp" -#include "path_sampler/type_alias.hpp" +#include "autoware_path_sampler/common_structs.hpp" +#include "autoware_path_sampler/parameters.hpp" +#include "autoware_path_sampler/type_alias.hpp" +#include "autoware_sampler_common/transform/spline_transform.hpp" #include "rclcpp/rclcpp.hpp" -#include "sampler_common/transform/spline_transform.hpp" #include "vehicle_info_util/vehicle_info_util.hpp" -#include +#include #include #include @@ -30,7 +30,7 @@ #include #include -namespace path_sampler +namespace autoware::path_sampler { class PathSampler : public rclcpp::Node { @@ -54,7 +54,7 @@ class PathSampler : public rclcpp::Node PredictedObjects::SharedPtr in_objects_ptr_ = std::make_shared(); // variables for previous information - std::optional prev_path_; + std::optional prev_path_; // interface publisher rclcpp::Publisher::SharedPtr traj_pub_; @@ -86,8 +86,9 @@ class PathSampler : public rclcpp::Node const std::vector & traj_points, const std::vector & optimized_points) const; void resetPreviousData(); - sampler_common::State getPlanningState( - sampler_common::State & state, const sampler_common::transform::Spline2D & path_spline) const; + autoware::sampler_common::State getPlanningState( + autoware::sampler_common::State & state, + const autoware::sampler_common::transform::Spline2D & path_spline) const; // sub-functions of generateTrajectory void copyZ( @@ -95,13 +96,14 @@ class PathSampler : public rclcpp::Node void copyVelocity( const std::vector & from_traj, std::vector & to_traj, const geometry_msgs::msg::Pose & ego_pose); - sampler_common::Path generatePath(const PlannerData & planner_data); - std::vector generateCandidatesFromPreviousPath( - const PlannerData & planner_data, const sampler_common::transform::Spline2D & path_spline); + autoware::sampler_common::Path generatePath(const PlannerData & planner_data); + std::vector generateCandidatesFromPreviousPath( + const PlannerData & planner_data, + const autoware::sampler_common::transform::Spline2D & path_spline); std::vector generateTrajectoryPoints(const PlannerData & planner_data); void publishVirtualWall(const geometry_msgs::msg::Pose & stop_pose) const; void publishDebugMarker(const std::vector & traj_points) const; }; -} // namespace path_sampler +} // namespace autoware::path_sampler -#endif // PATH_SAMPLER__NODE_HPP_ +#endif // AUTOWARE_PATH_SAMPLER__NODE_HPP_ diff --git a/planning/sampling_based_planner/path_sampler/include/path_sampler/parameters.hpp b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/parameters.hpp similarity index 77% rename from planning/sampling_based_planner/path_sampler/include/path_sampler/parameters.hpp rename to planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/parameters.hpp index 03887d8357e0d..0ce0ea875c066 100644 --- a/planning/sampling_based_planner/path_sampler/include/path_sampler/parameters.hpp +++ b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/parameters.hpp @@ -12,17 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SAMPLER__PARAMETERS_HPP_ -#define PATH_SAMPLER__PARAMETERS_HPP_ +#ifndef AUTOWARE_PATH_SAMPLER__PARAMETERS_HPP_ +#define AUTOWARE_PATH_SAMPLER__PARAMETERS_HPP_ -#include "bezier_sampler/bezier_sampling.hpp" -#include "sampler_common/structures.hpp" +#include "autoware_bezier_sampler/bezier_sampling.hpp" +#include "autoware_sampler_common/structures.hpp" #include struct Parameters { - sampler_common::Constraints constraints; + autoware::sampler_common::Constraints constraints; struct { bool enable_frenet{}; @@ -37,7 +37,7 @@ struct Parameters std::vector target_lateral_velocities{}; std::vector target_lateral_accelerations{}; } frenet; - bezier_sampler::SamplingParameters bezier{}; + autoware::bezier_sampler::SamplingParameters bezier{}; } sampling; struct @@ -54,4 +54,4 @@ struct Parameters } path_reuse{}; }; -#endif // PATH_SAMPLER__PARAMETERS_HPP_ +#endif // AUTOWARE_PATH_SAMPLER__PARAMETERS_HPP_ diff --git a/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/path_generation.hpp b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/path_generation.hpp new file mode 100644 index 0000000000000..ef234f1d8207a --- /dev/null +++ b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/path_generation.hpp @@ -0,0 +1,52 @@ +// Copyright 2023 Tier IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef AUTOWARE_PATH_SAMPLER__PATH_GENERATION_HPP_ +#define AUTOWARE_PATH_SAMPLER__PATH_GENERATION_HPP_ + +#include "autoware_bezier_sampler/bezier_sampling.hpp" +#include "autoware_frenet_planner/structures.hpp" +#include "autoware_path_sampler/parameters.hpp" +#include "autoware_sampler_common/constraints/hard_constraint.hpp" +#include "autoware_sampler_common/structures.hpp" +#include "autoware_sampler_common/transform/spline_transform.hpp" + +#include + +#include + +namespace autoware::path_sampler +{ +/** + * @brief generate candidate paths for the given problem inputs + * @param [in] initial_state initial ego state + * @param [in] path_spline spline of the reference path + * @param [in] base_length base length of the reuse path (= 0.0 if not reusing a previous path) + * @param [in] params parameters + * @return candidate paths + */ +std::vector generateCandidatePaths( + const autoware::sampler_common::State & initial_state, + const autoware::sampler_common::transform::Spline2D & path_spline, const double base_length, + const Parameters & params); + +std::vector generateBezierPaths( + const autoware::sampler_common::State & initial_state, const double base_length, + const autoware::sampler_common::transform::Spline2D & path_spline, const Parameters & params); +std::vector generateFrenetPaths( + const autoware::sampler_common::State & initial_state, const double base_length, + const autoware::sampler_common::transform::Spline2D & path_spline, const Parameters & params); +} // namespace autoware::path_sampler + +#endif // AUTOWARE_PATH_SAMPLER__PATH_GENERATION_HPP_ diff --git a/planning/sampling_based_planner/path_sampler/include/path_sampler/prepare_inputs.hpp b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/prepare_inputs.hpp similarity index 64% rename from planning/sampling_based_planner/path_sampler/include/path_sampler/prepare_inputs.hpp rename to planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/prepare_inputs.hpp index a9a2728b27c49..1b10be1121481 100644 --- a/planning/sampling_based_planner/path_sampler/include/path_sampler/prepare_inputs.hpp +++ b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/prepare_inputs.hpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SAMPLER__PREPARE_INPUTS_HPP_ -#define PATH_SAMPLER__PREPARE_INPUTS_HPP_ +#ifndef AUTOWARE_PATH_SAMPLER__PREPARE_INPUTS_HPP_ +#define AUTOWARE_PATH_SAMPLER__PREPARE_INPUTS_HPP_ -#include "frenet_planner/structures.hpp" -#include "path_sampler/parameters.hpp" -#include "path_sampler/type_alias.hpp" -#include "sampler_common/transform/spline_transform.hpp" +#include "autoware_frenet_planner/structures.hpp" +#include "autoware_path_sampler/parameters.hpp" +#include "autoware_path_sampler/type_alias.hpp" +#include "autoware_sampler_common/transform/spline_transform.hpp" #include #include @@ -35,20 +35,20 @@ #include #include -namespace path_sampler +namespace autoware::path_sampler { /// @brief prepare constraints void prepareConstraints( - sampler_common::Constraints & constraints, const PredictedObjects & predicted_objects, + autoware::sampler_common::Constraints & constraints, const PredictedObjects & predicted_objects, const std::vector & left_bound, const std::vector & right_bound); /// @brief prepare sampling parameters to generate Frenet paths -frenet_planner::SamplingParameters prepareSamplingParameters( - const sampler_common::State & initial_state, const double base_length, - const sampler_common::transform::Spline2D & path_spline, const Parameters & params); +autoware::frenet_planner::SamplingParameters prepareSamplingParameters( + const autoware::sampler_common::State & initial_state, const double base_length, + const autoware::sampler_common::transform::Spline2D & path_spline, const Parameters & params); /// @brief prepare the 2D spline representation of the given Path message -sampler_common::transform::Spline2D preparePathSpline( +autoware::sampler_common::transform::Spline2D preparePathSpline( const std::vector & path_msg, const bool smooth_path); -} // namespace path_sampler +} // namespace autoware::path_sampler -#endif // PATH_SAMPLER__PREPARE_INPUTS_HPP_ +#endif // AUTOWARE_PATH_SAMPLER__PREPARE_INPUTS_HPP_ diff --git a/planning/sampling_based_planner/path_sampler/include/path_sampler/type_alias.hpp b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/type_alias.hpp similarity index 88% rename from planning/sampling_based_planner/path_sampler/include/path_sampler/type_alias.hpp rename to planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/type_alias.hpp index 90e655c086444..95d833c4df47d 100644 --- a/planning/sampling_based_planner/path_sampler/include/path_sampler/type_alias.hpp +++ b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/type_alias.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SAMPLER__TYPE_ALIAS_HPP_ -#define PATH_SAMPLER__TYPE_ALIAS_HPP_ +#ifndef AUTOWARE_PATH_SAMPLER__TYPE_ALIAS_HPP_ +#define AUTOWARE_PATH_SAMPLER__TYPE_ALIAS_HPP_ #include "autoware_perception_msgs/msg/predicted_objects.hpp" #include "autoware_planning_msgs/msg/path.hpp" @@ -28,7 +28,7 @@ #include "tier4_debug_msgs/msg/string_stamped.hpp" #include "visualization_msgs/msg/marker_array.hpp" -namespace path_sampler +namespace autoware::path_sampler { // std_msgs using std_msgs::msg::Header; @@ -46,6 +46,6 @@ using visualization_msgs::msg::Marker; using visualization_msgs::msg::MarkerArray; // debug using tier4_debug_msgs::msg::StringStamped; -} // namespace path_sampler +} // namespace autoware::path_sampler -#endif // PATH_SAMPLER__TYPE_ALIAS_HPP_ +#endif // AUTOWARE_PATH_SAMPLER__TYPE_ALIAS_HPP_ diff --git a/planning/sampling_based_planner/path_sampler/include/path_sampler/utils/geometry_utils.hpp b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/utils/geometry_utils.hpp similarity index 81% rename from planning/sampling_based_planner/path_sampler/include/path_sampler/utils/geometry_utils.hpp rename to planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/utils/geometry_utils.hpp index 875b81b9cd49a..abd2fa367bc7b 100644 --- a/planning/sampling_based_planner/path_sampler/include/path_sampler/utils/geometry_utils.hpp +++ b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/utils/geometry_utils.hpp @@ -12,16 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SAMPLER__UTILS__GEOMETRY_UTILS_HPP_ -#define PATH_SAMPLER__UTILS__GEOMETRY_UTILS_HPP_ +#ifndef AUTOWARE_PATH_SAMPLER__UTILS__GEOMETRY_UTILS_HPP_ +#define AUTOWARE_PATH_SAMPLER__UTILS__GEOMETRY_UTILS_HPP_ +#include "autoware_path_sampler/common_structs.hpp" +#include "autoware_path_sampler/type_alias.hpp" #include "eigen3/Eigen/Core" #include "interpolation/linear_interpolation.hpp" #include "interpolation/spline_interpolation.hpp" #include "interpolation/spline_interpolation_points_2d.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include "path_sampler/common_structs.hpp" -#include "path_sampler/type_alias.hpp" #include "vehicle_info_util/vehicle_info_util.hpp" #include "autoware_planning_msgs/msg/path_point.hpp" @@ -35,7 +35,7 @@ #include #include -namespace path_sampler +namespace autoware::path_sampler { namespace geometry_utils { @@ -52,5 +52,5 @@ bool isSamePoint(const T1 & t1, const T2 & t2) return true; } } // namespace geometry_utils -} // namespace path_sampler -#endif // PATH_SAMPLER__UTILS__GEOMETRY_UTILS_HPP_ +} // namespace autoware::path_sampler +#endif // AUTOWARE_PATH_SAMPLER__UTILS__GEOMETRY_UTILS_HPP_ diff --git a/planning/sampling_based_planner/path_sampler/include/path_sampler/utils/trajectory_utils.hpp b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/utils/trajectory_utils.hpp similarity index 90% rename from planning/sampling_based_planner/path_sampler/include/path_sampler/utils/trajectory_utils.hpp rename to planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/utils/trajectory_utils.hpp index a036dcfe638c2..4f346ae910f44 100644 --- a/planning/sampling_based_planner/path_sampler/include/path_sampler/utils/trajectory_utils.hpp +++ b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/utils/trajectory_utils.hpp @@ -12,17 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SAMPLER__UTILS__TRAJECTORY_UTILS_HPP_ -#define PATH_SAMPLER__UTILS__TRAJECTORY_UTILS_HPP_ +#ifndef AUTOWARE_PATH_SAMPLER__UTILS__TRAJECTORY_UTILS_HPP_ +#define AUTOWARE_PATH_SAMPLER__UTILS__TRAJECTORY_UTILS_HPP_ +#include "autoware_path_sampler/common_structs.hpp" +#include "autoware_path_sampler/type_alias.hpp" +#include "autoware_sampler_common/structures.hpp" #include "eigen3/Eigen/Core" #include "interpolation/linear_interpolation.hpp" #include "interpolation/spline_interpolation.hpp" #include "interpolation/spline_interpolation_points_2d.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include "path_sampler/common_structs.hpp" -#include "path_sampler/type_alias.hpp" -#include "sampler_common/structures.hpp" #include "autoware_planning_msgs/msg/path_point.hpp" #include "autoware_planning_msgs/msg/trajectory.hpp" @@ -33,7 +33,7 @@ #include #include -namespace path_sampler +namespace autoware::path_sampler { namespace trajectory_utils { @@ -95,7 +95,8 @@ std::vector convertToTrajectoryPoints(const std::vector & po return traj_points; } -inline std::vector convertToTrajectoryPoints(const sampler_common::Path & path) +inline std::vector convertToTrajectoryPoints( + const autoware::sampler_common::Path & path) { std::vector traj_points; for (auto i = 0UL; i < path.points.size(); ++i) { @@ -160,7 +161,7 @@ std::optional updateFrontPointForFix( motion_utils::calcSignedArcLength(points, 0, front_fix_point.pose.position); if (0 < lon_offset_to_prev_front) { RCLCPP_WARN( - rclcpp::get_logger("path_sampler.trajectory_utils"), + rclcpp::get_logger("autoware_path_sampler.trajectory_utils"), "Fixed point will not be inserted due to the error during calculation."); return std::nullopt; } @@ -171,7 +172,7 @@ std::optional updateFrontPointForFix( constexpr double max_lat_error = 3.0; if (max_lat_error < dist) { RCLCPP_WARN( - rclcpp::get_logger("path_sampler.trajectory_utils"), + rclcpp::get_logger("autoware_path_sampler.trajectory_utils"), "New Fixed point is too far from points %f [m]", dist); } @@ -193,5 +194,5 @@ void insertStopPoint( std::vector & traj_points, const geometry_msgs::msg::Pose & input_stop_pose, const size_t stop_seg_idx); } // namespace trajectory_utils -} // namespace path_sampler -#endif // PATH_SAMPLER__UTILS__TRAJECTORY_UTILS_HPP_ +} // namespace autoware::path_sampler +#endif // AUTOWARE_PATH_SAMPLER__UTILS__TRAJECTORY_UTILS_HPP_ diff --git a/planning/sampling_based_planner/path_sampler/package.xml b/planning/sampling_based_planner/autoware_path_sampler/package.xml similarity index 92% rename from planning/sampling_based_planner/path_sampler/package.xml rename to planning/sampling_based_planner/autoware_path_sampler/package.xml index a57ff6e6033f6..011da8d469607 100644 --- a/planning/sampling_based_planner/path_sampler/package.xml +++ b/planning/sampling_based_planner/autoware_path_sampler/package.xml @@ -1,7 +1,7 @@ - path_sampler + autoware_path_sampler 0.1.0 Package for the sampling-based path planner Maxime CLEMENT @@ -13,10 +13,10 @@ autoware_cmake + autoware_bezier_sampler + autoware_frenet_planner autoware_perception_msgs autoware_planning_msgs - bezier_sampler - frenet_planner geometry_msgs interpolation motion_utils diff --git a/planning/sampling_based_planner/path_sampler/src/node.cpp b/planning/sampling_based_planner/autoware_path_sampler/src/node.cpp similarity index 94% rename from planning/sampling_based_planner/path_sampler/src/node.cpp rename to planning/sampling_based_planner/autoware_path_sampler/src/node.cpp index 97bafb68c47a8..a82c1b6a52a26 100644 --- a/planning/sampling_based_planner/path_sampler/src/node.cpp +++ b/planning/sampling_based_planner/autoware_path_sampler/src/node.cpp @@ -12,25 +12,25 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "path_sampler/node.hpp" - +#include "autoware_path_sampler/node.hpp" + +#include "autoware_path_sampler/path_generation.hpp" +#include "autoware_path_sampler/prepare_inputs.hpp" +#include "autoware_path_sampler/utils/geometry_utils.hpp" +#include "autoware_path_sampler/utils/trajectory_utils.hpp" +#include "autoware_sampler_common/constraints/hard_constraint.hpp" +#include "autoware_sampler_common/constraints/soft_constraint.hpp" #include "interpolation/spline_interpolation_points_2d.hpp" #include "motion_utils/marker/marker_helper.hpp" #include "motion_utils/trajectory/conversion.hpp" -#include "path_sampler/path_generation.hpp" -#include "path_sampler/prepare_inputs.hpp" -#include "path_sampler/utils/geometry_utils.hpp" -#include "path_sampler/utils/trajectory_utils.hpp" #include "rclcpp/time.hpp" -#include "sampler_common/constraints/hard_constraint.hpp" -#include "sampler_common/constraints/soft_constraint.hpp" #include #include #include -namespace path_sampler +namespace autoware::path_sampler { namespace { @@ -220,8 +220,9 @@ void PathSampler::objectsCallback(const PredictedObjects::SharedPtr msg) in_objects_ptr_ = msg; } -sampler_common::State PathSampler::getPlanningState( - sampler_common::State & state, const sampler_common::transform::Spline2D & path_spline) const +autoware::sampler_common::State PathSampler::getPlanningState( + autoware::sampler_common::State & state, + const autoware::sampler_common::transform::Spline2D & path_spline) const { state.frenet = path_spline.frenet(state.pose); if (params_.preprocessing.force_zero_deviation) { @@ -390,13 +391,14 @@ std::vector PathSampler::generateTrajectory(const PlannerData & return generated_traj_points; } -std::vector PathSampler::generateCandidatesFromPreviousPath( - const PlannerData & planner_data, const sampler_common::transform::Spline2D & path_spline) +std::vector PathSampler::generateCandidatesFromPreviousPath( + const PlannerData & planner_data, + const autoware::sampler_common::transform::Spline2D & path_spline) { - std::vector candidates; + std::vector candidates; if (!prev_path_ || prev_path_->points.size() < 2) return candidates; // Update previous path - sampler_common::State current_state; + autoware::sampler_common::State current_state; current_state.pose = {planner_data.ego_pose.position.x, planner_data.ego_pose.position.y}; current_state.heading = tf2::getYaw(planner_data.ego_pose.orientation); const auto closest_iter = std::min_element( @@ -419,7 +421,7 @@ std::vector PathSampler::generateCandidatesFromPreviousPat const auto reuse_step = prev_path_length / params_.sampling.previous_path_reuse_points_nb; for (double reuse_length = reuse_step; reuse_length <= prev_path_length; reuse_length += reuse_step) { - sampler_common::State reuse_state; + autoware::sampler_common::State reuse_state; size_t reuse_idx = 0; for (reuse_idx = 0; reuse_idx + 1 < prev_path_->lengths.size() && prev_path_->lengths[reuse_idx] < reuse_length; @@ -438,13 +440,13 @@ std::vector PathSampler::generateCandidatesFromPreviousPat return candidates; } -sampler_common::Path PathSampler::generatePath(const PlannerData & planner_data) +autoware::sampler_common::Path PathSampler::generatePath(const PlannerData & planner_data) { time_keeper_ptr_->tic(__func__); - sampler_common::Path generated_path{}; + autoware::sampler_common::Path generated_path{}; if (prev_path_ && prev_path_->points.size() > 1) { - sampler_common::constraints::checkHardConstraints(*prev_path_, params_.constraints); + autoware::sampler_common::constraints::checkHardConstraints(*prev_path_, params_.constraints); if (prev_path_->constraint_results.isValid()) { const auto prev_path_spline = preparePathSpline(trajectory_utils::convertToTrajectoryPoints(*prev_path_), false); @@ -460,7 +462,7 @@ sampler_common::Path PathSampler::generatePath(const PlannerData & planner_data) } const auto path_spline = preparePathSpline(planner_data.traj_points, params_.preprocessing.smooth_reference); - sampler_common::State current_state; + autoware::sampler_common::State current_state; current_state.pose = {planner_data.ego_pose.position.x, planner_data.ego_pose.position.y}; current_state.heading = tf2::getYaw(planner_data.ego_pose.orientation); @@ -476,9 +478,9 @@ sampler_common::Path PathSampler::generatePath(const PlannerData & planner_data) debug_data_.footprints.clear(); for (auto & path : candidate_paths) { const auto footprint = - sampler_common::constraints::checkHardConstraints(path, params_.constraints); + autoware::sampler_common::constraints::checkHardConstraints(path, params_.constraints); debug_data_.footprints.push_back(footprint); - sampler_common::constraints::calculateCost(path, params_.constraints, path_spline); + autoware::sampler_common::constraints::calculateCost(path, params_.constraints, path_spline); } const auto best_path_idx = [](const auto & paths) { auto min_cost = std::numeric_limits::max(); @@ -701,7 +703,7 @@ std::vector PathSampler::extendTrajectory( time_keeper_ptr_->toc(__func__, " "); return resampled_traj_points; } -} // namespace path_sampler +} // namespace autoware::path_sampler #include "rclcpp_components/register_node_macro.hpp" -RCLCPP_COMPONENTS_REGISTER_NODE(path_sampler::PathSampler) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::path_sampler::PathSampler) diff --git a/planning/sampling_based_planner/path_sampler/src/path_generation.cpp b/planning/sampling_based_planner/autoware_path_sampler/src/path_generation.cpp similarity index 72% rename from planning/sampling_based_planner/path_sampler/src/path_generation.cpp rename to planning/sampling_based_planner/autoware_path_sampler/src/path_generation.cpp index 2d1587c7b45a3..63ca5e18f423b 100644 --- a/planning/sampling_based_planner/path_sampler/src/path_generation.cpp +++ b/planning/sampling_based_planner/autoware_path_sampler/src/path_generation.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "path_sampler/path_generation.hpp" +#include "autoware_path_sampler/path_generation.hpp" -#include "sampler_common/structures.hpp" +#include "autoware_sampler_common/structures.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -29,14 +29,14 @@ #include #include -namespace path_sampler +namespace autoware::path_sampler { -std::vector generateCandidatePaths( - const sampler_common::State & initial_state, - const sampler_common::transform::Spline2D & path_spline, const double base_length, +std::vector generateCandidatePaths( + const autoware::sampler_common::State & initial_state, + const autoware::sampler_common::transform::Spline2D & path_spline, const double base_length, const Parameters & params) { - std::vector paths; + std::vector paths; const auto move_to_paths = [&](auto & paths_to_move) { paths.insert( paths.end(), std::make_move_iterator(paths_to_move.begin()), @@ -53,27 +53,27 @@ std::vector generateCandidatePaths( } return paths; } -std::vector generateBezierPaths( - const sampler_common::State & initial_state, const double base_length, - const sampler_common::transform::Spline2D & path_spline, const Parameters & params) +std::vector generateBezierPaths( + const autoware::sampler_common::State & initial_state, const double base_length, + const autoware::sampler_common::transform::Spline2D & path_spline, const Parameters & params) { const auto initial_s = path_spline.frenet(initial_state.pose).s; const auto max_s = path_spline.lastS(); - std::vector bezier_paths; + std::vector bezier_paths; for (const auto target_length : params.sampling.target_lengths) { if (target_length <= base_length) continue; const auto target_s = std::min(max_s, initial_s + target_length - base_length); if (target_s >= max_s) break; - sampler_common::State target_state{}; + autoware::sampler_common::State target_state{}; target_state.pose = path_spline.cartesian({target_s, 0}); target_state.curvature = path_spline.curvature(target_s); target_state.heading = path_spline.yaw(target_s); const auto bezier_samples = - bezier_sampler::sample(initial_state, target_state, params.sampling.bezier); + autoware::bezier_sampler::sample(initial_state, target_state, params.sampling.bezier); const auto step = std::min(0.1, params.sampling.resolution / target_length); for (const auto & bezier : bezier_samples) { - sampler_common::Path path; + autoware::sampler_common::Path path; path.lengths.push_back(0.0); for (double t = 0.0; t <= 1.0; t += step) { const auto x_y = bezier.valueM(t); @@ -93,14 +93,14 @@ std::vector generateBezierPaths( return bezier_paths; } -std::vector generateFrenetPaths( - const sampler_common::State & initial_state, const double base_length, - const sampler_common::transform::Spline2D & path_spline, const Parameters & params) +std::vector generateFrenetPaths( + const autoware::sampler_common::State & initial_state, const double base_length, + const autoware::sampler_common::transform::Spline2D & path_spline, const Parameters & params) { const auto sampling_parameters = prepareSamplingParameters(initial_state, base_length, path_spline, params); - frenet_planner::FrenetState initial_frenet_state; + autoware::frenet_planner::FrenetState initial_frenet_state; initial_frenet_state.position = path_spline.frenet(initial_state.pose); const auto s = initial_frenet_state.position.s; const auto d = initial_frenet_state.position.d; @@ -121,6 +121,7 @@ std::vector generateFrenetPaths( ((1 - path_curvature * d) / (cos_yaw * cos_yaw)) * (initial_state.curvature * ((1 - path_curvature * d) / cos_yaw) - path_curvature); } - return frenet_planner::generatePaths(path_spline, initial_frenet_state, sampling_parameters); + return autoware::frenet_planner::generatePaths( + path_spline, initial_frenet_state, sampling_parameters); } -} // namespace path_sampler +} // namespace autoware::path_sampler diff --git a/planning/sampling_based_planner/path_sampler/src/prepare_inputs.cpp b/planning/sampling_based_planner/autoware_path_sampler/src/prepare_inputs.cpp similarity index 84% rename from planning/sampling_based_planner/path_sampler/src/prepare_inputs.cpp rename to planning/sampling_based_planner/autoware_path_sampler/src/prepare_inputs.cpp index fd52764950ca9..64a09087666ff 100644 --- a/planning/sampling_based_planner/path_sampler/src/prepare_inputs.cpp +++ b/planning/sampling_based_planner/autoware_path_sampler/src/prepare_inputs.cpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "path_sampler/prepare_inputs.hpp" +#include "autoware_path_sampler/prepare_inputs.hpp" -#include "frenet_planner/structures.hpp" -#include "path_sampler/utils/geometry_utils.hpp" -#include "sampler_common/structures.hpp" -#include "sampler_common/transform/spline_transform.hpp" +#include "autoware_frenet_planner/structures.hpp" +#include "autoware_path_sampler/utils/geometry_utils.hpp" +#include "autoware_sampler_common/structures.hpp" +#include "autoware_sampler_common/transform/spline_transform.hpp" #include "tier4_autoware_utils/geometry/boost_polygon_utils.hpp" #include @@ -29,22 +29,22 @@ #include #include -namespace path_sampler +namespace autoware::path_sampler { void prepareConstraints( - sampler_common::Constraints & constraints, const PredictedObjects & predicted_objects, + autoware::sampler_common::Constraints & constraints, const PredictedObjects & predicted_objects, const std::vector & left_bound, const std::vector & right_bound) { - constraints.obstacle_polygons = sampler_common::MultiPolygon2d(); + constraints.obstacle_polygons = autoware::sampler_common::MultiPolygon2d(); for (const auto & o : predicted_objects.objects) if (o.kinematics.initial_twist_with_covariance.twist.linear.x < 0.5) // TODO(Maxime): param constraints.obstacle_polygons.push_back(tier4_autoware_utils::toPolygon2d(o)); constraints.dynamic_obstacles = {}; // TODO(Maxime): not implemented // TODO(Maxime): directly use lines instead of polygon - sampler_common::Polygon2d drivable_area_polygon; + autoware::sampler_common::Polygon2d drivable_area_polygon; for (const auto & p : right_bound) drivable_area_polygon.outer().emplace_back(p.x, p.y); for (auto it = left_bound.rbegin(); it != left_bound.rend(); ++it) drivable_area_polygon.outer().emplace_back(it->x, it->y); @@ -52,9 +52,9 @@ void prepareConstraints( constraints.drivable_polygons = {drivable_area_polygon}; } -frenet_planner::SamplingParameters prepareSamplingParameters( - const sampler_common::State & initial_state, const double base_length, - const sampler_common::transform::Spline2D & path_spline, const Parameters & params) +autoware::frenet_planner::SamplingParameters prepareSamplingParameters( + const autoware::sampler_common::State & initial_state, const double base_length, + const autoware::sampler_common::transform::Spline2D & path_spline, const Parameters & params) { // calculate target lateral positions std::vector target_lateral_positions; @@ -87,10 +87,10 @@ frenet_planner::SamplingParameters prepareSamplingParameters( } else { target_lateral_positions = params.sampling.target_lateral_positions; } - frenet_planner::SamplingParameters sampling_parameters; + autoware::frenet_planner::SamplingParameters sampling_parameters; sampling_parameters.resolution = params.sampling.resolution; const auto max_s = path_spline.lastS(); - frenet_planner::SamplingParameter p; + autoware::frenet_planner::SamplingParameter p; for (const auto target_length : params.sampling.target_lengths) { p.target_state.position.s = std::min( max_s, path_spline.frenet(initial_state.pose).s + std::max(0.0, target_length - base_length)); @@ -109,7 +109,7 @@ frenet_planner::SamplingParameters prepareSamplingParameters( return sampling_parameters; } -sampler_common::transform::Spline2D preparePathSpline( +autoware::sampler_common::transform::Spline2D preparePathSpline( const std::vector & path, const bool smooth_path) { std::vector x; @@ -151,4 +151,4 @@ sampler_common::transform::Spline2D preparePathSpline( } return {x, y}; } -} // namespace path_sampler +} // namespace autoware::path_sampler diff --git a/planning/sampling_based_planner/path_sampler/src/utils/trajectory_utils.cpp b/planning/sampling_based_planner/autoware_path_sampler/src/utils/trajectory_utils.cpp similarity index 95% rename from planning/sampling_based_planner/path_sampler/src/utils/trajectory_utils.cpp rename to planning/sampling_based_planner/autoware_path_sampler/src/utils/trajectory_utils.cpp index 07bd4f32787de..d161d60bc724d 100644 --- a/planning/sampling_based_planner/path_sampler/src/utils/trajectory_utils.cpp +++ b/planning/sampling_based_planner/autoware_path_sampler/src/utils/trajectory_utils.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "path_sampler/utils/trajectory_utils.hpp" +#include "autoware_path_sampler/utils/trajectory_utils.hpp" +#include "autoware_path_sampler/utils/geometry_utils.hpp" #include "motion_utils/resample/resample.hpp" #include "motion_utils/trajectory/conversion.hpp" -#include "path_sampler/utils/geometry_utils.hpp" #include "tf2/utils.h" #include "autoware_planning_msgs/msg/path_point.hpp" @@ -31,7 +31,7 @@ #include #include -namespace path_sampler +namespace autoware::path_sampler { namespace trajectory_utils { @@ -107,4 +107,4 @@ void insertStopPoint( traj_points.insert(traj_points.begin() + stop_seg_idx + 1, additional_traj_point); } } // namespace trajectory_utils -} // namespace path_sampler +} // namespace autoware::path_sampler diff --git a/planning/sampling_based_planner/sampler_common/CMakeLists.txt b/planning/sampling_based_planner/autoware_sampler_common/CMakeLists.txt similarity index 81% rename from planning/sampling_based_planner/sampler_common/CMakeLists.txt rename to planning/sampling_based_planner/autoware_sampler_common/CMakeLists.txt index 5e669a705201e..d82f38d3ec0c0 100644 --- a/planning/sampling_based_planner/sampler_common/CMakeLists.txt +++ b/planning/sampling_based_planner/autoware_sampler_common/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) -project(sampler_common) +project(autoware_sampler_common) find_package(autoware_cmake REQUIRED) autoware_package() @@ -8,7 +8,7 @@ find_package(eigen3_cmake_module REQUIRED) find_package(Eigen3 REQUIRED) find_package(Boost REQUIRED) -ament_auto_add_library(sampler_common SHARED +ament_auto_add_library(autoware_sampler_common SHARED DIRECTORY src/ ) @@ -22,7 +22,7 @@ if(BUILD_TESTING) ) target_link_libraries(test_sampler_common - sampler_common + autoware_sampler_common ) endif() diff --git a/planning/sampling_based_planner/sampler_common/README.md b/planning/sampling_based_planner/autoware_sampler_common/README.md similarity index 100% rename from planning/sampling_based_planner/sampler_common/README.md rename to planning/sampling_based_planner/autoware_sampler_common/README.md diff --git a/planning/sampling_based_planner/sampler_common/include/sampler_common/constraints/footprint.hpp b/planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/constraints/footprint.hpp similarity index 73% rename from planning/sampling_based_planner/sampler_common/include/sampler_common/constraints/footprint.hpp rename to planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/constraints/footprint.hpp index 061f922001a0f..52dd1a83bd99e 100644 --- a/planning/sampling_based_planner/sampler_common/include/sampler_common/constraints/footprint.hpp +++ b/planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/constraints/footprint.hpp @@ -12,18 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SAMPLER_COMMON__CONSTRAINTS__FOOTPRINT_HPP_ -#define SAMPLER_COMMON__CONSTRAINTS__FOOTPRINT_HPP_ +#ifndef AUTOWARE_SAMPLER_COMMON__CONSTRAINTS__FOOTPRINT_HPP_ +#define AUTOWARE_SAMPLER_COMMON__CONSTRAINTS__FOOTPRINT_HPP_ -#include "sampler_common/structures.hpp" +#include "autoware_sampler_common/structures.hpp" -namespace sampler_common::constraints +namespace autoware::sampler_common::constraints { /// @brief Calculate the footprint of the given path /// @param path sequence of pose used to build the footprint /// @param constraints input constraint object containing vehicle footprint offsets /// @return the polygon footprint of the path MultiPoint2d buildFootprintPoints(const Path & path, const Constraints & constraints); -} // namespace sampler_common::constraints +} // namespace autoware::sampler_common::constraints -#endif // SAMPLER_COMMON__CONSTRAINTS__FOOTPRINT_HPP_ +#endif // AUTOWARE_SAMPLER_COMMON__CONSTRAINTS__FOOTPRINT_HPP_ diff --git a/planning/sampling_based_planner/sampler_common/include/sampler_common/constraints/hard_constraint.hpp b/planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/constraints/hard_constraint.hpp similarity index 73% rename from planning/sampling_based_planner/sampler_common/include/sampler_common/constraints/hard_constraint.hpp rename to planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/constraints/hard_constraint.hpp index a314e83b065d7..6098e7c15d33d 100644 --- a/planning/sampling_based_planner/sampler_common/include/sampler_common/constraints/hard_constraint.hpp +++ b/planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/constraints/hard_constraint.hpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SAMPLER_COMMON__CONSTRAINTS__HARD_CONSTRAINT_HPP_ -#define SAMPLER_COMMON__CONSTRAINTS__HARD_CONSTRAINT_HPP_ +#ifndef AUTOWARE_SAMPLER_COMMON__CONSTRAINTS__HARD_CONSTRAINT_HPP_ +#define AUTOWARE_SAMPLER_COMMON__CONSTRAINTS__HARD_CONSTRAINT_HPP_ -#include "sampler_common/structures.hpp" +#include "autoware_sampler_common/structures.hpp" #include -namespace sampler_common::constraints +namespace autoware::sampler_common::constraints { /// @brief Check if the path satisfies the hard constraints MultiPoint2d checkHardConstraints(Path & path, const Constraints & constraints); @@ -27,6 +27,6 @@ bool has_collision( const double min_distance = 0.0); bool satisfyMinMax(const std::vector & values, const double min, const double max); -} // namespace sampler_common::constraints +} // namespace autoware::sampler_common::constraints -#endif // SAMPLER_COMMON__CONSTRAINTS__HARD_CONSTRAINT_HPP_ +#endif // AUTOWARE_SAMPLER_COMMON__CONSTRAINTS__HARD_CONSTRAINT_HPP_ diff --git a/planning/sampling_based_planner/sampler_common/include/sampler_common/constraints/map_constraints.hpp b/planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/constraints/map_constraints.hpp similarity index 80% rename from planning/sampling_based_planner/sampler_common/include/sampler_common/constraints/map_constraints.hpp rename to planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/constraints/map_constraints.hpp index ed04d8104a904..7867efa1fa2db 100644 --- a/planning/sampling_based_planner/sampler_common/include/sampler_common/constraints/map_constraints.hpp +++ b/planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/constraints/map_constraints.hpp @@ -12,16 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SAMPLER_COMMON__CONSTRAINTS__MAP_CONSTRAINTS_HPP_ -#define SAMPLER_COMMON__CONSTRAINTS__MAP_CONSTRAINTS_HPP_ +#ifndef AUTOWARE_SAMPLER_COMMON__CONSTRAINTS__MAP_CONSTRAINTS_HPP_ +#define AUTOWARE_SAMPLER_COMMON__CONSTRAINTS__MAP_CONSTRAINTS_HPP_ -#include "sampler_common/structures.hpp" +#include "autoware_sampler_common/structures.hpp" #include #include -namespace sampler_common::constraints +namespace autoware::sampler_common::constraints { struct MapConstraints { @@ -55,6 +55,6 @@ struct MapConstraints MultiPolygon2d drivable_polygons; std::vector polygon_costs; }; -} // namespace sampler_common::constraints +} // namespace autoware::sampler_common::constraints -#endif // SAMPLER_COMMON__CONSTRAINTS__MAP_CONSTRAINTS_HPP_ +#endif // AUTOWARE_SAMPLER_COMMON__CONSTRAINTS__MAP_CONSTRAINTS_HPP_ diff --git a/planning/sampling_based_planner/sampler_common/include/sampler_common/constraints/soft_constraint.hpp b/planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/constraints/soft_constraint.hpp similarity index 74% rename from planning/sampling_based_planner/sampler_common/include/sampler_common/constraints/soft_constraint.hpp rename to planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/constraints/soft_constraint.hpp index 9fdb9fe137e49..290b6b6674e21 100644 --- a/planning/sampling_based_planner/sampler_common/include/sampler_common/constraints/soft_constraint.hpp +++ b/planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/constraints/soft_constraint.hpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SAMPLER_COMMON__CONSTRAINTS__SOFT_CONSTRAINT_HPP_ -#define SAMPLER_COMMON__CONSTRAINTS__SOFT_CONSTRAINT_HPP_ +#ifndef AUTOWARE_SAMPLER_COMMON__CONSTRAINTS__SOFT_CONSTRAINT_HPP_ +#define AUTOWARE_SAMPLER_COMMON__CONSTRAINTS__SOFT_CONSTRAINT_HPP_ -#include "sampler_common/structures.hpp" -#include "sampler_common/transform/spline_transform.hpp" +#include "autoware_sampler_common/structures.hpp" +#include "autoware_sampler_common/transform/spline_transform.hpp" -namespace sampler_common::constraints +namespace autoware::sampler_common::constraints { /// @brief calculate the curvature cost of the given path void calculateCurvatureCost(Path & path, const Constraints & constraints); @@ -30,6 +30,6 @@ void calculateLateralDeviationCost( /// @brief calculate the overall cost of the given path void calculateCost( Path & path, const Constraints & constraints, const transform::Spline2D & reference); -} // namespace sampler_common::constraints +} // namespace autoware::sampler_common::constraints -#endif // SAMPLER_COMMON__CONSTRAINTS__SOFT_CONSTRAINT_HPP_ +#endif // AUTOWARE_SAMPLER_COMMON__CONSTRAINTS__SOFT_CONSTRAINT_HPP_ diff --git a/planning/sampling_based_planner/sampler_common/include/sampler_common/structures.hpp b/planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/structures.hpp similarity index 98% rename from planning/sampling_based_planner/sampler_common/include/sampler_common/structures.hpp rename to planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/structures.hpp index cef791a01df44..a3ba25b6594e9 100644 --- a/planning/sampling_based_planner/sampler_common/include/sampler_common/structures.hpp +++ b/planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/structures.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SAMPLER_COMMON__STRUCTURES_HPP_ -#define SAMPLER_COMMON__STRUCTURES_HPP_ +#ifndef AUTOWARE_SAMPLER_COMMON__STRUCTURES_HPP_ +#define AUTOWARE_SAMPLER_COMMON__STRUCTURES_HPP_ #include "tier4_autoware_utils/geometry/boost_geometry.hpp" @@ -36,7 +36,7 @@ #include #include -namespace sampler_common +namespace autoware::sampler_common { using tier4_autoware_utils::LinearRing2d; using tier4_autoware_utils::MultiPoint2d; @@ -367,6 +367,6 @@ struct ReusableTrajectory Configuration planning_configuration; // planning configuration at the end of the trajectory }; -} // namespace sampler_common +} // namespace autoware::sampler_common -#endif // SAMPLER_COMMON__STRUCTURES_HPP_ +#endif // AUTOWARE_SAMPLER_COMMON__STRUCTURES_HPP_ diff --git a/planning/sampling_based_planner/sampler_common/include/sampler_common/transform/spline_transform.hpp b/planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/transform/spline_transform.hpp similarity index 88% rename from planning/sampling_based_planner/sampler_common/include/sampler_common/transform/spline_transform.hpp rename to planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/transform/spline_transform.hpp index ce66141832dbf..c5f78c29cb13b 100644 --- a/planning/sampling_based_planner/sampler_common/include/sampler_common/transform/spline_transform.hpp +++ b/planning/sampling_based_planner/autoware_sampler_common/include/autoware_sampler_common/transform/spline_transform.hpp @@ -12,16 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SAMPLER_COMMON__TRANSFORM__SPLINE_TRANSFORM_HPP_ -#define SAMPLER_COMMON__TRANSFORM__SPLINE_TRANSFORM_HPP_ +#ifndef AUTOWARE_SAMPLER_COMMON__TRANSFORM__SPLINE_TRANSFORM_HPP_ +#define AUTOWARE_SAMPLER_COMMON__TRANSFORM__SPLINE_TRANSFORM_HPP_ -#include "sampler_common/structures.hpp" +#include "autoware_sampler_common/structures.hpp" #include -namespace sampler_common::transform +namespace autoware::sampler_common::transform { -using sampler_common::FrenetPoint; +using autoware::sampler_common::FrenetPoint; class Spline { @@ -80,6 +80,6 @@ class Spline2D static std::vector arcLength( const std::vector & x, const std::vector & y); }; -} // namespace sampler_common::transform +} // namespace autoware::sampler_common::transform -#endif // SAMPLER_COMMON__TRANSFORM__SPLINE_TRANSFORM_HPP_ +#endif // AUTOWARE_SAMPLER_COMMON__TRANSFORM__SPLINE_TRANSFORM_HPP_ diff --git a/planning/sampling_based_planner/sampler_common/package.xml b/planning/sampling_based_planner/autoware_sampler_common/package.xml similarity index 94% rename from planning/sampling_based_planner/sampler_common/package.xml rename to planning/sampling_based_planner/autoware_sampler_common/package.xml index 321ca2fd43fef..a1462131d62ad 100644 --- a/planning/sampling_based_planner/sampler_common/package.xml +++ b/planning/sampling_based_planner/autoware_sampler_common/package.xml @@ -1,6 +1,6 @@ - sampler_common + autoware_sampler_common 0.0.1 Common classes and functions for sampling based planners Maxime CLEMENT diff --git a/planning/sampling_based_planner/sampler_common/src/sampler_common/constraints/footprint.cpp b/planning/sampling_based_planner/autoware_sampler_common/src/sampler_common/constraints/footprint.cpp similarity index 87% rename from planning/sampling_based_planner/sampler_common/src/sampler_common/constraints/footprint.cpp rename to planning/sampling_based_planner/autoware_sampler_common/src/sampler_common/constraints/footprint.cpp index 92c8ae65267db..1aafa598142a4 100644 --- a/planning/sampling_based_planner/sampler_common/src/sampler_common/constraints/footprint.cpp +++ b/planning/sampling_based_planner/autoware_sampler_common/src/sampler_common/constraints/footprint.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "sampler_common/constraints/footprint.hpp" +#include "autoware_sampler_common/constraints/footprint.hpp" -#include "sampler_common/structures.hpp" +#include "autoware_sampler_common/structures.hpp" #include @@ -25,7 +25,7 @@ #include #include -namespace sampler_common::constraints +namespace autoware::sampler_common::constraints { namespace @@ -50,4 +50,4 @@ MultiPoint2d buildFootprintPoints(const Path & path, const Constraints & constra } return footprint; } -} // namespace sampler_common::constraints +} // namespace autoware::sampler_common::constraints diff --git a/planning/sampling_based_planner/sampler_common/src/sampler_common/constraints/hard_constraint.cpp b/planning/sampling_based_planner/autoware_sampler_common/src/sampler_common/constraints/hard_constraint.cpp similarity index 89% rename from planning/sampling_based_planner/sampler_common/src/sampler_common/constraints/hard_constraint.cpp rename to planning/sampling_based_planner/autoware_sampler_common/src/sampler_common/constraints/hard_constraint.cpp index 7bb29c8837723..9901b3979259c 100644 --- a/planning/sampling_based_planner/sampler_common/src/sampler_common/constraints/hard_constraint.cpp +++ b/planning/sampling_based_planner/autoware_sampler_common/src/sampler_common/constraints/hard_constraint.cpp @@ -12,16 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "sampler_common/constraints/hard_constraint.hpp" +#include "autoware_sampler_common/constraints/hard_constraint.hpp" -#include "sampler_common/constraints/footprint.hpp" +#include "autoware_sampler_common/constraints/footprint.hpp" #include #include #include -namespace sampler_common::constraints +namespace autoware::sampler_common::constraints { bool satisfyMinMax(const std::vector & values, const double min, const double max) { @@ -56,4 +56,4 @@ MultiPoint2d checkHardConstraints(Path & path, const Constraints & constraints) } return footprint; } -} // namespace sampler_common::constraints +} // namespace autoware::sampler_common::constraints diff --git a/planning/sampling_based_planner/sampler_common/src/sampler_common/constraints/soft_constraint.cpp b/planning/sampling_based_planner/autoware_sampler_common/src/sampler_common/constraints/soft_constraint.cpp similarity index 85% rename from planning/sampling_based_planner/sampler_common/src/sampler_common/constraints/soft_constraint.cpp rename to planning/sampling_based_planner/autoware_sampler_common/src/sampler_common/constraints/soft_constraint.cpp index b1d390e68c49f..71dff81929553 100644 --- a/planning/sampling_based_planner/sampler_common/src/sampler_common/constraints/soft_constraint.cpp +++ b/planning/sampling_based_planner/autoware_sampler_common/src/sampler_common/constraints/soft_constraint.cpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "sampler_common/constraints/soft_constraint.hpp" +#include "autoware_sampler_common/constraints/soft_constraint.hpp" -#include "sampler_common/structures.hpp" -#include "sampler_common/transform/spline_transform.hpp" +#include "autoware_sampler_common/structures.hpp" +#include "autoware_sampler_common/transform/spline_transform.hpp" #include -namespace sampler_common::constraints +namespace autoware::sampler_common::constraints { void calculateCurvatureCost(Path & path, const Constraints & constraints) { @@ -51,4 +51,4 @@ void calculateCost( calculateLengthCost(path, constraints); calculateLateralDeviationCost(path, constraints, reference); } -} // namespace sampler_common::constraints +} // namespace autoware::sampler_common::constraints diff --git a/planning/sampling_based_planner/sampler_common/src/sampler_common/transform/spline_transform.cpp b/planning/sampling_based_planner/autoware_sampler_common/src/sampler_common/transform/spline_transform.cpp similarity index 98% rename from planning/sampling_based_planner/sampler_common/src/sampler_common/transform/spline_transform.cpp rename to planning/sampling_based_planner/autoware_sampler_common/src/sampler_common/transform/spline_transform.cpp index cf5f1e5478fe5..ce473b1768a54 100644 --- a/planning/sampling_based_planner/sampler_common/src/sampler_common/transform/spline_transform.cpp +++ b/planning/sampling_based_planner/autoware_sampler_common/src/sampler_common/transform/spline_transform.cpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include #include #include #include #include -namespace sampler_common::transform +namespace autoware::sampler_common::transform { Spline::Spline(const std::vector & base_index, const std::vector & base_value) { @@ -312,4 +312,4 @@ double Spline2D::yaw(const double s) const return std::atan2(y_vel, x_vel); } -} // namespace sampler_common::transform +} // namespace autoware::sampler_common::transform diff --git a/planning/sampling_based_planner/sampler_common/test/test_structures.cpp b/planning/sampling_based_planner/autoware_sampler_common/test/test_structures.cpp similarity index 96% rename from planning/sampling_based_planner/sampler_common/test/test_structures.cpp rename to planning/sampling_based_planner/autoware_sampler_common/test/test_structures.cpp index 006768c9325e2..77496209290c1 100644 --- a/planning/sampling_based_planner/sampler_common/test/test_structures.cpp +++ b/planning/sampling_based_planner/autoware_sampler_common/test/test_structures.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include #include TEST(Path, extendPath) { - using sampler_common::Path; + using autoware::sampler_common::Path; Path traj1; Path traj2; Path traj3 = traj1.extend(traj2); @@ -43,7 +43,7 @@ TEST(Path, extendPath) TEST(Trajectory, resample) { constexpr auto eps = 1e-6; - using sampler_common::Trajectory; + using autoware::sampler_common::Trajectory; Trajectory t; t.reserve(2); @@ -103,7 +103,7 @@ TEST(Trajectory, resample) TEST(Trajectory, resampleTime) { constexpr auto eps = 1e-6; - using sampler_common::Trajectory; + using autoware::sampler_common::Trajectory; Trajectory t; t.reserve(2); diff --git a/planning/sampling_based_planner/sampler_common/test/test_transform.cpp b/planning/sampling_based_planner/autoware_sampler_common/test/test_transform.cpp similarity index 85% rename from planning/sampling_based_planner/sampler_common/test/test_transform.cpp rename to planning/sampling_based_planner/autoware_sampler_common/test/test_transform.cpp index d7998d7b8879e..6c5f43e929766 100644 --- a/planning/sampling_based_planner/sampler_common/test/test_transform.cpp +++ b/planning/sampling_based_planner/autoware_sampler_common/test/test_transform.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include #include @@ -24,13 +24,13 @@ constexpr auto TOL = 1E-6; // 1µm tolerance TEST(splineTransform, makeSpline2D) { - sampler_common::transform::Spline2D spline1({0.0, 1.0, 2.0}, {0.0, 1.0, 2.0}); - sampler_common::transform::Spline2D spline2({-10.0, 5.0, -2.0}, {99.0, 3.0, -20.0}); + autoware::sampler_common::transform::Spline2D spline1({0.0, 1.0, 2.0}, {0.0, 1.0, 2.0}); + autoware::sampler_common::transform::Spline2D spline2({-10.0, 5.0, -2.0}, {99.0, 3.0, -20.0}); } TEST(splineTransform, toFrenet) { - sampler_common::transform::Spline2D spline({0.0, 1.0, 2.0}, {0.0, 0.0, 0.0}); + autoware::sampler_common::transform::Spline2D spline({0.0, 1.0, 2.0}, {0.0, 0.0, 0.0}); auto frenet = spline.frenet({0.0, 0.0}); EXPECT_NEAR(frenet.s, 0.0, TOL); EXPECT_NEAR(frenet.d, 0.0, TOL); @@ -56,7 +56,7 @@ TEST(splineTransform, toFrenet) EXPECT_NEAR(frenet.s, 1.0, TOL); EXPECT_NEAR(frenet.d, -1.0, TOL); // EDGE CASE 90 deg angle - sampler_common::transform::Spline2D spline2({0.0, 1.0, 2.0}, {0.0, 1.0, 0.0}); + autoware::sampler_common::transform::Spline2D spline2({0.0, 1.0, 2.0}, {0.0, 1.0, 0.0}); frenet = spline2.frenet({1.0, 2.0}); EXPECT_NEAR(frenet.s, 1.0, TOL); EXPECT_NEAR(frenet.d, 1.0, TOL); @@ -64,7 +64,7 @@ TEST(splineTransform, toFrenet) TEST(splineTransform, toCartesian) { - sampler_common::transform::Spline2D spline({0.0, 1.0, 2.0}, {0.0, 0.0, 0.0}); + autoware::sampler_common::transform::Spline2D spline({0.0, 1.0, 2.0}, {0.0, 0.0, 0.0}); auto cart = spline.cartesian({1.0, 0.0}); EXPECT_NEAR(cart.x(), 1.0, TOL); EXPECT_NEAR(cart.y(), 0.0, TOL); @@ -85,7 +85,7 @@ TEST(splineTransform, benchFrenet) auto y = 0.0; std::generate(xs.begin(), xs.end(), [&]() { return ++x; }); std::generate(ys.begin(), ys.end(), [&]() { return ++y; }); - sampler_common::transform::Spline2D spline(xs, ys); + autoware::sampler_common::transform::Spline2D spline(xs, ys); auto points_distribution = std::uniform_real_distribution(0.0, static_cast(size)); constexpr auto nb_iter = 1e3; for (auto iter = 0; iter < nb_iter; ++iter) { diff --git a/planning/sampling_based_planner/path_sampler/include/path_sampler/path_generation.hpp b/planning/sampling_based_planner/path_sampler/include/path_sampler/path_generation.hpp deleted file mode 100644 index 448400236c9f8..0000000000000 --- a/planning/sampling_based_planner/path_sampler/include/path_sampler/path_generation.hpp +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright 2023 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef PATH_SAMPLER__PATH_GENERATION_HPP_ -#define PATH_SAMPLER__PATH_GENERATION_HPP_ - -#include "bezier_sampler/bezier_sampling.hpp" -#include "frenet_planner/structures.hpp" -#include "path_sampler/parameters.hpp" -#include "sampler_common/constraints/hard_constraint.hpp" -#include "sampler_common/structures.hpp" -#include "sampler_common/transform/spline_transform.hpp" - -#include - -#include - -namespace path_sampler -{ -/** - * @brief generate candidate paths for the given problem inputs - * @param [in] initial_state initial ego state - * @param [in] path_spline spline of the reference path - * @param [in] base_length base length of the reuse path (= 0.0 if not reusing a previous path) - * @param [in] params parameters - * @return candidate paths - */ -std::vector generateCandidatePaths( - const sampler_common::State & initial_state, - const sampler_common::transform::Spline2D & path_spline, const double base_length, - const Parameters & params); - -std::vector generateBezierPaths( - const sampler_common::State & initial_state, const double base_length, - const sampler_common::transform::Spline2D & path_spline, const Parameters & params); -std::vector generateFrenetPaths( - const sampler_common::State & initial_state, const double base_length, - const sampler_common::transform::Spline2D & path_spline, const Parameters & params); -} // namespace path_sampler - -#endif // PATH_SAMPLER__PATH_GENERATION_HPP_ From e24f48da29744f3e6bae5acd9286e9429c690026 Mon Sep 17 00:00:00 2001 From: "awf-autoware-bot[bot]" <94889083+awf-autoware-bot[bot]@users.noreply.github.com> Date: Fri, 7 Jun 2024 04:51:30 +0000 Subject: [PATCH 005/142] chore: update CODEOWNERS (#7165) Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions --- .github/CODEOWNERS | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 603ddac6802a6..36b1af9887ed9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,9 +1,9 @@ ### Automatically generated from package.xml ### common/autoware_ad_api_specs/** isamu.takagi@tier4.jp ryohsuke.mitsudome@tier4.jp common/autoware_auto_common/** opensource@apex.ai satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp -common/autoware_perception_rviz_plugin/** opensource@apex.ai satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taiki.tanaka@tier4.jp takeshi.miura@tier4.jp yoshi.ri@tier4.jp common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/** ahmed.ebrahim@leodrive.ai common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/** khalil@leodrive.ai +common/autoware_perception_rviz_plugin/** opensource@apex.ai satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taiki.tanaka@tier4.jp takeshi.miura@tier4.jp yoshi.ri@tier4.jp common/autoware_point_types/** taichi.higashide@tier4.jp common/autoware_testing/** adam.dabrowski@robotec.ai satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp common/bag_time_manager_rviz_plugin/** taiki.tanaka@tier4.jp @@ -144,21 +144,26 @@ perception/traffic_light_map_based_detector/** shunsuke.miura@tier4.jp tao.zhong perception/traffic_light_multi_camera_fusion/** shunsuke.miura@tier4.jp tao.zhong@tier4.jp perception/traffic_light_occlusion_predictor/** shunsuke.miura@tier4.jp tao.zhong@tier4.jp perception/traffic_light_visualization/** tao.zhong@tier4.jp yukihiro.saito@tier4.jp +planning/autoware_behavior_path_dynamic_obstacle_avoidance_module/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp planning/autoware_behavior_path_external_request_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp +planning/autoware_behavior_path_planner_common/** daniel.sanchez@tier4.jp fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp +planning/autoware_behavior_path_static_obstacle_avoidance_module/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/autoware_behavior_velocity_planner/** kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_template_module/** daniel.sanchez@tier4.jp planning/autoware_behavior_velocity_virtual_traffic_light_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_walkway_module/** satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_external_velocity_limit_selector/** satoshi.ota@tier4.jp shinnosuke.hirakawa@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_path_optimizer/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/autoware_planning_test_manager/** kyoichi.sugahara@tier4.jp takamasa.horibe@tier4.jp +planning/autoware_planning_topic_converter/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp planning/autoware_remaining_distance_time_calculator/** ahmed.ebrahim@leodrive.ai planning/autoware_static_centerline_generator/** kosuke.takeuchi@tier4.jp takayuki.murooka@tier4.jp +planning/autoware_velocity_smoother/** fumiya.watanabe@tier4.jp makoto.kurihara@tier4.jp satoshi.ota@tier4.jp takamasa.horibe@tier4.jp planning/behavior_path_avoidance_by_lane_change_module/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp -planning/behavior_path_avoidance_module/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp -planning/behavior_path_dynamic_avoidance_module/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp planning/behavior_path_goal_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_path_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/behavior_path_planner/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp -planning/autoware_behavior_path_planner_common/** daniel.sanchez@tier4.jp fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/behavior_path_sampling_planner_module/** daniel.sanchez@tier4.jp maxime.clement@tier4.jp planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_path_start_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp @@ -172,24 +177,22 @@ planning/behavior_velocity_no_stopping_area_module/** kosuke.takeuchi@tier4.jp s planning/behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_out_of_lane_module/** maxime.clement@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_planner_common/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp -planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_speed_bump_module/** mdogru@leodrive.ai shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_stop_line_module/** fumiya.watanabe@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp zhe.shen@tier4.jp planning/behavior_velocity_traffic_light_module/** mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/costmap_generator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp -planning/autoware_external_velocity_limit_selector/** satoshi.ota@tier4.jp shinnosuke.hirakawa@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/freespace_planner/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/freespace_planning_algorithms/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/mission_planner/** isamu.takagi@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp ryohsuke.mitsudome@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp -planning/motion_velocity_smoother/** fumiya.watanabe@tier4.jp makoto.kurihara@tier4.jp satoshi.ota@tier4.jp takamasa.horibe@tier4.jp +planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/** maxime.clement@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp +planning/motion_velocity_planner/autoware_motion_velocity_planner_common/** maxime.clement@tier4.jp +planning/motion_velocity_planner/autoware_motion_velocity_planner_node/** maxime.clement@tier4.jp planning/objects_of_interest_marker_interface/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp zulfaqar.azmi@tier4.jp -planning/obstacle_avoidance_planner/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/obstacle_cruise_planner/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp planning/obstacle_stop_planner/** berkay@leodrive.ai bnk@leodrive.ai satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp planning/obstacle_velocity_limiter/** maxime.clement@tier4.jp planning/path_smoother/** maxime.clement@tier4.jp takayuki.murooka@tier4.jp planning/planning_test_utils/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp zulfaqar.azmi@tier4.jp -planning/autoware_planning_topic_converter/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp planning/planning_validator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp planning/route_handler/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp takayuki.murooka@tier4.jp zulfaqar.azmi@tier4.jp planning/rtc_interface/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp taiki.tanaka@tier4.jp @@ -199,13 +202,13 @@ planning/sampling_based_planner/autoware_frenet_planner/** maxime.clement@tier4. planning/sampling_based_planner/autoware_path_sampler/** maxime.clement@tier4.jp planning/sampling_based_planner/autoware_sampler_common/** maxime.clement@tier4.jp planning/scenario_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp -planning/autoware_surround_obstacle_checker/** satoshi.ota@tier4.jp +planning/autoware_surround_obstacle_checker/** go.sakayori@tier4.jp satoshi.ota@tier4.jp sensing/gnss_poser/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp sensing/image_diagnostics/** dai.nguyen@tier4.jp yoshi.ri@tier4.jp sensing/image_transport_decompressor/** kenzo.lobos@tier4.jp yukihiro.saito@tier4.jp sensing/imu_corrector/** koji.minoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp sensing/livox/livox_tag_filter/** kenzo.lobos@tier4.jp ryohsuke.mitsudome@tier4.jp -sensing/pointcloud_preprocessor/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp kenzo.lobos@tier4.jp kyoichi.sugahara@tier4.jp shunsuke.miura@tier4.jp yihsiang.fang@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp +sensing/pointcloud_preprocessor/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp david.wong@tier4.jp kenzo.lobos@tier4.jp kyoichi.sugahara@tier4.jp melike@leodrive.ai shunsuke.miura@tier4.jp yihsiang.fang@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp sensing/radar_scan_to_pointcloud2/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp sensing/radar_static_pointcloud_filter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp sensing/radar_threshold_filter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp @@ -240,9 +243,9 @@ system/topic_state_monitor/** ryohsuke.mitsudome@tier4.jp system/velodyne_monitor/** fumihito.ito@tier4.jp tools/reaction_analyzer/** berkay@leodrive.ai vehicle/accel_brake_map_calibrator/** taiki.tanaka@tier4.jp takeshi.miura@tier4.jp tomoya.kimura@tier4.jp +vehicle/autoware_steer_offset_estimator/** taiki.tanaka@tier4.jp vehicle/external_cmd_converter/** takamasa.horibe@tier4.jp vehicle/raw_vehicle_cmd_converter/** makoto.kurihara@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp -vehicle/autoware_steer_offset_estimator/** taiki.tanaka@tier4.jp vehicle/vehicle_info_util/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp ### Copied from .github/CODEOWNERS-manual ### From e752cadf2ac200ef9f927f28336ce8e88cd4eb97 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Fri, 7 Jun 2024 14:22:15 +0900 Subject: [PATCH 006/142] refactor(behavior velocity intersection)!: prefix package and namespace with autoware_ (#7315) Signed-off-by: Mamoru Sobue --- planning/.pages | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/intersection.param.yaml | 0 .../docs/data-structure.drawio.svg | 0 .../intersection-attention-ll-rr.drawio.svg | 0 .../intersection-attention-lr-rl.drawio.svg | 0 ...intersection-attention-straight.drawio.svg | 0 .../docs/intersection-attention.drawio.svg | 0 .../docs/intersection-stoplines.drawio.svg | 0 .../docs/intersection-topology.drawio.svg | 0 .../docs/merge_from_private.png | Bin .../docs/occlusion-with-tl.drawio.svg | 0 .../docs/occlusion-without-tl.drawio.svg | 0 .../docs/occlusion-wo-tl-creeping.png | Bin .../docs/occlusion_grid.drawio.svg | 0 .../docs/pass-judge-line.drawio.svg | 0 .../docs/signal-phase-group.drawio.svg | 0 .../docs/static-occlusion-timeout.png | Bin .../docs/stuck-vehicle.drawio.svg | 0 ...traffic-light-specific-behavior.drawio.svg | 0 .../docs/ttc.gif | Bin .../docs/ugly-intersection.drawio.svg | 0 .../docs/upstream-velocity.drawio.svg | 0 .../docs/yield-stuck.drawio.svg | 0 .../package.xml | 4 +- .../plugins.xml | 4 + .../scripts/ttc.py | 0 .../src/debug.cpp | 0 .../src/decision_result.cpp | 4 +- .../src/decision_result.hpp | 4 +- .../src/interpolated_path_info.hpp | 4 +- .../src/intersection_lanelets.cpp | 4 +- .../src/intersection_lanelets.hpp | 4 +- .../src/intersection_stoplines.hpp | 4 +- .../src/manager.cpp | 0 .../src/manager.hpp | 0 .../src/object_manager.cpp | 18 +-- .../src/object_manager.hpp | 9 +- .../src/result.hpp | 4 +- .../src/scene_intersection.cpp | 138 ++++++++---------- .../src/scene_intersection.hpp | 86 +++++------ .../src/scene_intersection_collision.cpp | 79 +++++----- .../src/scene_intersection_occlusion.cpp | 4 +- .../src/scene_intersection_prepare_data.cpp | 42 +++--- .../src/scene_intersection_stuck.cpp | 21 ++- .../src/scene_merge_from_private_road.cpp | 2 +- .../src/scene_merge_from_private_road.hpp | 0 .../src/util.cpp | 9 +- .../src/util.hpp | 7 +- .../README.md | 2 +- .../package.xml | 2 +- .../test/src/test_node_interface.cpp | 4 +- .../plugins.xml | 4 - 54 files changed, 212 insertions(+), 255 deletions(-) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/CMakeLists.txt (93%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/README.md (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/config/intersection.param.yaml (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/data-structure.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/intersection-attention-ll-rr.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/intersection-attention-lr-rl.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/intersection-attention-straight.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/intersection-attention.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/intersection-stoplines.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/intersection-topology.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/merge_from_private.png (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/occlusion-with-tl.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/occlusion-without-tl.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/occlusion-wo-tl-creeping.png (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/occlusion_grid.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/pass-judge-line.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/signal-phase-group.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/static-occlusion-timeout.png (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/stuck-vehicle.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/traffic-light-specific-behavior.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/ttc.gif (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/ugly-intersection.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/upstream-velocity.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/docs/yield-stuck.drawio.svg (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/package.xml (91%) create mode 100644 planning/autoware_behavior_velocity_intersection_module/plugins.xml rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/scripts/ttc.py (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/debug.cpp (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/decision_result.cpp (96%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/decision_result.hpp (97%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/interpolated_path_info.hpp (93%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/intersection_lanelets.cpp (97%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/intersection_lanelets.hpp (98%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/intersection_stoplines.hpp (95%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/manager.cpp (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/manager.hpp (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/object_manager.cpp (95%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/object_manager.hpp (96%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/result.hpp (93%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/scene_intersection.cpp (93%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/scene_intersection.hpp (89%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/scene_intersection_collision.cpp (94%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/scene_intersection_occlusion.cpp (99%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/scene_intersection_prepare_data.cpp (96%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/scene_intersection_stuck.cpp (95%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/scene_merge_from_private_road.cpp (99%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/scene_merge_from_private_road.hpp (100%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/util.cpp (97%) rename planning/{behavior_velocity_intersection_module => autoware_behavior_velocity_intersection_module}/src/util.hpp (95%) delete mode 100644 planning/behavior_velocity_intersection_module/plugins.xml diff --git a/planning/.pages b/planning/.pages index f7acd1b5efad5..29b0f6a2cde56 100644 --- a/planning/.pages +++ b/planning/.pages @@ -25,7 +25,7 @@ nav: - 'Crosswalk': planning/behavior_velocity_crosswalk_module - 'Detection Area': planning/behavior_velocity_detection_area_module - 'Dynamic Obstacle Stop': planning/behavior_velocity_dynamic_obstacle_stop_module - - 'Intersection': planning/behavior_velocity_intersection_module + - 'Intersection': planning/autoware_behavior_velocity_intersection_module - 'No Drivable Lane': planning/behavior_velocity_no_drivable_lane_module - 'No Stopping Area': planning/behavior_velocity_no_stopping_area_module - 'Occlusion Spot': planning/behavior_velocity_occlusion_spot_module diff --git a/planning/behavior_velocity_intersection_module/CMakeLists.txt b/planning/autoware_behavior_velocity_intersection_module/CMakeLists.txt similarity index 93% rename from planning/behavior_velocity_intersection_module/CMakeLists.txt rename to planning/autoware_behavior_velocity_intersection_module/CMakeLists.txt index c02b5a3852722..f3b31001978e9 100644 --- a/planning/behavior_velocity_intersection_module/CMakeLists.txt +++ b/planning/autoware_behavior_velocity_intersection_module/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(behavior_velocity_intersection_module) +project(autoware_behavior_velocity_intersection_module) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/planning/behavior_velocity_intersection_module/README.md b/planning/autoware_behavior_velocity_intersection_module/README.md similarity index 100% rename from planning/behavior_velocity_intersection_module/README.md rename to planning/autoware_behavior_velocity_intersection_module/README.md diff --git a/planning/behavior_velocity_intersection_module/config/intersection.param.yaml b/planning/autoware_behavior_velocity_intersection_module/config/intersection.param.yaml similarity index 100% rename from planning/behavior_velocity_intersection_module/config/intersection.param.yaml rename to planning/autoware_behavior_velocity_intersection_module/config/intersection.param.yaml diff --git a/planning/behavior_velocity_intersection_module/docs/data-structure.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/data-structure.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/data-structure.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/data-structure.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/intersection-attention-ll-rr.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/intersection-attention-ll-rr.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/intersection-attention-ll-rr.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/intersection-attention-ll-rr.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/intersection-attention-lr-rl.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/intersection-attention-lr-rl.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/intersection-attention-lr-rl.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/intersection-attention-lr-rl.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/intersection-attention-straight.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/intersection-attention-straight.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/intersection-attention-straight.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/intersection-attention-straight.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/intersection-attention.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/intersection-attention.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/intersection-attention.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/intersection-attention.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/intersection-stoplines.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/intersection-stoplines.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/intersection-stoplines.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/intersection-stoplines.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/intersection-topology.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/intersection-topology.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/intersection-topology.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/intersection-topology.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/merge_from_private.png b/planning/autoware_behavior_velocity_intersection_module/docs/merge_from_private.png similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/merge_from_private.png rename to planning/autoware_behavior_velocity_intersection_module/docs/merge_from_private.png diff --git a/planning/behavior_velocity_intersection_module/docs/occlusion-with-tl.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/occlusion-with-tl.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/occlusion-with-tl.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/occlusion-with-tl.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/occlusion-without-tl.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/occlusion-without-tl.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/occlusion-without-tl.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/occlusion-without-tl.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/occlusion-wo-tl-creeping.png b/planning/autoware_behavior_velocity_intersection_module/docs/occlusion-wo-tl-creeping.png similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/occlusion-wo-tl-creeping.png rename to planning/autoware_behavior_velocity_intersection_module/docs/occlusion-wo-tl-creeping.png diff --git a/planning/behavior_velocity_intersection_module/docs/occlusion_grid.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/occlusion_grid.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/occlusion_grid.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/occlusion_grid.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/pass-judge-line.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/pass-judge-line.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/pass-judge-line.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/pass-judge-line.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/signal-phase-group.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/signal-phase-group.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/signal-phase-group.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/signal-phase-group.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/static-occlusion-timeout.png b/planning/autoware_behavior_velocity_intersection_module/docs/static-occlusion-timeout.png similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/static-occlusion-timeout.png rename to planning/autoware_behavior_velocity_intersection_module/docs/static-occlusion-timeout.png diff --git a/planning/behavior_velocity_intersection_module/docs/stuck-vehicle.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/stuck-vehicle.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/stuck-vehicle.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/stuck-vehicle.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/traffic-light-specific-behavior.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/traffic-light-specific-behavior.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/traffic-light-specific-behavior.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/traffic-light-specific-behavior.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/ttc.gif b/planning/autoware_behavior_velocity_intersection_module/docs/ttc.gif similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/ttc.gif rename to planning/autoware_behavior_velocity_intersection_module/docs/ttc.gif diff --git a/planning/behavior_velocity_intersection_module/docs/ugly-intersection.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/ugly-intersection.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/ugly-intersection.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/ugly-intersection.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/upstream-velocity.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/upstream-velocity.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/upstream-velocity.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/upstream-velocity.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/docs/yield-stuck.drawio.svg b/planning/autoware_behavior_velocity_intersection_module/docs/yield-stuck.drawio.svg similarity index 100% rename from planning/behavior_velocity_intersection_module/docs/yield-stuck.drawio.svg rename to planning/autoware_behavior_velocity_intersection_module/docs/yield-stuck.drawio.svg diff --git a/planning/behavior_velocity_intersection_module/package.xml b/planning/autoware_behavior_velocity_intersection_module/package.xml similarity index 91% rename from planning/behavior_velocity_intersection_module/package.xml rename to planning/autoware_behavior_velocity_intersection_module/package.xml index 3694a395b3a53..204a267594c03 100644 --- a/planning/behavior_velocity_intersection_module/package.xml +++ b/planning/autoware_behavior_velocity_intersection_module/package.xml @@ -1,9 +1,9 @@ - behavior_velocity_intersection_module + autoware_behavior_velocity_intersection_module 0.1.0 - The behavior_velocity_intersection_module package + The autoware_behavior_velocity_intersection_module package Mamoru Sobue Takayuki Murooka diff --git a/planning/autoware_behavior_velocity_intersection_module/plugins.xml b/planning/autoware_behavior_velocity_intersection_module/plugins.xml new file mode 100644 index 0000000000000..d30fbb46e050e --- /dev/null +++ b/planning/autoware_behavior_velocity_intersection_module/plugins.xml @@ -0,0 +1,4 @@ + + + + diff --git a/planning/behavior_velocity_intersection_module/scripts/ttc.py b/planning/autoware_behavior_velocity_intersection_module/scripts/ttc.py similarity index 100% rename from planning/behavior_velocity_intersection_module/scripts/ttc.py rename to planning/autoware_behavior_velocity_intersection_module/scripts/ttc.py diff --git a/planning/behavior_velocity_intersection_module/src/debug.cpp b/planning/autoware_behavior_velocity_intersection_module/src/debug.cpp similarity index 100% rename from planning/behavior_velocity_intersection_module/src/debug.cpp rename to planning/autoware_behavior_velocity_intersection_module/src/debug.cpp diff --git a/planning/behavior_velocity_intersection_module/src/decision_result.cpp b/planning/autoware_behavior_velocity_intersection_module/src/decision_result.cpp similarity index 96% rename from planning/behavior_velocity_intersection_module/src/decision_result.cpp rename to planning/autoware_behavior_velocity_intersection_module/src/decision_result.cpp index 7ed896d1b4b55..0dc0e3aab4b87 100644 --- a/planning/behavior_velocity_intersection_module/src/decision_result.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/decision_result.cpp @@ -14,7 +14,7 @@ #include "decision_result.hpp" -namespace behavior_velocity_planner::intersection +namespace behavior_velocity_planner { std::string formatDecisionResult(const DecisionResult & decision_result) { @@ -65,4 +65,4 @@ std::string formatDecisionResult(const DecisionResult & decision_result) return ""; } -} // namespace behavior_velocity_planner::intersection +} // namespace behavior_velocity_planner diff --git a/planning/behavior_velocity_intersection_module/src/decision_result.hpp b/planning/autoware_behavior_velocity_intersection_module/src/decision_result.hpp similarity index 97% rename from planning/behavior_velocity_intersection_module/src/decision_result.hpp rename to planning/autoware_behavior_velocity_intersection_module/src/decision_result.hpp index 5f642db3a462d..bf0b5520f7a32 100644 --- a/planning/behavior_velocity_intersection_module/src/decision_result.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/decision_result.hpp @@ -19,7 +19,7 @@ #include #include -namespace behavior_velocity_planner::intersection +namespace behavior_velocity_planner { /** @@ -172,6 +172,6 @@ using DecisionResult = std::variant< std::string formatDecisionResult(const DecisionResult & decision_result); -} // namespace behavior_velocity_planner::intersection +} // namespace behavior_velocity_planner #endif // DECISION_RESULT_HPP_ diff --git a/planning/behavior_velocity_intersection_module/src/interpolated_path_info.hpp b/planning/autoware_behavior_velocity_intersection_module/src/interpolated_path_info.hpp similarity index 93% rename from planning/behavior_velocity_intersection_module/src/interpolated_path_info.hpp rename to planning/autoware_behavior_velocity_intersection_module/src/interpolated_path_info.hpp index b6ae84aa8488b..c855164e24d5b 100644 --- a/planning/behavior_velocity_intersection_module/src/interpolated_path_info.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/interpolated_path_info.hpp @@ -23,7 +23,7 @@ #include #include -namespace behavior_velocity_planner::intersection +namespace behavior_velocity_planner { /** @@ -43,6 +43,6 @@ struct InterpolatedPathInfo std::optional> lane_id_interval{std::nullopt}; }; -} // namespace behavior_velocity_planner::intersection +} // namespace behavior_velocity_planner #endif // INTERPOLATED_PATH_INFO_HPP_ diff --git a/planning/behavior_velocity_intersection_module/src/intersection_lanelets.cpp b/planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.cpp similarity index 97% rename from planning/behavior_velocity_intersection_module/src/intersection_lanelets.cpp rename to planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.cpp index 555ea424dfef0..bf833ee07c155 100644 --- a/planning/behavior_velocity_intersection_module/src/intersection_lanelets.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.cpp @@ -21,7 +21,7 @@ #include -namespace behavior_velocity_planner::intersection +namespace behavior_velocity_planner { void IntersectionLanelets::update( @@ -79,4 +79,4 @@ void IntersectionLanelets::update( } } } -} // namespace behavior_velocity_planner::intersection +} // namespace behavior_velocity_planner diff --git a/planning/behavior_velocity_intersection_module/src/intersection_lanelets.hpp b/planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.hpp similarity index 98% rename from planning/behavior_velocity_intersection_module/src/intersection_lanelets.hpp rename to planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.hpp index 9624d375de122..3682787237d42 100644 --- a/planning/behavior_velocity_intersection_module/src/intersection_lanelets.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.hpp @@ -27,7 +27,7 @@ #include #include -namespace behavior_velocity_planner::intersection +namespace behavior_velocity_planner { /** @@ -190,6 +190,6 @@ struct PathLanelets // conflicting lanelets plus the next lane part of the // path }; -} // namespace behavior_velocity_planner::intersection +} // namespace behavior_velocity_planner #endif // INTERSECTION_LANELETS_HPP_ diff --git a/planning/behavior_velocity_intersection_module/src/intersection_stoplines.hpp b/planning/autoware_behavior_velocity_intersection_module/src/intersection_stoplines.hpp similarity index 95% rename from planning/behavior_velocity_intersection_module/src/intersection_stoplines.hpp rename to planning/autoware_behavior_velocity_intersection_module/src/intersection_stoplines.hpp index 99d79d4468b38..85876ffc98380 100644 --- a/planning/behavior_velocity_intersection_module/src/intersection_stoplines.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/intersection_stoplines.hpp @@ -17,7 +17,7 @@ #include -namespace behavior_velocity_planner::intersection +namespace behavior_velocity_planner { /** @@ -72,6 +72,6 @@ struct IntersectionStopLines */ size_t occlusion_wo_tl_pass_judge_line{0}; }; -} // namespace behavior_velocity_planner::intersection +} // namespace behavior_velocity_planner #endif // INTERSECTION_STOPLINES_HPP_ diff --git a/planning/behavior_velocity_intersection_module/src/manager.cpp b/planning/autoware_behavior_velocity_intersection_module/src/manager.cpp similarity index 100% rename from planning/behavior_velocity_intersection_module/src/manager.cpp rename to planning/autoware_behavior_velocity_intersection_module/src/manager.cpp diff --git a/planning/behavior_velocity_intersection_module/src/manager.hpp b/planning/autoware_behavior_velocity_intersection_module/src/manager.hpp similarity index 100% rename from planning/behavior_velocity_intersection_module/src/manager.hpp rename to planning/autoware_behavior_velocity_intersection_module/src/manager.hpp diff --git a/planning/behavior_velocity_intersection_module/src/object_manager.cpp b/planning/autoware_behavior_velocity_intersection_module/src/object_manager.cpp similarity index 95% rename from planning/behavior_velocity_intersection_module/src/object_manager.cpp rename to planning/autoware_behavior_velocity_intersection_module/src/object_manager.cpp index d2c905673cee9..8ca860e23c111 100644 --- a/planning/behavior_velocity_intersection_module/src/object_manager.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/object_manager.cpp @@ -64,7 +64,7 @@ tier4_autoware_utils::Polygon2d createOneStepPolygon( } // namespace -namespace behavior_velocity_planner::intersection +namespace behavior_velocity_planner { namespace bg = boost::geometry; @@ -201,7 +201,7 @@ std::shared_ptr ObjectInfoManager::registerObject( const bool belong_intersection_area, const bool is_parked_vehicle) { if (objects_info_.count(uuid) == 0) { - auto object = std::make_shared(uuid); + auto object = std::make_shared(uuid); objects_info_[uuid] = object; } auto object = objects_info_[uuid]; @@ -219,7 +219,7 @@ std::shared_ptr ObjectInfoManager::registerObject( void ObjectInfoManager::registerExistingObject( const unique_identifier_msgs::msg::UUID & uuid, const bool belong_attention_area, const bool belong_intersection_area, const bool is_parked_vehicle, - std::shared_ptr object) + std::shared_ptr object) { objects_info_[uuid] = object; if (belong_attention_area) { @@ -249,7 +249,7 @@ std::vector> ObjectInfoManager::allObjects() const return all_objects; } -std::optional findPassageInterval( +std::optional findPassageInterval( const autoware_perception_msgs::msg::PredictedPath & predicted_path, const autoware_perception_msgs::msg::Shape & shape, const lanelet::BasicPolygon2d & ego_lane_poly, const std::optional & first_attention_lane_opt, @@ -284,25 +284,25 @@ std::optional findPassageInterval( if (lanelet::geometry::inside( first_attention_lane_opt.value(), lanelet::BasicPoint2d(first_itr->position.x, first_itr->position.y))) { - return intersection::CollisionInterval::LanePosition::FIRST; + return CollisionInterval::LanePosition::FIRST; } } if (second_attention_lane_opt) { if (lanelet::geometry::inside( second_attention_lane_opt.value(), lanelet::BasicPoint2d(first_itr->position.x, first_itr->position.y))) { - return intersection::CollisionInterval::LanePosition::SECOND; + return CollisionInterval::LanePosition::SECOND; } } - return intersection::CollisionInterval::LanePosition::ELSE; + return CollisionInterval::LanePosition::ELSE; }(); std::vector path; for (const auto & pose : predicted_path.path) { path.push_back(pose); } - return intersection::CollisionInterval{ + return CollisionInterval{ lane_position, path, {enter_idx, exit_idx}, {object_enter_time, object_exit_time}}; } -} // namespace behavior_velocity_planner::intersection +} // namespace behavior_velocity_planner diff --git a/planning/behavior_velocity_intersection_module/src/object_manager.hpp b/planning/autoware_behavior_velocity_intersection_module/src/object_manager.hpp similarity index 96% rename from planning/behavior_velocity_intersection_module/src/object_manager.hpp rename to planning/autoware_behavior_velocity_intersection_module/src/object_manager.hpp index 180496bd6b18d..3d1113656c3e3 100644 --- a/planning/behavior_velocity_intersection_module/src/object_manager.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/object_manager.hpp @@ -52,7 +52,7 @@ struct hash }; } // namespace std -namespace behavior_velocity_planner::intersection +namespace behavior_velocity_planner { /** @@ -234,8 +234,7 @@ class ObjectInfoManager void registerExistingObject( const unique_identifier_msgs::msg::UUID & uuid, const bool belong_attention_area, - const bool belong_intersection_area, const bool is_parked, - std::shared_ptr object); + const bool belong_intersection_area, const bool is_parked, std::shared_ptr object); void clearObjects(); @@ -282,12 +281,12 @@ class ObjectInfoManager /** * @brief return the CollisionInterval struct if the predicted path collides ego path geometrically */ -std::optional findPassageInterval( +std::optional findPassageInterval( const autoware_perception_msgs::msg::PredictedPath & predicted_path, const autoware_perception_msgs::msg::Shape & shape, const lanelet::BasicPolygon2d & ego_lane_poly, const std::optional & first_attention_lane_opt, const std::optional & second_attention_lane_opt); -} // namespace behavior_velocity_planner::intersection +} // namespace behavior_velocity_planner #endif // OBJECT_MANAGER_HPP_ diff --git a/planning/behavior_velocity_intersection_module/src/result.hpp b/planning/autoware_behavior_velocity_intersection_module/src/result.hpp similarity index 93% rename from planning/behavior_velocity_intersection_module/src/result.hpp rename to planning/autoware_behavior_velocity_intersection_module/src/result.hpp index 5d82183cee2fb..da89920e59a85 100644 --- a/planning/behavior_velocity_intersection_module/src/result.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/result.hpp @@ -18,7 +18,7 @@ #include #include -namespace behavior_velocity_planner::intersection +namespace behavior_velocity_planner { template @@ -48,6 +48,6 @@ Result make_err(Args &&... args) return Result(Error{std::forward(args)...}); } -} // namespace behavior_velocity_planner::intersection +} // namespace behavior_velocity_planner #endif // RESULT_HPP_ diff --git a/planning/behavior_velocity_intersection_module/src/scene_intersection.cpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp similarity index 93% rename from planning/behavior_velocity_intersection_module/src/scene_intersection.cpp rename to planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp index c27483ea1fa51..8e50c140894e7 100644 --- a/planning/behavior_velocity_intersection_module/src/scene_intersection.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp @@ -42,9 +42,6 @@ namespace behavior_velocity_planner { namespace bg = boost::geometry; -using intersection::make_err; -using intersection::make_ok; -using intersection::Result; using motion_utils::VelocityFactorInterface; IntersectionModule::IntersectionModule( @@ -105,8 +102,8 @@ bool IntersectionModule::modifyPathVelocity(PathWithLaneId * path, StopReason * prev_decision_result_ = decision_result; { - const std::string decision_type = "intersection" + std::to_string(module_id_) + " : " + - intersection::formatDecisionResult(decision_result); + const std::string decision_type = + "intersection" + std::to_string(module_id_) + " : " + formatDecisionResult(decision_result); internal_debug_data_.decision_type = decision_type; } @@ -147,7 +144,7 @@ static std::string formatOcclusionType(const IntersectionModule::OcclusionType & return "RTCOccluded"; } -intersection::DecisionResult IntersectionModule::modifyPathVelocityDetail( +DecisionResult IntersectionModule::modifyPathVelocityDetail( PathWithLaneId * path, [[maybe_unused]] StopReason * stop_reason) { const auto prepare_data = prepareIntersectionData(path); @@ -187,18 +184,18 @@ intersection::DecisionResult IntersectionModule::modifyPathVelocityDetail( // ego path has just entered the entry of this intersection // ========================================================================================== if (!intersection_lanelets.first_attention_area()) { - return intersection::InternalError{"attention area is empty"}; + return InternalError{"attention area is empty"}; } const auto first_attention_area = intersection_lanelets.first_attention_area().value(); const auto default_stopline_idx_opt = intersection_stoplines.default_stopline; if (!default_stopline_idx_opt) { - return intersection::InternalError{"default stop line is null"}; + return InternalError{"default stop line is null"}; } const auto default_stopline_idx = default_stopline_idx_opt.value(); const auto first_attention_stopline_idx_opt = intersection_stoplines.first_attention_stopline; const auto occlusion_peeking_stopline_idx_opt = intersection_stoplines.occlusion_peeking_stopline; if (!first_attention_stopline_idx_opt || !occlusion_peeking_stopline_idx_opt) { - return intersection::InternalError{"occlusion stop line is null"}; + return InternalError{"occlusion stop line is null"}; } const auto first_attention_stopline_idx = first_attention_stopline_idx_opt.value(); const auto occlusion_stopline_idx = occlusion_peeking_stopline_idx_opt.value(); @@ -275,9 +272,9 @@ intersection::DecisionResult IntersectionModule::modifyPathVelocityDetail( const auto closest_idx = intersection_stoplines.closest_idx; const std::string evasive_diag = generateEgoRiskEvasiveDiagnosis( *path, closest_idx, time_distance_array, too_late_detect_objects, misjudge_objects); - return intersection::OverPassJudge{safety_diag, evasive_diag}; + return OverPassJudge{safety_diag, evasive_diag}; } - return intersection::OverPassJudge{ + return OverPassJudge{ "no collision is detected", "ego can safely pass the intersection at this rate"}; } @@ -288,8 +285,7 @@ intersection::DecisionResult IntersectionModule::modifyPathVelocityDetail( // ========================================================================================== std::string safety_report = safety_diag; if (const bool collision_on_1st_attention_lane = - has_collision && - (collision_position == intersection::CollisionInterval::LanePosition::FIRST); + has_collision && (collision_position == CollisionInterval::LanePosition::FIRST); is_over_1st_pass_judge_line && is_over_2nd_pass_judge_line.has_value() && !is_over_2nd_pass_judge_line.value() && collision_on_1st_attention_lane) { safety_report += @@ -329,19 +325,18 @@ intersection::DecisionResult IntersectionModule::modifyPathVelocityDetail( collision_state_machine_.getState() == StateMachine::State::STOP; if (is_prioritized) { - return intersection::FullyPrioritized{ + return FullyPrioritized{ has_collision_with_margin, closest_idx, collision_stopline_idx, occlusion_stopline_idx, safety_report}; } // Safe if (!is_occlusion_state && !has_collision_with_margin) { - return intersection::Safe{ - closest_idx, collision_stopline_idx, occlusion_stopline_idx, occlusion_diag}; + return Safe{closest_idx, collision_stopline_idx, occlusion_stopline_idx, occlusion_diag}; } // Only collision if (!is_occlusion_state && has_collision_with_margin) { - return intersection::NonOccludedCollisionStop{ + return NonOccludedCollisionStop{ closest_idx, collision_stopline_idx, occlusion_stopline_idx, occlusion_diag}; } // Occluded @@ -400,16 +395,16 @@ intersection::DecisionResult IntersectionModule::modifyPathVelocityDetail( const auto closest_idx = intersection_stoplines.closest_idx; const std::string evasive_diag = generateEgoRiskEvasiveDiagnosis( *path, closest_idx, time_distance_array, too_late_detect_objects, misjudge_objects); - return intersection::OverPassJudge{ + return OverPassJudge{ "already passed maximum peeking line in the absence of traffic light.\n" + safety_report, evasive_diag}; } - return intersection::OverPassJudge{ + return OverPassJudge{ "already passed maximum peeking line in the absence of traffic light safely", "no evasive action required"}; } - return intersection::OccludedAbsenceTrafficLight{ + return OccludedAbsenceTrafficLight{ is_occlusion_cleared_with_margin, has_collision_with_margin, temporal_stop_before_attention_required, @@ -439,8 +434,7 @@ intersection::DecisionResult IntersectionModule::modifyPathVelocityDetail( const bool release_static_occlusion_stuck = (static_occlusion_timeout_state_machine_.getState() == StateMachine::State::GO); if (!has_collision_with_margin && release_static_occlusion_stuck) { - return intersection::Safe{ - closest_idx, collision_stopline_idx, occlusion_stopline_idx, occlusion_diag}; + return Safe{closest_idx, collision_stopline_idx, occlusion_stopline_idx, occlusion_diag}; } // occlusion_status is either STATICALLY_OCCLUDED or DYNAMICALLY_OCCLUDED const double max_timeout = @@ -453,7 +447,7 @@ intersection::DecisionResult IntersectionModule::modifyPathVelocityDetail( occlusion_stop_state_machine_.getDuration()) : (is_static_occlusion ? std::make_optional(max_timeout) : std::nullopt); if (has_collision_with_margin) { - return intersection::OccludedCollisionStop{ + return OccludedCollisionStop{ is_occlusion_cleared_with_margin, temporal_stop_before_attention_required, closest_idx, @@ -463,7 +457,7 @@ intersection::DecisionResult IntersectionModule::modifyPathVelocityDetail( static_occlusion_timeout, occlusion_diag}; } else { - return intersection::PeekingTowardOcclusion{ + return PeekingTowardOcclusion{ is_occlusion_cleared_with_margin, temporal_stop_before_attention_required, closest_idx, @@ -478,7 +472,7 @@ intersection::DecisionResult IntersectionModule::modifyPathVelocityDetail( (planner_param_.occlusion.temporal_stop_before_attention_area || !has_traffic_light_) ? first_attention_stopline_idx : occlusion_stopline_idx; - return intersection::FirstWaitBeforeOcclusion{ + return FirstWaitBeforeOcclusion{ is_occlusion_cleared_with_margin, closest_idx, default_stopline_idx, occlusion_stopline, occlusion_diag}; } @@ -505,7 +499,7 @@ void prepareRTCByDecisionResult( template <> void prepareRTCByDecisionResult( - [[maybe_unused]] const intersection::InternalError & result, + [[maybe_unused]] const InternalError & result, [[maybe_unused]] const tier4_planning_msgs::msg::PathWithLaneId & path, [[maybe_unused]] bool * default_safety, [[maybe_unused]] double * default_distance, [[maybe_unused]] bool * occlusion_safety, [[maybe_unused]] double * occlusion_distance) @@ -515,7 +509,7 @@ void prepareRTCByDecisionResult( template <> void prepareRTCByDecisionResult( - [[maybe_unused]] const intersection::OverPassJudge & result, + [[maybe_unused]] const OverPassJudge & result, [[maybe_unused]] const tier4_planning_msgs::msg::PathWithLaneId & path, [[maybe_unused]] bool * default_safety, [[maybe_unused]] double * default_distance, [[maybe_unused]] bool * occlusion_safety, [[maybe_unused]] double * occlusion_distance) @@ -525,7 +519,7 @@ void prepareRTCByDecisionResult( template <> void prepareRTCByDecisionResult( - const intersection::StuckStop & result, const tier4_planning_msgs::msg::PathWithLaneId & path, + const StuckStop & result, const tier4_planning_msgs::msg::PathWithLaneId & path, bool * default_safety, double * default_distance, bool * occlusion_safety, double * occlusion_distance) { @@ -545,9 +539,9 @@ void prepareRTCByDecisionResult( template <> void prepareRTCByDecisionResult( - const intersection::YieldStuckStop & result, - const tier4_planning_msgs::msg::PathWithLaneId & path, bool * default_safety, - double * default_distance, bool * occlusion_safety, [[maybe_unused]] double * occlusion_distance) + const YieldStuckStop & result, const tier4_planning_msgs::msg::PathWithLaneId & path, + bool * default_safety, double * default_distance, bool * occlusion_safety, + [[maybe_unused]] double * occlusion_distance) { RCLCPP_DEBUG(rclcpp::get_logger("prepareRTCByDecisionResult"), "YieldStuckStop"); const auto closest_idx = result.closest_idx; @@ -560,9 +554,9 @@ void prepareRTCByDecisionResult( template <> void prepareRTCByDecisionResult( - const intersection::NonOccludedCollisionStop & result, - const tier4_planning_msgs::msg::PathWithLaneId & path, bool * default_safety, - double * default_distance, bool * occlusion_safety, double * occlusion_distance) + const NonOccludedCollisionStop & result, const tier4_planning_msgs::msg::PathWithLaneId & path, + bool * default_safety, double * default_distance, bool * occlusion_safety, + double * occlusion_distance) { RCLCPP_DEBUG(rclcpp::get_logger("prepareRTCByDecisionResult"), "NonOccludedCollisionStop"); const auto closest_idx = result.closest_idx; @@ -579,9 +573,9 @@ void prepareRTCByDecisionResult( template <> void prepareRTCByDecisionResult( - const intersection::FirstWaitBeforeOcclusion & result, - const tier4_planning_msgs::msg::PathWithLaneId & path, bool * default_safety, - double * default_distance, bool * occlusion_safety, double * occlusion_distance) + const FirstWaitBeforeOcclusion & result, const tier4_planning_msgs::msg::PathWithLaneId & path, + bool * default_safety, double * default_distance, bool * occlusion_safety, + double * occlusion_distance) { RCLCPP_DEBUG(rclcpp::get_logger("prepareRTCByDecisionResult"), "FirstWaitBeforeOcclusion"); const auto closest_idx = result.closest_idx; @@ -598,9 +592,9 @@ void prepareRTCByDecisionResult( template <> void prepareRTCByDecisionResult( - const intersection::PeekingTowardOcclusion & result, - const tier4_planning_msgs::msg::PathWithLaneId & path, bool * default_safety, - double * default_distance, bool * occlusion_safety, double * occlusion_distance) + const PeekingTowardOcclusion & result, const tier4_planning_msgs::msg::PathWithLaneId & path, + bool * default_safety, double * default_distance, bool * occlusion_safety, + double * occlusion_distance) { RCLCPP_DEBUG(rclcpp::get_logger("prepareRTCByDecisionResult"), "PeekingTowardOcclusion"); const auto closest_idx = result.closest_idx; @@ -617,9 +611,9 @@ void prepareRTCByDecisionResult( template <> void prepareRTCByDecisionResult( - const intersection::OccludedAbsenceTrafficLight & result, - const tier4_planning_msgs::msg::PathWithLaneId & path, bool * default_safety, - double * default_distance, bool * occlusion_safety, double * occlusion_distance) + const OccludedAbsenceTrafficLight & result, const tier4_planning_msgs::msg::PathWithLaneId & path, + bool * default_safety, double * default_distance, bool * occlusion_safety, + double * occlusion_distance) { RCLCPP_DEBUG(rclcpp::get_logger("prepareRTCByDecisionResult"), "OccludedAbsenceTrafficLight"); const auto closest_idx = result.closest_idx; @@ -634,9 +628,9 @@ void prepareRTCByDecisionResult( template <> void prepareRTCByDecisionResult( - const intersection::OccludedCollisionStop & result, - const tier4_planning_msgs::msg::PathWithLaneId & path, bool * default_safety, - double * default_distance, bool * occlusion_safety, double * occlusion_distance) + const OccludedCollisionStop & result, const tier4_planning_msgs::msg::PathWithLaneId & path, + bool * default_safety, double * default_distance, bool * occlusion_safety, + double * occlusion_distance) { RCLCPP_DEBUG(rclcpp::get_logger("prepareRTCByDecisionResult"), "OccludedCollisionStop"); const auto closest_idx = result.closest_idx; @@ -653,9 +647,8 @@ void prepareRTCByDecisionResult( template <> void prepareRTCByDecisionResult( - const intersection::Safe & result, const tier4_planning_msgs::msg::PathWithLaneId & path, - bool * default_safety, double * default_distance, bool * occlusion_safety, - double * occlusion_distance) + const Safe & result, const tier4_planning_msgs::msg::PathWithLaneId & path, bool * default_safety, + double * default_distance, bool * occlusion_safety, double * occlusion_distance) { RCLCPP_DEBUG(rclcpp::get_logger("prepareRTCByDecisionResult"), "Safe"); const auto closest_idx = result.closest_idx; @@ -672,9 +665,9 @@ void prepareRTCByDecisionResult( template <> void prepareRTCByDecisionResult( - const intersection::FullyPrioritized & result, - const tier4_planning_msgs::msg::PathWithLaneId & path, bool * default_safety, - double * default_distance, bool * occlusion_safety, double * occlusion_distance) + const FullyPrioritized & result, const tier4_planning_msgs::msg::PathWithLaneId & path, + bool * default_safety, double * default_distance, bool * occlusion_safety, + double * occlusion_distance) { RCLCPP_DEBUG(rclcpp::get_logger("prepareRTCByDecisionResult"), "FullyPrioritized"); const auto closest_idx = result.closest_idx; @@ -690,8 +683,7 @@ void prepareRTCByDecisionResult( } void IntersectionModule::prepareRTCStatus( - const intersection::DecisionResult & decision_result, - const tier4_planning_msgs::msg::PathWithLaneId & path) + const DecisionResult & decision_result, const tier4_planning_msgs::msg::PathWithLaneId & path) { bool default_safety = true; double default_distance = std::numeric_limits::lowest(); @@ -705,7 +697,7 @@ void IntersectionModule::prepareRTCStatus( setSafe(default_safety); setDistance(default_distance); occlusion_first_stop_required_ = - std::holds_alternative(decision_result); + std::holds_alternative(decision_result); } template @@ -723,7 +715,7 @@ template <> void reactRTCApprovalByDecisionResult( [[maybe_unused]] const bool rtc_default_approved, [[maybe_unused]] const bool rtc_occlusion_approved, - [[maybe_unused]] const intersection::InternalError & decision_result, + [[maybe_unused]] const InternalError & decision_result, [[maybe_unused]] const IntersectionModule::PlannerParam & planner_param, [[maybe_unused]] const double baselink2front, [[maybe_unused]] tier4_planning_msgs::msg::PathWithLaneId * path, @@ -738,7 +730,7 @@ template <> void reactRTCApprovalByDecisionResult( [[maybe_unused]] const bool rtc_default_approved, [[maybe_unused]] const bool rtc_occlusion_approved, - [[maybe_unused]] const intersection::OverPassJudge & decision_result, + [[maybe_unused]] const OverPassJudge & decision_result, [[maybe_unused]] const IntersectionModule::PlannerParam & planner_param, [[maybe_unused]] const double baselink2front, [[maybe_unused]] tier4_planning_msgs::msg::PathWithLaneId * path, @@ -752,7 +744,7 @@ void reactRTCApprovalByDecisionResult( template <> void reactRTCApprovalByDecisionResult( const bool rtc_default_approved, const bool rtc_occlusion_approved, - const intersection::StuckStop & decision_result, + const StuckStop & decision_result, [[maybe_unused]] const IntersectionModule::PlannerParam & planner_param, const double baselink2front, tier4_planning_msgs::msg::PathWithLaneId * path, StopReason * stop_reason, VelocityFactorInterface * velocity_factor, @@ -799,7 +791,7 @@ void reactRTCApprovalByDecisionResult( template <> void reactRTCApprovalByDecisionResult( const bool rtc_default_approved, const bool rtc_occlusion_approved, - const intersection::YieldStuckStop & decision_result, + const YieldStuckStop & decision_result, [[maybe_unused]] const IntersectionModule::PlannerParam & planner_param, const double baselink2front, tier4_planning_msgs::msg::PathWithLaneId * path, StopReason * stop_reason, VelocityFactorInterface * velocity_factor, @@ -832,7 +824,7 @@ void reactRTCApprovalByDecisionResult( template <> void reactRTCApprovalByDecisionResult( const bool rtc_default_approved, const bool rtc_occlusion_approved, - const intersection::NonOccludedCollisionStop & decision_result, + const NonOccludedCollisionStop & decision_result, [[maybe_unused]] const IntersectionModule::PlannerParam & planner_param, const double baselink2front, tier4_planning_msgs::msg::PathWithLaneId * path, StopReason * stop_reason, VelocityFactorInterface * velocity_factor, @@ -876,7 +868,7 @@ void reactRTCApprovalByDecisionResult( template <> void reactRTCApprovalByDecisionResult( const bool rtc_default_approved, const bool rtc_occlusion_approved, - const intersection::FirstWaitBeforeOcclusion & decision_result, + const FirstWaitBeforeOcclusion & decision_result, const IntersectionModule::PlannerParam & planner_param, const double baselink2front, tier4_planning_msgs::msg::PathWithLaneId * path, StopReason * stop_reason, VelocityFactorInterface * velocity_factor, IntersectionModule::DebugData * debug_data) @@ -927,7 +919,7 @@ void reactRTCApprovalByDecisionResult( template <> void reactRTCApprovalByDecisionResult( const bool rtc_default_approved, const bool rtc_occlusion_approved, - const intersection::PeekingTowardOcclusion & decision_result, + const PeekingTowardOcclusion & decision_result, const IntersectionModule::PlannerParam & planner_param, const double baselink2front, tier4_planning_msgs::msg::PathWithLaneId * path, StopReason * stop_reason, VelocityFactorInterface * velocity_factor, IntersectionModule::DebugData * debug_data) @@ -983,7 +975,7 @@ void reactRTCApprovalByDecisionResult( template <> void reactRTCApprovalByDecisionResult( const bool rtc_default_approved, const bool rtc_occlusion_approved, - const intersection::OccludedCollisionStop & decision_result, + const OccludedCollisionStop & decision_result, [[maybe_unused]] const IntersectionModule::PlannerParam & planner_param, const double baselink2front, tier4_planning_msgs::msg::PathWithLaneId * path, StopReason * stop_reason, VelocityFactorInterface * velocity_factor, @@ -1031,7 +1023,7 @@ void reactRTCApprovalByDecisionResult( template <> void reactRTCApprovalByDecisionResult( const bool rtc_default_approved, const bool rtc_occlusion_approved, - const intersection::OccludedAbsenceTrafficLight & decision_result, + const OccludedAbsenceTrafficLight & decision_result, [[maybe_unused]] const IntersectionModule::PlannerParam & planner_param, const double baselink2front, tier4_planning_msgs::msg::PathWithLaneId * path, StopReason * stop_reason, VelocityFactorInterface * velocity_factor, @@ -1084,8 +1076,7 @@ void reactRTCApprovalByDecisionResult( template <> void reactRTCApprovalByDecisionResult( - const bool rtc_default_approved, const bool rtc_occlusion_approved, - const intersection::Safe & decision_result, + const bool rtc_default_approved, const bool rtc_occlusion_approved, const Safe & decision_result, [[maybe_unused]] const IntersectionModule::PlannerParam & planner_param, const double baselink2front, tier4_planning_msgs::msg::PathWithLaneId * path, StopReason * stop_reason, VelocityFactorInterface * velocity_factor, @@ -1128,7 +1119,7 @@ void reactRTCApprovalByDecisionResult( template <> void reactRTCApprovalByDecisionResult( const bool rtc_default_approved, const bool rtc_occlusion_approved, - const intersection::FullyPrioritized & decision_result, + const FullyPrioritized & decision_result, [[maybe_unused]] const IntersectionModule::PlannerParam & planner_param, const double baselink2front, tier4_planning_msgs::msg::PathWithLaneId * path, StopReason * stop_reason, VelocityFactorInterface * velocity_factor, @@ -1170,8 +1161,8 @@ void reactRTCApprovalByDecisionResult( } void IntersectionModule::reactRTCApproval( - const intersection::DecisionResult & decision_result, - tier4_planning_msgs::msg::PathWithLaneId * path, StopReason * stop_reason) + const DecisionResult & decision_result, tier4_planning_msgs::msg::PathWithLaneId * path, + StopReason * stop_reason) { const double baselink2front = planner_data_->vehicle_info_.max_longitudinal_offset_m; std::visit( @@ -1293,7 +1284,7 @@ void IntersectionModule::updateTrafficSignalObservation() IntersectionModule::PassJudgeStatus IntersectionModule::isOverPassJudgeLinesStatus( const tier4_planning_msgs::msg::PathWithLaneId & path, const bool is_occlusion_state, - const intersection::IntersectionStopLines & intersection_stoplines) + const IntersectionStopLines & intersection_stoplines) { const auto & current_pose = planner_data_->current_odometry->pose; const auto closest_idx = intersection_stoplines.closest_idx; @@ -1346,12 +1337,11 @@ IntersectionModule::PassJudgeStatus IntersectionModule::isOverPassJudgeLinesStat // as "was_safe" // ========================================================================================== const bool was_safe = [&]() { - if (std::holds_alternative(prev_decision_result_)) { + if (std::holds_alternative(prev_decision_result_)) { return true; } - if (std::holds_alternative(prev_decision_result_)) { - const auto & state = - std::get(prev_decision_result_); + if (std::holds_alternative(prev_decision_result_)) { + const auto & state = std::get(prev_decision_result_); return !state.collision_detected; } return false; diff --git a/planning/behavior_velocity_intersection_module/src/scene_intersection.hpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp similarity index 89% rename from planning/behavior_velocity_intersection_module/src/scene_intersection.hpp rename to planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp index b86fd77491f54..b1cfcdee04fa6 100644 --- a/planning/behavior_velocity_intersection_module/src/scene_intersection.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp @@ -295,11 +295,9 @@ class IntersectionModule : public SceneModuleInterface BLAME_AT_SECOND_PASS_JUDGE, }; const bool collision_detected; - const intersection::CollisionInterval::LanePosition collision_position; - const std::vector>> - too_late_detect_objects; - const std::vector>> - misjudge_objects; + const CollisionInterval::LanePosition collision_position; + const std::vector>> too_late_detect_objects; + const std::vector>> misjudge_objects; }; IntersectionModule( @@ -377,7 +375,7 @@ class IntersectionModule : public SceneModuleInterface */ //! cache IntersectionLanelets struct - std::optional intersection_lanelets_{std::nullopt}; + std::optional intersection_lanelets_{std::nullopt}; //! cache discretized occlusion detection lanelets std::optional> occlusion_attention_divisions_{ @@ -400,7 +398,7 @@ class IntersectionModule : public SceneModuleInterface bool is_permanent_go_{false}; //! for checking if ego is over the pass judge lines because previously the situation was SAFE - intersection::DecisionResult prev_decision_result_{intersection::InternalError{""}}; + DecisionResult prev_decision_result_{InternalError{""}}; //! flag if ego passed the 1st_pass_judge_line while peeking. If this is true, 1st_pass_judge_line //! is treated as the same position as occlusion_peeking_stopline @@ -427,7 +425,7 @@ class IntersectionModule : public SceneModuleInterface StateMachine collision_state_machine_; //! container for storing safety status of objects on the attention area - intersection::ObjectInfoManager object_info_manager_; + ObjectInfoManager object_info_manager_; /** @} */ private: @@ -506,21 +504,20 @@ class IntersectionModule : public SceneModuleInterface /** * @brief analyze traffic_light/occupancy/objects context and return DecisionResult */ - intersection::DecisionResult modifyPathVelocityDetail( - PathWithLaneId * path, StopReason * stop_reason); + DecisionResult modifyPathVelocityDetail(PathWithLaneId * path, StopReason * stop_reason); /** * @brief set RTC value according to calculated DecisionResult */ void prepareRTCStatus( - const intersection::DecisionResult &, const tier4_planning_msgs::msg::PathWithLaneId & path); + const DecisionResult &, const tier4_planning_msgs::msg::PathWithLaneId & path); /** * @brief act based on current RTC approval */ void reactRTCApproval( - const intersection::DecisionResult & decision_result, - tier4_planning_msgs::msg::PathWithLaneId * path, StopReason * stop_reason); + const DecisionResult & decision_result, tier4_planning_msgs::msg::PathWithLaneId * path, + StopReason * stop_reason); /** @}*/ private: @@ -536,9 +533,9 @@ class IntersectionModule : public SceneModuleInterface */ struct BasicData { - intersection::InterpolatedPathInfo interpolated_path_info; - intersection::IntersectionStopLines intersection_stoplines; - intersection::PathLanelets path_lanelets; + InterpolatedPathInfo interpolated_path_info; + IntersectionStopLines intersection_stoplines; + PathLanelets path_lanelets; }; /** @@ -549,31 +546,30 @@ class IntersectionModule : public SceneModuleInterface * * To simplify modifyPathVelocityDetail(), this function is used at first */ - intersection::Result prepareIntersectionData( - PathWithLaneId * path); + Result prepareIntersectionData(PathWithLaneId * path); /** * @brief find the associated stopline road marking of assigned lanelet */ std::optional getStopLineIndexFromMap( - const intersection::InterpolatedPathInfo & interpolated_path_info, + const InterpolatedPathInfo & interpolated_path_info, lanelet::ConstLanelet assigned_lanelet) const; /** * @brief generate IntersectionStopLines */ - std::optional generateIntersectionStopLines( + std::optional generateIntersectionStopLines( lanelet::ConstLanelet assigned_lanelet, const lanelet::CompoundPolygon3d & first_conflicting_area, const lanelet::ConstLanelet & first_attention_lane, const std::optional & second_attention_area_opt, - const intersection::InterpolatedPathInfo & interpolated_path_info, + const InterpolatedPathInfo & interpolated_path_info, tier4_planning_msgs::msg::PathWithLaneId * original_path) const; /** * @brief generate IntersectionLanelets */ - intersection::IntersectionLanelets generateObjectiveLanelets( + IntersectionLanelets generateObjectiveLanelets( lanelet::LaneletMapConstPtr lanelet_map_ptr, lanelet::routing::RoutingGraphPtr routing_graph_ptr, const lanelet::ConstLanelet assigned_lanelet) const; @@ -581,9 +577,9 @@ class IntersectionModule : public SceneModuleInterface /** * @brief generate PathLanelets */ - std::optional generatePathLanelets( + std::optional generatePathLanelets( const lanelet::ConstLanelets & lanelets_on_path, - const intersection::InterpolatedPathInfo & interpolated_path_info, + const InterpolatedPathInfo & interpolated_path_info, const lanelet::CompoundPolygon3d & first_conflicting_area, const std::vector & conflicting_areas, const std::optional & first_attention_area, @@ -637,10 +633,9 @@ class IntersectionModule : public SceneModuleInterface * @attention this function has access to value() of intersection_lanelets_, * intersection_lanelets.first_conflicting_lane(). They are ensured in prepareIntersectionData() */ - std::optional isStuckStatus( + std::optional isStuckStatus( const tier4_planning_msgs::msg::PathWithLaneId & path, - const intersection::IntersectionStopLines & intersection_stoplines, - const intersection::PathLanelets & path_lanelets) const; + const IntersectionStopLines & intersection_stoplines, const PathLanelets & path_lanelets) const; bool isTargetStuckVehicleType( const autoware_perception_msgs::msg::PredictedObject & object) const; @@ -651,7 +646,7 @@ class IntersectionModule : public SceneModuleInterface /** * @brief check stuck */ - bool checkStuckVehicleInIntersection(const intersection::PathLanelets & path_lanelets) const; + bool checkStuckVehicleInIntersection(const PathLanelets & path_lanelets) const; /** @} */ private: @@ -667,16 +662,16 @@ class IntersectionModule : public SceneModuleInterface * @attention this function has access to value() of intersection_lanelets_, * intersection_stoplines.default_stopline, intersection_stoplines.first_attention_stopline */ - std::optional isYieldStuckStatus( + std::optional isYieldStuckStatus( const tier4_planning_msgs::msg::PathWithLaneId & path, - const intersection::InterpolatedPathInfo & interpolated_path_info, - const intersection::IntersectionStopLines & intersection_stoplines) const; + const InterpolatedPathInfo & interpolated_path_info, + const IntersectionStopLines & intersection_stoplines) const; /** * @brief check yield stuck */ bool checkYieldStuckVehicleInIntersection( - const intersection::InterpolatedPathInfo & interpolated_path_info, + const InterpolatedPathInfo & interpolated_path_info, const lanelet::ConstLanelets & attention_lanelets) const; /** @} */ @@ -698,15 +693,14 @@ class IntersectionModule : public SceneModuleInterface bool /* reconciled occlusion disapproval */> getOcclusionStatus( const TrafficPrioritizedLevel & traffic_prioritized_level, - const intersection::InterpolatedPathInfo & interpolated_path_info); + const InterpolatedPathInfo & interpolated_path_info); /** * @brief calculate detected occlusion status(NOT | STATICALLY | DYNAMICALLY) * @attention this function has access to value() of intersection_lanelets_, * intersection_lanelets.first_attention_area(), occlusion_attention_divisions_ */ - OcclusionType detectOcclusion( - const intersection::InterpolatedPathInfo & interpolated_path_info) const; + OcclusionType detectOcclusion(const InterpolatedPathInfo & interpolated_path_info) const; /** @} */ private: @@ -726,7 +720,7 @@ class IntersectionModule : public SceneModuleInterface */ PassJudgeStatus isOverPassJudgeLinesStatus( const tier4_planning_msgs::msg::PathWithLaneId & path, const bool is_occlusion_state, - const intersection::IntersectionStopLines & intersection_stoplines); + const IntersectionStopLines & intersection_stoplines); /** @} */ private: @@ -751,7 +745,7 @@ class IntersectionModule : public SceneModuleInterface * @attention this function has access to value() of intersection_lanelets_ */ void updateObjectInfoManagerCollision( - const intersection::PathLanelets & path_lanelets, const TimeDistanceArray & time_distance_array, + const PathLanelets & path_lanelets, const TimeDistanceArray & time_distance_array, const TrafficPrioritizedLevel & traffic_prioritized_level, const bool passed_1st_judge_line_first_time, const bool passed_2nd_judge_line_first_time, tier4_debug_msgs::msg::Float64MultiArrayStamped * object_ttc_time_array); @@ -768,20 +762,18 @@ class IntersectionModule : public SceneModuleInterface * @attention this function has access to value() of * intersection_stoplines.occlusion_peeking_stopline */ - std::optional isGreenPseudoCollisionStatus( + std::optional isGreenPseudoCollisionStatus( const size_t closest_idx, const size_t collision_stopline_idx, - const intersection::IntersectionStopLines & intersection_stoplines) const; + const IntersectionStopLines & intersection_stoplines) const; /** * @brief generate the message explaining why too_late_detect_objects/misjudge_objects exist and * blame past perception fault */ std::string generateDetectionBlameDiagnosis( - const std::vector< - std::pair>> & + const std::vector>> & too_late_detect_objects, - const std::vector< - std::pair>> & + const std::vector>> & misjudge_objects) const; /** @@ -791,11 +783,9 @@ class IntersectionModule : public SceneModuleInterface std::string generateEgoRiskEvasiveDiagnosis( const tier4_planning_msgs::msg::PathWithLaneId & path, const size_t closest_idx, const TimeDistanceArray & ego_time_distance_array, - const std::vector< - std::pair>> & + const std::vector>> & too_late_detect_objects, - const std::vector< - std::pair>> & + const std::vector>> & misjudge_objects) const; /** @@ -818,7 +808,7 @@ class IntersectionModule : public SceneModuleInterface */ TimeDistanceArray calcIntersectionPassingTime( const tier4_planning_msgs::msg::PathWithLaneId & path, const bool is_prioritized, - const intersection::IntersectionStopLines & intersection_stoplines, + const IntersectionStopLines & intersection_stoplines, tier4_debug_msgs::msg::Float64MultiArrayStamped * debug_ttc_array) const; /** @} */ diff --git a/planning/behavior_velocity_intersection_module/src/scene_intersection_collision.cpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_collision.cpp similarity index 94% rename from planning/behavior_velocity_intersection_module/src/scene_intersection_collision.cpp rename to planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_collision.cpp index 131081c5e8ca0..48387bc6aa398 100644 --- a/planning/behavior_velocity_intersection_module/src/scene_intersection_collision.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_collision.cpp @@ -140,7 +140,7 @@ void IntersectionModule::updateObjectInfoManagerArea() } void IntersectionModule::updateObjectInfoManagerCollision( - const intersection::PathLanelets & path_lanelets, + const PathLanelets & path_lanelets, const IntersectionModule::TimeDistanceArray & time_distance_array, const IntersectionModule::TrafficPrioritizedLevel & traffic_prioritized_level, const bool passed_1st_judge_line_first_time, const bool passed_2nd_judge_line_first_time, @@ -243,8 +243,8 @@ void IntersectionModule::updateObjectInfoManagerCollision( // path, both will be null, which is interpreted as SAFE. if any of the path is "normal", either // of them has value, not both // ========================================================================================== - std::optional unsafe_interval{std::nullopt}; - std::optional safe_interval{std::nullopt}; + std::optional unsafe_interval{std::nullopt}; + std::optional safe_interval{std::nullopt}; std::optional> object_debug_info{std::nullopt}; for (const auto & predicted_path_ptr : sorted_predicted_paths) { @@ -256,7 +256,7 @@ void IntersectionModule::updateObjectInfoManagerCollision( } cutPredictPathWithinDuration( planner_data_->predicted_objects->header.stamp, passing_time, &predicted_path); - const auto object_passage_interval_opt = intersection::findPassageInterval( + const auto object_passage_interval_opt = findPassageInterval( predicted_path, predicted_object.shape, ego_poly, intersection_lanelets.first_attention_lane(), intersection_lanelets.second_attention_lane()); @@ -362,27 +362,25 @@ void IntersectionModule::updateObjectInfoManagerCollision( } object_info->update_safety(unsafe_interval, safe_interval, safe_under_traffic_control); if (passed_1st_judge_line_first_time) { - object_info->setDecisionAt1stPassJudgeLinePassage(intersection::CollisionKnowledge{ + object_info->setDecisionAt1stPassJudgeLinePassage(CollisionKnowledge{ clock_->now(), // stamp unsafe_interval - ? intersection::CollisionKnowledge::SafeType::UNSAFE - : (safe_under_traffic_control - ? intersection::CollisionKnowledge::SafeType::SAFE_UNDER_TRAFFIC_CONTROL - : intersection::CollisionKnowledge::SafeType::SAFE), // safe - unsafe_interval ? unsafe_interval : safe_interval, // interval + ? CollisionKnowledge::SafeType::UNSAFE + : (safe_under_traffic_control ? CollisionKnowledge::SafeType::SAFE_UNDER_TRAFFIC_CONTROL + : CollisionKnowledge::SafeType::SAFE), // safe + unsafe_interval ? unsafe_interval : safe_interval, // interval predicted_object.kinematics.initial_twist_with_covariance.twist.linear .x // observed_velocity }); } if (passed_2nd_judge_line_first_time) { - object_info->setDecisionAt2ndPassJudgeLinePassage(intersection::CollisionKnowledge{ + object_info->setDecisionAt2ndPassJudgeLinePassage(CollisionKnowledge{ clock_->now(), // stamp unsafe_interval - ? intersection::CollisionKnowledge::SafeType::UNSAFE - : (safe_under_traffic_control - ? intersection::CollisionKnowledge::SafeType::SAFE_UNDER_TRAFFIC_CONTROL - : intersection::CollisionKnowledge::SafeType::SAFE), // safe - unsafe_interval ? unsafe_interval : safe_interval, // interval + ? CollisionKnowledge::SafeType::UNSAFE + : (safe_under_traffic_control ? CollisionKnowledge::SafeType::SAFE_UNDER_TRAFFIC_CONTROL + : CollisionKnowledge::SafeType::SAFE), // safe + unsafe_interval ? unsafe_interval : safe_interval, // interval predicted_object.kinematics.initial_twist_with_covariance.twist.linear .x // observed_velocity }); @@ -415,10 +413,9 @@ void IntersectionModule::cutPredictPathWithinDuration( } } -std::optional -IntersectionModule::isGreenPseudoCollisionStatus( +std::optional IntersectionModule::isGreenPseudoCollisionStatus( const size_t closest_idx, const size_t collision_stopline_idx, - const intersection::IntersectionStopLines & intersection_stoplines) const + const IntersectionStopLines & intersection_stoplines) const { // ========================================================================================== // if there are any vehicles on the attention area when ego entered the intersection on green @@ -440,7 +437,7 @@ IntersectionModule::isGreenPseudoCollisionStatus( }); if (exist_close_vehicles) { const auto occlusion_stopline_idx = intersection_stoplines.occlusion_peeking_stopline.value(); - return intersection::NonOccludedCollisionStop{ + return NonOccludedCollisionStop{ closest_idx, collision_stopline_idx, occlusion_stopline_idx, std::string("")}; } } @@ -448,11 +445,11 @@ IntersectionModule::isGreenPseudoCollisionStatus( } std::string IntersectionModule::generateDetectionBlameDiagnosis( - const std::vector>> & + const std::vector< + std::pair>> & too_late_detect_objects, - const std::vector>> & + const std::vector< + std::pair>> & misjudge_objects) const { std::string diag; @@ -598,11 +595,11 @@ std::string IntersectionModule::generateDetectionBlameDiagnosis( std::string IntersectionModule::generateEgoRiskEvasiveDiagnosis( const tier4_planning_msgs::msg::PathWithLaneId & path, const size_t closest_idx, const IntersectionModule::TimeDistanceArray & ego_time_distance_array, - const std::vector>> & + const std::vector< + std::pair>> & too_late_detect_objects, - [[maybe_unused]] const std::vector>> & + [[maybe_unused]] const std::vector< + std::pair>> & misjudge_objects) const { static constexpr double min_vel = 1e-2; @@ -684,9 +681,8 @@ IntersectionModule::CollisionStatus IntersectionModule::detectCollision( // that case is both "too late to stop" and "too late to go" for the planner. and basically // detection side is responsible for this fault // ========================================================================================== - std::vector>> - misjudge_objects; - std::vector>> + std::vector>> misjudge_objects; + std::vector>> too_late_detect_objects; for (const auto & object_info : object_info_manager_.attentionObjects()) { if (object_info->is_safe_under_traffic_control()) { @@ -709,14 +705,14 @@ IntersectionModule::CollisionStatus IntersectionModule::detectCollision( // visualized as "misjudge" // ========================================================================================== auto * debug_container = &debug_data_.unsafe_targets.objects; - if (unsafe_info.lane_position == intersection::CollisionInterval::LanePosition::FIRST) { + if (unsafe_info.lane_position == CollisionInterval::LanePosition::FIRST) { collision_at_first_lane = true; } else { collision_at_non_first_lane = true; } if ( is_over_1st_pass_judge_line && - unsafe_info.lane_position == intersection::CollisionInterval::LanePosition::FIRST) { + unsafe_info.lane_position == CollisionInterval::LanePosition::FIRST) { const auto & decision_at_1st_pass_judge_opt = object_info->decision_at_1st_pass_judge_line_passage(); if (!decision_at_1st_pass_judge_opt) { @@ -725,9 +721,7 @@ IntersectionModule::CollisionStatus IntersectionModule::detectCollision( debug_container = &debug_data_.too_late_detect_targets.objects; } else { const auto & decision_at_1st_pass_judge = decision_at_1st_pass_judge_opt.value(); - if ( - decision_at_1st_pass_judge.safe_type != - intersection::CollisionKnowledge::SafeType::UNSAFE) { + if (decision_at_1st_pass_judge.safe_type != CollisionKnowledge::SafeType::UNSAFE) { misjudge_objects.emplace_back( CollisionStatus::BlameType::BLAME_AT_FIRST_PASS_JUDGE, object_info); debug_container = &debug_data_.misjudge_targets.objects; @@ -747,9 +741,7 @@ IntersectionModule::CollisionStatus IntersectionModule::detectCollision( debug_container = &debug_data_.too_late_detect_targets.objects; } else { const auto & decision_at_2nd_pass_judge = decision_at_2nd_pass_judge_opt.value(); - if ( - decision_at_2nd_pass_judge.safe_type != - intersection::CollisionKnowledge::SafeType::UNSAFE) { + if (decision_at_2nd_pass_judge.safe_type != CollisionKnowledge::SafeType::UNSAFE) { misjudge_objects.emplace_back( CollisionStatus::BlameType::BLAME_AT_SECOND_PASS_JUDGE, object_info); debug_container = &debug_data_.misjudge_targets.objects; @@ -763,12 +755,11 @@ IntersectionModule::CollisionStatus IntersectionModule::detectCollision( debug_container->emplace_back(object_info->predicted_object()); } if (collision_at_first_lane) { - return { - true, intersection::CollisionInterval::FIRST, too_late_detect_objects, misjudge_objects}; + return {true, CollisionInterval::FIRST, too_late_detect_objects, misjudge_objects}; } else if (collision_at_non_first_lane) { - return {true, intersection::CollisionInterval::ELSE, too_late_detect_objects, misjudge_objects}; + return {true, CollisionInterval::ELSE, too_late_detect_objects, misjudge_objects}; } - return {false, intersection::CollisionInterval::ELSE, too_late_detect_objects, misjudge_objects}; + return {false, CollisionInterval::ELSE, too_late_detect_objects, misjudge_objects}; } std::optional IntersectionModule::checkAngleForTargetLanelets( @@ -811,7 +802,7 @@ std::optional IntersectionModule::checkAngleForTargetLanelets( IntersectionModule::TimeDistanceArray IntersectionModule::calcIntersectionPassingTime( const tier4_planning_msgs::msg::PathWithLaneId & path, const bool is_prioritized, - const intersection::IntersectionStopLines & intersection_stoplines, + const IntersectionStopLines & intersection_stoplines, tier4_debug_msgs::msg::Float64MultiArrayStamped * ego_ttc_array) const { const double intersection_velocity = diff --git a/planning/behavior_velocity_intersection_module/src/scene_intersection_occlusion.cpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_occlusion.cpp similarity index 99% rename from planning/behavior_velocity_intersection_module/src/scene_intersection_occlusion.cpp rename to planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_occlusion.cpp index b741d43bb025a..0fb6042e5aadb 100644 --- a/planning/behavior_velocity_intersection_module/src/scene_intersection_occlusion.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_occlusion.cpp @@ -34,7 +34,7 @@ std::tuple< bool /* reconciled occlusion disapproval */> IntersectionModule::getOcclusionStatus( const TrafficPrioritizedLevel & traffic_prioritized_level, - const intersection::InterpolatedPathInfo & interpolated_path_info) + const InterpolatedPathInfo & interpolated_path_info) { const auto & intersection_lanelets = intersection_lanelets_.value(); const auto & occlusion_attention_lanelets = intersection_lanelets.occlusion_attention(); @@ -99,7 +99,7 @@ IntersectionModule::getOcclusionStatus( } IntersectionModule::OcclusionType IntersectionModule::detectOcclusion( - const intersection::InterpolatedPathInfo & interpolated_path_info) const + const InterpolatedPathInfo & interpolated_path_info) const { const auto & intersection_lanelets = intersection_lanelets_.value(); const auto & adjacent_lanelets = intersection_lanelets.adjacent(); diff --git a/planning/behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp similarity index 96% rename from planning/behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp rename to planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp index 9ea5360c3a176..d4466c1e9431b 100644 --- a/planning/behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp @@ -161,12 +161,8 @@ namespace behavior_velocity_planner { namespace bg = boost::geometry; -using intersection::make_err; -using intersection::make_ok; -using intersection::Result; - -Result -IntersectionModule::prepareIntersectionData(PathWithLaneId * path) +Result IntersectionModule::prepareIntersectionData( + PathWithLaneId * path) { const auto lanelet_map_ptr = planner_data_->route_handler_->getLaneletMapPtr(); const auto routing_graph_ptr = planner_data_->route_handler_->getRoutingGraphPtr(); @@ -191,13 +187,12 @@ IntersectionModule::prepareIntersectionData(PathWithLaneId * path) const auto interpolated_path_info_opt = util::generateInterpolatedPath( lane_id_, associative_ids_, *path, planner_param_.common.path_interpolation_ds, logger_); if (!interpolated_path_info_opt) { - return make_err( - "splineInterpolate failed"); + return make_err("splineInterpolate failed"); } const auto & interpolated_path_info = interpolated_path_info_opt.value(); if (!interpolated_path_info.lane_id_interval) { - return make_err( + return make_err( "Path has no interval on intersection lane " + std::to_string(lane_id_)); } @@ -231,8 +226,7 @@ IntersectionModule::prepareIntersectionData(PathWithLaneId * path) const auto & first_conflicting_lane_opt = intersection_lanelets.first_conflicting_lane(); if (conflicting_lanelets.empty() || !first_conflicting_area_opt || !first_conflicting_lane_opt) { // this is abnormal - return make_err( - "conflicting area is empty"); + return make_err("conflicting area is empty"); } const auto & first_conflicting_lane = first_conflicting_lane_opt.value(); const auto & first_conflicting_area = first_conflicting_area_opt.value(); @@ -250,7 +244,7 @@ IntersectionModule::prepareIntersectionData(PathWithLaneId * path) assigned_lanelet, first_conflicting_area, dummy_first_attention_lane, second_attention_area_opt, interpolated_path_info, path); if (!intersection_stoplines_opt) { - return make_err( + return make_err( "failed to generate intersection_stoplines"); } const auto & intersection_stoplines = intersection_stoplines_opt.value(); @@ -265,7 +259,7 @@ IntersectionModule::prepareIntersectionData(PathWithLaneId * path) lanelets_on_path, interpolated_path_info, first_conflicting_area, conflicting_area, first_attention_area_opt, intersection_lanelets.attention_area(), closest_idx); if (!path_lanelets_opt.has_value()) { - return make_err( + return make_err( "failed to generate PathLanelets"); } const auto & path_lanelets = path_lanelets_opt.value(); @@ -294,13 +288,12 @@ IntersectionModule::prepareIntersectionData(PathWithLaneId * path) } } - return make_ok( + return make_ok( interpolated_path_info, intersection_stoplines, path_lanelets); } std::optional IntersectionModule::getStopLineIndexFromMap( - const intersection::InterpolatedPathInfo & interpolated_path_info, - lanelet::ConstLanelet assigned_lanelet) const + const InterpolatedPathInfo & interpolated_path_info, lanelet::ConstLanelet assigned_lanelet) const { const auto & path = interpolated_path_info.path; const auto & lane_interval = interpolated_path_info.lane_id_interval.value(); @@ -350,12 +343,11 @@ std::optional IntersectionModule::getStopLineIndexFromMap( planner_data_->ego_nearest_yaw_threshold); } -std::optional -IntersectionModule::generateIntersectionStopLines( +std::optional IntersectionModule::generateIntersectionStopLines( lanelet::ConstLanelet assigned_lanelet, const lanelet::CompoundPolygon3d & first_conflicting_area, const lanelet::ConstLanelet & first_attention_lane, const std::optional & second_attention_area_opt, - const intersection::InterpolatedPathInfo & interpolated_path_info, + const InterpolatedPathInfo & interpolated_path_info, tier4_planning_msgs::msg::PathWithLaneId * original_path) const { const bool use_stuck_stopline = planner_param_.stuck_vehicle.use_stuck_stopline; @@ -555,7 +547,7 @@ IntersectionModule::generateIntersectionStopLines( intersection_stoplines_temp.default_stopline; } - intersection::IntersectionStopLines intersection_stoplines; + IntersectionStopLines intersection_stoplines; intersection_stoplines.closest_idx = intersection_stoplines_temp.closest_idx; if (stuck_stopline_valid) { intersection_stoplines.stuck_stopline = intersection_stoplines_temp.stuck_stopline; @@ -585,7 +577,7 @@ IntersectionModule::generateIntersectionStopLines( return intersection_stoplines; } -intersection::IntersectionLanelets IntersectionModule::generateObjectiveLanelets( +IntersectionLanelets IntersectionModule::generateObjectiveLanelets( lanelet::LaneletMapConstPtr lanelet_map_ptr, lanelet::routing::RoutingGraphPtr routing_graph_ptr, const lanelet::ConstLanelet assigned_lanelet) const { @@ -736,7 +728,7 @@ intersection::IntersectionLanelets IntersectionModule::generateObjectiveLanelets auto [attention_lanelets, original_attention_lanelet_sequences] = util::mergeLaneletsByTopologicalSort(detection_and_preceding_lanelets, routing_graph_ptr); - intersection::IntersectionLanelets result; + IntersectionLanelets result; result.attention_ = std::move(attention_lanelets); for (const auto & original_attention_lanelet_seq : original_attention_lanelet_sequences) { // NOTE: in mergeLaneletsByTopologicalSort(), sub_ids are empty checked, so it is ensured that @@ -786,9 +778,9 @@ intersection::IntersectionLanelets IntersectionModule::generateObjectiveLanelets return result; } -std::optional IntersectionModule::generatePathLanelets( +std::optional IntersectionModule::generatePathLanelets( const lanelet::ConstLanelets & lanelets_on_path, - const intersection::InterpolatedPathInfo & interpolated_path_info, + const InterpolatedPathInfo & interpolated_path_info, const lanelet::CompoundPolygon3d & first_conflicting_area, const std::vector & conflicting_areas, const std::optional & first_attention_area, @@ -804,7 +796,7 @@ std::optional IntersectionModule::generatePathLanele const auto assigned_lane_interval = assigned_lane_interval_opt.value(); const auto & path = interpolated_path_info.path; - intersection::PathLanelets path_lanelets; + PathLanelets path_lanelets; // prev path_lanelets.prev = ::getPrevLanelets(lanelets_on_path, associative_ids_); path_lanelets.all = path_lanelets.prev; diff --git a/planning/behavior_velocity_intersection_module/src/scene_intersection_stuck.cpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_stuck.cpp similarity index 95% rename from planning/behavior_velocity_intersection_module/src/scene_intersection_stuck.cpp rename to planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_stuck.cpp index 498a902c032db..c7de1805327c3 100644 --- a/planning/behavior_velocity_intersection_module/src/scene_intersection_stuck.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_stuck.cpp @@ -118,10 +118,9 @@ namespace behavior_velocity_planner { namespace bg = boost::geometry; -std::optional IntersectionModule::isStuckStatus( +std::optional IntersectionModule::isStuckStatus( const tier4_planning_msgs::msg::PathWithLaneId & path, - const intersection::IntersectionStopLines & intersection_stoplines, - const intersection::PathLanelets & path_lanelets) const + const IntersectionStopLines & intersection_stoplines, const PathLanelets & path_lanelets) const { const auto closest_idx = intersection_stoplines.closest_idx; auto fromEgoDist = [&](const size_t index) { @@ -162,8 +161,7 @@ std::optional IntersectionModule::isStuckStatus( } } if (stopline_idx) { - return intersection::StuckStop{ - closest_idx, stopline_idx.value(), occlusion_peeking_stopline_idx_opt}; + return StuckStop{closest_idx, stopline_idx.value(), occlusion_peeking_stopline_idx_opt}; } } } @@ -230,8 +228,7 @@ bool IntersectionModule::isTargetYieldStuckVehicleType( return false; } -bool IntersectionModule::checkStuckVehicleInIntersection( - const intersection::PathLanelets & path_lanelets) const +bool IntersectionModule::checkStuckVehicleInIntersection(const PathLanelets & path_lanelets) const { using lanelet::utils::getArcCoordinates; using lanelet::utils::getLaneletLength3d; @@ -306,10 +303,10 @@ bool IntersectionModule::checkStuckVehicleInIntersection( return false; } -std::optional IntersectionModule::isYieldStuckStatus( +std::optional IntersectionModule::isYieldStuckStatus( const tier4_planning_msgs::msg::PathWithLaneId & path, - const intersection::InterpolatedPathInfo & interpolated_path_info, - const intersection::IntersectionStopLines & intersection_stoplines) const + const InterpolatedPathInfo & interpolated_path_info, + const IntersectionStopLines & intersection_stoplines) const { const auto closest_idx = intersection_stoplines.closest_idx; auto fromEgoDist = [&](const size_t index) { @@ -342,14 +339,14 @@ std::optional IntersectionModule::isYieldStuckStat } } if (stopline_idx) { - return intersection::YieldStuckStop{closest_idx, stopline_idx.value(), std::string("")}; + return YieldStuckStop{closest_idx, stopline_idx.value(), std::string("")}; } } return std::nullopt; } bool IntersectionModule::checkYieldStuckVehicleInIntersection( - const intersection::InterpolatedPathInfo & interpolated_path_info, + const InterpolatedPathInfo & interpolated_path_info, const lanelet::ConstLanelets & attention_lanelets) const { const bool yield_stuck_detection_direction = [&]() { diff --git a/planning/behavior_velocity_intersection_module/src/scene_merge_from_private_road.cpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_merge_from_private_road.cpp similarity index 99% rename from planning/behavior_velocity_intersection_module/src/scene_merge_from_private_road.cpp rename to planning/autoware_behavior_velocity_intersection_module/src/scene_merge_from_private_road.cpp index 67da3c7a759fe..be8d94c3b306d 100644 --- a/planning/behavior_velocity_intersection_module/src/scene_merge_from_private_road.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_merge_from_private_road.cpp @@ -52,7 +52,7 @@ MergeFromPrivateRoadModule::MergeFromPrivateRoadModule( static std::optional getFirstConflictingLanelet( const lanelet::ConstLanelets & conflicting_lanelets, - const intersection::InterpolatedPathInfo & interpolated_path_info, + const InterpolatedPathInfo & interpolated_path_info, const tier4_autoware_utils::LinearRing2d & footprint, const double vehicle_length) { const auto & path_ip = interpolated_path_info.path; diff --git a/planning/behavior_velocity_intersection_module/src/scene_merge_from_private_road.hpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_merge_from_private_road.hpp similarity index 100% rename from planning/behavior_velocity_intersection_module/src/scene_merge_from_private_road.hpp rename to planning/autoware_behavior_velocity_intersection_module/src/scene_merge_from_private_road.hpp diff --git a/planning/behavior_velocity_intersection_module/src/util.cpp b/planning/autoware_behavior_velocity_intersection_module/src/util.cpp similarity index 97% rename from planning/behavior_velocity_intersection_module/src/util.cpp rename to planning/autoware_behavior_velocity_intersection_module/src/util.cpp index 9c492e7a64cde..a083185786e42 100644 --- a/planning/behavior_velocity_intersection_module/src/util.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/util.cpp @@ -129,8 +129,7 @@ std::optional> findLaneIdsInterval( } std::optional getFirstPointInsidePolygonByFootprint( - const lanelet::CompoundPolygon3d & polygon, - const intersection::InterpolatedPathInfo & interpolated_path_info, + const lanelet::CompoundPolygon3d & polygon, const InterpolatedPathInfo & interpolated_path_info, const tier4_autoware_utils::LinearRing2d & footprint, const double vehicle_length) { const auto & path_ip = interpolated_path_info.path; @@ -154,7 +153,7 @@ std::optional> getFirstPointInsidePolygonsByFootprint( const std::vector & polygons, - const intersection::InterpolatedPathInfo & interpolated_path_info, + const InterpolatedPathInfo & interpolated_path_info, const tier4_autoware_utils::LinearRing2d & footprint, const double vehicle_length) { const auto & path_ip = interpolated_path_info.path; @@ -356,12 +355,12 @@ bool hasAssociatedTrafficLight(lanelet::ConstLanelet lane) return tl_id.has_value(); } -std::optional generateInterpolatedPath( +std::optional generateInterpolatedPath( const lanelet::Id lane_id, const std::set & associative_lane_ids, const tier4_planning_msgs::msg::PathWithLaneId & input_path, const double ds, const rclcpp::Logger logger) { - intersection::InterpolatedPathInfo interpolated_path_info; + InterpolatedPathInfo interpolated_path_info; if (!splineInterpolate(input_path, ds, interpolated_path_info.path, logger)) { return std::nullopt; } diff --git a/planning/behavior_velocity_intersection_module/src/util.hpp b/planning/autoware_behavior_velocity_intersection_module/src/util.hpp similarity index 95% rename from planning/behavior_velocity_intersection_module/src/util.hpp rename to planning/autoware_behavior_velocity_intersection_module/src/util.hpp index 878253e6943a7..27200e663503d 100644 --- a/planning/behavior_velocity_intersection_module/src/util.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/util.hpp @@ -98,7 +98,7 @@ bool hasAssociatedTrafficLight(lanelet::ConstLanelet lane); /** * @brief interpolate PathWithLaneId */ -std::optional generateInterpolatedPath( +std::optional generateInterpolatedPath( const lanelet::Id lane_id, const std::set & associative_lane_ids, const tier4_planning_msgs::msg::PathWithLaneId & input_path, const double ds, const rclcpp::Logger logger); @@ -124,8 +124,7 @@ mergeLaneletsByTopologicalSort( * polygon */ std::optional getFirstPointInsidePolygonByFootprint( - const lanelet::CompoundPolygon3d & polygon, - const intersection::InterpolatedPathInfo & interpolated_path_info, + const lanelet::CompoundPolygon3d & polygon, const InterpolatedPathInfo & interpolated_path_info, const tier4_autoware_utils::LinearRing2d & footprint, const double vehicle_length); /** @@ -136,7 +135,7 @@ std::optional> getFirstPointInsidePolygonsByFootprint( const std::vector & polygons, - const intersection::InterpolatedPathInfo & interpolated_path_info, + const InterpolatedPathInfo & interpolated_path_info, const tier4_autoware_utils::LinearRing2d & footprint, const double vehicle_length); std::vector getPolygon3dFromLanelets( diff --git a/planning/autoware_behavior_velocity_planner/README.md b/planning/autoware_behavior_velocity_planner/README.md index af30de556b542..acf4c1ce78e56 100644 --- a/planning/autoware_behavior_velocity_planner/README.md +++ b/planning/autoware_behavior_velocity_planner/README.md @@ -11,7 +11,7 @@ It loads modules as plugins. Please refer to the links listed below for detail o - [Crosswalk](../behavior_velocity_crosswalk_module/README.md) - [Walkway](../autoware_behavior_velocity_walkway_module/README.md) - [Detection Area](../behavior_velocity_detection_area_module/README.md) -- [Intersection](../behavior_velocity_intersection_module/README.md) +- [Intersection](../autoware_behavior_velocity_intersection_module/README.md) - [MergeFromPrivate](../behavior_velocity_intersection_module/README.md#merge-from-private) - [Stop Line](../behavior_velocity_stop_line_module/README.md) - [Virtual Traffic Light](../autoware_behavior_velocity_virtual_traffic_light_module/README.md) diff --git a/planning/autoware_behavior_velocity_planner/package.xml b/planning/autoware_behavior_velocity_planner/package.xml index 576c4e92887cb..c90d4d01cbca5 100644 --- a/planning/autoware_behavior_velocity_planner/package.xml +++ b/planning/autoware_behavior_velocity_planner/package.xml @@ -65,6 +65,7 @@ ament_cmake_ros ament_lint_auto + autoware_behavior_velocity_intersection_module autoware_behavior_velocity_run_out_module autoware_behavior_velocity_virtual_traffic_light_module autoware_behavior_velocity_walkway_module @@ -72,7 +73,6 @@ behavior_velocity_blind_spot_module behavior_velocity_crosswalk_module behavior_velocity_detection_area_module - behavior_velocity_intersection_module behavior_velocity_no_drivable_lane_module behavior_velocity_no_stopping_area_module behavior_velocity_occlusion_spot_module diff --git a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp index b21fd6cc0f168..2e971ed238751 100644 --- a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp +++ b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp @@ -71,7 +71,7 @@ std::shared_ptr generateNode() module_names.emplace_back("behavior_velocity_planner::CrosswalkModulePlugin"); module_names.emplace_back("autoware::behavior_velocity_planner::WalkwayModulePlugin"); module_names.emplace_back("behavior_velocity_planner::TrafficLightModulePlugin"); - module_names.emplace_back("behavior_velocity_planner::IntersectionModulePlugin"); + module_names.emplace_back("autoware::behavior_velocity_planner::IntersectionModulePlugin"); module_names.emplace_back("behavior_velocity_planner::MergeFromPrivateModulePlugin"); module_names.emplace_back("behavior_velocity_planner::BlindSpotModulePlugin"); module_names.emplace_back("behavior_velocity_planner::DetectionAreaModulePlugin"); @@ -100,7 +100,7 @@ std::shared_ptr generateNode() get_behavior_velocity_module_config_no_prefix("crosswalk"), get_behavior_velocity_module_config("walkway"), get_behavior_velocity_module_config_no_prefix("detection_area"), - get_behavior_velocity_module_config_no_prefix("intersection"), + get_behavior_velocity_module_config("intersection"), get_behavior_velocity_module_config_no_prefix("no_stopping_area"), get_behavior_velocity_module_config_no_prefix("occlusion_spot"), get_behavior_velocity_module_config("run_out"), diff --git a/planning/behavior_velocity_intersection_module/plugins.xml b/planning/behavior_velocity_intersection_module/plugins.xml deleted file mode 100644 index 206f0324231ec..0000000000000 --- a/planning/behavior_velocity_intersection_module/plugins.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - From 9cb51d0f3d59417bab44b57ce04a63d9d7c3affa Mon Sep 17 00:00:00 2001 From: Autumn60 <37181352+Autumn60@users.noreply.github.com> Date: Fri, 7 Jun 2024 14:29:49 +0900 Subject: [PATCH 007/142] feat(emergency_handler, mrm_handler): change to read topic by polling (#7297) * replace Subscription to InterProcessPollingSubscriber Signed-off-by: Autumn60 * sort depend packages list in package.xml Signed-off-by: Autumn60 * fix end of file Signed-off-by: Autumn60 * clang format Signed-off-by: Autumn60 * chore: fix comments Signed-off-by: Autumn60 * replace Subscription to InterProcessPollingSubscriber (mrm_handler) Signed-off-by: Autumn60 --------- Signed-off-by: Autumn60 Co-authored-by: Autumn60 --- .../emergency_handler_core.hpp | 35 +++--- system/emergency_handler/package.xml | 1 + .../emergency_handler_core.cpp | 82 +++++-------- .../include/mrm_handler/mrm_handler_core.hpp | 49 ++++---- system/mrm_handler/package.xml | 1 + .../src/mrm_handler/mrm_handler_core.cpp | 116 +++++++----------- 6 files changed, 116 insertions(+), 168 deletions(-) diff --git a/system/emergency_handler/include/emergency_handler/emergency_handler_core.hpp b/system/emergency_handler/include/emergency_handler/emergency_handler_core.hpp index 012bb55af3068..cd66cde64c9a5 100644 --- a/system/emergency_handler/include/emergency_handler/emergency_handler_core.hpp +++ b/system/emergency_handler/include/emergency_handler/emergency_handler_core.hpp @@ -20,6 +20,8 @@ #include // Autoware +#include + #include #include #include @@ -56,33 +58,26 @@ class EmergencyHandler : public rclcpp::Node explicit EmergencyHandler(const rclcpp::NodeOptions & options); private: - // Subscribers + // Subscribers with callback rclcpp::Subscription::SharedPtr sub_hazard_status_stamped_; rclcpp::Subscription::SharedPtr sub_prev_control_command_; - rclcpp::Subscription::SharedPtr sub_odom_; - rclcpp::Subscription::SharedPtr sub_control_mode_; - rclcpp::Subscription::SharedPtr - sub_mrm_comfortable_stop_status_; - rclcpp::Subscription::SharedPtr - sub_mrm_emergency_stop_status_; + // Subscribers without callback + tier4_autoware_utils::InterProcessPollingSubscriber sub_odom_{ + this, "~/input/odometry"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_control_mode_{this, "~/input/control_mode"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_mrm_comfortable_stop_status_{this, "~/input/mrm/comfortable_stop/status"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_mrm_emergency_stop_status_{this, "~/input/mrm/emergency_stop/status"}; autoware_system_msgs::msg::HazardStatusStamped::ConstSharedPtr hazard_status_stamped_; autoware_control_msgs::msg::Control::ConstSharedPtr prev_control_command_; - nav_msgs::msg::Odometry::ConstSharedPtr odom_; - autoware_vehicle_msgs::msg::ControlModeReport::ConstSharedPtr control_mode_; - tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr mrm_comfortable_stop_status_; - tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr mrm_emergency_stop_status_; void onHazardStatusStamped( const autoware_system_msgs::msg::HazardStatusStamped::ConstSharedPtr msg); void onPrevControlCommand(const autoware_control_msgs::msg::Control::ConstSharedPtr msg); - void onOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg); - void onControlMode(const autoware_vehicle_msgs::msg::ControlModeReport::ConstSharedPtr msg); - void onMrmComfortableStopStatus( - const tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr msg); - void onMrmEmergencyStopStatus( - const tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr msg); // Publisher rclcpp::Publisher::SharedPtr pub_control_command_; @@ -135,9 +130,13 @@ class EmergencyHandler : public rclcpp::Node void updateMrmState(); void operateMrm(); autoware_adapi_v1_msgs::msg::MrmState::_behavior_type getCurrentMrmBehavior(); - bool isStopped(); + + bool isAutonomous(); bool isDrivingBackwards(); bool isEmergency(); + bool isStopped(); + bool isComfortableStopStatusAvailable(); + bool isEmergencyStopStatusAvailable(); }; #endif // EMERGENCY_HANDLER__EMERGENCY_HANDLER_CORE_HPP_ diff --git a/system/emergency_handler/package.xml b/system/emergency_handler/package.xml index aa2090c86edb8..f26080fd8ef56 100644 --- a/system/emergency_handler/package.xml +++ b/system/emergency_handler/package.xml @@ -21,6 +21,7 @@ rclcpp_components std_msgs std_srvs + tier4_autoware_utils tier4_system_msgs ament_lint_auto diff --git a/system/emergency_handler/src/emergency_handler/emergency_handler_core.cpp b/system/emergency_handler/src/emergency_handler/emergency_handler_core.cpp index ae3d60e32a445..b2ee12afc9c76 100644 --- a/system/emergency_handler/src/emergency_handler/emergency_handler_core.cpp +++ b/system/emergency_handler/src/emergency_handler/emergency_handler_core.cpp @@ -30,24 +30,13 @@ EmergencyHandler::EmergencyHandler(const rclcpp::NodeOptions & options) using std::placeholders::_1; - // Subscriber + // Subscribers with callback sub_hazard_status_stamped_ = create_subscription( "~/input/hazard_status", rclcpp::QoS{1}, std::bind(&EmergencyHandler::onHazardStatusStamped, this, _1)); sub_prev_control_command_ = create_subscription( "~/input/prev_control_command", rclcpp::QoS{1}, std::bind(&EmergencyHandler::onPrevControlCommand, this, _1)); - sub_odom_ = create_subscription( - "~/input/odometry", rclcpp::QoS{1}, std::bind(&EmergencyHandler::onOdometry, this, _1)); - // subscribe control mode - sub_control_mode_ = create_subscription( - "~/input/control_mode", rclcpp::QoS{1}, std::bind(&EmergencyHandler::onControlMode, this, _1)); - sub_mrm_comfortable_stop_status_ = create_subscription( - "~/input/mrm/comfortable_stop/status", rclcpp::QoS{1}, - std::bind(&EmergencyHandler::onMrmComfortableStopStatus, this, _1)); - sub_mrm_emergency_stop_status_ = create_subscription( - "~/input/mrm/emergency_stop/status", rclcpp::QoS{1}, - std::bind(&EmergencyHandler::onMrmEmergencyStopStatus, this, _1)); // Publisher pub_control_command_ = create_publisher( @@ -72,13 +61,6 @@ EmergencyHandler::EmergencyHandler(const rclcpp::NodeOptions & options) client_mrm_emergency_stop_group_); // Initialize - odom_ = std::make_shared(); - control_mode_ = std::make_shared(); - prev_control_command_ = - autoware_control_msgs::msg::Control::ConstSharedPtr(new autoware_control_msgs::msg::Control); - mrm_comfortable_stop_status_ = - std::make_shared(); - mrm_emergency_stop_status_ = std::make_shared(); mrm_state_.stamp = this->now(); mrm_state_.state = autoware_adapi_v1_msgs::msg::MrmState::NORMAL; mrm_state_.behavior = autoware_adapi_v1_msgs::msg::MrmState::NONE; @@ -105,29 +87,6 @@ void EmergencyHandler::onPrevControlCommand( prev_control_command_ = autoware_control_msgs::msg::Control::ConstSharedPtr(control_command); } -void EmergencyHandler::onOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg) -{ - odom_ = msg; -} - -void EmergencyHandler::onControlMode( - const autoware_vehicle_msgs::msg::ControlModeReport::ConstSharedPtr msg) -{ - control_mode_ = msg; -} - -void EmergencyHandler::onMrmComfortableStopStatus( - const tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr msg) -{ - mrm_comfortable_stop_status_ = msg; -} - -void EmergencyHandler::onMrmEmergencyStopStatus( - const tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr msg) -{ - mrm_emergency_stop_status_ = msg; -} - autoware_vehicle_msgs::msg::HazardLightsCommand EmergencyHandler::createHazardCmdMsg() { using autoware_vehicle_msgs::msg::HazardLightsCommand; @@ -293,17 +252,14 @@ bool EmergencyHandler::isDataReady() return false; } - if ( - param_.use_comfortable_stop && mrm_comfortable_stop_status_->state == - tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE) { + if (param_.use_comfortable_stop && !isComfortableStopStatusAvailable()) { RCLCPP_INFO_THROTTLE( this->get_logger(), *this->get_clock(), std::chrono::milliseconds(5000).count(), "waiting for mrm comfortable stop to become available..."); return false; } - if ( - mrm_emergency_stop_status_->state == tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE) { + if (!isEmergencyStopStatusAvailable()) { RCLCPP_INFO_THROTTLE( this->get_logger(), *this->get_clock(), std::chrono::milliseconds(5000).count(), "waiting for mrm emergency stop to become available..."); @@ -381,7 +337,7 @@ void EmergencyHandler::updateMrmState() const bool is_emergency = isEmergency(); // Get mode - const bool is_auto_mode = control_mode_->mode == ControlModeReport::AUTONOMOUS; + const bool is_auto_mode = isAutonomous(); // State Machine if (mrm_state_.state == MrmState::NORMAL) { @@ -447,6 +403,14 @@ autoware_adapi_v1_msgs::msg::MrmState::_behavior_type EmergencyHandler::getCurre return mrm_state_.behavior; } +bool EmergencyHandler::isAutonomous() +{ + using autoware_vehicle_msgs::msg::ControlModeReport; + auto mode = sub_control_mode_.takeData(); + if (mode == nullptr) return false; + return mode->mode == ControlModeReport::AUTONOMOUS; +} + bool EmergencyHandler::isEmergency() { return hazard_status_stamped_->status.emergency || @@ -455,14 +419,32 @@ bool EmergencyHandler::isEmergency() bool EmergencyHandler::isStopped() { + auto odom = sub_odom_.takeData(); + if (odom == nullptr) return false; constexpr auto th_stopped_velocity = 0.001; - return (std::abs(odom_->twist.twist.linear.x) < th_stopped_velocity); + return (std::abs(odom->twist.twist.linear.x) < th_stopped_velocity); +} + +bool EmergencyHandler::isComfortableStopStatusAvailable() +{ + auto status = sub_mrm_comfortable_stop_status_.takeData(); + if (status == nullptr) return false; + return status->state != tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE; +} + +bool EmergencyHandler::isEmergencyStopStatusAvailable() +{ + auto status = sub_mrm_emergency_stop_status_.takeData(); + if (status == nullptr) return false; + return status->state != tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE; } bool EmergencyHandler::isDrivingBackwards() { + auto odom = sub_odom_.takeData(); + if (odom == nullptr) return false; constexpr auto th_moving_backwards = -0.001; - return odom_->twist.twist.linear.x < th_moving_backwards; + return odom->twist.twist.linear.x < th_moving_backwards; } #include diff --git a/system/mrm_handler/include/mrm_handler/mrm_handler_core.hpp b/system/mrm_handler/include/mrm_handler/mrm_handler_core.hpp index 7a160b6c531e9..33d8af5004c47 100644 --- a/system/mrm_handler/include/mrm_handler/mrm_handler_core.hpp +++ b/system/mrm_handler/include/mrm_handler/mrm_handler_core.hpp @@ -22,6 +22,8 @@ #include // Autoware +#include + #include #include #include @@ -66,39 +68,28 @@ class MrmHandler : public rclcpp::Node // type enum RequestType { CALL, CANCEL }; - // Subscribers - rclcpp::Subscription::SharedPtr sub_odom_; - rclcpp::Subscription::SharedPtr sub_control_mode_; + // Subscribers with callback rclcpp::Subscription::SharedPtr sub_operation_mode_availability_; - rclcpp::Subscription::SharedPtr - sub_mrm_pull_over_status_; - rclcpp::Subscription::SharedPtr - sub_mrm_comfortable_stop_status_; - rclcpp::Subscription::SharedPtr - sub_mrm_emergency_stop_status_; - rclcpp::Subscription::SharedPtr - sub_operation_mode_state_; - - nav_msgs::msg::Odometry::ConstSharedPtr odom_; - autoware_vehicle_msgs::msg::ControlModeReport::ConstSharedPtr control_mode_; + // Subscribers without callback + tier4_autoware_utils::InterProcessPollingSubscriber sub_odom_{ + this, "~/input/odometry"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_control_mode_{this, "~/input/control_mode"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_mrm_pull_over_status_{this, "~/input/mrm/pull_over/status"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_mrm_comfortable_stop_status_{this, "~/input/mrm/comfortable_stop/status"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_mrm_emergency_stop_status_{this, "~/input/mrm/emergency_stop/status"}; + tier4_autoware_utils::InterProcessPollingSubscriber< + autoware_adapi_v1_msgs::msg::OperationModeState> + sub_operation_mode_state_{this, "~/input/api/operation_mode/state"}; + tier4_system_msgs::msg::OperationModeAvailability::ConstSharedPtr operation_mode_availability_; - tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr mrm_pull_over_status_; - tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr mrm_comfortable_stop_status_; - tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr mrm_emergency_stop_status_; - autoware_adapi_v1_msgs::msg::OperationModeState::ConstSharedPtr operation_mode_state_; - void onOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg); - void onControlMode(const autoware_vehicle_msgs::msg::ControlModeReport::ConstSharedPtr msg); void onOperationModeAvailability( const tier4_system_msgs::msg::OperationModeAvailability::ConstSharedPtr msg); - void onMrmPullOverStatus(const tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr msg); - void onMrmComfortableStopStatus( - const tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr msg); - void onMrmEmergencyStopStatus( - const tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr msg); - void onOperationModeState( - const autoware_adapi_v1_msgs::msg::OperationModeState::ConstSharedPtr msg); // Publisher @@ -156,6 +147,10 @@ class MrmHandler : public rclcpp::Node bool isStopped(); bool isDrivingBackwards(); bool isEmergency() const; + bool isAutonomous(); + bool isPullOverStatusAvailable(); + bool isComfortableStopStatusAvailable(); + bool isEmergencyStopStatusAvailable(); bool isArrivedAtGoal(); }; diff --git a/system/mrm_handler/package.xml b/system/mrm_handler/package.xml index 2db22cecaa82d..5774cce3215a9 100644 --- a/system/mrm_handler/package.xml +++ b/system/mrm_handler/package.xml @@ -21,6 +21,7 @@ rclcpp_components std_msgs std_srvs + tier4_autoware_utils tier4_system_msgs ament_lint_auto diff --git a/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp b/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp index d70303a9801ac..44407c40c6787 100644 --- a/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp +++ b/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp @@ -36,28 +36,11 @@ MrmHandler::MrmHandler(const rclcpp::NodeOptions & options) : Node("mrm_handler" using std::placeholders::_1; - // Subscriber - sub_odom_ = create_subscription( - "~/input/odometry", rclcpp::QoS{1}, std::bind(&MrmHandler::onOdometry, this, _1)); - // subscribe control mode - sub_control_mode_ = create_subscription( - "~/input/control_mode", rclcpp::QoS{1}, std::bind(&MrmHandler::onControlMode, this, _1)); + // Subscribers with callback sub_operation_mode_availability_ = create_subscription( "~/input/operation_mode_availability", rclcpp::QoS{1}, std::bind(&MrmHandler::onOperationModeAvailability, this, _1)); - sub_mrm_pull_over_status_ = create_subscription( - "~/input/mrm/pull_over/status", rclcpp::QoS{1}, - std::bind(&MrmHandler::onMrmPullOverStatus, this, _1)); - sub_mrm_comfortable_stop_status_ = create_subscription( - "~/input/mrm/comfortable_stop/status", rclcpp::QoS{1}, - std::bind(&MrmHandler::onMrmComfortableStopStatus, this, _1)); - sub_mrm_emergency_stop_status_ = create_subscription( - "~/input/mrm/emergency_stop/status", rclcpp::QoS{1}, - std::bind(&MrmHandler::onMrmEmergencyStopStatus, this, _1)); - sub_operation_mode_state_ = create_subscription( - "~/input/api/operation_mode/state", rclcpp::QoS{1}, - std::bind(&MrmHandler::onOperationModeState, this, _1)); // Publisher pub_hazard_cmd_ = create_publisher( @@ -84,13 +67,6 @@ MrmHandler::MrmHandler(const rclcpp::NodeOptions & options) : Node("mrm_handler" client_mrm_emergency_stop_group_); // Initialize - odom_ = std::make_shared(); - control_mode_ = std::make_shared(); - mrm_pull_over_status_ = std::make_shared(); - mrm_comfortable_stop_status_ = - std::make_shared(); - mrm_emergency_stop_status_ = std::make_shared(); - operation_mode_state_ = std::make_shared(); mrm_state_.stamp = this->now(); mrm_state_.state = autoware_adapi_v1_msgs::msg::MrmState::NORMAL; mrm_state_.behavior = autoware_adapi_v1_msgs::msg::MrmState::NONE; @@ -102,17 +78,6 @@ MrmHandler::MrmHandler(const rclcpp::NodeOptions & options) : Node("mrm_handler" this, get_clock(), update_period_ns, std::bind(&MrmHandler::onTimer, this)); } -void MrmHandler::onOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg) -{ - odom_ = msg; -} - -void MrmHandler::onControlMode( - const autoware_vehicle_msgs::msg::ControlModeReport::ConstSharedPtr msg) -{ - control_mode_ = msg; -} - void MrmHandler::onOperationModeAvailability( const tier4_system_msgs::msg::OperationModeAvailability::ConstSharedPtr msg) { @@ -141,30 +106,6 @@ void MrmHandler::onOperationModeAvailability( operation_mode_availability_ = msg; } -void MrmHandler::onMrmPullOverStatus( - const tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr msg) -{ - mrm_pull_over_status_ = msg; -} - -void MrmHandler::onMrmComfortableStopStatus( - const tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr msg) -{ - mrm_comfortable_stop_status_ = msg; -} - -void MrmHandler::onMrmEmergencyStopStatus( - const tier4_system_msgs::msg::MrmBehaviorStatus::ConstSharedPtr msg) -{ - mrm_emergency_stop_status_ = msg; -} - -void MrmHandler::onOperationModeState( - const autoware_adapi_v1_msgs::msg::OperationModeState::ConstSharedPtr msg) -{ - operation_mode_state_ = msg; -} - void MrmHandler::publishHazardCmd() { using autoware_vehicle_msgs::msg::HazardLightsCommand; @@ -352,26 +293,21 @@ bool MrmHandler::isDataReady() return false; } - if ( - param_.use_pull_over && - mrm_pull_over_status_->state == tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE) { + if (param_.use_pull_over && !isPullOverStatusAvailable()) { RCLCPP_INFO_THROTTLE( this->get_logger(), *this->get_clock(), std::chrono::milliseconds(5000).count(), "waiting for mrm pull over to become available..."); return false; } - if ( - param_.use_comfortable_stop && mrm_comfortable_stop_status_->state == - tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE) { + if (param_.use_comfortable_stop && !isComfortableStopStatusAvailable()) { RCLCPP_INFO_THROTTLE( this->get_logger(), *this->get_clock(), std::chrono::milliseconds(5000).count(), "waiting for mrm comfortable stop to become available..."); return false; } - if ( - mrm_emergency_stop_status_->state == tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE) { + if (!isEmergencyStopStatusAvailable()) { RCLCPP_INFO_THROTTLE( this->get_logger(), *this->get_clock(), std::chrono::milliseconds(5000).count(), "waiting for mrm emergency stop to become available..."); @@ -460,7 +396,7 @@ void MrmHandler::updateMrmState() } // Get mode - const bool is_auto_mode = control_mode_->mode == ControlModeReport::AUTONOMOUS; + const bool is_auto_mode = isAutonomous(); // State Machine switch (mrm_state_.state) { @@ -581,14 +517,18 @@ autoware_adapi_v1_msgs::msg::MrmState::_behavior_type MrmHandler::getCurrentMrmB bool MrmHandler::isStopped() { + auto odom = sub_odom_.takeData(); + if (odom == nullptr) return false; constexpr auto th_stopped_velocity = 0.001; - return std::abs((odom_->twist.twist.linear.x < th_stopped_velocity) < th_stopped_velocity); + return (std::abs(odom->twist.twist.linear.x < th_stopped_velocity) < th_stopped_velocity); } bool MrmHandler::isDrivingBackwards() { + auto odom = sub_odom_.takeData(); + if (odom == nullptr) return false; constexpr auto th_moving_backwards = -0.001; - return odom_->twist.twist.linear.x < th_moving_backwards; + return odom->twist.twist.linear.x < th_moving_backwards; } bool MrmHandler::isEmergency() const @@ -597,11 +537,41 @@ bool MrmHandler::isEmergency() const is_operation_mode_availability_timeout; } +bool MrmHandler::isAutonomous() +{ + using autoware_vehicle_msgs::msg::ControlModeReport; + auto mode = sub_control_mode_.takeData(); + if (mode == nullptr) return false; + return mode->mode == ControlModeReport::AUTONOMOUS; +} + +bool MrmHandler::isPullOverStatusAvailable() +{ + auto status = sub_mrm_pull_over_status_.takeData(); + if (status == nullptr) return false; + return status->state != tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE; +} + +bool MrmHandler::isComfortableStopStatusAvailable() +{ + auto status = sub_mrm_comfortable_stop_status_.takeData(); + if (status == nullptr) return false; + return status->state != tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE; +} + +bool MrmHandler::isEmergencyStopStatusAvailable() +{ + auto status = sub_mrm_emergency_stop_status_.takeData(); + if (status == nullptr) return false; + return status->state != tier4_system_msgs::msg::MrmBehaviorStatus::NOT_AVAILABLE; +} + bool MrmHandler::isArrivedAtGoal() { using autoware_adapi_v1_msgs::msg::OperationModeState; - - return operation_mode_state_->mode == OperationModeState::STOP; + auto state = sub_operation_mode_state_.takeData(); + if (state == nullptr) return false; + return state->mode == OperationModeState::STOP; } #include From c85b83d211b92973bdf23b6ddb185f9e621217e2 Mon Sep 17 00:00:00 2001 From: Kento Yabuuchi Date: Fri, 7 Jun 2024 14:44:31 +0900 Subject: [PATCH 008/142] fix(pose2twist): compute angular velocity through quaternion (#7322) * compute angular velocity from two quaternions Signed-off-by: Kento Yabuuchi * add test Signed-off-by: Kento Yabuuchi * add some comments Signed-off-by: Kento Yabuuchi * remove rpy description Signed-off-by: Kento Yabuuchi * fix typo Signed-off-by: Kento Yabuuchi * fix clang-tidy's warning Signed-off-by: Kento Yabuuchi --------- Signed-off-by: Kento Yabuuchi --- localization/pose2twist/CMakeLists.txt | 7 ++ localization/pose2twist/README.md | 2 +- .../include/pose2twist/pose2twist_core.hpp | 10 ++ .../pose2twist/src/pose2twist_core.cpp | 52 +++----- .../pose2twist/test/test_angular_velocity.cpp | 115 ++++++++++++++++++ 5 files changed, 151 insertions(+), 35 deletions(-) create mode 100644 localization/pose2twist/test/test_angular_velocity.cpp diff --git a/localization/pose2twist/CMakeLists.txt b/localization/pose2twist/CMakeLists.txt index 2a586aa9cd049..ee63d9f43559a 100644 --- a/localization/pose2twist/CMakeLists.txt +++ b/localization/pose2twist/CMakeLists.txt @@ -14,6 +14,13 @@ rclcpp_components_register_node(${PROJECT_NAME} EXECUTOR SingleThreadedExecutor ) +if(BUILD_TESTING) + find_package(ament_cmake_gtest REQUIRED) + ament_auto_add_gtest(test_angular_velocity + test/test_angular_velocity.cpp + ) +endif() + ament_auto_package( INSTALL_TO_SHARE launch diff --git a/localization/pose2twist/README.md b/localization/pose2twist/README.md index 07d9c37b710fc..f1f7d6408fafb 100644 --- a/localization/pose2twist/README.md +++ b/localization/pose2twist/README.md @@ -5,7 +5,7 @@ This `pose2twist` calculates the velocity from the input pose history. In addition to the computed twist, this node outputs the linear-x and angular-z components as a float message to simplify debugging. The `twist.linear.x` is calculated as `sqrt(dx * dx + dy * dy + dz * dz) / dt`, and the values in the `y` and `z` fields are zero. -The `twist.angular` is calculated as `d_roll / dt`, `d_pitch / dt` and `d_yaw / dt` for each field. +The `twist.angular` is calculated as `relative_rotation_vector / dt` for each field. ## Inputs / Outputs diff --git a/localization/pose2twist/include/pose2twist/pose2twist_core.hpp b/localization/pose2twist/include/pose2twist/pose2twist_core.hpp index 274fec47b3c32..d1ff6ee5ff8b6 100644 --- a/localization/pose2twist/include/pose2twist/pose2twist_core.hpp +++ b/localization/pose2twist/include/pose2twist/pose2twist_core.hpp @@ -21,6 +21,16 @@ #include #include +#ifdef ROS_DISTRO_GALACTIC +#include +#else +#include +#endif + +// Compute the relative rotation of q2 from q1 as a rotation vector +geometry_msgs::msg::Vector3 compute_relative_rotation_vector( + const tf2::Quaternion & q1, const tf2::Quaternion & q2); + class Pose2Twist : public rclcpp::Node { public: diff --git a/localization/pose2twist/src/pose2twist_core.cpp b/localization/pose2twist/src/pose2twist_core.cpp index f1106c15ebc0d..cdde78ed7e357 100644 --- a/localization/pose2twist/src/pose2twist_core.cpp +++ b/localization/pose2twist/src/pose2twist_core.cpp @@ -14,12 +14,6 @@ #include "pose2twist/pose2twist_core.hpp" -#ifdef ROS_DISTRO_GALACTIC -#include -#else -#include -#endif - #include #include #include @@ -41,29 +35,21 @@ Pose2Twist::Pose2Twist(const rclcpp::NodeOptions & options) : rclcpp::Node("pose "pose", queue_size, std::bind(&Pose2Twist::callback_pose, this, _1)); } -double calc_diff_for_radian(const double lhs_rad, const double rhs_rad) -{ - double diff_rad = lhs_rad - rhs_rad; - if (diff_rad > M_PI) { - diff_rad = diff_rad - 2 * M_PI; - } else if (diff_rad < -M_PI) { - diff_rad = diff_rad + 2 * M_PI; - } - return diff_rad; -} - -// x: roll, y: pitch, z: yaw -geometry_msgs::msg::Vector3 get_rpy(const geometry_msgs::msg::Pose & pose) +tf2::Quaternion get_quaternion(const geometry_msgs::msg::PoseStamped::SharedPtr & pose_stamped_ptr) { - geometry_msgs::msg::Vector3 rpy; - tf2::Quaternion q(pose.orientation.x, pose.orientation.y, pose.orientation.z, pose.orientation.w); - tf2::Matrix3x3(q).getRPY(rpy.x, rpy.y, rpy.z); - return rpy; + const auto & orientation = pose_stamped_ptr->pose.orientation; + return tf2::Quaternion{orientation.x, orientation.y, orientation.z, orientation.w}; } -geometry_msgs::msg::Vector3 get_rpy(geometry_msgs::msg::PoseStamped::SharedPtr pose) +geometry_msgs::msg::Vector3 compute_relative_rotation_vector( + const tf2::Quaternion & q1, const tf2::Quaternion & q2) { - return get_rpy(pose->pose); + // If we define q2 as the rotation obtained by applying dq after applying q1, + // then q2 = q1 * dq . + // Therefore, dq = q1.inverse() * q2 . + const tf2::Quaternion diff_quaternion = q1.inverse() * q2; + const tf2::Vector3 axis = diff_quaternion.getAxis() * diff_quaternion.getAngle(); + return geometry_msgs::msg::Vector3{}.set__x(axis.x()).set__y(axis.y()).set__z(axis.z()); } geometry_msgs::msg::TwistStamped calc_twist( @@ -79,18 +65,16 @@ geometry_msgs::msg::TwistStamped calc_twist( return twist; } - const auto pose_a_rpy = get_rpy(pose_a); - const auto pose_b_rpy = get_rpy(pose_b); + const auto pose_a_quaternion = get_quaternion(pose_a); + const auto pose_b_quaternion = get_quaternion(pose_b); geometry_msgs::msg::Vector3 diff_xyz; - geometry_msgs::msg::Vector3 diff_rpy; + const geometry_msgs::msg::Vector3 relative_rotation_vector = + compute_relative_rotation_vector(pose_a_quaternion, pose_b_quaternion); diff_xyz.x = pose_b->pose.position.x - pose_a->pose.position.x; diff_xyz.y = pose_b->pose.position.y - pose_a->pose.position.y; diff_xyz.z = pose_b->pose.position.z - pose_a->pose.position.z; - diff_rpy.x = calc_diff_for_radian(pose_b_rpy.x, pose_a_rpy.x); - diff_rpy.y = calc_diff_for_radian(pose_b_rpy.y, pose_a_rpy.y); - diff_rpy.z = calc_diff_for_radian(pose_b_rpy.z, pose_a_rpy.z); geometry_msgs::msg::TwistStamped twist; twist.header = pose_b->header; @@ -99,9 +83,9 @@ geometry_msgs::msg::TwistStamped calc_twist( dt; twist.twist.linear.y = 0; twist.twist.linear.z = 0; - twist.twist.angular.x = diff_rpy.x / dt; - twist.twist.angular.y = diff_rpy.y / dt; - twist.twist.angular.z = diff_rpy.z / dt; + twist.twist.angular.x = relative_rotation_vector.x / dt; + twist.twist.angular.y = relative_rotation_vector.y / dt; + twist.twist.angular.z = relative_rotation_vector.z / dt; return twist; } diff --git a/localization/pose2twist/test/test_angular_velocity.cpp b/localization/pose2twist/test/test_angular_velocity.cpp new file mode 100644 index 0000000000000..bf2ca0a3ba5c2 --- /dev/null +++ b/localization/pose2twist/test/test_angular_velocity.cpp @@ -0,0 +1,115 @@ +// Copyright 2022 The Autoware Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "pose2twist/pose2twist_core.hpp" + +#include + +// 1e-3 radian = 0.057 degrees +constexpr double acceptable_error = 1e-3; + +TEST(AngularVelocityFromQuaternion, CheckMultiplicationOrder) +{ + // If we define q2 as the rotation obtained by applying dq after applying q1, then q2 = q1 * dq . + // + // IT IS NOT q2 = dq * q1 . + // + // This test checks that the multiplication order is correct. + + const tf2::Vector3 target_vector(1, 2, 3); + // initial state + // Now, car is facing to the +x direction + // z + // ^ y + // | ^ + // | / + // | / + // car -> x + // + // + // + + tf2::Quaternion q1; + q1.setRPY(0., 0., M_PI / 2.); // yaw = 90 degrees + const tf2::Vector3 initially_rotated_vector = tf2::quatRotate(q1, target_vector); + // after applying q1 + // Now, car is facing to the +y direction + // z + // ^ + // | y + // | ^ + // | / + // <--car x + // + // + // + EXPECT_NEAR(initially_rotated_vector.x(), -2., acceptable_error); + EXPECT_NEAR(initially_rotated_vector.y(), 1., acceptable_error); + EXPECT_NEAR(initially_rotated_vector.z(), 3., acceptable_error); + + tf2::Quaternion dq; + dq.setRPY(0., M_PI / 2., 0.); // pitch = 90 degrees + const tf2::Vector3 finally_rotated_vector = tf2::quatRotate(q1 * dq, target_vector); + // after applying dq + // Now, car is facing to the -z direction + // z y + // ^ + // / + // / + // / + // <--car x + // | + // v + // + EXPECT_NEAR(finally_rotated_vector.x(), -2., acceptable_error); + EXPECT_NEAR(finally_rotated_vector.y(), 3., acceptable_error); + EXPECT_NEAR(finally_rotated_vector.z(), -1., acceptable_error); + + // Failure case + { + const tf2::Vector3 false_rotated_vector = tf2::quatRotate(dq * q1, target_vector); + + EXPECT_FALSE(std::abs(false_rotated_vector.x() - (-2)) < acceptable_error); + EXPECT_FALSE(std::abs(false_rotated_vector.y() - (3)) < acceptable_error); + EXPECT_FALSE(std::abs(false_rotated_vector.z() - (-1)) < acceptable_error); + } +} + +TEST(AngularVelocityFromQuaternion, CheckNumericalValidity) +{ + auto test = [](const tf2::Vector3 & expected_axis, const double expected_angle) -> void { + tf2::Quaternion expected_q; + expected_q.setRotation(expected_axis, expected_angle); + + // Create a random initial quaternion + tf2::Quaternion initial_q; + initial_q.setRPY(0.2, 0.3, 0.4); + + // Calculate the final quaternion by rotating the initial quaternion by the expected + // quaternion + const tf2::Quaternion final_q = initial_q * expected_q; + + // Calculate the relative rotation between the initial and final quaternion + const geometry_msgs::msg::Vector3 rotation_vector = + compute_relative_rotation_vector(initial_q, final_q); + + EXPECT_NEAR(rotation_vector.x, expected_axis.x() * expected_angle, acceptable_error); + EXPECT_NEAR(rotation_vector.y, expected_axis.y() * expected_angle, acceptable_error); + EXPECT_NEAR(rotation_vector.z, expected_axis.z() * expected_angle, acceptable_error); + }; + + test(tf2::Vector3(1.0, 0.0, 0.0).normalized(), 0.1); // 0.1 radian = 5.7 degrees + test(tf2::Vector3(1.0, 1.0, 0.0).normalized(), -0.2); // 0.2 radian = 11.4 degrees + test(tf2::Vector3(1.0, 2.0, 3.0).normalized(), 0.3); // 0.3 radian = 17.2 degrees +} From 722e822293c09dce76d66c08286e5563f2e5d122 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Fri, 7 Jun 2024 15:07:00 +0900 Subject: [PATCH 009/142] chore(smart_mpc): add maitainers (#7346) Signed-off-by: kosuke55 --- control/smart_mpc_trajectory_follower/package.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/control/smart_mpc_trajectory_follower/package.xml b/control/smart_mpc_trajectory_follower/package.xml index 6cdd689c8bd5a..b25a7e2ce8dd6 100644 --- a/control/smart_mpc_trajectory_follower/package.xml +++ b/control/smart_mpc_trajectory_follower/package.xml @@ -7,6 +7,9 @@ Masayuki Aino + Kosuke Takeuchi + Takamasa Horibe + Takayuki Murooka Apache License 2.0 From 9c961a9e1977907845f874708feaa0caa157e893 Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Fri, 7 Jun 2024 15:20:28 +0900 Subject: [PATCH 010/142] refactor(behavior_path_start_planner_module)!: prefix package and namespace with autoware (#7352) * change folder names Signed-off-by: Daniel Sanchez * change namespace Signed-off-by: Daniel Sanchez * add prefix in files Signed-off-by: Daniel Sanchez * add prefix to files outside the module Signed-off-by: Daniel Sanchez * add namespace to plugin Signed-off-by: Daniel Sanchez * Revert "add namespace to plugin" This reverts commit 8aeee4203385dbe76dcd06b8ef4ce116afdbad7c. Signed-off-by: Daniel Sanchez * Revert "change namespace" This reverts commit 8cf69f87612ea4084d66f83ca6a5a11da969d371. Signed-off-by: Daniel Sanchez * fix doc Signed-off-by: Daniel Sanchez * fix back doc Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez --- .github/CODEOWNERS | 2 ++ planning/.pages | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/start_planner.param.yaml | 0 ...lision_check_range_shift_pull_out.drawio.svg | 0 .../images/freespace_pull_out.png | Bin .../images/geometric_pull_out.drawio.svg | 0 .../images/geometric_pull_out_path.drawio.svg | 0 ...geometric_pull_out_path_with_back.drawio.svg | 0 .../images/priority_order.drawio.svg | 0 .../images/pull_out_after_back.drawio.svg | 0 .../images/pull_out_collision_check.drawio.svg | 0 .../images/shift_pull_out.drawio.svg | 0 .../images/shift_pull_out_path.drawio.svg | 0 ...hift_pull_out_path_from_road_lane.drawio.svg | 0 .../shift_pull_out_path_with_back.drawio.svg | 0 .../images/start_planner_example.png | Bin .../images/start_pose_candidate.drawio.svg | 0 .../data_structs.hpp | 6 +++--- .../debug.hpp | 8 ++++---- .../freespace_pull_out.hpp | 8 ++++---- .../geometric_pull_out.hpp | 10 +++++----- .../manager.hpp | 8 ++++---- .../pull_out_path.hpp | 6 +++--- .../pull_out_planner_base.hpp | 12 ++++++------ .../shift_pull_out.hpp | 10 +++++----- .../start_planner_module.hpp | 16 ++++++++-------- .../util.hpp | 8 ++++---- .../package.xml | 4 ++-- .../plugins.xml | 2 +- .../src/debug.cpp | 2 +- .../src/freespace_pull_out.cpp | 4 ++-- .../src/geometric_pull_out.cpp | 4 ++-- .../src/manager.cpp | 2 +- .../src/shift_pull_out.cpp | 4 ++-- .../src/start_planner_module.cpp | 6 +++--- .../src/util.cpp | 2 +- planning/behavior_path_planner/README.md | 2 +- 39 files changed, 66 insertions(+), 64 deletions(-) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/CMakeLists.txt (88%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/README.md (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/config/start_planner.param.yaml (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/collision_check_range_shift_pull_out.drawio.svg (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/freespace_pull_out.png (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/geometric_pull_out.drawio.svg (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/geometric_pull_out_path.drawio.svg (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/geometric_pull_out_path_with_back.drawio.svg (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/priority_order.drawio.svg (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/pull_out_after_back.drawio.svg (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/pull_out_collision_check.drawio.svg (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/shift_pull_out.drawio.svg (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/shift_pull_out_path.drawio.svg (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/shift_pull_out_path_from_road_lane.drawio.svg (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/shift_pull_out_path_with_back.drawio.svg (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/start_planner_example.png (100%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/images/start_pose_candidate.drawio.svg (100%) rename planning/{behavior_path_start_planner_module/include/behavior_path_start_planner_module => autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module}/data_structs.hpp (95%) rename planning/{behavior_path_start_planner_module/include/behavior_path_start_planner_module => autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module}/debug.hpp (80%) rename planning/{behavior_path_start_planner_module/include/behavior_path_start_planner_module => autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module}/freespace_pull_out.hpp (83%) rename planning/{behavior_path_start_planner_module/include/behavior_path_start_planner_module => autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module}/geometric_pull_out.hpp (79%) rename planning/{behavior_path_start_planner_module/include/behavior_path_start_planner_module => autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module}/manager.hpp (84%) rename planning/{behavior_path_start_planner_module/include/behavior_path_start_planner_module => autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module}/pull_out_path.hpp (83%) rename planning/{behavior_path_start_planner_module/include/behavior_path_start_planner_module => autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module}/pull_out_planner_base.hpp (89%) rename planning/{behavior_path_start_planner_module/include/behavior_path_start_planner_module => autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module}/shift_pull_out.hpp (85%) rename planning/{behavior_path_start_planner_module/include/behavior_path_start_planner_module => autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module}/start_planner_module.hpp (95%) rename planning/{behavior_path_start_planner_module/include/behavior_path_start_planner_module => autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module}/util.hpp (89%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/package.xml (91%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/plugins.xml (70%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/src/debug.cpp (94%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/src/freespace_pull_out.cpp (97%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/src/geometric_pull_out.cpp (97%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/src/manager.cpp (99%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/src/shift_pull_out.cpp (99%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/src/start_planner_module.cpp (99%) rename planning/{behavior_path_start_planner_module => autoware_behavior_path_start_planner_module}/src/util.cpp (98%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 36b1af9887ed9..d2d6fa2c56343 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -166,6 +166,8 @@ planning/behavior_path_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.tak planning/behavior_path_planner/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/behavior_path_sampling_planner_module/** daniel.sanchez@tier4.jp maxime.clement@tier4.jp planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_path_start_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_path_start_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_blind_spot_module/** mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_crosswalk_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yuki.takagi@tier4.jp diff --git a/planning/.pages b/planning/.pages index 29b0f6a2cde56..7b932118b5010 100644 --- a/planning/.pages +++ b/planning/.pages @@ -15,7 +15,7 @@ nav: - 'Goal Planner': planning/behavior_path_goal_planner_module - 'Lane Change': planning/behavior_path_lane_change_module - 'Side Shift': planning/autoware_behavior_path_side_shift_module - - 'Start Planner': planning/behavior_path_start_planner_module + - 'Start Planner': planning/autoware_behavior_path_start_planner_module - 'Static Obstacle Avoidance': planning/autoware_behavior_path_static_obstacle_avoidance_module - 'Behavior Velocity Planner': - 'About Behavior Velocity': planning/autoware_behavior_velocity_planner diff --git a/planning/behavior_path_start_planner_module/CMakeLists.txt b/planning/autoware_behavior_path_start_planner_module/CMakeLists.txt similarity index 88% rename from planning/behavior_path_start_planner_module/CMakeLists.txt rename to planning/autoware_behavior_path_start_planner_module/CMakeLists.txt index 6bb2f76cb9842..b2882727f50d8 100644 --- a/planning/behavior_path_start_planner_module/CMakeLists.txt +++ b/planning/autoware_behavior_path_start_planner_module/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(behavior_path_start_planner_module) +project(autoware_behavior_path_start_planner_module) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/planning/behavior_path_start_planner_module/README.md b/planning/autoware_behavior_path_start_planner_module/README.md similarity index 100% rename from planning/behavior_path_start_planner_module/README.md rename to planning/autoware_behavior_path_start_planner_module/README.md diff --git a/planning/behavior_path_start_planner_module/config/start_planner.param.yaml b/planning/autoware_behavior_path_start_planner_module/config/start_planner.param.yaml similarity index 100% rename from planning/behavior_path_start_planner_module/config/start_planner.param.yaml rename to planning/autoware_behavior_path_start_planner_module/config/start_planner.param.yaml diff --git a/planning/behavior_path_start_planner_module/images/collision_check_range_shift_pull_out.drawio.svg b/planning/autoware_behavior_path_start_planner_module/images/collision_check_range_shift_pull_out.drawio.svg similarity index 100% rename from planning/behavior_path_start_planner_module/images/collision_check_range_shift_pull_out.drawio.svg rename to planning/autoware_behavior_path_start_planner_module/images/collision_check_range_shift_pull_out.drawio.svg diff --git a/planning/behavior_path_start_planner_module/images/freespace_pull_out.png b/planning/autoware_behavior_path_start_planner_module/images/freespace_pull_out.png similarity index 100% rename from planning/behavior_path_start_planner_module/images/freespace_pull_out.png rename to planning/autoware_behavior_path_start_planner_module/images/freespace_pull_out.png diff --git a/planning/behavior_path_start_planner_module/images/geometric_pull_out.drawio.svg b/planning/autoware_behavior_path_start_planner_module/images/geometric_pull_out.drawio.svg similarity index 100% rename from planning/behavior_path_start_planner_module/images/geometric_pull_out.drawio.svg rename to planning/autoware_behavior_path_start_planner_module/images/geometric_pull_out.drawio.svg diff --git a/planning/behavior_path_start_planner_module/images/geometric_pull_out_path.drawio.svg b/planning/autoware_behavior_path_start_planner_module/images/geometric_pull_out_path.drawio.svg similarity index 100% rename from planning/behavior_path_start_planner_module/images/geometric_pull_out_path.drawio.svg rename to planning/autoware_behavior_path_start_planner_module/images/geometric_pull_out_path.drawio.svg diff --git a/planning/behavior_path_start_planner_module/images/geometric_pull_out_path_with_back.drawio.svg b/planning/autoware_behavior_path_start_planner_module/images/geometric_pull_out_path_with_back.drawio.svg similarity index 100% rename from planning/behavior_path_start_planner_module/images/geometric_pull_out_path_with_back.drawio.svg rename to planning/autoware_behavior_path_start_planner_module/images/geometric_pull_out_path_with_back.drawio.svg diff --git a/planning/behavior_path_start_planner_module/images/priority_order.drawio.svg b/planning/autoware_behavior_path_start_planner_module/images/priority_order.drawio.svg similarity index 100% rename from planning/behavior_path_start_planner_module/images/priority_order.drawio.svg rename to planning/autoware_behavior_path_start_planner_module/images/priority_order.drawio.svg diff --git a/planning/behavior_path_start_planner_module/images/pull_out_after_back.drawio.svg b/planning/autoware_behavior_path_start_planner_module/images/pull_out_after_back.drawio.svg similarity index 100% rename from planning/behavior_path_start_planner_module/images/pull_out_after_back.drawio.svg rename to planning/autoware_behavior_path_start_planner_module/images/pull_out_after_back.drawio.svg diff --git a/planning/behavior_path_start_planner_module/images/pull_out_collision_check.drawio.svg b/planning/autoware_behavior_path_start_planner_module/images/pull_out_collision_check.drawio.svg similarity index 100% rename from planning/behavior_path_start_planner_module/images/pull_out_collision_check.drawio.svg rename to planning/autoware_behavior_path_start_planner_module/images/pull_out_collision_check.drawio.svg diff --git a/planning/behavior_path_start_planner_module/images/shift_pull_out.drawio.svg b/planning/autoware_behavior_path_start_planner_module/images/shift_pull_out.drawio.svg similarity index 100% rename from planning/behavior_path_start_planner_module/images/shift_pull_out.drawio.svg rename to planning/autoware_behavior_path_start_planner_module/images/shift_pull_out.drawio.svg diff --git a/planning/behavior_path_start_planner_module/images/shift_pull_out_path.drawio.svg b/planning/autoware_behavior_path_start_planner_module/images/shift_pull_out_path.drawio.svg similarity index 100% rename from planning/behavior_path_start_planner_module/images/shift_pull_out_path.drawio.svg rename to planning/autoware_behavior_path_start_planner_module/images/shift_pull_out_path.drawio.svg diff --git a/planning/behavior_path_start_planner_module/images/shift_pull_out_path_from_road_lane.drawio.svg b/planning/autoware_behavior_path_start_planner_module/images/shift_pull_out_path_from_road_lane.drawio.svg similarity index 100% rename from planning/behavior_path_start_planner_module/images/shift_pull_out_path_from_road_lane.drawio.svg rename to planning/autoware_behavior_path_start_planner_module/images/shift_pull_out_path_from_road_lane.drawio.svg diff --git a/planning/behavior_path_start_planner_module/images/shift_pull_out_path_with_back.drawio.svg b/planning/autoware_behavior_path_start_planner_module/images/shift_pull_out_path_with_back.drawio.svg similarity index 100% rename from planning/behavior_path_start_planner_module/images/shift_pull_out_path_with_back.drawio.svg rename to planning/autoware_behavior_path_start_planner_module/images/shift_pull_out_path_with_back.drawio.svg diff --git a/planning/behavior_path_start_planner_module/images/start_planner_example.png b/planning/autoware_behavior_path_start_planner_module/images/start_planner_example.png similarity index 100% rename from planning/behavior_path_start_planner_module/images/start_planner_example.png rename to planning/autoware_behavior_path_start_planner_module/images/start_planner_example.png diff --git a/planning/behavior_path_start_planner_module/images/start_pose_candidate.drawio.svg b/planning/autoware_behavior_path_start_planner_module/images/start_pose_candidate.drawio.svg similarity index 100% rename from planning/behavior_path_start_planner_module/images/start_pose_candidate.drawio.svg rename to planning/autoware_behavior_path_start_planner_module/images/start_pose_candidate.drawio.svg diff --git a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/data_structs.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/data_structs.hpp similarity index 95% rename from planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/data_structs.hpp rename to planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/data_structs.hpp index d8b94bb33d00b..95c98c3c89733 100644 --- a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/data_structs.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/data_structs.hpp @@ -13,8 +13,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_START_PLANNER_MODULE__DATA_STRUCTS_HPP_ -#define BEHAVIOR_PATH_START_PLANNER_MODULE__DATA_STRUCTS_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__DATA_STRUCTS_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__DATA_STRUCTS_HPP_ #include "autoware_behavior_path_planner_common/utils/parking_departure/geometric_parallel_parking.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/path_safety_checker_parameters.hpp" @@ -134,4 +134,4 @@ struct StartPlannerParameters } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_START_PLANNER_MODULE__DATA_STRUCTS_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__DATA_STRUCTS_HPP_ diff --git a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/debug.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/debug.hpp similarity index 80% rename from planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/debug.hpp rename to planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/debug.hpp index 6aa5584807d90..c252a8f22eda5 100644 --- a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/debug.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/debug.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_START_PLANNER_MODULE__DEBUG_HPP_ -#define BEHAVIOR_PATH_START_PLANNER_MODULE__DEBUG_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__DEBUG_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__DEBUG_HPP_ -#include "behavior_path_start_planner_module/data_structs.hpp" +#include "autoware_behavior_path_start_planner_module/data_structs.hpp" #include #include @@ -36,4 +36,4 @@ void updateSafetyCheckDebugData( } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_START_PLANNER_MODULE__DEBUG_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__DEBUG_HPP_ diff --git a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/freespace_pull_out.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/freespace_pull_out.hpp similarity index 83% rename from planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/freespace_pull_out.hpp rename to planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/freespace_pull_out.hpp index 561ef337fa68c..df640b04e5a72 100644 --- a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/freespace_pull_out.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/freespace_pull_out.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_START_PLANNER_MODULE__FREESPACE_PULL_OUT_HPP_ -#define BEHAVIOR_PATH_START_PLANNER_MODULE__FREESPACE_PULL_OUT_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__FREESPACE_PULL_OUT_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__FREESPACE_PULL_OUT_HPP_ -#include "behavior_path_start_planner_module/pull_out_planner_base.hpp" +#include "autoware_behavior_path_start_planner_module/pull_out_planner_base.hpp" #include #include @@ -49,4 +49,4 @@ class FreespacePullOut : public PullOutPlannerBase }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_START_PLANNER_MODULE__FREESPACE_PULL_OUT_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__FREESPACE_PULL_OUT_HPP_ diff --git a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/geometric_pull_out.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/geometric_pull_out.hpp similarity index 79% rename from planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/geometric_pull_out.hpp rename to planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/geometric_pull_out.hpp index ccf9e933f9383..5edde96ea4abf 100644 --- a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/geometric_pull_out.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/geometric_pull_out.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_START_PLANNER_MODULE__GEOMETRIC_PULL_OUT_HPP_ -#define BEHAVIOR_PATH_START_PLANNER_MODULE__GEOMETRIC_PULL_OUT_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__GEOMETRIC_PULL_OUT_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__GEOMETRIC_PULL_OUT_HPP_ #include "autoware_behavior_path_planner_common/utils/parking_departure/geometric_parallel_parking.hpp" -#include "behavior_path_start_planner_module/pull_out_path.hpp" -#include "behavior_path_start_planner_module/pull_out_planner_base.hpp" +#include "autoware_behavior_path_start_planner_module/pull_out_path.hpp" +#include "autoware_behavior_path_start_planner_module/pull_out_planner_base.hpp" #include @@ -43,4 +43,4 @@ class GeometricPullOut : public PullOutPlannerBase }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_START_PLANNER_MODULE__GEOMETRIC_PULL_OUT_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__GEOMETRIC_PULL_OUT_HPP_ diff --git a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/manager.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/manager.hpp similarity index 84% rename from planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/manager.hpp rename to planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/manager.hpp index ac752918a0e32..a7fcd6d820202 100644 --- a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/manager.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/manager.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_START_PLANNER_MODULE__MANAGER_HPP_ -#define BEHAVIOR_PATH_START_PLANNER_MODULE__MANAGER_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__MANAGER_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__MANAGER_HPP_ #include "autoware_behavior_path_planner_common/interface/scene_module_manager_interface.hpp" -#include "behavior_path_start_planner_module/start_planner_module.hpp" +#include "autoware_behavior_path_start_planner_module/start_planner_module.hpp" #include @@ -53,4 +53,4 @@ class StartPlannerModuleManager : public SceneModuleManagerInterface } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_START_PLANNER_MODULE__MANAGER_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__MANAGER_HPP_ diff --git a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/pull_out_path.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/pull_out_path.hpp similarity index 83% rename from planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/pull_out_path.hpp rename to planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/pull_out_path.hpp index f7f443c297c61..5674087cdb3df 100644 --- a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/pull_out_path.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/pull_out_path.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_START_PLANNER_MODULE__PULL_OUT_PATH_HPP_ -#define BEHAVIOR_PATH_START_PLANNER_MODULE__PULL_OUT_PATH_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__PULL_OUT_PATH_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__PULL_OUT_PATH_HPP_ #include "autoware_behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" @@ -34,4 +34,4 @@ struct PullOutPath Pose end_pose{}; }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_START_PLANNER_MODULE__PULL_OUT_PATH_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__PULL_OUT_PATH_HPP_ diff --git a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/pull_out_planner_base.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/pull_out_planner_base.hpp similarity index 89% rename from planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/pull_out_planner_base.hpp rename to planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/pull_out_planner_base.hpp index f2c437883b8a1..8cbe3569d13fe 100644 --- a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/pull_out_planner_base.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/pull_out_planner_base.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_START_PLANNER_MODULE__PULL_OUT_PLANNER_BASE_HPP_ -#define BEHAVIOR_PATH_START_PLANNER_MODULE__PULL_OUT_PLANNER_BASE_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__PULL_OUT_PLANNER_BASE_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__PULL_OUT_PLANNER_BASE_HPP_ #include "autoware_behavior_path_planner_common/data_manager.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp" -#include "behavior_path_start_planner_module/data_structs.hpp" -#include "behavior_path_start_planner_module/pull_out_path.hpp" -#include "behavior_path_start_planner_module/util.hpp" +#include "autoware_behavior_path_start_planner_module/data_structs.hpp" +#include "autoware_behavior_path_start_planner_module/pull_out_path.hpp" +#include "autoware_behavior_path_start_planner_module/util.hpp" #include #include @@ -102,4 +102,4 @@ class PullOutPlannerBase }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_START_PLANNER_MODULE__PULL_OUT_PLANNER_BASE_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__PULL_OUT_PLANNER_BASE_HPP_ diff --git a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/shift_pull_out.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/shift_pull_out.hpp similarity index 85% rename from planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/shift_pull_out.hpp rename to planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/shift_pull_out.hpp index 3bded7ee99fbb..3092ca4f80e3f 100644 --- a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/shift_pull_out.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/shift_pull_out.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_START_PLANNER_MODULE__SHIFT_PULL_OUT_HPP_ -#define BEHAVIOR_PATH_START_PLANNER_MODULE__SHIFT_PULL_OUT_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__SHIFT_PULL_OUT_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__SHIFT_PULL_OUT_HPP_ -#include "behavior_path_start_planner_module/pull_out_path.hpp" -#include "behavior_path_start_planner_module/pull_out_planner_base.hpp" +#include "autoware_behavior_path_start_planner_module/pull_out_path.hpp" +#include "autoware_behavior_path_start_planner_module/pull_out_planner_base.hpp" #include @@ -61,4 +61,4 @@ class ShiftPullOut : public PullOutPlannerBase }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_START_PLANNER_MODULE__SHIFT_PULL_OUT_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__SHIFT_PULL_OUT_HPP_ diff --git a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/start_planner_module.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/start_planner_module.hpp similarity index 95% rename from planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/start_planner_module.hpp rename to planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/start_planner_module.hpp index c8e74009d267a..1883e10af3c62 100644 --- a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/start_planner_module.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/start_planner_module.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_START_PLANNER_MODULE__START_PLANNER_MODULE_HPP_ -#define BEHAVIOR_PATH_START_PLANNER_MODULE__START_PLANNER_MODULE_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__START_PLANNER_MODULE_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__START_PLANNER_MODULE_HPP_ #include "autoware_behavior_path_planner_common/interface/scene_module_interface.hpp" #include "autoware_behavior_path_planner_common/utils/parking_departure/common_module_data.hpp" @@ -21,11 +21,11 @@ #include "autoware_behavior_path_planner_common/utils/path_safety_checker/path_safety_checker_parameters.hpp" #include "autoware_behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" -#include "behavior_path_start_planner_module/data_structs.hpp" -#include "behavior_path_start_planner_module/freespace_pull_out.hpp" -#include "behavior_path_start_planner_module/geometric_pull_out.hpp" -#include "behavior_path_start_planner_module/pull_out_path.hpp" -#include "behavior_path_start_planner_module/shift_pull_out.hpp" +#include "autoware_behavior_path_start_planner_module/data_structs.hpp" +#include "autoware_behavior_path_start_planner_module/freespace_pull_out.hpp" +#include "autoware_behavior_path_start_planner_module/geometric_pull_out.hpp" +#include "autoware_behavior_path_start_planner_module/pull_out_path.hpp" +#include "autoware_behavior_path_start_planner_module/shift_pull_out.hpp" #include #include @@ -336,4 +336,4 @@ class StartPlannerModule : public SceneModuleInterface }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_START_PLANNER_MODULE__START_PLANNER_MODULE_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__START_PLANNER_MODULE_HPP_ diff --git a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/util.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/util.hpp similarity index 89% rename from planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/util.hpp rename to planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/util.hpp index 9185873cfd770..b9f0b964ed428 100644 --- a/planning/behavior_path_start_planner_module/include/behavior_path_start_planner_module/util.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/util.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_START_PLANNER_MODULE__UTIL_HPP_ -#define BEHAVIOR_PATH_START_PLANNER_MODULE__UTIL_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__UTIL_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__UTIL_HPP_ #include "autoware_behavior_path_planner_common/data_manager.hpp" #include "autoware_behavior_path_planner_common/utils/drivable_area_expansion/static_drivable_area.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/path_safety_checker_parameters.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/safety_check.hpp" -#include "behavior_path_start_planner_module/pull_out_path.hpp" +#include "autoware_behavior_path_start_planner_module/pull_out_path.hpp" #include @@ -55,4 +55,4 @@ std::optional extractCollisionCheckSection( const PullOutPath & path, const double collision_check_distance_from_end); } // namespace behavior_path_planner::start_planner_utils -#endif // BEHAVIOR_PATH_START_PLANNER_MODULE__UTIL_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_START_PLANNER_MODULE__UTIL_HPP_ diff --git a/planning/behavior_path_start_planner_module/package.xml b/planning/autoware_behavior_path_start_planner_module/package.xml similarity index 91% rename from planning/behavior_path_start_planner_module/package.xml rename to planning/autoware_behavior_path_start_planner_module/package.xml index 23c57b6d6024a..8504241c908ce 100644 --- a/planning/behavior_path_start_planner_module/package.xml +++ b/planning/autoware_behavior_path_start_planner_module/package.xml @@ -1,9 +1,9 @@ - behavior_path_start_planner_module + autoware_behavior_path_start_planner_module 0.1.0 - The behavior_path_start_planner_module package + The autoware_behavior_path_start_planner_module package Kosuke Takeuchi Kyoichi Sugahara diff --git a/planning/behavior_path_start_planner_module/plugins.xml b/planning/autoware_behavior_path_start_planner_module/plugins.xml similarity index 70% rename from planning/behavior_path_start_planner_module/plugins.xml rename to planning/autoware_behavior_path_start_planner_module/plugins.xml index fde8b673be5bc..92498d5158ae5 100644 --- a/planning/behavior_path_start_planner_module/plugins.xml +++ b/planning/autoware_behavior_path_start_planner_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_path_start_planner_module/src/debug.cpp b/planning/autoware_behavior_path_start_planner_module/src/debug.cpp similarity index 94% rename from planning/behavior_path_start_planner_module/src/debug.cpp rename to planning/autoware_behavior_path_start_planner_module/src/debug.cpp index 0f95470d86d40..4b4aa7c386925 100644 --- a/planning/behavior_path_start_planner_module/src/debug.cpp +++ b/planning/autoware_behavior_path_start_planner_module/src/debug.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_start_planner_module/debug.hpp" +#include "autoware_behavior_path_start_planner_module/debug.hpp" namespace behavior_path_planner { diff --git a/planning/behavior_path_start_planner_module/src/freespace_pull_out.cpp b/planning/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp similarity index 97% rename from planning/behavior_path_start_planner_module/src/freespace_pull_out.cpp rename to planning/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp index d29047d23fffd..1dfacd45b5218 100644 --- a/planning/behavior_path_start_planner_module/src/freespace_pull_out.cpp +++ b/planning/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_start_planner_module/freespace_pull_out.hpp" +#include "autoware_behavior_path_start_planner_module/freespace_pull_out.hpp" #include "autoware_behavior_path_planner_common/utils/parking_departure/utils.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" -#include "behavior_path_start_planner_module/util.hpp" +#include "autoware_behavior_path_start_planner_module/util.hpp" #include diff --git a/planning/behavior_path_start_planner_module/src/geometric_pull_out.cpp b/planning/autoware_behavior_path_start_planner_module/src/geometric_pull_out.cpp similarity index 97% rename from planning/behavior_path_start_planner_module/src/geometric_pull_out.cpp rename to planning/autoware_behavior_path_start_planner_module/src/geometric_pull_out.cpp index 18d02ade489e8..86d7de246c312 100644 --- a/planning/behavior_path_start_planner_module/src/geometric_pull_out.cpp +++ b/planning/autoware_behavior_path_start_planner_module/src/geometric_pull_out.cpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_start_planner_module/geometric_pull_out.hpp" +#include "autoware_behavior_path_start_planner_module/geometric_pull_out.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" -#include "behavior_path_start_planner_module/util.hpp" +#include "autoware_behavior_path_start_planner_module/util.hpp" #include "tier4_autoware_utils/geometry/boost_polygon_utils.hpp" #include diff --git a/planning/behavior_path_start_planner_module/src/manager.cpp b/planning/autoware_behavior_path_start_planner_module/src/manager.cpp similarity index 99% rename from planning/behavior_path_start_planner_module/src/manager.cpp rename to planning/autoware_behavior_path_start_planner_module/src/manager.cpp index d5731f54224b6..23cca1ef05190 100644 --- a/planning/behavior_path_start_planner_module/src/manager.cpp +++ b/planning/autoware_behavior_path_start_planner_module/src/manager.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_start_planner_module/manager.hpp" +#include "autoware_behavior_path_start_planner_module/manager.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" diff --git a/planning/behavior_path_start_planner_module/src/shift_pull_out.cpp b/planning/autoware_behavior_path_start_planner_module/src/shift_pull_out.cpp similarity index 99% rename from planning/behavior_path_start_planner_module/src/shift_pull_out.cpp rename to planning/autoware_behavior_path_start_planner_module/src/shift_pull_out.cpp index 298510126a4c3..d0a7b827a2285 100644 --- a/planning/behavior_path_start_planner_module/src/shift_pull_out.cpp +++ b/planning/autoware_behavior_path_start_planner_module/src/shift_pull_out.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_start_planner_module/shift_pull_out.hpp" +#include "autoware_behavior_path_start_planner_module/shift_pull_out.hpp" #include "autoware_behavior_path_planner_common/utils/parking_departure/utils.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" -#include "behavior_path_start_planner_module/util.hpp" +#include "autoware_behavior_path_start_planner_module/util.hpp" #include "motion_utils/trajectory/path_with_lane_id.hpp" #include "tier4_autoware_utils/geometry/boost_polygon_utils.hpp" diff --git a/planning/behavior_path_start_planner_module/src/start_planner_module.cpp b/planning/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp similarity index 99% rename from planning/behavior_path_start_planner_module/src/start_planner_module.cpp rename to planning/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp index 82a4709c6b5be..c13afdf2b86df 100644 --- a/planning/behavior_path_start_planner_module/src/start_planner_module.cpp +++ b/planning/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_start_planner_module/start_planner_module.hpp" +#include "autoware_behavior_path_start_planner_module/start_planner_module.hpp" #include "autoware_behavior_path_planner_common/utils/parking_departure/utils.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/path_safety_checker_parameters.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" -#include "behavior_path_start_planner_module/debug.hpp" -#include "behavior_path_start_planner_module/util.hpp" +#include "autoware_behavior_path_start_planner_module/debug.hpp" +#include "autoware_behavior_path_start_planner_module/util.hpp" #include "motion_utils/trajectory/trajectory.hpp" #include diff --git a/planning/behavior_path_start_planner_module/src/util.cpp b/planning/autoware_behavior_path_start_planner_module/src/util.cpp similarity index 98% rename from planning/behavior_path_start_planner_module/src/util.cpp rename to planning/autoware_behavior_path_start_planner_module/src/util.cpp index b1bcf59db86cb..51a6093936154 100644 --- a/planning/behavior_path_start_planner_module/src/util.cpp +++ b/planning/autoware_behavior_path_start_planner_module/src/util.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_start_planner_module/util.hpp" +#include "autoware_behavior_path_start_planner_module/util.hpp" #include "autoware_behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" diff --git a/planning/behavior_path_planner/README.md b/planning/behavior_path_planner/README.md index 08a3570b1a271..70190731ac1a7 100644 --- a/planning/behavior_path_planner/README.md +++ b/planning/behavior_path_planner/README.md @@ -33,7 +33,7 @@ Behavior Path Planner has following scene modules | Lane Change | this module is performed when it is necessary and a collision check with other vehicles is cleared. | [LINK](../behavior_path_lane_change_module/README.md) | | External Lane Change | WIP | LINK | | Goal Planner | this module is performed when ego-vehicle is in the road lane and goal is in the shoulder lane. ego-vehicle will stop at the goal. | [LINK](../behavior_path_goal_planner_module/README.md) | -| Start Planner | this module is performed when ego-vehicle is stationary and footprint of ego-vehicle is included in shoulder lane. This module ends when ego-vehicle merges into the road. | [LINK](../behavior_path_start_planner_module/README.md) | +| Start Planner | this module is performed when ego-vehicle is stationary and footprint of ego-vehicle is included in shoulder lane. This module ends when ego-vehicle merges into the road. | [LINK](../autoware_behavior_path_start_planner_module/README.md) | | Side Shift | (for remote control) shift the path to left or right according to an external instruction. | [LINK](../autoware_behavior_path_side_shift_module/README.md) | !!! Note From ce0fcf5608757fbb4429a20258e7523e4992f8ff Mon Sep 17 00:00:00 2001 From: Zhe Shen <80969277+HansOersted@users.noreply.github.com> Date: Fri, 7 Jun 2024 15:30:16 +0900 Subject: [PATCH 011/142] refactor(mpc_lateral_controller, trajectory_follower_node)!: prefix package and namespace with autoware (#7306) * add the prefix to the folder Signed-off-by: Zhe Shen * named to autoware_mpc_lateral_controller Signed-off-by: Zhe Shen * rename the folder in the include Signed-off-by: Zhe Shen * correct the package name in xml and CMakeLists Signed-off-by: Zhe Shen * correct the namespace and include Signed-off-by: Zhe Shen * change namespace and include in src/ Signed-off-by: Zhe Shen * change namespace and include in test/ Signed-off-by: Zhe Shen * fix the trajectory_follower_node Signed-off-by: Zhe Shen * undo rename to the namespace Signed-off-by: Zhe Shen * change the trajectory_follower_node, Controller.drawio.svg, and README.md Signed-off-by: Zhe Shen * fixed by pre-commit Signed-off-by: Zhe Shen * suppress the unnecessary line length detect Signed-off-by: Zhe Shen --------- Signed-off-by: Zhe Shen --- .../CMakeLists.txt | 2 +- .../README.md | 0 .../image/vehicle_error_kinematics.png | Bin .../image/vehicle_kinematics.png | Bin .../lowpass_filter.hpp | 6 +++--- .../autoware_mpc_lateral_controller}/mpc.hpp | 18 +++++++++--------- .../mpc_lateral_controller.hpp | 14 +++++++------- .../mpc_trajectory.hpp | 6 +++--- .../mpc_utils.hpp | 8 ++++---- .../qp_solver/qp_solver_interface.hpp | 6 +++--- .../qp_solver/qp_solver_osqp.hpp | 8 ++++---- .../qp_solver/qp_solver_unconstraint_fast.hpp | 8 ++++---- .../steering_offset/steering_offset.hpp | 6 +++--- .../steering_predictor.hpp | 6 +++--- .../vehicle_model_bicycle_dynamics.hpp | 8 ++++---- .../vehicle_model_bicycle_kinematics.hpp | 8 ++++---- ...icle_model_bicycle_kinematics_no_delay.hpp | 10 ++++++---- .../vehicle_model/vehicle_model_interface.hpp | 8 ++++---- .../model_predictive_control_algorithm.md | 0 .../package.xml | 2 +- .../lateral_controller_defaults.param.yaml | 0 .../src/lowpass_filter.cpp | 2 +- .../src/mpc.cpp | 4 ++-- .../src/mpc_lateral_controller.cpp | 12 ++++++------ .../src/mpc_trajectory.cpp | 2 +- .../src/mpc_utils.cpp | 2 +- .../src/qp_solver/qp_solver_osqp.cpp | 2 +- .../qp_solver/qp_solver_unconstraint_fast.cpp | 2 +- .../src/steering_offset/steering_offset.cpp | 2 +- .../src/steering_predictor.cpp | 2 +- .../vehicle_model_bicycle_dynamics.cpp | 2 +- .../vehicle_model_bicycle_kinematics.cpp | 2 +- ...icle_model_bicycle_kinematics_no_delay.cpp | 2 +- .../vehicle_model/vehicle_model_interface.cpp | 2 +- .../test/test_lowpass_filter.cpp | 2 +- .../test/test_mpc.cpp | 12 ++++++------ .../test/test_mpc_utils.cpp | 4 ++-- control/trajectory_follower_node/README.md | 2 +- .../design/media/Controller.drawio.svg | 2 +- control/trajectory_follower_node/package.xml | 2 +- .../src/controller_node.cpp | 2 +- .../test/test_controller_node.cpp | 2 +- 42 files changed, 96 insertions(+), 94 deletions(-) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/CMakeLists.txt (96%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/README.md (100%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/image/vehicle_error_kinematics.png (100%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/image/vehicle_kinematics.png (100%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/lowpass_filter.hpp (95%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/mpc.hpp (97%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/mpc_lateral_controller.hpp (95%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/mpc_trajectory.hpp (95%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/mpc_utils.hpp (97%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/qp_solver/qp_solver_interface.hpp (89%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/qp_solver/qp_solver_osqp.hpp (88%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/qp_solver/qp_solver_unconstraint_fast.hpp (87%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/steering_offset/steering_offset.hpp (84%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/steering_predictor.hpp (92%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/vehicle_model/vehicle_model_bicycle_dynamics.hpp (92%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/vehicle_model/vehicle_model_bicycle_kinematics.hpp (90%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp (87%) rename control/{mpc_lateral_controller/include/mpc_lateral_controller => autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller}/vehicle_model/vehicle_model_interface.hpp (93%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/model_predictive_control_algorithm.md (100%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/package.xml (97%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/param/lateral_controller_defaults.param.yaml (100%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/src/lowpass_filter.cpp (98%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/src/mpc.cpp (99%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/src/mpc_lateral_controller.cpp (98%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/src/mpc_trajectory.cpp (97%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/src/mpc_utils.cpp (99%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/src/qp_solver/qp_solver_osqp.cpp (97%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/src/qp_solver/qp_solver_unconstraint_fast.cpp (93%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/src/steering_offset/steering_offset.cpp (95%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/src/steering_predictor.cpp (98%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/src/vehicle_model/vehicle_model_bicycle_dynamics.cpp (98%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/src/vehicle_model/vehicle_model_bicycle_kinematics.cpp (98%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/src/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.cpp (98%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/src/vehicle_model/vehicle_model_interface.cpp (94%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/test/test_lowpass_filter.cpp (98%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/test/test_mpc.cpp (97%) rename control/{mpc_lateral_controller => autoware_mpc_lateral_controller}/test/test_mpc_utils.cpp (95%) diff --git a/control/mpc_lateral_controller/CMakeLists.txt b/control/autoware_mpc_lateral_controller/CMakeLists.txt similarity index 96% rename from control/mpc_lateral_controller/CMakeLists.txt rename to control/autoware_mpc_lateral_controller/CMakeLists.txt index e4a3683ea1fdc..dff85d70419a1 100644 --- a/control/mpc_lateral_controller/CMakeLists.txt +++ b/control/autoware_mpc_lateral_controller/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(mpc_lateral_controller) +project(autoware_mpc_lateral_controller) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/control/mpc_lateral_controller/README.md b/control/autoware_mpc_lateral_controller/README.md similarity index 100% rename from control/mpc_lateral_controller/README.md rename to control/autoware_mpc_lateral_controller/README.md diff --git a/control/mpc_lateral_controller/image/vehicle_error_kinematics.png b/control/autoware_mpc_lateral_controller/image/vehicle_error_kinematics.png similarity index 100% rename from control/mpc_lateral_controller/image/vehicle_error_kinematics.png rename to control/autoware_mpc_lateral_controller/image/vehicle_error_kinematics.png diff --git a/control/mpc_lateral_controller/image/vehicle_kinematics.png b/control/autoware_mpc_lateral_controller/image/vehicle_kinematics.png similarity index 100% rename from control/mpc_lateral_controller/image/vehicle_kinematics.png rename to control/autoware_mpc_lateral_controller/image/vehicle_kinematics.png diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/lowpass_filter.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/lowpass_filter.hpp similarity index 95% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/lowpass_filter.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/lowpass_filter.hpp index 227bd0594312b..73cef7cddda39 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/lowpass_filter.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/lowpass_filter.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MPC_LATERAL_CONTROLLER__LOWPASS_FILTER_HPP_ -#define MPC_LATERAL_CONTROLLER__LOWPASS_FILTER_HPP_ +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__LOWPASS_FILTER_HPP_ +#define AUTOWARE_MPC_LATERAL_CONTROLLER__LOWPASS_FILTER_HPP_ #include #include @@ -102,4 +102,4 @@ namespace MoveAverageFilter bool filt_vector(const int num, std::vector & u); } // namespace MoveAverageFilter } // namespace autoware::motion::control::mpc_lateral_controller -#endif // MPC_LATERAL_CONTROLLER__LOWPASS_FILTER_HPP_ +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__LOWPASS_FILTER_HPP_ diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/mpc.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc.hpp similarity index 97% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/mpc.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc.hpp index 91b803dea36fa..03abae66e4986 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/mpc.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MPC_LATERAL_CONTROLLER__MPC_HPP_ -#define MPC_LATERAL_CONTROLLER__MPC_HPP_ - -#include "mpc_lateral_controller/lowpass_filter.hpp" -#include "mpc_lateral_controller/mpc_trajectory.hpp" -#include "mpc_lateral_controller/qp_solver/qp_solver_interface.hpp" -#include "mpc_lateral_controller/steering_predictor.hpp" -#include "mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp" +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__MPC_HPP_ +#define AUTOWARE_MPC_LATERAL_CONTROLLER__MPC_HPP_ + +#include "autoware_mpc_lateral_controller/lowpass_filter.hpp" +#include "autoware_mpc_lateral_controller/mpc_trajectory.hpp" +#include "autoware_mpc_lateral_controller/qp_solver/qp_solver_interface.hpp" +#include "autoware_mpc_lateral_controller/steering_predictor.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp" #include "rclcpp/rclcpp.hpp" #include "autoware_control_msgs/msg/lateral.hpp" @@ -525,4 +525,4 @@ class MPC }; // class MPC } // namespace autoware::motion::control::mpc_lateral_controller -#endif // MPC_LATERAL_CONTROLLER__MPC_HPP_ +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__MPC_HPP_ diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/mpc_lateral_controller.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc_lateral_controller.hpp similarity index 95% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/mpc_lateral_controller.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc_lateral_controller.hpp index eb1d75f9508b3..e0775e1d09def 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/mpc_lateral_controller.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc_lateral_controller.hpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MPC_LATERAL_CONTROLLER__MPC_LATERAL_CONTROLLER_HPP_ -#define MPC_LATERAL_CONTROLLER__MPC_LATERAL_CONTROLLER_HPP_ +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__MPC_LATERAL_CONTROLLER_HPP_ +#define AUTOWARE_MPC_LATERAL_CONTROLLER__MPC_LATERAL_CONTROLLER_HPP_ -#include "mpc_lateral_controller/mpc.hpp" -#include "mpc_lateral_controller/mpc_trajectory.hpp" -#include "mpc_lateral_controller/mpc_utils.hpp" -#include "mpc_lateral_controller/steering_offset/steering_offset.hpp" +#include "autoware_mpc_lateral_controller/mpc.hpp" +#include "autoware_mpc_lateral_controller/mpc_trajectory.hpp" +#include "autoware_mpc_lateral_controller/mpc_utils.hpp" +#include "autoware_mpc_lateral_controller/steering_offset/steering_offset.hpp" #include "rclcpp/rclcpp.hpp" #include "trajectory_follower_base/lateral_controller_base.hpp" @@ -281,4 +281,4 @@ class MpcLateralController : public trajectory_follower::LateralControllerBase }; } // namespace autoware::motion::control::mpc_lateral_controller -#endif // MPC_LATERAL_CONTROLLER__MPC_LATERAL_CONTROLLER_HPP_ +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__MPC_LATERAL_CONTROLLER_HPP_ diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/mpc_trajectory.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc_trajectory.hpp similarity index 95% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/mpc_trajectory.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc_trajectory.hpp index eb624f39ae76b..4a0ae16bc9b1c 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/mpc_trajectory.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc_trajectory.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MPC_LATERAL_CONTROLLER__MPC_TRAJECTORY_HPP_ -#define MPC_LATERAL_CONTROLLER__MPC_TRAJECTORY_HPP_ +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__MPC_TRAJECTORY_HPP_ +#define AUTOWARE_MPC_LATERAL_CONTROLLER__MPC_TRAJECTORY_HPP_ #include "tier4_autoware_utils/geometry/geometry.hpp" @@ -125,4 +125,4 @@ class MPCTrajectory } }; } // namespace autoware::motion::control::mpc_lateral_controller -#endif // MPC_LATERAL_CONTROLLER__MPC_TRAJECTORY_HPP_ +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__MPC_TRAJECTORY_HPP_ diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/mpc_utils.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc_utils.hpp similarity index 97% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/mpc_utils.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc_utils.hpp index 819d7fb89b8a7..e97a004438e4b 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/mpc_utils.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc_utils.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MPC_LATERAL_CONTROLLER__MPC_UTILS_HPP_ -#define MPC_LATERAL_CONTROLLER__MPC_UTILS_HPP_ +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__MPC_UTILS_HPP_ +#define AUTOWARE_MPC_LATERAL_CONTROLLER__MPC_UTILS_HPP_ #include "rclcpp/rclcpp.hpp" #include "tf2/utils.h" @@ -26,7 +26,7 @@ #include "tf2_geometry_msgs/tf2_geometry_msgs.hpp" #endif -#include "mpc_lateral_controller/mpc_trajectory.hpp" +#include "autoware_mpc_lateral_controller/mpc_trajectory.hpp" #include "autoware_planning_msgs/msg/trajectory.hpp" #include "autoware_planning_msgs/msg/trajectory_point.hpp" @@ -230,4 +230,4 @@ void update_param( } // namespace MPCUtils } // namespace autoware::motion::control::mpc_lateral_controller -#endif // MPC_LATERAL_CONTROLLER__MPC_UTILS_HPP_ +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__MPC_UTILS_HPP_ diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/qp_solver/qp_solver_interface.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/qp_solver/qp_solver_interface.hpp similarity index 89% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/qp_solver/qp_solver_interface.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/qp_solver/qp_solver_interface.hpp index ca30bd30e4dd1..6447437d6c274 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/qp_solver/qp_solver_interface.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/qp_solver/qp_solver_interface.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_INTERFACE_HPP_ -#define MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_INTERFACE_HPP_ +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_INTERFACE_HPP_ +#define AUTOWARE_MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_INTERFACE_HPP_ #include @@ -51,4 +51,4 @@ class QPSolverInterface virtual double getObjVal() const { return 0.0; } }; } // namespace autoware::motion::control::mpc_lateral_controller -#endif // MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_INTERFACE_HPP_ +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_INTERFACE_HPP_ diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/qp_solver/qp_solver_osqp.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/qp_solver/qp_solver_osqp.hpp similarity index 88% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/qp_solver/qp_solver_osqp.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/qp_solver/qp_solver_osqp.hpp index 2611f94da324f..8c81092960097 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/qp_solver/qp_solver_osqp.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/qp_solver/qp_solver_osqp.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_OSQP_HPP_ -#define MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_OSQP_HPP_ +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_OSQP_HPP_ +#define AUTOWARE_MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_OSQP_HPP_ -#include "mpc_lateral_controller/qp_solver/qp_solver_interface.hpp" +#include "autoware_mpc_lateral_controller/qp_solver/qp_solver_interface.hpp" #include "osqp_interface/osqp_interface.hpp" #include "rclcpp/rclcpp.hpp" @@ -62,4 +62,4 @@ class QPSolverOSQP : public QPSolverInterface rclcpp::Logger logger_; }; } // namespace autoware::motion::control::mpc_lateral_controller -#endif // MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_OSQP_HPP_ +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_OSQP_HPP_ diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/qp_solver/qp_solver_unconstraint_fast.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/qp_solver/qp_solver_unconstraint_fast.hpp similarity index 87% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/qp_solver/qp_solver_unconstraint_fast.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/qp_solver/qp_solver_unconstraint_fast.hpp index ef337eaaa8528..15c8137b78890 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/qp_solver/qp_solver_unconstraint_fast.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/qp_solver/qp_solver_unconstraint_fast.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_UNCONSTRAINT_FAST_HPP_ -#define MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_UNCONSTRAINT_FAST_HPP_ +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_UNCONSTRAINT_FAST_HPP_ +#define AUTOWARE_MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_UNCONSTRAINT_FAST_HPP_ -#include "mpc_lateral_controller/qp_solver/qp_solver_interface.hpp" +#include "autoware_mpc_lateral_controller/qp_solver/qp_solver_interface.hpp" namespace autoware::motion::control::mpc_lateral_controller { @@ -62,4 +62,4 @@ class QPSolverEigenLeastSquareLLT : public QPSolverInterface private: }; } // namespace autoware::motion::control::mpc_lateral_controller -#endif // MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_UNCONSTRAINT_FAST_HPP_ +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__QP_SOLVER__QP_SOLVER_UNCONSTRAINT_FAST_HPP_ diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/steering_offset/steering_offset.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/steering_offset/steering_offset.hpp similarity index 84% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/steering_offset/steering_offset.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/steering_offset/steering_offset.hpp index 494961ef679d2..707c1ce56a9a6 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/steering_offset/steering_offset.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/steering_offset/steering_offset.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MPC_LATERAL_CONTROLLER__STEERING_OFFSET__STEERING_OFFSET_HPP_ -#define MPC_LATERAL_CONTROLLER__STEERING_OFFSET__STEERING_OFFSET_HPP_ +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__STEERING_OFFSET__STEERING_OFFSET_HPP_ +#define AUTOWARE_MPC_LATERAL_CONTROLLER__STEERING_OFFSET__STEERING_OFFSET_HPP_ #include @@ -45,4 +45,4 @@ class SteeringOffsetEstimator double steering_offset_ = 0.0; }; -#endif // MPC_LATERAL_CONTROLLER__STEERING_OFFSET__STEERING_OFFSET_HPP_ +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__STEERING_OFFSET__STEERING_OFFSET_HPP_ diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/steering_predictor.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/steering_predictor.hpp similarity index 92% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/steering_predictor.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/steering_predictor.hpp index 16e9b165fb1a5..0c5f04497d058 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/steering_predictor.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/steering_predictor.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MPC_LATERAL_CONTROLLER__STEERING_PREDICTOR_HPP_ -#define MPC_LATERAL_CONTROLLER__STEERING_PREDICTOR_HPP_ +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__STEERING_PREDICTOR_HPP_ +#define AUTOWARE_MPC_LATERAL_CONTROLLER__STEERING_PREDICTOR_HPP_ #include "rclcpp/rclcpp.hpp" @@ -81,4 +81,4 @@ class SteeringPredictor } // namespace autoware::motion::control::mpc_lateral_controller -#endif // MPC_LATERAL_CONTROLLER__STEERING_PREDICTOR_HPP_ +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__STEERING_PREDICTOR_HPP_ diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_dynamics.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_dynamics.hpp similarity index 92% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_dynamics.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_dynamics.hpp index 488a3c7ab8be2..20787b1f281b5 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_dynamics.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_dynamics.hpp @@ -44,10 +44,10 @@ * Tracking", Robotics Institute, Carnegie Mellon University, February 2009. */ -#ifndef MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_DYNAMICS_HPP_ -#define MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_DYNAMICS_HPP_ +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_DYNAMICS_HPP_ +#define AUTOWARE_MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_DYNAMICS_HPP_ -#include "mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp" #include #include @@ -122,4 +122,4 @@ class DynamicsBicycleModel : public VehicleModelInterface double m_cr; //!< @brief rear cornering power [N/rad] }; } // namespace autoware::motion::control::mpc_lateral_controller -#endif // MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_DYNAMICS_HPP_ +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_DYNAMICS_HPP_ diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics.hpp similarity index 90% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics.hpp index e2f66e95ab0e3..91d3ea826c7d3 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics.hpp @@ -38,10 +38,10 @@ * */ -#ifndef MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_KINEMATICS_HPP_ -#define MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_KINEMATICS_HPP_ +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_KINEMATICS_HPP_ +#define AUTOWARE_MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_KINEMATICS_HPP_ -#include "mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp" #include #include @@ -106,4 +106,4 @@ class KinematicsBicycleModel : public VehicleModelInterface double m_steer_tau; //!< @brief steering time constant for 1d-model [s] }; } // namespace autoware::motion::control::mpc_lateral_controller -#endif // MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_KINEMATICS_HPP_ +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_KINEMATICS_HPP_ diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp similarity index 87% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp index b503ad8eb1d13..5731a2025d833 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp @@ -35,10 +35,10 @@ * */ -#ifndef MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_KINEMATICS_NO_DELAY_HPP_ -#define MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_KINEMATICS_NO_DELAY_HPP_ +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_KINEMATICS_NO_DELAY_HPP_ // NOLINT +#define AUTOWARE_MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_KINEMATICS_NO_DELAY_HPP_ // NOLINT -#include "mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp" #include #include @@ -101,4 +101,6 @@ class KinematicsBicycleModelNoDelay : public VehicleModelInterface double m_steer_lim; //!< @brief steering angle limit [rad] }; } // namespace autoware::motion::control::mpc_lateral_controller -#endif // MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_KINEMATICS_NO_DELAY_HPP_ +// clang-format off +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_BICYCLE_KINEMATICS_NO_DELAY_HPP_ // NOLINT +// clang-format on diff --git a/control/mpc_lateral_controller/include/mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp similarity index 93% rename from control/mpc_lateral_controller/include/mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp rename to control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp index 68806ff5a00dc..9e2d14184d5e7 100644 --- a/control/mpc_lateral_controller/include/mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_INTERFACE_HPP_ -#define MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_INTERFACE_HPP_ +#ifndef AUTOWARE_MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_INTERFACE_HPP_ +#define AUTOWARE_MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_INTERFACE_HPP_ -#include "mpc_lateral_controller/mpc_trajectory.hpp" +#include "autoware_mpc_lateral_controller/mpc_trajectory.hpp" #include @@ -149,4 +149,4 @@ class VehicleModelInterface const MPCTrajectory & reference_trajectory, const double dt) const = 0; }; } // namespace autoware::motion::control::mpc_lateral_controller -#endif // MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_INTERFACE_HPP_ +#endif // AUTOWARE_MPC_LATERAL_CONTROLLER__VEHICLE_MODEL__VEHICLE_MODEL_INTERFACE_HPP_ diff --git a/control/mpc_lateral_controller/model_predictive_control_algorithm.md b/control/autoware_mpc_lateral_controller/model_predictive_control_algorithm.md similarity index 100% rename from control/mpc_lateral_controller/model_predictive_control_algorithm.md rename to control/autoware_mpc_lateral_controller/model_predictive_control_algorithm.md diff --git a/control/mpc_lateral_controller/package.xml b/control/autoware_mpc_lateral_controller/package.xml similarity index 97% rename from control/mpc_lateral_controller/package.xml rename to control/autoware_mpc_lateral_controller/package.xml index 000bddc65aa1f..3e62d69f6ebb6 100644 --- a/control/mpc_lateral_controller/package.xml +++ b/control/autoware_mpc_lateral_controller/package.xml @@ -1,7 +1,7 @@ - mpc_lateral_controller + autoware_mpc_lateral_controller 1.0.0 MPC-based lateral controller diff --git a/control/mpc_lateral_controller/param/lateral_controller_defaults.param.yaml b/control/autoware_mpc_lateral_controller/param/lateral_controller_defaults.param.yaml similarity index 100% rename from control/mpc_lateral_controller/param/lateral_controller_defaults.param.yaml rename to control/autoware_mpc_lateral_controller/param/lateral_controller_defaults.param.yaml diff --git a/control/mpc_lateral_controller/src/lowpass_filter.cpp b/control/autoware_mpc_lateral_controller/src/lowpass_filter.cpp similarity index 98% rename from control/mpc_lateral_controller/src/lowpass_filter.cpp rename to control/autoware_mpc_lateral_controller/src/lowpass_filter.cpp index 8fbf3488c5a2e..e3bbe78e2428b 100644 --- a/control/mpc_lateral_controller/src/lowpass_filter.cpp +++ b/control/autoware_mpc_lateral_controller/src/lowpass_filter.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mpc_lateral_controller/lowpass_filter.hpp" +#include "autoware_mpc_lateral_controller/lowpass_filter.hpp" #include diff --git a/control/mpc_lateral_controller/src/mpc.cpp b/control/autoware_mpc_lateral_controller/src/mpc.cpp similarity index 99% rename from control/mpc_lateral_controller/src/mpc.cpp rename to control/autoware_mpc_lateral_controller/src/mpc.cpp index 177c1e0854bfb..e6fa2ce3c0102 100644 --- a/control/mpc_lateral_controller/src/mpc.cpp +++ b/control/autoware_mpc_lateral_controller/src/mpc.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mpc_lateral_controller/mpc.hpp" +#include "autoware_mpc_lateral_controller/mpc.hpp" +#include "autoware_mpc_lateral_controller/mpc_utils.hpp" #include "interpolation/linear_interpolation.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include "mpc_lateral_controller/mpc_utils.hpp" #include "rclcpp/rclcpp.hpp" #include "tier4_autoware_utils/math/unit_conversion.hpp" diff --git a/control/mpc_lateral_controller/src/mpc_lateral_controller.cpp b/control/autoware_mpc_lateral_controller/src/mpc_lateral_controller.cpp similarity index 98% rename from control/mpc_lateral_controller/src/mpc_lateral_controller.cpp rename to control/autoware_mpc_lateral_controller/src/mpc_lateral_controller.cpp index 85d33a5e9f1c0..3d66078eed1f2 100644 --- a/control/mpc_lateral_controller/src/mpc_lateral_controller.cpp +++ b/control/autoware_mpc_lateral_controller/src/mpc_lateral_controller.cpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mpc_lateral_controller/mpc_lateral_controller.hpp" +#include "autoware_mpc_lateral_controller/mpc_lateral_controller.hpp" +#include "autoware_mpc_lateral_controller/qp_solver/qp_solver_osqp.hpp" +#include "autoware_mpc_lateral_controller/qp_solver/qp_solver_unconstraint_fast.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_dynamics.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include "mpc_lateral_controller/qp_solver/qp_solver_osqp.hpp" -#include "mpc_lateral_controller/qp_solver/qp_solver_unconstraint_fast.hpp" -#include "mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_dynamics.hpp" -#include "mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics.hpp" -#include "mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp" #include "tf2/utils.h" #include "tf2_ros/create_timer_ros.h" #include "vehicle_info_util/vehicle_info_util.hpp" diff --git a/control/mpc_lateral_controller/src/mpc_trajectory.cpp b/control/autoware_mpc_lateral_controller/src/mpc_trajectory.cpp similarity index 97% rename from control/mpc_lateral_controller/src/mpc_trajectory.cpp rename to control/autoware_mpc_lateral_controller/src/mpc_trajectory.cpp index b7fed942375e8..e84e6cf79a25a 100644 --- a/control/mpc_lateral_controller/src/mpc_trajectory.cpp +++ b/control/autoware_mpc_lateral_controller/src/mpc_trajectory.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mpc_lateral_controller/mpc_trajectory.hpp" +#include "autoware_mpc_lateral_controller/mpc_trajectory.hpp" namespace autoware::motion::control::mpc_lateral_controller { diff --git a/control/mpc_lateral_controller/src/mpc_utils.cpp b/control/autoware_mpc_lateral_controller/src/mpc_utils.cpp similarity index 99% rename from control/mpc_lateral_controller/src/mpc_utils.cpp rename to control/autoware_mpc_lateral_controller/src/mpc_utils.cpp index 01a81d9015b47..1a0062372eb22 100644 --- a/control/mpc_lateral_controller/src/mpc_utils.cpp +++ b/control/autoware_mpc_lateral_controller/src/mpc_utils.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mpc_lateral_controller/mpc_utils.hpp" +#include "autoware_mpc_lateral_controller/mpc_utils.hpp" #include "interpolation/linear_interpolation.hpp" #include "interpolation/spline_interpolation.hpp" diff --git a/control/mpc_lateral_controller/src/qp_solver/qp_solver_osqp.cpp b/control/autoware_mpc_lateral_controller/src/qp_solver/qp_solver_osqp.cpp similarity index 97% rename from control/mpc_lateral_controller/src/qp_solver/qp_solver_osqp.cpp rename to control/autoware_mpc_lateral_controller/src/qp_solver/qp_solver_osqp.cpp index 7c76d67e75aa3..66981b0c5c6d4 100644 --- a/control/mpc_lateral_controller/src/qp_solver/qp_solver_osqp.cpp +++ b/control/autoware_mpc_lateral_controller/src/qp_solver/qp_solver_osqp.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mpc_lateral_controller/qp_solver/qp_solver_osqp.hpp" +#include "autoware_mpc_lateral_controller/qp_solver/qp_solver_osqp.hpp" #include #include diff --git a/control/mpc_lateral_controller/src/qp_solver/qp_solver_unconstraint_fast.cpp b/control/autoware_mpc_lateral_controller/src/qp_solver/qp_solver_unconstraint_fast.cpp similarity index 93% rename from control/mpc_lateral_controller/src/qp_solver/qp_solver_unconstraint_fast.cpp rename to control/autoware_mpc_lateral_controller/src/qp_solver/qp_solver_unconstraint_fast.cpp index b0357138cd646..315e29d063aad 100644 --- a/control/mpc_lateral_controller/src/qp_solver/qp_solver_unconstraint_fast.cpp +++ b/control/autoware_mpc_lateral_controller/src/qp_solver/qp_solver_unconstraint_fast.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mpc_lateral_controller/qp_solver/qp_solver_unconstraint_fast.hpp" +#include "autoware_mpc_lateral_controller/qp_solver/qp_solver_unconstraint_fast.hpp" #include diff --git a/control/mpc_lateral_controller/src/steering_offset/steering_offset.cpp b/control/autoware_mpc_lateral_controller/src/steering_offset/steering_offset.cpp similarity index 95% rename from control/mpc_lateral_controller/src/steering_offset/steering_offset.cpp rename to control/autoware_mpc_lateral_controller/src/steering_offset/steering_offset.cpp index 60d4dd7901394..6425d5da5e941 100644 --- a/control/mpc_lateral_controller/src/steering_offset/steering_offset.cpp +++ b/control/autoware_mpc_lateral_controller/src/steering_offset/steering_offset.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mpc_lateral_controller/steering_offset/steering_offset.hpp" +#include "autoware_mpc_lateral_controller/steering_offset/steering_offset.hpp" #include #include diff --git a/control/mpc_lateral_controller/src/steering_predictor.cpp b/control/autoware_mpc_lateral_controller/src/steering_predictor.cpp similarity index 98% rename from control/mpc_lateral_controller/src/steering_predictor.cpp rename to control/autoware_mpc_lateral_controller/src/steering_predictor.cpp index 48d8fa8c47a97..759a36a16de62 100644 --- a/control/mpc_lateral_controller/src/steering_predictor.cpp +++ b/control/autoware_mpc_lateral_controller/src/steering_predictor.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mpc_lateral_controller/steering_predictor.hpp" +#include "autoware_mpc_lateral_controller/steering_predictor.hpp" namespace autoware::motion::control::mpc_lateral_controller { diff --git a/control/mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_dynamics.cpp b/control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_dynamics.cpp similarity index 98% rename from control/mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_dynamics.cpp rename to control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_dynamics.cpp index 2467b1f0c2311..d5272c48fcbdf 100644 --- a/control/mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_dynamics.cpp +++ b/control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_dynamics.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_dynamics.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_dynamics.hpp" #include diff --git a/control/mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics.cpp b/control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics.cpp similarity index 98% rename from control/mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics.cpp rename to control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics.cpp index cd52dd4f79314..97bcafb161cb0 100644 --- a/control/mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics.cpp +++ b/control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics.hpp" #include diff --git a/control/mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.cpp b/control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.cpp similarity index 98% rename from control/mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.cpp rename to control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.cpp index 8f4510510aca9..d2857d8b42182 100644 --- a/control/mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.cpp +++ b/control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp" #include diff --git a/control/mpc_lateral_controller/src/vehicle_model/vehicle_model_interface.cpp b/control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_interface.cpp similarity index 94% rename from control/mpc_lateral_controller/src/vehicle_model/vehicle_model_interface.cpp rename to control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_interface.cpp index f54a5e325bead..e1b17d3d96278 100644 --- a/control/mpc_lateral_controller/src/vehicle_model/vehicle_model_interface.cpp +++ b/control/autoware_mpc_lateral_controller/src/vehicle_model/vehicle_model_interface.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_interface.hpp" namespace autoware::motion::control::mpc_lateral_controller { diff --git a/control/mpc_lateral_controller/test/test_lowpass_filter.cpp b/control/autoware_mpc_lateral_controller/test/test_lowpass_filter.cpp similarity index 98% rename from control/mpc_lateral_controller/test/test_lowpass_filter.cpp rename to control/autoware_mpc_lateral_controller/test/test_lowpass_filter.cpp index c68513586847b..bfb695cdeee8a 100644 --- a/control/mpc_lateral_controller/test/test_lowpass_filter.cpp +++ b/control/autoware_mpc_lateral_controller/test/test_lowpass_filter.cpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "autoware_mpc_lateral_controller/lowpass_filter.hpp" #include "gtest/gtest.h" -#include "mpc_lateral_controller/lowpass_filter.hpp" #include diff --git a/control/mpc_lateral_controller/test/test_mpc.cpp b/control/autoware_mpc_lateral_controller/test/test_mpc.cpp similarity index 97% rename from control/mpc_lateral_controller/test/test_mpc.cpp rename to control/autoware_mpc_lateral_controller/test/test_mpc.cpp index 7644fb28b0788..3fd4b010852c0 100644 --- a/control/mpc_lateral_controller/test/test_mpc.cpp +++ b/control/autoware_mpc_lateral_controller/test/test_mpc.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "autoware_mpc_lateral_controller/mpc.hpp" +#include "autoware_mpc_lateral_controller/qp_solver/qp_solver_osqp.hpp" +#include "autoware_mpc_lateral_controller/qp_solver/qp_solver_unconstraint_fast.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_dynamics.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics.hpp" +#include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp" #include "gtest/gtest.h" -#include "mpc_lateral_controller/mpc.hpp" -#include "mpc_lateral_controller/qp_solver/qp_solver_osqp.hpp" -#include "mpc_lateral_controller/qp_solver/qp_solver_unconstraint_fast.hpp" -#include "mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_dynamics.hpp" -#include "mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics.hpp" -#include "mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp" #include "rclcpp/rclcpp.hpp" #include "autoware_control_msgs/msg/lateral.hpp" diff --git a/control/mpc_lateral_controller/test/test_mpc_utils.cpp b/control/autoware_mpc_lateral_controller/test/test_mpc_utils.cpp similarity index 95% rename from control/mpc_lateral_controller/test/test_mpc_utils.cpp rename to control/autoware_mpc_lateral_controller/test/test_mpc_utils.cpp index 51cc7d55e4560..b55435dffd024 100644 --- a/control/mpc_lateral_controller/test/test_mpc_utils.cpp +++ b/control/autoware_mpc_lateral_controller/test/test_mpc_utils.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "autoware_mpc_lateral_controller/mpc_trajectory.hpp" +#include "autoware_mpc_lateral_controller/mpc_utils.hpp" #include "gtest/gtest.h" -#include "mpc_lateral_controller/mpc_trajectory.hpp" -#include "mpc_lateral_controller/mpc_utils.hpp" #include "autoware_planning_msgs/msg/trajectory.hpp" #include "autoware_planning_msgs/msg/trajectory_point.hpp" diff --git a/control/trajectory_follower_node/README.md b/control/trajectory_follower_node/README.md index 3496284efd670..7b9e93e39fad9 100644 --- a/control/trajectory_follower_node/README.md +++ b/control/trajectory_follower_node/README.md @@ -45,7 +45,7 @@ struct LateralSyncData { } } -package mpc_lateral_controller { +package autoware_mpc_lateral_controller { class MPCLateralController { isReady(InputData) override run(InputData) override diff --git a/control/trajectory_follower_node/design/media/Controller.drawio.svg b/control/trajectory_follower_node/design/media/Controller.drawio.svg index 1152ef2b17f59..db4961922bd10 100644 --- a/control/trajectory_follower_node/design/media/Controller.drawio.svg +++ b/control/trajectory_follower_node/design/media/Controller.drawio.svg @@ -140,7 +140,7 @@
trajectory_follower/
- mpc_lateral_controller + autoware_mpc_lateral_controller
diff --git a/control/trajectory_follower_node/package.xml b/control/trajectory_follower_node/package.xml index 65446dfb3dd01..b7dd546eb4bca 100644 --- a/control/trajectory_follower_node/package.xml +++ b/control/trajectory_follower_node/package.xml @@ -21,10 +21,10 @@ autoware_adapi_v1_msgs autoware_control_msgs + autoware_mpc_lateral_controller autoware_planning_msgs autoware_vehicle_msgs motion_utils - mpc_lateral_controller pid_longitudinal_controller pure_pursuit rclcpp diff --git a/control/trajectory_follower_node/src/controller_node.cpp b/control/trajectory_follower_node/src/controller_node.cpp index 6fe63ca07de6f..f431be6612009 100644 --- a/control/trajectory_follower_node/src/controller_node.cpp +++ b/control/trajectory_follower_node/src/controller_node.cpp @@ -14,7 +14,7 @@ #include "trajectory_follower_node/controller_node.hpp" -#include "mpc_lateral_controller/mpc_lateral_controller.hpp" +#include "autoware_mpc_lateral_controller/mpc_lateral_controller.hpp" #include "pid_longitudinal_controller/pid_longitudinal_controller.hpp" #include "pure_pursuit/pure_pursuit_lateral_controller.hpp" #include "tier4_autoware_utils/ros/marker_helper.hpp" diff --git a/control/trajectory_follower_node/test/test_controller_node.cpp b/control/trajectory_follower_node/test/test_controller_node.cpp index 9bdf625226134..3bf47233f1f3f 100644 --- a/control/trajectory_follower_node/test/test_controller_node.cpp +++ b/control/trajectory_follower_node/test/test_controller_node.cpp @@ -53,7 +53,7 @@ rclcpp::NodeOptions makeNodeOptions(const bool enable_keep_stopped_until_steer_c const auto longitudinal_share_dir = ament_index_cpp::get_package_share_directory("pid_longitudinal_controller"); const auto lateral_share_dir = - ament_index_cpp::get_package_share_directory("mpc_lateral_controller"); + ament_index_cpp::get_package_share_directory("autoware_mpc_lateral_controller"); rclcpp::NodeOptions node_options; node_options.append_parameter_override("lateral_controller_mode", "mpc"); node_options.append_parameter_override("longitudinal_controller_mode", "pid"); From a3955e90cf849bb77f4f6e0444a6379b070d227f Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 7 Jun 2024 15:47:25 +0900 Subject: [PATCH 012/142] fix(static_obstacle_avoidance): return shift validation (#7229) fix(staatic_obstacle_avoidance): allow return shift approval even if return shift path is not within drivable area Signed-off-by: satoshi-ota --- .../src/scene.cpp | 49 ++++++++++++------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp b/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp index 767c1d21dfc90..9972263cb4fd2 100644 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp +++ b/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp @@ -1208,32 +1208,45 @@ bool StaticObstacleAvoidanceModule::isValidShiftLine( } } + const auto is_return_shift = + [](const double start_shift_length, const double end_shift_length, const double threshold) { + return std::abs(start_shift_length) > threshold && std::abs(end_shift_length) < threshold; + }; + // check if the vehicle is in road. (yaw angle is not considered) { const auto minimum_distance = 0.5 * planner_data_->parameters.vehicle_width + parameters_->hard_drivable_bound_margin - parameters_->max_deviation_from_lane; - const size_t start_idx = shift_lines.front().start_idx; - const size_t end_idx = shift_lines.back().end_idx; + for (const auto & shift_line : shift_lines) { + const size_t start_idx = shift_line.start_idx; + const size_t end_idx = shift_line.end_idx; - const auto path = shifter_for_validate.getReferencePath(); - const auto left_bound = lanelet::utils::to2D(toLineString3d(avoid_data_.left_bound)); - const auto right_bound = lanelet::utils::to2D(toLineString3d(avoid_data_.right_bound)); - for (size_t i = start_idx; i <= end_idx; ++i) { - const auto p = getPoint(path.points.at(i)); - lanelet::BasicPoint2d basic_point{p.x, p.y}; - - const auto shift_length = proposed_shift_path.shift_length.at(i); - const auto THRESHOLD = minimum_distance + std::abs(shift_length); + if (is_return_shift( + shift_line.start_shift_length, shift_line.end_shift_length, + parameters_->lateral_small_shift_threshold)) { + continue; + } - if ( - boost::geometry::distance(basic_point, (shift_length > 0.0 ? left_bound : right_bound)) < - THRESHOLD) { - RCLCPP_DEBUG_THROTTLE( - getLogger(), *clock_, 1000, - "following latest new shift line may cause deviation from drivable area."); - return false; + const auto path = shifter_for_validate.getReferencePath(); + const auto left_bound = lanelet::utils::to2D(toLineString3d(avoid_data_.left_bound)); + const auto right_bound = lanelet::utils::to2D(toLineString3d(avoid_data_.right_bound)); + for (size_t i = start_idx; i <= end_idx; ++i) { + const auto p = getPoint(path.points.at(i)); + lanelet::BasicPoint2d basic_point{p.x, p.y}; + + const auto shift_length = proposed_shift_path.shift_length.at(i); + const auto THRESHOLD = minimum_distance + std::abs(shift_length); + + if ( + boost::geometry::distance(basic_point, (shift_length > 0.0 ? left_bound : right_bound)) < + THRESHOLD) { + RCLCPP_DEBUG_THROTTLE( + getLogger(), *clock_, 1000, + "following latest new shift line may cause deviation from drivable area."); + return false; + } } } } From 6013a78e47cb384bb19dcaa3dd2aedecfb6f1910 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Fri, 7 Jun 2024 16:02:15 +0900 Subject: [PATCH 013/142] refactor(sampling_planner_module): use std::make_shared (#7226) Signed-off-by: Maxime CLEMENT --- .../src/sampling_planner_module.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp b/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp index 8788b446e4384..22187652bd663 100644 --- a/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp +++ b/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp @@ -37,8 +37,7 @@ SamplingPlannerModule::SamplingPlannerModule( : SceneModuleInterface{name, node, rtc_interface_ptr_map, objects_of_interest_marker_interface_ptr_map}, // NOLINT vehicle_info_{vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo()} { - internal_params_ = - std::shared_ptr(new SamplingPlannerInternalParameters{}); + internal_params_ = std::make_shared(); updateModuleParams(parameters); // check if the path is empty From 6669213383f90d49494b6625bfc41b0b26f1da99 Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Fri, 7 Jun 2024 16:20:21 +0900 Subject: [PATCH 014/142] refactor(behavior_velocity_planner_common)!: prefix package and namespace with autoware (#7314) * refactor(behavior_velocity_planner_common): add autoware prefix Signed-off-by: Fumiya Watanabe * refactor(behavior_velocity_planner_common): fix run_out module Signed-off-by: Fumiya Watanabe * refactor(behavior_velocity_planner_common): fix for autoware_behavior_velocity_walkway_module Signed-off-by: Fumiya Watanabe * refactor(behavior_velocity_planner_common): remove unnecessary using Signed-off-by: Fumiya Watanabe --------- Signed-off-by: Fumiya Watanabe --- .github/CODEOWNERS | 3 ++- .../behavior_planning.launch.xml | 26 +++++++++---------- .../package.xml | 2 +- .../src/debug.cpp | 12 ++++----- .../src/decision_result.cpp | 4 +-- .../src/decision_result.hpp | 4 +-- .../src/interpolated_path_info.hpp | 4 +-- .../src/intersection_lanelets.cpp | 4 +-- .../src/intersection_lanelets.hpp | 4 +-- .../src/intersection_stoplines.hpp | 4 +-- .../src/manager.cpp | 15 ++++++----- .../src/manager.hpp | 10 +++---- .../src/object_manager.cpp | 4 +-- .../src/object_manager.hpp | 4 +-- .../src/result.hpp | 4 +-- .../src/scene_intersection.cpp | 8 +++--- .../src/scene_intersection.hpp | 8 +++--- .../src/scene_intersection_collision.cpp | 8 +++--- .../src/scene_intersection_occlusion.cpp | 4 +-- .../src/scene_intersection_prepare_data.cpp | 12 ++++----- .../src/scene_intersection_stuck.cpp | 6 ++--- .../src/scene_merge_from_private_road.cpp | 8 +++--- .../src/scene_merge_from_private_road.hpp | 8 +++--- .../src/util.cpp | 10 +++---- .../src/util.hpp | 4 +-- .../package.xml | 2 +- .../src/node.cpp | 8 +++--- .../src/node.hpp | 3 +-- .../src/planner_manager.cpp | 3 ++- .../src/planner_manager.hpp | 6 ++--- .../test/src/test_node_interface.cpp | 22 ++++++++-------- .../CMakeLists.txt | 2 +- .../README.md | 0 .../planner_data.hpp | 12 ++++----- .../plugin_interface.hpp | 12 ++++----- .../plugin_wrapper.hpp | 12 ++++----- .../scene_module_interface.hpp | 12 ++++----- .../utilization/arc_lane_util.hpp | 12 ++++----- .../utilization/boost_geometry_helper.hpp | 10 +++---- .../utilization/debug.hpp | 10 +++---- .../utilization/path_utilization.hpp | 10 +++---- .../utilization/state_machine.hpp | 10 +++---- .../utilization/trajectory_utils.hpp | 12 ++++----- .../utilization/util.hpp | 18 +++++++------ .../package.xml | 4 +-- .../src/scene_module_interface.cpp | 8 +++--- .../src/utilization/arc_lane_util.cpp | 6 ++--- .../src/utilization/boost_geometry_helper.cpp | 6 ++--- .../src/utilization/debug.cpp | 8 +++--- .../src/utilization/path_utilization.cpp | 6 ++--- .../src/utilization/trajectory_utils.cpp | 8 +++--- .../src/utilization/util.cpp | 16 +++++++----- .../test/src/test_arc_lane_util.cpp | 15 ++++++----- .../test/src/test_state_machine.cpp | 6 ++--- .../test/src/test_utilization.cpp | 13 +++++----- .../test/src/utils.hpp | 0 .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/debug.hpp | 1 - .../src/dynamic_obstacle.cpp | 2 -- .../src/dynamic_obstacle.hpp | 8 +++--- .../src/manager.cpp | 3 +-- .../src/manager.hpp | 9 +++---- .../src/scene.cpp | 9 +++---- .../src/scene.hpp | 7 +---- .../src/utils.cpp | 3 --- .../src/utils.hpp | 6 ++--- .../package.xml | 2 +- .../src/manager.cpp | 2 +- .../src/manager.hpp | 11 ++++---- .../src/scene.hpp | 4 +-- .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/manager.cpp | 6 ++--- .../src/manager.hpp | 9 +++---- .../src/scene.cpp | 12 +++------ .../src/scene.hpp | 6 +---- .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/debug.cpp | 3 +-- .../src/manager.cpp | 8 ++---- .../src/manager.hpp | 9 +++---- .../src/scene_walkway.cpp | 10 +------ .../src/scene_walkway.hpp | 7 +---- .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/debug.cpp | 8 +++--- .../src/decisions.cpp | 4 +-- .../src/manager.cpp | 11 ++++---- .../src/manager.hpp | 10 +++---- .../src/scene.cpp | 10 +++---- .../src/scene.hpp | 10 +++---- .../util.hpp | 6 ++--- .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/debug.cpp | 6 ++--- .../src/manager.cpp | 9 ++++--- .../src/manager.hpp | 10 +++---- .../src/occluded_crosswalk.cpp | 8 +++--- .../src/occluded_crosswalk.hpp | 8 +++--- .../src/scene_crosswalk.cpp | 8 +++--- .../src/scene_crosswalk.hpp | 6 ++--- .../src/util.cpp | 17 +++++++----- .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/debug.cpp | 8 +++--- .../src/manager.cpp | 9 ++++--- .../src/manager.hpp | 10 +++---- .../src/scene.cpp | 8 +++--- .../src/scene.hpp | 8 +++--- .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/collision.cpp | 4 +-- .../src/collision.hpp | 4 +-- .../src/debug.cpp | 4 +-- .../src/debug.hpp | 4 +-- .../src/footprint.cpp | 4 +-- .../src/footprint.hpp | 4 +-- .../src/manager.cpp | 8 +++--- .../src/manager.hpp | 10 +++---- .../src/object_filtering.cpp | 4 +-- .../src/object_filtering.hpp | 4 +-- .../src/object_stop_decision.cpp | 4 +-- .../src/object_stop_decision.hpp | 4 +-- .../src/scene_dynamic_obstacle_stop.cpp | 8 +++--- .../src/scene_dynamic_obstacle_stop.hpp | 6 ++--- .../src/types.hpp | 4 +-- .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/debug.cpp | 6 ++--- .../src/manager.cpp | 9 ++++--- .../src/manager.hpp | 10 +++---- .../src/scene.cpp | 6 ++--- .../src/scene.hpp | 6 ++--- .../src/util.cpp | 6 ++--- .../src/util.hpp | 4 +-- .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/debug.cpp | 8 +++--- .../src/manager.cpp | 9 ++++--- .../src/manager.hpp | 10 +++---- .../src/scene_no_stopping_area.cpp | 10 +++---- .../src/scene_no_stopping_area.hpp | 10 +++---- .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/debug.cpp | 8 +++--- .../src/grid_utils.cpp | 4 +-- .../src/grid_utils.hpp | 8 +++--- .../src/manager.cpp | 9 ++++--- .../src/manager.hpp | 10 +++---- .../src/occlusion_spot_utils.cpp | 8 +++--- .../src/occlusion_spot_utils.hpp | 6 ++--- .../src/risk_predictive_braking.cpp | 6 ++--- .../src/risk_predictive_braking.hpp | 4 +-- .../src/scene_occlusion_spot.cpp | 14 +++++----- .../src/scene_occlusion_spot.hpp | 8 +++--- .../test/src/test_grid_utils.cpp | 12 ++++----- .../test/src/test_occlusion_spot_utils.cpp | 14 +++++----- .../test/src/test_risk_predictive_braking.cpp | 2 +- .../test/src/utils.hpp | 9 ++++--- .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/calculate_slowdown_points.hpp | 4 +-- .../src/debug.cpp | 4 +-- .../src/debug.hpp | 4 +-- .../src/decisions.cpp | 4 +-- .../src/decisions.hpp | 4 +-- .../src/filter_predicted_objects.cpp | 4 +-- .../src/filter_predicted_objects.hpp | 6 ++--- .../src/footprint.cpp | 4 +-- .../src/footprint.hpp | 4 +-- .../src/lanelets_selection.cpp | 6 ++--- .../src/lanelets_selection.hpp | 4 +-- .../src/manager.cpp | 9 ++++--- .../src/manager.hpp | 10 +++---- .../src/overlapping_range.cpp | 4 +-- .../src/overlapping_range.hpp | 4 +-- .../src/scene_out_of_lane.cpp | 8 +++--- .../src/scene_out_of_lane.hpp | 6 ++--- .../src/types.hpp | 4 +-- .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/debug.cpp | 6 ++--- .../src/manager.cpp | 9 ++++--- .../src/manager.hpp | 10 +++---- .../src/scene.cpp | 4 +-- .../src/scene.hpp | 6 ++--- .../src/util.cpp | 6 ++--- .../src/util.hpp | 4 +-- .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/debug.cpp | 6 ++--- .../src/manager.cpp | 7 ++--- .../src/manager.hpp | 10 +++---- .../src/scene.cpp | 8 +++--- .../src/scene.hpp | 10 +++---- .../package.xml | 2 +- .../plugins.xml | 2 +- .../src/debug.cpp | 6 ++--- .../src/manager.cpp | 9 ++++--- .../src/manager.hpp | 10 +++---- .../src/scene.cpp | 6 ++--- .../src/scene.hpp | 8 +++--- .../package.xml | 2 +- 204 files changed, 649 insertions(+), 682 deletions(-) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/CMakeLists.txt (93%) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/README.md (100%) rename planning/{behavior_velocity_planner_common/include/behavior_velocity_planner_common => autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common}/planner_data.hpp (93%) rename planning/{behavior_velocity_planner_common/include/behavior_velocity_planner_common => autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common}/plugin_interface.hpp (75%) rename planning/{behavior_velocity_planner_common/include/behavior_velocity_planner_common => autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common}/plugin_wrapper.hpp (78%) rename planning/{behavior_velocity_planner_common/include/behavior_velocity_planner_common => autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common}/scene_module_interface.hpp (95%) rename planning/{behavior_velocity_planner_common/include/behavior_velocity_planner_common => autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common}/utilization/arc_lane_util.hpp (94%) rename planning/{behavior_velocity_planner_common/include/behavior_velocity_planner_common => autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common}/utilization/boost_geometry_helper.hpp (88%) rename planning/{behavior_velocity_planner_common/include/behavior_velocity_planner_common => autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common}/utilization/debug.hpp (86%) rename planning/{behavior_velocity_planner_common/include/behavior_velocity_planner_common => autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common}/utilization/path_utilization.hpp (78%) rename planning/{behavior_velocity_planner_common/include/behavior_velocity_planner_common => autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common}/utilization/state_machine.hpp (87%) rename planning/{behavior_velocity_planner_common/include/behavior_velocity_planner_common => autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common}/utilization/trajectory_utils.hpp (76%) rename planning/{behavior_velocity_planner_common/include/behavior_velocity_planner_common => autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common}/utilization/util.hpp (93%) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/package.xml (93%) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/src/scene_module_interface.cpp (97%) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/src/utilization/arc_lane_util.cpp (94%) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/src/utilization/boost_geometry_helper.cpp (91%) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/src/utilization/debug.cpp (94%) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/src/utilization/path_utilization.cpp (96%) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/src/utilization/trajectory_utils.cpp (93%) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/src/utilization/util.cpp (97%) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/test/src/test_arc_lane_util.cpp (93%) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/test/src/test_state_machine.cpp (92%) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/test/src/test_utilization.cpp (92%) rename planning/{behavior_velocity_planner_common => autoware_behavior_velocity_planner_common}/test/src/utils.hpp (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index d2d6fa2c56343..7a0c8f8893a39 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -178,7 +178,8 @@ planning/behavior_velocity_no_drivable_lane_module/** ahmed.ebrahim@leodrive.ai planning/behavior_velocity_no_stopping_area_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_out_of_lane_module/** maxime.clement@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp -planning/behavior_velocity_planner_common/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_velocity_planner_common/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_speed_bump_module/** mdogru@leodrive.ai shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_stop_line_module/** fumiya.watanabe@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp zhe.shen@tier4.jp planning/behavior_velocity_traffic_light_module/** mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml index 4cf0c541510ed..779ee5c7af34a 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml @@ -101,7 +101,7 @@ diff --git a/planning/autoware_behavior_velocity_intersection_module/package.xml b/planning/autoware_behavior_velocity_intersection_module/package.xml index 204a267594c03..401e53586c649 100644 --- a/planning/autoware_behavior_velocity_intersection_module/package.xml +++ b/planning/autoware_behavior_velocity_intersection_module/package.xml @@ -18,9 +18,9 @@ ament_cmake_auto autoware_cmake + autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs - behavior_velocity_planner_common fmt geometry_msgs interpolation diff --git a/planning/autoware_behavior_velocity_intersection_module/src/debug.cpp b/planning/autoware_behavior_velocity_intersection_module/src/debug.cpp index 252d7c2a9f61e..ab09ca2e6e746 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/debug.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/debug.cpp @@ -15,8 +15,8 @@ #include "scene_intersection.hpp" #include "scene_merge_from_private_road.hpp" -#include -#include +#include +#include #include #include @@ -45,7 +45,7 @@ visualization_msgs::msg::MarkerArray createLaneletPolygonsMarkerArray( visualization_msgs::msg::MarkerArray msg; int32_t i = 0; - int32_t uid = behavior_velocity_planner::planning_utils::bitShift(lane_id); + int32_t uid = autoware::behavior_velocity_planner::planning_utils::bitShift(lane_id); for (const auto & polygon : polygons) { visualization_msgs::msg::Marker marker{}; marker.header.frame_id = "map"; @@ -224,7 +224,7 @@ constexpr std::tuple light_blue() } } // namespace -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_autoware_utils::appendMarkerArray; using tier4_autoware_utils::createMarkerColor; @@ -472,7 +472,7 @@ visualization_msgs::msg::MarkerArray MergeFromPrivateRoadModule::createDebugMark const auto state = state_machine_.getState(); - int32_t uid = behavior_velocity_planner::planning_utils::bitShift(module_id_); + int32_t uid = autoware::behavior_velocity_planner::planning_utils::bitShift(module_id_); const auto now = this->clock_->now(); if (state == StateMachine::State::STOP) { appendMarkerArray( @@ -496,4 +496,4 @@ motion_utils::VirtualWalls MergeFromPrivateRoadModule::createVirtualWalls() } return virtual_walls; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/autoware_behavior_velocity_intersection_module/src/decision_result.cpp b/planning/autoware_behavior_velocity_intersection_module/src/decision_result.cpp index 0dc0e3aab4b87..5d1f1a1fcfca2 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/decision_result.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/decision_result.cpp @@ -14,7 +14,7 @@ #include "decision_result.hpp" -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { std::string formatDecisionResult(const DecisionResult & decision_result) { @@ -65,4 +65,4 @@ std::string formatDecisionResult(const DecisionResult & decision_result) return ""; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/autoware_behavior_velocity_intersection_module/src/decision_result.hpp b/planning/autoware_behavior_velocity_intersection_module/src/decision_result.hpp index bf0b5520f7a32..26f78616a7b61 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/decision_result.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/decision_result.hpp @@ -19,7 +19,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { /** @@ -172,6 +172,6 @@ using DecisionResult = std::variant< std::string formatDecisionResult(const DecisionResult & decision_result); -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // DECISION_RESULT_HPP_ diff --git a/planning/autoware_behavior_velocity_intersection_module/src/interpolated_path_info.hpp b/planning/autoware_behavior_velocity_intersection_module/src/interpolated_path_info.hpp index c855164e24d5b..d8bada002e37b 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/interpolated_path_info.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/interpolated_path_info.hpp @@ -23,7 +23,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { /** @@ -43,6 +43,6 @@ struct InterpolatedPathInfo std::optional> lane_id_interval{std::nullopt}; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // INTERPOLATED_PATH_INFO_HPP_ diff --git a/planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.cpp b/planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.cpp index bf833ee07c155..be7e9e25cc8bc 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.cpp @@ -21,7 +21,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { void IntersectionLanelets::update( @@ -79,4 +79,4 @@ void IntersectionLanelets::update( } } } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.hpp b/planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.hpp index 3682787237d42..a7ca5eb3b0bc1 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.hpp @@ -27,7 +27,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { /** @@ -190,6 +190,6 @@ struct PathLanelets // conflicting lanelets plus the next lane part of the // path }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // INTERSECTION_LANELETS_HPP_ diff --git a/planning/autoware_behavior_velocity_intersection_module/src/intersection_stoplines.hpp b/planning/autoware_behavior_velocity_intersection_module/src/intersection_stoplines.hpp index 85876ffc98380..98325f0aa8735 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/intersection_stoplines.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/intersection_stoplines.hpp @@ -17,7 +17,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { /** @@ -72,6 +72,6 @@ struct IntersectionStopLines */ size_t occlusion_wo_tl_pass_judge_line{0}; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // INTERSECTION_STOPLINES_HPP_ diff --git a/planning/autoware_behavior_velocity_intersection_module/src/manager.cpp b/planning/autoware_behavior_velocity_intersection_module/src/manager.cpp index ac32ad553d2b7..8f540603791cb 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/manager.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/manager.cpp @@ -14,8 +14,8 @@ #include "manager.hpp" -#include -#include +#include +#include #include #include @@ -28,7 +28,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_autoware_utils::getOrDeclareParameter; @@ -589,11 +589,12 @@ bool MergeFromPrivateModuleManager::hasSameParentLaneletAndTurnDirectionWithRegi return false; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_velocity_planner::IntersectionModulePlugin, behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::IntersectionModulePlugin, + autoware::behavior_velocity_planner::PluginInterface) PLUGINLIB_EXPORT_CLASS( - behavior_velocity_planner::MergeFromPrivateModulePlugin, - behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::MergeFromPrivateModulePlugin, + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/autoware_behavior_velocity_intersection_module/src/manager.hpp b/planning/autoware_behavior_velocity_intersection_module/src/manager.hpp index 7bbc8d51bbe9e..ecf6bb810f313 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/manager.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/manager.hpp @@ -18,9 +18,9 @@ #include "scene_intersection.hpp" #include "scene_merge_from_private_road.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -32,7 +32,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class IntersectionModuleManager : public SceneModuleManagerInterfaceWithRTC { @@ -90,6 +90,6 @@ class MergeFromPrivateModulePlugin : public PluginWrapper findPassageInterval( lane_position, path, {enter_idx, exit_idx}, {object_enter_time, object_exit_time}}; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/autoware_behavior_velocity_intersection_module/src/object_manager.hpp b/planning/autoware_behavior_velocity_intersection_module/src/object_manager.hpp index 3d1113656c3e3..0ba9947fdb318 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/object_manager.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/object_manager.hpp @@ -52,7 +52,7 @@ struct hash }; } // namespace std -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { /** @@ -287,6 +287,6 @@ std::optional findPassageInterval( const std::optional & first_attention_lane_opt, const std::optional & second_attention_lane_opt); -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // OBJECT_MANAGER_HPP_ diff --git a/planning/autoware_behavior_velocity_intersection_module/src/result.hpp b/planning/autoware_behavior_velocity_intersection_module/src/result.hpp index da89920e59a85..1a833b268a5d8 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/result.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/result.hpp @@ -18,7 +18,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { template @@ -48,6 +48,6 @@ Result make_err(Args &&... args) return Result(Error{std::forward(args)...}); } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // RESULT_HPP_ diff --git a/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp index 8e50c140894e7..beed0aab8e382 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp @@ -16,8 +16,8 @@ #include "util.hpp" -#include // for toGeomPoly -#include +#include // for toGeomPoly +#include #include #include #include @@ -38,7 +38,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -1412,4 +1412,4 @@ IntersectionModule::PassJudgeStatus IntersectionModule::isOverPassJudgeLinesStat safely_passed_1st_judge_line_first_time, safely_passed_2nd_judge_line_first_time}; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp index b1cfcdee04fa6..e25f41a18028a 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp @@ -22,8 +22,8 @@ #include "object_manager.hpp" #include "result.hpp" -#include -#include +#include +#include #include #include @@ -43,7 +43,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class IntersectionModule : public SceneModuleInterface @@ -818,6 +818,6 @@ class IntersectionModule : public SceneModuleInterface rclcpp::Publisher::SharedPtr object_ttc_pub_; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // SCENE_INTERSECTION_HPP_ diff --git a/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_collision.cpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_collision.cpp index 48387bc6aa398..fb06ed9d811c8 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_collision.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_collision.cpp @@ -15,8 +15,8 @@ #include "scene_intersection.hpp" #include "util.hpp" -#include // for toGeomPoly -#include // for smoothPath +#include // for toGeomPoly +#include // for smoothPath #include #include #include @@ -30,7 +30,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -964,4 +964,4 @@ IntersectionModule::TimeDistanceArray IntersectionModule::calcIntersectionPassin return time_distance_array; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_occlusion.cpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_occlusion.cpp index 0fb6042e5aadb..c43f8617897b9 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_occlusion.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_occlusion.cpp @@ -25,7 +25,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -449,4 +449,4 @@ IntersectionModule::OcclusionType IntersectionModule::detectOcclusion( debug_data_.static_occlusion = true; return StaticallyOccluded{min_dist}; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp index d4466c1e9431b..223e8eca84fe8 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp @@ -15,8 +15,8 @@ #include "scene_intersection.hpp" #include "util.hpp" -#include // for to_bg2d -#include // for planning_utils:: +#include // for to_bg2d +#include // for planning_utils:: #include #include // for lanelet::autoware::RoadMarking #include @@ -106,7 +106,7 @@ std::optional> getFirstPoi const auto & p = path.points.at(i).point.pose.position; for (const auto & polygon : polygons) { const auto polygon_2d = lanelet::utils::to2D(polygon); - is_in_lanelet = bg::within(behavior_velocity_planner::to_bg2d(p), polygon_2d); + is_in_lanelet = bg::within(autoware::behavior_velocity_planner::to_bg2d(p), polygon_2d); if (is_in_lanelet) { return std::make_optional>( i, polygon); @@ -122,7 +122,7 @@ std::optional> getFirstPoi const auto & p = path.points.at(i).point.pose.position; for (const auto & polygon : polygons) { const auto polygon_2d = lanelet::utils::to2D(polygon); - is_in_lanelet = bg::within(behavior_velocity_planner::to_bg2d(p), polygon_2d); + is_in_lanelet = bg::within(autoware::behavior_velocity_planner::to_bg2d(p), polygon_2d); if (is_in_lanelet) { return std::make_optional>( i, polygon); @@ -157,7 +157,7 @@ double getHighestCurvature(const lanelet::ConstLineString3d & centerline) } // namespace -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -907,4 +907,4 @@ std::vector IntersectionModule::generateDetectionLan return detection_divisions; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_stuck.cpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_stuck.cpp index c7de1805327c3..eecb02d07c386 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_stuck.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_intersection_stuck.cpp @@ -15,7 +15,7 @@ #include "scene_intersection.hpp" #include "util.hpp" -#include // for toGeomPoly +#include // for toGeomPoly #include #include @@ -114,7 +114,7 @@ lanelet::ConstLanelet createLaneletFromArcLength( } // namespace -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -422,4 +422,4 @@ bool IntersectionModule::checkYieldStuckVehicleInIntersection( } return false; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/autoware_behavior_velocity_intersection_module/src/scene_merge_from_private_road.cpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_merge_from_private_road.cpp index be8d94c3b306d..1aaed779e1b79 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/scene_merge_from_private_road.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_merge_from_private_road.cpp @@ -16,8 +16,8 @@ #include "util.hpp" -#include -#include +#include +#include #include #include #include @@ -32,7 +32,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -206,4 +206,4 @@ lanelet::ConstLanelets MergeFromPrivateRoadModule::getAttentionLanelets() const return attention_lanelets; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/autoware_behavior_velocity_intersection_module/src/scene_merge_from_private_road.hpp b/planning/autoware_behavior_velocity_intersection_module/src/scene_merge_from_private_road.hpp index 0b783cf2a7ebd..19e9ea44869ea 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/scene_merge_from_private_road.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/scene_merge_from_private_road.hpp @@ -15,8 +15,8 @@ #ifndef SCENE_MERGE_FROM_PRIVATE_ROAD_HPP_ #define SCENE_MERGE_FROM_PRIVATE_ROAD_HPP_ -#include -#include +#include +#include #include #include @@ -35,7 +35,7 @@ * lanes before entering intersection */ -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class MergeFromPrivateRoadModule : public SceneModuleInterface { @@ -88,6 +88,6 @@ class MergeFromPrivateRoadModule : public SceneModuleInterface // Debug mutable DebugData debug_data_; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // SCENE_MERGE_FROM_PRIVATE_ROAD_HPP_ diff --git a/planning/autoware_behavior_velocity_intersection_module/src/util.cpp b/planning/autoware_behavior_velocity_intersection_module/src/util.cpp index a083185786e42..09f16bcada3c1 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/util.cpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/util.cpp @@ -16,9 +16,9 @@ #include "interpolated_path_info.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -40,7 +40,7 @@ #include #include -namespace behavior_velocity_planner::util +namespace autoware::behavior_velocity_planner::util { namespace bg = boost::geometry; @@ -399,4 +399,4 @@ std::vector getPolygon3dFromLanelets( return polys; } -} // namespace behavior_velocity_planner::util +} // namespace autoware::behavior_velocity_planner::util diff --git a/planning/autoware_behavior_velocity_intersection_module/src/util.hpp b/planning/autoware_behavior_velocity_intersection_module/src/util.hpp index 27200e663503d..ef826380afa69 100644 --- a/planning/autoware_behavior_velocity_intersection_module/src/util.hpp +++ b/planning/autoware_behavior_velocity_intersection_module/src/util.hpp @@ -30,7 +30,7 @@ #include #include -namespace behavior_velocity_planner::util +namespace autoware::behavior_velocity_planner::util { /** @@ -141,6 +141,6 @@ getFirstPointInsidePolygonsByFootprint( std::vector getPolygon3dFromLanelets( const lanelet::ConstLanelets & ll_vec); -} // namespace behavior_velocity_planner::util +} // namespace autoware::behavior_velocity_planner::util #endif // UTIL_HPP_ diff --git a/planning/autoware_behavior_velocity_planner/package.xml b/planning/autoware_behavior_velocity_planner/package.xml index c90d4d01cbca5..4d5dc17264df0 100644 --- a/planning/autoware_behavior_velocity_planner/package.xml +++ b/planning/autoware_behavior_velocity_planner/package.xml @@ -34,11 +34,11 @@ rosidl_default_generators + autoware_behavior_velocity_planner_common autoware_map_msgs autoware_perception_msgs autoware_planning_msgs autoware_velocity_smoother - behavior_velocity_planner_common diagnostic_msgs eigen geometry_msgs diff --git a/planning/autoware_behavior_velocity_planner/src/node.cpp b/planning/autoware_behavior_velocity_planner/src/node.cpp index ffbc4ef9174dc..59049ef7f07f3 100644 --- a/planning/autoware_behavior_velocity_planner/src/node.cpp +++ b/planning/autoware_behavior_velocity_planner/src/node.cpp @@ -14,8 +14,8 @@ #include "node.hpp" +#include #include -#include #include #include #include @@ -439,14 +439,14 @@ autoware_planning_msgs::msg::Path BehaviorVelocityPlannerNode::generatePath( // screening const auto filtered_path = - ::behavior_velocity_planner::filterLitterPathPoint(to_path(velocity_planned_path)); + autoware::behavior_velocity_planner::filterLitterPathPoint(to_path(velocity_planned_path)); // interpolation - const auto interpolated_path_msg = ::behavior_velocity_planner::interpolatePath( + const auto interpolated_path_msg = autoware::behavior_velocity_planner::interpolatePath( filtered_path, forward_path_length_, behavior_output_path_interval_); // check stop point - output_path_msg = ::behavior_velocity_planner::filterStopPathPoint(interpolated_path_msg); + output_path_msg = autoware::behavior_velocity_planner::filterStopPathPoint(interpolated_path_msg); output_path_msg.header.frame_id = "map"; output_path_msg.header.stamp = this->now(); diff --git a/planning/autoware_behavior_velocity_planner/src/node.hpp b/planning/autoware_behavior_velocity_planner/src/node.hpp index 62ceef5f04ea6..b2157bfb818ce 100644 --- a/planning/autoware_behavior_velocity_planner/src/node.hpp +++ b/planning/autoware_behavior_velocity_planner/src/node.hpp @@ -20,7 +20,7 @@ #include #include -#include +#include #include #include @@ -49,7 +49,6 @@ namespace autoware::behavior_velocity_planner using autoware_behavior_velocity_planner::srv::LoadPlugin; using autoware_behavior_velocity_planner::srv::UnloadPlugin; using autoware_map_msgs::msg::LaneletMapBin; -using ::behavior_velocity_planner::TrafficSignalStamped; using tier4_planning_msgs::msg::VelocityLimit; class BehaviorVelocityPlannerNode : public rclcpp::Node diff --git a/planning/autoware_behavior_velocity_planner/src/planner_manager.cpp b/planning/autoware_behavior_velocity_planner/src/planner_manager.cpp index f462fc963f17b..93209a10180be 100644 --- a/planning/autoware_behavior_velocity_planner/src/planner_manager.cpp +++ b/planning/autoware_behavior_velocity_planner/src/planner_manager.cpp @@ -50,7 +50,8 @@ diagnostic_msgs::msg::DiagnosticStatus makeStopReasonDiag( } // namespace BehaviorVelocityPlannerManager::BehaviorVelocityPlannerManager() -: plugin_loader_("autoware_behavior_velocity_planner", "behavior_velocity_planner::PluginInterface") +: plugin_loader_( + "autoware_behavior_velocity_planner", "autoware::behavior_velocity_planner::PluginInterface") { } diff --git a/planning/autoware_behavior_velocity_planner/src/planner_manager.hpp b/planning/autoware_behavior_velocity_planner/src/planner_manager.hpp index 9e7f2942bb067..73193a002918d 100644 --- a/planning/autoware_behavior_velocity_planner/src/planner_manager.hpp +++ b/planning/autoware_behavior_velocity_planner/src/planner_manager.hpp @@ -15,8 +15,8 @@ #ifndef PLANNER_MANAGER_HPP_ #define PLANNER_MANAGER_HPP_ -#include -#include +#include +#include #include #include @@ -38,8 +38,6 @@ namespace autoware::behavior_velocity_planner { -using ::behavior_velocity_planner::PlannerData; -using ::behavior_velocity_planner::PluginInterface; class BehaviorVelocityPlannerManager { diff --git a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp index 2e971ed238751..cdff8af4ac56e 100644 --- a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp +++ b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp @@ -68,21 +68,21 @@ std::shared_ptr generateNode() }; std::vector module_names; - module_names.emplace_back("behavior_velocity_planner::CrosswalkModulePlugin"); + module_names.emplace_back("autoware::behavior_velocity_planner::CrosswalkModulePlugin"); module_names.emplace_back("autoware::behavior_velocity_planner::WalkwayModulePlugin"); - module_names.emplace_back("behavior_velocity_planner::TrafficLightModulePlugin"); + module_names.emplace_back("autoware::behavior_velocity_planner::TrafficLightModulePlugin"); module_names.emplace_back("autoware::behavior_velocity_planner::IntersectionModulePlugin"); - module_names.emplace_back("behavior_velocity_planner::MergeFromPrivateModulePlugin"); - module_names.emplace_back("behavior_velocity_planner::BlindSpotModulePlugin"); - module_names.emplace_back("behavior_velocity_planner::DetectionAreaModulePlugin"); + module_names.emplace_back("autoware::behavior_velocity_planner::MergeFromPrivateModulePlugin"); + module_names.emplace_back("autoware::behavior_velocity_planner::BlindSpotModulePlugin"); + module_names.emplace_back("autoware::behavior_velocity_planner::DetectionAreaModulePlugin"); module_names.emplace_back("autoware::behavior_velocity_planner::VirtualTrafficLightModulePlugin"); - module_names.emplace_back("behavior_velocity_planner::NoStoppingAreaModulePlugin"); - module_names.emplace_back("behavior_velocity_planner::StopLineModulePlugin"); - module_names.emplace_back("behavior_velocity_planner::OcclusionSpotModulePlugin"); + module_names.emplace_back("autoware::behavior_velocity_planner::NoStoppingAreaModulePlugin"); + module_names.emplace_back("autoware::behavior_velocity_planner::StopLineModulePlugin"); + module_names.emplace_back("autoware::behavior_velocity_planner::OcclusionSpotModulePlugin"); module_names.emplace_back("autoware::behavior_velocity_planner::RunOutModulePlugin"); - module_names.emplace_back("behavior_velocity_planner::SpeedBumpModulePlugin"); - module_names.emplace_back("behavior_velocity_planner::OutOfLaneModulePlugin"); - module_names.emplace_back("behavior_velocity_planner::NoDrivableLaneModulePlugin"); + module_names.emplace_back("autoware::behavior_velocity_planner::SpeedBumpModulePlugin"); + module_names.emplace_back("autoware::behavior_velocity_planner::OutOfLaneModulePlugin"); + module_names.emplace_back("autoware::behavior_velocity_planner::NoDrivableLaneModulePlugin"); std::vector params; params.emplace_back("launch_modules", module_names); diff --git a/planning/behavior_velocity_planner_common/CMakeLists.txt b/planning/autoware_behavior_velocity_planner_common/CMakeLists.txt similarity index 93% rename from planning/behavior_velocity_planner_common/CMakeLists.txt rename to planning/autoware_behavior_velocity_planner_common/CMakeLists.txt index c8847164851e8..9cb992312f52a 100644 --- a/planning/behavior_velocity_planner_common/CMakeLists.txt +++ b/planning/autoware_behavior_velocity_planner_common/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(behavior_velocity_planner_common) +project(autoware_behavior_velocity_planner_common) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/planning/behavior_velocity_planner_common/README.md b/planning/autoware_behavior_velocity_planner_common/README.md similarity index 100% rename from planning/behavior_velocity_planner_common/README.md rename to planning/autoware_behavior_velocity_planner_common/README.md diff --git a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/planner_data.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp similarity index 93% rename from planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/planner_data.hpp rename to planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp index 51511b94f3e33..907683998dd29 100644 --- a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/planner_data.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_VELOCITY_PLANNER_COMMON__PLANNER_DATA_HPP_ -#define BEHAVIOR_VELOCITY_PLANNER_COMMON__PLANNER_DATA_HPP_ +#ifndef AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__PLANNER_DATA_HPP_ +#define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__PLANNER_DATA_HPP_ #include "route_handler/route_handler.hpp" +#include #include -#include #include #include @@ -45,7 +45,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class BehaviorVelocityPlannerNode; struct PlannerData @@ -148,6 +148,6 @@ struct PlannerData return std::make_optional(traffic_light_id_map.at(id)); } }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner -#endif // BEHAVIOR_VELOCITY_PLANNER_COMMON__PLANNER_DATA_HPP_ +#endif // AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__PLANNER_DATA_HPP_ diff --git a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/plugin_interface.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/plugin_interface.hpp similarity index 75% rename from planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/plugin_interface.hpp rename to planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/plugin_interface.hpp index dcdb4a7052cc0..86579f06790b2 100644 --- a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/plugin_interface.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/plugin_interface.hpp @@ -12,17 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_VELOCITY_PLANNER_COMMON__PLUGIN_INTERFACE_HPP_ -#define BEHAVIOR_VELOCITY_PLANNER_COMMON__PLUGIN_INTERFACE_HPP_ +#ifndef AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__PLUGIN_INTERFACE_HPP_ +#define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__PLUGIN_INTERFACE_HPP_ -#include +#include #include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class PluginInterface @@ -38,6 +38,6 @@ class PluginInterface virtual const char * getModuleName() = 0; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner -#endif // BEHAVIOR_VELOCITY_PLANNER_COMMON__PLUGIN_INTERFACE_HPP_ +#endif // AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__PLUGIN_INTERFACE_HPP_ diff --git a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/plugin_wrapper.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/plugin_wrapper.hpp similarity index 78% rename from planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/plugin_wrapper.hpp rename to planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/plugin_wrapper.hpp index abb14dd8b2356..e82211937e55b 100644 --- a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/plugin_wrapper.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/plugin_wrapper.hpp @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_VELOCITY_PLANNER_COMMON__PLUGIN_WRAPPER_HPP_ -#define BEHAVIOR_VELOCITY_PLANNER_COMMON__PLUGIN_WRAPPER_HPP_ +#ifndef AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__PLUGIN_WRAPPER_HPP_ +#define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__PLUGIN_WRAPPER_HPP_ -#include +#include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { template @@ -48,6 +48,6 @@ class PluginWrapper : public PluginInterface std::unique_ptr scene_manager_; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner -#endif // BEHAVIOR_VELOCITY_PLANNER_COMMON__PLUGIN_WRAPPER_HPP_ +#endif // AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__PLUGIN_WRAPPER_HPP_ diff --git a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/scene_module_interface.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/scene_module_interface.hpp similarity index 95% rename from planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/scene_module_interface.hpp rename to planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/scene_module_interface.hpp index 3e7992207f3f1..53b6e064d73b4 100644 --- a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/scene_module_interface.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/scene_module_interface.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_VELOCITY_PLANNER_COMMON__SCENE_MODULE_INTERFACE_HPP_ -#define BEHAVIOR_VELOCITY_PLANNER_COMMON__SCENE_MODULE_INTERFACE_HPP_ +#ifndef AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__SCENE_MODULE_INTERFACE_HPP_ +#define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__SCENE_MODULE_INTERFACE_HPP_ -#include +#include #include #include #include @@ -45,7 +45,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using builtin_interfaces::msg::Time; @@ -276,6 +276,6 @@ class SceneModuleManagerInterfaceWithRTC : public SceneModuleManagerInterface } }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner -#endif // BEHAVIOR_VELOCITY_PLANNER_COMMON__SCENE_MODULE_INTERFACE_HPP_ +#endif // AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__SCENE_MODULE_INTERFACE_HPP_ diff --git a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/arc_lane_util.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/arc_lane_util.hpp similarity index 94% rename from planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/arc_lane_util.hpp rename to planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/arc_lane_util.hpp index c9d292536ac13..5ea1ae9fffcc1 100644 --- a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/arc_lane_util.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/arc_lane_util.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__ARC_LANE_UTIL_HPP_ -#define BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__ARC_LANE_UTIL_HPP_ +#ifndef AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__ARC_LANE_UTIL_HPP_ +#define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__ARC_LANE_UTIL_HPP_ -#include +#include #include #include @@ -27,7 +27,7 @@ #define EIGEN_MPL2_ONLY #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace { @@ -195,6 +195,6 @@ std::optional createTargetPoint( const size_t lane_id, const double margin, const double vehicle_offset); } // namespace arc_lane_utils -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner -#endif // BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__ARC_LANE_UTIL_HPP_ +#endif // AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__ARC_LANE_UTIL_HPP_ diff --git a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/boost_geometry_helper.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/boost_geometry_helper.hpp similarity index 88% rename from planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/boost_geometry_helper.hpp rename to planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/boost_geometry_helper.hpp index bf238ecad55cb..22bba2b90dcc2 100644 --- a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/boost_geometry_helper.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/boost_geometry_helper.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__BOOST_GEOMETRY_HELPER_HPP_ -#define BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__BOOST_GEOMETRY_HELPER_HPP_ +#ifndef AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__BOOST_GEOMETRY_HELPER_HPP_ +#define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__BOOST_GEOMETRY_HELPER_HPP_ #include @@ -46,7 +46,7 @@ BOOST_GEOMETRY_REGISTER_POINT_3D( autoware_planning_msgs::msg::TrajectoryPoint, double, cs::cartesian, pose.position.x, pose.position.y, pose.position.z) -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -77,6 +77,6 @@ Polygon2d upScalePolygon( geometry_msgs::msg::Polygon toGeomPoly(const Polygon2d & polygon); -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner -#endif // BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__BOOST_GEOMETRY_HELPER_HPP_ +#endif // AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__BOOST_GEOMETRY_HELPER_HPP_ diff --git a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/debug.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/debug.hpp similarity index 86% rename from planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/debug.hpp rename to planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/debug.hpp index ab44af265fbaa..c6e5d45ec4eb6 100644 --- a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/debug.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/debug.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__DEBUG_HPP_ -#define BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__DEBUG_HPP_ +#ifndef AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__DEBUG_HPP_ +#define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__DEBUG_HPP_ #include @@ -26,7 +26,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace debug { @@ -47,5 +47,5 @@ visualization_msgs::msg::MarkerArray createPointsMarkerArray( const int64_t module_id, const rclcpp::Time & now, const double x, const double y, const double z, const double r, const double g, const double b); } // namespace debug -} // namespace behavior_velocity_planner -#endif // BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__DEBUG_HPP_ +} // namespace autoware::behavior_velocity_planner +#endif // AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__DEBUG_HPP_ diff --git a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/path_utilization.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/path_utilization.hpp similarity index 78% rename from planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/path_utilization.hpp rename to planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/path_utilization.hpp index 55a82db1ae390..e9bccc42e1dc4 100644 --- a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/path_utilization.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/path_utilization.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__PATH_UTILIZATION_HPP_ -#define BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__PATH_UTILIZATION_HPP_ +#ifndef AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__PATH_UTILIZATION_HPP_ +#define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__PATH_UTILIZATION_HPP_ #include @@ -22,7 +22,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { bool splineInterpolate( const tier4_planning_msgs::msg::PathWithLaneId & input, const double interval, @@ -33,6 +33,6 @@ autoware_planning_msgs::msg::Path filterLitterPathPoint( const autoware_planning_msgs::msg::Path & path); autoware_planning_msgs::msg::Path filterStopPathPoint( const autoware_planning_msgs::msg::Path & path); -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner -#endif // BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__PATH_UTILIZATION_HPP_ +#endif // AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__PATH_UTILIZATION_HPP_ diff --git a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/state_machine.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/state_machine.hpp similarity index 87% rename from planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/state_machine.hpp rename to planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/state_machine.hpp index 73b0fa7d553a3..12dd4db930745 100644 --- a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/state_machine.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/state_machine.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__STATE_MACHINE_HPP_ -#define BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__STATE_MACHINE_HPP_ +#ifndef AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__STATE_MACHINE_HPP_ +#define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__STATE_MACHINE_HPP_ #include @@ -21,7 +21,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { /** * @brief Manage stop-go states with safety margin time. @@ -92,5 +92,5 @@ class StateMachine std::shared_ptr start_time_; //! first time received GO when STOP state }; -} // namespace behavior_velocity_planner -#endif // BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__STATE_MACHINE_HPP_ +} // namespace autoware::behavior_velocity_planner +#endif // AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__STATE_MACHINE_HPP_ diff --git a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/trajectory_utils.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/trajectory_utils.hpp similarity index 76% rename from planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/trajectory_utils.hpp rename to planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/trajectory_utils.hpp index 2aadb7883a857..c5040f055c243 100644 --- a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/trajectory_utils.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/trajectory_utils.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__TRAJECTORY_UTILS_HPP_ -#define BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__TRAJECTORY_UTILS_HPP_ +#ifndef AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__TRAJECTORY_UTILS_HPP_ +#define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__TRAJECTORY_UTILS_HPP_ -#include +#include #include #include @@ -26,7 +26,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using autoware_planning_msgs::msg::Trajectory; using autoware_planning_msgs::msg::TrajectoryPoint; @@ -40,6 +40,6 @@ bool smoothPath( const PathWithLaneId & in_path, PathWithLaneId & out_path, const std::shared_ptr & planner_data); -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner -#endif // BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__TRAJECTORY_UTILS_HPP_ +#endif // AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__TRAJECTORY_UTILS_HPP_ diff --git a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/util.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/util.hpp similarity index 93% rename from planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/util.hpp rename to planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/util.hpp index 4ef4bb91a295d..2fe728847b8f2 100644 --- a/planning/behavior_velocity_planner_common/include/behavior_velocity_planner_common/utilization/util.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/utilization/util.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__UTIL_HPP_ -#define BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__UTIL_HPP_ +#ifndef AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__UTIL_HPP_ +#define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__UTIL_HPP_ #include @@ -35,7 +35,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { struct DetectionRange { @@ -155,11 +155,13 @@ std::unordered_map, lanelet::ConstLanelet> get std::vector unique_lane_ids; if (nearest_lane_id) { // Add subsequent lane_ids from nearest lane_id - unique_lane_ids = behavior_velocity_planner::planning_utils::getSubsequentLaneIdsSetOnPath( - path, *nearest_lane_id); + unique_lane_ids = + autoware::behavior_velocity_planner::planning_utils::getSubsequentLaneIdsSetOnPath( + path, *nearest_lane_id); } else { // Add all lane_ids in path - unique_lane_ids = behavior_velocity_planner::planning_utils::getSortedLaneIdsFromPath(path); + unique_lane_ids = + autoware::behavior_velocity_planner::planning_utils::getSortedLaneIdsFromPath(path); } for (const auto lane_id : unique_lane_ids) { @@ -239,6 +241,6 @@ lanelet::ConstLanelets getConstLaneletsFromIds( } } // namespace planning_utils -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner -#endif // BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__UTIL_HPP_ +#endif // AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__UTILIZATION__UTIL_HPP_ diff --git a/planning/behavior_velocity_planner_common/package.xml b/planning/autoware_behavior_velocity_planner_common/package.xml similarity index 93% rename from planning/behavior_velocity_planner_common/package.xml rename to planning/autoware_behavior_velocity_planner_common/package.xml index ba847d8b1f853..524387034e4b6 100644 --- a/planning/behavior_velocity_planner_common/package.xml +++ b/planning/autoware_behavior_velocity_planner_common/package.xml @@ -1,9 +1,9 @@ - behavior_velocity_planner_common + autoware_behavior_velocity_planner_common 0.1.0 - The behavior_velocity_planner_common package + The autoware_behavior_velocity_planner_common package Tomoya Kimura Shumpei Wakabayashi diff --git a/planning/behavior_velocity_planner_common/src/scene_module_interface.cpp b/planning/autoware_behavior_velocity_planner_common/src/scene_module_interface.cpp similarity index 97% rename from planning/behavior_velocity_planner_common/src/scene_module_interface.cpp rename to planning/autoware_behavior_velocity_planner_common/src/scene_module_interface.cpp index 3092d33418c8b..94cef496f4f75 100644 --- a/planning/behavior_velocity_planner_common/src/scene_module_interface.cpp +++ b/planning/autoware_behavior_velocity_planner_common/src/scene_module_interface.cpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include -#include +#include +#include #include #include #include @@ -21,7 +21,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_autoware_utils::StopWatch; @@ -281,4 +281,4 @@ void SceneModuleManagerInterfaceWithRTC::deleteExpiredModules( } } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner_common/src/utilization/arc_lane_util.cpp b/planning/autoware_behavior_velocity_planner_common/src/utilization/arc_lane_util.cpp similarity index 94% rename from planning/behavior_velocity_planner_common/src/utilization/arc_lane_util.cpp rename to planning/autoware_behavior_velocity_planner_common/src/utilization/arc_lane_util.cpp index e5705b1367e0e..d7e88f5f33901 100644 --- a/planning/behavior_velocity_planner_common/src/utilization/arc_lane_util.cpp +++ b/planning/autoware_behavior_velocity_planner_common/src/utilization/arc_lane_util.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include #include #include @@ -62,7 +62,7 @@ return p * v; */ } // namespace -namespace behavior_velocity_planner::arc_lane_utils +namespace autoware::behavior_velocity_planner::arc_lane_utils { double calcSignedDistance(const geometry_msgs::msg::Pose & p1, const geometry_msgs::msg::Point & p2) @@ -134,4 +134,4 @@ std::optional createTargetPoint( const auto front_idx = offset_segment->first; return std::make_pair(front_idx, target_pose); } -} // namespace behavior_velocity_planner::arc_lane_utils +} // namespace autoware::behavior_velocity_planner::arc_lane_utils diff --git a/planning/behavior_velocity_planner_common/src/utilization/boost_geometry_helper.cpp b/planning/autoware_behavior_velocity_planner_common/src/utilization/boost_geometry_helper.cpp similarity index 91% rename from planning/behavior_velocity_planner_common/src/utilization/boost_geometry_helper.cpp rename to planning/autoware_behavior_velocity_planner_common/src/utilization/boost_geometry_helper.cpp index 903cf5aab80e8..50f7cd269a904 100644 --- a/planning/behavior_velocity_planner_common/src/utilization/boost_geometry_helper.cpp +++ b/planning/autoware_behavior_velocity_planner_common/src/utilization/boost_geometry_helper.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include #include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { Polygon2d lines2polygon(const LineString2d & left_line, const LineString2d & right_line) @@ -63,4 +63,4 @@ geometry_msgs::msg::Polygon toGeomPoly(const Polygon2d & polygon) } return polygon_msg; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner_common/src/utilization/debug.cpp b/planning/autoware_behavior_velocity_planner_common/src/utilization/debug.cpp similarity index 94% rename from planning/behavior_velocity_planner_common/src/utilization/debug.cpp rename to planning/autoware_behavior_velocity_planner_common/src/utilization/debug.cpp index 00d746c56db85..a8e6828a048ae 100644 --- a/planning/behavior_velocity_planner_common/src/utilization/debug.cpp +++ b/planning/autoware_behavior_velocity_planner_common/src/utilization/debug.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include -#include +#include +#include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace debug { @@ -124,4 +124,4 @@ visualization_msgs::msg::MarkerArray createPointsMarkerArray( return msg; } } // namespace debug -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner_common/src/utilization/path_utilization.cpp b/planning/autoware_behavior_velocity_planner_common/src/utilization/path_utilization.cpp similarity index 96% rename from planning/behavior_velocity_planner_common/src/utilization/path_utilization.cpp rename to planning/autoware_behavior_velocity_planner_common/src/utilization/path_utilization.cpp index fe956e9be9512..eb17242c06b1e 100644 --- a/planning/behavior_velocity_planner_common/src/utilization/path_utilization.cpp +++ b/planning/autoware_behavior_velocity_planner_common/src/utilization/path_utilization.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include #include #include #include @@ -23,7 +23,7 @@ constexpr double DOUBLE_EPSILON = 1e-6; -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { bool splineInterpolate( const tier4_planning_msgs::msg::PathWithLaneId & input, const double interval, @@ -168,4 +168,4 @@ autoware_planning_msgs::msg::Path filterStopPathPoint( } return filtered_path; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner_common/src/utilization/trajectory_utils.cpp b/planning/autoware_behavior_velocity_planner_common/src/utilization/trajectory_utils.cpp similarity index 93% rename from planning/behavior_velocity_planner_common/src/utilization/trajectory_utils.cpp rename to planning/autoware_behavior_velocity_planner_common/src/utilization/trajectory_utils.cpp index ecc314bca2009..4d2ef59886ba7 100644 --- a/planning/behavior_velocity_planner_common/src/utilization/trajectory_utils.cpp +++ b/planning/autoware_behavior_velocity_planner_common/src/utilization/trajectory_utils.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -// #include +// #include #include "motion_utils/trajectory/conversion.hpp" +#include #include -#include #include #include @@ -33,7 +33,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using autoware_planning_msgs::msg::Trajectory; using autoware_planning_msgs::msg::TrajectoryPoint; @@ -89,4 +89,4 @@ bool smoothPath( return true; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner_common/src/utilization/util.cpp b/planning/autoware_behavior_velocity_planner_common/src/utilization/util.cpp similarity index 97% rename from planning/behavior_velocity_planner_common/src/utilization/util.cpp rename to planning/autoware_behavior_velocity_planner_common/src/utilization/util.cpp index b724d01346f1e..4578676aeeee7 100644 --- a/planning/behavior_velocity_planner_common/src/utilization/util.cpp +++ b/planning/autoware_behavior_velocity_planner_common/src/utilization/util.cpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include -#include +#include +#include #include #include @@ -89,7 +89,7 @@ geometry_msgs::msg::Pose transformRelCoordinate2D( } // namespace -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace planning_utils { @@ -545,11 +545,13 @@ std::vector getLaneletsOnPath( std::vector unique_lane_ids; if (nearest_lane_id) { // Add subsequent lane_ids from nearest lane_id - unique_lane_ids = behavior_velocity_planner::planning_utils::getSubsequentLaneIdsSetOnPath( - path, *nearest_lane_id); + unique_lane_ids = + autoware::behavior_velocity_planner::planning_utils::getSubsequentLaneIdsSetOnPath( + path, *nearest_lane_id); } else { // Add all lane_ids in path - unique_lane_ids = behavior_velocity_planner::planning_utils::getSortedLaneIdsFromPath(path); + unique_lane_ids = + autoware::behavior_velocity_planner::planning_utils::getSortedLaneIdsFromPath(path); } std::vector lanelets; @@ -692,4 +694,4 @@ std::set getAssociativeIntersectionLanelets( } } // namespace planning_utils -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner_common/test/src/test_arc_lane_util.cpp b/planning/autoware_behavior_velocity_planner_common/test/src/test_arc_lane_util.cpp similarity index 93% rename from planning/behavior_velocity_planner_common/test/src/test_arc_lane_util.cpp rename to planning/autoware_behavior_velocity_planner_common/test/src/test_arc_lane_util.cpp index fb2418ba9c829..b835aa0034ec4 100644 --- a/planning/behavior_velocity_planner_common/test/src/test_arc_lane_util.cpp +++ b/planning/autoware_behavior_velocity_planner_common/test/src/test_arc_lane_util.cpp @@ -14,17 +14,18 @@ #include "utils.hpp" -#include -#include +#include +#include #include #include -using PathIndexWithPoint2d = behavior_velocity_planner::arc_lane_utils::PathIndexWithPoint2d; -using LineString2d = behavior_velocity_planner::LineString2d; -using Point2d = behavior_velocity_planner::Point2d; -namespace arc_lane_utils = behavior_velocity_planner::arc_lane_utils; +using PathIndexWithPoint2d = + autoware::behavior_velocity_planner::arc_lane_utils::PathIndexWithPoint2d; +using LineString2d = autoware::behavior_velocity_planner::LineString2d; +using Point2d = autoware::behavior_velocity_planner::Point2d; +namespace arc_lane_utils = autoware::behavior_velocity_planner::arc_lane_utils; namespace { @@ -121,7 +122,7 @@ TEST(findOffsetSegment, case_backward_offset_segment) TEST(checkCollision, various_cases) { - using behavior_velocity_planner::arc_lane_utils::checkCollision; + using autoware::behavior_velocity_planner::arc_lane_utils::checkCollision; constexpr double epsilon = 1e-6; { // normal case with collision diff --git a/planning/behavior_velocity_planner_common/test/src/test_state_machine.cpp b/planning/autoware_behavior_velocity_planner_common/test/src/test_state_machine.cpp similarity index 92% rename from planning/behavior_velocity_planner_common/test/src/test_state_machine.cpp rename to planning/autoware_behavior_velocity_planner_common/test/src/test_state_machine.cpp index ac7c6655ced87..fe6a1e00496b1 100644 --- a/planning/behavior_velocity_planner_common/test/src/test_state_machine.cpp +++ b/planning/autoware_behavior_velocity_planner_common/test/src/test_state_machine.cpp @@ -14,7 +14,7 @@ #include "utils.hpp" -#include +#include #include #include @@ -23,8 +23,8 @@ #include #include -using StateMachine = behavior_velocity_planner::StateMachine; -using State = behavior_velocity_planner::StateMachine::State; +using StateMachine = autoware::behavior_velocity_planner::StateMachine; +using State = autoware::behavior_velocity_planner::StateMachine::State; int enumToInt(State s) { diff --git a/planning/behavior_velocity_planner_common/test/src/test_utilization.cpp b/planning/autoware_behavior_velocity_planner_common/test/src/test_utilization.cpp similarity index 92% rename from planning/behavior_velocity_planner_common/test/src/test_utilization.cpp rename to planning/autoware_behavior_velocity_planner_common/test/src/test_utilization.cpp index fbc5f5d709c5c..5e6c92b662820 100644 --- a/planning/behavior_velocity_planner_common/test/src/test_utilization.cpp +++ b/planning/autoware_behavior_velocity_planner_common/test/src/test_utilization.cpp @@ -15,9 +15,9 @@ #include "motion_utils/trajectory/trajectory.hpp" #include "utils.hpp" -#include -#include -#include +#include +#include +#include #include @@ -35,7 +35,7 @@ TEST(is_ahead_of, nominal) { - using behavior_velocity_planner::planning_utils::isAheadOf; + using autoware::behavior_velocity_planner::planning_utils::isAheadOf; geometry_msgs::msg::Pose target = test::generatePose(0); geometry_msgs::msg::Pose origin = test::generatePose(1); bool is_ahead = isAheadOf(target, origin); @@ -47,7 +47,8 @@ TEST(is_ahead_of, nominal) TEST(smoothDeceleration, calculateMaxSlowDownVelocity) { - using behavior_velocity_planner::planning_utils::calcDecelerationVelocityFromDistanceToTarget; + using autoware::behavior_velocity_planner::planning_utils:: + calcDecelerationVelocityFromDistanceToTarget; const double current_accel = 1.0; const double current_velocity = 5.0; const double max_slow_down_jerk = -1.0; @@ -82,9 +83,9 @@ TEST(smoothDeceleration, calculateMaxSlowDownVelocity) TEST(specialInterpolation, specialInterpolation) { + using autoware::behavior_velocity_planner::interpolatePath; using autoware_planning_msgs::msg::Path; using autoware_planning_msgs::msg::PathPoint; - using behavior_velocity_planner::interpolatePath; using motion_utils::calcSignedArcLength; using motion_utils::searchZeroVelocityIndex; diff --git a/planning/behavior_velocity_planner_common/test/src/utils.hpp b/planning/autoware_behavior_velocity_planner_common/test/src/utils.hpp similarity index 100% rename from planning/behavior_velocity_planner_common/test/src/utils.hpp rename to planning/autoware_behavior_velocity_planner_common/test/src/utils.hpp diff --git a/planning/autoware_behavior_velocity_run_out_module/package.xml b/planning/autoware_behavior_velocity_run_out_module/package.xml index cb2c2df58ffe2..330880b77d3da 100644 --- a/planning/autoware_behavior_velocity_run_out_module/package.xml +++ b/planning/autoware_behavior_velocity_run_out_module/package.xml @@ -19,10 +19,10 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs behavior_velocity_crosswalk_module - behavior_velocity_planner_common eigen geometry_msgs libboost-dev diff --git a/planning/autoware_behavior_velocity_run_out_module/plugins.xml b/planning/autoware_behavior_velocity_run_out_module/plugins.xml index 1ddcaf8e620e1..0fbaf5091d0f7 100644 --- a/planning/autoware_behavior_velocity_run_out_module/plugins.xml +++ b/planning/autoware_behavior_velocity_run_out_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/autoware_behavior_velocity_run_out_module/src/debug.hpp b/planning/autoware_behavior_velocity_run_out_module/src/debug.hpp index 3c6d475950e7c..c38dd63fadba9 100644 --- a/planning/autoware_behavior_velocity_run_out_module/src/debug.hpp +++ b/planning/autoware_behavior_velocity_run_out_module/src/debug.hpp @@ -26,7 +26,6 @@ #include namespace autoware::behavior_velocity_planner { -using ::behavior_velocity_planner::Polygon2d; using sensor_msgs::msg::PointCloud2; using tier4_debug_msgs::msg::Float32MultiArrayStamped; using tier4_debug_msgs::msg::Int32Stamped; diff --git a/planning/autoware_behavior_velocity_run_out_module/src/dynamic_obstacle.cpp b/planning/autoware_behavior_velocity_run_out_module/src/dynamic_obstacle.cpp index d204c7ec6f2fc..5e8b0382a07c0 100644 --- a/planning/autoware_behavior_velocity_run_out_module/src/dynamic_obstacle.cpp +++ b/planning/autoware_behavior_velocity_run_out_module/src/dynamic_obstacle.cpp @@ -32,8 +32,6 @@ namespace autoware::behavior_velocity_planner { -using ::behavior_velocity_planner::Point2d; -using ::behavior_velocity_planner::splineInterpolate; namespace { // create quaternion facing to the nearest trajectory point diff --git a/planning/autoware_behavior_velocity_run_out_module/src/dynamic_obstacle.hpp b/planning/autoware_behavior_velocity_run_out_module/src/dynamic_obstacle.hpp index b7ed815829a2b..8fb79fb9d8eaa 100644 --- a/planning/autoware_behavior_velocity_run_out_module/src/dynamic_obstacle.hpp +++ b/planning/autoware_behavior_velocity_run_out_module/src/dynamic_obstacle.hpp @@ -18,9 +18,9 @@ #include "debug.hpp" #include "utils.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -47,7 +47,6 @@ namespace autoware::behavior_velocity_planner using autoware_perception_msgs::msg::ObjectClassification; using autoware_perception_msgs::msg::PredictedObjects; using autoware_perception_msgs::msg::Shape; -using ::behavior_velocity_planner::PlannerData; using run_out_utils::DynamicObstacle; using run_out_utils::DynamicObstacleData; using run_out_utils::DynamicObstacleParam; @@ -56,7 +55,6 @@ using run_out_utils::PredictedPath; using tier4_planning_msgs::msg::PathPointWithLaneId; using tier4_planning_msgs::msg::PathWithLaneId; using PathPointsWithLaneId = std::vector; -using ::behavior_velocity_planner::Polygons2d; /** * @brief base class for creating dynamic obstacles from multiple types of input diff --git a/planning/autoware_behavior_velocity_run_out_module/src/manager.cpp b/planning/autoware_behavior_velocity_run_out_module/src/manager.cpp index 5ee50863fd162..002a49abae611 100644 --- a/planning/autoware_behavior_velocity_run_out_module/src/manager.cpp +++ b/planning/autoware_behavior_velocity_run_out_module/src/manager.cpp @@ -22,7 +22,6 @@ namespace autoware::behavior_velocity_planner { -using ::behavior_velocity_planner::SceneModuleManagerInterface; using tier4_autoware_utils::getOrDeclareParameter; RunOutModuleManager::RunOutModuleManager(rclcpp::Node & node) : SceneModuleManagerInterface(node, getModuleName()) @@ -203,4 +202,4 @@ void RunOutModuleManager::setDynamicObstacleCreator( #include PLUGINLIB_EXPORT_CLASS( autoware::behavior_velocity_planner::RunOutModulePlugin, - behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/autoware_behavior_velocity_run_out_module/src/manager.hpp b/planning/autoware_behavior_velocity_run_out_module/src/manager.hpp index f0c49b99c99e5..8cdb17e21d74b 100644 --- a/planning/autoware_behavior_velocity_run_out_module/src/manager.hpp +++ b/planning/autoware_behavior_velocity_run_out_module/src/manager.hpp @@ -17,17 +17,14 @@ #include "scene.hpp" -#include -#include -#include +#include +#include +#include #include namespace autoware::behavior_velocity_planner { -using ::behavior_velocity_planner::PluginWrapper; -using ::behavior_velocity_planner::SceneModuleInterface; -using ::behavior_velocity_planner::SceneModuleManagerInterface; class RunOutModuleManager : public SceneModuleManagerInterface { public: diff --git a/planning/autoware_behavior_velocity_run_out_module/src/scene.cpp b/planning/autoware_behavior_velocity_run_out_module/src/scene.cpp index 351ed8e7a09b8..e492bc99be615 100644 --- a/planning/autoware_behavior_velocity_run_out_module/src/scene.cpp +++ b/planning/autoware_behavior_velocity_run_out_module/src/scene.cpp @@ -17,8 +17,8 @@ #include "behavior_velocity_crosswalk_module/util.hpp" #include "path_utils.hpp" -#include -#include +#include +#include #include #include #include @@ -37,11 +37,8 @@ namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; -using ::behavior_velocity_planner::PlanningBehavior; using object_recognition_utils::convertLabelToString; -namespace planning_utils = ::behavior_velocity_planner::planning_utils; -using ::behavior_velocity_planner::getCrosswalksOnPath; -using ::behavior_velocity_planner::Polygon2d; +namespace planning_utils = autoware::behavior_velocity_planner::planning_utils; RunOutModule::RunOutModule( const int64_t module_id, const std::shared_ptr & planner_data, diff --git a/planning/autoware_behavior_velocity_run_out_module/src/scene.hpp b/planning/autoware_behavior_velocity_run_out_module/src/scene.hpp index 85da1340a5a5d..e3fd30a4e36ce 100644 --- a/planning/autoware_behavior_velocity_run_out_module/src/scene.hpp +++ b/planning/autoware_behavior_velocity_run_out_module/src/scene.hpp @@ -21,7 +21,7 @@ #include "state_machine.hpp" #include "utils.hpp" -#include +#include #include #include @@ -39,11 +39,6 @@ using tier4_debug_msgs::msg::Float32Stamped; using tier4_planning_msgs::msg::PathPointWithLaneId; using tier4_planning_msgs::msg::PathWithLaneId; using BasicPolygons2d = std::vector; -using ::behavior_velocity_planner::PathWithLaneId; -using ::behavior_velocity_planner::PlannerData; -using ::behavior_velocity_planner::Polygon2d; -using ::behavior_velocity_planner::SceneModuleInterface; -using ::behavior_velocity_planner::StopReason; class RunOutModule : public SceneModuleInterface { diff --git a/planning/autoware_behavior_velocity_run_out_module/src/utils.cpp b/planning/autoware_behavior_velocity_run_out_module/src/utils.cpp index ec1cd460e1bb0..ed745cbb92679 100644 --- a/planning/autoware_behavior_velocity_run_out_module/src/utils.cpp +++ b/planning/autoware_behavior_velocity_run_out_module/src/utils.cpp @@ -35,9 +35,6 @@ #include namespace autoware::behavior_velocity_planner { -using ::behavior_velocity_planner::DetectionRange; -using ::behavior_velocity_planner::PathPointWithLaneId; -namespace planning_utils = ::behavior_velocity_planner::planning_utils; namespace run_out_utils { Polygon2d createBoostPolyFromMsg(const std::vector & input_poly) diff --git a/planning/autoware_behavior_velocity_run_out_module/src/utils.hpp b/planning/autoware_behavior_velocity_run_out_module/src/utils.hpp index 10f856b257a61..28bfa9569c66d 100644 --- a/planning/autoware_behavior_velocity_run_out_module/src/utils.hpp +++ b/planning/autoware_behavior_velocity_run_out_module/src/utils.hpp @@ -17,8 +17,8 @@ #include "tier4_autoware_utils/geometry/geometry.hpp" -#include -#include +#include +#include #include #include @@ -38,8 +38,6 @@ using autoware_perception_msgs::msg::ObjectClassification; using autoware_perception_msgs::msg::PredictedObjects; using autoware_perception_msgs::msg::Shape; using autoware_planning_msgs::msg::PathPoint; -using ::behavior_velocity_planner::PlannerData; -using ::behavior_velocity_planner::Polygons2d; using tier4_autoware_utils::Box2d; using tier4_autoware_utils::LineString2d; using tier4_autoware_utils::Point2d; diff --git a/planning/autoware_behavior_velocity_template_module/package.xml b/planning/autoware_behavior_velocity_template_module/package.xml index a6bcbf5c34e76..eb6a6668fcee9 100644 --- a/planning/autoware_behavior_velocity_template_module/package.xml +++ b/planning/autoware_behavior_velocity_template_module/package.xml @@ -13,8 +13,8 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_velocity_planner_common autoware_planning_msgs - behavior_velocity_planner_common eigen geometry_msgs lanelet2_extension diff --git a/planning/autoware_behavior_velocity_template_module/src/manager.cpp b/planning/autoware_behavior_velocity_template_module/src/manager.cpp index 8f6621aaab835..8aaf6be9bbfe9 100644 --- a/planning/autoware_behavior_velocity_template_module/src/manager.cpp +++ b/planning/autoware_behavior_velocity_template_module/src/manager.cpp @@ -61,4 +61,4 @@ TemplateModuleManager::getModuleExpiredFunction( #include PLUGINLIB_EXPORT_CLASS( autoware::behavior_velocity_planner::TemplateModulePlugin, - behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/autoware_behavior_velocity_template_module/src/manager.hpp b/planning/autoware_behavior_velocity_template_module/src/manager.hpp index 8e95f516c337d..b92913b2a95ce 100644 --- a/planning/autoware_behavior_velocity_template_module/src/manager.hpp +++ b/planning/autoware_behavior_velocity_template_module/src/manager.hpp @@ -17,9 +17,9 @@ #include "scene.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -37,7 +37,8 @@ namespace autoware::behavior_velocity_planner * * @param node A reference to the ROS node. */ -class TemplateModuleManager : public ::behavior_velocity_planner::SceneModuleManagerInterface +class TemplateModuleManager +: public autoware::behavior_velocity_planner::SceneModuleManagerInterface { public: explicit TemplateModuleManager(rclcpp::Node & node); @@ -85,7 +86,7 @@ class TemplateModuleManager : public ::behavior_velocity_planner::SceneModuleMan * Velocity Planner. */ class TemplateModulePlugin -: public ::behavior_velocity_planner::PluginWrapper +: public autoware::behavior_velocity_planner::PluginWrapper { }; diff --git a/planning/autoware_behavior_velocity_template_module/src/scene.hpp b/planning/autoware_behavior_velocity_template_module/src/scene.hpp index 3ce5ddbd8729d..0fc4e7dd9ae91 100644 --- a/planning/autoware_behavior_velocity_template_module/src/scene.hpp +++ b/planning/autoware_behavior_velocity_template_module/src/scene.hpp @@ -15,7 +15,7 @@ #ifndef SCENE_HPP_ #define SCENE_HPP_ -#include +#include #include #include @@ -23,8 +23,6 @@ namespace autoware::behavior_velocity_planner { -using ::behavior_velocity_planner::SceneModuleInterface; -using ::behavior_velocity_planner::StopReason; using tier4_planning_msgs::msg::PathWithLaneId; class TemplateModule : public SceneModuleInterface diff --git a/planning/autoware_behavior_velocity_virtual_traffic_light_module/package.xml b/planning/autoware_behavior_velocity_virtual_traffic_light_module/package.xml index cd35d4308c26a..cda3abbd0eee9 100644 --- a/planning/autoware_behavior_velocity_virtual_traffic_light_module/package.xml +++ b/planning/autoware_behavior_velocity_virtual_traffic_light_module/package.xml @@ -17,8 +17,8 @@ autoware_cmake autoware_adapi_v1_msgs + autoware_behavior_velocity_planner_common autoware_planning_msgs - behavior_velocity_planner_common geometry_msgs lanelet2_extension motion_utils diff --git a/planning/autoware_behavior_velocity_virtual_traffic_light_module/plugins.xml b/planning/autoware_behavior_velocity_virtual_traffic_light_module/plugins.xml index 2402fc13469b9..2e2abef259778 100644 --- a/planning/autoware_behavior_velocity_virtual_traffic_light_module/plugins.xml +++ b/planning/autoware_behavior_velocity_virtual_traffic_light_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.cpp b/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.cpp index 5a32cfd2f74f0..39dca1f8f6303 100644 --- a/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.cpp +++ b/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.cpp @@ -14,7 +14,7 @@ #include "manager.hpp" -#include +#include #include #include @@ -28,7 +28,7 @@ namespace autoware::behavior_velocity_planner { using lanelet::autoware::VirtualTrafficLight; using tier4_autoware_utils::getOrDeclareParameter; -namespace planning_utils = ::behavior_velocity_planner::planning_utils; +namespace planning_utils = autoware::behavior_velocity_planner::planning_utils; VirtualTrafficLightModuleManager::VirtualTrafficLightModuleManager(rclcpp::Node & node) : SceneModuleManagerInterface(node, getModuleName()) @@ -82,4 +82,4 @@ VirtualTrafficLightModuleManager::getModuleExpiredFunction( #include PLUGINLIB_EXPORT_CLASS( autoware::behavior_velocity_planner::VirtualTrafficLightModulePlugin, - behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.hpp b/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.hpp index c73bb0d706008..6b0436a4290ac 100644 --- a/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.hpp +++ b/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.hpp @@ -17,9 +17,9 @@ #include "scene.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -29,9 +29,6 @@ namespace autoware::behavior_velocity_planner { -using ::behavior_velocity_planner::PluginWrapper; -using ::behavior_velocity_planner::SceneModuleInterface; -using ::behavior_velocity_planner::SceneModuleManagerInterface; class VirtualTrafficLightModuleManager : public SceneModuleManagerInterface { public: diff --git a/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.cpp b/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.cpp index 7d91a954171dd..a87d8867adf7e 100644 --- a/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.cpp +++ b/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.cpp @@ -14,8 +14,8 @@ #include "scene.hpp" -#include -#include +#include +#include #include #include @@ -25,11 +25,6 @@ namespace autoware::behavior_velocity_planner { -using ::behavior_velocity_planner::PlanningBehavior; -using ::behavior_velocity_planner::SceneModuleInterface; -using ::behavior_velocity_planner::VelocityFactor; -namespace arc_lane_utils = ::behavior_velocity_planner::arc_lane_utils; -namespace planning_utils = ::behavior_velocity_planner::planning_utils; namespace { using tier4_autoware_utils::calcDistance2d; @@ -181,7 +176,8 @@ std::optional insertStopVelocityAtCollision( auto insert_point = path->points.at(insert_index); insert_point.point.pose = interpolated_pose; // Insert 0 velocity after stop point or replace velocity with 0 - behavior_velocity_planner::planning_utils::insertVelocity(*path, insert_point, 0.0, insert_index); + autoware::behavior_velocity_planner::planning_utils::insertVelocity( + *path, insert_point, 0.0, insert_index); return insert_index; } } // namespace diff --git a/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.hpp b/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.hpp index c83ff4e0607ef..9775e64145529 100644 --- a/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.hpp +++ b/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.hpp @@ -15,7 +15,7 @@ #ifndef SCENE_HPP_ #define SCENE_HPP_ -#include +#include #include #include #include @@ -32,10 +32,6 @@ namespace autoware::behavior_velocity_planner { -using ::behavior_velocity_planner::PathWithLaneId; -using ::behavior_velocity_planner::Pose; -using ::behavior_velocity_planner::SceneModuleInterface; -using ::behavior_velocity_planner::StopReason; class VirtualTrafficLightModule : public SceneModuleInterface { public: diff --git a/planning/autoware_behavior_velocity_walkway_module/package.xml b/planning/autoware_behavior_velocity_walkway_module/package.xml index 59fa84acefcbb..bbe87ffb8b2cd 100644 --- a/planning/autoware_behavior_velocity_walkway_module/package.xml +++ b/planning/autoware_behavior_velocity_walkway_module/package.xml @@ -17,9 +17,9 @@ ament_cmake_auto autoware_cmake + autoware_behavior_velocity_planner_common autoware_planning_msgs behavior_velocity_crosswalk_module - behavior_velocity_planner_common geometry_msgs lanelet2_extension libboost-dev diff --git a/planning/autoware_behavior_velocity_walkway_module/plugins.xml b/planning/autoware_behavior_velocity_walkway_module/plugins.xml index d7f9e948154c1..9a5803807ae8d 100644 --- a/planning/autoware_behavior_velocity_walkway_module/plugins.xml +++ b/planning/autoware_behavior_velocity_walkway_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/autoware_behavior_velocity_walkway_module/src/debug.cpp b/planning/autoware_behavior_velocity_walkway_module/src/debug.cpp index d26a47e512bc4..80badf59434da 100644 --- a/planning/autoware_behavior_velocity_walkway_module/src/debug.cpp +++ b/planning/autoware_behavior_velocity_walkway_module/src/debug.cpp @@ -14,7 +14,7 @@ #include "scene_walkway.hpp" -#include +#include #include #include #include @@ -34,7 +34,6 @@ using tier4_autoware_utils::createMarkerColor; using tier4_autoware_utils::createMarkerScale; using tier4_autoware_utils::createPoint; using visualization_msgs::msg::Marker; -namespace planning_utils = ::behavior_velocity_planner::planning_utils; namespace { diff --git a/planning/autoware_behavior_velocity_walkway_module/src/manager.cpp b/planning/autoware_behavior_velocity_walkway_module/src/manager.cpp index 1adea85788d5b..cf3efe3700a05 100644 --- a/planning/autoware_behavior_velocity_walkway_module/src/manager.cpp +++ b/planning/autoware_behavior_velocity_walkway_module/src/manager.cpp @@ -14,7 +14,7 @@ #include "manager.hpp" -#include +#include #include #include @@ -26,12 +26,8 @@ namespace autoware::behavior_velocity_planner { -using ::behavior_velocity_planner::SceneModuleManagerInterface; using lanelet::autoware::Crosswalk; using tier4_autoware_utils::getOrDeclareParameter; -namespace planning_utils = ::behavior_velocity_planner::planning_utils; -using ::behavior_velocity_planner::getCrosswalkIdSetOnPath; -using ::behavior_velocity_planner::getCrosswalksOnPath; WalkwayModuleManager::WalkwayModuleManager(rclcpp::Node & node) : SceneModuleManagerInterface(node, getModuleName()) @@ -109,4 +105,4 @@ WalkwayModuleManager::getModuleExpiredFunction(const PathWithLaneId & path) #include PLUGINLIB_EXPORT_CLASS( autoware::behavior_velocity_planner::WalkwayModulePlugin, - ::behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/autoware_behavior_velocity_walkway_module/src/manager.hpp b/planning/autoware_behavior_velocity_walkway_module/src/manager.hpp index d19bf9c1c1d5f..592181dd3ac75 100644 --- a/planning/autoware_behavior_velocity_walkway_module/src/manager.hpp +++ b/planning/autoware_behavior_velocity_walkway_module/src/manager.hpp @@ -17,9 +17,9 @@ #include "scene_walkway.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -33,9 +33,6 @@ namespace autoware::behavior_velocity_planner { -using ::behavior_velocity_planner::PluginWrapper; -using ::behavior_velocity_planner::SceneModuleInterface; -using ::behavior_velocity_planner::SceneModuleManagerInterface; using tier4_planning_msgs::msg::PathWithLaneId; class WalkwayModuleManager : public SceneModuleManagerInterface diff --git a/planning/autoware_behavior_velocity_walkway_module/src/scene_walkway.cpp b/planning/autoware_behavior_velocity_walkway_module/src/scene_walkway.cpp index 236654e598216..73ae5a52e0183 100644 --- a/planning/autoware_behavior_velocity_walkway_module/src/scene_walkway.cpp +++ b/planning/autoware_behavior_velocity_walkway_module/src/scene_walkway.cpp @@ -14,7 +14,7 @@ #include "scene_walkway.hpp" -#include +#include #include #include @@ -22,19 +22,11 @@ namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; -using ::behavior_velocity_planner::getLinestringIntersects; -using ::behavior_velocity_planner::getPolygonIntersects; -using ::behavior_velocity_planner::getStopLineFromMap; -using ::behavior_velocity_planner::PlanningBehavior; -using ::behavior_velocity_planner::SceneModuleInterface; -using ::behavior_velocity_planner::StopFactor; -using ::behavior_velocity_planner::VelocityFactor; using motion_utils::calcLongitudinalOffsetPose; using motion_utils::calcSignedArcLength; using motion_utils::findNearestSegmentIndex; using tier4_autoware_utils::createPoint; using tier4_autoware_utils::getPose; -namespace planning_utils = ::behavior_velocity_planner::planning_utils; WalkwayModule::WalkwayModule( const int64_t module_id, const lanelet::LaneletMapPtr & lanelet_map_ptr, diff --git a/planning/autoware_behavior_velocity_walkway_module/src/scene_walkway.hpp b/planning/autoware_behavior_velocity_walkway_module/src/scene_walkway.hpp index 1928466400134..e6c8f61ba656e 100644 --- a/planning/autoware_behavior_velocity_walkway_module/src/scene_walkway.hpp +++ b/planning/autoware_behavior_velocity_walkway_module/src/scene_walkway.hpp @@ -18,7 +18,7 @@ #include "behavior_velocity_crosswalk_module/util.hpp" #include "scene_walkway.hpp" -#include +#include #include #include @@ -33,11 +33,6 @@ namespace autoware::behavior_velocity_planner { -using ::behavior_velocity_planner::DebugData; -using ::behavior_velocity_planner::PathWithLaneId; -using ::behavior_velocity_planner::SceneModuleInterface; -using ::behavior_velocity_planner::StopReason; - class WalkwayModule : public SceneModuleInterface { public: diff --git a/planning/behavior_velocity_blind_spot_module/package.xml b/planning/behavior_velocity_blind_spot_module/package.xml index ebf760405a256..67947398afb01 100644 --- a/planning/behavior_velocity_blind_spot_module/package.xml +++ b/planning/behavior_velocity_blind_spot_module/package.xml @@ -16,9 +16,9 @@ ament_cmake_auto autoware_cmake + autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs - behavior_velocity_planner_common geometry_msgs lanelet2_extension motion_utils diff --git a/planning/behavior_velocity_blind_spot_module/plugins.xml b/planning/behavior_velocity_blind_spot_module/plugins.xml index 7dda59ea2fdbe..fb5019de5df08 100644 --- a/planning/behavior_velocity_blind_spot_module/plugins.xml +++ b/planning/behavior_velocity_blind_spot_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_blind_spot_module/src/debug.cpp b/planning/behavior_velocity_blind_spot_module/src/debug.cpp index a30836ab9f6a9..c357df481bca8 100644 --- a/planning/behavior_velocity_blind_spot_module/src/debug.cpp +++ b/planning/behavior_velocity_blind_spot_module/src/debug.cpp @@ -14,8 +14,8 @@ #include "scene.hpp" -#include -#include +#include +#include #include #include @@ -25,7 +25,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_autoware_utils::appendMarkerArray; using tier4_autoware_utils::createMarkerColor; @@ -107,4 +107,4 @@ visualization_msgs::msg::MarkerArray BlindSpotModule::createDebugMarkerArray() return debug_marker_array; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_blind_spot_module/src/decisions.cpp b/planning/behavior_velocity_blind_spot_module/src/decisions.cpp index 6e4135c50b253..6b963d86c9bbf 100644 --- a/planning/behavior_velocity_blind_spot_module/src/decisions.cpp +++ b/planning/behavior_velocity_blind_spot_module/src/decisions.cpp @@ -16,7 +16,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { /* @@ -150,4 +150,4 @@ void BlindSpotModule::reactRTCApprovalByDecision( return; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_blind_spot_module/src/manager.cpp b/planning/behavior_velocity_blind_spot_module/src/manager.cpp index f1b0a56018d9b..7f2f7ebd89baa 100644 --- a/planning/behavior_velocity_blind_spot_module/src/manager.cpp +++ b/planning/behavior_velocity_blind_spot_module/src/manager.cpp @@ -14,8 +14,8 @@ #include "manager.hpp" -#include -#include +#include +#include #include @@ -25,7 +25,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { BlindSpotModuleManager::BlindSpotModuleManager(rclcpp::Node & node) @@ -95,8 +95,9 @@ BlindSpotModuleManager::getModuleExpiredFunction( }; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_velocity_planner::BlindSpotModulePlugin, behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::BlindSpotModulePlugin, + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/behavior_velocity_blind_spot_module/src/manager.hpp b/planning/behavior_velocity_blind_spot_module/src/manager.hpp index 7d6f936cc9d5b..12dccd846affc 100644 --- a/planning/behavior_velocity_blind_spot_module/src/manager.hpp +++ b/planning/behavior_velocity_blind_spot_module/src/manager.hpp @@ -17,9 +17,9 @@ #include "scene.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -27,7 +27,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class BlindSpotModuleManager : public SceneModuleManagerInterfaceWithRTC { @@ -49,6 +49,6 @@ class BlindSpotModulePlugin : public PluginWrapper { }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // MANAGER_HPP_ diff --git a/planning/behavior_velocity_blind_spot_module/src/scene.cpp b/planning/behavior_velocity_blind_spot_module/src/scene.cpp index 14ebe70216d5a..eed767fb891f9 100644 --- a/planning/behavior_velocity_blind_spot_module/src/scene.cpp +++ b/planning/behavior_velocity_blind_spot_module/src/scene.cpp @@ -14,9 +14,9 @@ #include "scene.hpp" -#include -#include -#include +#include +#include +#include #include #include #include @@ -40,7 +40,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -704,4 +704,4 @@ bool BlindSpotModule::isTargetObjectType( return false; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_blind_spot_module/src/scene.hpp b/planning/behavior_velocity_blind_spot_module/src/scene.hpp index b3bf90f5b91d1..cfb6bfdfeeded 100644 --- a/planning/behavior_velocity_blind_spot_module/src/scene.hpp +++ b/planning/behavior_velocity_blind_spot_module/src/scene.hpp @@ -15,9 +15,9 @@ #ifndef SCENE_HPP_ #define SCENE_HPP_ -#include -#include -#include +#include +#include +#include #include #include @@ -34,7 +34,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { /** * @brief wrapper class of interpolated path with lane id @@ -237,6 +237,6 @@ class BlindSpotModule : public SceneModuleInterface // Debug mutable DebugData debug_data_; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // SCENE_HPP_ diff --git a/planning/behavior_velocity_crosswalk_module/include/behavior_velocity_crosswalk_module/util.hpp b/planning/behavior_velocity_crosswalk_module/include/behavior_velocity_crosswalk_module/util.hpp index 690eca196d536..ca07636c2f60e 100644 --- a/planning/behavior_velocity_crosswalk_module/include/behavior_velocity_crosswalk_module/util.hpp +++ b/planning/behavior_velocity_crosswalk_module/include/behavior_velocity_crosswalk_module/util.hpp @@ -33,12 +33,12 @@ #define EIGEN_MPL2_ONLY #include #include -#include +#include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_planning_msgs::msg::PathPointWithLaneId; @@ -108,6 +108,6 @@ std::vector getLinestringIntersects( std::optional getStopLineFromMap( const lanelet::Id lane_id, const lanelet::LaneletMapPtr & lanelet_map_ptr, const std::string & attribute_name); -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // BEHAVIOR_VELOCITY_CROSSWALK_MODULE__UTIL_HPP_ diff --git a/planning/behavior_velocity_crosswalk_module/package.xml b/planning/behavior_velocity_crosswalk_module/package.xml index 2fd5e2bb514c3..eebf9c4d4a14f 100644 --- a/planning/behavior_velocity_crosswalk_module/package.xml +++ b/planning/behavior_velocity_crosswalk_module/package.xml @@ -21,9 +21,9 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs - behavior_velocity_planner_common eigen geometry_msgs grid_map_core diff --git a/planning/behavior_velocity_crosswalk_module/plugins.xml b/planning/behavior_velocity_crosswalk_module/plugins.xml index 3d1d720857c17..e38ab0d85a63a 100644 --- a/planning/behavior_velocity_crosswalk_module/plugins.xml +++ b/planning/behavior_velocity_crosswalk_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_crosswalk_module/src/debug.cpp b/planning/behavior_velocity_crosswalk_module/src/debug.cpp index 4bee98db2fa56..1418d46081fcd 100644 --- a/planning/behavior_velocity_crosswalk_module/src/debug.cpp +++ b/planning/behavior_velocity_crosswalk_module/src/debug.cpp @@ -14,14 +14,14 @@ #include "scene_crosswalk.hpp" -#include +#include #include #include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using motion_utils::createSlowDownVirtualWallMarker; @@ -207,4 +207,4 @@ visualization_msgs::msg::MarkerArray CrosswalkModule::createDebugMarkerArray() return debug_marker_array; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_crosswalk_module/src/manager.cpp b/planning/behavior_velocity_crosswalk_module/src/manager.cpp index fe4282893674c..428ec2510c7f4 100644 --- a/planning/behavior_velocity_crosswalk_module/src/manager.cpp +++ b/planning/behavior_velocity_crosswalk_module/src/manager.cpp @@ -14,7 +14,7 @@ #include "manager.hpp" -#include +#include #include #include @@ -24,7 +24,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using lanelet::autoware::Crosswalk; @@ -229,8 +229,9 @@ CrosswalkModuleManager::getModuleExpiredFunction(const PathWithLaneId & path) return crosswalk_id_set.count(scene_module->getModuleId()) == 0; }; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_velocity_planner::CrosswalkModulePlugin, behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::CrosswalkModulePlugin, + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/behavior_velocity_crosswalk_module/src/manager.hpp b/planning/behavior_velocity_crosswalk_module/src/manager.hpp index ba7e75193deab..520dab49b347f 100644 --- a/planning/behavior_velocity_crosswalk_module/src/manager.hpp +++ b/planning/behavior_velocity_crosswalk_module/src/manager.hpp @@ -17,9 +17,9 @@ #include "scene_crosswalk.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -32,7 +32,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_planning_msgs::msg::PathWithLaneId; @@ -56,6 +56,6 @@ class CrosswalkModuleManager : public SceneModuleManagerInterfaceWithRTC class CrosswalkModulePlugin : public PluginWrapper { }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // MANAGER_HPP_ diff --git a/planning/behavior_velocity_crosswalk_module/src/occluded_crosswalk.cpp b/planning/behavior_velocity_crosswalk_module/src/occluded_crosswalk.cpp index b6adb32f642eb..619e389f3fcf8 100644 --- a/planning/behavior_velocity_crosswalk_module/src/occluded_crosswalk.cpp +++ b/planning/behavior_velocity_crosswalk_module/src/occluded_crosswalk.cpp @@ -22,11 +22,11 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { bool is_occluded( const grid_map::GridMap & grid_map, const int min_nb_of_cells, const grid_map::Index idx, - const behavior_velocity_planner::CrosswalkModule::PlannerParam & params) + const autoware::behavior_velocity_planner::CrosswalkModule::PlannerParam & params) { grid_map::Index idx_offset; for (idx_offset.x() = 0; idx_offset.x() < min_nb_of_cells; ++idx_offset.x()) { @@ -140,7 +140,7 @@ bool is_crosswalk_occluded( const nav_msgs::msg::OccupancyGrid & occupancy_grid, const geometry_msgs::msg::Point & path_intersection, const double detection_range, const std::vector & dynamic_objects, - const behavior_velocity_planner::CrosswalkModule::PlannerParam & params) + const autoware::behavior_velocity_planner::CrosswalkModule::PlannerParam & params) { grid_map::GridMap grid_map; grid_map::GridMapRosConverter::fromOccupancyGrid(occupancy_grid, "layer", grid_map); @@ -170,4 +170,4 @@ double calculate_detection_range( const auto time_to_crosswalk = dist_ego_to_crosswalk / std::max(min_ego_velocity, ego_velocity); return time_to_crosswalk > 0.0 ? time_to_crosswalk / occluded_object_velocity : 20.0; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_crosswalk_module/src/occluded_crosswalk.hpp b/planning/behavior_velocity_crosswalk_module/src/occluded_crosswalk.hpp index 4aab9d3bfc888..c4f2c1a23c57e 100644 --- a/planning/behavior_velocity_crosswalk_module/src/occluded_crosswalk.hpp +++ b/planning/behavior_velocity_crosswalk_module/src/occluded_crosswalk.hpp @@ -29,7 +29,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { /// @brief check if the gridmap is occluded at the given index /// @param [in] grid_map input grid map @@ -40,7 +40,7 @@ namespace behavior_velocity_planner /// @return true if the index is occluded bool is_occluded( const grid_map::GridMap & grid_map, const int min_nb_of_cells, const grid_map::Index idx, - const behavior_velocity_planner::CrosswalkModule::PlannerParam & params); + const autoware::behavior_velocity_planner::CrosswalkModule::PlannerParam & params); /// @brief interpolate a point beyond the end of the given segment /// @param [in] segment input segment @@ -62,7 +62,7 @@ bool is_crosswalk_occluded( const nav_msgs::msg::OccupancyGrid & occupancy_grid, const geometry_msgs::msg::Point & path_intersection, const double detection_range, const std::vector & dynamic_objects, - const behavior_velocity_planner::CrosswalkModule::PlannerParam & params); + const autoware::behavior_velocity_planner::CrosswalkModule::PlannerParam & params); /// @brief calculate the distance away from the crosswalk that should be checked for occlusions /// @param occluded_objects_velocity assumed velocity of the objects coming out of occlusions @@ -89,6 +89,6 @@ std::vector select_and_inflate_o void clear_occlusions_behind_objects( grid_map::GridMap & grid_map, const std::vector & objects); -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // OCCLUDED_CROSSWALK_HPP_ diff --git a/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp b/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp index 191eea8feabed..91893c5224550 100644 --- a/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp +++ b/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp @@ -16,8 +16,8 @@ #include "occluded_crosswalk.hpp" -#include -#include +#include +#include #include #include #include @@ -38,7 +38,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; using motion_utils::calcArcLength; @@ -1281,4 +1281,4 @@ void CrosswalkModule::planStop( ego_path.points, planner_data_->current_odometry->pose, stop_factor->stop_pose, VelocityFactor::UNKNOWN); } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp b/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp index 107a904dd076b..13ecddafb6490 100644 --- a/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp +++ b/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp @@ -17,7 +17,7 @@ #include "behavior_velocity_crosswalk_module/util.hpp" -#include +#include #include #include #include @@ -46,7 +46,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; using autoware_perception_msgs::msg::ObjectClassification; @@ -459,6 +459,6 @@ class CrosswalkModule : public SceneModuleInterface std::optional current_initial_occlusion_time_; std::optional most_recent_occlusion_time_; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // SCENE_CROSSWALK_HPP_ diff --git a/planning/behavior_velocity_crosswalk_module/src/util.cpp b/planning/behavior_velocity_crosswalk_module/src/util.cpp index d276ae95e06b6..883b40b89730f 100644 --- a/planning/behavior_velocity_crosswalk_module/src/util.cpp +++ b/planning/behavior_velocity_crosswalk_module/src/util.cpp @@ -14,7 +14,7 @@ #include "behavior_velocity_crosswalk_module/util.hpp" -#include +#include #include #include #include @@ -45,7 +45,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; using motion_utils::calcSignedArcLength; @@ -62,16 +62,19 @@ std::vector> getCrosswalksOnPath( // Add current lane id const auto nearest_lane_id = - behavior_velocity_planner::planning_utils::getNearestLaneId(path, lanelet_map, current_pose); + autoware::behavior_velocity_planner::planning_utils::getNearestLaneId( + path, lanelet_map, current_pose); std::vector unique_lane_ids; if (nearest_lane_id) { // Add subsequent lane_ids from nearest lane_id - unique_lane_ids = behavior_velocity_planner::planning_utils::getSubsequentLaneIdsSetOnPath( - path, *nearest_lane_id); + unique_lane_ids = + autoware::behavior_velocity_planner::planning_utils::getSubsequentLaneIdsSetOnPath( + path, *nearest_lane_id); } else { // Add all lane_ids in path - unique_lane_ids = behavior_velocity_planner::planning_utils::getSortedLaneIdsFromPath(path); + unique_lane_ids = + autoware::behavior_velocity_planner::planning_utils::getSortedLaneIdsFromPath(path); } for (const auto lane_id : unique_lane_ids) { @@ -229,4 +232,4 @@ std::optional getStopLineFromMap( return stop_line.front(); } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_detection_area_module/package.xml b/planning/behavior_velocity_detection_area_module/package.xml index 6bcca43edc0cb..b2d370380829a 100644 --- a/planning/behavior_velocity_detection_area_module/package.xml +++ b/planning/behavior_velocity_detection_area_module/package.xml @@ -17,8 +17,8 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_velocity_planner_common autoware_planning_msgs - behavior_velocity_planner_common eigen geometry_msgs lanelet2_extension diff --git a/planning/behavior_velocity_detection_area_module/plugins.xml b/planning/behavior_velocity_detection_area_module/plugins.xml index 73497c8bfdf2a..9356c863ec26e 100644 --- a/planning/behavior_velocity_detection_area_module/plugins.xml +++ b/planning/behavior_velocity_detection_area_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_detection_area_module/src/debug.cpp b/planning/behavior_velocity_detection_area_module/src/debug.cpp index ee2af54e5ea2a..1ce982cd8df52 100644 --- a/planning/behavior_velocity_detection_area_module/src/debug.cpp +++ b/planning/behavior_velocity_detection_area_module/src/debug.cpp @@ -14,8 +14,8 @@ #include "scene.hpp" -#include -#include +#include +#include #include #include #include @@ -29,7 +29,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using std_msgs::msg::ColorRGBA; using tier4_autoware_utils::appendMarkerArray; @@ -191,4 +191,4 @@ motion_utils::VirtualWalls DetectionAreaModule::createVirtualWalls() return virtual_walls; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_detection_area_module/src/manager.cpp b/planning/behavior_velocity_detection_area_module/src/manager.cpp index feb5bf6bb50ef..336a1710ed593 100644 --- a/planning/behavior_velocity_detection_area_module/src/manager.cpp +++ b/planning/behavior_velocity_detection_area_module/src/manager.cpp @@ -14,7 +14,7 @@ #include "manager.hpp" -#include +#include #include #include @@ -28,7 +28,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using lanelet::autoware::DetectionArea; using tier4_autoware_utils::getOrDeclareParameter; @@ -84,8 +84,9 @@ DetectionAreaModuleManager::getModuleExpiredFunction( }; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_velocity_planner::DetectionAreaModulePlugin, behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::DetectionAreaModulePlugin, + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/behavior_velocity_detection_area_module/src/manager.hpp b/planning/behavior_velocity_detection_area_module/src/manager.hpp index 71cfa0a5eef96..64a76171814b9 100644 --- a/planning/behavior_velocity_detection_area_module/src/manager.hpp +++ b/planning/behavior_velocity_detection_area_module/src/manager.hpp @@ -17,9 +17,9 @@ #include "scene.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -27,7 +27,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class DetectionAreaModuleManager : public SceneModuleManagerInterfaceWithRTC { @@ -49,6 +49,6 @@ class DetectionAreaModulePlugin : public PluginWrapper -#include +#include +#include #include #ifdef ROS_DISTRO_GALACTIC #include @@ -30,7 +30,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; using motion_utils::calcLongitudinalOffsetPose; @@ -339,4 +339,4 @@ bool DetectionAreaModule::hasEnoughBrakingDistance( return arc_lane_utils::calcSignedDistance(self_pose, line_pose.position) > pass_judge_line_distance; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_detection_area_module/src/scene.hpp b/planning/behavior_velocity_detection_area_module/src/scene.hpp index f135c3b2660cb..f577cd92dea6e 100644 --- a/planning/behavior_velocity_detection_area_module/src/scene.hpp +++ b/planning/behavior_velocity_detection_area_module/src/scene.hpp @@ -23,15 +23,15 @@ #define EIGEN_MPL2_ONLY #include -#include -#include +#include +#include #include #include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using PathIndexWithPose = std::pair; // front index, pose using PathIndexWithPoint2d = std::pair; // front index, point2d @@ -101,6 +101,6 @@ class DetectionAreaModule : public SceneModuleInterface // Debug DebugData debug_data_; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // SCENE_HPP_ diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/package.xml b/planning/behavior_velocity_dynamic_obstacle_stop_module/package.xml index 84d01d04a09a4..6b9db657d6d8e 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/package.xml +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/package.xml @@ -12,9 +12,9 @@ ament_cmake_auto autoware_cmake + autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs - behavior_velocity_planner_common geometry_msgs libboost-dev motion_utils diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/plugins.xml b/planning/behavior_velocity_dynamic_obstacle_stop_module/plugins.xml index 2f5662c7998ac..ba2d2ba61ad50 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/plugins.xml +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/collision.cpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/collision.cpp index 8497369917232..10843fd3aef2b 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/collision.cpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/collision.cpp @@ -24,7 +24,7 @@ #include #include -namespace behavior_velocity_planner::dynamic_obstacle_stop +namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop { std::optional find_closest_collision_point( @@ -80,4 +80,4 @@ std::vector find_collisions( return collisions; } -} // namespace behavior_velocity_planner::dynamic_obstacle_stop +} // namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/collision.hpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/collision.hpp index 27a48afa032b1..8431221a27d6b 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/collision.hpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/collision.hpp @@ -20,7 +20,7 @@ #include #include -namespace behavior_velocity_planner::dynamic_obstacle_stop +namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop { /// @brief find the collision point closest to ego along an object footprint /// @param [in] ego_data ego data including its path and footprints used for finding a collision @@ -41,6 +41,6 @@ std::vector find_collisions( const std::vector & objects, const tier4_autoware_utils::MultiPolygon2d & obstacle_forward_footprints); -} // namespace behavior_velocity_planner::dynamic_obstacle_stop +} // namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop #endif // COLLISION_HPP_ diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/debug.cpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/debug.cpp index 367a1c2be1d5a..5a457d651cd9e 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/debug.cpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/debug.cpp @@ -23,7 +23,7 @@ #include #include -namespace behavior_velocity_planner::dynamic_obstacle_stop::debug +namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop::debug { std::vector make_delete_markers( @@ -110,4 +110,4 @@ std::vector make_polygon_markers( } return markers; } -} // namespace behavior_velocity_planner::dynamic_obstacle_stop::debug +} // namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop::debug diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/debug.hpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/debug.hpp index 7397f63ca079c..c567948927089 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/debug.hpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/debug.hpp @@ -28,7 +28,7 @@ #include #include -namespace behavior_velocity_planner::dynamic_obstacle_stop::debug +namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop::debug { std::vector make_delete_markers( const size_t from, const size_t to, const std::string & ns); @@ -40,6 +40,6 @@ std::vector make_collision_markers( const rclcpp::Time & now); std::vector make_polygon_markers( const tier4_autoware_utils::MultiPolygon2d & footprints, const std::string & ns, const double z); -} // namespace behavior_velocity_planner::dynamic_obstacle_stop::debug +} // namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop::debug #endif // DEBUG_HPP_ diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/footprint.cpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/footprint.cpp index a58e4e9b88c75..5f005348c4cea 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/footprint.cpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/footprint.cpp @@ -26,7 +26,7 @@ #include #include -namespace behavior_velocity_planner::dynamic_obstacle_stop +namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop { tier4_autoware_utils::MultiPolygon2d make_forward_footprints( const std::vector & obstacles, @@ -81,4 +81,4 @@ void make_ego_footprint_rtree(EgoData & ego_data, const PlannerParam & params) } } -} // namespace behavior_velocity_planner::dynamic_obstacle_stop +} // namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/footprint.hpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/footprint.hpp index 0050a4e2c9259..c75d7bb9cc49e 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/footprint.hpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/footprint.hpp @@ -21,7 +21,7 @@ #include -namespace behavior_velocity_planner::dynamic_obstacle_stop +namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop { /// @brief create the footprint of the given obstacles and their projection over a fixed time /// horizon @@ -50,6 +50,6 @@ tier4_autoware_utils::Polygon2d project_to_pose( /// @param [inout] ego_data ego data with its path and the rtree to populate /// @param [in] params parameters void make_ego_footprint_rtree(EgoData & ego_data, const PlannerParam & params); -} // namespace behavior_velocity_planner::dynamic_obstacle_stop +} // namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop #endif // FOOTPRINT_HPP_ diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/manager.cpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/manager.cpp index 63f1f3025f94a..ddb8c842fb92d 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/manager.cpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/manager.cpp @@ -20,7 +20,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_autoware_utils::getOrDeclareParameter; @@ -68,9 +68,9 @@ DynamicObstacleStopModuleManager::getModuleExpiredFunction( return false; }; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_velocity_planner::DynamicObstacleStopModulePlugin, - behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::DynamicObstacleStopModulePlugin, + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/manager.hpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/manager.hpp index eb7bf4c6dbc98..d5c403e26792c 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/manager.hpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/manager.hpp @@ -17,9 +17,9 @@ #include "scene_dynamic_obstacle_stop.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -28,7 +28,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class DynamicObstacleStopModuleManager : public SceneModuleManagerInterface { @@ -53,6 +53,6 @@ class DynamicObstacleStopModulePlugin : public PluginWrapper #include -namespace behavior_velocity_planner::dynamic_obstacle_stop +namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop { /// @brief filter the given predicted objects @@ -91,4 +91,4 @@ std::vector filter_predicted_obj } return filtered_objects; } -} // namespace behavior_velocity_planner::dynamic_obstacle_stop +} // namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/object_filtering.hpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/object_filtering.hpp index 5daa0cda44203..71da351d2f10b 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/object_filtering.hpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/object_filtering.hpp @@ -21,7 +21,7 @@ #include -namespace behavior_velocity_planner::dynamic_obstacle_stop +namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop { /// @brief filter the given predicted objects @@ -34,6 +34,6 @@ std::vector filter_predicted_obj const autoware_perception_msgs::msg::PredictedObjects & objects, const EgoData & ego_data, const PlannerParam & params, const double hysteresis); -} // namespace behavior_velocity_planner::dynamic_obstacle_stop +} // namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop #endif // OBJECT_FILTERING_HPP_ diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/object_stop_decision.cpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/object_stop_decision.cpp index 1df8a1ed6a4a3..0f6fdbfadbf86 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/object_stop_decision.cpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/object_stop_decision.cpp @@ -18,7 +18,7 @@ #include -namespace behavior_velocity_planner::dynamic_obstacle_stop +namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop { void update_object_map( ObjectStopDecisionMap & object_map, const std::vector & collisions, @@ -66,4 +66,4 @@ std::optional find_earliest_collision( return earliest_collision; } -} // namespace behavior_velocity_planner::dynamic_obstacle_stop +} // namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/object_stop_decision.hpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/object_stop_decision.hpp index 5756c8589fb73..cc13614e80782 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/object_stop_decision.hpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/object_stop_decision.hpp @@ -24,7 +24,7 @@ #include #include -namespace behavior_velocity_planner::dynamic_obstacle_stop +namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop { /// @brief representation of a decision to stop for a dynamic object struct ObjectStopDecision @@ -71,6 +71,6 @@ void update_object_map( std::optional find_earliest_collision( const ObjectStopDecisionMap & object_map, const EgoData & ego_data); -} // namespace behavior_velocity_planner::dynamic_obstacle_stop +} // namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop #endif // OBJECT_STOP_DECISION_HPP_ diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/scene_dynamic_obstacle_stop.cpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/scene_dynamic_obstacle_stop.cpp index 11ec540e3980f..9c5eced187aa8 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/scene_dynamic_obstacle_stop.cpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/scene_dynamic_obstacle_stop.cpp @@ -21,8 +21,8 @@ #include "object_stop_decision.hpp" #include "types.hpp" -#include -#include +#include +#include #include #include #include @@ -33,7 +33,7 @@ #include #include -namespace behavior_velocity_planner::dynamic_obstacle_stop +namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop { using visualization_msgs::msg::Marker; @@ -163,4 +163,4 @@ motion_utils::VirtualWalls DynamicObstacleStopModule::createVirtualWalls() return virtual_walls; } -} // namespace behavior_velocity_planner::dynamic_obstacle_stop +} // namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/scene_dynamic_obstacle_stop.hpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/scene_dynamic_obstacle_stop.hpp index 79911c40a195d..8018412ba2b4b 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/scene_dynamic_obstacle_stop.hpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/scene_dynamic_obstacle_stop.hpp @@ -18,7 +18,7 @@ #include "object_stop_decision.hpp" #include "types.hpp" -#include +#include #include #include @@ -30,7 +30,7 @@ #include #include -namespace behavior_velocity_planner::dynamic_obstacle_stop +namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop { class DynamicObstacleStopModule : public SceneModuleInterface { @@ -57,6 +57,6 @@ class DynamicObstacleStopModule : public SceneModuleInterface // Debug mutable DebugData debug_data_; }; -} // namespace behavior_velocity_planner::dynamic_obstacle_stop +} // namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop #endif // SCENE_DYNAMIC_OBSTACLE_STOP_HPP_ diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/types.hpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/types.hpp index 532d770608dd3..32ef89413b2f8 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/types.hpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/types.hpp @@ -29,7 +29,7 @@ #include #include -namespace behavior_velocity_planner::dynamic_obstacle_stop +namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop { using BoxIndexPair = std::pair; using Rtree = boost::geometry::index::rtree>; @@ -84,6 +84,6 @@ struct Collision geometry_msgs::msg::Point point; std::string object_uuid; }; -} // namespace behavior_velocity_planner::dynamic_obstacle_stop +} // namespace autoware::behavior_velocity_planner::dynamic_obstacle_stop #endif // TYPES_HPP_ diff --git a/planning/behavior_velocity_no_drivable_lane_module/package.xml b/planning/behavior_velocity_no_drivable_lane_module/package.xml index 79eea68142cc8..4c3d6dbf78153 100644 --- a/planning/behavior_velocity_no_drivable_lane_module/package.xml +++ b/planning/behavior_velocity_no_drivable_lane_module/package.xml @@ -19,8 +19,8 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_velocity_planner_common autoware_planning_msgs - behavior_velocity_planner_common eigen geometry_msgs lanelet2_extension diff --git a/planning/behavior_velocity_no_drivable_lane_module/plugins.xml b/planning/behavior_velocity_no_drivable_lane_module/plugins.xml index 33b0d5d6e7469..e3e9efb254fba 100644 --- a/planning/behavior_velocity_no_drivable_lane_module/plugins.xml +++ b/planning/behavior_velocity_no_drivable_lane_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_no_drivable_lane_module/src/debug.cpp b/planning/behavior_velocity_no_drivable_lane_module/src/debug.cpp index 0c6bb747a854b..0908fe712dbf5 100644 --- a/planning/behavior_velocity_no_drivable_lane_module/src/debug.cpp +++ b/planning/behavior_velocity_no_drivable_lane_module/src/debug.cpp @@ -14,14 +14,14 @@ #include "scene.hpp" -#include +#include #include #include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_autoware_utils::appendMarkerArray; using tier4_autoware_utils::createDefaultMarker; @@ -102,4 +102,4 @@ visualization_msgs::msg::MarkerArray NoDrivableLaneModule::createDebugMarkerArra return debug_marker_array; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_no_drivable_lane_module/src/manager.cpp b/planning/behavior_velocity_no_drivable_lane_module/src/manager.cpp index 0b7a8a8c28dd5..8c3fc5ef0f3ce 100644 --- a/planning/behavior_velocity_no_drivable_lane_module/src/manager.cpp +++ b/planning/behavior_velocity_no_drivable_lane_module/src/manager.cpp @@ -14,12 +14,12 @@ #include "manager.hpp" -#include +#include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_autoware_utils::getOrDeclareParameter; @@ -66,8 +66,9 @@ NoDrivableLaneModuleManager::getModuleExpiredFunction( }; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_velocity_planner::NoDrivableLaneModulePlugin, behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::NoDrivableLaneModulePlugin, + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/behavior_velocity_no_drivable_lane_module/src/manager.hpp b/planning/behavior_velocity_no_drivable_lane_module/src/manager.hpp index 90455bd4b1c62..4afa498a5679b 100644 --- a/planning/behavior_velocity_no_drivable_lane_module/src/manager.hpp +++ b/planning/behavior_velocity_no_drivable_lane_module/src/manager.hpp @@ -17,9 +17,9 @@ #include "scene.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -27,7 +27,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class NoDrivableLaneModuleManager : public SceneModuleManagerInterface { @@ -49,6 +49,6 @@ class NoDrivableLaneModulePlugin : public PluginWrapper +#include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_autoware_utils::createPoint; @@ -283,4 +283,4 @@ void NoDrivableLaneModule::initialize_debug_data( } } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_no_drivable_lane_module/src/scene.hpp b/planning/behavior_velocity_no_drivable_lane_module/src/scene.hpp index fb90e023fedcd..6910e972a8685 100644 --- a/planning/behavior_velocity_no_drivable_lane_module/src/scene.hpp +++ b/planning/behavior_velocity_no_drivable_lane_module/src/scene.hpp @@ -17,14 +17,14 @@ #include "util.hpp" -#include +#include #include #include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_planning_msgs::msg::PathWithLaneId; @@ -85,6 +85,6 @@ class NoDrivableLaneModule : public SceneModuleInterface void initialize_debug_data( const lanelet::Lanelet & no_drivable_lane, const geometry_msgs::msg::Point & ego_pos); }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // SCENE_HPP_ diff --git a/planning/behavior_velocity_no_drivable_lane_module/src/util.cpp b/planning/behavior_velocity_no_drivable_lane_module/src/util.cpp index 4c5efad94dfc8..c9a6ce1ac1510 100644 --- a/planning/behavior_velocity_no_drivable_lane_module/src/util.cpp +++ b/planning/behavior_velocity_no_drivable_lane_module/src/util.cpp @@ -17,14 +17,14 @@ #include "motion_utils/trajectory/path_with_lane_id.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include +#include #include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -110,4 +110,4 @@ PathWithNoDrivableLanePolygonIntersection getPathIntersectionWithNoDrivableLaneP } return path_no_drivable_lane_polygon_intersection; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_no_drivable_lane_module/src/util.hpp b/planning/behavior_velocity_no_drivable_lane_module/src/util.hpp index 11953fd5dd177..289b04a2ce96d 100644 --- a/planning/behavior_velocity_no_drivable_lane_module/src/util.hpp +++ b/planning/behavior_velocity_no_drivable_lane_module/src/util.hpp @@ -28,7 +28,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -51,6 +51,6 @@ PathWithNoDrivableLanePolygonIntersection getPathIntersectionWithNoDrivableLaneP const PathWithLaneId & ego_path, const lanelet::BasicPolygon2d & polygon, const geometry_msgs::msg::Point & ego_pos, const size_t max_num); -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // UTIL_HPP_ diff --git a/planning/behavior_velocity_no_stopping_area_module/package.xml b/planning/behavior_velocity_no_stopping_area_module/package.xml index 0991b37120a6f..baa51d6681490 100644 --- a/planning/behavior_velocity_no_stopping_area_module/package.xml +++ b/planning/behavior_velocity_no_stopping_area_module/package.xml @@ -17,9 +17,9 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs - behavior_velocity_planner_common eigen geometry_msgs interpolation diff --git a/planning/behavior_velocity_no_stopping_area_module/plugins.xml b/planning/behavior_velocity_no_stopping_area_module/plugins.xml index a9b07297cfa30..23d2a800c3cf5 100644 --- a/planning/behavior_velocity_no_stopping_area_module/plugins.xml +++ b/planning/behavior_velocity_no_stopping_area_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_no_stopping_area_module/src/debug.cpp b/planning/behavior_velocity_no_stopping_area_module/src/debug.cpp index 9e51afca2d475..e90273d4ac5e4 100644 --- a/planning/behavior_velocity_no_stopping_area_module/src/debug.cpp +++ b/planning/behavior_velocity_no_stopping_area_module/src/debug.cpp @@ -14,8 +14,8 @@ #include "scene_no_stopping_area.hpp" -#include -#include +#include +#include #include #include #include @@ -28,7 +28,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace { @@ -175,4 +175,4 @@ motion_utils::VirtualWalls NoStoppingAreaModule::createVirtualWalls() } return virtual_walls; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_no_stopping_area_module/src/manager.cpp b/planning/behavior_velocity_no_stopping_area_module/src/manager.cpp index faa265afe1559..6aeac1e9d8dd3 100644 --- a/planning/behavior_velocity_no_stopping_area_module/src/manager.cpp +++ b/planning/behavior_velocity_no_stopping_area_module/src/manager.cpp @@ -14,7 +14,7 @@ #include "manager.hpp" -#include +#include #include #include @@ -28,7 +28,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using lanelet::autoware::NoStoppingArea; using tier4_autoware_utils::getOrDeclareParameter; @@ -86,8 +86,9 @@ NoStoppingAreaModuleManager::getModuleExpiredFunction( }; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_velocity_planner::NoStoppingAreaModulePlugin, behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::NoStoppingAreaModulePlugin, + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/behavior_velocity_no_stopping_area_module/src/manager.hpp b/planning/behavior_velocity_no_stopping_area_module/src/manager.hpp index baf5901ccc124..696115d4bda6d 100644 --- a/planning/behavior_velocity_no_stopping_area_module/src/manager.hpp +++ b/planning/behavior_velocity_no_stopping_area_module/src/manager.hpp @@ -17,9 +17,9 @@ #include "scene_no_stopping_area.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -27,7 +27,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class NoStoppingAreaModuleManager : public SceneModuleManagerInterfaceWithRTC { @@ -49,6 +49,6 @@ class NoStoppingAreaModulePlugin : public PluginWrapper -#include -#include +#include +#include +#include #include #include #include @@ -36,7 +36,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -416,4 +416,4 @@ void NoStoppingAreaModule::insertStopPoint( // Insert stop point or replace with zero velocity planning_utils::insertVelocity(path, stop_point_with_lane_id, 0.0, insert_idx); } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.hpp b/planning/behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.hpp index 62ec0b88b328e..e7e66775f368e 100644 --- a/planning/behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.hpp +++ b/planning/behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.hpp @@ -18,9 +18,9 @@ #define EIGEN_MPL2_ONLY #include -#include -#include -#include +#include +#include +#include #include #include @@ -38,7 +38,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using PathIndexWithPose = std::pair; // front index, pose using PathIndexWithPoint2d = std::pair; // front index, point2d @@ -172,6 +172,6 @@ class NoStoppingAreaModule : public SceneModuleInterface // Debug DebugData debug_data_; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // SCENE_NO_STOPPING_AREA_HPP_ diff --git a/planning/behavior_velocity_occlusion_spot_module/package.xml b/planning/behavior_velocity_occlusion_spot_module/package.xml index 5817c2203cc5d..ceddd48b045a0 100644 --- a/planning/behavior_velocity_occlusion_spot_module/package.xml +++ b/planning/behavior_velocity_occlusion_spot_module/package.xml @@ -16,9 +16,9 @@ ament_cmake_auto autoware_cmake + autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs - behavior_velocity_planner_common geometry_msgs grid_map_ros grid_map_utils diff --git a/planning/behavior_velocity_occlusion_spot_module/plugins.xml b/planning/behavior_velocity_occlusion_spot_module/plugins.xml index a38900d1a893b..2d85752cf2b3d 100644 --- a/planning/behavior_velocity_occlusion_spot_module/plugins.xml +++ b/planning/behavior_velocity_occlusion_spot_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_occlusion_spot_module/src/debug.cpp b/planning/behavior_velocity_occlusion_spot_module/src/debug.cpp index 1170afc490a75..40e5b8f91e6b9 100644 --- a/planning/behavior_velocity_occlusion_spot_module/src/debug.cpp +++ b/planning/behavior_velocity_occlusion_spot_module/src/debug.cpp @@ -15,8 +15,8 @@ #include "occlusion_spot_utils.hpp" #include "scene_occlusion_spot.hpp" -#include -#include +#include +#include #include #include @@ -24,7 +24,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace { @@ -227,4 +227,4 @@ motion_utils::VirtualWalls OcclusionSpotModule::createVirtualWalls() } return virtual_walls; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_occlusion_spot_module/src/grid_utils.cpp b/planning/behavior_velocity_occlusion_spot_module/src/grid_utils.cpp index c8adb324b9055..427a6f27be3c4 100644 --- a/planning/behavior_velocity_occlusion_spot_module/src/grid_utils.cpp +++ b/planning/behavior_velocity_occlusion_spot_module/src/grid_utils.cpp @@ -20,7 +20,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace grid_utils { @@ -381,4 +381,4 @@ void denoiseOccupancyGridCV( grid_map::GridMapRosConverter::fromOccupancyGrid(occupancy_grid, "layer", grid_map); } } // namespace grid_utils -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_occlusion_spot_module/src/grid_utils.hpp b/planning/behavior_velocity_occlusion_spot_module/src/grid_utils.hpp index 710f671df609f..5c8d77fc831df 100644 --- a/planning/behavior_velocity_occlusion_spot_module/src/grid_utils.hpp +++ b/planning/behavior_velocity_occlusion_spot_module/src/grid_utils.hpp @@ -15,8 +15,8 @@ #ifndef GRID_UTILS_HPP_ #define GRID_UTILS_HPP_ -#include -#include +#include +#include #include #include #include @@ -49,7 +49,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using geometry_msgs::msg::Pose; using geometry_msgs::msg::PoseStamped; @@ -118,6 +118,6 @@ void denoiseOccupancyGridCV( grid_map::GridMap & grid_map, const GridParam & param, const bool is_show_debug_window, const int num_iter, const bool use_object_footprints, const bool use_object_ray_casts); } // namespace grid_utils -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // GRID_UTILS_HPP_ diff --git a/planning/behavior_velocity_occlusion_spot_module/src/manager.cpp b/planning/behavior_velocity_occlusion_spot_module/src/manager.cpp index 64adc112aab2f..b1757c4142212 100644 --- a/planning/behavior_velocity_occlusion_spot_module/src/manager.cpp +++ b/planning/behavior_velocity_occlusion_spot_module/src/manager.cpp @@ -16,7 +16,7 @@ #include "scene_occlusion_spot.hpp" -#include +#include #include #include @@ -25,7 +25,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using occlusion_spot_utils::DETECTION_METHOD; using occlusion_spot_utils::PASS_JUDGE; @@ -136,8 +136,9 @@ OcclusionSpotModuleManager::getModuleExpiredFunction( return false; }; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_velocity_planner::OcclusionSpotModulePlugin, behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::OcclusionSpotModulePlugin, + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/behavior_velocity_occlusion_spot_module/src/manager.hpp b/planning/behavior_velocity_occlusion_spot_module/src/manager.hpp index 0955e4ae9aab5..123d0ef32afc1 100644 --- a/planning/behavior_velocity_occlusion_spot_module/src/manager.hpp +++ b/planning/behavior_velocity_occlusion_spot_module/src/manager.hpp @@ -18,9 +18,9 @@ #include "occlusion_spot_utils.hpp" #include "scene_occlusion_spot.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -37,7 +37,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class OcclusionSpotModuleManager : public SceneModuleManagerInterface { @@ -63,6 +63,6 @@ class OcclusionSpotModulePlugin : public PluginWrapper -#include +#include +#include #include #include #include @@ -33,7 +33,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; namespace occlusion_spot_utils @@ -485,4 +485,4 @@ std::optional generateOneNotableCollisionFromOcclusionSpo } } // namespace occlusion_spot_utils -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_occlusion_spot_module/src/occlusion_spot_utils.hpp b/planning/behavior_velocity_occlusion_spot_module/src/occlusion_spot_utils.hpp index 2b6d89680cd37..542c869919339 100644 --- a/planning/behavior_velocity_occlusion_spot_module/src/occlusion_spot_utils.hpp +++ b/planning/behavior_velocity_occlusion_spot_module/src/occlusion_spot_utils.hpp @@ -17,7 +17,7 @@ #include "grid_utils.hpp" -#include +#include #include #include #include @@ -46,7 +46,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using autoware_perception_msgs::msg::ObjectClassification; using autoware_perception_msgs::msg::PredictedObject; @@ -246,6 +246,6 @@ bool generatePossibleCollisionsFromGridMap( DebugData & debug_data); } // namespace occlusion_spot_utils -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // OCCLUSION_SPOT_UTILS_HPP_ diff --git a/planning/behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.cpp b/planning/behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.cpp index 96f497ca47afa..9fe06273ea617 100644 --- a/planning/behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.cpp +++ b/planning/behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.cpp @@ -16,12 +16,12 @@ #include "occlusion_spot_utils.hpp" -#include +#include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace occlusion_spot_utils { @@ -98,4 +98,4 @@ SafeMotion calculateSafeMotion(const Velocity & v, const double ttv) return sm; } } // namespace occlusion_spot_utils -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.hpp b/planning/behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.hpp index 8d7e9d2fdedd5..9def3b0938998 100644 --- a/planning/behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.hpp +++ b/planning/behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.hpp @@ -22,7 +22,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace occlusion_spot_utils { @@ -38,6 +38,6 @@ void applySafeVelocityConsideringPossibleCollision( SafeMotion calculateSafeMotion(const Velocity & v, const double ttv); } // namespace occlusion_spot_utils -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // RISK_PREDICTIVE_BRAKING_HPP_ diff --git a/planning/behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.cpp b/planning/behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.cpp index 1f5ca1bab904e..e5c5eaec346ff 100644 --- a/planning/behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.cpp +++ b/planning/behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.cpp @@ -17,10 +17,10 @@ #include "occlusion_spot_utils.hpp" #include "risk_predictive_braking.hpp" -#include -#include -#include -#include +#include +#include +#include +#include #include #include @@ -41,7 +41,7 @@ namespace { -namespace utils = behavior_velocity_planner::occlusion_spot_utils; +namespace utils = autoware::behavior_velocity_planner::occlusion_spot_utils; using autoware_perception_msgs::msg::PredictedObject; std::vector extractStuckVehicle( const std::vector & vehicles, const double stop_velocity) @@ -56,7 +56,7 @@ std::vector extractStuckVehicle( } } // namespace -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace utils = occlusion_spot_utils; @@ -201,4 +201,4 @@ bool OcclusionSpotModule::modifyPathVelocity( return true; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.hpp b/planning/behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.hpp index b7da7c073cbd9..00126a2ebc39a 100644 --- a/planning/behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.hpp +++ b/planning/behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.hpp @@ -17,8 +17,8 @@ #include "occlusion_spot_utils.hpp" -#include -#include +#include +#include #include #include @@ -37,7 +37,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class OcclusionSpotModule : public SceneModuleInterface { @@ -70,6 +70,6 @@ class OcclusionSpotModule : public SceneModuleInterface // Debug mutable DebugData debug_data_; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // SCENE_OCCLUSION_SPOT_HPP_ diff --git a/planning/behavior_velocity_occlusion_spot_module/test/src/test_grid_utils.cpp b/planning/behavior_velocity_occlusion_spot_module/test/src/test_grid_utils.cpp index bc526959386e9..a21e0333082a9 100644 --- a/planning/behavior_velocity_occlusion_spot_module/test/src/test_grid_utils.cpp +++ b/planning/behavior_velocity_occlusion_spot_module/test/src/test_grid_utils.cpp @@ -15,7 +15,7 @@ #include "grid_utils.hpp" #include "utils.hpp" -#include +#include #include #include @@ -38,11 +38,11 @@ struct indexEq } }; -using behavior_velocity_planner::LineString2d; -using behavior_velocity_planner::Point2d; -using behavior_velocity_planner::Polygon2d; -using behavior_velocity_planner::grid_utils::occlusion_cost_value::OCCUPIED; -using behavior_velocity_planner::grid_utils::occlusion_cost_value::UNKNOWN; +using autoware::behavior_velocity_planner::LineString2d; +using autoware::behavior_velocity_planner::Point2d; +using autoware::behavior_velocity_planner::Polygon2d; +using autoware::behavior_velocity_planner::grid_utils::occlusion_cost_value::OCCUPIED; +using autoware::behavior_velocity_planner::grid_utils::occlusion_cost_value::UNKNOWN; namespace bg = boost::geometry; Polygon2d pointsToPoly(const Point2d p0, const Point2d p1, const double radius) diff --git a/planning/behavior_velocity_occlusion_spot_module/test/src/test_occlusion_spot_utils.cpp b/planning/behavior_velocity_occlusion_spot_module/test/src/test_occlusion_spot_utils.cpp index 05e73855f2642..60ef5d62a5b7b 100644 --- a/planning/behavior_velocity_occlusion_spot_module/test/src/test_occlusion_spot_utils.cpp +++ b/planning/behavior_velocity_occlusion_spot_module/test/src/test_occlusion_spot_utils.cpp @@ -16,8 +16,8 @@ #include "occlusion_spot_utils.hpp" #include "utils.hpp" -#include -#include +#include +#include #include "geometry_msgs/msg/point.hpp" #include "geometry_msgs/msg/vector3.hpp" @@ -32,8 +32,9 @@ using tier4_planning_msgs::msg::PathWithLaneId; TEST(calcSlowDownPointsForPossibleCollision, TooManyPossibleCollisions) { - using behavior_velocity_planner::occlusion_spot_utils::calcSlowDownPointsForPossibleCollision; - using behavior_velocity_planner::occlusion_spot_utils::PossibleCollisionInfo; + using autoware::behavior_velocity_planner::occlusion_spot_utils:: + calcSlowDownPointsForPossibleCollision; + using autoware::behavior_velocity_planner::occlusion_spot_utils::PossibleCollisionInfo; using std::chrono::duration; using std::chrono::duration_cast; using std::chrono::high_resolution_clock; @@ -65,8 +66,9 @@ TEST(calcSlowDownPointsForPossibleCollision, TooManyPossibleCollisions) TEST(calcSlowDownPointsForPossibleCollision, ConsiderSignedOffset) { - using behavior_velocity_planner::occlusion_spot_utils::calcSlowDownPointsForPossibleCollision; - using behavior_velocity_planner::occlusion_spot_utils::PossibleCollisionInfo; + using autoware::behavior_velocity_planner::occlusion_spot_utils:: + calcSlowDownPointsForPossibleCollision; + using autoware::behavior_velocity_planner::occlusion_spot_utils::PossibleCollisionInfo; using std::chrono::duration; using std::chrono::duration_cast; using std::chrono::high_resolution_clock; diff --git a/planning/behavior_velocity_occlusion_spot_module/test/src/test_risk_predictive_braking.cpp b/planning/behavior_velocity_occlusion_spot_module/test/src/test_risk_predictive_braking.cpp index 9b1d92b71a111..4a0071be10b2d 100644 --- a/planning/behavior_velocity_occlusion_spot_module/test/src/test_risk_predictive_braking.cpp +++ b/planning/behavior_velocity_occlusion_spot_module/test/src/test_risk_predictive_braking.cpp @@ -23,7 +23,7 @@ TEST(safeMotion, delay_jerk_acceleration) { - namespace utils = behavior_velocity_planner::occlusion_spot_utils; + namespace utils = autoware::behavior_velocity_planner::occlusion_spot_utils; using utils::calculateSafeMotion; /** * @brief check if calculation is correct in below parameter diff --git a/planning/behavior_velocity_occlusion_spot_module/test/src/utils.hpp b/planning/behavior_velocity_occlusion_spot_module/test/src/utils.hpp index f7bb3d4b1ad6f..4b8a7ae3b2f3f 100644 --- a/planning/behavior_velocity_occlusion_spot_module/test/src/utils.hpp +++ b/planning/behavior_velocity_occlusion_spot_module/test/src/utils.hpp @@ -49,17 +49,18 @@ inline grid_map::GridMap generateGrid(int w, int h, double res) grid_map::GridMap grid{}; grid_map::Length length(w * res, h * res); grid.setGeometry(length, res, grid_map::Position(length.x() / 2.0, length.y() / 2.0)); - grid.add("layer", behavior_velocity_planner::grid_utils::occlusion_cost_value::FREE_SPACE); + grid.add( + "layer", autoware::behavior_velocity_planner::grid_utils::occlusion_cost_value::FREE_SPACE); return grid; } -using behavior_velocity_planner::occlusion_spot_utils::PossibleCollisionInfo; +using autoware::behavior_velocity_planner::occlusion_spot_utils::PossibleCollisionInfo; inline void generatePossibleCollisions( std::vector & possible_collisions, double x0, double y0, double x, double y, int nb_cols) { - using behavior_velocity_planner::occlusion_spot_utils::ObstacleInfo; - using behavior_velocity_planner::occlusion_spot_utils::PossibleCollisionInfo; + using autoware::behavior_velocity_planner::occlusion_spot_utils::ObstacleInfo; + using autoware::behavior_velocity_planner::occlusion_spot_utils::PossibleCollisionInfo; const double lon = 0.0; // assume col_x = intersection_x const double lat = -1.0; const double velocity = 1.0; diff --git a/planning/behavior_velocity_out_of_lane_module/package.xml b/planning/behavior_velocity_out_of_lane_module/package.xml index d3742ea7d305f..6ea60dd1398f5 100644 --- a/planning/behavior_velocity_out_of_lane_module/package.xml +++ b/planning/behavior_velocity_out_of_lane_module/package.xml @@ -14,9 +14,9 @@ ament_cmake_auto autoware_cmake + autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs - behavior_velocity_planner_common geometry_msgs lanelet2_extension libboost-dev diff --git a/planning/behavior_velocity_out_of_lane_module/plugins.xml b/planning/behavior_velocity_out_of_lane_module/plugins.xml index 8c18fdce79480..f85eb50367ccc 100644 --- a/planning/behavior_velocity_out_of_lane_module/plugins.xml +++ b/planning/behavior_velocity_out_of_lane_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_out_of_lane_module/src/calculate_slowdown_points.hpp b/planning/behavior_velocity_out_of_lane_module/src/calculate_slowdown_points.hpp index 0c9e6448bb374..5e3877753d203 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/calculate_slowdown_points.hpp +++ b/planning/behavior_velocity_out_of_lane_module/src/calculate_slowdown_points.hpp @@ -26,7 +26,7 @@ #include #include -namespace behavior_velocity_planner::out_of_lane +namespace autoware::behavior_velocity_planner::out_of_lane { /// @brief estimate whether ego can decelerate without breaking the deceleration limit @@ -102,5 +102,5 @@ std::optional calculate_slowdown_point( } return std::nullopt; } -} // namespace behavior_velocity_planner::out_of_lane +} // namespace autoware::behavior_velocity_planner::out_of_lane #endif // CALCULATE_SLOWDOWN_POINTS_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/debug.cpp b/planning/behavior_velocity_out_of_lane_module/src/debug.cpp index 862ca351a118a..08e66f99e2a0c 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/debug.cpp +++ b/planning/behavior_velocity_out_of_lane_module/src/debug.cpp @@ -18,7 +18,7 @@ #include -namespace behavior_velocity_planner::out_of_lane::debug +namespace autoware::behavior_velocity_planner::out_of_lane::debug { namespace { @@ -184,4 +184,4 @@ void add_range_markers( debug_marker_array.markers.push_back(debug_marker); } -} // namespace behavior_velocity_planner::out_of_lane::debug +} // namespace autoware::behavior_velocity_planner::out_of_lane::debug diff --git a/planning/behavior_velocity_out_of_lane_module/src/debug.hpp b/planning/behavior_velocity_out_of_lane_module/src/debug.hpp index 0802ae78d7a26..05eed6b35c13c 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/debug.hpp +++ b/planning/behavior_velocity_out_of_lane_module/src/debug.hpp @@ -23,7 +23,7 @@ #include -namespace behavior_velocity_planner::out_of_lane::debug +namespace autoware::behavior_velocity_planner::out_of_lane::debug { /// @brief add footprint markers to the given marker array /// @param [inout] debug_marker_array marker array @@ -64,6 +64,6 @@ void add_range_markers( visualization_msgs::msg::MarkerArray & debug_marker_array, const OverlapRanges & ranges, const tier4_planning_msgs::msg::PathWithLaneId & path, const size_t first_path_idx, const double z, const size_t prev_nb); -} // namespace behavior_velocity_planner::out_of_lane::debug +} // namespace autoware::behavior_velocity_planner::out_of_lane::debug #endif // DEBUG_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/decisions.cpp b/planning/behavior_velocity_out_of_lane_module/src/decisions.cpp index 126c75c2f80b9..62416c8d38ed6 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/decisions.cpp +++ b/planning/behavior_velocity_out_of_lane_module/src/decisions.cpp @@ -29,7 +29,7 @@ #include #include #include -namespace behavior_velocity_planner::out_of_lane +namespace autoware::behavior_velocity_planner::out_of_lane { double distance_along_path(const EgoData & ego_data, const size_t target_idx) { @@ -380,4 +380,4 @@ std::vector calculate_decisions( return decisions; } -} // namespace behavior_velocity_planner::out_of_lane +} // namespace autoware::behavior_velocity_planner::out_of_lane diff --git a/planning/behavior_velocity_out_of_lane_module/src/decisions.hpp b/planning/behavior_velocity_out_of_lane_module/src/decisions.hpp index 4f2b0a6dad89b..27c5b00c96b3f 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/decisions.hpp +++ b/planning/behavior_velocity_out_of_lane_module/src/decisions.hpp @@ -29,7 +29,7 @@ #include #include -namespace behavior_velocity_planner::out_of_lane +namespace autoware::behavior_velocity_planner::out_of_lane { /// @brief calculate the distance along the ego path between ego and some target path index /// @param [in] ego_data data related to the ego vehicle @@ -110,6 +110,6 @@ std::optional calculate_decision( /// @return return the calculated decisions to slowdown or stop std::vector calculate_decisions( const DecisionInputs & inputs, const PlannerParam & params, const rclcpp::Logger & logger); -} // namespace behavior_velocity_planner::out_of_lane +} // namespace autoware::behavior_velocity_planner::out_of_lane #endif // DECISIONS_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.cpp b/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.cpp index 80cd106bf52ab..bb352f625580f 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.cpp +++ b/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.cpp @@ -24,7 +24,7 @@ #include -namespace behavior_velocity_planner::out_of_lane +namespace autoware::behavior_velocity_planner::out_of_lane { void cut_predicted_path_beyond_line( autoware_perception_msgs::msg::PredictedPath & predicted_path, @@ -143,4 +143,4 @@ autoware_perception_msgs::msg::PredictedObjects filter_predicted_objects( return filtered_objects; } -} // namespace behavior_velocity_planner::out_of_lane +} // namespace autoware::behavior_velocity_planner::out_of_lane diff --git a/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.hpp b/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.hpp index be3e8809d2e3d..a12b37e4c7d6d 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.hpp +++ b/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.hpp @@ -17,11 +17,11 @@ #include "types.hpp" -#include +#include #include -namespace behavior_velocity_planner::out_of_lane +namespace autoware::behavior_velocity_planner::out_of_lane { /// @brief cut a predicted path beyond the given stop line /// @param [inout] predicted_path predicted path to cut @@ -52,6 +52,6 @@ void cut_predicted_path_beyond_red_lights( /// @return filtered predicted objects autoware_perception_msgs::msg::PredictedObjects filter_predicted_objects( const PlannerData & planner_data, const EgoData & ego_data, const PlannerParam & params); -} // namespace behavior_velocity_planner::out_of_lane +} // namespace autoware::behavior_velocity_planner::out_of_lane #endif // FILTER_PREDICTED_OBJECTS_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/footprint.cpp b/planning/behavior_velocity_out_of_lane_module/src/footprint.cpp index d136f4a8598f3..48992e46ec74f 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/footprint.cpp +++ b/planning/behavior_velocity_out_of_lane_module/src/footprint.cpp @@ -24,7 +24,7 @@ #include #include -namespace behavior_velocity_planner::out_of_lane +namespace autoware::behavior_velocity_planner::out_of_lane { tier4_autoware_utils::Polygon2d make_base_footprint( const PlannerParam & p, const bool ignore_offset) @@ -87,4 +87,4 @@ lanelet::BasicPolygon2d calculate_current_ego_footprint( footprint.emplace_back(p.x() + ego_data.pose.position.x, p.y() + ego_data.pose.position.y); return footprint; } -} // namespace behavior_velocity_planner::out_of_lane +} // namespace autoware::behavior_velocity_planner::out_of_lane diff --git a/planning/behavior_velocity_out_of_lane_module/src/footprint.hpp b/planning/behavior_velocity_out_of_lane_module/src/footprint.hpp index a573b6ff3981c..1a0d38600fe73 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/footprint.hpp +++ b/planning/behavior_velocity_out_of_lane_module/src/footprint.hpp @@ -21,7 +21,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace out_of_lane { @@ -54,6 +54,6 @@ std::vector calculate_path_footprints( lanelet::BasicPolygon2d calculate_current_ego_footprint( const EgoData & ego_data, const PlannerParam & params, const bool ignore_offset = false); } // namespace out_of_lane -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // FOOTPRINT_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.cpp b/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.cpp index 67d8a79a63f03..42df39853f4f5 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.cpp +++ b/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.cpp @@ -14,7 +14,7 @@ #include "lanelets_selection.hpp" -#include +#include #include #include @@ -22,7 +22,7 @@ #include #include -namespace behavior_velocity_planner::out_of_lane +namespace autoware::behavior_velocity_planner::out_of_lane { lanelet::ConstLanelets consecutive_lanelets( @@ -127,4 +127,4 @@ lanelet::ConstLanelets calculate_other_lanelets( } return other_lanelets; } -} // namespace behavior_velocity_planner::out_of_lane +} // namespace autoware::behavior_velocity_planner::out_of_lane diff --git a/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.hpp b/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.hpp index 87757a0cb2230..8985a49a12853 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.hpp +++ b/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.hpp @@ -21,7 +21,7 @@ #include -namespace behavior_velocity_planner::out_of_lane +namespace autoware::behavior_velocity_planner::out_of_lane { /// @brief checks if a lanelet is already contained in a vector of lanelets /// @param [in] lanelets vector to check @@ -68,6 +68,6 @@ lanelet::ConstLanelets calculate_other_lanelets( const EgoData & ego_data, const lanelet::ConstLanelets & path_lanelets, const lanelet::ConstLanelets & ignored_lanelets, const route_handler::RouteHandler & route_handler, const PlannerParam & params); -} // namespace behavior_velocity_planner::out_of_lane +} // namespace autoware::behavior_velocity_planner::out_of_lane #endif // LANELETS_SELECTION_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/manager.cpp b/planning/behavior_velocity_out_of_lane_module/src/manager.cpp index 840054d92252f..61ec1a832bf8e 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/manager.cpp +++ b/planning/behavior_velocity_out_of_lane_module/src/manager.cpp @@ -16,7 +16,7 @@ #include "scene_out_of_lane.hpp" -#include +#include #include #include @@ -25,7 +25,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_autoware_utils::getOrDeclareParameter; @@ -100,8 +100,9 @@ OutOfLaneModuleManager::getModuleExpiredFunction( return false; }; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_velocity_planner::OutOfLaneModulePlugin, behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::OutOfLaneModulePlugin, + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/behavior_velocity_out_of_lane_module/src/manager.hpp b/planning/behavior_velocity_out_of_lane_module/src/manager.hpp index 9da1751576a7f..5ab7126d88d4d 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/manager.hpp +++ b/planning/behavior_velocity_out_of_lane_module/src/manager.hpp @@ -17,9 +17,9 @@ #include "scene_out_of_lane.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -36,7 +36,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class OutOfLaneModuleManager : public SceneModuleManagerInterface { @@ -61,6 +61,6 @@ class OutOfLaneModulePlugin : public PluginWrapper { }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // MANAGER_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.cpp b/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.cpp index 6dfb41ccfbfcb..a081df0b52028 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.cpp +++ b/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.cpp @@ -24,7 +24,7 @@ #include -namespace behavior_velocity_planner::out_of_lane +namespace autoware::behavior_velocity_planner::out_of_lane { Overlap calculate_overlap( @@ -123,4 +123,4 @@ OverlapRanges calculate_overlapping_ranges( return ranges; } -} // namespace behavior_velocity_planner::out_of_lane +} // namespace autoware::behavior_velocity_planner::out_of_lane diff --git a/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.hpp b/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.hpp index 2b0830acc28cc..afb71c11b3ae4 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.hpp +++ b/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.hpp @@ -23,7 +23,7 @@ #include -namespace behavior_velocity_planner::out_of_lane +namespace autoware::behavior_velocity_planner::out_of_lane { /// @brief calculate the overlap between the given footprint and lanelet @@ -55,6 +55,6 @@ OverlapRanges calculate_overlapping_ranges( const std::vector & path_footprints, const lanelet::ConstLanelets & path_lanelets, const lanelet::ConstLanelets & lanelets, const PlannerParam & params); -} // namespace behavior_velocity_planner::out_of_lane +} // namespace autoware::behavior_velocity_planner::out_of_lane #endif // OVERLAPPING_RANGE_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.cpp b/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.cpp index 067a5e3dc7698..3f34e8441e8be 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.cpp +++ b/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.cpp @@ -23,8 +23,8 @@ #include "overlapping_range.hpp" #include "types.hpp" -#include -#include +#include +#include #include #include #include @@ -41,7 +41,7 @@ #include #include -namespace behavior_velocity_planner::out_of_lane +namespace autoware::behavior_velocity_planner::out_of_lane { using visualization_msgs::msg::Marker; @@ -241,4 +241,4 @@ motion_utils::VirtualWalls OutOfLaneModule::createVirtualWalls() return virtual_walls; } -} // namespace behavior_velocity_planner::out_of_lane +} // namespace autoware::behavior_velocity_planner::out_of_lane diff --git a/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.hpp b/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.hpp index 1d51c45c6afd1..38101d6a9ba1d 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.hpp +++ b/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.hpp @@ -17,7 +17,7 @@ #include "types.hpp" -#include +#include #include #include @@ -31,7 +31,7 @@ #include #include -namespace behavior_velocity_planner::out_of_lane +namespace autoware::behavior_velocity_planner::out_of_lane { class OutOfLaneModule : public SceneModuleInterface { @@ -60,6 +60,6 @@ class OutOfLaneModule : public SceneModuleInterface // Debug mutable DebugData debug_data_; }; -} // namespace behavior_velocity_planner::out_of_lane +} // namespace autoware::behavior_velocity_planner::out_of_lane #endif // SCENE_OUT_OF_LANE_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/types.hpp b/planning/behavior_velocity_out_of_lane_module/src/types.hpp index cb2945f8b32b8..f1c48a6e96d17 100644 --- a/planning/behavior_velocity_out_of_lane_module/src/types.hpp +++ b/planning/behavior_velocity_out_of_lane_module/src/types.hpp @@ -31,7 +31,7 @@ #include #include -namespace behavior_velocity_planner::out_of_lane +namespace autoware::behavior_velocity_planner::out_of_lane { /// @brief parameters for the "out of lane" module struct PlannerParam @@ -230,6 +230,6 @@ struct DebugData } }; -} // namespace behavior_velocity_planner::out_of_lane +} // namespace autoware::behavior_velocity_planner::out_of_lane #endif // TYPES_HPP_ diff --git a/planning/behavior_velocity_speed_bump_module/package.xml b/planning/behavior_velocity_speed_bump_module/package.xml index 9b1de66c95c92..62e215951757d 100644 --- a/planning/behavior_velocity_speed_bump_module/package.xml +++ b/planning/behavior_velocity_speed_bump_module/package.xml @@ -15,8 +15,8 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_velocity_planner_common autoware_planning_msgs - behavior_velocity_planner_common eigen geometry_msgs lanelet2_extension diff --git a/planning/behavior_velocity_speed_bump_module/plugins.xml b/planning/behavior_velocity_speed_bump_module/plugins.xml index 506d25669f8cf..48287a7f94b4b 100644 --- a/planning/behavior_velocity_speed_bump_module/plugins.xml +++ b/planning/behavior_velocity_speed_bump_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_speed_bump_module/src/debug.cpp b/planning/behavior_velocity_speed_bump_module/src/debug.cpp index 7409c24e7e8bf..acbe3e05debaa 100644 --- a/planning/behavior_velocity_speed_bump_module/src/debug.cpp +++ b/planning/behavior_velocity_speed_bump_module/src/debug.cpp @@ -14,7 +14,7 @@ #include "scene.hpp" -#include +#include #include #include #include @@ -23,7 +23,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using motion_utils::createSlowDownVirtualWallMarker; using tier4_autoware_utils::appendMarkerArray; @@ -120,4 +120,4 @@ visualization_msgs::msg::MarkerArray SpeedBumpModule::createDebugMarkerArray() return debug_marker_array; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_speed_bump_module/src/manager.cpp b/planning/behavior_velocity_speed_bump_module/src/manager.cpp index fcd000699b7ff..42f10586d8fec 100644 --- a/planning/behavior_velocity_speed_bump_module/src/manager.cpp +++ b/planning/behavior_velocity_speed_bump_module/src/manager.cpp @@ -14,7 +14,7 @@ #include "manager.hpp" -#include +#include #include #include #include @@ -28,7 +28,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using lanelet::autoware::SpeedBump; using tier4_autoware_utils::getOrDeclareParameter; @@ -80,8 +80,9 @@ SpeedBumpModuleManager::getModuleExpiredFunction( }; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_velocity_planner::SpeedBumpModulePlugin, behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::SpeedBumpModulePlugin, + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/behavior_velocity_speed_bump_module/src/manager.hpp b/planning/behavior_velocity_speed_bump_module/src/manager.hpp index 40fcfdd081c2e..41b9a593dde95 100644 --- a/planning/behavior_velocity_speed_bump_module/src/manager.hpp +++ b/planning/behavior_velocity_speed_bump_module/src/manager.hpp @@ -17,9 +17,9 @@ #include "scene.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -27,7 +27,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class SpeedBumpModuleManager : public SceneModuleManagerInterface { @@ -49,6 +49,6 @@ class SpeedBumpModulePlugin : public PluginWrapper { }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // MANAGER_HPP_ diff --git a/planning/behavior_velocity_speed_bump_module/src/scene.cpp b/planning/behavior_velocity_speed_bump_module/src/scene.cpp index dc944cc0c292b..0ca4e0731b155 100644 --- a/planning/behavior_velocity_speed_bump_module/src/scene.cpp +++ b/planning/behavior_velocity_speed_bump_module/src/scene.cpp @@ -20,7 +20,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using motion_utils::calcSignedArcLength; using tier4_autoware_utils::createPoint; @@ -169,4 +169,4 @@ bool SpeedBumpModule::applySlowDownSpeed( output.points, slow_start_point_idx, slow_end_point_idx, speed_bump_speed); } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_speed_bump_module/src/scene.hpp b/planning/behavior_velocity_speed_bump_module/src/scene.hpp index f227366127046..ffbcf5fdf9325 100644 --- a/planning/behavior_velocity_speed_bump_module/src/scene.hpp +++ b/planning/behavior_velocity_speed_bump_module/src/scene.hpp @@ -17,14 +17,14 @@ #include "util.hpp" -#include +#include #include #include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_planning_msgs::msg::PathWithLaneId; @@ -81,6 +81,6 @@ class SpeedBumpModule : public SceneModuleInterface float speed_bump_slow_down_speed_; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // SCENE_HPP_ diff --git a/planning/behavior_velocity_speed_bump_module/src/util.cpp b/planning/behavior_velocity_speed_bump_module/src/util.cpp index d1533d7028dcf..ca4e7e379d1ea 100644 --- a/planning/behavior_velocity_speed_bump_module/src/util.cpp +++ b/planning/behavior_velocity_speed_bump_module/src/util.cpp @@ -17,7 +17,7 @@ #include "motion_utils/trajectory/path_with_lane_id.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include +#include #include #include @@ -32,7 +32,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -172,4 +172,4 @@ float calcSlowDownSpeed(const Point32 & p1, const Point32 & p2, const float spee return std::clamp(speed, p2.y, p1.y); } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_speed_bump_module/src/util.hpp b/planning/behavior_velocity_speed_bump_module/src/util.hpp index 2cd408735fd61..72bad3db86f73 100644 --- a/planning/behavior_velocity_speed_bump_module/src/util.hpp +++ b/planning/behavior_velocity_speed_bump_module/src/util.hpp @@ -35,7 +35,7 @@ #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -70,6 +70,6 @@ std::optional insertPointWithOffset( // returns y (speed) for y=mx+b float calcSlowDownSpeed(const Point32 & p1, const Point32 & p2, const float speed_bump_height); -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // UTIL_HPP_ diff --git a/planning/behavior_velocity_stop_line_module/package.xml b/planning/behavior_velocity_stop_line_module/package.xml index c71ecb83098fb..3132f60d1f342 100644 --- a/planning/behavior_velocity_stop_line_module/package.xml +++ b/planning/behavior_velocity_stop_line_module/package.xml @@ -18,8 +18,8 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_velocity_planner_common autoware_planning_msgs - behavior_velocity_planner_common eigen geometry_msgs lanelet2_extension diff --git a/planning/behavior_velocity_stop_line_module/plugins.xml b/planning/behavior_velocity_stop_line_module/plugins.xml index 51fb225fbebad..4b8ce9852fcec 100644 --- a/planning/behavior_velocity_stop_line_module/plugins.xml +++ b/planning/behavior_velocity_stop_line_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_stop_line_module/src/debug.cpp b/planning/behavior_velocity_stop_line_module/src/debug.cpp index f63bdca5068a2..bfcd5a5828556 100644 --- a/planning/behavior_velocity_stop_line_module/src/debug.cpp +++ b/planning/behavior_velocity_stop_line_module/src/debug.cpp @@ -14,7 +14,7 @@ #include "scene.hpp" -#include +#include #include #include #include @@ -24,7 +24,7 @@ #include #endif -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using tier4_autoware_utils::appendMarkerArray; using tier4_autoware_utils::createMarkerColor; @@ -111,4 +111,4 @@ motion_utils::VirtualWalls StopLineModule::createVirtualWalls() } return virtual_walls; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_stop_line_module/src/manager.cpp b/planning/behavior_velocity_stop_line_module/src/manager.cpp index b37b3b119178c..80f48fa65efaf 100644 --- a/planning/behavior_velocity_stop_line_module/src/manager.cpp +++ b/planning/behavior_velocity_stop_line_module/src/manager.cpp @@ -21,7 +21,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using lanelet::TrafficSign; using tier4_autoware_utils::getOrDeclareParameter; @@ -102,8 +102,9 @@ StopLineModuleManager::getModuleExpiredFunction( }; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_velocity_planner::StopLineModulePlugin, behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::StopLineModulePlugin, + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/behavior_velocity_stop_line_module/src/manager.hpp b/planning/behavior_velocity_stop_line_module/src/manager.hpp index af9dbaa083c33..eca5132a75c5f 100644 --- a/planning/behavior_velocity_stop_line_module/src/manager.hpp +++ b/planning/behavior_velocity_stop_line_module/src/manager.hpp @@ -17,9 +17,9 @@ #include "scene.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -30,7 +30,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using StopLineWithLaneId = std::pair; @@ -62,6 +62,6 @@ class StopLineModulePlugin : public PluginWrapper { }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // MANAGER_HPP_ diff --git a/planning/behavior_velocity_stop_line_module/src/scene.cpp b/planning/behavior_velocity_stop_line_module/src/scene.cpp index 976acd98fe42b..1bf777338e43c 100644 --- a/planning/behavior_velocity_stop_line_module/src/scene.cpp +++ b/planning/behavior_velocity_stop_line_module/src/scene.cpp @@ -14,14 +14,14 @@ #include "scene.hpp" -#include -#include +#include +#include #include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -177,4 +177,4 @@ geometry_msgs::msg::Point StopLineModule::getCenterOfStopLine( center_point.z = (stop_line[0].z() + stop_line[1].z()) / 2.0; return center_point; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_stop_line_module/src/scene.hpp b/planning/behavior_velocity_stop_line_module/src/scene.hpp index 70c67df623c85..0ae0a885f036f 100644 --- a/planning/behavior_velocity_stop_line_module/src/scene.hpp +++ b/planning/behavior_velocity_stop_line_module/src/scene.hpp @@ -24,16 +24,16 @@ #define EIGEN_MPL2_ONLY #include #include -#include -#include -#include +#include +#include +#include #include #include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class StopLineModule : public SceneModuleInterface { @@ -106,6 +106,6 @@ class StopLineModule : public SceneModuleInterface // Debug DebugData debug_data_; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // SCENE_HPP_ diff --git a/planning/behavior_velocity_traffic_light_module/package.xml b/planning/behavior_velocity_traffic_light_module/package.xml index ff7b5a269db32..067dcaca6a638 100644 --- a/planning/behavior_velocity_traffic_light_module/package.xml +++ b/planning/behavior_velocity_traffic_light_module/package.xml @@ -19,9 +19,9 @@ eigen3_cmake_module autoware_adapi_v1_msgs + autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs - behavior_velocity_planner_common eigen geometry_msgs lanelet2_extension diff --git a/planning/behavior_velocity_traffic_light_module/plugins.xml b/planning/behavior_velocity_traffic_light_module/plugins.xml index b65cc66c5c232..9b5e84fff982d 100644 --- a/planning/behavior_velocity_traffic_light_module/plugins.xml +++ b/planning/behavior_velocity_traffic_light_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_traffic_light_module/src/debug.cpp b/planning/behavior_velocity_traffic_light_module/src/debug.cpp index b3dedaa29d6ad..7ceded9c91934 100644 --- a/planning/behavior_velocity_traffic_light_module/src/debug.cpp +++ b/planning/behavior_velocity_traffic_light_module/src/debug.cpp @@ -14,7 +14,7 @@ #include "scene.hpp" -#include +#include #include #include #include @@ -24,7 +24,7 @@ #include #endif -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { visualization_msgs::msg::MarkerArray TrafficLightModule::createDebugMarkerArray() { @@ -54,4 +54,4 @@ motion_utils::VirtualWalls TrafficLightModule::createVirtualWalls() return virtual_walls; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_traffic_light_module/src/manager.cpp b/planning/behavior_velocity_traffic_light_module/src/manager.cpp index 01c3acf84cd63..ef5f8b2b36016 100644 --- a/planning/behavior_velocity_traffic_light_module/src/manager.cpp +++ b/planning/behavior_velocity_traffic_light_module/src/manager.cpp @@ -14,7 +14,7 @@ #include "manager.hpp" -#include +#include #include #include @@ -24,7 +24,7 @@ #include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { using lanelet::TrafficLight; using tier4_autoware_utils::getOrDeclareParameter; @@ -188,8 +188,9 @@ bool TrafficLightModuleManager::hasSameTrafficLight( return false; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_velocity_planner::TrafficLightModulePlugin, behavior_velocity_planner::PluginInterface) + autoware::behavior_velocity_planner::TrafficLightModulePlugin, + autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/behavior_velocity_traffic_light_module/src/manager.hpp b/planning/behavior_velocity_traffic_light_module/src/manager.hpp index 97340f8592a7d..c40056a0ba10c 100644 --- a/planning/behavior_velocity_traffic_light_module/src/manager.hpp +++ b/planning/behavior_velocity_traffic_light_module/src/manager.hpp @@ -17,9 +17,9 @@ #include "scene.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -28,7 +28,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class TrafficLightModuleManager : public SceneModuleManagerInterfaceWithRTC { @@ -65,6 +65,6 @@ class TrafficLightModulePlugin : public PluginWrapper { }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // MANAGER_HPP_ diff --git a/planning/behavior_velocity_traffic_light_module/src/scene.cpp b/planning/behavior_velocity_traffic_light_module/src/scene.cpp index c886578dc65e4..3ec597f1de249 100644 --- a/planning/behavior_velocity_traffic_light_module/src/scene.cpp +++ b/planning/behavior_velocity_traffic_light_module/src/scene.cpp @@ -14,7 +14,7 @@ #include "scene.hpp" -#include +#include #include #include @@ -34,7 +34,7 @@ #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { namespace bg = boost::geometry; @@ -432,4 +432,4 @@ tier4_planning_msgs::msg::PathWithLaneId TrafficLightModule::insertStopPose( return modified_path; } -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_traffic_light_module/src/scene.hpp b/planning/behavior_velocity_traffic_light_module/src/scene.hpp index 8385a1210d421..220145a2c7163 100644 --- a/planning/behavior_velocity_traffic_light_module/src/scene.hpp +++ b/planning/behavior_velocity_traffic_light_module/src/scene.hpp @@ -23,15 +23,15 @@ #define EIGEN_MPL2_ONLY #include #include -#include -#include +#include +#include #include #include #include #include -namespace behavior_velocity_planner +namespace autoware::behavior_velocity_planner { class TrafficLightModule : public SceneModuleInterface { @@ -129,6 +129,6 @@ class TrafficLightModule : public SceneModuleInterface // Traffic Light State TrafficSignal looking_tl_state_; }; -} // namespace behavior_velocity_planner +} // namespace autoware::behavior_velocity_planner #endif // SCENE_HPP_ diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/package.xml b/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/package.xml index 2f4e7241d60ee..a115d28ee6d86 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/package.xml +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/package.xml @@ -15,10 +15,10 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs autoware_velocity_smoother - behavior_velocity_planner_common eigen geometry_msgs lanelet2_extension From 7d6c2fdba3e4bee7aaa1b0dcb665e22ab1a83c29 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Fri, 7 Jun 2024 16:22:24 +0900 Subject: [PATCH 015/142] refactor(planning_validator)!: prefix package and namespace with autoware (#7320) * add autoware_ prefix to planning_validator Signed-off-by: kyoichi-sugahara * add prefix to package name in .pages Signed-off-by: kyoichi-sugahara * fix link of the image --------- Signed-off-by: kyoichi-sugahara --- .../launch/planning.launch.xml | 2 +- launch/tier4_planning_launch/package.xml | 2 +- planning/.pages | 2 +- .../autoware_planning_test_manager/README.md | 26 ++++++------ planning/planning_validator/CMakeLists.txt | 30 ++++++------- planning/planning_validator/README.md | 8 ++-- .../planning_validator_plotjugler_config.xml | 42 +++++++++---------- .../image/planning_validator.drawio.svg | 4 +- .../debug_marker.hpp | 6 +-- .../planning_validator.hpp | 16 +++---- .../utils.hpp | 10 ++--- .../invalid_trajectory_publisher.launch.xml | 2 +- .../launch/planning_validator.launch.xml | 4 +- planning/planning_validator/package.xml | 4 +- .../planning_validator/src/debug_marker.cpp | 4 +- .../invalid_trajectory_publisher.cpp | 6 +-- .../invalid_trajectory_publisher.hpp | 4 +- .../src/planning_validator.cpp | 10 ++--- planning/planning_validator/src/utils.cpp | 6 +-- .../src/test_planning_validator_functions.cpp | 6 +-- ...test_planning_validator_node_interface.cpp | 6 +-- .../src/test_planning_validator_pubsub.cpp | 7 ++-- 22 files changed, 104 insertions(+), 103 deletions(-) rename planning/planning_validator/include/{planning_validator => autoware_planning_validator}/debug_marker.hpp (91%) rename planning/planning_validator/include/{planning_validator => autoware_planning_validator}/planning_validator.hpp (91%) rename planning/planning_validator/include/{planning_validator => autoware_planning_validator}/utils.hpp (90%) diff --git a/launch/tier4_planning_launch/launch/planning.launch.xml b/launch/tier4_planning_launch/launch/planning.launch.xml index 97bf6414189ab..1d01732454daf 100644 --- a/launch/tier4_planning_launch/launch/planning.launch.xml +++ b/launch/tier4_planning_launch/launch/planning.launch.xml @@ -32,7 +32,7 @@ - + diff --git a/launch/tier4_planning_launch/package.xml b/launch/tier4_planning_launch/package.xml index 7b03097e55e10..0a585bce673b6 100644 --- a/launch/tier4_planning_launch/package.xml +++ b/launch/tier4_planning_launch/package.xml @@ -61,6 +61,7 @@ autoware_external_velocity_limit_selector autoware_path_optimizer autoware_planning_topic_converter + autoware_planning_validator autoware_remaining_distance_time_calculator autoware_surround_obstacle_checker autoware_velocity_smoother @@ -73,7 +74,6 @@ obstacle_cruise_planner obstacle_stop_planner planning_evaluator - planning_validator scenario_selector ament_lint_auto diff --git a/planning/.pages b/planning/.pages index 7b932118b5010..6e3c6d5d49104 100644 --- a/planning/.pages +++ b/planning/.pages @@ -87,4 +87,4 @@ nav: - 'Planning Test Utils': planning/planning_test_utils - 'Planning Test Manager': planning/autoware_planning_test_manager - 'Planning Topic Converter': planning/autoware_planning_topic_converter - - 'Planning Validator': planning/planning_validator + - 'Planning Validator': planning/autoware_planning_validator diff --git a/planning/autoware_planning_test_manager/README.md b/planning/autoware_planning_test_manager/README.md index fe5484ca498ee..97eb2fd8d94fd 100644 --- a/planning/autoware_planning_test_manager/README.md +++ b/planning/autoware_planning_test_manager/README.md @@ -41,7 +41,7 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionTrajectory) node_options.arguments( {"--ros-args", "--params-file", planning_test_utils_dir + "/config/test_vehicle_info.param.yaml", "--params-file", - planning_validator_dir + "/config/planning_validator.param.yaml"}); + autoware_planning_validator_dir + "/config/planning_validator.param.yaml"}); // instantiate the TargetNode with node_options auto test_target_node = std::make_shared(node_options); @@ -70,18 +70,18 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionTrajectory) ## Implemented tests -| Node | Test name | exceptional input | output | Exceptional input pattern | -| ------------------------- | ----------------------------------------------------------------------------------------- | ----------------- | -------------- | ------------------------------------------------------------------------------------- | -| planning_validator | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | -| velocity_smoother | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | -| obstacle_cruise_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | -| obstacle_stop_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | -| obstacle_velocity_limiter | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | -| path_optimizer | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | -| scenario_selector | NodeTestWithExceptionTrajectoryLaneDrivingMode NodeTestWithExceptionTrajectoryParkingMode | trajectory | scenario | Empty, single point, path with duplicate points for scenarios:LANEDRIVING and PARKING | -| freespace_planner | NodeTestWithExceptionRoute | route | trajectory | Empty route | -| behavior_path_planner | NodeTestWithExceptionRoute NodeTestWithOffTrackEgoPose | route | route odometry | Empty route Off-lane ego-position | -| behavior_velocity_planner | NodeTestWithExceptionPathWithLaneID | path_with_lane_id | path | Empty path | +| Node | Test name | exceptional input | output | Exceptional input pattern | +| --------------------------- | ----------------------------------------------------------------------------------------- | ----------------- | -------------- | ------------------------------------------------------------------------------------- | +| autoware_planning_validator | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | +| velocity_smoother | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | +| obstacle_cruise_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | +| obstacle_stop_planner | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | +| obstacle_velocity_limiter | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | +| path_optimizer | NodeTestWithExceptionTrajectory | trajectory | trajectory | Empty, single point, path with duplicate points | +| scenario_selector | NodeTestWithExceptionTrajectoryLaneDrivingMode NodeTestWithExceptionTrajectoryParkingMode | trajectory | scenario | Empty, single point, path with duplicate points for scenarios:LANEDRIVING and PARKING | +| freespace_planner | NodeTestWithExceptionRoute | route | trajectory | Empty route | +| behavior_path_planner | NodeTestWithExceptionRoute NodeTestWithOffTrackEgoPose | route | route odometry | Empty route Off-lane ego-position | +| behavior_velocity_planner | NodeTestWithExceptionPathWithLaneID | path_with_lane_id | path | Empty path | ## Important Notes diff --git a/planning/planning_validator/CMakeLists.txt b/planning/planning_validator/CMakeLists.txt index 455dded2d7e32..da780cfdebdcf 100644 --- a/planning/planning_validator/CMakeLists.txt +++ b/planning/planning_validator/CMakeLists.txt @@ -1,22 +1,22 @@ cmake_minimum_required(VERSION 3.22) -project(planning_validator) +project(autoware_planning_validator) find_package(autoware_cmake REQUIRED) autoware_package() -ament_auto_add_library(planning_validator_helpers SHARED +ament_auto_add_library(autoware_planning_validator_helpers SHARED src/utils.cpp src/debug_marker.cpp ) # planning validator -ament_auto_add_library(planning_validator_component SHARED - include/planning_validator/planning_validator.hpp +ament_auto_add_library(autoware_planning_validator_component SHARED + include/autoware_planning_validator/planning_validator.hpp src/planning_validator.cpp ) -target_link_libraries(planning_validator_component planning_validator_helpers) -rclcpp_components_register_node(planning_validator_component - PLUGIN "planning_validator::PlanningValidator" +target_link_libraries(autoware_planning_validator_component autoware_planning_validator_helpers) +rclcpp_components_register_node(autoware_planning_validator_component + PLUGIN "autoware::planning_validator::PlanningValidator" EXECUTABLE planning_validator_node ) @@ -25,7 +25,7 @@ ament_auto_add_library(invalid_trajectory_publisher_node SHARED src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp ) rclcpp_components_register_node(invalid_trajectory_publisher_node - PLUGIN "planning_validator::InvalidTrajectoryPublisherNode" + PLUGIN "autoware::planning_validator::InvalidTrajectoryPublisherNode" EXECUTABLE invalid_trajectory_publisher ) @@ -37,29 +37,29 @@ rosidl_generate_interfaces( # to use a message defined in the same package if(${rosidl_cmake_VERSION} VERSION_LESS 2.5.0) - rosidl_target_interfaces(planning_validator_component + rosidl_target_interfaces(autoware_planning_validator_component ${PROJECT_NAME} "rosidl_typesupport_cpp") else() rosidl_get_typesupport_target( cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp") - target_link_libraries(planning_validator_component "${cpp_typesupport_target}") + target_link_libraries(autoware_planning_validator_component "${cpp_typesupport_target}") endif() if(BUILD_TESTING) - ament_add_ros_isolated_gtest(test_planning_validator + ament_add_ros_isolated_gtest(test_autoware_planning_validator test/src/test_main.cpp test/src/test_planning_validator_functions.cpp test/src/test_planning_validator_helper.cpp test/src/test_planning_validator_pubsub.cpp - test/src/test_${PROJECT_NAME}_node_interface.cpp + test/src/test_planning_validator_node_interface.cpp ) - ament_target_dependencies(test_planning_validator + ament_target_dependencies(test_autoware_planning_validator rclcpp autoware_planning_msgs ) - target_link_libraries(test_planning_validator - planning_validator_component + target_link_libraries(test_autoware_planning_validator + autoware_planning_validator_component ) endif() diff --git a/planning/planning_validator/README.md b/planning/planning_validator/README.md index 9d70e7f78a5bb..92c9b86c8b31c 100644 --- a/planning/planning_validator/README.md +++ b/planning/planning_validator/README.md @@ -1,8 +1,8 @@ # Planning Validator -The `planning_validator` is a module that checks the validity of a trajectory before it is published. The status of the validation can be viewed in the `/diagnostics` and `/validation_status` topics. When an invalid trajectory is detected, the `planning_validator` will process the trajectory following the selected option: "0. publish the trajectory as it is", "1. stop publishing the trajectory", "2. publish the last validated trajectory". +The `autoware_planning_validator` is a module that checks the validity of a trajectory before it is published. The status of the validation can be viewed in the `/diagnostics` and `/validation_status` topics. When an invalid trajectory is detected, the `autoware_planning_validator` will process the trajectory following the selected option: "0. publish the trajectory as it is", "1. stop publishing the trajectory", "2. publish the last validated trajectory". -![planning_validator](./image/planning_validator.drawio.svg) +![autoware_planning_validator](./image/planning_validator.drawio.svg) ## Supported features @@ -29,7 +29,7 @@ The following features are to be implemented. ### Inputs -The `planning_validator` takes in the following inputs: +The `autoware_planning_validator` takes in the following inputs: | Name | Type | Description | | -------------------- | --------------------------------- | ---------------------------------------------- | @@ -48,7 +48,7 @@ It outputs the following: ## Parameters -The following parameters can be set for the `planning_validator`: +The following parameters can be set for the `autoware_planning_validator`: ### System parameters diff --git a/planning/planning_validator/config/planning_validator_plotjugler_config.xml b/planning/planning_validator/config/planning_validator_plotjugler_config.xml index d6afc0b017d32..04d5d4d8a0e38 100644 --- a/planning/planning_validator/config/planning_validator_plotjugler_config.xml +++ b/planning/planning_validator/config/planning_validator_plotjugler_config.xml @@ -9,21 +9,21 @@ - + - + - + @@ -32,21 +32,21 @@ - + - + - + @@ -55,21 +55,21 @@ - + - + - + @@ -78,7 +78,7 @@ - + @@ -86,23 +86,23 @@ - - - - - + + + + + - - - - - - + + + + + + diff --git a/planning/planning_validator/image/planning_validator.drawio.svg b/planning/planning_validator/image/planning_validator.drawio.svg index 070c1a6d68b81..0a2267cba159e 100644 --- a/planning/planning_validator/image/planning_validator.drawio.svg +++ b/planning/planning_validator/image/planning_validator.drawio.svg @@ -38,12 +38,12 @@ >
- planning_validator + autoware_planning_validator
- planning_validator + autoware_planning_validator diff --git a/planning/planning_validator/include/planning_validator/debug_marker.hpp b/planning/planning_validator/include/autoware_planning_validator/debug_marker.hpp similarity index 91% rename from planning/planning_validator/include/planning_validator/debug_marker.hpp rename to planning/planning_validator/include/autoware_planning_validator/debug_marker.hpp index 4671a0b0d7297..955ba5bbf64ab 100644 --- a/planning/planning_validator/include/planning_validator/debug_marker.hpp +++ b/planning/planning_validator/include/autoware_planning_validator/debug_marker.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PLANNING_VALIDATOR__DEBUG_MARKER_HPP_ -#define PLANNING_VALIDATOR__DEBUG_MARKER_HPP_ +#ifndef AUTOWARE_PLANNING_VALIDATOR__DEBUG_MARKER_HPP_ +#define AUTOWARE_PLANNING_VALIDATOR__DEBUG_MARKER_HPP_ #include @@ -57,4 +57,4 @@ class PlanningValidatorDebugMarkerPublisher } }; -#endif // PLANNING_VALIDATOR__DEBUG_MARKER_HPP_ +#endif // AUTOWARE_PLANNING_VALIDATOR__DEBUG_MARKER_HPP_ diff --git a/planning/planning_validator/include/planning_validator/planning_validator.hpp b/planning/planning_validator/include/autoware_planning_validator/planning_validator.hpp similarity index 91% rename from planning/planning_validator/include/planning_validator/planning_validator.hpp rename to planning/planning_validator/include/autoware_planning_validator/planning_validator.hpp index fed6e161c4d90..113c70fecb62c 100644 --- a/planning/planning_validator/include/planning_validator/planning_validator.hpp +++ b/planning/planning_validator/include/autoware_planning_validator/planning_validator.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PLANNING_VALIDATOR__PLANNING_VALIDATOR_HPP_ -#define PLANNING_VALIDATOR__PLANNING_VALIDATOR_HPP_ +#ifndef AUTOWARE_PLANNING_VALIDATOR__PLANNING_VALIDATOR_HPP_ +#define AUTOWARE_PLANNING_VALIDATOR__PLANNING_VALIDATOR_HPP_ -#include "planning_validator/debug_marker.hpp" -#include "planning_validator/msg/planning_validator_status.hpp" +#include "autoware_planning_validator/debug_marker.hpp" +#include "autoware_planning_validator/msg/planning_validator_status.hpp" #include "tier4_autoware_utils/ros/logger_level_configure.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" #include "vehicle_info_util/vehicle_info_util.hpp" @@ -33,14 +33,14 @@ #include #include -namespace planning_validator +namespace autoware::planning_validator { using autoware_planning_msgs::msg::Trajectory; using autoware_planning_msgs::msg::TrajectoryPoint; +using autoware_planning_validator::msg::PlanningValidatorStatus; using diagnostic_updater::DiagnosticStatusWrapper; using diagnostic_updater::Updater; using nav_msgs::msg::Odometry; -using planning_validator::msg::PlanningValidatorStatus; using tier4_autoware_utils::StopWatch; using tier4_debug_msgs::msg::Float64Stamped; @@ -141,6 +141,6 @@ class PlanningValidator : public rclcpp::Node StopWatch stop_watch_; }; -} // namespace planning_validator +} // namespace autoware::planning_validator -#endif // PLANNING_VALIDATOR__PLANNING_VALIDATOR_HPP_ +#endif // AUTOWARE_PLANNING_VALIDATOR__PLANNING_VALIDATOR_HPP_ diff --git a/planning/planning_validator/include/planning_validator/utils.hpp b/planning/planning_validator/include/autoware_planning_validator/utils.hpp similarity index 90% rename from planning/planning_validator/include/planning_validator/utils.hpp rename to planning/planning_validator/include/autoware_planning_validator/utils.hpp index 11eaf4f37f400..1c943f5a60e08 100644 --- a/planning/planning_validator/include/planning_validator/utils.hpp +++ b/planning/planning_validator/include/autoware_planning_validator/utils.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PLANNING_VALIDATOR__UTILS_HPP_ -#define PLANNING_VALIDATOR__UTILS_HPP_ +#ifndef AUTOWARE_PLANNING_VALIDATOR__UTILS_HPP_ +#define AUTOWARE_PLANNING_VALIDATOR__UTILS_HPP_ #include @@ -23,7 +23,7 @@ #include #include -namespace planning_validator +namespace autoware::planning_validator { using autoware_planning_msgs::msg::Trajectory; using autoware_planning_msgs::msg::TrajectoryPoint; @@ -65,6 +65,6 @@ bool checkFinite(const TrajectoryPoint & point); void shiftPose(geometry_msgs::msg::Pose & pose, double longitudinal); -} // namespace planning_validator +} // namespace autoware::planning_validator -#endif // PLANNING_VALIDATOR__UTILS_HPP_ +#endif // AUTOWARE_PLANNING_VALIDATOR__UTILS_HPP_ diff --git a/planning/planning_validator/launch/invalid_trajectory_publisher.launch.xml b/planning/planning_validator/launch/invalid_trajectory_publisher.launch.xml index 3f73e0f462cc2..a1cdc7c7ecc55 100644 --- a/planning/planning_validator/launch/invalid_trajectory_publisher.launch.xml +++ b/planning/planning_validator/launch/invalid_trajectory_publisher.launch.xml @@ -2,7 +2,7 @@ - + diff --git a/planning/planning_validator/launch/planning_validator.launch.xml b/planning/planning_validator/launch/planning_validator.launch.xml index 81573adb4dc24..fa1475a0787e4 100644 --- a/planning/planning_validator/launch/planning_validator.launch.xml +++ b/planning/planning_validator/launch/planning_validator.launch.xml @@ -1,9 +1,9 @@ - + - + diff --git a/planning/planning_validator/package.xml b/planning/planning_validator/package.xml index 5a413f27dc7a3..7fe57e68928d9 100644 --- a/planning/planning_validator/package.xml +++ b/planning/planning_validator/package.xml @@ -1,9 +1,9 @@ - planning_validator + autoware_planning_validator 0.1.0 - ros node for planning_validator + ros node for autoware_planning_validator Takamasa Horibe Kosuke Takeuchi Apache License 2.0 diff --git a/planning/planning_validator/src/debug_marker.cpp b/planning/planning_validator/src/debug_marker.cpp index 82117d199c36e..413611a72b5ab 100644 --- a/planning/planning_validator/src/debug_marker.cpp +++ b/planning/planning_validator/src/debug_marker.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "planning_validator/debug_marker.hpp" +#include "autoware_planning_validator/debug_marker.hpp" #include #include @@ -90,7 +90,7 @@ void PlanningValidatorDebugMarkerPublisher::pushVirtualWall(const geometry_msgs: { const auto now = node_->get_clock()->now(); const auto stop_wall_marker = - motion_utils::createStopVirtualWallMarker(pose, "planning_validator", now, 0); + motion_utils::createStopVirtualWallMarker(pose, "autoware_planning_validator", now, 0); tier4_autoware_utils::appendMarkerArray(stop_wall_marker, &marker_array_virtual_wall_, now); } diff --git a/planning/planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp b/planning/planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp index 6cca99cd9f14c..645d6c92e3698 100644 --- a/planning/planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp +++ b/planning/planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp @@ -18,7 +18,7 @@ #include #include -namespace planning_validator +namespace autoware::planning_validator { InvalidTrajectoryPublisherNode::InvalidTrajectoryPublisherNode( const rclcpp::NodeOptions & node_options) @@ -72,7 +72,7 @@ void InvalidTrajectoryPublisherNode::onCurrentTrajectory(const Trajectory::Const traj_sub_.reset(); } -} // namespace planning_validator +} // namespace autoware::planning_validator #include -RCLCPP_COMPONENTS_REGISTER_NODE(planning_validator::InvalidTrajectoryPublisherNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::planning_validator::InvalidTrajectoryPublisherNode) diff --git a/planning/planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.hpp b/planning/planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.hpp index 1d1e47ad10407..0025d759217bf 100644 --- a/planning/planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.hpp +++ b/planning/planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.hpp @@ -21,7 +21,7 @@ #include -namespace planning_validator +namespace autoware::planning_validator { using autoware_planning_msgs::msg::Trajectory; using autoware_planning_msgs::msg::TrajectoryPoint; @@ -41,6 +41,6 @@ class InvalidTrajectoryPublisherNode : public rclcpp::Node Trajectory::ConstSharedPtr current_trajectory_ = nullptr; }; -} // namespace planning_validator +} // namespace autoware::planning_validator #endif // INVALID_TRAJECTORY_PUBLISHER__INVALID_TRAJECTORY_PUBLISHER_HPP_ diff --git a/planning/planning_validator/src/planning_validator.cpp b/planning/planning_validator/src/planning_validator.cpp index d14b1d9ff37d2..aac50e24c5d5c 100644 --- a/planning/planning_validator/src/planning_validator.cpp +++ b/planning/planning_validator/src/planning_validator.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "planning_validator/planning_validator.hpp" +#include "autoware_planning_validator/planning_validator.hpp" -#include "planning_validator/utils.hpp" +#include "autoware_planning_validator/utils.hpp" #include #include @@ -23,7 +23,7 @@ #include #include -namespace planning_validator +namespace autoware::planning_validator { using diagnostic_msgs::msg::DiagnosticStatus; @@ -584,7 +584,7 @@ void PlanningValidator::displayStatus() warn(s.is_valid_forward_trajectory_length, "planning trajectory forward length is not enough!!"); } -} // namespace planning_validator +} // namespace autoware::planning_validator #include -RCLCPP_COMPONENTS_REGISTER_NODE(planning_validator::PlanningValidator) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::planning_validator::PlanningValidator) diff --git a/planning/planning_validator/src/utils.cpp b/planning/planning_validator/src/utils.cpp index aada0bea2da9b..4710d3ae84ea3 100644 --- a/planning/planning_validator/src/utils.cpp +++ b/planning/planning_validator/src/utils.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "planning_validator/utils.hpp" +#include "autoware_planning_validator/utils.hpp" #include #include @@ -22,7 +22,7 @@ #include #include -namespace planning_validator +namespace autoware::planning_validator { using tier4_autoware_utils::calcCurvature; using tier4_autoware_utils::calcDistance2d; @@ -324,4 +324,4 @@ void shiftPose(geometry_msgs::msg::Pose & pose, double longitudinal) pose.position.y += std::sin(yaw) * longitudinal; } -} // namespace planning_validator +} // namespace autoware::planning_validator diff --git a/planning/planning_validator/test/src/test_planning_validator_functions.cpp b/planning/planning_validator/test/src/test_planning_validator_functions.cpp index e406b6c5d7da2..41ae41a80bdc5 100644 --- a/planning/planning_validator/test/src/test_planning_validator_functions.cpp +++ b/planning/planning_validator/test/src/test_planning_validator_functions.cpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "planning_validator/debug_marker.hpp" -#include "planning_validator/planning_validator.hpp" +#include "autoware_planning_validator/debug_marker.hpp" +#include "autoware_planning_validator/planning_validator.hpp" #include "test_parameter.hpp" #include "test_planning_validator_helper.hpp" @@ -21,8 +21,8 @@ #include +using autoware::planning_validator::PlanningValidator; using autoware_planning_msgs::msg::Trajectory; -using planning_validator::PlanningValidator; TEST(PlanningValidatorTestSuite, checkValidFiniteValueFunction) { diff --git a/planning/planning_validator/test/src/test_planning_validator_node_interface.cpp b/planning/planning_validator/test/src/test_planning_validator_node_interface.cpp index 2b2a32bf54618..78f57e0fe104d 100644 --- a/planning/planning_validator/test/src/test_planning_validator_node_interface.cpp +++ b/planning/planning_validator/test/src/test_planning_validator_node_interface.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "planning_validator/planning_validator.hpp" +#include "autoware_planning_validator/planning_validator.hpp" #include #include @@ -22,8 +22,8 @@ #include +using autoware::planning_validator::PlanningValidator; using planning_test_utils::PlanningInterfaceTestManager; -using planning_validator::PlanningValidator; std::shared_ptr generateTestManager() { @@ -46,7 +46,7 @@ std::shared_ptr generateNode() const auto planning_test_utils_dir = ament_index_cpp::get_package_share_directory("planning_test_utils"); const auto planning_validator_dir = - ament_index_cpp::get_package_share_directory("planning_validator"); + ament_index_cpp::get_package_share_directory("autoware_planning_validator"); node_options.arguments( {"--ros-args", "--params-file", planning_test_utils_dir + "/config/test_vehicle_info.param.yaml", "--params-file", diff --git a/planning/planning_validator/test/src/test_planning_validator_pubsub.cpp b/planning/planning_validator/test/src/test_planning_validator_pubsub.cpp index 2329a3b9bb6c8..8cf56525edbc5 100644 --- a/planning/planning_validator/test/src/test_planning_validator_pubsub.cpp +++ b/planning/planning_validator/test/src/test_planning_validator_pubsub.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "planning_validator/planning_validator.hpp" +#include "autoware_planning_validator/planning_validator.hpp" #include "test_parameter.hpp" #include "test_planning_validator_helper.hpp" @@ -29,11 +29,11 @@ * This test checks the diagnostics message published from the planning_validator node */ +using autoware::planning_validator::PlanningValidator; using autoware_planning_msgs::msg::Trajectory; using diagnostic_msgs::msg::DiagnosticArray; using diagnostic_msgs::msg::DiagnosticStatus; using nav_msgs::msg::Odometry; -using planning_validator::PlanningValidator; constexpr double epsilon = 0.001; constexpr double scale_margin = 1.1; @@ -101,7 +101,8 @@ bool hasError(const std::vector & diags, const throw std::runtime_error(name + " is not contained in the diagnostic message."); } -std::pair, std::shared_ptr> +std::pair< + std::shared_ptr, std::shared_ptr> prepareTest(const Trajectory & trajectory, const Odometry & ego_odom) { auto validator = std::make_shared(getNodeOptionsWithDefaultParams()); From 2b7c0db3d62418f84e05a72f72d48fbd3af9b5b7 Mon Sep 17 00:00:00 2001 From: TaikiYamada4 <129915538+TaikiYamada4@users.noreply.github.com> Date: Fri, 7 Jun 2024 16:45:16 +0900 Subject: [PATCH 016/142] feat(pose_instability_detector): change validation algorithm (#7042) * Create define_static_threshold() Signed-off-by: TaikiYamada4 * Revised dead reckoning methodology Signed-off-by: TaikiYamada4 * style(pre-commit): autofix * Change threshold calculation to use the online time difference Signed-off-by: TaikiYamada4 * Simplify threshold calculation. Rewrite json schema. Refactor some variables. Signed-off-by: TaikiYamada4 * style(pre-commit): autofix * Rewrite lateral_threshold and vertical threshold Signed-off-by: TaikiYamada4 * Consider dead reckoning noise, update README.md. Signed-off-by: TaikiYamada4 * Added sentences to README.md Signed-off-by: TaikiYamada4 * Filled README.md Revert lateral threshold calculation. Signed-off-by: TaikiYamada4 * style(pre-commit): autofix * Add #include Signed-off-by: TaikiYamada4 * style(pre-commit): autofix * Fixed pose_instability_detector.schema.json Signed-off-by: TaikiYamada4 * Revised calculation of the process noise of dead reckoning. Signed-off-by: TaikiYamada4 * style(pre-commit): autofix * Fixed typo and lack of information Signed-off-by: TaikiYamada4 * Revised redundant time substitutions Signed-off-by: TaikiYamada4 * Revised dead reckoning algorithm for orientation. Signed-off-by: TaikiYamada4 * style(pre-commit): autofix * Added information about lateral thresholld calculation in README.md Signed-off-by: TaikiYamada4 * Removed all dead reckoning related process noise stuff Signed-off-by: TaikiYamada4 * Removed parameters and desciprtion of dead reckoning process noise stuff Signed-off-by: TaikiYamada4 * style(pre-commit): autofix * Fixed integration logic for angular twist Signed-off-by: TaikiYamada4 * Let the hpp file be exportable, and follow the guidelines when exporting hpp files Signed-off-by: TaikiYamada4 * style(pre-commit): autofix * Fix typo Signed-off-by: TaikiYamada4 * Delete include from package.xml Signed-off-by: TaikiYamada4 * Make test codes work. Create a threshold structure so that other packages can use the methods in pose_instability_detector Signed-off-by: TaikiYamada4 * style(pre-commit): autofix --------- Signed-off-by: TaikiYamada4 Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../pose_instability_detector/README.md | 141 ++++++- .../pose_instability_detector.param.yaml | 20 +- .../pose_instability_detector.hpp | 49 ++- .../media/how_to_snip_twist.png | Bin 0 -> 179156 bytes .../media/lateral_threshold_calculation.png | Bin 0 -> 67649 bytes .../pose_instability_detector_overview.png | Bin 0 -> 136030 bytes .../pose_instabilty_detector_procedure.svg | 316 ++++++++++++++++ .../media/rqt_runtime_monitor.png | Bin 438840 -> 86975 bytes .../pose_instability_detector.schema.json | 77 ++-- .../src/pose_instability_detector.cpp | 347 +++++++++++++++--- .../pose_instability_detector/test/test.cpp | 30 +- 11 files changed, 858 insertions(+), 122 deletions(-) rename localization/pose_instability_detector/{src => include/autoware/pose_instability_detector}/pose_instability_detector.hpp (57%) create mode 100644 localization/pose_instability_detector/media/how_to_snip_twist.png create mode 100644 localization/pose_instability_detector/media/lateral_threshold_calculation.png create mode 100644 localization/pose_instability_detector/media/pose_instability_detector_overview.png create mode 100644 localization/pose_instability_detector/media/pose_instabilty_detector_procedure.svg diff --git a/localization/pose_instability_detector/README.md b/localization/pose_instability_detector/README.md index 89cf6ca3be684..4ced0fa8eb97b 100644 --- a/localization/pose_instability_detector/README.md +++ b/localization/pose_instability_detector/README.md @@ -1,20 +1,111 @@ # pose_instability_detector -The `pose_instability_detector` package includes a node designed to monitor the stability of `/localization/kinematic_state`, which is an output topic of the Extended Kalman Filter (EKF). +The `pose_instability_detector` is a node designed to monitor the stability of `/localization/kinematic_state`, which is an output topic of the Extended Kalman Filter (EKF). This node triggers periodic timer callbacks to compare two poses: -- The pose obtained by integrating the twist values from the last received message on `/localization/kinematic_state` over a duration specified by `interval_sec`. +- The pose calculated by dead reckoning starting from the pose of `/localization/kinematic_state` obtained `timer_period` seconds ago. - The latest pose from `/localization/kinematic_state`. The results of this comparison are then output to the `/diagnostics` topic. +![overview](./media/pose_instability_detector_overview.png) + +![rqt_runtime_monitor](./media/rqt_runtime_monitor.png) + If this node outputs WARN messages to `/diagnostics`, it means that the EKF output is significantly different from the integrated twist values. +In other words, WARN outputs indicate that the vehicle has moved to a place outside the expected range based on the twist values. This discrepancy suggests that there may be an issue with either the estimated pose or the input twist. -The following diagram provides an overview of what the timeline of this process looks like: +The following diagram provides an overview of how the procedure looks like: + +![procedure](./media/pose_instabilty_detector_procedure.svg) + +## Dead reckoning algorithm + +Dead reckoning is a method of estimating the position of a vehicle based on its previous position and velocity. +The procedure for dead reckoning is as follows: + +1. Capture the necessary twist values from the `/input/twist` topic. +2. Integrate the twist values to calculate the pose transition. +3. Apply the pose transition to the previous pose to obtain the current pose. + +### Collecting twist values + +The `pose_instability_detector` node collects the twist values from the `~/input/twist` topic to perform dead reckoning. +Ideally, `pose_instability_detector` needs the twist values between the previous pose and the current pose. +Therefore, `pose_instability_detector` snips the twist buffer and apply interpolations and extrapolations to obtain the twist values at the desired time. + +![how_to_snip_necessary_twist](./media/how_to_snip_twist.png) + +### Linear transition and angular transition + +After the twist values are collected, the node calculates the linear transition and angular transition based on the twist values and add them to the previous pose. + +## Threshold definition + +The `pose_instability_detector` node compares the pose calculated by dead reckoning with the latest pose from the EKF output. +These two pose are ideally the same, but in reality, they are not due to the error in the twist values the pose observation. +If these two poses are significantly different so that the absolute value exceeds the threshold, the node outputs a WARN message to the `/diagnostics` topic. +There are six thresholds (x, y, z, roll, pitch, and yaw) to determine whether the poses are significantly different, and these thresholds are determined by the following subsections. + +### `diff_position_x` + +This threshold examines the difference in the longitudinal axis between the two poses, and check whether the vehicle goes beyond the expected error. +This threshold is a sum of "maximum longitudinal error due to velocity scale factor error" and "pose estimation error tolerance". + +$$ +\tau_x = v_{\rm max}\frac{\beta_v}{100} \Delta t + \epsilon_x\\ +$$ -![timeline](./media/timeline.drawio.svg) +| Symbol | Description | Unit | +| ------------- | -------------------------------------------------------------------------------- | ----- | +| $\tau_x$ | Threshold for the difference in the longitudinal axis | $m$ | +| $v_{\rm max}$ | Maximum velocity | $m/s$ | +| $\beta_v$ | Scale factor tolerance for the maximum velocity | $\%$ | +| $\Delta t$ | Time interval | $s$ | +| $\epsilon_x$ | Pose estimator (e. g. ndt_scan_matcher) error tolerance in the longitudinal axis | $m$ | + +### `diff_position_y` and `diff_position_z` + +These thresholds examine the difference in the lateral and vertical axes between the two poses, and check whether the vehicle goes beyond the expected error. +The `pose_instability_detector` calculates the possible range where the vehicle goes, and get the maximum difference between the nominal dead reckoning pose and the maximum limit pose. + +![lateral_threshold_calculation](./media/lateral_threshold_calculation.png) + +Addition to this, the `pose_instability_detector` node considers the pose estimation error tolerance to determine the threshold. + +$$ +\tau_y = l + \epsilon_y +$$ + +| Symbol | Description | Unit | +| ------------ | ----------------------------------------------------------------------------------------------- | ---- | +| $\tau_y$ | Threshold for the difference in the lateral axis | $m$ | +| $l$ | Maximum lateral distance described in the image above (See the appendix how this is calculated) | $m$ | +| $\epsilon_y$ | Pose estimator (e. g. ndt_scan_matcher) error tolerance in the lateral axis | $m$ | + +Note that `pose_instability_detector` sets the threshold for the vertical axis as the same as the lateral axis. Only the pose estimator error tolerance is different. + +### `diff_angle_x`, `diff_angle_y`, and `diff_angle_z` + +These thresholds examine the difference in the roll, pitch, and yaw angles between the two poses. +This threshold is a sum of "maximum angular error due to velocity scale factor error and bias error" and "pose estimation error tolerance". + +$$ +\tau_\phi = \tau_\theta = \tau_\psi = \left(\omega_{\rm max}\frac{\beta_\omega}{100} + b \right) \Delta t + \epsilon_\psi +$$ + +| Symbol | Description | Unit | +| ------------------ | ------------------------------------------------------------------------ | ------------- | +| $\tau_\phi$ | Threshold for the difference in the roll angle | ${\rm rad}$ | +| $\tau_\theta$ | Threshold for the difference in the pitch angle | ${\rm rad}$ | +| $\tau_\psi$ | Threshold for the difference in the yaw angle | ${\rm rad}$ | +| $\omega_{\rm max}$ | Maximum angular velocity | ${\rm rad}/s$ | +| $\beta_\omega$ | Scale factor tolerance for the maximum angular velocity | $\%$ | +| $b$ | Bias tolerance of the angular velocity | ${\rm rad}/s$ | +| $\Delta t$ | Time interval | $s$ | +| $\epsilon_\psi$ | Pose estimator (e. g. ndt_scan_matcher) error tolerance in the yaw angle | ${\rm rad}$ | ## Parameters @@ -34,4 +125,44 @@ The following diagram provides an overview of what the timeline of this process | `~/debug/diff_pose` | geometry_msgs::msg::PoseStamped | diff_pose | | `/diagnostics` | diagnostic_msgs::msg::DiagnosticArray | Diagnostics | -![rqt_runtime_monitor](./media/rqt_runtime_monitor.png) +## Appendix + +On calculating the maximum lateral distance $l$, the `pose_instability_detector` node will estimate the following poses. + +| Pose | heading velocity $v$ | angular velocity $\omega$ | +| ------------------------------- | ------------------------------------------------ | -------------------------------------------------------------- | +| Nominal dead reckoning pose | $v_{\rm max}$ | $\omega_{\rm max}$ | +| Dead reckoning pose of corner A | $\left(1+\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1+\frac{\beta_\omega}{100}\right) \omega_{\rm max} + b$ | +| Dead reckoning pose of corner B | $\left(1-\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1+\frac{\beta_\omega}{100}\right) \omega_{\rm max} + b$ | +| Dead reckoning pose of corner C | $\left(1-\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1-\frac{\beta_\omega}{100}\right) \omega_{\rm max} - b$ | +| Dead reckoning pose of corner D | $\left(1+\frac{\beta_v}{100}\right) v_{\rm max}$ | $\left(1-\frac{\beta_\omega}{100}\right) \omega_{\rm max} - b$ | + +Given a heading velocity $v$ and $\omega$, the 2D theoretical variation seen from the previous pose is calculated as follows: + +$$ +\begin{align*} +\left[ + \begin{matrix} + \Delta x\\ + \Delta y + \end{matrix} +\right] +&= +\left[ + \begin{matrix} + \int_{0}^{\Delta t} v \cos(\omega t) dt\\ + \int_{0}^{\Delta t} v \sin(\omega t) dt + \end{matrix} +\right] +\\ +&= +\left[ + \begin{matrix} + \frac{v}{\omega} \sin(\omega \Delta t)\\ + \frac{v}{\omega} \left(1 - \cos(\omega \Delta t)\right) + \end{matrix} +\right] +\end{align*} +$$ + +We calculate this variation for each corner and get the maximum value of the lateral distance $l$ by comparing the distance between the nominal dead reckoning pose and the corner poses. diff --git a/localization/pose_instability_detector/config/pose_instability_detector.param.yaml b/localization/pose_instability_detector/config/pose_instability_detector.param.yaml index d94de020a4a12..d9b11b78885c9 100644 --- a/localization/pose_instability_detector/config/pose_instability_detector.param.yaml +++ b/localization/pose_instability_detector/config/pose_instability_detector.param.yaml @@ -1,9 +1,15 @@ /**: ros__parameters: - interval_sec: 0.5 # [sec] - threshold_diff_position_x: 1.0 # [m] - threshold_diff_position_y: 1.0 # [m] - threshold_diff_position_z: 1.0 # [m] - threshold_diff_angle_x: 1.0 # [rad] - threshold_diff_angle_y: 1.0 # [rad] - threshold_diff_angle_z: 1.0 # [rad] + timer_period: 0.5 # [sec] + + heading_velocity_maximum: 16.667 # [m/s] + heading_velocity_scale_factor_tolerance: 3.0 # [%] + + angular_velocity_maximum: 0.523 # [rad/s] + angular_velocity_scale_factor_tolerance: 0.2 # [%] + angular_velocity_bias_tolerance: 0.00698 # [rad/s] + + pose_estimator_longitudinal_tolerance: 0.11 # [m] + pose_estimator_lateral_tolerance: 0.11 # [m] + pose_estimator_vertical_tolerance: 0.11 # [m] + pose_estimator_angular_tolerance: 0.0175 # [rad] diff --git a/localization/pose_instability_detector/src/pose_instability_detector.hpp b/localization/pose_instability_detector/include/autoware/pose_instability_detector/pose_instability_detector.hpp similarity index 57% rename from localization/pose_instability_detector/src/pose_instability_detector.hpp rename to localization/pose_instability_detector/include/autoware/pose_instability_detector/pose_instability_detector.hpp index 761a10b7a6bf7..0a55a5005dde1 100644 --- a/localization/pose_instability_detector/src/pose_instability_detector.hpp +++ b/localization/pose_instability_detector/include/autoware/pose_instability_detector/pose_instability_detector.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef POSE_INSTABILITY_DETECTOR_HPP_ -#define POSE_INSTABILITY_DETECTOR_HPP_ +#ifndef AUTOWARE__POSE_INSTABILITY_DETECTOR__POSE_INSTABILITY_DETECTOR_HPP_ +#define AUTOWARE__POSE_INSTABILITY_DETECTOR__POSE_INSTABILITY_DETECTOR_HPP_ #include @@ -22,6 +22,8 @@ #include #include +#include +#include #include class PoseInstabilityDetector : public rclcpp::Node @@ -37,13 +39,31 @@ class PoseInstabilityDetector : public rclcpp::Node using DiagnosticArray = diagnostic_msgs::msg::DiagnosticArray; public: + struct ThresholdValues + { + double position_x; + double position_y; + double position_z; + double angle_x; + double angle_y; + double angle_z; + }; + explicit PoseInstabilityDetector(const rclcpp::NodeOptions & options = rclcpp::NodeOptions()); + ThresholdValues calculate_threshold(double interval_sec); + void dead_reckon( + PoseStamped::SharedPtr & initial_pose, const rclcpp::Time & end_time, + const std::deque & twist_deque, Pose::SharedPtr & estimated_pose); private: void callback_odometry(Odometry::ConstSharedPtr odometry_msg_ptr); void callback_twist(TwistWithCovarianceStamped::ConstSharedPtr twist_msg_ptr); void callback_timer(); + std::deque clip_out_necessary_twist( + const std::deque & twist_buffer, const rclcpp::Time & start_time, + const rclcpp::Time & end_time); + // subscribers and timer rclcpp::Subscription::SharedPtr odometry_sub_; rclcpp::Subscription::SharedPtr twist_sub_; @@ -54,17 +74,26 @@ class PoseInstabilityDetector : public rclcpp::Node rclcpp::Publisher::SharedPtr diagnostics_pub_; // parameters - const double threshold_diff_position_x_; - const double threshold_diff_position_y_; - const double threshold_diff_position_z_; - const double threshold_diff_angle_x_; - const double threshold_diff_angle_y_; - const double threshold_diff_angle_z_; + const double timer_period_; // [sec] + + ThresholdValues threshold_values_; + + const double heading_velocity_maximum_; // [m/s] + const double heading_velocity_scale_factor_tolerance_; // [%] + + const double angular_velocity_maximum_; // [rad/s] + const double angular_velocity_scale_factor_tolerance_; // [%] + const double angular_velocity_bias_tolerance_; // [rad/s] + + const double pose_estimator_longitudinal_tolerance_; // [m] + const double pose_estimator_lateral_tolerance_; // [m] + const double pose_estimator_vertical_tolerance_; // [m] + const double pose_estimator_angular_tolerance_; // [rad] // variables std::optional latest_odometry_ = std::nullopt; std::optional prev_odometry_ = std::nullopt; - std::vector twist_buffer_; + std::deque twist_buffer_; }; -#endif // POSE_INSTABILITY_DETECTOR_HPP_ +#endif // AUTOWARE__POSE_INSTABILITY_DETECTOR__POSE_INSTABILITY_DETECTOR_HPP_ diff --git a/localization/pose_instability_detector/media/how_to_snip_twist.png b/localization/pose_instability_detector/media/how_to_snip_twist.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc66a480e7698f917953c357cd357d2589ac6a9 GIT binary patch literal 179156 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�gI(gdH3*KR4q&1Q=H9<7CbK9P%D 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 literal 0 HcmV?d00001 diff --git a/localization/pose_instability_detector/media/lateral_threshold_calculation.png b/localization/pose_instability_detector/media/lateral_threshold_calculation.png new file mode 100644 index 0000000000000000000000000000000000000000..cd919cdcb0383fa05746d67937011d1e8b2243a1 GIT binary patch literal 67649 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

~Oyzz1YtZ!b+`r-Bw=Iyh~bl*?|ourBqov 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 literal 0 HcmV?d00001 diff --git a/localization/pose_instability_detector/media/pose_instability_detector_overview.png b/localization/pose_instability_detector/media/pose_instability_detector_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..ea8f7a81700ae7084ef3320233d1fcc68131cf08 GIT binary patch literal 136030 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 CPI4&# literal 0 HcmV?d00001 diff --git a/localization/pose_instability_detector/media/pose_instabilty_detector_procedure.svg b/localization/pose_instability_detector/media/pose_instabilty_detector_procedure.svg new file mode 100644 index 0000000000000..ba45b1f52600b --- /dev/null +++ b/localization/pose_instability_detector/media/pose_instabilty_detector_procedure.svg @@ -0,0 +1,316 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ Get necessary subsequence +
+ from twist buffer +
+
+
+
+ +
+
+
+ + + + + + + + + + + +
+
+
+ Update +
+ + latest pose +
+
+
+
+
+
+ +
+
+
+ + + + + + + + + + + +
+
+
+ Calculate integration of +
+ the twist subsequence +
+
+
+
+ +
+
+
+ + + + + + + + + + + +
+
+
+
+ Calculate relative difference between +
+
+
+ + latest pose +
+
+
+
and
+
+ previous pose + twist integration +
+
+
+
+
+
+ +
+
+
+ + + + + + + + + + + +
+
+
+
+ Compare pose difference with thresholds +
+
+
+ Output results as + /diagnostics +
+
+
+
+
+
+ +
+
+
+ + + + + + + +
+
+
+
+ + previous pose ← latest pose +
+
+
+
+
+
+
+ +
+
+
+ + + + + + + +
+
+
+ Timer Callback +
+
+
+
+ +
+
+
+ + + + + + + +
+
+
+ Odometry Subscription Callback +
+
+
+
+ +
+
+
+
+
diff --git a/localization/pose_instability_detector/media/rqt_runtime_monitor.png b/localization/pose_instability_detector/media/rqt_runtime_monitor.png index b3ad402e48ba7a154489ba02935817e050a39f62..9bad665db17e53a78459096e615399951ac91ee5 100644 GIT binary patch literal 86975 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

cnd>v;ooUh2^yulV`(&Q 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 JrGT#Q{{hI~h8X|= literal 438840 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 z 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

+o z6A4gVT~2+27f)g;d0o1a8#TpkD26?+K=A>wdToS#Q#qQGL zIawINM#}cJP}Hpl{`xAs5k+234t3>aBy`FmE!ji3-OIMJ2731@B|-O7SGSManr2K= zx%Rp{xc9Cb>D#x5t&?p}*~((WY-??ztgH+J7sZ7+ghGB=O*h5)xwvR26!21Bu^(T1 z1Wk96nw3pqisHDVj^LCVALE3h$D;e{Dc@I1n=gXqNu;=QXHq>1Bh*S|Wi8&8AdaLo zx|MWAf-RJlRS+_Catn*dNl&JxayR>1gD7VL-MSQ$;&Id7Tti)R8+lzyaj7s4<$y?t z*PnTWwPitWxa|g##bAGBErD>DyspKT7)$JN>}Ovx>(3WQv*}e!4w-$XJ9I;qFou53XG;HB9RbomxEBi zD)2C)^g^Op^dkyuv9``?|1B{IMNMo@No69+u;3?_n}&(gem?}=w8of#^*gb(mX(Qt z6V0wJjun82vLi}j>33_kF1y`ty3L$#m?lbhS@06E6?vl3Q8PLxLewF(+GfVNrB+PU zN=lfBX4q-x4o@iRj9a|0x|QZu5uyq}Vk=@R4s@LVt)?IxiLiS0=Zrt%2#6BL+wG4d zNJ2A}{p2(#cWjjjX`_12dWIf(DNC2HrhjRw{c>9*zhFtVSudR#3x6Ai!L}Wn3Hl@U zZ*&YaGP1HLDJrlcbLyALf~fF_ZVKofWWF(S=NR#^eWa~XB+8PL)0LvRc|YalO+zE9#1Ivew>iY3q}bSG!m*TrVC5loTZYXf%Ic><+{>>} zMC=qmR1G)!xq&IVb&N8ot*)Y`x(;mlHWP)@oj|{yrFJ!&Gj0O1j*qH-2q30m$wb-L zh$cfY4C^>eL$jCziAG1_Qy|tfXH{>TO0)aLdd^}?Vp(#7257py1e%2X?d;jLlVI2$ zTY#oCa#MmFanyJgJiCI4hYrIN{R}}x`M5MU7FkSmGL2hc?EceY|BsGQBQ`#xt&aW~ zKk?gje?+xX6n@HgZQ`xBm(eM=fHfPoQ`ICqaLW}m*6cwXiGXGox++S#my({GWTnz# z*RlwFtnm=9yrMu1e9e_S_2eR+f8#@*ePandy5!*|`kq*vnbvp;p^Jdw1WiMz4jUor;Z^J zqFUva6V^d1ZrDzsvOCGNm1vx%VL4-1vWP^VgB|-dZEjE9?09Em(Z;ysMbyNW*#wD; zsM+6*5z3pGG398(`dAs(wQwOe_E$G`8)s%y)2Qf(r{g`Bc-kUtiOl$DRNQA#IEfq> zm&86MdhWPS;-0P84v}U%tA_F<0+iFYD@ex-lE2|~n((A?Ba zR#vwC{@Ze^_PQ2*9#)Sy?H;h^&8V(X2YNfI^Anvfe%W%fV}+n&MT&Qh0X|IaPn3H;sD!IrqZX~_abu_zKvZ|DbRGnA9m ztP=im(>w~Z+;M}rBlNCfQ;A)%rWBEgj~_N{q@ke&u(W~=%}I}g`chI{7<(b2;vUh7 zEt)D31@n^?1EJ;9)1--O_Hr_d=UhlIogdx6s9 zrmLuP7VDtcUBN<#6=`H2>**S>&U$ir|105V?5%KC0H`SRE zBR%%D``NJm2bx;FRw~039J-s)qX#hW&-c==vbt@ng?}KPWVMy(H~SaYi1*G8aC(0BuLDzYKRf@geEZ*P(U(Tzco>D~ zmf4CB*<)P&$@ZbCcpvS5 zwCLSfl5D0W8FqkU+R@n^-4~5ab=cp%o*ek^C^erh9apg^Ff0`fP5rWm#2yp6Zbd<& zuY5Fqf8aAPK|%;lOm(1h`mek_|C>l)U0oe-zWF9|=FGA0@jypKz>WgOD2RPallHb28k^g! zB-B5=q*Vde0fe?f>>|Q<-+jlPy?Zc;O7lbqwMBgr1teQ{X|w46>{?2NY4^6!;_kW{Nm^5 z=LBeOZejr8KpwxpB*&6Tv z4+~mh5|IvGP*V&LBlgZ%{cbtV5vA-j_P;TD6@6uGUQ|P(#Kg*~2p7=BKqCS~P~sq> zoEVyJ^A!GP96)P>Z@~b}=p1C4v3DMObBcsegl!2z6*nIKckjr*+cZr(U=Gy8w4G}U zDHJiK!^y>xkTY$^R!k%I*i2K917`!^Ukl9qGwb=!KaUkd{bB!A_Mds`5ic)3c^^-_ z_%;Fl!D0&bgkY;FNJm1(G!2$7UBxd?n4v3Q3*0Bh7$o0fN69X~4JoEU2EdAtj z!f|N`rR->+JsC-)nH#UZfDcxEMVR>HkcQH9l;-%^ZZ!U`O#X+v{9jr8gwedeo>yLc zm2e=;>i6H^xtA8>k6tZG0R4|FD#Bn-PF4k*<>hQx{V5MFypQHcIHo;oo%X;TPD3+#PB7>&{Kh+A#gLOe*!URXxLAETgZMctu$6{ zWzKn*^7Rip2!LIhp?<%Rga`#&*;QFX2y6Uk z_NJf%pZWiSMNnc(>nUY9*(e|c1TmE&2t*`;!eT*)02VAN`Xqi!rISDG5BsJ4?wG(x z#6*`c)q6IvM;Yv{*hi;?1oE;H@wEqOZfyr3DJ_GfBoCU=PGh5&K+tkb+{r1VrKRF@ zx|w~+T(kr?1_ll@Kx0cAUY~)}>84YsEL&glhUIJm0Ae-MW|fy}II zoVp_DYo)oRiBLqL={ji{nIt86$nBiRpKrT~gcJ{L&HLH8y_WKdN;)MblADo8Bp9Tj z$%kPWq@<;jl$?xCfHtp>7HETX-LdiHSfMpSP8k_7I37Eh7U@q6b~V z_T4oxF z&LAxf``EpsiM{0&coN)XXQ$HI=*903B1(~!(+Rf@&5e!tf)QMvL^3imaB2!ogOCxy zj5&buuB4!d5cK(IYH25EKw4TVX^9&9>l+D%Kof(clvDzt5aDnDJu!vM%uL)EU<7Gs zY{DN1pc)&9m>QZ=w70YnHihK$bX@9}JJ+8FnE!6-SR@u?`rmKK3_IIk(C*#O)~%aq zZV6Ibv5ODhUV@(0mk~Xaxa{J&e6@Zn-Fo$)xuu@3)_%p@%dRCQGnNTJ` z&Td0kB8H!*9(sVAZukqYtXjjU;e&8!%8pj*L{-ccChbkNoHpwe*6#AMVdEw;6BI5L z0cA(O3ELQRhed#H7sZIu<4V{dN|p2P^0GSm#e_(JFTYsL-S^zjk6U+>o{`BJ=bXc= zKmCd96yb{%pYX_YAM^BM_o6ur9{KCzJhONyOW%E)qTCF-fa^aLk^RH|tL=Ap0(FN5 zroySik6(Yz!h76|8$FO?#&l=Fg8Qj$F)+;tW>Ow^-g*s*;YyC3egVZL2jOx;eM^|R zS6s@(aU;0r)?4X$$Pi|pHj9j5J!|i;&{1fVH>p6VvKqikF$bEO;MSE+I9lL8e{;av2J7WkEjIjK@ z57@J#o@vJ(N@-4jzuff%sVO-$*45Hw$PwId-6fg{LlPEfP3?ZMF z*5+1I}tTRq#?3khGLJZHPFmN~xHvRA;k38@w#hrUH`}nb( zeai8;O9qjgRl*%N&13VI%XsgjPpEEEWagCczymk2cgHp^zi2iuzrU1*`Wo)KVLm}u z7Tz|Kl=Mt)x%(De;TmqaZXQ)$C!Vy-_ctv; zc#JlldGrxJ{c;WN^iKHNd|Y|O94c$-dFTDFdHlhf+4;jdF23LjUie@Ixrq_Zo_Q=& zFZnZv4(P_6^Df1aT}oX;3q@UfaP!SKu=c&zcwpf|3I~p%d#{7J>WT|+$2mM=1Q3F} z@ycRedihP#atley>B66{y@VytJ;bt=Ye~(>Wq)HU=U;ve$BgUE-Pd2pH`{!4?wn6q zRV~N=={(M#HH-vhuwm_L?z^XjJ_naFW!fapo_Q9T={cn2WOB)sbNOlQ*Szt{Yb0hD zvcKNX$)}#e%$dg!CX7-plpVXUA~Fh;iINchwkGada2K2RR->onG3D4POc~mVGiIGl zX4gZAv{us+2$I*iD`v2T-Sr0dKDdx!UDH_l`U^bu>`SEQ7UBwcY4$}h1)hBPA@((U zx%tioI2?`+H%atZR5l(;rp3K?_F%T6*Mb%HKG1jlg~dm>E$oaSAs-)p@BtgQY{zKc zOTf_4H79w6T^KfU6k|pVqpoTWET`OVbUZz=cQu! zn|Sx#Lp2eGlf4VZ#~J zzc(&SYASZ|{zogQZfK=v?>-zoX)?(!gY7@A=d&-qqrSNrU3W6fY&vLw!hatm8(7VvXd!Mam%CzaEYF?Ipu!8FSZDi+UbMh$@&{PO9 zgctty9AA9#1(#lUKDE0yuzdMvw6sSk=u*Nl(~c)e6rQkwzonJCZ@-sbJqtN?#u2=> zcqu_gBIo^SGRxmv#?~Fx%sBIGG94k7zPp6IHD2_TG)|a$3?)VRaZ&ewgQF#aiHWHU zbR)!9A1~qd`=8*1b1&l7{=I3~x0S~peVmOutGVyi3(++b4JTS8#50Q)v0=+T-hAgB zI^|?o!_jt@EhpA?^8W)4;U8qt|Ai*Mx0xblpj!SiccxrC|8ChIibyD8$kOK?mUGTM zTPnS6Qrl1`Gfq51Zn}QHlx(tK_x?cgjgKj+5H`b<*w+O3+s?FD{%X6OTV#ssmvOM*Q;4@|R@Fv}sb_ z)GW=dO>*PB>t)u-r$}?iD<{vKDGTqtU%WoA`2G9kmRlFdrB~l7hUt?9x8EXXpEFxR zrYWWwdkEH0@KwnL$B&YQi{6m>kRjo4MBe?|eR9DC=SY>;EA{pJWcu+Z$}KltD|@yq zm$c3UWLsH{Z2$H{$?ZN$c2_q_#kMsvWcZQt&4$h5_czP)k1dc{XPheE?$|BIPM;>N zZM$X3TTe+*PLV8H@}>N+Ws8jHQzARdHp>k+Tq!qRbA@=@TBV_;Tn-sNN+^}X-7DXJzfO)EGfsAwl}mfu zetG4&zse!wj+dI6-E!7(L**~`KPFy(v#eV6flNE;Eb)5F8ft!&{s#|~SKnJMt==Z7+qOz39(AOAUsWs3&CSx#&>+FsQ#7of z*mE`PKSd(;Puxc$A`%f({K0_yxbX*RYHF0Grlw!~tX{o3*4_2>_44SWkBVuAMT|E2 z+x>r*?Bookdo38dHT_t z+$GQ_|$j zt8N!>uubl|{ycHHJ(8K8EJ-e1N)9?yzS^`$0wQ9>=2JsN0^+UTA=4)glY_eENI_bn zXpT;D%Y!e={kL8#9#6X5a^ItJhm;zP<9;y*EgPu1j{8-qLf# zM5%1_%4;t?B&9`Z(m6j{k`t2T^s5#~O~XE!dBiZ$64Iqp_mMJv)|pbXcb$wGIZ6hP zKVJNy8oB7yW2HDJSH9e|Rj$4C9LY>ck-}aFOKy*0^4ZrL>=7azYr?;1d-v>>JMUT` zhS@5iP>qZkIZE!m_hIpeqqBaq?BBOp4jC~)zW?EK`Eu3kGULS4<%%nBlF7%;l3f*b z5->%=hAD;_iH+fZQ}h0>ZOM`)vTohF|8Oh*u;1ED(;8`Cef5?62QYy)$CpxwBLUr^ zqZ<)+Z{JDJzJqWjCy}0!#^^%^v3=tPBx0bPDL6dIBqz8SG5jC`ZB4ZL{WfP@grJ0| zYG|i>&pvn(TqL+%@%31i**m~LoqHZ{yzwH}Ty-@Yf834{5dnLs-McG!@Uf?vbleGCe92t;cFspd0%*SiwN!v8 zh3AXIvQj|?SOqDrL|jfCj|S`4ZlJWZFZl(9BqzD(*QX~twrvN8PDFGx zcPa@9E=!5RjG&azQ6U21h=zd!-QmEYY3RC@9@SiK5pz zz~OM<)S#+t7d?6p;Qz39-tkow>;Hex?4FX|APFf1LMWjZ6%kMnu^}q<-o4jeQLi2B z_lj5%yLhGB5G;raC@O-|q)6`xB?QuwlXG_G_s8s>a}v;NLGSne%=3DoC+FP5D+KuAhb1)2>p()Y=ETML z@Oh>70D63wJ|D>`vG`+R35Zx?;$q2emO}N;ZS35>g^~)Ju7?gJE;fdw1Rs7=(~HF= zC6StviWedb3sJF|u2D^+@HKQ7>r7I|2q+Y`_;t~5f*{ppMZEdOTQtkb=j+8wm^*t0 zu^wHjVRF}-xc~ql07*naR2WFZ!1VY~p%BUzoOQv)tX{jC%l>u+re%|s(UN)JEadY~ zr_-^Zm9DSbe-cnZ3|rBowJ%+7Y)-$+&58j{hF00pXAsDD3xmgbHee@w8z4s`Snkfdj~Wbu-3 zczfc@2vMscu569;DQz1QNzj%Q?<^uMIhhe7{=u9tKjP5CyNBJ{2QA>v8F&JVs_F_> zZ{0(F+d}+?i%_9ROK(oI_!#!?+=-=ZzW(|vULQA(tFF14<}I4x5nu@0VQh*-i8e`- z{FxGV2dh5`B1Q+62!u2VRPMtgKzKYfOHXIXj$(~>XW48iDke2O17Vt2^))(wOnBJ0 zw;E}B@ffCF^reYV5}%={tkk%GLbw@Zj+@Bw4N0Nsf7}Ul=+TL<=6%n-_dm*O&)$yD zYa;ES-YkN(OnCVv^4j(0&Koah@$8Se`-M+Y9s}tysjscnxqYUW(3xRg>0~gYVPis;jmH;@DHY|r%OIf{6=k)Ql+}=wlt?Wa z+Bm4dYuR{YB#>G-kPse^K`>Ab=z#B*c{wcpaTaxTwZz35>?z$xYHF&pNoa6Z7Z4cd zt}yMB0KeY@RtRC+n)Sd11C#;!JYK9|tsa!NNn%neyLT?p5W=?2`mII8 zCN;z7kHNymMx*R2<)KH{wq(Qwm^kiDYJy(69o`MsW3}JPsv^XG*cQ#wnz3@%4xKt- z!{+TfNNL^zY4{LU0D(=&@Sq3+inR0$f^`+tRFxy*J(TaOB`z_Q^yFB2b}V4Zgb&!V zubN9Pzl>Y2yO~+Q;2~$@F=I(eNM_(M$MW!lcQ^{BBqk=7jo-}1BL$|DaT}hFLTGp# zVH1~_OrWxy+I^LX=5c_RgoH$@D@v)W3lQh?Qna%aX-HyYb+nf)!N$~3E5ZOg#QOc% zff8q)=*}^OKu873A}&6TU~M^-rB%pu4`utxsH_VR9~*;D*aU1VLT=!WZzNcf^yV2< ztk?*lAjbpTA}Fz zZ5JKDcA$ME!tkNY82v1}9>Z4H#GnjMl!EF)|2pfGgnG+Di5QfKrES}Ma?=x7yM7h> zD!WrzQ^S$n4<$CvL*GNXQ&&BmlJZ(EzUBssO9I?^%MD}~bm#5|N76G@Lt+`W#4t^S zl-SbLDN@Qt1r=T)@CIwyyQ6}D9m^2|jv+BAo^}Pf%v!LJy?giQN(nzmN&B`fNi-~K zD(i4lmh}26oP(C6X#IMwzv^bZ>20{@zB`DQkXqP@8w$H(*g^h&%_Z!qc%CaSJe#hE z4B*9AMqmrC!ziuesAaH<2X4NNIm@@w=jg#yR8>*$t;MdlQCQR~iES%{sz;bYE4-GI zH7vZ?c(J92JMX!d$45TM-M8LKUfbS`eC%!pAKv{xh5`I436~@B`(sHfx0>>YXih5B~lZpq;rqMIdxDUo_g$lg!vH15AKU8j4&xd7`Rsa7i=?4@|TrA z9U{g8kRIB!Z^xG(OyQlkX7k>Rx%3`%6bt8k%;Xne$ZNO>vjSjgvZP3EHyzvR;|zau6&g~eaa<;SHf*t&Z!m=a|`k3+ig z(OXk_``x+Boxhx;jvdIDQ6ri9<~Tl^{RPuL`ARE5KfBWC6w2tUlz@6$kk-5n1A2F5 z_yt3m_V(LcHT(%uTJ`3Lo?S7iMPX|e5@|V`puSlu3j;-q>~!XRI-QR{n#Tuo7IN&+ z!R*##k~LCM~r`OHsy5+ zTN#8bg~Cs4Y%Eqq2}{0Rz?$_%l+-AK0zyJ7g33%{$gzF-^!=9@{p6F(`C=LWp8OFQ zFD8Pv-FO zlM^}pv@=NbNcs=x$C#Ji0#7=J_3TOC4(Tjj@HxGX?1te_=k${X@%|f+^WqDy@cG;& zy#MhR1h6oK2}1L#gdm(9sdWpj#&qb|i=M4Bxb^&D%y@qWuS}guW=<;-Jr!L0w@aBc zc{+c; z#~g0Ea42uRGnF&`b{~0N`_ZXY9yw`}AC@koXkR4`3X{`|0%0c6x8DHvtoVX|Jv5SO zGr!=|c}qZe5X!a9Yb94Iv{g|GLWY+Xx$U`l$dTNC&3R0n@)jS={DwLeizy^eJ^Bzg z-+l-CLLuisC#b0^=b|%CV#cglgzO+Q-}yH!+xKSOjv8z%?z-t}9(d?Jsw|xyEtSR= z{ngeMVUU>GjF!#4lx$wg@}HlFOv=13KcWP1x6sX|CJHIGC%AU8U5Hx$^(OV5qv`&C zXY;q~hO?%)nsyz!GhynRygv3(e)x74Q$Lu4@Fn6E^=w(Ol-k-__SMz#7zYp{FW3bq%OQW-R;6ADXM#3Z#~%&RXm z?!{3o`sN!x`tS>CEl1J%4Jknf7VXWlgdd+7&(&ui!_4WE*tT~s3JBHL^77ahP_ap5 z=eI}Lio|9uxaf+@xc|=U89DrFR&Cr(Eku$*!eEXEtBy_5B>!2A`|rPh1pFTBU$jF; zM7|OY4_*y2%!H(U`;K_Lu`FM?f|S%m1|Hdm?mZ4+(f5m}sjg-C9d~eOw*qSSZRdqI z-lyB4eJI+to^m3fhvL-GUxHy5jT2v2fvHs;eqF?9gt+_&pjr z!?hj&ix(|s?w1SLU0TK!mtRizE`_u!XiHsPh$TxFliebVv(G*ckbL+3ckHXI=GYTX zC?M6d&??WyLJt^IoS*ydLkVqOg5|w$g>$uB{RwOA)XI zeftj}!RMv2DnR>AU1-rPm71D*GBR4wzHMuI_UJ}Zd>o6H{6L4!JsB}_1kDot1Z!(a zPEDa(x9*q{DywWdckV`Vd<;Qb(z8cTax&71Pe|dr`3s1TkD>Qrhj7fGV_3arBbzpE zwj;Ayd?Wlq$J!?ZF-eIuOV4D{q9q^%-Me>DT{I)@~?b^_sObZ=Oo` z?w!fb&Y(}9zO4LlBdgb}CO5kU{rmSLHz$vkD^_57O^zNkkiLEUv3AXmlyCoek_ zQz%lKH=|p(UMya`j6hu-xBcS|x_9kBa(p7~3p!9yS&VP#M%T`TSb=&{nl+cDQ+L|tu>pL`u9#K|w1@D{9Hl?@05Mc--TR zKw#T~*!V;aKjaWLZr;lBm8;0i%%DTNHdF^}diCr@j7L%%u<72d2T3sob+vV5WoOa3 zOIMCM>PVV3OJ%|0rR>;U%5f(SrAN2U*nt|Fw`f6OVWIO*K`EQ+swz5l?MX(nG(v$o z@FsB7QGJQ?3TmsX$Z6Gv{DO9Pg-&3xESu8OQj(IAqgJMf?B2bbyu3UBYHMp*xpF0k z9@-nj6GMLMR?PqYd!8Tr0^?pEhc6+M)6O`P+(dZg-%~kkz_GMznZl$g(lSpZv&3PAJLaQ_%FTOI7 zqfb1Y-aWgpdCL~YzcG&I$Gk#vN&;CqIgEevZHAmajJ}8WCRAO)xN)!X)U(fn@Nx5< z_i+5cUVQV}CoEX8g)`1NmE<@dV_zE2fD=!kTepsQ6b|E%c86B%+RAOW-%Ihn8fJYq zljoj&h2q`236>S}?3mZdZPkWXpLv4YZ@-J_AI%{%s}8-bTWBepmuU$=ctM*)Z(fRmPIbY3Nzzbtv=i`~5bLk})A#BAr^XBl> z=;v6sVGCKUS~2X*VcdJmE!=(caHdcHfQ+nGTz=_=bZ+0;!Lp3(1;0ni%gR`>VkLe1 z_Qxlk{{VA>Y6#%~I4 zz2jbvI%)vvX{kt;r@6tuKVR0aT}whj0$EvE|CQ%A$)6`e2)1wEevr6>8x*0nKjkuX zxR*Hpv;{ypr_5-#ZG?T*yD@BC;5^-^u)8u0qAbF#Qo@Ne(E&18(&0Z)wvHck zq@EBS$8n;Zw(2%UzKQD0NI(9hIB=;-->-y<^sUPRAzXJc4Hmt~^AGT32Uk$JZeJ03 z8_}ru(f7Fk6PncAqPTbiQ>M;h)~DYyZTfgjsW4o!_n&BIq`U+AZuLLqUh61Gj>}Xj zg>8o@+WI4N=6u1lSxb5Gg=a`li9-=`z>9U6ma@YqZRyZxMS8?lW^`)-hgK_6rKp5X z2aNl`ET8+gL_}Pf+T<2B?nSs{r5wf$haWlID@tkh6X~j4ve7ddK5hRo7S)fq^f^(u zjr$F`#`D=JOQ5aM4l7Axo{ykqVMvJ-4GN2DpEFNI1m@S}v~Jv@hHcsZ^MQUnzzPz+ zLMcVCzMeH}*N~grk^_m$7y?jQTFR6uQ@G};Yn%dt?ApDZlF~9lL4gqyM@~*IaiWGF zH*6z0Gne!@#rjRfBqui`w?#ULDt7PQM^Q-~?F!oyV}MXWgl%F8fi1M_TG+d}{*uf1 z@cUApfBtbYo2Sw&Ba`&>=6IFDs;y-Eu3{=H>%bRBW^OL2euI+Yjg;)IMByPOE|Kh< z7MQ`k{J3r#&02OKGdYopvfXSiE=DO2nOV(=i}kZ%?KZMowZ35jA6Mtoka}tldCe&_Wts0tk{* zQ^`zFY%VS*uVo%pd$+K!EJzR!$!Te{%+5mEL3R~wr=+ZkdecKe>(-coGPZ9oA`k+@ z^b(htLT*kL)R(bkb1_u`8zVNBf;O!Y^)(c2T~Bp|0vf50-AVdGltbOqs%Mx8JV0d6i9|wv3`}Td1y+2-8P;i%e2elQ5~Hy0V&` zrM2YcW@8u-3RJOn-8Qnavq?!#*74Z;=ePgqGGoRJva+(87(@O)7j^KtgQJ&e%TXR8 z%949UcyW%}B*cDYME_-C_!H^WA&+>k%jZfIyh2o?&4KOT#kkT8j1Z69S`&&bhnnD0}m>I%WYQN1*E0-b+xUaDIa?VU1y6;iS zt7`RqLXwo$oTr}}MVG?1Na=0V_QsR_7fgN?#iJU=4U4GUx-JI}fNA(-z3{y9%FB!$ z`yxsSOewH!Nz1%8y#4MZTz+P;Ul|7~Su$zj6h8lQ5qFOGr^8kte&VJBz4`y#_OJrz z{9g*#x2Kq!hu?)Sp&9=i^$2MxaoC{{ciehCbHDsn$GtiC3?6y{_uqRjF{ZD6qO^6_yw=C!43$LWQ($ZV4VPY$I^vTf-KC)jF zBXr|3qyIYa=sM8#|MB-IrA;UhvW|~tyvK+Uqj5XdMiP^l%G>X}O-5SMPt-`!xL)c2 z*ZtHt|LNDC?uAG@e)HxkO)@fa$!MO9B|I8nq;+XO;)yz?IcvlnC5gyO4sqKF21L2BfJR|wCki1 zehj^dNw1GK`5nRZHdv$M^4p*+8(|pOj@9xH^RPN>NjcWFp5j9d>oYw!20@x&fO*uH0K+wjT>N>uD_Z__PehxkU1Vn6X z^Des`y)m&T#rKZ zh8^8cKUJ7*+Y!nj=RMg-N16X=l6JSZ^&@O_FWcC7!tYBquG6n=Ya>fwbP4($DulAJ z5rl-^4D~zK@k%=P$q2viu$7O77m0?xruo>;fj@7jPFJNTMx)I>UEAP3)&$PSm~>QX!-WIq{?h8c;YgAK+)E zwVQb!^}F4`68Oi7QYy?HoSU0_z-t;?0w+(N%(YivtABLX2<4O|T+e}2`^}K(6;->g z_2*!18J~POoo&0zuraiyS=e;z-kGYp5W7lhIO(KgNQsZp%C?}I1vvZ$~ zj=ys)=~B4bP(#bDR?s3d4&9v^UBHme!m6Bn35R7T+@FnNJ4M6;1S--8G#=ImN5R^% zWebxhPv-X9Z+9N=D*igzOYK*`$gy14%~^qdB`5G7CAMuNgkZ*u8BN^5e*tM=2@ES| zzi}XjJ&rak{b(j1-2VV7#w0NznGOR7p=89Bcrzmw0C%fYV1r>a%nNiCK>?ckR{)li_hxvoQ5Z;_0Vr`67pJ_aW2HuVS6Ir; zzBD51j8ncBg)I!%5qEIKvQZ7{7k>0F(*l*y0MX&Dvz>a|VOL$W^YW*~NhopOlDj5~ zu&#QL&$q6-&&g2~F5iM<-xLCgm*{i0{{Mk(Q2#eXtFX!$yGpoV%=(|pz3``73Zh=1 z4s$TVO1ToY9@j!ORA~RlMLEzsmTh5}&RXIeG8~mEJii*KWA5@GBAdIrw0dKc8G7bL zG|Wy`sIcW&hChj@H6;8&IqQu+b%u|*Lg^!n?LHqgU2%BHa%nfEKGcek6W*dZdu8)Nsg>aG7En zDS*HIr2M-j+=hc>6KazG9Wj6ZDMU})`sx}MzyB@+dv&Fxtdu41zfXswjz*xc%?Oo{ zX}BARo&*Z@6MUl)I-`g?GTM^hEQ;ZUHhPjr4P*t|w{B+Z?h-op>P3ucgq1+oE+mx8 z6KuQuLRe1OQlQDc!`DQ|mV|&R=FMBc*1eMRhYi*fUAjOJ+9vt$7hj-z-y_NI)R9=x zIFjl&irZXMqY^4*6J4@uWZU}ra-tVT8P<*?>eJ6f4Mg87KnawL2Eq8x>f>(`5j7@6 z$oaCNg{v_Xh-(KsP@VR-7W`Q&vC`v?C_Z6=Xl2l`1pdYi?7*_W)#sPhQQxGM(g@9& zPy)j_e7V`eKW(XWwaNbt5km0x+izjI5K4|>VM~FH?W`S|+D<6pWUAZR+NN~Ou8u8s z4r)pwZGk1~bx$a%VP()fxVmRF+Mydm8sU>wL{Jc2J91P^vd{{-UXPvJU15W;9IH48 zTOT8AVWFgRs8%LYMIw83GcCPtV`?Q(=p(V^tg%vQ4O6e93aPBHWiWhHR}v*mXKq?f zxemsp(gz$NEF@q#Y#BmnvN+r62i?L@M3ED^bmg>9Dm^=taM+lYBusTDwC&tI?AyYb zVM;_DZhyzvaFn^JQ>QjEpg18gO5-V7(srJ!BJUh@o!#&RC3JgTtzFotKY5@QX~+D(asevRVWJWhu%REMUvJHJp0i-BeXp@WSIybL!G1_zO;h#{(d#7?rB?TW+y4D*|2USZ%qE2yKcV@zb|6diI^p{>j0q@ zA=kvNFLAbfAy~6&1)qMskak_WhLynRG8`>R|Lq(>r5mfEG{%`Bg@fzo;Hf$0ed?+h z`}|mjT{#><9V-?u;;AvO5wI;Tx%ztg_U=WDub!9R7|(-`KYDPc_5og%h-ht5%G)p5 z=^NEZMDG4&)rk79^T>wddtoX#bZpT1r=S4V%dzY@6r?a@Y=pKn(b z2Xpk54L(LcGupc6D&37TgaNrvCMi;s~g^z=5j@Qyn^1WaoUPq7VTPQH43c?5+{TaQ4pdIB~i_G#C@^ z^-&am&f!ETGcsh{*C7axnfdeQ|B7B{lK&sX{Iyz1W6yyA>_C7Qhu=oG!w=)uQKLyt zN}yMVc07IUHQfHyY^3RNZV-<0BmkSV7{%-JzUG9BFC#flGU@ekyf=L|uT7amyr-Ha z-_2+Hu4-({W=HWB0+xXbKrwN+*8E3YABOX3of@k^+zD5E~4@OV6=q@?1H z@z8Hzf4cSQi_h<)zOtNM`%1BeiQ(~+l#)uU&p@hrYO8B0tE?nsgYx*vNJ++L3d&1M zsR;y;hCy;tGh+NELRcUyzW#hZfjY&Jy?aqtR?Izj-N6yZo=HlQ$=&ykVCuV5IAUNQ zo*DlDo3;e#n&;D95#@$&5R>;?Wj`hUmo90)ZyWxpyZ3k8{}E4de={0f(Rd4u{_B9s z-a)R>FS+8U>)|L_2e|&ADb&CFz5|cdUtao8y`ld*;$o&26ttnS)*s2?6yZfs+u)RT z1u9U|RqGnLThURo`h6-6P9|ss^D?XzsA$a~8V?}si2T_x6;Xs$7*t%^3atVQbf}L0 zU6<@A8R1yR1Me04|Ka=@b!G~GR1Gf-8~LNpS7C+MsTYQ}Mk?oq=x%BF#1du2e*gd= z07*naR0ay^uYCiCVIrkLet!ObE?sSzlr+rZS7D7S9G|RQM27>_(Ye!hJuCX>aEXmi z7LD$6$6lCWM>vYI6?LGI4GlX2Sg~Touk48?`Ck{)RyrV5XUG0$g~VO5T-TbREEY_e zNL~3}4j*(3pVZV6lM=^KJq}^a=W|#x<3oB4J0mh!qbyCW3tLfEwvW1+TIy683+H{x z(&cMew0aZ$yCm_$lBHzj_oaMqF;6{qFMDcztlm_`o%amqxPjey_320X^vi{$wC>E{ z6HaFLnw3m{Ya*>Xb!OYv9UL)mFt-f9iRE)XW8CzQc=+k(nefD;%$@%YNx7}qvtu8p zpMNbZ-EPfF+fD=sC)C}-~1%b4}aLM|FwNM240zW8Vc-LF2w>4r!w z$?sMGo1{sawx3Tn5p zG$Tq@_#Ns}LPW3*iTdT&*0iCT>nh&nepe~ntnNtctZ;s8sN6PG-rW;~b}19NDM|r9 zP`yNWhZZ0svD3IA1I~j52e2PB$zMvOd*aiyLcdHQQRr+U0|*pt=exHiQg}pfns@I) zTuL(WiD_gVemL#>9Ky19-X&P7QPdkIp;`FT67YCTc9qnzV@nazZ*cCF7xBsLd03WW z>9WPN?T|xyRyrdedyFy9J;$&Uj^?wupHgcZ?A%q!si$AS=%=4%=!r*DvagIThxF(9 zv16F<+(^EhIgJfPJFzX{1W!X*StTc(aynz5dzR}j9m?BpO{LzpnfdlqimL>pUmeFY z&yFU+l+^6o!^#!QDB4@a{f|7#KSw=8VcYERq^S>9vv|#RTD9wep)A&{T2E4HD&CkF ze10!2nm1?7vL7)#iF7E)W##v?8`^xtAJ5RzBu&yJzel1sc|cjHni4+w_+wUW+6}56 zjSB!enynUO9Tv93uVEpmz$Qcp2!IpiCL#;s?-bjy!zpE>>{^z6_Z?$inMh@Qy~9BB z>-dr(vNlP_S|uIb#Ih}1@3>N6TNbum#kUI<^3j~dzu`&yOT;-|PuZ4LeDc9`iuRO6 z%HGfE;VR??V6kEOd|rR;Mb;JXBIKqBV}n)B#?`BsG;tc`fshla7_poEx=KdOAxddZ zZp*e@2;7K~(h)lp3Ol`(0t*XUC=d#vtf+D|G)}}4>xL!S(V8O4*5Lt~y3n~*Y06b) zS&m*ToeXXwu5qd3P$QVBjVjtCe>sui$?hgI*ax1*jZa~Qln{jFpUt6i%NCBi{Bo?M z1lo6OM}C_EtfWMSTy-Ve7B6DMg82w#han5Fb zbxXfz_2N|&@7_g+b~((PHJ9_xzmk(r9m=~CUdFDkq8_kC45mMk7@rTH83HM>r4OIq zL-U*@65~v&YHKm1p)-ILAUybD67c(dWM?H)S6f3>O^9uqw$gXdiTD!Z@%h1TD5Nsz zJK$K_w#(#t(sgb5Utl@kIGieRvg>e?#&aj_t!UJR5QGHzjq>hX9?Y+(}P_fT71 z{)fHDCTWr;`6I=RZ40q=%~H-e`vSgRw378}R?wk+N1lImDk@mTTazYH(58^2lr(O= z`F2Wn?Btp&uOg*c8u^7in7`=9hAz#6SUYX`3Gn7?uko)Z#%Kz;gHduA)(cPp7JfO4 zN$-A0os&w`-X$^Dd ze8Ix+m$0v@7Np@Ma%n~M&rU>XlK(rRvxB3o%D>Dq<-{t~*7MmbZ_v9>Us4JSsqlKJ zs;R_Ol3Kr?W?j0{y+?PZJ@o{43_1$wkBypjCLVtp-8#4Biw`FwWh_@+eIadgT96Y{ z&zs}lA}OO4nQ1<*Ip+Z`yX-Q~Jo_|e{Cfh+i+4B}SB5?{0n)Z1WaBfvPOybQn3|Hztl9TQ}l$7W$A9gz%A&mdQ(FNAcr|CERo0!)&d#xc7#? zVG8h>UNX~SDBHUY+wM;1uI-sH`y1-2Yp68?>@3;A&|^*m6<|+UC25&?f6!}ek|t@A zKTHImLfX>j9-0jU3zOJ55B>V}qeXTuJGQQ5^r)vu$>_jiqpqi*bvAQ9`;>Ry{)~~2 zJVsWl0t(t>N0gkfV&!C83zw1CMRRl@tCUW%a4lro9cya~l5mj-Btn2Rz?2YD5?dHR z2&pW<2M*rkfq~AQrz(XK+P$ss6DTPV%0eNjF5An$?zxLiWHNZz5PU*FunuVjFijb? z#%i~&n`DBJSdN=gYG*92bJPyEC&DbG!In)83xkS+lW~d@TDfw|35WP88xaa2kXS-u z2#|*EM};C}3k**z7L66;-)5E7NtKeiKrL^)_!Q4Q`!dH~dBss0$L+*rkxYM(*PeZXX|orRU(kUiOIGmcb7Se>BabgXpTW~(-lBbn z4lMq016SWPoMFcv%EE8v@#v$EQ`n^|OV<^1?u8d};c0{T;h!IMrXqPoO?2IVse9A z6&ol0oBFa++73Gt<@10P>@42Hu97kk9`MD|_N0@j+_srb@4XWadC)eqE~mm z|7->uOKK_TbQm(E7|<<`7vGpd-xDt&BQb?GSqUuqdJaFXT*vm38kCuUDI_7=MjATi z#l!=aa1w$w42^U$qOcT(^f&iIg;YKyvhNwBUC15lQM=}n`5_pbc7XdwY%(7I0_OuL5H#yrc*FOFy1j#7>p z*b6(bmmk+|;gF+-929p+lQc<_{5hf=tA4OzJ2zf>0RBJ$zYfjQ(iw8jHI&!;keJw2 zRebj0$86YKM0I5qm3#NGXu&+rKI06gfA}FAwr{1RqLf>&zm8jPyn`*pyCXIicR^HD zd^2+r?OJ6M8|&w=BL_44`xPi^`1Jkp9NxVPDG3Q=X6EzQ=+~*VZ7fyGrloT^y5C{M z`24hJ)tNgVdWm42g{^d)o)rQasAT%Mr|Hr@pJwT~+&OYIrL`786>(WAw54p@`laNh z$8y$%=d!c9nx`JTkId|RR&3b8Etj9mF+%e$%&ct9W;zJJ1VeDgOcJcoH$@0sj01baP&AT>MfM2V&PXG(7#t9$qC7v zdC@HtR|K(zi8Lg(qdyC~j<09E%ORaQk(1q-cR%`q0Gfx}KH)|Dd}{p3?Te(R--AM+?%_f#-?%tW#ax-$By$9VSPYnb)%`;^qw zpsqOI4Y`r8Hk_{P84{@OS$&dTBB zgjlw}_6k3ad!5kA<>VVC@4WC5gzRwoKT4sLplx9{uDJRtZoU2@(vnOB9(o>g5;xv* zBWDde8B_XrZtTl+?%IX--hPXEJIL|J9F0c^`VKgXc5MqVl!X$KBl;aq-~NYzZ6G{p z9CyMgWThpOk>84e0|pXf81(MfpY|O(pp+mrvw%~E9!G*l(r3V6-Wc~9ZvY$)1;>21ctk3E45hA1l! z@YEBdNR2UBw_-W9!4Ulh^=&e`H%XKH4~Zm5sBRy3-h3C6-usecPd$g8J-cGKmMAwH z7y(KW5+1tt8OVqS?&FvNhvHH7#H3_$ShHd=*Is`cyS8rS>Ps&p zfRC$gzKP?997}3a4AKq}6BElR!%pVNL-KiQ)FXVmVgqYeF6M7n-Aurr!TIN%%KXpX zz&b)(MX@W{S+o&vQVYzOIJ_~?rEL!1%$vvN9VK`Z(`nnL9YWM`{GcP)w!Mh0 zo3~T6V-NZ5J0PT&g8bH$Zr^~iswmoBLRMi*LO{p%t*9^E#foLi*s-UEUPlf_QO}{> zTSI**n|AErldo3NzT;tdgiUO+AE82&>)xNi zp6AC>Z)>nqLkMT!TN-HDkW?#0&*M(O1rpYoQ4&QEUqTvpjCdGjIlwW(q-C4#JaB(E zov4B!Jv*OU?zl?_$6{jHU`sgpv|&!Bm5n7OC!IP(!xJbQeChoC+FP)cjoBidf-c<& zDalEvof?h-$!XPv8?WzzQWiUk_h3snA?@;;@j#c}&a-u}ZJ5#t zXx+6nU3zq6#>d~#{%@yI(7rqOkLc+H-U64T1H;s;XL@n(*)Ol!UrFJP2)H+B_vA5(Y4QU+f5Fuzc)ma@L6hPNk7 zVo;$#)n3b6AJ1dex-A5q-9;(I`elpQu(gb5CQah30WApZx{s|zi=5<)|3v@z3q|O- zLuo5yFodve$35-D+o>Rd+6qjsM<-?|3%|!l`MzRm>VpW=gGU%h8~kxGSSmziZ7r4( z`2Btq9!$f7U0)5#B4`CLWAr}jF}0>yT~Uh_vhl}z!3<&~c(JG_7!0tttd_XAB!rY0 z9uGoF>grsVoJj;wrb+&avY!(8b1{J~$fW>;G&z0jEAVtcA3H4z4CxGffiO(Xqv!<2 zVtB!0BHa_P4MO;|>jE6!UXZ4A0+FRNfmEb;)5Nwkl#NCn6xfypLSZ-nwl;Q{22BVs zgf35^FbxQ*5K5yGNm*EU{#`B^q>*-2i0A=BP{llJ+|b&QD(7%o_<6VIXm zB*IAJ+Usv+!t6pr_!lg5B&V`9H~vxBu#RVMMg3`@kWuoh`}2niEg#&GnovuT@` zgs^I9*{%<<20B?zYP*$Q^%cR|8g>-##v7Bwo|4^Elvfc<@*<>xL}Ex2g&v?P zf2v7Q@owV%@nmN-C&pt?R$7W6i^`e`dEr>vw3Q^DT76$F(*%e-9T{02pv zx6&yii+y`4QN++JF^P_?GuX9rE0%)#sv0aCViOGKAmZ{IH>rSsRS7GBVSw_VV-Hb8 zOke_pN21J_FnFNloURc1E4}Esg*PnI7= zPi#g8`EA?s?Xq?3*;gL6wYuILp+G5v!k&lFrbQfg{_Pz4bT44~>}3>o?@On)d2DWx zLHXW&OquclkKb|{UD~HJdc@7F{;C&WFIz>uPzXb_Of?4b{(WObAO2m-nhFJYvk{Dzd~EyzysH(>p0lE1EmSEyf-6x@)|NNFpX z{zP?MfJYyHmb1>gf^*KjipT!-yk_2Tp;_E}B83sA(s47zTxJ~y#L`7#a$t{emrXm2 zdE}bhMWg4?U}8sqEr|xwRN)i3jTi7}!gwN_4g1H9h^S>wpaC}p%CTtT#M#Jj*Xq-# z5KU99Nt)z;O%x`061neR4{^(N=koQek9lL_2jsQwL~eFEC=(kSQw33YP|Cuqs`c!b zenP^7Ab@FEnha1A=i&y$pum@!!)xOwAnNvU@4XMOXw^pAbu2(C10@Zl2;j3q2u#P- z37vZN?w(p5^md zv#G2oM+glE<|?8JSi0l~?tb_gjy?G-Ey5}T)S_08AP zHYc7pUVe^Qv*&|IKq>Ipb%2R2v~|g_O)NZENKBysgS^6CyzuJN3Cs+=X?eaRz_KgF`uTe$r1*D&bFepr}j=3<2N<`+{wUV1T~BgmE1n(uEG<(_o`300w(Z$R|D%r}-sf>RQxD=` z5gtOqi$O44_N<(TZu~L!$e4Bum=;vcWe|S2w(`$qv{g zP4eFnr4+$nkTq-8kei!(z-yK-Urzu2{Q)Q~EoI7-DO`Q^)eZ%&Mt(zRmJr)H3>qrr zuxd!83ZWcNfq`=F(NHb60_v+-`u#k1@2f!x6Odp_a`Fo(?AQ*kXlO??2{{U*p<~yS z19c@Ob!A0NoA^30*#+z^F5-^+M{(W_BlzcCf5$KM`eg~n{j4ms3q=4Hfw~G7E%=VI z@>(!F*uo|#JhaMhN4NH^2@~Ea73K_xH104WkIdzukh#S57g@gtm{r0H+G6YIt36En4uyq`~!=Wrx2$xwU;;gcr*r*7Ds|w$1JMT?7 z?RE_#F1WP7c8m>r%hccN@fhW;a^4qCZ$zH4zs#61gRHD9diCn{>pP`M{%6GX_|Bg{ z-{B5+ELA_39eh9$f}OicSh;#Fmt1-waj`xE!2tE4deU2@Gwh5r`EuSI^0J!KEHw#j zCX2X!B?d}bdUDvB>d1D?e+Gh3po(#0pW^VdF5{?vN8k|$p!u;YS^Dh)UYPbhkKKP8 zUXQIIVoX!hc)J$3@akHNCH+VY7SEf>yfu5c;UBk?MD$wFC{VVM^4Z8R*!Y|Mu4+>K znxskomqmc^H26E>LNOy@9?oZ@(LGKs92I-_^6iAjD3YwMJ0I5I0heo3YVRG5*{fW#Ur{N(V^cK)s=g=|K2-U z@coYC*KWeiu}bO&8V-0Ex!S}}=kXXJCFUD17@pJz0xvv6DDh~X$UjoT{S(|^OT znFeJy?%znM4V>S|(r>v@q_@q?! z?A=GR)MUcLQ%CQD3Q|*5$+*{E=id`1vwPn@vT|~{^X~f?aP*Ow!l0^RAC{#YgPXQI zhEH)Qf@OOde)A2S^^d19yfEsa`aQJ$rEfGj}p*=!G2KDYGeNuSuGuN&XNq1f-;A^4_O&!0-{hk-L#}@JrVpL5qS8 z%>Q8}w(tWcwn9T!!GB<*lcY9p!KYt*4NknCEu2i*MpqupaJeRFk|z1TDW*QGXe;2R zO`E8ztHUr1Y}-akNlHoz&6_v>Nd>V!7(#d@wRJ&^SO-mCnAFu*Q}h4WJMTCts;uvS zZ&ioMIVYGIa?T2pBn!x5LNR9q6%`N=6%&dgi)+|*4VVKcMkI&<5mCVef&|Gk!!S9g z?yjo){!vxkJ%n|4pU3dL&iQ->y1J`woqOumy}x^+&xg+d&9Fe6KdKfGK78I%9$xe) z+xJ&;-=ZaCB*(C8$M-zG=pGv7d`1mA)r_E%8d_5$ufO#+8Ere#zh5tF3YC2I%}z?H zbjFStg0G>L*!U!#dG2{U)%nc4<6(LaAHnE;-BD#d8`r+W^Upm`NJJ8i!a;gQ7e);3 z&ujl&LXW>KBvh5CRwa@aYM~bT^OCfpf%os2y)mpwQ5u<4`pkJRWKrG|DRK@#&HVj}M^+g`t}sh=8QNtc1_L*v!J` zUZPiSE8GTj>e!yfl0!WI{41O`s6XH!j5^*~xr+B!ZRFXf{(`By)R9I#Uw^xkLBr1{ zDKZQPZmya#4G_qNG@>FSa42RV$j%)<^Z4IiV&UDhn6daR3GDDJ(xXY#+X0rtE(dvmUOMo<(2;yljLMyIh;}ht?h2lpPLY^;3X9+)V~xpY0U$ zKLvunHn8|L!O_2Jr>?G!<;$1qmd)U zWwhyVikXW_nn^mV%8FU^&=T5rKZSmsIv_nIta$THu9|)u(OJo;W>P79x+F6>7THu! zZEYjTQBjs3M$2xfg<9y(Oom|~gy6P0bNxUm*gSf&IZ^n5-m%|X!45%AStbZH)4v2R zwvDn%Gbeugn&1!3s|lNbhM}10WQ0UY1u4w5GK!-3HIB_@H%U-iX8uBxH(~L0e98q= z4h8}5vtZ345R^pA7KQ*nFZOkT02J$!uu{PMAJ~QGAI{_TK0Ylsb1DcZS{_uhGnZ+GPpt<>|~mP5>)a}WP~cs8oyK!l#aEx`t1TS_JK=ZjWcw{PF` z_$B*T@TXYcSl~ew7*YwEYyFw~f=tgrOxYi#!vv2UtN%0n0>A#5pIam`Zk zgT+7^GaEFkw&5P(*ASm*oeJciJeFVU=i@Guc990&m}=^Argq2KT00hxROZ;7-a;?L=s}VBg++=FOc!Ty%6$6d8e+1wmL+D)G@_eEiOO z+FX4WiZIYT^(=e)Q%0XLfk+h;Rb}?Pxvc#73zjTc#AAP7j8jo?BT$u4Qj?O{|MPYb z6OmdaFFy4oWkv#vW?xT;(}4jbWp`)A+bcm)XeiuHN&V|wJ8e2KG2!gqR*rDGiHr>M z*F`?wMY@GrsD=L2Bnd3UQb*GaRENu4G>B2zOqb_rxt2q?D%7y_x- zpu}b&ptbb-Fj@fCuzd_Mt2pTzI2|^?wZLew>MFQvC!#+J0JKP2@;1SCX?}x9lz|XZ{@QP@fOZH?-F9u+Hv8evrr`Xth`WjZ@H2B(tMUY`cJ&NHIXTy z^y|@{E$iQ-s!pS>ypE@y{3qq5g*M%X54%;>$mKnp{j@#Z@jXodSzxk5qo_U(*UVekaB{e}aB1n6_F=P-B5`JZp zl(wcQh!I3kg(tgCt?6HgUdi$omU88k*)(YZBP3G#=V1HzSidnpII(Z%zo&v7fMRPQ z%|Mc1Fc|>9cH)0CCu=QFKfZ(;XD_6t-UC)CJ;j!;jiIo+X_++z=u%<`g3PIZ5c2b6 zaVs@Iv%r@`x3C(*@XJ_{5(Uj~52a{x@?x{>&?{zDk$j=aOU` z;)bcyIDguF9=PdD?wvc6S5~Y+Muc&}l~afgb#nbh7qhRRn51_7$n4UCw4_-4MrOZt zG?36)3R^cL&1yr^Jkl+bvyc*D=m=Fspra#@LN#?cdL>)G|B6pG9i~ZxPzMO<1)*9# zf>`%B)-I@9JUFeO6^X;}Vc|v*!K2RR=2azgk}yA!Tu+7E)1JLrGp4KA|EMCt2A!Tz&1;jF~u|!n}Qa z_QkjK8aS2*AH0jq)JWcVZ5fA(>v(zjyQJo3k(JZhZ{CFfsH&^0Brop>nkI0EMUaw_ zPIRb?+VWzK7M0PYgDw;jQ&LDujK`%ac?tNn=?)M~iF8ZP$tF;ymhof|S%$ z^7rl{CNZ7Vv_xtuirJfAPDWY+!dFFUStGi15D^(kdS(V8hJi~p!ID#WC@n6du(*b{ zT{_~cuO$D_K_ZfKNlT8yq1TglxPY2k53cY?(las$4GA&%`yC$pzamrTXCUw*bsx_@ z{ump-+QOXM=dH4h@XN#}wc(a)$6+A2^6IPc$|h#adz^&$45nUrE+DC{DCUm2^Vt65UOJyT5FZfo zJIkO`?Xr<9;7(%QAUOtrj_2-WoCL51FfhSFm)3Wt8%Dqk;_rDgU>i)w{BY9qnv)%GCw1L2#W%mmKVjQ?eqlgRi6HY| ztE7-r{n}S?Y$MHFLhOzPIg+0Q2M7F}jli??Ut@89oaWfDl*P)wRiC<9AMNXrrY0lk zyyN;5#G}2)n$KMEo4?FHW7+r`f40=?Xky!)+GiK9mQ`B40t%%Z%T7Mg?-19le8=Z_Ve-c z9q=KOmSN0)&wum1`k#=gh4b>+>i3v4?;ds^IZCvu;qkf=NNOs|cxmZUA~L%(v2PS! zU9$1Z?>Teac;?T#0#Bolss;~NTzw6hxw$NT{%Mli_U#{n}tFA}$`VgUU z+&JfMZoTe2K6vYOZoA_lDttP+F6n#9X*~Yiv$Tno+&||QmaX0ddOa0&Ue204m47}w z)jtm?ikJNTyO?+DJl1Xg7U?r++om%Q{o_ea>DdvNlqi1LDl|1UvFM&#*qL9$KVMwN z!g=$kXl&&5H(uhVDOa)ea4oOB@-jDFIEkd5BYFMhzwydbe`EH8ukykx|K$6Rmhsw( z5Aim636D);{*ouTXk1rQ11NNmHN5%UQ_NlXGT$HC#{Mmza`ohExqRM2=Fhl{*Pnfq z1&_T>ZDkp%D~xMzxr>``xRg+biY5(|UwU_cLlT(2mPn1J`YIlO_ATyx@FB*H98T*9 zjrmJn;*zOTh;S<)8#r2!Pjyo$Q?8v(QWX63#afmweUYorAIE_MM|t{hFOi$-LMz+P zE34KqabPFjc;gLjd3+gzhIdCQPM&!B1H^UbaNUhFKseC6hgtXePZU*DB2@=t#*arD zO_Y|FkevP=(&;iazIrvUy}q1weNHDSy(1v0xTl~9#VY$IOmHUv#js2nHlJ=#Lg?5wix8*T zmI*kma}*UJOr9hHLmEiT#Wx{6o5c8N+|7HziB}eRf=_{C+3frOY-N(R6OIL%71b{7 zZTlfv-3okTeQ6Nvs(mbnlH-0j@o_Vqz{!{lXkTp@5deVASL0@~kb!Uh-H~-tfX4}B zeS${KbO+KO+1adR`7ihgYS_=V_5U$0@xPqLLfTKry07(x|H=F-K7xi|Kzt`U`$Vw# zUo$4{@gsxJ4jxy*?HSGQD-8_5ur>h_Vb2;{KJ+kU^*+|D-^iP9zJ%KeSQ}hLfaXw;iU7sM8s?uw_fMdbszG|vK6fVXe~Q` z{DGyft)@w{r)9h9u8XMXL>_tUKJ=PG#*P}#SKsF|=k|L@j*4aC#Bp49=_Pb*mrmav z9rRB@NThI4ux}UhXWmPnfy3DL;|?aDb3V^J^9JRW4S>Y)2XfO9m`jx+1w!i7RF#om z<|8e$J&M$bjtjxt*g&II=}PKNlok~d5}iS)D;z~J$jV6IryqAwSXP50B$m{K7z9mp z>fDZs@=6L0=TqBQPkdT3Iw2&)C(=+=ijHY2M{lG!uY@1BZ|9Or&ca^Gm)vs?o!j;# zAwGc%E*g(ebc%Lw=euvVGGWprTrLHN<$DOSPr*}V*VlpXib>$Q%-Y1lJ=FVb*0s=l-7}* z&%m&*Gccpy6#pwD{I@p{K?`VeFi5kblf7QHj!_!*96ofA`X=M}cBBDPL!g_^(n_EJ zyFDodK&t^5zkUU=>Fvx=1n!fvm58~*!RxgqR)Wha(E z^XD4S+F8q!F#Bm2nYZ$dGkhuEvtaAqF@b)Sq;RA2#Fyy z)Qu{AxHJQU2tuNw2y?ql?GgCLnl8ccG_vHbJLuNEHXxKumWo@okJ&=KBx_U}JPrN`jLY1ebXWml7y z-H!0EPz=ouS_sleN{C5FW#YJzRFxj4ZSTHx@7W!s!Nu3y%)Gfb6B*{B&!8Uos!MqF z#h2N+=LmlpKOUE-jGHgNnyx*1Gvn5~@HF|*d_Iie@rerq7eZQdv!#zRaIkm(0qPrd z)~;H?kYU4F_2I{)CdZ;H5}jsgum2DvgkgzlV?@Q_Qt%mG z49nY7^9kH8Ck|CblM06J1nENen3cNRZpE~8={{7f_0OSNN&zoFeEkL2&tAfmsWWJo z9%ELzl1`@0x|5GSS&Q4K<-XfyQd3jRl~ZpeDmAuZ8|V z^qcF~gEfxA&`ofoG+U8^5S9R8nk?+qSfE;pCwt*EQ@RKQx*oWP*_PFY1F9;k*t2^- zs-+nefG`ZxaS(x7oZU)`1L(SjAtk!~`!PEt6O$VFYOC1&(~mT1KK~@8TM>Pxf=^g4 zKF77;j~o*q@KRfGn1v56Ca;c>TVKwBLkFoxV)`eYXhc}x zN1CR7!vORq^7rrLU}0GhP%tN5P4k){O-h93C2!v@3M%UG36oD-Go>iOV-0lOPLClm zPNMaeNV8&t^dayfrG_TJD+$z*F|4HIQX`P~){?ibo8U&8f4Z)jVzUyl8isB)A*@Y` zG{?UHqpp^pckaX^4bz}6h53A?rTr4ZEWarAAemd62YXi|CDOi^mA0a(p^WW2f2JuI znHjnn32(hthMljDzz_{2vsKMN0dGAo{NrI(e)cU*-bNPApU0+eb|3{PmR78`qJp2c z|AZazs#*Q@gYF;`sQpPZ3=^PA18CsuuQssc(PsjDU_M99kZ8I@S}(b@w*bGk=0XVE z;i1IExhO9_#Nqq`ywVkL-7qxEx}ac4(@RYEcU7WDP*s=T0-*$Upn&=A*Oiv?&wsp3 zul_@M@zs|(W5h6|p&=9}Is%_C<4O_sCP*bEDG|jm*th#|?|6W$F`-m>Rda>)<^?bQy zGmQc^eDnb;-d=@AaWQ1{7?PuOmOk|qhwD_PU3(=5cmBwypM1kP7hcZNm!2guG8`1s z+ek&nQ&)vo55W}`gQ{0?XzxA@H4KkX&=m&>2?+=R?K^kpnde_(`P*;u$m5Ghh>pO_ zKKRE<+htm(0O2AwA)PiUVHE7$j#S)~meddx6HSCeK^Ov|M3b17ji@EI5j;t8D)E2a?m%NNb%*a$*ce4&|ZXrQk>b5s8^NfL*(Ga@PZY zW7^F(GyaUzaSI7T1JyxjbUZ!!_2b;L#`FF6-%;a(ORu?!-hBq(Yih*j_2BXN5JK_K z9p-XssStjn5_m22$D!ZB$-*9X28wD9I{!vd8h{UJXh><`^XZ@)V0aL!hG7|^456Cf zOaMmnV0Tquf=0{*O_u^qYhvxH_j%;OhcGmAI`Qcegb!h9l6-(>VD7%82i4&~QB;Jg zqDcY5hZ)LmEk43rz_x7on7OlVq1NNYXYt?=5_A(JXa?9-NKXEKnVJ?Iox-we8VoF5 zn}*a4yqeiVZ+$KI&!5BkjT`X-s47A?0hy_Xz+5QN0UtsLf64(<9=aKoC(LtoX={Nr zbDxkcQ9Hj9|9qt*_4stYJ6YgZwKZCp z34m>_cQ6nXmdxwxYk1ZK*CWK;Gh+YN5-qaWfpL&t>TW^w@}yAgq>GRs1nfp@)wF~ArG&Ad>dFn z0O%kz{FMWQK%%p2>qchGxP=Cv`6@}>Y!fsTOFJkP+x?9egV)ozMgn1CE z#86z;Cd+&;gwRbup*m584@3822w|q;_?62`NSs6^wBouOuA!#5km3CYFlfYIX!5Bz z@FIk%3DUGCgd+?g6jZ6B80M(Oseo)mvGckq!L=RCa@uC|*~g!7@uUm+c-@DD zI5jXNK0_cBa3IY42!T_=8E1^6Q^y3JSa=uhayzr@=R7NVIE3srt*I|R#Q1YBVaUj_ zWMpPAf8HEUJ*6L~o!Xb}Tff2O07bF2&*qr$c^jEEYd-Gi)+~SfExP2!v3Sw_)HeB8 zaL--bFnt!q)e2eJow(?%QB+lw(eLyLbn1{sa&iJu@o_x=!b@Co`L$FxHsM4EL#0>m zKIHA$#-&%^K&Re)NlA-h!pLEqckz{!HF|J4pi8eloO8i2wtn>`BZi+&uYRZS#N$sO zbRD(1S>g{x5(f@7~m##2k5XZC%6Wyr8$L^vE=I%zU1SAI-tdJb*UBe{G2 zJRW=MIeyrGlFxifF!iN8O`BTv1|`R9%&Dn6F0ubam6|9Fa*o_(H& zmpsOpF{3~>^3IAkNXg1Y^EUFyC+pd?=}T&BDtT_{v%L2Da-Mo-DGMKdgkdAc5+9$& z`Ik)QqAM=tqRTF)cb`7=?c0aMgjj4p+hA$|fqy=7{MHZMG*g-y!0*1>%IBYN!Y5($ z*l~2u&Ed-pAMx#X-xD62$k;O{l98N9T~!e)-g}25#kHueFoq5vNv|H=QKgT9g2Q~U zdL0$j_4Mi2pTPtA@$uSs`Ekc?!ef#dcjg3gGsAEgP3+sbodpXPkkPgclP{c1@xh;2 zv+i@sYCN1WXdtJZ(g#mn6`y_h9y|6Fp$R9Qx^-pbn9+nOUcUV7Bfi+O2gMP>pwmyM zPtUFhsdH%WAr?RQSHj{GxpmsL7NPd4I>m2;7Dn(b?Xm&y8d%CRL(o+Y+5Bp zvw8E^eDU@7M8zdCdfY@>rzha8tK_Y>-zUGY6dx*Gd-P@Gut9`4bm}Wh`S8Pa>^oRU zR-5*mHEtxkwr*j=rmyfA4hD}LL%*KgPz@iuw{B(0{eLAZJDbUqCK3}77CagNgNpJZ z-dgc4Mb!(Z68hxfv1cv-u06{SVR3>th2r*_Nc-FH7A|41q6ty(kT+(|@YfX~A_ zufD{#Z@=NJ@neWmnmABW!RaGM;;TQ(tIJk1dh}S*5<*zB_9M3MK7czsii<9oMBbr8 z96WfC^Cq2VDNKFT*A;Q=tb52Wsb#_9N61P~;pov~vNO}ref50(piT zLk(dY#uD$$1JmrUZf6d1nDXgYb*KUj+GYYq&^Uc>^uyNB? z8k)Q$XJ#;R^cb>I+$1C?k<&&q6UX}+`Qo!r`DW`j)W}3Gyyzmd@&kOZW z8bb#5M^ThtaX0HiN(bj(GKKW)j%@yJ2lY*j#HD00ux}TlLYugG)=YYx(v^hdXs(}r zJ?U+`S*mC^JqHbDRzxde!d$5SG%S`$+tSvmkx9Jp#!6PM{)F=K3Y_k6+IH=Z>Ik7< z|3S=~8%AQ7lgQi-%$Rd4JqGq8HYt_Y-hQ9WKkTKUG@p6*JxXL`3?32AxtCo@XhH_{ zN;CrokKm2>Ugy)#zNDh2iO{H6dUxr7Vi;zoe}9;rN?BziT?U@X#r+46m7K(q#rN~x zM_*AE3q$ zpqkH!*q^2gaZTn7i9Nc!- z0!ED-feXwHn57u$f7&3F@CbkABfq=MA4|Y3^c&K@Um5*>i3AGhReZhSV=kEX0GD5J z1sREMgi+73<;%G5uKSpN^HjEf^Eu03dzBYfyieWXgZ%T!=eX#Gnbha+V(#48JoECa zB*+SGnK_rxj7|*g(-Fn#LKA|Jut++0%3sT0p}?%2Ty5klKGIqcv0 zBiCPbDX+f&AyNq^HZGQ)15YD9Di*b|npp_Kf0S6=iI~G+ioXLc(`ZIeAI{T#+-E?syh;d1E(vLHaWTE@BNW`Zoh*^pLrJ4P-4?l=se_fS|`QgcDs%l z4H`aQ1JkD7N^E>Gqb7{OClypQbfJ^kz6-qvk0K{G9z$qE#YEFBB7#?6Sjx{ws+o7= z`RESF?cR%?eNH1aDW0D`d7F=ZDy09&5$N^RJoD^pbnbKt`@Y}G%)1|F_8oWQ@>Qca z6~6iI2iC0qkh3P8hawGB!^_SezUI>}x3hfpdOBuC;s83e>xe+|^@l6DW5FWMy7)5o z@7ToZb)WIlYp<|-`$m?&{5qFhJ&k?aKWEaUOZj;1N;+nRF#Fc|%qed?qcu-x6(dYVc|XVX;dHO{89aIIo)(>m&3u`TbXzJoh*C%EmI}w3a8hgQKW=6 z;&#;Xz~V(5sc|x9cu$^s;t4c8l5;2YM+hBF*FbR-5gAXHjuE{5`b+G|FJ-~JDJZH7 zMOgmBii+($t6-SsYT+O;HHCitPbDEW1HHbQyXMXzzfooM@F6_1a30_7I>hbMC-cG+ zk5DAjnK*VRYgfL*XP<56$;aojcmDy_to)p_Mi1cqx8LI7$6w@<%g)0Q5{knxxPQSS zqEj;IJ9rdMMMeG9*Dfo-$PvcCp`#f%bc|{GwaloB)VO8FObiqp=uDq}J+^1DaKv)j z&@<>i)bxF8D$C=+yJqv%PkHFLKnfIRC}YpPgsIm}X3F&)P2&cZ_8OgjrwyU+z|&2C z&gf3em^&YU(!*Ohcfv$`k?~Yld8za`=yzH#LR2TNxHK-hZ4rI#2k|Q$yo8`@9RS z5v5u(FzJs4QOsoBrYns=5e|eJ#<&URFm{6NzijsGoXHnpN4%%DYRfg(wZ}k3$LgC< z36D|e|T(Ls(qoH2F+XN;ZTuhxRi zhXC7gXyEBXO=|_gc^Cg!(ruyNmi!>FnOW>t)D9Zb08b-tyzmU?UwS3C%$ZJvQAa~f zG56iKhI<};j&sMIidtX5U(UIhk2Y&abN1LFi28jEiM&y~D19dBhtoV&ak* zH25@9LPOa3^?J5{{~b3x@ONS(bjF`KmQO$1%*7X+M|_AWZd1}ay57LUiyvds1($LC z4cAaxyo>eQico|k#3jhd$)U8gnC{&>^7@AFXt2zG9XfSm*pM#7NCW9BCp$ZfvWgn| z^zO-~ANQg;UCe)A33k~kfkYbBtX;F3iIcBl=1o^4kT|55f86&TmruEl3ogD0y=n*} z&Ya4sci&}5pF}(|l(7@eqjOdm6^D!2vGogjoSMtWo3`=z6OYlkOFL8vs%#`VEr~jx zPHeQ`y$wHcq^z0*LlB>w!hnIjNeOY|_Ad>>|Gy#xjWv~Y>d>C9T{@7Om4);aBZNZR zcG(OY+LcJ@LHAV9wtagl%S!3qqa!QUf6mMsF93&1`)*wrae8;6(AXnASh{9Y#zMiT zIPhvdLfsB>Tcy&o<4{5)LYXq<8m3LT1`Ts^l~Ph!R7gx>I?0)le)m*?4?}BW$zxA5 z>7uK+>YB@_FF%D#uDO@ZTXx_wnutlw;+%`mC8S{xt3JAf@4niIvo3)*RojnAj)>?|k?X2Mdl8rGyZl6wja`{YeZBW9Oz%_;KrxOkX^exG>3> zF(cTpej}F+YmXuX!^e%{^d70yH#G6XH@lfUvJWX~X*BqJNTUYt`kyE+Z^F0Ey46!sn7k5_S`;Ka~sS+!;@H_p3{3&syH$BX7c>K-yulj+i_ zEvf102-VW4{puEtKv^vjd?Xy$VGf}B1GG#Ny%Vh8q;4REilRp1a)nzC7*_C-qWIk& z?DmCyPfJ^)Kv0cZ1D89LVWWn!Bd>~9xe44n>P#-YU_4G?ny@9RKkUus1F&3f3{-~$ zoGzR~MO6%3iVL@*Sehfl3La8|fPypdtc3t83OOK^fIgwQ;a2#63shlt{mb(L=l=02 zP--;LJJtV51b2|&@euspn3~}eTpQG8pqb_y>E`ki{`QYOLj)Z*mvjsL*~tOT0pPDq zs!(WZY@)KfnvvbRngd@^@p|g1tg0cqb8kR`OOT$NL|J()A~p^c#d5~gi4F@z^XinA zR+5yQ>Ys>Iy^dW!ZsqO;i|N+84;A$q4NVRBa3FD5{(=CK!n}jjHr2Ch?*Ss6(0|AX zdUfw%#xg1{%lA+xJvp8o`x+@Yu$MVkT}*D@p|nbhrqO5M(XDt^p_&n?Ky6(WhV+ql za4$!kDv>FTfgC-2 zgeIS1!6vhKyAx0hAM01Y%QLUOPq$NtQhM+ZUM&F~vu>#X3_w3L3Q zoP{AJPNAVooucY`PESw5K;n*wAUPq9(t>NytQl@H&4Hw zE~ky-_NnLKR2&FHn)lEeS^MTPo_p_e`ki_z1qDaZr3+n`py~c#2&864McO{0LZS&B zO>r=2#2Ds#;DyH@;UAj99SiQIQ%)vGPz`Ib6bhk{(bU&e&{zjV*!*hv3=ap2DmX7C z8Ab6D8XiVWbPV|i50jIqU^ra(PzZBIk{lb2ueO}xqfKb4oA~53R0%>#^7rmx%9U5r ze&Fe3C5GYk`7jJ~MA+}4L{d>%fiB_jfxQ$6gXGrj=sm0lPKW6aYgmvWCMFuaxSGbw zLhhV%D=}$pNRHB}sH_2mrM*-9=AYWqV(O~u*?%aX+L}6&GFs8EeJA{pjzaR~nz#7J zD=X>U?=*@IAI0O7{-iMG(=*M%%`*Qw0oInsJp0|vTd$#mccP>4=#%L9+SXg)WongLM? zX3&x~$DL5iBb-FUwqnuWpEG0f9D(}AQW{plG5?KPsD)bS|8sI2nrAxjCU))5XW&K2sKP+%5=A%58VQFRp$Jk^ z6F7WeEncq==@96$k)M9rK|)SXZkl-;2lnn^*Y<6oOTsYlmLD-wBM61uPCbZ^+Q|9m zpG{_3GD1oWhf4AO1L%f8RTZ-syOf~&*tugD1%-t?f7iW4iCR8bxdv%yxZMg3^))or zH{fxoM8_o{kqkd$939%{;FKU01*gCQCsrbDR9ucQPU+m5o!h^o{+uypeMoC>`Q10$ z=sWZbuAO!r-+uT8Uq7}AMF<>1p}wXXUDwft;ImIQa@x>gTzTDezFqek|6H*J6)?OW zbfKUK7cQZK5<*5wGCytJfE;rwnow{EXq6hl&-?e&fADbX%S+f-Sj5GhE<-2^imF(Z z2SAZtbg7V0B9Gy}fh{5|8(p3J24|H8*B zo@euO8*vDgP=`uQRV6-M$B+VdY%KYCKj71JROvJgmWqNaG?Kqex`YW6#xwJ#sr>!v z=UBMlcEWUn5Zg>`sN{C+j?<{+%@>z4<=RV$P!uz6MTw+mhfEIryoW~b2MeDy*@l1A5AV7DJh8vJd8MFA|2Xf;5KxG>Oxc=zz_~=i8pXM1P*-Em*i1dRn47C zW)Y!Q^4a#I=+eODa?@B_hp$P)8=@1Jo<&%so8hB}F|=QAG^wMgP8`w<9C4_U?>7Iy z;NfR-<+WGv#p-2je0&v(KZ0DMBQS)(>(l*pW(7W?ToS#pk~&W#;cgcxF-g=FAEc_b zfw&0xaocXxkTBvB5tV|2?g17lFg z?S3k^ck9mnL&aQq{Q@o+KaB9yg#Z0{N=gjFVEy{_&B|#0A{lnXb^v}!Bo0evx^S2! z(a;gnj5$}W)Jr;MppX=1{y~9la;3si{l&3$|yYFS|<`1c;D5rD3 zA)J0{Z%Vg)ixjFgSY0Rz7+M`|d-kJqn~hAn_$qR;l4z5i%;2HJc;U^3+KhyJ z>Yxxp&+eUh{i%O2?Yis8>DZ3zr%ho%pHH}b&J2>$(us~tVCF41U|2Od6=@(0fq@gD z*VCj^Re*mJE)W4-1ERa zXi~+YM03`;lem5U{aiQYS|VbSm@sY(=Us9scQ1aD9Xo%fuB3p0g9k8t#6YU^zCjob zsM3ejLr|QdXoiajM>JPldM=9=-b+&JcBCezam_g+NJ>d&{vCIa9q-^sNf{1RC8NXba&%=0hc-Y4Fs zq^OWnyXDYxzyO|n{dsn5|AwOne)F?hXShNAT6s6iyyj& z#g9C}<}cTgoR~6`33e2D6TJw%0s;dZ*{(5*MmzVIv~`n985zk#e+wv3^t_9Qng287_$f&F>%>1UXJ z(~YF2=W_dv*E4$j5T;x)nN}HD96E5AxpQtLIXMD{qVWE^?^BY0fQqAsXxFPR*%{d! z$@?0iXb2^oOE0^ag%3Z*_nY3w84|)Z*IdoV@4ZQBNg);W8tpr_AtE9aL-(Pm&J#^H z|NT5=X_xEj>To*$gSM@3bVEpgPC)as9kFf7*p9FV1x138CP>tTnZr>P(x0M9O6jlp zYo_8<@n>0-!mLkgfk0^`#g~GUq+~MNkyiWWEdn}2i(_oBF}uD0DgBz@;`fMXt*fiU zFbtZSJoqEMf8~lB|4BdpTRsX33P?{+|F5oXq5qpCq%~S>jo`0Nre`q*8f7H~l$2D{ zs41joq>&aAK}qouN=vKILnFw{%pxW%6mNA61;xdr=j0G7YRN0CAT&0Gq;MB?HDweO z9HmiL36F`UReBnw`3I<|szX;?xFaKJo820R)<|K&LCPu{35kj&J0}}oZ81j*3TW`D zghWJ>+o~0Y*T<2(0@B;&;Gltu(jv;6+_cF|p|Z4)qT*6?si1^Jkd>85bf}Z!{QVSF z)nSB0(Jng+x7I-Z(GqIvJm7GWl9felL^uw^OkpE!mpDTr6c1&k#S|4);MKtu8BJ#E z)`ZD=@(c2)uJM7Q5)~CoW>z|~se*%tOr8^xlSqqJ$U9O6 zscgg@7EN|mCZR6Vq1jx-bacZ*-l4-(SJfk(p~R=AlO7+9)T%jfu!wq(K}>u+>2YrI z3ks;IsYg1)36D)6J3SfMRL%Ya1vD5638|@M#Ya~`7K;%a~}Q{R*p6;fPLLxTn(A>pK@XAmE%P*Pe*aY+>p zcLZtaS;RzyQd?0#VYQd^>}*1$hr{~{h>3|MJ|Pax+eBX8A*vg^DB+Q`%}k}XypWQz zI&>*fL&M0(%pxXK<>-+k94)U!hKA9xRR&J!BmZy#bqyX=my7hQR>Zh{{Jdu`DY;#U zbVFrT4fTzZ%(OVlOA9F~sz8?l5fVmLZX04$owAZb3Jc4SA>riYw#J3V(foX>Ydt8g z5Hho~i3)X_nkPd;_g0gCw2YdXCKN>w5*0^wMk=1#G7c10l9`@@Vltw zBPBkck3D<#keQiz!gIE7-_D>xW*|gaSsBZgEn~`*DHaHn&9rO6KbIXdxmmz3P`qoyYqm>d!N;J!f-`<@E8;wmT0L$;o0&j*0B#XDRU_MLKuc2e~+D%6<|+u^MsX% zS15Mv2ox&`v9u;f1-oXdFt3+ZEeT;pP$__rI(ALn;3NoUb%{XRDn3kCccr<1lb@`l z}d?Frn^h0UMIvyQMF=L6T7362{%xc@K>4Ncbkt0RRVIXR8=)MT(@#YA8-_WR}p zMbMcOwBAf+_IbzV)E8D?gD0Ng`mzDp*s+KKx!4smq_qf`8U<--GMe90T79+`G_#Z# zmJgcGulX?aCJyaCNNrt{snu1$XGmg_Qpn9nML`DjGdO0@;@tvh=F@ceM~;1kUAILA ztdwjRiVum3VrgE2WvQTVdxjwy$=fSGwO z&59>Ze~ZDR(jH}jjDvyt9SVkpCW4pEz}ON&*Vx~i=Ld~Xr2ieUpI^WXXqo%{Z9_0f zXjUiN;#67@p22mr1IeJRchi!E@Q)RNznY2Akwz&~CtpnJpo^G!!xe;MkHEm#w(rL= zdf42zMQF3&04(Dst_Si(4~ed6$F8zAcQr!EWwT`{GrT4NkQwZ<62u!6l5Ypx8)A@H26MErJz8X+ydY-6vj zp;VhARjaH=^R~c#w``#4hc5np+w-t#;y#nOw2^s-bHV)!{lGuu4*tq&b@zQK#*vIz%S5TI~#o69|RJ< z|Ni@=r>D1o!2i!F7zFzB1pZdh!Tx(-O+*Aw0s=cyDgfN1|7}u&0GWR`D{LSV-1xEW z+D8_c^Dm^oHPH5 zE{+^6#t^3eoNh?E^yp1)dI|_}Lhb_mD@dIF<@VUPxn>b}!kmNyW9WFE?F9vaAAp+c zTHtve*Pr7+k##RKm9Lf5!UBLn&@uQ~m`^`=%VGP72Kw7N+JX!Ri z|J>u+4er^$9#eKp$HK?sqZ|qPWWCE$B8cSttELm0(#8siI@wr00iWX7Cx2p2|M$q; z(FAl;5>=~V$IgSqrR0+K|JXb4I4O$lZ$H)DGqZWwU3SSCiITH`C@6?X6cdVqf&oQD zMFc@WxqyI56a-NL0~k>em8e$~^{QkAlpt{lo5Q5;s`roX2}>}%*KqyG@iXo)U0pex zI_aD4MhZ8UGH?ljz(fdz6fP_WmBCPc6fT=NR-iligyH*e8168np~DnLtwGx^Pa}k^ zZdWG??IYY1MI79FlwAjMX@7BRV%!1^oser!c$G!nLr#})M%2G0Z5wTIV~DGXVjywQ zObp?K^Vh;_NkpZ!liLiVZn&e$i)0^aMHmT5i~6O6Gg9P2``7pqmqZhfX6~c_6}Ij^ zOWn@K?}Z(D{;Kwzr++FLr`rzv9U_K@q0LlCLKrP8J2Q2JLR*N9<{|Oe5+Q8-%HMbC z2^>5JVq)Uxd-XLSL>O5%w9XA>~MZ(XY#|0Skws=hRFL3eSbEoNeTO@5NzRTY+*^o(BFToe-(u~K@t<|L+#%LgBP=Zj&?1a&Waf*=om-T=tVH-TLA2gk0LUQzpvk_22dQ4G z7A~P2JZvqp1OSi->7yt&ho7<}buOsv$dxI{)0Ma)MXV?z5fsnH2>u1@=#0(*ge0W4 zmkx%zP7oWv$4$g-M`1bg|Hv+-qW=Cv_J#BGmy;coz=6>EJ1~IYEO}*NnSOF|@{xq> z%+5~sq732rD!@-xb|w!z_$Vh%9^v~vTNyiH1_i}|-?^U7_9ZklU3Wr2gf=osL?Rig zr^&}3f5O-?kD*l5hW&RV5#fJ?5GWbI3KnoGCz~+HpU|Ao**yjNylKq!t~~21}(e+L1At#T2ONI*l|u} z?qc};_jCAUfIhwYa!Jeje70`4?)p3c03ZNKL_t&)Q>V_QMY~R1+2bnGQW8r@-jtLG z8AKz9hP0hTgzYw>l(g}tLvu&UsEexYSYj!g*$65PDeXQs13`R2>98UyqC!_13LQ)6 zNHoX!#bF|qva!^W_61qVFr#W(_Fg3&`J_@74!;Umn1N%Azke8QT3*Sq>^w|_gGX&) zDGSrVO}3Qa(BALqdT|GajeL{><;(!-;Ce?{v{+8tZKoG76?VOaZ8l?XFoyH_Yu1o$ z`eKJOGJQvRVg6M5^ty`6I(ML3*DDx4d^Ecb9LB=Or|aJ1+Wx~REb>us>M#>V-bcSd z!#J8#~D@8g3urCI|O?$+YQDQmB+8&pVSMM~x%CS73YP z1=+RhN2H}FD#~Z?{zI6i{C(Z~m9TALqSPG9kwJ!3V~S|TL$ZJW0k&-3`nMX7Um_uc z?B4PzQ=ghiF@!A&!461!u1(L9HmH5}$xQYgJc^}kJleBSgq=_z^Eq*3H;+x4NnSzm z+3TbPf+BW&y@7|uKS@CVG~>6*f-R6<4(;8>qmPWDcds7YK5ziGc!4Q^dvqlWcM3tzd}*S zp0C$&>kZe^t!o#C41buddyfJ^zTLQndj}1qSC8&od&2-;Td|HJ6c%2NAK1#M2kzsl ztFGeuTkhof*VZDX%a)l5+XfG-h_5%i$DscGx#s%*JiqL%@EX*F6RHLiM1WJ7`?;xS zHzrMy=}=|;~UeVH_MK7|1jg^o)pHh;dB-dEkgoabKQ$88(Ay3aLy z^5t%hAKb$ocihdx6Q&WAe)jMD5BCkanV!9`=GNikIdCH1nKmUa(0@KT7a1*xz{@+Y zzR8M}YZ>61M=g@) zc{)#jA{n-%Mmgaj{w%UUnG_a!$uB5I0;N(?iTAiD$j_#r*l))POHIM!(viUeva)mV znHrifh)*mM`@-^q`MkCNtcQL%I)zM?|%i%bGaQMyzziE%E9i;Bq0F92bX zkdj71jBQvgB`9Sflx?48Xn+~OA1o#(&xfTHiAhPsC&Z(IK60~8;xh%p{bXO5*btlbc(JL?@wC3W>1>xp}z=J(g05 zZiPgz6L0QOzT5pH`+hn?MuJYc zvKb&PaPrmwo+`FeEroHrawKKf6bgvT6(I}zx;DJL4~6(3mJO-?>Agv zqNJDU6CPvo^aYfzRt*)*!IA=@34-1N_8&OFsjOU7&3Kd$h`2Zc0WX-v2oyoXjaN#1 zmPM3BpHqMUB`GeWK(-hO8#?|i(T z=9OJ^x~L`DDuYHB*5<<%ZxaY6aC6T_*p6xzx+>>0olioaN@{8PI_IeUHd3nQX1D?UKgop1Omlm`%MDU zqA2SpHf;EmUbhxfJvqqdAAe5i3xnhoo@7w}>-k}S9@X1);K1hXpu72BV3s1P`2f-^ zV(OF6(SOKLnzn933?{CO1g1=&olq;6lgamFLFo*;#z{K&7kW{t;`T1ThY|xAc zM%+i?4_|Zh?L#QnuoZ#ad`gw8$>aYTkI-YtJh+d!PcNoo*;MYmxf7GejAZ)>owRb* z8F+m+YL|=Qk#SQ%bKx@~wPG#Cj~Z;pSrY=3752B&fP(xJ%$+)k{U>}Bm>_kH$QHO^{j-Y%JESx=;^`Cx2N_sNe_8cW9AqAm=e7^Pr=FOW&Lbhb2YEO^b#Mg+el18JO@sij2ksQ51$QI*ITY7&jh0V6~D7UG<0|m&>`iXbm`Lbb}yKxZ>IR`>& zpv4fMUYQ=(T+i_n$2n2(Z}#rljU-?Pe~!su`Kop7`Qiiax$Q1Ceene+wij~jgy4Z$ z6M68au5@bG5zF!+4Cz>(S-8zCR)6>*CkuRBb6t1hJwfK}{hrS^e#0$&dJyAM2w{Y6 z*mO;D{q5KB@s}I9@Af;W-sn;W-+dR!E{!QOW{~aED4!OGW+>9iRpOefyVK*!PJka% zCJ>WYiI?7amkO!zxJ@s$8aAdwuAifsr^q?+KA(T}6+JGiO8{uru@A4l_8b|SpRMbc zAvA?Blzr(GE`${5noewd3b9Fo&RsgwqjxVVq{U#ft(q;({|ih46(EJZ>k9;hMFkwo zHz`-CI_{8trij54=b>!8hd@>~Znt3j)-TBQ>r9+HiR4%}Qi0H1Af!%s5CRqSvuM^+#FVMYq$!V*q)V*g6AXLk3EKC#gWGTEMlk0mdSBh2<{d7fnl4F7 zDZ|7`Q%TZt7(8SwyZ2{OR@13ks~(R}8A*x;vE~s@oj5_?n@4ipRaX#i6*6)3Fk;ec zGHLQyT>fJ2x#Mm={dg5^F1-X9^ZNT6Xi_$w zfT=U-sp-VVCz0T>A+m&UHgzSDrk~sbAH8oH!p&EAWcA9AcxdEEZn(A;)91ZJQiaAm zG5HZJ|8WN2`7obs+D5M?8Lawn4P$1^r*8F1EPnANRY4%sFU6=boVtvt!>ey7lhP#?^N+{QmJA z%=YojjJwD=v6l~4z0dfkpQA#Vbf(XGfoap{u=s`PtY7^u8EK_$M+qS)I+e}LNl()C z=Am43T^~FuKz8OHW$z5iorMD&lNY{&9!}dQE=)cw+tLY zw|39#mk30H5=aYW`7wiDa`W>DYHsqCflCwIdFP$fZ{5n)VmS7=x)P4V zj)4)Qk(QE-ufU7$jwdc58HJ=llO~wBK}sH*K9zCf9%I~nckKQLs_y`xhpDqGcq~ux@pB?a!o2tqg<_gC{ngWLG|=OC^w- z=cSBWqI3h@rQuRRgy~00Fx)Z3#<-BVMI70`m-d4O5tEomQi7Ydjp}f4-yWKGyaeS0 zl#|L1T#WGX!-1dpXyayf_w0kNy!e9>w=j`P!_s5%#K)89apP8$kV>Hx!mSffE|ez) zJtl^F)hZzJj*^p|$*uz@x%>9v#3#lhVq7$>SChRz9_K_x08dO3spZOJ#Kz$92wciX zZq{KAW}afg)OpN!dMa+|r$U7qXlAg)CZPlNGgq?Agg zZ_mrQdf+3Bo;r*4^i+;-{hV*N?%;-j!-y3{C@H8_|3VCRJeA5NI%-P$V9UwQA^T)5 z?K)k7D=wBe1qXAFp}XU#)2udet{`>mlqJa>E)Ab0ZH=|& zMsw+CmWioQaTmWQ^-DY5a9}W8AHUS*RtoVFsRY8 z9kK6jVCe04adr0|^zG3Kzu_h*VlZ@r1UD4q9bnQE^VzcHTcq@pb-a*3aS)4YzT$jNWuBr+>x*dJ?qW85vx9;Y*d`%T z*?guD2wgbNRtB}})+JWASh;K&>4j}Le5!~Glt4)r3Gp5ZP95a)Z}(HJP9x%6?~#`1 z;;JjJBH;B?vteV5P?UlY?w_>P-k+@egm+eNWYEyNS@FgjEM2mM2Z!ImyonR|;Y5JP zCXOQ~w}1ynJxJy1Ynk)h+w3}UjP#5|r1uzW-g}44x>cxNBAPXC&ATbD z02&E#@uVijvu)?stoi73>Q+c0E;XG}2?p=HynwjwttjyNNl`(9fjqWu+sZA2ZY8mF zX=XqFG2d?AMXN^D!Y)_#=iGM1e-sHqF=7ogcOoP28_d$zm(!?4eQH*#MsdL@=FWVE z3bkufrS=8v{x%!UlS1qE7qej2B!)fw1o6o!bh)e*iMkfK)c>iiI8WyZjL_-zr(p*x zaK*%un3TZ2J>Q|z7JH1q&BFgCosDNp=s468SO!lAxb5*MFDxysd; z^4xRO%<$L~LDPuWEZc)n5S9eS#>F8F!I7W#Q>9WGU=S0VM9}Y}AiJ1yW!>Zz6jA68 zkerwh4h`Y#l1NND#IO-d&~GzKn(hLj;nHkXnyw%&&P9yJ;Mn1VRIiYX&mZ7qZULU8 z6#U*igbdhzi^9P6jC4XnYc3MYROacKQ`!05E}owLJi5rHRr@w}Xa*%g`q=vQXT0*} zD&BniZOW&5=ylCd6gryAji!Q_riqAi6PKJ!TyiPq&YMTgj97F{AvA+{PmE)Uq=#h3 z=t;?3(dBYJ+wd{hb?Zn{Tnqpk)@-EEXHlbaS;YQBl&e&o@iU+1o#&rn!pMhtYT*l% zP4(cxKIH#YbKLXvn@9>5MqC-jKQR$)%wtS_bR>lZUec;vNP1cVmX&X-^<)sVIHa<0 zQ-mfoFg%z-L&L}88hlewD{>xm`=M(%Qo{PHlL36z8HD#j7 zAW~`s5$H(TUv>#or;K31vb9Wm@;{vP!UdWKp(WG#imtr-(MG1sT*{K!kCS(3AB&bP z;`w>ANiJQ1*^3r&LB$M55*dkea(MqwJpAxf+H~s8*oouGh{@-Q^gAFej5I zCr#nIT|W}^#L(f2Yq_|6%P2eAP~HE022eOmzCs6~(d+uY6nG1Ha^g6Oy#W+1YF*fr z@sHh2a!Nc>)0}&CEDc+}Dv2hvKTQ&7 zNejahN6%}oW8l!SqKlG%9VYU4-pB<}zIL?sp@%-1#8o5+#L&K30CUhh_KP zLx$UfFY^H3Zr@GS>Qy-M!&Y|eIYq-Jt(Y@yDvypC#buZE;`s3_`rOnDB_tX_bm_=% zv`~N$Ct`tv_yHEW3KF{0N!++%(;0BhWsDqh4;hIjM~)n1)AoG~9(f_jRpO~!p)`-* zH=LUXT*o(Cc2g*lD3wu%-d#E{b>v_Q9~@77N_mo!Jap^ahVU*SaBlQ53>_q!#zy(3xBBxr@aw zE~j#Xi)mT6Hal0YK-V3_3dd&0G9f9W97p$WXZhmglq;Rie%iB{ZQFN{nqGr| z((x+~WlE=0bYwGcyt0%smCKTtkc2lsi%lCoqCvw31WU09R$!3(nOHJ&@qp3$Ji;jgv}@h zg8`)J+$4pCR2rI*!r+IV;EsnTBZP)j5LDpOg4{V`40nzgPf#ctSM0%wynI{g7|5pc zl|ATt$4D~w|3KTzdXrYBESBz}&1F6LW_wS(ni~U)N2kr=(di3tVpJiOmtdd}pVA4% z0R=|b%D>Z+t!pF{zg+8;h@!j@-hlZenUa$_4pJ9-18sEp+bA0G{T{YPU6E2Yphjhc1p z(Yj@8wr$Uvl}Sezf~qy^(5z`wwr$;tL}$dP(KN1K z8@J&iH7%WDQ_`w=bK*QYCOR#fH=_MTEjV=K1Uq+pM_jCj=FJ-;l!a~>w7a+ihOURz zr6Coi{Z~<3Y*DppHL8>^jWjKMQqiu{Ql&CK9XLqKmMyucT|0!7eEaQYii?YB z*}M^n@g4$}PMeEblbRH3OT08e>x(WTExjyTw`}2LRu)Z~x8SNPI^)tLTek0{)kT-` z!2S1=lHeieD<(A~gSz$VA^@*n(X?q3DwRp6Ld8mK`r-?$K#=B58WFIdUc)AoO-(}+ zk`}F6Q#zv@o4?&mm8#VlHEJZ~Gg2vAwj5?qQYtltisj2X>TnxjK_SV_&EkU(H?Vcb z54332nm)aHk&=`^%_^1oX7e@*d;u=Iyek*CZOhK>+t{{!CoNjGq|+tssamBX)v8os z%a(2UgBC4XwWfFXZYXK;?Y14{n)<0efwdiW?Q=^0cgR~F-}OU;g(_H))j z5&N=`0_p#E&4xm4gy!>a%O_NWbHC-JP);4gF46q#Tfa96A+RiqtgI}OlatSy=ER8; zRH;%0fa2m}cJACsi{{PIG=UHXI8q-QgTwBBO^Zbc-5x2;KnO5|v~AloHwYaeK$DQ4 zeS+I=yp|CUJ;KacGnqAW22VXTi#)GMhf6L-SD}5xi54duCQS%5B?+NV2q8Ik=qE1e zcm@BOI-NxeU!>Xv7jpM~_fV@!IW#l}mB+H>)|#8}h9LsvWF6%CYx**3^cZH$n!}74 z&oE=wLj0D&B^_GZ?2Th;p&@W1kZ2gfsev$@a6iIMr$EyLXtowc6T&ffu=`6X+k#gQ z!)h3I|DZ4g2;oKvBNDGxh0vgM(6sQ>F|Yvwv@mMSU&8Enrl7MtScLL?p$TJy7z9RgV2pG!#+Lvd}ewg@sF;9ym3+ zKThxSvmM=Mn6C3{#_HTDqVqdj`DYueGwW}UmOv`gmRdUiZ3;W6EGP`&;6E!ITTkiW zr=FdWD%r;+%RM_obgupiQPle(^8f)(*k9-EkQ(r`K0YIxfb+$5_KJt|j^I9@UWZ?# za0NmEg6(>p73S(^@~{zmq9OXkXoS@2R1OvtVbYLIFJ`<#i^wOotC|edok7x$gd-qdV6a?W$ zDIFm+GRl;pLisXho1te?)EGziNu)nyR6-H;`M*Iw{qz&dmM!Czzz=o_@~AS{JC;Yd!{1Nw(t*O)8*ZjTI>pFzD8ArU>(PCKmB;$wMfon{7kcs0V>|Klm79Vsj-{Ecsx9On=zW#bB$En69cJM=3kffSHm zSZL4RpXHUJ=d(rm@|92_#0(|y`HK1F`Cv0=6)IFkDO>ucoXd%63W^JhenlR?hE&ww z|62?oKpikx<)j9JIfx|2N zmaLQ@s2Lc_LI~Xn`vHXHhDt*T%lWrq+bRkL(O!Q@M;&mkLhW3Y6bOx^NNazikS+S#&s|EQ1Z2+CkXX)TOh4fb3tmYo6=uNx8?rTbq4}$#8XuB> zhIm5ZI2(o9Y_9{&QI&gNQ{|0VqvNnlo17O%egDsi!~C>d!-n5A*ltI}au1)(dV z<#dBV2n|SuE|St_dKH>;N3r45q_E*Eb*KB3IM+IkY>1)#!alUMaJZMqA+8+gNlK&# zg|6FU6FT_qEOiHdGb9DH!q?!l)+XF1T2!Ba6w%Cn=zGL-`j4RBbapBDEjT0R%3BCQ zW@aWC85t$B{|!u3zLL)4tEyelSxNj2haqwU!Uw!o> zy?b{-*U!Sqho3H)u0*YC5B z9XfP~H{N)I0Rsm7F8Te{6k-Ziu3Y(7SLHnY$y6d(^q+gsM^qaT2%hL8H}u^?1yAwv z(v`I6+>`1R%7pMDqS8ikivEq$(w*@}IGL?pQRK7f^G|4*UX#`h!6QV896&m^^vK3$ z3j_oLqvVDdRl10N9}__lyZ3z0s`o#mZ{IE`$HVT7{s{-7HLwo~8|PCwcoQnD%9B4+ zX32gyn=NJJTUaKA0@kkn2nAf;xeH#ImDq-7yA4XH)<$l2O$_gU1NKoM`f zxr*wI+tH|I6`Nr?XWOIm^b-tb^TzA%(WlRKXY`hBG`WgFgRdn9g%*~1pKA|@8W-#}5b&O2+1u;6sB>?smkx!{ zv1d6rM*jE_s(_UrtfoTMRy3$n0hb8HNQ{Qd5|Q;I&Ne5014I9dE%+5_o%ngWuA{k5 zUz|Tzlc*Kod<|>IBTt-^=ZY2i%cAG-%u~+TM~(Bj_P-DrXZ!*oa~GoQZ9}`ke|IYU z_G{Fc@BjB>AD!3lL7Ju^rNl6dh!p&H%KNV(r4)u?{Bpwc^nZ$+karG)pwu646QHmU zMHK}6fW!&a9RAJTj{Kl}fQ||l@%HOWIhB(|09*Zu41n^3w2*)ulqCq#3(AU;H3UJK zC~24DS70g2&fD^Xl9&jB0K#UkWaQ)rB6nn^EEEAC5H3UF{_6(5V9D}D#CUTvHQo2&ISoq z5lY$5?a0l3=b4?Cr2?Re0g2`0z4raL`SRauky7FVOe9D@Sa!@l3&$}-nf7=9UhMD| z$dJoHsFR98d4XU!KCRtTc0B^he%HbT6;Y#Eq2p7TnAjfN3J}tdP<}KSQojL0Qe1eF zw_bmVyuzYzJA#h%6{l{&&{R|*rB`TTT1clKG|fT^K>#}qmKQL?{c9H*K$%5I8N_m0 zVoHfJi&*{68~k+Wu&uzC_6VX(Ea}V-r9c*g=>_S`f1x1>I#Q&wNrDtg7P0odH`%s* zJAP%iPYUe5RY7~s0VXC;Y>%^&D5u>L&^<8>zVAM|_vqxz$$-5U!li^hmJ{bOG>G9@ zfD{_O;ym7cZ5g@QMfMsLU<%NbJ!&RkDFZ2etpDIW_8mNG_qDQ6n9l0QVPd3X)?mkV zbY`hDRsp2bqI2#}DyrVmT#PD_1Sx(dk0{c09ifScx-=>;W%^Ol4BG=M%R)TE(?+gR zc3VSxlT=nXl^Is?+k0Yk1455NW>a<=XZ1>nloHFb?0Tq3?}c*wtF=An>8~LzBms>6 z{GlWO>Bm=eipR%K;KGItXxh9bZ@#;MysQ&+Xx4yd7cC~>D`v{1NsN1ZI+hvW&`&?o z^NMS!U!y7O*RSW);k^tRa2t*4*XN4MujHGZ2e2$3uPt6ky#_5QSH2#TCQjn@#q(*@ zpea>r)TCjPM!fpQ`yiY@Q4J~lxVDw6S#V2@b z=F`+`+?x9Jo3ZBOHGKW`m$YkhG1aP6q)F2Y8990c?K)h{1vP7N|L{@d`GP26vg7NG zT-K!C%bnHEU9(N+kx|aw|tp6)=Csll19vCAr=JN;7$M%vk0>|0Y?P z$9d@f`>9*M9$hZ$%9r16BPcZ%%zm1Bb?Z^NWBWDTuG|1Y;i> zLA7eNsa3l^>(_nAiQ`8YI_yDe*S>%&y7gr9&RrnAEPZhyjq5d~YSpS-+^#L-$B(0V ztCrNdpeECwnu*VpC>7wf#fxa#ycrGa*JI|)`FM*ZLIw!;oqOGC+Eab zhTr!fwJ)f}WtVm3KbvfIpw(#}9Mp-~qC7a*;w&n3u(o z1BW<#B$EPf&@t@*;b6~3q<6O5t)$F7>W~k85vR%fR774UWD#rEtYqxOY51%Nb7x;P z9ma(y$z+Lsa`I58%M_#Lf((G=BM`Kia-k`tmCwre-sSao*Vq@5NHv{2PnS$abLNrj zZ^<^>Y}B5un^?T~c@Actz!VXlI(l|S%Zim%#LCweGyRDt$;`^b5(4FTFa?W`vwG!9 z=05u}0aGHw40;K!^jA@sX^w8Kvf=tH6$$bb(izz{

3a2&`(S5*bVKnXo;ePC;T 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,+{EZ~ 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 +#include +#include +#include #include PoseInstabilityDetector::PoseInstabilityDetector(const rclcpp::NodeOptions & options) : rclcpp::Node("pose_instability_detector", options), - threshold_diff_position_x_(this->declare_parameter("threshold_diff_position_x")), - threshold_diff_position_y_(this->declare_parameter("threshold_diff_position_y")), - threshold_diff_position_z_(this->declare_parameter("threshold_diff_position_z")), - threshold_diff_angle_x_(this->declare_parameter("threshold_diff_angle_x")), - threshold_diff_angle_y_(this->declare_parameter("threshold_diff_angle_y")), - threshold_diff_angle_z_(this->declare_parameter("threshold_diff_angle_z")) + timer_period_(this->declare_parameter("timer_period")), + heading_velocity_maximum_(this->declare_parameter("heading_velocity_maximum")), + heading_velocity_scale_factor_tolerance_( + this->declare_parameter("heading_velocity_scale_factor_tolerance")), + angular_velocity_maximum_(this->declare_parameter("angular_velocity_maximum")), + angular_velocity_scale_factor_tolerance_( + this->declare_parameter("angular_velocity_scale_factor_tolerance")), + angular_velocity_bias_tolerance_( + this->declare_parameter("angular_velocity_bias_tolerance")), + pose_estimator_longitudinal_tolerance_( + this->declare_parameter("pose_estimator_longitudinal_tolerance")), + pose_estimator_lateral_tolerance_( + this->declare_parameter("pose_estimator_lateral_tolerance")), + pose_estimator_vertical_tolerance_( + this->declare_parameter("pose_estimator_vertical_tolerance")), + pose_estimator_angular_tolerance_( + this->declare_parameter("pose_estimator_angular_tolerance")) { + // Define subscribers, publishers and a timer. odometry_sub_ = this->create_subscription( "~/input/odometry", 10, std::bind(&PoseInstabilityDetector::callback_odometry, this, std::placeholders::_1)); @@ -39,9 +54,8 @@ PoseInstabilityDetector::PoseInstabilityDetector(const rclcpp::NodeOptions & opt "~/input/twist", 10, std::bind(&PoseInstabilityDetector::callback_twist, this, std::placeholders::_1)); - const double interval_sec = this->declare_parameter("interval_sec"); timer_ = rclcpp::create_timer( - this, this->get_clock(), std::chrono::duration(interval_sec), + this, this->get_clock(), std::chrono::duration(timer_period_), std::bind(&PoseInstabilityDetector::callback_timer, this)); diff_pose_pub_ = this->create_publisher("~/debug/diff_pose", 10); @@ -61,6 +75,7 @@ void PoseInstabilityDetector::callback_twist( void PoseInstabilityDetector::callback_timer() { + // odometry callback and timer callback has to be called at least once if (latest_odometry_ == std::nullopt) { return; } @@ -69,6 +84,16 @@ void PoseInstabilityDetector::callback_timer() return; } + // twist callback has to be called at least once + if (twist_buffer_.empty()) { + return; + } + + // time variables + const rclcpp::Time latest_odometry_time = rclcpp::Time(latest_odometry_->header.stamp); + const rclcpp::Time prev_odometry_time = rclcpp::Time(prev_odometry_->header.stamp); + + // define lambda function to convert quaternion to rpy auto quat_to_rpy = [](const Quaternion & quat) { tf2::Quaternion tf2_quat(quat.x, quat.y, quat.z, quat.w); tf2::Matrix3x3 mat(tf2_quat); @@ -79,70 +104,48 @@ void PoseInstabilityDetector::callback_timer() return std::make_tuple(roll, pitch, yaw); }; - Pose pose = prev_odometry_->pose.pose; - rclcpp::Time prev_time = rclcpp::Time(prev_odometry_->header.stamp); - for (const TwistWithCovarianceStamped & twist_with_cov : twist_buffer_) { - const Twist twist = twist_with_cov.twist.twist; - - const rclcpp::Time curr_time = rclcpp::Time(twist_with_cov.header.stamp); - if (curr_time > latest_odometry_->header.stamp) { + // delete twist data older than prev_odometry_ (but preserve the one right before prev_odometry_) + while (twist_buffer_.size() > 1) { + if (rclcpp::Time(twist_buffer_[1].header.stamp) < prev_odometry_time) { + twist_buffer_.pop_front(); + } else { break; } + } - const rclcpp::Duration time_diff = curr_time - prev_time; - const double time_diff_sec = time_diff.seconds(); - if (time_diff_sec < 0.0) { - continue; - } - - // quat to rpy - auto [ang_x, ang_y, ang_z] = quat_to_rpy(pose.orientation); - - // rpy update - ang_x += twist.angular.x * time_diff_sec; - ang_y += twist.angular.y * time_diff_sec; - ang_z += twist.angular.z * time_diff_sec; - tf2::Quaternion quat; - quat.setRPY(ang_x, ang_y, ang_z); + // dead reckoning from prev_odometry_ to latest_odometry_ + PoseStamped::SharedPtr prev_pose = std::make_shared(); + prev_pose->header = prev_odometry_->header; + prev_pose->pose = prev_odometry_->pose.pose; - // Convert twist to world frame - tf2::Vector3 linear_velocity(twist.linear.x, twist.linear.y, twist.linear.z); - linear_velocity = tf2::quatRotate(quat, linear_velocity); - - // update - pose.position.x += linear_velocity.x() * time_diff_sec; - pose.position.y += linear_velocity.y() * time_diff_sec; - pose.position.z += linear_velocity.z() * time_diff_sec; - pose.orientation.x = quat.x(); - pose.orientation.y = quat.y(); - pose.orientation.z = quat.z(); - pose.orientation.w = quat.w(); - prev_time = curr_time; - } + Pose::SharedPtr DR_pose = std::make_shared(); + dead_reckon(prev_pose, latest_odometry_time, twist_buffer_, DR_pose); - // compare pose and latest_odometry_ + // compare dead reckoning pose and latest_odometry_ const Pose latest_ekf_pose = latest_odometry_->pose.pose; - const Pose ekf_to_odom = tier4_autoware_utils::inverseTransformPose(pose, latest_ekf_pose); - const geometry_msgs::msg::Point pos = ekf_to_odom.position; - const auto [ang_x, ang_y, ang_z] = quat_to_rpy(ekf_to_odom.orientation); + const Pose ekf_to_DR = tier4_autoware_utils::inverseTransformPose(*DR_pose, latest_ekf_pose); + const geometry_msgs::msg::Point pos = ekf_to_DR.position; + const auto [ang_x, ang_y, ang_z] = quat_to_rpy(ekf_to_DR.orientation); const std::vector values = {pos.x, pos.y, pos.z, ang_x, ang_y, ang_z}; - const rclcpp::Time stamp = latest_odometry_->header.stamp; - // publish diff_pose for debug PoseStamped diff_pose; - diff_pose.header = latest_odometry_->header; - diff_pose.pose = ekf_to_odom; + diff_pose.header.stamp = latest_odometry_time; + diff_pose.header.frame_id = "base_link"; + diff_pose.pose = ekf_to_DR; diff_pose_pub_->publish(diff_pose); - const std::vector thresholds = {threshold_diff_position_x_, threshold_diff_position_y_, - threshold_diff_position_z_, threshold_diff_angle_x_, - threshold_diff_angle_y_, threshold_diff_angle_z_}; + // publish diagnostics + ThresholdValues threshold_values = + calculate_threshold((latest_odometry_time - prev_odometry_time).seconds()); + + const std::vector thresholds = {threshold_values.position_x, threshold_values.position_y, + threshold_values.position_z, threshold_values.angle_x, + threshold_values.angle_y, threshold_values.angle_z}; const std::vector labels = {"diff_position_x", "diff_position_y", "diff_position_z", "diff_angle_x", "diff_angle_y", "diff_angle_z"}; - // publish diagnostics DiagnosticStatus status; status.name = "localization: pose_instability_detector"; status.hardware_id = this->get_name(); @@ -166,13 +169,239 @@ void PoseInstabilityDetector::callback_timer() status.message = (all_ok ? "OK" : "WARN"); DiagnosticArray diagnostics; - diagnostics.header.stamp = stamp; + diagnostics.header.stamp = latest_odometry_time; diagnostics.status.emplace_back(status); diagnostics_pub_->publish(diagnostics); // prepare for next loop prev_odometry_ = latest_odometry_; - twist_buffer_.clear(); +} + +PoseInstabilityDetector::ThresholdValues PoseInstabilityDetector::calculate_threshold( + double interval_sec) +{ + // Calculate maximum longitudinal difference + const double longitudinal_difference = + heading_velocity_maximum_ * heading_velocity_scale_factor_tolerance_ * 0.01 * interval_sec; + + // Calculate maximum lateral and vertical difference + double lateral_difference = 0.0; + + const std::vector heading_velocity_signs = {1.0, -1.0, -1.0, 1.0}; + const std::vector angular_velocity_signs = {1.0, 1.0, -1.0, -1.0}; + + const double nominal_variation_x = heading_velocity_maximum_ / angular_velocity_maximum_ * + sin(angular_velocity_maximum_ * interval_sec); + const double nominal_variation_y = heading_velocity_maximum_ / angular_velocity_maximum_ * + (1 - cos(angular_velocity_maximum_ * interval_sec)); + + for (int i = 0; i < 4; i++) { + const double edge_heading_velocity = + heading_velocity_maximum_ * + (1 + heading_velocity_signs[i] * heading_velocity_scale_factor_tolerance_ * 0.01); + const double edge_angular_velocity = + angular_velocity_maximum_ * + (1 + angular_velocity_signs[i] * angular_velocity_scale_factor_tolerance_ * 0.01) + + angular_velocity_signs[i] * angular_velocity_bias_tolerance_; + + const double edge_variation_x = + edge_heading_velocity / edge_angular_velocity * sin(edge_angular_velocity * interval_sec); + const double edge_variation_y = edge_heading_velocity / edge_angular_velocity * + (1 - cos(edge_angular_velocity * interval_sec)); + + const double diff_variation_x = edge_variation_x - nominal_variation_x; + const double diff_variation_y = edge_variation_y - nominal_variation_y; + + const double lateral_difference_candidate = abs( + diff_variation_x * sin(angular_velocity_maximum_ * interval_sec) - + diff_variation_y * cos(angular_velocity_maximum_ * interval_sec)); + lateral_difference = std::max(lateral_difference, lateral_difference_candidate); + } + + const double vertical_difference = lateral_difference; + + // Calculate maximum angular difference + const double roll_difference = + (angular_velocity_maximum_ * angular_velocity_scale_factor_tolerance_ * 0.01 + + angular_velocity_bias_tolerance_) * + interval_sec; + const double pitch_difference = roll_difference; + const double yaw_difference = roll_difference; + + // Set thresholds + ThresholdValues result_values; + result_values.position_x = longitudinal_difference + pose_estimator_longitudinal_tolerance_; + result_values.position_y = lateral_difference + pose_estimator_lateral_tolerance_; + result_values.position_z = vertical_difference + pose_estimator_vertical_tolerance_; + result_values.angle_x = roll_difference + pose_estimator_angular_tolerance_; + result_values.angle_y = pitch_difference + pose_estimator_angular_tolerance_; + result_values.angle_z = yaw_difference + pose_estimator_angular_tolerance_; + + return result_values; +} + +void PoseInstabilityDetector::dead_reckon( + PoseStamped::SharedPtr & initial_pose, const rclcpp::Time & end_time, + const std::deque & twist_deque, Pose::SharedPtr & estimated_pose) +{ + // get start time + rclcpp::Time start_time = rclcpp::Time(initial_pose->header.stamp); + + // initialize estimated_pose + estimated_pose->position = initial_pose->pose.position; + estimated_pose->orientation = initial_pose->pose.orientation; + + // cut out necessary twist data + std::deque sliced_twist_deque = + clip_out_necessary_twist(twist_deque, start_time, end_time); + + // dead reckoning + rclcpp::Time prev_odometry_time = rclcpp::Time(sliced_twist_deque.front().header.stamp); + tf2::Quaternion prev_orientation; + tf2::fromMsg(estimated_pose->orientation, prev_orientation); + + for (size_t i = 1; i < sliced_twist_deque.size(); ++i) { + const rclcpp::Time curr_time = rclcpp::Time(sliced_twist_deque[i].header.stamp); + const double time_diff_sec = (curr_time - prev_odometry_time).seconds(); + + const Twist twist = sliced_twist_deque[i - 1].twist.twist; + + // variation of orientation (rpy update) + tf2::Quaternion delta_orientation; + tf2::Vector3 rotation_axis(twist.angular.x, twist.angular.y, twist.angular.z); + if (rotation_axis.length() > 0.0) { + delta_orientation.setRotation( + rotation_axis.normalized(), rotation_axis.length() * time_diff_sec); + } else { + delta_orientation.setValue(0.0, 0.0, 0.0, 1.0); + } + + tf2::Quaternion curr_orientation; + curr_orientation = prev_orientation * delta_orientation; + curr_orientation.normalize(); + + // average quaternion of two frames + tf2::Quaternion average_quat = prev_orientation.slerp(curr_orientation, 0.5); + + // Convert twist to world frame (take average of two frames) + tf2::Vector3 linear_velocity(twist.linear.x, twist.linear.y, twist.linear.z); + linear_velocity = tf2::quatRotate(average_quat, linear_velocity); + + // xyz update + estimated_pose->position.x += linear_velocity.x() * time_diff_sec; + estimated_pose->position.y += linear_velocity.y() * time_diff_sec; + estimated_pose->position.z += linear_velocity.z() * time_diff_sec; + + // update previous variables + prev_odometry_time = curr_time; + prev_orientation = curr_orientation; + } + estimated_pose->orientation.x = prev_orientation.x(); + estimated_pose->orientation.y = prev_orientation.y(); + estimated_pose->orientation.z = prev_orientation.z(); + estimated_pose->orientation.w = prev_orientation.w(); +} + +std::deque +PoseInstabilityDetector::clip_out_necessary_twist( + const std::deque & twist_buffer, const rclcpp::Time & start_time, + const rclcpp::Time & end_time) +{ + // If there is only one element in the twist_buffer, return a deque that has the same twist + // from the start till the end + if (twist_buffer.size() == 1) { + TwistWithCovarianceStamped twist = twist_buffer.front(); + std::deque simple_twist_deque; + + twist.header.stamp = start_time; + simple_twist_deque.push_back(twist); + + twist.header.stamp = end_time; + simple_twist_deque.push_back(twist); + + return simple_twist_deque; + } + + // get iterator to the element that is right before start_time (if it does not exist, start_it = + // twist_buffer.begin()) + auto start_it = twist_buffer.begin(); + + for (auto it = twist_buffer.begin(); it != twist_buffer.end(); ++it) { + if (rclcpp::Time(it->header.stamp) > start_time) { + break; + } + start_it = it; + } + + // get iterator to the element that is right after end_time (if it does not exist, end_it = + // twist_buffer.end()) + auto end_it = twist_buffer.end(); + end_it--; + for (auto it = end_it; it != twist_buffer.begin(); --it) { + if (rclcpp::Time(it->header.stamp) < end_time) { + break; + } + end_it = it; + } + + // Create result deque + std::deque result_deque(start_it, end_it); + + // If the first element is later than start_time, add the first element to the front of the + // result_deque + if (rclcpp::Time(result_deque.front().header.stamp) > start_time) { + TwistWithCovarianceStamped start_twist = *start_it; + start_twist.header.stamp = start_time; + result_deque.push_front(start_twist); + } else { + // If the first element is earlier than start_time, interpolate the first element + rclcpp::Time time0 = rclcpp::Time(result_deque[0].header.stamp); + rclcpp::Time time1 = rclcpp::Time(result_deque[1].header.stamp); + double ratio = (start_time - time0).seconds() / (time1 - time0).seconds(); + Twist twist0 = result_deque[0].twist.twist; + Twist twist1 = result_deque[1].twist.twist; + result_deque[0].twist.twist.linear.x = twist1.linear.x * ratio + twist0.linear.x * (1 - ratio); + result_deque[0].twist.twist.linear.y = twist1.linear.y * ratio + twist0.linear.y * (1 - ratio); + result_deque[0].twist.twist.linear.z = twist1.linear.z * ratio + twist0.linear.z * (1 - ratio); + result_deque[0].twist.twist.angular.x = + twist1.angular.x * ratio + twist0.angular.x * (1 - ratio); + result_deque[0].twist.twist.angular.y = + twist1.angular.y * ratio + twist0.angular.y * (1 - ratio); + result_deque[0].twist.twist.angular.z = + twist1.angular.z * ratio + twist0.angular.z * (1 - ratio); + + result_deque[0].header.stamp = start_time; + } + + // If the last element is earlier than end_time, add the last element to the back of the + // result_deque + if (rclcpp::Time(result_deque.back().header.stamp) < end_time) { + TwistWithCovarianceStamped end_twist = *end_it; + end_twist.header.stamp = end_time; + result_deque.push_back(end_twist); + } else { + // If the last element is later than end_time, interpolate the last element + rclcpp::Time time0 = rclcpp::Time(result_deque[result_deque.size() - 2].header.stamp); + rclcpp::Time time1 = rclcpp::Time(result_deque[result_deque.size() - 1].header.stamp); + double ratio = (end_time - time0).seconds() / (time1 - time0).seconds(); + Twist twist0 = result_deque[result_deque.size() - 2].twist.twist; + Twist twist1 = result_deque[result_deque.size() - 1].twist.twist; + result_deque[result_deque.size() - 1].twist.twist.linear.x = + twist1.linear.x * ratio + twist0.linear.x * (1 - ratio); + result_deque[result_deque.size() - 1].twist.twist.linear.y = + twist1.linear.y * ratio + twist0.linear.y * (1 - ratio); + result_deque[result_deque.size() - 1].twist.twist.linear.z = + twist1.linear.z * ratio + twist0.linear.z * (1 - ratio); + result_deque[result_deque.size() - 1].twist.twist.angular.x = + twist1.angular.x * ratio + twist0.angular.x * (1 - ratio); + result_deque[result_deque.size() - 1].twist.twist.angular.y = + twist1.angular.y * ratio + twist0.angular.y * (1 - ratio); + result_deque[result_deque.size() - 1].twist.twist.angular.z = + twist1.angular.z * ratio + twist0.angular.z * (1 - ratio); + + result_deque[result_deque.size() - 1].header.stamp = end_time; + } + return result_deque; } #include diff --git a/localization/pose_instability_detector/test/test.cpp b/localization/pose_instability_detector/test/test.cpp index 5ea03859d7731..9300984967d4b 100644 --- a/localization/pose_instability_detector/test/test.cpp +++ b/localization/pose_instability_detector/test/test.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "../src/pose_instability_detector.hpp" +#include "autoware/pose_instability_detector/pose_instability_detector.hpp" #include "test_message_helper_node.hpp" #include @@ -81,6 +81,11 @@ TEST_F(TestPoseInstabilityDetector, output_ok_when_twist_matches_odometry) // N timestamp.nanosec = 0; helper_->send_odometry_message(timestamp, 10.0, 0.0, 0.0); + // send the twist message1 (move 1m in x direction) + timestamp.sec = 0; + timestamp.nanosec = 5e8; + helper_->send_twist_message(timestamp, 2.0, 0.0, 0.0); + // process the above message (by timer_callback) helper_->received_diagnostic_array_flag = false; while (!helper_->received_diagnostic_array_flag) { @@ -88,11 +93,6 @@ TEST_F(TestPoseInstabilityDetector, output_ok_when_twist_matches_odometry) // N std::this_thread::sleep_for(std::chrono::milliseconds(10)); } - // send the twist message1 (move 1m in x direction) - timestamp.sec = 0; - timestamp.nanosec = 5e8; - helper_->send_twist_message(timestamp, 2.0, 0.0, 0.0); - // send the twist message2 (move 1m in x direction) timestamp.sec = 1; timestamp.nanosec = 0; @@ -101,7 +101,9 @@ TEST_F(TestPoseInstabilityDetector, output_ok_when_twist_matches_odometry) // N // send the second odometry message (finish x = 12) timestamp.sec = 2; timestamp.nanosec = 0; - helper_->send_odometry_message(timestamp, 12.0, 0.0, 0.0); + helper_->send_odometry_message(timestamp, 14.0, 0.0, 0.0); + + executor_.spin_some(); // process the above messages (by timer_callback) helper_->received_diagnostic_array_flag = false; @@ -124,6 +126,11 @@ TEST_F(TestPoseInstabilityDetector, output_warn_when_twist_is_too_small) // NOL timestamp.nanosec = 0; helper_->send_odometry_message(timestamp, 10.0, 0.0, 0.0); + // send the twist message1 (move 0.1m in x direction) + timestamp.sec = 0; + timestamp.nanosec = 5e8; + helper_->send_twist_message(timestamp, 0.2, 0.0, 0.0); + // process the above message (by timer_callback) helper_->received_diagnostic_array_flag = false; while (!helper_->received_diagnostic_array_flag) { @@ -131,11 +138,6 @@ TEST_F(TestPoseInstabilityDetector, output_warn_when_twist_is_too_small) // NOL std::this_thread::sleep_for(std::chrono::milliseconds(10)); } - // send the twist message1 (move 0.1m in x direction) - timestamp.sec = 0; - timestamp.nanosec = 5e8; - helper_->send_twist_message(timestamp, 0.2, 0.0, 0.0); - // send the twist message2 (move 0.1m in x direction) timestamp.sec = 1; timestamp.nanosec = 0; @@ -144,7 +146,9 @@ TEST_F(TestPoseInstabilityDetector, output_warn_when_twist_is_too_small) // NOL // send the second odometry message (finish x = 12) timestamp.sec = 2; timestamp.nanosec = 0; - helper_->send_odometry_message(timestamp, 12.0, 0.0, 0.0); + helper_->send_odometry_message(timestamp, 14.0, 0.0, 0.0); + + executor_.spin_some(); // process the above messages (by timer_callback) helper_->received_diagnostic_array_flag = false; From 4aeb69f94199b25168b864f1e115f38f72648004 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Fatih=20C=C4=B1r=C4=B1t?= Date: Fri, 7 Jun 2024 11:08:05 +0300 Subject: [PATCH 017/142] ci(clang-tidy-differential): split it out of build-and-test-differential (#7331) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: M. Fatih Cırıt --- .../build-and-test-differential.yaml | 37 -------------- .../workflows/clang-tidy-differential.yaml | 51 +++++++++++++++++++ 2 files changed, 51 insertions(+), 37 deletions(-) create mode 100644 .github/workflows/clang-tidy-differential.yaml diff --git a/.github/workflows/build-and-test-differential.yaml b/.github/workflows/build-and-test-differential.yaml index fb98d321fde88..6745976aa543a 100644 --- a/.github/workflows/build-and-test-differential.yaml +++ b/.github/workflows/build-and-test-differential.yaml @@ -74,40 +74,3 @@ jobs: - name: Show disk space after the tasks run: df -h - - clang-tidy-differential: - runs-on: ubuntu-latest - container: ghcr.io/autowarefoundation/autoware:latest-prebuilt-cuda - steps: - - name: Check out repository - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Show disk space before the tasks - run: df -h - - - name: Remove exec_depend - uses: autowarefoundation/autoware-github-actions/remove-exec-depend@v1 - - - name: Get modified packages - id: get-modified-packages - uses: autowarefoundation/autoware-github-actions/get-modified-packages@v1 - - - name: Get modified files - id: get-modified-files - uses: tj-actions/changed-files@v35 - with: - files: | - **/*.cpp - **/*.hpp - - - name: Run clang-tidy - if: ${{ steps.get-modified-files.outputs.all_changed_files != '' }} - uses: autowarefoundation/autoware-github-actions/clang-tidy@v1 - with: - rosdistro: humble - target-packages: ${{ steps.get-modified-packages.outputs.modified-packages }} - target-files: ${{ steps.get-modified-files.outputs.all_changed_files }} - clang-tidy-config-url: https://raw.githubusercontent.com/autowarefoundation/autoware/main/.clang-tidy - build-depends-repos: build_depends.repos diff --git a/.github/workflows/clang-tidy-differential.yaml b/.github/workflows/clang-tidy-differential.yaml new file mode 100644 index 0000000000000..f7ec81e3394e5 --- /dev/null +++ b/.github/workflows/clang-tidy-differential.yaml @@ -0,0 +1,51 @@ +name: clang-tidy-differential + +on: + pull_request: + types: + - opened + - synchronize + - labeled + +jobs: + prevent-no-label-execution: + uses: autowarefoundation/autoware-github-actions/.github/workflows/prevent-no-label-execution.yaml@v1 + with: + label: tag:run-clang-tidy-differential + + clang-tidy-differential: + runs-on: ubuntu-latest + container: ghcr.io/autowarefoundation/autoware:latest-prebuilt-cuda + steps: + - name: Check out repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Show disk space before the tasks + run: df -h + + - name: Remove exec_depend + uses: autowarefoundation/autoware-github-actions/remove-exec-depend@v1 + + - name: Get modified packages + id: get-modified-packages + uses: autowarefoundation/autoware-github-actions/get-modified-packages@v1 + + - name: Get modified files + id: get-modified-files + uses: tj-actions/changed-files@v35 + with: + files: | + **/*.cpp + **/*.hpp + + - name: Run clang-tidy + if: ${{ steps.get-modified-files.outputs.all_changed_files != '' }} + uses: autowarefoundation/autoware-github-actions/clang-tidy@v1 + with: + rosdistro: humble + target-packages: ${{ steps.get-modified-packages.outputs.modified-packages }} + target-files: ${{ steps.get-modified-files.outputs.all_changed_files }} + clang-tidy-config-url: https://raw.githubusercontent.com/autowarefoundation/autoware/main/.clang-tidy + build-depends-repos: build_depends.repos From e6b56a42f8660235114857728ca2938cf5b725a5 Mon Sep 17 00:00:00 2001 From: Masaki Baba Date: Fri, 7 Jun 2024 17:10:23 +0900 Subject: [PATCH 018/142] feat(imu_corrector): componentize ImuCorrector and GyroBiasEstimator (#7129) * remove unusing main func file Signed-off-by: a-maumau * mod to componentize and use glog Signed-off-by: a-maumau * change log output from screen to both Signed-off-by: a-maumau * Update sensing/imu_corrector/CMakeLists.txt add namespace Co-authored-by: Yamato Ando Signed-off-by: a-maumau * Update sensing/imu_corrector/CMakeLists.txt add namespace Co-authored-by: Yamato Ando --------- Signed-off-by: a-maumau Co-authored-by: Yamato Ando --- sensing/imu_corrector/CMakeLists.txt | 25 +++++++++++------- .../launch/gyro_bias_estimator.launch.xml | 2 +- .../launch/imu_corrector.launch.xml | 2 +- .../imu_corrector/src/gyro_bias_estimator.cpp | 7 +++-- .../imu_corrector/src/gyro_bias_estimator.hpp | 2 +- .../src/gyro_bias_estimator_node.cpp | 26 ------------------- .../imu_corrector/src/imu_corrector_core.cpp | 8 ++++-- .../imu_corrector/src/imu_corrector_core.hpp | 2 +- .../imu_corrector/src/imu_corrector_node.cpp | 26 ------------------- 9 files changed, 30 insertions(+), 70 deletions(-) delete mode 100644 sensing/imu_corrector/src/gyro_bias_estimator_node.cpp delete mode 100644 sensing/imu_corrector/src/imu_corrector_node.cpp diff --git a/sensing/imu_corrector/CMakeLists.txt b/sensing/imu_corrector/CMakeLists.txt index ded596a8a9898..b3be5be12b75d 100644 --- a/sensing/imu_corrector/CMakeLists.txt +++ b/sensing/imu_corrector/CMakeLists.txt @@ -4,27 +4,32 @@ project(imu_corrector) find_package(autoware_cmake REQUIRED) autoware_package() -ament_auto_add_library(gyro_bias_estimation_module SHARED - src/gyro_bias_estimation_module.cpp -) - -ament_auto_add_executable(imu_corrector +ament_auto_add_library(${PROJECT_NAME} SHARED src/imu_corrector_core.cpp - src/imu_corrector_node.cpp ) -ament_auto_add_executable(gyro_bias_estimator +ament_auto_add_library(gyro_bias_estimator SHARED src/gyro_bias_estimator.cpp - src/gyro_bias_estimator_node.cpp + src/gyro_bias_estimation_module.cpp ) -target_link_libraries(gyro_bias_estimator gyro_bias_estimation_module) +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "imu_corrector::ImuCorrector" + EXECUTABLE ${PROJECT_NAME}_node + EXECUTOR SingleThreadedExecutor +) + +rclcpp_components_register_node(gyro_bias_estimator + PLUGIN "imu_corrector::GyroBiasEstimator" + EXECUTABLE gyro_bias_estimator_node + EXECUTOR SingleThreadedExecutor +) function(add_testcase filepath) get_filename_component(filename ${filepath} NAME) string(REGEX REPLACE ".cpp" "" test_name ${filename}) ament_add_gmock(${test_name} ${filepath}) - target_link_libraries("${test_name}" gyro_bias_estimation_module) + target_link_libraries("${test_name}" gyro_bias_estimator) ament_target_dependencies(${test_name} ${${PROJECT_NAME}_FOUND_BUILD_DEPENDS}) endfunction() diff --git a/sensing/imu_corrector/launch/gyro_bias_estimator.launch.xml b/sensing/imu_corrector/launch/gyro_bias_estimator.launch.xml index e16ccef446aba..100168b17171a 100644 --- a/sensing/imu_corrector/launch/gyro_bias_estimator.launch.xml +++ b/sensing/imu_corrector/launch/gyro_bias_estimator.launch.xml @@ -6,7 +6,7 @@ - + diff --git a/sensing/imu_corrector/launch/imu_corrector.launch.xml b/sensing/imu_corrector/launch/imu_corrector.launch.xml index d87d6e77c110d..8430f2a50a85c 100755 --- a/sensing/imu_corrector/launch/imu_corrector.launch.xml +++ b/sensing/imu_corrector/launch/imu_corrector.launch.xml @@ -4,7 +4,7 @@ - + diff --git a/sensing/imu_corrector/src/gyro_bias_estimator.cpp b/sensing/imu_corrector/src/gyro_bias_estimator.cpp index e99667ed1c4a6..d79626f66801b 100644 --- a/sensing/imu_corrector/src/gyro_bias_estimator.cpp +++ b/sensing/imu_corrector/src/gyro_bias_estimator.cpp @@ -23,8 +23,8 @@ namespace imu_corrector { -GyroBiasEstimator::GyroBiasEstimator() -: Node("gyro_bias_validator"), +GyroBiasEstimator::GyroBiasEstimator(const rclcpp::NodeOptions & options) +: rclcpp::Node("gyro_bias_validator", options), gyro_bias_threshold_(declare_parameter("gyro_bias_threshold")), angular_velocity_offset_x_(declare_parameter("angular_velocity_offset_x")), angular_velocity_offset_y_(declare_parameter("angular_velocity_offset_y")), @@ -244,3 +244,6 @@ void GyroBiasEstimator::update_diagnostics(diagnostic_updater::DiagnosticStatusW } } // namespace imu_corrector + +#include +RCLCPP_COMPONENTS_REGISTER_NODE(imu_corrector::GyroBiasEstimator) diff --git a/sensing/imu_corrector/src/gyro_bias_estimator.hpp b/sensing/imu_corrector/src/gyro_bias_estimator.hpp index 3592ff1f7d3b4..671c18de78f86 100644 --- a/sensing/imu_corrector/src/gyro_bias_estimator.hpp +++ b/sensing/imu_corrector/src/gyro_bias_estimator.hpp @@ -42,7 +42,7 @@ class GyroBiasEstimator : public rclcpp::Node using Odometry = nav_msgs::msg::Odometry; public: - GyroBiasEstimator(); + explicit GyroBiasEstimator(const rclcpp::NodeOptions & options); private: void update_diagnostics(diagnostic_updater::DiagnosticStatusWrapper & stat); diff --git a/sensing/imu_corrector/src/gyro_bias_estimator_node.cpp b/sensing/imu_corrector/src/gyro_bias_estimator_node.cpp deleted file mode 100644 index a491957bbb57f..0000000000000 --- a/sensing/imu_corrector/src/gyro_bias_estimator_node.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "gyro_bias_estimator.hpp" - -#include - -int main(int argc, char * argv[]) -{ - rclcpp::init(argc, argv); - auto node = std::make_shared(); - rclcpp::spin(node); - rclcpp::shutdown(); - return 0; -} diff --git a/sensing/imu_corrector/src/imu_corrector_core.cpp b/sensing/imu_corrector/src/imu_corrector_core.cpp index a26c64925729c..c8e7698cb4e37 100644 --- a/sensing/imu_corrector/src/imu_corrector_core.cpp +++ b/sensing/imu_corrector/src/imu_corrector_core.cpp @@ -53,8 +53,9 @@ geometry_msgs::msg::Vector3 transformVector3( namespace imu_corrector { -ImuCorrector::ImuCorrector() -: Node("imu_corrector"), output_frame_(declare_parameter("base_link", "base_link")) +ImuCorrector::ImuCorrector(const rclcpp::NodeOptions & options) +: rclcpp::Node("imu_corrector", options), + output_frame_(declare_parameter("base_link", "base_link")) { transform_listener_ = std::make_shared(this); @@ -123,3 +124,6 @@ void ImuCorrector::callbackImu(const sensor_msgs::msg::Imu::ConstSharedPtr imu_m } } // namespace imu_corrector + +#include +RCLCPP_COMPONENTS_REGISTER_NODE(imu_corrector::ImuCorrector) diff --git a/sensing/imu_corrector/src/imu_corrector_core.hpp b/sensing/imu_corrector/src/imu_corrector_core.hpp index 7709c611ab714..4d5377274ae78 100644 --- a/sensing/imu_corrector/src/imu_corrector_core.hpp +++ b/sensing/imu_corrector/src/imu_corrector_core.hpp @@ -34,7 +34,7 @@ class ImuCorrector : public rclcpp::Node using COV_IDX = tier4_autoware_utils::xyz_covariance_index::XYZ_COV_IDX; public: - ImuCorrector(); + explicit ImuCorrector(const rclcpp::NodeOptions & options); private: void callbackImu(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg_ptr); diff --git a/sensing/imu_corrector/src/imu_corrector_node.cpp b/sensing/imu_corrector/src/imu_corrector_node.cpp deleted file mode 100644 index c1df5bee28439..0000000000000 --- a/sensing/imu_corrector/src/imu_corrector_node.cpp +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "imu_corrector_core.hpp" - -#include - -int main(int argc, char * argv[]) -{ - rclcpp::init(argc, argv); - auto node = std::make_shared(); - rclcpp::spin(node); - rclcpp::shutdown(); - return 0; -} From 1f6c264c211f08d24421e610b0190d31399e15ac Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 7 Jun 2024 17:23:05 +0900 Subject: [PATCH 019/142] refactor(path_optimizer, velocity_smoother)!: prefix package and namespace with autoware (#7354) * chore(autoware_velocity_smoother): update namespace Signed-off-by: satoshi-ota * chore(autoware_path_optimizer): update namespace Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .../motion_planning/motion_planning.launch.xml | 2 +- .../scenario_planning/scenario_planning.launch.xml | 2 +- .../autoware_behavior_velocity_planner/src/node.cpp | 2 +- .../planner_data.hpp | 2 +- .../src/utilization/trajectory_utils.cpp | 2 +- planning/autoware_path_optimizer/CMakeLists.txt | 2 +- .../include/autoware_path_optimizer/common_structs.hpp | 4 ++-- .../include/autoware_path_optimizer/debug_marker.hpp | 4 ++-- .../include/autoware_path_optimizer/mpt_optimizer.hpp | 4 ++-- .../include/autoware_path_optimizer/node.hpp | 4 ++-- .../include/autoware_path_optimizer/replan_checker.hpp | 4 ++-- .../state_equation_generator.hpp | 4 ++-- .../include/autoware_path_optimizer/type_alias.hpp | 4 ++-- .../autoware_path_optimizer/utils/geometry_utils.hpp | 8 ++++---- .../autoware_path_optimizer/utils/trajectory_utils.hpp | 10 +++++----- planning/autoware_path_optimizer/src/debug_marker.cpp | 4 ++-- planning/autoware_path_optimizer/src/mpt_optimizer.cpp | 4 ++-- planning/autoware_path_optimizer/src/node.cpp | 6 +++--- .../autoware_path_optimizer/src/replan_checker.cpp | 4 ++-- .../src/state_equation_generator.cpp | 4 ++-- .../src/utils/geometry_utils.cpp | 4 ++-- .../src/utils/trajectory_utils.cpp | 10 +++++----- .../test/test_path_optimizer_node_interface.cpp | 2 +- .../optimization_trajectory_based_centerline.cpp | 4 ++-- planning/autoware_velocity_smoother/CMakeLists.txt | 2 +- .../include/autoware_velocity_smoother/node.hpp | 4 ++-- .../include/autoware_velocity_smoother/resample.hpp | 4 ++-- .../analytical_jerk_constrained_smoother.hpp | 4 ++-- .../velocity_planning_utils.hpp | 4 ++-- .../smoother/jerk_filtered_smoother.hpp | 4 ++-- .../smoother/l2_pseudo_jerk_smoother.hpp | 4 ++-- .../smoother/linf_pseudo_jerk_smoother.hpp | 4 ++-- .../smoother/smoother_base.hpp | 4 ++-- .../autoware_velocity_smoother/trajectory_utils.hpp | 4 ++-- planning/autoware_velocity_smoother/src/node.cpp | 6 +++--- planning/autoware_velocity_smoother/src/resample.cpp | 4 ++-- .../analytical_jerk_constrained_smoother.cpp | 4 ++-- .../velocity_planning_utils.cpp | 4 ++-- .../src/smoother/jerk_filtered_smoother.cpp | 4 ++-- .../src/smoother/l2_pseudo_jerk_smoother.cpp | 4 ++-- .../src/smoother/linf_pseudo_jerk_smoother.cpp | 4 ++-- .../src/smoother/smoother_base.cpp | 4 ++-- .../src/trajectory_utils.cpp | 4 ++-- .../test/test_smoother_functions.cpp | 4 ++-- .../test/test_velocity_smoother_node_interface.cpp | 2 +- .../planner_data.hpp | 2 +- .../autoware_motion_velocity_planner_node/src/node.cpp | 4 ++-- 47 files changed, 94 insertions(+), 94 deletions(-) diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml index b5173d6a98b2e..4ed38df2d3f09 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml @@ -62,7 +62,7 @@ - + diff --git a/launch/tier4_planning_launch/launch/scenario_planning/scenario_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/scenario_planning.launch.xml index 6a7e00154256a..f96cac4f017a6 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/scenario_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/scenario_planning.launch.xml @@ -27,7 +27,7 @@ - + diff --git a/planning/autoware_behavior_velocity_planner/src/node.cpp b/planning/autoware_behavior_velocity_planner/src/node.cpp index 59049ef7f07f3..3ff4e813b3266 100644 --- a/planning/autoware_behavior_velocity_planner/src/node.cpp +++ b/planning/autoware_behavior_velocity_planner/src/node.cpp @@ -310,7 +310,7 @@ void BehaviorVelocityPlannerNode::onParam() // constructed. It would be required if it was a callback. std::lock_guard // lock(mutex_); planner_data_.velocity_smoother_ = - std::make_unique(*this); + std::make_unique(*this); planner_data_.velocity_smoother_->setWheelBase(planner_data_.vehicle_info_.wheel_base_m); } diff --git a/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp index 907683998dd29..c69f23215a369 100644 --- a/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp @@ -88,7 +88,7 @@ struct PlannerData bool is_simulation = false; // velocity smoother - std::shared_ptr velocity_smoother_; + std::shared_ptr velocity_smoother_; // route handler std::shared_ptr route_handler_; // parameters diff --git a/planning/autoware_behavior_velocity_planner_common/src/utilization/trajectory_utils.cpp b/planning/autoware_behavior_velocity_planner_common/src/utilization/trajectory_utils.cpp index 4d2ef59886ba7..1dc448bea5b86 100644 --- a/planning/autoware_behavior_velocity_planner_common/src/utilization/trajectory_utils.cpp +++ b/planning/autoware_behavior_velocity_planner_common/src/utilization/trajectory_utils.cpp @@ -82,7 +82,7 @@ bool smoothPath( traj_smoothed.begin(), traj_resampled.begin(), traj_resampled.begin() + traj_resampled_closest); if (external_v_limit) { - autoware_velocity_smoother::trajectory_utils::applyMaximumVelocityLimit( + autoware::velocity_smoother::trajectory_utils::applyMaximumVelocityLimit( traj_resampled_closest, traj_smoothed.size(), external_v_limit->max_velocity, traj_smoothed); } out_path = motion_utils::convertToPathWithLaneId(traj_smoothed); diff --git a/planning/autoware_path_optimizer/CMakeLists.txt b/planning/autoware_path_optimizer/CMakeLists.txt index 3ceeae1022b10..78077e6c42720 100644 --- a/planning/autoware_path_optimizer/CMakeLists.txt +++ b/planning/autoware_path_optimizer/CMakeLists.txt @@ -41,7 +41,7 @@ target_include_directories(autoware_path_optimizer # register node rclcpp_components_register_node(autoware_path_optimizer - PLUGIN "autoware_path_optimizer::PathOptimizer" + PLUGIN "autoware::path_optimizer::PathOptimizer" EXECUTABLE path_optimizer_node ) diff --git a/planning/autoware_path_optimizer/include/autoware_path_optimizer/common_structs.hpp b/planning/autoware_path_optimizer/include/autoware_path_optimizer/common_structs.hpp index b27eff787ca5a..d2de8d201d9fa 100644 --- a/planning/autoware_path_optimizer/include/autoware_path_optimizer/common_structs.hpp +++ b/planning/autoware_path_optimizer/include/autoware_path_optimizer/common_structs.hpp @@ -25,7 +25,7 @@ #include #include -namespace autoware_path_optimizer +namespace autoware::path_optimizer { struct ReferencePoint; struct Bounds; @@ -153,6 +153,6 @@ struct EgoNearestParam double dist_threshold{0.0}; double yaw_threshold{0.0}; }; -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer #endif // AUTOWARE_PATH_OPTIMIZER__COMMON_STRUCTS_HPP_ diff --git a/planning/autoware_path_optimizer/include/autoware_path_optimizer/debug_marker.hpp b/planning/autoware_path_optimizer/include/autoware_path_optimizer/debug_marker.hpp index d1d2abaeaad61..edca8d706047b 100644 --- a/planning/autoware_path_optimizer/include/autoware_path_optimizer/debug_marker.hpp +++ b/planning/autoware_path_optimizer/include/autoware_path_optimizer/debug_marker.hpp @@ -25,11 +25,11 @@ #include #include -namespace autoware_path_optimizer +namespace autoware::path_optimizer { MarkerArray getDebugMarker( const DebugData & debug_data, const std::vector & optimized_points, const vehicle_info_util::VehicleInfo & vehicle_info, const bool publish_extra_marker); -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer #endif // AUTOWARE_PATH_OPTIMIZER__DEBUG_MARKER_HPP_ diff --git a/planning/autoware_path_optimizer/include/autoware_path_optimizer/mpt_optimizer.hpp b/planning/autoware_path_optimizer/include/autoware_path_optimizer/mpt_optimizer.hpp index 33da339c62e40..8c207a9a3830f 100644 --- a/planning/autoware_path_optimizer/include/autoware_path_optimizer/mpt_optimizer.hpp +++ b/planning/autoware_path_optimizer/include/autoware_path_optimizer/mpt_optimizer.hpp @@ -34,7 +34,7 @@ #include #include -namespace autoware_path_optimizer +namespace autoware::path_optimizer { struct Bounds { @@ -308,5 +308,5 @@ class MPTOptimizer size_t getNumberOfSlackVariables() const; std::optional calcNormalizedAvoidanceCost(const ReferencePoint & ref_point) const; }; -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer #endif // AUTOWARE_PATH_OPTIMIZER__MPT_OPTIMIZER_HPP_ diff --git a/planning/autoware_path_optimizer/include/autoware_path_optimizer/node.hpp b/planning/autoware_path_optimizer/include/autoware_path_optimizer/node.hpp index a0e776628e3cb..30c95debe11cb 100644 --- a/planning/autoware_path_optimizer/include/autoware_path_optimizer/node.hpp +++ b/planning/autoware_path_optimizer/include/autoware_path_optimizer/node.hpp @@ -33,7 +33,7 @@ #include #include -namespace autoware_path_optimizer +namespace autoware::path_optimizer { class PathOptimizer : public rclcpp::Node { @@ -141,6 +141,6 @@ class PathOptimizer : public rclcpp::Node std::unique_ptr published_time_publisher_; }; -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer #endif // AUTOWARE_PATH_OPTIMIZER__NODE_HPP_ diff --git a/planning/autoware_path_optimizer/include/autoware_path_optimizer/replan_checker.hpp b/planning/autoware_path_optimizer/include/autoware_path_optimizer/replan_checker.hpp index 8270bb631e0ae..26d9599f07091 100644 --- a/planning/autoware_path_optimizer/include/autoware_path_optimizer/replan_checker.hpp +++ b/planning/autoware_path_optimizer/include/autoware_path_optimizer/replan_checker.hpp @@ -24,7 +24,7 @@ #include #include -namespace autoware_path_optimizer +namespace autoware::path_optimizer { class ReplanChecker { @@ -66,6 +66,6 @@ class ReplanChecker bool isPathGoalChanged( const PlannerData & planner_data, const std::vector & prev_traj_points) const; }; -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer #endif // AUTOWARE_PATH_OPTIMIZER__REPLAN_CHECKER_HPP_ diff --git a/planning/autoware_path_optimizer/include/autoware_path_optimizer/state_equation_generator.hpp b/planning/autoware_path_optimizer/include/autoware_path_optimizer/state_equation_generator.hpp index 6ee4fcb0ab7a5..0c41da0ee5f62 100644 --- a/planning/autoware_path_optimizer/include/autoware_path_optimizer/state_equation_generator.hpp +++ b/planning/autoware_path_optimizer/include/autoware_path_optimizer/state_equation_generator.hpp @@ -22,7 +22,7 @@ #include #include -namespace autoware_path_optimizer +namespace autoware::path_optimizer { struct ReferencePoint; @@ -58,5 +58,5 @@ class StateEquationGenerator std::unique_ptr vehicle_model_ptr_; mutable std::shared_ptr time_keeper_ptr_; }; -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer #endif // AUTOWARE_PATH_OPTIMIZER__STATE_EQUATION_GENERATOR_HPP_ diff --git a/planning/autoware_path_optimizer/include/autoware_path_optimizer/type_alias.hpp b/planning/autoware_path_optimizer/include/autoware_path_optimizer/type_alias.hpp index 755d0b2ace297..63a5840789a6b 100644 --- a/planning/autoware_path_optimizer/include/autoware_path_optimizer/type_alias.hpp +++ b/planning/autoware_path_optimizer/include/autoware_path_optimizer/type_alias.hpp @@ -28,7 +28,7 @@ #include "tier4_debug_msgs/msg/string_stamped.hpp" #include "visualization_msgs/msg/marker_array.hpp" -namespace autoware_path_optimizer +namespace autoware::path_optimizer { // std_msgs using std_msgs::msg::Header; @@ -45,6 +45,6 @@ using visualization_msgs::msg::MarkerArray; // debug using tier4_debug_msgs::msg::Float64Stamped; using tier4_debug_msgs::msg::StringStamped; -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer #endif // AUTOWARE_PATH_OPTIMIZER__TYPE_ALIAS_HPP_ diff --git a/planning/autoware_path_optimizer/include/autoware_path_optimizer/utils/geometry_utils.hpp b/planning/autoware_path_optimizer/include/autoware_path_optimizer/utils/geometry_utils.hpp index 32ef8cd5941fc..588b68f52a094 100644 --- a/planning/autoware_path_optimizer/include/autoware_path_optimizer/utils/geometry_utils.hpp +++ b/planning/autoware_path_optimizer/include/autoware_path_optimizer/utils/geometry_utils.hpp @@ -39,13 +39,13 @@ namespace tier4_autoware_utils { template <> -geometry_msgs::msg::Point getPoint(const autoware_path_optimizer::ReferencePoint & p); +geometry_msgs::msg::Point getPoint(const autoware::path_optimizer::ReferencePoint & p); template <> -geometry_msgs::msg::Pose getPose(const autoware_path_optimizer::ReferencePoint & p); +geometry_msgs::msg::Pose getPose(const autoware::path_optimizer::ReferencePoint & p); } // namespace tier4_autoware_utils -namespace autoware_path_optimizer +namespace autoware::path_optimizer { namespace geometry_utils { @@ -68,5 +68,5 @@ bool isOutsideDrivableAreaFromRectangleFootprint( const vehicle_info_util::VehicleInfo & vehicle_info, const bool use_footprint_polygon_for_outside_drivable_area_check); } // namespace geometry_utils -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer #endif // AUTOWARE_PATH_OPTIMIZER__UTILS__GEOMETRY_UTILS_HPP_ diff --git a/planning/autoware_path_optimizer/include/autoware_path_optimizer/utils/trajectory_utils.hpp b/planning/autoware_path_optimizer/include/autoware_path_optimizer/utils/trajectory_utils.hpp index 1056d80ef37aa..f3f528df2ec42 100644 --- a/planning/autoware_path_optimizer/include/autoware_path_optimizer/utils/trajectory_utils.hpp +++ b/planning/autoware_path_optimizer/include/autoware_path_optimizer/utils/trajectory_utils.hpp @@ -38,16 +38,16 @@ namespace tier4_autoware_utils { template <> -geometry_msgs::msg::Point getPoint(const autoware_path_optimizer::ReferencePoint & p); +geometry_msgs::msg::Point getPoint(const autoware::path_optimizer::ReferencePoint & p); template <> -geometry_msgs::msg::Pose getPose(const autoware_path_optimizer::ReferencePoint & p); +geometry_msgs::msg::Pose getPose(const autoware::path_optimizer::ReferencePoint & p); template <> -double getLongitudinalVelocity(const autoware_path_optimizer::ReferencePoint & p); +double getLongitudinalVelocity(const autoware::path_optimizer::ReferencePoint & p); } // namespace tier4_autoware_utils -namespace autoware_path_optimizer +namespace autoware::path_optimizer { namespace trajectory_utils { @@ -214,5 +214,5 @@ void insertStopPoint( std::vector & traj_points, const geometry_msgs::msg::Pose & input_stop_pose, const size_t stop_seg_idx); } // namespace trajectory_utils -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer #endif // AUTOWARE_PATH_OPTIMIZER__UTILS__TRAJECTORY_UTILS_HPP_ diff --git a/planning/autoware_path_optimizer/src/debug_marker.cpp b/planning/autoware_path_optimizer/src/debug_marker.cpp index 3127d521160c2..7c644f4448a0c 100644 --- a/planning/autoware_path_optimizer/src/debug_marker.cpp +++ b/planning/autoware_path_optimizer/src/debug_marker.cpp @@ -18,7 +18,7 @@ #include "visualization_msgs/msg/marker_array.hpp" -namespace autoware_path_optimizer +namespace autoware::path_optimizer { using tier4_autoware_utils::appendMarkerArray; using tier4_autoware_utils::createDefaultMarker; @@ -432,4 +432,4 @@ MarkerArray getDebugMarker( return marker_array; } -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer diff --git a/planning/autoware_path_optimizer/src/mpt_optimizer.cpp b/planning/autoware_path_optimizer/src/mpt_optimizer.cpp index ece301e64c97e..2ab622c6b4b58 100644 --- a/planning/autoware_path_optimizer/src/mpt_optimizer.cpp +++ b/planning/autoware_path_optimizer/src/mpt_optimizer.cpp @@ -29,7 +29,7 @@ #include #include -namespace autoware_path_optimizer +namespace autoware::path_optimizer { namespace { @@ -1783,4 +1783,4 @@ std::optional MPTOptimizer::calcNormalizedAvoidanceCost( } return std::clamp(-negative_avoidance_cost / mpt_param_.max_avoidance_cost, 0.0, 1.0); } -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer diff --git a/planning/autoware_path_optimizer/src/node.cpp b/planning/autoware_path_optimizer/src/node.cpp index 49d41e6b07884..816c0d459d95f 100644 --- a/planning/autoware_path_optimizer/src/node.cpp +++ b/planning/autoware_path_optimizer/src/node.cpp @@ -25,7 +25,7 @@ #include #include -namespace autoware_path_optimizer +namespace autoware::path_optimizer { namespace { @@ -666,7 +666,7 @@ void PathOptimizer::publishDebugData(const Header & header) const time_keeper_ptr_->toc(__func__, " "); } -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer #include "rclcpp_components/register_node_macro.hpp" -RCLCPP_COMPONENTS_REGISTER_NODE(autoware_path_optimizer::PathOptimizer) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::path_optimizer::PathOptimizer) diff --git a/planning/autoware_path_optimizer/src/replan_checker.cpp b/planning/autoware_path_optimizer/src/replan_checker.cpp index 797041ee75416..6745872f50b02 100644 --- a/planning/autoware_path_optimizer/src/replan_checker.cpp +++ b/planning/autoware_path_optimizer/src/replan_checker.cpp @@ -21,7 +21,7 @@ #include -namespace autoware_path_optimizer +namespace autoware::path_optimizer { ReplanChecker::ReplanChecker(rclcpp::Node * node, const EgoNearestParam & ego_nearest_param) : ego_nearest_param_(ego_nearest_param), logger_(node->get_logger().get_child("replan_checker")) @@ -212,4 +212,4 @@ bool ReplanChecker::isPathGoalChanged( return true; } -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer diff --git a/planning/autoware_path_optimizer/src/state_equation_generator.cpp b/planning/autoware_path_optimizer/src/state_equation_generator.cpp index 7712fbbf6c3cf..ec6a9e575be95 100644 --- a/planning/autoware_path_optimizer/src/state_equation_generator.cpp +++ b/planning/autoware_path_optimizer/src/state_equation_generator.cpp @@ -16,7 +16,7 @@ #include "autoware_path_optimizer/mpt_optimizer.hpp" -namespace autoware_path_optimizer +namespace autoware::path_optimizer { // state equation: x = B u + W (u includes x_0) // NOTE: Originally, x_t+1 = Ad x_t + Bd u + Wd. @@ -69,4 +69,4 @@ Eigen::VectorXd StateEquationGenerator::predict( { return mat.B * U + mat.W; } -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer diff --git a/planning/autoware_path_optimizer/src/utils/geometry_utils.cpp b/planning/autoware_path_optimizer/src/utils/geometry_utils.cpp index 9d93cdc26a7ed..45302c0b729a9 100644 --- a/planning/autoware_path_optimizer/src/utils/geometry_utils.cpp +++ b/planning/autoware_path_optimizer/src/utils/geometry_utils.cpp @@ -36,7 +36,7 @@ #include #include -namespace autoware_path_optimizer +namespace autoware::path_optimizer { namespace bg = boost::geometry; using tier4_autoware_utils::LinearRing2d; @@ -207,4 +207,4 @@ bool isOutsideDrivableAreaFromRectangleFootprint( return false; } } // namespace geometry_utils -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer diff --git a/planning/autoware_path_optimizer/src/utils/trajectory_utils.cpp b/planning/autoware_path_optimizer/src/utils/trajectory_utils.cpp index 7983c5c2a3c2f..75e2b75b232e0 100644 --- a/planning/autoware_path_optimizer/src/utils/trajectory_utils.cpp +++ b/planning/autoware_path_optimizer/src/utils/trajectory_utils.cpp @@ -36,25 +36,25 @@ namespace tier4_autoware_utils { template <> -geometry_msgs::msg::Point getPoint(const autoware_path_optimizer::ReferencePoint & p) +geometry_msgs::msg::Point getPoint(const autoware::path_optimizer::ReferencePoint & p) { return p.pose.position; } template <> -geometry_msgs::msg::Pose getPose(const autoware_path_optimizer::ReferencePoint & p) +geometry_msgs::msg::Pose getPose(const autoware::path_optimizer::ReferencePoint & p) { return p.pose; } template <> -double getLongitudinalVelocity(const autoware_path_optimizer::ReferencePoint & p) +double getLongitudinalVelocity(const autoware::path_optimizer::ReferencePoint & p) { return p.longitudinal_velocity_mps; } } // namespace tier4_autoware_utils -namespace autoware_path_optimizer +namespace autoware::path_optimizer { namespace trajectory_utils { @@ -242,4 +242,4 @@ void insertStopPoint( traj_points.insert(traj_points.begin() + stop_seg_idx + 1, additional_traj_point); } } // namespace trajectory_utils -} // namespace autoware_path_optimizer +} // namespace autoware::path_optimizer diff --git a/planning/autoware_path_optimizer/test/test_path_optimizer_node_interface.cpp b/planning/autoware_path_optimizer/test/test_path_optimizer_node_interface.cpp index 8ef099ba09f24..4af88539597be 100644 --- a/planning/autoware_path_optimizer/test/test_path_optimizer_node_interface.cpp +++ b/planning/autoware_path_optimizer/test/test_path_optimizer_node_interface.cpp @@ -42,7 +42,7 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionTrajectory) planning_test_utils_dir + "/config/test_nearest_search.param.yaml", "--params-file", path_optimizer_dir + "/config/path_optimizer.param.yaml"}); - auto test_target_node = std::make_shared(node_options); + auto test_target_node = std::make_shared(node_options); // publish necessary topics from test_manager test_manager->publishOdometry(test_target_node, "path_optimizer/input/odometry"); diff --git a/planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.cpp b/planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.cpp index 9eb9a2b432a21..0705f0b51ddd3 100644 --- a/planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.cpp +++ b/planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.cpp @@ -130,7 +130,7 @@ std::vector OptimizationTrajectoryBasedCenterline::optimize_tra const auto eb_path_smoother_ptr = path_smoother::ElasticBandSmoother(create_node_options()).getElasticBandSmoother(); const auto mpt_optimizer_ptr = - autoware_path_optimizer::PathOptimizer(create_node_options()).getMPTOptimizer(); + autoware::path_optimizer::PathOptimizer(create_node_options()).getMPTOptimizer(); // NOTE: The optimization is executed every valid_optimized_traj_points_num points. constexpr int valid_optimized_traj_points_num = 10; @@ -158,7 +158,7 @@ std::vector OptimizationTrajectoryBasedCenterline::optimize_tra // road collision avoidance by model predictive trajectory in the autoware_path_optimizer // package - const autoware_path_optimizer::PlannerData planner_data{ + const autoware::path_optimizer::PlannerData planner_data{ raw_path.header, smoothed_traj_points, raw_path.left_bound, raw_path.right_bound, virtual_ego_pose}; const auto optimized_traj_points = mpt_optimizer_ptr->optimizeTrajectory(planner_data); diff --git a/planning/autoware_velocity_smoother/CMakeLists.txt b/planning/autoware_velocity_smoother/CMakeLists.txt index fee13513a7a97..9dd0c62c4537e 100644 --- a/planning/autoware_velocity_smoother/CMakeLists.txt +++ b/planning/autoware_velocity_smoother/CMakeLists.txt @@ -41,7 +41,7 @@ target_link_libraries(${PROJECT_NAME}_node ) rclcpp_components_register_node(${PROJECT_NAME}_node - PLUGIN "autoware_velocity_smoother::VelocitySmootherNode" + PLUGIN "autoware::velocity_smoother::VelocitySmootherNode" EXECUTABLE velocity_smoother_node ) diff --git a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/node.hpp b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/node.hpp index aecfab342e7e0..8ab7acd5ec9b3 100644 --- a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/node.hpp +++ b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/node.hpp @@ -53,7 +53,7 @@ #include #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { using autoware_planning_msgs::msg::Trajectory; using autoware_planning_msgs::msg::TrajectoryPoint; @@ -275,6 +275,6 @@ class VelocitySmootherNode : public rclcpp::Node std::unique_ptr logger_configure_; std::unique_ptr published_time_publisher_; }; -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother #endif // AUTOWARE_VELOCITY_SMOOTHER__NODE_HPP_ diff --git a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/resample.hpp b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/resample.hpp index dc85c2b2f336f..24a20ca8a588f 100644 --- a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/resample.hpp +++ b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/resample.hpp @@ -20,7 +20,7 @@ #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { namespace resampling { @@ -48,6 +48,6 @@ TrajectoryPoints resampleTrajectory( const double nearest_dist_threshold, const double nearest_yaw_threshold, const ResampleParam & param, const double nominal_ds, const bool use_zoh_for_v = true); } // namespace resampling -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother #endif // AUTOWARE_VELOCITY_SMOOTHER__RESAMPLE_HPP_ diff --git a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.hpp b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.hpp index e54a6e7b8afad..a5baa59f5d034 100644 --- a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.hpp +++ b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.hpp @@ -28,7 +28,7 @@ #include #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { class AnalyticalJerkConstrainedSmoother : public SmootherBase { @@ -113,7 +113,7 @@ class AnalyticalJerkConstrainedSmoother : public SmootherBase std::string strTimes(const std::vector & times) const; std::string strStartIndices(const std::vector & start_indices) const; }; -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother // clang-format off #endif // AUTOWARE_VELOCITY_SMOOTHER__SMOOTHER__ANALYTICAL_JERK_CONSTRAINED_SMOOTHER__ANALYTICAL_JERK_CONSTRAINED_SMOOTHER_HPP_ // NOLINT diff --git a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/analytical_jerk_constrained_smoother/velocity_planning_utils.hpp b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/analytical_jerk_constrained_smoother/velocity_planning_utils.hpp index 3ab4fce11fd0b..0c18e102f6f66 100644 --- a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/analytical_jerk_constrained_smoother/velocity_planning_utils.hpp +++ b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/analytical_jerk_constrained_smoother/velocity_planning_utils.hpp @@ -25,7 +25,7 @@ #include #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { namespace analytical_velocity_planning_utils { @@ -51,7 +51,7 @@ double integ_x(double x0, double v0, double a0, double j0, double t); double integ_v(double v0, double a0, double j0, double t); double integ_a(double a0, double j0, double t); } // namespace analytical_velocity_planning_utils -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother // clang-format off #endif // AUTOWARE_VELOCITY_SMOOTHER__SMOOTHER__ANALYTICAL_JERK_CONSTRAINED_SMOOTHER__VELOCITY_PLANNING_UTILS_HPP_ // NOLINT diff --git a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/jerk_filtered_smoother.hpp b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/jerk_filtered_smoother.hpp index 09c1e7e96be7b..4e93fcd339140 100644 --- a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/jerk_filtered_smoother.hpp +++ b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/jerk_filtered_smoother.hpp @@ -26,7 +26,7 @@ #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { class JerkFilteredSmoother : public SmootherBase { @@ -69,6 +69,6 @@ class JerkFilteredSmoother : public SmootherBase const double v0, const double a0, const double a_min, const double j_min, const TrajectoryPoints & forward_filtered, const TrajectoryPoints & backward_filtered) const; }; -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother #endif // AUTOWARE_VELOCITY_SMOOTHER__SMOOTHER__JERK_FILTERED_SMOOTHER_HPP_ diff --git a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/l2_pseudo_jerk_smoother.hpp b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/l2_pseudo_jerk_smoother.hpp index 066e0acef67f6..44fa263e71fb9 100644 --- a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/l2_pseudo_jerk_smoother.hpp +++ b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/l2_pseudo_jerk_smoother.hpp @@ -26,7 +26,7 @@ #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { class L2PseudoJerkSmoother : public SmootherBase { @@ -56,6 +56,6 @@ class L2PseudoJerkSmoother : public SmootherBase autoware::common::osqp::OSQPInterface qp_solver_; rclcpp::Logger logger_{rclcpp::get_logger("smoother").get_child("l2_pseudo_jerk_smoother")}; }; -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother #endif // AUTOWARE_VELOCITY_SMOOTHER__SMOOTHER__L2_PSEUDO_JERK_SMOOTHER_HPP_ diff --git a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/linf_pseudo_jerk_smoother.hpp b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/linf_pseudo_jerk_smoother.hpp index b54de318e9702..f638e03658e05 100644 --- a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/linf_pseudo_jerk_smoother.hpp +++ b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/linf_pseudo_jerk_smoother.hpp @@ -26,7 +26,7 @@ #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { class LinfPseudoJerkSmoother : public SmootherBase { @@ -56,6 +56,6 @@ class LinfPseudoJerkSmoother : public SmootherBase autoware::common::osqp::OSQPInterface qp_solver_; rclcpp::Logger logger_{rclcpp::get_logger("smoother").get_child("linf_pseudo_jerk_smoother")}; }; -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother #endif // AUTOWARE_VELOCITY_SMOOTHER__SMOOTHER__LINF_PSEUDO_JERK_SMOOTHER_HPP_ diff --git a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/smoother_base.hpp b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/smoother_base.hpp index 43ccfcf193f14..0c17ef5bdbb9d 100644 --- a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/smoother_base.hpp +++ b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/smoother/smoother_base.hpp @@ -23,7 +23,7 @@ #include #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { using autoware_planning_msgs::msg::TrajectoryPoint; using TrajectoryPoints = std::vector; @@ -86,6 +86,6 @@ class SmootherBase protected: BaseParam base_param_; }; -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother #endif // AUTOWARE_VELOCITY_SMOOTHER__SMOOTHER__SMOOTHER_BASE_HPP_ diff --git a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/trajectory_utils.hpp b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/trajectory_utils.hpp index d35f80fb7fad8..f7999d1c8b04c 100644 --- a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/trajectory_utils.hpp +++ b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/trajectory_utils.hpp @@ -23,7 +23,7 @@ #include #include -namespace autoware_velocity_smoother::trajectory_utils +namespace autoware::velocity_smoother::trajectory_utils { using autoware_planning_msgs::msg::TrajectoryPoint; using TrajectoryPoints = std::vector; @@ -77,6 +77,6 @@ std::vector calcVelocityProfileWithConstantJerkAndAccelerationLimit( double calcStopDistance(const TrajectoryPoints & trajectory, const size_t closest); -} // namespace autoware_velocity_smoother::trajectory_utils +} // namespace autoware::velocity_smoother::trajectory_utils #endif // AUTOWARE_VELOCITY_SMOOTHER__TRAJECTORY_UTILS_HPP_ diff --git a/planning/autoware_velocity_smoother/src/node.cpp b/planning/autoware_velocity_smoother/src/node.cpp index 0ea10534eb126..0fd83871153f0 100644 --- a/planning/autoware_velocity_smoother/src/node.cpp +++ b/planning/autoware_velocity_smoother/src/node.cpp @@ -32,7 +32,7 @@ #include // clang-format on -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { VelocitySmootherNode::VelocitySmootherNode(const rclcpp::NodeOptions & node_options) : Node("velocity_smoother", node_options) @@ -1099,7 +1099,7 @@ TrajectoryPoint VelocitySmootherNode::calcProjectedTrajectoryPointFromEgo( return calcProjectedTrajectoryPoint(trajectory, current_odometry_ptr_->pose.pose); } -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother #include "rclcpp_components/register_node_macro.hpp" -RCLCPP_COMPONENTS_REGISTER_NODE(autoware_velocity_smoother::VelocitySmootherNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::velocity_smoother::VelocitySmootherNode) diff --git a/planning/autoware_velocity_smoother/src/resample.cpp b/planning/autoware_velocity_smoother/src/resample.cpp index 17ea1eb9fc9bd..af3b222a71ef9 100644 --- a/planning/autoware_velocity_smoother/src/resample.cpp +++ b/planning/autoware_velocity_smoother/src/resample.cpp @@ -22,7 +22,7 @@ #include #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { namespace resampling { @@ -264,4 +264,4 @@ TrajectoryPoints resampleTrajectory( } } // namespace resampling -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother diff --git a/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.cpp b/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.cpp index 9cdfc515d51b7..dc5f4f19ce771 100644 --- a/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.cpp +++ b/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.cpp @@ -64,7 +64,7 @@ bool applyMaxVelocity( } // namespace -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { AnalyticalJerkConstrainedSmoother::AnalyticalJerkConstrainedSmoother(rclcpp::Node & node) : SmootherBase(node) @@ -658,4 +658,4 @@ std::string AnalyticalJerkConstrainedSmoother::strStartIndices( return ss.str(); } -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother diff --git a/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/velocity_planning_utils.cpp b/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/velocity_planning_utils.cpp index 84ac29d14bdc5..e3edcfbbec681 100644 --- a/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/velocity_planning_utils.cpp +++ b/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/velocity_planning_utils.cpp @@ -19,7 +19,7 @@ #include #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { namespace analytical_velocity_planning_utils { @@ -353,4 +353,4 @@ double integ_a(double a0, double j0, double t) } } // namespace analytical_velocity_planning_utils -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother diff --git a/planning/autoware_velocity_smoother/src/smoother/jerk_filtered_smoother.cpp b/planning/autoware_velocity_smoother/src/smoother/jerk_filtered_smoother.cpp index d212cfc0bcedf..d759930eb4320 100644 --- a/planning/autoware_velocity_smoother/src/smoother/jerk_filtered_smoother.cpp +++ b/planning/autoware_velocity_smoother/src/smoother/jerk_filtered_smoother.cpp @@ -27,7 +27,7 @@ #define VERBOSE_TRAJECTORY_VELOCITY false -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { JerkFilteredSmoother::JerkFilteredSmoother(rclcpp::Node & node) : SmootherBase(node) { @@ -480,4 +480,4 @@ TrajectoryPoints JerkFilteredSmoother::resampleTrajectory( smoother_param_.jerk_filter_ds); } -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother diff --git a/planning/autoware_velocity_smoother/src/smoother/l2_pseudo_jerk_smoother.cpp b/planning/autoware_velocity_smoother/src/smoother/l2_pseudo_jerk_smoother.cpp index 3c2872f2e58e3..fff1166567aee 100644 --- a/planning/autoware_velocity_smoother/src/smoother/l2_pseudo_jerk_smoother.cpp +++ b/planning/autoware_velocity_smoother/src/smoother/l2_pseudo_jerk_smoother.cpp @@ -23,7 +23,7 @@ #include #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { L2PseudoJerkSmoother::L2PseudoJerkSmoother(rclcpp::Node & node) : SmootherBase(node) { @@ -242,4 +242,4 @@ TrajectoryPoints L2PseudoJerkSmoother::resampleTrajectory( base_param_.resample_param); } -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother diff --git a/planning/autoware_velocity_smoother/src/smoother/linf_pseudo_jerk_smoother.cpp b/planning/autoware_velocity_smoother/src/smoother/linf_pseudo_jerk_smoother.cpp index f434d8d4514ca..b00936f3092ad 100644 --- a/planning/autoware_velocity_smoother/src/smoother/linf_pseudo_jerk_smoother.cpp +++ b/planning/autoware_velocity_smoother/src/smoother/linf_pseudo_jerk_smoother.cpp @@ -23,7 +23,7 @@ #include #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { LinfPseudoJerkSmoother::LinfPseudoJerkSmoother(rclcpp::Node & node) : SmootherBase(node) { @@ -254,4 +254,4 @@ TrajectoryPoints LinfPseudoJerkSmoother::resampleTrajectory( base_param_.resample_param); } -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother diff --git a/planning/autoware_velocity_smoother/src/smoother/smoother_base.cpp b/planning/autoware_velocity_smoother/src/smoother/smoother_base.cpp index 5704113067244..e1d72889203cc 100644 --- a/planning/autoware_velocity_smoother/src/smoother/smoother_base.cpp +++ b/planning/autoware_velocity_smoother/src/smoother/smoother_base.cpp @@ -26,7 +26,7 @@ #include #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { namespace @@ -270,4 +270,4 @@ TrajectoryPoints SmootherBase::applySteeringRateLimit( return output; } -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother diff --git a/planning/autoware_velocity_smoother/src/trajectory_utils.cpp b/planning/autoware_velocity_smoother/src/trajectory_utils.cpp index aff1a0b0e3213..6ebf246748666 100644 --- a/planning/autoware_velocity_smoother/src/trajectory_utils.cpp +++ b/planning/autoware_velocity_smoother/src/trajectory_utils.cpp @@ -25,7 +25,7 @@ #include #include -namespace autoware_velocity_smoother +namespace autoware::velocity_smoother { using geometry_msgs::msg::Point; namespace trajectory_utils @@ -610,4 +610,4 @@ double calcStopDistance(const TrajectoryPoints & trajectory, const size_t closes } } // namespace trajectory_utils -} // namespace autoware_velocity_smoother +} // namespace autoware::velocity_smoother diff --git a/planning/autoware_velocity_smoother/test/test_smoother_functions.cpp b/planning/autoware_velocity_smoother/test/test_smoother_functions.cpp index 51ee84f535ca4..f1b7dbb197ea2 100644 --- a/planning/autoware_velocity_smoother/test/test_smoother_functions.cpp +++ b/planning/autoware_velocity_smoother/test/test_smoother_functions.cpp @@ -18,8 +18,8 @@ #include +using autoware::velocity_smoother::trajectory_utils::TrajectoryPoints; using autoware_planning_msgs::msg::TrajectoryPoint; -using autoware_velocity_smoother::trajectory_utils::TrajectoryPoints; TrajectoryPoints genStraightTrajectory(const size_t size) { @@ -48,7 +48,7 @@ TEST(TestTrajectoryUtils, CalcTrajectoryCurvatureFrom3Points) const auto checkOutputSize = [](const size_t trajectory_size, const size_t idx_dist) { const auto trajectory_points = genStraightTrajectory(trajectory_size); const auto curvatures = - autoware_velocity_smoother::trajectory_utils::calcTrajectoryCurvatureFrom3Points( + autoware::velocity_smoother::trajectory_utils::calcTrajectoryCurvatureFrom3Points( trajectory_points, idx_dist); EXPECT_EQ(curvatures.size(), trajectory_size) << ", idx_dist = " << idx_dist; }; diff --git a/planning/autoware_velocity_smoother/test/test_velocity_smoother_node_interface.cpp b/planning/autoware_velocity_smoother/test/test_velocity_smoother_node_interface.cpp index f0145ea5a32a7..30a64955366e4 100644 --- a/planning/autoware_velocity_smoother/test/test_velocity_smoother_node_interface.cpp +++ b/planning/autoware_velocity_smoother/test/test_velocity_smoother_node_interface.cpp @@ -22,7 +22,7 @@ #include -using autoware_velocity_smoother::VelocitySmootherNode; +using autoware::velocity_smoother::VelocitySmootherNode; using planning_test_utils::PlanningInterfaceTestManager; std::shared_ptr generateTestManager() diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp index add6b5ef392ea..87aa4ac483feb 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp @@ -81,7 +81,7 @@ struct PlannerData tier4_v2x_msgs::msg::VirtualTrafficLightStateArray::ConstSharedPtr virtual_traffic_light_states; // velocity smoother - std::shared_ptr velocity_smoother_{}; + std::shared_ptr velocity_smoother_{}; // parameters vehicle_info_util::VehicleInfo vehicle_info_; diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp index 4d152afa250b7..262c32fe1ea47 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp @@ -241,7 +241,7 @@ void MotionVelocityPlannerNode::on_acceleration( void MotionVelocityPlannerNode::set_velocity_smoother_params() { planner_data_.velocity_smoother_ = - std::make_shared(*this); + std::make_shared(*this); } void MotionVelocityPlannerNode::on_lanelet_map( @@ -399,7 +399,7 @@ autoware::motion_velocity_planner::TrajectoryPoints MotionVelocityPlannerNode::s traj_smoothed.begin(), traj_resampled.begin(), traj_resampled.begin() + traj_resampled_closest); if (external_v_limit) { - autoware_velocity_smoother::trajectory_utils::applyMaximumVelocityLimit( + autoware::velocity_smoother::trajectory_utils::applyMaximumVelocityLimit( traj_resampled_closest, traj_smoothed.size(), external_v_limit->max_velocity, traj_smoothed); } return traj_smoothed; From fbe57b183f9be2cd56cf0c895df3ddfb5d84eb6a Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Fri, 7 Jun 2024 17:34:49 +0900 Subject: [PATCH 020/142] refactor(costmap_generator)!: add autoware prefix (#7329) refactor(costmap_generator): add autoware prefix Signed-off-by: kosuke55 --- .github/CODEOWNERS | 2 +- .../launch/scenario_planning/parking.launch.xml | 2 +- launch/tier4_planning_launch/package.xml | 2 +- .../README.md | 2 +- .../CMakeLists.txt | 12 ++++++------ .../README.md | 0 .../config/costmap_generator.param.yaml | 0 .../costmap_generator.hpp | 13 ++++++++----- .../object_map_utils.hpp | 6 +++--- .../objects_to_costmap.hpp | 10 ++++++---- .../points_to_costmap.hpp | 10 +++++++--- .../launch/costmap_generator.launch.xml | 4 ++-- .../costmap_generator_node.cpp | 9 ++++++--- .../object_map_utils.cpp | 2 +- .../objects_to_costmap.cpp | 5 ++++- .../points_to_costmap.cpp | 7 ++++++- .../package.xml | 4 ++-- .../schema/costmap_generator.schema.json | 0 .../test/test_objects_to_costmap.cpp | 5 ++++- .../test/test_points_to_costmap.cpp | 6 +++++- 20 files changed, 64 insertions(+), 37 deletions(-) rename planning/{costmap_generator => autoware_costmap_generator}/CMakeLists.txt (80%) rename planning/{costmap_generator => autoware_costmap_generator}/README.md (100%) rename planning/{costmap_generator => autoware_costmap_generator}/config/costmap_generator.param.yaml (100%) rename planning/{costmap_generator/include/costmap_generator => autoware_costmap_generator/include/autoware_costmap_generator}/costmap_generator.hpp (94%) rename planning/{costmap_generator/include/costmap_generator => autoware_costmap_generator/include/autoware_costmap_generator}/object_map_utils.hpp (95%) rename planning/{costmap_generator/include/costmap_generator => autoware_costmap_generator/include/autoware_costmap_generator}/objects_to_costmap.hpp (95%) rename planning/{costmap_generator/include/costmap_generator => autoware_costmap_generator/include/autoware_costmap_generator}/points_to_costmap.hpp (95%) rename planning/{costmap_generator => autoware_costmap_generator}/launch/costmap_generator.launch.xml (84%) rename planning/{costmap_generator/nodes/costmap_generator => autoware_costmap_generator/nodes/autoware_costmap_generator}/costmap_generator_node.cpp (98%) rename planning/{costmap_generator/nodes/costmap_generator => autoware_costmap_generator/nodes/autoware_costmap_generator}/object_map_utils.cpp (98%) rename planning/{costmap_generator/nodes/costmap_generator => autoware_costmap_generator/nodes/autoware_costmap_generator}/objects_to_costmap.cpp (98%) rename planning/{costmap_generator/nodes/costmap_generator => autoware_costmap_generator/nodes/autoware_costmap_generator}/points_to_costmap.cpp (97%) rename planning/{costmap_generator => autoware_costmap_generator}/package.xml (92%) rename planning/{costmap_generator => autoware_costmap_generator}/schema/costmap_generator.schema.json (100%) rename planning/{costmap_generator => autoware_costmap_generator}/test/test_objects_to_costmap.cpp (97%) rename planning/{costmap_generator => autoware_costmap_generator}/test/test_points_to_costmap.cpp (98%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7a0c8f8893a39..2eefee5606ab2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -153,6 +153,7 @@ planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp m planning/autoware_behavior_velocity_template_module/** daniel.sanchez@tier4.jp planning/autoware_behavior_velocity_virtual_traffic_light_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_walkway_module/** satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_costmap_generator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/autoware_external_velocity_limit_selector/** satoshi.ota@tier4.jp shinnosuke.hirakawa@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/autoware_path_optimizer/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/autoware_planning_test_manager/** kyoichi.sugahara@tier4.jp takamasa.horibe@tier4.jp @@ -183,7 +184,6 @@ planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp m planning/behavior_velocity_speed_bump_module/** mdogru@leodrive.ai shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_stop_line_module/** fumiya.watanabe@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp zhe.shen@tier4.jp planning/behavior_velocity_traffic_light_module/** mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp -planning/costmap_generator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/freespace_planner/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/freespace_planning_algorithms/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/mission_planner/** isamu.takagi@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp ryohsuke.mitsudome@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp diff --git a/launch/tier4_planning_launch/launch/scenario_planning/parking.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/parking.launch.xml index 98315919b540a..db5a9a0093e7c 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/parking.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/parking.launch.xml @@ -4,7 +4,7 @@ - + diff --git a/launch/tier4_planning_launch/package.xml b/launch/tier4_planning_launch/package.xml index 0a585bce673b6..e5def4c7aed0c 100644 --- a/launch/tier4_planning_launch/package.xml +++ b/launch/tier4_planning_launch/package.xml @@ -58,6 +58,7 @@ autoware_cmake autoware_behavior_velocity_planner + autoware_costmap_generator autoware_external_velocity_limit_selector autoware_path_optimizer autoware_planning_topic_converter @@ -66,7 +67,6 @@ autoware_surround_obstacle_checker autoware_velocity_smoother behavior_path_planner - costmap_generator external_cmd_selector freespace_planner glog_component diff --git a/planning/autoware_behavior_path_start_planner_module/README.md b/planning/autoware_behavior_path_start_planner_module/README.md index 71aa0a1abe704..bcb3b1bec1fd9 100644 --- a/planning/autoware_behavior_path_start_planner_module/README.md +++ b/planning/autoware_behavior_path_start_planner_module/README.md @@ -526,7 +526,7 @@ If a safe path cannot be generated from the current position, search backwards f ### **freespace pull out** If the vehicle gets stuck with pull out along lanes, execute freespace pull out. -To run this feature, you need to set `parking_lot` to the map, `activate_by_scenario` of [costmap_generator](../costmap_generator/README.md) to `false` and `enable_freespace_planner` to `true` +To run this feature, you need to set `parking_lot` to the map, `activate_by_scenario` of [costmap_generator](../autoware_costmap_generator/README.md) to `false` and `enable_freespace_planner` to `true` diff --git a/planning/costmap_generator/CMakeLists.txt b/planning/autoware_costmap_generator/CMakeLists.txt similarity index 80% rename from planning/costmap_generator/CMakeLists.txt rename to planning/autoware_costmap_generator/CMakeLists.txt index 620a997990001..b8b15a7312324 100644 --- a/planning/costmap_generator/CMakeLists.txt +++ b/planning/autoware_costmap_generator/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(costmap_generator) +project(autoware_costmap_generator) find_package(autoware_cmake REQUIRED) autoware_package() @@ -16,9 +16,9 @@ include_directories( ) ament_auto_add_library(costmap_generator_lib SHARED - nodes/costmap_generator/points_to_costmap.cpp - nodes/costmap_generator/objects_to_costmap.cpp - nodes/costmap_generator/object_map_utils.cpp + nodes/autoware_costmap_generator/points_to_costmap.cpp + nodes/autoware_costmap_generator/objects_to_costmap.cpp + nodes/autoware_costmap_generator/object_map_utils.cpp ) target_link_libraries(costmap_generator_lib ${PCL_LIBRARIES} @@ -33,7 +33,7 @@ if(${PCL_VERSION} GREATER_EQUAL 1.12.1) endif() ament_auto_add_library(costmap_generator_node SHARED - nodes/costmap_generator/costmap_generator_node.cpp + nodes/autoware_costmap_generator/costmap_generator_node.cpp ) target_link_libraries(costmap_generator_node ${PCL_LIBRARIES} @@ -41,7 +41,7 @@ target_link_libraries(costmap_generator_node ) rclcpp_components_register_node(costmap_generator_node - PLUGIN "CostmapGenerator" + PLUGIN "autoware::costmap_generator::CostmapGenerator" EXECUTABLE costmap_generator ) diff --git a/planning/costmap_generator/README.md b/planning/autoware_costmap_generator/README.md similarity index 100% rename from planning/costmap_generator/README.md rename to planning/autoware_costmap_generator/README.md diff --git a/planning/costmap_generator/config/costmap_generator.param.yaml b/planning/autoware_costmap_generator/config/costmap_generator.param.yaml similarity index 100% rename from planning/costmap_generator/config/costmap_generator.param.yaml rename to planning/autoware_costmap_generator/config/costmap_generator.param.yaml diff --git a/planning/costmap_generator/include/costmap_generator/costmap_generator.hpp b/planning/autoware_costmap_generator/include/autoware_costmap_generator/costmap_generator.hpp similarity index 94% rename from planning/costmap_generator/include/costmap_generator/costmap_generator.hpp rename to planning/autoware_costmap_generator/include/autoware_costmap_generator/costmap_generator.hpp index 31c8a05cc3c60..093c88541e9c8 100644 --- a/planning/costmap_generator/include/costmap_generator/costmap_generator.hpp +++ b/planning/autoware_costmap_generator/include/autoware_costmap_generator/costmap_generator.hpp @@ -42,11 +42,11 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ********************/ -#ifndef COSTMAP_GENERATOR__COSTMAP_GENERATOR_HPP_ -#define COSTMAP_GENERATOR__COSTMAP_GENERATOR_HPP_ +#ifndef AUTOWARE_COSTMAP_GENERATOR__COSTMAP_GENERATOR_HPP_ +#define AUTOWARE_COSTMAP_GENERATOR__COSTMAP_GENERATOR_HPP_ -#include "costmap_generator/objects_to_costmap.hpp" -#include "costmap_generator/points_to_costmap.hpp" +#include "autoware_costmap_generator/objects_to_costmap.hpp" +#include "autoware_costmap_generator/points_to_costmap.hpp" #include #include @@ -72,6 +72,8 @@ #include #include +namespace autoware::costmap_generator +{ class CostmapGenerator : public rclcpp::Node { public: @@ -197,5 +199,6 @@ class CostmapGenerator : public rclcpp::Node /// \brief calculate cost for final output grid_map::Matrix generateCombinedCostmap(); }; +} // namespace autoware::costmap_generator -#endif // COSTMAP_GENERATOR__COSTMAP_GENERATOR_HPP_ +#endif // AUTOWARE_COSTMAP_GENERATOR__COSTMAP_GENERATOR_HPP_ diff --git a/planning/costmap_generator/include/costmap_generator/object_map_utils.hpp b/planning/autoware_costmap_generator/include/autoware_costmap_generator/object_map_utils.hpp similarity index 95% rename from planning/costmap_generator/include/costmap_generator/object_map_utils.hpp rename to planning/autoware_costmap_generator/include/autoware_costmap_generator/object_map_utils.hpp index 282bd6dcc1beb..f4911cc428d36 100644 --- a/planning/costmap_generator/include/costmap_generator/object_map_utils.hpp +++ b/planning/autoware_costmap_generator/include/autoware_costmap_generator/object_map_utils.hpp @@ -30,8 +30,8 @@ * */ -#ifndef COSTMAP_GENERATOR__OBJECT_MAP_UTILS_HPP_ -#define COSTMAP_GENERATOR__OBJECT_MAP_UTILS_HPP_ +#ifndef AUTOWARE_COSTMAP_GENERATOR__OBJECT_MAP_UTILS_HPP_ +#define AUTOWARE_COSTMAP_GENERATOR__OBJECT_MAP_UTILS_HPP_ #include #include @@ -98,4 +98,4 @@ void FillPolygonAreas( } // namespace object_map -#endif // COSTMAP_GENERATOR__OBJECT_MAP_UTILS_HPP_ +#endif // AUTOWARE_COSTMAP_GENERATOR__OBJECT_MAP_UTILS_HPP_ diff --git a/planning/costmap_generator/include/costmap_generator/objects_to_costmap.hpp b/planning/autoware_costmap_generator/include/autoware_costmap_generator/objects_to_costmap.hpp similarity index 95% rename from planning/costmap_generator/include/costmap_generator/objects_to_costmap.hpp rename to planning/autoware_costmap_generator/include/autoware_costmap_generator/objects_to_costmap.hpp index a88bb97a623e2..aa11a98830dc3 100644 --- a/planning/costmap_generator/include/costmap_generator/objects_to_costmap.hpp +++ b/planning/autoware_costmap_generator/include/autoware_costmap_generator/objects_to_costmap.hpp @@ -42,8 +42,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ********************/ -#ifndef COSTMAP_GENERATOR__OBJECTS_TO_COSTMAP_HPP_ -#define COSTMAP_GENERATOR__OBJECTS_TO_COSTMAP_HPP_ +#ifndef AUTOWARE_COSTMAP_GENERATOR__OBJECTS_TO_COSTMAP_HPP_ +#define AUTOWARE_COSTMAP_GENERATOR__OBJECTS_TO_COSTMAP_HPP_ #include @@ -57,6 +57,8 @@ #include +namespace autoware::costmap_generator +{ class ObjectsToCostmap { public: @@ -123,5 +125,5 @@ class ObjectsToCostmap const grid_map::Polygon & polygon, const std::string & gridmap_layer_name, const float score, grid_map::GridMap & objects_costmap); }; - -#endif // COSTMAP_GENERATOR__OBJECTS_TO_COSTMAP_HPP_ +} // namespace autoware::costmap_generator +#endif // AUTOWARE_COSTMAP_GENERATOR__OBJECTS_TO_COSTMAP_HPP_ diff --git a/planning/costmap_generator/include/costmap_generator/points_to_costmap.hpp b/planning/autoware_costmap_generator/include/autoware_costmap_generator/points_to_costmap.hpp similarity index 95% rename from planning/costmap_generator/include/costmap_generator/points_to_costmap.hpp rename to planning/autoware_costmap_generator/include/autoware_costmap_generator/points_to_costmap.hpp index 3b179d63f1d2a..0e3abbd69ec20 100644 --- a/planning/costmap_generator/include/costmap_generator/points_to_costmap.hpp +++ b/planning/autoware_costmap_generator/include/autoware_costmap_generator/points_to_costmap.hpp @@ -42,8 +42,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ********************/ -#ifndef COSTMAP_GENERATOR__POINTS_TO_COSTMAP_HPP_ -#define COSTMAP_GENERATOR__POINTS_TO_COSTMAP_HPP_ +#ifndef AUTOWARE_COSTMAP_GENERATOR__POINTS_TO_COSTMAP_HPP_ +#define AUTOWARE_COSTMAP_GENERATOR__POINTS_TO_COSTMAP_HPP_ #include @@ -52,6 +52,9 @@ #include #include +namespace autoware::costmap_generator + +{ class PointsToCostmap { public: @@ -115,5 +118,6 @@ class PointsToCostmap const std::string & gridmap_layer_name, const std::vector>> grid_vec); }; +} // namespace autoware::costmap_generator -#endif // COSTMAP_GENERATOR__POINTS_TO_COSTMAP_HPP_ +#endif // AUTOWARE_COSTMAP_GENERATOR__POINTS_TO_COSTMAP_HPP_ diff --git a/planning/costmap_generator/launch/costmap_generator.launch.xml b/planning/autoware_costmap_generator/launch/costmap_generator.launch.xml similarity index 84% rename from planning/costmap_generator/launch/costmap_generator.launch.xml rename to planning/autoware_costmap_generator/launch/costmap_generator.launch.xml index ba8a71f5f428a..e7c378565dd0f 100644 --- a/planning/costmap_generator/launch/costmap_generator.launch.xml +++ b/planning/autoware_costmap_generator/launch/costmap_generator.launch.xml @@ -6,9 +6,9 @@ - + - + diff --git a/planning/costmap_generator/nodes/costmap_generator/costmap_generator_node.cpp b/planning/autoware_costmap_generator/nodes/autoware_costmap_generator/costmap_generator_node.cpp similarity index 98% rename from planning/costmap_generator/nodes/costmap_generator/costmap_generator_node.cpp rename to planning/autoware_costmap_generator/nodes/autoware_costmap_generator/costmap_generator_node.cpp index 777dfc7a50a6e..4302ac6ada645 100644 --- a/planning/costmap_generator/nodes/costmap_generator/costmap_generator_node.cpp +++ b/planning/autoware_costmap_generator/nodes/autoware_costmap_generator/costmap_generator_node.cpp @@ -42,8 +42,8 @@ * OF private_node SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ********************/ -#include "costmap_generator/costmap_generator.hpp" -#include "costmap_generator/object_map_utils.hpp" +#include "autoware_costmap_generator/costmap_generator.hpp" +#include "autoware_costmap_generator/object_map_utils.hpp" #include #include @@ -157,6 +157,8 @@ pcl::PointCloud getTransformedPointCloud( } // namespace +namespace autoware::costmap_generator +{ CostmapGenerator::CostmapGenerator(const rclcpp::NodeOptions & node_options) : Node("costmap_generator", node_options), tf_buffer_(this->get_clock()), tf_listener_(tf_buffer_) { @@ -476,6 +478,7 @@ void CostmapGenerator::publishCostmap(const grid_map::GridMap & costmap) out_gridmap_msg->header = header; pub_costmap_->publish(*out_gridmap_msg); } +} // namespace autoware::costmap_generator #include -RCLCPP_COMPONENTS_REGISTER_NODE(CostmapGenerator) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::costmap_generator::CostmapGenerator) diff --git a/planning/costmap_generator/nodes/costmap_generator/object_map_utils.cpp b/planning/autoware_costmap_generator/nodes/autoware_costmap_generator/object_map_utils.cpp similarity index 98% rename from planning/costmap_generator/nodes/costmap_generator/object_map_utils.cpp rename to planning/autoware_costmap_generator/nodes/autoware_costmap_generator/object_map_utils.cpp index 6955798be3e8a..4ce452814008c 100644 --- a/planning/costmap_generator/nodes/costmap_generator/object_map_utils.cpp +++ b/planning/autoware_costmap_generator/nodes/autoware_costmap_generator/object_map_utils.cpp @@ -30,7 +30,7 @@ * */ -#include "costmap_generator/object_map_utils.hpp" +#include "autoware_costmap_generator/object_map_utils.hpp" #include #include diff --git a/planning/costmap_generator/nodes/costmap_generator/objects_to_costmap.cpp b/planning/autoware_costmap_generator/nodes/autoware_costmap_generator/objects_to_costmap.cpp similarity index 98% rename from planning/costmap_generator/nodes/costmap_generator/objects_to_costmap.cpp rename to planning/autoware_costmap_generator/nodes/autoware_costmap_generator/objects_to_costmap.cpp index f6f024fb92a4e..afb2dbb9874c9 100644 --- a/planning/costmap_generator/nodes/costmap_generator/objects_to_costmap.cpp +++ b/planning/autoware_costmap_generator/nodes/autoware_costmap_generator/objects_to_costmap.cpp @@ -42,13 +42,15 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ********************/ -#include "costmap_generator/objects_to_costmap.hpp" +#include "autoware_costmap_generator/objects_to_costmap.hpp" #include #include #include +namespace autoware::costmap_generator +{ // Constructor ObjectsToCostmap::ObjectsToCostmap() : NUMBER_OF_POINTS(4), @@ -196,3 +198,4 @@ grid_map::Matrix ObjectsToCostmap::makeCostmapFromObjects( return objects_costmap[OBJECTS_COSTMAP_LAYER_]; } +} // namespace autoware::costmap_generator diff --git a/planning/costmap_generator/nodes/costmap_generator/points_to_costmap.cpp b/planning/autoware_costmap_generator/nodes/autoware_costmap_generator/points_to_costmap.cpp similarity index 97% rename from planning/costmap_generator/nodes/costmap_generator/points_to_costmap.cpp rename to planning/autoware_costmap_generator/nodes/autoware_costmap_generator/points_to_costmap.cpp index e875f68973a12..723c27201ac8a 100644 --- a/planning/costmap_generator/nodes/costmap_generator/points_to_costmap.cpp +++ b/planning/autoware_costmap_generator/nodes/autoware_costmap_generator/points_to_costmap.cpp @@ -42,11 +42,14 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ********************/ -#include "costmap_generator/points_to_costmap.hpp" +#include "autoware_costmap_generator/points_to_costmap.hpp" #include #include +namespace autoware::costmap_generator +{ + void PointsToCostmap::initGridmapParam(const grid_map::GridMap & gridmap) { grid_length_x_ = gridmap.getLength().x(); @@ -140,3 +143,5 @@ grid_map::Matrix PointsToCostmap::makeCostmapFromPoints( gridmap_layer_name, grid_vec); return costmap; } + +} // namespace autoware::costmap_generator diff --git a/planning/costmap_generator/package.xml b/planning/autoware_costmap_generator/package.xml similarity index 92% rename from planning/costmap_generator/package.xml rename to planning/autoware_costmap_generator/package.xml index dc94d74dce8ae..aa1ae80eaf953 100644 --- a/planning/costmap_generator/package.xml +++ b/planning/autoware_costmap_generator/package.xml @@ -1,9 +1,9 @@ - costmap_generator + autoware_costmap_generator 0.1.0 - The costmap_generator package + The autoware_costmap_generator package Kosuke Takeuchi Takamasa Horibe Takayuki Murooka diff --git a/planning/costmap_generator/schema/costmap_generator.schema.json b/planning/autoware_costmap_generator/schema/costmap_generator.schema.json similarity index 100% rename from planning/costmap_generator/schema/costmap_generator.schema.json rename to planning/autoware_costmap_generator/schema/costmap_generator.schema.json diff --git a/planning/costmap_generator/test/test_objects_to_costmap.cpp b/planning/autoware_costmap_generator/test/test_objects_to_costmap.cpp similarity index 97% rename from planning/costmap_generator/test/test_objects_to_costmap.cpp rename to planning/autoware_costmap_generator/test/test_objects_to_costmap.cpp index 15b853d0782aa..8d437865b8793 100644 --- a/planning/costmap_generator/test/test_objects_to_costmap.cpp +++ b/planning/autoware_costmap_generator/test/test_objects_to_costmap.cpp @@ -12,11 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include #include #include +namespace autoware::costmap_generator +{ using LABEL = autoware_perception_msgs::msg::ObjectClassification; class ObjectsToCostMapTest : public ::testing::Test @@ -134,3 +136,4 @@ TEST_F(ObjectsToCostMapTest, TestMakeCostmapFromObjects) } } } +} // namespace autoware::costmap_generator diff --git a/planning/costmap_generator/test/test_points_to_costmap.cpp b/planning/autoware_costmap_generator/test/test_points_to_costmap.cpp similarity index 98% rename from planning/costmap_generator/test/test_points_to_costmap.cpp rename to planning/autoware_costmap_generator/test/test_points_to_costmap.cpp index 2366dffc7fc6f..6c52e2dc6ce9d 100644 --- a/planning/costmap_generator/test/test_points_to_costmap.cpp +++ b/planning/autoware_costmap_generator/test/test_points_to_costmap.cpp @@ -12,9 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include #include + +namespace autoware::costmap_generator +{ using pointcloud = pcl::PointCloud; class PointsToCostmapTest : public ::testing::Test { @@ -216,3 +219,4 @@ TEST_F(PointsToCostmapTest, TestMakeCostmapFromPoints_invalidPoints_outOfGrid) EXPECT_EQ(nonempty_grid_cell_num, 0); } +} // namespace autoware::costmap_generator From 2b0de17b1602b5afcf7ad9ddfd69f25c7cc2d722 Mon Sep 17 00:00:00 2001 From: Masaki Baba Date: Fri, 7 Jun 2024 17:47:22 +0900 Subject: [PATCH 021/142] refactor(gyro_odometer): apply static analysis (#7360) * refactor based on linter Signed-off-by: a-maumau * style(pre-commit): autofix --------- Signed-off-by: a-maumau Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../gyro_odometer/diagnostics_module.hpp | 16 ++-- .../gyro_odometer/gyro_odometer_core.hpp | 9 +- .../gyro_odometer/src/diagnostics_module.cpp | 16 ++-- .../gyro_odometer/src/gyro_odometer_core.cpp | 91 +++++++++---------- .../test/test_gyro_odometer_helper.cpp | 6 +- .../test/test_gyro_odometer_helper.hpp | 9 +- .../test/test_gyro_odometer_pubsub.cpp | 41 +++++---- 7 files changed, 92 insertions(+), 96 deletions(-) diff --git a/localization/gyro_odometer/include/gyro_odometer/diagnostics_module.hpp b/localization/gyro_odometer/include/gyro_odometer/diagnostics_module.hpp index 49b881900b997..c5b7b7a592013 100644 --- a/localization/gyro_odometer/include/gyro_odometer/diagnostics_module.hpp +++ b/localization/gyro_odometer/include/gyro_odometer/diagnostics_module.hpp @@ -30,14 +30,14 @@ class DiagnosticsModule public: DiagnosticsModule(rclcpp::Node * node, const std::string & diagnostic_name); void clear(); - void addKeyValue(const diagnostic_msgs::msg::KeyValue & key_value_msg); + void add_key_value(const diagnostic_msgs::msg::KeyValue & key_value_msg); template - void addKeyValue(const std::string & key, const T & value); - void updateLevelAndMessage(const int8_t level, const std::string & message); + void add_key_value(const std::string & key, const T & value); + void update_level_and_message(const int8_t level, const std::string & message); void publish(const rclcpp::Time & publish_time_stamp); private: - diagnostic_msgs::msg::DiagnosticArray createDiagnosticsArray( + [[nodiscard]] diagnostic_msgs::msg::DiagnosticArray create_diagnostics_array( const rclcpp::Time & publish_time_stamp) const; rclcpp::Clock::SharedPtr clock_; @@ -47,18 +47,18 @@ class DiagnosticsModule }; template -void DiagnosticsModule::addKeyValue(const std::string & key, const T & value) +void DiagnosticsModule::add_key_value(const std::string & key, const T & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; key_value.value = std::to_string(value); - addKeyValue(key_value); + add_key_value(key_value); } template <> -void DiagnosticsModule::addKeyValue(const std::string & key, const std::string & value); +void DiagnosticsModule::add_key_value(const std::string & key, const std::string & value); template <> -void DiagnosticsModule::addKeyValue(const std::string & key, const bool & value); +void DiagnosticsModule::add_key_value(const std::string & key, const bool & value); } // namespace autoware::gyro_odometer diff --git a/localization/gyro_odometer/include/gyro_odometer/gyro_odometer_core.hpp b/localization/gyro_odometer/include/gyro_odometer/gyro_odometer_core.hpp index 3b2da504f938a..f85640ab2c523 100644 --- a/localization/gyro_odometer/include/gyro_odometer/gyro_odometer_core.hpp +++ b/localization/gyro_odometer/include/gyro_odometer/gyro_odometer_core.hpp @@ -47,14 +47,13 @@ class GyroOdometerNode : public rclcpp::Node public: explicit GyroOdometerNode(const rclcpp::NodeOptions & node_options); - ~GyroOdometerNode(); private: - void callbackVehicleTwist( + void callback_vehicle_twist( const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr vehicle_twist_msg_ptr); - void callbackImu(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg_ptr); - void concatGyroAndOdometer(); - void publishData(const geometry_msgs::msg::TwistWithCovarianceStamped & twist_with_cov_raw); + void callback_imu(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg_ptr); + void concat_gyro_and_odometer(); + void publish_data(const geometry_msgs::msg::TwistWithCovarianceStamped & twist_with_cov_raw); rclcpp::Subscription::SharedPtr vehicle_twist_sub_; diff --git a/localization/gyro_odometer/src/diagnostics_module.cpp b/localization/gyro_odometer/src/diagnostics_module.cpp index 9d88d8e6833ed..5d687943cef53 100644 --- a/localization/gyro_odometer/src/diagnostics_module.cpp +++ b/localization/gyro_odometer/src/diagnostics_module.cpp @@ -44,7 +44,7 @@ void DiagnosticsModule::clear() diagnostics_status_msg_.message = ""; } -void DiagnosticsModule::addKeyValue(const diagnostic_msgs::msg::KeyValue & key_value_msg) +void DiagnosticsModule::add_key_value(const diagnostic_msgs::msg::KeyValue & key_value_msg) { auto it = std::find_if( std::begin(diagnostics_status_msg_.values), std::end(diagnostics_status_msg_.values), @@ -58,24 +58,24 @@ void DiagnosticsModule::addKeyValue(const diagnostic_msgs::msg::KeyValue & key_v } template <> -void DiagnosticsModule::addKeyValue(const std::string & key, const std::string & value) +void DiagnosticsModule::add_key_value(const std::string & key, const std::string & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; key_value.value = value; - addKeyValue(key_value); + add_key_value(key_value); } template <> -void DiagnosticsModule::addKeyValue(const std::string & key, const bool & value) +void DiagnosticsModule::add_key_value(const std::string & key, const bool & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; key_value.value = value ? "True" : "False"; - addKeyValue(key_value); + add_key_value(key_value); } -void DiagnosticsModule::updateLevelAndMessage(const int8_t level, const std::string & message) +void DiagnosticsModule::update_level_and_message(const int8_t level, const std::string & message) { if ((level > diagnostic_msgs::msg::DiagnosticStatus::OK)) { if (!diagnostics_status_msg_.message.empty()) { @@ -90,10 +90,10 @@ void DiagnosticsModule::updateLevelAndMessage(const int8_t level, const std::str void DiagnosticsModule::publish(const rclcpp::Time & publish_time_stamp) { - diagnostics_pub_->publish(createDiagnosticsArray(publish_time_stamp)); + diagnostics_pub_->publish(create_diagnostics_array(publish_time_stamp)); } -diagnostic_msgs::msg::DiagnosticArray DiagnosticsModule::createDiagnosticsArray( +diagnostic_msgs::msg::DiagnosticArray DiagnosticsModule::create_diagnostics_array( const rclcpp::Time & publish_time_stamp) const { diagnostic_msgs::msg::DiagnosticArray diagnostics_msg; diff --git a/localization/gyro_odometer/src/gyro_odometer_core.cpp b/localization/gyro_odometer/src/gyro_odometer_core.cpp index 1852d70bced71..0ec479770740f 100644 --- a/localization/gyro_odometer/src/gyro_odometer_core.cpp +++ b/localization/gyro_odometer/src/gyro_odometer_core.cpp @@ -31,13 +31,13 @@ namespace autoware::gyro_odometer { -std::array transformCovariance(const std::array & cov) +std::array transform_covariance(const std::array & cov) { using COV_IDX = tier4_autoware_utils::xyz_covariance_index::XYZ_COV_IDX; double max_cov = std::max({cov[COV_IDX::X_X], cov[COV_IDX::Y_Y], cov[COV_IDX::Z_Z]}); - std::array cov_transformed; + std::array cov_transformed = {}; cov_transformed.fill(0.); cov_transformed[COV_IDX::X_X] = max_cov; cov_transformed[COV_IDX::Y_Y] = max_cov; @@ -57,11 +57,11 @@ GyroOdometerNode::GyroOdometerNode(const rclcpp::NodeOptions & node_options) vehicle_twist_sub_ = create_subscription( "vehicle/twist_with_covariance", rclcpp::QoS{100}, - std::bind(&GyroOdometerNode::callbackVehicleTwist, this, std::placeholders::_1)); + std::bind(&GyroOdometerNode::callback_vehicle_twist, this, std::placeholders::_1)); imu_sub_ = create_subscription( "imu", rclcpp::QoS{100}, - std::bind(&GyroOdometerNode::callbackImu, this, std::placeholders::_1)); + std::bind(&GyroOdometerNode::callback_imu, this, std::placeholders::_1)); twist_raw_pub_ = create_publisher("twist_raw", rclcpp::QoS{10}); twist_with_covariance_raw_pub_ = create_publisher( @@ -76,49 +76,46 @@ GyroOdometerNode::GyroOdometerNode(const rclcpp::NodeOptions & node_options) // TODO(YamatoAndo) createTimer } -GyroOdometerNode::~GyroOdometerNode() -{ -} - -void GyroOdometerNode::callbackVehicleTwist( - const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr vehicle_twist_ptr) +void GyroOdometerNode::callback_vehicle_twist( + const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr vehicle_twist_msg_ptr) { diagnostics_->clear(); - diagnostics_->addKeyValue( - "topic_time_stamp", static_cast(vehicle_twist_ptr->header.stamp).nanoseconds()); + diagnostics_->add_key_value( + "topic_time_stamp", + static_cast(vehicle_twist_msg_ptr->header.stamp).nanoseconds()); vehicle_twist_arrived_ = true; - latest_vehicle_twist_ros_time_ = vehicle_twist_ptr->header.stamp; - vehicle_twist_queue_.push_back(*vehicle_twist_ptr); - concatGyroAndOdometer(); + latest_vehicle_twist_ros_time_ = vehicle_twist_msg_ptr->header.stamp; + vehicle_twist_queue_.push_back(*vehicle_twist_msg_ptr); + concat_gyro_and_odometer(); - diagnostics_->publish(vehicle_twist_ptr->header.stamp); + diagnostics_->publish(vehicle_twist_msg_ptr->header.stamp); } -void GyroOdometerNode::callbackImu(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg_ptr) +void GyroOdometerNode::callback_imu(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg_ptr) { diagnostics_->clear(); - diagnostics_->addKeyValue( + diagnostics_->add_key_value( "topic_time_stamp", static_cast(imu_msg_ptr->header.stamp).nanoseconds()); imu_arrived_ = true; latest_imu_ros_time_ = imu_msg_ptr->header.stamp; gyro_queue_.push_back(*imu_msg_ptr); - concatGyroAndOdometer(); + concat_gyro_and_odometer(); diagnostics_->publish(imu_msg_ptr->header.stamp); } -void GyroOdometerNode::concatGyroAndOdometer() +void GyroOdometerNode::concat_gyro_and_odometer() { // check arrive first topic - diagnostics_->addKeyValue("is_arrived_first_vehicle_twist", vehicle_twist_arrived_); - diagnostics_->addKeyValue("is_arrived_first_imu", imu_arrived_); + diagnostics_->add_key_value("is_arrived_first_vehicle_twist", vehicle_twist_arrived_); + diagnostics_->add_key_value("is_arrived_first_imu", imu_arrived_); if (!vehicle_twist_arrived_) { std::stringstream message; message << "Twist msg is not subscribed"; RCLCPP_WARN_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); - diagnostics_->updateLevelAndMessage( + diagnostics_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); vehicle_twist_queue_.clear(); @@ -129,7 +126,7 @@ void GyroOdometerNode::concatGyroAndOdometer() std::stringstream message; message << "Imu msg is not subscribed"; RCLCPP_WARN_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); - diagnostics_->updateLevelAndMessage( + diagnostics_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); vehicle_twist_queue_.clear(); @@ -141,14 +138,14 @@ void GyroOdometerNode::concatGyroAndOdometer() const double vehicle_twist_dt = std::abs((this->now() - latest_vehicle_twist_ros_time_).seconds()); const double imu_dt = std::abs((this->now() - latest_imu_ros_time_).seconds()); - diagnostics_->addKeyValue("vehicle_twist_time_stamp_dt", vehicle_twist_dt); - diagnostics_->addKeyValue("imu_time_stamp_dt", imu_dt); + diagnostics_->add_key_value("vehicle_twist_time_stamp_dt", vehicle_twist_dt); + diagnostics_->add_key_value("imu_time_stamp_dt", imu_dt); if (vehicle_twist_dt > message_timeout_sec_) { const std::string message = fmt::format( "Vehicle twist msg is timeout. vehicle_twist_dt: {}[sec], tolerance {}[sec]", vehicle_twist_dt, message_timeout_sec_); RCLCPP_ERROR_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message); - diagnostics_->updateLevelAndMessage(diagnostic_msgs::msg::DiagnosticStatus::ERROR, message); + diagnostics_->update_level_and_message(diagnostic_msgs::msg::DiagnosticStatus::ERROR, message); vehicle_twist_queue_.clear(); gyro_queue_.clear(); @@ -158,7 +155,7 @@ void GyroOdometerNode::concatGyroAndOdometer() const std::string message = fmt::format( "Imu msg is timeout. imu_dt: {}[sec], tolerance {}[sec]", imu_dt, message_timeout_sec_); RCLCPP_ERROR_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message); - diagnostics_->updateLevelAndMessage(diagnostic_msgs::msg::DiagnosticStatus::ERROR, message); + diagnostics_->update_level_and_message(diagnostic_msgs::msg::DiagnosticStatus::ERROR, message); vehicle_twist_queue_.clear(); gyro_queue_.clear(); @@ -166,8 +163,8 @@ void GyroOdometerNode::concatGyroAndOdometer() } // check queue size - diagnostics_->addKeyValue("vehicle_twist_queue_size", vehicle_twist_queue_.size()); - diagnostics_->addKeyValue("imu_queue_size", gyro_queue_.size()); + diagnostics_->add_key_value("vehicle_twist_queue_size", vehicle_twist_queue_.size()); + diagnostics_->add_key_value("imu_queue_size", gyro_queue_.size()); if (vehicle_twist_queue_.empty()) { // not output error and clear queue return; @@ -182,13 +179,13 @@ void GyroOdometerNode::concatGyroAndOdometer() transform_listener_->getLatestTransform(gyro_queue_.front().header.frame_id, output_frame_); const bool is_succeed_transform_imu = (tf_imu2base_ptr != nullptr); - diagnostics_->addKeyValue("is_succeed_transform_imu", is_succeed_transform_imu); + diagnostics_->add_key_value("is_succeed_transform_imu", is_succeed_transform_imu); if (!is_succeed_transform_imu) { std::stringstream message; message << "Please publish TF " << output_frame_ << " to " << gyro_queue_.front().header.frame_id; RCLCPP_ERROR_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); - diagnostics_->updateLevelAndMessage( + diagnostics_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); vehicle_twist_queue_.clear(); @@ -208,7 +205,7 @@ void GyroOdometerNode::concatGyroAndOdometer() gyro.header.frame_id = output_frame_; gyro.angular_velocity = transformed_angular_velocity.vector; - gyro.angular_velocity_covariance = transformCovariance(gyro.angular_velocity_covariance); + gyro.angular_velocity_covariance = transform_covariance(gyro.angular_velocity_covariance); } using COV_IDX_XYZ = tier4_autoware_utils::xyz_covariance_index::XYZ_COV_IDX; @@ -223,8 +220,8 @@ void GyroOdometerNode::concatGyroAndOdometer() vx_mean += vehicle_twist.twist.twist.linear.x; vx_covariance_original += vehicle_twist.twist.covariance[0 * 6 + 0]; } - vx_mean /= vehicle_twist_queue_.size(); - vx_covariance_original /= vehicle_twist_queue_.size(); + vx_mean /= static_cast(vehicle_twist_queue_.size()); + vx_covariance_original /= static_cast(vehicle_twist_queue_.size()); for (const auto & gyro : gyro_queue_) { gyro_mean.x += gyro.angular_velocity.x; @@ -234,12 +231,12 @@ void GyroOdometerNode::concatGyroAndOdometer() gyro_covariance_original.y += gyro.angular_velocity_covariance[COV_IDX_XYZ::Y_Y]; gyro_covariance_original.z += gyro.angular_velocity_covariance[COV_IDX_XYZ::Z_Z]; } - gyro_mean.x /= gyro_queue_.size(); - gyro_mean.y /= gyro_queue_.size(); - gyro_mean.z /= gyro_queue_.size(); - gyro_covariance_original.x /= gyro_queue_.size(); - gyro_covariance_original.y /= gyro_queue_.size(); - gyro_covariance_original.z /= gyro_queue_.size(); + gyro_mean.x /= static_cast(gyro_queue_.size()); + gyro_mean.y /= static_cast(gyro_queue_.size()); + gyro_mean.z /= static_cast(gyro_queue_.size()); + gyro_covariance_original.x /= static_cast(gyro_queue_.size()); + gyro_covariance_original.y /= static_cast(gyro_queue_.size()); + gyro_covariance_original.z /= static_cast(gyro_queue_.size()); // concat geometry_msgs::msg::TwistWithCovarianceStamped twist_with_cov; @@ -257,23 +254,23 @@ void GyroOdometerNode::concatGyroAndOdometer() // From a statistical point of view, here we reduce the covariances according to the number of // observed data twist_with_cov.twist.covariance[COV_IDX_XYZRPY::X_X] = - vx_covariance_original / vehicle_twist_queue_.size(); + vx_covariance_original / static_cast(vehicle_twist_queue_.size()); twist_with_cov.twist.covariance[COV_IDX_XYZRPY::Y_Y] = 100000.0; twist_with_cov.twist.covariance[COV_IDX_XYZRPY::Z_Z] = 100000.0; twist_with_cov.twist.covariance[COV_IDX_XYZRPY::ROLL_ROLL] = - gyro_covariance_original.x / gyro_queue_.size(); + gyro_covariance_original.x / static_cast(gyro_queue_.size()); twist_with_cov.twist.covariance[COV_IDX_XYZRPY::PITCH_PITCH] = - gyro_covariance_original.y / gyro_queue_.size(); + gyro_covariance_original.y / static_cast(gyro_queue_.size()); twist_with_cov.twist.covariance[COV_IDX_XYZRPY::YAW_YAW] = - gyro_covariance_original.z / gyro_queue_.size(); + gyro_covariance_original.z / static_cast(gyro_queue_.size()); - publishData(twist_with_cov); + publish_data(twist_with_cov); vehicle_twist_queue_.clear(); gyro_queue_.clear(); } -void GyroOdometerNode::publishData( +void GyroOdometerNode::publish_data( const geometry_msgs::msg::TwistWithCovarianceStamped & twist_with_cov_raw) { geometry_msgs::msg::TwistStamped twist_raw; diff --git a/localization/gyro_odometer/test/test_gyro_odometer_helper.cpp b/localization/gyro_odometer/test/test_gyro_odometer_helper.cpp index 54e1d320319d3..f55278998f5f0 100644 --- a/localization/gyro_odometer/test/test_gyro_odometer_helper.cpp +++ b/localization/gyro_odometer/test/test_gyro_odometer_helper.cpp @@ -17,7 +17,7 @@ using geometry_msgs::msg::TwistWithCovarianceStamped; using sensor_msgs::msg::Imu; -Imu generateSampleImu() +Imu generate_sample_imu() { Imu imu; imu.header.frame_id = "base_link"; @@ -27,7 +27,7 @@ Imu generateSampleImu() return imu; } -TwistWithCovarianceStamped generateSampleVelocity() +TwistWithCovarianceStamped generate_sample_velocity() { TwistWithCovarianceStamped twist; twist.header.frame_id = "base_link"; @@ -35,7 +35,7 @@ TwistWithCovarianceStamped generateSampleVelocity() return twist; } -rclcpp::NodeOptions getNodeOptionsWithDefaultParams() +rclcpp::NodeOptions get_node_options_with_default_params() { rclcpp::NodeOptions node_options; diff --git a/localization/gyro_odometer/test/test_gyro_odometer_helper.hpp b/localization/gyro_odometer/test/test_gyro_odometer_helper.hpp index 6e3aff0b841a9..9da344e410e61 100644 --- a/localization/gyro_odometer/test/test_gyro_odometer_helper.hpp +++ b/localization/gyro_odometer/test/test_gyro_odometer_helper.hpp @@ -20,11 +20,8 @@ #include #include -using geometry_msgs::msg::TwistWithCovarianceStamped; -using sensor_msgs::msg::Imu; - -Imu generateSampleImu(); -TwistWithCovarianceStamped generateSampleVelocity(); -rclcpp::NodeOptions getNodeOptionsWithDefaultParams(); +sensor_msgs::msg::Imu generate_sample_imu(); +geometry_msgs::msg::TwistWithCovarianceStamped generate_sample_velocity(); +rclcpp::NodeOptions get_node_options_with_default_params(); #endif // TEST_GYRO_ODOMETER_HELPER_HPP_ diff --git a/localization/gyro_odometer/test/test_gyro_odometer_pubsub.cpp b/localization/gyro_odometer/test/test_gyro_odometer_pubsub.cpp index b7849ef03bfc5..fc331a638a1dd 100644 --- a/localization/gyro_odometer/test/test_gyro_odometer_pubsub.cpp +++ b/localization/gyro_odometer/test/test_gyro_odometer_pubsub.cpp @@ -50,19 +50,22 @@ class VelocityGenerator : public rclcpp::Node class GyroOdometerValidator : public rclcpp::Node { public: - GyroOdometerValidator() : Node("gyro_odometer_validator"), received_latest_twist_ptr(nullptr) - { - twist_sub = create_subscription( - "/twist_with_covariance", 1, [this](const TwistWithCovarianceStamped::ConstSharedPtr msg) { + GyroOdometerValidator() + : Node("gyro_odometer_validator"), + twist_sub(create_subscription( + "/twist_with_covariance", 1, + [this](const TwistWithCovarianceStamped::ConstSharedPtr msg) { received_latest_twist_ptr = msg; - }); + })), + received_latest_twist_ptr(nullptr) + { } rclcpp::Subscription::SharedPtr twist_sub; TwistWithCovarianceStamped::ConstSharedPtr received_latest_twist_ptr; }; -void spinSome(rclcpp::Node::SharedPtr node_ptr) +void wait_spin_some(rclcpp::Node::SharedPtr node_ptr) { for (int i = 0; i < 50; ++i) { rclcpp::spin_some(node_ptr); @@ -70,7 +73,7 @@ void spinSome(rclcpp::Node::SharedPtr node_ptr) } } -bool isTwistValid( +bool is_twist_valid( const TwistWithCovarianceStamped & twist, const TwistWithCovarianceStamped & twist_ground_truth) { if (twist.twist.twist.linear.x != twist_ground_truth.twist.twist.linear.x) { @@ -99,8 +102,8 @@ bool isTwistValid( // velocity data are provided TEST(GyroOdometer, TestGyroOdometerWithImuAndVelocity) { - Imu input_imu = generateSampleImu(); - TwistWithCovarianceStamped input_velocity = generateSampleVelocity(); + Imu input_imu = generate_sample_imu(); + TwistWithCovarianceStamped input_velocity = generate_sample_velocity(); TwistWithCovarianceStamped expected_output_twist; expected_output_twist.twist.twist.linear.x = input_velocity.twist.twist.linear.x; @@ -108,8 +111,8 @@ TEST(GyroOdometer, TestGyroOdometerWithImuAndVelocity) expected_output_twist.twist.twist.angular.y = input_imu.angular_velocity.y; expected_output_twist.twist.twist.angular.z = input_imu.angular_velocity.z; - auto gyro_odometer_node = - std::make_shared(getNodeOptionsWithDefaultParams()); + auto gyro_odometer_node = std::make_shared( + get_node_options_with_default_params()); auto imu_generator = std::make_shared(); auto velocity_generator = std::make_shared(); auto gyro_odometer_validator_node = std::make_shared(); @@ -120,13 +123,13 @@ TEST(GyroOdometer, TestGyroOdometerWithImuAndVelocity) velocity_generator->vehicle_velocity_pub->publish(input_velocity); // gyro_odometer receives IMU and velocity, and publishes the fused twist data. - spinSome(gyro_odometer_node); + wait_spin_some(gyro_odometer_node); // validator node receives the fused twist data and store in "received_latest_twist_ptr". - spinSome(gyro_odometer_validator_node); + wait_spin_some(gyro_odometer_validator_node); EXPECT_FALSE(gyro_odometer_validator_node->received_latest_twist_ptr == nullptr); - EXPECT_TRUE(isTwistValid( + EXPECT_TRUE(is_twist_valid( *(gyro_odometer_validator_node->received_latest_twist_ptr), expected_output_twist)); } @@ -134,20 +137,20 @@ TEST(GyroOdometer, TestGyroOdometerWithImuAndVelocity) // Verify that the gyro_odometer does NOT publish any outputs when only IMU is provided TEST(GyroOdometer, TestGyroOdometerImuOnly) { - Imu input_imu = generateSampleImu(); + Imu input_imu = generate_sample_imu(); - auto gyro_odometer_node = - std::make_shared(getNodeOptionsWithDefaultParams()); + auto gyro_odometer_node = std::make_shared( + get_node_options_with_default_params()); auto imu_generator = std::make_shared(); auto gyro_odometer_validator_node = std::make_shared(); imu_generator->imu_pub->publish(input_imu); // gyro_odometer receives IMU - spinSome(gyro_odometer_node); + wait_spin_some(gyro_odometer_node); // validator node waits for the output fused twist from gyro_odometer - spinSome(gyro_odometer_validator_node); + wait_spin_some(gyro_odometer_validator_node); EXPECT_TRUE(gyro_odometer_validator_node->received_latest_twist_ptr == nullptr); } From 565589c8757b09250b1c14276a8f725f312b94d9 Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Fri, 7 Jun 2024 17:58:18 +0900 Subject: [PATCH 022/142] feat(obstacle_cruise)!: type specified stop deccel limit and enabling abandon to stop (#7121) * add abandon function Signed-off-by: Yuki Takagi --- .../config/obstacle_cruise_planner.param.yaml | 12 + .../common_structs.hpp | 8 +- .../include/obstacle_cruise_planner/node.hpp | 3 +- .../planner_interface.hpp | 84 ++++++- .../include/obstacle_cruise_planner/utils.hpp | 3 +- planning/obstacle_cruise_planner/src/node.cpp | 70 +++--- .../src/planner_interface.cpp | 216 +++++++++++------- .../obstacle_cruise_planner/src/utils.cpp | 19 +- 8 files changed, 271 insertions(+), 144 deletions(-) diff --git a/planning/obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml b/planning/obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml index 08cee3d58152e..8b338e9d0cd9a 100644 --- a/planning/obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml +++ b/planning/obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml @@ -218,3 +218,15 @@ lpf_gain_slow_down_vel: 0.99 # low-pass filter gain for slow down velocity lpf_gain_lat_dist: 0.999 # low-pass filter gain for lateral distance from obstacle to ego's path lpf_gain_dist_to_slow_down: 0.7 # low-pass filter gain for distance to slow down start + stop: + type_specified_params: + labels: # For the listed types, the node try to read the following type specified values + - "default" + - "unknown" + # default: For the default type, which denotes the other types listed above, the following param is defined implicitly, and the other type-specified parameters are not defined. + # limit_min_acc: common_param.yaml/limit.min_acc + unknown: + limit_min_acc: -1.2 # overwrite the deceleration limit, in usually, common_param.yaml/limit.min_acc is referred. + sudden_object_acc_threshold: -1.1 # If a stop can be achieved by a deceleration smaller than this value, it is not considered as “sudden stop". + sudden_object_dist_threshold: 1000.0 # If a stop distance is longer than this value, it is not considered as “sudden stop". + abandon_to_stop: false # If true, the planner gives up to stop when it cannot avoid to run over while maintaining the deceleration limit. diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/common_structs.hpp b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/common_structs.hpp index 052e7bb721592..34ae20980d3fd 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/common_structs.hpp +++ b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/common_structs.hpp @@ -113,14 +113,15 @@ struct StopObstacle : public TargetObstacleInterface { StopObstacle( const std::string & arg_uuid, const rclcpp::Time & arg_stamp, - const geometry_msgs::msg::Pose & arg_pose, const Shape & arg_shape, - const double arg_lon_velocity, const double arg_lat_velocity, + const ObjectClassification & object_classification, const geometry_msgs::msg::Pose & arg_pose, + const Shape & arg_shape, const double arg_lon_velocity, const double arg_lat_velocity, const geometry_msgs::msg::Point arg_collision_point, const double arg_dist_to_collide_on_decimated_traj) : TargetObstacleInterface(arg_uuid, arg_stamp, arg_pose, arg_lon_velocity, arg_lat_velocity), shape(arg_shape), collision_point(arg_collision_point), - dist_to_collide_on_decimated_traj(arg_dist_to_collide_on_decimated_traj) + dist_to_collide_on_decimated_traj(arg_dist_to_collide_on_decimated_traj), + classification(object_classification) { } Shape shape; @@ -129,6 +130,7 @@ struct StopObstacle : public TargetObstacleInterface // calculateMarginFromObstacleOnCurve() and should be removed as it can be // replaced by ”dist_to_collide_on_decimated_traj” double dist_to_collide_on_decimated_traj; + ObjectClassification classification; }; struct CruiseObstacle : public TargetObstacleInterface diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/node.hpp b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/node.hpp index fd65446408db1..3aea741e3b2f4 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/node.hpp +++ b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/node.hpp @@ -272,8 +272,7 @@ class ObstacleCruisePlannerNode : public rclcpp::Node bool is_driving_forward_{true}; bool enable_slow_down_planning_{false}; - // previous closest obstacle - std::shared_ptr prev_closest_stop_obstacle_ptr_{nullptr}; + std::vector prev_closest_stop_obstacles_{}; std::unique_ptr logger_configure_; diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/planner_interface.hpp b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/planner_interface.hpp index 416c36b116059..7a060657e16af 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/planner_interface.hpp +++ b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/planner_interface.hpp @@ -23,6 +23,8 @@ #include "tier4_autoware_utils/ros/update_param.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" +#include +#include #include #include #include @@ -42,7 +44,8 @@ class PlannerInterface vehicle_info_(vehicle_info), ego_nearest_param_(ego_nearest_param), debug_data_ptr_(debug_data_ptr), - slow_down_param_(SlowDownParam(node)) + slow_down_param_(SlowDownParam(node)), + stop_param_(StopParam(node, longitudinal_info)) { stop_reasons_pub_ = node.create_publisher("~/output/stop_reasons", 1); velocity_factors_pub_ = @@ -91,6 +94,7 @@ class PlannerInterface updateCommonParam(parameters); updateCruiseParam(parameters); slow_down_param_.onParam(parameters); + stop_param_.onParam(parameters, longitudinal_info_); } Float32MultiArrayStamped getStopPlanningDebugMessage(const rclcpp::Time & current_time) const @@ -333,6 +337,84 @@ class PlannerInterface double lpf_gain_dist_to_slow_down; }; SlowDownParam slow_down_param_; + struct StopParam + { + struct ObstacleSpecificParams + { + double limit_min_acc; + double sudden_object_acc_threshold; + double sudden_object_dist_threshold; + bool abandon_to_stop; + }; + const std::unordered_map types_maps = { + {ObjectClassification::UNKNOWN, "unknown"}, {ObjectClassification::CAR, "car"}, + {ObjectClassification::TRUCK, "truck"}, {ObjectClassification::BUS, "bus"}, + {ObjectClassification::TRAILER, "trailer"}, {ObjectClassification::MOTORCYCLE, "motorcycle"}, + {ObjectClassification::BICYCLE, "bicycle"}, {ObjectClassification::PEDESTRIAN, "pedestrian"}}; + std::unordered_map type_specified_param_list; + explicit StopParam(rclcpp::Node & node, const LongitudinalInfo & longitudinal_info) + { + const std::string param_prefix = "stop.type_specified_params."; + std::vector obstacle_labels{"default"}; + obstacle_labels = + node.declare_parameter>(param_prefix + "labels", obstacle_labels); + + for (const auto & type_str : obstacle_labels) { + if (type_str != "default") { + ObstacleSpecificParams param{ + node.declare_parameter(param_prefix + type_str + ".limit_min_acc"), + node.declare_parameter( + param_prefix + type_str + ".sudden_object_acc_threshold"), + node.declare_parameter( + param_prefix + type_str + ".sudden_object_dist_threshold"), + node.declare_parameter(param_prefix + type_str + ".abandon_to_stop")}; + + param.sudden_object_acc_threshold = + std::min(param.sudden_object_acc_threshold, longitudinal_info.limit_min_accel); + param.limit_min_acc = std::min(param.limit_min_acc, param.sudden_object_acc_threshold); + + type_specified_param_list.emplace(type_str, param); + } + } + } + void onParam( + const std::vector & parameters, const LongitudinalInfo & longitudinal_info) + { + const std::string param_prefix = "stop.type_specified_params."; + for (auto & [type_str, param] : type_specified_param_list) { + if (type_str == "default") { + continue; + } + tier4_autoware_utils::updateParam( + parameters, param_prefix + type_str + ".limit_min_acc", param.limit_min_acc); + tier4_autoware_utils::updateParam( + parameters, param_prefix + type_str + ".sudden_object_acc_threshold", + param.sudden_object_acc_threshold); + tier4_autoware_utils::updateParam( + parameters, param_prefix + type_str + ".sudden_object_dist_threshold", + param.sudden_object_dist_threshold); + tier4_autoware_utils::updateParam( + parameters, param_prefix + type_str + ".abandon_to_stop", param.abandon_to_stop); + + param.sudden_object_acc_threshold = + std::min(param.sudden_object_acc_threshold, longitudinal_info.limit_min_accel); + param.limit_min_acc = std::min(param.limit_min_acc, param.sudden_object_acc_threshold); + } + } + std::string getParamType(const ObjectClassification label) + { + const auto type_str = types_maps.at(label.label); + if (type_specified_param_list.count(type_str) == 0) { + return "default"; + } + return type_str; + } + ObstacleSpecificParams getParam(const ObjectClassification label) + { + return type_specified_param_list.at(getParamType(label)); + } + }; + StopParam stop_param_; double moving_object_speed_threshold; double moving_object_hysteresis_range; std::vector prev_slow_down_output_; diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/utils.hpp b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/utils.hpp index 3b4ab577c2988..48bab514cbf77 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/utils.hpp +++ b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/utils.hpp @@ -36,8 +36,7 @@ PoseWithStamp getCurrentObjectPose( const PredictedObject & predicted_object, const rclcpp::Time & obj_base_time, const rclcpp::Time & current_time, const bool use_prediction); -std::optional getClosestStopObstacle( - const std::vector & stop_obstacles); +std::vector getClosestStopObstacles(const std::vector & stop_obstacles); template size_t getIndexWithLongitudinalOffset( diff --git a/planning/obstacle_cruise_planner/src/node.cpp b/planning/obstacle_cruise_planner/src/node.cpp index c5f0c73a13b78..41ae29b7d470f 100644 --- a/planning/obstacle_cruise_planner/src/node.cpp +++ b/planning/obstacle_cruise_planner/src/node.cpp @@ -1253,9 +1253,9 @@ std::optional ObstacleCruisePlannerNode::createStopObstacle( } const auto [tangent_vel, normal_vel] = projectObstacleVelocityToTrajectory(traj_points, obstacle); - return StopObstacle{ - obstacle.uuid, obstacle.stamp, obstacle.pose, obstacle.shape, - tangent_vel, normal_vel, collision_point->first, collision_point->second}; + return StopObstacle{obstacle.uuid, obstacle.stamp, obstacle.classification, + obstacle.pose, obstacle.shape, tangent_vel, + normal_vel, collision_point->first, collision_point->second}; } std::optional ObstacleCruisePlannerNode::createSlowDownObstacle( @@ -1386,50 +1386,36 @@ void ObstacleCruisePlannerNode::checkConsistency( const rclcpp::Time & current_time, const PredictedObjects & predicted_objects, std::vector & stop_obstacles) { - const auto current_closest_stop_obstacle = - obstacle_cruise_utils::getClosestStopObstacle(stop_obstacles); - - if (!prev_closest_stop_obstacle_ptr_) { - if (current_closest_stop_obstacle) { - prev_closest_stop_obstacle_ptr_ = - std::make_shared(*current_closest_stop_obstacle); + for (const auto & prev_closest_stop_obstacle : prev_closest_stop_obstacles_) { + const auto predicted_object_itr = std::find_if( + predicted_objects.objects.begin(), predicted_objects.objects.end(), + [&prev_closest_stop_obstacle](const PredictedObject & po) { + return tier4_autoware_utils::toHexString(po.object_id) == prev_closest_stop_obstacle.uuid; + }); + // If previous closest obstacle disappear from the perception result, do nothing anymore. + if (predicted_object_itr == predicted_objects.objects.end()) { + continue; } - return; - } - const auto predicted_object_itr = std::find_if( - predicted_objects.objects.begin(), predicted_objects.objects.end(), - [&](PredictedObject predicted_object) { - return tier4_autoware_utils::toHexString(predicted_object.object_id) == - prev_closest_stop_obstacle_ptr_->uuid; - }); - // If previous closest obstacle disappear from the perception result, do nothing anymore. - if (predicted_object_itr == predicted_objects.objects.end()) { - return; - } - - const auto is_disappeared_from_stop_obstacle = std::none_of( - stop_obstacles.begin(), stop_obstacles.end(), - [&](const auto & obstacle) { return obstacle.uuid == prev_closest_stop_obstacle_ptr_->uuid; }); - if (is_disappeared_from_stop_obstacle) { - // re-evaluate as a stop candidate, and overwrite the current decision if "maintain stop" - // condition is satisfied - const double elapsed_time = (current_time - prev_closest_stop_obstacle_ptr_->stamp).seconds(); - if ( - predicted_object_itr->kinematics.initial_twist_with_covariance.twist.linear.x < - behavior_determination_param_.obstacle_velocity_threshold_from_stop_to_cruise && - elapsed_time < behavior_determination_param_.stop_obstacle_hold_time_threshold) { - stop_obstacles.push_back(*prev_closest_stop_obstacle_ptr_); - return; + const auto is_disappeared_from_stop_obstacle = std::none_of( + stop_obstacles.begin(), stop_obstacles.end(), + [&prev_closest_stop_obstacle](const StopObstacle & so) { + return so.uuid == prev_closest_stop_obstacle.uuid; + }); + if (is_disappeared_from_stop_obstacle) { + // re-evaluate as a stop candidate, and overwrite the current decision if "maintain stop" + // condition is satisfied + const double elapsed_time = (current_time - prev_closest_stop_obstacle.stamp).seconds(); + if ( + predicted_object_itr->kinematics.initial_twist_with_covariance.twist.linear.x < + behavior_determination_param_.obstacle_velocity_threshold_from_stop_to_cruise && + elapsed_time < behavior_determination_param_.stop_obstacle_hold_time_threshold) { + stop_obstacles.push_back(prev_closest_stop_obstacle); + } } } - if (current_closest_stop_obstacle) { - prev_closest_stop_obstacle_ptr_ = - std::make_shared(*current_closest_stop_obstacle); - } else { - prev_closest_stop_obstacle_ptr_ = nullptr; - } + prev_closest_stop_obstacles_ = obstacle_cruise_utils::getClosestStopObstacles(stop_obstacles); } bool ObstacleCruisePlannerNode::isObstacleCrossing( diff --git a/planning/obstacle_cruise_planner/src/planner_interface.cpp b/planning/obstacle_cruise_planner/src/planner_interface.cpp index f7ce218cf3ccf..6e1de97378d16 100644 --- a/planning/obstacle_cruise_planner/src/planner_interface.cpp +++ b/planning/obstacle_cruise_planner/src/planner_interface.cpp @@ -259,129 +259,171 @@ std::vector PlannerInterface::generateStopTrajectory( rclcpp::get_logger("ObstacleCruisePlanner::PIDBasedPlanner"), enable_debug_info_, "stop planning"); - // Get Closest Stop Obstacle - const auto closest_stop_obstacle = obstacle_cruise_utils::getClosestStopObstacle(stop_obstacles); - if (!closest_stop_obstacle) { - // delete marker - const auto markers = - motion_utils::createDeletedStopVirtualWallMarker(planner_data.current_time, 0); - tier4_autoware_utils::appendMarkerArray(markers, &debug_data_ptr_->stop_wall_marker); - - prev_stop_distance_info_ = std::nullopt; - return planner_data.traj_points; - } - - const auto ego_segment_idx = - ego_nearest_param_.findSegmentIndex(planner_data.traj_points, planner_data.ego_pose); - const double dist_to_collide_on_ref_traj = - motion_utils::calcSignedArcLength(planner_data.traj_points, 0, ego_segment_idx) + - closest_stop_obstacle->dist_to_collide_on_decimated_traj; - - const double margin_from_obstacle_considering_behavior_module = [&]() { - const double margin_from_obstacle = - calculateMarginFromObstacleOnCurve(planner_data, *closest_stop_obstacle); - // Use terminal margin (terminal_safe_distance_margin) for obstacle stop - const auto ref_traj_length = motion_utils::calcSignedArcLength( - planner_data.traj_points, 0, planner_data.traj_points.size() - 1); - if (dist_to_collide_on_ref_traj > ref_traj_length) { - return longitudinal_info_.terminal_safe_distance_margin; - } - - // If behavior stop point is ahead of the closest_obstacle_stop point within a certain margin - // we set closest_obstacle_stop_distance to closest_behavior_stop_distance - const auto closest_behavior_stop_idx = - motion_utils::searchZeroVelocityIndex(planner_data.traj_points, ego_segment_idx + 1); - if (closest_behavior_stop_idx) { - const double closest_behavior_stop_dist_on_ref_traj = - motion_utils::calcSignedArcLength(planner_data.traj_points, 0, *closest_behavior_stop_idx); - const double stop_dist_diff = closest_behavior_stop_dist_on_ref_traj - - (dist_to_collide_on_ref_traj - margin_from_obstacle); - if (0.0 < stop_dist_diff && stop_dist_diff < margin_from_obstacle) { - return min_behavior_stop_margin_; + std::optional determined_stop_obstacle{}; + std::optional determined_zero_vel_dist{}; + std::optional determined_desired_margin{}; + + const auto closest_stop_obstacles = + obstacle_cruise_utils::getClosestStopObstacles(stop_obstacles); + for (const auto & stop_obstacle : closest_stop_obstacles) { + const auto ego_segment_idx = + ego_nearest_param_.findSegmentIndex(planner_data.traj_points, planner_data.ego_pose); + const double dist_to_collide_on_ref_traj = + motion_utils::calcSignedArcLength(planner_data.traj_points, 0, ego_segment_idx) + + stop_obstacle.dist_to_collide_on_decimated_traj; + + const double desired_margin = [&]() { + const double margin_from_obstacle = + calculateMarginFromObstacleOnCurve(planner_data, stop_obstacle); + // Use terminal margin (terminal_safe_distance_margin) for obstacle stop + const auto ref_traj_length = motion_utils::calcSignedArcLength( + planner_data.traj_points, 0, planner_data.traj_points.size() - 1); + if (dist_to_collide_on_ref_traj > ref_traj_length) { + return longitudinal_info_.terminal_safe_distance_margin; } - } - return margin_from_obstacle; - }(); - // Generate Output Trajectory - const auto [zero_vel_dist, will_collide_with_obstacle] = [&]() { - double candidate_zero_vel_dist = - std::max(0.0, dist_to_collide_on_ref_traj - margin_from_obstacle_considering_behavior_module); + // If behavior stop point is ahead of the closest_obstacle_stop point within a certain + // margin we set closest_obstacle_stop_distance to closest_behavior_stop_distance + const auto closest_behavior_stop_idx = + motion_utils::searchZeroVelocityIndex(planner_data.traj_points, ego_segment_idx + 1); + if (closest_behavior_stop_idx) { + const double closest_behavior_stop_dist_on_ref_traj = motion_utils::calcSignedArcLength( + planner_data.traj_points, 0, *closest_behavior_stop_idx); + const double stop_dist_diff = closest_behavior_stop_dist_on_ref_traj - + (dist_to_collide_on_ref_traj - margin_from_obstacle); + if (0.0 < stop_dist_diff && stop_dist_diff < margin_from_obstacle) { + return min_behavior_stop_margin_; + } + } + return margin_from_obstacle; + }(); - // Check feasibility to stop + // calc stop point against the obstacle + double candidate_zero_vel_dist = std::max(0.0, dist_to_collide_on_ref_traj - desired_margin); if (suppress_sudden_obstacle_stop_) { - // Calculate feasible stop margin (Check the feasibility) - const double feasible_stop_dist = - calcMinimumDistanceToStop( - planner_data.ego_vel, longitudinal_info_.limit_max_accel, - longitudinal_info_.limit_min_accel) + - motion_utils::calcSignedArcLength( - planner_data.traj_points, 0, planner_data.ego_pose.position); + const auto acceptable_stop_acc = [&]() -> std::optional { + if (stop_param_.getParamType(stop_obstacle.classification) == "default") { + return longitudinal_info_.limit_min_accel; + } + const double distance_to_judge_suddenness = std::min( + calcMinimumDistanceToStop( + planner_data.ego_vel, longitudinal_info_.limit_max_accel, + stop_param_.getParam(stop_obstacle.classification).sudden_object_acc_threshold), + stop_param_.getParam(stop_obstacle.classification).sudden_object_dist_threshold); + if (candidate_zero_vel_dist > distance_to_judge_suddenness) { + return longitudinal_info_.limit_min_accel; + } + if (stop_param_.getParam(stop_obstacle.classification).abandon_to_stop) { + RCLCPP_WARN( + rclcpp::get_logger("ObstacleCruisePlanner::StopPlanner"), + "[Cruise] abandon to stop against %s object", + stop_param_.types_maps.at(stop_obstacle.classification.label).c_str()); + return std::nullopt; + } else { + return stop_param_.getParam(stop_obstacle.classification).limit_min_acc; + } + }(); + if (!acceptable_stop_acc) { + continue; + } - if (candidate_zero_vel_dist < feasible_stop_dist) { - candidate_zero_vel_dist = feasible_stop_dist; - return std::make_pair(candidate_zero_vel_dist, true); + const double acceptable_stop_pos = + motion_utils::calcSignedArcLength( + planner_data.traj_points, 0, planner_data.ego_pose.position) + + calcMinimumDistanceToStop( + planner_data.ego_vel, longitudinal_info_.limit_max_accel, acceptable_stop_acc.value()); + if (acceptable_stop_pos > candidate_zero_vel_dist) { + candidate_zero_vel_dist = acceptable_stop_pos; } } - // Hold previous stop distance if necessary - if ( - std::abs(planner_data.ego_vel) < longitudinal_info_.hold_stop_velocity_threshold && - prev_stop_distance_info_) { - // NOTE: We assume that the current trajectory's front point is ahead of the previous - // trajectory's front point. - const size_t traj_front_point_prev_seg_idx = - motion_utils::findFirstNearestSegmentIndexWithSoftConstraints( - prev_stop_distance_info_->first, planner_data.traj_points.front().pose); - const double diff_dist_front_points = motion_utils::calcSignedArcLength( - prev_stop_distance_info_->first, 0, planner_data.traj_points.front().pose.position, - traj_front_point_prev_seg_idx); - - const double prev_zero_vel_dist = prev_stop_distance_info_->second - diff_dist_front_points; + if (determined_stop_obstacle) { + const bool is_same_param_types = + (stop_obstacle.classification.label == determined_stop_obstacle->classification.label); if ( - std::abs(prev_zero_vel_dist - candidate_zero_vel_dist) < - longitudinal_info_.hold_stop_distance_threshold) { - candidate_zero_vel_dist = prev_zero_vel_dist; + (is_same_param_types && stop_obstacle.dist_to_collide_on_decimated_traj > + determined_stop_obstacle->dist_to_collide_on_decimated_traj) || + (!is_same_param_types && candidate_zero_vel_dist > determined_zero_vel_dist)) { + continue; } } - return std::make_pair(candidate_zero_vel_dist, false); - }(); + determined_zero_vel_dist = candidate_zero_vel_dist; + determined_stop_obstacle = stop_obstacle; + determined_desired_margin = desired_margin; + } + + if (!determined_zero_vel_dist) { + // delete marker + const auto markers = + motion_utils::createDeletedStopVirtualWallMarker(planner_data.current_time, 0); + tier4_autoware_utils::appendMarkerArray(markers, &debug_data_ptr_->stop_wall_marker); + + prev_stop_distance_info_ = std::nullopt; + return planner_data.traj_points; + } + + // Hold previous stop distance if necessary + if ( + std::abs(planner_data.ego_vel) < longitudinal_info_.hold_stop_velocity_threshold && + prev_stop_distance_info_) { + // NOTE: We assume that the current trajectory's front point is ahead of the previous + // trajectory's front point. + const size_t traj_front_point_prev_seg_idx = + motion_utils::findFirstNearestSegmentIndexWithSoftConstraints( + prev_stop_distance_info_->first, planner_data.traj_points.front().pose); + const double diff_dist_front_points = motion_utils::calcSignedArcLength( + prev_stop_distance_info_->first, 0, planner_data.traj_points.front().pose.position, + traj_front_point_prev_seg_idx); + + const double prev_zero_vel_dist = prev_stop_distance_info_->second - diff_dist_front_points; + if ( + std::abs(prev_zero_vel_dist - determined_zero_vel_dist.value()) < + longitudinal_info_.hold_stop_distance_threshold) { + determined_zero_vel_dist.value() = prev_zero_vel_dist; + } + } // Insert stop point auto output_traj_points = planner_data.traj_points; - const auto zero_vel_idx = motion_utils::insertStopPoint(0, zero_vel_dist, output_traj_points); + const auto zero_vel_idx = + motion_utils::insertStopPoint(0, *determined_zero_vel_dist, output_traj_points); if (zero_vel_idx) { // virtual wall marker for stop obstacle const auto markers = motion_utils::createStopVirtualWallMarker( output_traj_points.at(*zero_vel_idx).pose, "obstacle stop", planner_data.current_time, 0, abs_ego_offset, "", planner_data.is_driving_forward); tier4_autoware_utils::appendMarkerArray(markers, &debug_data_ptr_->stop_wall_marker); - debug_data_ptr_->obstacles_to_stop.push_back(*closest_stop_obstacle); + debug_data_ptr_->obstacles_to_stop.push_back(*determined_stop_obstacle); // Publish Stop Reason const auto stop_pose = output_traj_points.at(*zero_vel_idx).pose; const auto stop_reasons_msg = - makeStopReasonArray(planner_data, stop_pose, *closest_stop_obstacle); + makeStopReasonArray(planner_data, stop_pose, *determined_stop_obstacle); stop_reasons_pub_->publish(stop_reasons_msg); velocity_factors_pub_->publish(makeVelocityFactorArray(planner_data.current_time, stop_pose)); - // Publish if ego vehicle collides with the obstacle with a limit acceleration + // Publish if ego vehicle will over run against the stop point with a limit acceleration + + const bool will_over_run = determined_zero_vel_dist.value() > + motion_utils::calcSignedArcLength( + planner_data.traj_points, 0, planner_data.ego_pose.position) + + determined_stop_obstacle->dist_to_collide_on_decimated_traj + + determined_desired_margin.value() + 0.1; const auto stop_speed_exceeded_msg = - createStopSpeedExceededMsg(planner_data.current_time, will_collide_with_obstacle); + createStopSpeedExceededMsg(planner_data.current_time, will_over_run); stop_speed_exceeded_pub_->publish(stop_speed_exceeded_msg); - prev_stop_distance_info_ = std::make_pair(output_traj_points, zero_vel_dist); + prev_stop_distance_info_ = std::make_pair(output_traj_points, determined_zero_vel_dist.value()); } stop_planning_debug_info_.set( StopPlanningDebugInfo::TYPE::STOP_CURRENT_OBSTACLE_DISTANCE, - closest_stop_obstacle->dist_to_collide_on_decimated_traj); + determined_stop_obstacle->dist_to_collide_on_decimated_traj); stop_planning_debug_info_.set( - StopPlanningDebugInfo::TYPE::STOP_CURRENT_OBSTACLE_VELOCITY, closest_stop_obstacle->velocity); - + StopPlanningDebugInfo::TYPE::STOP_CURRENT_OBSTACLE_VELOCITY, + determined_stop_obstacle->velocity); stop_planning_debug_info_.set( - StopPlanningDebugInfo::TYPE::STOP_TARGET_OBSTACLE_DISTANCE, - margin_from_obstacle_considering_behavior_module); + StopPlanningDebugInfo::TYPE::STOP_TARGET_OBSTACLE_DISTANCE, determined_desired_margin.value()); stop_planning_debug_info_.set(StopPlanningDebugInfo::TYPE::STOP_TARGET_VELOCITY, 0.0); stop_planning_debug_info_.set(StopPlanningDebugInfo::TYPE::STOP_TARGET_ACCELERATION, 0.0); diff --git a/planning/obstacle_cruise_planner/src/utils.cpp b/planning/obstacle_cruise_planner/src/utils.cpp index 6b32ccafc7f42..6c1b3999e40c1 100644 --- a/planning/obstacle_cruise_planner/src/utils.cpp +++ b/planning/obstacle_cruise_planner/src/utils.cpp @@ -95,16 +95,21 @@ PoseWithStamp getCurrentObjectPose( return PoseWithStamp{obj_base_time, *interpolated_pose}; } -std::optional getClosestStopObstacle(const std::vector & stop_obstacles) +std::vector getClosestStopObstacles(const std::vector & stop_obstacles) { - std::optional candidate_obstacle = std::nullopt; + std::vector candidates{}; for (const auto & stop_obstacle : stop_obstacles) { - if ( - !candidate_obstacle || stop_obstacle.dist_to_collide_on_decimated_traj < - candidate_obstacle->dist_to_collide_on_decimated_traj) { - candidate_obstacle = stop_obstacle; + const auto itr = + std::find_if(candidates.begin(), candidates.end(), [&stop_obstacle](const StopObstacle & co) { + return co.classification.label == stop_obstacle.classification.label; + }); + if (itr == candidates.end()) { + candidates.emplace_back(stop_obstacle); + } else if ( + stop_obstacle.dist_to_collide_on_decimated_traj < itr->dist_to_collide_on_decimated_traj) { + *itr = stop_obstacle; } } - return candidate_obstacle; + return candidates; } } // namespace obstacle_cruise_utils From 457771919d907aebd1ffe66c4d6a8b3588b0b458 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Fri, 7 Jun 2024 18:23:21 +0900 Subject: [PATCH 023/142] fix(perception_online_evaluator): add metric_value not only stat (#7100)(#7118) (revert of revert) (#7167) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Revert "fix(perception_online_evaluator): revert "add metric_value not only s…" This reverts commit d827b1bd1f4bbacf0333eb14a62ef42e56caef25. * Update evaluator/perception_online_evaluator/include/perception_online_evaluator/perception_online_evaluator_node.hpp * Update evaluator/perception_online_evaluator/src/perception_online_evaluator_node.cpp * use emplace back Signed-off-by: kosuke55 --------- Signed-off-by: kosuke55 Co-authored-by: Kotaro Uetake <60615504+ktro2828@users.noreply.github.com> --- .../metrics/metric.hpp | 5 +++ .../metrics_calculator.hpp | 4 +- .../perception_online_evaluator_node.hpp | 2 + .../src/metrics_calculator.cpp | 16 ++++---- .../src/perception_online_evaluator_node.cpp | 39 +++++++++++++++---- .../test_perception_online_evaluator_node.cpp | 14 ++++++- 6 files changed, 61 insertions(+), 19 deletions(-) diff --git a/evaluator/perception_online_evaluator/include/perception_online_evaluator/metrics/metric.hpp b/evaluator/perception_online_evaluator/include/perception_online_evaluator/metrics/metric.hpp index 926fbb7435f3a..eaa07f2317940 100644 --- a/evaluator/perception_online_evaluator/include/perception_online_evaluator/metrics/metric.hpp +++ b/evaluator/perception_online_evaluator/include/perception_online_evaluator/metrics/metric.hpp @@ -20,6 +20,7 @@ #include #include #include +#include #include namespace perception_diagnostics @@ -36,7 +37,11 @@ enum class Metric { SIZE, }; +// Each metric has a different return type. (statistic or just a one value etc). +// To handle them all in the MetricsCalculator::calculate function, define MetricsMap as a variant using MetricStatMap = std::unordered_map>; +using MetricValueMap = std::unordered_map; +using MetricsMap = std::variant; struct PredictedPathDeviationMetrics { diff --git a/evaluator/perception_online_evaluator/include/perception_online_evaluator/metrics_calculator.hpp b/evaluator/perception_online_evaluator/include/perception_online_evaluator/metrics_calculator.hpp index ec435b0a5e17f..a9b1388281ce8 100644 --- a/evaluator/perception_online_evaluator/include/perception_online_evaluator/metrics_calculator.hpp +++ b/evaluator/perception_online_evaluator/include/perception_online_evaluator/metrics_calculator.hpp @@ -96,7 +96,7 @@ class MetricsCalculator * @param [in] metric Metric enum value * @return map of string describing the requested metric and the calculated value */ - std::optional calculate(const Metric & metric) const; + std::optional calculate(const Metric & metric) const; /** * @brief set the dynamic objects used to calculate obstacle metrics @@ -143,7 +143,7 @@ class MetricsCalculator PredictedPathDeviationMetrics calcPredictedPathDeviationMetrics( const PredictedObjects & objects, const double time_horizon) const; MetricStatMap calcYawRateMetrics(const ClassObjectsMap & class_objects_map) const; - MetricStatMap calcObjectsCountMetrics() const; + MetricValueMap calcObjectsCountMetrics() const; bool hasPassedTime(const rclcpp::Time stamp) const; bool hasPassedTime(const std::string uuid, const rclcpp::Time stamp) const; diff --git a/evaluator/perception_online_evaluator/include/perception_online_evaluator/perception_online_evaluator_node.hpp b/evaluator/perception_online_evaluator/include/perception_online_evaluator/perception_online_evaluator_node.hpp index daaea56178873..1bc427e667a2a 100644 --- a/evaluator/perception_online_evaluator/include/perception_online_evaluator/perception_online_evaluator_node.hpp +++ b/evaluator/perception_online_evaluator/include/perception_online_evaluator/perception_online_evaluator_node.hpp @@ -61,6 +61,8 @@ class PerceptionOnlineEvaluatorNode : public rclcpp::Node DiagnosticStatus generateDiagnosticStatus( const std::string metric, const Stat & metric_stat) const; + DiagnosticStatus generateDiagnosticStatus( + const std::string & metric, const double metric_value) const; private: // Subscribers and publishers diff --git a/evaluator/perception_online_evaluator/src/metrics_calculator.cpp b/evaluator/perception_online_evaluator/src/metrics_calculator.cpp index 9c1e0667e4fef..cc455445ca9f8 100644 --- a/evaluator/perception_online_evaluator/src/metrics_calculator.cpp +++ b/evaluator/perception_online_evaluator/src/metrics_calculator.cpp @@ -26,7 +26,7 @@ namespace perception_diagnostics using object_recognition_utils::convertLabelToString; using tier4_autoware_utils::inverseTransformPoint; -std::optional MetricsCalculator::calculate(const Metric & metric) const +std::optional MetricsCalculator::calculate(const Metric & metric) const { // clang-format off const bool use_past_objects = metric == Metric::lateral_deviation || @@ -455,15 +455,14 @@ MetricStatMap MetricsCalculator::calcYawRateMetrics(const ClassObjectsMap & clas return metric_stat_map; } -MetricStatMap MetricsCalculator::calcObjectsCountMetrics() const +MetricValueMap MetricsCalculator::calcObjectsCountMetrics() const { - MetricStatMap metric_stat_map; + MetricValueMap metric_stat_map; // calculate the average number of objects in the detection area in all past frames const auto overall_average_count = detection_counter_.getOverallAverageCount(); for (const auto & [label, range_and_count] : overall_average_count) { for (const auto & [range, count] : range_and_count) { - metric_stat_map["average_objects_count_" + convertLabelToString(label) + "_" + range].add( - count); + metric_stat_map["average_objects_count_" + convertLabelToString(label) + "_" + range] = count; } } // calculate the average number of objects in the detection area in the past @@ -472,8 +471,8 @@ MetricStatMap MetricsCalculator::calcObjectsCountMetrics() const detection_counter_.getAverageCount(parameters_->objects_count_window_seconds); for (const auto & [label, range_and_count] : average_count) { for (const auto & [range, count] : range_and_count) { - metric_stat_map["interval_average_objects_count_" + convertLabelToString(label) + "_" + range] - .add(count); + metric_stat_map + ["interval_average_objects_count_" + convertLabelToString(label) + "_" + range] = count; } } @@ -481,8 +480,7 @@ MetricStatMap MetricsCalculator::calcObjectsCountMetrics() const const auto total_count = detection_counter_.getTotalCount(); for (const auto & [label, range_and_count] : total_count) { for (const auto & [range, count] : range_and_count) { - metric_stat_map["total_objects_count_" + convertLabelToString(label) + "_" + range].add( - count); + metric_stat_map["total_objects_count_" + convertLabelToString(label) + "_" + range] = count; } } diff --git a/evaluator/perception_online_evaluator/src/perception_online_evaluator_node.cpp b/evaluator/perception_online_evaluator/src/perception_online_evaluator_node.cpp index 0fcdd77f4d515..2933afdab3d08 100644 --- a/evaluator/perception_online_evaluator/src/perception_online_evaluator_node.cpp +++ b/evaluator/perception_online_evaluator/src/perception_online_evaluator_node.cpp @@ -69,16 +69,25 @@ void PerceptionOnlineEvaluatorNode::publishMetrics() // calculate metrics for (const Metric & metric : parameters_->metrics) { - const auto metric_stat_map = metrics_calculator_.calculate(Metric(metric)); - if (!metric_stat_map.has_value()) { + const auto metric_result = metrics_calculator_.calculate(Metric(metric)); + if (!metric_result.has_value()) { continue; } - for (const auto & [metric, stat] : metric_stat_map.value()) { - if (stat.count() > 0) { - metrics_msg.status.push_back(generateDiagnosticStatus(metric, stat)); - } - } + std::visit( + [&metrics_msg, this](auto && arg) { + using T = std::decay_t; + for (const auto & [metric, value] : arg) { + if constexpr (std::is_same_v) { + if (value.count() > 0) { + metrics_msg.status.emplace_back(generateDiagnosticStatus(metric, value)); + } + } else if constexpr (std::is_same_v) { + metrics_msg.status.emplace_back(generateDiagnosticStatus(metric, value)); + } + } + }, + metric_result.value()); } // publish metrics @@ -111,6 +120,22 @@ DiagnosticStatus PerceptionOnlineEvaluatorNode::generateDiagnosticStatus( return status; } +DiagnosticStatus PerceptionOnlineEvaluatorNode::generateDiagnosticStatus( + const std::string & metric, const double value) const +{ + DiagnosticStatus status; + + status.level = status.OK; + status.name = metric; + + diagnostic_msgs::msg::KeyValue key_value; + key_value.key = "metric_value"; + key_value.value = std::to_string(value); + status.values.push_back(key_value); + + return status; +} + void PerceptionOnlineEvaluatorNode::onObjects(const PredictedObjects::ConstSharedPtr objects_msg) { metrics_calculator_.setPredictedObjects(*objects_msg, *tf_buffer_); diff --git a/evaluator/perception_online_evaluator/test/test_perception_online_evaluator_node.cpp b/evaluator/perception_online_evaluator/test/test_perception_online_evaluator_node.cpp index a408821466fb9..3db487f3167ae 100644 --- a/evaluator/perception_online_evaluator/test/test_perception_online_evaluator_node.cpp +++ b/evaluator/perception_online_evaluator/test/test_perception_online_evaluator_node.cpp @@ -141,7 +141,19 @@ class EvalTest : public ::testing::Test [=](const DiagnosticArray::ConstSharedPtr msg) { const auto it = std::find_if(msg->status.begin(), msg->status.end(), is_target_metric); if (it != msg->status.end()) { - metric_value_ = boost::lexical_cast(it->values[2].value); + const auto mean_it = std::find_if( + it->values.begin(), it->values.end(), + [](const auto & key_value) { return key_value.key == "mean"; }); + if (mean_it != it->values.end()) { + metric_value_ = boost::lexical_cast(mean_it->value); + } else { + const auto metric_value_it = std::find_if( + it->values.begin(), it->values.end(), + [](const auto & key_value) { return key_value.key == "metric_value"; }); + if (metric_value_it != it->values.end()) { + metric_value_ = boost::lexical_cast(metric_value_it->value); + } + } metric_updated_ = true; } }); From 2f6cd2b322bed1f431ccac0c7edd43a1ee0ca170 Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Fri, 7 Jun 2024 19:17:34 +0900 Subject: [PATCH 024/142] chore(lane_departure_checker): add maintainer (#7366) add maintainer Signed-off-by: Zulfaqar Azmi --- control/lane_departure_checker/package.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/control/lane_departure_checker/package.xml b/control/lane_departure_checker/package.xml index 73955613d21a9..3b1c1c6f6d54b 100644 --- a/control/lane_departure_checker/package.xml +++ b/control/lane_departure_checker/package.xml @@ -6,6 +6,8 @@ The lane_departure_checker package Kyoichi Sugahara Makoto Kurihara + Zulfaqar Azmi + Apache License 2.0 ament_cmake_auto From f03323f59a5e52c349b6bd4d63b75b086a94fbfb Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Fri, 7 Jun 2024 19:35:15 +0900 Subject: [PATCH 025/142] refactor(lane_departure_checker)!: prefix package and namespace with autoware (#7325) * add prefix autoware_ to lane_departure_checker package Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .github/CODEOWNERS | 2 +- control/lane_departure_checker/CMakeLists.txt | 8 ++++---- .../lane_departure_checker.hpp | 10 +++++----- .../lane_departure_checker_node.hpp | 12 ++++++------ .../util/create_vehicle_footprint.hpp | 6 +++--- .../launch/lane_departure_checker.launch.xml | 4 ++-- control/lane_departure_checker/package.xml | 4 ++-- .../lane_departure_checker.cpp | 8 ++++---- .../lane_departure_checker_node.cpp | 8 ++++---- .../tier4_control_launch/control_launch.drawio.svg | 6 +++--- launch/tier4_control_launch/launch/control.launch.py | 4 ++-- launch/tier4_control_launch/package.xml | 2 +- .../parking_departure/geometric_parallel_parking.hpp | 8 +++++--- .../package.xml | 2 +- .../parking_departure/geometric_parallel_parking.cpp | 6 ++++-- .../geometric_pull_out.hpp | 7 ++++--- .../shift_pull_out.hpp | 4 ++-- .../start_planner_module.hpp | 4 ++-- .../src/geometric_pull_out.cpp | 3 ++- .../src/start_planner_module.cpp | 2 +- .../geometric_pull_over.hpp | 4 ++-- .../goal_planner_module.hpp | 4 ++-- .../shift_pull_over.hpp | 4 ++-- .../behavior_path_goal_planner_module/util.hpp | 2 +- .../src/goal_searcher.cpp | 2 +- planning/behavior_path_planner/package.xml | 2 +- 26 files changed, 67 insertions(+), 61 deletions(-) rename control/lane_departure_checker/include/{lane_departure_checker => autoware_lane_departure_checker}/lane_departure_checker.hpp (95%) rename control/lane_departure_checker/include/{lane_departure_checker => autoware_lane_departure_checker}/lane_departure_checker_node.hpp (93%) rename control/lane_departure_checker/include/{lane_departure_checker => autoware_lane_departure_checker}/util/create_vehicle_footprint.hpp (91%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 2eefee5606ab2..c0eb60e5a1316 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -49,7 +49,7 @@ control/control_performance_analysis/** berkay@leodrive.ai fumiya.watanabe@tier4 control/control_validator/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/external_cmd_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/joy_controller/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp -control/lane_departure_checker/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp +control/autoware_lane_departure_checker/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp control/mpc_lateral_controller/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/obstacle_collision_checker/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/operation_mode_transition_manager/** takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp diff --git a/control/lane_departure_checker/CMakeLists.txt b/control/lane_departure_checker/CMakeLists.txt index 874670c478240..d545e1cbb5ad1 100644 --- a/control/lane_departure_checker/CMakeLists.txt +++ b/control/lane_departure_checker/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(lane_departure_checker) +project(autoware_lane_departure_checker) find_package(autoware_cmake REQUIRED) autoware_package() @@ -10,13 +10,13 @@ include_directories( ${EIGEN3_INCLUDE_DIRS} ) -ament_auto_add_library(lane_departure_checker SHARED +ament_auto_add_library(autoware_lane_departure_checker SHARED src/lane_departure_checker_node/lane_departure_checker.cpp src/lane_departure_checker_node/lane_departure_checker_node.cpp ) -rclcpp_components_register_node(lane_departure_checker - PLUGIN "lane_departure_checker::LaneDepartureCheckerNode" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::lane_departure_checker::LaneDepartureCheckerNode" EXECUTABLE lane_departure_checker_node ) diff --git a/control/lane_departure_checker/include/lane_departure_checker/lane_departure_checker.hpp b/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker.hpp similarity index 95% rename from control/lane_departure_checker/include/lane_departure_checker/lane_departure_checker.hpp rename to control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker.hpp index 967cb65c8efa8..d90dbc9474fd8 100644 --- a/control/lane_departure_checker/include/lane_departure_checker/lane_departure_checker.hpp +++ b/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_HPP_ -#define LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_HPP_ +#ifndef AUTOWARE_LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_HPP_ +#define AUTOWARE_LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_HPP_ #include #include @@ -45,7 +45,7 @@ #include #include -namespace lane_departure_checker +namespace autoware::lane_departure_checker { using autoware_planning_msgs::msg::LaneletRoute; using autoware_planning_msgs::msg::Trajectory; @@ -170,6 +170,6 @@ class LaneDepartureChecker const std::vector & vehicle_footprints, const SegmentRtree & uncrossable_segments); }; -} // namespace lane_departure_checker +} // namespace autoware::lane_departure_checker -#endif // LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_HPP_ +#endif // AUTOWARE_LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_HPP_ diff --git a/control/lane_departure_checker/include/lane_departure_checker/lane_departure_checker_node.hpp b/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker_node.hpp similarity index 93% rename from control/lane_departure_checker/include/lane_departure_checker/lane_departure_checker_node.hpp rename to control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker_node.hpp index 0f0e15d0a4f62..be7126944f767 100644 --- a/control/lane_departure_checker/include/lane_departure_checker/lane_departure_checker_node.hpp +++ b/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker_node.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_NODE_HPP_ -#define LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_NODE_HPP_ +#ifndef AUTOWARE_LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_NODE_HPP_ +#define AUTOWARE_LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_NODE_HPP_ -#include "lane_departure_checker/lane_departure_checker.hpp" +#include "autoware_lane_departure_checker/lane_departure_checker.hpp" #include #include @@ -40,7 +40,7 @@ #include #include -namespace lane_departure_checker +namespace autoware::lane_departure_checker { using autoware_map_msgs::msg::LaneletMapBin; @@ -149,6 +149,6 @@ class LaneDepartureCheckerNode : public rclcpp::Node lanelet::Lanelets getRightOppositeLanelets(const lanelet::ConstLanelet & lanelet); }; -} // namespace lane_departure_checker +} // namespace autoware::lane_departure_checker -#endif // LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_NODE_HPP_ +#endif // AUTOWARE_LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_NODE_HPP_ diff --git a/control/lane_departure_checker/include/lane_departure_checker/util/create_vehicle_footprint.hpp b/control/lane_departure_checker/include/autoware_lane_departure_checker/util/create_vehicle_footprint.hpp similarity index 91% rename from control/lane_departure_checker/include/lane_departure_checker/util/create_vehicle_footprint.hpp rename to control/lane_departure_checker/include/autoware_lane_departure_checker/util/create_vehicle_footprint.hpp index edc62cd6659fd..917317361d702 100644 --- a/control/lane_departure_checker/include/lane_departure_checker/util/create_vehicle_footprint.hpp +++ b/control/lane_departure_checker/include/autoware_lane_departure_checker/util/create_vehicle_footprint.hpp @@ -25,8 +25,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LANE_DEPARTURE_CHECKER__UTIL__CREATE_VEHICLE_FOOTPRINT_HPP_ -#define LANE_DEPARTURE_CHECKER__UTIL__CREATE_VEHICLE_FOOTPRINT_HPP_ +#ifndef AUTOWARE_LANE_DEPARTURE_CHECKER__UTIL__CREATE_VEHICLE_FOOTPRINT_HPP_ +#define AUTOWARE_LANE_DEPARTURE_CHECKER__UTIL__CREATE_VEHICLE_FOOTPRINT_HPP_ #include #include @@ -63,4 +63,4 @@ inline FootprintMargin calcFootprintMargin( return FootprintMargin{Cov_xy_vehicle(0, 0) * scale, Cov_xy_vehicle(1, 1) * scale}; } -#endif // LANE_DEPARTURE_CHECKER__UTIL__CREATE_VEHICLE_FOOTPRINT_HPP_ +#endif // AUTOWARE_LANE_DEPARTURE_CHECKER__UTIL__CREATE_VEHICLE_FOOTPRINT_HPP_ diff --git a/control/lane_departure_checker/launch/lane_departure_checker.launch.xml b/control/lane_departure_checker/launch/lane_departure_checker.launch.xml index 62799c1187651..7ea2e8b2de60a 100644 --- a/control/lane_departure_checker/launch/lane_departure_checker.launch.xml +++ b/control/lane_departure_checker/launch/lane_departure_checker.launch.xml @@ -4,12 +4,12 @@ - + - + diff --git a/control/lane_departure_checker/package.xml b/control/lane_departure_checker/package.xml index 3b1c1c6f6d54b..466dc7351cd9e 100644 --- a/control/lane_departure_checker/package.xml +++ b/control/lane_departure_checker/package.xml @@ -1,9 +1,9 @@ - lane_departure_checker + autoware_lane_departure_checker 0.1.0 - The lane_departure_checker package + The autoware_lane_departure_checker package Kyoichi Sugahara Makoto Kurihara Zulfaqar Azmi diff --git a/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker.cpp b/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker.cpp index eb5d674705aaa..5e90df6773b87 100644 --- a/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker.cpp +++ b/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "lane_departure_checker/lane_departure_checker.hpp" +#include "autoware_lane_departure_checker/lane_departure_checker.hpp" -#include "lane_departure_checker/util/create_vehicle_footprint.hpp" +#include "autoware_lane_departure_checker/util/create_vehicle_footprint.hpp" #include #include @@ -96,7 +96,7 @@ lanelet::ConstLanelets getCandidateLanelets( } // namespace -namespace lane_departure_checker +namespace autoware::lane_departure_checker { Output LaneDepartureChecker::update(const Input & input) { @@ -460,4 +460,4 @@ bool LaneDepartureChecker::willCrossBoundary( return false; } -} // namespace lane_departure_checker +} // namespace autoware::lane_departure_checker diff --git a/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp b/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp index c3fd1d314e371..2b919f89e6e95 100644 --- a/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp +++ b/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "lane_departure_checker/lane_departure_checker_node.hpp" +#include "autoware_lane_departure_checker/lane_departure_checker_node.hpp" #include #include @@ -120,7 +120,7 @@ void update_param( } // namespace -namespace lane_departure_checker +namespace autoware::lane_departure_checker { LaneDepartureCheckerNode::LaneDepartureCheckerNode(const rclcpp::NodeOptions & options) : Node("lane_departure_checker_node", options) @@ -759,7 +759,7 @@ lanelet::Lanelets LaneDepartureCheckerNode::getRightOppositeLanelets( return opposite_lanelets; } -} // namespace lane_departure_checker +} // namespace autoware::lane_departure_checker #include -RCLCPP_COMPONENTS_REGISTER_NODE(lane_departure_checker::LaneDepartureCheckerNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::lane_departure_checker::LaneDepartureCheckerNode) diff --git a/launch/tier4_control_launch/control_launch.drawio.svg b/launch/tier4_control_launch/control_launch.drawio.svg index 5d13b84a0b34b..21d97ba08c0b3 100644 --- a/launch/tier4_control_launch/control_launch.drawio.svg +++ b/launch/tier4_control_launch/control_launch.drawio.svg @@ -259,17 +259,17 @@ >
- lane_departure_checker_node + autoware_lane_departure_checker_node

- package: lane_departure_checker_node + package: autoware_lane_departure_checker_node
- lane_departure_checker_node... + autoware_lane_departure_checker_node... diff --git a/launch/tier4_control_launch/launch/control.launch.py b/launch/tier4_control_launch/launch/control.launch.py index 77140b0e0f630..239a65f8260bf 100644 --- a/launch/tier4_control_launch/launch/control.launch.py +++ b/launch/tier4_control_launch/launch/control.launch.py @@ -102,8 +102,8 @@ def launch_setup(context, *args, **kwargs): # lane departure checker lane_departure_component = ComposableNode( - package="lane_departure_checker", - plugin="lane_departure_checker::LaneDepartureCheckerNode", + package="autoware_lane_departure_checker", + plugin="autoware::lane_departure_checker::LaneDepartureCheckerNode", name="lane_departure_checker_node", namespace="trajectory_follower", remappings=[ diff --git a/launch/tier4_control_launch/package.xml b/launch/tier4_control_launch/package.xml index 801fa274dd086..fda612f05436c 100644 --- a/launch/tier4_control_launch/package.xml +++ b/launch/tier4_control_launch/package.xml @@ -11,10 +11,10 @@ ament_cmake_auto autoware_cmake + autoware_lane_departure_checker control_evaluator external_cmd_converter external_cmd_selector - lane_departure_checker shift_decider trajectory_follower_node vehicle_cmd_gate diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/parking_departure/geometric_parallel_parking.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/parking_departure/geometric_parallel_parking.hpp index 867e76f0db614..fe8dc4c25869a 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/parking_departure/geometric_parallel_parking.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/parking_departure/geometric_parallel_parking.hpp @@ -18,7 +18,7 @@ #include "autoware_behavior_path_planner_common/data_manager.hpp" #include "autoware_behavior_path_planner_common/parameters.hpp" -#include +#include #include #include @@ -75,7 +75,8 @@ class GeometricParallelParking bool planPullOut( const Pose & start_pose, const Pose & goal_pose, const lanelet::ConstLanelets & road_lanes, const lanelet::ConstLanelets & shoulder_lanes, const bool left_side_start, - const std::shared_ptr lane_departure_checker); + const std::shared_ptr + autoware_lane_departure_checker); void setParameters(const ParallelParkingParameters & parameters) { parameters_ = parameters; } void setPlannerData(const std::shared_ptr & planner_data) { @@ -119,7 +120,8 @@ class GeometricParallelParking const lanelet::ConstLanelets & road_lanes, const lanelet::ConstLanelets & shoulder_lanes, const bool is_forward, const bool left_side_parking, const double end_pose_offset, const double lane_departure_margin, const double arc_path_interval, - const std::shared_ptr lane_departure_checker); + const std::shared_ptr + autoware_lane_departure_checker); PathWithLaneId generateArcPath( const Pose & center, const double radius, const double start_yaw, double end_yaw, const double arc_path_interval, const bool is_left_turn, const bool is_forward); diff --git a/planning/autoware_behavior_path_planner_common/package.xml b/planning/autoware_behavior_path_planner_common/package.xml index 21da8dcef1c2d..24d369e475e61 100644 --- a/planning/autoware_behavior_path_planner_common/package.xml +++ b/planning/autoware_behavior_path_planner_common/package.xml @@ -43,12 +43,12 @@ autoware_cmake autoware_adapi_v1_msgs + autoware_lane_departure_checker autoware_perception_msgs autoware_planning_msgs freespace_planning_algorithms geometry_msgs interpolation - lane_departure_checker lanelet2_extension magic_enum motion_utils diff --git a/planning/autoware_behavior_path_planner_common/src/utils/parking_departure/geometric_parallel_parking.cpp b/planning/autoware_behavior_path_planner_common/src/utils/parking_departure/geometric_parallel_parking.cpp index 26c089ee0ba09..73f513c9e65eb 100644 --- a/planning/autoware_behavior_path_planner_common/src/utils/parking_departure/geometric_parallel_parking.cpp +++ b/planning/autoware_behavior_path_planner_common/src/utils/parking_departure/geometric_parallel_parking.cpp @@ -223,7 +223,8 @@ bool GeometricParallelParking::planPullOver( bool GeometricParallelParking::planPullOut( const Pose & start_pose, const Pose & goal_pose, const lanelet::ConstLanelets & road_lanes, const lanelet::ConstLanelets & shoulder_lanes, const bool left_side_start, - const std::shared_ptr lane_departure_checker) + const std::shared_ptr + lane_departure_checker) { constexpr bool is_forward = false; // parking backward means pull_out forward constexpr double start_pose_offset = 0.0; // start_pose is current_pose @@ -364,7 +365,8 @@ std::vector GeometricParallelParking::planOneTrial( const lanelet::ConstLanelets & road_lanes, const lanelet::ConstLanelets & shoulder_lanes, const bool is_forward, const bool left_side_parking, const double end_pose_offset, const double lane_departure_margin, const double arc_path_interval, - const std::shared_ptr lane_departure_checker) + const std::shared_ptr + lane_departure_checker) { clearPaths(); diff --git a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/geometric_pull_out.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/geometric_pull_out.hpp index 5edde96ea4abf..510fee8fe3dc6 100644 --- a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/geometric_pull_out.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/geometric_pull_out.hpp @@ -19,7 +19,7 @@ #include "autoware_behavior_path_start_planner_module/pull_out_path.hpp" #include "autoware_behavior_path_start_planner_module/pull_out_planner_base.hpp" -#include +#include #include @@ -32,14 +32,15 @@ class GeometricPullOut : public PullOutPlannerBase public: explicit GeometricPullOut( rclcpp::Node & node, const StartPlannerParameters & parameters, - const std::shared_ptr lane_departure_checker); + const std::shared_ptr + lane_departure_checker); PlannerType getPlannerType() const override { return PlannerType::GEOMETRIC; }; std::optional plan(const Pose & start_pose, const Pose & goal_pose) override; GeometricParallelParking planner_; ParallelParkingParameters parallel_parking_parameters_; - std::shared_ptr lane_departure_checker_; + std::shared_ptr lane_departure_checker_; }; } // namespace behavior_path_planner diff --git a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/shift_pull_out.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/shift_pull_out.hpp index 3092ca4f80e3f..29a74ce0e14ef 100644 --- a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/shift_pull_out.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/shift_pull_out.hpp @@ -18,7 +18,7 @@ #include "autoware_behavior_path_start_planner_module/pull_out_path.hpp" #include "autoware_behavior_path_start_planner_module/pull_out_planner_base.hpp" -#include +#include #include @@ -27,7 +27,7 @@ namespace behavior_path_planner { -using lane_departure_checker::LaneDepartureChecker; +using autoware::lane_departure_checker::LaneDepartureChecker; class ShiftPullOut : public PullOutPlannerBase { diff --git a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/start_planner_module.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/start_planner_module.hpp index 1883e10af3c62..7a98a43efec5b 100644 --- a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/start_planner_module.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/start_planner_module.hpp @@ -27,7 +27,7 @@ #include "autoware_behavior_path_start_planner_module/pull_out_path.hpp" #include "autoware_behavior_path_start_planner_module/shift_pull_out.hpp" -#include +#include #include #include @@ -46,13 +46,13 @@ namespace behavior_path_planner { +using autoware::lane_departure_checker::LaneDepartureChecker; using behavior_path_planner::utils::path_safety_checker::EgoPredictedPathParams; using behavior_path_planner::utils::path_safety_checker::ObjectsFilteringParams; using behavior_path_planner::utils::path_safety_checker::PoseWithVelocityStamped; using behavior_path_planner::utils::path_safety_checker::SafetyCheckParams; using behavior_path_planner::utils::path_safety_checker::TargetObjectsOnLane; using geometry_msgs::msg::PoseArray; -using lane_departure_checker::LaneDepartureChecker; using PriorityOrder = std::vector>>; struct PullOutStatus diff --git a/planning/autoware_behavior_path_start_planner_module/src/geometric_pull_out.cpp b/planning/autoware_behavior_path_start_planner_module/src/geometric_pull_out.cpp index 86d7de246c312..d299b3f4799b2 100644 --- a/planning/autoware_behavior_path_start_planner_module/src/geometric_pull_out.cpp +++ b/planning/autoware_behavior_path_start_planner_module/src/geometric_pull_out.cpp @@ -32,7 +32,8 @@ using start_planner_utils::getPullOutLanes; GeometricPullOut::GeometricPullOut( rclcpp::Node & node, const StartPlannerParameters & parameters, - const std::shared_ptr lane_departure_checker) + const std::shared_ptr + lane_departure_checker) : PullOutPlannerBase{node, parameters}, parallel_parking_parameters_{parameters.parallel_parking_parameters}, lane_departure_checker_(lane_departure_checker) diff --git a/planning/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp b/planning/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp index c13afdf2b86df..b30af17eaa898 100644 --- a/planning/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp +++ b/planning/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp @@ -65,7 +65,7 @@ StartPlannerModule::StartPlannerModule( { lane_departure_checker_ = std::make_shared(); lane_departure_checker_->setVehicleInfo(vehicle_info_); - lane_departure_checker::Param lane_departure_checker_params; + autoware::lane_departure_checker::Param lane_departure_checker_params; lane_departure_checker_params.footprint_extra_margin = parameters->lane_departure_check_expansion_margin; diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/geometric_pull_over.hpp b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/geometric_pull_over.hpp index 0009fbccdb5d8..903655b64e347 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/geometric_pull_over.hpp +++ b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/geometric_pull_over.hpp @@ -18,7 +18,7 @@ #include "autoware_behavior_path_planner_common/utils/parking_departure/geometric_parallel_parking.hpp" #include "behavior_path_goal_planner_module/pull_over_planner_base.hpp" -#include +#include #include @@ -27,7 +27,7 @@ namespace behavior_path_planner { -using lane_departure_checker::LaneDepartureChecker; +using autoware::lane_departure_checker::LaneDepartureChecker; class GeometricPullOver : public PullOverPlannerBase { public: diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp index 8938e48e0ceb5..b7c4a24e52974 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp +++ b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp @@ -28,9 +28,9 @@ #include "behavior_path_goal_planner_module/goal_searcher.hpp" #include "behavior_path_goal_planner_module/shift_pull_over.hpp" +#include #include #include -#include #include #include @@ -50,9 +50,9 @@ namespace behavior_path_planner { +using autoware::lane_departure_checker::LaneDepartureChecker; using autoware_vehicle_msgs::msg::HazardLightsCommand; using geometry_msgs::msg::PoseArray; -using lane_departure_checker::LaneDepartureChecker; using nav_msgs::msg::OccupancyGrid; using visualization_msgs::msg::Marker; using visualization_msgs::msg::MarkerArray; diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/shift_pull_over.hpp b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/shift_pull_over.hpp index 635816f17497f..e7b297548083a 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/shift_pull_over.hpp +++ b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/shift_pull_over.hpp @@ -17,7 +17,7 @@ #include "behavior_path_goal_planner_module/pull_over_planner_base.hpp" -#include +#include #include @@ -26,7 +26,7 @@ namespace behavior_path_planner { -using lane_departure_checker::LaneDepartureChecker; +using autoware::lane_departure_checker::LaneDepartureChecker; class ShiftPullOver : public PullOverPlannerBase { diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/util.hpp b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/util.hpp index 83e817a8d5a45..d6c9215e495ae 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/util.hpp +++ b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/util.hpp @@ -18,7 +18,7 @@ #include "behavior_path_goal_planner_module/goal_searcher_base.hpp" #include "tier4_autoware_utils/geometry/boost_polygon_utils.hpp" -#include +#include #include "visualization_msgs/msg/detail/marker_array__struct.hpp" #include diff --git a/planning/behavior_path_goal_planner_module/src/goal_searcher.cpp b/planning/behavior_path_goal_planner_module/src/goal_searcher.cpp index efd9eda322585..b56ae44dcf476 100644 --- a/planning/behavior_path_goal_planner_module/src/goal_searcher.cpp +++ b/planning/behavior_path_goal_planner_module/src/goal_searcher.cpp @@ -32,7 +32,7 @@ namespace behavior_path_planner { -using lane_departure_checker::LaneDepartureChecker; +using autoware::lane_departure_checker::LaneDepartureChecker; using lanelet::autoware::NoParkingArea; using lanelet::autoware::NoStoppingArea; using tier4_autoware_utils::calcOffsetPose; diff --git a/planning/behavior_path_planner/package.xml b/planning/behavior_path_planner/package.xml index a646621e5b089..f51fa99578d7b 100644 --- a/planning/behavior_path_planner/package.xml +++ b/planning/behavior_path_planner/package.xml @@ -39,6 +39,7 @@ autoware_adapi_v1_msgs autoware_behavior_path_planner_common autoware_frenet_planner + autoware_lane_departure_checker autoware_path_sampler autoware_perception_msgs autoware_planning_msgs @@ -48,7 +49,6 @@ freespace_planning_algorithms geometry_msgs interpolation - lane_departure_checker lanelet2_extension libboost-dev libopencv-dev From dfa31a60b1bc0dfab3014d17bdbe148beffa57a3 Mon Sep 17 00:00:00 2001 From: Autumn60 <37181352+Autumn60@users.noreply.github.com> Date: Fri, 7 Jun 2024 20:01:26 +0900 Subject: [PATCH 026/142] fix(mrm_handler): fix stop judgement (#7362) fix stop judgement Signed-off-by: Autumn60 Co-authored-by: Autumn60 --- system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp b/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp index 44407c40c6787..326fbb392fd35 100644 --- a/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp +++ b/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp @@ -520,7 +520,7 @@ bool MrmHandler::isStopped() auto odom = sub_odom_.takeData(); if (odom == nullptr) return false; constexpr auto th_stopped_velocity = 0.001; - return (std::abs(odom->twist.twist.linear.x < th_stopped_velocity) < th_stopped_velocity); + return (std::abs(odom->twist.twist.linear.x) < th_stopped_velocity); } bool MrmHandler::isDrivingBackwards() From ed038d8c1462d19232e7270479ceb01ebea7b382 Mon Sep 17 00:00:00 2001 From: Go Sakayori Date: Fri, 7 Jun 2024 21:06:36 +0900 Subject: [PATCH 027/142] chore(smart_mpc_trajectory_follower): add prefix autoware_ to smart_mpc_trajectory_follower (#7367) * add prefix Signed-off-by: Go Sakayori * fix pre-commit Signed-off-by: Go Sakayori --------- Signed-off-by: Go Sakayori --- .github/CODEOWNERS | 2 +- .../.gitignore | 0 .../CMakeLists.txt | 4 +- .../README.md | 66 +++++++++--------- .../.gitignore | 0 .../__init__.py | 0 .../clear_pycache.py | 4 +- .../param/mpc_param.yaml | 0 .../param/nominal_param.yaml | 0 .../param/trained_model_param.yaml | 0 .../python_simulator/.gitignore | 0 .../python_simulator/accel_map.csv | 0 .../plot_auto_test_result.ipynb | 0 .../python_simulator/python_simulator.py | 4 +- .../python_simulator/run_python_simulator.py | 2 +- .../python_simulator/run_sim.py | 2 +- .../python_simulator/slalom_course_data.csv | 0 .../scripts/.gitignore | 0 .../scripts/__init__.py | 0 .../scripts/drive_GP.py | 2 +- .../scripts/drive_NN.py | 4 +- .../scripts/drive_controller.py | 10 +-- .../scripts/drive_functions.py | 8 ++- .../scripts/drive_iLQR.py | 2 +- .../scripts/drive_mppi.py | 2 +- .../scripts/proxima_calc.cpp | 0 .../scripts/pympc_trajectory_follower.py | 4 +- .../training_and_data_check/.gitignore | 0 .../training_and_data_check/__init__.py | 0 .../add_training_data_from_csv.py | 4 +- .../data_checker.ipynb | 0 .../execute_train_drive_NN_model.ipynb | 0 .../training_and_data_check/rosbag2.bash | 0 .../train_drive_GP_model.py | 0 .../train_drive_NN_model.py | 8 ++- .../images/autoware_smart_mpc.png | Bin .../images/lateral_error_nominal_model.png | Bin .../images/lateral_error_trained_model.png | Bin .../images/proxima_logo.png | Bin ...python_sim_lateral_error_nominal_model.png | Bin ...python_sim_lateral_error_trained_model.png | Bin .../images/test_route.png | Bin .../package.xml | 2 +- .../setup.py | 14 ++-- .../launch/control.launch.py | 2 +- 45 files changed, 75 insertions(+), 71 deletions(-) rename control/{smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower}/.gitignore (100%) rename control/{smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower}/CMakeLists.txt (60%) rename control/{smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower}/README.md (85%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/.gitignore (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/__init__.py (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/clear_pycache.py (88%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/param/mpc_param.yaml (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/param/nominal_param.yaml (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/param/trained_model_param.yaml (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/python_simulator/.gitignore (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/python_simulator/accel_map.csv (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/python_simulator/plot_auto_test_result.ipynb (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/python_simulator/python_simulator.py (99%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/python_simulator/run_python_simulator.py (92%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/python_simulator/run_sim.py (99%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/python_simulator/slalom_course_data.csv (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/scripts/.gitignore (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/scripts/__init__.py (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/scripts/drive_GP.py (98%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/scripts/drive_NN.py (98%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/scripts/drive_controller.py (99%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/scripts/drive_functions.py (99%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/scripts/drive_iLQR.py (99%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/scripts/drive_mppi.py (98%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/scripts/proxima_calc.cpp (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/scripts/pympc_trajectory_follower.py (99%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/training_and_data_check/.gitignore (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/training_and_data_check/__init__.py (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/training_and_data_check/add_training_data_from_csv.py (98%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/training_and_data_check/data_checker.ipynb (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/training_and_data_check/execute_train_drive_NN_model.ipynb (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/training_and_data_check/rosbag2.bash (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/training_and_data_check/train_drive_GP_model.py (100%) rename control/{smart_mpc_trajectory_follower/smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower}/training_and_data_check/train_drive_NN_model.py (99%) rename control/{smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower}/images/autoware_smart_mpc.png (100%) rename control/{smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower}/images/lateral_error_nominal_model.png (100%) rename control/{smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower}/images/lateral_error_trained_model.png (100%) rename control/{smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower}/images/proxima_logo.png (100%) rename control/{smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower}/images/python_sim_lateral_error_nominal_model.png (100%) rename control/{smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower}/images/python_sim_lateral_error_trained_model.png (100%) rename control/{smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower}/images/test_route.png (100%) rename control/{smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower}/package.xml (96%) rename control/{smart_mpc_trajectory_follower => autoware_smart_mpc_trajectory_follower}/setup.py (60%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c0eb60e5a1316..cbab68f91f512 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -57,7 +57,7 @@ control/pid_longitudinal_controller/** mamoru.sobue@tier4.jp takamasa.horibe@tie control/predicted_path_checker/** berkay@leodrive.ai control/pure_pursuit/** takamasa.horibe@tier4.jp control/shift_decider/** takamasa.horibe@tier4.jp -control/smart_mpc_trajectory_follower/** masayuki.aino@proxima-ai-tech.com +control/autoware_smart_mpc_trajectory_follower/** masayuki.aino@proxima-ai-tech.com control/trajectory_follower_base/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/trajectory_follower_node/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/vehicle_cmd_gate/** takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp diff --git a/control/smart_mpc_trajectory_follower/.gitignore b/control/autoware_smart_mpc_trajectory_follower/.gitignore similarity index 100% rename from control/smart_mpc_trajectory_follower/.gitignore rename to control/autoware_smart_mpc_trajectory_follower/.gitignore diff --git a/control/smart_mpc_trajectory_follower/CMakeLists.txt b/control/autoware_smart_mpc_trajectory_follower/CMakeLists.txt similarity index 60% rename from control/smart_mpc_trajectory_follower/CMakeLists.txt rename to control/autoware_smart_mpc_trajectory_follower/CMakeLists.txt index 7aecab2597dcd..57e7b596790c2 100644 --- a/control/smart_mpc_trajectory_follower/CMakeLists.txt +++ b/control/autoware_smart_mpc_trajectory_follower/CMakeLists.txt @@ -1,11 +1,11 @@ cmake_minimum_required(VERSION 3.14) -project(smart_mpc_trajectory_follower) +project(autoware_smart_mpc_trajectory_follower) find_package(autoware_cmake REQUIRED) autoware_package() install(PROGRAMS - smart_mpc_trajectory_follower/scripts/pympc_trajectory_follower.py + autoware_smart_mpc_trajectory_follower/scripts/pympc_trajectory_follower.py DESTINATION lib/${PROJECT_NAME} ) ament_auto_package( diff --git a/control/smart_mpc_trajectory_follower/README.md b/control/autoware_smart_mpc_trajectory_follower/README.md similarity index 85% rename from control/smart_mpc_trajectory_follower/README.md rename to control/autoware_smart_mpc_trajectory_follower/README.md index 8fcc13142d68b..fd135319ff900 100644 --- a/control/smart_mpc_trajectory_follower/README.md +++ b/control/autoware_smart_mpc_trajectory_follower/README.md @@ -19,7 +19,7 @@ This technology makes it relatively easy to operate model predictive control, wh ## Setup -After building autoware, move to `control/smart_mpc_trajectory_follower` and run the following command: +After building autoware, move to `control/autoware_smart_mpc_trajectory_follower` and run the following command: ```bash pip3 install . @@ -37,7 +37,7 @@ This package provides smart MPC logic for path-following control as well as mech ### Trajectory following control based on iLQR/MPPI -The control mode can be selected from "ilqr", "mppi", or "mppi_ilqr", and can be set as `mpc_parameter:system:mode` in [mpc_param.yaml](./smart_mpc_trajectory_follower/param/mpc_param.yaml). +The control mode can be selected from "ilqr", "mppi", or "mppi_ilqr", and can be set as `mpc_parameter:system:mode` in [mpc_param.yaml](./autoware_smart_mpc_trajectory_follower/param/mpc_param.yaml). In "mppi_ilqr" mode, the initial value of iLQR is given by the MPPI solution. > [!NOTE] @@ -50,7 +50,7 @@ ros2 launch autoware_launch planning_simulator.launch.xml map_path:=$HOME/autowa ``` > [!NOTE] -> When running with the nominal model set in [nominal_param.yaml](./smart_mpc_trajectory_follower/param/nominal_param.yaml), set `trained_model_parameter:control_application:use_trained_model` to `false` in [trained_model_param.yaml](./smart_mpc_trajectory_follower/param/trained_model_param.yaml). To run using the trained model, set `trained_model_parameter:control_application:use_trained_model` to `true`, but the trained model must have been generated according to the following procedure. +> When running with the nominal model set in [nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml), set `trained_model_parameter:control_application:use_trained_model` to `false` in [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml). To run using the trained model, set `trained_model_parameter:control_application:use_trained_model` to `true`, but the trained model must have been generated according to the following procedure. ### Training of model and reflection in control @@ -60,7 +60,7 @@ To obtain training data, start autoware, perform a drive, and record rosbag data ros2 bag record /localization/kinematic_state /localization/acceleration /vehicle/status/steering_status /control/command/control_cmd /control/trajectory_follower/control_cmd /control/trajectory_follower/lane_departure_checker_node/debug/deviation/lateral /control/trajectory_follower/lane_departure_checker_node/debug/deviation/yaw /system/operation_mode/state /vehicle/status/control_mode /sensing/imu/imu_data /debug_mpc_x_des /debug_mpc_y_des /debug_mpc_v_des /debug_mpc_yaw_des /debug_mpc_acc_des /debug_mpc_steer_des /debug_mpc_X_des_converted /debug_mpc_x_current /debug_mpc_error_prediction /debug_mpc_max_trajectory_err /debug_mpc_emergency_stop_mode /debug_mpc_goal_stop_mode /debug_mpc_total_ctrl_time /debug_mpc_calc_u_opt_time ``` -Move [rosbag2.bash](./smart_mpc_trajectory_follower/training_and_data_check/rosbag2.bash) to the rosbag directory recorded above and execute the following command on the directory +Move [rosbag2.bash](./autoware_smart_mpc_trajectory_follower/training_and_data_check/rosbag2.bash) to the rosbag directory recorded above and execute the following command on the directory ```bash bash rosbag2.bash @@ -75,7 +75,7 @@ This converts rosbag data into CSV format for training models. Instead, the same result can be obtained by executing the following command in a python environment: ```python -from smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model +from autoware_smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model model_trainer = train_drive_NN_model.train_drive_NN_model() model_trainer.transform_rosbag_to_csv(rosbag_dir) ``` @@ -86,7 +86,7 @@ At this time, all CSV files in `rosbag_dir` are automatically deleted first. The paths of the rosbag directories used for training, `dir_0`, `dir_1`, `dir_2`,... and the directory `save_dir` where you save the models, the model can be saved in the python environment as follows: ```python -from smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model +from autoware_smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model model_trainer = train_drive_NN_model.train_drive_NN_model() model_trainer.add_data_from_csv(dir_0) model_trainer.add_data_from_csv(dir_1) @@ -112,12 +112,12 @@ If only polynomial regression is performed and no NN model is used, run the foll model_trainer.get_trained_model(use_polynomial_reg=True,force_NN_model_to_zero=True) ``` -Move `model_for_test_drive.pth` and `polynomial_reg_info.npz` saved in `save_dir` to the home directory and set `trained_model_parameter:control_application:use_trained_model` in [trained_model_param.yaml](./smart_mpc_trajectory_follower/param/trained_model_param.yaml) to `true` to reflect the trained model in the control. +Move `model_for_test_drive.pth` and `polynomial_reg_info.npz` saved in `save_dir` to the home directory and set `trained_model_parameter:control_application:use_trained_model` in [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) to `true` to reflect the trained model in the control. ### Performance evaluation Here, as an example, we describe the verification of the adaptive performance when the wheel base of the sample_vehicle is 2.79 m, but an incorrect value of 2.0 m is given to the controller side. -To give the controller 2.0 m as the wheel base, set the value of `nominal_parameter:vehicle_info:wheel_base` in [nominal_param.yaml](./smart_mpc_trajectory_follower/param/nominal_param.yaml) to 2.0, and run the following command: +To give the controller 2.0 m as the wheel base, set the value of `nominal_parameter:vehicle_info:wheel_base` in [nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml) to 2.0, and run the following command: ```bash python3 -m smart_mpc_trajectory_follower.clear_pycache @@ -125,7 +125,7 @@ python3 -m smart_mpc_trajectory_follower.clear_pycache #### Test on autoware -To perform a control test on autoware with the nominal model before training, make sure that `trained_model_parameter:control_application:use_trained_model` in [trained_model_param.yaml](./smart_mpc_trajectory_follower/param/trained_model_param.yaml) is `false` and launch autoware in the manner described in "Trajectory following control based on iLQR/MPPI". This time, the following route will be used for the test: +To perform a control test on autoware with the nominal model before training, make sure that `trained_model_parameter:control_application:use_trained_model` in [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml) is `false` and launch autoware in the manner described in "Trajectory following control based on iLQR/MPPI". This time, the following route will be used for the test:

@@ -136,7 +136,7 @@ Record rosbag and train the model in the manner described in "Training of model To control using the trained model obtained here, set `trained_model_parameter:control_application:use_trained_model` to `true`, start autoware in the same way, and drive the same route recording rosbag. After the driving is complete, convert the rosbag file to CSV format using the method described in "Training of model and reflection in control". -A plot of the lateral deviation is obtained by running the `lateral_error_visualize` function in `control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/data_checker.ipynb` for the nominal and training model rosbag files `rosbag_nominal` and `rosbag_trained`, respectively, as follows: +A plot of the lateral deviation is obtained by running the `lateral_error_visualize` function in `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/data_checker.ipynb` for the nominal and training model rosbag files `rosbag_nominal` and `rosbag_trained`, respectively, as follows: ```python lateral_error_visualize(dir_name=rosbag_nominal,ylim=[-1.2,1.2]) @@ -152,7 +152,7 @@ The following results were obtained. #### Test on python simulator -First, to give wheel base 2.79 m in the python simulator, create the following file and save it in `control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator` with the name `sim_setting.json`: +First, to give wheel base 2.79 m in the python simulator, create the following file and save it in `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator` with the name `sim_setting.json`: ```json { "wheel_base": 2.79 } @@ -162,7 +162,7 @@ Next, run the following commands to test the slalom driving on the python simula ```python import python_simulator -from smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model +from autoware_smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model initial_error = [0.0, 0.03, 0.01, -0.01, 0.0, 0.0] save_dir = "test_python_sim" python_simulator.slalom_drive(save_dir=save_dir,use_trained_model=False,initial_error=initial_error) @@ -172,7 +172,7 @@ Here, `initial_error` is the initial error from the target trajectory, in the or and `save_dir` is the directory where the driving test results are saved. > [!NOTE] -> The value of `use_trained_model` given as the argument of `python_simulator.slalom_drive` takes precedence over the value of `trained_model_parameter:control_application:use_trained_model` in [trained_model_param.yaml](./smart_mpc_trajectory_follower/param/trained_model_param.yaml). +> The value of `use_trained_model` given as the argument of `python_simulator.slalom_drive` takes precedence over the value of `trained_model_parameter:control_application:use_trained_model` in [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml). Run the following commands to perform training using driving data of the nominal model. @@ -211,21 +211,21 @@ It can be seen that the lateral deviation has improved significantly. Here we have described wheel base, but the parameters that can be passed to the python simulator are as follows. -| Parameter | Type | Description | -| ------------------------ | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| steer_bias | float | steer bias [rad] | -| steer_rate_lim | float | steer rate limit [rad/s] | -| vel_rate_lim | float | acceleration limit [m/s^2] | -| wheel_base | float | wheel base [m] | -| steer_dead_band | float | steer dead band [rad] | -| adaptive_gear_ratio_coef | list[float] | List of floats of length 6 specifying information on speed-dependent gear ratios from tire angle to steering wheel angle. | -| acc_time_delay | float | acceleration time delay [s] | -| steer_time_delay | float | steer time delay [s] | -| acc_time_constant | float | acceleration time constant [s] | -| steer_time_constant | float | steer time constant [s] | -| accel_map_scale | float | Parameter that magnifies the corresponding distortion from acceleration input values to actual acceleration realizations.
Correspondence information is kept in `control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/accel_map.csv`. | -| acc_scaling | float | acceleration scaling | -| steer_scaling | float | steer scaling | +| Parameter | Type | Description | +| ------------------------ | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| steer_bias | float | steer bias [rad] | +| steer_rate_lim | float | steer rate limit [rad/s] | +| vel_rate_lim | float | acceleration limit [m/s^2] | +| wheel_base | float | wheel base [m] | +| steer_dead_band | float | steer dead band [rad] | +| adaptive_gear_ratio_coef | list[float] | List of floats of length 6 specifying information on speed-dependent gear ratios from tire angle to steering wheel angle. | +| acc_time_delay | float | acceleration time delay [s] | +| steer_time_delay | float | steer time delay [s] | +| acc_time_constant | float | acceleration time constant [s] | +| steer_time_constant | float | steer time constant [s] | +| accel_map_scale | float | Parameter that magnifies the corresponding distortion from acceleration input values to actual acceleration realizations.
Correspondence information is kept in `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/accel_map.csv`. | +| acc_scaling | float | acceleration scaling | +| steer_scaling | float | steer scaling | For example, to give the simulation side 0.01 [rad] of steer bias and 0.001 [rad] of steer dead band, edit the `sim_setting.json` as follows. @@ -237,13 +237,13 @@ For example, to give the simulation side 0.01 [rad] of steer bias and 0.001 [rad Here, we describe a method for testing adaptive performance by giving the simulation side a predefined range of model parameters while the control side is given constant model parameters. -First, to restore nominal model settings to default values, set the value of `nominal_parameter:vehicle_info:wheel_base` in [nominal_param.yaml](./smart_mpc_trajectory_follower/param/nominal_param.yaml) to 2.79, and run the following command: +First, to restore nominal model settings to default values, set the value of `nominal_parameter:vehicle_info:wheel_base` in [nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml) to 2.79, and run the following command: ```bash python3 -m smart_mpc_trajectory_follower.clear_pycache ``` -To run a driving experiment within the parameter change range set in [run_sim.py](./smart_mpc_trajectory_follower/python_simulator/run_sim.py), for example, move to `control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator` and run the following command: +To run a driving experiment within the parameter change range set in [run_sim.py](./autoware_smart_mpc_trajectory_follower/python_simulator/run_sim.py), for example, move to `control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator` and run the following command: ```bash python3 run_sim.py --param_name steer_bias @@ -270,11 +270,11 @@ In `run_sim.py`, the following parameters can be set: | USE_INTERCEPT | bool | When a polynomial regression including bias is performed, whether to use or discard the resulting bias information.
It is meaningful only if FIT_INTERCEPT is True.
If it is False, discard the bias in the polynomial regression in the hope that the NN model can remove the bias term, even if the polynomial regression is performed with the bias included. | > [!NOTE] -> When `run_sim.py` is run, the `use_trained_model_diff` set in `run_sim.py` takes precedence over the `trained_model_parameter:control_application:use_trained_model_diff` set in [trained_model_param.yaml](./smart_mpc_trajectory_follower/param/trained_model_param.yaml). +> When `run_sim.py` is run, the `use_trained_model_diff` set in `run_sim.py` takes precedence over the `trained_model_parameter:control_application:use_trained_model_diff` set in [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml). ## Change of nominal parameters and their reloading -The nominal parameters of vehicle model can be changed by editing the file [nominal_param.yaml](./smart_mpc_trajectory_follower/param/nominal_param.yaml). +The nominal parameters of vehicle model can be changed by editing the file [nominal_param.yaml](./autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml). After changing the nominal parameters, the cache must be deleted by running the following command: ```bash @@ -293,7 +293,7 @@ The nominal parameters include the following: ## Change of control parameters and their reloading -The control parameters can be changed by editing files [mpc_param.yaml](./smart_mpc_trajectory_follower/param/mpc_param.yaml) and [trained_model_param.yaml](./smart_mpc_trajectory_follower/param/trained_model_param.yaml). +The control parameters can be changed by editing files [mpc_param.yaml](./smart_mpc_trajectory_follower/param/mpc_param.yaml) and [trained_model_param.yaml](./autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml). Although it is possible to reflect parameter changes by restarting autoware, the following command allows us to do so without leaving autoware running: ```bash diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/.gitignore b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/.gitignore similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/.gitignore rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/.gitignore diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/__init__.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/__init__.py similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/__init__.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/__init__.py diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/clear_pycache.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/clear_pycache.py similarity index 88% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/clear_pycache.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/clear_pycache.py index fafcb5bdecf05..2458de3a80f99 100644 --- a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/clear_pycache.py +++ b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/clear_pycache.py @@ -16,10 +16,10 @@ from pathlib import Path import shutil -import smart_mpc_trajectory_follower +import autoware_smart_mpc_trajectory_follower if __name__ == "__main__": - package_dir = str(Path(smart_mpc_trajectory_follower.__file__).parent) + package_dir = str(Path(autoware_smart_mpc_trajectory_follower.__file__).parent) remove_dirs = [ package_dir + "/__pycache__", diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/param/mpc_param.yaml b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/param/mpc_param.yaml similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/param/mpc_param.yaml rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/param/mpc_param.yaml diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/param/nominal_param.yaml b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/param/nominal_param.yaml rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/param/trained_model_param.yaml b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/param/trained_model_param.yaml rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/.gitignore b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/.gitignore similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/.gitignore rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/.gitignore diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/accel_map.csv b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/accel_map.csv similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/accel_map.csv rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/accel_map.csv diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/plot_auto_test_result.ipynb b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/plot_auto_test_result.ipynb similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/plot_auto_test_result.ipynb rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/plot_auto_test_result.ipynb diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/python_simulator.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/python_simulator.py similarity index 99% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/python_simulator.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/python_simulator.py index d706c342f04ec..0eaa6ce1c0fbf 100644 --- a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/python_simulator.py +++ b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/python_simulator.py @@ -18,14 +18,14 @@ import datetime import os +from autoware_smart_mpc_trajectory_follower.scripts import drive_controller +from autoware_smart_mpc_trajectory_follower.scripts import drive_functions import matplotlib.pyplot as plt from numba import njit import numpy as np import pandas as pd import scipy.interpolate import simplejson as json -from smart_mpc_trajectory_follower.scripts import drive_controller -from smart_mpc_trajectory_follower.scripts import drive_functions print("\n\n### import python_simulator.py ###") diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/run_python_simulator.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/run_python_simulator.py similarity index 92% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/run_python_simulator.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/run_python_simulator.py index 6b477bb804ac9..68d8a9f64e73f 100644 --- a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/run_python_simulator.py +++ b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/run_python_simulator.py @@ -12,9 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +from autoware_smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model import numpy as np import python_simulator -from smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model initial_error = np.array( [0.001, 0.03, 0.01, -0.001, 0, 2 * python_simulator.measurement_steer_bias] diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/run_sim.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/run_sim.py similarity index 99% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/run_sim.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/run_sim.py index 3125719556559..d2bb4ea26f0a6 100644 --- a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/run_sim.py +++ b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/run_sim.py @@ -23,9 +23,9 @@ import traceback from typing import Dict +from autoware_smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model import numpy as np import python_simulator -from smart_mpc_trajectory_follower.training_and_data_check import train_drive_NN_model parser = argparse.ArgumentParser() parser.add_argument("--param_name", default=None) diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/slalom_course_data.csv b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/slalom_course_data.csv similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/python_simulator/slalom_course_data.csv rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/python_simulator/slalom_course_data.csv diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/.gitignore b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/.gitignore similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/.gitignore rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/.gitignore diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/__init__.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/__init__.py similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/__init__.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/__init__.py diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_GP.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_GP.py similarity index 98% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_GP.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_GP.py index e75eedcb4bf65..4d36afd3d4324 100644 --- a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_GP.py +++ b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_GP.py @@ -16,9 +16,9 @@ from functools import partial +from autoware_smart_mpc_trajectory_follower.scripts import drive_functions from numba import njit import numpy as np -from smart_mpc_trajectory_follower.scripts import drive_functions sqrt_mpc_time_step = np.sqrt(drive_functions.mpc_time_step) diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_NN.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_NN.py similarity index 98% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_NN.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_NN.py index f35789ee39fd3..f13aa07b0f795 100644 --- a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_NN.py +++ b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_NN.py @@ -13,9 +13,9 @@ # limitations under the License. +from autoware_smart_mpc_trajectory_follower.scripts import drive_functions +from autoware_smart_mpc_trajectory_follower.scripts import proxima_calc import numpy as np -from smart_mpc_trajectory_follower.scripts import drive_functions -from smart_mpc_trajectory_follower.scripts import proxima_calc import torch from torch import nn diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_controller.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_controller.py similarity index 99% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_controller.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_controller.py index b21fcf72da931..228b0c37c5e7b 100644 --- a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_controller.py +++ b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_controller.py @@ -21,14 +21,14 @@ import threading import time +from autoware_smart_mpc_trajectory_follower.scripts import drive_GP +from autoware_smart_mpc_trajectory_follower.scripts import drive_NN +from autoware_smart_mpc_trajectory_follower.scripts import drive_functions +from autoware_smart_mpc_trajectory_follower.scripts import drive_iLQR +from autoware_smart_mpc_trajectory_follower.scripts import drive_mppi import numpy as np import scipy.interpolate # type: ignore from sklearn.preprocessing import PolynomialFeatures -from smart_mpc_trajectory_follower.scripts import drive_GP -from smart_mpc_trajectory_follower.scripts import drive_NN -from smart_mpc_trajectory_follower.scripts import drive_functions -from smart_mpc_trajectory_follower.scripts import drive_iLQR -from smart_mpc_trajectory_follower.scripts import drive_mppi import torch ctrl_index_for_polynomial_reg = np.concatenate( diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_functions.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_functions.py similarity index 99% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_functions.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_functions.py index c11b5c886b49a..fb96e134f7746 100644 --- a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_functions.py +++ b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_functions.py @@ -31,7 +31,9 @@ with open(package_path_json, "r") as file: package_path = json.load(file) -mpc_param_path = package_path["path"] + "/smart_mpc_trajectory_follower/param/mpc_param.yaml" +mpc_param_path = ( + package_path["path"] + "/autoware_smart_mpc_trajectory_follower/param/mpc_param.yaml" +) with open(mpc_param_path, "r") as yml: mpc_param = yaml.safe_load(yml) @@ -101,7 +103,7 @@ cap_pred_error = np.array(mpc_param["mpc_parameter"]["preprocessing"]["cap_pred_error"]) nominal_param_path = ( - package_path["path"] + "/smart_mpc_trajectory_follower/param/nominal_param.yaml" + package_path["path"] + "/autoware_smart_mpc_trajectory_follower/param/nominal_param.yaml" ) with open(nominal_param_path, "r") as yml: nominal_param = yaml.safe_load(yml) @@ -172,7 +174,7 @@ mpc_param["mpc_parameter"]["preprocessing"]["sg_window_size_for_nominal_inputs"] ) trained_model_param_path = ( - package_path["path"] + "/smart_mpc_trajectory_follower/param/trained_model_param.yaml" + package_path["path"] + "/autoware_smart_mpc_trajectory_follower/param/trained_model_param.yaml" ) with open(trained_model_param_path, "r") as yml: trained_model_param = yaml.safe_load(yml) diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_iLQR.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_iLQR.py similarity index 99% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_iLQR.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_iLQR.py index 261a72e680778..2307586f23552 100644 --- a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_iLQR.py +++ b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_iLQR.py @@ -21,9 +21,9 @@ import time from typing import Callable +from autoware_smart_mpc_trajectory_follower.scripts import drive_functions from numba import njit import numpy as np -from smart_mpc_trajectory_follower.scripts import drive_functions index_cost = np.concatenate( ( diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_mppi.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_mppi.py similarity index 98% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_mppi.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_mppi.py index ca6e6f15f42ef..5e88c79172097 100644 --- a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/drive_mppi.py +++ b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/drive_mppi.py @@ -16,9 +16,9 @@ from typing import Callable +from autoware_smart_mpc_trajectory_follower.scripts import drive_functions from numba import njit import numpy as np -from smart_mpc_trajectory_follower.scripts import drive_functions index_cost = np.concatenate( ( diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/proxima_calc.cpp b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/proxima_calc.cpp similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/proxima_calc.cpp rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/proxima_calc.cpp diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/pympc_trajectory_follower.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/pympc_trajectory_follower.py similarity index 99% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/pympc_trajectory_follower.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/pympc_trajectory_follower.py index 992a5fd53a10c..78a120fe601f2 100755 --- a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/scripts/pympc_trajectory_follower.py +++ b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/scripts/pympc_trajectory_follower.py @@ -22,6 +22,8 @@ from autoware_control_msgs.msg import Control from autoware_planning_msgs.msg import Trajectory from autoware_planning_msgs.msg import TrajectoryPoint +from autoware_smart_mpc_trajectory_follower.scripts import drive_controller +from autoware_smart_mpc_trajectory_follower.scripts import drive_functions from autoware_vehicle_msgs.msg import SteeringReport from builtin_interfaces.msg import Duration from geometry_msgs.msg import AccelWithCovarianceStamped @@ -34,8 +36,6 @@ import scipy.interpolate from scipy.spatial.transform import Rotation as R from scipy.spatial.transform import Slerp -from smart_mpc_trajectory_follower.scripts import drive_controller -from smart_mpc_trajectory_follower.scripts import drive_functions from std_msgs.msg import String from tier4_debug_msgs.msg import BoolStamped from tier4_debug_msgs.msg import Float32MultiArrayStamped diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/.gitignore b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/.gitignore similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/.gitignore rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/.gitignore diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/__init__.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/__init__.py similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/__init__.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/__init__.py diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/add_training_data_from_csv.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/add_training_data_from_csv.py similarity index 98% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/add_training_data_from_csv.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/add_training_data_from_csv.py index 3f6ef7a9f78d1..5338f3cbaddce 100644 --- a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/add_training_data_from_csv.py +++ b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/add_training_data_from_csv.py @@ -23,11 +23,11 @@ import os from pathlib import Path +from autoware_smart_mpc_trajectory_follower.scripts import drive_functions import numpy as np import scipy.interpolate from scipy.ndimage import gaussian_filter from scipy.spatial.transform import Rotation -from smart_mpc_trajectory_follower.scripts import drive_functions def data_smoothing(data: np.ndarray, sigma: float) -> np.ndarray: @@ -76,7 +76,7 @@ def transform_rosbag_to_csv(self, dir_name: str, delete_csv_first: bool = True) os.system( "cp " + package_path["path"] - + "/smart_mpc_trajectory_follower/training_and_data_check/rosbag2.bash " + + "/autoware_smart_mpc_trajectory_follower/training_and_data_check/rosbag2.bash " + dir_name ) os.chdir(dir_name) diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/data_checker.ipynb b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/data_checker.ipynb similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/data_checker.ipynb rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/data_checker.ipynb diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/execute_train_drive_NN_model.ipynb b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/execute_train_drive_NN_model.ipynb similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/execute_train_drive_NN_model.ipynb rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/execute_train_drive_NN_model.ipynb diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/rosbag2.bash b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/rosbag2.bash similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/rosbag2.bash rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/rosbag2.bash diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/train_drive_GP_model.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/train_drive_GP_model.py similarity index 100% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/train_drive_GP_model.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/train_drive_GP_model.py diff --git a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/train_drive_NN_model.py b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/train_drive_NN_model.py similarity index 99% rename from control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/train_drive_NN_model.py rename to control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/train_drive_NN_model.py index 269b577f83c25..449ddda45f460 100644 --- a/control/smart_mpc_trajectory_follower/smart_mpc_trajectory_follower/training_and_data_check/train_drive_NN_model.py +++ b/control/autoware_smart_mpc_trajectory_follower/autoware_smart_mpc_trajectory_follower/training_and_data_check/train_drive_NN_model.py @@ -15,13 +15,15 @@ # cspell: ignore optim savez suptitle """Class for training neural nets from driving data.""" +from autoware_smart_mpc_trajectory_follower.scripts import drive_NN +from autoware_smart_mpc_trajectory_follower.scripts import drive_functions +from autoware_smart_mpc_trajectory_follower.training_and_data_check import ( + add_training_data_from_csv, +) import matplotlib.pyplot as plt import numpy as np from sklearn import linear_model from sklearn.preprocessing import PolynomialFeatures -from smart_mpc_trajectory_follower.scripts import drive_NN -from smart_mpc_trajectory_follower.scripts import drive_functions -from smart_mpc_trajectory_follower.training_and_data_check import add_training_data_from_csv import torch from torch import nn from torch.utils.data import DataLoader diff --git a/control/smart_mpc_trajectory_follower/images/autoware_smart_mpc.png b/control/autoware_smart_mpc_trajectory_follower/images/autoware_smart_mpc.png similarity index 100% rename from control/smart_mpc_trajectory_follower/images/autoware_smart_mpc.png rename to control/autoware_smart_mpc_trajectory_follower/images/autoware_smart_mpc.png diff --git a/control/smart_mpc_trajectory_follower/images/lateral_error_nominal_model.png b/control/autoware_smart_mpc_trajectory_follower/images/lateral_error_nominal_model.png similarity index 100% rename from control/smart_mpc_trajectory_follower/images/lateral_error_nominal_model.png rename to control/autoware_smart_mpc_trajectory_follower/images/lateral_error_nominal_model.png diff --git a/control/smart_mpc_trajectory_follower/images/lateral_error_trained_model.png b/control/autoware_smart_mpc_trajectory_follower/images/lateral_error_trained_model.png similarity index 100% rename from control/smart_mpc_trajectory_follower/images/lateral_error_trained_model.png rename to control/autoware_smart_mpc_trajectory_follower/images/lateral_error_trained_model.png diff --git a/control/smart_mpc_trajectory_follower/images/proxima_logo.png b/control/autoware_smart_mpc_trajectory_follower/images/proxima_logo.png similarity index 100% rename from control/smart_mpc_trajectory_follower/images/proxima_logo.png rename to control/autoware_smart_mpc_trajectory_follower/images/proxima_logo.png diff --git a/control/smart_mpc_trajectory_follower/images/python_sim_lateral_error_nominal_model.png b/control/autoware_smart_mpc_trajectory_follower/images/python_sim_lateral_error_nominal_model.png similarity index 100% rename from control/smart_mpc_trajectory_follower/images/python_sim_lateral_error_nominal_model.png rename to control/autoware_smart_mpc_trajectory_follower/images/python_sim_lateral_error_nominal_model.png diff --git a/control/smart_mpc_trajectory_follower/images/python_sim_lateral_error_trained_model.png b/control/autoware_smart_mpc_trajectory_follower/images/python_sim_lateral_error_trained_model.png similarity index 100% rename from control/smart_mpc_trajectory_follower/images/python_sim_lateral_error_trained_model.png rename to control/autoware_smart_mpc_trajectory_follower/images/python_sim_lateral_error_trained_model.png diff --git a/control/smart_mpc_trajectory_follower/images/test_route.png b/control/autoware_smart_mpc_trajectory_follower/images/test_route.png similarity index 100% rename from control/smart_mpc_trajectory_follower/images/test_route.png rename to control/autoware_smart_mpc_trajectory_follower/images/test_route.png diff --git a/control/smart_mpc_trajectory_follower/package.xml b/control/autoware_smart_mpc_trajectory_follower/package.xml similarity index 96% rename from control/smart_mpc_trajectory_follower/package.xml rename to control/autoware_smart_mpc_trajectory_follower/package.xml index b25a7e2ce8dd6..a05f06cd865ff 100644 --- a/control/smart_mpc_trajectory_follower/package.xml +++ b/control/autoware_smart_mpc_trajectory_follower/package.xml @@ -1,7 +1,7 @@ - smart_mpc_trajectory_follower + autoware_smart_mpc_trajectory_follower 1.0.0 Nodes to follow a trajectory by generating control commands using smart mpc diff --git a/control/smart_mpc_trajectory_follower/setup.py b/control/autoware_smart_mpc_trajectory_follower/setup.py similarity index 60% rename from control/smart_mpc_trajectory_follower/setup.py rename to control/autoware_smart_mpc_trajectory_follower/setup.py index 4dca4d72929a8..fee1d04e826c0 100644 --- a/control/smart_mpc_trajectory_follower/setup.py +++ b/control/autoware_smart_mpc_trajectory_follower/setup.py @@ -13,25 +13,25 @@ os.system("pip3 install torch") package_path = {} package_path["path"] = str(Path(__file__).parent) -with open("smart_mpc_trajectory_follower/package_path.json", "w") as f: +with open("autoware_smart_mpc_trajectory_follower/package_path.json", "w") as f: json.dump(package_path, f) build_cpp_command = "g++ -Ofast -Wall -shared -std=c++11 -fPIC $(python3 -m pybind11 --includes) " -build_cpp_command += "smart_mpc_trajectory_follower/scripts/proxima_calc.cpp " -build_cpp_command += ( - "-o smart_mpc_trajectory_follower/scripts/proxima_calc$(python3-config --extension-suffix) " -) +build_cpp_command += "autoware_smart_mpc_trajectory_follower/scripts/proxima_calc.cpp " +build_cpp_command += "-o autoware_smart_mpc_trajectory_follower/scripts/proxima_calc$(python3-config --extension-suffix) " build_cpp_command += "-lrt -I/usr/include/eigen3" os.system(build_cpp_command) so_path = ( "scripts/" - + glob.glob("smart_mpc_trajectory_follower/scripts/proxima_calc.*.so")[0].split("/")[-1] + + glob.glob("autoware_smart_mpc_trajectory_follower/scripts/proxima_calc.*.so")[0].split("/")[ + -1 + ] ) setup( name="smart_mpc_trajectory_follower", version="1.0.0", packages=find_packages(), package_data={ - "smart_mpc_trajectory_follower": ["package_path.json", so_path], + "autoware_smart_mpc_trajectory_follower": ["package_path.json", so_path], }, ) diff --git a/launch/tier4_control_launch/launch/control.launch.py b/launch/tier4_control_launch/launch/control.launch.py index 239a65f8260bf..d9e6e3e6757d6 100644 --- a/launch/tier4_control_launch/launch/control.launch.py +++ b/launch/tier4_control_launch/launch/control.launch.py @@ -432,7 +432,7 @@ def launch_setup(context, *args, **kwargs): ) smart_mpc_trajectory_follower = Node( - package="smart_mpc_trajectory_follower", + package="autoware_smart_mpc_trajectory_follower", executable="pympc_trajectory_follower.py", name="pympc_trajectory_follower", ) From b1749afb95dca78db2537f682f4bd971cc74a933 Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Fri, 7 Jun 2024 22:18:06 +0900 Subject: [PATCH 028/142] feat(autonomous_emergency_braking): prefix package and namespace with autoware_ (#7294) * change package name Signed-off-by: Daniel Sanchez * add the prefix Signed-off-by: Daniel Sanchez * change option Signed-off-by: Daniel Sanchez * change back node name Signed-off-by: Daniel Sanchez * eliminate some prefixes that are not required Signed-off-by: Daniel Sanchez * fix node name Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez --- .github/CODEOWNERS | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/autonomous_emergency_braking.param.yaml | 0 .../image/obstacle_filtering_1.drawio.svg | 0 .../image/obstacle_filtering_2.drawio.svg | 0 .../image/range.drawio.svg | 0 .../image/rss_check.drawio.svg | 0 .../include/autoware_autonomous_emergency_braking}/node.hpp | 6 +++--- .../autoware_autonomous_emergency_braking.launch.xml} | 4 ++-- .../package.xml | 2 +- .../src/node.cpp | 2 +- launch/tier4_control_launch/launch/control.launch.py | 2 +- .../config/diagnostic_aggregator/control.param.yaml | 2 +- .../config/system_error_monitor.param.yaml | 4 ++-- .../system_error_monitor.planning_simulation.param.yaml | 4 ++-- 16 files changed, 15 insertions(+), 15 deletions(-) rename control/{autonomous_emergency_braking => autoware_autonomous_emergency_braking}/CMakeLists.txt (92%) rename control/{autonomous_emergency_braking => autoware_autonomous_emergency_braking}/README.md (100%) rename control/{autonomous_emergency_braking => autoware_autonomous_emergency_braking}/config/autonomous_emergency_braking.param.yaml (100%) rename control/{autonomous_emergency_braking => autoware_autonomous_emergency_braking}/image/obstacle_filtering_1.drawio.svg (100%) rename control/{autonomous_emergency_braking => autoware_autonomous_emergency_braking}/image/obstacle_filtering_2.drawio.svg (100%) rename control/{autonomous_emergency_braking => autoware_autonomous_emergency_braking}/image/range.drawio.svg (100%) rename control/{autonomous_emergency_braking => autoware_autonomous_emergency_braking}/image/rss_check.drawio.svg (100%) rename control/{autonomous_emergency_braking/include/autonomous_emergency_braking => autoware_autonomous_emergency_braking/include/autoware_autonomous_emergency_braking}/node.hpp (98%) rename control/{autonomous_emergency_braking/launch/autonomous_emergency_braking.launch.xml => autoware_autonomous_emergency_braking/launch/autoware_autonomous_emergency_braking.launch.xml} (74%) rename control/{autonomous_emergency_braking => autoware_autonomous_emergency_braking}/package.xml (96%) rename control/{autonomous_emergency_braking => autoware_autonomous_emergency_braking}/src/node.cpp (99%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index cbab68f91f512..be202d123cd62 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -44,7 +44,7 @@ common/time_utils/** christopherj.ho@gmail.com shumpei.wakabayashi@tier4.jp tomo common/traffic_light_recognition_marker_publisher/** shumpei.wakabayashi@tier4.jp takeshi.miura@tier4.jp tomoya.kimura@tier4.jp common/traffic_light_utils/** kotaro.uetake@tier4.jp satoshi.ota@tier4.jp shunsuke.miura@tier4.jp common/tvm_utility/** ambroise.vincent@arm.com xinyu.wang@tier4.jp -control/autonomous_emergency_braking/** daniel.sanchez@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp +control/autoware_autonomous_emergency_braking/** daniel.sanchez@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp control/control_performance_analysis/** berkay@leodrive.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/control_validator/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/external_cmd_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp diff --git a/control/autonomous_emergency_braking/CMakeLists.txt b/control/autoware_autonomous_emergency_braking/CMakeLists.txt similarity index 92% rename from control/autonomous_emergency_braking/CMakeLists.txt rename to control/autoware_autonomous_emergency_braking/CMakeLists.txt index 53a629fafa0cc..7f38e4387b452 100644 --- a/control/autonomous_emergency_braking/CMakeLists.txt +++ b/control/autoware_autonomous_emergency_braking/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(autonomous_emergency_braking) +project(autoware_autonomous_emergency_braking) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/control/autonomous_emergency_braking/README.md b/control/autoware_autonomous_emergency_braking/README.md similarity index 100% rename from control/autonomous_emergency_braking/README.md rename to control/autoware_autonomous_emergency_braking/README.md diff --git a/control/autonomous_emergency_braking/config/autonomous_emergency_braking.param.yaml b/control/autoware_autonomous_emergency_braking/config/autonomous_emergency_braking.param.yaml similarity index 100% rename from control/autonomous_emergency_braking/config/autonomous_emergency_braking.param.yaml rename to control/autoware_autonomous_emergency_braking/config/autonomous_emergency_braking.param.yaml diff --git a/control/autonomous_emergency_braking/image/obstacle_filtering_1.drawio.svg b/control/autoware_autonomous_emergency_braking/image/obstacle_filtering_1.drawio.svg similarity index 100% rename from control/autonomous_emergency_braking/image/obstacle_filtering_1.drawio.svg rename to control/autoware_autonomous_emergency_braking/image/obstacle_filtering_1.drawio.svg diff --git a/control/autonomous_emergency_braking/image/obstacle_filtering_2.drawio.svg b/control/autoware_autonomous_emergency_braking/image/obstacle_filtering_2.drawio.svg similarity index 100% rename from control/autonomous_emergency_braking/image/obstacle_filtering_2.drawio.svg rename to control/autoware_autonomous_emergency_braking/image/obstacle_filtering_2.drawio.svg diff --git a/control/autonomous_emergency_braking/image/range.drawio.svg b/control/autoware_autonomous_emergency_braking/image/range.drawio.svg similarity index 100% rename from control/autonomous_emergency_braking/image/range.drawio.svg rename to control/autoware_autonomous_emergency_braking/image/range.drawio.svg diff --git a/control/autonomous_emergency_braking/image/rss_check.drawio.svg b/control/autoware_autonomous_emergency_braking/image/rss_check.drawio.svg similarity index 100% rename from control/autonomous_emergency_braking/image/rss_check.drawio.svg rename to control/autoware_autonomous_emergency_braking/image/rss_check.drawio.svg diff --git a/control/autonomous_emergency_braking/include/autonomous_emergency_braking/node.hpp b/control/autoware_autonomous_emergency_braking/include/autoware_autonomous_emergency_braking/node.hpp similarity index 98% rename from control/autonomous_emergency_braking/include/autonomous_emergency_braking/node.hpp rename to control/autoware_autonomous_emergency_braking/include/autoware_autonomous_emergency_braking/node.hpp index 81ab2ecff790b..b87f421de7c8c 100644 --- a/control/autonomous_emergency_braking/include/autonomous_emergency_braking/node.hpp +++ b/control/autoware_autonomous_emergency_braking/include/autoware_autonomous_emergency_braking/node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef AUTONOMOUS_EMERGENCY_BRAKING__NODE_HPP_ -#define AUTONOMOUS_EMERGENCY_BRAKING__NODE_HPP_ +#ifndef AUTOWARE_AUTONOMOUS_EMERGENCY_BRAKING__NODE_HPP_ +#define AUTOWARE_AUTONOMOUS_EMERGENCY_BRAKING__NODE_HPP_ #include #include @@ -340,4 +340,4 @@ class AEB : public rclcpp::Node }; } // namespace autoware::motion::control::autonomous_emergency_braking -#endif // AUTONOMOUS_EMERGENCY_BRAKING__NODE_HPP_ +#endif // AUTOWARE_AUTONOMOUS_EMERGENCY_BRAKING__NODE_HPP_ diff --git a/control/autonomous_emergency_braking/launch/autonomous_emergency_braking.launch.xml b/control/autoware_autonomous_emergency_braking/launch/autoware_autonomous_emergency_braking.launch.xml similarity index 74% rename from control/autonomous_emergency_braking/launch/autonomous_emergency_braking.launch.xml rename to control/autoware_autonomous_emergency_braking/launch/autoware_autonomous_emergency_braking.launch.xml index cf6640ec6be52..75b1a9dcf822d 100644 --- a/control/autonomous_emergency_braking/launch/autonomous_emergency_braking.launch.xml +++ b/control/autoware_autonomous_emergency_braking/launch/autoware_autonomous_emergency_braking.launch.xml @@ -1,12 +1,12 @@ - + - + diff --git a/control/autonomous_emergency_braking/package.xml b/control/autoware_autonomous_emergency_braking/package.xml similarity index 96% rename from control/autonomous_emergency_braking/package.xml rename to control/autoware_autonomous_emergency_braking/package.xml index bf27e6b7e1575..221fc2c000826 100644 --- a/control/autonomous_emergency_braking/package.xml +++ b/control/autoware_autonomous_emergency_braking/package.xml @@ -1,7 +1,7 @@ - autonomous_emergency_braking + autoware_autonomous_emergency_braking 0.1.0 Autonomous Emergency Braking package as a ROS 2 node Takamasa Horibe diff --git a/control/autonomous_emergency_braking/src/node.cpp b/control/autoware_autonomous_emergency_braking/src/node.cpp similarity index 99% rename from control/autonomous_emergency_braking/src/node.cpp rename to control/autoware_autonomous_emergency_braking/src/node.cpp index 71eb92a4e95fb..3ec8cc68df9b1 100644 --- a/control/autonomous_emergency_braking/src/node.cpp +++ b/control/autoware_autonomous_emergency_braking/src/node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autonomous_emergency_braking/node.hpp" +#include "autoware_autonomous_emergency_braking/node.hpp" #include #include diff --git a/launch/tier4_control_launch/launch/control.launch.py b/launch/tier4_control_launch/launch/control.launch.py index d9e6e3e6757d6..a4f896048739f 100644 --- a/launch/tier4_control_launch/launch/control.launch.py +++ b/launch/tier4_control_launch/launch/control.launch.py @@ -139,7 +139,7 @@ def launch_setup(context, *args, **kwargs): # autonomous emergency braking autonomous_emergency_braking = ComposableNode( - package="autonomous_emergency_braking", + package="autoware_autonomous_emergency_braking", plugin="autoware::motion::control::autonomous_emergency_braking::AEB", name="autonomous_emergency_braking", remappings=[ diff --git a/system/system_error_monitor/config/diagnostic_aggregator/control.param.yaml b/system/system_error_monitor/config/diagnostic_aggregator/control.param.yaml index a1ebddee73e2a..3c8a5c77b2e44 100644 --- a/system/system_error_monitor/config/diagnostic_aggregator/control.param.yaml +++ b/system/system_error_monitor/config/diagnostic_aggregator/control.param.yaml @@ -6,7 +6,7 @@ analyzers: autonomous_emergency_braking: type: diagnostic_aggregator/AnalyzerGroup - path: autonomous_emergency_braking + path: autoware_autonomous_emergency_braking analyzers: performance_monitoring: type: diagnostic_aggregator/AnalyzerGroup diff --git a/system/system_error_monitor/config/system_error_monitor.param.yaml b/system/system_error_monitor/config/system_error_monitor.param.yaml index d3fc221bac768..63fdbd0081af6 100644 --- a/system/system_error_monitor/config/system_error_monitor.param.yaml +++ b/system/system_error_monitor/config/system_error_monitor.param.yaml @@ -20,7 +20,7 @@ /autoware/control/autonomous_driving/node_alive_monitoring: default /autoware/control/autonomous_driving/performance_monitoring/lane_departure: default /autoware/control/control_command_gate/node_alive_monitoring: default - /autoware/control/autonomous_emergency_braking/performance_monitoring/emergency_stop: { sf_at: "none", lf_at: "warn", spf_at: "error", auto_recovery: "false"} + /autoware/control/autoware_autonomous_emergency_braking/performance_monitoring/emergency_stop: { sf_at: "none", lf_at: "warn", spf_at: "error", auto_recovery: "false"} /autoware/localization/node_alive_monitoring: default /autoware/localization/performance_monitoring/scan_matching_status: { sf_at: "warn", lf_at: "none", spf_at: "none" } @@ -45,7 +45,7 @@ external_control: /autoware/control/control_command_gate/node_alive_monitoring: default - /autoware/control/autonomous_emergency_braking/performance_monitoring/emergency_stop: { sf_at: "none", lf_at: "warn", spf_at: "error", auto_recovery: "false"} + /autoware/control/autoware_autonomous_emergency_braking/performance_monitoring/emergency_stop: { sf_at: "none", lf_at: "warn", spf_at: "error", auto_recovery: "false"} /autoware/control/external_control/external_command_selector/node_alive_monitoring: default /autoware/system/node_alive_monitoring: default diff --git a/system/system_error_monitor/config/system_error_monitor.planning_simulation.param.yaml b/system/system_error_monitor/config/system_error_monitor.planning_simulation.param.yaml index 43e8c56353a36..c9ab89a8fce96 100644 --- a/system/system_error_monitor/config/system_error_monitor.planning_simulation.param.yaml +++ b/system/system_error_monitor/config/system_error_monitor.planning_simulation.param.yaml @@ -20,7 +20,7 @@ /autoware/control/autonomous_driving/node_alive_monitoring: default /autoware/control/autonomous_driving/performance_monitoring/lane_departure: default /autoware/control/control_command_gate/node_alive_monitoring: default - /autoware/control/autonomous_emergency_braking/performance_monitoring/emergency_stop: { sf_at: "none", lf_at: "warn", spf_at: "error", auto_recovery: "false"} + /autoware/control/autoware_autonomous_emergency_braking/performance_monitoring/emergency_stop: { sf_at: "none", lf_at: "warn", spf_at: "error", auto_recovery: "false"} /autoware/localization/node_alive_monitoring: default # /autoware/localization/performance_monitoring/scan_matching_status: { sf_at: "warn", lf_at: "none", spf_at: "none" } @@ -46,7 +46,7 @@ external_control: /autoware/control/control_command_gate/node_alive_monitoring: default - /autoware/control/autonomous_emergency_braking/performance_monitoring/emergency_stop: { sf_at: "none", lf_at: "warn", spf_at: "error", auto_recovery: "false"} + /autoware/control/autoware_autonomous_emergency_braking/performance_monitoring/emergency_stop: { sf_at: "none", lf_at: "warn", spf_at: "error", auto_recovery: "false"} /autoware/control/external_control/external_command_selector/node_alive_monitoring: default /autoware/system/node_alive_monitoring: default From f93e5b3e671d865662dafa14bc2a585c1cecf47b Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Fri, 7 Jun 2024 22:54:15 +0900 Subject: [PATCH 029/142] refactor(rtc_interface)!: prefix package and namespace with autoware (#7321) refactor(rtc_interface): add autoware prefix Signed-off-by: Fumiya Watanabe --- planning/.pages | 2 +- .../package.xml | 2 +- .../interface/scene_module_interface.hpp | 4 ++-- .../package.xml | 2 +- .../package.xml | 2 +- .../package.xml | 2 +- .../package.xml | 2 +- .../scene_module_interface.hpp | 4 ++-- .../package.xml | 2 +- .../CMakeLists.txt | 4 ++-- .../README.md | 18 +++++++++--------- .../autoware_rtc_interface}/rtc_interface.hpp | 10 +++++----- .../package.xml | 4 ++-- .../src/rtc_interface.cpp | 6 +++--- .../package.xml | 2 +- .../package.xml | 2 +- .../package.xml | 2 +- 17 files changed, 35 insertions(+), 35 deletions(-) rename planning/{rtc_interface => autoware_rtc_interface}/CMakeLists.txt (85%) rename planning/{rtc_interface => autoware_rtc_interface}/README.md (79%) rename planning/{rtc_interface/include/rtc_interface => autoware_rtc_interface/include/autoware_rtc_interface}/rtc_interface.hpp (94%) rename planning/{rtc_interface => autoware_rtc_interface}/package.xml (88%) rename planning/{rtc_interface => autoware_rtc_interface}/src/rtc_interface.cpp (98%) diff --git a/planning/.pages b/planning/.pages index 6e3c6d5d49104..2decfad30e0da 100644 --- a/planning/.pages +++ b/planning/.pages @@ -77,7 +77,7 @@ nav: - 'External Velocity Limit Selector': planning/autoware_external_velocity_limit_selector - 'Objects of Interest Marker Interface': planning/objects_of_interest_marker_interface - 'Route Handler': planning/route_handler - - 'RTC Interface': planning/rtc_interface + - 'RTC Interface': planning/autoware_rtc_interface - 'Additional Tools': - 'Remaining Distance Time Calculator': planning/autoware_remaining_distance_time_calculator - 'RTC Replayer': planning/rtc_replayer diff --git a/planning/autoware_behavior_path_external_request_lane_change_module/package.xml b/planning/autoware_behavior_path_external_request_lane_change_module/package.xml index 26b78f5cf8cf1..9410be5a0011c 100644 --- a/planning/autoware_behavior_path_external_request_lane_change_module/package.xml +++ b/planning/autoware_behavior_path_external_request_lane_change_module/package.xml @@ -19,12 +19,12 @@ eigen3_cmake_module autoware_behavior_path_planner_common + autoware_rtc_interface behavior_path_lane_change_module behavior_path_planner motion_utils pluginlib rclcpp - rtc_interface tier4_autoware_utils tier4_planning_msgs visualization_msgs diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/interface/scene_module_interface.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/interface/scene_module_interface.hpp index 97f249e0e7d6e..ebbb795a699b5 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/interface/scene_module_interface.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/interface/scene_module_interface.hpp @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -29,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -56,11 +56,11 @@ namespace behavior_path_planner { +using autoware::rtc_interface::RTCInterface; using autoware_adapi_v1_msgs::msg::PlanningBehavior; using autoware_adapi_v1_msgs::msg::SteeringFactor; using objects_of_interest_marker_interface::ColorName; using objects_of_interest_marker_interface::ObjectsOfInterestMarkerInterface; -using rtc_interface::RTCInterface; using steering_factor_interface::SteeringFactorInterface; using tier4_autoware_utils::calcOffsetPose; using tier4_autoware_utils::generateUUID; diff --git a/planning/autoware_behavior_path_planner_common/package.xml b/planning/autoware_behavior_path_planner_common/package.xml index 24d369e475e61..b6fb6a352e91e 100644 --- a/planning/autoware_behavior_path_planner_common/package.xml +++ b/planning/autoware_behavior_path_planner_common/package.xml @@ -46,6 +46,7 @@ autoware_lane_departure_checker autoware_perception_msgs autoware_planning_msgs + autoware_rtc_interface freespace_planning_algorithms geometry_msgs interpolation @@ -56,7 +57,6 @@ objects_of_interest_marker_interface rclcpp route_handler - rtc_interface tf2 tier4_autoware_utils tier4_planning_msgs diff --git a/planning/autoware_behavior_path_start_planner_module/package.xml b/planning/autoware_behavior_path_start_planner_module/package.xml index 8504241c908ce..e4d6de4324bfe 100644 --- a/planning/autoware_behavior_path_start_planner_module/package.xml +++ b/planning/autoware_behavior_path_start_planner_module/package.xml @@ -21,11 +21,11 @@ eigen3_cmake_module autoware_behavior_path_planner_common + autoware_rtc_interface behavior_path_planner motion_utils pluginlib rclcpp - rtc_interface tier4_autoware_utils tier4_planning_msgs visualization_msgs diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml b/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml index a36a5c73729cb..e3699306df1f3 100644 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml +++ b/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml @@ -23,6 +23,7 @@ autoware_behavior_path_planner_common autoware_perception_msgs + autoware_rtc_interface behavior_path_planner geometry_msgs lanelet2_extension @@ -32,7 +33,6 @@ pluginlib rclcpp route_handler - rtc_interface sensor_msgs signal_processing tf2 diff --git a/planning/autoware_behavior_velocity_intersection_module/package.xml b/planning/autoware_behavior_velocity_intersection_module/package.xml index 401e53586c649..0655867951ed8 100644 --- a/planning/autoware_behavior_velocity_intersection_module/package.xml +++ b/planning/autoware_behavior_velocity_intersection_module/package.xml @@ -21,6 +21,7 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_rtc_interface fmt geometry_msgs interpolation @@ -32,7 +33,6 @@ pluginlib rclcpp route_handler - rtc_interface tf2_geometry_msgs tier4_autoware_utils tier4_planning_msgs diff --git a/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/scene_module_interface.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/scene_module_interface.hpp index 53b6e064d73b4..a97346297c9ac 100644 --- a/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/scene_module_interface.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/scene_module_interface.hpp @@ -16,11 +16,11 @@ #define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__SCENE_MODULE_INTERFACE_HPP_ #include +#include #include #include #include #include -#include #include #include @@ -48,12 +48,12 @@ namespace autoware::behavior_velocity_planner { +using autoware::rtc_interface::RTCInterface; using builtin_interfaces::msg::Time; using motion_utils::PlanningBehavior; using motion_utils::VelocityFactor; using objects_of_interest_marker_interface::ColorName; using objects_of_interest_marker_interface::ObjectsOfInterestMarkerInterface; -using rtc_interface::RTCInterface; using tier4_autoware_utils::DebugPublisher; using tier4_autoware_utils::getOrDeclareParameter; using tier4_debug_msgs::msg::Float64Stamped; diff --git a/planning/autoware_behavior_velocity_planner_common/package.xml b/planning/autoware_behavior_velocity_planner_common/package.xml index 524387034e4b6..7ab991a247a63 100644 --- a/planning/autoware_behavior_velocity_planner_common/package.xml +++ b/planning/autoware_behavior_velocity_planner_common/package.xml @@ -23,6 +23,7 @@ autoware_map_msgs autoware_perception_msgs autoware_planning_msgs + autoware_rtc_interface autoware_velocity_smoother diagnostic_msgs eigen @@ -36,7 +37,6 @@ rclcpp rclcpp_components route_handler - rtc_interface sensor_msgs tf2 tf2_eigen diff --git a/planning/rtc_interface/CMakeLists.txt b/planning/autoware_rtc_interface/CMakeLists.txt similarity index 85% rename from planning/rtc_interface/CMakeLists.txt rename to planning/autoware_rtc_interface/CMakeLists.txt index fda6025b84e86..cd36121e6aee8 100644 --- a/planning/rtc_interface/CMakeLists.txt +++ b/planning/autoware_rtc_interface/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) -project(rtc_interface) +project(autoware_rtc_interface) ### Compile options if(NOT CMAKE_CXX_STANDARD) @@ -12,7 +12,7 @@ endif() find_package(ament_cmake_auto REQUIRED) ament_auto_find_build_dependencies() -ament_auto_add_library(rtc_interface SHARED +ament_auto_add_library(autoware_rtc_interface SHARED src/rtc_interface.cpp ) diff --git a/planning/rtc_interface/README.md b/planning/autoware_rtc_interface/README.md similarity index 79% rename from planning/rtc_interface/README.md rename to planning/autoware_rtc_interface/README.md index 7f8f73edcc6b2..19d200592bcf3 100644 --- a/planning/rtc_interface/README.md +++ b/planning/autoware_rtc_interface/README.md @@ -10,7 +10,7 @@ RTC Interface is an interface to publish the decision status of behavior plannin ```c++ // Generate instance (in this example, "intersection" is selected) -rtc_interface::RTCInterface rtc_interface(node, "intersection"); +autoware::rtc_interface::RTCInterface rtc_interface(node, "intersection"); // Generate UUID const unique_identifier_msgs::msg::UUID uuid = generateUUID(getModuleId()); @@ -51,12 +51,12 @@ rtc_interface.removeCooperateStatus(uuid); ### RTCInterface (Constructor) ```c++ -rtc_interface::RTCInterface(rclcpp::Node & node, const std::string & name); +autoware::rtc_interface::RTCInterface(rclcpp::Node & node, const std::string & name); ``` #### Description -A constructor for `rtc_interface::RTCInterface`. +A constructor for `autoware::rtc_interface::RTCInterface`. #### Input @@ -72,7 +72,7 @@ An instance of `RTCInterface` ### publishCooperateStatus ```c++ -rtc_interface::publishCooperateStatus(const rclcpp::Time & stamp) +autoware::rtc_interface::publishCooperateStatus(const rclcpp::Time & stamp) ``` #### Description @@ -90,7 +90,7 @@ Nothing ### updateCooperateStatus ```c++ -rtc_interface::updateCooperateStatus(const unique_identifier_msgs::msg::UUID & uuid, const bool safe, const double start_distance, const double finish_distance, const rclcpp::Time & stamp) +autoware::rtc_interface::updateCooperateStatus(const unique_identifier_msgs::msg::UUID & uuid, const bool safe, const double start_distance, const double finish_distance, const rclcpp::Time & stamp) ``` #### Description @@ -113,7 +113,7 @@ Nothing ### removeCooperateStatus ```c++ -rtc_interface::removeCooperateStatus(const unique_identifier_msgs::msg::UUID & uuid) +autoware::rtc_interface::removeCooperateStatus(const unique_identifier_msgs::msg::UUID & uuid) ``` #### Description @@ -131,7 +131,7 @@ Nothing ### clearCooperateStatus ```c++ -rtc_interface::clearCooperateStatus() +autoware::rtc_interface::clearCooperateStatus() ``` #### Description @@ -149,7 +149,7 @@ Nothing ### isActivated ```c++ -rtc_interface::isActivated(const unique_identifier_msgs::msg::UUID & uuid) +autoware::rtc_interface::isActivated(const unique_identifier_msgs::msg::UUID & uuid) ``` #### Description @@ -169,7 +169,7 @@ If not, return `false`. ### isRegistered ```c++ -rtc_interface::isRegistered(const unique_identifier_msgs::msg::UUID & uuid) +autoware::rtc_interface::isRegistered(const unique_identifier_msgs::msg::UUID & uuid) ``` #### Description diff --git a/planning/rtc_interface/include/rtc_interface/rtc_interface.hpp b/planning/autoware_rtc_interface/include/autoware_rtc_interface/rtc_interface.hpp similarity index 94% rename from planning/rtc_interface/include/rtc_interface/rtc_interface.hpp rename to planning/autoware_rtc_interface/include/autoware_rtc_interface/rtc_interface.hpp index 7ab796321e041..8b435a6f8ed51 100644 --- a/planning/rtc_interface/include/rtc_interface/rtc_interface.hpp +++ b/planning/autoware_rtc_interface/include/autoware_rtc_interface/rtc_interface.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef RTC_INTERFACE__RTC_INTERFACE_HPP_ -#define RTC_INTERFACE__RTC_INTERFACE_HPP_ +#ifndef AUTOWARE_RTC_INTERFACE__RTC_INTERFACE_HPP_ +#define AUTOWARE_RTC_INTERFACE__RTC_INTERFACE_HPP_ #include "rclcpp/rclcpp.hpp" @@ -33,7 +33,7 @@ #include #include -namespace rtc_interface +namespace autoware::rtc_interface { using tier4_rtc_msgs::msg::AutoModeStatus; using tier4_rtc_msgs::msg::Command; @@ -101,6 +101,6 @@ class RTCInterface mutable std::mutex mutex_; }; -} // namespace rtc_interface +} // namespace autoware::rtc_interface -#endif // RTC_INTERFACE__RTC_INTERFACE_HPP_ +#endif // AUTOWARE_RTC_INTERFACE__RTC_INTERFACE_HPP_ diff --git a/planning/rtc_interface/package.xml b/planning/autoware_rtc_interface/package.xml similarity index 88% rename from planning/rtc_interface/package.xml rename to planning/autoware_rtc_interface/package.xml index 753e4df13908e..d08467d8f15a9 100644 --- a/planning/rtc_interface/package.xml +++ b/planning/autoware_rtc_interface/package.xml @@ -1,8 +1,8 @@ - rtc_interface + autoware_rtc_interface 0.1.0 - The rtc_interface package + The autoware_rtc_interface package Fumiya Watanabe Taiki Tanaka diff --git a/planning/rtc_interface/src/rtc_interface.cpp b/planning/autoware_rtc_interface/src/rtc_interface.cpp similarity index 98% rename from planning/rtc_interface/src/rtc_interface.cpp rename to planning/autoware_rtc_interface/src/rtc_interface.cpp index 77fe29b41d893..3389d08b9015e 100644 --- a/planning/rtc_interface/src/rtc_interface.cpp +++ b/planning/autoware_rtc_interface/src/rtc_interface.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "rtc_interface/rtc_interface.hpp" +#include "autoware_rtc_interface/rtc_interface.hpp" #include @@ -78,7 +78,7 @@ Module getModuleType(const std::string & module_name) } // namespace -namespace rtc_interface +namespace autoware::rtc_interface { RTCInterface::RTCInterface(rclcpp::Node * node, const std::string & name, const bool enable_rtc) : clock_{node->get_clock()}, @@ -363,4 +363,4 @@ bool RTCInterface::isLocked() const return is_locked_; } -} // namespace rtc_interface +} // namespace autoware::rtc_interface diff --git a/planning/behavior_path_avoidance_by_lane_change_module/package.xml b/planning/behavior_path_avoidance_by_lane_change_module/package.xml index 1b11b6d8d445d..57e30bd628e08 100644 --- a/planning/behavior_path_avoidance_by_lane_change_module/package.xml +++ b/planning/behavior_path_avoidance_by_lane_change_module/package.xml @@ -20,13 +20,13 @@ autoware_behavior_path_planner_common autoware_behavior_path_static_obstacle_avoidance_module + autoware_rtc_interface behavior_path_lane_change_module behavior_path_planner lanelet2_extension motion_utils pluginlib rclcpp - rtc_interface tier4_autoware_utils tier4_planning_msgs visualization_msgs diff --git a/planning/behavior_path_goal_planner_module/package.xml b/planning/behavior_path_goal_planner_module/package.xml index c5201c1d2d9a2..75ca5c264b523 100644 --- a/planning/behavior_path_goal_planner_module/package.xml +++ b/planning/behavior_path_goal_planner_module/package.xml @@ -21,11 +21,11 @@ eigen3_cmake_module autoware_behavior_path_planner_common + autoware_rtc_interface behavior_path_planner motion_utils pluginlib rclcpp - rtc_interface tier4_autoware_utils tier4_planning_msgs visualization_msgs diff --git a/planning/behavior_path_lane_change_module/package.xml b/planning/behavior_path_lane_change_module/package.xml index ee4089375376f..23fc8f61af2f3 100644 --- a/planning/behavior_path_lane_change_module/package.xml +++ b/planning/behavior_path_lane_change_module/package.xml @@ -20,11 +20,11 @@ eigen3_cmake_module autoware_behavior_path_planner_common + autoware_rtc_interface behavior_path_planner motion_utils pluginlib rclcpp - rtc_interface tier4_autoware_utils tier4_planning_msgs visualization_msgs From d891ef7b70cf5cf292e9a5f49d1289555aad3bb3 Mon Sep 17 00:00:00 2001 From: Amadeusz Szymko Date: Sat, 8 Jun 2024 00:04:57 +0900 Subject: [PATCH 030/142] feat(lidar_transfusion): add lidar_transfusion 3D detection package (#6890) * feat(lidar_transfusion): add lidar_transfusion 3D detection package Signed-off-by: amadeuszsz * style(pre-commit): autofix * style(lidar_transfusion): cpplint Signed-off-by: amadeuszsz * style(lidar_transfusion): cspell Signed-off-by: Amadeusz Szymko * fix(lidar_transfusion): CUDA mem allocation & inference input Signed-off-by: amadeuszsz * style(pre-commit): autofix * fix(lidar_transfusion): arrays size Signed-off-by: amadeuszsz * style(pre-commit): autofix * chore(lidar_transfusion): update maintainers Co-authored-by: Satoshi Tanaka <16330533+scepter914@users.noreply.github.com> Signed-off-by: amadeuszsz * fix(lidar_transfusion): array size & grid idx Signed-off-by: amadeuszsz * chore(lidar_transfusion): update maintainer email Signed-off-by: amadeuszsz * chore: added transfusion to the respective launchers Signed-off-by: Kenzo Lobos-Tsunekawa * refactor(lidar_transfusion): rename config Signed-off-by: amadeuszsz * refactor(lidar_transfusion): callback access specifier Signed-off-by: amadeuszsz * refactor(lidar_transfusion): pointers initialziation Signed-off-by: amadeuszsz * refactor(lidar_transfusion): change macros for constexpr Signed-off-by: amadeuszsz * refactor(lidar_transfusion): consts & uniform initialization Signed-off-by: amadeuszsz * refactor(lidar_transfusion): change to unique ptr & uniform initialization Signed-off-by: amadeuszsz * style(pre-commit): autofix * refactor(lidar_transfusion): use of config params Signed-off-by: amadeuszsz * refactor(lidar_transfusion): remove unnecessary condition Signed-off-by: amadeuszsz * style(lidar_transfusion): switch naming (CPU to HOST) Signed-off-by: amadeuszsz * refactor(lidar_transfusion): remove redundant device sync Signed-off-by: amadeuszsz * style(lidar_transfusion): intensity naming Signed-off-by: amadeuszsz * feat(lidar_transfusion): full network shape validation Signed-off-by: amadeuszsz * feat(lidar_transfusion): validate objects' orientation in host processing Signed-off-by: amadeuszsz * feat(lidar_transfusion): add json schema Signed-off-by: amadeuszsz * style(pre-commit): autofix * style(lidar_transfusion): affine matrix naming Signed-off-by: amadeuszsz * style(lidar_transfusion): transformed point naming Signed-off-by: amadeuszsz * refactor(lidar_transfusion): add param descriptor & arrays size check Signed-off-by: amadeuszsz * style(lidar_transfusion): affine matrix naming Signed-off-by: amadeuszsz * feat(lidar_transfusion): caching cloud input as device ptr Signed-off-by: amadeuszsz * fix(lidar_transfusion): logging Signed-off-by: amadeuszsz * chore(tier4_perception_launch): revert to centerpoint Signed-off-by: amadeuszsz * fix(lidar_transfusion): typo Signed-off-by: amadeuszsz * docs(lidar_transfusion): use hook for param description Signed-off-by: amadeuszsz * fix(lidar_transfusion): interpret eigen matrix as col major Signed-off-by: amadeuszsz * feat(lidar_transfusion): update to autware_msgs Signed-off-by: amadeuszsz --------- Signed-off-by: Amadeusz Szymko Signed-off-by: Kenzo Lobos-Tsunekawa Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Kenzo Lobos Tsunekawa --- .../detection/detection.launch.xml | 2 +- .../detector/lidar_dnn_detector.launch.xml | 29 +- .../launch/perception.launch.xml | 2 +- perception/lidar_transfusion/CMakeLists.txt | 156 ++++++++ perception/lidar_transfusion/README.md | 113 ++++++ .../detection_class_remapper.param.yaml | 38 ++ .../config/transfusion.param.yaml | 20 ++ .../include/lidar_transfusion/cuda_utils.hpp | 126 +++++++ .../detection_class_remapper.hpp | 47 +++ .../lidar_transfusion_node.hpp | 73 ++++ .../lidar_transfusion/network/network_trt.hpp | 87 +++++ .../postprocess/circle_nms_kernel.hpp | 32 ++ .../postprocess/non_maximum_suppression.hpp | 80 +++++ .../postprocess/postprocess_kernel.hpp | 50 +++ .../preprocess/pointcloud_densification.hpp | 101 ++++++ .../preprocess/preprocess_kernel.hpp | 77 ++++ .../preprocess/voxel_generator.hpp | 70 ++++ .../include/lidar_transfusion/ros_utils.hpp | 39 ++ .../lidar_transfusion/transfusion_config.hpp | 161 +++++++++ .../lidar_transfusion/transfusion_trt.hpp | 114 ++++++ .../include/lidar_transfusion/utils.hpp | 103 ++++++ .../lidar_transfusion/visibility_control.hpp | 37 ++ .../launch/lidar_transfusion.launch.xml | 39 ++ .../lib/detection_class_remapper.cpp | 71 ++++ .../lib/network/network_trt.cpp | 332 ++++++++++++++++++ .../lib/postprocess/circle_nms_kernel.cu | 144 ++++++++ .../postprocess/non_maximum_suppression.cpp | 104 ++++++ .../lib/postprocess/postprocess_kernel.cu | 145 ++++++++ .../preprocess/pointcloud_densification.cpp | 117 ++++++ .../lib/preprocess/preprocess_kernel.cu | 208 +++++++++++ .../lib/preprocess/voxel_generator.cpp | 142 ++++++++ .../lidar_transfusion/lib/ros_utils.cpp | 83 +++++ .../lidar_transfusion/lib/transfusion_trt.cpp | 205 +++++++++++ perception/lidar_transfusion/package.xml | 34 ++ .../detection_class_remapper.schema.json | 72 ++++ .../schema/transfusion.schema.json | 160 +++++++++ .../src/lidar_transfusion_node.cpp | 178 ++++++++++ 37 files changed, 3587 insertions(+), 4 deletions(-) create mode 100644 perception/lidar_transfusion/CMakeLists.txt create mode 100644 perception/lidar_transfusion/README.md create mode 100644 perception/lidar_transfusion/config/detection_class_remapper.param.yaml create mode 100644 perception/lidar_transfusion/config/transfusion.param.yaml create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/cuda_utils.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/detection_class_remapper.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/lidar_transfusion_node.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/network/network_trt.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/postprocess/circle_nms_kernel.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/postprocess/non_maximum_suppression.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/postprocess/postprocess_kernel.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/preprocess/pointcloud_densification.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/preprocess/preprocess_kernel.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/preprocess/voxel_generator.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/ros_utils.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/transfusion_trt.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/utils.hpp create mode 100644 perception/lidar_transfusion/include/lidar_transfusion/visibility_control.hpp create mode 100644 perception/lidar_transfusion/launch/lidar_transfusion.launch.xml create mode 100644 perception/lidar_transfusion/lib/detection_class_remapper.cpp create mode 100644 perception/lidar_transfusion/lib/network/network_trt.cpp create mode 100644 perception/lidar_transfusion/lib/postprocess/circle_nms_kernel.cu create mode 100644 perception/lidar_transfusion/lib/postprocess/non_maximum_suppression.cpp create mode 100644 perception/lidar_transfusion/lib/postprocess/postprocess_kernel.cu create mode 100644 perception/lidar_transfusion/lib/preprocess/pointcloud_densification.cpp create mode 100644 perception/lidar_transfusion/lib/preprocess/preprocess_kernel.cu create mode 100644 perception/lidar_transfusion/lib/preprocess/voxel_generator.cpp create mode 100644 perception/lidar_transfusion/lib/ros_utils.cpp create mode 100644 perception/lidar_transfusion/lib/transfusion_trt.cpp create mode 100644 perception/lidar_transfusion/package.xml create mode 100644 perception/lidar_transfusion/schema/detection_class_remapper.schema.json create mode 100644 perception/lidar_transfusion/schema/transfusion.schema.json create mode 100644 perception/lidar_transfusion/src/lidar_transfusion_node.cpp diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/detection.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/detection.launch.xml index 9c3e815e8abb4..7e389f5790051 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/detection.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/detection.launch.xml @@ -5,7 +5,7 @@ - + diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/lidar_dnn_detector.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/lidar_dnn_detector.launch.xml index f941bc8d771b1..274b39be681b8 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/lidar_dnn_detector.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/lidar_dnn_detector.launch.xml @@ -2,16 +2,41 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/launch/tier4_perception_launch/launch/perception.launch.xml b/launch/tier4_perception_launch/launch/perception.launch.xml index e1a2260f3ee6d..3ce78e3b29f29 100644 --- a/launch/tier4_perception_launch/launch/perception.launch.xml +++ b/launch/tier4_perception_launch/launch/perception.launch.xml @@ -47,7 +47,7 @@ - + diff --git a/perception/lidar_transfusion/CMakeLists.txt b/perception/lidar_transfusion/CMakeLists.txt new file mode 100644 index 0000000000000..c0e2d85f27e62 --- /dev/null +++ b/perception/lidar_transfusion/CMakeLists.txt @@ -0,0 +1,156 @@ +cmake_minimum_required(VERSION 3.14) +project(lidar_transfusion) + +find_package(autoware_cmake REQUIRED) +autoware_package() + +add_compile_options(-Wno-deprecated-declarations) + +option(CUDA_VERBOSE "Verbose output of CUDA modules" OFF) + +# set flags for CUDA availability +option(CUDA_AVAIL "CUDA available" OFF) +find_package(CUDA) +if(CUDA_FOUND) + find_library(CUBLAS_LIBRARIES cublas HINTS + ${CUDA_TOOLKIT_ROOT_DIR}/lib64 + ${CUDA_TOOLKIT_ROOT_DIR}/lib + ) + if(CUDA_VERBOSE) + message("CUDA is available!") + message("CUDA Libs: ${CUDA_LIBRARIES}") + message("CUDA Headers: ${CUDA_INCLUDE_DIRS}") + endif() + # Note: cublas_device was depreciated in CUDA version 9.2 + # https://forums.developer.nvidia.com/t/where-can-i-find-libcublas-device-so-or-libcublas-device-a/67251/4 + # In LibTorch, CUDA_cublas_device_LIBRARY is used. + unset(CUDA_cublas_device_LIBRARY CACHE) + set(CUDA_AVAIL ON) +else() + message("CUDA NOT FOUND") + set(CUDA_AVAIL OFF) +endif() + +# set flags for TensorRT availability +option(TRT_AVAIL "TensorRT available" OFF) +# try to find the tensorRT modules +find_library(NVINFER nvinfer) +find_library(NVONNXPARSER nvonnxparser) +if(NVINFER AND NVONNXPARSER) + if(CUDA_VERBOSE) + message("TensorRT is available!") + message("NVINFER: ${NVINFER}") + message("NVONNXPARSER: ${NVONNXPARSER}") + endif() + set(TRT_AVAIL ON) +else() + message("TensorRT is NOT Available") + set(TRT_AVAIL OFF) +endif() + +# set flags for CUDNN availability +option(CUDNN_AVAIL "CUDNN available" OFF) +# try to find the CUDNN module +find_library(CUDNN_LIBRARY +NAMES libcudnn.so${__cudnn_ver_suffix} libcudnn${__cudnn_ver_suffix}.dylib ${__cudnn_lib_win_name} +PATHS $ENV{LD_LIBRARY_PATH} ${__libpath_cudart} ${CUDNN_ROOT_DIR} ${PC_CUDNN_LIBRARY_DIRS} ${CMAKE_INSTALL_PREFIX} +PATH_SUFFIXES lib lib64 bin +DOC "CUDNN library." +) +if(CUDNN_LIBRARY) + if(CUDA_VERBOSE) + message(STATUS "CUDNN is available!") + message(STATUS "CUDNN_LIBRARY: ${CUDNN_LIBRARY}") + endif() + set(CUDNN_AVAIL ON) +else() + message("CUDNN is NOT Available") + set(CUDNN_AVAIL OFF) +endif() + +if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) + find_package(ament_cmake_auto REQUIRED) + ament_auto_find_build_dependencies() + + include_directories( + include + ${CUDA_INCLUDE_DIRS} + ) + + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + set(CMAKE_CUDA_FLAGS ${CMAKE_CUDA_FLAGS} "-g -G") + set(CUDA_NVCC_FLAGS "-g -G") + endif() + + ament_auto_add_library(transfusion_lib SHARED + lib/detection_class_remapper.cpp + lib/network/network_trt.cpp + lib/postprocess/non_maximum_suppression.cpp + lib/preprocess/voxel_generator.cpp + lib/preprocess/pointcloud_densification.cpp + lib/ros_utils.cpp + lib/transfusion_trt.cpp + ) + + cuda_add_library(transfusion_cuda_lib SHARED + lib/postprocess/circle_nms_kernel.cu + lib/postprocess/postprocess_kernel.cu + lib/preprocess/preprocess_kernel.cu + ) + + target_link_libraries(transfusion_lib + ${NVINFER} + ${NVONNXPARSER} + ${CUDA_LIBRARIES} + ${CUBLAS_LIBRARIES} + ${CUDA_curand_LIBRARY} + ${CUDNN_LIBRARY} + transfusion_cuda_lib + ) + + target_include_directories(transfusion_lib + PUBLIC + $ + $ + ) + + # To suppress unknown-pragmas error. The root-cause is CUB library in CUDA 11.6. + # This issue was fixed by https://github.com/NVIDIA/cub/commit/7d608bf1dc14553e2fb219eabeed80b76621b6fe + target_include_directories(transfusion_lib + SYSTEM PUBLIC + ${CUDA_INCLUDE_DIRS} + ) + + ament_auto_add_library(lidar_transfusion_component SHARED + src/lidar_transfusion_node.cpp + ) + + target_link_libraries(lidar_transfusion_component + transfusion_lib + ) + + rclcpp_components_register_node(lidar_transfusion_component + PLUGIN "lidar_transfusion::LidarTransfusionNode" + EXECUTABLE lidar_transfusion_node + ) + + if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + ament_lint_auto_find_test_dependencies() + endif() + + ament_auto_package( + INSTALL_TO_SHARE + launch + config + ) + +else() + find_package(ament_cmake_auto REQUIRED) + ament_auto_find_build_dependencies() + + ament_auto_package( + INSTALL_TO_SHARE + launch + ) +endif() diff --git a/perception/lidar_transfusion/README.md b/perception/lidar_transfusion/README.md new file mode 100644 index 0000000000000..7974714720c32 --- /dev/null +++ b/perception/lidar_transfusion/README.md @@ -0,0 +1,113 @@ +# lidar_transfusion + +## Purpose + +The `lidar_transfusion` package is used for 3D object detection based on lidar data (x, y, z, intensity). + +## Inner-workings / Algorithms + +The implementation bases on TransFusion [1] work. It uses TensorRT library for data process and network inference. + +We trained the models using . + +## Inputs / Outputs + +### Input + +| Name | Type | Description | +| -------------------- | ------------------------------- | ----------------- | +| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | Input pointcloud. | + +### Output + +| Name | Type | Description | +| -------------------------------------- | ------------------------------------------------ | --------------------------- | +| `~/output/objects` | `autoware_perception_msgs::msg::DetectedObjects` | Detected objects. | +| `debug/cyclic_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | Cyclic time (ms). | +| `debug/pipeline_latency_ms` | `tier4_debug_msgs::msg::Float64Stamped` | Pipeline latency time (ms). | +| `debug/processing_time/preprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | Preprocess (ms). | +| `debug/processing_time/inference_ms` | `tier4_debug_msgs::msg::Float64Stamped` | Inference time (ms). | +| `debug/processing_time/postprocess_ms` | `tier4_debug_msgs::msg::Float64Stamped` | Postprocess time (ms). | +| `debug/processing_time/total_ms` | `tier4_debug_msgs::msg::Float64Stamped` | Total processing time (ms). | + +## Parameters + +### TransFusion + +{{ json_to_markdown("perception/lidar_transfusion/schema/transfusion.schema.json") }} + +### Detection class remapper + +{{ json_to_markdown("perception/lidar_transfusion/schema/detection_class_remapper.schema.json") }} + +### The `build_only` option + +The `lidar_transfusion` node has `build_only` option to build the TensorRT engine file from the ONNX file. +Although it is preferred to move all the ROS parameters in `.param.yaml` file in Autoware Universe, the `build_only` option is not moved to the `.param.yaml` file for now, because it may be used as a flag to execute the build as a pre-task. You can execute with the following command: + +```bash +ros2 launch lidar_transfusion lidar_transfusion.launch.xml build_only:=true +``` + +### The `log_level` option + +The default logging severity level for `lidar_transfusion` is `info`. For debugging purposes, the developer may decrease severity level using `log_level` parameter: + +```bash +ros2 launch lidar_transfusion lidar_transfusion.launch.xml log_level:=debug +``` + +## Assumptions / Known limits + +## Trained Models + +You can download the onnx format of trained models by clicking on the links below. + +- TransFusion: [transfusion.onnx](https://awf.ml.dev.web.auto/perception/models/transfusion/v1/transfusion.onnx) + +The model was trained in TIER IV's internal database (~11k lidar frames) for 20 epochs. + +### Changelog + +## (Optional) Error detection and handling + + + +## (Optional) Performance characterization + + + +## References/External links + +[1] Xuyang Bai, Zeyu Hu, Xinge Zhu, Qingqiu Huang, Yilun Chen, Hongbo Fu and Chiew-Lan Tai. "TransFusion: Robust LiDAR-Camera Fusion for 3D Object Detection with Transformers." arXiv preprint arXiv:2203.11496 (2022). + +[2] + +[3] + +[4] + +[5] + +## (Optional) Future extensions / Unimplemented parts + + diff --git a/perception/lidar_transfusion/config/detection_class_remapper.param.yaml b/perception/lidar_transfusion/config/detection_class_remapper.param.yaml new file mode 100644 index 0000000000000..baea087c96bca --- /dev/null +++ b/perception/lidar_transfusion/config/detection_class_remapper.param.yaml @@ -0,0 +1,38 @@ +/**: + ros__parameters: + allow_remapping_by_area_matrix: + # NOTE(kl): We turn all vehicles into trailers if they go over 3x12 [m^2]. + # NOTE(kl): We turn cars into trucks if they have an area between 2.2 x 5.5 and 3.0 * 12.0 [m^2] + # row: original class. column: class to remap to + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE,PEDESTRIAN + [0, 0, 0, 0, 0, 0, 0, 0, #UNKNOWN + 0, 0, 1, 0, 1, 0, 0, 0, #CAR + 0, 0, 0, 0, 1, 0, 0, 0, #TRUCK + 0, 0, 0, 0, 1, 0, 0, 0, #BUS + 0, 0, 0, 0, 0, 0, 0, 0, #TRAILER + 0, 0, 0, 0, 0, 0, 0, 0, #MOTORBIKE + 0, 0, 0, 0, 0, 0, 0, 0, #BICYCLE + 0, 0, 0, 0, 0, 0, 0, 0] #PEDESTRIAN + + min_area_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [ 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #UNKNOWN + 0.000, 0.000, 12.100, 0.000, 36.000, 0.000, 0.000, 0.000, #CAR + 0.000, 0.000, 0.000, 0.000, 36.000, 0.000, 0.000, 0.000, #TRUCK + 0.000, 0.000, 0.000, 0.000, 36.000, 0.000, 0.000, 0.000, #BUS + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #TRAILER + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #MOTORBIKE + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #BICYCLE + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000] #PEDESTRIAN + + + max_area_matrix: + #UNKNOWN, CAR, TRUCK, BUS, TRAILER, MOTORBIKE, BICYCLE, PEDESTRIAN + [ 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #UNKNOWN + 0.000, 0.000, 36.000, 0.000, 999.999, 0.000, 0.000, 0.000, #CAR + 0.000, 0.000, 0.000, 0.000, 999.999, 0.000, 0.000, 0.000, #TRUCK + 0.000, 0.000, 0.000, 0.000, 999.999, 0.000, 0.000, 0.000, #BUS + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #TRAILER + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #MOTORBIKE + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, #BICYCLE + 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000] #PEDESTRIAN diff --git a/perception/lidar_transfusion/config/transfusion.param.yaml b/perception/lidar_transfusion/config/transfusion.param.yaml new file mode 100644 index 0000000000000..feabe359caf1f --- /dev/null +++ b/perception/lidar_transfusion/config/transfusion.param.yaml @@ -0,0 +1,20 @@ +/**: + ros__parameters: + # network + class_names: ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] + trt_precision: fp16 + voxels_num: [5000, 30000, 60000] # [min, opt, max] + point_cloud_range: [-76.8, -76.8, -3.0, 76.8, 76.8, 5.0] # [x_min, y_min, z_min, x_max, y_max, z_max] + voxel_size: [0.3, 0.3, 8.0] # [x, y, z] + onnx_path: "$(var model_path)/transfusion.onnx" + engine_path: "$(var model_path)/transfusion.engine" + # pre-process params + densification_num_past_frames: 1 + densification_world_frame_id: map + # post-process params + circle_nms_dist_threshold: 0.5 + iou_nms_target_class_names: ["CAR"] + iou_nms_search_distance_2d: 10.0 + iou_nms_threshold: 0.1 + yaw_norm_thresholds: [0.3, 0.3, 0.3, 0.3, 0.0] # refers to the class_names + score_threshold: 0.2 diff --git a/perception/lidar_transfusion/include/lidar_transfusion/cuda_utils.hpp b/perception/lidar_transfusion/include/lidar_transfusion/cuda_utils.hpp new file mode 100644 index 0000000000000..5c25a936d5392 --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/cuda_utils.hpp @@ -0,0 +1,126 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/* + * Copyright (c) 2020, NVIDIA CORPORATION. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +/* + * This code is licensed under CC0 1.0 Universal (Public Domain). + * You can use this without any limitation. + * https://creativecommons.org/publicdomain/zero/1.0/deed.en + */ + +#ifndef LIDAR_TRANSFUSION__CUDA_UTILS_HPP_ +#define LIDAR_TRANSFUSION__CUDA_UTILS_HPP_ + +#include + +#include +#include +#include +#include + +#define CHECK_CUDA_ERROR(e) (cuda::check_error(e, __FILE__, __LINE__)) + +namespace cuda +{ +inline void check_error(const ::cudaError_t e, const char * f, int n) +{ + if (e != ::cudaSuccess) { + ::std::stringstream s; + s << ::cudaGetErrorName(e) << " (" << e << ")@" << f << "#L" << n << ": " + << ::cudaGetErrorString(e); + throw ::std::runtime_error{s.str()}; + } +} + +struct deleter +{ + void operator()(void * p) const { CHECK_CUDA_ERROR(::cudaFree(p)); } +}; + +template +using unique_ptr = ::std::unique_ptr; + +template +typename ::std::enable_if<::std::is_array::value, cuda::unique_ptr>::type make_unique( + const ::std::size_t n) +{ + using U = typename ::std::remove_extent::type; + U * p; + CHECK_CUDA_ERROR(::cudaMalloc(reinterpret_cast(&p), sizeof(U) * n)); + return cuda::unique_ptr{p}; +} + +template +cuda::unique_ptr make_unique() +{ + T * p; + CHECK_CUDA_ERROR(::cudaMalloc(reinterpret_cast(&p), sizeof(T))); + return cuda::unique_ptr{p}; +} + +constexpr size_t CUDA_ALIGN = 256; + +template +inline size_t get_size_aligned(size_t num_elem) +{ + size_t size = num_elem * sizeof(T); + size_t extra_align = 0; + if (size % CUDA_ALIGN != 0) { + extra_align = CUDA_ALIGN - size % CUDA_ALIGN; + } + return size + extra_align; +} + +template +inline T * get_next_ptr(size_t num_elem, void *& workspace, size_t & workspace_size) +{ + size_t size = get_size_aligned(num_elem); + if (size > workspace_size) { + throw ::std::runtime_error("Workspace is too small!"); + } + workspace_size -= size; + T * ptr = reinterpret_cast(workspace); + workspace = reinterpret_cast(reinterpret_cast(workspace) + size); + return ptr; +} + +template +void clear_async(T * ptr, size_t num_elem, cudaStream_t stream) +{ + CHECK_CUDA_ERROR(::cudaMemsetAsync(ptr, 0, sizeof(T) * num_elem, stream)); +} + +} // namespace cuda + +#endif // LIDAR_TRANSFUSION__CUDA_UTILS_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/detection_class_remapper.hpp b/perception/lidar_transfusion/include/lidar_transfusion/detection_class_remapper.hpp new file mode 100644 index 0000000000000..ace7dc5ff3405 --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/detection_class_remapper.hpp @@ -0,0 +1,47 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIDAR_TRANSFUSION__DETECTION_CLASS_REMAPPER_HPP_ +#define LIDAR_TRANSFUSION__DETECTION_CLASS_REMAPPER_HPP_ + +#include + +#include +#include +#include +#include + +#include + +namespace lidar_transfusion +{ + +class DetectionClassRemapper +{ +public: + void setParameters( + const std::vector & allow_remapping_by_area_matrix, + const std::vector & min_area_matrix, const std::vector & max_area_matrix); + void mapClasses(autoware_perception_msgs::msg::DetectedObjects & msg); + +protected: + Eigen::Matrix allow_remapping_by_area_matrix_; + Eigen::MatrixXd min_area_matrix_; + Eigen::MatrixXd max_area_matrix_; + int num_labels_; +}; + +} // namespace lidar_transfusion + +#endif // LIDAR_TRANSFUSION__DETECTION_CLASS_REMAPPER_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/lidar_transfusion_node.hpp b/perception/lidar_transfusion/include/lidar_transfusion/lidar_transfusion_node.hpp new file mode 100644 index 0000000000000..86303618d7877 --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/lidar_transfusion_node.hpp @@ -0,0 +1,73 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//    http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIDAR_TRANSFUSION__LIDAR_TRANSFUSION_NODE_HPP_ +#define LIDAR_TRANSFUSION__LIDAR_TRANSFUSION_NODE_HPP_ + +#include "lidar_transfusion/detection_class_remapper.hpp" +#include "lidar_transfusion/postprocess/non_maximum_suppression.hpp" +#include "lidar_transfusion/preprocess/pointcloud_densification.hpp" +#include "lidar_transfusion/transfusion_trt.hpp" +#include "lidar_transfusion/visibility_control.hpp" + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +namespace lidar_transfusion +{ + +class LIDAR_TRANSFUSION_PUBLIC LidarTransfusionNode : public rclcpp::Node +{ +public: + explicit LidarTransfusionNode(const rclcpp::NodeOptions & options); + +private: + void cloudCallback(const sensor_msgs::msg::PointCloud2::ConstSharedPtr msg); + + rclcpp::Subscription::ConstSharedPtr cloud_sub_{nullptr}; + rclcpp::Publisher::SharedPtr objects_pub_{ + nullptr}; + + tf2_ros::Buffer tf_buffer_; + tf2_ros::TransformListener tf_listener_{tf_buffer_}; + + DetectionClassRemapper detection_class_remapper_; + float score_threshold_{0.0}; + std::vector class_names_; + + NonMaximumSuppression iou_bev_nms_; + + std::unique_ptr detector_ptr_{nullptr}; + + // debugger + std::unique_ptr> stop_watch_ptr_{ + nullptr}; + std::unique_ptr debug_publisher_ptr_{nullptr}; + std::unique_ptr published_time_pub_{nullptr}; +}; +} // namespace lidar_transfusion + +#endif // LIDAR_TRANSFUSION__LIDAR_TRANSFUSION_NODE_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/network/network_trt.hpp b/perception/lidar_transfusion/include/lidar_transfusion/network/network_trt.hpp new file mode 100644 index 0000000000000..3f8f32e346b0a --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/network/network_trt.hpp @@ -0,0 +1,87 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIDAR_TRANSFUSION__NETWORK__NETWORK_TRT_HPP_ +#define LIDAR_TRANSFUSION__NETWORK__NETWORK_TRT_HPP_ + +#include "lidar_transfusion/transfusion_config.hpp" +#include "lidar_transfusion/utils.hpp" + +#include + +#include + +#include +#include +#include +#include +#include +#include + +namespace lidar_transfusion +{ + +struct ProfileDimension +{ + nvinfer1::Dims min; + nvinfer1::Dims opt; + nvinfer1::Dims max; + + bool operator!=(const ProfileDimension & rhs) const + { + return min.nbDims != rhs.min.nbDims || opt.nbDims != rhs.opt.nbDims || + max.nbDims != rhs.max.nbDims || !std::equal(min.d, min.d + min.nbDims, rhs.min.d) || + !std::equal(opt.d, opt.d + opt.nbDims, rhs.opt.d) || + !std::equal(max.d, max.d + max.nbDims, rhs.max.d); + } +}; + +class NetworkTRT +{ +public: + explicit NetworkTRT(const TransfusionConfig & config); + ~NetworkTRT(); + + bool init( + const std::string & onnx_path, const std::string & engine_path, const std::string & precision); + const char * getTensorName(NetworkIO name); + + tensorrt_common::TrtUniquePtr engine{nullptr}; + tensorrt_common::TrtUniquePtr context{nullptr}; + +private: + bool parseONNX( + const std::string & onnx_path, const std::string & engine_path, const std::string & precision, + size_t workspace_size = (1ULL << 30)); + bool saveEngine(const std::string & engine_path); + bool loadEngine(const std::string & engine_path); + bool createContext(); + bool setProfile( + nvinfer1::IBuilder & builder, nvinfer1::INetworkDefinition & network, + nvinfer1::IBuilderConfig & config); + bool validateNetworkIO(); + nvinfer1::Dims validateTensorShape(NetworkIO name, const std::vector shape); + + tensorrt_common::TrtUniquePtr runtime_{nullptr}; + tensorrt_common::TrtUniquePtr plan_{nullptr}; + tensorrt_common::Logger logger_; + TransfusionConfig config_; + std::vector tensors_names_; + + std::array in_profile_dims_; +}; + +} // namespace lidar_transfusion + +#endif // LIDAR_TRANSFUSION__NETWORK__NETWORK_TRT_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/postprocess/circle_nms_kernel.hpp b/perception/lidar_transfusion/include/lidar_transfusion/postprocess/circle_nms_kernel.hpp new file mode 100644 index 0000000000000..e231482652b98 --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/postprocess/circle_nms_kernel.hpp @@ -0,0 +1,32 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIDAR_TRANSFUSION__POSTPROCESS__CIRCLE_NMS_KERNEL_HPP_ +#define LIDAR_TRANSFUSION__POSTPROCESS__CIRCLE_NMS_KERNEL_HPP_ + +#include "lidar_transfusion/utils.hpp" + +#include + +namespace lidar_transfusion +{ +// Non-maximum suppression (NMS) uses the distance on the xy plane instead of +// intersection over union (IoU) to suppress overlapped objects. +std::size_t circleNMS( + thrust::device_vector & boxes3d, const float distance_threshold, + thrust::device_vector & keep_mask, cudaStream_t stream); + +} // namespace lidar_transfusion + +#endif // LIDAR_TRANSFUSION__POSTPROCESS__CIRCLE_NMS_KERNEL_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/postprocess/non_maximum_suppression.hpp b/perception/lidar_transfusion/include/lidar_transfusion/postprocess/non_maximum_suppression.hpp new file mode 100644 index 0000000000000..daf2cc7c1fac1 --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/postprocess/non_maximum_suppression.hpp @@ -0,0 +1,80 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIDAR_TRANSFUSION__POSTPROCESS__NON_MAXIMUM_SUPPRESSION_HPP_ +#define LIDAR_TRANSFUSION__POSTPROCESS__NON_MAXIMUM_SUPPRESSION_HPP_ + +#include "lidar_transfusion/ros_utils.hpp" + +#include + +#include + +#include +#include + +namespace lidar_transfusion +{ +using autoware_perception_msgs::msg::DetectedObject; + +enum class NMS_TYPE { + IoU_BEV + // IoU_3D + // Distance_2D + // Distance_3D +}; + +struct NMSParams +{ + NMS_TYPE nms_type_{}; + std::vector target_class_names_{}; + double search_distance_2d_{}; + double iou_threshold_{}; + // double distance_threshold_{}; +}; + +std::vector classNamesToBooleanMask(const std::vector & class_names) +{ + std::vector mask; + constexpr std::size_t num_object_classification = 8; + mask.resize(num_object_classification); + for (const auto & class_name : class_names) { + const auto semantic_type = getSemanticType(class_name); + mask.at(semantic_type) = true; + } + + return mask; +} + +class NonMaximumSuppression +{ +public: + void setParameters(const NMSParams &); + + std::vector apply(const std::vector &); + +private: + bool isTargetLabel(const std::uint8_t); + + bool isTargetPairObject(const DetectedObject &, const DetectedObject &); + + Eigen::MatrixXd generateIoUMatrix(const std::vector &); + + NMSParams params_{}; + std::vector target_class_mask_{}; +}; + +} // namespace lidar_transfusion + +#endif // LIDAR_TRANSFUSION__POSTPROCESS__NON_MAXIMUM_SUPPRESSION_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/postprocess/postprocess_kernel.hpp b/perception/lidar_transfusion/include/lidar_transfusion/postprocess/postprocess_kernel.hpp new file mode 100644 index 0000000000000..01435424aa248 --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/postprocess/postprocess_kernel.hpp @@ -0,0 +1,50 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIDAR_TRANSFUSION__POSTPROCESS__POSTPROCESS_KERNEL_HPP_ +#define LIDAR_TRANSFUSION__POSTPROCESS__POSTPROCESS_KERNEL_HPP_ + +#include "lidar_transfusion/transfusion_config.hpp" +#include "lidar_transfusion/utils.hpp" + +#include +#include +#include + +#include + +namespace lidar_transfusion +{ + +class PostprocessCuda +{ +public: + explicit PostprocessCuda(const TransfusionConfig & config, cudaStream_t & stream); + + cudaError_t generateDetectedBoxes3D_launch( + const float * cls_output, const float * box_output, const float * dir_cls_output, + std::vector & det_boxes3d, cudaStream_t stream); + +private: + TransfusionConfig config_; + cudaStream_t stream_; + cudaStream_t stream_event_; + cudaEvent_t start_, stop_; + thrust::device_vector boxes3d_d_; + thrust::device_vector yaw_norm_thresholds_d_; +}; + +} // namespace lidar_transfusion + +#endif // LIDAR_TRANSFUSION__POSTPROCESS__POSTPROCESS_KERNEL_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/pointcloud_densification.hpp b/perception/lidar_transfusion/include/lidar_transfusion/preprocess/pointcloud_densification.hpp new file mode 100644 index 0000000000000..25095f4dc9c0b --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/preprocess/pointcloud_densification.hpp @@ -0,0 +1,101 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIDAR_TRANSFUSION__PREPROCESS__POINTCLOUD_DENSIFICATION_HPP_ +#define LIDAR_TRANSFUSION__PREPROCESS__POINTCLOUD_DENSIFICATION_HPP_ + +#include "lidar_transfusion/cuda_utils.hpp" + +#include +#include +#ifdef ROS_DISTRO_GALACTIC +#include +#else +#include +#endif + +#include +#include +#include + +namespace lidar_transfusion +{ + +class DensificationParam +{ +public: + DensificationParam(const std::string & world_frame_id, const unsigned int num_past_frames) + : world_frame_id_(std::move(world_frame_id)), + pointcloud_cache_size_(num_past_frames + /*current frame*/ 1) + { + } + + std::string world_frame_id() const { return world_frame_id_; } + unsigned int pointcloud_cache_size() const { return pointcloud_cache_size_; } + +private: + std::string world_frame_id_; + unsigned int pointcloud_cache_size_{1}; +}; + +struct PointCloudWithTransform +{ + cuda::unique_ptr points_d{nullptr}; + std_msgs::msg::Header header; + size_t num_points{0}; + Eigen::Affine3f affine_past2world; +}; + +class PointCloudDensification +{ +public: + explicit PointCloudDensification(const DensificationParam & param, cudaStream_t & stream); + + bool enqueuePointCloud( + const sensor_msgs::msg::PointCloud2 & msg, const tf2_ros::Buffer & tf_buffer); + + double getCurrentTimestamp() const { return current_timestamp_; } + Eigen::Affine3f getAffineWorldToCurrent() const { return affine_world2current_; } + std::list::iterator getPointCloudCacheIter() + { + return pointcloud_cache_.begin(); + } + bool isCacheEnd(std::list::iterator iter) + { + return iter == pointcloud_cache_.end(); + } + size_t getIdx(std::list::iterator iter) + { + return std::distance(pointcloud_cache_.begin(), iter); + } + size_t getCacheSize() + { + return std::distance(pointcloud_cache_.begin(), pointcloud_cache_.end()); + } + unsigned int pointcloud_cache_size() const { return param_.pointcloud_cache_size(); } + +private: + void enqueue(const sensor_msgs::msg::PointCloud2 & msg, const Eigen::Affine3f & affine); + void dequeue(); + + DensificationParam param_; + double current_timestamp_{0.0}; + Eigen::Affine3f affine_world2current_; + std::list pointcloud_cache_; + cudaStream_t stream_; +}; + +} // namespace lidar_transfusion + +#endif // LIDAR_TRANSFUSION__PREPROCESS__POINTCLOUD_DENSIFICATION_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/preprocess_kernel.hpp b/perception/lidar_transfusion/include/lidar_transfusion/preprocess/preprocess_kernel.hpp new file mode 100644 index 0000000000000..c571990d84b51 --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/preprocess/preprocess_kernel.hpp @@ -0,0 +1,77 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/* + * SPDX-FileCopyrightText: Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. + * All rights reserved. SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef LIDAR_TRANSFUSION__PREPROCESS__PREPROCESS_KERNEL_HPP_ +#define LIDAR_TRANSFUSION__PREPROCESS__PREPROCESS_KERNEL_HPP_ + +#include "lidar_transfusion/cuda_utils.hpp" +#include "lidar_transfusion/transfusion_config.hpp" +#include "lidar_transfusion/utils.hpp" + +#include + +namespace lidar_transfusion +{ + +class PreprocessCuda +{ +public: + PreprocessCuda(const TransfusionConfig & config, cudaStream_t & stream); + + void generateVoxels( + float * points, unsigned int points_size, unsigned int * pillar_num, float * voxel_features, + unsigned int * voxel_num, unsigned int * voxel_idxs); + + cudaError_t generateVoxels_random_launch( + float * points, unsigned int points_size, unsigned int * mask, float * voxels); + + cudaError_t generateBaseFeatures_launch( + unsigned int * mask, float * voxels, unsigned int * pillar_num, float * voxel_features, + unsigned int * voxel_num, unsigned int * voxel_idxs); + + // cudaError_t generateVoxelsInput_launch( + // uint8_t * cloud_data, CloudInfo & cloud_info, unsigned int points_agg, unsigned int + // points_size, float time_lag, float * affine_transform, float * points); + + cudaError_t generateSweepPoints_launch( + const float * input_points, size_t points_size, int input_point_step, float time_lag, + const float * transform, float * output_points); + +private: + TransfusionConfig config_; + cudaStream_t stream_; + cuda::unique_ptr mask_{nullptr}; + cuda::unique_ptr voxels_{nullptr}; + unsigned int mask_size_; + unsigned int voxels_size_; +}; +} // namespace lidar_transfusion + +#endif // LIDAR_TRANSFUSION__PREPROCESS__PREPROCESS_KERNEL_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/voxel_generator.hpp b/perception/lidar_transfusion/include/lidar_transfusion/preprocess/voxel_generator.hpp new file mode 100644 index 0000000000000..3e3660e238473 --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/preprocess/voxel_generator.hpp @@ -0,0 +1,70 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIDAR_TRANSFUSION__PREPROCESS__VOXEL_GENERATOR_HPP_ +#define LIDAR_TRANSFUSION__PREPROCESS__VOXEL_GENERATOR_HPP_ + +#include "lidar_transfusion/cuda_utils.hpp" +#include "lidar_transfusion/preprocess/pointcloud_densification.hpp" +#include "lidar_transfusion/preprocess/preprocess_kernel.hpp" +#include "lidar_transfusion/transfusion_config.hpp" +#include "lidar_transfusion/utils.hpp" + +#ifdef ROS_DISTRO_GALACTIC +#include +#else +#include +#endif + +#include + +#include +#include +#include +#include + +namespace lidar_transfusion +{ +constexpr size_t AFF_MAT_SIZE = 16; // 4x4 matrix +constexpr size_t MAX_CLOUD_STEP_SIZE = 35; // PointXYZIRCADT + +class VoxelGenerator +{ +public: + explicit VoxelGenerator( + const DensificationParam & densification_param, const TransfusionConfig & config, + cudaStream_t & stream); + std::size_t generateSweepPoints( + const sensor_msgs::msg::PointCloud2 & msg, cuda::unique_ptr & points_d); + bool enqueuePointCloud( + const sensor_msgs::msg::PointCloud2 & msg, const tf2_ros::Buffer & tf_buffer); + void initCloudInfo(const sensor_msgs::msg::PointCloud2 & msg); + std::tuple getFieldInfo( + const sensor_msgs::msg::PointCloud2 & msg, const std::string & field_name); + +private: + std::unique_ptr pd_ptr_{nullptr}; + std::unique_ptr pre_ptr_{nullptr}; + TransfusionConfig config_; + cuda::unique_ptr cloud_data_d_{nullptr}; + cuda::unique_ptr affine_past2current_d_{nullptr}; + std::vector points_; + cudaStream_t stream_; + CloudInfo cloud_info_; + bool is_initialized_{false}; +}; + +} // namespace lidar_transfusion + +#endif // LIDAR_TRANSFUSION__PREPROCESS__VOXEL_GENERATOR_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/ros_utils.hpp b/perception/lidar_transfusion/include/lidar_transfusion/ros_utils.hpp new file mode 100644 index 0000000000000..f013a02404a29 --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/ros_utils.hpp @@ -0,0 +1,39 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIDAR_TRANSFUSION__ROS_UTILS_HPP_ +#define LIDAR_TRANSFUSION__ROS_UTILS_HPP_ + +#include "lidar_transfusion/utils.hpp" + +#include +#include +#include +#include + +#include +#include + +namespace lidar_transfusion +{ + +void box3DToDetectedObject( + const Box3D & box3d, const std::vector & class_names, + autoware_perception_msgs::msg::DetectedObject & obj); + +uint8_t getSemanticType(const std::string & class_name); + +} // namespace lidar_transfusion + +#endif // LIDAR_TRANSFUSION__ROS_UTILS_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp b/perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp new file mode 100644 index 0000000000000..31976de56a9da --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp @@ -0,0 +1,161 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIDAR_TRANSFUSION__TRANSFUSION_CONFIG_HPP_ +#define LIDAR_TRANSFUSION__TRANSFUSION_CONFIG_HPP_ + +#include +#include + +namespace lidar_transfusion +{ + +class TransfusionConfig +{ +public: + TransfusionConfig( + const std::vector & voxels_num, const std::vector & point_cloud_range, + const std::vector & voxel_size, const float circle_nms_dist_threshold, + const std::vector & yaw_norm_thresholds, const float score_threshold) + { + if (voxels_num.size() == 3) { + max_voxels_ = voxels_num[2]; + + voxels_num_[0] = voxels_num[0]; + voxels_num_[1] = voxels_num[1]; + voxels_num_[2] = voxels_num[2]; + + min_voxel_size_ = voxels_num[0]; + opt_voxel_size_ = voxels_num[1]; + max_voxel_size_ = voxels_num[2]; + + min_points_size_ = voxels_num[0]; + opt_points_size_ = voxels_num[1]; + max_points_size_ = voxels_num[2]; + + min_coors_size_ = voxels_num[0]; + opt_coors_size_ = voxels_num[1]; + max_coors_size_ = voxels_num[2]; + } + if (point_cloud_range.size() == 6) { + min_x_range_ = static_cast(point_cloud_range[0]); + min_y_range_ = static_cast(point_cloud_range[1]); + min_z_range_ = static_cast(point_cloud_range[2]); + max_x_range_ = static_cast(point_cloud_range[3]); + max_y_range_ = static_cast(point_cloud_range[4]); + max_z_range_ = static_cast(point_cloud_range[5]); + } + if (voxel_size.size() == 3) { + voxel_x_size_ = static_cast(voxel_size[0]); + voxel_y_size_ = static_cast(voxel_size[1]); + voxel_z_size_ = static_cast(voxel_size[2]); + } + if (score_threshold > 0.0) { + score_threshold_ = score_threshold; + } + if (circle_nms_dist_threshold > 0.0) { + circle_nms_dist_threshold_ = circle_nms_dist_threshold; + } + yaw_norm_thresholds_ = + std::vector(yaw_norm_thresholds.begin(), yaw_norm_thresholds.end()); + for (auto & yaw_norm_threshold : yaw_norm_thresholds_) { + yaw_norm_threshold = + (yaw_norm_threshold >= 0.0 && yaw_norm_threshold < 1.0) ? yaw_norm_threshold : 0.0; + } + grid_x_size_ = static_cast((max_x_range_ - min_x_range_) / voxel_x_size_); + grid_y_size_ = static_cast((max_y_range_ - min_y_range_) / voxel_y_size_); + grid_z_size_ = static_cast((max_z_range_ - min_z_range_) / voxel_z_size_); + } + + ///// INPUT PARAMETERS ///// + const std::size_t cloud_capacity_{1000000}; + ///// KERNEL PARAMETERS ///// + const std::size_t threads_for_voxel_{256}; // threads number for a block + const std::size_t points_per_voxel_{20}; + const std::size_t warp_size_{32}; // one warp(32 threads) for one pillar + const std::size_t pillars_per_block_{64}; // one thread deals with one pillar + // and a block has pillars_per_block threads + const std::size_t pillar_feature_size_{64}; + std::size_t max_voxels_{60000}; + + ///// NETWORK PARAMETERS ///// + const std::size_t batch_size_{1}; + const std::size_t num_classes_{5}; + const std::size_t num_point_feature_size_{5}; // x, y, z, intensity, lag + // the dimension of the input cloud + float min_x_range_{-76.8}; + float max_x_range_{76.8}; + float min_y_range_{-76.8}; + float max_y_range_{76.8}; + float min_z_range_{-3.0}; + float max_z_range_{5.0}; + // the size of a pillar + float voxel_x_size_{0.3}; + float voxel_y_size_{0.3}; + float voxel_z_size_{8.0}; + const std::size_t out_size_factor_{4}; + const std::size_t max_num_points_per_pillar_{points_per_voxel_}; + const std::size_t num_point_values_{4}; + const std::size_t num_proposals_{200}; + // the number of feature maps for pillar scatter + const std::size_t num_feature_scatter_{pillar_feature_size_}; + // the score threshold for classification + float score_threshold_{0.2}; + float circle_nms_dist_threshold_{0.5}; + std::vector yaw_norm_thresholds_{0.3, 0.3, 0.3, 0.3, 0.0}; + std::size_t max_num_pillars_{max_voxels_}; + const std::size_t pillar_points_bev_{max_num_points_per_pillar_ * max_num_pillars_}; + // the detected boxes result decode by (x, y, z, w, l, h, yaw) + const std::size_t num_box_values_{8}; + // the input size of the 2D backbone network + std::size_t grid_x_size_{512}; + std::size_t grid_y_size_{512}; + std::size_t grid_z_size_{1}; + // the output size of the 2D backbone network + std::size_t feature_x_size_{grid_x_size_ / out_size_factor_}; + std::size_t feature_y_size_{grid_y_size_ / out_size_factor_}; + + ///// RUNTIME DIMENSIONS ///// + std::vector voxels_num_{5000, 30000, 60000}; + // voxels + std::size_t min_voxel_size_{voxels_num_[0]}; + std::size_t opt_voxel_size_{voxels_num_[1]}; + std::size_t max_voxel_size_{voxels_num_[2]}; + + std::size_t min_point_in_voxel_size_{points_per_voxel_}; + std::size_t opt_point_in_voxel_size_{points_per_voxel_}; + std::size_t max_point_in_voxel_size_{points_per_voxel_}; + + std::size_t min_network_feature_size_{num_point_feature_size_}; + std::size_t opt_network_feature_size_{num_point_feature_size_}; + std::size_t max_network_feature_size_{num_point_feature_size_}; + + // num_points + std::size_t min_points_size_{voxels_num_[0]}; + std::size_t opt_points_size_{voxels_num_[1]}; + std::size_t max_points_size_{voxels_num_[2]}; + + // coors + std::size_t min_coors_size_{voxels_num_[0]}; + std::size_t opt_coors_size_{voxels_num_[1]}; + std::size_t max_coors_size_{voxels_num_[2]}; + + std::size_t min_coors_dim_size_{num_point_values_}; + std::size_t opt_coors_dim_size_{num_point_values_}; + std::size_t max_coors_dim_size_{num_point_values_}; +}; + +} // namespace lidar_transfusion + +#endif // LIDAR_TRANSFUSION__TRANSFUSION_CONFIG_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/transfusion_trt.hpp b/perception/lidar_transfusion/include/lidar_transfusion/transfusion_trt.hpp new file mode 100644 index 0000000000000..a94c3c1871136 --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/transfusion_trt.hpp @@ -0,0 +1,114 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIDAR_TRANSFUSION__TRANSFUSION_TRT_HPP_ +#define LIDAR_TRANSFUSION__TRANSFUSION_TRT_HPP_ + +#include "lidar_transfusion/cuda_utils.hpp" +#include "lidar_transfusion/network/network_trt.hpp" +#include "lidar_transfusion/postprocess/postprocess_kernel.hpp" +#include "lidar_transfusion/preprocess/pointcloud_densification.hpp" +#include "lidar_transfusion/preprocess/preprocess_kernel.hpp" +#include "lidar_transfusion/preprocess/voxel_generator.hpp" +#include "lidar_transfusion/utils.hpp" +#include "lidar_transfusion/visibility_control.hpp" + +#include + +#include + +#include +#include + +#include +#include +#include +#include +#include + +namespace lidar_transfusion +{ + +class NetworkParam +{ +public: + NetworkParam(std::string onnx_path, std::string engine_path, std::string trt_precision) + : onnx_path_(std::move(onnx_path)), + engine_path_(std::move(engine_path)), + trt_precision_(std::move(trt_precision)) + { + } + + std::string onnx_path() const { return onnx_path_; } + std::string engine_path() const { return engine_path_; } + std::string trt_precision() const { return trt_precision_; } + +private: + std::string onnx_path_; + std::string engine_path_; + std::string trt_precision_; +}; + +class LIDAR_TRANSFUSION_PUBLIC TransfusionTRT +{ +public: + explicit TransfusionTRT( + const NetworkParam & network_param, const DensificationParam & densification_param, + const TransfusionConfig & config); + virtual ~TransfusionTRT(); + + bool detect( + const sensor_msgs::msg::PointCloud2 & msg, const tf2_ros::Buffer & tf_buffer, + std::vector & det_boxes3d, std::unordered_map & proc_timing); + +protected: + void initPtr(); + + bool preprocess(const sensor_msgs::msg::PointCloud2 & msg, const tf2_ros::Buffer & tf_buffer); + + bool inference(); + + bool postprocess(std::vector & det_boxes3d); + + std::unique_ptr network_trt_ptr_{nullptr}; + std::unique_ptr vg_ptr_{nullptr}; + std::unique_ptr> stop_watch_ptr_{ + nullptr}; + std::unique_ptr pre_ptr_{nullptr}; + std::unique_ptr post_ptr_{nullptr}; + cudaStream_t stream_{nullptr}; + + TransfusionConfig config_; + + // input of pre-process + + unsigned int voxel_features_size_{0}; + unsigned int voxel_num_size_{0}; + unsigned int voxel_idxs_size_{0}; + unsigned int cls_size_{0}; + unsigned int box_size_{0}; + unsigned int dir_cls_size_{0}; + cuda::unique_ptr points_d_{nullptr}; + cuda::unique_ptr params_input_d_{nullptr}; + cuda::unique_ptr voxel_features_d_{nullptr}; + cuda::unique_ptr voxel_num_d_{nullptr}; + cuda::unique_ptr voxel_idxs_d_{nullptr}; + cuda::unique_ptr cls_output_d_{nullptr}; + cuda::unique_ptr box_output_d_{nullptr}; + cuda::unique_ptr dir_cls_output_d_{nullptr}; +}; + +} // namespace lidar_transfusion + +#endif // LIDAR_TRANSFUSION__TRANSFUSION_TRT_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/utils.hpp b/perception/lidar_transfusion/include/lidar_transfusion/utils.hpp new file mode 100644 index 0000000000000..e73fe7f055953 --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/utils.hpp @@ -0,0 +1,103 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIDAR_TRANSFUSION__UTILS_HPP_ +#define LIDAR_TRANSFUSION__UTILS_HPP_ + +#include +#include +#include +#include + +namespace lidar_transfusion +{ + +struct Box3D +{ + int label; + float score; + float x; + float y; + float z; + float width; + float length; + float height; + float yaw; +}; + +struct CloudInfo +{ + uint32_t x_offset; + uint32_t y_offset; + uint32_t z_offset; + uint32_t intensity_offset; + uint8_t x_datatype; + uint8_t y_datatype; + uint8_t z_datatype; + uint8_t intensity_datatype; + uint8_t x_count; + uint8_t y_count; + uint8_t z_count; + uint8_t intensity_count; + uint32_t point_step; + bool is_bigendian; + + CloudInfo() + : x_offset(0), + y_offset(4), + z_offset(8), + intensity_offset(12), + x_datatype(7), + y_datatype(7), + z_datatype(7), + intensity_datatype(7), + x_count(1), + y_count(1), + z_count(1), + intensity_count(1), + point_step(16), + is_bigendian(false) + { + } + + bool operator!=(const CloudInfo & rhs) const + { + return x_offset != rhs.x_offset || y_offset != rhs.y_offset || z_offset != rhs.z_offset || + intensity_offset != rhs.intensity_offset || x_datatype != rhs.x_datatype || + y_datatype != rhs.y_datatype || z_datatype != rhs.z_datatype || + intensity_datatype != rhs.intensity_datatype || x_count != rhs.x_count || + y_count != rhs.y_count || z_count != rhs.z_count || + intensity_count != rhs.intensity_count || is_bigendian != rhs.is_bigendian; + } +}; + +enum NetworkIO { voxels = 0, num_points, coors, cls_score, dir_pred, bbox_pred, ENUM_SIZE }; + +// cspell: ignore divup +template +unsigned int divup(const T1 a, const T2 b) +{ + if (a == 0) { + throw std::runtime_error("A dividend of divup isn't positive."); + } + if (b == 0) { + throw std::runtime_error("A divisor of divup isn't positive."); + } + + return (a + b - 1) / b; +} + +} // namespace lidar_transfusion + +#endif // LIDAR_TRANSFUSION__UTILS_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/visibility_control.hpp b/perception/lidar_transfusion/include/lidar_transfusion/visibility_control.hpp new file mode 100644 index 0000000000000..aeab20906628a --- /dev/null +++ b/perception/lidar_transfusion/include/lidar_transfusion/visibility_control.hpp @@ -0,0 +1,37 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//    http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef LIDAR_TRANSFUSION__VISIBILITY_CONTROL_HPP_ +#define LIDAR_TRANSFUSION__VISIBILITY_CONTROL_HPP_ + +//////////////////////////////////////////////////////////////////////////////// +#if defined(__WIN32) +#if defined(LIDAR_TRANSFUSION_BUILDING_DLL) || defined(LIDAR_TRANSFUSION_EXPORTS) +#define LIDAR_TRANSFUSION_PUBLIC __declspec(dllexport) +#define LIDAR_TRANSFUSION_LOCAL +#else // defined(LIDAR_TRANSFUSION_BUILDING_DLL) || defined(LIDAR_TRANSFUSION_EXPORTS) +#define LIDAR_TRANSFUSION_PUBLIC __declspec(dllimport) +#define LIDAR_TRANSFUSION_LOCAL +#endif // defined(LIDAR_TRANSFUSION_BUILDING_DLL) || defined(LIDAR_TRANSFUSION_EXPORTS) +#elif defined(__linux__) +#define LIDAR_TRANSFUSION_PUBLIC __attribute__((visibility("default"))) +#define LIDAR_TRANSFUSION_LOCAL __attribute__((visibility("hidden"))) +#elif defined(__APPLE__) +#define LIDAR_TRANSFUSION_PUBLIC __attribute__((visibility("default"))) +#define LIDAR_TRANSFUSION_LOCAL __attribute__((visibility("hidden"))) +#else +#error "Unsupported Build Configuration" +#endif + +#endif // LIDAR_TRANSFUSION__VISIBILITY_CONTROL_HPP_ diff --git a/perception/lidar_transfusion/launch/lidar_transfusion.launch.xml b/perception/lidar_transfusion/launch/lidar_transfusion.launch.xml new file mode 100644 index 0000000000000..492eb8c4d59b7 --- /dev/null +++ b/perception/lidar_transfusion/launch/lidar_transfusion.launch.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/perception/lidar_transfusion/lib/detection_class_remapper.cpp b/perception/lidar_transfusion/lib/detection_class_remapper.cpp new file mode 100644 index 0000000000000..e093637402448 --- /dev/null +++ b/perception/lidar_transfusion/lib/detection_class_remapper.cpp @@ -0,0 +1,71 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +namespace lidar_transfusion +{ + +void DetectionClassRemapper::setParameters( + const std::vector & allow_remapping_by_area_matrix, + const std::vector & min_area_matrix, const std::vector & max_area_matrix) +{ + assert(allow_remapping_by_area_matrix.size() == min_area_matrix.size()); + assert(allow_remapping_by_area_matrix.size() == max_area_matrix.size()); + assert( + std::pow(static_cast(std::sqrt(min_area_matrix.size())), 2) == min_area_matrix.size()); + + num_labels_ = static_cast(std::sqrt(min_area_matrix.size())); + + Eigen::Map> + allow_remapping_by_area_matrix_tmp( + allow_remapping_by_area_matrix.data(), num_labels_, num_labels_); + allow_remapping_by_area_matrix_ = allow_remapping_by_area_matrix_tmp.transpose() + .cast(); // Eigen is column major by default + + Eigen::Map min_area_matrix_tmp( + min_area_matrix.data(), num_labels_, num_labels_); + min_area_matrix_ = min_area_matrix_tmp.transpose(); // Eigen is column major by default + + Eigen::Map max_area_matrix_tmp( + max_area_matrix.data(), num_labels_, num_labels_); + max_area_matrix_ = max_area_matrix_tmp.transpose(); // Eigen is column major by default + + min_area_matrix_ = min_area_matrix_.unaryExpr( + [](double v) { return std::isfinite(v) ? v : std::numeric_limits::max(); }); + max_area_matrix_ = max_area_matrix_.unaryExpr( + [](double v) { return std::isfinite(v) ? v : std::numeric_limits::max(); }); +} + +void DetectionClassRemapper::mapClasses(autoware_perception_msgs::msg::DetectedObjects & msg) +{ + for (auto & object : msg.objects) { + const float bev_area = object.shape.dimensions.x * object.shape.dimensions.y; + + for (auto & classification : object.classification) { + auto & label = classification.label; + + for (int i = 0; i < num_labels_; ++i) { + if ( + allow_remapping_by_area_matrix_(label, i) && bev_area >= min_area_matrix_(label, i) && + bev_area <= max_area_matrix_(label, i)) { + label = i; + break; + } + } + } + } +} + +} // namespace lidar_transfusion diff --git a/perception/lidar_transfusion/lib/network/network_trt.cpp b/perception/lidar_transfusion/lib/network/network_trt.cpp new file mode 100644 index 0000000000000..a36890facceec --- /dev/null +++ b/perception/lidar_transfusion/lib/network/network_trt.cpp @@ -0,0 +1,332 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "lidar_transfusion/network/network_trt.hpp" + +#include + +#include +#include +#include + +namespace lidar_transfusion +{ + +std::ostream & operator<<(std::ostream & os, const ProfileDimension & profile) +{ + std::string delim = ""; + os << "min->["; + for (int i = 0; i < profile.min.nbDims; ++i) { + os << delim << profile.min.d[i]; + delim = ", "; + } + os << "], opt->["; + delim = ""; + for (int i = 0; i < profile.opt.nbDims; ++i) { + os << delim << profile.opt.d[i]; + delim = ", "; + } + os << "], max->["; + delim = ""; + for (int i = 0; i < profile.max.nbDims; ++i) { + os << delim << profile.max.d[i]; + delim = ", "; + } + os << "]"; + return os; +} + +NetworkTRT::NetworkTRT(const TransfusionConfig & config) : config_(config) +{ + ProfileDimension voxels_dims = { + nvinfer1::Dims3( + config_.min_voxel_size_, config_.min_point_in_voxel_size_, config_.min_network_feature_size_), + nvinfer1::Dims3( + config_.opt_voxel_size_, config_.opt_point_in_voxel_size_, config_.opt_network_feature_size_), + nvinfer1::Dims3( + config_.max_voxel_size_, config_.max_point_in_voxel_size_, + config_.max_network_feature_size_)}; + ProfileDimension num_points_dims = { + nvinfer1::Dims{1, {static_cast(config_.min_points_size_)}}, + nvinfer1::Dims{1, {static_cast(config_.opt_points_size_)}}, + nvinfer1::Dims{1, {static_cast(config_.max_points_size_)}}}; + ProfileDimension coors_dims = { + nvinfer1::Dims2(config_.min_coors_size_, config_.min_coors_dim_size_), + nvinfer1::Dims2(config_.opt_coors_size_, config_.opt_coors_dim_size_), + nvinfer1::Dims2(config_.max_coors_size_, config_.max_coors_dim_size_)}; + in_profile_dims_ = {voxels_dims, num_points_dims, coors_dims}; +} + +NetworkTRT::~NetworkTRT() +{ + context.reset(); + runtime_.reset(); + plan_.reset(); + engine.reset(); +} + +bool NetworkTRT::init( + const std::string & onnx_path, const std::string & engine_path, const std::string & precision) +{ + runtime_ = + tensorrt_common::TrtUniquePtr(nvinfer1::createInferRuntime(logger_)); + if (!runtime_) { + tensorrt_common::LOG_ERROR(logger_) << "Failed to create runtime" << std::endl; + return false; + } + + bool success; + std::ifstream engine_file(engine_path); + if (engine_file.is_open()) { + success = loadEngine(engine_path); + } else { + auto log_thread = logger_.log_throttle( + nvinfer1::ILogger::Severity::kINFO, + "Applying optimizations and building TRT CUDA engine. Please wait a minutes...", 5); + success = parseONNX(onnx_path, engine_path, precision); + logger_.stop_throttle(log_thread); + } + success &= createContext(); + + return success; +} + +bool NetworkTRT::setProfile( + nvinfer1::IBuilder & builder, nvinfer1::INetworkDefinition & network, + nvinfer1::IBuilderConfig & config) +{ + auto profile = builder.createOptimizationProfile(); + + auto voxels_name = network.getInput(NetworkIO::voxels)->getName(); + auto num_points_name = network.getInput(NetworkIO::num_points)->getName(); + auto coors_name = network.getInput(NetworkIO::coors)->getName(); + + profile->setDimensions( + voxels_name, nvinfer1::OptProfileSelector::kMIN, in_profile_dims_[NetworkIO::voxels].min); + profile->setDimensions( + voxels_name, nvinfer1::OptProfileSelector::kOPT, in_profile_dims_[NetworkIO::voxels].opt); + profile->setDimensions( + voxels_name, nvinfer1::OptProfileSelector::kMAX, in_profile_dims_[NetworkIO::voxels].max); + + profile->setDimensions( + num_points_name, nvinfer1::OptProfileSelector::kMIN, + in_profile_dims_[NetworkIO::num_points].min); + profile->setDimensions( + num_points_name, nvinfer1::OptProfileSelector::kOPT, + in_profile_dims_[NetworkIO::num_points].opt); + profile->setDimensions( + num_points_name, nvinfer1::OptProfileSelector::kMAX, + in_profile_dims_[NetworkIO::num_points].max); + + profile->setDimensions( + coors_name, nvinfer1::OptProfileSelector::kMIN, in_profile_dims_[NetworkIO::coors].min); + profile->setDimensions( + coors_name, nvinfer1::OptProfileSelector::kOPT, in_profile_dims_[NetworkIO::coors].opt); + profile->setDimensions( + coors_name, nvinfer1::OptProfileSelector::kMAX, in_profile_dims_[NetworkIO::coors].max); + + config.addOptimizationProfile(profile); + return true; +} + +bool NetworkTRT::createContext() +{ + if (!engine) { + tensorrt_common::LOG_ERROR(logger_) + << "Failed to create context: Engine was not created" << std::endl; + return false; + } + + context = + tensorrt_common::TrtUniquePtr(engine->createExecutionContext()); + if (!context) { + tensorrt_common::LOG_ERROR(logger_) << "Failed to create context" << std::endl; + return false; + } + + return true; +} + +bool NetworkTRT::parseONNX( + const std::string & onnx_path, const std::string & engine_path, const std::string & precision, + const size_t workspace_size) +{ + auto builder = + tensorrt_common::TrtUniquePtr(nvinfer1::createInferBuilder(logger_)); + if (!builder) { + tensorrt_common::LOG_ERROR(logger_) << "Failed to create builder" << std::endl; + return false; + } + + auto config = + tensorrt_common::TrtUniquePtr(builder->createBuilderConfig()); + if (!config) { + tensorrt_common::LOG_ERROR(logger_) << "Failed to create config" << std::endl; + return false; + } +#if (NV_TENSORRT_MAJOR * 1000) + (NV_TENSORRT_MINOR * 100) + NV_TENSOR_PATCH >= 8400 + config->setMemoryPoolLimit(nvinfer1::MemoryPoolType::kWORKSPACE, workspace_size); +#else + config->setMaxWorkspaceSize(workspace_size); +#endif + if (precision == "fp16") { + if (builder->platformHasFastFp16()) { + tensorrt_common::LOG_INFO(logger_) << "Using TensorRT FP16 Inference" << std::endl; + config->setFlag(nvinfer1::BuilderFlag::kFP16); + } else { + tensorrt_common::LOG_INFO(logger_) + << "TensorRT FP16 Inference isn't supported in this environment" << std::endl; + } + } + + const auto flag = + 1U << static_cast(nvinfer1::NetworkDefinitionCreationFlag::kEXPLICIT_BATCH); + auto network = + tensorrt_common::TrtUniquePtr(builder->createNetworkV2(flag)); + if (!network) { + tensorrt_common::LOG_ERROR(logger_) << "Failed to create network" << std::endl; + return false; + } + + auto parser = tensorrt_common::TrtUniquePtr( + nvonnxparser::createParser(*network, logger_)); + parser->parseFromFile(onnx_path.c_str(), static_cast(nvinfer1::ILogger::Severity::kERROR)); + + if (!setProfile(*builder, *network, *config)) { + tensorrt_common::LOG_ERROR(logger_) << "Failed to set profile" << std::endl; + return false; + } + + plan_ = tensorrt_common::TrtUniquePtr( + builder->buildSerializedNetwork(*network, *config)); + if (!plan_) { + tensorrt_common::LOG_ERROR(logger_) << "Failed to create serialized network" << std::endl; + return false; + } + engine = tensorrt_common::TrtUniquePtr( + runtime_->deserializeCudaEngine(plan_->data(), plan_->size())); + if (!engine) { + tensorrt_common::LOG_ERROR(logger_) << "Failed to create engine" << std::endl; + return false; + } + + return saveEngine(engine_path); +} + +bool NetworkTRT::saveEngine(const std::string & engine_path) +{ + tensorrt_common::LOG_INFO(logger_) << "Writing to " << engine_path << std::endl; + std::ofstream file(engine_path, std::ios::out | std::ios::binary); + file.write(reinterpret_cast(plan_->data()), plan_->size()); + return validateNetworkIO(); +} + +bool NetworkTRT::loadEngine(const std::string & engine_path) +{ + std::ifstream engine_file(engine_path); + std::stringstream engine_buffer; + engine_buffer << engine_file.rdbuf(); + std::string engine_str = engine_buffer.str(); + engine = tensorrt_common::TrtUniquePtr(runtime_->deserializeCudaEngine( + reinterpret_cast(engine_str.data()), engine_str.size())); + tensorrt_common::LOG_INFO(logger_) << "Loaded engine from " << engine_path << std::endl; + return validateNetworkIO(); +} + +bool NetworkTRT::validateNetworkIO() +{ + // Whether the number of IO match the expected size + if (engine->getNbIOTensors() != NetworkIO::ENUM_SIZE) { + tensorrt_common::LOG_ERROR(logger_) + << "Invalid network IO. Expected size: " << NetworkIO::ENUM_SIZE + << ". Actual size: " << engine->getNbIOTensors() << "." << std::endl; + throw std::runtime_error("Failed to initialize TRT network."); + } + for (int i = 0; i < NetworkIO::ENUM_SIZE; ++i) { + tensors_names_.push_back(engine->getIOTensorName(i)); + } + + // Log the network IO + std::string tensors = std::accumulate( + tensors_names_.begin(), tensors_names_.end(), std::string(), + [](const std::string & a, const std::string & b) -> std::string { return a + b + " "; }); + tensorrt_common::LOG_INFO(logger_) << "Network IO: " << tensors << std::endl; + + // Whether the current engine input profile match the config input profile + for (int i = 0; i <= NetworkIO::coors; ++i) { + ProfileDimension engine_dims{ + engine->getProfileShape(tensors_names_[i], 0, nvinfer1::OptProfileSelector::kMIN), + engine->getProfileShape(tensors_names_[i], 0, nvinfer1::OptProfileSelector::kOPT), + engine->getProfileShape(tensors_names_[i], 0, nvinfer1::OptProfileSelector::kMAX)}; + + tensorrt_common::LOG_INFO(logger_) + << "Profile for " << tensors_names_[i] << ": " << engine_dims << std::endl; + + if (engine_dims != in_profile_dims_[i]) { + tensorrt_common::LOG_ERROR(logger_) + << "Invalid network input dimension. Config: " << in_profile_dims_[i] + << ". Please change the input profile or delete the engine file and build engine again." + << std::endl; + throw std::runtime_error("Failed to initialize TRT network."); + } + } + + // Whether the IO tensor shapes match the network config, -1 for dynamic size + validateTensorShape( + NetworkIO::voxels, {-1, static_cast(config_.points_per_voxel_), + static_cast(config_.num_point_feature_size_)}); + validateTensorShape(NetworkIO::num_points, {-1}); + validateTensorShape(NetworkIO::coors, {-1, static_cast(config_.num_point_values_)}); + auto cls_score = validateTensorShape( + NetworkIO::cls_score, + {static_cast(config_.batch_size_), static_cast(config_.num_classes_), + static_cast(config_.num_proposals_)}); + tensorrt_common::LOG_INFO(logger_) << "Network num classes: " << cls_score.d[1] << std::endl; + validateTensorShape( + NetworkIO::dir_pred, + {static_cast(config_.batch_size_), 2, static_cast(config_.num_proposals_)}); // x, y + validateTensorShape( + NetworkIO::bbox_pred, + {static_cast(config_.batch_size_), static_cast(config_.num_box_values_), + static_cast(config_.num_proposals_)}); + + return true; +} + +const char * NetworkTRT::getTensorName(NetworkIO name) +{ + return tensors_names_.at(name); +} + +nvinfer1::Dims NetworkTRT::validateTensorShape(NetworkIO name, const std::vector shape) +{ + auto tensor_shape = engine->getTensorShape(tensors_names_[name]); + if (tensor_shape.nbDims != static_cast(shape.size())) { + tensorrt_common::LOG_ERROR(logger_) + << "Invalid tensor shape for " << tensors_names_[name] << ". Expected size: " << shape.size() + << ". Actual size: " << tensor_shape.nbDims << "." << std::endl; + throw std::runtime_error("Failed to initialize TRT network."); + } + for (int i = 0; i < tensor_shape.nbDims; ++i) { + if (tensor_shape.d[i] != static_cast(shape[i])) { + tensorrt_common::LOG_ERROR(logger_) + << "Invalid tensor shape for " << tensors_names_[name] << ". Expected: " << shape[i] + << ". Actual: " << tensor_shape.d[i] << "." << std::endl; + throw std::runtime_error("Failed to initialize TRT network."); + } + } + return tensor_shape; +} + +} // namespace lidar_transfusion diff --git a/perception/lidar_transfusion/lib/postprocess/circle_nms_kernel.cu b/perception/lidar_transfusion/lib/postprocess/circle_nms_kernel.cu new file mode 100644 index 0000000000000..dcb60831825bb --- /dev/null +++ b/perception/lidar_transfusion/lib/postprocess/circle_nms_kernel.cu @@ -0,0 +1,144 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Modified from +// https://github.com/open-mmlab/OpenPCDet/blob/master/pcdet/ops/iou3d_nms/src/iou3d_nms_kernel.cu + +/* +3D IoU Calculation and Rotated NMS(modified from 2D NMS written by others) +Written by Shaoshuai Shi +All Rights Reserved 2019-2020. +*/ + +#include "lidar_transfusion/cuda_utils.hpp" +#include "lidar_transfusion/postprocess/circle_nms_kernel.hpp" +#include "lidar_transfusion/utils.hpp" + +#include + +namespace +{ +const std::size_t THREADS_PER_BLOCK_NMS = 16; +} // namespace + +namespace lidar_transfusion +{ + +__device__ inline float dist2dPow(const Box3D * a, const Box3D * b) +{ + return powf(a->x - b->x, 2) + powf(a->y - b->y, 2); +} + +// cspell: ignore divup +__global__ void circleNMS_Kernel( + const Box3D * boxes, const std::size_t num_boxes3d, const std::size_t col_blocks, + const float dist2d_pow_threshold, std::uint64_t * mask) +{ + // params: boxes (N,) + // params: mask (N, divup(N/THREADS_PER_BLOCK_NMS)) + + const auto row_start = blockIdx.y; + const auto col_start = blockIdx.x; + + if (row_start > col_start) return; + + const std::size_t row_size = + fminf(num_boxes3d - row_start * THREADS_PER_BLOCK_NMS, THREADS_PER_BLOCK_NMS); + const std::size_t col_size = + fminf(num_boxes3d - col_start * THREADS_PER_BLOCK_NMS, THREADS_PER_BLOCK_NMS); + + __shared__ Box3D block_boxes[THREADS_PER_BLOCK_NMS]; + + if (threadIdx.x < col_size) { + block_boxes[threadIdx.x] = boxes[THREADS_PER_BLOCK_NMS * col_start + threadIdx.x]; + } + __syncthreads(); + + if (threadIdx.x < row_size) { + const std::size_t cur_box_idx = THREADS_PER_BLOCK_NMS * row_start + threadIdx.x; + const Box3D * cur_box = boxes + cur_box_idx; + + std::uint64_t t = 0; + std::size_t start = 0; + if (row_start == col_start) { + start = threadIdx.x + 1; + } + for (std::size_t i = start; i < col_size; i++) { + if (dist2dPow(cur_box, block_boxes + i) < dist2d_pow_threshold) { + t |= 1ULL << i; + } + } + mask[cur_box_idx * col_blocks + col_start] = t; + } +} + +cudaError_t circleNMS_launch( + const thrust::device_vector & boxes3d, const std::size_t num_boxes3d, + std::size_t col_blocks, const float distance_threshold, + thrust::device_vector & mask, cudaStream_t stream) +{ + const float dist2d_pow_thres = powf(distance_threshold, 2); + + dim3 blocks(col_blocks, col_blocks); + dim3 threads(THREADS_PER_BLOCK_NMS); + circleNMS_Kernel<<>>( + thrust::raw_pointer_cast(boxes3d.data()), num_boxes3d, col_blocks, dist2d_pow_thres, + thrust::raw_pointer_cast(mask.data())); + + return cudaGetLastError(); +} + +std::size_t circleNMS( + thrust::device_vector & boxes3d, const float distance_threshold, + thrust::device_vector & keep_mask, cudaStream_t stream) +{ + const auto num_boxes3d = boxes3d.size(); + const auto col_blocks = divup(num_boxes3d, THREADS_PER_BLOCK_NMS); + thrust::device_vector mask_d(num_boxes3d * col_blocks); + + CHECK_CUDA_ERROR( + circleNMS_launch(boxes3d, num_boxes3d, col_blocks, distance_threshold, mask_d, stream)); + + // memcpy device to host + thrust::host_vector mask_h(mask_d.size()); + thrust::copy(mask_d.begin(), mask_d.end(), mask_h.begin()); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream)); + + // generate keep_mask + std::vector remv_h(col_blocks); + thrust::host_vector keep_mask_h(keep_mask.size()); + std::size_t num_to_keep = 0; + for (std::size_t i = 0; i < num_boxes3d; i++) { + auto nblock = i / THREADS_PER_BLOCK_NMS; + auto inblock = i % THREADS_PER_BLOCK_NMS; + + if (!(remv_h[nblock] & (1ULL << inblock))) { + keep_mask_h[i] = true; + num_to_keep++; + std::uint64_t * p = &mask_h[0] + i * col_blocks; + for (std::size_t j = nblock; j < col_blocks; j++) { + remv_h[j] |= p[j]; + } + } else { + keep_mask_h[i] = false; + } + } + + // memcpy host to device + keep_mask = keep_mask_h; + + return num_to_keep; +} + +} // namespace lidar_transfusion diff --git a/perception/lidar_transfusion/lib/postprocess/non_maximum_suppression.cpp b/perception/lidar_transfusion/lib/postprocess/non_maximum_suppression.cpp new file mode 100644 index 0000000000000..c1179a3f6673d --- /dev/null +++ b/perception/lidar_transfusion/lib/postprocess/non_maximum_suppression.cpp @@ -0,0 +1,104 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "lidar_transfusion/postprocess/non_maximum_suppression.hpp" + +#include +#include +#include + +namespace lidar_transfusion +{ + +void NonMaximumSuppression::setParameters(const NMSParams & params) +{ + assert(params.search_distance_2d_ >= 0.0); + assert(params.iou_threshold_ >= 0.0 && params.iou_threshold_ <= 1.0); + + params_ = params; + target_class_mask_ = classNamesToBooleanMask(params.target_class_names_); +} + +bool NonMaximumSuppression::isTargetLabel(const uint8_t label) +{ + if (label >= target_class_mask_.size()) { + return false; + } + return target_class_mask_.at(label); +} + +bool NonMaximumSuppression::isTargetPairObject( + const DetectedObject & object1, const DetectedObject & object2) +{ + const auto label1 = object_recognition_utils::getHighestProbLabel(object1.classification); + const auto label2 = object_recognition_utils::getHighestProbLabel(object2.classification); + + if (isTargetLabel(label1) && isTargetLabel(label2)) { + return true; + } + + const auto search_sqr_dist_2d = params_.search_distance_2d_ * params_.search_distance_2d_; + const auto sqr_dist_2d = tier4_autoware_utils::calcSquaredDistance2d( + object_recognition_utils::getPose(object1), object_recognition_utils::getPose(object2)); + return sqr_dist_2d <= search_sqr_dist_2d; +} + +Eigen::MatrixXd NonMaximumSuppression::generateIoUMatrix( + const std::vector & input_objects) +{ + // NOTE: row = target objects to be suppressed, col = source objects to be compared + Eigen::MatrixXd triangular_matrix = + Eigen::MatrixXd::Zero(input_objects.size(), input_objects.size()); + for (std::size_t target_i = 0; target_i < input_objects.size(); ++target_i) { + for (std::size_t source_i = 0; source_i < target_i; ++source_i) { + const auto & target_obj = input_objects.at(target_i); + const auto & source_obj = input_objects.at(source_i); + if (!isTargetPairObject(target_obj, source_obj)) { + continue; + } + + if (params_.nms_type_ == NMS_TYPE::IoU_BEV) { + const double iou = object_recognition_utils::get2dIoU(target_obj, source_obj); + triangular_matrix(target_i, source_i) = iou; + // NOTE: If the target object has any objects with iou > iou_threshold, it + // will be suppressed regardless of later results. + if (iou > params_.iou_threshold_) { + break; + } + } + } + } + + return triangular_matrix; +} + +std::vector NonMaximumSuppression::apply( + const std::vector & input_objects) +{ + Eigen::MatrixXd iou_matrix = generateIoUMatrix(input_objects); + + std::vector output_objects; + output_objects.reserve(input_objects.size()); + for (std::size_t i = 0; i < input_objects.size(); ++i) { + const auto value = iou_matrix.row(i).maxCoeff(); + if (params_.nms_type_ == NMS_TYPE::IoU_BEV) { + if (value <= params_.iou_threshold_) { + output_objects.emplace_back(input_objects.at(i)); + } + } + } + + return output_objects; +} +} // namespace lidar_transfusion diff --git a/perception/lidar_transfusion/lib/postprocess/postprocess_kernel.cu b/perception/lidar_transfusion/lib/postprocess/postprocess_kernel.cu new file mode 100644 index 0000000000000..bca23e9961b40 --- /dev/null +++ b/perception/lidar_transfusion/lib/postprocess/postprocess_kernel.cu @@ -0,0 +1,145 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "lidar_transfusion/postprocess/circle_nms_kernel.hpp" +#include "lidar_transfusion/postprocess/postprocess_kernel.hpp" + +#include +#include +#include + +namespace lidar_transfusion +{ +const size_t THREADS_PER_BLOCK = 256; + +struct is_score_greater +{ + is_score_greater(float t) : t_(t) {} + + __device__ bool operator()(const Box3D & b) { return b.score > t_; } + +private: + float t_{0.0}; +}; + +struct is_kept +{ + __device__ bool operator()(const bool keep) { return keep; } +}; + +struct score_greater +{ + __device__ bool operator()(const Box3D & lb, const Box3D & rb) { return lb.score > rb.score; } +}; + +__device__ inline float sigmoid(float x) +{ + return 1.0f / (1.0f + expf(-x)); +} + +__global__ void generateBoxes3D_kernel( + const float * __restrict__ cls_output, const float * __restrict__ box_output, + const float * __restrict__ dir_cls_output, const float voxel_size_x, const float voxel_size_y, + const float min_x_range, const float min_y_range, const int num_proposals, const int num_classes, + const int num_point_values, const float * __restrict__ yaw_norm_thresholds, + Box3D * __restrict__ det_boxes3d) +{ + int point_idx = blockIdx.x * blockDim.x + threadIdx.x; + if (point_idx >= num_proposals) { + return; + } + + int class_id = 0; + float max_score = cls_output[point_idx]; + +#pragma unroll + for (int i = 1; i < num_classes; i++) { + float score = cls_output[i * num_proposals + point_idx]; + if (score > max_score) { + max_score = score; + class_id = i; + } + } + + // yaw validation + const float yaw_sin = dir_cls_output[point_idx]; + const float yaw_cos = dir_cls_output[point_idx + num_proposals]; + const float yaw_norm = sqrtf(yaw_sin * yaw_sin + yaw_cos * yaw_cos); + + det_boxes3d[point_idx].label = class_id; + det_boxes3d[point_idx].score = yaw_norm >= yaw_norm_thresholds[class_id] ? max_score : 0.f; + det_boxes3d[point_idx].x = box_output[point_idx] * num_point_values * voxel_size_x + min_x_range; + det_boxes3d[point_idx].y = + box_output[point_idx + num_proposals] * num_point_values * voxel_size_y + min_y_range; + det_boxes3d[point_idx].z = box_output[point_idx + 2 * num_proposals]; + det_boxes3d[point_idx].width = expf(box_output[point_idx + 3 * num_proposals]); + det_boxes3d[point_idx].length = expf(box_output[point_idx + 4 * num_proposals]); + det_boxes3d[point_idx].height = expf(box_output[point_idx + 5 * num_proposals]); + det_boxes3d[point_idx].yaw = + atan2f(dir_cls_output[point_idx], dir_cls_output[point_idx + num_proposals]); +} + +PostprocessCuda::PostprocessCuda(const TransfusionConfig & config, cudaStream_t & stream) +: config_(config), stream_(stream) +{ + boxes3d_d_ = thrust::device_vector(config_.num_proposals_); + yaw_norm_thresholds_d_ = thrust::device_vector( + config_.yaw_norm_thresholds_.begin(), config_.yaw_norm_thresholds_.end()); +} + +// cspell: ignore divup +cudaError_t PostprocessCuda::generateDetectedBoxes3D_launch( + const float * cls_output, const float * box_output, const float * dir_cls_output, + std::vector & det_boxes3d, cudaStream_t stream) +{ + dim3 threads = {THREADS_PER_BLOCK}; + dim3 blocks = {divup(config_.num_proposals_, threads.x)}; + + generateBoxes3D_kernel<<>>( + cls_output, box_output, dir_cls_output, config_.voxel_x_size_, config_.voxel_y_size_, + config_.min_x_range_, config_.min_y_range_, config_.num_proposals_, config_.num_classes_, + config_.num_point_values_, thrust::raw_pointer_cast(yaw_norm_thresholds_d_.data()), + thrust::raw_pointer_cast(boxes3d_d_.data())); + + // suppress by score + const auto num_det_boxes3d = thrust::count_if( + thrust::device, boxes3d_d_.begin(), boxes3d_d_.end(), + is_score_greater(config_.score_threshold_)); + if (num_det_boxes3d == 0) { + return cudaGetLastError(); + } + thrust::device_vector det_boxes3d_d(num_det_boxes3d); + thrust::copy_if( + thrust::device, boxes3d_d_.begin(), boxes3d_d_.end(), det_boxes3d_d.begin(), + is_score_greater(config_.score_threshold_)); + + // sort by score + thrust::sort(det_boxes3d_d.begin(), det_boxes3d_d.end(), score_greater()); + + // supress by NMS + thrust::device_vector final_keep_mask_d(num_det_boxes3d); + const auto num_final_det_boxes3d = + circleNMS(det_boxes3d_d, config_.circle_nms_dist_threshold_, final_keep_mask_d, stream); + thrust::device_vector final_det_boxes3d_d(num_final_det_boxes3d); + thrust::copy_if( + thrust::device, det_boxes3d_d.begin(), det_boxes3d_d.end(), final_keep_mask_d.begin(), + final_det_boxes3d_d.begin(), is_kept()); + + // memcpy device to host + det_boxes3d.resize(num_final_det_boxes3d); + thrust::copy(final_det_boxes3d_d.begin(), final_det_boxes3d_d.end(), det_boxes3d.begin()); + return cudaGetLastError(); +} + +} // namespace lidar_transfusion diff --git a/perception/lidar_transfusion/lib/preprocess/pointcloud_densification.cpp b/perception/lidar_transfusion/lib/preprocess/pointcloud_densification.cpp new file mode 100644 index 0000000000000..774b3a05d71c1 --- /dev/null +++ b/perception/lidar_transfusion/lib/preprocess/pointcloud_densification.cpp @@ -0,0 +1,117 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "lidar_transfusion/preprocess/pointcloud_densification.hpp" + +#include + +#include +#ifdef ROS_DISTRO_GALACTIC +#include +#else +#include +#endif + +#include + +#include +#include + +namespace +{ + +boost::optional getTransform( + const tf2_ros::Buffer & tf_buffer, const std::string & target_frame_id, + const std::string & source_frame_id, const rclcpp::Time & time) +{ + try { + geometry_msgs::msg::TransformStamped transform_stamped; + transform_stamped = tf_buffer.lookupTransform( + target_frame_id, source_frame_id, time, rclcpp::Duration::from_seconds(0.5)); + return transform_stamped.transform; + } catch (tf2::TransformException & ex) { + RCLCPP_WARN_STREAM(rclcpp::get_logger("lidar_transfusion"), ex.what()); + return boost::none; + } +} + +Eigen::Affine3f transformToEigen(const geometry_msgs::msg::Transform & t) +{ + Eigen::Affine3f a; + a.matrix() = tf2::transformToEigen(t).matrix().cast(); + return a; +} + +} // namespace + +namespace lidar_transfusion +{ + +PointCloudDensification::PointCloudDensification( + const DensificationParam & param, cudaStream_t & stream) +: param_(param), stream_(stream) +{ +} + +bool PointCloudDensification::enqueuePointCloud( + const sensor_msgs::msg::PointCloud2 & pointcloud_msg, const tf2_ros::Buffer & tf_buffer) +{ + const auto header = pointcloud_msg.header; + + if (param_.pointcloud_cache_size() > 1) { + auto transform_world2current = + getTransform(tf_buffer, header.frame_id, param_.world_frame_id(), header.stamp); + if (!transform_world2current) { + return false; + } + auto affine_world2current = transformToEigen(transform_world2current.get()); + + enqueue(pointcloud_msg, affine_world2current); + } else { + enqueue(pointcloud_msg, Eigen::Affine3f::Identity()); + } + + dequeue(); + + return true; +} + +void PointCloudDensification::enqueue( + const sensor_msgs::msg::PointCloud2 & msg, const Eigen::Affine3f & affine_world2current) +{ + affine_world2current_ = affine_world2current; + current_timestamp_ = rclcpp::Time(msg.header.stamp).seconds(); + + assert(sizeof(uint8_t) * msg.width * msg.height * msg.point_step % sizeof(float) == 1); + auto points_d = cuda::make_unique( + sizeof(uint8_t) * msg.width * msg.height * msg.point_step / sizeof(float)); + + CHECK_CUDA_ERROR(cudaMemcpyAsync( + points_d.get(), msg.data.data(), sizeof(uint8_t) * msg.width * msg.height * msg.point_step, + cudaMemcpyHostToDevice, stream_)); + + PointCloudWithTransform pointcloud = { + std::move(points_d), msg.header, msg.width * msg.height, affine_world2current.inverse()}; + + pointcloud_cache_.push_front(std::move(pointcloud)); +} + +void PointCloudDensification::dequeue() +{ + if (pointcloud_cache_.size() > param_.pointcloud_cache_size()) { + pointcloud_cache_.pop_back(); + } +} + +} // namespace lidar_transfusion diff --git a/perception/lidar_transfusion/lib/preprocess/preprocess_kernel.cu b/perception/lidar_transfusion/lib/preprocess/preprocess_kernel.cu new file mode 100644 index 0000000000000..b8f9ae998fd4f --- /dev/null +++ b/perception/lidar_transfusion/lib/preprocess/preprocess_kernel.cu @@ -0,0 +1,208 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +/* + * SPDX-FileCopyrightText: Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. + * All rights reserved. SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "lidar_transfusion/cuda_utils.hpp" +#include "lidar_transfusion/preprocess/preprocess_kernel.hpp" + +namespace lidar_transfusion +{ + +PreprocessCuda::PreprocessCuda(const TransfusionConfig & config, cudaStream_t & stream) +: stream_(stream), config_(config) +{ + mask_size_ = config_.grid_z_size_ * config_.grid_y_size_ * config_.grid_x_size_; + voxels_size_ = config_.grid_z_size_ * config_.grid_y_size_ * config_.grid_x_size_ * + config_.max_num_points_per_pillar_ * config_.num_point_feature_size_ + + 1; + mask_ = cuda::make_unique(mask_size_); + voxels_ = cuda::make_unique(voxels_size_); +} + +void PreprocessCuda::generateVoxels( + float * points, unsigned int points_size, unsigned int * pillar_num, float * voxel_features, + unsigned int * voxel_num, unsigned int * voxel_idxs) +{ + cuda::clear_async(mask_.get(), mask_size_, stream_); + cuda::clear_async(voxels_.get(), voxels_size_, stream_); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + CHECK_CUDA_ERROR(generateVoxels_random_launch(points, points_size, mask_.get(), voxels_.get())); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + CHECK_CUDA_ERROR(generateBaseFeatures_launch( + mask_.get(), voxels_.get(), pillar_num, voxel_features, voxel_num, voxel_idxs)); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); +} + +__global__ void generateVoxels_random_kernel( + float * points, unsigned int points_size, float min_x_range, float max_x_range, float min_y_range, + float max_y_range, float min_z_range, float max_z_range, float pillar_x_size, float pillar_y_size, + float pillar_z_size, int grid_y_size, int grid_x_size, int points_per_voxel, unsigned int * mask, + float * voxels) +{ + int point_idx = blockIdx.x * blockDim.x + threadIdx.x; + if (point_idx >= points_size) return; + + float x = points[point_idx * 5]; + float y = points[point_idx * 5 + 1]; + float z = points[point_idx * 5 + 2]; + float i = points[point_idx * 5 + 3]; + float t = points[point_idx * 5 + 4]; + + if ( + x <= min_x_range || x >= max_x_range || y <= min_y_range || y >= max_y_range || + z <= min_z_range || z >= max_z_range) + return; + + int voxel_idx = floorf((x - min_x_range) / pillar_x_size); + int voxel_idy = floorf((y - min_y_range) / pillar_y_size); + unsigned int voxel_index = voxel_idy * grid_x_size + voxel_idx; + + unsigned int point_id = atomicAdd(&(mask[voxel_index]), 1); + + if (point_id >= points_per_voxel) return; + float * address = voxels + (voxel_index * points_per_voxel + point_id) * 5; + atomicExch(address + 0, x); + atomicExch(address + 1, y); + atomicExch(address + 2, z); + atomicExch(address + 3, i); + atomicExch(address + 4, t); +} + +cudaError_t PreprocessCuda::generateVoxels_random_launch( + float * points, unsigned int points_size, unsigned int * mask, float * voxels) +{ + int threadNum = config_.threads_for_voxel_; + dim3 blocks((points_size + threadNum - 1) / threadNum); + dim3 threads(threadNum); + generateVoxels_random_kernel<<>>( + points, points_size, config_.min_x_range_, config_.max_x_range_, config_.min_y_range_, + config_.max_y_range_, config_.min_z_range_, config_.max_z_range_, config_.voxel_x_size_, + config_.voxel_y_size_, config_.voxel_z_size_, config_.grid_y_size_, config_.grid_x_size_, + config_.points_per_voxel_, mask, voxels); + cudaError_t err = cudaGetLastError(); + return err; +} + +__global__ void generateBaseFeatures_kernel( + unsigned int * mask, float * voxels, int grid_y_size, int grid_x_size, float points_per_voxel, + float max_voxels, unsigned int * pillar_num, float * voxel_features, unsigned int * voxel_num, + unsigned int * voxel_idxs) +{ + unsigned int voxel_idx = blockIdx.x * blockDim.x + threadIdx.x; + unsigned int voxel_idy = blockIdx.y * blockDim.y + threadIdx.y; + + if (voxel_idx >= grid_x_size || voxel_idy >= grid_y_size) return; + + unsigned int voxel_index = voxel_idy * grid_x_size + voxel_idx; + unsigned int count = mask[voxel_index]; + if (!(count > 0)) return; + count = count < points_per_voxel ? count : points_per_voxel; + + unsigned int current_pillarId = 0; + current_pillarId = atomicAdd(pillar_num, 1); + if (current_pillarId >= max_voxels) return; + + voxel_num[current_pillarId] = count; + + uint4 idx = {0, 0, voxel_idy, voxel_idx}; + ((uint4 *)voxel_idxs)[current_pillarId] = idx; + + for (int i = 0; i < count; i++) { + int inIndex = voxel_index * points_per_voxel + i; + int outIndex = current_pillarId * points_per_voxel + i; + voxel_features[outIndex * 5] = voxels[inIndex * 5]; + voxel_features[outIndex * 5 + 1] = voxels[inIndex * 5 + 1]; + voxel_features[outIndex * 5 + 2] = voxels[inIndex * 5 + 2]; + voxel_features[outIndex * 5 + 3] = voxels[inIndex * 5 + 3]; + voxel_features[outIndex * 5 + 4] = voxels[inIndex * 5 + 4]; + } + + // clear buffer for next infer + atomicExch(mask + voxel_index, 0); +} + +// create 4 channels +cudaError_t PreprocessCuda::generateBaseFeatures_launch( + unsigned int * mask, float * voxels, unsigned int * pillar_num, float * voxel_features, + unsigned int * voxel_num, unsigned int * voxel_idxs) +{ + dim3 threads = {32, 32}; + dim3 blocks = {divup(config_.grid_x_size_, threads.x), divup(config_.grid_y_size_, threads.y)}; + + generateBaseFeatures_kernel<<>>( + mask, voxels, config_.grid_y_size_, config_.grid_x_size_, config_.points_per_voxel_, + config_.max_voxels_, pillar_num, voxel_features, voxel_num, voxel_idxs); + cudaError_t err = cudaGetLastError(); + return err; +} + +__global__ void generateSweepPoints_kernel( + const float * input_points, size_t points_size, int input_point_step, float time_lag, + const float * transform_array, int num_features, float * output_points) +{ + int point_idx = blockIdx.x * blockDim.x + threadIdx.x; + if (point_idx >= points_size) return; + + const float input_x = input_points[point_idx * input_point_step + 0]; + const float input_y = input_points[point_idx * input_point_step + 1]; + const float input_z = input_points[point_idx * input_point_step + 2]; + const float intensity = input_points[point_idx * input_point_step + 3]; + + output_points[point_idx * num_features] = transform_array[0] * input_x + + transform_array[4] * input_y + + transform_array[8] * input_z + transform_array[12]; + output_points[point_idx * num_features + 1] = transform_array[1] * input_x + + transform_array[5] * input_y + + transform_array[9] * input_z + transform_array[13]; + output_points[point_idx * num_features + 2] = transform_array[2] * input_x + + transform_array[6] * input_y + + transform_array[10] * input_z + transform_array[14]; + output_points[point_idx * num_features + 3] = intensity; + output_points[point_idx * num_features + 4] = time_lag; +} + +cudaError_t PreprocessCuda::generateSweepPoints_launch( + const float * input_points, size_t points_size, int input_point_step, float time_lag, + const float * transform_array, float * output_points) +{ + int threadNum = config_.threads_for_voxel_; + dim3 blocks((points_size + threadNum - 1) / threadNum); + dim3 threads(threadNum); + + generateSweepPoints_kernel<<>>( + input_points, points_size, input_point_step, time_lag, transform_array, + config_.num_point_feature_size_, output_points); + + cudaError_t err = cudaGetLastError(); + return err; +} + +} // namespace lidar_transfusion diff --git a/perception/lidar_transfusion/lib/preprocess/voxel_generator.cpp b/perception/lidar_transfusion/lib/preprocess/voxel_generator.cpp new file mode 100644 index 0000000000000..7072e8491af66 --- /dev/null +++ b/perception/lidar_transfusion/lib/preprocess/voxel_generator.cpp @@ -0,0 +1,142 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "lidar_transfusion/preprocess/voxel_generator.hpp" + +#include "lidar_transfusion/preprocess/preprocess_kernel.hpp" + +#include + +#include + +namespace lidar_transfusion +{ + +std::ostream & operator<<(std::ostream & os, const CloudInfo & info) +{ + os << "x_offset: " << static_cast(info.x_offset) << std::endl; + os << "y_offset: " << static_cast(info.y_offset) << std::endl; + os << "z_offset: " << static_cast(info.z_offset) << std::endl; + os << "intensity_offset: " << static_cast(info.intensity_offset) << std::endl; + os << "x_datatype: " << static_cast(info.x_datatype) << std::endl; + os << "y_datatype: " << static_cast(info.y_datatype) << std::endl; + os << "z_datatype: " << static_cast(info.z_datatype) << std::endl; + os << "intensity_datatype: " << static_cast(info.intensity_datatype) << std::endl; + os << "x_count: " << static_cast(info.x_count) << std::endl; + os << "y_count: " << static_cast(info.y_count) << std::endl; + os << "z_count: " << static_cast(info.z_count) << std::endl; + os << "intensity_count: " << static_cast(info.intensity_count) << std::endl; + os << "point_step: " << static_cast(info.point_step) << std::endl; + os << "is_bigendian: " << static_cast(info.is_bigendian) << std::endl; + return os; +} + +VoxelGenerator::VoxelGenerator( + const DensificationParam & densification_param, const TransfusionConfig & config, + cudaStream_t & stream) +: config_(config), stream_(stream) +{ + pd_ptr_ = std::make_unique(densification_param, stream_); + pre_ptr_ = std::make_unique(config_, stream_); + cloud_data_d_ = cuda::make_unique(config_.cloud_capacity_ * MAX_CLOUD_STEP_SIZE); + affine_past2current_d_ = cuda::make_unique(AFF_MAT_SIZE); +} + +bool VoxelGenerator::enqueuePointCloud( + const sensor_msgs::msg::PointCloud2 & msg, const tf2_ros::Buffer & tf_buffer) +{ + return pd_ptr_->enqueuePointCloud(msg, tf_buffer); +} + +std::size_t VoxelGenerator::generateSweepPoints( + const sensor_msgs::msg::PointCloud2 & msg, cuda::unique_ptr & points_d) +{ + if (!is_initialized_) { + initCloudInfo(msg); + std::stringstream ss; + ss << "Input point cloud information: " << std::endl << cloud_info_; + RCLCPP_DEBUG_STREAM(rclcpp::get_logger("lidar_transfusion"), ss.str()); + + CloudInfo default_cloud_info; + if (cloud_info_ != default_cloud_info) { + ss << "Expected point cloud information: " << std::endl << default_cloud_info; + RCLCPP_ERROR_STREAM(rclcpp::get_logger("lidar_transfusion"), ss.str()); + throw std::runtime_error("Input point cloud has unsupported format"); + } + is_initialized_ = true; + } + + size_t point_counter{0}; + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + for (auto pc_cache_iter = pd_ptr_->getPointCloudCacheIter(); !pd_ptr_->isCacheEnd(pc_cache_iter); + pc_cache_iter++) { + auto sweep_num_points = pc_cache_iter->num_points; + if (point_counter + sweep_num_points >= config_.cloud_capacity_) { + RCLCPP_WARN_STREAM( + rclcpp::get_logger("lidar_transfusion"), "Exceeding cloud capacity. Used " + << pd_ptr_->getIdx(pc_cache_iter) << " out of " + << pd_ptr_->getCacheSize() << " sweep(s)"); + break; + } + auto shift = point_counter * config_.num_point_feature_size_; + + auto affine_past2current = + pd_ptr_->getAffineWorldToCurrent() * pc_cache_iter->affine_past2world; + static_assert(std::is_same::value); + static_assert(!Eigen::Matrix4f::IsRowMajor, "matrices should be col-major."); + + float time_lag = static_cast( + pd_ptr_->getCurrentTimestamp() - rclcpp::Time(pc_cache_iter->header.stamp).seconds()); + + CHECK_CUDA_ERROR(cudaMemcpyAsync( + affine_past2current_d_.get(), affine_past2current.data(), AFF_MAT_SIZE * sizeof(float), + cudaMemcpyHostToDevice, stream_)); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + pre_ptr_->generateSweepPoints_launch( + pc_cache_iter->points_d.get(), sweep_num_points, cloud_info_.point_step / sizeof(float), + time_lag, affine_past2current_d_.get(), points_d.get() + shift); + point_counter += sweep_num_points; + } + + return point_counter; +} + +void VoxelGenerator::initCloudInfo(const sensor_msgs::msg::PointCloud2 & msg) +{ + std::tie(cloud_info_.x_offset, cloud_info_.x_datatype, cloud_info_.x_count) = + getFieldInfo(msg, "x"); + std::tie(cloud_info_.y_offset, cloud_info_.y_datatype, cloud_info_.y_count) = + getFieldInfo(msg, "y"); + std::tie(cloud_info_.z_offset, cloud_info_.z_datatype, cloud_info_.z_count) = + getFieldInfo(msg, "z"); + std::tie( + cloud_info_.intensity_offset, cloud_info_.intensity_datatype, cloud_info_.intensity_count) = + getFieldInfo(msg, "intensity"); + cloud_info_.point_step = msg.point_step; + cloud_info_.is_bigendian = msg.is_bigendian; +} + +std::tuple VoxelGenerator::getFieldInfo( + const sensor_msgs::msg::PointCloud2 & msg, const std::string & field_name) +{ + for (const auto & field : msg.fields) { + if (field.name == field_name) { + return std::make_tuple(field.offset, field.datatype, field.count); + } + } + throw std::runtime_error("Missing field: " + field_name); +} +} // namespace lidar_transfusion diff --git a/perception/lidar_transfusion/lib/ros_utils.cpp b/perception/lidar_transfusion/lib/ros_utils.cpp new file mode 100644 index 0000000000000..0ecb34faf732d --- /dev/null +++ b/perception/lidar_transfusion/lib/ros_utils.cpp @@ -0,0 +1,83 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "lidar_transfusion/ros_utils.hpp" + +#include +#include +#include + +namespace lidar_transfusion +{ + +using Label = autoware_perception_msgs::msg::ObjectClassification; + +void box3DToDetectedObject( + const Box3D & box3d, const std::vector & class_names, + autoware_perception_msgs::msg::DetectedObject & obj) +{ + obj.existence_probability = box3d.score; + + // classification + autoware_perception_msgs::msg::ObjectClassification classification; + classification.probability = 1.0f; + if (box3d.label >= 0 && static_cast(box3d.label) < class_names.size()) { + classification.label = getSemanticType(class_names[box3d.label]); + } else { + classification.label = Label::UNKNOWN; + RCLCPP_WARN_STREAM( + rclcpp::get_logger("lidar_transfusion"), "Unexpected label: UNKNOWN is set."); + } + + if (object_recognition_utils::isCarLikeVehicle(classification.label)) { + obj.kinematics.orientation_availability = + autoware_perception_msgs::msg::DetectedObjectKinematics::SIGN_UNKNOWN; + } + + obj.classification.emplace_back(classification); + + // pose and shape + // mmdet3d yaw format to ros yaw format + float yaw = box3d.yaw + tier4_autoware_utils::pi / 2; + obj.kinematics.pose_with_covariance.pose.position = + tier4_autoware_utils::createPoint(box3d.x, box3d.y, box3d.z); + obj.kinematics.pose_with_covariance.pose.orientation = + tier4_autoware_utils::createQuaternionFromYaw(yaw); + obj.shape.type = autoware_perception_msgs::msg::Shape::BOUNDING_BOX; + obj.shape.dimensions = + tier4_autoware_utils::createTranslation(box3d.length, box3d.width, box3d.height); +} + +uint8_t getSemanticType(const std::string & class_name) +{ + if (class_name == "CAR") { + return Label::CAR; + } else if (class_name == "TRUCK") { + return Label::TRUCK; + } else if (class_name == "BUS") { + return Label::BUS; + } else if (class_name == "TRAILER") { + return Label::TRAILER; + } else if (class_name == "MOTORCYCLE") { + return Label::MOTORCYCLE; + } else if (class_name == "BICYCLE") { + return Label::BICYCLE; + } else if (class_name == "PEDESTRIAN") { + return Label::PEDESTRIAN; + } else { // CONSTRUCTION_VEHICLE, BARRIER, TRAFFIC_CONE + return Label::UNKNOWN; + } +} + +} // namespace lidar_transfusion diff --git a/perception/lidar_transfusion/lib/transfusion_trt.cpp b/perception/lidar_transfusion/lib/transfusion_trt.cpp new file mode 100644 index 0000000000000..c876c0906162b --- /dev/null +++ b/perception/lidar_transfusion/lib/transfusion_trt.cpp @@ -0,0 +1,205 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "lidar_transfusion/transfusion_trt.hpp" + +#include "lidar_transfusion/preprocess/preprocess_kernel.hpp" +#include "lidar_transfusion/transfusion_config.hpp" + +#include + +#include +#include +#include +#include + +namespace lidar_transfusion +{ + +TransfusionTRT::TransfusionTRT( + const NetworkParam & network_param, const DensificationParam & densification_param, + const TransfusionConfig & config) +: config_(config) +{ + network_trt_ptr_ = std::make_unique(config_); + + network_trt_ptr_->init( + network_param.onnx_path(), network_param.engine_path(), network_param.trt_precision()); + vg_ptr_ = std::make_unique(densification_param, config_, stream_); + stop_watch_ptr_ = std::make_unique>(); + stop_watch_ptr_->tic("processing/inner"); + initPtr(); + + CHECK_CUDA_ERROR(cudaStreamCreate(&stream_)); +} + +TransfusionTRT::~TransfusionTRT() +{ + if (stream_) { + cudaStreamSynchronize(stream_); + cudaStreamDestroy(stream_); + } +} + +void TransfusionTRT::initPtr() +{ + // point cloud to voxels + voxel_features_size_ = + config_.max_voxels_ * config_.max_num_points_per_pillar_ * config_.num_point_feature_size_; + voxel_num_size_ = config_.max_voxels_; + voxel_idxs_size_ = config_.max_voxels_ * config_.num_point_values_; + + // output of TRT -- input of post-process + cls_size_ = config_.num_proposals_ * config_.num_classes_; + box_size_ = config_.num_proposals_ * config_.num_box_values_; + dir_cls_size_ = config_.num_proposals_ * 2; // x, y + cls_output_d_ = cuda::make_unique(cls_size_); + box_output_d_ = cuda::make_unique(box_size_); + dir_cls_output_d_ = cuda::make_unique(dir_cls_size_); + + params_input_d_ = cuda::make_unique(); + voxel_features_d_ = cuda::make_unique(voxel_features_size_); + voxel_num_d_ = cuda::make_unique(voxel_num_size_); + voxel_idxs_d_ = cuda::make_unique(voxel_idxs_size_); + points_d_ = cuda::make_unique(config_.cloud_capacity_ * config_.num_point_feature_size_); + pre_ptr_ = std::make_unique(config_, stream_); + post_ptr_ = std::make_unique(config_, stream_); +} + +bool TransfusionTRT::detect( + const sensor_msgs::msg::PointCloud2 & msg, const tf2_ros::Buffer & tf_buffer, + std::vector & det_boxes3d, std::unordered_map & proc_timing) +{ + stop_watch_ptr_->toc("processing/inner", true); + if (!preprocess(msg, tf_buffer)) { + RCLCPP_WARN_STREAM( + rclcpp::get_logger("lidar_transfusion"), "Fail to preprocess and skip to detect."); + return false; + } + proc_timing.emplace( + "debug/processing_time/preprocess_ms", stop_watch_ptr_->toc("processing/inner", true)); + + if (!inference()) { + RCLCPP_WARN_STREAM( + rclcpp::get_logger("lidar_transfusion"), "Fail to inference and skip to detect."); + return false; + } + proc_timing.emplace( + "debug/processing_time/inference_ms", stop_watch_ptr_->toc("processing/inner", true)); + + if (!postprocess(det_boxes3d)) { + RCLCPP_WARN_STREAM( + rclcpp::get_logger("lidar_transfusion"), "Fail to postprocess and skip to detect."); + return false; + } + proc_timing.emplace( + "debug/processing_time/postprocess_ms", stop_watch_ptr_->toc("processing/inner", true)); + + return true; +} + +bool TransfusionTRT::preprocess( + const sensor_msgs::msg::PointCloud2 & msg, const tf2_ros::Buffer & tf_buffer) +{ + if (!vg_ptr_->enqueuePointCloud(msg, tf_buffer)) { + return false; + } + + cuda::clear_async(cls_output_d_.get(), cls_size_, stream_); + cuda::clear_async(box_output_d_.get(), box_size_, stream_); + cuda::clear_async(dir_cls_output_d_.get(), dir_cls_size_, stream_); + cuda::clear_async(voxel_features_d_.get(), voxel_features_size_, stream_); + cuda::clear_async(voxel_num_d_.get(), voxel_num_size_, stream_); + cuda::clear_async(voxel_idxs_d_.get(), voxel_idxs_size_, stream_); + cuda::clear_async(params_input_d_.get(), 1, stream_); + cuda::clear_async( + points_d_.get(), config_.cloud_capacity_ * config_.num_point_feature_size_, stream_); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + const auto count = vg_ptr_->generateSweepPoints(msg, points_d_); + RCLCPP_DEBUG_STREAM(rclcpp::get_logger("lidar_transfusion"), "Generated sweep points: " << count); + + pre_ptr_->generateVoxels( + points_d_.get(), count, params_input_d_.get(), voxel_features_d_.get(), voxel_num_d_.get(), + voxel_idxs_d_.get()); + unsigned int params_input; + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + CHECK_CUDA_ERROR(cudaMemcpyAsync( + ¶ms_input, params_input_d_.get(), sizeof(unsigned int), cudaMemcpyDeviceToHost, stream_)); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + if (params_input < config_.min_voxel_size_) { + RCLCPP_WARN_STREAM( + rclcpp::get_logger("lidar_transfusion"), + "Too few voxels (" << params_input << ") for actual optimization profile (" + << config_.min_voxel_size_ << ")"); + return false; + } + + if (params_input > config_.max_voxels_) { + params_input = config_.max_voxels_; + } + RCLCPP_DEBUG_STREAM( + rclcpp::get_logger("lidar_transfusion"), "Generated input voxels: " << params_input); + + network_trt_ptr_->context->setTensorAddress( + network_trt_ptr_->getTensorName(NetworkIO::voxels), voxel_features_d_.get()); + network_trt_ptr_->context->setInputShape( + network_trt_ptr_->getTensorName(NetworkIO::voxels), + nvinfer1::Dims3{ + static_cast(params_input), static_cast(config_.max_num_points_per_pillar_), + static_cast(config_.num_point_feature_size_)}); + network_trt_ptr_->context->setTensorAddress( + network_trt_ptr_->getTensorName(NetworkIO::num_points), voxel_num_d_.get()); + network_trt_ptr_->context->setInputShape( + network_trt_ptr_->getTensorName(NetworkIO::num_points), + nvinfer1::Dims{1, {static_cast(params_input)}}); + network_trt_ptr_->context->setTensorAddress( + network_trt_ptr_->getTensorName(NetworkIO::coors), voxel_idxs_d_.get()); + network_trt_ptr_->context->setInputShape( + network_trt_ptr_->getTensorName(NetworkIO::coors), + nvinfer1::Dims2{ + static_cast(params_input), static_cast(config_.num_point_values_)}); + network_trt_ptr_->context->setTensorAddress( + network_trt_ptr_->getTensorName(NetworkIO::cls_score), cls_output_d_.get()); + network_trt_ptr_->context->setTensorAddress( + network_trt_ptr_->getTensorName(NetworkIO::bbox_pred), box_output_d_.get()); + network_trt_ptr_->context->setTensorAddress( + network_trt_ptr_->getTensorName(NetworkIO::dir_pred), dir_cls_output_d_.get()); + return true; +} + +bool TransfusionTRT::inference() +{ + auto status = network_trt_ptr_->context->enqueueV3(stream_); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + if (!status) { + RCLCPP_WARN_STREAM( + rclcpp::get_logger("lidar_transfusion"), "Fail to enqueue and skip to detect."); + return false; + } + return true; +} + +bool TransfusionTRT::postprocess(std::vector & det_boxes3d) +{ + CHECK_CUDA_ERROR(post_ptr_->generateDetectedBoxes3D_launch( + cls_output_d_.get(), box_output_d_.get(), dir_cls_output_d_.get(), det_boxes3d, stream_)); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + return true; +} + +} // namespace lidar_transfusion diff --git a/perception/lidar_transfusion/package.xml b/perception/lidar_transfusion/package.xml new file mode 100644 index 0000000000000..29643d0957eb1 --- /dev/null +++ b/perception/lidar_transfusion/package.xml @@ -0,0 +1,34 @@ + + + + lidar_transfusion + 1.0.0 + The lidar_transfusion package + Amadeusz Szymko + Kenzo Lobos-Tsunekawa + Satoshi Tanaka + Apache License 2.0 + + ament_cmake_auto + autoware_cmake + + autoware_perception_msgs + launch_ros + object_recognition_utils + pcl_ros + rclcpp + rclcpp_components + tensorrt_common + tf2_eigen + tf2_geometry_msgs + tf2_sensor_msgs + tier4_autoware_utils + + ament_cmake_ros + ament_lint_auto + autoware_lint_common + + + ament_cmake + + diff --git a/perception/lidar_transfusion/schema/detection_class_remapper.schema.json b/perception/lidar_transfusion/schema/detection_class_remapper.schema.json new file mode 100644 index 0000000000000..8aaefa295fcc0 --- /dev/null +++ b/perception/lidar_transfusion/schema/detection_class_remapper.schema.json @@ -0,0 +1,72 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Detection Class Remapper", + "type": "object", + "definitions": { + "detection_class_remapper": { + "type": "object", + "properties": { + "allow_remapping_by_area_matrix": { + "type": "array", + "items": { + "type": "integer" + }, + "description": "Whether to allow remapping of classes. The order of 8x8 matrix classes comes from ObjectClassification msg.", + "default": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0 + ], + "minItems": 64, + "maxItems": 64 + }, + "min_area_matrix": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Minimum area for specific class to consider class remapping.", + "default": [ + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 12.1, 0.0, 36.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 36.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 36.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 + ], + "minItems": 64, + "maxItems": 64 + }, + "max_area_matrix": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Maximum area for specific class to consider class remapping.", + "default": [ + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 36.0, 0.0, 999.999, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 999.999, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 999.999, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 + ], + "minItems": 64, + "maxItems": 64 + } + }, + "required": ["allow_remapping_by_area_matrix", "min_area_matrix", "max_area_matrix"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/detection_class_remapper" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/perception/lidar_transfusion/schema/transfusion.schema.json b/perception/lidar_transfusion/schema/transfusion.schema.json new file mode 100644 index 0000000000000..41d8d887236a8 --- /dev/null +++ b/perception/lidar_transfusion/schema/transfusion.schema.json @@ -0,0 +1,160 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for LiDAR TransFusion Node", + "type": "object", + "definitions": { + "transfusion": { + "type": "object", + "properties": { + "class_names": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An array of class names will be predicted.", + "default": ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"], + "uniqueItems": true + }, + "trt_precision": { + "type": "string", + "description": "A precision of TensorRT engine.", + "default": "fp16", + "enum": ["fp16", "fp32"] + }, + "voxels_num": { + "type": "array", + "items": { + "type": "integer" + }, + "description": "A maximum number of voxels [min, opt, max].", + "default": [5000, 30000, 60000] + }, + "point_cloud_range": { + "type": "array", + "items": { + "type": "number" + }, + "description": "An array of distance ranges of each class.", + "default": [-76.8, -76.8, -3.0, 76.8, 76.8, 5.0], + "minItems": 6, + "maxItems": 6 + }, + "voxel_size": { + "type": "array", + "items": { + "type": "number" + }, + "description": "Voxels size [x, y, z].", + "default": [0.3, 0.3, 8.0], + "minItems": 3, + "maxItems": 3 + }, + "onnx_path": { + "type": "string", + "description": "A path to ONNX model file.", + "default": "$(var model_path)/transfusion.onnx", + "pattern": "\\.onnx$" + }, + "engine_path": { + "type": "string", + "description": "A path to TensorRT engine file.", + "default": "$(var model_path)/transfusion.engine", + "pattern": "\\.engine$" + }, + "down_sample_factor": { + "type": "integer", + "description": "A scale factor of downsampling points", + "default": 1, + "minimum": 1 + }, + "densification_num_past_frames": { + "type": "integer", + "description": "A number of past frames to be considered as same input frame.", + "default": 1, + "minimum": 0 + }, + "densification_world_frame_id": { + "type": "string", + "description": "A name of frame id where world coordinates system is defined with respect to.", + "default": "map" + }, + "circle_nms_dist_threshold": { + "type": "number", + "description": "A distance threshold between detections in NMS.", + "default": 0.5, + "minimum": 0.0 + }, + "iou_nms_target_class_names": { + "type": "array", + "items": { + "type": "string" + }, + "description": "An array of class names to be target in NMS.", + "default": ["CAR"], + "uniqueItems": true + }, + "iou_nms_search_distance_2d": { + "type": "number", + "description": "A maximum distance value to search the nearest objects.", + "default": 10.0, + "minimum": 0.0 + }, + "iou_nms_threshold": { + "type": "number", + "description": "A threshold value of NMS using IoU score.", + "default": 0.1, + "minimum": 0.0, + "maximum": 1.0 + }, + "yaw_norm_thresholds": { + "type": "array", + "items": { + "type": "number", + "minimum": 0.0, + "maximum": 1.0 + }, + "description": "A thresholds array of direction vectors norm, all of objects with vector norm less than this threshold are ignored.", + "default": [0.3, 0.3, 0.3, 0.3, 0.0] + }, + "score_threshold": { + "type": "number", + "description": "A threshold value of confidence score, all of objects with score less than this threshold are ignored.", + "default": 0.2, + "minimum": 0.0 + } + }, + "required": [ + "class_names", + "trt_precision", + "voxels_num", + "point_cloud_range", + "voxel_size", + "onnx_path", + "engine_path", + "densification_num_past_frames", + "densification_world_frame_id", + "circle_nms_dist_threshold", + "iou_nms_target_class_names", + "iou_nms_search_distance_2d", + "iou_nms_threshold", + "yaw_norm_thresholds", + "score_threshold" + ], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/transfusion" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/perception/lidar_transfusion/src/lidar_transfusion_node.cpp b/perception/lidar_transfusion/src/lidar_transfusion_node.cpp new file mode 100644 index 0000000000000..9313015002973 --- /dev/null +++ b/perception/lidar_transfusion/src/lidar_transfusion_node.cpp @@ -0,0 +1,178 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +//    http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "lidar_transfusion/lidar_transfusion_node.hpp" + +#include "lidar_transfusion/utils.hpp" + +namespace lidar_transfusion +{ + +LidarTransfusionNode::LidarTransfusionNode(const rclcpp::NodeOptions & options) +: Node("lidar_transfusion", options), tf_buffer_(this->get_clock()) +{ + auto descriptor = rcl_interfaces::msg::ParameterDescriptor{}.set__read_only(true); + // network + class_names_ = this->declare_parameter>("class_names", descriptor); + const std::string trt_precision = + this->declare_parameter("trt_precision", descriptor); + const auto voxels_num = this->declare_parameter>("voxels_num", descriptor); + const auto point_cloud_range = + this->declare_parameter>("point_cloud_range", descriptor); + const auto voxel_size = this->declare_parameter>("voxel_size", descriptor); + const std::string onnx_path = this->declare_parameter("onnx_path", descriptor); + const std::string engine_path = this->declare_parameter("engine_path", descriptor); + + if (point_cloud_range.size() != 6) { + RCLCPP_WARN_STREAM( + rclcpp::get_logger("lidar_transfusion"), + "The size of point_cloud_range != 6: use the default parameters."); + } + if (voxel_size.size() != 3) { + RCLCPP_WARN_STREAM( + rclcpp::get_logger("lidar_transfusion"), + "The size of voxel_size != 3: use the default parameters."); + } + + // pre-process + const std::string densification_world_frame_id = + this->declare_parameter("densification_world_frame_id", descriptor); + const int densification_num_past_frames = + this->declare_parameter("densification_num_past_frames", descriptor); + + // post-process + const float circle_nms_dist_threshold = + static_cast(this->declare_parameter("circle_nms_dist_threshold", descriptor)); + { // IoU NMS + NMSParams p; + p.nms_type_ = NMS_TYPE::IoU_BEV; + p.target_class_names_ = + this->declare_parameter>("iou_nms_target_class_names", descriptor); + p.search_distance_2d_ = + this->declare_parameter("iou_nms_search_distance_2d", descriptor); + p.iou_threshold_ = this->declare_parameter("iou_nms_threshold", descriptor); + iou_bev_nms_.setParameters(p); + } + const auto yaw_norm_thresholds = + this->declare_parameter>("yaw_norm_thresholds", descriptor); + const float score_threshold = + static_cast(this->declare_parameter("score_threshold", descriptor)); + + NetworkParam network_param(onnx_path, engine_path, trt_precision); + DensificationParam densification_param( + densification_world_frame_id, densification_num_past_frames); + TransfusionConfig config( + voxels_num, point_cloud_range, voxel_size, circle_nms_dist_threshold, yaw_norm_thresholds, + score_threshold); + + const auto allow_remapping_by_area_matrix = + this->declare_parameter>("allow_remapping_by_area_matrix", descriptor); + const auto min_area_matrix = + this->declare_parameter>("min_area_matrix", descriptor); + const auto max_area_matrix = + this->declare_parameter>("max_area_matrix", descriptor); + detection_class_remapper_.setParameters( + allow_remapping_by_area_matrix, min_area_matrix, max_area_matrix); + + detector_ptr_ = std::make_unique(network_param, densification_param, config); + + cloud_sub_ = this->create_subscription( + "~/input/pointcloud", rclcpp::SensorDataQoS{}.keep_last(1), + std::bind(&LidarTransfusionNode::cloudCallback, this, std::placeholders::_1)); + + objects_pub_ = this->create_publisher( + "~/output/objects", rclcpp::QoS(1)); + + published_time_pub_ = std::make_unique(this); + + // initialize debug tool + { + using tier4_autoware_utils::DebugPublisher; + using tier4_autoware_utils::StopWatch; + stop_watch_ptr_ = std::make_unique>(); + debug_publisher_ptr_ = std::make_unique(this, this->get_name()); + stop_watch_ptr_->tic("cyclic"); + stop_watch_ptr_->tic("processing/total"); + } + + if (this->declare_parameter("build_only", false, descriptor)) { + RCLCPP_INFO(this->get_logger(), "TensorRT engine is built and shutdown node."); + rclcpp::shutdown(); + } +} + +void LidarTransfusionNode::cloudCallback(const sensor_msgs::msg::PointCloud2::ConstSharedPtr msg) +{ + const auto objects_sub_count = + objects_pub_->get_subscription_count() + objects_pub_->get_intra_process_subscription_count(); + if (objects_sub_count < 1) { + return; + } + + if (stop_watch_ptr_) { + stop_watch_ptr_->toc("processing/total", true); + } + + std::vector det_boxes3d; + std::unordered_map proc_timing; + bool is_success = detector_ptr_->detect(*msg, tf_buffer_, det_boxes3d, proc_timing); + if (!is_success) { + return; + } + + std::vector raw_objects; + raw_objects.reserve(det_boxes3d.size()); + for (const auto & box3d : det_boxes3d) { + autoware_perception_msgs::msg::DetectedObject obj; + box3DToDetectedObject(box3d, class_names_, obj); + raw_objects.emplace_back(obj); + } + + autoware_perception_msgs::msg::DetectedObjects output_msg; + output_msg.header = msg->header; + output_msg.objects = iou_bev_nms_.apply(raw_objects); + + detection_class_remapper_.mapClasses(output_msg); + + if (objects_sub_count > 0) { + objects_pub_->publish(output_msg); + published_time_pub_->publish_if_subscribed(objects_pub_, output_msg.header.stamp); + } + + // add processing time for debug + if (debug_publisher_ptr_ && stop_watch_ptr_) { + const double cyclic_time_ms = stop_watch_ptr_->toc("cyclic", true); + const double processing_time_ms = stop_watch_ptr_->toc("processing/total", true); + const double pipeline_latency_ms = + std::chrono::duration( + std::chrono::nanoseconds( + (this->get_clock()->now() - output_msg.header.stamp).nanoseconds())) + .count(); + debug_publisher_ptr_->publish( + "debug/cyclic_time_ms", cyclic_time_ms); + debug_publisher_ptr_->publish( + "debug/pipeline_latency_ms", pipeline_latency_ms); + debug_publisher_ptr_->publish( + "debug/processing_time/total_ms", processing_time_ms); + for (const auto & [topic, time_ms] : proc_timing) { + debug_publisher_ptr_->publish(topic, time_ms); + } + } +} + +} // namespace lidar_transfusion + +#include "rclcpp_components/register_node_macro.hpp" + +RCLCPP_COMPONENTS_REGISTER_NODE(lidar_transfusion::LidarTransfusionNode) From f328a157b637e10fc3304d18992b52de9f4803a6 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Sat, 8 Jun 2024 01:49:59 +0900 Subject: [PATCH 031/142] fix(autoware_planning_validator): revert node name change (#7371) revert node name change Signed-off-by: kyoichi-sugahara --- .../planning_validator/launch/planning_validator.launch.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/planning_validator/launch/planning_validator.launch.xml b/planning/planning_validator/launch/planning_validator.launch.xml index fa1475a0787e4..aeb9c37d67cda 100644 --- a/planning/planning_validator/launch/planning_validator.launch.xml +++ b/planning/planning_validator/launch/planning_validator.launch.xml @@ -3,7 +3,7 @@ - + From 57786a719c27fb7f5082f627ddbbee17c87f83f3 Mon Sep 17 00:00:00 2001 From: Esteve Fernandez <33620+esteve@users.noreply.github.com> Date: Sat, 8 Jun 2024 01:41:26 +0200 Subject: [PATCH 032/142] refactor(behavior_path_avoidance_by_lane_change_module)!: prefix package and namespace with autoware_ (#6638) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * build(behavior_path_avoidance_by_lane_change_module): prefix package and namespace with autoware_ Signed-off-by: Esteve Fernandez * style(pre-commit): autofix Signed-off-by: Esteve Fernandez * build(autoware_behavior_path_avoidance_by_lane_change_module): fix namespaces Signed-off-by: Esteve Fernandez * style(pre-commit): autofix Signed-off-by: Esteve Fernandez * fix(autoware_behavior_path_avoidance_by_lane_change_module): fix clang-tidy issues Signed-off-by: Esteve Fernandez * style(pre-commit): autofix Signed-off-by: Esteve Fernandez * fix(autoware_behavior_path_avoidance_by_lane_change_module): fix tests Signed-off-by: Esteve Fernandez * style(pre-commit): autofix Signed-off-by: Esteve Fernandez * fix(autoware_behavior_path_avoidance_by_lane_change_module): fix clang-tidy issues Signed-off-by: Esteve Fernandez * style(pre-commit): autofix Signed-off-by: Esteve Fernandez * build(autoware_behavior_path_avoidance_by_lane_change_module): revert clang-tidy fixes for naming functions Signed-off-by: Esteve Fernandez * build(autoware_behavior_path_avoidance_by_lane_change_module): revert clang-tidy fixes for naming functions Signed-off-by: Esteve Fernandez * build(autoware_behavior_path_external_request_lane_change_module): revert performance-related clang-tidy fixes Signed-off-by: Esteve Fernandez * build(autoware_behavior_path_avoidance_by_lane_change_module): revert clang-tidy fixes for naming functions Signed-off-by: Esteve Fernandez * style(pre-commit): autofix Signed-off-by: Esteve Fernandez * refactor(autoware_behavior_path_avoidance_by_lane_change_module): update CODEOWNERS and .pages files Signed-off-by: Esteve Fernandez * refactor(autoware_behavior_path_avoidance_by_lane_change_module): move headers files to src Signed-off-by: Esteve Fernandez * refactor(autoware_behavior_path_avoidance_by_lane_change_module): fix include paths Signed-off-by: Esteve Fernandez * style(pre-commit): autofix Signed-off-by: Esteve Fernandez * Update planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp Co-authored-by: M. Fatih Cırıt Signed-off-by: Esteve Fernandez * style(pre-commit): autofix Signed-off-by: Esteve Fernandez * build: fix missing using clauses Signed-off-by: Esteve Fernandez --------- Signed-off-by: Esteve Fernandez Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: M. Fatih Cırıt --- .github/CODEOWNERS | 2 +- planning/.pages | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../avoidance_by_lane_change.param.yaml | 0 .../images/avoidance_by_lane_change.svg | 0 .../images/avoidance_by_lc_trigger_1.svg | 0 .../images/avoidance_by_lc_trigger_2.svg | 0 .../package.xml | 2 +- .../plugins.xml | 3 ++ .../src}/data_structs.hpp | 12 ++++---- .../src/interface.cpp | 9 ++++-- .../src}/interface.hpp | 18 ++++++----- .../src/manager.cpp | 14 +++++---- .../src}/manager.hpp | 19 +++++++----- .../src/scene.cpp | 14 ++++++--- .../src}/scene.hpp | 21 ++++++++----- ...t_behavior_path_planner_node_interface.cpp | 30 +++++++++---------- .../plugins.xml | 3 -- 19 files changed, 89 insertions(+), 62 deletions(-) rename planning/{behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module}/CMakeLists.txt (90%) rename planning/{behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module}/README.md (100%) rename planning/{behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module}/config/avoidance_by_lane_change.param.yaml (100%) rename planning/{behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module}/images/avoidance_by_lane_change.svg (100%) rename planning/{behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module}/images/avoidance_by_lc_trigger_1.svg (100%) rename planning/{behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module}/images/avoidance_by_lc_trigger_2.svg (100%) rename planning/{behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module}/package.xml (95%) create mode 100644 planning/autoware_behavior_path_avoidance_by_lane_change_module/plugins.xml rename planning/{behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module/src}/data_structs.hpp (79%) rename planning/{behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module}/src/interface.cpp (92%) rename planning/{behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module/src}/interface.hpp (77%) rename planning/{behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module}/src/manager.cpp (96%) rename planning/{behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module/src}/manager.hpp (73%) rename planning/{behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module}/src/scene.cpp (96%) rename planning/{behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module/src}/scene.hpp (76%) rename planning/{behavior_path_avoidance_by_lane_change_module => autoware_behavior_path_avoidance_by_lane_change_module}/test/test_behavior_path_planner_node_interface.cpp (79%) delete mode 100644 planning/behavior_path_avoidance_by_lane_change_module/plugins.xml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index be202d123cd62..297ce75c5c176 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -144,6 +144,7 @@ perception/traffic_light_map_based_detector/** shunsuke.miura@tier4.jp tao.zhong perception/traffic_light_multi_camera_fusion/** shunsuke.miura@tier4.jp tao.zhong@tier4.jp perception/traffic_light_occlusion_predictor/** shunsuke.miura@tier4.jp tao.zhong@tier4.jp perception/traffic_light_visualization/** tao.zhong@tier4.jp yukihiro.saito@tier4.jp +planning/autoware_behavior_path_avoidance_by_lane_change_module/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/autoware_behavior_path_dynamic_obstacle_avoidance_module/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp planning/autoware_behavior_path_external_request_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/autoware_behavior_path_planner_common/** daniel.sanchez@tier4.jp fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp @@ -161,7 +162,6 @@ planning/autoware_planning_topic_converter/** kosuke.takeuchi@tier4.jp satoshi.o planning/autoware_remaining_distance_time_calculator/** ahmed.ebrahim@leodrive.ai planning/autoware_static_centerline_generator/** kosuke.takeuchi@tier4.jp takayuki.murooka@tier4.jp planning/autoware_velocity_smoother/** fumiya.watanabe@tier4.jp makoto.kurihara@tier4.jp satoshi.ota@tier4.jp takamasa.horibe@tier4.jp -planning/behavior_path_avoidance_by_lane_change_module/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/behavior_path_goal_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_path_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/behavior_path_planner/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp diff --git a/planning/.pages b/planning/.pages index 2decfad30e0da..be6bf0af9b2a9 100644 --- a/planning/.pages +++ b/planning/.pages @@ -10,7 +10,7 @@ nav: - 'Dynamic Drivable Area': planning/autoware_behavior_path_planner_common/docs/behavior_path_planner_drivable_area_design - 'Turn Signal': planning/autoware_behavior_path_planner_common/docs/behavior_path_planner_turn_signal_design - 'Scene Module': - - 'Avoidance by Lane Change': planning/behavior_path_avoidance_by_lane_change_module + - 'Avoidance by Lane Change': planning/autoware_behavior_path_avoidance_by_lane_change_module - 'Dynamic Obstacle Avoidance': planning/autoware_behavior_path_dynamic_obstacle_avoidance_module - 'Goal Planner': planning/behavior_path_goal_planner_module - 'Lane Change': planning/behavior_path_lane_change_module diff --git a/planning/behavior_path_avoidance_by_lane_change_module/CMakeLists.txt b/planning/autoware_behavior_path_avoidance_by_lane_change_module/CMakeLists.txt similarity index 90% rename from planning/behavior_path_avoidance_by_lane_change_module/CMakeLists.txt rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/CMakeLists.txt index bca909c7cef7e..2ab88e04f96e5 100644 --- a/planning/behavior_path_avoidance_by_lane_change_module/CMakeLists.txt +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(behavior_path_avoidance_by_lane_change_module) +project(autoware_behavior_path_avoidance_by_lane_change_module) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/planning/behavior_path_avoidance_by_lane_change_module/README.md b/planning/autoware_behavior_path_avoidance_by_lane_change_module/README.md similarity index 100% rename from planning/behavior_path_avoidance_by_lane_change_module/README.md rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/README.md diff --git a/planning/behavior_path_avoidance_by_lane_change_module/config/avoidance_by_lane_change.param.yaml b/planning/autoware_behavior_path_avoidance_by_lane_change_module/config/avoidance_by_lane_change.param.yaml similarity index 100% rename from planning/behavior_path_avoidance_by_lane_change_module/config/avoidance_by_lane_change.param.yaml rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/config/avoidance_by_lane_change.param.yaml diff --git a/planning/behavior_path_avoidance_by_lane_change_module/images/avoidance_by_lane_change.svg b/planning/autoware_behavior_path_avoidance_by_lane_change_module/images/avoidance_by_lane_change.svg similarity index 100% rename from planning/behavior_path_avoidance_by_lane_change_module/images/avoidance_by_lane_change.svg rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/images/avoidance_by_lane_change.svg diff --git a/planning/behavior_path_avoidance_by_lane_change_module/images/avoidance_by_lc_trigger_1.svg b/planning/autoware_behavior_path_avoidance_by_lane_change_module/images/avoidance_by_lc_trigger_1.svg similarity index 100% rename from planning/behavior_path_avoidance_by_lane_change_module/images/avoidance_by_lc_trigger_1.svg rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/images/avoidance_by_lc_trigger_1.svg diff --git a/planning/behavior_path_avoidance_by_lane_change_module/images/avoidance_by_lc_trigger_2.svg b/planning/autoware_behavior_path_avoidance_by_lane_change_module/images/avoidance_by_lc_trigger_2.svg similarity index 100% rename from planning/behavior_path_avoidance_by_lane_change_module/images/avoidance_by_lc_trigger_2.svg rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/images/avoidance_by_lc_trigger_2.svg diff --git a/planning/behavior_path_avoidance_by_lane_change_module/package.xml b/planning/autoware_behavior_path_avoidance_by_lane_change_module/package.xml similarity index 95% rename from planning/behavior_path_avoidance_by_lane_change_module/package.xml rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/package.xml index 57e30bd628e08..3a75849931228 100644 --- a/planning/behavior_path_avoidance_by_lane_change_module/package.xml +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/package.xml @@ -1,7 +1,7 @@ - behavior_path_avoidance_by_lane_change_module + autoware_behavior_path_avoidance_by_lane_change_module 0.1.0 The behavior_path_avoidance_by_lane_change_module package diff --git a/planning/autoware_behavior_path_avoidance_by_lane_change_module/plugins.xml b/planning/autoware_behavior_path_avoidance_by_lane_change_module/plugins.xml new file mode 100644 index 0000000000000..848d978329866 --- /dev/null +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/plugins.xml @@ -0,0 +1,3 @@ + + + diff --git a/planning/behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module/data_structs.hpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/data_structs.hpp similarity index 79% rename from planning/behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module/data_structs.hpp rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/src/data_structs.hpp index d7fd8b82bd71e..01f2fd7f1ee52 100644 --- a/planning/behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module/data_structs.hpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/data_structs.hpp @@ -11,13 +11,15 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_AVOIDANCE_BY_LANE_CHANGE_MODULE__DATA_STRUCTS_HPP_ -#define BEHAVIOR_PATH_AVOIDANCE_BY_LANE_CHANGE_MODULE__DATA_STRUCTS_HPP_ +#ifndef DATA_STRUCTS_HPP_ +#define DATA_STRUCTS_HPP_ #include "autoware_behavior_path_static_obstacle_avoidance_module/data_structs.hpp" -namespace behavior_path_planner +namespace autoware::behavior_path_planner { +using ::behavior_path_planner::AvoidanceParameters; + struct AvoidanceByLCParameters : public AvoidanceParameters { // execute only when the target object longitudinal distance is larger than this param. @@ -30,6 +32,6 @@ struct AvoidanceByLCParameters : public AvoidanceParameters { } }; -} // namespace behavior_path_planner +} // namespace autoware::behavior_path_planner -#endif // BEHAVIOR_PATH_AVOIDANCE_BY_LANE_CHANGE_MODULE__DATA_STRUCTS_HPP_ +#endif // DATA_STRUCTS_HPP_ diff --git a/planning/behavior_path_avoidance_by_lane_change_module/src/interface.cpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.cpp similarity index 92% rename from planning/behavior_path_avoidance_by_lane_change_module/src/interface.cpp rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.cpp index bae9112e6d840..c5070540152de 100644 --- a/planning/behavior_path_avoidance_by_lane_change_module/src/interface.cpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_avoidance_by_lane_change_module/interface.hpp" +#include "interface.hpp" #include "autoware_behavior_path_planner_common/interface/scene_module_interface.hpp" #include "autoware_behavior_path_planner_common/interface/scene_module_visitor.hpp" @@ -20,8 +20,11 @@ #include #include -namespace behavior_path_planner +namespace autoware::behavior_path_planner { +using ::behavior_path_planner::State; +using ::route_handler::Direction; + AvoidanceByLaneChangeInterface::AvoidanceByLaneChangeInterface( const std::string & name, rclcpp::Node & node, const std::shared_ptr & parameters, @@ -63,4 +66,4 @@ void AvoidanceByLaneChangeInterface::updateRTCStatus( uuid_map_.at(direction), isExecutionReady(), state, start_distance, finish_distance, clock_->now()); } -} // namespace behavior_path_planner +} // namespace autoware::behavior_path_planner diff --git a/planning/behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module/interface.hpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.hpp similarity index 77% rename from planning/behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module/interface.hpp rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.hpp index 897956a392008..75413c4dccfa6 100644 --- a/planning/behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module/interface.hpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_AVOIDANCE_BY_LANE_CHANGE_MODULE__INTERFACE_HPP_ -#define BEHAVIOR_PATH_AVOIDANCE_BY_LANE_CHANGE_MODULE__INTERFACE_HPP_ +#ifndef INTERFACE_HPP_ +#define INTERFACE_HPP_ -#include "behavior_path_avoidance_by_lane_change_module/data_structs.hpp" -#include "behavior_path_avoidance_by_lane_change_module/scene.hpp" #include "behavior_path_lane_change_module/interface.hpp" +#include "data_structs.hpp" +#include "scene.hpp" #include @@ -25,8 +25,12 @@ #include #include -namespace behavior_path_planner +namespace autoware::behavior_path_planner { +using ::behavior_path_planner::LaneChangeInterface; +using ::behavior_path_planner::ObjectsOfInterestMarkerInterface; +using ::behavior_path_planner::RTCInterface; + class AvoidanceByLaneChangeInterface : public LaneChangeInterface { public: @@ -45,6 +49,6 @@ class AvoidanceByLaneChangeInterface : public LaneChangeInterface protected: void updateRTCStatus(const double start_distance, const double finish_distance) override; }; -} // namespace behavior_path_planner +} // namespace autoware::behavior_path_planner -#endif // BEHAVIOR_PATH_AVOIDANCE_BY_LANE_CHANGE_MODULE__INTERFACE_HPP_ +#endif // INTERFACE_HPP_ diff --git a/planning/behavior_path_avoidance_by_lane_change_module/src/manager.cpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.cpp similarity index 96% rename from planning/behavior_path_avoidance_by_lane_change_module/src/manager.cpp rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.cpp index 868b2585170f9..792f0e93ac1b7 100644 --- a/planning/behavior_path_avoidance_by_lane_change_module/src/manager.cpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_avoidance_by_lane_change_module/manager.hpp" +#include "manager.hpp" #include "autoware_behavior_path_static_obstacle_avoidance_module/parameter_helper.hpp" -#include "behavior_path_avoidance_by_lane_change_module/data_structs.hpp" +#include "data_structs.hpp" #include "tier4_autoware_utils/ros/parameter.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" @@ -25,8 +25,10 @@ #include #include -namespace behavior_path_planner +namespace autoware::behavior_path_planner { +using ::behavior_path_planner::getParameter; +using ::behavior_path_planner::ObjectParameter; void AvoidanceByLaneChangeModuleManager::init(rclcpp::Node * node) { @@ -191,9 +193,9 @@ AvoidanceByLaneChangeModuleManager::createNewSceneModuleInstance() objects_of_interest_marker_interface_ptr_map_); } -} // namespace behavior_path_planner +} // namespace autoware::behavior_path_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_path_planner::AvoidanceByLaneChangeModuleManager, - behavior_path_planner::SceneModuleManagerInterface) + autoware::behavior_path_planner::AvoidanceByLaneChangeModuleManager, + ::behavior_path_planner::SceneModuleManagerInterface) diff --git a/planning/behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module/manager.hpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.hpp similarity index 73% rename from planning/behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module/manager.hpp rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.hpp index 75fa67e7fe1a3..f921aa4d7e31c 100644 --- a/planning/behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module/manager.hpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_AVOIDANCE_BY_LANE_CHANGE_MODULE__MANAGER_HPP_ -#define BEHAVIOR_PATH_AVOIDANCE_BY_LANE_CHANGE_MODULE__MANAGER_HPP_ +#ifndef MANAGER_HPP_ +#define MANAGER_HPP_ -#include "behavior_path_avoidance_by_lane_change_module/data_structs.hpp" -#include "behavior_path_avoidance_by_lane_change_module/interface.hpp" #include "behavior_path_lane_change_module/manager.hpp" +#include "data_structs.hpp" +#include "interface.hpp" #include @@ -26,9 +26,12 @@ #include #include -namespace behavior_path_planner +namespace autoware::behavior_path_planner { -using route_handler::Direction; +using ::behavior_path_planner::LaneChangeModuleManager; +using ::behavior_path_planner::LaneChangeModuleType; +using ::behavior_path_planner::SceneModuleInterface; +using ::route_handler::Direction; class AvoidanceByLaneChangeModuleManager : public LaneChangeModuleManager { @@ -47,6 +50,6 @@ class AvoidanceByLaneChangeModuleManager : public LaneChangeModuleManager private: std::shared_ptr avoidance_parameters_; }; -} // namespace behavior_path_planner +} // namespace autoware::behavior_path_planner -#endif // BEHAVIOR_PATH_AVOIDANCE_BY_LANE_CHANGE_MODULE__MANAGER_HPP_ +#endif // MANAGER_HPP_ diff --git a/planning/behavior_path_avoidance_by_lane_change_module/src/scene.cpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp similarity index 96% rename from planning/behavior_path_avoidance_by_lane_change_module/src/scene.cpp rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp index e0ebeebba955c..0647147dff0d0 100644 --- a/planning/behavior_path_avoidance_by_lane_change_module/src/scene.cpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_avoidance_by_lane_change_module/scene.hpp" +#include "scene.hpp" #include "autoware_behavior_path_planner_common/utils/drivable_area_expansion/static_drivable_area.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp" @@ -28,13 +28,19 @@ #include #include +#include #include #include #include -namespace behavior_path_planner +namespace autoware::behavior_path_planner { -using behavior_path_planner::utils::lane_change::debug::createExecutionArea; +using ::behavior_path_planner::Direction; +using ::behavior_path_planner::LaneChangeModuleType; +using ::behavior_path_planner::ObjectInfo; +using ::behavior_path_planner::Point2d; +using ::behavior_path_planner::utils::lane_change::debug::createExecutionArea; +namespace utils = ::behavior_path_planner::utils; AvoidanceByLaneChange::AvoidanceByLaneChange( const std::shared_ptr & parameters, @@ -293,4 +299,4 @@ double AvoidanceByLaneChange::calcLateralOffset() const } return additional_lat_offset; } -} // namespace behavior_path_planner +} // namespace autoware::behavior_path_planner diff --git a/planning/behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module/scene.hpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.hpp similarity index 76% rename from planning/behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module/scene.hpp rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.hpp index 4ef4c0673c0c5..6b39340da172a 100644 --- a/planning/behavior_path_avoidance_by_lane_change_module/include/behavior_path_avoidance_by_lane_change_module/scene.hpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.hpp @@ -12,19 +12,26 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_AVOIDANCE_BY_LANE_CHANGE_MODULE__SCENE_HPP_ -#define BEHAVIOR_PATH_AVOIDANCE_BY_LANE_CHANGE_MODULE__SCENE_HPP_ +#ifndef SCENE_HPP_ +#define SCENE_HPP_ #include "autoware_behavior_path_static_obstacle_avoidance_module/helper.hpp" -#include "behavior_path_avoidance_by_lane_change_module/data_structs.hpp" #include "behavior_path_lane_change_module/scene.hpp" +#include "data_structs.hpp" #include -namespace behavior_path_planner +namespace autoware::behavior_path_planner { +using ::behavior_path_planner::DebugData; using AvoidanceDebugData = DebugData; -using helper::static_obstacle_avoidance::AvoidanceHelper; +using ::behavior_path_planner::AvoidancePlanningData; +using ::behavior_path_planner::LaneChangeParameters; +using ::behavior_path_planner::NormalLaneChange; +using ::behavior_path_planner::ObjectData; +using ::behavior_path_planner::ObjectDataArray; +using ::behavior_path_planner::PredictedObject; +using ::behavior_path_planner::helper::static_obstacle_avoidance::AvoidanceHelper; class AvoidanceByLaneChange : public NormalLaneChange { @@ -59,6 +66,6 @@ class AvoidanceByLaneChange : public NormalLaneChange double calcMinimumLaneChangeLength() const; double calcLateralOffset() const; }; -} // namespace behavior_path_planner +} // namespace autoware::behavior_path_planner -#endif // BEHAVIOR_PATH_AVOIDANCE_BY_LANE_CHANGE_MODULE__SCENE_HPP_ +#endif // SCENE_HPP_ diff --git a/planning/behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp similarity index 79% rename from planning/behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp rename to planning/autoware_behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp index 69ce87aabc7b4..ea7979958e49e 100644 --- a/planning/behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp @@ -23,7 +23,7 @@ #include #include -using behavior_path_planner::BehaviorPathPlannerNode; +using ::behavior_path_planner::BehaviorPathPlannerNode; using planning_test_utils::PlanningInterfaceTestManager; std::shared_ptr generateTestManager() @@ -52,26 +52,26 @@ std::shared_ptr generateNode() ament_index_cpp::get_package_share_directory("behavior_path_lane_change_module"); std::vector module_names; - module_names.emplace_back("behavior_path_planner::AvoidanceByLaneChangeModuleManager"); + module_names.emplace_back("autoware::behavior_path_planner::AvoidanceByLaneChangeModuleManager"); std::vector params; params.emplace_back("launch_modules", module_names); node_options.parameter_overrides(params); test_utils::updateNodeOptions( - node_options, - {planning_test_utils_dir + "/config/test_common.param.yaml", - planning_test_utils_dir + "/config/test_nearest_search.param.yaml", - planning_test_utils_dir + "/config/test_vehicle_info.param.yaml", - behavior_path_planner_dir + "/config/behavior_path_planner.param.yaml", - behavior_path_planner_dir + "/config/drivable_area_expansion.param.yaml", - behavior_path_planner_dir + "/config/scene_module_manager.param.yaml", - behavior_path_lane_change_module_dir + "/config/lane_change.param.yaml", - ament_index_cpp::get_package_share_directory( - "autoware_behavior_path_static_obstacle_avoidance_module") + - "/config/static_obstacle_avoidance.param.yaml", - ament_index_cpp::get_package_share_directory("behavior_path_avoidance_by_lane_change_module") + - "/config/avoidance_by_lane_change.param.yaml"}); + node_options, {planning_test_utils_dir + "/config/test_common.param.yaml", + planning_test_utils_dir + "/config/test_nearest_search.param.yaml", + planning_test_utils_dir + "/config/test_vehicle_info.param.yaml", + behavior_path_planner_dir + "/config/behavior_path_planner.param.yaml", + behavior_path_planner_dir + "/config/drivable_area_expansion.param.yaml", + behavior_path_planner_dir + "/config/scene_module_manager.param.yaml", + behavior_path_lane_change_module_dir + "/config/lane_change.param.yaml", + ament_index_cpp::get_package_share_directory( + "autoware_behavior_path_static_obstacle_avoidance_module") + + "/config/static_obstacle_avoidance.param.yaml", + ament_index_cpp::get_package_share_directory( + "autoware_behavior_path_avoidance_by_lane_change_module") + + "/config/avoidance_by_lane_change.param.yaml"}); return std::make_shared(node_options); } diff --git a/planning/behavior_path_avoidance_by_lane_change_module/plugins.xml b/planning/behavior_path_avoidance_by_lane_change_module/plugins.xml deleted file mode 100644 index 092d54c096ae9..0000000000000 --- a/planning/behavior_path_avoidance_by_lane_change_module/plugins.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - From 7d12dcf51966c9c0217e8f26b7a7d9d816cbe81b Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sat, 8 Jun 2024 23:09:04 +0900 Subject: [PATCH 033/142] fix(tier4_planning_launch): unexpected modules were registered (#7377) Signed-off-by: Takayuki Murooka --- .../behavior_planning/behavior_planning.launch.xml | 2 +- .../motion_planning/motion_planning.launch.xml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml index 779ee5c7af34a..fdb6bc1d90643 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml @@ -92,7 +92,7 @@ /> diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml index 4ed38df2d3f09..0b82057144f0e 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml @@ -3,7 +3,7 @@ - + @@ -13,11 +13,11 @@ value="$(eval "'$(var motion_velocity_planner_launch_modules)' + 'autoware::motion_velocity_planner::OutOfLaneModule, '")" if="$(var launch_motion_out_of_lane_module)" /> - + + + + + From 3b036b156b2389a6e1794ba629d2ea80e456e22d Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sun, 9 Jun 2024 00:15:27 +0900 Subject: [PATCH 034/142] feat(autoware_velocity_smoother): use polling subscriber (#7216) feat(motion_velocity_smoother): use polling subscriber Signed-off-by: Takayuki Murooka --- .../autoware_velocity_smoother/node.hpp | 17 +++++----- .../autoware_velocity_smoother/src/node.cpp | 32 ++++++------------- 2 files changed, 18 insertions(+), 31 deletions(-) diff --git a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/node.hpp b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/node.hpp index 8ab7acd5ec9b3..160ee183d8a0a 100644 --- a/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/node.hpp +++ b/planning/autoware_velocity_smoother/include/autoware_velocity_smoother/node.hpp @@ -31,6 +31,7 @@ #include "tier4_autoware_utils/geometry/geometry.hpp" #include "tier4_autoware_utils/math/unit_conversion.hpp" #include "tier4_autoware_utils/ros/logger_level_configure.hpp" +#include "tier4_autoware_utils/ros/polling_subscriber.hpp" #include "tier4_autoware_utils/ros/self_pose_listener.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" @@ -86,11 +87,15 @@ class VelocitySmootherNode : public rclcpp::Node rclcpp::Publisher::SharedPtr pub_trajectory_; rclcpp::Publisher::SharedPtr pub_virtual_wall_; rclcpp::Publisher::SharedPtr pub_over_stop_velocity_; - rclcpp::Subscription::SharedPtr sub_current_odometry_; - rclcpp::Subscription::SharedPtr sub_current_acceleration_; rclcpp::Subscription::SharedPtr sub_current_trajectory_; - rclcpp::Subscription::SharedPtr sub_external_velocity_limit_; - rclcpp::Subscription::SharedPtr sub_operation_mode_; + tier4_autoware_utils::InterProcessPollingSubscriber sub_current_odometry_{ + this, "/localization/kinematic_state"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_current_acceleration_{this, "~/input/acceleration"}; + tier4_autoware_utils::InterProcessPollingSubscriber sub_external_velocity_limit_{ + this, "~/input/external_velocity_limit_mps"}; + tier4_autoware_utils::InterProcessPollingSubscriber sub_operation_mode_{ + this, "~/input/operation_mode_state"}; Odometry::ConstSharedPtr current_odometry_ptr_; // current odometry AccelWithCovarianceStamped::ConstSharedPtr current_acceleration_ptr_; @@ -180,12 +185,8 @@ class VelocitySmootherNode : public rclcpp::Node const std::vector & parameters); // topic callback - void onCurrentOdometry(const Odometry::ConstSharedPtr msg); - void onCurrentTrajectory(const Trajectory::ConstSharedPtr msg); - void onExternalVelocityLimit(const VelocityLimit::ConstSharedPtr msg); - void calcExternalVelocityLimit(); // publish methods diff --git a/planning/autoware_velocity_smoother/src/node.cpp b/planning/autoware_velocity_smoother/src/node.cpp index 0fd83871153f0..1541b19d70a1c 100644 --- a/planning/autoware_velocity_smoother/src/node.cpp +++ b/planning/autoware_velocity_smoother/src/node.cpp @@ -58,19 +58,6 @@ VelocitySmootherNode::VelocitySmootherNode(const rclcpp::NodeOptions & node_opti pub_over_stop_velocity_ = create_publisher("~/stop_speed_exceeded", 1); sub_current_trajectory_ = create_subscription( "~/input/trajectory", 1, std::bind(&VelocitySmootherNode::onCurrentTrajectory, this, _1)); - sub_current_odometry_ = create_subscription( - "/localization/kinematic_state", 1, - std::bind(&VelocitySmootherNode::onCurrentOdometry, this, _1)); - sub_external_velocity_limit_ = create_subscription( - "~/input/external_velocity_limit_mps", 1, - std::bind(&VelocitySmootherNode::onExternalVelocityLimit, this, _1)); - sub_current_acceleration_ = create_subscription( - "~/input/acceleration", 1, [this](const AccelWithCovarianceStamped::ConstSharedPtr msg) { - current_acceleration_ptr_ = msg; - }); - sub_operation_mode_ = create_subscription( - "~/input/operation_mode_state", 1, - [this](const OperationModeState::ConstSharedPtr msg) { operation_mode_ = *msg; }); // parameter update set_param_res_ = @@ -319,16 +306,6 @@ void VelocitySmootherNode::publishTrajectory(const TrajectoryPoints & trajectory pub_trajectory_, publishing_trajectory.header.stamp); } -void VelocitySmootherNode::onCurrentOdometry(const Odometry::ConstSharedPtr msg) -{ - current_odometry_ptr_ = msg; -} - -void VelocitySmootherNode::onExternalVelocityLimit(const VelocityLimit::ConstSharedPtr msg) -{ - external_velocity_limit_ptr_ = msg; -} - void VelocitySmootherNode::calcExternalVelocityLimit() { if (!external_velocity_limit_ptr_) { @@ -441,6 +418,15 @@ void VelocitySmootherNode::onCurrentTrajectory(const Trajectory::ConstSharedPtr base_traj_raw_ptr_ = msg; + // receive data + current_odometry_ptr_ = sub_current_odometry_.takeData(); + current_acceleration_ptr_ = sub_current_acceleration_.takeData(); + external_velocity_limit_ptr_ = sub_external_velocity_limit_.takeData(); + const auto operation_mode_ptr = sub_operation_mode_.takeData(); + if (operation_mode_ptr) { + operation_mode_ = *operation_mode_ptr; + } + // guard if (!checkData()) { return; From 14c75e6b3f5f8129cfa633b4ec370cf65c9106f4 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sun, 9 Jun 2024 02:08:14 +0900 Subject: [PATCH 035/142] feat(joy_controller): use polling subscriber (#7286) Signed-off-by: Takayuki Murooka --- .../include/joy_controller/joy_controller.hpp | 12 +++++---- control/joy_controller/package.xml | 1 + .../joy_controller/joy_controller_node.cpp | 27 +++++++++---------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/control/joy_controller/include/joy_controller/joy_controller.hpp b/control/joy_controller/include/joy_controller/joy_controller.hpp index e88f7bcb3904e..136637f0f1fd3 100644 --- a/control/joy_controller/include/joy_controller/joy_controller.hpp +++ b/control/joy_controller/include/joy_controller/joy_controller.hpp @@ -18,6 +18,7 @@ #include "joy_controller/joy_converter/joy_converter_base.hpp" #include +#include #include #include @@ -66,19 +67,20 @@ class AutowareJoyControllerNode : public rclcpp::Node double backward_accel_ratio_; // CallbackGroups - rclcpp::CallbackGroup::SharedPtr callback_group_subscribers_; rclcpp::CallbackGroup::SharedPtr callback_group_services_; // Subscriber - rclcpp::Subscription::SharedPtr sub_joy_; - rclcpp::Subscription::SharedPtr sub_odom_; + tier4_autoware_utils::InterProcessPollingSubscriber sub_joy_{ + this, "input/joy"}; + tier4_autoware_utils::InterProcessPollingSubscriber sub_odom_{ + this, "input/odometry"}; rclcpp::Time last_joy_received_time_; std::shared_ptr joy_; geometry_msgs::msg::TwistStamped::ConstSharedPtr twist_; - void onJoy(const sensor_msgs::msg::Joy::ConstSharedPtr msg); - void onOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg); + void onJoy(); + void onOdometry(); // Publisher rclcpp::Publisher::SharedPtr pub_control_command_; diff --git a/control/joy_controller/package.xml b/control/joy_controller/package.xml index f7a5ed805b8ad..f160d561057e8 100644 --- a/control/joy_controller/package.xml +++ b/control/joy_controller/package.xml @@ -26,6 +26,7 @@ sensor_msgs std_srvs tier4_api_utils + tier4_autoware_utils tier4_control_msgs tier4_external_api_msgs diff --git a/control/joy_controller/src/joy_controller/joy_controller_node.cpp b/control/joy_controller/src/joy_controller/joy_controller_node.cpp index 39198825f9c4e..313d4498395b8 100644 --- a/control/joy_controller/src/joy_controller/joy_controller_node.cpp +++ b/control/joy_controller/src/joy_controller/joy_controller_node.cpp @@ -148,8 +148,9 @@ double calcMapping(const double input, const double sensitivity) namespace joy_controller { -void AutowareJoyControllerNode::onJoy(const sensor_msgs::msg::Joy::ConstSharedPtr msg) +void AutowareJoyControllerNode::onJoy() { + const auto msg = sub_joy_.takeData(); last_joy_received_time_ = msg->header.stamp; if (joy_type_ == "G29") { joy_ = std::make_shared(*msg); @@ -190,8 +191,13 @@ void AutowareJoyControllerNode::onJoy(const sensor_msgs::msg::Joy::ConstSharedPt } } -void AutowareJoyControllerNode::onOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg) +void AutowareJoyControllerNode::onOdometry() { + if (raw_control_) { + return; + } + + const auto msg = sub_odom_.takeData(); auto twist = std::make_shared(); twist->header = msg->header; twist->twist = msg->twist.twist; @@ -243,6 +249,9 @@ bool AutowareJoyControllerNode::isDataReady() void AutowareJoyControllerNode::onTimer() { + onOdometry(); + onJoy(); + if (!isDataReady()) { return; } @@ -470,23 +479,11 @@ AutowareJoyControllerNode::AutowareJoyControllerNode(const rclcpp::NodeOptions & RCLCPP_INFO(get_logger(), "Joy type: %s", joy_type_.c_str()); // Callback Groups - callback_group_subscribers_ = - this->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive); callback_group_services_ = this->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive); - auto subscriber_option = rclcpp::SubscriptionOptions(); - subscriber_option.callback_group = callback_group_subscribers_; // Subscriber - sub_joy_ = this->create_subscription( - "input/joy", 1, std::bind(&AutowareJoyControllerNode::onJoy, this, std::placeholders::_1), - subscriber_option); - if (!raw_control_) { - sub_odom_ = this->create_subscription( - "input/odometry", 1, - std::bind(&AutowareJoyControllerNode::onOdometry, this, std::placeholders::_1), - subscriber_option); - } else { + if (raw_control_) { twist_ = std::make_shared(); } From af9db8c22ee26fa0b713bab6a0f85c427edde32c Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sun, 9 Jun 2024 03:16:39 +0900 Subject: [PATCH 036/142] refactor(joy_controller)!: prefix package and namespace with autoware (#7382) * add prefix Signed-off-by: Takayuki Murooka * fix codeowner Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .github/CODEOWNERS | 2 +- .../autoware_joy_controller/CMakeLists.txt | 20 ++++++++++++++++ .../README.md | 10 ++++---- .../config/joy_controller_ds4.param.yaml | 0 .../config/joy_controller_g29.param.yaml | 0 .../config/joy_controller_p65.param.yaml | 0 .../config/joy_controller_xbox.param.yaml | 0 .../joy_controller.hpp | 12 +++++----- .../joy_converter/ds4_joy_converter.hpp | 12 +++++----- .../joy_converter/g29_joy_converter.hpp | 12 +++++----- .../joy_converter/joy_converter_base.hpp | 10 ++++---- .../joy_converter/p65_joy_converter.hpp | 12 +++++----- .../joy_converter/xbox_joy_converter.hpp | 12 +++++----- .../launch/joy_controller.launch.xml | 4 ++-- .../joy_controller_param_selection.launch.xml | 7 ++++++ .../package.xml | 4 ++-- .../schema/joy_controller.schema.json | 4 ++-- .../src}/joy_controller_node.cpp | 24 +++++++++---------- control/joy_controller/CMakeLists.txt | 20 ---------------- .../joy_controller_param_selection.launch.xml | 7 ------ 20 files changed, 86 insertions(+), 86 deletions(-) create mode 100644 control/autoware_joy_controller/CMakeLists.txt rename control/{joy_controller => autoware_joy_controller}/README.md (94%) rename control/{joy_controller => autoware_joy_controller}/config/joy_controller_ds4.param.yaml (100%) rename control/{joy_controller => autoware_joy_controller}/config/joy_controller_g29.param.yaml (100%) rename control/{joy_controller => autoware_joy_controller}/config/joy_controller_p65.param.yaml (100%) rename control/{joy_controller => autoware_joy_controller}/config/joy_controller_xbox.param.yaml (100%) rename control/{joy_controller/include/joy_controller => autoware_joy_controller/include/autoware_joy_controller}/joy_controller.hpp (93%) rename control/{joy_controller/include/joy_controller => autoware_joy_controller/include/autoware_joy_controller}/joy_converter/ds4_joy_converter.hpp (89%) rename control/{joy_controller/include/joy_controller => autoware_joy_controller/include/autoware_joy_controller}/joy_converter/g29_joy_converter.hpp (88%) rename control/{joy_controller/include/joy_controller => autoware_joy_controller/include/autoware_joy_controller}/joy_converter/joy_converter_base.hpp (82%) rename control/{joy_controller/include/joy_controller => autoware_joy_controller/include/autoware_joy_controller}/joy_converter/p65_joy_converter.hpp (88%) rename control/{joy_controller/include/joy_controller => autoware_joy_controller/include/autoware_joy_controller}/joy_converter/xbox_joy_converter.hpp (88%) rename control/{joy_controller => autoware_joy_controller}/launch/joy_controller.launch.xml (89%) create mode 100644 control/autoware_joy_controller/launch/joy_controller_param_selection.launch.xml rename control/{joy_controller => autoware_joy_controller}/package.xml (93%) rename control/{joy_controller => autoware_joy_controller}/schema/joy_controller.schema.json (97%) rename control/{joy_controller/src/joy_controller => autoware_joy_controller/src}/joy_controller_node.cpp (95%) delete mode 100644 control/joy_controller/CMakeLists.txt delete mode 100644 control/joy_controller/launch/joy_controller_param_selection.launch.xml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 297ce75c5c176..838194e44583c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -48,7 +48,7 @@ control/autoware_autonomous_emergency_braking/** daniel.sanchez@tier4.jp mamoru. control/control_performance_analysis/** berkay@leodrive.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/control_validator/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/external_cmd_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp -control/joy_controller/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp +control/autoware_joy_controller/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/autoware_lane_departure_checker/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp control/mpc_lateral_controller/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/obstacle_collision_checker/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp diff --git a/control/autoware_joy_controller/CMakeLists.txt b/control/autoware_joy_controller/CMakeLists.txt new file mode 100644 index 0000000000000..9c7d8b3ad475a --- /dev/null +++ b/control/autoware_joy_controller/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.14) +project(autoware_joy_controller) + +find_package(autoware_cmake REQUIRED) +autoware_package() + +ament_auto_add_library(autoware_joy_controller_node SHARED + DIRECTORY src +) + +rclcpp_components_register_node(autoware_joy_controller_node + PLUGIN "autoware::joy_controller::AutowareJoyControllerNode" + EXECUTABLE autoware_joy_controller +) + +ament_auto_package( + INSTALL_TO_SHARE + launch + config +) diff --git a/control/joy_controller/README.md b/control/autoware_joy_controller/README.md similarity index 94% rename from control/joy_controller/README.md rename to control/autoware_joy_controller/README.md index 73e3644df49ac..a6919356f3dbc 100644 --- a/control/joy_controller/README.md +++ b/control/autoware_joy_controller/README.md @@ -1,8 +1,8 @@ -# joy_controller +# autoware_joy_controller ## Role -`joy_controller` is the package to convert a joy msg to autoware commands (e.g. steering wheel, shift, turn signal, engage) for a vehicle. +`autoware_joy_controller` is the package to convert a joy msg to autoware commands (e.g. steering wheel, shift, turn signal, engage) for a vehicle. ## Usage @@ -10,13 +10,13 @@ ```bash # With default config (ds4) -ros2 launch joy_controller joy_controller.launch.xml +ros2 launch autoware_joy_controller joy_controller.launch.xml # Default config but select from the existing parameter files -ros2 launch joy_controller joy_controller_param_selection.launch.xml joy_type:=ds4 # or g29, p65, xbox +ros2 launch autoware_joy_controller joy_controller_param_selection.launch.xml joy_type:=ds4 # or g29, p65, xbox # Override the param file -ros2 launch joy_controller joy_controller.launch.xml config_file:=/path/to/your/param.yaml +ros2 launch autoware_joy_controller joy_controller.launch.xml config_file:=/path/to/your/param.yaml ``` ## Input / Output diff --git a/control/joy_controller/config/joy_controller_ds4.param.yaml b/control/autoware_joy_controller/config/joy_controller_ds4.param.yaml similarity index 100% rename from control/joy_controller/config/joy_controller_ds4.param.yaml rename to control/autoware_joy_controller/config/joy_controller_ds4.param.yaml diff --git a/control/joy_controller/config/joy_controller_g29.param.yaml b/control/autoware_joy_controller/config/joy_controller_g29.param.yaml similarity index 100% rename from control/joy_controller/config/joy_controller_g29.param.yaml rename to control/autoware_joy_controller/config/joy_controller_g29.param.yaml diff --git a/control/joy_controller/config/joy_controller_p65.param.yaml b/control/autoware_joy_controller/config/joy_controller_p65.param.yaml similarity index 100% rename from control/joy_controller/config/joy_controller_p65.param.yaml rename to control/autoware_joy_controller/config/joy_controller_p65.param.yaml diff --git a/control/joy_controller/config/joy_controller_xbox.param.yaml b/control/autoware_joy_controller/config/joy_controller_xbox.param.yaml similarity index 100% rename from control/joy_controller/config/joy_controller_xbox.param.yaml rename to control/autoware_joy_controller/config/joy_controller_xbox.param.yaml diff --git a/control/joy_controller/include/joy_controller/joy_controller.hpp b/control/autoware_joy_controller/include/autoware_joy_controller/joy_controller.hpp similarity index 93% rename from control/joy_controller/include/joy_controller/joy_controller.hpp rename to control/autoware_joy_controller/include/autoware_joy_controller/joy_controller.hpp index 136637f0f1fd3..88371455def62 100644 --- a/control/joy_controller/include/joy_controller/joy_controller.hpp +++ b/control/autoware_joy_controller/include/autoware_joy_controller/joy_controller.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef JOY_CONTROLLER__JOY_CONTROLLER_HPP_ -#define JOY_CONTROLLER__JOY_CONTROLLER_HPP_ +#ifndef AUTOWARE_JOY_CONTROLLER__JOY_CONTROLLER_HPP_ +#define AUTOWARE_JOY_CONTROLLER__JOY_CONTROLLER_HPP_ -#include "joy_controller/joy_converter/joy_converter_base.hpp" +#include "autoware_joy_controller/joy_converter/joy_converter_base.hpp" #include #include @@ -37,7 +37,7 @@ #include #include -namespace joy_controller +namespace autoware::joy_controller { using GearShiftType = tier4_external_api_msgs::msg::GearShift::_data_type; using TurnSignalType = tier4_external_api_msgs::msg::TurnSignal::_data_type; @@ -120,6 +120,6 @@ class AutowareJoyControllerNode : public rclcpp::Node bool isDataReady(); void onTimer(); }; -} // namespace joy_controller +} // namespace autoware::joy_controller -#endif // JOY_CONTROLLER__JOY_CONTROLLER_HPP_ +#endif // AUTOWARE_JOY_CONTROLLER__JOY_CONTROLLER_HPP_ diff --git a/control/joy_controller/include/joy_controller/joy_converter/ds4_joy_converter.hpp b/control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/ds4_joy_converter.hpp similarity index 89% rename from control/joy_controller/include/joy_controller/joy_converter/ds4_joy_converter.hpp rename to control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/ds4_joy_converter.hpp index faa920d493478..7cfac1af8662b 100644 --- a/control/joy_controller/include/joy_controller/joy_converter/ds4_joy_converter.hpp +++ b/control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/ds4_joy_converter.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef JOY_CONTROLLER__JOY_CONVERTER__DS4_JOY_CONVERTER_HPP_ -#define JOY_CONTROLLER__JOY_CONVERTER__DS4_JOY_CONVERTER_HPP_ +#ifndef AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__DS4_JOY_CONVERTER_HPP_ +#define AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__DS4_JOY_CONVERTER_HPP_ -#include "joy_controller/joy_converter/joy_converter_base.hpp" +#include "autoware_joy_controller/joy_converter/joy_converter_base.hpp" #include -namespace joy_controller +namespace autoware::joy_controller { class DS4JoyConverter : public JoyConverterBase { @@ -90,6 +90,6 @@ class DS4JoyConverter : public JoyConverterBase bool reverse() const { return Share(); } }; -} // namespace joy_controller +} // namespace autoware::joy_controller -#endif // JOY_CONTROLLER__JOY_CONVERTER__DS4_JOY_CONVERTER_HPP_ +#endif // AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__DS4_JOY_CONVERTER_HPP_ diff --git a/control/joy_controller/include/joy_controller/joy_converter/g29_joy_converter.hpp b/control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/g29_joy_converter.hpp similarity index 88% rename from control/joy_controller/include/joy_controller/joy_converter/g29_joy_converter.hpp rename to control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/g29_joy_converter.hpp index 7ba062fe10d19..a36ad3a580287 100644 --- a/control/joy_controller/include/joy_controller/joy_converter/g29_joy_converter.hpp +++ b/control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/g29_joy_converter.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef JOY_CONTROLLER__JOY_CONVERTER__G29_JOY_CONVERTER_HPP_ -#define JOY_CONTROLLER__JOY_CONVERTER__G29_JOY_CONVERTER_HPP_ +#ifndef AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__G29_JOY_CONVERTER_HPP_ +#define AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__G29_JOY_CONVERTER_HPP_ -#include "joy_controller/joy_converter/joy_converter_base.hpp" +#include "autoware_joy_controller/joy_converter/joy_converter_base.hpp" -namespace joy_controller +namespace autoware::joy_controller { class G29JoyConverter : public JoyConverterBase { @@ -88,6 +88,6 @@ class G29JoyConverter : public JoyConverterBase bool reverse() const { return Share(); } }; -} // namespace joy_controller +} // namespace autoware::joy_controller -#endif // JOY_CONTROLLER__JOY_CONVERTER__G29_JOY_CONVERTER_HPP_ +#endif // AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__G29_JOY_CONVERTER_HPP_ diff --git a/control/joy_controller/include/joy_controller/joy_converter/joy_converter_base.hpp b/control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/joy_converter_base.hpp similarity index 82% rename from control/joy_controller/include/joy_controller/joy_converter/joy_converter_base.hpp rename to control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/joy_converter_base.hpp index 94587b88e22f5..98a8b799d71a9 100644 --- a/control/joy_controller/include/joy_controller/joy_converter/joy_converter_base.hpp +++ b/control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/joy_converter_base.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef JOY_CONTROLLER__JOY_CONVERTER__JOY_CONVERTER_BASE_HPP_ -#define JOY_CONTROLLER__JOY_CONVERTER__JOY_CONVERTER_BASE_HPP_ +#ifndef AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__JOY_CONVERTER_BASE_HPP_ +#define AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__JOY_CONVERTER_BASE_HPP_ #include #include -namespace joy_controller +namespace autoware::joy_controller { class JoyConverterBase { @@ -50,6 +50,6 @@ class JoyConverterBase virtual bool vehicle_engage() const = 0; virtual bool vehicle_disengage() const = 0; }; -} // namespace joy_controller +} // namespace autoware::joy_controller -#endif // JOY_CONTROLLER__JOY_CONVERTER__JOY_CONVERTER_BASE_HPP_ +#endif // AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__JOY_CONVERTER_BASE_HPP_ diff --git a/control/joy_controller/include/joy_controller/joy_converter/p65_joy_converter.hpp b/control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/p65_joy_converter.hpp similarity index 88% rename from control/joy_controller/include/joy_controller/joy_converter/p65_joy_converter.hpp rename to control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/p65_joy_converter.hpp index e4cb822846fef..a6f51cb95b44d 100644 --- a/control/joy_controller/include/joy_controller/joy_converter/p65_joy_converter.hpp +++ b/control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/p65_joy_converter.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef JOY_CONTROLLER__JOY_CONVERTER__P65_JOY_CONVERTER_HPP_ -#define JOY_CONTROLLER__JOY_CONVERTER__P65_JOY_CONVERTER_HPP_ +#ifndef AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__P65_JOY_CONVERTER_HPP_ +#define AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__P65_JOY_CONVERTER_HPP_ -#include "joy_controller/joy_converter/joy_converter_base.hpp" +#include "autoware_joy_controller/joy_converter/joy_converter_base.hpp" #include -namespace joy_controller +namespace autoware::joy_controller { class P65JoyConverter : public JoyConverterBase { @@ -76,6 +76,6 @@ class P65JoyConverter : public JoyConverterBase const sensor_msgs::msg::Joy j_; }; -} // namespace joy_controller +} // namespace autoware::joy_controller -#endif // JOY_CONTROLLER__JOY_CONVERTER__P65_JOY_CONVERTER_HPP_ +#endif // AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__P65_JOY_CONVERTER_HPP_ diff --git a/control/joy_controller/include/joy_controller/joy_converter/xbox_joy_converter.hpp b/control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/xbox_joy_converter.hpp similarity index 88% rename from control/joy_controller/include/joy_controller/joy_converter/xbox_joy_converter.hpp rename to control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/xbox_joy_converter.hpp index a009ee1e12975..776b0c98b7835 100644 --- a/control/joy_controller/include/joy_controller/joy_converter/xbox_joy_converter.hpp +++ b/control/autoware_joy_controller/include/autoware_joy_controller/joy_converter/xbox_joy_converter.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef JOY_CONTROLLER__JOY_CONVERTER__XBOX_JOY_CONVERTER_HPP_ -#define JOY_CONTROLLER__JOY_CONVERTER__XBOX_JOY_CONVERTER_HPP_ +#ifndef AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__XBOX_JOY_CONVERTER_HPP_ +#define AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__XBOX_JOY_CONVERTER_HPP_ -#include "joy_controller/joy_converter/joy_converter_base.hpp" +#include "autoware_joy_controller/joy_converter/joy_converter_base.hpp" #include -namespace joy_controller +namespace autoware::joy_controller { class XBOXJoyConverter : public JoyConverterBase { @@ -76,6 +76,6 @@ class XBOXJoyConverter : public JoyConverterBase const sensor_msgs::msg::Joy j_; }; -} // namespace joy_controller +} // namespace autoware::joy_controller -#endif // JOY_CONTROLLER__JOY_CONVERTER__XBOX_JOY_CONVERTER_HPP_ +#endif // AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__XBOX_JOY_CONVERTER_HPP_ diff --git a/control/joy_controller/launch/joy_controller.launch.xml b/control/autoware_joy_controller/launch/joy_controller.launch.xml similarity index 89% rename from control/joy_controller/launch/joy_controller.launch.xml rename to control/autoware_joy_controller/launch/joy_controller.launch.xml index 5236077680d0d..02220f0026cea 100644 --- a/control/joy_controller/launch/joy_controller.launch.xml +++ b/control/autoware_joy_controller/launch/joy_controller.launch.xml @@ -12,9 +12,9 @@ - + - + diff --git a/control/autoware_joy_controller/launch/joy_controller_param_selection.launch.xml b/control/autoware_joy_controller/launch/joy_controller_param_selection.launch.xml new file mode 100644 index 0000000000000..3d0aae9a45c4a --- /dev/null +++ b/control/autoware_joy_controller/launch/joy_controller_param_selection.launch.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/control/joy_controller/package.xml b/control/autoware_joy_controller/package.xml similarity index 93% rename from control/joy_controller/package.xml rename to control/autoware_joy_controller/package.xml index f160d561057e8..10e33d5d6564a 100644 --- a/control/joy_controller/package.xml +++ b/control/autoware_joy_controller/package.xml @@ -1,9 +1,9 @@ - joy_controller + autoware_joy_controller 0.1.0 - The joy_controller package + The autoware_joy_controller package Taiki Tanaka Tomoya Kimura Shumpei Wakabayashi diff --git a/control/joy_controller/schema/joy_controller.schema.json b/control/autoware_joy_controller/schema/joy_controller.schema.json similarity index 97% rename from control/joy_controller/schema/joy_controller.schema.json rename to control/autoware_joy_controller/schema/joy_controller.schema.json index d4c6351324935..4c95057aec46d 100644 --- a/control/joy_controller/schema/joy_controller.schema.json +++ b/control/autoware_joy_controller/schema/joy_controller.schema.json @@ -3,7 +3,7 @@ "title": "Parameters for Joy Controller node", "type": "object", "definitions": { - "joy_controller": { + "autoware_joy_controller": { "type": "object", "properties": { "joy_type": { @@ -112,7 +112,7 @@ "type": "object", "properties": { "ros__parameters": { - "$ref": "#/definitions/joy_controller" + "$ref": "#/definitions/autoware_joy_controller" } }, "required": ["ros__parameters"], diff --git a/control/joy_controller/src/joy_controller/joy_controller_node.cpp b/control/autoware_joy_controller/src/joy_controller_node.cpp similarity index 95% rename from control/joy_controller/src/joy_controller/joy_controller_node.cpp rename to control/autoware_joy_controller/src/joy_controller_node.cpp index 313d4498395b8..2491893a2806c 100644 --- a/control/joy_controller/src/joy_controller/joy_controller_node.cpp +++ b/control/autoware_joy_controller/src/joy_controller_node.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "joy_controller/joy_controller.hpp" -#include "joy_controller/joy_converter/ds4_joy_converter.hpp" -#include "joy_controller/joy_converter/g29_joy_converter.hpp" -#include "joy_controller/joy_converter/p65_joy_converter.hpp" -#include "joy_controller/joy_converter/xbox_joy_converter.hpp" +#include "autoware_joy_controller/joy_controller.hpp" +#include "autoware_joy_controller/joy_converter/ds4_joy_converter.hpp" +#include "autoware_joy_controller/joy_converter/g29_joy_converter.hpp" +#include "autoware_joy_controller/joy_converter/p65_joy_converter.hpp" +#include "autoware_joy_controller/joy_converter/xbox_joy_converter.hpp" #include @@ -27,9 +27,9 @@ namespace { -using joy_controller::GateModeType; -using joy_controller::GearShiftType; -using joy_controller::TurnSignalType; +using autoware::joy_controller::GateModeType; +using autoware::joy_controller::GearShiftType; +using autoware::joy_controller::TurnSignalType; using GearShift = tier4_external_api_msgs::msg::GearShift; using TurnSignal = tier4_external_api_msgs::msg::TurnSignal; using GateMode = tier4_control_msgs::msg::GateMode; @@ -146,7 +146,7 @@ double calcMapping(const double input, const double sensitivity) } // namespace -namespace joy_controller +namespace autoware::joy_controller { void AutowareJoyControllerNode::onJoy() { @@ -459,7 +459,7 @@ void AutowareJoyControllerNode::initTimer(double period_s) } AutowareJoyControllerNode::AutowareJoyControllerNode(const rclcpp::NodeOptions & node_options) -: Node("joy_controller", node_options) +: Node("autoware_joy_controller", node_options) { // Parameter joy_type_ = declare_parameter("joy_type"); @@ -521,7 +521,7 @@ AutowareJoyControllerNode::AutowareJoyControllerNode(const rclcpp::NodeOptions & // Timer initTimer(1.0 / update_rate_); } -} // namespace joy_controller +} // namespace autoware::joy_controller #include -RCLCPP_COMPONENTS_REGISTER_NODE(joy_controller::AutowareJoyControllerNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::joy_controller::AutowareJoyControllerNode) diff --git a/control/joy_controller/CMakeLists.txt b/control/joy_controller/CMakeLists.txt deleted file mode 100644 index f000c8c0909f4..0000000000000 --- a/control/joy_controller/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(joy_controller) - -find_package(autoware_cmake REQUIRED) -autoware_package() - -ament_auto_add_library(joy_controller_node SHARED - src/joy_controller/joy_controller_node.cpp -) - -rclcpp_components_register_node(joy_controller_node - PLUGIN "joy_controller::AutowareJoyControllerNode" - EXECUTABLE joy_controller -) - -ament_auto_package( - INSTALL_TO_SHARE - launch - config -) diff --git a/control/joy_controller/launch/joy_controller_param_selection.launch.xml b/control/joy_controller/launch/joy_controller_param_selection.launch.xml deleted file mode 100644 index d8e3d0bfe8b25..0000000000000 --- a/control/joy_controller/launch/joy_controller_param_selection.launch.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - From a6ef8bb9ac20cf774ba42d6b0fde49f5efbc0966 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sun, 9 Jun 2024 03:23:32 +0900 Subject: [PATCH 037/142] feat(tier4_autoware_utils): suppress too many warning of TF transform failure (#7378) Signed-off-by: Takayuki Murooka --- .../tier4_autoware_utils/ros/transform_listener.hpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/transform_listener.hpp b/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/transform_listener.hpp index ffc845575a76f..96b1cc6ea6ccc 100644 --- a/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/transform_listener.hpp +++ b/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/transform_listener.hpp @@ -48,8 +48,9 @@ class TransformListener try { tf = tf_buffer_->lookupTransform(from, to, tf2::TimePointZero); } catch (tf2::TransformException & ex) { - RCLCPP_WARN( - logger_, "failed to get transform from %s to %s: %s", from.c_str(), to.c_str(), ex.what()); + RCLCPP_WARN_THROTTLE( + logger_, *clock_, 5000, "failed to get transform from %s to %s: %s", from.c_str(), + to.c_str(), ex.what()); return {}; } @@ -64,8 +65,9 @@ class TransformListener try { tf = tf_buffer_->lookupTransform(from, to, time, duration); } catch (tf2::TransformException & ex) { - RCLCPP_WARN( - logger_, "failed to get transform from %s to %s: %s", from.c_str(), to.c_str(), ex.what()); + RCLCPP_WARN_THROTTLE( + logger_, *clock_, 5000, "failed to get transform from %s to %s: %s", from.c_str(), + to.c_str(), ex.what()); return {}; } From a082e6400a565149270ff11ad30ae7234ca3c102 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sun, 9 Jun 2024 03:43:01 +0900 Subject: [PATCH 038/142] refactor(pid_longitudinal_controller)!: prefix package and namespace with autoware (#7383) * add prefix Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix trajectory follower node param Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .github/CODEOWNERS | 2 +- .../CMakeLists.txt | 7 ++----- .../README.md | 0 .../debug_values.hpp | 7 ++++--- .../longitudinal_controller_utils.hpp | 6 +++--- .../lowpass_filter.hpp | 6 +++--- .../pid.hpp | 6 +++--- .../pid_longitudinal_controller.hpp | 18 +++++++++--------- .../smooth_stop.hpp | 6 +++--- .../media/BrakeKeeping.drawio.svg | 0 .../LongitudinalControllerDiagram.drawio.svg | 0 ...tudinalControllerStateTransition.drawio.svg | 0 .../media/slope_definition.drawio.svg | 0 .../package.xml | 2 +- ...longitudinal_controller_defaults.param.yaml | 0 .../src/longitudinal_controller_utils.cpp | 2 +- .../src/pid.cpp | 2 +- .../src/pid_longitudinal_controller.cpp | 4 ++-- .../src/smooth_stop.cpp | 2 +- .../test_longitudinal_controller_utils.cpp | 2 +- .../test/test_pid.cpp | 2 +- .../test/test_smooth_stop.cpp | 2 +- control/trajectory_follower_node/package.xml | 2 +- .../param/longitudinal/pid.param.yaml | 5 +++-- .../src/controller_node.cpp | 2 +- .../test/test_controller_node.cpp | 2 +- 26 files changed, 43 insertions(+), 44 deletions(-) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/CMakeLists.txt (80%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/README.md (100%) rename control/{pid_longitudinal_controller/include/pid_longitudinal_controller => autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller}/debug_values.hpp (92%) rename control/{pid_longitudinal_controller/include/pid_longitudinal_controller => autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller}/longitudinal_controller_utils.hpp (96%) rename control/{pid_longitudinal_controller/include/pid_longitudinal_controller => autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller}/lowpass_filter.hpp (89%) rename control/{pid_longitudinal_controller/include/pid_longitudinal_controller => autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller}/pid.hpp (94%) rename control/{pid_longitudinal_controller/include/pid_longitudinal_controller => autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller}/pid_longitudinal_controller.hpp (95%) rename control/{pid_longitudinal_controller/include/pid_longitudinal_controller => autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller}/smooth_stop.hpp (95%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/media/BrakeKeeping.drawio.svg (100%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/media/LongitudinalControllerDiagram.drawio.svg (100%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/media/LongitudinalControllerStateTransition.drawio.svg (100%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/media/slope_definition.drawio.svg (100%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/package.xml (97%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/param/longitudinal_controller_defaults.param.yaml (100%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/src/longitudinal_controller_utils.cpp (98%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/src/pid.cpp (98%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/src/pid_longitudinal_controller.cpp (99%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/src/smooth_stop.cpp (98%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/test/test_longitudinal_controller_utils.cpp (99%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/test/test_pid.cpp (97%) rename control/{pid_longitudinal_controller => autoware_pid_longitudinal_controller}/test/test_smooth_stop.cpp (98%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 838194e44583c..eb9aca8a208d6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -53,7 +53,7 @@ control/autoware_lane_departure_checker/** kyoichi.sugahara@tier4.jp makoto.kuri control/mpc_lateral_controller/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/obstacle_collision_checker/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/operation_mode_transition_manager/** takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp -control/pid_longitudinal_controller/** mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +control/autoware_pid_longitudinal_controller/** mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/predicted_path_checker/** berkay@leodrive.ai control/pure_pursuit/** takamasa.horibe@tier4.jp control/shift_decider/** takamasa.horibe@tier4.jp diff --git a/control/pid_longitudinal_controller/CMakeLists.txt b/control/autoware_pid_longitudinal_controller/CMakeLists.txt similarity index 80% rename from control/pid_longitudinal_controller/CMakeLists.txt rename to control/autoware_pid_longitudinal_controller/CMakeLists.txt index 3e7a992b15e00..f0dce81eb54e1 100644 --- a/control/pid_longitudinal_controller/CMakeLists.txt +++ b/control/autoware_pid_longitudinal_controller/CMakeLists.txt @@ -1,15 +1,12 @@ cmake_minimum_required(VERSION 3.14) -project(pid_longitudinal_controller) +project(autoware_pid_longitudinal_controller) find_package(autoware_cmake REQUIRED) autoware_package() set(PID_LON_CON_LIB ${PROJECT_NAME}_lib) ament_auto_add_library(${PID_LON_CON_LIB} SHARED - src/pid_longitudinal_controller.cpp - src/pid.cpp - src/smooth_stop.cpp - src/longitudinal_controller_utils.cpp + DIRECTORY src ) if(BUILD_TESTING) diff --git a/control/pid_longitudinal_controller/README.md b/control/autoware_pid_longitudinal_controller/README.md similarity index 100% rename from control/pid_longitudinal_controller/README.md rename to control/autoware_pid_longitudinal_controller/README.md diff --git a/control/pid_longitudinal_controller/include/pid_longitudinal_controller/debug_values.hpp b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/debug_values.hpp similarity index 92% rename from control/pid_longitudinal_controller/include/pid_longitudinal_controller/debug_values.hpp rename to control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/debug_values.hpp index 409af46b16ed1..bd682f9566134 100644 --- a/control/pid_longitudinal_controller/include/pid_longitudinal_controller/debug_values.hpp +++ b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/debug_values.hpp @@ -12,10 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PID_LONGITUDINAL_CONTROLLER__DEBUG_VALUES_HPP_ -#define PID_LONGITUDINAL_CONTROLLER__DEBUG_VALUES_HPP_ +#ifndef AUTOWARE_PID_LONGITUDINAL_CONTROLLER__DEBUG_VALUES_HPP_ +#define AUTOWARE_PID_LONGITUDINAL_CONTROLLER__DEBUG_VALUES_HPP_ #include +#include namespace autoware::motion::control::pid_longitudinal_controller { @@ -92,4 +93,4 @@ class DebugValues }; } // namespace autoware::motion::control::pid_longitudinal_controller -#endif // PID_LONGITUDINAL_CONTROLLER__DEBUG_VALUES_HPP_ +#endif // AUTOWARE_PID_LONGITUDINAL_CONTROLLER__DEBUG_VALUES_HPP_ diff --git a/control/pid_longitudinal_controller/include/pid_longitudinal_controller/longitudinal_controller_utils.hpp b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/longitudinal_controller_utils.hpp similarity index 96% rename from control/pid_longitudinal_controller/include/pid_longitudinal_controller/longitudinal_controller_utils.hpp rename to control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/longitudinal_controller_utils.hpp index 4ea844a140f4f..171571b493774 100644 --- a/control/pid_longitudinal_controller/include/pid_longitudinal_controller/longitudinal_controller_utils.hpp +++ b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/longitudinal_controller_utils.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PID_LONGITUDINAL_CONTROLLER__LONGITUDINAL_CONTROLLER_UTILS_HPP_ -#define PID_LONGITUDINAL_CONTROLLER__LONGITUDINAL_CONTROLLER_UTILS_HPP_ +#ifndef AUTOWARE_PID_LONGITUDINAL_CONTROLLER__LONGITUDINAL_CONTROLLER_UTILS_HPP_ +#define AUTOWARE_PID_LONGITUDINAL_CONTROLLER__LONGITUDINAL_CONTROLLER_UTILS_HPP_ #include "interpolation/linear_interpolation.hpp" #include "interpolation/spherical_linear_interpolation.hpp" @@ -155,4 +155,4 @@ geometry_msgs::msg::Pose findTrajectoryPoseAfterDistance( } // namespace longitudinal_utils } // namespace autoware::motion::control::pid_longitudinal_controller -#endif // PID_LONGITUDINAL_CONTROLLER__LONGITUDINAL_CONTROLLER_UTILS_HPP_ +#endif // AUTOWARE_PID_LONGITUDINAL_CONTROLLER__LONGITUDINAL_CONTROLLER_UTILS_HPP_ diff --git a/control/pid_longitudinal_controller/include/pid_longitudinal_controller/lowpass_filter.hpp b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/lowpass_filter.hpp similarity index 89% rename from control/pid_longitudinal_controller/include/pid_longitudinal_controller/lowpass_filter.hpp rename to control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/lowpass_filter.hpp index 06fe1793c8123..a743be573cf60 100644 --- a/control/pid_longitudinal_controller/include/pid_longitudinal_controller/lowpass_filter.hpp +++ b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/lowpass_filter.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PID_LONGITUDINAL_CONTROLLER__LOWPASS_FILTER_HPP_ -#define PID_LONGITUDINAL_CONTROLLER__LOWPASS_FILTER_HPP_ +#ifndef AUTOWARE_PID_LONGITUDINAL_CONTROLLER__LOWPASS_FILTER_HPP_ +#define AUTOWARE_PID_LONGITUDINAL_CONTROLLER__LOWPASS_FILTER_HPP_ #include #include @@ -63,4 +63,4 @@ class LowpassFilter1d } }; } // namespace autoware::motion::control::pid_longitudinal_controller -#endif // PID_LONGITUDINAL_CONTROLLER__LOWPASS_FILTER_HPP_ +#endif // AUTOWARE_PID_LONGITUDINAL_CONTROLLER__LOWPASS_FILTER_HPP_ diff --git a/control/pid_longitudinal_controller/include/pid_longitudinal_controller/pid.hpp b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid.hpp similarity index 94% rename from control/pid_longitudinal_controller/include/pid_longitudinal_controller/pid.hpp rename to control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid.hpp index 8b981c0485ed9..8323e35b5da27 100644 --- a/control/pid_longitudinal_controller/include/pid_longitudinal_controller/pid.hpp +++ b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PID_LONGITUDINAL_CONTROLLER__PID_HPP_ -#define PID_LONGITUDINAL_CONTROLLER__PID_HPP_ +#ifndef AUTOWARE_PID_LONGITUDINAL_CONTROLLER__PID_HPP_ +#define AUTOWARE_PID_LONGITUDINAL_CONTROLLER__PID_HPP_ #include @@ -91,4 +91,4 @@ class PIDController }; } // namespace autoware::motion::control::pid_longitudinal_controller -#endif // PID_LONGITUDINAL_CONTROLLER__PID_HPP_ +#endif // AUTOWARE_PID_LONGITUDINAL_CONTROLLER__PID_HPP_ diff --git a/control/pid_longitudinal_controller/include/pid_longitudinal_controller/pid_longitudinal_controller.hpp b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp similarity index 95% rename from control/pid_longitudinal_controller/include/pid_longitudinal_controller/pid_longitudinal_controller.hpp rename to control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp index dee2e580e6911..7b9d999a3decb 100644 --- a/control/pid_longitudinal_controller/include/pid_longitudinal_controller/pid_longitudinal_controller.hpp +++ b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PID_LONGITUDINAL_CONTROLLER__PID_LONGITUDINAL_CONTROLLER_HPP_ -#define PID_LONGITUDINAL_CONTROLLER__PID_LONGITUDINAL_CONTROLLER_HPP_ - +#ifndef AUTOWARE_PID_LONGITUDINAL_CONTROLLER__PID_LONGITUDINAL_CONTROLLER_HPP_ +#define AUTOWARE_PID_LONGITUDINAL_CONTROLLER__PID_LONGITUDINAL_CONTROLLER_HPP_ + +#include "autoware_pid_longitudinal_controller/debug_values.hpp" +#include "autoware_pid_longitudinal_controller/longitudinal_controller_utils.hpp" +#include "autoware_pid_longitudinal_controller/lowpass_filter.hpp" +#include "autoware_pid_longitudinal_controller/pid.hpp" +#include "autoware_pid_longitudinal_controller/smooth_stop.hpp" #include "diagnostic_updater/diagnostic_updater.hpp" -#include "pid_longitudinal_controller/debug_values.hpp" -#include "pid_longitudinal_controller/longitudinal_controller_utils.hpp" -#include "pid_longitudinal_controller/lowpass_filter.hpp" -#include "pid_longitudinal_controller/pid.hpp" -#include "pid_longitudinal_controller/smooth_stop.hpp" #include "rclcpp/rclcpp.hpp" #include "tf2/utils.h" #include "tf2_ros/buffer.h" @@ -408,4 +408,4 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro }; } // namespace autoware::motion::control::pid_longitudinal_controller -#endif // PID_LONGITUDINAL_CONTROLLER__PID_LONGITUDINAL_CONTROLLER_HPP_ +#endif // AUTOWARE_PID_LONGITUDINAL_CONTROLLER__PID_LONGITUDINAL_CONTROLLER_HPP_ diff --git a/control/pid_longitudinal_controller/include/pid_longitudinal_controller/smooth_stop.hpp b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/smooth_stop.hpp similarity index 95% rename from control/pid_longitudinal_controller/include/pid_longitudinal_controller/smooth_stop.hpp rename to control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/smooth_stop.hpp index 9a0a36123e143..e433fd158026b 100644 --- a/control/pid_longitudinal_controller/include/pid_longitudinal_controller/smooth_stop.hpp +++ b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/smooth_stop.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PID_LONGITUDINAL_CONTROLLER__SMOOTH_STOP_HPP_ -#define PID_LONGITUDINAL_CONTROLLER__SMOOTH_STOP_HPP_ +#ifndef AUTOWARE_PID_LONGITUDINAL_CONTROLLER__SMOOTH_STOP_HPP_ +#define AUTOWARE_PID_LONGITUDINAL_CONTROLLER__SMOOTH_STOP_HPP_ #include "rclcpp/rclcpp.hpp" @@ -112,4 +112,4 @@ class SmoothStop }; } // namespace autoware::motion::control::pid_longitudinal_controller -#endif // PID_LONGITUDINAL_CONTROLLER__SMOOTH_STOP_HPP_ +#endif // AUTOWARE_PID_LONGITUDINAL_CONTROLLER__SMOOTH_STOP_HPP_ diff --git a/control/pid_longitudinal_controller/media/BrakeKeeping.drawio.svg b/control/autoware_pid_longitudinal_controller/media/BrakeKeeping.drawio.svg similarity index 100% rename from control/pid_longitudinal_controller/media/BrakeKeeping.drawio.svg rename to control/autoware_pid_longitudinal_controller/media/BrakeKeeping.drawio.svg diff --git a/control/pid_longitudinal_controller/media/LongitudinalControllerDiagram.drawio.svg b/control/autoware_pid_longitudinal_controller/media/LongitudinalControllerDiagram.drawio.svg similarity index 100% rename from control/pid_longitudinal_controller/media/LongitudinalControllerDiagram.drawio.svg rename to control/autoware_pid_longitudinal_controller/media/LongitudinalControllerDiagram.drawio.svg diff --git a/control/pid_longitudinal_controller/media/LongitudinalControllerStateTransition.drawio.svg b/control/autoware_pid_longitudinal_controller/media/LongitudinalControllerStateTransition.drawio.svg similarity index 100% rename from control/pid_longitudinal_controller/media/LongitudinalControllerStateTransition.drawio.svg rename to control/autoware_pid_longitudinal_controller/media/LongitudinalControllerStateTransition.drawio.svg diff --git a/control/pid_longitudinal_controller/media/slope_definition.drawio.svg b/control/autoware_pid_longitudinal_controller/media/slope_definition.drawio.svg similarity index 100% rename from control/pid_longitudinal_controller/media/slope_definition.drawio.svg rename to control/autoware_pid_longitudinal_controller/media/slope_definition.drawio.svg diff --git a/control/pid_longitudinal_controller/package.xml b/control/autoware_pid_longitudinal_controller/package.xml similarity index 97% rename from control/pid_longitudinal_controller/package.xml rename to control/autoware_pid_longitudinal_controller/package.xml index 82b297a69fee6..50ae7ccaf2e55 100644 --- a/control/pid_longitudinal_controller/package.xml +++ b/control/autoware_pid_longitudinal_controller/package.xml @@ -1,7 +1,7 @@ - pid_longitudinal_controller + autoware_pid_longitudinal_controller 1.0.0 PID-based longitudinal controller diff --git a/control/pid_longitudinal_controller/param/longitudinal_controller_defaults.param.yaml b/control/autoware_pid_longitudinal_controller/param/longitudinal_controller_defaults.param.yaml similarity index 100% rename from control/pid_longitudinal_controller/param/longitudinal_controller_defaults.param.yaml rename to control/autoware_pid_longitudinal_controller/param/longitudinal_controller_defaults.param.yaml diff --git a/control/pid_longitudinal_controller/src/longitudinal_controller_utils.cpp b/control/autoware_pid_longitudinal_controller/src/longitudinal_controller_utils.cpp similarity index 98% rename from control/pid_longitudinal_controller/src/longitudinal_controller_utils.cpp rename to control/autoware_pid_longitudinal_controller/src/longitudinal_controller_utils.cpp index 4e9ef52a4969e..0d8707afccad8 100644 --- a/control/pid_longitudinal_controller/src/longitudinal_controller_utils.cpp +++ b/control/autoware_pid_longitudinal_controller/src/longitudinal_controller_utils.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "pid_longitudinal_controller/longitudinal_controller_utils.hpp" +#include "autoware_pid_longitudinal_controller/longitudinal_controller_utils.hpp" #include "tf2/LinearMath/Matrix3x3.h" #include "tf2/LinearMath/Quaternion.h" diff --git a/control/pid_longitudinal_controller/src/pid.cpp b/control/autoware_pid_longitudinal_controller/src/pid.cpp similarity index 98% rename from control/pid_longitudinal_controller/src/pid.cpp rename to control/autoware_pid_longitudinal_controller/src/pid.cpp index 530b5cd15e754..6d2c61f639746 100644 --- a/control/pid_longitudinal_controller/src/pid.cpp +++ b/control/autoware_pid_longitudinal_controller/src/pid.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "pid_longitudinal_controller/pid.hpp" +#include "autoware_pid_longitudinal_controller/pid.hpp" #include #include diff --git a/control/pid_longitudinal_controller/src/pid_longitudinal_controller.cpp b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp similarity index 99% rename from control/pid_longitudinal_controller/src/pid_longitudinal_controller.cpp rename to control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp index 9a8223c610f9a..e1dd414b2446d 100644 --- a/control/pid_longitudinal_controller/src/pid_longitudinal_controller.cpp +++ b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "pid_longitudinal_controller/pid_longitudinal_controller.hpp" +#include "autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp" #include "motion_utils/trajectory/trajectory.hpp" #include "tier4_autoware_utils/geometry/geometry.hpp" @@ -1148,7 +1148,7 @@ void PidLongitudinalController::updateDebugVelAcc(const ControlData & control_da void PidLongitudinalController::setupDiagnosticUpdater() { - diagnostic_updater_.setHardwareID("pid_longitudinal_controller"); + diagnostic_updater_.setHardwareID("autoware_pid_longitudinal_controller"); diagnostic_updater_.add("control_state", this, &PidLongitudinalController::checkControlState); } diff --git a/control/pid_longitudinal_controller/src/smooth_stop.cpp b/control/autoware_pid_longitudinal_controller/src/smooth_stop.cpp similarity index 98% rename from control/pid_longitudinal_controller/src/smooth_stop.cpp rename to control/autoware_pid_longitudinal_controller/src/smooth_stop.cpp index 27fab43fa506f..9d8ad05235f11 100644 --- a/control/pid_longitudinal_controller/src/smooth_stop.cpp +++ b/control/autoware_pid_longitudinal_controller/src/smooth_stop.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "pid_longitudinal_controller/smooth_stop.hpp" +#include "autoware_pid_longitudinal_controller/smooth_stop.hpp" #include // NOLINT diff --git a/control/pid_longitudinal_controller/test/test_longitudinal_controller_utils.cpp b/control/autoware_pid_longitudinal_controller/test/test_longitudinal_controller_utils.cpp similarity index 99% rename from control/pid_longitudinal_controller/test/test_longitudinal_controller_utils.cpp rename to control/autoware_pid_longitudinal_controller/test/test_longitudinal_controller_utils.cpp index bd79d7a8c3ac3..de4d32008aa28 100644 --- a/control/pid_longitudinal_controller/test/test_longitudinal_controller_utils.cpp +++ b/control/autoware_pid_longitudinal_controller/test/test_longitudinal_controller_utils.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "autoware_pid_longitudinal_controller/longitudinal_controller_utils.hpp" #include "gtest/gtest.h" #include "interpolation/spherical_linear_interpolation.hpp" #include "motion_utils/trajectory/conversion.hpp" -#include "pid_longitudinal_controller/longitudinal_controller_utils.hpp" #include "tf2/LinearMath/Quaternion.h" #include "autoware_planning_msgs/msg/trajectory.hpp" diff --git a/control/pid_longitudinal_controller/test/test_pid.cpp b/control/autoware_pid_longitudinal_controller/test/test_pid.cpp similarity index 97% rename from control/pid_longitudinal_controller/test/test_pid.cpp rename to control/autoware_pid_longitudinal_controller/test/test_pid.cpp index 82d01e0028a9c..0e3e0c70945dc 100644 --- a/control/pid_longitudinal_controller/test/test_pid.cpp +++ b/control/autoware_pid_longitudinal_controller/test/test_pid.cpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "autoware_pid_longitudinal_controller/pid.hpp" #include "gtest/gtest.h" -#include "pid_longitudinal_controller/pid.hpp" #include diff --git a/control/pid_longitudinal_controller/test/test_smooth_stop.cpp b/control/autoware_pid_longitudinal_controller/test/test_smooth_stop.cpp similarity index 98% rename from control/pid_longitudinal_controller/test/test_smooth_stop.cpp rename to control/autoware_pid_longitudinal_controller/test/test_smooth_stop.cpp index d658a5271d249..4f4fbb2354fa1 100644 --- a/control/pid_longitudinal_controller/test/test_smooth_stop.cpp +++ b/control/autoware_pid_longitudinal_controller/test/test_smooth_stop.cpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "autoware_pid_longitudinal_controller/smooth_stop.hpp" #include "gtest/gtest.h" -#include "pid_longitudinal_controller/smooth_stop.hpp" #include "rclcpp/rclcpp.hpp" #include diff --git a/control/trajectory_follower_node/package.xml b/control/trajectory_follower_node/package.xml index b7dd546eb4bca..92b99e690931f 100644 --- a/control/trajectory_follower_node/package.xml +++ b/control/trajectory_follower_node/package.xml @@ -22,10 +22,10 @@ autoware_adapi_v1_msgs autoware_control_msgs autoware_mpc_lateral_controller + autoware_pid_longitudinal_controller autoware_planning_msgs autoware_vehicle_msgs motion_utils - pid_longitudinal_controller pure_pursuit rclcpp rclcpp_components diff --git a/control/trajectory_follower_node/param/longitudinal/pid.param.yaml b/control/trajectory_follower_node/param/longitudinal/pid.param.yaml index c39088753fe64..ad6217663fbae 100644 --- a/control/trajectory_follower_node/param/longitudinal/pid.param.yaml +++ b/control/trajectory_follower_node/param/longitudinal/pid.param.yaml @@ -69,8 +69,9 @@ max_jerk: 2.0 min_jerk: -5.0 - # pitch - use_trajectory_for_pitch_calculation: false + # slope compensation lpf_pitch_gain: 0.95 + slope_source: "raw_pitch" # raw_pitch, trajectory_pitch or trajectory_adaptive + adaptive_trajectory_velocity_th: 1.0 max_pitch_rad: 0.1 min_pitch_rad: -0.1 diff --git a/control/trajectory_follower_node/src/controller_node.cpp b/control/trajectory_follower_node/src/controller_node.cpp index f431be6612009..4be04af5fd184 100644 --- a/control/trajectory_follower_node/src/controller_node.cpp +++ b/control/trajectory_follower_node/src/controller_node.cpp @@ -15,7 +15,7 @@ #include "trajectory_follower_node/controller_node.hpp" #include "autoware_mpc_lateral_controller/mpc_lateral_controller.hpp" -#include "pid_longitudinal_controller/pid_longitudinal_controller.hpp" +#include "autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp" #include "pure_pursuit/pure_pursuit_lateral_controller.hpp" #include "tier4_autoware_utils/ros/marker_helper.hpp" diff --git a/control/trajectory_follower_node/test/test_controller_node.cpp b/control/trajectory_follower_node/test/test_controller_node.cpp index 3bf47233f1f3f..dcd3434705ec0 100644 --- a/control/trajectory_follower_node/test/test_controller_node.cpp +++ b/control/trajectory_follower_node/test/test_controller_node.cpp @@ -51,7 +51,7 @@ rclcpp::NodeOptions makeNodeOptions(const bool enable_keep_stopped_until_steer_c // Pass default parameter file to the node const auto share_dir = ament_index_cpp::get_package_share_directory("trajectory_follower_node"); const auto longitudinal_share_dir = - ament_index_cpp::get_package_share_directory("pid_longitudinal_controller"); + ament_index_cpp::get_package_share_directory("autoware_pid_longitudinal_controller"); const auto lateral_share_dir = ament_index_cpp::get_package_share_directory("autoware_mpc_lateral_controller"); rclcpp::NodeOptions node_options; From 240c976d8a30ec2647903d58f13cd2c6e5fb5a5e Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sun, 9 Jun 2024 04:01:49 +0900 Subject: [PATCH 039/142] refactor(path_smoother)!: prefix package and namespace with autoware (#7381) * git mv Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix launch Signed-off-by: Takayuki Murooka * rever a part of prefix Signed-off-by: Takayuki Murooka * fix test Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix static_centerline_optimizer Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .github/CODEOWNERS | 2 +- .../motion_planning.launch.xml | 2 +- planning/.pages | 4 ++-- .../CMakeLists.txt | 10 +++++----- .../README.md | 0 .../config/elastic_band_smoother.param.yaml | 0 .../docs/eb.md | 0 .../common_structs.hpp | 12 ++++++------ .../autoware_path_smoother}/elastic_band.hpp | 14 +++++++------- .../elastic_band_smoother.hpp | 18 +++++++++--------- .../replan_checker.hpp | 14 +++++++------- .../autoware_path_smoother}/type_alias.hpp | 10 +++++----- .../utils/geometry_utils.hpp | 10 +++++----- .../utils/trajectory_utils.hpp | 18 +++++++++--------- .../launch/elastic_band_smoother.launch.xml | 4 ++-- .../debug/eb_fixed_traj_visualization.png | Bin .../media/debug/eb_traj_visualization.png | Bin .../media/eb.svg | 0 .../media/eb_constraint.svg | 0 .../package.xml | 4 ++-- .../scripts/calculation_time_plotter.py | 0 .../src/elastic_band.cpp | 12 ++++++------ .../src/elastic_band_smoother.cpp | 14 +++++++------- .../src/replan_checker.cpp | 8 ++++---- .../src/utils/trajectory_utils.cpp | 8 ++++---- ...autoware_path_smoother_node_interface.cpp} | 16 +++++++++------- .../static_centerline_generator.launch.xml | 2 +- .../package.xml | 2 +- ...timization_trajectory_based_centerline.cpp | 6 +++--- .../test_static_centerline_generator.test.py | 2 +- 30 files changed, 97 insertions(+), 95 deletions(-) rename planning/{path_smoother => autoware_path_smoother}/CMakeLists.txt (70%) rename planning/{path_smoother => autoware_path_smoother}/README.md (100%) rename planning/{path_smoother => autoware_path_smoother}/config/elastic_band_smoother.param.yaml (100%) rename planning/{path_smoother => autoware_path_smoother}/docs/eb.md (100%) rename planning/{path_smoother/include/path_smoother => autoware_path_smoother/include/autoware_path_smoother}/common_structs.hpp (92%) rename planning/{path_smoother/include/path_smoother => autoware_path_smoother/include/autoware_path_smoother}/elastic_band.hpp (91%) rename planning/{path_smoother/include/path_smoother => autoware_path_smoother/include/autoware_path_smoother}/elastic_band_smoother.hpp (89%) rename planning/{path_smoother/include/path_smoother => autoware_path_smoother/include/autoware_path_smoother}/replan_checker.hpp (86%) rename planning/{path_smoother/include/path_smoother => autoware_path_smoother/include/autoware_path_smoother}/type_alias.hpp (86%) rename planning/{path_smoother/include/path_smoother => autoware_path_smoother/include/autoware_path_smoother}/utils/geometry_utils.hpp (80%) rename planning/{path_smoother/include/path_smoother => autoware_path_smoother/include/autoware_path_smoother}/utils/trajectory_utils.hpp (91%) rename planning/{path_smoother => autoware_path_smoother}/launch/elastic_band_smoother.launch.xml (77%) rename planning/{path_smoother => autoware_path_smoother}/media/debug/eb_fixed_traj_visualization.png (100%) rename planning/{path_smoother => autoware_path_smoother}/media/debug/eb_traj_visualization.png (100%) rename planning/{path_smoother => autoware_path_smoother}/media/eb.svg (100%) rename planning/{path_smoother => autoware_path_smoother}/media/eb_constraint.svg (100%) rename planning/{path_smoother => autoware_path_smoother}/package.xml (93%) rename planning/{path_smoother => autoware_path_smoother}/scripts/calculation_time_plotter.py (100%) rename planning/{path_smoother => autoware_path_smoother}/src/elastic_band.cpp (98%) rename planning/{path_smoother => autoware_path_smoother}/src/elastic_band_smoother.cpp (97%) rename planning/{path_smoother => autoware_path_smoother}/src/replan_checker.cpp (97%) rename planning/{path_smoother => autoware_path_smoother}/src/utils/trajectory_utils.cpp (94%) rename planning/{path_smoother/test/test_path_smoother_node_interface.cpp => autoware_path_smoother/test/test_autoware_path_smoother_node_interface.cpp} (76%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index eb9aca8a208d6..ddbf26ebc485c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -194,7 +194,7 @@ planning/objects_of_interest_marker_interface/** fumiya.watanabe@tier4.jp kosuke planning/obstacle_cruise_planner/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp planning/obstacle_stop_planner/** berkay@leodrive.ai bnk@leodrive.ai satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp planning/obstacle_velocity_limiter/** maxime.clement@tier4.jp -planning/path_smoother/** maxime.clement@tier4.jp takayuki.murooka@tier4.jp +planning/autoware_path_smoother/** maxime.clement@tier4.jp takayuki.murooka@tier4.jp planning/planning_test_utils/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp zulfaqar.azmi@tier4.jp planning/planning_validator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp planning/route_handler/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp takayuki.murooka@tier4.jp zulfaqar.azmi@tier4.jp diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml index 0b82057144f0e..34e8c9d31d837 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml @@ -28,7 +28,7 @@ - + diff --git a/planning/.pages b/planning/.pages index be6bf0af9b2a9..a16f2a13628a1 100644 --- a/planning/.pages +++ b/planning/.pages @@ -53,8 +53,8 @@ nav: - 'Obstacle Stop Planner': planning/obstacle_stop_planner - 'Obstacle Velocity Limiter': planning/obstacle_velocity_limiter - 'Path Smoother': - - 'About Path Smoother': planning/path_smoother - - 'Elastic Band': planning/path_smoother/docs/eb + - 'About Path Smoother': planning/autoware_path_smoother + - 'Elastic Band': planning/autoware_path_smoother/docs/eb - 'Sampling Based Planner': - 'Path Sample': planning/sampling_based_planner/autoware_path_sampler - 'Common library': planning/sampling_based_planner/autoware_sampler_common diff --git a/planning/path_smoother/CMakeLists.txt b/planning/autoware_path_smoother/CMakeLists.txt similarity index 70% rename from planning/path_smoother/CMakeLists.txt rename to planning/autoware_path_smoother/CMakeLists.txt index b2f42181f9a0f..a5873fe3735ef 100644 --- a/planning/path_smoother/CMakeLists.txt +++ b/planning/autoware_path_smoother/CMakeLists.txt @@ -1,23 +1,23 @@ cmake_minimum_required(VERSION 3.14) -project(path_smoother) +project(autoware_path_smoother) find_package(autoware_cmake REQUIRED) autoware_package() find_package(Eigen3 REQUIRED) -ament_auto_add_library(path_smoother SHARED +ament_auto_add_library(autoware_path_smoother SHARED DIRECTORY src ) -target_include_directories(path_smoother +target_include_directories(autoware_path_smoother SYSTEM PUBLIC ${EIGEN3_INCLUDE_DIR} ) # register node -rclcpp_components_register_node(path_smoother - PLUGIN "path_smoother::ElasticBandSmoother" +rclcpp_components_register_node(autoware_path_smoother + PLUGIN "autoware::path_smoother::ElasticBandSmoother" EXECUTABLE elastic_band_smoother ) diff --git a/planning/path_smoother/README.md b/planning/autoware_path_smoother/README.md similarity index 100% rename from planning/path_smoother/README.md rename to planning/autoware_path_smoother/README.md diff --git a/planning/path_smoother/config/elastic_band_smoother.param.yaml b/planning/autoware_path_smoother/config/elastic_band_smoother.param.yaml similarity index 100% rename from planning/path_smoother/config/elastic_band_smoother.param.yaml rename to planning/autoware_path_smoother/config/elastic_band_smoother.param.yaml diff --git a/planning/path_smoother/docs/eb.md b/planning/autoware_path_smoother/docs/eb.md similarity index 100% rename from planning/path_smoother/docs/eb.md rename to planning/autoware_path_smoother/docs/eb.md diff --git a/planning/path_smoother/include/path_smoother/common_structs.hpp b/planning/autoware_path_smoother/include/autoware_path_smoother/common_structs.hpp similarity index 92% rename from planning/path_smoother/include/path_smoother/common_structs.hpp rename to planning/autoware_path_smoother/include/autoware_path_smoother/common_structs.hpp index d44c964cf634c..18f5ef82fd6d4 100644 --- a/planning/path_smoother/include/path_smoother/common_structs.hpp +++ b/planning/autoware_path_smoother/include/autoware_path_smoother/common_structs.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SMOOTHER__COMMON_STRUCTS_HPP_ -#define PATH_SMOOTHER__COMMON_STRUCTS_HPP_ +#ifndef AUTOWARE_PATH_SMOOTHER__COMMON_STRUCTS_HPP_ +#define AUTOWARE_PATH_SMOOTHER__COMMON_STRUCTS_HPP_ -#include "path_smoother/type_alias.hpp" +#include "autoware_path_smoother/type_alias.hpp" #include "rclcpp/rclcpp.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" @@ -25,7 +25,7 @@ #include #include -namespace path_smoother +namespace autoware::path_smoother { struct Bounds; @@ -131,6 +131,6 @@ struct EgoNearestParam double dist_threshold{0.0}; double yaw_threshold{0.0}; }; -} // namespace path_smoother +} // namespace autoware::path_smoother -#endif // PATH_SMOOTHER__COMMON_STRUCTS_HPP_ +#endif // AUTOWARE_PATH_SMOOTHER__COMMON_STRUCTS_HPP_ diff --git a/planning/path_smoother/include/path_smoother/elastic_band.hpp b/planning/autoware_path_smoother/include/autoware_path_smoother/elastic_band.hpp similarity index 91% rename from planning/path_smoother/include/path_smoother/elastic_band.hpp rename to planning/autoware_path_smoother/include/autoware_path_smoother/elastic_band.hpp index 1915757b360a4..65b9db9098561 100644 --- a/planning/path_smoother/include/path_smoother/elastic_band.hpp +++ b/planning/autoware_path_smoother/include/autoware_path_smoother/elastic_band.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SMOOTHER__ELASTIC_BAND_HPP_ -#define PATH_SMOOTHER__ELASTIC_BAND_HPP_ +#ifndef AUTOWARE_PATH_SMOOTHER__ELASTIC_BAND_HPP_ +#define AUTOWARE_PATH_SMOOTHER__ELASTIC_BAND_HPP_ +#include "autoware_path_smoother/common_structs.hpp" +#include "autoware_path_smoother/type_alias.hpp" #include "osqp_interface/osqp_interface.hpp" -#include "path_smoother/common_structs.hpp" -#include "path_smoother/type_alias.hpp" #include @@ -27,7 +27,7 @@ #include #include -namespace path_smoother +namespace autoware::path_smoother { class EBPathSmoother { @@ -128,6 +128,6 @@ class EBPathSmoother const std::vector & optimized_points, const std::vector & traj_points, const int pad_start_idx) const; }; -} // namespace path_smoother +} // namespace autoware::path_smoother -#endif // PATH_SMOOTHER__ELASTIC_BAND_HPP_ +#endif // AUTOWARE_PATH_SMOOTHER__ELASTIC_BAND_HPP_ diff --git a/planning/path_smoother/include/path_smoother/elastic_band_smoother.hpp b/planning/autoware_path_smoother/include/autoware_path_smoother/elastic_band_smoother.hpp similarity index 89% rename from planning/path_smoother/include/path_smoother/elastic_band_smoother.hpp rename to planning/autoware_path_smoother/include/autoware_path_smoother/elastic_band_smoother.hpp index bc566fdfb96bf..16a4b2bb39db7 100644 --- a/planning/path_smoother/include/path_smoother/elastic_band_smoother.hpp +++ b/planning/autoware_path_smoother/include/autoware_path_smoother/elastic_band_smoother.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SMOOTHER__ELASTIC_BAND_SMOOTHER_HPP_ -#define PATH_SMOOTHER__ELASTIC_BAND_SMOOTHER_HPP_ +#ifndef AUTOWARE_PATH_SMOOTHER__ELASTIC_BAND_SMOOTHER_HPP_ +#define AUTOWARE_PATH_SMOOTHER__ELASTIC_BAND_SMOOTHER_HPP_ +#include "autoware_path_smoother/common_structs.hpp" +#include "autoware_path_smoother/elastic_band.hpp" +#include "autoware_path_smoother/replan_checker.hpp" +#include "autoware_path_smoother/type_alias.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include "path_smoother/common_structs.hpp" -#include "path_smoother/elastic_band.hpp" -#include "path_smoother/replan_checker.hpp" -#include "path_smoother/type_alias.hpp" #include "rclcpp/rclcpp.hpp" #include "tier4_autoware_utils/ros/logger_level_configure.hpp" #include "tier4_autoware_utils/ros/polling_subscriber.hpp" @@ -32,7 +32,7 @@ #include #include -namespace path_smoother +namespace autoware::path_smoother { class ElasticBandSmoother : public rclcpp::Node { @@ -116,6 +116,6 @@ class ElasticBandSmoother : public rclcpp::Node std::unique_ptr published_time_publisher_; }; -} // namespace path_smoother +} // namespace autoware::path_smoother -#endif // PATH_SMOOTHER__ELASTIC_BAND_SMOOTHER_HPP_ +#endif // AUTOWARE_PATH_SMOOTHER__ELASTIC_BAND_SMOOTHER_HPP_ diff --git a/planning/path_smoother/include/path_smoother/replan_checker.hpp b/planning/autoware_path_smoother/include/autoware_path_smoother/replan_checker.hpp similarity index 86% rename from planning/path_smoother/include/path_smoother/replan_checker.hpp rename to planning/autoware_path_smoother/include/autoware_path_smoother/replan_checker.hpp index d06cbc093a0c8..35b0e0102068b 100644 --- a/planning/path_smoother/include/path_smoother/replan_checker.hpp +++ b/planning/autoware_path_smoother/include/autoware_path_smoother/replan_checker.hpp @@ -12,18 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SMOOTHER__REPLAN_CHECKER_HPP_ -#define PATH_SMOOTHER__REPLAN_CHECKER_HPP_ +#ifndef AUTOWARE_PATH_SMOOTHER__REPLAN_CHECKER_HPP_ +#define AUTOWARE_PATH_SMOOTHER__REPLAN_CHECKER_HPP_ -#include "path_smoother/common_structs.hpp" -#include "path_smoother/type_alias.hpp" +#include "autoware_path_smoother/common_structs.hpp" +#include "autoware_path_smoother/type_alias.hpp" #include #include #include -namespace path_smoother +namespace autoware::path_smoother { class ReplanChecker { @@ -66,6 +66,6 @@ class ReplanChecker bool isPathGoalChanged( const PlannerData & planner_data, const std::vector & prev_traj_points) const; }; -} // namespace path_smoother +} // namespace autoware::path_smoother -#endif // PATH_SMOOTHER__REPLAN_CHECKER_HPP_ +#endif // AUTOWARE_PATH_SMOOTHER__REPLAN_CHECKER_HPP_ diff --git a/planning/path_smoother/include/path_smoother/type_alias.hpp b/planning/autoware_path_smoother/include/autoware_path_smoother/type_alias.hpp similarity index 86% rename from planning/path_smoother/include/path_smoother/type_alias.hpp rename to planning/autoware_path_smoother/include/autoware_path_smoother/type_alias.hpp index 21cbcf8e7eefc..dc565d69d3c4d 100644 --- a/planning/path_smoother/include/path_smoother/type_alias.hpp +++ b/planning/autoware_path_smoother/include/autoware_path_smoother/type_alias.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SMOOTHER__TYPE_ALIAS_HPP_ -#define PATH_SMOOTHER__TYPE_ALIAS_HPP_ +#ifndef AUTOWARE_PATH_SMOOTHER__TYPE_ALIAS_HPP_ +#define AUTOWARE_PATH_SMOOTHER__TYPE_ALIAS_HPP_ #include "autoware_planning_msgs/msg/path.hpp" #include "autoware_planning_msgs/msg/path_point.hpp" @@ -25,7 +25,7 @@ #include "tier4_debug_msgs/msg/float64_stamped.hpp" #include "tier4_debug_msgs/msg/string_stamped.hpp" -namespace path_smoother +namespace autoware::path_smoother { // std_msgs using std_msgs::msg::Header; @@ -39,6 +39,6 @@ using nav_msgs::msg::Odometry; // debug using tier4_debug_msgs::msg::Float64Stamped; using tier4_debug_msgs::msg::StringStamped; -} // namespace path_smoother +} // namespace autoware::path_smoother -#endif // PATH_SMOOTHER__TYPE_ALIAS_HPP_ +#endif // AUTOWARE_PATH_SMOOTHER__TYPE_ALIAS_HPP_ diff --git a/planning/path_smoother/include/path_smoother/utils/geometry_utils.hpp b/planning/autoware_path_smoother/include/autoware_path_smoother/utils/geometry_utils.hpp similarity index 80% rename from planning/path_smoother/include/path_smoother/utils/geometry_utils.hpp rename to planning/autoware_path_smoother/include/autoware_path_smoother/utils/geometry_utils.hpp index 39783b958fa61..6cdf34f319442 100644 --- a/planning/path_smoother/include/path_smoother/utils/geometry_utils.hpp +++ b/planning/autoware_path_smoother/include/autoware_path_smoother/utils/geometry_utils.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SMOOTHER__UTILS__GEOMETRY_UTILS_HPP_ -#define PATH_SMOOTHER__UTILS__GEOMETRY_UTILS_HPP_ +#ifndef AUTOWARE_PATH_SMOOTHER__UTILS__GEOMETRY_UTILS_HPP_ +#define AUTOWARE_PATH_SMOOTHER__UTILS__GEOMETRY_UTILS_HPP_ #include -namespace path_smoother +namespace autoware::path_smoother { namespace geometry_utils { @@ -31,5 +31,5 @@ bool isSamePoint(const T1 & t1, const T2 & t2) return (std::abs(p1.x - p2.x) <= epsilon && std::abs(p1.y - p2.y) <= epsilon); } } // namespace geometry_utils -} // namespace path_smoother -#endif // PATH_SMOOTHER__UTILS__GEOMETRY_UTILS_HPP_ +} // namespace autoware::path_smoother +#endif // AUTOWARE_PATH_SMOOTHER__UTILS__GEOMETRY_UTILS_HPP_ diff --git a/planning/path_smoother/include/path_smoother/utils/trajectory_utils.hpp b/planning/autoware_path_smoother/include/autoware_path_smoother/utils/trajectory_utils.hpp similarity index 91% rename from planning/path_smoother/include/path_smoother/utils/trajectory_utils.hpp rename to planning/autoware_path_smoother/include/autoware_path_smoother/utils/trajectory_utils.hpp index 55a7829a5bea3..ea717fae20ef4 100644 --- a/planning/path_smoother/include/path_smoother/utils/trajectory_utils.hpp +++ b/planning/autoware_path_smoother/include/autoware_path_smoother/utils/trajectory_utils.hpp @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PATH_SMOOTHER__UTILS__TRAJECTORY_UTILS_HPP_ -#define PATH_SMOOTHER__UTILS__TRAJECTORY_UTILS_HPP_ +#ifndef AUTOWARE_PATH_SMOOTHER__UTILS__TRAJECTORY_UTILS_HPP_ +#define AUTOWARE_PATH_SMOOTHER__UTILS__TRAJECTORY_UTILS_HPP_ +#include "autoware_path_smoother/common_structs.hpp" +#include "autoware_path_smoother/type_alias.hpp" #include "interpolation/linear_interpolation.hpp" #include "interpolation/spline_interpolation.hpp" #include "interpolation/spline_interpolation_points_2d.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include "path_smoother/common_structs.hpp" -#include "path_smoother/type_alias.hpp" #include @@ -35,7 +35,7 @@ #include #include -namespace path_smoother +namespace autoware::path_smoother { namespace trajectory_utils { @@ -137,7 +137,7 @@ std::optional updateFrontPointForFix( motion_utils::calcSignedArcLength(points, 0, front_fix_point.pose.position); if (0 < lon_offset_to_prev_front) { RCLCPP_DEBUG( - rclcpp::get_logger("path_smoother.trajectory_utils"), + rclcpp::get_logger("autoware_path_smoother.trajectory_utils"), "Fixed point will not be inserted due to the error during calculation."); return std::nullopt; } @@ -148,7 +148,7 @@ std::optional updateFrontPointForFix( constexpr double max_lat_error = 3.0; if (max_lat_error < dist) { RCLCPP_DEBUG( - rclcpp::get_logger("path_smoother.trajectory_utils"), + rclcpp::get_logger("autoware_path_smoother.trajectory_utils"), "New Fixed point is too far from points %f [m]", dist); } @@ -170,5 +170,5 @@ void insertStopPoint( std::vector & traj_points, const geometry_msgs::msg::Pose & input_stop_pose, const size_t stop_seg_idx); } // namespace trajectory_utils -} // namespace path_smoother -#endif // PATH_SMOOTHER__UTILS__TRAJECTORY_UTILS_HPP_ +} // namespace autoware::path_smoother +#endif // AUTOWARE_PATH_SMOOTHER__UTILS__TRAJECTORY_UTILS_HPP_ diff --git a/planning/path_smoother/launch/elastic_band_smoother.launch.xml b/planning/autoware_path_smoother/launch/elastic_band_smoother.launch.xml similarity index 77% rename from planning/path_smoother/launch/elastic_band_smoother.launch.xml rename to planning/autoware_path_smoother/launch/elastic_band_smoother.launch.xml index db91e1e2dd97d..62658f88df3a4 100644 --- a/planning/path_smoother/launch/elastic_band_smoother.launch.xml +++ b/planning/autoware_path_smoother/launch/elastic_band_smoother.launch.xml @@ -3,9 +3,9 @@ - + - + diff --git a/planning/path_smoother/media/debug/eb_fixed_traj_visualization.png b/planning/autoware_path_smoother/media/debug/eb_fixed_traj_visualization.png similarity index 100% rename from planning/path_smoother/media/debug/eb_fixed_traj_visualization.png rename to planning/autoware_path_smoother/media/debug/eb_fixed_traj_visualization.png diff --git a/planning/path_smoother/media/debug/eb_traj_visualization.png b/planning/autoware_path_smoother/media/debug/eb_traj_visualization.png similarity index 100% rename from planning/path_smoother/media/debug/eb_traj_visualization.png rename to planning/autoware_path_smoother/media/debug/eb_traj_visualization.png diff --git a/planning/path_smoother/media/eb.svg b/planning/autoware_path_smoother/media/eb.svg similarity index 100% rename from planning/path_smoother/media/eb.svg rename to planning/autoware_path_smoother/media/eb.svg diff --git a/planning/path_smoother/media/eb_constraint.svg b/planning/autoware_path_smoother/media/eb_constraint.svg similarity index 100% rename from planning/path_smoother/media/eb_constraint.svg rename to planning/autoware_path_smoother/media/eb_constraint.svg diff --git a/planning/path_smoother/package.xml b/planning/autoware_path_smoother/package.xml similarity index 93% rename from planning/path_smoother/package.xml rename to planning/autoware_path_smoother/package.xml index a0e83fdf8a091..445f8a0e6e736 100644 --- a/planning/path_smoother/package.xml +++ b/planning/autoware_path_smoother/package.xml @@ -1,9 +1,9 @@ - path_smoother + autoware_path_smoother 0.1.0 - The path_smoother package + The autoware_path_smoother package Takayuki Murooka Maxime CLEMENT Apache License 2.0 diff --git a/planning/path_smoother/scripts/calculation_time_plotter.py b/planning/autoware_path_smoother/scripts/calculation_time_plotter.py similarity index 100% rename from planning/path_smoother/scripts/calculation_time_plotter.py rename to planning/autoware_path_smoother/scripts/calculation_time_plotter.py diff --git a/planning/path_smoother/src/elastic_band.cpp b/planning/autoware_path_smoother/src/elastic_band.cpp similarity index 98% rename from planning/path_smoother/src/elastic_band.cpp rename to planning/autoware_path_smoother/src/elastic_band.cpp index 8e538a0d6507f..a443cfd37caec 100644 --- a/planning/path_smoother/src/elastic_band.cpp +++ b/planning/autoware_path_smoother/src/elastic_band.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "path_smoother/elastic_band.hpp" +#include "autoware_path_smoother/elastic_band.hpp" +#include "autoware_path_smoother/type_alias.hpp" +#include "autoware_path_smoother/utils/geometry_utils.hpp" +#include "autoware_path_smoother/utils/trajectory_utils.hpp" #include "motion_utils/trajectory/conversion.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include "path_smoother/type_alias.hpp" -#include "path_smoother/utils/geometry_utils.hpp" -#include "path_smoother/utils/trajectory_utils.hpp" #include "tf2/utils.h" #include @@ -84,7 +84,7 @@ std_msgs::msg::Header createHeader(const rclcpp::Time & now) } } // namespace -namespace path_smoother +namespace autoware::path_smoother { EBPathSmoother::EBParam::EBParam(rclcpp::Node * node) { @@ -453,4 +453,4 @@ std::optional> EBPathSmoother::convertOptimizedPoin time_keeper_ptr_->toc(__func__, " "); return eb_traj_points; } -} // namespace path_smoother +} // namespace autoware::path_smoother diff --git a/planning/path_smoother/src/elastic_band_smoother.cpp b/planning/autoware_path_smoother/src/elastic_band_smoother.cpp similarity index 97% rename from planning/path_smoother/src/elastic_band_smoother.cpp rename to planning/autoware_path_smoother/src/elastic_band_smoother.cpp index 75300286ac9dc..2f507c8bae311 100644 --- a/planning/path_smoother/src/elastic_band_smoother.cpp +++ b/planning/autoware_path_smoother/src/elastic_band_smoother.cpp @@ -12,18 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "path_smoother/elastic_band_smoother.hpp" +#include "autoware_path_smoother/elastic_band_smoother.hpp" +#include "autoware_path_smoother/utils/geometry_utils.hpp" +#include "autoware_path_smoother/utils/trajectory_utils.hpp" #include "interpolation/spline_interpolation_points_2d.hpp" #include "motion_utils/trajectory/conversion.hpp" -#include "path_smoother/utils/geometry_utils.hpp" -#include "path_smoother/utils/trajectory_utils.hpp" #include "rclcpp/time.hpp" #include #include -namespace path_smoother +namespace autoware::path_smoother { namespace { @@ -70,7 +70,7 @@ bool hasZeroVelocity(const TrajectoryPoint & traj_point) } // namespace ElasticBandSmoother::ElasticBandSmoother(const rclcpp::NodeOptions & node_options) -: Node("path_smoother", node_options), time_keeper_ptr_(std::make_shared()) +: Node("autoware_path_smoother", node_options), time_keeper_ptr_(std::make_shared()) { // interface publisher traj_pub_ = create_publisher("~/output/traj", 1); @@ -384,7 +384,7 @@ std::vector ElasticBandSmoother::extendTrajectory( time_keeper_ptr_->toc(__func__, " "); return resampled_traj_points; } -} // namespace path_smoother +} // namespace autoware::path_smoother #include "rclcpp_components/register_node_macro.hpp" -RCLCPP_COMPONENTS_REGISTER_NODE(path_smoother::ElasticBandSmoother) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::path_smoother::ElasticBandSmoother) diff --git a/planning/path_smoother/src/replan_checker.cpp b/planning/autoware_path_smoother/src/replan_checker.cpp similarity index 97% rename from planning/path_smoother/src/replan_checker.cpp rename to planning/autoware_path_smoother/src/replan_checker.cpp index f451a05a8f835..4e5911ea5b42e 100644 --- a/planning/path_smoother/src/replan_checker.cpp +++ b/planning/autoware_path_smoother/src/replan_checker.cpp @@ -12,16 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "path_smoother/replan_checker.hpp" +#include "autoware_path_smoother/replan_checker.hpp" +#include "autoware_path_smoother/utils/trajectory_utils.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include "path_smoother/utils/trajectory_utils.hpp" #include "tier4_autoware_utils/geometry/geometry.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" #include -namespace path_smoother +namespace autoware::path_smoother { ReplanChecker::ReplanChecker(rclcpp::Node * node, const EgoNearestParam & ego_nearest_param) : ego_nearest_param_(ego_nearest_param), logger_(node->get_logger().get_child("replan_checker")) @@ -208,4 +208,4 @@ bool ReplanChecker::isPathGoalChanged( return true; } -} // namespace path_smoother +} // namespace autoware::path_smoother diff --git a/planning/path_smoother/src/utils/trajectory_utils.cpp b/planning/autoware_path_smoother/src/utils/trajectory_utils.cpp similarity index 94% rename from planning/path_smoother/src/utils/trajectory_utils.cpp rename to planning/autoware_path_smoother/src/utils/trajectory_utils.cpp index b4d0950a593d5..5fea20c9a405f 100644 --- a/planning/path_smoother/src/utils/trajectory_utils.cpp +++ b/planning/autoware_path_smoother/src/utils/trajectory_utils.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "path_smoother/utils/trajectory_utils.hpp" +#include "autoware_path_smoother/utils/trajectory_utils.hpp" +#include "autoware_path_smoother/utils/geometry_utils.hpp" #include "motion_utils/resample/resample.hpp" #include "motion_utils/trajectory/conversion.hpp" -#include "path_smoother/utils/geometry_utils.hpp" #include "autoware_planning_msgs/msg/path_point.hpp" #include "autoware_planning_msgs/msg/trajectory_point.hpp" @@ -30,7 +30,7 @@ #include #include -namespace path_smoother +namespace autoware::path_smoother { namespace trajectory_utils { @@ -98,4 +98,4 @@ void insertStopPoint( traj_points.insert(traj_points.begin() + stop_seg_idx + 1, additional_traj_point); } } // namespace trajectory_utils -} // namespace path_smoother +} // namespace autoware::path_smoother diff --git a/planning/path_smoother/test/test_path_smoother_node_interface.cpp b/planning/autoware_path_smoother/test/test_autoware_path_smoother_node_interface.cpp similarity index 76% rename from planning/path_smoother/test/test_path_smoother_node_interface.cpp rename to planning/autoware_path_smoother/test/test_autoware_path_smoother_node_interface.cpp index 30e9fba1433cb..41c48630c8f8c 100644 --- a/planning/path_smoother/test/test_path_smoother_node_interface.cpp +++ b/planning/autoware_path_smoother/test/test_autoware_path_smoother_node_interface.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "path_smoother/elastic_band_smoother.hpp" +#include "autoware_path_smoother/elastic_band_smoother.hpp" #include #include @@ -32,24 +32,26 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionTrajectory) const auto planning_test_utils_dir = ament_index_cpp::get_package_share_directory("planning_test_utils"); - const auto path_smoothing_dir = ament_index_cpp::get_package_share_directory("path_smoother"); + const auto path_smoothing_dir = + ament_index_cpp::get_package_share_directory("autoware_path_smoother"); node_options.arguments( {"--ros-args", "--params-file", planning_test_utils_dir + "/config/test_common.param.yaml", "--params-file", planning_test_utils_dir + "/config/test_nearest_search.param.yaml", "--params-file", path_smoothing_dir + "/config/elastic_band_smoother.param.yaml"}); - auto test_target_node = std::make_shared(node_options); + auto test_target_node = + std::make_shared(node_options); // publish necessary topics from test_manager - test_manager->publishOdometry(test_target_node, "path_smoother/input/odometry"); + test_manager->publishOdometry(test_target_node, "autoware_path_smoother/input/odometry"); // set subscriber with topic name - test_manager->setTrajectorySubscriber("path_smoother/output/traj"); - test_manager->setPathSubscriber("path_smoother/output/path"); + test_manager->setTrajectorySubscriber("autoware_path_smoother/output/traj"); + test_manager->setPathSubscriber("autoware_path_smoother/output/path"); // set input topic name (this topic is changed to test node) - test_manager->setPathInputTopicName("path_smoother/input/path"); + test_manager->setPathInputTopicName("autoware_path_smoother/input/path"); // test with normal trajectory ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPath(test_target_node)); diff --git a/planning/autoware_static_centerline_generator/launch/static_centerline_generator.launch.xml b/planning/autoware_static_centerline_generator/launch/static_centerline_generator.launch.xml index 486ea547e3dc1..3d786ab995e5b 100644 --- a/planning/autoware_static_centerline_generator/launch/static_centerline_generator.launch.xml +++ b/planning/autoware_static_centerline_generator/launch/static_centerline_generator.launch.xml @@ -28,7 +28,7 @@ default="$(find-pkg-share autoware_launch)/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/behavior_velocity_planner.param.yaml" /> - + diff --git a/planning/autoware_static_centerline_generator/package.xml b/planning/autoware_static_centerline_generator/package.xml index 4cf19c1da0e6a..26eb41ca1de23 100644 --- a/planning/autoware_static_centerline_generator/package.xml +++ b/planning/autoware_static_centerline_generator/package.xml @@ -18,6 +18,7 @@ autoware_behavior_path_planner_common autoware_map_msgs autoware_path_optimizer + autoware_path_smoother autoware_perception_msgs autoware_planning_msgs geography_utils @@ -30,7 +31,6 @@ mission_planner motion_utils osqp_interface - path_smoother rclcpp rclcpp_components route_handler diff --git a/planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.cpp b/planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.cpp index 0705f0b51ddd3..7dd3a20848aca 100644 --- a/planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.cpp +++ b/planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.cpp @@ -15,9 +15,9 @@ #include "centerline_source/optimization_trajectory_based_centerline.hpp" #include "autoware_path_optimizer/node.hpp" +#include "autoware_path_smoother/elastic_band_smoother.hpp" #include "motion_utils/resample/resample.hpp" #include "motion_utils/trajectory/conversion.hpp" -#include "path_smoother/elastic_band_smoother.hpp" #include "static_centerline_generator_node.hpp" #include "tier4_autoware_utils/ros/parameter.hpp" #include "utils.hpp" @@ -128,7 +128,7 @@ std::vector OptimizationTrajectoryBasedCenterline::optimize_tra // create an instance of elastic band and model predictive trajectory. const auto eb_path_smoother_ptr = - path_smoother::ElasticBandSmoother(create_node_options()).getElasticBandSmoother(); + autoware::path_smoother::ElasticBandSmoother(create_node_options()).getElasticBandSmoother(); const auto mpt_optimizer_ptr = autoware::path_optimizer::PathOptimizer(create_node_options()).getMPTOptimizer(); @@ -152,7 +152,7 @@ std::vector OptimizationTrajectoryBasedCenterline::optimize_tra virtual_ego_pose_offset_idx) .pose; - // smooth trajectory by elastic band in the path_smoother package + // smooth trajectory by elastic band in the autoware_path_smoother package const auto smoothed_traj_points = eb_path_smoother_ptr->smoothTrajectory(raw_traj_points, virtual_ego_pose); diff --git a/planning/autoware_static_centerline_generator/test/test_static_centerline_generator.test.py b/planning/autoware_static_centerline_generator/test/test_static_centerline_generator.test.py index 7a5cdfd905fe9..6316afc8cb3dc 100644 --- a/planning/autoware_static_centerline_generator/test/test_static_centerline_generator.test.py +++ b/planning/autoware_static_centerline_generator/test/test_static_centerline_generator.test.py @@ -63,7 +63,7 @@ def generate_test_description(): "config/behavior_velocity_planner.param.yaml", ), os.path.join( - get_package_share_directory("path_smoother"), + get_package_share_directory("autoware_path_smoother"), "config/elastic_band_smoother.param.yaml", ), os.path.join( From ac483b97cafe989fb39e1e3ac445103432cbc4a5 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Sun, 9 Jun 2024 15:27:28 +0900 Subject: [PATCH 040/142] refactor(out_of_lane): remove from behavior_velocity (#7359) Signed-off-by: Maxime CLEMENT --- .github/CODEOWNERS | 1 - .../behavior_planning.launch.xml | 7 - .../motion_planning.launch.xml | 4 +- planning/.pages | 1 - .../behavior_velocity_planner.launch.xml | 2 - .../package.xml | 1 - .../test/src/test_node_interface.cpp | 2 - .../CMakeLists.txt | 12 - .../README.md | 165 -------- .../config/out_of_lane.param.yaml | 44 -- ...footprints_other_lanes_overlaps_ranges.png | Bin 127593 -> 0 bytes .../docs/out_of_lane_slow.png | Bin 110077 -> 0 bytes .../docs/out_of_lane_stop.png | Bin 183400 -> 0 bytes .../package.xml | 40 -- .../plugins.xml | 3 - .../src/calculate_slowdown_points.hpp | 106 ----- .../src/debug.cpp | 187 --------- .../src/debug.hpp | 69 ---- .../src/decisions.cpp | 383 ------------------ .../src/decisions.hpp | 115 ------ .../src/filter_predicted_objects.cpp | 146 ------- .../src/filter_predicted_objects.hpp | 57 --- .../src/footprint.cpp | 90 ---- .../src/footprint.hpp | 59 --- .../src/lanelets_selection.cpp | 130 ------ .../src/lanelets_selection.hpp | 73 ---- .../src/manager.cpp | 108 ----- .../src/manager.hpp | 66 --- .../src/overlapping_range.cpp | 126 ------ .../src/overlapping_range.hpp | 60 --- .../src/scene_out_of_lane.cpp | 244 ----------- .../src/scene_out_of_lane.hpp | 65 --- .../src/types.hpp | 235 ----------- 33 files changed, 2 insertions(+), 2599 deletions(-) delete mode 100644 planning/behavior_velocity_out_of_lane_module/CMakeLists.txt delete mode 100644 planning/behavior_velocity_out_of_lane_module/README.md delete mode 100644 planning/behavior_velocity_out_of_lane_module/config/out_of_lane.param.yaml delete mode 100644 planning/behavior_velocity_out_of_lane_module/docs/out_of_lane-footprints_other_lanes_overlaps_ranges.png delete mode 100644 planning/behavior_velocity_out_of_lane_module/docs/out_of_lane_slow.png delete mode 100644 planning/behavior_velocity_out_of_lane_module/docs/out_of_lane_stop.png delete mode 100644 planning/behavior_velocity_out_of_lane_module/package.xml delete mode 100644 planning/behavior_velocity_out_of_lane_module/plugins.xml delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/calculate_slowdown_points.hpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/debug.cpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/debug.hpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/decisions.cpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/decisions.hpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.cpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.hpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/footprint.cpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/footprint.hpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.cpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.hpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/manager.cpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/manager.hpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/overlapping_range.cpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/overlapping_range.hpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.cpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.hpp delete mode 100644 planning/behavior_velocity_out_of_lane_module/src/types.hpp diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ddbf26ebc485c..95ddb97d2bbb0 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -178,7 +178,6 @@ planning/behavior_velocity_intersection_module/** kyoichi.sugahara@tier4.jp mamo planning/behavior_velocity_no_drivable_lane_module/** ahmed.ebrahim@leodrive.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_no_stopping_area_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp -planning/behavior_velocity_out_of_lane_module/** maxime.clement@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_planner_common/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_speed_bump_module/** mdogru@leodrive.ai shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml index fdb6bc1d90643..463740d978ca6 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml @@ -32,7 +32,6 @@ - @@ -164,11 +163,6 @@ value="$(eval "'$(var behavior_velocity_planner_launch_modules)' + 'autoware::behavior_velocity_planner::SpeedBumpModulePlugin, '")" if="$(var launch_speed_bump_module)" /> - - diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml index 34e8c9d31d837..196e7b2c7262c 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml @@ -2,7 +2,7 @@ - + @@ -11,7 +11,7 @@ diff --git a/planning/.pages b/planning/.pages index a16f2a13628a1..c144941662a5d 100644 --- a/planning/.pages +++ b/planning/.pages @@ -29,7 +29,6 @@ nav: - 'No Drivable Lane': planning/behavior_velocity_no_drivable_lane_module - 'No Stopping Area': planning/behavior_velocity_no_stopping_area_module - 'Occlusion Spot': planning/behavior_velocity_occlusion_spot_module - - 'Out of Lane': planning/behavior_velocity_out_of_lane_module - 'Run Out': planning/autoware_behavior_velocity_run_out_module - 'Speed Bump': planning/behavior_velocity_speed_bump_module - 'Stop Line': planning/behavior_velocity_stop_line_module diff --git a/planning/autoware_behavior_velocity_planner/launch/behavior_velocity_planner.launch.xml b/planning/autoware_behavior_velocity_planner/launch/behavior_velocity_planner.launch.xml index d4478f87f0610..f52d9637c2134 100644 --- a/planning/autoware_behavior_velocity_planner/launch/behavior_velocity_planner.launch.xml +++ b/planning/autoware_behavior_velocity_planner/launch/behavior_velocity_planner.launch.xml @@ -24,7 +24,6 @@ - @@ -68,7 +67,6 @@ - diff --git a/planning/autoware_behavior_velocity_planner/package.xml b/planning/autoware_behavior_velocity_planner/package.xml index 4d5dc17264df0..70fd92fd9e072 100644 --- a/planning/autoware_behavior_velocity_planner/package.xml +++ b/planning/autoware_behavior_velocity_planner/package.xml @@ -76,7 +76,6 @@ behavior_velocity_no_drivable_lane_module behavior_velocity_no_stopping_area_module behavior_velocity_occlusion_spot_module - behavior_velocity_out_of_lane_module behavior_velocity_speed_bump_module behavior_velocity_stop_line_module behavior_velocity_traffic_light_module diff --git a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp index cdff8af4ac56e..cf8b918418c53 100644 --- a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp +++ b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp @@ -81,7 +81,6 @@ std::shared_ptr generateNode() module_names.emplace_back("autoware::behavior_velocity_planner::OcclusionSpotModulePlugin"); module_names.emplace_back("autoware::behavior_velocity_planner::RunOutModulePlugin"); module_names.emplace_back("autoware::behavior_velocity_planner::SpeedBumpModulePlugin"); - module_names.emplace_back("autoware::behavior_velocity_planner::OutOfLaneModulePlugin"); module_names.emplace_back("autoware::behavior_velocity_planner::NoDrivableLaneModulePlugin"); std::vector params; @@ -108,7 +107,6 @@ std::shared_ptr generateNode() get_behavior_velocity_module_config_no_prefix("stop_line"), get_behavior_velocity_module_config_no_prefix("traffic_light"), get_behavior_velocity_module_config("virtual_traffic_light"), - get_behavior_velocity_module_config_no_prefix("out_of_lane"), get_behavior_velocity_module_config_no_prefix("no_drivable_lane")}); // TODO(Takagi, Isamu): set launch_modules diff --git a/planning/behavior_velocity_out_of_lane_module/CMakeLists.txt b/planning/behavior_velocity_out_of_lane_module/CMakeLists.txt deleted file mode 100644 index e8191f9b632d5..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(behavior_velocity_out_of_lane_module) - -find_package(autoware_cmake REQUIRED) -autoware_package() -pluginlib_export_plugin_description_file(autoware_behavior_velocity_planner plugins.xml) - -ament_auto_add_library(${PROJECT_NAME} SHARED - DIRECTORY src -) - -ament_auto_package(INSTALL_TO_SHARE config) diff --git a/planning/behavior_velocity_out_of_lane_module/README.md b/planning/behavior_velocity_out_of_lane_module/README.md deleted file mode 100644 index 99396eb0edf22..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/README.md +++ /dev/null @@ -1,165 +0,0 @@ -## Out of Lane - -### Role - -`out_of_lane` is the module that decelerates and stops to prevent the ego vehicle from entering another lane with incoming dynamic objects. - -### Activation Timing - -This module is activated if `launch_out_of_lane` is set to true. - -### Inner-workings / Algorithms - -The algorithm is made of the following steps. - -1. Calculate the ego path footprints (red). -2. Calculate the other lanes (magenta). -3. Calculate the overlapping ranges between the ego path footprints and the other lanes (green). -4. For each overlapping range, decide if a stop or slow down action must be taken. -5. For each action, insert the corresponding stop or slow down point in the path. - -![overview](./docs/out_of_lane-footprints_other_lanes_overlaps_ranges.png) - -#### 1. Ego Path Footprints - -In this first step, the ego footprint is projected at each path point and are eventually inflated based on the `extra_..._offset` parameters. - -#### 2. Other lanes - -In the second step, the set of lanes to consider for overlaps is generated. -This set is built by selecting all lanelets within some distance from the ego vehicle, and then removing non-relevant lanelets. -The selection distance is chosen as the maximum between the `slowdown.distance_threshold` and the `stop.distance_threshold`. - -A lanelet is deemed non-relevant if it meets one of the following conditions. - -- It is part of the lanelets followed by the ego path. -- It contains the rear point of the ego footprint. -- It follows one of the ego path lanelets. - -#### 3. Overlapping ranges - -In the third step, overlaps between the ego path footprints and the other lanes are calculated. -For each pair of other lane $l$ and ego path footprint $f$, we calculate the overlapping polygons using `boost::geometry::intersection`. -For each overlapping polygon found, if the distance inside the other lane $l$ is above the `overlap.minimum_distance` threshold, then the overlap is ignored. -Otherwise, the arc length range (relative to the ego path) and corresponding points of the overlapping polygons are stored. -Ultimately, for each other lane $l$, overlapping ranges of successive overlaps are built with the following information: - -- overlapped other lane $l$. -- start and end ego path indexes. -- start and end ego path arc lengths. -- start and end overlap points. - -#### 4. Decisions - -In the fourth step, a decision to either slow down or stop before each overlapping range is taken based on the dynamic objects. -The conditions for the decision depend on the value of the `mode` parameter. - -Whether it is decided to slow down or stop is determined by the distance between the ego vehicle and the start of the overlapping range (in arc length along the ego path). -If this distance is bellow the `actions.slowdown.threshold`, a velocity of `actions.slowdown.velocity` will be used. -If the distance is bellow the `actions.stop.threshold`, a velocity of `0`m/s will be used. - - - - - - -
- - - -
- -##### Threshold - -With the `mode` set to `"threshold"`, -a decision to stop or slow down before a range is made if -an incoming dynamic object is estimated to reach the overlap within `threshold.time_threshold`. - -##### TTC (time to collision) - -With the `mode` set to `"ttc"`, -estimates for the times when ego and the dynamic objects reach the start and end of the overlapping range are calculated. -This is then used to calculate the time to collision over the period where ego crosses the overlap. -If the time to collision is predicted to go bellow the `ttc.threshold`, the decision to stop or slow down is made. - -##### Intervals - -With the `mode` set to `"intervals"`, -the estimated times when ego and the dynamic objects reach the start and end points of -the overlapping range are used to create time intervals. -These intervals can be made shorter or longer using the -`intervals.ego_time_buffer` and `intervals.objects_time_buffer` parameters. -If the time interval of ego overlaps with the time interval of an object, the decision to stop or slow down is made. - -##### Time estimates - -###### Ego - -To estimate the times when ego will reach an overlap, it is assumed that ego travels along its path -at its current velocity or at half the velocity of the path points, whichever is higher. - -###### Dynamic objects - -Two methods are used to estimate the time when a dynamic objects with reach some point. -If `objects.use_predicted_paths` is set to `true`, the predicted paths of the dynamic object are used if their confidence value is higher than the value set by the `objects.predicted_path_min_confidence` parameter. -Otherwise, the lanelet map is used to estimate the distance between the object and the point and the time is calculated assuming the object keeps its current velocity. - -#### 5. Path update - -Finally, for each decision to stop or slow down before an overlapping range, -a point is inserted in the path. -For a decision taken for an overlapping range with a lane $l$ starting at ego path point index $i$, -a point is inserted in the path between index $i$ and $i-1$ such that the ego footprint projected at the inserted point does not overlap $l$. -Such point with no overlap must exist since, by definition of the overlapping range, -we know that there is no overlap at $i-1$. - -If the point would cause a higher deceleration than allowed by the `max_accel` parameter (node parameter), -it is skipped. - -Moreover, parameter `action.distance_buffer` adds an extra distance between the ego footprint and the overlap when possible. - -### Module Parameters - -| Parameter | Type | Description | -| ----------------------------- | ------ | --------------------------------------------------------------------------------- | -| `mode` | string | [-] mode used to consider a dynamic object. Candidates: threshold, intervals, ttc | -| `skip_if_already_overlapping` | bool | [-] if true, do not run this module when ego already overlaps another lane | - -| Parameter /threshold | Type | Description | -| -------------------- | ------ | ---------------------------------------------------------------- | -| `time_threshold` | double | [s] consider objects that will reach an overlap within this time | - -| Parameter /intervals | Type | Description | -| --------------------- | ------ | ------------------------------------------------------- | -| `ego_time_buffer` | double | [s] extend the ego time interval by this buffer | -| `objects_time_buffer` | double | [s] extend the time intervals of objects by this buffer | - -| Parameter /ttc | Type | Description | -| -------------- | ------ | ------------------------------------------------------------------------------------------------------ | -| `threshold` | double | [s] consider objects with an estimated time to collision bellow this value while ego is on the overlap | - -| Parameter /objects | Type | Description | -| ------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `minimum_velocity` | double | [m/s] ignore objects with a velocity lower than this value | -| `predicted_path_min_confidence` | double | [-] minimum confidence required for a predicted path to be considered | -| `use_predicted_paths` | bool | [-] if true, use the predicted paths to estimate future positions; if false, assume the object moves at constant velocity along _all_ lanelets it currently is located in | - -| Parameter /overlap | Type | Description | -| ------------------ | ------ | ---------------------------------------------------------------------------------------------------- | -| `minimum_distance` | double | [m] minimum distance inside a lanelet for an overlap to be considered | -| `extra_length` | double | [m] extra arc length to add to the front and back of an overlap (used to calculate enter/exit times) | - -| Parameter /action | Type | Description | -| ----------------------------- | ------ | ---------------------------------------------------------------------------------------------- | -| `skip_if_over_max_decel` | bool | [-] if true, do not take an action that would cause more deceleration than the maximum allowed | -| `distance_buffer` | double | [m] buffer distance to try to keep between the ego footprint and lane | -| `slowdown.distance_threshold` | double | [m] insert a slow down when closer than this distance from an overlap | -| `slowdown.velocity` | double | [m] slow down velocity | -| `stop.distance_threshold` | double | [m] insert a stop when closer than this distance from an overlap | - -| Parameter /ego | Type | Description | -| -------------------- | ------ | ---------------------------------------------------- | -| `extra_front_offset` | double | [m] extra front distance to add to the ego footprint | -| `extra_rear_offset` | double | [m] extra rear distance to add to the ego footprint | -| `extra_left_offset` | double | [m] extra left distance to add to the ego footprint | -| `extra_right_offset` | double | [m] extra right distance to add to the ego footprint | diff --git a/planning/behavior_velocity_out_of_lane_module/config/out_of_lane.param.yaml b/planning/behavior_velocity_out_of_lane_module/config/out_of_lane.param.yaml deleted file mode 100644 index e4d08367ee4f7..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/config/out_of_lane.param.yaml +++ /dev/null @@ -1,44 +0,0 @@ -/**: - ros__parameters: - out_of_lane: # module to stop or slowdown before overlapping another lane with other objects - mode: ttc # mode used to consider a conflict with an object. "threshold", "intervals", or "ttc" - skip_if_already_overlapping: true # do not run this module when ego already overlaps another lane - ignore_overlaps_over_lane_changeable_lanelets: true # if true, overlaps on lane changeable lanelets are ignored - - threshold: - time_threshold: 5.0 # [s] consider objects that will reach an overlap within this time - intervals: # consider objects if their estimated time interval spent on the overlap intersect the estimated time interval of ego - ego_time_buffer: 0.5 # [s] extend the ego time interval by this buffer - objects_time_buffer: 0.5 # [s] extend the time intervals of objects by this buffer - ttc: - threshold: 3.0 # [s] consider objects with an estimated time to collision bellow this value while on the overlap - - objects: - minimum_velocity: 0.5 # [m/s] objects lower than this velocity will be ignored - use_predicted_paths: true # if true, use the predicted paths to estimate future positions. - # if false, assume the object moves at constant velocity along *all* lanelets it currently is located in. - predicted_path_min_confidence : 0.1 # when using predicted paths, ignore the ones whose confidence is lower than this value. - distance_buffer: 1.0 # [m] distance buffer used to determine if a collision will occur in the other lane - cut_predicted_paths_beyond_red_lights: true # if true, predicted paths are cut beyond the stop line of red traffic lights - - overlap: - minimum_distance: 0.0 # [m] minimum distance inside a lanelet for an overlap to be considered - extra_length: 0.0 # [m] extra arc length to add to the front and back of an overlap (used to calculate enter/exit times) - - action: # action to insert in the path if an object causes a conflict at an overlap - skip_if_over_max_decel: true # if true, do not take an action that would cause more deceleration than the maximum allowed - precision: 0.1 # [m] precision when inserting a stop pose in the path - distance_buffer: 1.5 # [m] buffer distance to try to keep between the ego footprint and lane - min_duration: 1.0 # [s] minimum duration needed before a decision can be canceled - slowdown: - distance_threshold: 30.0 # [m] insert a slowdown when closer than this distance from an overlap - velocity: 2.0 # [m/s] slowdown velocity - stop: - distance_threshold: 15.0 # [m] insert a stop when closer than this distance from an overlap - - ego: - min_assumed_velocity: 2.0 # [m/s] minimum velocity used to calculate the enter and exit times of ego - extra_front_offset: 0.0 # [m] extra front distance - extra_rear_offset: 0.0 # [m] extra rear distance - extra_right_offset: 0.0 # [m] extra right distance - extra_left_offset: 0.0 # [m] extra left distance diff --git a/planning/behavior_velocity_out_of_lane_module/docs/out_of_lane-footprints_other_lanes_overlaps_ranges.png b/planning/behavior_velocity_out_of_lane_module/docs/out_of_lane-footprints_other_lanes_overlaps_ranges.png deleted file mode 100644 index f095467b3b0acd9a0d1f770422b2f845cd342246..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127593 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
j#V8NOqcm!f|H}G#+<|Ynx@H=)LJn% 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 diff --git a/planning/behavior_velocity_out_of_lane_module/docs/out_of_lane_stop.png b/planning/behavior_velocity_out_of_lane_module/docs/out_of_lane_stop.png deleted file mode 100644 index fdb75ac0c6eb8bcf93eb3341f7de19e2b6123da9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183400 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 diff --git a/planning/behavior_velocity_out_of_lane_module/package.xml b/planning/behavior_velocity_out_of_lane_module/package.xml deleted file mode 100644 index 6ea60dd1398f5..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/package.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - behavior_velocity_out_of_lane_module - 0.1.0 - The behavior_velocity_out_of_lane_module package - - Maxime Clement - Tomoya Kimura - Shumpei Wakabayashi - Takayuki Murooka - - Apache License 2.0 - - ament_cmake_auto - autoware_cmake - autoware_behavior_velocity_planner_common - autoware_perception_msgs - autoware_planning_msgs - geometry_msgs - lanelet2_extension - libboost-dev - motion_utils - pluginlib - rclcpp - route_handler - tf2 - tier4_autoware_utils - tier4_planning_msgs - traffic_light_utils - vehicle_info_util - visualization_msgs - - ament_lint_auto - autoware_lint_common - - - ament_cmake - - diff --git a/planning/behavior_velocity_out_of_lane_module/plugins.xml b/planning/behavior_velocity_out_of_lane_module/plugins.xml deleted file mode 100644 index f85eb50367ccc..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/plugins.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/planning/behavior_velocity_out_of_lane_module/src/calculate_slowdown_points.hpp b/planning/behavior_velocity_out_of_lane_module/src/calculate_slowdown_points.hpp deleted file mode 100644 index 5e3877753d203..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/calculate_slowdown_points.hpp +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef CALCULATE_SLOWDOWN_POINTS_HPP_ -#define CALCULATE_SLOWDOWN_POINTS_HPP_ - -#include "footprint.hpp" -#include "types.hpp" - -#include -#include - -#include - -#include -#include - -namespace autoware::behavior_velocity_planner::out_of_lane -{ - -/// @brief estimate whether ego can decelerate without breaking the deceleration limit -/// @details assume ego wants to reach the target point at the target velocity -/// @param [in] ego_data ego data -/// @param [in] point target point -/// @param [in] target_vel target_velocity -bool can_decelerate( - const EgoData & ego_data, const PathPointWithLaneId & point, const double target_vel) -{ - if (ego_data.velocity < 0.5) return true; - const auto dist_ahead_of_ego = motion_utils::calcSignedArcLength( - ego_data.path.points, ego_data.pose.position, point.point.pose.position); - const auto acc_to_target_vel = - (ego_data.velocity * ego_data.velocity - target_vel * target_vel) / (2 * dist_ahead_of_ego); - return acc_to_target_vel < std::abs(ego_data.max_decel); -} - -/// @brief calculate the last pose along the path where ego does not overlap the lane to avoid -/// @param [in] ego_data ego data -/// @param [in] decision the input decision (i.e., which lane to avoid and at what speed) -/// @param [in] footprint the ego footprint -/// @param [in] prev_slowdown_point previous slowdown point. If set, ignore deceleration limits -/// @param [in] params parameters -/// @return the last pose that is not out of lane (if found) -std::optional calculate_last_in_lane_pose( - const EgoData & ego_data, const Slowdown & decision, const Polygon2d & footprint, - const std::optional & prev_slowdown_point, const PlannerParam & params) -{ - const auto from_arc_length = - motion_utils::calcSignedArcLength(ego_data.path.points, 0, ego_data.first_path_idx); - const auto to_arc_length = - motion_utils::calcSignedArcLength(ego_data.path.points, 0, decision.target_path_idx); - PathPointWithLaneId interpolated_point; - for (auto l = to_arc_length - params.precision; l > from_arc_length; l -= params.precision) { - // TODO(Maxime): binary search - interpolated_point.point.pose = motion_utils::calcInterpolatedPose(ego_data.path.points, l); - const auto respect_decel_limit = - !params.skip_if_over_max_decel || prev_slowdown_point || - can_decelerate(ego_data, interpolated_point, decision.velocity); - const auto interpolated_footprint = project_to_pose(footprint, interpolated_point.point.pose); - const auto is_overlap_lane = boost::geometry::overlaps( - interpolated_footprint, decision.lane_to_avoid.polygon2d().basicPolygon()); - const auto is_overlap_extra_lane = - prev_slowdown_point && - boost::geometry::overlaps( - interpolated_footprint, - prev_slowdown_point->slowdown.lane_to_avoid.polygon2d().basicPolygon()); - if (respect_decel_limit && !is_overlap_lane && !is_overlap_extra_lane) - return interpolated_point; - } - return std::nullopt; -} - -/// @brief calculate the slowdown point to insert in the path -/// @param ego_data ego data (path, velocity, etc) -/// @param decisions decision (before which point to stop, what lane to avoid entering, etc) -/// @param prev_slowdown_point previously calculated slowdown point -/// @param params parameters -/// @return optional slowdown point to insert in the path -std::optional calculate_slowdown_point( - const EgoData & ego_data, const std::vector & decisions, - const std::optional prev_slowdown_point, PlannerParam params) -{ - params.extra_front_offset += params.dist_buffer; - const auto base_footprint = make_base_footprint(params); - - // search for the first slowdown decision for which a stop point can be inserted - for (const auto & decision : decisions) { - const auto last_in_lane_pose = - calculate_last_in_lane_pose(ego_data, decision, base_footprint, prev_slowdown_point, params); - if (last_in_lane_pose) return SlowdownToInsert{decision, *last_in_lane_pose}; - } - return std::nullopt; -} -} // namespace autoware::behavior_velocity_planner::out_of_lane -#endif // CALCULATE_SLOWDOWN_POINTS_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/debug.cpp b/planning/behavior_velocity_out_of_lane_module/src/debug.cpp deleted file mode 100644 index 08e66f99e2a0c..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/debug.cpp +++ /dev/null @@ -1,187 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "debug.hpp" - -#include - -#include - -namespace autoware::behavior_velocity_planner::out_of_lane::debug -{ -namespace -{ -visualization_msgs::msg::Marker get_base_marker() -{ - visualization_msgs::msg::Marker base_marker; - base_marker.header.frame_id = "map"; - base_marker.header.stamp = rclcpp::Time(0); - base_marker.id = 0; - base_marker.type = visualization_msgs::msg::Marker::LINE_STRIP; - base_marker.action = visualization_msgs::msg::Marker::ADD; - base_marker.pose.position = tier4_autoware_utils::createMarkerPosition(0.0, 0.0, 0); - base_marker.pose.orientation = tier4_autoware_utils::createMarkerOrientation(0, 0, 0, 1.0); - base_marker.scale = tier4_autoware_utils::createMarkerScale(0.1, 0.1, 0.1); - base_marker.color = tier4_autoware_utils::createMarkerColor(1.0, 0.1, 0.1, 0.5); - return base_marker; -} -} // namespace -void add_footprint_markers( - visualization_msgs::msg::MarkerArray & debug_marker_array, - const lanelet::BasicPolygons2d & footprints, const double z, const size_t prev_nb) -{ - auto debug_marker = get_base_marker(); - debug_marker.ns = "footprints"; - for (const auto & f : footprints) { - debug_marker.points.clear(); - for (const auto & p : f) - debug_marker.points.push_back( - tier4_autoware_utils::createMarkerPosition(p.x(), p.y(), z + 0.5)); - debug_marker.points.push_back(debug_marker.points.front()); - debug_marker_array.markers.push_back(debug_marker); - debug_marker.id++; - debug_marker.points.clear(); - } - for (; debug_marker.id < static_cast(prev_nb); ++debug_marker.id) - debug_marker_array.markers.push_back(debug_marker); -} - -void add_current_overlap_marker( - visualization_msgs::msg::MarkerArray & debug_marker_array, - const lanelet::BasicPolygon2d & current_footprint, - const lanelet::ConstLanelets & current_overlapped_lanelets, const double z, const size_t prev_nb) -{ - auto debug_marker = get_base_marker(); - debug_marker.ns = "current_overlap"; - debug_marker.points.clear(); - for (const auto & p : current_footprint) - debug_marker.points.push_back(tier4_autoware_utils::createMarkerPosition(p.x(), p.y(), z)); - if (!debug_marker.points.empty()) debug_marker.points.push_back(debug_marker.points.front()); - if (current_overlapped_lanelets.empty()) - debug_marker.color = tier4_autoware_utils::createMarkerColor(0.1, 1.0, 0.1, 0.5); - else - debug_marker.color = tier4_autoware_utils::createMarkerColor(1.0, 0.1, 0.1, 0.5); - debug_marker_array.markers.push_back(debug_marker); - debug_marker.id++; - for (const auto & ll : current_overlapped_lanelets) { - debug_marker.points.clear(); - for (const auto & p : ll.polygon3d()) - debug_marker.points.push_back( - tier4_autoware_utils::createMarkerPosition(p.x(), p.y(), p.z() + 0.5)); - debug_marker.points.push_back(debug_marker.points.front()); - debug_marker_array.markers.push_back(debug_marker); - debug_marker.id++; - } - for (; debug_marker.id < static_cast(prev_nb); ++debug_marker.id) - debug_marker_array.markers.push_back(debug_marker); -} - -void add_lanelet_markers( - visualization_msgs::msg::MarkerArray & debug_marker_array, - const lanelet::ConstLanelets & lanelets, const std::string & ns, - const std_msgs::msg::ColorRGBA & color, const size_t prev_nb) -{ - auto debug_marker = get_base_marker(); - debug_marker.ns = ns; - debug_marker.color = color; - for (const auto & ll : lanelets) { - debug_marker.points.clear(); - - // add a small z offset to draw above the lanelet map - for (const auto & p : ll.polygon3d()) - debug_marker.points.push_back( - tier4_autoware_utils::createMarkerPosition(p.x(), p.y(), p.z() + 0.1)); - debug_marker.points.push_back(debug_marker.points.front()); - debug_marker_array.markers.push_back(debug_marker); - debug_marker.id++; - } - debug_marker.action = debug_marker.DELETE; - for (; debug_marker.id < static_cast(prev_nb); ++debug_marker.id) - debug_marker_array.markers.push_back(debug_marker); -} - -void add_range_markers( - visualization_msgs::msg::MarkerArray & debug_marker_array, const OverlapRanges & ranges, - const tier4_planning_msgs::msg::PathWithLaneId & path, const size_t first_ego_idx, const double z, - const size_t prev_nb) -{ - auto debug_marker = get_base_marker(); - debug_marker.ns = "ranges"; - debug_marker.color = tier4_autoware_utils::createMarkerColor(0.2, 0.9, 0.1, 0.5); - for (const auto & range : ranges) { - debug_marker.points.clear(); - debug_marker.points.push_back( - path.points[first_ego_idx + range.entering_path_idx].point.pose.position); - debug_marker.points.push_back(tier4_autoware_utils::createMarkerPosition( - range.entering_point.x(), range.entering_point.y(), z)); - for (const auto & overlap : range.debug.overlaps) { - debug_marker.points.push_back(tier4_autoware_utils::createMarkerPosition( - overlap.min_overlap_point.x(), overlap.min_overlap_point.y(), z)); - debug_marker.points.push_back(tier4_autoware_utils::createMarkerPosition( - overlap.max_overlap_point.x(), overlap.max_overlap_point.y(), z)); - } - debug_marker.points.push_back(tier4_autoware_utils::createMarkerPosition( - range.exiting_point.x(), range.exiting_point.y(), z)); - debug_marker.points.push_back( - path.points[first_ego_idx + range.exiting_path_idx].point.pose.position); - debug_marker_array.markers.push_back(debug_marker); - debug_marker.id++; - } - debug_marker.action = debug_marker.DELETE; - for (; debug_marker.id < static_cast(prev_nb); ++debug_marker.id) - debug_marker_array.markers.push_back(debug_marker); - debug_marker.action = debug_marker.ADD; - debug_marker.id = 0; - debug_marker.ns = "decisions"; - debug_marker.color = tier4_autoware_utils::createMarkerColor(0.9, 0.1, 0.1, 1.0); - debug_marker.points.clear(); - for (const auto & range : ranges) { - debug_marker.type = debug_marker.LINE_STRIP; - if (range.debug.decision) { - debug_marker.points.push_back(tier4_autoware_utils::createMarkerPosition( - range.entering_point.x(), range.entering_point.y(), z)); - debug_marker.points.push_back( - range.debug.object->kinematics.initial_pose_with_covariance.pose.position); - } - debug_marker_array.markers.push_back(debug_marker); - debug_marker.points.clear(); - debug_marker.id++; - - debug_marker.type = debug_marker.TEXT_VIEW_FACING; - debug_marker.pose.position.x = range.entering_point.x(); - debug_marker.pose.position.y = range.entering_point.y(); - debug_marker.pose.position.z = z; - std::stringstream ss; - ss << "Ego: " << range.debug.times.ego.enter_time << " - " << range.debug.times.ego.exit_time - << "\n"; - if (range.debug.object) { - debug_marker.pose.position.x += - range.debug.object->kinematics.initial_pose_with_covariance.pose.position.x; - debug_marker.pose.position.y += - range.debug.object->kinematics.initial_pose_with_covariance.pose.position.y; - debug_marker.pose.position.x /= 2; - debug_marker.pose.position.y /= 2; - ss << "Obj: " << range.debug.times.object.enter_time << " - " - << range.debug.times.object.exit_time << "\n"; - } - debug_marker.scale.z = 1.0; - debug_marker.text = ss.str(); - debug_marker_array.markers.push_back(debug_marker); - debug_marker.id++; - } - for (; debug_marker.id < static_cast(prev_nb); ++debug_marker.id) - debug_marker_array.markers.push_back(debug_marker); -} - -} // namespace autoware::behavior_velocity_planner::out_of_lane::debug diff --git a/planning/behavior_velocity_out_of_lane_module/src/debug.hpp b/planning/behavior_velocity_out_of_lane_module/src/debug.hpp deleted file mode 100644 index 05eed6b35c13c..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/debug.hpp +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef DEBUG_HPP_ -#define DEBUG_HPP_ - -#include "types.hpp" - -#include - -#include - -#include - -namespace autoware::behavior_velocity_planner::out_of_lane::debug -{ -/// @brief add footprint markers to the given marker array -/// @param [inout] debug_marker_array marker array -/// @param [in] footprints footprints to turn into markers -/// @param [in] z z value to use for the markers -/// @param [in] prev_nb previous number of markers (used to delete the extra ones) -void add_footprint_markers( - visualization_msgs::msg::MarkerArray & debug_marker_array, - const lanelet::BasicPolygons2d & footprints, const double z, const size_t prev_nb); -/// @brief add footprint markers to the given marker array -/// @param [inout] debug_marker_array marker array -/// @param [in] current_footprint footprint to turn into a marker -/// @param [in] current_overlapped_lanelets lanelets to turn into markers -/// @param [in] z z value to use for the markers -/// @param [in] prev_nb previous number of markers (used to delete the extra ones) -void add_current_overlap_marker( - visualization_msgs::msg::MarkerArray & debug_marker_array, - const lanelet::BasicPolygon2d & current_footprint, - const lanelet::ConstLanelets & current_overlapped_lanelets, const double z, const size_t prev_nb); -/// @brief add footprint markers to the given marker array -/// @param [inout] debug_marker_array marker array -/// @param [in] lanelets lanelets to turn into markers -/// @param [in] ns namespace of the markers -/// @param [in] color namespace of the markers -/// @param [in] prev_nb previous number of markers (used to delete the extra ones) -void add_lanelet_markers( - visualization_msgs::msg::MarkerArray & debug_marker_array, - const lanelet::ConstLanelets & lanelets, const std::string & ns, - const std_msgs::msg::ColorRGBA & color, const size_t prev_nb); -/// @brief add ranges markers to the given marker array -/// @param [inout] debug_marker_array marker array -/// @param [in] ranges ranges to turn into markers -/// @param [in] path modified ego path that was used to calculate the ranges -/// @param [in] first_path_idx first idx of ego on the path -/// @param [in] z z value to use for the markers -/// @param [in] prev_nb previous number of markers (used to delete the extra ones) -void add_range_markers( - visualization_msgs::msg::MarkerArray & debug_marker_array, const OverlapRanges & ranges, - const tier4_planning_msgs::msg::PathWithLaneId & path, const size_t first_path_idx, - const double z, const size_t prev_nb); -} // namespace autoware::behavior_velocity_planner::out_of_lane::debug - -#endif // DEBUG_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/decisions.cpp b/planning/behavior_velocity_out_of_lane_module/src/decisions.cpp deleted file mode 100644 index 62416c8d38ed6..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/decisions.cpp +++ /dev/null @@ -1,383 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "decisions.hpp" - -#include -#include -#include -#include - -#include - -#include -#include -#include - -#include -#include -#include -#include -namespace autoware::behavior_velocity_planner::out_of_lane -{ -double distance_along_path(const EgoData & ego_data, const size_t target_idx) -{ - return motion_utils::calcSignedArcLength( - ego_data.path.points, ego_data.pose.position, ego_data.first_path_idx + target_idx); -} - -double time_along_path(const EgoData & ego_data, const size_t target_idx, const double min_velocity) -{ - const auto dist = distance_along_path(ego_data, target_idx); - const auto v = std::max( - std::max(ego_data.velocity, min_velocity), - ego_data.path.points[ego_data.first_path_idx + target_idx].point.longitudinal_velocity_mps * - 0.5); - return dist / v; -} - -bool object_is_incoming( - const lanelet::BasicPoint2d & object_position, - const std::shared_ptr route_handler, - const lanelet::ConstLanelet & lane) -{ - const auto lanelets = route_handler->getPrecedingLaneletSequence(lane, 50.0); - if (boost::geometry::within(object_position, lane.polygon2d().basicPolygon())) return true; - for (const auto & lls : lanelets) - for (const auto & ll : lls) - if (boost::geometry::within(object_position, ll.polygon2d().basicPolygon())) return true; - return false; -} - -std::optional> object_time_to_range( - const autoware_perception_msgs::msg::PredictedObject & object, const OverlapRange & range, - const std::shared_ptr route_handler, const double dist_buffer, - const rclcpp::Logger & logger) -{ - // skip the dynamic object if it is not in a lane preceding the overlapped lane - // lane changes are intentionally not considered - const auto object_point = lanelet::BasicPoint2d( - object.kinematics.initial_pose_with_covariance.pose.position.x, - object.kinematics.initial_pose_with_covariance.pose.position.y); - if (!object_is_incoming(object_point, route_handler, range.lane)) return {}; - - const auto max_deviation = object.shape.dimensions.y + range.inside_distance + dist_buffer; - const auto max_lon_deviation = object.shape.dimensions.x / 2.0; - auto worst_enter_time = std::optional(); - auto worst_exit_time = std::optional(); - - for (const auto & predicted_path : object.kinematics.predicted_paths) { - const auto unique_path_points = motion_utils::removeOverlapPoints(predicted_path.path); - if (unique_path_points.size() < 2) continue; - const auto time_step = rclcpp::Duration(predicted_path.time_step).seconds(); - const auto enter_point = - geometry_msgs::msg::Point().set__x(range.entering_point.x()).set__y(range.entering_point.y()); - const auto enter_segment_idx = - motion_utils::findNearestSegmentIndex(unique_path_points, enter_point); - const auto enter_offset = motion_utils::calcLongitudinalOffsetToSegment( - unique_path_points, enter_segment_idx, enter_point); - const auto enter_lat_dist = - std::abs(motion_utils::calcLateralOffset(unique_path_points, enter_point, enter_segment_idx)); - const auto enter_segment_length = tier4_autoware_utils::calcDistance2d( - unique_path_points[enter_segment_idx], unique_path_points[enter_segment_idx + 1]); - const auto enter_offset_ratio = enter_offset / enter_segment_length; - const auto enter_time = - static_cast(enter_segment_idx) * time_step + enter_offset_ratio * time_step; - - const auto exit_point = - geometry_msgs::msg::Point().set__x(range.exiting_point.x()).set__y(range.exiting_point.y()); - const auto exit_segment_idx = - motion_utils::findNearestSegmentIndex(unique_path_points, exit_point); - const auto exit_offset = motion_utils::calcLongitudinalOffsetToSegment( - unique_path_points, exit_segment_idx, exit_point); - const auto exit_lat_dist = - std::abs(motion_utils::calcLateralOffset(unique_path_points, exit_point, exit_segment_idx)); - const auto exit_segment_length = tier4_autoware_utils::calcDistance2d( - unique_path_points[exit_segment_idx], unique_path_points[exit_segment_idx + 1]); - const auto exit_offset_ratio = exit_offset / static_cast(exit_segment_length); - const auto exit_time = - static_cast(exit_segment_idx) * time_step + exit_offset_ratio * time_step; - - RCLCPP_DEBUG( - logger, "\t\t\tPredicted path (time step = %2.2fs): enter @ %2.2fs, exit @ %2.2fs", time_step, - enter_time, exit_time); - // predicted path is too far from the overlapping range to be relevant - const auto is_far_from_entering_point = enter_lat_dist > max_deviation; - const auto is_far_from_exiting_point = exit_lat_dist > max_deviation; - if (is_far_from_entering_point && is_far_from_exiting_point) { - RCLCPP_DEBUG( - logger, - " * far_from_enter (%d) = %2.2fm | far_from_exit (%d) = %2.2fm | max_dev = %2.2fm\n", - is_far_from_entering_point, enter_lat_dist, is_far_from_exiting_point, exit_lat_dist, - max_deviation); - continue; - } - const auto is_last_predicted_path_point = - (exit_segment_idx + 2 == unique_path_points.size() || - enter_segment_idx + 2 == unique_path_points.size()); - const auto does_not_reach_overlap = - is_last_predicted_path_point && (std::min(exit_offset, enter_offset) > max_lon_deviation); - if (does_not_reach_overlap) { - RCLCPP_DEBUG( - logger, " * does not reach the overlap = %2.2fm | max_dev = %2.2fm\n", - std::min(exit_offset, enter_offset), max_lon_deviation); - continue; - } - - const auto same_driving_direction_as_ego = enter_time < exit_time; - if (same_driving_direction_as_ego) { - worst_enter_time = worst_enter_time ? std::min(*worst_enter_time, enter_time) : enter_time; - worst_exit_time = worst_exit_time ? std::max(*worst_exit_time, exit_time) : exit_time; - } else { - worst_enter_time = worst_enter_time ? std::max(*worst_enter_time, enter_time) : enter_time; - worst_exit_time = worst_exit_time ? std::min(*worst_exit_time, exit_time) : exit_time; - } - } - if (worst_enter_time && worst_exit_time) { - RCLCPP_DEBUG( - logger, "\t\t\t * found enter/exit time [%2.2f, %2.2f]\n", *worst_enter_time, - *worst_exit_time); - return std::make_pair(*worst_enter_time, *worst_exit_time); - } - RCLCPP_DEBUG(logger, "\t\t\t * enter/exit time not found\n"); - return {}; -} - -std::optional> object_time_to_range( - const autoware_perception_msgs::msg::PredictedObject & object, const OverlapRange & range, - const DecisionInputs & inputs, const rclcpp::Logger & logger) -{ - const auto & p = object.kinematics.initial_pose_with_covariance.pose.position; - const auto object_point = lanelet::BasicPoint2d(p.x, p.y); - const auto half_size = object.shape.dimensions.x / 2.0; - lanelet::ConstLanelets object_lanelets; - for (const auto & ll : inputs.lanelets) - if (boost::geometry::within(object_point, ll.polygon2d().basicPolygon())) - object_lanelets.push_back(ll); - - geometry_msgs::msg::Pose pose; - pose.position.set__x(range.entering_point.x()).set__y(range.entering_point.y()); - const auto range_enter_length = lanelet::utils::getArcCoordinates({range.lane}, pose).length; - pose.position.set__x(range.exiting_point.x()).set__y(range.exiting_point.y()); - const auto range_exit_length = lanelet::utils::getArcCoordinates({range.lane}, pose).length; - const auto range_size = std::abs(range_enter_length - range_exit_length); - auto worst_enter_dist = std::optional(); - auto worst_exit_dist = std::optional(); - for (const auto & lane : object_lanelets) { - const auto path = inputs.route_handler->getRoutingGraphPtr()->shortestPath(lane, range.lane); - RCLCPP_DEBUG( - logger, "\t\t\tPath ? %d [from %ld to %ld]\n", path.has_value(), lane.id(), range.lane.id()); - if (path) { - lanelet::ConstLanelets lls; - for (const auto & ll : *path) lls.push_back(ll); - pose.position.set__x(object_point.x()).set__y(object_point.y()); - const auto object_curr_length = lanelet::utils::getArcCoordinates(lls, pose).length; - pose.position.set__x(range.entering_point.x()).set__y(range.entering_point.y()); - const auto enter_dist = - lanelet::utils::getArcCoordinates(lls, pose).length - object_curr_length; - pose.position.set__x(range.exiting_point.x()).set__y(range.exiting_point.y()); - const auto exit_dist = - lanelet::utils::getArcCoordinates(lls, pose).length - object_curr_length; - RCLCPP_DEBUG( - logger, "\t\t\t%2.2f -> [%2.2f(%2.2f, %2.2f) - %2.2f(%2.2f, %2.2f)]\n", object_curr_length, - enter_dist, range.entering_point.x(), range.entering_point.y(), exit_dist, - range.exiting_point.x(), range.exiting_point.y()); - const auto already_entered_range = std::abs(enter_dist - exit_dist) > range_size * 2.0; - if (already_entered_range) continue; - // multiple paths to the overlap -> be conservative and use the "worst" case - // "worst" = min/max arc length depending on if the lane is running opposite to the ego path - const auto is_opposite = enter_dist > exit_dist; - if (!worst_enter_dist) - worst_enter_dist = enter_dist; - else if (is_opposite) - worst_enter_dist = std::max(*worst_enter_dist, enter_dist); - else - worst_enter_dist = std::min(*worst_enter_dist, enter_dist); - if (!worst_exit_dist) - worst_exit_dist = exit_dist; - else if (is_opposite) - worst_exit_dist = std::max(*worst_exit_dist, exit_dist); - else - worst_exit_dist = std::min(*worst_exit_dist, exit_dist); - } - } - if (worst_enter_dist && worst_exit_dist) { - const auto v = object.kinematics.initial_twist_with_covariance.twist.linear.x; - return std::make_pair((*worst_enter_dist - half_size) / v, (*worst_exit_dist + half_size) / v); - } - return {}; -} - -bool threshold_condition(const RangeTimes & range_times, const PlannerParam & params) -{ - const auto enter_within_threshold = - range_times.object.enter_time > 0.0 && range_times.object.enter_time < params.time_threshold; - const auto exit_within_threshold = - range_times.object.exit_time > 0.0 && range_times.object.exit_time < params.time_threshold; - return enter_within_threshold || exit_within_threshold; -} - -bool intervals_condition( - const RangeTimes & range_times, const PlannerParam & params, const rclcpp::Logger & logger) -{ - const auto opposite_way_condition = [&]() -> bool { - const auto ego_exits_before_object_enters = - range_times.ego.exit_time + params.intervals_ego_buffer < - range_times.object.enter_time + params.intervals_obj_buffer; - RCLCPP_DEBUG( - logger, - "\t\t\t[Intervals] (opposite way) ego exit %2.2fs < obj enter %2.2fs ? -> should not " - "enter = %d\n", - range_times.ego.exit_time + params.intervals_ego_buffer, - range_times.object.enter_time + params.intervals_obj_buffer, ego_exits_before_object_enters); - return ego_exits_before_object_enters; - }; - const auto same_way_condition = [&]() -> bool { - const auto object_enters_during_overlap = - range_times.ego.enter_time - params.intervals_ego_buffer < - range_times.object.enter_time + params.intervals_obj_buffer && - range_times.object.enter_time - params.intervals_obj_buffer - range_times.ego.exit_time < - range_times.ego.exit_time + params.intervals_ego_buffer; - const auto object_exits_during_overlap = - range_times.ego.enter_time - params.intervals_ego_buffer < - range_times.object.exit_time + params.intervals_obj_buffer && - range_times.object.exit_time - params.intervals_obj_buffer - range_times.ego.exit_time < - range_times.ego.exit_time + params.intervals_ego_buffer; - RCLCPP_DEBUG( - logger, - "\t\t\t[Intervals] obj enters during overlap ? %d OR obj exits during overlap %d ? -> should " - "not " - "enter = %d\n", - object_enters_during_overlap, object_exits_during_overlap, - object_enters_during_overlap || object_exits_during_overlap); - return object_enters_during_overlap || object_exits_during_overlap; - }; - - const auto object_is_going_same_way = - range_times.object.enter_time < range_times.object.exit_time; - return (object_is_going_same_way && same_way_condition()) || - (!object_is_going_same_way && opposite_way_condition()); -} - -bool ttc_condition( - const RangeTimes & range_times, const PlannerParam & params, const rclcpp::Logger & logger) -{ - const auto ttc_at_enter = range_times.ego.enter_time - range_times.object.enter_time; - const auto ttc_at_exit = range_times.ego.exit_time - range_times.object.exit_time; - const auto collision_during_overlap = (ttc_at_enter < 0.0) != (ttc_at_exit < 0.0); - const auto ttc_is_bellow_threshold = - std::min(std::abs(ttc_at_enter), std::abs(ttc_at_exit)) <= params.ttc_threshold; - RCLCPP_DEBUG( - logger, "\t\t\t[TTC] (%2.2fs - %2.2fs) -> %d\n", ttc_at_enter, ttc_at_exit, - (collision_during_overlap || ttc_is_bellow_threshold)); - return collision_during_overlap || ttc_is_bellow_threshold; -} - -bool will_collide_on_range( - const RangeTimes & range_times, const PlannerParam & params, const rclcpp::Logger & logger) -{ - RCLCPP_DEBUG( - logger, " enter at %2.2fs, exits at %2.2fs\n", range_times.object.enter_time, - range_times.object.exit_time); - return (params.mode == "threshold" && threshold_condition(range_times, params)) || - (params.mode == "intervals" && intervals_condition(range_times, params, logger)) || - (params.mode == "ttc" && ttc_condition(range_times, params, logger)); -} - -bool should_not_enter( - const OverlapRange & range, const DecisionInputs & inputs, const PlannerParam & params, - const rclcpp::Logger & logger) -{ - RangeTimes range_times{}; - range_times.ego.enter_time = - time_along_path(inputs.ego_data, range.entering_path_idx, params.ego_min_velocity); - range_times.ego.exit_time = - time_along_path(inputs.ego_data, range.exiting_path_idx, params.ego_min_velocity); - RCLCPP_DEBUG( - logger, "\t[%lu -> %lu] %ld | ego enters at %2.2f, exits at %2.2f\n", range.entering_path_idx, - range.exiting_path_idx, range.lane.id(), range_times.ego.enter_time, range_times.ego.exit_time); - for (const auto & object : inputs.objects.objects) { - RCLCPP_DEBUG( - logger, "\t\t[%s] going at %2.2fm/s", - tier4_autoware_utils::toHexString(object.object_id).c_str(), - object.kinematics.initial_twist_with_covariance.twist.linear.x); - if (object.kinematics.initial_twist_with_covariance.twist.linear.x < params.objects_min_vel) { - RCLCPP_DEBUG(logger, " SKIP (velocity bellow threshold %2.2fm/s)\n", params.objects_min_vel); - continue; // skip objects with velocity bellow a threshold - } - // skip objects that are already on the interval - const auto enter_exit_time = - params.objects_use_predicted_paths - ? object_time_to_range( - object, range, inputs.route_handler, params.objects_dist_buffer, logger) - : object_time_to_range(object, range, inputs, logger); - if (!enter_exit_time) { - RCLCPP_DEBUG(logger, " SKIP (no enter/exit times found)\n"); - continue; // skip objects that are not driving towards the overlapping range - } - - range_times.object.enter_time = enter_exit_time->first; - range_times.object.exit_time = enter_exit_time->second; - if (will_collide_on_range(range_times, params, logger)) { - range.debug.times = range_times; - range.debug.object = object; - return true; - } - } - range.debug.times = range_times; - return false; -} - -void set_decision_velocity( - std::optional & decision, const double distance, const PlannerParam & params) -{ - if (distance < params.stop_dist_threshold) { - decision->velocity = 0.0; - } else if (distance < params.slow_dist_threshold) { - decision->velocity = params.slow_velocity; - } else { - decision.reset(); - } -} - -std::optional calculate_decision( - const OverlapRange & range, const DecisionInputs & inputs, const PlannerParam & params, - const rclcpp::Logger & logger) -{ - std::optional decision; - if (should_not_enter(range, inputs, params, logger)) { - decision.emplace(); - decision->target_path_idx = - inputs.ego_data.first_path_idx + range.entering_path_idx; // add offset from curr pose - decision->lane_to_avoid = range.lane; - const auto ego_dist_to_range = distance_along_path(inputs.ego_data, range.entering_path_idx); - set_decision_velocity(decision, ego_dist_to_range, params); - } - return decision; -} - -std::vector calculate_decisions( - const DecisionInputs & inputs, const PlannerParam & params, const rclcpp::Logger & logger) -{ - std::vector decisions; - for (const auto & range : inputs.ranges) { - if (range.entering_path_idx == 0UL) continue; // skip if we already entered the range - const auto optional_decision = calculate_decision(range, inputs, params, logger); - range.debug.decision = optional_decision; - if (optional_decision) decisions.push_back(*optional_decision); - } - return decisions; -} - -} // namespace autoware::behavior_velocity_planner::out_of_lane diff --git a/planning/behavior_velocity_out_of_lane_module/src/decisions.hpp b/planning/behavior_velocity_out_of_lane_module/src/decisions.hpp deleted file mode 100644 index 27c5b00c96b3f..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/decisions.hpp +++ /dev/null @@ -1,115 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef DECISIONS_HPP_ -#define DECISIONS_HPP_ - -#include "types.hpp" - -#include -#include - -#include - -#include - -#include -#include -#include -#include - -namespace autoware::behavior_velocity_planner::out_of_lane -{ -/// @brief calculate the distance along the ego path between ego and some target path index -/// @param [in] ego_data data related to the ego vehicle -/// @param [in] target_idx target ego path index -/// @return distance between ego and the target [m] -double distance_along_path(const EgoData & ego_data, const size_t target_idx); -/// @brief estimate the time when ego will reach some target path index -/// @param [in] ego_data data related to the ego vehicle -/// @param [in] target_idx target ego path index -/// @param [in] min_velocity minimum ego velocity used to estimate the time -/// @return time taken by ego to reach the target [s] -double time_along_path(const EgoData & ego_data, const size_t target_idx); -/// @brief use an object's predicted paths to estimate the times it will reach the enter and exit -/// points of an overlapping range -/// @details times when the predicted paths of the object enters/exits the range are calculated -/// but may not exist (e.g,, predicted path ends before reaching the end of the range) -/// @param [in] object dynamic object -/// @param [in] range overlapping range -/// @param [in] route_handler route handler used to estimate the path of the dynamic object -/// @param [in] logger ros logger -/// @return an optional pair (time at enter [s], time at exit [s]). If the dynamic object drives in -/// the opposite direction, time at enter > time at exit -std::optional> object_time_to_range( - const autoware_perception_msgs::msg::PredictedObject & object, const OverlapRange & range, - const std::shared_ptr route_handler, const double dist_buffer, - const rclcpp::Logger & logger); -/// @brief use the lanelet map to estimate the times when an object will reach the enter and exit -/// points of an overlapping range -/// @param [in] object dynamic object -/// @param [in] range overlapping range -/// @param [in] inputs information used to take decisions (ranges, ego and objects data, route -/// handler, lanelets) -/// @param [in] dist_buffer extra distance used to estimate if a collision will occur on the range -/// @param [in] logger ros logger -/// @return an optional pair (time at enter [s], time at exit [s]). If the dynamic object drives in -/// the opposite direction, time at enter > time at exit. -std::optional> object_time_to_range( - const autoware_perception_msgs::msg::PredictedObject & object, const OverlapRange & range, - const DecisionInputs & inputs, const rclcpp::Logger & logger); -/// @brief decide whether an object is coming in the range at the same time as ego -/// @details the condition depends on the mode (threshold, intervals, ttc) -/// @param [in] range_times times when ego and the object enter/exit the range -/// @param [in] params parameters -/// @param [in] logger ros logger -bool will_collide_on_range( - const RangeTimes & range_times, const PlannerParam & params, const rclcpp::Logger & logger); -/// @brief check whether we should avoid entering the given range -/// @param [in] range the range to check -/// @param [in] inputs information used to take decisions (ranges, ego and objects data, route -/// handler, lanelets) -/// @param [in] params parameters -/// @param [in] logger ros logger -/// @return return true if we should avoid entering the range -bool should_not_enter( - const OverlapRange & range, const DecisionInputs & inputs, const PlannerParam & params, - const rclcpp::Logger & logger); -/// @brief set the velocity of a decision (or unset it) based on the distance away from the range -/// @param [out] decision decision to update (either set its velocity or unset the decision) -/// @param [in] distance distance between ego and the range corresponding to the decision -/// @param [in] params parameters -void set_decision_velocity( - std::optional & decision, const double distance, const PlannerParam & params); -/// @brief calculate the decision to slowdown or stop before an overlapping range -/// @param [in] range the range to check -/// @param [in] inputs information used to take decisions (ranges, ego and objects data, route -/// handler, lanelets) -/// @param [in] params parameters -/// @param [in] logger ros logger -/// @return return an optional decision to slowdown or stop -std::optional calculate_decision( - const OverlapRange & range, const DecisionInputs & inputs, const PlannerParam & params, - const rclcpp::Logger & logger); -/// @brief calculate decisions to slowdown or stop before some overlapping ranges -/// @param [in] inputs information used to take decisions (ranges, ego and objects data, route -/// handler, lanelets) -/// @param [in] params parameters -/// @param [in] logger ros logger -/// @return return the calculated decisions to slowdown or stop -std::vector calculate_decisions( - const DecisionInputs & inputs, const PlannerParam & params, const rclcpp::Logger & logger); -} // namespace autoware::behavior_velocity_planner::out_of_lane - -#endif // DECISIONS_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.cpp b/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.cpp deleted file mode 100644 index bb352f625580f..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.cpp +++ /dev/null @@ -1,146 +0,0 @@ -// Copyright 2023-2024 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "filter_predicted_objects.hpp" - -#include -#include - -#include - -#include -#include - -#include - -namespace autoware::behavior_velocity_planner::out_of_lane -{ -void cut_predicted_path_beyond_line( - autoware_perception_msgs::msg::PredictedPath & predicted_path, - const lanelet::BasicLineString2d & stop_line, const double object_front_overhang) -{ - auto stop_line_idx = 0UL; - bool found = false; - lanelet::BasicSegment2d path_segment; - path_segment.first.x() = predicted_path.path.front().position.x; - path_segment.first.y() = predicted_path.path.front().position.y; - for (stop_line_idx = 1; stop_line_idx < predicted_path.path.size(); ++stop_line_idx) { - path_segment.second.x() = predicted_path.path[stop_line_idx].position.x; - path_segment.second.y() = predicted_path.path[stop_line_idx].position.y; - if (boost::geometry::intersects(stop_line, path_segment)) { - found = true; - break; - } - path_segment.first = path_segment.second; - } - if (found) { - auto cut_idx = stop_line_idx; - double arc_length = 0; - while (cut_idx > 0 && arc_length < object_front_overhang) { - arc_length += tier4_autoware_utils::calcDistance2d( - predicted_path.path[cut_idx], predicted_path.path[cut_idx - 1]); - --cut_idx; - } - predicted_path.path.resize(cut_idx); - } -} - -std::optional find_next_stop_line( - const autoware_perception_msgs::msg::PredictedPath & path, const PlannerData & planner_data) -{ - lanelet::ConstLanelets lanelets; - lanelet::BasicLineString2d query_line; - for (const auto & p : path.path) query_line.emplace_back(p.position.x, p.position.y); - const auto query_results = lanelet::geometry::findWithin2d( - planner_data.route_handler_->getLaneletMapPtr()->laneletLayer, query_line); - for (const auto & r : query_results) lanelets.push_back(r.second); - for (const auto & ll : lanelets) { - for (const auto & element : ll.regulatoryElementsAs()) { - const auto traffic_signal_stamped = planner_data.getTrafficSignal(element->id()); - if ( - traffic_signal_stamped.has_value() && element->stopLine().has_value() && - traffic_light_utils::isTrafficSignalStop(ll, traffic_signal_stamped.value().signal)) { - lanelet::BasicLineString2d stop_line; - for (const auto & p : *(element->stopLine())) stop_line.emplace_back(p.x(), p.y()); - return stop_line; - } - } - } - return std::nullopt; -} - -void cut_predicted_path_beyond_red_lights( - autoware_perception_msgs::msg::PredictedPath & predicted_path, const PlannerData & planner_data, - const double object_front_overhang) -{ - const auto stop_line = find_next_stop_line(predicted_path, planner_data); - if (stop_line) { - // we use a longer stop line to also cut predicted paths that slightly go around the stop line - auto longer_stop_line = *stop_line; - const auto diff = stop_line->back() - stop_line->front(); - longer_stop_line.front() -= diff * 0.5; - longer_stop_line.back() += diff * 0.5; - cut_predicted_path_beyond_line(predicted_path, longer_stop_line, object_front_overhang); - } -} - -autoware_perception_msgs::msg::PredictedObjects filter_predicted_objects( - const PlannerData & planner_data, const EgoData & ego_data, const PlannerParam & params) -{ - autoware_perception_msgs::msg::PredictedObjects filtered_objects; - filtered_objects.header = planner_data.predicted_objects->header; - for (const auto & object : planner_data.predicted_objects->objects) { - const auto is_pedestrian = - std::find_if(object.classification.begin(), object.classification.end(), [](const auto & c) { - return c.label == autoware_perception_msgs::msg::ObjectClassification::PEDESTRIAN; - }) != object.classification.end(); - if (is_pedestrian) continue; - - auto filtered_object = object; - const auto is_invalid_predicted_path = [&](const auto & predicted_path) { - const auto is_low_confidence = predicted_path.confidence < params.objects_min_confidence; - const auto no_overlap_path = motion_utils::removeOverlapPoints(predicted_path.path); - if (no_overlap_path.size() <= 1) return true; - const auto lat_offset_to_current_ego = - std::abs(motion_utils::calcLateralOffset(no_overlap_path, ego_data.pose.position)); - const auto is_crossing_ego = - lat_offset_to_current_ego <= - object.shape.dimensions.y / 2.0 + std::max( - params.left_offset + params.extra_left_offset, - params.right_offset + params.extra_right_offset); - return is_low_confidence || is_crossing_ego; - }; - if (params.objects_use_predicted_paths) { - auto & predicted_paths = filtered_object.kinematics.predicted_paths; - const auto new_end = - std::remove_if(predicted_paths.begin(), predicted_paths.end(), is_invalid_predicted_path); - predicted_paths.erase(new_end, predicted_paths.end()); - if (params.objects_cut_predicted_paths_beyond_red_lights) - for (auto & predicted_path : predicted_paths) - cut_predicted_path_beyond_red_lights( - predicted_path, planner_data, filtered_object.shape.dimensions.x); - predicted_paths.erase( - std::remove_if( - predicted_paths.begin(), predicted_paths.end(), - [](const auto & p) { return p.path.empty(); }), - predicted_paths.end()); - } - - if (!params.objects_use_predicted_paths || !filtered_object.kinematics.predicted_paths.empty()) - filtered_objects.objects.push_back(filtered_object); - } - return filtered_objects; -} - -} // namespace autoware::behavior_velocity_planner::out_of_lane diff --git a/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.hpp b/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.hpp deleted file mode 100644 index a12b37e4c7d6d..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/filter_predicted_objects.hpp +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2023-2024 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef FILTER_PREDICTED_OBJECTS_HPP_ -#define FILTER_PREDICTED_OBJECTS_HPP_ - -#include "types.hpp" - -#include - -#include - -namespace autoware::behavior_velocity_planner::out_of_lane -{ -/// @brief cut a predicted path beyond the given stop line -/// @param [inout] predicted_path predicted path to cut -/// @param [in] stop_line stop line used for cutting -/// @param [in] object_front_overhang extra distance to cut ahead of the stop line -void cut_predicted_path_beyond_line( - autoware_perception_msgs::msg::PredictedPath & predicted_path, - const lanelet::BasicLineString2d & stop_line, const double object_front_overhang); - -/// @brief find the next red light stop line along the given path -/// @param [in] path predicted path to check for a stop line -/// @param [in] planner_data planner data with stop line information -/// @return the first red light stop line found along the path (if any) -std::optional find_next_stop_line( - const autoware_perception_msgs::msg::PredictedPath & path, const PlannerData & planner_data); - -/// @brief cut predicted path beyond stop lines of red lights -/// @param [inout] predicted_path predicted path to cut -/// @param [in] planner_data planner data to get the map and traffic light information -void cut_predicted_path_beyond_red_lights( - autoware_perception_msgs::msg::PredictedPath & predicted_path, const PlannerData & planner_data, - const double object_front_overhang); - -/// @brief filter predicted objects and their predicted paths -/// @param [in] planner_data planner data -/// @param [in] ego_data ego data -/// @param [in] params parameters -/// @return filtered predicted objects -autoware_perception_msgs::msg::PredictedObjects filter_predicted_objects( - const PlannerData & planner_data, const EgoData & ego_data, const PlannerParam & params); -} // namespace autoware::behavior_velocity_planner::out_of_lane - -#endif // FILTER_PREDICTED_OBJECTS_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/footprint.cpp b/planning/behavior_velocity_out_of_lane_module/src/footprint.cpp deleted file mode 100644 index 48992e46ec74f..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/footprint.cpp +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "footprint.hpp" - -#include - -#include - -#include -#include - -#include -#include - -namespace autoware::behavior_velocity_planner::out_of_lane -{ -tier4_autoware_utils::Polygon2d make_base_footprint( - const PlannerParam & p, const bool ignore_offset) -{ - tier4_autoware_utils::Polygon2d base_footprint; - const auto front_offset = ignore_offset ? 0.0 : p.extra_front_offset; - const auto rear_offset = ignore_offset ? 0.0 : p.extra_rear_offset; - const auto right_offset = ignore_offset ? 0.0 : p.extra_right_offset; - const auto left_offset = ignore_offset ? 0.0 : p.extra_left_offset; - base_footprint.outer() = { - {p.front_offset + front_offset, p.left_offset + left_offset}, - {p.front_offset + front_offset, p.right_offset - right_offset}, - {p.rear_offset - rear_offset, p.right_offset - right_offset}, - {p.rear_offset - rear_offset, p.left_offset + left_offset}}; - return base_footprint; -} - -lanelet::BasicPolygon2d project_to_pose( - const tier4_autoware_utils::Polygon2d & base_footprint, const geometry_msgs::msg::Pose & pose) -{ - const auto angle = tf2::getYaw(pose.orientation); - const auto rotated_footprint = tier4_autoware_utils::rotatePolygon(base_footprint, angle); - lanelet::BasicPolygon2d footprint; - for (const auto & p : rotated_footprint.outer()) - footprint.emplace_back(p.x() + pose.position.x, p.y() + pose.position.y); - return footprint; -} - -std::vector calculate_path_footprints( - const EgoData & ego_data, const PlannerParam & params) -{ - const auto base_footprint = make_base_footprint(params); - std::vector path_footprints; - path_footprints.reserve(ego_data.path.points.size()); - double length = 0.0; - const auto range = std::max(params.slow_dist_threshold, params.stop_dist_threshold) + - params.front_offset + params.extra_front_offset; - for (auto i = ego_data.first_path_idx; i < ego_data.path.points.size() && length < range; ++i) { - const auto & path_pose = ego_data.path.points[i].point.pose; - const auto angle = tf2::getYaw(path_pose.orientation); - const auto rotated_footprint = tier4_autoware_utils::rotatePolygon(base_footprint, angle); - lanelet::BasicPolygon2d footprint; - for (const auto & p : rotated_footprint.outer()) - footprint.emplace_back(p.x() + path_pose.position.x, p.y() + path_pose.position.y); - path_footprints.push_back(footprint); - if (i + 1 < ego_data.path.points.size()) - length += tier4_autoware_utils::calcDistance2d(path_pose, ego_data.path.points[i + 1].point); - } - return path_footprints; -} - -lanelet::BasicPolygon2d calculate_current_ego_footprint( - const EgoData & ego_data, const PlannerParam & params, const bool ignore_offset) -{ - const auto base_footprint = make_base_footprint(params, ignore_offset); - const auto angle = tf2::getYaw(ego_data.pose.orientation); - const auto rotated_footprint = tier4_autoware_utils::rotatePolygon(base_footprint, angle); - lanelet::BasicPolygon2d footprint; - for (const auto & p : rotated_footprint.outer()) - footprint.emplace_back(p.x() + ego_data.pose.position.x, p.y() + ego_data.pose.position.y); - return footprint; -} -} // namespace autoware::behavior_velocity_planner::out_of_lane diff --git a/planning/behavior_velocity_out_of_lane_module/src/footprint.hpp b/planning/behavior_velocity_out_of_lane_module/src/footprint.hpp deleted file mode 100644 index 1a0d38600fe73..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/footprint.hpp +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef FOOTPRINT_HPP_ -#define FOOTPRINT_HPP_ - -#include "types.hpp" - -#include - -#include - -namespace autoware::behavior_velocity_planner -{ -namespace out_of_lane -{ -/// @brief create the base footprint of ego -/// @param [in] p parameters used to create the footprint -/// @param [in] ignore_offset optional parameter, if true, ignore the "extra offsets" to build the -/// footprint -/// @return base ego footprint -tier4_autoware_utils::Polygon2d make_base_footprint( - const PlannerParam & p, const bool ignore_offset = false); -/// @brief project a footprint to the given pose -/// @param [in] base_footprint footprint to project -/// @param [in] pose projection pose -/// @return footprint projected to the given pose -lanelet::BasicPolygon2d project_to_pose( - const tier4_autoware_utils::Polygon2d & base_footprint, const geometry_msgs::msg::Pose & pose); -/// @brief calculate the path footprints -/// @details the resulting polygon follows the format used by the lanelet library: clockwise order -/// and implicit closing edge -/// @param [in] ego_data data related to the ego vehicle (includes its path) -/// @param [in] params parameters -/// @return polygon footprints for each path point starting from ego's current position -std::vector calculate_path_footprints( - const EgoData & ego_data, const PlannerParam & params); -/// @brief calculate the current ego footprint -/// @param [in] ego_data data related to the ego vehicle -/// @param [in] params parameters -/// @param [in] ignore_offset optional parameter, if true, ignore the "extra offsets" to build the -/// footprint -lanelet::BasicPolygon2d calculate_current_ego_footprint( - const EgoData & ego_data, const PlannerParam & params, const bool ignore_offset = false); -} // namespace out_of_lane -} // namespace autoware::behavior_velocity_planner - -#endif // FOOTPRINT_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.cpp b/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.cpp deleted file mode 100644 index 42df39853f4f5..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.cpp +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "lanelets_selection.hpp" - -#include - -#include -#include - -#include -#include - -namespace autoware::behavior_velocity_planner::out_of_lane -{ - -lanelet::ConstLanelets consecutive_lanelets( - const route_handler::RouteHandler & route_handler, const lanelet::ConstLanelet & lanelet) -{ - lanelet::ConstLanelets consecutives = route_handler.getRoutingGraphPtr()->following(lanelet); - const auto previous = route_handler.getRoutingGraphPtr()->previous(lanelet); - consecutives.insert(consecutives.end(), previous.begin(), previous.end()); - return consecutives; -} - -lanelet::ConstLanelets get_missing_lane_change_lanelets( - lanelet::ConstLanelets & path_lanelets, const route_handler::RouteHandler & route_handler) -{ - lanelet::ConstLanelets missing_lane_change_lanelets; - const auto & routing_graph = *route_handler.getRoutingGraphPtr(); - lanelet::ConstLanelets adjacents; - lanelet::ConstLanelets consecutives; - for (const auto & ll : path_lanelets) { - const auto consecutives_of_ll = consecutive_lanelets(route_handler, ll); - std::copy_if( - consecutives_of_ll.begin(), consecutives_of_ll.end(), std::back_inserter(consecutives), - [&](const auto & l) { return !contains_lanelet(consecutives, l.id()); }); - const auto adjacents_of_ll = routing_graph.besides(ll); - std::copy_if( - adjacents_of_ll.begin(), adjacents_of_ll.end(), std::back_inserter(adjacents), - [&](const auto & l) { return !contains_lanelet(adjacents, l.id()); }); - } - std::copy_if( - adjacents.begin(), adjacents.end(), std::back_inserter(missing_lane_change_lanelets), - [&](const auto & l) { - return !contains_lanelet(missing_lane_change_lanelets, l.id()) && - !contains_lanelet(path_lanelets, l.id()) && contains_lanelet(consecutives, l.id()); - }); - return missing_lane_change_lanelets; -} - -lanelet::ConstLanelets calculate_path_lanelets( - const EgoData & ego_data, const route_handler::RouteHandler & route_handler) -{ - const auto lanelet_map_ptr = route_handler.getLaneletMapPtr(); - lanelet::ConstLanelets path_lanelets; - lanelet::BasicLineString2d path_ls; - for (const auto & p : ego_data.path.points) - path_ls.emplace_back(p.point.pose.position.x, p.point.pose.position.y); - for (const auto & dist_lanelet : - lanelet::geometry::findWithin2d(lanelet_map_ptr->laneletLayer, path_ls)) { - if (!contains_lanelet(path_lanelets, dist_lanelet.second.id())) - path_lanelets.push_back(dist_lanelet.second); - } - const auto missing_lanelets = get_missing_lane_change_lanelets(path_lanelets, route_handler); - path_lanelets.insert(path_lanelets.end(), missing_lanelets.begin(), missing_lanelets.end()); - return path_lanelets; -} - -void add_lane_changeable_lanelets( - lanelet::ConstLanelets & lanelets_to_ignore, const lanelet::ConstLanelets & path_lanelets, - const route_handler::RouteHandler & route_handler) -{ - for (const auto & path_lanelet : path_lanelets) - for (const auto & ll : route_handler.getLaneChangeableNeighbors(path_lanelet)) - if (!contains_lanelet(lanelets_to_ignore, ll.id())) lanelets_to_ignore.push_back(ll); -} - -lanelet::ConstLanelets calculate_ignored_lanelets( - const EgoData & ego_data, const lanelet::ConstLanelets & path_lanelets, - const route_handler::RouteHandler & route_handler, const PlannerParam & params) -{ - lanelet::ConstLanelets ignored_lanelets; - // ignore lanelets directly behind ego - const auto behind = - planning_utils::calculateOffsetPoint2d(ego_data.pose, params.rear_offset, 0.0); - const lanelet::BasicPoint2d behind_point(behind.x(), behind.y()); - const auto behind_lanelets = lanelet::geometry::findWithin2d( - route_handler.getLaneletMapPtr()->laneletLayer, behind_point, 0.0); - for (const auto & l : behind_lanelets) { - const auto is_path_lanelet = contains_lanelet(path_lanelets, l.second.id()); - if (!is_path_lanelet) ignored_lanelets.push_back(l.second); - } - if (params.ignore_overlaps_over_lane_changeable_lanelets) - add_lane_changeable_lanelets(ignored_lanelets, path_lanelets, route_handler); - return ignored_lanelets; -} - -lanelet::ConstLanelets calculate_other_lanelets( - const EgoData & ego_data, const lanelet::ConstLanelets & path_lanelets, - const lanelet::ConstLanelets & ignored_lanelets, - const route_handler::RouteHandler & route_handler, const PlannerParam & params) -{ - lanelet::ConstLanelets other_lanelets; - const lanelet::BasicPoint2d ego_point(ego_data.pose.position.x, ego_data.pose.position.y); - const auto lanelets_within_range = lanelet::geometry::findWithin2d( - route_handler.getLaneletMapPtr()->laneletLayer, ego_point, - std::max(params.slow_dist_threshold, params.stop_dist_threshold) + params.front_offset + - params.extra_front_offset); - for (const auto & ll : lanelets_within_range) { - if (std::string(ll.second.attributeOr(lanelet::AttributeName::Subtype, "none")) != "road") - continue; - const auto is_path_lanelet = contains_lanelet(path_lanelets, ll.second.id()); - const auto is_ignored_lanelet = contains_lanelet(ignored_lanelets, ll.second.id()); - if (!is_path_lanelet && !is_ignored_lanelet) other_lanelets.push_back(ll.second); - } - return other_lanelets; -} -} // namespace autoware::behavior_velocity_planner::out_of_lane diff --git a/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.hpp b/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.hpp deleted file mode 100644 index 8985a49a12853..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/lanelets_selection.hpp +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef LANELETS_SELECTION_HPP_ -#define LANELETS_SELECTION_HPP_ - -#include "types.hpp" - -#include - -#include - -namespace autoware::behavior_velocity_planner::out_of_lane -{ -/// @brief checks if a lanelet is already contained in a vector of lanelets -/// @param [in] lanelets vector to check -/// @param [in] id lanelet id to check -/// @return true if the given vector contains a lanelet of the given id -inline bool contains_lanelet(const lanelet::ConstLanelets & lanelets, const lanelet::Id id) -{ - return std::find_if(lanelets.begin(), lanelets.end(), [&](const auto & l) { - return l.id() == id; - }) != lanelets.end(); -}; - -/// @brief calculate lanelets crossed by the ego path -/// @details calculated from the ids of the path msg, the lanelets containing path points -/// @param [in] ego_data data about the ego vehicle -/// @param [in] route_handler route handler -/// @return lanelets crossed by the ego vehicle -lanelet::ConstLanelets calculate_path_lanelets( - const EgoData & ego_data, const route_handler::RouteHandler & route_handler); -/// @brief calculate lanelets that may not be crossed by the path but may be overlapped during a -/// lane change -/// @param [in] path_lanelets lanelets driven by the ego vehicle -/// @param [in] route_handler route handler -/// @return lanelets that may be overlapped by a lane change (and are not already in path_lanelets) -lanelet::ConstLanelets get_missing_lane_change_lanelets( - lanelet::ConstLanelets & path_lanelets, const route_handler::RouteHandler & route_handler); -/// @brief calculate lanelets that should be ignored -/// @param [in] ego_data data about the ego vehicle -/// @param [in] path_lanelets lanelets driven by the ego vehicle -/// @param [in] route_handler route handler -/// @param [in] params parameters -/// @return lanelets to ignore -lanelet::ConstLanelets calculate_ignored_lanelets( - const EgoData & ego_data, const lanelet::ConstLanelets & path_lanelets, - const route_handler::RouteHandler & route_handler, const PlannerParam & params); -/// @brief calculate lanelets that should be checked by the module -/// @param [in] ego_data data about the ego vehicle -/// @param [in] path_lanelets lanelets driven by the ego vehicle -/// @param [in] ignored_lanelets lanelets to ignore -/// @param [in] route_handler route handler -/// @param [in] params parameters -/// @return lanelets to check for overlaps -lanelet::ConstLanelets calculate_other_lanelets( - const EgoData & ego_data, const lanelet::ConstLanelets & path_lanelets, - const lanelet::ConstLanelets & ignored_lanelets, - const route_handler::RouteHandler & route_handler, const PlannerParam & params); -} // namespace autoware::behavior_velocity_planner::out_of_lane - -#endif // LANELETS_SELECTION_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/manager.cpp b/planning/behavior_velocity_out_of_lane_module/src/manager.cpp deleted file mode 100644 index 61ec1a832bf8e..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/manager.cpp +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "manager.hpp" - -#include "scene_out_of_lane.hpp" - -#include -#include - -#include - -#include -#include -#include - -namespace autoware::behavior_velocity_planner -{ -using tier4_autoware_utils::getOrDeclareParameter; - -OutOfLaneModuleManager::OutOfLaneModuleManager(rclcpp::Node & node) -: SceneModuleManagerInterface(node, getModuleName()), module_id_(0UL) -{ - const std::string ns(getModuleName()); - auto & pp = planner_param_; - - pp.mode = getOrDeclareParameter(node, ns + ".mode"); - pp.skip_if_already_overlapping = - getOrDeclareParameter(node, ns + ".skip_if_already_overlapping"); - pp.ignore_overlaps_over_lane_changeable_lanelets = - getOrDeclareParameter(node, ns + ".ignore_overlaps_over_lane_changeable_lanelets"); - - pp.time_threshold = getOrDeclareParameter(node, ns + ".threshold.time_threshold"); - pp.intervals_ego_buffer = getOrDeclareParameter(node, ns + ".intervals.ego_time_buffer"); - pp.intervals_obj_buffer = - getOrDeclareParameter(node, ns + ".intervals.objects_time_buffer"); - pp.ttc_threshold = getOrDeclareParameter(node, ns + ".ttc.threshold"); - - pp.objects_min_vel = getOrDeclareParameter(node, ns + ".objects.minimum_velocity"); - pp.objects_use_predicted_paths = - getOrDeclareParameter(node, ns + ".objects.use_predicted_paths"); - pp.objects_min_confidence = - getOrDeclareParameter(node, ns + ".objects.predicted_path_min_confidence"); - pp.objects_dist_buffer = getOrDeclareParameter(node, ns + ".objects.distance_buffer"); - pp.objects_cut_predicted_paths_beyond_red_lights = - getOrDeclareParameter(node, ns + ".objects.cut_predicted_paths_beyond_red_lights"); - - pp.overlap_min_dist = getOrDeclareParameter(node, ns + ".overlap.minimum_distance"); - pp.overlap_extra_length = getOrDeclareParameter(node, ns + ".overlap.extra_length"); - - pp.skip_if_over_max_decel = - getOrDeclareParameter(node, ns + ".action.skip_if_over_max_decel"); - pp.precision = getOrDeclareParameter(node, ns + ".action.precision"); - pp.min_decision_duration = getOrDeclareParameter(node, ns + ".action.min_duration"); - pp.dist_buffer = getOrDeclareParameter(node, ns + ".action.distance_buffer"); - pp.slow_velocity = getOrDeclareParameter(node, ns + ".action.slowdown.velocity"); - pp.slow_dist_threshold = - getOrDeclareParameter(node, ns + ".action.slowdown.distance_threshold"); - pp.stop_dist_threshold = - getOrDeclareParameter(node, ns + ".action.stop.distance_threshold"); - - pp.ego_min_velocity = getOrDeclareParameter(node, ns + ".ego.min_assumed_velocity"); - pp.extra_front_offset = getOrDeclareParameter(node, ns + ".ego.extra_front_offset"); - pp.extra_rear_offset = getOrDeclareParameter(node, ns + ".ego.extra_rear_offset"); - pp.extra_left_offset = getOrDeclareParameter(node, ns + ".ego.extra_left_offset"); - pp.extra_right_offset = getOrDeclareParameter(node, ns + ".ego.extra_right_offset"); - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo(); - pp.front_offset = vehicle_info.max_longitudinal_offset_m; - pp.rear_offset = vehicle_info.min_longitudinal_offset_m; - pp.left_offset = vehicle_info.max_lateral_offset_m; - pp.right_offset = vehicle_info.min_lateral_offset_m; -} - -void OutOfLaneModuleManager::launchNewModules(const tier4_planning_msgs::msg::PathWithLaneId & path) -{ - if (path.points.empty()) return; - // general - if (!isModuleRegistered(module_id_)) { - registerModule(std::make_shared( - module_id_, planner_param_, logger_.get_child("out_of_lane_module"), clock_)); - } -} - -std::function &)> -OutOfLaneModuleManager::getModuleExpiredFunction( - const tier4_planning_msgs::msg::PathWithLaneId & path) -{ - return [path]([[maybe_unused]] const std::shared_ptr & scene_module) { - return false; - }; -} -} // namespace autoware::behavior_velocity_planner - -#include -PLUGINLIB_EXPORT_CLASS( - autoware::behavior_velocity_planner::OutOfLaneModulePlugin, - autoware::behavior_velocity_planner::PluginInterface) diff --git a/planning/behavior_velocity_out_of_lane_module/src/manager.hpp b/planning/behavior_velocity_out_of_lane_module/src/manager.hpp deleted file mode 100644 index 5ab7126d88d4d..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/manager.hpp +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef MANAGER_HPP_ -#define MANAGER_HPP_ - -#include "scene_out_of_lane.hpp" - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include - -namespace autoware::behavior_velocity_planner -{ -class OutOfLaneModuleManager : public SceneModuleManagerInterface -{ -public: - explicit OutOfLaneModuleManager(rclcpp::Node & node); - - const char * getModuleName() override { return "out_of_lane"; } - -private: - using PlannerParam = out_of_lane::PlannerParam; - - PlannerParam planner_param_; - int64_t module_id_; - - void launchNewModules(const tier4_planning_msgs::msg::PathWithLaneId & path) override; - - std::function &)> getModuleExpiredFunction( - const tier4_planning_msgs::msg::PathWithLaneId & path) override; -}; - -class OutOfLaneModulePlugin : public PluginWrapper -{ -}; - -} // namespace autoware::behavior_velocity_planner - -#endif // MANAGER_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.cpp b/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.cpp deleted file mode 100644 index a081df0b52028..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.cpp +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "overlapping_range.hpp" - -#include -#include - -#include - -#include -#include - -#include - -namespace autoware::behavior_velocity_planner::out_of_lane -{ - -Overlap calculate_overlap( - const lanelet::BasicPolygon2d & path_footprint, const lanelet::ConstLanelets & path_lanelets, - const lanelet::ConstLanelet & lanelet) -{ - Overlap overlap; - const auto & left_bound = lanelet.leftBound2d().basicLineString(); - const auto & right_bound = lanelet.rightBound2d().basicLineString(); - // TODO(Maxime): these intersects (for each path footprint, for each lanelet) are too expensive - const auto overlap_left = boost::geometry::intersects(path_footprint, left_bound); - const auto overlap_right = boost::geometry::intersects(path_footprint, right_bound); - - lanelet::BasicPolygons2d overlapping_polygons; - if (overlap_left || overlap_right) - boost::geometry::intersection( - path_footprint, lanelet.polygon2d().basicPolygon(), overlapping_polygons); - for (const auto & overlapping_polygon : overlapping_polygons) { - for (const auto & point : overlapping_polygon) { - if (overlap_left && overlap_right) - overlap.inside_distance = boost::geometry::distance(left_bound, right_bound); - else if (overlap_left) - overlap.inside_distance = - std::max(overlap.inside_distance, boost::geometry::distance(point, left_bound)); - else if (overlap_right) - overlap.inside_distance = - std::max(overlap.inside_distance, boost::geometry::distance(point, right_bound)); - geometry_msgs::msg::Pose p; - p.position.x = point.x(); - p.position.y = point.y(); - const auto length = lanelet::utils::getArcCoordinates(path_lanelets, p).length; - if (length > overlap.max_arc_length) { - overlap.max_arc_length = length; - overlap.max_overlap_point = point; - } - if (length < overlap.min_arc_length) { - overlap.min_arc_length = length; - overlap.min_overlap_point = point; - } - } - } - return overlap; -} - -OverlapRanges calculate_overlapping_ranges( - const std::vector & path_footprints, - const lanelet::ConstLanelets & path_lanelets, const lanelet::ConstLanelet & lanelet, - const PlannerParam & params) -{ - OverlapRanges ranges; - OtherLane other_lane(lanelet); - std::vector overlaps; - for (auto i = 0UL; i < path_footprints.size(); ++i) { - const auto overlap = calculate_overlap(path_footprints[i], path_lanelets, lanelet); - const auto has_overlap = overlap.inside_distance > params.overlap_min_dist; - if (has_overlap) { // open/update the range - overlaps.push_back(overlap); - if (!other_lane.range_is_open) { - other_lane.first_range_bound.index = i; - other_lane.first_range_bound.point = overlap.min_overlap_point; - other_lane.first_range_bound.arc_length = - overlap.min_arc_length - params.overlap_extra_length; - other_lane.first_range_bound.inside_distance = overlap.inside_distance; - other_lane.range_is_open = true; - } - other_lane.last_range_bound.index = i; - other_lane.last_range_bound.point = overlap.max_overlap_point; - other_lane.last_range_bound.arc_length = overlap.max_arc_length + params.overlap_extra_length; - other_lane.last_range_bound.inside_distance = overlap.inside_distance; - } else if (other_lane.range_is_open) { // !has_overlap: close the range if it is open - ranges.push_back(other_lane.close_range()); - ranges.back().debug.overlaps = overlaps; - overlaps.clear(); - } - } - // close the range if it is still open - if (other_lane.range_is_open) { - ranges.push_back(other_lane.close_range()); - ranges.back().debug.overlaps = overlaps; - overlaps.clear(); - } - return ranges; -} - -OverlapRanges calculate_overlapping_ranges( - const std::vector & path_footprints, - const lanelet::ConstLanelets & path_lanelets, const lanelet::ConstLanelets & lanelets, - const PlannerParam & params) -{ - OverlapRanges ranges; - for (auto & lanelet : lanelets) { - const auto lanelet_ranges = - calculate_overlapping_ranges(path_footprints, path_lanelets, lanelet, params); - ranges.insert(ranges.end(), lanelet_ranges.begin(), lanelet_ranges.end()); - } - return ranges; -} - -} // namespace autoware::behavior_velocity_planner::out_of_lane diff --git a/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.hpp b/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.hpp deleted file mode 100644 index afb71c11b3ae4..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/overlapping_range.hpp +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef OVERLAPPING_RANGE_HPP_ -#define OVERLAPPING_RANGE_HPP_ - -#include "types.hpp" - -#include - -#include - -#include - -namespace autoware::behavior_velocity_planner::out_of_lane -{ - -/// @brief calculate the overlap between the given footprint and lanelet -/// @param [in] path_footprint footprint used to calculate the overlap -/// @param [in] path_lanelets path lanelets used to calculate arc length along the ego path -/// @param [in] lanelet lanelet used to calculate the overlap -/// @return the found overlap between the footprint and the lanelet -Overlap calculate_overlap( - const lanelet::BasicPolygon2d & path_footprint, const lanelet::ConstLanelets & path_lanelets, - const lanelet::ConstLanelet & lanelet); -/// @brief calculate the overlapping ranges between the path footprints and a lanelet -/// @param [in] path_footprints footprints used to calculate the overlaps -/// @param [in] path_lanelets path lanelets used to calculate arc length along the ego path -/// @param [in] lanelet lanelet used to calculate the overlaps -/// @param [in] params parameters -/// @return the overlapping ranges found between the footprints and the lanelet -OverlapRanges calculate_overlapping_ranges( - const std::vector & path_footprints, - const lanelet::ConstLanelets & path_lanelets, const lanelet::ConstLanelet & lanelet, - const PlannerParam & params); -/// @brief calculate the overlapping ranges between the path footprints and some lanelets -/// @param [in] path_footprints footprints used to calculate the overlaps -/// @param [in] path_lanelets path lanelets used to calculate arc length along the ego path -/// @param [in] lanelets lanelets used to calculate the overlaps -/// @param [in] params parameters -/// @return the overlapping ranges found between the footprints and the lanelets, sorted by -/// increasing arc length along the path -OverlapRanges calculate_overlapping_ranges( - const std::vector & path_footprints, - const lanelet::ConstLanelets & path_lanelets, const lanelet::ConstLanelets & lanelets, - const PlannerParam & params); -} // namespace autoware::behavior_velocity_planner::out_of_lane - -#endif // OVERLAPPING_RANGE_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.cpp b/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.cpp deleted file mode 100644 index 3f34e8441e8be..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.cpp +++ /dev/null @@ -1,244 +0,0 @@ -// Copyright 2023 TIER IV, Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "scene_out_of_lane.hpp" - -#include "calculate_slowdown_points.hpp" -#include "debug.hpp" -#include "decisions.hpp" -#include "filter_predicted_objects.hpp" -#include "footprint.hpp" -#include "lanelets_selection.hpp" -#include "overlapping_range.hpp" -#include "types.hpp" - -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -#include -#include -#include -#include - -namespace autoware::behavior_velocity_planner::out_of_lane -{ - -using visualization_msgs::msg::Marker; -using visualization_msgs::msg::MarkerArray; - -OutOfLaneModule::OutOfLaneModule( - const int64_t module_id, PlannerParam planner_param, const rclcpp::Logger & logger, - const rclcpp::Clock::SharedPtr clock) -: SceneModuleInterface(module_id, logger, clock), params_(std::move(planner_param)) -{ - velocity_factor_.init(PlanningBehavior::ROUTE_OBSTACLE); -} - -bool OutOfLaneModule::modifyPathVelocity(PathWithLaneId * path, StopReason * stop_reason) -{ - debug_data_.reset_data(); - *stop_reason = planning_utils::initializeStopReason(StopReason::OUT_OF_LANE); - if (!path || path->points.size() < 2) return true; - tier4_autoware_utils::StopWatch stopwatch; - stopwatch.tic(); - EgoData ego_data; - ego_data.pose = planner_data_->current_odometry->pose; - ego_data.path.points = path->points; - ego_data.first_path_idx = - motion_utils::findNearestSegmentIndex(path->points, ego_data.pose.position); - motion_utils::removeOverlapPoints(ego_data.path.points); - ego_data.velocity = planner_data_->current_velocity->twist.linear.x; - ego_data.max_decel = -planner_data_->max_stop_acceleration_threshold; - stopwatch.tic("calculate_path_footprints"); - const auto current_ego_footprint = calculate_current_ego_footprint(ego_data, params_, true); - const auto path_footprints = calculate_path_footprints(ego_data, params_); - const auto calculate_path_footprints_us = stopwatch.toc("calculate_path_footprints"); - // Calculate lanelets to ignore and consider - stopwatch.tic("calculate_lanelets"); - const auto path_lanelets = calculate_path_lanelets(ego_data, *planner_data_->route_handler_); - const auto ignored_lanelets = - calculate_ignored_lanelets(ego_data, path_lanelets, *planner_data_->route_handler_, params_); - const auto other_lanelets = calculate_other_lanelets( - ego_data, path_lanelets, ignored_lanelets, *planner_data_->route_handler_, params_); - const auto calculate_lanelets_us = stopwatch.toc("calculate_lanelets"); - - debug_data_.footprints = path_footprints; - debug_data_.path_lanelets = path_lanelets; - debug_data_.ignored_lanelets = ignored_lanelets; - debug_data_.other_lanelets = other_lanelets; - debug_data_.path = ego_data.path; - debug_data_.first_path_idx = ego_data.first_path_idx; - - if (params_.skip_if_already_overlapping) { - debug_data_.current_footprint = current_ego_footprint; - const auto overlapped_lanelet_it = - std::find_if(other_lanelets.begin(), other_lanelets.end(), [&](const auto & ll) { - return boost::geometry::intersects(ll.polygon2d().basicPolygon(), current_ego_footprint); - }); - if (overlapped_lanelet_it != other_lanelets.end()) { - debug_data_.current_overlapped_lanelets.push_back(*overlapped_lanelet_it); - // TODO(Maxime): we may want to just add the overlapped lane to the ignored lanelets - RCLCPP_DEBUG(logger_, "Ego is already overlapping a lane, skipping the module ()\n"); - return true; - } - } - // Calculate overlapping ranges - stopwatch.tic("calculate_overlapping_ranges"); - const auto ranges = - calculate_overlapping_ranges(path_footprints, path_lanelets, other_lanelets, params_); - const auto calculate_overlapping_ranges_us = stopwatch.toc("calculate_overlapping_ranges"); - // Calculate stop and slowdown points - DecisionInputs inputs; - inputs.ranges = ranges; - inputs.ego_data = ego_data; - stopwatch.tic("filter_predicted_objects"); - inputs.objects = filter_predicted_objects(*planner_data_, ego_data, params_); - const auto filter_predicted_objects_ms = stopwatch.toc("filter_predicted_objects"); - inputs.route_handler = planner_data_->route_handler_; - inputs.lanelets = other_lanelets; - stopwatch.tic("calculate_decisions"); - const auto decisions = calculate_decisions(inputs, params_, logger_); - const auto calculate_decisions_us = stopwatch.toc("calculate_decisions"); - stopwatch.tic("calc_slowdown_points"); - if ( // reset the previous inserted point if the timer expired - prev_inserted_point_ && - (clock_->now() - prev_inserted_point_time_).seconds() > params_.min_decision_duration) - prev_inserted_point_.reset(); - auto point_to_insert = - calculate_slowdown_point(ego_data, decisions, prev_inserted_point_, params_); - const auto calc_slowdown_points_us = stopwatch.toc("calc_slowdown_points"); - stopwatch.tic("insert_slowdown_points"); - debug_data_.slowdowns.clear(); - if ( // reset the timer if there is no previous inserted point or if we avoid the same lane - point_to_insert && - (!prev_inserted_point_ || prev_inserted_point_->slowdown.lane_to_avoid.id() == - point_to_insert->slowdown.lane_to_avoid.id())) - prev_inserted_point_time_ = clock_->now(); - // reuse previous stop point if there is no new one or if its velocity is not higher than the new - // one and its arc length is lower - const auto should_use_prev_inserted_point = [&]() { - if ( - point_to_insert && prev_inserted_point_ && - prev_inserted_point_->slowdown.velocity <= point_to_insert->slowdown.velocity) { - const auto arc_length = motion_utils::calcSignedArcLength( - path->points, 0LU, point_to_insert->point.point.pose.position); - const auto prev_arc_length = motion_utils::calcSignedArcLength( - path->points, 0LU, prev_inserted_point_->point.point.pose.position); - return prev_arc_length < arc_length; - } - return !point_to_insert && prev_inserted_point_; - }(); - if (should_use_prev_inserted_point) { - // if the path changed the prev point is no longer on the path so we project it - const auto insert_arc_length = motion_utils::calcSignedArcLength( - path->points, 0LU, prev_inserted_point_->point.point.pose.position); - prev_inserted_point_->point.point.pose = - motion_utils::calcInterpolatedPose(path->points, insert_arc_length); - point_to_insert = prev_inserted_point_; - } - if (point_to_insert) { - prev_inserted_point_ = point_to_insert; - RCLCPP_DEBUG(logger_, "Avoiding lane %lu", point_to_insert->slowdown.lane_to_avoid.id()); - debug_data_.slowdowns = {*point_to_insert}; - auto path_idx = motion_utils::findNearestSegmentIndex( - path->points, point_to_insert->point.point.pose.position) + - 1; - planning_utils::insertVelocity( - *path, point_to_insert->point, point_to_insert->slowdown.velocity, path_idx); - auto stop_pose_reached = false; - if (point_to_insert->slowdown.velocity == 0.0) { - const auto dist_to_stop_pose = motion_utils::calcSignedArcLength( - path->points, ego_data.pose.position, point_to_insert->point.point.pose.position); - if (ego_data.velocity < 1e-3 && dist_to_stop_pose < 1e-3) stop_pose_reached = true; - tier4_planning_msgs::msg::StopFactor stop_factor; - stop_factor.stop_pose = point_to_insert->point.point.pose; - stop_factor.dist_to_stop_pose = dist_to_stop_pose; - planning_utils::appendStopReason(stop_factor, stop_reason); - } - velocity_factor_.set( - path->points, planner_data_->current_odometry->pose, point_to_insert->point.point.pose, - stop_pose_reached ? VelocityFactor::STOPPED : VelocityFactor::APPROACHING, "out_of_lane"); - } else if (!decisions.empty()) { - RCLCPP_WARN(logger_, "Could not insert stop point (would violate max deceleration limits)"); - } - const auto insert_slowdown_points_us = stopwatch.toc("insert_slowdown_points"); - debug_data_.ranges = inputs.ranges; - - const auto total_time_us = stopwatch.toc(); - RCLCPP_DEBUG( - logger_, - "Total time = %2.2fus\n" - "\tcalculate_lanelets = %2.0fus\n" - "\tcalculate_path_footprints = %2.0fus\n" - "\tcalculate_overlapping_ranges = %2.0fus\n" - "\tfilter_pred_objects = %2.0fus\n" - "\tcalculate_decisions = %2.0fus\n" - "\tcalc_slowdown_points = %2.0fus\n" - "\tinsert_slowdown_points = %2.0fus\n", - total_time_us, calculate_lanelets_us, calculate_path_footprints_us, - calculate_overlapping_ranges_us, filter_predicted_objects_ms, calculate_decisions_us, - calc_slowdown_points_us, insert_slowdown_points_us); - return true; -} - -MarkerArray OutOfLaneModule::createDebugMarkerArray() -{ - constexpr auto z = 0.0; - MarkerArray debug_marker_array; - - debug::add_footprint_markers( - debug_marker_array, debug_data_.footprints, z, debug_data_.prev_footprints); - debug::add_current_overlap_marker( - debug_marker_array, debug_data_.current_footprint, debug_data_.current_overlapped_lanelets, z, - debug_data_.prev_current_overlapped_lanelets); - debug::add_lanelet_markers( - debug_marker_array, debug_data_.path_lanelets, "path_lanelets", - tier4_autoware_utils::createMarkerColor(0.1, 0.1, 1.0, 0.5), debug_data_.prev_path_lanelets); - debug::add_lanelet_markers( - debug_marker_array, debug_data_.ignored_lanelets, "ignored_lanelets", - tier4_autoware_utils::createMarkerColor(0.7, 0.7, 0.2, 0.5), debug_data_.prev_ignored_lanelets); - debug::add_lanelet_markers( - debug_marker_array, debug_data_.other_lanelets, "other_lanelets", - tier4_autoware_utils::createMarkerColor(0.4, 0.4, 0.7, 0.5), debug_data_.prev_other_lanelets); - debug::add_range_markers( - debug_marker_array, debug_data_.ranges, debug_data_.path, debug_data_.first_path_idx, z, - debug_data_.prev_ranges); - return debug_marker_array; -} - -motion_utils::VirtualWalls OutOfLaneModule::createVirtualWalls() -{ - motion_utils::VirtualWalls virtual_walls; - motion_utils::VirtualWall wall; - wall.text = "out_of_lane"; - wall.longitudinal_offset = params_.front_offset; - wall.style = motion_utils::VirtualWallType::slowdown; - for (const auto & slowdown : debug_data_.slowdowns) { - wall.pose = slowdown.point.point.pose; - virtual_walls.push_back(wall); - } - return virtual_walls; -} - -} // namespace autoware::behavior_velocity_planner::out_of_lane diff --git a/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.hpp b/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.hpp deleted file mode 100644 index 38101d6a9ba1d..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/scene_out_of_lane.hpp +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef SCENE_OUT_OF_LANE_HPP_ -#define SCENE_OUT_OF_LANE_HPP_ - -#include "types.hpp" - -#include -#include -#include - -#include -#include -#include - -#include - -#include -#include -#include - -namespace autoware::behavior_velocity_planner::out_of_lane -{ -class OutOfLaneModule : public SceneModuleInterface -{ -public: - OutOfLaneModule( - const int64_t module_id, PlannerParam planner_param, const rclcpp::Logger & logger, - const rclcpp::Clock::SharedPtr clock); - - /// @brief insert stop or slow down points to prevent dangerously entering another lane - /// @param [inout] path the path to update - /// @param [inout] stop_reason reason for stopping - bool modifyPathVelocity(PathWithLaneId * path, StopReason * stop_reason) override; - - visualization_msgs::msg::MarkerArray createDebugMarkerArray() override; - motion_utils::VirtualWalls createVirtualWalls() override; - -private: - PlannerParam params_; - - std::optional prev_inserted_point_{}; - rclcpp::Time prev_inserted_point_time_{}; - -protected: - int64_t module_id_{}; - - // Debug - mutable DebugData debug_data_; -}; -} // namespace autoware::behavior_velocity_planner::out_of_lane - -#endif // SCENE_OUT_OF_LANE_HPP_ diff --git a/planning/behavior_velocity_out_of_lane_module/src/types.hpp b/planning/behavior_velocity_out_of_lane_module/src/types.hpp deleted file mode 100644 index f1c48a6e96d17..0000000000000 --- a/planning/behavior_velocity_out_of_lane_module/src/types.hpp +++ /dev/null @@ -1,235 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef TYPES_HPP_ -#define TYPES_HPP_ - -#include - -#include -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace autoware::behavior_velocity_planner::out_of_lane -{ -/// @brief parameters for the "out of lane" module -struct PlannerParam -{ - std::string mode; // mode used to consider a conflict with an object - bool skip_if_already_overlapping; // if true, do not run the module when ego already overlaps - // another lane - bool ignore_overlaps_over_lane_changeable_lanelets; // if true, overlaps on lane changeable - // lanelets are ignored - - double time_threshold; // [s](mode="threshold") objects time threshold - double intervals_ego_buffer; // [s](mode="intervals") buffer to extend the ego time range - double intervals_obj_buffer; // [s](mode="intervals") buffer to extend the objects time range - double ttc_threshold; // [s](mode="ttc") threshold on time to collision between ego and an object - double ego_min_velocity; // [m/s] minimum velocity of ego used to calculate its ttc or time range - - bool objects_use_predicted_paths; // whether to use the objects' predicted paths - bool objects_cut_predicted_paths_beyond_red_lights; // whether to cut predicted paths beyond red - // lights' stop lines - double objects_min_vel; // [m/s] objects lower than this velocity will be ignored - double objects_min_confidence; // minimum confidence to consider a predicted path - double objects_dist_buffer; // [m] distance buffer used to determine if a collision will occur in - // the other lane - - double overlap_extra_length; // [m] extra length to add around an overlap range - double overlap_min_dist; // [m] min distance inside another lane to consider an overlap - // action to insert in the path if an object causes a conflict at an overlap - bool skip_if_over_max_decel; // if true, skip the action if it causes more than the max decel - double dist_buffer; - double slow_velocity; - double slow_dist_threshold; - double stop_dist_threshold; - double precision; // [m] precision when inserting a stop pose in the path - double min_decision_duration; // [s] minimum duration needed a decision can be canceled - // ego dimensions used to create its polygon footprint - double front_offset; // [m] front offset (from vehicle info) - double rear_offset; // [m] rear offset (from vehicle info) - double right_offset; // [m] right offset (from vehicle info) - double left_offset; // [m] left offset (from vehicle info) - double extra_front_offset; // [m] extra front distance - double extra_rear_offset; // [m] extra rear distance - double extra_right_offset; // [m] extra right distance - double extra_left_offset; // [m] extra left distance -}; - -struct EnterExitTimes -{ - double enter_time{}; - double exit_time{}; -}; -struct RangeTimes -{ - EnterExitTimes ego{}; - EnterExitTimes object{}; -}; - -/// @brief action taken by the "out of lane" module -struct Slowdown -{ - size_t target_path_idx{}; // we want to slowdown before this path index - double velocity{}; // desired slow down velocity - lanelet::ConstLanelet lane_to_avoid; // we want to slowdown before entering this lane -}; -/// @brief slowdown to insert in a path -struct SlowdownToInsert -{ - Slowdown slowdown; - tier4_planning_msgs::msg::PathWithLaneId::_points_type::value_type point; -}; - -/// @brief bound of an overlap range (either the first, or last bound) -struct RangeBound -{ - size_t index; - lanelet::BasicPoint2d point; - double arc_length; - double inside_distance; -}; - -/// @brief representation of an overlap between the ego footprint and some other lane -struct Overlap -{ - double inside_distance = 0.0; ///!< distance inside the overlap - double min_arc_length = std::numeric_limits::infinity(); - double max_arc_length = 0.0; - lanelet::BasicPoint2d min_overlap_point{}; ///!< point with min arc length - lanelet::BasicPoint2d max_overlap_point{}; ///!< point with max arc length -}; - -/// @brief range along the path where ego overlaps another lane -struct OverlapRange -{ - lanelet::ConstLanelet lane; - size_t entering_path_idx{}; - size_t exiting_path_idx{}; - lanelet::BasicPoint2d entering_point; // pose of the overlapping point closest along the lane - lanelet::BasicPoint2d exiting_point; // pose of the overlapping point furthest along the lane - double inside_distance{}; // [m] how much ego footprint enters the lane - mutable struct - { - std::vector overlaps; - std::optional decision; - RangeTimes times; - std::optional object{}; - } debug; -}; -using OverlapRanges = std::vector; -/// @brief representation of a lane and its current overlap range -struct OtherLane -{ - bool range_is_open = false; - RangeBound first_range_bound{}; - RangeBound last_range_bound{}; - lanelet::ConstLanelet lanelet; - lanelet::BasicPolygon2d polygon; - - explicit OtherLane(lanelet::ConstLanelet ll) : lanelet(std::move(ll)) - { - polygon = lanelet.polygon2d().basicPolygon(); - } - - [[nodiscard]] OverlapRange close_range() - { - OverlapRange range; - range.lane = lanelet; - range.entering_path_idx = first_range_bound.index; - range.entering_point = first_range_bound.point; - range.exiting_path_idx = last_range_bound.index; - range.exiting_point = last_range_bound.point; - range.inside_distance = - std::max(first_range_bound.inside_distance, last_range_bound.inside_distance); - range_is_open = false; - last_range_bound = {}; - return range; - } -}; - -/// @brief data related to the ego vehicle -struct EgoData -{ - tier4_planning_msgs::msg::PathWithLaneId path{}; - size_t first_path_idx{}; - double velocity{}; // [m/s] - double max_decel{}; // [m/s²] - geometry_msgs::msg::Pose pose; -}; - -/// @brief data needed to make decisions -struct DecisionInputs -{ - OverlapRanges ranges{}; - EgoData ego_data; - autoware_perception_msgs::msg::PredictedObjects objects{}; - std::shared_ptr route_handler{}; - lanelet::ConstLanelets lanelets{}; -}; - -/// @brief debug data -struct DebugData -{ - std::vector footprints; - std::vector slowdowns; - geometry_msgs::msg::Pose ego_pose; - OverlapRanges ranges; - lanelet::BasicPolygon2d current_footprint; - lanelet::ConstLanelets current_overlapped_lanelets; - lanelet::ConstLanelets path_lanelets; - lanelet::ConstLanelets ignored_lanelets; - lanelet::ConstLanelets other_lanelets; - tier4_planning_msgs::msg::PathWithLaneId path; - size_t first_path_idx; - - size_t prev_footprints = 0; - size_t prev_slowdowns = 0; - size_t prev_ranges = 0; - size_t prev_current_overlapped_lanelets = 0; - size_t prev_ignored_lanelets = 0; - size_t prev_path_lanelets = 0; - size_t prev_other_lanelets = 0; - void reset_data() - { - prev_footprints = footprints.size(); - footprints.clear(); - prev_slowdowns = slowdowns.size(); - slowdowns.clear(); - prev_ranges = ranges.size(); - ranges.clear(); - prev_current_overlapped_lanelets = current_overlapped_lanelets.size(); - current_overlapped_lanelets.clear(); - prev_ignored_lanelets = ignored_lanelets.size(); - ignored_lanelets.clear(); - prev_path_lanelets = path_lanelets.size(); - path_lanelets.clear(); - prev_other_lanelets = other_lanelets.size(); - other_lanelets.clear(); - } -}; - -} // namespace autoware::behavior_velocity_planner::out_of_lane - -#endif // TYPES_HPP_ From 09f76761f206e756f9e81cdf9dbcfc90c93c289e Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Mon, 10 Jun 2024 09:12:10 +0900 Subject: [PATCH 041/142] fix(multi_object_tracker): fix segmentation fault bug of the debug object process (#7347) fix: finish the process when the object data list is empty Signed-off-by: Taekjin LEE --- perception/multi_object_tracker/src/debugger/debug_object.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/perception/multi_object_tracker/src/debugger/debug_object.cpp b/perception/multi_object_tracker/src/debugger/debug_object.cpp index f166e83e136af..e6a0b6242a168 100644 --- a/perception/multi_object_tracker/src/debugger/debug_object.cpp +++ b/perception/multi_object_tracker/src/debugger/debug_object.cpp @@ -134,6 +134,9 @@ void TrackerObjectDebugger::process() { if (!is_initialized_) return; + // Check if object_data_list_ is empty + if (object_data_list_.empty()) return; + // update uuid_int for (auto & object_data : object_data_list_) { current_ids_.insert(object_data.uuid_int); From a1375602e7a70c903b7345da5052cbb056e41b72 Mon Sep 17 00:00:00 2001 From: Go Sakayori Date: Mon, 10 Jun 2024 10:09:24 +0900 Subject: [PATCH 042/142] chore(vehicle_cmd_gate): add prefix autoware_ to vehicle_cmd_gate (#7327) * add prefix autoware_ to vehicle_cmd_gate package Signed-off-by: Go Sakayori * fix Signed-off-by: Go Sakayori * fix include guard Signed-off-by: Go Sakayori * fix pre-commit Signed-off-by: Go Sakayori --------- Signed-off-by: Go Sakayori Signed-off-by: Go Sakayori --- .github/CODEOWNERS | 2 +- .../CMakeLists.txt | 4 ++-- .../README.md | 0 .../config/vehicle_cmd_gate.param.yaml | 0 .../image/filter.png | Bin .../launch/vehicle_cmd_gate.launch.xml | 4 ++-- .../msg/IsFilterActivated.msg | 0 .../package.xml | 2 +- .../schema/vehicle_cmd_gate.json | 0 .../script/delays_checker.py | 0 .../src/adapi_pause_interface.cpp | 4 ++-- .../src/adapi_pause_interface.hpp | 4 ++-- .../src/marker_helper.hpp | 4 ++-- .../src/moderate_stop_interface.cpp | 4 ++-- .../src/moderate_stop_interface.hpp | 4 ++-- .../src/vehicle_cmd_filter.cpp | 4 ++-- .../src/vehicle_cmd_filter.hpp | 8 ++++---- .../src/vehicle_cmd_gate.cpp | 6 +++--- .../src/vehicle_cmd_gate.hpp | 8 ++++---- .../src/test_filter_in_vehicle_cmd_gate_node.cpp | 4 ++-- .../test/src/test_main.cpp | 0 .../test/src/test_vehicle_cmd_filter.cpp | 12 ++++++------ .../tier4_control_launch/launch/control.launch.py | 4 ++-- launch/tier4_control_launch/package.xml | 2 +- 24 files changed, 40 insertions(+), 40 deletions(-) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/CMakeLists.txt (93%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/README.md (100%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/config/vehicle_cmd_gate.param.yaml (100%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/image/filter.png (100%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/launch/vehicle_cmd_gate.launch.xml (92%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/msg/IsFilterActivated.msg (100%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/package.xml (97%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/schema/vehicle_cmd_gate.json (100%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/script/delays_checker.py (100%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/src/adapi_pause_interface.cpp (95%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/src/adapi_pause_interface.hpp (95%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/src/marker_helper.hpp (97%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/src/moderate_stop_interface.cpp (95%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/src/moderate_stop_interface.hpp (95%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/src/vehicle_cmd_filter.cpp (99%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/src/vehicle_cmd_filter.hpp (94%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/src/vehicle_cmd_gate.cpp (99%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/src/vehicle_cmd_gate.hpp (98%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/test/src/test_filter_in_vehicle_cmd_gate_node.cpp (99%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/test/src/test_main.cpp (100%) rename control/{vehicle_cmd_gate => autoware_vehicle_cmd_gate}/test/src/test_vehicle_cmd_filter.cpp (98%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 95ddb97d2bbb0..084349cda0af3 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -60,7 +60,7 @@ control/shift_decider/** takamasa.horibe@tier4.jp control/autoware_smart_mpc_trajectory_follower/** masayuki.aino@proxima-ai-tech.com control/trajectory_follower_base/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/trajectory_follower_node/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp -control/vehicle_cmd_gate/** takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp +control/autoware_vehicle_cmd_gate/** takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp evaluator/control_evaluator/** daniel.sanchez@tier4.jp takayuki.murooka@tier4.jp evaluator/diagnostic_converter/** kyoichi.sugahara@tier4.jp maxime.clement@tier4.jp takamasa.horibe@tier4.jp evaluator/kinematic_evaluator/** dominik.jargot@robotec.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp diff --git a/control/vehicle_cmd_gate/CMakeLists.txt b/control/autoware_vehicle_cmd_gate/CMakeLists.txt similarity index 93% rename from control/vehicle_cmd_gate/CMakeLists.txt rename to control/autoware_vehicle_cmd_gate/CMakeLists.txt index c5db663ccc77e..7233608a5d25f 100644 --- a/control/vehicle_cmd_gate/CMakeLists.txt +++ b/control/autoware_vehicle_cmd_gate/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) -project(vehicle_cmd_gate) +project(autoware_vehicle_cmd_gate) find_package(autoware_cmake REQUIRED) autoware_package() @@ -12,7 +12,7 @@ ament_auto_add_library(vehicle_cmd_gate_node SHARED ) rclcpp_components_register_node(vehicle_cmd_gate_node - PLUGIN "vehicle_cmd_gate::VehicleCmdGate" + PLUGIN "autoware::vehicle_cmd_gate::VehicleCmdGate" EXECUTABLE vehicle_cmd_gate_exe ) diff --git a/control/vehicle_cmd_gate/README.md b/control/autoware_vehicle_cmd_gate/README.md similarity index 100% rename from control/vehicle_cmd_gate/README.md rename to control/autoware_vehicle_cmd_gate/README.md diff --git a/control/vehicle_cmd_gate/config/vehicle_cmd_gate.param.yaml b/control/autoware_vehicle_cmd_gate/config/vehicle_cmd_gate.param.yaml similarity index 100% rename from control/vehicle_cmd_gate/config/vehicle_cmd_gate.param.yaml rename to control/autoware_vehicle_cmd_gate/config/vehicle_cmd_gate.param.yaml diff --git a/control/vehicle_cmd_gate/image/filter.png b/control/autoware_vehicle_cmd_gate/image/filter.png similarity index 100% rename from control/vehicle_cmd_gate/image/filter.png rename to control/autoware_vehicle_cmd_gate/image/filter.png diff --git a/control/vehicle_cmd_gate/launch/vehicle_cmd_gate.launch.xml b/control/autoware_vehicle_cmd_gate/launch/vehicle_cmd_gate.launch.xml similarity index 92% rename from control/vehicle_cmd_gate/launch/vehicle_cmd_gate.launch.xml rename to control/autoware_vehicle_cmd_gate/launch/vehicle_cmd_gate.launch.xml index c5368276b488a..c9e83bf9878b8 100644 --- a/control/vehicle_cmd_gate/launch/vehicle_cmd_gate.launch.xml +++ b/control/autoware_vehicle_cmd_gate/launch/vehicle_cmd_gate.launch.xml @@ -1,11 +1,11 @@ - + - + diff --git a/control/vehicle_cmd_gate/msg/IsFilterActivated.msg b/control/autoware_vehicle_cmd_gate/msg/IsFilterActivated.msg similarity index 100% rename from control/vehicle_cmd_gate/msg/IsFilterActivated.msg rename to control/autoware_vehicle_cmd_gate/msg/IsFilterActivated.msg diff --git a/control/vehicle_cmd_gate/package.xml b/control/autoware_vehicle_cmd_gate/package.xml similarity index 97% rename from control/vehicle_cmd_gate/package.xml rename to control/autoware_vehicle_cmd_gate/package.xml index e01d566c37df9..da0e885cc564a 100644 --- a/control/vehicle_cmd_gate/package.xml +++ b/control/autoware_vehicle_cmd_gate/package.xml @@ -1,7 +1,7 @@ - vehicle_cmd_gate + autoware_vehicle_cmd_gate 0.1.0 The vehicle_cmd_gate package Takamasa Horibe diff --git a/control/vehicle_cmd_gate/schema/vehicle_cmd_gate.json b/control/autoware_vehicle_cmd_gate/schema/vehicle_cmd_gate.json similarity index 100% rename from control/vehicle_cmd_gate/schema/vehicle_cmd_gate.json rename to control/autoware_vehicle_cmd_gate/schema/vehicle_cmd_gate.json diff --git a/control/vehicle_cmd_gate/script/delays_checker.py b/control/autoware_vehicle_cmd_gate/script/delays_checker.py similarity index 100% rename from control/vehicle_cmd_gate/script/delays_checker.py rename to control/autoware_vehicle_cmd_gate/script/delays_checker.py diff --git a/control/vehicle_cmd_gate/src/adapi_pause_interface.cpp b/control/autoware_vehicle_cmd_gate/src/adapi_pause_interface.cpp similarity index 95% rename from control/vehicle_cmd_gate/src/adapi_pause_interface.cpp rename to control/autoware_vehicle_cmd_gate/src/adapi_pause_interface.cpp index f4cf28d337a09..f14a62fba9661 100644 --- a/control/vehicle_cmd_gate/src/adapi_pause_interface.cpp +++ b/control/autoware_vehicle_cmd_gate/src/adapi_pause_interface.cpp @@ -14,7 +14,7 @@ #include "adapi_pause_interface.hpp" -namespace vehicle_cmd_gate +namespace autoware::vehicle_cmd_gate { AdapiPauseInterface::AdapiPauseInterface(rclcpp::Node * node) : node_(node) @@ -65,4 +65,4 @@ void AdapiPauseInterface::on_pause( res->status.success = true; } -} // namespace vehicle_cmd_gate +} // namespace autoware::vehicle_cmd_gate diff --git a/control/vehicle_cmd_gate/src/adapi_pause_interface.hpp b/control/autoware_vehicle_cmd_gate/src/adapi_pause_interface.hpp similarity index 95% rename from control/vehicle_cmd_gate/src/adapi_pause_interface.hpp rename to control/autoware_vehicle_cmd_gate/src/adapi_pause_interface.hpp index 1d5f05e98975e..d75b544752e3f 100644 --- a/control/vehicle_cmd_gate/src/adapi_pause_interface.hpp +++ b/control/autoware_vehicle_cmd_gate/src/adapi_pause_interface.hpp @@ -21,7 +21,7 @@ #include -namespace vehicle_cmd_gate +namespace autoware::vehicle_cmd_gate { class AdapiPauseInterface @@ -55,6 +55,6 @@ class AdapiPauseInterface const SetPause::Service::Response::SharedPtr res); }; -} // namespace vehicle_cmd_gate +} // namespace autoware::vehicle_cmd_gate #endif // ADAPI_PAUSE_INTERFACE_HPP_ diff --git a/control/vehicle_cmd_gate/src/marker_helper.hpp b/control/autoware_vehicle_cmd_gate/src/marker_helper.hpp similarity index 97% rename from control/vehicle_cmd_gate/src/marker_helper.hpp rename to control/autoware_vehicle_cmd_gate/src/marker_helper.hpp index 44c43a3630151..c9d7e86fa23dd 100644 --- a/control/vehicle_cmd_gate/src/marker_helper.hpp +++ b/control/autoware_vehicle_cmd_gate/src/marker_helper.hpp @@ -21,7 +21,7 @@ #include -namespace vehicle_cmd_gate +namespace autoware::vehicle_cmd_gate { inline geometry_msgs::msg::Point createMarkerPosition(double x, double y, double z) { @@ -114,6 +114,6 @@ inline void appendMarkerArray( marker_array->markers.push_back(marker); } } -} // namespace vehicle_cmd_gate +} // namespace autoware::vehicle_cmd_gate #endif // MARKER_HELPER_HPP_ diff --git a/control/vehicle_cmd_gate/src/moderate_stop_interface.cpp b/control/autoware_vehicle_cmd_gate/src/moderate_stop_interface.cpp similarity index 95% rename from control/vehicle_cmd_gate/src/moderate_stop_interface.cpp rename to control/autoware_vehicle_cmd_gate/src/moderate_stop_interface.cpp index 72dbdfd26a6b3..0fe90adfd0a72 100644 --- a/control/vehicle_cmd_gate/src/moderate_stop_interface.cpp +++ b/control/autoware_vehicle_cmd_gate/src/moderate_stop_interface.cpp @@ -14,7 +14,7 @@ #include "moderate_stop_interface.hpp" -namespace vehicle_cmd_gate +namespace autoware::vehicle_cmd_gate { ModerateStopInterface::ModerateStopInterface(rclcpp::Node * node) : node_(node) @@ -66,4 +66,4 @@ void ModerateStopInterface::update_stop_state() } } -} // namespace vehicle_cmd_gate +} // namespace autoware::vehicle_cmd_gate diff --git a/control/vehicle_cmd_gate/src/moderate_stop_interface.hpp b/control/autoware_vehicle_cmd_gate/src/moderate_stop_interface.hpp similarity index 95% rename from control/vehicle_cmd_gate/src/moderate_stop_interface.hpp rename to control/autoware_vehicle_cmd_gate/src/moderate_stop_interface.hpp index b643afc212f61..012e75d0c207e 100644 --- a/control/vehicle_cmd_gate/src/moderate_stop_interface.hpp +++ b/control/autoware_vehicle_cmd_gate/src/moderate_stop_interface.hpp @@ -22,7 +22,7 @@ #include #include -namespace vehicle_cmd_gate +namespace autoware::vehicle_cmd_gate { class ModerateStopInterface @@ -53,6 +53,6 @@ class ModerateStopInterface void update_stop_state(); }; -} // namespace vehicle_cmd_gate +} // namespace autoware::vehicle_cmd_gate #endif // MODERATE_STOP_INTERFACE_HPP_ diff --git a/control/vehicle_cmd_gate/src/vehicle_cmd_filter.cpp b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_filter.cpp similarity index 99% rename from control/vehicle_cmd_gate/src/vehicle_cmd_filter.cpp rename to control/autoware_vehicle_cmd_gate/src/vehicle_cmd_filter.cpp index bd9955e773020..cec23b05b8191 100644 --- a/control/vehicle_cmd_gate/src/vehicle_cmd_filter.cpp +++ b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_filter.cpp @@ -17,7 +17,7 @@ #include #include -namespace vehicle_cmd_gate +namespace autoware::vehicle_cmd_gate { VehicleCmdFilter::VehicleCmdFilter() @@ -319,4 +319,4 @@ double VehicleCmdFilter::getSteerDiffLim() const return interpolateFromSpeed(param_.actual_steer_diff_lim); } -} // namespace vehicle_cmd_gate +} // namespace autoware::vehicle_cmd_gate diff --git a/control/vehicle_cmd_gate/src/vehicle_cmd_filter.hpp b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_filter.hpp similarity index 94% rename from control/vehicle_cmd_gate/src/vehicle_cmd_filter.hpp rename to control/autoware_vehicle_cmd_gate/src/vehicle_cmd_filter.hpp index d9b8383a1de51..96663474f47a4 100644 --- a/control/vehicle_cmd_gate/src/vehicle_cmd_filter.hpp +++ b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_filter.hpp @@ -15,17 +15,17 @@ #ifndef VEHICLE_CMD_FILTER_HPP_ #define VEHICLE_CMD_FILTER_HPP_ +#include #include -#include #include #include -namespace vehicle_cmd_gate +namespace autoware::vehicle_cmd_gate { using autoware_control_msgs::msg::Control; -using vehicle_cmd_gate::msg::IsFilterActivated; +using autoware_vehicle_cmd_gate::msg::IsFilterActivated; using LimitArray = std::vector; struct VehicleCmdFilterParam @@ -98,6 +98,6 @@ class VehicleCmdFilter double getSteerRateLim() const; double getSteerDiffLim() const; }; -} // namespace vehicle_cmd_gate +} // namespace autoware::vehicle_cmd_gate #endif // VEHICLE_CMD_FILTER_HPP_ diff --git a/control/vehicle_cmd_gate/src/vehicle_cmd_gate.cpp b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp similarity index 99% rename from control/vehicle_cmd_gate/src/vehicle_cmd_gate.cpp rename to control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp index cc9d7813083f4..e8d35beb94b1f 100644 --- a/control/vehicle_cmd_gate/src/vehicle_cmd_gate.cpp +++ b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp @@ -28,7 +28,7 @@ #include #include -namespace vehicle_cmd_gate +namespace autoware::vehicle_cmd_gate { namespace @@ -906,7 +906,7 @@ void VehicleCmdGate::publishMarkers(const IsFilterActivated & filter_activated) filter_activated_flag_pub_->publish(filter_activated_flag); filter_activated_marker_raw_pub_->publish(createMarkerArray(filter_activated)); } -} // namespace vehicle_cmd_gate +} // namespace autoware::vehicle_cmd_gate #include -RCLCPP_COMPONENTS_REGISTER_NODE(vehicle_cmd_gate::VehicleCmdGate) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::vehicle_cmd_gate::VehicleCmdGate) diff --git a/control/vehicle_cmd_gate/src/vehicle_cmd_gate.hpp b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.hpp similarity index 98% rename from control/vehicle_cmd_gate/src/vehicle_cmd_gate.hpp rename to control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.hpp index f45280d9d2e48..22613de5d1f07 100644 --- a/control/vehicle_cmd_gate/src/vehicle_cmd_gate.hpp +++ b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.hpp @@ -20,11 +20,11 @@ #include "tier4_autoware_utils/ros/logger_level_configure.hpp" #include "vehicle_cmd_filter.hpp" +#include #include #include #include #include -#include #include #include @@ -51,13 +51,14 @@ #include #include -namespace vehicle_cmd_gate +namespace autoware::vehicle_cmd_gate { using autoware_adapi_v1_msgs::msg::MrmState; using autoware_adapi_v1_msgs::msg::OperationModeState; using autoware_control_msgs::msg::Control; using autoware_control_msgs::msg::Longitudinal; +using autoware_vehicle_cmd_gate::msg::IsFilterActivated; using autoware_vehicle_msgs::msg::GearCommand; using autoware_vehicle_msgs::msg::HazardLightsCommand; using autoware_vehicle_msgs::msg::SteeringReport; @@ -71,7 +72,6 @@ using tier4_external_api_msgs::msg::Heartbeat; using tier4_external_api_msgs::srv::SetEmergency; using tier4_system_msgs::msg::MrmBehaviorStatus; using tier4_vehicle_msgs::msg::VehicleEmergencyStamped; -using vehicle_cmd_gate::msg::IsFilterActivated; using visualization_msgs::msg::MarkerArray; using diagnostic_msgs::msg::DiagnosticStatus; @@ -257,5 +257,5 @@ class VehicleCmdGate : public rclcpp::Node std::unique_ptr published_time_publisher_; }; -} // namespace vehicle_cmd_gate +} // namespace autoware::vehicle_cmd_gate #endif // VEHICLE_CMD_GATE_HPP_ diff --git a/control/vehicle_cmd_gate/test/src/test_filter_in_vehicle_cmd_gate_node.cpp b/control/autoware_vehicle_cmd_gate/test/src/test_filter_in_vehicle_cmd_gate_node.cpp similarity index 99% rename from control/vehicle_cmd_gate/test/src/test_filter_in_vehicle_cmd_gate_node.cpp rename to control/autoware_vehicle_cmd_gate/test/src/test_filter_in_vehicle_cmd_gate_node.cpp index d51db90c8a260..6f148fe6c8140 100644 --- a/control/vehicle_cmd_gate/test/src/test_filter_in_vehicle_cmd_gate_node.cpp +++ b/control/autoware_vehicle_cmd_gate/test/src/test_filter_in_vehicle_cmd_gate_node.cpp @@ -54,7 +54,7 @@ const std::vector lat_jerk_lim = {1.7, 1.3, 0.9, 0.6}; const std::vector actual_steer_diff_lim = {0.5, 0.4, 0.2, 0.1}; const double wheelbase = 2.89; -using vehicle_cmd_gate::VehicleCmdGate; +using autoware::vehicle_cmd_gate::VehicleCmdGate; using autoware_adapi_v1_msgs::msg::MrmState; using autoware_adapi_v1_msgs::msg::OperationModeState; @@ -369,7 +369,7 @@ std::shared_ptr generateNode() auto node_options = rclcpp::NodeOptions{}; const auto vehicle_cmd_gate_dir = - ament_index_cpp::get_package_share_directory("vehicle_cmd_gate"); + ament_index_cpp::get_package_share_directory("autoware_vehicle_cmd_gate"); const auto vehicle_info_util_dir = ament_index_cpp::get_package_share_directory("vehicle_info_util"); diff --git a/control/vehicle_cmd_gate/test/src/test_main.cpp b/control/autoware_vehicle_cmd_gate/test/src/test_main.cpp similarity index 100% rename from control/vehicle_cmd_gate/test/src/test_main.cpp rename to control/autoware_vehicle_cmd_gate/test/src/test_main.cpp diff --git a/control/vehicle_cmd_gate/test/src/test_vehicle_cmd_filter.cpp b/control/autoware_vehicle_cmd_gate/test/src/test_vehicle_cmd_filter.cpp similarity index 98% rename from control/vehicle_cmd_gate/test/src/test_vehicle_cmd_filter.cpp rename to control/autoware_vehicle_cmd_gate/test/src/test_vehicle_cmd_filter.cpp index 5fbab1c5cfb4f..528253671b38a 100644 --- a/control/vehicle_cmd_gate/test/src/test_vehicle_cmd_filter.cpp +++ b/control/autoware_vehicle_cmd_gate/test/src/test_vehicle_cmd_filter.cpp @@ -24,17 +24,17 @@ #define ASSERT_LT_NEAR(x, y) ASSERT_LT(x, y + THRESHOLD) #define ASSERT_GT_NEAR(x, y) ASSERT_GT(x, y - THRESHOLD) +using autoware::vehicle_cmd_gate::LimitArray; using autoware_control_msgs::msg::Control; -using vehicle_cmd_gate::LimitArray; constexpr double NOMINAL_INTERVAL = 1.0; void setFilterParams( - vehicle_cmd_gate::VehicleCmdFilter & f, double v, LimitArray speed_points, LimitArray a, + autoware::vehicle_cmd_gate::VehicleCmdFilter & f, double v, LimitArray speed_points, LimitArray a, LimitArray j, LimitArray lat_a, LimitArray lat_j, LimitArray steer_diff, LimitArray steer_lim, LimitArray steer_rate_lim, const double wheelbase) { - vehicle_cmd_gate::VehicleCmdFilterParam p; + autoware::vehicle_cmd_gate::VehicleCmdFilterParam p; p.vel_lim = v; p.wheel_base = wheelbase; p.reference_speed_points = speed_points; @@ -105,7 +105,7 @@ void test_1d_limit( const double WHEELBASE = 3.0; const double DT = 0.1; // [s] - vehicle_cmd_gate::VehicleCmdFilter filter; + autoware::vehicle_cmd_gate::VehicleCmdFilter filter; filter.setCurrentSpeed(ego_v); setFilterParams( filter, V_LIM, {0.0}, {A_LIM}, {J_LIM}, {LAT_A_LIM}, {LAT_J_LIM}, {STEER_DIFF}, {STEER_LIM}, @@ -275,9 +275,9 @@ TEST(VehicleCmdFilter, VehicleCmdFilter) TEST(VehicleCmdFilter, VehicleCmdFilterInterpolate) { constexpr double WHEELBASE = 2.8; - vehicle_cmd_gate::VehicleCmdFilter filter; + autoware::vehicle_cmd_gate::VehicleCmdFilter filter; - vehicle_cmd_gate::VehicleCmdFilterParam p; + autoware::vehicle_cmd_gate::VehicleCmdFilterParam p; p.wheel_base = WHEELBASE; p.vel_lim = 20.0; p.reference_speed_points = std::vector{2.0, 4.0, 10.0}; diff --git a/launch/tier4_control_launch/launch/control.launch.py b/launch/tier4_control_launch/launch/control.launch.py index a4f896048739f..dea0bc1d7c442 100644 --- a/launch/tier4_control_launch/launch/control.launch.py +++ b/launch/tier4_control_launch/launch/control.launch.py @@ -194,8 +194,8 @@ def launch_setup(context, *args, **kwargs): # vehicle cmd gate vehicle_cmd_gate_component = ComposableNode( - package="vehicle_cmd_gate", - plugin="vehicle_cmd_gate::VehicleCmdGate", + package="autoware_vehicle_cmd_gate", + plugin="autoware::vehicle_cmd_gate::VehicleCmdGate", name="vehicle_cmd_gate", remappings=[ ("input/steering", "/vehicle/status/steering_status"), diff --git a/launch/tier4_control_launch/package.xml b/launch/tier4_control_launch/package.xml index fda612f05436c..cfa1a07d4ea45 100644 --- a/launch/tier4_control_launch/package.xml +++ b/launch/tier4_control_launch/package.xml @@ -12,12 +12,12 @@ autoware_cmake autoware_lane_departure_checker + autoware_vehicle_cmd_gate control_evaluator external_cmd_converter external_cmd_selector shift_decider trajectory_follower_node - vehicle_cmd_gate ament_lint_auto autoware_lint_common From 2235e20be19cd59ae394cbac4d86a36f8b3b0176 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Mon, 10 Jun 2024 10:24:17 +0900 Subject: [PATCH 043/142] feat(autoware_lane_departure_checker): use polling subscriber (#7358) * use polling subscriber Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .../lane_departure_checker_node.hpp | 16 +++-- .../lane_departure_checker_node.cpp | 62 +++++-------------- 2 files changed, 27 insertions(+), 51 deletions(-) diff --git a/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker_node.hpp b/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker_node.hpp index be7126944f767..d37ef30d6b8e8 100644 --- a/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker_node.hpp +++ b/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker_node.hpp @@ -16,6 +16,7 @@ #define AUTOWARE_LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_NODE_HPP_ #include "autoware_lane_departure_checker/lane_departure_checker.hpp" +#include "tier4_autoware_utils/ros/polling_subscriber.hpp" #include #include @@ -66,11 +67,16 @@ class LaneDepartureCheckerNode : public rclcpp::Node private: // Subscriber - rclcpp::Subscription::SharedPtr sub_odom_; - rclcpp::Subscription::SharedPtr sub_lanelet_map_bin_; - rclcpp::Subscription::SharedPtr sub_route_; - rclcpp::Subscription::SharedPtr sub_reference_trajectory_; - rclcpp::Subscription::SharedPtr sub_predicted_trajectory_; + tier4_autoware_utils::InterProcessPollingSubscriber sub_odom_{ + this, "~/input/odometry"}; + tier4_autoware_utils::InterProcessPollingSubscriber sub_lanelet_map_bin_{ + this, "~/input/lanelet_map_bin", rclcpp::QoS{1}.transient_local()}; + tier4_autoware_utils::InterProcessPollingSubscriber sub_route_{ + this, "~/input/route"}; + tier4_autoware_utils::InterProcessPollingSubscriber sub_reference_trajectory_{ + this, "~/input/reference_trajectory"}; + tier4_autoware_utils::InterProcessPollingSubscriber sub_predicted_trajectory_{ + this, "~/input/predicted_trajectory"}; // Data Buffer nav_msgs::msg::Odometry::ConstSharedPtr current_odom_; diff --git a/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp b/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp index 2b919f89e6e95..7956410fdf898 100644 --- a/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp +++ b/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp @@ -169,22 +169,6 @@ LaneDepartureCheckerNode::LaneDepartureCheckerNode(const rclcpp::NodeOptions & o lane_departure_checker_ = std::make_unique(); lane_departure_checker_->setParam(param_, vehicle_info); - // Subscriber - sub_odom_ = this->create_subscription( - "~/input/odometry", 1, std::bind(&LaneDepartureCheckerNode::onOdometry, this, _1)); - sub_lanelet_map_bin_ = this->create_subscription( - "~/input/lanelet_map_bin", rclcpp::QoS{1}.transient_local(), - std::bind(&LaneDepartureCheckerNode::onLaneletMapBin, this, _1)); - sub_route_ = this->create_subscription( - "~/input/route", rclcpp::QoS{1}.transient_local(), - std::bind(&LaneDepartureCheckerNode::onRoute, this, _1)); - sub_reference_trajectory_ = this->create_subscription( - "~/input/reference_trajectory", 1, - std::bind(&LaneDepartureCheckerNode::onReferenceTrajectory, this, _1)); - sub_predicted_trajectory_ = this->create_subscription( - "~/input/predicted_trajectory", 1, - std::bind(&LaneDepartureCheckerNode::onPredictedTrajectory, this, _1)); - // Publisher // Nothing @@ -201,36 +185,6 @@ LaneDepartureCheckerNode::LaneDepartureCheckerNode(const rclcpp::NodeOptions & o this, get_clock(), period_ns, std::bind(&LaneDepartureCheckerNode::onTimer, this)); } -void LaneDepartureCheckerNode::onOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg) -{ - current_odom_ = msg; -} - -void LaneDepartureCheckerNode::onLaneletMapBin(const LaneletMapBin::ConstSharedPtr msg) -{ - lanelet_map_ = std::make_shared(); - lanelet::utils::conversion::fromBinMsg(*msg, lanelet_map_, &traffic_rules_, &routing_graph_); - - // get all shoulder lanes - lanelet::ConstLanelets all_lanelets = lanelet::utils::query::laneletLayer(lanelet_map_); - shoulder_lanelets_ = lanelet::utils::query::shoulderLanelets(all_lanelets); -} - -void LaneDepartureCheckerNode::onRoute(const LaneletRoute::ConstSharedPtr msg) -{ - route_ = msg; -} - -void LaneDepartureCheckerNode::onReferenceTrajectory(const Trajectory::ConstSharedPtr msg) -{ - reference_trajectory_ = msg; -} - -void LaneDepartureCheckerNode::onPredictedTrajectory(const Trajectory::ConstSharedPtr msg) -{ - predicted_trajectory_ = msg; -} - bool LaneDepartureCheckerNode::isDataReady() { if (!current_odom_) { @@ -300,6 +254,22 @@ void LaneDepartureCheckerNode::onTimer() tier4_autoware_utils::StopWatch stop_watch; stop_watch.tic("Total"); + current_odom_ = sub_odom_.takeData(); + route_ = sub_route_.takeData(); + reference_trajectory_ = sub_reference_trajectory_.takeData(); + predicted_trajectory_ = sub_predicted_trajectory_.takeData(); + + const auto lanelet_map_bin_msg = sub_lanelet_map_bin_.takeData(); + if (lanelet_map_bin_msg) { + lanelet_map_ = std::make_shared(); + lanelet::utils::conversion::fromBinMsg( + *lanelet_map_bin_msg, lanelet_map_, &traffic_rules_, &routing_graph_); + + // get all shoulder lanes + lanelet::ConstLanelets all_lanelets = lanelet::utils::query::laneletLayer(lanelet_map_); + shoulder_lanelets_ = lanelet::utils::query::shoulderLanelets(all_lanelets); + } + if (!isDataReady()) { return; } From af9194eb00b3aedc13e70f0e05ef1aaae45690a1 Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Mon, 10 Jun 2024 10:26:26 +0900 Subject: [PATCH 044/142] chore(control): add maintainer for several control modules (#7389) add maintainer Signed-off-by: Zulfaqar Azmi --- control/operation_mode_transition_manager/package.xml | 1 + control/pure_pursuit/package.xml | 1 + control/shift_decider/package.xml | 1 + 3 files changed, 3 insertions(+) diff --git a/control/operation_mode_transition_manager/package.xml b/control/operation_mode_transition_manager/package.xml index 99439aa7e3ab7..81517675281c3 100644 --- a/control/operation_mode_transition_manager/package.xml +++ b/control/operation_mode_transition_manager/package.xml @@ -4,6 +4,7 @@ The vehicle_cmd_gate package Takamasa Horibe Tomoya Kimura + Takayuki Murooka Apache License 2.0 Takamasa Horibe diff --git a/control/pure_pursuit/package.xml b/control/pure_pursuit/package.xml index b4820aee5cec4..0747766af54c8 100644 --- a/control/pure_pursuit/package.xml +++ b/control/pure_pursuit/package.xml @@ -5,6 +5,7 @@ 0.1.0 The pure_pursuit package Takamasa Horibe + Takayuki Murooka Apache License 2.0 Berkay Karaman diff --git a/control/shift_decider/package.xml b/control/shift_decider/package.xml index 885e780c90bcc..a175a6ae9e599 100644 --- a/control/shift_decider/package.xml +++ b/control/shift_decider/package.xml @@ -5,6 +5,7 @@ 0.1.0 The shift_decider package Takamasa Horibe + Takayuki Murooka Apache License 2.0 Takamasa Horibe From ddce1de8053feef5c409e04cec648e25e021dc73 Mon Sep 17 00:00:00 2001 From: Esteve Fernandez <33620+esteve@users.noreply.github.com> Date: Mon, 10 Jun 2024 03:51:19 +0200 Subject: [PATCH 045/142] refactor(behavior_velocity_stop_line_module): prefix package and namespace with autoware_ (#7285) * refactor(behavior_velocity_stop_line_module): prefix package and namespace with autoware_ Signed-off-by: Esteve Fernandez * style(pre-commit): autofix --------- Signed-off-by: Esteve Fernandez Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/CODEOWNERS | 2 +- planning/.pages | 2 +- planning/autoware_behavior_velocity_planner/README.md | 2 +- planning/autoware_behavior_velocity_planner/package.xml | 2 +- .../test/src/test_node_interface.cpp | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/stop_line.param.yaml | 0 .../docs/calculate_stop_pose.drawio.svg | 0 .../docs/find_collision_segment.drawio.svg | 0 .../docs/find_offset_segment.drawio.svg | 0 .../docs/keep_stopping.svg | 0 .../docs/node_and_segment.drawio.svg | 0 .../docs/restart.svg | 0 .../docs/restart_prevention.svg | 0 .../docs/stop_line.svg | 0 .../package.xml | 4 ++-- .../plugins.xml | 2 +- .../src/debug.cpp | 0 .../src/manager.cpp | 0 .../src/manager.hpp | 0 .../src/scene.cpp | 0 .../src/scene.hpp | 0 23 files changed, 9 insertions(+), 9 deletions(-) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/CMakeLists.txt (86%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/README.md (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/config/stop_line.param.yaml (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/docs/calculate_stop_pose.drawio.svg (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/docs/find_collision_segment.drawio.svg (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/docs/find_offset_segment.drawio.svg (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/docs/keep_stopping.svg (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/docs/node_and_segment.drawio.svg (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/docs/restart.svg (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/docs/restart_prevention.svg (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/docs/stop_line.svg (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/package.xml (90%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/plugins.xml (72%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/src/debug.cpp (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/src/manager.cpp (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/src/manager.hpp (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/src/scene.cpp (100%) rename planning/{behavior_velocity_stop_line_module => autoware_behavior_velocity_stop_line_module}/src/scene.hpp (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 084349cda0af3..f0fb702f594ea 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -151,6 +151,7 @@ planning/autoware_behavior_path_planner_common/** daniel.sanchez@tier4.jp fumiya planning/autoware_behavior_path_static_obstacle_avoidance_module/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/autoware_behavior_velocity_planner/** kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_velocity_stop_line_module/** fumiya.watanabe@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp zhe.shen@tier4.jp planning/autoware_behavior_velocity_template_module/** daniel.sanchez@tier4.jp planning/autoware_behavior_velocity_virtual_traffic_light_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_walkway_module/** satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp @@ -181,7 +182,6 @@ planning/behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi@tier4.jp planning/autoware_behavior_velocity_planner_common/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_speed_bump_module/** mdogru@leodrive.ai shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp -planning/behavior_velocity_stop_line_module/** fumiya.watanabe@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp zhe.shen@tier4.jp planning/behavior_velocity_traffic_light_module/** mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/freespace_planner/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/freespace_planning_algorithms/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp diff --git a/planning/.pages b/planning/.pages index c144941662a5d..efb5e677ab6c6 100644 --- a/planning/.pages +++ b/planning/.pages @@ -31,7 +31,7 @@ nav: - 'Occlusion Spot': planning/behavior_velocity_occlusion_spot_module - 'Run Out': planning/autoware_behavior_velocity_run_out_module - 'Speed Bump': planning/behavior_velocity_speed_bump_module - - 'Stop Line': planning/behavior_velocity_stop_line_module + - 'Stop Line': planning/autoware_behavior_velocity_stop_line_module - 'Traffic Light': planning/behavior_velocity_traffic_light_module - 'Virtual Traffic Light': planning/autoware_behavior_velocity_virtual_traffic_light_module - 'Walkway': planning/autoware_behavior_velocity_walkway_module diff --git a/planning/autoware_behavior_velocity_planner/README.md b/planning/autoware_behavior_velocity_planner/README.md index acf4c1ce78e56..400768dd978d9 100644 --- a/planning/autoware_behavior_velocity_planner/README.md +++ b/planning/autoware_behavior_velocity_planner/README.md @@ -13,7 +13,7 @@ It loads modules as plugins. Please refer to the links listed below for detail o - [Detection Area](../behavior_velocity_detection_area_module/README.md) - [Intersection](../autoware_behavior_velocity_intersection_module/README.md) - [MergeFromPrivate](../behavior_velocity_intersection_module/README.md#merge-from-private) -- [Stop Line](../behavior_velocity_stop_line_module/README.md) +- [Stop Line](../autoware_behavior_velocity_stop_line_module/README.md) - [Virtual Traffic Light](../autoware_behavior_velocity_virtual_traffic_light_module/README.md) - [Traffic Light](../behavior_velocity_traffic_light_module/README.md) - [Occlusion Spot](../behavior_velocity_occlusion_spot_module/README.md) diff --git a/planning/autoware_behavior_velocity_planner/package.xml b/planning/autoware_behavior_velocity_planner/package.xml index 70fd92fd9e072..4dcaf22306c22 100644 --- a/planning/autoware_behavior_velocity_planner/package.xml +++ b/planning/autoware_behavior_velocity_planner/package.xml @@ -67,6 +67,7 @@ ament_lint_auto autoware_behavior_velocity_intersection_module autoware_behavior_velocity_run_out_module + autoware_behavior_velocity_stop_line_module autoware_behavior_velocity_virtual_traffic_light_module autoware_behavior_velocity_walkway_module autoware_lint_common @@ -77,7 +78,6 @@ behavior_velocity_no_stopping_area_module behavior_velocity_occlusion_spot_module behavior_velocity_speed_bump_module - behavior_velocity_stop_line_module behavior_velocity_traffic_light_module diff --git a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp index cf8b918418c53..a10ad86e4fb00 100644 --- a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp +++ b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp @@ -104,7 +104,7 @@ std::shared_ptr generateNode() get_behavior_velocity_module_config_no_prefix("occlusion_spot"), get_behavior_velocity_module_config("run_out"), get_behavior_velocity_module_config_no_prefix("speed_bump"), - get_behavior_velocity_module_config_no_prefix("stop_line"), + get_behavior_velocity_module_config("stop_line"), get_behavior_velocity_module_config_no_prefix("traffic_light"), get_behavior_velocity_module_config("virtual_traffic_light"), get_behavior_velocity_module_config_no_prefix("no_drivable_lane")}); diff --git a/planning/behavior_velocity_stop_line_module/CMakeLists.txt b/planning/autoware_behavior_velocity_stop_line_module/CMakeLists.txt similarity index 86% rename from planning/behavior_velocity_stop_line_module/CMakeLists.txt rename to planning/autoware_behavior_velocity_stop_line_module/CMakeLists.txt index bef98aafe6f75..402eb5e20aa24 100644 --- a/planning/behavior_velocity_stop_line_module/CMakeLists.txt +++ b/planning/autoware_behavior_velocity_stop_line_module/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(behavior_velocity_stop_line_module) +project(autoware_behavior_velocity_stop_line_module) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/planning/behavior_velocity_stop_line_module/README.md b/planning/autoware_behavior_velocity_stop_line_module/README.md similarity index 100% rename from planning/behavior_velocity_stop_line_module/README.md rename to planning/autoware_behavior_velocity_stop_line_module/README.md diff --git a/planning/behavior_velocity_stop_line_module/config/stop_line.param.yaml b/planning/autoware_behavior_velocity_stop_line_module/config/stop_line.param.yaml similarity index 100% rename from planning/behavior_velocity_stop_line_module/config/stop_line.param.yaml rename to planning/autoware_behavior_velocity_stop_line_module/config/stop_line.param.yaml diff --git a/planning/behavior_velocity_stop_line_module/docs/calculate_stop_pose.drawio.svg b/planning/autoware_behavior_velocity_stop_line_module/docs/calculate_stop_pose.drawio.svg similarity index 100% rename from planning/behavior_velocity_stop_line_module/docs/calculate_stop_pose.drawio.svg rename to planning/autoware_behavior_velocity_stop_line_module/docs/calculate_stop_pose.drawio.svg diff --git a/planning/behavior_velocity_stop_line_module/docs/find_collision_segment.drawio.svg b/planning/autoware_behavior_velocity_stop_line_module/docs/find_collision_segment.drawio.svg similarity index 100% rename from planning/behavior_velocity_stop_line_module/docs/find_collision_segment.drawio.svg rename to planning/autoware_behavior_velocity_stop_line_module/docs/find_collision_segment.drawio.svg diff --git a/planning/behavior_velocity_stop_line_module/docs/find_offset_segment.drawio.svg b/planning/autoware_behavior_velocity_stop_line_module/docs/find_offset_segment.drawio.svg similarity index 100% rename from planning/behavior_velocity_stop_line_module/docs/find_offset_segment.drawio.svg rename to planning/autoware_behavior_velocity_stop_line_module/docs/find_offset_segment.drawio.svg diff --git a/planning/behavior_velocity_stop_line_module/docs/keep_stopping.svg b/planning/autoware_behavior_velocity_stop_line_module/docs/keep_stopping.svg similarity index 100% rename from planning/behavior_velocity_stop_line_module/docs/keep_stopping.svg rename to planning/autoware_behavior_velocity_stop_line_module/docs/keep_stopping.svg diff --git a/planning/behavior_velocity_stop_line_module/docs/node_and_segment.drawio.svg b/planning/autoware_behavior_velocity_stop_line_module/docs/node_and_segment.drawio.svg similarity index 100% rename from planning/behavior_velocity_stop_line_module/docs/node_and_segment.drawio.svg rename to planning/autoware_behavior_velocity_stop_line_module/docs/node_and_segment.drawio.svg diff --git a/planning/behavior_velocity_stop_line_module/docs/restart.svg b/planning/autoware_behavior_velocity_stop_line_module/docs/restart.svg similarity index 100% rename from planning/behavior_velocity_stop_line_module/docs/restart.svg rename to planning/autoware_behavior_velocity_stop_line_module/docs/restart.svg diff --git a/planning/behavior_velocity_stop_line_module/docs/restart_prevention.svg b/planning/autoware_behavior_velocity_stop_line_module/docs/restart_prevention.svg similarity index 100% rename from planning/behavior_velocity_stop_line_module/docs/restart_prevention.svg rename to planning/autoware_behavior_velocity_stop_line_module/docs/restart_prevention.svg diff --git a/planning/behavior_velocity_stop_line_module/docs/stop_line.svg b/planning/autoware_behavior_velocity_stop_line_module/docs/stop_line.svg similarity index 100% rename from planning/behavior_velocity_stop_line_module/docs/stop_line.svg rename to planning/autoware_behavior_velocity_stop_line_module/docs/stop_line.svg diff --git a/planning/behavior_velocity_stop_line_module/package.xml b/planning/autoware_behavior_velocity_stop_line_module/package.xml similarity index 90% rename from planning/behavior_velocity_stop_line_module/package.xml rename to planning/autoware_behavior_velocity_stop_line_module/package.xml index 3132f60d1f342..c3d3baa965834 100644 --- a/planning/behavior_velocity_stop_line_module/package.xml +++ b/planning/autoware_behavior_velocity_stop_line_module/package.xml @@ -1,9 +1,9 @@ - behavior_velocity_stop_line_module + autoware_behavior_velocity_stop_line_module 0.1.0 - The behavior_velocity_stop_line_module package + The autoware_behavior_velocity_stop_line_module package Fumiya Watanabe Zhe Shen diff --git a/planning/behavior_velocity_stop_line_module/plugins.xml b/planning/autoware_behavior_velocity_stop_line_module/plugins.xml similarity index 72% rename from planning/behavior_velocity_stop_line_module/plugins.xml rename to planning/autoware_behavior_velocity_stop_line_module/plugins.xml index 4b8ce9852fcec..6765a4bc1bb13 100644 --- a/planning/behavior_velocity_stop_line_module/plugins.xml +++ b/planning/autoware_behavior_velocity_stop_line_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_stop_line_module/src/debug.cpp b/planning/autoware_behavior_velocity_stop_line_module/src/debug.cpp similarity index 100% rename from planning/behavior_velocity_stop_line_module/src/debug.cpp rename to planning/autoware_behavior_velocity_stop_line_module/src/debug.cpp diff --git a/planning/behavior_velocity_stop_line_module/src/manager.cpp b/planning/autoware_behavior_velocity_stop_line_module/src/manager.cpp similarity index 100% rename from planning/behavior_velocity_stop_line_module/src/manager.cpp rename to planning/autoware_behavior_velocity_stop_line_module/src/manager.cpp diff --git a/planning/behavior_velocity_stop_line_module/src/manager.hpp b/planning/autoware_behavior_velocity_stop_line_module/src/manager.hpp similarity index 100% rename from planning/behavior_velocity_stop_line_module/src/manager.hpp rename to planning/autoware_behavior_velocity_stop_line_module/src/manager.hpp diff --git a/planning/behavior_velocity_stop_line_module/src/scene.cpp b/planning/autoware_behavior_velocity_stop_line_module/src/scene.cpp similarity index 100% rename from planning/behavior_velocity_stop_line_module/src/scene.cpp rename to planning/autoware_behavior_velocity_stop_line_module/src/scene.cpp diff --git a/planning/behavior_velocity_stop_line_module/src/scene.hpp b/planning/autoware_behavior_velocity_stop_line_module/src/scene.hpp similarity index 100% rename from planning/behavior_velocity_stop_line_module/src/scene.hpp rename to planning/autoware_behavior_velocity_stop_line_module/src/scene.hpp From 7ef10892bc64c58a10cc20a2277498f3996a4f7c Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Mon, 10 Jun 2024 10:54:44 +0900 Subject: [PATCH 046/142] feat(tier4_autoware_utils): add InterProcessPollingSubscriber helper factory (#7349) Signed-off-by: Mamoru Sobue --- .../tier4_autoware_utils/ros/polling_subscriber.hpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp b/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp index b842261d56cfa..20b67ed13dfb5 100644 --- a/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp +++ b/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp @@ -27,6 +27,14 @@ namespace tier4_autoware_utils template class InterProcessPollingSubscriber { +public: + using SharedPtr = std::shared_ptr>; + static SharedPtr create_subscription( + rclcpp::Node * node, const std::string & topic_name, const rclcpp::QoS & qos = rclcpp::QoS{1}) + { + return std::make_shared>(node, topic_name, qos); + } + private: typename rclcpp::Subscription::SharedPtr subscriber_; typename T::SharedPtr data_; From 8743bc0999153028dc1651f98cb15ec499fda0ab Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 10 Jun 2024 10:59:47 +0900 Subject: [PATCH 047/142] feat(route_hanler): handle waypoints in lanelet2 map (#7222) * feat(route_hanler): handle waypoints in lanelet2 map Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../include/route_handler/route_handler.hpp | 23 +- planning/route_handler/src/route_handler.cpp | 288 ++++++++++++++++-- 2 files changed, 292 insertions(+), 19 deletions(-) diff --git a/planning/route_handler/include/route_handler/route_handler.hpp b/planning/route_handler/include/route_handler/route_handler.hpp index 24a20f86ed718..d692337b10bd6 100644 --- a/planning/route_handler/include/route_handler/route_handler.hpp +++ b/planning/route_handler/include/route_handler/route_handler.hpp @@ -1,4 +1,4 @@ -// Copyright 2021-2023 Tier IV, Inc. +// Copyright 2021-2024 TIER IV, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -51,6 +51,20 @@ enum class Direction { NONE, LEFT, RIGHT }; enum class PullOverDirection { NONE, LEFT, RIGHT }; enum class PullOutDirection { NONE, LEFT, RIGHT }; +struct ReferencePoint +{ + bool is_waypoint{false}; + geometry_msgs::msg::Point point; +}; +using PiecewiseReferencePoints = std::vector; + +struct PiecewiseWaypoints +{ + lanelet::Id lanelet_id; + std::vector piecewise_waypoints; +}; +using Waypoints = std::vector; + class RouteHandler { public: @@ -270,6 +284,13 @@ class RouteHandler PathWithLaneId getCenterLinePath( const lanelet::ConstLanelets & lanelet_sequence, const double s_start, const double s_end, bool use_exact = true) const; + std::vector calcWaypointsVector(const lanelet::ConstLanelets & lanelet_sequence) const; + void removeOverlappedCenterlineWithWaypoints( + std::vector & piecewise_ref_points_vec, + const std::vector & piecewise_waypoints, + const lanelet::ConstLanelets & lanelet_sequence, + const size_t piecewise_waypoints_lanelet_sequence_index, + const bool is_removing_direction_forward) const; std::optional getLaneChangeTarget( const lanelet::ConstLanelets & lanelets, const Direction direction = Direction::NONE) const; std::optional getLaneChangeTargetExceptPreferredLane( diff --git a/planning/route_handler/src/route_handler.cpp b/planning/route_handler/src/route_handler.cpp index d410cb2668175..1fd0dd7747e49 100644 --- a/planning/route_handler/src/route_handler.cpp +++ b/planning/route_handler/src/route_handler.cpp @@ -1,4 +1,4 @@ -// Copyright 2021-2023 Tier IV, Inc. +// Copyright 2021-2024 TIER IV, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -38,9 +38,12 @@ #include #include #include +#include #include #include +namespace route_handler +{ namespace { using autoware_planning_msgs::msg::LaneletPrimitive; @@ -129,10 +132,49 @@ std::string toString(const geometry_msgs::msg::Pose & pose) return ss.str(); } -} // namespace +bool isClose( + const geometry_msgs::msg::Point & p1, const geometry_msgs::msg::Point & p2, const double epsilon) +{ + return std::abs(p1.x - p2.x) < epsilon && std::abs(p1.y - p2.y) < epsilon; +} -namespace route_handler +PiecewiseReferencePoints convertWaypointsToReferencePoints( + const std::vector & piecewise_waypoints) { + PiecewiseReferencePoints piecewise_ref_points; + for (const auto & piecewise_waypoint : piecewise_waypoints) { + piecewise_ref_points.push_back(ReferencePoint{true, piecewise_waypoint}); + } + return piecewise_ref_points; +} + +template +bool isIndexWithinVector(const std::vector & vec, const int index) +{ + return 0 <= index && index < static_cast(vec.size()); +} + +template +void removeIndicesFromVector(std::vector & vec, std::vector indices) +{ + // sort indices in a descending order + std::sort(indices.begin(), indices.end(), std::greater()); + + // remove indices from vector + for (const size_t index : indices) { + vec.erase(vec.begin() + index); + } +} + +lanelet::ArcCoordinates calcArcCoordinates( + const lanelet::ConstLanelet & lanelet, const geometry_msgs::msg::Point & point) +{ + return lanelet::geometry::toArcCoordinates( + to2D(lanelet.centerline()), + to2D(lanelet::utils::conversion::toLaneletPoint(point)).basicPoint()); +} +} // namespace + RouteHandler::RouteHandler(const LaneletMapBin & map_msg) { setMap(map_msg); @@ -1494,21 +1536,21 @@ PathWithLaneId RouteHandler::getCenterLinePath( const lanelet::ConstLanelets & lanelet_sequence, const double s_start, const double s_end, bool use_exact) const { - PathWithLaneId reference_path{}; - double s = 0; + using lanelet::utils::to2D; + using lanelet::utils::conversion::toLaneletPoint; + // 1. calculate reference points by lanelets' centerline + // NOTE: This vector aligns the vector lanelet_sequence. + std::vector piecewise_ref_points_vec; + const auto add_ref_point = [&](const auto & pt) { + piecewise_ref_points_vec.back().push_back( + ReferencePoint{false, lanelet::utils::conversion::toGeomMsgPt(pt)}); + }; + double s = 0; for (const auto & llt : lanelet_sequence) { - const lanelet::traffic_rules::SpeedLimitInformation limit = traffic_rules_ptr_->speedLimit(llt); - const lanelet::ConstLineString3d centerline = llt.centerline(); - - const auto add_path_point = [&reference_path, &limit, &llt](const auto & pt) { - PathPointWithLaneId p{}; - p.point.pose.position = lanelet::utils::conversion::toGeomMsgPt(pt); - p.lane_ids.push_back(llt.id()); - p.point.longitudinal_velocity_mps = static_cast(limit.speedLimit.value()); - reference_path.points.push_back(p); - }; + piecewise_ref_points_vec.push_back(std::vector{}); + const lanelet::ConstLineString3d centerline = llt.centerline(); for (size_t i = 0; i < centerline.size(); i++) { const auto & pt = centerline[i]; const lanelet::ConstPoint3d next_pt = @@ -1517,19 +1559,102 @@ PathWithLaneId RouteHandler::getCenterLinePath( if (s < s_start && s + distance > s_start) { const auto p = use_exact ? get3DPointFrom2DArcLength(lanelet_sequence, s_start) : pt; - add_path_point(p); + add_ref_point(p); } if (s >= s_start && s <= s_end) { - add_path_point(pt); + add_ref_point(pt); } if (s < s_end && s + distance > s_end) { const auto p = use_exact ? get3DPointFrom2DArcLength(lanelet_sequence, s_end) : next_pt; - add_path_point(p); + add_ref_point(p); } s += distance; } } + // 2. calculate waypoints + const auto waypoints_vec = calcWaypointsVector(lanelet_sequence); + + // 3. remove points in the margin of the waypoint + for (const auto & waypoints : waypoints_vec) { + for (auto piecewise_waypoints_itr = waypoints.begin(); + piecewise_waypoints_itr != waypoints.end(); ++piecewise_waypoints_itr) { + const auto & piecewise_waypoints = piecewise_waypoints_itr->piecewise_waypoints; + const auto lanelet_id = piecewise_waypoints_itr->lanelet_id; + + // calculate index of lanelet_sequence which corresponds to piecewise_waypoints. + const auto lanelet_sequence_itr = std::find_if( + lanelet_sequence.begin(), lanelet_sequence.end(), + [&](const auto & lanelet) { return lanelet.id() == lanelet_id; }); + if (lanelet_sequence_itr == lanelet_sequence.end()) { + continue; + } + const size_t piecewise_waypoints_lanelet_sequence_index = + std::distance(lanelet_sequence.begin(), lanelet_sequence_itr); + + // calculate reference points by waypoints + const auto ref_points_by_waypoints = convertWaypointsToReferencePoints(piecewise_waypoints); + + // update reference points by waypoints + const bool is_first_waypoint_contained = piecewise_waypoints_itr == waypoints.begin(); + const bool is_last_waypoint_contained = piecewise_waypoints_itr == waypoints.end() - 1; + if (is_first_waypoint_contained || is_last_waypoint_contained) { + // If piecewise_waypoints_itr is the end (first or last) of piecewise_waypoints + + const auto original_piecewise_ref_points = + piecewise_ref_points_vec.at(piecewise_waypoints_lanelet_sequence_index); + + // define current_piecewise_ref_points, and initialize it with waypoints + auto & current_piecewise_ref_points = + piecewise_ref_points_vec.at(piecewise_waypoints_lanelet_sequence_index); + current_piecewise_ref_points = ref_points_by_waypoints; + if (is_first_waypoint_contained) { + // add original reference points to current reference points, and remove reference points + // overlapped with waypoints + current_piecewise_ref_points.insert( + current_piecewise_ref_points.begin(), original_piecewise_ref_points.begin(), + original_piecewise_ref_points.end()); + const bool is_removing_direction_forward = false; + removeOverlappedCenterlineWithWaypoints( + piecewise_ref_points_vec, piecewise_waypoints, lanelet_sequence, + piecewise_waypoints_lanelet_sequence_index, is_removing_direction_forward); + } + if (is_last_waypoint_contained) { + // add original reference points to current reference points, and remove reference points + // overlapped with waypoints + current_piecewise_ref_points.insert( + current_piecewise_ref_points.end(), original_piecewise_ref_points.begin(), + original_piecewise_ref_points.end()); + const bool is_removing_direction_forward = true; + removeOverlappedCenterlineWithWaypoints( + piecewise_ref_points_vec, piecewise_waypoints, lanelet_sequence, + piecewise_waypoints_lanelet_sequence_index, is_removing_direction_forward); + } + } else { + // If piecewise_waypoints_itr is not the end (first or last) of piecewise_waypoints, + // remove all the reference points and add waypoints. + piecewise_ref_points_vec.at(piecewise_waypoints_lanelet_sequence_index) = + ref_points_by_waypoints; + } + } + } + + // 4. convert to PathPointsWithLaneIds + PathWithLaneId reference_path{}; + for (size_t lanelet_idx = 0; lanelet_idx < lanelet_sequence.size(); ++lanelet_idx) { + const auto & lanelet = lanelet_sequence.at(lanelet_idx); + const float speed_limit = + static_cast(traffic_rules_ptr_->speedLimit(lanelet).speedLimit.value()); + + const auto & piecewise_ref_points = piecewise_ref_points_vec.at(lanelet_idx); + for (const auto & ref_point : piecewise_ref_points) { + PathPointWithLaneId p{}; + p.point.pose.position = ref_point.point; + p.lane_ids.push_back(lanelet.id()); + p.point.longitudinal_velocity_mps = speed_limit; + reference_path.points.push_back(p); + } + } reference_path = removeOverlappingPoints(reference_path); // append a point only when having one point so that yaw calculation would work @@ -1565,6 +1690,133 @@ PathWithLaneId RouteHandler::getCenterLinePath( return reference_path; } +std::vector RouteHandler::calcWaypointsVector( + const lanelet::ConstLanelets & lanelet_sequence) const +{ + std::vector waypoints_vec; + for (size_t lanelet_idx = 0; lanelet_idx < lanelet_sequence.size(); ++lanelet_idx) { + const auto & lanelet = lanelet_sequence.at(lanelet_idx); + if (!lanelet.hasAttribute("waypoints")) { + continue; + } + + // generate piecewise waypoints + PiecewiseWaypoints piecewise_waypoints{lanelet.id(), {}}; + const auto waypoints_id = lanelet.attribute("waypoints").asId().value(); + for (const auto & waypoint : lanelet_map_ptr_->lineStringLayer.get(waypoints_id)) { + piecewise_waypoints.piecewise_waypoints.push_back( + lanelet::utils::conversion::toGeomMsgPt(waypoint)); + } + if (piecewise_waypoints.piecewise_waypoints.empty()) { + continue; + } + + // check if the piecewise waypoints are connected to the previous piecewise waypoints + if ( + !waypoints_vec.empty() && isClose( + waypoints_vec.back().back().piecewise_waypoints.back(), + piecewise_waypoints.piecewise_waypoints.front(), 1.0)) { + waypoints_vec.back().push_back(piecewise_waypoints); + } else { + // add new waypoints + Waypoints new_waypoints; + new_waypoints.push_back(piecewise_waypoints); + waypoints_vec.push_back(new_waypoints); + } + } + + return waypoints_vec; +} + +void RouteHandler::removeOverlappedCenterlineWithWaypoints( + std::vector & piecewise_ref_points_vec, + const std::vector & piecewise_waypoints, + const lanelet::ConstLanelets & lanelet_sequence, + const size_t piecewise_waypoints_lanelet_sequence_index, + const bool is_removing_direction_forward) const +{ + const double waypoints_interpolation_arc_margin_ratio = 10.0; + + // calculate arc length threshold + const double front_arc_length_threshold = [&]() { + const auto front_waypoint_arc_coordinates = calcArcCoordinates( + lanelet_sequence.at(piecewise_waypoints_lanelet_sequence_index), piecewise_waypoints.front()); + const double lanelet_arc_length = boost::geometry::length( + lanelet::utils::to2D(lanelet_sequence.at(piecewise_waypoints_lanelet_sequence_index) + .centerline() + .basicLineString())); + return -lanelet_arc_length + front_waypoint_arc_coordinates.length - + std::abs(front_waypoint_arc_coordinates.distance) * + waypoints_interpolation_arc_margin_ratio; + }(); + const double back_arc_length_threshold = [&]() { + const auto back_waypoint_arc_coordinates = calcArcCoordinates( + lanelet_sequence.at(piecewise_waypoints_lanelet_sequence_index), piecewise_waypoints.back()); + return back_waypoint_arc_coordinates.length + std::abs(back_waypoint_arc_coordinates.distance) * + waypoints_interpolation_arc_margin_ratio; + }(); + + double offset_arc_length = 0.0; + int target_lanelet_sequence_index = static_cast(piecewise_waypoints_lanelet_sequence_index); + while (isIndexWithinVector(lanelet_sequence, target_lanelet_sequence_index)) { + auto & target_piecewise_ref_points = piecewise_ref_points_vec.at(target_lanelet_sequence_index); + const double target_lanelet_arc_length = boost::geometry::length(lanelet::utils::to2D( + lanelet_sequence.at(target_lanelet_sequence_index).centerline().basicLineString())); + + // search overlapped ref points in the target lanelet + std::vector overlapped_ref_points_indices{}; + const bool is_search_finished = [&]() { + for (size_t ref_point_unsigned_index = 0; + ref_point_unsigned_index < target_piecewise_ref_points.size(); + ++ref_point_unsigned_index) { + const size_t ref_point_index = + is_removing_direction_forward + ? ref_point_unsigned_index + : target_piecewise_ref_points.size() - 1 - ref_point_unsigned_index; + const auto & ref_point = target_piecewise_ref_points.at(ref_point_index); + + // skip waypoints + if (ref_point.is_waypoint) { + if ( + target_lanelet_sequence_index == + static_cast(piecewise_waypoints_lanelet_sequence_index)) { + overlapped_ref_points_indices.clear(); + } + continue; + } + + const double ref_point_arc_length = + (is_removing_direction_forward ? 0 : -target_lanelet_arc_length) + + calcArcCoordinates(lanelet_sequence.at(target_lanelet_sequence_index), ref_point.point) + .length; + if (is_removing_direction_forward) { + if (back_arc_length_threshold < offset_arc_length + ref_point_arc_length) { + return true; + } + } else { + if (offset_arc_length + ref_point_arc_length < front_arc_length_threshold) { + return true; + } + } + + overlapped_ref_points_indices.push_back(ref_point_index); + } + return false; + }(); + + // remove overlapped indices from ref_points + removeIndicesFromVector(target_piecewise_ref_points, overlapped_ref_points_indices); + + // break if searching overlapped centerline is finished. + if (is_search_finished) { + break; + } + + target_lanelet_sequence_index += is_removing_direction_forward ? 1 : -1; + offset_arc_length = (is_removing_direction_forward ? 1 : -1) * target_lanelet_arc_length; + } +} + bool RouteHandler::isMapMsgReady() const { return is_map_msg_ready_; From 2507944ed24b7e5b9b63598f2e72c65f5cb3eace Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Mon, 10 Jun 2024 11:06:01 +0900 Subject: [PATCH 048/142] refactor(freespace_planning_algorithms)!: add autoware prefix (#7375) Signed-off-by: kosuke55 --- .github/CODEOWNERS | 2 +- .../utils/path_utils.hpp | 6 +++--- .../package.xml | 2 +- .../src/utils/path_utils.cpp | 4 ++-- .../data_structs.hpp | 12 ++++++------ .../freespace_pull_out.hpp | 12 ++++++------ .../src/freespace_pull_out.cpp | 2 +- .../CMakeLists.txt | 14 +++++++------- .../README.md | 4 ++-- .../__init__.py | 0 .../astar_search.py | 2 +- .../figs/summary-astar_single.png | Bin .../figs/summary-rrtstar_fastest.png | Bin .../figs/summary-rrtstar_informed_update.png | Bin .../abstract_algorithm.hpp | 10 +++++----- .../astar_search.hpp | 14 +++++++------- .../reeds_shepp.hpp | 10 +++++----- .../rrtstar.hpp | 14 +++++++------- .../rrtstar_core.hpp | 18 +++++++++--------- .../package.xml | 4 ++-- .../rrtstar.md | 0 .../scripts/bind/astar_search_pybind.cpp | 11 +++++++---- .../scripts/example/example.py | 2 +- .../src/abstract_algorithm.cpp | 6 +++--- .../src/astar_search.cpp | 6 +++--- .../src/reeds_shepp.cpp | 8 ++++---- .../src/rrtstar.cpp | 11 +++-------- .../src/rrtstar_core.cpp | 6 +++--- .../test/debug_plot.py | 0 .../test/debug_plot_rrtstar_core.py | 0 .../test_freespace_planning_algorithms.cpp | 8 ++++---- .../test/src/test_rrtstar_core_informed.cpp | 5 ++++- .../freespace_pull_over.hpp | 12 ++++++------ .../goal_planner_module.hpp | 16 ++++++++-------- .../goal_planner_parameters.hpp | 12 ++++++------ .../src/freespace_pull_over.cpp | 2 +- planning/behavior_path_planner/package.xml | 2 +- .../freespace_planner_node.hpp | 18 +++++++++--------- planning/freespace_planner/package.xml | 2 +- .../freespace_planner_node.cpp | 12 ++++++------ 40 files changed, 135 insertions(+), 134 deletions(-) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/CMakeLists.txt (79%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/README.md (96%) rename planning/{freespace_planning_algorithms/freespace_planning_algorithms => autoware_freespace_planning_algorithms/autoware_freespace_planning_algorithms}/__init__.py (100%) rename planning/{freespace_planning_algorithms/freespace_planning_algorithms => autoware_freespace_planning_algorithms/autoware_freespace_planning_algorithms}/astar_search.py (95%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/figs/summary-astar_single.png (100%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/figs/summary-rrtstar_fastest.png (100%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/figs/summary-rrtstar_informed_update.png (100%) rename planning/{freespace_planning_algorithms/include/freespace_planning_algorithms => autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms}/abstract_algorithm.hpp (94%) rename planning/{freespace_planning_algorithms/include/freespace_planning_algorithms => autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms}/astar_search.hpp (91%) rename planning/{freespace_planning_algorithms/include/freespace_planning_algorithms => autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms}/reeds_shepp.hpp (94%) rename planning/{freespace_planning_algorithms/include/freespace_planning_algorithms => autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms}/rrtstar.hpp (83%) rename planning/{freespace_planning_algorithms/include/freespace_planning_algorithms => autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms}/rrtstar_core.hpp (90%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/package.xml (90%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/rrtstar.md (100%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/scripts/bind/astar_search_pybind.cpp (95%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/scripts/example/example.py (97%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/src/abstract_algorithm.cpp (97%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/src/astar_search.cpp (98%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/src/reeds_shepp.cpp (99%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/src/rrtstar.cpp (97%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/src/rrtstar_core.cpp (98%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/test/debug_plot.py (100%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/test/debug_plot_rrtstar_core.py (100%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/test/src/test_freespace_planning_algorithms.cpp (97%) rename planning/{freespace_planning_algorithms => autoware_freespace_planning_algorithms}/test/src/test_rrtstar_core_informed.cpp (94%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f0fb702f594ea..57fc951f0608c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -184,7 +184,7 @@ planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp m planning/behavior_velocity_speed_bump_module/** mdogru@leodrive.ai shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_traffic_light_module/** mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/freespace_planner/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp -planning/freespace_planning_algorithms/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +planning/autoware_freespace_planning_algorithms/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/mission_planner/** isamu.takagi@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp ryohsuke.mitsudome@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/** maxime.clement@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_planner_common/** maxime.clement@tier4.jp diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/path_utils.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/path_utils.hpp index e58190fa49650..a0bc681144670 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/path_utils.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/path_utils.hpp @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include @@ -73,8 +73,8 @@ std::pair getPathTurnSignal( const BehaviorPathPlannerParameters & common_parameter); PathWithLaneId convertWayPointsToPathWithLaneId( - const freespace_planning_algorithms::PlannerWaypoints & waypoints, const double velocity, - const lanelet::ConstLanelets & lanelets); + const autoware::freespace_planning_algorithms::PlannerWaypoints & waypoints, + const double velocity, const lanelet::ConstLanelets & lanelets); std::vector getReversingIndices(const PathWithLaneId & path); diff --git a/planning/autoware_behavior_path_planner_common/package.xml b/planning/autoware_behavior_path_planner_common/package.xml index b6fb6a352e91e..03391063b14fc 100644 --- a/planning/autoware_behavior_path_planner_common/package.xml +++ b/planning/autoware_behavior_path_planner_common/package.xml @@ -43,11 +43,11 @@ autoware_cmake autoware_adapi_v1_msgs + autoware_freespace_planning_algorithms autoware_lane_departure_checker autoware_perception_msgs autoware_planning_msgs autoware_rtc_interface - freespace_planning_algorithms geometry_msgs interpolation lanelet2_extension diff --git a/planning/autoware_behavior_path_planner_common/src/utils/path_utils.cpp b/planning/autoware_behavior_path_planner_common/src/utils/path_utils.cpp index 9193db9df11e5..a453ba947331d 100644 --- a/planning/autoware_behavior_path_planner_common/src/utils/path_utils.cpp +++ b/planning/autoware_behavior_path_planner_common/src/utils/path_utils.cpp @@ -330,8 +330,8 @@ std::pair getPathTurnSignal( } PathWithLaneId convertWayPointsToPathWithLaneId( - const freespace_planning_algorithms::PlannerWaypoints & waypoints, const double velocity, - const lanelet::ConstLanelets & lanelets) + const autoware::freespace_planning_algorithms::PlannerWaypoints & waypoints, + const double velocity, const lanelet::ConstLanelets & lanelets) { PathWithLaneId path; path.header = waypoints.header; diff --git a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/data_structs.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/data_structs.hpp index 95c98c3c89733..7959c4aeec111 100644 --- a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/data_structs.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/data_structs.hpp @@ -19,9 +19,9 @@ #include "autoware_behavior_path_planner_common/utils/parking_departure/geometric_parallel_parking.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/path_safety_checker_parameters.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -34,9 +34,9 @@ using behavior_path_planner::utils::path_safety_checker::CollisionCheckDebugMap; using behavior_path_planner::utils::path_safety_checker::PoseWithVelocityStamped; using behavior_path_planner::utils::path_safety_checker::TargetObjectsOnLane; -using freespace_planning_algorithms::AstarParam; -using freespace_planning_algorithms::PlannerCommonParam; -using freespace_planning_algorithms::RRTStarParam; +using autoware::freespace_planning_algorithms::AstarParam; +using autoware::freespace_planning_algorithms::PlannerCommonParam; +using autoware::freespace_planning_algorithms::RRTStarParam; struct StartPlannerDebugData { diff --git a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/freespace_pull_out.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/freespace_pull_out.hpp index df640b04e5a72..613911ba33460 100644 --- a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/freespace_pull_out.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/freespace_pull_out.hpp @@ -17,9 +17,9 @@ #include "autoware_behavior_path_start_planner_module/pull_out_planner_base.hpp" -#include -#include -#include +#include +#include +#include #include @@ -27,9 +27,9 @@ namespace behavior_path_planner { -using freespace_planning_algorithms::AbstractPlanningAlgorithm; -using freespace_planning_algorithms::AstarSearch; -using freespace_planning_algorithms::RRTStar; +using autoware::freespace_planning_algorithms::AbstractPlanningAlgorithm; +using autoware::freespace_planning_algorithms::AstarSearch; +using autoware::freespace_planning_algorithms::RRTStar; class FreespacePullOut : public PullOutPlannerBase { diff --git a/planning/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp b/planning/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp index 1dfacd45b5218..f0a83741212b8 100644 --- a/planning/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp +++ b/planning/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp @@ -31,7 +31,7 @@ FreespacePullOut::FreespacePullOut( const vehicle_info_util::VehicleInfo & vehicle_info) : PullOutPlannerBase{node, parameters}, velocity_{parameters.freespace_planner_velocity} { - freespace_planning_algorithms::VehicleShape vehicle_shape( + autoware::freespace_planning_algorithms::VehicleShape vehicle_shape( vehicle_info, parameters.vehicle_shape_margin); if (parameters.freespace_planner_algorithm == "astar") { use_back_ = parameters.astar_parameters.use_back; diff --git a/planning/freespace_planning_algorithms/CMakeLists.txt b/planning/autoware_freespace_planning_algorithms/CMakeLists.txt similarity index 79% rename from planning/freespace_planning_algorithms/CMakeLists.txt rename to planning/autoware_freespace_planning_algorithms/CMakeLists.txt index 726aa47f7a5e5..4f678cd9fdec5 100644 --- a/planning/freespace_planning_algorithms/CMakeLists.txt +++ b/planning/autoware_freespace_planning_algorithms/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(freespace_planning_algorithms) +project(autoware_freespace_planning_algorithms) find_package(autoware_cmake REQUIRED) find_package(python_cmake_module REQUIRED) @@ -19,23 +19,23 @@ target_link_libraries(rrtstar_core reeds_shepp ) -ament_auto_add_library(freespace_planning_algorithms SHARED +ament_auto_add_library(${PROJECT_NAME} SHARED src/abstract_algorithm.cpp src/astar_search.cpp src/rrtstar.cpp ) -target_link_libraries(freespace_planning_algorithms +target_link_libraries(${PROJECT_NAME} reeds_shepp ) if(BUILD_TESTING) find_package(ament_cmake_ros REQUIRED) - ament_add_ros_isolated_gtest(freespace_planning_algorithms-test + ament_add_ros_isolated_gtest(${PROJECT_NAME}-test test/src/test_freespace_planning_algorithms.cpp ) - target_link_libraries(freespace_planning_algorithms-test - freespace_planning_algorithms + target_link_libraries(${PROJECT_NAME}-test + ${PROJECT_NAME} ) find_package(ament_cmake_ros REQUIRED) @@ -43,7 +43,7 @@ if(BUILD_TESTING) test/src/test_rrtstar_core_informed.cpp ) target_link_libraries(rrtstar_core_informed-test - freespace_planning_algorithms + ${PROJECT_NAME} ) endif() diff --git a/planning/freespace_planning_algorithms/README.md b/planning/autoware_freespace_planning_algorithms/README.md similarity index 96% rename from planning/freespace_planning_algorithms/README.md rename to planning/autoware_freespace_planning_algorithms/README.md index 8bd015589d58d..c5ea6b3df8183 100644 --- a/planning/freespace_planning_algorithms/README.md +++ b/planning/autoware_freespace_planning_algorithms/README.md @@ -46,8 +46,8 @@ Some selection criteria would be: Building the package with ros-test and run tests: ```sh -colcon build --packages-select freespace_planning_algorithms -colcon test --packages-select freespace_planning_algorithms +colcon build --packages-select autoware_freespace_planning_algorithms +colcon test --packages-select autoware_freespace_planning_algorithms ``` diff --git a/planning/freespace_planning_algorithms/freespace_planning_algorithms/__init__.py b/planning/autoware_freespace_planning_algorithms/autoware_freespace_planning_algorithms/__init__.py similarity index 100% rename from planning/freespace_planning_algorithms/freespace_planning_algorithms/__init__.py rename to planning/autoware_freespace_planning_algorithms/autoware_freespace_planning_algorithms/__init__.py diff --git a/planning/freespace_planning_algorithms/freespace_planning_algorithms/astar_search.py b/planning/autoware_freespace_planning_algorithms/autoware_freespace_planning_algorithms/astar_search.py similarity index 95% rename from planning/freespace_planning_algorithms/freespace_planning_algorithms/astar_search.py rename to planning/autoware_freespace_planning_algorithms/autoware_freespace_planning_algorithms/astar_search.py index c9dcc351e3ce2..2ffa20150fb0c 100644 --- a/planning/freespace_planning_algorithms/freespace_planning_algorithms/astar_search.py +++ b/planning/autoware_freespace_planning_algorithms/autoware_freespace_planning_algorithms/astar_search.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -import freespace_planning_algorithms.freespace_planning_algorithms_pybind as _fp +import autoware_freespace_planning_algorithms.autoware_freespace_planning_algorithms_pybind as _fp from geometry_msgs.msg import Point from geometry_msgs.msg import Pose from geometry_msgs.msg import Quaternion diff --git a/planning/freespace_planning_algorithms/figs/summary-astar_single.png b/planning/autoware_freespace_planning_algorithms/figs/summary-astar_single.png similarity index 100% rename from planning/freespace_planning_algorithms/figs/summary-astar_single.png rename to planning/autoware_freespace_planning_algorithms/figs/summary-astar_single.png diff --git a/planning/freespace_planning_algorithms/figs/summary-rrtstar_fastest.png b/planning/autoware_freespace_planning_algorithms/figs/summary-rrtstar_fastest.png similarity index 100% rename from planning/freespace_planning_algorithms/figs/summary-rrtstar_fastest.png rename to planning/autoware_freespace_planning_algorithms/figs/summary-rrtstar_fastest.png diff --git a/planning/freespace_planning_algorithms/figs/summary-rrtstar_informed_update.png b/planning/autoware_freespace_planning_algorithms/figs/summary-rrtstar_informed_update.png similarity index 100% rename from planning/freespace_planning_algorithms/figs/summary-rrtstar_informed_update.png rename to planning/autoware_freespace_planning_algorithms/figs/summary-rrtstar_informed_update.png diff --git a/planning/freespace_planning_algorithms/include/freespace_planning_algorithms/abstract_algorithm.hpp b/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/abstract_algorithm.hpp similarity index 94% rename from planning/freespace_planning_algorithms/include/freespace_planning_algorithms/abstract_algorithm.hpp rename to planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/abstract_algorithm.hpp index b4e3b2befae40..27a563f4ec1af 100644 --- a/planning/freespace_planning_algorithms/include/freespace_planning_algorithms/abstract_algorithm.hpp +++ b/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/abstract_algorithm.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef FREESPACE_PLANNING_ALGORITHMS__ABSTRACT_ALGORITHM_HPP_ -#define FREESPACE_PLANNING_ALGORITHMS__ABSTRACT_ALGORITHM_HPP_ +#ifndef AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__ABSTRACT_ALGORITHM_HPP_ +#define AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__ABSTRACT_ALGORITHM_HPP_ #include #include @@ -25,7 +25,7 @@ #include -namespace freespace_planning_algorithms +namespace autoware::freespace_planning_algorithms { int discretizeAngle(const double theta, const int theta_size); @@ -187,6 +187,6 @@ class AbstractPlanningAlgorithm PlannerWaypoints waypoints_; }; -} // namespace freespace_planning_algorithms +} // namespace autoware::freespace_planning_algorithms -#endif // FREESPACE_PLANNING_ALGORITHMS__ABSTRACT_ALGORITHM_HPP_ +#endif // AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__ABSTRACT_ALGORITHM_HPP_ diff --git a/planning/freespace_planning_algorithms/include/freespace_planning_algorithms/astar_search.hpp b/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/astar_search.hpp similarity index 91% rename from planning/freespace_planning_algorithms/include/freespace_planning_algorithms/astar_search.hpp rename to planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/astar_search.hpp index 3dced3eb1d01d..99cf3fc743a82 100644 --- a/planning/freespace_planning_algorithms/include/freespace_planning_algorithms/astar_search.hpp +++ b/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/astar_search.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef FREESPACE_PLANNING_ALGORITHMS__ASTAR_SEARCH_HPP_ -#define FREESPACE_PLANNING_ALGORITHMS__ASTAR_SEARCH_HPP_ +#ifndef AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__ASTAR_SEARCH_HPP_ +#define AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__ASTAR_SEARCH_HPP_ -#include "freespace_planning_algorithms/abstract_algorithm.hpp" -#include "freespace_planning_algorithms/reeds_shepp.hpp" +#include "autoware_freespace_planning_algorithms/abstract_algorithm.hpp" +#include "autoware_freespace_planning_algorithms/reeds_shepp.hpp" #include @@ -32,7 +32,7 @@ #include #include -namespace freespace_planning_algorithms +namespace autoware::freespace_planning_algorithms { enum class NodeStatus : uint8_t { None, Open, Closed }; @@ -169,6 +169,6 @@ class AstarSearch : public AbstractPlanningAlgorithm int x_scale_; int y_scale_; }; -} // namespace freespace_planning_algorithms +} // namespace autoware::freespace_planning_algorithms -#endif // FREESPACE_PLANNING_ALGORITHMS__ASTAR_SEARCH_HPP_ +#endif // AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__ASTAR_SEARCH_HPP_ diff --git a/planning/freespace_planning_algorithms/include/freespace_planning_algorithms/reeds_shepp.hpp b/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/reeds_shepp.hpp similarity index 94% rename from planning/freespace_planning_algorithms/include/freespace_planning_algorithms/reeds_shepp.hpp rename to planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/reeds_shepp.hpp index f14fef33d26da..ece30175fad86 100644 --- a/planning/freespace_planning_algorithms/include/freespace_planning_algorithms/reeds_shepp.hpp +++ b/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/reeds_shepp.hpp @@ -78,14 +78,14 @@ // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. -#ifndef FREESPACE_PLANNING_ALGORITHMS__REEDS_SHEPP_HPP_ -#define FREESPACE_PLANNING_ALGORITHMS__REEDS_SHEPP_HPP_ +#ifndef AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__REEDS_SHEPP_HPP_ +#define AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__REEDS_SHEPP_HPP_ #include #include #include -namespace freespace_planning_algorithms +namespace autoware::freespace_planning_algorithms { using ReedsSheppPathSamplingCallback = std::function; using ReedsSheppPathTypeCallback = std::function; @@ -137,6 +137,6 @@ class ReedsSheppStateSpace /** \brief Turning radius */ double rho_; }; -} // namespace freespace_planning_algorithms +} // namespace autoware::freespace_planning_algorithms -#endif // FREESPACE_PLANNING_ALGORITHMS__REEDS_SHEPP_HPP_ +#endif // AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__REEDS_SHEPP_HPP_ diff --git a/planning/freespace_planning_algorithms/include/freespace_planning_algorithms/rrtstar.hpp b/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/rrtstar.hpp similarity index 83% rename from planning/freespace_planning_algorithms/include/freespace_planning_algorithms/rrtstar.hpp rename to planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/rrtstar.hpp index ac21f7333df37..6a203d84a47c9 100644 --- a/planning/freespace_planning_algorithms/include/freespace_planning_algorithms/rrtstar.hpp +++ b/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/rrtstar.hpp @@ -12,17 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef FREESPACE_PLANNING_ALGORITHMS__RRTSTAR_HPP_ -#define FREESPACE_PLANNING_ALGORITHMS__RRTSTAR_HPP_ +#ifndef AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__RRTSTAR_HPP_ +#define AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__RRTSTAR_HPP_ -#include "freespace_planning_algorithms/abstract_algorithm.hpp" -#include "freespace_planning_algorithms/rrtstar_core.hpp" +#include "autoware_freespace_planning_algorithms/abstract_algorithm.hpp" +#include "autoware_freespace_planning_algorithms/rrtstar_core.hpp" #include #include -namespace freespace_planning_algorithms +namespace autoware::freespace_planning_algorithms { struct RRTStarParam { @@ -69,6 +69,6 @@ class RRTStar : public AbstractPlanningAlgorithm const VehicleShape original_vehicle_shape_; }; -} // namespace freespace_planning_algorithms +} // namespace autoware::freespace_planning_algorithms -#endif // FREESPACE_PLANNING_ALGORITHMS__RRTSTAR_HPP_ +#endif // AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__RRTSTAR_HPP_ diff --git a/planning/freespace_planning_algorithms/include/freespace_planning_algorithms/rrtstar_core.hpp b/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/rrtstar_core.hpp similarity index 90% rename from planning/freespace_planning_algorithms/include/freespace_planning_algorithms/rrtstar_core.hpp rename to planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/rrtstar_core.hpp index 257a5693e118a..633da7a86a8c6 100644 --- a/planning/freespace_planning_algorithms/include/freespace_planning_algorithms/rrtstar_core.hpp +++ b/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/rrtstar_core.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef FREESPACE_PLANNING_ALGORITHMS__RRTSTAR_CORE_HPP_ -#define FREESPACE_PLANNING_ALGORITHMS__RRTSTAR_CORE_HPP_ +#ifndef AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__RRTSTAR_CORE_HPP_ +#define AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__RRTSTAR_CORE_HPP_ -#include "freespace_planning_algorithms/reeds_shepp.hpp" +#include "autoware_freespace_planning_algorithms/reeds_shepp.hpp" #include @@ -28,11 +28,11 @@ #include #include -namespace rrtstar_core +namespace autoware::freespace_planning_algorithms::rrtstar_core { -using Path = freespace_planning_algorithms::ReedsSheppStateSpace::ReedsSheppPath; -using Pose = freespace_planning_algorithms::ReedsSheppStateSpace::StateXYT; -using ReedsSheppStateSpace = freespace_planning_algorithms::ReedsSheppStateSpace; +using Path = ReedsSheppStateSpace::ReedsSheppPath; +using Pose = ReedsSheppStateSpace::StateXYT; +using ReedsSheppStateSpace = ReedsSheppStateSpace; const double inf = std::numeric_limits::infinity(); // cspell: ignore rsspace @@ -156,6 +156,6 @@ class RRTStar CSpace cspace_; }; -} // namespace rrtstar_core +} // namespace autoware::freespace_planning_algorithms::rrtstar_core -#endif // FREESPACE_PLANNING_ALGORITHMS__RRTSTAR_CORE_HPP_ +#endif // AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__RRTSTAR_CORE_HPP_ diff --git a/planning/freespace_planning_algorithms/package.xml b/planning/autoware_freespace_planning_algorithms/package.xml similarity index 90% rename from planning/freespace_planning_algorithms/package.xml rename to planning/autoware_freespace_planning_algorithms/package.xml index 9b19d8a81bb51..d2b7ddc7c620a 100644 --- a/planning/freespace_planning_algorithms/package.xml +++ b/planning/autoware_freespace_planning_algorithms/package.xml @@ -1,9 +1,9 @@ - freespace_planning_algorithms + autoware_freespace_planning_algorithms 0.1.0 - The freespace_planning_algorithms package + The autoware_freespace_planning_algorithms package Kosuke Takeuchi Takamasa Horibe Takayuki Murooka diff --git a/planning/freespace_planning_algorithms/rrtstar.md b/planning/autoware_freespace_planning_algorithms/rrtstar.md similarity index 100% rename from planning/freespace_planning_algorithms/rrtstar.md rename to planning/autoware_freespace_planning_algorithms/rrtstar.md diff --git a/planning/freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp b/planning/autoware_freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp similarity index 95% rename from planning/freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp rename to planning/autoware_freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp index 9d10cf311fb16..b872ee993c5e8 100644 --- a/planning/freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp +++ b/planning/autoware_freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "freespace_planning_algorithms/abstract_algorithm.hpp" -#include "freespace_planning_algorithms/astar_search.hpp" +#include "autoware_freespace_planning_algorithms/abstract_algorithm.hpp" +#include "autoware_freespace_planning_algorithms/astar_search.hpp" #include #include @@ -24,6 +24,8 @@ #include #include +namespace autoware::freespace_planning_algorithms +{ struct PlannerWaypointsVector { std::vector> waypoints; @@ -32,7 +34,7 @@ struct PlannerWaypointsVector class AstarSearchPython : public freespace_planning_algorithms::AstarSearch { - using freespace_planning_algorithms::AstarSearch::AstarSearch; + using AstarSearch::AstarSearch; public: void setMapByte(const std::string & costmap_byte) @@ -97,7 +99,7 @@ class AstarSearchPython : public freespace_planning_algorithms::AstarSearch namespace py = pybind11; -PYBIND11_MODULE(freespace_planning_algorithms_pybind, p) +PYBIND11_MODULE(autoware_freespace_planning_algorithms_pybind, p) { auto pyPlannerWaypointsVector = py::class_(p, "PlannerWaypointsVector", py::dynamic_attr()) @@ -165,3 +167,4 @@ PYBIND11_MODULE(freespace_planning_algorithms_pybind, p) .def("makePlan", &AstarSearchPython::makePlanByte) .def("getWaypoints", &AstarSearchPython::getWaypointsAsVector); } +} // namespace autoware::freespace_planning_algorithms diff --git a/planning/freespace_planning_algorithms/scripts/example/example.py b/planning/autoware_freespace_planning_algorithms/scripts/example/example.py similarity index 97% rename from planning/freespace_planning_algorithms/scripts/example/example.py rename to planning/autoware_freespace_planning_algorithms/scripts/example/example.py index 73f53e23bc540..c0cdf8c2ec6ba 100644 --- a/planning/freespace_planning_algorithms/scripts/example/example.py +++ b/planning/autoware_freespace_planning_algorithms/scripts/example/example.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -import freespace_planning_algorithms.astar_search as fp +import autoware_freespace_planning_algorithms.astar_search as fp from geometry_msgs.msg import Pose from nav_msgs.msg import OccupancyGrid from pyquaternion import Quaternion diff --git a/planning/freespace_planning_algorithms/src/abstract_algorithm.cpp b/planning/autoware_freespace_planning_algorithms/src/abstract_algorithm.cpp similarity index 97% rename from planning/freespace_planning_algorithms/src/abstract_algorithm.cpp rename to planning/autoware_freespace_planning_algorithms/src/abstract_algorithm.cpp index 2c7340072eb53..d946ea87cff81 100644 --- a/planning/freespace_planning_algorithms/src/abstract_algorithm.cpp +++ b/planning/autoware_freespace_planning_algorithms/src/abstract_algorithm.cpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "freespace_planning_algorithms/abstract_algorithm.hpp" +#include "autoware_freespace_planning_algorithms/abstract_algorithm.hpp" #include #include #include -namespace freespace_planning_algorithms +namespace autoware::freespace_planning_algorithms { using tier4_autoware_utils::createQuaternionFromYaw; using tier4_autoware_utils::normalizeRadian; @@ -250,4 +250,4 @@ bool AbstractPlanningAlgorithm::hasObstacleOnTrajectory( return false; } -} // namespace freespace_planning_algorithms +} // namespace autoware::freespace_planning_algorithms diff --git a/planning/freespace_planning_algorithms/src/astar_search.cpp b/planning/autoware_freespace_planning_algorithms/src/astar_search.cpp similarity index 98% rename from planning/freespace_planning_algorithms/src/astar_search.cpp rename to planning/autoware_freespace_planning_algorithms/src/astar_search.cpp index 3cc3801575116..1a7b23251111c 100644 --- a/planning/freespace_planning_algorithms/src/astar_search.cpp +++ b/planning/autoware_freespace_planning_algorithms/src/astar_search.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "freespace_planning_algorithms/astar_search.hpp" +#include "autoware_freespace_planning_algorithms/astar_search.hpp" #include #include @@ -27,7 +27,7 @@ #include -namespace freespace_planning_algorithms +namespace autoware::freespace_planning_algorithms { double calcReedsSheppDistance( const geometry_msgs::msg::Pose & p1, const geometry_msgs::msg::Pose & p2, double radius) @@ -368,4 +368,4 @@ geometry_msgs::msg::Pose AstarSearch::node2pose(const AstarNode & node) const return pose_local; } -} // namespace freespace_planning_algorithms +} // namespace autoware::freespace_planning_algorithms diff --git a/planning/freespace_planning_algorithms/src/reeds_shepp.cpp b/planning/autoware_freespace_planning_algorithms/src/reeds_shepp.cpp similarity index 99% rename from planning/freespace_planning_algorithms/src/reeds_shepp.cpp rename to planning/autoware_freespace_planning_algorithms/src/reeds_shepp.cpp index c6e0b0002ace8..e8e846dde5681 100644 --- a/planning/freespace_planning_algorithms/src/reeds_shepp.cpp +++ b/planning/autoware_freespace_planning_algorithms/src/reeds_shepp.cpp @@ -78,7 +78,7 @@ // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. -#include "freespace_planning_algorithms/reeds_shepp.hpp" +#include "autoware_freespace_planning_algorithms/reeds_shepp.hpp" #include #include @@ -87,7 +87,7 @@ namespace { // The comments, variable names, etc. use the nomenclature from the Reeds & Shepp paper. -using freespace_planning_algorithms::ReedsSheppStateSpace; +using autoware::freespace_planning_algorithms::ReedsSheppStateSpace; const double pi = M_PI; const double twopi = 2. * pi; @@ -617,7 +617,7 @@ ReedsSheppStateSpace::ReedsSheppPath reedsShepp(double x, double y, double phi) } } // namespace -namespace freespace_planning_algorithms +namespace autoware::freespace_planning_algorithms { const ReedsSheppStateSpace::ReedsSheppPathSegmentType ReedsSheppStateSpace::reedsSheppPathType[18][5] = { @@ -716,4 +716,4 @@ ReedsSheppStateSpace::StateXYT ReedsSheppStateSpace::interpolate( s_out.y = s_out.y * rho_ + s0.y; return s_out; } -} // namespace freespace_planning_algorithms +} // namespace autoware::freespace_planning_algorithms diff --git a/planning/freespace_planning_algorithms/src/rrtstar.cpp b/planning/autoware_freespace_planning_algorithms/src/rrtstar.cpp similarity index 97% rename from planning/freespace_planning_algorithms/src/rrtstar.cpp rename to planning/autoware_freespace_planning_algorithms/src/rrtstar.cpp index ae1f0c10e74a8..587771c35d4df 100644 --- a/planning/freespace_planning_algorithms/src/rrtstar.cpp +++ b/planning/autoware_freespace_planning_algorithms/src/rrtstar.cpp @@ -12,21 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "freespace_planning_algorithms/rrtstar.hpp" +#include "autoware_freespace_planning_algorithms/rrtstar.hpp" -namespace +namespace autoware::freespace_planning_algorithms { - rrtstar_core::Pose poseMsgToPose(const geometry_msgs::msg::Pose & pose_msg) { return rrtstar_core::Pose{ pose_msg.position.x, pose_msg.position.y, tf2::getYaw(pose_msg.orientation)}; } -} // namespace - -namespace freespace_planning_algorithms -{ RRTStar::RRTStar( const PlannerCommonParam & planner_common_param, const VehicleShape & original_vehicle_shape, const RRTStarParam & rrtstar_param) @@ -167,4 +162,4 @@ void RRTStar::setRRTPath(const std::vector & waypoints) } } -} // namespace freespace_planning_algorithms +} // namespace autoware::freespace_planning_algorithms diff --git a/planning/freespace_planning_algorithms/src/rrtstar_core.cpp b/planning/autoware_freespace_planning_algorithms/src/rrtstar_core.cpp similarity index 98% rename from planning/freespace_planning_algorithms/src/rrtstar_core.cpp rename to planning/autoware_freespace_planning_algorithms/src/rrtstar_core.cpp index e638a3733adb5..8f6405bab80cf 100644 --- a/planning/freespace_planning_algorithms/src/rrtstar_core.cpp +++ b/planning/autoware_freespace_planning_algorithms/src/rrtstar_core.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "freespace_planning_algorithms/rrtstar_core.hpp" +#include "autoware_freespace_planning_algorithms/rrtstar_core.hpp" #include @@ -26,7 +26,7 @@ // cspell: ignore rsspace // In this case, RSSpace means "Reeds Shepp state Space" -namespace rrtstar_core +namespace autoware::freespace_planning_algorithms::rrtstar_core { CSpace::CSpace( const Pose & lo, const Pose & hi, double r, std::function is_obstacle_free) @@ -459,4 +459,4 @@ void RRTStar::reconnect(const NodeSharedPtr & node_new, const NodeSharedPtr & no } } -} // namespace rrtstar_core +} // namespace autoware::freespace_planning_algorithms::rrtstar_core diff --git a/planning/freespace_planning_algorithms/test/debug_plot.py b/planning/autoware_freespace_planning_algorithms/test/debug_plot.py similarity index 100% rename from planning/freespace_planning_algorithms/test/debug_plot.py rename to planning/autoware_freespace_planning_algorithms/test/debug_plot.py diff --git a/planning/freespace_planning_algorithms/test/debug_plot_rrtstar_core.py b/planning/autoware_freespace_planning_algorithms/test/debug_plot_rrtstar_core.py similarity index 100% rename from planning/freespace_planning_algorithms/test/debug_plot_rrtstar_core.py rename to planning/autoware_freespace_planning_algorithms/test/debug_plot_rrtstar_core.py diff --git a/planning/freespace_planning_algorithms/test/src/test_freespace_planning_algorithms.cpp b/planning/autoware_freespace_planning_algorithms/test/src/test_freespace_planning_algorithms.cpp similarity index 97% rename from planning/freespace_planning_algorithms/test/src/test_freespace_planning_algorithms.cpp rename to planning/autoware_freespace_planning_algorithms/test/src/test_freespace_planning_algorithms.cpp index c11c3df73d467..5cfb004a3b1c3 100644 --- a/planning/freespace_planning_algorithms/test/src/test_freespace_planning_algorithms.cpp +++ b/planning/autoware_freespace_planning_algorithms/test/src/test_freespace_planning_algorithms.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "freespace_planning_algorithms/abstract_algorithm.hpp" -#include "freespace_planning_algorithms/astar_search.hpp" -#include "freespace_planning_algorithms/rrtstar.hpp" +#include "autoware_freespace_planning_algorithms/abstract_algorithm.hpp" +#include "autoware_freespace_planning_algorithms/astar_search.hpp" +#include "autoware_freespace_planning_algorithms/rrtstar.hpp" #include #include @@ -33,7 +33,7 @@ #include #include -namespace fpa = freespace_planning_algorithms; +namespace fpa = autoware::freespace_planning_algorithms; const double length_lexus = 5.5; const double width_lexus = 2.75; diff --git a/planning/freespace_planning_algorithms/test/src/test_rrtstar_core_informed.cpp b/planning/autoware_freespace_planning_algorithms/test/src/test_rrtstar_core_informed.cpp similarity index 94% rename from planning/freespace_planning_algorithms/test/src/test_rrtstar_core_informed.cpp rename to planning/autoware_freespace_planning_algorithms/test/src/test_rrtstar_core_informed.cpp index 40527e51f8436..e08afdb236192 100644 --- a/planning/freespace_planning_algorithms/test/src/test_rrtstar_core_informed.cpp +++ b/planning/autoware_freespace_planning_algorithms/test/src/test_rrtstar_core_informed.cpp @@ -12,13 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "freespace_planning_algorithms/rrtstar_core.hpp" +#include "autoware_freespace_planning_algorithms/rrtstar_core.hpp" #include #include #include +namespace autoware::freespace_planning_algorithms::rrtstar_core +{ bool checkAllNodeConnected(const rrtstar_core::RRTStar & tree) { const auto & nodes = tree.getNodes(); @@ -111,3 +113,4 @@ int main(int argc, char ** argv) testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } +} // namespace autoware::freespace_planning_algorithms::rrtstar_core diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/freespace_pull_over.hpp b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/freespace_pull_over.hpp index ae1ee8c66a990..b1c4a705ae94d 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/freespace_pull_over.hpp +++ b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/freespace_pull_over.hpp @@ -17,9 +17,9 @@ #include "behavior_path_goal_planner_module/pull_over_planner_base.hpp" -#include -#include -#include +#include +#include +#include #include @@ -28,9 +28,9 @@ namespace behavior_path_planner { -using freespace_planning_algorithms::AbstractPlanningAlgorithm; -using freespace_planning_algorithms::AstarSearch; -using freespace_planning_algorithms::RRTStar; +using autoware::freespace_planning_algorithms::AbstractPlanningAlgorithm; +using autoware::freespace_planning_algorithms::AstarSearch; +using autoware::freespace_planning_algorithms::RRTStar; class FreespacePullOver : public PullOverPlannerBase { diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp index b7c4a24e52974..f41de932bb006 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp +++ b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp @@ -28,9 +28,9 @@ #include "behavior_path_goal_planner_module/goal_searcher.hpp" #include "behavior_path_goal_planner_module/shift_pull_over.hpp" +#include +#include #include -#include -#include #include #include @@ -57,12 +57,12 @@ using nav_msgs::msg::OccupancyGrid; using visualization_msgs::msg::Marker; using visualization_msgs::msg::MarkerArray; -using freespace_planning_algorithms::AbstractPlanningAlgorithm; -using freespace_planning_algorithms::AstarParam; -using freespace_planning_algorithms::AstarSearch; -using freespace_planning_algorithms::PlannerCommonParam; -using freespace_planning_algorithms::RRTStar; -using freespace_planning_algorithms::RRTStarParam; +using autoware::freespace_planning_algorithms::AbstractPlanningAlgorithm; +using autoware::freespace_planning_algorithms::AstarParam; +using autoware::freespace_planning_algorithms::AstarSearch; +using autoware::freespace_planning_algorithms::PlannerCommonParam; +using autoware::freespace_planning_algorithms::RRTStar; +using autoware::freespace_planning_algorithms::RRTStarParam; using behavior_path_planner::utils::path_safety_checker::EgoPredictedPathParams; using behavior_path_planner::utils::path_safety_checker::ObjectsFilteringParams; diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_parameters.hpp b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_parameters.hpp index e5b284d03d9c4..dc992b7ed4967 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_parameters.hpp +++ b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_parameters.hpp @@ -19,9 +19,9 @@ #include "autoware_behavior_path_planner_common/utils/parking_departure/geometric_parallel_parking.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/path_safety_checker_parameters.hpp" -#include -#include -#include +#include +#include +#include #include #include @@ -29,9 +29,9 @@ namespace behavior_path_planner { -using freespace_planning_algorithms::AstarParam; -using freespace_planning_algorithms::PlannerCommonParam; -using freespace_planning_algorithms::RRTStarParam; +using autoware::freespace_planning_algorithms::AstarParam; +using autoware::freespace_planning_algorithms::PlannerCommonParam; +using autoware::freespace_planning_algorithms::RRTStarParam; enum class ParkingPolicy { LEFT_SIDE = 0, diff --git a/planning/behavior_path_goal_planner_module/src/freespace_pull_over.cpp b/planning/behavior_path_goal_planner_module/src/freespace_pull_over.cpp index c17d7d38709e5..360707003f7ca 100644 --- a/planning/behavior_path_goal_planner_module/src/freespace_pull_over.cpp +++ b/planning/behavior_path_goal_planner_module/src/freespace_pull_over.cpp @@ -32,7 +32,7 @@ FreespacePullOver::FreespacePullOver( velocity_{parameters.freespace_parking_velocity}, left_side_parking_{parameters.parking_policy == ParkingPolicy::LEFT_SIDE} { - freespace_planning_algorithms::VehicleShape vehicle_shape( + autoware::freespace_planning_algorithms::VehicleShape vehicle_shape( vehicle_info, parameters.vehicle_shape_margin); if (parameters.freespace_parking_algorithm == "astar") { use_back_ = parameters.astar_parameters.use_back; diff --git a/planning/behavior_path_planner/package.xml b/planning/behavior_path_planner/package.xml index f51fa99578d7b..1ce6e65bee219 100644 --- a/planning/behavior_path_planner/package.xml +++ b/planning/behavior_path_planner/package.xml @@ -38,6 +38,7 @@ autoware_adapi_v1_msgs autoware_behavior_path_planner_common + autoware_freespace_planning_algorithms autoware_frenet_planner autoware_lane_departure_checker autoware_path_sampler @@ -46,7 +47,6 @@ autoware_planning_test_manager autoware_vehicle_msgs behaviortree_cpp_v3 - freespace_planning_algorithms geometry_msgs interpolation lanelet2_extension diff --git a/planning/freespace_planner/include/freespace_planner/freespace_planner_node.hpp b/planning/freespace_planner/include/freespace_planner/freespace_planner_node.hpp index 25f3bca215063..fbaef46c43511 100644 --- a/planning/freespace_planner/include/freespace_planner/freespace_planner_node.hpp +++ b/planning/freespace_planner/include/freespace_planner/freespace_planner_node.hpp @@ -33,8 +33,8 @@ #include "tier4_autoware_utils/ros/logger_level_configure.hpp" -#include -#include +#include +#include #include #include @@ -65,15 +65,15 @@ namespace freespace_planner { +using autoware::freespace_planning_algorithms::AbstractPlanningAlgorithm; +using autoware::freespace_planning_algorithms::AstarParam; +using autoware::freespace_planning_algorithms::AstarSearch; +using autoware::freespace_planning_algorithms::PlannerCommonParam; +using autoware::freespace_planning_algorithms::RRTStar; +using autoware::freespace_planning_algorithms::RRTStarParam; +using autoware::freespace_planning_algorithms::VehicleShape; using autoware_planning_msgs::msg::LaneletRoute; using autoware_planning_msgs::msg::Trajectory; -using freespace_planning_algorithms::AbstractPlanningAlgorithm; -using freespace_planning_algorithms::AstarParam; -using freespace_planning_algorithms::AstarSearch; -using freespace_planning_algorithms::PlannerCommonParam; -using freespace_planning_algorithms::RRTStar; -using freespace_planning_algorithms::RRTStarParam; -using freespace_planning_algorithms::VehicleShape; using geometry_msgs::msg::PoseArray; using geometry_msgs::msg::PoseStamped; using geometry_msgs::msg::TransformStamped; diff --git a/planning/freespace_planner/package.xml b/planning/freespace_planner/package.xml index 8445bd2355b25..a29202060a640 100644 --- a/planning/freespace_planner/package.xml +++ b/planning/freespace_planner/package.xml @@ -15,9 +15,9 @@ ament_cmake_auto autoware_cmake + autoware_freespace_planning_algorithms autoware_planning_msgs autoware_planning_test_manager - freespace_planning_algorithms geometry_msgs motion_utils nav_msgs diff --git a/planning/freespace_planner/src/freespace_planner/freespace_planner_node.cpp b/planning/freespace_planner/src/freespace_planner/freespace_planner_node.cpp index b0d9e9cf3edcd..322bf2697a1f6 100644 --- a/planning/freespace_planner/src/freespace_planner/freespace_planner_node.cpp +++ b/planning/freespace_planner/src/freespace_planner/freespace_planner_node.cpp @@ -30,7 +30,7 @@ #include "freespace_planner/freespace_planner_node.hpp" -#include "freespace_planning_algorithms/abstract_algorithm.hpp" +#include "autoware_freespace_planning_algorithms/abstract_algorithm.hpp" #include #include @@ -47,10 +47,10 @@ namespace using autoware_planning_msgs::msg::Trajectory; using autoware_planning_msgs::msg::TrajectoryPoint; using TrajectoryPoints = std::vector; -using freespace_planning_algorithms::AstarSearch; -using freespace_planning_algorithms::PlannerWaypoint; -using freespace_planning_algorithms::PlannerWaypoints; -using freespace_planning_algorithms::RRTStar; +using autoware::freespace_planning_algorithms::AstarSearch; +using autoware::freespace_planning_algorithms::PlannerWaypoint; +using autoware::freespace_planning_algorithms::PlannerWaypoints; +using autoware::freespace_planning_algorithms::RRTStar; using geometry_msgs::msg::Pose; using geometry_msgs::msg::PoseArray; using geometry_msgs::msg::PoseStamped; @@ -562,7 +562,7 @@ TransformStamped FreespacePlannerNode::getTransform( void FreespacePlannerNode::initializePlanningAlgorithm() { // Extend robot shape - freespace_planning_algorithms::VehicleShape extended_vehicle_shape = vehicle_shape_; + autoware::freespace_planning_algorithms::VehicleShape extended_vehicle_shape = vehicle_shape_; const double margin = node_param_.vehicle_shape_margin_m; extended_vehicle_shape.length += margin; extended_vehicle_shape.width += margin; From 1580aba31e2cfb6464c9a37b2befd1775c81936b Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Mon, 10 Jun 2024 11:35:21 +0900 Subject: [PATCH 049/142] fix(motion_planning.launch): fix input traj of obstacle_velocity_limiter (#7386) Signed-off-by: Maxime CLEMENT --- .../lane_driving/motion_planning/motion_planning.launch.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml index 196e7b2c7262c..eba79b905db16 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml @@ -146,7 +146,7 @@ - + From 895b07bfbed44b05927d9a48240c116d925f6f4a Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Mon, 10 Jun 2024 11:57:55 +0900 Subject: [PATCH 050/142] feat(motion_velocity_planner): use polling subscriber to efficiently get messages (#7223) * feat(motion_velocity_planner): use polling subscriber for odometry topic Signed-off-by: Maxime CLEMENT * use polling subscribers for more topics Signed-off-by: Maxime CLEMENT * remove blocking mutex lock when processing traffic lights Signed-off-by: Maxime CLEMENT * fix assign after return Signed-off-by: Maxime CLEMENT --------- Signed-off-by: Maxime CLEMENT --- .../src/filter_predicted_objects.cpp | 4 +- .../src/out_of_lane_module.cpp | 4 +- .../planner_data.hpp | 16 +- .../src/node.cpp | 147 ++++++------------ .../src/node.hpp | 46 +++--- 5 files changed, 85 insertions(+), 132 deletions(-) diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/filter_predicted_objects.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/filter_predicted_objects.cpp index ce993dc1cedb0..77292a41b9cf1 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/filter_predicted_objects.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/filter_predicted_objects.cpp @@ -103,8 +103,8 @@ autoware_perception_msgs::msg::PredictedObjects filter_predicted_objects( const PlannerParam & params) { autoware_perception_msgs::msg::PredictedObjects filtered_objects; - filtered_objects.header = planner_data->predicted_objects->header; - for (const auto & object : planner_data->predicted_objects->objects) { + filtered_objects.header = planner_data->predicted_objects.header; + for (const auto & object : planner_data->predicted_objects.objects) { const auto is_pedestrian = std::find_if(object.classification.begin(), object.classification.end(), [](const auto & c) { return c.label == autoware_perception_msgs::msg::ObjectClassification::PEDESTRIAN; diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/out_of_lane_module.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/out_of_lane_module.cpp index 2cd050d15dd9b..0fe7b783adf31 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/out_of_lane_module.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/out_of_lane_module.cpp @@ -154,11 +154,11 @@ VelocityPlanningResult OutOfLaneModule::plan( tier4_autoware_utils::StopWatch stopwatch; stopwatch.tic(); out_of_lane::EgoData ego_data; - ego_data.pose = planner_data->current_odometry->pose; + ego_data.pose = planner_data->current_odometry.pose.pose; ego_data.trajectory_points = ego_trajectory_points; ego_data.first_trajectory_idx = motion_utils::findNearestSegmentIndex(ego_trajectory_points, ego_data.pose.position); - ego_data.velocity = planner_data->current_velocity->twist.linear.x; + ego_data.velocity = planner_data->current_odometry.twist.twist.linear.x; ego_data.max_decel = planner_data->velocity_smoother_->getMinDecel(); stopwatch.tic("calculate_trajectory_footprints"); const auto current_ego_footprint = diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp index 87aa4ac483feb..73d71e0d0f955 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp @@ -24,9 +24,8 @@ #include #include #include -#include -#include #include +#include #include #include #include @@ -60,12 +59,11 @@ struct PlannerData } // msgs from callbacks that are used for data-ready - geometry_msgs::msg::PoseStamped::ConstSharedPtr current_odometry; - geometry_msgs::msg::TwistStamped::ConstSharedPtr current_velocity; - geometry_msgs::msg::AccelWithCovarianceStamped::ConstSharedPtr current_acceleration; - autoware_perception_msgs::msg::PredictedObjects::ConstSharedPtr predicted_objects; - pcl::PointCloud::ConstPtr no_ground_pointcloud; - nav_msgs::msg::OccupancyGrid::ConstSharedPtr occupancy_grid; + nav_msgs::msg::Odometry current_odometry{}; + geometry_msgs::msg::AccelWithCovarianceStamped current_acceleration{}; + autoware_perception_msgs::msg::PredictedObjects predicted_objects{}; + pcl::PointCloud no_ground_pointcloud{}; + nav_msgs::msg::OccupancyGrid occupancy_grid{}; std::shared_ptr route_handler; // nearest search @@ -78,7 +76,7 @@ struct PlannerData std::map traffic_light_id_map_raw_; std::map traffic_light_id_map_last_observed_; std::optional external_velocity_limit; - tier4_v2x_msgs::msg::VirtualTrafficLightStateArray::ConstSharedPtr virtual_traffic_light_states; + tier4_v2x_msgs::msg::VirtualTrafficLightStateArray virtual_traffic_light_states; // velocity smoother std::shared_ptr velocity_smoother_{}; diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp index 262c32fe1ea47..c53de15d67ebb 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp @@ -63,38 +63,10 @@ MotionVelocityPlannerNode::MotionVelocityPlannerNode(const rclcpp::NodeOptions & sub_trajectory_ = this->create_subscription( "~/input/trajectory", 1, std::bind(&MotionVelocityPlannerNode::on_trajectory, this, _1), create_subscription_options(this)); - sub_predicted_objects_ = - this->create_subscription( - "~/input/dynamic_objects", 1, - std::bind(&MotionVelocityPlannerNode::on_predicted_objects, this, _1), - create_subscription_options(this)); - sub_no_ground_pointcloud_ = this->create_subscription( - "~/input/no_ground_pointcloud", rclcpp::SensorDataQoS(), - std::bind(&MotionVelocityPlannerNode::on_no_ground_pointcloud, this, _1), - create_subscription_options(this)); - sub_vehicle_odometry_ = this->create_subscription( - "~/input/vehicle_odometry", 1, std::bind(&MotionVelocityPlannerNode::on_odometry, this, _1), - create_subscription_options(this)); - sub_acceleration_ = this->create_subscription( - "~/input/accel", 1, std::bind(&MotionVelocityPlannerNode::on_acceleration, this, _1), - create_subscription_options(this)); sub_lanelet_map_ = this->create_subscription( "~/input/vector_map", rclcpp::QoS(10).transient_local(), std::bind(&MotionVelocityPlannerNode::on_lanelet_map, this, _1), create_subscription_options(this)); - sub_traffic_signals_ = - this->create_subscription( - "~/input/traffic_signals", 1, - std::bind(&MotionVelocityPlannerNode::on_traffic_signals, this, _1), - create_subscription_options(this)); - sub_virtual_traffic_light_states_ = - this->create_subscription( - "~/input/virtual_traffic_light_states", 1, - std::bind(&MotionVelocityPlannerNode::on_virtual_traffic_light_states, this, _1), - create_subscription_options(this)); - sub_occupancy_grid_ = this->create_subscription( - "~/input/occupancy_grid", 1, std::bind(&MotionVelocityPlannerNode::on_occupancy_grid, this, _1), - create_subscription_options(this)); srv_load_plugin_ = create_service( "~/service/load_plugin", std::bind(&MotionVelocityPlannerNode::on_load_plugin, this, _1, _2)); @@ -151,45 +123,59 @@ void MotionVelocityPlannerNode::on_unload_plugin( } // NOTE: argument planner_data must not be referenced for multithreading -bool MotionVelocityPlannerNode::is_data_ready() const +bool MotionVelocityPlannerNode::update_planner_data() { - const auto & d = planner_data_; auto clock = *get_clock(); - const auto check_with_msg = [&](const auto ptr, const auto & msg) { + auto is_ready = true; + const auto check_with_log = [&](const auto ptr, const auto & log) { constexpr auto throttle_duration = 3000; // [ms] if (!ptr) { - RCLCPP_INFO_THROTTLE(get_logger(), clock, throttle_duration, msg); + RCLCPP_INFO_THROTTLE(get_logger(), clock, throttle_duration, log); + is_ready = false; return false; } return true; }; - return check_with_msg(d.current_odometry, "Waiting for current odometry") && - check_with_msg(d.current_velocity, "Waiting for current velocity") && - check_with_msg(d.current_acceleration, "Waiting for current acceleration") && - check_with_msg(d.predicted_objects, "Waiting for predicted objects") && - check_with_msg(d.no_ground_pointcloud, "Waiting for pointcloud") && - check_with_msg(map_ptr_, "Waiting for the map") && - check_with_msg( - d.velocity_smoother_, "Waiting for the initialization of the velocity smoother") && - check_with_msg(d.occupancy_grid, "Waiting for the occupancy grid"); -} + const auto ego_state_ptr = sub_vehicle_odometry_.takeData(); + if (check_with_log(ego_state_ptr, "Waiting for current odometry")) + planner_data_.current_odometry = *ego_state_ptr; -void MotionVelocityPlannerNode::on_occupancy_grid( - const nav_msgs::msg::OccupancyGrid::ConstSharedPtr msg) -{ - std::lock_guard lock(mutex_); - planner_data_.occupancy_grid = msg; -} + const auto ego_accel_ptr = sub_acceleration_.takeData(); + if (check_with_log(ego_accel_ptr, "Waiting for current acceleration")) + planner_data_.current_acceleration = *ego_accel_ptr; -void MotionVelocityPlannerNode::on_predicted_objects( - const autoware_perception_msgs::msg::PredictedObjects::ConstSharedPtr msg) -{ - std::lock_guard lock(mutex_); - planner_data_.predicted_objects = msg; + const auto predicted_objects_ptr = sub_predicted_objects_.takeData(); + if (check_with_log(predicted_objects_ptr, "Waiting for predicted objects")) + planner_data_.predicted_objects = *predicted_objects_ptr; + + const auto no_ground_pointcloud_ptr = sub_no_ground_pointcloud_.takeData(); + if (check_with_log(no_ground_pointcloud_ptr, "Waiting for pointcloud")) { + const auto no_ground_pointcloud = process_no_ground_pointcloud(no_ground_pointcloud_ptr); + if (no_ground_pointcloud) planner_data_.no_ground_pointcloud = *no_ground_pointcloud; + } + + const auto occupancy_grid_ptr = sub_occupancy_grid_.takeData(); + if (check_with_log(occupancy_grid_ptr, "Waiting for the occupancy grid")) + planner_data_.occupancy_grid = *occupancy_grid_ptr; + + // here we use bitwise operator to not short-circuit the logging messages + is_ready &= check_with_log(map_ptr_, "Waiting for the map"); + is_ready &= check_with_log( + planner_data_.velocity_smoother_, "Waiting for the initialization of the velocity smoother"); + + // optional data + const auto traffic_signals_ptr = sub_traffic_signals_.takeData(); + if (traffic_signals_ptr) process_traffic_signals(traffic_signals_ptr); + const auto virtual_traffic_light_states_ptr = sub_virtual_traffic_light_states_.takeData(); + if (virtual_traffic_light_states_ptr) + planner_data_.virtual_traffic_light_states = *virtual_traffic_light_states_ptr; + + return is_ready; } -void MotionVelocityPlannerNode::on_no_ground_pointcloud( +std::optional> +MotionVelocityPlannerNode::process_no_ground_pointcloud( const sensor_msgs::msg::PointCloud2::ConstSharedPtr msg) { geometry_msgs::msg::TransformStamped transform; @@ -198,7 +184,7 @@ void MotionVelocityPlannerNode::on_no_ground_pointcloud( "map", msg->header.frame_id, msg->header.stamp, rclcpp::Duration::from_seconds(0.1)); } catch (tf2::TransformException & e) { RCLCPP_WARN(get_logger(), "no transform found for no_ground_pointcloud: %s", e.what()); - return; + return {}; } pcl::PointCloud pc; @@ -206,36 +192,8 @@ void MotionVelocityPlannerNode::on_no_ground_pointcloud( Eigen::Affine3f affine = tf2::transformToEigen(transform.transform).cast(); pcl::PointCloud::Ptr pc_transformed(new pcl::PointCloud); - if (!pc.empty()) { - tier4_autoware_utils::transformPointCloud(pc, *pc_transformed, affine); - } - - { - std::lock_guard lock(mutex_); - planner_data_.no_ground_pointcloud = pc_transformed; - } -} - -void MotionVelocityPlannerNode::on_odometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg) -{ - std::lock_guard lock(mutex_); - - auto current_odometry = std::make_shared(); - current_odometry->header = msg->header; - current_odometry->pose = msg->pose.pose; - planner_data_.current_odometry = current_odometry; - - auto current_velocity = std::make_shared(); - current_velocity->header = msg->header; - current_velocity->twist = msg->twist.twist; - planner_data_.current_velocity = current_velocity; -} - -void MotionVelocityPlannerNode::on_acceleration( - const geometry_msgs::msg::AccelWithCovarianceStamped::ConstSharedPtr msg) -{ - std::lock_guard lock(mutex_); - planner_data_.current_acceleration = msg; + if (!pc.empty()) tier4_autoware_utils::transformPointCloud(pc, *pc_transformed, affine); + return *pc_transformed; } void MotionVelocityPlannerNode::set_velocity_smoother_params() @@ -253,11 +211,9 @@ void MotionVelocityPlannerNode::on_lanelet_map( has_received_map_ = true; } -void MotionVelocityPlannerNode::on_traffic_signals( +void MotionVelocityPlannerNode::process_traffic_signals( const autoware_perception_msgs::msg::TrafficLightGroupArray::ConstSharedPtr msg) { - std::lock_guard lock(mutex_); - // clear previous observation planner_data_.traffic_light_id_map_raw_.clear(); const auto traffic_light_id_map_last_observed_old = @@ -290,19 +246,12 @@ void MotionVelocityPlannerNode::on_traffic_signals( } } -void MotionVelocityPlannerNode::on_virtual_traffic_light_states( - const tier4_v2x_msgs::msg::VirtualTrafficLightStateArray::ConstSharedPtr msg) -{ - std::lock_guard lock(mutex_); - planner_data_.virtual_traffic_light_states = msg; -} - void MotionVelocityPlannerNode::on_trajectory( const autoware_planning_msgs::msg::Trajectory::ConstSharedPtr input_trajectory_msg) { std::unique_lock lk(mutex_); - if (!is_data_ready()) { + if (!update_planner_data()) { return; } @@ -367,9 +316,9 @@ autoware::motion_velocity_planner::TrajectoryPoints MotionVelocityPlannerNode::s const autoware::motion_velocity_planner::TrajectoryPoints & trajectory_points, const autoware::motion_velocity_planner::PlannerData & planner_data) const { - const geometry_msgs::msg::Pose current_pose = planner_data.current_odometry->pose; - const double v0 = planner_data.current_velocity->twist.linear.x; - const double a0 = planner_data.current_acceleration->accel.accel.linear.x; + const geometry_msgs::msg::Pose current_pose = planner_data.current_odometry.pose.pose; + const double v0 = planner_data.current_odometry.twist.twist.linear.x; + const double a0 = planner_data.current_acceleration.accel.accel.linear.x; const auto & external_v_limit = planner_data.external_velocity_limit; const auto & smoother = planner_data.velocity_smoother_; diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp index 4b943dcbb67f2..799f80db25ad2 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp @@ -22,10 +22,12 @@ #include #include #include +#include #include #include #include +#include #include #include #include @@ -60,31 +62,33 @@ class MotionVelocityPlannerNode : public rclcpp::Node // subscriber rclcpp::Subscription::SharedPtr sub_trajectory_; - rclcpp::Subscription::SharedPtr - sub_predicted_objects_; - rclcpp::Subscription::SharedPtr sub_no_ground_pointcloud_; - rclcpp::Subscription::SharedPtr sub_vehicle_odometry_; - rclcpp::Subscription::SharedPtr sub_acceleration_; + tier4_autoware_utils::InterProcessPollingSubscriber< + autoware_perception_msgs::msg::PredictedObjects> + sub_predicted_objects_{this, "~/input/dynamic_objects"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_no_ground_pointcloud_{this, "~/input/no_ground_pointcloud"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_vehicle_odometry_{this, "~/input/vehicle_odometry"}; + tier4_autoware_utils::InterProcessPollingSubscriber< + geometry_msgs::msg::AccelWithCovarianceStamped> + sub_acceleration_{this, "~/input/accel"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_occupancy_grid_{this, "~/input/occupancy_grid"}; + tier4_autoware_utils::InterProcessPollingSubscriber< + autoware_perception_msgs::msg::TrafficLightGroupArray> + sub_traffic_signals_{this, "~/input/traffic_signals"}; + tier4_autoware_utils::InterProcessPollingSubscriber< + tier4_v2x_msgs::msg::VirtualTrafficLightStateArray> + sub_virtual_traffic_light_states_{this, "~/input/virtual_traffic_light_states"}; rclcpp::Subscription::SharedPtr sub_lanelet_map_; - rclcpp::Subscription::SharedPtr - sub_traffic_signals_; - rclcpp::Subscription::SharedPtr - sub_virtual_traffic_light_states_; - rclcpp::Subscription::SharedPtr sub_occupancy_grid_; void on_trajectory( const autoware_planning_msgs::msg::Trajectory::ConstSharedPtr input_trajectory_msg); - void on_predicted_objects( - const autoware_perception_msgs::msg::PredictedObjects::ConstSharedPtr msg); - void on_no_ground_pointcloud(const sensor_msgs::msg::PointCloud2::ConstSharedPtr msg); - void on_odometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg); - void on_acceleration(const geometry_msgs::msg::AccelWithCovarianceStamped::ConstSharedPtr msg); + std::optional> process_no_ground_pointcloud( + const sensor_msgs::msg::PointCloud2::ConstSharedPtr msg); void on_lanelet_map(const autoware_map_msgs::msg::LaneletMapBin::ConstSharedPtr msg); - void on_traffic_signals( + void process_traffic_signals( const autoware_perception_msgs::msg::TrafficLightGroupArray::ConstSharedPtr msg); - void on_virtual_traffic_light_states( - const tier4_v2x_msgs::msg::VirtualTrafficLightStateArray::ConstSharedPtr msg); - void on_occupancy_grid(const nav_msgs::msg::OccupancyGrid::ConstSharedPtr msg); // publishers rclcpp::Publisher::SharedPtr trajectory_pub_; @@ -118,7 +122,9 @@ class MotionVelocityPlannerNode : public rclcpp::Node std::mutex mutex_; // function - bool is_data_ready() const; + /// @brief update the PlannerData instance with the latest messages received + /// @return false if some data is not available + bool update_planner_data(); void insert_stop( autoware_planning_msgs::msg::Trajectory & trajectory, const geometry_msgs::msg::Point & stop_point) const; From fdea913f291dc58c487bc07e669373db524684f0 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Mon, 10 Jun 2024 12:47:21 +0900 Subject: [PATCH 051/142] refactor(occlusion_spot): add autoware prefix (#7357) Signed-off-by: Maxime CLEMENT --- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/occlusion_spot.param.yaml | 0 .../docs/behavior_after_safe_margin.drawio.svg | 0 .../docs/collision_free.drawio.svg | 0 .../docs/da.drawio.svg | 0 .../docs/maximum_slowdown_velocity.drawio.svg | 0 .../docs/object_info_partition.drawio.svg | 0 .../docs/occlusion_spot.drawio.svg | 0 .../docs/occlusion_spot.svg | 0 .../docs/raycast_shadow.drawio.svg | 0 .../docs/safe_motion.drawio.svg | 0 .../docs/velocity_planning.drawio.svg | 0 .../package.xml | 4 ++-- .../plugins.xml | 3 +++ .../src/debug.cpp | 0 .../src/grid_utils.cpp | 4 ++-- .../src/grid_utils.hpp | 4 ++++ .../src/manager.cpp | 0 .../src/manager.hpp | 0 .../src/occlusion_spot_utils.cpp | 0 .../src/occlusion_spot_utils.hpp | 0 .../src/risk_predictive_braking.cpp | 0 .../src/risk_predictive_braking.hpp | 0 .../src/scene_occlusion_spot.cpp | 0 .../src/scene_occlusion_spot.hpp | 0 .../test/src/test_grid_utils.cpp | 0 .../test/src/test_occlusion_spot_utils.cpp | 0 .../test/src/test_risk_predictive_braking.cpp | 0 .../test/src/utils.hpp | 0 30 files changed, 12 insertions(+), 5 deletions(-) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/CMakeLists.txt (93%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/README.md (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/config/occlusion_spot.param.yaml (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/docs/behavior_after_safe_margin.drawio.svg (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/docs/collision_free.drawio.svg (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/docs/da.drawio.svg (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/docs/maximum_slowdown_velocity.drawio.svg (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/docs/object_info_partition.drawio.svg (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/docs/occlusion_spot.drawio.svg (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/docs/occlusion_spot.svg (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/docs/raycast_shadow.drawio.svg (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/docs/safe_motion.drawio.svg (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/docs/velocity_planning.drawio.svg (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/package.xml (90%) create mode 100644 planning/autoware_behavior_velocity_occlusion_spot_module/plugins.xml rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/src/debug.cpp (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/src/grid_utils.cpp (99%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/src/grid_utils.hpp (97%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/src/manager.cpp (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/src/manager.hpp (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/src/occlusion_spot_utils.cpp (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/src/occlusion_spot_utils.hpp (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/src/risk_predictive_braking.cpp (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/src/risk_predictive_braking.hpp (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/src/scene_occlusion_spot.cpp (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/src/scene_occlusion_spot.hpp (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/test/src/test_grid_utils.cpp (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/test/src/test_occlusion_spot_utils.cpp (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/test/src/test_risk_predictive_braking.cpp (100%) rename planning/{behavior_velocity_occlusion_spot_module => autoware_behavior_velocity_occlusion_spot_module}/test/src/utils.hpp (100%) diff --git a/planning/behavior_velocity_occlusion_spot_module/CMakeLists.txt b/planning/autoware_behavior_velocity_occlusion_spot_module/CMakeLists.txt similarity index 93% rename from planning/behavior_velocity_occlusion_spot_module/CMakeLists.txt rename to planning/autoware_behavior_velocity_occlusion_spot_module/CMakeLists.txt index 8b327291a60f1..4e53e7bd1790b 100644 --- a/planning/behavior_velocity_occlusion_spot_module/CMakeLists.txt +++ b/planning/autoware_behavior_velocity_occlusion_spot_module/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(behavior_velocity_occlusion_spot_module) +project(autoware_behavior_velocity_occlusion_spot_module) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/planning/behavior_velocity_occlusion_spot_module/README.md b/planning/autoware_behavior_velocity_occlusion_spot_module/README.md similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/README.md rename to planning/autoware_behavior_velocity_occlusion_spot_module/README.md diff --git a/planning/behavior_velocity_occlusion_spot_module/config/occlusion_spot.param.yaml b/planning/autoware_behavior_velocity_occlusion_spot_module/config/occlusion_spot.param.yaml similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/config/occlusion_spot.param.yaml rename to planning/autoware_behavior_velocity_occlusion_spot_module/config/occlusion_spot.param.yaml diff --git a/planning/behavior_velocity_occlusion_spot_module/docs/behavior_after_safe_margin.drawio.svg b/planning/autoware_behavior_velocity_occlusion_spot_module/docs/behavior_after_safe_margin.drawio.svg similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/docs/behavior_after_safe_margin.drawio.svg rename to planning/autoware_behavior_velocity_occlusion_spot_module/docs/behavior_after_safe_margin.drawio.svg diff --git a/planning/behavior_velocity_occlusion_spot_module/docs/collision_free.drawio.svg b/planning/autoware_behavior_velocity_occlusion_spot_module/docs/collision_free.drawio.svg similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/docs/collision_free.drawio.svg rename to planning/autoware_behavior_velocity_occlusion_spot_module/docs/collision_free.drawio.svg diff --git a/planning/behavior_velocity_occlusion_spot_module/docs/da.drawio.svg b/planning/autoware_behavior_velocity_occlusion_spot_module/docs/da.drawio.svg similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/docs/da.drawio.svg rename to planning/autoware_behavior_velocity_occlusion_spot_module/docs/da.drawio.svg diff --git a/planning/behavior_velocity_occlusion_spot_module/docs/maximum_slowdown_velocity.drawio.svg b/planning/autoware_behavior_velocity_occlusion_spot_module/docs/maximum_slowdown_velocity.drawio.svg similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/docs/maximum_slowdown_velocity.drawio.svg rename to planning/autoware_behavior_velocity_occlusion_spot_module/docs/maximum_slowdown_velocity.drawio.svg diff --git a/planning/behavior_velocity_occlusion_spot_module/docs/object_info_partition.drawio.svg b/planning/autoware_behavior_velocity_occlusion_spot_module/docs/object_info_partition.drawio.svg similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/docs/object_info_partition.drawio.svg rename to planning/autoware_behavior_velocity_occlusion_spot_module/docs/object_info_partition.drawio.svg diff --git a/planning/behavior_velocity_occlusion_spot_module/docs/occlusion_spot.drawio.svg b/planning/autoware_behavior_velocity_occlusion_spot_module/docs/occlusion_spot.drawio.svg similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/docs/occlusion_spot.drawio.svg rename to planning/autoware_behavior_velocity_occlusion_spot_module/docs/occlusion_spot.drawio.svg diff --git a/planning/behavior_velocity_occlusion_spot_module/docs/occlusion_spot.svg b/planning/autoware_behavior_velocity_occlusion_spot_module/docs/occlusion_spot.svg similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/docs/occlusion_spot.svg rename to planning/autoware_behavior_velocity_occlusion_spot_module/docs/occlusion_spot.svg diff --git a/planning/behavior_velocity_occlusion_spot_module/docs/raycast_shadow.drawio.svg b/planning/autoware_behavior_velocity_occlusion_spot_module/docs/raycast_shadow.drawio.svg similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/docs/raycast_shadow.drawio.svg rename to planning/autoware_behavior_velocity_occlusion_spot_module/docs/raycast_shadow.drawio.svg diff --git a/planning/behavior_velocity_occlusion_spot_module/docs/safe_motion.drawio.svg b/planning/autoware_behavior_velocity_occlusion_spot_module/docs/safe_motion.drawio.svg similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/docs/safe_motion.drawio.svg rename to planning/autoware_behavior_velocity_occlusion_spot_module/docs/safe_motion.drawio.svg diff --git a/planning/behavior_velocity_occlusion_spot_module/docs/velocity_planning.drawio.svg b/planning/autoware_behavior_velocity_occlusion_spot_module/docs/velocity_planning.drawio.svg similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/docs/velocity_planning.drawio.svg rename to planning/autoware_behavior_velocity_occlusion_spot_module/docs/velocity_planning.drawio.svg diff --git a/planning/behavior_velocity_occlusion_spot_module/package.xml b/planning/autoware_behavior_velocity_occlusion_spot_module/package.xml similarity index 90% rename from planning/behavior_velocity_occlusion_spot_module/package.xml rename to planning/autoware_behavior_velocity_occlusion_spot_module/package.xml index ceddd48b045a0..2f56bce7155b5 100644 --- a/planning/behavior_velocity_occlusion_spot_module/package.xml +++ b/planning/autoware_behavior_velocity_occlusion_spot_module/package.xml @@ -1,9 +1,9 @@ - behavior_velocity_occlusion_spot_module + autoware_behavior_velocity_occlusion_spot_module 0.1.0 - The behavior_velocity_occlusion_spot_module package + The autoware_behavior_velocity_occlusion_spot_module package Taiki Tanaka Tomoya Kimura diff --git a/planning/autoware_behavior_velocity_occlusion_spot_module/plugins.xml b/planning/autoware_behavior_velocity_occlusion_spot_module/plugins.xml new file mode 100644 index 0000000000000..53a2c460c2e44 --- /dev/null +++ b/planning/autoware_behavior_velocity_occlusion_spot_module/plugins.xml @@ -0,0 +1,3 @@ + + + diff --git a/planning/behavior_velocity_occlusion_spot_module/src/debug.cpp b/planning/autoware_behavior_velocity_occlusion_spot_module/src/debug.cpp similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/src/debug.cpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/src/debug.cpp diff --git a/planning/behavior_velocity_occlusion_spot_module/src/grid_utils.cpp b/planning/autoware_behavior_velocity_occlusion_spot_module/src/grid_utils.cpp similarity index 99% rename from planning/behavior_velocity_occlusion_spot_module/src/grid_utils.cpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/src/grid_utils.cpp index 427a6f27be3c4..6ab88baf77b20 100644 --- a/planning/behavior_velocity_occlusion_spot_module/src/grid_utils.cpp +++ b/planning/autoware_behavior_velocity_occlusion_spot_module/src/grid_utils.cpp @@ -39,7 +39,7 @@ Polygon2d pointsToPoly(const Point2d p0, const Point2d p1, const double radius) // std::cout << boost::geometry::wkt(line_poly) << std::endl; // std::cout << boost::geometry::wkt(line) << std::endl; - bg::correct(line_poly); + boost::geometry::correct(line_poly); return line_poly; } @@ -142,7 +142,7 @@ Polygon2d generateOccupancyPolygon(const nav_msgs::msg::MapMetaData & info, cons poly.outer().emplace_back(to_bg2d(calcOffsetPose(info.origin, r, r, 0).position)); poly.outer().emplace_back(to_bg2d(calcOffsetPose(info.origin, 0, r, 0).position)); - bg::correct(poly); + boost::geometry::correct(poly); return poly; } diff --git a/planning/behavior_velocity_occlusion_spot_module/src/grid_utils.hpp b/planning/autoware_behavior_velocity_occlusion_spot_module/src/grid_utils.hpp similarity index 97% rename from planning/behavior_velocity_occlusion_spot_module/src/grid_utils.hpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/src/grid_utils.hpp index 5c8d77fc831df..8dc59d07173dc 100644 --- a/planning/behavior_velocity_occlusion_spot_module/src/grid_utils.hpp +++ b/planning/autoware_behavior_velocity_occlusion_spot_module/src/grid_utils.hpp @@ -61,6 +61,10 @@ using geometry_msgs::msg::Point; using geometry_msgs::msg::TransformStamped; using nav_msgs::msg::MapMetaData; using nav_msgs::msg::OccupancyGrid; +using tier4_autoware_utils::LineString2d; +using tier4_autoware_utils::Point2d; +using tier4_autoware_utils::Polygon2d; + namespace occlusion_cost_value { static constexpr unsigned char FREE_SPACE = 0; diff --git a/planning/behavior_velocity_occlusion_spot_module/src/manager.cpp b/planning/autoware_behavior_velocity_occlusion_spot_module/src/manager.cpp similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/src/manager.cpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/src/manager.cpp diff --git a/planning/behavior_velocity_occlusion_spot_module/src/manager.hpp b/planning/autoware_behavior_velocity_occlusion_spot_module/src/manager.hpp similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/src/manager.hpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/src/manager.hpp diff --git a/planning/behavior_velocity_occlusion_spot_module/src/occlusion_spot_utils.cpp b/planning/autoware_behavior_velocity_occlusion_spot_module/src/occlusion_spot_utils.cpp similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/src/occlusion_spot_utils.cpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/src/occlusion_spot_utils.cpp diff --git a/planning/behavior_velocity_occlusion_spot_module/src/occlusion_spot_utils.hpp b/planning/autoware_behavior_velocity_occlusion_spot_module/src/occlusion_spot_utils.hpp similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/src/occlusion_spot_utils.hpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/src/occlusion_spot_utils.hpp diff --git a/planning/behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.cpp b/planning/autoware_behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.cpp similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.cpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.cpp diff --git a/planning/behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.hpp b/planning/autoware_behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.hpp similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.hpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/src/risk_predictive_braking.hpp diff --git a/planning/behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.cpp b/planning/autoware_behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.cpp similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.cpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.cpp diff --git a/planning/behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.hpp b/planning/autoware_behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.hpp similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.hpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.hpp diff --git a/planning/behavior_velocity_occlusion_spot_module/test/src/test_grid_utils.cpp b/planning/autoware_behavior_velocity_occlusion_spot_module/test/src/test_grid_utils.cpp similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/test/src/test_grid_utils.cpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/test/src/test_grid_utils.cpp diff --git a/planning/behavior_velocity_occlusion_spot_module/test/src/test_occlusion_spot_utils.cpp b/planning/autoware_behavior_velocity_occlusion_spot_module/test/src/test_occlusion_spot_utils.cpp similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/test/src/test_occlusion_spot_utils.cpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/test/src/test_occlusion_spot_utils.cpp diff --git a/planning/behavior_velocity_occlusion_spot_module/test/src/test_risk_predictive_braking.cpp b/planning/autoware_behavior_velocity_occlusion_spot_module/test/src/test_risk_predictive_braking.cpp similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/test/src/test_risk_predictive_braking.cpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/test/src/test_risk_predictive_braking.cpp diff --git a/planning/behavior_velocity_occlusion_spot_module/test/src/utils.hpp b/planning/autoware_behavior_velocity_occlusion_spot_module/test/src/utils.hpp similarity index 100% rename from planning/behavior_velocity_occlusion_spot_module/test/src/utils.hpp rename to planning/autoware_behavior_velocity_occlusion_spot_module/test/src/utils.hpp From 251dfb55aae5de7da1dd15c8eb3d5483aa2cc432 Mon Sep 17 00:00:00 2001 From: Yukinari Hisaki <42021302+yhisaki@users.noreply.github.com> Date: Mon, 10 Jun 2024 13:17:01 +0900 Subject: [PATCH 052/142] refactor(scenario_selector): prefix package and namespace with autoware_ (#7379) Signed-off-by: Y.Hisaki --- .github/CODEOWNERS | 2 +- .../scenario_planning.launch.xml | 2 +- launch/tier4_planning_launch/package.xml | 2 +- planning/.pages | 2 +- .../CMakeLists.txt | 15 +++++++-------- .../README.md | 8 ++++---- .../config/scenario_selector.param.yaml | 0 .../include/autoware_scenario_selector/node.hpp} | 10 ++++++---- ...ummy_scenario_selector_lane_driving.launch.xml | 0 .../dummy_scenario_selector_parking.launch.xml | 0 .../launch/scenario_selector.launch.xml | 4 ++-- .../package.xml | 4 ++-- .../schema/scenario_selector.schema.json | 4 ++-- .../src/node.cpp} | 8 +++++--- ...autoware_scenario_selector_node_interface.cpp} | 6 ++++-- 15 files changed, 36 insertions(+), 31 deletions(-) rename planning/{scenario_selector => autoware_scenario_selector}/CMakeLists.txt (54%) rename planning/{scenario_selector => autoware_scenario_selector}/README.md (91%) rename planning/{scenario_selector => autoware_scenario_selector}/config/scenario_selector.param.yaml (100%) rename planning/{scenario_selector/include/scenario_selector/scenario_selector_node.hpp => autoware_scenario_selector/include/autoware_scenario_selector/node.hpp} (94%) rename planning/{scenario_selector => autoware_scenario_selector}/launch/dummy_scenario_selector_lane_driving.launch.xml (100%) rename planning/{scenario_selector => autoware_scenario_selector}/launch/dummy_scenario_selector_parking.launch.xml (100%) rename planning/{scenario_selector => autoware_scenario_selector}/launch/scenario_selector.launch.xml (80%) rename planning/{scenario_selector => autoware_scenario_selector}/package.xml (93%) rename planning/{scenario_selector => autoware_scenario_selector}/schema/scenario_selector.schema.json (94%) rename planning/{scenario_selector/src/scenario_selector_node/scenario_selector_node.cpp => autoware_scenario_selector/src/node.cpp} (98%) rename planning/{scenario_selector/test/test_scenario_selector_node_interface.cpp => autoware_scenario_selector/test/test_autoware_scenario_selector_node_interface.cpp} (97%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 57fc951f0608c..863d9565571ab 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -203,7 +203,7 @@ planning/sampling_based_planner/autoware_bezier_sampler/** maxime.clement@tier4. planning/sampling_based_planner/autoware_frenet_planner/** maxime.clement@tier4.jp planning/sampling_based_planner/autoware_path_sampler/** maxime.clement@tier4.jp planning/sampling_based_planner/autoware_sampler_common/** maxime.clement@tier4.jp -planning/scenario_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_scenario_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/autoware_surround_obstacle_checker/** go.sakayori@tier4.jp satoshi.ota@tier4.jp sensing/gnss_poser/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp sensing/image_diagnostics/** dai.nguyen@tier4.jp yoshi.ri@tier4.jp diff --git a/launch/tier4_planning_launch/launch/scenario_planning/scenario_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/scenario_planning.launch.xml index f96cac4f017a6..a252986f9d957 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/scenario_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/scenario_planning.launch.xml @@ -3,7 +3,7 @@ - + diff --git a/launch/tier4_planning_launch/package.xml b/launch/tier4_planning_launch/package.xml index e5def4c7aed0c..798ee7675acaa 100644 --- a/launch/tier4_planning_launch/package.xml +++ b/launch/tier4_planning_launch/package.xml @@ -64,6 +64,7 @@ autoware_planning_topic_converter autoware_planning_validator autoware_remaining_distance_time_calculator + autoware_scenario_selector autoware_surround_obstacle_checker autoware_velocity_smoother behavior_path_planner @@ -74,7 +75,6 @@ obstacle_cruise_planner obstacle_stop_planner planning_evaluator - scenario_selector ament_lint_auto autoware_lint_common diff --git a/planning/.pages b/planning/.pages index efb5e677ab6c6..03b7ec910f2a1 100644 --- a/planning/.pages +++ b/planning/.pages @@ -69,7 +69,7 @@ nav: - 'Velocity Smoother': - 'About Velocity Smoother': planning/autoware_velocity_smoother - 'About Velocity Smoother (Japanese)': planning/autoware_velocity_smoother/README.ja - - 'Scenario Selector': planning/scenario_selector + - 'Scenario Selector': planning/autoware_scenario_selector - 'Static Centerline Generator': planning/autoware_static_centerline_generator - 'API and Library': - 'Costmap Generator': planning/costmap_generator diff --git a/planning/scenario_selector/CMakeLists.txt b/planning/autoware_scenario_selector/CMakeLists.txt similarity index 54% rename from planning/scenario_selector/CMakeLists.txt rename to planning/autoware_scenario_selector/CMakeLists.txt index d2e9e051d721a..e615ed69d61bf 100644 --- a/planning/scenario_selector/CMakeLists.txt +++ b/planning/autoware_scenario_selector/CMakeLists.txt @@ -1,16 +1,16 @@ cmake_minimum_required(VERSION 3.14) -project(scenario_selector) +project(autoware_scenario_selector) find_package(autoware_cmake REQUIRED) autoware_package() -ament_auto_add_library(scenario_selector_node SHARED - src/scenario_selector_node/scenario_selector_node.cpp +ament_auto_add_library(${PROJECT_NAME} SHARED + src/node.cpp ) -rclcpp_components_register_node(scenario_selector_node - PLUGIN "ScenarioSelectorNode" - EXECUTABLE scenario_selector +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::scenario_selector::ScenarioSelectorNode" + EXECUTABLE ${PROJECT_NAME}_node ) if(BUILD_TESTING) @@ -18,11 +18,10 @@ if(BUILD_TESTING) test/test_${PROJECT_NAME}_node_interface.cpp ) target_link_libraries(test_${PROJECT_NAME} - ${PROJECT_NAME}_node + ${PROJECT_NAME} ) endif() - ament_auto_package(INSTALL_TO_SHARE launch config diff --git a/planning/scenario_selector/README.md b/planning/autoware_scenario_selector/README.md similarity index 91% rename from planning/scenario_selector/README.md rename to planning/autoware_scenario_selector/README.md index 373ac164e5057..a0b78a572c734 100644 --- a/planning/scenario_selector/README.md +++ b/planning/autoware_scenario_selector/README.md @@ -1,4 +1,4 @@ -# scenario_selector +# autoware_scenario_selector ## scenario_selector_node @@ -29,12 +29,12 @@ None ### How to launch 1. Write your remapping info in `scenario_selector.launch` or add args when executing `roslaunch` -2. `roslaunch scenario_selector scenario_selector.launch` - - If you would like to use only a single scenario, `roslaunch scenario_selector dummy_scenario_selector_{scenario_name}.launch` +2. `roslaunch autoware_scenario_selector scenario_selector.launch` + - If you would like to use only a single scenario, `roslaunch autoware_scenario_selector dummy_scenario_selector_{scenario_name}.launch` ### Parameters -{{ json_to_markdown("planning/scenario_selector/schema/scenario_selector.schema.json") }} +{{ json_to_markdown("planning/autoware_scenario_selector/schema/scenario_selector.schema.json") }} ### Flowchart diff --git a/planning/scenario_selector/config/scenario_selector.param.yaml b/planning/autoware_scenario_selector/config/scenario_selector.param.yaml similarity index 100% rename from planning/scenario_selector/config/scenario_selector.param.yaml rename to planning/autoware_scenario_selector/config/scenario_selector.param.yaml diff --git a/planning/scenario_selector/include/scenario_selector/scenario_selector_node.hpp b/planning/autoware_scenario_selector/include/autoware_scenario_selector/node.hpp similarity index 94% rename from planning/scenario_selector/include/scenario_selector/scenario_selector_node.hpp rename to planning/autoware_scenario_selector/include/autoware_scenario_selector/node.hpp index 7162a435d8852..5551db45bba37 100644 --- a/planning/scenario_selector/include/scenario_selector/scenario_selector_node.hpp +++ b/planning/autoware_scenario_selector/include/autoware_scenario_selector/node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SCENARIO_SELECTOR__SCENARIO_SELECTOR_NODE_HPP_ -#define SCENARIO_SELECTOR__SCENARIO_SELECTOR_NODE_HPP_ +#ifndef AUTOWARE_SCENARIO_SELECTOR__NODE_HPP_ +#define AUTOWARE_SCENARIO_SELECTOR__NODE_HPP_ #include #include @@ -43,6 +43,8 @@ #include #include +namespace autoware::scenario_selector +{ class ScenarioSelectorNode : public rclcpp::Node { public: @@ -100,5 +102,5 @@ class ScenarioSelectorNode : public rclcpp::Node double th_stopped_velocity_mps_; bool is_parking_completed_; }; - -#endif // SCENARIO_SELECTOR__SCENARIO_SELECTOR_NODE_HPP_ +} // namespace autoware::scenario_selector +#endif // AUTOWARE_SCENARIO_SELECTOR__NODE_HPP_ diff --git a/planning/scenario_selector/launch/dummy_scenario_selector_lane_driving.launch.xml b/planning/autoware_scenario_selector/launch/dummy_scenario_selector_lane_driving.launch.xml similarity index 100% rename from planning/scenario_selector/launch/dummy_scenario_selector_lane_driving.launch.xml rename to planning/autoware_scenario_selector/launch/dummy_scenario_selector_lane_driving.launch.xml diff --git a/planning/scenario_selector/launch/dummy_scenario_selector_parking.launch.xml b/planning/autoware_scenario_selector/launch/dummy_scenario_selector_parking.launch.xml similarity index 100% rename from planning/scenario_selector/launch/dummy_scenario_selector_parking.launch.xml rename to planning/autoware_scenario_selector/launch/dummy_scenario_selector_parking.launch.xml diff --git a/planning/scenario_selector/launch/scenario_selector.launch.xml b/planning/autoware_scenario_selector/launch/scenario_selector.launch.xml similarity index 80% rename from planning/scenario_selector/launch/scenario_selector.launch.xml rename to planning/autoware_scenario_selector/launch/scenario_selector.launch.xml index fdf176405d7b0..8c35451ee19dc 100644 --- a/planning/scenario_selector/launch/scenario_selector.launch.xml +++ b/planning/autoware_scenario_selector/launch/scenario_selector.launch.xml @@ -9,9 +9,9 @@ - + - + diff --git a/planning/scenario_selector/package.xml b/planning/autoware_scenario_selector/package.xml similarity index 93% rename from planning/scenario_selector/package.xml rename to planning/autoware_scenario_selector/package.xml index f910c09dbb070..ee58eac35c8ae 100644 --- a/planning/scenario_selector/package.xml +++ b/planning/autoware_scenario_selector/package.xml @@ -1,9 +1,9 @@ - scenario_selector + autoware_scenario_selector 0.1.0 - The scenario_selector ROS 2 package + The autoware_scenario_selector ROS 2 package Taiki Tanaka Tomoya Kimura Shumpei Wakabayashi diff --git a/planning/scenario_selector/schema/scenario_selector.schema.json b/planning/autoware_scenario_selector/schema/scenario_selector.schema.json similarity index 94% rename from planning/scenario_selector/schema/scenario_selector.schema.json rename to planning/autoware_scenario_selector/schema/scenario_selector.schema.json index 8ccb75106c6a5..a9e6411084a88 100644 --- a/planning/scenario_selector/schema/scenario_selector.schema.json +++ b/planning/autoware_scenario_selector/schema/scenario_selector.schema.json @@ -3,7 +3,7 @@ "title": "Parameters for Scenario Selector Node", "type": "object", "definitions": { - "scenario_selector": { + "autoware_scenario_selector": { "type": "object", "properties": { "update_rate": { @@ -51,7 +51,7 @@ "type": "object", "properties": { "ros__parameters": { - "$ref": "#/definitions/scenario_selector" + "$ref": "#/definitions/autoware_scenario_selector" } }, "required": ["ros__parameters"] diff --git a/planning/scenario_selector/src/scenario_selector_node/scenario_selector_node.cpp b/planning/autoware_scenario_selector/src/node.cpp similarity index 98% rename from planning/scenario_selector/src/scenario_selector_node/scenario_selector_node.cpp rename to planning/autoware_scenario_selector/src/node.cpp index 2ba56a911bbeb..1f1a22cf08deb 100644 --- a/planning/scenario_selector/src/scenario_selector_node/scenario_selector_node.cpp +++ b/planning/autoware_scenario_selector/src/node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "scenario_selector/scenario_selector_node.hpp" +#include "autoware_scenario_selector/node.hpp" #include #include @@ -28,7 +28,8 @@ #include #include #include - +namespace autoware::scenario_selector +{ namespace { template @@ -373,6 +374,7 @@ ScenarioSelectorNode::ScenarioSelectorNode(const rclcpp::NodeOptions & node_opti this, get_clock(), period_ns, std::bind(&ScenarioSelectorNode::onTimer, this)); published_time_publisher_ = std::make_unique(this); } +} // namespace autoware::scenario_selector #include -RCLCPP_COMPONENTS_REGISTER_NODE(ScenarioSelectorNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::scenario_selector::ScenarioSelectorNode) diff --git a/planning/scenario_selector/test/test_scenario_selector_node_interface.cpp b/planning/autoware_scenario_selector/test/test_autoware_scenario_selector_node_interface.cpp similarity index 97% rename from planning/scenario_selector/test/test_scenario_selector_node_interface.cpp rename to planning/autoware_scenario_selector/test/test_autoware_scenario_selector_node_interface.cpp index 90995e4e2ae72..052c455c477a7 100644 --- a/planning/scenario_selector/test/test_scenario_selector_node_interface.cpp +++ b/planning/autoware_scenario_selector/test/test_autoware_scenario_selector_node_interface.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "scenario_selector/scenario_selector_node.hpp" +#include "autoware_scenario_selector/node.hpp" #include #include @@ -22,7 +22,8 @@ #include #include - +namespace autoware::scenario_selector +{ using planning_test_utils::PlanningInterfaceTestManager; std::shared_ptr generateTestManager() @@ -121,3 +122,4 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) ASSERT_NO_THROW(test_manager->testTrajectoryWithInvalidEgoPose(test_target_node)); rclcpp::shutdown(); } +} // namespace autoware::scenario_selector From 038a8c47d12428d03fc9b2d7548a68f75636f029 Mon Sep 17 00:00:00 2001 From: Yukinari Hisaki <42021302+yhisaki@users.noreply.github.com> Date: Mon, 10 Jun 2024 14:07:54 +0900 Subject: [PATCH 053/142] =?UTF-8?q?refactor(external=5Fcmd=5Fselector):=20?= =?UTF-8?q?prefix=20package=20and=20namespace=20with=20au=E2=80=A6=20(#738?= =?UTF-8?q?4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor(external_cmd_selector): prefix package and namespace with autoware_ Signed-off-by: Y.Hisaki --- .github/CODEOWNERS | 2 +- .../CMakeLists.txt | 19 +++++++++++++++++++ .../README.md | 4 ++-- .../config/external_cmd_selector.param.yaml | 0 .../external_cmd_selector_node.hpp | 11 ++++++----- .../launch/external_cmd_selector.launch.py | 4 ++-- .../launch/external_cmd_selector.launch.xml | 2 +- .../package.xml | 4 ++-- .../external_cmd_selector_node.cpp | 7 +++++-- control/external_cmd_selector/CMakeLists.txt | 19 ------------------- .../launch/control.launch.py | 5 ++++- launch/tier4_control_launch/package.xml | 2 +- launch/tier4_planning_launch/package.xml | 2 +- 13 files changed, 44 insertions(+), 37 deletions(-) create mode 100644 control/autoware_external_cmd_selector/CMakeLists.txt rename control/{external_cmd_selector => autoware_external_cmd_selector}/README.md (91%) rename control/{external_cmd_selector => autoware_external_cmd_selector}/config/external_cmd_selector.param.yaml (100%) rename control/{external_cmd_selector/include/external_cmd_selector => autoware_external_cmd_selector/include/autoware_external_cmd_selector}/external_cmd_selector_node.hpp (93%) rename control/{external_cmd_selector => autoware_external_cmd_selector}/launch/external_cmd_selector.launch.py (97%) rename control/{external_cmd_selector => autoware_external_cmd_selector}/launch/external_cmd_selector.launch.xml (95%) rename control/{external_cmd_selector => autoware_external_cmd_selector}/package.xml (92%) rename control/{external_cmd_selector/src/external_cmd_selector => autoware_external_cmd_selector/src/autoware_external_cmd_selector}/external_cmd_selector_node.cpp (96%) delete mode 100644 control/external_cmd_selector/CMakeLists.txt diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 863d9565571ab..46a5aac18a689 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -47,7 +47,7 @@ common/tvm_utility/** ambroise.vincent@arm.com xinyu.wang@tier4.jp control/autoware_autonomous_emergency_braking/** daniel.sanchez@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp control/control_performance_analysis/** berkay@leodrive.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/control_validator/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp -control/external_cmd_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp +control/autoware_external_cmd_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/autoware_joy_controller/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/autoware_lane_departure_checker/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp control/mpc_lateral_controller/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp diff --git a/control/autoware_external_cmd_selector/CMakeLists.txt b/control/autoware_external_cmd_selector/CMakeLists.txt new file mode 100644 index 0000000000000..4dccabcd85d8e --- /dev/null +++ b/control/autoware_external_cmd_selector/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 3.14) +project(autoware_external_cmd_selector) + +find_package(autoware_cmake REQUIRED) +autoware_package() + +ament_auto_add_library(${PROJECT_NAME}_node SHARED + src/autoware_external_cmd_selector/external_cmd_selector_node.cpp +) + +rclcpp_components_register_node(${PROJECT_NAME}_node + PLUGIN "autoware::external_cmd_selector::ExternalCmdSelector" + EXECUTABLE autoware_external_cmd_selector +) + +ament_auto_package(INSTALL_TO_SHARE + launch + config +) diff --git a/control/external_cmd_selector/README.md b/control/autoware_external_cmd_selector/README.md similarity index 91% rename from control/external_cmd_selector/README.md rename to control/autoware_external_cmd_selector/README.md index ca0f4f0954dbf..0495004b68b84 100644 --- a/control/external_cmd_selector/README.md +++ b/control/autoware_external_cmd_selector/README.md @@ -1,8 +1,8 @@ -# external_cmd_selector +# autoware_external_cmd_selector ## Purpose -`external_cmd_selector` is the package to publish `external_control_cmd`, `gear_cmd`, `hazard_lights_cmd`, `heartbeat` and `turn_indicators_cmd`, according to the current mode, which is `remote` or `local`. +`autoware_external_cmd_selector` is the package to publish `external_control_cmd`, `gear_cmd`, `hazard_lights_cmd`, `heartbeat` and `turn_indicators_cmd`, according to the current mode, which is `remote` or `local`. The current mode is set via service, `remote` is remotely operated, `local` is to use the values calculated by Autoware. diff --git a/control/external_cmd_selector/config/external_cmd_selector.param.yaml b/control/autoware_external_cmd_selector/config/external_cmd_selector.param.yaml similarity index 100% rename from control/external_cmd_selector/config/external_cmd_selector.param.yaml rename to control/autoware_external_cmd_selector/config/external_cmd_selector.param.yaml diff --git a/control/external_cmd_selector/include/external_cmd_selector/external_cmd_selector_node.hpp b/control/autoware_external_cmd_selector/include/autoware_external_cmd_selector/external_cmd_selector_node.hpp similarity index 93% rename from control/external_cmd_selector/include/external_cmd_selector/external_cmd_selector_node.hpp rename to control/autoware_external_cmd_selector/include/autoware_external_cmd_selector/external_cmd_selector_node.hpp index 6a4fb897b57bc..1517ca83ad1f0 100644 --- a/control/external_cmd_selector/include/external_cmd_selector/external_cmd_selector_node.hpp +++ b/control/autoware_external_cmd_selector/include/autoware_external_cmd_selector/external_cmd_selector_node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef EXTERNAL_CMD_SELECTOR__EXTERNAL_CMD_SELECTOR_NODE_HPP_ -#define EXTERNAL_CMD_SELECTOR__EXTERNAL_CMD_SELECTOR_NODE_HPP_ +#ifndef AUTOWARE_EXTERNAL_CMD_SELECTOR__EXTERNAL_CMD_SELECTOR_NODE_HPP_ +#define AUTOWARE_EXTERNAL_CMD_SELECTOR__EXTERNAL_CMD_SELECTOR_NODE_HPP_ #include #include @@ -30,7 +30,8 @@ #include #include - +namespace autoware::external_cmd_selector +{ class ExternalCmdSelector : public rclcpp::Node { public: @@ -101,5 +102,5 @@ class ExternalCmdSelector : public rclcpp::Node // Diagnostics Updater diagnostic_updater::Updater updater_{this}; }; - -#endif // EXTERNAL_CMD_SELECTOR__EXTERNAL_CMD_SELECTOR_NODE_HPP_ +} // namespace autoware::external_cmd_selector +#endif // AUTOWARE_EXTERNAL_CMD_SELECTOR__EXTERNAL_CMD_SELECTOR_NODE_HPP_ diff --git a/control/external_cmd_selector/launch/external_cmd_selector.launch.py b/control/autoware_external_cmd_selector/launch/external_cmd_selector.launch.py similarity index 97% rename from control/external_cmd_selector/launch/external_cmd_selector.launch.py rename to control/autoware_external_cmd_selector/launch/external_cmd_selector.launch.py index 358cc135996f7..95673502e2b51 100644 --- a/control/external_cmd_selector/launch/external_cmd_selector.launch.py +++ b/control/autoware_external_cmd_selector/launch/external_cmd_selector.launch.py @@ -32,8 +32,8 @@ def launch_setup(context, *args, **kwargs): external_cmd_selector_param = yaml.safe_load(f)["/**"]["ros__parameters"] component = ComposableNode( - package="external_cmd_selector", - plugin="ExternalCmdSelector", + package="autoware_external_cmd_selector", + plugin="autoware::external_cmd_selector::ExternalCmdSelector", name="external_cmd_selector", remappings=[ _create_mapping_tuple("service/select_external_command"), diff --git a/control/external_cmd_selector/launch/external_cmd_selector.launch.xml b/control/autoware_external_cmd_selector/launch/external_cmd_selector.launch.xml similarity index 95% rename from control/external_cmd_selector/launch/external_cmd_selector.launch.xml rename to control/autoware_external_cmd_selector/launch/external_cmd_selector.launch.xml index cb373802e5183..7e8b32ac68d8d 100644 --- a/control/external_cmd_selector/launch/external_cmd_selector.launch.xml +++ b/control/autoware_external_cmd_selector/launch/external_cmd_selector.launch.xml @@ -26,7 +26,7 @@ - + diff --git a/control/external_cmd_selector/package.xml b/control/autoware_external_cmd_selector/package.xml similarity index 92% rename from control/external_cmd_selector/package.xml rename to control/autoware_external_cmd_selector/package.xml index b3520839e3b51..19881f06c96e5 100644 --- a/control/external_cmd_selector/package.xml +++ b/control/autoware_external_cmd_selector/package.xml @@ -1,9 +1,9 @@ - external_cmd_selector + autoware_external_cmd_selector 0.1.0 - The external_cmd_selector package + The autoware_external_cmd_selector package Taiki Tanaka Tomoya Kimura Shumpei Wakabayashi diff --git a/control/external_cmd_selector/src/external_cmd_selector/external_cmd_selector_node.cpp b/control/autoware_external_cmd_selector/src/autoware_external_cmd_selector/external_cmd_selector_node.cpp similarity index 96% rename from control/external_cmd_selector/src/external_cmd_selector/external_cmd_selector_node.cpp rename to control/autoware_external_cmd_selector/src/autoware_external_cmd_selector/external_cmd_selector_node.cpp index 0039ec9cd1547..59a8caa5c1568 100644 --- a/control/external_cmd_selector/src/external_cmd_selector/external_cmd_selector_node.cpp +++ b/control/autoware_external_cmd_selector/src/autoware_external_cmd_selector/external_cmd_selector_node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "external_cmd_selector/external_cmd_selector_node.hpp" +#include "autoware_external_cmd_selector/external_cmd_selector_node.hpp" #include @@ -21,6 +21,8 @@ #include #include +namespace autoware::external_cmd_selector +{ ExternalCmdSelector::ExternalCmdSelector(const rclcpp::NodeOptions & node_options) : Node("external_cmd_selector", node_options) { @@ -202,6 +204,7 @@ ExternalCmdSelector::InternalHeartbeat ExternalCmdSelector::convert( { return command; } +} // namespace autoware::external_cmd_selector #include -RCLCPP_COMPONENTS_REGISTER_NODE(ExternalCmdSelector) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::external_cmd_selector::ExternalCmdSelector) diff --git a/control/external_cmd_selector/CMakeLists.txt b/control/external_cmd_selector/CMakeLists.txt deleted file mode 100644 index 5c4860b7441f3..0000000000000 --- a/control/external_cmd_selector/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(external_cmd_selector) - -find_package(autoware_cmake REQUIRED) -autoware_package() - -ament_auto_add_library(external_cmd_selector_node SHARED - src/external_cmd_selector/external_cmd_selector_node.cpp -) - -rclcpp_components_register_node(external_cmd_selector_node - PLUGIN "ExternalCmdSelector" - EXECUTABLE external_cmd_selector -) - -ament_auto_package(INSTALL_TO_SHARE - launch - config -) diff --git a/launch/tier4_control_launch/launch/control.launch.py b/launch/tier4_control_launch/launch/control.launch.py index dea0bc1d7c442..1183514e9a3cb 100644 --- a/launch/tier4_control_launch/launch/control.launch.py +++ b/launch/tier4_control_launch/launch/control.launch.py @@ -272,7 +272,10 @@ def launch_setup(context, *args, **kwargs): # external cmd selector external_cmd_selector_loader = IncludeLaunchDescription( PythonLaunchDescriptionSource( - [FindPackageShare("external_cmd_selector"), "/launch/external_cmd_selector.launch.py"] + [ + FindPackageShare("autoware_external_cmd_selector"), + "/launch/external_cmd_selector.launch.py", + ] ), launch_arguments=[ ("use_intra_process", LaunchConfiguration("use_intra_process")), diff --git a/launch/tier4_control_launch/package.xml b/launch/tier4_control_launch/package.xml index cfa1a07d4ea45..f02ec0aee47b6 100644 --- a/launch/tier4_control_launch/package.xml +++ b/launch/tier4_control_launch/package.xml @@ -11,11 +11,11 @@ ament_cmake_auto autoware_cmake + autoware_external_cmd_selector autoware_lane_departure_checker autoware_vehicle_cmd_gate control_evaluator external_cmd_converter - external_cmd_selector shift_decider trajectory_follower_node diff --git a/launch/tier4_planning_launch/package.xml b/launch/tier4_planning_launch/package.xml index 798ee7675acaa..cc2d2903005cb 100644 --- a/launch/tier4_planning_launch/package.xml +++ b/launch/tier4_planning_launch/package.xml @@ -59,6 +59,7 @@ autoware_behavior_velocity_planner autoware_costmap_generator + autoware_external_cmd_selector autoware_external_velocity_limit_selector autoware_path_optimizer autoware_planning_topic_converter @@ -68,7 +69,6 @@ autoware_surround_obstacle_checker autoware_velocity_smoother behavior_path_planner - external_cmd_selector freespace_planner glog_component mission_planner From d2a8b16ebe27a50adccf52d9ae378d0261c03f72 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Mon, 10 Jun 2024 14:11:02 +0900 Subject: [PATCH 054/142] refactor(map_based_prediction): prefix map based prediction (#7391) Signed-off-by: Mamoru Sobue --- .../prediction/prediction.launch.xml | 2 +- .../CMakeLists.txt | 4 +-- .../README.md | 0 .../config/map_based_prediction.param.yaml | 0 .../images/exception.svg | 0 .../images/inside_road.svg | 0 .../images/outside_road.svg | 0 .../images/target_objects.svg | 0 .../map_based_prediction_node.hpp | 4 +-- .../map_based_prediction/path_generator.hpp | 4 +-- .../launch/map_based_prediction.launch.xml | 4 +-- .../media/lane_change_detection.drawio.svg | 0 .../lanechange_detection_right_to_left.png | Bin .../map_based_prediction_flow.drawio.svg | 0 .../media/object_history.drawio.svg | 0 .../package.xml | 2 +- .../schema/map_based_prediction.schema.json | 0 .../src/debug.cpp | 4 +-- .../src/map_based_prediction_node.cpp | 6 ++-- .../src/path_generator.cpp | 4 +-- .../test_path_generator.cpp | 34 ++++++++++-------- .../test/test_map_based_prediction.cpp | 0 22 files changed, 37 insertions(+), 31 deletions(-) rename perception/{map_based_prediction => autoware_map_based_prediction}/CMakeLists.txt (90%) rename perception/{map_based_prediction => autoware_map_based_prediction}/README.md (100%) rename perception/{map_based_prediction => autoware_map_based_prediction}/config/map_based_prediction.param.yaml (100%) rename perception/{map_based_prediction => autoware_map_based_prediction}/images/exception.svg (100%) rename perception/{map_based_prediction => autoware_map_based_prediction}/images/inside_road.svg (100%) rename perception/{map_based_prediction => autoware_map_based_prediction}/images/outside_road.svg (100%) rename perception/{map_based_prediction => autoware_map_based_prediction}/images/target_objects.svg (100%) rename perception/{map_based_prediction => autoware_map_based_prediction}/include/map_based_prediction/map_based_prediction_node.hpp (99%) rename perception/{map_based_prediction => autoware_map_based_prediction}/include/map_based_prediction/path_generator.hpp (98%) rename perception/{map_based_prediction => autoware_map_based_prediction}/launch/map_based_prediction.launch.xml (72%) rename perception/{map_based_prediction => autoware_map_based_prediction}/media/lane_change_detection.drawio.svg (100%) rename perception/{map_based_prediction => autoware_map_based_prediction}/media/lanechange_detection_right_to_left.png (100%) rename perception/{map_based_prediction => autoware_map_based_prediction}/media/map_based_prediction_flow.drawio.svg (100%) rename perception/{map_based_prediction => autoware_map_based_prediction}/media/object_history.drawio.svg (100%) rename perception/{map_based_prediction => autoware_map_based_prediction}/package.xml (96%) rename perception/{map_based_prediction => autoware_map_based_prediction}/schema/map_based_prediction.schema.json (100%) rename perception/{map_based_prediction => autoware_map_based_prediction}/src/debug.cpp (94%) rename perception/{map_based_prediction => autoware_map_based_prediction}/src/map_based_prediction_node.cpp (99%) rename perception/{map_based_prediction => autoware_map_based_prediction}/src/path_generator.cpp (99%) rename perception/{map_based_prediction => autoware_map_based_prediction}/test/map_based_prediction/test_path_generator.cpp (84%) rename perception/{map_based_prediction => autoware_map_based_prediction}/test/test_map_based_prediction.cpp (100%) diff --git a/launch/tier4_perception_launch/launch/object_recognition/prediction/prediction.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/prediction/prediction.launch.xml index fa343f49840ad..a9ba980b3ce47 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/prediction/prediction.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/prediction/prediction.launch.xml @@ -5,7 +5,7 @@ - + diff --git a/perception/map_based_prediction/CMakeLists.txt b/perception/autoware_map_based_prediction/CMakeLists.txt similarity index 90% rename from perception/map_based_prediction/CMakeLists.txt rename to perception/autoware_map_based_prediction/CMakeLists.txt index 786446457143f..9a1d9a1947c7c 100644 --- a/perception/map_based_prediction/CMakeLists.txt +++ b/perception/autoware_map_based_prediction/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(map_based_prediction) +project(autoware_map_based_prediction) find_package(autoware_cmake REQUIRED) autoware_package() @@ -22,7 +22,7 @@ ament_auto_add_library(map_based_prediction_node SHARED target_link_libraries(map_based_prediction_node glog::glog) rclcpp_components_register_node(map_based_prediction_node - PLUGIN "map_based_prediction::MapBasedPredictionNode" + PLUGIN "autoware::map_based_prediction::MapBasedPredictionNode" EXECUTABLE map_based_prediction ) diff --git a/perception/map_based_prediction/README.md b/perception/autoware_map_based_prediction/README.md similarity index 100% rename from perception/map_based_prediction/README.md rename to perception/autoware_map_based_prediction/README.md diff --git a/perception/map_based_prediction/config/map_based_prediction.param.yaml b/perception/autoware_map_based_prediction/config/map_based_prediction.param.yaml similarity index 100% rename from perception/map_based_prediction/config/map_based_prediction.param.yaml rename to perception/autoware_map_based_prediction/config/map_based_prediction.param.yaml diff --git a/perception/map_based_prediction/images/exception.svg b/perception/autoware_map_based_prediction/images/exception.svg similarity index 100% rename from perception/map_based_prediction/images/exception.svg rename to perception/autoware_map_based_prediction/images/exception.svg diff --git a/perception/map_based_prediction/images/inside_road.svg b/perception/autoware_map_based_prediction/images/inside_road.svg similarity index 100% rename from perception/map_based_prediction/images/inside_road.svg rename to perception/autoware_map_based_prediction/images/inside_road.svg diff --git a/perception/map_based_prediction/images/outside_road.svg b/perception/autoware_map_based_prediction/images/outside_road.svg similarity index 100% rename from perception/map_based_prediction/images/outside_road.svg rename to perception/autoware_map_based_prediction/images/outside_road.svg diff --git a/perception/map_based_prediction/images/target_objects.svg b/perception/autoware_map_based_prediction/images/target_objects.svg similarity index 100% rename from perception/map_based_prediction/images/target_objects.svg rename to perception/autoware_map_based_prediction/images/target_objects.svg diff --git a/perception/map_based_prediction/include/map_based_prediction/map_based_prediction_node.hpp b/perception/autoware_map_based_prediction/include/map_based_prediction/map_based_prediction_node.hpp similarity index 99% rename from perception/map_based_prediction/include/map_based_prediction/map_based_prediction_node.hpp rename to perception/autoware_map_based_prediction/include/map_based_prediction/map_based_prediction_node.hpp index 7a0010637c2f4..22b28b00d645e 100644 --- a/perception/map_based_prediction/include/map_based_prediction/map_based_prediction_node.hpp +++ b/perception/autoware_map_based_prediction/include/map_based_prediction/map_based_prediction_node.hpp @@ -51,7 +51,7 @@ #include #include -namespace map_based_prediction +namespace autoware::map_based_prediction { struct LateralKinematicsToLanelet { @@ -416,6 +416,6 @@ class MapBasedPredictionNode : public rclcpp::Node return true; }; }; -} // namespace map_based_prediction +} // namespace autoware::map_based_prediction #endif // MAP_BASED_PREDICTION__MAP_BASED_PREDICTION_NODE_HPP_ diff --git a/perception/map_based_prediction/include/map_based_prediction/path_generator.hpp b/perception/autoware_map_based_prediction/include/map_based_prediction/path_generator.hpp similarity index 98% rename from perception/map_based_prediction/include/map_based_prediction/path_generator.hpp rename to perception/autoware_map_based_prediction/include/map_based_prediction/path_generator.hpp index 0c1642600f4b1..bd098894f8a88 100644 --- a/perception/map_based_prediction/include/map_based_prediction/path_generator.hpp +++ b/perception/autoware_map_based_prediction/include/map_based_prediction/path_generator.hpp @@ -28,7 +28,7 @@ #include #include -namespace map_based_prediction +namespace autoware::map_based_prediction { using autoware_perception_msgs::msg::ObjectClassification; using autoware_perception_msgs::msg::PredictedObject; @@ -145,6 +145,6 @@ class PathGenerator const TrackedObject & object, const PosePath & ref_path, const double duration, const double speed_limit = 0.0) const; }; -} // namespace map_based_prediction +} // namespace autoware::map_based_prediction #endif // MAP_BASED_PREDICTION__PATH_GENERATOR_HPP_ diff --git a/perception/map_based_prediction/launch/map_based_prediction.launch.xml b/perception/autoware_map_based_prediction/launch/map_based_prediction.launch.xml similarity index 72% rename from perception/map_based_prediction/launch/map_based_prediction.launch.xml rename to perception/autoware_map_based_prediction/launch/map_based_prediction.launch.xml index 7f81971b2f8d7..b65f0de892dcc 100644 --- a/perception/map_based_prediction/launch/map_based_prediction.launch.xml +++ b/perception/autoware_map_based_prediction/launch/map_based_prediction.launch.xml @@ -1,13 +1,13 @@ - + - + diff --git a/perception/map_based_prediction/media/lane_change_detection.drawio.svg b/perception/autoware_map_based_prediction/media/lane_change_detection.drawio.svg similarity index 100% rename from perception/map_based_prediction/media/lane_change_detection.drawio.svg rename to perception/autoware_map_based_prediction/media/lane_change_detection.drawio.svg diff --git a/perception/map_based_prediction/media/lanechange_detection_right_to_left.png b/perception/autoware_map_based_prediction/media/lanechange_detection_right_to_left.png similarity index 100% rename from perception/map_based_prediction/media/lanechange_detection_right_to_left.png rename to perception/autoware_map_based_prediction/media/lanechange_detection_right_to_left.png diff --git a/perception/map_based_prediction/media/map_based_prediction_flow.drawio.svg b/perception/autoware_map_based_prediction/media/map_based_prediction_flow.drawio.svg similarity index 100% rename from perception/map_based_prediction/media/map_based_prediction_flow.drawio.svg rename to perception/autoware_map_based_prediction/media/map_based_prediction_flow.drawio.svg diff --git a/perception/map_based_prediction/media/object_history.drawio.svg b/perception/autoware_map_based_prediction/media/object_history.drawio.svg similarity index 100% rename from perception/map_based_prediction/media/object_history.drawio.svg rename to perception/autoware_map_based_prediction/media/object_history.drawio.svg diff --git a/perception/map_based_prediction/package.xml b/perception/autoware_map_based_prediction/package.xml similarity index 96% rename from perception/map_based_prediction/package.xml rename to perception/autoware_map_based_prediction/package.xml index 70ad1ec8519d9..3671c1a01b0a2 100644 --- a/perception/map_based_prediction/package.xml +++ b/perception/autoware_map_based_prediction/package.xml @@ -1,7 +1,7 @@ - map_based_prediction + autoware_map_based_prediction 0.1.0 This package implements a map_based_prediction Tomoya Kimura diff --git a/perception/map_based_prediction/schema/map_based_prediction.schema.json b/perception/autoware_map_based_prediction/schema/map_based_prediction.schema.json similarity index 100% rename from perception/map_based_prediction/schema/map_based_prediction.schema.json rename to perception/autoware_map_based_prediction/schema/map_based_prediction.schema.json diff --git a/perception/map_based_prediction/src/debug.cpp b/perception/autoware_map_based_prediction/src/debug.cpp similarity index 94% rename from perception/map_based_prediction/src/debug.cpp rename to perception/autoware_map_based_prediction/src/debug.cpp index f78879ba209a1..0c58d4aae1638 100644 --- a/perception/map_based_prediction/src/debug.cpp +++ b/perception/autoware_map_based_prediction/src/debug.cpp @@ -15,7 +15,7 @@ #include "map_based_prediction/map_based_prediction_node.hpp" #include "tier4_autoware_utils/ros/marker_helper.hpp" -namespace map_based_prediction +namespace autoware::map_based_prediction { visualization_msgs::msg::Marker MapBasedPredictionNode::getDebugMarker( const TrackedObject & object, const Maneuver & maneuver, const size_t obj_num) @@ -46,4 +46,4 @@ visualization_msgs::msg::Marker MapBasedPredictionNode::getDebugMarker( return marker; } -} // namespace map_based_prediction +} // namespace autoware::map_based_prediction diff --git a/perception/map_based_prediction/src/map_based_prediction_node.cpp b/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp similarity index 99% rename from perception/map_based_prediction/src/map_based_prediction_node.cpp rename to perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp index a00a43545cf23..c23e78d243f9c 100644 --- a/perception/map_based_prediction/src/map_based_prediction_node.cpp +++ b/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp @@ -50,7 +50,7 @@ #include #include -namespace map_based_prediction +namespace autoware::map_based_prediction { namespace @@ -2495,7 +2495,7 @@ bool MapBasedPredictionNode::calcIntentionToCrossWithTrafficSignal( return true; } -} // namespace map_based_prediction +} // namespace autoware::map_based_prediction #include -RCLCPP_COMPONENTS_REGISTER_NODE(map_based_prediction::MapBasedPredictionNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::map_based_prediction::MapBasedPredictionNode) diff --git a/perception/map_based_prediction/src/path_generator.cpp b/perception/autoware_map_based_prediction/src/path_generator.cpp similarity index 99% rename from perception/map_based_prediction/src/path_generator.cpp rename to perception/autoware_map_based_prediction/src/path_generator.cpp index 52e104f572f76..873219ffcf130 100644 --- a/perception/map_based_prediction/src/path_generator.cpp +++ b/perception/autoware_map_based_prediction/src/path_generator.cpp @@ -20,7 +20,7 @@ #include -namespace map_based_prediction +namespace autoware::map_based_prediction { PathGenerator::PathGenerator( const double sampling_time_interval, const double min_crosswalk_user_velocity) @@ -487,4 +487,4 @@ FrenetPoint PathGenerator::getFrenetPoint( return frenet_point; } -} // namespace map_based_prediction +} // namespace autoware::map_based_prediction diff --git a/perception/map_based_prediction/test/map_based_prediction/test_path_generator.cpp b/perception/autoware_map_based_prediction/test/map_based_prediction/test_path_generator.cpp similarity index 84% rename from perception/map_based_prediction/test/map_based_prediction/test_path_generator.cpp rename to perception/autoware_map_based_prediction/test/map_based_prediction/test_path_generator.cpp index 518b28a555849..08e5b4977e583 100644 --- a/perception/map_based_prediction/test/map_based_prediction/test_path_generator.cpp +++ b/perception/autoware_map_based_prediction/test/map_based_prediction/test_path_generator.cpp @@ -54,8 +54,9 @@ TEST(PathGenerator, test_generatePathForNonVehicleObject) const double prediction_time_horizon = 10.0; const double prediction_sampling_time_interval = 0.5; const double min_crosswalk_user_velocity = 0.1; - const map_based_prediction::PathGenerator path_generator = map_based_prediction::PathGenerator( - prediction_sampling_time_interval, min_crosswalk_user_velocity); + const autoware::map_based_prediction::PathGenerator path_generator = + autoware::map_based_prediction::PathGenerator( + prediction_sampling_time_interval, min_crosswalk_user_velocity); // Generate pedestrian object TrackedObject tracked_object = generate_static_object(ObjectClassification::PEDESTRIAN); @@ -77,8 +78,9 @@ TEST(PathGenerator, test_generatePathForLowSpeedVehicle) const double prediction_time_horizon = 10.0; const double prediction_sampling_time_interval = 0.5; const double min_crosswalk_user_velocity = 0.1; - const map_based_prediction::PathGenerator path_generator = map_based_prediction::PathGenerator( - prediction_sampling_time_interval, min_crosswalk_user_velocity); + const autoware::map_based_prediction::PathGenerator path_generator = + autoware::map_based_prediction::PathGenerator( + prediction_sampling_time_interval, min_crosswalk_user_velocity); // Generate dummy object TrackedObject tracked_object = generate_static_object(ObjectClassification::CAR); @@ -100,8 +102,9 @@ TEST(PathGenerator, test_generatePathForOffLaneVehicle) const double prediction_time_horizon = 10.0; const double prediction_sampling_time_interval = 0.5; const double min_crosswalk_user_velocity = 0.1; - const map_based_prediction::PathGenerator path_generator = map_based_prediction::PathGenerator( - prediction_sampling_time_interval, min_crosswalk_user_velocity); + const autoware::map_based_prediction::PathGenerator path_generator = + autoware::map_based_prediction::PathGenerator( + prediction_sampling_time_interval, min_crosswalk_user_velocity); // Generate dummy object TrackedObject tracked_object = generate_static_object(ObjectClassification::CAR); @@ -123,14 +126,15 @@ TEST(PathGenerator, test_generatePathForOnLaneVehicle) const double lateral_control_time_horizon = 5.0; const double prediction_sampling_time_interval = 0.5; const double min_crosswalk_user_velocity = 0.1; - const map_based_prediction::PathGenerator path_generator = map_based_prediction::PathGenerator( - prediction_sampling_time_interval, min_crosswalk_user_velocity); + const autoware::map_based_prediction::PathGenerator path_generator = + autoware::map_based_prediction::PathGenerator( + prediction_sampling_time_interval, min_crosswalk_user_velocity); // Generate dummy object TrackedObject tracked_object = generate_static_object(ObjectClassification::CAR); // Generate reference path - map_based_prediction::PosePath ref_paths; + autoware::map_based_prediction::PosePath ref_paths; geometry_msgs::msg::Pose pose; pose.position.x = 0.0; pose.position.y = 0.0; @@ -154,14 +158,15 @@ TEST(PathGenerator, test_generatePathForCrosswalkUser) const double prediction_time_horizon = 10.0; const double prediction_sampling_time_interval = 0.5; const double min_crosswalk_user_velocity = 0.1; - const map_based_prediction::PathGenerator path_generator = map_based_prediction::PathGenerator( - prediction_sampling_time_interval, min_crosswalk_user_velocity); + const autoware::map_based_prediction::PathGenerator path_generator = + autoware::map_based_prediction::PathGenerator( + prediction_sampling_time_interval, min_crosswalk_user_velocity); // Generate dummy object TrackedObject tracked_object = generate_static_object(ObjectClassification::PEDESTRIAN); // Generate dummy crosswalk - map_based_prediction::CrosswalkEdgePoints reachable_crosswalk; + autoware::map_based_prediction::CrosswalkEdgePoints reachable_crosswalk; reachable_crosswalk.front_center_point << 0.0, 0.0; reachable_crosswalk.front_right_point << 1.0, 0.0; reachable_crosswalk.front_left_point << -1.0, 0.0; @@ -185,8 +190,9 @@ TEST(PathGenerator, test_generatePathToTargetPoint) // Generate Path generator const double prediction_sampling_time_interval = 0.5; const double min_crosswalk_user_velocity = 0.1; - const map_based_prediction::PathGenerator path_generator = map_based_prediction::PathGenerator( - prediction_sampling_time_interval, min_crosswalk_user_velocity); + const autoware::map_based_prediction::PathGenerator path_generator = + autoware::map_based_prediction::PathGenerator( + prediction_sampling_time_interval, min_crosswalk_user_velocity); // Generate dummy object TrackedObject tracked_object = generate_static_object(ObjectClassification::CAR); diff --git a/perception/map_based_prediction/test/test_map_based_prediction.cpp b/perception/autoware_map_based_prediction/test/test_map_based_prediction.cpp similarity index 100% rename from perception/map_based_prediction/test/test_map_based_prediction.cpp rename to perception/autoware_map_based_prediction/test/test_map_based_prediction.cpp From 9a357a4f440a28ed4664a3535866ced743743ae8 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Mon, 10 Jun 2024 14:45:34 +0900 Subject: [PATCH 055/142] fix(occlusion_spot_module): fix dependencies, docs, codeowners (#7393) Signed-off-by: Maxime CLEMENT --- .github/CODEOWNERS | 2 +- planning/.pages | 2 +- planning/autoware_behavior_velocity_planner/README.md | 2 +- planning/autoware_behavior_velocity_planner/package.xml | 2 +- .../test/src/test_node_interface.cpp | 2 +- planning/autoware_behavior_velocity_run_out_module/README.md | 2 +- planning/behavior_velocity_occlusion_spot_module/plugins.xml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 46a5aac18a689..9c64b64645c6f 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -178,7 +178,7 @@ planning/behavior_velocity_dynamic_obstacle_stop_module/** mamoru.sobue@tier4.jp planning/behavior_velocity_intersection_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_no_drivable_lane_module/** ahmed.ebrahim@leodrive.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_no_stopping_area_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp -planning/behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_planner_common/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_speed_bump_module/** mdogru@leodrive.ai shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp diff --git a/planning/.pages b/planning/.pages index 03b7ec910f2a1..ce08c389c17f5 100644 --- a/planning/.pages +++ b/planning/.pages @@ -28,7 +28,7 @@ nav: - 'Intersection': planning/autoware_behavior_velocity_intersection_module - 'No Drivable Lane': planning/behavior_velocity_no_drivable_lane_module - 'No Stopping Area': planning/behavior_velocity_no_stopping_area_module - - 'Occlusion Spot': planning/behavior_velocity_occlusion_spot_module + - 'Occlusion Spot': planning/autoware_behavior_velocity_occlusion_spot_module - 'Run Out': planning/autoware_behavior_velocity_run_out_module - 'Speed Bump': planning/behavior_velocity_speed_bump_module - 'Stop Line': planning/autoware_behavior_velocity_stop_line_module diff --git a/planning/autoware_behavior_velocity_planner/README.md b/planning/autoware_behavior_velocity_planner/README.md index 400768dd978d9..e792860239119 100644 --- a/planning/autoware_behavior_velocity_planner/README.md +++ b/planning/autoware_behavior_velocity_planner/README.md @@ -16,7 +16,7 @@ It loads modules as plugins. Please refer to the links listed below for detail o - [Stop Line](../autoware_behavior_velocity_stop_line_module/README.md) - [Virtual Traffic Light](../autoware_behavior_velocity_virtual_traffic_light_module/README.md) - [Traffic Light](../behavior_velocity_traffic_light_module/README.md) -- [Occlusion Spot](../behavior_velocity_occlusion_spot_module/README.md) +- [Occlusion Spot](../autoware_behavior_velocity_occlusion_spot_module/README.md) - [No Stopping Area](../behavior_velocity_no_stopping_area_module/README.md) - [Run Out](../autoware_behavior_velocity_run_out_module/README.md) - [Speed Bump](../behavior_velocity_speed_bump_module/README.md) diff --git a/planning/autoware_behavior_velocity_planner/package.xml b/planning/autoware_behavior_velocity_planner/package.xml index 4dcaf22306c22..dcec42f80691f 100644 --- a/planning/autoware_behavior_velocity_planner/package.xml +++ b/planning/autoware_behavior_velocity_planner/package.xml @@ -66,6 +66,7 @@ ament_cmake_ros ament_lint_auto autoware_behavior_velocity_intersection_module + autoware_behavior_velocity_occlusion_spot_module autoware_behavior_velocity_run_out_module autoware_behavior_velocity_stop_line_module autoware_behavior_velocity_virtual_traffic_light_module @@ -76,7 +77,6 @@ behavior_velocity_detection_area_module behavior_velocity_no_drivable_lane_module behavior_velocity_no_stopping_area_module - behavior_velocity_occlusion_spot_module behavior_velocity_speed_bump_module behavior_velocity_traffic_light_module diff --git a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp index a10ad86e4fb00..58e7a86e01302 100644 --- a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp +++ b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp @@ -101,7 +101,7 @@ std::shared_ptr generateNode() get_behavior_velocity_module_config_no_prefix("detection_area"), get_behavior_velocity_module_config("intersection"), get_behavior_velocity_module_config_no_prefix("no_stopping_area"), - get_behavior_velocity_module_config_no_prefix("occlusion_spot"), + get_behavior_velocity_module_config("occlusion_spot"), get_behavior_velocity_module_config("run_out"), get_behavior_velocity_module_config_no_prefix("speed_bump"), get_behavior_velocity_module_config("stop_line"), diff --git a/planning/autoware_behavior_velocity_run_out_module/README.md b/planning/autoware_behavior_velocity_run_out_module/README.md index d3e2d813c3799..acc1260723f2f 100644 --- a/planning/autoware_behavior_velocity_run_out_module/README.md +++ b/planning/autoware_behavior_velocity_run_out_module/README.md @@ -182,7 +182,7 @@ APPROACH --> APPROACH : Approach duration is less than threshold ##### Limit velocity with specified jerk and acc limit The maximum slowdown velocity is calculated in order not to slowdown too much. -See the [Occlusion Spot document](../behavior_velocity_occlusion_spot_module/#maximum-slowdown-velocity) for more details. +See the [Occlusion Spot document](../autoware_behavior_velocity_occlusion_spot_module/#maximum-slowdown-velocity) for more details. You can choose whether to use this feature by parameter of `slow_down_limit.enable`. ### Module Parameters diff --git a/planning/behavior_velocity_occlusion_spot_module/plugins.xml b/planning/behavior_velocity_occlusion_spot_module/plugins.xml index 2d85752cf2b3d..53a2c460c2e44 100644 --- a/planning/behavior_velocity_occlusion_spot_module/plugins.xml +++ b/planning/behavior_velocity_occlusion_spot_module/plugins.xml @@ -1,3 +1,3 @@ - + From 087e02d74e361fb1622ec9c2c297d3ecc205d88e Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Mon, 10 Jun 2024 14:52:09 +0900 Subject: [PATCH 056/142] chore(tier4_perception_launch): rename autoware_map_based_prediction_depend (#7395) Signed-off-by: Mamoru Sobue --- launch/tier4_perception_launch/package.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index 2d007ae8c5ff0..c74ef297aba6b 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -12,6 +12,7 @@ ament_cmake_auto autoware_cmake + autoware_map_based_prediction cluster_merger compare_map_segmentation crosswalk_traffic_light_estimator @@ -23,7 +24,6 @@ image_projection_based_fusion image_transport_decompressor lidar_apollo_instance_segmentation - map_based_prediction multi_object_tracker object_merger object_range_splitter From 2334f63cf099075d741702aabbf4a3e15641f541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Fatih=20C=C4=B1r=C4=B1t?= Date: Mon, 10 Jun 2024 09:28:02 +0300 Subject: [PATCH 057/142] ci(clang-tidy-differential): fix tag requirement (#7396) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: M. Fatih Cırıt --- .github/workflows/clang-tidy-differential.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/clang-tidy-differential.yaml b/.github/workflows/clang-tidy-differential.yaml index f7ec81e3394e5..26c5314d4b119 100644 --- a/.github/workflows/clang-tidy-differential.yaml +++ b/.github/workflows/clang-tidy-differential.yaml @@ -14,6 +14,8 @@ jobs: label: tag:run-clang-tidy-differential clang-tidy-differential: + needs: prevent-no-label-execution + if: ${{ needs.prevent-no-label-execution.outputs.run == 'true' }} runs-on: ubuntu-latest container: ghcr.io/autowarefoundation/autoware:latest-prebuilt-cuda steps: From 3b90dc0b6159354d2529139fb4b09d3f24befeda Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Mon, 10 Jun 2024 16:00:14 +0900 Subject: [PATCH 058/142] refactor(ndt scan matcher): apply static analysis (#7278) * to snake_case Signed-off-by: Yamato Ando * fix line length Signed-off-by: Yamato Ando * add nodiscard Signed-off-by: Yamato Ando * to non member func Signed-off-by: Yamato Ando * initilize param Signed-off-by: Yamato Ando * add header Signed-off-by: Yamato Ando * add const Signed-off-by: Yamato Ando * style(pre-commit): autofix --------- Signed-off-by: Yamato Ando Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: SakodaShintaro --- .../ndt_scan_matcher/diagnostics_module.hpp | 16 +- .../ndt_scan_matcher/hyper_parameters.hpp | 64 ++++---- .../ndt_scan_matcher_core.hpp | 2 - .../src/diagnostics_module.cpp | 16 +- .../src/map_update_module.cpp | 42 ++--- .../src/ndt_scan_matcher_core.cpp | 150 +++++++++--------- .../ndt_scan_matcher/test/test_util.hpp | 5 + 7 files changed, 150 insertions(+), 145 deletions(-) diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp index 4f7b5eff6521b..6dfea386abaf8 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp @@ -27,14 +27,14 @@ class DiagnosticsModule public: DiagnosticsModule(rclcpp::Node * node, const std::string & diagnostic_name); void clear(); - void addKeyValue(const diagnostic_msgs::msg::KeyValue & key_value_msg); + void add_key_value(const diagnostic_msgs::msg::KeyValue & key_value_msg); template - void addKeyValue(const std::string & key, const T & value); - void updateLevelAndMessage(const int8_t level, const std::string & message); + void add_key_value(const std::string & key, const T & value); + void update_level_and_message(const int8_t level, const std::string & message); void publish(const rclcpp::Time & publish_time_stamp); private: - diagnostic_msgs::msg::DiagnosticArray createDiagnosticsArray( + [[nodiscard]] diagnostic_msgs::msg::DiagnosticArray create_diagnostics_array( const rclcpp::Time & publish_time_stamp) const; rclcpp::Clock::SharedPtr clock_; @@ -44,17 +44,17 @@ class DiagnosticsModule }; template -void DiagnosticsModule::addKeyValue(const std::string & key, const T & value) +void DiagnosticsModule::add_key_value(const std::string & key, const T & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; key_value.value = std::to_string(value); - addKeyValue(key_value); + add_key_value(key_value); } template <> -void DiagnosticsModule::addKeyValue(const std::string & key, const std::string & value); +void DiagnosticsModule::add_key_value(const std::string & key, const std::string & value); template <> -void DiagnosticsModule::addKeyValue(const std::string & key, const bool & value); +void DiagnosticsModule::add_key_value(const std::string & key, const bool & value); #endif // NDT_SCAN_MATCHER__DIAGNOSTICS_MODULE_HPP_ diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp index bc7bf1fe40d36..7002b4bf43a73 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp @@ -33,62 +33,62 @@ struct HyperParameters { struct Frame { - std::string base_frame; - std::string ndt_base_frame; - std::string map_frame; - } frame; + std::string base_frame{}; + std::string ndt_base_frame{}; + std::string map_frame{}; + } frame{}; struct SensorPoints { - double required_distance; - } sensor_points; + double required_distance{}; + } sensor_points{}; - pclomp::NdtParams ndt; - bool ndt_regularization_enable; + pclomp::NdtParams ndt{}; + bool ndt_regularization_enable{}; struct InitialPoseEstimation { - int64_t particles_num; - int64_t n_startup_trials; - } initial_pose_estimation; + int64_t particles_num{}; + int64_t n_startup_trials{}; + } initial_pose_estimation{}; struct Validation { - double lidar_topic_timeout_sec; - double initial_pose_timeout_sec; - double initial_pose_distance_tolerance_m; - double critical_upper_bound_exe_time_ms; - } validation; + double lidar_topic_timeout_sec{}; + double initial_pose_timeout_sec{}; + double initial_pose_distance_tolerance_m{}; + double critical_upper_bound_exe_time_ms{}; + } validation{}; struct ScoreEstimation { - ConvergedParamType converged_param_type; - double converged_param_transform_probability; - double converged_param_nearest_voxel_transformation_likelihood; + ConvergedParamType converged_param_type{}; + double converged_param_transform_probability{}; + double converged_param_nearest_voxel_transformation_likelihood{}; struct NoGroundPoints { - bool enable; - double z_margin_for_ground_removal; - } no_ground_points; - } score_estimation; + bool enable{}; + double z_margin_for_ground_removal{}; + } no_ground_points{}; + } score_estimation{}; struct Covariance { - std::array output_pose_covariance; + std::array output_pose_covariance{}; struct CovarianceEstimation { - bool enable; - std::vector initial_pose_offset_model; - } covariance_estimation; - } covariance; + bool enable{}; + std::vector initial_pose_offset_model{}; + } covariance_estimation{}; + } covariance{}; struct DynamicMapLoading { - double update_distance; - double map_radius; - double lidar_radius; - } dynamic_map_loading; + double update_distance{}; + double map_radius{}; + double lidar_radius{}; + } dynamic_map_loading{}; public: explicit HyperParameters(rclcpp::Node * node) diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp index 4f8042d106c75..cbd2797c57922 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp @@ -131,8 +131,6 @@ class NDTScanMatcher : public rclcpp::Node static int count_oscillation(const std::vector & result_pose_msg_array); - std::array rotate_covariance( - const std::array & src_covariance, const Eigen::Matrix3d & rotation) const; std::array estimate_covariance( const pclomp::NdtResult & ndt_result, const Eigen::Matrix4f & initial_pose_matrix, const rclcpp::Time & sensor_ros_time); diff --git a/localization/ndt_scan_matcher/src/diagnostics_module.cpp b/localization/ndt_scan_matcher/src/diagnostics_module.cpp index 1e08ebb89f51e..805ee676c5e04 100644 --- a/localization/ndt_scan_matcher/src/diagnostics_module.cpp +++ b/localization/ndt_scan_matcher/src/diagnostics_module.cpp @@ -41,7 +41,7 @@ void DiagnosticsModule::clear() diagnostics_status_msg_.message = ""; } -void DiagnosticsModule::addKeyValue(const diagnostic_msgs::msg::KeyValue & key_value_msg) +void DiagnosticsModule::add_key_value(const diagnostic_msgs::msg::KeyValue & key_value_msg) { auto it = std::find_if( std::begin(diagnostics_status_msg_.values), std::end(diagnostics_status_msg_.values), @@ -55,24 +55,24 @@ void DiagnosticsModule::addKeyValue(const diagnostic_msgs::msg::KeyValue & key_v } template <> -void DiagnosticsModule::addKeyValue(const std::string & key, const std::string & value) +void DiagnosticsModule::add_key_value(const std::string & key, const std::string & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; key_value.value = value; - addKeyValue(key_value); + add_key_value(key_value); } template <> -void DiagnosticsModule::addKeyValue(const std::string & key, const bool & value) +void DiagnosticsModule::add_key_value(const std::string & key, const bool & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; key_value.value = value ? "True" : "False"; - addKeyValue(key_value); + add_key_value(key_value); } -void DiagnosticsModule::updateLevelAndMessage(const int8_t level, const std::string & message) +void DiagnosticsModule::update_level_and_message(const int8_t level, const std::string & message) { if ((level > diagnostic_msgs::msg::DiagnosticStatus::OK)) { if (!diagnostics_status_msg_.message.empty()) { @@ -87,10 +87,10 @@ void DiagnosticsModule::updateLevelAndMessage(const int8_t level, const std::str void DiagnosticsModule::publish(const rclcpp::Time & publish_time_stamp) { - diagnostics_pub_->publish(createDiagnosticsArray(publish_time_stamp)); + diagnostics_pub_->publish(create_diagnostics_array(publish_time_stamp)); } -diagnostic_msgs::msg::DiagnosticArray DiagnosticsModule::createDiagnosticsArray( +diagnostic_msgs::msg::DiagnosticArray DiagnosticsModule::create_diagnostics_array( const rclcpp::Time & publish_time_stamp) const { diagnostic_msgs::msg::DiagnosticArray diagnostics_msg; diff --git a/localization/ndt_scan_matcher/src/map_update_module.cpp b/localization/ndt_scan_matcher/src/map_update_module.cpp index 40f0b1f4465fa..32e5a0f2a7c3c 100644 --- a/localization/ndt_scan_matcher/src/map_update_module.cpp +++ b/localization/ndt_scan_matcher/src/map_update_module.cpp @@ -53,23 +53,23 @@ void MapUpdateModule::callback_timer( std::unique_ptr & diagnostics_ptr) { // check is_activated - diagnostics_ptr->addKeyValue("is_activated", is_activated); + diagnostics_ptr->add_key_value("is_activated", is_activated); if (!is_activated) { std::stringstream message; message << "Node is not activated."; - diagnostics_ptr->updateLevelAndMessage( + diagnostics_ptr->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return; } // check is_set_last_update_position const bool is_set_last_update_position = (position != std::nullopt); - diagnostics_ptr->addKeyValue("is_set_last_update_position", is_set_last_update_position); + diagnostics_ptr->add_key_value("is_set_last_update_position", is_set_last_update_position); if (!is_set_last_update_position) { std::stringstream message; message << "Cannot find the reference position for map update." << "Please check if the EKF odometry is provided to NDT."; - diagnostics_ptr->updateLevelAndMessage( + diagnostics_ptr->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return; } @@ -92,11 +92,11 @@ bool MapUpdateModule::should_update_map( const double distance = std::hypot(dx, dy); // check distance_last_update_position_to_current_position - diagnostics_ptr->addKeyValue("distance_last_update_position_to_current_position", distance); + diagnostics_ptr->add_key_value("distance_last_update_position_to_current_position", distance); if (distance + param_.lidar_radius > param_.map_radius) { std::stringstream message; message << "Dynamic map loading is not keeping up."; - diagnostics_ptr->updateLevelAndMessage( + diagnostics_ptr->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); // If the map does not keep up with the current position, @@ -110,7 +110,7 @@ bool MapUpdateModule::should_update_map( void MapUpdateModule::update_map( const geometry_msgs::msg::Point & position, std::unique_ptr & diagnostics_ptr) { - diagnostics_ptr->addKeyValue("is_need_rebuild", need_rebuild_); + diagnostics_ptr->add_key_value("is_need_rebuild", need_rebuild_); // If the current position is super far from the previous loading position, // lock and rebuild ndt_ptr_ @@ -130,14 +130,14 @@ void MapUpdateModule::update_map( const bool updated = update_ndt(position, *ndt_ptr_, diagnostics_ptr); // check is_updated_map - diagnostics_ptr->addKeyValue("is_updated_map", updated); + diagnostics_ptr->add_key_value("is_updated_map", updated); if (!updated) { std::stringstream message; message << "update_ndt failed. If this happens with initial position estimation, make sure that" << "(1) the initial position matches the pcd map and (2) the map_loader is working " "properly."; - diagnostics_ptr->updateLevelAndMessage( + diagnostics_ptr->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); RCLCPP_ERROR_STREAM_THROTTLE(logger_, *clock_, 1000, message.str()); last_update_position_ = position; @@ -157,7 +157,7 @@ void MapUpdateModule::update_map( const bool updated = update_ndt(position, *secondary_ndt_ptr_, diagnostics_ptr); // check is_updated_map - diagnostics_ptr->addKeyValue("is_updated_map", updated); + diagnostics_ptr->add_key_value("is_updated_map", updated); if (!updated) { last_update_position_ = position; return; @@ -189,7 +189,7 @@ bool MapUpdateModule::update_ndt( const geometry_msgs::msg::Point & position, NdtType & ndt, std::unique_ptr & diagnostics_ptr) { - diagnostics_ptr->addKeyValue("maps_size_before", ndt.getCurrentMapIDs().size()); + diagnostics_ptr->add_key_value("maps_size_before", ndt.getCurrentMapIDs().size()); auto request = std::make_shared(); @@ -199,11 +199,11 @@ bool MapUpdateModule::update_ndt( request->cached_ids = ndt.getCurrentMapIDs(); while (!pcd_loader_client_->wait_for_service(std::chrono::seconds(1)) && rclcpp::ok()) { - diagnostics_ptr->addKeyValue("is_succeed_call_pcd_loader", false); + diagnostics_ptr->add_key_value("is_succeed_call_pcd_loader", false); std::stringstream message; message << "Waiting for pcd loader service. Check the pointcloud_map_loader."; - diagnostics_ptr->updateLevelAndMessage( + diagnostics_ptr->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -217,23 +217,23 @@ bool MapUpdateModule::update_ndt( while (status != std::future_status::ready) { // check is_succeed_call_pcd_loader if (!rclcpp::ok()) { - diagnostics_ptr->addKeyValue("is_succeed_call_pcd_loader", false); + diagnostics_ptr->add_key_value("is_succeed_call_pcd_loader", false); std::stringstream message; message << "pcd_loader service is not working."; - diagnostics_ptr->updateLevelAndMessage( + diagnostics_ptr->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; // No update } status = result.wait_for(std::chrono::seconds(1)); } - diagnostics_ptr->addKeyValue("is_succeed_call_pcd_loader", true); + diagnostics_ptr->add_key_value("is_succeed_call_pcd_loader", true); auto & maps_to_add = result.get()->new_pointcloud_with_ids; auto & map_ids_to_remove = result.get()->ids_to_remove; - diagnostics_ptr->addKeyValue("maps_to_add_size", maps_to_add.size()); - diagnostics_ptr->addKeyValue("maps_to_remove_size", map_ids_to_remove.size()); + diagnostics_ptr->add_key_value("maps_to_add_size", maps_to_add.size()); + diagnostics_ptr->add_key_value("maps_to_remove_size", map_ids_to_remove.size()); if (maps_to_add.empty() && map_ids_to_remove.empty()) { return false; // No update @@ -261,9 +261,9 @@ bool MapUpdateModule::update_ndt( const auto duration_micro_sec = std::chrono::duration_cast(exe_end_time - exe_start_time).count(); const auto exe_time = static_cast(duration_micro_sec) / 1000.0; - diagnostics_ptr->addKeyValue("map_update_execution_time", exe_time); - diagnostics_ptr->addKeyValue("maps_size_after", ndt.getCurrentMapIDs().size()); - diagnostics_ptr->addKeyValue("is_succeed_call_pcd_loader", true); + diagnostics_ptr->add_key_value("map_update_execution_time", exe_time); + diagnostics_ptr->add_key_value("maps_size_after", ndt.getCurrentMapIDs().size()); + diagnostics_ptr->add_key_value("is_succeed_call_pcd_loader", true); return true; // Updated } diff --git a/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp b/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp index 349f924019c28..c61e243caab31 100644 --- a/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp +++ b/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp @@ -62,6 +62,28 @@ Eigen::Matrix2d find_rotation_matrix_aligning_covariance_to_principal_axes( throw std::runtime_error("Eigen solver failed. Return output_pose_covariance value."); } +std::array rotate_covariance( + const std::array & src_covariance, const Eigen::Matrix3d & rotation) +{ + std::array ret_covariance = src_covariance; + + Eigen::Matrix3d src_cov; + src_cov << src_covariance[0], src_covariance[1], src_covariance[2], src_covariance[6], + src_covariance[7], src_covariance[8], src_covariance[12], src_covariance[13], + src_covariance[14]; + + Eigen::Matrix3d ret_cov; + ret_cov = rotation * src_cov * rotation.transpose(); + + for (Eigen::Index i = 0; i < 3; ++i) { + ret_covariance[i] = ret_cov(0, i); + ret_covariance[i + 6] = ret_cov(1, i); + ret_covariance[i + 12] = ret_cov(2, i); + } + + return ret_covariance; +} + NDTScanMatcher::NDTScanMatcher(const rclcpp::NodeOptions & options) : Node("ndt_scan_matcher", options), tf2_broadcaster_(*this), @@ -197,7 +219,7 @@ void NDTScanMatcher::callback_timer() diagnostics_map_update_->clear(); - diagnostics_map_update_->addKeyValue("timer_callback_time_stamp", ros_time_now.nanoseconds()); + diagnostics_map_update_->add_key_value("timer_callback_time_stamp", ros_time_now.nanoseconds()); map_update_module_->callback_timer(is_activated_, latest_ekf_position_, diagnostics_map_update_); @@ -217,16 +239,16 @@ void NDTScanMatcher::callback_initial_pose( void NDTScanMatcher::callback_initial_pose_main( const geometry_msgs::msg::PoseWithCovarianceStamped::ConstSharedPtr initial_pose_msg_ptr) { - diagnostics_initial_pose_->addKeyValue( + diagnostics_initial_pose_->add_key_value( "topic_time_stamp", static_cast(initial_pose_msg_ptr->header.stamp).nanoseconds()); // check is_activated - diagnostics_initial_pose_->addKeyValue("is_activated", static_cast(is_activated_)); + diagnostics_initial_pose_->add_key_value("is_activated", static_cast(is_activated_)); if (!is_activated_) { std::stringstream message; message << "Node is not activated."; - diagnostics_initial_pose_->updateLevelAndMessage( + diagnostics_initial_pose_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return; } @@ -234,13 +256,13 @@ void NDTScanMatcher::callback_initial_pose_main( // check is_expected_frame_id const bool is_expected_frame_id = (initial_pose_msg_ptr->header.frame_id == param_.frame.map_frame); - diagnostics_initial_pose_->addKeyValue("is_expected_frame_id", is_expected_frame_id); + diagnostics_initial_pose_->add_key_value("is_expected_frame_id", is_expected_frame_id); if (!is_expected_frame_id) { std::stringstream message; message << "Received initial pose message with frame_id " << initial_pose_msg_ptr->header.frame_id << ", but expected " << param_.frame.map_frame << ". Please check the frame_id in the input topic and ensure it is correct."; - diagnostics_initial_pose_->updateLevelAndMessage( + diagnostics_initial_pose_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); return; } @@ -259,7 +281,7 @@ void NDTScanMatcher::callback_regularization_pose( { diagnostics_regularization_pose_->clear(); - diagnostics_regularization_pose_->addKeyValue( + diagnostics_regularization_pose_->add_key_value( "topic_time_stamp", static_cast(pose_conv_msg_ptr->header.stamp).nanoseconds()); regularization_pose_buffer_->push_back(pose_conv_msg_ptr); @@ -282,11 +304,11 @@ void NDTScanMatcher::callback_sensor_points( const size_t error_skipping_publish_num = 5; skipping_publish_num = ((is_succeed_scan_matching || !is_activated_) ? 0 : (skipping_publish_num + 1)); - diagnostics_scan_points_->addKeyValue("skipping_publish_num", skipping_publish_num); + diagnostics_scan_points_->add_key_value("skipping_publish_num", skipping_publish_num); if (skipping_publish_num >= error_skipping_publish_num) { std::stringstream message; message << "skipping_publish_num exceed limit (" << skipping_publish_num << " times)."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } @@ -300,15 +322,15 @@ bool NDTScanMatcher::callback_sensor_points_main( // check topic_time_stamp const rclcpp::Time sensor_ros_time = sensor_points_msg_in_sensor_frame->header.stamp; - diagnostics_scan_points_->addKeyValue("topic_time_stamp", sensor_ros_time.nanoseconds()); + diagnostics_scan_points_->add_key_value("topic_time_stamp", sensor_ros_time.nanoseconds()); // check sensor_points_size const size_t sensor_points_size = sensor_points_msg_in_sensor_frame->width; - diagnostics_scan_points_->addKeyValue("sensor_points_size", sensor_points_size); + diagnostics_scan_points_->add_key_value("sensor_points_size", sensor_points_size); if (sensor_points_size == 0) { std::stringstream message; message << "Sensor points is empty."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -316,14 +338,14 @@ bool NDTScanMatcher::callback_sensor_points_main( // check sensor_points_delay_time_sec const double sensor_points_delay_time_sec = (this->now() - sensor_points_msg_in_sensor_frame->header.stamp).seconds(); - diagnostics_scan_points_->addKeyValue( + diagnostics_scan_points_->add_key_value( "sensor_points_delay_time_sec", sensor_points_delay_time_sec); if (sensor_points_delay_time_sec > param_.validation.lidar_topic_timeout_sec) { std::stringstream message; message << "sensor points is experiencing latency." << "The delay time is " << sensor_points_delay_time_sec << "[sec] " << "(the tolerance is " << param_.validation.lidar_topic_timeout_sec << "[sec])."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); // If the delay time of the LiDAR topic exceeds the delay compensation time of ekf_localizer, @@ -352,13 +374,13 @@ bool NDTScanMatcher::callback_sensor_points_main( std::stringstream message; message << ex.what() << ". Please publish TF " << sensor_frame << " to " << param_.frame.base_frame; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); RCLCPP_ERROR_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); - diagnostics_scan_points_->addKeyValue("is_succeed_transform_sensor_points", false); + diagnostics_scan_points_->add_key_value("is_succeed_transform_sensor_points", false); return false; } - diagnostics_scan_points_->addKeyValue("is_succeed_transform_sensor_points", true); + diagnostics_scan_points_->add_key_value("is_succeed_transform_sensor_points", true); // check sensor_points_max_distance double max_distance = 0.0; @@ -367,12 +389,12 @@ bool NDTScanMatcher::callback_sensor_points_main( max_distance = std::max(max_distance, distance); } - diagnostics_scan_points_->addKeyValue("sensor_points_max_distance", max_distance); + diagnostics_scan_points_->add_key_value("sensor_points_max_distance", max_distance); if (max_distance < param_.sensor_points.required_distance) { std::stringstream message; message << "Max distance of sensor points = " << std::fixed << std::setprecision(3) << max_distance << " [m] < " << param_.sensor_points.required_distance << " [m]"; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -384,11 +406,11 @@ bool NDTScanMatcher::callback_sensor_points_main( ndt_ptr_->setInputSource(sensor_points_in_baselink_frame); // check is_activated - diagnostics_scan_points_->addKeyValue("is_activated", static_cast(is_activated_)); + diagnostics_scan_points_->add_key_value("is_activated", static_cast(is_activated_)); if (!is_activated_) { std::stringstream message; message << "Node is not activated."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -399,12 +421,12 @@ bool NDTScanMatcher::callback_sensor_points_main( // check is_succeed_interpolate_initial_pose const bool is_succeed_interpolate_initial_pose = (interpolation_result_opt != std::nullopt); - diagnostics_scan_points_->addKeyValue( + diagnostics_scan_points_->add_key_value( "is_succeed_interpolate_initial_pose", is_succeed_interpolate_initial_pose); if (!is_succeed_interpolate_initial_pose) { std::stringstream message; message << "Couldn't interpolate pose. Please check the initial pose topic"; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -420,11 +442,11 @@ bool NDTScanMatcher::callback_sensor_points_main( // check is_set_map_points const bool is_set_map_points = (ndt_ptr_->getInputTarget() != nullptr); - diagnostics_scan_points_->addKeyValue("is_set_map_points", is_set_map_points); + diagnostics_scan_points_->add_key_value("is_set_map_points", is_set_map_points); if (!is_set_map_points) { std::stringstream message; message << "Map points is not set."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -444,31 +466,33 @@ bool NDTScanMatcher::callback_sensor_points_main( } // check iteration_num - diagnostics_scan_points_->addKeyValue("iteration_num", ndt_result.iteration_num); + diagnostics_scan_points_->add_key_value("iteration_num", ndt_result.iteration_num); const bool is_ok_iteration_num = (ndt_result.iteration_num < ndt_ptr_->getMaximumIterations()); if (!is_ok_iteration_num) { std::stringstream message; message << "The number of iterations has reached its upper limit. The number of iterations: " << ndt_result.iteration_num << ", Limit: " << ndt_ptr_->getMaximumIterations() << "."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } // check local_optimal_solution_oscillation_num constexpr int oscillation_num_threshold = 10; const int oscillation_num = count_oscillation(transformation_msg_array); - diagnostics_scan_points_->addKeyValue("local_optimal_solution_oscillation_num", oscillation_num); + diagnostics_scan_points_->add_key_value( + "local_optimal_solution_oscillation_num", oscillation_num); const bool is_local_optimal_solution_oscillation = (oscillation_num > oscillation_num_threshold); if (is_local_optimal_solution_oscillation) { std::stringstream message; message << "There is a possibility of oscillation in a local minimum"; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } // check score - diagnostics_scan_points_->addKeyValue("transform_probability", ndt_result.transform_probability); - diagnostics_scan_points_->addKeyValue( + diagnostics_scan_points_->add_key_value( + "transform_probability", ndt_result.transform_probability); + diagnostics_scan_points_->add_key_value( "nearest_voxel_transformation_likelihood", ndt_result.nearest_voxel_transformation_likelihood); double score = 0.0; double score_threshold = 0.0; @@ -484,7 +508,7 @@ bool NDTScanMatcher::callback_sensor_points_main( } else { std::stringstream message; message << "Unknown converged param type. Please check `score_estimation.converged_param_type`"; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); return false; } @@ -526,7 +550,7 @@ bool NDTScanMatcher::callback_sensor_points_main( std::stringstream message; message << "Score is below the threshold. Score: " << score << ", Threshold: " << score_threshold; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); RCLCPP_WARN_STREAM(this->get_logger(), message.str()); } @@ -553,13 +577,13 @@ bool NDTScanMatcher::callback_sensor_points_main( // check distance_initial_to_result const auto distance_initial_to_result = static_cast( norm(interpolation_result.interpolated_pose.pose.pose.position, result_pose_msg.position)); - diagnostics_scan_points_->addKeyValue("distance_initial_to_result", distance_initial_to_result); + diagnostics_scan_points_->add_key_value("distance_initial_to_result", distance_initial_to_result); const double warn_distance_initial_to_result = 3.0; if (distance_initial_to_result > warn_distance_initial_to_result) { std::stringstream message; message << "distance_initial_to_result is too large (" << distance_initial_to_result << " [m])."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } @@ -568,11 +592,11 @@ bool NDTScanMatcher::callback_sensor_points_main( const auto duration_micro_sec = std::chrono::duration_cast(exe_end_time - exe_start_time).count(); const auto exe_time = static_cast(duration_micro_sec) / 1000.0f; - diagnostics_scan_points_->addKeyValue("execution_time", exe_time); + diagnostics_scan_points_->add_key_value("execution_time", exe_time); if (exe_time > param_.validation.critical_upper_bound_exe_time_ms) { std::stringstream message; message << "NDT exe time is too long (took " << exe_time << " [ms])."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } @@ -644,7 +668,7 @@ void NDTScanMatcher::transform_sensor_measurement( geometry_msgs::msg::TransformStamped transform; try { transform = tf2_buffer_.lookupTransform(target_frame, source_frame, tf2::TimePointZero); - } catch (tf2::TransformException & ex) { + } catch (const tf2::TransformException & ex) { throw; } @@ -785,28 +809,6 @@ int NDTScanMatcher::count_oscillation( return max_oscillation_cnt; } -std::array NDTScanMatcher::rotate_covariance( - const std::array & src_covariance, const Eigen::Matrix3d & rotation) const -{ - std::array ret_covariance = src_covariance; - - Eigen::Matrix3d src_cov; - src_cov << src_covariance[0], src_covariance[1], src_covariance[2], src_covariance[6], - src_covariance[7], src_covariance[8], src_covariance[12], src_covariance[13], - src_covariance[14]; - - Eigen::Matrix3d ret_cov; - ret_cov = rotation * src_cov * rotation.transpose(); - - for (Eigen::Index i = 0; i < 3; ++i) { - ret_covariance[i] = ret_cov(0, i); - ret_covariance[i + 6] = ret_cov(1, i); - ret_covariance[i + 12] = ret_cov(2, i); - } - - return ret_covariance; -} - std::array NDTScanMatcher::estimate_covariance( const pclomp::NdtResult & ndt_result, const Eigen::Matrix4f & initial_pose_matrix, const rclcpp::Time & sensor_ros_time) @@ -906,7 +908,7 @@ void NDTScanMatcher::service_trigger_node( const rclcpp::Time ros_time_now = this->now(); diagnostics_trigger_node_->clear(); - diagnostics_trigger_node_->addKeyValue("service_call_time_stamp", ros_time_now.nanoseconds()); + diagnostics_trigger_node_->add_key_value("service_call_time_stamp", ros_time_now.nanoseconds()); is_activated_ = req->data; if (is_activated_) { @@ -914,8 +916,8 @@ void NDTScanMatcher::service_trigger_node( } res->success = true; - diagnostics_trigger_node_->addKeyValue("is_activated", static_cast(is_activated_)); - diagnostics_trigger_node_->addKeyValue("is_succeed_service", res->success); + diagnostics_trigger_node_->add_key_value("is_activated", static_cast(is_activated_)); + diagnostics_trigger_node_->add_key_value("is_succeed_service", res->success); diagnostics_trigger_node_->publish(ros_time_now); } @@ -927,17 +929,17 @@ void NDTScanMatcher::service_ndt_align( diagnostics_ndt_align_->clear(); - diagnostics_ndt_align_->addKeyValue("service_call_time_stamp", ros_time_now.nanoseconds()); + diagnostics_ndt_align_->add_key_value("service_call_time_stamp", ros_time_now.nanoseconds()); service_ndt_align_main(req, res); // check is_succeed_service bool is_succeed_service = res->success; - diagnostics_ndt_align_->addKeyValue("is_succeed_service", is_succeed_service); + diagnostics_ndt_align_->add_key_value("is_succeed_service", is_succeed_service); if (!is_succeed_service) { std::stringstream message; message << "ndt_align_service is failed."; - diagnostics_ndt_align_->updateLevelAndMessage( + diagnostics_ndt_align_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } @@ -960,17 +962,17 @@ void NDTScanMatcher::service_ndt_align_main( // "gnss_link" instead of "map". The ndt_align is designed to return identity when this issue // occurs. However, in the future, converting to a non-existent frame_id should be prohibited. - diagnostics_ndt_align_->addKeyValue("is_succeed_transform_initial_pose", false); + diagnostics_ndt_align_->add_key_value("is_succeed_transform_initial_pose", false); std::stringstream message; message << "Please publish TF " << target_frame.c_str() << " to " << source_frame.c_str(); - diagnostics_ndt_align_->updateLevelAndMessage( + diagnostics_ndt_align_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); RCLCPP_ERROR_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); res->success = false; return; } - diagnostics_ndt_align_->addKeyValue("is_succeed_transform_initial_pose", true); + diagnostics_ndt_align_->add_key_value("is_succeed_transform_initial_pose", true); // transform pose_frame to map_frame const auto initial_pose_msg_in_map_frame = transform(req->pose_with_covariance, transform_s2t); @@ -982,11 +984,11 @@ void NDTScanMatcher::service_ndt_align_main( // check is_set_map_points bool is_set_map_points = (ndt_ptr_->getInputTarget() != nullptr); - diagnostics_ndt_align_->addKeyValue("is_set_map_points", is_set_map_points); + diagnostics_ndt_align_->add_key_value("is_set_map_points", is_set_map_points); if (!is_set_map_points) { std::stringstream message; message << "No InputTarget. Please check the map file and the map_loader service"; - diagnostics_ndt_align_->updateLevelAndMessage( + diagnostics_ndt_align_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); RCLCPP_WARN_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); res->success = false; @@ -995,11 +997,11 @@ void NDTScanMatcher::service_ndt_align_main( // check is_set_sensor_points bool is_set_sensor_points = (ndt_ptr_->getInputSource() != nullptr); - diagnostics_ndt_align_->addKeyValue("is_set_sensor_points", is_set_sensor_points); + diagnostics_ndt_align_->add_key_value("is_set_sensor_points", is_set_sensor_points); if (!is_set_sensor_points) { std::stringstream message; message << "No InputSource. Please check the input lidar topic"; - diagnostics_ndt_align_->updateLevelAndMessage( + diagnostics_ndt_align_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); RCLCPP_WARN_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); res->success = false; @@ -1107,7 +1109,7 @@ geometry_msgs::msg::PoseWithCovarianceStamped NDTScanMatcher::align_pose( result_pose_with_cov_msg.pose.pose = best_particle_ptr->result_pose; output_pose_with_cov_to_log(get_logger(), "align_pose_output", result_pose_with_cov_msg); - diagnostics_ndt_align_->addKeyValue("best_particle_score", best_particle_ptr->score); + diagnostics_ndt_align_->add_key_value("best_particle_score", best_particle_ptr->score); return result_pose_with_cov_msg; } diff --git a/localization/ndt_scan_matcher/test/test_util.hpp b/localization/ndt_scan_matcher/test/test_util.hpp index 2f78827abf891..dbf055d3c95d3 100644 --- a/localization/ndt_scan_matcher/test/test_util.hpp +++ b/localization/ndt_scan_matcher/test/test_util.hpp @@ -15,8 +15,13 @@ #ifndef TEST_UTIL_HPP_ #define TEST_UTIL_HPP_ +#include +#include + +#include #include #include +#include inline pcl::PointCloud make_sample_half_cubic_pcd() { From d227f7c87f2df54a553bbd1570d09ac65e1ec40e Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Mon, 10 Jun 2024 16:00:33 +0900 Subject: [PATCH 059/142] refactor(ekf localizer): apply static analysis (#7324) * rename to snake_case Signed-off-by: Yamato Ando * add nodiscard Signed-off-by: Yamato Ando * initilize variables Signed-off-by: Yamato Ando * fix math.h to cmath Signed-off-by: Yamato Ando * fix data type Signed-off-by: Yamato Ando * remove redundant return statement Signed-off-by: Yamato Ando * add &, remove t_curr Signed-off-by: Yamato Ando * fix string empty Signed-off-by: Yamato Ando * fix data type Signed-off-by: Yamato Ando * remove unused variable Signed-off-by: Yamato Ando * readability-else-after-return Signed-off-by: Yamato Ando * add nolint Signed-off-by: Yamato Ando * rename varibles Signed-off-by: Yamato Ando * fix cast Signed-off-by: Yamato Ando * style(pre-commit): autofix --------- Signed-off-by: Yamato Ando Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: SakodaShintaro --- .../ekf_localizer/aged_object_queue.hpp | 14 +- .../include/ekf_localizer/covariance.hpp | 4 +- .../include/ekf_localizer/diagnostics.hpp | 12 +- .../include/ekf_localizer/ekf_localizer.hpp | 49 +++-- .../include/ekf_localizer/ekf_module.hpp | 48 ++--- .../ekf_localizer/hyper_parameters.hpp | 6 +- .../include/ekf_localizer/mahalanobis.hpp | 2 +- .../include/ekf_localizer/measurement.hpp | 8 +- .../include/ekf_localizer/numeric.hpp | 4 +- .../ekf_localizer/state_transition.hpp | 8 +- .../include/ekf_localizer/string.hpp | 2 +- .../include/ekf_localizer/warning.hpp | 2 +- .../include/ekf_localizer/warning_message.hpp | 11 +- localization/ekf_localizer/src/covariance.cpp | 8 +- .../ekf_localizer/src/diagnostics.cpp | 12 +- .../ekf_localizer/src/ekf_localizer.cpp | 143 ++++++------- localization/ekf_localizer/src/ekf_module.cpp | 190 +++++++++--------- .../ekf_localizer/src/mahalanobis.cpp | 4 +- .../ekf_localizer/src/measurement.cpp | 38 ++-- .../ekf_localizer/src/state_transition.cpp | 58 +++--- .../ekf_localizer/src/warning_message.cpp | 12 +- .../ekf_localizer/test/test_covariance.cpp | 42 ++-- .../ekf_localizer/test/test_diagnostics.cpp | 54 ++--- .../ekf_localizer/test/test_mahalanobis.cpp | 28 +-- .../ekf_localizer/test/test_measurement.cpp | 36 ++-- .../ekf_localizer/test/test_numeric.cpp | 24 +-- .../test/test_state_transition.cpp | 69 +++---- .../ekf_localizer/test/test_string.cpp | 10 +- .../test/test_warning_message.cpp | 24 +-- 29 files changed, 458 insertions(+), 464 deletions(-) diff --git a/localization/ekf_localizer/include/ekf_localizer/aged_object_queue.hpp b/localization/ekf_localizer/include/ekf_localizer/aged_object_queue.hpp index 737c25f8ce024..880ab82418e06 100644 --- a/localization/ekf_localizer/include/ekf_localizer/aged_object_queue.hpp +++ b/localization/ekf_localizer/include/ekf_localizer/aged_object_queue.hpp @@ -22,11 +22,11 @@ template class AgedObjectQueue { public: - explicit AgedObjectQueue(const int max_age) : max_age_(max_age) {} + explicit AgedObjectQueue(const size_t max_age) : max_age_(max_age) {} - bool empty() const { return this->size() == 0; } + [[nodiscard]] bool empty() const { return this->size() == 0; } - size_t size() const { return objects_.size(); } + [[nodiscard]] size_t size() const { return objects_.size(); } Object back() const { return objects_.back(); } @@ -39,7 +39,7 @@ class AgedObjectQueue Object pop_increment_age() { const Object object = objects_.front(); - const int age = ages_.front() + 1; + const size_t age = ages_.front() + 1; objects_.pop(); ages_.pop(); @@ -54,13 +54,13 @@ class AgedObjectQueue void clear() { objects_ = std::queue(); - ages_ = std::queue(); + ages_ = std::queue(); } private: - const int max_age_; + const size_t max_age_; std::queue objects_; - std::queue ages_; + std::queue ages_; }; #endif // EKF_LOCALIZER__AGED_OBJECT_QUEUE_HPP_ diff --git a/localization/ekf_localizer/include/ekf_localizer/covariance.hpp b/localization/ekf_localizer/include/ekf_localizer/covariance.hpp index a4448ecda2f45..713877c1307d2 100644 --- a/localization/ekf_localizer/include/ekf_localizer/covariance.hpp +++ b/localization/ekf_localizer/include/ekf_localizer/covariance.hpp @@ -17,7 +17,7 @@ #include "ekf_localizer/matrix_types.hpp" -std::array ekfCovarianceToPoseMessageCovariance(const Matrix6d & P); -std::array ekfCovarianceToTwistMessageCovariance(const Matrix6d & P); +std::array ekf_covariance_to_pose_message_covariance(const Matrix6d & P); +std::array ekf_covariance_to_twist_message_covariance(const Matrix6d & P); #endif // EKF_LOCALIZER__COVARIANCE_HPP_ diff --git a/localization/ekf_localizer/include/ekf_localizer/diagnostics.hpp b/localization/ekf_localizer/include/ekf_localizer/diagnostics.hpp index f4dc6436f6a40..4c92b2947642b 100644 --- a/localization/ekf_localizer/include/ekf_localizer/diagnostics.hpp +++ b/localization/ekf_localizer/include/ekf_localizer/diagnostics.hpp @@ -20,21 +20,21 @@ #include #include -diagnostic_msgs::msg::DiagnosticStatus checkProcessActivated(const bool is_activated); +diagnostic_msgs::msg::DiagnosticStatus check_process_activated(const bool is_activated); -diagnostic_msgs::msg::DiagnosticStatus checkMeasurementUpdated( +diagnostic_msgs::msg::DiagnosticStatus check_measurement_updated( const std::string & measurement_type, const size_t no_update_count, const size_t no_update_count_threshold_warn, const size_t no_update_count_threshold_error); -diagnostic_msgs::msg::DiagnosticStatus checkMeasurementQueueSize( +diagnostic_msgs::msg::DiagnosticStatus check_measurement_queue_size( const std::string & measurement_type, const size_t queue_size); -diagnostic_msgs::msg::DiagnosticStatus checkMeasurementDelayGate( +diagnostic_msgs::msg::DiagnosticStatus check_measurement_delay_gate( const std::string & measurement_type, const bool is_passed_delay_gate, const double delay_time, const double delay_time_threshold); -diagnostic_msgs::msg::DiagnosticStatus checkMeasurementMahalanobisGate( +diagnostic_msgs::msg::DiagnosticStatus check_measurement_mahalanobis_gate( const std::string & measurement_type, const bool is_passed_mahalanobis_gate, const double mahalanobis_distance, const double mahalanobis_distance_threshold); -diagnostic_msgs::msg::DiagnosticStatus mergeDiagnosticStatus( +diagnostic_msgs::msg::DiagnosticStatus merge_diagnostic_status( const std::vector & stat_array); #endif // EKF_LOCALIZER__DIAGNOSTICS_HPP_ diff --git a/localization/ekf_localizer/include/ekf_localizer/ekf_localizer.hpp b/localization/ekf_localizer/include/ekf_localizer/ekf_localizer.hpp index 8ed925c1bc228..b78e9b1ee0469 100644 --- a/localization/ekf_localizer/include/ekf_localizer/ekf_localizer.hpp +++ b/localization/ekf_localizer/include/ekf_localizer/ekf_localizer.hpp @@ -58,17 +58,15 @@ class Simple1DFilter x_ = 0; dev_ = 1e9; proc_dev_x_c_ = 0.0; - return; }; - void init(const double init_obs, const double obs_dev, const rclcpp::Time time) + void init(const double init_obs, const double obs_dev, const rclcpp::Time & time) { x_ = init_obs; dev_ = obs_dev; latest_time_ = time; initialized_ = true; - return; }; - void update(const double obs, const double obs_dev, const rclcpp::Time time) + void update(const double obs, const double obs_dev, const rclcpp::Time & time) { if (!initialized_) { init(obs, obs_dev, time); @@ -86,10 +84,9 @@ class Simple1DFilter dev_ = (1 - kalman_gain) * dev_; latest_time_ = time; - return; }; void set_proc_dev(const double proc_dev) { proc_dev_x_c_ = proc_dev; } - double get_x() const { return x_; } + [[nodiscard]] double get_x() const { return x_; } private: bool initialized_; @@ -158,10 +155,9 @@ class EKFLocalizer : public rclcpp::Node double ekf_dt_; /* process noise variance for discrete model */ - double proc_cov_yaw_d_; //!< @brief discrete yaw process noise - double proc_cov_yaw_bias_d_; //!< @brief discrete yaw bias process noise - double proc_cov_vx_d_; //!< @brief discrete process noise in d_vx=0 - double proc_cov_wz_d_; //!< @brief discrete process noise in d_wz=0 + double proc_cov_yaw_d_; //!< @brief discrete yaw process noise + double proc_cov_vx_d_; //!< @brief discrete process noise in d_vx=0 + double proc_cov_wz_d_; //!< @brief discrete process noise in d_wz=0 bool is_activated_; @@ -174,44 +170,45 @@ class EKFLocalizer : public rclcpp::Node /** * @brief computes update & prediction of EKF for each ekf_dt_[s] time */ - void timerCallback(); + void timer_callback(); /** * @brief publish tf for tf_rate [Hz] */ - void timerTFCallback(); + void timer_tf_callback(); /** - * @brief set poseWithCovariance measurement + * @brief set pose with covariance measurement */ - void callbackPoseWithCovariance(geometry_msgs::msg::PoseWithCovarianceStamped::SharedPtr msg); + void callback_pose_with_covariance(geometry_msgs::msg::PoseWithCovarianceStamped::SharedPtr msg); /** - * @brief set twistWithCovariance measurement + * @brief set twist with covariance measurement */ - void callbackTwistWithCovariance(geometry_msgs::msg::TwistWithCovarianceStamped::SharedPtr msg); + void callback_twist_with_covariance( + geometry_msgs::msg::TwistWithCovarianceStamped::SharedPtr msg); /** * @brief set initial_pose to current EKF pose */ - void callbackInitialPose(geometry_msgs::msg::PoseWithCovarianceStamped::SharedPtr msg); + void callback_initial_pose(geometry_msgs::msg::PoseWithCovarianceStamped::SharedPtr msg); /** * @brief update predict frequency */ - void updatePredictFrequency(const rclcpp::Time & current_time); + void update_predict_frequency(const rclcpp::Time & current_time); /** * @brief get transform from frame_id */ - bool getTransformFromTF( + bool get_transform_from_tf( std::string parent_frame, std::string child_frame, geometry_msgs::msg::TransformStamped & transform); /** * @brief publish current EKF estimation result */ - void publishEstimateResult( + void publish_estimate_result( const geometry_msgs::msg::PoseStamped & current_ekf_pose, const geometry_msgs::msg::PoseStamped & current_biased_ekf_pose, const geometry_msgs::msg::TwistStamped & current_ekf_twist); @@ -219,23 +216,23 @@ class EKFLocalizer : public rclcpp::Node /** * @brief publish diagnostics message */ - void publishDiagnostics(const rclcpp::Time & current_time); + void publish_diagnostics(const rclcpp::Time & current_time); /** - * @brief update simple1DFilter + * @brief update simple 1d filter */ - void updateSimple1DFilters( + void update_simple_1d_filters( const geometry_msgs::msg::PoseWithCovarianceStamped & pose, const size_t smoothing_step); /** - * @brief initialize simple1DFilter + * @brief initialize simple 1d filter */ - void initSimple1DFilters(const geometry_msgs::msg::PoseWithCovarianceStamped & pose); + void init_simple_1d_filters(const geometry_msgs::msg::PoseWithCovarianceStamped & pose); /** * @brief trigger node */ - void serviceTriggerNode( + void service_trigger_node( const std_srvs::srv::SetBool::Request::SharedPtr req, std_srvs::srv::SetBool::Response::SharedPtr res); diff --git a/localization/ekf_localizer/include/ekf_localizer/ekf_module.hpp b/localization/ekf_localizer/include/ekf_localizer/ekf_module.hpp index e88a59ffdfab9..ee360e798f492 100644 --- a/localization/ekf_localizer/include/ekf_localizer/ekf_module.hpp +++ b/localization/ekf_localizer/include/ekf_localizer/ekf_module.hpp @@ -34,24 +34,13 @@ struct EKFDiagnosticInfo { - EKFDiagnosticInfo() - : no_update_count(0), - queue_size(0), - is_passed_delay_gate(true), - delay_time(0), - delay_time_threshold(0), - is_passed_mahalanobis_gate(true), - mahalanobis_distance(0) - { - } - - size_t no_update_count; - size_t queue_size; - bool is_passed_delay_gate; - double delay_time; - double delay_time_threshold; - bool is_passed_mahalanobis_gate; - double mahalanobis_distance; + size_t no_update_count{0}; + size_t queue_size{0}; + bool is_passed_delay_gate{true}; + double delay_time{0.0}; + double delay_time_threshold{0.0}; + bool is_passed_mahalanobis_gate{true}; + double mahalanobis_distance{0.0}; }; class EKFModule @@ -63,31 +52,32 @@ class EKFModule using Twist = geometry_msgs::msg::TwistStamped; public: - EKFModule(std::shared_ptr warning, const HyperParameters params); + EKFModule(std::shared_ptr warning, const HyperParameters & params); void initialize( const PoseWithCovariance & initial_pose, const geometry_msgs::msg::TransformStamped & transform); - geometry_msgs::msg::PoseStamped getCurrentPose( + [[nodiscard]] geometry_msgs::msg::PoseStamped get_current_pose( const rclcpp::Time & current_time, const double z, const double roll, const double pitch, bool get_biased_yaw) const; - geometry_msgs::msg::TwistStamped getCurrentTwist(const rclcpp::Time & current_time) const; - double getYawBias() const; - std::array getCurrentPoseCovariance() const; - std::array getCurrentTwistCovariance() const; + [[nodiscard]] geometry_msgs::msg::TwistStamped get_current_twist( + const rclcpp::Time & current_time) const; + [[nodiscard]] double get_yaw_bias() const; + [[nodiscard]] std::array get_current_pose_covariance() const; + [[nodiscard]] std::array get_current_twist_covariance() const; - size_t find_closest_delay_time_index(double target_value) const; + [[nodiscard]] size_t find_closest_delay_time_index(double target_value) const; void accumulate_delay_time(const double dt); - void predictWithDelay(const double dt); - bool measurementUpdatePose( + void predict_with_delay(const double dt); + bool measurement_update_pose( const PoseWithCovariance & pose, const rclcpp::Time & t_curr, EKFDiagnosticInfo & pose_diag_info); - bool measurementUpdateTwist( + bool measurement_update_twist( const TwistWithCovariance & twist, const rclcpp::Time & t_curr, EKFDiagnosticInfo & twist_diag_info); - geometry_msgs::msg::PoseWithCovarianceStamped compensatePoseWithZDelay( + geometry_msgs::msg::PoseWithCovarianceStamped compensate_pose_with_z_delay( const PoseWithCovariance & pose, const double delay_time); private: diff --git a/localization/ekf_localizer/include/ekf_localizer/hyper_parameters.hpp b/localization/ekf_localizer/include/ekf_localizer/hyper_parameters.hpp index 56a13d1ecaf55..8d76102e5d64d 100644 --- a/localization/ekf_localizer/include/ekf_localizer/hyper_parameters.hpp +++ b/localization/ekf_localizer/include/ekf_localizer/hyper_parameters.hpp @@ -68,14 +68,14 @@ class HyperParameters const double tf_rate_; const bool publish_tf_; const bool enable_yaw_bias_estimation; - const int extend_state_step; + const size_t extend_state_step; const std::string pose_frame_id; const double pose_additional_delay; const double pose_gate_dist; - const int pose_smoothing_steps; + const size_t pose_smoothing_steps; const double twist_additional_delay; const double twist_gate_dist; - const int twist_smoothing_steps; + const size_t twist_smoothing_steps; const double proc_stddev_vx_c; //!< @brief vx process noise const double proc_stddev_wz_c; //!< @brief wz process noise const double proc_stddev_yaw_c; //!< @brief yaw process noise diff --git a/localization/ekf_localizer/include/ekf_localizer/mahalanobis.hpp b/localization/ekf_localizer/include/ekf_localizer/mahalanobis.hpp index f2b9dc626e67a..1f0d75c5958d4 100644 --- a/localization/ekf_localizer/include/ekf_localizer/mahalanobis.hpp +++ b/localization/ekf_localizer/include/ekf_localizer/mahalanobis.hpp @@ -18,7 +18,7 @@ #include #include -double squaredMahalanobis( +double squared_mahalanobis( const Eigen::VectorXd & x, const Eigen::VectorXd & y, const Eigen::MatrixXd & C); double mahalanobis(const Eigen::VectorXd & x, const Eigen::VectorXd & y, const Eigen::MatrixXd & C); diff --git a/localization/ekf_localizer/include/ekf_localizer/measurement.hpp b/localization/ekf_localizer/include/ekf_localizer/measurement.hpp index 4b2169f1b182f..396aaf7b9a1b4 100644 --- a/localization/ekf_localizer/include/ekf_localizer/measurement.hpp +++ b/localization/ekf_localizer/include/ekf_localizer/measurement.hpp @@ -17,11 +17,11 @@ #include -Eigen::Matrix poseMeasurementMatrix(); -Eigen::Matrix twistMeasurementMatrix(); -Eigen::Matrix3d poseMeasurementCovariance( +Eigen::Matrix pose_measurement_matrix(); +Eigen::Matrix twist_measurement_matrix(); +Eigen::Matrix3d pose_measurement_covariance( const std::array & covariance, const size_t smoothing_step); -Eigen::Matrix2d twistMeasurementCovariance( +Eigen::Matrix2d twist_measurement_covariance( const std::array & covariance, const size_t smoothing_step); #endif // EKF_LOCALIZER__MEASUREMENT_HPP_ diff --git a/localization/ekf_localizer/include/ekf_localizer/numeric.hpp b/localization/ekf_localizer/include/ekf_localizer/numeric.hpp index 6554f80aee014..358a2750bd3a8 100644 --- a/localization/ekf_localizer/include/ekf_localizer/numeric.hpp +++ b/localization/ekf_localizer/include/ekf_localizer/numeric.hpp @@ -19,12 +19,12 @@ #include -inline bool hasInf(const Eigen::MatrixXd & v) +inline bool has_inf(const Eigen::MatrixXd & v) { return v.array().isInf().any(); } -inline bool hasNan(const Eigen::MatrixXd & v) +inline bool has_nan(const Eigen::MatrixXd & v) { return v.array().isNaN().any(); } diff --git a/localization/ekf_localizer/include/ekf_localizer/state_transition.hpp b/localization/ekf_localizer/include/ekf_localizer/state_transition.hpp index 85a65828e4ee4..09a87e5fe154b 100644 --- a/localization/ekf_localizer/include/ekf_localizer/state_transition.hpp +++ b/localization/ekf_localizer/include/ekf_localizer/state_transition.hpp @@ -17,10 +17,10 @@ #include "ekf_localizer/matrix_types.hpp" -double normalizeYaw(const double & yaw); -Vector6d predictNextState(const Vector6d & X_curr, const double dt); -Matrix6d createStateTransitionMatrix(const Vector6d & X_curr, const double dt); -Matrix6d processNoiseCovariance( +double normalize_yaw(const double & yaw); +Vector6d predict_next_state(const Vector6d & X_curr, const double dt); +Matrix6d create_state_transition_matrix(const Vector6d & X_curr, const double dt); +Matrix6d process_noise_covariance( const double proc_cov_yaw_d, const double proc_cov_vx_d, const double proc_cov_wz_d); #endif // EKF_LOCALIZER__STATE_TRANSITION_HPP_ diff --git a/localization/ekf_localizer/include/ekf_localizer/string.hpp b/localization/ekf_localizer/include/ekf_localizer/string.hpp index a4cd1f320367c..0154e84b88004 100644 --- a/localization/ekf_localizer/include/ekf_localizer/string.hpp +++ b/localization/ekf_localizer/include/ekf_localizer/string.hpp @@ -17,7 +17,7 @@ #include -inline std::string eraseLeadingSlash(const std::string & s) +inline std::string erase_leading_slash(const std::string & s) { std::string a = s; if (a.front() == '/') { diff --git a/localization/ekf_localizer/include/ekf_localizer/warning.hpp b/localization/ekf_localizer/include/ekf_localizer/warning.hpp index a3c8800242e2b..e7456d73ecfdd 100644 --- a/localization/ekf_localizer/include/ekf_localizer/warning.hpp +++ b/localization/ekf_localizer/include/ekf_localizer/warning.hpp @@ -29,7 +29,7 @@ class Warning RCLCPP_WARN(node_->get_logger(), "%s", message.c_str()); } - void warnThrottle(const std::string & message, const int duration_milliseconds) const + void warn_throttle(const std::string & message, const int duration_milliseconds) const { RCLCPP_WARN_THROTTLE( node_->get_logger(), *(node_->get_clock()), diff --git a/localization/ekf_localizer/include/ekf_localizer/warning_message.hpp b/localization/ekf_localizer/include/ekf_localizer/warning_message.hpp index e1eafdc6f7948..36c0eabd588fa 100644 --- a/localization/ekf_localizer/include/ekf_localizer/warning_message.hpp +++ b/localization/ekf_localizer/include/ekf_localizer/warning_message.hpp @@ -17,11 +17,12 @@ #include -std::string poseDelayStepWarningMessage(const double delay_time, const double delay_time_threshold); -std::string twistDelayStepWarningMessage( +std::string pose_delay_step_warning_message( const double delay_time, const double delay_time_threshold); -std::string poseDelayTimeWarningMessage(const double delay_time); -std::string twistDelayTimeWarningMessage(const double delay_time); -std::string mahalanobisWarningMessage(const double distance, const double max_distance); +std::string twist_delay_step_warning_message( + const double delay_time, const double delay_time_threshold); +std::string pose_delay_time_warning_message(const double delay_time); +std::string twist_delay_time_warning_message(const double delay_time); +std::string mahalanobis_warning_message(const double distance, const double max_distance); #endif // EKF_LOCALIZER__WARNING_MESSAGE_HPP_ diff --git a/localization/ekf_localizer/src/covariance.cpp b/localization/ekf_localizer/src/covariance.cpp index 0c98ac6857ea5..fc16abf429d93 100644 --- a/localization/ekf_localizer/src/covariance.cpp +++ b/localization/ekf_localizer/src/covariance.cpp @@ -19,9 +19,9 @@ using COV_IDX = tier4_autoware_utils::xyzrpy_covariance_index::XYZRPY_COV_IDX; -std::array ekfCovarianceToPoseMessageCovariance(const Matrix6d & P) +std::array ekf_covariance_to_pose_message_covariance(const Matrix6d & P) { - std::array covariance; + std::array covariance{}; covariance.fill(0.); covariance[COV_IDX::X_X] = P(IDX::X, IDX::X); @@ -37,9 +37,9 @@ std::array ekfCovarianceToPoseMessageCovariance(const Matrix6d & P) return covariance; } -std::array ekfCovarianceToTwistMessageCovariance(const Matrix6d & P) +std::array ekf_covariance_to_twist_message_covariance(const Matrix6d & P) { - std::array covariance; + std::array covariance{}; covariance.fill(0.); covariance[COV_IDX::X_X] = P(IDX::VX, IDX::VX); diff --git a/localization/ekf_localizer/src/diagnostics.cpp b/localization/ekf_localizer/src/diagnostics.cpp index 9ff36561abaa9..ecbeaf8b2445a 100644 --- a/localization/ekf_localizer/src/diagnostics.cpp +++ b/localization/ekf_localizer/src/diagnostics.cpp @@ -19,7 +19,7 @@ #include #include -diagnostic_msgs::msg::DiagnosticStatus checkProcessActivated(const bool is_activated) +diagnostic_msgs::msg::DiagnosticStatus check_process_activated(const bool is_activated) { diagnostic_msgs::msg::DiagnosticStatus stat; @@ -38,7 +38,7 @@ diagnostic_msgs::msg::DiagnosticStatus checkProcessActivated(const bool is_activ return stat; } -diagnostic_msgs::msg::DiagnosticStatus checkMeasurementUpdated( +diagnostic_msgs::msg::DiagnosticStatus check_measurement_updated( const std::string & measurement_type, const size_t no_update_count, const size_t no_update_count_threshold_warn, const size_t no_update_count_threshold_error) { @@ -69,7 +69,7 @@ diagnostic_msgs::msg::DiagnosticStatus checkMeasurementUpdated( return stat; } -diagnostic_msgs::msg::DiagnosticStatus checkMeasurementQueueSize( +diagnostic_msgs::msg::DiagnosticStatus check_measurement_queue_size( const std::string & measurement_type, const size_t queue_size) { diagnostic_msgs::msg::DiagnosticStatus stat; @@ -85,7 +85,7 @@ diagnostic_msgs::msg::DiagnosticStatus checkMeasurementQueueSize( return stat; } -diagnostic_msgs::msg::DiagnosticStatus checkMeasurementDelayGate( +diagnostic_msgs::msg::DiagnosticStatus check_measurement_delay_gate( const std::string & measurement_type, const bool is_passed_delay_gate, const double delay_time, const double delay_time_threshold) { @@ -112,7 +112,7 @@ diagnostic_msgs::msg::DiagnosticStatus checkMeasurementDelayGate( return stat; } -diagnostic_msgs::msg::DiagnosticStatus checkMeasurementMahalanobisGate( +diagnostic_msgs::msg::DiagnosticStatus check_measurement_mahalanobis_gate( const std::string & measurement_type, const bool is_passed_mahalanobis_gate, const double mahalanobis_distance, const double mahalanobis_distance_threshold) { @@ -141,7 +141,7 @@ diagnostic_msgs::msg::DiagnosticStatus checkMeasurementMahalanobisGate( // The highest level within the stat_array will be reflected in the merged_stat. // When all stat_array entries are 'OK,' the message of merged_stat will be "OK" -diagnostic_msgs::msg::DiagnosticStatus mergeDiagnosticStatus( +diagnostic_msgs::msg::DiagnosticStatus merge_diagnostic_status( const std::vector & stat_array) { diagnostic_msgs::msg::DiagnosticStatus merged_stat; diff --git a/localization/ekf_localizer/src/ekf_localizer.cpp b/localization/ekf_localizer/src/ekf_localizer.cpp index 687e812679574..8e7121ec73a12 100644 --- a/localization/ekf_localizer/src/ekf_localizer.cpp +++ b/localization/ekf_localizer/src/ekf_localizer.cpp @@ -34,8 +34,8 @@ #include // clang-format off -#define PRINT_MAT(X) std::cout << #X << ":\n" << X << std::endl << std::endl -#define DEBUG_INFO(...) {if (params_.show_debug_info) {RCLCPP_INFO(__VA_ARGS__);}} +#define PRINT_MAT(X) std::cout << #X << ":\n" << X << std::endl << std::endl // NOLINT +#define DEBUG_INFO(...) {if (params_.show_debug_info) {RCLCPP_INFO(__VA_ARGS__);}} // NOLINT // clang-format on using std::placeholders::_1; @@ -58,12 +58,12 @@ EKFLocalizer::EKFLocalizer(const rclcpp::NodeOptions & node_options) /* initialize ros system */ timer_control_ = rclcpp::create_timer( this, get_clock(), rclcpp::Duration::from_seconds(ekf_dt_), - std::bind(&EKFLocalizer::timerCallback, this)); + std::bind(&EKFLocalizer::timer_callback, this)); if (params_.publish_tf_) { timer_tf_ = rclcpp::create_timer( this, get_clock(), rclcpp::Rate(params_.tf_rate_).period(), - std::bind(&EKFLocalizer::timerTFCallback, this)); + std::bind(&EKFLocalizer::timer_tf_callback, this)); } pub_pose_ = create_publisher("ekf_pose", 1); @@ -79,15 +79,17 @@ EKFLocalizer::EKFLocalizer(const rclcpp::NodeOptions & node_options) "ekf_biased_pose_with_covariance", 1); pub_diag_ = this->create_publisher("/diagnostics", 10); sub_initialpose_ = create_subscription( - "initialpose", 1, std::bind(&EKFLocalizer::callbackInitialPose, this, _1)); + "initialpose", 1, std::bind(&EKFLocalizer::callback_initial_pose, this, _1)); sub_pose_with_cov_ = create_subscription( - "in_pose_with_covariance", 1, std::bind(&EKFLocalizer::callbackPoseWithCovariance, this, _1)); + "in_pose_with_covariance", 1, + std::bind(&EKFLocalizer::callback_pose_with_covariance, this, _1)); sub_twist_with_cov_ = create_subscription( - "in_twist_with_covariance", 1, std::bind(&EKFLocalizer::callbackTwistWithCovariance, this, _1)); + "in_twist_with_covariance", 1, + std::bind(&EKFLocalizer::callback_twist_with_covariance, this, _1)); service_trigger_node_ = create_service( "trigger_node_srv", std::bind( - &EKFLocalizer::serviceTriggerNode, this, std::placeholders::_1, std::placeholders::_2), + &EKFLocalizer::service_trigger_node, this, std::placeholders::_1, std::placeholders::_2), rclcpp::ServicesQoS().get_rmw_qos_profile()); tf_br_ = std::make_shared( @@ -102,9 +104,9 @@ EKFLocalizer::EKFLocalizer(const rclcpp::NodeOptions & node_options) } /* - * updatePredictFrequency + * update_predict_frequency */ -void EKFLocalizer::updatePredictFrequency(const rclcpp::Time & current_time) +void EKFLocalizer::update_predict_frequency(const rclcpp::Time & current_time) { if (last_predict_time_) { if (current_time < *last_predict_time_) { @@ -119,7 +121,7 @@ void EKFLocalizer::updatePredictFrequency(const rclcpp::Time & current_time) ekf_dt_ = 10.0; RCLCPP_WARN( get_logger(), "Large ekf_dt_ detected!! (%f sec) Capped to 10.0 seconds", ekf_dt_); - } else if (ekf_dt_ > params_.pose_smoothing_steps / params_.ekf_rate) { + } else if (ekf_dt_ > static_cast(params_.pose_smoothing_steps) / params_.ekf_rate) { RCLCPP_WARN( get_logger(), "EKF period may be too slow to finish pose smoothing!! (%f sec) ", ekf_dt_); } @@ -137,28 +139,28 @@ void EKFLocalizer::updatePredictFrequency(const rclcpp::Time & current_time) } /* - * timerCallback + * timer_callback */ -void EKFLocalizer::timerCallback() +void EKFLocalizer::timer_callback() { const rclcpp::Time current_time = this->now(); if (!is_activated_) { - warning_->warnThrottle( + warning_->warn_throttle( "The node is not activated. Provide initial pose to pose_initializer", 2000); - publishDiagnostics(current_time); + publish_diagnostics(current_time); return; } DEBUG_INFO(get_logger(), "========================= timer called ========================="); /* update predict frequency with measured timer rate */ - updatePredictFrequency(current_time); + update_predict_frequency(current_time); /* predict model in EKF */ stop_watch_.tic(); DEBUG_INFO(get_logger(), "------------------------- start prediction -------------------------"); - ekf_module_->predictWithDelay(ekf_dt_); + ekf_module_->predict_with_delay(ekf_dt_); DEBUG_INFO(get_logger(), "[EKF] predictKinematicsModel calc time = %f [ms]", stop_watch_.toc()); DEBUG_INFO(get_logger(), "------------------------- end prediction -------------------------\n"); @@ -177,22 +179,22 @@ void EKFLocalizer::timerCallback() stop_watch_.tic(); // save the initial size because the queue size can change in the loop - const auto t_curr = current_time; const size_t n = pose_queue_.size(); for (size_t i = 0; i < n; ++i) { const auto pose = pose_queue_.pop_increment_age(); - bool is_updated = ekf_module_->measurementUpdatePose(*pose, t_curr, pose_diag_info_); + bool is_updated = ekf_module_->measurement_update_pose(*pose, current_time, pose_diag_info_); if (is_updated) { pose_is_updated = true; // Update Simple 1D filter with considering change of z value due to measurement pose delay const double delay_time = - (t_curr - pose->header.stamp).seconds() + params_.pose_additional_delay; - const auto pose_with_z_delay = ekf_module_->compensatePoseWithZDelay(*pose, delay_time); - updateSimple1DFilters(pose_with_z_delay, params_.pose_smoothing_steps); + (current_time - pose->header.stamp).seconds() + params_.pose_additional_delay; + const auto pose_with_z_delay = ekf_module_->compensate_pose_with_z_delay(*pose, delay_time); + update_simple_1d_filters(pose_with_z_delay, params_.pose_smoothing_steps); } } - DEBUG_INFO(get_logger(), "[EKF] measurementUpdatePose calc time = %f [ms]", stop_watch_.toc()); + DEBUG_INFO( + get_logger(), "[EKF] measurement_update_pose calc time = %f [ms]", stop_watch_.toc()); DEBUG_INFO(get_logger(), "------------------------- end Pose -------------------------\n"); } pose_diag_info_.no_update_count = pose_is_updated ? 0 : (pose_diag_info_.no_update_count + 1); @@ -212,16 +214,17 @@ void EKFLocalizer::timerCallback() stop_watch_.tic(); // save the initial size because the queue size can change in the loop - const auto t_curr = current_time; const size_t n = twist_queue_.size(); for (size_t i = 0; i < n; ++i) { const auto twist = twist_queue_.pop_increment_age(); - bool is_updated = ekf_module_->measurementUpdateTwist(*twist, t_curr, twist_diag_info_); + bool is_updated = + ekf_module_->measurement_update_twist(*twist, current_time, twist_diag_info_); if (is_updated) { twist_is_updated = true; } } - DEBUG_INFO(get_logger(), "[EKF] measurementUpdateTwist calc time = %f [ms]", stop_watch_.toc()); + DEBUG_INFO( + get_logger(), "[EKF] measurement_update_twist calc time = %f [ms]", stop_watch_.toc()); DEBUG_INFO(get_logger(), "------------------------- end Twist -------------------------\n"); } twist_diag_info_.no_update_count = twist_is_updated ? 0 : (twist_diag_info_.no_update_count + 1); @@ -230,27 +233,27 @@ void EKFLocalizer::timerCallback() const double roll = roll_filter_.get_x(); const double pitch = pitch_filter_.get_x(); const geometry_msgs::msg::PoseStamped current_ekf_pose = - ekf_module_->getCurrentPose(current_time, z, roll, pitch, false); + ekf_module_->get_current_pose(current_time, z, roll, pitch, false); const geometry_msgs::msg::PoseStamped current_biased_ekf_pose = - ekf_module_->getCurrentPose(current_time, z, roll, pitch, true); + ekf_module_->get_current_pose(current_time, z, roll, pitch, true); const geometry_msgs::msg::TwistStamped current_ekf_twist = - ekf_module_->getCurrentTwist(current_time); + ekf_module_->get_current_twist(current_time); /* publish ekf result */ - publishEstimateResult(current_ekf_pose, current_biased_ekf_pose, current_ekf_twist); - publishDiagnostics(current_time); + publish_estimate_result(current_ekf_pose, current_biased_ekf_pose, current_ekf_twist); + publish_diagnostics(current_time); } /* - * timerTFCallback + * timer_tf_callback */ -void EKFLocalizer::timerTFCallback() +void EKFLocalizer::timer_tf_callback() { if (!is_activated_) { return; } - if (params_.pose_frame_id == "") { + if (params_.pose_frame_id.empty()) { return; } @@ -262,15 +265,15 @@ void EKFLocalizer::timerTFCallback() geometry_msgs::msg::TransformStamped transform_stamped; transform_stamped = tier4_autoware_utils::pose2transform( - ekf_module_->getCurrentPose(current_time, z, roll, pitch, false), "base_link"); + ekf_module_->get_current_pose(current_time, z, roll, pitch, false), "base_link"); transform_stamped.header.stamp = current_time; tf_br_->sendTransform(transform_stamped); } /* - * getTransformFromTF + * get_transform_from_tf */ -bool EKFLocalizer::getTransformFromTF( +bool EKFLocalizer::get_transform_from_tf( std::string parent_frame, std::string child_frame, geometry_msgs::msg::TransformStamped & transform) { @@ -278,8 +281,8 @@ bool EKFLocalizer::getTransformFromTF( tf2_ros::TransformListener tf_listener(tf_buffer); rclcpp::sleep_for(std::chrono::milliseconds(100)); - parent_frame = eraseLeadingSlash(parent_frame); - child_frame = eraseLeadingSlash(child_frame); + parent_frame = erase_leading_slash(parent_frame); + child_frame = erase_leading_slash(child_frame); for (int i = 0; i < 50; ++i) { try { @@ -294,25 +297,25 @@ bool EKFLocalizer::getTransformFromTF( } /* - * callbackInitialPose + * callback_initial_pose */ -void EKFLocalizer::callbackInitialPose( - geometry_msgs::msg::PoseWithCovarianceStamped::SharedPtr initialpose) +void EKFLocalizer::callback_initial_pose( + geometry_msgs::msg::PoseWithCovarianceStamped::SharedPtr msg) { geometry_msgs::msg::TransformStamped transform; - if (!getTransformFromTF(params_.pose_frame_id, initialpose->header.frame_id, transform)) { + if (!get_transform_from_tf(params_.pose_frame_id, msg->header.frame_id, transform)) { RCLCPP_ERROR( get_logger(), "[EKF] TF transform failed. parent = %s, child = %s", - params_.pose_frame_id.c_str(), initialpose->header.frame_id.c_str()); + params_.pose_frame_id.c_str(), msg->header.frame_id.c_str()); } - ekf_module_->initialize(*initialpose, transform); - initSimple1DFilters(*initialpose); + ekf_module_->initialize(*msg, transform); + init_simple_1d_filters(*msg); } /* - * callbackPoseWithCovariance + * callback_pose_with_covariance */ -void EKFLocalizer::callbackPoseWithCovariance( +void EKFLocalizer::callback_pose_with_covariance( geometry_msgs::msg::PoseWithCovarianceStamped::SharedPtr msg) { if (!is_activated_) { @@ -323,9 +326,9 @@ void EKFLocalizer::callbackPoseWithCovariance( } /* - * callbackTwistWithCovariance + * callback_twist_with_covariance */ -void EKFLocalizer::callbackTwistWithCovariance( +void EKFLocalizer::callback_twist_with_covariance( geometry_msgs::msg::TwistWithCovarianceStamped::SharedPtr msg) { // Ignore twist if velocity is too small. @@ -337,9 +340,9 @@ void EKFLocalizer::callbackTwistWithCovariance( } /* - * publishEstimateResult + * publish_estimate_result */ -void EKFLocalizer::publishEstimateResult( +void EKFLocalizer::publish_estimate_result( const geometry_msgs::msg::PoseStamped & current_ekf_pose, const geometry_msgs::msg::PoseStamped & current_biased_ekf_pose, const geometry_msgs::msg::TwistStamped & current_ekf_twist) @@ -353,7 +356,7 @@ void EKFLocalizer::publishEstimateResult( pose_cov.header.stamp = current_ekf_pose.header.stamp; pose_cov.header.frame_id = current_ekf_pose.header.frame_id; pose_cov.pose.pose = current_ekf_pose.pose; - pose_cov.pose.covariance = ekf_module_->getCurrentPoseCovariance(); + pose_cov.pose.covariance = ekf_module_->get_current_pose_covariance(); pub_pose_cov_->publish(pose_cov); geometry_msgs::msg::PoseWithCovarianceStamped biased_pose_cov = pose_cov; @@ -368,13 +371,13 @@ void EKFLocalizer::publishEstimateResult( twist_cov.header.stamp = current_ekf_twist.header.stamp; twist_cov.header.frame_id = current_ekf_twist.header.frame_id; twist_cov.twist.twist = current_ekf_twist.twist; - twist_cov.twist.covariance = ekf_module_->getCurrentTwistCovariance(); + twist_cov.twist.covariance = ekf_module_->get_current_twist_covariance(); pub_twist_cov_->publish(twist_cov); /* publish yaw bias */ tier4_debug_msgs::msg::Float64Stamped yawb; yawb.stamp = current_ekf_twist.header.stamp; - yawb.data = ekf_module_->getYawBias(); + yawb.data = ekf_module_->get_yaw_bias(); pub_yaw_bias_->publish(yawb); /* publish latest odometry */ @@ -387,38 +390,38 @@ void EKFLocalizer::publishEstimateResult( pub_odom_->publish(odometry); } -void EKFLocalizer::publishDiagnostics(const rclcpp::Time & current_time) +void EKFLocalizer::publish_diagnostics(const rclcpp::Time & current_time) { std::vector diag_status_array; - diag_status_array.push_back(checkProcessActivated(is_activated_)); + diag_status_array.push_back(check_process_activated(is_activated_)); if (is_activated_) { - diag_status_array.push_back(checkMeasurementUpdated( + diag_status_array.push_back(check_measurement_updated( "pose", pose_diag_info_.no_update_count, params_.pose_no_update_count_threshold_warn, params_.pose_no_update_count_threshold_error)); - diag_status_array.push_back(checkMeasurementQueueSize("pose", pose_diag_info_.queue_size)); - diag_status_array.push_back(checkMeasurementDelayGate( + diag_status_array.push_back(check_measurement_queue_size("pose", pose_diag_info_.queue_size)); + diag_status_array.push_back(check_measurement_delay_gate( "pose", pose_diag_info_.is_passed_delay_gate, pose_diag_info_.delay_time, pose_diag_info_.delay_time_threshold)); - diag_status_array.push_back(checkMeasurementMahalanobisGate( + diag_status_array.push_back(check_measurement_mahalanobis_gate( "pose", pose_diag_info_.is_passed_mahalanobis_gate, pose_diag_info_.mahalanobis_distance, params_.pose_gate_dist)); - diag_status_array.push_back(checkMeasurementUpdated( + diag_status_array.push_back(check_measurement_updated( "twist", twist_diag_info_.no_update_count, params_.twist_no_update_count_threshold_warn, params_.twist_no_update_count_threshold_error)); - diag_status_array.push_back(checkMeasurementQueueSize("twist", twist_diag_info_.queue_size)); - diag_status_array.push_back(checkMeasurementDelayGate( + diag_status_array.push_back(check_measurement_queue_size("twist", twist_diag_info_.queue_size)); + diag_status_array.push_back(check_measurement_delay_gate( "twist", twist_diag_info_.is_passed_delay_gate, twist_diag_info_.delay_time, twist_diag_info_.delay_time_threshold)); - diag_status_array.push_back(checkMeasurementMahalanobisGate( + diag_status_array.push_back(check_measurement_mahalanobis_gate( "twist", twist_diag_info_.is_passed_mahalanobis_gate, twist_diag_info_.mahalanobis_distance, params_.twist_gate_dist)); } diagnostic_msgs::msg::DiagnosticStatus diag_merged_status; - diag_merged_status = mergeDiagnosticStatus(diag_status_array); + diag_merged_status = merge_diagnostic_status(diag_status_array); diag_merged_status.name = "localization: " + std::string(this->get_name()); diag_merged_status.hardware_id = this->get_name(); @@ -428,7 +431,7 @@ void EKFLocalizer::publishDiagnostics(const rclcpp::Time & current_time) pub_diag_->publish(diag_msg); } -void EKFLocalizer::updateSimple1DFilters( +void EKFLocalizer::update_simple_1d_filters( const geometry_msgs::msg::PoseWithCovarianceStamped & pose, const size_t smoothing_step) { double z = pose.pose.pose.position.z; @@ -446,7 +449,8 @@ void EKFLocalizer::updateSimple1DFilters( pitch_filter_.update(rpy.y, pitch_dev, pose.header.stamp); } -void EKFLocalizer::initSimple1DFilters(const geometry_msgs::msg::PoseWithCovarianceStamped & pose) +void EKFLocalizer::init_simple_1d_filters( + const geometry_msgs::msg::PoseWithCovarianceStamped & pose) { double z = pose.pose.pose.position.z; @@ -465,7 +469,7 @@ void EKFLocalizer::initSimple1DFilters(const geometry_msgs::msg::PoseWithCovaria /** * @brief trigger node */ -void EKFLocalizer::serviceTriggerNode( +void EKFLocalizer::service_trigger_node( const std_srvs::srv::SetBool::Request::SharedPtr req, std_srvs::srv::SetBool::Response::SharedPtr res) { @@ -477,7 +481,6 @@ void EKFLocalizer::serviceTriggerNode( is_activated_ = false; } res->success = true; - return; } #include diff --git a/localization/ekf_localizer/src/ekf_module.cpp b/localization/ekf_localizer/src/ekf_module.cpp index 8977d82f34138..8703d8754eaaf 100644 --- a/localization/ekf_localizer/src/ekf_module.cpp +++ b/localization/ekf_localizer/src/ekf_module.cpp @@ -30,58 +30,56 @@ #include // clang-format off -#define DEBUG_PRINT_MAT(X) {\ - if (params_.show_debug_info) {std::cout << #X << ": " << X << std::endl;}\ -} +#define DEBUG_PRINT_MAT(X) {if (params_.show_debug_info) {std::cout << #X << ": " << X << std::endl;}} // NOLINT // clang-format on -EKFModule::EKFModule(std::shared_ptr warning, const HyperParameters params) +EKFModule::EKFModule(std::shared_ptr warning, const HyperParameters & params) : warning_(std::move(warning)), dim_x_(6), // x, y, yaw, yaw_bias, vx, wz accumulated_delay_times_(params.extend_state_step, 1.0E15), params_(params) { - Eigen::MatrixXd X = Eigen::MatrixXd::Zero(dim_x_, 1); - Eigen::MatrixXd P = Eigen::MatrixXd::Identity(dim_x_, dim_x_) * 1.0E15; // for x & y - P(IDX::YAW, IDX::YAW) = 50.0; // for yaw + Eigen::MatrixXd x = Eigen::MatrixXd::Zero(dim_x_, 1); + Eigen::MatrixXd p = Eigen::MatrixXd::Identity(dim_x_, dim_x_) * 1.0E15; // for x & y + p(IDX::YAW, IDX::YAW) = 50.0; // for yaw if (params_.enable_yaw_bias_estimation) { - P(IDX::YAWB, IDX::YAWB) = 50.0; // for yaw bias + p(IDX::YAWB, IDX::YAWB) = 50.0; // for yaw bias } - P(IDX::VX, IDX::VX) = 1000.0; // for vx - P(IDX::WZ, IDX::WZ) = 50.0; // for wz + p(IDX::VX, IDX::VX) = 1000.0; // for vx + p(IDX::WZ, IDX::WZ) = 50.0; // for wz - kalman_filter_.init(X, P, params_.extend_state_step); + kalman_filter_.init(x, p, static_cast(params_.extend_state_step)); } void EKFModule::initialize( const PoseWithCovariance & initial_pose, const geometry_msgs::msg::TransformStamped & transform) { - Eigen::MatrixXd X(dim_x_, 1); - Eigen::MatrixXd P = Eigen::MatrixXd::Zero(dim_x_, dim_x_); + Eigen::MatrixXd x(dim_x_, 1); + Eigen::MatrixXd p = Eigen::MatrixXd::Zero(dim_x_, dim_x_); - X(IDX::X) = initial_pose.pose.pose.position.x + transform.transform.translation.x; - X(IDX::Y) = initial_pose.pose.pose.position.y + transform.transform.translation.y; - X(IDX::YAW) = + x(IDX::X) = initial_pose.pose.pose.position.x + transform.transform.translation.x; + x(IDX::Y) = initial_pose.pose.pose.position.y + transform.transform.translation.y; + x(IDX::YAW) = tf2::getYaw(initial_pose.pose.pose.orientation) + tf2::getYaw(transform.transform.rotation); - X(IDX::YAWB) = 0.0; - X(IDX::VX) = 0.0; - X(IDX::WZ) = 0.0; + x(IDX::YAWB) = 0.0; + x(IDX::VX) = 0.0; + x(IDX::WZ) = 0.0; using COV_IDX = tier4_autoware_utils::xyzrpy_covariance_index::XYZRPY_COV_IDX; - P(IDX::X, IDX::X) = initial_pose.pose.covariance[COV_IDX::X_X]; - P(IDX::Y, IDX::Y) = initial_pose.pose.covariance[COV_IDX::Y_Y]; - P(IDX::YAW, IDX::YAW) = initial_pose.pose.covariance[COV_IDX::YAW_YAW]; + p(IDX::X, IDX::X) = initial_pose.pose.covariance[COV_IDX::X_X]; + p(IDX::Y, IDX::Y) = initial_pose.pose.covariance[COV_IDX::Y_Y]; + p(IDX::YAW, IDX::YAW) = initial_pose.pose.covariance[COV_IDX::YAW_YAW]; if (params_.enable_yaw_bias_estimation) { - P(IDX::YAWB, IDX::YAWB) = 0.0001; + p(IDX::YAWB, IDX::YAWB) = 0.0001; } - P(IDX::VX, IDX::VX) = 0.01; - P(IDX::WZ, IDX::WZ) = 0.01; + p(IDX::VX, IDX::VX) = 0.01; + p(IDX::WZ, IDX::WZ) = 0.01; - kalman_filter_.init(X, P, params_.extend_state_step); + kalman_filter_.init(x, p, static_cast(params_.extend_state_step)); } -geometry_msgs::msg::PoseStamped EKFModule::getCurrentPose( +geometry_msgs::msg::PoseStamped EKFModule::get_current_pose( const rclcpp::Time & current_time, const double z, const double roll, const double pitch, bool get_biased_yaw) const { @@ -110,7 +108,8 @@ geometry_msgs::msg::PoseStamped EKFModule::getCurrentPose( return current_ekf_pose; } -geometry_msgs::msg::TwistStamped EKFModule::getCurrentTwist(const rclcpp::Time & current_time) const +geometry_msgs::msg::TwistStamped EKFModule::get_current_twist( + const rclcpp::Time & current_time) const { const double vx = kalman_filter_.getXelement(IDX::VX); const double wz = kalman_filter_.getXelement(IDX::WZ); @@ -123,17 +122,17 @@ geometry_msgs::msg::TwistStamped EKFModule::getCurrentTwist(const rclcpp::Time & return current_ekf_twist; } -std::array EKFModule::getCurrentPoseCovariance() const +std::array EKFModule::get_current_pose_covariance() const { - return ekfCovarianceToPoseMessageCovariance(kalman_filter_.getLatestP()); + return ekf_covariance_to_pose_message_covariance(kalman_filter_.getLatestP()); } -std::array EKFModule::getCurrentTwistCovariance() const +std::array EKFModule::get_current_twist_covariance() const { - return ekfCovarianceToTwistMessageCovariance(kalman_filter_.getLatestP()); + return ekf_covariance_to_twist_message_covariance(kalman_filter_.getLatestP()); } -double EKFModule::getYawBias() const +double EKFModule::get_yaw_bias() const { return kalman_filter_.getLatestX()(IDX::YAWB); } @@ -153,17 +152,17 @@ size_t EKFModule::find_closest_delay_time_index(double target_value) const // If else, take the closest element. if (lower == accumulated_delay_times_.begin()) { return 0; - } else if (lower == accumulated_delay_times_.end()) { + } + if (lower == accumulated_delay_times_.end()) { return accumulated_delay_times_.size() - 1; - } else { - // Compare the target with the lower bound and the previous element. - auto prev = lower - 1; - bool is_closer_to_prev = (target_value - *prev) < (*lower - target_value); - - // Return the index of the closer element. - return is_closer_to_prev ? std::distance(accumulated_delay_times_.begin(), prev) - : std::distance(accumulated_delay_times_.begin(), lower); } + // Compare the target with the lower bound and the previous element. + auto prev = lower - 1; + bool is_closer_to_prev = (target_value - *prev) < (*lower - target_value); + + // Return the index of the closer element. + return is_closer_to_prev ? std::distance(accumulated_delay_times_.begin(), prev) + : std::distance(accumulated_delay_times_.begin(), lower); } void EKFModule::accumulate_delay_time(const double dt) @@ -180,69 +179,70 @@ void EKFModule::accumulate_delay_time(const double dt) } } -void EKFModule::predictWithDelay(const double dt) +void EKFModule::predict_with_delay(const double dt) { - const Eigen::MatrixXd X_curr = kalman_filter_.getLatestX(); - const Eigen::MatrixXd P_curr = kalman_filter_.getLatestP(); + const Eigen::MatrixXd x_curr = kalman_filter_.getLatestX(); + const Eigen::MatrixXd p_curr = kalman_filter_.getLatestP(); const double proc_cov_vx_d = std::pow(params_.proc_stddev_vx_c * dt, 2.0); const double proc_cov_wz_d = std::pow(params_.proc_stddev_wz_c * dt, 2.0); const double proc_cov_yaw_d = std::pow(params_.proc_stddev_yaw_c * dt, 2.0); - const Vector6d X_next = predictNextState(X_curr, dt); - const Matrix6d A = createStateTransitionMatrix(X_curr, dt); - const Matrix6d Q = processNoiseCovariance(proc_cov_yaw_d, proc_cov_vx_d, proc_cov_wz_d); - kalman_filter_.predictWithDelay(X_next, A, Q); + const Vector6d x_next = predict_next_state(x_curr, dt); + const Matrix6d a = create_state_transition_matrix(x_curr, dt); + const Matrix6d q = process_noise_covariance(proc_cov_yaw_d, proc_cov_vx_d, proc_cov_wz_d); + kalman_filter_.predictWithDelay(x_next, a, q); } -bool EKFModule::measurementUpdatePose( +bool EKFModule::measurement_update_pose( const PoseWithCovariance & pose, const rclcpp::Time & t_curr, EKFDiagnosticInfo & pose_diag_info) { if (pose.header.frame_id != params_.pose_frame_id) { - warning_->warnThrottle( + warning_->warn_throttle( fmt::format( "pose frame_id is %s, but pose_frame is set as %s. They must be same.", pose.header.frame_id.c_str(), params_.pose_frame_id.c_str()), 2000); } - const Eigen::MatrixXd X_curr = kalman_filter_.getLatestX(); - DEBUG_PRINT_MAT(X_curr.transpose()); + const Eigen::MatrixXd x_curr = kalman_filter_.getLatestX(); + DEBUG_PRINT_MAT(x_curr.transpose()); constexpr int dim_y = 3; // pos_x, pos_y, yaw, depending on Pose output /* Calculate delay step */ double delay_time = (t_curr - pose.header.stamp).seconds() + params_.pose_additional_delay; if (delay_time < 0.0) { - warning_->warnThrottle(poseDelayTimeWarningMessage(delay_time), 1000); + warning_->warn_throttle(pose_delay_time_warning_message(delay_time), 1000); } delay_time = std::max(delay_time, 0.0); - const int delay_step = static_cast(find_closest_delay_time_index(delay_time)); + const size_t delay_step = find_closest_delay_time_index(delay_time); pose_diag_info.delay_time = std::max(delay_time, pose_diag_info.delay_time); pose_diag_info.delay_time_threshold = accumulated_delay_times_.back(); if (delay_step >= params_.extend_state_step) { pose_diag_info.is_passed_delay_gate = false; - warning_->warnThrottle( - poseDelayStepWarningMessage(pose_diag_info.delay_time, pose_diag_info.delay_time_threshold), + warning_->warn_throttle( + pose_delay_step_warning_message( + pose_diag_info.delay_time, pose_diag_info.delay_time_threshold), 2000); return false; } /* Since the kalman filter cannot handle the rotation angle directly, - offset the yaw angle so that the difference from the yaw angle that ekf holds internally is less - than 2 pi. */ + offset the yaw angle so that the difference from the yaw angle that ekf holds internally + is less than 2 pi. */ double yaw = tf2::getYaw(pose.pose.pose.orientation); const double ekf_yaw = kalman_filter_.getXelement(delay_step * dim_x_ + IDX::YAW); - const double yaw_error = normalizeYaw(yaw - ekf_yaw); // normalize the error not to exceed 2 pi + const double yaw_error = normalize_yaw(yaw - ekf_yaw); // normalize the error not to exceed 2 pi yaw = yaw_error + ekf_yaw; /* Set measurement matrix */ Eigen::MatrixXd y(dim_y, 1); y << pose.pose.pose.position.x, pose.pose.pose.position.y, yaw; - if (hasNan(y) || hasInf(y)) { + if (has_nan(y) || has_inf(y)) { warning_->warn( "[EKF] pose measurement matrix includes NaN of Inf. ignore update. check pose message."); return false; @@ -252,15 +252,15 @@ bool EKFModule::measurementUpdatePose( const Eigen::Vector3d y_ekf( kalman_filter_.getXelement(delay_step * dim_x_ + IDX::X), kalman_filter_.getXelement(delay_step * dim_x_ + IDX::Y), ekf_yaw); - const Eigen::MatrixXd P_curr = kalman_filter_.getLatestP(); - const Eigen::MatrixXd P_y = P_curr.block(0, 0, dim_y, dim_y); + const Eigen::MatrixXd p_curr = kalman_filter_.getLatestP(); + const Eigen::MatrixXd p_y = p_curr.block(0, 0, dim_y, dim_y); - const double distance = mahalanobis(y_ekf, y, P_y); + const double distance = mahalanobis(y_ekf, y, p_y); pose_diag_info.mahalanobis_distance = std::max(distance, pose_diag_info.mahalanobis_distance); if (distance > params_.pose_gate_dist) { pose_diag_info.is_passed_mahalanobis_gate = false; - warning_->warnThrottle(mahalanobisWarningMessage(distance, params_.pose_gate_dist), 2000); - warning_->warnThrottle("Ignore the measurement data.", 2000); + warning_->warn_throttle(mahalanobis_warning_message(distance, params_.pose_gate_dist), 2000); + warning_->warn_throttle("Ignore the measurement data.", 2000); return false; } @@ -268,21 +268,21 @@ bool EKFModule::measurementUpdatePose( DEBUG_PRINT_MAT(y_ekf.transpose()); DEBUG_PRINT_MAT((y - y_ekf).transpose()); - const Eigen::Matrix C = poseMeasurementMatrix(); - const Eigen::Matrix3d R = - poseMeasurementCovariance(pose.pose.covariance, params_.pose_smoothing_steps); + const Eigen::Matrix c = pose_measurement_matrix(); + const Eigen::Matrix3d r = + pose_measurement_covariance(pose.pose.covariance, params_.pose_smoothing_steps); - kalman_filter_.updateWithDelay(y, C, R, delay_step); + kalman_filter_.updateWithDelay(y, c, r, static_cast(delay_step)); // debug - const Eigen::MatrixXd X_result = kalman_filter_.getLatestX(); - DEBUG_PRINT_MAT(X_result.transpose()); - DEBUG_PRINT_MAT((X_result - X_curr).transpose()); + const Eigen::MatrixXd x_result = kalman_filter_.getLatestX(); + DEBUG_PRINT_MAT(x_result.transpose()); + DEBUG_PRINT_MAT((x_result - x_curr).transpose()); return true; } -geometry_msgs::msg::PoseWithCovarianceStamped EKFModule::compensatePoseWithZDelay( +geometry_msgs::msg::PoseWithCovarianceStamped EKFModule::compensate_pose_with_z_delay( const PoseWithCovariance & pose, const double delay_time) { const auto rpy = tier4_autoware_utils::getRPY(pose.pose.pose.orientation); @@ -293,34 +293,34 @@ geometry_msgs::msg::PoseWithCovarianceStamped EKFModule::compensatePoseWithZDela return pose_with_z_delay; } -bool EKFModule::measurementUpdateTwist( +bool EKFModule::measurement_update_twist( const TwistWithCovariance & twist, const rclcpp::Time & t_curr, EKFDiagnosticInfo & twist_diag_info) { if (twist.header.frame_id != "base_link") { - warning_->warnThrottle("twist frame_id must be base_link", 2000); + warning_->warn_throttle("twist frame_id must be base_link", 2000); } - const Eigen::MatrixXd X_curr = kalman_filter_.getLatestX(); - DEBUG_PRINT_MAT(X_curr.transpose()); + const Eigen::MatrixXd x_curr = kalman_filter_.getLatestX(); + DEBUG_PRINT_MAT(x_curr.transpose()); constexpr int dim_y = 2; // vx, wz /* Calculate delay step */ double delay_time = (t_curr - twist.header.stamp).seconds() + params_.twist_additional_delay; if (delay_time < 0.0) { - warning_->warnThrottle(twistDelayTimeWarningMessage(delay_time), 1000); + warning_->warn_throttle(twist_delay_time_warning_message(delay_time), 1000); } delay_time = std::max(delay_time, 0.0); - const int delay_step = static_cast(find_closest_delay_time_index(delay_time)); + const size_t delay_step = find_closest_delay_time_index(delay_time); twist_diag_info.delay_time = std::max(delay_time, twist_diag_info.delay_time); twist_diag_info.delay_time_threshold = accumulated_delay_times_.back(); if (delay_step >= params_.extend_state_step) { twist_diag_info.is_passed_delay_gate = false; - warning_->warnThrottle( - twistDelayStepWarningMessage( + warning_->warn_throttle( + twist_delay_step_warning_message( twist_diag_info.delay_time, twist_diag_info.delay_time_threshold), 2000); return false; @@ -330,7 +330,7 @@ bool EKFModule::measurementUpdateTwist( Eigen::MatrixXd y(dim_y, 1); y << twist.twist.twist.linear.x, twist.twist.twist.angular.z; - if (hasNan(y) || hasInf(y)) { + if (has_nan(y) || has_inf(y)) { warning_->warn( "[EKF] twist measurement matrix includes NaN of Inf. ignore update. check twist message."); return false; @@ -339,15 +339,15 @@ bool EKFModule::measurementUpdateTwist( const Eigen::Vector2d y_ekf( kalman_filter_.getXelement(delay_step * dim_x_ + IDX::VX), kalman_filter_.getXelement(delay_step * dim_x_ + IDX::WZ)); - const Eigen::MatrixXd P_curr = kalman_filter_.getLatestP(); - const Eigen::MatrixXd P_y = P_curr.block(4, 4, dim_y, dim_y); + const Eigen::MatrixXd p_curr = kalman_filter_.getLatestP(); + const Eigen::MatrixXd p_y = p_curr.block(4, 4, dim_y, dim_y); - const double distance = mahalanobis(y_ekf, y, P_y); + const double distance = mahalanobis(y_ekf, y, p_y); twist_diag_info.mahalanobis_distance = std::max(distance, twist_diag_info.mahalanobis_distance); if (distance > params_.twist_gate_dist) { twist_diag_info.is_passed_mahalanobis_gate = false; - warning_->warnThrottle(mahalanobisWarningMessage(distance, params_.twist_gate_dist), 2000); - warning_->warnThrottle("Ignore the measurement data.", 2000); + warning_->warn_throttle(mahalanobis_warning_message(distance, params_.twist_gate_dist), 2000); + warning_->warn_throttle("Ignore the measurement data.", 2000); return false; } @@ -355,16 +355,16 @@ bool EKFModule::measurementUpdateTwist( DEBUG_PRINT_MAT(y_ekf.transpose()); DEBUG_PRINT_MAT((y - y_ekf).transpose()); - const Eigen::Matrix C = twistMeasurementMatrix(); - const Eigen::Matrix2d R = - twistMeasurementCovariance(twist.twist.covariance, params_.twist_smoothing_steps); + const Eigen::Matrix c = twist_measurement_matrix(); + const Eigen::Matrix2d r = + twist_measurement_covariance(twist.twist.covariance, params_.twist_smoothing_steps); - kalman_filter_.updateWithDelay(y, C, R, delay_step); + kalman_filter_.updateWithDelay(y, c, r, static_cast(delay_step)); // debug - const Eigen::MatrixXd X_result = kalman_filter_.getLatestX(); - DEBUG_PRINT_MAT(X_result.transpose()); - DEBUG_PRINT_MAT((X_result - X_curr).transpose()); + const Eigen::MatrixXd x_result = kalman_filter_.getLatestX(); + DEBUG_PRINT_MAT(x_result.transpose()); + DEBUG_PRINT_MAT((x_result - x_curr).transpose()); return true; } diff --git a/localization/ekf_localizer/src/mahalanobis.cpp b/localization/ekf_localizer/src/mahalanobis.cpp index ff5ef13892b73..a71482ab696f6 100644 --- a/localization/ekf_localizer/src/mahalanobis.cpp +++ b/localization/ekf_localizer/src/mahalanobis.cpp @@ -14,7 +14,7 @@ #include "ekf_localizer/mahalanobis.hpp" -double squaredMahalanobis( +double squared_mahalanobis( const Eigen::VectorXd & x, const Eigen::VectorXd & y, const Eigen::MatrixXd & C) { const Eigen::VectorXd d = x - y; @@ -23,5 +23,5 @@ double squaredMahalanobis( double mahalanobis(const Eigen::VectorXd & x, const Eigen::VectorXd & y, const Eigen::MatrixXd & C) { - return std::sqrt(squaredMahalanobis(x, y, C)); + return std::sqrt(squared_mahalanobis(x, y, C)); } diff --git a/localization/ekf_localizer/src/measurement.cpp b/localization/ekf_localizer/src/measurement.cpp index 0b3e65bd60f5d..4533bacbee991 100644 --- a/localization/ekf_localizer/src/measurement.cpp +++ b/localization/ekf_localizer/src/measurement.cpp @@ -17,40 +17,40 @@ #include "ekf_localizer/state_index.hpp" #include "tier4_autoware_utils/ros/msg_covariance.hpp" -Eigen::Matrix poseMeasurementMatrix() +Eigen::Matrix pose_measurement_matrix() { - Eigen::Matrix C = Eigen::Matrix::Zero(); - C(0, IDX::X) = 1.0; // for pos x - C(1, IDX::Y) = 1.0; // for pos y - C(2, IDX::YAW) = 1.0; // for yaw - return C; + Eigen::Matrix c = Eigen::Matrix::Zero(); + c(0, IDX::X) = 1.0; // for pos x + c(1, IDX::Y) = 1.0; // for pos y + c(2, IDX::YAW) = 1.0; // for yaw + return c; } -Eigen::Matrix twistMeasurementMatrix() +Eigen::Matrix twist_measurement_matrix() { - Eigen::Matrix C = Eigen::Matrix::Zero(); - C(0, IDX::VX) = 1.0; // for vx - C(1, IDX::WZ) = 1.0; // for wz - return C; + Eigen::Matrix c = Eigen::Matrix::Zero(); + c(0, IDX::VX) = 1.0; // for vx + c(1, IDX::WZ) = 1.0; // for wz + return c; } -Eigen::Matrix3d poseMeasurementCovariance( +Eigen::Matrix3d pose_measurement_covariance( const std::array & covariance, const size_t smoothing_step) { - Eigen::Matrix3d R; + Eigen::Matrix3d r; using COV_IDX = tier4_autoware_utils::xyzrpy_covariance_index::XYZRPY_COV_IDX; - R << covariance.at(COV_IDX::X_X), covariance.at(COV_IDX::X_Y), covariance.at(COV_IDX::X_YAW), + r << covariance.at(COV_IDX::X_X), covariance.at(COV_IDX::X_Y), covariance.at(COV_IDX::X_YAW), covariance.at(COV_IDX::Y_X), covariance.at(COV_IDX::Y_Y), covariance.at(COV_IDX::Y_YAW), covariance.at(COV_IDX::YAW_X), covariance.at(COV_IDX::YAW_Y), covariance.at(COV_IDX::YAW_YAW); - return R * static_cast(smoothing_step); + return r * static_cast(smoothing_step); } -Eigen::Matrix2d twistMeasurementCovariance( +Eigen::Matrix2d twist_measurement_covariance( const std::array & covariance, const size_t smoothing_step) { - Eigen::Matrix2d R; + Eigen::Matrix2d r; using COV_IDX = tier4_autoware_utils::xyzrpy_covariance_index::XYZRPY_COV_IDX; - R << covariance.at(COV_IDX::X_X), covariance.at(COV_IDX::X_YAW), covariance.at(COV_IDX::YAW_X), + r << covariance.at(COV_IDX::X_X), covariance.at(COV_IDX::X_YAW), covariance.at(COV_IDX::YAW_X), covariance.at(COV_IDX::YAW_YAW); - return R * static_cast(smoothing_step); + return r * static_cast(smoothing_step); } diff --git a/localization/ekf_localizer/src/state_transition.cpp b/localization/ekf_localizer/src/state_transition.cpp index 88fc9f76d7168..22b1f2f8a1c67 100644 --- a/localization/ekf_localizer/src/state_transition.cpp +++ b/localization/ekf_localizer/src/state_transition.cpp @@ -17,7 +17,7 @@ #include -double normalizeYaw(const double & yaw) +double normalize_yaw(const double & yaw) { // FIXME(IshitaTakeshi) I think the computation here can be simplified // FIXME(IshitaTakeshi) Rename the function. This is not normalization @@ -36,7 +36,7 @@ double normalizeYaw(const double & yaw) * (b_k : yaw_bias_k) */ -Vector6d predictNextState(const Vector6d & X_curr, const double dt) +Vector6d predict_next_state(const Vector6d & X_curr, const double dt) { const double x = X_curr(IDX::X); const double y = X_curr(IDX::Y); @@ -45,14 +45,14 @@ Vector6d predictNextState(const Vector6d & X_curr, const double dt) const double vx = X_curr(IDX::VX); const double wz = X_curr(IDX::WZ); - Vector6d X_next; - X_next(IDX::X) = x + vx * std::cos(yaw + yaw_bias) * dt; // dx = v * cos(yaw) - X_next(IDX::Y) = y + vx * std::sin(yaw + yaw_bias) * dt; // dy = v * sin(yaw) - X_next(IDX::YAW) = normalizeYaw(yaw + wz * dt); // dyaw = omega + omega_bias - X_next(IDX::YAWB) = yaw_bias; - X_next(IDX::VX) = vx; - X_next(IDX::WZ) = wz; - return X_next; + Vector6d x_next; + x_next(IDX::X) = x + vx * std::cos(yaw + yaw_bias) * dt; // dx = v * cos(yaw) + x_next(IDX::Y) = y + vx * std::sin(yaw + yaw_bias) * dt; // dy = v * sin(yaw) + x_next(IDX::YAW) = normalize_yaw(yaw + wz * dt); // dyaw = omega + omega_bias + x_next(IDX::YAWB) = yaw_bias; + x_next(IDX::VX) = vx; + x_next(IDX::WZ) = wz; + return x_next; } /* == Linearized model == @@ -64,32 +64,32 @@ Vector6d predictNextState(const Vector6d & X_curr, const double dt) * [ 0, 0, 0, 0, 1, 0] * [ 0, 0, 0, 0, 0, 1] */ -Matrix6d createStateTransitionMatrix(const Vector6d & X_curr, const double dt) +Matrix6d create_state_transition_matrix(const Vector6d & X_curr, const double dt) { const double yaw = X_curr(IDX::YAW); const double yaw_bias = X_curr(IDX::YAWB); const double vx = X_curr(IDX::VX); - Matrix6d A = Matrix6d::Identity(); - A(IDX::X, IDX::YAW) = -vx * sin(yaw + yaw_bias) * dt; - A(IDX::X, IDX::YAWB) = -vx * sin(yaw + yaw_bias) * dt; - A(IDX::X, IDX::VX) = cos(yaw + yaw_bias) * dt; - A(IDX::Y, IDX::YAW) = vx * cos(yaw + yaw_bias) * dt; - A(IDX::Y, IDX::YAWB) = vx * cos(yaw + yaw_bias) * dt; - A(IDX::Y, IDX::VX) = sin(yaw + yaw_bias) * dt; - A(IDX::YAW, IDX::WZ) = dt; - return A; + Matrix6d a = Matrix6d::Identity(); + a(IDX::X, IDX::YAW) = -vx * sin(yaw + yaw_bias) * dt; + a(IDX::X, IDX::YAWB) = -vx * sin(yaw + yaw_bias) * dt; + a(IDX::X, IDX::VX) = cos(yaw + yaw_bias) * dt; + a(IDX::Y, IDX::YAW) = vx * cos(yaw + yaw_bias) * dt; + a(IDX::Y, IDX::YAWB) = vx * cos(yaw + yaw_bias) * dt; + a(IDX::Y, IDX::VX) = sin(yaw + yaw_bias) * dt; + a(IDX::YAW, IDX::WZ) = dt; + return a; } -Matrix6d processNoiseCovariance( +Matrix6d process_noise_covariance( const double proc_cov_yaw_d, const double proc_cov_vx_d, const double proc_cov_wz_d) { - Matrix6d Q = Matrix6d::Zero(); - Q(IDX::X, IDX::X) = 0.0; - Q(IDX::Y, IDX::Y) = 0.0; - Q(IDX::YAW, IDX::YAW) = proc_cov_yaw_d; // for yaw - Q(IDX::YAWB, IDX::YAWB) = 0.0; - Q(IDX::VX, IDX::VX) = proc_cov_vx_d; // for vx - Q(IDX::WZ, IDX::WZ) = proc_cov_wz_d; // for wz - return Q; + Matrix6d q = Matrix6d::Zero(); + q(IDX::X, IDX::X) = 0.0; + q(IDX::Y, IDX::Y) = 0.0; + q(IDX::YAW, IDX::YAW) = proc_cov_yaw_d; // for yaw + q(IDX::YAWB, IDX::YAWB) = 0.0; + q(IDX::VX, IDX::VX) = proc_cov_vx_d; // for vx + q(IDX::WZ, IDX::WZ) = proc_cov_wz_d; // for wz + return q; } diff --git a/localization/ekf_localizer/src/warning_message.cpp b/localization/ekf_localizer/src/warning_message.cpp index c69f30b2d6601..ae74c6bfb5fbc 100644 --- a/localization/ekf_localizer/src/warning_message.cpp +++ b/localization/ekf_localizer/src/warning_message.cpp @@ -18,7 +18,8 @@ #include -std::string poseDelayStepWarningMessage(const double delay_time, const double delay_time_threshold) +std::string pose_delay_step_warning_message( + const double delay_time, const double delay_time_threshold) { const std::string s = "Pose delay exceeds the compensation limit, ignored. " @@ -26,7 +27,8 @@ std::string poseDelayStepWarningMessage(const double delay_time, const double de return fmt::format(s, delay_time, delay_time_threshold); } -std::string twistDelayStepWarningMessage(const double delay_time, const double delay_time_threshold) +std::string twist_delay_step_warning_message( + const double delay_time, const double delay_time_threshold) { const std::string s = "Twist delay exceeds the compensation limit, ignored. " @@ -34,19 +36,19 @@ std::string twistDelayStepWarningMessage(const double delay_time, const double d return fmt::format(s, delay_time, delay_time_threshold); } -std::string poseDelayTimeWarningMessage(const double delay_time) +std::string pose_delay_time_warning_message(const double delay_time) { const std::string s = "Pose time stamp is inappropriate, set delay to 0[s]. delay = {:.3f}"; return fmt::format(s, delay_time); } -std::string twistDelayTimeWarningMessage(const double delay_time) +std::string twist_delay_time_warning_message(const double delay_time) { const std::string s = "Twist time stamp is inappropriate, set delay to 0[s]. delay = {:.3f}"; return fmt::format(s, delay_time); } -std::string mahalanobisWarningMessage(const double distance, const double max_distance) +std::string mahalanobis_warning_message(const double distance, const double max_distance) { const std::string s = "The Mahalanobis distance {:.4f} is over the limit {:.4f}."; return fmt::format(s, distance, max_distance); diff --git a/localization/ekf_localizer/test/test_covariance.cpp b/localization/ekf_localizer/test/test_covariance.cpp index 23458fb18a838..ed87ebdea029b 100644 --- a/localization/ekf_localizer/test/test_covariance.cpp +++ b/localization/ekf_localizer/test/test_covariance.cpp @@ -19,18 +19,18 @@ TEST(EKFCovarianceToPoseMessageCovariance, SmokeTest) { { - Matrix6d P = Matrix6d::Zero(); - P(0, 0) = 1.; - P(0, 1) = 2.; - P(0, 2) = 3.; - P(1, 0) = 4.; - P(1, 1) = 5.; - P(1, 2) = 6.; - P(2, 0) = 7.; - P(2, 1) = 8.; - P(2, 2) = 9.; + Matrix6d p = Matrix6d::Zero(); + p(0, 0) = 1.; + p(0, 1) = 2.; + p(0, 2) = 3.; + p(1, 0) = 4.; + p(1, 1) = 5.; + p(1, 2) = 6.; + p(2, 0) = 7.; + p(2, 1) = 8.; + p(2, 2) = 9.; - std::array covariance = ekfCovarianceToPoseMessageCovariance(P); + std::array covariance = ekf_covariance_to_pose_message_covariance(p); EXPECT_EQ(covariance[0], 1.); EXPECT_EQ(covariance[1], 2.); EXPECT_EQ(covariance[5], 3.); @@ -44,8 +44,8 @@ TEST(EKFCovarianceToPoseMessageCovariance, SmokeTest) // ensure other elements are zero { - Matrix6d P = Matrix6d::Zero(); - std::array covariance = ekfCovarianceToPoseMessageCovariance(P); + Matrix6d p = Matrix6d::Zero(); + std::array covariance = ekf_covariance_to_pose_message_covariance(p); for (double e : covariance) { EXPECT_EQ(e, 0.); } @@ -55,13 +55,13 @@ TEST(EKFCovarianceToPoseMessageCovariance, SmokeTest) TEST(EKFCovarianceToTwistMessageCovariance, SmokeTest) { { - Matrix6d P = Matrix6d::Zero(); - P(4, 4) = 1.; - P(4, 5) = 2.; - P(5, 4) = 3.; - P(5, 5) = 4.; + Matrix6d p = Matrix6d::Zero(); + p(4, 4) = 1.; + p(4, 5) = 2.; + p(5, 4) = 3.; + p(5, 5) = 4.; - std::array covariance = ekfCovarianceToTwistMessageCovariance(P); + std::array covariance = ekf_covariance_to_twist_message_covariance(p); EXPECT_EQ(covariance[0], 1.); EXPECT_EQ(covariance[5], 2.); EXPECT_EQ(covariance[30], 3.); @@ -70,8 +70,8 @@ TEST(EKFCovarianceToTwistMessageCovariance, SmokeTest) // ensure other elements are zero { - Matrix6d P = Matrix6d::Zero(); - std::array covariance = ekfCovarianceToTwistMessageCovariance(P); + Matrix6d p = Matrix6d::Zero(); + std::array covariance = ekf_covariance_to_twist_message_covariance(p); for (double e : covariance) { EXPECT_EQ(e, 0.); } diff --git a/localization/ekf_localizer/test/test_diagnostics.cpp b/localization/ekf_localizer/test/test_diagnostics.cpp index f506dca1cb230..ef0d7a6493756 100644 --- a/localization/ekf_localizer/test/test_diagnostics.cpp +++ b/localization/ekf_localizer/test/test_diagnostics.cpp @@ -16,20 +16,20 @@ #include -TEST(TestEkfDiagnostics, CheckProcessActivated) +TEST(TestEkfDiagnostics, check_process_activated) { diagnostic_msgs::msg::DiagnosticStatus stat; bool is_activated = true; - stat = checkProcessActivated(is_activated); + stat = check_process_activated(is_activated); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); is_activated = false; - stat = checkProcessActivated(is_activated); + stat = check_process_activated(is_activated); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); } -TEST(TestEkfDiagnostics, checkMeasurementUpdated) +TEST(TestEkfDiagnostics, check_measurement_updated) { diagnostic_msgs::msg::DiagnosticStatus stat; @@ -38,58 +38,58 @@ TEST(TestEkfDiagnostics, checkMeasurementUpdated) const size_t no_update_count_threshold_error = 250; size_t no_update_count = 0; - stat = checkMeasurementUpdated( + stat = check_measurement_updated( measurement_type, no_update_count, no_update_count_threshold_warn, no_update_count_threshold_error); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); no_update_count = 1; - stat = checkMeasurementUpdated( + stat = check_measurement_updated( measurement_type, no_update_count, no_update_count_threshold_warn, no_update_count_threshold_error); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); no_update_count = 49; - stat = checkMeasurementUpdated( + stat = check_measurement_updated( measurement_type, no_update_count, no_update_count_threshold_warn, no_update_count_threshold_error); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); no_update_count = 50; - stat = checkMeasurementUpdated( + stat = check_measurement_updated( measurement_type, no_update_count, no_update_count_threshold_warn, no_update_count_threshold_error); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); no_update_count = 249; - stat = checkMeasurementUpdated( + stat = check_measurement_updated( measurement_type, no_update_count, no_update_count_threshold_warn, no_update_count_threshold_error); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); no_update_count = 250; - stat = checkMeasurementUpdated( + stat = check_measurement_updated( measurement_type, no_update_count, no_update_count_threshold_warn, no_update_count_threshold_error); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::ERROR); } -TEST(TestEkfDiagnostics, CheckMeasurementQueueSize) +TEST(TestEkfDiagnostics, check_measurement_queue_size) { diagnostic_msgs::msg::DiagnosticStatus stat; const std::string measurement_type = "pose"; // not effect for stat.level size_t queue_size = 0; // not effect for stat.level - stat = checkMeasurementQueueSize(measurement_type, queue_size); + stat = check_measurement_queue_size(measurement_type, queue_size); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); queue_size = 1; // not effect for stat.level - stat = checkMeasurementQueueSize(measurement_type, queue_size); + stat = check_measurement_queue_size(measurement_type, queue_size); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); } -TEST(TestEkfDiagnostics, CheckMeasurementDelayGate) +TEST(TestEkfDiagnostics, check_measurement_delay_gate) { diagnostic_msgs::msg::DiagnosticStatus stat; @@ -98,17 +98,17 @@ TEST(TestEkfDiagnostics, CheckMeasurementDelayGate) const double delay_time_threshold = 1.0; // not effect for stat.level bool is_passed_delay_gate = true; - stat = checkMeasurementDelayGate( + stat = check_measurement_delay_gate( measurement_type, is_passed_delay_gate, delay_time, delay_time_threshold); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); is_passed_delay_gate = false; - stat = checkMeasurementDelayGate( + stat = check_measurement_delay_gate( measurement_type, is_passed_delay_gate, delay_time, delay_time_threshold); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); } -TEST(TestEkfDiagnostics, CheckMeasurementMahalanobisGate) +TEST(TestEkfDiagnostics, check_measurement_mahalanobis_gate) { diagnostic_msgs::msg::DiagnosticStatus stat; @@ -117,19 +117,19 @@ TEST(TestEkfDiagnostics, CheckMeasurementMahalanobisGate) const double mahalanobis_distance_threshold = 1.0; // not effect for stat.level bool is_passed_mahalanobis_gate = true; - stat = checkMeasurementMahalanobisGate( + stat = check_measurement_mahalanobis_gate( measurement_type, is_passed_mahalanobis_gate, mahalanobis_distance, mahalanobis_distance_threshold); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); is_passed_mahalanobis_gate = false; - stat = checkMeasurementMahalanobisGate( + stat = check_measurement_mahalanobis_gate( measurement_type, is_passed_mahalanobis_gate, mahalanobis_distance, mahalanobis_distance_threshold); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); } -TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) +TEST(TestLocalizationErrorMonitorDiagnostics, merge_diagnostic_status) { diagnostic_msgs::msg::DiagnosticStatus merged_stat; std::vector stat_array(2); @@ -138,7 +138,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "OK"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::OK; stat_array.at(1).message = "OK"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); EXPECT_EQ(merged_stat.message, "OK"); @@ -146,7 +146,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "WARN0"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::OK; stat_array.at(1).message = "OK"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); EXPECT_EQ(merged_stat.message, "WARN0"); @@ -154,7 +154,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "OK"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::WARN; stat_array.at(1).message = "WARN1"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); EXPECT_EQ(merged_stat.message, "WARN1"); @@ -162,7 +162,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "WARN0"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::WARN; stat_array.at(1).message = "WARN1"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); EXPECT_EQ(merged_stat.message, "WARN0; WARN1"); @@ -170,7 +170,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "OK"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::ERROR; stat_array.at(1).message = "ERROR1"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::ERROR); EXPECT_EQ(merged_stat.message, "ERROR1"); @@ -178,7 +178,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "WARN0"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::ERROR; stat_array.at(1).message = "ERROR1"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::ERROR); EXPECT_EQ(merged_stat.message, "WARN0; ERROR1"); @@ -186,7 +186,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "ERROR0"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::ERROR; stat_array.at(1).message = "ERROR1"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::ERROR); EXPECT_EQ(merged_stat.message, "ERROR0; ERROR1"); } diff --git a/localization/ekf_localizer/test/test_mahalanobis.cpp b/localization/ekf_localizer/test/test_mahalanobis.cpp index d208c1e8da06b..db7d538b533c3 100644 --- a/localization/ekf_localizer/test/test_mahalanobis.cpp +++ b/localization/ekf_localizer/test/test_mahalanobis.cpp @@ -18,44 +18,44 @@ constexpr double tolerance = 1e-8; -TEST(SquaredMahalanobis, SmokeTest) +TEST(squared_mahalanobis, SmokeTest) { { Eigen::Vector2d x(0, 1); Eigen::Vector2d y(3, 2); - Eigen::Matrix2d C; - C << 10, 0, 0, 10; + Eigen::Matrix2d c; + c << 10, 0, 0, 10; - EXPECT_NEAR(squaredMahalanobis(x, y, C), 1.0, tolerance); + EXPECT_NEAR(squared_mahalanobis(x, y, c), 1.0, tolerance); } { Eigen::Vector2d x(4, 1); Eigen::Vector2d y(1, 5); - Eigen::Matrix2d C; - C << 5, 0, 0, 5; + Eigen::Matrix2d c; + c << 5, 0, 0, 5; - EXPECT_NEAR(squaredMahalanobis(x, y, C), 5.0, tolerance); + EXPECT_NEAR(squared_mahalanobis(x, y, c), 5.0, tolerance); } } -TEST(Mahalanobis, SmokeTest) +TEST(mahalanobis, SmokeTest) { { Eigen::Vector2d x(0, 1); Eigen::Vector2d y(3, 2); - Eigen::Matrix2d C; - C << 10, 0, 0, 10; + Eigen::Matrix2d c; + c << 10, 0, 0, 10; - EXPECT_NEAR(mahalanobis(x, y, C), 1.0, tolerance); + EXPECT_NEAR(mahalanobis(x, y, c), 1.0, tolerance); } { Eigen::Vector2d x(4, 1); Eigen::Vector2d y(1, 5); - Eigen::Matrix2d C; - C << 5, 0, 0, 5; + Eigen::Matrix2d c; + c << 5, 0, 0, 5; - EXPECT_NEAR(mahalanobis(x, y, C), std::sqrt(5.0), tolerance); + EXPECT_NEAR(mahalanobis(x, y, c), std::sqrt(5.0), tolerance); } } diff --git a/localization/ekf_localizer/test/test_measurement.cpp b/localization/ekf_localizer/test/test_measurement.cpp index 9d63cb056d9d3..c77e39a67d15c 100644 --- a/localization/ekf_localizer/test/test_measurement.cpp +++ b/localization/ekf_localizer/test/test_measurement.cpp @@ -16,66 +16,66 @@ #include -TEST(Measurement, PoseMeasurementMatrix) +TEST(Measurement, pose_measurement_matrix) { - const Eigen::Matrix M = poseMeasurementMatrix(); + const Eigen::Matrix m = pose_measurement_matrix(); Eigen::Matrix expected; expected << 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0; - EXPECT_EQ((M - expected).norm(), 0); + EXPECT_EQ((m - expected).norm(), 0); } -TEST(Measurement, TwistMeasurementMatrix) +TEST(Measurement, twist_measurement_matrix) { - const Eigen::Matrix M = twistMeasurementMatrix(); + const Eigen::Matrix m = twist_measurement_matrix(); Eigen::Matrix expected; expected << 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1; - EXPECT_EQ((M - expected).norm(), 0); + EXPECT_EQ((m - expected).norm(), 0); } -TEST(Measurement, PoseMeasurementCovariance) +TEST(Measurement, pose_measurement_covariance) { { const std::array covariance = {1, 2, 0, 0, 0, 3, 4, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 0, 0, 0, 9}; - const Eigen::Matrix3d M = poseMeasurementCovariance(covariance, 2); + const Eigen::Matrix3d m = pose_measurement_covariance(covariance, 2); Eigen::Matrix3d expected; expected << 2, 4, 6, 8, 10, 12, 14, 16, 18; - EXPECT_EQ((M - expected).norm(), 0.); + EXPECT_EQ((m - expected).norm(), 0.); } { // Make sure that other elements are not changed - std::array covariance; + std::array covariance{}; covariance.fill(0); - const Eigen::Matrix3d M = poseMeasurementCovariance(covariance, 2.); - EXPECT_EQ(M.norm(), 0); + const Eigen::Matrix3d m = pose_measurement_covariance(covariance, 2.); + EXPECT_EQ(m.norm(), 0); } } -TEST(Measurement, TwistMeasurementCovariance) +TEST(Measurement, twist_measurement_covariance) { { const std::array covariance = {1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4}; - const Eigen::Matrix2d M = twistMeasurementCovariance(covariance, 2); + const Eigen::Matrix2d m = twist_measurement_covariance(covariance, 2); Eigen::Matrix2d expected; expected << 2, 4, 6, 8; - EXPECT_EQ((M - expected).norm(), 0.); + EXPECT_EQ((m - expected).norm(), 0.); } { // Make sure that other elements are not changed - std::array covariance; + std::array covariance{}; covariance.fill(0); - const Eigen::Matrix2d M = twistMeasurementCovariance(covariance, 2.); - EXPECT_EQ(M.norm(), 0); + const Eigen::Matrix2d m = twist_measurement_covariance(covariance, 2.); + EXPECT_EQ(m.norm(), 0); } } diff --git a/localization/ekf_localizer/test/test_numeric.cpp b/localization/ekf_localizer/test/test_numeric.cpp index baf4f46db79a9..f84c9aa1d0bf2 100644 --- a/localization/ekf_localizer/test/test_numeric.cpp +++ b/localization/ekf_localizer/test/test_numeric.cpp @@ -18,30 +18,30 @@ #include -TEST(Numeric, HasNan) +TEST(Numeric, has_nan) { const Eigen::VectorXd empty(0); const double inf = std::numeric_limits::infinity(); const double nan = std::nan(""); - EXPECT_FALSE(hasNan(empty)); - EXPECT_FALSE(hasNan(Eigen::Vector3d(0., 0., 1.))); - EXPECT_FALSE(hasNan(Eigen::Vector3d(1e16, 0., 1.))); - EXPECT_FALSE(hasNan(Eigen::Vector3d(0., 1., inf))); + EXPECT_FALSE(has_nan(empty)); + EXPECT_FALSE(has_nan(Eigen::Vector3d(0., 0., 1.))); + EXPECT_FALSE(has_nan(Eigen::Vector3d(1e16, 0., 1.))); + EXPECT_FALSE(has_nan(Eigen::Vector3d(0., 1., inf))); - EXPECT_TRUE(hasNan(Eigen::Vector3d(nan, 1., 0.))); + EXPECT_TRUE(has_nan(Eigen::Vector3d(nan, 1., 0.))); } -TEST(Numeric, HasInf) +TEST(Numeric, has_inf) { const Eigen::VectorXd empty(0); const double inf = std::numeric_limits::infinity(); const double nan = std::nan(""); - EXPECT_FALSE(hasInf(empty)); - EXPECT_FALSE(hasInf(Eigen::Vector3d(0., 0., 1.))); - EXPECT_FALSE(hasInf(Eigen::Vector3d(1e16, 0., 1.))); - EXPECT_FALSE(hasInf(Eigen::Vector3d(nan, 1., 0.))); + EXPECT_FALSE(has_inf(empty)); + EXPECT_FALSE(has_inf(Eigen::Vector3d(0., 0., 1.))); + EXPECT_FALSE(has_inf(Eigen::Vector3d(1e16, 0., 1.))); + EXPECT_FALSE(has_inf(Eigen::Vector3d(nan, 1., 0.))); - EXPECT_TRUE(hasInf(Eigen::Vector3d(0., 1., inf))); + EXPECT_TRUE(has_inf(Eigen::Vector3d(0., 1., inf))); } diff --git a/localization/ekf_localizer/test/test_state_transition.cpp b/localization/ekf_localizer/test/test_state_transition.cpp index 9cb7975a964a9..3b6bd93fd3dd8 100644 --- a/localization/ekf_localizer/test/test_state_transition.cpp +++ b/localization/ekf_localizer/test/test_state_transition.cpp @@ -17,43 +17,44 @@ #include "ekf_localizer/state_transition.hpp" #include -#include -TEST(StateTransition, NormalizeYaw) +#include + +TEST(StateTransition, normalize_yaw) { const double tolerance = 1e-6; - EXPECT_NEAR(normalizeYaw(M_PI * 4 / 3), -M_PI * 2 / 3, tolerance); - EXPECT_NEAR(normalizeYaw(-M_PI * 4 / 3), M_PI * 2 / 3, tolerance); - EXPECT_NEAR(normalizeYaw(M_PI * 9 / 2), M_PI * 1 / 2, tolerance); - EXPECT_NEAR(normalizeYaw(M_PI * 4), M_PI * 0, tolerance); + EXPECT_NEAR(normalize_yaw(M_PI * 4 / 3), -M_PI * 2 / 3, tolerance); + EXPECT_NEAR(normalize_yaw(-M_PI * 4 / 3), M_PI * 2 / 3, tolerance); + EXPECT_NEAR(normalize_yaw(M_PI * 9 / 2), M_PI * 1 / 2, tolerance); + EXPECT_NEAR(normalize_yaw(M_PI * 4), M_PI * 0, tolerance); } -TEST(PredictNextState, PredictNextState) +TEST(predict_next_state, predict_next_state) { // This function is the definition of state transition so we just check // if the calculation is done according to the formula - Vector6d X_curr; - X_curr(0) = 2.; - X_curr(1) = 3.; - X_curr(2) = M_PI / 2.; - X_curr(3) = M_PI / 4.; - X_curr(4) = 10.; - X_curr(5) = 2. * M_PI / 3.; + Vector6d x_curr; + x_curr(0) = 2.; + x_curr(1) = 3.; + x_curr(2) = M_PI / 2.; + x_curr(3) = M_PI / 4.; + x_curr(4) = 10.; + x_curr(5) = 2. * M_PI / 3.; const double dt = 0.5; - const Vector6d X_next = predictNextState(X_curr, dt); + const Vector6d x_next = predict_next_state(x_curr, dt); const double tolerance = 1e-10; - EXPECT_NEAR(X_next(0), 2. + 10. * std::cos(M_PI / 2. + M_PI / 4.) * 0.5, tolerance); - EXPECT_NEAR(X_next(1), 3. + 10. * std::sin(M_PI / 2. + M_PI / 4.) * 0.5, tolerance); - EXPECT_NEAR(X_next(2), normalizeYaw(M_PI / 2. + M_PI / 3.), tolerance); - EXPECT_NEAR(X_next(3), X_curr(3), tolerance); - EXPECT_NEAR(X_next(4), X_curr(4), tolerance); - EXPECT_NEAR(X_next(5), X_curr(5), tolerance); + EXPECT_NEAR(x_next(0), 2. + 10. * std::cos(M_PI / 2. + M_PI / 4.) * 0.5, tolerance); + EXPECT_NEAR(x_next(1), 3. + 10. * std::sin(M_PI / 2. + M_PI / 4.) * 0.5, tolerance); + EXPECT_NEAR(x_next(2), normalize_yaw(M_PI / 2. + M_PI / 3.), tolerance); + EXPECT_NEAR(x_next(3), x_curr(3), tolerance); + EXPECT_NEAR(x_next(4), x_curr(4), tolerance); + EXPECT_NEAR(x_next(5), x_curr(5), tolerance); } -TEST(CreateStateTransitionMatrix, NumericalApproximation) +TEST(create_state_transition_matrix, NumericalApproximation) { // The transition matrix A = df / dx // We check if df = A * dx approximates f(x + dx) - f(x) @@ -64,10 +65,10 @@ TEST(CreateStateTransitionMatrix, NumericalApproximation) const Vector6d dx = 0.1 * Vector6d::Ones(); const Vector6d x = Vector6d::Zero(); - const Matrix6d A = createStateTransitionMatrix(x, dt); - const Vector6d df = predictNextState(x + dx, dt) - predictNextState(x, dt); + const Matrix6d a = create_state_transition_matrix(x, dt); + const Vector6d df = predict_next_state(x + dx, dt) - predict_next_state(x, dt); - EXPECT_LT((df - A * dx).norm(), 2e-3); + EXPECT_LT((df - a * dx).norm(), 2e-3); } { @@ -76,20 +77,20 @@ TEST(CreateStateTransitionMatrix, NumericalApproximation) const Vector6d dx = 0.1 * Vector6d::Ones(); const Vector6d x = (Vector6d() << 0.1, 0.2, 0.1, 0.4, 0.1, 0.3).finished(); - const Matrix6d A = createStateTransitionMatrix(x, dt); - const Vector6d df = predictNextState(x + dx, dt) - predictNextState(x, dt); + const Matrix6d a = create_state_transition_matrix(x, dt); + const Vector6d df = predict_next_state(x + dx, dt) - predict_next_state(x, dt); - EXPECT_LT((df - A * dx).norm(), 5e-3); + EXPECT_LT((df - a * dx).norm(), 5e-3); } } -TEST(ProcessNoiseCovariance, ProcessNoiseCovariance) +TEST(process_noise_covariance, process_noise_covariance) { - const Matrix6d Q = processNoiseCovariance(1., 2., 3.); - EXPECT_EQ(Q(2, 2), 1.); // for yaw - EXPECT_EQ(Q(4, 4), 2.); // for vx - EXPECT_EQ(Q(5, 5), 3.); // for wz + const Matrix6d q = process_noise_covariance(1., 2., 3.); + EXPECT_EQ(q(2, 2), 1.); // for yaw + EXPECT_EQ(q(4, 4), 2.); // for vx + EXPECT_EQ(q(5, 5), 3.); // for wz // Make sure other elements are zero - EXPECT_EQ(processNoiseCovariance(0, 0, 0).norm(), 0.); + EXPECT_EQ(process_noise_covariance(0, 0, 0).norm(), 0.); } diff --git a/localization/ekf_localizer/test/test_string.cpp b/localization/ekf_localizer/test/test_string.cpp index 7b35a56d889e9..013072e5145c7 100644 --- a/localization/ekf_localizer/test/test_string.cpp +++ b/localization/ekf_localizer/test/test_string.cpp @@ -16,11 +16,11 @@ #include -TEST(EraseLeadingSlash, SmokeTest) +TEST(erase_leading_slash, SmokeTest) { - EXPECT_EQ(eraseLeadingSlash("/topic"), "topic"); - EXPECT_EQ(eraseLeadingSlash("topic"), "topic"); // do nothing + EXPECT_EQ(erase_leading_slash("/topic"), "topic"); + EXPECT_EQ(erase_leading_slash("topic"), "topic"); // do nothing - EXPECT_EQ(eraseLeadingSlash(""), ""); - EXPECT_EQ(eraseLeadingSlash("/"), ""); + EXPECT_EQ(erase_leading_slash(""), ""); + EXPECT_EQ(erase_leading_slash("/"), ""); } diff --git a/localization/ekf_localizer/test/test_warning_message.cpp b/localization/ekf_localizer/test/test_warning_message.cpp index 2069969e0ae5e..ec7d3420d7f79 100644 --- a/localization/ekf_localizer/test/test_warning_message.cpp +++ b/localization/ekf_localizer/test/test_warning_message.cpp @@ -18,45 +18,45 @@ #include -TEST(PoseDelayStepWarningMessage, SmokeTest) +TEST(pose_delay_step_warning_message, SmokeTest) { EXPECT_STREQ( - poseDelayStepWarningMessage(6.0, 4.0).c_str(), + pose_delay_step_warning_message(6.0, 4.0).c_str(), "Pose delay exceeds the compensation limit, ignored. " "delay: 6.000[s], limit: 4.000[s]"); } -TEST(TwistDelayStepWarningMessage, SmokeTest) +TEST(twist_delay_step_warning_message, SmokeTest) { EXPECT_STREQ( - twistDelayStepWarningMessage(10.0, 6.0).c_str(), + twist_delay_step_warning_message(10.0, 6.0).c_str(), "Twist delay exceeds the compensation limit, ignored. " "delay: 10.000[s], limit: 6.000[s]"); } -TEST(PoseDelayTimeWarningMessage, SmokeTest) +TEST(pose_delay_time_warning_message, SmokeTest) { EXPECT_STREQ( - poseDelayTimeWarningMessage(-1.0).c_str(), + pose_delay_time_warning_message(-1.0).c_str(), "Pose time stamp is inappropriate, set delay to 0[s]. delay = -1.000"); EXPECT_STREQ( - poseDelayTimeWarningMessage(-0.4).c_str(), + pose_delay_time_warning_message(-0.4).c_str(), "Pose time stamp is inappropriate, set delay to 0[s]. delay = -0.400"); } -TEST(TwistDelayTimeWarningMessage, SmokeTest) +TEST(twist_delay_time_warning_message, SmokeTest) { EXPECT_STREQ( - twistDelayTimeWarningMessage(-1.0).c_str(), + twist_delay_time_warning_message(-1.0).c_str(), "Twist time stamp is inappropriate, set delay to 0[s]. delay = -1.000"); EXPECT_STREQ( - twistDelayTimeWarningMessage(-0.4).c_str(), + twist_delay_time_warning_message(-0.4).c_str(), "Twist time stamp is inappropriate, set delay to 0[s]. delay = -0.400"); } -TEST(MahalanobisWarningMessage, SmokeTest) +TEST(mahalanobis_warning_message, SmokeTest) { EXPECT_STREQ( - mahalanobisWarningMessage(1.0, 0.5).c_str(), + mahalanobis_warning_message(1.0, 0.5).c_str(), "The Mahalanobis distance 1.0000 is over the limit 0.5000."); } From a78822bab0f249da382cdfdba4588d2ba2da88dc Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Mon, 10 Jun 2024 16:18:22 +0900 Subject: [PATCH 060/142] refactor(ndt scan matcher): apply static analysis revert (#7398) Revert "refactor(ndt scan matcher): apply static analysis (#7278)" This reverts commit 3b90dc0b6159354d2529139fb4b09d3f24befeda. --- .../ndt_scan_matcher/diagnostics_module.hpp | 16 +- .../ndt_scan_matcher/hyper_parameters.hpp | 64 ++++---- .../ndt_scan_matcher_core.hpp | 2 + .../src/diagnostics_module.cpp | 16 +- .../src/map_update_module.cpp | 42 ++--- .../src/ndt_scan_matcher_core.cpp | 150 +++++++++--------- .../ndt_scan_matcher/test/test_util.hpp | 5 - 7 files changed, 145 insertions(+), 150 deletions(-) diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp index 6dfea386abaf8..4f7b5eff6521b 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp @@ -27,14 +27,14 @@ class DiagnosticsModule public: DiagnosticsModule(rclcpp::Node * node, const std::string & diagnostic_name); void clear(); - void add_key_value(const diagnostic_msgs::msg::KeyValue & key_value_msg); + void addKeyValue(const diagnostic_msgs::msg::KeyValue & key_value_msg); template - void add_key_value(const std::string & key, const T & value); - void update_level_and_message(const int8_t level, const std::string & message); + void addKeyValue(const std::string & key, const T & value); + void updateLevelAndMessage(const int8_t level, const std::string & message); void publish(const rclcpp::Time & publish_time_stamp); private: - [[nodiscard]] diagnostic_msgs::msg::DiagnosticArray create_diagnostics_array( + diagnostic_msgs::msg::DiagnosticArray createDiagnosticsArray( const rclcpp::Time & publish_time_stamp) const; rclcpp::Clock::SharedPtr clock_; @@ -44,17 +44,17 @@ class DiagnosticsModule }; template -void DiagnosticsModule::add_key_value(const std::string & key, const T & value) +void DiagnosticsModule::addKeyValue(const std::string & key, const T & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; key_value.value = std::to_string(value); - add_key_value(key_value); + addKeyValue(key_value); } template <> -void DiagnosticsModule::add_key_value(const std::string & key, const std::string & value); +void DiagnosticsModule::addKeyValue(const std::string & key, const std::string & value); template <> -void DiagnosticsModule::add_key_value(const std::string & key, const bool & value); +void DiagnosticsModule::addKeyValue(const std::string & key, const bool & value); #endif // NDT_SCAN_MATCHER__DIAGNOSTICS_MODULE_HPP_ diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp index 7002b4bf43a73..bc7bf1fe40d36 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp @@ -33,62 +33,62 @@ struct HyperParameters { struct Frame { - std::string base_frame{}; - std::string ndt_base_frame{}; - std::string map_frame{}; - } frame{}; + std::string base_frame; + std::string ndt_base_frame; + std::string map_frame; + } frame; struct SensorPoints { - double required_distance{}; - } sensor_points{}; + double required_distance; + } sensor_points; - pclomp::NdtParams ndt{}; - bool ndt_regularization_enable{}; + pclomp::NdtParams ndt; + bool ndt_regularization_enable; struct InitialPoseEstimation { - int64_t particles_num{}; - int64_t n_startup_trials{}; - } initial_pose_estimation{}; + int64_t particles_num; + int64_t n_startup_trials; + } initial_pose_estimation; struct Validation { - double lidar_topic_timeout_sec{}; - double initial_pose_timeout_sec{}; - double initial_pose_distance_tolerance_m{}; - double critical_upper_bound_exe_time_ms{}; - } validation{}; + double lidar_topic_timeout_sec; + double initial_pose_timeout_sec; + double initial_pose_distance_tolerance_m; + double critical_upper_bound_exe_time_ms; + } validation; struct ScoreEstimation { - ConvergedParamType converged_param_type{}; - double converged_param_transform_probability{}; - double converged_param_nearest_voxel_transformation_likelihood{}; + ConvergedParamType converged_param_type; + double converged_param_transform_probability; + double converged_param_nearest_voxel_transformation_likelihood; struct NoGroundPoints { - bool enable{}; - double z_margin_for_ground_removal{}; - } no_ground_points{}; - } score_estimation{}; + bool enable; + double z_margin_for_ground_removal; + } no_ground_points; + } score_estimation; struct Covariance { - std::array output_pose_covariance{}; + std::array output_pose_covariance; struct CovarianceEstimation { - bool enable{}; - std::vector initial_pose_offset_model{}; - } covariance_estimation{}; - } covariance{}; + bool enable; + std::vector initial_pose_offset_model; + } covariance_estimation; + } covariance; struct DynamicMapLoading { - double update_distance{}; - double map_radius{}; - double lidar_radius{}; - } dynamic_map_loading{}; + double update_distance; + double map_radius; + double lidar_radius; + } dynamic_map_loading; public: explicit HyperParameters(rclcpp::Node * node) diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp index cbd2797c57922..4f8042d106c75 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp @@ -131,6 +131,8 @@ class NDTScanMatcher : public rclcpp::Node static int count_oscillation(const std::vector & result_pose_msg_array); + std::array rotate_covariance( + const std::array & src_covariance, const Eigen::Matrix3d & rotation) const; std::array estimate_covariance( const pclomp::NdtResult & ndt_result, const Eigen::Matrix4f & initial_pose_matrix, const rclcpp::Time & sensor_ros_time); diff --git a/localization/ndt_scan_matcher/src/diagnostics_module.cpp b/localization/ndt_scan_matcher/src/diagnostics_module.cpp index 805ee676c5e04..1e08ebb89f51e 100644 --- a/localization/ndt_scan_matcher/src/diagnostics_module.cpp +++ b/localization/ndt_scan_matcher/src/diagnostics_module.cpp @@ -41,7 +41,7 @@ void DiagnosticsModule::clear() diagnostics_status_msg_.message = ""; } -void DiagnosticsModule::add_key_value(const diagnostic_msgs::msg::KeyValue & key_value_msg) +void DiagnosticsModule::addKeyValue(const diagnostic_msgs::msg::KeyValue & key_value_msg) { auto it = std::find_if( std::begin(diagnostics_status_msg_.values), std::end(diagnostics_status_msg_.values), @@ -55,24 +55,24 @@ void DiagnosticsModule::add_key_value(const diagnostic_msgs::msg::KeyValue & key } template <> -void DiagnosticsModule::add_key_value(const std::string & key, const std::string & value) +void DiagnosticsModule::addKeyValue(const std::string & key, const std::string & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; key_value.value = value; - add_key_value(key_value); + addKeyValue(key_value); } template <> -void DiagnosticsModule::add_key_value(const std::string & key, const bool & value) +void DiagnosticsModule::addKeyValue(const std::string & key, const bool & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; key_value.value = value ? "True" : "False"; - add_key_value(key_value); + addKeyValue(key_value); } -void DiagnosticsModule::update_level_and_message(const int8_t level, const std::string & message) +void DiagnosticsModule::updateLevelAndMessage(const int8_t level, const std::string & message) { if ((level > diagnostic_msgs::msg::DiagnosticStatus::OK)) { if (!diagnostics_status_msg_.message.empty()) { @@ -87,10 +87,10 @@ void DiagnosticsModule::update_level_and_message(const int8_t level, const std:: void DiagnosticsModule::publish(const rclcpp::Time & publish_time_stamp) { - diagnostics_pub_->publish(create_diagnostics_array(publish_time_stamp)); + diagnostics_pub_->publish(createDiagnosticsArray(publish_time_stamp)); } -diagnostic_msgs::msg::DiagnosticArray DiagnosticsModule::create_diagnostics_array( +diagnostic_msgs::msg::DiagnosticArray DiagnosticsModule::createDiagnosticsArray( const rclcpp::Time & publish_time_stamp) const { diagnostic_msgs::msg::DiagnosticArray diagnostics_msg; diff --git a/localization/ndt_scan_matcher/src/map_update_module.cpp b/localization/ndt_scan_matcher/src/map_update_module.cpp index 32e5a0f2a7c3c..40f0b1f4465fa 100644 --- a/localization/ndt_scan_matcher/src/map_update_module.cpp +++ b/localization/ndt_scan_matcher/src/map_update_module.cpp @@ -53,23 +53,23 @@ void MapUpdateModule::callback_timer( std::unique_ptr & diagnostics_ptr) { // check is_activated - diagnostics_ptr->add_key_value("is_activated", is_activated); + diagnostics_ptr->addKeyValue("is_activated", is_activated); if (!is_activated) { std::stringstream message; message << "Node is not activated."; - diagnostics_ptr->update_level_and_message( + diagnostics_ptr->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return; } // check is_set_last_update_position const bool is_set_last_update_position = (position != std::nullopt); - diagnostics_ptr->add_key_value("is_set_last_update_position", is_set_last_update_position); + diagnostics_ptr->addKeyValue("is_set_last_update_position", is_set_last_update_position); if (!is_set_last_update_position) { std::stringstream message; message << "Cannot find the reference position for map update." << "Please check if the EKF odometry is provided to NDT."; - diagnostics_ptr->update_level_and_message( + diagnostics_ptr->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return; } @@ -92,11 +92,11 @@ bool MapUpdateModule::should_update_map( const double distance = std::hypot(dx, dy); // check distance_last_update_position_to_current_position - diagnostics_ptr->add_key_value("distance_last_update_position_to_current_position", distance); + diagnostics_ptr->addKeyValue("distance_last_update_position_to_current_position", distance); if (distance + param_.lidar_radius > param_.map_radius) { std::stringstream message; message << "Dynamic map loading is not keeping up."; - diagnostics_ptr->update_level_and_message( + diagnostics_ptr->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); // If the map does not keep up with the current position, @@ -110,7 +110,7 @@ bool MapUpdateModule::should_update_map( void MapUpdateModule::update_map( const geometry_msgs::msg::Point & position, std::unique_ptr & diagnostics_ptr) { - diagnostics_ptr->add_key_value("is_need_rebuild", need_rebuild_); + diagnostics_ptr->addKeyValue("is_need_rebuild", need_rebuild_); // If the current position is super far from the previous loading position, // lock and rebuild ndt_ptr_ @@ -130,14 +130,14 @@ void MapUpdateModule::update_map( const bool updated = update_ndt(position, *ndt_ptr_, diagnostics_ptr); // check is_updated_map - diagnostics_ptr->add_key_value("is_updated_map", updated); + diagnostics_ptr->addKeyValue("is_updated_map", updated); if (!updated) { std::stringstream message; message << "update_ndt failed. If this happens with initial position estimation, make sure that" << "(1) the initial position matches the pcd map and (2) the map_loader is working " "properly."; - diagnostics_ptr->update_level_and_message( + diagnostics_ptr->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); RCLCPP_ERROR_STREAM_THROTTLE(logger_, *clock_, 1000, message.str()); last_update_position_ = position; @@ -157,7 +157,7 @@ void MapUpdateModule::update_map( const bool updated = update_ndt(position, *secondary_ndt_ptr_, diagnostics_ptr); // check is_updated_map - diagnostics_ptr->add_key_value("is_updated_map", updated); + diagnostics_ptr->addKeyValue("is_updated_map", updated); if (!updated) { last_update_position_ = position; return; @@ -189,7 +189,7 @@ bool MapUpdateModule::update_ndt( const geometry_msgs::msg::Point & position, NdtType & ndt, std::unique_ptr & diagnostics_ptr) { - diagnostics_ptr->add_key_value("maps_size_before", ndt.getCurrentMapIDs().size()); + diagnostics_ptr->addKeyValue("maps_size_before", ndt.getCurrentMapIDs().size()); auto request = std::make_shared(); @@ -199,11 +199,11 @@ bool MapUpdateModule::update_ndt( request->cached_ids = ndt.getCurrentMapIDs(); while (!pcd_loader_client_->wait_for_service(std::chrono::seconds(1)) && rclcpp::ok()) { - diagnostics_ptr->add_key_value("is_succeed_call_pcd_loader", false); + diagnostics_ptr->addKeyValue("is_succeed_call_pcd_loader", false); std::stringstream message; message << "Waiting for pcd loader service. Check the pointcloud_map_loader."; - diagnostics_ptr->update_level_and_message( + diagnostics_ptr->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -217,23 +217,23 @@ bool MapUpdateModule::update_ndt( while (status != std::future_status::ready) { // check is_succeed_call_pcd_loader if (!rclcpp::ok()) { - diagnostics_ptr->add_key_value("is_succeed_call_pcd_loader", false); + diagnostics_ptr->addKeyValue("is_succeed_call_pcd_loader", false); std::stringstream message; message << "pcd_loader service is not working."; - diagnostics_ptr->update_level_and_message( + diagnostics_ptr->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; // No update } status = result.wait_for(std::chrono::seconds(1)); } - diagnostics_ptr->add_key_value("is_succeed_call_pcd_loader", true); + diagnostics_ptr->addKeyValue("is_succeed_call_pcd_loader", true); auto & maps_to_add = result.get()->new_pointcloud_with_ids; auto & map_ids_to_remove = result.get()->ids_to_remove; - diagnostics_ptr->add_key_value("maps_to_add_size", maps_to_add.size()); - diagnostics_ptr->add_key_value("maps_to_remove_size", map_ids_to_remove.size()); + diagnostics_ptr->addKeyValue("maps_to_add_size", maps_to_add.size()); + diagnostics_ptr->addKeyValue("maps_to_remove_size", map_ids_to_remove.size()); if (maps_to_add.empty() && map_ids_to_remove.empty()) { return false; // No update @@ -261,9 +261,9 @@ bool MapUpdateModule::update_ndt( const auto duration_micro_sec = std::chrono::duration_cast(exe_end_time - exe_start_time).count(); const auto exe_time = static_cast(duration_micro_sec) / 1000.0; - diagnostics_ptr->add_key_value("map_update_execution_time", exe_time); - diagnostics_ptr->add_key_value("maps_size_after", ndt.getCurrentMapIDs().size()); - diagnostics_ptr->add_key_value("is_succeed_call_pcd_loader", true); + diagnostics_ptr->addKeyValue("map_update_execution_time", exe_time); + diagnostics_ptr->addKeyValue("maps_size_after", ndt.getCurrentMapIDs().size()); + diagnostics_ptr->addKeyValue("is_succeed_call_pcd_loader", true); return true; // Updated } diff --git a/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp b/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp index c61e243caab31..349f924019c28 100644 --- a/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp +++ b/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp @@ -62,28 +62,6 @@ Eigen::Matrix2d find_rotation_matrix_aligning_covariance_to_principal_axes( throw std::runtime_error("Eigen solver failed. Return output_pose_covariance value."); } -std::array rotate_covariance( - const std::array & src_covariance, const Eigen::Matrix3d & rotation) -{ - std::array ret_covariance = src_covariance; - - Eigen::Matrix3d src_cov; - src_cov << src_covariance[0], src_covariance[1], src_covariance[2], src_covariance[6], - src_covariance[7], src_covariance[8], src_covariance[12], src_covariance[13], - src_covariance[14]; - - Eigen::Matrix3d ret_cov; - ret_cov = rotation * src_cov * rotation.transpose(); - - for (Eigen::Index i = 0; i < 3; ++i) { - ret_covariance[i] = ret_cov(0, i); - ret_covariance[i + 6] = ret_cov(1, i); - ret_covariance[i + 12] = ret_cov(2, i); - } - - return ret_covariance; -} - NDTScanMatcher::NDTScanMatcher(const rclcpp::NodeOptions & options) : Node("ndt_scan_matcher", options), tf2_broadcaster_(*this), @@ -219,7 +197,7 @@ void NDTScanMatcher::callback_timer() diagnostics_map_update_->clear(); - diagnostics_map_update_->add_key_value("timer_callback_time_stamp", ros_time_now.nanoseconds()); + diagnostics_map_update_->addKeyValue("timer_callback_time_stamp", ros_time_now.nanoseconds()); map_update_module_->callback_timer(is_activated_, latest_ekf_position_, diagnostics_map_update_); @@ -239,16 +217,16 @@ void NDTScanMatcher::callback_initial_pose( void NDTScanMatcher::callback_initial_pose_main( const geometry_msgs::msg::PoseWithCovarianceStamped::ConstSharedPtr initial_pose_msg_ptr) { - diagnostics_initial_pose_->add_key_value( + diagnostics_initial_pose_->addKeyValue( "topic_time_stamp", static_cast(initial_pose_msg_ptr->header.stamp).nanoseconds()); // check is_activated - diagnostics_initial_pose_->add_key_value("is_activated", static_cast(is_activated_)); + diagnostics_initial_pose_->addKeyValue("is_activated", static_cast(is_activated_)); if (!is_activated_) { std::stringstream message; message << "Node is not activated."; - diagnostics_initial_pose_->update_level_and_message( + diagnostics_initial_pose_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return; } @@ -256,13 +234,13 @@ void NDTScanMatcher::callback_initial_pose_main( // check is_expected_frame_id const bool is_expected_frame_id = (initial_pose_msg_ptr->header.frame_id == param_.frame.map_frame); - diagnostics_initial_pose_->add_key_value("is_expected_frame_id", is_expected_frame_id); + diagnostics_initial_pose_->addKeyValue("is_expected_frame_id", is_expected_frame_id); if (!is_expected_frame_id) { std::stringstream message; message << "Received initial pose message with frame_id " << initial_pose_msg_ptr->header.frame_id << ", but expected " << param_.frame.map_frame << ". Please check the frame_id in the input topic and ensure it is correct."; - diagnostics_initial_pose_->update_level_and_message( + diagnostics_initial_pose_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); return; } @@ -281,7 +259,7 @@ void NDTScanMatcher::callback_regularization_pose( { diagnostics_regularization_pose_->clear(); - diagnostics_regularization_pose_->add_key_value( + diagnostics_regularization_pose_->addKeyValue( "topic_time_stamp", static_cast(pose_conv_msg_ptr->header.stamp).nanoseconds()); regularization_pose_buffer_->push_back(pose_conv_msg_ptr); @@ -304,11 +282,11 @@ void NDTScanMatcher::callback_sensor_points( const size_t error_skipping_publish_num = 5; skipping_publish_num = ((is_succeed_scan_matching || !is_activated_) ? 0 : (skipping_publish_num + 1)); - diagnostics_scan_points_->add_key_value("skipping_publish_num", skipping_publish_num); + diagnostics_scan_points_->addKeyValue("skipping_publish_num", skipping_publish_num); if (skipping_publish_num >= error_skipping_publish_num) { std::stringstream message; message << "skipping_publish_num exceed limit (" << skipping_publish_num << " times)."; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } @@ -322,15 +300,15 @@ bool NDTScanMatcher::callback_sensor_points_main( // check topic_time_stamp const rclcpp::Time sensor_ros_time = sensor_points_msg_in_sensor_frame->header.stamp; - diagnostics_scan_points_->add_key_value("topic_time_stamp", sensor_ros_time.nanoseconds()); + diagnostics_scan_points_->addKeyValue("topic_time_stamp", sensor_ros_time.nanoseconds()); // check sensor_points_size const size_t sensor_points_size = sensor_points_msg_in_sensor_frame->width; - diagnostics_scan_points_->add_key_value("sensor_points_size", sensor_points_size); + diagnostics_scan_points_->addKeyValue("sensor_points_size", sensor_points_size); if (sensor_points_size == 0) { std::stringstream message; message << "Sensor points is empty."; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -338,14 +316,14 @@ bool NDTScanMatcher::callback_sensor_points_main( // check sensor_points_delay_time_sec const double sensor_points_delay_time_sec = (this->now() - sensor_points_msg_in_sensor_frame->header.stamp).seconds(); - diagnostics_scan_points_->add_key_value( + diagnostics_scan_points_->addKeyValue( "sensor_points_delay_time_sec", sensor_points_delay_time_sec); if (sensor_points_delay_time_sec > param_.validation.lidar_topic_timeout_sec) { std::stringstream message; message << "sensor points is experiencing latency." << "The delay time is " << sensor_points_delay_time_sec << "[sec] " << "(the tolerance is " << param_.validation.lidar_topic_timeout_sec << "[sec])."; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); // If the delay time of the LiDAR topic exceeds the delay compensation time of ekf_localizer, @@ -374,13 +352,13 @@ bool NDTScanMatcher::callback_sensor_points_main( std::stringstream message; message << ex.what() << ". Please publish TF " << sensor_frame << " to " << param_.frame.base_frame; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); RCLCPP_ERROR_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); - diagnostics_scan_points_->add_key_value("is_succeed_transform_sensor_points", false); + diagnostics_scan_points_->addKeyValue("is_succeed_transform_sensor_points", false); return false; } - diagnostics_scan_points_->add_key_value("is_succeed_transform_sensor_points", true); + diagnostics_scan_points_->addKeyValue("is_succeed_transform_sensor_points", true); // check sensor_points_max_distance double max_distance = 0.0; @@ -389,12 +367,12 @@ bool NDTScanMatcher::callback_sensor_points_main( max_distance = std::max(max_distance, distance); } - diagnostics_scan_points_->add_key_value("sensor_points_max_distance", max_distance); + diagnostics_scan_points_->addKeyValue("sensor_points_max_distance", max_distance); if (max_distance < param_.sensor_points.required_distance) { std::stringstream message; message << "Max distance of sensor points = " << std::fixed << std::setprecision(3) << max_distance << " [m] < " << param_.sensor_points.required_distance << " [m]"; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -406,11 +384,11 @@ bool NDTScanMatcher::callback_sensor_points_main( ndt_ptr_->setInputSource(sensor_points_in_baselink_frame); // check is_activated - diagnostics_scan_points_->add_key_value("is_activated", static_cast(is_activated_)); + diagnostics_scan_points_->addKeyValue("is_activated", static_cast(is_activated_)); if (!is_activated_) { std::stringstream message; message << "Node is not activated."; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -421,12 +399,12 @@ bool NDTScanMatcher::callback_sensor_points_main( // check is_succeed_interpolate_initial_pose const bool is_succeed_interpolate_initial_pose = (interpolation_result_opt != std::nullopt); - diagnostics_scan_points_->add_key_value( + diagnostics_scan_points_->addKeyValue( "is_succeed_interpolate_initial_pose", is_succeed_interpolate_initial_pose); if (!is_succeed_interpolate_initial_pose) { std::stringstream message; message << "Couldn't interpolate pose. Please check the initial pose topic"; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -442,11 +420,11 @@ bool NDTScanMatcher::callback_sensor_points_main( // check is_set_map_points const bool is_set_map_points = (ndt_ptr_->getInputTarget() != nullptr); - diagnostics_scan_points_->add_key_value("is_set_map_points", is_set_map_points); + diagnostics_scan_points_->addKeyValue("is_set_map_points", is_set_map_points); if (!is_set_map_points) { std::stringstream message; message << "Map points is not set."; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -466,33 +444,31 @@ bool NDTScanMatcher::callback_sensor_points_main( } // check iteration_num - diagnostics_scan_points_->add_key_value("iteration_num", ndt_result.iteration_num); + diagnostics_scan_points_->addKeyValue("iteration_num", ndt_result.iteration_num); const bool is_ok_iteration_num = (ndt_result.iteration_num < ndt_ptr_->getMaximumIterations()); if (!is_ok_iteration_num) { std::stringstream message; message << "The number of iterations has reached its upper limit. The number of iterations: " << ndt_result.iteration_num << ", Limit: " << ndt_ptr_->getMaximumIterations() << "."; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } // check local_optimal_solution_oscillation_num constexpr int oscillation_num_threshold = 10; const int oscillation_num = count_oscillation(transformation_msg_array); - diagnostics_scan_points_->add_key_value( - "local_optimal_solution_oscillation_num", oscillation_num); + diagnostics_scan_points_->addKeyValue("local_optimal_solution_oscillation_num", oscillation_num); const bool is_local_optimal_solution_oscillation = (oscillation_num > oscillation_num_threshold); if (is_local_optimal_solution_oscillation) { std::stringstream message; message << "There is a possibility of oscillation in a local minimum"; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } // check score - diagnostics_scan_points_->add_key_value( - "transform_probability", ndt_result.transform_probability); - diagnostics_scan_points_->add_key_value( + diagnostics_scan_points_->addKeyValue("transform_probability", ndt_result.transform_probability); + diagnostics_scan_points_->addKeyValue( "nearest_voxel_transformation_likelihood", ndt_result.nearest_voxel_transformation_likelihood); double score = 0.0; double score_threshold = 0.0; @@ -508,7 +484,7 @@ bool NDTScanMatcher::callback_sensor_points_main( } else { std::stringstream message; message << "Unknown converged param type. Please check `score_estimation.converged_param_type`"; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); return false; } @@ -550,7 +526,7 @@ bool NDTScanMatcher::callback_sensor_points_main( std::stringstream message; message << "Score is below the threshold. Score: " << score << ", Threshold: " << score_threshold; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); RCLCPP_WARN_STREAM(this->get_logger(), message.str()); } @@ -577,13 +553,13 @@ bool NDTScanMatcher::callback_sensor_points_main( // check distance_initial_to_result const auto distance_initial_to_result = static_cast( norm(interpolation_result.interpolated_pose.pose.pose.position, result_pose_msg.position)); - diagnostics_scan_points_->add_key_value("distance_initial_to_result", distance_initial_to_result); + diagnostics_scan_points_->addKeyValue("distance_initial_to_result", distance_initial_to_result); const double warn_distance_initial_to_result = 3.0; if (distance_initial_to_result > warn_distance_initial_to_result) { std::stringstream message; message << "distance_initial_to_result is too large (" << distance_initial_to_result << " [m])."; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } @@ -592,11 +568,11 @@ bool NDTScanMatcher::callback_sensor_points_main( const auto duration_micro_sec = std::chrono::duration_cast(exe_end_time - exe_start_time).count(); const auto exe_time = static_cast(duration_micro_sec) / 1000.0f; - diagnostics_scan_points_->add_key_value("execution_time", exe_time); + diagnostics_scan_points_->addKeyValue("execution_time", exe_time); if (exe_time > param_.validation.critical_upper_bound_exe_time_ms) { std::stringstream message; message << "NDT exe time is too long (took " << exe_time << " [ms])."; - diagnostics_scan_points_->update_level_and_message( + diagnostics_scan_points_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } @@ -668,7 +644,7 @@ void NDTScanMatcher::transform_sensor_measurement( geometry_msgs::msg::TransformStamped transform; try { transform = tf2_buffer_.lookupTransform(target_frame, source_frame, tf2::TimePointZero); - } catch (const tf2::TransformException & ex) { + } catch (tf2::TransformException & ex) { throw; } @@ -809,6 +785,28 @@ int NDTScanMatcher::count_oscillation( return max_oscillation_cnt; } +std::array NDTScanMatcher::rotate_covariance( + const std::array & src_covariance, const Eigen::Matrix3d & rotation) const +{ + std::array ret_covariance = src_covariance; + + Eigen::Matrix3d src_cov; + src_cov << src_covariance[0], src_covariance[1], src_covariance[2], src_covariance[6], + src_covariance[7], src_covariance[8], src_covariance[12], src_covariance[13], + src_covariance[14]; + + Eigen::Matrix3d ret_cov; + ret_cov = rotation * src_cov * rotation.transpose(); + + for (Eigen::Index i = 0; i < 3; ++i) { + ret_covariance[i] = ret_cov(0, i); + ret_covariance[i + 6] = ret_cov(1, i); + ret_covariance[i + 12] = ret_cov(2, i); + } + + return ret_covariance; +} + std::array NDTScanMatcher::estimate_covariance( const pclomp::NdtResult & ndt_result, const Eigen::Matrix4f & initial_pose_matrix, const rclcpp::Time & sensor_ros_time) @@ -908,7 +906,7 @@ void NDTScanMatcher::service_trigger_node( const rclcpp::Time ros_time_now = this->now(); diagnostics_trigger_node_->clear(); - diagnostics_trigger_node_->add_key_value("service_call_time_stamp", ros_time_now.nanoseconds()); + diagnostics_trigger_node_->addKeyValue("service_call_time_stamp", ros_time_now.nanoseconds()); is_activated_ = req->data; if (is_activated_) { @@ -916,8 +914,8 @@ void NDTScanMatcher::service_trigger_node( } res->success = true; - diagnostics_trigger_node_->add_key_value("is_activated", static_cast(is_activated_)); - diagnostics_trigger_node_->add_key_value("is_succeed_service", res->success); + diagnostics_trigger_node_->addKeyValue("is_activated", static_cast(is_activated_)); + diagnostics_trigger_node_->addKeyValue("is_succeed_service", res->success); diagnostics_trigger_node_->publish(ros_time_now); } @@ -929,17 +927,17 @@ void NDTScanMatcher::service_ndt_align( diagnostics_ndt_align_->clear(); - diagnostics_ndt_align_->add_key_value("service_call_time_stamp", ros_time_now.nanoseconds()); + diagnostics_ndt_align_->addKeyValue("service_call_time_stamp", ros_time_now.nanoseconds()); service_ndt_align_main(req, res); // check is_succeed_service bool is_succeed_service = res->success; - diagnostics_ndt_align_->add_key_value("is_succeed_service", is_succeed_service); + diagnostics_ndt_align_->addKeyValue("is_succeed_service", is_succeed_service); if (!is_succeed_service) { std::stringstream message; message << "ndt_align_service is failed."; - diagnostics_ndt_align_->update_level_and_message( + diagnostics_ndt_align_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } @@ -962,17 +960,17 @@ void NDTScanMatcher::service_ndt_align_main( // "gnss_link" instead of "map". The ndt_align is designed to return identity when this issue // occurs. However, in the future, converting to a non-existent frame_id should be prohibited. - diagnostics_ndt_align_->add_key_value("is_succeed_transform_initial_pose", false); + diagnostics_ndt_align_->addKeyValue("is_succeed_transform_initial_pose", false); std::stringstream message; message << "Please publish TF " << target_frame.c_str() << " to " << source_frame.c_str(); - diagnostics_ndt_align_->update_level_and_message( + diagnostics_ndt_align_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); RCLCPP_ERROR_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); res->success = false; return; } - diagnostics_ndt_align_->add_key_value("is_succeed_transform_initial_pose", true); + diagnostics_ndt_align_->addKeyValue("is_succeed_transform_initial_pose", true); // transform pose_frame to map_frame const auto initial_pose_msg_in_map_frame = transform(req->pose_with_covariance, transform_s2t); @@ -984,11 +982,11 @@ void NDTScanMatcher::service_ndt_align_main( // check is_set_map_points bool is_set_map_points = (ndt_ptr_->getInputTarget() != nullptr); - diagnostics_ndt_align_->add_key_value("is_set_map_points", is_set_map_points); + diagnostics_ndt_align_->addKeyValue("is_set_map_points", is_set_map_points); if (!is_set_map_points) { std::stringstream message; message << "No InputTarget. Please check the map file and the map_loader service"; - diagnostics_ndt_align_->update_level_and_message( + diagnostics_ndt_align_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); RCLCPP_WARN_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); res->success = false; @@ -997,11 +995,11 @@ void NDTScanMatcher::service_ndt_align_main( // check is_set_sensor_points bool is_set_sensor_points = (ndt_ptr_->getInputSource() != nullptr); - diagnostics_ndt_align_->add_key_value("is_set_sensor_points", is_set_sensor_points); + diagnostics_ndt_align_->addKeyValue("is_set_sensor_points", is_set_sensor_points); if (!is_set_sensor_points) { std::stringstream message; message << "No InputSource. Please check the input lidar topic"; - diagnostics_ndt_align_->update_level_and_message( + diagnostics_ndt_align_->updateLevelAndMessage( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); RCLCPP_WARN_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); res->success = false; @@ -1109,7 +1107,7 @@ geometry_msgs::msg::PoseWithCovarianceStamped NDTScanMatcher::align_pose( result_pose_with_cov_msg.pose.pose = best_particle_ptr->result_pose; output_pose_with_cov_to_log(get_logger(), "align_pose_output", result_pose_with_cov_msg); - diagnostics_ndt_align_->add_key_value("best_particle_score", best_particle_ptr->score); + diagnostics_ndt_align_->addKeyValue("best_particle_score", best_particle_ptr->score); return result_pose_with_cov_msg; } diff --git a/localization/ndt_scan_matcher/test/test_util.hpp b/localization/ndt_scan_matcher/test/test_util.hpp index dbf055d3c95d3..2f78827abf891 100644 --- a/localization/ndt_scan_matcher/test/test_util.hpp +++ b/localization/ndt_scan_matcher/test/test_util.hpp @@ -15,13 +15,8 @@ #ifndef TEST_UTIL_HPP_ #define TEST_UTIL_HPP_ -#include -#include - -#include #include #include -#include inline pcl::PointCloud make_sample_half_cubic_pcd() { From badc3e779b8ff64e130cae09fb7dfb9a52bd4df3 Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Mon, 10 Jun 2024 16:47:15 +0900 Subject: [PATCH 061/142] refactor(pose_initializer): apply static analysis (#7355) * apply clang-tidy and cpplint Signed-off-by: Yamato Ando * apply cppcheck Signed-off-by: Yamato Ando * style(pre-commit): autofix --------- Signed-off-by: Yamato Ando Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../pose_initializer/copy_vector_to_array.hpp | 2 +- .../src/pose_initializer/gnss_module.cpp | 13 ++++--- .../src/pose_initializer/gnss_module.hpp | 2 ++ .../src/pose_initializer/ndt_module.cpp | 4 +-- .../pose_initializer_core.cpp | 34 ++++++++----------- .../pose_initializer_core.hpp | 5 ++- .../src/pose_initializer/yabloc_module.cpp | 4 +-- .../test/test_copy_vector_to_array.cpp | 6 ++-- 8 files changed, 36 insertions(+), 34 deletions(-) diff --git a/localization/pose_initializer/src/pose_initializer/copy_vector_to_array.hpp b/localization/pose_initializer/src/pose_initializer/copy_vector_to_array.hpp index 1274092ae4993..33d95c58a726b 100644 --- a/localization/pose_initializer/src/pose_initializer/copy_vector_to_array.hpp +++ b/localization/pose_initializer/src/pose_initializer/copy_vector_to_array.hpp @@ -40,7 +40,7 @@ template std::array get_covariance_parameter(NodeT * node, const std::string & name) { const auto parameter = node->template declare_parameter>(name); - std::array covariance; + std::array covariance{}; copy_vector_to_array(parameter, covariance); return covariance; } diff --git a/localization/pose_initializer/src/pose_initializer/gnss_module.cpp b/localization/pose_initializer/src/pose_initializer/gnss_module.cpp index e8762c8c6f493..b746828e33b1c 100644 --- a/localization/pose_initializer/src/pose_initializer/gnss_module.cpp +++ b/localization/pose_initializer/src/pose_initializer/gnss_module.cpp @@ -19,13 +19,18 @@ #include -GnssModule::GnssModule(rclcpp::Node * node) : fitter_(node) +GnssModule::GnssModule(rclcpp::Node * node) +: fitter_(node), + clock_(node->get_clock()), + timeout_(node->declare_parameter("gnss_pose_timeout")) { sub_gnss_pose_ = node->create_subscription( - "gnss_pose_cov", 1, [this](PoseWithCovarianceStamped::ConstSharedPtr msg) { pose_ = msg; }); + "gnss_pose_cov", 1, std::bind(&GnssModule::on_pose, this, std::placeholders::_1)); +} - clock_ = node->get_clock(); - timeout_ = node->declare_parameter("gnss_pose_timeout"); +void GnssModule::on_pose(PoseWithCovarianceStamped::ConstSharedPtr msg) +{ + pose_ = msg; } geometry_msgs::msg::PoseWithCovarianceStamped GnssModule::get_pose() diff --git a/localization/pose_initializer/src/pose_initializer/gnss_module.hpp b/localization/pose_initializer/src/pose_initializer/gnss_module.hpp index 8c3bc658e7e7a..fd490b00d0f70 100644 --- a/localization/pose_initializer/src/pose_initializer/gnss_module.hpp +++ b/localization/pose_initializer/src/pose_initializer/gnss_module.hpp @@ -30,6 +30,8 @@ class GnssModule PoseWithCovarianceStamped get_pose(); private: + void on_pose(PoseWithCovarianceStamped::ConstSharedPtr msg); + map_height_fitter::MapHeightFitter fitter_; rclcpp::Clock::SharedPtr clock_; rclcpp::Subscription::SharedPtr sub_gnss_pose_; diff --git a/localization/pose_initializer/src/pose_initializer/ndt_module.cpp b/localization/pose_initializer/src/pose_initializer/ndt_module.cpp index 6e11f8fe74212..1f657545e687c 100644 --- a/localization/pose_initializer/src/pose_initializer/ndt_module.cpp +++ b/localization/pose_initializer/src/pose_initializer/ndt_module.cpp @@ -23,9 +23,9 @@ using ServiceException = component_interface_utils::ServiceException; using Initialize = localization_interface::Initialize; using PoseWithCovarianceStamped = geometry_msgs::msg::PoseWithCovarianceStamped; -NdtModule::NdtModule(rclcpp::Node * node) : logger_(node->get_logger()) +NdtModule::NdtModule(rclcpp::Node * node) +: logger_(node->get_logger()), cli_align_(node->create_client("ndt_align")) { - cli_align_ = node->create_client("ndt_align"); } PoseWithCovarianceStamped NdtModule::align_pose(const PoseWithCovarianceStamped & pose) diff --git a/localization/pose_initializer/src/pose_initializer/pose_initializer_core.cpp b/localization/pose_initializer/src/pose_initializer/pose_initializer_core.cpp index 2fc7d61890837..1111547b393e7 100644 --- a/localization/pose_initializer/src/pose_initializer/pose_initializer_core.cpp +++ b/localization/pose_initializer/src/pose_initializer/pose_initializer_core.cpp @@ -67,28 +67,24 @@ PoseInitializer::PoseInitializer(const rclcpp::NodeOptions & options) throw std::invalid_argument( "Could not set user defined initial pose. The size of initial_pose is " + std::to_string(initial_pose_array.size()) + ". It must be 7."); - } else if ( + } + if ( std::abs(initial_pose_array[3]) < 1e-6 && std::abs(initial_pose_array[4]) < 1e-6 && std::abs(initial_pose_array[5]) < 1e-6 && std::abs(initial_pose_array[6]) < 1e-6) { throw std::invalid_argument("Input quaternion is invalid. All elements are close to zero."); - } else { - geometry_msgs::msg::Pose initial_pose; - initial_pose.position.x = initial_pose_array[0]; - initial_pose.position.y = initial_pose_array[1]; - initial_pose.position.z = initial_pose_array[2]; - initial_pose.orientation.x = initial_pose_array[3]; - initial_pose.orientation.y = initial_pose_array[4]; - initial_pose.orientation.z = initial_pose_array[5]; - initial_pose.orientation.w = initial_pose_array[6]; - - set_user_defined_initial_pose(initial_pose, true); } - } -} -PoseInitializer::~PoseInitializer() -{ - // to delete gnss module + geometry_msgs::msg::Pose initial_pose; + initial_pose.position.x = initial_pose_array[0]; + initial_pose.position.y = initial_pose_array[1]; + initial_pose.position.z = initial_pose_array[2]; + initial_pose.orientation.x = initial_pose_array[3]; + initial_pose.orientation.y = initial_pose_array[4]; + initial_pose.orientation.z = initial_pose_array[5]; + initial_pose.orientation.w = initial_pose_array[6]; + + set_user_defined_initial_pose(initial_pose, true); + } } void PoseInitializer::change_state(State::Message::_state_type state) @@ -175,7 +171,7 @@ void PoseInitializer::on_initialize( std::stringstream message; message << "No input pose_with_covariance. If you want to use DIRECT method, please input " "pose_with_covariance."; - RCLCPP_ERROR(get_logger(), message.str().c_str()); + RCLCPP_ERROR_STREAM(get_logger(), message.str()); throw ServiceException( autoware_common_msgs::msg::ResponseStatus::PARAMETER_ERROR, message.str()); } @@ -186,7 +182,7 @@ void PoseInitializer::on_initialize( } else { std::stringstream message; message << "Unknown method type (=" << std::to_string(req->method) << ")"; - RCLCPP_ERROR(get_logger(), message.str().c_str()); + RCLCPP_ERROR_STREAM(get_logger(), message.str()); throw ServiceException( autoware_common_msgs::msg::ResponseStatus::PARAMETER_ERROR, message.str()); } diff --git a/localization/pose_initializer/src/pose_initializer/pose_initializer_core.hpp b/localization/pose_initializer/src/pose_initializer/pose_initializer_core.hpp index eeba71b90129b..d80fb26fdd41f 100644 --- a/localization/pose_initializer/src/pose_initializer/pose_initializer_core.hpp +++ b/localization/pose_initializer/src/pose_initializer/pose_initializer_core.hpp @@ -35,7 +35,6 @@ class PoseInitializer : public rclcpp::Node { public: explicit PoseInitializer(const rclcpp::NodeOptions & options); - ~PoseInitializer(); private: using ServiceException = component_interface_utils::ServiceException; @@ -48,8 +47,8 @@ class PoseInitializer : public rclcpp::Node component_interface_utils::Publisher::SharedPtr pub_state_; component_interface_utils::Service::SharedPtr srv_initialize_; State::Message state_; - std::array output_pose_covariance_; - std::array gnss_particle_covariance_; + std::array output_pose_covariance_{}; + std::array gnss_particle_covariance_{}; std::unique_ptr gnss_; std::unique_ptr ndt_; std::unique_ptr yabloc_; diff --git a/localization/pose_initializer/src/pose_initializer/yabloc_module.cpp b/localization/pose_initializer/src/pose_initializer/yabloc_module.cpp index f79f1e58e8d62..204f2289adbf4 100644 --- a/localization/pose_initializer/src/pose_initializer/yabloc_module.cpp +++ b/localization/pose_initializer/src/pose_initializer/yabloc_module.cpp @@ -23,9 +23,9 @@ using ServiceException = component_interface_utils::ServiceException; using Initialize = localization_interface::Initialize; using PoseWithCovarianceStamped = geometry_msgs::msg::PoseWithCovarianceStamped; -YabLocModule::YabLocModule(rclcpp::Node * node) : logger_(node->get_logger()) +YabLocModule::YabLocModule(rclcpp::Node * node) +: logger_(node->get_logger()), cli_align_(node->create_client("yabloc_align")) { - cli_align_ = node->create_client("yabloc_align"); } PoseWithCovarianceStamped YabLocModule::align_pose(const PoseWithCovarianceStamped & pose) diff --git a/localization/pose_initializer/test/test_copy_vector_to_array.cpp b/localization/pose_initializer/test/test_copy_vector_to_array.cpp index 65b1d7e7d2711..f372a40076ffb 100644 --- a/localization/pose_initializer/test/test_copy_vector_to_array.cpp +++ b/localization/pose_initializer/test/test_copy_vector_to_array.cpp @@ -19,7 +19,7 @@ TEST(CopyVectorToArray, CopyAllElements) { const std::vector vector{0, 1, 2, 3, 4}; - std::array array; + std::array array{}; copy_vector_to_array(vector, array); EXPECT_THAT(array, testing::ElementsAre(0, 1, 2, 3, 4)); } @@ -28,7 +28,7 @@ TEST(CopyVectorToArray, CopyZeroElements) { const std::vector vector{}; // just confirm that this works - std::array array; + std::array array{}; copy_vector_to_array(vector, array); } @@ -36,7 +36,7 @@ TEST(CopyVectorToArray, ThrowsInvalidArgumentIfMoreElementsExpected) { auto f = [] { const std::vector vector{0, 1, 2, 3, 4}; - std::array array; + std::array array{}; copy_vector_to_array(vector, array); }; From ed6022932f5075e3479daa9a14c20c37379989ac Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Mon, 10 Jun 2024 16:51:44 +0900 Subject: [PATCH 062/142] refactor(vehicle_info_utils)!: prefix package and namespace with autoware (#7353) * chore(autoware_vehicle_info_utils): rename header Signed-off-by: satoshi-ota * chore(bpp-common): vehicle info Signed-off-by: satoshi-ota * chore(path_optimizer): vehicle info Signed-off-by: satoshi-ota * chore(velocity_smoother): vehicle info Signed-off-by: satoshi-ota * chore(bvp-common): vehicle info Signed-off-by: satoshi-ota * chore(static_centerline_generator): vehicle info Signed-off-by: satoshi-ota * chore(obstacle_cruise_planner): vehicle info Signed-off-by: satoshi-ota * chore(obstacle_velocity_limiter): vehicle info Signed-off-by: satoshi-ota * chore(mission_planner): vehicle info Signed-off-by: satoshi-ota * chore(obstacle_stop_planner): vehicle info Signed-off-by: satoshi-ota * chore(planning_validator): vehicle info Signed-off-by: satoshi-ota * chore(surround_obstacle_checker): vehicle info Signed-off-by: satoshi-ota * chore(goal_planner): vehicle info Signed-off-by: satoshi-ota * chore(start_planner): vehicle info Signed-off-by: satoshi-ota * chore(control_performance_analysis): vehicle info Signed-off-by: satoshi-ota * chore(lane_departure_checker): vehicle info Signed-off-by: satoshi-ota * chore(predicted_path_checker): vehicle info Signed-off-by: satoshi-ota * chore(vehicle_cmd_gate): vehicle info Signed-off-by: satoshi-ota * chore(obstacle_collision_checker): vehicle info Signed-off-by: satoshi-ota * chore(operation_mode_transition_manager): vehicle info Signed-off-by: satoshi-ota * chore(mpc): vehicle info Signed-off-by: satoshi-ota * chore(control): vehicle info Signed-off-by: satoshi-ota * chore(common): vehicle info Signed-off-by: satoshi-ota * chore(perception): vehicle info Signed-off-by: satoshi-ota * chore(evaluator): vehicle info Signed-off-by: satoshi-ota * chore(freespace): vehicle info Signed-off-by: satoshi-ota * chore(planning): vehicle info Signed-off-by: satoshi-ota * chore(vehicle): vehicle info Signed-off-by: satoshi-ota * chore(simulator): vehicle info Signed-off-by: satoshi-ota * chore(launch): vehicle info Signed-off-by: satoshi-ota * chore(system): vehicle info Signed-off-by: satoshi-ota * chore(sensing): vehicle info Signed-off-by: satoshi-ota * fix(autoware_joy_controller): remove unused deps Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .github/CODEOWNERS | 3 ++- .../launch/global_params.launch.py | 2 +- common/global_parameter_loader/package.xml | 2 +- .../tier4_localization_rviz_plugin/package.xml | 2 +- .../src/pose_history_footprint/display.cpp | 2 +- .../src/pose_history_footprint/display.hpp | 6 +++--- .../path/display_base.hpp | 6 +++--- common/tier4_planning_rviz_plugin/package.xml | 2 +- .../src/path/display.cpp | 6 +++--- .../node.hpp | 4 ++-- .../package.xml | 2 +- .../src/node.cpp | 4 ++-- .../autoware_mpc_lateral_controller/package.xml | 2 +- .../src/mpc_lateral_controller.cpp | 4 ++-- .../pid_longitudinal_controller.hpp | 2 +- .../package.xml | 2 +- .../src/pid_longitudinal_controller.cpp | 8 +++++--- .../launch/vehicle_cmd_gate.launch.xml | 2 +- control/autoware_vehicle_cmd_gate/package.xml | 2 +- .../src/vehicle_cmd_gate.cpp | 4 ++-- .../src/vehicle_cmd_gate.hpp | 2 +- .../src/test_filter_in_vehicle_cmd_gate_node.cpp | 2 +- .../control_performance_analysis.launch.xml | 2 +- control/control_performance_analysis/package.xml | 2 +- .../src/control_performance_analysis_node.cpp | 6 +++--- .../control_validator/control_validator.hpp | 4 ++-- control/control_validator/package.xml | 2 +- .../control_validator/src/control_validator.cpp | 2 +- .../lane_departure_checker.hpp | 12 ++++++------ .../util/create_vehicle_footprint.hpp | 2 +- .../launch/lane_departure_checker.launch.xml | 2 +- control/lane_departure_checker/package.xml | 2 +- .../lane_departure_checker_node.cpp | 2 +- .../obstacle_collision_checker.hpp | 6 +++--- .../launch/obstacle_collision_checker.launch.xml | 2 +- control/obstacle_collision_checker/package.xml | 2 +- .../obstacle_collision_checker.cpp | 4 ++-- .../obstacle_collision_checker_node.cpp | 2 +- .../operation_mode_transition_manager.launch.xml | 2 +- .../package.xml | 2 +- .../src/state.cpp | 2 +- .../src/state.hpp | 4 ++-- .../predicted_path_checker/collision_checker.hpp | 4 ++-- .../predicted_path_checker_node.hpp | 6 +++--- .../include/predicted_path_checker/utils.hpp | 8 ++++---- .../launch/predicted_path_checker.launch.xml | 2 +- control/predicted_path_checker/package.xml | 2 +- .../collision_checker.cpp | 2 +- .../predicted_path_checker_node.cpp | 2 +- .../src/predicted_path_checker_node/utils.cpp | 4 ++-- control/pure_pursuit/package.xml | 2 +- .../pure_pursuit_lateral_controller.cpp | 4 ++-- .../src/pure_pursuit/pure_pursuit_node.cpp | 4 ++-- control/trajectory_follower_base/package.xml | 2 +- .../trajectory_follower_node/controller_node.hpp | 2 +- control/trajectory_follower_node/package.xml | 2 +- .../utils/marker_utils.hpp | 6 +++--- .../perception_online_evaluator/package.xml | 2 +- .../src/utils/marker_utils.cpp | 4 ++-- .../launch/sensing.launch.xml | 2 +- launch/tier4_sensing_launch/package.xml | 2 +- .../scan_ground_filter_nodelet.hpp | 4 ++-- .../launch/scan_ground_filter.launch.py | 2 +- .../launch/scan_ground_filter.launch.xml | 2 +- perception/ground_segmentation/package.xml | 2 +- .../src/scan_ground_filter_nodelet.cpp | 6 +++--- .../marker_utils/utils.hpp | 11 ++++++----- .../parameters.hpp | 4 ++-- .../turn_signal_decider.hpp | 2 +- .../utils/drivable_area_expansion/parameters.hpp | 6 +++--- .../utils/path_safety_checker/safety_check.hpp | 8 ++++---- .../package.xml | 2 +- .../src/marker_utils/utils.cpp | 9 +++++---- .../utils/path_safety_checker/safety_check.cpp | 8 ++++---- .../test/test_safety_check.cpp | 2 +- .../freespace_pull_out.hpp | 2 +- .../pull_out_planner_base.hpp | 4 ++-- .../start_planner_module.hpp | 6 +++--- .../src/freespace_pull_out.cpp | 2 +- .../src/start_planner_module.cpp | 2 +- .../package.xml | 2 +- .../src/utils.cpp | 2 +- .../package.xml | 2 +- .../package.xml | 2 +- .../src/manager.cpp | 2 +- .../planner_data.hpp | 6 +++--- .../package.xml | 2 +- .../package.xml | 2 +- .../src/manager.cpp | 2 +- .../src/utils.hpp | 4 ++-- .../package.xml | 2 +- .../src/scene.hpp | 2 +- .../package.xml | 2 +- .../abstract_algorithm.hpp | 6 +++--- .../package.xml | 2 +- .../autoware_path_optimizer/debug_marker.hpp | 4 ++-- .../autoware_path_optimizer/mpt_optimizer.hpp | 11 ++++++----- .../include/autoware_path_optimizer/node.hpp | 4 ++-- .../utils/geometry_utils.hpp | 4 ++-- planning/autoware_path_optimizer/package.xml | 2 +- .../autoware_path_optimizer/src/debug_marker.cpp | 15 ++++++++------- .../src/mpt_optimizer.cpp | 12 ++++++------ planning/autoware_path_optimizer/src/node.cpp | 2 +- .../src/utils/geometry_utils.cpp | 2 +- .../package.xml | 2 +- .../src/static_centerline_generator_node.cpp | 9 +++++---- .../src/static_centerline_generator_node.hpp | 4 ++-- .../debug_marker.hpp | 8 ++++---- .../autoware_surround_obstacle_checker/node.hpp | 6 +++--- .../package.xml | 2 +- .../src/debug_marker.cpp | 2 +- .../src/node.cpp | 2 +- planning/autoware_velocity_smoother/package.xml | 2 +- planning/autoware_velocity_smoother/src/node.cpp | 4 ++-- .../freespace_pull_over.hpp | 2 +- .../goal_planner_module.hpp | 2 +- .../pull_over_planner_base.hpp | 4 ++-- .../behavior_path_goal_planner_module/util.hpp | 5 +++-- .../src/freespace_pull_over.cpp | 2 +- .../src/goal_planner_module.cpp | 4 ++-- .../src/util.cpp | 5 +++-- .../utils/utils.hpp | 4 ++-- .../src/utils/utils.cpp | 6 +++--- planning/behavior_path_planner/package.xml | 2 +- .../src/behavior_path_planner_node.cpp | 6 +++--- .../sampling_planner_module.hpp | 4 ++-- .../package.xml | 2 +- .../src/sampling_planner_module.cpp | 2 +- .../package.xml | 2 +- .../src/scene_crosswalk.cpp | 2 +- .../src/scene_crosswalk.hpp | 2 +- .../package.xml | 2 +- .../src/manager.cpp | 2 +- .../package.xml | 2 +- .../src/manager.cpp | 2 +- .../freespace_planner/freespace_planner_node.hpp | 2 +- .../launch/freespace_planner.launch.xml | 2 +- planning/freespace_planner/package.xml | 2 +- .../freespace_planner/freespace_planner_node.cpp | 3 ++- planning/mission_planner/package.xml | 2 +- .../src/lanelet2_plugins/default_planner.cpp | 6 +++--- .../src/lanelet2_plugins/default_planner.hpp | 4 ++-- .../src/lanelet2_plugins/utility_functions.hpp | 2 +- .../package.xml | 2 +- .../src/out_of_lane_module.cpp | 2 +- .../planner_data.hpp | 6 +++--- .../include/obstacle_cruise_planner/node.hpp | 2 +- .../optimization_based_planner.hpp | 6 +++--- .../pid_based_planner/pid_based_planner.hpp | 4 ++-- .../planner_interface.hpp | 6 +++--- .../obstacle_cruise_planner/polygon_utils.hpp | 6 +++--- .../obstacle_cruise_planner/type_alias.hpp | 4 ++-- .../launch/obstacle_cruise_planner.launch.xml | 2 +- planning/obstacle_cruise_planner/package.xml | 2 +- planning/obstacle_cruise_planner/src/node.cpp | 4 ++-- .../optimization_based_planner.cpp | 4 ++-- .../src/pid_based_planner/pid_based_planner.cpp | 4 ++-- .../src/polygon_utils.cpp | 2 +- .../include/obstacle_stop_planner/node.hpp | 4 ++-- .../obstacle_stop_planner/planner_utils.hpp | 4 ++-- .../launch/obstacle_stop_planner.launch.xml | 2 +- planning/obstacle_stop_planner/package.xml | 2 +- planning/obstacle_stop_planner/src/node.cpp | 2 +- .../launch/obstacle_velocity_limiter.launch.xml | 2 +- planning/obstacle_velocity_limiter/package.xml | 2 +- .../src/obstacle_velocity_limiter_node.cpp | 4 ++-- .../planning_validator.hpp | 4 ++-- planning/planning_validator/package.xml | 2 +- .../src/planning_validator.cpp | 2 +- .../include/autoware_path_sampler/node.hpp | 4 ++-- .../utils/geometry_utils.hpp | 2 +- .../autoware_path_sampler/package.xml | 2 +- .../autoware_path_sampler/src/node.cpp | 2 +- .../launch/polygon_remover.launch.py | 2 +- .../launch/simple_planning_simulator.launch.py | 2 +- simulator/simple_planning_simulator/package.xml | 2 +- .../simple_planning_simulator_core.cpp | 4 ++-- system/default_ad_api/package.xml | 2 +- system/default_ad_api/src/vehicle_info.cpp | 4 ++-- .../autoware_steer_offset_estimator/package.xml | 2 +- .../src/steer_offset_estimator_node.cpp | 4 ++-- .../CMakeLists.txt | 6 +++--- .../Readme.md | 6 +++--- .../config/polygon_remover.yaml | 0 .../config/vehicle_info.param.yaml | 0 .../config/vehicle_mirror.param.yaml | 0 .../vehicle_info.hpp | 10 +++++----- .../vehicle_info_utils.hpp} | 16 ++++++++-------- .../launch/sample.launch.py | 4 ++-- .../launch/vehicle_info.launch.py | 0 .../package.xml | 4 ++-- .../scripts/min_turning_radius_calculator.py | 3 ++- .../src/vehicle_info.cpp | 6 +++--- .../src/vehicle_info_utils.cpp} | 10 +++++----- 194 files changed, 350 insertions(+), 338 deletions(-) rename vehicle/{vehicle_info_util => autoware_vehicle_info_utils}/CMakeLists.txt (71%) rename vehicle/{vehicle_info_util => autoware_vehicle_info_utils}/Readme.md (89%) rename vehicle/{vehicle_info_util => autoware_vehicle_info_utils}/config/polygon_remover.yaml (100%) rename vehicle/{vehicle_info_util => autoware_vehicle_info_utils}/config/vehicle_info.param.yaml (100%) rename vehicle/{vehicle_info_util => autoware_vehicle_info_utils}/config/vehicle_mirror.param.yaml (100%) rename vehicle/{vehicle_info_util/include/vehicle_info_util => autoware_vehicle_info_utils/include/autoware_vehicle_info_utils}/vehicle_info.hpp (89%) rename vehicle/{vehicle_info_util/include/vehicle_info_util/vehicle_info_util.hpp => autoware_vehicle_info_utils/include/autoware_vehicle_info_utils/vehicle_info_utils.hpp} (71%) rename vehicle/{vehicle_info_util => autoware_vehicle_info_utils}/launch/sample.launch.py (91%) rename vehicle/{vehicle_info_util => autoware_vehicle_info_utils}/launch/vehicle_info.launch.py (100%) rename vehicle/{vehicle_info_util => autoware_vehicle_info_utils}/package.xml (88%) rename vehicle/{vehicle_info_util => autoware_vehicle_info_utils}/scripts/min_turning_radius_calculator.py (93%) rename vehicle/{vehicle_info_util => autoware_vehicle_info_utils}/src/vehicle_info.cpp (95%) rename vehicle/{vehicle_info_util/src/vehicle_info_util.cpp => autoware_vehicle_info_utils/src/vehicle_info_utils.cpp} (90%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9c64b64645c6f..b241c8c45bb3e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -248,6 +248,7 @@ vehicle/accel_brake_map_calibrator/** taiki.tanaka@tier4.jp takeshi.miura@tier4. vehicle/autoware_steer_offset_estimator/** taiki.tanaka@tier4.jp vehicle/external_cmd_converter/** takamasa.horibe@tier4.jp vehicle/raw_vehicle_cmd_converter/** makoto.kurihara@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp -vehicle/vehicle_info_util/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp +vehicle/autoware_steer_offset_estimator/** taiki.tanaka@tier4.jp +vehicle/autoware_vehicle_info_utils/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp ### Copied from .github/CODEOWNERS-manual ### diff --git a/common/global_parameter_loader/launch/global_params.launch.py b/common/global_parameter_loader/launch/global_params.launch.py index 06f807aaa4609..8f9092b10fa37 100644 --- a/common/global_parameter_loader/launch/global_params.launch.py +++ b/common/global_parameter_loader/launch/global_params.launch.py @@ -33,7 +33,7 @@ def launch_setup(context, *args, **kwargs): load_vehicle_info = IncludeLaunchDescription( PythonLaunchDescriptionSource( - [FindPackageShare("vehicle_info_util"), "/launch/vehicle_info.launch.py"] + [FindPackageShare("autoware_vehicle_info_utils"), "/launch/vehicle_info.launch.py"] ), launch_arguments={ "vehicle_info_param_file": [vehicle_description_pkg, "/config/vehicle_info.param.yaml"] diff --git a/common/global_parameter_loader/package.xml b/common/global_parameter_loader/package.xml index 4c2568b9aec98..472ef0c063430 100644 --- a/common/global_parameter_loader/package.xml +++ b/common/global_parameter_loader/package.xml @@ -10,7 +10,7 @@ ament_cmake_auto autoware_cmake - vehicle_info_util + autoware_vehicle_info_utils ament_lint_auto autoware_lint_common diff --git a/common/tier4_localization_rviz_plugin/package.xml b/common/tier4_localization_rviz_plugin/package.xml index f2482b2d45a3b..1c1c4ad6d8ba1 100644 --- a/common/tier4_localization_rviz_plugin/package.xml +++ b/common/tier4_localization_rviz_plugin/package.xml @@ -11,6 +11,7 @@ ament_cmake_auto autoware_cmake + autoware_vehicle_info_utils geometry_msgs libqt5-core libqt5-gui @@ -20,7 +21,6 @@ rviz_common rviz_default_plugins tf2_ros - vehicle_info_util ament_lint_auto autoware_lint_common diff --git a/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.cpp b/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.cpp index c4233bd6305e3..cd32df498bfd4 100644 --- a/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.cpp +++ b/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.cpp @@ -172,7 +172,7 @@ void PoseHistoryFootprint::updateFootprint() if (!vehicle_info_) { try { vehicle_info_ = std::make_shared( - VehicleInfoUtil(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo()); + VehicleInfoUtils(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo()); updateVehicleInfo(); } catch (const std::exception & e) { RCLCPP_WARN_THROTTLE( diff --git a/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.hpp b/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.hpp index d957054bd479e..44625ad7deb41 100644 --- a/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.hpp +++ b/common/tier4_localization_rviz_plugin/src/pose_history_footprint/display.hpp @@ -15,8 +15,8 @@ #ifndef POSE_HISTORY_FOOTPRINT__DISPLAY_HPP_ #define POSE_HISTORY_FOOTPRINT__DISPLAY_HPP_ +#include #include -#include #include @@ -39,8 +39,8 @@ class BoolProperty; namespace rviz_plugins { -using vehicle_info_util::VehicleInfo; -using vehicle_info_util::VehicleInfoUtil; +using autoware::vehicle_info_utils::VehicleInfo; +using autoware::vehicle_info_utils::VehicleInfoUtils; class PoseHistoryFootprint : public rviz_common::MessageFilterDisplay diff --git a/common/tier4_planning_rviz_plugin/include/tier4_planning_rviz_plugin/path/display_base.hpp b/common/tier4_planning_rviz_plugin/include/tier4_planning_rviz_plugin/path/display_base.hpp index ed79e122c0a01..9cb710c239029 100644 --- a/common/tier4_planning_rviz_plugin/include/tier4_planning_rviz_plugin/path/display_base.hpp +++ b/common/tier4_planning_rviz_plugin/include/tier4_planning_rviz_plugin/path/display_base.hpp @@ -15,6 +15,7 @@ #ifndef TIER4_PLANNING_RVIZ_PLUGIN__PATH__DISPLAY_BASE_HPP_ #define TIER4_PLANNING_RVIZ_PLUGIN__PATH__DISPLAY_BASE_HPP_ +#include #include #include #include @@ -25,7 +26,6 @@ #include #include #include -#include #include @@ -97,8 +97,8 @@ bool validateFloats(const typename T::ConstSharedPtr & msg_ptr) namespace rviz_plugins { -using vehicle_info_util::VehicleInfo; -using vehicle_info_util::VehicleInfoUtil; +using autoware::vehicle_info_utils::VehicleInfo; +using autoware::vehicle_info_utils::VehicleInfoUtils; template class AutowarePathBaseDisplay : public rviz_common::MessageFilterDisplay { diff --git a/common/tier4_planning_rviz_plugin/package.xml b/common/tier4_planning_rviz_plugin/package.xml index 5d755d212c859..95edcb7a96c56 100644 --- a/common/tier4_planning_rviz_plugin/package.xml +++ b/common/tier4_planning_rviz_plugin/package.xml @@ -12,6 +12,7 @@ autoware_cmake autoware_planning_msgs + autoware_vehicle_info_utils libqt5-core libqt5-gui libqt5-widgets @@ -25,7 +26,6 @@ tf2_ros tier4_autoware_utils tier4_planning_msgs - vehicle_info_util ament_lint_auto autoware_lint_common diff --git a/common/tier4_planning_rviz_plugin/src/path/display.cpp b/common/tier4_planning_rviz_plugin/src/path/display.cpp index 4a297b47bcfcc..342e72d66c5f9 100644 --- a/common/tier4_planning_rviz_plugin/src/path/display.cpp +++ b/common/tier4_planning_rviz_plugin/src/path/display.cpp @@ -31,7 +31,7 @@ void AutowarePathWithLaneIdDisplay::preProcessMessageDetail() if (!vehicle_info_) { try { vehicle_info_ = std::make_shared( - VehicleInfoUtil(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo()); + VehicleInfoUtils(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo()); updateVehicleInfo(); } catch (const std::exception & e) { RCLCPP_WARN_ONCE( @@ -107,7 +107,7 @@ void AutowarePathDisplay::preProcessMessageDetail() if (!vehicle_info_) { try { vehicle_info_ = std::make_shared( - VehicleInfoUtil(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo()); + VehicleInfoUtils(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo()); updateVehicleInfo(); } catch (const std::exception & e) { RCLCPP_WARN_ONCE( @@ -124,7 +124,7 @@ void AutowareTrajectoryDisplay::preProcessMessageDetail() if (!vehicle_info_) { try { vehicle_info_ = std::make_shared( - VehicleInfoUtil(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo()); + VehicleInfoUtils(*rviz_ros_node_.lock()->get_raw_node()).getVehicleInfo()); updateVehicleInfo(); } catch (const std::exception & e) { RCLCPP_WARN_ONCE( diff --git a/control/autoware_autonomous_emergency_braking/include/autoware_autonomous_emergency_braking/node.hpp b/control/autoware_autonomous_emergency_braking/include/autoware_autonomous_emergency_braking/node.hpp index b87f421de7c8c..3e72d72cb9946 100644 --- a/control/autoware_autonomous_emergency_braking/include/autoware_autonomous_emergency_braking/node.hpp +++ b/control/autoware_autonomous_emergency_braking/include/autoware_autonomous_emergency_braking/node.hpp @@ -15,13 +15,13 @@ #ifndef AUTOWARE_AUTONOMOUS_EMERGENCY_BRAKING__NODE_HPP_ #define AUTOWARE_AUTONOMOUS_EMERGENCY_BRAKING__NODE_HPP_ +#include #include #include #include #include #include #include -#include #include #include @@ -59,11 +59,11 @@ using nav_msgs::msg::Odometry; using sensor_msgs::msg::Imu; using sensor_msgs::msg::PointCloud2; using PointCloud = pcl::PointCloud; +using autoware::vehicle_info_utils::VehicleInfo; using diagnostic_updater::DiagnosticStatusWrapper; using diagnostic_updater::Updater; using tier4_autoware_utils::Point2d; using tier4_autoware_utils::Polygon2d; -using vehicle_info_util::VehicleInfo; using visualization_msgs::msg::Marker; using visualization_msgs::msg::MarkerArray; using Path = std::vector; diff --git a/control/autoware_autonomous_emergency_braking/package.xml b/control/autoware_autonomous_emergency_braking/package.xml index 221fc2c000826..0404eec7ca308 100644 --- a/control/autoware_autonomous_emergency_braking/package.xml +++ b/control/autoware_autonomous_emergency_braking/package.xml @@ -17,6 +17,7 @@ autoware_control_msgs autoware_planning_msgs autoware_system_msgs + autoware_vehicle_info_utils autoware_vehicle_msgs diagnostic_updater geometry_msgs @@ -34,7 +35,6 @@ tf2_geometry_msgs tf2_ros tier4_autoware_utils - vehicle_info_util visualization_msgs ament_lint_auto diff --git a/control/autoware_autonomous_emergency_braking/src/node.cpp b/control/autoware_autonomous_emergency_braking/src/node.cpp index 3ec8cc68df9b1..d01855bc8ab5d 100644 --- a/control/autoware_autonomous_emergency_braking/src/node.cpp +++ b/control/autoware_autonomous_emergency_braking/src/node.cpp @@ -60,7 +60,7 @@ void appendPointToPolygon(Polygon2d & polygon, const geometry_msgs::msg::Point & Polygon2d createPolygon( const geometry_msgs::msg::Pose & base_pose, const geometry_msgs::msg::Pose & next_pose, - const vehicle_info_util::VehicleInfo & vehicle_info, const double expand_width) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double expand_width) { Polygon2d polygon; @@ -102,7 +102,7 @@ Polygon2d createPolygon( AEB::AEB(const rclcpp::NodeOptions & node_options) : Node("AEB", node_options), - vehicle_info_(vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo()), + vehicle_info_(autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo()), collision_data_keeper_(this->get_clock()) { // Publisher diff --git a/control/autoware_mpc_lateral_controller/package.xml b/control/autoware_mpc_lateral_controller/package.xml index 3e62d69f6ebb6..673d9d7896745 100644 --- a/control/autoware_mpc_lateral_controller/package.xml +++ b/control/autoware_mpc_lateral_controller/package.xml @@ -19,6 +19,7 @@ autoware_control_msgs autoware_planning_msgs + autoware_vehicle_info_utils autoware_vehicle_msgs diagnostic_msgs diagnostic_updater @@ -35,7 +36,6 @@ tier4_autoware_utils tier4_debug_msgs trajectory_follower_base - vehicle_info_util ament_cmake_ros ament_lint_auto diff --git a/control/autoware_mpc_lateral_controller/src/mpc_lateral_controller.cpp b/control/autoware_mpc_lateral_controller/src/mpc_lateral_controller.cpp index 3d66078eed1f2..cf8a4ed5a251b 100644 --- a/control/autoware_mpc_lateral_controller/src/mpc_lateral_controller.cpp +++ b/control/autoware_mpc_lateral_controller/src/mpc_lateral_controller.cpp @@ -19,10 +19,10 @@ #include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_dynamics.hpp" #include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics.hpp" #include "autoware_mpc_lateral_controller/vehicle_model/vehicle_model_bicycle_kinematics_no_delay.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "motion_utils/trajectory/trajectory.hpp" #include "tf2/utils.h" #include "tf2_ros/create_timer_ros.h" -#include "vehicle_info_util/vehicle_info_util.hpp" #include #include @@ -69,7 +69,7 @@ MpcLateralController::MpcLateralController(rclcpp::Node & node) m_mpc_converged_threshold_rps = dp_double("mpc_converged_threshold_rps"); // [rad/s] /* mpc parameters */ - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo(); const double wheelbase = vehicle_info.wheel_base_m; constexpr double deg2rad = static_cast(M_PI) / 180.0; m_mpc->m_steer_lim = vehicle_info.max_steer_angle_rad; diff --git a/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp index 7b9d999a3decb..08a6a51d3098b 100644 --- a/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp +++ b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp @@ -20,6 +20,7 @@ #include "autoware_pid_longitudinal_controller/lowpass_filter.hpp" #include "autoware_pid_longitudinal_controller/pid.hpp" #include "autoware_pid_longitudinal_controller/smooth_stop.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "diagnostic_updater/diagnostic_updater.hpp" #include "rclcpp/rclcpp.hpp" #include "tf2/utils.h" @@ -27,7 +28,6 @@ #include "tf2_ros/transform_listener.h" #include "tier4_autoware_utils/ros/marker_helper.hpp" #include "trajectory_follower_base/longitudinal_controller_base.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include #include diff --git a/control/autoware_pid_longitudinal_controller/package.xml b/control/autoware_pid_longitudinal_controller/package.xml index 50ae7ccaf2e55..66f6a6dfcda8b 100644 --- a/control/autoware_pid_longitudinal_controller/package.xml +++ b/control/autoware_pid_longitudinal_controller/package.xml @@ -21,6 +21,7 @@ autoware_adapi_v1_msgs autoware_control_msgs autoware_planning_msgs + autoware_vehicle_info_utils autoware_vehicle_msgs diagnostic_msgs diagnostic_updater @@ -36,7 +37,6 @@ tier4_autoware_utils tier4_debug_msgs trajectory_follower_base - vehicle_info_util ament_cmake_ros ament_lint_auto diff --git a/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp index e1dd414b2446d..4cca525f6ebf3 100644 --- a/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp +++ b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp @@ -38,9 +38,11 @@ PidLongitudinalController::PidLongitudinalController(rclcpp::Node & node) // parameters timer m_longitudinal_ctrl_period = node.get_parameter("ctrl_period").as_double(); - m_wheel_base = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo().wheel_base_m; - m_vehicle_width = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo().vehicle_width_m; - m_front_overhang = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo().front_overhang_m; + m_wheel_base = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo().wheel_base_m; + m_vehicle_width = + autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo().vehicle_width_m; + m_front_overhang = + autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo().front_overhang_m; // parameters for delay compensation m_delay_compensation_time = node.declare_parameter("delay_compensation_time"); // [s] diff --git a/control/autoware_vehicle_cmd_gate/launch/vehicle_cmd_gate.launch.xml b/control/autoware_vehicle_cmd_gate/launch/vehicle_cmd_gate.launch.xml index c9e83bf9878b8..c9df4e67c2647 100644 --- a/control/autoware_vehicle_cmd_gate/launch/vehicle_cmd_gate.launch.xml +++ b/control/autoware_vehicle_cmd_gate/launch/vehicle_cmd_gate.launch.xml @@ -3,7 +3,7 @@ - + diff --git a/control/autoware_vehicle_cmd_gate/package.xml b/control/autoware_vehicle_cmd_gate/package.xml index da0e885cc564a..f67d01a5593ae 100644 --- a/control/autoware_vehicle_cmd_gate/package.xml +++ b/control/autoware_vehicle_cmd_gate/package.xml @@ -17,6 +17,7 @@ autoware_adapi_v1_msgs autoware_control_msgs + autoware_vehicle_info_utils autoware_vehicle_msgs component_interface_specs component_interface_utils @@ -33,7 +34,6 @@ tier4_external_api_msgs tier4_system_msgs tier4_vehicle_msgs - vehicle_info_util visualization_msgs rosidl_default_runtime diff --git a/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp index e8d35beb94b1f..bb50dcb586e83 100644 --- a/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp +++ b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp @@ -170,7 +170,7 @@ VehicleCmdGate::VehicleCmdGate(const rclcpp::NodeOptions & node_options) declare_parameter("filter_activated_velocity_threshold"); // Vehicle Parameter - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); { VehicleCmdFilterParam p; p.wheel_base = vehicle_info.wheel_base_m; @@ -276,7 +276,7 @@ rcl_interfaces::msg::SetParametersResult VehicleCmdGate::onParameter( parameters, "filter_activated_velocity_threshold", filter_activated_velocity_threshold_); // Vehicle Parameter - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); { VehicleCmdFilterParam p = filter_.getParam(); p.wheel_base = vehicle_info.wheel_base_m; diff --git a/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.hpp b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.hpp index 22613de5d1f07..06dad536d842d 100644 --- a/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.hpp +++ b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.hpp @@ -21,11 +21,11 @@ #include "vehicle_cmd_filter.hpp" #include +#include #include #include #include #include -#include #include #include diff --git a/control/autoware_vehicle_cmd_gate/test/src/test_filter_in_vehicle_cmd_gate_node.cpp b/control/autoware_vehicle_cmd_gate/test/src/test_filter_in_vehicle_cmd_gate_node.cpp index 6f148fe6c8140..46130fc8f9941 100644 --- a/control/autoware_vehicle_cmd_gate/test/src/test_filter_in_vehicle_cmd_gate_node.cpp +++ b/control/autoware_vehicle_cmd_gate/test/src/test_filter_in_vehicle_cmd_gate_node.cpp @@ -371,7 +371,7 @@ std::shared_ptr generateNode() const auto vehicle_cmd_gate_dir = ament_index_cpp::get_package_share_directory("autoware_vehicle_cmd_gate"); const auto vehicle_info_util_dir = - ament_index_cpp::get_package_share_directory("vehicle_info_util"); + ament_index_cpp::get_package_share_directory("autoware_vehicle_info_utils"); node_options.arguments( {"--ros-args", "--params-file", vehicle_cmd_gate_dir + "/config/vehicle_cmd_gate.param.yaml", diff --git a/control/control_performance_analysis/launch/control_performance_analysis.launch.xml b/control/control_performance_analysis/launch/control_performance_analysis.launch.xml index be2b30bdf1bf9..f2997f0e10b83 100644 --- a/control/control_performance_analysis/launch/control_performance_analysis.launch.xml +++ b/control/control_performance_analysis/launch/control_performance_analysis.launch.xml @@ -8,7 +8,7 @@ - + diff --git a/control/control_performance_analysis/package.xml b/control/control_performance_analysis/package.xml index a26f4164a177b..b18fb8c98ccdc 100644 --- a/control/control_performance_analysis/package.xml +++ b/control/control_performance_analysis/package.xml @@ -26,6 +26,7 @@ autoware_control_msgs autoware_planning_msgs + autoware_vehicle_info_utils autoware_vehicle_msgs geometry_msgs libboost-dev @@ -41,7 +42,6 @@ tf2_ros tier4_autoware_utils tier4_debug_msgs - vehicle_info_util builtin_interfaces global_parameter_loader rosidl_default_runtime diff --git a/control/control_performance_analysis/src/control_performance_analysis_node.cpp b/control/control_performance_analysis/src/control_performance_analysis_node.cpp index 693194e8b70a6..47ce3ce07e83c 100644 --- a/control/control_performance_analysis/src/control_performance_analysis_node.cpp +++ b/control/control_performance_analysis/src/control_performance_analysis_node.cpp @@ -17,7 +17,7 @@ #include "control_performance_analysis/msg/driving_monitor_stamped.hpp" #include "control_performance_analysis/msg/error_stamped.hpp" -#include +#include #include #include @@ -32,7 +32,7 @@ using control_performance_analysis::msg::ErrorStamped; namespace control_performance_analysis { -using vehicle_info_util::VehicleInfoUtil; +using autoware::vehicle_info_utils::VehicleInfoUtils; ControlPerformanceAnalysisNode::ControlPerformanceAnalysisNode( const rclcpp::NodeOptions & node_options) @@ -41,7 +41,7 @@ ControlPerformanceAnalysisNode::ControlPerformanceAnalysisNode( using std::placeholders::_1; // Implement Reading Global and Local Variables. - const auto & vehicle_info = VehicleInfoUtil(*this).getVehicleInfo(); + const auto & vehicle_info = VehicleInfoUtils(*this).getVehicleInfo(); param_.wheelbase_ = vehicle_info.wheel_base_m; // Node Parameters. diff --git a/control/control_validator/include/control_validator/control_validator.hpp b/control/control_validator/include/control_validator/control_validator.hpp index e048ef03bf11a..56125cc40b74e 100644 --- a/control/control_validator/include/control_validator/control_validator.hpp +++ b/control/control_validator/include/control_validator/control_validator.hpp @@ -15,9 +15,9 @@ #ifndef CONTROL_VALIDATOR__CONTROL_VALIDATOR_HPP_ #define CONTROL_VALIDATOR__CONTROL_VALIDATOR_HPP_ +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "control_validator/debug_marker.hpp" #include "control_validator/msg/control_validator_status.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include #include @@ -83,7 +83,7 @@ class ControlValidator : public rclcpp::Node ControlValidatorStatus validation_status_; ValidationParams validation_params_; // for thresholds - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; bool isAllValid(const ControlValidatorStatus & status); diff --git a/control/control_validator/package.xml b/control/control_validator/package.xml index 2f4400d6ebc57..93779d28d6218 100644 --- a/control/control_validator/package.xml +++ b/control/control_validator/package.xml @@ -21,6 +21,7 @@ rosidl_default_generators autoware_planning_msgs + autoware_vehicle_info_utils diagnostic_updater geometry_msgs motion_utils @@ -28,7 +29,6 @@ rclcpp rclcpp_components tier4_autoware_utils - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/control/control_validator/src/control_validator.cpp b/control/control_validator/src/control_validator.cpp index 5282e31fef898..be103647f1b36 100644 --- a/control/control_validator/src/control_validator.cpp +++ b/control/control_validator/src/control_validator.cpp @@ -61,7 +61,7 @@ void ControlValidator::setupParameters() } try { - vehicle_info_ = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); } catch (...) { RCLCPP_ERROR(get_logger(), "failed to get vehicle info. use default value."); vehicle_info_.front_overhang_m = 0.5; diff --git a/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker.hpp b/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker.hpp index d90dbc9474fd8..e29623bf69891 100644 --- a/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker.hpp +++ b/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker.hpp @@ -15,10 +15,10 @@ #ifndef AUTOWARE_LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_HPP_ #define AUTOWARE_LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_HPP_ +#include #include #include #include -#include #include #include @@ -103,17 +103,17 @@ class LaneDepartureChecker public: Output update(const Input & input); - void setParam(const Param & param, const vehicle_info_util::VehicleInfo vehicle_info) + void setParam(const Param & param, const autoware::vehicle_info_utils::VehicleInfo vehicle_info) { param_ = param; - vehicle_info_ptr_ = std::make_shared(vehicle_info); + vehicle_info_ptr_ = std::make_shared(vehicle_info); } void setParam(const Param & param) { param_ = param; } - void setVehicleInfo(const vehicle_info_util::VehicleInfo vehicle_info) + void setVehicleInfo(const autoware::vehicle_info_utils::VehicleInfo vehicle_info) { - vehicle_info_ptr_ = std::make_shared(vehicle_info); + vehicle_info_ptr_ = std::make_shared(vehicle_info); } bool checkPathWillLeaveLane( @@ -137,7 +137,7 @@ class LaneDepartureChecker private: Param param_; - std::shared_ptr vehicle_info_ptr_; + std::shared_ptr vehicle_info_ptr_; static PoseDeviation calcTrajectoryDeviation( const Trajectory & trajectory, const geometry_msgs::msg::Pose & pose, diff --git a/control/lane_departure_checker/include/autoware_lane_departure_checker/util/create_vehicle_footprint.hpp b/control/lane_departure_checker/include/autoware_lane_departure_checker/util/create_vehicle_footprint.hpp index 917317361d702..c85e37212b16f 100644 --- a/control/lane_departure_checker/include/autoware_lane_departure_checker/util/create_vehicle_footprint.hpp +++ b/control/lane_departure_checker/include/autoware_lane_departure_checker/util/create_vehicle_footprint.hpp @@ -29,8 +29,8 @@ #define AUTOWARE_LANE_DEPARTURE_CHECKER__UTIL__CREATE_VEHICLE_FOOTPRINT_HPP_ #include +#include #include -#include #include diff --git a/control/lane_departure_checker/launch/lane_departure_checker.launch.xml b/control/lane_departure_checker/launch/lane_departure_checker.launch.xml index 7ea2e8b2de60a..b9f820f66690b 100644 --- a/control/lane_departure_checker/launch/lane_departure_checker.launch.xml +++ b/control/lane_departure_checker/launch/lane_departure_checker.launch.xml @@ -7,7 +7,7 @@ - + diff --git a/control/lane_departure_checker/package.xml b/control/lane_departure_checker/package.xml index 466dc7351cd9e..7a08cd2907120 100644 --- a/control/lane_departure_checker/package.xml +++ b/control/lane_departure_checker/package.xml @@ -15,6 +15,7 @@ autoware_map_msgs autoware_planning_msgs + autoware_vehicle_info_utils boost diagnostic_updater eigen @@ -30,7 +31,6 @@ tf2_ros tier4_autoware_utils tier4_debug_msgs - vehicle_info_util ament_lint_auto autoware_lint_common diff --git a/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp b/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp index 7956410fdf898..b25b3fd843f4b 100644 --- a/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp +++ b/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp @@ -145,7 +145,7 @@ LaneDepartureCheckerNode::LaneDepartureCheckerNode(const rclcpp::NodeOptions & o declare_parameter>("boundary_types_to_detect"); // Vehicle Info - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); vehicle_length_m_ = vehicle_info.vehicle_length_m; // Core Parameter diff --git a/control/obstacle_collision_checker/include/obstacle_collision_checker/obstacle_collision_checker.hpp b/control/obstacle_collision_checker/include/obstacle_collision_checker/obstacle_collision_checker.hpp index a65d818056bd7..efaefd765e793 100644 --- a/control/obstacle_collision_checker/include/obstacle_collision_checker/obstacle_collision_checker.hpp +++ b/control/obstacle_collision_checker/include/obstacle_collision_checker/obstacle_collision_checker.hpp @@ -15,8 +15,8 @@ #ifndef OBSTACLE_COLLISION_CHECKER__OBSTACLE_COLLISION_CHECKER_HPP_ #define OBSTACLE_COLLISION_CHECKER__OBSTACLE_COLLISION_CHECKER_HPP_ +#include #include -#include #include #include @@ -75,7 +75,7 @@ class ObstacleCollisionChecker private: Param param_; - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; //! This function assumes the input trajectory is sampled dense enough static autoware_planning_msgs::msg::Trajectory resampleTrajectory( @@ -86,7 +86,7 @@ class ObstacleCollisionChecker static std::vector createVehicleFootprints( const autoware_planning_msgs::msg::Trajectory & trajectory, const Param & param, - const vehicle_info_util::VehicleInfo & vehicle_info); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info); static std::vector createVehiclePassingAreas( const std::vector & vehicle_footprints); diff --git a/control/obstacle_collision_checker/launch/obstacle_collision_checker.launch.xml b/control/obstacle_collision_checker/launch/obstacle_collision_checker.launch.xml index 078993d064064..f82384534e040 100755 --- a/control/obstacle_collision_checker/launch/obstacle_collision_checker.launch.xml +++ b/control/obstacle_collision_checker/launch/obstacle_collision_checker.launch.xml @@ -6,7 +6,7 @@ - + diff --git a/control/obstacle_collision_checker/package.xml b/control/obstacle_collision_checker/package.xml index ef7560755a122..795302abe75f4 100644 --- a/control/obstacle_collision_checker/package.xml +++ b/control/obstacle_collision_checker/package.xml @@ -19,6 +19,7 @@ autoware_cmake autoware_planning_msgs + autoware_vehicle_info_utils boost diagnostic_updater eigen @@ -33,7 +34,6 @@ tf2_geometry_msgs tf2_ros tier4_autoware_utils - vehicle_info_util ament_cmake_ros ament_lint_auto diff --git a/control/obstacle_collision_checker/src/obstacle_collision_checker_node/obstacle_collision_checker.cpp b/control/obstacle_collision_checker/src/obstacle_collision_checker_node/obstacle_collision_checker.cpp index 6887be4cedd77..a844fe6a50cbf 100644 --- a/control/obstacle_collision_checker/src/obstacle_collision_checker_node/obstacle_collision_checker.cpp +++ b/control/obstacle_collision_checker/src/obstacle_collision_checker_node/obstacle_collision_checker.cpp @@ -83,7 +83,7 @@ double calcBrakingDistance( namespace obstacle_collision_checker { ObstacleCollisionChecker::ObstacleCollisionChecker(rclcpp::Node & node) -: vehicle_info_(vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo()) +: vehicle_info_(autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo()) { } @@ -188,7 +188,7 @@ autoware_planning_msgs::msg::Trajectory ObstacleCollisionChecker::cutTrajectory( std::vector ObstacleCollisionChecker::createVehicleFootprints( const autoware_planning_msgs::msg::Trajectory & trajectory, const Param & param, - const vehicle_info_util::VehicleInfo & vehicle_info) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) { // Create vehicle footprint in base_link coordinate const auto local_vehicle_footprint = vehicle_info.createFootprint(param.footprint_margin); diff --git a/control/obstacle_collision_checker/src/obstacle_collision_checker_node/obstacle_collision_checker_node.cpp b/control/obstacle_collision_checker/src/obstacle_collision_checker_node/obstacle_collision_checker_node.cpp index cfde4ee849728..402123c81d361 100644 --- a/control/obstacle_collision_checker/src/obstacle_collision_checker_node/obstacle_collision_checker_node.cpp +++ b/control/obstacle_collision_checker/src/obstacle_collision_checker_node/obstacle_collision_checker_node.cpp @@ -14,10 +14,10 @@ #include "obstacle_collision_checker/obstacle_collision_checker_node.hpp" +#include #include #include #include -#include #include #include diff --git a/control/operation_mode_transition_manager/launch/operation_mode_transition_manager.launch.xml b/control/operation_mode_transition_manager/launch/operation_mode_transition_manager.launch.xml index 569d743ba2c4f..c6f03db0fcacc 100644 --- a/control/operation_mode_transition_manager/launch/operation_mode_transition_manager.launch.xml +++ b/control/operation_mode_transition_manager/launch/operation_mode_transition_manager.launch.xml @@ -1,6 +1,6 @@ - + diff --git a/control/operation_mode_transition_manager/package.xml b/control/operation_mode_transition_manager/package.xml index 81517675281c3..40232469fdb6a 100644 --- a/control/operation_mode_transition_manager/package.xml +++ b/control/operation_mode_transition_manager/package.xml @@ -13,6 +13,7 @@ rosidl_default_generators autoware_control_msgs + autoware_vehicle_info_utils autoware_vehicle_msgs component_interface_specs component_interface_utils @@ -25,7 +26,6 @@ tier4_control_msgs tier4_system_msgs tier4_vehicle_msgs - vehicle_info_util ament_cmake_gtest ament_lint_auto diff --git a/control/operation_mode_transition_manager/src/state.cpp b/control/operation_mode_transition_manager/src/state.cpp index 635ead2430677..82270875b2e17 100644 --- a/control/operation_mode_transition_manager/src/state.cpp +++ b/control/operation_mode_transition_manager/src/state.cpp @@ -33,7 +33,7 @@ using tier4_autoware_utils::calcYawDeviation; AutonomousMode::AutonomousMode(rclcpp::Node * node) : logger_(node->get_logger()), clock_(node->get_clock()) { - vehicle_info_ = vehicle_info_util::VehicleInfoUtil(*node).getVehicleInfo(); + vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(*node).getVehicleInfo(); sub_control_cmd_ = node->create_subscription( "control_cmd", 1, [this](const Control::SharedPtr msg) { control_cmd_ = *msg; }); diff --git a/control/operation_mode_transition_manager/src/state.hpp b/control/operation_mode_transition_manager/src/state.hpp index e5abd4285ad5f..54434690f2147 100644 --- a/control/operation_mode_transition_manager/src/state.hpp +++ b/control/operation_mode_transition_manager/src/state.hpp @@ -18,8 +18,8 @@ #include "data.hpp" #include "operation_mode_transition_manager/msg/operation_mode_transition_manager_debug.hpp" +#include #include -#include #include #include @@ -83,7 +83,7 @@ class AutonomousMode : public ModeChangeBase Control trajectory_follower_control_cmd_; Odometry kinematics_; Trajectory trajectory_; - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; DebugInfo debug_info_; std::shared_ptr stable_start_time_; // Reset every transition start. diff --git a/control/predicted_path_checker/include/predicted_path_checker/collision_checker.hpp b/control/predicted_path_checker/include/predicted_path_checker/collision_checker.hpp index 8410e7c78f723..2a7a552c1973d 100644 --- a/control/predicted_path_checker/include/predicted_path_checker/collision_checker.hpp +++ b/control/predicted_path_checker/include/predicted_path_checker/collision_checker.hpp @@ -15,6 +15,7 @@ #ifndef PREDICTED_PATH_CHECKER__COLLISION_CHECKER_HPP_ #define PREDICTED_PATH_CHECKER__COLLISION_CHECKER_HPP_ +#include #include #include #include @@ -23,7 +24,6 @@ #include #include #include -#include #include #include @@ -120,7 +120,7 @@ class CollisionChecker // Variables std::shared_ptr debug_ptr_; rclcpp::Node * node_; - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; std::vector predicted_object_history_{}; }; } // namespace autoware::motion::control::predicted_path_checker diff --git a/control/predicted_path_checker/include/predicted_path_checker/predicted_path_checker_node.hpp b/control/predicted_path_checker/include/predicted_path_checker/predicted_path_checker_node.hpp index 23696887c7051..6c4832a0dac3e 100644 --- a/control/predicted_path_checker/include/predicted_path_checker/predicted_path_checker_node.hpp +++ b/control/predicted_path_checker/include/predicted_path_checker/predicted_path_checker_node.hpp @@ -15,6 +15,8 @@ #ifndef PREDICTED_PATH_CHECKER__PREDICTED_PATH_CHECKER_NODE_HPP_ #define PREDICTED_PATH_CHECKER__PREDICTED_PATH_CHECKER_NODE_HPP_ +#include +#include #include #include #include @@ -24,8 +26,6 @@ #include #include #include -#include -#include #include #include @@ -116,7 +116,7 @@ class PredictedPathCheckerNode : public rclcpp::Node // Variables State current_state_{State::DRIVE}; - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; bool is_calling_set_stop_{false}; bool is_stopped_by_node_{false}; diff --git a/control/predicted_path_checker/include/predicted_path_checker/utils.hpp b/control/predicted_path_checker/include/predicted_path_checker/utils.hpp index 957800ad04305..d9299f09dfb6b 100644 --- a/control/predicted_path_checker/include/predicted_path_checker/utils.hpp +++ b/control/predicted_path_checker/include/predicted_path_checker/utils.hpp @@ -15,10 +15,10 @@ #ifndef PREDICTED_PATH_CHECKER__UTILS_HPP_ #define PREDICTED_PATH_CHECKER__UTILS_HPP_ +#include #include #include #include -#include #include #include @@ -39,6 +39,7 @@ namespace utils { +using autoware::vehicle_info_utils::VehicleInfo; using autoware_perception_msgs::msg::PredictedObject; using autoware_perception_msgs::msg::PredictedObjects; using autoware_planning_msgs::msg::TrajectoryPoint; @@ -48,7 +49,6 @@ using geometry_msgs::msg::TransformStamped; using std_msgs::msg::Header; using tier4_autoware_utils::Point2d; using tier4_autoware_utils::Polygon2d; -using vehicle_info_util::VehicleInfo; using PointArray = std::vector; using TrajectoryPoints = std::vector; @@ -57,7 +57,7 @@ void appendPointToPolygon(Polygon2d & polygon, const geometry_msgs::msg::Point & Polygon2d createOneStepPolygon( const geometry_msgs::msg::Pose & base_step_pose, const geometry_msgs::msg::Pose & next_step_pose, - const vehicle_info_util::VehicleInfo & vehicle_info, const double expand_width); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double expand_width); TrajectoryPoint calcInterpolatedPoint( const TrajectoryPoints & trajectory, const geometry_msgs::msg::Point & target_point, @@ -65,7 +65,7 @@ TrajectoryPoint calcInterpolatedPoint( std::pair findStopPoint( TrajectoryPoints & predicted_trajectory_array, const size_t collision_idx, - const double stop_margin, vehicle_info_util::VehicleInfo & vehicle_info); + const double stop_margin, autoware::vehicle_info_utils::VehicleInfo & vehicle_info); bool isInBrakeDistance( const TrajectoryPoints & trajectory, const size_t stop_idx, const double relative_velocity, diff --git a/control/predicted_path_checker/launch/predicted_path_checker.launch.xml b/control/predicted_path_checker/launch/predicted_path_checker.launch.xml index a35c11b80c1f7..6af1372a5bb4a 100755 --- a/control/predicted_path_checker/launch/predicted_path_checker.launch.xml +++ b/control/predicted_path_checker/launch/predicted_path_checker.launch.xml @@ -7,7 +7,7 @@ - + diff --git a/control/predicted_path_checker/package.xml b/control/predicted_path_checker/package.xml index bca65302dba55..911344c578414 100644 --- a/control/predicted_path_checker/package.xml +++ b/control/predicted_path_checker/package.xml @@ -14,6 +14,7 @@ autoware_perception_msgs autoware_planning_msgs + autoware_vehicle_info_utils boost component_interface_specs component_interface_utils @@ -34,7 +35,6 @@ tier4_control_msgs tier4_external_api_msgs tier4_planning_msgs - vehicle_info_util ament_cmake_ros ament_lint_auto diff --git a/control/predicted_path_checker/src/predicted_path_checker_node/collision_checker.cpp b/control/predicted_path_checker/src/predicted_path_checker_node/collision_checker.cpp index 5e8d96805b832..7d392571546b4 100644 --- a/control/predicted_path_checker/src/predicted_path_checker_node/collision_checker.cpp +++ b/control/predicted_path_checker/src/predicted_path_checker_node/collision_checker.cpp @@ -27,7 +27,7 @@ CollisionChecker::CollisionChecker( rclcpp::Node * node, std::shared_ptr debug_ptr) : debug_ptr_(std::move(debug_ptr)), node_(node), - vehicle_info_(vehicle_info_util::VehicleInfoUtil(*node).getVehicleInfo()) + vehicle_info_(autoware::vehicle_info_utils::VehicleInfoUtils(*node).getVehicleInfo()) { } diff --git a/control/predicted_path_checker/src/predicted_path_checker_node/predicted_path_checker_node.cpp b/control/predicted_path_checker/src/predicted_path_checker_node/predicted_path_checker_node.cpp index 28ea21f639a0e..38717a1849ad9 100644 --- a/control/predicted_path_checker/src/predicted_path_checker_node/predicted_path_checker_node.cpp +++ b/control/predicted_path_checker/src/predicted_path_checker_node/predicted_path_checker_node.cpp @@ -38,7 +38,7 @@ PredictedPathCheckerNode::PredictedPathCheckerNode(const rclcpp::NodeOptions & n group_cli_ = create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive); adaptor.init_cli(cli_set_stop_, group_cli_); adaptor.init_sub(sub_stop_state_, this, &PredictedPathCheckerNode::onIsStopped); - vehicle_info_ = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); // Node Parameter node_param_.update_rate = declare_parameter("update_rate", 10.0); diff --git a/control/predicted_path_checker/src/predicted_path_checker_node/utils.cpp b/control/predicted_path_checker/src/predicted_path_checker_node/utils.cpp index f1c76ce6eef8f..a9c3e2b24f9a5 100644 --- a/control/predicted_path_checker/src/predicted_path_checker_node/utils.cpp +++ b/control/predicted_path_checker/src/predicted_path_checker_node/utils.cpp @@ -29,7 +29,7 @@ using tier4_autoware_utils::getRPY; // Utils Functions Polygon2d createOneStepPolygon( const geometry_msgs::msg::Pose & base_step_pose, const geometry_msgs::msg::Pose & next_step_pose, - const vehicle_info_util::VehicleInfo & vehicle_info, const double expand_width) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double expand_width) { Polygon2d polygon; @@ -146,7 +146,7 @@ TrajectoryPoint calcInterpolatedPoint( std::pair findStopPoint( TrajectoryPoints & trajectory_array, const size_t collision_idx, const double stop_margin, - vehicle_info_util::VehicleInfo & vehicle_info) + autoware::vehicle_info_utils::VehicleInfo & vehicle_info) { // It returns the stop point and segment of the point on trajectory. diff --git a/control/pure_pursuit/package.xml b/control/pure_pursuit/package.xml index 0747766af54c8..32744d744f95f 100644 --- a/control/pure_pursuit/package.xml +++ b/control/pure_pursuit/package.xml @@ -16,6 +16,7 @@ autoware_control_msgs autoware_planning_msgs + autoware_vehicle_info_utils boost geometry_msgs libboost-dev @@ -32,7 +33,6 @@ tier4_autoware_utils tier4_debug_msgs trajectory_follower_base - vehicle_info_util visualization_msgs ament_lint_auto diff --git a/control/pure_pursuit/src/pure_pursuit/pure_pursuit_lateral_controller.cpp b/control/pure_pursuit/src/pure_pursuit/pure_pursuit_lateral_controller.cpp index a8232cce5d08d..eddcdb5e362df 100644 --- a/control/pure_pursuit/src/pure_pursuit/pure_pursuit_lateral_controller.cpp +++ b/control/pure_pursuit/src/pure_pursuit/pure_pursuit_lateral_controller.cpp @@ -34,7 +34,7 @@ #include "pure_pursuit/util/planning_utils.hpp" #include "pure_pursuit/util/tf_utils.hpp" -#include +#include #include #include @@ -65,7 +65,7 @@ PurePursuitLateralController::PurePursuitLateralController(rclcpp::Node & node) pure_pursuit_ = std::make_unique(); // Vehicle Parameters - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo(); param_.wheel_base = vehicle_info.wheel_base_m; param_.max_steering_angle = vehicle_info.max_steer_angle_rad; diff --git a/control/pure_pursuit/src/pure_pursuit/pure_pursuit_node.cpp b/control/pure_pursuit/src/pure_pursuit/pure_pursuit_node.cpp index a4b491930df1e..d629c8f549f52 100644 --- a/control/pure_pursuit/src/pure_pursuit/pure_pursuit_node.cpp +++ b/control/pure_pursuit/src/pure_pursuit/pure_pursuit_node.cpp @@ -34,7 +34,7 @@ #include "pure_pursuit/util/planning_utils.hpp" #include "pure_pursuit/util/tf_utils.hpp" -#include +#include #include #include @@ -59,7 +59,7 @@ PurePursuitNode::PurePursuitNode(const rclcpp::NodeOptions & node_options) pure_pursuit_ = std::make_unique(); // Vehicle Parameters - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); param_.wheel_base = vehicle_info.wheel_base_m; // Node Parameters diff --git a/control/trajectory_follower_base/package.xml b/control/trajectory_follower_base/package.xml index 6f2e9c3e8ebc2..b36b4669be04e 100644 --- a/control/trajectory_follower_base/package.xml +++ b/control/trajectory_follower_base/package.xml @@ -22,6 +22,7 @@ autoware_adapi_v1_msgs autoware_control_msgs autoware_planning_msgs + autoware_vehicle_info_utils autoware_vehicle_msgs diagnostic_msgs diagnostic_updater @@ -37,7 +38,6 @@ tf2_ros tier4_autoware_utils tier4_debug_msgs - vehicle_info_util ament_cmake_ros ament_lint_auto diff --git a/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp b/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp index 8e9752ba19f66..b342aace69bde 100644 --- a/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp +++ b/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp @@ -15,6 +15,7 @@ #ifndef TRAJECTORY_FOLLOWER_NODE__CONTROLLER_NODE_HPP_ #define TRAJECTORY_FOLLOWER_NODE__CONTROLLER_NODE_HPP_ +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "rclcpp/rclcpp.hpp" #include "tf2/utils.h" #include "tf2_ros/buffer.h" @@ -24,7 +25,6 @@ #include "trajectory_follower_base/lateral_controller_base.hpp" #include "trajectory_follower_base/longitudinal_controller_base.hpp" #include "trajectory_follower_node/visibility_control.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include #include diff --git a/control/trajectory_follower_node/package.xml b/control/trajectory_follower_node/package.xml index 92b99e690931f..c57a07155128a 100644 --- a/control/trajectory_follower_node/package.xml +++ b/control/trajectory_follower_node/package.xml @@ -24,6 +24,7 @@ autoware_mpc_lateral_controller autoware_pid_longitudinal_controller autoware_planning_msgs + autoware_vehicle_info_utils autoware_vehicle_msgs motion_utils pure_pursuit @@ -31,7 +32,6 @@ rclcpp_components tier4_autoware_utils trajectory_follower_base - vehicle_info_util visualization_msgs ros2launch diff --git a/evaluator/perception_online_evaluator/include/perception_online_evaluator/utils/marker_utils.hpp b/evaluator/perception_online_evaluator/include/perception_online_evaluator/utils/marker_utils.hpp index be335a2d78fa3..b05bb5e1d8ad3 100644 --- a/evaluator/perception_online_evaluator/include/perception_online_evaluator/utils/marker_utils.hpp +++ b/evaluator/perception_online_evaluator/include/perception_online_evaluator/utils/marker_utils.hpp @@ -15,7 +15,7 @@ #ifndef PERCEPTION_ONLINE_EVALUATOR__UTILS__MARKER_UTILS_HPP_ #define PERCEPTION_ONLINE_EVALUATOR__UTILS__MARKER_UTILS_HPP_ -#include +#include #include "autoware_perception_msgs/msg/predicted_objects.hpp" #include @@ -45,10 +45,10 @@ inline int64_t bitShift(int64_t original_id) void addFootprintMarker( visualization_msgs::msg::Marker & marker, const geometry_msgs::msg::Pose & pose, - const vehicle_info_util::VehicleInfo & vehicle_info); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info); MarkerArray createFootprintMarkerArray( - const Pose & base_link_pose, const vehicle_info_util::VehicleInfo vehicle_info, + const Pose & base_link_pose, const autoware::vehicle_info_utils::VehicleInfo vehicle_info, const std::string && ns, const int32_t & id, const float & r, const float & g, const float & b); MarkerArray createPointsMarkerArray( diff --git a/evaluator/perception_online_evaluator/package.xml b/evaluator/perception_online_evaluator/package.xml index 3f855e2f1f887..d64d3a5ec4957 100644 --- a/evaluator/perception_online_evaluator/package.xml +++ b/evaluator/perception_online_evaluator/package.xml @@ -18,6 +18,7 @@ autoware_cmake autoware_perception_msgs + autoware_vehicle_info_utils diagnostic_msgs eigen geometry_msgs @@ -32,7 +33,6 @@ tf2 tf2_ros tier4_autoware_utils - vehicle_info_util ament_cmake_ros ament_lint_auto diff --git a/evaluator/perception_online_evaluator/src/utils/marker_utils.cpp b/evaluator/perception_online_evaluator/src/utils/marker_utils.cpp index 523e11883e755..eddeadc331101 100644 --- a/evaluator/perception_online_evaluator/src/utils/marker_utils.cpp +++ b/evaluator/perception_online_evaluator/src/utils/marker_utils.cpp @@ -39,7 +39,7 @@ using visualization_msgs::msg::Marker; void addFootprintMarker( visualization_msgs::msg::Marker & marker, const geometry_msgs::msg::Pose & pose, - const vehicle_info_util::VehicleInfo & vehicle_info) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) { const double half_width = vehicle_info.vehicle_width_m / 2.0; const double base_to_front = vehicle_info.vehicle_length_m - vehicle_info.rear_overhang_m; @@ -57,7 +57,7 @@ void addFootprintMarker( } MarkerArray createFootprintMarkerArray( - const Pose & base_link_pose, const vehicle_info_util::VehicleInfo vehicle_info, + const Pose & base_link_pose, const autoware::vehicle_info_utils::VehicleInfo vehicle_info, const std::string && ns, const int32_t & id, const float & r, const float & g, const float & b) { const auto current_time = rclcpp::Clock{RCL_ROS_TIME}.now(); diff --git a/launch/tier4_sensing_launch/launch/sensing.launch.xml b/launch/tier4_sensing_launch/launch/sensing.launch.xml index 391a1f8bad641..9981c99a8f3fc 100644 --- a/launch/tier4_sensing_launch/launch/sensing.launch.xml +++ b/launch/tier4_sensing_launch/launch/sensing.launch.xml @@ -1,7 +1,7 @@ - + diff --git a/launch/tier4_sensing_launch/package.xml b/launch/tier4_sensing_launch/package.xml index a1f10ee743db5..410f685285b7d 100644 --- a/launch/tier4_sensing_launch/package.xml +++ b/launch/tier4_sensing_launch/package.xml @@ -10,7 +10,7 @@ ament_cmake_auto autoware_cmake - vehicle_info_util + autoware_vehicle_info_utils ament_lint_auto autoware_lint_common diff --git a/perception/ground_segmentation/include/ground_segmentation/scan_ground_filter_nodelet.hpp b/perception/ground_segmentation/include/ground_segmentation/scan_ground_filter_nodelet.hpp index d97bbaa2118e5..314c9cfb97a75 100644 --- a/perception/ground_segmentation/include/ground_segmentation/scan_ground_filter_nodelet.hpp +++ b/perception/ground_segmentation/include/ground_segmentation/scan_ground_filter_nodelet.hpp @@ -18,7 +18,7 @@ #include "pointcloud_preprocessor/filter.hpp" #include "pointcloud_preprocessor/transform_info.hpp" -#include +#include #include @@ -43,7 +43,7 @@ class ScanGroundFilterTest; namespace ground_segmentation { -using vehicle_info_util::VehicleInfo; +using autoware::vehicle_info_utils::VehicleInfo; class ScanGroundFilterComponent : public pointcloud_preprocessor::Filter { diff --git a/perception/ground_segmentation/launch/scan_ground_filter.launch.py b/perception/ground_segmentation/launch/scan_ground_filter.launch.py index d3d856925b9db..df8290997315e 100644 --- a/perception/ground_segmentation/launch/scan_ground_filter.launch.py +++ b/perception/ground_segmentation/launch/scan_ground_filter.launch.py @@ -85,7 +85,7 @@ def add_launch_arg(name: str, default_value=None): return DeclareLaunchArgument(name, default_value=default_value) default_vehicle_info_param = os.path.join( - get_package_share_directory("vehicle_info_util"), "config/vehicle_info.param.yaml" + get_package_share_directory("autoware_vehicle_info_utils"), "config/vehicle_info.param.yaml" ) vehicle_info_param = DeclareLaunchArgument( diff --git a/perception/ground_segmentation/launch/scan_ground_filter.launch.xml b/perception/ground_segmentation/launch/scan_ground_filter.launch.xml index 2a9e4983ecb56..1146138211211 100644 --- a/perception/ground_segmentation/launch/scan_ground_filter.launch.xml +++ b/perception/ground_segmentation/launch/scan_ground_filter.launch.xml @@ -3,7 +3,7 @@ - + diff --git a/perception/ground_segmentation/package.xml b/perception/ground_segmentation/package.xml index 05d5d18baf29e..1b807b393b739 100644 --- a/perception/ground_segmentation/package.xml +++ b/perception/ground_segmentation/package.xml @@ -19,6 +19,7 @@ ament_cmake_auto autoware_cmake + autoware_vehicle_info_utils libopencv-dev pcl_conversions pcl_ros @@ -31,7 +32,6 @@ tf2_eigen tf2_ros tf2_sensor_msgs - vehicle_info_util yaml-cpp ament_lint_auto diff --git a/perception/ground_segmentation/src/scan_ground_filter_nodelet.cpp b/perception/ground_segmentation/src/scan_ground_filter_nodelet.cpp index a63d218df62de..e638baba12521 100644 --- a/perception/ground_segmentation/src/scan_ground_filter_nodelet.cpp +++ b/perception/ground_segmentation/src/scan_ground_filter_nodelet.cpp @@ -14,10 +14,10 @@ #include "ground_segmentation/scan_ground_filter_nodelet.hpp" +#include #include #include #include -#include #include #include @@ -25,12 +25,12 @@ namespace ground_segmentation { +using autoware::vehicle_info_utils::VehicleInfoUtils; using pointcloud_preprocessor::get_param; using tier4_autoware_utils::calcDistance3d; using tier4_autoware_utils::deg2rad; using tier4_autoware_utils::normalizeDegree; using tier4_autoware_utils::normalizeRadian; -using vehicle_info_util::VehicleInfoUtil; ScanGroundFilterComponent::ScanGroundFilterComponent(const rclcpp::NodeOptions & options) : Filter("ScanGroundFilter", options) @@ -59,7 +59,7 @@ ScanGroundFilterComponent::ScanGroundFilterComponent(const rclcpp::NodeOptions & use_recheck_ground_cluster_ = declare_parameter("use_recheck_ground_cluster"); use_lowest_point_ = declare_parameter("use_lowest_point"); radial_dividers_num_ = std::ceil(2.0 * M_PI / radial_divider_angle_rad_); - vehicle_info_ = VehicleInfoUtil(*this).getVehicleInfo(); + vehicle_info_ = VehicleInfoUtils(*this).getVehicleInfo(); grid_mode_switch_grid_id_ = grid_mode_switch_radius_ / grid_size_m_; // changing the mode of grid division diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/marker_utils/utils.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/marker_utils/utils.hpp index 4abbfd419c43b..04873d9ebcfab 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/marker_utils/utils.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/marker_utils/utils.hpp @@ -18,7 +18,7 @@ #include "autoware_behavior_path_planner_common/utils/path_safety_checker/path_safety_checker_parameters.hpp" #include "autoware_behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" -#include +#include #include #include @@ -60,10 +60,10 @@ inline int64_t bitShift(int64_t original_id) void addFootprintMarker( visualization_msgs::msg::Marker & marker, const geometry_msgs::msg::Pose & pose, - const vehicle_info_util::VehicleInfo & vehicle_info); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info); MarkerArray createFootprintMarkerArray( - const Pose & base_link_pose, const vehicle_info_util::VehicleInfo vehicle_info, + const Pose & base_link_pose, const autoware::vehicle_info_utils::VehicleInfo vehicle_info, const std::string && ns, const int32_t & id, const float & r, const float & g, const float & b); MarkerArray createPointsMarkerArray( @@ -107,8 +107,9 @@ MarkerArray createDrivableLanesMarkerArray( const std::vector & drivable_lanes, std::string && ns); MarkerArray createPredictedPathMarkerArray( - const PredictedPath & ego_predicted_path, const vehicle_info_util::VehicleInfo & vehicle_info, - std::string && ns, const int32_t & id, const float & r, const float & g, const float & b); + const PredictedPath & ego_predicted_path, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, std::string && ns, + const int32_t & id, const float & r, const float & g, const float & b); MarkerArray showPolygon(const CollisionCheckDebugMap & obj_debug_vec, std::string && ns); diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/parameters.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/parameters.hpp index 21d4906380b59..2f14e227d05ef 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/parameters.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/parameters.hpp @@ -15,7 +15,7 @@ #ifndef AUTOWARE_BEHAVIOR_PATH_PLANNER_COMMON__PARAMETERS_HPP_ #define AUTOWARE_BEHAVIOR_PATH_PLANNER_COMMON__PARAMETERS_HPP_ -#include +#include struct ModuleConfigParameters { @@ -66,7 +66,7 @@ struct BehaviorPathPlannerParameters double ego_nearest_yaw_threshold; // vehicle info - vehicle_info_util::VehicleInfo vehicle_info; + autoware::vehicle_info_utils::VehicleInfo vehicle_info; double wheel_base; double front_overhang; double rear_overhang; diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/turn_signal_decider.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/turn_signal_decider.hpp index 4dda036fecdb7..d658d29710704 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/turn_signal_decider.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/turn_signal_decider.hpp @@ -237,7 +237,7 @@ class TurnSignalDecider inline bool straddleRoadBound( const ShiftedPath & path, const ShiftLine & shift_line, const lanelet::ConstLanelets & lanes, - const vehicle_info_util::VehicleInfo & vehicle_info) const + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) const { using boost::geometry::intersects; using tier4_autoware_utils::pose2transform; diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/drivable_area_expansion/parameters.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/drivable_area_expansion/parameters.hpp index 32613948814ae..35da7e4e24382 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/drivable_area_expansion/parameters.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/drivable_area_expansion/parameters.hpp @@ -15,8 +15,8 @@ #ifndef AUTOWARE_BEHAVIOR_PATH_PLANNER_COMMON__UTILS__DRIVABLE_AREA_EXPANSION__PARAMETERS_HPP_ #define AUTOWARE_BEHAVIOR_PATH_PLANNER_COMMON__UTILS__DRIVABLE_AREA_EXPANSION__PARAMETERS_HPP_ +#include #include -#include #include #include @@ -83,7 +83,7 @@ struct DrivableAreaExpansionParameters bool avoid_dynamic_objects{}; bool print_runtime{}; std::vector avoid_linestring_types{}; - vehicle_info_util::VehicleInfo vehicle_info; + autoware::vehicle_info_utils::VehicleInfo vehicle_info; DrivableAreaExpansionParameters() = default; explicit DrivableAreaExpansionParameters(rclcpp::Node & node) { init(node); } @@ -121,7 +121,7 @@ struct DrivableAreaExpansionParameters avoid_linestring_dist = node.declare_parameter(AVOID_LINESTRING_DIST_PARAM); print_runtime = node.declare_parameter(PRINT_RUNTIME_PARAM); - vehicle_info = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo(); + vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo(); } }; diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/path_safety_checker/safety_check.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/path_safety_checker/safety_check.hpp index d0693a271379e..018e1c87e2302 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/path_safety_checker/safety_check.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/path_safety_checker/safety_check.hpp @@ -31,6 +31,7 @@ namespace behavior_path_planner::utils::path_safety_checker { +using autoware::vehicle_info_utils::VehicleInfo; using autoware_perception_msgs::msg::PredictedObject; using autoware_perception_msgs::msg::PredictedPath; using autoware_perception_msgs::msg::Shape; @@ -40,7 +41,6 @@ using geometry_msgs::msg::Twist; using tier4_autoware_utils::calcYawDeviation; using tier4_autoware_utils::Point2d; using tier4_autoware_utils::Polygon2d; -using vehicle_info_util::VehicleInfo; bool isTargetObjectOncoming( const geometry_msgs::msg::Pose & vehicle_pose, const geometry_msgs::msg::Pose & object_pose, @@ -48,13 +48,13 @@ bool isTargetObjectOncoming( bool isTargetObjectFront( const geometry_msgs::msg::Pose & ego_pose, const Polygon2d & obj_polygon, - const vehicle_info_util::VehicleInfo & vehicle_info); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info); bool isTargetObjectFront( const PathWithLaneId & path, const geometry_msgs::msg::Pose & ego_pose, - const vehicle_info_util::VehicleInfo & vehicle_info, const Polygon2d & obj_polygon); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const Polygon2d & obj_polygon); Polygon2d createExtendedPolygon( - const Pose & base_link_pose, const vehicle_info_util::VehicleInfo & vehicle_info, + const Pose & base_link_pose, const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double lon_length, const double lat_margin, const bool is_stopped_obj, CollisionCheckDebug & debug); Polygon2d createExtendedPolygon( diff --git a/planning/autoware_behavior_path_planner_common/package.xml b/planning/autoware_behavior_path_planner_common/package.xml index 03391063b14fc..e9b33f3e71d6f 100644 --- a/planning/autoware_behavior_path_planner_common/package.xml +++ b/planning/autoware_behavior_path_planner_common/package.xml @@ -48,6 +48,7 @@ autoware_perception_msgs autoware_planning_msgs autoware_rtc_interface + autoware_vehicle_info_utils geometry_msgs interpolation lanelet2_extension @@ -61,7 +62,6 @@ tier4_autoware_utils tier4_planning_msgs traffic_light_utils - vehicle_info_util visualization_msgs ament_cmake_ros ament_lint_auto diff --git a/planning/autoware_behavior_path_planner_common/src/marker_utils/utils.cpp b/planning/autoware_behavior_path_planner_common/src/marker_utils/utils.cpp index 2b150b807c6ce..a22a63ba0fe6d 100644 --- a/planning/autoware_behavior_path_planner_common/src/marker_utils/utils.cpp +++ b/planning/autoware_behavior_path_planner_common/src/marker_utils/utils.cpp @@ -42,7 +42,7 @@ using visualization_msgs::msg::Marker; void addFootprintMarker( visualization_msgs::msg::Marker & marker, const geometry_msgs::msg::Pose & pose, - const vehicle_info_util::VehicleInfo & vehicle_info) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) { const double half_width = vehicle_info.vehicle_width_m / 2.0; const double base_to_front = vehicle_info.vehicle_length_m - vehicle_info.rear_overhang_m; @@ -60,7 +60,7 @@ void addFootprintMarker( } MarkerArray createFootprintMarkerArray( - const Pose & base_link_pose, const vehicle_info_util::VehicleInfo vehicle_info, + const Pose & base_link_pose, const autoware::vehicle_info_utils::VehicleInfo vehicle_info, const std::string && ns, const int32_t & id, const float & r, const float & g, const float & b) { const auto current_time = rclcpp::Clock{RCL_ROS_TIME}.now(); @@ -388,8 +388,9 @@ MarkerArray createDrivableLanesMarkerArray( return msg; } MarkerArray createPredictedPathMarkerArray( - const PredictedPath & predicted_path, const vehicle_info_util::VehicleInfo & vehicle_info, - std::string && ns, const int32_t & id, const float & r, const float & g, const float & b) + const PredictedPath & predicted_path, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, std::string && ns, + const int32_t & id, const float & r, const float & g, const float & b) { if (predicted_path.path.empty()) { return MarkerArray{}; diff --git a/planning/autoware_behavior_path_planner_common/src/utils/path_safety_checker/safety_check.cpp b/planning/autoware_behavior_path_planner_common/src/utils/path_safety_checker/safety_check.cpp index 233e6f47b92cc..7951be43aa799 100644 --- a/planning/autoware_behavior_path_planner_common/src/utils/path_safety_checker/safety_check.cpp +++ b/planning/autoware_behavior_path_planner_common/src/utils/path_safety_checker/safety_check.cpp @@ -51,7 +51,7 @@ bool isTargetObjectOncoming( bool isTargetObjectFront( const geometry_msgs::msg::Pose & ego_pose, const Polygon2d & obj_polygon, - const vehicle_info_util::VehicleInfo & vehicle_info) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) { const double base_to_front = vehicle_info.max_longitudinal_offset_m; const auto ego_offset_pose = @@ -71,7 +71,7 @@ bool isTargetObjectFront( bool isTargetObjectFront( const PathWithLaneId & path, const geometry_msgs::msg::Pose & ego_pose, - const vehicle_info_util::VehicleInfo & vehicle_info, const Polygon2d & obj_polygon) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const Polygon2d & obj_polygon) { const double base_to_front = vehicle_info.max_longitudinal_offset_m; const auto ego_point = @@ -90,7 +90,7 @@ bool isTargetObjectFront( } Polygon2d createExtendedPolygon( - const Pose & base_link_pose, const vehicle_info_util::VehicleInfo & vehicle_info, + const Pose & base_link_pose, const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double lon_length, const double lat_margin, const bool is_stopped_obj, CollisionCheckDebug & debug) { @@ -189,7 +189,7 @@ Polygon2d createExtendedPolygon( Polygon2d createExtendedPolygonAlongPath( const PathWithLaneId & planned_path, const Pose & base_link_pose, - const vehicle_info_util::VehicleInfo & vehicle_info, const double lon_length, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double lon_length, const double lat_margin, const bool is_stopped_obj, CollisionCheckDebug & debug) { const double & base_to_front = vehicle_info.max_longitudinal_offset_m; diff --git a/planning/autoware_behavior_path_planner_common/test/test_safety_check.cpp b/planning/autoware_behavior_path_planner_common/test/test_safety_check.cpp index 3cb71b1f9c4e2..4f23c9f6c07c0 100644 --- a/planning/autoware_behavior_path_planner_common/test/test_safety_check.cpp +++ b/planning/autoware_behavior_path_planner_common/test/test_safety_check.cpp @@ -39,7 +39,7 @@ TEST(BehaviorPathPlanningSafetyUtilsTest, createExtendedEgoPolygon) { using behavior_path_planner::utils::path_safety_checker::createExtendedPolygon; - vehicle_info_util::VehicleInfo vehicle_info; + autoware::vehicle_info_utils::VehicleInfo vehicle_info; vehicle_info.max_longitudinal_offset_m = 4.0; vehicle_info.vehicle_width_m = 2.0; vehicle_info.rear_overhang_m = 1.0; diff --git a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/freespace_pull_out.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/freespace_pull_out.hpp index 613911ba33460..0c8eb1850b9d5 100644 --- a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/freespace_pull_out.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/freespace_pull_out.hpp @@ -36,7 +36,7 @@ class FreespacePullOut : public PullOutPlannerBase public: FreespacePullOut( rclcpp::Node & node, const StartPlannerParameters & parameters, - const vehicle_info_util::VehicleInfo & vehicle_info); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info); PlannerType getPlannerType() const override { return PlannerType::FREESPACE; } diff --git a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/pull_out_planner_base.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/pull_out_planner_base.hpp index 8cbe3569d13fe..38eeb558e85eb 100644 --- a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/pull_out_planner_base.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/pull_out_planner_base.hpp @@ -45,7 +45,7 @@ class PullOutPlannerBase public: explicit PullOutPlannerBase(rclcpp::Node & node, const StartPlannerParameters & parameters) { - vehicle_info_ = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo(); + vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo(); vehicle_footprint_ = vehicle_info_.createFootprint(); parameters_ = parameters; } @@ -95,7 +95,7 @@ class PullOutPlannerBase collision_check_margin_); }; std::shared_ptr planner_data_; - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; LinearRing2d vehicle_footprint_; StartPlannerParameters parameters_; double collision_check_margin_; diff --git a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/start_planner_module.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/start_planner_module.hpp index 7a98a43efec5b..ccbf1eada7378 100644 --- a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/start_planner_module.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/start_planner_module.hpp @@ -28,8 +28,8 @@ #include "autoware_behavior_path_start_planner_module/shift_pull_out.hpp" #include -#include -#include +#include +#include #include @@ -255,7 +255,7 @@ class StartPlannerModule : public SceneModuleInterface mutable std::shared_ptr ego_predicted_path_params_; mutable std::shared_ptr objects_filtering_params_; mutable std::shared_ptr safety_check_params_; - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; std::vector> start_planners_; PullOutStatus status_; diff --git a/planning/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp b/planning/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp index f0a83741212b8..1b154138d427e 100644 --- a/planning/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp +++ b/planning/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp @@ -28,7 +28,7 @@ namespace behavior_path_planner { FreespacePullOut::FreespacePullOut( rclcpp::Node & node, const StartPlannerParameters & parameters, - const vehicle_info_util::VehicleInfo & vehicle_info) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) : PullOutPlannerBase{node, parameters}, velocity_{parameters.freespace_planner_velocity} { autoware::freespace_planning_algorithms::VehicleShape vehicle_shape( diff --git a/planning/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp b/planning/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp index b30af17eaa898..2efd2bc17e6ab 100644 --- a/planning/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp +++ b/planning/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp @@ -60,7 +60,7 @@ StartPlannerModule::StartPlannerModule( objects_of_interest_marker_interface_ptr_map) : SceneModuleInterface{name, node, rtc_interface_ptr_map, objects_of_interest_marker_interface_ptr_map}, // NOLINT parameters_{parameters}, - vehicle_info_{vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo()}, + vehicle_info_{autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo()}, is_freespace_planner_cb_running_{false} { lane_departure_checker_ = std::make_shared(); diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml b/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml index e3699306df1f3..5a47bed4c712a 100644 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml +++ b/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml @@ -24,6 +24,7 @@ autoware_behavior_path_planner_common autoware_perception_msgs autoware_rtc_interface + autoware_vehicle_info_utils behavior_path_planner geometry_msgs lanelet2_extension @@ -41,7 +42,6 @@ tf2_ros tier4_autoware_utils tier4_planning_msgs - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp b/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp index 8671c71430b3d..1408c096c7e4e 100644 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp +++ b/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp @@ -138,7 +138,7 @@ double calcSignedArcLengthToFirstNearestPoint( } geometry_msgs::msg::Polygon createVehiclePolygon( - const vehicle_info_util::VehicleInfo & vehicle_info, const double offset) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double offset) { const auto & i = vehicle_info; const auto & front_m = i.max_longitudinal_offset_m; diff --git a/planning/autoware_behavior_velocity_intersection_module/package.xml b/planning/autoware_behavior_velocity_intersection_module/package.xml index 0655867951ed8..5ce1ff206a1a9 100644 --- a/planning/autoware_behavior_velocity_intersection_module/package.xml +++ b/planning/autoware_behavior_velocity_intersection_module/package.xml @@ -22,6 +22,7 @@ autoware_perception_msgs autoware_planning_msgs autoware_rtc_interface + autoware_vehicle_info_utils fmt geometry_msgs interpolation @@ -36,7 +37,6 @@ tf2_geometry_msgs tier4_autoware_utils tier4_planning_msgs - vehicle_info_util visualization_msgs ament_lint_auto diff --git a/planning/autoware_behavior_velocity_occlusion_spot_module/package.xml b/planning/autoware_behavior_velocity_occlusion_spot_module/package.xml index 2f56bce7155b5..d8177ddc908f3 100644 --- a/planning/autoware_behavior_velocity_occlusion_spot_module/package.xml +++ b/planning/autoware_behavior_velocity_occlusion_spot_module/package.xml @@ -19,6 +19,7 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_vehicle_info_utils geometry_msgs grid_map_ros grid_map_utils @@ -34,7 +35,6 @@ tf2 tf2_geometry_msgs tier4_autoware_utils - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/planning/autoware_behavior_velocity_occlusion_spot_module/src/manager.cpp b/planning/autoware_behavior_velocity_occlusion_spot_module/src/manager.cpp index b1757c4142212..c1d345cbc9aac 100644 --- a/planning/autoware_behavior_velocity_occlusion_spot_module/src/manager.cpp +++ b/planning/autoware_behavior_velocity_occlusion_spot_module/src/manager.cpp @@ -109,7 +109,7 @@ OcclusionSpotModuleManager::OcclusionSpotModuleManager(rclcpp::Node & node) pp.grid.free_space_max = getOrDeclareParameter(node, ns + ".grid.free_space_max"); pp.grid.occupied_min = getOrDeclareParameter(node, ns + ".grid.occupied_min"); - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo(); pp.baselink_to_front = vehicle_info.max_longitudinal_offset_m; pp.wheel_tread = vehicle_info.wheel_tread_m; pp.right_overhang = vehicle_info.right_overhang_m; diff --git a/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp index c69f23215a369..df5d083f5dcb1 100644 --- a/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp @@ -18,8 +18,8 @@ #include "route_handler/route_handler.hpp" #include +#include #include -#include #include #include @@ -51,7 +51,7 @@ class BehaviorVelocityPlannerNode; struct PlannerData { explicit PlannerData(rclcpp::Node & node) - : vehicle_info_(vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo()) + : vehicle_info_(autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo()) { max_stop_acceleration_threshold = node.declare_parameter( "max_accel"); // TODO(someone): read min_acc in velocity_controller.param.yaml? @@ -92,7 +92,7 @@ struct PlannerData // route handler std::shared_ptr route_handler_; // parameters - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; // additional parameters double max_stop_acceleration_threshold; diff --git a/planning/autoware_behavior_velocity_planner_common/package.xml b/planning/autoware_behavior_velocity_planner_common/package.xml index 7ab991a247a63..0e317ceb5db66 100644 --- a/planning/autoware_behavior_velocity_planner_common/package.xml +++ b/planning/autoware_behavior_velocity_planner_common/package.xml @@ -24,6 +24,7 @@ autoware_perception_msgs autoware_planning_msgs autoware_rtc_interface + autoware_vehicle_info_utils autoware_velocity_smoother diagnostic_msgs eigen @@ -46,7 +47,6 @@ tier4_autoware_utils tier4_planning_msgs tier4_v2x_msgs - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/planning/autoware_behavior_velocity_run_out_module/package.xml b/planning/autoware_behavior_velocity_run_out_module/package.xml index 330880b77d3da..284797cbed0a8 100644 --- a/planning/autoware_behavior_velocity_run_out_module/package.xml +++ b/planning/autoware_behavior_velocity_run_out_module/package.xml @@ -22,6 +22,7 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_vehicle_info_utils behavior_velocity_crosswalk_module eigen geometry_msgs @@ -38,7 +39,6 @@ tf2_eigen tf2_ros tier4_autoware_utils - vehicle_info_util visualization_msgs ament_lint_auto diff --git a/planning/autoware_behavior_velocity_run_out_module/src/manager.cpp b/planning/autoware_behavior_velocity_run_out_module/src/manager.cpp index 002a49abae611..4da58522165d6 100644 --- a/planning/autoware_behavior_velocity_run_out_module/src/manager.cpp +++ b/planning/autoware_behavior_velocity_run_out_module/src/manager.cpp @@ -28,7 +28,7 @@ RunOutModuleManager::RunOutModuleManager(rclcpp::Node & node) { // Vehicle Parameters { - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo(); auto & p = planner_param_.vehicle_param; p.base_to_front = vehicle_info.wheel_base_m + vehicle_info.front_overhang_m; p.base_to_rear = vehicle_info.rear_overhang_m; diff --git a/planning/autoware_behavior_velocity_run_out_module/src/utils.hpp b/planning/autoware_behavior_velocity_run_out_module/src/utils.hpp index 28bfa9569c66d..90f8238d0d543 100644 --- a/planning/autoware_behavior_velocity_run_out_module/src/utils.hpp +++ b/planning/autoware_behavior_velocity_run_out_module/src/utils.hpp @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include @@ -34,6 +34,7 @@ namespace autoware::behavior_velocity_planner namespace run_out_utils { namespace bg = boost::geometry; +using autoware::vehicle_info_utils::VehicleInfo; using autoware_perception_msgs::msg::ObjectClassification; using autoware_perception_msgs::msg::PredictedObjects; using autoware_perception_msgs::msg::Shape; @@ -44,7 +45,6 @@ using tier4_autoware_utils::Point2d; using tier4_autoware_utils::Polygon2d; using tier4_debug_msgs::msg::Float32Stamped; using tier4_planning_msgs::msg::PathWithLaneId; -using vehicle_info_util::VehicleInfo; using PathPointsWithLaneId = std::vector; struct CommonParam { diff --git a/planning/autoware_behavior_velocity_virtual_traffic_light_module/package.xml b/planning/autoware_behavior_velocity_virtual_traffic_light_module/package.xml index cda3abbd0eee9..415dcd983a8df 100644 --- a/planning/autoware_behavior_velocity_virtual_traffic_light_module/package.xml +++ b/planning/autoware_behavior_velocity_virtual_traffic_light_module/package.xml @@ -19,6 +19,7 @@ autoware_adapi_v1_msgs autoware_behavior_velocity_planner_common autoware_planning_msgs + autoware_vehicle_info_utils geometry_msgs lanelet2_extension motion_utils @@ -29,7 +30,6 @@ tier4_autoware_utils tier4_planning_msgs tier4_v2x_msgs - vehicle_info_util visualization_msgs ament_lint_auto diff --git a/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.hpp b/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.hpp index 9775e64145529..d413a8721c09e 100644 --- a/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.hpp +++ b/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.hpp @@ -16,13 +16,13 @@ #define SCENE_HPP_ #include +#include #include #include #include #include #include #include -#include #include #include diff --git a/planning/autoware_behavior_velocity_walkway_module/package.xml b/planning/autoware_behavior_velocity_walkway_module/package.xml index bbe87ffb8b2cd..60ef7593ab8ff 100644 --- a/planning/autoware_behavior_velocity_walkway_module/package.xml +++ b/planning/autoware_behavior_velocity_walkway_module/package.xml @@ -19,6 +19,7 @@ autoware_behavior_velocity_planner_common autoware_planning_msgs + autoware_vehicle_info_utils behavior_velocity_crosswalk_module geometry_msgs lanelet2_extension @@ -28,7 +29,6 @@ rclcpp route_handler tier4_autoware_utils - vehicle_info_util visualization_msgs ament_lint_auto diff --git a/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/abstract_algorithm.hpp b/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/abstract_algorithm.hpp index 27a563f4ec1af..394900c9a704c 100644 --- a/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/abstract_algorithm.hpp +++ b/planning/autoware_freespace_planning_algorithms/include/autoware_freespace_planning_algorithms/abstract_algorithm.hpp @@ -15,8 +15,8 @@ #ifndef AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__ABSTRACT_ALGORITHM_HPP_ #define AUTOWARE_FREESPACE_PLANNING_ALGORITHMS__ABSTRACT_ALGORITHM_HPP_ +#include #include -#include #include #include @@ -69,7 +69,7 @@ struct VehicleShape } explicit VehicleShape( - const vehicle_info_util::VehicleInfo & vehicle_info, const double margin = 0.0) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double margin = 0.0) : length(vehicle_info.vehicle_length_m + margin), width(vehicle_info.vehicle_width_m + margin), base2back(vehicle_info.rear_overhang_m + margin / 2.0) @@ -125,7 +125,7 @@ class AbstractPlanningAlgorithm AbstractPlanningAlgorithm( const PlannerCommonParam & planner_common_param, - const vehicle_info_util::VehicleInfo & vehicle_info, const double margin = 0.0) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double margin = 0.0) : planner_common_param_(planner_common_param), collision_vehicle_shape_(vehicle_info, margin) { } diff --git a/planning/autoware_freespace_planning_algorithms/package.xml b/planning/autoware_freespace_planning_algorithms/package.xml index d2b7ddc7c620a..61173f0a877e4 100644 --- a/planning/autoware_freespace_planning_algorithms/package.xml +++ b/planning/autoware_freespace_planning_algorithms/package.xml @@ -16,6 +16,7 @@ autoware_cmake python_cmake_module + autoware_vehicle_info_utils geometry_msgs nav_msgs nlohmann-json-dev @@ -25,7 +26,6 @@ tf2 tf2_geometry_msgs tier4_autoware_utils - vehicle_info_util ament_cmake_ros ament_lint_auto diff --git a/planning/autoware_path_optimizer/include/autoware_path_optimizer/debug_marker.hpp b/planning/autoware_path_optimizer/include/autoware_path_optimizer/debug_marker.hpp index edca8d706047b..cea58a11a530a 100644 --- a/planning/autoware_path_optimizer/include/autoware_path_optimizer/debug_marker.hpp +++ b/planning/autoware_path_optimizer/include/autoware_path_optimizer/debug_marker.hpp @@ -16,10 +16,10 @@ #include "autoware_path_optimizer/common_structs.hpp" #include "autoware_path_optimizer/type_alias.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "rclcpp/clock.hpp" #include "tier4_autoware_utils/geometry/geometry.hpp" #include "tier4_autoware_utils/ros/marker_helper.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include #include @@ -30,6 +30,6 @@ namespace autoware::path_optimizer MarkerArray getDebugMarker( const DebugData & debug_data, const std::vector & optimized_points, - const vehicle_info_util::VehicleInfo & vehicle_info, const bool publish_extra_marker); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const bool publish_extra_marker); } // namespace autoware::path_optimizer #endif // AUTOWARE_PATH_OPTIMIZER__DEBUG_MARKER_HPP_ diff --git a/planning/autoware_path_optimizer/include/autoware_path_optimizer/mpt_optimizer.hpp b/planning/autoware_path_optimizer/include/autoware_path_optimizer/mpt_optimizer.hpp index 8c207a9a3830f..98d7e131f4bdc 100644 --- a/planning/autoware_path_optimizer/include/autoware_path_optimizer/mpt_optimizer.hpp +++ b/planning/autoware_path_optimizer/include/autoware_path_optimizer/mpt_optimizer.hpp @@ -18,12 +18,12 @@ #include "autoware_path_optimizer/common_structs.hpp" #include "autoware_path_optimizer/state_equation_generator.hpp" #include "autoware_path_optimizer/type_alias.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "gtest/gtest.h" #include "interpolation/linear_interpolation.hpp" #include "interpolation/spline_interpolation_points_2d.hpp" #include "osqp_interface/osqp_interface.hpp" #include "tier4_autoware_utils/geometry/geometry.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include #include @@ -105,8 +105,8 @@ class MPTOptimizer public: MPTOptimizer( rclcpp::Node * node, const bool enable_debug_info, const EgoNearestParam ego_nearest_param, - const vehicle_info_util::VehicleInfo & vehicle_info, const TrajectoryParam & traj_param, - const std::shared_ptr debug_data_ptr, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, + const TrajectoryParam & traj_param, const std::shared_ptr debug_data_ptr, const std::shared_ptr time_keeper_ptr); std::vector optimizeTrajectory(const PlannerData & planner_data); @@ -142,7 +142,8 @@ class MPTOptimizer struct MPTParam { - explicit MPTParam(rclcpp::Node * node, const vehicle_info_util::VehicleInfo & vehicle_info); + explicit MPTParam( + rclcpp::Node * node, const autoware::vehicle_info_utils::VehicleInfo & vehicle_info); MPTParam() = default; void onParam(const std::vector & parameters); @@ -218,7 +219,7 @@ class MPTOptimizer // argument bool enable_debug_info_; EgoNearestParam ego_nearest_param_; - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; TrajectoryParam traj_param_; mutable std::shared_ptr debug_data_ptr_; mutable std::shared_ptr time_keeper_ptr_; diff --git a/planning/autoware_path_optimizer/include/autoware_path_optimizer/node.hpp b/planning/autoware_path_optimizer/include/autoware_path_optimizer/node.hpp index 30c95debe11cb..c1f644d31aa9a 100644 --- a/planning/autoware_path_optimizer/include/autoware_path_optimizer/node.hpp +++ b/planning/autoware_path_optimizer/include/autoware_path_optimizer/node.hpp @@ -19,11 +19,11 @@ #include "autoware_path_optimizer/mpt_optimizer.hpp" #include "autoware_path_optimizer/replan_checker.hpp" #include "autoware_path_optimizer/type_alias.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "motion_utils/trajectory/trajectory.hpp" #include "rclcpp/rclcpp.hpp" #include "tier4_autoware_utils/ros/logger_level_configure.hpp" #include "tier4_autoware_utils/ros/polling_subscriber.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include @@ -63,7 +63,7 @@ class PathOptimizer : public rclcpp::Node DrivingDirectionChecker driving_direction_checker_{}; // argument variables - vehicle_info_util::VehicleInfo vehicle_info_{}; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_{}; mutable std::shared_ptr debug_data_ptr_{nullptr}; mutable std::shared_ptr time_keeper_ptr_{nullptr}; diff --git a/planning/autoware_path_optimizer/include/autoware_path_optimizer/utils/geometry_utils.hpp b/planning/autoware_path_optimizer/include/autoware_path_optimizer/utils/geometry_utils.hpp index 588b68f52a094..aa44a515a08ec 100644 --- a/planning/autoware_path_optimizer/include/autoware_path_optimizer/utils/geometry_utils.hpp +++ b/planning/autoware_path_optimizer/include/autoware_path_optimizer/utils/geometry_utils.hpp @@ -17,11 +17,11 @@ #include "autoware_path_optimizer/common_structs.hpp" #include "autoware_path_optimizer/type_alias.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "interpolation/linear_interpolation.hpp" #include "interpolation/spline_interpolation.hpp" #include "interpolation/spline_interpolation_points_2d.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include @@ -65,7 +65,7 @@ bool isSamePoint(const T1 & t1, const T2 & t2) bool isOutsideDrivableAreaFromRectangleFootprint( const geometry_msgs::msg::Pose & pose, const std::vector & left_bound, const std::vector & right_bound, - const vehicle_info_util::VehicleInfo & vehicle_info, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const bool use_footprint_polygon_for_outside_drivable_area_check); } // namespace geometry_utils } // namespace autoware::path_optimizer diff --git a/planning/autoware_path_optimizer/package.xml b/planning/autoware_path_optimizer/package.xml index f02473ebd015e..c158815999398 100644 --- a/planning/autoware_path_optimizer/package.xml +++ b/planning/autoware_path_optimizer/package.xml @@ -16,6 +16,7 @@ autoware_planning_msgs autoware_planning_test_manager + autoware_vehicle_info_utils geometry_msgs interpolation motion_utils @@ -28,7 +29,6 @@ tier4_autoware_utils tier4_debug_msgs tier4_planning_msgs - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/planning/autoware_path_optimizer/src/debug_marker.cpp b/planning/autoware_path_optimizer/src/debug_marker.cpp index 7c644f4448a0c..c97d5c5adec46 100644 --- a/planning/autoware_path_optimizer/src/debug_marker.cpp +++ b/planning/autoware_path_optimizer/src/debug_marker.cpp @@ -29,7 +29,7 @@ namespace { MarkerArray getFootprintsMarkerArray( const std::vector & mpt_traj, - const vehicle_info_util::VehicleInfo & vehicle_info, const size_t sampling_num) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const size_t sampling_num) { auto marker = createDefaultMarker( "map", rclcpp::Clock().now(), "mpt_footprints", 0, Marker::LINE_STRIP, @@ -73,7 +73,7 @@ MarkerArray getFootprintsMarkerArray( MarkerArray getBoundsWidthMarkerArray( const std::vector & ref_points, - const vehicle_info_util::VehicleInfo & vehicle_info, const size_t sampling_num) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const size_t sampling_num) { const auto current_time = rclcpp::Clock().now(); MarkerArray marker_array; @@ -146,7 +146,7 @@ MarkerArray getBoundsWidthMarkerArray( MarkerArray getBoundsLineMarkerArray( const std::vector & ref_points, - const vehicle_info_util::VehicleInfo & vehicle_info) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) { MarkerArray marker_array; @@ -183,7 +183,7 @@ MarkerArray getBoundsLineMarkerArray( MarkerArray getVehicleCircleLinesMarkerArray( const std::vector & ref_points, const std::vector & vehicle_circle_longitudinal_offsets, - const vehicle_info_util::VehicleInfo & vehicle_info, const size_t sampling_num, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const size_t sampling_num, const std::string & ns) { const auto current_time = rclcpp::Clock().now(); @@ -339,8 +339,9 @@ visualization_msgs::msg::MarkerArray getPointsTextMarkerArray( } visualization_msgs::msg::MarkerArray getFootprintByDrivableAreaMarkerArray( - const geometry_msgs::msg::Pose & stop_pose, const vehicle_info_util::VehicleInfo & vehicle_info, - const std::string & ns, const double r, const double g, const double b) + const geometry_msgs::msg::Pose & stop_pose, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const std::string & ns, + const double r, const double g, const double b) { visualization_msgs::msg::MarkerArray msg; @@ -373,7 +374,7 @@ visualization_msgs::msg::MarkerArray getFootprintByDrivableAreaMarkerArray( MarkerArray getDebugMarker( const DebugData & debug_data, const std::vector & optimized_points, - const vehicle_info_util::VehicleInfo & vehicle_info, const bool publish_extra_marker) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const bool publish_extra_marker) { MarkerArray marker_array; diff --git a/planning/autoware_path_optimizer/src/mpt_optimizer.cpp b/planning/autoware_path_optimizer/src/mpt_optimizer.cpp index 2ab622c6b4b58..0652085d85c48 100644 --- a/planning/autoware_path_optimizer/src/mpt_optimizer.cpp +++ b/planning/autoware_path_optimizer/src/mpt_optimizer.cpp @@ -34,7 +34,7 @@ namespace autoware::path_optimizer namespace { std::tuple, std::vector> calcVehicleCirclesByUniformCircle( - const vehicle_info_util::VehicleInfo & vehicle_info, const size_t circle_num, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const size_t circle_num, const double radius_ratio) { const double lateral_offset = @@ -56,7 +56,7 @@ std::tuple, std::vector> calcVehicleCirclesByUniform } std::tuple, std::vector> calcVehicleCirclesByBicycleModel( - const vehicle_info_util::VehicleInfo & vehicle_info, const size_t circle_num, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const size_t circle_num, const double rear_radius_ratio, const double front_radius_ratio) { if (circle_num < 2) { @@ -84,7 +84,7 @@ std::tuple, std::vector> calcVehicleCirclesByBicycle } std::tuple, std::vector> calcVehicleCirclesByFittingUniformCircle( - const vehicle_info_util::VehicleInfo & vehicle_info, const size_t circle_num) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const size_t circle_num) { if (circle_num < 2) { throw std::invalid_argument("circle_num is less than 2."); @@ -169,7 +169,7 @@ double calcLateralDistToBounds( } // namespace MPTOptimizer::MPTParam::MPTParam( - rclcpp::Node * node, const vehicle_info_util::VehicleInfo & vehicle_info) + rclcpp::Node * node, const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) { { // option steer_limit_constraint = node->declare_parameter("mpt.option.steer_limit_constraint"); @@ -393,8 +393,8 @@ void MPTOptimizer::MPTParam::onParam(const std::vector & para MPTOptimizer::MPTOptimizer( rclcpp::Node * node, const bool enable_debug_info, const EgoNearestParam ego_nearest_param, - const vehicle_info_util::VehicleInfo & vehicle_info, const TrajectoryParam & traj_param, - const std::shared_ptr debug_data_ptr, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, + const TrajectoryParam & traj_param, const std::shared_ptr debug_data_ptr, const std::shared_ptr time_keeper_ptr) : enable_debug_info_(enable_debug_info), ego_nearest_param_(ego_nearest_param), diff --git a/planning/autoware_path_optimizer/src/node.cpp b/planning/autoware_path_optimizer/src/node.cpp index 816c0d459d95f..d9df26938a9f8 100644 --- a/planning/autoware_path_optimizer/src/node.cpp +++ b/planning/autoware_path_optimizer/src/node.cpp @@ -84,7 +84,7 @@ std::vector calcSegmentLengthVector(const std::vector & PathOptimizer::PathOptimizer(const rclcpp::NodeOptions & node_options) : Node("path_optimizer", node_options), - vehicle_info_(vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo()), + vehicle_info_(autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo()), debug_data_ptr_(std::make_shared()), time_keeper_ptr_(std::make_shared()) { diff --git a/planning/autoware_path_optimizer/src/utils/geometry_utils.cpp b/planning/autoware_path_optimizer/src/utils/geometry_utils.cpp index 45302c0b729a9..99eb85d27e054 100644 --- a/planning/autoware_path_optimizer/src/utils/geometry_utils.cpp +++ b/planning/autoware_path_optimizer/src/utils/geometry_utils.cpp @@ -120,7 +120,7 @@ namespace geometry_utils bool isOutsideDrivableAreaFromRectangleFootprint( const geometry_msgs::msg::Pose & pose, const std::vector & left_bound, const std::vector & right_bound, - const vehicle_info_util::VehicleInfo & vehicle_info, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const bool use_footprint_polygon_for_outside_drivable_area_check) { if (left_bound.empty() || right_bound.empty()) { diff --git a/planning/autoware_static_centerline_generator/package.xml b/planning/autoware_static_centerline_generator/package.xml index 26eb41ca1de23..a5e09ceb6270b 100644 --- a/planning/autoware_static_centerline_generator/package.xml +++ b/planning/autoware_static_centerline_generator/package.xml @@ -21,6 +21,7 @@ autoware_path_smoother autoware_perception_msgs autoware_planning_msgs + autoware_vehicle_info_utils geography_utils geometry_msgs global_parameter_loader @@ -36,7 +37,6 @@ route_handler tier4_autoware_utils tier4_map_msgs - vehicle_info_util python3-flask-cors rosidl_default_runtime diff --git a/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.cpp b/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.cpp index 24e95353eec93..b8a3a8baf67a3 100644 --- a/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.cpp +++ b/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.cpp @@ -77,8 +77,8 @@ lanelet::BasicPoint2d convert_to_lanelet_point(const geometry_msgs::msg::Point & } LinearRing2d create_vehicle_footprint( - const geometry_msgs::msg::Pose & pose, const vehicle_info_util::VehicleInfo & vehicle_info, - const double margin = 0.0) + const geometry_msgs::msg::Pose & pose, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double margin = 0.0) { const auto & i = vehicle_info; @@ -105,7 +105,8 @@ LinearRing2d create_vehicle_footprint( } geometry_msgs::msg::Pose get_text_pose( - const geometry_msgs::msg::Pose & pose, const vehicle_info_util::VehicleInfo & vehicle_info) + const geometry_msgs::msg::Pose & pose, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) { const auto & i = vehicle_info; @@ -238,7 +239,7 @@ StaticCenterlineGeneratorNode::StaticCenterlineGeneratorNode( rmw_qos_profile_services_default, callback_group_); // vehicle info - vehicle_info_ = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); centerline_source_ = [&]() { const auto centerline_source_param = declare_parameter("centerline_source"); diff --git a/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.hpp b/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.hpp index f8a65f2794809..2f25a064dca2a 100644 --- a/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.hpp +++ b/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.hpp @@ -18,10 +18,10 @@ #include "autoware_static_centerline_generator/srv/load_map.hpp" #include "autoware_static_centerline_generator/srv/plan_path.hpp" #include "autoware_static_centerline_generator/srv/plan_route.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "centerline_source/optimization_trajectory_based_centerline.hpp" #include "rclcpp/rclcpp.hpp" #include "type_alias.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include "std_msgs/msg/bool.hpp" #include "std_msgs/msg/float32.hpp" @@ -115,7 +115,7 @@ class StaticCenterlineGeneratorNode : public rclcpp::Node rclcpp::CallbackGroup::SharedPtr callback_group_; // vehicle info - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; }; } // namespace autoware::static_centerline_generator #endif // STATIC_CENTERLINE_GENERATOR_NODE_HPP_ diff --git a/planning/autoware_surround_obstacle_checker/include/autoware_surround_obstacle_checker/debug_marker.hpp b/planning/autoware_surround_obstacle_checker/include/autoware_surround_obstacle_checker/debug_marker.hpp index d2e055bbccaa2..c7ec2e5b564e6 100644 --- a/planning/autoware_surround_obstacle_checker/include/autoware_surround_obstacle_checker/debug_marker.hpp +++ b/planning/autoware_surround_obstacle_checker/include/autoware_surround_obstacle_checker/debug_marker.hpp @@ -15,8 +15,8 @@ #ifndef AUTOWARE_SURROUND_OBSTACLE_CHECKER__DEBUG_MARKER_HPP_ #define AUTOWARE_SURROUND_OBSTACLE_CHECKER__DEBUG_MARKER_HPP_ +#include #include -#include #include #include @@ -34,6 +34,7 @@ namespace autoware::surround_obstacle_checker { +using autoware::vehicle_info_utils::VehicleInfo; using autoware_adapi_v1_msgs::msg::PlanningBehavior; using autoware_adapi_v1_msgs::msg::VelocityFactor; using autoware_adapi_v1_msgs::msg::VelocityFactorArray; @@ -41,7 +42,6 @@ using geometry_msgs::msg::PolygonStamped; using tier4_planning_msgs::msg::StopFactor; using tier4_planning_msgs::msg::StopReason; using tier4_planning_msgs::msg::StopReasonArray; -using vehicle_info_util::VehicleInfo; using visualization_msgs::msg::Marker; using visualization_msgs::msg::MarkerArray; @@ -56,7 +56,7 @@ class SurroundObstacleCheckerDebugNode { public: explicit SurroundObstacleCheckerDebugNode( - const vehicle_info_util::VehicleInfo & vehicle_info, const double base_link2front, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double base_link2front, const std::string & object_label, const double & surround_check_front_distance, const double & surround_check_side_distance, const double & surround_check_back_distance, const double & surround_check_hysteresis_distance, const geometry_msgs::msg::Pose & self_pose, @@ -79,7 +79,7 @@ class SurroundObstacleCheckerDebugNode rclcpp::Publisher::SharedPtr vehicle_footprint_offset_pub_; rclcpp::Publisher::SharedPtr vehicle_footprint_recover_offset_pub_; - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; double base_link2front_; std::string object_label_; double surround_check_front_distance_; diff --git a/planning/autoware_surround_obstacle_checker/include/autoware_surround_obstacle_checker/node.hpp b/planning/autoware_surround_obstacle_checker/include/autoware_surround_obstacle_checker/node.hpp index 4ccd097b40837..4eb094e6617a4 100644 --- a/planning/autoware_surround_obstacle_checker/include/autoware_surround_obstacle_checker/node.hpp +++ b/planning/autoware_surround_obstacle_checker/include/autoware_surround_obstacle_checker/node.hpp @@ -19,9 +19,9 @@ #include "tier4_autoware_utils/ros/logger_level_configure.hpp" #include "tier4_autoware_utils/ros/polling_subscriber.hpp" +#include #include #include -#include #include #include @@ -46,12 +46,12 @@ namespace autoware::surround_obstacle_checker { +using autoware::vehicle_info_utils::VehicleInfo; using autoware_perception_msgs::msg::PredictedObjects; using autoware_perception_msgs::msg::Shape; using motion_utils::VehicleStopChecker; using tier4_planning_msgs::msg::VelocityLimit; using tier4_planning_msgs::msg::VelocityLimitClearCommand; -using vehicle_info_util::VehicleInfo; using Obstacle = std::pair; @@ -132,7 +132,7 @@ class SurroundObstacleCheckerNode : public rclcpp::Node // parameter NodeParam node_param_; - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; // data nav_msgs::msg::Odometry::ConstSharedPtr odometry_ptr_; diff --git a/planning/autoware_surround_obstacle_checker/package.xml b/planning/autoware_surround_obstacle_checker/package.xml index 3bb961766e9f3..530f850a3c34a 100644 --- a/planning/autoware_surround_obstacle_checker/package.xml +++ b/planning/autoware_surround_obstacle_checker/package.xml @@ -17,6 +17,7 @@ autoware_adapi_v1_msgs autoware_perception_msgs autoware_planning_msgs + autoware_vehicle_info_utils diagnostic_msgs eigen libpcl-all-dev @@ -32,7 +33,6 @@ tf2_ros tier4_autoware_utils tier4_planning_msgs - vehicle_info_util visualization_msgs ament_lint_auto diff --git a/planning/autoware_surround_obstacle_checker/src/debug_marker.cpp b/planning/autoware_surround_obstacle_checker/src/debug_marker.cpp index ba561a4b8cf35..b676673128269 100644 --- a/planning/autoware_surround_obstacle_checker/src/debug_marker.cpp +++ b/planning/autoware_surround_obstacle_checker/src/debug_marker.cpp @@ -59,7 +59,7 @@ using tier4_autoware_utils::createMarkerScale; using tier4_autoware_utils::createPoint; SurroundObstacleCheckerDebugNode::SurroundObstacleCheckerDebugNode( - const vehicle_info_util::VehicleInfo & vehicle_info, const double base_link2front, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double base_link2front, const std::string & object_label, const double & surround_check_front_distance, const double & surround_check_side_distance, const double & surround_check_back_distance, const double & surround_check_hysteresis_distance, const geometry_msgs::msg::Pose & self_pose, diff --git a/planning/autoware_surround_obstacle_checker/src/node.cpp b/planning/autoware_surround_obstacle_checker/src/node.cpp index 0744ebecd370c..8d6279eeefb22 100644 --- a/planning/autoware_surround_obstacle_checker/src/node.cpp +++ b/planning/autoware_surround_obstacle_checker/src/node.cpp @@ -196,7 +196,7 @@ SurroundObstacleCheckerNode::SurroundObstacleCheckerNode(const rclcpp::NodeOptio logger_configure_ = std::make_unique(this); } - vehicle_info_ = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); // Publishers pub_stop_reason_ = diff --git a/planning/autoware_velocity_smoother/package.xml b/planning/autoware_velocity_smoother/package.xml index 4b5a46e495545..2bfc32ec90a5f 100644 --- a/planning/autoware_velocity_smoother/package.xml +++ b/planning/autoware_velocity_smoother/package.xml @@ -22,6 +22,7 @@ autoware_planning_msgs autoware_planning_test_manager + autoware_vehicle_info_utils geometry_msgs interpolation motion_utils @@ -33,7 +34,6 @@ tier4_autoware_utils tier4_debug_msgs tier4_planning_msgs - vehicle_info_util ament_cmake_ros ament_lint_auto diff --git a/planning/autoware_velocity_smoother/src/node.cpp b/planning/autoware_velocity_smoother/src/node.cpp index 1541b19d70a1c..be1f77fc951b1 100644 --- a/planning/autoware_velocity_smoother/src/node.cpp +++ b/planning/autoware_velocity_smoother/src/node.cpp @@ -20,7 +20,7 @@ #include "motion_utils/marker/marker_helper.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" -#include +#include #include #include @@ -40,7 +40,7 @@ VelocitySmootherNode::VelocitySmootherNode(const rclcpp::NodeOptions & node_opti using std::placeholders::_1; // set common params - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); wheelbase_ = vehicle_info.wheel_base_m; base_link2front_ = vehicle_info.max_longitudinal_offset_m; initCommonParam(); diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/freespace_pull_over.hpp b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/freespace_pull_over.hpp index b1c4a705ae94d..f05d0b9b3b973 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/freespace_pull_over.hpp +++ b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/freespace_pull_over.hpp @@ -37,7 +37,7 @@ class FreespacePullOver : public PullOverPlannerBase public: FreespacePullOver( rclcpp::Node & node, const GoalPlannerParameters & parameters, - const vehicle_info_util::VehicleInfo & vehicle_info); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info); PullOverPlannerType getPlannerType() const override { return PullOverPlannerType::FREESPACE; } diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp index f41de932bb006..66f7274f888be 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp +++ b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp @@ -465,7 +465,7 @@ class GoalPlannerModule : public SceneModuleInterface mutable std::shared_ptr objects_filtering_params_; mutable std::shared_ptr safety_check_params_; - vehicle_info_util::VehicleInfo vehicle_info_{}; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_{}; // planner std::vector> pull_over_planners_; diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/pull_over_planner_base.hpp b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/pull_over_planner_base.hpp index ca84e7256a01f..c916e6be10d9f 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/pull_over_planner_base.hpp +++ b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/pull_over_planner_base.hpp @@ -112,7 +112,7 @@ class PullOverPlannerBase public: PullOverPlannerBase(rclcpp::Node & node, const GoalPlannerParameters & parameters) { - vehicle_info_ = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo(); + vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo(); vehicle_footprint_ = vehicle_info_.createFootprint(); parameters_ = parameters; } @@ -133,7 +133,7 @@ class PullOverPlannerBase protected: std::shared_ptr planner_data_; - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; LinearRing2d vehicle_footprint_; GoalPlannerParameters parameters_; diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/util.hpp b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/util.hpp index d6c9215e495ae..3de0ba0c99a35 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/util.hpp +++ b/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/util.hpp @@ -58,8 +58,9 @@ lanelet::ConstLanelets generateExpandedPullOverLanes( lanelet::ConstLanelets generateBetweenEgoAndExpandedPullOverLanes( const lanelet::ConstLanelets & pull_over_lanes, const bool left_side, - const geometry_msgs::msg::Pose ego_pose, const vehicle_info_util::VehicleInfo & vehicle_info, - const double outer_road_offset, const double inner_road_offset); + const geometry_msgs::msg::Pose ego_pose, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double outer_road_offset, + const double inner_road_offset); PredictedObjects extractObjectsInExpandedPullOverLanes( const RouteHandler & route_handler, const bool left_side, const double backward_distance, const double forward_distance, double bound_offset, const PredictedObjects & objects); diff --git a/planning/behavior_path_goal_planner_module/src/freespace_pull_over.cpp b/planning/behavior_path_goal_planner_module/src/freespace_pull_over.cpp index 360707003f7ca..0a75e5ce94f79 100644 --- a/planning/behavior_path_goal_planner_module/src/freespace_pull_over.cpp +++ b/planning/behavior_path_goal_planner_module/src/freespace_pull_over.cpp @@ -27,7 +27,7 @@ namespace behavior_path_planner { FreespacePullOver::FreespacePullOver( rclcpp::Node & node, const GoalPlannerParameters & parameters, - const vehicle_info_util::VehicleInfo & vehicle_info) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) : PullOverPlannerBase{node, parameters}, velocity_{parameters.freespace_parking_velocity}, left_side_parking_{parameters.parking_policy == ParkingPolicy::LEFT_SIDE} diff --git a/planning/behavior_path_goal_planner_module/src/goal_planner_module.cpp b/planning/behavior_path_goal_planner_module/src/goal_planner_module.cpp index d85205e001d0b..20fe808f51433 100644 --- a/planning/behavior_path_goal_planner_module/src/goal_planner_module.cpp +++ b/planning/behavior_path_goal_planner_module/src/goal_planner_module.cpp @@ -60,7 +60,7 @@ GoalPlannerModule::GoalPlannerModule( objects_of_interest_marker_interface_ptr_map) : SceneModuleInterface{name, node, rtc_interface_ptr_map, objects_of_interest_marker_interface_ptr_map}, // NOLINT parameters_{parameters}, - vehicle_info_{vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo()}, + vehicle_info_{autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo()}, thread_safe_data_{mutex_, clock_}, is_lane_parking_cb_running_{false}, is_freespace_parking_cb_running_{false}, @@ -95,7 +95,7 @@ GoalPlannerModule::GoalPlannerModule( // set selected goal searcher // currently there is only one goal_searcher_type - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo(); vehicle_footprint_ = vehicle_info.createFootprint(); goal_searcher_ = std::make_shared(*parameters, vehicle_footprint_); diff --git a/planning/behavior_path_goal_planner_module/src/util.cpp b/planning/behavior_path_goal_planner_module/src/util.cpp index 202eefe37bd83..6b538b6e9c7f5 100644 --- a/planning/behavior_path_goal_planner_module/src/util.cpp +++ b/planning/behavior_path_goal_planner_module/src/util.cpp @@ -105,8 +105,9 @@ static double getOffsetToLanesBoundary( lanelet::ConstLanelets generateBetweenEgoAndExpandedPullOverLanes( const lanelet::ConstLanelets & pull_over_lanes, const bool left_side, - const geometry_msgs::msg::Pose ego_pose, const vehicle_info_util::VehicleInfo & vehicle_info, - const double outer_road_offset, const double inner_road_offset) + const geometry_msgs::msg::Pose ego_pose, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double outer_road_offset, + const double inner_road_offset) { const double front_overhang = vehicle_info.front_overhang_m, wheel_base = vehicle_info.wheel_base_m, wheel_tread = vehicle_info.wheel_tread_m; diff --git a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/utils.hpp b/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/utils.hpp index e9a9ab15f6bc0..a7f65f82f4e9e 100644 --- a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/utils.hpp +++ b/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/utils.hpp @@ -241,7 +241,7 @@ rclcpp::Logger getLogger(const std::string & type); * @return Polygon2d A polygon representing the current 2D footprint of the ego vehicle. */ Polygon2d getEgoCurrentFootprint( - const Pose & ego_pose, const vehicle_info_util::VehicleInfo & ego_info); + const Pose & ego_pose, const autoware::vehicle_info_utils::VehicleInfo & ego_info); /** * @brief Checks if the given polygon is within an intersection area. @@ -304,7 +304,7 @@ namespace behavior_path_planner::utils::lane_change::debug geometry_msgs::msg::Point32 create_point32(const geometry_msgs::msg::Pose & pose); geometry_msgs::msg::Polygon createExecutionArea( - const vehicle_info_util::VehicleInfo & vehicle_info, const Pose & pose, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const Pose & pose, double additional_lon_offset, double additional_lat_offset); } // namespace behavior_path_planner::utils::lane_change::debug diff --git a/planning/behavior_path_lane_change_module/src/utils/utils.cpp b/planning/behavior_path_lane_change_module/src/utils/utils.cpp index 20b502886ccef..2fafd7c41d4a3 100644 --- a/planning/behavior_path_lane_change_module/src/utils/utils.cpp +++ b/planning/behavior_path_lane_change_module/src/utils/utils.cpp @@ -25,6 +25,7 @@ #include "object_recognition_utils/predicted_path_utils.hpp" #include "tier4_autoware_utils/math/unit_conversion.hpp" +#include #include #include #include @@ -33,7 +34,6 @@ #include #include #include -#include #include @@ -1159,7 +1159,7 @@ rclcpp::Logger getLogger(const std::string & type) } Polygon2d getEgoCurrentFootprint( - const Pose & ego_pose, const vehicle_info_util::VehicleInfo & ego_info) + const Pose & ego_pose, const autoware::vehicle_info_utils::VehicleInfo & ego_info) { const auto base_to_front = ego_info.max_longitudinal_offset_m; const auto base_to_rear = ego_info.rear_overhang_m; @@ -1240,7 +1240,7 @@ geometry_msgs::msg::Point32 create_point32(const geometry_msgs::msg::Pose & pose }; geometry_msgs::msg::Polygon createExecutionArea( - const vehicle_info_util::VehicleInfo & vehicle_info, const Pose & pose, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const Pose & pose, double additional_lon_offset, double additional_lat_offset) { const double & base_to_front = vehicle_info.max_longitudinal_offset_m; diff --git a/planning/behavior_path_planner/package.xml b/planning/behavior_path_planner/package.xml index 1ce6e65bee219..2c88a6d156f3d 100644 --- a/planning/behavior_path_planner/package.xml +++ b/planning/behavior_path_planner/package.xml @@ -45,6 +45,7 @@ autoware_perception_msgs autoware_planning_msgs autoware_planning_test_manager + autoware_vehicle_info_utils autoware_vehicle_msgs behaviortree_cpp_v3 geometry_msgs @@ -66,7 +67,6 @@ tf2_ros tier4_autoware_utils tier4_planning_msgs - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/planning/behavior_path_planner/src/behavior_path_planner_node.cpp b/planning/behavior_path_planner/src/behavior_path_planner_node.cpp index e6ebe66f3f440..d5b49f5efa4d2 100644 --- a/planning/behavior_path_planner/src/behavior_path_planner_node.cpp +++ b/planning/behavior_path_planner/src/behavior_path_planner_node.cpp @@ -19,8 +19,8 @@ #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" #include "motion_utils/trajectory/conversion.hpp" +#include #include -#include #include @@ -44,8 +44,8 @@ rclcpp::SubscriptionOptions createSubscriptionOptions(rclcpp::Node * node_ptr) namespace behavior_path_planner { +using autoware::vehicle_info_utils::VehicleInfoUtils; using tier4_planning_msgs::msg::PathChangeModuleId; -using vehicle_info_util::VehicleInfoUtil; BehaviorPathPlannerNode::BehaviorPathPlannerNode(const rclcpp::NodeOptions & node_options) : Node("behavior_path_planner", node_options) @@ -212,7 +212,7 @@ BehaviorPathPlannerParameters BehaviorPathPlannerNode::getCommonParam() p.traffic_light_signal_timeout = declare_parameter("traffic_light_signal_timeout"); // vehicle info - const auto vehicle_info = VehicleInfoUtil(*this).getVehicleInfo(); + const auto vehicle_info = VehicleInfoUtils(*this).getVehicleInfo(); p.vehicle_info = vehicle_info; p.vehicle_width = vehicle_info.vehicle_width_m; p.vehicle_length = vehicle_info.vehicle_length_m; diff --git a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_module.hpp b/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_module.hpp index 0a5dec8d07b4f..5cf7b1f4e927d 100644 --- a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_module.hpp +++ b/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_module.hpp @@ -28,6 +28,7 @@ #include "autoware_sampler_common/constraints/soft_constraint.hpp" #include "autoware_sampler_common/structures.hpp" #include "autoware_sampler_common/transform/spline_transform.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "behavior_path_sampling_planner_module/sampling_planner_parameters.hpp" #include "behavior_path_sampling_planner_module/util.hpp" #include "lanelet2_extension/utility/query.hpp" @@ -39,7 +40,6 @@ #include "tier4_autoware_utils/math/constants.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include "tier4_planning_msgs/msg/lateral_offset.hpp" #include "tier4_planning_msgs/msg/path_with_lane_id.hpp" @@ -248,7 +248,7 @@ class SamplingPlannerModule : public SceneModuleInterface // member // std::shared_ptr params_; std::shared_ptr internal_params_; - vehicle_info_util::VehicleInfo vehicle_info_{}; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_{}; std::optional prev_sampling_path_ = std::nullopt; // move to utils diff --git a/planning/behavior_path_sampling_planner_module/package.xml b/planning/behavior_path_sampling_planner_module/package.xml index 0583056db4293..c48f3240ab84d 100644 --- a/planning/behavior_path_sampling_planner_module/package.xml +++ b/planning/behavior_path_sampling_planner_module/package.xml @@ -20,6 +20,7 @@ autoware_perception_msgs autoware_planning_msgs autoware_planning_test_manager + autoware_vehicle_info_utils autoware_vehicle_msgs geometry_msgs interpolation @@ -37,7 +38,6 @@ tf2_ros tier4_autoware_utils tier4_planning_msgs - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp b/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp index 22187652bd663..d2cc57d46de30 100644 --- a/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp +++ b/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp @@ -35,7 +35,7 @@ SamplingPlannerModule::SamplingPlannerModule( std::unordered_map> & objects_of_interest_marker_interface_ptr_map) : SceneModuleInterface{name, node, rtc_interface_ptr_map, objects_of_interest_marker_interface_ptr_map}, // NOLINT - vehicle_info_{vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo()} + vehicle_info_{autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo()} { internal_params_ = std::make_shared(); updateModuleParams(parameters); diff --git a/planning/behavior_velocity_crosswalk_module/package.xml b/planning/behavior_velocity_crosswalk_module/package.xml index eebf9c4d4a14f..87ccdebd02fcf 100644 --- a/planning/behavior_velocity_crosswalk_module/package.xml +++ b/planning/behavior_velocity_crosswalk_module/package.xml @@ -24,6 +24,7 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_vehicle_info_utils eigen geometry_msgs grid_map_core @@ -42,7 +43,6 @@ tier4_api_msgs tier4_autoware_utils tier4_debug_msgs - vehicle_info_util visualization_msgs ament_lint_auto diff --git a/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp b/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp index 91893c5224550..0db87508975a0 100644 --- a/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp +++ b/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp @@ -1207,7 +1207,7 @@ geometry_msgs::msg::Polygon CrosswalkModule::createObjectPolygon( } geometry_msgs::msg::Polygon CrosswalkModule::createVehiclePolygon( - const vehicle_info_util::VehicleInfo & vehicle_info) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) { const auto & i = vehicle_info; const auto & front_m = i.max_longitudinal_offset_m; diff --git a/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp b/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp index 13ecddafb6490..75f75846d4f4b 100644 --- a/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp +++ b/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp @@ -419,7 +419,7 @@ class CrosswalkModule : public SceneModuleInterface const double width_m, const double length_m); static geometry_msgs::msg::Polygon createVehiclePolygon( - const vehicle_info_util::VehicleInfo & vehicle_info); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info); void recordTime(const int step_num) { diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/package.xml b/planning/behavior_velocity_dynamic_obstacle_stop_module/package.xml index 6b9db657d6d8e..f25ded5e1823c 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/package.xml +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/package.xml @@ -15,6 +15,7 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_vehicle_info_utils geometry_msgs libboost-dev motion_utils @@ -24,7 +25,6 @@ tf2 tier4_autoware_utils tier4_planning_msgs - vehicle_info_util visualization_msgs ament_lint_auto diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/manager.cpp b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/manager.cpp index ddb8c842fb92d..f594432c9e452 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/src/manager.cpp +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/src/manager.cpp @@ -43,7 +43,7 @@ DynamicObstacleStopModuleManager::DynamicObstacleStopModuleManager(rclcpp::Node pp.ignore_unavoidable_collisions = getOrDeclareParameter(node, ns + ".ignore_unavoidable_collisions"); - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo(); pp.ego_lateral_offset = std::max(std::abs(vehicle_info.min_lateral_offset_m), vehicle_info.max_lateral_offset_m); pp.ego_longitudinal_offset = vehicle_info.max_longitudinal_offset_m; diff --git a/planning/behavior_velocity_no_stopping_area_module/package.xml b/planning/behavior_velocity_no_stopping_area_module/package.xml index baa51d6681490..97b3b01ee31e1 100644 --- a/planning/behavior_velocity_no_stopping_area_module/package.xml +++ b/planning/behavior_velocity_no_stopping_area_module/package.xml @@ -20,6 +20,7 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_vehicle_info_utils eigen geometry_msgs interpolation @@ -34,7 +35,6 @@ tf2_geometry_msgs tier4_autoware_utils tier4_planning_msgs - vehicle_info_util visualization_msgs ament_lint_auto diff --git a/planning/behavior_velocity_no_stopping_area_module/src/manager.cpp b/planning/behavior_velocity_no_stopping_area_module/src/manager.cpp index 6aeac1e9d8dd3..31682fe0419d2 100644 --- a/planning/behavior_velocity_no_stopping_area_module/src/manager.cpp +++ b/planning/behavior_velocity_no_stopping_area_module/src/manager.cpp @@ -39,7 +39,7 @@ NoStoppingAreaModuleManager::NoStoppingAreaModuleManager(rclcpp::Node & node) { const std::string ns(getModuleName()); auto & pp = planner_param_; - const auto & vi = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo(); + const auto & vi = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo(); pp.state_clear_time = getOrDeclareParameter(node, ns + ".state_clear_time"); pp.stuck_vehicle_vel_thr = getOrDeclareParameter(node, ns + ".stuck_vehicle_vel_thr"); pp.stop_margin = getOrDeclareParameter(node, ns + ".stop_margin"); diff --git a/planning/freespace_planner/include/freespace_planner/freespace_planner_node.hpp b/planning/freespace_planner/include/freespace_planner/freespace_planner_node.hpp index fbaef46c43511..22205ce427632 100644 --- a/planning/freespace_planner/include/freespace_planner/freespace_planner_node.hpp +++ b/planning/freespace_planner/include/freespace_planner/freespace_planner_node.hpp @@ -35,8 +35,8 @@ #include #include +#include #include -#include #include #include diff --git a/planning/freespace_planner/launch/freespace_planner.launch.xml b/planning/freespace_planner/launch/freespace_planner.launch.xml index 7c2408b0311f5..3c8cce7a93941 100644 --- a/planning/freespace_planner/launch/freespace_planner.launch.xml +++ b/planning/freespace_planner/launch/freespace_planner.launch.xml @@ -9,7 +9,7 @@ - + diff --git a/planning/freespace_planner/package.xml b/planning/freespace_planner/package.xml index a29202060a640..06004ce9f308f 100644 --- a/planning/freespace_planner/package.xml +++ b/planning/freespace_planner/package.xml @@ -18,6 +18,7 @@ autoware_freespace_planning_algorithms autoware_planning_msgs autoware_planning_test_manager + autoware_vehicle_info_utils geometry_msgs motion_utils nav_msgs @@ -29,7 +30,6 @@ tf2_ros tier4_autoware_utils tier4_planning_msgs - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/planning/freespace_planner/src/freespace_planner/freespace_planner_node.cpp b/planning/freespace_planner/src/freespace_planner/freespace_planner_node.cpp index 322bf2697a1f6..f17b9227c89bc 100644 --- a/planning/freespace_planner/src/freespace_planner/freespace_planner_node.cpp +++ b/planning/freespace_planner/src/freespace_planner/freespace_planner_node.cpp @@ -241,7 +241,8 @@ FreespacePlannerNode::FreespacePlannerNode(const rclcpp::NodeOptions & node_opti // set vehicle_info { - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + const auto vehicle_info = + autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); vehicle_shape_.length = vehicle_info.vehicle_length_m; vehicle_shape_.width = vehicle_info.vehicle_width_m; vehicle_shape_.base2back = vehicle_info.rear_overhang_m; diff --git a/planning/mission_planner/package.xml b/planning/mission_planner/package.xml index f878953d50420..6782736c3e173 100644 --- a/planning/mission_planner/package.xml +++ b/planning/mission_planner/package.xml @@ -20,6 +20,7 @@ autoware_adapi_v1_msgs autoware_map_msgs autoware_planning_msgs + autoware_vehicle_info_utils geometry_msgs lanelet2_extension motion_utils @@ -31,7 +32,6 @@ tf2_ros tier4_autoware_utils tier4_planning_msgs - vehicle_info_util ament_lint_auto autoware_lint_common diff --git a/planning/mission_planner/src/lanelet2_plugins/default_planner.cpp b/planning/mission_planner/src/lanelet2_plugins/default_planner.cpp index 5ba152af6611d..a7f3cfaa7ee34 100644 --- a/planning/mission_planner/src/lanelet2_plugins/default_planner.cpp +++ b/planning/mission_planner/src/lanelet2_plugins/default_planner.cpp @@ -16,6 +16,7 @@ #include "utility_functions.hpp" +#include #include #include #include @@ -25,7 +26,6 @@ #include #include #include -#include #include #include @@ -108,7 +108,7 @@ double project_goal_to_map( geometry_msgs::msg::Pose get_closest_centerline_pose( const lanelet::ConstLanelets & road_lanelets, const geometry_msgs::msg::Pose & point, - vehicle_info_util::VehicleInfo vehicle_info) + autoware::vehicle_info_utils::VehicleInfo vehicle_info) { lanelet::Lanelet closest_lanelet; if (!lanelet::utils::query::getClosestLaneletWithConstrains( @@ -152,7 +152,7 @@ void DefaultPlanner::initialize_common(rclcpp::Node * node) pub_goal_footprint_marker_ = node_->create_publisher("~/debug/goal_footprint", durable_qos); - vehicle_info_ = vehicle_info_util::VehicleInfoUtil(*node_).getVehicleInfo(); + vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(*node_).getVehicleInfo(); param_.goal_angle_threshold_deg = node_->declare_parameter("goal_angle_threshold_deg"); param_.enable_correct_goal_pose = node_->declare_parameter("enable_correct_goal_pose"); param_.consider_no_drivable_lanes = node_->declare_parameter("consider_no_drivable_lanes"); diff --git a/planning/mission_planner/src/lanelet2_plugins/default_planner.hpp b/planning/mission_planner/src/lanelet2_plugins/default_planner.hpp index 60c232162991d..49000a750a9a1 100644 --- a/planning/mission_planner/src/lanelet2_plugins/default_planner.hpp +++ b/planning/mission_planner/src/lanelet2_plugins/default_planner.hpp @@ -15,10 +15,10 @@ #ifndef LANELET2_PLUGINS__DEFAULT_PLANNER_HPP_ #define LANELET2_PLUGINS__DEFAULT_PLANNER_HPP_ +#include #include #include #include -#include #include #include @@ -52,7 +52,7 @@ class DefaultPlanner : public mission_planner::PlannerPlugin void clearRoute() override; MarkerArray visualize(const LaneletRoute & route) const override; MarkerArray visualize_debug_footprint(tier4_autoware_utils::LinearRing2d goal_footprint_) const; - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; private: using RouteSections = std::vector; diff --git a/planning/mission_planner/src/lanelet2_plugins/utility_functions.hpp b/planning/mission_planner/src/lanelet2_plugins/utility_functions.hpp index 428cd979a2526..ed8dbfed63bfe 100644 --- a/planning/mission_planner/src/lanelet2_plugins/utility_functions.hpp +++ b/planning/mission_planner/src/lanelet2_plugins/utility_functions.hpp @@ -15,10 +15,10 @@ #ifndef LANELET2_PLUGINS__UTILITY_FUNCTIONS_HPP_ #define LANELET2_PLUGINS__UTILITY_FUNCTIONS_HPP_ +#include #include #include #include -#include #include #include diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/package.xml b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/package.xml index 051415e9856ed..a6176555ae7af 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/package.xml +++ b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/package.xml @@ -17,6 +17,7 @@ autoware_motion_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_vehicle_info_utils geometry_msgs lanelet2_extension libboost-dev @@ -28,7 +29,6 @@ tier4_autoware_utils tier4_planning_msgs traffic_light_utils - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/out_of_lane_module.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/out_of_lane_module.cpp index 0fe7b783adf31..11640f9ad2c8e 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/out_of_lane_module.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/out_of_lane_module.cpp @@ -100,7 +100,7 @@ void OutOfLaneModule::init_parameters(rclcpp::Node & node) pp.extra_rear_offset = getOrDeclareParameter(node, ns_ + ".ego.extra_rear_offset"); pp.extra_left_offset = getOrDeclareParameter(node, ns_ + ".ego.extra_left_offset"); pp.extra_right_offset = getOrDeclareParameter(node, ns_ + ".ego.extra_right_offset"); - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo(); pp.front_offset = vehicle_info.max_longitudinal_offset_m; pp.rear_offset = vehicle_info.min_longitudinal_offset_m; pp.left_offset = vehicle_info.max_lateral_offset_m; diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp index 73d71e0d0f955..a25ab5d55a910 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp @@ -15,9 +15,9 @@ #ifndef AUTOWARE_MOTION_VELOCITY_PLANNER_COMMON__PLANNER_DATA_HPP_ #define AUTOWARE_MOTION_VELOCITY_PLANNER_COMMON__PLANNER_DATA_HPP_ +#include #include #include -#include #include #include @@ -54,7 +54,7 @@ struct TrafficSignalStamped struct PlannerData { explicit PlannerData(rclcpp::Node & node) - : vehicle_info_(vehicle_info_util::VehicleInfoUtil(node).getVehicleInfo()) + : vehicle_info_(autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo()) { } @@ -81,7 +81,7 @@ struct PlannerData // velocity smoother std::shared_ptr velocity_smoother_{}; // parameters - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; /** *@fn diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/node.hpp b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/node.hpp index 3aea741e3b2f4..8f9724d9c8bed 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/node.hpp +++ b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/node.hpp @@ -53,7 +53,7 @@ class ObstacleCruisePlannerNode : public rclcpp::Node // main functions std::vector createOneStepPolygons( const std::vector & traj_points, - const vehicle_info_util::VehicleInfo & vehicle_info, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const geometry_msgs::msg::Pose & current_ego_pose, const double lat_margin = 0.0) const; std::vector convertToObstacles( const Odometry & odometry, const PredictedObjects & objects, diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp index 44626206ec038..a832e74c76db0 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp +++ b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp @@ -15,11 +15,11 @@ #ifndef OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__OPTIMIZATION_BASED_PLANNER_HPP_ #define OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__OPTIMIZATION_BASED_PLANNER_HPP_ +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "obstacle_cruise_planner/optimization_based_planner/s_boundary.hpp" #include "obstacle_cruise_planner/optimization_based_planner/velocity_optimizer.hpp" #include "obstacle_cruise_planner/planner_interface.hpp" #include "obstacle_cruise_planner/type_alias.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include #include @@ -35,8 +35,8 @@ class OptimizationBasedPlanner : public PlannerInterface public: OptimizationBasedPlanner( rclcpp::Node & node, const LongitudinalInfo & longitudinal_info, - const vehicle_info_util::VehicleInfo & vehicle_info, const EgoNearestParam & ego_nearest_param, - const std::shared_ptr debug_data_ptr); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, + const EgoNearestParam & ego_nearest_param, const std::shared_ptr debug_data_ptr); std::vector generateCruiseTrajectory( const PlannerData & planner_data, const std::vector & stop_traj_points, diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp index 26fd3a8ce2ce2..9d688cdac419b 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp +++ b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp @@ -49,8 +49,8 @@ class PIDBasedPlanner : public PlannerInterface PIDBasedPlanner( rclcpp::Node & node, const LongitudinalInfo & longitudinal_info, - const vehicle_info_util::VehicleInfo & vehicle_info, const EgoNearestParam & ego_nearest_param, - const std::shared_ptr debug_data_ptr); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, + const EgoNearestParam & ego_nearest_param, const std::shared_ptr debug_data_ptr); std::vector generateCruiseTrajectory( const PlannerData & planner_data, const std::vector & stop_traj_points, diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/planner_interface.hpp b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/planner_interface.hpp index 7a060657e16af..f3dadbf5e5e51 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/planner_interface.hpp +++ b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/planner_interface.hpp @@ -38,8 +38,8 @@ class PlannerInterface public: PlannerInterface( rclcpp::Node & node, const LongitudinalInfo & longitudinal_info, - const vehicle_info_util::VehicleInfo & vehicle_info, const EgoNearestParam & ego_nearest_param, - const std::shared_ptr debug_data_ptr) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, + const EgoNearestParam & ego_nearest_param, const std::shared_ptr debug_data_ptr) : longitudinal_info_(longitudinal_info), vehicle_info_(vehicle_info), ego_nearest_param_(ego_nearest_param), @@ -135,7 +135,7 @@ class PlannerInterface rclcpp::Publisher::SharedPtr stop_speed_exceeded_pub_; // Vehicle Parameters - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; EgoNearestParam ego_nearest_param_; diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/polygon_utils.hpp b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/polygon_utils.hpp index 71d0f84637abc..455d40a7a7e87 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/polygon_utils.hpp +++ b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/polygon_utils.hpp @@ -15,10 +15,10 @@ #ifndef OBSTACLE_CRUISE_PLANNER__POLYGON_UTILS_HPP_ #define OBSTACLE_CRUISE_PLANNER__POLYGON_UTILS_HPP_ +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "obstacle_cruise_planner/common_structs.hpp" #include "obstacle_cruise_planner/type_alias.hpp" #include "tier4_autoware_utils/geometry/boost_geometry.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include @@ -36,12 +36,12 @@ using tier4_autoware_utils::Polygon2d; Polygon2d createOneStepPolygon( const std::vector & last_poses, const std::vector & current_poses, - const vehicle_info_util::VehicleInfo & vehicle_info, const double lat_margin); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double lat_margin); std::optional> getCollisionPoint( const std::vector & traj_points, const std::vector & traj_polygons, const Obstacle & obstacle, const bool is_driving_forward, - const vehicle_info_util::VehicleInfo & vehicle_info); + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info); std::vector getCollisionPoints( const std::vector & traj_points, const std::vector & traj_polygons, diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/type_alias.hpp b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/type_alias.hpp index 979cef8610cbd..196526c22aac9 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/type_alias.hpp +++ b/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/type_alias.hpp @@ -15,7 +15,7 @@ #ifndef OBSTACLE_CRUISE_PLANNER__TYPE_ALIAS_HPP_ #define OBSTACLE_CRUISE_PLANNER__TYPE_ALIAS_HPP_ -#include "vehicle_info_util/vehicle_info_util.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "autoware_adapi_v1_msgs/msg/planning_behavior.hpp" #include "autoware_adapi_v1_msgs/msg/velocity_factor_array.hpp" @@ -35,6 +35,7 @@ #include "tier4_planning_msgs/msg/velocity_limit_clear_command.hpp" #include "visualization_msgs/msg/marker_array.hpp" +using autoware::vehicle_info_utils::VehicleInfo; using autoware_adapi_v1_msgs::msg::PlanningBehavior; using autoware_adapi_v1_msgs::msg::VelocityFactor; using autoware_adapi_v1_msgs::msg::VelocityFactorArray; @@ -56,7 +57,6 @@ using tier4_planning_msgs::msg::StopReasonArray; using tier4_planning_msgs::msg::StopSpeedExceeded; using tier4_planning_msgs::msg::VelocityLimit; using tier4_planning_msgs::msg::VelocityLimitClearCommand; -using vehicle_info_util::VehicleInfo; using visualization_msgs::msg::Marker; using visualization_msgs::msg::MarkerArray; namespace bg = boost::geometry; diff --git a/planning/obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml b/planning/obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml index a6c95d65acc6a..8db1ae8b46223 100644 --- a/planning/obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml +++ b/planning/obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml @@ -4,7 +4,7 @@ - + diff --git a/planning/obstacle_cruise_planner/package.xml b/planning/obstacle_cruise_planner/package.xml index e394add65b05d..2a6e240093b14 100644 --- a/planning/obstacle_cruise_planner/package.xml +++ b/planning/obstacle_cruise_planner/package.xml @@ -21,6 +21,7 @@ autoware_perception_msgs autoware_planning_msgs autoware_planning_test_manager + autoware_vehicle_info_utils geometry_msgs interpolation lanelet2_extension @@ -37,7 +38,6 @@ tier4_autoware_utils tier4_debug_msgs tier4_planning_msgs - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/planning/obstacle_cruise_planner/src/node.cpp b/planning/obstacle_cruise_planner/src/node.cpp index 41ae29b7d470f..866090a3c4696 100644 --- a/planning/obstacle_cruise_planner/src/node.cpp +++ b/planning/obstacle_cruise_planner/src/node.cpp @@ -353,7 +353,7 @@ void ObstacleCruisePlannerNode::BehaviorDeterminationParam::onParam( ObstacleCruisePlannerNode::ObstacleCruisePlannerNode(const rclcpp::NodeOptions & node_options) : Node("obstacle_cruise_planner", node_options), - vehicle_info_(vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo()), + vehicle_info_(autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo()), debug_data_ptr_(std::make_shared()) { using std::placeholders::_1; @@ -558,7 +558,7 @@ void ObstacleCruisePlannerNode::onTrajectory(const Trajectory::ConstSharedPtr ms std::vector ObstacleCruisePlannerNode::createOneStepPolygons( const std::vector & traj_points, - const vehicle_info_util::VehicleInfo & vehicle_info, + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const geometry_msgs::msg::Pose & current_ego_pose, const double lat_margin) const { const auto & p = behavior_determination_param_; diff --git a/planning/obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp b/planning/obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp index 1b5120eba0a11..a040ac598681f 100644 --- a/planning/obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp +++ b/planning/obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp @@ -38,8 +38,8 @@ constexpr double CLOSE_S_DIST_THRESHOLD = 1e-3; OptimizationBasedPlanner::OptimizationBasedPlanner( rclcpp::Node & node, const LongitudinalInfo & longitudinal_info, - const vehicle_info_util::VehicleInfo & vehicle_info, const EgoNearestParam & ego_nearest_param, - const std::shared_ptr debug_data_ptr) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, + const EgoNearestParam & ego_nearest_param, const std::shared_ptr debug_data_ptr) : PlannerInterface(node, longitudinal_info, vehicle_info, ego_nearest_param, debug_data_ptr) { smoothed_traj_sub_ = node.create_subscription( diff --git a/planning/obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp b/planning/obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp index a5afbe74cc9c4..3084764432c0e 100644 --- a/planning/obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp +++ b/planning/obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp @@ -58,8 +58,8 @@ T getSign(const T val) PIDBasedPlanner::PIDBasedPlanner( rclcpp::Node & node, const LongitudinalInfo & longitudinal_info, - const vehicle_info_util::VehicleInfo & vehicle_info, const EgoNearestParam & ego_nearest_param, - const std::shared_ptr debug_data_ptr) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, + const EgoNearestParam & ego_nearest_param, const std::shared_ptr debug_data_ptr) : PlannerInterface(node, longitudinal_info, vehicle_info, ego_nearest_param, debug_data_ptr) { min_accel_during_cruise_ = diff --git a/planning/obstacle_cruise_planner/src/polygon_utils.cpp b/planning/obstacle_cruise_planner/src/polygon_utils.cpp index 1bd2de0bd985c..f354c53365dc1 100644 --- a/planning/obstacle_cruise_planner/src/polygon_utils.cpp +++ b/planning/obstacle_cruise_planner/src/polygon_utils.cpp @@ -95,7 +95,7 @@ namespace polygon_utils std::optional> getCollisionPoint( const std::vector & traj_points, const std::vector & traj_polygons, const Obstacle & obstacle, const bool is_driving_forward, - const vehicle_info_util::VehicleInfo & vehicle_info) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) { const auto collision_info = getCollisionIndex(traj_points, traj_polygons, obstacle.pose, obstacle.stamp, obstacle.shape); diff --git a/planning/obstacle_stop_planner/include/obstacle_stop_planner/node.hpp b/planning/obstacle_stop_planner/include/obstacle_stop_planner/node.hpp index 723d7e8d12e56..d7fc83dbdf7ed 100644 --- a/planning/obstacle_stop_planner/include/obstacle_stop_planner/node.hpp +++ b/planning/obstacle_stop_planner/include/obstacle_stop_planner/node.hpp @@ -21,13 +21,13 @@ #include "tier4_autoware_utils/ros/logger_level_configure.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" +#include #include #include #include #include #include #include -#include #include #include @@ -77,6 +77,7 @@ using nav_msgs::msg::Odometry; using sensor_msgs::msg::PointCloud2; using std_msgs::msg::Header; +using autoware::vehicle_info_utils::VehicleInfo; using autoware_perception_msgs::msg::PredictedObjects; using autoware_planning_msgs::msg::Trajectory; using autoware_planning_msgs::msg::TrajectoryPoint; @@ -90,7 +91,6 @@ using tier4_debug_msgs::msg::Float64Stamped; using tier4_planning_msgs::msg::ExpandStopRange; using tier4_planning_msgs::msg::VelocityLimit; using tier4_planning_msgs::msg::VelocityLimitClearCommand; -using vehicle_info_util::VehicleInfo; using TrajectoryPoints = std::vector; using PointCloud = pcl::PointCloud; diff --git a/planning/obstacle_stop_planner/include/obstacle_stop_planner/planner_utils.hpp b/planning/obstacle_stop_planner/include/obstacle_stop_planner/planner_utils.hpp index b43e51873c09e..7b30ac61af46f 100644 --- a/planning/obstacle_stop_planner/include/obstacle_stop_planner/planner_utils.hpp +++ b/planning/obstacle_stop_planner/include/obstacle_stop_planner/planner_utils.hpp @@ -18,8 +18,8 @@ #include "obstacle_stop_planner/planner_data.hpp" +#include #include -#include #include #include @@ -45,10 +45,10 @@ using geometry_msgs::msg::Pose; using geometry_msgs::msg::PoseArray; using std_msgs::msg::Header; +using autoware::vehicle_info_utils::VehicleInfo; using autoware_planning_msgs::msg::TrajectoryPoint; using tier4_autoware_utils::Point2d; using tier4_autoware_utils::Polygon2d; -using vehicle_info_util::VehicleInfo; using TrajectoryPoints = std::vector; using PointCloud = pcl::PointCloud; diff --git a/planning/obstacle_stop_planner/launch/obstacle_stop_planner.launch.xml b/planning/obstacle_stop_planner/launch/obstacle_stop_planner.launch.xml index bec3aef6b4558..db38370d36dfb 100644 --- a/planning/obstacle_stop_planner/launch/obstacle_stop_planner.launch.xml +++ b/planning/obstacle_stop_planner/launch/obstacle_stop_planner.launch.xml @@ -4,7 +4,7 @@ - + diff --git a/planning/obstacle_stop_planner/package.xml b/planning/obstacle_stop_planner/package.xml index fcf09b96c1345..39195f2840b81 100644 --- a/planning/obstacle_stop_planner/package.xml +++ b/planning/obstacle_stop_planner/package.xml @@ -24,6 +24,7 @@ autoware_perception_msgs autoware_planning_msgs autoware_planning_test_manager + autoware_vehicle_info_utils diagnostic_msgs motion_utils nav_msgs @@ -41,7 +42,6 @@ tier4_autoware_utils tier4_debug_msgs tier4_planning_msgs - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/planning/obstacle_stop_planner/src/node.cpp b/planning/obstacle_stop_planner/src/node.cpp index 31c044c93af22..3a269d738e02d 100644 --- a/planning/obstacle_stop_planner/src/node.cpp +++ b/planning/obstacle_stop_planner/src/node.cpp @@ -56,7 +56,7 @@ ObstacleStopPlannerNode::ObstacleStopPlannerNode(const rclcpp::NodeOptions & nod : Node("obstacle_stop_planner", node_options) { // Vehicle Parameters - vehicle_info_ = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); const auto & i = vehicle_info_; diff --git a/planning/obstacle_velocity_limiter/launch/obstacle_velocity_limiter.launch.xml b/planning/obstacle_velocity_limiter/launch/obstacle_velocity_limiter.launch.xml index 4781ceda528bf..cb6cab3b125e2 100644 --- a/planning/obstacle_velocity_limiter/launch/obstacle_velocity_limiter.launch.xml +++ b/planning/obstacle_velocity_limiter/launch/obstacle_velocity_limiter.launch.xml @@ -10,7 +10,7 @@ - + diff --git a/planning/obstacle_velocity_limiter/package.xml b/planning/obstacle_velocity_limiter/package.xml index 49e424bfbc9ef..ad83f397902fc 100644 --- a/planning/obstacle_velocity_limiter/package.xml +++ b/planning/obstacle_velocity_limiter/package.xml @@ -14,6 +14,7 @@ autoware_perception_msgs autoware_planning_msgs autoware_planning_test_manager + autoware_vehicle_info_utils eigen grid_map_msgs grid_map_ros @@ -31,7 +32,6 @@ tf2_geometry_msgs tier4_autoware_utils tier4_planning_msgs - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/planning/obstacle_velocity_limiter/src/obstacle_velocity_limiter_node.cpp b/planning/obstacle_velocity_limiter/src/obstacle_velocity_limiter_node.cpp index 18cf534da8c7e..4b28d9a62759b 100644 --- a/planning/obstacle_velocity_limiter/src/obstacle_velocity_limiter_node.cpp +++ b/planning/obstacle_velocity_limiter/src/obstacle_velocity_limiter_node.cpp @@ -22,12 +22,12 @@ #include "obstacle_velocity_limiter/trajectory_preprocessing.hpp" #include "obstacle_velocity_limiter/types.hpp" +#include #include #include #include #include #include -#include #include @@ -71,7 +71,7 @@ ObstacleVelocityLimiterNode::ObstacleVelocityLimiterNode(const rclcpp::NodeOptio pub_runtime_ = create_publisher("~/output/runtime_microseconds", 1); - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); vehicle_lateral_offset_ = static_cast(vehicle_info.max_lateral_offset_m); vehicle_front_offset_ = static_cast(vehicle_info.max_longitudinal_offset_m); diff --git a/planning/planning_validator/include/autoware_planning_validator/planning_validator.hpp b/planning/planning_validator/include/autoware_planning_validator/planning_validator.hpp index 113c70fecb62c..fa0b116eafe86 100644 --- a/planning/planning_validator/include/autoware_planning_validator/planning_validator.hpp +++ b/planning/planning_validator/include/autoware_planning_validator/planning_validator.hpp @@ -17,9 +17,9 @@ #include "autoware_planning_validator/debug_marker.hpp" #include "autoware_planning_validator/msg/planning_validator_status.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "tier4_autoware_utils/ros/logger_level_configure.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include #include @@ -124,7 +124,7 @@ class PlanningValidator : public rclcpp::Node PlanningValidatorStatus validation_status_; ValidationParams validation_params_; // for thresholds - vehicle_info_util::VehicleInfo vehicle_info_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; bool isAllValid(const PlanningValidatorStatus & status) const; diff --git a/planning/planning_validator/package.xml b/planning/planning_validator/package.xml index 7fe57e68928d9..541396b52b02b 100644 --- a/planning/planning_validator/package.xml +++ b/planning/planning_validator/package.xml @@ -17,6 +17,7 @@ autoware_planning_msgs autoware_planning_test_manager + autoware_vehicle_info_utils diagnostic_updater geometry_msgs motion_utils @@ -24,7 +25,6 @@ rclcpp rclcpp_components tier4_autoware_utils - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/planning/planning_validator/src/planning_validator.cpp b/planning/planning_validator/src/planning_validator.cpp index aac50e24c5d5c..420ee564cda72 100644 --- a/planning/planning_validator/src/planning_validator.cpp +++ b/planning/planning_validator/src/planning_validator.cpp @@ -92,7 +92,7 @@ void PlanningValidator::setupParameters() } try { - vehicle_info_ = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); } catch (...) { RCLCPP_ERROR(get_logger(), "failed to get vehicle info. use default value."); vehicle_info_.front_overhang_m = 0.5; diff --git a/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/node.hpp b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/node.hpp index e44c38aed2b53..143b9ee30b2c2 100644 --- a/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/node.hpp +++ b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/node.hpp @@ -19,8 +19,8 @@ #include "autoware_path_sampler/parameters.hpp" #include "autoware_path_sampler/type_alias.hpp" #include "autoware_sampler_common/transform/spline_transform.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "rclcpp/rclcpp.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include @@ -39,7 +39,7 @@ class PathSampler : public rclcpp::Node protected: // for the static_centerline_generator package // argument variables - vehicle_info_util::VehicleInfo vehicle_info_{}; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_{}; mutable DebugData debug_data_{}; mutable std::shared_ptr time_keeper_ptr_{nullptr}; diff --git a/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/utils/geometry_utils.hpp b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/utils/geometry_utils.hpp index abd2fa367bc7b..b6c63eeffed18 100644 --- a/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/utils/geometry_utils.hpp +++ b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/utils/geometry_utils.hpp @@ -17,12 +17,12 @@ #include "autoware_path_sampler/common_structs.hpp" #include "autoware_path_sampler/type_alias.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "eigen3/Eigen/Core" #include "interpolation/linear_interpolation.hpp" #include "interpolation/spline_interpolation.hpp" #include "interpolation/spline_interpolation_points_2d.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include "autoware_planning_msgs/msg/path_point.hpp" #include "autoware_planning_msgs/msg/trajectory.hpp" diff --git a/planning/sampling_based_planner/autoware_path_sampler/package.xml b/planning/sampling_based_planner/autoware_path_sampler/package.xml index 011da8d469607..a48e6c0b836bc 100644 --- a/planning/sampling_based_planner/autoware_path_sampler/package.xml +++ b/planning/sampling_based_planner/autoware_path_sampler/package.xml @@ -17,6 +17,7 @@ autoware_frenet_planner autoware_perception_msgs autoware_planning_msgs + autoware_vehicle_info_utils geometry_msgs interpolation motion_utils @@ -28,7 +29,6 @@ tier4_autoware_utils tier4_debug_msgs tier4_planning_msgs - vehicle_info_util visualization_msgs ament_cmake_ros diff --git a/planning/sampling_based_planner/autoware_path_sampler/src/node.cpp b/planning/sampling_based_planner/autoware_path_sampler/src/node.cpp index a82c1b6a52a26..9a828d23af5cb 100644 --- a/planning/sampling_based_planner/autoware_path_sampler/src/node.cpp +++ b/planning/sampling_based_planner/autoware_path_sampler/src/node.cpp @@ -60,7 +60,7 @@ bool hasZeroVelocity(const TrajectoryPoint & traj_point) PathSampler::PathSampler(const rclcpp::NodeOptions & node_options) : Node("path_sampler", node_options), - vehicle_info_(vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo()), + vehicle_info_(autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo()), time_keeper_ptr_(std::make_shared()) { // interface publisher diff --git a/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py b/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py index 175209d49fa8b..98bc5a6dd2699 100644 --- a/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py +++ b/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py @@ -26,7 +26,7 @@ def generate_launch_description(): pkg = "pointcloud_preprocessor" param_file = os.path.join( - get_package_share_directory("vehicle_info_util"), "config/polygon_remover.yaml" + get_package_share_directory("autoware_vehicle_info_utils"), "config/polygon_remover.yaml" ) with open(param_file, "r") as f: diff --git a/simulator/simple_planning_simulator/launch/simple_planning_simulator.launch.py b/simulator/simple_planning_simulator/launch/simple_planning_simulator.launch.py index a8eb88f55df19..fd01f42928947 100644 --- a/simulator/simple_planning_simulator/launch/simple_planning_simulator.launch.py +++ b/simulator/simple_planning_simulator/launch/simple_planning_simulator.launch.py @@ -91,7 +91,7 @@ def add_launch_arg(name: str, default_value=None, description=None): add_launch_arg( "vehicle_info_param_file", [ - FindPackageShare("vehicle_info_util"), + FindPackageShare("autoware_vehicle_info_utils"), "/config/vehicle_info.param.yaml", ], "path to the parameter file of vehicle information", diff --git a/simulator/simple_planning_simulator/package.xml b/simulator/simple_planning_simulator/package.xml index 5f04fba4fdb8e..b820c5c6c3df0 100644 --- a/simulator/simple_planning_simulator/package.xml +++ b/simulator/simple_planning_simulator/package.xml @@ -18,6 +18,7 @@ autoware_control_msgs autoware_map_msgs autoware_planning_msgs + autoware_vehicle_info_utils autoware_vehicle_msgs geometry_msgs lanelet2_core @@ -35,7 +36,6 @@ tier4_autoware_utils tier4_external_api_msgs tier4_vehicle_msgs - vehicle_info_util autoware_cmake launch_ros diff --git a/simulator/simple_planning_simulator/src/simple_planning_simulator/simple_planning_simulator_core.cpp b/simulator/simple_planning_simulator/src/simple_planning_simulator/simple_planning_simulator_core.cpp index 3b65218aaf03d..c66a0c6f1f922 100644 --- a/simulator/simple_planning_simulator/src/simple_planning_simulator/simple_planning_simulator_core.cpp +++ b/simulator/simple_planning_simulator/src/simple_planning_simulator/simple_planning_simulator_core.cpp @@ -14,13 +14,13 @@ #include "simple_planning_simulator/simple_planning_simulator_core.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "motion_utils/trajectory/trajectory.hpp" #include "rclcpp_components/register_node_macro.hpp" #include "simple_planning_simulator/vehicle_model/sim_model.hpp" #include "tier4_autoware_utils/geometry/geometry.hpp" #include "tier4_autoware_utils/ros/msg_covariance.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" #include #include @@ -232,7 +232,7 @@ void SimplePlanningSimulator::initialize_vehicle_model() const double debug_acc_scaling_factor = declare_parameter("debug_acc_scaling_factor", 1.0); const double debug_steer_scaling_factor = declare_parameter("debug_steer_scaling_factor", 1.0); - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); const double wheelbase = vehicle_info.wheel_base_m; std::vector model_module_paths = declare_parameter>( diff --git a/system/default_ad_api/package.xml b/system/default_ad_api/package.xml index 77276c7acb0e3..315fdea27a3f3 100644 --- a/system/default_ad_api/package.xml +++ b/system/default_ad_api/package.xml @@ -17,6 +17,7 @@ autoware_adapi_version_msgs autoware_planning_msgs autoware_system_msgs + autoware_vehicle_info_utils autoware_vehicle_msgs component_interface_specs component_interface_utils @@ -32,7 +33,6 @@ tier4_api_msgs tier4_control_msgs tier4_system_msgs - vehicle_info_util python3-flask diff --git a/system/default_ad_api/src/vehicle_info.cpp b/system/default_ad_api/src/vehicle_info.cpp index cff7ac5cd5eae..8bf7da65f6e33 100644 --- a/system/default_ad_api/src/vehicle_info.cpp +++ b/system/default_ad_api/src/vehicle_info.cpp @@ -14,7 +14,7 @@ #include "vehicle_info.hpp" -#include +#include namespace { @@ -41,7 +41,7 @@ VehicleInfoNode::VehicleInfoNode(const rclcpp::NodeOptions & options) res->dimensions = dimensions_; }; - const auto vehicle = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + const auto vehicle = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); dimensions_.wheel_radius = vehicle.wheel_radius_m; dimensions_.wheel_width = vehicle.wheel_width_m; dimensions_.wheel_base = vehicle.wheel_base_m; diff --git a/vehicle/autoware_steer_offset_estimator/package.xml b/vehicle/autoware_steer_offset_estimator/package.xml index 4246f8dee8a4e..08db4f5903abe 100644 --- a/vehicle/autoware_steer_offset_estimator/package.xml +++ b/vehicle/autoware_steer_offset_estimator/package.xml @@ -9,6 +9,7 @@ ament_cmake_auto autoware_cmake + autoware_vehicle_info_utils autoware_vehicle_msgs diagnostic_updater geometry_msgs @@ -17,7 +18,6 @@ std_msgs tier4_autoware_utils tier4_debug_msgs - vehicle_info_util global_parameter_loader pose2twist diff --git a/vehicle/autoware_steer_offset_estimator/src/steer_offset_estimator_node.cpp b/vehicle/autoware_steer_offset_estimator/src/steer_offset_estimator_node.cpp index fdb5fdb404c0c..375e989f8f201 100644 --- a/vehicle/autoware_steer_offset_estimator/src/steer_offset_estimator_node.cpp +++ b/vehicle/autoware_steer_offset_estimator/src/steer_offset_estimator_node.cpp @@ -14,7 +14,7 @@ #include "autoware_steer_offset_estimator/steer_offset_estimator_node.hpp" -#include "vehicle_info_util/vehicle_info_util.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include #include @@ -26,7 +26,7 @@ SteerOffsetEstimatorNode::SteerOffsetEstimatorNode(const rclcpp::NodeOptions & n { using std::placeholders::_1; // get parameter - const auto vehicle_info = vehicle_info_util::VehicleInfoUtil(*this).getVehicleInfo(); + const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); wheel_base_ = vehicle_info.wheel_base_m; covariance_ = this->declare_parameter("initial_covariance"); forgetting_factor_ = this->declare_parameter("forgetting_factor"); diff --git a/vehicle/vehicle_info_util/CMakeLists.txt b/vehicle/autoware_vehicle_info_utils/CMakeLists.txt similarity index 71% rename from vehicle/vehicle_info_util/CMakeLists.txt rename to vehicle/autoware_vehicle_info_utils/CMakeLists.txt index ca72b0ed2db65..6d090ab3ebff7 100644 --- a/vehicle/vehicle_info_util/CMakeLists.txt +++ b/vehicle/autoware_vehicle_info_utils/CMakeLists.txt @@ -1,12 +1,12 @@ cmake_minimum_required(VERSION 3.14) -project(vehicle_info_util) +project(autoware_vehicle_info_utils) find_package(autoware_cmake REQUIRED) autoware_package() -ament_auto_add_library(vehicle_info_util SHARED +ament_auto_add_library(vehicle_info_utils SHARED src/vehicle_info.cpp - src/vehicle_info_util.cpp + src/vehicle_info_utils.cpp ) ament_auto_package( diff --git a/vehicle/vehicle_info_util/Readme.md b/vehicle/autoware_vehicle_info_utils/Readme.md similarity index 89% rename from vehicle/vehicle_info_util/Readme.md rename to vehicle/autoware_vehicle_info_utils/Readme.md index 600fd62270d81..537dc04aa8c69 100644 --- a/vehicle/vehicle_info_util/Readme.md +++ b/vehicle/autoware_vehicle_info_utils/Readme.md @@ -42,15 +42,15 @@ We have implemented a versioning system for the `vehicle_info.param.yaml` file t #### Minimum turning radius ```sh -$ ros2 run vehicle_info_util min_turning_radius_calculator.py -yaml path is /home/autoware/pilot-auto/install/vehicle_info_util/share/vehicle_info_util/config/vehicle_info.param.yaml +$ ros2 run autoware_vehicle_info_utils min_turning_radius_calculator.py +yaml path is /home/autoware/pilot-auto/install/autoware_vehicle_info_utils/share/autoware_vehicle_info_utils/config/vehicle_info.param.yaml Minimum turning radius is 3.253042620027102 [m] for rear, 4.253220695862465 [m] for front. ``` You can designate yaml file with `-y` option as follows. ```sh -ros2 run vehicle_info_util min_turning_radius_calculator.py -y +ros2 run autoware_vehicle_info_utils min_turning_radius_calculator.py -y ``` ## Assumptions / Known limits diff --git a/vehicle/vehicle_info_util/config/polygon_remover.yaml b/vehicle/autoware_vehicle_info_utils/config/polygon_remover.yaml similarity index 100% rename from vehicle/vehicle_info_util/config/polygon_remover.yaml rename to vehicle/autoware_vehicle_info_utils/config/polygon_remover.yaml diff --git a/vehicle/vehicle_info_util/config/vehicle_info.param.yaml b/vehicle/autoware_vehicle_info_utils/config/vehicle_info.param.yaml similarity index 100% rename from vehicle/vehicle_info_util/config/vehicle_info.param.yaml rename to vehicle/autoware_vehicle_info_utils/config/vehicle_info.param.yaml diff --git a/vehicle/vehicle_info_util/config/vehicle_mirror.param.yaml b/vehicle/autoware_vehicle_info_utils/config/vehicle_mirror.param.yaml similarity index 100% rename from vehicle/vehicle_info_util/config/vehicle_mirror.param.yaml rename to vehicle/autoware_vehicle_info_utils/config/vehicle_mirror.param.yaml diff --git a/vehicle/vehicle_info_util/include/vehicle_info_util/vehicle_info.hpp b/vehicle/autoware_vehicle_info_utils/include/autoware_vehicle_info_utils/vehicle_info.hpp similarity index 89% rename from vehicle/vehicle_info_util/include/vehicle_info_util/vehicle_info.hpp rename to vehicle/autoware_vehicle_info_utils/include/autoware_vehicle_info_utils/vehicle_info.hpp index cdbbe0427b145..c94ea01224da2 100644 --- a/vehicle/vehicle_info_util/include/vehicle_info_util/vehicle_info.hpp +++ b/vehicle/autoware_vehicle_info_utils/include/autoware_vehicle_info_utils/vehicle_info.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef VEHICLE_INFO_UTIL__VEHICLE_INFO_HPP_ -#define VEHICLE_INFO_UTIL__VEHICLE_INFO_HPP_ +#ifndef AUTOWARE_VEHICLE_INFO_UTILS__VEHICLE_INFO_HPP_ +#define AUTOWARE_VEHICLE_INFO_UTILS__VEHICLE_INFO_HPP_ #include "tier4_autoware_utils/geometry/boost_geometry.hpp" -namespace vehicle_info_util +namespace autoware::vehicle_info_utils { /// Data class for vehicle info struct VehicleInfo @@ -59,6 +59,6 @@ VehicleInfo createVehicleInfo( const double left_overhang_m, const double right_overhang_m, const double vehicle_height_m, const double max_steer_angle_rad); -} // namespace vehicle_info_util +} // namespace autoware::vehicle_info_utils -#endif // VEHICLE_INFO_UTIL__VEHICLE_INFO_HPP_ +#endif // AUTOWARE_VEHICLE_INFO_UTILS__VEHICLE_INFO_HPP_ diff --git a/vehicle/vehicle_info_util/include/vehicle_info_util/vehicle_info_util.hpp b/vehicle/autoware_vehicle_info_utils/include/autoware_vehicle_info_utils/vehicle_info_utils.hpp similarity index 71% rename from vehicle/vehicle_info_util/include/vehicle_info_util/vehicle_info_util.hpp rename to vehicle/autoware_vehicle_info_utils/include/autoware_vehicle_info_utils/vehicle_info_utils.hpp index 5e1623ada5ed3..d3ca339f78451 100644 --- a/vehicle/vehicle_info_util/include/vehicle_info_util/vehicle_info_util.hpp +++ b/vehicle/autoware_vehicle_info_utils/include/autoware_vehicle_info_utils/vehicle_info_utils.hpp @@ -12,23 +12,23 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef VEHICLE_INFO_UTIL__VEHICLE_INFO_UTIL_HPP_ -#define VEHICLE_INFO_UTIL__VEHICLE_INFO_UTIL_HPP_ +#ifndef AUTOWARE_VEHICLE_INFO_UTILS__VEHICLE_INFO_UTILS_HPP_ +#define AUTOWARE_VEHICLE_INFO_UTILS__VEHICLE_INFO_UTILS_HPP_ -#include "vehicle_info_util/vehicle_info.hpp" +#include "autoware_vehicle_info_utils/vehicle_info.hpp" #include -namespace vehicle_info_util +namespace autoware::vehicle_info_utils { /// This is a convenience class for saving you from declaring all parameters /// manually and calculating derived parameters. /// This class supposes that necessary parameters are set when the node is launched. -class VehicleInfoUtil +class VehicleInfoUtils { public: /// Constructor - explicit VehicleInfoUtil(rclcpp::Node & node); + explicit VehicleInfoUtils(rclcpp::Node & node); /// Get vehicle info VehicleInfo getVehicleInfo(); @@ -38,6 +38,6 @@ class VehicleInfoUtil VehicleInfo vehicle_info_; }; -} // namespace vehicle_info_util +} // namespace autoware::vehicle_info_utils -#endif // VEHICLE_INFO_UTIL__VEHICLE_INFO_UTIL_HPP_ +#endif // AUTOWARE_VEHICLE_INFO_UTILS__VEHICLE_INFO_UTILS_HPP_ diff --git a/vehicle/vehicle_info_util/launch/sample.launch.py b/vehicle/autoware_vehicle_info_utils/launch/sample.launch.py similarity index 91% rename from vehicle/vehicle_info_util/launch/sample.launch.py rename to vehicle/autoware_vehicle_info_utils/launch/sample.launch.py index c0be2bc4c4c48..5f83bc695230e 100644 --- a/vehicle/vehicle_info_util/launch/sample.launch.py +++ b/vehicle/autoware_vehicle_info_utils/launch/sample.launch.py @@ -30,14 +30,14 @@ def launch_setup(context, *args, **kwargs): set_use_sim_time = SetParameter(name="use_sim_time", value=LaunchConfiguration("use_sim_time")) vehicle_info_param_path = os.path.join( - get_package_share_directory("vehicle_info_util"), + get_package_share_directory("autoware_vehicle_info_utils"), "config", "vehicle_info.param.yaml", ) # vehicle_info load_vehicle_info = IncludeLaunchDescription( PythonLaunchDescriptionSource( - [FindPackageShare("vehicle_info_util"), "/launch/vehicle_info.launch.py"] + [FindPackageShare("autoware_vehicle_info_utils"), "/launch/vehicle_info.launch.py"] ), launch_arguments={"vehicle_info_param_file": [vehicle_info_param_path]}.items(), ) diff --git a/vehicle/vehicle_info_util/launch/vehicle_info.launch.py b/vehicle/autoware_vehicle_info_utils/launch/vehicle_info.launch.py similarity index 100% rename from vehicle/vehicle_info_util/launch/vehicle_info.launch.py rename to vehicle/autoware_vehicle_info_utils/launch/vehicle_info.launch.py diff --git a/vehicle/vehicle_info_util/package.xml b/vehicle/autoware_vehicle_info_utils/package.xml similarity index 88% rename from vehicle/vehicle_info_util/package.xml rename to vehicle/autoware_vehicle_info_utils/package.xml index 139f8439d60c9..bd8ec0cb601a0 100644 --- a/vehicle/vehicle_info_util/package.xml +++ b/vehicle/autoware_vehicle_info_utils/package.xml @@ -1,9 +1,9 @@ - vehicle_info_util + autoware_vehicle_info_utils 0.1.0 - The vehicle_info_util package + The autoware_vehicle_info_utils package Taiki Tanaka diff --git a/vehicle/vehicle_info_util/scripts/min_turning_radius_calculator.py b/vehicle/autoware_vehicle_info_utils/scripts/min_turning_radius_calculator.py similarity index 93% rename from vehicle/vehicle_info_util/scripts/min_turning_radius_calculator.py rename to vehicle/autoware_vehicle_info_utils/scripts/min_turning_radius_calculator.py index 9e25b928c8b74..0b581786b25ad 100755 --- a/vehicle/vehicle_info_util/scripts/min_turning_radius_calculator.py +++ b/vehicle/autoware_vehicle_info_utils/scripts/min_turning_radius_calculator.py @@ -41,7 +41,8 @@ def main(yaml_path): if __name__ == "__main__": default_yaml_path = ( - get_package_share_directory("vehicle_info_util") + "/config/vehicle_info.param.yaml" + get_package_share_directory("autoware_vehicle_info_utils") + + "/config/vehicle_info.param.yaml" ) parser = argparse.ArgumentParser() diff --git a/vehicle/vehicle_info_util/src/vehicle_info.cpp b/vehicle/autoware_vehicle_info_utils/src/vehicle_info.cpp similarity index 95% rename from vehicle/vehicle_info_util/src/vehicle_info.cpp rename to vehicle/autoware_vehicle_info_utils/src/vehicle_info.cpp index 1a47252f82d04..c7f587d20b2f4 100644 --- a/vehicle/vehicle_info_util/src/vehicle_info.cpp +++ b/vehicle/autoware_vehicle_info_utils/src/vehicle_info.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "vehicle_info_util/vehicle_info.hpp" +#include "autoware_vehicle_info_utils/vehicle_info.hpp" -namespace vehicle_info_util +namespace autoware::vehicle_info_utils { tier4_autoware_utils::LinearRing2d VehicleInfo::createFootprint(const double margin) const { @@ -85,4 +85,4 @@ VehicleInfo createVehicleInfo( }; } -} // namespace vehicle_info_util +} // namespace autoware::vehicle_info_utils diff --git a/vehicle/vehicle_info_util/src/vehicle_info_util.cpp b/vehicle/autoware_vehicle_info_utils/src/vehicle_info_utils.cpp similarity index 90% rename from vehicle/vehicle_info_util/src/vehicle_info_util.cpp rename to vehicle/autoware_vehicle_info_utils/src/vehicle_info_utils.cpp index 262a4b21c0cf7..e313391f6207a 100644 --- a/vehicle/vehicle_info_util/src/vehicle_info_util.cpp +++ b/vehicle/autoware_vehicle_info_utils/src/vehicle_info_utils.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "vehicle_info_util/vehicle_info_util.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include @@ -36,9 +36,9 @@ T getParameter(rclcpp::Node & node, const std::string & name) } } // namespace -namespace vehicle_info_util +namespace autoware::vehicle_info_utils { -VehicleInfoUtil::VehicleInfoUtil(rclcpp::Node & node) +VehicleInfoUtils::VehicleInfoUtils(rclcpp::Node & node) { vehicle_info_.wheel_radius_m = getParameter(node, "wheel_radius"); vehicle_info_.wheel_width_m = getParameter(node, "wheel_width"); @@ -52,7 +52,7 @@ VehicleInfoUtil::VehicleInfoUtil(rclcpp::Node & node) vehicle_info_.max_steer_angle_rad = getParameter(node, "max_steer_angle"); } -VehicleInfo VehicleInfoUtil::getVehicleInfo() +VehicleInfo VehicleInfoUtils::getVehicleInfo() { return createVehicleInfo( vehicle_info_.wheel_radius_m, vehicle_info_.wheel_width_m, vehicle_info_.wheel_base_m, @@ -60,4 +60,4 @@ VehicleInfo VehicleInfoUtil::getVehicleInfo() vehicle_info_.left_overhang_m, vehicle_info_.right_overhang_m, vehicle_info_.vehicle_height_m, vehicle_info_.max_steer_angle_rad); } -} // namespace vehicle_info_util +} // namespace autoware::vehicle_info_utils From 210513d7694ceb0288fc6c701ff7883421fa3552 Mon Sep 17 00:00:00 2001 From: Masaki Baba Date: Mon, 10 Jun 2024 17:02:27 +0900 Subject: [PATCH 063/142] refactor(localization_util): apply static analysis (#7399) * refactor based on linter Signed-off-by: a-maumau * style(pre-commit): autofix * apply suggestion Signed-off-by: a-maumau --------- Signed-off-by: a-maumau Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- localization/localization_util/src/util_func.cpp | 4 ++-- .../localization_util/test/test_smart_pose_buffer.cpp | 10 +--------- 2 files changed, 3 insertions(+), 11 deletions(-) diff --git a/localization/localization_util/src/util_func.cpp b/localization/localization_util/src/util_func.cpp index ae6f0b61f063c..133442df68dcd 100644 --- a/localization/localization_util/src/util_func.cpp +++ b/localization/localization_util/src/util_func.cpp @@ -28,11 +28,11 @@ std_msgs::msg::ColorRGBA exchange_color_crc(double x) color.b = 1.0; color.g = static_cast(std::sin(x * 2.0 * M_PI)); color.r = 0; - } else if (x > 0.25 && x <= 0.5) { + } else if (x <= 0.5) { color.b = static_cast(std::sin(x * 2 * M_PI)); color.g = 1.0; color.r = 0; - } else if (x > 0.5 && x <= 0.75) { + } else if (x <= 0.75) { color.b = 0; color.g = 1.0; color.r = static_cast(-std::sin(x * 2.0 * M_PI)); diff --git a/localization/localization_util/test/test_smart_pose_buffer.cpp b/localization/localization_util/test/test_smart_pose_buffer.cpp index 2520e458f2d33..a8ed6d98b6064 100644 --- a/localization/localization_util/test/test_smart_pose_buffer.cpp +++ b/localization/localization_util/test/test_smart_pose_buffer.cpp @@ -42,15 +42,7 @@ bool compare_pose( pose_a.pose.pose.orientation.w == pose_b.pose.pose.orientation.w; } -class TestSmartPoseBuffer : public ::testing::Test -{ -protected: - void SetUp() override {} - - void TearDown() override {} -}; - -TEST_F(TestSmartPoseBuffer, interpolate_pose) // NOLINT +TEST(TestSmartPoseBuffer, interpolate_pose) // NOLINT { rclcpp::Logger logger = rclcpp::get_logger("test_logger"); const double pose_timeout_sec = 10.0; From 40cc4125bbf2fa5487ed145ceb30d1564fc996f7 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Mon, 10 Jun 2024 17:20:24 +0900 Subject: [PATCH 064/142] feat(planning_validator): use polling subscriber (#7356) * use polling subscriber Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .../autoware_planning_validator/planning_validator.hpp | 4 +++- planning/planning_validator/src/planning_validator.cpp | 6 +++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/planning/planning_validator/include/autoware_planning_validator/planning_validator.hpp b/planning/planning_validator/include/autoware_planning_validator/planning_validator.hpp index fa0b116eafe86..b2a9c8f2e94a4 100644 --- a/planning/planning_validator/include/autoware_planning_validator/planning_validator.hpp +++ b/planning/planning_validator/include/autoware_planning_validator/planning_validator.hpp @@ -19,6 +19,7 @@ #include "autoware_planning_validator/msg/planning_validator_status.hpp" #include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "tier4_autoware_utils/ros/logger_level_configure.hpp" +#include "tier4_autoware_utils/ros/polling_subscriber.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" #include @@ -102,7 +103,8 @@ class PlanningValidator : public rclcpp::Node void setStatus(DiagnosticStatusWrapper & stat, const bool & is_ok, const std::string & msg); - rclcpp::Subscription::SharedPtr sub_kinematics_; + tier4_autoware_utils::InterProcessPollingSubscriber sub_kinematics_{ + this, "~/input/kinematics"}; rclcpp::Subscription::SharedPtr sub_traj_; rclcpp::Publisher::SharedPtr pub_traj_; rclcpp::Publisher::SharedPtr pub_status_; diff --git a/planning/planning_validator/src/planning_validator.cpp b/planning/planning_validator/src/planning_validator.cpp index 420ee564cda72..9f54547eb62e1 100644 --- a/planning/planning_validator/src/planning_validator.cpp +++ b/planning/planning_validator/src/planning_validator.cpp @@ -32,9 +32,6 @@ PlanningValidator::PlanningValidator(const rclcpp::NodeOptions & options) { using std::placeholders::_1; - sub_kinematics_ = create_subscription( - "~/input/kinematics", 1, - [this](const Odometry::ConstSharedPtr msg) { current_kinematics_ = msg; }); sub_traj_ = create_subscription( "~/input/trajectory", 1, std::bind(&PlanningValidator::onTrajectory, this, _1)); @@ -195,6 +192,9 @@ void PlanningValidator::onTrajectory(const Trajectory::ConstSharedPtr msg) current_trajectory_ = msg; + // receive data + current_kinematics_ = sub_kinematics_.takeData(); + if (!isDataReady()) return; if (publish_diag_ && !diag_updater_) { From 420c6bda757fed73496dcf807e397dfab1c8b3dc Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Mon, 10 Jun 2024 17:27:56 +0900 Subject: [PATCH 065/142] refactor(freespace_planner)!: add autoware prefix (#7376) refactor(freespace_planner)!: add autoawre prefix Signed-off-by: kosuke55 --- .../launch/scenario_planning/parking.launch.xml | 2 +- launch/tier4_planning_launch/package.xml | 2 +- .../README.md | 2 +- .../CMakeLists.txt | 10 +++++----- .../README.md | 2 +- .../config/freespace_planner.param.yaml | 0 .../freespace_planner_node.hpp | 10 +++++----- .../launch/freespace_planner.launch.xml | 2 +- .../package.xml | 4 ++-- .../freespace_planner_node.cpp | 8 ++++---- .../test/test_freespace_planner_node_interface.cpp | 6 +++--- 11 files changed, 24 insertions(+), 24 deletions(-) rename planning/{freespace_planner => autoware_freespace_planner}/CMakeLists.txt (64%) rename planning/{freespace_planner => autoware_freespace_planner}/README.md (99%) rename planning/{freespace_planner => autoware_freespace_planner}/config/freespace_planner.param.yaml (100%) rename planning/{freespace_planner/include/freespace_planner => autoware_freespace_planner/include/autoware_freespace_planner}/freespace_planner_node.hpp (95%) rename planning/{freespace_planner => autoware_freespace_planner}/launch/freespace_planner.launch.xml (91%) rename planning/{freespace_planner => autoware_freespace_planner}/package.xml (93%) rename planning/{freespace_planner/src/freespace_planner => autoware_freespace_planner/src/autoware_freespace_planner}/freespace_planner_node.cpp (98%) rename planning/{freespace_planner => autoware_freespace_planner}/test/test_freespace_planner_node_interface.cpp (94%) diff --git a/launch/tier4_planning_launch/launch/scenario_planning/parking.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/parking.launch.xml index db5a9a0093e7c..e0fdcb1e30408 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/parking.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/parking.launch.xml @@ -18,7 +18,7 @@ - + diff --git a/launch/tier4_planning_launch/package.xml b/launch/tier4_planning_launch/package.xml index cc2d2903005cb..1c881091b0e7d 100644 --- a/launch/tier4_planning_launch/package.xml +++ b/launch/tier4_planning_launch/package.xml @@ -61,6 +61,7 @@ autoware_costmap_generator autoware_external_cmd_selector autoware_external_velocity_limit_selector + autoware_freespace_planner autoware_path_optimizer autoware_planning_topic_converter autoware_planning_validator @@ -69,7 +70,6 @@ autoware_surround_obstacle_checker autoware_velocity_smoother behavior_path_planner - freespace_planner glog_component mission_planner obstacle_cruise_planner diff --git a/planning/autoware_behavior_path_start_planner_module/README.md b/planning/autoware_behavior_path_start_planner_module/README.md index bcb3b1bec1fd9..b2c92f31ded31 100644 --- a/planning/autoware_behavior_path_start_planner_module/README.md +++ b/planning/autoware_behavior_path_start_planner_module/README.md @@ -545,4 +545,4 @@ To run this feature, you need to set `parking_lot` to the map, `activate_by_scen | end_pose_search_end_distance | [m] | double | distance from ego to the end point of the search for the end point in the freespace_pull_out driving lane | 30.0 | | end_pose_search_interval | [m] | bool | interval to search for the end point in the freespace_pull_out driving lane | 2.0 | -See [freespace_planner](../freespace_planner/README.md) for other parameters. +See [freespace_planner](../autoware_freespace_planner/README.md) for other parameters. diff --git a/planning/freespace_planner/CMakeLists.txt b/planning/autoware_freespace_planner/CMakeLists.txt similarity index 64% rename from planning/freespace_planner/CMakeLists.txt rename to planning/autoware_freespace_planner/CMakeLists.txt index a33c9859afe75..7901be70fbc63 100644 --- a/planning/freespace_planner/CMakeLists.txt +++ b/planning/autoware_freespace_planner/CMakeLists.txt @@ -1,24 +1,24 @@ cmake_minimum_required(VERSION 3.14) -project(freespace_planner) +project(autoware_freespace_planner) find_package(autoware_cmake REQUIRED) autoware_package() ament_auto_add_library(freespace_planner_node SHARED - src/freespace_planner/freespace_planner_node.cpp + src/autoware_freespace_planner/freespace_planner_node.cpp ) rclcpp_components_register_node(freespace_planner_node - PLUGIN "freespace_planner::FreespacePlannerNode" + PLUGIN "autoware::freespace_planner::FreespacePlannerNode" EXECUTABLE freespace_planner ) if(BUILD_TESTING) ament_add_ros_isolated_gtest(test_${PROJECT_NAME} - test/test_${PROJECT_NAME}_node_interface.cpp + test/test_freespace_planner_node_interface.cpp ) target_link_libraries(test_${PROJECT_NAME} - ${PROJECT_NAME}_node + freespace_planner_node ) endif() diff --git a/planning/freespace_planner/README.md b/planning/autoware_freespace_planner/README.md similarity index 99% rename from planning/freespace_planner/README.md rename to planning/autoware_freespace_planner/README.md index 6ed0ab605ea05..6bf13a81c0413 100644 --- a/planning/freespace_planner/README.md +++ b/planning/autoware_freespace_planner/README.md @@ -1,4 +1,4 @@ -# The `freespace_planner` +# The `autoware_freespace_planner` ## freespace_planner_node diff --git a/planning/freespace_planner/config/freespace_planner.param.yaml b/planning/autoware_freespace_planner/config/freespace_planner.param.yaml similarity index 100% rename from planning/freespace_planner/config/freespace_planner.param.yaml rename to planning/autoware_freespace_planner/config/freespace_planner.param.yaml diff --git a/planning/freespace_planner/include/freespace_planner/freespace_planner_node.hpp b/planning/autoware_freespace_planner/include/autoware_freespace_planner/freespace_planner_node.hpp similarity index 95% rename from planning/freespace_planner/include/freespace_planner/freespace_planner_node.hpp rename to planning/autoware_freespace_planner/include/autoware_freespace_planner/freespace_planner_node.hpp index 22205ce427632..2084d8a3aad24 100644 --- a/planning/freespace_planner/include/freespace_planner/freespace_planner_node.hpp +++ b/planning/autoware_freespace_planner/include/autoware_freespace_planner/freespace_planner_node.hpp @@ -28,8 +28,8 @@ * limitations under the License. */ -#ifndef FREESPACE_PLANNER__FREESPACE_PLANNER_NODE_HPP_ -#define FREESPACE_PLANNER__FREESPACE_PLANNER_NODE_HPP_ +#ifndef AUTOWARE_FREESPACE_PLANNER__FREESPACE_PLANNER_NODE_HPP_ +#define AUTOWARE_FREESPACE_PLANNER__FREESPACE_PLANNER_NODE_HPP_ #include "tier4_autoware_utils/ros/logger_level_configure.hpp" @@ -63,7 +63,7 @@ #include #include -namespace freespace_planner +namespace autoware::freespace_planner { using autoware::freespace_planning_algorithms::AbstractPlanningAlgorithm; using autoware::freespace_planning_algorithms::AstarParam; @@ -165,6 +165,6 @@ class FreespacePlannerNode : public rclcpp::Node std::unique_ptr logger_configure_; }; -} // namespace freespace_planner +} // namespace autoware::freespace_planner -#endif // FREESPACE_PLANNER__FREESPACE_PLANNER_NODE_HPP_ +#endif // AUTOWARE_FREESPACE_PLANNER__FREESPACE_PLANNER_NODE_HPP_ diff --git a/planning/freespace_planner/launch/freespace_planner.launch.xml b/planning/autoware_freespace_planner/launch/freespace_planner.launch.xml similarity index 91% rename from planning/freespace_planner/launch/freespace_planner.launch.xml rename to planning/autoware_freespace_planner/launch/freespace_planner.launch.xml index 3c8cce7a93941..e92a04307fed2 100644 --- a/planning/freespace_planner/launch/freespace_planner.launch.xml +++ b/planning/autoware_freespace_planner/launch/freespace_planner.launch.xml @@ -11,7 +11,7 @@ - + diff --git a/planning/freespace_planner/package.xml b/planning/autoware_freespace_planner/package.xml similarity index 93% rename from planning/freespace_planner/package.xml rename to planning/autoware_freespace_planner/package.xml index 06004ce9f308f..8a2ecad429f1b 100644 --- a/planning/freespace_planner/package.xml +++ b/planning/autoware_freespace_planner/package.xml @@ -1,9 +1,9 @@ - freespace_planner + autoware_freespace_planner 0.1.0 - The freespace_planner package + The autoware_freespace_planner package Kosuke Takeuchi Takamasa Horibe Takayuki Murooka diff --git a/planning/freespace_planner/src/freespace_planner/freespace_planner_node.cpp b/planning/autoware_freespace_planner/src/autoware_freespace_planner/freespace_planner_node.cpp similarity index 98% rename from planning/freespace_planner/src/freespace_planner/freespace_planner_node.cpp rename to planning/autoware_freespace_planner/src/autoware_freespace_planner/freespace_planner_node.cpp index f17b9227c89bc..797c140aa9dd9 100644 --- a/planning/freespace_planner/src/freespace_planner/freespace_planner_node.cpp +++ b/planning/autoware_freespace_planner/src/autoware_freespace_planner/freespace_planner_node.cpp @@ -28,7 +28,7 @@ * limitations under the License. */ -#include "freespace_planner/freespace_planner_node.hpp" +#include "autoware_freespace_planner/freespace_planner_node.hpp" #include "autoware_freespace_planning_algorithms/abstract_algorithm.hpp" @@ -217,7 +217,7 @@ bool isStopped( } // namespace -namespace freespace_planner +namespace autoware::freespace_planner { FreespacePlannerNode::FreespacePlannerNode(const rclcpp::NodeOptions & node_options) : Node("freespace_planner", node_options) @@ -583,7 +583,7 @@ void FreespacePlannerNode::initializePlanningAlgorithm() } RCLCPP_INFO_STREAM(get_logger(), "initialize planning algorithm: " << algo_name); } -} // namespace freespace_planner +} // namespace autoware::freespace_planner #include -RCLCPP_COMPONENTS_REGISTER_NODE(freespace_planner::FreespacePlannerNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::freespace_planner::FreespacePlannerNode) diff --git a/planning/freespace_planner/test/test_freespace_planner_node_interface.cpp b/planning/autoware_freespace_planner/test/test_freespace_planner_node_interface.cpp similarity index 94% rename from planning/freespace_planner/test/test_freespace_planner_node_interface.cpp rename to planning/autoware_freespace_planner/test/test_freespace_planner_node_interface.cpp index 881ce269a7895..621bed12fdabc 100644 --- a/planning/freespace_planner/test/test_freespace_planner_node_interface.cpp +++ b/planning/autoware_freespace_planner/test/test_freespace_planner_node_interface.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "freespace_planner/freespace_planner_node.hpp" +#include "autoware_freespace_planner/freespace_planner_node.hpp" #include #include @@ -22,7 +22,7 @@ #include -using freespace_planner::FreespacePlannerNode; +using autoware::freespace_planner::FreespacePlannerNode; using planning_test_utils::PlanningInterfaceTestManager; std::shared_ptr generateTestManager() @@ -41,7 +41,7 @@ std::shared_ptr generateNode() const auto planning_test_utils_dir = ament_index_cpp::get_package_share_directory("planning_test_utils"); const auto freespace_planner_dir = - ament_index_cpp::get_package_share_directory("freespace_planner"); + ament_index_cpp::get_package_share_directory("autoware_freespace_planner"); node_options.arguments( {"--ros-args", "--params-file", planning_test_utils_dir + "/config/test_vehicle_info.param.yaml", "--params-file", From e4bda73452658afd37fb96486d43a3a549450d11 Mon Sep 17 00:00:00 2001 From: eiki <53928021+N-Eiki@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:35:40 +0900 Subject: [PATCH 066/142] feat(external_cmd_converter): replace polling takeData function with the callback function (#7263) * delete duplicated sentence. \n replace callback data get function with takeData function. Signed-off-by: N-Eiki * add maintainer Signed-off-by: N-Eiki * delete name Signed-off-by: N-Eiki * style(pre-commit): autofix * style(pre-commit): autofix * handle to comment: delete waste line Signed-off-by: N-Eiki * fix: treat clang-tidy-differential's warnings. for examples CamelCase to snake_case, delete redundant if sentences Signed-off-by: N-Eiki * fix mailadress miss Signed-off-by: N-Eiki * style(pre-commit): autofix * format by clang-format Signed-off-by: N-Eiki * delete static Signed-off-by: N-Eiki * unify to *_sub_ Signed-off-by: N-Eiki --------- Signed-off-by: N-Eiki Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../include/external_cmd_converter/node.hpp | 55 +++++---- vehicle/external_cmd_converter/package.xml | 1 + vehicle/external_cmd_converter/src/node.cpp | 107 +++++++----------- 3 files changed, 72 insertions(+), 91 deletions(-) diff --git a/vehicle/external_cmd_converter/include/external_cmd_converter/node.hpp b/vehicle/external_cmd_converter/include/external_cmd_converter/node.hpp index 2488c8ea7f300..5fb1f5efc38fd 100644 --- a/vehicle/external_cmd_converter/include/external_cmd_converter/node.hpp +++ b/vehicle/external_cmd_converter/include/external_cmd_converter/node.hpp @@ -15,6 +15,8 @@ #ifndef EXTERNAL_CMD_CONVERTER__NODE_HPP_ #define EXTERNAL_CMD_CONVERTER__NODE_HPP_ +#include "tier4_autoware_utils/ros/polling_subscriber.hpp" + #include #include #include @@ -33,12 +35,12 @@ namespace external_cmd_converter { using GearCommand = autoware_vehicle_msgs::msg::GearCommand; -using Control = autoware_control_msgs::msg::Control; +using autoware_control_msgs::msg::Control; using ExternalControlCommand = tier4_external_api_msgs::msg::ControlCommandStamped; -using Odometry = nav_msgs::msg::Odometry; +using nav_msgs::msg::Odometry; using raw_vehicle_cmd_converter::AccelMap; using raw_vehicle_cmd_converter::BrakeMap; -using Odometry = nav_msgs::msg::Odometry; +using tier4_control_msgs::msg::GateMode; class ExternalCmdConverterNode : public rclcpp::Node { @@ -47,33 +49,36 @@ class ExternalCmdConverterNode : public rclcpp::Node private: // Publisher - rclcpp::Publisher::SharedPtr pub_cmd_; + rclcpp::Publisher::SharedPtr cmd_pub_; rclcpp::Publisher::SharedPtr - pub_current_cmd_; + current_cmd_pub_; // Subscriber - rclcpp::Subscription::SharedPtr sub_velocity_; rclcpp::Subscription::SharedPtr - sub_control_cmd_; - rclcpp::Subscription::SharedPtr sub_shift_cmd_; - rclcpp::Subscription::SharedPtr sub_gate_mode_; + control_cmd_sub_; rclcpp::Subscription::SharedPtr - sub_emergency_stop_heartbeat_; + emergency_stop_heartbeat_sub_; + + // Polling Subscriber + tier4_autoware_utils::InterProcessPollingSubscriber velocity_sub_{this, "in/odometry"}; + tier4_autoware_utils::InterProcessPollingSubscriber shift_cmd_sub_{ + this, "in/shift_cmd"}; + tier4_autoware_utils::InterProcessPollingSubscriber gate_mode_sub_{ + this, "in/current_gate_mode"}; + + void on_external_cmd(const ExternalControlCommand::ConstSharedPtr cmd_ptr); + void on_emergency_stop_heartbeat( + const tier4_external_api_msgs::msg::Heartbeat::ConstSharedPtr msg); - void onVelocity(const Odometry::ConstSharedPtr msg); - void onExternalCmd(const ExternalControlCommand::ConstSharedPtr cmd_ptr); - void onGearCommand(const GearCommand::ConstSharedPtr msg); - void onGateMode(const tier4_control_msgs::msg::GateMode::ConstSharedPtr msg); - void onEmergencyStopHeartbeat(const tier4_external_api_msgs::msg::Heartbeat::ConstSharedPtr msg); + Odometry::ConstSharedPtr current_velocity_ptr_{nullptr}; // [m/s] + GearCommand::ConstSharedPtr current_shift_cmd_{nullptr}; + GateMode::ConstSharedPtr current_gate_mode_{nullptr}; - std::shared_ptr current_velocity_ptr_; // [m/s] std::shared_ptr latest_emergency_stop_heartbeat_received_time_; std::shared_ptr latest_cmd_received_time_; - GearCommand::ConstSharedPtr current_shift_cmd_; - tier4_control_msgs::msg::GateMode::ConstSharedPtr current_gate_mode_; // Timer - void onTimer(); + void on_timer(); rclcpp::TimerBase::SharedPtr rate_check_timer_; // Parameter @@ -85,18 +90,18 @@ class ExternalCmdConverterNode : public rclcpp::Node // Diagnostics diagnostic_updater::Updater updater_{this}; - void checkTopicStatus(diagnostic_updater::DiagnosticStatusWrapper & stat); - void checkEmergencyStop(diagnostic_updater::DiagnosticStatusWrapper & stat); - bool checkEmergencyStopTopicTimeout(); - bool checkRemoteTopicRate(); + void check_topic_status(diagnostic_updater::DiagnosticStatusWrapper & stat); + void check_emergency_stop(diagnostic_updater::DiagnosticStatusWrapper & stat); + bool check_emergency_stop_topic_timeout(); + bool check_remote_topic_rate(); // Algorithm AccelMap accel_map_; BrakeMap brake_map_; bool acc_map_initialized_; - double calculateAcc(const ExternalControlCommand & cmd, const double vel); - double getShiftVelocitySign(const GearCommand & cmd); + double calculate_acc(const ExternalControlCommand & cmd, const double vel); + double get_shift_velocity_sign(const GearCommand & cmd); }; } // namespace external_cmd_converter diff --git a/vehicle/external_cmd_converter/package.xml b/vehicle/external_cmd_converter/package.xml index 513d73d2d39ff..72b0eb2706a3a 100644 --- a/vehicle/external_cmd_converter/package.xml +++ b/vehicle/external_cmd_converter/package.xml @@ -5,6 +5,7 @@ 0.1.0 The external_cmd_converter package Takamasa Horibe + Eiki Nagata Apache License 2.0 Takamasa Horibe diff --git a/vehicle/external_cmd_converter/src/node.cpp b/vehicle/external_cmd_converter/src/node.cpp index 21945bb9078b8..49b4d80371eed 100644 --- a/vehicle/external_cmd_converter/src/node.cpp +++ b/vehicle/external_cmd_converter/src/node.cpp @@ -26,20 +26,14 @@ ExternalCmdConverterNode::ExternalCmdConverterNode(const rclcpp::NodeOptions & n { using std::placeholders::_1; - pub_cmd_ = create_publisher("out/control_cmd", rclcpp::QoS{1}); - pub_current_cmd_ = + cmd_pub_ = create_publisher("out/control_cmd", rclcpp::QoS{1}); + current_cmd_pub_ = create_publisher("out/latest_external_control_cmd", rclcpp::QoS{1}); - sub_velocity_ = create_subscription( - "in/odometry", 1, std::bind(&ExternalCmdConverterNode::onVelocity, this, _1)); - sub_control_cmd_ = create_subscription( - "in/external_control_cmd", 1, std::bind(&ExternalCmdConverterNode::onExternalCmd, this, _1)); - sub_shift_cmd_ = create_subscription( - "in/shift_cmd", 1, std::bind(&ExternalCmdConverterNode::onGearCommand, this, _1)); - sub_gate_mode_ = create_subscription( - "in/current_gate_mode", 1, std::bind(&ExternalCmdConverterNode::onGateMode, this, _1)); - sub_emergency_stop_heartbeat_ = create_subscription( + control_cmd_sub_ = create_subscription( + "in/external_control_cmd", 1, std::bind(&ExternalCmdConverterNode::on_external_cmd, this, _1)); + emergency_stop_heartbeat_sub_ = create_subscription( "in/emergency_stop", 1, - std::bind(&ExternalCmdConverterNode::onEmergencyStopHeartbeat, this, _1)); + std::bind(&ExternalCmdConverterNode::on_emergency_stop_heartbeat, this, _1)); // Parameter ref_vel_gain_ = declare_parameter("ref_vel_gain"); @@ -52,7 +46,7 @@ ExternalCmdConverterNode::ExternalCmdConverterNode(const rclcpp::NodeOptions & n const auto period_ns = rclcpp::Rate(timer_rate).period(); rate_check_timer_ = rclcpp::create_timer( - this, get_clock(), period_ns, std::bind(&ExternalCmdConverterNode::onTimer, this)); + this, get_clock(), period_ns, std::bind(&ExternalCmdConverterNode::on_timer, this)); // Parameter for accel/brake map const std::string csv_path_accel_map = declare_parameter("csv_path_accel_map"); @@ -73,54 +67,49 @@ ExternalCmdConverterNode::ExternalCmdConverterNode(const rclcpp::NodeOptions & n // Diagnostics updater_.setHardwareID("external_cmd_converter"); - updater_.add("remote_control_topic_status", this, &ExternalCmdConverterNode::checkTopicStatus); + updater_.add("remote_control_topic_status", this, &ExternalCmdConverterNode::check_topic_status); // Set default values current_shift_cmd_ = std::make_shared(); } -void ExternalCmdConverterNode::onTimer() +void ExternalCmdConverterNode::on_timer() { updater_.force_update(); } -void ExternalCmdConverterNode::onVelocity(const Odometry::ConstSharedPtr msg) -{ - current_velocity_ptr_ = std::make_shared(msg->twist.twist.linear.x); -} - -void ExternalCmdConverterNode::onGearCommand(const GearCommand::ConstSharedPtr msg) -{ - current_shift_cmd_ = msg; -} - -void ExternalCmdConverterNode::onEmergencyStopHeartbeat( +void ExternalCmdConverterNode::on_emergency_stop_heartbeat( [[maybe_unused]] const tier4_external_api_msgs::msg::Heartbeat::ConstSharedPtr msg) { latest_emergency_stop_heartbeat_received_time_ = std::make_shared(this->now()); updater_.force_update(); } -void ExternalCmdConverterNode::onExternalCmd(const ExternalControlCommand::ConstSharedPtr cmd_ptr) +void ExternalCmdConverterNode::on_external_cmd(const ExternalControlCommand::ConstSharedPtr cmd_ptr) { // Echo back received command { auto current_cmd = *cmd_ptr; current_cmd.stamp = this->now(); - pub_current_cmd_->publish(current_cmd); + current_cmd_pub_->publish(current_cmd); } // Save received time for rate check latest_cmd_received_time_ = std::make_shared(this->now()); + // take data from subscribers + current_velocity_ptr_ = velocity_sub_.takeData(); + current_shift_cmd_ = shift_cmd_sub_.takeData(); + // Wait for input data - if (!current_velocity_ptr_ || !acc_map_initialized_) { + if (!current_velocity_ptr_ || !acc_map_initialized_ || !current_shift_cmd_) { return; } // Calculate reference velocity and acceleration - const double sign = getShiftVelocitySign(*current_shift_cmd_); - const double ref_acceleration = calculateAcc(*cmd_ptr, std::fabs(*current_velocity_ptr_)); + const double sign = get_shift_velocity_sign(*current_shift_cmd_); + const double ref_acceleration = + calculate_acc(*cmd_ptr, std::fabs(current_velocity_ptr_->twist.twist.linear.x)); if (ref_acceleration > 0.0 && sign == 0.0) { RCLCPP_WARN_THROTTLE( @@ -129,7 +118,8 @@ void ExternalCmdConverterNode::onExternalCmd(const ExternalControlCommand::Const ref_acceleration, current_shift_cmd_->command); } - double ref_velocity = *current_velocity_ptr_ + ref_acceleration * ref_vel_gain_ * sign; + double ref_velocity = + current_velocity_ptr_->twist.twist.linear.x + ref_acceleration * ref_vel_gain_ * sign; if (current_shift_cmd_->command == GearCommand::REVERSE) { ref_velocity = std::min(0.0, ref_velocity); } else if ( @@ -144,15 +134,16 @@ void ExternalCmdConverterNode::onExternalCmd(const ExternalControlCommand::Const // Publish ControlCommand autoware_control_msgs::msg::Control output; output.stamp = cmd_ptr->stamp; - output.lateral.steering_tire_angle = cmd_ptr->control.steering_angle; - output.lateral.steering_tire_rotation_rate = cmd_ptr->control.steering_angle_velocity; - output.longitudinal.velocity = ref_velocity; - output.longitudinal.acceleration = ref_acceleration; + output.lateral.steering_tire_angle = static_cast(cmd_ptr->control.steering_angle); + output.lateral.steering_tire_rotation_rate = + static_cast(cmd_ptr->control.steering_angle_velocity); + output.longitudinal.velocity = static_cast(ref_velocity); + output.longitudinal.acceleration = static_cast(ref_acceleration); - pub_cmd_->publish(output); + cmd_pub_->publish(output); } -double ExternalCmdConverterNode::calculateAcc(const ExternalControlCommand & cmd, const double vel) +double ExternalCmdConverterNode::calculate_acc(const ExternalControlCommand & cmd, const double vel) { const double desired_throttle = cmd.control.throttle; const double desired_brake = cmd.control.brake; @@ -168,7 +159,7 @@ double ExternalCmdConverterNode::calculateAcc(const ExternalControlCommand & cmd return ref_acceleration; } -double ExternalCmdConverterNode::getShiftVelocitySign(const GearCommand & cmd) +double ExternalCmdConverterNode::get_shift_velocity_sign(const GearCommand & cmd) { if (cmd.command == GearCommand::DRIVE) { return 1.0; @@ -183,15 +174,15 @@ double ExternalCmdConverterNode::getShiftVelocitySign(const GearCommand & cmd) return 0.0; } -void ExternalCmdConverterNode::checkTopicStatus(diagnostic_updater::DiagnosticStatusWrapper & stat) +void ExternalCmdConverterNode::check_topic_status( + diagnostic_updater::DiagnosticStatusWrapper & stat) { using diagnostic_msgs::msg::DiagnosticStatus; - DiagnosticStatus status; - if (!checkEmergencyStopTopicTimeout()) { + if (!check_emergency_stop_topic_timeout()) { status.level = DiagnosticStatus::ERROR; status.message = "emergency stop topic is timeout"; - } else if (!checkRemoteTopicRate()) { + } else if (!check_remote_topic_rate()) { status.level = DiagnosticStatus::ERROR; status.message = "low topic rate for remote vehicle_cmd"; } else { @@ -202,42 +193,26 @@ void ExternalCmdConverterNode::checkTopicStatus(diagnostic_updater::DiagnosticSt stat.summary(status.level, status.message); } -void ExternalCmdConverterNode::onGateMode( - const tier4_control_msgs::msg::GateMode::ConstSharedPtr msg) -{ - current_gate_mode_ = msg; -} - -bool ExternalCmdConverterNode::checkEmergencyStopTopicTimeout() +bool ExternalCmdConverterNode::check_emergency_stop_topic_timeout() { if (!latest_emergency_stop_heartbeat_received_time_) { - if (wait_for_first_topic_) { - return true; - } else { - return false; - } + return wait_for_first_topic_; } const auto duration = (this->now() - *latest_emergency_stop_heartbeat_received_time_); - if (duration.seconds() > emergency_stop_timeout_) { - return false; - } - - return true; + return duration.seconds() <= emergency_stop_timeout_; } -bool ExternalCmdConverterNode::checkRemoteTopicRate() +bool ExternalCmdConverterNode::check_remote_topic_rate() { + current_gate_mode_ = gate_mode_sub_.takeData(); + if (!current_gate_mode_) { return true; } if (!latest_cmd_received_time_) { - if (wait_for_first_topic_) { - return true; - } else { - return false; - } + return wait_for_first_topic_; } if (current_gate_mode_->data == tier4_control_msgs::msg::GateMode::EXTERNAL) { From b270096c12bc4badb68dcd89e10f9175c401e1e3 Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Mon, 10 Jun 2024 17:37:54 +0900 Subject: [PATCH 067/142] refactor(ndt scan matcher): apply static analysis (#7402) * to snake_case Signed-off-by: Yamato Ando * fix line length Signed-off-by: Yamato Ando * add nodiscard Signed-off-by: Yamato Ando * to non member func Signed-off-by: Yamato Ando * initilize param Signed-off-by: Yamato Ando * add header Signed-off-by: Yamato Ando * add const Signed-off-by: Yamato Ando * style(pre-commit): autofix * fix build error Signed-off-by: Yamato Ando --------- Signed-off-by: Yamato Ando Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: SakodaShintaro --- .../ndt_scan_matcher/diagnostics_module.hpp | 16 +- .../ndt_scan_matcher/hyper_parameters.hpp | 64 +++---- .../ndt_scan_matcher_core.hpp | 2 - .../src/diagnostics_module.cpp | 16 +- .../src/map_update_module.cpp | 42 ++--- .../src/ndt_scan_matcher_core.cpp | 162 +++++++++--------- .../ndt_scan_matcher/test/test_util.hpp | 5 + 7 files changed, 156 insertions(+), 151 deletions(-) diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp index 4f7b5eff6521b..6dfea386abaf8 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp @@ -27,14 +27,14 @@ class DiagnosticsModule public: DiagnosticsModule(rclcpp::Node * node, const std::string & diagnostic_name); void clear(); - void addKeyValue(const diagnostic_msgs::msg::KeyValue & key_value_msg); + void add_key_value(const diagnostic_msgs::msg::KeyValue & key_value_msg); template - void addKeyValue(const std::string & key, const T & value); - void updateLevelAndMessage(const int8_t level, const std::string & message); + void add_key_value(const std::string & key, const T & value); + void update_level_and_message(const int8_t level, const std::string & message); void publish(const rclcpp::Time & publish_time_stamp); private: - diagnostic_msgs::msg::DiagnosticArray createDiagnosticsArray( + [[nodiscard]] diagnostic_msgs::msg::DiagnosticArray create_diagnostics_array( const rclcpp::Time & publish_time_stamp) const; rclcpp::Clock::SharedPtr clock_; @@ -44,17 +44,17 @@ class DiagnosticsModule }; template -void DiagnosticsModule::addKeyValue(const std::string & key, const T & value) +void DiagnosticsModule::add_key_value(const std::string & key, const T & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; key_value.value = std::to_string(value); - addKeyValue(key_value); + add_key_value(key_value); } template <> -void DiagnosticsModule::addKeyValue(const std::string & key, const std::string & value); +void DiagnosticsModule::add_key_value(const std::string & key, const std::string & value); template <> -void DiagnosticsModule::addKeyValue(const std::string & key, const bool & value); +void DiagnosticsModule::add_key_value(const std::string & key, const bool & value); #endif // NDT_SCAN_MATCHER__DIAGNOSTICS_MODULE_HPP_ diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp index bc7bf1fe40d36..7002b4bf43a73 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp @@ -33,62 +33,62 @@ struct HyperParameters { struct Frame { - std::string base_frame; - std::string ndt_base_frame; - std::string map_frame; - } frame; + std::string base_frame{}; + std::string ndt_base_frame{}; + std::string map_frame{}; + } frame{}; struct SensorPoints { - double required_distance; - } sensor_points; + double required_distance{}; + } sensor_points{}; - pclomp::NdtParams ndt; - bool ndt_regularization_enable; + pclomp::NdtParams ndt{}; + bool ndt_regularization_enable{}; struct InitialPoseEstimation { - int64_t particles_num; - int64_t n_startup_trials; - } initial_pose_estimation; + int64_t particles_num{}; + int64_t n_startup_trials{}; + } initial_pose_estimation{}; struct Validation { - double lidar_topic_timeout_sec; - double initial_pose_timeout_sec; - double initial_pose_distance_tolerance_m; - double critical_upper_bound_exe_time_ms; - } validation; + double lidar_topic_timeout_sec{}; + double initial_pose_timeout_sec{}; + double initial_pose_distance_tolerance_m{}; + double critical_upper_bound_exe_time_ms{}; + } validation{}; struct ScoreEstimation { - ConvergedParamType converged_param_type; - double converged_param_transform_probability; - double converged_param_nearest_voxel_transformation_likelihood; + ConvergedParamType converged_param_type{}; + double converged_param_transform_probability{}; + double converged_param_nearest_voxel_transformation_likelihood{}; struct NoGroundPoints { - bool enable; - double z_margin_for_ground_removal; - } no_ground_points; - } score_estimation; + bool enable{}; + double z_margin_for_ground_removal{}; + } no_ground_points{}; + } score_estimation{}; struct Covariance { - std::array output_pose_covariance; + std::array output_pose_covariance{}; struct CovarianceEstimation { - bool enable; - std::vector initial_pose_offset_model; - } covariance_estimation; - } covariance; + bool enable{}; + std::vector initial_pose_offset_model{}; + } covariance_estimation{}; + } covariance{}; struct DynamicMapLoading { - double update_distance; - double map_radius; - double lidar_radius; - } dynamic_map_loading; + double update_distance{}; + double map_radius{}; + double lidar_radius{}; + } dynamic_map_loading{}; public: explicit HyperParameters(rclcpp::Node * node) diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp index 4f8042d106c75..cbd2797c57922 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp @@ -131,8 +131,6 @@ class NDTScanMatcher : public rclcpp::Node static int count_oscillation(const std::vector & result_pose_msg_array); - std::array rotate_covariance( - const std::array & src_covariance, const Eigen::Matrix3d & rotation) const; std::array estimate_covariance( const pclomp::NdtResult & ndt_result, const Eigen::Matrix4f & initial_pose_matrix, const rclcpp::Time & sensor_ros_time); diff --git a/localization/ndt_scan_matcher/src/diagnostics_module.cpp b/localization/ndt_scan_matcher/src/diagnostics_module.cpp index 1e08ebb89f51e..805ee676c5e04 100644 --- a/localization/ndt_scan_matcher/src/diagnostics_module.cpp +++ b/localization/ndt_scan_matcher/src/diagnostics_module.cpp @@ -41,7 +41,7 @@ void DiagnosticsModule::clear() diagnostics_status_msg_.message = ""; } -void DiagnosticsModule::addKeyValue(const diagnostic_msgs::msg::KeyValue & key_value_msg) +void DiagnosticsModule::add_key_value(const diagnostic_msgs::msg::KeyValue & key_value_msg) { auto it = std::find_if( std::begin(diagnostics_status_msg_.values), std::end(diagnostics_status_msg_.values), @@ -55,24 +55,24 @@ void DiagnosticsModule::addKeyValue(const diagnostic_msgs::msg::KeyValue & key_v } template <> -void DiagnosticsModule::addKeyValue(const std::string & key, const std::string & value) +void DiagnosticsModule::add_key_value(const std::string & key, const std::string & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; key_value.value = value; - addKeyValue(key_value); + add_key_value(key_value); } template <> -void DiagnosticsModule::addKeyValue(const std::string & key, const bool & value) +void DiagnosticsModule::add_key_value(const std::string & key, const bool & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; key_value.value = value ? "True" : "False"; - addKeyValue(key_value); + add_key_value(key_value); } -void DiagnosticsModule::updateLevelAndMessage(const int8_t level, const std::string & message) +void DiagnosticsModule::update_level_and_message(const int8_t level, const std::string & message) { if ((level > diagnostic_msgs::msg::DiagnosticStatus::OK)) { if (!diagnostics_status_msg_.message.empty()) { @@ -87,10 +87,10 @@ void DiagnosticsModule::updateLevelAndMessage(const int8_t level, const std::str void DiagnosticsModule::publish(const rclcpp::Time & publish_time_stamp) { - diagnostics_pub_->publish(createDiagnosticsArray(publish_time_stamp)); + diagnostics_pub_->publish(create_diagnostics_array(publish_time_stamp)); } -diagnostic_msgs::msg::DiagnosticArray DiagnosticsModule::createDiagnosticsArray( +diagnostic_msgs::msg::DiagnosticArray DiagnosticsModule::create_diagnostics_array( const rclcpp::Time & publish_time_stamp) const { diagnostic_msgs::msg::DiagnosticArray diagnostics_msg; diff --git a/localization/ndt_scan_matcher/src/map_update_module.cpp b/localization/ndt_scan_matcher/src/map_update_module.cpp index 40f0b1f4465fa..32e5a0f2a7c3c 100644 --- a/localization/ndt_scan_matcher/src/map_update_module.cpp +++ b/localization/ndt_scan_matcher/src/map_update_module.cpp @@ -53,23 +53,23 @@ void MapUpdateModule::callback_timer( std::unique_ptr & diagnostics_ptr) { // check is_activated - diagnostics_ptr->addKeyValue("is_activated", is_activated); + diagnostics_ptr->add_key_value("is_activated", is_activated); if (!is_activated) { std::stringstream message; message << "Node is not activated."; - diagnostics_ptr->updateLevelAndMessage( + diagnostics_ptr->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return; } // check is_set_last_update_position const bool is_set_last_update_position = (position != std::nullopt); - diagnostics_ptr->addKeyValue("is_set_last_update_position", is_set_last_update_position); + diagnostics_ptr->add_key_value("is_set_last_update_position", is_set_last_update_position); if (!is_set_last_update_position) { std::stringstream message; message << "Cannot find the reference position for map update." << "Please check if the EKF odometry is provided to NDT."; - diagnostics_ptr->updateLevelAndMessage( + diagnostics_ptr->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return; } @@ -92,11 +92,11 @@ bool MapUpdateModule::should_update_map( const double distance = std::hypot(dx, dy); // check distance_last_update_position_to_current_position - diagnostics_ptr->addKeyValue("distance_last_update_position_to_current_position", distance); + diagnostics_ptr->add_key_value("distance_last_update_position_to_current_position", distance); if (distance + param_.lidar_radius > param_.map_radius) { std::stringstream message; message << "Dynamic map loading is not keeping up."; - diagnostics_ptr->updateLevelAndMessage( + diagnostics_ptr->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); // If the map does not keep up with the current position, @@ -110,7 +110,7 @@ bool MapUpdateModule::should_update_map( void MapUpdateModule::update_map( const geometry_msgs::msg::Point & position, std::unique_ptr & diagnostics_ptr) { - diagnostics_ptr->addKeyValue("is_need_rebuild", need_rebuild_); + diagnostics_ptr->add_key_value("is_need_rebuild", need_rebuild_); // If the current position is super far from the previous loading position, // lock and rebuild ndt_ptr_ @@ -130,14 +130,14 @@ void MapUpdateModule::update_map( const bool updated = update_ndt(position, *ndt_ptr_, diagnostics_ptr); // check is_updated_map - diagnostics_ptr->addKeyValue("is_updated_map", updated); + diagnostics_ptr->add_key_value("is_updated_map", updated); if (!updated) { std::stringstream message; message << "update_ndt failed. If this happens with initial position estimation, make sure that" << "(1) the initial position matches the pcd map and (2) the map_loader is working " "properly."; - diagnostics_ptr->updateLevelAndMessage( + diagnostics_ptr->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); RCLCPP_ERROR_STREAM_THROTTLE(logger_, *clock_, 1000, message.str()); last_update_position_ = position; @@ -157,7 +157,7 @@ void MapUpdateModule::update_map( const bool updated = update_ndt(position, *secondary_ndt_ptr_, diagnostics_ptr); // check is_updated_map - diagnostics_ptr->addKeyValue("is_updated_map", updated); + diagnostics_ptr->add_key_value("is_updated_map", updated); if (!updated) { last_update_position_ = position; return; @@ -189,7 +189,7 @@ bool MapUpdateModule::update_ndt( const geometry_msgs::msg::Point & position, NdtType & ndt, std::unique_ptr & diagnostics_ptr) { - diagnostics_ptr->addKeyValue("maps_size_before", ndt.getCurrentMapIDs().size()); + diagnostics_ptr->add_key_value("maps_size_before", ndt.getCurrentMapIDs().size()); auto request = std::make_shared(); @@ -199,11 +199,11 @@ bool MapUpdateModule::update_ndt( request->cached_ids = ndt.getCurrentMapIDs(); while (!pcd_loader_client_->wait_for_service(std::chrono::seconds(1)) && rclcpp::ok()) { - diagnostics_ptr->addKeyValue("is_succeed_call_pcd_loader", false); + diagnostics_ptr->add_key_value("is_succeed_call_pcd_loader", false); std::stringstream message; message << "Waiting for pcd loader service. Check the pointcloud_map_loader."; - diagnostics_ptr->updateLevelAndMessage( + diagnostics_ptr->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -217,23 +217,23 @@ bool MapUpdateModule::update_ndt( while (status != std::future_status::ready) { // check is_succeed_call_pcd_loader if (!rclcpp::ok()) { - diagnostics_ptr->addKeyValue("is_succeed_call_pcd_loader", false); + diagnostics_ptr->add_key_value("is_succeed_call_pcd_loader", false); std::stringstream message; message << "pcd_loader service is not working."; - diagnostics_ptr->updateLevelAndMessage( + diagnostics_ptr->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; // No update } status = result.wait_for(std::chrono::seconds(1)); } - diagnostics_ptr->addKeyValue("is_succeed_call_pcd_loader", true); + diagnostics_ptr->add_key_value("is_succeed_call_pcd_loader", true); auto & maps_to_add = result.get()->new_pointcloud_with_ids; auto & map_ids_to_remove = result.get()->ids_to_remove; - diagnostics_ptr->addKeyValue("maps_to_add_size", maps_to_add.size()); - diagnostics_ptr->addKeyValue("maps_to_remove_size", map_ids_to_remove.size()); + diagnostics_ptr->add_key_value("maps_to_add_size", maps_to_add.size()); + diagnostics_ptr->add_key_value("maps_to_remove_size", map_ids_to_remove.size()); if (maps_to_add.empty() && map_ids_to_remove.empty()) { return false; // No update @@ -261,9 +261,9 @@ bool MapUpdateModule::update_ndt( const auto duration_micro_sec = std::chrono::duration_cast(exe_end_time - exe_start_time).count(); const auto exe_time = static_cast(duration_micro_sec) / 1000.0; - diagnostics_ptr->addKeyValue("map_update_execution_time", exe_time); - diagnostics_ptr->addKeyValue("maps_size_after", ndt.getCurrentMapIDs().size()); - diagnostics_ptr->addKeyValue("is_succeed_call_pcd_loader", true); + diagnostics_ptr->add_key_value("map_update_execution_time", exe_time); + diagnostics_ptr->add_key_value("maps_size_after", ndt.getCurrentMapIDs().size()); + diagnostics_ptr->add_key_value("is_succeed_call_pcd_loader", true); return true; // Updated } diff --git a/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp b/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp index 349f924019c28..e84d6709c3151 100644 --- a/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp +++ b/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp @@ -62,6 +62,28 @@ Eigen::Matrix2d find_rotation_matrix_aligning_covariance_to_principal_axes( throw std::runtime_error("Eigen solver failed. Return output_pose_covariance value."); } +std::array rotate_covariance( + const std::array & src_covariance, const Eigen::Matrix3d & rotation) +{ + std::array ret_covariance = src_covariance; + + Eigen::Matrix3d src_cov; + src_cov << src_covariance[0], src_covariance[1], src_covariance[2], src_covariance[6], + src_covariance[7], src_covariance[8], src_covariance[12], src_covariance[13], + src_covariance[14]; + + Eigen::Matrix3d ret_cov; + ret_cov = rotation * src_cov * rotation.transpose(); + + for (Eigen::Index i = 0; i < 3; ++i) { + ret_covariance[i] = ret_cov(0, i); + ret_covariance[i + 6] = ret_cov(1, i); + ret_covariance[i + 12] = ret_cov(2, i); + } + + return ret_covariance; +} + NDTScanMatcher::NDTScanMatcher(const rclcpp::NodeOptions & options) : Node("ndt_scan_matcher", options), tf2_broadcaster_(*this), @@ -197,7 +219,7 @@ void NDTScanMatcher::callback_timer() diagnostics_map_update_->clear(); - diagnostics_map_update_->addKeyValue("timer_callback_time_stamp", ros_time_now.nanoseconds()); + diagnostics_map_update_->add_key_value("timer_callback_time_stamp", ros_time_now.nanoseconds()); map_update_module_->callback_timer(is_activated_, latest_ekf_position_, diagnostics_map_update_); @@ -217,16 +239,16 @@ void NDTScanMatcher::callback_initial_pose( void NDTScanMatcher::callback_initial_pose_main( const geometry_msgs::msg::PoseWithCovarianceStamped::ConstSharedPtr initial_pose_msg_ptr) { - diagnostics_initial_pose_->addKeyValue( + diagnostics_initial_pose_->add_key_value( "topic_time_stamp", static_cast(initial_pose_msg_ptr->header.stamp).nanoseconds()); // check is_activated - diagnostics_initial_pose_->addKeyValue("is_activated", static_cast(is_activated_)); + diagnostics_initial_pose_->add_key_value("is_activated", static_cast(is_activated_)); if (!is_activated_) { std::stringstream message; message << "Node is not activated."; - diagnostics_initial_pose_->updateLevelAndMessage( + diagnostics_initial_pose_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return; } @@ -234,13 +256,13 @@ void NDTScanMatcher::callback_initial_pose_main( // check is_expected_frame_id const bool is_expected_frame_id = (initial_pose_msg_ptr->header.frame_id == param_.frame.map_frame); - diagnostics_initial_pose_->addKeyValue("is_expected_frame_id", is_expected_frame_id); + diagnostics_initial_pose_->add_key_value("is_expected_frame_id", is_expected_frame_id); if (!is_expected_frame_id) { std::stringstream message; message << "Received initial pose message with frame_id " << initial_pose_msg_ptr->header.frame_id << ", but expected " << param_.frame.map_frame << ". Please check the frame_id in the input topic and ensure it is correct."; - diagnostics_initial_pose_->updateLevelAndMessage( + diagnostics_initial_pose_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); return; } @@ -259,7 +281,7 @@ void NDTScanMatcher::callback_regularization_pose( { diagnostics_regularization_pose_->clear(); - diagnostics_regularization_pose_->addKeyValue( + diagnostics_regularization_pose_->add_key_value( "topic_time_stamp", static_cast(pose_conv_msg_ptr->header.stamp).nanoseconds()); regularization_pose_buffer_->push_back(pose_conv_msg_ptr); @@ -282,11 +304,11 @@ void NDTScanMatcher::callback_sensor_points( const size_t error_skipping_publish_num = 5; skipping_publish_num = ((is_succeed_scan_matching || !is_activated_) ? 0 : (skipping_publish_num + 1)); - diagnostics_scan_points_->addKeyValue("skipping_publish_num", skipping_publish_num); + diagnostics_scan_points_->add_key_value("skipping_publish_num", skipping_publish_num); if (skipping_publish_num >= error_skipping_publish_num) { std::stringstream message; message << "skipping_publish_num exceed limit (" << skipping_publish_num << " times)."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } @@ -300,15 +322,15 @@ bool NDTScanMatcher::callback_sensor_points_main( // check topic_time_stamp const rclcpp::Time sensor_ros_time = sensor_points_msg_in_sensor_frame->header.stamp; - diagnostics_scan_points_->addKeyValue("topic_time_stamp", sensor_ros_time.nanoseconds()); + diagnostics_scan_points_->add_key_value("topic_time_stamp", sensor_ros_time.nanoseconds()); // check sensor_points_size const size_t sensor_points_size = sensor_points_msg_in_sensor_frame->width; - diagnostics_scan_points_->addKeyValue("sensor_points_size", sensor_points_size); + diagnostics_scan_points_->add_key_value("sensor_points_size", sensor_points_size); if (sensor_points_size == 0) { std::stringstream message; message << "Sensor points is empty."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -316,14 +338,14 @@ bool NDTScanMatcher::callback_sensor_points_main( // check sensor_points_delay_time_sec const double sensor_points_delay_time_sec = (this->now() - sensor_points_msg_in_sensor_frame->header.stamp).seconds(); - diagnostics_scan_points_->addKeyValue( + diagnostics_scan_points_->add_key_value( "sensor_points_delay_time_sec", sensor_points_delay_time_sec); if (sensor_points_delay_time_sec > param_.validation.lidar_topic_timeout_sec) { std::stringstream message; message << "sensor points is experiencing latency." << "The delay time is " << sensor_points_delay_time_sec << "[sec] " << "(the tolerance is " << param_.validation.lidar_topic_timeout_sec << "[sec])."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); // If the delay time of the LiDAR topic exceeds the delay compensation time of ekf_localizer, @@ -352,13 +374,13 @@ bool NDTScanMatcher::callback_sensor_points_main( std::stringstream message; message << ex.what() << ". Please publish TF " << sensor_frame << " to " << param_.frame.base_frame; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); RCLCPP_ERROR_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); - diagnostics_scan_points_->addKeyValue("is_succeed_transform_sensor_points", false); + diagnostics_scan_points_->add_key_value("is_succeed_transform_sensor_points", false); return false; } - diagnostics_scan_points_->addKeyValue("is_succeed_transform_sensor_points", true); + diagnostics_scan_points_->add_key_value("is_succeed_transform_sensor_points", true); // check sensor_points_max_distance double max_distance = 0.0; @@ -367,12 +389,12 @@ bool NDTScanMatcher::callback_sensor_points_main( max_distance = std::max(max_distance, distance); } - diagnostics_scan_points_->addKeyValue("sensor_points_max_distance", max_distance); + diagnostics_scan_points_->add_key_value("sensor_points_max_distance", max_distance); if (max_distance < param_.sensor_points.required_distance) { std::stringstream message; message << "Max distance of sensor points = " << std::fixed << std::setprecision(3) << max_distance << " [m] < " << param_.sensor_points.required_distance << " [m]"; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -384,11 +406,11 @@ bool NDTScanMatcher::callback_sensor_points_main( ndt_ptr_->setInputSource(sensor_points_in_baselink_frame); // check is_activated - diagnostics_scan_points_->addKeyValue("is_activated", static_cast(is_activated_)); + diagnostics_scan_points_->add_key_value("is_activated", static_cast(is_activated_)); if (!is_activated_) { std::stringstream message; message << "Node is not activated."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -399,12 +421,12 @@ bool NDTScanMatcher::callback_sensor_points_main( // check is_succeed_interpolate_initial_pose const bool is_succeed_interpolate_initial_pose = (interpolation_result_opt != std::nullopt); - diagnostics_scan_points_->addKeyValue( + diagnostics_scan_points_->add_key_value( "is_succeed_interpolate_initial_pose", is_succeed_interpolate_initial_pose); if (!is_succeed_interpolate_initial_pose) { std::stringstream message; message << "Couldn't interpolate pose. Please check the initial pose topic"; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -420,11 +442,11 @@ bool NDTScanMatcher::callback_sensor_points_main( // check is_set_map_points const bool is_set_map_points = (ndt_ptr_->getInputTarget() != nullptr); - diagnostics_scan_points_->addKeyValue("is_set_map_points", is_set_map_points); + diagnostics_scan_points_->add_key_value("is_set_map_points", is_set_map_points); if (!is_set_map_points) { std::stringstream message; message << "Map points is not set."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return false; } @@ -444,31 +466,33 @@ bool NDTScanMatcher::callback_sensor_points_main( } // check iteration_num - diagnostics_scan_points_->addKeyValue("iteration_num", ndt_result.iteration_num); + diagnostics_scan_points_->add_key_value("iteration_num", ndt_result.iteration_num); const bool is_ok_iteration_num = (ndt_result.iteration_num < ndt_ptr_->getMaximumIterations()); if (!is_ok_iteration_num) { std::stringstream message; message << "The number of iterations has reached its upper limit. The number of iterations: " << ndt_result.iteration_num << ", Limit: " << ndt_ptr_->getMaximumIterations() << "."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } // check local_optimal_solution_oscillation_num constexpr int oscillation_num_threshold = 10; const int oscillation_num = count_oscillation(transformation_msg_array); - diagnostics_scan_points_->addKeyValue("local_optimal_solution_oscillation_num", oscillation_num); + diagnostics_scan_points_->add_key_value( + "local_optimal_solution_oscillation_num", oscillation_num); const bool is_local_optimal_solution_oscillation = (oscillation_num > oscillation_num_threshold); if (is_local_optimal_solution_oscillation) { std::stringstream message; message << "There is a possibility of oscillation in a local minimum"; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } // check score - diagnostics_scan_points_->addKeyValue("transform_probability", ndt_result.transform_probability); - diagnostics_scan_points_->addKeyValue( + diagnostics_scan_points_->add_key_value( + "transform_probability", ndt_result.transform_probability); + diagnostics_scan_points_->add_key_value( "nearest_voxel_transformation_likelihood", ndt_result.nearest_voxel_transformation_likelihood); double score = 0.0; double score_threshold = 0.0; @@ -484,7 +508,7 @@ bool NDTScanMatcher::callback_sensor_points_main( } else { std::stringstream message; message << "Unknown converged param type. Please check `score_estimation.converged_param_type`"; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); return false; } @@ -497,12 +521,12 @@ bool NDTScanMatcher::callback_sensor_points_main( message << "transform_probability_array size is not equal to iteration_num + 1." << " transform_probability_array size: " << tp_array.size() << ", iteration_num: " << ndt_result.iteration_num; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } else { const float diff = tp_array.back() - tp_array.front(); - diagnostics_scan_points_->addKeyValue("transform_probability_diff", diff); - diagnostics_scan_points_->addKeyValue("transform_probability_before", tp_array.front()); + diagnostics_scan_points_->add_key_value("transform_probability_diff", diff); + diagnostics_scan_points_->add_key_value("transform_probability_before", tp_array.front()); } const std::vector & nvtl_array = ndt_result.nearest_voxel_transformation_likelihood_array; if (static_cast(nvtl_array.size()) != ndt_result.iteration_num + 1) { @@ -512,12 +536,12 @@ bool NDTScanMatcher::callback_sensor_points_main( << "nearest_voxel_transformation_likelihood_array size is not equal to iteration_num + 1." << " nearest_voxel_transformation_likelihood_array size: " << nvtl_array.size() << ", iteration_num: " << ndt_result.iteration_num; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } else { const float diff = nvtl_array.back() - nvtl_array.front(); - diagnostics_scan_points_->addKeyValue("nearest_voxel_transformation_likelihood_diff", diff); - diagnostics_scan_points_->addKeyValue( + diagnostics_scan_points_->add_key_value("nearest_voxel_transformation_likelihood_diff", diff); + diagnostics_scan_points_->add_key_value( "nearest_voxel_transformation_likelihood_before", nvtl_array.front()); } @@ -526,7 +550,7 @@ bool NDTScanMatcher::callback_sensor_points_main( std::stringstream message; message << "Score is below the threshold. Score: " << score << ", Threshold: " << score_threshold; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); RCLCPP_WARN_STREAM(this->get_logger(), message.str()); } @@ -553,13 +577,13 @@ bool NDTScanMatcher::callback_sensor_points_main( // check distance_initial_to_result const auto distance_initial_to_result = static_cast( norm(interpolation_result.interpolated_pose.pose.pose.position, result_pose_msg.position)); - diagnostics_scan_points_->addKeyValue("distance_initial_to_result", distance_initial_to_result); + diagnostics_scan_points_->add_key_value("distance_initial_to_result", distance_initial_to_result); const double warn_distance_initial_to_result = 3.0; if (distance_initial_to_result > warn_distance_initial_to_result) { std::stringstream message; message << "distance_initial_to_result is too large (" << distance_initial_to_result << " [m])."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } @@ -568,11 +592,11 @@ bool NDTScanMatcher::callback_sensor_points_main( const auto duration_micro_sec = std::chrono::duration_cast(exe_end_time - exe_start_time).count(); const auto exe_time = static_cast(duration_micro_sec) / 1000.0f; - diagnostics_scan_points_->addKeyValue("execution_time", exe_time); + diagnostics_scan_points_->add_key_value("execution_time", exe_time); if (exe_time > param_.validation.critical_upper_bound_exe_time_ms) { std::stringstream message; message << "NDT exe time is too long (took " << exe_time << " [ms])."; - diagnostics_scan_points_->updateLevelAndMessage( + diagnostics_scan_points_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } @@ -644,7 +668,7 @@ void NDTScanMatcher::transform_sensor_measurement( geometry_msgs::msg::TransformStamped transform; try { transform = tf2_buffer_.lookupTransform(target_frame, source_frame, tf2::TimePointZero); - } catch (tf2::TransformException & ex) { + } catch (const tf2::TransformException & ex) { throw; } @@ -785,28 +809,6 @@ int NDTScanMatcher::count_oscillation( return max_oscillation_cnt; } -std::array NDTScanMatcher::rotate_covariance( - const std::array & src_covariance, const Eigen::Matrix3d & rotation) const -{ - std::array ret_covariance = src_covariance; - - Eigen::Matrix3d src_cov; - src_cov << src_covariance[0], src_covariance[1], src_covariance[2], src_covariance[6], - src_covariance[7], src_covariance[8], src_covariance[12], src_covariance[13], - src_covariance[14]; - - Eigen::Matrix3d ret_cov; - ret_cov = rotation * src_cov * rotation.transpose(); - - for (Eigen::Index i = 0; i < 3; ++i) { - ret_covariance[i] = ret_cov(0, i); - ret_covariance[i + 6] = ret_cov(1, i); - ret_covariance[i + 12] = ret_cov(2, i); - } - - return ret_covariance; -} - std::array NDTScanMatcher::estimate_covariance( const pclomp::NdtResult & ndt_result, const Eigen::Matrix4f & initial_pose_matrix, const rclcpp::Time & sensor_ros_time) @@ -906,7 +908,7 @@ void NDTScanMatcher::service_trigger_node( const rclcpp::Time ros_time_now = this->now(); diagnostics_trigger_node_->clear(); - diagnostics_trigger_node_->addKeyValue("service_call_time_stamp", ros_time_now.nanoseconds()); + diagnostics_trigger_node_->add_key_value("service_call_time_stamp", ros_time_now.nanoseconds()); is_activated_ = req->data; if (is_activated_) { @@ -914,8 +916,8 @@ void NDTScanMatcher::service_trigger_node( } res->success = true; - diagnostics_trigger_node_->addKeyValue("is_activated", static_cast(is_activated_)); - diagnostics_trigger_node_->addKeyValue("is_succeed_service", res->success); + diagnostics_trigger_node_->add_key_value("is_activated", static_cast(is_activated_)); + diagnostics_trigger_node_->add_key_value("is_succeed_service", res->success); diagnostics_trigger_node_->publish(ros_time_now); } @@ -927,17 +929,17 @@ void NDTScanMatcher::service_ndt_align( diagnostics_ndt_align_->clear(); - diagnostics_ndt_align_->addKeyValue("service_call_time_stamp", ros_time_now.nanoseconds()); + diagnostics_ndt_align_->add_key_value("service_call_time_stamp", ros_time_now.nanoseconds()); service_ndt_align_main(req, res); // check is_succeed_service bool is_succeed_service = res->success; - diagnostics_ndt_align_->addKeyValue("is_succeed_service", is_succeed_service); + diagnostics_ndt_align_->add_key_value("is_succeed_service", is_succeed_service); if (!is_succeed_service) { std::stringstream message; message << "ndt_align_service is failed."; - diagnostics_ndt_align_->updateLevelAndMessage( + diagnostics_ndt_align_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } @@ -960,17 +962,17 @@ void NDTScanMatcher::service_ndt_align_main( // "gnss_link" instead of "map". The ndt_align is designed to return identity when this issue // occurs. However, in the future, converting to a non-existent frame_id should be prohibited. - diagnostics_ndt_align_->addKeyValue("is_succeed_transform_initial_pose", false); + diagnostics_ndt_align_->add_key_value("is_succeed_transform_initial_pose", false); std::stringstream message; message << "Please publish TF " << target_frame.c_str() << " to " << source_frame.c_str(); - diagnostics_ndt_align_->updateLevelAndMessage( + diagnostics_ndt_align_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); RCLCPP_ERROR_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); res->success = false; return; } - diagnostics_ndt_align_->addKeyValue("is_succeed_transform_initial_pose", true); + diagnostics_ndt_align_->add_key_value("is_succeed_transform_initial_pose", true); // transform pose_frame to map_frame const auto initial_pose_msg_in_map_frame = transform(req->pose_with_covariance, transform_s2t); @@ -982,11 +984,11 @@ void NDTScanMatcher::service_ndt_align_main( // check is_set_map_points bool is_set_map_points = (ndt_ptr_->getInputTarget() != nullptr); - diagnostics_ndt_align_->addKeyValue("is_set_map_points", is_set_map_points); + diagnostics_ndt_align_->add_key_value("is_set_map_points", is_set_map_points); if (!is_set_map_points) { std::stringstream message; message << "No InputTarget. Please check the map file and the map_loader service"; - diagnostics_ndt_align_->updateLevelAndMessage( + diagnostics_ndt_align_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); RCLCPP_WARN_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); res->success = false; @@ -995,11 +997,11 @@ void NDTScanMatcher::service_ndt_align_main( // check is_set_sensor_points bool is_set_sensor_points = (ndt_ptr_->getInputSource() != nullptr); - diagnostics_ndt_align_->addKeyValue("is_set_sensor_points", is_set_sensor_points); + diagnostics_ndt_align_->add_key_value("is_set_sensor_points", is_set_sensor_points); if (!is_set_sensor_points) { std::stringstream message; message << "No InputSource. Please check the input lidar topic"; - diagnostics_ndt_align_->updateLevelAndMessage( + diagnostics_ndt_align_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); RCLCPP_WARN_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); res->success = false; @@ -1107,7 +1109,7 @@ geometry_msgs::msg::PoseWithCovarianceStamped NDTScanMatcher::align_pose( result_pose_with_cov_msg.pose.pose = best_particle_ptr->result_pose; output_pose_with_cov_to_log(get_logger(), "align_pose_output", result_pose_with_cov_msg); - diagnostics_ndt_align_->addKeyValue("best_particle_score", best_particle_ptr->score); + diagnostics_ndt_align_->add_key_value("best_particle_score", best_particle_ptr->score); return result_pose_with_cov_msg; } diff --git a/localization/ndt_scan_matcher/test/test_util.hpp b/localization/ndt_scan_matcher/test/test_util.hpp index 2f78827abf891..dbf055d3c95d3 100644 --- a/localization/ndt_scan_matcher/test/test_util.hpp +++ b/localization/ndt_scan_matcher/test/test_util.hpp @@ -15,8 +15,13 @@ #ifndef TEST_UTIL_HPP_ #define TEST_UTIL_HPP_ +#include +#include + +#include #include #include +#include inline pcl::PointCloud make_sample_half_cubic_pcd() { From a6206d1ea5393f59583adcc72f8037a26abed267 Mon Sep 17 00:00:00 2001 From: Masaki Baba Date: Mon, 10 Jun 2024 17:44:49 +0900 Subject: [PATCH 068/142] refactor(localization_error_monitor): apply static analysis (#7363) * refactor based on linter Signed-off-by: a-maumau * style(pre-commit): autofix --------- Signed-off-by: a-maumau Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../diagnostics.hpp | 6 +-- .../localization_error_monitor.hpp | 7 ++- .../src/diagnostics.cpp | 6 +-- .../src/localization_error_monitor.cpp | 18 ++++---- .../test/test_diagnostics.cpp | 44 +++++++++---------- 5 files changed, 40 insertions(+), 41 deletions(-) diff --git a/localization/localization_error_monitor/include/localization_error_monitor/diagnostics.hpp b/localization/localization_error_monitor/include/localization_error_monitor/diagnostics.hpp index 4fe4e5a5aac14..b1da87128bee5 100644 --- a/localization/localization_error_monitor/include/localization_error_monitor/diagnostics.hpp +++ b/localization/localization_error_monitor/include/localization_error_monitor/diagnostics.hpp @@ -20,12 +20,12 @@ #include #include -diagnostic_msgs::msg::DiagnosticStatus checkLocalizationAccuracy( +diagnostic_msgs::msg::DiagnosticStatus check_localization_accuracy( const double ellipse_size, const double warn_ellipse_size, const double error_ellipse_size); -diagnostic_msgs::msg::DiagnosticStatus checkLocalizationAccuracyLateralDirection( +diagnostic_msgs::msg::DiagnosticStatus check_localization_accuracy_lateral_direction( const double ellipse_size, const double warn_ellipse_size, const double error_ellipse_size); -diagnostic_msgs::msg::DiagnosticStatus mergeDiagnosticStatus( +diagnostic_msgs::msg::DiagnosticStatus merge_diagnostic_status( const std::vector & stat_array); #endif // LOCALIZATION_ERROR_MONITOR__DIAGNOSTICS_HPP_ diff --git a/localization/localization_error_monitor/include/localization_error_monitor/localization_error_monitor.hpp b/localization/localization_error_monitor/include/localization_error_monitor/localization_error_monitor.hpp index 6016677d88136..53f243520742f 100644 --- a/localization/localization_error_monitor/include/localization_error_monitor/localization_error_monitor.hpp +++ b/localization/localization_error_monitor/include/localization_error_monitor/localization_error_monitor.hpp @@ -52,13 +52,12 @@ class LocalizationErrorMonitor : public rclcpp::Node double warn_ellipse_size_lateral_direction_; Ellipse ellipse_; - void onOdom(nav_msgs::msg::Odometry::ConstSharedPtr input_msg); - visualization_msgs::msg::Marker createEllipseMarker( + void on_odom(nav_msgs::msg::Odometry::ConstSharedPtr input_msg); + visualization_msgs::msg::Marker create_ellipse_marker( const Ellipse & ellipse, nav_msgs::msg::Odometry::ConstSharedPtr odom); - double measureSizeEllipseAlongBodyFrame(const Eigen::Matrix2d & Pinv, double theta); + static double measure_size_ellipse_along_body_frame(const Eigen::Matrix2d & Pinv, double theta); public: explicit LocalizationErrorMonitor(const rclcpp::NodeOptions & options); - ~LocalizationErrorMonitor() = default; }; #endif // LOCALIZATION_ERROR_MONITOR__LOCALIZATION_ERROR_MONITOR_HPP_ diff --git a/localization/localization_error_monitor/src/diagnostics.cpp b/localization/localization_error_monitor/src/diagnostics.cpp index 375fccfa06787..e6b9da8fc4a97 100644 --- a/localization/localization_error_monitor/src/diagnostics.cpp +++ b/localization/localization_error_monitor/src/diagnostics.cpp @@ -17,7 +17,7 @@ #include #include -diagnostic_msgs::msg::DiagnosticStatus checkLocalizationAccuracy( +diagnostic_msgs::msg::DiagnosticStatus check_localization_accuracy( const double ellipse_size, const double warn_ellipse_size, const double error_ellipse_size) { diagnostic_msgs::msg::DiagnosticStatus stat; @@ -41,7 +41,7 @@ diagnostic_msgs::msg::DiagnosticStatus checkLocalizationAccuracy( return stat; } -diagnostic_msgs::msg::DiagnosticStatus checkLocalizationAccuracyLateralDirection( +diagnostic_msgs::msg::DiagnosticStatus check_localization_accuracy_lateral_direction( const double ellipse_size, const double warn_ellipse_size, const double error_ellipse_size) { diagnostic_msgs::msg::DiagnosticStatus stat; @@ -66,7 +66,7 @@ diagnostic_msgs::msg::DiagnosticStatus checkLocalizationAccuracyLateralDirection } // The highest level within the stat_array will be reflected in the merged_stat. -diagnostic_msgs::msg::DiagnosticStatus mergeDiagnosticStatus( +diagnostic_msgs::msg::DiagnosticStatus merge_diagnostic_status( const std::vector & stat_array) { diagnostic_msgs::msg::DiagnosticStatus merged_stat; diff --git a/localization/localization_error_monitor/src/localization_error_monitor.cpp b/localization/localization_error_monitor/src/localization_error_monitor.cpp index 7a1cd0b213c39..04bb37a85e41b 100644 --- a/localization/localization_error_monitor/src/localization_error_monitor.cpp +++ b/localization/localization_error_monitor/src/localization_error_monitor.cpp @@ -45,7 +45,7 @@ LocalizationErrorMonitor::LocalizationErrorMonitor(const rclcpp::NodeOptions & o this->declare_parameter("warn_ellipse_size_lateral_direction"); odom_sub_ = this->create_subscription( - "input/odom", 1, std::bind(&LocalizationErrorMonitor::onOdom, this, std::placeholders::_1)); + "input/odom", 1, std::bind(&LocalizationErrorMonitor::on_odom, this, std::placeholders::_1)); // QoS setup rclcpp::QoS durable_qos(1); @@ -58,7 +58,7 @@ LocalizationErrorMonitor::LocalizationErrorMonitor(const rclcpp::NodeOptions & o logger_configure_ = std::make_unique(this); } -visualization_msgs::msg::Marker LocalizationErrorMonitor::createEllipseMarker( +visualization_msgs::msg::Marker LocalizationErrorMonitor::create_ellipse_marker( const Ellipse & ellipse, nav_msgs::msg::Odometry::ConstSharedPtr odom) { tf2::Quaternion quat; @@ -85,7 +85,7 @@ visualization_msgs::msg::Marker LocalizationErrorMonitor::createEllipseMarker( return marker; } -void LocalizationErrorMonitor::onOdom(nav_msgs::msg::Odometry::ConstSharedPtr input_msg) +void LocalizationErrorMonitor::on_odom(nav_msgs::msg::Odometry::ConstSharedPtr input_msg) { // create xy covariance (2x2 matrix) // input geometry_msgs::PoseWithCovariance contain 6x6 matrix @@ -110,21 +110,21 @@ void LocalizationErrorMonitor::onOdom(nav_msgs::msg::Odometry::ConstSharedPtr in ellipse_.P = xy_covariance; const double yaw_vehicle = tf2::getYaw(input_msg->pose.pose.orientation); ellipse_.size_lateral_direction = - scale_ * measureSizeEllipseAlongBodyFrame(ellipse_.P.inverse(), yaw_vehicle); + scale_ * measure_size_ellipse_along_body_frame(ellipse_.P.inverse(), yaw_vehicle); - const auto ellipse_marker = createEllipseMarker(ellipse_, input_msg); + const auto ellipse_marker = create_ellipse_marker(ellipse_, input_msg); ellipse_marker_pub_->publish(ellipse_marker); // diagnostics std::vector diag_status_array; diag_status_array.push_back( - checkLocalizationAccuracy(ellipse_.long_radius, warn_ellipse_size_, error_ellipse_size_)); - diag_status_array.push_back(checkLocalizationAccuracyLateralDirection( + check_localization_accuracy(ellipse_.long_radius, warn_ellipse_size_, error_ellipse_size_)); + diag_status_array.push_back(check_localization_accuracy_lateral_direction( ellipse_.size_lateral_direction, warn_ellipse_size_lateral_direction_, error_ellipse_size_lateral_direction_)); diagnostic_msgs::msg::DiagnosticStatus diag_merged_status; - diag_merged_status = mergeDiagnosticStatus(diag_status_array); + diag_merged_status = merge_diagnostic_status(diag_status_array); diag_merged_status.name = "localization: " + std::string(this->get_name()); diag_merged_status.hardware_id = this->get_name(); @@ -134,7 +134,7 @@ void LocalizationErrorMonitor::onOdom(nav_msgs::msg::Odometry::ConstSharedPtr in diag_pub_->publish(diag_msg); } -double LocalizationErrorMonitor::measureSizeEllipseAlongBodyFrame( +double LocalizationErrorMonitor::measure_size_ellipse_along_body_frame( const Eigen::Matrix2d & Pinv, const double theta) { Eigen::MatrixXd e(2, 1); diff --git a/localization/localization_error_monitor/test/test_diagnostics.cpp b/localization/localization_error_monitor/test/test_diagnostics.cpp index 7b7e8aaab4ed9..12515687e7a98 100644 --- a/localization/localization_error_monitor/test/test_diagnostics.cpp +++ b/localization/localization_error_monitor/test/test_diagnostics.cpp @@ -24,23 +24,23 @@ TEST(TestLocalizationErrorMonitorDiagnostics, CheckLocalizationAccuracy) const double error_ellipse_size = 1.0; double ellipse_size = 0.0; - stat = checkLocalizationAccuracy(ellipse_size, warn_ellipse_size, error_ellipse_size); + stat = check_localization_accuracy(ellipse_size, warn_ellipse_size, error_ellipse_size); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); ellipse_size = 0.7; - stat = checkLocalizationAccuracy(ellipse_size, warn_ellipse_size, error_ellipse_size); + stat = check_localization_accuracy(ellipse_size, warn_ellipse_size, error_ellipse_size); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); ellipse_size = 0.8; - stat = checkLocalizationAccuracy(ellipse_size, warn_ellipse_size, error_ellipse_size); + stat = check_localization_accuracy(ellipse_size, warn_ellipse_size, error_ellipse_size); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); ellipse_size = 0.9; - stat = checkLocalizationAccuracy(ellipse_size, warn_ellipse_size, error_ellipse_size); + stat = check_localization_accuracy(ellipse_size, warn_ellipse_size, error_ellipse_size); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); ellipse_size = 1.0; - stat = checkLocalizationAccuracy(ellipse_size, warn_ellipse_size, error_ellipse_size); + stat = check_localization_accuracy(ellipse_size, warn_ellipse_size, error_ellipse_size); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::ERROR); } @@ -52,28 +52,28 @@ TEST(TestLocalizationErrorMonitorDiagnostics, CheckLocalizationAccuracyLateralDi const double error_ellipse_size = 0.3; double ellipse_size = 0.0; - stat = - checkLocalizationAccuracyLateralDirection(ellipse_size, warn_ellipse_size, error_ellipse_size); + stat = check_localization_accuracy_lateral_direction( + ellipse_size, warn_ellipse_size, error_ellipse_size); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); ellipse_size = 0.24; - stat = - checkLocalizationAccuracyLateralDirection(ellipse_size, warn_ellipse_size, error_ellipse_size); + stat = check_localization_accuracy_lateral_direction( + ellipse_size, warn_ellipse_size, error_ellipse_size); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); ellipse_size = 0.25; - stat = - checkLocalizationAccuracyLateralDirection(ellipse_size, warn_ellipse_size, error_ellipse_size); + stat = check_localization_accuracy_lateral_direction( + ellipse_size, warn_ellipse_size, error_ellipse_size); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); ellipse_size = 0.29; - stat = - checkLocalizationAccuracyLateralDirection(ellipse_size, warn_ellipse_size, error_ellipse_size); + stat = check_localization_accuracy_lateral_direction( + ellipse_size, warn_ellipse_size, error_ellipse_size); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); ellipse_size = 0.3; - stat = - checkLocalizationAccuracyLateralDirection(ellipse_size, warn_ellipse_size, error_ellipse_size); + stat = check_localization_accuracy_lateral_direction( + ellipse_size, warn_ellipse_size, error_ellipse_size); EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::ERROR); } @@ -86,7 +86,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "OK"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::OK; stat_array.at(1).message = "OK"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); EXPECT_EQ(merged_stat.message, "OK"); @@ -94,7 +94,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "WARN0"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::OK; stat_array.at(1).message = "OK"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); EXPECT_EQ(merged_stat.message, "WARN0"); @@ -102,7 +102,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "OK"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::WARN; stat_array.at(1).message = "WARN1"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); EXPECT_EQ(merged_stat.message, "WARN1"); @@ -110,7 +110,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "WARN0"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::WARN; stat_array.at(1).message = "WARN1"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); EXPECT_EQ(merged_stat.message, "WARN0; WARN1"); @@ -118,7 +118,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "OK"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::ERROR; stat_array.at(1).message = "ERROR1"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::ERROR); EXPECT_EQ(merged_stat.message, "ERROR1"); @@ -126,7 +126,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "WARN0"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::ERROR; stat_array.at(1).message = "ERROR1"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::ERROR); EXPECT_EQ(merged_stat.message, "WARN0; ERROR1"); @@ -134,7 +134,7 @@ TEST(TestLocalizationErrorMonitorDiagnostics, MergeDiagnosticStatus) stat_array.at(0).message = "ERROR0"; stat_array.at(1).level = diagnostic_msgs::msg::DiagnosticStatus::ERROR; stat_array.at(1).message = "ERROR1"; - merged_stat = mergeDiagnosticStatus(stat_array); + merged_stat = merge_diagnostic_status(stat_array); EXPECT_EQ(merged_stat.level, diagnostic_msgs::msg::DiagnosticStatus::ERROR); EXPECT_EQ(merged_stat.message, "ERROR0; ERROR1"); } From 41ee731703625a2d9ed95b855fabd0d76fed4d47 Mon Sep 17 00:00:00 2001 From: Masaki Baba Date: Mon, 10 Jun 2024 17:45:28 +0900 Subject: [PATCH 069/142] refactor(map_tf_generator): apply static analysis (#7350) * refactor based on linter Signed-off-by: a-maumau * style(pre-commit): autofix --------- Signed-off-by: a-maumau Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../map_tf_generator/uniform_random.hpp | 2 +- .../src/pcd_map_tf_generator_node.cpp | 48 +++++++++---------- .../src/vector_map_tf_generator_node.cpp | 41 ++++++++-------- .../test/test_uniform_random.cpp | 6 +-- 4 files changed, 48 insertions(+), 49 deletions(-) diff --git a/map/map_tf_generator/include/map_tf_generator/uniform_random.hpp b/map/map_tf_generator/include/map_tf_generator/uniform_random.hpp index 345703a19bc06..cda3bc5c49a0c 100644 --- a/map/map_tf_generator/include/map_tf_generator/uniform_random.hpp +++ b/map/map_tf_generator/include/map_tf_generator/uniform_random.hpp @@ -18,7 +18,7 @@ #include #include -std::vector UniformRandom(const size_t max_exclusive, const size_t n) +std::vector inline uniform_random(const size_t max_exclusive, const size_t n) { std::default_random_engine generator; std::uniform_int_distribution distribution(0, max_exclusive - 1); diff --git a/map/map_tf_generator/src/pcd_map_tf_generator_node.cpp b/map/map_tf_generator/src/pcd_map_tf_generator_node.cpp index 69a66cf52c865..d4b8ccb797224 100644 --- a/map/map_tf_generator/src/pcd_map_tf_generator_node.cpp +++ b/map/map_tf_generator/src/pcd_map_tf_generator_node.cpp @@ -26,22 +26,22 @@ #include #include +#include -constexpr size_t N_SAMPLES = 20; +constexpr size_t n_samples = 20; class PcdMapTFGeneratorNode : public rclcpp::Node { public: using PointCloud = pcl::PointCloud; explicit PcdMapTFGeneratorNode(const rclcpp::NodeOptions & options) - : Node("pcd_map_tf_generator", options) + : Node("pcd_map_tf_generator", options), + map_frame_(declare_parameter("map_frame")), + viewer_frame_(declare_parameter("viewer_frame")) { - map_frame_ = declare_parameter("map_frame"); - viewer_frame_ = declare_parameter("viewer_frame"); - sub_ = create_subscription( "pointcloud_map", rclcpp::QoS{1}.transient_local(), - std::bind(&PcdMapTFGeneratorNode::onPointCloud, this, std::placeholders::_1)); + std::bind(&PcdMapTFGeneratorNode::on_point_cloud, this, std::placeholders::_1)); static_broadcaster_ = std::make_shared(this); } @@ -53,7 +53,7 @@ class PcdMapTFGeneratorNode : public rclcpp::Node std::shared_ptr static_broadcaster_; - void onPointCloud(const sensor_msgs::msg::PointCloud2::ConstSharedPtr clouds_ros) + void on_point_cloud(const sensor_msgs::msg::PointCloud2::ConstSharedPtr clouds_ros) { // fix random seed to produce the same viewer position every time // 3939 is just the author's favorite number @@ -62,32 +62,32 @@ class PcdMapTFGeneratorNode : public rclcpp::Node PointCloud clouds; pcl::fromROSMsg(*clouds_ros, clouds); - const std::vector indices = UniformRandom(clouds.size(), N_SAMPLES); + const std::vector indices = uniform_random(clouds.size(), n_samples); double coordinate[3] = {0, 0, 0}; for (const auto i : indices) { coordinate[0] += clouds.points[i].x; coordinate[1] += clouds.points[i].y; coordinate[2] += clouds.points[i].z; } - coordinate[0] = coordinate[0] / indices.size(); - coordinate[1] = coordinate[1] / indices.size(); - coordinate[2] = coordinate[2] / indices.size(); - - geometry_msgs::msg::TransformStamped static_transformStamped; - static_transformStamped.header.stamp = this->now(); - static_transformStamped.header.frame_id = map_frame_; - static_transformStamped.child_frame_id = viewer_frame_; - static_transformStamped.transform.translation.x = coordinate[0]; - static_transformStamped.transform.translation.y = coordinate[1]; - static_transformStamped.transform.translation.z = coordinate[2]; + coordinate[0] = coordinate[0] / static_cast(indices.size()); + coordinate[1] = coordinate[1] / static_cast(indices.size()); + coordinate[2] = coordinate[2] / static_cast(indices.size()); + + geometry_msgs::msg::TransformStamped static_transform_stamped; + static_transform_stamped.header.stamp = this->now(); + static_transform_stamped.header.frame_id = map_frame_; + static_transform_stamped.child_frame_id = viewer_frame_; + static_transform_stamped.transform.translation.x = coordinate[0]; + static_transform_stamped.transform.translation.y = coordinate[1]; + static_transform_stamped.transform.translation.z = coordinate[2]; tf2::Quaternion quat; quat.setRPY(0, 0, 0); - static_transformStamped.transform.rotation.x = quat.x(); - static_transformStamped.transform.rotation.y = quat.y(); - static_transformStamped.transform.rotation.z = quat.z(); - static_transformStamped.transform.rotation.w = quat.w(); + static_transform_stamped.transform.rotation.x = quat.x(); + static_transform_stamped.transform.rotation.y = quat.y(); + static_transform_stamped.transform.rotation.z = quat.z(); + static_transform_stamped.transform.rotation.w = quat.w(); - static_broadcaster_->sendTransform(static_transformStamped); + static_broadcaster_->sendTransform(static_transform_stamped); RCLCPP_INFO_STREAM( get_logger(), "broadcast static tf. map_frame:" diff --git a/map/map_tf_generator/src/vector_map_tf_generator_node.cpp b/map/map_tf_generator/src/vector_map_tf_generator_node.cpp index f242254a456a1..df3075bdce1fe 100644 --- a/map/map_tf_generator/src/vector_map_tf_generator_node.cpp +++ b/map/map_tf_generator/src/vector_map_tf_generator_node.cpp @@ -29,14 +29,13 @@ class VectorMapTFGeneratorNode : public rclcpp::Node { public: explicit VectorMapTFGeneratorNode(const rclcpp::NodeOptions & options) - : Node("vector_map_tf_generator", options) + : Node("vector_map_tf_generator", options), + map_frame_(declare_parameter("map_frame")), + viewer_frame_(declare_parameter("viewer_frame")) { - map_frame_ = declare_parameter("map_frame"); - viewer_frame_ = declare_parameter("viewer_frame"); - sub_ = create_subscription( "vector_map", rclcpp::QoS{1}.transient_local(), - std::bind(&VectorMapTFGeneratorNode::onVectorMap, this, std::placeholders::_1)); + std::bind(&VectorMapTFGeneratorNode::on_vector_map, this, std::placeholders::_1)); static_broadcaster_ = std::make_shared(this); } @@ -49,7 +48,7 @@ class VectorMapTFGeneratorNode : public rclcpp::Node std::shared_ptr static_broadcaster_; std::shared_ptr lanelet_map_ptr_; - void onVectorMap(const autoware_map_msgs::msg::LaneletMapBin::ConstSharedPtr msg) + void on_vector_map(const autoware_map_msgs::msg::LaneletMapBin::ConstSharedPtr msg) { lanelet_map_ptr_ = std::make_shared(); lanelet::utils::conversion::fromBinMsg(*msg, lanelet_map_ptr_); @@ -66,27 +65,27 @@ class VectorMapTFGeneratorNode : public rclcpp::Node points_z.push_back(point_z); } const double coordinate_x = - std::accumulate(points_x.begin(), points_x.end(), 0.0) / points_x.size(); + std::accumulate(points_x.begin(), points_x.end(), 0.0) / static_cast(points_x.size()); const double coordinate_y = - std::accumulate(points_y.begin(), points_y.end(), 0.0) / points_y.size(); + std::accumulate(points_y.begin(), points_y.end(), 0.0) / static_cast(points_y.size()); const double coordinate_z = - std::accumulate(points_z.begin(), points_z.end(), 0.0) / points_z.size(); + std::accumulate(points_z.begin(), points_z.end(), 0.0) / static_cast(points_z.size()); - geometry_msgs::msg::TransformStamped static_transformStamped; - static_transformStamped.header.stamp = this->now(); - static_transformStamped.header.frame_id = map_frame_; - static_transformStamped.child_frame_id = viewer_frame_; - static_transformStamped.transform.translation.x = coordinate_x; - static_transformStamped.transform.translation.y = coordinate_y; - static_transformStamped.transform.translation.z = coordinate_z; + geometry_msgs::msg::TransformStamped static_transform_stamped; + static_transform_stamped.header.stamp = this->now(); + static_transform_stamped.header.frame_id = map_frame_; + static_transform_stamped.child_frame_id = viewer_frame_; + static_transform_stamped.transform.translation.x = coordinate_x; + static_transform_stamped.transform.translation.y = coordinate_y; + static_transform_stamped.transform.translation.z = coordinate_z; tf2::Quaternion quat; quat.setRPY(0, 0, 0); - static_transformStamped.transform.rotation.x = quat.x(); - static_transformStamped.transform.rotation.y = quat.y(); - static_transformStamped.transform.rotation.z = quat.z(); - static_transformStamped.transform.rotation.w = quat.w(); + static_transform_stamped.transform.rotation.x = quat.x(); + static_transform_stamped.transform.rotation.y = quat.y(); + static_transform_stamped.transform.rotation.z = quat.z(); + static_transform_stamped.transform.rotation.w = quat.w(); - static_broadcaster_->sendTransform(static_transformStamped); + static_broadcaster_->sendTransform(static_transform_stamped); RCLCPP_INFO_STREAM( get_logger(), "broadcast static tf. map_frame:" diff --git a/map/map_tf_generator/test/test_uniform_random.cpp b/map/map_tf_generator/test/test_uniform_random.cpp index 455edc2d5dfd2..19e558ebb2add 100644 --- a/map/map_tf_generator/test/test_uniform_random.cpp +++ b/map/map_tf_generator/test/test_uniform_random.cpp @@ -21,10 +21,10 @@ using testing::Each; using testing::Ge; using testing::Lt; -TEST(UniformRandom, UniformRandom) +TEST(uniform_random, uniform_random) { { - const std::vector random = UniformRandom(4, 0); + const std::vector random = uniform_random(4, 0); ASSERT_EQ(random.size(), static_cast(0)); } @@ -35,7 +35,7 @@ TEST(UniformRandom, UniformRandom) const size_t max_exclusive = 4; for (int i = 0; i < 50; i++) { - const std::vector random = UniformRandom(4, 10); + const std::vector random = uniform_random(4, 10); ASSERT_EQ(random.size(), 10U); ASSERT_THAT(random, Each(AllOf(Ge(min_inclusive), Lt(max_exclusive)))); // in range [0, 4) } From 5d579ba067cff957b46a7b0d2de975e9c4941a09 Mon Sep 17 00:00:00 2001 From: Yukinari Hisaki <42021302+yhisaki@users.noreply.github.com> Date: Mon, 10 Jun 2024 17:59:53 +0900 Subject: [PATCH 070/142] =?UTF-8?q?refactor(behavior=5Fvelocity=5Fblind=5F?= =?UTF-8?q?spot=5Fmodule):=20prefix=20package=20and=20nam=E2=80=A6=20(#738?= =?UTF-8?q?0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor(behavior_velocity_blind_spot_module): prefix package and namespace with autoware_ Signed-off-by: Y.Hisaki * modify test_node_interface to search blind_spot with prefix Signed-off-by: Y.Hisaki --------- Signed-off-by: Y.Hisaki --- .github/CODEOWNERS | 2 +- planning/.pages | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/blind_spot.param.yaml | 0 .../docs/blind-spot.drawio.svg | 0 .../docs/blind-spot.svg | 0 .../package.xml | 4 ++-- .../plugins.xml | 2 +- .../src/debug.cpp | 0 .../src/decisions.cpp | 0 .../src/manager.cpp | 0 .../src/manager.hpp | 1 + .../src/scene.cpp | 0 .../src/scene.hpp | 1 + planning/autoware_behavior_velocity_planner/README.md | 2 +- planning/autoware_behavior_velocity_planner/package.xml | 2 +- .../test/src/test_node_interface.cpp | 2 +- 18 files changed, 11 insertions(+), 9 deletions(-) rename planning/{behavior_velocity_blind_spot_module => autoware_behavior_velocity_blind_spot_module}/CMakeLists.txt (86%) rename planning/{behavior_velocity_blind_spot_module => autoware_behavior_velocity_blind_spot_module}/README.md (100%) rename planning/{behavior_velocity_blind_spot_module => autoware_behavior_velocity_blind_spot_module}/config/blind_spot.param.yaml (100%) rename planning/{behavior_velocity_blind_spot_module => autoware_behavior_velocity_blind_spot_module}/docs/blind-spot.drawio.svg (100%) rename planning/{behavior_velocity_blind_spot_module => autoware_behavior_velocity_blind_spot_module}/docs/blind-spot.svg (100%) rename planning/{behavior_velocity_blind_spot_module => autoware_behavior_velocity_blind_spot_module}/package.xml (89%) rename planning/{behavior_velocity_blind_spot_module => autoware_behavior_velocity_blind_spot_module}/plugins.xml (71%) rename planning/{behavior_velocity_blind_spot_module => autoware_behavior_velocity_blind_spot_module}/src/debug.cpp (100%) rename planning/{behavior_velocity_blind_spot_module => autoware_behavior_velocity_blind_spot_module}/src/decisions.cpp (100%) rename planning/{behavior_velocity_blind_spot_module => autoware_behavior_velocity_blind_spot_module}/src/manager.cpp (100%) rename planning/{behavior_velocity_blind_spot_module => autoware_behavior_velocity_blind_spot_module}/src/manager.hpp (99%) rename planning/{behavior_velocity_blind_spot_module => autoware_behavior_velocity_blind_spot_module}/src/scene.cpp (100%) rename planning/{behavior_velocity_blind_spot_module => autoware_behavior_velocity_blind_spot_module}/src/scene.hpp (99%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b241c8c45bb3e..e13158d02f9ef 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -171,7 +171,7 @@ planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp ky planning/autoware_behavior_path_start_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_path_start_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp -planning/behavior_velocity_blind_spot_module/** mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_velocity_blind_spot_module/** mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_crosswalk_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yuki.takagi@tier4.jp planning/behavior_velocity_detection_area_module/** kyoichi.sugahara@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_dynamic_obstacle_stop_module/** mamoru.sobue@tier4.jp maxime.clement@tier4.jp diff --git a/planning/.pages b/planning/.pages index ce08c389c17f5..48267f0e4ce6c 100644 --- a/planning/.pages +++ b/planning/.pages @@ -21,7 +21,7 @@ nav: - 'About Behavior Velocity': planning/autoware_behavior_velocity_planner - 'Template for Custom Module': planning/autoware_behavior_velocity_template_module - 'Available Module': - - 'Blind Spot': planning/behavior_velocity_blind_spot_module + - 'Blind Spot': planning/autoware_behavior_velocity_blind_spot_module - 'Crosswalk': planning/behavior_velocity_crosswalk_module - 'Detection Area': planning/behavior_velocity_detection_area_module - 'Dynamic Obstacle Stop': planning/behavior_velocity_dynamic_obstacle_stop_module diff --git a/planning/behavior_velocity_blind_spot_module/CMakeLists.txt b/planning/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt similarity index 86% rename from planning/behavior_velocity_blind_spot_module/CMakeLists.txt rename to planning/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt index 7ff2419eed919..bdaa6d9f6aa2f 100644 --- a/planning/behavior_velocity_blind_spot_module/CMakeLists.txt +++ b/planning/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(behavior_velocity_blind_spot_module) +project(autoware_behavior_velocity_blind_spot_module) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/planning/behavior_velocity_blind_spot_module/README.md b/planning/autoware_behavior_velocity_blind_spot_module/README.md similarity index 100% rename from planning/behavior_velocity_blind_spot_module/README.md rename to planning/autoware_behavior_velocity_blind_spot_module/README.md diff --git a/planning/behavior_velocity_blind_spot_module/config/blind_spot.param.yaml b/planning/autoware_behavior_velocity_blind_spot_module/config/blind_spot.param.yaml similarity index 100% rename from planning/behavior_velocity_blind_spot_module/config/blind_spot.param.yaml rename to planning/autoware_behavior_velocity_blind_spot_module/config/blind_spot.param.yaml diff --git a/planning/behavior_velocity_blind_spot_module/docs/blind-spot.drawio.svg b/planning/autoware_behavior_velocity_blind_spot_module/docs/blind-spot.drawio.svg similarity index 100% rename from planning/behavior_velocity_blind_spot_module/docs/blind-spot.drawio.svg rename to planning/autoware_behavior_velocity_blind_spot_module/docs/blind-spot.drawio.svg diff --git a/planning/behavior_velocity_blind_spot_module/docs/blind-spot.svg b/planning/autoware_behavior_velocity_blind_spot_module/docs/blind-spot.svg similarity index 100% rename from planning/behavior_velocity_blind_spot_module/docs/blind-spot.svg rename to planning/autoware_behavior_velocity_blind_spot_module/docs/blind-spot.svg diff --git a/planning/behavior_velocity_blind_spot_module/package.xml b/planning/autoware_behavior_velocity_blind_spot_module/package.xml similarity index 89% rename from planning/behavior_velocity_blind_spot_module/package.xml rename to planning/autoware_behavior_velocity_blind_spot_module/package.xml index 67947398afb01..4cb554a4a1aab 100644 --- a/planning/behavior_velocity_blind_spot_module/package.xml +++ b/planning/autoware_behavior_velocity_blind_spot_module/package.xml @@ -1,9 +1,9 @@ - behavior_velocity_blind_spot_module + autoware_behavior_velocity_blind_spot_module 0.1.0 - The behavior_velocity_blind_spot_module package + The autoware_behavior_velocity_blind_spot_module package Mamoru Sobue Tomoya Kimura diff --git a/planning/behavior_velocity_blind_spot_module/plugins.xml b/planning/autoware_behavior_velocity_blind_spot_module/plugins.xml similarity index 71% rename from planning/behavior_velocity_blind_spot_module/plugins.xml rename to planning/autoware_behavior_velocity_blind_spot_module/plugins.xml index fb5019de5df08..4e490330246d8 100644 --- a/planning/behavior_velocity_blind_spot_module/plugins.xml +++ b/planning/autoware_behavior_velocity_blind_spot_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_blind_spot_module/src/debug.cpp b/planning/autoware_behavior_velocity_blind_spot_module/src/debug.cpp similarity index 100% rename from planning/behavior_velocity_blind_spot_module/src/debug.cpp rename to planning/autoware_behavior_velocity_blind_spot_module/src/debug.cpp diff --git a/planning/behavior_velocity_blind_spot_module/src/decisions.cpp b/planning/autoware_behavior_velocity_blind_spot_module/src/decisions.cpp similarity index 100% rename from planning/behavior_velocity_blind_spot_module/src/decisions.cpp rename to planning/autoware_behavior_velocity_blind_spot_module/src/decisions.cpp diff --git a/planning/behavior_velocity_blind_spot_module/src/manager.cpp b/planning/autoware_behavior_velocity_blind_spot_module/src/manager.cpp similarity index 100% rename from planning/behavior_velocity_blind_spot_module/src/manager.cpp rename to planning/autoware_behavior_velocity_blind_spot_module/src/manager.cpp diff --git a/planning/behavior_velocity_blind_spot_module/src/manager.hpp b/planning/autoware_behavior_velocity_blind_spot_module/src/manager.hpp similarity index 99% rename from planning/behavior_velocity_blind_spot_module/src/manager.hpp rename to planning/autoware_behavior_velocity_blind_spot_module/src/manager.hpp index 12dccd846affc..756aec415c4ec 100644 --- a/planning/behavior_velocity_blind_spot_module/src/manager.hpp +++ b/planning/autoware_behavior_velocity_blind_spot_module/src/manager.hpp @@ -29,6 +29,7 @@ namespace autoware::behavior_velocity_planner { + class BlindSpotModuleManager : public SceneModuleManagerInterfaceWithRTC { public: diff --git a/planning/behavior_velocity_blind_spot_module/src/scene.cpp b/planning/autoware_behavior_velocity_blind_spot_module/src/scene.cpp similarity index 100% rename from planning/behavior_velocity_blind_spot_module/src/scene.cpp rename to planning/autoware_behavior_velocity_blind_spot_module/src/scene.cpp diff --git a/planning/behavior_velocity_blind_spot_module/src/scene.hpp b/planning/autoware_behavior_velocity_blind_spot_module/src/scene.hpp similarity index 99% rename from planning/behavior_velocity_blind_spot_module/src/scene.hpp rename to planning/autoware_behavior_velocity_blind_spot_module/src/scene.hpp index cfb6bfdfeeded..721576a9fac8a 100644 --- a/planning/behavior_velocity_blind_spot_module/src/scene.hpp +++ b/planning/autoware_behavior_velocity_blind_spot_module/src/scene.hpp @@ -36,6 +36,7 @@ namespace autoware::behavior_velocity_planner { + /** * @brief wrapper class of interpolated path with lane id */ diff --git a/planning/autoware_behavior_velocity_planner/README.md b/planning/autoware_behavior_velocity_planner/README.md index e792860239119..c09fa8105c25b 100644 --- a/planning/autoware_behavior_velocity_planner/README.md +++ b/planning/autoware_behavior_velocity_planner/README.md @@ -7,7 +7,7 @@ It loads modules as plugins. Please refer to the links listed below for detail o ![Architecture](./docs/BehaviorVelocityPlanner-Architecture.drawio.svg) -- [Blind Spot](../behavior_velocity_blind_spot_module/README.md) +- [Blind Spot](../autoware_behavior_velocity_blind_spot_module/README.md) - [Crosswalk](../behavior_velocity_crosswalk_module/README.md) - [Walkway](../autoware_behavior_velocity_walkway_module/README.md) - [Detection Area](../behavior_velocity_detection_area_module/README.md) diff --git a/planning/autoware_behavior_velocity_planner/package.xml b/planning/autoware_behavior_velocity_planner/package.xml index dcec42f80691f..7c66d6294a9e5 100644 --- a/planning/autoware_behavior_velocity_planner/package.xml +++ b/planning/autoware_behavior_velocity_planner/package.xml @@ -65,6 +65,7 @@ ament_cmake_ros ament_lint_auto + autoware_behavior_velocity_blind_spot_module autoware_behavior_velocity_intersection_module autoware_behavior_velocity_occlusion_spot_module autoware_behavior_velocity_run_out_module @@ -72,7 +73,6 @@ autoware_behavior_velocity_virtual_traffic_light_module autoware_behavior_velocity_walkway_module autoware_lint_common - behavior_velocity_blind_spot_module behavior_velocity_crosswalk_module behavior_velocity_detection_area_module behavior_velocity_no_drivable_lane_module diff --git a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp index 58e7a86e01302..cd8e9ca4bbfe8 100644 --- a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp +++ b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp @@ -95,7 +95,7 @@ std::shared_ptr generateNode() velocity_smoother_dir + "/config/default_velocity_smoother.param.yaml", velocity_smoother_dir + "/config/Analytical.param.yaml", behavior_velocity_planner_dir + "/config/behavior_velocity_planner.param.yaml", - get_behavior_velocity_module_config_no_prefix("blind_spot"), + get_behavior_velocity_module_config("blind_spot"), get_behavior_velocity_module_config_no_prefix("crosswalk"), get_behavior_velocity_module_config("walkway"), get_behavior_velocity_module_config_no_prefix("detection_area"), From 8e66943ec705417bcab4579365ebeedcafcaa084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Fatih=20C=C4=B1r=C4=B1t?= Date: Mon, 10 Jun 2024 12:13:04 +0300 Subject: [PATCH 071/142] ci(build-and-test-differential): set checkout fetch-depth to 1 (#7408) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: M. Fatih Cırıt --- .github/workflows/build-and-test-differential-arm64.yaml | 2 +- .github/workflows/build-and-test-differential.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-and-test-differential-arm64.yaml b/.github/workflows/build-and-test-differential-arm64.yaml index d6e49eaabc5bd..bcedfee08d9e9 100644 --- a/.github/workflows/build-and-test-differential-arm64.yaml +++ b/.github/workflows/build-and-test-differential-arm64.yaml @@ -35,7 +35,7 @@ jobs: - name: Check out repository uses: actions/checkout@v4 with: - fetch-depth: 0 + fetch-depth: 1 - name: Show disk space before the tasks run: df -h diff --git a/.github/workflows/build-and-test-differential.yaml b/.github/workflows/build-and-test-differential.yaml index 6745976aa543a..6a39a5fda98f6 100644 --- a/.github/workflows/build-and-test-differential.yaml +++ b/.github/workflows/build-and-test-differential.yaml @@ -34,7 +34,7 @@ jobs: - name: Check out repository uses: actions/checkout@v4 with: - fetch-depth: 0 + fetch-depth: 1 - name: Show disk space before the tasks run: df -h From 95d4ae9e188eaecc7a0bca1468f70919a8555971 Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Mon, 10 Jun 2024 18:44:48 +0900 Subject: [PATCH 072/142] chore(map): udpate maintainer (#7405) udpate maintainer Signed-off-by: Yamato Ando --- launch/tier4_map_launch/package.xml | 3 ++- map/map_loader/package.xml | 3 ++- map/util/lanelet2_map_preprocessor/package.xml | 1 - 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/launch/tier4_map_launch/package.xml b/launch/tier4_map_launch/package.xml index 8fb41076204a8..05643e354cfce 100644 --- a/launch/tier4_map_launch/package.xml +++ b/launch/tier4_map_launch/package.xml @@ -4,7 +4,6 @@ tier4_map_launch 0.1.0 The tier4_map_launch package - Ryohsuke Mitsudome Ryu Yamamoto Koji Minoda Kento Yabuuchi @@ -14,6 +13,8 @@ Shintaro Sakoda Masahiro Sakamoto Apache License 2.0 + Ryohsuke Mitsudome + Yamato Ando ament_cmake_auto autoware_cmake diff --git a/map/map_loader/package.xml b/map/map_loader/package.xml index 4eaf8600dcab4..a6f4ac7f81275 100644 --- a/map/map_loader/package.xml +++ b/map/map_loader/package.xml @@ -4,7 +4,6 @@ map_loader 0.1.0 The map_loader package - Ryohsuke Mitsudome Yamato Ando Ryu Yamamoto Koji Minoda @@ -15,6 +14,8 @@ Shintaro Sakoda Apache License 2.0 + Ryohsuke Mitsudome + Koji Minoda ament_cmake_auto autoware_cmake diff --git a/map/util/lanelet2_map_preprocessor/package.xml b/map/util/lanelet2_map_preprocessor/package.xml index 421f04257de67..e84bd8a80c202 100644 --- a/map/util/lanelet2_map_preprocessor/package.xml +++ b/map/util/lanelet2_map_preprocessor/package.xml @@ -4,7 +4,6 @@ lanelet2_map_preprocessor 0.1.0 The lanelet2_map_preprocessor package - Ryohsuke Mitsudome Yamato Ando Kento Yabuuchi Masahiro Sakamoto From 7a55d57565f1e7660c0a3db37395673043865401 Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Mon, 10 Jun 2024 18:45:12 +0900 Subject: [PATCH 073/142] refactor(control_validator)!: prefix package and namespace with autoware (#7304) * rename folders Signed-off-by: Daniel Sanchez * rename add prefix Signed-off-by: Daniel Sanchez * change param path Signed-off-by: Daniel Sanchez * fix pluggin problem Signed-off-by: Daniel Sanchez * fix extra prefixes Signed-off-by: Daniel Sanchez * change back launchers Signed-off-by: Daniel Sanchez * add namespace to address conflict Signed-off-by: Daniel Sanchez * delete stubborn file Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez --- .github/CODEOWNERS | 2 +- .../CMakeLists.txt | 20 +++++++++---------- .../README.md | 0 .../config/control_validator.param.yaml | 0 .../image/control_validator.drawio.svg | 0 .../image/trajectory_deviation.drawio.svg | 0 .../control_validator.hpp | 16 +++++++-------- .../debug_marker.hpp | 6 +++--- .../autoware_control_validator}/utils.hpp | 10 +++++----- .../launch/control_validator.launch.xml | 4 ++-- .../msg/ControlValidatorStatus.msg | 0 .../package.xml | 4 ++-- .../src/control_validator.cpp | 12 +++++------ .../src/debug_marker.cpp | 2 +- .../src/utils.cpp | 6 +++--- .../launch/control.launch.py | 4 ++-- .../diagnostic_aggregator/control.param.yaml | 2 +- 17 files changed, 44 insertions(+), 44 deletions(-) rename control/{control_validator => autoware_control_validator}/CMakeLists.txt (50%) rename control/{control_validator => autoware_control_validator}/README.md (100%) rename control/{control_validator => autoware_control_validator}/config/control_validator.param.yaml (100%) rename control/{control_validator => autoware_control_validator}/image/control_validator.drawio.svg (100%) rename control/{control_validator => autoware_control_validator}/image/trajectory_deviation.drawio.svg (100%) rename control/{control_validator/include/control_validator => autoware_control_validator/include/autoware_control_validator}/control_validator.hpp (86%) rename control/{control_validator/include/control_validator => autoware_control_validator/include/autoware_control_validator}/debug_marker.hpp (92%) rename control/{control_validator/include/control_validator => autoware_control_validator/include/autoware_control_validator}/utils.hpp (88%) rename control/{control_validator => autoware_control_validator}/launch/control_validator.launch.xml (79%) rename control/{control_validator => autoware_control_validator}/msg/ControlValidatorStatus.msg (100%) rename control/{control_validator => autoware_control_validator}/package.xml (93%) rename control/{control_validator => autoware_control_validator}/src/control_validator.cpp (95%) rename control/{control_validator => autoware_control_validator}/src/debug_marker.cpp (98%) rename control/{control_validator => autoware_control_validator}/src/utils.cpp (98%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e13158d02f9ef..e24ee56c4165d 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -46,7 +46,7 @@ common/traffic_light_utils/** kotaro.uetake@tier4.jp satoshi.ota@tier4.jp shunsu common/tvm_utility/** ambroise.vincent@arm.com xinyu.wang@tier4.jp control/autoware_autonomous_emergency_braking/** daniel.sanchez@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp control/control_performance_analysis/** berkay@leodrive.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp -control/control_validator/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +control/autoware_control_validator/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/autoware_external_cmd_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/autoware_joy_controller/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/autoware_lane_departure_checker/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp diff --git a/control/control_validator/CMakeLists.txt b/control/autoware_control_validator/CMakeLists.txt similarity index 50% rename from control/control_validator/CMakeLists.txt rename to control/autoware_control_validator/CMakeLists.txt index fab942c4dc001..1a4119e47a723 100644 --- a/control/control_validator/CMakeLists.txt +++ b/control/autoware_control_validator/CMakeLists.txt @@ -1,23 +1,23 @@ cmake_minimum_required(VERSION 3.22) -project(control_validator) +project(autoware_control_validator) find_package(autoware_cmake REQUIRED) autoware_package() -ament_auto_add_library(control_validator_helpers SHARED +ament_auto_add_library(autoware_control_validator_helpers SHARED src/utils.cpp src/debug_marker.cpp ) # control validator -ament_auto_add_library(control_validator_component SHARED - include/control_validator/control_validator.hpp +ament_auto_add_library(autoware_control_validator_component SHARED + include/autoware_control_validator/control_validator.hpp src/control_validator.cpp ) -target_link_libraries(control_validator_component control_validator_helpers) -rclcpp_components_register_node(control_validator_component - PLUGIN "control_validator::ControlValidator" - EXECUTABLE control_validator_node +target_link_libraries(autoware_control_validator_component autoware_control_validator_helpers) +rclcpp_components_register_node(autoware_control_validator_component + PLUGIN "autoware::control_validator::ControlValidator" + EXECUTABLE autoware_control_validator_node ) rosidl_generate_interfaces( @@ -28,12 +28,12 @@ rosidl_generate_interfaces( # to use a message defined in the same package if(${rosidl_cmake_VERSION} VERSION_LESS 2.5.0) - rosidl_target_interfaces(control_validator_component + rosidl_target_interfaces(autoware_control_validator_component ${PROJECT_NAME} "rosidl_typesupport_cpp") else() rosidl_get_typesupport_target( cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp") - target_link_libraries(control_validator_component "${cpp_typesupport_target}") + target_link_libraries(autoware_control_validator_component "${cpp_typesupport_target}") endif() # if(BUILD_TESTING) diff --git a/control/control_validator/README.md b/control/autoware_control_validator/README.md similarity index 100% rename from control/control_validator/README.md rename to control/autoware_control_validator/README.md diff --git a/control/control_validator/config/control_validator.param.yaml b/control/autoware_control_validator/config/control_validator.param.yaml similarity index 100% rename from control/control_validator/config/control_validator.param.yaml rename to control/autoware_control_validator/config/control_validator.param.yaml diff --git a/control/control_validator/image/control_validator.drawio.svg b/control/autoware_control_validator/image/control_validator.drawio.svg similarity index 100% rename from control/control_validator/image/control_validator.drawio.svg rename to control/autoware_control_validator/image/control_validator.drawio.svg diff --git a/control/control_validator/image/trajectory_deviation.drawio.svg b/control/autoware_control_validator/image/trajectory_deviation.drawio.svg similarity index 100% rename from control/control_validator/image/trajectory_deviation.drawio.svg rename to control/autoware_control_validator/image/trajectory_deviation.drawio.svg diff --git a/control/control_validator/include/control_validator/control_validator.hpp b/control/autoware_control_validator/include/autoware_control_validator/control_validator.hpp similarity index 86% rename from control/control_validator/include/control_validator/control_validator.hpp rename to control/autoware_control_validator/include/autoware_control_validator/control_validator.hpp index 56125cc40b74e..d26abfc2ecd2f 100644 --- a/control/control_validator/include/control_validator/control_validator.hpp +++ b/control/autoware_control_validator/include/autoware_control_validator/control_validator.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef CONTROL_VALIDATOR__CONTROL_VALIDATOR_HPP_ -#define CONTROL_VALIDATOR__CONTROL_VALIDATOR_HPP_ +#ifndef AUTOWARE_CONTROL_VALIDATOR__CONTROL_VALIDATOR_HPP_ +#define AUTOWARE_CONTROL_VALIDATOR__CONTROL_VALIDATOR_HPP_ +#include "autoware_control_validator/debug_marker.hpp" +#include "autoware_control_validator/msg/control_validator_status.hpp" #include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" -#include "control_validator/debug_marker.hpp" -#include "control_validator/msg/control_validator_status.hpp" #include #include @@ -29,11 +29,11 @@ #include #include -namespace control_validator +namespace autoware::control_validator { +using autoware_control_validator::msg::ControlValidatorStatus; using autoware_planning_msgs::msg::Trajectory; using autoware_planning_msgs::msg::TrajectoryPoint; -using control_validator::msg::ControlValidatorStatus; using diagnostic_updater::DiagnosticStatusWrapper; using diagnostic_updater::Updater; using nav_msgs::msg::Odometry; @@ -94,6 +94,6 @@ class ControlValidator : public rclcpp::Node std::shared_ptr debug_pose_publisher_; }; -} // namespace control_validator +} // namespace autoware::control_validator -#endif // CONTROL_VALIDATOR__CONTROL_VALIDATOR_HPP_ +#endif // AUTOWARE_CONTROL_VALIDATOR__CONTROL_VALIDATOR_HPP_ diff --git a/control/control_validator/include/control_validator/debug_marker.hpp b/control/autoware_control_validator/include/autoware_control_validator/debug_marker.hpp similarity index 92% rename from control/control_validator/include/control_validator/debug_marker.hpp rename to control/autoware_control_validator/include/autoware_control_validator/debug_marker.hpp index 2d3a209cbd7da..cde596ed7e1ab 100644 --- a/control/control_validator/include/control_validator/debug_marker.hpp +++ b/control/autoware_control_validator/include/autoware_control_validator/debug_marker.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef CONTROL_VALIDATOR__DEBUG_MARKER_HPP_ -#define CONTROL_VALIDATOR__DEBUG_MARKER_HPP_ +#ifndef AUTOWARE_CONTROL_VALIDATOR__DEBUG_MARKER_HPP_ +#define AUTOWARE_CONTROL_VALIDATOR__DEBUG_MARKER_HPP_ #include @@ -57,4 +57,4 @@ class ControlValidatorDebugMarkerPublisher } }; -#endif // CONTROL_VALIDATOR__DEBUG_MARKER_HPP_ +#endif // AUTOWARE_CONTROL_VALIDATOR__DEBUG_MARKER_HPP_ diff --git a/control/control_validator/include/control_validator/utils.hpp b/control/autoware_control_validator/include/autoware_control_validator/utils.hpp similarity index 88% rename from control/control_validator/include/control_validator/utils.hpp rename to control/autoware_control_validator/include/autoware_control_validator/utils.hpp index edf97aaf5f510..69faa2fbe4abc 100644 --- a/control/control_validator/include/control_validator/utils.hpp +++ b/control/autoware_control_validator/include/autoware_control_validator/utils.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef CONTROL_VALIDATOR__UTILS_HPP_ -#define CONTROL_VALIDATOR__UTILS_HPP_ +#ifndef AUTOWARE_CONTROL_VALIDATOR__UTILS_HPP_ +#define AUTOWARE_CONTROL_VALIDATOR__UTILS_HPP_ #include #include @@ -24,7 +24,7 @@ #include #include -namespace control_validator +namespace autoware::control_validator { using autoware_planning_msgs::msg::Trajectory; using autoware_planning_msgs::msg::TrajectoryPoint; @@ -50,6 +50,6 @@ Trajectory alignTrajectoryWithReferenceTrajectory( double calcMaxLateralDistance( const Trajectory & trajectory, const Trajectory & predicted_trajectory); -} // namespace control_validator +} // namespace autoware::control_validator -#endif // CONTROL_VALIDATOR__UTILS_HPP_ +#endif // AUTOWARE_CONTROL_VALIDATOR__UTILS_HPP_ diff --git a/control/control_validator/launch/control_validator.launch.xml b/control/autoware_control_validator/launch/control_validator.launch.xml similarity index 79% rename from control/control_validator/launch/control_validator.launch.xml rename to control/autoware_control_validator/launch/control_validator.launch.xml index 9727e06e60523..651398a17fc78 100644 --- a/control/control_validator/launch/control_validator.launch.xml +++ b/control/autoware_control_validator/launch/control_validator.launch.xml @@ -1,9 +1,9 @@ - + - + diff --git a/control/control_validator/msg/ControlValidatorStatus.msg b/control/autoware_control_validator/msg/ControlValidatorStatus.msg similarity index 100% rename from control/control_validator/msg/ControlValidatorStatus.msg rename to control/autoware_control_validator/msg/ControlValidatorStatus.msg diff --git a/control/control_validator/package.xml b/control/autoware_control_validator/package.xml similarity index 93% rename from control/control_validator/package.xml rename to control/autoware_control_validator/package.xml index 93779d28d6218..2059308ef9029 100644 --- a/control/control_validator/package.xml +++ b/control/autoware_control_validator/package.xml @@ -1,9 +1,9 @@ - control_validator + autoware_control_validator 0.1.0 - ros node for control_validator + ros node for autoware_control_validator Kyoichi Sugahara Takamasa Horibe Makoto Kurihara diff --git a/control/control_validator/src/control_validator.cpp b/control/autoware_control_validator/src/control_validator.cpp similarity index 95% rename from control/control_validator/src/control_validator.cpp rename to control/autoware_control_validator/src/control_validator.cpp index be103647f1b36..e056a32437938 100644 --- a/control/control_validator/src/control_validator.cpp +++ b/control/autoware_control_validator/src/control_validator.cpp @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "control_validator/control_validator.hpp" +#include "autoware_control_validator/control_validator.hpp" -#include "control_validator/utils.hpp" +#include "autoware_control_validator/utils.hpp" #include #include #include -namespace control_validator +namespace autoware::control_validator { using diagnostic_msgs::msg::DiagnosticStatus; @@ -61,7 +61,7 @@ void ControlValidator::setupParameters() } try { - vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); + vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtil(*this).getVehicleInfo(); } catch (...) { RCLCPP_ERROR(get_logger(), "failed to get vehicle info. use default value."); vehicle_info_.front_overhang_m = 0.5; @@ -210,7 +210,7 @@ void ControlValidator::displayStatus() "predicted trajectory is too far from planning trajectory!!"); } -} // namespace control_validator +} // namespace autoware::control_validator #include -RCLCPP_COMPONENTS_REGISTER_NODE(control_validator::ControlValidator) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::control_validator::ControlValidator) diff --git a/control/control_validator/src/debug_marker.cpp b/control/autoware_control_validator/src/debug_marker.cpp similarity index 98% rename from control/control_validator/src/debug_marker.cpp rename to control/autoware_control_validator/src/debug_marker.cpp index 2dbdc558b305b..9ef2786c0aef6 100644 --- a/control/control_validator/src/debug_marker.cpp +++ b/control/autoware_control_validator/src/debug_marker.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "control_validator/debug_marker.hpp" +#include "autoware_control_validator/debug_marker.hpp" #include #include diff --git a/control/control_validator/src/utils.cpp b/control/autoware_control_validator/src/utils.cpp similarity index 98% rename from control/control_validator/src/utils.cpp rename to control/autoware_control_validator/src/utils.cpp index fab8b9f6f888b..e7cace049af6e 100644 --- a/control/control_validator/src/utils.cpp +++ b/control/autoware_control_validator/src/utils.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "control_validator/utils.hpp" +#include "autoware_control_validator/utils.hpp" #include #include @@ -23,7 +23,7 @@ #include #include -namespace control_validator +namespace autoware::control_validator { void shiftPose(Pose & pose, double longitudinal) @@ -162,4 +162,4 @@ double calcMaxLateralDistance( return max_dist; } -} // namespace control_validator +} // namespace autoware::control_validator diff --git a/launch/tier4_control_launch/launch/control.launch.py b/launch/tier4_control_launch/launch/control.launch.py index 1183514e9a3cb..2dd12b1705dd3 100644 --- a/launch/tier4_control_launch/launch/control.launch.py +++ b/launch/tier4_control_launch/launch/control.launch.py @@ -386,8 +386,8 @@ def launch_setup(context, *args, **kwargs): # control validator checker control_validator_component = ComposableNode( - package="control_validator", - plugin="control_validator::ControlValidator", + package="autoware_control_validator", + plugin="autoware::control_validator::ControlValidator", name="control_validator", remappings=[ ("~/input/kinematics", "/localization/kinematic_state"), diff --git a/system/system_error_monitor/config/diagnostic_aggregator/control.param.yaml b/system/system_error_monitor/config/diagnostic_aggregator/control.param.yaml index 3c8a5c77b2e44..9da5b14780dd1 100644 --- a/system/system_error_monitor/config/diagnostic_aggregator/control.param.yaml +++ b/system/system_error_monitor/config/diagnostic_aggregator/control.param.yaml @@ -70,7 +70,7 @@ control_validator: type: diagnostic_aggregator/GenericAnalyzer - path: control_validator + path: autoware_control_validator contains: [": control_validation_max_distance_deviation"] timeout: 1.0 From f7ac46f1cb989b9411c4b3fb36839077c27444b9 Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Mon, 10 Jun 2024 19:04:55 +0900 Subject: [PATCH 074/142] refactor(behavior_path_lane_change_module)!: prefix package and namespace with autoware (#7370) Signed-off-by: Fumiya Watanabe --- .github/CODEOWNERS | 2 +- planning/.pages | 2 +- .../README.md | 2 +- .../package.xml | 2 +- .../src/interface.hpp | 2 +- .../src/manager.hpp | 2 +- .../src/scene.cpp | 2 +- .../src/scene.hpp | 2 +- .../test_behavior_path_planner_node_interface.cpp | 2 +- .../package.xml | 2 +- .../src/manager.cpp | 2 +- .../src/manager.hpp | 2 +- .../src/scene.hpp | 2 +- .../test_behavior_path_planner_node_interface.cpp | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/lane_change.param.yaml | 0 .../images/lane_change-abort.png | Bin .../images/lane_change-cancel.png | Bin .../images/lane_change-candidate_path_samples.png | Bin .../images/lane_change-cant_cancel_no_abort.png | Bin .../images/lane_change-debug-1.png | Bin .../images/lane_change-debug-2.png | Bin .../images/lane_change-debug-3.png | Bin ...ge-enable_collision_check_at_prepare_phase.png | Bin .../images/lane_change-intersection_case.png | Bin .../images/lane_change-lane_change_phases.png | Bin .../images/lane_change-lane_expansion-with.png | Bin .../images/lane_change-lane_expansion-without.png | Bin .../lane_change-stop_at_terminal.drawio.svg | 0 ...ne_change-stop_at_terminal_no_block.drawio.svg | 0 ...ne_change-stop_far_from_target_lane.drawio.svg | 0 .../lane_change-stop_not_at_terminal.drawio.svg | 0 ..._not_at_terminal_no_blocking_object.drawio.svg | 0 .../lane_change-when_cannot_change_lanes.png | Bin .../images/lane_change.drawio.svg | 0 .../images/lane_objects.drawio.svg | 0 .../interface.hpp | 14 +++++++------- .../manager.hpp | 8 ++++---- .../scene.hpp | 10 +++++----- .../utils/base_class.hpp | 14 +++++++------- .../utils/data_structs.hpp | 6 +++--- .../utils/debug_structs.hpp | 10 +++++----- .../utils/markers.hpp | 10 +++++----- .../utils/path.hpp | 8 ++++---- .../utils/utils.hpp | 10 +++++----- .../package.xml | 4 ++-- .../plugins.xml | 4 ++++ .../src/interface.cpp | 6 +++--- .../src/manager.cpp | 4 ++-- .../src/scene.cpp | 4 ++-- .../src/utils/markers.cpp | 2 +- .../src/utils/utils.cpp | 6 +++--- .../test_behavior_path_planner_node_interface.cpp | 2 +- .../test/test_lane_change_utils.cpp | 2 +- .../behavior_path_lane_change_module/plugins.xml | 6 ------ planning/behavior_path_planner/README.md | 2 +- 57 files changed, 80 insertions(+), 82 deletions(-) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/CMakeLists.txt (92%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/README.md (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/config/lane_change.param.yaml (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-abort.png (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-cancel.png (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-candidate_path_samples.png (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-cant_cancel_no_abort.png (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-debug-1.png (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-debug-2.png (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-debug-3.png (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-enable_collision_check_at_prepare_phase.png (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-intersection_case.png (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-lane_change_phases.png (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-lane_expansion-with.png (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-lane_expansion-without.png (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-stop_at_terminal.drawio.svg (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-stop_at_terminal_no_block.drawio.svg (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-stop_far_from_target_lane.drawio.svg (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-stop_not_at_terminal.drawio.svg (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-stop_not_at_terminal_no_blocking_object.drawio.svg (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change-when_cannot_change_lanes.png (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_change.drawio.svg (100%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/images/lane_objects.drawio.svg (100%) rename planning/{behavior_path_lane_change_module/include/behavior_path_lane_change_module => autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module}/interface.hpp (90%) rename planning/{behavior_path_lane_change_module/include/behavior_path_lane_change_module => autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module}/manager.hpp (88%) rename planning/{behavior_path_lane_change_module/include/behavior_path_lane_change_module => autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module}/scene.hpp (95%) rename planning/{behavior_path_lane_change_module/include/behavior_path_lane_change_module => autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module}/utils/base_class.hpp (94%) rename planning/{behavior_path_lane_change_module/include/behavior_path_lane_change_module => autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module}/utils/data_structs.hpp (96%) rename planning/{behavior_path_lane_change_module/include/behavior_path_lane_change_module => autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module}/utils/debug_structs.hpp (87%) rename planning/{behavior_path_lane_change_module/include/behavior_path_lane_change_module => autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module}/utils/markers.hpp (85%) rename planning/{behavior_path_lane_change_module/include/behavior_path_lane_change_module => autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module}/utils/path.hpp (84%) rename planning/{behavior_path_lane_change_module/include/behavior_path_lane_change_module => autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module}/utils/utils.hpp (97%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/package.xml (91%) create mode 100644 planning/autoware_behavior_path_lane_change_module/plugins.xml rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/src/interface.cpp (98%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/src/manager.cpp (99%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/src/scene.cpp (99%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/src/utils/markers.cpp (99%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/src/utils/utils.cpp (99%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/test/test_behavior_path_planner_node_interface.cpp (98%) rename planning/{behavior_path_lane_change_module => autoware_behavior_path_lane_change_module}/test/test_lane_change_utils.cpp (97%) delete mode 100644 planning/behavior_path_lane_change_module/plugins.xml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e24ee56c4165d..0a3204bd8e63e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -164,7 +164,7 @@ planning/autoware_remaining_distance_time_calculator/** ahmed.ebrahim@leodrive.a planning/autoware_static_centerline_generator/** kosuke.takeuchi@tier4.jp takayuki.murooka@tier4.jp planning/autoware_velocity_smoother/** fumiya.watanabe@tier4.jp makoto.kurihara@tier4.jp satoshi.ota@tier4.jp takamasa.horibe@tier4.jp planning/behavior_path_goal_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp -planning/behavior_path_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp +planning/autoware_behavior_path_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/behavior_path_planner/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/behavior_path_sampling_planner_module/** daniel.sanchez@tier4.jp maxime.clement@tier4.jp planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp diff --git a/planning/.pages b/planning/.pages index 48267f0e4ce6c..727bed582532c 100644 --- a/planning/.pages +++ b/planning/.pages @@ -13,7 +13,7 @@ nav: - 'Avoidance by Lane Change': planning/autoware_behavior_path_avoidance_by_lane_change_module - 'Dynamic Obstacle Avoidance': planning/autoware_behavior_path_dynamic_obstacle_avoidance_module - 'Goal Planner': planning/behavior_path_goal_planner_module - - 'Lane Change': planning/behavior_path_lane_change_module + - 'Lane Change': planning/autoware_behavior_path_lane_change_module - 'Side Shift': planning/autoware_behavior_path_side_shift_module - 'Start Planner': planning/autoware_behavior_path_start_planner_module - 'Static Obstacle Avoidance': planning/autoware_behavior_path_static_obstacle_avoidance_module diff --git a/planning/autoware_behavior_path_avoidance_by_lane_change_module/README.md b/planning/autoware_behavior_path_avoidance_by_lane_change_module/README.md index 036de718ccde8..b7869fd4911a6 100644 --- a/planning/autoware_behavior_path_avoidance_by_lane_change_module/README.md +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/README.md @@ -13,7 +13,7 @@ This module is designed as one of the obstacle avoidance features and generates ## Inner-workings / Algorithms -Basically, this module is implemented by reusing the avoidance target filtering logic of the existing [Static Object Avoidance Module](../autoware_behavior_path_static_obstacle_avoidance_module/README.md) and the path generation logic of the [Normal Lane Change Module](../behavior_path_lane_change_module/README.md). On the other hand, the conditions under which the module is activated differ from those of a normal avoidance module. +Basically, this module is implemented by reusing the avoidance target filtering logic of the existing [Static Object Avoidance Module](../autoware_behavior_path_static_obstacle_avoidance_module/README.md) and the path generation logic of the [Normal Lane Change Module](../autoware_behavior_path_lane_change_module/README.md). On the other hand, the conditions under which the module is activated differ from those of a normal avoidance module. Check that the following conditions are satisfied after the filtering process for the avoidance target. diff --git a/planning/autoware_behavior_path_avoidance_by_lane_change_module/package.xml b/planning/autoware_behavior_path_avoidance_by_lane_change_module/package.xml index 3a75849931228..8b31637776ff0 100644 --- a/planning/autoware_behavior_path_avoidance_by_lane_change_module/package.xml +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/package.xml @@ -18,10 +18,10 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_path_lane_change_module autoware_behavior_path_planner_common autoware_behavior_path_static_obstacle_avoidance_module autoware_rtc_interface - behavior_path_lane_change_module behavior_path_planner lanelet2_extension motion_utils diff --git a/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.hpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.hpp index 75413c4dccfa6..1c0ec2f5dd4ea 100644 --- a/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.hpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.hpp @@ -15,7 +15,7 @@ #ifndef INTERFACE_HPP_ #define INTERFACE_HPP_ -#include "behavior_path_lane_change_module/interface.hpp" +#include "autoware_behavior_path_lane_change_module/interface.hpp" #include "data_structs.hpp" #include "scene.hpp" diff --git a/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.hpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.hpp index f921aa4d7e31c..fc74eae5421b5 100644 --- a/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.hpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.hpp @@ -15,7 +15,7 @@ #ifndef MANAGER_HPP_ #define MANAGER_HPP_ -#include "behavior_path_lane_change_module/manager.hpp" +#include "autoware_behavior_path_lane_change_module/manager.hpp" #include "data_structs.hpp" #include "interface.hpp" diff --git a/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp index 0647147dff0d0..ce4dab3c40309 100644 --- a/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp @@ -20,8 +20,8 @@ #include "autoware_behavior_path_planner_common/utils/utils.hpp" #include "autoware_behavior_path_static_obstacle_avoidance_module/utils.hpp" +#include #include -#include #include #include diff --git a/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.hpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.hpp index 6b39340da172a..540f3c5d0a68b 100644 --- a/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.hpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.hpp @@ -15,8 +15,8 @@ #ifndef SCENE_HPP_ #define SCENE_HPP_ +#include "autoware_behavior_path_lane_change_module/scene.hpp" #include "autoware_behavior_path_static_obstacle_avoidance_module/helper.hpp" -#include "behavior_path_lane_change_module/scene.hpp" #include "data_structs.hpp" #include diff --git a/planning/autoware_behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp index ea7979958e49e..1f2c2208a8719 100644 --- a/planning/autoware_behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/test/test_behavior_path_planner_node_interface.cpp @@ -49,7 +49,7 @@ std::shared_ptr generateNode() const auto behavior_path_planner_dir = ament_index_cpp::get_package_share_directory("behavior_path_planner"); const auto behavior_path_lane_change_module_dir = - ament_index_cpp::get_package_share_directory("behavior_path_lane_change_module"); + ament_index_cpp::get_package_share_directory("autoware_behavior_path_lane_change_module"); std::vector module_names; module_names.emplace_back("autoware::behavior_path_planner::AvoidanceByLaneChangeModuleManager"); diff --git a/planning/autoware_behavior_path_external_request_lane_change_module/package.xml b/planning/autoware_behavior_path_external_request_lane_change_module/package.xml index 9410be5a0011c..42b7c76387dea 100644 --- a/planning/autoware_behavior_path_external_request_lane_change_module/package.xml +++ b/planning/autoware_behavior_path_external_request_lane_change_module/package.xml @@ -18,9 +18,9 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_path_lane_change_module autoware_behavior_path_planner_common autoware_rtc_interface - behavior_path_lane_change_module behavior_path_planner motion_utils pluginlib diff --git a/planning/autoware_behavior_path_external_request_lane_change_module/src/manager.cpp b/planning/autoware_behavior_path_external_request_lane_change_module/src/manager.cpp index 130cbff29bcf3..baa26cbb38389 100644 --- a/planning/autoware_behavior_path_external_request_lane_change_module/src/manager.cpp +++ b/planning/autoware_behavior_path_external_request_lane_change_module/src/manager.cpp @@ -14,7 +14,7 @@ #include "manager.hpp" -#include "behavior_path_lane_change_module/interface.hpp" +#include "autoware_behavior_path_lane_change_module/interface.hpp" #include "scene.hpp" namespace autoware::behavior_path_planner diff --git a/planning/autoware_behavior_path_external_request_lane_change_module/src/manager.hpp b/planning/autoware_behavior_path_external_request_lane_change_module/src/manager.hpp index a4f3dce188c73..9a708a1573c78 100644 --- a/planning/autoware_behavior_path_external_request_lane_change_module/src/manager.hpp +++ b/planning/autoware_behavior_path_external_request_lane_change_module/src/manager.hpp @@ -15,7 +15,7 @@ #ifndef MANAGER_HPP_ #define MANAGER_HPP_ -#include "behavior_path_lane_change_module/manager.hpp" +#include "autoware_behavior_path_lane_change_module/manager.hpp" #include "route_handler/route_handler.hpp" #include diff --git a/planning/autoware_behavior_path_external_request_lane_change_module/src/scene.hpp b/planning/autoware_behavior_path_external_request_lane_change_module/src/scene.hpp index d2eb20b048a5d..006482558ffa8 100644 --- a/planning/autoware_behavior_path_external_request_lane_change_module/src/scene.hpp +++ b/planning/autoware_behavior_path_external_request_lane_change_module/src/scene.hpp @@ -15,7 +15,7 @@ #ifndef SCENE_HPP_ #define SCENE_HPP_ -#include "behavior_path_lane_change_module/scene.hpp" +#include "autoware_behavior_path_lane_change_module/scene.hpp" #include diff --git a/planning/autoware_behavior_path_external_request_lane_change_module/test/test_behavior_path_planner_node_interface.cpp b/planning/autoware_behavior_path_external_request_lane_change_module/test/test_behavior_path_planner_node_interface.cpp index 201d01e9b7fa0..8e94ebeb61298 100644 --- a/planning/autoware_behavior_path_external_request_lane_change_module/test/test_behavior_path_planner_node_interface.cpp +++ b/planning/autoware_behavior_path_external_request_lane_change_module/test/test_behavior_path_planner_node_interface.cpp @@ -48,7 +48,7 @@ std::shared_ptr generateNode() const auto behavior_path_planner_dir = ament_index_cpp::get_package_share_directory("behavior_path_planner"); const auto behavior_path_lane_change_module_dir = - ament_index_cpp::get_package_share_directory("behavior_path_lane_change_module"); + ament_index_cpp::get_package_share_directory("autoware_behavior_path_lane_change_module"); std::vector module_names; module_names.emplace_back( diff --git a/planning/behavior_path_lane_change_module/CMakeLists.txt b/planning/autoware_behavior_path_lane_change_module/CMakeLists.txt similarity index 92% rename from planning/behavior_path_lane_change_module/CMakeLists.txt rename to planning/autoware_behavior_path_lane_change_module/CMakeLists.txt index e5bce68ebfa44..ac094dfe862fb 100644 --- a/planning/behavior_path_lane_change_module/CMakeLists.txt +++ b/planning/autoware_behavior_path_lane_change_module/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(behavior_path_lane_change_module) +project(autoware_behavior_path_lane_change_module) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/planning/behavior_path_lane_change_module/README.md b/planning/autoware_behavior_path_lane_change_module/README.md similarity index 100% rename from planning/behavior_path_lane_change_module/README.md rename to planning/autoware_behavior_path_lane_change_module/README.md diff --git a/planning/behavior_path_lane_change_module/config/lane_change.param.yaml b/planning/autoware_behavior_path_lane_change_module/config/lane_change.param.yaml similarity index 100% rename from planning/behavior_path_lane_change_module/config/lane_change.param.yaml rename to planning/autoware_behavior_path_lane_change_module/config/lane_change.param.yaml diff --git a/planning/behavior_path_lane_change_module/images/lane_change-abort.png b/planning/autoware_behavior_path_lane_change_module/images/lane_change-abort.png similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-abort.png rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-abort.png diff --git a/planning/behavior_path_lane_change_module/images/lane_change-cancel.png b/planning/autoware_behavior_path_lane_change_module/images/lane_change-cancel.png similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-cancel.png rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-cancel.png diff --git a/planning/behavior_path_lane_change_module/images/lane_change-candidate_path_samples.png b/planning/autoware_behavior_path_lane_change_module/images/lane_change-candidate_path_samples.png similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-candidate_path_samples.png rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-candidate_path_samples.png diff --git a/planning/behavior_path_lane_change_module/images/lane_change-cant_cancel_no_abort.png b/planning/autoware_behavior_path_lane_change_module/images/lane_change-cant_cancel_no_abort.png similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-cant_cancel_no_abort.png rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-cant_cancel_no_abort.png diff --git a/planning/behavior_path_lane_change_module/images/lane_change-debug-1.png b/planning/autoware_behavior_path_lane_change_module/images/lane_change-debug-1.png similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-debug-1.png rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-debug-1.png diff --git a/planning/behavior_path_lane_change_module/images/lane_change-debug-2.png b/planning/autoware_behavior_path_lane_change_module/images/lane_change-debug-2.png similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-debug-2.png rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-debug-2.png diff --git a/planning/behavior_path_lane_change_module/images/lane_change-debug-3.png b/planning/autoware_behavior_path_lane_change_module/images/lane_change-debug-3.png similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-debug-3.png rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-debug-3.png diff --git a/planning/behavior_path_lane_change_module/images/lane_change-enable_collision_check_at_prepare_phase.png b/planning/autoware_behavior_path_lane_change_module/images/lane_change-enable_collision_check_at_prepare_phase.png similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-enable_collision_check_at_prepare_phase.png rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-enable_collision_check_at_prepare_phase.png diff --git a/planning/behavior_path_lane_change_module/images/lane_change-intersection_case.png b/planning/autoware_behavior_path_lane_change_module/images/lane_change-intersection_case.png similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-intersection_case.png rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-intersection_case.png diff --git a/planning/behavior_path_lane_change_module/images/lane_change-lane_change_phases.png b/planning/autoware_behavior_path_lane_change_module/images/lane_change-lane_change_phases.png similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-lane_change_phases.png rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-lane_change_phases.png diff --git a/planning/behavior_path_lane_change_module/images/lane_change-lane_expansion-with.png b/planning/autoware_behavior_path_lane_change_module/images/lane_change-lane_expansion-with.png similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-lane_expansion-with.png rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-lane_expansion-with.png diff --git a/planning/behavior_path_lane_change_module/images/lane_change-lane_expansion-without.png b/planning/autoware_behavior_path_lane_change_module/images/lane_change-lane_expansion-without.png similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-lane_expansion-without.png rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-lane_expansion-without.png diff --git a/planning/behavior_path_lane_change_module/images/lane_change-stop_at_terminal.drawio.svg b/planning/autoware_behavior_path_lane_change_module/images/lane_change-stop_at_terminal.drawio.svg similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-stop_at_terminal.drawio.svg rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-stop_at_terminal.drawio.svg diff --git a/planning/behavior_path_lane_change_module/images/lane_change-stop_at_terminal_no_block.drawio.svg b/planning/autoware_behavior_path_lane_change_module/images/lane_change-stop_at_terminal_no_block.drawio.svg similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-stop_at_terminal_no_block.drawio.svg rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-stop_at_terminal_no_block.drawio.svg diff --git a/planning/behavior_path_lane_change_module/images/lane_change-stop_far_from_target_lane.drawio.svg b/planning/autoware_behavior_path_lane_change_module/images/lane_change-stop_far_from_target_lane.drawio.svg similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-stop_far_from_target_lane.drawio.svg rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-stop_far_from_target_lane.drawio.svg diff --git a/planning/behavior_path_lane_change_module/images/lane_change-stop_not_at_terminal.drawio.svg b/planning/autoware_behavior_path_lane_change_module/images/lane_change-stop_not_at_terminal.drawio.svg similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-stop_not_at_terminal.drawio.svg rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-stop_not_at_terminal.drawio.svg diff --git a/planning/behavior_path_lane_change_module/images/lane_change-stop_not_at_terminal_no_blocking_object.drawio.svg b/planning/autoware_behavior_path_lane_change_module/images/lane_change-stop_not_at_terminal_no_blocking_object.drawio.svg similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-stop_not_at_terminal_no_blocking_object.drawio.svg rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-stop_not_at_terminal_no_blocking_object.drawio.svg diff --git a/planning/behavior_path_lane_change_module/images/lane_change-when_cannot_change_lanes.png b/planning/autoware_behavior_path_lane_change_module/images/lane_change-when_cannot_change_lanes.png similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change-when_cannot_change_lanes.png rename to planning/autoware_behavior_path_lane_change_module/images/lane_change-when_cannot_change_lanes.png diff --git a/planning/behavior_path_lane_change_module/images/lane_change.drawio.svg b/planning/autoware_behavior_path_lane_change_module/images/lane_change.drawio.svg similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_change.drawio.svg rename to planning/autoware_behavior_path_lane_change_module/images/lane_change.drawio.svg diff --git a/planning/behavior_path_lane_change_module/images/lane_objects.drawio.svg b/planning/autoware_behavior_path_lane_change_module/images/lane_objects.drawio.svg similarity index 100% rename from planning/behavior_path_lane_change_module/images/lane_objects.drawio.svg rename to planning/autoware_behavior_path_lane_change_module/images/lane_objects.drawio.svg diff --git a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/interface.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/interface.hpp similarity index 90% rename from planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/interface.hpp rename to planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/interface.hpp index cb23d82f2d60a..d2ad97d51744a 100644 --- a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/interface.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/interface.hpp @@ -12,16 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_LANE_CHANGE_MODULE__INTERFACE_HPP_ -#define BEHAVIOR_PATH_LANE_CHANGE_MODULE__INTERFACE_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__INTERFACE_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__INTERFACE_HPP_ +#include "autoware_behavior_path_lane_change_module/scene.hpp" +#include "autoware_behavior_path_lane_change_module/utils/base_class.hpp" +#include "autoware_behavior_path_lane_change_module/utils/data_structs.hpp" +#include "autoware_behavior_path_lane_change_module/utils/path.hpp" #include "autoware_behavior_path_planner_common/interface/scene_module_interface.hpp" #include "autoware_behavior_path_planner_common/turn_signal_decider.hpp" #include "autoware_behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" -#include "behavior_path_lane_change_module/scene.hpp" -#include "behavior_path_lane_change_module/utils/base_class.hpp" -#include "behavior_path_lane_change_module/utils/data_structs.hpp" -#include "behavior_path_lane_change_module/utils/path.hpp" #include @@ -156,4 +156,4 @@ class LaneChangeInterface : public SceneModuleInterface }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_LANE_CHANGE_MODULE__INTERFACE_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__INTERFACE_HPP_ diff --git a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/manager.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/manager.hpp similarity index 88% rename from planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/manager.hpp rename to planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/manager.hpp index 0430d5a8ad89d..42ea99e705f9a 100644 --- a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/manager.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/manager.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_LANE_CHANGE_MODULE__MANAGER_HPP_ -#define BEHAVIOR_PATH_LANE_CHANGE_MODULE__MANAGER_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__MANAGER_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__MANAGER_HPP_ +#include "autoware_behavior_path_lane_change_module/utils/data_structs.hpp" #include "autoware_behavior_path_planner_common/interface/scene_module_manager_interface.hpp" -#include "behavior_path_lane_change_module/utils/data_structs.hpp" #include "route_handler/route_handler.hpp" #include @@ -75,4 +75,4 @@ class LaneChangeLeftModuleManager : public LaneChangeModuleManager }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_LANE_CHANGE_MODULE__MANAGER_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__MANAGER_HPP_ diff --git a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/scene.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/scene.hpp similarity index 95% rename from planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/scene.hpp rename to planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/scene.hpp index b66437f4cff0e..3c104b53b8232 100644 --- a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/scene.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/scene.hpp @@ -11,11 +11,11 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_LANE_CHANGE_MODULE__SCENE_HPP_ -#define BEHAVIOR_PATH_LANE_CHANGE_MODULE__SCENE_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__SCENE_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__SCENE_HPP_ -#include "behavior_path_lane_change_module/utils/base_class.hpp" -#include "behavior_path_lane_change_module/utils/data_structs.hpp" +#include "autoware_behavior_path_lane_change_module/utils/base_class.hpp" +#include "autoware_behavior_path_lane_change_module/utils/data_structs.hpp" #include #include @@ -205,4 +205,4 @@ class NormalLaneChange : public LaneChangeBase double stop_time_{0.0}; }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_LANE_CHANGE_MODULE__SCENE_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__SCENE_HPP_ diff --git a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/base_class.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/base_class.hpp similarity index 94% rename from planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/base_class.hpp rename to planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/base_class.hpp index f34d8a867e4ca..e5710c197d1fd 100644 --- a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/base_class.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/base_class.hpp @@ -11,16 +11,16 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__BASE_CLASS_HPP_ -#define BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__BASE_CLASS_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__BASE_CLASS_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__BASE_CLASS_HPP_ +#include "autoware_behavior_path_lane_change_module/utils/data_structs.hpp" +#include "autoware_behavior_path_lane_change_module/utils/debug_structs.hpp" +#include "autoware_behavior_path_lane_change_module/utils/path.hpp" +#include "autoware_behavior_path_lane_change_module/utils/utils.hpp" #include "autoware_behavior_path_planner_common/interface/scene_module_interface.hpp" #include "autoware_behavior_path_planner_common/turn_signal_decider.hpp" #include "autoware_behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" -#include "behavior_path_lane_change_module/utils/data_structs.hpp" -#include "behavior_path_lane_change_module/utils/debug_structs.hpp" -#include "behavior_path_lane_change_module/utils/path.hpp" -#include "behavior_path_lane_change_module/utils/utils.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" #include @@ -239,4 +239,4 @@ class LaneChangeBase mutable rclcpp::Clock clock_{RCL_ROS_TIME}; }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__BASE_CLASS_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__BASE_CLASS_HPP_ diff --git a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/data_structs.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/data_structs.hpp similarity index 96% rename from planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/data_structs.hpp rename to planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/data_structs.hpp index 43a2a3b5836e6..9e5b45cf79e3f 100644 --- a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/data_structs.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/data_structs.hpp @@ -11,8 +11,8 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__DATA_STRUCTS_HPP_ -#define BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__DATA_STRUCTS_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__DATA_STRUCTS_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__DATA_STRUCTS_HPP_ #include "autoware_behavior_path_planner_common/utils/path_safety_checker/path_safety_checker_parameters.hpp" #include "autoware_behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" @@ -226,4 +226,4 @@ struct LanesPolygon }; } // namespace behavior_path_planner::data::lane_change -#endif // BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__DATA_STRUCTS_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__DATA_STRUCTS_HPP_ diff --git a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/debug_structs.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/debug_structs.hpp similarity index 87% rename from planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/debug_structs.hpp rename to planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/debug_structs.hpp index 93e45888005a6..3fe1a6c7de9ee 100644 --- a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/debug_structs.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/debug_structs.hpp @@ -11,11 +11,11 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__DEBUG_STRUCTS_HPP_ -#define BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__DEBUG_STRUCTS_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__DEBUG_STRUCTS_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__DEBUG_STRUCTS_HPP_ -#include "behavior_path_lane_change_module/utils/data_structs.hpp" -#include "behavior_path_lane_change_module/utils/path.hpp" +#include "autoware_behavior_path_lane_change_module/utils/data_structs.hpp" +#include "autoware_behavior_path_lane_change_module/utils/path.hpp" #include @@ -73,4 +73,4 @@ struct Debug }; } // namespace behavior_path_planner::data::lane_change -#endif // BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__DEBUG_STRUCTS_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__DEBUG_STRUCTS_HPP_ diff --git a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/markers.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/markers.hpp similarity index 85% rename from planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/markers.hpp rename to planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/markers.hpp index 2b1b226e30779..87961e5a06aa5 100644 --- a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/markers.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/markers.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__MARKERS_HPP_ -#define BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__MARKERS_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__MARKERS_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__MARKERS_HPP_ +#include "autoware_behavior_path_lane_change_module/utils/debug_structs.hpp" +#include "autoware_behavior_path_lane_change_module/utils/path.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/path_safety_checker_parameters.hpp" -#include "behavior_path_lane_change_module/utils/debug_structs.hpp" -#include "behavior_path_lane_change_module/utils/path.hpp" #include #include @@ -48,4 +48,4 @@ MarkerArray createDebugMarkerArray( const Debug & debug_data, const geometry_msgs::msg::Pose & ego_pose); } // namespace marker_utils::lane_change_markers -#endif // BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__MARKERS_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__MARKERS_HPP_ diff --git a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/path.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/path.hpp similarity index 84% rename from planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/path.hpp rename to planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/path.hpp index 1c43559601e19..1b961f1f5a21b 100644 --- a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/path.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/path.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__PATH_HPP_ -#define BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__PATH_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__PATH_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__PATH_HPP_ +#include "autoware_behavior_path_lane_change_module/utils/data_structs.hpp" #include "autoware_behavior_path_planner_common/turn_signal_decider.hpp" #include "autoware_behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" -#include "behavior_path_lane_change_module/utils/data_structs.hpp" #include @@ -50,4 +50,4 @@ struct LaneChangeStatus }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__PATH_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__PATH_HPP_ diff --git a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/utils.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/utils.hpp similarity index 97% rename from planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/utils.hpp rename to planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/utils.hpp index a7f65f82f4e9e..ee4a7833314d4 100644 --- a/planning/behavior_path_lane_change_module/include/behavior_path_lane_change_module/utils/utils.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/utils.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__UTILS_HPP_ -#define BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__UTILS_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__UTILS_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__UTILS_HPP_ +#include "autoware_behavior_path_lane_change_module/utils/data_structs.hpp" +#include "autoware_behavior_path_lane_change_module/utils/path.hpp" #include "autoware_behavior_path_planner_common/parameters.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/path_safety_checker_parameters.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" -#include "behavior_path_lane_change_module/utils/data_structs.hpp" -#include "behavior_path_lane_change_module/utils/path.hpp" #include "rclcpp/logger.hpp" #include @@ -308,4 +308,4 @@ geometry_msgs::msg::Polygon createExecutionArea( double additional_lon_offset, double additional_lat_offset); } // namespace behavior_path_planner::utils::lane_change::debug -#endif // BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__UTILS_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__UTILS_HPP_ diff --git a/planning/behavior_path_lane_change_module/package.xml b/planning/autoware_behavior_path_lane_change_module/package.xml similarity index 91% rename from planning/behavior_path_lane_change_module/package.xml rename to planning/autoware_behavior_path_lane_change_module/package.xml index 23fc8f61af2f3..7ccdf804945bd 100644 --- a/planning/behavior_path_lane_change_module/package.xml +++ b/planning/autoware_behavior_path_lane_change_module/package.xml @@ -1,9 +1,9 @@ - behavior_path_lane_change_module + autoware_behavior_path_lane_change_module 0.1.0 - The behavior_path_lane_change_module package + The autoware_behavior_path_lane_change_module package Fumiya Watanabe Satoshi Ota diff --git a/planning/autoware_behavior_path_lane_change_module/plugins.xml b/planning/autoware_behavior_path_lane_change_module/plugins.xml new file mode 100644 index 0000000000000..d0452897e6f94 --- /dev/null +++ b/planning/autoware_behavior_path_lane_change_module/plugins.xml @@ -0,0 +1,4 @@ + + + + diff --git a/planning/behavior_path_lane_change_module/src/interface.cpp b/planning/autoware_behavior_path_lane_change_module/src/interface.cpp similarity index 98% rename from planning/behavior_path_lane_change_module/src/interface.cpp rename to planning/autoware_behavior_path_lane_change_module/src/interface.cpp index 92d7a29f1983b..644368eaa970b 100644 --- a/planning/behavior_path_lane_change_module/src/interface.cpp +++ b/planning/autoware_behavior_path_lane_change_module/src/interface.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_lane_change_module/interface.hpp" +#include "autoware_behavior_path_lane_change_module/interface.hpp" +#include "autoware_behavior_path_lane_change_module/utils/markers.hpp" +#include "autoware_behavior_path_lane_change_module/utils/utils.hpp" #include "autoware_behavior_path_planner_common/interface/scene_module_interface.hpp" #include "autoware_behavior_path_planner_common/interface/scene_module_visitor.hpp" #include "autoware_behavior_path_planner_common/marker_utils/utils.hpp" -#include "behavior_path_lane_change_module/utils/markers.hpp" -#include "behavior_path_lane_change_module/utils/utils.hpp" #include diff --git a/planning/behavior_path_lane_change_module/src/manager.cpp b/planning/autoware_behavior_path_lane_change_module/src/manager.cpp similarity index 99% rename from planning/behavior_path_lane_change_module/src/manager.cpp rename to planning/autoware_behavior_path_lane_change_module/src/manager.cpp index 81d4b86afa094..d284b7c421f94 100644 --- a/planning/behavior_path_lane_change_module/src/manager.cpp +++ b/planning/autoware_behavior_path_lane_change_module/src/manager.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_lane_change_module/manager.hpp" +#include "autoware_behavior_path_lane_change_module/manager.hpp" -#include "behavior_path_lane_change_module/interface.hpp" +#include "autoware_behavior_path_lane_change_module/interface.hpp" #include "tier4_autoware_utils/ros/parameter.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" diff --git a/planning/behavior_path_lane_change_module/src/scene.cpp b/planning/autoware_behavior_path_lane_change_module/src/scene.cpp similarity index 99% rename from planning/behavior_path_lane_change_module/src/scene.cpp rename to planning/autoware_behavior_path_lane_change_module/src/scene.cpp index 69beca9804e08..7b16a910b684c 100644 --- a/planning/behavior_path_lane_change_module/src/scene.cpp +++ b/planning/autoware_behavior_path_lane_change_module/src/scene.cpp @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_lane_change_module/scene.hpp" +#include "autoware_behavior_path_lane_change_module/scene.hpp" +#include "autoware_behavior_path_lane_change_module/utils/utils.hpp" #include "autoware_behavior_path_planner_common/utils/drivable_area_expansion/static_drivable_area.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/safety_check.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" #include "autoware_behavior_path_planner_common/utils/traffic_light_utils.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" -#include "behavior_path_lane_change_module/utils/utils.hpp" #include #include diff --git a/planning/behavior_path_lane_change_module/src/utils/markers.cpp b/planning/autoware_behavior_path_lane_change_module/src/utils/markers.cpp similarity index 99% rename from planning/behavior_path_lane_change_module/src/utils/markers.cpp rename to planning/autoware_behavior_path_lane_change_module/src/utils/markers.cpp index 8a505ddf47984..2306eef90e61d 100644 --- a/planning/behavior_path_lane_change_module/src/utils/markers.cpp +++ b/planning/autoware_behavior_path_lane_change_module/src/utils/markers.cpp @@ -16,7 +16,7 @@ #include "autoware_behavior_path_planner_common/marker_utils/utils.hpp" #include "autoware_behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" -#include +#include #include #include diff --git a/planning/behavior_path_lane_change_module/src/utils/utils.cpp b/planning/autoware_behavior_path_lane_change_module/src/utils/utils.cpp similarity index 99% rename from planning/behavior_path_lane_change_module/src/utils/utils.cpp rename to planning/autoware_behavior_path_lane_change_module/src/utils/utils.cpp index 2fafd7c41d4a3..13df94b8766ad 100644 --- a/planning/behavior_path_lane_change_module/src/utils/utils.cpp +++ b/planning/autoware_behavior_path_lane_change_module/src/utils/utils.cpp @@ -12,16 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_lane_change_module/utils/utils.hpp" +#include "autoware_behavior_path_lane_change_module/utils/utils.hpp" +#include "autoware_behavior_path_lane_change_module/utils/data_structs.hpp" +#include "autoware_behavior_path_lane_change_module/utils/path.hpp" #include "autoware_behavior_path_planner_common/marker_utils/utils.hpp" #include "autoware_behavior_path_planner_common/parameters.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/safety_check.hpp" #include "autoware_behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" -#include "behavior_path_lane_change_module/utils/data_structs.hpp" -#include "behavior_path_lane_change_module/utils/path.hpp" #include "object_recognition_utils/predicted_path_utils.hpp" #include "tier4_autoware_utils/math/unit_conversion.hpp" diff --git a/planning/behavior_path_lane_change_module/test/test_behavior_path_planner_node_interface.cpp b/planning/autoware_behavior_path_lane_change_module/test/test_behavior_path_planner_node_interface.cpp similarity index 98% rename from planning/behavior_path_lane_change_module/test/test_behavior_path_planner_node_interface.cpp rename to planning/autoware_behavior_path_lane_change_module/test/test_behavior_path_planner_node_interface.cpp index 7b36bf475646b..71ee395712474 100644 --- a/planning/behavior_path_lane_change_module/test/test_behavior_path_planner_node_interface.cpp +++ b/planning/autoware_behavior_path_lane_change_module/test/test_behavior_path_planner_node_interface.cpp @@ -48,7 +48,7 @@ std::shared_ptr generateNode() const auto behavior_path_planner_dir = ament_index_cpp::get_package_share_directory("behavior_path_planner"); const auto behavior_path_lane_change_module_dir = - ament_index_cpp::get_package_share_directory("behavior_path_lane_change_module"); + ament_index_cpp::get_package_share_directory("autoware_behavior_path_lane_change_module"); std::vector module_names; module_names.emplace_back("behavior_path_planner::LaneChangeRightModuleManager"); diff --git a/planning/behavior_path_lane_change_module/test/test_lane_change_utils.cpp b/planning/autoware_behavior_path_lane_change_module/test/test_lane_change_utils.cpp similarity index 97% rename from planning/behavior_path_lane_change_module/test/test_lane_change_utils.cpp rename to planning/autoware_behavior_path_lane_change_module/test/test_lane_change_utils.cpp index 1f90114df8045..27a025758daaf 100644 --- a/planning/behavior_path_lane_change_module/test/test_lane_change_utils.cpp +++ b/planning/autoware_behavior_path_lane_change_module/test/test_lane_change_utils.cpp @@ -11,7 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_lane_change_module/utils/data_structs.hpp" +#include "autoware_behavior_path_lane_change_module/utils/data_structs.hpp" #include #include diff --git a/planning/behavior_path_lane_change_module/plugins.xml b/planning/behavior_path_lane_change_module/plugins.xml deleted file mode 100644 index 7df36919d8d54..0000000000000 --- a/planning/behavior_path_lane_change_module/plugins.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/planning/behavior_path_planner/README.md b/planning/behavior_path_planner/README.md index 70190731ac1a7..a17e1aee89557 100644 --- a/planning/behavior_path_planner/README.md +++ b/planning/behavior_path_planner/README.md @@ -30,7 +30,7 @@ Behavior Path Planner has following scene modules | Static Obstacle Avoidance | this module generates avoidance path when there is objects that should be avoid. | [LINK](../autoware_behavior_path_static_obstacle_avoidance_module/README.md) | | Dynamic Obstacle Avoidance | WIP | [LINK](../autoware_behavior_path_dynamic_obstacle_avoidance_module/README.md) | | Avoidance By Lane Change | this module generates lane change path when there is objects that should be avoid. | [LINK](../behavior_path_avoidance_by_lane_change_module/README.md) | -| Lane Change | this module is performed when it is necessary and a collision check with other vehicles is cleared. | [LINK](../behavior_path_lane_change_module/README.md) | +| Lane Change | this module is performed when it is necessary and a collision check with other vehicles is cleared. | [LINK](../autoware_behavior_path_lane_change_module/README.md) | | External Lane Change | WIP | LINK | | Goal Planner | this module is performed when ego-vehicle is in the road lane and goal is in the shoulder lane. ego-vehicle will stop at the goal. | [LINK](../behavior_path_goal_planner_module/README.md) | | Start Planner | this module is performed when ego-vehicle is stationary and footprint of ego-vehicle is included in shoulder lane. This module ends when ego-vehicle merges into the road. | [LINK](../autoware_behavior_path_start_planner_module/README.md) | From 9fd6d551e9609e5f0bc020b253cf44dd79f47708 Mon Sep 17 00:00:00 2001 From: oguzkaganozt Date: Mon, 10 Jun 2024 13:15:57 +0300 Subject: [PATCH 075/142] refactor(sensing/image_transport_decompressor): rework parameters (#6746) * add param, schema file, update readme Signed-off-by: oguzkaganozt * style(pre-commit): autofix --------- Signed-off-by: oguzkaganozt Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Kenzo Lobos Tsunekawa Co-authored-by: Yoshi Ri --- .../image_transport_decompressor/README.md | 2 ++ .../image_transport_decompressor.param.yaml | 3 ++ .../image_transport_decompressor.launch.xml | 2 ++ .../image_transport_decompressor.schema.json | 30 +++++++++++++++++++ .../src/image_transport_decompressor.cpp | 2 +- 5 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 sensing/image_transport_decompressor/config/image_transport_decompressor.param.yaml create mode 100644 sensing/image_transport_decompressor/schema/image_transport_decompressor.schema.json diff --git a/sensing/image_transport_decompressor/README.md b/sensing/image_transport_decompressor/README.md index 1a2b18f91c17a..97e0178eb00d6 100644 --- a/sensing/image_transport_decompressor/README.md +++ b/sensing/image_transport_decompressor/README.md @@ -22,6 +22,8 @@ The `image_transport_decompressor` is a node that decompresses images. ## Parameters +{{ json_to_markdown("sensing/image_transport_decompressor/schema/image_transport_decompressor.schema.json") }} + ## Assumptions / Known limits ## (Optional) Error detection and handling diff --git a/sensing/image_transport_decompressor/config/image_transport_decompressor.param.yaml b/sensing/image_transport_decompressor/config/image_transport_decompressor.param.yaml new file mode 100644 index 0000000000000..05b0f0b64a09a --- /dev/null +++ b/sensing/image_transport_decompressor/config/image_transport_decompressor.param.yaml @@ -0,0 +1,3 @@ +/**: + ros__parameters: + encoding: default diff --git a/sensing/image_transport_decompressor/launch/image_transport_decompressor.launch.xml b/sensing/image_transport_decompressor/launch/image_transport_decompressor.launch.xml index f608d504733bf..61296531f17f2 100644 --- a/sensing/image_transport_decompressor/launch/image_transport_decompressor.launch.xml +++ b/sensing/image_transport_decompressor/launch/image_transport_decompressor.launch.xml @@ -1,9 +1,11 @@ + + diff --git a/sensing/image_transport_decompressor/schema/image_transport_decompressor.schema.json b/sensing/image_transport_decompressor/schema/image_transport_decompressor.schema.json new file mode 100644 index 0000000000000..fdbe1bcd721dd --- /dev/null +++ b/sensing/image_transport_decompressor/schema/image_transport_decompressor.schema.json @@ -0,0 +1,30 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Image Transport Decompressor", + "type": "object", + "definitions": { + "image_transport_decompressor": { + "type": "object", + "properties": { + "encoding": { + "type": "string", + "description": "The image encoding to use for the decompressed image", + "default": "default" + } + }, + "required": ["encoding"] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/image_transport_decompressor" + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} diff --git a/sensing/image_transport_decompressor/src/image_transport_decompressor.cpp b/sensing/image_transport_decompressor/src/image_transport_decompressor.cpp index 4244facf7af12..ffc1e5865c856 100644 --- a/sensing/image_transport_decompressor/src/image_transport_decompressor.cpp +++ b/sensing/image_transport_decompressor/src/image_transport_decompressor.cpp @@ -69,7 +69,7 @@ namespace image_preprocessor { ImageTransportDecompressor::ImageTransportDecompressor(const rclcpp::NodeOptions & node_options) : rclcpp::Node("image_transport_decompressor", node_options), - encoding_(declare_parameter("encoding", "default")) + encoding_(declare_parameter("encoding")) { compressed_image_sub_ = create_subscription( "~/input/compressed_image", rclcpp::SensorDataQoS(), From e1e84a0850c3eb183280b6b7e829a79d1260408b Mon Sep 17 00:00:00 2001 From: mkquda <168697710+mkquda@users.noreply.github.com> Date: Mon, 10 Jun 2024 19:25:47 +0900 Subject: [PATCH 076/142] feat(trajectory_follower_node): use polling subscribers (#7403) * use polling subscriber in trajectory follower node Signed-off-by: mohammad alqudah * use polling subscriber in simple trajectory follower Signed-off-by: mohammad alqudah --------- Signed-off-by: mohammad alqudah --- .../controller_node.hpp | 43 +++++++---- .../simple_trajectory_follower.hpp | 14 ++-- .../src/controller_node.cpp | 75 +++++++------------ .../src/simple_trajectory_follower.cpp | 20 +++-- 4 files changed, 74 insertions(+), 78 deletions(-) diff --git a/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp b/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp index b342aace69bde..e9c69a2b2896d 100644 --- a/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp +++ b/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp @@ -21,6 +21,7 @@ #include "tf2_ros/buffer.h" #include "tf2_ros/transform_listener.h" #include "tier4_autoware_utils/ros/logger_level_configure.hpp" +#include "tier4_autoware_utils/ros/polling_subscriber.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" #include "trajectory_follower_base/lateral_controller_base.hpp" #include "trajectory_follower_base/longitudinal_controller_base.hpp" @@ -75,21 +76,34 @@ class TRAJECTORY_FOLLOWER_PUBLIC Controller : public rclcpp::Node std::shared_ptr longitudinal_controller_; std::shared_ptr lateral_controller_; - rclcpp::Subscription::SharedPtr sub_ref_path_; - rclcpp::Subscription::SharedPtr sub_odometry_; - rclcpp::Subscription::SharedPtr sub_steering_; - rclcpp::Subscription::SharedPtr sub_accel_; - rclcpp::Subscription::SharedPtr sub_operation_mode_; + // Subscribers + tier4_autoware_utils::InterProcessPollingSubscriber + sub_ref_path_{this, "~/input/reference_trajectory"}; + + tier4_autoware_utils::InterProcessPollingSubscriber sub_odometry_{ + this, "~/input/current_odometry"}; + + tier4_autoware_utils::InterProcessPollingSubscriber + sub_steering_{this, "~/input/current_steering"}; + + tier4_autoware_utils::InterProcessPollingSubscriber< + geometry_msgs::msg::AccelWithCovarianceStamped> + sub_accel_{this, "~/input/current_accel"}; + + tier4_autoware_utils::InterProcessPollingSubscriber sub_operation_mode_{ + this, "~/input/current_operation_mode"}; + + // Publishers rclcpp::Publisher::SharedPtr control_cmd_pub_; rclcpp::Publisher::SharedPtr pub_processing_time_lat_ms_; rclcpp::Publisher::SharedPtr pub_processing_time_lon_ms_; rclcpp::Publisher::SharedPtr debug_marker_pub_; - autoware_planning_msgs::msg::Trajectory::SharedPtr current_trajectory_ptr_; - nav_msgs::msg::Odometry::SharedPtr current_odometry_ptr_; - autoware_vehicle_msgs::msg::SteeringReport::SharedPtr current_steering_ptr_; - geometry_msgs::msg::AccelWithCovarianceStamped::SharedPtr current_accel_ptr_; - OperationModeState::SharedPtr current_operation_mode_ptr_; + autoware_planning_msgs::msg::Trajectory::ConstSharedPtr current_trajectory_ptr_; + nav_msgs::msg::Odometry::ConstSharedPtr current_odometry_ptr_; + autoware_vehicle_msgs::msg::SteeringReport::ConstSharedPtr current_steering_ptr_; + geometry_msgs::msg::AccelWithCovarianceStamped::ConstSharedPtr current_accel_ptr_; + OperationModeState::ConstSharedPtr current_operation_mode_ptr_; enum class LateralControllerMode { INVALID = 0, @@ -104,12 +118,9 @@ class TRAJECTORY_FOLLOWER_PUBLIC Controller : public rclcpp::Node /** * @brief compute control command, and publish periodically */ - boost::optional createInputData(rclcpp::Clock & clock) const; + boost::optional createInputData(rclcpp::Clock & clock); void callbackTimerControl(); - void onTrajectory(const autoware_planning_msgs::msg::Trajectory::SharedPtr); - void onOdometry(const nav_msgs::msg::Odometry::SharedPtr msg); - void onSteering(const autoware_vehicle_msgs::msg::SteeringReport::SharedPtr msg); - void onAccel(const geometry_msgs::msg::AccelWithCovarianceStamped::SharedPtr msg); + bool processData(rclcpp::Clock & clock); bool isTimeOut(const LongitudinalOutput & lon_out, const LateralOutput & lat_out); LateralControllerMode getLateralControllerMode(const std::string & algorithm_name) const; LongitudinalControllerMode getLongitudinalControllerMode( @@ -125,6 +136,8 @@ class TRAJECTORY_FOLLOWER_PUBLIC Controller : public rclcpp::Node void publishProcessingTime( const double t_ms, const rclcpp::Publisher::SharedPtr pub); StopWatch stop_watch_; + + static constexpr double logger_throttle_interval = 5000; }; } // namespace trajectory_follower_node } // namespace autoware::motion::control diff --git a/control/trajectory_follower_node/include/trajectory_follower_node/simple_trajectory_follower.hpp b/control/trajectory_follower_node/include/trajectory_follower_node/simple_trajectory_follower.hpp index e744243969cab..9360f900bca5f 100644 --- a/control/trajectory_follower_node/include/trajectory_follower_node/simple_trajectory_follower.hpp +++ b/control/trajectory_follower_node/include/trajectory_follower_node/simple_trajectory_follower.hpp @@ -15,6 +15,8 @@ #ifndef TRAJECTORY_FOLLOWER_NODE__SIMPLE_TRAJECTORY_FOLLOWER_HPP_ #define TRAJECTORY_FOLLOWER_NODE__SIMPLE_TRAJECTORY_FOLLOWER_HPP_ +#include "tier4_autoware_utils/ros/polling_subscriber.hpp" + #include #include @@ -42,20 +44,22 @@ class SimpleTrajectoryFollower : public rclcpp::Node ~SimpleTrajectoryFollower() = default; private: - rclcpp::Subscription::SharedPtr sub_kinematics_; - rclcpp::Subscription::SharedPtr sub_trajectory_; + tier4_autoware_utils::InterProcessPollingSubscriber sub_kinematics_{ + this, "~/input/kinematics"}; + tier4_autoware_utils::InterProcessPollingSubscriber sub_trajectory_{ + this, "~/input/trajectory"}; rclcpp::Publisher::SharedPtr pub_cmd_; rclcpp::TimerBase::SharedPtr timer_; - Trajectory::SharedPtr trajectory_; - Odometry::SharedPtr odometry_; + Trajectory::ConstSharedPtr trajectory_; + Odometry::ConstSharedPtr odometry_; TrajectoryPoint closest_traj_point_; bool use_external_target_vel_; double external_target_vel_; double lateral_deviation_; void onTimer(); - bool checkData(); + bool processData(); void updateClosest(); double calcSteerCmd(); double calcAccCmd(); diff --git a/control/trajectory_follower_node/src/controller_node.cpp b/control/trajectory_follower_node/src/controller_node.cpp index 4be04af5fd184..566a5ee7ed0df 100644 --- a/control/trajectory_follower_node/src/controller_node.cpp +++ b/control/trajectory_follower_node/src/controller_node.cpp @@ -62,17 +62,6 @@ Controller::Controller(const rclcpp::NodeOptions & node_options) : Node("control throw std::domain_error("[LongitudinalController] invalid algorithm"); } - sub_ref_path_ = create_subscription( - "~/input/reference_trajectory", rclcpp::QoS{1}, std::bind(&Controller::onTrajectory, this, _1)); - sub_steering_ = create_subscription( - "~/input/current_steering", rclcpp::QoS{1}, std::bind(&Controller::onSteering, this, _1)); - sub_odometry_ = create_subscription( - "~/input/current_odometry", rclcpp::QoS{1}, std::bind(&Controller::onOdometry, this, _1)); - sub_accel_ = create_subscription( - "~/input/current_accel", rclcpp::QoS{1}, std::bind(&Controller::onAccel, this, _1)); - sub_operation_mode_ = create_subscription( - "~/input/current_operation_mode", rclcpp::QoS{1}, - [this](const OperationModeState::SharedPtr msg) { current_operation_mode_ptr_ = msg; }); control_cmd_pub_ = create_publisher( "~/output/control_cmd", rclcpp::QoS{1}.transient_local()); pub_processing_time_lat_ms_ = @@ -112,24 +101,32 @@ Controller::LongitudinalControllerMode Controller::getLongitudinalControllerMode return LongitudinalControllerMode::INVALID; } -void Controller::onTrajectory(const autoware_planning_msgs::msg::Trajectory::SharedPtr msg) +bool Controller::processData(rclcpp::Clock & clock) { - current_trajectory_ptr_ = msg; -} - -void Controller::onOdometry(const nav_msgs::msg::Odometry::SharedPtr msg) -{ - current_odometry_ptr_ = msg; -} + bool is_ready = true; + + const auto & logData = [&clock, this](const std::string & data_type) { + std::string msg = "Waiting for " + data_type + " data"; + RCLCPP_INFO_THROTTLE(get_logger(), clock, logger_throttle_interval, msg.c_str()); + }; + + const auto & getData = [&logData](auto & dest, auto & sub, const std::string & data_type = "") { + const auto temp = sub.takeData(); + if (temp) { + dest = temp; + return true; + } + if (!data_type.empty()) logData(data_type); + return false; + }; -void Controller::onSteering(const autoware_vehicle_msgs::msg::SteeringReport::SharedPtr msg) -{ - current_steering_ptr_ = msg; -} + is_ready &= getData(current_accel_ptr_, sub_accel_, "acceleration"); + is_ready &= getData(current_steering_ptr_, sub_steering_, "steering"); + is_ready &= getData(current_trajectory_ptr_, sub_ref_path_, "trajectory"); + is_ready &= getData(current_odometry_ptr_, sub_odometry_, "odometry"); + is_ready &= getData(current_operation_mode_ptr_, sub_operation_mode_, "operation mode"); -void Controller::onAccel(const geometry_msgs::msg::AccelWithCovarianceStamped::SharedPtr msg) -{ - current_accel_ptr_ = msg; + return is_ready; } bool Controller::isTimeOut( @@ -152,31 +149,9 @@ bool Controller::isTimeOut( return false; } -boost::optional Controller::createInputData( - rclcpp::Clock & clock) const +boost::optional Controller::createInputData(rclcpp::Clock & clock) { - if (!current_trajectory_ptr_) { - RCLCPP_INFO_THROTTLE(get_logger(), clock, 5000, "Waiting for trajectory."); - return {}; - } - - if (!current_odometry_ptr_) { - RCLCPP_INFO_THROTTLE(get_logger(), clock, 5000, "Waiting for current odometry."); - return {}; - } - - if (!current_steering_ptr_) { - RCLCPP_INFO_THROTTLE(get_logger(), clock, 5000, "Waiting for current steering."); - return {}; - } - - if (!current_accel_ptr_) { - RCLCPP_INFO_THROTTLE(get_logger(), clock, 5000, "Waiting for current accel."); - return {}; - } - - if (!current_operation_mode_ptr_) { - RCLCPP_INFO_THROTTLE(get_logger(), clock, 5000, "Waiting for current operation mode."); + if (!processData(clock)) { return {}; } diff --git a/control/trajectory_follower_node/src/simple_trajectory_follower.cpp b/control/trajectory_follower_node/src/simple_trajectory_follower.cpp index 7c27eaed41380..bd24516ed033b 100644 --- a/control/trajectory_follower_node/src/simple_trajectory_follower.cpp +++ b/control/trajectory_follower_node/src/simple_trajectory_follower.cpp @@ -31,11 +31,6 @@ SimpleTrajectoryFollower::SimpleTrajectoryFollower(const rclcpp::NodeOptions & o { pub_cmd_ = create_publisher("output/control_cmd", 1); - sub_kinematics_ = create_subscription( - "input/kinematics", 1, [this](const Odometry::SharedPtr msg) { odometry_ = msg; }); - sub_trajectory_ = create_subscription( - "input/trajectory", 1, [this](const Trajectory::SharedPtr msg) { trajectory_ = msg; }); - use_external_target_vel_ = declare_parameter("use_external_target_vel"); external_target_vel_ = declare_parameter("external_target_vel"); lateral_deviation_ = declare_parameter("lateral_deviation"); @@ -47,7 +42,7 @@ SimpleTrajectoryFollower::SimpleTrajectoryFollower(const rclcpp::NodeOptions & o void SimpleTrajectoryFollower::onTimer() { - if (!checkData()) { + if (!processData()) { RCLCPP_INFO(get_logger(), "data not ready"); return; } @@ -110,9 +105,18 @@ double SimpleTrajectoryFollower::calcAccCmd() return acc; } -bool SimpleTrajectoryFollower::checkData() +bool SimpleTrajectoryFollower::processData() { - return (trajectory_ && odometry_); + bool is_ready = true; + const auto & getData = [](auto & dest, auto & sub) { + const auto temp = sub.takeData(); + if (!temp) return false; + dest = temp; + return true; + }; + is_ready &= getData(odometry_, sub_kinematics_); + is_ready &= getData(trajectory_, sub_trajectory_); + return is_ready; } } // namespace simple_trajectory_follower From 7d81b7cfe76dc512a4c8c0d19955c70960568b77 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 10 Jun 2024 19:29:43 +0900 Subject: [PATCH 077/142] refactor(raw_vehicle_cmd_converter)!: prefix package and namespace with autoware (#7385) * add prefix Signed-off-by: Takayuki Murooka * fix other packages Signed-off-by: Takayuki Murooka * fix cppcheck Signed-off-by: Takayuki Murooka * pre-commit Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .github/CODEOWNERS | 2 +- .../launch/vehicle.launch.xml | 2 +- vehicle/accel_brake_map_calibrator/README.md | 20 ++++---- .../accel_brake_map_calibrator_node.hpp | 8 ++-- .../accel_brake_map_calibrator.launch.xml | 2 +- .../accel_brake_map_calibrator/package.xml | 2 +- .../scripts/new_accel_brake_map_server.py | 2 +- .../scripts/view_plot.py | 2 +- .../CMakeLists.txt | 44 ++++++++++++++++++ .../README.md | 4 +- .../raw_vehicle_cmd_converter.param.yaml | 6 +-- .../data/default/accel_map.csv | 0 .../data/default/brake_map.csv | 0 .../data/default/steer_map.csv | 0 .../figure/accel-brake-map-table.png | Bin .../accel_map.hpp | 15 +++--- .../brake_map.hpp | 15 +++--- .../csv_loader.hpp | 10 ++-- .../node.hpp | 18 +++---- .../pid.hpp | 32 ++++++------- .../steer_map.hpp | 17 +++---- .../launch/raw_vehicle_converter.launch.xml | 4 +- .../package.xml | 4 +- .../raw_vehicle_cmd_converter.schema.json | 10 ++-- .../scripts/plot_accel_brake_map.py | 2 +- .../src/accel_map.cpp | 6 +-- .../src/brake_map.cpp | 6 +-- .../src/csv_loader.cpp | 6 +-- .../src/node.cpp | 10 ++-- .../src/pid.cpp | 6 +-- .../src/steer_map.cpp | 6 +-- .../test/map_data/test_1col_map.csv | 0 .../test/map_data/test_accel_map.csv | 0 .../test/map_data/test_brake_map.csv | 0 .../map_data/test_inconsistent_rows_map.csv | 0 .../test/map_data/test_not_interpolatable.csv | 0 .../test/map_data/test_steer_map.csv | 0 ...st_autoware_raw_vehicle_cmd_converter.cpp} | 22 +++++---- .../include/external_cmd_converter/node.hpp | 8 ++-- .../launch/external_cmd_converter.launch.py | 4 +- .../launch/external_cmd_converter.launch.xml | 4 +- vehicle/external_cmd_converter/package.xml | 2 +- .../raw_vehicle_cmd_converter/CMakeLists.txt | 44 ------------------ 43 files changed, 175 insertions(+), 170 deletions(-) create mode 100644 vehicle/autoware_raw_vehicle_cmd_converter/CMakeLists.txt rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/README.md (95%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/config/raw_vehicle_cmd_converter.param.yaml (61%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/data/default/accel_map.csv (100%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/data/default/brake_map.csv (100%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/data/default/steer_map.csv (100%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/figure/accel-brake-map-table.png (100%) rename vehicle/{raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter}/accel_map.hpp (75%) rename vehicle/{raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter}/brake_map.hpp (75%) rename vehicle/{raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter}/csv_loader.hpp (83%) rename vehicle/{raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter}/node.hpp (89%) rename vehicle/{raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter}/pid.hpp (78%) rename vehicle/{raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter}/steer_map.hpp (67%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/launch/raw_vehicle_converter.launch.xml (71%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/package.xml (91%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/schema/raw_vehicle_cmd_converter.schema.json (92%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/scripts/plot_accel_brake_map.py (97%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/src/accel_map.cpp (95%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/src/brake_map.cpp (95%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/src/csv_loader.cpp (96%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/src/node.cpp (96%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/src/pid.cpp (95%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/src/steer_map.cpp (91%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/test/map_data/test_1col_map.csv (100%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/test/map_data/test_accel_map.csv (100%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/test/map_data/test_brake_map.csv (100%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/test/map_data/test_inconsistent_rows_map.csv (100%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/test/map_data/test_not_interpolatable.csv (100%) rename vehicle/{raw_vehicle_cmd_converter => autoware_raw_vehicle_cmd_converter}/test/map_data/test_steer_map.csv (100%) rename vehicle/{raw_vehicle_cmd_converter/test/test_raw_vehicle_cmd_converter.cpp => autoware_raw_vehicle_cmd_converter/test/test_autoware_raw_vehicle_cmd_converter.cpp} (92%) delete mode 100644 vehicle/raw_vehicle_cmd_converter/CMakeLists.txt diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0a3204bd8e63e..ef79303f95e94 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -247,7 +247,7 @@ tools/reaction_analyzer/** berkay@leodrive.ai vehicle/accel_brake_map_calibrator/** taiki.tanaka@tier4.jp takeshi.miura@tier4.jp tomoya.kimura@tier4.jp vehicle/autoware_steer_offset_estimator/** taiki.tanaka@tier4.jp vehicle/external_cmd_converter/** takamasa.horibe@tier4.jp -vehicle/raw_vehicle_cmd_converter/** makoto.kurihara@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp +vehicle/autoware_raw_vehicle_cmd_converter/** makoto.kurihara@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp vehicle/autoware_steer_offset_estimator/** taiki.tanaka@tier4.jp vehicle/autoware_vehicle_info_utils/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp diff --git a/launch/tier4_vehicle_launch/launch/vehicle.launch.xml b/launch/tier4_vehicle_launch/launch/vehicle.launch.xml index 0e1d22bfd1827..ffd32ac92c0d5 100644 --- a/launch/tier4_vehicle_launch/launch/vehicle.launch.xml +++ b/launch/tier4_vehicle_launch/launch/vehicle.launch.xml @@ -6,7 +6,7 @@ - + diff --git a/vehicle/accel_brake_map_calibrator/README.md b/vehicle/accel_brake_map_calibrator/README.md index c8813280c04ff..c2516eed5de3d 100644 --- a/vehicle/accel_brake_map_calibrator/README.md +++ b/vehicle/accel_brake_map_calibrator/README.md @@ -1,6 +1,6 @@ # accel_brake_map_calibrator -The role of this node is to automatically calibrate `accel_map.csv` / `brake_map.csv` used in the `raw_vehicle_cmd_converter` node. +The role of this node is to automatically calibrate `accel_map.csv` / `brake_map.csv` used in the `autoware_raw_vehicle_cmd_converter` node. The base map, which is lexus's one by default, is updated iteratively with the loaded driving data. @@ -134,15 +134,15 @@ You can also save accel and brake map in the default directory where Autoware re ## System Parameters -| Name | Type | Description | Default value | -| :----------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------- | -| update_method | string | you can select map calibration method. "update_offset_each_cell" calculates offsets for each grid cells on the map. "update_offset_total" calculates the total offset of the map. | "update_offset_each_cell" | -| get_pitch_method | string | "tf": get pitch from tf, "none": unable to perform pitch validation and pitch compensation | "tf" | -| pedal_accel_graph_output | bool | if true, it will output a log of the pedal accel graph. | true | -| progress_file_output | bool | if true, it will output a log and csv file of the update process. | false | -| default_map_dir | str | directory of default map | [directory of *raw_vehicle_cmd_converter*]/data/default/ | -| calibrated_map_dir | str | directory of calibrated map | [directory of *accel_brake_map_calibrator*]/config/ | -| update_hz | double | hz for update | 10.0 | +| Name | Type | Description | Default value | +| :----------------------- | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------- | +| update_method | string | you can select map calibration method. "update_offset_each_cell" calculates offsets for each grid cells on the map. "update_offset_total" calculates the total offset of the map. | "update_offset_each_cell" | +| get_pitch_method | string | "tf": get pitch from tf, "none": unable to perform pitch validation and pitch compensation | "tf" | +| pedal_accel_graph_output | bool | if true, it will output a log of the pedal accel graph. | true | +| progress_file_output | bool | if true, it will output a log and csv file of the update process. | false | +| default_map_dir | str | directory of default map | [directory of *autoware_raw_vehicle_cmd_converter*]/data/default/ | +| calibrated_map_dir | str | directory of calibrated map | [directory of *accel_brake_map_calibrator*]/config/ | +| update_hz | double | hz for update | 10.0 | ## Algorithm Parameters diff --git a/vehicle/accel_brake_map_calibrator/include/accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp b/vehicle/accel_brake_map_calibrator/include/accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp index 6b94b7301540c..e168def1b8ea5 100644 --- a/vehicle/accel_brake_map_calibrator/include/accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp +++ b/vehicle/accel_brake_map_calibrator/include/accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp @@ -17,9 +17,9 @@ #ifndef ACCEL_BRAKE_MAP_CALIBRATOR__ACCEL_BRAKE_MAP_CALIBRATOR_NODE_HPP_ #define ACCEL_BRAKE_MAP_CALIBRATOR__ACCEL_BRAKE_MAP_CALIBRATOR_NODE_HPP_ +#include "autoware_raw_vehicle_cmd_converter/accel_map.hpp" +#include "autoware_raw_vehicle_cmd_converter/brake_map.hpp" #include "diagnostic_updater/diagnostic_updater.hpp" -#include "raw_vehicle_cmd_converter/accel_map.hpp" -#include "raw_vehicle_cmd_converter/brake_map.hpp" #include "rclcpp/rclcpp.hpp" #include "tf2/utils.h" #include "tier4_autoware_utils/ros/logger_level_configure.hpp" @@ -56,12 +56,12 @@ namespace accel_brake_map_calibrator { +using autoware::raw_vehicle_cmd_converter::AccelMap; +using autoware::raw_vehicle_cmd_converter::BrakeMap; using autoware_vehicle_msgs::msg::SteeringReport; using autoware_vehicle_msgs::msg::VelocityReport; using geometry_msgs::msg::TwistStamped; using nav_msgs::msg::OccupancyGrid; -using raw_vehicle_cmd_converter::AccelMap; -using raw_vehicle_cmd_converter::BrakeMap; using std_msgs::msg::Float32MultiArray; using tier4_debug_msgs::msg::Float32MultiArrayStamped; using tier4_debug_msgs::msg::Float32Stamped; diff --git a/vehicle/accel_brake_map_calibrator/launch/accel_brake_map_calibrator.launch.xml b/vehicle/accel_brake_map_calibrator/launch/accel_brake_map_calibrator.launch.xml index c664158a471a7..37ee49fe3c4e0 100644 --- a/vehicle/accel_brake_map_calibrator/launch/accel_brake_map_calibrator.launch.xml +++ b/vehicle/accel_brake_map_calibrator/launch/accel_brake_map_calibrator.launch.xml @@ -1,7 +1,7 @@ - + diff --git a/vehicle/accel_brake_map_calibrator/package.xml b/vehicle/accel_brake_map_calibrator/package.xml index 4c4eadea5e1ce..0fb299b199742 100644 --- a/vehicle/accel_brake_map_calibrator/package.xml +++ b/vehicle/accel_brake_map_calibrator/package.xml @@ -13,11 +13,11 @@ ament_cmake_auto autoware_cmake + autoware_raw_vehicle_cmd_converter autoware_vehicle_msgs diagnostic_updater geometry_msgs motion_utils - raw_vehicle_cmd_converter rclcpp std_msgs std_srvs diff --git a/vehicle/accel_brake_map_calibrator/scripts/new_accel_brake_map_server.py b/vehicle/accel_brake_map_calibrator/scripts/new_accel_brake_map_server.py index a2d82a460aed0..35bcfd09eaa38 100755 --- a/vehicle/accel_brake_map_calibrator/scripts/new_accel_brake_map_server.py +++ b/vehicle/accel_brake_map_calibrator/scripts/new_accel_brake_map_server.py @@ -40,7 +40,7 @@ def __init__(self): CalibData, "/accel_brake_map_calibrator/get_data_service", self.get_data_callback ) - default_map_path = get_package_share_directory("raw_vehicle_cmd_converter") + default_map_path = get_package_share_directory("autoware_raw_vehicle_cmd_converter") self.declare_parameter( "/accel_brake_map_calibrator/csv_default_map_dir", default_map_path + "/data/default/" ) diff --git a/vehicle/accel_brake_map_calibrator/scripts/view_plot.py b/vehicle/accel_brake_map_calibrator/scripts/view_plot.py index 4d713cf4848e0..8041f361be3ce 100755 --- a/vehicle/accel_brake_map_calibrator/scripts/view_plot.py +++ b/vehicle/accel_brake_map_calibrator/scripts/view_plot.py @@ -45,7 +45,7 @@ def __init__(self, args): max_pedal_vel_thr = args.max_pedal_vel_thr if default_map_dir is None: - package_path = get_package_share_directory("raw_vehicle_cmd_converter") + package_path = get_package_share_directory("autoware_raw_vehicle_cmd_converter") self.declare_parameter( "/accel_brake_map_calibrator/csv_default_map_dir", package_path + "/data/default/" ) diff --git a/vehicle/autoware_raw_vehicle_cmd_converter/CMakeLists.txt b/vehicle/autoware_raw_vehicle_cmd_converter/CMakeLists.txt new file mode 100644 index 0000000000000..fc54b302512fa --- /dev/null +++ b/vehicle/autoware_raw_vehicle_cmd_converter/CMakeLists.txt @@ -0,0 +1,44 @@ +cmake_minimum_required(VERSION 3.14) +project(autoware_raw_vehicle_cmd_converter) + +find_package(autoware_cmake REQUIRED) +autoware_package() + +ament_auto_add_library(actuation_map_converter SHARED + src/accel_map.cpp + src/brake_map.cpp + src/steer_map.cpp + src/csv_loader.cpp + src/pid.cpp +) + +ament_auto_add_library(autoware_raw_vehicle_cmd_converter_node_component SHARED + src/node.cpp +) + +target_link_libraries(autoware_raw_vehicle_cmd_converter_node_component actuation_map_converter) + +rclcpp_components_register_node(autoware_raw_vehicle_cmd_converter_node_component + PLUGIN "autoware::raw_vehicle_cmd_converter::RawVehicleCommandConverterNode" + EXECUTABLE autoware_raw_vehicle_cmd_converter_node +) + +if(BUILD_TESTING) + set(TEST_SOURCES + test/test_autoware_raw_vehicle_cmd_converter.cpp + ) + set(TEST_RAW_VEHICLE_CMD_CONVERTER_EXE test_autoware_raw_vehicle_cmd_converter) + ament_add_ros_isolated_gtest(${TEST_RAW_VEHICLE_CMD_CONVERTER_EXE} ${TEST_SOURCES}) + target_link_libraries(${TEST_RAW_VEHICLE_CMD_CONVERTER_EXE} actuation_map_converter autoware_raw_vehicle_cmd_converter_node_component) +endif() + +ament_auto_package(INSTALL_TO_SHARE + config + data + launch + test +) + +install(PROGRAMS scripts/plot_accel_brake_map.py + DESTINATION lib/${PROJECT_NAME} +) diff --git a/vehicle/raw_vehicle_cmd_converter/README.md b/vehicle/autoware_raw_vehicle_cmd_converter/README.md similarity index 95% rename from vehicle/raw_vehicle_cmd_converter/README.md rename to vehicle/autoware_raw_vehicle_cmd_converter/README.md index 6ac1ee4666cae..c204346d9d834 100644 --- a/vehicle/raw_vehicle_cmd_converter/README.md +++ b/vehicle/autoware_raw_vehicle_cmd_converter/README.md @@ -1,4 +1,4 @@ -# raw_vehicle_cmd_converter +# autoware_raw_vehicle_cmd_converter ## Overview @@ -40,7 +40,7 @@ For ease of calibration and adjustments to the lookup table, an auto-calibration ## Parameters -{{ json_to_markdown("vehicle/raw_vehicle_cmd_converter/schema/raw_vehicle_cmd_converter.schema.json") }} +{{ json_to_markdown("vehicle/autoware_raw_vehicle_cmd_converter/schema/raw_vehicle_cmd_converter.schema.json") }} ## Limitation diff --git a/vehicle/raw_vehicle_cmd_converter/config/raw_vehicle_cmd_converter.param.yaml b/vehicle/autoware_raw_vehicle_cmd_converter/config/raw_vehicle_cmd_converter.param.yaml similarity index 61% rename from vehicle/raw_vehicle_cmd_converter/config/raw_vehicle_cmd_converter.param.yaml rename to vehicle/autoware_raw_vehicle_cmd_converter/config/raw_vehicle_cmd_converter.param.yaml index bce50a0b581c7..b53b0d7622198 100644 --- a/vehicle/raw_vehicle_cmd_converter/config/raw_vehicle_cmd_converter.param.yaml +++ b/vehicle/autoware_raw_vehicle_cmd_converter/config/raw_vehicle_cmd_converter.param.yaml @@ -1,8 +1,8 @@ /**: ros__parameters: - csv_path_accel_map: $(find-pkg-share raw_vehicle_cmd_converter)/data/default/accel_map.csv - csv_path_brake_map: $(find-pkg-share raw_vehicle_cmd_converter)/data/default/brake_map.csv - csv_path_steer_map: $(find-pkg-share raw_vehicle_cmd_converter)/data/default/steer_map.csv + csv_path_accel_map: $(find-pkg-share autoware_raw_vehicle_cmd_converter)/data/default/accel_map.csv + csv_path_brake_map: $(find-pkg-share autoware_raw_vehicle_cmd_converter)/data/default/brake_map.csv + csv_path_steer_map: $(find-pkg-share autoware_raw_vehicle_cmd_converter)/data/default/steer_map.csv convert_accel_cmd: true convert_brake_cmd: true convert_steer_cmd: true diff --git a/vehicle/raw_vehicle_cmd_converter/data/default/accel_map.csv b/vehicle/autoware_raw_vehicle_cmd_converter/data/default/accel_map.csv similarity index 100% rename from vehicle/raw_vehicle_cmd_converter/data/default/accel_map.csv rename to vehicle/autoware_raw_vehicle_cmd_converter/data/default/accel_map.csv diff --git a/vehicle/raw_vehicle_cmd_converter/data/default/brake_map.csv b/vehicle/autoware_raw_vehicle_cmd_converter/data/default/brake_map.csv similarity index 100% rename from vehicle/raw_vehicle_cmd_converter/data/default/brake_map.csv rename to vehicle/autoware_raw_vehicle_cmd_converter/data/default/brake_map.csv diff --git a/vehicle/raw_vehicle_cmd_converter/data/default/steer_map.csv b/vehicle/autoware_raw_vehicle_cmd_converter/data/default/steer_map.csv similarity index 100% rename from vehicle/raw_vehicle_cmd_converter/data/default/steer_map.csv rename to vehicle/autoware_raw_vehicle_cmd_converter/data/default/steer_map.csv diff --git a/vehicle/raw_vehicle_cmd_converter/figure/accel-brake-map-table.png b/vehicle/autoware_raw_vehicle_cmd_converter/figure/accel-brake-map-table.png similarity index 100% rename from vehicle/raw_vehicle_cmd_converter/figure/accel-brake-map-table.png rename to vehicle/autoware_raw_vehicle_cmd_converter/figure/accel-brake-map-table.png diff --git a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/accel_map.hpp b/vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/accel_map.hpp similarity index 75% rename from vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/accel_map.hpp rename to vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/accel_map.hpp index 3bdb71a11f744..90cc4d15fd33e 100644 --- a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/accel_map.hpp +++ b/vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/accel_map.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef RAW_VEHICLE_CMD_CONVERTER__ACCEL_MAP_HPP_ -#define RAW_VEHICLE_CMD_CONVERTER__ACCEL_MAP_HPP_ +#ifndef AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__ACCEL_MAP_HPP_ +#define AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__ACCEL_MAP_HPP_ -#include "raw_vehicle_cmd_converter/csv_loader.hpp" +#include "autoware_raw_vehicle_cmd_converter/csv_loader.hpp" #include @@ -24,7 +24,7 @@ #include #include -namespace raw_vehicle_cmd_converter +namespace autoware::raw_vehicle_cmd_converter { class AccelMap { @@ -37,13 +37,14 @@ class AccelMap std::vector> getAccelMap() const { return accel_map_; } private: - rclcpp::Logger logger_{rclcpp::get_logger("raw_vehicle_cmd_converter").get_child("accel_map")}; + rclcpp::Logger logger_{ + rclcpp::get_logger("autoware_raw_vehicle_cmd_converter").get_child("accel_map")}; rclcpp::Clock clock_{RCL_ROS_TIME}; std::string vehicle_name_; std::vector vel_index_; std::vector throttle_index_; std::vector> accel_map_; }; -} // namespace raw_vehicle_cmd_converter +} // namespace autoware::raw_vehicle_cmd_converter -#endif // RAW_VEHICLE_CMD_CONVERTER__ACCEL_MAP_HPP_ +#endif // AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__ACCEL_MAP_HPP_ diff --git a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/brake_map.hpp b/vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/brake_map.hpp similarity index 75% rename from vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/brake_map.hpp rename to vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/brake_map.hpp index 6dd5ab94c5d06..dfc5e99bfa988 100644 --- a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/brake_map.hpp +++ b/vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/brake_map.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef RAW_VEHICLE_CMD_CONVERTER__BRAKE_MAP_HPP_ -#define RAW_VEHICLE_CMD_CONVERTER__BRAKE_MAP_HPP_ +#ifndef AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__BRAKE_MAP_HPP_ +#define AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__BRAKE_MAP_HPP_ -#include "raw_vehicle_cmd_converter/csv_loader.hpp" +#include "autoware_raw_vehicle_cmd_converter/csv_loader.hpp" #include @@ -24,7 +24,7 @@ #include #include -namespace raw_vehicle_cmd_converter +namespace autoware::raw_vehicle_cmd_converter { class BrakeMap { @@ -37,7 +37,8 @@ class BrakeMap std::vector> getBrakeMap() const { return brake_map_; } private: - rclcpp::Logger logger_{rclcpp::get_logger("raw_vehicle_cmd_converter").get_child("accel_map")}; + rclcpp::Logger logger_{ + rclcpp::get_logger("autoware_raw_vehicle_cmd_converter").get_child("accel_map")}; rclcpp::Clock clock_{RCL_ROS_TIME}; std::string vehicle_name_; std::vector vel_index_; @@ -45,6 +46,6 @@ class BrakeMap std::vector brake_index_rev_; std::vector> brake_map_; }; -} // namespace raw_vehicle_cmd_converter +} // namespace autoware::raw_vehicle_cmd_converter -#endif // RAW_VEHICLE_CMD_CONVERTER__BRAKE_MAP_HPP_ +#endif // AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__BRAKE_MAP_HPP_ diff --git a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/csv_loader.hpp b/vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/csv_loader.hpp similarity index 83% rename from vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/csv_loader.hpp rename to vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/csv_loader.hpp index ee89e03780b0b..44ba5ac571242 100644 --- a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/csv_loader.hpp +++ b/vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/csv_loader.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef RAW_VEHICLE_CMD_CONVERTER__CSV_LOADER_HPP_ -#define RAW_VEHICLE_CMD_CONVERTER__CSV_LOADER_HPP_ +#ifndef AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__CSV_LOADER_HPP_ +#define AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__CSV_LOADER_HPP_ #include #include @@ -21,7 +21,7 @@ #include #include -namespace raw_vehicle_cmd_converter +namespace autoware::raw_vehicle_cmd_converter { using Table = std::vector>; using Map = std::vector>; @@ -42,6 +42,6 @@ class CSVLoader private: std::string csv_path_; }; -} // namespace raw_vehicle_cmd_converter +} // namespace autoware::raw_vehicle_cmd_converter -#endif // RAW_VEHICLE_CMD_CONVERTER__CSV_LOADER_HPP_ +#endif // AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__CSV_LOADER_HPP_ diff --git a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/node.hpp b/vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/node.hpp similarity index 89% rename from vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/node.hpp rename to vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/node.hpp index d71ff96abade0..9b64c26770e40 100644 --- a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/node.hpp +++ b/vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/node.hpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef RAW_VEHICLE_CMD_CONVERTER__NODE_HPP_ -#define RAW_VEHICLE_CMD_CONVERTER__NODE_HPP_ +#ifndef AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__NODE_HPP_ +#define AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__NODE_HPP_ -#include "raw_vehicle_cmd_converter/accel_map.hpp" -#include "raw_vehicle_cmd_converter/brake_map.hpp" -#include "raw_vehicle_cmd_converter/pid.hpp" -#include "raw_vehicle_cmd_converter/steer_map.hpp" +#include "autoware_raw_vehicle_cmd_converter/accel_map.hpp" +#include "autoware_raw_vehicle_cmd_converter/brake_map.hpp" +#include "autoware_raw_vehicle_cmd_converter/pid.hpp" +#include "autoware_raw_vehicle_cmd_converter/steer_map.hpp" #include "tier4_autoware_utils/ros/logger_level_configure.hpp" #include @@ -34,7 +34,7 @@ #include #include -namespace raw_vehicle_cmd_converter +namespace autoware::raw_vehicle_cmd_converter { using Control = autoware_control_msgs::msg::Control; using tier4_debug_msgs::msg::Float32MultiArrayStamped; @@ -119,6 +119,6 @@ class RawVehicleCommandConverterNode : public rclcpp::Node std::unique_ptr logger_configure_; }; -} // namespace raw_vehicle_cmd_converter +} // namespace autoware::raw_vehicle_cmd_converter -#endif // RAW_VEHICLE_CMD_CONVERTER__NODE_HPP_ +#endif // AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__NODE_HPP_ diff --git a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/pid.hpp b/vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/pid.hpp similarity index 78% rename from vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/pid.hpp rename to vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/pid.hpp index c13de9b332fa3..e9fc0f13d1fc8 100644 --- a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/pid.hpp +++ b/vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/pid.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef RAW_VEHICLE_CMD_CONVERTER__PID_HPP_ -#define RAW_VEHICLE_CMD_CONVERTER__PID_HPP_ +#ifndef AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__PID_HPP_ +#define AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__PID_HPP_ #include #include #include -namespace raw_vehicle_cmd_converter +namespace autoware::raw_vehicle_cmd_converter { class PIDController { @@ -42,17 +42,17 @@ class PIDController private: // parameters - double kp_; - double ki_; - double kd_; - double max_ret_p_; - double min_ret_p_; - double max_ret_i_; - double min_ret_i_; - double max_ret_d_; - double min_ret_d_; - double max_ret_; - double min_ret_; + double kp_{}; + double ki_{}; + double kd_{}; + double max_ret_p_{}; + double min_ret_p_{}; + double max_ret_i_{}; + double min_ret_i_{}; + double max_ret_d_{}; + double min_ret_d_{}; + double max_ret_{}; + double min_ret_{}; // states double error_integral_{0.0}; double prev_error_{0.0}; @@ -60,6 +60,6 @@ class PIDController double invalid_integration_decay_{0.0}; double is_initialized_{false}; }; -} // namespace raw_vehicle_cmd_converter +} // namespace autoware::raw_vehicle_cmd_converter -#endif // RAW_VEHICLE_CMD_CONVERTER__PID_HPP_ +#endif // AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__PID_HPP_ diff --git a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/steer_map.hpp b/vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/steer_map.hpp similarity index 67% rename from vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/steer_map.hpp rename to vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/steer_map.hpp index 7e4a3084d0223..d41bb676ffb47 100644 --- a/vehicle/raw_vehicle_cmd_converter/include/raw_vehicle_cmd_converter/steer_map.hpp +++ b/vehicle/autoware_raw_vehicle_cmd_converter/include/autoware_raw_vehicle_cmd_converter/steer_map.hpp @@ -12,18 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef RAW_VEHICLE_CMD_CONVERTER__STEER_MAP_HPP_ -#define RAW_VEHICLE_CMD_CONVERTER__STEER_MAP_HPP_ +#ifndef AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__STEER_MAP_HPP_ +#define AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__STEER_MAP_HPP_ -#include "raw_vehicle_cmd_converter/csv_loader.hpp" -#include "raw_vehicle_cmd_converter/pid.hpp" +#include "autoware_raw_vehicle_cmd_converter/csv_loader.hpp" +#include "autoware_raw_vehicle_cmd_converter/pid.hpp" #include #include #include -namespace raw_vehicle_cmd_converter +namespace autoware::raw_vehicle_cmd_converter { class SteerMap { @@ -36,8 +36,9 @@ class SteerMap std::vector steer_index_; std::vector output_index_; std::vector> steer_map_; - rclcpp::Logger logger_{rclcpp::get_logger("raw_vehicle_cmd_converter").get_child("steer_map")}; + rclcpp::Logger logger_{ + rclcpp::get_logger("autoware_raw_vehicle_cmd_converter").get_child("steer_map")}; }; -} // namespace raw_vehicle_cmd_converter +} // namespace autoware::raw_vehicle_cmd_converter -#endif // RAW_VEHICLE_CMD_CONVERTER__STEER_MAP_HPP_ +#endif // AUTOWARE_RAW_VEHICLE_CMD_CONVERTER__STEER_MAP_HPP_ diff --git a/vehicle/raw_vehicle_cmd_converter/launch/raw_vehicle_converter.launch.xml b/vehicle/autoware_raw_vehicle_cmd_converter/launch/raw_vehicle_converter.launch.xml similarity index 71% rename from vehicle/raw_vehicle_cmd_converter/launch/raw_vehicle_converter.launch.xml rename to vehicle/autoware_raw_vehicle_cmd_converter/launch/raw_vehicle_converter.launch.xml index 0a9962a7c2a30..735d51e80d5d4 100644 --- a/vehicle/raw_vehicle_cmd_converter/launch/raw_vehicle_converter.launch.xml +++ b/vehicle/autoware_raw_vehicle_cmd_converter/launch/raw_vehicle_converter.launch.xml @@ -5,9 +5,9 @@ - + - + diff --git a/vehicle/raw_vehicle_cmd_converter/package.xml b/vehicle/autoware_raw_vehicle_cmd_converter/package.xml similarity index 91% rename from vehicle/raw_vehicle_cmd_converter/package.xml rename to vehicle/autoware_raw_vehicle_cmd_converter/package.xml index 376a5c74f1cb6..25a329be3a6b9 100644 --- a/vehicle/raw_vehicle_cmd_converter/package.xml +++ b/vehicle/autoware_raw_vehicle_cmd_converter/package.xml @@ -1,9 +1,9 @@ - raw_vehicle_cmd_converter + autoware_raw_vehicle_cmd_converter 0.1.0 - The raw_vehicle_cmd_converter package + The autoware_raw_vehicle_cmd_converter package Takamasa Horibe Tanaka Taiki Makoto Kurihara diff --git a/vehicle/raw_vehicle_cmd_converter/schema/raw_vehicle_cmd_converter.schema.json b/vehicle/autoware_raw_vehicle_cmd_converter/schema/raw_vehicle_cmd_converter.schema.json similarity index 92% rename from vehicle/raw_vehicle_cmd_converter/schema/raw_vehicle_cmd_converter.schema.json rename to vehicle/autoware_raw_vehicle_cmd_converter/schema/raw_vehicle_cmd_converter.schema.json index 4b562f401e09b..1903f8252d656 100644 --- a/vehicle/raw_vehicle_cmd_converter/schema/raw_vehicle_cmd_converter.schema.json +++ b/vehicle/autoware_raw_vehicle_cmd_converter/schema/raw_vehicle_cmd_converter.schema.json @@ -3,23 +3,23 @@ "title": "Parameters for Raw Vehicle Cmd Converter", "type": "object", "definitions": { - "raw_vehicle_cmd_converter": { + "autoware_raw_vehicle_cmd_converter": { "type": "object", "properties": { "csv_path_accel_map": { "type": "string", "description": "path for acceleration map csv file", - "default": "$(find-pkg-share raw_vehicle_cmd_converter)/data/default/accel_map.csv" + "default": "$(find-pkg-share autoware_raw_vehicle_cmd_converter)/data/default/accel_map.csv" }, "csv_path_brake_map": { "type": "string", "description": "path for brake map csv file", - "default": "$(find-pkg-share raw_vehicle_cmd_converter)/data/default/brake_map.csv" + "default": "$(find-pkg-share autoware_raw_vehicle_cmd_converter)/data/default/brake_map.csv" }, "csv_path_steer_map": { "type": "string", "description": "path for steer map csv file", - "default": "$(find-pkg-share raw_vehicle_cmd_converter)/data/default/steer_map.csv" + "default": "$(find-pkg-share autoware_raw_vehicle_cmd_converter)/data/default/steer_map.csv" }, "convert_accel_cmd": { "type": "boolean", @@ -178,7 +178,7 @@ "type": "object", "properties": { "ros__parameters": { - "$ref": "#/definitions/raw_vehicle_cmd_converter" + "$ref": "#/definitions/autoware_raw_vehicle_cmd_converter" } }, "required": ["ros__parameters"] diff --git a/vehicle/raw_vehicle_cmd_converter/scripts/plot_accel_brake_map.py b/vehicle/autoware_raw_vehicle_cmd_converter/scripts/plot_accel_brake_map.py similarity index 97% rename from vehicle/raw_vehicle_cmd_converter/scripts/plot_accel_brake_map.py rename to vehicle/autoware_raw_vehicle_cmd_converter/scripts/plot_accel_brake_map.py index 62979fce89bcf..95b2271239f8f 100755 --- a/vehicle/raw_vehicle_cmd_converter/scripts/plot_accel_brake_map.py +++ b/vehicle/autoware_raw_vehicle_cmd_converter/scripts/plot_accel_brake_map.py @@ -23,7 +23,7 @@ def main(dimension, map_dir, accel_or_brake): if map_dir is None: - script_dir = get_package_share_directory("raw_vehicle_cmd_converter") + script_dir = get_package_share_directory("autoware_raw_vehicle_cmd_converter") csv_dir = script_dir + "/data/default" else: csv_dir = map_dir diff --git a/vehicle/raw_vehicle_cmd_converter/src/accel_map.cpp b/vehicle/autoware_raw_vehicle_cmd_converter/src/accel_map.cpp similarity index 95% rename from vehicle/raw_vehicle_cmd_converter/src/accel_map.cpp rename to vehicle/autoware_raw_vehicle_cmd_converter/src/accel_map.cpp index 42c63b152e4f4..236aa7dc451c3 100644 --- a/vehicle/raw_vehicle_cmd_converter/src/accel_map.cpp +++ b/vehicle/autoware_raw_vehicle_cmd_converter/src/accel_map.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "raw_vehicle_cmd_converter/accel_map.hpp" +#include "autoware_raw_vehicle_cmd_converter/accel_map.hpp" #include "interpolation/linear_interpolation.hpp" @@ -23,7 +23,7 @@ using namespace std::literals::chrono_literals; -namespace raw_vehicle_cmd_converter +namespace autoware::raw_vehicle_cmd_converter { bool AccelMap::readAccelMapFromCSV(const std::string & csv_path, const bool validation) { @@ -83,4 +83,4 @@ bool AccelMap::getAcceleration(const double throttle, const double vel, double & return true; } -} // namespace raw_vehicle_cmd_converter +} // namespace autoware::raw_vehicle_cmd_converter diff --git a/vehicle/raw_vehicle_cmd_converter/src/brake_map.cpp b/vehicle/autoware_raw_vehicle_cmd_converter/src/brake_map.cpp similarity index 95% rename from vehicle/raw_vehicle_cmd_converter/src/brake_map.cpp rename to vehicle/autoware_raw_vehicle_cmd_converter/src/brake_map.cpp index 68d89474f3ca6..ae0f8e5f41b1c 100644 --- a/vehicle/raw_vehicle_cmd_converter/src/brake_map.cpp +++ b/vehicle/autoware_raw_vehicle_cmd_converter/src/brake_map.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "raw_vehicle_cmd_converter/brake_map.hpp" +#include "autoware_raw_vehicle_cmd_converter/brake_map.hpp" #include "interpolation/linear_interpolation.hpp" @@ -20,7 +20,7 @@ #include #include -namespace raw_vehicle_cmd_converter +namespace autoware::raw_vehicle_cmd_converter { bool BrakeMap::readBrakeMapFromCSV(const std::string & csv_path, const bool validation) { @@ -94,4 +94,4 @@ bool BrakeMap::getAcceleration(const double brake, const double vel, double & ac return true; } -} // namespace raw_vehicle_cmd_converter +} // namespace autoware::raw_vehicle_cmd_converter diff --git a/vehicle/raw_vehicle_cmd_converter/src/csv_loader.cpp b/vehicle/autoware_raw_vehicle_cmd_converter/src/csv_loader.cpp similarity index 96% rename from vehicle/raw_vehicle_cmd_converter/src/csv_loader.cpp rename to vehicle/autoware_raw_vehicle_cmd_converter/src/csv_loader.cpp index a6a331a0e7324..8044a88bc9898 100644 --- a/vehicle/raw_vehicle_cmd_converter/src/csv_loader.cpp +++ b/vehicle/autoware_raw_vehicle_cmd_converter/src/csv_loader.cpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "raw_vehicle_cmd_converter/csv_loader.hpp" +#include "autoware_raw_vehicle_cmd_converter/csv_loader.hpp" #include #include #include #include -namespace raw_vehicle_cmd_converter +namespace autoware::raw_vehicle_cmd_converter { CSVLoader::CSVLoader(const std::string & csv_path) { @@ -150,4 +150,4 @@ double CSVLoader::clampValue( return val; } -} // namespace raw_vehicle_cmd_converter +} // namespace autoware::raw_vehicle_cmd_converter diff --git a/vehicle/raw_vehicle_cmd_converter/src/node.cpp b/vehicle/autoware_raw_vehicle_cmd_converter/src/node.cpp similarity index 96% rename from vehicle/raw_vehicle_cmd_converter/src/node.cpp rename to vehicle/autoware_raw_vehicle_cmd_converter/src/node.cpp index 91c668f63dfbd..044d698e8b9fc 100644 --- a/vehicle/raw_vehicle_cmd_converter/src/node.cpp +++ b/vehicle/autoware_raw_vehicle_cmd_converter/src/node.cpp @@ -12,18 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "raw_vehicle_cmd_converter/node.hpp" +#include "autoware_raw_vehicle_cmd_converter/node.hpp" #include #include #include #include -namespace raw_vehicle_cmd_converter +namespace autoware::raw_vehicle_cmd_converter { RawVehicleCommandConverterNode::RawVehicleCommandConverterNode( const rclcpp::NodeOptions & node_options) -: Node("raw_vehicle_cmd_converter_node", node_options) +: Node("autoware_raw_vehicle_cmd_converter_node", node_options) { using std::placeholders::_1; /* parameters for accel/brake map */ @@ -221,7 +221,7 @@ void RawVehicleCommandConverterNode::onControlCmd(const Control::ConstSharedPtr control_cmd_ptr_ = msg; publishActuationCmd(); } -} // namespace raw_vehicle_cmd_converter +} // namespace autoware::raw_vehicle_cmd_converter #include -RCLCPP_COMPONENTS_REGISTER_NODE(raw_vehicle_cmd_converter::RawVehicleCommandConverterNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::raw_vehicle_cmd_converter::RawVehicleCommandConverterNode) diff --git a/vehicle/raw_vehicle_cmd_converter/src/pid.cpp b/vehicle/autoware_raw_vehicle_cmd_converter/src/pid.cpp similarity index 95% rename from vehicle/raw_vehicle_cmd_converter/src/pid.cpp rename to vehicle/autoware_raw_vehicle_cmd_converter/src/pid.cpp index 216382be3dc81..ebc608cd61fad 100644 --- a/vehicle/raw_vehicle_cmd_converter/src/pid.cpp +++ b/vehicle/autoware_raw_vehicle_cmd_converter/src/pid.cpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "raw_vehicle_cmd_converter/pid.hpp" +#include "autoware_raw_vehicle_cmd_converter/pid.hpp" #include #include -namespace raw_vehicle_cmd_converter +namespace autoware::raw_vehicle_cmd_converter { double PIDController::calculateFB( @@ -100,4 +100,4 @@ void PIDController::reset() prev_error_ = 0; is_first_time_ = true; } -} // namespace raw_vehicle_cmd_converter +} // namespace autoware::raw_vehicle_cmd_converter diff --git a/vehicle/raw_vehicle_cmd_converter/src/steer_map.cpp b/vehicle/autoware_raw_vehicle_cmd_converter/src/steer_map.cpp similarity index 91% rename from vehicle/raw_vehicle_cmd_converter/src/steer_map.cpp rename to vehicle/autoware_raw_vehicle_cmd_converter/src/steer_map.cpp index e050a1beba3ae..6abe8adfdc9e3 100644 --- a/vehicle/raw_vehicle_cmd_converter/src/steer_map.cpp +++ b/vehicle/autoware_raw_vehicle_cmd_converter/src/steer_map.cpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "raw_vehicle_cmd_converter/steer_map.hpp" +#include "autoware_raw_vehicle_cmd_converter/steer_map.hpp" #include "interpolation/linear_interpolation.hpp" #include #include -namespace raw_vehicle_cmd_converter +namespace autoware::raw_vehicle_cmd_converter { bool SteerMap::readSteerMapFromCSV(const std::string & csv_path, const bool validation) @@ -53,4 +53,4 @@ void SteerMap::getSteer(const double steer_rate, const double steer, double & ou CSVLoader::clampValue(steer_rate, steer_rate_interp, "steer: steer_rate"); output = interpolation::lerp(steer_rate_interp, output_index_, clamped_steer_rate); } -} // namespace raw_vehicle_cmd_converter +} // namespace autoware::raw_vehicle_cmd_converter diff --git a/vehicle/raw_vehicle_cmd_converter/test/map_data/test_1col_map.csv b/vehicle/autoware_raw_vehicle_cmd_converter/test/map_data/test_1col_map.csv similarity index 100% rename from vehicle/raw_vehicle_cmd_converter/test/map_data/test_1col_map.csv rename to vehicle/autoware_raw_vehicle_cmd_converter/test/map_data/test_1col_map.csv diff --git a/vehicle/raw_vehicle_cmd_converter/test/map_data/test_accel_map.csv b/vehicle/autoware_raw_vehicle_cmd_converter/test/map_data/test_accel_map.csv similarity index 100% rename from vehicle/raw_vehicle_cmd_converter/test/map_data/test_accel_map.csv rename to vehicle/autoware_raw_vehicle_cmd_converter/test/map_data/test_accel_map.csv diff --git a/vehicle/raw_vehicle_cmd_converter/test/map_data/test_brake_map.csv b/vehicle/autoware_raw_vehicle_cmd_converter/test/map_data/test_brake_map.csv similarity index 100% rename from vehicle/raw_vehicle_cmd_converter/test/map_data/test_brake_map.csv rename to vehicle/autoware_raw_vehicle_cmd_converter/test/map_data/test_brake_map.csv diff --git a/vehicle/raw_vehicle_cmd_converter/test/map_data/test_inconsistent_rows_map.csv b/vehicle/autoware_raw_vehicle_cmd_converter/test/map_data/test_inconsistent_rows_map.csv similarity index 100% rename from vehicle/raw_vehicle_cmd_converter/test/map_data/test_inconsistent_rows_map.csv rename to vehicle/autoware_raw_vehicle_cmd_converter/test/map_data/test_inconsistent_rows_map.csv diff --git a/vehicle/raw_vehicle_cmd_converter/test/map_data/test_not_interpolatable.csv b/vehicle/autoware_raw_vehicle_cmd_converter/test/map_data/test_not_interpolatable.csv similarity index 100% rename from vehicle/raw_vehicle_cmd_converter/test/map_data/test_not_interpolatable.csv rename to vehicle/autoware_raw_vehicle_cmd_converter/test/map_data/test_not_interpolatable.csv diff --git a/vehicle/raw_vehicle_cmd_converter/test/map_data/test_steer_map.csv b/vehicle/autoware_raw_vehicle_cmd_converter/test/map_data/test_steer_map.csv similarity index 100% rename from vehicle/raw_vehicle_cmd_converter/test/map_data/test_steer_map.csv rename to vehicle/autoware_raw_vehicle_cmd_converter/test/map_data/test_steer_map.csv diff --git a/vehicle/raw_vehicle_cmd_converter/test/test_raw_vehicle_cmd_converter.cpp b/vehicle/autoware_raw_vehicle_cmd_converter/test/test_autoware_raw_vehicle_cmd_converter.cpp similarity index 92% rename from vehicle/raw_vehicle_cmd_converter/test/test_raw_vehicle_cmd_converter.cpp rename to vehicle/autoware_raw_vehicle_cmd_converter/test/test_autoware_raw_vehicle_cmd_converter.cpp index 9f035b303e1a9..746f872789b07 100644 --- a/vehicle/raw_vehicle_cmd_converter/test/test_raw_vehicle_cmd_converter.cpp +++ b/vehicle/autoware_raw_vehicle_cmd_converter/test/test_autoware_raw_vehicle_cmd_converter.cpp @@ -13,11 +13,11 @@ // limitations under the License. #include "ament_index_cpp/get_package_share_directory.hpp" +#include "autoware_raw_vehicle_cmd_converter/accel_map.hpp" +#include "autoware_raw_vehicle_cmd_converter/brake_map.hpp" +#include "autoware_raw_vehicle_cmd_converter/pid.hpp" +#include "autoware_raw_vehicle_cmd_converter/steer_map.hpp" #include "gtest/gtest.h" -#include "raw_vehicle_cmd_converter/accel_map.hpp" -#include "raw_vehicle_cmd_converter/brake_map.hpp" -#include "raw_vehicle_cmd_converter/pid.hpp" -#include "raw_vehicle_cmd_converter/steer_map.hpp" #include #include @@ -48,14 +48,15 @@ * */ -using raw_vehicle_cmd_converter::AccelMap; -using raw_vehicle_cmd_converter::BrakeMap; -using raw_vehicle_cmd_converter::PIDController; -using raw_vehicle_cmd_converter::SteerMap; +using autoware::raw_vehicle_cmd_converter::AccelMap; +using autoware::raw_vehicle_cmd_converter::BrakeMap; +using autoware::raw_vehicle_cmd_converter::PIDController; +using autoware::raw_vehicle_cmd_converter::SteerMap; double epsilon = 1e-4; // may throw PackageNotFoundError exception for invalid package const auto map_path = - ament_index_cpp::get_package_share_directory("raw_vehicle_cmd_converter") + "/test/map_data/"; + ament_index_cpp::get_package_share_directory("autoware_raw_vehicle_cmd_converter") + + "/test/map_data/"; bool loadAccelMapData(AccelMap & accel_map) { @@ -93,7 +94,8 @@ TEST(ConverterTests, LoadExampleMap) BrakeMap brake_map; SteerMap steer_map; const auto data_path = - ament_index_cpp::get_package_share_directory("raw_vehicle_cmd_converter") + "/data/default/"; + ament_index_cpp::get_package_share_directory("autoware_raw_vehicle_cmd_converter") + + "/data/default/"; // for invalid path EXPECT_TRUE(accel_map.readAccelMapFromCSV(data_path + "accel_map.csv", true)); EXPECT_TRUE(brake_map.readBrakeMapFromCSV(data_path + "brake_map.csv", true)); diff --git a/vehicle/external_cmd_converter/include/external_cmd_converter/node.hpp b/vehicle/external_cmd_converter/include/external_cmd_converter/node.hpp index 5fb1f5efc38fd..b491cb3db5484 100644 --- a/vehicle/external_cmd_converter/include/external_cmd_converter/node.hpp +++ b/vehicle/external_cmd_converter/include/external_cmd_converter/node.hpp @@ -17,9 +17,9 @@ #include "tier4_autoware_utils/ros/polling_subscriber.hpp" +#include +#include #include -#include -#include #include #include @@ -37,9 +37,9 @@ namespace external_cmd_converter using GearCommand = autoware_vehicle_msgs::msg::GearCommand; using autoware_control_msgs::msg::Control; using ExternalControlCommand = tier4_external_api_msgs::msg::ControlCommandStamped; +using autoware::raw_vehicle_cmd_converter::AccelMap; +using autoware::raw_vehicle_cmd_converter::BrakeMap; using nav_msgs::msg::Odometry; -using raw_vehicle_cmd_converter::AccelMap; -using raw_vehicle_cmd_converter::BrakeMap; using tier4_control_msgs::msg::GateMode; class ExternalCmdConverterNode : public rclcpp::Node diff --git a/vehicle/external_cmd_converter/launch/external_cmd_converter.launch.py b/vehicle/external_cmd_converter/launch/external_cmd_converter.launch.py index 77dbb99d9b477..e3f5ec20e6165 100644 --- a/vehicle/external_cmd_converter/launch/external_cmd_converter.launch.py +++ b/vehicle/external_cmd_converter/launch/external_cmd_converter.launch.py @@ -33,7 +33,7 @@ def generate_launch_description(): DeclareLaunchArgument( "csv_path_accel_map", default_value=[ - FindPackageShare("raw_vehicle_cmd_converter"), + FindPackageShare("autoware_raw_vehicle_cmd_converter"), "/data/default/accel_map.csv", ], # noqa: E501 description="csv file path for accel map", @@ -41,7 +41,7 @@ def generate_launch_description(): DeclareLaunchArgument( "csv_path_brake_map", default_value=[ - FindPackageShare("raw_vehicle_cmd_converter"), + FindPackageShare("autoware_raw_vehicle_cmd_converter"), "/data/default/brake_map.csv", ], # noqa: E501 description="csv file path for brake map", diff --git a/vehicle/external_cmd_converter/launch/external_cmd_converter.launch.xml b/vehicle/external_cmd_converter/launch/external_cmd_converter.launch.xml index 856b534af81da..b2ac46297b044 100644 --- a/vehicle/external_cmd_converter/launch/external_cmd_converter.launch.xml +++ b/vehicle/external_cmd_converter/launch/external_cmd_converter.launch.xml @@ -2,8 +2,8 @@ - - + + diff --git a/vehicle/external_cmd_converter/package.xml b/vehicle/external_cmd_converter/package.xml index 72b0eb2706a3a..5627616971e26 100644 --- a/vehicle/external_cmd_converter/package.xml +++ b/vehicle/external_cmd_converter/package.xml @@ -14,11 +14,11 @@ autoware_cmake autoware_control_msgs + autoware_raw_vehicle_cmd_converter autoware_vehicle_msgs diagnostic_updater geometry_msgs nav_msgs - raw_vehicle_cmd_converter rclcpp rclcpp_components std_msgs diff --git a/vehicle/raw_vehicle_cmd_converter/CMakeLists.txt b/vehicle/raw_vehicle_cmd_converter/CMakeLists.txt deleted file mode 100644 index d253b2315465e..0000000000000 --- a/vehicle/raw_vehicle_cmd_converter/CMakeLists.txt +++ /dev/null @@ -1,44 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(raw_vehicle_cmd_converter) - -find_package(autoware_cmake REQUIRED) -autoware_package() - -ament_auto_add_library(actuation_map_converter SHARED - src/accel_map.cpp - src/brake_map.cpp - src/steer_map.cpp - src/csv_loader.cpp - src/pid.cpp -) - -ament_auto_add_library(raw_vehicle_cmd_converter_node_component SHARED - src/node.cpp -) - -target_link_libraries(raw_vehicle_cmd_converter_node_component actuation_map_converter) - -rclcpp_components_register_node(raw_vehicle_cmd_converter_node_component - PLUGIN "raw_vehicle_cmd_converter::RawVehicleCommandConverterNode" - EXECUTABLE raw_vehicle_cmd_converter_node -) - -if(BUILD_TESTING) - set(TEST_SOURCES - test/test_raw_vehicle_cmd_converter.cpp - ) - set(TEST_RAW_VEHICLE_CMD_CONVERTER_EXE test_raw_vehicle_cmd_converter) - ament_add_ros_isolated_gtest(${TEST_RAW_VEHICLE_CMD_CONVERTER_EXE} ${TEST_SOURCES}) - target_link_libraries(${TEST_RAW_VEHICLE_CMD_CONVERTER_EXE} actuation_map_converter raw_vehicle_cmd_converter_node_component) -endif() - -ament_auto_package(INSTALL_TO_SHARE - config - data - launch - test -) - -install(PROGRAMS scripts/plot_accel_brake_map.py - DESTINATION lib/${PROJECT_NAME} -) From 6584f27ff3859b9fc39e8d09e6c9ef2534999633 Mon Sep 17 00:00:00 2001 From: Esteve Fernandez <33620+esteve@users.noreply.github.com> Date: Mon, 10 Jun 2024 12:37:11 +0200 Subject: [PATCH 078/142] refactor(behavior_velocity_traffic_light_module): prefix package and namespace with autoware (#7162) refactor(behavior_velocity_traffic_light_module): prefix package and namespace with autoware_ Signed-off-by: Esteve Fernandez --- .github/CODEOWNERS | 2 +- planning/.pages | 2 +- .../autoware_behavior_velocity_planner/README.md | 2 +- .../autoware_behavior_velocity_planner/package.xml | 2 +- .../test/src/test_node_interface.cpp | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/traffic_light.param.yaml | 0 .../docs/crosswalk.png | Bin .../docs/traffic_light.svg | 0 .../docs/traffic_light_dilemma.svg | 0 .../package.xml | 4 ++-- .../plugins.xml | 2 +- .../src/debug.cpp | 0 .../src/manager.cpp | 0 .../src/manager.hpp | 0 .../src/scene.cpp | 0 .../src/scene.hpp | 0 18 files changed, 9 insertions(+), 9 deletions(-) rename planning/{behavior_velocity_traffic_light_module => autoware_behavior_velocity_traffic_light_module}/CMakeLists.txt (85%) rename planning/{behavior_velocity_traffic_light_module => autoware_behavior_velocity_traffic_light_module}/README.md (100%) rename planning/{behavior_velocity_traffic_light_module => autoware_behavior_velocity_traffic_light_module}/config/traffic_light.param.yaml (100%) rename planning/{behavior_velocity_traffic_light_module => autoware_behavior_velocity_traffic_light_module}/docs/crosswalk.png (100%) rename planning/{behavior_velocity_traffic_light_module => autoware_behavior_velocity_traffic_light_module}/docs/traffic_light.svg (100%) rename planning/{behavior_velocity_traffic_light_module => autoware_behavior_velocity_traffic_light_module}/docs/traffic_light_dilemma.svg (100%) rename planning/{behavior_velocity_traffic_light_module => autoware_behavior_velocity_traffic_light_module}/package.xml (91%) rename planning/{behavior_velocity_traffic_light_module => autoware_behavior_velocity_traffic_light_module}/plugins.xml (71%) rename planning/{behavior_velocity_traffic_light_module => autoware_behavior_velocity_traffic_light_module}/src/debug.cpp (100%) rename planning/{behavior_velocity_traffic_light_module => autoware_behavior_velocity_traffic_light_module}/src/manager.cpp (100%) rename planning/{behavior_velocity_traffic_light_module => autoware_behavior_velocity_traffic_light_module}/src/manager.hpp (100%) rename planning/{behavior_velocity_traffic_light_module => autoware_behavior_velocity_traffic_light_module}/src/scene.cpp (100%) rename planning/{behavior_velocity_traffic_light_module => autoware_behavior_velocity_traffic_light_module}/src/scene.hpp (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ef79303f95e94..a6e9d336479f5 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -153,6 +153,7 @@ planning/autoware_behavior_velocity_planner/** kosuke.takeuchi@tier4.jp kyoichi. planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_stop_line_module/** fumiya.watanabe@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp zhe.shen@tier4.jp planning/autoware_behavior_velocity_template_module/** daniel.sanchez@tier4.jp +planning/autoware_behavior_velocity_traffic_light_module/** mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_virtual_traffic_light_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_walkway_module/** satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/autoware_costmap_generator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp @@ -182,7 +183,6 @@ planning/autoware_behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi planning/autoware_behavior_velocity_planner_common/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_speed_bump_module/** mdogru@leodrive.ai shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp -planning/behavior_velocity_traffic_light_module/** mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/freespace_planner/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/autoware_freespace_planning_algorithms/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/mission_planner/** isamu.takagi@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp ryohsuke.mitsudome@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp diff --git a/planning/.pages b/planning/.pages index 727bed582532c..f6ee9a2d8d38b 100644 --- a/planning/.pages +++ b/planning/.pages @@ -32,7 +32,7 @@ nav: - 'Run Out': planning/autoware_behavior_velocity_run_out_module - 'Speed Bump': planning/behavior_velocity_speed_bump_module - 'Stop Line': planning/autoware_behavior_velocity_stop_line_module - - 'Traffic Light': planning/behavior_velocity_traffic_light_module + - 'Traffic Light': planning/autoware_behavior_velocity_traffic_light_module - 'Virtual Traffic Light': planning/autoware_behavior_velocity_virtual_traffic_light_module - 'Walkway': planning/autoware_behavior_velocity_walkway_module - 'Parking': diff --git a/planning/autoware_behavior_velocity_planner/README.md b/planning/autoware_behavior_velocity_planner/README.md index c09fa8105c25b..83dd33c4bb927 100644 --- a/planning/autoware_behavior_velocity_planner/README.md +++ b/planning/autoware_behavior_velocity_planner/README.md @@ -15,7 +15,7 @@ It loads modules as plugins. Please refer to the links listed below for detail o - [MergeFromPrivate](../behavior_velocity_intersection_module/README.md#merge-from-private) - [Stop Line](../autoware_behavior_velocity_stop_line_module/README.md) - [Virtual Traffic Light](../autoware_behavior_velocity_virtual_traffic_light_module/README.md) -- [Traffic Light](../behavior_velocity_traffic_light_module/README.md) +- [Traffic Light](../autoware_behavior_velocity_traffic_light_module/README.md) - [Occlusion Spot](../autoware_behavior_velocity_occlusion_spot_module/README.md) - [No Stopping Area](../behavior_velocity_no_stopping_area_module/README.md) - [Run Out](../autoware_behavior_velocity_run_out_module/README.md) diff --git a/planning/autoware_behavior_velocity_planner/package.xml b/planning/autoware_behavior_velocity_planner/package.xml index 7c66d6294a9e5..8ca1127484a34 100644 --- a/planning/autoware_behavior_velocity_planner/package.xml +++ b/planning/autoware_behavior_velocity_planner/package.xml @@ -70,6 +70,7 @@ autoware_behavior_velocity_occlusion_spot_module autoware_behavior_velocity_run_out_module autoware_behavior_velocity_stop_line_module + autoware_behavior_velocity_traffic_light_module autoware_behavior_velocity_virtual_traffic_light_module autoware_behavior_velocity_walkway_module autoware_lint_common @@ -78,7 +79,6 @@ behavior_velocity_no_drivable_lane_module behavior_velocity_no_stopping_area_module behavior_velocity_speed_bump_module - behavior_velocity_traffic_light_module rosidl_interface_packages diff --git a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp index cd8e9ca4bbfe8..72a8514db4bad 100644 --- a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp +++ b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp @@ -105,7 +105,7 @@ std::shared_ptr generateNode() get_behavior_velocity_module_config("run_out"), get_behavior_velocity_module_config_no_prefix("speed_bump"), get_behavior_velocity_module_config("stop_line"), - get_behavior_velocity_module_config_no_prefix("traffic_light"), + get_behavior_velocity_module_config("traffic_light"), get_behavior_velocity_module_config("virtual_traffic_light"), get_behavior_velocity_module_config_no_prefix("no_drivable_lane")}); diff --git a/planning/behavior_velocity_traffic_light_module/CMakeLists.txt b/planning/autoware_behavior_velocity_traffic_light_module/CMakeLists.txt similarity index 85% rename from planning/behavior_velocity_traffic_light_module/CMakeLists.txt rename to planning/autoware_behavior_velocity_traffic_light_module/CMakeLists.txt index 5737802408996..60cc9f93a02a5 100644 --- a/planning/behavior_velocity_traffic_light_module/CMakeLists.txt +++ b/planning/autoware_behavior_velocity_traffic_light_module/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(behavior_velocity_traffic_light_module) +project(autoware_behavior_velocity_traffic_light_module) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/planning/behavior_velocity_traffic_light_module/README.md b/planning/autoware_behavior_velocity_traffic_light_module/README.md similarity index 100% rename from planning/behavior_velocity_traffic_light_module/README.md rename to planning/autoware_behavior_velocity_traffic_light_module/README.md diff --git a/planning/behavior_velocity_traffic_light_module/config/traffic_light.param.yaml b/planning/autoware_behavior_velocity_traffic_light_module/config/traffic_light.param.yaml similarity index 100% rename from planning/behavior_velocity_traffic_light_module/config/traffic_light.param.yaml rename to planning/autoware_behavior_velocity_traffic_light_module/config/traffic_light.param.yaml diff --git a/planning/behavior_velocity_traffic_light_module/docs/crosswalk.png b/planning/autoware_behavior_velocity_traffic_light_module/docs/crosswalk.png similarity index 100% rename from planning/behavior_velocity_traffic_light_module/docs/crosswalk.png rename to planning/autoware_behavior_velocity_traffic_light_module/docs/crosswalk.png diff --git a/planning/behavior_velocity_traffic_light_module/docs/traffic_light.svg b/planning/autoware_behavior_velocity_traffic_light_module/docs/traffic_light.svg similarity index 100% rename from planning/behavior_velocity_traffic_light_module/docs/traffic_light.svg rename to planning/autoware_behavior_velocity_traffic_light_module/docs/traffic_light.svg diff --git a/planning/behavior_velocity_traffic_light_module/docs/traffic_light_dilemma.svg b/planning/autoware_behavior_velocity_traffic_light_module/docs/traffic_light_dilemma.svg similarity index 100% rename from planning/behavior_velocity_traffic_light_module/docs/traffic_light_dilemma.svg rename to planning/autoware_behavior_velocity_traffic_light_module/docs/traffic_light_dilemma.svg diff --git a/planning/behavior_velocity_traffic_light_module/package.xml b/planning/autoware_behavior_velocity_traffic_light_module/package.xml similarity index 91% rename from planning/behavior_velocity_traffic_light_module/package.xml rename to planning/autoware_behavior_velocity_traffic_light_module/package.xml index 067dcaca6a638..7b86199c497f1 100644 --- a/planning/behavior_velocity_traffic_light_module/package.xml +++ b/planning/autoware_behavior_velocity_traffic_light_module/package.xml @@ -1,9 +1,9 @@ - behavior_velocity_traffic_light_module + autoware_behavior_velocity_traffic_light_module 0.1.0 - The behavior_velocity_traffic_light_module package + The autoware_behavior_velocity_traffic_light_module package Satoshi Ota Tomoya Kimura diff --git a/planning/behavior_velocity_traffic_light_module/plugins.xml b/planning/autoware_behavior_velocity_traffic_light_module/plugins.xml similarity index 71% rename from planning/behavior_velocity_traffic_light_module/plugins.xml rename to planning/autoware_behavior_velocity_traffic_light_module/plugins.xml index 9b5e84fff982d..bba2d992a8c3b 100644 --- a/planning/behavior_velocity_traffic_light_module/plugins.xml +++ b/planning/autoware_behavior_velocity_traffic_light_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_traffic_light_module/src/debug.cpp b/planning/autoware_behavior_velocity_traffic_light_module/src/debug.cpp similarity index 100% rename from planning/behavior_velocity_traffic_light_module/src/debug.cpp rename to planning/autoware_behavior_velocity_traffic_light_module/src/debug.cpp diff --git a/planning/behavior_velocity_traffic_light_module/src/manager.cpp b/planning/autoware_behavior_velocity_traffic_light_module/src/manager.cpp similarity index 100% rename from planning/behavior_velocity_traffic_light_module/src/manager.cpp rename to planning/autoware_behavior_velocity_traffic_light_module/src/manager.cpp diff --git a/planning/behavior_velocity_traffic_light_module/src/manager.hpp b/planning/autoware_behavior_velocity_traffic_light_module/src/manager.hpp similarity index 100% rename from planning/behavior_velocity_traffic_light_module/src/manager.hpp rename to planning/autoware_behavior_velocity_traffic_light_module/src/manager.hpp diff --git a/planning/behavior_velocity_traffic_light_module/src/scene.cpp b/planning/autoware_behavior_velocity_traffic_light_module/src/scene.cpp similarity index 100% rename from planning/behavior_velocity_traffic_light_module/src/scene.cpp rename to planning/autoware_behavior_velocity_traffic_light_module/src/scene.cpp diff --git a/planning/behavior_velocity_traffic_light_module/src/scene.hpp b/planning/autoware_behavior_velocity_traffic_light_module/src/scene.hpp similarity index 100% rename from planning/behavior_velocity_traffic_light_module/src/scene.hpp rename to planning/autoware_behavior_velocity_traffic_light_module/src/scene.hpp From c02a669bc2b3e54fb91247313a5fa75483ff0ddc Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Mon, 10 Jun 2024 19:44:29 +0900 Subject: [PATCH 079/142] fix(autoware_control_validator): fix vehicle info utils (#7417) Signed-off-by: Fumiya Watanabe --- control/autoware_control_validator/src/control_validator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/control/autoware_control_validator/src/control_validator.cpp b/control/autoware_control_validator/src/control_validator.cpp index e056a32437938..a0873f93c1e16 100644 --- a/control/autoware_control_validator/src/control_validator.cpp +++ b/control/autoware_control_validator/src/control_validator.cpp @@ -61,7 +61,7 @@ void ControlValidator::setupParameters() } try { - vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtil(*this).getVehicleInfo(); + vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); } catch (...) { RCLCPP_ERROR(get_logger(), "failed to get vehicle info. use default value."); vehicle_info_.front_overhang_m = 0.5; From 7227175d9a37293161f8fe0edc74b7b85a3a0007 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Mon, 10 Jun 2024 19:46:08 +0900 Subject: [PATCH 080/142] refactor(planning_validator)!: rename directory name (#7411) change directory name Signed-off-by: kyoichi-sugahara --- .../CMakeLists.txt | 0 .../{planning_validator => autoware_planning_validator}/README.md | 0 .../config/planning_validator.param.yaml | 0 .../config/planning_validator_plotjugler_config.xml | 0 .../image/planning_validator.drawio.svg | 0 .../include/autoware_planning_validator/debug_marker.hpp | 0 .../include/autoware_planning_validator/planning_validator.hpp | 0 .../include/autoware_planning_validator/utils.hpp | 0 .../launch/invalid_trajectory_publisher.launch.xml | 0 .../launch/planning_validator.launch.xml | 0 .../msg/PlanningValidatorStatus.msg | 0 .../package.xml | 0 .../src/debug_marker.cpp | 0 .../invalid_trajectory_publisher/invalid_trajectory_publisher.cpp | 0 .../invalid_trajectory_publisher/invalid_trajectory_publisher.hpp | 0 .../src/planning_validator.cpp | 0 .../src/utils.cpp | 0 .../test/src/test_main.cpp | 0 .../test/src/test_parameter.hpp | 0 .../test/src/test_planning_validator_functions.cpp | 0 .../test/src/test_planning_validator_helper.cpp | 0 .../test/src/test_planning_validator_helper.hpp | 0 .../test/src/test_planning_validator_node_interface.cpp | 0 .../test/src/test_planning_validator_pubsub.cpp | 0 24 files changed, 0 insertions(+), 0 deletions(-) rename planning/{planning_validator => autoware_planning_validator}/CMakeLists.txt (100%) rename planning/{planning_validator => autoware_planning_validator}/README.md (100%) rename planning/{planning_validator => autoware_planning_validator}/config/planning_validator.param.yaml (100%) rename planning/{planning_validator => autoware_planning_validator}/config/planning_validator_plotjugler_config.xml (100%) rename planning/{planning_validator => autoware_planning_validator}/image/planning_validator.drawio.svg (100%) rename planning/{planning_validator => autoware_planning_validator}/include/autoware_planning_validator/debug_marker.hpp (100%) rename planning/{planning_validator => autoware_planning_validator}/include/autoware_planning_validator/planning_validator.hpp (100%) rename planning/{planning_validator => autoware_planning_validator}/include/autoware_planning_validator/utils.hpp (100%) rename planning/{planning_validator => autoware_planning_validator}/launch/invalid_trajectory_publisher.launch.xml (100%) rename planning/{planning_validator => autoware_planning_validator}/launch/planning_validator.launch.xml (100%) rename planning/{planning_validator => autoware_planning_validator}/msg/PlanningValidatorStatus.msg (100%) rename planning/{planning_validator => autoware_planning_validator}/package.xml (100%) rename planning/{planning_validator => autoware_planning_validator}/src/debug_marker.cpp (100%) rename planning/{planning_validator => autoware_planning_validator}/src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp (100%) rename planning/{planning_validator => autoware_planning_validator}/src/invalid_trajectory_publisher/invalid_trajectory_publisher.hpp (100%) rename planning/{planning_validator => autoware_planning_validator}/src/planning_validator.cpp (100%) rename planning/{planning_validator => autoware_planning_validator}/src/utils.cpp (100%) rename planning/{planning_validator => autoware_planning_validator}/test/src/test_main.cpp (100%) rename planning/{planning_validator => autoware_planning_validator}/test/src/test_parameter.hpp (100%) rename planning/{planning_validator => autoware_planning_validator}/test/src/test_planning_validator_functions.cpp (100%) rename planning/{planning_validator => autoware_planning_validator}/test/src/test_planning_validator_helper.cpp (100%) rename planning/{planning_validator => autoware_planning_validator}/test/src/test_planning_validator_helper.hpp (100%) rename planning/{planning_validator => autoware_planning_validator}/test/src/test_planning_validator_node_interface.cpp (100%) rename planning/{planning_validator => autoware_planning_validator}/test/src/test_planning_validator_pubsub.cpp (100%) diff --git a/planning/planning_validator/CMakeLists.txt b/planning/autoware_planning_validator/CMakeLists.txt similarity index 100% rename from planning/planning_validator/CMakeLists.txt rename to planning/autoware_planning_validator/CMakeLists.txt diff --git a/planning/planning_validator/README.md b/planning/autoware_planning_validator/README.md similarity index 100% rename from planning/planning_validator/README.md rename to planning/autoware_planning_validator/README.md diff --git a/planning/planning_validator/config/planning_validator.param.yaml b/planning/autoware_planning_validator/config/planning_validator.param.yaml similarity index 100% rename from planning/planning_validator/config/planning_validator.param.yaml rename to planning/autoware_planning_validator/config/planning_validator.param.yaml diff --git a/planning/planning_validator/config/planning_validator_plotjugler_config.xml b/planning/autoware_planning_validator/config/planning_validator_plotjugler_config.xml similarity index 100% rename from planning/planning_validator/config/planning_validator_plotjugler_config.xml rename to planning/autoware_planning_validator/config/planning_validator_plotjugler_config.xml diff --git a/planning/planning_validator/image/planning_validator.drawio.svg b/planning/autoware_planning_validator/image/planning_validator.drawio.svg similarity index 100% rename from planning/planning_validator/image/planning_validator.drawio.svg rename to planning/autoware_planning_validator/image/planning_validator.drawio.svg diff --git a/planning/planning_validator/include/autoware_planning_validator/debug_marker.hpp b/planning/autoware_planning_validator/include/autoware_planning_validator/debug_marker.hpp similarity index 100% rename from planning/planning_validator/include/autoware_planning_validator/debug_marker.hpp rename to planning/autoware_planning_validator/include/autoware_planning_validator/debug_marker.hpp diff --git a/planning/planning_validator/include/autoware_planning_validator/planning_validator.hpp b/planning/autoware_planning_validator/include/autoware_planning_validator/planning_validator.hpp similarity index 100% rename from planning/planning_validator/include/autoware_planning_validator/planning_validator.hpp rename to planning/autoware_planning_validator/include/autoware_planning_validator/planning_validator.hpp diff --git a/planning/planning_validator/include/autoware_planning_validator/utils.hpp b/planning/autoware_planning_validator/include/autoware_planning_validator/utils.hpp similarity index 100% rename from planning/planning_validator/include/autoware_planning_validator/utils.hpp rename to planning/autoware_planning_validator/include/autoware_planning_validator/utils.hpp diff --git a/planning/planning_validator/launch/invalid_trajectory_publisher.launch.xml b/planning/autoware_planning_validator/launch/invalid_trajectory_publisher.launch.xml similarity index 100% rename from planning/planning_validator/launch/invalid_trajectory_publisher.launch.xml rename to planning/autoware_planning_validator/launch/invalid_trajectory_publisher.launch.xml diff --git a/planning/planning_validator/launch/planning_validator.launch.xml b/planning/autoware_planning_validator/launch/planning_validator.launch.xml similarity index 100% rename from planning/planning_validator/launch/planning_validator.launch.xml rename to planning/autoware_planning_validator/launch/planning_validator.launch.xml diff --git a/planning/planning_validator/msg/PlanningValidatorStatus.msg b/planning/autoware_planning_validator/msg/PlanningValidatorStatus.msg similarity index 100% rename from planning/planning_validator/msg/PlanningValidatorStatus.msg rename to planning/autoware_planning_validator/msg/PlanningValidatorStatus.msg diff --git a/planning/planning_validator/package.xml b/planning/autoware_planning_validator/package.xml similarity index 100% rename from planning/planning_validator/package.xml rename to planning/autoware_planning_validator/package.xml diff --git a/planning/planning_validator/src/debug_marker.cpp b/planning/autoware_planning_validator/src/debug_marker.cpp similarity index 100% rename from planning/planning_validator/src/debug_marker.cpp rename to planning/autoware_planning_validator/src/debug_marker.cpp diff --git a/planning/planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp b/planning/autoware_planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp similarity index 100% rename from planning/planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp rename to planning/autoware_planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp diff --git a/planning/planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.hpp b/planning/autoware_planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.hpp similarity index 100% rename from planning/planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.hpp rename to planning/autoware_planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.hpp diff --git a/planning/planning_validator/src/planning_validator.cpp b/planning/autoware_planning_validator/src/planning_validator.cpp similarity index 100% rename from planning/planning_validator/src/planning_validator.cpp rename to planning/autoware_planning_validator/src/planning_validator.cpp diff --git a/planning/planning_validator/src/utils.cpp b/planning/autoware_planning_validator/src/utils.cpp similarity index 100% rename from planning/planning_validator/src/utils.cpp rename to planning/autoware_planning_validator/src/utils.cpp diff --git a/planning/planning_validator/test/src/test_main.cpp b/planning/autoware_planning_validator/test/src/test_main.cpp similarity index 100% rename from planning/planning_validator/test/src/test_main.cpp rename to planning/autoware_planning_validator/test/src/test_main.cpp diff --git a/planning/planning_validator/test/src/test_parameter.hpp b/planning/autoware_planning_validator/test/src/test_parameter.hpp similarity index 100% rename from planning/planning_validator/test/src/test_parameter.hpp rename to planning/autoware_planning_validator/test/src/test_parameter.hpp diff --git a/planning/planning_validator/test/src/test_planning_validator_functions.cpp b/planning/autoware_planning_validator/test/src/test_planning_validator_functions.cpp similarity index 100% rename from planning/planning_validator/test/src/test_planning_validator_functions.cpp rename to planning/autoware_planning_validator/test/src/test_planning_validator_functions.cpp diff --git a/planning/planning_validator/test/src/test_planning_validator_helper.cpp b/planning/autoware_planning_validator/test/src/test_planning_validator_helper.cpp similarity index 100% rename from planning/planning_validator/test/src/test_planning_validator_helper.cpp rename to planning/autoware_planning_validator/test/src/test_planning_validator_helper.cpp diff --git a/planning/planning_validator/test/src/test_planning_validator_helper.hpp b/planning/autoware_planning_validator/test/src/test_planning_validator_helper.hpp similarity index 100% rename from planning/planning_validator/test/src/test_planning_validator_helper.hpp rename to planning/autoware_planning_validator/test/src/test_planning_validator_helper.hpp diff --git a/planning/planning_validator/test/src/test_planning_validator_node_interface.cpp b/planning/autoware_planning_validator/test/src/test_planning_validator_node_interface.cpp similarity index 100% rename from planning/planning_validator/test/src/test_planning_validator_node_interface.cpp rename to planning/autoware_planning_validator/test/src/test_planning_validator_node_interface.cpp diff --git a/planning/planning_validator/test/src/test_planning_validator_pubsub.cpp b/planning/autoware_planning_validator/test/src/test_planning_validator_pubsub.cpp similarity index 100% rename from planning/planning_validator/test/src/test_planning_validator_pubsub.cpp rename to planning/autoware_planning_validator/test/src/test_planning_validator_pubsub.cpp From 0e6528be2af66380b53956c78e75af246b21099c Mon Sep 17 00:00:00 2001 From: Yukinari Hisaki <42021302+yhisaki@users.noreply.github.com> Date: Mon, 10 Jun 2024 19:48:12 +0900 Subject: [PATCH 081/142] feat(polling_subscriber): polling srbscriber for multiple data (#7409) * add(polling_subscriber): polling srbscriber for multiple data Signed-off-by: Y.Hisaki * fix qos depth check script Signed-off-by: Y.Hisaki --------- Signed-off-by: Y.Hisaki --- .../ros/polling_subscriber.hpp | 64 +++++++++++++++++-- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp b/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp index 20b67ed13dfb5..b274f4ab55d91 100644 --- a/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp +++ b/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp @@ -20,19 +20,25 @@ #include #include #include +#include +#include namespace tier4_autoware_utils { -template -class InterProcessPollingSubscriber +template +class InterProcessPollingSubscriber; + +template +class InterProcessPollingSubscriber::type> { public: - using SharedPtr = std::shared_ptr>; + using SharedPtr = + std::shared_ptr::type>>; static SharedPtr create_subscription( rclcpp::Node * node, const std::string & topic_name, const rclcpp::QoS & qos = rclcpp::QoS{1}) { - return std::make_shared>(node, topic_name, qos); + return std::make_shared>(node, topic_name, qos); } private: @@ -71,6 +77,56 @@ class InterProcessPollingSubscriber }; }; +template +class InterProcessPollingSubscriber= 2)>::type> +{ +public: + using SharedPtr = + std::shared_ptr= 2)>::type>>; + static SharedPtr create_subscription( + rclcpp::Node * node, const std::string & topic_name, const rclcpp::QoS & qos = rclcpp::QoS{N}) + { + return std::make_shared>(node, topic_name, qos); + } + +private: + typename rclcpp::Subscription::SharedPtr subscriber_; + +public: + explicit InterProcessPollingSubscriber( + rclcpp::Node * node, const std::string & topic_name, const rclcpp::QoS & qos = rclcpp::QoS{N}) + { + auto noexec_callback_group = + node->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive, false); + auto noexec_subscription_options = rclcpp::SubscriptionOptions(); + noexec_subscription_options.callback_group = noexec_callback_group; + + subscriber_ = node->create_subscription( + topic_name, qos, + [node]([[maybe_unused]] const typename T::ConstSharedPtr msg) { assert(false); }, + noexec_subscription_options); + if (qos.get_rmw_qos_profile().depth < N) { + throw std::invalid_argument( + "InterProcessPollingSubscriber will be used with depth == " + std::to_string(N) + + ", which may cause inefficient serialization while updateLatestData()"); + } + }; + std::vector takeData() + { + std::vector data; + rclcpp::MessageInfo message_info; + for (int i = 0; i < N; ++i) { + auto datum = std::make_shared(); + if (subscriber_->take(*datum, message_info)) { + data.push_back(datum); + } else { + break; + } + } + return data; + }; +}; + } // namespace tier4_autoware_utils #endif // TIER4_AUTOWARE_UTILS__ROS__POLLING_SUBSCRIBER_HPP_ From c89cd08c307d9832413c958c823cd892296a735d Mon Sep 17 00:00:00 2001 From: Go Sakayori Date: Mon, 10 Jun 2024 20:25:31 +0900 Subject: [PATCH 082/142] feat(vehicle_cmd_gate): use polling subscriber (#7418) * change to polling subscriber Signed-off-by: Go Sakayori * fix Signed-off-by: Go Sakayori --------- Signed-off-by: Go Sakayori --- .../src/vehicle_cmd_gate.cpp | 149 +++++++++--------- .../src/vehicle_cmd_gate.hpp | 68 +++++--- 2 files changed, 118 insertions(+), 99 deletions(-) diff --git a/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp index bb50dcb586e83..e8902c9dbf5b3 100644 --- a/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp +++ b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp @@ -87,69 +87,6 @@ VehicleCmdGate::VehicleCmdGate(const rclcpp::NodeOptions & node_options) external_emergency_stop_heartbeat_sub_ = create_subscription( "input/external_emergency_stop_heartbeat", 1, std::bind(&VehicleCmdGate::onExternalEmergencyStopHeartbeat, this, _1)); - gate_mode_sub_ = create_subscription( - "input/gate_mode", 1, std::bind(&VehicleCmdGate::onGateMode, this, _1)); - engage_sub_ = create_subscription( - "input/engage", 1, std::bind(&VehicleCmdGate::onEngage, this, _1)); - kinematics_sub_ = create_subscription( - "/localization/kinematic_state", 1, - [this](Odometry::SharedPtr msg) { current_kinematics_ = *msg; }); - acc_sub_ = create_subscription( - "input/acceleration", 1, [this](AccelWithCovarianceStamped::SharedPtr msg) { - current_acceleration_ = msg->accel.accel.linear.x; - }); - steer_sub_ = create_subscription( - "input/steering", 1, - [this](SteeringReport::SharedPtr msg) { current_steer_ = msg->steering_tire_angle; }); - operation_mode_sub_ = create_subscription( - "input/operation_mode", rclcpp::QoS(1).transient_local(), - [this](const OperationModeState::SharedPtr msg) { current_operation_mode_ = *msg; }); - mrm_state_sub_ = create_subscription( - "input/mrm_state", 1, std::bind(&VehicleCmdGate::onMrmState, this, _1)); - - // Subscriber for auto - auto_control_cmd_sub_ = create_subscription( - "input/auto/control_cmd", 1, std::bind(&VehicleCmdGate::onAutoCtrlCmd, this, _1)); - - auto_turn_indicator_cmd_sub_ = create_subscription( - "input/auto/turn_indicators_cmd", 1, - [this](TurnIndicatorsCommand::ConstSharedPtr msg) { auto_commands_.turn_indicator = *msg; }); - - auto_hazard_light_cmd_sub_ = create_subscription( - "input/auto/hazard_lights_cmd", 1, - [this](HazardLightsCommand::ConstSharedPtr msg) { auto_commands_.hazard_light = *msg; }); - - auto_gear_cmd_sub_ = create_subscription( - "input/auto/gear_cmd", 1, - [this](GearCommand::ConstSharedPtr msg) { auto_commands_.gear = *msg; }); - - // Subscriber for external - remote_control_cmd_sub_ = create_subscription( - "input/external/control_cmd", 1, std::bind(&VehicleCmdGate::onRemoteCtrlCmd, this, _1)); - - remote_turn_indicator_cmd_sub_ = create_subscription( - "input/external/turn_indicators_cmd", 1, - [this](TurnIndicatorsCommand::ConstSharedPtr msg) { remote_commands_.turn_indicator = *msg; }); - - remote_hazard_light_cmd_sub_ = create_subscription( - "input/external/hazard_lights_cmd", 1, - [this](HazardLightsCommand::ConstSharedPtr msg) { remote_commands_.hazard_light = *msg; }); - - remote_gear_cmd_sub_ = create_subscription( - "input/external/gear_cmd", 1, - [this](GearCommand::ConstSharedPtr msg) { remote_commands_.gear = *msg; }); - - // Subscriber for emergency - emergency_control_cmd_sub_ = create_subscription( - "input/emergency/control_cmd", 1, std::bind(&VehicleCmdGate::onEmergencyCtrlCmd, this, _1)); - - emergency_hazard_light_cmd_sub_ = create_subscription( - "input/emergency/hazard_lights_cmd", 1, - [this](HazardLightsCommand::ConstSharedPtr msg) { emergency_commands_.hazard_light = *msg; }); - - emergency_gear_cmd_sub_ = create_subscription( - "input/emergency/gear_cmd", 1, - [this](GearCommand::ConstSharedPtr msg) { emergency_commands_.gear = *msg; }); // Parameter use_emergency_handling_ = declare_parameter("use_emergency_handling"); @@ -354,9 +291,10 @@ bool VehicleCmdGate::isDataReady() } // for auto -void VehicleCmdGate::onAutoCtrlCmd(Control::ConstSharedPtr msg) +void VehicleCmdGate::onAutoCtrlCmd() { - auto_commands_.control = *msg; + const auto msg = auto_control_cmd_sub_.takeData(); + if (msg) auto_commands_.control = *msg; if (current_gate_mode_.data == GateMode::AUTO) { publishControlCommands(auto_commands_); @@ -364,9 +302,10 @@ void VehicleCmdGate::onAutoCtrlCmd(Control::ConstSharedPtr msg) } // for remote -void VehicleCmdGate::onRemoteCtrlCmd(Control::ConstSharedPtr msg) +void VehicleCmdGate::onRemoteCtrlCmd() { - remote_commands_.control = *msg; + const auto msg = remote_control_cmd_sub_.takeData(); + if (msg) remote_commands_.control = *msg; if (current_gate_mode_.data == GateMode::EXTERNAL) { publishControlCommands(remote_commands_); @@ -374,9 +313,10 @@ void VehicleCmdGate::onRemoteCtrlCmd(Control::ConstSharedPtr msg) } // for emergency -void VehicleCmdGate::onEmergencyCtrlCmd(Control::ConstSharedPtr msg) +void VehicleCmdGate::onEmergencyCtrlCmd() { - emergency_commands_.control = *msg; + const auto msg = emergency_control_cmd_sub_.takeData(); + if (msg) emergency_commands_.control = *msg; if (use_emergency_handling_ && is_system_emergency_) { publishControlCommands(emergency_commands_); @@ -385,6 +325,61 @@ void VehicleCmdGate::onEmergencyCtrlCmd(Control::ConstSharedPtr msg) void VehicleCmdGate::onTimer() { + onGateMode(); + + const auto msg_kinematics = kinematics_sub_.takeData(); + if (msg_kinematics) current_kinematics_ = *msg_kinematics; + + const auto msg_acceleration = acc_sub_.takeData(); + if (msg_acceleration) current_acceleration_ = msg_acceleration->accel.accel.linear.x; + + const auto msg_steer = steer_sub_.takeData(); + if (msg_steer) current_steer_ = msg_steer->steering_tire_angle; + + const auto msg_operation_mode = operation_mode_sub_.takeData(); + if (msg_operation_mode) current_operation_mode_ = *msg_operation_mode; + + onMrmState(); + + // Subscriber for auto + onAutoCtrlCmd(); + + const auto msg_auto_command_turn_indicator = auto_turn_indicator_cmd_sub_.takeData(); + if (msg_auto_command_turn_indicator) + auto_commands_.turn_indicator = *msg_auto_command_turn_indicator; + + const auto msg_auto_command_hazard_light = auto_hazard_light_cmd_sub_.takeData(); + if (msg_auto_command_hazard_light) auto_commands_.hazard_light = *msg_auto_command_hazard_light; + + const auto msg_auto_command_gear = auto_gear_cmd_sub_.takeData(); + if (msg_auto_command_gear) auto_commands_.gear = *msg_auto_command_gear; + + // Subscribe for external + onRemoteCtrlCmd(); + + const auto msg_remote_command_turn_indicator = remote_turn_indicator_cmd_sub_.takeData(); + if (msg_remote_command_turn_indicator) + remote_commands_.turn_indicator = *msg_remote_command_turn_indicator; + + const auto msg_remote_command_hazard_light = remote_hazard_light_cmd_sub_.takeData(); + if (msg_remote_command_hazard_light) + remote_commands_.hazard_light = *msg_remote_command_hazard_light; + + const auto msg_remote_command_gear = remote_gear_cmd_sub_.takeData(); + if (msg_remote_command_gear) remote_commands_.gear = *msg_remote_command_gear; + + // Subscribe for emergency + onEmergencyCtrlCmd(); + + const auto msg_emergency_command_hazard_light = emergency_hazard_light_cmd_sub_.takeData(); + if (msg_emergency_command_hazard_light) + emergency_commands_.hazard_light = *msg_emergency_command_hazard_light; + + const auto msg_emergency_command_gear = emergency_gear_cmd_sub_.takeData(); + if (msg_emergency_command_gear) emergency_commands_.gear = *msg_emergency_command_gear; + + onEngage(); + updater_.force_update(); if (!isDataReady()) { @@ -710,10 +705,12 @@ void VehicleCmdGate::onExternalEmergencyStopHeartbeat( external_emergency_stop_heartbeat_received_time_ = std::make_shared(this->now()); } -void VehicleCmdGate::onGateMode(GateMode::ConstSharedPtr msg) +void VehicleCmdGate::onGateMode() { + const auto msg = gate_mode_sub_.takeData(); + if (!msg) return; + const auto prev_gate_mode = current_gate_mode_; - current_gate_mode_ = *msg; if (current_gate_mode_.data != prev_gate_mode.data) { RCLCPP_INFO( @@ -722,9 +719,10 @@ void VehicleCmdGate::onGateMode(GateMode::ConstSharedPtr msg) } } -void VehicleCmdGate::onEngage(EngageMsg::ConstSharedPtr msg) +void VehicleCmdGate::onEngage() { - is_engaged_ = msg->engage; + const auto msg = engage_sub_.takeData(); + if (msg) is_engaged_ = msg->engage; } void VehicleCmdGate::onEngageService( @@ -734,8 +732,11 @@ void VehicleCmdGate::onEngageService( response->status = tier4_api_utils::response_success(); } -void VehicleCmdGate::onMrmState(MrmState::ConstSharedPtr msg) +void VehicleCmdGate::onMrmState() { + const auto msg = mrm_state_sub_.takeData(); + if (!msg) return; + is_system_emergency_ = (msg->state == MrmState::MRM_OPERATING || msg->state == MrmState::MRM_SUCCEEDED || msg->state == MrmState::MRM_FAILED) && diff --git a/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.hpp b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.hpp index 06dad536d842d..5ca8db5497e59 100644 --- a/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.hpp +++ b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.hpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -118,16 +119,22 @@ class VehicleCmdGate : public rclcpp::Node const std::vector & parameters); // Subscription rclcpp::Subscription::SharedPtr external_emergency_stop_heartbeat_sub_; - rclcpp::Subscription::SharedPtr gate_mode_sub_; - rclcpp::Subscription::SharedPtr operation_mode_sub_; - rclcpp::Subscription::SharedPtr mrm_state_sub_; - rclcpp::Subscription::SharedPtr kinematics_sub_; // for filter - rclcpp::Subscription::SharedPtr acc_sub_; // for filter - rclcpp::Subscription::SharedPtr steer_sub_; // for filter - - void onGateMode(GateMode::ConstSharedPtr msg); + tier4_autoware_utils::InterProcessPollingSubscriber gate_mode_sub_{ + this, "input/gate_mode"}; + tier4_autoware_utils::InterProcessPollingSubscriber operation_mode_sub_{ + this, "input/operation_mode", rclcpp::QoS(1).transient_local()}; + tier4_autoware_utils::InterProcessPollingSubscriber mrm_state_sub_{ + this, "input/mrm_state"}; + tier4_autoware_utils::InterProcessPollingSubscriber kinematics_sub_{ + this, "/localization/kinematic_state"}; // for filter + tier4_autoware_utils::InterProcessPollingSubscriber acc_sub_{ + this, "input/acceleration"}; // for filter + tier4_autoware_utils::InterProcessPollingSubscriber steer_sub_{ + this, "input/steering"}; // for filter + + void onGateMode(); void onExternalEmergencyStopHeartbeat(Heartbeat::ConstSharedPtr msg); - void onMrmState(MrmState::ConstSharedPtr msg); + void onMrmState(); bool is_engaged_; bool is_system_emergency_ = false; @@ -153,26 +160,37 @@ class VehicleCmdGate : public rclcpp::Node // Subscriber for auto Commands auto_commands_; - rclcpp::Subscription::SharedPtr auto_control_cmd_sub_; - rclcpp::Subscription::SharedPtr auto_turn_indicator_cmd_sub_; - rclcpp::Subscription::SharedPtr auto_hazard_light_cmd_sub_; - rclcpp::Subscription::SharedPtr auto_gear_cmd_sub_; - void onAutoCtrlCmd(Control::ConstSharedPtr msg); + tier4_autoware_utils::InterProcessPollingSubscriber auto_control_cmd_sub_{ + this, "input/auto/control_cmd"}; + tier4_autoware_utils::InterProcessPollingSubscriber + auto_turn_indicator_cmd_sub_{this, "input/auto/turn_indicators_cmd"}; + tier4_autoware_utils::InterProcessPollingSubscriber + auto_hazard_light_cmd_sub_{this, "input/auto/hazard_lights_cmd"}; + tier4_autoware_utils::InterProcessPollingSubscriber auto_gear_cmd_sub_{ + this, "input/auto/gear_cmd"}; + void onAutoCtrlCmd(); // Subscription for external Commands remote_commands_; - rclcpp::Subscription::SharedPtr remote_control_cmd_sub_; - rclcpp::Subscription::SharedPtr remote_turn_indicator_cmd_sub_; - rclcpp::Subscription::SharedPtr remote_hazard_light_cmd_sub_; - rclcpp::Subscription::SharedPtr remote_gear_cmd_sub_; - void onRemoteCtrlCmd(Control::ConstSharedPtr msg); + tier4_autoware_utils::InterProcessPollingSubscriber remote_control_cmd_sub_{ + this, "input/external/control_cmd"}; + tier4_autoware_utils::InterProcessPollingSubscriber + remote_turn_indicator_cmd_sub_{this, "input/external/turn_indicators_cmd"}; + tier4_autoware_utils::InterProcessPollingSubscriber + remote_hazard_light_cmd_sub_{this, "input/external/hazard_lights_cmd"}; + tier4_autoware_utils::InterProcessPollingSubscriber remote_gear_cmd_sub_{ + this, "input/external/gear_cmd"}; + void onRemoteCtrlCmd(); // Subscription for emergency Commands emergency_commands_; - rclcpp::Subscription::SharedPtr emergency_control_cmd_sub_; - rclcpp::Subscription::SharedPtr emergency_hazard_light_cmd_sub_; - rclcpp::Subscription::SharedPtr emergency_gear_cmd_sub_; - void onEmergencyCtrlCmd(Control::ConstSharedPtr msg); + tier4_autoware_utils::InterProcessPollingSubscriber emergency_control_cmd_sub_{ + this, "input/emergency/control_cmd"}; + tier4_autoware_utils::InterProcessPollingSubscriber + emergency_hazard_light_cmd_sub_{this, "input/emergency/hazard_lights_cmd"}; + tier4_autoware_utils::InterProcessPollingSubscriber emergency_gear_cmd_sub_{ + this, "input/emergency/gear_cmd"}; + void onEmergencyCtrlCmd(); // Parameter bool use_emergency_handling_; @@ -198,10 +216,10 @@ class VehicleCmdGate : public rclcpp::Node const SetEmergency::Response::SharedPtr response); // TODO(Takagi, Isamu): deprecated - rclcpp::Subscription::SharedPtr engage_sub_; + tier4_autoware_utils::InterProcessPollingSubscriber engage_sub_{this, "input/engage"}; rclcpp::Service::SharedPtr srv_external_emergency_stop_; rclcpp::Service::SharedPtr srv_clear_external_emergency_stop_; - void onEngage(EngageMsg::ConstSharedPtr msg); + void onEngage(); bool onSetExternalEmergencyStopService( const std::shared_ptr req_header, const Trigger::Request::SharedPtr req, const Trigger::Response::SharedPtr res); From cb557db2c5a5128bbe46d9c5077f387bc1a49d91 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Mon, 10 Jun 2024 20:31:27 +0900 Subject: [PATCH 083/142] feat(tier4_autoware_utils): add the API to check if taken data is stale (#7404) Signed-off-by: Mamoru Sobue --- .../ros/polling_subscriber.hpp | 25 +++++++++++++++++++ .../lane_departure_checker_node.cpp | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp b/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp index b274f4ab55d91..d0b6dfac2dcff 100644 --- a/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp +++ b/common/tier4_autoware_utils/include/tier4_autoware_utils/ros/polling_subscriber.hpp @@ -64,6 +64,12 @@ class InterProcessPollingSubscriber::type> "serialization while updateLatestData()"); } }; + /* + * @brief take and return the latest data from DDS queue if such data existed, otherwise return + * previous taken data("stale" data) + * @note if you want to ignore "stale" data, you should use takeNewData() + * instead + */ typename T::ConstSharedPtr takeData() { auto new_data = std::make_shared(); @@ -75,6 +81,25 @@ class InterProcessPollingSubscriber::type> return data_; }; + + /* + * @brief take and return the latest data from DDS queue if such data existed, otherwise return + * nullptr instead + * @note this API allows you to avoid redundant computation on the taken data which is unchanged + * since the previous cycle + */ + typename T::ConstSharedPtr takeNewData() + { + auto new_data = std::make_shared(); + rclcpp::MessageInfo message_info; + const bool success = subscriber_->take(*new_data, message_info); + if (success) { + data_ = new_data; + return data_; + } else { + return nullptr; + } + } }; template diff --git a/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp b/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp index b25b3fd843f4b..f95ae0f4ac2ed 100644 --- a/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp +++ b/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp @@ -259,7 +259,7 @@ void LaneDepartureCheckerNode::onTimer() reference_trajectory_ = sub_reference_trajectory_.takeData(); predicted_trajectory_ = sub_predicted_trajectory_.takeData(); - const auto lanelet_map_bin_msg = sub_lanelet_map_bin_.takeData(); + const auto lanelet_map_bin_msg = sub_lanelet_map_bin_.takeNewData(); if (lanelet_map_bin_msg) { lanelet_map_ = std::make_shared(); lanelet::utils::conversion::fromBinMsg( From 4b6d3ced82272116deabf7adc64c8553d0fe766c Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Mon, 10 Jun 2024 20:59:21 +0900 Subject: [PATCH 084/142] refactor(objects_of_interest_marker_interface)!: prefix package and namespace with autoware (#7413) Signed-off-by: Fumiya Watanabe --- .github/CODEOWNERS | 2 +- planning/.pages | 2 +- .../interface.hpp | 4 ++-- .../interface/scene_module_interface.hpp | 6 +++--- .../package.xml | 2 +- .../package.xml | 2 +- .../scene_module_interface.hpp | 6 +++--- .../package.xml | 2 +- .../CMakeLists.txt | 4 ++-- .../README.md | 0 .../coloring.hpp | 12 ++++++------ .../marker_data.hpp | 10 +++++----- .../marker_utils.hpp | 14 +++++++------- .../objects_of_interest_marker_interface.hpp | 16 ++++++++-------- .../package.xml | 4 ++-- .../src/coloring.cpp | 6 +++--- .../src/marker_utils.cpp | 6 +++--- .../src/objects_of_interest_marker_interface.cpp | 6 +++--- 18 files changed, 52 insertions(+), 52 deletions(-) rename planning/{objects_of_interest_marker_interface => autoware_objects_of_interest_marker_interface}/CMakeLists.txt (81%) rename planning/{objects_of_interest_marker_interface => autoware_objects_of_interest_marker_interface}/README.md (100%) rename planning/{objects_of_interest_marker_interface/include/objects_of_interest_marker_interface => autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface}/coloring.hpp (68%) rename planning/{objects_of_interest_marker_interface/include/objects_of_interest_marker_interface => autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface}/marker_data.hpp (73%) rename planning/{objects_of_interest_marker_interface/include/objects_of_interest_marker_interface => autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface}/marker_utils.hpp (85%) rename planning/{objects_of_interest_marker_interface/include/objects_of_interest_marker_interface => autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface}/objects_of_interest_marker_interface.hpp (81%) rename planning/{objects_of_interest_marker_interface => autoware_objects_of_interest_marker_interface}/package.xml (85%) rename planning/{objects_of_interest_marker_interface => autoware_objects_of_interest_marker_interface}/src/coloring.cpp (87%) rename planning/{objects_of_interest_marker_interface => autoware_objects_of_interest_marker_interface}/src/marker_utils.cpp (94%) rename planning/{objects_of_interest_marker_interface => autoware_objects_of_interest_marker_interface}/src/objects_of_interest_marker_interface.cpp (92%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a6e9d336479f5..732c8972ff0f1 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -189,7 +189,7 @@ planning/mission_planner/** isamu.takagi@tier4.jp kosuke.takeuchi@tier4.jp mamor planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/** maxime.clement@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_planner_common/** maxime.clement@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_planner_node/** maxime.clement@tier4.jp -planning/objects_of_interest_marker_interface/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp zulfaqar.azmi@tier4.jp +planning/autoware_objects_of_interest_marker_interface/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp zulfaqar.azmi@tier4.jp planning/obstacle_cruise_planner/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp planning/obstacle_stop_planner/** berkay@leodrive.ai bnk@leodrive.ai satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp planning/obstacle_velocity_limiter/** maxime.clement@tier4.jp diff --git a/planning/.pages b/planning/.pages index f6ee9a2d8d38b..1e11d25f1f3ea 100644 --- a/planning/.pages +++ b/planning/.pages @@ -74,7 +74,7 @@ nav: - 'API and Library': - 'Costmap Generator': planning/costmap_generator - 'External Velocity Limit Selector': planning/autoware_external_velocity_limit_selector - - 'Objects of Interest Marker Interface': planning/objects_of_interest_marker_interface + - 'Objects of Interest Marker Interface': planning/autoware_objects_of_interest_marker_interface - 'Route Handler': planning/route_handler - 'RTC Interface': planning/autoware_rtc_interface - 'Additional Tools': diff --git a/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/interface.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/interface.hpp index d2ad97d51744a..cff8609d77831 100644 --- a/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/interface.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/interface.hpp @@ -37,10 +37,10 @@ namespace behavior_path_planner { +using autoware::objects_of_interest_marker_interface::ColorName; +using autoware::objects_of_interest_marker_interface::ObjectsOfInterestMarkerInterface; using geometry_msgs::msg::Pose; using geometry_msgs::msg::Twist; -using objects_of_interest_marker_interface::ColorName; -using objects_of_interest_marker_interface::ObjectsOfInterestMarkerInterface; using tier4_planning_msgs::msg::PathWithLaneId; class LaneChangeInterface : public SceneModuleInterface diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/interface/scene_module_interface.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/interface/scene_module_interface.hpp index ebbb795a699b5..898c54b8e348c 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/interface/scene_module_interface.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/interface/scene_module_interface.hpp @@ -22,12 +22,12 @@ #include #include +#include #include #include #include #include #include -#include #include #include #include @@ -56,11 +56,11 @@ namespace behavior_path_planner { +using autoware::objects_of_interest_marker_interface::ColorName; +using autoware::objects_of_interest_marker_interface::ObjectsOfInterestMarkerInterface; using autoware::rtc_interface::RTCInterface; using autoware_adapi_v1_msgs::msg::PlanningBehavior; using autoware_adapi_v1_msgs::msg::SteeringFactor; -using objects_of_interest_marker_interface::ColorName; -using objects_of_interest_marker_interface::ObjectsOfInterestMarkerInterface; using steering_factor_interface::SteeringFactorInterface; using tier4_autoware_utils::calcOffsetPose; using tier4_autoware_utils::generateUUID; diff --git a/planning/autoware_behavior_path_planner_common/package.xml b/planning/autoware_behavior_path_planner_common/package.xml index e9b33f3e71d6f..8ffe0fd6ea0c2 100644 --- a/planning/autoware_behavior_path_planner_common/package.xml +++ b/planning/autoware_behavior_path_planner_common/package.xml @@ -45,6 +45,7 @@ autoware_adapi_v1_msgs autoware_freespace_planning_algorithms autoware_lane_departure_checker + autoware_objects_of_interest_marker_interface autoware_perception_msgs autoware_planning_msgs autoware_rtc_interface @@ -55,7 +56,6 @@ magic_enum motion_utils object_recognition_utils - objects_of_interest_marker_interface rclcpp route_handler tf2 diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml b/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml index 5a47bed4c712a..f8c79d112acaa 100644 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml +++ b/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml @@ -22,6 +22,7 @@ eigen3_cmake_module autoware_behavior_path_planner_common + autoware_objects_of_interest_marker_interface autoware_perception_msgs autoware_rtc_interface autoware_vehicle_info_utils @@ -30,7 +31,6 @@ lanelet2_extension magic_enum motion_utils - objects_of_interest_marker_interface pluginlib rclcpp route_handler diff --git a/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/scene_module_interface.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/scene_module_interface.hpp index a97346297c9ac..bc929991199ac 100644 --- a/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/scene_module_interface.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/scene_module_interface.hpp @@ -16,11 +16,11 @@ #define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__SCENE_MODULE_INTERFACE_HPP_ #include +#include #include #include #include #include -#include #include #include @@ -48,12 +48,12 @@ namespace autoware::behavior_velocity_planner { +using autoware::objects_of_interest_marker_interface::ColorName; +using autoware::objects_of_interest_marker_interface::ObjectsOfInterestMarkerInterface; using autoware::rtc_interface::RTCInterface; using builtin_interfaces::msg::Time; using motion_utils::PlanningBehavior; using motion_utils::VelocityFactor; -using objects_of_interest_marker_interface::ColorName; -using objects_of_interest_marker_interface::ObjectsOfInterestMarkerInterface; using tier4_autoware_utils::DebugPublisher; using tier4_autoware_utils::getOrDeclareParameter; using tier4_debug_msgs::msg::Float64Stamped; diff --git a/planning/autoware_behavior_velocity_planner_common/package.xml b/planning/autoware_behavior_velocity_planner_common/package.xml index 0e317ceb5db66..2eadf2c26f59b 100644 --- a/planning/autoware_behavior_velocity_planner_common/package.xml +++ b/planning/autoware_behavior_velocity_planner_common/package.xml @@ -21,6 +21,7 @@ autoware_adapi_v1_msgs autoware_map_msgs + autoware_objects_of_interest_marker_interface autoware_perception_msgs autoware_planning_msgs autoware_rtc_interface @@ -33,7 +34,6 @@ lanelet2_extension motion_utils nav_msgs - objects_of_interest_marker_interface pcl_conversions rclcpp rclcpp_components diff --git a/planning/objects_of_interest_marker_interface/CMakeLists.txt b/planning/autoware_objects_of_interest_marker_interface/CMakeLists.txt similarity index 81% rename from planning/objects_of_interest_marker_interface/CMakeLists.txt rename to planning/autoware_objects_of_interest_marker_interface/CMakeLists.txt index eec17f8d9218b..da1161c007bae 100644 --- a/planning/objects_of_interest_marker_interface/CMakeLists.txt +++ b/planning/autoware_objects_of_interest_marker_interface/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) -project(objects_of_interest_marker_interface) +project(autoware_objects_of_interest_marker_interface) ### Compile options if(NOT CMAKE_CXX_STANDARD) @@ -12,7 +12,7 @@ endif() find_package(ament_cmake_auto REQUIRED) ament_auto_find_build_dependencies() -ament_auto_add_library(objects_of_interest_marker_interface SHARED +ament_auto_add_library(autoware_objects_of_interest_marker_interface SHARED src/coloring.cpp src/objects_of_interest_marker_interface.cpp src/marker_utils.cpp diff --git a/planning/objects_of_interest_marker_interface/README.md b/planning/autoware_objects_of_interest_marker_interface/README.md similarity index 100% rename from planning/objects_of_interest_marker_interface/README.md rename to planning/autoware_objects_of_interest_marker_interface/README.md diff --git a/planning/objects_of_interest_marker_interface/include/objects_of_interest_marker_interface/coloring.hpp b/planning/autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface/coloring.hpp similarity index 68% rename from planning/objects_of_interest_marker_interface/include/objects_of_interest_marker_interface/coloring.hpp rename to planning/autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface/coloring.hpp index 041a6a454d0dd..77e0e5db2f157 100644 --- a/planning/objects_of_interest_marker_interface/include/objects_of_interest_marker_interface/coloring.hpp +++ b/planning/autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface/coloring.hpp @@ -12,20 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBJECTS_OF_INTEREST_MARKER_INTERFACE__COLORING_HPP_ -#define OBJECTS_OF_INTEREST_MARKER_INTERFACE__COLORING_HPP_ -#include "objects_of_interest_marker_interface/marker_data.hpp" +#ifndef AUTOWARE_OBJECTS_OF_INTEREST_MARKER_INTERFACE__COLORING_HPP_ +#define AUTOWARE_OBJECTS_OF_INTEREST_MARKER_INTERFACE__COLORING_HPP_ +#include "autoware_objects_of_interest_marker_interface/marker_data.hpp" #include #include -namespace objects_of_interest_marker_interface::coloring +namespace autoware::objects_of_interest_marker_interface::coloring { std_msgs::msg::ColorRGBA getGreen(const float alpha); std_msgs::msg::ColorRGBA getAmber(const float alpha); std_msgs::msg::ColorRGBA getRed(const float alpha); std_msgs::msg::ColorRGBA getGray(const float alpha); -} // namespace objects_of_interest_marker_interface::coloring +} // namespace autoware::objects_of_interest_marker_interface::coloring -#endif // OBJECTS_OF_INTEREST_MARKER_INTERFACE__COLORING_HPP_ +#endif // AUTOWARE_OBJECTS_OF_INTEREST_MARKER_INTERFACE__COLORING_HPP_ diff --git a/planning/objects_of_interest_marker_interface/include/objects_of_interest_marker_interface/marker_data.hpp b/planning/autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface/marker_data.hpp similarity index 73% rename from planning/objects_of_interest_marker_interface/include/objects_of_interest_marker_interface/marker_data.hpp rename to planning/autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface/marker_data.hpp index 6a6bd2c0dcf19..1ce530343172e 100644 --- a/planning/objects_of_interest_marker_interface/include/objects_of_interest_marker_interface/marker_data.hpp +++ b/planning/autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface/marker_data.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBJECTS_OF_INTEREST_MARKER_INTERFACE__MARKER_DATA_HPP_ -#define OBJECTS_OF_INTEREST_MARKER_INTERFACE__MARKER_DATA_HPP_ +#ifndef AUTOWARE_OBJECTS_OF_INTEREST_MARKER_INTERFACE__MARKER_DATA_HPP_ +#define AUTOWARE_OBJECTS_OF_INTEREST_MARKER_INTERFACE__MARKER_DATA_HPP_ #include #include #include -namespace objects_of_interest_marker_interface +namespace autoware::objects_of_interest_marker_interface { struct ObjectMarkerData { @@ -29,6 +29,6 @@ struct ObjectMarkerData }; enum class ColorName { GRAY, GREEN, AMBER, RED }; -} // namespace objects_of_interest_marker_interface +} // namespace autoware::objects_of_interest_marker_interface -#endif // OBJECTS_OF_INTEREST_MARKER_INTERFACE__MARKER_DATA_HPP_ +#endif // AUTOWARE_OBJECTS_OF_INTEREST_MARKER_INTERFACE__MARKER_DATA_HPP_ diff --git a/planning/objects_of_interest_marker_interface/include/objects_of_interest_marker_interface/marker_utils.hpp b/planning/autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface/marker_utils.hpp similarity index 85% rename from planning/objects_of_interest_marker_interface/include/objects_of_interest_marker_interface/marker_utils.hpp rename to planning/autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface/marker_utils.hpp index 5a094e349c31a..5c41e7d33e8b2 100644 --- a/planning/objects_of_interest_marker_interface/include/objects_of_interest_marker_interface/marker_utils.hpp +++ b/planning/autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface/marker_utils.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBJECTS_OF_INTEREST_MARKER_INTERFACE__MARKER_UTILS_HPP_ -#define OBJECTS_OF_INTEREST_MARKER_INTERFACE__MARKER_UTILS_HPP_ -#include "objects_of_interest_marker_interface/coloring.hpp" -#include "objects_of_interest_marker_interface/marker_data.hpp" +#ifndef AUTOWARE_OBJECTS_OF_INTEREST_MARKER_INTERFACE__MARKER_UTILS_HPP_ +#define AUTOWARE_OBJECTS_OF_INTEREST_MARKER_INTERFACE__MARKER_UTILS_HPP_ +#include "autoware_objects_of_interest_marker_interface/coloring.hpp" +#include "autoware_objects_of_interest_marker_interface/marker_data.hpp" #include #include @@ -30,7 +30,7 @@ #include -namespace objects_of_interest_marker_interface::marker_utils +namespace autoware::objects_of_interest_marker_interface::marker_utils { /** * @brief Create arrow marker from object marker data @@ -81,6 +81,6 @@ visualization_msgs::msg::Marker createNameTextMarker( visualization_msgs::msg::MarkerArray createTargetMarker( const size_t id, const ObjectMarkerData & data, const std::string & name, const double height_offset, const double arrow_length = 1.0, const double line_width = 0.1); -} // namespace objects_of_interest_marker_interface::marker_utils +} // namespace autoware::objects_of_interest_marker_interface::marker_utils -#endif // OBJECTS_OF_INTEREST_MARKER_INTERFACE__MARKER_UTILS_HPP_ +#endif // AUTOWARE_OBJECTS_OF_INTEREST_MARKER_INTERFACE__MARKER_UTILS_HPP_ diff --git a/planning/objects_of_interest_marker_interface/include/objects_of_interest_marker_interface/objects_of_interest_marker_interface.hpp b/planning/autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface/objects_of_interest_marker_interface.hpp similarity index 81% rename from planning/objects_of_interest_marker_interface/include/objects_of_interest_marker_interface/objects_of_interest_marker_interface.hpp rename to planning/autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface/objects_of_interest_marker_interface.hpp index 7138ddd49d4c7..dfb62198e1607 100644 --- a/planning/objects_of_interest_marker_interface/include/objects_of_interest_marker_interface/objects_of_interest_marker_interface.hpp +++ b/planning/autoware_objects_of_interest_marker_interface/include/autoware_objects_of_interest_marker_interface/objects_of_interest_marker_interface.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBJECTS_OF_INTEREST_MARKER_INTERFACE__OBJECTS_OF_INTEREST_MARKER_INTERFACE_HPP_ -#define OBJECTS_OF_INTEREST_MARKER_INTERFACE__OBJECTS_OF_INTEREST_MARKER_INTERFACE_HPP_ -#include "objects_of_interest_marker_interface/coloring.hpp" -#include "objects_of_interest_marker_interface/marker_data.hpp" -#include "objects_of_interest_marker_interface/marker_utils.hpp" +#ifndef AUTOWARE_OBJECTS_OF_INTEREST_MARKER_INTERFACE__OBJECTS_OF_INTEREST_MARKER_INTERFACE_HPP_ +#define AUTOWARE_OBJECTS_OF_INTEREST_MARKER_INTERFACE__OBJECTS_OF_INTEREST_MARKER_INTERFACE_HPP_ +#include "autoware_objects_of_interest_marker_interface/coloring.hpp" +#include "autoware_objects_of_interest_marker_interface/marker_data.hpp" +#include "autoware_objects_of_interest_marker_interface/marker_utils.hpp" #include @@ -28,7 +28,7 @@ #include #include -namespace objects_of_interest_marker_interface +namespace autoware::objects_of_interest_marker_interface { class ObjectsOfInterestMarkerInterface { @@ -98,6 +98,6 @@ class ObjectsOfInterestMarkerInterface std::string topic_namespace_ = "/planning/debug/objects_of_interest"; }; -} // namespace objects_of_interest_marker_interface +} // namespace autoware::objects_of_interest_marker_interface -#endif // OBJECTS_OF_INTEREST_MARKER_INTERFACE__OBJECTS_OF_INTEREST_MARKER_INTERFACE_HPP_ +#endif // AUTOWARE_OBJECTS_OF_INTEREST_MARKER_INTERFACE__OBJECTS_OF_INTEREST_MARKER_INTERFACE_HPP_ diff --git a/planning/objects_of_interest_marker_interface/package.xml b/planning/autoware_objects_of_interest_marker_interface/package.xml similarity index 85% rename from planning/objects_of_interest_marker_interface/package.xml rename to planning/autoware_objects_of_interest_marker_interface/package.xml index 28d00e2fdcd95..a7701d159e824 100644 --- a/planning/objects_of_interest_marker_interface/package.xml +++ b/planning/autoware_objects_of_interest_marker_interface/package.xml @@ -1,8 +1,8 @@ - objects_of_interest_marker_interface + autoware_objects_of_interest_marker_interface 0.1.0 - The objects_of_interest_marker_interface package + The autoware_objects_of_interest_marker_interface package Fumiya Watanabe Kosuke Takeuchi diff --git a/planning/objects_of_interest_marker_interface/src/coloring.cpp b/planning/autoware_objects_of_interest_marker_interface/src/coloring.cpp similarity index 87% rename from planning/objects_of_interest_marker_interface/src/coloring.cpp rename to planning/autoware_objects_of_interest_marker_interface/src/coloring.cpp index 6c566474e4c9e..6bea6b577a61e 100644 --- a/planning/objects_of_interest_marker_interface/src/coloring.cpp +++ b/planning/autoware_objects_of_interest_marker_interface/src/coloring.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "objects_of_interest_marker_interface/coloring.hpp" +#include "autoware_objects_of_interest_marker_interface/coloring.hpp" namespace { @@ -26,7 +26,7 @@ std_msgs::msg::ColorRGBA convertFromColorCode(const uint64_t code, const float a } } // namespace -namespace objects_of_interest_marker_interface::coloring +namespace autoware::objects_of_interest_marker_interface::coloring { std_msgs::msg::ColorRGBA getGreen(const float alpha) { @@ -51,4 +51,4 @@ std_msgs::msg::ColorRGBA getGray(const float alpha) constexpr uint64_t code = 0xbdbdbd; return convertFromColorCode(code, alpha); } -} // namespace objects_of_interest_marker_interface::coloring +} // namespace autoware::objects_of_interest_marker_interface::coloring diff --git a/planning/objects_of_interest_marker_interface/src/marker_utils.cpp b/planning/autoware_objects_of_interest_marker_interface/src/marker_utils.cpp similarity index 94% rename from planning/objects_of_interest_marker_interface/src/marker_utils.cpp rename to planning/autoware_objects_of_interest_marker_interface/src/marker_utils.cpp index 23f33c0b8115a..8c9478ab97a99 100644 --- a/planning/objects_of_interest_marker_interface/src/marker_utils.cpp +++ b/planning/autoware_objects_of_interest_marker_interface/src/marker_utils.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "objects_of_interest_marker_interface/marker_utils.hpp" +#include "autoware_objects_of_interest_marker_interface/marker_utils.hpp" -namespace objects_of_interest_marker_interface::marker_utils +namespace autoware::objects_of_interest_marker_interface::marker_utils { using geometry_msgs::msg::Point; @@ -111,4 +111,4 @@ MarkerArray createTargetMarker( return marker_array; } -} // namespace objects_of_interest_marker_interface::marker_utils +} // namespace autoware::objects_of_interest_marker_interface::marker_utils diff --git a/planning/objects_of_interest_marker_interface/src/objects_of_interest_marker_interface.cpp b/planning/autoware_objects_of_interest_marker_interface/src/objects_of_interest_marker_interface.cpp similarity index 92% rename from planning/objects_of_interest_marker_interface/src/objects_of_interest_marker_interface.cpp rename to planning/autoware_objects_of_interest_marker_interface/src/objects_of_interest_marker_interface.cpp index f12731aba5df2..42fea55a46cf2 100644 --- a/planning/objects_of_interest_marker_interface/src/objects_of_interest_marker_interface.cpp +++ b/planning/autoware_objects_of_interest_marker_interface/src/objects_of_interest_marker_interface.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "objects_of_interest_marker_interface/objects_of_interest_marker_interface.hpp" +#include "autoware_objects_of_interest_marker_interface/objects_of_interest_marker_interface.hpp" #include #include #include -namespace objects_of_interest_marker_interface +namespace autoware::objects_of_interest_marker_interface { using autoware_perception_msgs::msg::Shape; using geometry_msgs::msg::Pose; @@ -87,4 +87,4 @@ ColorRGBA ObjectsOfInterestMarkerInterface::getColor( } } -} // namespace objects_of_interest_marker_interface +} // namespace autoware::objects_of_interest_marker_interface From 748f6881c8a1737fdf4eb5f83f164dcc64c9c1b8 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Mon, 10 Jun 2024 21:00:39 +0900 Subject: [PATCH 085/142] refactor(autoware_lane_departure_checker)!: rename directory name (#7410) --- .../CMakeLists.txt | 0 .../README.md | 0 .../config/lane_departure_checker.param.yaml | 0 .../autoware_lane_departure_checker/lane_departure_checker.hpp | 0 .../lane_departure_checker_node.hpp | 0 .../util/create_vehicle_footprint.hpp | 0 .../launch/lane_departure_checker.launch.xml | 0 .../package.xml | 0 .../schema/lane_departure_checker.json | 0 .../src/lane_departure_checker_node/lane_departure_checker.cpp | 0 .../lane_departure_checker_node/lane_departure_checker_node.cpp | 0 11 files changed, 0 insertions(+), 0 deletions(-) rename control/{lane_departure_checker => autoware_lane_departure_checker}/CMakeLists.txt (100%) rename control/{lane_departure_checker => autoware_lane_departure_checker}/README.md (100%) rename control/{lane_departure_checker => autoware_lane_departure_checker}/config/lane_departure_checker.param.yaml (100%) rename control/{lane_departure_checker => autoware_lane_departure_checker}/include/autoware_lane_departure_checker/lane_departure_checker.hpp (100%) rename control/{lane_departure_checker => autoware_lane_departure_checker}/include/autoware_lane_departure_checker/lane_departure_checker_node.hpp (100%) rename control/{lane_departure_checker => autoware_lane_departure_checker}/include/autoware_lane_departure_checker/util/create_vehicle_footprint.hpp (100%) rename control/{lane_departure_checker => autoware_lane_departure_checker}/launch/lane_departure_checker.launch.xml (100%) rename control/{lane_departure_checker => autoware_lane_departure_checker}/package.xml (100%) rename control/{lane_departure_checker => autoware_lane_departure_checker}/schema/lane_departure_checker.json (100%) rename control/{lane_departure_checker => autoware_lane_departure_checker}/src/lane_departure_checker_node/lane_departure_checker.cpp (100%) rename control/{lane_departure_checker => autoware_lane_departure_checker}/src/lane_departure_checker_node/lane_departure_checker_node.cpp (100%) diff --git a/control/lane_departure_checker/CMakeLists.txt b/control/autoware_lane_departure_checker/CMakeLists.txt similarity index 100% rename from control/lane_departure_checker/CMakeLists.txt rename to control/autoware_lane_departure_checker/CMakeLists.txt diff --git a/control/lane_departure_checker/README.md b/control/autoware_lane_departure_checker/README.md similarity index 100% rename from control/lane_departure_checker/README.md rename to control/autoware_lane_departure_checker/README.md diff --git a/control/lane_departure_checker/config/lane_departure_checker.param.yaml b/control/autoware_lane_departure_checker/config/lane_departure_checker.param.yaml similarity index 100% rename from control/lane_departure_checker/config/lane_departure_checker.param.yaml rename to control/autoware_lane_departure_checker/config/lane_departure_checker.param.yaml diff --git a/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker.hpp b/control/autoware_lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker.hpp similarity index 100% rename from control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker.hpp rename to control/autoware_lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker.hpp diff --git a/control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker_node.hpp b/control/autoware_lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker_node.hpp similarity index 100% rename from control/lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker_node.hpp rename to control/autoware_lane_departure_checker/include/autoware_lane_departure_checker/lane_departure_checker_node.hpp diff --git a/control/lane_departure_checker/include/autoware_lane_departure_checker/util/create_vehicle_footprint.hpp b/control/autoware_lane_departure_checker/include/autoware_lane_departure_checker/util/create_vehicle_footprint.hpp similarity index 100% rename from control/lane_departure_checker/include/autoware_lane_departure_checker/util/create_vehicle_footprint.hpp rename to control/autoware_lane_departure_checker/include/autoware_lane_departure_checker/util/create_vehicle_footprint.hpp diff --git a/control/lane_departure_checker/launch/lane_departure_checker.launch.xml b/control/autoware_lane_departure_checker/launch/lane_departure_checker.launch.xml similarity index 100% rename from control/lane_departure_checker/launch/lane_departure_checker.launch.xml rename to control/autoware_lane_departure_checker/launch/lane_departure_checker.launch.xml diff --git a/control/lane_departure_checker/package.xml b/control/autoware_lane_departure_checker/package.xml similarity index 100% rename from control/lane_departure_checker/package.xml rename to control/autoware_lane_departure_checker/package.xml diff --git a/control/lane_departure_checker/schema/lane_departure_checker.json b/control/autoware_lane_departure_checker/schema/lane_departure_checker.json similarity index 100% rename from control/lane_departure_checker/schema/lane_departure_checker.json rename to control/autoware_lane_departure_checker/schema/lane_departure_checker.json diff --git a/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker.cpp b/control/autoware_lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker.cpp similarity index 100% rename from control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker.cpp rename to control/autoware_lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker.cpp diff --git a/control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp b/control/autoware_lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp similarity index 100% rename from control/lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp rename to control/autoware_lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp From 696577febb918cd8a85baf501fdf72a344224dcc Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Mon, 10 Jun 2024 21:08:40 +0900 Subject: [PATCH 086/142] refactor(mission_planner)!: add autoware prefix and namespace (#7414) * refactor(mission_planner)!: add autoware prefix and namespace Signed-off-by: kosuke55 * fix svg Signed-off-by: kosuke55 --------- Signed-off-by: kosuke55 --- .github/CODEOWNERS | 2 +- .../mission_planning/mission_planning.launch.xml | 6 +++--- launch/tier4_planning_launch/package.xml | 2 +- .../CMakeLists.txt | 10 +++++----- .../README.md | 0 .../config/mission_planner.param.yaml | 0 .../mission_planner/mission_planner_plugin.hpp | 4 ++-- .../launch/goal_pose_visualizer.launch.xml | 2 +- .../launch/mission_planner.launch.xml | 6 +++--- .../media/architecture.drawio.svg | 0 .../media/goal_footprints.svg | 0 .../media/rerouting_safety.svg | 0 .../media/route_sections.svg | 0 .../package.xml | 4 ++-- .../plugins/plugin_description.xml | 3 +++ .../schema/mission_planner.schema.json | 0 .../src/goal_pose_visualizer/goal_pose_visualizer.cpp | 6 +++--- .../src/goal_pose_visualizer/goal_pose_visualizer.hpp | 4 ++-- .../src/lanelet2_plugins/default_planner.cpp | 7 ++++--- .../src/lanelet2_plugins/default_planner.hpp | 4 ++-- .../src/lanelet2_plugins/utility_functions.cpp | 0 .../src/lanelet2_plugins/utility_functions.hpp | 0 .../src/mission_planner/arrival_checker.cpp | 4 ++-- .../src/mission_planner/arrival_checker.hpp | 4 ++-- .../src/mission_planner/mission_planner.cpp | 11 ++++++----- .../src/mission_planner/mission_planner.hpp | 4 ++-- .../src/mission_planner/route_selector.cpp | 10 +++++----- .../src/mission_planner/route_selector.hpp | 4 ++-- .../src/mission_planner/service_utils.cpp | 0 .../src/mission_planner/service_utils.hpp | 0 .../autoware_static_centerline_generator/package.xml | 2 +- .../src/static_centerline_generator_node.cpp | 6 +++--- .../test/test_static_centerline_generator.test.py | 2 +- .../mission_planner/plugins/plugin_description.xml | 3 --- 34 files changed, 56 insertions(+), 54 deletions(-) rename planning/{mission_planner => autoware_mission_planner}/CMakeLists.txt (75%) rename planning/{mission_planner => autoware_mission_planner}/README.md (100%) rename planning/{mission_planner => autoware_mission_planner}/config/mission_planner.param.yaml (100%) rename planning/{mission_planner => autoware_mission_planner}/include/mission_planner/mission_planner_plugin.hpp (95%) rename planning/{mission_planner => autoware_mission_planner}/launch/goal_pose_visualizer.launch.xml (75%) rename planning/{mission_planner => autoware_mission_planner}/launch/mission_planner.launch.xml (82%) rename planning/{mission_planner => autoware_mission_planner}/media/architecture.drawio.svg (100%) rename planning/{mission_planner => autoware_mission_planner}/media/goal_footprints.svg (100%) rename planning/{mission_planner => autoware_mission_planner}/media/rerouting_safety.svg (100%) rename planning/{mission_planner => autoware_mission_planner}/media/route_sections.svg (100%) rename planning/{mission_planner => autoware_mission_planner}/package.xml (93%) create mode 100644 planning/autoware_mission_planner/plugins/plugin_description.xml rename planning/{mission_planner => autoware_mission_planner}/schema/mission_planner.schema.json (100%) rename planning/{mission_planner => autoware_mission_planner}/src/goal_pose_visualizer/goal_pose_visualizer.cpp (90%) rename planning/{mission_planner => autoware_mission_planner}/src/goal_pose_visualizer/goal_pose_visualizer.hpp (94%) rename planning/{mission_planner => autoware_mission_planner}/src/lanelet2_plugins/default_planner.cpp (98%) rename planning/{mission_planner => autoware_mission_planner}/src/lanelet2_plugins/default_planner.hpp (97%) rename planning/{mission_planner => autoware_mission_planner}/src/lanelet2_plugins/utility_functions.cpp (100%) rename planning/{mission_planner => autoware_mission_planner}/src/lanelet2_plugins/utility_functions.hpp (100%) rename planning/{mission_planner => autoware_mission_planner}/src/mission_planner/arrival_checker.cpp (96%) rename planning/{mission_planner => autoware_mission_planner}/src/mission_planner/arrival_checker.hpp (95%) rename planning/{mission_planner => autoware_mission_planner}/src/mission_planner/mission_planner.cpp (98%) rename planning/{mission_planner => autoware_mission_planner}/src/mission_planner/mission_planner.hpp (98%) rename planning/{mission_planner => autoware_mission_planner}/src/mission_planner/route_selector.cpp (97%) rename planning/{mission_planner => autoware_mission_planner}/src/mission_planner/route_selector.hpp (98%) rename planning/{mission_planner => autoware_mission_planner}/src/mission_planner/service_utils.cpp (100%) rename planning/{mission_planner => autoware_mission_planner}/src/mission_planner/service_utils.hpp (100%) delete mode 100644 planning/mission_planner/plugins/plugin_description.xml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 732c8972ff0f1..4e260c9a5f6db 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -185,7 +185,7 @@ planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp m planning/behavior_velocity_speed_bump_module/** mdogru@leodrive.ai shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/freespace_planner/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/autoware_freespace_planning_algorithms/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp -planning/mission_planner/** isamu.takagi@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp ryohsuke.mitsudome@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +planning/autoware_mission_planner/** isamu.takagi@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp ryohsuke.mitsudome@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/** maxime.clement@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_planner_common/** maxime.clement@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_planner_node/** maxime.clement@tier4.jp diff --git a/launch/tier4_planning_launch/launch/mission_planning/mission_planning.launch.xml b/launch/tier4_planning_launch/launch/mission_planning/mission_planning.launch.xml index 0885f48a6827d..cd33e7517ddc3 100644 --- a/launch/tier4_planning_launch/launch/mission_planning/mission_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/mission_planning/mission_planning.launch.xml @@ -1,11 +1,11 @@ - + - + - + diff --git a/launch/tier4_planning_launch/package.xml b/launch/tier4_planning_launch/package.xml index 1c881091b0e7d..73783936a84a1 100644 --- a/launch/tier4_planning_launch/package.xml +++ b/launch/tier4_planning_launch/package.xml @@ -62,6 +62,7 @@ autoware_external_cmd_selector autoware_external_velocity_limit_selector autoware_freespace_planner + autoware_mission_planner autoware_path_optimizer autoware_planning_topic_converter autoware_planning_validator @@ -71,7 +72,6 @@ autoware_velocity_smoother behavior_path_planner glog_component - mission_planner obstacle_cruise_planner obstacle_stop_planner planning_evaluator diff --git a/planning/mission_planner/CMakeLists.txt b/planning/autoware_mission_planner/CMakeLists.txt similarity index 75% rename from planning/mission_planner/CMakeLists.txt rename to planning/autoware_mission_planner/CMakeLists.txt index 5f7e9666e03c0..0c235510b968b 100644 --- a/planning/mission_planner/CMakeLists.txt +++ b/planning/autoware_mission_planner/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(mission_planner) +project(autoware_mission_planner) find_package(autoware_cmake REQUIRED) autoware_package() @@ -9,7 +9,7 @@ ament_auto_add_library(goal_pose_visualizer_component SHARED ) rclcpp_components_register_node(goal_pose_visualizer_component - PLUGIN "mission_planner::GoalPoseVisualizer" + PLUGIN "autoware::mission_planner::GoalPoseVisualizer" EXECUTABLE goal_pose_visualizer ) @@ -21,12 +21,12 @@ ament_auto_add_library(${PROJECT_NAME}_component SHARED ) rclcpp_components_register_node(${PROJECT_NAME}_component - PLUGIN "mission_planner::MissionPlanner" + PLUGIN "autoware::mission_planner::MissionPlanner" EXECUTABLE mission_planner ) rclcpp_components_register_node(${PROJECT_NAME}_component - PLUGIN "mission_planner::RouteSelector" + PLUGIN "autoware::mission_planner::RouteSelector" EXECUTABLE route_selector ) @@ -34,7 +34,7 @@ ament_auto_add_library(${PROJECT_NAME}_lanelet2_plugins SHARED src/lanelet2_plugins/default_planner.cpp src/lanelet2_plugins/utility_functions.cpp ) -pluginlib_export_plugin_description_file(mission_planner plugins/plugin_description.xml) +pluginlib_export_plugin_description_file(autoware_mission_planner plugins/plugin_description.xml) ament_auto_package( INSTALL_TO_SHARE diff --git a/planning/mission_planner/README.md b/planning/autoware_mission_planner/README.md similarity index 100% rename from planning/mission_planner/README.md rename to planning/autoware_mission_planner/README.md diff --git a/planning/mission_planner/config/mission_planner.param.yaml b/planning/autoware_mission_planner/config/mission_planner.param.yaml similarity index 100% rename from planning/mission_planner/config/mission_planner.param.yaml rename to planning/autoware_mission_planner/config/mission_planner.param.yaml diff --git a/planning/mission_planner/include/mission_planner/mission_planner_plugin.hpp b/planning/autoware_mission_planner/include/mission_planner/mission_planner_plugin.hpp similarity index 95% rename from planning/mission_planner/include/mission_planner/mission_planner_plugin.hpp rename to planning/autoware_mission_planner/include/mission_planner/mission_planner_plugin.hpp index 80e197e2a8ef9..5933d8879a5f6 100644 --- a/planning/mission_planner/include/mission_planner/mission_planner_plugin.hpp +++ b/planning/autoware_mission_planner/include/mission_planner/mission_planner_plugin.hpp @@ -24,7 +24,7 @@ #include -namespace mission_planner +namespace autoware::mission_planner { class PlannerPlugin @@ -45,6 +45,6 @@ class PlannerPlugin virtual void clearRoute() = 0; }; -} // namespace mission_planner +} // namespace autoware::mission_planner #endif // MISSION_PLANNER__MISSION_PLANNER_PLUGIN_HPP_ diff --git a/planning/mission_planner/launch/goal_pose_visualizer.launch.xml b/planning/autoware_mission_planner/launch/goal_pose_visualizer.launch.xml similarity index 75% rename from planning/mission_planner/launch/goal_pose_visualizer.launch.xml rename to planning/autoware_mission_planner/launch/goal_pose_visualizer.launch.xml index 9146c960b206a..a376bd1da7e58 100644 --- a/planning/mission_planner/launch/goal_pose_visualizer.launch.xml +++ b/planning/autoware_mission_planner/launch/goal_pose_visualizer.launch.xml @@ -2,7 +2,7 @@ - + diff --git a/planning/mission_planner/launch/mission_planner.launch.xml b/planning/autoware_mission_planner/launch/mission_planner.launch.xml similarity index 82% rename from planning/mission_planner/launch/mission_planner.launch.xml rename to planning/autoware_mission_planner/launch/mission_planner.launch.xml index eca6d05bb9463..655662c392213 100644 --- a/planning/mission_planner/launch/mission_planner.launch.xml +++ b/planning/autoware_mission_planner/launch/mission_planner.launch.xml @@ -2,10 +2,10 @@ - + - + @@ -15,7 +15,7 @@ - + diff --git a/planning/mission_planner/media/architecture.drawio.svg b/planning/autoware_mission_planner/media/architecture.drawio.svg similarity index 100% rename from planning/mission_planner/media/architecture.drawio.svg rename to planning/autoware_mission_planner/media/architecture.drawio.svg diff --git a/planning/mission_planner/media/goal_footprints.svg b/planning/autoware_mission_planner/media/goal_footprints.svg similarity index 100% rename from planning/mission_planner/media/goal_footprints.svg rename to planning/autoware_mission_planner/media/goal_footprints.svg diff --git a/planning/mission_planner/media/rerouting_safety.svg b/planning/autoware_mission_planner/media/rerouting_safety.svg similarity index 100% rename from planning/mission_planner/media/rerouting_safety.svg rename to planning/autoware_mission_planner/media/rerouting_safety.svg diff --git a/planning/mission_planner/media/route_sections.svg b/planning/autoware_mission_planner/media/route_sections.svg similarity index 100% rename from planning/mission_planner/media/route_sections.svg rename to planning/autoware_mission_planner/media/route_sections.svg diff --git a/planning/mission_planner/package.xml b/planning/autoware_mission_planner/package.xml similarity index 93% rename from planning/mission_planner/package.xml rename to planning/autoware_mission_planner/package.xml index 6782736c3e173..84b84971329d1 100644 --- a/planning/mission_planner/package.xml +++ b/planning/autoware_mission_planner/package.xml @@ -1,9 +1,9 @@ - mission_planner + autoware_mission_planner 0.1.0 - The mission_planner package + The autoware_mission_planner package Takagi, Isamu Kosuke Takeuchi Ryohsuke Mitsudome diff --git a/planning/autoware_mission_planner/plugins/plugin_description.xml b/planning/autoware_mission_planner/plugins/plugin_description.xml new file mode 100644 index 0000000000000..488e6afd35df1 --- /dev/null +++ b/planning/autoware_mission_planner/plugins/plugin_description.xml @@ -0,0 +1,3 @@ + + + diff --git a/planning/mission_planner/schema/mission_planner.schema.json b/planning/autoware_mission_planner/schema/mission_planner.schema.json similarity index 100% rename from planning/mission_planner/schema/mission_planner.schema.json rename to planning/autoware_mission_planner/schema/mission_planner.schema.json diff --git a/planning/mission_planner/src/goal_pose_visualizer/goal_pose_visualizer.cpp b/planning/autoware_mission_planner/src/goal_pose_visualizer/goal_pose_visualizer.cpp similarity index 90% rename from planning/mission_planner/src/goal_pose_visualizer/goal_pose_visualizer.cpp rename to planning/autoware_mission_planner/src/goal_pose_visualizer/goal_pose_visualizer.cpp index 1dc0075c471af..62a718279a4da 100644 --- a/planning/mission_planner/src/goal_pose_visualizer/goal_pose_visualizer.cpp +++ b/planning/autoware_mission_planner/src/goal_pose_visualizer/goal_pose_visualizer.cpp @@ -14,7 +14,7 @@ #include "goal_pose_visualizer.hpp" -namespace mission_planner +namespace autoware::mission_planner { GoalPoseVisualizer::GoalPoseVisualizer(const rclcpp::NodeOptions & node_options) : Node("goal_pose_visualizer", node_options) @@ -34,7 +34,7 @@ void GoalPoseVisualizer::echo_back_route_callback( goal_pose.pose = msg->goal_pose; pub_goal_pose_->publish(goal_pose); } -} // namespace mission_planner +} // namespace autoware::mission_planner #include -RCLCPP_COMPONENTS_REGISTER_NODE(mission_planner::GoalPoseVisualizer) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::mission_planner::GoalPoseVisualizer) diff --git a/planning/mission_planner/src/goal_pose_visualizer/goal_pose_visualizer.hpp b/planning/autoware_mission_planner/src/goal_pose_visualizer/goal_pose_visualizer.hpp similarity index 94% rename from planning/mission_planner/src/goal_pose_visualizer/goal_pose_visualizer.hpp rename to planning/autoware_mission_planner/src/goal_pose_visualizer/goal_pose_visualizer.hpp index ea0804f309012..3737597556ce4 100644 --- a/planning/mission_planner/src/goal_pose_visualizer/goal_pose_visualizer.hpp +++ b/planning/autoware_mission_planner/src/goal_pose_visualizer/goal_pose_visualizer.hpp @@ -20,7 +20,7 @@ #include #include -namespace mission_planner +namespace autoware::mission_planner { class GoalPoseVisualizer : public rclcpp::Node { @@ -35,5 +35,5 @@ class GoalPoseVisualizer : public rclcpp::Node const autoware_planning_msgs::msg::LaneletRoute::ConstSharedPtr msg); }; -} // namespace mission_planner +} // namespace autoware::mission_planner #endif // GOAL_POSE_VISUALIZER__GOAL_POSE_VISUALIZER_HPP_ diff --git a/planning/mission_planner/src/lanelet2_plugins/default_planner.cpp b/planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.cpp similarity index 98% rename from planning/mission_planner/src/lanelet2_plugins/default_planner.cpp rename to planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.cpp index a7f3cfaa7ee34..a1ef66f5757f5 100644 --- a/planning/mission_planner/src/lanelet2_plugins/default_planner.cpp +++ b/planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.cpp @@ -140,7 +140,7 @@ geometry_msgs::msg::Pose get_closest_centerline_pose( } // anonymous namespace -namespace mission_planner::lanelet2 +namespace autoware::mission_planner::lanelet2 { void DefaultPlanner::initialize_common(rclcpp::Node * node) @@ -482,7 +482,8 @@ void DefaultPlanner::clearRoute() route_handler_.clearRoute(); } -} // namespace mission_planner::lanelet2 +} // namespace autoware::mission_planner::lanelet2 #include -PLUGINLIB_EXPORT_CLASS(mission_planner::lanelet2::DefaultPlanner, mission_planner::PlannerPlugin) +PLUGINLIB_EXPORT_CLASS( + autoware::mission_planner::lanelet2::DefaultPlanner, autoware::mission_planner::PlannerPlugin) diff --git a/planning/mission_planner/src/lanelet2_plugins/default_planner.hpp b/planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.hpp similarity index 97% rename from planning/mission_planner/src/lanelet2_plugins/default_planner.hpp rename to planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.hpp index 49000a750a9a1..6ca47c98b435b 100644 --- a/planning/mission_planner/src/lanelet2_plugins/default_planner.hpp +++ b/planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.hpp @@ -30,7 +30,7 @@ #include #include -namespace mission_planner::lanelet2 +namespace autoware::mission_planner::lanelet2 { struct DefaultPlannerParameters @@ -101,6 +101,6 @@ class DefaultPlanner : public mission_planner::PlannerPlugin Pose refine_goal_height(const Pose & goal, const RouteSections & route_sections); }; -} // namespace mission_planner::lanelet2 +} // namespace autoware::mission_planner::lanelet2 #endif // LANELET2_PLUGINS__DEFAULT_PLANNER_HPP_ diff --git a/planning/mission_planner/src/lanelet2_plugins/utility_functions.cpp b/planning/autoware_mission_planner/src/lanelet2_plugins/utility_functions.cpp similarity index 100% rename from planning/mission_planner/src/lanelet2_plugins/utility_functions.cpp rename to planning/autoware_mission_planner/src/lanelet2_plugins/utility_functions.cpp diff --git a/planning/mission_planner/src/lanelet2_plugins/utility_functions.hpp b/planning/autoware_mission_planner/src/lanelet2_plugins/utility_functions.hpp similarity index 100% rename from planning/mission_planner/src/lanelet2_plugins/utility_functions.hpp rename to planning/autoware_mission_planner/src/lanelet2_plugins/utility_functions.hpp diff --git a/planning/mission_planner/src/mission_planner/arrival_checker.cpp b/planning/autoware_mission_planner/src/mission_planner/arrival_checker.cpp similarity index 96% rename from planning/mission_planner/src/mission_planner/arrival_checker.cpp rename to planning/autoware_mission_planner/src/mission_planner/arrival_checker.cpp index 1e9f02ff0338d..54285bd1491f9 100644 --- a/planning/mission_planner/src/mission_planner/arrival_checker.cpp +++ b/planning/autoware_mission_planner/src/mission_planner/arrival_checker.cpp @@ -20,7 +20,7 @@ #include -namespace mission_planner +namespace autoware::mission_planner { ArrivalChecker::ArrivalChecker(rclcpp::Node * node) : vehicle_stop_checker_(node) @@ -83,4 +83,4 @@ bool ArrivalChecker::is_arrived(const PoseStamped & pose) const return vehicle_stop_checker_.isVehicleStopped(duration_); } -} // namespace mission_planner +} // namespace autoware::mission_planner diff --git a/planning/mission_planner/src/mission_planner/arrival_checker.hpp b/planning/autoware_mission_planner/src/mission_planner/arrival_checker.hpp similarity index 95% rename from planning/mission_planner/src/mission_planner/arrival_checker.hpp rename to planning/autoware_mission_planner/src/mission_planner/arrival_checker.hpp index 44a2e476ec745..55790702d5ef1 100644 --- a/planning/mission_planner/src/mission_planner/arrival_checker.hpp +++ b/planning/autoware_mission_planner/src/mission_planner/arrival_checker.hpp @@ -22,7 +22,7 @@ #include #include -namespace mission_planner +namespace autoware::mission_planner { class ArrivalChecker @@ -45,6 +45,6 @@ class ArrivalChecker motion_utils::VehicleStopChecker vehicle_stop_checker_; }; -} // namespace mission_planner +} // namespace autoware::mission_planner #endif // MISSION_PLANNER__ARRIVAL_CHECKER_HPP_ diff --git a/planning/mission_planner/src/mission_planner/mission_planner.cpp b/planning/autoware_mission_planner/src/mission_planner/mission_planner.cpp similarity index 98% rename from planning/mission_planner/src/mission_planner/mission_planner.cpp rename to planning/autoware_mission_planner/src/mission_planner/mission_planner.cpp index d95bcb8caefae..52f6e4ca191f5 100644 --- a/planning/mission_planner/src/mission_planner/mission_planner.cpp +++ b/planning/autoware_mission_planner/src/mission_planner/mission_planner.cpp @@ -29,13 +29,13 @@ #include #include -namespace mission_planner +namespace autoware::mission_planner { MissionPlanner::MissionPlanner(const rclcpp::NodeOptions & options) : Node("mission_planner", options), arrival_checker_(this), - plugin_loader_("mission_planner", "mission_planner::PlannerPlugin"), + plugin_loader_("autoware_mission_planner", "autoware::mission_planner::PlannerPlugin"), tf_buffer_(get_clock()), tf_listener_(tf_buffer_), odometry_(nullptr), @@ -48,7 +48,8 @@ MissionPlanner::MissionPlanner(const rclcpp::NodeOptions & options) reroute_time_threshold_ = declare_parameter("reroute_time_threshold"); minimum_reroute_length_ = declare_parameter("minimum_reroute_length"); - planner_ = plugin_loader_.createSharedInstance("mission_planner::lanelet2::DefaultPlanner"); + planner_ = + plugin_loader_.createSharedInstance("autoware::mission_planner::lanelet2::DefaultPlanner"); planner_->initialize(this); const auto reroute_availability = std::make_shared(); @@ -614,7 +615,7 @@ bool MissionPlanner::check_reroute_safety( accumulated_length, safety_length); return false; } -} // namespace mission_planner +} // namespace autoware::mission_planner #include -RCLCPP_COMPONENTS_REGISTER_NODE(mission_planner::MissionPlanner) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::mission_planner::MissionPlanner) diff --git a/planning/mission_planner/src/mission_planner/mission_planner.hpp b/planning/autoware_mission_planner/src/mission_planner/mission_planner.hpp similarity index 98% rename from planning/mission_planner/src/mission_planner/mission_planner.hpp rename to planning/autoware_mission_planner/src/mission_planner/mission_planner.hpp index 3d712a351d94a..3bdac1e75f9c4 100644 --- a/planning/mission_planner/src/mission_planner/mission_planner.hpp +++ b/planning/autoware_mission_planner/src/mission_planner/mission_planner.hpp @@ -41,7 +41,7 @@ #include #include -namespace mission_planner +namespace autoware::mission_planner { using autoware_map_msgs::msg::LaneletMapBin; @@ -134,6 +134,6 @@ class MissionPlanner : public rclcpp::Node std::unique_ptr logger_configure_; }; -} // namespace mission_planner +} // namespace autoware::mission_planner #endif // MISSION_PLANNER__MISSION_PLANNER_HPP_ diff --git a/planning/mission_planner/src/mission_planner/route_selector.cpp b/planning/autoware_mission_planner/src/mission_planner/route_selector.cpp similarity index 97% rename from planning/mission_planner/src/mission_planner/route_selector.cpp rename to planning/autoware_mission_planner/src/mission_planner/route_selector.cpp index 7547333d55cd1..bfc809b921d90 100644 --- a/planning/mission_planner/src/mission_planner/route_selector.cpp +++ b/planning/autoware_mission_planner/src/mission_planner/route_selector.cpp @@ -20,7 +20,7 @@ #include #include -namespace mission_planner::uuid +namespace autoware::mission_planner::uuid { std::array generate_random_id() @@ -40,9 +40,9 @@ UUID generate_if_empty(const UUID & uuid) return result; } -} // namespace mission_planner::uuid +} // namespace autoware::mission_planner::uuid -namespace mission_planner +namespace autoware::mission_planner { RouteInterface::RouteInterface(rclcpp::Clock::SharedPtr clock) @@ -296,7 +296,7 @@ ResponseStatus RouteSelector::resume_main_route(ClearRoute::Request::SharedPtr r throw std::logic_error("route_selector: unknown main route request"); } -} // namespace mission_planner +} // namespace autoware::mission_planner #include -RCLCPP_COMPONENTS_REGISTER_NODE(mission_planner::RouteSelector) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::mission_planner::RouteSelector) diff --git a/planning/mission_planner/src/mission_planner/route_selector.hpp b/planning/autoware_mission_planner/src/mission_planner/route_selector.hpp similarity index 98% rename from planning/mission_planner/src/mission_planner/route_selector.hpp rename to planning/autoware_mission_planner/src/mission_planner/route_selector.hpp index 3226d1a7cb993..a3423d7fbf1bd 100644 --- a/planning/mission_planner/src/mission_planner/route_selector.hpp +++ b/planning/autoware_mission_planner/src/mission_planner/route_selector.hpp @@ -26,7 +26,7 @@ #include #include -namespace mission_planner +namespace autoware::mission_planner { using autoware_common_msgs::msg::ResponseStatus; @@ -101,6 +101,6 @@ class RouteSelector : public rclcpp::Node ResponseStatus resume_main_route(ClearRoute::Request::SharedPtr req); }; -} // namespace mission_planner +} // namespace autoware::mission_planner #endif // MISSION_PLANNER__ROUTE_SELECTOR_HPP_ diff --git a/planning/mission_planner/src/mission_planner/service_utils.cpp b/planning/autoware_mission_planner/src/mission_planner/service_utils.cpp similarity index 100% rename from planning/mission_planner/src/mission_planner/service_utils.cpp rename to planning/autoware_mission_planner/src/mission_planner/service_utils.cpp diff --git a/planning/mission_planner/src/mission_planner/service_utils.hpp b/planning/autoware_mission_planner/src/mission_planner/service_utils.hpp similarity index 100% rename from planning/mission_planner/src/mission_planner/service_utils.hpp rename to planning/autoware_mission_planner/src/mission_planner/service_utils.hpp diff --git a/planning/autoware_static_centerline_generator/package.xml b/planning/autoware_static_centerline_generator/package.xml index a5e09ceb6270b..29a145d21db43 100644 --- a/planning/autoware_static_centerline_generator/package.xml +++ b/planning/autoware_static_centerline_generator/package.xml @@ -17,6 +17,7 @@ autoware_behavior_path_planner_common autoware_map_msgs + autoware_mission_planner autoware_path_optimizer autoware_path_smoother autoware_perception_msgs @@ -29,7 +30,6 @@ lanelet2_extension map_loader map_projection_loader - mission_planner motion_utils osqp_interface rclcpp diff --git a/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.cpp b/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.cpp index b8a3a8baf67a3..b907ec2529fcc 100644 --- a/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.cpp +++ b/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.cpp @@ -439,10 +439,10 @@ std::vector StaticCenterlineGeneratorNode::plan_route( // plan route by the mission_planner package const auto route = [&]() { // create mission_planner plugin - auto plugin_loader = pluginlib::ClassLoader( - "mission_planner", "mission_planner::PlannerPlugin"); + auto plugin_loader = pluginlib::ClassLoader( + "autoware_mission_planner", "autoware::mission_planner::PlannerPlugin"); auto mission_planner = - plugin_loader.createSharedInstance("mission_planner::lanelet2::DefaultPlanner"); + plugin_loader.createSharedInstance("autoware::mission_planner::lanelet2::DefaultPlanner"); // initialize mission_planner auto node = rclcpp::Node("mission_planner"); diff --git a/planning/autoware_static_centerline_generator/test/test_static_centerline_generator.test.py b/planning/autoware_static_centerline_generator/test/test_static_centerline_generator.test.py index 6316afc8cb3dc..02d9cbc1e24a0 100644 --- a/planning/autoware_static_centerline_generator/test/test_static_centerline_generator.test.py +++ b/planning/autoware_static_centerline_generator/test/test_static_centerline_generator.test.py @@ -46,7 +46,7 @@ def generate_test_description(): {"start_lanelet_id": 215}, {"end_lanelet_id": 216}, os.path.join( - get_package_share_directory("mission_planner"), + get_package_share_directory("autoware_mission_planner"), "config", "mission_planner.param.yaml", ), diff --git a/planning/mission_planner/plugins/plugin_description.xml b/planning/mission_planner/plugins/plugin_description.xml deleted file mode 100644 index e833a32fdbe9b..0000000000000 --- a/planning/mission_planner/plugins/plugin_description.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - From 7b4ca26882660d5c0f088a9d0013daadcbfe2ff9 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Mon, 10 Jun 2024 21:34:19 +0900 Subject: [PATCH 087/142] feat(avoidance): keep enough distance to avoid object in front of red signal (#6898) Signed-off-by: satoshi-ota --- .../data_structs.hpp | 3 +++ .../helper.hpp | 5 +++++ .../src/scene.cpp | 4 ++++ .../src/shift_line_generator.cpp | 8 +++++++- 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware_behavior_path_static_obstacle_avoidance_module/data_structs.hpp b/planning/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware_behavior_path_static_obstacle_avoidance_module/data_structs.hpp index 15ddc3703ead2..78a8b8b125850 100644 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware_behavior_path_static_obstacle_avoidance_module/data_structs.hpp +++ b/planning/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware_behavior_path_static_obstacle_avoidance_module/data_structs.hpp @@ -59,6 +59,7 @@ enum class ObjectInfo { // unavoidable reasons NEED_DECELERATION, SAME_DIRECTION_SHIFT, + LIMIT_DRIVABLE_SPACE_TEMPORARY, INSUFFICIENT_DRIVABLE_SPACE, INSUFFICIENT_LONGITUDINAL_DISTANCE, INVALID_SHIFT_LINE, @@ -546,6 +547,8 @@ struct AvoidancePlanningData // nearest object that should be avoid std::optional stop_target_object{std::nullopt}; + std::optional red_signal_lane{std::nullopt}; + // new shift point AvoidLineArray new_shift_line{}; diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware_behavior_path_static_obstacle_avoidance_module/helper.hpp b/planning/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware_behavior_path_static_obstacle_avoidance_module/helper.hpp index 7deed888f081e..b33e7486ce2f3 100644 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware_behavior_path_static_obstacle_avoidance_module/helper.hpp +++ b/planning/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware_behavior_path_static_obstacle_avoidance_module/helper.hpp @@ -357,6 +357,11 @@ class AvoidanceHelper return false; } + // can avoid it after relax drivable space limitation. + if (object.info == ObjectInfo::LIMIT_DRIVABLE_SPACE_TEMPORARY) { + return false; + } + return true; } diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp b/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp index 9972263cb4fd2..bdfe4e07272f6 100644 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp +++ b/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp @@ -210,6 +210,9 @@ void StaticObstacleAvoidanceModule::fillFundamentalData( utils::static_obstacle_avoidance::isWithinLanes(data.current_lanelets, planner_data_); const auto red_signal_lane_itr = std::find_if( data.current_lanelets.begin(), data.current_lanelets.end(), [&](const auto & lanelet) { + if (utils::traffic_light::isTrafficSignalStop({lanelet}, planner_data_)) { + return true; + } const auto next_lanes = planner_data_->route_handler->getNextLanelets(lanelet); return utils::traffic_light::isTrafficSignalStop(next_lanes, planner_data_); }); @@ -229,6 +232,7 @@ void StaticObstacleAvoidanceModule::fillFundamentalData( } else { data.drivable_lanes.push_back( utils::static_obstacle_avoidance::generateNotExpandedDrivableLanes(lanelet)); + data.red_signal_lane = lanelet; } }); diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp b/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp index 0a362d48574fc..2b3b47272db37 100644 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp +++ b/planning/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp @@ -246,7 +246,13 @@ AvoidOutlines ShiftLineGenerator::generateAvoidOutline( AvoidOutlines outlines; for (auto & o : data.target_objects) { if (!o.avoid_margin.has_value()) { - o.info = ObjectInfo::INSUFFICIENT_DRIVABLE_SPACE; + if (!data.red_signal_lane.has_value()) { + o.info = ObjectInfo::INSUFFICIENT_DRIVABLE_SPACE; + } else if (data.red_signal_lane.value().id() == o.overhang_lanelet.id()) { + o.info = ObjectInfo::LIMIT_DRIVABLE_SPACE_TEMPORARY; + } else { + o.info = ObjectInfo::INSUFFICIENT_DRIVABLE_SPACE; + } if (o.avoid_required && is_forward_object(o)) { break; } else { From d37dbb9e4a1a771a8ec6aba0c32059633c0fdfca Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Mon, 10 Jun 2024 22:06:49 +0900 Subject: [PATCH 088/142] refactor(crosswalk_traffic_light_estimator)!: add autoware_ prefix (#7365) * add prefix Signed-off-by: Yuki Takagi --- .github/CODEOWNERS | 2 +- .../traffic_light_recognition/traffic_light.launch.xml | 4 ++-- launch/tier4_perception_launch/package.xml | 2 +- .../CMakeLists.txt | 8 ++++---- .../README.md | 0 .../crosswalk_traffic_light_estimator.param.yaml | 0 .../images/intersection1.svg | 0 .../images/intersection2.svg | 0 .../images/straight.drawio.svg | 0 .../node.hpp | 10 +++++----- .../crosswalk_traffic_light_estimator.launch.xml | 4 ++-- .../package.xml | 4 ++-- .../crosswalk_traffic_light_estimator.schema.json | 0 .../src/node.cpp | 9 +++++---- 14 files changed, 22 insertions(+), 21 deletions(-) rename perception/{crosswalk_traffic_light_estimator => autoware_crosswalk_traffic_light_estimator}/CMakeLists.txt (61%) rename perception/{crosswalk_traffic_light_estimator => autoware_crosswalk_traffic_light_estimator}/README.md (100%) rename perception/{crosswalk_traffic_light_estimator => autoware_crosswalk_traffic_light_estimator}/config/crosswalk_traffic_light_estimator.param.yaml (100%) rename perception/{crosswalk_traffic_light_estimator => autoware_crosswalk_traffic_light_estimator}/images/intersection1.svg (100%) rename perception/{crosswalk_traffic_light_estimator => autoware_crosswalk_traffic_light_estimator}/images/intersection2.svg (100%) rename perception/{crosswalk_traffic_light_estimator => autoware_crosswalk_traffic_light_estimator}/images/straight.drawio.svg (100%) rename perception/{crosswalk_traffic_light_estimator/include/crosswalk_traffic_light_estimator => autoware_crosswalk_traffic_light_estimator/include/autoware_crosswalk_traffic_light_estimator}/node.hpp (93%) rename perception/{crosswalk_traffic_light_estimator => autoware_crosswalk_traffic_light_estimator}/launch/crosswalk_traffic_light_estimator.launch.xml (78%) rename perception/{crosswalk_traffic_light_estimator => autoware_crosswalk_traffic_light_estimator}/package.xml (86%) rename perception/{crosswalk_traffic_light_estimator => autoware_crosswalk_traffic_light_estimator}/schema/crosswalk_traffic_light_estimator.schema.json (100%) rename perception/{crosswalk_traffic_light_estimator => autoware_crosswalk_traffic_light_estimator}/src/node.cpp (98%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4e260c9a5f6db..1541120912eb4 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -106,7 +106,7 @@ map/util/lanelet2_map_preprocessor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tie perception/bytetrack/** manato.hirabayashi@tier4.jp yoshi.ri@tier4.jp perception/cluster_merger/** dai.nguyen@tier4.jp shunsuke.miura@tier4.jp yukihiro.saito@tier4.jp perception/compare_map_segmentation/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp yukihiro.saito@tier4.jp -perception/crosswalk_traffic_light_estimator/** satoshi.ota@tier4.jp shunsuke.miura@tier4.jp tao.zhong@tier4.jp +perception/autoware_crosswalk_traffic_light_estimator/** satoshi.ota@tier4.jp shunsuke.miura@tier4.jp tao.zhong@tier4.jp perception/detected_object_feature_remover/** tomoya.kimura@tier4.jp perception/detected_object_validation/** dai.nguyen@tier4.jp shintaro.tomie@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/detection_by_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp diff --git a/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light.launch.xml b/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light.launch.xml index 21143aa0cb28a..ed7ff059a6e53 100644 --- a/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light.launch.xml +++ b/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light.launch.xml @@ -17,7 +17,7 @@ - + @@ -158,7 +158,7 @@ - + diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index c74ef297aba6b..6ec706a4aad32 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -12,10 +12,10 @@ ament_cmake_auto autoware_cmake + autoware_crosswalk_traffic_light_estimator autoware_map_based_prediction cluster_merger compare_map_segmentation - crosswalk_traffic_light_estimator detected_object_feature_remover detected_object_validation detection_by_tracker diff --git a/perception/crosswalk_traffic_light_estimator/CMakeLists.txt b/perception/autoware_crosswalk_traffic_light_estimator/CMakeLists.txt similarity index 61% rename from perception/crosswalk_traffic_light_estimator/CMakeLists.txt rename to perception/autoware_crosswalk_traffic_light_estimator/CMakeLists.txt index 2947070eca01e..31a098a8686ec 100644 --- a/perception/crosswalk_traffic_light_estimator/CMakeLists.txt +++ b/perception/autoware_crosswalk_traffic_light_estimator/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) -project(crosswalk_traffic_light_estimator) +project(autoware_crosswalk_traffic_light_estimator) find_package(autoware_cmake REQUIRED) autoware_package() @@ -10,12 +10,12 @@ autoware_package() include_directories() -ament_auto_add_library(crosswalk_traffic_light_estimator SHARED +ament_auto_add_library(autoware_crosswalk_traffic_light_estimator SHARED src/node.cpp ) -rclcpp_components_register_node(crosswalk_traffic_light_estimator - PLUGIN "traffic_light::CrosswalkTrafficLightEstimatorNode" +rclcpp_components_register_node(autoware_crosswalk_traffic_light_estimator + PLUGIN "autoware::crosswalk_traffic_light_estimator::CrosswalkTrafficLightEstimatorNode" EXECUTABLE crosswalk_traffic_light_estimator_node ) diff --git a/perception/crosswalk_traffic_light_estimator/README.md b/perception/autoware_crosswalk_traffic_light_estimator/README.md similarity index 100% rename from perception/crosswalk_traffic_light_estimator/README.md rename to perception/autoware_crosswalk_traffic_light_estimator/README.md diff --git a/perception/crosswalk_traffic_light_estimator/config/crosswalk_traffic_light_estimator.param.yaml b/perception/autoware_crosswalk_traffic_light_estimator/config/crosswalk_traffic_light_estimator.param.yaml similarity index 100% rename from perception/crosswalk_traffic_light_estimator/config/crosswalk_traffic_light_estimator.param.yaml rename to perception/autoware_crosswalk_traffic_light_estimator/config/crosswalk_traffic_light_estimator.param.yaml diff --git a/perception/crosswalk_traffic_light_estimator/images/intersection1.svg b/perception/autoware_crosswalk_traffic_light_estimator/images/intersection1.svg similarity index 100% rename from perception/crosswalk_traffic_light_estimator/images/intersection1.svg rename to perception/autoware_crosswalk_traffic_light_estimator/images/intersection1.svg diff --git a/perception/crosswalk_traffic_light_estimator/images/intersection2.svg b/perception/autoware_crosswalk_traffic_light_estimator/images/intersection2.svg similarity index 100% rename from perception/crosswalk_traffic_light_estimator/images/intersection2.svg rename to perception/autoware_crosswalk_traffic_light_estimator/images/intersection2.svg diff --git a/perception/crosswalk_traffic_light_estimator/images/straight.drawio.svg b/perception/autoware_crosswalk_traffic_light_estimator/images/straight.drawio.svg similarity index 100% rename from perception/crosswalk_traffic_light_estimator/images/straight.drawio.svg rename to perception/autoware_crosswalk_traffic_light_estimator/images/straight.drawio.svg diff --git a/perception/crosswalk_traffic_light_estimator/include/crosswalk_traffic_light_estimator/node.hpp b/perception/autoware_crosswalk_traffic_light_estimator/include/autoware_crosswalk_traffic_light_estimator/node.hpp similarity index 93% rename from perception/crosswalk_traffic_light_estimator/include/crosswalk_traffic_light_estimator/node.hpp rename to perception/autoware_crosswalk_traffic_light_estimator/include/autoware_crosswalk_traffic_light_estimator/node.hpp index 5072f8b8fc296..de53d78d7f782 100644 --- a/perception/crosswalk_traffic_light_estimator/include/crosswalk_traffic_light_estimator/node.hpp +++ b/perception/autoware_crosswalk_traffic_light_estimator/include/autoware_crosswalk_traffic_light_estimator/node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef CROSSWALK_TRAFFIC_LIGHT_ESTIMATOR__NODE_HPP_ -#define CROSSWALK_TRAFFIC_LIGHT_ESTIMATOR__NODE_HPP_ +#ifndef AUTOWARE_CROSSWALK_TRAFFIC_LIGHT_ESTIMATOR__NODE_HPP_ +#define AUTOWARE_CROSSWALK_TRAFFIC_LIGHT_ESTIMATOR__NODE_HPP_ #include #include @@ -36,7 +36,7 @@ #include #include #include -namespace traffic_light +namespace autoware::crosswalk_traffic_light_estimator { using autoware_map_msgs::msg::LaneletMapBin; @@ -117,6 +117,6 @@ class CrosswalkTrafficLightEstimatorNode : public rclcpp::Node std::shared_ptr pub_processing_time_; }; -} // namespace traffic_light +} // namespace autoware::crosswalk_traffic_light_estimator -#endif // CROSSWALK_TRAFFIC_LIGHT_ESTIMATOR__NODE_HPP_ +#endif // AUTOWARE_CROSSWALK_TRAFFIC_LIGHT_ESTIMATOR__NODE_HPP_ diff --git a/perception/crosswalk_traffic_light_estimator/launch/crosswalk_traffic_light_estimator.launch.xml b/perception/autoware_crosswalk_traffic_light_estimator/launch/crosswalk_traffic_light_estimator.launch.xml similarity index 78% rename from perception/crosswalk_traffic_light_estimator/launch/crosswalk_traffic_light_estimator.launch.xml rename to perception/autoware_crosswalk_traffic_light_estimator/launch/crosswalk_traffic_light_estimator.launch.xml index 21d718c3439cd..2e1437ecd7d93 100644 --- a/perception/crosswalk_traffic_light_estimator/launch/crosswalk_traffic_light_estimator.launch.xml +++ b/perception/autoware_crosswalk_traffic_light_estimator/launch/crosswalk_traffic_light_estimator.launch.xml @@ -11,9 +11,9 @@ limitations under the License. --> - + - + diff --git a/perception/crosswalk_traffic_light_estimator/package.xml b/perception/autoware_crosswalk_traffic_light_estimator/package.xml similarity index 86% rename from perception/crosswalk_traffic_light_estimator/package.xml rename to perception/autoware_crosswalk_traffic_light_estimator/package.xml index 123b721c40e0a..d844ea27b52b5 100644 --- a/perception/crosswalk_traffic_light_estimator/package.xml +++ b/perception/autoware_crosswalk_traffic_light_estimator/package.xml @@ -1,8 +1,8 @@ - crosswalk_traffic_light_estimator + autoware_crosswalk_traffic_light_estimator 0.1.0 - The crosswalk_traffic_light_estimator package + The autoware_crosswalk_traffic_light_estimator package Satoshi Ota Shunsuke Miura diff --git a/perception/crosswalk_traffic_light_estimator/schema/crosswalk_traffic_light_estimator.schema.json b/perception/autoware_crosswalk_traffic_light_estimator/schema/crosswalk_traffic_light_estimator.schema.json similarity index 100% rename from perception/crosswalk_traffic_light_estimator/schema/crosswalk_traffic_light_estimator.schema.json rename to perception/autoware_crosswalk_traffic_light_estimator/schema/crosswalk_traffic_light_estimator.schema.json diff --git a/perception/crosswalk_traffic_light_estimator/src/node.cpp b/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp similarity index 98% rename from perception/crosswalk_traffic_light_estimator/src/node.cpp rename to perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp index 2a760b3f00e4e..2c4da0b95b161 100644 --- a/perception/crosswalk_traffic_light_estimator/src/node.cpp +++ b/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp @@ -11,7 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#include "crosswalk_traffic_light_estimator/node.hpp" +#include "autoware_crosswalk_traffic_light_estimator/node.hpp" #include #include @@ -21,7 +21,7 @@ #include #include -namespace traffic_light +namespace autoware::crosswalk_traffic_light_estimator { namespace { @@ -538,8 +538,9 @@ void CrosswalkTrafficLightEstimatorNode::removeDuplicateIds(TrafficSignalArray & signals.end()); } -} // namespace traffic_light +} // namespace autoware::crosswalk_traffic_light_estimator #include -RCLCPP_COMPONENTS_REGISTER_NODE(traffic_light::CrosswalkTrafficLightEstimatorNode) +RCLCPP_COMPONENTS_REGISTER_NODE( + autoware::crosswalk_traffic_light_estimator::CrosswalkTrafficLightEstimatorNode) From 213c7c31dfba0c580f799323b1892a2084313ba3 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Mon, 10 Jun 2024 23:59:28 +0900 Subject: [PATCH 089/142] refactor(goal_planner): add autoware prefix (#7420) --- .github/CODEOWNERS | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/goal_planner.param.yaml | 0 .../images/arc_backward_parking.drawio.svg | 0 .../images/arc_forward_parking.drawio.svg | 0 ..._planner-collision_check_margin.drawio.svg | 0 .../goal_planner-deciding_path.drawio.svg | 0 .../goal_planner-goal_candidates.drawio.svg | 0 .../goal_planner-goal_distance.drawio.svg | 0 .../images/goal_planner-is_safe.drawio.svg | 0 ...oal_planner-longitudinal_margin.drawio.svg | 0 .../goal_planner-object_to_avoid.drawio.svg | 0 .../goal_planner-refined_goal.drawio.svg | 0 .../goal_planner-safety_check.drawio.svg | 0 .../images/goal_planner-threads.drawio.svg | 0 .../goal_priority_object_to_avoid_rviz.png | Bin .../images/goal_priority_rviz.png | Bin .../images/goal_priority_with_goal.png | Bin .../images/path_goal_refinement.drawio.svg | 0 ...ver_freespace_parking_flowchart.drawio.svg | 0 .../images/shift_parking.drawio.svg | 0 .../default_fixed_goal_planner.hpp | 8 +++---- .../fixed_goal_planner_base.hpp | 6 +++--- .../freespace_pull_over.hpp | 8 +++---- .../geometric_pull_over.hpp | 8 +++---- .../goal_planner_module.hpp | 20 +++++++++--------- .../goal_planner_parameters.hpp | 6 +++--- .../goal_searcher.hpp | 8 +++---- .../goal_searcher_base.hpp | 8 +++---- .../manager.hpp | 8 +++---- .../pull_over_planner_base.hpp | 8 +++---- .../shift_pull_over.hpp | 8 +++---- .../util.hpp | 8 +++---- .../package.xml | 4 ++-- .../plugins.xml | 2 +- .../src/default_fixed_goal_planner.cpp | 4 ++-- .../src/freespace_pull_over.cpp | 4 ++-- .../src/geometric_pull_over.cpp | 4 ++-- .../src/goal_planner_module.cpp | 4 ++-- .../src/goal_searcher.cpp | 4 ++-- .../src/manager.cpp | 4 ++-- .../src/shift_pull_over.cpp | 4 ++-- .../src/util.cpp | 2 +- planning/behavior_path_planner/README.md | 2 +- 45 files changed, 73 insertions(+), 73 deletions(-) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/CMakeLists.txt (90%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/README.md (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/config/goal_planner.param.yaml (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/arc_backward_parking.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/arc_forward_parking.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/goal_planner-collision_check_margin.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/goal_planner-deciding_path.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/goal_planner-goal_candidates.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/goal_planner-goal_distance.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/goal_planner-is_safe.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/goal_planner-longitudinal_margin.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/goal_planner-object_to_avoid.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/goal_planner-refined_goal.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/goal_planner-safety_check.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/goal_planner-threads.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/goal_priority_object_to_avoid_rviz.png (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/goal_priority_rviz.png (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/goal_priority_with_goal.png (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/path_goal_refinement.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/pull_over_freespace_parking_flowchart.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/images/shift_parking.drawio.svg (100%) rename planning/{behavior_path_goal_planner_module/include/behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module}/default_fixed_goal_planner.hpp (80%) rename planning/{behavior_path_goal_planner_module/include/behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module}/fixed_goal_planner_base.hpp (85%) rename planning/{behavior_path_goal_planner_module/include/behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module}/freespace_pull_over.hpp (84%) rename planning/{behavior_path_goal_planner_module/include/behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module}/geometric_pull_over.hpp (88%) rename planning/{behavior_path_goal_planner_module/include/behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module}/goal_planner_module.hpp (97%) rename planning/{behavior_path_goal_planner_module/include/behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module}/goal_planner_parameters.hpp (94%) rename planning/{behavior_path_goal_planner_module/include/behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module}/goal_searcher.hpp (91%) rename planning/{behavior_path_goal_planner_module/include/behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module}/goal_searcher_base.hpp (89%) rename planning/{behavior_path_goal_planner_module/include/behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module}/manager.hpp (85%) rename planning/{behavior_path_goal_planner_module/include/behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module}/pull_over_planner_base.hpp (92%) rename planning/{behavior_path_goal_planner_module/include/behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module}/shift_pull_over.hpp (88%) rename planning/{behavior_path_goal_planner_module/include/behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module}/util.hpp (95%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/package.xml (91%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/plugins.xml (70%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/src/default_fixed_goal_planner.cpp (96%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/src/freespace_pull_over.cpp (97%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/src/geometric_pull_over.cpp (95%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/src/goal_planner_module.cpp (99%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/src/goal_searcher.cpp (99%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/src/manager.cpp (99%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/src/shift_pull_over.cpp (99%) rename planning/{behavior_path_goal_planner_module => autoware_behavior_path_goal_planner_module}/src/util.cpp (99%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1541120912eb4..54d605870018f 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -164,7 +164,7 @@ planning/autoware_planning_topic_converter/** kosuke.takeuchi@tier4.jp satoshi.o planning/autoware_remaining_distance_time_calculator/** ahmed.ebrahim@leodrive.ai planning/autoware_static_centerline_generator/** kosuke.takeuchi@tier4.jp takayuki.murooka@tier4.jp planning/autoware_velocity_smoother/** fumiya.watanabe@tier4.jp makoto.kurihara@tier4.jp satoshi.ota@tier4.jp takamasa.horibe@tier4.jp -planning/behavior_path_goal_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_path_goal_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_path_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/behavior_path_planner/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/behavior_path_sampling_planner_module/** daniel.sanchez@tier4.jp maxime.clement@tier4.jp diff --git a/planning/behavior_path_goal_planner_module/CMakeLists.txt b/planning/autoware_behavior_path_goal_planner_module/CMakeLists.txt similarity index 90% rename from planning/behavior_path_goal_planner_module/CMakeLists.txt rename to planning/autoware_behavior_path_goal_planner_module/CMakeLists.txt index c91289bf29e2c..c6f008a624960 100644 --- a/planning/behavior_path_goal_planner_module/CMakeLists.txt +++ b/planning/autoware_behavior_path_goal_planner_module/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(behavior_path_goal_planner_module) +project(autoware_behavior_path_goal_planner_module) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/planning/behavior_path_goal_planner_module/README.md b/planning/autoware_behavior_path_goal_planner_module/README.md similarity index 100% rename from planning/behavior_path_goal_planner_module/README.md rename to planning/autoware_behavior_path_goal_planner_module/README.md diff --git a/planning/behavior_path_goal_planner_module/config/goal_planner.param.yaml b/planning/autoware_behavior_path_goal_planner_module/config/goal_planner.param.yaml similarity index 100% rename from planning/behavior_path_goal_planner_module/config/goal_planner.param.yaml rename to planning/autoware_behavior_path_goal_planner_module/config/goal_planner.param.yaml diff --git a/planning/behavior_path_goal_planner_module/images/arc_backward_parking.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/arc_backward_parking.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/arc_backward_parking.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/arc_backward_parking.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/arc_forward_parking.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/arc_forward_parking.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/arc_forward_parking.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/arc_forward_parking.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/goal_planner-collision_check_margin.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/goal_planner-collision_check_margin.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/goal_planner-collision_check_margin.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/goal_planner-collision_check_margin.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/goal_planner-deciding_path.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/goal_planner-deciding_path.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/goal_planner-deciding_path.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/goal_planner-deciding_path.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/goal_planner-goal_candidates.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/goal_planner-goal_candidates.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/goal_planner-goal_candidates.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/goal_planner-goal_candidates.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/goal_planner-goal_distance.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/goal_planner-goal_distance.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/goal_planner-goal_distance.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/goal_planner-goal_distance.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/goal_planner-is_safe.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/goal_planner-is_safe.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/goal_planner-is_safe.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/goal_planner-is_safe.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/goal_planner-longitudinal_margin.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/goal_planner-longitudinal_margin.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/goal_planner-longitudinal_margin.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/goal_planner-longitudinal_margin.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/goal_planner-object_to_avoid.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/goal_planner-object_to_avoid.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/goal_planner-object_to_avoid.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/goal_planner-object_to_avoid.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/goal_planner-refined_goal.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/goal_planner-refined_goal.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/goal_planner-refined_goal.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/goal_planner-refined_goal.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/goal_planner-safety_check.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/goal_planner-safety_check.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/goal_planner-safety_check.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/goal_planner-safety_check.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/goal_planner-threads.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/goal_planner-threads.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/goal_planner-threads.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/goal_planner-threads.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/goal_priority_object_to_avoid_rviz.png b/planning/autoware_behavior_path_goal_planner_module/images/goal_priority_object_to_avoid_rviz.png similarity index 100% rename from planning/behavior_path_goal_planner_module/images/goal_priority_object_to_avoid_rviz.png rename to planning/autoware_behavior_path_goal_planner_module/images/goal_priority_object_to_avoid_rviz.png diff --git a/planning/behavior_path_goal_planner_module/images/goal_priority_rviz.png b/planning/autoware_behavior_path_goal_planner_module/images/goal_priority_rviz.png similarity index 100% rename from planning/behavior_path_goal_planner_module/images/goal_priority_rviz.png rename to planning/autoware_behavior_path_goal_planner_module/images/goal_priority_rviz.png diff --git a/planning/behavior_path_goal_planner_module/images/goal_priority_with_goal.png b/planning/autoware_behavior_path_goal_planner_module/images/goal_priority_with_goal.png similarity index 100% rename from planning/behavior_path_goal_planner_module/images/goal_priority_with_goal.png rename to planning/autoware_behavior_path_goal_planner_module/images/goal_priority_with_goal.png diff --git a/planning/behavior_path_goal_planner_module/images/path_goal_refinement.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/path_goal_refinement.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/path_goal_refinement.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/path_goal_refinement.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/pull_over_freespace_parking_flowchart.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/pull_over_freespace_parking_flowchart.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/pull_over_freespace_parking_flowchart.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/pull_over_freespace_parking_flowchart.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/images/shift_parking.drawio.svg b/planning/autoware_behavior_path_goal_planner_module/images/shift_parking.drawio.svg similarity index 100% rename from planning/behavior_path_goal_planner_module/images/shift_parking.drawio.svg rename to planning/autoware_behavior_path_goal_planner_module/images/shift_parking.drawio.svg diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/default_fixed_goal_planner.hpp b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/default_fixed_goal_planner.hpp similarity index 80% rename from planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/default_fixed_goal_planner.hpp rename to planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/default_fixed_goal_planner.hpp index 58203573d0c35..1f5a9f581371a 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/default_fixed_goal_planner.hpp +++ b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/default_fixed_goal_planner.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_GOAL_PLANNER_MODULE__DEFAULT_FIXED_GOAL_PLANNER_HPP_ -#define BEHAVIOR_PATH_GOAL_PLANNER_MODULE__DEFAULT_FIXED_GOAL_PLANNER_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__DEFAULT_FIXED_GOAL_PLANNER_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__DEFAULT_FIXED_GOAL_PLANNER_HPP_ -#include "behavior_path_goal_planner_module/fixed_goal_planner_base.hpp" +#include "autoware_behavior_path_goal_planner_module/fixed_goal_planner_base.hpp" #include @@ -42,4 +42,4 @@ class DefaultFixedGoalPlanner : public FixedGoalPlannerBase }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_GOAL_PLANNER_MODULE__DEFAULT_FIXED_GOAL_PLANNER_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__DEFAULT_FIXED_GOAL_PLANNER_HPP_ diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/fixed_goal_planner_base.hpp b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/fixed_goal_planner_base.hpp similarity index 85% rename from planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/fixed_goal_planner_base.hpp rename to planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/fixed_goal_planner_base.hpp index 4a29553802e23..891f8b838dae9 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/fixed_goal_planner_base.hpp +++ b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/fixed_goal_planner_base.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_GOAL_PLANNER_MODULE__FIXED_GOAL_PLANNER_BASE_HPP_ -#define BEHAVIOR_PATH_GOAL_PLANNER_MODULE__FIXED_GOAL_PLANNER_BASE_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__FIXED_GOAL_PLANNER_BASE_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__FIXED_GOAL_PLANNER_BASE_HPP_ #include "autoware_behavior_path_planner_common/data_manager.hpp" @@ -50,4 +50,4 @@ class FixedGoalPlannerBase }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_GOAL_PLANNER_MODULE__FIXED_GOAL_PLANNER_BASE_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__FIXED_GOAL_PLANNER_BASE_HPP_ diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/freespace_pull_over.hpp b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/freespace_pull_over.hpp similarity index 84% rename from planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/freespace_pull_over.hpp rename to planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/freespace_pull_over.hpp index f05d0b9b3b973..2123ee4fa5b2b 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/freespace_pull_over.hpp +++ b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/freespace_pull_over.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_GOAL_PLANNER_MODULE__FREESPACE_PULL_OVER_HPP_ -#define BEHAVIOR_PATH_GOAL_PLANNER_MODULE__FREESPACE_PULL_OVER_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__FREESPACE_PULL_OVER_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__FREESPACE_PULL_OVER_HPP_ -#include "behavior_path_goal_planner_module/pull_over_planner_base.hpp" +#include "autoware_behavior_path_goal_planner_module/pull_over_planner_base.hpp" #include #include @@ -51,4 +51,4 @@ class FreespacePullOver : public PullOverPlannerBase }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_GOAL_PLANNER_MODULE__FREESPACE_PULL_OVER_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__FREESPACE_PULL_OVER_HPP_ diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/geometric_pull_over.hpp b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/geometric_pull_over.hpp similarity index 88% rename from planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/geometric_pull_over.hpp rename to planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/geometric_pull_over.hpp index 903655b64e347..3bb643adc39a5 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/geometric_pull_over.hpp +++ b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/geometric_pull_over.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GEOMETRIC_PULL_OVER_HPP_ -#define BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GEOMETRIC_PULL_OVER_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GEOMETRIC_PULL_OVER_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GEOMETRIC_PULL_OVER_HPP_ +#include "autoware_behavior_path_goal_planner_module/pull_over_planner_base.hpp" #include "autoware_behavior_path_planner_common/utils/parking_departure/geometric_parallel_parking.hpp" -#include "behavior_path_goal_planner_module/pull_over_planner_base.hpp" #include @@ -65,4 +65,4 @@ class GeometricPullOver : public PullOverPlannerBase }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GEOMETRIC_PULL_OVER_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GEOMETRIC_PULL_OVER_HPP_ diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/goal_planner_module.hpp similarity index 97% rename from planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp rename to planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/goal_planner_module.hpp index 66f7274f888be..53ac507fd6516 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_module.hpp +++ b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/goal_planner_module.hpp @@ -12,21 +12,21 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_PLANNER_MODULE_HPP_ -#define BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_PLANNER_MODULE_HPP_ - +#ifndef AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_PLANNER_MODULE_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_PLANNER_MODULE_HPP_ + +#include "autoware_behavior_path_goal_planner_module/default_fixed_goal_planner.hpp" +#include "autoware_behavior_path_goal_planner_module/freespace_pull_over.hpp" +#include "autoware_behavior_path_goal_planner_module/geometric_pull_over.hpp" +#include "autoware_behavior_path_goal_planner_module/goal_planner_parameters.hpp" +#include "autoware_behavior_path_goal_planner_module/goal_searcher.hpp" +#include "autoware_behavior_path_goal_planner_module/shift_pull_over.hpp" #include "autoware_behavior_path_planner_common/interface/scene_module_interface.hpp" #include "autoware_behavior_path_planner_common/utils/occupancy_grid_based_collision_detector/occupancy_grid_based_collision_detector.hpp" #include "autoware_behavior_path_planner_common/utils/parking_departure/common_module_data.hpp" #include "autoware_behavior_path_planner_common/utils/parking_departure/geometric_parallel_parking.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/path_safety_checker_parameters.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" -#include "behavior_path_goal_planner_module/default_fixed_goal_planner.hpp" -#include "behavior_path_goal_planner_module/freespace_pull_over.hpp" -#include "behavior_path_goal_planner_module/geometric_pull_over.hpp" -#include "behavior_path_goal_planner_module/goal_planner_parameters.hpp" -#include "behavior_path_goal_planner_module/goal_searcher.hpp" -#include "behavior_path_goal_planner_module/shift_pull_over.hpp" #include #include @@ -668,4 +668,4 @@ class GoalPlannerModule : public SceneModuleInterface }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_PLANNER_MODULE_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_PLANNER_MODULE_HPP_ diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_parameters.hpp b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/goal_planner_parameters.hpp similarity index 94% rename from planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_parameters.hpp rename to planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/goal_planner_parameters.hpp index dc992b7ed4967..25eff659d1f02 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_planner_parameters.hpp +++ b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/goal_planner_parameters.hpp @@ -13,8 +13,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_PLANNER_PARAMETERS_HPP_ -#define BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_PLANNER_PARAMETERS_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_PLANNER_PARAMETERS_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_PLANNER_PARAMETERS_HPP_ #include "autoware_behavior_path_planner_common/utils/parking_departure/geometric_parallel_parking.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/path_safety_checker_parameters.hpp" @@ -128,4 +128,4 @@ struct GoalPlannerParameters }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_PLANNER_PARAMETERS_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_PLANNER_PARAMETERS_HPP_ diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_searcher.hpp b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/goal_searcher.hpp similarity index 91% rename from planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_searcher.hpp rename to planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/goal_searcher.hpp index af4723327732a..2061ed4c35d8f 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_searcher.hpp +++ b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/goal_searcher.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_HPP_ -#define BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_HPP_ +#include "autoware_behavior_path_goal_planner_module/goal_searcher_base.hpp" #include "autoware_behavior_path_planner_common/utils/occupancy_grid_based_collision_detector/occupancy_grid_based_collision_detector.hpp" -#include "behavior_path_goal_planner_module/goal_searcher_base.hpp" #include #include @@ -72,4 +72,4 @@ class GoalSearcher : public GoalSearcherBase }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_HPP_ diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_searcher_base.hpp b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/goal_searcher_base.hpp similarity index 89% rename from planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_searcher_base.hpp rename to planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/goal_searcher_base.hpp index 3ed5e7243b9c5..edc4bfbe813b0 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/goal_searcher_base.hpp +++ b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/goal_searcher_base.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_BASE_HPP_ -#define BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_BASE_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_BASE_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_BASE_HPP_ +#include "autoware_behavior_path_goal_planner_module/goal_planner_parameters.hpp" #include "autoware_behavior_path_planner_common/data_manager.hpp" #include "autoware_behavior_path_planner_common/utils/occupancy_grid_based_collision_detector/occupancy_grid_based_collision_detector.hpp" -#include "behavior_path_goal_planner_module/goal_planner_parameters.hpp" #include @@ -78,4 +78,4 @@ class GoalSearcherBase }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_BASE_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__GOAL_SEARCHER_BASE_HPP_ diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/manager.hpp b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/manager.hpp similarity index 85% rename from planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/manager.hpp rename to planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/manager.hpp index 4b06236755df7..0032fce97d4f4 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/manager.hpp +++ b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/manager.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_GOAL_PLANNER_MODULE__MANAGER_HPP_ -#define BEHAVIOR_PATH_GOAL_PLANNER_MODULE__MANAGER_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__MANAGER_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__MANAGER_HPP_ +#include "autoware_behavior_path_goal_planner_module/goal_planner_module.hpp" #include "autoware_behavior_path_planner_common/interface/scene_module_manager_interface.hpp" -#include "behavior_path_goal_planner_module/goal_planner_module.hpp" #include @@ -55,4 +55,4 @@ class GoalPlannerModuleManager : public SceneModuleManagerInterface } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_GOAL_PLANNER_MODULE__MANAGER_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__MANAGER_HPP_ diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/pull_over_planner_base.hpp b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/pull_over_planner_base.hpp similarity index 92% rename from planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/pull_over_planner_base.hpp rename to planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/pull_over_planner_base.hpp index c916e6be10d9f..0a3cf20b2ae29 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/pull_over_planner_base.hpp +++ b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/pull_over_planner_base.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_GOAL_PLANNER_MODULE__PULL_OVER_PLANNER_BASE_HPP_ -#define BEHAVIOR_PATH_GOAL_PLANNER_MODULE__PULL_OVER_PLANNER_BASE_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__PULL_OVER_PLANNER_BASE_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__PULL_OVER_PLANNER_BASE_HPP_ +#include "autoware_behavior_path_goal_planner_module/goal_planner_parameters.hpp" #include "autoware_behavior_path_planner_common/data_manager.hpp" -#include "behavior_path_goal_planner_module/goal_planner_parameters.hpp" #include #include @@ -141,4 +141,4 @@ class PullOverPlannerBase }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_GOAL_PLANNER_MODULE__PULL_OVER_PLANNER_BASE_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__PULL_OVER_PLANNER_BASE_HPP_ diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/shift_pull_over.hpp b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/shift_pull_over.hpp similarity index 88% rename from planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/shift_pull_over.hpp rename to planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/shift_pull_over.hpp index e7b297548083a..56538fc4a8b51 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/shift_pull_over.hpp +++ b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/shift_pull_over.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_GOAL_PLANNER_MODULE__SHIFT_PULL_OVER_HPP_ -#define BEHAVIOR_PATH_GOAL_PLANNER_MODULE__SHIFT_PULL_OVER_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__SHIFT_PULL_OVER_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__SHIFT_PULL_OVER_HPP_ -#include "behavior_path_goal_planner_module/pull_over_planner_base.hpp" +#include "autoware_behavior_path_goal_planner_module/pull_over_planner_base.hpp" #include @@ -59,4 +59,4 @@ class ShiftPullOver : public PullOverPlannerBase }; } // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_GOAL_PLANNER_MODULE__SHIFT_PULL_OVER_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__SHIFT_PULL_OVER_HPP_ diff --git a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/util.hpp b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/util.hpp similarity index 95% rename from planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/util.hpp rename to planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/util.hpp index 3de0ba0c99a35..469b9295c9432 100644 --- a/planning/behavior_path_goal_planner_module/include/behavior_path_goal_planner_module/util.hpp +++ b/planning/autoware_behavior_path_goal_planner_module/include/autoware_behavior_path_goal_planner_module/util.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_GOAL_PLANNER_MODULE__UTIL_HPP_ -#define BEHAVIOR_PATH_GOAL_PLANNER_MODULE__UTIL_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__UTIL_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__UTIL_HPP_ -#include "behavior_path_goal_planner_module/goal_searcher_base.hpp" +#include "autoware_behavior_path_goal_planner_module/goal_searcher_base.hpp" #include "tier4_autoware_utils/geometry/boost_polygon_utils.hpp" #include @@ -110,4 +110,4 @@ MarkerArray createNumObjectsToAvoidTextsMarkerArray( const std_msgs::msg::ColorRGBA & color); } // namespace behavior_path_planner::goal_planner_utils -#endif // BEHAVIOR_PATH_GOAL_PLANNER_MODULE__UTIL_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_GOAL_PLANNER_MODULE__UTIL_HPP_ diff --git a/planning/behavior_path_goal_planner_module/package.xml b/planning/autoware_behavior_path_goal_planner_module/package.xml similarity index 91% rename from planning/behavior_path_goal_planner_module/package.xml rename to planning/autoware_behavior_path_goal_planner_module/package.xml index 75ca5c264b523..e29bce5a5039a 100644 --- a/planning/behavior_path_goal_planner_module/package.xml +++ b/planning/autoware_behavior_path_goal_planner_module/package.xml @@ -1,9 +1,9 @@ - behavior_path_goal_planner_module + autoware_behavior_path_goal_planner_module 0.1.0 - The behavior_path_goal_planner_module package + The autoware_behavior_path_goal_planner_module package Kosuke Takeuchi Kyoichi Sugahara diff --git a/planning/behavior_path_goal_planner_module/plugins.xml b/planning/autoware_behavior_path_goal_planner_module/plugins.xml similarity index 70% rename from planning/behavior_path_goal_planner_module/plugins.xml rename to planning/autoware_behavior_path_goal_planner_module/plugins.xml index 6c3b557e35e7a..30025705cb194 100644 --- a/planning/behavior_path_goal_planner_module/plugins.xml +++ b/planning/autoware_behavior_path_goal_planner_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_path_goal_planner_module/src/default_fixed_goal_planner.cpp b/planning/autoware_behavior_path_goal_planner_module/src/default_fixed_goal_planner.cpp similarity index 96% rename from planning/behavior_path_goal_planner_module/src/default_fixed_goal_planner.cpp rename to planning/autoware_behavior_path_goal_planner_module/src/default_fixed_goal_planner.cpp index 30914935ae7e8..453595786f041 100644 --- a/planning/behavior_path_goal_planner_module/src/default_fixed_goal_planner.cpp +++ b/planning/autoware_behavior_path_goal_planner_module/src/default_fixed_goal_planner.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_goal_planner_module/default_fixed_goal_planner.hpp" +#include "autoware_behavior_path_goal_planner_module/default_fixed_goal_planner.hpp" +#include "autoware_behavior_path_goal_planner_module/util.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" -#include "behavior_path_goal_planner_module/util.hpp" #include #include diff --git a/planning/behavior_path_goal_planner_module/src/freespace_pull_over.cpp b/planning/autoware_behavior_path_goal_planner_module/src/freespace_pull_over.cpp similarity index 97% rename from planning/behavior_path_goal_planner_module/src/freespace_pull_over.cpp rename to planning/autoware_behavior_path_goal_planner_module/src/freespace_pull_over.cpp index 0a75e5ce94f79..016cd56ae3673 100644 --- a/planning/behavior_path_goal_planner_module/src/freespace_pull_over.cpp +++ b/planning/autoware_behavior_path_goal_planner_module/src/freespace_pull_over.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_goal_planner_module/freespace_pull_over.hpp" +#include "autoware_behavior_path_goal_planner_module/freespace_pull_over.hpp" +#include "autoware_behavior_path_goal_planner_module/util.hpp" #include "autoware_behavior_path_planner_common/utils/drivable_area_expansion/static_drivable_area.hpp" #include "autoware_behavior_path_planner_common/utils/parking_departure/utils.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" -#include "behavior_path_goal_planner_module/util.hpp" #include #include diff --git a/planning/behavior_path_goal_planner_module/src/geometric_pull_over.cpp b/planning/autoware_behavior_path_goal_planner_module/src/geometric_pull_over.cpp similarity index 95% rename from planning/behavior_path_goal_planner_module/src/geometric_pull_over.cpp rename to planning/autoware_behavior_path_goal_planner_module/src/geometric_pull_over.cpp index 2f621d30ddf8e..f61aef060485c 100644 --- a/planning/behavior_path_goal_planner_module/src/geometric_pull_over.cpp +++ b/planning/autoware_behavior_path_goal_planner_module/src/geometric_pull_over.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_goal_planner_module/geometric_pull_over.hpp" +#include "autoware_behavior_path_goal_planner_module/geometric_pull_over.hpp" +#include "autoware_behavior_path_goal_planner_module/util.hpp" #include "autoware_behavior_path_planner_common/utils/drivable_area_expansion/static_drivable_area.hpp" -#include "behavior_path_goal_planner_module/util.hpp" #include #include diff --git a/planning/behavior_path_goal_planner_module/src/goal_planner_module.cpp b/planning/autoware_behavior_path_goal_planner_module/src/goal_planner_module.cpp similarity index 99% rename from planning/behavior_path_goal_planner_module/src/goal_planner_module.cpp rename to planning/autoware_behavior_path_goal_planner_module/src/goal_planner_module.cpp index 20fe808f51433..8ff73d5f52766 100644 --- a/planning/behavior_path_goal_planner_module/src/goal_planner_module.cpp +++ b/planning/autoware_behavior_path_goal_planner_module/src/goal_planner_module.cpp @@ -12,8 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_goal_planner_module/goal_planner_module.hpp" +#include "autoware_behavior_path_goal_planner_module/goal_planner_module.hpp" +#include "autoware_behavior_path_goal_planner_module/util.hpp" #include "autoware_behavior_path_planner_common/utils/drivable_area_expansion/static_drivable_area.hpp" #include "autoware_behavior_path_planner_common/utils/parking_departure/utils.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp" @@ -21,7 +22,6 @@ #include "autoware_behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" -#include "behavior_path_goal_planner_module/util.hpp" #include "tier4_autoware_utils/geometry/boost_polygon_utils.hpp" #include "tier4_autoware_utils/math/unit_conversion.hpp" diff --git a/planning/behavior_path_goal_planner_module/src/goal_searcher.cpp b/planning/autoware_behavior_path_goal_planner_module/src/goal_searcher.cpp similarity index 99% rename from planning/behavior_path_goal_planner_module/src/goal_searcher.cpp rename to planning/autoware_behavior_path_goal_planner_module/src/goal_searcher.cpp index b56ae44dcf476..402a9490b9bce 100644 --- a/planning/behavior_path_goal_planner_module/src/goal_searcher.cpp +++ b/planning/autoware_behavior_path_goal_planner_module/src/goal_searcher.cpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_goal_planner_module/goal_searcher.hpp" +#include "autoware_behavior_path_goal_planner_module/goal_searcher.hpp" +#include "autoware_behavior_path_goal_planner_module/util.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" -#include "behavior_path_goal_planner_module/util.hpp" #include "lanelet2_extension/regulatory_elements/no_parking_area.hpp" #include "lanelet2_extension/regulatory_elements/no_stopping_area.hpp" #include "lanelet2_extension/utility/utilities.hpp" diff --git a/planning/behavior_path_goal_planner_module/src/manager.cpp b/planning/autoware_behavior_path_goal_planner_module/src/manager.cpp similarity index 99% rename from planning/behavior_path_goal_planner_module/src/manager.cpp rename to planning/autoware_behavior_path_goal_planner_module/src/manager.cpp index bca5bb1230f38..39ceb2d5b59a0 100644 --- a/planning/behavior_path_goal_planner_module/src/manager.cpp +++ b/planning/autoware_behavior_path_goal_planner_module/src/manager.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_goal_planner_module/manager.hpp" +#include "autoware_behavior_path_goal_planner_module/manager.hpp" -#include "behavior_path_goal_planner_module/util.hpp" +#include "autoware_behavior_path_goal_planner_module/util.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" #include diff --git a/planning/behavior_path_goal_planner_module/src/shift_pull_over.cpp b/planning/autoware_behavior_path_goal_planner_module/src/shift_pull_over.cpp similarity index 99% rename from planning/behavior_path_goal_planner_module/src/shift_pull_over.cpp rename to planning/autoware_behavior_path_goal_planner_module/src/shift_pull_over.cpp index 0def2f74d07cf..b49bccd2d0080 100644 --- a/planning/behavior_path_goal_planner_module/src/shift_pull_over.cpp +++ b/planning/autoware_behavior_path_goal_planner_module/src/shift_pull_over.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_goal_planner_module/shift_pull_over.hpp" +#include "autoware_behavior_path_goal_planner_module/shift_pull_over.hpp" +#include "autoware_behavior_path_goal_planner_module/util.hpp" #include "autoware_behavior_path_planner_common/utils/drivable_area_expansion/static_drivable_area.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" -#include "behavior_path_goal_planner_module/util.hpp" #include #include diff --git a/planning/behavior_path_goal_planner_module/src/util.cpp b/planning/autoware_behavior_path_goal_planner_module/src/util.cpp similarity index 99% rename from planning/behavior_path_goal_planner_module/src/util.cpp rename to planning/autoware_behavior_path_goal_planner_module/src/util.cpp index 6b538b6e9c7f5..d3ad0805855ba 100644 --- a/planning/behavior_path_goal_planner_module/src/util.cpp +++ b/planning/autoware_behavior_path_goal_planner_module/src/util.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_goal_planner_module/util.hpp" +#include "autoware_behavior_path_goal_planner_module/util.hpp" #include "autoware_behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" diff --git a/planning/behavior_path_planner/README.md b/planning/behavior_path_planner/README.md index a17e1aee89557..658edce2ccb3c 100644 --- a/planning/behavior_path_planner/README.md +++ b/planning/behavior_path_planner/README.md @@ -32,7 +32,7 @@ Behavior Path Planner has following scene modules | Avoidance By Lane Change | this module generates lane change path when there is objects that should be avoid. | [LINK](../behavior_path_avoidance_by_lane_change_module/README.md) | | Lane Change | this module is performed when it is necessary and a collision check with other vehicles is cleared. | [LINK](../autoware_behavior_path_lane_change_module/README.md) | | External Lane Change | WIP | LINK | -| Goal Planner | this module is performed when ego-vehicle is in the road lane and goal is in the shoulder lane. ego-vehicle will stop at the goal. | [LINK](../behavior_path_goal_planner_module/README.md) | +| Goal Planner | this module is performed when ego-vehicle is in the road lane and goal is in the shoulder lane. ego-vehicle will stop at the goal. | [LINK](../autoware_behavior_path_goal_planner_module/README.md) | | Start Planner | this module is performed when ego-vehicle is stationary and footprint of ego-vehicle is included in shoulder lane. This module ends when ego-vehicle merges into the road. | [LINK](../autoware_behavior_path_start_planner_module/README.md) | | Side Shift | (for remote control) shift the path to left or right according to an external instruction. | [LINK](../autoware_behavior_path_side_shift_module/README.md) | From 140cef943f5b2ad053b779271189876a2ee2cb1a Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Tue, 11 Jun 2024 00:26:47 +0900 Subject: [PATCH 090/142] fix(virtual traffic light): suppress launch (#7010) Signed-off-by: Yuki Takagi --- .../src/manager.cpp | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.cpp b/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.cpp index 39dca1f8f6303..69b91d11937a0 100644 --- a/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.cpp +++ b/planning/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.cpp @@ -14,10 +14,17 @@ #include "manager.hpp" +#include "tier4_autoware_utils/geometry/boost_geometry.hpp" + #include +#include #include #include +#include + +#include + #include #include #include @@ -52,13 +59,30 @@ VirtualTrafficLightModuleManager::VirtualTrafficLightModuleManager(rclcpp::Node void VirtualTrafficLightModuleManager::launchNewModules( const tier4_planning_msgs::msg::PathWithLaneId & path) { + tier4_autoware_utils::LineString2d ego_path_linestring; + for (const auto & path_point : path.points) { + ego_path_linestring.push_back( + tier4_autoware_utils::fromMsg(path_point.point.pose.position).to_2d()); + } + for (const auto & m : planning_utils::getRegElemMapOnPath( path, planner_data_->route_handler_->getLaneletMapPtr(), planner_data_->current_odometry->pose)) { + const auto stop_line_opt = m.first->getStopLine(); + if (!stop_line_opt) { + RCLCPP_FATAL( + logger_, "No stop line at virtual_traffic_light_reg_elem_id = %ld, please fix the map!", + m.first->id()); + continue; + } + // Use lanelet_id to unregister module when the route is changed const auto lane_id = m.second.id(); const auto module_id = lane_id; - if (!isModuleRegistered(module_id)) { + if ( + !isModuleRegistered(module_id) && + boost::geometry::intersects( + ego_path_linestring, lanelet::utils::to2D(stop_line_opt.value()).basicLineString())) { registerModule(std::make_shared( module_id, lane_id, *m.first, m.second, planner_param_, logger_.get_child("virtual_traffic_light_module"), clock_)); From e57e9f10a6c8e93d75fa2590b93f46363a4055b5 Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Tue, 11 Jun 2024 01:13:34 +0900 Subject: [PATCH 091/142] refactor(accel_brake_map_calibrator)!: add autoware_ prefix (#7351) * add prefix to the codes Signed-off-by: Yuki Takagi change dir name Signed-off-by: Yuki Takagi update Signed-off-by: Yuki Takagi update Signed-off-by: Yuki Takagi * delete debug Signed-off-by: Yuki Takagi * fix format Signed-off-by: Yuki Takagi * fix format Signed-off-by: Yuki Takagi * restore Signed-off-by: Yuki Takagi * poi Signed-off-by: Yuki Takagi --------- Signed-off-by: Yuki Takagi --- .github/CODEOWNERS | 2 +- .../src/node.cpp | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 20 +++++++++--------- .../accel_brake_map_calibrator.param.yaml | 0 .../config/accel_brake_map_calibrator.xml | 0 .../data/accel_map.csv | 0 .../data/accel_map_double_res.csv | 0 .../data/brake_map.csv | 0 .../data/brake_map_double_res.csv | 0 .../accel_brake_map_calibrator_node.hpp | 10 ++++----- .../accel_brake_map_calibrator.launch.xml | 12 +++++------ .../media/actuation_cmd_publisher_util.png | Bin .../media/add_panel.png | Bin .../media/calib_rviz_image_sample.png | Bin .../media/calibrator_button_panel.png | Bin .../media/fourcell_RLS.png | Bin .../media/log_sample.png | Bin .../media/push_calibration_button.png | Bin .../media/statistics_sample.png | Bin .../package.xml | 2 +- .../rviz/occupancy.rviz | 0 .../scripts/__init__.py | 0 .../scripts/accel_tester.py | 0 .../scripts/actuation_cmd_publisher.py | 0 .../scripts/brake_tester.py | 0 .../scripts/calc_utils.py | 0 .../scripts/config.py | 0 .../scripts/csv_reader.py | 0 .../scripts/delay_estimator.py | 2 +- .../scripts/log_analyzer.py | 0 .../scripts/new_accel_brake_map_server.py | 2 +- .../scripts/plotter.py | 0 .../scripts/view_plot.py | 4 ++-- .../scripts/view_statistics.py | 2 +- .../src/accel_brake_map_calibrator_node.cpp | 7 +++--- .../src/main.cpp | 5 +++-- .../test/plot_csv_client_node.py | 2 +- .../test/sim_actuation_status_publisher.py | 0 .../README.md | 2 +- 40 files changed, 39 insertions(+), 37 deletions(-) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/CMakeLists.txt (94%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/README.md (92%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/config/accel_brake_map_calibrator.param.yaml (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/config/accel_brake_map_calibrator.xml (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/data/accel_map.csv (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/data/accel_map_double_res.csv (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/data/brake_map.csv (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/data/brake_map_double_res.csv (100%) rename vehicle/{accel_brake_map_calibrator/include/accel_brake_map_calibrator => autoware_accel_brake_map_calibrator/include/autoware_accel_brake_map_calibrator}/accel_brake_map_calibrator_node.hpp (97%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/launch/accel_brake_map_calibrator.launch.xml (72%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/media/actuation_cmd_publisher_util.png (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/media/add_panel.png (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/media/calib_rviz_image_sample.png (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/media/calibrator_button_panel.png (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/media/fourcell_RLS.png (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/media/log_sample.png (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/media/push_calibration_button.png (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/media/statistics_sample.png (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/package.xml (96%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/rviz/occupancy.rviz (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/scripts/__init__.py (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/scripts/accel_tester.py (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/scripts/actuation_cmd_publisher.py (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/scripts/brake_tester.py (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/scripts/calc_utils.py (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/scripts/config.py (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/scripts/csv_reader.py (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/scripts/delay_estimator.py (98%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/scripts/log_analyzer.py (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/scripts/new_accel_brake_map_server.py (99%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/scripts/plotter.py (100%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/scripts/view_plot.py (98%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/scripts/view_statistics.py (98%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/src/accel_brake_map_calibrator_node.cpp (99%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/src/main.cpp (79%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/test/plot_csv_client_node.py (97%) rename vehicle/{accel_brake_map_calibrator => autoware_accel_brake_map_calibrator}/test/sim_actuation_status_publisher.py (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 54d605870018f..8732f11d14202 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -244,8 +244,8 @@ system/system_monitor/** fumihito.ito@tier4.jp tetsuhiro.kawaguchi@tier4.jp system/topic_state_monitor/** ryohsuke.mitsudome@tier4.jp system/velodyne_monitor/** fumihito.ito@tier4.jp tools/reaction_analyzer/** berkay@leodrive.ai -vehicle/accel_brake_map_calibrator/** taiki.tanaka@tier4.jp takeshi.miura@tier4.jp tomoya.kimura@tier4.jp vehicle/autoware_steer_offset_estimator/** taiki.tanaka@tier4.jp +vehicle/autoware_accel_brake_map_calibrator/** taiki.tanaka@tier4.jp takeshi.miura@tier4.jp tomoya.kimura@tier4.jp vehicle/external_cmd_converter/** takamasa.horibe@tier4.jp vehicle/autoware_raw_vehicle_cmd_converter/** makoto.kurihara@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp vehicle/autoware_steer_offset_estimator/** taiki.tanaka@tier4.jp diff --git a/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp b/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp index 2c4da0b95b161..611984a4612d9 100644 --- a/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp +++ b/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp @@ -11,7 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware_crosswalk_traffic_light_estimator/node.hpp" +#include "crosswalk_traffic_light_estimator/node.hpp" #include #include diff --git a/vehicle/accel_brake_map_calibrator/CMakeLists.txt b/vehicle/autoware_accel_brake_map_calibrator/CMakeLists.txt similarity index 94% rename from vehicle/accel_brake_map_calibrator/CMakeLists.txt rename to vehicle/autoware_accel_brake_map_calibrator/CMakeLists.txt index f8aed0abb9056..d7c6d3ab25748 100644 --- a/vehicle/accel_brake_map_calibrator/CMakeLists.txt +++ b/vehicle/autoware_accel_brake_map_calibrator/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(accel_brake_map_calibrator) +project(autoware_accel_brake_map_calibrator) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/vehicle/accel_brake_map_calibrator/README.md b/vehicle/autoware_accel_brake_map_calibrator/README.md similarity index 92% rename from vehicle/accel_brake_map_calibrator/README.md rename to vehicle/autoware_accel_brake_map_calibrator/README.md index c2516eed5de3d..024c8059a169e 100644 --- a/vehicle/accel_brake_map_calibrator/README.md +++ b/vehicle/autoware_accel_brake_map_calibrator/README.md @@ -8,20 +8,20 @@ The base map, which is lexus's one by default, is updated iteratively with the l ### Launch Calibrator -After launching Autoware, run the `accel_brake_map_calibrator` by the following command and then perform autonomous driving. Note: You can collect data with manual driving if it is possible to use the same vehicle interface as during autonomous driving (e.g. using a joystick). +After launching Autoware, run the `autoware_accel_brake_map_calibrator` by the following command and then perform autonomous driving. Note: You can collect data with manual driving if it is possible to use the same vehicle interface as during autonomous driving (e.g. using a joystick). ```sh -ros2 launch accel_brake_map_calibrator accel_brake_map_calibrator.launch.xml rviz:=true +ros2 launch autoware_accel_brake_map_calibrator accel_brake_map_calibrator.launch.xml rviz:=true ``` Or if you want to use rosbag files, run the following commands. ```sh -ros2 launch accel_brake_map_calibrator accel_brake_map_calibrator.launch.xml rviz:=true use_sim_time:=true +ros2 launch autoware_accel_brake_map_calibrator accel_brake_map_calibrator.launch.xml rviz:=true use_sim_time:=true ros2 bag play --clock ``` -During the calibration with setting the parameter `progress_file_output` to true, the log file is output in [directory of *accel_brake_map_calibrator*]/config/ . You can also see accel and brake maps in [directory of *accel_brake_map_calibrator*]/config/accel_map.csv and [directory of *accel_brake_map_calibrator*]/config/brake_map.csv after calibration. +During the calibration with setting the parameter `progress_file_output` to true, the log file is output in [directory of *autoware_accel_brake_map_calibrator*]/config/ . You can also see accel and brake maps in [directory of *autoware_accel_brake_map_calibrator*]/config/accel_map.csv and [directory of *autoware_accel_brake_map_calibrator*]/config/brake_map.csv after calibration. ### Calibration plugin @@ -86,7 +86,7 @@ The process of calibration can be visualized as below. Since these scripts need The following command shows the plot of used data in the calibration. In each plot of velocity ranges, you can see the distribution of the relationship between pedal and acceleration, and raw data points with colors according to their pitch angles. ```sh -ros2 run accel_brake_map_calibrator view_plot.py +ros2 run autoware_accel_brake_map_calibrator view_plot.py ``` ![sample pic](media/log_sample.png) @@ -102,7 +102,7 @@ The following command shows the statistics of the calibration: of all data in each map cell. ```sh -ros2 run accel_brake_map_calibrator view_statistics.py +ros2 run autoware_accel_brake_map_calibrator view_statistics.py ``` ![sample pic2](media/statistics_sample.png) @@ -141,7 +141,7 @@ You can also save accel and brake map in the default directory where Autoware re | pedal_accel_graph_output | bool | if true, it will output a log of the pedal accel graph. | true | | progress_file_output | bool | if true, it will output a log and csv file of the update process. | false | | default_map_dir | str | directory of default map | [directory of *autoware_raw_vehicle_cmd_converter*]/data/default/ | -| calibrated_map_dir | str | directory of calibrated map | [directory of *accel_brake_map_calibrator*]/config/ | +| calibrated_map_dir | str | directory of calibrated map | [directory of *autoware_accel_brake_map_calibrator*]/config/ | | update_hz | double | hz for update | 10.0 | ## Algorithm Parameters @@ -176,9 +176,9 @@ These scripts are useful to test for accel brake map calibration. These generate The `accel/brake_tester.py` receives a target accel/brake command from CLI. It sends a target value to `actuation_cmd_publisher.py` which generates the `ActuationCmd`. You can run these scripts by the following commands in the different terminals, and it will be as in the screenshot below. ```bash -ros2 run accel_brake_map_calibrator accel_tester.py -ros2 run accel_brake_map_calibrator brake_tester.py -ros2 run accel_brake_map_calibrator actuation_cmd_publisher.py +ros2 run autoware_accel_brake_map_calibrator accel_tester.py +ros2 run autoware_accel_brake_map_calibrator brake_tester.py +ros2 run autoware_accel_brake_map_calibrator actuation_cmd_publisher.py ``` ![actuation_cmd_publisher_util](./media/actuation_cmd_publisher_util.png) diff --git a/vehicle/accel_brake_map_calibrator/config/accel_brake_map_calibrator.param.yaml b/vehicle/autoware_accel_brake_map_calibrator/config/accel_brake_map_calibrator.param.yaml similarity index 100% rename from vehicle/accel_brake_map_calibrator/config/accel_brake_map_calibrator.param.yaml rename to vehicle/autoware_accel_brake_map_calibrator/config/accel_brake_map_calibrator.param.yaml diff --git a/vehicle/accel_brake_map_calibrator/config/accel_brake_map_calibrator.xml b/vehicle/autoware_accel_brake_map_calibrator/config/accel_brake_map_calibrator.xml similarity index 100% rename from vehicle/accel_brake_map_calibrator/config/accel_brake_map_calibrator.xml rename to vehicle/autoware_accel_brake_map_calibrator/config/accel_brake_map_calibrator.xml diff --git a/vehicle/accel_brake_map_calibrator/data/accel_map.csv b/vehicle/autoware_accel_brake_map_calibrator/data/accel_map.csv similarity index 100% rename from vehicle/accel_brake_map_calibrator/data/accel_map.csv rename to vehicle/autoware_accel_brake_map_calibrator/data/accel_map.csv diff --git a/vehicle/accel_brake_map_calibrator/data/accel_map_double_res.csv b/vehicle/autoware_accel_brake_map_calibrator/data/accel_map_double_res.csv similarity index 100% rename from vehicle/accel_brake_map_calibrator/data/accel_map_double_res.csv rename to vehicle/autoware_accel_brake_map_calibrator/data/accel_map_double_res.csv diff --git a/vehicle/accel_brake_map_calibrator/data/brake_map.csv b/vehicle/autoware_accel_brake_map_calibrator/data/brake_map.csv similarity index 100% rename from vehicle/accel_brake_map_calibrator/data/brake_map.csv rename to vehicle/autoware_accel_brake_map_calibrator/data/brake_map.csv diff --git a/vehicle/accel_brake_map_calibrator/data/brake_map_double_res.csv b/vehicle/autoware_accel_brake_map_calibrator/data/brake_map_double_res.csv similarity index 100% rename from vehicle/accel_brake_map_calibrator/data/brake_map_double_res.csv rename to vehicle/autoware_accel_brake_map_calibrator/data/brake_map_double_res.csv diff --git a/vehicle/accel_brake_map_calibrator/include/accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp b/vehicle/autoware_accel_brake_map_calibrator/include/autoware_accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp similarity index 97% rename from vehicle/accel_brake_map_calibrator/include/accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp rename to vehicle/autoware_accel_brake_map_calibrator/include/autoware_accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp index e168def1b8ea5..ae20df45a0f93 100644 --- a/vehicle/accel_brake_map_calibrator/include/accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp +++ b/vehicle/autoware_accel_brake_map_calibrator/include/autoware_accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp @@ -14,8 +14,8 @@ // limitations under the License. // -#ifndef ACCEL_BRAKE_MAP_CALIBRATOR__ACCEL_BRAKE_MAP_CALIBRATOR_NODE_HPP_ -#define ACCEL_BRAKE_MAP_CALIBRATOR__ACCEL_BRAKE_MAP_CALIBRATOR_NODE_HPP_ +#ifndef AUTOWARE_ACCEL_BRAKE_MAP_CALIBRATOR__ACCEL_BRAKE_MAP_CALIBRATOR_NODE_HPP_ +#define AUTOWARE_ACCEL_BRAKE_MAP_CALIBRATOR__ACCEL_BRAKE_MAP_CALIBRATOR_NODE_HPP_ #include "autoware_raw_vehicle_cmd_converter/accel_map.hpp" #include "autoware_raw_vehicle_cmd_converter/brake_map.hpp" @@ -53,7 +53,7 @@ #include #include -namespace accel_brake_map_calibrator +namespace autoware::accel_brake_map_calibrator { using autoware::raw_vehicle_cmd_converter::AccelMap; @@ -376,6 +376,6 @@ class AccelBrakeMapCalibrator : public rclcpp::Node explicit AccelBrakeMapCalibrator(const rclcpp::NodeOptions & node_options); }; -} // namespace accel_brake_map_calibrator +} // namespace autoware::accel_brake_map_calibrator -#endif // ACCEL_BRAKE_MAP_CALIBRATOR__ACCEL_BRAKE_MAP_CALIBRATOR_NODE_HPP_ +#endif // AUTOWARE_ACCEL_BRAKE_MAP_CALIBRATOR__ACCEL_BRAKE_MAP_CALIBRATOR_NODE_HPP_ diff --git a/vehicle/accel_brake_map_calibrator/launch/accel_brake_map_calibrator.launch.xml b/vehicle/autoware_accel_brake_map_calibrator/launch/accel_brake_map_calibrator.launch.xml similarity index 72% rename from vehicle/accel_brake_map_calibrator/launch/accel_brake_map_calibrator.launch.xml rename to vehicle/autoware_accel_brake_map_calibrator/launch/accel_brake_map_calibrator.launch.xml index 37ee49fe3c4e0..1ff983149d2f9 100644 --- a/vehicle/accel_brake_map_calibrator/launch/accel_brake_map_calibrator.launch.xml +++ b/vehicle/autoware_accel_brake_map_calibrator/launch/accel_brake_map_calibrator.launch.xml @@ -1,8 +1,8 @@ - + - + @@ -11,7 +11,7 @@ - + @@ -20,16 +20,16 @@ - + - + - + diff --git a/vehicle/accel_brake_map_calibrator/media/actuation_cmd_publisher_util.png b/vehicle/autoware_accel_brake_map_calibrator/media/actuation_cmd_publisher_util.png similarity index 100% rename from vehicle/accel_brake_map_calibrator/media/actuation_cmd_publisher_util.png rename to vehicle/autoware_accel_brake_map_calibrator/media/actuation_cmd_publisher_util.png diff --git a/vehicle/accel_brake_map_calibrator/media/add_panel.png b/vehicle/autoware_accel_brake_map_calibrator/media/add_panel.png similarity index 100% rename from vehicle/accel_brake_map_calibrator/media/add_panel.png rename to vehicle/autoware_accel_brake_map_calibrator/media/add_panel.png diff --git a/vehicle/accel_brake_map_calibrator/media/calib_rviz_image_sample.png b/vehicle/autoware_accel_brake_map_calibrator/media/calib_rviz_image_sample.png similarity index 100% rename from vehicle/accel_brake_map_calibrator/media/calib_rviz_image_sample.png rename to vehicle/autoware_accel_brake_map_calibrator/media/calib_rviz_image_sample.png diff --git a/vehicle/accel_brake_map_calibrator/media/calibrator_button_panel.png b/vehicle/autoware_accel_brake_map_calibrator/media/calibrator_button_panel.png similarity index 100% rename from vehicle/accel_brake_map_calibrator/media/calibrator_button_panel.png rename to vehicle/autoware_accel_brake_map_calibrator/media/calibrator_button_panel.png diff --git a/vehicle/accel_brake_map_calibrator/media/fourcell_RLS.png b/vehicle/autoware_accel_brake_map_calibrator/media/fourcell_RLS.png similarity index 100% rename from vehicle/accel_brake_map_calibrator/media/fourcell_RLS.png rename to vehicle/autoware_accel_brake_map_calibrator/media/fourcell_RLS.png diff --git a/vehicle/accel_brake_map_calibrator/media/log_sample.png b/vehicle/autoware_accel_brake_map_calibrator/media/log_sample.png similarity index 100% rename from vehicle/accel_brake_map_calibrator/media/log_sample.png rename to vehicle/autoware_accel_brake_map_calibrator/media/log_sample.png diff --git a/vehicle/accel_brake_map_calibrator/media/push_calibration_button.png b/vehicle/autoware_accel_brake_map_calibrator/media/push_calibration_button.png similarity index 100% rename from vehicle/accel_brake_map_calibrator/media/push_calibration_button.png rename to vehicle/autoware_accel_brake_map_calibrator/media/push_calibration_button.png diff --git a/vehicle/accel_brake_map_calibrator/media/statistics_sample.png b/vehicle/autoware_accel_brake_map_calibrator/media/statistics_sample.png similarity index 100% rename from vehicle/accel_brake_map_calibrator/media/statistics_sample.png rename to vehicle/autoware_accel_brake_map_calibrator/media/statistics_sample.png diff --git a/vehicle/accel_brake_map_calibrator/package.xml b/vehicle/autoware_accel_brake_map_calibrator/package.xml similarity index 96% rename from vehicle/accel_brake_map_calibrator/package.xml rename to vehicle/autoware_accel_brake_map_calibrator/package.xml index 0fb299b199742..b2e3b97620272 100644 --- a/vehicle/accel_brake_map_calibrator/package.xml +++ b/vehicle/autoware_accel_brake_map_calibrator/package.xml @@ -1,7 +1,7 @@ - accel_brake_map_calibrator + autoware_accel_brake_map_calibrator 0.1.0 The accel_brake_map_calibrator Tomoya Kimura diff --git a/vehicle/accel_brake_map_calibrator/rviz/occupancy.rviz b/vehicle/autoware_accel_brake_map_calibrator/rviz/occupancy.rviz similarity index 100% rename from vehicle/accel_brake_map_calibrator/rviz/occupancy.rviz rename to vehicle/autoware_accel_brake_map_calibrator/rviz/occupancy.rviz diff --git a/vehicle/accel_brake_map_calibrator/scripts/__init__.py b/vehicle/autoware_accel_brake_map_calibrator/scripts/__init__.py similarity index 100% rename from vehicle/accel_brake_map_calibrator/scripts/__init__.py rename to vehicle/autoware_accel_brake_map_calibrator/scripts/__init__.py diff --git a/vehicle/accel_brake_map_calibrator/scripts/accel_tester.py b/vehicle/autoware_accel_brake_map_calibrator/scripts/accel_tester.py similarity index 100% rename from vehicle/accel_brake_map_calibrator/scripts/accel_tester.py rename to vehicle/autoware_accel_brake_map_calibrator/scripts/accel_tester.py diff --git a/vehicle/accel_brake_map_calibrator/scripts/actuation_cmd_publisher.py b/vehicle/autoware_accel_brake_map_calibrator/scripts/actuation_cmd_publisher.py similarity index 100% rename from vehicle/accel_brake_map_calibrator/scripts/actuation_cmd_publisher.py rename to vehicle/autoware_accel_brake_map_calibrator/scripts/actuation_cmd_publisher.py diff --git a/vehicle/accel_brake_map_calibrator/scripts/brake_tester.py b/vehicle/autoware_accel_brake_map_calibrator/scripts/brake_tester.py similarity index 100% rename from vehicle/accel_brake_map_calibrator/scripts/brake_tester.py rename to vehicle/autoware_accel_brake_map_calibrator/scripts/brake_tester.py diff --git a/vehicle/accel_brake_map_calibrator/scripts/calc_utils.py b/vehicle/autoware_accel_brake_map_calibrator/scripts/calc_utils.py similarity index 100% rename from vehicle/accel_brake_map_calibrator/scripts/calc_utils.py rename to vehicle/autoware_accel_brake_map_calibrator/scripts/calc_utils.py diff --git a/vehicle/accel_brake_map_calibrator/scripts/config.py b/vehicle/autoware_accel_brake_map_calibrator/scripts/config.py similarity index 100% rename from vehicle/accel_brake_map_calibrator/scripts/config.py rename to vehicle/autoware_accel_brake_map_calibrator/scripts/config.py diff --git a/vehicle/accel_brake_map_calibrator/scripts/csv_reader.py b/vehicle/autoware_accel_brake_map_calibrator/scripts/csv_reader.py similarity index 100% rename from vehicle/accel_brake_map_calibrator/scripts/csv_reader.py rename to vehicle/autoware_accel_brake_map_calibrator/scripts/csv_reader.py diff --git a/vehicle/accel_brake_map_calibrator/scripts/delay_estimator.py b/vehicle/autoware_accel_brake_map_calibrator/scripts/delay_estimator.py similarity index 98% rename from vehicle/accel_brake_map_calibrator/scripts/delay_estimator.py rename to vehicle/autoware_accel_brake_map_calibrator/scripts/delay_estimator.py index eb2bce380fd92..c2849513e3f54 100755 --- a/vehicle/accel_brake_map_calibrator/scripts/delay_estimator.py +++ b/vehicle/autoware_accel_brake_map_calibrator/scripts/delay_estimator.py @@ -29,7 +29,7 @@ class DelayEstimator(Node): def __init__(self): # get parameter super().__init__("delay_estimator") - package_path = get_package_share_directory("accel_brake_map_calibrator") + package_path = get_package_share_directory("autoware_accel_brake_map_calibrator") self.declare_parameter("log_file", package_path + "/config/log.csv") log_file = self.get_parameter("log_file").get_parameter_value().string_value self.declare_parameter("velocity_min_threshold", 0.1) diff --git a/vehicle/accel_brake_map_calibrator/scripts/log_analyzer.py b/vehicle/autoware_accel_brake_map_calibrator/scripts/log_analyzer.py similarity index 100% rename from vehicle/accel_brake_map_calibrator/scripts/log_analyzer.py rename to vehicle/autoware_accel_brake_map_calibrator/scripts/log_analyzer.py diff --git a/vehicle/accel_brake_map_calibrator/scripts/new_accel_brake_map_server.py b/vehicle/autoware_accel_brake_map_calibrator/scripts/new_accel_brake_map_server.py similarity index 99% rename from vehicle/accel_brake_map_calibrator/scripts/new_accel_brake_map_server.py rename to vehicle/autoware_accel_brake_map_calibrator/scripts/new_accel_brake_map_server.py index 35bcfd09eaa38..8d04faccc5679 100755 --- a/vehicle/accel_brake_map_calibrator/scripts/new_accel_brake_map_server.py +++ b/vehicle/autoware_accel_brake_map_calibrator/scripts/new_accel_brake_map_server.py @@ -50,7 +50,7 @@ def __init__(self): .string_value ) - package_path = get_package_share_directory("accel_brake_map_calibrator") + package_path = get_package_share_directory("autoware_accel_brake_map_calibrator") self.declare_parameter( "/accel_brake_map_calibrator/csv_calibrated_map_dir", package_path + "/config/" ) diff --git a/vehicle/accel_brake_map_calibrator/scripts/plotter.py b/vehicle/autoware_accel_brake_map_calibrator/scripts/plotter.py similarity index 100% rename from vehicle/accel_brake_map_calibrator/scripts/plotter.py rename to vehicle/autoware_accel_brake_map_calibrator/scripts/plotter.py diff --git a/vehicle/accel_brake_map_calibrator/scripts/view_plot.py b/vehicle/autoware_accel_brake_map_calibrator/scripts/view_plot.py similarity index 98% rename from vehicle/accel_brake_map_calibrator/scripts/view_plot.py rename to vehicle/autoware_accel_brake_map_calibrator/scripts/view_plot.py index 8041f361be3ce..2f1815b3dcf3a 100755 --- a/vehicle/accel_brake_map_calibrator/scripts/view_plot.py +++ b/vehicle/autoware_accel_brake_map_calibrator/scripts/view_plot.py @@ -56,7 +56,7 @@ def __init__(self, args): ) if calibrated_map_dir is None: - package_path = get_package_share_directory("accel_brake_map_calibrator") + package_path = get_package_share_directory("autoware_accel_brake_map_calibrator") self.declare_parameter( "/accel_brake_map_calibrator/csv_calibrated_map_dir", package_path + "/config/" ) @@ -269,7 +269,7 @@ def main(args=None): if __name__ == "__main__": - package_path = get_package_share_directory("accel_brake_map_calibrator") + package_path = get_package_share_directory("autoware_accel_brake_map_calibrator") parser = argparse.ArgumentParser() parser.add_argument( "-d", "--default-map-dir", default=None, type=str, help="directory of default map" diff --git a/vehicle/accel_brake_map_calibrator/scripts/view_statistics.py b/vehicle/autoware_accel_brake_map_calibrator/scripts/view_statistics.py similarity index 98% rename from vehicle/accel_brake_map_calibrator/scripts/view_statistics.py rename to vehicle/autoware_accel_brake_map_calibrator/scripts/view_statistics.py index 83cfb8693b0e6..decc947e6850f 100755 --- a/vehicle/accel_brake_map_calibrator/scripts/view_statistics.py +++ b/vehicle/autoware_accel_brake_map_calibrator/scripts/view_statistics.py @@ -28,7 +28,7 @@ class ViewPlot(Node): def __init__(self): super().__init__("statistics_viewer") # get parameter - package_path = get_package_share_directory("accel_brake_map_calibrator") + package_path = get_package_share_directory("autoware_accel_brake_map_calibrator") self.declare_parameter("log_file", package_path + "/config/log.csv") log_file = self.get_parameter("log_file").get_parameter_value().string_value self.declare_parameter("velocity_min_threshold", 0.1) diff --git a/vehicle/accel_brake_map_calibrator/src/accel_brake_map_calibrator_node.cpp b/vehicle/autoware_accel_brake_map_calibrator/src/accel_brake_map_calibrator_node.cpp similarity index 99% rename from vehicle/accel_brake_map_calibrator/src/accel_brake_map_calibrator_node.cpp rename to vehicle/autoware_accel_brake_map_calibrator/src/accel_brake_map_calibrator_node.cpp index 37f0a11165df3..8c1a35c263712 100644 --- a/vehicle/accel_brake_map_calibrator/src/accel_brake_map_calibrator_node.cpp +++ b/vehicle/autoware_accel_brake_map_calibrator/src/accel_brake_map_calibrator_node.cpp @@ -14,7 +14,7 @@ // limitations under the License. // -#include "accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp" +#include "autoware_accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp" #include "rclcpp/logging.hpp" @@ -26,7 +26,7 @@ #include #include -namespace accel_brake_map_calibrator +namespace autoware::accel_brake_map_calibrator { AccelBrakeMapCalibrator::AccelBrakeMapCalibrator(const rclcpp::NodeOptions & node_options) @@ -305,6 +305,7 @@ void AccelBrakeMapCalibrator::timerCallback() // lack of data RCLCPP_WARN_STREAM_THROTTLE( get_logger(), *get_clock(), 5000, "lack of topics (twist, steer, accel, brake)"); + lack_of_data_count_++; return; } @@ -1691,4 +1692,4 @@ void AccelBrakeMapCalibrator::addLogToCSV( << ", " << new_accel_mse << "," << rmse_rate << std::endl; } -} // namespace accel_brake_map_calibrator +} // namespace autoware::accel_brake_map_calibrator diff --git a/vehicle/accel_brake_map_calibrator/src/main.cpp b/vehicle/autoware_accel_brake_map_calibrator/src/main.cpp similarity index 79% rename from vehicle/accel_brake_map_calibrator/src/main.cpp rename to vehicle/autoware_accel_brake_map_calibrator/src/main.cpp index 01dfe20307f80..df3a5cf470b6b 100644 --- a/vehicle/accel_brake_map_calibrator/src/main.cpp +++ b/vehicle/autoware_accel_brake_map_calibrator/src/main.cpp @@ -14,7 +14,7 @@ // limitations under the License. // -#include "accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp" +#include "autoware_accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp" #include @@ -22,7 +22,8 @@ int main(int argc, char ** argv) { rclcpp::init(argc, argv); rclcpp::NodeOptions node_options; - rclcpp::spin(std::make_shared(node_options)); + rclcpp::spin( + std::make_shared(node_options)); rclcpp::shutdown(); return 0; } diff --git a/vehicle/accel_brake_map_calibrator/test/plot_csv_client_node.py b/vehicle/autoware_accel_brake_map_calibrator/test/plot_csv_client_node.py similarity index 97% rename from vehicle/accel_brake_map_calibrator/test/plot_csv_client_node.py rename to vehicle/autoware_accel_brake_map_calibrator/test/plot_csv_client_node.py index 1bbb5820bd24a..1771df7bff562 100755 --- a/vehicle/accel_brake_map_calibrator/test/plot_csv_client_node.py +++ b/vehicle/autoware_accel_brake_map_calibrator/test/plot_csv_client_node.py @@ -82,7 +82,7 @@ def main(args=None): if __name__ == "__main__": - package_path = get_package_share_directory("accel_brake_map_calibrator") + package_path = get_package_share_directory("autoware_accel_brake_map_calibrator") parser = argparse.ArgumentParser() parser.add_argument( "-d", "--default-map-dir", default=None, type=str, help="directory of default map" diff --git a/vehicle/accel_brake_map_calibrator/test/sim_actuation_status_publisher.py b/vehicle/autoware_accel_brake_map_calibrator/test/sim_actuation_status_publisher.py similarity index 100% rename from vehicle/accel_brake_map_calibrator/test/sim_actuation_status_publisher.py rename to vehicle/autoware_accel_brake_map_calibrator/test/sim_actuation_status_publisher.py diff --git a/vehicle/autoware_raw_vehicle_cmd_converter/README.md b/vehicle/autoware_raw_vehicle_cmd_converter/README.md index c204346d9d834..25e816e6f8692 100644 --- a/vehicle/autoware_raw_vehicle_cmd_converter/README.md +++ b/vehicle/autoware_raw_vehicle_cmd_converter/README.md @@ -22,7 +22,7 @@ Once the acceleration map is crafted, it should be loaded when the RawVehicleCmd ### Auto-Calibration Tool -For ease of calibration and adjustments to the lookup table, an auto-calibration tool is available. More information and instructions for this tool can be found [here](https://github.com/autowarefoundation/autoware.universe/blob/main/vehicle/accel_brake_map_calibrator/accel_brake_map_calibrator/README.md). +For ease of calibration and adjustments to the lookup table, an auto-calibration tool is available. More information and instructions for this tool can be found [here](https://github.com/autowarefoundation/autoware.universe/blob/main/vehicle/autoware_accel_brake_map_calibrator/README.md). ## Input topics From 4f12fa540acb57d88d8c65b87c5c896320bb683a Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Tue, 11 Jun 2024 01:22:13 +0900 Subject: [PATCH 092/142] refactor(external cmd converter)!: add autoware_ prefix (#7361) * add prefix to the code Signed-off-by: Yuki Takagi * rename Signed-off-by: Yuki Takagi * fix Signed-off-by: Yuki Takagi * fix Signed-off-by: Yuki Takagi * fix Signed-off-by: Yuki Takagi * Update .github/CODEOWNERS --------- Signed-off-by: Yuki Takagi Co-authored-by: Takayuki Murooka --- .github/CODEOWNERS | 3 +-- .../launch/control.launch.py | 5 ++++- launch/tier4_control_launch/package.xml | 3 ++- .../CMakeLists.txt | 19 +++++++++++++++++++ .../README.md | 0 .../config/external_cmd_converter.param.yaml | 0 .../autoware_external_cmd_converter}/node.hpp | 10 +++++----- .../launch/external_cmd_converter.launch.py | 4 ++-- .../launch/external_cmd_converter.launch.xml | 4 ++-- .../package.xml | 4 ++-- .../schema/external_cmd_converter.json | 0 .../src/node.cpp | 8 ++++---- vehicle/external_cmd_converter/CMakeLists.txt | 19 ------------------- 13 files changed, 41 insertions(+), 38 deletions(-) create mode 100644 vehicle/autoware_external_cmd_converter/CMakeLists.txt rename vehicle/{external_cmd_converter => autoware_external_cmd_converter}/README.md (100%) rename vehicle/{external_cmd_converter => autoware_external_cmd_converter}/config/external_cmd_converter.param.yaml (100%) rename vehicle/{external_cmd_converter/include/external_cmd_converter => autoware_external_cmd_converter/include/autoware_external_cmd_converter}/node.hpp (93%) rename vehicle/{external_cmd_converter => autoware_external_cmd_converter}/launch/external_cmd_converter.launch.py (97%) rename vehicle/{external_cmd_converter => autoware_external_cmd_converter}/launch/external_cmd_converter.launch.xml (89%) rename vehicle/{external_cmd_converter => autoware_external_cmd_converter}/package.xml (90%) rename vehicle/{external_cmd_converter => autoware_external_cmd_converter}/schema/external_cmd_converter.json (100%) rename vehicle/{external_cmd_converter => autoware_external_cmd_converter}/src/node.cpp (97%) delete mode 100644 vehicle/external_cmd_converter/CMakeLists.txt diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8732f11d14202..9fb7aa21d74b7 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -244,9 +244,8 @@ system/system_monitor/** fumihito.ito@tier4.jp tetsuhiro.kawaguchi@tier4.jp system/topic_state_monitor/** ryohsuke.mitsudome@tier4.jp system/velodyne_monitor/** fumihito.ito@tier4.jp tools/reaction_analyzer/** berkay@leodrive.ai -vehicle/autoware_steer_offset_estimator/** taiki.tanaka@tier4.jp vehicle/autoware_accel_brake_map_calibrator/** taiki.tanaka@tier4.jp takeshi.miura@tier4.jp tomoya.kimura@tier4.jp -vehicle/external_cmd_converter/** takamasa.horibe@tier4.jp +vehicle/autoware_external_cmd_converter/** takamasa.horibe@tier4.jp vehicle/autoware_raw_vehicle_cmd_converter/** makoto.kurihara@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp vehicle/autoware_steer_offset_estimator/** taiki.tanaka@tier4.jp vehicle/autoware_vehicle_info_utils/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp diff --git a/launch/tier4_control_launch/launch/control.launch.py b/launch/tier4_control_launch/launch/control.launch.py index 2dd12b1705dd3..c9de43aa38165 100644 --- a/launch/tier4_control_launch/launch/control.launch.py +++ b/launch/tier4_control_launch/launch/control.launch.py @@ -290,7 +290,10 @@ def launch_setup(context, *args, **kwargs): # external cmd converter external_cmd_converter_loader = IncludeLaunchDescription( PythonLaunchDescriptionSource( - [FindPackageShare("external_cmd_converter"), "/launch/external_cmd_converter.launch.py"] + [ + FindPackageShare("autoware_external_cmd_converter"), + "/launch/external_cmd_converter.launch.py", + ] ), launch_arguments=[ ("use_intra_process", LaunchConfiguration("use_intra_process")), diff --git a/launch/tier4_control_launch/package.xml b/launch/tier4_control_launch/package.xml index f02ec0aee47b6..33f0ea5318654 100644 --- a/launch/tier4_control_launch/package.xml +++ b/launch/tier4_control_launch/package.xml @@ -11,11 +11,12 @@ ament_cmake_auto autoware_cmake + autoware_external_cmd_converter autoware_external_cmd_selector autoware_lane_departure_checker autoware_vehicle_cmd_gate control_evaluator - external_cmd_converter + external_cmd_selector shift_decider trajectory_follower_node diff --git a/vehicle/autoware_external_cmd_converter/CMakeLists.txt b/vehicle/autoware_external_cmd_converter/CMakeLists.txt new file mode 100644 index 0000000000000..27a256ea775c5 --- /dev/null +++ b/vehicle/autoware_external_cmd_converter/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 3.14) +project(autoware_external_cmd_converter) + +find_package(autoware_cmake REQUIRED) +autoware_package() + +ament_auto_add_library(autoware_external_cmd_converter SHARED + src/node.cpp +) + +rclcpp_components_register_node(autoware_external_cmd_converter + PLUGIN "autoware::external_cmd_converter::ExternalCmdConverterNode" + EXECUTABLE external_cmd_converter_node +) + +ament_auto_package(INSTALL_TO_SHARE + launch + config +) diff --git a/vehicle/external_cmd_converter/README.md b/vehicle/autoware_external_cmd_converter/README.md similarity index 100% rename from vehicle/external_cmd_converter/README.md rename to vehicle/autoware_external_cmd_converter/README.md diff --git a/vehicle/external_cmd_converter/config/external_cmd_converter.param.yaml b/vehicle/autoware_external_cmd_converter/config/external_cmd_converter.param.yaml similarity index 100% rename from vehicle/external_cmd_converter/config/external_cmd_converter.param.yaml rename to vehicle/autoware_external_cmd_converter/config/external_cmd_converter.param.yaml diff --git a/vehicle/external_cmd_converter/include/external_cmd_converter/node.hpp b/vehicle/autoware_external_cmd_converter/include/autoware_external_cmd_converter/node.hpp similarity index 93% rename from vehicle/external_cmd_converter/include/external_cmd_converter/node.hpp rename to vehicle/autoware_external_cmd_converter/include/autoware_external_cmd_converter/node.hpp index b491cb3db5484..97ee325ecdcca 100644 --- a/vehicle/external_cmd_converter/include/external_cmd_converter/node.hpp +++ b/vehicle/autoware_external_cmd_converter/include/autoware_external_cmd_converter/node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef EXTERNAL_CMD_CONVERTER__NODE_HPP_ -#define EXTERNAL_CMD_CONVERTER__NODE_HPP_ +#ifndef AUTOWARE_EXTERNAL_CMD_CONVERTER__NODE_HPP_ +#define AUTOWARE_EXTERNAL_CMD_CONVERTER__NODE_HPP_ #include "tier4_autoware_utils/ros/polling_subscriber.hpp" @@ -32,7 +32,7 @@ #include #include -namespace external_cmd_converter +namespace autoware::external_cmd_converter { using GearCommand = autoware_vehicle_msgs::msg::GearCommand; using autoware_control_msgs::msg::Control; @@ -104,6 +104,6 @@ class ExternalCmdConverterNode : public rclcpp::Node double get_shift_velocity_sign(const GearCommand & cmd); }; -} // namespace external_cmd_converter +} // namespace autoware::external_cmd_converter -#endif // EXTERNAL_CMD_CONVERTER__NODE_HPP_ +#endif // AUTOWARE_EXTERNAL_CMD_CONVERTER__NODE_HPP_ diff --git a/vehicle/external_cmd_converter/launch/external_cmd_converter.launch.py b/vehicle/autoware_external_cmd_converter/launch/external_cmd_converter.launch.py similarity index 97% rename from vehicle/external_cmd_converter/launch/external_cmd_converter.launch.py rename to vehicle/autoware_external_cmd_converter/launch/external_cmd_converter.launch.py index e3f5ec20e6165..91dfde42046a7 100644 --- a/vehicle/external_cmd_converter/launch/external_cmd_converter.launch.py +++ b/vehicle/autoware_external_cmd_converter/launch/external_cmd_converter.launch.py @@ -105,8 +105,8 @@ def generate_launch_description(): ] component = ComposableNode( - package="external_cmd_converter", - plugin="external_cmd_converter::ExternalCmdConverterNode", + package="autoware_external_cmd_converter", + plugin="autoware::external_cmd_converter::ExternalCmdConverterNode", name="external_cmd_converter", remappings=[ _create_mapping_tuple("in/external_control_cmd"), diff --git a/vehicle/external_cmd_converter/launch/external_cmd_converter.launch.xml b/vehicle/autoware_external_cmd_converter/launch/external_cmd_converter.launch.xml similarity index 89% rename from vehicle/external_cmd_converter/launch/external_cmd_converter.launch.xml rename to vehicle/autoware_external_cmd_converter/launch/external_cmd_converter.launch.xml index b2ac46297b044..8e38a5d529ca7 100644 --- a/vehicle/external_cmd_converter/launch/external_cmd_converter.launch.xml +++ b/vehicle/autoware_external_cmd_converter/launch/external_cmd_converter.launch.xml @@ -1,6 +1,6 @@ - + @@ -24,7 +24,7 @@ - + diff --git a/vehicle/external_cmd_converter/package.xml b/vehicle/autoware_external_cmd_converter/package.xml similarity index 90% rename from vehicle/external_cmd_converter/package.xml rename to vehicle/autoware_external_cmd_converter/package.xml index 5627616971e26..f98c14f4fd2c3 100644 --- a/vehicle/external_cmd_converter/package.xml +++ b/vehicle/autoware_external_cmd_converter/package.xml @@ -1,9 +1,9 @@ - external_cmd_converter + autoware_external_cmd_converter 0.1.0 - The external_cmd_converter package + The autoware_external_cmd_converter package Takamasa Horibe Eiki Nagata Apache License 2.0 diff --git a/vehicle/external_cmd_converter/schema/external_cmd_converter.json b/vehicle/autoware_external_cmd_converter/schema/external_cmd_converter.json similarity index 100% rename from vehicle/external_cmd_converter/schema/external_cmd_converter.json rename to vehicle/autoware_external_cmd_converter/schema/external_cmd_converter.json diff --git a/vehicle/external_cmd_converter/src/node.cpp b/vehicle/autoware_external_cmd_converter/src/node.cpp similarity index 97% rename from vehicle/external_cmd_converter/src/node.cpp rename to vehicle/autoware_external_cmd_converter/src/node.cpp index 49b4d80371eed..cbff8ab5ef2ce 100644 --- a/vehicle/external_cmd_converter/src/node.cpp +++ b/vehicle/autoware_external_cmd_converter/src/node.cpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "external_cmd_converter/node.hpp" +#include "autoware_external_cmd_converter/node.hpp" #include #include #include #include -namespace external_cmd_converter +namespace autoware::external_cmd_converter { ExternalCmdConverterNode::ExternalCmdConverterNode(const rclcpp::NodeOptions & node_options) : Node("external_cmd_converter", node_options) @@ -226,7 +226,7 @@ bool ExternalCmdConverterNode::check_remote_topic_rate() return true; } -} // namespace external_cmd_converter +} // namespace autoware::external_cmd_converter #include -RCLCPP_COMPONENTS_REGISTER_NODE(external_cmd_converter::ExternalCmdConverterNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::external_cmd_converter::ExternalCmdConverterNode) diff --git a/vehicle/external_cmd_converter/CMakeLists.txt b/vehicle/external_cmd_converter/CMakeLists.txt deleted file mode 100644 index 9624067bcf757..0000000000000 --- a/vehicle/external_cmd_converter/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(external_cmd_converter) - -find_package(autoware_cmake REQUIRED) -autoware_package() - -ament_auto_add_library(external_cmd_converter SHARED - src/node.cpp -) - -rclcpp_components_register_node(external_cmd_converter - PLUGIN "external_cmd_converter::ExternalCmdConverterNode" - EXECUTABLE external_cmd_converter_node -) - -ament_auto_package(INSTALL_TO_SHARE - launch - config -) From aabff3b0da3615578500efcc54b0b86a260f0761 Mon Sep 17 00:00:00 2001 From: SakodaShintaro Date: Tue, 11 Jun 2024 09:02:17 +0900 Subject: [PATCH 093/142] fix(tier4_control_launch, crosswalk_traffic_light_estimator): fix a mistake when adding prefixes (#7423) Fixed a mistake when adding prefixes Signed-off-by: Shintaro Sakoda --- launch/tier4_control_launch/package.xml | 1 - .../autoware_crosswalk_traffic_light_estimator/src/node.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/launch/tier4_control_launch/package.xml b/launch/tier4_control_launch/package.xml index 33f0ea5318654..b9bf1ed3fcae6 100644 --- a/launch/tier4_control_launch/package.xml +++ b/launch/tier4_control_launch/package.xml @@ -16,7 +16,6 @@ autoware_lane_departure_checker autoware_vehicle_cmd_gate control_evaluator - external_cmd_selector shift_decider trajectory_follower_node diff --git a/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp b/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp index 611984a4612d9..2c4da0b95b161 100644 --- a/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp +++ b/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp @@ -11,7 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#include "crosswalk_traffic_light_estimator/node.hpp" +#include "autoware_crosswalk_traffic_light_estimator/node.hpp" #include #include From bf81712489e01b919bf54124145261a7a6a09cd0 Mon Sep 17 00:00:00 2001 From: mkquda <168697710+mkquda@users.noreply.github.com> Date: Tue, 11 Jun 2024 09:26:18 +0900 Subject: [PATCH 094/142] feat(behavior_velocity_planner): use polling subscriber to improve performance (#7274) RT1-6588 use polling subscribers in behavior velcity planner Signed-off-by: mohammad alqudah --- .../src/node.cpp | 205 +++++++----------- .../src/node.hpp | 61 ++++-- 2 files changed, 120 insertions(+), 146 deletions(-) diff --git a/planning/autoware_behavior_velocity_planner/src/node.cpp b/planning/autoware_behavior_velocity_planner/src/node.cpp index 3ff4e813b3266..40457ce4b30f3 100644 --- a/planning/autoware_behavior_velocity_planner/src/node.cpp +++ b/planning/autoware_behavior_velocity_planner/src/node.cpp @@ -84,41 +84,13 @@ BehaviorVelocityPlannerNode::BehaviorVelocityPlannerNode(const rclcpp::NodeOptio createSubscriptionOptions(this)); // Subscribers - sub_predicted_objects_ = - this->create_subscription( - "~/input/dynamic_objects", 1, - std::bind(&BehaviorVelocityPlannerNode::onPredictedObjects, this, _1), - createSubscriptionOptions(this)); - sub_no_ground_pointcloud_ = this->create_subscription( - "~/input/no_ground_pointcloud", rclcpp::SensorDataQoS(), - std::bind(&BehaviorVelocityPlannerNode::onNoGroundPointCloud, this, _1), - createSubscriptionOptions(this)); - sub_vehicle_odometry_ = this->create_subscription( - "~/input/vehicle_odometry", 1, std::bind(&BehaviorVelocityPlannerNode::onOdometry, this, _1), - createSubscriptionOptions(this)); - sub_acceleration_ = this->create_subscription( - "~/input/accel", 1, std::bind(&BehaviorVelocityPlannerNode::onAcceleration, this, _1), - createSubscriptionOptions(this)); sub_lanelet_map_ = this->create_subscription( "~/input/vector_map", rclcpp::QoS(10).transient_local(), std::bind(&BehaviorVelocityPlannerNode::onLaneletMap, this, _1), createSubscriptionOptions(this)); - sub_traffic_signals_ = - this->create_subscription( - "~/input/traffic_signals", 1, - std::bind(&BehaviorVelocityPlannerNode::onTrafficSignals, this, _1), - createSubscriptionOptions(this)); sub_external_velocity_limit_ = this->create_subscription( "~/input/external_velocity_limit_mps", rclcpp::QoS{1}.transient_local(), std::bind(&BehaviorVelocityPlannerNode::onExternalVelocityLimit, this, _1)); - sub_virtual_traffic_light_states_ = - this->create_subscription( - "~/input/virtual_traffic_light_states", 1, - std::bind(&BehaviorVelocityPlannerNode::onVirtualTrafficLightStates, this, _1), - createSubscriptionOptions(this)); - sub_occupancy_grid_ = this->create_subscription( - "~/input/occupancy_grid", 1, std::bind(&BehaviorVelocityPlannerNode::onOccupancyGrid, this, _1), - createSubscriptionOptions(this)); srv_load_plugin_ = create_service( "~/service/load_plugin", std::bind(&BehaviorVelocityPlannerNode::onLoadPlugin, this, _1, _2)); @@ -178,66 +150,32 @@ void BehaviorVelocityPlannerNode::onUnloadPlugin( planner_manager_.removeScenePlugin(*this, request->plugin_name); } -// NOTE: argument planner_data must not be referenced for multithreading -bool BehaviorVelocityPlannerNode::isDataReady( - const PlannerData planner_data, rclcpp::Clock clock) const +void BehaviorVelocityPlannerNode::onParam() { - const auto & d = planner_data; - - // from callbacks - if (!d.current_odometry) { - RCLCPP_INFO_THROTTLE(get_logger(), clock, 3000, "Waiting for current odometry"); - return false; - } - - if (!d.current_velocity) { - RCLCPP_INFO_THROTTLE(get_logger(), clock, 3000, "Waiting for current velocity"); - return false; - } - if (!d.current_acceleration) { - RCLCPP_INFO_THROTTLE(get_logger(), clock, 3000, "Waiting for current acceleration"); - return false; - } - if (!d.predicted_objects) { - RCLCPP_INFO_THROTTLE(get_logger(), clock, 3000, "Waiting for predicted_objects"); - return false; - } - if (!d.no_ground_pointcloud) { - RCLCPP_INFO_THROTTLE(get_logger(), clock, 3000, "Waiting for pointcloud"); - return false; - } - if (!map_ptr_) { - RCLCPP_INFO_THROTTLE(get_logger(), clock, 3000, "Waiting for the initialization of map"); - return false; - } - if (!d.velocity_smoother_) { - RCLCPP_INFO_THROTTLE( - get_logger(), clock, 3000, "Waiting for the initialization of velocity smoother"); - return false; - } - if (!d.occupancy_grid) { - RCLCPP_INFO_THROTTLE( - get_logger(), clock, 3000, "Waiting for the initialization of occupancy grid map"); - return false; - } - return true; + // Note(VRichardJP): mutex lock is not necessary as onParam is only called once in the + // constructed. It would be required if it was a callback. std::lock_guard + // lock(mutex_); + planner_data_.velocity_smoother_ = + std::make_unique(*this); + planner_data_.velocity_smoother_->setWheelBase(planner_data_.vehicle_info_.wheel_base_m); } -void BehaviorVelocityPlannerNode::onOccupancyGrid( - const nav_msgs::msg::OccupancyGrid::ConstSharedPtr msg) +void BehaviorVelocityPlannerNode::onLaneletMap( + const autoware_map_msgs::msg::LaneletMapBin::ConstSharedPtr msg) { std::lock_guard lock(mutex_); - planner_data_.occupancy_grid = msg; + + map_ptr_ = msg; + has_received_map_ = true; } -void BehaviorVelocityPlannerNode::onPredictedObjects( - const autoware_perception_msgs::msg::PredictedObjects::ConstSharedPtr msg) +void BehaviorVelocityPlannerNode::onExternalVelocityLimit(const VelocityLimit::ConstSharedPtr msg) { std::lock_guard lock(mutex_); - planner_data_.predicted_objects = msg; + planner_data_.external_velocity_limit = *msg; } -void BehaviorVelocityPlannerNode::onNoGroundPointCloud( +void BehaviorVelocityPlannerNode::processNoGroundPointCloud( const sensor_msgs::msg::PointCloud2::ConstSharedPtr msg) { geometry_msgs::msg::TransformStamped transform; @@ -258,16 +196,11 @@ void BehaviorVelocityPlannerNode::onNoGroundPointCloud( tier4_autoware_utils::transformPointCloud(pc, *pc_transformed, affine); } - { - std::lock_guard lock(mutex_); - planner_data_.no_ground_pointcloud = pc_transformed; - } + planner_data_.no_ground_pointcloud = pc_transformed; } -void BehaviorVelocityPlannerNode::onOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg) +void BehaviorVelocityPlannerNode::processOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg) { - std::lock_guard lock(mutex_); - auto current_odometry = std::make_shared(); current_odometry->header = msg->header; current_odometry->pose = msg->pose.pose; @@ -297,37 +230,9 @@ void BehaviorVelocityPlannerNode::onOdometry(const nav_msgs::msg::Odometry::Cons } } -void BehaviorVelocityPlannerNode::onAcceleration( - const geometry_msgs::msg::AccelWithCovarianceStamped::ConstSharedPtr msg) -{ - std::lock_guard lock(mutex_); - planner_data_.current_acceleration = msg; -} - -void BehaviorVelocityPlannerNode::onParam() -{ - // Note(VRichardJP): mutex lock is not necessary as onParam is only called once in the - // constructed. It would be required if it was a callback. std::lock_guard - // lock(mutex_); - planner_data_.velocity_smoother_ = - std::make_unique(*this); - planner_data_.velocity_smoother_->setWheelBase(planner_data_.vehicle_info_.wheel_base_m); -} - -void BehaviorVelocityPlannerNode::onLaneletMap( - const autoware_map_msgs::msg::LaneletMapBin::ConstSharedPtr msg) -{ - std::lock_guard lock(mutex_); - - map_ptr_ = msg; - has_received_map_ = true; -} - -void BehaviorVelocityPlannerNode::onTrafficSignals( +void BehaviorVelocityPlannerNode::processTrafficSignals( const autoware_perception_msgs::msg::TrafficLightGroupArray::ConstSharedPtr msg) { - std::lock_guard lock(mutex_); - // clear previous observation planner_data_.traffic_light_id_map_raw_.clear(); const auto traffic_light_id_map_last_observed_old = @@ -361,17 +266,70 @@ void BehaviorVelocityPlannerNode::onTrafficSignals( } } -void BehaviorVelocityPlannerNode::onExternalVelocityLimit(const VelocityLimit::ConstSharedPtr msg) +bool BehaviorVelocityPlannerNode::processData(rclcpp::Clock clock) { - std::lock_guard lock(mutex_); - planner_data_.external_velocity_limit = *msg; + bool is_ready = true; + const auto & logData = [&clock, this](const std::string & data_type) { + std::string msg = "Waiting for " + data_type + " data"; + RCLCPP_INFO_THROTTLE(get_logger(), clock, logger_throttle_interval, msg.c_str()); + }; + + const auto & getData = [&logData](auto & dest, auto & sub, const std::string & data_type = "") { + const auto temp = sub.takeData(); + if (temp) { + dest = temp; + return true; + } + if (!data_type.empty()) logData(data_type); + return false; + }; + + is_ready &= getData(planner_data_.current_acceleration, sub_acceleration_, "acceleration"); + is_ready &= getData(planner_data_.predicted_objects, sub_predicted_objects_, "predicted_objects"); + is_ready &= getData(planner_data_.occupancy_grid, sub_occupancy_grid_, "occupancy_grid"); + + const auto odometry = sub_vehicle_odometry_.takeData(); + if (odometry) { + processOdometry(odometry); + } else { + logData("odometry"); + is_ready = false; + } + + const auto no_ground_pointcloud = sub_no_ground_pointcloud_.takeData(); + if (no_ground_pointcloud) { + processNoGroundPointCloud(no_ground_pointcloud); + } else { + logData("pointcloud"); + is_ready = false; + } + + // optional data + getData(planner_data_.virtual_traffic_light_states, sub_virtual_traffic_light_states_); + + const auto traffic_signals = sub_traffic_signals_.takeData(); + if (traffic_signals) processTrafficSignals(traffic_signals); + + return is_ready; } -void BehaviorVelocityPlannerNode::onVirtualTrafficLightStates( - const tier4_v2x_msgs::msg::VirtualTrafficLightStateArray::ConstSharedPtr msg) +// NOTE: argument planner_data must not be referenced for multithreading +bool BehaviorVelocityPlannerNode::isDataReady(rclcpp::Clock clock) { - std::lock_guard lock(mutex_); - planner_data_.virtual_traffic_light_states = msg; + if (!planner_data_.velocity_smoother_) { + RCLCPP_INFO_THROTTLE( + get_logger(), clock, logger_throttle_interval, + "Waiting for the initialization of velocity smoother"); + return false; + } + + if (!map_ptr_) { + RCLCPP_INFO_THROTTLE( + get_logger(), clock, logger_throttle_interval, "Waiting for lanelet_map data"); + return false; + } + + return processData(clock); } void BehaviorVelocityPlannerNode::onTrigger( @@ -379,7 +337,7 @@ void BehaviorVelocityPlannerNode::onTrigger( { std::unique_lock lk(mutex_); - if (!isDataReady(planner_data_, *get_clock())) { + if (!isDataReady(*get_clock())) { return; } @@ -390,7 +348,8 @@ void BehaviorVelocityPlannerNode::onTrigger( } if (!planner_data_.route_handler_) { RCLCPP_INFO_THROTTLE( - get_logger(), *get_clock(), 3000, "Waiting for the initialization of route_handler"); + get_logger(), *get_clock(), logger_throttle_interval, + "Waiting for the initialization of route_handler"); return; } @@ -423,7 +382,7 @@ autoware_planning_msgs::msg::Path BehaviorVelocityPlannerNode::generatePath( is_driving_forward_ = is_driving_forward ? is_driving_forward.value() : is_driving_forward_; if (!is_driving_forward_) { RCLCPP_WARN_THROTTLE( - get_logger(), *get_clock(), 3000, + get_logger(), *get_clock(), logger_throttle_interval, "Backward path is NOT supported. just converting path_with_lane_id to path"); output_path_msg = to_path(*input_path_msg); output_path_msg.header.frame_id = "map"; diff --git a/planning/autoware_behavior_velocity_planner/src/node.hpp b/planning/autoware_behavior_velocity_planner/src/node.hpp index b2157bfb818ce..73dfdb15e2d8d 100644 --- a/planning/autoware_behavior_velocity_planner/src/node.hpp +++ b/planning/autoware_behavior_velocity_planner/src/node.hpp @@ -17,6 +17,7 @@ #include "planner_manager.hpp" #include "tier4_autoware_utils/ros/logger_level_configure.hpp" +#include "tier4_autoware_utils/ros/polling_subscriber.hpp" #include #include @@ -64,33 +65,46 @@ class BehaviorVelocityPlannerNode : public rclcpp::Node // subscriber rclcpp::Subscription::SharedPtr trigger_sub_path_with_lane_id_; - rclcpp::Subscription::SharedPtr - sub_predicted_objects_; - rclcpp::Subscription::SharedPtr sub_no_ground_pointcloud_; - rclcpp::Subscription::SharedPtr sub_vehicle_odometry_; - rclcpp::Subscription::SharedPtr sub_acceleration_; rclcpp::Subscription::SharedPtr sub_lanelet_map_; - rclcpp::Subscription::SharedPtr - sub_traffic_signals_; - rclcpp::Subscription::SharedPtr - sub_virtual_traffic_light_states_; - rclcpp::Subscription::SharedPtr sub_occupancy_grid_; rclcpp::Subscription::SharedPtr sub_external_velocity_limit_; + // polling subscribers + tier4_autoware_utils::InterProcessPollingSubscriber< + autoware_perception_msgs::msg::PredictedObjects> + sub_predicted_objects_{this, "~/input/dynamic_objects"}; + + tier4_autoware_utils::InterProcessPollingSubscriber + sub_no_ground_pointcloud_{this, "~/input/no_ground_pointcloud"}; + + tier4_autoware_utils::InterProcessPollingSubscriber + sub_vehicle_odometry_{this, "~/input/vehicle_odometry"}; + + tier4_autoware_utils::InterProcessPollingSubscriber< + geometry_msgs::msg::AccelWithCovarianceStamped> + sub_acceleration_{this, "~/input/accel"}; + + tier4_autoware_utils::InterProcessPollingSubscriber< + autoware_perception_msgs::msg::TrafficLightGroupArray> + sub_traffic_signals_{this, "~/input/traffic_signals"}; + + tier4_autoware_utils::InterProcessPollingSubscriber< + tier4_v2x_msgs::msg::VirtualTrafficLightStateArray> + sub_virtual_traffic_light_states_{this, "~/input/virtual_traffic_light_states"}; + + tier4_autoware_utils::InterProcessPollingSubscriber + sub_occupancy_grid_{this, "~/input/occupancy_grid"}; + void onTrigger(const tier4_planning_msgs::msg::PathWithLaneId::ConstSharedPtr input_path_msg); - void onPredictedObjects( - const autoware_perception_msgs::msg::PredictedObjects::ConstSharedPtr msg); - void onNoGroundPointCloud(const sensor_msgs::msg::PointCloud2::ConstSharedPtr msg); - void onOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg); - void onAcceleration(const geometry_msgs::msg::AccelWithCovarianceStamped::ConstSharedPtr msg); + + void onParam(); void onLaneletMap(const autoware_map_msgs::msg::LaneletMapBin::ConstSharedPtr msg); - void onTrafficSignals( - const autoware_perception_msgs::msg::TrafficLightGroupArray::ConstSharedPtr msg); - void onVirtualTrafficLightStates( - const tier4_v2x_msgs::msg::VirtualTrafficLightStateArray::ConstSharedPtr msg); - void onOccupancyGrid(const nav_msgs::msg::OccupancyGrid::ConstSharedPtr msg); void onExternalVelocityLimit(const VelocityLimit::ConstSharedPtr msg); - void onParam(); + + void processNoGroundPointCloud(const sensor_msgs::msg::PointCloud2::ConstSharedPtr msg); + void processOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg); + void processTrafficSignals( + const autoware_perception_msgs::msg::TrafficLightGroupArray::ConstSharedPtr msg); + bool processData(rclcpp::Clock clock); // publisher rclcpp::Publisher::SharedPtr path_pub_; @@ -123,8 +137,7 @@ class BehaviorVelocityPlannerNode : public rclcpp::Node std::mutex mutex_; // function - geometry_msgs::msg::PoseStamped getCurrentPose(); - bool isDataReady(const PlannerData planner_data, rclcpp::Clock clock) const; + bool isDataReady(rclcpp::Clock clock); autoware_planning_msgs::msg::Path generatePath( const tier4_planning_msgs::msg::PathWithLaneId::ConstSharedPtr input_path_msg, const PlannerData & planner_data); @@ -132,6 +145,8 @@ class BehaviorVelocityPlannerNode : public rclcpp::Node std::unique_ptr logger_configure_; std::unique_ptr published_time_publisher_; + + static constexpr int logger_throttle_interval = 3000; }; } // namespace autoware::behavior_velocity_planner From 4129dddd1c9add878a1e7a26b48e5ae7a8ecfd42 Mon Sep 17 00:00:00 2001 From: mkquda <168697710+mkquda@users.noreply.github.com> Date: Tue, 11 Jun 2024 09:52:28 +0900 Subject: [PATCH 095/142] refactor(route_handler): route handler add autoware prefix (#7341) * rename route handler package Signed-off-by: mohammad alqudah * update packages dependencies Signed-off-by: mohammad alqudah * update include guards Signed-off-by: mohammad alqudah * update includes Signed-off-by: mohammad alqudah * put in autoware namespace Signed-off-by: mohammad alqudah * fix formats Signed-off-by: mohammad alqudah * keep header and source file name as before Signed-off-by: mohammad alqudah --------- Signed-off-by: mohammad alqudah --- .github/CODEOWNERS | 2 +- planning/.pages | 2 +- .../src/interface.cpp | 2 +- .../src/manager.hpp | 3 +-- .../src/manager.hpp | 2 +- .../manager.hpp | 10 ++++------ .../scene.hpp | 2 +- .../utils/base_class.hpp | 2 +- .../utils/utils.hpp | 4 ++-- .../src/utils/utils.cpp | 2 +- .../data_manager.hpp | 4 ++-- .../interface/scene_module_interface.hpp | 2 +- .../turn_signal_decider.hpp | 4 ++-- .../drivable_area_expansion.hpp | 2 +- .../utils/utils.hpp | 6 +++--- .../autoware_behavior_path_planner_common/package.xml | 2 +- .../src/utils/utils.cpp | 2 +- .../test/test_drivable_area_expansion.cpp | 5 +++-- .../util.hpp | 4 ++-- .../data_structs.hpp | 2 +- .../package.xml | 2 +- .../test/test_utils.cpp | 9 +++++---- .../package.xml | 2 +- .../package.xml | 2 +- .../package.xml | 2 +- .../autoware_behavior_velocity_planner/package.xml | 2 +- .../planner_data.hpp | 4 ++-- .../package.xml | 2 +- .../package.xml | 2 +- .../package.xml | 2 +- .../package.xml | 2 +- .../package.xml | 2 +- .../package.xml | 2 +- .../package.xml | 2 +- .../freespace_planner_node.hpp | 4 ++-- planning/autoware_freespace_planner/package.xml | 2 +- planning/autoware_mission_planner/package.xml | 2 +- .../src/lanelet2_plugins/default_planner.hpp | 4 ++-- .../src/lanelet2_plugins/utility_functions.cpp | 3 ++- .../src/lanelet2_plugins/utility_functions.hpp | 5 +++-- .../src/mission_planner/mission_planner.hpp | 2 +- .../autoware_planning_test_manager_utils.hpp | 4 ++-- planning/autoware_planning_test_manager/package.xml | 2 +- .../package.xml | 2 +- .../src/remaining_distance_time_calculator_node.hpp | 2 +- .../CMakeLists.txt | 10 +++++----- .../README.md | 0 .../images/lane_change_test_route.svg | 0 .../images/route_handler_test.svg | 0 .../include/autoware_route_handler}/route_handler.hpp | 10 +++++----- .../package.xml | 2 +- .../src/route_handler.cpp | 6 +++--- .../test/test_route_handler.cpp | 4 ++-- .../test/test_route_handler.hpp | 6 +++--- .../test_route/lane_change_test_route.yaml | 0 .../include/autoware_scenario_selector/node.hpp | 4 ++-- planning/autoware_scenario_selector/package.xml | 2 +- planning/autoware_scenario_selector/src/node.cpp | 2 +- .../autoware_static_centerline_generator/package.xml | 2 +- .../src/type_alias.hpp | 4 ++-- .../autoware_static_centerline_generator/src/utils.hpp | 2 +- .../behavior_path_sampling_planner_module/package.xml | 2 +- .../behavior_velocity_crosswalk_module/package.xml | 2 +- .../package.xml | 2 +- .../package.xml | 2 +- .../package.xml | 2 +- .../package.xml | 2 +- .../behavior_velocity_speed_bump_module/package.xml | 2 +- .../package.xml | 2 +- .../src/decisions.hpp | 2 +- .../src/lanelets_selection.hpp | 2 +- .../src/types.hpp | 2 +- .../planner_data.hpp | 2 +- .../package.xml | 2 +- 74 files changed, 107 insertions(+), 106 deletions(-) rename planning/{route_handler => autoware_route_handler}/CMakeLists.txt (53%) rename planning/{route_handler => autoware_route_handler}/README.md (100%) rename planning/{route_handler => autoware_route_handler}/images/lane_change_test_route.svg (100%) rename planning/{route_handler => autoware_route_handler}/images/route_handler_test.svg (100%) rename planning/{route_handler/include/route_handler => autoware_route_handler/include/autoware_route_handler}/route_handler.hpp (98%) rename planning/{route_handler => autoware_route_handler}/package.xml (97%) rename planning/{route_handler => autoware_route_handler}/src/route_handler.cpp (99%) rename planning/{route_handler => autoware_route_handler}/test/test_route_handler.cpp (98%) rename planning/{route_handler => autoware_route_handler}/test/test_route_handler.hpp (94%) rename planning/{route_handler => autoware_route_handler}/test_route/lane_change_test_route.yaml (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9fb7aa21d74b7..a2eeab9422b79 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -196,7 +196,7 @@ planning/obstacle_velocity_limiter/** maxime.clement@tier4.jp planning/autoware_path_smoother/** maxime.clement@tier4.jp takayuki.murooka@tier4.jp planning/planning_test_utils/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp zulfaqar.azmi@tier4.jp planning/planning_validator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp -planning/route_handler/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp takayuki.murooka@tier4.jp zulfaqar.azmi@tier4.jp +planning/autoware_route_handler/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp takayuki.murooka@tier4.jp zulfaqar.azmi@tier4.jp planning/rtc_interface/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp taiki.tanaka@tier4.jp planning/rtc_replayer/** fumiya.watanabe@tier4.jp taiki.tanaka@tier4.jp planning/sampling_based_planner/autoware_bezier_sampler/** maxime.clement@tier4.jp diff --git a/planning/.pages b/planning/.pages index 1e11d25f1f3ea..04c6b3d8d1922 100644 --- a/planning/.pages +++ b/planning/.pages @@ -75,7 +75,7 @@ nav: - 'Costmap Generator': planning/costmap_generator - 'External Velocity Limit Selector': planning/autoware_external_velocity_limit_selector - 'Objects of Interest Marker Interface': planning/autoware_objects_of_interest_marker_interface - - 'Route Handler': planning/route_handler + - 'Route Handler': planning/autoware_route_handler - 'RTC Interface': planning/autoware_rtc_interface - 'Additional Tools': - 'Remaining Distance Time Calculator': planning/autoware_remaining_distance_time_calculator diff --git a/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.cpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.cpp index c5070540152de..c9cee4d1fc53e 100644 --- a/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.cpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/interface.cpp @@ -22,8 +22,8 @@ namespace autoware::behavior_path_planner { +using autoware::route_handler::Direction; using ::behavior_path_planner::State; -using ::route_handler::Direction; AvoidanceByLaneChangeInterface::AvoidanceByLaneChangeInterface( const std::string & name, rclcpp::Node & node, diff --git a/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.hpp b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.hpp index fc74eae5421b5..b0a9ffe121a63 100644 --- a/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.hpp +++ b/planning/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.hpp @@ -31,14 +31,13 @@ namespace autoware::behavior_path_planner using ::behavior_path_planner::LaneChangeModuleManager; using ::behavior_path_planner::LaneChangeModuleType; using ::behavior_path_planner::SceneModuleInterface; -using ::route_handler::Direction; class AvoidanceByLaneChangeModuleManager : public LaneChangeModuleManager { public: AvoidanceByLaneChangeModuleManager() : LaneChangeModuleManager( - "avoidance_by_lane_change", route_handler::Direction::NONE, + "avoidance_by_lane_change", autoware::route_handler::Direction::NONE, LaneChangeModuleType::AVOIDANCE_BY_LANE_CHANGE) { } diff --git a/planning/autoware_behavior_path_external_request_lane_change_module/src/manager.hpp b/planning/autoware_behavior_path_external_request_lane_change_module/src/manager.hpp index 9a708a1573c78..767fcfbd193f6 100644 --- a/planning/autoware_behavior_path_external_request_lane_change_module/src/manager.hpp +++ b/planning/autoware_behavior_path_external_request_lane_change_module/src/manager.hpp @@ -16,7 +16,7 @@ #define MANAGER_HPP_ #include "autoware_behavior_path_lane_change_module/manager.hpp" -#include "route_handler/route_handler.hpp" +#include "autoware_route_handler/route_handler.hpp" #include diff --git a/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/manager.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/manager.hpp index 42ea99e705f9a..e9bf826d48585 100644 --- a/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/manager.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/manager.hpp @@ -17,7 +17,7 @@ #include "autoware_behavior_path_lane_change_module/utils/data_structs.hpp" #include "autoware_behavior_path_planner_common/interface/scene_module_manager_interface.hpp" -#include "route_handler/route_handler.hpp" +#include "autoware_route_handler/route_handler.hpp" #include @@ -27,7 +27,7 @@ namespace behavior_path_planner { -using route_handler::Direction; +using autoware::route_handler::Direction; class LaneChangeModuleManager : public SceneModuleManagerInterface { @@ -58,8 +58,7 @@ class LaneChangeRightModuleManager : public LaneChangeModuleManager { public: LaneChangeRightModuleManager() - : LaneChangeModuleManager( - "lane_change_right", route_handler::Direction::RIGHT, LaneChangeModuleType::NORMAL) + : LaneChangeModuleManager("lane_change_right", Direction::RIGHT, LaneChangeModuleType::NORMAL) { } }; @@ -68,8 +67,7 @@ class LaneChangeLeftModuleManager : public LaneChangeModuleManager { public: LaneChangeLeftModuleManager() - : LaneChangeModuleManager( - "lane_change_left", route_handler::Direction::LEFT, LaneChangeModuleType::NORMAL) + : LaneChangeModuleManager("lane_change_left", Direction::LEFT, LaneChangeModuleType::NORMAL) { } }; diff --git a/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/scene.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/scene.hpp index 3c104b53b8232..9511682908c42 100644 --- a/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/scene.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/scene.hpp @@ -23,6 +23,7 @@ namespace behavior_path_planner { +using autoware::route_handler::Direction; using behavior_path_planner::utils::path_safety_checker::CollisionCheckDebug; using behavior_path_planner::utils::path_safety_checker::CollisionCheckDebugMap; using behavior_path_planner::utils::path_safety_checker::ExtendedPredictedObject; @@ -33,7 +34,6 @@ using data::lane_change::LanesPolygon; using geometry_msgs::msg::Point; using geometry_msgs::msg::Pose; using geometry_msgs::msg::Twist; -using route_handler::Direction; using tier4_planning_msgs::msg::PathWithLaneId; using utils::path_safety_checker::ExtendedPredictedObjects; diff --git a/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/base_class.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/base_class.hpp index e5710c197d1fd..8fccb95d7cc98 100644 --- a/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/base_class.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/base_class.hpp @@ -36,11 +36,11 @@ namespace behavior_path_planner { +using autoware::route_handler::Direction; using data::lane_change::PathSafetyStatus; using geometry_msgs::msg::Point; using geometry_msgs::msg::Pose; using geometry_msgs::msg::Twist; -using route_handler::Direction; using tier4_autoware_utils::StopWatch; using tier4_planning_msgs::msg::PathWithLaneId; diff --git a/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/utils.hpp b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/utils.hpp index ee4a7833314d4..16d58b7f022bb 100644 --- a/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/utils.hpp +++ b/planning/autoware_behavior_path_lane_change_module/include/autoware_behavior_path_lane_change_module/utils/utils.hpp @@ -22,7 +22,7 @@ #include "autoware_behavior_path_planner_common/utils/utils.hpp" #include "rclcpp/logger.hpp" -#include +#include #include #include @@ -38,6 +38,7 @@ namespace behavior_path_planner::utils::lane_change { +using autoware::route_handler::Direction; using autoware_perception_msgs::msg::PredictedObject; using autoware_perception_msgs::msg::PredictedObjects; using autoware_perception_msgs::msg::PredictedPath; @@ -51,7 +52,6 @@ using geometry_msgs::msg::Point; using geometry_msgs::msg::Pose; using geometry_msgs::msg::Twist; using path_safety_checker::CollisionCheckDebugMap; -using route_handler::Direction; using tier4_autoware_utils::Polygon2d; using tier4_planning_msgs::msg::PathWithLaneId; diff --git a/planning/autoware_behavior_path_lane_change_module/src/utils/utils.cpp b/planning/autoware_behavior_path_lane_change_module/src/utils/utils.cpp index 13df94b8766ad..f9322401b0990 100644 --- a/planning/autoware_behavior_path_lane_change_module/src/utils/utils.cpp +++ b/planning/autoware_behavior_path_lane_change_module/src/utils/utils.cpp @@ -57,10 +57,10 @@ namespace behavior_path_planner::utils::lane_change { +using autoware::route_handler::RouteHandler; using autoware_perception_msgs::msg::ObjectClassification; using autoware_perception_msgs::msg::PredictedObjects; using geometry_msgs::msg::Pose; -using route_handler::RouteHandler; using tier4_autoware_utils::LineString2d; using tier4_autoware_utils::Point2d; using tier4_autoware_utils::Polygon2d; diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/data_manager.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/data_manager.hpp index 3b4d8e3ef2ef3..17c16e59f411d 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/data_manager.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/data_manager.hpp @@ -20,11 +20,11 @@ #include "autoware_behavior_path_planner_common/utils/drivable_area_expansion/parameters.hpp" #include "motion_utils/trajectory/trajectory.hpp" +#include #include #include #include #include -#include #include #include @@ -50,6 +50,7 @@ namespace behavior_path_planner { +using autoware::route_handler::RouteHandler; using autoware_adapi_v1_msgs::msg::OperationModeState; using autoware_perception_msgs::msg::PredictedObject; using autoware_perception_msgs::msg::PredictedObjects; @@ -61,7 +62,6 @@ using geometry_msgs::msg::AccelWithCovarianceStamped; using geometry_msgs::msg::PoseStamped; using nav_msgs::msg::OccupancyGrid; using nav_msgs::msg::Odometry; -using route_handler::RouteHandler; using tier4_planning_msgs::msg::LateralOffset; using tier4_planning_msgs::msg::PathWithLaneId; using PlanResult = PathWithLaneId::SharedPtr; diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/interface/scene_module_interface.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/interface/scene_module_interface.hpp index 898c54b8e348c..3dff67b470147 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/interface/scene_module_interface.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/interface/scene_module_interface.hpp @@ -23,13 +23,13 @@ #include #include #include +#include #include #include #include #include #include #include -#include #include #include #include diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/turn_signal_decider.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/turn_signal_decider.hpp index d658d29710704..e4a17febe045c 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/turn_signal_decider.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/turn_signal_decider.hpp @@ -19,8 +19,8 @@ #include #include +#include #include -#include #include #include @@ -42,12 +42,12 @@ namespace behavior_path_planner { +using autoware::route_handler::RouteHandler; using autoware_vehicle_msgs::msg::HazardLightsCommand; using autoware_vehicle_msgs::msg::TurnIndicatorsCommand; using geometry_msgs::msg::Point; using geometry_msgs::msg::Pose; using nav_msgs::msg::Odometry; -using route_handler::RouteHandler; using tier4_planning_msgs::msg::PathWithLaneId; const std::map g_signal_map = { diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/drivable_area_expansion/drivable_area_expansion.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/drivable_area_expansion/drivable_area_expansion.hpp index f6d45f5179c8c..7bfcb94ff2de6 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/drivable_area_expansion/drivable_area_expansion.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/drivable_area_expansion/drivable_area_expansion.hpp @@ -19,7 +19,7 @@ #include "autoware_behavior_path_planner_common/utils/drivable_area_expansion/parameters.hpp" #include "autoware_behavior_path_planner_common/utils/drivable_area_expansion/types.hpp" -#include +#include #include diff --git a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/utils.hpp b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/utils.hpp index 53bd7c508d246..40973008de824 100644 --- a/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/utils.hpp +++ b/planning/autoware_behavior_path_planner_common/include/autoware_behavior_path_planner_common/utils/utils.hpp @@ -18,7 +18,7 @@ #include "autoware_behavior_path_planner_common/data_manager.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include +#include #include #include @@ -46,10 +46,10 @@ using autoware_perception_msgs::msg::PredictedObject; using autoware_perception_msgs::msg::PredictedObjects; using autoware_perception_msgs::msg::PredictedPath; +using autoware::route_handler::RouteHandler; using geometry_msgs::msg::Point; using geometry_msgs::msg::Pose; using geometry_msgs::msg::Vector3; -using route_handler::RouteHandler; using tier4_autoware_utils::LinearRing2d; using tier4_autoware_utils::Polygon2d; using tier4_planning_msgs::msg::PathPointWithLaneId; @@ -327,7 +327,7 @@ lanelet::ConstLanelets calcLaneAroundPose( bool checkPathRelativeAngle(const PathWithLaneId & path, const double angle_threshold); lanelet::ConstLanelets getLaneletsFromPath( - const PathWithLaneId & path, const std::shared_ptr & route_handler); + const PathWithLaneId & path, const std::shared_ptr & route_handler); std::string convertToSnakeCase(const std::string & input_str); diff --git a/planning/autoware_behavior_path_planner_common/package.xml b/planning/autoware_behavior_path_planner_common/package.xml index 8ffe0fd6ea0c2..6b20027610951 100644 --- a/planning/autoware_behavior_path_planner_common/package.xml +++ b/planning/autoware_behavior_path_planner_common/package.xml @@ -48,6 +48,7 @@ autoware_objects_of_interest_marker_interface autoware_perception_msgs autoware_planning_msgs + autoware_route_handler autoware_rtc_interface autoware_vehicle_info_utils geometry_msgs @@ -57,7 +58,6 @@ motion_utils object_recognition_utils rclcpp - route_handler tf2 tier4_autoware_utils tier4_planning_msgs diff --git a/planning/autoware_behavior_path_planner_common/src/utils/utils.cpp b/planning/autoware_behavior_path_planner_common/src/utils/utils.cpp index 4d5097ab3738f..057cc9a40e8b0 100644 --- a/planning/autoware_behavior_path_planner_common/src/utils/utils.cpp +++ b/planning/autoware_behavior_path_planner_common/src/utils/utils.cpp @@ -1607,7 +1607,7 @@ bool checkPathRelativeAngle(const PathWithLaneId & path, const double angle_thre } lanelet::ConstLanelets getLaneletsFromPath( - const PathWithLaneId & path, const std::shared_ptr & route_handler) + const PathWithLaneId & path, const std::shared_ptr & route_handler) { std::vector unique_lanelet_ids; for (const auto & p : path.points) { diff --git a/planning/autoware_behavior_path_planner_common/test/test_drivable_area_expansion.cpp b/planning/autoware_behavior_path_planner_common/test/test_drivable_area_expansion.cpp index 36a556647f91e..37326347d6374 100644 --- a/planning/autoware_behavior_path_planner_common/test/test_drivable_area_expansion.cpp +++ b/planning/autoware_behavior_path_planner_common/test/test_drivable_area_expansion.cpp @@ -179,7 +179,7 @@ TEST(DrivableAreaExpansionProjection, expand_drivable_area) autoware_map_msgs::msg::LaneletMapBin map; lanelet::LaneletMapPtr empty_lanelet_map_ptr = std::make_shared(); lanelet::utils::conversion::toBinMsg(empty_lanelet_map_ptr, &map); - route_handler::RouteHandler route_handler(map); + autoware::route_handler::RouteHandler route_handler(map); lanelet::ConstLanelets path_lanes = {}; drivable_area_expansion::PathWithLaneId path; { // Simple path with Y=0 and X = 0, 1, 2 @@ -228,7 +228,8 @@ TEST(DrivableAreaExpansionProjection, expand_drivable_area) planner_data.dynamic_object = std::make_shared(dynamic_objects); planner_data.self_odometry = std::make_shared(); - planner_data.route_handler = std::make_shared(route_handler); + planner_data.route_handler = + std::make_shared(route_handler); drivable_area_expansion::expand_drivable_area( path, std::make_shared(planner_data)); // unchanged path points diff --git a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/util.hpp b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/util.hpp index b9f0b964ed428..cf3fba6767006 100644 --- a/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/util.hpp +++ b/planning/autoware_behavior_path_start_planner_module/include/autoware_behavior_path_start_planner_module/util.hpp @@ -21,7 +21,7 @@ #include "autoware_behavior_path_planner_common/utils/path_safety_checker/safety_check.hpp" #include "autoware_behavior_path_start_planner_module/pull_out_path.hpp" -#include +#include #include #include @@ -36,12 +36,12 @@ namespace behavior_path_planner::start_planner_utils { +using autoware::route_handler::RouteHandler; using autoware_perception_msgs::msg::PredictedObjects; using autoware_perception_msgs::msg::PredictedPath; using behavior_path_planner::utils::path_safety_checker::EgoPredictedPathParams; using geometry_msgs::msg::Pose; using geometry_msgs::msg::Twist; -using route_handler::RouteHandler; using tier4_planning_msgs::msg::PathWithLaneId; PathWithLaneId getBackwardPath( diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware_behavior_path_static_obstacle_avoidance_module/data_structs.hpp b/planning/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware_behavior_path_static_obstacle_avoidance_module/data_structs.hpp index 78a8b8b125850..3f5b4da4db13c 100644 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware_behavior_path_static_obstacle_avoidance_module/data_structs.hpp +++ b/planning/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware_behavior_path_static_obstacle_avoidance_module/data_structs.hpp @@ -35,8 +35,8 @@ namespace behavior_path_planner { +using autoware::route_handler::Direction; using behavior_path_planner::utils::path_safety_checker::CollisionCheckDebug; -using route_handler::Direction; enum class ObjectInfo { NONE = 0, diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml b/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml index f8c79d112acaa..5a93e620979be 100644 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml +++ b/planning/autoware_behavior_path_static_obstacle_avoidance_module/package.xml @@ -24,6 +24,7 @@ autoware_behavior_path_planner_common autoware_objects_of_interest_marker_interface autoware_perception_msgs + autoware_route_handler autoware_rtc_interface autoware_vehicle_info_utils behavior_path_planner @@ -33,7 +34,6 @@ motion_utils pluginlib rclcpp - route_handler sensor_msgs signal_processing tf2 diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/test/test_utils.cpp b/planning/autoware_behavior_path_static_obstacle_avoidance_module/test/test_utils.cpp index da681e72533b0..e39188e6425ca 100644 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/test/test_utils.cpp +++ b/planning/autoware_behavior_path_static_obstacle_avoidance_module/test/test_utils.cpp @@ -18,6 +18,7 @@ #include #include +using autoware::route_handler::Direction; using behavior_path_planner::ObjectData; using behavior_path_planner::utils::static_obstacle_avoidance::isOnRight; using behavior_path_planner::utils::static_obstacle_avoidance::isSameDirectionShift; @@ -26,7 +27,7 @@ using behavior_path_planner::utils::static_obstacle_avoidance::isShiftNecessary; TEST(BehaviorPathPlanningAvoidanceUtilsTest, shiftLengthDirectionTest) { ObjectData right_obj; - right_obj.direction = route_handler::Direction::RIGHT; + right_obj.direction = Direction::RIGHT; const double negative_shift_length = -1.0; const double positive_shift_length = 1.0; @@ -34,7 +35,7 @@ TEST(BehaviorPathPlanningAvoidanceUtilsTest, shiftLengthDirectionTest) ASSERT_FALSE(isSameDirectionShift(isOnRight(right_obj), positive_shift_length)); ObjectData left_obj; - left_obj.direction = route_handler::Direction::LEFT; + left_obj.direction = Direction::LEFT; ASSERT_TRUE(isSameDirectionShift(isOnRight(left_obj), positive_shift_length)); ASSERT_FALSE(isSameDirectionShift(isOnRight(left_obj), negative_shift_length)); } @@ -42,7 +43,7 @@ TEST(BehaviorPathPlanningAvoidanceUtilsTest, shiftLengthDirectionTest) TEST(BehaviorPathPlanningAvoidanceUtilsTest, shiftNecessaryTest) { ObjectData right_obj; - right_obj.direction = route_handler::Direction::RIGHT; + right_obj.direction = Direction::RIGHT; const double negative_shift_length = -1.0; const double positive_shift_length = 1.0; @@ -50,7 +51,7 @@ TEST(BehaviorPathPlanningAvoidanceUtilsTest, shiftNecessaryTest) ASSERT_FALSE(isShiftNecessary(isOnRight(right_obj), negative_shift_length)); ObjectData left_obj; - left_obj.direction = route_handler::Direction::LEFT; + left_obj.direction = Direction::LEFT; ASSERT_TRUE(isShiftNecessary(isOnRight(left_obj), negative_shift_length)); ASSERT_FALSE(isShiftNecessary(isOnRight(left_obj), positive_shift_length)); } diff --git a/planning/autoware_behavior_velocity_blind_spot_module/package.xml b/planning/autoware_behavior_velocity_blind_spot_module/package.xml index 4cb554a4a1aab..8a740727445ca 100644 --- a/planning/autoware_behavior_velocity_blind_spot_module/package.xml +++ b/planning/autoware_behavior_velocity_blind_spot_module/package.xml @@ -19,12 +19,12 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_route_handler geometry_msgs lanelet2_extension motion_utils pluginlib rclcpp - route_handler tf2 tier4_autoware_utils tier4_planning_msgs diff --git a/planning/autoware_behavior_velocity_intersection_module/package.xml b/planning/autoware_behavior_velocity_intersection_module/package.xml index 5ce1ff206a1a9..4e79139ba2fe7 100644 --- a/planning/autoware_behavior_velocity_intersection_module/package.xml +++ b/planning/autoware_behavior_velocity_intersection_module/package.xml @@ -21,6 +21,7 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_route_handler autoware_rtc_interface autoware_vehicle_info_utils fmt @@ -33,7 +34,6 @@ nav_msgs pluginlib rclcpp - route_handler tf2_geometry_msgs tier4_autoware_utils tier4_planning_msgs diff --git a/planning/autoware_behavior_velocity_occlusion_spot_module/package.xml b/planning/autoware_behavior_velocity_occlusion_spot_module/package.xml index d8177ddc908f3..e229a69032c27 100644 --- a/planning/autoware_behavior_velocity_occlusion_spot_module/package.xml +++ b/planning/autoware_behavior_velocity_occlusion_spot_module/package.xml @@ -19,6 +19,7 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_route_handler autoware_vehicle_info_utils geometry_msgs grid_map_ros @@ -31,7 +32,6 @@ nav_msgs pluginlib rclcpp - route_handler tf2 tf2_geometry_msgs tier4_autoware_utils diff --git a/planning/autoware_behavior_velocity_planner/package.xml b/planning/autoware_behavior_velocity_planner/package.xml index 8ca1127484a34..d979da6e7a0ef 100644 --- a/planning/autoware_behavior_velocity_planner/package.xml +++ b/planning/autoware_behavior_velocity_planner/package.xml @@ -38,6 +38,7 @@ autoware_map_msgs autoware_perception_msgs autoware_planning_msgs + autoware_route_handler autoware_velocity_smoother diagnostic_msgs eigen @@ -49,7 +50,6 @@ pluginlib rclcpp rclcpp_components - route_handler sensor_msgs tf2 tf2_eigen diff --git a/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp index df5d083f5dcb1..068a10b7e16f3 100644 --- a/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp +++ b/planning/autoware_behavior_velocity_planner_common/include/autoware_behavior_velocity_planner_common/planner_data.hpp @@ -15,7 +15,7 @@ #ifndef AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__PLANNER_DATA_HPP_ #define AUTOWARE_BEHAVIOR_VELOCITY_PLANNER_COMMON__PLANNER_DATA_HPP_ -#include "route_handler/route_handler.hpp" +#include "autoware_route_handler/route_handler.hpp" #include #include @@ -90,7 +90,7 @@ struct PlannerData // velocity smoother std::shared_ptr velocity_smoother_; // route handler - std::shared_ptr route_handler_; + std::shared_ptr route_handler_; // parameters autoware::vehicle_info_utils::VehicleInfo vehicle_info_; diff --git a/planning/autoware_behavior_velocity_planner_common/package.xml b/planning/autoware_behavior_velocity_planner_common/package.xml index 2eadf2c26f59b..69b153ad5d9a9 100644 --- a/planning/autoware_behavior_velocity_planner_common/package.xml +++ b/planning/autoware_behavior_velocity_planner_common/package.xml @@ -24,6 +24,7 @@ autoware_objects_of_interest_marker_interface autoware_perception_msgs autoware_planning_msgs + autoware_route_handler autoware_rtc_interface autoware_vehicle_info_utils autoware_velocity_smoother @@ -37,7 +38,6 @@ pcl_conversions rclcpp rclcpp_components - route_handler sensor_msgs tf2 tf2_eigen diff --git a/planning/autoware_behavior_velocity_run_out_module/package.xml b/planning/autoware_behavior_velocity_run_out_module/package.xml index 284797cbed0a8..a2f8d50f01b1d 100644 --- a/planning/autoware_behavior_velocity_run_out_module/package.xml +++ b/planning/autoware_behavior_velocity_run_out_module/package.xml @@ -22,6 +22,7 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_route_handler autoware_vehicle_info_utils behavior_velocity_crosswalk_module eigen @@ -33,7 +34,6 @@ pcl_conversions pluginlib rclcpp - route_handler sensor_msgs tf2 tf2_eigen diff --git a/planning/autoware_behavior_velocity_stop_line_module/package.xml b/planning/autoware_behavior_velocity_stop_line_module/package.xml index c3d3baa965834..f463f89318ba8 100644 --- a/planning/autoware_behavior_velocity_stop_line_module/package.xml +++ b/planning/autoware_behavior_velocity_stop_line_module/package.xml @@ -20,13 +20,13 @@ autoware_behavior_velocity_planner_common autoware_planning_msgs + autoware_route_handler eigen geometry_msgs lanelet2_extension motion_utils pluginlib rclcpp - route_handler tf2_geometry_msgs visualization_msgs diff --git a/planning/autoware_behavior_velocity_template_module/package.xml b/planning/autoware_behavior_velocity_template_module/package.xml index eb6a6668fcee9..dc7e57d421d1f 100644 --- a/planning/autoware_behavior_velocity_template_module/package.xml +++ b/planning/autoware_behavior_velocity_template_module/package.xml @@ -15,6 +15,7 @@ autoware_behavior_velocity_planner_common autoware_planning_msgs + autoware_route_handler eigen geometry_msgs lanelet2_extension @@ -22,7 +23,6 @@ motion_utils pluginlib rclcpp - route_handler sensor_msgs tf2 tier4_autoware_utils diff --git a/planning/autoware_behavior_velocity_traffic_light_module/package.xml b/planning/autoware_behavior_velocity_traffic_light_module/package.xml index 7b86199c497f1..4d011050a8675 100644 --- a/planning/autoware_behavior_velocity_traffic_light_module/package.xml +++ b/planning/autoware_behavior_velocity_traffic_light_module/package.xml @@ -22,13 +22,13 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_route_handler eigen geometry_msgs lanelet2_extension motion_utils pluginlib rclcpp - route_handler tf2 tf2_eigen tf2_geometry_msgs diff --git a/planning/autoware_behavior_velocity_virtual_traffic_light_module/package.xml b/planning/autoware_behavior_velocity_virtual_traffic_light_module/package.xml index 415dcd983a8df..7bec0b7fa9c01 100644 --- a/planning/autoware_behavior_velocity_virtual_traffic_light_module/package.xml +++ b/planning/autoware_behavior_velocity_virtual_traffic_light_module/package.xml @@ -19,6 +19,7 @@ autoware_adapi_v1_msgs autoware_behavior_velocity_planner_common autoware_planning_msgs + autoware_route_handler autoware_vehicle_info_utils geometry_msgs lanelet2_extension @@ -26,7 +27,6 @@ nlohmann-json-dev pluginlib rclcpp - route_handler tier4_autoware_utils tier4_planning_msgs tier4_v2x_msgs diff --git a/planning/autoware_behavior_velocity_walkway_module/package.xml b/planning/autoware_behavior_velocity_walkway_module/package.xml index 60ef7593ab8ff..08d36b1677c27 100644 --- a/planning/autoware_behavior_velocity_walkway_module/package.xml +++ b/planning/autoware_behavior_velocity_walkway_module/package.xml @@ -19,6 +19,7 @@ autoware_behavior_velocity_planner_common autoware_planning_msgs + autoware_route_handler autoware_vehicle_info_utils behavior_velocity_crosswalk_module geometry_msgs @@ -27,7 +28,6 @@ motion_utils pluginlib rclcpp - route_handler tier4_autoware_utils visualization_msgs diff --git a/planning/autoware_freespace_planner/include/autoware_freespace_planner/freespace_planner_node.hpp b/planning/autoware_freespace_planner/include/autoware_freespace_planner/freespace_planner_node.hpp index 2084d8a3aad24..0606d1d2bb369 100644 --- a/planning/autoware_freespace_planner/include/autoware_freespace_planner/freespace_planner_node.hpp +++ b/planning/autoware_freespace_planner/include/autoware_freespace_planner/freespace_planner_node.hpp @@ -52,7 +52,7 @@ #include #endif -#include +#include #include #include @@ -140,7 +140,7 @@ class FreespacePlannerNode : public rclcpp::Node OccupancyGrid::ConstSharedPtr occupancy_grid_; Scenario::ConstSharedPtr scenario_; Odometry::ConstSharedPtr odom_; - std::shared_ptr route_handler_; + std::shared_ptr route_handler_; std::deque odom_buffer_; diff --git a/planning/autoware_freespace_planner/package.xml b/planning/autoware_freespace_planner/package.xml index 8a2ecad429f1b..a5ed76d7d27b6 100644 --- a/planning/autoware_freespace_planner/package.xml +++ b/planning/autoware_freespace_planner/package.xml @@ -18,13 +18,13 @@ autoware_freespace_planning_algorithms autoware_planning_msgs autoware_planning_test_manager + autoware_route_handler autoware_vehicle_info_utils geometry_msgs motion_utils nav_msgs rclcpp rclcpp_components - route_handler tf2 tf2_geometry_msgs tf2_ros diff --git a/planning/autoware_mission_planner/package.xml b/planning/autoware_mission_planner/package.xml index 84b84971329d1..0a0491e75dd95 100644 --- a/planning/autoware_mission_planner/package.xml +++ b/planning/autoware_mission_planner/package.xml @@ -20,6 +20,7 @@ autoware_adapi_v1_msgs autoware_map_msgs autoware_planning_msgs + autoware_route_handler autoware_vehicle_info_utils geometry_msgs lanelet2_extension @@ -27,7 +28,6 @@ pluginlib rclcpp rclcpp_components - route_handler tf2_geometry_msgs tf2_ros tier4_autoware_utils diff --git a/planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.hpp b/planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.hpp index 6ca47c98b435b..cf69475e89869 100644 --- a/planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.hpp +++ b/planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.hpp @@ -15,10 +15,10 @@ #ifndef LANELET2_PLUGINS__DEFAULT_PLANNER_HPP_ #define LANELET2_PLUGINS__DEFAULT_PLANNER_HPP_ +#include #include #include #include -#include #include #include @@ -58,7 +58,7 @@ class DefaultPlanner : public mission_planner::PlannerPlugin using RouteSections = std::vector; using Pose = geometry_msgs::msg::Pose; bool is_graph_ready_; - route_handler::RouteHandler route_handler_; + autoware::route_handler::RouteHandler route_handler_; DefaultPlannerParameters param_; diff --git a/planning/autoware_mission_planner/src/lanelet2_plugins/utility_functions.cpp b/planning/autoware_mission_planner/src/lanelet2_plugins/utility_functions.cpp index e7797946aa619..1f3b2077cc5eb 100644 --- a/planning/autoware_mission_planner/src/lanelet2_plugins/utility_functions.cpp +++ b/planning/autoware_mission_planner/src/lanelet2_plugins/utility_functions.cpp @@ -42,7 +42,8 @@ void insert_marker_array( } lanelet::ConstLanelet combine_lanelets_with_shoulder( - const lanelet::ConstLanelets & lanelets, const route_handler::RouteHandler & route_handler) + const lanelet::ConstLanelets & lanelets, + const autoware::route_handler::RouteHandler & route_handler) { lanelet::Points3d lefts; lanelet::Points3d rights; diff --git a/planning/autoware_mission_planner/src/lanelet2_plugins/utility_functions.hpp b/planning/autoware_mission_planner/src/lanelet2_plugins/utility_functions.hpp index ed8dbfed63bfe..c3bed03ac6512 100644 --- a/planning/autoware_mission_planner/src/lanelet2_plugins/utility_functions.hpp +++ b/planning/autoware_mission_planner/src/lanelet2_plugins/utility_functions.hpp @@ -15,9 +15,9 @@ #ifndef LANELET2_PLUGINS__UTILITY_FUNCTIONS_HPP_ #define LANELET2_PLUGINS__UTILITY_FUNCTIONS_HPP_ +#include #include #include -#include #include #include @@ -54,7 +54,8 @@ void insert_marker_array( * @param route_handler route handler to query the lanelet map */ lanelet::ConstLanelet combine_lanelets_with_shoulder( - const lanelet::ConstLanelets & lanelets, const route_handler::RouteHandler & route_handler); + const lanelet::ConstLanelets & lanelets, + const autoware::route_handler::RouteHandler & route_handler); std::vector convertCenterlineToPoints(const lanelet::Lanelet & lanelet); geometry_msgs::msg::Pose convertBasicPoint3dToPose( diff --git a/planning/autoware_mission_planner/src/mission_planner/mission_planner.hpp b/planning/autoware_mission_planner/src/mission_planner/mission_planner.hpp index 3bdac1e75f9c4..9f3dc7d98c41c 100644 --- a/planning/autoware_mission_planner/src/mission_planner/mission_planner.hpp +++ b/planning/autoware_mission_planner/src/mission_planner/mission_planner.hpp @@ -17,10 +17,10 @@ #include "arrival_checker.hpp" +#include #include #include #include -#include #include #include diff --git a/planning/autoware_planning_test_manager/include/autoware_planning_test_manager/autoware_planning_test_manager_utils.hpp b/planning/autoware_planning_test_manager/include/autoware_planning_test_manager/autoware_planning_test_manager_utils.hpp index 63474c5e458cd..2f7116c162334 100644 --- a/planning/autoware_planning_test_manager/include/autoware_planning_test_manager/autoware_planning_test_manager_utils.hpp +++ b/planning/autoware_planning_test_manager/include/autoware_planning_test_manager/autoware_planning_test_manager_utils.hpp @@ -14,8 +14,8 @@ #ifndef AUTOWARE_PLANNING_TEST_MANAGER__AUTOWARE_PLANNING_TEST_MANAGER_UTILS_HPP_ #define AUTOWARE_PLANNING_TEST_MANAGER__AUTOWARE_PLANNING_TEST_MANAGER_UTILS_HPP_ +#include #include -#include #include #include @@ -26,10 +26,10 @@ namespace autoware_planning_test_manager::utils { +using autoware::route_handler::RouteHandler; using autoware_planning_msgs::msg::LaneletRoute; using geometry_msgs::msg::Pose; using nav_msgs::msg::Odometry; -using route_handler::RouteHandler; using RouteSections = std::vector; Pose createPoseFromLaneID(const lanelet::Id & lane_id) diff --git a/planning/autoware_planning_test_manager/package.xml b/planning/autoware_planning_test_manager/package.xml index 3170ff5f854b9..ed47594295776 100644 --- a/planning/autoware_planning_test_manager/package.xml +++ b/planning/autoware_planning_test_manager/package.xml @@ -17,6 +17,7 @@ autoware_map_msgs autoware_perception_msgs autoware_planning_msgs + autoware_route_handler autoware_vehicle_msgs component_interface_specs component_interface_utils @@ -26,7 +27,6 @@ nav_msgs planning_test_utils rclcpp - route_handler tf2_msgs tf2_ros tier4_api_msgs diff --git a/planning/autoware_remaining_distance_time_calculator/package.xml b/planning/autoware_remaining_distance_time_calculator/package.xml index 4f0324b23f299..3a0aeb8d8c981 100644 --- a/planning/autoware_remaining_distance_time_calculator/package.xml +++ b/planning/autoware_remaining_distance_time_calculator/package.xml @@ -13,6 +13,7 @@ autoware_internal_msgs autoware_planning_msgs + autoware_route_handler geometry_msgs lanelet2_extension motion_utils @@ -20,7 +21,6 @@ planning_test_utils rclcpp rclcpp_components - route_handler std_msgs tier4_autoware_utils tier4_planning_msgs diff --git a/planning/autoware_remaining_distance_time_calculator/src/remaining_distance_time_calculator_node.hpp b/planning/autoware_remaining_distance_time_calculator/src/remaining_distance_time_calculator_node.hpp index c87c397bd07aa..19c5581d26b9d 100644 --- a/planning/autoware_remaining_distance_time_calculator/src/remaining_distance_time_calculator_node.hpp +++ b/planning/autoware_remaining_distance_time_calculator/src/remaining_distance_time_calculator_node.hpp @@ -15,8 +15,8 @@ #ifndef REMAINING_DISTANCE_TIME_CALCULATOR_NODE_HPP_ #define REMAINING_DISTANCE_TIME_CALCULATOR_NODE_HPP_ +#include #include -#include #include #include diff --git a/planning/route_handler/CMakeLists.txt b/planning/autoware_route_handler/CMakeLists.txt similarity index 53% rename from planning/route_handler/CMakeLists.txt rename to planning/autoware_route_handler/CMakeLists.txt index 414489e899fff..66280affb0c10 100644 --- a/planning/route_handler/CMakeLists.txt +++ b/planning/autoware_route_handler/CMakeLists.txt @@ -1,19 +1,19 @@ cmake_minimum_required(VERSION 3.14) -project(route_handler) +project(autoware_route_handler) find_package(autoware_cmake REQUIRED) autoware_package() -ament_auto_add_library(route_handler SHARED +ament_auto_add_library(${PROJECT_NAME} SHARED src/route_handler.cpp ) if(BUILD_TESTING) - ament_add_ros_isolated_gtest(test_route_handler + ament_add_ros_isolated_gtest(test_autoware_route_handler test/test_route_handler.cpp) - target_link_libraries(test_route_handler - route_handler + target_link_libraries(test_autoware_route_handler + ${PROJECT_NAME} ) endif() diff --git a/planning/route_handler/README.md b/planning/autoware_route_handler/README.md similarity index 100% rename from planning/route_handler/README.md rename to planning/autoware_route_handler/README.md diff --git a/planning/route_handler/images/lane_change_test_route.svg b/planning/autoware_route_handler/images/lane_change_test_route.svg similarity index 100% rename from planning/route_handler/images/lane_change_test_route.svg rename to planning/autoware_route_handler/images/lane_change_test_route.svg diff --git a/planning/route_handler/images/route_handler_test.svg b/planning/autoware_route_handler/images/route_handler_test.svg similarity index 100% rename from planning/route_handler/images/route_handler_test.svg rename to planning/autoware_route_handler/images/route_handler_test.svg diff --git a/planning/route_handler/include/route_handler/route_handler.hpp b/planning/autoware_route_handler/include/autoware_route_handler/route_handler.hpp similarity index 98% rename from planning/route_handler/include/route_handler/route_handler.hpp rename to planning/autoware_route_handler/include/autoware_route_handler/route_handler.hpp index d692337b10bd6..5d7c78e0c1976 100644 --- a/planning/route_handler/include/route_handler/route_handler.hpp +++ b/planning/autoware_route_handler/include/autoware_route_handler/route_handler.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef ROUTE_HANDLER__ROUTE_HANDLER_HPP_ -#define ROUTE_HANDLER__ROUTE_HANDLER_HPP_ +#ifndef AUTOWARE_ROUTE_HANDLER__ROUTE_HANDLER_HPP_ +#define AUTOWARE_ROUTE_HANDLER__ROUTE_HANDLER_HPP_ #include @@ -35,7 +35,7 @@ #include #include -namespace route_handler +namespace autoware::route_handler { using autoware_map_msgs::msg::LaneletMapBin; using autoware_planning_msgs::msg::LaneletRoute; @@ -418,5 +418,5 @@ class RoutingCostDrivable : public lanelet::routing::RoutingCostDistance return lanelet::routing::RoutingCostDistance::getCostLaneChange(trafficRules, from, to); } }; // class RoutingCostDrivable -} // namespace route_handler -#endif // ROUTE_HANDLER__ROUTE_HANDLER_HPP_ +} // namespace autoware::route_handler +#endif // AUTOWARE_ROUTE_HANDLER__ROUTE_HANDLER_HPP_ diff --git a/planning/route_handler/package.xml b/planning/autoware_route_handler/package.xml similarity index 97% rename from planning/route_handler/package.xml rename to planning/autoware_route_handler/package.xml index 8be6707e933d7..48b1b055b2157 100644 --- a/planning/route_handler/package.xml +++ b/planning/autoware_route_handler/package.xml @@ -1,7 +1,7 @@ - route_handler + autoware_route_handler 0.1.0 The route_handling package Fumiya Watanabe diff --git a/planning/route_handler/src/route_handler.cpp b/planning/autoware_route_handler/src/route_handler.cpp similarity index 99% rename from planning/route_handler/src/route_handler.cpp rename to planning/autoware_route_handler/src/route_handler.cpp index 1fd0dd7747e49..213cca3bd5d80 100644 --- a/planning/route_handler/src/route_handler.cpp +++ b/planning/autoware_route_handler/src/route_handler.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "route_handler/route_handler.hpp" +#include "autoware_route_handler/route_handler.hpp" #include #include @@ -42,7 +42,7 @@ #include #include -namespace route_handler +namespace autoware::route_handler { namespace { @@ -2174,4 +2174,4 @@ std::optional RouteHandler::findDrivableLanePath( if (route) return route->shortestPath(); return {}; } -} // namespace route_handler +} // namespace autoware::route_handler diff --git a/planning/route_handler/test/test_route_handler.cpp b/planning/autoware_route_handler/test/test_route_handler.cpp similarity index 98% rename from planning/route_handler/test/test_route_handler.cpp rename to planning/autoware_route_handler/test/test_route_handler.cpp index 212fc0ce84d89..5ee8aa8034abd 100644 --- a/planning/route_handler/test/test_route_handler.cpp +++ b/planning/autoware_route_handler/test/test_route_handler.cpp @@ -18,7 +18,7 @@ #include -namespace route_handler::test +namespace autoware::route_handler::test { TEST_F(TestRouteHandler, isRouteHandlerReadyTest) { @@ -107,4 +107,4 @@ TEST_F(TestRouteHandler, getGoalLaneId) // ASSERT_TRUE(closest_lane_obtained5); // ASSERT_EQ(closest_lane.id(), 4424); // } -} // namespace route_handler::test +} // namespace autoware::route_handler::test diff --git a/planning/route_handler/test/test_route_handler.hpp b/planning/autoware_route_handler/test/test_route_handler.hpp similarity index 94% rename from planning/route_handler/test/test_route_handler.hpp rename to planning/autoware_route_handler/test/test_route_handler.hpp index 9f9fba717a4aa..bc557a82b196d 100644 --- a/planning/route_handler/test/test_route_handler.hpp +++ b/planning/autoware_route_handler/test/test_route_handler.hpp @@ -20,13 +20,13 @@ #include "planning_test_utils/mock_data_parser.hpp" #include "planning_test_utils/planning_test_utils.hpp" +#include #include #include #include #include #include #include -#include #include @@ -34,7 +34,7 @@ #include #include -namespace route_handler::test +namespace autoware::route_handler::test { using autoware_map_msgs::msg::LaneletMapBin; @@ -68,6 +68,6 @@ class TestRouteHandler : public ::testing::Test std::shared_ptr route_handler_; }; -} // namespace route_handler::test +} // namespace autoware::route_handler::test #endif // TEST_ROUTE_HANDLER_HPP_ diff --git a/planning/route_handler/test_route/lane_change_test_route.yaml b/planning/autoware_route_handler/test_route/lane_change_test_route.yaml similarity index 100% rename from planning/route_handler/test_route/lane_change_test_route.yaml rename to planning/autoware_route_handler/test_route/lane_change_test_route.yaml diff --git a/planning/autoware_scenario_selector/include/autoware_scenario_selector/node.hpp b/planning/autoware_scenario_selector/include/autoware_scenario_selector/node.hpp index 5551db45bba37..5abf9d8c8c732 100644 --- a/planning/autoware_scenario_selector/include/autoware_scenario_selector/node.hpp +++ b/planning/autoware_scenario_selector/include/autoware_scenario_selector/node.hpp @@ -34,7 +34,7 @@ #else #include #endif -#include +#include #include #include @@ -91,7 +91,7 @@ class ScenarioSelectorNode : public rclcpp::Node std::shared_ptr lanelet_map_ptr_; std::shared_ptr routing_graph_ptr_; std::shared_ptr traffic_rules_ptr_; - std::shared_ptr route_handler_; + std::shared_ptr route_handler_; std::unique_ptr published_time_publisher_; // Parameters diff --git a/planning/autoware_scenario_selector/package.xml b/planning/autoware_scenario_selector/package.xml index ee58eac35c8ae..03a0e92b5a33f 100644 --- a/planning/autoware_scenario_selector/package.xml +++ b/planning/autoware_scenario_selector/package.xml @@ -19,11 +19,11 @@ autoware_map_msgs autoware_planning_msgs autoware_planning_test_manager + autoware_route_handler lanelet2_extension nav_msgs rclcpp rclcpp_components - route_handler tf2 tf2_geometry_msgs tf2_ros diff --git a/planning/autoware_scenario_selector/src/node.cpp b/planning/autoware_scenario_selector/src/node.cpp index 1f1a22cf08deb..c4d9f809556b0 100644 --- a/planning/autoware_scenario_selector/src/node.cpp +++ b/planning/autoware_scenario_selector/src/node.cpp @@ -191,7 +191,7 @@ void ScenarioSelectorNode::onMap(const autoware_map_msgs::msg::LaneletMapBin::Co lanelet_map_ptr_ = std::make_shared(); lanelet::utils::conversion::fromBinMsg( *msg, lanelet_map_ptr_, &traffic_rules_ptr_, &routing_graph_ptr_); - route_handler_ = std::make_shared(*msg); + route_handler_ = std::make_shared(*msg); } void ScenarioSelectorNode::onRoute( diff --git a/planning/autoware_static_centerline_generator/package.xml b/planning/autoware_static_centerline_generator/package.xml index 29a145d21db43..efa500b66f914 100644 --- a/planning/autoware_static_centerline_generator/package.xml +++ b/planning/autoware_static_centerline_generator/package.xml @@ -22,6 +22,7 @@ autoware_path_smoother autoware_perception_msgs autoware_planning_msgs + autoware_route_handler autoware_vehicle_info_utils geography_utils geometry_msgs @@ -34,7 +35,6 @@ osqp_interface rclcpp rclcpp_components - route_handler tier4_autoware_utils tier4_map_msgs diff --git a/planning/autoware_static_centerline_generator/src/type_alias.hpp b/planning/autoware_static_centerline_generator/src/type_alias.hpp index d40e519ef2704..1eb5aa516f3b9 100644 --- a/planning/autoware_static_centerline_generator/src/type_alias.hpp +++ b/planning/autoware_static_centerline_generator/src/type_alias.hpp @@ -14,7 +14,7 @@ #ifndef TYPE_ALIAS_HPP_ #define TYPE_ALIAS_HPP_ -#include "route_handler/route_handler.hpp" +#include "autoware_route_handler/route_handler.hpp" #include "tier4_autoware_utils/geometry/geometry.hpp" #include "autoware_map_msgs/msg/lanelet_map_bin.hpp" @@ -28,6 +28,7 @@ namespace autoware::static_centerline_generator { +using autoware::route_handler::RouteHandler; using autoware_map_msgs::msg::LaneletMapBin; using autoware_perception_msgs::msg::PredictedObjects; using autoware_planning_msgs::msg::LaneletRoute; @@ -35,7 +36,6 @@ using autoware_planning_msgs::msg::Path; using autoware_planning_msgs::msg::PathPoint; using autoware_planning_msgs::msg::Trajectory; using autoware_planning_msgs::msg::TrajectoryPoint; -using route_handler::RouteHandler; using tier4_autoware_utils::LinearRing2d; using tier4_autoware_utils::LineString2d; using tier4_autoware_utils::Point2d; diff --git a/planning/autoware_static_centerline_generator/src/utils.hpp b/planning/autoware_static_centerline_generator/src/utils.hpp index 1d7eb1f18cc44..8b7347f84701a 100644 --- a/planning/autoware_static_centerline_generator/src/utils.hpp +++ b/planning/autoware_static_centerline_generator/src/utils.hpp @@ -15,7 +15,7 @@ #ifndef UTILS_HPP_ #define UTILS_HPP_ -#include "route_handler/route_handler.hpp" +#include "autoware_route_handler/route_handler.hpp" #include "type_alias.hpp" #include diff --git a/planning/behavior_path_sampling_planner_module/package.xml b/planning/behavior_path_sampling_planner_module/package.xml index c48f3240ab84d..60924027fb4c0 100644 --- a/planning/behavior_path_sampling_planner_module/package.xml +++ b/planning/behavior_path_sampling_planner_module/package.xml @@ -20,6 +20,7 @@ autoware_perception_msgs autoware_planning_msgs autoware_planning_test_manager + autoware_route_handler autoware_vehicle_info_utils autoware_vehicle_msgs geometry_msgs @@ -29,7 +30,6 @@ pluginlib rclcpp rclcpp_components - route_handler sensor_msgs signal_processing tf2 diff --git a/planning/behavior_velocity_crosswalk_module/package.xml b/planning/behavior_velocity_crosswalk_module/package.xml index 87ccdebd02fcf..d1c23618003f8 100644 --- a/planning/behavior_velocity_crosswalk_module/package.xml +++ b/planning/behavior_velocity_crosswalk_module/package.xml @@ -24,6 +24,7 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_route_handler autoware_vehicle_info_utils eigen geometry_msgs @@ -38,7 +39,6 @@ pcl_conversions pluginlib rclcpp - route_handler sensor_msgs tier4_api_msgs tier4_autoware_utils diff --git a/planning/behavior_velocity_detection_area_module/package.xml b/planning/behavior_velocity_detection_area_module/package.xml index b2d370380829a..363251b9b5ef8 100644 --- a/planning/behavior_velocity_detection_area_module/package.xml +++ b/planning/behavior_velocity_detection_area_module/package.xml @@ -19,6 +19,7 @@ autoware_behavior_velocity_planner_common autoware_planning_msgs + autoware_route_handler eigen geometry_msgs lanelet2_extension @@ -26,7 +27,6 @@ motion_utils pluginlib rclcpp - route_handler tf2 tf2_eigen tf2_geometry_msgs diff --git a/planning/behavior_velocity_dynamic_obstacle_stop_module/package.xml b/planning/behavior_velocity_dynamic_obstacle_stop_module/package.xml index f25ded5e1823c..bdf842b4fa55f 100644 --- a/planning/behavior_velocity_dynamic_obstacle_stop_module/package.xml +++ b/planning/behavior_velocity_dynamic_obstacle_stop_module/package.xml @@ -15,13 +15,13 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_route_handler autoware_vehicle_info_utils geometry_msgs libboost-dev motion_utils pluginlib rclcpp - route_handler tf2 tier4_autoware_utils tier4_planning_msgs diff --git a/planning/behavior_velocity_no_drivable_lane_module/package.xml b/planning/behavior_velocity_no_drivable_lane_module/package.xml index 4c3d6dbf78153..f728167f09f23 100644 --- a/planning/behavior_velocity_no_drivable_lane_module/package.xml +++ b/planning/behavior_velocity_no_drivable_lane_module/package.xml @@ -21,6 +21,7 @@ autoware_behavior_velocity_planner_common autoware_planning_msgs + autoware_route_handler eigen geometry_msgs lanelet2_extension @@ -28,7 +29,6 @@ motion_utils pluginlib rclcpp - route_handler sensor_msgs tf2 tier4_autoware_utils diff --git a/planning/behavior_velocity_no_stopping_area_module/package.xml b/planning/behavior_velocity_no_stopping_area_module/package.xml index 97b3b01ee31e1..0728c02348bc0 100644 --- a/planning/behavior_velocity_no_stopping_area_module/package.xml +++ b/planning/behavior_velocity_no_stopping_area_module/package.xml @@ -20,6 +20,7 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_route_handler autoware_vehicle_info_utils eigen geometry_msgs @@ -29,7 +30,6 @@ motion_utils pluginlib rclcpp - route_handler tf2 tf2_eigen tf2_geometry_msgs diff --git a/planning/behavior_velocity_speed_bump_module/package.xml b/planning/behavior_velocity_speed_bump_module/package.xml index 62e215951757d..491e8704bef41 100644 --- a/planning/behavior_velocity_speed_bump_module/package.xml +++ b/planning/behavior_velocity_speed_bump_module/package.xml @@ -17,6 +17,7 @@ autoware_behavior_velocity_planner_common autoware_planning_msgs + autoware_route_handler eigen geometry_msgs lanelet2_extension @@ -24,7 +25,6 @@ motion_utils pluginlib rclcpp - route_handler sensor_msgs tf2 tier4_autoware_utils diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/package.xml b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/package.xml index a6176555ae7af..8dab409b48ad5 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/package.xml +++ b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/package.xml @@ -17,6 +17,7 @@ autoware_motion_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_route_handler autoware_vehicle_info_utils geometry_msgs lanelet2_extension @@ -24,7 +25,6 @@ motion_utils pluginlib rclcpp - route_handler tf2 tier4_autoware_utils tier4_planning_msgs diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/decisions.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/decisions.hpp index e691f2893dab9..09aa91b6b5565 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/decisions.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/decisions.hpp @@ -17,8 +17,8 @@ #include "types.hpp" +#include #include -#include #include diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/lanelets_selection.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/lanelets_selection.hpp index c7351f0a98e89..e9ccadcdde800 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/lanelets_selection.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/lanelets_selection.hpp @@ -17,7 +17,7 @@ #include "types.hpp" -#include +#include #include diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/types.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/types.hpp index 4fce13582aa1e..113c5f2580c2f 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/types.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/types.hpp @@ -15,7 +15,7 @@ #ifndef TYPES_HPP_ #define TYPES_HPP_ -#include +#include #include #include diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp index a25ab5d55a910..494deae1d060c 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/include/autoware_motion_velocity_planner_common/planner_data.hpp @@ -15,9 +15,9 @@ #ifndef AUTOWARE_MOTION_VELOCITY_PLANNER_COMMON__PLANNER_DATA_HPP_ #define AUTOWARE_MOTION_VELOCITY_PLANNER_COMMON__PLANNER_DATA_HPP_ +#include #include #include -#include #include #include diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/package.xml b/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/package.xml index a115d28ee6d86..7c1d370ae0ced 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/package.xml +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_common/package.xml @@ -18,6 +18,7 @@ autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs + autoware_route_handler autoware_velocity_smoother eigen geometry_msgs @@ -25,7 +26,6 @@ libboost-dev motion_utils rclcpp - route_handler tier4_autoware_utils tier4_planning_msgs visualization_msgs From afc129e98554c1499a80862f6f27235154059c23 Mon Sep 17 00:00:00 2001 From: mkquda <168697710+mkquda@users.noreply.github.com> Date: Tue, 11 Jun 2024 09:55:50 +0900 Subject: [PATCH 096/142] refactor(trajectory_follower_base): trajectory follower base add autoware prefix (#7343) * rename trajectory follower base package Signed-off-by: mohammad alqudah * update dependencies and includes Signed-off-by: mohammad alqudah * fix formats Signed-off-by: mohammad alqudah --------- Signed-off-by: mohammad alqudah --- .github/CODEOWNERS | 2 +- .../mpc_lateral_controller.hpp | 2 +- control/autoware_mpc_lateral_controller/package.xml | 2 +- .../pid_longitudinal_controller.hpp | 2 +- .../autoware_pid_longitudinal_controller/package.xml | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../autoware_trajectory_follower_base}/input_data.hpp | 6 +++--- .../lateral_controller_base.hpp | 10 +++++----- .../longitudinal_controller_base.hpp | 10 +++++----- .../autoware_trajectory_follower_base}/sync_data.hpp | 6 +++--- .../visibility_control.hpp | 6 +++--- .../package.xml | 2 +- .../src/lateral_controller_base.cpp | 2 +- .../src/longitudinal_controller_base.cpp | 2 +- .../pure_pursuit/pure_pursuit_lateral_controller.hpp | 2 +- control/pure_pursuit/package.xml | 2 +- control/trajectory_follower_node/README.md | 4 ++-- .../trajectory_follower_node/controller_node.hpp | 4 ++-- control/trajectory_follower_node/package.xml | 2 +- 20 files changed, 35 insertions(+), 35 deletions(-) rename control/{trajectory_follower_base => autoware_trajectory_follower_base}/CMakeLists.txt (84%) rename control/{trajectory_follower_base => autoware_trajectory_follower_base}/README.md (100%) rename control/{trajectory_follower_base/include/trajectory_follower_base => autoware_trajectory_follower_base/include/autoware_trajectory_follower_base}/input_data.hpp (88%) rename control/{trajectory_follower_base/include/trajectory_follower_base => autoware_trajectory_follower_base/include/autoware_trajectory_follower_base}/lateral_controller_base.hpp (78%) rename control/{trajectory_follower_base/include/trajectory_follower_base => autoware_trajectory_follower_base/include/autoware_trajectory_follower_base}/longitudinal_controller_base.hpp (79%) rename control/{trajectory_follower_base/include/trajectory_follower_base => autoware_trajectory_follower_base/include/autoware_trajectory_follower_base}/sync_data.hpp (83%) rename control/{trajectory_follower_base/include/trajectory_follower_base => autoware_trajectory_follower_base/include/autoware_trajectory_follower_base}/visibility_control.hpp (88%) rename control/{trajectory_follower_base => autoware_trajectory_follower_base}/package.xml (97%) rename control/{trajectory_follower_base => autoware_trajectory_follower_base}/src/lateral_controller_base.cpp (92%) rename control/{trajectory_follower_base => autoware_trajectory_follower_base}/src/longitudinal_controller_base.cpp (92%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a2eeab9422b79..15d84dd1a97a0 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -58,7 +58,7 @@ control/predicted_path_checker/** berkay@leodrive.ai control/pure_pursuit/** takamasa.horibe@tier4.jp control/shift_decider/** takamasa.horibe@tier4.jp control/autoware_smart_mpc_trajectory_follower/** masayuki.aino@proxima-ai-tech.com -control/trajectory_follower_base/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +control/autoware_trajectory_follower_base/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/trajectory_follower_node/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/autoware_vehicle_cmd_gate/** takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp evaluator/control_evaluator/** daniel.sanchez@tier4.jp takayuki.murooka@tier4.jp diff --git a/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc_lateral_controller.hpp b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc_lateral_controller.hpp index e0775e1d09def..50ab923f5b4d6 100644 --- a/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc_lateral_controller.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware_mpc_lateral_controller/mpc_lateral_controller.hpp @@ -19,8 +19,8 @@ #include "autoware_mpc_lateral_controller/mpc_trajectory.hpp" #include "autoware_mpc_lateral_controller/mpc_utils.hpp" #include "autoware_mpc_lateral_controller/steering_offset/steering_offset.hpp" +#include "autoware_trajectory_follower_base/lateral_controller_base.hpp" #include "rclcpp/rclcpp.hpp" -#include "trajectory_follower_base/lateral_controller_base.hpp" #include "autoware_control_msgs/msg/lateral.hpp" #include "autoware_planning_msgs/msg/trajectory.hpp" diff --git a/control/autoware_mpc_lateral_controller/package.xml b/control/autoware_mpc_lateral_controller/package.xml index 673d9d7896745..1e250dd89ce3f 100644 --- a/control/autoware_mpc_lateral_controller/package.xml +++ b/control/autoware_mpc_lateral_controller/package.xml @@ -19,6 +19,7 @@ autoware_control_msgs autoware_planning_msgs + autoware_trajectory_follower_base autoware_vehicle_info_utils autoware_vehicle_msgs diagnostic_msgs @@ -35,7 +36,6 @@ tf2_ros tier4_autoware_utils tier4_debug_msgs - trajectory_follower_base ament_cmake_ros ament_lint_auto diff --git a/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp index 08a6a51d3098b..98882509aaceb 100644 --- a/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp +++ b/control/autoware_pid_longitudinal_controller/include/autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp @@ -20,6 +20,7 @@ #include "autoware_pid_longitudinal_controller/lowpass_filter.hpp" #include "autoware_pid_longitudinal_controller/pid.hpp" #include "autoware_pid_longitudinal_controller/smooth_stop.hpp" +#include "autoware_trajectory_follower_base/longitudinal_controller_base.hpp" #include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "diagnostic_updater/diagnostic_updater.hpp" #include "rclcpp/rclcpp.hpp" @@ -27,7 +28,6 @@ #include "tf2_ros/buffer.h" #include "tf2_ros/transform_listener.h" #include "tier4_autoware_utils/ros/marker_helper.hpp" -#include "trajectory_follower_base/longitudinal_controller_base.hpp" #include #include diff --git a/control/autoware_pid_longitudinal_controller/package.xml b/control/autoware_pid_longitudinal_controller/package.xml index 66f6a6dfcda8b..a84083eae2725 100644 --- a/control/autoware_pid_longitudinal_controller/package.xml +++ b/control/autoware_pid_longitudinal_controller/package.xml @@ -21,6 +21,7 @@ autoware_adapi_v1_msgs autoware_control_msgs autoware_planning_msgs + autoware_trajectory_follower_base autoware_vehicle_info_utils autoware_vehicle_msgs diagnostic_msgs @@ -36,7 +37,6 @@ tf2_ros tier4_autoware_utils tier4_debug_msgs - trajectory_follower_base ament_cmake_ros ament_lint_auto diff --git a/control/trajectory_follower_base/CMakeLists.txt b/control/autoware_trajectory_follower_base/CMakeLists.txt similarity index 84% rename from control/trajectory_follower_base/CMakeLists.txt rename to control/autoware_trajectory_follower_base/CMakeLists.txt index 98f86e468e819..74916a3d2e22f 100644 --- a/control/trajectory_follower_base/CMakeLists.txt +++ b/control/autoware_trajectory_follower_base/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(trajectory_follower_base) +project(autoware_trajectory_follower_base) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/control/trajectory_follower_base/README.md b/control/autoware_trajectory_follower_base/README.md similarity index 100% rename from control/trajectory_follower_base/README.md rename to control/autoware_trajectory_follower_base/README.md diff --git a/control/trajectory_follower_base/include/trajectory_follower_base/input_data.hpp b/control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/input_data.hpp similarity index 88% rename from control/trajectory_follower_base/include/trajectory_follower_base/input_data.hpp rename to control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/input_data.hpp index 665a8604214dd..679f6334b7187 100644 --- a/control/trajectory_follower_base/include/trajectory_follower_base/input_data.hpp +++ b/control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/input_data.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAJECTORY_FOLLOWER_BASE__INPUT_DATA_HPP_ -#define TRAJECTORY_FOLLOWER_BASE__INPUT_DATA_HPP_ +#ifndef AUTOWARE_TRAJECTORY_FOLLOWER_BASE__INPUT_DATA_HPP_ +#define AUTOWARE_TRAJECTORY_FOLLOWER_BASE__INPUT_DATA_HPP_ #include "autoware_adapi_v1_msgs/msg/operation_mode_state.hpp" #include "autoware_planning_msgs/msg/trajectory.hpp" @@ -33,4 +33,4 @@ struct InputData }; } // namespace autoware::motion::control::trajectory_follower -#endif // TRAJECTORY_FOLLOWER_BASE__INPUT_DATA_HPP_ +#endif // AUTOWARE_TRAJECTORY_FOLLOWER_BASE__INPUT_DATA_HPP_ diff --git a/control/trajectory_follower_base/include/trajectory_follower_base/lateral_controller_base.hpp b/control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/lateral_controller_base.hpp similarity index 78% rename from control/trajectory_follower_base/include/trajectory_follower_base/lateral_controller_base.hpp rename to control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/lateral_controller_base.hpp index a70c4c18fedb3..f3501336928a3 100644 --- a/control/trajectory_follower_base/include/trajectory_follower_base/lateral_controller_base.hpp +++ b/control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/lateral_controller_base.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAJECTORY_FOLLOWER_BASE__LATERAL_CONTROLLER_BASE_HPP_ -#define TRAJECTORY_FOLLOWER_BASE__LATERAL_CONTROLLER_BASE_HPP_ +#ifndef AUTOWARE_TRAJECTORY_FOLLOWER_BASE__LATERAL_CONTROLLER_BASE_HPP_ +#define AUTOWARE_TRAJECTORY_FOLLOWER_BASE__LATERAL_CONTROLLER_BASE_HPP_ +#include "autoware_trajectory_follower_base/input_data.hpp" +#include "autoware_trajectory_follower_base/sync_data.hpp" #include "rclcpp/rclcpp.hpp" -#include "trajectory_follower_base/input_data.hpp" -#include "trajectory_follower_base/sync_data.hpp" #include "autoware_control_msgs/msg/lateral.hpp" @@ -44,4 +44,4 @@ class LateralControllerBase } // namespace autoware::motion::control::trajectory_follower -#endif // TRAJECTORY_FOLLOWER_BASE__LATERAL_CONTROLLER_BASE_HPP_ +#endif // AUTOWARE_TRAJECTORY_FOLLOWER_BASE__LATERAL_CONTROLLER_BASE_HPP_ diff --git a/control/trajectory_follower_base/include/trajectory_follower_base/longitudinal_controller_base.hpp b/control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/longitudinal_controller_base.hpp similarity index 79% rename from control/trajectory_follower_base/include/trajectory_follower_base/longitudinal_controller_base.hpp rename to control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/longitudinal_controller_base.hpp index da5381091113f..b0f715692d079 100644 --- a/control/trajectory_follower_base/include/trajectory_follower_base/longitudinal_controller_base.hpp +++ b/control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/longitudinal_controller_base.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAJECTORY_FOLLOWER_BASE__LONGITUDINAL_CONTROLLER_BASE_HPP_ -#define TRAJECTORY_FOLLOWER_BASE__LONGITUDINAL_CONTROLLER_BASE_HPP_ +#ifndef AUTOWARE_TRAJECTORY_FOLLOWER_BASE__LONGITUDINAL_CONTROLLER_BASE_HPP_ +#define AUTOWARE_TRAJECTORY_FOLLOWER_BASE__LONGITUDINAL_CONTROLLER_BASE_HPP_ +#include "autoware_trajectory_follower_base/input_data.hpp" +#include "autoware_trajectory_follower_base/sync_data.hpp" #include "rclcpp/rclcpp.hpp" -#include "trajectory_follower_base/input_data.hpp" -#include "trajectory_follower_base/sync_data.hpp" #include "autoware_control_msgs/msg/longitudinal.hpp" @@ -46,4 +46,4 @@ class LongitudinalControllerBase } // namespace autoware::motion::control::trajectory_follower -#endif // TRAJECTORY_FOLLOWER_BASE__LONGITUDINAL_CONTROLLER_BASE_HPP_ +#endif // AUTOWARE_TRAJECTORY_FOLLOWER_BASE__LONGITUDINAL_CONTROLLER_BASE_HPP_ diff --git a/control/trajectory_follower_base/include/trajectory_follower_base/sync_data.hpp b/control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/sync_data.hpp similarity index 83% rename from control/trajectory_follower_base/include/trajectory_follower_base/sync_data.hpp rename to control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/sync_data.hpp index 60c91019d10c3..6034719241430 100644 --- a/control/trajectory_follower_base/include/trajectory_follower_base/sync_data.hpp +++ b/control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/sync_data.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAJECTORY_FOLLOWER_BASE__SYNC_DATA_HPP_ -#define TRAJECTORY_FOLLOWER_BASE__SYNC_DATA_HPP_ +#ifndef AUTOWARE_TRAJECTORY_FOLLOWER_BASE__SYNC_DATA_HPP_ +#define AUTOWARE_TRAJECTORY_FOLLOWER_BASE__SYNC_DATA_HPP_ namespace autoware::motion::control::trajectory_follower { @@ -30,4 +30,4 @@ struct LongitudinalSyncData } // namespace autoware::motion::control::trajectory_follower -#endif // TRAJECTORY_FOLLOWER_BASE__SYNC_DATA_HPP_ +#endif // AUTOWARE_TRAJECTORY_FOLLOWER_BASE__SYNC_DATA_HPP_ diff --git a/control/trajectory_follower_base/include/trajectory_follower_base/visibility_control.hpp b/control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/visibility_control.hpp similarity index 88% rename from control/trajectory_follower_base/include/trajectory_follower_base/visibility_control.hpp rename to control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/visibility_control.hpp index c2419427ac961..1a50424ebec43 100644 --- a/control/trajectory_follower_base/include/trajectory_follower_base/visibility_control.hpp +++ b/control/autoware_trajectory_follower_base/include/autoware_trajectory_follower_base/visibility_control.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAJECTORY_FOLLOWER_BASE__VISIBILITY_CONTROL_HPP_ -#define TRAJECTORY_FOLLOWER_BASE__VISIBILITY_CONTROL_HPP_ +#ifndef AUTOWARE_TRAJECTORY_FOLLOWER_BASE__VISIBILITY_CONTROL_HPP_ +#define AUTOWARE_TRAJECTORY_FOLLOWER_BASE__VISIBILITY_CONTROL_HPP_ //////////////////////////////////////////////////////////////////////////////// #if defined(__WIN32) @@ -34,4 +34,4 @@ #error "Unsupported Build Configuration" #endif -#endif // TRAJECTORY_FOLLOWER_BASE__VISIBILITY_CONTROL_HPP_ +#endif // AUTOWARE_TRAJECTORY_FOLLOWER_BASE__VISIBILITY_CONTROL_HPP_ diff --git a/control/trajectory_follower_base/package.xml b/control/autoware_trajectory_follower_base/package.xml similarity index 97% rename from control/trajectory_follower_base/package.xml rename to control/autoware_trajectory_follower_base/package.xml index b36b4669be04e..283ab791c1ef9 100644 --- a/control/trajectory_follower_base/package.xml +++ b/control/autoware_trajectory_follower_base/package.xml @@ -1,7 +1,7 @@ - trajectory_follower_base + autoware_trajectory_follower_base 1.0.0 Library for generating lateral and longitudinal controls following a trajectory diff --git a/control/trajectory_follower_base/src/lateral_controller_base.cpp b/control/autoware_trajectory_follower_base/src/lateral_controller_base.cpp similarity index 92% rename from control/trajectory_follower_base/src/lateral_controller_base.cpp rename to control/autoware_trajectory_follower_base/src/lateral_controller_base.cpp index 6acdbc4a8f5eb..ce5c521089328 100644 --- a/control/trajectory_follower_base/src/lateral_controller_base.cpp +++ b/control/autoware_trajectory_follower_base/src/lateral_controller_base.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "trajectory_follower_base/lateral_controller_base.hpp" +#include "autoware_trajectory_follower_base/lateral_controller_base.hpp" namespace autoware::motion::control::trajectory_follower { diff --git a/control/trajectory_follower_base/src/longitudinal_controller_base.cpp b/control/autoware_trajectory_follower_base/src/longitudinal_controller_base.cpp similarity index 92% rename from control/trajectory_follower_base/src/longitudinal_controller_base.cpp rename to control/autoware_trajectory_follower_base/src/longitudinal_controller_base.cpp index f7779158f5791..8fac86b3883a1 100644 --- a/control/trajectory_follower_base/src/longitudinal_controller_base.cpp +++ b/control/autoware_trajectory_follower_base/src/longitudinal_controller_base.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "trajectory_follower_base/longitudinal_controller_base.hpp" +#include "autoware_trajectory_follower_base/longitudinal_controller_base.hpp" namespace autoware::motion::control::trajectory_follower { diff --git a/control/pure_pursuit/include/pure_pursuit/pure_pursuit_lateral_controller.hpp b/control/pure_pursuit/include/pure_pursuit/pure_pursuit_lateral_controller.hpp index 5b7b466dcb4dd..643a0d370a417 100644 --- a/control/pure_pursuit/include/pure_pursuit/pure_pursuit_lateral_controller.hpp +++ b/control/pure_pursuit/include/pure_pursuit/pure_pursuit_lateral_controller.hpp @@ -30,12 +30,12 @@ #ifndef PURE_PURSUIT__PURE_PURSUIT_LATERAL_CONTROLLER_HPP_ #define PURE_PURSUIT__PURE_PURSUIT_LATERAL_CONTROLLER_HPP_ +#include "autoware_trajectory_follower_base/lateral_controller_base.hpp" #include "pure_pursuit/pure_pursuit.hpp" #include "pure_pursuit/pure_pursuit_viz.hpp" #include "rclcpp/rclcpp.hpp" #include "tf2_ros/buffer.h" #include "tf2_ros/transform_listener.h" -#include "trajectory_follower_base/lateral_controller_base.hpp" #include #include diff --git a/control/pure_pursuit/package.xml b/control/pure_pursuit/package.xml index 32744d744f95f..ab3097c914b00 100644 --- a/control/pure_pursuit/package.xml +++ b/control/pure_pursuit/package.xml @@ -16,6 +16,7 @@ autoware_control_msgs autoware_planning_msgs + autoware_trajectory_follower_base autoware_vehicle_info_utils boost geometry_msgs @@ -32,7 +33,6 @@ tf2_ros tier4_autoware_utils tier4_debug_msgs - trajectory_follower_base visualization_msgs ament_lint_auto diff --git a/control/trajectory_follower_node/README.md b/control/trajectory_follower_node/README.md index 7b9e93e39fad9..1b63cd2064b29 100644 --- a/control/trajectory_follower_node/README.md +++ b/control/trajectory_follower_node/README.md @@ -6,13 +6,13 @@ Generate control commands to follow a given Trajectory. ## Design -This is a node of the functionalities implemented in the controller class derived from [trajectory_follower_base](../trajectory_follower_base/README.md#trajectory-follower) package. It has instances of those functionalities, gives them input data to perform calculations, and publishes control commands. +This is a node of the functionalities implemented in the controller class derived from [autoware_trajectory_follower_base](../autoware_trajectory_follower_base/README.md#trajectory-follower) package. It has instances of those functionalities, gives them input data to perform calculations, and publishes control commands. By default, the controller instance with the `Controller` class as follows is used. ```plantuml @startuml -package trajectory_follower_base { +package autoware_trajectory_follower_base { abstract class LateralControllerBase { longitudinal_sync_data_ diff --git a/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp b/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp index e9c69a2b2896d..beb5024a78e53 100644 --- a/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp +++ b/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp @@ -15,6 +15,8 @@ #ifndef TRAJECTORY_FOLLOWER_NODE__CONTROLLER_NODE_HPP_ #define TRAJECTORY_FOLLOWER_NODE__CONTROLLER_NODE_HPP_ +#include "autoware_trajectory_follower_base/lateral_controller_base.hpp" +#include "autoware_trajectory_follower_base/longitudinal_controller_base.hpp" #include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "rclcpp/rclcpp.hpp" #include "tf2/utils.h" @@ -23,8 +25,6 @@ #include "tier4_autoware_utils/ros/logger_level_configure.hpp" #include "tier4_autoware_utils/ros/polling_subscriber.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" -#include "trajectory_follower_base/lateral_controller_base.hpp" -#include "trajectory_follower_base/longitudinal_controller_base.hpp" #include "trajectory_follower_node/visibility_control.hpp" #include diff --git a/control/trajectory_follower_node/package.xml b/control/trajectory_follower_node/package.xml index c57a07155128a..b6d8b4bf774a9 100644 --- a/control/trajectory_follower_node/package.xml +++ b/control/trajectory_follower_node/package.xml @@ -24,6 +24,7 @@ autoware_mpc_lateral_controller autoware_pid_longitudinal_controller autoware_planning_msgs + autoware_trajectory_follower_base autoware_vehicle_info_utils autoware_vehicle_msgs motion_utils @@ -31,7 +32,6 @@ rclcpp rclcpp_components tier4_autoware_utils - trajectory_follower_base visualization_msgs ros2launch From adde8e12e440f41212fe10ae88697c64d9fdf155 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Tue, 11 Jun 2024 10:12:24 +0900 Subject: [PATCH 097/142] refactor(behavior_path_sampling_planner_module): add autoware prefix (#7392) Signed-off-by: Maxime CLEMENT --- .github/CODEOWNERS | 2 +- .../behavior_planning.launch.xml | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/sampling_planner.param.yaml | 0 .../manager.hpp | 17 ++++++++------- .../sampling_planner_module.hpp | 21 +++++++++++-------- .../sampling_planner_parameters.hpp | 10 ++++----- .../util.hpp | 17 ++++++++------- .../package.xml | 4 ++-- .../plugins.xml | 3 +++ .../src/manager.cpp | 10 ++++----- .../src/sampling_planner_module.cpp | 14 ++++++------- .../plugins.xml | 3 --- 14 files changed, 54 insertions(+), 51 deletions(-) rename planning/{behavior_path_sampling_planner_module => autoware_behavior_path_sampling_planner_module}/CMakeLists.txt (84%) rename planning/{behavior_path_sampling_planner_module => autoware_behavior_path_sampling_planner_module}/README.md (100%) rename planning/{behavior_path_sampling_planner_module => autoware_behavior_path_sampling_planner_module}/config/sampling_planner.param.yaml (100%) rename planning/{behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module => autoware_behavior_path_sampling_planner_module/include/autoware_behavior_path_sampling_planner_module}/manager.hpp (69%) rename planning/{behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module => autoware_behavior_path_sampling_planner_module/include/autoware_behavior_path_sampling_planner_module}/sampling_planner_module.hpp (93%) rename planning/{behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module => autoware_behavior_path_sampling_planner_module/include/autoware_behavior_path_sampling_planner_module}/sampling_planner_parameters.hpp (86%) rename planning/{behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module => autoware_behavior_path_sampling_planner_module/include/autoware_behavior_path_sampling_planner_module}/util.hpp (87%) rename planning/{behavior_path_sampling_planner_module => autoware_behavior_path_sampling_planner_module}/package.xml (91%) create mode 100644 planning/autoware_behavior_path_sampling_planner_module/plugins.xml rename planning/{behavior_path_sampling_planner_module => autoware_behavior_path_sampling_planner_module}/src/manager.cpp (95%) rename planning/{behavior_path_sampling_planner_module => autoware_behavior_path_sampling_planner_module}/src/sampling_planner_module.cpp (98%) delete mode 100644 planning/behavior_path_sampling_planner_module/plugins.xml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 15d84dd1a97a0..52f91f4d41a20 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -167,7 +167,7 @@ planning/autoware_velocity_smoother/** fumiya.watanabe@tier4.jp makoto.kurihara@ planning/autoware_behavior_path_goal_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_path_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/behavior_path_planner/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp -planning/behavior_path_sampling_planner_module/** daniel.sanchez@tier4.jp maxime.clement@tier4.jp +planning/autoware_behavior_path_sampling_planner_module/** daniel.sanchez@tier4.jp maxime.clement@tier4.jp planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_path_start_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml index 463740d978ca6..e52020adf3ebe 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml @@ -61,7 +61,7 @@ /> @@ -26,9 +26,10 @@ #include #include -namespace behavior_path_planner +namespace autoware::behavior_path_planner { - +using namespace ::behavior_path_planner; // NOLINT TODO(Maxime): remove once moved to autoware + // namespace class SamplingPlannerModuleManager : public SceneModuleManagerInterface { public: @@ -49,6 +50,6 @@ class SamplingPlannerModuleManager : public SceneModuleManagerInterface std::shared_ptr parameters_; }; -} // namespace behavior_path_planner +} // namespace autoware::behavior_path_planner -#endif // BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__MANAGER_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__MANAGER_HPP_ diff --git a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_module.hpp b/planning/autoware_behavior_path_sampling_planner_module/include/autoware_behavior_path_sampling_planner_module/sampling_planner_module.hpp similarity index 93% rename from planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_module.hpp rename to planning/autoware_behavior_path_sampling_planner_module/include/autoware_behavior_path_sampling_planner_module/sampling_planner_module.hpp index 5cf7b1f4e927d..227b0f62948ee 100644 --- a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_module.hpp +++ b/planning/autoware_behavior_path_sampling_planner_module/include/autoware_behavior_path_sampling_planner_module/sampling_planner_module.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_MODULE_HPP_ -#define BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_MODULE_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_MODULE_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_MODULE_HPP_ #include "autoware_behavior_path_planner_common/interface/scene_module_interface.hpp" #include "autoware_behavior_path_planner_common/marker_utils/utils.hpp" @@ -21,6 +21,8 @@ #include "autoware_behavior_path_planner_common/utils/drivable_area_expansion/static_drivable_area.hpp" #include "autoware_behavior_path_planner_common/utils/path_utils.hpp" #include "autoware_behavior_path_planner_common/utils/utils.hpp" +#include "autoware_behavior_path_sampling_planner_module/sampling_planner_parameters.hpp" +#include "autoware_behavior_path_sampling_planner_module/util.hpp" #include "autoware_bezier_sampler/bezier_sampling.hpp" #include "autoware_frenet_planner/frenet_planner.hpp" #include "autoware_sampler_common/constraints/footprint.hpp" @@ -29,8 +31,6 @@ #include "autoware_sampler_common/structures.hpp" #include "autoware_sampler_common/transform/spline_transform.hpp" #include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" -#include "behavior_path_sampling_planner_module/sampling_planner_parameters.hpp" -#include "behavior_path_sampling_planner_module/util.hpp" #include "lanelet2_extension/utility/query.hpp" #include "lanelet2_extension/utility/utilities.hpp" #include "motion_utils/trajectory/path_with_lane_id.hpp" @@ -56,8 +56,11 @@ #include #include #include -namespace behavior_path_planner +namespace autoware::behavior_path_planner { +// NOLINT +using namespace ::behavior_path_planner; // NOLINT TODO(Maxime): remove once moved to autoware + // namespace using autoware_planning_msgs::msg::TrajectoryPoint; struct SamplingPlannerData { @@ -142,8 +145,8 @@ class SamplingPlannerModule : public SceneModuleInterface } SamplingPlannerDebugData debug_data_; - behavior_path_planner::HardConstraintsFunctionVector hard_constraints_; - behavior_path_planner::SoftConstraintsFunctionVector soft_constraints_; + HardConstraintsFunctionVector hard_constraints_; + SoftConstraintsFunctionVector soft_constraints_; private: SamplingPlannerData createPlannerData( @@ -261,6 +264,6 @@ class SamplingPlannerModule : public SceneModuleInterface const std::shared_ptr & planner_data) const; }; -} // namespace behavior_path_planner +} // namespace autoware::behavior_path_planner -#endif // BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_MODULE_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_MODULE_HPP_ diff --git a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_parameters.hpp b/planning/autoware_behavior_path_sampling_planner_module/include/autoware_behavior_path_sampling_planner_module/sampling_planner_parameters.hpp similarity index 86% rename from planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_parameters.hpp rename to planning/autoware_behavior_path_sampling_planner_module/include/autoware_behavior_path_sampling_planner_module/sampling_planner_parameters.hpp index 4ddfbf436ffaf..6344af7163577 100644 --- a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/sampling_planner_parameters.hpp +++ b/planning/autoware_behavior_path_sampling_planner_module/include/autoware_behavior_path_sampling_planner_module/sampling_planner_parameters.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_PARAMETERS_HPP_ -#define BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_PARAMETERS_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_PARAMETERS_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_PARAMETERS_HPP_ #include "autoware_bezier_sampler/bezier_sampling.hpp" #include "autoware_sampler_common/structures.hpp" #include -namespace behavior_path_planner +namespace autoware::behavior_path_planner { using tier4_autoware_utils::LinearRing2d; using tier4_autoware_utils::MultiPoint2d; @@ -87,5 +87,5 @@ struct SamplingPlannerInternalParameters Sampling sampling; Preprocessing preprocessing{}; }; -} // namespace behavior_path_planner -#endif // BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_PARAMETERS_HPP_ +} // namespace autoware::behavior_path_planner +#endif // AUTOWARE_BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__SAMPLING_PLANNER_PARAMETERS_HPP_ diff --git a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/util.hpp b/planning/autoware_behavior_path_sampling_planner_module/include/autoware_behavior_path_sampling_planner_module/util.hpp similarity index 87% rename from planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/util.hpp rename to planning/autoware_behavior_path_sampling_planner_module/include/autoware_behavior_path_sampling_planner_module/util.hpp index 2825ead2a9fee..fe00419d1ffde 100644 --- a/planning/behavior_path_sampling_planner_module/include/behavior_path_sampling_planner_module/util.hpp +++ b/planning/autoware_behavior_path_sampling_planner_module/include/autoware_behavior_path_sampling_planner_module/util.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__UTIL_HPP_ -#define BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__UTIL_HPP_ +#ifndef AUTOWARE_BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__UTIL_HPP_ +#define AUTOWARE_BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__UTIL_HPP_ #include "autoware_sampler_common/structures.hpp" #include "autoware_sampler_common/transform/spline_transform.hpp" @@ -26,9 +26,10 @@ #include #include #include -namespace behavior_path_planner +namespace autoware::behavior_path_planner { - +using namespace ::behavior_path_planner; // NOLINT TODO(Maxime): remove once moved to autoware + // namespace using geometry_msgs::msg::Pose; struct SoftConstraintsInputs @@ -38,8 +39,8 @@ struct SoftConstraintsInputs lanelet::ArcCoordinates ego_arc; lanelet::ArcCoordinates goal_arc; lanelet::ConstLanelets closest_lanelets_to_goal; - behavior_path_planner::PlanResult reference_path; - behavior_path_planner::PlanResult prev_module_path; + PlanResult reference_path; + PlanResult prev_module_path; std::optional prev_path; lanelet::ConstLanelets current_lanes; }; @@ -101,6 +102,6 @@ inline autoware::sampler_common::State getInitialState( return initial_state; } -} // namespace behavior_path_planner +} // namespace autoware::behavior_path_planner -#endif // BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__UTIL_HPP_ +#endif // AUTOWARE_BEHAVIOR_PATH_SAMPLING_PLANNER_MODULE__UTIL_HPP_ diff --git a/planning/behavior_path_sampling_planner_module/package.xml b/planning/autoware_behavior_path_sampling_planner_module/package.xml similarity index 91% rename from planning/behavior_path_sampling_planner_module/package.xml rename to planning/autoware_behavior_path_sampling_planner_module/package.xml index 60924027fb4c0..7934c2fb0ae91 100644 --- a/planning/behavior_path_sampling_planner_module/package.xml +++ b/planning/autoware_behavior_path_sampling_planner_module/package.xml @@ -1,9 +1,9 @@ - behavior_path_sampling_planner_module + autoware_behavior_path_sampling_planner_module 0.1.0 - The behavior_path_sampling_planner_module package + The autoware_behavior_path_sampling_planner_module package Daniel Sanchez Maxime Clement diff --git a/planning/autoware_behavior_path_sampling_planner_module/plugins.xml b/planning/autoware_behavior_path_sampling_planner_module/plugins.xml new file mode 100644 index 0000000000000..e04bad32cc0a1 --- /dev/null +++ b/planning/autoware_behavior_path_sampling_planner_module/plugins.xml @@ -0,0 +1,3 @@ + + + diff --git a/planning/behavior_path_sampling_planner_module/src/manager.cpp b/planning/autoware_behavior_path_sampling_planner_module/src/manager.cpp similarity index 95% rename from planning/behavior_path_sampling_planner_module/src/manager.cpp rename to planning/autoware_behavior_path_sampling_planner_module/src/manager.cpp index 724b87c4752e5..87dc706dd53c9 100644 --- a/planning/behavior_path_sampling_planner_module/src/manager.cpp +++ b/planning/autoware_behavior_path_sampling_planner_module/src/manager.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_sampling_planner_module/manager.hpp" +#include "autoware_behavior_path_sampling_planner_module/manager.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" @@ -22,7 +22,7 @@ #include #include -namespace behavior_path_planner +namespace autoware::behavior_path_planner { void SamplingPlannerModuleManager::init(rclcpp::Node * node) @@ -134,9 +134,9 @@ void SamplingPlannerModuleManager::updateModuleParams( }); } -} // namespace behavior_path_planner +} // namespace autoware::behavior_path_planner #include PLUGINLIB_EXPORT_CLASS( - behavior_path_planner::SamplingPlannerModuleManager, - behavior_path_planner::SceneModuleManagerInterface) + autoware::behavior_path_planner::SamplingPlannerModuleManager, + ::behavior_path_planner::SceneModuleManagerInterface) diff --git a/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp b/planning/autoware_behavior_path_sampling_planner_module/src/sampling_planner_module.cpp similarity index 98% rename from planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp rename to planning/autoware_behavior_path_sampling_planner_module/src/sampling_planner_module.cpp index d2cc57d46de30..9a7eb970e521a 100644 --- a/planning/behavior_path_sampling_planner_module/src/sampling_planner_module.cpp +++ b/planning/autoware_behavior_path_sampling_planner_module/src/sampling_planner_module.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_path_sampling_planner_module/sampling_planner_module.hpp" +#include "autoware_behavior_path_sampling_planner_module/sampling_planner_module.hpp" -namespace behavior_path_planner +namespace autoware::behavior_path_planner { using geometry_msgs::msg::Point; using motion_utils::calcSignedArcLength; @@ -267,7 +267,7 @@ bool SamplingPlannerModule::isReferencePathSafe() const const auto footprint = autoware::sampler_common::constraints::buildFootprintPoints( reference_path, internal_params_->constraints); - behavior_path_planner::HardConstraintsFunctionVector hard_constraints_reference_path; + HardConstraintsFunctionVector hard_constraints_reference_path; hard_constraints_reference_path.emplace_back( []( autoware::sampler_common::Path & path, @@ -415,8 +415,7 @@ BehaviorModuleOutput SamplingPlannerModule::plan() autoware::frenet_planner::SamplingParameters sampling_parameters; const auto & pose = planner_data_->self_odometry->pose.pose; - autoware::sampler_common::State initial_state = - behavior_path_planner::getInitialState(pose, reference_spline); + autoware::sampler_common::State initial_state = getInitialState(pose, reference_spline); sampling_parameters = prepareSamplingParameters(initial_state, reference_spline, *internal_params_); @@ -546,8 +545,7 @@ BehaviorModuleOutput SamplingPlannerModule::plan() const auto reused_path = get_subset(prev_path_frenet, reuse_idx); geometry_msgs::msg::Pose future_pose = reused_path.poses.back(); - autoware::sampler_common::State future_state = - behavior_path_planner::getInitialState(future_pose, reference_spline); + autoware::sampler_common::State future_state = getInitialState(future_pose, reference_spline); autoware::frenet_planner::FrenetState frenet_reuse_state; set_frenet_state(future_state, reference_spline, frenet_reuse_state); @@ -984,4 +982,4 @@ autoware::frenet_planner::SamplingParameters SamplingPlannerModule::prepareSampl return sampling_parameters; } -} // namespace behavior_path_planner +} // namespace autoware::behavior_path_planner diff --git a/planning/behavior_path_sampling_planner_module/plugins.xml b/planning/behavior_path_sampling_planner_module/plugins.xml deleted file mode 100644 index 04a8dbb3171c0..0000000000000 --- a/planning/behavior_path_sampling_planner_module/plugins.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - From 2f3541b8ccbec6be4ee38af43b90ea06ed99a416 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Tue, 11 Jun 2024 10:17:13 +0900 Subject: [PATCH 098/142] chore(rtc_replayer): remove from universe (#7424) Signed-off-by: Mamoru Sobue --- planning/rtc_replayer/CMakeLists.txt | 27 ---- planning/rtc_replayer/README.md | 49 ------- .../rtc_replayer/rtc_replayer_node.hpp | 59 -------- .../launch/rtc_replayer.launch.xml | 3 - planning/rtc_replayer/package.xml | 28 ---- .../rtc_replayer/src/rtc_replayer_node.cpp | 130 ------------------ 6 files changed, 296 deletions(-) delete mode 100644 planning/rtc_replayer/CMakeLists.txt delete mode 100644 planning/rtc_replayer/README.md delete mode 100644 planning/rtc_replayer/include/rtc_replayer/rtc_replayer_node.hpp delete mode 100644 planning/rtc_replayer/launch/rtc_replayer.launch.xml delete mode 100644 planning/rtc_replayer/package.xml delete mode 100644 planning/rtc_replayer/src/rtc_replayer_node.cpp diff --git a/planning/rtc_replayer/CMakeLists.txt b/planning/rtc_replayer/CMakeLists.txt deleted file mode 100644 index 877c283b41ea9..0000000000000 --- a/planning/rtc_replayer/CMakeLists.txt +++ /dev/null @@ -1,27 +0,0 @@ -cmake_minimum_required(VERSION 3.5) -project(rtc_replayer) - -### Compile options -if(NOT CMAKE_CXX_STANDARD) - set(CMAKE_CXX_STANDARD 17) -endif() -if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") - add_compile_options(-Wall -Wextra -Wpedantic -Werror) -endif() - -find_package(autoware_cmake REQUIRED) -autoware_package() - -ament_auto_add_library(${PROJECT_NAME} SHARED - src/${PROJECT_NAME}_node.cpp -) - -rclcpp_components_register_node(${PROJECT_NAME} - PLUGIN "rtc_replayer::RTCReplayerNode" - EXECUTABLE ${PROJECT_NAME}_node -) - -ament_auto_package( - INSTALL_TO_SHARE - launch -) diff --git a/planning/rtc_replayer/README.md b/planning/rtc_replayer/README.md deleted file mode 100644 index e758edfdb38b1..0000000000000 --- a/planning/rtc_replayer/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# rtc_replayer - -## Purpose - -The current issue for RTC commands is that service is not recorded to rosbag, so it's very hard to analyze what was happened exactly. -So this package makes it possible to replay rtc commands service from rosbag rtc status topic to resolve that issue. - -## Inputs / Outputs - -### Input - -| Name | Type | Description | -| ------------------- | ----------------------------------------- | ----------------------------------------------- | -| `/debug/rtc_status` | tier4_rtc_msgs::msg::CooperateStatusArray | CooperateStatusArray that is recorded in rosbag | - -### Output - -| Name | Type | Description | -| -------------------------------- | -------------------------------------- | -------------------------------------------------- | -| `/api/external/set/rtc_commands` | tier4_rtc_msgs::msg::CooperateCommands | CooperateCommands that is replayed by this package | - -## Inner-workings / Algorithms - -```plantuml - -@startuml -title rtc replayer -start - -:rosbag; - -:rtc_replayer; - -:rtc_interface; - -end - -@enduml - -``` - -## Assumptions / Known limits - -This package can't replay CooperateCommands correctly if CooperateStatusArray is not stable. -And this replay is always later one step than actual however it will not affect much for behavior. - -## Future extensions / Unimplemented parts - -tbd. diff --git a/planning/rtc_replayer/include/rtc_replayer/rtc_replayer_node.hpp b/planning/rtc_replayer/include/rtc_replayer/rtc_replayer_node.hpp deleted file mode 100644 index 49d0d9d60c93a..0000000000000 --- a/planning/rtc_replayer/include/rtc_replayer/rtc_replayer_node.hpp +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2022 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef RTC_REPLAYER__RTC_REPLAYER_NODE_HPP_ -#define RTC_REPLAYER__RTC_REPLAYER_NODE_HPP_ - -#include "rclcpp/rclcpp.hpp" - -#include "tier4_rtc_msgs/msg/command.hpp" -#include "tier4_rtc_msgs/msg/cooperate_command.hpp" -#include "tier4_rtc_msgs/msg/cooperate_status.hpp" -#include "tier4_rtc_msgs/msg/cooperate_status_array.hpp" -#include "tier4_rtc_msgs/msg/module.hpp" -#include "tier4_rtc_msgs/srv/cooperate_commands.hpp" -#include - -#include -#include -#include -#include - -namespace rtc_replayer -{ -using std::placeholders::_1; -using std::placeholders::_2; -using tier4_rtc_msgs::msg::Command; -using tier4_rtc_msgs::msg::CooperateCommand; -using tier4_rtc_msgs::msg::CooperateStatus; -using tier4_rtc_msgs::msg::CooperateStatusArray; -using tier4_rtc_msgs::msg::Module; -using tier4_rtc_msgs::srv::CooperateCommands; -using unique_identifier_msgs::msg::UUID; -class RTCReplayerNode : public rclcpp::Node -{ -public: - explicit RTCReplayerNode(const rclcpp::NodeOptions & node_options); - -private: - void onCooperateStatus(const CooperateStatusArray::ConstSharedPtr msg); - - rclcpp::Subscription::SharedPtr sub_statuses_; - rclcpp::Client::SharedPtr client_rtc_commands_; - std::map prev_cmd_status_; -}; - -} // namespace rtc_replayer - -#endif // RTC_REPLAYER__RTC_REPLAYER_NODE_HPP_ diff --git a/planning/rtc_replayer/launch/rtc_replayer.launch.xml b/planning/rtc_replayer/launch/rtc_replayer.launch.xml deleted file mode 100644 index 70d7baf2dce4a..0000000000000 --- a/planning/rtc_replayer/launch/rtc_replayer.launch.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/planning/rtc_replayer/package.xml b/planning/rtc_replayer/package.xml deleted file mode 100644 index 17c5a760173d6..0000000000000 --- a/planning/rtc_replayer/package.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - rtc_replayer - 0.1.0 - The rtc_replayer package - - Fumiya Watanabe - Taiki Tanaka - - Apache License 2.0 - - Fumiya Watanabe - - ament_cmake_auto - autoware_cmake - - rclcpp - rclcpp_components - tier4_rtc_msgs - - ament_lint_auto - autoware_lint_common - - - ament_cmake - - diff --git a/planning/rtc_replayer/src/rtc_replayer_node.cpp b/planning/rtc_replayer/src/rtc_replayer_node.cpp deleted file mode 100644 index 8bed9ec41e9ea..0000000000000 --- a/planning/rtc_replayer/src/rtc_replayer_node.cpp +++ /dev/null @@ -1,130 +0,0 @@ -// Copyright 2022 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "rtc_replayer/rtc_replayer_node.hpp" - -#include - -namespace rtc_replayer -{ - -std::string getModuleStatus(const uint8_t module_status) -{ - switch (module_status) { - case Command::ACTIVATE: { - return "execute"; - } - case Command::DEACTIVATE: { - return "wait"; - } - } - return "none"; -} - -std::string getModuleName(const uint8_t module_type) -{ - switch (module_type) { - case Module::LANE_CHANGE_LEFT: { - return "lane_change_left"; - } - case Module::LANE_CHANGE_RIGHT: { - return "lane_change_right"; - } - case Module::AVOIDANCE_LEFT: { - return "avoidance_left"; - } - case Module::AVOIDANCE_RIGHT: { - return "avoidance_right"; - } - case Module::GOAL_PLANNER: { - return "goal_planner"; - } - case Module::START_PLANNER: { - return "start_planner"; - } - case Module::TRAFFIC_LIGHT: { - return "traffic_light"; - } - case Module::INTERSECTION: { - return "intersection"; - } - case Module::CROSSWALK: { - return "crosswalk"; - } - case Module::BLIND_SPOT: { - return "blind_spot"; - } - case Module::DETECTION_AREA: { - return "detection_area"; - } - case Module::NO_STOPPING_AREA: { - return "no_stopping_area"; - } - case Module::OCCLUSION_SPOT: { - return "occlusion_spot"; - } - } - return "NONE"; -} - -std::string to_string(const unique_identifier_msgs::msg::UUID & uuid) -{ - std::stringstream ss; - for (auto i = 0; i < 16; ++i) { - ss << std::hex << std::setfill('0') << std::setw(2) << +uuid.uuid[i]; - } - return ss.str(); -} - -RTCReplayerNode::RTCReplayerNode(const rclcpp::NodeOptions & node_options) -: Node("rtc_replayer_node", node_options) -{ - sub_statuses_ = create_subscription( - "/debug/rtc_status", 1, std::bind(&RTCReplayerNode::onCooperateStatus, this, _1)); - client_rtc_commands_ = create_client("/api/external/set/rtc_commands"); -} - -void RTCReplayerNode::onCooperateStatus(const CooperateStatusArray::ConstSharedPtr msg) -{ - if (msg->statuses.empty()) return; - CooperateCommands::Request::SharedPtr request = std::make_shared(); - for (auto status : msg->statuses) { - const auto cmd_status = status.command_status.type; - const auto uuid_string = to_string(status.uuid); - // add command which has change from previous status and command is already registered - if ( - prev_cmd_status_.find(uuid_string) != prev_cmd_status_.end() && - cmd_status != prev_cmd_status_[uuid_string]) { - CooperateCommand cc; - // send previous command status - cc.command.type = cmd_status; - cc.uuid = status.uuid; - cc.module = status.module; - request->stamp = status.stamp; - request->commands.emplace_back(cc); - std::cerr << "uuid: " << uuid_string << " module: " << getModuleName(cc.module.type) - << " status: " << getModuleStatus(cmd_status) << std::endl; - } - // post process - prev_cmd_status_[uuid_string] = cmd_status; - } - if (!request->commands.empty()) { - client_rtc_commands_->async_send_request(request); - } -} - -} // namespace rtc_replayer - -#include -RCLCPP_COMPONENTS_REGISTER_NODE(rtc_replayer::RTCReplayerNode) From e3a30cd6934081bff443a2b10532b99a279ab062 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Tue, 11 Jun 2024 10:18:52 +0900 Subject: [PATCH 099/142] feat(sampling_based_planner): use polling subscribers (#7394) Signed-off-by: Maxime CLEMENT --- .../include/autoware_path_sampler/node.hpp | 12 ++++--- .../autoware_path_sampler/src/node.cpp | 33 +++++++++---------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/node.hpp b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/node.hpp index 143b9ee30b2c2..780c71b1ab9cd 100644 --- a/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/node.hpp +++ b/planning/sampling_based_planner/autoware_path_sampler/include/autoware_path_sampler/node.hpp @@ -23,6 +23,7 @@ #include "rclcpp/rclcpp.hpp" #include +#include #include #include @@ -51,7 +52,6 @@ class PathSampler : public rclcpp::Node // variables for subscribers Odometry::SharedPtr ego_state_ptr_; - PredictedObjects::SharedPtr in_objects_ptr_ = std::make_shared(); // variables for previous information std::optional prev_path_; @@ -62,8 +62,9 @@ class PathSampler : public rclcpp::Node // interface subscriber rclcpp::Subscription::SharedPtr path_sub_; - rclcpp::Subscription::SharedPtr odom_sub_; - rclcpp::Subscription::SharedPtr objects_sub_; + tier4_autoware_utils::InterProcessPollingSubscriber odom_sub_{this, "~/input/odometry"}; + tier4_autoware_utils::InterProcessPollingSubscriber objects_sub_{ + this, "~/input/objects"}; // debug publisher rclcpp::Publisher::SharedPtr debug_markers_pub_; @@ -79,8 +80,9 @@ class PathSampler : public rclcpp::Node void onPath(const Path::SharedPtr); // main functions - bool isDataReady(const Path & path, rclcpp::Clock clock) const; - PlannerData createPlannerData(const Path & path) const; + bool isDataReady( + const Path & path, const Odometry::ConstSharedPtr ego_state_ptr, rclcpp::Clock clock); + PlannerData createPlannerData(const Path & path, const Odometry & ego_state) const; std::vector generateTrajectory(const PlannerData & planner_data); std::vector extendTrajectory( const std::vector & traj_points, diff --git a/planning/sampling_based_planner/autoware_path_sampler/src/node.cpp b/planning/sampling_based_planner/autoware_path_sampler/src/node.cpp index 9a828d23af5cb..a7ca2035e1474 100644 --- a/planning/sampling_based_planner/autoware_path_sampler/src/node.cpp +++ b/planning/sampling_based_planner/autoware_path_sampler/src/node.cpp @@ -70,10 +70,6 @@ PathSampler::PathSampler(const rclcpp::NodeOptions & node_options) // interface subscriber path_sub_ = create_subscription( "~/input/path", 1, std::bind(&PathSampler::onPath, this, std::placeholders::_1)); - odom_sub_ = create_subscription( - "~/input/odometry", 1, [this](const Odometry::SharedPtr msg) { ego_state_ptr_ = msg; }); - objects_sub_ = create_subscription( - "~/input/objects", 1, std::bind(&PathSampler::objectsCallback, this, std::placeholders::_1)); // debug publisher debug_markers_pub_ = create_publisher("~/debug/marker", 1); @@ -215,11 +211,6 @@ void PathSampler::resetPreviousData() prev_path_.reset(); } -void PathSampler::objectsCallback(const PredictedObjects::SharedPtr msg) -{ - in_objects_ptr_ = msg; -} - autoware::sampler_common::State PathSampler::getPlanningState( autoware::sampler_common::State & state, const autoware::sampler_common::transform::Spline2D & path_spline) const @@ -241,7 +232,8 @@ void PathSampler::onPath(const Path::SharedPtr path_ptr) time_keeper_ptr_->tic(__func__); // check if data is ready and valid - if (!isDataReady(*path_ptr, *get_clock())) { + const auto ego_state_ptr = odom_sub_.takeData(); + if (!isDataReady(*path_ptr, ego_state_ptr, *get_clock())) { return; } @@ -253,7 +245,7 @@ void PathSampler::onPath(const Path::SharedPtr path_ptr) "Backward path is NOT supported. Just converting path to trajectory"); } // 1. create planner data - const auto planner_data = createPlannerData(*path_ptr); + const auto planner_data = createPlannerData(*path_ptr, *ego_state_ptr); // 2. generate trajectory const auto generated_traj_points = generateTrajectory(planner_data); // 3. extend trajectory to connect the optimized trajectory and the following path smoothly @@ -278,9 +270,10 @@ void PathSampler::onPath(const Path::SharedPtr path_ptr) debug_calculation_time_pub_->publish(calculation_time_msg); } -bool PathSampler::isDataReady(const Path & path, rclcpp::Clock clock) const +bool PathSampler::isDataReady( + const Path & path, const Odometry::ConstSharedPtr ego_state_ptr, rclcpp::Clock clock) { - if (!ego_state_ptr_) { + if (!ego_state_ptr) { RCLCPP_INFO_SKIPFIRST_THROTTLE(get_logger(), clock, 5000, "Waiting for ego pose and twist."); return false; } @@ -296,10 +289,15 @@ bool PathSampler::isDataReady(const Path & path, rclcpp::Clock clock) const return false; } + if (!objects_sub_.takeData()) { + RCLCPP_INFO_SKIPFIRST_THROTTLE(get_logger(), clock, 5000, "Waiting for detected objects."); + return false; + } + return true; } -PlannerData PathSampler::createPlannerData(const Path & path) const +PlannerData PathSampler::createPlannerData(const Path & path, const Odometry & ego_state) const { // create planner data PlannerData planner_data; @@ -307,8 +305,8 @@ PlannerData PathSampler::createPlannerData(const Path & path) const planner_data.traj_points = trajectory_utils::convertToTrajectoryPoints(path.points); planner_data.left_bound = path.left_bound; planner_data.right_bound = path.right_bound; - planner_data.ego_pose = ego_state_ptr_->pose.pose; - planner_data.ego_vel = ego_state_ptr_->twist.twist.linear.x; + planner_data.ego_pose = ego_state.pose.pose; + planner_data.ego_vel = ego_state.twist.twist.linear.x; return planner_data; } @@ -467,8 +465,9 @@ autoware::sampler_common::Path PathSampler::generatePath(const PlannerData & pla current_state.heading = tf2::getYaw(planner_data.ego_pose.orientation); const auto planning_state = getPlanningState(current_state, path_spline); + const auto objects = objects_sub_.takeData(); prepareConstraints( - params_.constraints, *in_objects_ptr_, planner_data.left_bound, planner_data.right_bound); + params_.constraints, *objects, planner_data.left_bound, planner_data.right_bound); auto candidate_paths = generateCandidatePaths(planning_state, path_spline, 0.0, params_); const auto candidates_from_prev_path = From 32274fff34e30410e59d9294babe92be4bc787ef Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Tue, 11 Jun 2024 11:14:15 +0900 Subject: [PATCH 100/142] feat(autoware_control_validator): add polling subcribers (#7426) * add polling subs Signed-off-by: Daniel Sanchez * delete extra line Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez --- .../control_validator.hpp | 8 ++++--- .../src/control_validator.cpp | 21 ++----------------- 2 files changed, 7 insertions(+), 22 deletions(-) diff --git a/control/autoware_control_validator/include/autoware_control_validator/control_validator.hpp b/control/autoware_control_validator/include/autoware_control_validator/control_validator.hpp index d26abfc2ecd2f..2e31de295f1f2 100644 --- a/control/autoware_control_validator/include/autoware_control_validator/control_validator.hpp +++ b/control/autoware_control_validator/include/autoware_control_validator/control_validator.hpp @@ -18,6 +18,7 @@ #include "autoware_control_validator/debug_marker.hpp" #include "autoware_control_validator/msg/control_validator_status.hpp" #include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" +#include "tier4_autoware_utils/ros/polling_subscriber.hpp" #include #include @@ -48,7 +49,6 @@ class ControlValidator : public rclcpp::Node public: explicit ControlValidator(const rclcpp::NodeOptions & options); - void onReferenceTrajectory(const Trajectory::ConstSharedPtr msg); void onPredictedTrajectory(const Trajectory::ConstSharedPtr msg); bool checkValidMaxDistanceDeviation(const Trajectory & predicted_trajectory); @@ -68,9 +68,11 @@ class ControlValidator : public rclcpp::Node void setStatus(DiagnosticStatusWrapper & stat, const bool & is_ok, const std::string & msg); - rclcpp::Subscription::SharedPtr sub_kinematics_; - rclcpp::Subscription::SharedPtr sub_reference_traj_; rclcpp::Subscription::SharedPtr sub_predicted_traj_; + tier4_autoware_utils::InterProcessPollingSubscriber sub_kinematics_{ + this, "~/input/kinematics"}; + tier4_autoware_utils::InterProcessPollingSubscriber sub_reference_traj_{ + this, "~/input/reference_trajectory"}; rclcpp::Publisher::SharedPtr pub_status_; rclcpp::Publisher::SharedPtr pub_markers_; diff --git a/control/autoware_control_validator/src/control_validator.cpp b/control/autoware_control_validator/src/control_validator.cpp index a0873f93c1e16..7e4a86d42598e 100644 --- a/control/autoware_control_validator/src/control_validator.cpp +++ b/control/autoware_control_validator/src/control_validator.cpp @@ -28,13 +28,6 @@ ControlValidator::ControlValidator(const rclcpp::NodeOptions & options) : Node("control_validator", options) { using std::placeholders::_1; - - sub_kinematics_ = create_subscription( - "~/input/kinematics", 1, - [this](const Odometry::ConstSharedPtr msg) { current_kinematics_ = msg; }); - sub_reference_traj_ = create_subscription( - "~/input/reference_trajectory", 1, - std::bind(&ControlValidator::onReferenceTrajectory, this, _1)); sub_predicted_traj_ = create_subscription( "~/input/predicted_trajectory", 1, std::bind(&ControlValidator::onPredictedTrajectory, this, _1)); @@ -116,21 +109,11 @@ bool ControlValidator::isDataReady() return true; } -void ControlValidator::onReferenceTrajectory(const Trajectory::ConstSharedPtr msg) -{ - if (msg->points.size() < 2) { - RCLCPP_ERROR(get_logger(), "planning trajectory size is invalid (%lu)", msg->points.size()); - return; - } - - current_reference_trajectory_ = msg; - - return; -} - void ControlValidator::onPredictedTrajectory(const Trajectory::ConstSharedPtr msg) { current_predicted_trajectory_ = msg; + current_reference_trajectory_ = sub_reference_traj_.takeData(); + current_kinematics_ = sub_kinematics_.takeData(); if (!isDataReady()) return; From 21d1d85d00fc37217e31f6886aa79db6f4a6462e Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Tue, 11 Jun 2024 11:14:46 +0900 Subject: [PATCH 101/142] refactor(no_stopping_area)!: add autoware prefix (#7425) Signed-off-by: kosuke55 --- .github/CODEOWNERS | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/no_stopping_area.param.yaml | 0 .../docs/no-stopping-area.svg | 0 .../package.xml | 4 ++-- .../plugins.xml | 2 +- .../src/debug.cpp | 0 .../src/manager.cpp | 0 .../src/manager.hpp | 0 .../src/scene_no_stopping_area.cpp | 0 .../src/scene_no_stopping_area.hpp | 0 12 files changed, 5 insertions(+), 5 deletions(-) rename planning/{behavior_velocity_no_stopping_area_module => autoware_behavior_velocity_no_stopping_area_module}/CMakeLists.txt (85%) rename planning/{behavior_velocity_no_stopping_area_module => autoware_behavior_velocity_no_stopping_area_module}/README.md (100%) rename planning/{behavior_velocity_no_stopping_area_module => autoware_behavior_velocity_no_stopping_area_module}/config/no_stopping_area.param.yaml (100%) rename planning/{behavior_velocity_no_stopping_area_module => autoware_behavior_velocity_no_stopping_area_module}/docs/no-stopping-area.svg (100%) rename planning/{behavior_velocity_no_stopping_area_module => autoware_behavior_velocity_no_stopping_area_module}/package.xml (90%) rename planning/{behavior_velocity_no_stopping_area_module => autoware_behavior_velocity_no_stopping_area_module}/plugins.xml (70%) rename planning/{behavior_velocity_no_stopping_area_module => autoware_behavior_velocity_no_stopping_area_module}/src/debug.cpp (100%) rename planning/{behavior_velocity_no_stopping_area_module => autoware_behavior_velocity_no_stopping_area_module}/src/manager.cpp (100%) rename planning/{behavior_velocity_no_stopping_area_module => autoware_behavior_velocity_no_stopping_area_module}/src/manager.hpp (100%) rename planning/{behavior_velocity_no_stopping_area_module => autoware_behavior_velocity_no_stopping_area_module}/src/scene_no_stopping_area.cpp (100%) rename planning/{behavior_velocity_no_stopping_area_module => autoware_behavior_velocity_no_stopping_area_module}/src/scene_no_stopping_area.hpp (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 52f91f4d41a20..9c029d3e62399 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -178,7 +178,7 @@ planning/behavior_velocity_detection_area_module/** kyoichi.sugahara@tier4.jp sh planning/behavior_velocity_dynamic_obstacle_stop_module/** mamoru.sobue@tier4.jp maxime.clement@tier4.jp planning/behavior_velocity_intersection_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_no_drivable_lane_module/** ahmed.ebrahim@leodrive.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp -planning/behavior_velocity_no_stopping_area_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_velocity_no_stopping_area_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_planner_common/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp diff --git a/planning/behavior_velocity_no_stopping_area_module/CMakeLists.txt b/planning/autoware_behavior_velocity_no_stopping_area_module/CMakeLists.txt similarity index 85% rename from planning/behavior_velocity_no_stopping_area_module/CMakeLists.txt rename to planning/autoware_behavior_velocity_no_stopping_area_module/CMakeLists.txt index ba3fd0e4f71dd..f4646b1b9eb6e 100644 --- a/planning/behavior_velocity_no_stopping_area_module/CMakeLists.txt +++ b/planning/autoware_behavior_velocity_no_stopping_area_module/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(behavior_velocity_no_stopping_area_module) +project(autoware_behavior_velocity_no_stopping_area_module) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/planning/behavior_velocity_no_stopping_area_module/README.md b/planning/autoware_behavior_velocity_no_stopping_area_module/README.md similarity index 100% rename from planning/behavior_velocity_no_stopping_area_module/README.md rename to planning/autoware_behavior_velocity_no_stopping_area_module/README.md diff --git a/planning/behavior_velocity_no_stopping_area_module/config/no_stopping_area.param.yaml b/planning/autoware_behavior_velocity_no_stopping_area_module/config/no_stopping_area.param.yaml similarity index 100% rename from planning/behavior_velocity_no_stopping_area_module/config/no_stopping_area.param.yaml rename to planning/autoware_behavior_velocity_no_stopping_area_module/config/no_stopping_area.param.yaml diff --git a/planning/behavior_velocity_no_stopping_area_module/docs/no-stopping-area.svg b/planning/autoware_behavior_velocity_no_stopping_area_module/docs/no-stopping-area.svg similarity index 100% rename from planning/behavior_velocity_no_stopping_area_module/docs/no-stopping-area.svg rename to planning/autoware_behavior_velocity_no_stopping_area_module/docs/no-stopping-area.svg diff --git a/planning/behavior_velocity_no_stopping_area_module/package.xml b/planning/autoware_behavior_velocity_no_stopping_area_module/package.xml similarity index 90% rename from planning/behavior_velocity_no_stopping_area_module/package.xml rename to planning/autoware_behavior_velocity_no_stopping_area_module/package.xml index 0728c02348bc0..1a2d435fb6a4a 100644 --- a/planning/behavior_velocity_no_stopping_area_module/package.xml +++ b/planning/autoware_behavior_velocity_no_stopping_area_module/package.xml @@ -1,9 +1,9 @@ - behavior_velocity_no_stopping_area_module + autoware_behavior_velocity_no_stopping_area_module 0.1.0 - The behavior_velocity_no_stopping_area_module package + The autoware_behavior_velocity_no_stopping_area_module package Kosuke Takeuchi Tomoya Kimura diff --git a/planning/behavior_velocity_no_stopping_area_module/plugins.xml b/planning/autoware_behavior_velocity_no_stopping_area_module/plugins.xml similarity index 70% rename from planning/behavior_velocity_no_stopping_area_module/plugins.xml rename to planning/autoware_behavior_velocity_no_stopping_area_module/plugins.xml index 23d2a800c3cf5..54bc5584007c2 100644 --- a/planning/behavior_velocity_no_stopping_area_module/plugins.xml +++ b/planning/autoware_behavior_velocity_no_stopping_area_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_no_stopping_area_module/src/debug.cpp b/planning/autoware_behavior_velocity_no_stopping_area_module/src/debug.cpp similarity index 100% rename from planning/behavior_velocity_no_stopping_area_module/src/debug.cpp rename to planning/autoware_behavior_velocity_no_stopping_area_module/src/debug.cpp diff --git a/planning/behavior_velocity_no_stopping_area_module/src/manager.cpp b/planning/autoware_behavior_velocity_no_stopping_area_module/src/manager.cpp similarity index 100% rename from planning/behavior_velocity_no_stopping_area_module/src/manager.cpp rename to planning/autoware_behavior_velocity_no_stopping_area_module/src/manager.cpp diff --git a/planning/behavior_velocity_no_stopping_area_module/src/manager.hpp b/planning/autoware_behavior_velocity_no_stopping_area_module/src/manager.hpp similarity index 100% rename from planning/behavior_velocity_no_stopping_area_module/src/manager.hpp rename to planning/autoware_behavior_velocity_no_stopping_area_module/src/manager.hpp diff --git a/planning/behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.cpp b/planning/autoware_behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.cpp similarity index 100% rename from planning/behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.cpp rename to planning/autoware_behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.cpp diff --git a/planning/behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.hpp b/planning/autoware_behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.hpp similarity index 100% rename from planning/behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.hpp rename to planning/autoware_behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.hpp From e3dc8bb901f34abe8334504e537923d656c81a8b Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Tue, 11 Jun 2024 11:34:29 +0900 Subject: [PATCH 102/142] refactor(crosswalk)!: add autoware_ prefix (#7407) Signed-off-by: Yuki Takagi --- .github/CODEOWNERS | 2 +- planning/.pages | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 8 ++++---- .../config/crosswalk.param.yaml | 0 .../docs/crosswalk_attention_range.svg | 0 .../docs/crosswalk_module.svg | 0 .../docs/debug_markers.png | Bin .../docs/example.png | Bin .../docs/explicit_stop_line.svg | 0 .../docs/far_object_threshold.drawio.svg | 0 .../docs/stuck_vehicle_detection.svg | 0 .../docs/time_to_collision_plot.png | Bin .../docs/ttc-ttv.svg | 0 .../docs/ttc_vs_ttv.drawio.svg | 0 .../docs/virtual_collision_point.svg | 0 .../docs/virtual_stop_line.svg | 0 .../docs/with_occlusion.svg | 0 .../docs/with_traffic_light.svg | 0 .../docs/without_traffic_light.svg | 0 .../util.hpp | 6 +++--- .../package.xml | 4 ++-- .../plugins.xml | 2 +- .../scripts/time_to_collision_plotter.py | 0 .../src/debug.cpp | 0 .../src/manager.cpp | 0 .../src/manager.hpp | 0 .../src/occluded_crosswalk.cpp | 2 +- .../src/occluded_crosswalk.hpp | 0 .../src/scene_crosswalk.cpp | 0 .../src/scene_crosswalk.hpp | 2 +- .../src/util.cpp | 2 +- .../autoware_behavior_velocity_planner/README.md | 2 +- .../autoware_behavior_velocity_planner/package.xml | 3 ++- .../test/src/test_node_interface.cpp | 2 +- .../package.xml | 2 +- .../src/scene.cpp | 2 +- .../package.xml | 2 +- .../src/scene_walkway.hpp | 2 +- 39 files changed, 24 insertions(+), 23 deletions(-) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/CMakeLists.txt (88%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/README.md (98%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/config/crosswalk.param.yaml (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/crosswalk_attention_range.svg (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/crosswalk_module.svg (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/debug_markers.png (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/example.png (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/explicit_stop_line.svg (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/far_object_threshold.drawio.svg (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/stuck_vehicle_detection.svg (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/time_to_collision_plot.png (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/ttc-ttv.svg (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/ttc_vs_ttv.drawio.svg (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/virtual_collision_point.svg (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/virtual_stop_line.svg (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/with_occlusion.svg (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/with_traffic_light.svg (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/docs/without_traffic_light.svg (100%) rename planning/{behavior_velocity_crosswalk_module/include/behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module/include/autoware_behavior_velocity_crosswalk_module}/util.hpp (95%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/package.xml (93%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/plugins.xml (72%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/scripts/time_to_collision_plotter.py (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/src/debug.cpp (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/src/manager.cpp (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/src/manager.hpp (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/src/occluded_crosswalk.cpp (99%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/src/occluded_crosswalk.hpp (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/src/scene_crosswalk.cpp (100%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/src/scene_crosswalk.hpp (99%) rename planning/{behavior_velocity_crosswalk_module => autoware_behavior_velocity_crosswalk_module}/src/util.cpp (99%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9c029d3e62399..e994654ece1c2 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -173,7 +173,7 @@ planning/autoware_behavior_path_start_planner_module/** daniel.sanchez@tier4.jp planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_path_start_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_blind_spot_module/** mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp -planning/behavior_velocity_crosswalk_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yuki.takagi@tier4.jp +planning/autoware_behavior_velocity_crosswalk_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yuki.takagi@tier4.jp planning/behavior_velocity_detection_area_module/** kyoichi.sugahara@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_dynamic_obstacle_stop_module/** mamoru.sobue@tier4.jp maxime.clement@tier4.jp planning/behavior_velocity_intersection_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp diff --git a/planning/.pages b/planning/.pages index 04c6b3d8d1922..58b60481f90bc 100644 --- a/planning/.pages +++ b/planning/.pages @@ -22,7 +22,7 @@ nav: - 'Template for Custom Module': planning/autoware_behavior_velocity_template_module - 'Available Module': - 'Blind Spot': planning/autoware_behavior_velocity_blind_spot_module - - 'Crosswalk': planning/behavior_velocity_crosswalk_module + - 'Crosswalk': planning/autoware_behavior_velocity_crosswalk_module - 'Detection Area': planning/behavior_velocity_detection_area_module - 'Dynamic Obstacle Stop': planning/behavior_velocity_dynamic_obstacle_stop_module - 'Intersection': planning/autoware_behavior_velocity_intersection_module diff --git a/planning/behavior_velocity_crosswalk_module/CMakeLists.txt b/planning/autoware_behavior_velocity_crosswalk_module/CMakeLists.txt similarity index 88% rename from planning/behavior_velocity_crosswalk_module/CMakeLists.txt rename to planning/autoware_behavior_velocity_crosswalk_module/CMakeLists.txt index f21d5ab786cad..8447bfdedd47a 100644 --- a/planning/behavior_velocity_crosswalk_module/CMakeLists.txt +++ b/planning/autoware_behavior_velocity_crosswalk_module/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(behavior_velocity_crosswalk_module) +project(autoware_behavior_velocity_crosswalk_module) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/planning/behavior_velocity_crosswalk_module/README.md b/planning/autoware_behavior_velocity_crosswalk_module/README.md similarity index 98% rename from planning/behavior_velocity_crosswalk_module/README.md rename to planning/autoware_behavior_velocity_crosswalk_module/README.md index 23222d2841bad..84d3e0f77a281 100644 --- a/planning/behavior_velocity_crosswalk_module/README.md +++ b/planning/autoware_behavior_velocity_crosswalk_module/README.md @@ -275,7 +275,7 @@ In the `common` namespace, the following parameters are defined. ### Visualization of Time-To-Collision ```sh -ros2 run behavior_velocity_crosswalk_module time_to_collision_plotter.py +ros2 run autoware_behavior_velocity_crosswalk_module time_to_collision_plotter.py ``` enables you to visualize the following figure of the ego and pedestrian's time to collision. @@ -290,7 +290,7 @@ The label of each plot is `-`. ### Behavior - Q. The ego stopped around the crosswalk even though there were no crosswalk user objects. - - A. See [Stuck Vehicle Detection](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/behavior_velocity_crosswalk_module/#stuck-vehicle-detection). + - A. See [Stuck Vehicle Detection](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection). - Q. The crosswalk virtual wall suddenly appeared resulting in the sudden stop. - A. There may be a crosswalk user started moving when the ego was close to the crosswalk. - Q. The crosswalk module decides to stop even when the pedestrian traffic light is red. @@ -301,9 +301,9 @@ The label of each plot is `-`. ### Parameter Tuning - Q. The ego's yield behavior is too conservative. - - A. Tune `ego_pass_later_margin` described in [Yield Decision](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/behavior_velocity_crosswalk_module/#stuck-vehicle-detection) + - A. Tune `ego_pass_later_margin` described in [Yield Decision](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection) - Q. The ego's yield behavior is too aggressive. - - A. Tune `ego_pass_later_margin` described in [Yield Decision](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/behavior_velocity_crosswalk_module/#stuck-vehicle-detection) + - A. Tune `ego_pass_later_margin` described in [Yield Decision](https://autowarefoundation.github.io/autoware.universe/pr-5583/planning/autoware_behavior_velocity_crosswalk_module/#stuck-vehicle-detection) ## References/External links diff --git a/planning/behavior_velocity_crosswalk_module/config/crosswalk.param.yaml b/planning/autoware_behavior_velocity_crosswalk_module/config/crosswalk.param.yaml similarity index 100% rename from planning/behavior_velocity_crosswalk_module/config/crosswalk.param.yaml rename to planning/autoware_behavior_velocity_crosswalk_module/config/crosswalk.param.yaml diff --git a/planning/behavior_velocity_crosswalk_module/docs/crosswalk_attention_range.svg b/planning/autoware_behavior_velocity_crosswalk_module/docs/crosswalk_attention_range.svg similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/crosswalk_attention_range.svg rename to planning/autoware_behavior_velocity_crosswalk_module/docs/crosswalk_attention_range.svg diff --git a/planning/behavior_velocity_crosswalk_module/docs/crosswalk_module.svg b/planning/autoware_behavior_velocity_crosswalk_module/docs/crosswalk_module.svg similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/crosswalk_module.svg rename to planning/autoware_behavior_velocity_crosswalk_module/docs/crosswalk_module.svg diff --git a/planning/behavior_velocity_crosswalk_module/docs/debug_markers.png b/planning/autoware_behavior_velocity_crosswalk_module/docs/debug_markers.png similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/debug_markers.png rename to planning/autoware_behavior_velocity_crosswalk_module/docs/debug_markers.png diff --git a/planning/behavior_velocity_crosswalk_module/docs/example.png b/planning/autoware_behavior_velocity_crosswalk_module/docs/example.png similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/example.png rename to planning/autoware_behavior_velocity_crosswalk_module/docs/example.png diff --git a/planning/behavior_velocity_crosswalk_module/docs/explicit_stop_line.svg b/planning/autoware_behavior_velocity_crosswalk_module/docs/explicit_stop_line.svg similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/explicit_stop_line.svg rename to planning/autoware_behavior_velocity_crosswalk_module/docs/explicit_stop_line.svg diff --git a/planning/behavior_velocity_crosswalk_module/docs/far_object_threshold.drawio.svg b/planning/autoware_behavior_velocity_crosswalk_module/docs/far_object_threshold.drawio.svg similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/far_object_threshold.drawio.svg rename to planning/autoware_behavior_velocity_crosswalk_module/docs/far_object_threshold.drawio.svg diff --git a/planning/behavior_velocity_crosswalk_module/docs/stuck_vehicle_detection.svg b/planning/autoware_behavior_velocity_crosswalk_module/docs/stuck_vehicle_detection.svg similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/stuck_vehicle_detection.svg rename to planning/autoware_behavior_velocity_crosswalk_module/docs/stuck_vehicle_detection.svg diff --git a/planning/behavior_velocity_crosswalk_module/docs/time_to_collision_plot.png b/planning/autoware_behavior_velocity_crosswalk_module/docs/time_to_collision_plot.png similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/time_to_collision_plot.png rename to planning/autoware_behavior_velocity_crosswalk_module/docs/time_to_collision_plot.png diff --git a/planning/behavior_velocity_crosswalk_module/docs/ttc-ttv.svg b/planning/autoware_behavior_velocity_crosswalk_module/docs/ttc-ttv.svg similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/ttc-ttv.svg rename to planning/autoware_behavior_velocity_crosswalk_module/docs/ttc-ttv.svg diff --git a/planning/behavior_velocity_crosswalk_module/docs/ttc_vs_ttv.drawio.svg b/planning/autoware_behavior_velocity_crosswalk_module/docs/ttc_vs_ttv.drawio.svg similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/ttc_vs_ttv.drawio.svg rename to planning/autoware_behavior_velocity_crosswalk_module/docs/ttc_vs_ttv.drawio.svg diff --git a/planning/behavior_velocity_crosswalk_module/docs/virtual_collision_point.svg b/planning/autoware_behavior_velocity_crosswalk_module/docs/virtual_collision_point.svg similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/virtual_collision_point.svg rename to planning/autoware_behavior_velocity_crosswalk_module/docs/virtual_collision_point.svg diff --git a/planning/behavior_velocity_crosswalk_module/docs/virtual_stop_line.svg b/planning/autoware_behavior_velocity_crosswalk_module/docs/virtual_stop_line.svg similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/virtual_stop_line.svg rename to planning/autoware_behavior_velocity_crosswalk_module/docs/virtual_stop_line.svg diff --git a/planning/behavior_velocity_crosswalk_module/docs/with_occlusion.svg b/planning/autoware_behavior_velocity_crosswalk_module/docs/with_occlusion.svg similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/with_occlusion.svg rename to planning/autoware_behavior_velocity_crosswalk_module/docs/with_occlusion.svg diff --git a/planning/behavior_velocity_crosswalk_module/docs/with_traffic_light.svg b/planning/autoware_behavior_velocity_crosswalk_module/docs/with_traffic_light.svg similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/with_traffic_light.svg rename to planning/autoware_behavior_velocity_crosswalk_module/docs/with_traffic_light.svg diff --git a/planning/behavior_velocity_crosswalk_module/docs/without_traffic_light.svg b/planning/autoware_behavior_velocity_crosswalk_module/docs/without_traffic_light.svg similarity index 100% rename from planning/behavior_velocity_crosswalk_module/docs/without_traffic_light.svg rename to planning/autoware_behavior_velocity_crosswalk_module/docs/without_traffic_light.svg diff --git a/planning/behavior_velocity_crosswalk_module/include/behavior_velocity_crosswalk_module/util.hpp b/planning/autoware_behavior_velocity_crosswalk_module/include/autoware_behavior_velocity_crosswalk_module/util.hpp similarity index 95% rename from planning/behavior_velocity_crosswalk_module/include/behavior_velocity_crosswalk_module/util.hpp rename to planning/autoware_behavior_velocity_crosswalk_module/include/autoware_behavior_velocity_crosswalk_module/util.hpp index ca07636c2f60e..ef7a8217fc6e6 100644 --- a/planning/behavior_velocity_crosswalk_module/include/behavior_velocity_crosswalk_module/util.hpp +++ b/planning/autoware_behavior_velocity_crosswalk_module/include/autoware_behavior_velocity_crosswalk_module/util.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef BEHAVIOR_VELOCITY_CROSSWALK_MODULE__UTIL_HPP_ -#define BEHAVIOR_VELOCITY_CROSSWALK_MODULE__UTIL_HPP_ +#ifndef AUTOWARE_BEHAVIOR_VELOCITY_CROSSWALK_MODULE__UTIL_HPP_ +#define AUTOWARE_BEHAVIOR_VELOCITY_CROSSWALK_MODULE__UTIL_HPP_ #include #include @@ -110,4 +110,4 @@ std::optional getStopLineFromMap( const std::string & attribute_name); } // namespace autoware::behavior_velocity_planner -#endif // BEHAVIOR_VELOCITY_CROSSWALK_MODULE__UTIL_HPP_ +#endif // AUTOWARE_BEHAVIOR_VELOCITY_CROSSWALK_MODULE__UTIL_HPP_ diff --git a/planning/behavior_velocity_crosswalk_module/package.xml b/planning/autoware_behavior_velocity_crosswalk_module/package.xml similarity index 93% rename from planning/behavior_velocity_crosswalk_module/package.xml rename to planning/autoware_behavior_velocity_crosswalk_module/package.xml index d1c23618003f8..c3cf1339bbe6a 100644 --- a/planning/behavior_velocity_crosswalk_module/package.xml +++ b/planning/autoware_behavior_velocity_crosswalk_module/package.xml @@ -1,9 +1,9 @@ - behavior_velocity_crosswalk_module + autoware_behavior_velocity_crosswalk_module 0.1.0 - The behavior_velocity_crosswalk_module package + The autoware_behavior_velocity_crosswalk_module package Satoshi Ota Tomoya Kimura diff --git a/planning/behavior_velocity_crosswalk_module/plugins.xml b/planning/autoware_behavior_velocity_crosswalk_module/plugins.xml similarity index 72% rename from planning/behavior_velocity_crosswalk_module/plugins.xml rename to planning/autoware_behavior_velocity_crosswalk_module/plugins.xml index e38ab0d85a63a..9972d3a71b0de 100644 --- a/planning/behavior_velocity_crosswalk_module/plugins.xml +++ b/planning/autoware_behavior_velocity_crosswalk_module/plugins.xml @@ -1,3 +1,3 @@ - + diff --git a/planning/behavior_velocity_crosswalk_module/scripts/time_to_collision_plotter.py b/planning/autoware_behavior_velocity_crosswalk_module/scripts/time_to_collision_plotter.py similarity index 100% rename from planning/behavior_velocity_crosswalk_module/scripts/time_to_collision_plotter.py rename to planning/autoware_behavior_velocity_crosswalk_module/scripts/time_to_collision_plotter.py diff --git a/planning/behavior_velocity_crosswalk_module/src/debug.cpp b/planning/autoware_behavior_velocity_crosswalk_module/src/debug.cpp similarity index 100% rename from planning/behavior_velocity_crosswalk_module/src/debug.cpp rename to planning/autoware_behavior_velocity_crosswalk_module/src/debug.cpp diff --git a/planning/behavior_velocity_crosswalk_module/src/manager.cpp b/planning/autoware_behavior_velocity_crosswalk_module/src/manager.cpp similarity index 100% rename from planning/behavior_velocity_crosswalk_module/src/manager.cpp rename to planning/autoware_behavior_velocity_crosswalk_module/src/manager.cpp diff --git a/planning/behavior_velocity_crosswalk_module/src/manager.hpp b/planning/autoware_behavior_velocity_crosswalk_module/src/manager.hpp similarity index 100% rename from planning/behavior_velocity_crosswalk_module/src/manager.hpp rename to planning/autoware_behavior_velocity_crosswalk_module/src/manager.hpp diff --git a/planning/behavior_velocity_crosswalk_module/src/occluded_crosswalk.cpp b/planning/autoware_behavior_velocity_crosswalk_module/src/occluded_crosswalk.cpp similarity index 99% rename from planning/behavior_velocity_crosswalk_module/src/occluded_crosswalk.cpp rename to planning/autoware_behavior_velocity_crosswalk_module/src/occluded_crosswalk.cpp index 619e389f3fcf8..9b66802c1e5ed 100644 --- a/planning/behavior_velocity_crosswalk_module/src/occluded_crosswalk.cpp +++ b/planning/autoware_behavior_velocity_crosswalk_module/src/occluded_crosswalk.cpp @@ -14,7 +14,7 @@ #include "occluded_crosswalk.hpp" -#include "behavior_velocity_crosswalk_module/util.hpp" +#include "autoware_behavior_velocity_crosswalk_module/util.hpp" #include #include diff --git a/planning/behavior_velocity_crosswalk_module/src/occluded_crosswalk.hpp b/planning/autoware_behavior_velocity_crosswalk_module/src/occluded_crosswalk.hpp similarity index 100% rename from planning/behavior_velocity_crosswalk_module/src/occluded_crosswalk.hpp rename to planning/autoware_behavior_velocity_crosswalk_module/src/occluded_crosswalk.hpp diff --git a/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp b/planning/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp similarity index 100% rename from planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp rename to planning/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp diff --git a/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp b/planning/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp similarity index 99% rename from planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp rename to planning/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp index 75f75846d4f4b..fe353b24273e6 100644 --- a/planning/behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp +++ b/planning/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp @@ -15,7 +15,7 @@ #ifndef SCENE_CROSSWALK_HPP_ #define SCENE_CROSSWALK_HPP_ -#include "behavior_velocity_crosswalk_module/util.hpp" +#include "autoware_behavior_velocity_crosswalk_module/util.hpp" #include #include diff --git a/planning/behavior_velocity_crosswalk_module/src/util.cpp b/planning/autoware_behavior_velocity_crosswalk_module/src/util.cpp similarity index 99% rename from planning/behavior_velocity_crosswalk_module/src/util.cpp rename to planning/autoware_behavior_velocity_crosswalk_module/src/util.cpp index 883b40b89730f..1e40429e3a704 100644 --- a/planning/behavior_velocity_crosswalk_module/src/util.cpp +++ b/planning/autoware_behavior_velocity_crosswalk_module/src/util.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "behavior_velocity_crosswalk_module/util.hpp" +#include "autoware_behavior_velocity_crosswalk_module/util.hpp" #include #include diff --git a/planning/autoware_behavior_velocity_planner/README.md b/planning/autoware_behavior_velocity_planner/README.md index 83dd33c4bb927..5b6ec1f6fa0e5 100644 --- a/planning/autoware_behavior_velocity_planner/README.md +++ b/planning/autoware_behavior_velocity_planner/README.md @@ -8,7 +8,7 @@ It loads modules as plugins. Please refer to the links listed below for detail o ![Architecture](./docs/BehaviorVelocityPlanner-Architecture.drawio.svg) - [Blind Spot](../autoware_behavior_velocity_blind_spot_module/README.md) -- [Crosswalk](../behavior_velocity_crosswalk_module/README.md) +- [Crosswalk](../autoware_behavior_velocity_crosswalk_module/README.md) - [Walkway](../autoware_behavior_velocity_walkway_module/README.md) - [Detection Area](../behavior_velocity_detection_area_module/README.md) - [Intersection](../autoware_behavior_velocity_intersection_module/README.md) diff --git a/planning/autoware_behavior_velocity_planner/package.xml b/planning/autoware_behavior_velocity_planner/package.xml index d979da6e7a0ef..39bc432dc5134 100644 --- a/planning/autoware_behavior_velocity_planner/package.xml +++ b/planning/autoware_behavior_velocity_planner/package.xml @@ -66,6 +66,7 @@ ament_cmake_ros ament_lint_auto autoware_behavior_velocity_blind_spot_module + autoware_behavior_velocity_crosswalk_module autoware_behavior_velocity_intersection_module autoware_behavior_velocity_occlusion_spot_module autoware_behavior_velocity_run_out_module @@ -74,7 +75,7 @@ autoware_behavior_velocity_virtual_traffic_light_module autoware_behavior_velocity_walkway_module autoware_lint_common - behavior_velocity_crosswalk_module + behavior_velocity_blind_spot_module behavior_velocity_detection_area_module behavior_velocity_no_drivable_lane_module behavior_velocity_no_stopping_area_module diff --git a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp index 72a8514db4bad..e630783f82d6b 100644 --- a/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp +++ b/planning/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp @@ -96,7 +96,7 @@ std::shared_ptr generateNode() velocity_smoother_dir + "/config/Analytical.param.yaml", behavior_velocity_planner_dir + "/config/behavior_velocity_planner.param.yaml", get_behavior_velocity_module_config("blind_spot"), - get_behavior_velocity_module_config_no_prefix("crosswalk"), + get_behavior_velocity_module_config("crosswalk"), get_behavior_velocity_module_config("walkway"), get_behavior_velocity_module_config_no_prefix("detection_area"), get_behavior_velocity_module_config("intersection"), diff --git a/planning/autoware_behavior_velocity_run_out_module/package.xml b/planning/autoware_behavior_velocity_run_out_module/package.xml index a2f8d50f01b1d..433c1470c4bbe 100644 --- a/planning/autoware_behavior_velocity_run_out_module/package.xml +++ b/planning/autoware_behavior_velocity_run_out_module/package.xml @@ -19,12 +19,12 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_velocity_crosswalk_module autoware_behavior_velocity_planner_common autoware_perception_msgs autoware_planning_msgs autoware_route_handler autoware_vehicle_info_utils - behavior_velocity_crosswalk_module eigen geometry_msgs libboost-dev diff --git a/planning/autoware_behavior_velocity_run_out_module/src/scene.cpp b/planning/autoware_behavior_velocity_run_out_module/src/scene.cpp index e492bc99be615..e04814eba48f0 100644 --- a/planning/autoware_behavior_velocity_run_out_module/src/scene.cpp +++ b/planning/autoware_behavior_velocity_run_out_module/src/scene.cpp @@ -14,7 +14,7 @@ #include "scene.hpp" -#include "behavior_velocity_crosswalk_module/util.hpp" +#include "autoware_behavior_velocity_crosswalk_module/util.hpp" #include "path_utils.hpp" #include diff --git a/planning/autoware_behavior_velocity_walkway_module/package.xml b/planning/autoware_behavior_velocity_walkway_module/package.xml index 08d36b1677c27..544cb9fb1b84f 100644 --- a/planning/autoware_behavior_velocity_walkway_module/package.xml +++ b/planning/autoware_behavior_velocity_walkway_module/package.xml @@ -17,11 +17,11 @@ ament_cmake_auto autoware_cmake + autoware_behavior_velocity_crosswalk_module autoware_behavior_velocity_planner_common autoware_planning_msgs autoware_route_handler autoware_vehicle_info_utils - behavior_velocity_crosswalk_module geometry_msgs lanelet2_extension libboost-dev diff --git a/planning/autoware_behavior_velocity_walkway_module/src/scene_walkway.hpp b/planning/autoware_behavior_velocity_walkway_module/src/scene_walkway.hpp index e6c8f61ba656e..675523c6658e3 100644 --- a/planning/autoware_behavior_velocity_walkway_module/src/scene_walkway.hpp +++ b/planning/autoware_behavior_velocity_walkway_module/src/scene_walkway.hpp @@ -15,7 +15,7 @@ #ifndef SCENE_WALKWAY_HPP_ #define SCENE_WALKWAY_HPP_ -#include "behavior_velocity_crosswalk_module/util.hpp" +#include "autoware_behavior_velocity_crosswalk_module/util.hpp" #include "scene_walkway.hpp" #include From 822519d4721e55a3f24dbb4ecc77c546bd9639d9 Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Tue, 11 Jun 2024 11:37:09 +0900 Subject: [PATCH 103/142] refactor(obstacle_cruise_planner)!: add autoware_ prefix (#7419) Signed-off-by: Yuki Takagi --- .github/CODEOWNERS | 2 +- .../motion_planning.launch.xml | 2 +- launch/tier4_planning_launch/package.xml | 2 +- planning/.pages | 4 ++-- .../CMakeLists.txt | 14 +++++++------- .../README.md | 10 +++++----- .../config/default_common.param.yaml | 0 .../config/obstacle_cruise_planner.param.yaml | 0 .../plot_juggler_obstacle_cruise_planner.xml | 0 .../docs/debug.md | 0 .../common_structs.hpp | 8 ++++---- .../node.hpp | 18 +++++++++--------- .../optimization_based_planner.hpp | 17 +++++++++-------- .../optimization_based_planner/s_boundary.hpp | 6 +++--- .../velocity_optimizer.hpp | 8 ++++---- .../cruise_planning_debug_info.hpp | 6 +++--- .../pid_based_planner/pid_based_planner.hpp | 12 ++++++------ .../pid_based_planner/pid_controller.hpp | 6 +++--- .../planner_interface.hpp | 14 +++++++------- .../polygon_utils.hpp | 10 +++++----- .../stop_planning_debug_info.hpp | 6 +++--- .../type_alias.hpp | 6 +++--- .../utils.hpp | 8 ++++---- .../launch/obstacle_cruise_planner.launch.xml | 4 ++-- .../media/collision_point.png | Bin .../media/cruise_visualization.png | Bin .../media/detection_area.png | Bin ...determine_cruise_stop_slow_down.drawio.svg | 0 .../media/slow_down_planning.drawio.svg | 0 .../media/slow_down_velocity_calculation.svg | 0 .../media/slow_down_visualization.png | Bin .../media/stop_visualization.png | Bin .../package.xml | 4 ++-- .../scripts/trajectory_visualizer.py | 0 .../src/node.cpp | 12 ++++++------ .../optimization_based_planner.cpp | 4 ++-- .../velocity_optimizer.cpp | 2 +- .../pid_based_planner/pid_based_planner.cpp | 4 ++-- .../src/planner_interface.cpp | 2 +- .../src/polygon_utils.cpp | 2 +- .../src/utils.cpp | 2 +- ...obstacle_cruise_planner_node_interface.cpp | 8 ++++---- planning/obstacle_stop_planner/README.md | 2 +- 43 files changed, 103 insertions(+), 102 deletions(-) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/CMakeLists.txt (65%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/README.md (97%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/config/default_common.param.yaml (100%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/config/obstacle_cruise_planner.param.yaml (100%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/config/plot_juggler_obstacle_cruise_planner.xml (100%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/docs/debug.md (100%) rename planning/{obstacle_cruise_planner/include/obstacle_cruise_planner => autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner}/common_structs.hpp (97%) rename planning/{obstacle_cruise_planner/include/obstacle_cruise_planner => autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner}/node.hpp (95%) rename planning/{obstacle_cruise_planner/include/obstacle_cruise_planner => autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner}/optimization_based_planner/optimization_based_planner.hpp (86%) rename planning/{obstacle_cruise_planner/include/obstacle_cruise_planner => autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner}/optimization_based_planner/s_boundary.hpp (78%) rename planning/{obstacle_cruise_planner/include/obstacle_cruise_planner => autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner}/optimization_based_planner/velocity_optimizer.hpp (83%) rename planning/{obstacle_cruise_planner/include/obstacle_cruise_planner => autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner}/pid_based_planner/cruise_planning_debug_info.hpp (90%) rename planning/{obstacle_cruise_planner/include/obstacle_cruise_planner => autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner}/pid_based_planner/pid_based_planner.hpp (90%) rename planning/{obstacle_cruise_planner/include/obstacle_cruise_planner => autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner}/pid_based_planner/pid_controller.hpp (85%) rename planning/{obstacle_cruise_planner/include/obstacle_cruise_planner => autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner}/planner_interface.hpp (97%) rename planning/{obstacle_cruise_planner/include/obstacle_cruise_planner => autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner}/polygon_utils.hpp (86%) rename planning/{obstacle_cruise_planner/include/obstacle_cruise_planner => autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner}/stop_planning_debug_info.hpp (91%) rename planning/{obstacle_cruise_planner/include/obstacle_cruise_planner => autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner}/type_alias.hpp (94%) rename planning/{obstacle_cruise_planner/include/obstacle_cruise_planner => autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner}/utils.hpp (92%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/launch/obstacle_cruise_planner.launch.xml (88%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/media/collision_point.png (100%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/media/cruise_visualization.png (100%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/media/detection_area.png (100%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/media/determine_cruise_stop_slow_down.drawio.svg (100%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/media/slow_down_planning.drawio.svg (100%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/media/slow_down_velocity_calculation.svg (100%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/media/slow_down_visualization.png (100%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/media/stop_visualization.png (100%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/package.xml (93%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/scripts/trajectory_visualizer.py (100%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/src/node.cpp (99%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/src/optimization_based_planner/optimization_based_planner.cpp (99%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/src/optimization_based_planner/velocity_optimizer.cpp (99%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/src/pid_based_planner/pid_based_planner.cpp (99%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/src/planner_interface.cpp (99%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/src/polygon_utils.cpp (99%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/src/utils.cpp (98%) rename planning/{obstacle_cruise_planner => autoware_obstacle_cruise_planner}/test/test_obstacle_cruise_planner_node_interface.cpp (93%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index e994654ece1c2..b68296689cabc 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -190,7 +190,7 @@ planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/** planning/motion_velocity_planner/autoware_motion_velocity_planner_common/** maxime.clement@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_planner_node/** maxime.clement@tier4.jp planning/autoware_objects_of_interest_marker_interface/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp zulfaqar.azmi@tier4.jp -planning/obstacle_cruise_planner/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp +planning/autoware_obstacle_cruise_planner/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp planning/obstacle_stop_planner/** berkay@leodrive.ai bnk@leodrive.ai satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp planning/obstacle_velocity_limiter/** maxime.clement@tier4.jp planning/autoware_path_smoother/** maxime.clement@tier4.jp takayuki.murooka@tier4.jp diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml index eba79b905db16..aab3241dba528 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml @@ -169,7 +169,7 @@ - + diff --git a/launch/tier4_planning_launch/package.xml b/launch/tier4_planning_launch/package.xml index 73783936a84a1..65cd745656cbb 100644 --- a/launch/tier4_planning_launch/package.xml +++ b/launch/tier4_planning_launch/package.xml @@ -63,6 +63,7 @@ autoware_external_velocity_limit_selector autoware_freespace_planner autoware_mission_planner + autoware_obstacle_cruise_planner autoware_path_optimizer autoware_planning_topic_converter autoware_planning_validator @@ -72,7 +73,6 @@ autoware_velocity_smoother behavior_path_planner glog_component - obstacle_cruise_planner obstacle_stop_planner planning_evaluator diff --git a/planning/.pages b/planning/.pages index 58b60481f90bc..7ed1d62bef738 100644 --- a/planning/.pages +++ b/planning/.pages @@ -47,8 +47,8 @@ nav: - 'Model Predictive Trajectory (MPT)': planning/autoware_path_optimizer/docs/mpt - 'How to Debug': planning/autoware_path_optimizer/docs/debug - 'Obstacle Cruise Planner': - - 'About Obstacle Cruise': planning/obstacle_cruise_planner - - 'How to Debug': planning/obstacle_cruise_planner/docs/debug + - 'About Obstacle Cruise': planning/autoware_obstacle_cruise_planner + - 'How to Debug': planning/autoware_obstacle_cruise_planner/docs/debug - 'Obstacle Stop Planner': planning/obstacle_stop_planner - 'Obstacle Velocity Limiter': planning/obstacle_velocity_limiter - 'Path Smoother': diff --git a/planning/obstacle_cruise_planner/CMakeLists.txt b/planning/autoware_obstacle_cruise_planner/CMakeLists.txt similarity index 65% rename from planning/obstacle_cruise_planner/CMakeLists.txt rename to planning/autoware_obstacle_cruise_planner/CMakeLists.txt index 3686b7b648c9d..be20a9140a6a8 100644 --- a/planning/obstacle_cruise_planner/CMakeLists.txt +++ b/planning/autoware_obstacle_cruise_planner/CMakeLists.txt @@ -1,12 +1,12 @@ cmake_minimum_required(VERSION 3.14) -project(obstacle_cruise_planner) +project(autoware_obstacle_cruise_planner) find_package(autoware_cmake REQUIRED) autoware_package() find_package(Eigen3 REQUIRED) -ament_auto_add_library(obstacle_cruise_planner_core SHARED +ament_auto_add_library(autoware_obstacle_cruise_planner_core SHARED src/node.cpp src/utils.cpp src/polygon_utils.cpp @@ -16,19 +16,19 @@ ament_auto_add_library(obstacle_cruise_planner_core SHARED src/planner_interface.cpp ) -rclcpp_components_register_node(obstacle_cruise_planner_core - PLUGIN "motion_planning::ObstacleCruisePlannerNode" - EXECUTABLE obstacle_cruise_planner +rclcpp_components_register_node(autoware_obstacle_cruise_planner_core + PLUGIN "autoware::motion_planning::ObstacleCruisePlannerNode" + EXECUTABLE autoware_obstacle_cruise_planner ) if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() ament_add_ros_isolated_gtest(test_${PROJECT_NAME} - test/test_${PROJECT_NAME}_node_interface.cpp + test/test_obstacle_cruise_planner_node_interface.cpp ) target_link_libraries(test_${PROJECT_NAME} - obstacle_cruise_planner_core + autoware_obstacle_cruise_planner_core ) endif() diff --git a/planning/obstacle_cruise_planner/README.md b/planning/autoware_obstacle_cruise_planner/README.md similarity index 97% rename from planning/obstacle_cruise_planner/README.md rename to planning/autoware_obstacle_cruise_planner/README.md index 23be6908cbcfe..1cb8128110e7c 100644 --- a/planning/obstacle_cruise_planner/README.md +++ b/planning/autoware_obstacle_cruise_planner/README.md @@ -2,7 +2,7 @@ ## Overview -The `obstacle_cruise_planner` package has following modules. +The `autoware_obstacle_cruise_planner` package has following modules. - Stop planning - stop when there is a static obstacle near the trajectory. @@ -286,7 +286,7 @@ The calculated velocity is inserted in the trajectory where the obstacle is insi ### Flowchart -Successive functions consist of `obstacle_cruise_planner` as follows. +Successive functions consist of `autoware_obstacle_cruise_planner` as follows. Various algorithms for stop and cruise planning will be implemented, and one of them is designated depending on the use cases. The core algorithm implementation `generateTrajectory` depends on the designated algorithm. @@ -380,9 +380,9 @@ under construction ### Prioritization of behavior module's stop point When stopping for a pedestrian walking on the crosswalk, the behavior module inserts the zero velocity in the trajectory in front of the crosswalk. -Also `obstacle_cruise_planner`'s stop planning also works, and the ego may not reach the behavior module's stop point since the safe distance defined in `obstacle_cruise_planner` may be longer than the behavior module's safe distance. -To resolve this non-alignment of the stop point between the behavior module and `obstacle_cruise_planner`, `common.min_behavior_stop_margin` is defined. -In the case of the crosswalk described above, `obstacle_cruise_planner` inserts the stop point with a distance `common.min_behavior_stop_margin` at minimum between the ego and obstacle. +Also `autoware_obstacle_cruise_planner`'s stop planning also works, and the ego may not reach the behavior module's stop point since the safe distance defined in `autoware_obstacle_cruise_planner` may be longer than the behavior module's safe distance. +To resolve this non-alignment of the stop point between the behavior module and `autoware_obstacle_cruise_planner`, `common.min_behavior_stop_margin` is defined. +In the case of the crosswalk described above, `autoware_obstacle_cruise_planner` inserts the stop point with a distance `common.min_behavior_stop_margin` at minimum between the ego and obstacle. | Parameter | Type | Description | | --------------------------------- | ------ | ---------------------------------------------------------------------- | diff --git a/planning/obstacle_cruise_planner/config/default_common.param.yaml b/planning/autoware_obstacle_cruise_planner/config/default_common.param.yaml similarity index 100% rename from planning/obstacle_cruise_planner/config/default_common.param.yaml rename to planning/autoware_obstacle_cruise_planner/config/default_common.param.yaml diff --git a/planning/obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml b/planning/autoware_obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml similarity index 100% rename from planning/obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml rename to planning/autoware_obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml diff --git a/planning/obstacle_cruise_planner/config/plot_juggler_obstacle_cruise_planner.xml b/planning/autoware_obstacle_cruise_planner/config/plot_juggler_obstacle_cruise_planner.xml similarity index 100% rename from planning/obstacle_cruise_planner/config/plot_juggler_obstacle_cruise_planner.xml rename to planning/autoware_obstacle_cruise_planner/config/plot_juggler_obstacle_cruise_planner.xml diff --git a/planning/obstacle_cruise_planner/docs/debug.md b/planning/autoware_obstacle_cruise_planner/docs/debug.md similarity index 100% rename from planning/obstacle_cruise_planner/docs/debug.md rename to planning/autoware_obstacle_cruise_planner/docs/debug.md diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/common_structs.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/common_structs.hpp similarity index 97% rename from planning/obstacle_cruise_planner/include/obstacle_cruise_planner/common_structs.hpp rename to planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/common_structs.hpp index 34ae20980d3fd..9b5c277589e67 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/common_structs.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/common_structs.hpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBSTACLE_CRUISE_PLANNER__COMMON_STRUCTS_HPP_ -#define OBSTACLE_CRUISE_PLANNER__COMMON_STRUCTS_HPP_ +#ifndef AUTOWARE_OBSTACLE_CRUISE_PLANNER__COMMON_STRUCTS_HPP_ +#define AUTOWARE_OBSTACLE_CRUISE_PLANNER__COMMON_STRUCTS_HPP_ +#include "autoware_obstacle_cruise_planner/type_alias.hpp" #include "motion_utils/trajectory/conversion.hpp" #include "motion_utils/trajectory/interpolation.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include "obstacle_cruise_planner/type_alias.hpp" #include "tier4_autoware_utils/geometry/boost_polygon_utils.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" #include "tier4_autoware_utils/ros/uuid_helper.hpp" @@ -302,4 +302,4 @@ struct EgoNearestParam double yaw_threshold; }; -#endif // OBSTACLE_CRUISE_PLANNER__COMMON_STRUCTS_HPP_ +#endif // AUTOWARE_OBSTACLE_CRUISE_PLANNER__COMMON_STRUCTS_HPP_ diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/node.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/node.hpp similarity index 95% rename from planning/obstacle_cruise_planner/include/obstacle_cruise_planner/node.hpp rename to planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/node.hpp index 8f9724d9c8bed..dcea7e1dc257b 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/node.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/node.hpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBSTACLE_CRUISE_PLANNER__NODE_HPP_ -#define OBSTACLE_CRUISE_PLANNER__NODE_HPP_ +#ifndef AUTOWARE_OBSTACLE_CRUISE_PLANNER__NODE_HPP_ +#define AUTOWARE_OBSTACLE_CRUISE_PLANNER__NODE_HPP_ -#include "obstacle_cruise_planner/common_structs.hpp" -#include "obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp" -#include "obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp" -#include "obstacle_cruise_planner/type_alias.hpp" +#include "autoware_obstacle_cruise_planner/common_structs.hpp" +#include "autoware_obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp" +#include "autoware_obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp" +#include "autoware_obstacle_cruise_planner/type_alias.hpp" #include "signal_processing/lowpass_filter_1d.hpp" #include "tier4_autoware_utils/ros/logger_level_configure.hpp" #include "tier4_autoware_utils/ros/polling_subscriber.hpp" @@ -36,7 +36,7 @@ #include #include -namespace motion_planning +namespace autoware::motion_planning { class ObstacleCruisePlannerNode : public rclcpp::Node { @@ -278,6 +278,6 @@ class ObstacleCruisePlannerNode : public rclcpp::Node std::unique_ptr published_time_publisher_; }; -} // namespace motion_planning +} // namespace autoware::motion_planning -#endif // OBSTACLE_CRUISE_PLANNER__NODE_HPP_ +#endif // AUTOWARE_OBSTACLE_CRUISE_PLANNER__NODE_HPP_ diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp similarity index 86% rename from planning/obstacle_cruise_planner/include/obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp rename to planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp index a832e74c76db0..db807608caca4 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__OPTIMIZATION_BASED_PLANNER_HPP_ -#define OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__OPTIMIZATION_BASED_PLANNER_HPP_ +#ifndef AUTOWARE_OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__OPTIMIZATION_BASED_PLANNER_HPP_ // NOLINT +#define AUTOWARE_OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__OPTIMIZATION_BASED_PLANNER_HPP_ // NOLINT +#include "autoware_obstacle_cruise_planner/optimization_based_planner/s_boundary.hpp" +#include "autoware_obstacle_cruise_planner/optimization_based_planner/velocity_optimizer.hpp" +#include "autoware_obstacle_cruise_planner/planner_interface.hpp" +#include "autoware_obstacle_cruise_planner/type_alias.hpp" #include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" -#include "obstacle_cruise_planner/optimization_based_planner/s_boundary.hpp" -#include "obstacle_cruise_planner/optimization_based_planner/velocity_optimizer.hpp" -#include "obstacle_cruise_planner/planner_interface.hpp" -#include "obstacle_cruise_planner/type_alias.hpp" #include #include @@ -117,5 +117,6 @@ class OptimizationBasedPlanner : public PlannerInterface double engage_exit_ratio_; double stop_dist_to_prohibit_engage_; }; - -#endif // OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__OPTIMIZATION_BASED_PLANNER_HPP_ +// clang-format off +#endif // AUTOWARE_OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__OPTIMIZATION_BASED_PLANNER_HPP_ // NOLINT +// clang-format on diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/optimization_based_planner/s_boundary.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/optimization_based_planner/s_boundary.hpp similarity index 78% rename from planning/obstacle_cruise_planner/include/obstacle_cruise_planner/optimization_based_planner/s_boundary.hpp rename to planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/optimization_based_planner/s_boundary.hpp index 1665434ad5969..d033e4e35aef0 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/optimization_based_planner/s_boundary.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/optimization_based_planner/s_boundary.hpp @@ -11,8 +11,8 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__S_BOUNDARY_HPP_ -#define OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__S_BOUNDARY_HPP_ +#ifndef AUTOWARE_OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__S_BOUNDARY_HPP_ +#define AUTOWARE_OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__S_BOUNDARY_HPP_ #include #include @@ -30,4 +30,4 @@ class SBoundary using SBoundaries = std::vector; -#endif // OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__S_BOUNDARY_HPP_ +#endif // AUTOWARE_OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__S_BOUNDARY_HPP_ diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/optimization_based_planner/velocity_optimizer.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/optimization_based_planner/velocity_optimizer.hpp similarity index 83% rename from planning/obstacle_cruise_planner/include/obstacle_cruise_planner/optimization_based_planner/velocity_optimizer.hpp rename to planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/optimization_based_planner/velocity_optimizer.hpp index 9d3bb66859f2d..49cf96ce81e0b 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/optimization_based_planner/velocity_optimizer.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/optimization_based_planner/velocity_optimizer.hpp @@ -11,10 +11,10 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__VELOCITY_OPTIMIZER_HPP_ -#define OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__VELOCITY_OPTIMIZER_HPP_ +#ifndef AUTOWARE_OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__VELOCITY_OPTIMIZER_HPP_ +#define AUTOWARE_OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__VELOCITY_OPTIMIZER_HPP_ -#include "obstacle_cruise_planner/optimization_based_planner/s_boundary.hpp" +#include "autoware_obstacle_cruise_planner/optimization_based_planner/s_boundary.hpp" #include "osqp_interface/osqp_interface.hpp" #include @@ -72,4 +72,4 @@ class VelocityOptimizer autoware::common::osqp::OSQPInterface qp_solver_; }; -#endif // OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__VELOCITY_OPTIMIZER_HPP_ +#endif // AUTOWARE_OBSTACLE_CRUISE_PLANNER__OPTIMIZATION_BASED_PLANNER__VELOCITY_OPTIMIZER_HPP_ diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/pid_based_planner/cruise_planning_debug_info.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/pid_based_planner/cruise_planning_debug_info.hpp similarity index 90% rename from planning/obstacle_cruise_planner/include/obstacle_cruise_planner/pid_based_planner/cruise_planning_debug_info.hpp rename to planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/pid_based_planner/cruise_planning_debug_info.hpp index 3ab5dd0a011d9..98679b5cbb515 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/pid_based_planner/cruise_planning_debug_info.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/pid_based_planner/cruise_planning_debug_info.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__CRUISE_PLANNING_DEBUG_INFO_HPP_ -#define OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__CRUISE_PLANNING_DEBUG_INFO_HPP_ +#ifndef AUTOWARE_OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__CRUISE_PLANNING_DEBUG_INFO_HPP_ +#define AUTOWARE_OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__CRUISE_PLANNING_DEBUG_INFO_HPP_ #include @@ -94,4 +94,4 @@ class CruisePlanningDebugInfo std::array(TYPE::SIZE)> info_; }; -#endif // OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__CRUISE_PLANNING_DEBUG_INFO_HPP_ +#endif // AUTOWARE_OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__CRUISE_PLANNING_DEBUG_INFO_HPP_ diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp similarity index 90% rename from planning/obstacle_cruise_planner/include/obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp rename to planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp index 9d688cdac419b..5fac88e909764 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__PID_BASED_PLANNER_HPP_ -#define OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__PID_BASED_PLANNER_HPP_ +#ifndef AUTOWARE_OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__PID_BASED_PLANNER_HPP_ +#define AUTOWARE_OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__PID_BASED_PLANNER_HPP_ -#include "obstacle_cruise_planner/pid_based_planner/cruise_planning_debug_info.hpp" -#include "obstacle_cruise_planner/pid_based_planner/pid_controller.hpp" -#include "obstacle_cruise_planner/planner_interface.hpp" +#include "autoware_obstacle_cruise_planner/pid_based_planner/cruise_planning_debug_info.hpp" +#include "autoware_obstacle_cruise_planner/pid_based_planner/pid_controller.hpp" +#include "autoware_obstacle_cruise_planner/planner_interface.hpp" #include "signal_processing/lowpass_filter_1d.hpp" #include "visualization_msgs/msg/marker_array.hpp" @@ -137,4 +137,4 @@ class PIDBasedPlanner : public PlannerInterface std::function error_func_; }; -#endif // OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__PID_BASED_PLANNER_HPP_ +#endif // AUTOWARE_OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__PID_BASED_PLANNER_HPP_ diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/pid_based_planner/pid_controller.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/pid_based_planner/pid_controller.hpp similarity index 85% rename from planning/obstacle_cruise_planner/include/obstacle_cruise_planner/pid_based_planner/pid_controller.hpp rename to planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/pid_based_planner/pid_controller.hpp index dbfaaa8a89700..f8f7a483df2a1 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/pid_based_planner/pid_controller.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/pid_based_planner/pid_controller.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__PID_CONTROLLER_HPP_ -#define OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__PID_CONTROLLER_HPP_ +#ifndef AUTOWARE_OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__PID_CONTROLLER_HPP_ +#define AUTOWARE_OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__PID_CONTROLLER_HPP_ #include @@ -59,4 +59,4 @@ class PIDController std::optional prev_error_; }; -#endif // OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__PID_CONTROLLER_HPP_ +#endif // AUTOWARE_OBSTACLE_CRUISE_PLANNER__PID_BASED_PLANNER__PID_CONTROLLER_HPP_ diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/planner_interface.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/planner_interface.hpp similarity index 97% rename from planning/obstacle_cruise_planner/include/obstacle_cruise_planner/planner_interface.hpp rename to planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/planner_interface.hpp index f3dadbf5e5e51..2685b3d061ff1 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/planner_interface.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/planner_interface.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBSTACLE_CRUISE_PLANNER__PLANNER_INTERFACE_HPP_ -#define OBSTACLE_CRUISE_PLANNER__PLANNER_INTERFACE_HPP_ +#ifndef AUTOWARE_OBSTACLE_CRUISE_PLANNER__PLANNER_INTERFACE_HPP_ +#define AUTOWARE_OBSTACLE_CRUISE_PLANNER__PLANNER_INTERFACE_HPP_ +#include "autoware_obstacle_cruise_planner/common_structs.hpp" +#include "autoware_obstacle_cruise_planner/stop_planning_debug_info.hpp" +#include "autoware_obstacle_cruise_planner/type_alias.hpp" +#include "autoware_obstacle_cruise_planner/utils.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include "obstacle_cruise_planner/common_structs.hpp" -#include "obstacle_cruise_planner/stop_planning_debug_info.hpp" -#include "obstacle_cruise_planner/type_alias.hpp" -#include "obstacle_cruise_planner/utils.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" @@ -425,4 +425,4 @@ class PlannerInterface std::nullopt}; }; -#endif // OBSTACLE_CRUISE_PLANNER__PLANNER_INTERFACE_HPP_ +#endif // AUTOWARE_OBSTACLE_CRUISE_PLANNER__PLANNER_INTERFACE_HPP_ diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/polygon_utils.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/polygon_utils.hpp similarity index 86% rename from planning/obstacle_cruise_planner/include/obstacle_cruise_planner/polygon_utils.hpp rename to planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/polygon_utils.hpp index 455d40a7a7e87..621e4decbbf1e 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/polygon_utils.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/polygon_utils.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBSTACLE_CRUISE_PLANNER__POLYGON_UTILS_HPP_ -#define OBSTACLE_CRUISE_PLANNER__POLYGON_UTILS_HPP_ +#ifndef AUTOWARE_OBSTACLE_CRUISE_PLANNER__POLYGON_UTILS_HPP_ +#define AUTOWARE_OBSTACLE_CRUISE_PLANNER__POLYGON_UTILS_HPP_ +#include "autoware_obstacle_cruise_planner/common_structs.hpp" +#include "autoware_obstacle_cruise_planner/type_alias.hpp" #include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" -#include "obstacle_cruise_planner/common_structs.hpp" -#include "obstacle_cruise_planner/type_alias.hpp" #include "tier4_autoware_utils/geometry/boost_geometry.hpp" #include @@ -52,4 +52,4 @@ std::vector getCollisionPoints( } // namespace polygon_utils -#endif // OBSTACLE_CRUISE_PLANNER__POLYGON_UTILS_HPP_ +#endif // AUTOWARE_OBSTACLE_CRUISE_PLANNER__POLYGON_UTILS_HPP_ diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/stop_planning_debug_info.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/stop_planning_debug_info.hpp similarity index 91% rename from planning/obstacle_cruise_planner/include/obstacle_cruise_planner/stop_planning_debug_info.hpp rename to planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/stop_planning_debug_info.hpp index 7c682a1f63c01..7167ddbdf6ad1 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/stop_planning_debug_info.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/stop_planning_debug_info.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBSTACLE_CRUISE_PLANNER__STOP_PLANNING_DEBUG_INFO_HPP_ -#define OBSTACLE_CRUISE_PLANNER__STOP_PLANNING_DEBUG_INFO_HPP_ +#ifndef AUTOWARE_OBSTACLE_CRUISE_PLANNER__STOP_PLANNING_DEBUG_INFO_HPP_ +#define AUTOWARE_OBSTACLE_CRUISE_PLANNER__STOP_PLANNING_DEBUG_INFO_HPP_ #include @@ -85,4 +85,4 @@ class StopPlanningDebugInfo std::array(TYPE::SIZE)> info_; }; -#endif // OBSTACLE_CRUISE_PLANNER__STOP_PLANNING_DEBUG_INFO_HPP_ +#endif // AUTOWARE_OBSTACLE_CRUISE_PLANNER__STOP_PLANNING_DEBUG_INFO_HPP_ diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/type_alias.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/type_alias.hpp similarity index 94% rename from planning/obstacle_cruise_planner/include/obstacle_cruise_planner/type_alias.hpp rename to planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/type_alias.hpp index 196526c22aac9..7b435acb5f13e 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/type_alias.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/type_alias.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBSTACLE_CRUISE_PLANNER__TYPE_ALIAS_HPP_ -#define OBSTACLE_CRUISE_PLANNER__TYPE_ALIAS_HPP_ +#ifndef AUTOWARE_OBSTACLE_CRUISE_PLANNER__TYPE_ALIAS_HPP_ +#define AUTOWARE_OBSTACLE_CRUISE_PLANNER__TYPE_ALIAS_HPP_ #include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" @@ -63,4 +63,4 @@ namespace bg = boost::geometry; using tier4_autoware_utils::Point2d; using tier4_autoware_utils::Polygon2d; -#endif // OBSTACLE_CRUISE_PLANNER__TYPE_ALIAS_HPP_ +#endif // AUTOWARE_OBSTACLE_CRUISE_PLANNER__TYPE_ALIAS_HPP_ diff --git a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/utils.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/utils.hpp similarity index 92% rename from planning/obstacle_cruise_planner/include/obstacle_cruise_planner/utils.hpp rename to planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/utils.hpp index 48bab514cbf77..3b8093aea76a1 100644 --- a/planning/obstacle_cruise_planner/include/obstacle_cruise_planner/utils.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware_obstacle_cruise_planner/utils.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBSTACLE_CRUISE_PLANNER__UTILS_HPP_ -#define OBSTACLE_CRUISE_PLANNER__UTILS_HPP_ +#ifndef AUTOWARE_OBSTACLE_CRUISE_PLANNER__UTILS_HPP_ +#define AUTOWARE_OBSTACLE_CRUISE_PLANNER__UTILS_HPP_ +#include "autoware_obstacle_cruise_planner/type_alias.hpp" #include "common_structs.hpp" -#include "obstacle_cruise_planner/type_alias.hpp" #include "tier4_autoware_utils/geometry/geometry.hpp" #include @@ -95,4 +95,4 @@ size_t getIndexWithLongitudinalOffset( } } // namespace obstacle_cruise_utils -#endif // OBSTACLE_CRUISE_PLANNER__UTILS_HPP_ +#endif // AUTOWARE_OBSTACLE_CRUISE_PLANNER__UTILS_HPP_ diff --git a/planning/obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml b/planning/autoware_obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml similarity index 88% rename from planning/obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml rename to planning/autoware_obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml index 8db1ae8b46223..aaf6db3e36613 100644 --- a/planning/obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml +++ b/planning/autoware_obstacle_cruise_planner/launch/obstacle_cruise_planner.launch.xml @@ -1,7 +1,7 @@ - + @@ -17,7 +17,7 @@ - + diff --git a/planning/obstacle_cruise_planner/media/collision_point.png b/planning/autoware_obstacle_cruise_planner/media/collision_point.png similarity index 100% rename from planning/obstacle_cruise_planner/media/collision_point.png rename to planning/autoware_obstacle_cruise_planner/media/collision_point.png diff --git a/planning/obstacle_cruise_planner/media/cruise_visualization.png b/planning/autoware_obstacle_cruise_planner/media/cruise_visualization.png similarity index 100% rename from planning/obstacle_cruise_planner/media/cruise_visualization.png rename to planning/autoware_obstacle_cruise_planner/media/cruise_visualization.png diff --git a/planning/obstacle_cruise_planner/media/detection_area.png b/planning/autoware_obstacle_cruise_planner/media/detection_area.png similarity index 100% rename from planning/obstacle_cruise_planner/media/detection_area.png rename to planning/autoware_obstacle_cruise_planner/media/detection_area.png diff --git a/planning/obstacle_cruise_planner/media/determine_cruise_stop_slow_down.drawio.svg b/planning/autoware_obstacle_cruise_planner/media/determine_cruise_stop_slow_down.drawio.svg similarity index 100% rename from planning/obstacle_cruise_planner/media/determine_cruise_stop_slow_down.drawio.svg rename to planning/autoware_obstacle_cruise_planner/media/determine_cruise_stop_slow_down.drawio.svg diff --git a/planning/obstacle_cruise_planner/media/slow_down_planning.drawio.svg b/planning/autoware_obstacle_cruise_planner/media/slow_down_planning.drawio.svg similarity index 100% rename from planning/obstacle_cruise_planner/media/slow_down_planning.drawio.svg rename to planning/autoware_obstacle_cruise_planner/media/slow_down_planning.drawio.svg diff --git a/planning/obstacle_cruise_planner/media/slow_down_velocity_calculation.svg b/planning/autoware_obstacle_cruise_planner/media/slow_down_velocity_calculation.svg similarity index 100% rename from planning/obstacle_cruise_planner/media/slow_down_velocity_calculation.svg rename to planning/autoware_obstacle_cruise_planner/media/slow_down_velocity_calculation.svg diff --git a/planning/obstacle_cruise_planner/media/slow_down_visualization.png b/planning/autoware_obstacle_cruise_planner/media/slow_down_visualization.png similarity index 100% rename from planning/obstacle_cruise_planner/media/slow_down_visualization.png rename to planning/autoware_obstacle_cruise_planner/media/slow_down_visualization.png diff --git a/planning/obstacle_cruise_planner/media/stop_visualization.png b/planning/autoware_obstacle_cruise_planner/media/stop_visualization.png similarity index 100% rename from planning/obstacle_cruise_planner/media/stop_visualization.png rename to planning/autoware_obstacle_cruise_planner/media/stop_visualization.png diff --git a/planning/obstacle_cruise_planner/package.xml b/planning/autoware_obstacle_cruise_planner/package.xml similarity index 93% rename from planning/obstacle_cruise_planner/package.xml rename to planning/autoware_obstacle_cruise_planner/package.xml index 2a6e240093b14..2d3a96abfd81d 100644 --- a/planning/obstacle_cruise_planner/package.xml +++ b/planning/autoware_obstacle_cruise_planner/package.xml @@ -1,8 +1,8 @@ - obstacle_cruise_planner + autoware_obstacle_cruise_planner 0.1.0 - The obstacle_cruise_planner package + The autoware_obstacle_cruise_planner package Takayuki Murooka Kosuke Takeuchi diff --git a/planning/obstacle_cruise_planner/scripts/trajectory_visualizer.py b/planning/autoware_obstacle_cruise_planner/scripts/trajectory_visualizer.py similarity index 100% rename from planning/obstacle_cruise_planner/scripts/trajectory_visualizer.py rename to planning/autoware_obstacle_cruise_planner/scripts/trajectory_visualizer.py diff --git a/planning/obstacle_cruise_planner/src/node.cpp b/planning/autoware_obstacle_cruise_planner/src/node.cpp similarity index 99% rename from planning/obstacle_cruise_planner/src/node.cpp rename to planning/autoware_obstacle_cruise_planner/src/node.cpp index 866090a3c4696..18ea1243d9101 100644 --- a/planning/obstacle_cruise_planner/src/node.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/node.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "obstacle_cruise_planner/node.hpp" +#include "autoware_obstacle_cruise_planner/node.hpp" +#include "autoware_obstacle_cruise_planner/polygon_utils.hpp" +#include "autoware_obstacle_cruise_planner/utils.hpp" #include "motion_utils/resample/resample.hpp" #include "motion_utils/trajectory/conversion.hpp" #include "object_recognition_utils/predicted_path_utils.hpp" -#include "obstacle_cruise_planner/polygon_utils.hpp" -#include "obstacle_cruise_planner/utils.hpp" #include "tier4_autoware_utils/geometry/boost_polygon_utils.hpp" #include "tier4_autoware_utils/ros/marker_helper.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" @@ -215,7 +215,7 @@ bool isLowerConsideringHysteresis( } } // namespace -namespace motion_planning +namespace autoware::motion_planning { ObstacleCruisePlannerNode::BehaviorDeterminationParam::BehaviorDeterminationParam( rclcpp::Node & node) @@ -1643,7 +1643,7 @@ void ObstacleCruisePlannerNode::publishCalculationTime(const double calculation_ calculation_time_msg.data = calculation_time; debug_calculation_time_pub_->publish(calculation_time_msg); } -} // namespace motion_planning +} // namespace autoware::motion_planning #include -RCLCPP_COMPONENTS_REGISTER_NODE(motion_planning::ObstacleCruisePlannerNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::motion_planning::ObstacleCruisePlannerNode) diff --git a/planning/obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp b/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp similarity index 99% rename from planning/obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp rename to planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp index a040ac598681f..c7172435a6f24 100644 --- a/planning/obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp @@ -12,8 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp" +#include "autoware_obstacle_cruise_planner/optimization_based_planner/optimization_based_planner.hpp" +#include "autoware_obstacle_cruise_planner/utils.hpp" #include "interpolation/linear_interpolation.hpp" #include "interpolation/spline_interpolation.hpp" #include "interpolation/zero_order_hold.hpp" @@ -21,7 +22,6 @@ #include "motion_utils/resample/resample.hpp" #include "motion_utils/trajectory/interpolation.hpp" #include "motion_utils/trajectory/trajectory.hpp" -#include "obstacle_cruise_planner/utils.hpp" #include "tier4_autoware_utils/geometry/geometry.hpp" #include "tier4_autoware_utils/ros/marker_helper.hpp" diff --git a/planning/obstacle_cruise_planner/src/optimization_based_planner/velocity_optimizer.cpp b/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/velocity_optimizer.cpp similarity index 99% rename from planning/obstacle_cruise_planner/src/optimization_based_planner/velocity_optimizer.cpp rename to planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/velocity_optimizer.cpp index c8932da6f17e5..695db439e566c 100644 --- a/planning/obstacle_cruise_planner/src/optimization_based_planner/velocity_optimizer.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/velocity_optimizer.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "obstacle_cruise_planner/optimization_based_planner/velocity_optimizer.hpp" +#include "autoware_obstacle_cruise_planner/optimization_based_planner/velocity_optimizer.hpp" #include diff --git a/planning/obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp b/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp similarity index 99% rename from planning/obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp rename to planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp index 3084764432c0e..5156c61038122 100644 --- a/planning/obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp" +#include "autoware_obstacle_cruise_planner/pid_based_planner/pid_based_planner.hpp" +#include "autoware_obstacle_cruise_planner/utils.hpp" #include "interpolation/spline_interpolation.hpp" #include "motion_utils/marker/marker_helper.hpp" -#include "obstacle_cruise_planner/utils.hpp" #include "tier4_autoware_utils/geometry/geometry.hpp" #include "tier4_autoware_utils/ros/marker_helper.hpp" #include "tier4_autoware_utils/ros/update_param.hpp" diff --git a/planning/obstacle_cruise_planner/src/planner_interface.cpp b/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp similarity index 99% rename from planning/obstacle_cruise_planner/src/planner_interface.cpp rename to planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp index 6e1de97378d16..f3b5af842acdb 100644 --- a/planning/obstacle_cruise_planner/src/planner_interface.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "obstacle_cruise_planner/planner_interface.hpp" +#include "autoware_obstacle_cruise_planner/planner_interface.hpp" #include "motion_utils/distance/distance.hpp" #include "motion_utils/marker/marker_helper.hpp" diff --git a/planning/obstacle_cruise_planner/src/polygon_utils.cpp b/planning/autoware_obstacle_cruise_planner/src/polygon_utils.cpp similarity index 99% rename from planning/obstacle_cruise_planner/src/polygon_utils.cpp rename to planning/autoware_obstacle_cruise_planner/src/polygon_utils.cpp index f354c53365dc1..e5f53d1b88c0b 100644 --- a/planning/obstacle_cruise_planner/src/polygon_utils.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/polygon_utils.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "obstacle_cruise_planner/polygon_utils.hpp" +#include "autoware_obstacle_cruise_planner/polygon_utils.hpp" #include "motion_utils/trajectory/trajectory.hpp" #include "tier4_autoware_utils/geometry/boost_polygon_utils.hpp" diff --git a/planning/obstacle_cruise_planner/src/utils.cpp b/planning/autoware_obstacle_cruise_planner/src/utils.cpp similarity index 98% rename from planning/obstacle_cruise_planner/src/utils.cpp rename to planning/autoware_obstacle_cruise_planner/src/utils.cpp index 6c1b3999e40c1..cb36f35b8e837 100644 --- a/planning/obstacle_cruise_planner/src/utils.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/utils.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "obstacle_cruise_planner/utils.hpp" +#include "autoware_obstacle_cruise_planner/utils.hpp" #include "object_recognition_utils/predicted_path_utils.hpp" #include "tier4_autoware_utils/ros/marker_helper.hpp" diff --git a/planning/obstacle_cruise_planner/test/test_obstacle_cruise_planner_node_interface.cpp b/planning/autoware_obstacle_cruise_planner/test/test_obstacle_cruise_planner_node_interface.cpp similarity index 93% rename from planning/obstacle_cruise_planner/test/test_obstacle_cruise_planner_node_interface.cpp rename to planning/autoware_obstacle_cruise_planner/test/test_obstacle_cruise_planner_node_interface.cpp index bd11effb774da..1c4f621649a4c 100644 --- a/planning/obstacle_cruise_planner/test/test_obstacle_cruise_planner_node_interface.cpp +++ b/planning/autoware_obstacle_cruise_planner/test/test_obstacle_cruise_planner_node_interface.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "obstacle_cruise_planner/node.hpp" +#include "autoware_obstacle_cruise_planner/node.hpp" #include #include @@ -22,7 +22,7 @@ #include -using motion_planning::ObstacleCruisePlannerNode; +using autoware::motion_planning::ObstacleCruisePlannerNode; using planning_test_utils::PlanningInterfaceTestManager; std::shared_ptr generateTestManager() @@ -44,7 +44,7 @@ std::shared_ptr generateNode() { auto node_options = rclcpp::NodeOptions{}; const auto obstacle_cruise_planner_dir = - ament_index_cpp::get_package_share_directory("obstacle_cruise_planner"); + ament_index_cpp::get_package_share_directory("autoware_obstacle_cruise_planner"); const auto planning_test_utils_dir = ament_index_cpp::get_package_share_directory("planning_test_utils"); node_options.arguments( @@ -54,7 +54,7 @@ std::shared_ptr generateNode() "--params-file", obstacle_cruise_planner_dir + "/config/default_common.param.yaml", "--params-file", obstacle_cruise_planner_dir + "/config/obstacle_cruise_planner.param.yaml"}); - return std::make_shared(node_options); + return std::make_shared(node_options); } void publishMandatoryTopics( diff --git a/planning/obstacle_stop_planner/README.md b/planning/obstacle_stop_planner/README.md index c922874594f54..10870222aee09 100644 --- a/planning/obstacle_stop_planner/README.md +++ b/planning/obstacle_stop_planner/README.md @@ -411,5 +411,5 @@ If the target velocity exceeds the value of `thresh_vel_to_stop`, the target vel dangerously. - It does not work for backward driving, but publishes the path of the input as it is. Please - use [obstacle_cruise_planner](../obstacle_cruise_planner/README.md) if you want to stop against an obstacle when + use [obstacle_cruise_planner](../autoware_obstacle_cruise_planner/README.md) if you want to stop against an obstacle when backward driving. From 687ead905d708bd01f097a87d178382531356070 Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:26:55 +0900 Subject: [PATCH 104/142] refactor(shift_decider): prefix package and namespace with autoware_ (#7310) * RT1-6684 add autoware prefix and namespace Signed-off-by: Muhammad Zulfaqar Azmi * RT1-6684 Revert svg This reverts commit 4e0569e4796ab432c734905fb7f2106779575e29. Signed-off-by: Muhammad Zulfaqar Azmi --------- Signed-off-by: Muhammad Zulfaqar Azmi Co-authored-by: Takayuki Murooka --- control/autoware_shift_decider/CMakeLists.txt | 20 +++++++++++++++++++ .../README.md | 2 +- .../config/shift_decider.param.yaml | 0 .../autoware_shift_decider.hpp} | 10 +++++++--- .../launch/shift_decider.launch.xml | 4 ++-- .../package.xml | 4 ++-- .../schema/shift_decider.schema.json | 0 .../src/autoware_shift_decider.cpp} | 8 ++++++-- control/shift_decider/CMakeLists.txt | 20 ------------------- .../launch/control.launch.py | 6 +++--- launch/tier4_control_launch/package.xml | 2 +- 11 files changed, 42 insertions(+), 34 deletions(-) create mode 100644 control/autoware_shift_decider/CMakeLists.txt rename control/{shift_decider => autoware_shift_decider}/README.md (93%) rename control/{shift_decider => autoware_shift_decider}/config/shift_decider.param.yaml (100%) rename control/{shift_decider/include/shift_decider/shift_decider.hpp => autoware_shift_decider/include/autoware_shift_decider/autoware_shift_decider.hpp} (88%) rename control/{shift_decider => autoware_shift_decider}/launch/shift_decider.launch.xml (55%) rename control/{shift_decider => autoware_shift_decider}/package.xml (90%) rename control/{shift_decider => autoware_shift_decider}/schema/shift_decider.schema.json (100%) rename control/{shift_decider/src/shift_decider.cpp => autoware_shift_decider/src/autoware_shift_decider.cpp} (94%) delete mode 100644 control/shift_decider/CMakeLists.txt diff --git a/control/autoware_shift_decider/CMakeLists.txt b/control/autoware_shift_decider/CMakeLists.txt new file mode 100644 index 0000000000000..269b0fcc33690 --- /dev/null +++ b/control/autoware_shift_decider/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.14) +project(autoware_shift_decider) + +find_package(autoware_cmake REQUIRED) +autoware_package() + +ament_auto_add_library(${PROJECT_NAME}_node SHARED + src/${PROJECT_NAME}.cpp +) + +rclcpp_components_register_node(${PROJECT_NAME}_node + PLUGIN "autoware::shift_decider::ShiftDecider" + EXECUTABLE ${PROJECT_NAME} +) + +ament_auto_package( + INSTALL_TO_SHARE + launch + config +) diff --git a/control/shift_decider/README.md b/control/autoware_shift_decider/README.md similarity index 93% rename from control/shift_decider/README.md rename to control/autoware_shift_decider/README.md index c9fdc20696f0e..84767abceff6b 100644 --- a/control/shift_decider/README.md +++ b/control/autoware_shift_decider/README.md @@ -2,7 +2,7 @@ ## Purpose -`shift_decider` is a module to decide shift from ackermann control command. +`autoware_shift_decider` is a module to decide shift from ackermann control command. ## Inner-workings / Algorithms diff --git a/control/shift_decider/config/shift_decider.param.yaml b/control/autoware_shift_decider/config/shift_decider.param.yaml similarity index 100% rename from control/shift_decider/config/shift_decider.param.yaml rename to control/autoware_shift_decider/config/shift_decider.param.yaml diff --git a/control/shift_decider/include/shift_decider/shift_decider.hpp b/control/autoware_shift_decider/include/autoware_shift_decider/autoware_shift_decider.hpp similarity index 88% rename from control/shift_decider/include/shift_decider/shift_decider.hpp rename to control/autoware_shift_decider/include/autoware_shift_decider/autoware_shift_decider.hpp index b11a0f40625af..f3371a372b800 100644 --- a/control/shift_decider/include/shift_decider/shift_decider.hpp +++ b/control/autoware_shift_decider/include/autoware_shift_decider/autoware_shift_decider.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHIFT_DECIDER__SHIFT_DECIDER_HPP_ -#define SHIFT_DECIDER__SHIFT_DECIDER_HPP_ +#ifndef AUTOWARE_SHIFT_DECIDER__AUTOWARE_SHIFT_DECIDER_HPP_ +#define AUTOWARE_SHIFT_DECIDER__AUTOWARE_SHIFT_DECIDER_HPP_ #include @@ -24,6 +24,9 @@ #include +namespace autoware::shift_decider +{ + class ShiftDecider : public rclcpp::Node { public: @@ -52,5 +55,6 @@ class ShiftDecider : public rclcpp::Node bool park_on_goal_; }; +} // namespace autoware::shift_decider -#endif // SHIFT_DECIDER__SHIFT_DECIDER_HPP_ +#endif // AUTOWARE_SHIFT_DECIDER__AUTOWARE_SHIFT_DECIDER_HPP_ diff --git a/control/shift_decider/launch/shift_decider.launch.xml b/control/autoware_shift_decider/launch/shift_decider.launch.xml similarity index 55% rename from control/shift_decider/launch/shift_decider.launch.xml rename to control/autoware_shift_decider/launch/shift_decider.launch.xml index 73ed434ade7f6..d04af22ec828d 100644 --- a/control/shift_decider/launch/shift_decider.launch.xml +++ b/control/autoware_shift_decider/launch/shift_decider.launch.xml @@ -1,7 +1,7 @@ - + - + diff --git a/control/shift_decider/package.xml b/control/autoware_shift_decider/package.xml similarity index 90% rename from control/shift_decider/package.xml rename to control/autoware_shift_decider/package.xml index a175a6ae9e599..3091691783e34 100644 --- a/control/shift_decider/package.xml +++ b/control/autoware_shift_decider/package.xml @@ -1,9 +1,9 @@ - shift_decider + autoware_shift_decider 0.1.0 - The shift_decider package + The autoware_shift_decider package Takamasa Horibe Takayuki Murooka Apache License 2.0 diff --git a/control/shift_decider/schema/shift_decider.schema.json b/control/autoware_shift_decider/schema/shift_decider.schema.json similarity index 100% rename from control/shift_decider/schema/shift_decider.schema.json rename to control/autoware_shift_decider/schema/shift_decider.schema.json diff --git a/control/shift_decider/src/shift_decider.cpp b/control/autoware_shift_decider/src/autoware_shift_decider.cpp similarity index 94% rename from control/shift_decider/src/shift_decider.cpp rename to control/autoware_shift_decider/src/autoware_shift_decider.cpp index f003513060a34..4df45d6ccdb26 100644 --- a/control/shift_decider/src/shift_decider.cpp +++ b/control/autoware_shift_decider/src/autoware_shift_decider.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shift_decider/shift_decider.hpp" +#include "autoware_shift_decider/autoware_shift_decider.hpp" #include @@ -21,6 +21,9 @@ #include #include +namespace autoware::shift_decider +{ + ShiftDecider::ShiftDecider(const rclcpp::NodeOptions & node_options) : Node("shift_decider", node_options) { @@ -104,6 +107,7 @@ void ShiftDecider::initTimer(double period_s) timer_ = rclcpp::create_timer(this, get_clock(), period_ns, std::bind(&ShiftDecider::onTimer, this)); } +} // namespace autoware::shift_decider #include -RCLCPP_COMPONENTS_REGISTER_NODE(ShiftDecider) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::shift_decider::ShiftDecider) diff --git a/control/shift_decider/CMakeLists.txt b/control/shift_decider/CMakeLists.txt deleted file mode 100644 index ca6f4af74f8ca..0000000000000 --- a/control/shift_decider/CMakeLists.txt +++ /dev/null @@ -1,20 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(shift_decider) - -find_package(autoware_cmake REQUIRED) -autoware_package() - -ament_auto_add_library(shift_decider_node SHARED - src/shift_decider.cpp -) - -rclcpp_components_register_node(shift_decider_node - PLUGIN "ShiftDecider" - EXECUTABLE shift_decider -) - -ament_auto_package( - INSTALL_TO_SHARE - launch - config -) diff --git a/launch/tier4_control_launch/launch/control.launch.py b/launch/tier4_control_launch/launch/control.launch.py index c9de43aa38165..8564b9c0ff85b 100644 --- a/launch/tier4_control_launch/launch/control.launch.py +++ b/launch/tier4_control_launch/launch/control.launch.py @@ -122,9 +122,9 @@ def launch_setup(context, *args, **kwargs): # shift decider shift_decider_component = ComposableNode( - package="shift_decider", - plugin="ShiftDecider", - name="shift_decider", + package="autoware_shift_decider", + plugin="autoware::shift_decider::ShiftDecider", + name="autoware_shift_decider", remappings=[ ("input/control_cmd", "/control/trajectory_follower/control_cmd"), ("input/state", "/autoware/state"), diff --git a/launch/tier4_control_launch/package.xml b/launch/tier4_control_launch/package.xml index b9bf1ed3fcae6..99727e60db458 100644 --- a/launch/tier4_control_launch/package.xml +++ b/launch/tier4_control_launch/package.xml @@ -14,9 +14,9 @@ autoware_external_cmd_converter autoware_external_cmd_selector autoware_lane_departure_checker + autoware_shift_decider autoware_vehicle_cmd_gate control_evaluator - shift_decider trajectory_follower_node ament_lint_auto From 2551d998f230ac8cd7d85619ec239cc3699927a6 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Tue, 11 Jun 2024 14:03:53 +0900 Subject: [PATCH 105/142] feat(map based prediction): use polling subscriber (#7397) feat(map_based_prediction): use polling subscriber Signed-off-by: Mamoru Sobue --- .../map_based_prediction_node.hpp | 4 +++- .../src/map_based_prediction_node.cpp | 12 +++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/perception/autoware_map_based_prediction/include/map_based_prediction/map_based_prediction_node.hpp b/perception/autoware_map_based_prediction/include/map_based_prediction/map_based_prediction_node.hpp index 22b28b00d645e..27c2a5079f441 100644 --- a/perception/autoware_map_based_prediction/include/map_based_prediction/map_based_prediction_node.hpp +++ b/perception/autoware_map_based_prediction/include/map_based_prediction/map_based_prediction_node.hpp @@ -22,6 +22,7 @@ #include #include +#include #include #include #include @@ -142,7 +143,8 @@ class MapBasedPredictionNode : public rclcpp::Node rclcpp::Publisher::SharedPtr pub_debug_markers_; rclcpp::Subscription::SharedPtr sub_objects_; rclcpp::Subscription::SharedPtr sub_map_; - rclcpp::Subscription::SharedPtr sub_traffic_signals_; + tier4_autoware_utils::InterProcessPollingSubscriber sub_traffic_signals_{ + this, "/traffic_signals"}; // debug publisher std::unique_ptr> stop_watch_ptr_; diff --git a/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp b/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp index c23e78d243f9c..20d532d7127d7 100644 --- a/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp +++ b/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp @@ -854,9 +854,6 @@ MapBasedPredictionNode::MapBasedPredictionNode(const rclcpp::NodeOptions & node_ sub_map_ = this->create_subscription( "/vector_map", rclcpp::QoS{1}.transient_local(), std::bind(&MapBasedPredictionNode::mapCallback, this, std::placeholders::_1)); - sub_traffic_signals_ = this->create_subscription( - "/traffic_signals", 1, - std::bind(&MapBasedPredictionNode::trafficSignalsCallback, this, std::placeholders::_1)); pub_objects_ = this->create_publisher("~/output/objects", rclcpp::QoS{1}); pub_debug_markers_ = @@ -948,6 +945,15 @@ void MapBasedPredictionNode::trafficSignalsCallback( void MapBasedPredictionNode::objectsCallback(const TrackedObjects::ConstSharedPtr in_objects) { stop_watch_ptr_->toc("processing_time", true); + + // take traffic_signal + { + const auto msg = sub_traffic_signals_.takeData(); + if (msg) { + trafficSignalsCallback(msg); + } + } + // Guard for map pointer and frame transformation if (!lanelet_map_ptr_) { return; From 4804e4d9e827466a8f00047935cc0bd21404766b Mon Sep 17 00:00:00 2001 From: mkquda <168697710+mkquda@users.noreply.github.com> Date: Tue, 11 Jun 2024 14:16:13 +0900 Subject: [PATCH 106/142] refactor(trajectory_follower_node): trajectory follower node add autoware prefix (#7344) * rename trajectory follower node package Signed-off-by: mohammad alqudah * update dependencies, launch files, and README files Signed-off-by: mohammad alqudah * fix formats Signed-off-by: mohammad alqudah * remove autoware_ prefix from launch arg option Signed-off-by: mohammad alqudah --------- Signed-off-by: mohammad alqudah --- .github/CODEOWNERS | 2 +- control/autoware_mpc_lateral_controller/README.md | 4 ++-- control/autoware_pid_longitudinal_controller/README.md | 2 +- control/autoware_trajectory_follower_base/README.md | 6 +++--- .../CMakeLists.txt | 6 +++--- .../README.md | 2 +- .../config/plot_juggler_trajectory_follower.xml | 0 .../config/simple_trajectory_follower.param.yaml | 0 .../design/media/Controller.drawio.svg | 4 ++-- .../design/simple_trajectory_follower-design.md | 0 .../controller_node.hpp | 8 ++++---- .../simple_trajectory_follower.hpp | 6 +++--- .../visibility_control.hpp | 6 +++--- .../launch/simple_trajectory_follower.launch.xml | 4 ++-- .../package.xml | 2 +- .../param/lateral/mpc.param.yaml | 0 .../param/lateral/pure_pursuit.param.yaml | 0 .../param/longitudinal/pid.param.yaml | 0 .../param/trajectory_follower_node.param.yaml | 0 .../src/controller_node.cpp | 2 +- .../src/simple_trajectory_follower.cpp | 2 +- .../test/test_controller_mpc.param.yaml | 0 .../test/test_controller_node.cpp | 5 +++-- .../test/test_controller_pid.param.yaml | 0 .../test/test_controller_pure_pursuit.param.yaml | 0 .../test/test_nearest_search.param.yaml | 0 .../test/test_vehicle_info.param.yaml | 0 .../test/trajectory_follower_test_utils.hpp | 0 control/pure_pursuit/README.md | 4 ++-- launch/tier4_control_launch/launch/control.launch.py | 2 +- launch/tier4_control_launch/package.xml | 2 +- 31 files changed, 35 insertions(+), 34 deletions(-) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/CMakeLists.txt (91%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/README.md (99%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/config/plot_juggler_trajectory_follower.xml (100%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/config/simple_trajectory_follower.param.yaml (100%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/design/media/Controller.drawio.svg (98%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/design/simple_trajectory_follower-design.md (100%) rename control/{trajectory_follower_node/include/trajectory_follower_node => autoware_trajectory_follower_node/include/autoware_trajectory_follower_node}/controller_node.hpp (95%) rename control/{trajectory_follower_node/include/trajectory_follower_node => autoware_trajectory_follower_node/include/autoware_trajectory_follower_node}/simple_trajectory_follower.hpp (90%) rename control/{trajectory_follower_node/include/trajectory_follower_node => autoware_trajectory_follower_node/include/autoware_trajectory_follower_node}/visibility_control.hpp (88%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/launch/simple_trajectory_follower.launch.xml (62%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/package.xml (97%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/param/lateral/mpc.param.yaml (100%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/param/lateral/pure_pursuit.param.yaml (100%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/param/longitudinal/pid.param.yaml (100%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/param/trajectory_follower_node.param.yaml (100%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/src/controller_node.cpp (99%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/src/simple_trajectory_follower.cpp (98%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/test/test_controller_mpc.param.yaml (100%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/test/test_controller_node.cpp (99%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/test/test_controller_pid.param.yaml (100%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/test/test_controller_pure_pursuit.param.yaml (100%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/test/test_nearest_search.param.yaml (100%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/test/test_vehicle_info.param.yaml (100%) rename control/{trajectory_follower_node => autoware_trajectory_follower_node}/test/trajectory_follower_test_utils.hpp (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b68296689cabc..354688445f008 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -59,7 +59,7 @@ control/pure_pursuit/** takamasa.horibe@tier4.jp control/shift_decider/** takamasa.horibe@tier4.jp control/autoware_smart_mpc_trajectory_follower/** masayuki.aino@proxima-ai-tech.com control/autoware_trajectory_follower_base/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp -control/trajectory_follower_node/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +control/autoware_trajectory_follower_node/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/autoware_vehicle_cmd_gate/** takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp evaluator/control_evaluator/** daniel.sanchez@tier4.jp takayuki.murooka@tier4.jp evaluator/diagnostic_converter/** kyoichi.sugahara@tier4.jp maxime.clement@tier4.jp takamasa.horibe@tier4.jp diff --git a/control/autoware_mpc_lateral_controller/README.md b/control/autoware_mpc_lateral_controller/README.md index 3ad116929b50c..6c5064a4aafe8 100644 --- a/control/autoware_mpc_lateral_controller/README.md +++ b/control/autoware_mpc_lateral_controller/README.md @@ -1,7 +1,7 @@ # MPC Lateral Controller This is the design document for the lateral controller node -in the `trajectory_follower_node` package. +in the `autoware_trajectory_follower_node` package. ## Purpose / Use cases @@ -61,7 +61,7 @@ The tracking is not accurate if the first point of the reference trajectory is a ### Inputs -Set the following from the [controller_node](../trajectory_follower_node/README.md) +Set the following from the [controller_node](../autoware_trajectory_follower_node/README.md) - `autoware_planning_msgs/Trajectory` : reference trajectory to follow. - `nav_msgs/Odometry`: current odometry diff --git a/control/autoware_pid_longitudinal_controller/README.md b/control/autoware_pid_longitudinal_controller/README.md index 4e20cb27fe66a..9929d955e5ba7 100644 --- a/control/autoware_pid_longitudinal_controller/README.md +++ b/control/autoware_pid_longitudinal_controller/README.md @@ -141,7 +141,7 @@ There are two sources of the slope information, which can be switched by a param ### Input -Set the following from the [controller_node](../trajectory_follower_node/README.md) +Set the following from the [controller_node](../autoware_trajectory_follower_node/README.md) - `autoware_planning_msgs/Trajectory` : reference trajectory to follow. - `nav_msgs/Odometry`: current odometry diff --git a/control/autoware_trajectory_follower_base/README.md b/control/autoware_trajectory_follower_base/README.md index 6bd3d74e75271..3c79784f4b95b 100644 --- a/control/autoware_trajectory_follower_base/README.md +++ b/control/autoware_trajectory_follower_base/README.md @@ -8,7 +8,7 @@ This is the design document for the `trajectory_follower` package. -This package provides the interface of longitudinal and lateral controllers used by the node of the `trajectory_follower_node` package. +This package provides the interface of longitudinal and lateral controllers used by the node of the `autoware_trajectory_follower_node` package. We can implement a detailed controller by deriving the longitudinal and lateral base interfaces. ## Design @@ -17,13 +17,13 @@ There are lateral and longitudinal base interface classes and each algorithm inh The interface class has the following base functions. - `isReady()`: Check if the control is ready to compute. -- `run()`: Compute control commands and return to [Trajectory Follower Nodes](../trajectory_follower_node/README.md). This must be implemented by inherited algorithms. +- `run()`: Compute control commands and return to [Trajectory Follower Nodes](../autoware_trajectory_follower_node/README.md). This must be implemented by inherited algorithms. - `sync()`: Input the result of running the other controller. - steer angle convergence - allow keeping stopped until steer is converged. - velocity convergence(currently not used) -See [the Design of Trajectory Follower Nodes](../trajectory_follower_node/README.md#Design) for how these functions work in the node. +See [the Design of Trajectory Follower Nodes](../autoware_trajectory_follower_node/README.md#Design) for how these functions work in the node. ## Separated lateral (steering) and longitudinal (velocity) controls diff --git a/control/trajectory_follower_node/CMakeLists.txt b/control/autoware_trajectory_follower_node/CMakeLists.txt similarity index 91% rename from control/trajectory_follower_node/CMakeLists.txt rename to control/autoware_trajectory_follower_node/CMakeLists.txt index 653b02eb39ed6..cca8267d4d3be 100644 --- a/control/trajectory_follower_node/CMakeLists.txt +++ b/control/autoware_trajectory_follower_node/CMakeLists.txt @@ -1,12 +1,12 @@ cmake_minimum_required(VERSION 3.14) -project(trajectory_follower_node) +project(autoware_trajectory_follower_node) find_package(autoware_cmake REQUIRED) autoware_package() set(CONTROLLER_NODE controller_node) ament_auto_add_library(${CONTROLLER_NODE} SHARED - include/trajectory_follower_node/controller_node.hpp + include/autoware_trajectory_follower_node/controller_node.hpp src/controller_node.cpp ) @@ -18,7 +18,7 @@ rclcpp_components_register_node(${CONTROLLER_NODE} # simple trajectory follower set(SIMPLE_TRAJECTORY_FOLLOWER_NODE simple_trajectory_follower) ament_auto_add_library(${SIMPLE_TRAJECTORY_FOLLOWER_NODE} SHARED - include/trajectory_follower_node/simple_trajectory_follower.hpp + include/autoware_trajectory_follower_node/simple_trajectory_follower.hpp src/simple_trajectory_follower.cpp ) diff --git a/control/trajectory_follower_node/README.md b/control/autoware_trajectory_follower_node/README.md similarity index 99% rename from control/trajectory_follower_node/README.md rename to control/autoware_trajectory_follower_node/README.md index 1b63cd2064b29..aa692c323f6d0 100644 --- a/control/trajectory_follower_node/README.md +++ b/control/autoware_trajectory_follower_node/README.md @@ -64,7 +64,7 @@ run(InputData) override } } -package trajectory_follower_node { +package autoware_trajectory_follower_node { class Controller { longitudinal_controller_ lateral_controller_ diff --git a/control/trajectory_follower_node/config/plot_juggler_trajectory_follower.xml b/control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower.xml similarity index 100% rename from control/trajectory_follower_node/config/plot_juggler_trajectory_follower.xml rename to control/autoware_trajectory_follower_node/config/plot_juggler_trajectory_follower.xml diff --git a/control/trajectory_follower_node/config/simple_trajectory_follower.param.yaml b/control/autoware_trajectory_follower_node/config/simple_trajectory_follower.param.yaml similarity index 100% rename from control/trajectory_follower_node/config/simple_trajectory_follower.param.yaml rename to control/autoware_trajectory_follower_node/config/simple_trajectory_follower.param.yaml diff --git a/control/trajectory_follower_node/design/media/Controller.drawio.svg b/control/autoware_trajectory_follower_node/design/media/Controller.drawio.svg similarity index 98% rename from control/trajectory_follower_node/design/media/Controller.drawio.svg rename to control/autoware_trajectory_follower_node/design/media/Controller.drawio.svg index db4961922bd10..a09758690ccdc 100644 --- a/control/trajectory_follower_node/design/media/Controller.drawio.svg +++ b/control/autoware_trajectory_follower_node/design/media/Controller.drawio.svg @@ -83,12 +83,12 @@
- trajectory_follower_node/controller_node + autoware_trajectory_follower_node/controller_node
- trajectory_follower_node/controller_node + autoware_trajectory_follower_node/controller_node diff --git a/control/trajectory_follower_node/design/simple_trajectory_follower-design.md b/control/autoware_trajectory_follower_node/design/simple_trajectory_follower-design.md similarity index 100% rename from control/trajectory_follower_node/design/simple_trajectory_follower-design.md rename to control/autoware_trajectory_follower_node/design/simple_trajectory_follower-design.md diff --git a/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp b/control/autoware_trajectory_follower_node/include/autoware_trajectory_follower_node/controller_node.hpp similarity index 95% rename from control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp rename to control/autoware_trajectory_follower_node/include/autoware_trajectory_follower_node/controller_node.hpp index beb5024a78e53..cd6ddf427d005 100644 --- a/control/trajectory_follower_node/include/trajectory_follower_node/controller_node.hpp +++ b/control/autoware_trajectory_follower_node/include/autoware_trajectory_follower_node/controller_node.hpp @@ -12,11 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAJECTORY_FOLLOWER_NODE__CONTROLLER_NODE_HPP_ -#define TRAJECTORY_FOLLOWER_NODE__CONTROLLER_NODE_HPP_ +#ifndef AUTOWARE_TRAJECTORY_FOLLOWER_NODE__CONTROLLER_NODE_HPP_ +#define AUTOWARE_TRAJECTORY_FOLLOWER_NODE__CONTROLLER_NODE_HPP_ #include "autoware_trajectory_follower_base/lateral_controller_base.hpp" #include "autoware_trajectory_follower_base/longitudinal_controller_base.hpp" +#include "autoware_trajectory_follower_node/visibility_control.hpp" #include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "rclcpp/rclcpp.hpp" #include "tf2/utils.h" @@ -25,7 +26,6 @@ #include "tier4_autoware_utils/ros/logger_level_configure.hpp" #include "tier4_autoware_utils/ros/polling_subscriber.hpp" #include "tier4_autoware_utils/system/stop_watch.hpp" -#include "trajectory_follower_node/visibility_control.hpp" #include #include @@ -142,4 +142,4 @@ class TRAJECTORY_FOLLOWER_PUBLIC Controller : public rclcpp::Node } // namespace trajectory_follower_node } // namespace autoware::motion::control -#endif // TRAJECTORY_FOLLOWER_NODE__CONTROLLER_NODE_HPP_ +#endif // AUTOWARE_TRAJECTORY_FOLLOWER_NODE__CONTROLLER_NODE_HPP_ diff --git a/control/trajectory_follower_node/include/trajectory_follower_node/simple_trajectory_follower.hpp b/control/autoware_trajectory_follower_node/include/autoware_trajectory_follower_node/simple_trajectory_follower.hpp similarity index 90% rename from control/trajectory_follower_node/include/trajectory_follower_node/simple_trajectory_follower.hpp rename to control/autoware_trajectory_follower_node/include/autoware_trajectory_follower_node/simple_trajectory_follower.hpp index 9360f900bca5f..094f6fb74f2ad 100644 --- a/control/trajectory_follower_node/include/trajectory_follower_node/simple_trajectory_follower.hpp +++ b/control/autoware_trajectory_follower_node/include/autoware_trajectory_follower_node/simple_trajectory_follower.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAJECTORY_FOLLOWER_NODE__SIMPLE_TRAJECTORY_FOLLOWER_HPP_ -#define TRAJECTORY_FOLLOWER_NODE__SIMPLE_TRAJECTORY_FOLLOWER_HPP_ +#ifndef AUTOWARE_TRAJECTORY_FOLLOWER_NODE__SIMPLE_TRAJECTORY_FOLLOWER_HPP_ +#define AUTOWARE_TRAJECTORY_FOLLOWER_NODE__SIMPLE_TRAJECTORY_FOLLOWER_HPP_ #include "tier4_autoware_utils/ros/polling_subscriber.hpp" @@ -67,4 +67,4 @@ class SimpleTrajectoryFollower : public rclcpp::Node } // namespace simple_trajectory_follower -#endif // TRAJECTORY_FOLLOWER_NODE__SIMPLE_TRAJECTORY_FOLLOWER_HPP_ +#endif // AUTOWARE_TRAJECTORY_FOLLOWER_NODE__SIMPLE_TRAJECTORY_FOLLOWER_HPP_ diff --git a/control/trajectory_follower_node/include/trajectory_follower_node/visibility_control.hpp b/control/autoware_trajectory_follower_node/include/autoware_trajectory_follower_node/visibility_control.hpp similarity index 88% rename from control/trajectory_follower_node/include/trajectory_follower_node/visibility_control.hpp rename to control/autoware_trajectory_follower_node/include/autoware_trajectory_follower_node/visibility_control.hpp index 36446c4144a0a..8f25e1a815538 100644 --- a/control/trajectory_follower_node/include/trajectory_follower_node/visibility_control.hpp +++ b/control/autoware_trajectory_follower_node/include/autoware_trajectory_follower_node/visibility_control.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAJECTORY_FOLLOWER_NODE__VISIBILITY_CONTROL_HPP_ -#define TRAJECTORY_FOLLOWER_NODE__VISIBILITY_CONTROL_HPP_ +#ifndef AUTOWARE_TRAJECTORY_FOLLOWER_NODE__VISIBILITY_CONTROL_HPP_ +#define AUTOWARE_TRAJECTORY_FOLLOWER_NODE__VISIBILITY_CONTROL_HPP_ //////////////////////////////////////////////////////////////////////////////// #if defined(__WIN32) @@ -34,4 +34,4 @@ #error "Unsupported Build Configuration" #endif -#endif // TRAJECTORY_FOLLOWER_NODE__VISIBILITY_CONTROL_HPP_ +#endif // AUTOWARE_TRAJECTORY_FOLLOWER_NODE__VISIBILITY_CONTROL_HPP_ diff --git a/control/trajectory_follower_node/launch/simple_trajectory_follower.launch.xml b/control/autoware_trajectory_follower_node/launch/simple_trajectory_follower.launch.xml similarity index 62% rename from control/trajectory_follower_node/launch/simple_trajectory_follower.launch.xml rename to control/autoware_trajectory_follower_node/launch/simple_trajectory_follower.launch.xml index 0c4c3faac73a9..521638dd7a54d 100644 --- a/control/trajectory_follower_node/launch/simple_trajectory_follower.launch.xml +++ b/control/autoware_trajectory_follower_node/launch/simple_trajectory_follower.launch.xml @@ -4,8 +4,8 @@ - - + + diff --git a/control/trajectory_follower_node/package.xml b/control/autoware_trajectory_follower_node/package.xml similarity index 97% rename from control/trajectory_follower_node/package.xml rename to control/autoware_trajectory_follower_node/package.xml index b6d8b4bf774a9..833a159ca708c 100644 --- a/control/trajectory_follower_node/package.xml +++ b/control/autoware_trajectory_follower_node/package.xml @@ -1,7 +1,7 @@ - trajectory_follower_node + autoware_trajectory_follower_node 1.0.0 Nodes to follow a trajectory by generating control commands separated into lateral and longitudinal commands diff --git a/control/trajectory_follower_node/param/lateral/mpc.param.yaml b/control/autoware_trajectory_follower_node/param/lateral/mpc.param.yaml similarity index 100% rename from control/trajectory_follower_node/param/lateral/mpc.param.yaml rename to control/autoware_trajectory_follower_node/param/lateral/mpc.param.yaml diff --git a/control/trajectory_follower_node/param/lateral/pure_pursuit.param.yaml b/control/autoware_trajectory_follower_node/param/lateral/pure_pursuit.param.yaml similarity index 100% rename from control/trajectory_follower_node/param/lateral/pure_pursuit.param.yaml rename to control/autoware_trajectory_follower_node/param/lateral/pure_pursuit.param.yaml diff --git a/control/trajectory_follower_node/param/longitudinal/pid.param.yaml b/control/autoware_trajectory_follower_node/param/longitudinal/pid.param.yaml similarity index 100% rename from control/trajectory_follower_node/param/longitudinal/pid.param.yaml rename to control/autoware_trajectory_follower_node/param/longitudinal/pid.param.yaml diff --git a/control/trajectory_follower_node/param/trajectory_follower_node.param.yaml b/control/autoware_trajectory_follower_node/param/trajectory_follower_node.param.yaml similarity index 100% rename from control/trajectory_follower_node/param/trajectory_follower_node.param.yaml rename to control/autoware_trajectory_follower_node/param/trajectory_follower_node.param.yaml diff --git a/control/trajectory_follower_node/src/controller_node.cpp b/control/autoware_trajectory_follower_node/src/controller_node.cpp similarity index 99% rename from control/trajectory_follower_node/src/controller_node.cpp rename to control/autoware_trajectory_follower_node/src/controller_node.cpp index 566a5ee7ed0df..78dd6801e82fe 100644 --- a/control/trajectory_follower_node/src/controller_node.cpp +++ b/control/autoware_trajectory_follower_node/src/controller_node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "trajectory_follower_node/controller_node.hpp" +#include "autoware_trajectory_follower_node/controller_node.hpp" #include "autoware_mpc_lateral_controller/mpc_lateral_controller.hpp" #include "autoware_pid_longitudinal_controller/pid_longitudinal_controller.hpp" diff --git a/control/trajectory_follower_node/src/simple_trajectory_follower.cpp b/control/autoware_trajectory_follower_node/src/simple_trajectory_follower.cpp similarity index 98% rename from control/trajectory_follower_node/src/simple_trajectory_follower.cpp rename to control/autoware_trajectory_follower_node/src/simple_trajectory_follower.cpp index bd24516ed033b..e34c67b72d30f 100644 --- a/control/trajectory_follower_node/src/simple_trajectory_follower.cpp +++ b/control/autoware_trajectory_follower_node/src/simple_trajectory_follower.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "trajectory_follower_node/simple_trajectory_follower.hpp" +#include "autoware_trajectory_follower_node/simple_trajectory_follower.hpp" #include #include diff --git a/control/trajectory_follower_node/test/test_controller_mpc.param.yaml b/control/autoware_trajectory_follower_node/test/test_controller_mpc.param.yaml similarity index 100% rename from control/trajectory_follower_node/test/test_controller_mpc.param.yaml rename to control/autoware_trajectory_follower_node/test/test_controller_mpc.param.yaml diff --git a/control/trajectory_follower_node/test/test_controller_node.cpp b/control/autoware_trajectory_follower_node/test/test_controller_node.cpp similarity index 99% rename from control/trajectory_follower_node/test/test_controller_node.cpp rename to control/autoware_trajectory_follower_node/test/test_controller_node.cpp index dcd3434705ec0..0ef35b222d4a1 100644 --- a/control/trajectory_follower_node/test/test_controller_node.cpp +++ b/control/autoware_trajectory_follower_node/test/test_controller_node.cpp @@ -13,11 +13,11 @@ // limitations under the License. #include "ament_index_cpp/get_package_share_directory.hpp" +#include "autoware_trajectory_follower_node/controller_node.hpp" #include "fake_test_node/fake_test_node.hpp" #include "gtest/gtest.h" #include "rclcpp/rclcpp.hpp" #include "rclcpp/time.hpp" -#include "trajectory_follower_node/controller_node.hpp" #include "trajectory_follower_test_utils.hpp" #include "autoware_adapi_v1_msgs/msg/operation_mode_state.hpp" @@ -49,7 +49,8 @@ const rclcpp::Duration one_second(1, 0); rclcpp::NodeOptions makeNodeOptions(const bool enable_keep_stopped_until_steer_convergence = false) { // Pass default parameter file to the node - const auto share_dir = ament_index_cpp::get_package_share_directory("trajectory_follower_node"); + const auto share_dir = + ament_index_cpp::get_package_share_directory("autoware_trajectory_follower_node"); const auto longitudinal_share_dir = ament_index_cpp::get_package_share_directory("autoware_pid_longitudinal_controller"); const auto lateral_share_dir = diff --git a/control/trajectory_follower_node/test/test_controller_pid.param.yaml b/control/autoware_trajectory_follower_node/test/test_controller_pid.param.yaml similarity index 100% rename from control/trajectory_follower_node/test/test_controller_pid.param.yaml rename to control/autoware_trajectory_follower_node/test/test_controller_pid.param.yaml diff --git a/control/trajectory_follower_node/test/test_controller_pure_pursuit.param.yaml b/control/autoware_trajectory_follower_node/test/test_controller_pure_pursuit.param.yaml similarity index 100% rename from control/trajectory_follower_node/test/test_controller_pure_pursuit.param.yaml rename to control/autoware_trajectory_follower_node/test/test_controller_pure_pursuit.param.yaml diff --git a/control/trajectory_follower_node/test/test_nearest_search.param.yaml b/control/autoware_trajectory_follower_node/test/test_nearest_search.param.yaml similarity index 100% rename from control/trajectory_follower_node/test/test_nearest_search.param.yaml rename to control/autoware_trajectory_follower_node/test/test_nearest_search.param.yaml diff --git a/control/trajectory_follower_node/test/test_vehicle_info.param.yaml b/control/autoware_trajectory_follower_node/test/test_vehicle_info.param.yaml similarity index 100% rename from control/trajectory_follower_node/test/test_vehicle_info.param.yaml rename to control/autoware_trajectory_follower_node/test/test_vehicle_info.param.yaml diff --git a/control/trajectory_follower_node/test/trajectory_follower_test_utils.hpp b/control/autoware_trajectory_follower_node/test/trajectory_follower_test_utils.hpp similarity index 100% rename from control/trajectory_follower_node/test/trajectory_follower_test_utils.hpp rename to control/autoware_trajectory_follower_node/test/trajectory_follower_test_utils.hpp diff --git a/control/pure_pursuit/README.md b/control/pure_pursuit/README.md index 55c847fe88d22..3741abbf2a766 100644 --- a/control/pure_pursuit/README.md +++ b/control/pure_pursuit/README.md @@ -1,10 +1,10 @@ # Pure Pursuit Controller -The Pure Pursuit Controller module calculates the steering angle for tracking a desired trajectory using the pure pursuit algorithm. This is used as a lateral controller plugin in the `trajectory_follower_node`. +The Pure Pursuit Controller module calculates the steering angle for tracking a desired trajectory using the pure pursuit algorithm. This is used as a lateral controller plugin in the `autoware_trajectory_follower_node`. ## Inputs -Set the following from the [controller_node](../trajectory_follower_node/README.md) +Set the following from the [controller_node](../autoware_trajectory_follower_node/README.md) - `autoware_planning_msgs/Trajectory` : reference trajectory to follow. - `nav_msgs/Odometry`: current ego pose and velocity information diff --git a/launch/tier4_control_launch/launch/control.launch.py b/launch/tier4_control_launch/launch/control.launch.py index 8564b9c0ff85b..632571790a645 100644 --- a/launch/tier4_control_launch/launch/control.launch.py +++ b/launch/tier4_control_launch/launch/control.launch.py @@ -69,7 +69,7 @@ def launch_setup(context, *args, **kwargs): trajectory_follower_mode = LaunchConfiguration("trajectory_follower_mode").perform(context) controller_component = ComposableNode( - package="trajectory_follower_node", + package="autoware_trajectory_follower_node", plugin="autoware::motion::control::trajectory_follower_node::Controller", name="controller_node_exe", namespace="trajectory_follower", diff --git a/launch/tier4_control_launch/package.xml b/launch/tier4_control_launch/package.xml index 99727e60db458..699c39f8afa63 100644 --- a/launch/tier4_control_launch/package.xml +++ b/launch/tier4_control_launch/package.xml @@ -15,9 +15,9 @@ autoware_external_cmd_selector autoware_lane_departure_checker autoware_shift_decider + autoware_trajectory_follower_node autoware_vehicle_cmd_gate control_evaluator - trajectory_follower_node ament_lint_auto autoware_lint_common From a77018f190b5e4eb533caafe229afe254d378732 Mon Sep 17 00:00:00 2001 From: "awf-autoware-bot[bot]" <94889083+awf-autoware-bot[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 05:24:36 +0000 Subject: [PATCH 107/142] chore: update CODEOWNERS (#7374) Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions Co-authored-by: Fumiya Watanabe --- .github/CODEOWNERS | 56 +++++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 23 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 354688445f008..ddc7c6f1a1804 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -45,22 +45,23 @@ common/traffic_light_recognition_marker_publisher/** shumpei.wakabayashi@tier4.j common/traffic_light_utils/** kotaro.uetake@tier4.jp satoshi.ota@tier4.jp shunsuke.miura@tier4.jp common/tvm_utility/** ambroise.vincent@arm.com xinyu.wang@tier4.jp control/autoware_autonomous_emergency_braking/** daniel.sanchez@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp -control/control_performance_analysis/** berkay@leodrive.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/autoware_control_validator/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/autoware_external_cmd_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/autoware_joy_controller/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp -control/autoware_lane_departure_checker/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp -control/mpc_lateral_controller/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp -control/obstacle_collision_checker/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp -control/operation_mode_transition_manager/** takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp +control/autoware_lane_departure_checker/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp zulfaqar.azmi@tier4.jp +control/autoware_mpc_lateral_controller/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/autoware_pid_longitudinal_controller/** mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +control/autoware_smart_mpc_trajectory_follower/** kosuke.takeuchi@tier4.jp masayuki.aino@proxima-ai-tech.com takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +control/autoware_vehicle_cmd_gate/** takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp +control/control_performance_analysis/** berkay@leodrive.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp +control/obstacle_collision_checker/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp +control/operation_mode_transition_manager/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/predicted_path_checker/** berkay@leodrive.ai -control/pure_pursuit/** takamasa.horibe@tier4.jp -control/shift_decider/** takamasa.horibe@tier4.jp control/autoware_smart_mpc_trajectory_follower/** masayuki.aino@proxima-ai-tech.com control/autoware_trajectory_follower_base/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +control/pure_pursuit/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +control/shift_decider/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/autoware_trajectory_follower_node/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp -control/autoware_vehicle_cmd_gate/** takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp evaluator/control_evaluator/** daniel.sanchez@tier4.jp takayuki.murooka@tier4.jp evaluator/diagnostic_converter/** kyoichi.sugahara@tier4.jp maxime.clement@tier4.jp takamasa.horibe@tier4.jp evaluator/kinematic_evaluator/** dominik.jargot@robotec.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp @@ -70,7 +71,7 @@ evaluator/planning_evaluator/** kyoichi.sugahara@tier4.jp maxime.clement@tier4.j launch/tier4_autoware_api_launch/** isamu.takagi@tier4.jp ryohsuke.mitsudome@tier4.jp launch/tier4_control_launch/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp launch/tier4_localization_launch/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -launch/tier4_map_launch/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryohsuke.mitsudome@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +launch/tier4_map_launch/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp launch/tier4_perception_launch/** shunsuke.miura@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp launch/tier4_planning_launch/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zhe.shen@tier4.jp zulfaqar.azmi@tier4.jp launch/tier4_sensing_launch/** yukihiro.saito@tier4.jp @@ -99,14 +100,15 @@ localization/yabloc/yabloc_monitor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tie localization/yabloc/yabloc_particle_filter/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/yabloc/yabloc_pose_initializer/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp map/map_height_fitter/** anh.nguyen.2@tier4.jp isamu.takagi@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -map/map_loader/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryohsuke.mitsudome@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +map/map_loader/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp map/map_projection_loader/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp map/map_tf_generator/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -map/util/lanelet2_map_preprocessor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryohsuke.mitsudome@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +map/util/lanelet2_map_preprocessor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +perception/autoware_crosswalk_traffic_light_estimator/** satoshi.ota@tier4.jp shunsuke.miura@tier4.jp tao.zhong@tier4.jp +perception/autoware_map_based_prediction/** kotaro.uetake@tier4.jp kyoichi.sugahara@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yoshi.ri@tier4.jp perception/bytetrack/** manato.hirabayashi@tier4.jp yoshi.ri@tier4.jp perception/cluster_merger/** dai.nguyen@tier4.jp shunsuke.miura@tier4.jp yukihiro.saito@tier4.jp perception/compare_map_segmentation/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp yukihiro.saito@tier4.jp -perception/autoware_crosswalk_traffic_light_estimator/** satoshi.ota@tier4.jp shunsuke.miura@tier4.jp tao.zhong@tier4.jp perception/detected_object_feature_remover/** tomoya.kimura@tier4.jp perception/detected_object_validation/** dai.nguyen@tier4.jp shintaro.tomie@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/detection_by_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp @@ -119,7 +121,7 @@ perception/lidar_apollo_segmentation_tvm/** ambroise.vincent@arm.com xinyu.wang@ perception/lidar_apollo_segmentation_tvm_nodes/** ambroise.vincent@arm.com xinyu.wang@tier4.jp perception/lidar_centerpoint/** kenzo.lobos@tier4.jp koji.minoda@tier4.jp perception/lidar_centerpoint_tvm/** carl.liu@autocore.ai xinyu.wang@tier4.jp -perception/map_based_prediction/** kotaro.uetake@tier4.jp kyoichi.sugahara@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yoshi.ri@tier4.jp +perception/lidar_transfusion/** amadeusz.szymko.2@tier4.jp kenzo.lobos@tier4.jp satoshi.tanaka@tier4.jp perception/multi_object_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/object_merger/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/object_range_splitter/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp @@ -147,9 +149,17 @@ perception/traffic_light_visualization/** tao.zhong@tier4.jp yukihiro.saito@tier planning/autoware_behavior_path_avoidance_by_lane_change_module/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/autoware_behavior_path_dynamic_obstacle_avoidance_module/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp planning/autoware_behavior_path_external_request_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp +planning/autoware_behavior_path_goal_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_path_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/autoware_behavior_path_planner_common/** daniel.sanchez@tier4.jp fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp +planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_path_start_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_path_static_obstacle_avoidance_module/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp +planning/autoware_behavior_velocity_blind_spot_module/** mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_velocity_intersection_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_planner/** kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_behavior_velocity_planner_common/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_stop_line_module/** fumiya.watanabe@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp zhe.shen@tier4.jp planning/autoware_behavior_velocity_template_module/** daniel.sanchez@tier4.jp @@ -158,14 +168,21 @@ planning/autoware_behavior_velocity_virtual_traffic_light_module/** kosuke.takeu planning/autoware_behavior_velocity_walkway_module/** satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/autoware_costmap_generator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/autoware_external_velocity_limit_selector/** satoshi.ota@tier4.jp shinnosuke.hirakawa@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp +planning/autoware_freespace_planner/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +planning/autoware_freespace_planning_algorithms/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +planning/autoware_mission_planner/** isamu.takagi@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp ryohsuke.mitsudome@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +planning/autoware_objects_of_interest_marker_interface/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp zulfaqar.azmi@tier4.jp planning/autoware_path_optimizer/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp +planning/autoware_path_smoother/** maxime.clement@tier4.jp takayuki.murooka@tier4.jp planning/autoware_planning_test_manager/** kyoichi.sugahara@tier4.jp takamasa.horibe@tier4.jp planning/autoware_planning_topic_converter/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp +planning/autoware_planning_validator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp planning/autoware_remaining_distance_time_calculator/** ahmed.ebrahim@leodrive.ai +planning/autoware_rtc_interface/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp taiki.tanaka@tier4.jp +planning/autoware_scenario_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/autoware_static_centerline_generator/** kosuke.takeuchi@tier4.jp takayuki.murooka@tier4.jp +planning/autoware_surround_obstacle_checker/** go.sakayori@tier4.jp satoshi.ota@tier4.jp planning/autoware_velocity_smoother/** fumiya.watanabe@tier4.jp makoto.kurihara@tier4.jp satoshi.ota@tier4.jp takamasa.horibe@tier4.jp -planning/autoware_behavior_path_goal_planner_module/** daniel.sanchez@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp -planning/autoware_behavior_path_lane_change_module/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/behavior_path_planner/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zulfaqar.azmi@tier4.jp planning/autoware_behavior_path_sampling_planner_module/** daniel.sanchez@tier4.jp maxime.clement@tier4.jp planning/autoware_behavior_path_side_shift_module/** fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp @@ -176,16 +193,12 @@ planning/autoware_behavior_velocity_blind_spot_module/** mamoru.sobue@tier4.jp s planning/autoware_behavior_velocity_crosswalk_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yuki.takagi@tier4.jp planning/behavior_velocity_detection_area_module/** kyoichi.sugahara@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_dynamic_obstacle_stop_module/** mamoru.sobue@tier4.jp maxime.clement@tier4.jp -planning/behavior_velocity_intersection_module/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_no_drivable_lane_module/** ahmed.ebrahim@leodrive.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_no_stopping_area_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_planner_common/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/autoware_behavior_velocity_run_out_module/** kosuke.takeuchi@tier4.jp makoto.kurihara@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_speed_bump_module/** mdogru@leodrive.ai shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp -planning/freespace_planner/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp -planning/autoware_freespace_planning_algorithms/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp -planning/autoware_mission_planner/** isamu.takagi@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp ryohsuke.mitsudome@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/** maxime.clement@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_planner_common/** maxime.clement@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_planner_node/** maxime.clement@tier4.jp @@ -193,7 +206,6 @@ planning/autoware_objects_of_interest_marker_interface/** fumiya.watanabe@tier4. planning/autoware_obstacle_cruise_planner/** kosuke.takeuchi@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp yuki.takagi@tier4.jp planning/obstacle_stop_planner/** berkay@leodrive.ai bnk@leodrive.ai satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp planning/obstacle_velocity_limiter/** maxime.clement@tier4.jp -planning/autoware_path_smoother/** maxime.clement@tier4.jp takayuki.murooka@tier4.jp planning/planning_test_utils/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp zulfaqar.azmi@tier4.jp planning/planning_validator/** kosuke.takeuchi@tier4.jp takamasa.horibe@tier4.jp planning/autoware_route_handler/** fumiya.watanabe@tier4.jp go.sakayori@tier4.jp kosuke.takeuchi@tier4.jp mamoru.sobue@tier4.jp takayuki.murooka@tier4.jp zulfaqar.azmi@tier4.jp @@ -203,8 +215,6 @@ planning/sampling_based_planner/autoware_bezier_sampler/** maxime.clement@tier4. planning/sampling_based_planner/autoware_frenet_planner/** maxime.clement@tier4.jp planning/sampling_based_planner/autoware_path_sampler/** maxime.clement@tier4.jp planning/sampling_based_planner/autoware_sampler_common/** maxime.clement@tier4.jp -planning/autoware_scenario_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp -planning/autoware_surround_obstacle_checker/** go.sakayori@tier4.jp satoshi.ota@tier4.jp sensing/gnss_poser/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp sensing/image_diagnostics/** dai.nguyen@tier4.jp yoshi.ri@tier4.jp sensing/image_transport_decompressor/** kenzo.lobos@tier4.jp yukihiro.saito@tier4.jp @@ -245,7 +255,7 @@ system/topic_state_monitor/** ryohsuke.mitsudome@tier4.jp system/velodyne_monitor/** fumihito.ito@tier4.jp tools/reaction_analyzer/** berkay@leodrive.ai vehicle/autoware_accel_brake_map_calibrator/** taiki.tanaka@tier4.jp takeshi.miura@tier4.jp tomoya.kimura@tier4.jp -vehicle/autoware_external_cmd_converter/** takamasa.horibe@tier4.jp +vehicle/autoware_external_cmd_converter/** eiki.nagata.2@tier4.jp takamasa.horibe@tier4.jp vehicle/autoware_raw_vehicle_cmd_converter/** makoto.kurihara@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp vehicle/autoware_steer_offset_estimator/** taiki.tanaka@tier4.jp vehicle/autoware_vehicle_info_utils/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp From 86088c87cf5da38589bbcb9a66b97249676c3e3d Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Tue, 11 Jun 2024 14:26:24 +0900 Subject: [PATCH 108/142] fix(behavior_velocity_planner): fix test_depend (#7431) * fix(no_stopping_area): fix test_depend Signed-off-by: kosuke55 * fix blind spot --------- Signed-off-by: kosuke55 --- planning/autoware_behavior_velocity_planner/package.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/planning/autoware_behavior_velocity_planner/package.xml b/planning/autoware_behavior_velocity_planner/package.xml index 39bc432dc5134..dde7ab91d70b2 100644 --- a/planning/autoware_behavior_velocity_planner/package.xml +++ b/planning/autoware_behavior_velocity_planner/package.xml @@ -66,8 +66,10 @@ ament_cmake_ros ament_lint_auto autoware_behavior_velocity_blind_spot_module + autoware_behavior_velocity_blind_spot_module autoware_behavior_velocity_crosswalk_module autoware_behavior_velocity_intersection_module + autoware_behavior_velocity_no_stopping_area_module autoware_behavior_velocity_occlusion_spot_module autoware_behavior_velocity_run_out_module autoware_behavior_velocity_stop_line_module @@ -75,10 +77,8 @@ autoware_behavior_velocity_virtual_traffic_light_module autoware_behavior_velocity_walkway_module autoware_lint_common - behavior_velocity_blind_spot_module behavior_velocity_detection_area_module behavior_velocity_no_drivable_lane_module - behavior_velocity_no_stopping_area_module behavior_velocity_speed_bump_module From 9bfc65d65449e3df7cd61b89dbfa8b53bb10b932 Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Tue, 11 Jun 2024 14:27:31 +0900 Subject: [PATCH 109/142] feat(operation_mode_transition_manager): use polling subscriber (#7328) RT1-6698 use polling subscriber Signed-off-by: Muhammad Zulfaqar Azmi --- .../operation_mode_transition_manager/src/node.cpp | 11 +++-------- .../operation_mode_transition_manager/src/node.hpp | 8 +++++--- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/control/operation_mode_transition_manager/src/node.cpp b/control/operation_mode_transition_manager/src/node.cpp index 9c268102d7b67..77f7f9dc52487 100644 --- a/control/operation_mode_transition_manager/src/node.cpp +++ b/control/operation_mode_transition_manager/src/node.cpp @@ -22,14 +22,6 @@ namespace operation_mode_transition_manager OperationModeTransitionManager::OperationModeTransitionManager(const rclcpp::NodeOptions & options) : Node("operation_mode_transition_manager", options), compatibility_(this) { - sub_control_mode_report_ = create_subscription( - "control_mode_report", 1, - [this](const ControlModeReport::SharedPtr msg) { control_mode_report_ = *msg; }); - - sub_gate_operation_mode_ = create_subscription( - "gate_operation_mode", 1, - [this](const OperationModeState::SharedPtr msg) { gate_operation_mode_ = *msg; }); - cli_control_mode_ = create_client("control_mode_request"); pub_debug_info_ = create_publisher("~/debug_info", 1); @@ -214,6 +206,9 @@ void OperationModeTransitionManager::processTransition() void OperationModeTransitionManager::onTimer() { + control_mode_report_ = *sub_control_mode_report_.takeData(); + gate_operation_mode_ = *sub_gate_operation_mode_.takeData(); + for (const auto & [type, mode] : modes_) { mode->update(current_mode_ == type && transition_); } diff --git a/control/operation_mode_transition_manager/src/node.hpp b/control/operation_mode_transition_manager/src/node.hpp index c2d761fcf138c..8cca13a2fb9eb 100644 --- a/control/operation_mode_transition_manager/src/node.hpp +++ b/control/operation_mode_transition_manager/src/node.hpp @@ -21,10 +21,10 @@ #include #include #include +#include #include #include -#include namespace operation_mode_transition_manager { @@ -49,8 +49,10 @@ class OperationModeTransitionManager : public rclcpp::Node const ChangeOperationModeAPI::Service::Response::SharedPtr response); using ControlModeCommandType = ControlModeCommand::Request::_mode_type; - rclcpp::Subscription::SharedPtr sub_control_mode_report_; - rclcpp::Subscription::SharedPtr sub_gate_operation_mode_; + tier4_autoware_utils::InterProcessPollingSubscriber sub_control_mode_report_{ + this, "control_mode_report"}; + tier4_autoware_utils::InterProcessPollingSubscriber sub_gate_operation_mode_{ + this, "gate_operation_mode"}; rclcpp::Client::SharedPtr cli_control_mode_; rclcpp::Publisher::SharedPtr pub_debug_info_; rclcpp::TimerBase::SharedPtr timer_; From 34307f144732252f072a4d8274b1bd898dcf1dce Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Tue, 11 Jun 2024 14:28:09 +0900 Subject: [PATCH 110/142] feat(pure_pursuit): add polling subscriber (#7330) RT1-6699 add polling subscriber Signed-off-by: Muhammad Zulfaqar Azmi --- .../pure_pursuit/pure_pursuit_node.hpp | 8 +++++--- .../src/pure_pursuit/pure_pursuit_node.cpp | 20 ++----------------- 2 files changed, 7 insertions(+), 21 deletions(-) diff --git a/control/pure_pursuit/include/pure_pursuit/pure_pursuit_node.hpp b/control/pure_pursuit/include/pure_pursuit/pure_pursuit_node.hpp index a5ae31133be8e..10d2df8285f12 100644 --- a/control/pure_pursuit/include/pure_pursuit/pure_pursuit_node.hpp +++ b/control/pure_pursuit/include/pure_pursuit/pure_pursuit_node.hpp @@ -34,6 +34,7 @@ #include "pure_pursuit/pure_pursuit_viz.hpp" #include +#include #include #include @@ -48,7 +49,6 @@ #include #include -#include namespace pure_pursuit { @@ -79,8 +79,10 @@ class PurePursuitNode : public rclcpp::Node private: // Subscriber tier4_autoware_utils::SelfPoseListener self_pose_listener_{this}; - rclcpp::Subscription::SharedPtr sub_trajectory_; - rclcpp::Subscription::SharedPtr sub_current_odometry_; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_trajectory_{this, "input/reference_trajectory"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_current_odometry_{this, "input/current_odometry"}; autoware_planning_msgs::msg::Trajectory::ConstSharedPtr trajectory_; nav_msgs::msg::Odometry::ConstSharedPtr current_odometry_; diff --git a/control/pure_pursuit/src/pure_pursuit/pure_pursuit_node.cpp b/control/pure_pursuit/src/pure_pursuit/pure_pursuit_node.cpp index d629c8f549f52..7fadd3b4ced8f 100644 --- a/control/pure_pursuit/src/pure_pursuit/pure_pursuit_node.cpp +++ b/control/pure_pursuit/src/pure_pursuit/pure_pursuit_node.cpp @@ -71,13 +71,6 @@ PurePursuitNode::PurePursuitNode(const rclcpp::NodeOptions & node_options) param_.reverse_min_lookahead_distance = this->declare_parameter("reverse_min_lookahead_distance"); - // Subscribers - using std::placeholders::_1; - sub_trajectory_ = this->create_subscription( - "input/reference_trajectory", 1, std::bind(&PurePursuitNode::onTrajectory, this, _1)); - sub_current_odometry_ = this->create_subscription( - "input/current_odometry", 1, std::bind(&PurePursuitNode::onCurrentOdometry, this, _1)); - // Publishers pub_ctrl_cmd_ = this->create_publisher("output/control_raw", 1); @@ -118,21 +111,12 @@ bool PurePursuitNode::isDataReady() return true; } -void PurePursuitNode::onCurrentOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg) -{ - current_odometry_ = msg; -} - -void PurePursuitNode::onTrajectory( - const autoware_planning_msgs::msg::Trajectory::ConstSharedPtr msg) -{ - trajectory_ = msg; -} - void PurePursuitNode::onTimer() { current_pose_ = self_pose_listener_.getCurrentPose(); + current_odometry_ = sub_current_odometry_.takeData(); + trajectory_ = sub_trajectory_.takeData(); if (!isDataReady()) { return; } From 02e49bb4f68eb99417927e835273a6d96c49f3ad Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Tue, 11 Jun 2024 15:04:44 +0900 Subject: [PATCH 111/142] feat(shift_decider): use polling subscriber (#7345) RT1-6697 use polling subscriber Signed-off-by: Muhammad Zulfaqar Azmi --- .../autoware_shift_decider.hpp | 17 +++++++----- control/autoware_shift_decider/package.xml | 1 + .../src/autoware_shift_decider.cpp | 26 +++---------------- 3 files changed, 15 insertions(+), 29 deletions(-) diff --git a/control/autoware_shift_decider/include/autoware_shift_decider/autoware_shift_decider.hpp b/control/autoware_shift_decider/include/autoware_shift_decider/autoware_shift_decider.hpp index f3371a372b800..4702ef17e49bf 100644 --- a/control/autoware_shift_decider/include/autoware_shift_decider/autoware_shift_decider.hpp +++ b/control/autoware_shift_decider/include/autoware_shift_decider/autoware_shift_decider.hpp @@ -15,6 +15,8 @@ #ifndef AUTOWARE_SHIFT_DECIDER__AUTOWARE_SHIFT_DECIDER_HPP_ #define AUTOWARE_SHIFT_DECIDER__AUTOWARE_SHIFT_DECIDER_HPP_ +#include "tier4_autoware_utils/ros/polling_subscriber.hpp" + #include #include @@ -41,16 +43,19 @@ class ShiftDecider : public rclcpp::Node void initTimer(double period_s); rclcpp::Publisher::SharedPtr pub_shift_cmd_; - rclcpp::Subscription::SharedPtr sub_control_cmd_; - rclcpp::Subscription::SharedPtr sub_autoware_state_; - rclcpp::Subscription::SharedPtr sub_current_gear_; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_control_cmd_{this, "input/control_cmd"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_autoware_state_{this, "input/state"}; + tier4_autoware_utils::InterProcessPollingSubscriber + sub_current_gear_{this, "input/current_gear"}; rclcpp::TimerBase::SharedPtr timer_; - autoware_control_msgs::msg::Control::SharedPtr control_cmd_; - autoware_system_msgs::msg::AutowareState::SharedPtr autoware_state_; + autoware_control_msgs::msg::Control::ConstSharedPtr control_cmd_; + autoware_system_msgs::msg::AutowareState::ConstSharedPtr autoware_state_; autoware_vehicle_msgs::msg::GearCommand shift_cmd_; - autoware_vehicle_msgs::msg::GearReport::SharedPtr current_gear_ptr_; + autoware_vehicle_msgs::msg::GearReport::ConstSharedPtr current_gear_ptr_; uint8_t prev_shift_command = autoware_vehicle_msgs::msg::GearCommand::PARK; bool park_on_goal_; diff --git a/control/autoware_shift_decider/package.xml b/control/autoware_shift_decider/package.xml index 3091691783e34..40708c2c73cf1 100644 --- a/control/autoware_shift_decider/package.xml +++ b/control/autoware_shift_decider/package.xml @@ -18,6 +18,7 @@ autoware_vehicle_msgs rclcpp rclcpp_components + tier4_autoware_utils ament_cmake_cppcheck ament_cmake_cpplint diff --git a/control/autoware_shift_decider/src/autoware_shift_decider.cpp b/control/autoware_shift_decider/src/autoware_shift_decider.cpp index 4df45d6ccdb26..91345376c2681 100644 --- a/control/autoware_shift_decider/src/autoware_shift_decider.cpp +++ b/control/autoware_shift_decider/src/autoware_shift_decider.cpp @@ -18,8 +18,6 @@ #include #include -#include -#include namespace autoware::shift_decider { @@ -37,33 +35,15 @@ ShiftDecider::ShiftDecider(const rclcpp::NodeOptions & node_options) pub_shift_cmd_ = create_publisher("output/gear_cmd", durable_qos); - sub_control_cmd_ = create_subscription( - "input/control_cmd", queue_size, std::bind(&ShiftDecider::onControlCmd, this, _1)); - sub_autoware_state_ = create_subscription( - "input/state", queue_size, std::bind(&ShiftDecider::onAutowareState, this, _1)); - sub_current_gear_ = create_subscription( - "input/current_gear", queue_size, std::bind(&ShiftDecider::onCurrentGear, this, _1)); initTimer(0.1); } -void ShiftDecider::onControlCmd(autoware_control_msgs::msg::Control::SharedPtr msg) -{ - control_cmd_ = msg; -} - -void ShiftDecider::onAutowareState(autoware_system_msgs::msg::AutowareState::SharedPtr msg) -{ - autoware_state_ = msg; -} - -void ShiftDecider::onCurrentGear(autoware_vehicle_msgs::msg::GearReport::SharedPtr msg) -{ - current_gear_ptr_ = msg; -} - void ShiftDecider::onTimer() { + control_cmd_ = sub_control_cmd_.takeData(); + autoware_state_ = sub_autoware_state_.takeData(); + current_gear_ptr_ = sub_current_gear_.takeData(); if (!autoware_state_ || !control_cmd_ || !current_gear_ptr_) { return; } From dcf6b81ad2a1913cdb32d8d4689d3f7c7e635c85 Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Tue, 11 Jun 2024 15:20:32 +0900 Subject: [PATCH 112/142] refactor(operation_mode_transition_manager): prefix package and namespace with autoware_ (#7291) * RT1-6682 add prefix package and namespace with autoware_ Signed-off-by: Muhammad Zulfaqar Azmi * RT1-6682 fix package's description Signed-off-by: Zulfaqar Azmi --------- Signed-off-by: Muhammad Zulfaqar Azmi Signed-off-by: Zulfaqar Azmi --- .../CMakeLists.txt | 14 +++++++------- .../README.md | 10 +++++----- .../operation_mode_transition_manager.param.yaml | 0 .../transition_detailed_structure.drawio.svg | 0 .../image/transition_rough_structure.drawio.svg | 0 .../operation_mode_transition_manager.launch.xml | 6 +++--- .../msg/OperationModeTransitionManagerDebug.msg | 0 .../package.xml | 4 ++-- .../operation_mode_transition_manager.schema.json | 0 .../src/compatibility.cpp | 4 ++-- .../src/compatibility.hpp | 4 ++-- .../src/data.cpp | 4 ++-- .../src/data.hpp | 4 ++-- .../src/node.cpp | 9 +++++---- .../src/node.hpp | 4 ++-- .../src/state.cpp | 4 ++-- .../src/state.hpp | 9 +++++---- .../src/util.hpp | 5 +++-- .../tier4_control_launch/launch/control.launch.py | 15 ++++++++------- 19 files changed, 50 insertions(+), 46 deletions(-) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/CMakeLists.txt (60%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/README.md (95%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/config/operation_mode_transition_manager.param.yaml (100%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/image/transition_detailed_structure.drawio.svg (100%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/image/transition_rough_structure.drawio.svg (100%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/launch/operation_mode_transition_manager.launch.xml (75%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/msg/OperationModeTransitionManagerDebug.msg (100%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/package.xml (91%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/schema/operation_mode_transition_manager.schema.json (100%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/src/compatibility.cpp (97%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/src/compatibility.hpp (95%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/src/data.cpp (94%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/src/data.hpp (95%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/src/node.cpp (96%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/src/node.hpp (96%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/src/state.cpp (99%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/src/state.hpp (91%) rename control/{operation_mode_transition_manager => autoware_operation_mode_transition_manager}/src/util.hpp (85%) diff --git a/control/operation_mode_transition_manager/CMakeLists.txt b/control/autoware_operation_mode_transition_manager/CMakeLists.txt similarity index 60% rename from control/operation_mode_transition_manager/CMakeLists.txt rename to control/autoware_operation_mode_transition_manager/CMakeLists.txt index 9c8ca29fdc277..2ebd6ec153ed2 100644 --- a/control/operation_mode_transition_manager/CMakeLists.txt +++ b/control/autoware_operation_mode_transition_manager/CMakeLists.txt @@ -1,21 +1,21 @@ cmake_minimum_required(VERSION 3.14) -project(operation_mode_transition_manager) +project(autoware_operation_mode_transition_manager) find_package(autoware_cmake REQUIRED) autoware_package() find_package(ament_cmake_auto REQUIRED) ament_auto_find_build_dependencies() -ament_auto_add_library(operation_mode_transition_manager_node SHARED +ament_auto_add_library(autoware_operation_mode_transition_manager_node SHARED src/compatibility.cpp src/data.cpp src/node.cpp src/state.cpp ) -rclcpp_components_register_node(operation_mode_transition_manager_node - PLUGIN "operation_mode_transition_manager::OperationModeTransitionManager" - EXECUTABLE operation_mode_transition_manager_exe +rclcpp_components_register_node(autoware_operation_mode_transition_manager_node + PLUGIN "autoware::operation_mode_transition_manager::OperationModeTransitionManager" + EXECUTABLE autoware_operation_mode_transition_manager_exe ) rosidl_generate_interfaces( @@ -26,12 +26,12 @@ rosidl_generate_interfaces( # to use same package defined message if(${rosidl_cmake_VERSION} VERSION_LESS 2.5.0) - rosidl_target_interfaces(operation_mode_transition_manager_node + rosidl_target_interfaces(autoware_operation_mode_transition_manager_node ${PROJECT_NAME} "rosidl_typesupport_cpp") else() rosidl_get_typesupport_target( cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp") - target_link_libraries(operation_mode_transition_manager_node "${cpp_typesupport_target}") + target_link_libraries(autoware_operation_mode_transition_manager_node "${cpp_typesupport_target}") endif() diff --git a/control/operation_mode_transition_manager/README.md b/control/autoware_operation_mode_transition_manager/README.md similarity index 95% rename from control/operation_mode_transition_manager/README.md rename to control/autoware_operation_mode_transition_manager/README.md index 008d092565ba4..3a9680f42702b 100644 --- a/control/operation_mode_transition_manager/README.md +++ b/control/autoware_operation_mode_transition_manager/README.md @@ -1,4 +1,4 @@ -# operation_mode_transition_manager +# autoware_operation_mode_transition_manager ## Purpose / Use cases @@ -25,7 +25,7 @@ There is also an `In Transition` state that occurs during each mode transitions. ## Design -A rough design of the relationship between `operation_mode_transition_manager`` and the other nodes is shown below. +A rough design of the relationship between `autoware_operation_mode_transition_manager`` and the other nodes is shown below. ![transition_rough_structure](image/transition_rough_structure.drawio.svg) @@ -33,7 +33,7 @@ A more detailed structure is below. ![transition_detailed_structure](image/transition_detailed_structure.drawio.svg) -Here we see that `operation_mode_transition_manager` has multiple state transitions as follows +Here we see that `autoware_operation_mode_transition_manager` has multiple state transitions as follows - **AUTOWARE ENABLED <---> DISABLED** - **ENABLED**: the vehicle is controlled by Autoware. @@ -73,7 +73,7 @@ For the backward compatibility (to be removed): ### Outputs - /system/operation_mode/state [`autoware_adapi_v1_msgs/msg/OperationModeState`]: to inform the current operation mode -- /control/operation_mode_transition_manager/debug_info [`operation_mode_transition_manager/msg/OperationModeTransitionManagerDebug`]: detailed information about the operation mode transition +- /control/autoware_operation_mode_transition_manager/debug_info [`autoware_operation_mode_transition_manager/msg/OperationModeTransitionManagerDebug`]: detailed information about the operation mode transition - /control/gate_mode_cmd [`tier4_control_msgs/msg/GateMode`]: to change the `vehicle_cmd_gate` state to use its features (to be removed) - /autoware/engage [`autoware_vehicle_msgs/msg/Engage`]: @@ -83,7 +83,7 @@ For the backward compatibility (to be removed): ## Parameters -{{ json_to_markdown("control/operation_mode_transition_manager/schema/operation_mode_transition_manager.schema.json") }} +{{ json_to_markdown("control/autoware_operation_mode_transition_manager/schema/operation_mode_transition_manager.schema.json") }} | Name | Type | Description | Default value | | :--------------------------------- | :------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | diff --git a/control/operation_mode_transition_manager/config/operation_mode_transition_manager.param.yaml b/control/autoware_operation_mode_transition_manager/config/operation_mode_transition_manager.param.yaml similarity index 100% rename from control/operation_mode_transition_manager/config/operation_mode_transition_manager.param.yaml rename to control/autoware_operation_mode_transition_manager/config/operation_mode_transition_manager.param.yaml diff --git a/control/operation_mode_transition_manager/image/transition_detailed_structure.drawio.svg b/control/autoware_operation_mode_transition_manager/image/transition_detailed_structure.drawio.svg similarity index 100% rename from control/operation_mode_transition_manager/image/transition_detailed_structure.drawio.svg rename to control/autoware_operation_mode_transition_manager/image/transition_detailed_structure.drawio.svg diff --git a/control/operation_mode_transition_manager/image/transition_rough_structure.drawio.svg b/control/autoware_operation_mode_transition_manager/image/transition_rough_structure.drawio.svg similarity index 100% rename from control/operation_mode_transition_manager/image/transition_rough_structure.drawio.svg rename to control/autoware_operation_mode_transition_manager/image/transition_rough_structure.drawio.svg diff --git a/control/operation_mode_transition_manager/launch/operation_mode_transition_manager.launch.xml b/control/autoware_operation_mode_transition_manager/launch/operation_mode_transition_manager.launch.xml similarity index 75% rename from control/operation_mode_transition_manager/launch/operation_mode_transition_manager.launch.xml rename to control/autoware_operation_mode_transition_manager/launch/operation_mode_transition_manager.launch.xml index c6f03db0fcacc..700228b8afbc3 100644 --- a/control/operation_mode_transition_manager/launch/operation_mode_transition_manager.launch.xml +++ b/control/autoware_operation_mode_transition_manager/launch/operation_mode_transition_manager.launch.xml @@ -1,9 +1,9 @@ - + - - + + diff --git a/control/operation_mode_transition_manager/msg/OperationModeTransitionManagerDebug.msg b/control/autoware_operation_mode_transition_manager/msg/OperationModeTransitionManagerDebug.msg similarity index 100% rename from control/operation_mode_transition_manager/msg/OperationModeTransitionManagerDebug.msg rename to control/autoware_operation_mode_transition_manager/msg/OperationModeTransitionManagerDebug.msg diff --git a/control/operation_mode_transition_manager/package.xml b/control/autoware_operation_mode_transition_manager/package.xml similarity index 91% rename from control/operation_mode_transition_manager/package.xml rename to control/autoware_operation_mode_transition_manager/package.xml index 40232469fdb6a..c93b38c537a73 100644 --- a/control/operation_mode_transition_manager/package.xml +++ b/control/autoware_operation_mode_transition_manager/package.xml @@ -1,7 +1,7 @@ - operation_mode_transition_manager + autoware_operation_mode_transition_manager 0.1.0 - The vehicle_cmd_gate package + The operation_mode_transition_manager package Takamasa Horibe Tomoya Kimura Takayuki Murooka diff --git a/control/operation_mode_transition_manager/schema/operation_mode_transition_manager.schema.json b/control/autoware_operation_mode_transition_manager/schema/operation_mode_transition_manager.schema.json similarity index 100% rename from control/operation_mode_transition_manager/schema/operation_mode_transition_manager.schema.json rename to control/autoware_operation_mode_transition_manager/schema/operation_mode_transition_manager.schema.json diff --git a/control/operation_mode_transition_manager/src/compatibility.cpp b/control/autoware_operation_mode_transition_manager/src/compatibility.cpp similarity index 97% rename from control/operation_mode_transition_manager/src/compatibility.cpp rename to control/autoware_operation_mode_transition_manager/src/compatibility.cpp index 66a5fbd6b1b13..df22581dd361e 100644 --- a/control/operation_mode_transition_manager/src/compatibility.cpp +++ b/control/autoware_operation_mode_transition_manager/src/compatibility.cpp @@ -16,7 +16,7 @@ #include -namespace operation_mode_transition_manager +namespace autoware::operation_mode_transition_manager { Compatibility::Compatibility(rclcpp::Node * node) : node_(node) @@ -140,4 +140,4 @@ void Compatibility::set_mode(const OperationMode mode) } } -} // namespace operation_mode_transition_manager +} // namespace autoware::operation_mode_transition_manager diff --git a/control/operation_mode_transition_manager/src/compatibility.hpp b/control/autoware_operation_mode_transition_manager/src/compatibility.hpp similarity index 95% rename from control/operation_mode_transition_manager/src/compatibility.hpp rename to control/autoware_operation_mode_transition_manager/src/compatibility.hpp index d9bde7cb22872..34d4c7a24dd30 100644 --- a/control/operation_mode_transition_manager/src/compatibility.hpp +++ b/control/autoware_operation_mode_transition_manager/src/compatibility.hpp @@ -22,7 +22,7 @@ #include #include -namespace operation_mode_transition_manager +namespace autoware::operation_mode_transition_manager { class Compatibility @@ -54,6 +54,6 @@ class Compatibility SelectorModeMsg::ConstSharedPtr selector_mode_; }; -} // namespace operation_mode_transition_manager +} // namespace autoware::operation_mode_transition_manager #endif // COMPATIBILITY_HPP_ diff --git a/control/operation_mode_transition_manager/src/data.cpp b/control/autoware_operation_mode_transition_manager/src/data.cpp similarity index 94% rename from control/operation_mode_transition_manager/src/data.cpp rename to control/autoware_operation_mode_transition_manager/src/data.cpp index 8734b6d1c8e86..1fac496f3c71c 100644 --- a/control/operation_mode_transition_manager/src/data.cpp +++ b/control/autoware_operation_mode_transition_manager/src/data.cpp @@ -14,7 +14,7 @@ #include "data.hpp" -namespace operation_mode_transition_manager +namespace autoware::operation_mode_transition_manager { std::string toString(const std::optional mode) @@ -67,4 +67,4 @@ OperationModeValue toMsg(const OperationMode mode) return OperationModeState::UNKNOWN; } -} // namespace operation_mode_transition_manager +} // namespace autoware::operation_mode_transition_manager diff --git a/control/operation_mode_transition_manager/src/data.hpp b/control/autoware_operation_mode_transition_manager/src/data.hpp similarity index 95% rename from control/operation_mode_transition_manager/src/data.hpp rename to control/autoware_operation_mode_transition_manager/src/data.hpp index 8ea9f8d2b99ee..63ccc90b3af85 100644 --- a/control/operation_mode_transition_manager/src/data.hpp +++ b/control/autoware_operation_mode_transition_manager/src/data.hpp @@ -27,7 +27,7 @@ #include #include -namespace operation_mode_transition_manager +namespace autoware::operation_mode_transition_manager { using ServiceResponse = autoware_adapi_v1_msgs::srv::ChangeOperationMode::Response; @@ -81,6 +81,6 @@ std::string toString(const std::optional mode); std::optional toEnum(const ChangeOperationMode::Request & request); OperationModeValue toMsg(const OperationMode mode); -} // namespace operation_mode_transition_manager +} // namespace autoware::operation_mode_transition_manager #endif // DATA_HPP_ diff --git a/control/operation_mode_transition_manager/src/node.cpp b/control/autoware_operation_mode_transition_manager/src/node.cpp similarity index 96% rename from control/operation_mode_transition_manager/src/node.cpp rename to control/autoware_operation_mode_transition_manager/src/node.cpp index 77f7f9dc52487..ed9351aa0b079 100644 --- a/control/operation_mode_transition_manager/src/node.cpp +++ b/control/autoware_operation_mode_transition_manager/src/node.cpp @@ -16,11 +16,11 @@ #include -namespace operation_mode_transition_manager +namespace autoware::operation_mode_transition_manager { OperationModeTransitionManager::OperationModeTransitionManager(const rclcpp::NodeOptions & options) -: Node("operation_mode_transition_manager", options), compatibility_(this) +: Node("autoware_operation_mode_transition_manager", options), compatibility_(this) { cli_control_mode_ = create_client("control_mode_request"); pub_debug_info_ = create_publisher("~/debug_info", 1); @@ -281,7 +281,8 @@ void OperationModeTransitionManager::publishData() pub_debug_info_->publish(debug_info); } -} // namespace operation_mode_transition_manager +} // namespace autoware::operation_mode_transition_manager #include -RCLCPP_COMPONENTS_REGISTER_NODE(operation_mode_transition_manager::OperationModeTransitionManager) +RCLCPP_COMPONENTS_REGISTER_NODE( + autoware::operation_mode_transition_manager::OperationModeTransitionManager) diff --git a/control/operation_mode_transition_manager/src/node.hpp b/control/autoware_operation_mode_transition_manager/src/node.hpp similarity index 96% rename from control/operation_mode_transition_manager/src/node.hpp rename to control/autoware_operation_mode_transition_manager/src/node.hpp index 8cca13a2fb9eb..0cacb083fc293 100644 --- a/control/operation_mode_transition_manager/src/node.hpp +++ b/control/autoware_operation_mode_transition_manager/src/node.hpp @@ -26,7 +26,7 @@ #include #include -namespace operation_mode_transition_manager +namespace autoware::operation_mode_transition_manager { class OperationModeTransitionManager : public rclcpp::Node @@ -78,6 +78,6 @@ class OperationModeTransitionManager : public rclcpp::Node std::optional compatibility_transition_; }; -} // namespace operation_mode_transition_manager +} // namespace autoware::operation_mode_transition_manager #endif // NODE_HPP_ diff --git a/control/operation_mode_transition_manager/src/state.cpp b/control/autoware_operation_mode_transition_manager/src/state.cpp similarity index 99% rename from control/operation_mode_transition_manager/src/state.cpp rename to control/autoware_operation_mode_transition_manager/src/state.cpp index 82270875b2e17..4eaf0ddf8e764 100644 --- a/control/operation_mode_transition_manager/src/state.cpp +++ b/control/autoware_operation_mode_transition_manager/src/state.cpp @@ -23,7 +23,7 @@ #include #include -namespace operation_mode_transition_manager +namespace autoware::operation_mode_transition_manager { using motion_utils::findNearestIndex; @@ -316,4 +316,4 @@ bool AutonomousMode::isModeChangeAvailable() return is_all_ok; } -} // namespace operation_mode_transition_manager +} // namespace autoware::operation_mode_transition_manager diff --git a/control/operation_mode_transition_manager/src/state.hpp b/control/autoware_operation_mode_transition_manager/src/state.hpp similarity index 91% rename from control/operation_mode_transition_manager/src/state.hpp rename to control/autoware_operation_mode_transition_manager/src/state.hpp index 54434690f2147..a8f20ebf7369a 100644 --- a/control/operation_mode_transition_manager/src/state.hpp +++ b/control/autoware_operation_mode_transition_manager/src/state.hpp @@ -15,8 +15,8 @@ #ifndef STATE_HPP_ #define STATE_HPP_ +#include "autoware_operation_mode_transition_manager/msg/operation_mode_transition_manager_debug.hpp" #include "data.hpp" -#include "operation_mode_transition_manager/msg/operation_mode_transition_manager_debug.hpp" #include #include @@ -28,7 +28,7 @@ #include #include -namespace operation_mode_transition_manager +namespace autoware::operation_mode_transition_manager { class ModeChangeBase @@ -39,7 +39,8 @@ class ModeChangeBase virtual bool isModeChangeCompleted() = 0; virtual bool isModeChangeAvailable() = 0; - using DebugInfo = operation_mode_transition_manager::msg::OperationModeTransitionManagerDebug; + using DebugInfo = + autoware_operation_mode_transition_manager::msg::OperationModeTransitionManagerDebug; virtual DebugInfo getDebugInfo() { return DebugInfo{}; } }; @@ -105,6 +106,6 @@ class RemoteMode : public ModeChangeBase bool isModeChangeAvailable() override { return true; } }; -} // namespace operation_mode_transition_manager +} // namespace autoware::operation_mode_transition_manager #endif // STATE_HPP_ diff --git a/control/operation_mode_transition_manager/src/util.hpp b/control/autoware_operation_mode_transition_manager/src/util.hpp similarity index 85% rename from control/operation_mode_transition_manager/src/util.hpp rename to control/autoware_operation_mode_transition_manager/src/util.hpp index e3fa20aaafd74..2e7e97a9e90d7 100644 --- a/control/operation_mode_transition_manager/src/util.hpp +++ b/control/autoware_operation_mode_transition_manager/src/util.hpp @@ -15,9 +15,10 @@ #ifndef UTIL_HPP_ #define UTIL_HPP_ -#include "operation_mode_transition_manager/msg/operation_mode_transition_manager_debug.hpp" +#include "autoware_operation_mode_transition_manager/msg/operation_mode_transition_manager_debug.hpp" -using DebugInfo = operation_mode_transition_manager::msg::OperationModeTransitionManagerDebug; +using DebugInfo = + autoware_operation_mode_transition_manager::msg::OperationModeTransitionManagerDebug; void setAllOk(DebugInfo & debug_info) { diff --git a/launch/tier4_control_launch/launch/control.launch.py b/launch/tier4_control_launch/launch/control.launch.py index 632571790a645..02ad160164c32 100644 --- a/launch/tier4_control_launch/launch/control.launch.py +++ b/launch/tier4_control_launch/launch/control.launch.py @@ -53,7 +53,8 @@ def launch_setup(context, *args, **kwargs): with open(LaunchConfiguration("control_validator_param_path").perform(context), "r") as f: control_validator_param = yaml.safe_load(f)["/**"]["ros__parameters"] with open( - LaunchConfiguration("operation_mode_transition_manager_param_path").perform(context), "r" + LaunchConfiguration("operation_mode_transition_manager_param_path").perform(context), + "r", ) as f: operation_mode_transition_manager_param = yaml.safe_load(f)["/**"]["ros__parameters"] with open(LaunchConfiguration("shift_decider_param_path").perform(context), "r") as f: @@ -245,10 +246,10 @@ def launch_setup(context, *args, **kwargs): ) # operation mode transition manager - operation_mode_transition_manager_component = ComposableNode( - package="operation_mode_transition_manager", - plugin="operation_mode_transition_manager::OperationModeTransitionManager", - name="operation_mode_transition_manager", + autoware_operation_mode_transition_manager_component = ComposableNode( + package="autoware_operation_mode_transition_manager", + plugin="autoware::operation_mode_transition_manager::OperationModeTransitionManager", + name="autoware_operation_mode_transition_manager", remappings=[ # input ("kinematics", "/localization/kinematic_state"), @@ -347,7 +348,7 @@ def launch_setup(context, *args, **kwargs): lane_departure_component, shift_decider_component, vehicle_cmd_gate_component, - operation_mode_transition_manager_component, + autoware_operation_mode_transition_manager_component, glog_component, ], ) @@ -362,7 +363,7 @@ def launch_setup(context, *args, **kwargs): lane_departure_component, shift_decider_component, vehicle_cmd_gate_component, - operation_mode_transition_manager_component, + autoware_operation_mode_transition_manager_component, glog_component, ], ) From 72237f7d167efcc110986320c5537edff8ffb852 Mon Sep 17 00:00:00 2001 From: eiki <53928021+N-Eiki@users.noreply.github.com> Date: Tue, 11 Jun 2024 15:31:59 +0900 Subject: [PATCH 113/142] feat(accel_brake_map_calibrator): replace polling takeData function with the callback function (#7429) * fix : repush to solve conflict Signed-off-by: N-Eiki * style(pre-commit): autofix * delete duplicated int cast Signed-off-by: N-Eiki --------- Signed-off-by: N-Eiki Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../accel_brake_map_calibrator_node.hpp | 140 ++-- .../package.xml | 1 + .../src/accel_brake_map_calibrator_node.cpp | 619 +++++++++--------- 3 files changed, 390 insertions(+), 370 deletions(-) diff --git a/vehicle/autoware_accel_brake_map_calibrator/include/autoware_accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp b/vehicle/autoware_accel_brake_map_calibrator/include/autoware_accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp index ae20df45a0f93..7d32fdc357510 100644 --- a/vehicle/autoware_accel_brake_map_calibrator/include/autoware_accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp +++ b/vehicle/autoware_accel_brake_map_calibrator/include/autoware_accel_brake_map_calibrator/accel_brake_map_calibrator_node.hpp @@ -23,6 +23,7 @@ #include "rclcpp/rclcpp.hpp" #include "tf2/utils.h" #include "tier4_autoware_utils/ros/logger_level_configure.hpp" +#include "tier4_autoware_utils/ros/polling_subscriber.hpp" #include "tier4_autoware_utils/ros/transform_listener.hpp" #include @@ -55,13 +56,12 @@ namespace autoware::accel_brake_map_calibrator { - -using autoware::raw_vehicle_cmd_converter::AccelMap; -using autoware::raw_vehicle_cmd_converter::BrakeMap; using autoware_vehicle_msgs::msg::SteeringReport; using autoware_vehicle_msgs::msg::VelocityReport; using geometry_msgs::msg::TwistStamped; using nav_msgs::msg::OccupancyGrid; +using raw_vehicle_cmd_converter::AccelMap; +using raw_vehicle_cmd_converter::BrakeMap; using std_msgs::msg::Float32MultiArray; using tier4_debug_msgs::msg::Float32MultiArrayStamped; using tier4_debug_msgs::msg::Float32Stamped; @@ -107,18 +107,22 @@ class AccelBrakeMapCalibrator : public rclcpp::Node rclcpp::Publisher::SharedPtr map_error_ratio_pub_; rclcpp::Publisher::SharedPtr calibration_status_pub_; - rclcpp::Subscription::SharedPtr velocity_sub_; - rclcpp::Subscription::SharedPtr steer_sub_; - rclcpp::Subscription::SharedPtr actuation_status_sub_; - rclcpp::Subscription::SharedPtr actuation_cmd_sub_; + tier4_autoware_utils::InterProcessPollingSubscriber steer_sub_{ + this, "~/input/steer"}; + tier4_autoware_utils::InterProcessPollingSubscriber actuation_status_sub_{ + this, "~/input/actuation_status"}; + tier4_autoware_utils::InterProcessPollingSubscriber actuation_cmd_sub_{ + this, "~/input/actuation_cmd"}; + tier4_autoware_utils::InterProcessPollingSubscriber velocity_sub_{ + this, "~/input/velocity"}; // Service rclcpp::Service::SharedPtr update_map_dir_server_; rclcpp::TimerBase::SharedPtr timer_; rclcpp::TimerBase::SharedPtr timer_output_csv_; - void initTimer(double period_s); - void initOutputCSVTimer(double period_s); + void init_timer(double period_s); + void init_output_csv_timer(double period_s); TwistStamped::ConstSharedPtr twist_ptr_; std::vector> twist_vec_; @@ -229,79 +233,79 @@ class AccelBrakeMapCalibrator : public rclcpp::Node // output log std::ofstream output_log_; - - bool getCurrentPitchFromTF(double * pitch); - void timerCallback(); - void timerCallbackOutputCSV(); - void executeUpdate( + void fetch_data(); + bool get_current_pitch_from_tf(double * pitch); + bool take_data(); + void timer_callback_output_csv(); + void execute_update( const bool accel_mode, const int accel_pedal_index, const int accel_vel_index, const int brake_pedal_index, const int brake_vel_index); - bool updateFourCellAroundOffset( + bool update_four_cell_around_offset( const bool accel_mode, const int accel_pedal_index, const int accel_vel_index, const int brake_pedal_index, const int brake_vel_index, const double measured_acc); - bool updateEachValOffset( + bool update_each_val_offset( const bool accel_mode, const int accel_pedal_index, const int accel_vel_index, const int brake_pedal_index, const int brake_vel_index, const double measured_acc, const double map_acc); - void updateTotalMapOffset(const double measured_acc, const double map_acc); - void callbackActuation( - const std_msgs::msg::Header header, const double accel, const double brake); - void callbackActuationCommand(const ActuationCommandStamped::ConstSharedPtr msg); - void callbackActuationStatus(const ActuationStatusStamped::ConstSharedPtr msg); - void callbackVelocity(const VelocityReport::ConstSharedPtr msg); - void callbackSteer(const SteeringReport::ConstSharedPtr msg); - bool callbackUpdateMapService( + void update_total_map_offset(const double measured_acc, const double map_acc); + + void take_actuation(const std_msgs::msg::Header & header, const double accel, const double brake); + void take_actuation_command(const ActuationCommandStamped::ConstSharedPtr msg); + void take_actuation_status(const ActuationStatusStamped::ConstSharedPtr msg); + void take_velocity(const VelocityReport::ConstSharedPtr msg); + + bool callback_update_map_service( const std::shared_ptr request_header, UpdateAccelBrakeMap::Request::SharedPtr req, UpdateAccelBrakeMap::Response::SharedPtr res); - bool getAccFromMap(const double velocity, const double pedal); - double lowpass(const double original, const double current, const double gain = 0.8); - double getPedalSpeed( + bool get_acc_from_map(const double velocity, const double pedal); + static double lowpass(const double original, const double current, const double gain = 0.8); + static double get_pedal_speed( const DataStampedPtr & prev_pedal, const DataStampedPtr & current_pedal, const double prev_pedal_speed); - double getAccel( + double get_accel( const TwistStamped::ConstSharedPtr & prev_twist, - const TwistStamped::ConstSharedPtr & current_twist); - double getJerk(); - bool indexValueSearch( - const std::vector value_index, const double value, const double value_thresh, - int * searched_index); - int nearestValueSearch(const std::vector value_index, const double value); - int nearestPedalSearch(); - int nearestVelSearch(); - void takeConsistencyOfAccelMap(); - void takeConsistencyOfBrakeMap(); - bool updateAccelBrakeMap(); - void publishFloat32(const std::string publish_type, const double val); - void publishUpdateSuggestFlag(); - double getPitchCompensatedAcceleration(); - void executeEvaluation(); - double calculateEstimatedAcc( + const TwistStamped::ConstSharedPtr & current_twist) const; + double get_jerk(); + bool index_value_search( + const std::vector & value_index, const double value, const double value_thresh, + int * searched_index) const; + static int nearest_value_search(const std::vector & value_index, const double value); + int nearest_pedal_search(); + int nearest_vel_search(); + void take_consistency_of_accel_map(); + void take_consistency_of_brake_map(); + bool update_accel_brake_map(); + void publish_float32(const std::string & publish_type, const double val); + void publish_update_suggest_flag(); + double get_pitch_compensated_acceleration() const; + void execute_evaluation(); + static double calculate_estimated_acc( const double throttle, const double brake, const double vel, AccelMap & accel_map, BrakeMap & brake_map); - double calculateAccelSquaredError( + double calculate_accel_squared_error( const double throttle, const double brake, const double vel, AccelMap & accel_map, BrakeMap & brake_map); - double calculateAccelErrorL1Norm( + double calculate_accel_error_l1_norm( const double throttle, const double brake, const double vel, AccelMap & accel_map, BrakeMap & brake_map); - std::vector getMapColumnFromUnifiedIndex( + static std::vector get_map_column_from_unified_index( const Map & accel_map_value, const Map & brake_map_value, const std::size_t index); - double getPedalValueFromUnifiedIndex(const std::size_t index); - int getUnifiedIndexFromAccelBrakeIndex(const bool accel_map, const std::size_t index); - void pushDataToQue( + double get_pedal_value_from_unified_index(const std::size_t index); + int get_unified_index_from_accel_brake_index(const bool accel_map, const std::size_t index); + static void push_data_to_que( const TwistStamped::ConstSharedPtr & data, const std::size_t max_size, std::queue * que); template - void pushDataToVec(const T data, const std::size_t max_size, std::vector * vec); + void push_data_to_vec(const T data, const std::size_t max_size, std::vector * vec); template - T getNearestTimeDataFromVec( + static T get_nearest_time_data_from_vec( const T base_data, const double back_time, const std::vector & vec); - DataStampedPtr getNearestTimeDataFromVec( + DataStampedPtr get_nearest_time_data_from_vec( DataStampedPtr base_data, const double back_time, const std::vector & vec); - double getAverage(const std::vector & vec); - double getStandardDeviation(const std::vector & vec); - bool isTimeout(const builtin_interfaces::msg::Time & stamp, const double timeout_sec); - bool isTimeout(const DataStampedPtr & data_stamped, const double timeout_sec); + static double get_average(const std::vector & vec); + double get_standard_deviation(const std::vector & vec); + bool is_timeout(const builtin_interfaces::msg::Time & stamp, const double timeout_sec); + bool is_timeout(const DataStampedPtr & data_stamped, const double timeout_sec); /* for covariance calculation */ // mean value on each cell (counting method depends on the update algorithm) @@ -314,24 +318,24 @@ class AccelBrakeMapCalibrator : public rclcpp::Node Eigen::MatrixXd accel_data_num_; Eigen::MatrixXd brake_data_num_; - OccupancyGrid getOccMsg( - const std::string frame_id, const double height, const double width, const double resolution, + OccupancyGrid get_occ_msg( + const std::string & frame_id, const double height, const double width, const double resolution, const std::vector & map_value); /* Diag*/ - void checkUpdateSuggest(diagnostic_updater::DiagnosticStatusWrapper & stat); + void check_update_suggest(diagnostic_updater::DiagnosticStatusWrapper & stat); /* Debug */ - void publishMap( - const Map accel_map_value, const Map brake_map_value, const std::string publish_type); - void publishOffsetCovMap(const Map accel_map_value, const Map brake_map_value); - void publishCountMap(); - void publishIndex(); - bool writeMapToCSV( + void publish_map( + const Map & accel_map_value, const Map & brake_map_value, const std::string & publish_type); + void publish_offset_cov_map(const Map accel_map_value, const Map brake_map_value); + void publish_count_map(); + void publish_index(); + bool write_map_to_csv( std::vector vel_index, std::vector pedal_index, Map value_map, std::string filename); - void addIndexToCSV(std::ofstream * csv_file); - void addLogToCSV( + static void add_index_to_csv(std::ofstream * csv_file); + static void add_log_to_csv( std::ofstream * csv_file, const double & timestamp, const double velocity, const double accel, const double pitched_accel, const double accel_pedal, const double brake_pedal, const double accel_pedal_speed, const double brake_pedal_speed, const double pitch, diff --git a/vehicle/autoware_accel_brake_map_calibrator/package.xml b/vehicle/autoware_accel_brake_map_calibrator/package.xml index b2e3b97620272..335ec2bba2ac3 100644 --- a/vehicle/autoware_accel_brake_map_calibrator/package.xml +++ b/vehicle/autoware_accel_brake_map_calibrator/package.xml @@ -7,6 +7,7 @@ Tomoya Kimura Taiki Tanaka Takeshi Miura + Eiki Nagata Apache License 2.0 diff --git a/vehicle/autoware_accel_brake_map_calibrator/src/accel_brake_map_calibrator_node.cpp b/vehicle/autoware_accel_brake_map_calibrator/src/accel_brake_map_calibrator_node.cpp index 8c1a35c263712..ee0b7531d46cb 100644 --- a/vehicle/autoware_accel_brake_map_calibrator/src/accel_brake_map_calibrator_node.cpp +++ b/vehicle/autoware_accel_brake_map_calibrator/src/accel_brake_map_calibrator_node.cpp @@ -46,10 +46,10 @@ AccelBrakeMapCalibrator::AccelBrakeMapCalibrator(const rclcpp::NodeOptions & nod max_accel_ = declare_parameter("max_accel", 5.0); min_accel_ = declare_parameter("min_accel", -5.0); pedal_to_accel_delay_ = declare_parameter("pedal_to_accel_delay", 0.3); - max_data_count_ = declare_parameter("max_data_count", 200); + max_data_count_ = static_cast(declare_parameter("max_data_count", 200)); pedal_accel_graph_output_ = declare_parameter("pedal_accel_graph_output", false); progress_file_output_ = declare_parameter("progress_file_output", false); - precision_ = declare_parameter("precision", 3); + precision_ = static_cast(declare_parameter("precision", 3)); const auto get_pitch_method_str = declare_parameter("get_pitch_method", std::string("tf")); if (get_pitch_method_str == std::string("tf")) { get_pitch_method_ = GET_PITCH_METHOD::TF; @@ -95,7 +95,7 @@ AccelBrakeMapCalibrator::AccelBrakeMapCalibrator(const rclcpp::NodeOptions & nod static constexpr std::size_t queue_size = 1; rclcpp::QoS durable_qos(queue_size); - // Publisher for checkUpdateSuggest + // Publisher for check_update_suggest calibration_status_pub_ = create_publisher( "/accel_brake_map_calibrator/output/calibration_status", durable_qos); @@ -103,7 +103,7 @@ AccelBrakeMapCalibrator::AccelBrakeMapCalibrator(const rclcpp::NodeOptions & nod updater_ptr_ = std::make_shared(this, 1.0 / update_hz_); updater_ptr_->setHardwareID("accel_brake_map_calibrator"); updater_ptr_->add( - "accel_brake_map_calibrator", this, &AccelBrakeMapCalibrator::checkUpdateSuggest); + "accel_brake_map_calibrator", this, &AccelBrakeMapCalibrator::check_update_suggest); { csv_default_map_dir_ = declare_parameter("csv_default_map_dir", std::string("")); @@ -132,7 +132,7 @@ AccelBrakeMapCalibrator::AccelBrakeMapCalibrator(const rclcpp::NodeOptions & nod std::string output_log_file = declare_parameter("output_log_file", std::string("")); output_log_.open(output_log_file); - addIndexToCSV(&output_log_); + add_index_to_csv(&output_log_); debug_values_.data.resize(num_debug_values_); @@ -169,15 +169,15 @@ AccelBrakeMapCalibrator::AccelBrakeMapCalibrator(const rclcpp::NodeOptions & nod // initialize matrix for covariance calculation { - const auto genConstMat = [](const Map & map, const auto val) { + const auto gen_const_mat = [](const Map & map, const auto val) { return Eigen::MatrixXd::Constant(map.size(), map.at(0).size(), val); }; - accel_data_mean_mat_ = genConstMat(accel_map_value_, map_offset_); - brake_data_mean_mat_ = genConstMat(brake_map_value_, map_offset_); - accel_data_covariance_mat_ = genConstMat(accel_map_value_, covariance_); - brake_data_covariance_mat_ = genConstMat(brake_map_value_, covariance_); - accel_data_num_ = genConstMat(accel_map_value_, 1); - brake_data_num_ = genConstMat(brake_map_value_, 1); + accel_data_mean_mat_ = gen_const_mat(accel_map_value_, map_offset_); + brake_data_mean_mat_ = gen_const_mat(brake_map_value_, map_offset_); + accel_data_covariance_mat_ = gen_const_mat(accel_map_value_, covariance_); + brake_data_covariance_mat_ = gen_const_mat(brake_map_value_, covariance_); + accel_data_num_ = gen_const_mat(accel_map_value_, 1); + brake_data_num_ = gen_const_mat(brake_map_value_, 1); } // publisher @@ -208,52 +208,36 @@ AccelBrakeMapCalibrator::AccelBrakeMapCalibrator(const rclcpp::NodeOptions & nod using std::placeholders::_2; using std::placeholders::_3; - velocity_sub_ = create_subscription( - "~/input/velocity", queue_size, - std::bind(&AccelBrakeMapCalibrator::callbackVelocity, this, _1)); - steer_sub_ = create_subscription( - "~/input/steer", queue_size, std::bind(&AccelBrakeMapCalibrator::callbackSteer, this, _1)); - if (accel_brake_value_source_ == ACCEL_BRAKE_SOURCE::STATUS) { - actuation_status_sub_ = create_subscription( - "~/input/actuation_status", queue_size, - std::bind(&AccelBrakeMapCalibrator::callbackActuationStatus, this, _1)); - } - if (accel_brake_value_source_ == ACCEL_BRAKE_SOURCE::COMMAND) { - actuation_cmd_sub_ = create_subscription( - "~/input/actuation_cmd", queue_size, - std::bind(&AccelBrakeMapCalibrator::callbackActuationCommand, this, _1)); - } - // Service update_map_dir_server_ = create_service( "~/input/update_map_dir", - std::bind(&AccelBrakeMapCalibrator::callbackUpdateMapService, this, _1, _2, _3)); + std::bind(&AccelBrakeMapCalibrator::callback_update_map_service, this, _1, _2, _3)); // timer - initTimer(1.0 / update_hz_); - initOutputCSVTimer(30.0); + init_timer(1.0 / update_hz_); + init_output_csv_timer(30.0); logger_configure_ = std::make_unique(this); } -void AccelBrakeMapCalibrator::initOutputCSVTimer(double period_s) +void AccelBrakeMapCalibrator::init_output_csv_timer(double period_s) { const auto period_ns = std::chrono::duration_cast(std::chrono::duration(period_s)); timer_output_csv_ = rclcpp::create_timer( this, get_clock(), period_ns, - std::bind(&AccelBrakeMapCalibrator::timerCallbackOutputCSV, this)); + std::bind(&AccelBrakeMapCalibrator::timer_callback_output_csv, this)); } -void AccelBrakeMapCalibrator::initTimer(double period_s) +void AccelBrakeMapCalibrator::init_timer(double period_s) { const auto period_ns = std::chrono::duration_cast(std::chrono::duration(period_s)); timer_ = rclcpp::create_timer( - this, get_clock(), period_ns, std::bind(&AccelBrakeMapCalibrator::timerCallback, this)); + this, get_clock(), period_ns, std::bind(&AccelBrakeMapCalibrator::fetch_data, this)); } -bool AccelBrakeMapCalibrator::getCurrentPitchFromTF(double * pitch) +bool AccelBrakeMapCalibrator::get_current_pitch_from_tf(double * pitch) { if (get_pitch_method_ == GET_PITCH_METHOD::NONE) { // do not get pitch from tf @@ -269,15 +253,53 @@ bool AccelBrakeMapCalibrator::getCurrentPitchFromTF(double * pitch) get_logger(), *get_clock(), 5000, "cannot get map to base_link transform. "); return false; } - double roll, raw_pitch, yaw; + double roll = 0.0; + double raw_pitch = 0.0; + double yaw = 0.0; tf2::getEulerYPR(transform->transform.rotation, roll, raw_pitch, yaw); - debug_values_.data.at(CURRENT_RAW_PITCH) = raw_pitch; + debug_values_.data.at(CURRENT_RAW_PITCH) = static_cast(raw_pitch); *pitch = lowpass(*pitch, raw_pitch, 0.2); - debug_values_.data.at(CURRENT_PITCH) = *pitch; + debug_values_.data.at(CURRENT_PITCH) = static_cast(*pitch); return true; } -void AccelBrakeMapCalibrator::timerCallback() +bool AccelBrakeMapCalibrator::take_data() +{ + // take data from subscribers + // take actuation data + ActuationStatusStamped::ConstSharedPtr actuation_status_ptr = actuation_status_sub_.takeData(); + ActuationCommandStamped::ConstSharedPtr actuation_cmd_ptr = actuation_cmd_sub_.takeData(); + if (actuation_status_ptr) { + take_actuation_status(actuation_status_ptr); + } else if (actuation_cmd_ptr) { + take_actuation_command(actuation_cmd_ptr); + } else { + return false; + } + + // take velocity data + VelocityReport::ConstSharedPtr velocity_ptr = velocity_sub_.takeData(); + if (!velocity_ptr) return false; + take_velocity(velocity_ptr); + + // take steer data + steer_ptr_ = steer_sub_.takeData(); + + /* valid check */ + // data check + if ( + !twist_ptr_ || !steer_ptr_ || !accel_pedal_ptr_ || !brake_pedal_ptr_ || + !delayed_accel_pedal_ptr_ || !delayed_brake_pedal_ptr_) { + // lack of data + RCLCPP_WARN_STREAM_THROTTLE( + get_logger(), *get_clock(), 5000, "lack of topics (twist, steer, accel, brake)"); + lack_of_data_count_++; + return false; + } + return true; +} + +void AccelBrakeMapCalibrator::fetch_data() { update_count_++; @@ -296,25 +318,16 @@ void AccelBrakeMapCalibrator::timerCallback() << "\n\t" << "update_fail_count_: " << update_fail_count_ << "\n"); - /* valid check */ + // if cannot get data, return this callback + if (!take_data()) return; - // data check - if ( - !twist_ptr_ || !steer_ptr_ || !accel_pedal_ptr_ || !brake_pedal_ptr_ || - !delayed_accel_pedal_ptr_ || !delayed_brake_pedal_ptr_) { - // lack of data - RCLCPP_WARN_STREAM_THROTTLE( - get_logger(), *get_clock(), 5000, "lack of topics (twist, steer, accel, brake)"); - - lack_of_data_count_++; - return; - } + debug_values_.data.at(CURRENT_STEER) = steer_ptr_->steering_tire_angle; // data check 2 if ( - isTimeout(twist_ptr_->header.stamp, timeout_sec_) || - isTimeout(steer_ptr_->stamp, timeout_sec_) || isTimeout(accel_pedal_ptr_, timeout_sec_) || - isTimeout(brake_pedal_ptr_, timeout_sec_)) { + is_timeout(twist_ptr_->header.stamp, timeout_sec_) || + is_timeout(steer_ptr_->stamp, timeout_sec_) || is_timeout(accel_pedal_ptr_, timeout_sec_) || + is_timeout(brake_pedal_ptr_, timeout_sec_)) { RCLCPP_WARN_STREAM_THROTTLE( get_logger(), *get_clock(), 5000, "timeout of topics (twist, steer, accel, brake)"); lack_of_data_count_++; @@ -322,7 +335,7 @@ void AccelBrakeMapCalibrator::timerCallback() } // data check 3 - if (!getCurrentPitchFromTF(&pitch_)) { + if (!get_current_pitch_from_tf(&pitch_)) { // cannot get pitch RCLCPP_WARN_STREAM_THROTTLE(get_logger(), *get_clock(), 5000, "cannot get pitch"); failed_to_get_pitch_count_++; @@ -331,25 +344,25 @@ void AccelBrakeMapCalibrator::timerCallback() /* write data to log */ if (pedal_accel_graph_output_) { - addLogToCSV( + add_log_to_csv( &output_log_, rclcpp::Time(twist_ptr_->header.stamp).seconds(), twist_ptr_->twist.linear.x, - acceleration_, getPitchCompensatedAcceleration(), delayed_accel_pedal_ptr_->data, + acceleration_, get_pitch_compensated_acceleration(), delayed_accel_pedal_ptr_->data, delayed_brake_pedal_ptr_->data, accel_pedal_speed_, brake_pedal_speed_, pitch_, steer_ptr_->steering_tire_angle, jerk_, full_original_accel_rmse_, part_original_accel_rmse_, new_accel_rmse_); } /* publish map & debug_values*/ - publishMap(accel_map_value_, brake_map_value_, "original"); - publishMap(update_accel_map_value_, update_brake_map_value_, "update"); - publishOffsetCovMap(accel_offset_covariance_value_, brake_offset_covariance_value_); - publishCountMap(); - publishIndex(); - publishUpdateSuggestFlag(); + publish_map(accel_map_value_, brake_map_value_, "original"); + publish_map(update_accel_map_value_, update_brake_map_value_, "update"); + publish_offset_cov_map(accel_offset_covariance_value_, brake_offset_covariance_value_); + publish_count_map(); + publish_index(); + publish_update_suggest_flag(); debug_pub_->publish(debug_values_); - publishFloat32("current_map_error", part_original_accel_rmse_); - publishFloat32("updated_map_error", new_accel_rmse_); - publishFloat32( + publish_float32("current_map_error", part_original_accel_rmse_); + publish_float32("updated_map_error", new_accel_rmse_); + publish_float32( "map_error_ratio", part_original_accel_rmse_ != 0.0 ? new_accel_rmse_ / part_original_accel_rmse_ : 1.0); @@ -367,7 +380,7 @@ void AccelBrakeMapCalibrator::timerCallback() } // accel / brake map evaluation (do not evaluate when the car stops) - executeEvaluation(); + execute_evaluation(); // pitch check if (std::fabs(pitch_) > max_pitch_threshold_) { @@ -412,7 +425,7 @@ void AccelBrakeMapCalibrator::timerCallback() } /* update map */ - if (updateAccelBrakeMap()) { + if (update_accel_brake_map()) { update_success_count_++; debug_values_.data.at(SUCCESS_TO_UPDATE) = true; update_success_ = true; @@ -421,22 +434,24 @@ void AccelBrakeMapCalibrator::timerCallback() } } -void AccelBrakeMapCalibrator::timerCallbackOutputCSV() +void AccelBrakeMapCalibrator::timer_callback_output_csv() { // write accel/ brake map to file const auto ros_time = std::to_string(this->now().seconds()); - writeMapToCSV(accel_vel_index_, accel_pedal_index_, update_accel_map_value_, output_accel_file_); - writeMapToCSV(brake_vel_index_, brake_pedal_index_, update_brake_map_value_, output_brake_file_); + write_map_to_csv( + accel_vel_index_, accel_pedal_index_, update_accel_map_value_, output_accel_file_); + write_map_to_csv( + brake_vel_index_, brake_pedal_index_, update_brake_map_value_, output_brake_file_); if (progress_file_output_) { - writeMapToCSV( + write_map_to_csv( accel_vel_index_, accel_pedal_index_, update_accel_map_value_, output_accel_file_ + "_" + ros_time); - writeMapToCSV( + write_map_to_csv( brake_vel_index_, brake_pedal_index_, update_brake_map_value_, output_brake_file_ + "_" + ros_time); - writeMapToCSV( + write_map_to_csv( accel_vel_index_, accel_pedal_index_, accel_map_value_, output_accel_file_ + "_original"); - writeMapToCSV( + write_map_to_csv( brake_vel_index_, brake_pedal_index_, brake_map_value_, output_brake_file_ + "_original"); } @@ -459,7 +474,7 @@ void AccelBrakeMapCalibrator::timerCallbackOutputCSV() } } -void AccelBrakeMapCalibrator::callbackVelocity(const VelocityReport::ConstSharedPtr msg) +void AccelBrakeMapCalibrator::take_velocity(const VelocityReport::ConstSharedPtr msg) { // convert velocity-report to twist-stamped auto twist_msg = std::make_shared(); @@ -469,12 +484,12 @@ void AccelBrakeMapCalibrator::callbackVelocity(const VelocityReport::ConstShared twist_msg->twist.angular.z = msg->heading_rate; if (!twist_vec_.empty()) { - const auto past_msg = getNearestTimeDataFromVec(twist_msg, dif_twist_time_, twist_vec_); - const double raw_acceleration = getAccel(past_msg, twist_msg); + const auto past_msg = get_nearest_time_data_from_vec(twist_msg, dif_twist_time_, twist_vec_); + const double raw_acceleration = get_accel(past_msg, twist_msg); acceleration_ = lowpass(acceleration_, raw_acceleration, 0.25); acceleration_time_ = rclcpp::Time(msg->header.stamp).seconds(); - debug_values_.data.at(CURRENT_RAW_ACCEL) = raw_acceleration; - debug_values_.data.at(CURRENT_ACCEL) = acceleration_; + debug_values_.data.at(CURRENT_RAW_ACCEL) = static_cast(raw_acceleration); + debug_values_.data.at(CURRENT_ACCEL) = static_cast(acceleration_); // calculate jerk if ( @@ -483,81 +498,75 @@ void AccelBrakeMapCalibrator::callbackVelocity(const VelocityReport::ConstShared RCLCPP_DEBUG_STREAM_THROTTLE(get_logger(), *get_clock(), 5000, "cannot calculate jerk"); // does not update jerk } else { - const double raw_jerk = getJerk(); + const double raw_jerk = get_jerk(); // to avoid to get delayed jerk, set high gain jerk_ = lowpass(jerk_, raw_jerk, 0.5); } - debug_values_.data.at(CURRENT_JERK) = jerk_; + debug_values_.data.at(CURRENT_JERK) = static_cast(jerk_); pre_acceleration_ = acceleration_; pre_acceleration_time_ = acceleration_time_; } - debug_values_.data.at(CURRENT_SPEED) = twist_msg->twist.linear.x; + debug_values_.data.at(CURRENT_SPEED) = static_cast(twist_msg->twist.linear.x); twist_ptr_ = twist_msg; - pushDataToVec(twist_msg, twist_vec_max_size_, &twist_vec_); -} - -void AccelBrakeMapCalibrator::callbackSteer(const SteeringReport::ConstSharedPtr msg) -{ - debug_values_.data.at(CURRENT_STEER) = msg->steering_tire_angle; - steer_ptr_ = msg; + push_data_to_vec(twist_msg, twist_vec_max_size_, &twist_vec_); } -void AccelBrakeMapCalibrator::callbackActuation( - const std_msgs::msg::Header header, const double accel, const double brake) +void AccelBrakeMapCalibrator::take_actuation( + const std_msgs::msg::Header & header, const double accel, const double brake) { // get accel data accel_pedal_ptr_ = std::make_shared(accel, rclcpp::Time(header.stamp)); if (!accel_pedal_vec_.empty()) { const auto past_accel_ptr = - getNearestTimeDataFromVec(accel_pedal_ptr_, dif_pedal_time_, accel_pedal_vec_); + get_nearest_time_data_from_vec(accel_pedal_ptr_, dif_pedal_time_, accel_pedal_vec_); const double raw_accel_pedal_speed = - getPedalSpeed(past_accel_ptr, accel_pedal_ptr_, accel_pedal_speed_); + get_pedal_speed(past_accel_ptr, accel_pedal_ptr_, accel_pedal_speed_); accel_pedal_speed_ = lowpass(accel_pedal_speed_, raw_accel_pedal_speed, 0.5); - debug_values_.data.at(CURRENT_RAW_ACCEL_SPEED) = raw_accel_pedal_speed; - debug_values_.data.at(CURRENT_ACCEL_SPEED) = accel_pedal_speed_; + debug_values_.data.at(CURRENT_RAW_ACCEL_SPEED) = static_cast(raw_accel_pedal_speed); + debug_values_.data.at(CURRENT_ACCEL_SPEED) = static_cast(accel_pedal_speed_); } - debug_values_.data.at(CURRENT_ACCEL_PEDAL) = accel_pedal_ptr_->data; - pushDataToVec(accel_pedal_ptr_, pedal_vec_max_size_, &accel_pedal_vec_); + debug_values_.data.at(CURRENT_ACCEL_PEDAL) = static_cast(accel_pedal_ptr_->data); + push_data_to_vec(accel_pedal_ptr_, pedal_vec_max_size_, &accel_pedal_vec_); delayed_accel_pedal_ptr_ = - getNearestTimeDataFromVec(accel_pedal_ptr_, pedal_to_accel_delay_, accel_pedal_vec_); + get_nearest_time_data_from_vec(accel_pedal_ptr_, pedal_to_accel_delay_, accel_pedal_vec_); // get brake data brake_pedal_ptr_ = std::make_shared(brake, rclcpp::Time(header.stamp)); if (!brake_pedal_vec_.empty()) { const auto past_brake_ptr = - getNearestTimeDataFromVec(brake_pedal_ptr_, dif_pedal_time_, brake_pedal_vec_); + get_nearest_time_data_from_vec(brake_pedal_ptr_, dif_pedal_time_, brake_pedal_vec_); const double raw_brake_pedal_speed = - getPedalSpeed(past_brake_ptr, brake_pedal_ptr_, brake_pedal_speed_); + get_pedal_speed(past_brake_ptr, brake_pedal_ptr_, brake_pedal_speed_); brake_pedal_speed_ = lowpass(brake_pedal_speed_, raw_brake_pedal_speed, 0.5); - debug_values_.data.at(CURRENT_RAW_BRAKE_SPEED) = raw_brake_pedal_speed; - debug_values_.data.at(CURRENT_BRAKE_SPEED) = brake_pedal_speed_; + debug_values_.data.at(CURRENT_RAW_BRAKE_SPEED) = static_cast(raw_brake_pedal_speed); + debug_values_.data.at(CURRENT_BRAKE_SPEED) = static_cast(brake_pedal_speed_); } - debug_values_.data.at(CURRENT_BRAKE_PEDAL) = brake_pedal_ptr_->data; - pushDataToVec(brake_pedal_ptr_, pedal_vec_max_size_, &brake_pedal_vec_); + debug_values_.data.at(CURRENT_BRAKE_PEDAL) = static_cast(brake_pedal_ptr_->data); + push_data_to_vec(brake_pedal_ptr_, pedal_vec_max_size_, &brake_pedal_vec_); delayed_brake_pedal_ptr_ = - getNearestTimeDataFromVec(brake_pedal_ptr_, pedal_to_accel_delay_, brake_pedal_vec_); + get_nearest_time_data_from_vec(brake_pedal_ptr_, pedal_to_accel_delay_, brake_pedal_vec_); } -void AccelBrakeMapCalibrator::callbackActuationCommand( +void AccelBrakeMapCalibrator::take_actuation_command( const ActuationCommandStamped::ConstSharedPtr msg) { const auto header = msg->header; const auto accel = msg->actuation.accel_cmd; const auto brake = msg->actuation.brake_cmd; - callbackActuation(header, accel, brake); + take_actuation(header, accel, brake); } -void AccelBrakeMapCalibrator::callbackActuationStatus( +void AccelBrakeMapCalibrator::take_actuation_status( const ActuationStatusStamped::ConstSharedPtr msg) { const auto header = msg->header; const auto accel = msg->status.accel_status; const auto brake = msg->status.brake_status; - callbackActuation(header, accel, brake); + take_actuation(header, accel, brake); } -bool AccelBrakeMapCalibrator::callbackUpdateMapService( +bool AccelBrakeMapCalibrator::callback_update_map_service( [[maybe_unused]] const std::shared_ptr request_header, UpdateAccelBrakeMap::Request::SharedPtr req, UpdateAccelBrakeMap::Response::SharedPtr res) { @@ -568,8 +577,10 @@ bool AccelBrakeMapCalibrator::callbackUpdateMapService( const auto accel_map_file = update_map_dir + "/accel_map.csv"; const auto brake_map_file = update_map_dir + "/brake_map.csv"; if ( - writeMapToCSV(accel_vel_index_, accel_pedal_index_, update_accel_map_value_, accel_map_file) && - writeMapToCSV(brake_vel_index_, brake_pedal_index_, update_brake_map_value_, brake_map_file)) { + write_map_to_csv( + accel_vel_index_, accel_pedal_index_, update_accel_map_value_, accel_map_file) && + write_map_to_csv( + brake_vel_index_, brake_pedal_index_, update_brake_map_value_, brake_map_file)) { res->success = true; res->message = "Data has been successfully saved on " + update_map_dir + "/(accel/brake)_map.csv"; @@ -586,7 +597,7 @@ double AccelBrakeMapCalibrator::lowpass( return current * gain + original * (1.0 - gain); } -double AccelBrakeMapCalibrator::getPedalSpeed( +double AccelBrakeMapCalibrator::get_pedal_speed( const DataStampedPtr & prev_pedal, const DataStampedPtr & current_pedal, const double prev_pedal_speed) { @@ -600,9 +611,9 @@ double AccelBrakeMapCalibrator::getPedalSpeed( return d_pedal / dt; } -double AccelBrakeMapCalibrator::getAccel( +double AccelBrakeMapCalibrator::get_accel( const TwistStamped::ConstSharedPtr & prev_twist, - const TwistStamped::ConstSharedPtr & current_twist) + const TwistStamped::ConstSharedPtr & current_twist) const { const double dt = (rclcpp::Time(current_twist->header.stamp) - rclcpp::Time(prev_twist->header.stamp)).seconds(); @@ -614,16 +625,16 @@ double AccelBrakeMapCalibrator::getAccel( return std::min(std::max(min_accel_, dv / dt), max_accel_); } -double AccelBrakeMapCalibrator::getJerk() +double AccelBrakeMapCalibrator::get_jerk() { const double jerk = (acceleration_ - pre_acceleration_) / (acceleration_time_ - pre_acceleration_time_); return std::min(std::max(-max_jerk_, jerk), max_jerk_); } -bool AccelBrakeMapCalibrator::indexValueSearch( - const std::vector value_index, const double value, const double value_thresh, - int * searched_index) +bool AccelBrakeMapCalibrator::index_value_search( + const std::vector & value_index, const double value, const double value_thresh, + int * searched_index) const { if (update_method_ == UPDATE_METHOD::UPDATE_OFFSET_FOUR_CELL_AROUND) { /* return lower left index. @@ -640,7 +651,7 @@ bool AccelBrakeMapCalibrator::indexValueSearch( for (std::size_t i = 0; i < value_index.size(); i++) { const double diff_value = value_index.at(i) - value; if (diff_value <= 0 && old_diff_value < diff_value) { - *searched_index = i; + *searched_index = static_cast(i); old_diff_value = diff_value; } else { return true; @@ -650,7 +661,7 @@ bool AccelBrakeMapCalibrator::indexValueSearch( for (std::size_t i = 0; i < value_index.size(); i++) { const double diff_value = std::fabs(value_index.at(i) - value); if (diff_value <= value_thresh) { - *searched_index = i; + *searched_index = static_cast(i); return true; } } @@ -658,8 +669,8 @@ bool AccelBrakeMapCalibrator::indexValueSearch( return false; } -int AccelBrakeMapCalibrator::nearestValueSearch( - const std::vector value_index, const double value) +int AccelBrakeMapCalibrator::nearest_value_search( + const std::vector & value_index, const double value) { double max_dist = std::numeric_limits::max(); int nearest_idx = 0; @@ -667,40 +678,34 @@ int AccelBrakeMapCalibrator::nearestValueSearch( for (std::size_t i = 0; i < value_index.size(); i++) { const double dist = std::fabs(value - value_index.at(i)); if (max_dist > dist) { - nearest_idx = i; + nearest_idx = static_cast(i); max_dist = dist; } } return nearest_idx; } -int AccelBrakeMapCalibrator::nearestPedalSearch() +int AccelBrakeMapCalibrator::nearest_pedal_search() { - bool accel_mode; - - if (delayed_accel_pedal_ptr_->data > std::numeric_limits::epsilon()) { - accel_mode = true; - } else { - accel_mode = false; - } + bool accel_mode = (delayed_accel_pedal_ptr_->data > std::numeric_limits::epsilon()); - int nearest_idx; + int nearest_idx = 0; if (accel_mode) { - nearest_idx = nearestValueSearch(accel_pedal_index_, delayed_accel_pedal_ptr_->data); + nearest_idx = nearest_value_search(accel_pedal_index_, delayed_accel_pedal_ptr_->data); } else { - nearest_idx = nearestValueSearch(brake_pedal_index_, delayed_brake_pedal_ptr_->data); + nearest_idx = nearest_value_search(brake_pedal_index_, delayed_brake_pedal_ptr_->data); } - return getUnifiedIndexFromAccelBrakeIndex(accel_mode, nearest_idx); + return get_unified_index_from_accel_brake_index(accel_mode, nearest_idx); } -int AccelBrakeMapCalibrator::nearestVelSearch() +int AccelBrakeMapCalibrator::nearest_vel_search() { const double current_vel = twist_ptr_->twist.linear.x; - return nearestValueSearch(accel_vel_index_, current_vel); + return nearest_value_search(accel_vel_index_, current_vel); } -void AccelBrakeMapCalibrator::takeConsistencyOfAccelMap() +void AccelBrakeMapCalibrator::take_consistency_of_accel_map() { const double bit = std::pow(1e-01, precision_); for (std::size_t ped_idx = 0; ped_idx < update_accel_map_value_.size() - 1; ped_idx++) { @@ -724,7 +729,7 @@ void AccelBrakeMapCalibrator::takeConsistencyOfAccelMap() } } -void AccelBrakeMapCalibrator::takeConsistencyOfBrakeMap() +void AccelBrakeMapCalibrator::take_consistency_of_brake_map() { const double bit = std::pow(1e-01, precision_); for (std::size_t ped_idx = 0; ped_idx < update_brake_map_value_.size() - 1; ped_idx++) { @@ -746,7 +751,7 @@ void AccelBrakeMapCalibrator::takeConsistencyOfBrakeMap() } } -bool AccelBrakeMapCalibrator::updateAccelBrakeMap() +bool AccelBrakeMapCalibrator::update_accel_brake_map() { // get pedal index bool accel_mode = false; @@ -755,14 +760,10 @@ bool AccelBrakeMapCalibrator::updateAccelBrakeMap() int accel_vel_index = 0; int brake_vel_index = 0; - if (delayed_accel_pedal_ptr_->data > std::numeric_limits::epsilon()) { - accel_mode = true; - } else { - accel_mode = false; - } + accel_mode = (delayed_accel_pedal_ptr_->data > std::numeric_limits::epsilon()); if ( - accel_mode && !indexValueSearch( + accel_mode && !index_value_search( accel_pedal_index_, delayed_accel_pedal_ptr_->data, pedal_diff_threshold_, &accel_pedal_index)) { // not match accel pedal output to pedal value in index @@ -770,7 +771,7 @@ bool AccelBrakeMapCalibrator::updateAccelBrakeMap() } if ( - !accel_mode && !indexValueSearch( + !accel_mode && !index_value_search( brake_pedal_index_, delayed_brake_pedal_ptr_->data, pedal_diff_threshold_, &brake_pedal_index)) { // not match accel pedal output to pedal value in index @@ -779,7 +780,7 @@ bool AccelBrakeMapCalibrator::updateAccelBrakeMap() if ( accel_mode && - !indexValueSearch( + !index_value_search( accel_vel_index_, twist_ptr_->twist.linear.x, velocity_diff_threshold_, &accel_vel_index)) { // not match current velocity to velocity value in index return false; @@ -787,14 +788,15 @@ bool AccelBrakeMapCalibrator::updateAccelBrakeMap() if ( !accel_mode && - !indexValueSearch( + !index_value_search( brake_vel_index_, twist_ptr_->twist.linear.x, velocity_diff_threshold_, &brake_vel_index)) { // not match current velocity to velocity value in index return false; } // update map - executeUpdate(accel_mode, accel_pedal_index, accel_vel_index, brake_pedal_index, brake_vel_index); + execute_update( + accel_mode, accel_pedal_index, accel_vel_index, brake_pedal_index, brake_vel_index); // when update 0 pedal index, update another map if (accel_mode && accel_pedal_index == 0) { @@ -816,57 +818,58 @@ bool AccelBrakeMapCalibrator::updateAccelBrakeMap() } // take consistency of map - takeConsistencyOfAccelMap(); - takeConsistencyOfBrakeMap(); + take_consistency_of_accel_map(); + take_consistency_of_brake_map(); return true; } -void AccelBrakeMapCalibrator::executeUpdate( +void AccelBrakeMapCalibrator::execute_update( const bool accel_mode, const int accel_pedal_index, const int accel_vel_index, const int brake_pedal_index, const int brake_vel_index) { - const double measured_acc = acceleration_ - getPitchCompensatedAcceleration(); + const double measured_acc = acceleration_ - get_pitch_compensated_acceleration(); const double map_acc = accel_mode ? update_accel_map_value_.at(accel_pedal_index).at(accel_vel_index) : update_brake_map_value_.at(brake_pedal_index).at(brake_vel_index); RCLCPP_DEBUG_STREAM(get_logger(), "measured_acc: " << measured_acc << ", map_acc: " << map_acc); if (update_method_ == UPDATE_METHOD::UPDATE_OFFSET_EACH_CELL) { - updateEachValOffset( + update_each_val_offset( accel_mode, accel_pedal_index, accel_vel_index, brake_pedal_index, brake_vel_index, measured_acc, map_acc); } else if (update_method_ == UPDATE_METHOD::UPDATE_OFFSET_TOTAL) { - updateTotalMapOffset(measured_acc, map_acc); + update_total_map_offset(measured_acc, map_acc); } else if (update_method_ == UPDATE_METHOD::UPDATE_OFFSET_FOUR_CELL_AROUND) { - updateFourCellAroundOffset( + update_four_cell_around_offset( accel_mode, accel_pedal_index, accel_vel_index, brake_pedal_index, brake_vel_index, measured_acc); } // add accel data to map - accel_mode ? map_value_data_.at(getUnifiedIndexFromAccelBrakeIndex(true, accel_pedal_index)) - .at(accel_vel_index) - .emplace_back(measured_acc) - : map_value_data_.at(getUnifiedIndexFromAccelBrakeIndex(false, brake_pedal_index)) - .at(brake_vel_index) - .emplace_back(measured_acc); + accel_mode + ? map_value_data_.at(get_unified_index_from_accel_brake_index(true, accel_pedal_index)) + .at(accel_vel_index) + .emplace_back(measured_acc) + : map_value_data_.at(get_unified_index_from_accel_brake_index(false, brake_pedal_index)) + .at(brake_vel_index) + .emplace_back(measured_acc); } -bool AccelBrakeMapCalibrator::updateFourCellAroundOffset( +bool AccelBrakeMapCalibrator::update_four_cell_around_offset( const bool accel_mode, const int accel_pedal_index, const int accel_vel_index, const int brake_pedal_index, const int brake_vel_index, const double measured_acc) { // pre-defined - static Map accel_map_offset_vec_( + static Map accelMapOffsetVec_( accel_map_value_.size(), std::vector(accel_map_value_.at(0).size(), map_offset_)); - static Map brake_map_offset_vec_( + static Map brakeMapOffsetVec_( brake_map_value_.size(), std::vector(accel_map_value_.at(0).size(), map_offset_)); - static std::vector> accel_covariance_mat_( + static std::vector> accelCovarianceMat_( accel_map_value_.size() - 1, std::vector( accel_map_value_.at(0).size() - 1, Eigen::MatrixXd::Identity(4, 4) * covariance_)); - static std::vector> brake_covariance_mat_( + static std::vector> brakeCovarianceMat_( brake_map_value_.size() - 1, std::vector( accel_map_value_.at(0).size() - 1, Eigen::MatrixXd::Identity(4, 4) * covariance_)); @@ -881,8 +884,8 @@ bool AccelBrakeMapCalibrator::updateFourCellAroundOffset( const auto & vel_index_ = accel_mode ? accel_vel_index_ : brake_vel_index_; const auto & delayed_pedal = accel_mode ? delayed_accel_pedal_ptr_->data : delayed_brake_pedal_ptr_->data; - auto & map_offset_vec = accel_mode ? accel_map_offset_vec_ : brake_map_offset_vec_; - auto & covariance_mat = accel_mode ? accel_covariance_mat_ : brake_covariance_mat_; + auto & map_offset_vec = accel_mode ? accelMapOffsetVec_ : brakeMapOffsetVec_; + auto & covariance_mat = accel_mode ? accelCovarianceMat_ : brakeCovarianceMat_; auto & data_mean_mat = accel_mode ? accel_data_mean_mat_ : brake_data_mean_mat_; auto & data_covariance_mat = accel_mode ? accel_data_covariance_mat_ : brake_data_covariance_mat_; auto & data_weighted_num = accel_mode ? accel_data_num_ : brake_data_num_; @@ -938,18 +941,18 @@ bool AccelBrakeMapCalibrator::updateFourCellAroundOffset( Eigen::MatrixXd covariance = covariance_mat.at(ped_idx_l).at(vel_idx_l); /* calculate adaptive map offset */ - Eigen::MatrixXd G(4, 4); - Eigen::RowVectorXd phiT(4); - phiT = phi.transpose(); - double rk = phiT * covariance * phi; + Eigen::MatrixXd matrixG(4, 4); + Eigen::RowVectorXd phi_t(4); + phi_t = phi.transpose(); + double rk = phi_t * covariance * phi; - G = covariance * phi / (forgetting_factor_ + rk); + matrixG = covariance * phi / (forgetting_factor_ + rk); double beta = rk > 0 ? (forgetting_factor_ - (1 - forgetting_factor_) / rk) : 1; - covariance = covariance - covariance * phi * phiT * covariance / (1 / beta + rk); // anti-windup - double eta_hat = phiT * theta; + covariance = covariance - covariance * phi * phi_t * covariance / (1 / beta + rk); // anti-windup + double eta_hat = phi_t * theta; const double error_map_offset = measured_acc - eta_hat; - updated_map_offset = map_offset + G * error_map_offset; + updated_map_offset = map_offset + matrixG * error_map_offset; for (int i = 0; i < 4; i++) { const double pre_mean = mean(i); @@ -1001,24 +1004,24 @@ bool AccelBrakeMapCalibrator::updateFourCellAroundOffset( return true; } -bool AccelBrakeMapCalibrator::updateEachValOffset( +bool AccelBrakeMapCalibrator::update_each_val_offset( const bool accel_mode, const int accel_pedal_index, const int accel_vel_index, const int brake_pedal_index, const int brake_vel_index, const double measured_acc, const double map_acc) { // pre-defined - static Map map_offset_vec_( + static Map map_offset_vec( accel_map_value_.size() + brake_map_value_.size() - 1, std::vector(accel_map_value_.at(0).size(), map_offset_)); - static Map covariance_vec_( + static Map covariance_vec( accel_map_value_.size() + brake_map_value_.size() - 1, std::vector(accel_map_value_.at(0).size(), covariance_)); const int vel_idx = accel_mode ? accel_vel_index : brake_vel_index; int ped_idx = accel_mode ? accel_pedal_index : brake_pedal_index; - ped_idx = getUnifiedIndexFromAccelBrakeIndex(accel_mode, ped_idx); - double map_offset = map_offset_vec_.at(ped_idx).at(vel_idx); - double covariance = covariance_vec_.at(ped_idx).at(vel_idx); + ped_idx = get_unified_index_from_accel_brake_index(accel_mode, ped_idx); + double map_offset = map_offset_vec.at(ped_idx).at(vel_idx); + double covariance = covariance_vec.at(ped_idx).at(vel_idx); /* calculate adaptive map offset */ const double phi = 1.0; @@ -1033,13 +1036,13 @@ bool AccelBrakeMapCalibrator::updateEachValOffset( RCLCPP_DEBUG_STREAM( get_logger(), "index: " << ped_idx << ", " << vel_idx - << ": map_offset_ = " << map_offset_vec_.at(ped_idx).at(vel_idx) + << ": map_offset_ = " << map_offset_vec.at(ped_idx).at(vel_idx) << " -> " << map_offset << "\t" << " covariance = " << covariance); /* input calculated result and update map */ - map_offset_vec_.at(ped_idx).at(vel_idx) = map_offset; - covariance_vec_.at(ped_idx).at(vel_idx) = covariance; + map_offset_vec.at(ped_idx).at(vel_idx) = map_offset; + covariance_vec.at(ped_idx).at(vel_idx) = covariance; if (accel_mode) { update_accel_map_value_.at(accel_pedal_index).at(accel_vel_index) = accel_map_value_.at(accel_pedal_index).at(accel_vel_index) + map_offset; @@ -1050,7 +1053,8 @@ bool AccelBrakeMapCalibrator::updateEachValOffset( return true; } -void AccelBrakeMapCalibrator::updateTotalMapOffset(const double measured_acc, const double map_acc) +void AccelBrakeMapCalibrator::update_total_map_offset( + const double measured_acc, const double map_acc) { /* calculate adaptive map offset */ const double phi = 1.0; @@ -1081,19 +1085,18 @@ void AccelBrakeMapCalibrator::updateTotalMapOffset(const double measured_acc, co } } -std::vector AccelBrakeMapCalibrator::getMapColumnFromUnifiedIndex( +std::vector AccelBrakeMapCalibrator::get_map_column_from_unified_index( const Map & accel_map_value, const Map & brake_map_value, const std::size_t index) { if (index < brake_map_value.size()) { // input brake map value return brake_map_value.at(brake_map_value.size() - index - 1); - } else { - // input accel map value - return accel_map_value.at(index - brake_map_value.size() + 1); } + // input accel map value + return accel_map_value.at(index - brake_map_value.size() + 1); } -double AccelBrakeMapCalibrator::getPedalValueFromUnifiedIndex(const std::size_t index) +double AccelBrakeMapCalibrator::get_pedal_value_from_unified_index(const std::size_t index) { if (index < brake_pedal_index_.size()) { // brake index ( minus ) @@ -1104,64 +1107,64 @@ double AccelBrakeMapCalibrator::getPedalValueFromUnifiedIndex(const std::size_t } } -int AccelBrakeMapCalibrator::getUnifiedIndexFromAccelBrakeIndex( +int AccelBrakeMapCalibrator::get_unified_index_from_accel_brake_index( const bool accel_map, const std::size_t index) { // accel_map=true: accel_map; accel_map=false: brake_map if (accel_map) { // accel map - return index + brake_map_value_.size() - 1; - } else { - // brake map - return brake_map_value_.size() - index - 1; + return static_cast(index) + static_cast(brake_map_value_.size()) - 1; } + // brake map + return static_cast(brake_map_value_.size()) - static_cast(index) - 1; } -double AccelBrakeMapCalibrator::getPitchCompensatedAcceleration() +double AccelBrakeMapCalibrator::get_pitch_compensated_acceleration() const { // It works correctly only when the velocity is positive. constexpr double gravity = 9.80665; return gravity * std::sin(pitch_); } -void AccelBrakeMapCalibrator::executeEvaluation() +void AccelBrakeMapCalibrator::execute_evaluation() { - const double full_orig_accel_sq_error = calculateAccelSquaredError( + const double full_orig_accel_sq_error = calculate_accel_squared_error( delayed_accel_pedal_ptr_->data, delayed_brake_pedal_ptr_->data, twist_ptr_->twist.linear.x, accel_map_, brake_map_); - pushDataToVec(full_orig_accel_sq_error, full_mse_que_size_, &full_original_accel_mse_que_); - full_original_accel_rmse_ = getAverage(full_original_accel_mse_que_); + push_data_to_vec(full_orig_accel_sq_error, full_mse_que_size_, &full_original_accel_mse_que_); + full_original_accel_rmse_ = get_average(full_original_accel_mse_que_); // std::cerr << "rmse : " << sqrt(full_original_accel_rmse_) << std::endl; - const double full_orig_accel_l1_error = calculateAccelErrorL1Norm( + const double full_orig_accel_l1_error = calculate_accel_error_l1_norm( delayed_accel_pedal_ptr_->data, delayed_brake_pedal_ptr_->data, twist_ptr_->twist.linear.x, accel_map_, brake_map_); const double full_orig_accel_sq_l1_error = full_orig_accel_l1_error * full_orig_accel_l1_error; - pushDataToVec(full_orig_accel_l1_error, full_mse_que_size_, &full_original_accel_l1_que_); - pushDataToVec(full_orig_accel_sq_l1_error, full_mse_que_size_, &full_original_accel_sq_l1_que_); - full_original_accel_error_l1norm_ = getAverage(full_original_accel_l1_que_); + push_data_to_vec(full_orig_accel_l1_error, full_mse_que_size_, &full_original_accel_l1_que_); + push_data_to_vec( + full_orig_accel_sq_l1_error, full_mse_que_size_, &full_original_accel_sq_l1_que_); + full_original_accel_error_l1norm_ = get_average(full_original_accel_l1_que_); /*calculate l1norm_covariance*/ - // const double full_original_accel_error_sql1_ = getAverage(full_original_accel_sq_l1_que_); + // const double full_original_accel_error_sql1_ = get_average(full_original_accel_sq_l1_que_); // std::cerr << "error_l1norm : " << full_original_accel_error_l1norm_ << std::endl; // std::cerr << "error_l1_cov : " << // full_original_accel_error_sql1_-full_original_accel_error_l1norm_*full_original_accel_error_l1norm_ // << std::endl; - const double part_orig_accel_sq_error = calculateAccelSquaredError( + const double part_orig_accel_sq_error = calculate_accel_squared_error( delayed_accel_pedal_ptr_->data, delayed_brake_pedal_ptr_->data, twist_ptr_->twist.linear.x, accel_map_, brake_map_); - pushDataToVec(part_orig_accel_sq_error, part_mse_que_size_, &part_original_accel_mse_que_); - part_original_accel_rmse_ = getAverage(part_original_accel_mse_que_); + push_data_to_vec(part_orig_accel_sq_error, part_mse_que_size_, &part_original_accel_mse_que_); + part_original_accel_rmse_ = get_average(part_original_accel_mse_que_); - const double new_accel_sq_error = calculateAccelSquaredError( + const double new_accel_sq_error = calculate_accel_squared_error( delayed_accel_pedal_ptr_->data, delayed_brake_pedal_ptr_->data, twist_ptr_->twist.linear.x, new_accel_map_, new_brake_map_); - pushDataToVec(new_accel_sq_error, part_mse_que_size_, &new_accel_mse_que_); - new_accel_rmse_ = getAverage(new_accel_mse_que_); + push_data_to_vec(new_accel_sq_error, part_mse_que_size_, &new_accel_mse_que_); + new_accel_rmse_ = get_average(new_accel_mse_que_); } -double AccelBrakeMapCalibrator::calculateEstimatedAcc( +double AccelBrakeMapCalibrator::calculate_estimated_acc( const double throttle, const double brake, const double vel, AccelMap & accel_map, BrakeMap & brake_map) { @@ -1177,27 +1180,27 @@ double AccelBrakeMapCalibrator::calculateEstimatedAcc( return estimated_acc; } -double AccelBrakeMapCalibrator::calculateAccelSquaredError( +double AccelBrakeMapCalibrator::calculate_accel_squared_error( const double throttle, const double brake, const double vel, AccelMap & accel_map, BrakeMap & brake_map) { - const double estimated_acc = calculateEstimatedAcc(throttle, brake, vel, accel_map, brake_map); - const double measured_acc = acceleration_ - getPitchCompensatedAcceleration(); + const double estimated_acc = calculate_estimated_acc(throttle, brake, vel, accel_map, brake_map); + const double measured_acc = acceleration_ - get_pitch_compensated_acceleration(); const double dif_acc = measured_acc - estimated_acc; return dif_acc * dif_acc; } -double AccelBrakeMapCalibrator::calculateAccelErrorL1Norm( +double AccelBrakeMapCalibrator::calculate_accel_error_l1_norm( const double throttle, const double brake, const double vel, AccelMap & accel_map, BrakeMap & brake_map) { - const double estimated_acc = calculateEstimatedAcc(throttle, brake, vel, accel_map, brake_map); - const double measured_acc = acceleration_ - getPitchCompensatedAcceleration(); + const double estimated_acc = calculate_estimated_acc(throttle, brake, vel, accel_map, brake_map); + const double measured_acc = acceleration_ - get_pitch_compensated_acceleration(); const double dif_acc = measured_acc - estimated_acc; return abs(dif_acc); } -void AccelBrakeMapCalibrator::pushDataToQue( +void AccelBrakeMapCalibrator::push_data_to_que( const TwistStamped::ConstSharedPtr & data, const std::size_t max_size, std::queue * que) { @@ -1208,7 +1211,7 @@ void AccelBrakeMapCalibrator::pushDataToQue( } template -void AccelBrakeMapCalibrator::pushDataToVec( +void AccelBrakeMapCalibrator::push_data_to_vec( const T data, const std::size_t max_size, std::vector * vec) { vec->emplace_back(data); @@ -1218,7 +1221,7 @@ void AccelBrakeMapCalibrator::pushDataToVec( } template -T AccelBrakeMapCalibrator::getNearestTimeDataFromVec( +T AccelBrakeMapCalibrator::get_nearest_time_data_from_vec( const T base_data, const double back_time, const std::vector & vec) { double nearest_time = std::numeric_limits::max(); @@ -1235,7 +1238,7 @@ T AccelBrakeMapCalibrator::getNearestTimeDataFromVec( return nearest_time_data; } -DataStampedPtr AccelBrakeMapCalibrator::getNearestTimeDataFromVec( +DataStampedPtr AccelBrakeMapCalibrator::get_nearest_time_data_from_vec( DataStampedPtr base_data, const double back_time, const std::vector & vec) { double nearest_time = std::numeric_limits::max(); @@ -1252,7 +1255,7 @@ DataStampedPtr AccelBrakeMapCalibrator::getNearestTimeDataFromVec( return nearest_time_data; } -double AccelBrakeMapCalibrator::getAverage(const std::vector & vec) +double AccelBrakeMapCalibrator::get_average(const std::vector & vec) { if (vec.empty()) { return 0.0; @@ -1262,47 +1265,47 @@ double AccelBrakeMapCalibrator::getAverage(const std::vector & vec) for (const auto num : vec) { sum += num; } - return sum / vec.size(); + return sum / static_cast(vec.size()); } -double AccelBrakeMapCalibrator::getStandardDeviation(const std::vector & vec) +double AccelBrakeMapCalibrator::get_standard_deviation(const std::vector & vec) { if (vec.empty()) { return 0.0; } - const double ave = getAverage(vec); + const double ave = get_average(vec); double sum = 0.0; for (const auto num : vec) { sum += std::pow(num - ave, 2); } - return std::sqrt(sum / vec.size()); + return std::sqrt(sum / static_cast(vec.size())); } -bool AccelBrakeMapCalibrator::isTimeout( +bool AccelBrakeMapCalibrator::is_timeout( const builtin_interfaces::msg::Time & stamp, const double timeout_sec) { const double dt = this->now().seconds() - rclcpp::Time(stamp).seconds(); return dt > timeout_sec; } -bool AccelBrakeMapCalibrator::isTimeout( +bool AccelBrakeMapCalibrator::is_timeout( const DataStampedPtr & data_stamped, const double timeout_sec) { const double dt = (this->now() - data_stamped->data_time).seconds(); return dt > timeout_sec; } -OccupancyGrid AccelBrakeMapCalibrator::getOccMsg( - const std::string frame_id, const double height, const double width, const double resolution, +OccupancyGrid AccelBrakeMapCalibrator::get_occ_msg( + const std::string & frame_id, const double height, const double width, const double resolution, const std::vector & map_value) { OccupancyGrid occ; occ.header.frame_id = frame_id; occ.header.stamp = this->now(); - occ.info.height = height; - occ.info.width = width; + occ.info.height = static_cast(height); + occ.info.width = static_cast(width); occ.info.map_load_time = this->now(); occ.info.origin.position.x = 0; occ.info.origin.position.y = 0; @@ -1311,22 +1314,23 @@ OccupancyGrid AccelBrakeMapCalibrator::getOccMsg( occ.info.origin.orientation.y = 0; occ.info.origin.orientation.z = 0; occ.info.origin.orientation.w = 1; - occ.info.resolution = resolution; + occ.info.resolution = static_cast(resolution); occ.data = map_value; return occ; } // function for diagnostics -void AccelBrakeMapCalibrator::checkUpdateSuggest(diagnostic_updater::DiagnosticStatusWrapper & stat) +void AccelBrakeMapCalibrator::check_update_suggest( + diagnostic_updater::DiagnosticStatusWrapper & stat) { using DiagStatus = diagnostic_msgs::msg::DiagnosticStatus; using CalibrationStatus = CalibrationStatus; CalibrationStatus accel_brake_map_status; - int8_t level; + int8_t level = DiagStatus::OK; std::string msg; accel_brake_map_status.target = CalibrationStatus::ACCEL_BRAKE_MAP; - if (is_default_map_ == true) { + if (is_default_map_) { accel_brake_map_status.status = CalibrationStatus::NORMAL; level = DiagStatus::OK; msg = "OK"; @@ -1358,8 +1362,8 @@ void AccelBrakeMapCalibrator::checkUpdateSuggest(diagnostic_updater::DiagnosticS // function for debug -void AccelBrakeMapCalibrator::publishMap( - const Map accel_map_value, const Map brake_map_value, const std::string publish_type) +void AccelBrakeMapCalibrator::publish_map( + const Map & accel_map_value, const Map & brake_map_value, const std::string & publish_type) { if (accel_map_value.at(0).size() != brake_map_value.at(0).size()) { RCLCPP_ERROR_STREAM( @@ -1367,29 +1371,30 @@ void AccelBrakeMapCalibrator::publishMap( "Invalid map. The number of velocity index of accel map and brake map is different."); return; } - const double h = accel_map_value.size() + brake_map_value.size() - + const double h = static_cast(accel_map_value.size()) + brake_map_value.size() - 1; // pedal (accel_map_value(0) and brake_map_value(0) is same.) - const double w = accel_map_value.at(0).size(); // velocity + const double w = static_cast(accel_map_value.at(0).size()); // velocity // publish occupancy map - const int8_t MAX_OCC_VALUE = 100; + const int8_t max_occ_value = 100; std::vector int_map_value; - int_map_value.resize(h * w); + int_map_value.resize(static_cast::size_type>(h * w)); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { const double value = - getMapColumnFromUnifiedIndex(accel_map_value_, brake_map_value_, i).at(j); + get_map_column_from_unified_index(accel_map_value_, brake_map_value_, i).at(j); // convert acc to 0~100 int value int8_t int_value = - static_cast(MAX_OCC_VALUE * ((value - min_accel_) / (max_accel_ - min_accel_))); - int_map_value.at(i * w + j) = std::max(std::min(MAX_OCC_VALUE, int_value), (int8_t)0); + static_cast(max_occ_value * ((value - min_accel_) / (max_accel_ - min_accel_))); + int_map_value.at(static_cast::size_type>(i * w + j)) = + std::max(std::min(max_occ_value, int_value), (int8_t)0); } } if (publish_type == "original") { - original_map_occ_pub_->publish(getOccMsg("base_link", h, w, map_resolution_, int_map_value)); + original_map_occ_pub_->publish(get_occ_msg("base_link", h, w, map_resolution_, int_map_value)); } else { - update_map_occ_pub_->publish(getOccMsg("base_link", h, w, map_resolution_, int_map_value)); + update_map_occ_pub_->publish(get_occ_msg("base_link", h, w, map_resolution_, int_map_value)); } // publish raw map @@ -1404,11 +1409,12 @@ void AccelBrakeMapCalibrator::publishMap( float_map.layout.dim[0].stride = h * w; float_map.layout.dim[1].stride = w; float_map.layout.data_offset = 0; - std::vector vec(h * w, 0); + std::vector::size_type vec_size = static_cast::size_type>(h * w); + std::vector vec(vec_size, 0); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { vec[i * w + j] = static_cast( - getMapColumnFromUnifiedIndex(accel_map_value_, brake_map_value_, i).at(j)); + get_map_column_from_unified_index(accel_map_value_, brake_map_value_, i).at(j)); } } float_map.data = vec; @@ -1419,7 +1425,7 @@ void AccelBrakeMapCalibrator::publishMap( } } -void AccelBrakeMapCalibrator::publishOffsetCovMap( +void AccelBrakeMapCalibrator::publish_offset_cov_map( const Map accel_map_value, const Map brake_map_value) { if (accel_map_value.at(0).size() != brake_map_value.at(0).size()) { @@ -1447,19 +1453,20 @@ void AccelBrakeMapCalibrator::publishOffsetCovMap( std::vector vec(h * w, 0); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { - vec[i * w + j] = - static_cast(getMapColumnFromUnifiedIndex(accel_map_value, brake_map_value, i).at(j)); + std::vector::size_type index = static_cast::size_type>(i * w + j); + vec[index] = static_cast( + get_map_column_from_unified_index(accel_map_value, brake_map_value, i).at(j)); } } float_map.data = vec; offset_covariance_pub_->publish(float_map); } -void AccelBrakeMapCalibrator::publishFloat32(const std::string publish_type, const double val) +void AccelBrakeMapCalibrator::publish_float32(const std::string & publish_type, const double val) { Float32Stamped msg; msg.stamp = this->now(); - msg.data = val; + msg.data = static_cast(val); if (publish_type == "current_map_error") { current_map_error_pub_->publish(msg); } else if (publish_type == "updated_map_error") { @@ -1469,7 +1476,7 @@ void AccelBrakeMapCalibrator::publishFloat32(const std::string publish_type, con } } -void AccelBrakeMapCalibrator::publishCountMap() +void AccelBrakeMapCalibrator::publish_count_map() { if (accel_map_value_.at(0).size() != brake_map_value_.at(0).size()) { RCLCPP_ERROR_STREAM( @@ -1477,76 +1484,84 @@ void AccelBrakeMapCalibrator::publishCountMap() "Invalid map. The number of velocity index of accel map and brake map is different."); return; } - const double h = accel_map_value_.size() + brake_map_value_.size() - - 1; // pedal (accel_map_value(0) and brake_map_value(0) is same.) - const double w = accel_map_value_.at(0).size(); // velocity - const int8_t MAX_OCC_VALUE = 100; + const double h = static_cast( + accel_map_value_.size() + brake_map_value_.size() - + 1); // pedal (accel_map_value(0) and brake_map_value(0) is same.) + + const double w = static_cast(accel_map_value_.at(0).size()); // velocity + const int8_t max_occ_value = 100; - std::vector count_map, ave_map, std_map; - count_map.resize(h * w); - ave_map.resize(h * w); - std_map.resize(h * w); + std::vector count_map; + std::vector ave_map; + std::vector std_map; + count_map.resize(static_cast::size_type>(h * w)); + ave_map.resize(static_cast::size_type>(h * w)); + std_map.resize(static_cast::size_type>(h * w)); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { const auto data_vec = map_value_data_.at(i).at(j); if (data_vec.empty()) { // input *UNKNOWN* value - count_map.at(i * w + j) = -1; - ave_map.at(i * w + j) = -1; + count_map.at(static_cast::size_type>(i * w + j)) = -1; + ave_map.at(static_cast::size_type>(i * w + j)) = -1; } else { const auto count_rate = - MAX_OCC_VALUE * (static_cast(data_vec.size()) / max_data_count_); - count_map.at(i * w + j) = static_cast( - std::max(std::min(static_cast(MAX_OCC_VALUE), static_cast(count_rate)), 0)); + max_occ_value * (static_cast(data_vec.size()) / max_data_count_); + count_map.at(static_cast::size_type>(i * w + j)) = static_cast( + std::max(std::min(static_cast(max_occ_value), static_cast(count_rate)), 0)); // calculate average { - const double average = getAverage(data_vec); - int8_t int_average = static_cast( - MAX_OCC_VALUE * ((average - min_accel_) / (max_accel_ - min_accel_))); - ave_map.at(i * w + j) = std::max(std::min(MAX_OCC_VALUE, int_average), (int8_t)0); + const double average = get_average(data_vec); + int8_t int_average = static_cast( + max_occ_value * ((average - min_accel_) / (max_accel_ - min_accel_))); + ave_map.at(static_cast::size_type>(i * w + j)) = + std::max(std::min(max_occ_value, int_average), static_cast(0)); } // calculate standard deviation { - const double std_dev = getStandardDeviation(data_vec); + const double std_dev = get_standard_deviation(data_vec); const double max_std_dev = 0.2; const double min_std_dev = 0.0; int8_t int_std_dev = static_cast( - MAX_OCC_VALUE * ((std_dev - min_std_dev) / (max_std_dev - min_std_dev))); - std_map.at(i * w + j) = std::max(std::min(MAX_OCC_VALUE, int_std_dev), (int8_t)0); + max_occ_value * ((std_dev - min_std_dev) / (max_std_dev - min_std_dev))); + std_map.at(i * w + j) = std::max(std::min(max_occ_value, int_std_dev), (int8_t)0); } } } } // publish average map / standard dev map / count map - data_ave_pub_->publish(getOccMsg("base_link", h, w, map_resolution_, ave_map)); - data_std_pub_->publish(getOccMsg("base_link", h, w, map_resolution_, std_map)); - data_count_pub_->publish(getOccMsg("base_link", h, w, map_resolution_, count_map)); + data_ave_pub_->publish(get_occ_msg("base_link", h, w, map_resolution_, ave_map)); + data_std_pub_->publish(get_occ_msg("base_link", h, w, map_resolution_, std_map)); + data_count_pub_->publish(get_occ_msg("base_link", h, w, map_resolution_, count_map)); // publish count with self pos map - int nearest_pedal_idx = nearestPedalSearch(); - int nearest_vel_idx = nearestVelSearch(); + int nearest_pedal_idx = nearest_pedal_search(); + int nearest_vel_idx = nearest_vel_search(); // input self pose (to max value / min value ) and publish this update_success_ - ? count_map.at(nearest_pedal_idx * w + nearest_vel_idx) = std::numeric_limits::max() - : count_map.at(nearest_pedal_idx * w + nearest_vel_idx) = std::numeric_limits::min(); - data_count_with_self_pose_pub_->publish(getOccMsg("base_link", h, w, map_resolution_, count_map)); + ? count_map.at(static_cast::size_type>( + nearest_pedal_idx * w + nearest_vel_idx)) = std::numeric_limits::max() + : count_map.at(static_cast::size_type>( + nearest_pedal_idx * w + nearest_vel_idx)) = std::numeric_limits::min(); + data_count_with_self_pose_pub_->publish( + get_occ_msg("base_link", h, w, map_resolution_, count_map)); } -void AccelBrakeMapCalibrator::publishIndex() +void AccelBrakeMapCalibrator::publish_index() { MarkerArray markers; - const double h = accel_map_value_.size() + brake_map_value_.size() - + const double h = static_cast(accel_map_value_.size()) + brake_map_value_.size() - 1; // pedal (accel_map_value(0) and brake_map_value(0) is same.) - const double w = accel_map_value_.at(0).size(); // velocity + const double w = static_cast(accel_map_value_.at(0).size()); // velocity visualization_msgs::msg::Marker marker; marker.header.frame_id = "base_link"; marker.header.stamp = this->now(); - marker.type = marker.TEXT_VIEW_FACING; - marker.action = marker.ADD; + marker.type = visualization_msgs::msg::Marker::TEXT_VIEW_FACING; + marker.action = visualization_msgs::msg::Marker::ADD; std_msgs::msg::ColorRGBA color; color.a = 0.999; color.b = 0.1; @@ -1562,7 +1577,7 @@ void AccelBrakeMapCalibrator::publishIndex() // pedal value for (int pedal_idx = 0; pedal_idx < h; pedal_idx++) { - const double pedal_value = getPedalValueFromUnifiedIndex(pedal_idx); + const double pedal_value = get_pedal_value_from_unified_index(pedal_idx); marker.ns = "occ_pedal_index"; marker.id = pedal_idx; marker.pose.position.x = -map_resolution_ * 0.5; @@ -1576,7 +1591,7 @@ void AccelBrakeMapCalibrator::publishIndex() // pedal index name marker.ns = "occ_pedal_index"; - marker.id = h; + marker.id = static_cast(h); marker.pose.position.x = -map_resolution_ * 0.5; marker.pose.position.y = map_resolution_ * (0.5 + h); marker.scale.z = 0.03; @@ -1599,7 +1614,7 @@ void AccelBrakeMapCalibrator::publishIndex() // velocity index name marker.ns = "occ_vel_index"; - marker.id = w; + marker.id = static_cast(w); marker.pose.position.x = map_resolution_ * (0.5 + w); marker.pose.position.y = -map_resolution_ * 0.2; marker.scale.z = 0.02; @@ -1609,7 +1624,7 @@ void AccelBrakeMapCalibrator::publishIndex() index_pub_->publish(markers); } -void AccelBrakeMapCalibrator::publishUpdateSuggestFlag() +void AccelBrakeMapCalibrator::publish_update_suggest_flag() { std_msgs::msg::Bool update_suggest; @@ -1629,7 +1644,7 @@ void AccelBrakeMapCalibrator::publishUpdateSuggestFlag() update_suggest_pub_->publish(update_suggest); } -bool AccelBrakeMapCalibrator::writeMapToCSV( +bool AccelBrakeMapCalibrator::write_map_to_csv( std::vector vel_index, std::vector pedal_index, Map value_map, std::string filename) { @@ -1668,7 +1683,7 @@ bool AccelBrakeMapCalibrator::writeMapToCSV( return true; } -void AccelBrakeMapCalibrator::addIndexToCSV(std::ofstream * csv_file) +void AccelBrakeMapCalibrator::add_index_to_csv(std::ofstream * csv_file) { *csv_file << "timestamp,velocity,accel,pitch_comp_accel,final_accel,accel_pedal,brake_pedal," << "accel_pedal_speed,brake_pedal_speed,pitch,steer,jerk,full_original_accel_rmse, " @@ -1676,7 +1691,7 @@ void AccelBrakeMapCalibrator::addIndexToCSV(std::ofstream * csv_file) << std::endl; } -void AccelBrakeMapCalibrator::addLogToCSV( +void AccelBrakeMapCalibrator::add_log_to_csv( std::ofstream * csv_file, const double & timestamp, const double velocity, const double accel, const double pitched_accel, const double accel_pedal, const double brake_pedal, const double accel_pedal_speed, const double brake_pedal_speed, const double pitch, From ec7a2a1828ccd28becb1c5fccf24365d38315bc1 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 11 Jun 2024 15:59:32 +0900 Subject: [PATCH 114/142] docs(avoidance): update documentation (#7149) * docs(avoidance): update documentation Signed-off-by: satoshi-ota * fix: small change Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .../README.md | 1187 +++++++++++------ .../images/advanced/avoidance_freespace.png | Bin 0 -> 55809 bytes .../advanced/avoidance_intersection.png | Bin 0 -> 100467 bytes .../advanced/avoidance_opposite_direction.png | Bin 0 -> 53945 bytes .../advanced/avoidance_same_direction.png | Bin 0 -> 54910 bytes .../images/advanced/avoidance_zebra.png | Bin 0 -> 39312 bytes .../images/avoidance-debug-marker.png | Bin 822957 -> 0 bytes ...io.svg => avoidance_design.fig.drawio.svg} | 0 ...shift_point_and_its_constraints.drawio.png | Bin 1840386 -> 0 bytes .../images/cancel/cancel.png | Bin 0 -> 83555 bytes .../images/debug/debug_marker_rviz.png | Bin 0 -> 458550 bytes .../images/dynamic_lateral_margin.svg | 144 -- .../images/envelope_polygon.svg | 272 ---- ...tacle_to_road_shoulder_distance.drawio.svg | 235 ---- .../images/parked-car-detection.svg | 206 --- .../path_generation/envelope_polygon.png | Bin 0 -> 162724 bytes .../path_generation/envelope_polygon_rviz.png | Bin 0 -> 159952 bytes .../images/path_generation/lateral.png | Bin 0 -> 81586 bytes .../images/path_generation/margin.png | Bin 0 -> 102350 bytes .../path_generation/opposite_direction.png | Bin 0 -> 104366 bytes .../images/path_generation/polygon_update.png | Bin 0 -> 131110 bytes .../images/path_generation/same_direction.png | Bin 0 -> 102885 bytes .../images/path_generation/shift_line.png | Bin 0 -> 80480 bytes .../images/purpose/avoidance.png | Bin 0 -> 47953 bytes .../images/purpose/rviz.png | Bin 0 -> 464686 bytes .../images/safety_check/not_stop.png | Bin 0 -> 54177 bytes .../images/safety_check/safety_check_flow.png | Bin 0 -> 179723 bytes .../images/safety_check/stop.png | Bin 0 -> 52767 bytes .../images/safety_check_flowchart.svg | 323 ----- .../images/safety_check_margin.svg | 168 --- .../images/safety_check_step_1.svg | 204 --- .../images/safety_check_step_2.svg | 143 -- .../images/shift_line_generation.svg | 114 -- .../target_filter/ambiguous_deviating.png | Bin 0 -> 22087 bytes .../target_filter/ambiguous_merging.png | Bin 0 -> 23767 bytes .../target_filter/ambiguous_parallel.png | Bin 0 -> 22832 bytes .../target_filter/avoid_not_on_ego_lane.png | Bin 0 -> 22207 bytes .../target_filter/avoid_on_ego_lane.png | Bin 0 -> 21700 bytes .../images/target_filter/crosswalk.svg | 148 ++ .../images/target_filter/detection_area.svg | 272 ++++ .../target_filter/detection_area_rviz.png | Bin 0 -> 170552 bytes .../images/target_filter/deviating.png | Bin 0 -> 56492 bytes .../images/target_filter/merging.png | Bin 0 -> 56182 bytes .../target_filter/never_avoid_deviating.png | Bin 0 -> 21020 bytes .../never_avoid_intersection.png | Bin 0 -> 97768 bytes .../target_filter/never_avoid_merging.png | Bin 0 -> 21396 bytes .../target_filter/never_avoid_not_edge.png | Bin 0 -> 28079 bytes .../target_filter/never_avoid_stop_factor.png | Bin 0 -> 24681 bytes .../images/target_filter/none.png | Bin 0 -> 22630 bytes .../images/target_filter/parked_vehicle.svg | 172 +++ .../images/todo.png | Bin 7888 -> 0 bytes .../images/use_adjacent_lane.svg | 79 -- .../images/use_hatched_road_markings.svg | 81 -- .../images/use_intersection_areas.svg | 75 -- .../images/use_opposite_lane.svg | 80 -- .../images/yield_limitation.svg | 84 -- .../images/yield_maneuver.svg | 319 ----- .../images/yield_maneuver_flowchart.svg | 333 ----- 58 files changed, 1354 insertions(+), 3285 deletions(-) create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/advanced/avoidance_freespace.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/advanced/avoidance_intersection.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/advanced/avoidance_opposite_direction.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/advanced/avoidance_same_direction.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/advanced/avoidance_zebra.png delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/avoidance-debug-marker.png rename planning/autoware_behavior_path_static_obstacle_avoidance_module/images/{avoidance_design.fig1.drawio.svg => avoidance_design.fig.drawio.svg} (100%) delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/avoidance_module-shift_point_and_its_constraints.drawio.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/cancel/cancel.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/debug/debug_marker_rviz.png delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/dynamic_lateral_margin.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/envelope_polygon.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/obstacle_to_road_shoulder_distance.drawio.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/parked-car-detection.svg create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/envelope_polygon.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/envelope_polygon_rviz.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/lateral.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/margin.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/opposite_direction.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/polygon_update.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/same_direction.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/shift_line.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/purpose/avoidance.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/purpose/rviz.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/safety_check/not_stop.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/safety_check/safety_check_flow.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/safety_check/stop.png delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/safety_check_flowchart.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/safety_check_margin.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/safety_check_step_1.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/safety_check_step_2.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/shift_line_generation.svg create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/ambiguous_deviating.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/ambiguous_merging.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/ambiguous_parallel.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/avoid_not_on_ego_lane.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/avoid_on_ego_lane.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/crosswalk.svg create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/detection_area.svg create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/detection_area_rviz.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/deviating.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/merging.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/never_avoid_deviating.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/never_avoid_intersection.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/never_avoid_merging.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/never_avoid_not_edge.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/never_avoid_stop_factor.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/none.png create mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/target_filter/parked_vehicle.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/todo.png delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/use_adjacent_lane.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/use_hatched_road_markings.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/use_intersection_areas.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/use_opposite_lane.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/yield_limitation.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/yield_maneuver.svg delete mode 100644 planning/autoware_behavior_path_static_obstacle_avoidance_module/images/yield_maneuver_flowchart.svg diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/README.md b/planning/autoware_behavior_path_static_obstacle_avoidance_module/README.md index 93b57ac3a4831..bc70c1fdd5c6a 100644 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/README.md +++ b/planning/autoware_behavior_path_static_obstacle_avoidance_module/README.md @@ -1,12 +1,16 @@ -# Avoidance design +# Avoidance module for static objects -This is a rule-based path planning module designed for obstacle avoidance. +![fig](./images/purpose/rviz.png) ## Purpose / Role -This module is designed for rule-based avoidance that is easy for developers to design its behavior. It generates avoidance path parameterized by intuitive parameters such as lateral jerk and avoidance distance margin. This makes it possible to pre-define avoidance behavior. +This is a rule-based avoidance module, which is running based on perception output data, HDMap, current path and route. This module is designed for creating avoidance path for static (=stopped) objects in simple situation. On the other hand, this module doesn't support dynamic (=moving) objects for now. -In addition, the approval interface of behavior_path_planner allows external users / modules (e.g. remote operation) to intervene the decision of the vehicle behavior. This function is expected to be used, for example, for remote intervention in emergency situations or gathering information on operator decisions during development. +![fig](./images/purpose/avoidance.png) + +This module has [RTC interface](../autoware_rtc_interface/README.md), and user can select operation mode from MANUAL/AUTO depending on the vehicle sensor performance. If user selects MANUAL mode, this module outputs avoidance path as candidate and waits operator approval. In the case where the sensor/perception performance is not enough and false positive maybe occurs, we recommend to use this module with MANUAL mode in order to prevent unnecessary avoidance maneuver. + +On the other hand, if user selects AUTO mode, this module modifies current following path without operator approval. If the sensor/perception performance is good enough, user can use this module with AUTO mode. ### Limitations @@ -18,264 +22,439 @@ This module executes avoidance over lanes, and the decision requires the lane st ## Inner-workings / Algorithms -The following figure shows a simple explanation of the logic for avoidance path generation. First, target objects are picked up, and shift requests are generated for each object. These shift requests are generated by taking into account the lateral jerk required for avoidance (red lines). Then these requests are merged and the shift points are created on the reference path (blue line). Filtering operations are performed on the shift points such as removing unnecessary shift points (yellow line), and finally a smooth avoidance path is generated by combining Clothoid-like curve primitives (green line). - -![fig1](./images/avoidance_design.fig1.drawio.svg) - -### Flowchart +This module mainly has two parts, target filtering part and path generation part. At first, all objects are filtered by several conditions. In this step, this module checks avoidance feasibility and necessity as well. After that, this module generates avoidance path outline, whom we call **shift line**, based on filtered objects. The shift lines are set into [path shifter](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md), which is a library for path generation, to create smooth shift path. Additionally, this module has feature to check non-target objects so that the ego can avoid target object safely. This feature receives generated avoidance path and surround objects and judges current situation. Lastly, this module update current ego behavior. ```plantuml @startuml skinparam monochrome true -title avoidance path planning +title Overall flowchart start -:calcAvoidancePlanningData; +partition updateData() { +partition fillFundamentalData() { +:update fundamental data; note right - - center line + - reference pose - reference path: generated by spline interpolation of centerline path with dense interval - - driving lanelets - - objects + - current lanelets + - drivable bounds + - avoidance start point + calculate the point where the ego should start avoidance maneuver + depending on traffic siganl. + - avoidance return point + calculate the point where the ego should return original lane + depending on traffic siganl and goal position. end note -:calcAvoidanceTargetObjects; +:fillAvoidanceTargetObjects(); note right - Find objects that satisfies all of the following: + This module checks following conditions: - target object type - being stopped - being around the ego-driving lane - being on the edge of the lane + - ... end note -if (Is target object found?) then ( yes) -else (\n no) - if (Does path_shifter already have shift points?) then (no) - :exit avoidance module; - stop - else (yes) - endif -endif - -partition shift-point\ngeneration { +:updateRegisteredObject(); -:calcRawShiftPointsFromObjects; -note right - generate "raw_shift_points" for each target objects. - the shift point contains: - - avoiding shift - - return-to-center shift - with considering the lateral jerk range. -end note +:compensateDetectionLost(); +} -:combineRawShiftPointsWithUniqueCheck; -note right - combine with "already-registered raw_shift_points". +partition fillShiftLine() { +:generate shift line; - The raw_shift_point is saved when the relevant - shift is executed. Here the registered - raw_shift_points are added with the raw_shift_Point - calculated in this step. -end note +:create candidate path; -:addReturnShiftPointFromEgo; +:check candidate path; note right - Add return-to-center shift point from the last - shift point, if needed. If there is no shift points, - set return-to center shift from ego. + This module checks following conditions: + - is there enough distance between surround moving vehicle and ego path to avoid target safely? + - is the path jerky? + - is the path within drivable area? end note +} -:mergeShiftPoints; +partition fillEgoStatus() { +:getCurrentModuleState(); note right -shift points for each objects are merged to consider -overlapping region, etc and new shift points are created -for the current reference trajectory. + This module has following status: + - RUNNING: target object is still remaining. Or, the ego hasn't returned original lane. + - CANCEL: taget obejct has gone. And, the ego hasn't initiated avoidance maneuver. + - SUCCEEDED: the ego finishes avoiding all objects and returns original lane. end note -:trimShiftPoint; +if (canYieldManeuver()) then (yes) +if (Is the avoidance path safe?) then (yes) +else (no) +:transit yield maneuver; note right -modify shift points or remove unnecessary points. -it contains some operations: - - quantize shift length - - trim small shift - - trim similar gradient - - trim momentary return + Check current situation. + This module can transit yield maneuver only when the ego hasn't initiated avoidance maneuver. end note +endif +else (no) - +endif } +} +stop + +start +partition isExecutionRequested() { +if (Is there object that should/can be avoid immediately?) then (yes) +:return true; +stop +else (no) +endif -:findNewShiftPoint; +if (Does it generate new shift lines successfully?) then (yes) +else (no) +:return false; +stop +endif + +if (Is there object that is potentially avoidable?) then (yes) +:return true; note right - If there is a shift point that has a large - deviation from previous planned path, - it is considered as a new shift point. + Sometimes, we meet the situation where there is enough space to avoid + but ego speed is to high to avoid target obejct under lateral jerk constraints. + This module keeps running in this case in order to decelerate ego speed. end note +stop +else (no) +:return false; +endif +} +stop -if (Is the new shift point found?) then ( yes) - partition set-shift-points\nwith-approval-handling { - :check approval condition; - if (Is approved?) then (no) - :set approval_handler to - WAITING_APPROVAL; - :generate candidate path - with the new shifts; - else (\n yes) - :set new shift points to path_shifter; - note right - This process makes changes - to the final path shape. - end note - :register associated raw_shift_points; - note right - Used to keep the planning consistency - in the shift points generation. - end note - :clear WAITING_APPROVAL - in approval_handler; - endif - } -else (\n no) +start +partition plan() { +partition updatePathShifter() { +if (Is approved?) then (yes) +:add new shift lines to path shifter; +else (\n yes) +endif +} + +if (Is current status SUCCEEDED?) then (yes) +:removeRegisteredShiftLines(); +:output previous module output; +stop +else (no) +endif + +if (Is current status CANCEL?) then (yes) +:removeRegisteredShiftLines(); +:output previous module output; +stop +else (no) +endif + +if (Is in YIELD maneuver?) then (yes) +:removeRegisteredShiftLines(); +else (no) endif -partition path-generation { +:generate avoidance path; -:generateAvoidancePath; +:calculate turn signal; + +partition updateEgoBehavior() { +:insertPrepareVelocity(); note right - Final path is generated by path_shifter - from the calculated shift points with - Clothoid-Like curve primitives. + This module inserts slow down section so that the ego can avoid target object under lateral jerk constraints. +end note +:insertAvoidanceVelocity(); +note right + This module controls ego acceleration until the ego passes the side of the target object. end note -:generateExtendedDrivableArea; - -:modifyPathVelocityToPreventAccelerationOnAvoidance; +if (Is in YIELD maneuver?) then (yes) +:insertWaitPoint(); note right - Reduce acceleration during - avoidance to improve ride comfort. + This module inserts stop point. + The ego keeps stopping until this module judges the ego can avoid target object safely. end note +else (no) +endif -:resample path; +if (Is waiting operator approval?) then (yes) +:insertWaitPoint(); note right - To reduce path points for later node. + This module inserts stop point. + The ego keeps stopping until operator approves avoidance maneuver. end note +else (no) +endif + +:insertReturnDeadLine(); +} +:generate drivable area; } stop + @enduml ``` -## Overview of algorithm for target object filtering +## Target object filtering + +### Overview + +The module uses following conditions to filter avoidance target objects. + +| Check condition | Target class | Details | If conditions are not met | +| -------------------------------------------------------------------------------------------- | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------- | +| Is an avoidance target class object? | All | Use can select avoidance target class from config file. | Never avoid it. | +| Is a stopped object? | All | Objects keep higher speed than `th_moving_speed` for longer period of time than `th_moving_time` is judged as moving. | Never avoid it. | +| Is within detection area? | All | The module creates detection area to filter target objects roughly based on lateral margin in config file. (see [here](#width-of-detection-area)) | Never avoid it. | +| Isn't there enough lateral distance between the object and path? | All | - | Never avoid it. | +| Is near the centerline of ego lane? | All | - | It depends on other conditions. | +| Is there a crosswalk near the object? | Pedestrian, Bicycle | The module don't avoid the Pedestrian and Bicycle nearer the crosswalk because the ego should stop in front of it if they're crossing road. (see [here](#for-crosswalk-users)) | Never avoid it. | +| Is the distance between the object and traffic light along the path longer than threshold? | Car, Truck, Bus, Trailer | The module used this condition if there is ambiguity as to whether the vehicle is a parked vehicle or not. | It depends on other conditions. | +| Is the distance between the object and crosswalk light along the path longer than threshold? | Car, Truck, Bus, Trailer | Same as above. | It depends on other conditions. | +| Is the stopping time longer than threshold? | Car, Truck, Bus, Trailer | Same as above. | It depends on other conditions. | +| Is within intersection? | Car, Truck, Bus, Trailer | The module assumes that there isn't any parked vehicle within intersection. | It depends on other conditions. | +| Is on ego lane? | Car, Truck, Bus, Trailer | - | It depends on other conditions. | +| Is a parked vehicle? | Car, Truck, Bus, Trailer | The module judges whether the vehicle is a parked vehicle based on its lateral offset. (see [here](#judge-if-its-a-parked-vehicle)) | It depends on other conditions. | +| Is merging to ego lane from other lane? | Car, Truck, Bus, Trailer | The module judges the vehicle behavior based on its yaw angle and offset direction. (see [here](#judge-vehicle-behavior)) | It depends on other conditions. | +| Is merging to other lane from ego lane? | Car, Truck, Bus, Trailer | Same as above. | It depends on other conditions. | + +### Common conditions + +#### Detection area + +The module generates detection area for target filtering based on following params: + +```yaml + # avoidance is performed for the object type with true + target_object: + ... + lateral_margin: + soft_margin: 0.3 # [m] + hard_margin: 0.2 # [m] + hard_margin_for_parked_vehicle: 0.7 # [m] + ... + # For target object filtering + target_filtering: + ... + # detection area generation parameters + detection_area: + static: false # [-] + min_forward_distance: 50.0 # [m] + max_forward_distance: 150.0 # [m] + backward_distance: 10.0 # [m] +``` + +##### Width of detection area + +1. get the largest lateral margin of all classes (Car, Truck, ...). The margin is sum of `soft_margin` and `hard_margin_for_parked_vehicle`. +2. the detection area width is sum of ego vehicle width and the largest lateral margin. + +##### Longitudinal distance of detection area + +If the parameter `detection_area.static` is set to `true`, the module creates detection area whose longitudinal distance is `max_forward_distance`. + +If the parameter `detection_area.static` is set to `false`, the module creates detection area so that the ego can avoid objects with minimum lateral jerk value. Thus, the longitudinal distance is depends on lateral maximum shift length, lateral jerk constraints and current ego speed. Additionally, it has to consider distance used for prepare phase. + +```c++ +... + const auto max_shift_length = std::max( + std::abs(parameters_->max_right_shift_length), std::abs(parameters_->max_left_shift_length)); + const auto dynamic_distance = + PathShifter::calcLongitudinalDistFromJerk(max_shift_length, getLateralMinJerkLimit(), speed); + + return std::clamp( + 1.5 * dynamic_distance + getNominalPrepareDistance(), + parameters_->object_check_min_forward_distance, + parameters_->object_check_max_forward_distance); +``` + +![fig](./images/target_filter/detection_area.svg) -### How to decide the target obstacles +![fig](./images/target_filter/detection_area_rviz.png) -The avoidance target should be limited to stationary objects (you should not avoid a vehicle waiting at a traffic light even if it blocks your path). Therefore, target vehicles for avoidance should meet the following specific conditions. +### Conditions for non-vehicle type objects -- It is in the vicinity of your lane (parametrized) -- It is stopped - - `threshold_speed_object_is_stopped`: parameter that be used for judge the object has stopped or not. - - `threshold_time_object_is_moving`: parameter that be used for chattering prevention. -- It is a specific class. - - User can limit avoidance targets. - - Fo now, avoidance module supports only vehicle. -- It is not being in the center of the route - - This means that the vehicle is parked on the edge of the lane. This prevents the vehicle from avoiding a vehicle waiting at a traffic light in the middle of the lane. However, this is not an appropriate implementation for the purpose. Even if a vehicle is in the center of the lane, it should be avoided if it has its hazard lights on, and this is a point that should be improved in the future as the recognition performance improves. -- Object is not behind ego(default: > -`2.0 m`) or too far(default: < `150.0 m`) and object is not behind the path goal. +#### For crosswalk users -![fig1](./images/target_vehicle_selection.svg) +If Pedestrian and Bicycle are closer to crosswalk than threshold 2.0m (hard coded for now), the module judges they're crossing the road and never avoids them. -### Parked-car detection +![fig](./images/target_filter/crosswalk.svg) -Not only the length from the centerline, but also the length from the road shoulder is calculated and used for the filtering process. It calculates the ratio of _the actual length between the the object's center and the center line_ `shift_length` and _the maximum length the object can shift_ `shiftable_length`. +### Conditions for vehicle type objects + +#### Judge vehicle behavior + +The module classifies vehicles into following three behavior based on its yaw angle and offset direction. + +```yaml +# params for filtering objects that are in intersection +intersection: + yaw_deviation: 0.349 # [rad] (default 20.0deg) +``` + +| Behavior | Details | Figure | +| --------- | ---------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | +| NONE | If the object's relative yaw angle to lane is less than threshold `yaw_deviation`, it is classified into `NONE`. | ![fig](./images/target_filter/none.png) | +| MERGING | See following flowchart. | ![fig](./images/target_filter/merging.png) | +| DEVIATING | See following flowchart. | ![fig](./images/target_filter/deviating.png) | + +```plantuml +@startuml +skinparam defaultTextAlignment center +skinparam noteTextAlignment left + +title Judge vehicle behavior +start + +:calculate object relative yaw angle; +if(angle < threshold or angle > PI - threshold) then (yes) +:it is neither MERGING nor DEVIATING. (=NONE); +stop +else (no) +endif +if(Is the object on right side of ego path?) then (yes) +if(angle < 0.0 and -PI/2 < angle) then (yes) +#FF006C :DEVIATING; +stop +else (no) +if(angle > PI/2) then (yes) +#FF006C :DEVIATING; +stop +else (no) +endif +endif +else (no) +if(angle > 0.0 and PI/2 > angle) then (yes) +#FF006C :DEVIATING; +stop +else (no) +if(angle < -PI/2) then (yes) +#FF006C :DEVIATING; +stop +else (no) +endif +endif +endif +#00FFB1 :MERGING; +stop +@enduml + +``` + +#### Judge if it's a parked vehicle + +Not only the length from the centerline, but also the length from the road shoulder is calculated and used for the filtering process. In this logic, it calculates ratio of **actual shift length** to **shiftable shift length** as follow. If the result is larger than threshold `th_shiftable_ratio`, the module judges the vehicle as a parked vehicle. $$ -l_D = l_a - \frac{width}{2}, \\ -ratio = \frac{l_d}{l_D} +L_{d} = \frac{W_{lane} - W_{obj}}{2}, \\ +ratio = \frac{L_{a}}{L_{d}} $$ -- $l_d$ : actual shift length -- $l_D$ : shiftable length -- $l_a$ : distance between centerline and most left boundary. -- $width$ : object width +- $L_{d}$ : shiftable length. +- $L_{a}$ : actual shift length. +- $W_{lane}$ : lane width. +- $W_{obj}$ : object width. -The closer the object is to the shoulder, the larger the value of $ratio$ (theoretical max value is 1.0), and it compares the value and `object_check_shiftable_ratio` to determine whether the object is a parked-car. If the road has no road shoulders, it uses `object_check_min_road_shoulder_width` as a road shoulder width virtually. +![fig2](./images/target_filter/parked_vehicle.svg) -![fig2](./images/parked-car-detection.svg) +### Target object filtering -### Compensation for detection lost - -In order to prevent chattering of recognition results, once an obstacle is targeted, it is hold for a while even if it disappears. This is effective when recognition is unstable. However, since it will result in over-detection (increase a number of false-positive), it is necessary to adjust parameters according to the recognition accuracy (if `object_last_seen_threshold = 0.0`, the recognition result is 100% trusted). +| Situation | Details | Ego behavior | +| -------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| Vehicle is within intersection area defined in HDMap. The module ignores vehicle which is following lane or merging to ego lane. | ![fig](./images/target_filter/never_avoid_intersection.png) | Never avoid it. | +| Vehicle is on ego lane. There are adjacent lanes for both side. | ![fig](./images/target_filter/never_avoid_not_edge.png) | Never avoid it. | +| Vehicle is merging to other lane from ego lane. Most part of its footprint is on ego lane. | ![fig](./images/target_filter/never_avoid_deviating.png) | Never avoid it. | +| Vehicle is merging to ego lane from other lane. Most part of its footprint is on ego lane. | ![fig](./images/target_filter/never_avoid_merging.png) | Never avoid it. | +| Vehicle is not a obvious parked vehicle and stopping in front of the crosswalk or traffic light. | ![fig](./images/target_filter/never_avoid_stop_factor.png) | Never avoid it. | +| Vehicle stops on ego lane with pulling over to the side of the road. | ![fig](./images/target_filter/avoid_on_ego_lane.png) | Avoid it immediately. | +| Vehicle stops on adjacent lane. | ![fig](./images/target_filter/avoid_not_on_ego_lane.png) | Avoid it immediately. | +| Vehicle stops on ego lane without pulling over to the side of the road. | ![fig](./images/target_filter/ambiguous_parallel.png) | Set the parameter `avoidance_for_ambiguous_vehicle.enable` to `true`, the module avoids ambiguous vehicle. | +| Vehicle is merging to ego lane from other lane. | ![fig](./images/target_filter/ambiguous_merging.png) | Set the parameter `avoidance_for_ambiguous_vehicle.enable` to `true`, the module avoids ambiguous vehicle. | +| Vehicle is merging to other lane from ego lane. | ![fig](./images/target_filter/ambiguous_deviating.png) | Set the parameter `avoidance_for_ambiguous_vehicle.enable` to `true`, the module avoids ambiguous vehicle. | ### Flowchart +There are three main filtering functions `isSatisfiedWithCommonCondition()`, `isSatisfiedWithVehicleCondition()` and `isSatisfiedWithNonVehicleCondition()`. The filtering process is executed according to following flowchart. Additionally, the module checks avoidance necessity in `isNoNeedAvoidanceBehavior()` based on the object pose, ego path and lateral margin in config file. + ```plantuml @startuml skinparam defaultTextAlignment center skinparam noteTextAlignment left -title object filtering flowchart +title Object filtering flowchart start -if(object is satisfied with common target condition ?) then (yes) -if(vehicle can pass by the object without avoidance ?) then (yes) -:return false; +if(isSatisfiedWithCommonCondition()) then (yes) +if(isNoNeedAvoidanceBehavior()) then (yes) +#00FFB1 :IGNORE; stop else (\n no) endif else (\n no) -:return false; +#00FFB1 :IGNORE; stop endif - -if(object is vehicle type ?) then (yes) -if(object is satisfied with vehicle type target condition ?) then (yes) +if(Is vehicle type?) then (yes) +if(isSatisfiedWithVehicleCodition()) then (yes) else (\n no) -:return false; +#00FFB1 :IGNORE; stop endif else (\n no) -if(object is satisfied with non-vehicle type target condition ?) then (yes) +if(isSatisfiedWithNonVehicleCodition()) then (yes) else (\n no) -:return false; +#00FFB1 :IGNORE; stop endif endif - -#FF006C :return true; +#FF006C :AVOID; stop @enduml ``` +#### Common conditions + +At first, the function `isSatisfiedWithCommonCondition()` includes conditions used for all object class. + ```plantuml @startuml skinparam defaultTextAlignment center skinparam noteTextAlignment left -title filtering flow for all types object +title Common filtering flow start partition isSatisfiedWithCommonCondition() { -if(object is avoidance target type ?) then (yes) -if(object is moving more than threshold time ?) then (yes) -:return false; +if(Is object within detection area? (filtering roughly by position.)) then (yes) +if(Is object an avoidance target type?) then (yes) +if(Is moving object?) then (yes) +#00FFB1 :return false; stop else (\n no) -if(object is farther than forward distance threshold ?) then (yes) -:return false; +if(Is object farther than forward distance threshold ?) then (yes) +#00FFB1 :return false; stop else (\n no) -If(object is farther than backward distance threshold ?) then (yes) -:return false; +If(Is object farther than backward distance threshold ?) then (yes) +#00FFB1 :return false; stop else (\n no) endif endif endif else (\n no) -:return false; +#00FFB1 :return false; +stop +endif +else (\n no) +#00FFB1 :return false; stop endif #FF006C :return true; @@ -283,14 +462,26 @@ stop } @enduml + ``` +#### Conditions for vehicle + +Target class: + +- Car +- Truck +- Bus +- Trailer + +As a next step, object is filtered by condition specialized for its class. + ```plantuml @startuml skinparam defaultTextAlignment center skinparam noteTextAlignment left -title filtering flow for vehicle type objects +title Filtering flow for vehicle type objects start partition isSatisfiedWithVehicleCodition() { @@ -298,34 +489,127 @@ if(object is force avoidance target ?) then (yes) #FF006C :return true; stop else (\n no) -if(object is nearer lane centerline than threshold ?) then (yes) -:return false; + +if(isNeverAvoidanceTarget()) then (yes) +#00FFB1 :return false; stop else (\n no) -if(object is on same lane for ego ?) then (yes) -if(object is shifting right or left side road shoulder more than threshold ?) then (yes) + +if(isObviousAvoidanceTarget()) then (yes) #FF006C :return true; stop else (\n no) -:return false; + +if(Is stopping time longer than threshold?) then (no) +#00FFB1 :return false; stop +else (\n yes) + +partition filtering ambiguous vehicle { +if(Is object within intersection?) then (yes) +if(Is object deviating from ego lane?) then (yes) +#FF006C :return true(ambiguous); +stop +else (\n no) endif else (\n no) -if(object is in intersection ?) then (no) -#FF006C :return true; + +if(Is object merging to ego lane?) then (yes) +#FF006C :return true(ambiguous); stop -else (\n yes) -if(object pose is paralell to ego lane ?) then (no) +else (\n no) +endif + +if(Is object deviating from ego lane?) then (yes) +#FF006C :return true(ambiguous); +stop +else (\n no) +endif + +if(Is object parallel to ego lane?) then (yes) #FF006C :return true; stop -else (\n yes) -:return false; +else (\n no) +endif + +endif +} +endif +endif +endif +endif +#00FFB1 :return false; +stop +} + +@enduml + +``` + +```plantuml +@startuml +skinparam defaultTextAlignment center +skinparam noteTextAlignment left + +title Filter vehicle which is obviously not an avoidance target +start + +partition isNeverAvoidanceTarget() { +if(Is object within intersection?) then (yes) + +if(Is object parallel to ego lane?) then (yes) +#00FFB1 :return true; +stop +else (\n no) +endif + +if(Is object merging to ego lane?) then (yes) +#00FFB1 :return true; +stop +else (\n no) +endif + +else (\n no) +endif + +if(Is object merging to ego lane?) then (yes) +if(Is overhang distance larger than threshold?) then (yes) +#00FFB1 :return true; stop +else (\n no) +endif +else (\n no) endif + +if(Is object deviating from ego lane?) then (yes) +if(Is overhang distance larger than threshold?) then (yes) +#00FFB1 :return true; +stop +else (\n no) endif +else (\n no) endif + +if(Is object on ego lane?) then (yes) +if(Is object on edge lane?) then (no) +#00FFB1 :return true; +stop +else (\n no) endif +else (\n no) endif + +if(isCloseToStopFactor()) then (yes) +if(Is object on ego lane? AND Isn't object a parked vehile?) then (no) +#00FFB1 :return true; +stop +else (\n no) +endif +else (\n no) +endif + +#FF006C :return false; +stop } @enduml @@ -336,12 +620,48 @@ endif skinparam defaultTextAlignment center skinparam noteTextAlignment left -title filtering flow for non-vehicle type objects +title Filter vehicle which is obviously an avoidance target +start + +partition isObviousAvoidanceTarget() { +if(Is object within intersection?) then (yes) +else (\n no) +if(Is object parallel to ego lane? AND Is object a parked vehicle?) then (yes) +#FF006C :return true; +stop +else (\n no) +endif + +if(Is object parallel to ego lane? AND Isn't object on ego lane?) then (yes) +#FF006C :return true; +stop +else (\n no) +endif +endif + +#00FFB1 :return false; +stop +} + +@enduml +``` + +#### Conditions for non-vehicle objects + +- Pedestrian +- Bicycle + +```plantuml +@startuml +skinparam defaultTextAlignment center +skinparam noteTextAlignment left + +title Filtering flow for non-vehicle type objects start partition isSatisfiedWithNonVehicleCodition() { -if(object is nearer crosswalk than threshold ?) then (yes) -:return false; +if(isWithinCrosswalk()) then (yes) +#00FFB1 :return false; stop else (\n no) endif @@ -352,90 +672,320 @@ stop @enduml ``` -## Overview of algorithm for avoidance path generation +## When target object has gone + +User can select the ego behavior when the target object has gone. + +```yaml +cancel: + enable: true # [-] +``` + +If above parameter is `true`, this module reverts avoidance path when following conditions are met. + +- all target objects have gone. +- the ego vehicle hasn't initiated avoidance maneuver yet. + +![fig](./images/cancel/cancel.png) + +If the parameter is `false`, this module keeps running even after target object has gone. + +## Path generation ### How to prevent shift line chattering that is caused by perception noise -Since object recognition results contain noise related to position ,orientation and boundary size, if the raw object recognition results are used in path generation, the avoidance path will be directly affected by the noise. +Since object recognition result contains noise related to position, orientation and polygon shape, if the module uses the raw object recognition results in path generation, the output path will be directly affected by the noise. Therefore, in order to reduce the influence of the noise, this module generates polygon for each target objects, and the output path is generated based on that. + +![fig](./images/path_generation/envelope_polygon_rviz.png) + +The envelope polygon is a rectangle box, whose size depends on object's polygon and buffer parameter `envelope_buffer_margin`. Additionally, it is always parallel to reference path. When the module finds target object for the first time, it initializes the polygon. + +```yaml + car: + ... + envelope_buffer_margin: 0.5 # [m] FOR DEVELOPER +``` + +![fig](./images/path_generation/envelope_polygon.png) + +The module creates one-shot envelope polygon by using latest object pose and raw polygon in every planning cycle. On the other hand, the module envelope polygon information which is created in last planning cycle as well in order to update envelope polygon according to following logic. If the one-shot envelope polygon is not within previous envelope polygon, the module creates new envelope polygon. Otherwise, it keeps previous envelope polygon. By doing this process, the envelope polygon size and pose will converge even if perception output includes noise in object pose or shape. + +![fig](./images/path_generation/polygon_update.png) + +### Relationship between envelope polygon and avoidance path + +The avoidance path has two shift section, whose start or end point position depends on envelope polygon. The end point of avoidance shift section and start point of return shift section are fixed based on envelope polygon and the other side edges are dynamically changed based on ego speed, shift length, lateral jerk constraints, etc... + +The lateral positions of the two points are decided so that there can be enough space (=lateral margin) between ego body and the most overhang point of envelope polygon edge points. User can adjust lateral margin with following parameters. -Therefore, in order to reduce the influence of the noise, avoidance module generate a envelope polygon for the avoidance target that covers it, and the avoidance path should be generated based on that polygon. The envelope polygons are generated so that they are parallel to the reference path and the polygon size is larger than the avoidance target (define by `object_envelope_buffer`). The position and size of the polygon is not updated as long as the avoidance target exists within that polygon. +```yaml + car: + ... + lateral_margin: + soft_margin: 0.3 # [m] + hard_margin: 0.2 # [m] + hard_margin_for_parked_vehicle: 0.7 # [m] +``` + +The longitudinal positions depends on envelope polygon, ego vehicle specification and following parameters. The longitudinal distance between avoidance shift section end point and envelope polygon (=front longitudinal buffer) is sum of `front_overhang` defined in `vehicle_info.param.yaml` and `longitudinal_margin` if the parameter `consider_front_overhang` is `true`. If `consider_front_overhang` is `false`, only `longitudinal_margin` is considered. Similarly, the distance between return shift section start point and envelope polygon (=rear longitudinal buffer) is sum of `rear_overhang` and `longitudinal_margin`. ```yaml -# default value -object_envelope_buffer: 0.3 # [m] + + target_object: + car: + ... + longitudinal_margin: 0.0 # [m] + + ... + avoidance: + ... + longitudinal: + ... + consider_front_overhang: true # [-] + consider_rear_overhang: true # [-] ``` -![fig1](./images/envelope_polygon.svg) +![fig](./images/path_generation/margin.png) -![fig1](./images/shift_line_generation.svg) +### Shift length calculation -### Computing Shift Length and Shift Points +The lateral shift length is sum of `overhang_distance`, lateral margin, whose value is set in config file, and the half of ego vehicle width defined in `vehicle_info.param.yaml`. On the other hand, the module limits the shift length depending on the space which the module can use for avoidance maneuver and the parameters `soft_drivable_bound_margin` `hard_drivable_bound_margin`. Basically, the shift length is limited so that the ego doesn't get closer than `soft_drivable_bound_margin` to drivable boundary. But it allows to relax the threshold `soft_drivable_bound_margin` to `hard_drivable_bound_margin` when the road is narrow. -The lateral shift length is affected by 4 variables, namely `lateral_collision_safety_buffer`, `lateral_collision_margin`, `vehicle_width` and `overhang_distance`. The equation is as follows +![fig](./images/path_generation/lateral.png) + +Usable lane for avoidance module can be selected by config file. + +```yaml + ... + use_adjacent_lane: true + use_opposite_lane: true +``` -```C++ -avoid_margin = lateral_collision_margin + lateral_collision_safety_buffer + 0.5 * vehicle_width -max_allowable_lateral_distance = to_road_shoulder_distance - road_shoulder_safety_margin - 0.5 * vehicle_width -if(isOnRight(o)) +When user set parameter both `use_adjacent_lane` and `use_opposite_lane` to `true`, it is possible to use opposite lane. + +![fig](./images/path_generation/opposite_direction.png) + +When user only set parameter `use_adjacent_lane` to `true`, the module doesn't create path that overlaps opposite lane. + +![fig](./images/path_generation/same_direction.png) + +### Shift line generation + +As mentioned above, the end point of avoidance shift path and the start point of return shift path, which are FIXED points, are calculated from envelope polygon. As a next step, the module adjusts the other side points depending on shift length, current ego speed and lateral jerk constrain params defined in config file. + +Since the two points are always on centerline of ego lane, the module only calculates longitudinal distance between shift start and end point based on following function. This function is defined in path shifter library, so please see [this](../autoware_behavior_path_planner_common/docs/behavior_path_planner_path_generation_design.md) page as well. + +```c++ +double PathShifter::calcLongitudinalDistFromJerk( + const double lateral, const double jerk, const double velocity) { - shift_length = avoid_margin + overhang_distance + const double j = std::abs(jerk); + const double l = std::abs(lateral); + const double v = std::abs(velocity); + if (j < 1.0e-8) { + return 1.0e10; + } + return 4.0 * std::pow(0.5 * l / j, 1.0 / 3.0) * v; } -else +``` + +We call the line which connects shift start and end point `shift_line`, whom the avoidance path is generated from with spline completion. + +The start point of avoidance has another longitudinal constraint. In order to keep turning on the blinker for few seconds before starting avoidance maneuver, the avoidance start point must be further than the value (we call the distance `prepare_length`.) depending on ego speed from ego position. + +```yaml +longitudinal: + min_prepare_time: 1.0 # [s] + max_prepare_time: 2.0 # [s] + min_prepare_distance: 1.0 # [m] +``` + +The `prepare_length` is calculated as the product of ego speed and `max_prepare_time`. (When the ego speed is zero, `min_prepare_distance` is used.) + +![fig](./images/path_generation/shift_line.png) + +## Safety check + +This feature can be enable by setting following parameter to `true`. + +```yaml + safety_check: + ... + enable: true # [-] +``` + +This module pay attention not only avoidance target objects but also non-target objects that are near the avoidance path, and if avoidance path is unsafe due to surround objects, it reverts avoidance maneuver and yields lane to them. + +![fig](./images/safety_check/safety_check_flow.png) + +### Yield maneuver + +Additionally, this module basically inserts stop point in front of avoidance target during yielding maneuver in order to keep enough distance to avoid the target after it is safe situation. If the shift side lane is congested, the ego stops the point and waits. + +This feature can be enable by setting following parameter to `true`. + +```yaml +yield: + enable: true # [-] +``` + +![fig](./images/safety_check/stop.png) + +But if the lateral margin is larger than `hard_margin` (or `hard_margin_for_parked_vehicle`), this module doesn't insert stop point because the ego can pass side of the object safely without avoidance maneuver. + +![fig](./images/safety_check/not_stop.png) + +### Safety check target lane + +User can select safety check area by following params. Basically, we recommend following configuration to check only sift side lane. But if user want to confirm safety strictly, please set `check_current_lane` and/or `check_other_side_lane` to `true`. + +```yaml + safety_check: + ... + check_current_lane: false # [-] + check_shift_side_lane: true # [-] + check_other_side_lane: false # [-] +``` + +In avoidance module, the function `path_safety_checker::isCentroidWithinLanelet` is used for filtering objects by lane. + +```c++ +bool isCentroidWithinLanelet(const PredictedObject & object, const lanelet::ConstLanelet & lanelet) { - shift_length = avoid_margin - overhang_distance + const auto & object_pos = object.kinematics.initial_pose_with_covariance.pose.position; + lanelet::BasicPoint2d object_centroid(object_pos.x, object_pos.y); + return boost::geometry::within(object_centroid, lanelet.polygon2d().basicPolygon()); } ``` -The following figure illustrates these variables(This figure just shows the max value of lateral shift length). +!!! info + + If it set `check_current_lane` and/or `check_other_side_lane` to `true`, maybe the possibility of false positive occurring and unnecessary yield maneuver execution increases. + +### Safety check algorithm + +This module uses common safety check logic implemented in `path_safety_checker` library. See [this](../autoware_behavior_path_planner_common/docs/behavior_path_planner_safety_check.md) page. + +### Limitation + +#### Limitation-1 + +The current behavior when the module judges it's unsafe is so conservative because it is difficult to achieve aggressive (e.g. increase speed in order to increase the distance to behind vehicle.) for current planning architecture. + +#### Limitation-2 + +The yield maneuver is executed **ONLY** when the vehicle has **NOT** initiated avoidance maneuver yet. (This module checks objects on opposite lane but it's necessary to find very far objects to judge unsafe before avoidance maneuver.) If it detects vehicle which is closing to ego during avoidance maneuver, this module doesn't neither revert the path nor insert stop point. For now, there is no feature to deal with this situation in this module. Thus, new module is needed to adjust path to avoid moving objects, or operator should do override. + +!!! info + + This module has a threshold parameter `th_avoid_execution` for the shift length, and judge that the vehicle is initiating avoidance if the vehicle current shift exceeds the value. + +## Other features + +### Compensation for detection lost + +In order to prevent chattering of recognition results, once an obstacle is targeted, it is hold for a while even if it disappears. This is effective when recognition is unstable. However, since it will result in over-detection (increase a number of false-positive), it is necessary to adjust parameters according to the recognition accuracy (if `object_last_seen_threshold = 0.0`, the recognition result is 100% trusted). + +### Drivable area expansion + +This module supports drivable area expansion for following polygons defined in HDMap. + +- intersection area +- hatched road marking +- freespace area + +Please set the flags to `true` when user wants to make it possible to use those areas in avoidance maneuver. + +```yaml +# drivable area setting +use_adjacent_lane: true +use_opposite_lane: true +use_intersection_areas: true +use_hatched_road_markings: true +use_freespace_areas: true +``` + +| | | | +| --------------------- | ---------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| adjacent lane | ![fig](./images/advanced/avoidance_same_direction.png) | | +| opposite lane | ![fig](./images/advanced/avoidance_opposite_direction.png) | | +| intersection area | ![fig](./images/advanced/avoidance_intersection.png) | The intersection area is defined on Lanelet map. See [here](https://github.com/autowarefoundation/autoware_common/blob/main/tmp/lanelet2_extension/docs/lanelet2_format_extension.md) | +| hatched road markings | ![fig](./images/advanced/avoidance_zebra.png) | The hatched road marking is defined on Lanelet map. See [here](https://github.com/autowarefoundation/autoware_common/blob/main/tmp/lanelet2_extension/docs/lanelet2_format_extension.md#hatched-road-markings-area) | +| freespace area | ![fig](./images/advanced/avoidance_freespace.png) | The freespace area is defined on Lanelet map. (unstable) | -![shift_point_and_its_constraints](./images/avoidance_module-shift_point_and_its_constraints.drawio.png) +## Future extensions / Unimplemented parts -### Rationale of having safety buffer and safety margin +- **Planning on the intersection** + - If it is known that the ego vehicle is going to stop in the middle of avoidance execution (for example, at a red traffic light), sometimes the avoidance should not be executed until the vehicle is ready to move. This is because it is impossible to predict how the environment will change during the stop. This is especially important at intersections. -To compute the shift length, additional parameters that can be tune are `lateral_collision_safety_buffer` and `road_shoulder_safety_margin`. +![fig](./images/intersection_problem.drawio.svg) -- The `lateral_collision_safety_buffer` parameter is used to set a safety gap that will act as the final line of defense when computing avoidance path. - - The rationale behind having this parameter is that the parameter `lateral_collision_margin` might be changing according to the situation for various reasons. Therefore, `lateral_collision_safety_buffer` will act as the final line of defense in case of the usage of `lateral_collision_margin` fails. - - It is recommended to set the value to more than half of the ego vehicle's width. -- The `road_shoulder_safety_margin` will prevent the module from generating a path that might cause the vehicle to go too near the road shoulder or adjacent lane dividing line. +- **Safety Check** -![shift_length_parameters](./images/shift_length_parameters.drawio.svg) + - In the current implementation, it is only the jerk limit that permits the avoidance execution. It is needed to consider the collision with other vehicles when change the path shape. -### Generating path only within lanelet boundaries +- **Consideration of the speed of the avoidance target** -The shift length is set as a constant value before the feature is implemented. Setting the shift length like this will cause the module to generate an avoidance path regardless of actual environmental properties. For example, the path might exceed the actual road boundary or go towards a wall. Therefore, to address this limitation, in addition to [how to decide the target obstacle](#how-to-decide-the-target-obstacles), the module also takes into account the following additional element + - In the current implementation, only stopped vehicle is targeted as an avoidance target. It is needed to support the overtaking function for low-speed vehicles, such as a bicycle. (It is actually possible to overtake the low-speed objects by changing the parameter, but the logic is not supported and thus the safety cannot be guaranteed.) + - The overtaking (e.g., to overtake a vehicle running in front at 20 km/h at 40 km/h) may need to be handled outside the avoidance module. It should be discussed which module should handle it. -- The obstacles' current lane and position. -- The road shoulder with reference to the direction to avoid. +- **Cancel avoidance when target disappears** + + - In the current implementation, even if the avoidance target disappears, the avoidance path will remain. If there is no longer a need to avoid, it must be canceled. + +- **Improved performance of avoidance target selection** -These elements are used to compute the distance from the object to the road's shoulder (`to_road_shoulder_distance`). The parameters `use_adjacent_lane` and `use_opposite_lane` allows further configuration of the to `to_road_shoulder_distance`. The following image illustrates the configuration. + - Essentially, avoidance targets are judged based on whether they are static objects or not. For example, a vehicle waiting at a traffic light should not be avoided because we know that it will start moving in the future. However this decision cannot be made in the current Autoware due to the lack of the perception functions. Therefore, the current avoidance module limits the avoidance target to vehicles parked on the shoulder of the road, and executes avoidance only for vehicles that are stopped away from the center of the lane. However, this logic cannot avoid a vehicle that has broken down and is stopped in the center of the lane, which should be recognized as a static object by the perception module. There is room for improvement in the performance of this decision. -![obstacle_to_road_shoulder_distance](./images/obstacle_to_road_shoulder_distance.drawio.svg) +- **Resampling path** + - Now the rough resolution resampling is processed to the output path in order to reduce the computational cost for the later modules. This resolution is set to a uniformly large value (e.g. `5m`), but small resolution should be applied for complex paths. + +## Debug + +### Show `RCLCPP_DEBUG` on console + +All of debug messages are logged in following namespaces. + +- `planning.scenario_planning.lane_driving.behavior_planning.behavior_path_planner.static_obstacle_avoidance` or, +- `planning.scenario_planning.lane_driving.behavior_planning.behavior_path_planner.static_obstacle_avoidance.utils` + +User can see debug information by following command. + +```bash +ros2 service call /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/config_logger logging_demo/srv/ConfigLogger "{logger_name: 'planning.scenario_planning.lane_driving.behavior_planning.behavior_path_planner.static_obstacle_avoidance', level: DEBUG}" +``` -If one of the following conditions is `false`, then the shift point will not be generated. +### Visualize debug markers -- The distance to shoulder of road is enough +Use can enable to publish debug markers by following parameters. -```C++ -avoid_margin = lateral_collision_margin + lateral_collision_safety_buffer + 0.5 * vehicle_width -avoid_margin <= (to_road_shoulder_distance - 0.5 * vehicle_width - road_shoulder_safety_margin) +```yaml +debug: + enable_other_objects_marker: false + enable_other_objects_info: false + enable_detection_area_marker: false + enable_drivable_bound_marker: false + enable_safety_check_marker: false + enable_shift_line_marker: false + enable_lane_marker: false + enable_misc_marker: false ``` -- The obstacle intrudes into the current driving path. +![fig](./images/debug/debug_marker_rviz.png) - - when the object is on right of the path +### Echoing debug message to find out why the objects were ignored - ```C++ - -overhang_dist<(lateral_collision_margin + lateral_collision_safety_buffer + 0.5 * vehicle_width) - ``` +If for some reason, no shift point is generated for your object, you can check for the failure reason via `ros2 topic echo`. - - when the object is on left of the path +![avoidance_debug_message_array](./images/avoidance_debug_message_array.png) - ```C++ - overhang_dist<(lateral_collision_margin + lateral_collision_safety_buffer + 0.5 * vehicle_width) - ``` +To print the debug message, just run the following -## Details of algorithm for avoidance path generation +```bash +ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/avoidance_debug_message_array +``` + +## Appendix: Shift line generation pipeline ### Flow-chart of the process @@ -565,7 +1115,7 @@ To solve that, this module provides a parameter for the minimum avoidance speed, - If the ego vehicle speed is lower than "nominal" minimum speed, use the minimum speed in the calculation of the jerk. - If the ego vehicle speed is lower than "sharp" minimum speed and a nominal lateral jerk is not enough for avoidance (the case where the ego vehicle is stopped close to the obstacle), use the "sharp" minimum speed in the calculation of the jerk (it should be lower than "nominal" speed). -![fig1](./images/how_to_decide_path_shape_one_object.drawio.svg) +![fig](./images/how_to_decide_path_shape_one_object.drawio.svg) #### Multiple obstacle case (one direction) @@ -575,13 +1125,13 @@ Generate shift points for multiple obstacles. All of them are merged to generate For the details of the shift point filtering, see [filtering for shift points](#filtering-for-shift-points). -![fig1](./images/how_to_decide_path_shape_multi_object_one_direction.drawio.svg) +![fig](./images/how_to_decide_path_shape_multi_object_one_direction.drawio.svg) #### Multiple obstacle case (both direction) Generate shift points for multiple obstacles. All of them are merged to generate new shift points. If there are areas where the desired shifts conflict in different directions, the sum of the maximum shift amounts of these areas is used as the final shift amount. The rest of the process is the same as in the case of one direction. -![fig1](./images/how_to_decide_path_shape_multi_object_both_direction.drawio.svg) +![fig](./images/how_to_decide_path_shape_multi_object_both_direction.drawio.svg) #### Filtering for shift points @@ -592,221 +1142,8 @@ The shift points are modified by a filtering process in order to get the expecte - Similar gradient removal: Connect two shift points with a straight line, and remove the shift points in between if their shift amount is in the vicinity of the straight line. - Remove momentary returns: For shift points that reduce the avoidance width (for going back to the center line), if there is enough long distance in the longitudinal direction, remove them. -## Other features - -### Drivable area expansion - -This module has following parameters that sets which areas the path may extend into when generating an avoidance path. - -```yaml -# drivable area setting -use_adjacent_lane: true -use_opposite_lane: true -use_intersection_areas: false -use_hatched_road_markings: false -``` - -#### adjacent lane - -![fig1](./images/use_adjacent_lane.svg) - -#### opposite lane - -![fig1](./images/use_opposite_lane.svg) - -#### intersection areas - -The intersection area is defined on Lanelet map. See [here](https://github.com/autowarefoundation/autoware_common/blob/main/tmp/lanelet2_extension/docs/lanelet2_format_extension.md) - -![fig1](./images/use_intersection_areas.svg) - -#### hatched road markings - -The hatched road marking is defined on Lanelet map. See [here](https://github.com/autowarefoundation/autoware_common/blob/main/tmp/lanelet2_extension/docs/lanelet2_format_extension.md#hatched-road-markings-area) - -![fig1](./images/use_hatched_road_markings.svg) - -### Safety check - -The avoidance module has a safety check logic. The result of safe check is used for yield maneuver. It is enable by setting `enable` as `true`. - -```yaml -# safety check configuration -enable: true # [-] -check_current_lane: false # [-] -check_shift_side_lane: true # [-] -check_other_side_lane: false # [-] -check_unavoidable_object: false # [-] -check_other_object: true # [-] - -# collision check parameters -check_all_predicted_path: false # [-] -time_horizon: 10.0 # [s] -idling_time: 1.5 # [s] -safety_check_backward_distance: 50.0 # [m] -safety_check_accel_for_rss: 2.5 # [m/ss] -``` - -![fig1](./images/safety_check_flowchart.svg) - -`safety_check_backward_distance` is the parameter related to the safety check area. The module checks a collision risk for all vehicle that is within shift side lane and between object `object_check_forward_distance` ahead and `safety_check_backward_distance` behind. - -![fig1](./images/safety_check_step_1.svg) - -**NOTE**: Even if a part of an object polygon overlaps the detection area, if the center of gravity of the object does not exist on the lane, the vehicle is excluded from the safety check target. - ---- - -Judge the risk of collision based on ego future position and object prediction path. The module calculates Ego's future position in the time horizon (`safety_check_time_horizon`), and use object's prediction path as object future position. - -![fig1](./images/safety_check_step_2.svg) - -After calculating the future position of Ego and object, the module calculates the lateral/longitudinal deviation of Ego and the object. The module also calculates the lateral/longitudinal margin necessary to determine that it is safe to execute avoidance maneuver, and if both the lateral and longitudinal distances are less than the margins, it determines that there is a risk of a collision at that time. - -![fig1](./images/safety_check_margin.svg) - -The value of the longitudinal margin is calculated based on Responsibility-Sensitive Safety theory ([RSS](https://newsroom.intel.com/articles/rss-explained-five-rules-autonomous-vehicle-safety/#gs.ljzofv)). The `safety_check_idling_time` represents $T_{idle}$, and `safety_check_accel_for_rss` represents $a_{max}$. - -$$ -D_{lon} = V_{ego}T_{idle} + \frac{1}{2}a_{max}T_{idle}^2 + \frac{(V_{ego} + a_{max}T_{idle})^2}{2a_{max}} - \frac{V_{obj}^2}{2a_{max}} -$$ - -The lateral margin is changeable based on ego longitudinal velocity. If the vehicle is driving at a high speed, the lateral margin should be larger, and if the vehicle is driving at a low speed, the value of the lateral margin should be set to a smaller value. Thus, the lateral margin for each vehicle speed is set as a parameter, and the module determines the lateral margin from the current vehicle speed as shown in the following figure. - -![fig1](./images/dynamic_lateral_margin.svg) - -```yaml -target_velocity_matrix: - col_size: 5 - matrix: [2.78 5.56 ... 16.7 # target velocity [m/s] - 0.50 0.75 ... 1.50] # margin [m] -``` - ---- - -### Yield maneuver - -#### Overview - -If an avoidance path can be generated and it is determined that avoidance maneuver should not be executed due to surrounding traffic conditions, the module executes YIELD maneuver. In yield maneuver, the vehicle slows down to the target vehicle velocity (`yield_velocity`) and keep that speed until the module judge that avoidance path is safe. If the YIELD condition goes on and the vehicle approaches the avoidance target, it stops at the avoidable position and waits until the safety is confirmed. - -```yaml -# For yield maneuver -yield_velocity: 2.78 # [m/s] -``` - -![fig1](./images/yield_maneuver.svg) - -**NOTE**: In yield maneuver, the vehicle decelerates target velocity under constraints. - -```yaml -nominal_deceleration: -1.0 # [m/ss] -nominal_jerk: 0.5 # [m/sss] -``` - -If it satisfies following all of three conditions, the module inserts stop point in front of the avoidance target with an avoidable interval. - -- Can't pass through the side of target object without avoidance. -- There is enough lane width to avoid target object. -- In waiting approval or yield maneuver. - -The module determines that it is NOT passable without avoidance if the object overhang is less than the threshold. - -```yaml -lateral_passable_collision_margin: 0.5 # [-] -``` - -$$ -L_{overhang} < \frac{W}{2} + L_{margin} (not passable) -$$ - -The $W$ represents vehicle width, and $L_{margin}$ represents `lateral_passable_collision_margin`. - -#### Limitation - -##### Limitation1 - -The current behavior in unsafe condition is just slow down and it is so conservative. It is difficult to achieve aggressive behavior in the current architecture because of modularity. There are many modules in autoware that change the vehicle speed, and the avoidance module cannot know what speed planning they will output, so it is forced to choose a behavior that is as independent of other modules' processing as possible. - -##### Limitation2 - -The YIELD maneuver is executed **ONLY** when the vehicle has **NOT** initiated avoidance maneuver. The module has a threshold parameter (`avoidance_initiate_threshold`) for the amount of shifting and determines that the vehicle is initiating avoidance if the vehicle current shift exceeds the threshold. - -$$ -SHIFT_{current} > L_{threshold} -$$ - -![fig1](./images/yield_limitation.svg) - -![fig1](./images/yield_maneuver_flowchart.svg) - ---- - -### Avoidance cancelling maneuver - -If `enable_cancel_maneuver` parameter is true, Avoidance Module takes different actions according to the situations as follows: - -- If vehicle stops: If there is any object in the path of the vehicle, the avoidance path is generated. If this object goes away while the vehicle is stopping, the avoidance path will cancelled. -- If vehicle is in motion, but avoidance maneuver doesn't started: If there is any object in the path of the vehicle, the avoidance path is generated. If this object goes away while the vehicle is not started avoidance maneuver, the avoidance path will cancelled. -- If vehicle is in motion, avoidance maneuver started: If there is any object in the path of the vehicle, the avoidance path is generated,but if this object goes away while the vehicle is started avoidance maneuver, the avoidance path will not cancelled. - -If `enable_cancel_maneuver` parameter is false, Avoidance Module doesn't revert generated avoidance path even if path objects are gone. - -## How to keep the consistency of the optimize-base path generation logic - -WIP - -## Parameters +## Appendix: All parameters The avoidance specific parameter configuration file can be located at `src/autoware/launcher/planning_launch/config/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/static_obstacle_avoidance.param.yaml`. {{ json_to_markdown("planning/autoware_behavior_path_static_obstacle_avoidance_module/schema/static_obstacle_avoidance.schema.json") }} - -## Future extensions / Unimplemented parts - -- **Planning on the intersection** - - If it is known that the ego vehicle is going to stop in the middle of avoidance execution (for example, at a red traffic light), sometimes the avoidance should not be executed until the vehicle is ready to move. This is because it is impossible to predict how the environment will change during the stop. This is especially important at intersections. - -![fig1](./images/intersection_problem.drawio.svg) - -- **Safety Check** - - - In the current implementation, it is only the jerk limit that permits the avoidance execution. It is needed to consider the collision with other vehicles when change the path shape. - -- **Consideration of the speed of the avoidance target** - - - In the current implementation, only stopped vehicle is targeted as an avoidance target. It is needed to support the overtaking function for low-speed vehicles, such as a bicycle. (It is actually possible to overtake the low-speed objects by changing the parameter, but the logic is not supported and thus the safety cannot be guaranteed.) - - The overtaking (e.g., to overtake a vehicle running in front at 20 km/h at 40 km/h) may need to be handled outside the avoidance module. It should be discussed which module should handle it. - -- **Cancel avoidance when target disappears** - - - In the current implementation, even if the avoidance target disappears, the avoidance path will remain. If there is no longer a need to avoid, it must be canceled. - -- **Improved performance of avoidance target selection** - - - Essentially, avoidance targets are judged based on whether they are static objects or not. For example, a vehicle waiting at a traffic light should not be avoided because we know that it will start moving in the future. However this decision cannot be made in the current Autoware due to the lack of the perception functions. Therefore, the current avoidance module limits the avoidance target to vehicles parked on the shoulder of the road, and executes avoidance only for vehicles that are stopped away from the center of the lane. However, this logic cannot avoid a vehicle that has broken down and is stopped in the center of the lane, which should be recognized as a static object by the perception module. There is room for improvement in the performance of this decision. - -- **Resampling path** - - Now the rough resolution resampling is processed to the output path in order to reduce the computational cost for the later modules. This resolution is set to a uniformly large value (e.g. `5m`), but small resolution should be applied for complex paths. - -## How to debug - -### Publishing Visualization Marker - -Developers can see what is going on in each process by visualizing all the avoidance planning process outputs. The example includes target vehicles, shift points for each object, shift points after each filtering process, etc. - -![fig1](./images/avoidance-debug-marker.png) - -To enable the debug marker, execute `ros2 param set /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner avoidance.publish_debug_marker true` (no restart is needed) or simply set the `publish_debug_marker` to `true` in the `static_obstacle_avoidance.param.yaml` for permanent effect (restart is needed). Then add the marker `/planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/avoidance` in `rviz2`. - -### Echoing debug message to find out why the objects were ignored - -If for some reason, no shift point is generated for your object, you can check for the failure reason via `ros2 topic echo`. - -![avoidance_debug_message_array](./images/avoidance_debug_message_array.png) - -To print the debug message, just run the following - -```bash -ros2 topic echo /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/avoidance_debug_message_array -``` diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/advanced/avoidance_freespace.png b/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/advanced/avoidance_freespace.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f0cdf72f495243a353be4b2191152f947ce0dc GIT binary patch literal 55809 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 S=&u*hpOmMM6p%$M(|jKRMsP#Mh1tSbfh4= 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

Eo5l*p66E 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 z

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%0A~0?qmQEv*j*DH=0S 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�a%;s}FinsYKev`CCw)f-rsm{)49$mC;U`{? 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%0AEWw6LkT#d5XY#a{@fu5 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

P6O{70 z!GZ-kU$<)Xvm8#7aqVZKOxTs>`>av8s4u+vGxt6E=r zUbHH>%n)h^Q5=Qb~3A?{B^%ED95;=cr48*hWW&RG+u2EXfShV_s(nkJm_RI65@si27Clu4$uq>8R zzrgdFSymTv&M*-&!*QN$QQ3k>jZnw9y13(ZKlTdCABFfvexr)S2*jW? zg9-a00>??}3`A>sf9_t>7+AejI+bA5EL2sj2(YRtV4RE7G{;f?43f-M28ze-??~`j zm|}hB4^M&el`hU{i>axA!Fl%h{<2@@qob2)>v^h?*;bWaoZDjKU;31dFSUkA!)U9qk#6ZAUn!!Lf-Q zyY-n(xOz=_kbqu!JBZ<{KjcsYPyK;?3}55(IEq%SySXd#NWIxMC2^K}i2EczW?0ne z!$6o&KQkx+X}c?!H>{rX=oU%i9A`>MVk>6md)Jjgme5A07Ve(YgO{2idrXcA3x%odVolo+@|VX0G5P*8ICTxT_ZutQKem$p1# zzkCjsH03o8;tjjenE7azqIxiAu=1O3W6RM9Dr7044$6Apk$xhvCF@IPXrR$bkmIDT zDiIb1CB2p)GdkEvopxiz<#}B3qVtG(Yd_l?%jp>^*DE_{?mLzL*R|qWDtJ~E0u4XD%0Ar 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


Fe#evl`w;$i#*Lk~H zzAG{=IPN|sxPEs`@i2BJvY$GBpE~TAekDqghIM77 z2gR`b;ZOhFy}P*8s$||tDiDms`VWmH65ZXiSZ#`%3C0wL(7u8Jj*C8l%R{Aq97Q|C zIQiKatJd%IbPV2HqSoI;(S~h)9utF*0|qcWzY5BKc4?`{`+x~)`ORf0#(I`dOeW_kN!y?Wh|2GiXpyC;Rd)*sa-EItpA_Q-mOa(ed|XFt zab#IfhCLd8kRylk2+=b(oui>AXyK1N+sVKeHWn9-sc@0Jg#P%SvQ!ZXLbXzf-+VKU zM*L8AYl9`*WQET{m{KO{dNB3+qK#8z{fHywGOBZ#g^quEYkSnd%{ewqyewDFVjND$ zfNGI48)*t)V-jX-y0PSJ%Bz&Mj4PCpQK2|~(r?AyaQ9@^Mfe0q9d66nO^G3JHSn=h9R`o&ge*h)$|jvXt9yp;PX zA+0Bl4n+(HD{VapR8vs_0>%kpMsWSGZ7;s2Uek^6Ix0KeqxbWPFJJ_bG+^fvMX|qK z=Aksa$i&AECEzrxs(~ z&voGmad8IIdGbFVD^9Tjtu6P3s8f^q5R*fO)&2pYque8%Y>>V$DZf*MY?Z}f*hmsnxxx89K*RZ{6q!4JEw+w?n0+)Y%u%4V za8KzE@&ShJRZzGS*mOgHR&;hng%Xrp9GTKEk!=s{A1Kzdp?OS$>2 zL3j5NAU zrnmS!w(-e@&ZM?MrACmj?d zj)TRDeYHS()1&2B2^MEW1p4k=5x85G+Oa#-tpqkeX1iH+<-V z#Dm@+;5sH_^rn8E**+#H??%`@?;d7`NFJZbe7$CM-5R3)Cz@Q0i4oWV8h!w4OhN+A zxZ~7FAGC@b4B8BrZqbIAj>3#BC+V^j1-PJ)#Wfk8=&2?%V6KARpD=S>5iW}g=s}k3L*BDj*`}bet<=P*2cW3@6*d~RGfWZf43i^E!+k^=d?E6P4sLa*1hWo8`5WT6W>G?{1Cx6 znHFUDtK2BDXKt{6liT-BZ@Vt}!G7RZ8%1NfmO}jTj9G+!cGBSawUhuq2N)~8Ap1x3 zJ}}bzP`o>}Y?CRT`Hg!NvyG$twf=nl($2^mR;8s!cpWzvcCXtW@WoSCWCdcg!Rt2t zW_t5j_lvvmnPov=3(+>`E<3xy;E=p|>zz`ncQ;wX5kFaUxU|>JH6Eek_OzSjeS&6l zuAmF}iEhN(6s^f*?(5}qEQdiKjwaLso%jo`VWiEY5me2mm$g5R3g^T0LvMpm7tPAe z6IF?3ieJ^6e1oA=75gDQRu`HVocPzPe{?*asS{rh5qC}&ky_u1cDC^5Z_xf-Blxj$ zBa1UL{$XKgFzu4Ne-mNU%XETcVqzNZK;p=kn7yeqt3kTv)%QIInq7L5Xw=>+2;LC; zL5g5c_{qNM%5_v6k|AbhJ3Pi5bfZ9Y=Qx{#BAn@`*c4y`8$`|-|0e+=`#UvwjY2+I zCXufUi?_fg5RzdQQ;u^pK+0kC&pNm900@|EpPzmYj5)$YRg_$wY<$+{$UQR-!uP#B zn1ln4AK~ZsRPegZF04&XhuOTgkZ7&yyoyO3C$G@2&p7P|z}&u*s^q!#bYA#{Sx-ob90o41PfI{IO%SM;4#s>$o1De1(M-l>Na|-g$<$ElbY9KwF_Wj*{bl2 zZACcGjpUVJH@B^?HES)fuT4kTD_45jXw43&V~6WlM9k!UJ)bDV=kRPdO9vmRNVG3* zYo9rx5vBr`OS}TLEm-GkK16-*<0CBz#=CPpc{fW@-cP=Eo;5t2g-*5?kb`-CZSn`k z8}wcSPkQ+2y7}bGlf5~S1K&tDtJ(T@3O08nTZN+^B>{L1j{|;oy?6bFN9g+-^Q_?B z6K3|l67+q8wHOlR=xP7jSJAhvieAL0V=ag{ifc%$Me9A?(>6UhB#_92zk9K!9AH#+ zcIE}H+u@Ms2Lph(1hXZx8`c&Gobw`wEPH4k_FrUp@|+fX%!%t*KIe)Dz8-w^3oY@F z;`qpiZ|CJgqH#3e6O>6cuqQnEoHtWEA9<6CgdmgX2vK?B#D7>WOEkrqUROI@mW)?* z?rq{xMBWuoQ);l`%NE`1&C6R@|K+vdf6Nz(A2Re=N$EQ}3ExLBz245}Ra^psemt<0 zj1oE*SvgJUKr$dEvTE0T%oppKyu`@8dLIt^CFYFA(w51;5la%jiK!1wOD?z~1vSL8 zyA$zE$y-ZQe~=-pL5QHdpW)cjK1b0Nil)<^r6$+uyPA*Q{VsJPk;=LKMuR_XH&2W2 zx?NUH-^c4TQeZT_f$BR^2z$e4_hK zEaJ36F7ViY2z}bUQf@kAOr1OA@$$Tpal7{=Qk&+g?4Al;@9r9I{yONNPIxhb zqFLd@^dQ;uyLQ}2b$^@l_1EiGt1u!pCQRLEx0EjPw?a>Nsf`EL zI<4ywQ!MF0-jCproISSwQY1B_IjmLAx=m9rfqn5`CN}KnQsyA+LulfvhjoTws;j%7&^cY#@rF`RRR9Y4$Wm(Tm(4TkWR+w|*Kh z_41`Qy$4_D42# zTit*{yiz-rne*j3zV5blKA4-~%e5**C!u4|N%UcJ5b#>jfnWP~qVg|LmQf||>qf^9 z%{DK=z6i4B*r-^L_(zX-O-XDnoRmQb0ht6WEmox0DFk>X9M;uREl1 zb0VF)F6G#9rz5`~FtMW{qj;~=?&iV3*R8TwnX`$0+(r@nu~QeKApGaGs9z=aX&JxW z9!2*YiS9lLEpObcb)#OvYCVc1GIRL{TRVynS)8&@Ys?tznt4pHyF9^F^hO2nbwLiW zTf0h>Ew+_=$!`sa+`cET+wllKOCKEJmYC^s=1Xo^>?&# z;*pZoi8lCxhdSbL@aw|&^LA~&u+=3aez0%<-smJLdV#I^(xn7qGOukwSYO|%1rKi) zV-8IJSZZLQUv@XdG*fFc{Uae^bsIVQfOPdq&rhpw-(Zt(`gyO;Ixi6>BgZ5mfut}* zAEa@JQH^0^ePA7?CpX zqTXVYLzdlJ>}iw67X&aGXZRPXs+pKl}m;`_=;;>E2(7v8rtg|euhk= zHjPpHvx@u^pwU^%M5$Kfv|a0?ypG?!t;wukJq%GCEcB(rt3svxr_%oReuapbSFvF&p*ZwV#nJL6I zoPDVV6Jw=b@a5J4PqZx$^H#Qil-3{Q`ZsVWjEI}VZsP+?2VmSHi~}}+sqY5_T;=&{ z^g!>;Q!R=i?O;8Y6(-2*w=BM(_^eF2TCqBjh_CdIklLL`BmEM7 zHeYzF!gZVReMl(|yU9nV(nG3`(Gu`23v#?g8KsUY$>Ail@-j6qasrGo4UrM|A!C-3 ze6|m)g{0OZ;rMT&sustV{{AM9QgZ;#pnjkg29$!(qyhMnl=?{q1 zV^|2SWrr!%$BiG?O50CS)H*_99E`tOb#yuRf2t<{>(MioBl}4>HN`+*@Vs1aBND+z zpcLlD5i^C<*l*WMprRNkdPT0MfPnhE7vAQSHxc$uua?7e`lB;x6ThHG%?GKu6&7F6RMP;zUB!MP*hg z$hLup-z>eZ`!WqwS!ec5JJ@?3qlh9{7YE)K&mz&(cJhg)svYA^Ae+@-K8E>Qd#73p zvctqVFxD26mE~bLdLZt>^4n!J}T zbbD*fJMtvS=r#?iFrlL)y{Rx0n&I;{8Q+Ud--q@V^T8l^W}nkyZnxtwZ%I~$<&o=) z`tY(fY(Ylujd8x5I}41ZxX{y4G$K`f&O4MDLCG}m)T3X&6TvUn34B<=b`m~-U3ooc zwo|&2G*o~|0e9wT=!K-DyTMU-&-+iUy`MB(q}tJYA%EdFur+>T{^gbL#cP*l<#I;c z>(8?(5BpgdoR5!idQ&C#Pa>F!@3#7_WU*y!1mmr>*vECeGAUDI2ZB4;E1s_mCvjC1 zK)pg&2n4YJT|kidj6q0ZECtqTXDx#D1NvnsvvsF*RwawjP$~<0G(^TFC-s1rD}}EW z^~dvX%H*~npZiLQ?EMG#_!7JKSXART+gDT+BgT?Bd|pwZc`YrZK;&8TFNylhsNV#2 z)%s;-h@Jd6HWyS#(R@QKm-g!EP zJvj|N(Fm+|;$Vu`YlL)?SqvhBec+ZOP6PCF0XH9Dopx(#2b!foo(0A`Gk;JFB#~;5 z=3!%thLZ?_b`=py(kCAvdW0S!_+U55ul5j0F=?+v^N)(O7wb1>Ec3YQu|ZcFI)Q@>>Bo~uBzG9kr+a()BPmk zz5&P7l1N-vsASvKpCH!h2CndWpTb05a-fs-*&M3u54`?mgqLCAEc|ADB>3;`0CUujU?go zY{dGk`_0$6NZm#B4%}PN>ZLi;mL*M-xwhV+NuNd&xgerY(x?JWVSkW#*U$fhu&?ln zs{8vz>F(|p5QY+vlm_V%k&==cN?(uov-+R}4*S+ih z1F+_tefHkpPnxPaxwo_Nkl*4cTEd?K@n(3O7}eBi@pNR*H)r3VX#|Bq97j{tKV4pQ zq9|WT&LO^Om)fF3P8c9=OZJNIgj=1R6T-fgXidutr3$wYi1kjkV#aa179ch-B7JI= zM5F(dzxM_&8Z{7Z^4s?rpcnI=ouhk3@QG;&3S|I-W08PTiPwY`o4@$R9%ozg3)qHf ztDDU3_XZrDSN4A&>JG3BW{FZgU9D>VC^3q$d)<_0yJA8HIncg8Sv8g0WD5Ky_74{M zT76Ja;kcp7YQLVUEYVo73`}DBKnNfz{y*I1|2zVuG~o9?IQ2Xa_74yLoAlSKbz2s> zWD?I6cdALhtK_|{*SAlVQMa!+S~pqDd4q*9Jcmx-NlE1UOMcXqW;1b%ow3Y} zM!zP-WBEK?z&p%>V&{oihH#t^WHl2XbzSo^%q5t(ijHKH-m4XD7?ZtXH z%r&Va=}K*4z$Dx_-HKHUY=*%yt?}{)pOedc_(fILzb^|p9mP(?U+xp%PwPkP+jQoY zmdCa&F*SBc&_8&VMihLxY6{tIpH8R5(9*M2$pP|W}KpX(^+MWi`U0BiU;WN(zFDb2rEya2PKBfQDjA50S@h|iSM0QBA5i-LQehT6tYh+{ z?RpIIfDXD2Jh#4Qq;cW|T-s`8XFw(6Q6z|{e#U;4s!&GSCWhcD5B!ALh#_xF=VhJs zx3miTEP9?bJnW~t*;Vl^)>v{0fT5#7wwpY}69NSIQv1KVqC6$} zKK@1+%#n~74GLpcFA&KgO_$<=SnQY5Hi!y#7tzUs5Epd^>m{9XRh$FASKC{|;{zQ~B zzR`E-*G!j{QXu$$@n9;0#b#z=f=3xqk=${qilYo~eGlfD@8txO^Heefvd6KNX7@wr zWV$6~Orl9BQ2oMVzycVh{=aL6z6dLBR}nTTkm&IF4>%Xn1?GaE9u=>mxC$KFqkpU| za3P$8D|!GQ59+?#AoJ47g<;0_ZuI4w$@rp2nPp=_^umo=r-Uu|N&kMWarjV^f`~#= zaBri(@}E?94TNzQ>x?0d@Sp?LES166zpuk={7yZ%Ng5k?L>UlpIH1@Bi z&^;HKU)oNsY}TQxO=FnK7Gt==PD->Dv0 z)#ZX`v3Nbrl3!n>jyOFIl&^(9+$(@=dA8RPolcc{R*UN$+J1i;;Hh0lSad#)xCU>1 zW8hwslw`1LPJ_9La*S#k2NihOvyn_+WTir=8kJVhS->qQyX_lK!tvFN zcpL7;4gA%i-pl3&gmTdP2vvF9Hzy!+nsM$ zEc5TFmX__VQ|*)>@dxnZ;{R+v!K%tOAz%mlb*XdF_)Km)2Wi;euB9tXYbUf(v0Yvp zOTj*^tTxr1AZRB%ywW0Qd~7EDJX-;cUPerK zOO|}UvW6V%ypx%z{Q1rq5emgNp2>i63 zNE|m-g=Ba+k2%N8sf8h-lb~e~47(hbv$kzzv&>iNIh<{}qj~YMMv?8yNkDh`af-A2 zdiI6o`X%e3v_~mt5$Mn_CtHMCKE^(}_2CV$8I)LCS^W;hXH*9Q#DFQ4o|Tn#|0TW@ znudbQH_j}OrzA-G*B8@zW6vGoxIs)*TCa*^7jtge)cZNh9Oehl+4YU}_4RN5ObbZe zje)O)JAK&46)v#!1C^na^uXKDp|`~Io(C9ogk?MGtQ25g6*VT2p!AX1Cw^E2siD`r+MKZWL7P(0menEIM1$s1(d*ij*O)-gGKySObvM zd95d_NW%gN?6l%uurrLrbg`_w8tU<9&|BJh(W**c z82zX<`APVGpy09qgAmGs90eA)J1kc@O3}H|NUcjz(U+$#c5hKIEcPyZYfd>4lt~op z$!esx4ngIGH8-{x@9Zw9)Yp^x^uT^^P(Y9axCd~va-lPH$viRT39#fTrF!W{^Yut z7E26trcdTGA$5L&m=aS=Sc^1pDc#rO-HAQ_UE>j8?2_o`{ORI4O?TjYrD{xEhv92% z5XQQgAiVCV_9gpS{&=(z5LPK>RQn*ib=r5_go2;A!pmETg>8FsXjZ>5Z|l%godX8M zp_C^r6{%-FWUV6~|E??)um&drki09piTVk?vzI#i;<*3OL%#QVV zj7tXFH+^}*w6!0j|BiqEI*$jWb2j+xcM9}HCPH`S>=V?Eag zhud@;BP$y_6CV&=F&#JhQr2jXy!}C~E1^G!=1p_*hkI@UY>snKbGmH@-kI4-zK(AG zqq^v+=R;J8RiYPy`{YE<)%MXB}X_dS0|6&*>OzI*7_1iAkSjEP3TJPYGXcMn2zJ!x75ng z)atc>G@-RWlqb8}w(2QMB%at5VS9&-G(AbL5Ywkk>_sySF7}8RW>LJZcCiecro`M2 z4?q=_#mw`EzevC4d?BPs^LlYA2>Y;M?h5k|DUG2AN?vdU3zzWB-)=_68`T3vZd zyy&uKk*aecUQ%Bxbq9;-85&s*!KbG9i?_htEU6ol?Ynf1C+VE)vxU~1GkBca)%UZ} zKXyoy(Hx*s(zG8hjr?vEl+Rv%-a%W^ZM>%@eYYYJ!YSfC^g;-6MEi-lhufEq-bs;V z3jmL$J8>)yW(6nOv2yH)>(BSbisD~aWvT9n3TK~Vx=4FmE%{BD#Mlyyq45`vfj1c zFdF@Z((~A6G@f_pLKWNbD@#JTKEpbW`yRR%Tl5SOg^X5lihn#0_g&ZyB-nOzIWRQ< z$Ap1y$kkaQ&F&iilCth6 z5-o*3onQ7%r0V!&xZd6{=m~Z&@FC`g^--*udbjoKGeILS?CzIjff405gpaee$nPXP zskyRUgv$=^@IT?$$MLgb=PU+Qk9Z;taW$gqu)0Z~rH>rz9G1r-=ZbI5cTYu}j6c4-;A!bTi$n;NUqc4j2>PKou3-bXmN) z#h83W9e&SAySB+{EPttoyIP#!6SS2fkUQ1#`pr9XoTh6Ms^*15E5j#Zqx3K6W#V?C zUm>S-(L<;dt@o62G#<~E_nqhqhQ%oikCC??EZB`42*P+iM3Ay%hTASvhcD2;C{gQ| z!l!5-LWi3yo?9(?D-OU;7Wzm{9IZ)OvOFofjUfbbZU(`Ha&_`vD)uiWQirCx4+7+B)a;AyuN}cL;FJiW3V@%i6s^;&I9vb?|mcVuoMl zm5RGSD05?-McB6~OU8Mq$4-WWPaAp5pY2!Fqt#7@DKiOb7!VkITUZ-|3MAFSz)dq6 zS6nx#oOZl$he~{zmOd0aK9JoT7Fyx0aHAtqh-E0`6O`Y4S#rG=wzz1Jci(AtbGj+j zQf)I;(y&pfKvDVyX)_EaQ1>#dEaDFzaabAtP<5nQmuLUt~agsh^N*lu?5=Mk+Al1*P;{9%7uzK!2a&k?MTNJxuq9nW`jwms> z&5!ZnD^1wEjtKGH(*59w?0^u{kA=#)#%%9I^@1cWsG^kd$N4-^wBD{;i$V^hnsuL06F;$5DDtM4oLmo8A3NO;zrR05I=4YV z(62ZwpKEY7JP*>FJ&Ro{qM8)mt=FXb-0mdu_(XTk_C8!5*Bc8{qNJx1!dJ2H;Feo* zA|!g<`IBtyi{~6ljW;E(Hahr=^)33;irt$}JLMX$zkwS05pjeZx0QG!a66B+qUCbH z2my`jO|S1()3-@-zx+|OBEHHaw}Q#zp6`>hNfX*2&@s|dd!EaTG*1E~-~L;GuBia@ z^MFEz)H2(H1-Pd=9@Ne-{5KKE2oQk;jS>wz?-y}yrE7u40k%IbgmGQGhT<<5j0|iX ze4m1pwMgDPd&0ai>fB)8H8|f0Ggdy3P&rL{&mfLxPGgb%bKpyfM0%%b$?S|;8bjSF zqxuD-@&&=B>%;9uzfAE-VCI`sZ z-Nv-~7?H%@c}mW(XeZpieyKfe$*Uj!Eg#BdelPc>BjK%#oyoWmRSex}@}b={lFMZl zi=A>ZGrVeYY6|%hT*Z+o?Jg~=Pe^_Sj?m7=qRvQhHF+!E-u>-lB3T&Fd6-Chk}zil zW)_dq*GyE})88KM#K+8yvjjYnP}0M11+81?BBHBO>rnEQz+4H@fJo&w&$z8zS7z_c zd85ot@N6D`IG6ym907|9qOA;ik|zy6h91e*f$R*A@?uJ(%dPt zJ!}o4mOyyvwvPeKCpa8HoJW#RP>@&!IhME-t_uAsp+(0O5TV!Xzjduq{|~eIM34L zIik^u)9beR3;;kzwO3zB?&F+B|Ct7EP|75%2`wUT2F8h>$YpNDK34$5+ zcS*fq7kqO1IZR`aJ_3Ik!XbcopY$D2n$Y?H-AY62T=*^-`LGMKaCNP^Ls#k#&<=Um z<^`ww$&7bDU@#hca|+?p9Ziu@4Uz?@4XHD<5-CUdFbcm6QY`t<=np-VbPCFZ<@$#$nA32=faA68Q#*vua&?@(etoN& zrj4UIIRC}PkkvAkRmo3z2%#?)9b?n$bPIkdCTp-K;S7xr$|2~M(f)2h`FvRn)A-4Z zKX`@N(LrigV%wAJ6Gv3ANA2tdXlq)Nvu- z(3=yJiR13@iR1m1PixT&YF*C+X(KaAvU_G9Hnv|i=?MVAx%gUg<8*;VCjV2k!1K@g zuy%oc-1UlcHQ{MbBD`_|eMI6MjQ>eUN#dd`E${io0zcvL0#nlA{i%(mPKK&^Ip!_7 z4Cf9DF9t?=OV;k!)^_bQfr3V?H=i|ZfI>2$Y}M_S^Iam~MPw(M{Z&$)@75C#{N!fsUL1$>~c*7FS{TOWYH ziF27vg@0F#H|q=kmp)(^$_b|gzVN*Ke8lVOro#{;k5})xuc*P|P$@H)VS}1MWPxe$ zG2J+3YNTi)wlJm^YL;KMy$BYJWw3KXmo}o>Ux6Lb3cSb_3jT1#wfrbbh{$3X5GSpV zXeAYLx)jTn@aBu)IXv4h#K?!*SnyIV4cz|rI*)J2q zlVGdor!NkfIzee^X@6s9P;jWw5Xb;7I3EZKK#P-_c^+yVAz=dD&^C|bcbN?1ycqtH zi%Tf+uBbN#eY2{sRdY`1(xty*Pl}jb93d>5iK=D@ETlLatWsq(dQ&+SD9(*QvFwJUn)-H$#< z2wQKYlCa=L0cFYUrj?1(`70wqiXLehyxsIwMHI?YI02XJF9D~)>a{GE-p8KW4kXtk z`2tm!IVe!=n;~FF@O1`z-kv?%;Z`_Ou|X4u_*;qYyp5�sXvS`uXx^y^p323VufM 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
XW!OwHO7 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
Q7%u{7ds-E_4>ee0 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 z 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%0DBeiIcH-OT{fo|7tsH%8l^5atkuB2z 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

|})IHlr5|~U? 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 z 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

1s1 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
  • gV$Nk z$%E62y8IDaTavzC>Y;)UPkn}r!^$t0*j=f+(+R&jv zqfOH}1ERnCuDu`!`z2^!!lvxDD|(FGo+8i$T|Sezm0K8N;{%2;Z<&aCKBDJ0)P zh9FpA3w5*0{7o0l2%^^_*g$DMvLXfi_cIpIOnW@v>x?^$!!NR3adM~5I=uS(3%*6} zLD~-rVC0h0L_fK^Z3kQV^ARiFHgHcgFyzD;WfY=eDYll2v+33q8tcT>uxR?Cx!cYi z*SMD0qsRx$4qEz{(5GqflG14p*_+-k$3TAls%852pE+_yp95Ew*F8u?bLYAGQO=x+ zMO>Pnxn6mh)F=HQhVI+-ZlGtb-@&BIuU;wJ>|A=H^){P#QVJDlm+(n!eJLHwV@qY; z3Vovk4{k7rmxuvPRN7@)FP7P1-Oy1b3|7>#aBE?oF%}*E>EPE?+(7$~UllsgO4i5{EVy;X&8lt^T>ee-ucoj$NC`#HqxNUxlK zyf7ucZjOlHx79MTTiC#QLggFh4Ro&`2oV%UQ|-Dp4a?F(WJ>FH&Di1*o_>goT0wrr z60bdU!N3VSjWKC2{=Co6IPY6{Dd;i0qq_#KA+o_`0mz2IpEeJi7i7Ph>-ovwG&rL$ zmjfysW4G-=z}ALR@Quzd(E}p!@Wk=tx?bn;M%^V59!&Us-`*(XBv#=quie6&6X=??XtV zcg$cuLdYNcy{AFu-fG}jEWCFm;fFbY>wJgv!q%(#)<3?o@R?@>i^$^<>tW?l`<({r zw;RA5Z9mJs8of6QbiuAP{5KUR^PAvcly&SL@vvmoLz|g)=AouebNo#EW`uwjeTJ{=GV=-m^*WtT&b{ofC_2 z1imBv{qE|(jc*6RExZ}_8Rt_EFfw=cfkDaup+0QY_$NiT4pq6&4Z{Xj!3a)*9u522 zsFA#%2f)GK@O`)#^d8)OvKl_arW`NNzCq4II@9X((RTh*cdja^sDbFh27XlO*EEtI2d^!T9{ z_KEfj_m?%BlHY(Jb%7ItpC#Hn>215*PU(w)UTTl)DD>LmAKSP|@WuOEC;D-Z3W*^! zulR=k0Jl>t*^PlfI{o=Pac_fjd8JFAWK0WWUYR~G7WSXtl!A(%OZTqm1x`p_6E!;^ z!7auaTL<;j7Hj*3u=X~tGU}C%6EG3+E6)2Q;(GW`cFHb!w0Q1S-Jl*&M2a$ zsm^N*0qw=_o-K|yobj@=UPPy1y_hJ;s%U^n{subw**2FE@b}IC?&~M<6-Sri^bUKw z)3)a*7?p2dJ6H`rlaVZ(BW_9Auo647bn&WFd|iz(2X9)%8{TQ>I4Rn_ef6!ZmyLU1 zgEz-e`c#%Eb&$HqDL28d_^g>qwYws!h(T!P!+nuKt-pc+er`DH-3%NbV8=xF(OkRI zy}+H3+sD+6a~U&=E5Go3T1EJ@A-UKuT*r>tE)D%&7++e!W@E$8CwjWI{h_4Z@X-){E{ zHg`EmC?$=?aU_%gp+E?hV=Dmg3*`o0K7o{H<9d@HXhM90(`7BRqN@8q_G;48^$E^j z&GJ-n_!It_k7IXP)fq3R_gt09gOwE`3B+o*+|RGT5P=o%Cq@a(RaU7qvv<)gd=>z- z$wHVi{1`80kP?xr_0?=NknD2)%8fh-2Hw7h6E~m{Dt<02GiAvY;S8_c^lTrGKsVU0 zIw|1s-;ro8=4Np+z9ye~dz3Ci4gOy$^*LUSKKrPO*1iYA-)YBkAt{3AU$nm*4@^-S znSOh_!|tKmd=2ZiE4jd{8TKRbo%@FY7nZ{izsl=vvVFa$9prfN+F_%1gDqJR8tQo%{*+7j8*CW_6Iai12NquId8-AG< zyHGT@Tef>g$;sqrrw?Qe(=*c!chl&EWTapI_Dua99 zziJtx##?^pb3xYV@&rq^;n=ZiI%Jh9Dw+XaoEwD-Dc{bpV6?H9@s$v2|~L1T)moG#wnU~ zYT5m=cI`BH)C7HCLtGO0##i1{Cv-l7YFO@ve6en@yeJ9ctC+Aq`2ID{qcZ+i~8<8gog(#kySp8@RvM$;&bJP74;~2bCseD9Dmm5iEYaU;V8FbUC9x z9FNR&59lGWo}krMF!(HpnD2h(rvAeY)NI+S$QL3%8i1F^I3+@@D&mrp8{C&G(q?&h zfps5I#Mb3X9~~N!`{--VF%2EmcmFPjLL?v~9VPeY_?t_7K0i*;9?fcN{cM-O`>QCK z4A0)b&9i2(0>NT*q76L=T_;V9I|yR3#9(}SCSOqUzr0Unx*_>JNOkZUzQ=dPs)leL4ae@thRymRZT zHSC6;^8GHka7gq-w{%jPjfvph!T4UvHX<&p+g(8$HLxF>`vWWpkG{IqDhKZZ+N7x^6$} zmP)SB=YhF-I@jkHb0G}&i-wNUBIXxvv}Us3YMMlGC&NJIY-X?D>2Ebeo~dQRS3+%q zdYSTdUYqtPJG)(~_1n}Kap9Y6w8}6I@@wI5qkB1?$!$9#tVEyhy!6)CL=5gczx?Lk zHSow-qM7P_$c33i6)=Za4}eXUOU)wnbbkAtou=oFWUds0vL6_Kfi>SOe?F|A;XBGX z1{Hv=;X4o(DtA`AI(c7+caVc&ibBCz{~03J9||4K=;96WjeO-kZLCLr9&WK=|IRWi z&=0cdb&oDA1T{y>OZbEIXv{W76Z*BjOnUueZ{AZ;I=_cpQFUeW6>q@a^~PuWy&P|o zibI3wK%T?#BU?jP#; ztgRD6Z;%_$q44vN#vZLYr^vGM4qq6ow!zA;47Q5RbN0P2_rj1PhuiBj@>qUocu-)8 zs{wE3oLM}I+1_czkDu!f@V)yCuJ`pZ(7*+*Xq}%b?(0zO0b+@Pfbp(h(ChPM^l7S6 zCo;;dDV_feacJsCkFXa3R$GzjMXBn6B_=?FLkjAC8WbaZYX+i8N3;xeLsb^@G17{i ze>+ikDIr!YOP#aVT)t%C!S)t~;C00%Dxl%_%Y(RHEAiWX?ssBWmg3M|U2PRl6*+(S zr_9XCVU()*{P4XiM8!6g~OsFltrZ|@AXsW)o4FbaaEH2%_|lg6?|0|S5gjG0+%>GBecr* zE2#skd}BFj4EM4tSTrsk3&SyOiTt1=ST@^Kx*s0fAHHqXyG1PvxblV%!lbuQYS^-b zrO&+#^?h7x>@jIHo!djYxP4nBjA{~_6K&=QF zvhqX#B3$k3=g-C?={^tp5rVB-6dL=~!0I%7idGS=9X(yUKZ-0qEE}InBxO!NTywGt z9y|;ojr&dFnb!r+fbkcZJrT0p;(;Rgfb(mxq92IkKTCF{y8yq!~ogLU|#41*^=+P~OU_~`-OCqHf{vtpn7T*mPo+KRi2O?&D4X5KR5 zE>!aG4N&qPW#sN2w`a;{6;vmNBFHFF{t@FlEczU|`x$C+&(+x6f(MPzHi z03JF^AJ~8(}i!oZZz0QG-TK3%O1dOV{!v+_pPgrc=Hqe)Q-C7 z;RRm`h;2$$R!C3n{W(+lz9IZ^%9tWqwjDR~F7WDT?AMH2zn!;8$o+PMGaj4mqAxVM zM_G4-KDY1xk#uHDiULs({UzDqkwrieMMSnYc0^eOS-*ago`{Z_Zd+|dsJeA4^JJQ& zcg@jeZX8caK?(gu`E~BJzPl#5!pJ{YEsE>Qeh!RD<1q!djPo^1j~!opFtYrW2u67+ zurFyapA(6qU9FnE;v7l;uS{E1Fm66yiI0YZ{TxJO;t_yEi+^T5(kkp;qn~B&N z7BA=<2~f_a00O4X<+XpVGE*@(1r3si=_vuDJbm$&e$xxaPsuq8+S(*3o=Ju?1|Y~< zznosDYyH;v!yT(7^A!MFqg>#&kz{K5B^iO<$t}%`WiBu#s$n!fQ{@BO>%@##eJDVE z6TjR_7juH5k^H>w`#_4m1}R+Ebg3NnN1SkpNbyQF;C)T9i73uNpOq^e)#aaB5@k&w z|87N*nD6 zNcAk=(g69$en3b2>MdOPL)M`Bt9V{B&&)#b7Ia{HVQAeQqxn93q*Klai2>rg7kl~k zs;>2a3>?}X($r{U$j0)KAWR6*iJ|2yU|jL=RqmA!Lt7)he8(8ueM^{&F|D=$|A9lOY zI48aU@Z;{X@_an0aO%kUi9d#~!$%Qd;k_Jx8YMl|bQ7DB>o_!i_rL9ETSO-z?#KJ{ z_7$`fEeE;p$f4<};sqW3X_>9G0WAYjl0F_HWQTihnH6Ox?vf20R$eW~fc_gwwFSu`SOyv$TN#M}kDm@YmgG1vak-7K}u z;|tLwDYUuTX{qP-WNn3AZd}>#~~yDYkfN8Carm-=H0ze=89ubGGv!UwNU56 z4=**@r;tGE4F0m{F#v`(UI1Or1d+sAUH#PJE z@J`S~dp;d37Q+vgqaTwohgqdrpUW6?ixWpS-kl0tIV?X2dKVSwHlw{C)0WzOIjjoE zudhQECxXp&X&p_6_k}*gVk(Hu2IlYjvD>*c4%7mF%ngeqb)XRcOvU1_+~R%X^db*+ zM`n#5!zT?}vPyMRcUl99z{M}oAfBQrN>CEN%3lNqKauCYbsbgQyzgb-E&GiJCO%;|ZM|+{ z?04_z7nU$3oo*!uytA~v5YD#jALsXTpZRDnwwSx#y)f*k$%+1&W~i1iAXwEvCoeB~ zwLqse<{i&3`c%mNWuN|Fs3tqim+BXhFnQ`JECF{Kf(&I2NaX_V3gN6DGBsv|)-;0Y zzIQPDA;0^Q_PEqAiBj2J7@o4IYUQ+^rGo3^$&h2mCd4?Coa8m6@6k_np8ZQ#5s_Z6 z=_L)qM+-sZ{q#ITRxt0w3q)}@ZIkXSm$D~KRD3C3YnY3)dInXpC9|eOdb?VW^r*yNRr_IZ}=&E6G5YSh=nF>qE8v5 z9Nj(YQb0jz#f=P(HxwL<78%o0klwgfpl2yw=YF>#MANo%23~Nf+Y}lI?8$vxKz#WW(HZz&y6}k)d@Kb@=gWmDp(y=k5 z)Z^7hT0)I3q-Q{5jMB{<`a2>Wi*~Bym&(629opU z7Uaqxj}LWrG_H!3g*{%Chq|#Qk6vq|-#p)Ou1Exf6ajI4P=&WpD2S=}vDcHgT&p^s zFWcuuV26Mv&9u$o0I80??cb4(>;}r`8^0;`>K@B*F8p=Rnaz{JUCU#V!NVonKIvMy z932z}CqJ@d=J*=;NRUpea8S3qVH@+gGnxlFaA*w_%SrJ!O&=9CyP48+Ow3#(MgT=D)n*i0fhNkEGr%y9;w$zLqWzRdC+eBaena+nMD6nFpoE``kGo&Xx;O} z=MU~j@S`p~(k#txIzz9$ou!M5#7l86kWM;dDdmq161F?rYgiBvcXfmKb>GG@*<`w= z_c6DQU&b%vu;!!Ro8&taxUqfy{_MZQ*Sjs}=U}KXKq)hptYC;<%>se)Adjs^xvf#J z-=OhaUv)MJyvzlnhz!XOd$i?azskQ~iIh62LesF)wfUPo22J|l!h7yB50wOmH{hmK zG)`=$E7`)cxEXmQIw&jmv}wfW0o@RNDeQS)VUbrbfXV<3HEAK7=yF_o29YRAO7>XYqR906r=}w;+YfoNn;q_9R5yufw)BEsMErLNlF^XWWMFC2KqecQgb!-3Q_Km0`OfB5-GlD z@K`XpsQ`|fP4%5y;e3s(#py}1&ZeQ!Nno(7$+(;fp8&2s2xDI$?>#F{Kkvii!`|Q4ez{LbCQHax*i3*+4Yf7Lh-VXOcMwW7#tL=Kwb$8(&G^KA zTc@d~6LgR`BC51LW->;j4Br#rPA5Ngc;eWa>m9~HM+xa#tK zeVW`=-zkR2OQZ>~u@Mfze69MEAkSwXh`2Wjd&z?1W4-SS;38)9Hnwrw9H8qe4D>KQ zqO?DD{phOHc{}SLGKYtB;W3wv9e8$oB+@?e#Mj#2R|zsaz=u#nAjt)!$K}xI->PHo zN20&o1TlBO5y!o+U3TNJKJ+yGs}g{cCW5s_RY~Z76|!(cKk#vuVi6<9+13YEo^H5= z)x2&&di1y(bDn|v_Rxy~r7))yOD%y!l$sNwUMPbU?=7pQrjcAvdRo!b?LLe<^%7%` z^u7BlHVeyWgGnw#FhEZ7X85e%>a_CmufQd;bqWry)Dq`c8Eh33YB^>UX&+XD896w! zaNmVWd#mr^9MpJw?N==0_%nvTBS3BB*1^xoC6rlLw!o9ca3kbeA#M=LA+El{tY#j- zlQ=F5c)uI$sv}@fG{OV!11Opd9p(~Bw|fX~HD5V(QNFh;6!P;2sSADhcwpnj0Lj2c z`z;{`_S1vY8Hu(LhFtvJUyQ8;c_1-R@@v=KQ7R3w0D%NX5JYs`e=Qj>9QML}H6tVnC`mrlF-I~Sgw1&a#Kb33@4bhmI~~YrJi55H)Ev}2x(g0`M#t1Zq+h!GWt;AL z?P)oW`)39GGhU332p4-jBYut0w)kBF5NIapC5pmZD56nd0?jPUQ+t2@!hvtFm0Wn$5Av65kbSw}3;u}wQ_c?4OZaQh0-P~CEwV=pDfJ~i7Mvk6OV z;f(xVrTri^1#~wQZs^v}05@J3B&&ChE;s5RZjCLAw~W6ea_pkP)^%6Qb4#e;nIi4l z1FZ3G%TUMfg{ZF4DER@b$N#B+ubi7)8u7I{B{WcUlGtUJEtm(Z74KjFxDTRTs58A_ zF90{laN6v%nBryC#&a?4l|Q|$i3=iPh4PdONE8^6Mdv20P5Pg8F6}_e9#rn&H92;LO0%Px>oivCNH9deOV@8iB+QW;lFo0mRF_5Ad1Exe|j>o zkkNDsI1%<<*!5oJ@7GP`>hBkMzDCC@H@n;u3T6WGy^A%dyldCqmpE(kYKU=g84~QS z?rs&;=|0*KLL^nt*_!2yJsWubu2)u3&S!NGR9304BgSTbTtHzs7XV+Y_OTo`9IROl+1|EZ=dt z-J@{~^?i;)d^bi+lPW4_JWL$OD@1Evev+N7uEue64}yEt7Olg+<2`X&MeML}IY%xY zdqKu?rC&AuYM6ID^TqgkIq@60G4wtDZWI?c2ld+rP)p<99&v_$^lvf#shxuW@K|29 zb8^1!m&P}v$Mf{Z20zmn448^~-d>NASYBU_*aGL^P%-DG{c>sBL6 zUO9~BXXA}eWl+}>1VxxyrD)xkJjd`TXak^LmycH&2lP19IB*Z1Lk2aC(+fWnhKxLB zJ$h@%h*>3#9FeZ^Zd^qDajc>LCg*Kh(~x<`=%F6s6U@|i&Y0tLYez@}?cBYiM<4LJ*YMuoK8?<{tgFoN`~t{-qqV&46iK{ylPX*Eauutrw_?U={kE4gskYbPJH@xV${X^Yny<*X*pqYD8a99kN%tXPf zE$|Ei7b>E!KH6UQzg_X!QOxnbdzNS46*2i~{dqsD)bPEIwysr?#CJA+O7>JgczRzY zK(6pP-jDo(ZP}YLSjIP#m8(uLI3uJr#~pqI=8A-ctNdKWiy~hT1zc_heb3O#irM-0 zEB*I;LT@G+_O7=O9#TFTm-pK1K7`x`cGgjaRO$UkpBC$O1`+|@{U7Po$ZR!_f4XCx z3p>%9PVu!EzM%|W>61cJLD90;7U)R`iQ}n^tv31M6=@+%WgC0$EADw6g4yl{Xpvxk z)CNd0B*6+s`#I*YJ^YZ5j)qQ!rt!Y$Vh$Y!Eh!|)jvaVRGFR)KR#1L?NEJy?}gF>;nS6 zFc*9@oyDT^flxn%pV9@sH~L)k%hw@tFeI>BvtJ>n(px?ND$ zk@>|~FNbA$*;~|-LepOMBV0SQo7fHjF<8Xy!yLz5>3Hx^u42Bna*e^w(QCRrAgfw? zW9(HkcRaKi)N>A`y80kKj^#|3M5wO!g~0pU%LS+WJOyX~HrQaW9yyDc8`TegENM?M zkyrNk?pJB`{%)K#+%4v375gbp_tk+ixxGV0d0U=OpF!VQb%jmm+?sub7Pa%c)Amk1 zD94Xq@k}nkMZyx;f5CN0n0G;*G~rv|06>qIEg$A z*qP_52pA?I@32b)wGB2O4dQ{XsB@kAD=95!AwBdHpV$$S}yE)rR{c9wxr_)@^sD^K_|kfiIvTJWat1{25qrn+vue^}9FUZLlO z3MV~$rt4`x($ZTu&1tuEsA9V6sCZR%uqdPDM}?;mS`vNWpx=teSvSvLqb6nYDm2}6 zJ!;BX@E~~oQW(lfKnCg)PGcl2R#%4d)#H473&HQx$Iye$+&TgRUCb?es?ZtUfY1-I z;*);2*E%cd~-I_ zzaw#F=8mpY$&neFdBg**X7$PA#6lIr?CINofe-!dgr>v(8lDJAqbUcs}5UF*o;q@C!|EU2~(tDy*LO20)no!%xMoX{f{RB*n(YK$OFF!m)B)tnqrEK)oNa3{3kU>m1WY&b*M$2wA=2k3Fpy_?dLpc; zCwT31;7(Cx`5$HyHoOuL6NlnUHttB&A9S!T)q)uf&v!=2slKLkrG2EFUaYH0c>8SG z3%3zG)rovl`&lF4Ox!=!zPPLmi(1tbV&;E#J@ZHhn|tlQy>BJ4T@m<}*mJ|PYopJC zAzIJ<__BM`MiiD?)LWjh4+_v&pe2i62|fY_VN-Ut{j9bQLI_8G@`cy^;5a|)#p@kz zr&Ooxkw!Yn`xE`naim;yv>{%LaO~r{0fQUpwfvH^9y1F2Xwxhd3m?$-q{o-Z<87$( zNwad|gp9XTpb~SG?;APHG7p#H?V{g(r#0@xdeV+2BEjlz6|M<#A(~bBHL$YpS3Y9Q ze&zwm-zZ6>+$^~1^?IwkLcWx@b4AhGQ$Iv+9VLTt>CoPW zlfKVQv3tMna5U8#@X<G?A1Sghb*L&4nSbw%jQm2mX!=vu8%4CT$0H^m5qAX4*& zLaj?2%FA9zJ_>|4COe9;8$w0+eXbx_h)J`>*-2v&Xr<^<2Plh(fW6E-+G}^c)eI|O zeJNN%E#|0hR2g=5(G!r6bS{V~dSX`(FAiU6NOW&`!Qa6G6j_pA>r1v|oNbjJ@z_Xc zhu<1bT51Wr0L4o{qB zf1thWRg8cA#&Suf!OyI7y-?}VO;zueR#(Hm>YQ5nLyEzv>Yh4-tzQ?y)pheJ0x+w* z#_k55mg-NHcQAHgtE#%@>(pscV`I39*PJdxF!HxIeY!gY-%~tv6Rl%7R4>r;rEM`k+Oi$1In1+%B39dCnI}&*x`oQ zcD_d={ApmCqEGaNbrH(`Kx3S}Z~ zsWNPmM67asLHfc%d(qkB``7t1{gAGh61gE_S*7xwFe$vJ)LV0`?G@lJVfq9L(Sa8K zy@C)v-T`y0MF$ST^&5Mv9#Iw)YhQ6hAiaE5!|UM5Wiyk?GTrYY`1Bd|7S78Z52hGT^^-0GQ8HE;zF@B^4YKSpmj z?7V0i2>ZG&2goS)IvUx7W_h@sg%|5(&M-IHy}pA5MbR1qJ?1*&Q@^dh4n&jn!roH9 zS(sUF?eDb`jF7zU7ao)xyEIIlYK-c=+Awewo@INw$&;@ z@|$5!ox*^m)p}F6w|~Sat738U{!ZMdVa9zacxVv3CdQAZWL6}!J%)9fl~w7(GQaU} zkK4Cn5s~%{)pbL{r+!kiUapj)qy1)YC)jUz38I%?eS#Yls&Z_`)m%zgyPlo~b9fc= zNdH}Wg#V&Af|z*^)DsZA@z@7ibZ0(u2#T@XP_@#f+&(NbsxsTjjS{+9|8w5d&B{6LsiZDgw_1E-(MF!)Q2Ng(o&$`~+J^-iI8Ij5f0F{-Garft$9wGy)2XAC>-g#hc}{ z2RF&=nf*exhMUoixP`?nvAWvw;APN^18H{D;~S9+qLF9k55tFdGSb#IYsG>#Kp9>t zmC34u`->=hFnd?qZYFjN#?t^fhPkDs3>{oZl)bpRy3J76Z9eLb?^8@7W>As ze`5;XjVjDR_p*|2>lxw3Z2h;e%pB$jruzXG!|p zEG+et8q907cHcN!=WeG%|JwU=y{ON>ta+}L0%2lAKK+}oyO)}u)mSu(9SAtx+v{`h!~O2jE^@(7}az-`&DCJB=0(|VPU zC;uP~MUNe+`dT6UX=9%UTp#Mzt-4=X&U>Z{H=`mC`DsKk(<`GL-${P8!0J8R`%a?u zroObLb;QRD15^8b9aCZtVg4eJ0P@i}M)hjL^5`K=Ybgwif3$n`eS4D4YTu8psQDY& zTsKXO$Jj=uSFkz1{SK7hJK3d2Aaq9*78vGoQJUWyb|Uz~Y@P)6KdEg3?v8j?_35LL z{3<~Tl0RSS*4D74G7!3hQb=xYGZ}=WEwp@n9ItTnoilP%kd~o3w#wAZ2^lDF_FRN# z`Yv_!pUa5qmb2hI(Zx`|;+3#F&~6j%G?PgN(T~*|M@M55B4M$`sv>|aoNrO5TaH_R z!2QZe0CAI(0=YhHW;u!$}Ad>iS) zb74X0_sduCvU6mge6yXYw%ORv^tKpc?JxVvBsYP6zKvfBoqlCtp97V>z9%l(*DhS< zHf#lxrZwB)B4br^&(ZGOi>(UJyF|?Qk<2lfLf(;m(`cGre4b%Tg(Da&C;NS#L~?7$ zkO=PrfIC8Qo?6Hv%A}CH3Q3Y)wU5DNVeIAYKJ5&E#7+s_qzUpodiRh7=kzCMg(=9r zmCz9pFYgOSw|6O@y=Sp!&ZzN7e)Z|oG@Sc^gwZbquE)(oU%B_=)&OMIeX;j~SPLFD zO8n-dv#bv7biHO!Q1plC?j{&xTb3zp>T)jLUA1C=rE>Qo#6jEy1Dt+ z6j10s(iB8U>*h6SO!~vTK=hXOs&{dixw+dxiuw-`UOtNa+fMdV{mB#0-=d|s1*s{AHbABm zg@z}Dhu~DsDYqu_MAnO0nwRP!CgPjr+caJtvljYi5E5>^rcIy3P6A-lYh-4W+z%uC zWb2g^Y7R$zNx+buhE!15930fc>Rj2Ald$7K5I3IxAnU700*eF!Nk&guvf7iEC08Ero)qHbMJNgGS%V2 znWtc;+vAm$ag0>Gh7fux}0rgA1yx&HCuW}uJcx$Sk;fr;z z;Sde2y%ul!WZ5_A$09lo_f9faRx(5`5;mKN$bTi1Hk*>5%=GK@UWOw_YM5I%c5dlv ziH=i14vV$>1K`NP<9Y2JiUKO8JJ^eqQm_{+dMf3t5$Bc+XPJC>W+3;^&wV0dl)qEo zXgT&)W&)+XM4ZQPI6MbD(Y#+F*%OUbB9ahNg5gVBhVP@>Kd|!>o>-|HC0Y8tTtkfb z!OG6w-snCG9QokpeQ86sCt+#bZP+yY)XNgka9GNypw(Pzwdz0Q0Yl>5@{sPzZk-ON zdohzj3eWocejb(sjZa|S2fIQZ)9hD^r+avQK8_5bhldC4B=oiy7V4*0t?R-c*fP?`JvB53`!>uUS!Fh zJGuzFD&L!E_=<>)7-UR1aHQN=7KsoDW8Lc&QY^%UVCxq$x-)hX{dW2C+~yxqn|nAt#~{fuP4KYw!h}D>^k=L**|n$#VZH( zmb2MKhdu!}A&JuXy@?-N$CEB+Zr?4{+=ED+smSc$D1>mMOoaza!-mx8>tfeV1@IUox&OG{__@l|2uN6An&fGJW8nn54 z>a4nte*M7axTxu|L;x}b70IZ_>)>0J#z12=<;9W8h5THeopIbp70}qtM>s-jalNzZ zxnVs(O7|Hz<{=adp6#vGuJ1=)X4iE1x{GXWfVi6+QF#~n7o4SZIwL*E->a9ycfa88 zA;+|PwV<*1hdFDvnU3yF>JW#^HtJs3MK6isLvuVl;OYg)z;9;Avx(uY*)QwZ?e0e@ zs=FbZ8a9(G@9wAWldMxt606r2_OxfKHn)!2on9(GUAxVJj!WCp;$i4<%tM3TIV*{@ z!6Vc5*_fmvt(%Co6+iWOpd?Z|c*=eq9Q9_{GUPMWAB1`Hb5}jiNFqRxe8&ceej?(j zeR_G~#6;DpM!47Ba=QOjwI~lJDg%Q2 zW@_yB8A1{$O)%Tb$-;ugS-IzX?X${JWTkgk!$b z0}FCwaoka;2WV&6%`)$e+^U^n!P`sJG(r=D-5HVU879^h6y6RC7^&jFrcP>>LF!c* z7A*VR&k&?_rG(Dmiv`&++C;K^9xk+6A<2pLc> zeOh8zD0SV=*AEIPRd^W9!J%L8Z%rl|c;|r{_D~V|2xU5diQ6f-7YA)sFDaWyk@P4L ze1z7C`h{@tdt!`0^2vLPQad2gqwJaAE7=>k*F`J{zN=p*>Bj>7!`z|TM20lmVnTJd z7Zk-CGo|*~yA2>+`W*Nq#y(8^1=wH!!netjFR69XH;iO>g0_BqojWsoU_C!i*reb- z-|5=Q=-f3{jWroqC(8S@>?;gBx{HRge7;Wd{YnHHy7eC!Fm7n1Z#Q-UkMsm-qW_# zth)ZdT~`Q3v14c+&IA%ci>BGKaTva);@J&X^uENOt=#ZL?}zKu_-(Lt)ZqVGokm#I zbD>2mmQ|PXdiz1q*m%B%7I`XxyxX)HzCi$W_Jea-a$uW(IgsvVH2K8@xzWy zAJ&d)USV@gL1eo{oI3w{mg{qGP8jllBWSmQS??zsT4Gm^s#S=NTD@ArK`Ys;}A;4a2JbM0}FlljWep16&AYRv)yZSNXaXx?J`1|;bXA3X( zLm=HssaZ?e>jwgHdBx@W`%_h7)u~iZoOhCBQlvb+0KD7nC(`4#ld;u`B(?4u8%ZNJ z-;B)5)6!|6 z(Hga>XKW5|z7^qjCmD6uo4({v4Eyg|GEPKF+3))b8*JlznD`_3I ze`1x3)|Cj*gmPp;yj3pJph9Q z-{h~KUEfRc+2wJ%NYjzC7%jHS^@k_f$&~7&iB<#U&NJ@Lns`wU8i@W3R&DaBo<;UE za2bRj(_GurkyR37I+x$Wr5Tyd+z>|y*Dx3!I~%HRyg@t8LWA5rwIG>wfma{@3_e4yt^V@h3Rq{H|zS z-1Y_cSKd$Bx+Q+=`HFFvvCZi$6TeBljF`xztZ_2eyxoROt+gmAlT^)$o{hv_dT`=x zMr1$~+T++rE<-&}Z%U%j4LU87 zsT;KCViw<2p}smo&k2Wz2?Cw%@!$BkZ#f;!r+d3x7>niA`%HfxWBv=+TcHptk>gNa zv9D>R^`rZAHE=xzo1;-WAfI%n zC>TWcb(C7Dq?ne3ih9`6KHO(&1%2l2@+ruUzkI1hZzsU9&Oa5q<*!)IC)4sh8HY>3 zdp6nD z;r6`QPp=Mm%0vXLoF=)FApUb7b)5s(MMR{7zxP;didte6CfUe2`yV4HZcv@m`>217 z?z*oKPFYR@95BB&1$;ufGajah99`QDv-hJw;j9*;Ewa76B~9NE&*0Ol_p7m!^&~SO z92Ot39MlozO1Yi%OL+DocnH9E@n z4;sFCQ-=?Rdz7dH4J~i=-1@mNaub<*;0Q&Xr1TKJF^NctBQv{^HT{{agVdCx|9DqsVXhaHLu&9}82 zED)t12+z(fPrP~HSU-4+<5iY(Y~@f|U155cChDY@ zo_Wxt&B_?n+Ydg_X;MQ=13{e-NG$AY&?50mTo+>gXG2mP0r^T~%0|9Qr^M-; z2J{J0b_9hEInFYi5DhOJJ5%>w4UA{^9=kN%uRYaNzxQ!emVW%MN(vWuQjC#G++%QV zz#b&4wC`0^OyzSOWy$XU3Q06 zUV%@}DVi5E82f&Et3vUy(5wvQ&+~m%KQk;N`xN-#il(%D|IJ(^o&Lqt8Bx4RIo=4{ zc>U@yclf;w%6IE=u%CE$2L1Q1oR*9UFyQIEg^9Zzzi8AUTpPbPokO~=L+$5|nmd9( zf67yLsNou=4OUl@w+w6D{pjDW80sW&Vj&V=zqp#(HMn#?oXgVL-=OBJI#GxgXluS# zqVv5P#pz}3Q~ACIDIXAzi3Umo)XY)tj#u()2&*0*p%o;a8LX>INRYB0ysvB)U1d3eMxs!;99M@V^# zi)Oc!FsfkusziUOhO->8?|W^z2$!}UmEYuj5{C_i$;soC>@qKdDTkJjfdH7IE3ziq zfCf0;Ku!ShqR~?LaBjcv6sgWP9DQ^~)b*HG^uqSWlb0|NsYgo5G%bP1g=F4e(i>V) z{|mOx9|^yFSwD5I5ePfSiKX;L0l{8_&BWw{ri7QgQ@juc%Ndu@Zuv^kd zbP82KGkgP{5!f}nlB&W+%oX(gj~p&zdB-OV2Gf2(7=ydzWIDZsPhIr~peKVS=^qG> z7o39`$s0P5*O{1UHZUfJZVH!WzFv}%NA))amM6;fFMS+~zA*HobhnSzls%_?y5CnO zmE$V%`ts4;Kbj8cvR^fMCc*D|9lnAaWiiW3yDde{qMxp?gSOkgRRZAV!<`8_f=>{j z8gU^g_G|5uOOLJ2O$%0yAI1vOxD&#+P~F7jyd?>e1JKyni@M@4d1aY6oufNgRFe zQ~S#JHuTG`KO$UTcmq~+{8`xR0vBum{g>AeBU@KD(q*>U zqAKx+OGKi*_-2btxhmomK-J?6t?Sg)(?tl-Agq+b-S-ZMDAV7Db}ruEMG|}H#_bz6 z5>Fs7GFGgO6js=X6UA%82-wmAMx1``+! zjX*ivw+G~Nx8`Xt`^hMz&>XoaEu}q^UcD%{B;zQ84a61moFt@pkwY`iye~fRGXf)R ztGaCKAu@}BKH|+w=v@PJ!?>vchZAs_S;($3un~AVGvL~1<&F2R^Mn({-`Do<;rDSr z%~C@R)S*tZ1cN-B;oM`XNo)I=Oey2SMy`24;Id!6L3H*PgxAcM)T*S5K0nDV@A(x^ zwZU_t*E+wx57&A(F`@1}c+I_c)Fx^6Y97O_*HxXBKkq>*+g$$iyu6zz>+!V^GOX-I zvmH?c3b?{9i}-Awu*Me!wEOr40Ynj7=W5pb8 z3f5kI>o7n00%_hF_>klxjZQ@!wdNuwO@}`$U52O%Z&k8(Zp(ZSkXKC1UJ=ygw3eeew95;9EOyj}AztggYgolYa%4 zoA+}~_$&D&w;(tG-#-Ff`nTNF(|K)ES_9e`m%?7P%ZY*uWg8Ied)$v#^u=G7&?kxL z{aN0c#xEZ`t#|+a=@SU{Wf^OF>zEh&LtLwUq>;9r-1mOaWzc(KwYABij3lRGtNxMs zds1+@?vvduNYH?oD04Ey-&6IDU-iJ3c==TMyHSmqzd}X z`O&veqjiSn`V?)x*}Ysrwg< z&<>Q*N*2d^#UJ+1{f4OTVDpZbwy=4+eRD_s5m6_n#*;FSpR_C%7{aT`!c&Dm>s@G+ zTx#x7$?w!FsYYHKC=P1!+cjLU^D(3c)v>GJq#%t8&X4M~-2Z}LaYp{gctA|{URdLJ zsOd8~WeI0x69N|iO0ROr1@ODMq0L|W{#|aj`4XG5U0hc=tUldmAHc;c$%ELPE2I^i z4sO?O^G)MfkW}yNMap!y2b`7Z_YcDeUs!u+c+hpV;p!G@Mt1WP8}6hP&z%szrwM4^ zwcC9PhyEQ35N|)BI-R+`GssX)uGQtYXE2~SyYofVVqGZWgHl=WaZp&1u89s$|9K&X zgW2Cxy>IP~E3$ol*1@G3^wdDF5lS30>3u+?m9UQp`1-Pn{XI3uV*}=Iv#k$Hd1cNA zcO%y4#SYFJzWf&wORwcCdSChI-Wn*MxN%&&-mOG`b|p&xt{%a=m4*Ad-h#MPyIm503Nnl z4EXYZ*YJGo2jE%VYiBv0Sxb;tJ3k+k^YsB!gzUE8i0zpMDK18HYz0^H2I*R666Yfa zTH=q5PSTzGn1ixsq1H@Y46e246}0?!l~u{MP^SC;F;*Wf^Ngmdp3RrMv4Q zR0lK#-Lz3NBu@RpKeP|vS^GJFW0)irqWB>1h^-8SP!i3OCVHkwGWgDA#|z@qz1CL# zLZBkvmh|BwcHyIVcyz;la*5W>?RE&){#y7dp}aUMnw$Sc=3UP{nzu0MOWf?gt=EyA z4yLKGwb&6q=gnZ;m$zBGCn$k2rX`AX1~lH)j`|58+R?B5 z3~Ba3TuyiDE++iZaOf?!r#JS5ZoV?aT5TxW`F$LjAAMX?<=k`y1!ZCXJzp}}z6|vC z(!35kT;6~@oZ^h81>9Y>c-9|=*Plj2Lhw?&D{>j)d;dI*Zt*+y`Nb*j9$&zS6`oTQ zSMGpPWRec!UKJ-RWBNHI5R&0A%;W{2+cg97WA^10Cz|3Fo09@^kE#_|gWBqh;qq)n zk_^TW9t#d9v-Orn6gX;)9FxD^%r@)s53{hqLxmbq#MoJrd$O3*o0v&{KT#xGgQ3tb zoTRiyn0rkypZj_#t1x(fu`t>Px0N9wt>N0sSr!f%l@PSNY!8;msb)Ak`@q~|OW5m7 zC%;{yZ#o^K##Vb|rW}D1OhF|7;c3*OFHtsa!+=1lZx>Nr>ik1BJ(TDsEbprAdxXn;&ZbR&r^_t0xLd`c86hK)A#0PWniQU0{t+oWi4&$nx|)Zx zQLO~cDX?6439KB^pNnE}`34}>kPhAXxBX!KE&t?wCIm+BY868La}sg*r5XPTGCK^~ z!t`$g-$y%oR=k91NLpx%y-`z+a?RO!Cwn`992JTow0_y0rt~J=?6-3&jt}SQq6bOA zJ&eUoPTv~GsQsh(Xi!0D2Qc1P*fhje_}ga;^2@qW0Jwi3#@Ox!7uq`4e4nuAdW4S1 zIc3+lI?==TgJT`{uflTeh^k%A0dU~*12h40l*EM{k^U&1VHMvqQU}F%(Wux7Xug#( zmC2|~?6*S^I*WWkiNpXV(idX#cmC#Q>}Nw1`mV*EEg3Y65gYqOE(FjRaG@`^FL7t# zH8t%Y=RtmUu12h-OL%j=$%~%S`$P@*Mu?tyc>cd{r5$1p4l+O)z&}?nQCzNLPi8e!7qE@cwmSGX9 zi^Mzau-i9gL4#)Uj_pxg%{(yc^Y8gFSns@VM)vdmPQf)O82nVH$uW zk*(5~cng>hWPjW5CV1CDDgf{|>Ntl-CM5;G!CQ_mMkvGjvoBB=Vk+wWCV`6j#c=s) z(tF~J$!3L$aM^w8;A$iCtYHXD>8?xKA~W|`_HnV_>^Ownt+u`Ivqehpif2^c$9VtO zFvTdf3il=H-?u?OVbSpfLSK8HWa%;;pO44LrP30h-ErMJer3p9r*HY`Ti7rV@nbm; zCJVRbbdsl!V&X02&fh@_a+sT!j2^vHeuoSd;SR%bcNKn7v=4?}1P4Z@P8guK>)kWm zWpO&MuUvdH0UkAbC*_`eLoTA5;EQv(ahz~K^A@;#5GUvdD&V>NnQ?H-V2n6eV}_fN z9aiKz4v=|opYdBbjPUJMDQbhAo~p_`PU?P^xD<(P=NM7+PjqG*T@$Ehip-{?=kIcQ zP2nNm9L8s-i!a6St|hf>XmTY7*yVX515F*C07~K1&gCOo69J~(E>w<;;*1u_Qc3$9 zAq|hYgzt>`RyHkgAb)5E$m(}+(l)z=AN&Tz2}>JWzOPBrTAwl1kLBN&wIh1 zS7Jb~jxy<|B@v8oJ^OmOQfRB^Y6grPJg&X=w1xOM9Ko6)!{v#6Sv(!QtXF+x>h;5M zxpFMM!n^@sD}wt#x#Iu1SK_Q+Hu4GY<@kAM4fp88&AR0g6RmE>K}8DuIu4B@_mh(= zQJsB%;9r`#Up#m;P;^Z(TH1zTI_1cwE;3bYL=A%X@kYd7fqof(4&>+xxaX@qeaYv+ zc7>E!v92?KHjI=@KyW#VWu0G1&)JQ-2#IE>w@_U#BZ#0dc5>xUgr3$acsTj`R?+^B z$^w({@kjfN&0A=Cpnl`zo#gw?44VeH20fbVu;+OX+TjYvIJ-V;Smt;V9Sh8pk-mup zqGqL5?@~bgT=-3jZ#?%j{)Z0gherKK9BTiRp;OollAV_qdm+Ft6}R^2Dv2Hm)`u1h z)}pnSdJbH*4tgeRPE2U;VxD+BsZ2HfeQ6!pV(mb9z(*mK&1tCy%u z>~(4VW3vZq=?G%rPS65G`V;&+b1}2-g@caEWp&Oq|iT4l`iXGh?zp2Xb4h45&;WS?Fs+Y! z`s3iIEXkBp>-)-g)>CfUr@Nu@{akbJ=*ZlsaQ!#I$xQ`d$awd1CQy$@3UUliSo~}Z zBq;bH@IWB>{oFuxuTGL+_!wk|R;Xji+=%I&vPq^I!>bQcUKC~25_tByd8mXvT)jQq z^o#IhzVm{wM~=b+`#Pp-(kw_&z(0Op9;_!Gp@MJwnh*QiX=HM0N2UTptlu9u-Saa8 zvtsMLmF1Dk&C27g^OPTY$iBshXJ9$MP3%(&R~70UXs(7@`dcS!dy3zgztT8%XVEX` z;d{JaCZ$ZkwW&>ktZ~>Jdu$Xk!>iqd=yf-?WBZrVx>q4IO`mJnV4J+`=P1P9ROHn5 znGu17&mm^d09TIQ)%F(n9^i@1(uPJ~E$J~M=W3tiYU)(g;=ml^vph-NMWVw*JkJ(- z^ZLhp>yF1PpeFZnBI_@du&UZ*Y~?I09J#_+go7$NeU2~G3P>{^9N_irS2TPFq6dod z{C*sri{0$sl2e@BFQc9)Vzp?;qT~3=^;kSbqj0ywz8V+>=>~MK3P>h(N#i!mW6!+M zlyl@@*nnpo2m6ZL)%Qf$#GjiiV#kCp^&0K2pmppwI!kHaqy;Z^XoKk3F5mEN4*324 z>c3{$_x?R^l7+sLcB@SLkVU=u%@^3|@m^Co6ZX^(gQhgkzm|`ewu3C?i8-E?;^sDS zKHSfSKwrU7-jLP$W5chWlX+g+I8y?sKr`@Vp5#ERD! zUE}yi_sz0D8h|_!P~~cy8x^~KJf|c<$a@O#;Ekvzn7l&G-@g(5Z=M1s&2o#YAD72x zbn-+|VjW4h2=X=XkaK8iz*S)c*`2EH1V^TFkD8g<|1%VI1EmXe)l@WntT2|F1UeV6(gZB@C z9TVeB2<{3}ch%ZQE~{qjs*Cq!nvv2#1SLi`FC`wmr&b+HYMwv+_MCP3mkKUe59z%? zUw67m=PB+&lRFjp`t&C0IGyQzU56n&tCRip6t6`kn(djD;}I^MP@VD+AR2HQGSWO0 zwBk6;GkW%t;<&F7qR{T|2+!;rJ<;03PuDNx7AKiS(Hx4!l!Y&a9DfNqdKz+FdJJ@3d=rC_Of!jXo~T?{+9va+07Zgzhlknfv=z@tx~X_fYJ>cWo4zqlt{37IG6H7E+U+S?>((hLMghyYxQX^)m(3tWVRVZnFyWjLqZqMqhSx0?|h{Nfo zJ5NU3HgFl9_TF?QdJsX0De6FKL0oT15@s*V5$kh%H5MHjXO#mXbI*S8@B5~}zr2<5 z6)hfL5^{1U4rhbpH4)wQmT2hZiMte_YJ?PhzQO`9l9ckn>+a$a99bM83Qj$y;OK|itn7AFa`?zlFXX8~ec!TxstJf?p8EX46GuyT8V zCVrnJ6rsO;w`_Mm1#64RLvD+iRUFiPNu*A9QHotbZ`eJ2aaS2C6peyw9MhBNIlM#Wcj&|OZNaDuCye_|Bj^q^In_|F>b`MT?cAWochJ0)* z-WqXV>bqynWmeyMsKU9008h@Fn`?kpp^&-0txw!x0EzQFU5z9FK>a73q&+aO$?a@@cx!qBlerJ_%^6f)5RKsM_i#L$7`0 z*6|)n;BnlA-oAj0K^;C=-028K!g5_1);F_J&qkzw+^oK@q68X;#(Td<^Su?=UnHc+ z!iR&4_QDoK(JUxtM~eS=WEG#4ku#@nggoST)Re9ftrD3S&vBA zgP82BM%Ia`3)SShYsZNuVF~CjJrBAV0urCRu)K&8e|Vwac?#J_f=$eN-hDUf_aU~^ z87;&oSh#*tD?4|ISpzcn=lBARgFKqXlV71vyoE`c?9;Y_Op>0)(I7rAg{MMve{=`t zO$KK@9{rkqQ*?Ev_6r^W=XOb*J9L(b)&_2;NCz~-@~meJ%$I#Q)Ov0RI&;{^<-{ea zwztoSQ?q}4%iQcE6@NN!NuKWxJ#-(qhK_;Htmp##Ix6wggFDsjguK4;-`}757fc?& zCH_%~q_QYwj%`JBN#;<2syn&QsWh9{u`52osOyhcZ6Om#Km7CUN#|y|y zv8Uq&K6^d)_?(`mIy9Ih!+RkS55|K`@&&O16eZg-jLu-`AqL; z^{U!udj3Jh0Mf&&vZ9lR2HY-gLyi!)m?;~)tTYz3d4UW>^H)_OvVA4;um(B^T;xY9 z*8ROU5G_u$0(8LXc1O#8k7n#?4{XB6z>ud9+j-jyU&w27Zq{RR5g|$Gp6vS$#1U_b z>m) z`kA#sWVVbd)vcDu(h-V}9&h&RZ0UjRvAFr6Pe4${O?^yCF=KYW-0n=+^QcdZgW)|M z>|irJu;tMj3TW@Xr4;*xJ{Vfs%PJEPJ*fE!cA1^wozx7)&;45#{C+6hT!lXiEq;hC zxB?A*ey#rS?G88eOBEjIaw=U}G!vD9A2Q)WT}|eFI=N8c+{;|}uI8rq{PWwL@*l?E zw~dyMg+9M|{{TSHlu_XeRJpa}`_ZG<%)p7140w^5Mzo!u)x{I{2*@NS|GtnVw5w zzn3tV2fBZ)xVcS3`<}EBv={=Cm_Xx$3C!IjaArPY?)1KcDr=VR&I;NSqv{MRqUGB$ zXr+8kXsD>@mQY#Xd5&`e!=~LxSEffJeUb8f>i$rB>l3R|D*#jCx$@N;gAa$z!63f) zX4Iom_2K*;NS-NUb5QjIH{XRV>)-n&exzB7me2f0=`i|m zL^>nJ=zMRN+wv8@>~bB9cl`Y9Z!PO?Qo>PwOUJlmkFQIl+;U5G57A`dCV1c(AZo}j zX&OgpcZQuChT%GXj%7pee;TI0U4Lml!2*WuPx?60ecw#@*DAOd?xxyz9xEg#9=ID!%2_M~4=kQd5rKokWGvNs$Iu*Us!k)mf))CUH>u-)f zSManhNhex=c7HLtg^pZv8hh6W|Lo|N{f-(F#Z(GlD!gf5&n0;8#p`iNlIH^ppod6) zXfFAT?x(d6x?}wLLCt@mvbgX2FM#b)b22ZX-?i{_Dl^QRl+6pu$QI>A8Xn6+ccwB_uC|f0dg9IF1z|uw4t}d|J&dT z@St3fDjQ;x-YomZhMK-ivT-zh#k3%m43ZGb=yK13E9vwxq-nlpP5I@x@m+yXmad&Bpt@ z@$kklHVoyb42uo?`u_G`Wj$RicKqx`aqsecN}|V>?(CtjHOyKxW&Ut3VIrbFGa7WHWH;dOoRg^sP8?l)dya#ilu-a zG=62bKWn-@j2s}#d|IrzY{u)(Qv{nKvnW2v{99?l)i~9;6YtM6_xa!^9IV3pzH(U^ z$RYzGju%y-n7`}W18`bK0XK9z`0<#hfEgWxbthN~^YXbub{vLrpT=wmKdp(I=E^goMYJIzp13%G@0yzHq?W+p5^XSlG$Uf?>0QhMm%rz)Fp4LrV4nKI7faWS|U65r`~%z2{Q&zkzq_l6K&pu17ZBJX`4ew9O= z+mm0uY1WZ>QKZ7{*@{PD>q1`fj8{)LQnCQ(IZac*?enCnFY$!&CYnXmoi?}9qkFY7 zYb>9KE0K&`x&Bh^AxY}}xG?oIQE%v@Cmd+Z&|n3hZ*?G+eBgN`aGOs+f37)2orkG8 zdGqLNpzzw7eZ)z~(M`E-DM;k!eFY<>iGRTWGy3bed`<3x(?_?_%!sDtu_1P6DOns6 zNoT;9JC@qJjDEl~ar?YYip$_%kfHhPyT&0vHAUKudFAHmlwGvKci7Tf(1e=#2xP<% zk_Sjdy9wvp<3p@x@hPXj%H9&ND{a}&>{EB5p=ydQFz#9lXM{=EbquMl zvYw5qGL>;T1!tda{bW7__j+bHz*zPmqviUu2!lYDrCIAcJKCfG`O~S%?Si<%MJ9i` zfX4L)27iB0N(h&(nb#c^uD2QuNF12_1uVo7~sxeRDU44NX5RI3OHP*|>;lW@jA8(fsM`^zeIS1x5VQ z1I54j0&v-sVEN?sJX!lYoNjcI_Jdy8H}w{XEt`y|iT*5B`2Znv`yCi(7BI~(BpS29 zk=2`ePib+BK{N3F5I=PO)~;X8UC<6(05!cgjDHaQRU}lvFMsTUD$wye%vq zv3vYi{BZRPEe=W;j8#Z3RPv1xBnUY*TZ7bOzxm3iYBfv9K}^4MwyrV|Fo(93M%QUBrBrloKVr|iCPnmPzAH;a6Ovxah+LMu+Q2OIQFH-m*Equt!+kh1NSE_oeFXWevV&32MYUj9KYk-`|lDziAy6-j@GZ zmm0R*I6$F-qcwV@D`!h34p}yPqqbP<#VCUa&5g2d;(qqH= z^Vw4>*tzcGa0w{o-T`j%nIA+&m$8b79F!Uyb>5DE{I_?5BU6v|;@cVAgMo$V>>W&N z<1vFR+p{XPs|xijr&w#ddMR8fozry{PulSz+Mqkk!SKYkmE*o!c`VI=Q7GEk3`GcWQe7?xVQ=k??dCzJYhQ&Z-3R z!)+PBGD*${+&BOniNm*eTuK^v9)M))KmKB7`93(t7c(^Qa&bAR>Gmd?Wjg5Le7d&S zigK*T!;8FoI2J_*T~!&wN6dZRr6z4T#b!vr5m0W74LTjvf?8~s|XYUky z#j-yL(|6OnvdXXzxN!_sH0+-;)NL-pc#Ou>rn@fb0>>t&js9qR%mz2xBVKdZN0N2N znYgK$WYyDqE98n4ZqlK(3co)82uG=YUvNjs zLs$|mp4P4V9vA@d8Ni2_({j)zVVsCx0@w?)Dpi<5>u&2pBG zp0bUSkh5r!Em17Dva?a`gM!9+4hHnzUZ9!{q8ux-bL*wxDzJp;DF4;f0 z%7A)4zF}z>Rh$l1Cs!sZOz0`Rz8Cj(nxvTXMQ3~as~&B&kE-VPcv&+Da(isA|#UR9nfM>O%9*MlD>W*+)Y zkB(3u8kdwmf(JRUbo9FJYY!@C-tic|q`M1Cu1tR{S7qV%;fuE?UROiN=$F-hKGUyt zB3wKajR*26L4gyZ0eY!AEZ48$;f}QPvCAxJ9`?{Q;}Z3L7FVsK*Lu?daQHM!#T)K z@?d{Ee>@I*#6bVTQLu+ca*2TqdeBlOA>`?Dd(7(xW>sJ^goL*+~5@1gQSsY5$} zx5v>(tM-15dEjK@ni;i;Z>QfEL+hGXw<>iqotV5WWUzA<_c>%7f29j>FR%ik>jvf% z8=SZDmpA=z`glRlm!K)@OPg;nn^gCAW5G3HWi1lZlc>t(OzQ6xmSrz=n4WOND2d|O zRFu28-}U6fB4ZyJNX{MmYCc~!ACTd{Edr26uJ?%`Go`yD`RNz{b~`nc#3Q!knK{7FrU6KPxf+XwG2 zbEAp#dKhB(8jcb-R`WjWt?)znA5S`ztY0nc#(uhnDJ$icd}f{Lm$!wP&IT86xK7R| zcp+rv}E8hf_D?8VH2~nsD~_(Xi=~Nr`=$#8WrYmP?DzKW=X8$w<33#; zFmH-;XrApQB^Dkih;|%w(!*~r`v7~*lSXJlX?)J=Nu*Ia3@=ZZ;-2G2xvJAn#^eGnH2{CYheK~amOJrc`qHe`1+Jq^C z$H)#qn$TYVb^1$esVTCZ#v`+jC#(6E`C4i#+AK~9pw`VLyTbnSS)fQK_T}LHP=E0s z)$#{eKAg%W^_1g&!Hq+Ays^R8MZrO)-*;f1o7i&T4-=mE#~E3KCcBdYoqgVGGgr6UWFfJz(8W+18Lsn?JyvNvwT9=a|~Z%4#6|!dL@ZGxJk1FYxv%$d zT|CZD8vPLOT_ZpQR)`~F3EBD-u}4E>*z0DrZWR{RLlI~+yiF0(h`9~;_w5ezO;WuT zHkKYUJ1~{-nDMnYkDmu^Jq_HyTBU3!APFJ*?O5pR))4};-CqxSQ%Zdm&$hx1*ll|oxZHhX54E0*hQu`)o$*PPFKYnh{@Yz@vhkgq0wxdZ zggAEna2d|F0j)@*W&31?K8~ijNz$RX2K-4z5$4Gu4hf=D!%o8lr{F6U+=RP z_FAg=v82H6W0*$h2lz(sUJ7zeXc3jL6-8&oQbC8?3g8>TK*+uSRMA#dc{^UPf}? zf9?6V@p3jXCNC-RGe_ymy=m9iZ%vRGm3=uJ?@sz&FN6GzZ>9b_m2Dx%*X++nI9hH> z4UwnV=GhRvj#%bnJA|+D=1p%ygh`mjUKe-< zn}_g(>;pG4(P+l!`v=Ml2=eEVzaSY6N9JwzReE?4qPn8rTY76ZcQ9_Ol<(I~oi0hB zN*`VfO1=Q5Wvyst4-LNf+kzM09M$a-tvrG^qu)hkNN^cd}-px zIa+QwuEWgLhu@MrAuD=-WgW!_WFjVL(wJT~3vi~Zw4NZ)YW87adhWJ4Vm-NC`G|g< zuEQzi}YEl|X|hx)=cUW7Bl(I$V&Pu%B_>2-)wcD%n& z;Y%O!i@&J$M95{d?Osml!hxraX1XdkT-7k}FR*}O=Gmp?zpH*wn?t{z?rfs6*Sn1a zka`yIV)xt7Xq;!KK0ijE7wkekY0u!W!jE;{K-480uSVqfc0Dvny=Xz>>KOsv!pX~i zD_ZX_W$a6;y17t{8>+}yDfK+Mcub?6MtJrViL1(u#HXikyQQ<(>!=7uakUS5{L_C0 zTfN?2Fw5+W%cjtGSM#eL9+k@kV>aEeE~5an+SvTs>Z6opUEH?n)uM3n*sXEXv;kj`V!sTBVD5mHi!qi^m^ zEbVa2x5}N)Zrre1NZQ6pib{M>uQ7K-n*4Fmeh!*Csl$u0tV~BM_K)a6RM_MDx544r z=rKDy8SaxjlDjyUHK$jwRd&`U*_!JQTsc@Nd?kyDU$Bh1>YR!hugODR)oy9TrZFY} z?Vj}n00W#U4xH{WD`Z5@CBo zx2bz5xDD3s&Mmz>A{n+%HrZD;#_0`#QgXR56=P2FY|20{E%Mz zoluC=7t#O0%2K}3G4B~4>8_-+Nf}JFWebGqK48z>b=EW*6=R9}T;aXbnGFwv=C2XI ziMZY?K+ij910-xB!moiO&SapEeEk8{|2|v#8RTSm6~XSdOBQDj$}j8aJKzeQke-od zkI}LusLOABDfN9CA&*bEJbcCdd$}ZUbdh3sWnCmaF8TG|jpd!VEXuzB)Qc)K-Q#%I z5+OS_nceqDRXWOkPTT(BJ_v(n;t>!>4}`fTv0`Q5o^5vubu7;i@LUqrYinX`i}(!M zU1$sTR|_O;4@Bg(I2TA*6s7u*dj<0l-k=mz)XVP9BUdC~ZS%r#;*+=nq(9cnFwz#3 z?fEa<2Ljo9z80Vwjbbtm7r8j7d>SC-smww5F1>EU`qhAk;DvwZP7g}u%(!Y&t5<(C z9t;{w@dBrtW|%93Nx8s}!b3}L0avM`dz-d^`ASSCF$Tv!Emz_3CIw&Iyp`;2I}DRE z*w(lV3vom{7j>)}7#tGqr(WXwsiWq1bK-iT-={$Pw(tC5*T$xTcS{=Zdc#*_Utf}v zC$qlAd;!%#b5+Zapsw~WGadWG`z#AY4seo3%3-^(R>~X{Oz~xYOB`T*7OC{=2H1^e zljsuY_k8*f*j@uLCa~ky^rjoU+dJ${qCNOwI@$|*hq%nSb~t^zVXGQIWJ#uk0aKAV zP0z53XB?)Z7+`Ati|IY2CPhdOpl}vZakw0qFhvx7CbWz2MG%j}vV$jx`$o9%1}abcw;t+OwSCK8W5iZJbYCp*zZXd=Ac99&23dl8227GLt%8NW-$Y#QZmY|HEq(+&AuOHMyyJwnv;49zc08|l_x;>4yL-8aa1KyQv8XfQgAc)~Jx0v_`bglSi z-gk44dyd?Gk%UVsaesyDK$?;O=0^BstjZe?0L)7W_YpiN%rxzvMi%zf;H9SZx4z!t zEw8P}SRqoXi-`;K;0W(q$KFHK^Y7!nytkH+7n_6hAA&e(0bIV;09!cBg+@yv zN2lVSYc!Akm65O?`nFsi+UElpJc#q*`m71-27d?Me^+m^4AEO{zofJUMA*B$;_XtT41T&M$L=@UYC^do z3NcU@_v&4V7qwa8vwl0iPcHn+@|a;z3H_Xn(FDXd_6}?x4vaq?a$gA+7$st+F7ysu>(9UcE*@CU z{V+bC2!4IGKKCf0N?Jsb@L@ypbTe-FeyH06@)`;PU!;dmX zG|%cSG7JKL9#uv=JRd$P7uu7DrQOk|yaU0Uig*hTQKP^rcGkepzta6nn)6lEs8 zT%&=~&Sh&k@9hfJdI`>&c;D}ciTif-&+b7~E|-3Y8neIEw+|XXv-iV4ctANNVZ5(( zwbL8*?dyGg2<@swmg_FdExYh!;M>&~QhQ-MV~=$8qR*ag`B?k@m4SM~Of)nz;U8na zk@E??>HYN;3ILv&u2*1A7>?vs*L`OXxvwZ^FG_ywkNfZ@=;0GakUA7FC2D>*zs9~o zq_<-EOCx$|`mOHWz^Ll`=1j^;Z2hni^K# ziJH(Kt~r8+oMa3^G)L_-Uqq6%yyy^9nw8PP(S|J#A)MzD^~K9|R&^7B?Q9Qqg5ij) zd@aD-05g<438&EEUEEl5#X=4qzV0Xfk{?pUW$ml5ZDvVdU$_UDIgB;{Zr#K8bf0A= z)!M&@J8Rqbkr7AyKD=$7TK#U_%O?$Glb5tu;VcbDDnmML{;ybw^m~R8$0qb~J*(G? zInBCE0NFYx`uo>Exh`04mq!EC*28g!q9^E3|DBID!0-7Pg?T!>wHhh> zd-lClS}|s%Ki+f3E(zvf)Rl*QwG)t-R~`QNT7ca-+<|k{V)YXdD4FvprI#nTWSt_w+GL(65xu_5aJ>xVj z8}}kX2_H*ak5=Vdhe0f_X??EmFyEA*DmeV)i*h9&DsnClL0A*1(`~Sxs}9QVlcbKo zkHb6m#?43cj)wl0i10J6!2kc4_qwRPk%uVmC_J*72k?vzqj$gsA`O8PzA*f`vN!s} z<86Z^=gBjg2c8(gh5lvJ>-&$|#~9IYEu=*oE>y`yF9E92zt_swEAX?re?2cL78tn+ zx~R894>z;Or4cVi7r6_O#DefFDc}3MmGJ+Ax3Fmd5uxO!MbvL`ihb-;d8S5je*uOE z=&kDM?@casJ2AGS)i1a>#WPn;@PpG-l^DV7tK+1p`E5V*iu#_oswi_<5guNigzJ?2 za!AqWCs(Hw^mKR<_n8LWyEVL zawa9+7rFL`S_9LxB}xqdwv_vFDkZ>|RGXRxdm(>h5p#$sJ44YicDL=h4oP5;8q#&U zUO^7@UMPyHI$PCL8{84dHNd*b@e+8jctYm#?4tfQk+&25l�-g|W0>^5^}*qq@d8 zwg5nQpp2+`%12P4<|E@FRHLW?#^~9Aj;?lJ@x+AG_x1Z$@HPlwmjJ0^evLBq!}t$w zy1>BI(Lda`^}GYGbm`5v|C;=`pG`i{x3Px{8=xLN3p>~O%*J0>%?TzALq7Xpl;ho{ zy9sNOEX?f*O-4qS9RD)JvzOQ)&1MdBx866FiHFJBiw`ddQGCzRb#N)sn5+13+YwG< zd-2PSe)Gae&aF$w`C6F5X&}1Rg`>8wz3V^x(so>M=wkW2($(G=A}WUVD=e+sKh- zA2^bPnzG@_{9WAkkmB#n?CiKgZbTm}w5;BILq3?}y>VU_?`dZ#OW}DRucmZNRj@#eANjV|80}FtV_K8#T7brL0!qOz5oDu+GQ9?3q6c(c;-KYKY@i zKa(yW;+?UL(%py5K|$60maz>*UZVdgP3706*-4D1D2wFSYn6ko;O*_&-vZW2hV7)6wHt;YdO*P$bTL%l)qnj zHE64p8X>>kTys-mU^rPuLRrmlhG&I$81Ob?axg@T`Ao)qc-QaQ>we!%Cr?x&lNj(y!N#;0(Piqhh`s<^H+n5^;x^W zn#5opXeyEcNLspUaJr(P#tlU6ILBg|ghk8rHis3>V{w-$(IBVGbZ9LSk>{kNWz0 z=upJ5usA)y_?^JeXeKaR#&$ps_4cCP_e_cG`a>4)LKU*5<(VhsqqA7^8Pa&NpfIFL zueKcZ+B0(s<5wK7vhYCScKP*hUh+DZ2!H8hNo-|T*BYwxRi7B@^VnGP9>&gu%wq@? zO$Ti1v+KHBNHOV-f7(-HB5aN^SQ8i-(n~d)?$3OW^c%SwLnHV&P~Z&MCa5|I=@6Ri zlP))+Q_~sP1n2iiJ-j7XWbH9$Nj`=7ol*paJ7p41?Fq9-HO3?1Am7-@#)GD)>v%&}{vd z`8C2d^O?!hD5R?Jz+@c<`{b4eAl%y}f%)~&W&>LGZyt0%RG6Q1;T8>;PWH&p+IjsV z>4cdn1uk*S<=@Q|@Fji2kk*9R7tG}a_i51PYczFV1Ar-T9>7$|PdQ;A*1+lUH<%M@ zZU;z`gwDnCet)c?sX55PYHgiXfE^WMV)8N}aI*J!DdZ0dN;dooCYzb)>J!Q?sMP!U zuP@<5Y0sQ54sT-;mX}&62@h8l9w4}1OjmSKny7@P8S;yF0i=iX@W}8HU@KBQ$2yZE z`}0)*kplhT>Id-M?GDz*QVXqQQ0u+*3EFm@D{eIT4KUg{3*LJX3!B(-DW1IbrXlYw z&4?hj4$h=Y?pEs^xcqJh^vGAOy*Ev9T^f=aUPkpN9)SjCl>WSo1vegU@Nhu?ByAr* zEX(2=%P?J;iny1tQ~b(Ydcsd#Z#AhIX4F3=l+9msgpohr^uCk z3|6&&ZKWdd5UHVtfTXd4X+WetptOUCn`ac8gE#w7x78KU14`oQ@b)&^0%U71e}~Mx z2_#Q2+AZ0)V#$F2JQk_~O0jV))U2Q0v)ibR!c8fECfpX>GcRC|EFOsKVtqsdeY#=u z6`kKNcq-eRer2JI%sGzsdGPoy?V8m1&bQ%9@qe&_-xK){tpiC4!08IfZ8Is<`?!8R z$vzT^a=c@#%SO8%+P+Eft=}DUCA;9~V7qN09pl)PNxmS+W|1TVy7x=@Q0Ttg8a)O0QZ;8^L zV~0+9b&Esu*#f1h(2)JrjUPeww0ADxUU~REJRSS)0-mSsLKz2is`8sa>{qx{wln`r zX$X8T2j2u6q=l&dz23&e&Q}sX@JZ25;zB;Y6Felkb@Mqi>fPRU?P0!=-`m-~Z)lur z+Poxeqs>}r*uED*x)H*^B#my%CcfVAlGi=P4`FJITu)m?xUev z`0F|PeD1gvN3xpl`Y9#i%VB+-55)^9u)AR1Zn;>Vj0nbuOZ}~Q2(hCuuhV^VYHbB- zyKH-^U(Rn?E_5y3N4%4qb?_w(de@wIbLI7Z`aO=dy|g{hEV+rg3j zCA#^(c@R?-TQXTYz2e_ixXJY}p0yZY=RxP7Yl8|pX&IB?<&fByUFqUXx2`}p$o}y( z2Gy*6%hF>m+U7Q@&^Y|sw_CuxGtb+4w47>0gA~Dzt;4z&(eH0ItDMs<#Ca%7XcLgk zCivxug+vZHvPZt9{yGZRypB<$3m!DOhqNAIx{g<^Egl%_ z>wX!AJAU?V%O^(4cTC(+9?Q^Ds7d{-nP*5v8Q+i(DX*Asq@HQi`+M<(A8u}hz!N>bl|uT;e7J*R+9SWQzo5xKy&(+&$*IM^wd1@U4Se*^^}Kpu1g-y$ri+yI_1F6qLm7Ys-EL>z$iW zpG>rTV#WZ99=|=7M8MDRrCJ90KbEevT{Sff|0VPAF-4In3He4Sie%>3pZi_=T-Q2h zuhk&&4$p88c$3J%)5>T}b6WCqtEXf^^Z&Tj4;rS_4K;)u4oN;(`o_Ea{WA&q4ZMEw zp=q~)KJwIaU(}WUpjWVx9`r!NqEt{;X`fUuc(}#-RYv!QVayMb4;+V@VUmlcGJ6{k zJ}a@f19{E8n9>VO6sv)FnAMVT-j2Q4A%+PQ`wB1 zTDNuvOx43D<4`&9sI0h4vGmJig@T^4QuPzEJMfcndXJBs7z z-;#xZq?NZrs*OL-o1EJdI|gGo1<>z9AD`Ceh0rG>$l@L zv?!VAAY=E_cs(uHqYwuNd4(8@Wq}Hfx79g3t|y_=9Hg0Wp{-q@ATW(JL|NMKJzsR2 zjN|?FBp|M?nj7Z&>mYCPOJ81=vn>65jpPo3wO2)RWlSZr655MabT+Y81o+WC4ryf zFImx0*JQVQkObtc3l7xW<8zTu@NX+9waR^;?U$2YLTC-bcPEIqvFziqg7|WUKe$6H zC?Sc@>3JW!_iVr3uRM2xKudS_T~`8UTof2~z|}Xf>6nqlK83J)ZEoQ4b2~fSRe5Ne zR@g}gQ)QaYr$4i~K=gKOME(T>)>%8Q8A*)v+pAer^Zn8l7UaBj0JHVI36Ay^Iu628 zBN=tkh+@ogsdBRV>dS)nc`*Z-3H-7;HgBp9#;F27W2{}u!}RGbzTdNABDX5{^EzXq zGvkOZ|Mkzj2k8BBGB~8E`VbVAY{YB*gP&PgX|I?F+d|kg1}9=*&Z`phFo7*4D8!wU z2V^q!`25niQ5xyBY_E;?sdMfzg4wbaaf~fOxs4D(IVi}4FJH*uq9C}nY)c|KJb5A8 z`b8|FoA{iM*mL0#Y^x(e9_A9Nc~tW`$jC2p7~#vHzczo56-;0?e(gnf@B1to4F8j(FwWs*skf z4${MPzJ?|9zSE_DzqZa`Pyo2x^7TC3XE=Qn8%=$*m7yf9RhMHK0mKB$(-;LAIRWFB z`W(bz*GKbSckpJecg!0;u`#|WBG30uz7A@2yvEguo+DQ6M{a_9({;()}E7NWt`2HaE(6^NRZc$A{z30gf5z$04e*kug3X%fW!s4S9be~ zR5_>F{0(79@AXSl5y#E`nhlo&WCoeYcpVz~)mT|fS>ow^6x;F4p33&+Oz+X#&Pt44 zFA1Ky*W8F0eI@Kh&IbRvg@V!0$2Diy2z3Cx@_6IEyz+tDq2?7SfjuI3Aj9T=Bujqf zq8!>q#acR3$FJI@z}aYkiArS(BIQ?XFZFhu)B;^Oye(aqT33C)f0Bdzfw+g0Dk~t= z;%_Ri;(g6pkFP*S^w1}=agNC>`+OFKB`8!F^|B925pC9ATcez{w_8nY5*GYgboeXgOl)1aNVSQZN@*M|+p9M1X zw@IrH{D-#ind_z^#Zg67`$vj-G=^4~7?iYRsy2hH7ENo=Pmw?1WJqoe^n`*X!N z)Z*$NC&VX9sE+2LU_Z3CS=*34d!b7qzjWVc?Ltx0Q+*!PzINDsI~bKI90YhY<2YxT z$W7E9V?L^rR;kjWgsdv0cq(oyl%!F))shP1L=(zqWGR!j{q$tovSXHN4ib@%S1u(R zi^)Co5*5xEcxiADyE#whtvgeq_R{2MF8S0$mzwvLDQOr^P5B0(14Mpre zp{}$$#mDPKyq9Yg1+O3b^!At5qdzg!OZxuAk-ZE*Kb)ZAC{F|u?BU}w-R0Xwx^~}v z^fL*iHW11ZAen|S%b=1R?wL=6Apt+SC9VSVSJa~bUFgvtDj2)fp`dhTu%|~eFQoDoE?VCn`Wzv_{(}N|d z0XJAnxU5euT2Hr-J7O#BJcNJR^?=Pv$#BvdX0=2kflQ4LuviJ1Zw{Eu?pgkh+=AiQxVdwAgi78At>xD9xTq2Pb>fW2=e1iW!C!o zU8)7OyIpH>B|ujpUY*f(6zmK4J&pz0VLT?hZP{Ej&EP+2yTwDvvxnOP%FtHt!8)~@kb6Vd&Z-_ALg;cs96Xi+_ zj+CoiLN$ckg1UJL1)YE`kw>q--lz%KUHP`l^L_4pa2KK3KZ|#;Sr%$R<9mI0Nb@SCanZXjP*pL+@wTR1s z2XOhALFTuAfj|BQnv0{g-tG^MZ#Zsenl7f!3;pOypke7Aj_9)_qz>citcWO zvsZB6HFpP`ug&V8>BN%18@ABVh&0WpHtjb%n{S;?yRf`YV%9v?v1^~Fr~Qc2X=om| z^|m^!lBQrbSWvLrsy2pOVaG}C;HP<#^p7{&d^oZiileurLk*1C4rTRZ zPLV0%-C!%%+|$@le>|WAcjEP&k6}D^E6LLRU0iHx9piWLE^btXdkd%K+W)=74KxGr*yWZ6}Fqb4u~jQw7= zT^PN=)4*q-0mcg1O|=>k$A;}9d$C87(B+O<{}lUq1r}{@#T?gz&p8<&(-$aIc~(75 zdTC(h*oF)gb`!-Q#j_y7Zm`8dd42^H6VgwL^64_%NT!i6&aJ@d!Wv110-8TbZ=*1F`5Am4}aaR5W{@D{siq{w~IzWkS{>%cuM_=ey2 zri6Fl{lu>KDv|fpp%dPnbo%v4dcQ=~_vZU}*JFJDwLS4GD*|=ERo}v1KPZ%4TpOl|ZE*?m6;>+T;+2rM#+y)AquMSz z>z77nqGWd#R|9sE!ol!Q#R#9{e6I*1 z1*?lE8L5x>wwKT5-28Gqa&5hd3}mt$KuWafu^`BwisQmUjy5JGl{38V)r~B7x8qSvA zm#6kyH&9@3wH33T<*Vb>mRDtf^y-|mE@QQK_Gc0~ybcr%e67%*ZQGex>h9~o=QLFH zD>aq@ zAP4g%pgo02ayAXt;T=`d?u=7cE)TAvA<|7p3rOhqJWIz9=?a#^>rwSRUh!&FJS& z9h=uRfQapN2OXmNT^=VAuO-Hfebxo#yDrZ8<8|}S|I|AJ8abR78;9rzakF~|6eNij zL#DZX-oS{wA{EC|TrUQ6D?d+p9Uc$K6@=hJ*Zb@7vmZix-pEbq#sC_;_ey63 zv$U(DB-(GDTn9XtK(m7JcrL9L{$j+eqh6EBVz%dl1VFDq25&`oA4diLS2DUQqI=5s zrkyeEA3z=ZUoB%1pS1mLmQ_0%Kg*24$ZK+0JbX!O446Fi-F&{b^t zSl+b89P>Tm#jiq57jloBPk2b3v}fMHKFsUIh4TW-`2+QKoc-RE$`4ymAkP3teWeR( zh6U}f+a1_#d^}`plS%sHLIK$vUZ0uvuCpxZ(0=x6vD$g@1^`&8L-1U7%G3I|vo}~` z7r$y8h0E;U5?+m=GOm*=vbArsdH3@-x|HJPsT5WZ6rJlGTs+8{fS0WJ$H&SKC3aL* zm1$Z`(jUJd|1aYZd z|C-8nl+@0R`iprUazMz$pPxl!_$86x+_GbLA_;{=O;NJ zoY8)JjpxHr5{m(j;i+!xNU=KRutS8P`Mk-5$3fBL%J&SXM|L z>I~d>}<~d^12DMpiKR&C84F z50Ruu+XRq|)*yYZ+p|wdEF%YFdmzhqdr(9A^1PSuwqCYZxflCV9FG}N%ol4aN3p6O z_X~S_rzF8r!qd@4M-~=R?H3!Ra{7eJxp{&Fd+JUFGBE5 z^6^h&CVaFWNi251fkt^Dab?*%%hA#MLLdy#Kr+0F>TyDobh=KG@K&veQ%e^%W<#{f z*hLh%Xm}cB3VyTv6Zrm7(;z2D&sCQ(@S*;q5PM@#Iom<+Qo?j-? zpHpn^w8+%oSNBWh(vR0`YUcl^)NQ@5Sv%;hRSOyl1H;5Isec&X&5bvTe_FRNYWtI9 zuy*2S;_o^Y37$s}YXWH3AIpJ^D*jE^7c%CwBP^Aii=q9T3*=emw0usiKw!8dEW^1U zu}=(Njf8 zdE0V>?Da|}+D4Y^+7wzLZ8{FL|*&G)#_ z9QiCyP`767U6>a_&&xdr?X82e)ZKmB?~Yc3p{$8)Ly^9={QHH;q-oNqKFA~-J<*(l z{t3VDSUn2g^Y)I1$0o|eAmrx(cNNN#|8dj5vRU-Kzn#A+X_6qTCL2s8e4Hb-gT*L{ zSmbQaF0&_>Fh7mfq4f7(@~C&MI}1kl(p96q!%qV=9qzR6^5RdRQi?t5n&ImVoF`t3 zAEVK3UI#TI>Z$#)b0gUl$Z@Xq;l+_Jf|`+fsPYpr94zVd)1)hD)hLhhY{5sUSM&UP zbY0`p$%b*4Ds;Z}pFkq(jm#S+@Z{|+z$eD)o4eejW(agv27@t&5|o^|Ybc={EDs{C zqq*kko(i_31xLO;4I%F$WSK{BW3TN<-(TRoDv>|fI zu$aJ-Y?MR+v3>gXxWg9ceb3pkiGdw`LFbS~+ER<3+#lzQq(C}FeB8cf;AmwXUpaSv z_q*V(-ALw^M~64Yg;Km4IXk^|c*2rP&+Dj}Vr^8;u>fhWUR~;ai#hY;rt#vv_vtM2BCqc!og<6wv*okebL7qLU&98A zW*5W-93T1s{H5m@A=~XE#bX&LL&?K0#r*&haeCo3+T;ACSkm3W>kqq+BIHzcg083v zy2rC1qk*l3e!x9B8pW0Qv60u-DLLn!XB$-mK9q){t_*LUNKQOzxN@? zYDnBbwis5-#gb9>$h{Xl{W+i5r_kJC+5IFT5%VXg!YOY_h#}sV{V|jFq*e~&&iLJt zOME^F=st(-?%@c(5Q>opH_UIOtyo8ww}}BUhWO*0up+iwU^qbEl~Q<(vG21=t-`b} zhf@LqS5I?g5g9qyzT9|qd(nDJ)R(5c>q5JM6yqCRorW*;K)4d=dp z4q|(63et9+gVKT&Oh97+<=@jYun*7IJ8$qY+Pxf7j%vAf1GPFs!_h=E2O{X^;aM41 zT~jmVGB9vslb?1(zh8fYV7%NfFp=Dv$tJKwI~B;PHCE(Bm*7kyYF!F%Rm+ z&HyT5$HR{eHuV8yi|G6J9Ddg>i$4!3)xY~xc>DW$q`(O0C`lbr2*Kj4uz5b3$F7dT zsE=@HbL_xnxy|=S*>dGEW)Ew&95%41(HvSi>eC8sj!UXBa?Y$;m9;OA`>0EsHDtWP zs-mGE{9AcIERQYQv!!QwkwsdtSoQJd8zH=zQmRjNef4VgkNJzr@n)Y6aGv7Z=43+|5*qm>u)M}^NBq4IMc!rSD0A$l(5*(IDPqc_mzxG1(|3ma^2 zs*x*5(3lrM0~CH8)vf#eNpuL6thlfryEbpx)2{VosMdMKp=qiJ4YX?>she6kogqwj zabF{xtPhZTf0fXE|60+TB2WS4{e+Xx1l2dEH#m!{tIeA~D+LF{+d>D0Azgk&l2**s zgTn>6$HUuy3*U~G$l}#!3Dzh)nuX^=dvV7$c8}#=@c^w;=+?>)uKL=NyzLdGslwu3 z!pWIlELpO6nPj^8hY&q7t7q#w-Y2MGrrDV^D@7gaI*Mr3Dg_{{* zX?Z*j+3~Q0JaiJ)xsplkn1TOCRv#pML>V2XDW6X~_`imkKTt9vj|eB`h4P|6mX-|4 zrdl0vJh~pdJeZX2dT-xHGN`3lLD%hq9Zs1w26Tar5*olkR&G4wUUCVb+;M&Mq*4p_ z@_r5A;tr;n2^uzQ{Epz|weW36We^8|gy#g#I)1y<-z5#gXYl)LlQ!e2xIXR0eLlLY z74;b~r{2w#-s%Yw9l{3&e%V=oO#}0>A%Dg>75bm1etmBwP(Xtt?^|Z7KctEFpk3uB zAH+g(zU3Hy^7rXtHCq(K7ns~s&gZsL(d(C7mn2N9pZ7BX`}bE9}q zeq&zbQs3OZdIg7zg7RSjHu-L(Oh2MWqQ3Y!7d-0?)8_eK-w$b$1HZh{cXsk(@5P|Q z;sRGX^`ULtYo43E()wY% zexXnoz5@7k>9nIl`)P&9&F9nnII;3)T*f39(V6|8 zl-C8yd~kG@>t0W;hoZe$a>_F%EGg$hae`_d#F)0zKHb_q)EWZy`KC_VoB!|=hu4D{)Ttocp8w+^aGctPH2Ct&Zv%X&d$ z+}KJz^$lWjS(8dz3iH0HEWir zfRM!xH&)9&`fdX@DWxg?+EBmSz37M8jNQ;iTH1PH{{P`t&; z-a_;=HvRn8^on*`UVjoF9^NSmF6m)ZG*%QXmKHN##s-E-ZL6}{hj+2b0mErzQ2%?} z%u{?0$-6!(gVQ&~>Uj`fFNGbk#)4E7p(;-;yfqy7pKh9&-x7M!9}59ZaP2Ve<jyil!v6d4^Mvl?uU<9Kj~IVv-W$EoDrZ1oLUr*_dGt{gqO})&#M(jYu@Ft zD8>ha{u#l?1+Hxntg1=33MDz^0$EiOz(3s#*A|@_^$drt{(ZJacKxwgT56jeXwC13gBbbrsXFd8Q8LU*!kM;uc|-}mK0hVsK^mTxh>NJ&9c zc@G8;gKO4IBOOl1Fy7d8SN>kljesE(-*#`mS&0gE7pLQKAh(DvWmOIX^`D$ z4#z)c;iN8A!8^9Icj^I=^W~?>1?)C&5(k476Us`z>mxbT@07W zZx+DAC(ASy`~U(nBVPP!*Yd8wJuBt!2maLG$Mpy8Br`6T;tnKO;yi8uts!){yyA3$ zos%1>{f|BS9v%7z?WwZ|GSGk$>9-F|S-!~DwGEHdTa)m&fNmKfSLd^Tbm#ogn@8`7 zMNm+rC%x=0FB=MouMKqAE`dFFC}#B*55TkT6;KF#y8Cx-yE??c@hLx5~bNocd`47o)dcdo9D{H_Y{>qdn z5)l%r_7D*m0q4<7=H`^JJ-W&vO)e3BK0p5S63~+rCaM1=eO{t$A@cUMj)W@LoBR3C zhSth00oY9S9k3q(x+$`LkJT}U!8a{Dgp2CmZ)5?)rMbp?^E#{&kUCpK9vB^WyKCLQ z+;E;2(f+X0&Kg5I96bSw-*5HxekPMu&u0>1;^zmS#RQdnslcwO9IiD*B4a$!^NJe+ zq_#td0?=QbACQ(PbJQEpP`jpot#9h*IxeJjOy1}6+I~Q9%xTD;V3?|!b>t{z^4C1M zT+Z%G8@pE5c83A{Au>oUtAP7F2^Fn0yj;lLcFx!}i%{8=UC*%ZkgpLIj%LMkvTj2`Ia7k zh}zGTHe$7x>+x7haIgWXBZrwt#oq_?m!Xs*I&{8UhbV&h{?1}yZvSR{?L}5UDi_!CkN4{s+QdsD;}bEGdu0Y&v2ICCHMDY0UFhC>iJBUSOl)bI?4qgiKWWdkqNFU z~nXOLK`=G+{Y7YR`7Q?&2qX1x?~N4q3oSx@S5$ zsmttEeh&&~?S9QkbvZ}y>w<;AwP{NUYn`VrB&hn%poz_zat71*Ezo}?mecw(#I5o` zx^Kk&In#;^yVmyoh1L@*dj)TS0DSN;0&5T2Ju%ZVAF&I`=y`aj^vHL#I{Gg6sZ$o9Cc?KQ;fG?{$yFEq+lcl(P@sgA@s z-#sHl)K#b;YBvC!U7?n@Q7Bav+U;5|d3MtzYZ{gBa?i21xU}&MzIxNl9T!WFNsvyD zXBIKE0ZZ#+*H|kk`S{p+mJOc%e$J>|DTDcVB*dr97_Q@obzRhqZa4HcK~L&Hll5|W zD@l0ik+|j^#$=y4!HoX9-~S*oyzQU{5t8}HfK|@nrjgco`+axv#?_s(eI>3?n9!pTWgq+I$#_N6=oco;#DPx?|f?Y}Vo8 zg>kiu_*xv#{wdp_Ar?V*J+Xcz)_p~0_2IfY^&=aO;GltUj*nvD|BmO3X<&9yowR%F z;Cv9CYLC*<%k~3ijkAB<;_%*gXi{di9{>#<$B^*!xi!%hE)c0=G@>;ypJ`!(i3$Jjn8Wtn?IsG$978avG+2RJy)BanfxK8EK7s&b#Lsy6Cif_hZ7=48wpzl&*8^> zQ1c1c`Ln|E+xySzNKS;E^b>Sw^x4FES}UmQ8FYaoI1@ji7*E~}*#9ZkI=QulJFEsTf4!IXi~U&A1&E_F^7%=yqu-5NC+wxzYdRwY7sUm!N>07_1-jBm42VVl0`|1);$*K*NSaL}<_6_6Z*ao9w z#^2c$j>^I8Bq$Y^v?aDzD&?Dm!O3;XjyB-1E z{Sb2lg{_aNFDWhK9&-W)VD{$S&YzFLmA1X@?U(60xAT$fb6oNF6(w)?zFCyK!Q3rEI-ah4z4*RtMgMaIw){}RJzfUah}U1K5BRXm+J^!zyqbEvnRDrUDEg{|JTbbaamvca4XqBKjvMyN@-hfVcfA3dqrbZ}zK-+iV=)U6{KpXK%rW?g7 zzEM4FO!Pf8(7j|Qn}pM3am}_nV7vVNxQ{jSTKP2OV2`pq*RmrHdN{yh(S@yrr1rir zf2hZaGk}4D=o486Drd3g-#n9u5R%^7T&}-5{-}rF+F?V|D(RQP7;*Z7Ve~qk${v6{ zDk59ebuKP?!d*2ed*=6|phI#6G)j4Y8fr@lyHpAgf33H9lZcUzLc+E z*C~BC;t~v^y{--z+l`t&U6KLZfBGT9wnl8Gw4qa)3;soo!IOG474M^-iu&l}_1$DL zRm6SUe%wwK)srp^`ba|(+g=W%;y9^|5y5m0q|5JuG zvO9jRr_cWR7I;ZDnH{~)iP**U+)S?;yO6eY^y#W*`#rZu57(p5CsTxW2aeGT@?}Q1 zb95EWb{^N)_3?Z^ji>j#3)kFm2F_4ORIk+mem6&Ui8)N{B%{RWjkmim0X2`6@nG61*Z0`1{-o2*FN|XL7 z9_9CgZPq}2Xpeg3uIj*Pbl^T){ll~82e7##9C?be_cnMxy!o>tu15&9MgthmrR!N| zi;N9npB2l-i`3aeIc_9GzxVB1nVoFIGw&O9^XJZ=nVqfZ{h=XHD~+=+7lFOu6l&AD zg45|Ui@d)3Dfq^xd+C}bPET{)lEnuoek*4bDngXw%;}>VQ5eC4wCStexyed_EAXNe zX+tT&vHYN2DfbNvxFbM!nUs)Ek?a_jyVrq{+n)}pzFPw?zBd^L-@F&dSb_Q8F?9tIDo zZ4RKqTEy&lf=sUKW(UXzcI^ZB&14O7B+m8o@`FHtbae4nc)lvHgwqcdy*nP!Z0A0{ z%#u-kdaK%#g}k++L&k6U`_LDT%4IKblaY0Dz3)>hQL z<*A39kv|O&*erjhB6ScypkmMm6l5jPkNeCnoDsW8k)3<1ev}K7g849(XR!-lCO^yUM;0=_B8xuG>(c+tyPI=^#RlvV zwQ8jPX8yM&ish)S({jk2v`{K<64F)xn;}yPKhZ6jh*PL1cpC&R)BTS+9#n_hf(oiy zI5t|hWd}20YU-o9e&5p$GnZ%=Zv%Og)fk%j;2%#G+o zipQ;NMDxg}_vtx`-5HvY&M%u^LSQ=T*bjRmv&r9xZ0z0+r0Cc@^KjtuQu3CX67cl@k z>|$Do6RHc1;t7dBf9q?=LwMe$4uL0DfAMbV8!x&lUj|vv6)0dS5ca`n-d_i(ew=(4Ahn^p3i%SXyX>;TCmgD_w;Tz0 zI|jNpes}i4Y(&wiespOkD;OuVg{&v4f%X*^{R-cxmq4dU;$2)rSSPg?O2Qk5mB9^d zG5qq5xBFIvStmmT(qBnPM^E zSYjS3cQE@u?bFHOI_4MK1{@^J-1iG?RS&Cvh2ocgkmI+mI~j_q&-g1>UWL?^ z3xQ-WaeG>ncd=eAC^pOJBl03-E~4zIR#Q`4+pJ*Z?b~+p&Z7aMD6~iz8#F6lmRR%Q zB|XnKaqY=a+HSBng5JE(vK)=S?<>_@Yh6mxkr%lmx=)&zNPO`5+B-GL=P0=PYlbeE zNri{uoI@1zmdgNE#yUQwv0l6p_Rr!}M1qdYTV+_Iu2{Qz4*X+RM+UBw5tuDZfw&2|yx_ z2i*kP=EF0fFM$?i>(0AL)c{q%B-Euqj3bq{PY!(R{xCA*_ly?kXM(-VtNvo4xW+n_ zj5swuJoEMo=q&uM!kY|T7byc{qr?6) z3q}!rfW6aOf2W`AW%l{nADHf$20|6qFDQynr*%KFOLH!caL$da2b>S^Md1^O!~Hf* zSq_2j=19a;g+$i?5Ff` zoN6DeEAjc_soVy}i@Ro5s5u@?PZDli3YV4xYu-WFQ1tpLavVudtUs#-vzH3!+}ruj zV4HXO;nNcDG$a5*2qtbe~Fha+mJ3gwhR0c!N!sNo&#e174f` z$$j5-GRX7ig*T`IOC6L^3$WM?{pL*gtM&MU*uRVmVnoe;nc1D}#s|KpwG;ZWrW?lM zn&S+W%MUuZi`n*?yGiwDe>_Y&KWt(i?%l?Hxafw8=SUTmH5PJTKsid$UhXm;`a2Ya zDRE^c=S;%-VPqoye|@K!>c{o@ zEGYe`Lee?E0+zKR@A(ob5Sr&U_c#B@M7aj=Vu|}~4Y;${!iM0N1M2iTLn-7^4MMQI z>4#HnM5+ctN%-IHyY@j=O}wCY=utmiPP?oSpp7wOs0I%E?K*g%mT0G-XC@s$N?FI)gs{kd{Km=@$8GAx>mBOQ#2NZ z<{M2Ar2Or9n1MzH#466k>-qlbBQYb#yUZ{95`L^Kfrq0W*4Lp*5cCiyM+Isl_O)n_ zeJr^TJ5$nNn`Yq(=Ke|0Ebj~N_(!Yo@@@uZ3Ij%m zcwjzXSKHk>CWUQn%<{vWZqzlJgY0S?e5>AxzfByaY&1?m4=?(*L9$-x-OuNLw#B^h zC6VO6;6+(1plLvv5L^fjEL4nE?ePh+r{ITNR-5_=%}yOD2D}|zm4YtJ;!k(yjg43H z`Pu><3`Kkx^%$_~=HAQ%FMt~<6Wz(}dh(o1hQ-kdI%CQO1!n2$;D!lga;@4o0cJ;q zsewq?KBspBcepD(=)Abr@>O zz02 zSYKkPaLv~UB;C}-qquV;;6qu=R;_Tqf1cg-Mre;pNz1eorsc&v)PVCH+XCWo;ZOc8 z&b=7?2{oNBD>yuqGrlbSHZcTIKO^iB6Aq?Fl<^&xJ{mLme^S z+ngl#uvpw0S=hv4{6KR~Wl8wLLef-7RSBL|p)_~=B6U2~s`d5CE&XXsMgg-VFw!r` zOHq$RSRi{XlPv+we2?S^MfBB=4vljiG-l1kue+MIDaIi{gKehwoy7b}hL#T>7UIm* zWy5AVK-L3->{zNaFTY0u!&dOJE1p|hpou#l$Ng2kOp_=Rp9gm9#dp3swp+4@;pZ_o zJJ8_uhnTpf1r@*cczC9tDEdszFl>AqnAPob0p7Y7d6udVqFH>8GQ>l0<+Ox{YgihC zJlE-|C5WFJAw!_^Y79#7TfS|Qb_Y9raKnKy&dyVz_6`_Qs+HBTJ8Evc?pAbBHT{_l z!o@0X;0?L#_r5!1NjEv?^#0W)bJLMId8U(Mw~(h1PwdE=M)osmMmc-O zpDHwbsdZy#LwfcbYOZhAdz**y_kA&LLhrwG24PlZnp@O|?KcGJ%1MnfrO>q}VPY7TBUf?sa=|~=)gDvj{=OI&OP(){X)ycMS?`7rH0=FQd`by1Y z5qu2vAlqk5o$on^TlvwS`se31Zs=POlAO}nQ{%AR!HwbIKC{l6pEwmlkmdjwzZFuP z7?ZFFKM^$t)nQoURoUHlOBpS{`mcadhF(Sc=CG^>l^3qM5Ni_T_s;%V_hq>{$v>B3 z5uD(3VihAoDU{-`-#nxt{(27Ut&GzaVk06r`kn^bLe#mfnQj63QhWV3pQUU-)8t83 zv97;~_o5ul5mG8O9a-K_6%1k+N=0>*VPM7R=r4lAX}ezMf(AA<34-$m9BG z4rf0?1xjV^vko0R(DFXi1UvS~#o|Bz;Ds>Mz#37D+&R<0K8tK%ParvL?$Vfsnca_UWK)$kmDpHFEz@cF0!GNMHMuW@~Vta zO@t84Rc@Hu_vkm@bc~)G+?2eg9g56w9au+oPE^u=LUg8K_)j2YD?ac}xWGyhRrIr1 zZ_;(RqYfq|!Bhq}B!y!ZXl02+^Y!$*a<<@Bn3dYjsy)@8i)z!~-Y9^`L@D1t4y)^$ zhj;ySG;fFbt#n-magIMWu5bw8?|!{O7j#V|X9|2dI3TfD`DDBQjQ(|^BSn+qMZXA( zs?x{0n+#$Qr!32D{#iTj&K%YAR~Eb-3dCdvG&yCdeH(p}{)H`A6X|0i;0@r6z{=IU zuR3`1-$GC&n8R^>v>|`izfc0YIc$1~P#Pp!sfp#X=GAzZk4DdW`E;!~TK%j#f4)9( z6EzaLA;1DSju8VgpR$`tR&1D0D8~In$ReB9lZDHWIB*+xY z^TLW=TK>9A`^lwIBgK{V=`!*3^@l@>y+lE8LJ4+cbH$!;j!~;rT{uZ>51P6<*CP9JI^Qec zu3E$bpBDwWbGW{hWz1)iQUie)Vvdk)7hylt3088S!^g32)LYJU^Xn^=Us{7L&gKPo zk?h`|Sv}r|K|{#RIBpX5yWH~sbQB_Nbj?1h>g6A zF8|9b?{UJY&>XpML?wNZc?xRmv_3Kjv#!RsvOtIviCVk6z^{3syYtFPE9@bLFnhN0 zwjj-7A5tBNsU1or2-g~qoICz|&G+=S-=uM1 z!D@#^^$PfW|ku6N=Sru0?dAV??LMa%{GKjV*yv;UfV16kmdwn{8nmz{fpnJOd_ypSN?Ok3K0U}p zQJlOyto7IQ!O0S#Ophm&Y;tu8uLQfHCbBaCY}fsj3`B-;z$5aj7x$T{$44{o>W1 zh1x9ab$zhzj(kpL3E$sY$iTf3NiMq8uyUfUL?;tVxPQD%w4uf#lDf{2Jr3LWW%Pocey7kfzeUdN{)3hyN)<{41T>kAT7x`%>ba}OkF8{wAQ!-bKoT=S19XUT{C`kFL2eu z#AGEM$?16=B}W!KY)qOrir;7O&8cZ`HEu%P%oCWIfY<;Jju;u? zVfmFEC1?frg9{8zZsDB1%S(UPn2D@?g&>`Op$lNj9sQ=o{VETMb1^#YQg9nkbG!`q z9D;r~3^tvps4?a!?EhBYg9Pp5QczU{9ob?%kz7xx#_haMt_xOtb} zULJ(v{#ZJMy1KR7GmVvcfPAM9$tuq;U>2l_U-QNvajEq6w6#qkFD;~sASdo+$A(Qn zQJ+`J64G-i=u;r;AT1VmbT!85t~gWpkPREi)Z_V8EL2?Ye}rgXl=cf|fKk0ehQITS zB|jE|q5|C*{D#YfH+#MeEzVw1DM(qycd67JeotVL4kS#AcvQVVFkU|Gg8?`<`+OM5 zYrO6osMRHyZpf~g!4?32P@*4jI_cWV!`tBHiBrQ`59~{s+tFB-49$KDWJpQ~)RPtC z?lt6h>weMk0CYxEe0%L_0f$JUPB@m|S4Tv@O0h|aF~1{hhk>__ZLC!m>CRH8b1?t4 zH!wf)3IHh%k=uLIkdwOwHxDP)`wn`2BWqGrIaV&v`hJtN)ZmDUIJS zuvQiRGTBaaD#|_knnLz3L^XZ(u5ieQDH@3tmXj=gt$>7!aJpLlbUD|lbJ}0#JOIsN zAhm0+vLMv5R3UB2`0bc?e44+t!u>#%i-d#g%ek9)+vf?-*ZX^feNS^H@skqZzP82N z5!pZ4`;1Q^87Rl#;dn5fmtCTbrK!!|k9R-r!OC2A0u({`-akw{Dw7VRXkHsGqq$R z%oda53IQ?$TqIn6JXna)6Ixw)a`;(#TCqz`ewb865nRAc^2~6|PJDYk-a$cZ@La+G zEg?4(Su8GO)gtRm(f-5^9VsWWVD3>~{a)P+H@fL@2`s~qj#be-(1g9(| z_{pfI?RGBGy!CvH1Py4|8`Jzbi;!+Eom=m2qtF~~trH01(~TkP$pa?l7COd7kNpmT zm>cA-M_~_#qa&2B>J<~Y`ubBGd~LE9-J;sQ2Ux1qLqitCF#TPEXwK1Bgx?@j_TUWd z;}4mjKDoUfknaJsFrF-z6wOh5)I!axoVnNSsl{hGtoZ!m5;~W<2Xqhr=h4#Z^q0TB zm6738WML=zf82cV!YN(;6hYB+5!<}y5*shT^OcKv@w2Ontw3ie9?OqR2lkh*y3&>W zih-ev7Rub6^+-bhj*R|0I-%Op_W8rBUahnoX(@S_^VI3uUzcMzv2tFz$LRa+remiD zWoV&kf6MjF(nCQbr}fEP;QYKkAbD~4>H|eg$&ULbYW7Bd)ex*yw&=*&{`50xnx6uO z{>IASBw##F!JB&Q$(F>8qR0q(1`Jgn)~WBOCC=QJBEf`8CAvOHNN>aO_4iW0V*rOK z5klqpD`NN1Q%DZZQJfvhercpQC$M_3{07``4J<`^!E# zoT@xWeE5B<*uFa&I!IvhiFd5N?+6|0wIi50ZY%vBId09~U!zAINrV>h!u{r4>>K=q z!L{R{fcZ-^H<2lR9+YffRhT9HqR>E3T1{q`g2kWF>Y?{|TVa&c(PZIuby2yQZl*R9#gJvGt$FDJ}m!p(8 z0cz|X_Mr*Xo{tcD;WqK+r%Ao=112Q0M16}?tc1kAnXW=~-VkQd8GCEb9e)w7!|(}@ z$>THxOrszm?3;5wT&0JE?4Bx5&297#)p*gRcBbH*+Tl=k5ZbXR9uLNHM$sX+Th~up z(rEd-A9v*~Y8S*z@`I1}hqq_HcgOO=Bw9SP2|x?v#%7c2v8Q1E@RKyAJkV4eYWAHT z?}f3Fb9Hd}`|{XBPyY;08&F6^P?NzMr8~44G$#*b$`h2be4B@p(^)V=-kEE+mbWtl z^GEz8F;i7-8d(eUUH@8eG;a@-?5OYiTJ?mFtp*@;O0bIb7vSKGJTv-+r4DjVr{QwJ zW}YcGwwA9@^OG3?Rc#Xf9L#oSbjD@v@286q7tj_~5=;OeyxHSvA4GsKN7H1Jf7VCa zYAK(=o&CkYDLt;;KYZmdDlL!R8O_fcxHD*UITg=`g9c7tv=xW(r9Yl>lNR=bT}9k0 zU@>O=olIt9My1%aISlr7_>vEqvm))(KJH1+#371?7E})Rz^aO;Nm#PLUL8uL`Y;*Y zo*xf0o@%!@{nmhRUaGrnmpP@!+B3gj2dgIdV#+OVFT=mG1EmsSn%@DIoRcjaW1v9> zZ|Y`SU5c#m7~5<1YPVxac3s$I=(q0%zufuu4OMiax5vZVEy%z?tyKwMhlM}#GdLx9 zgv^k;S-sU9$)>8;>+*zYDa>&jOnTwFwQcaIe!~0uWiGLZ#;f7xXyq%TG=m3+W;@hn zE-A-0xJdGWoES*zKX3D4wny~vjOQaj+Q<80wZ9g3jODbm6qstM-=DFcRGS4qe`Akl zkcAOEyRhaVR3NzYqnDqa;pSm~Q;+^28uoLIIo3k+)nN{)q zUXYDntZ=&HIJoyzM9w*~`!JB^_WB_B?nv(`E!B)|T+;ht_k8?dkF}>x!vgH!w}J%J z=O8R3fr>hJWxl&FYQk)-HPPTMT1AeqRUfwn)tzA0+9z^M7)5H9mbJj{$sW+}ibHh{ zdhH08J4${;VM;#8F24ty<-hRqTi|KbDE8agVYbI+fc=$Q8!*d@UcIYZb>io1PO&6@ z*;sVgo}MR7*~nK+H}I~>I_vm0Y?XDkbq*fH`0vB24(VSD9PB3o9})AqgA3W?ISobJ z1p39UJK1H%Ztb{Jxx{6op#6FK#y`VXdF615504W}Y)6GhM26h*;y*7R)4OI`xBlH! zJh|bREo7YPp4%~~QDqShr9kcNeOelCgUrNWU=3IEC9f-zW38_C5B5W5TD>_=x&AmgtaEUxGuU1X$0IL@M$LMXo{jj-FXEc1YNoWLm zQ`LTeAlo$A8})dVj=iuMKB%JZ&yQ zA;ITWqz7BFzVc21Wqs``YwSMII>py=$)B2P5;kul5fB167y)~H<` zg$gJDu0;%_->*jXj1_8DoabhH&R+4HlkrFMLbyYJ zlkv;)Ll}CoS{&T8hA0A8L}jeDu=MSa$rb5F*LUyqS&h7=44(#s_Wt#3YJEs_UM_oX z+#kY526=JL7Wet(_Q*%bzll7E@Jlm#$X&8kxz+Jdi077_ zi(y&mkKCEpC2za%jIszbVwy%Ujz;gxOM-y;jKYm>Lxio?akVb8y7+ic${Efy89f+yN> z>j;(d+dji5i?1h3Tf9IUuOCCJ7=t76UAKqajk)a5O!U1>q3xr~$f)=tknvU(>r;<1 z7|XRRnlHI4Wa$Z%T#!p5&xyKP9cnw)%S&OEJ}kqi!jo;>iuc&twreEdXfD$~KA*?`{6x3^&3UjPbX@!RvLFla}1H{fcj{Qg8e zfzFa6{8IFqq==y|@B`im+`p(NNI~>7pAVT*e~rEx58UqKn=<-$ZHr-oL=_WIEGBxR zf4}NjU^>s)3tPZ!;-JMEEn(b3V*^$?v&2SX_d2I7s>qSeR8WMA$2x8&J=-h=70h8u zXvU#8{;5aiw%;}J-u^D%C&B0-H;idOb?Ae*YKt_$z7jPWi6UW&vb^6XcsYO2_EBM> z(7C5ozBUg~yu$und3s@;M?pN)ivIgs3T!Ua18!LTX2&vzeUTcX$8iHhu}a-0#D!IR z3C01}=X~ryeOk=?QYey}k#YToUo^aDKdPx#J&Y%wr@)lO1x5SmBQ;Q_E_4b&@7Nu9Wvy8c4OPb^a=w>~j4UW7_TuW2%AaE>!-|3u(8hUr77mwvs${)jfbRimG?z z2kf5-r8m6#s2ZEoLZbp3mz{NdoUlmFDF}G(3FQ)nZ2Myy+RPJ~Iq_44ci}U!Fpqlj z8+y+C!}s+(5*3vWxCWBwmBz^Q<7fmBHyx-gzPPvBjHE!rD>g4xhn1Xed*Qo|T_3>a z)?}Zw?g6}>c2UZ{3z6)dFQ)CySQqin+hr8R$35+B zi5WPG@)PzwTr=VR`jKy2?5n;~JRvE#sYaZ|N9!8Gvg#{;ebRfY8r;qaG3%**n~NJf zDEZbw4#;5a@xC-63Y}E!6>vH{BmzF{c_-z(#RZJCEtmbETj%SF80&Ygk_O4Wm+-g_ zX_>1E=!oDiJ{|E_^{BH0BCn9#jp8`Hl0>*74(9VJf_S)li zqun7ghsShC&cb^AewL>yd=96}fp}d<5&zmF?70VvG1Y?Oey&TwXcdX#6TTGFS5fG6 z1UOUWrFiU&|Dgv9?|cAq1HY*0ZV}P&(f;BbE+DNf0Aw@47A+{a@TIY9MJ4Rlc>*Iz zWp})8pl=;OUBDEt1O}!Ol}=k&4f{Bs8P0oM6?1 z{6A@zQuPKth`2HI9bLv><;V_<*}RC?t^Qz`cPj!aiRjr($QXIqWI9>%)ryU6W;Cjz zkJ?i51`(~RVXKeSpeCzrcyoUo7)ZwgmzjNFMg{rTU3f{YUY^>-L$<5R3CTdgU z&#Af)g`J+WKa!WwVFziK8INrPjKJ4xaM<0f-K(0|Vty}*MLvqCj=#P+=|vrW%~28H zI1m^~TBV{ulN5*^xYj|)H%dTy4*@y}klyW43V2M7dhMSo=Y3N5CeY;l$I0LN-B~`B zR-QihlRJmYlD=-@mASX_yQ=M?+(tBlEwKJHWCFfuk!&B%F|H@kq#y!NS%m%EDU zHzr-_k;OugNdoqlZ!q_dt8?v`G85>FZEB zz?HlrbihbAxv_AKJiS$d;Ex64&m?eV+=Xn=%By!TeF31Sx=zS|(N8SSCc3xOjF0J? zDEi0g3a^H z%&9uI_Qzc%>qAmpHeG1@b9^XJ&ylDHfAG%dNE|JvG2TbSrQ%Ir_A=nEbW%l|*C@g$ zPw7lC&%@%5{%MdJ)5S7kOp6#hN{unBGUq=`swhs~hZVD!?tc+%=LMJfo+vUr);X7I zUKi-BPwKSk zSz44DnT|LkWlvtpF_pCm_Pg2l9O!jB7XV*M0SOfV7RM6h*?2D?l(v6 zX|if4`+@tbmz>_6fgM-Mrk5MmcAbpAdQ8?(e5%2;#60q5Rrg9CU-9zo4~gAjnQ6a^ zw)3ppLnsBymAK;C2FVh?pnS;`L&#aYua4(JG!B3*jmtbj@ z{FxRY&7k#z-1LSMf?fWhoCb3o)V*X$`QZ%cZovZ7KatuMcDgXs+*y@l;MPybBN}{mXL@GL(n^x1}>)FKiOBcNdb|p$_ru=sI+zAum`n~Dz z>wYOt%JyK7Fm_z4JqssfNA)~v5%IqI4oMVb-I|pCsf<9Ap6$0gr^-HUof8`Z)1GYP z%z@0&zpjOK3->$Mev#F7cF#GI(qt#5ZUvfy)7$X;PNBIo?>Fux>|dw?_Fb)HSBj4I z_VXh#Zu~IZ9Z~_VatV)c!r~C>0h%yUlJ?;$W1L=X&g9ko7Tl{rG5@Hc`9Z*n4j4WD zR5|qzGezQi@6Yt(GVW#zQ@W@uymn7cn&+QZBR8Ij{b=Ewf|j?-eqBEgSxvboT0Z!1`e#I;k+&JuT!L?c{Ur<`X(42&f5>S@A#y^sn0yp@d#* zAURJ*-C;F$vo68St}_TQ0$sRO*W%WDU&b-=SWz@b}^^72psnU^8Yi?8D%@ z61un050o?@X3y{9q7HU#e1mv*Qy-JHUh?_3S8qU~g$FXtQ3;hor=%J#f~v_d!g6IIuO^YW$qY@C^$XBzf~aj%d+-8{V+o4!9N7@^ln~ z;6v4<2Acnr$6)fEI9{Zq;^hmo}Z_!h{_(qZG zG)?x*qfXgr?LFk19(ZUYFCOJ4&wj9PKt!oOZAz$a=t4hC;A2eq8?qIs-n-S$Jl?r0 zm%-RrwLg&iKnc)-4<)P13SR{qX?eK?cK0Jn*M<$3&WXQj^YA-&9vt_Yv1%m-$#O&EtEu9PSFJ`@I?N9>NEE zy->9?tdt!}Jj}xIqtK7H&Aw(++JIocJzL>xD=R0|jd#!)j!3yio!|0=7Zv+eRlh~Kwvj;ji zUAYen91X}x7}{u~g_cg3$UU6c)B*Y9sYjxmH5p6W_o6}k}H)xKyaReyby&cakFu;o2eKMriQa2zj|>M(TyiI#eQ;UF6GYIi6iq+A+?2!m8> z6r6gy-(2^;0s-t>CY;Rhc&a*nvgba4B5j>#w(9KPi~H`+<=oh@NXF?3bW}mQ;;?G{ zK(4ko%}_h$e@iyI9S%yu#~%-Jc>HY+HQ?ulo}sbH$z0FT9;Mx$*ob}ZG|yM=6gYrk z@)(yo=vnjbHSdoH_z?g=>aq&N9zr%MSfblz_>B3-dKbSCP`t<*3^3o|B>l^`{QO)F z&hsn}Yt6Dz?A0Xo4RaPpnz|sl2qxKQG1VV;*olh0_H_$%QLdqRo_F;AdlBzP+Wywe zk!b48GOWDogk*Vz zYVlf~T|-tcb3qx;>4Xnys~54{wKMI%V0; zd3|qJi7`}B`O^xW-&9%AG4&Jk$pdG=V_C8)7`I6~?rQ=+)nWA!3|C?FAbp_@UP$~? zP?uHDOMbnKldc#Nug;dQrO({hJvBoLAY+v;v4VXU;|&!X7q`1SiK4JS9KLO#D@{g1 z0D;G5)EPL(A8y@z zj^r+epkec9SOe2?ooD@=OyctD(=M`TV&R(NL@K+NbXusdo72- zuq7P>@vD~C5Mq%I4Xz~3*F(A@oT$d&-r-Tq=-gHhZNdK~moM9G)r(d~IbqUaBLZ>8 zdA^p+HYV{+=Ju)LqI7!>zAu(Lkc+$V$<%Vw0O~B6#=`mz0qPB1hJ+QQCMt#PtfaPZ zqv|h)_7k{A%kbxt?nkKE(LuWMh3nZL)qRl=>P8=znVG8Np@oCPf+H|pbx`8z1Z&9% zZ9u>VC9qtAKyeP@?Wr1YJ)tg1QKYYGG@GGA3k>2B6e+-mg=A(l&pilu+vJx6+DlPg z8Q#$1h8Aaq*1>`e8Qufp19jLW$72AQ%foy~WLu%}q=gHr2OJQ7_Au2NYyad{isC9MYy|&qifv-gcq?1H zw82NrV`~2KNW+_WVF&$zlh&}-4z~9o@E@&_4ZGmgN4(qwU`V`Mh}#&;4*r9`uVBeO z%^$E~u61lJFQt50AM8P)1Eep%C`~OgAa(FBhAW*){IkdFq9|2Pzo)X_Ph)zOjQP{U zO>-)}MdbWZ^PV#uV1?A-zN=BfdHv4bf%VuX{edm*?}N`(>$kmlPippCBr{}ecc#(V| zESYK)g8_Kkdi)){)AY+a5ed&IT4^c%#@invw4I|<^)b$&bm8YGnVdFe2HshvrF4Do zF?~|M<0Vva_U09l-hXp|4?k#-O24J%ZlwNfrO>^oox3f@`v#kXRb+4=y(IT~NGHC& zpO5Z?U+?00=nH&fwePJP*(j+uY2lSXToq$&P9KtGxm*q}`Z|=WgO~+9^k_`B4k75( zEb|zRx8w8Bud26=*G)dP>2tB}XqU{shh>HVK?915!gmyP*?v^9q36(z-Xrdw|t+6h1U!#|@aA5X+y|a2c znNFe5dV!3RD}5hjrsSU!vRLeRP0;Dp$MbR-9tYSL75um1B-=!R!-NyPW^x7^)$#Yn z=UZmiqvLnRa1wZ?Zap@hYnP-y@br~~ECObL|9=yHYu5ep6~EmYH*debx!%ElP_(OI zv>6;>w?BDkag4huseaYKZS_>9NZ5rwCNO#xYVve}P4WM3Qxdqwp_uJzF6BVO7X>dT9 zH|0s7`#x=SvbTS*2)l3mXX$#LL*9^K3m93I!B7AB=~5a_WYC%@Q11~zk;sqq<#h_SCyAj}&;Q)JUD@1tl>1S3DjRLG#bD<`KW_q`v?4!34k>+68b6+pm5j}2x^&m2 zoKKStQaan~<(nQh{lHX5=?B{))*a8q=&ptl)T`z`d!@aOFm}4DxY_j19L{bM)*>^V z{cvll>y7>#B#bPW`_4euk+1O?Nsvo`!LoP?{ydkueYa2QUwSzXYTb+kva&Ba#{zUTe>ma{L{E(fPGF=2bh2+VB<$z`E7{ZRZ(HVI-> zEAC3l^!WKbUgYaU7LZ|Q8W6fiu^QiHv8NL2ueo9hh#uY^skG^0Q4@m8?P9dPeN@C> zn3EAChxw16J|8D_xL%|Bzy9~V^9Y57-(LjlwJYq#*^SoGBe&iCp_AFqIKa|AZf8vv zRP8(agYuD2E(RO&*%f>%A>#M}#AA9v{kwmx-!WcZhP)^;hN9~KjL&sl18^a3@84sI zZ?k=NUh}!wWnh!QNOaNc2Ya!NM|!%a827qwJUFjEd)L7CD(o|N#m&UXuJ-3o8sD5p z#*^%x>cU%_6RY-wKmas@C9)b!HCN41#kedPWEM-v7f{%t34(cv}vRJ^C}+^ z=jU_DNqtZ1ah74fpNe)X6b|YG(GXuyBW~=SfsXsfKBpVMr0`F{XFFmu&a*n`v}Epg zP>H4I_^>ILJA58PD0yh29hW?h?({4){nCXq*;RB7v2pMWWlJ~)b#K;UNc{D2_O|4g z$vHonMf%P~IDFnH@CkQcemG{+XHTKD)d}Tfc#jbIo!!@$KlF3>jZ_Q`K^;RF{@`|GNLzR>z2s*N)C>3?>|4`+_?nq^? zMA1<`5RygErOPGcv*#5}wL%56~0#t0IY(bddFYk!;_b94FN zdb(!y{r2XR31GT!(4|xw!ph(R*XCLWXZB$|;JDFLD3(Y0TO^aJL2og;6d(Pa=5`kC z571zxykg$PPuBk+^TxUq6h=M*fSU=neyZOoSw21a6O7fMr|S<#!2=yyAs(GNYr8$i ztEqrTNk9hD(F#t;(V~-r+ZM?s#vydxwdkHWlh+d2<4qbmGt#9391y!(ztI+g_prl=B=kScp zy1W*16sX7Wlc4T*hH1)!AO=;y6<_N&Y=^_NsrBvj;>zEPS_S@;b7Zx}4<-dYZ`rZ& zf|ibTDzL)Pn1hMtS#A87=vZzcsa@0(oI`c--W|zp7v;-0#Og?$xAcQAIARe~*OytX zWoBXkSkN(dQ-NC)<+M$&({#bxC@?lWPI3)=tYL7G2m9O4J`8{tK-H|8nG^Kl{FB8h z41F!yuB%0AAfXBTYx?qQyZK!o+ch!axpcs6B$w_X>mB$BDYNTV)D6x{lEm`O*Awg? z;J_chs(J5CY0i{Q`s~Lrv|1t{-uMGH+M9a=+5#V2&iH3>ojg@J9U^2fFOc44h3t5m zdZV{{7I3ZCCsyGHQG1$d5~YxZ04Z$e`dHw0$d2!6@v}pQ$VRuKcXmNu``kTDOWXZI zTh#aO^J8J0uo|Ks6Sz7F_3cfe?bXcwB%aykp>^doXfW13Af0|I4FN|6*7E#`v7U$z zftAVaRxz6}v?S7lsw_IgcJfw4G)cetS8yet%0n_(Ai%L{J-m`T1(GjQo#oR5J>@l~ zVK~A*!`qYpWELNnmbcZm_c_=`Y-YW10+9r7ue`6Q z?!0DMYVwnhXA6nptV4Rwvc{KA@Kdj0bnixVtCo59jEgu=khn`oN#GU1E#ockNkDtw z#qT>Po*jA~C~*-F}^mE=m>kK@VyBCl{%p8R@z z^cB0ER!Bh8%$BF_F;3`Bc%Y~C1ynlo##99JMVkMR5H>~$-mWqrC`>U{awwuCuX!?m zbSw0AoVp#te<?|{^C)^bq&Y)6=ywj=CdQl2mAD?i)8%p5k&pZat2YN>8=fT0vD4w70OJ5;#gO{x$LRxj zQfkPsV=x8g`h0GnLN{NzTDZMc2F4u}u_GGex~~XHh3o^g(jK(h{(*iWeM1VqK{2RY zUno*^5f%EpHWU@30yx{e+$qIBU9s|9!un6iOaF|AIUcPi^w* zmjQdI#PWrvfc`b#_{MWzoePs5ag_R3WCcpN3--I?^WW%`InBl0tPj4X|2}A} zv_m&h3DhjmBj^M@B5+j`H=fskY@bwo+Dm#d*7n{`rKFU#!ph2X|ANb7>C>(0??{va z>l62nu;F#ug!51=+I6~piCXJ{+=PGWUa;U3;7u*c6e?LdBkYD?4<|dkc)(}Ti?vek zOhB)i7h?+0X?RQJ!3(VhJyr|8W&dWqbvK>%Gs_1<1g;^&?Mdk5>^OSONJ{d_2lb9Y zsV1#@oKX6r?O$JJl!_#~?sBwY z#Ih+S6Tf!_?5fD>h9ZdOsiX~KDw)eMILWN(1g^LL@CWBDwai~U03sDiHRG=A-cDi4 zkMX8-Z-GpsaW-ASPkl09dn&J@dB?E8kWYlaoeVA9VCb@3lBLazhK$J&+#IGnqt}mH zB6%K*8<3hjFl!zlwT$zgVF#D;*fpu&ZQnNt>JvCy3_N>Te&_+&OSl&_j7s3ancimx zb=i^fQf=xqme;RYdP1ELkG~azc)jc4vTHx$V=OOZzRCSzFS5}Kitr;=Q~aHc5#K{B zF?_A|k(~b0(&_aZ*-hUaZyltMl;n^=V?CDFhd%sRn=-Oyc)}s=(zkz(&mwwq0Kc3^ z*Clfi0nk}HGZWEPIBT1JIZ3{IGD83MC41*!h7dOyLAMKD7VCN`6WiW(2g^i~6Pf#~ zX!rx!g-lb+V2$=ki<#=i5;vT~69j5#{JsNOJnZ7z(&WqOfh$xa9j?CsV3$RPa0B(> z3e7~D$2E(2u&=PR^RJNWd3=!lCs|<=Wr3TMcgbYPc_Cha7(c59*&m$X*2zCxj!SR! zIYmv{V`ir4%;sR?f#B<1#32jj2U!uA};zK!;%`PB<KEP#F%ba8P3zXPdY?rE#6!)~epoy@GSesur8rzI7z)^ZmUWc5l%SL}$iK zpG{~zUR-$5;Ph|kn!Frh2K_O+8zGX{ck8#WIoK4Ax2@v9k+I8|5-mtiHz`dG_XysN zRG~@aOfRpUgV<)_{78d$GdGi<><(oD8XBT^B=N{6;xkgOXP-92=SBdT%Tmr)t))0` zsqdDXMh^%_>Zv2vekH8yaR0w+5?)Maa99pzX)Lw z16hQ}RBfzwthHxHgS8{Hg~oT$H=18a?L?S--1on6i;rY!q@H?-3x>H`pW1u*uniJ@ z-ahbF6mzv|9tc$CU%Srr7czX?@1d4E-&fdSglOqPY4$1u_QGv=Ri=}@T|-JchREIJyuAh8Xeuo zmiyfZQ43A!cz&6Nw=ZZ{47XzH7T(9dVN>%MUbo++f+@m|vT3-tFgL$Ax0lvd0wjPZ zUFN+tsx(^I#Z$~ll7{!OSYdLm)I2H@Z}9h)M~R*yW9vfZPX@_%8-_irF3J7-XqNs1 z5S;D8wwu$aEoJ-v)(>df#hO672it&2z6_&%Ncgd;chv83a^Z&O# zvu|&edM52BdCJ}$q|e=IaBhxn1({Fl9cWuG{nDe-fO(5_P^Wsp^e5{Jlo{H>^jh#{ zAY3ALhly{avBIDMR|goT`35}2eBdNYp{}uNCOIIHy^!W??0#7FT#(PX}T<^;i-FvO>69r2)NPp0n~ZbN*}mHzViOm zZr$0$1{jCLPg?xuK-uh~SBuq>eqB4K;;9td)AfM$L+_z1O_1+H!efRzt4^hLDGgd)Np8G>PFeocT`#>am7T=+eRT~7dM_mO zGfr+)ry-Ge!5cp7CH8{cSwM^OZK;-A4f%48wRla1?C%*nS4FC(Uu? zD-rt!@p)XJoG+Mcm$0wkO4eU6`p&BFlXMciYVp38j@>2f&F?quzyibvLvUmV>K%@y=8YKbEZU} z@791fPPeXy0yw_|=k3fEndLarU zw&SX}{y^G_Kktvydy{l#1c{-trRGa zFLRv^{SrTvb1D|E7kl?7E9JZIT%5JRbmPrk1Lp_eM6XEMdE|(*MWpVgN%_29U;lOA zd-0QD-B(p2aM7)i8PNvx;%2>~RuYBnQ8T?HBKJYLpG}fA$=}=A^ei+KyO4Mq z(wU~xGhR;u#IU2zmO3(PdmPN+8S-rhuOAp>*SEv(bEdycXrhbmRx)Qb1x8zXRT}lh ztJQrL)w6kfjWfKl#wfjGLO_r>;$GA#M?jHyb7($xz)@(T(`#Vw`&Zcxi1lDNM&~?S z`f}a5;?2*PmSX z-i6)&_SoX9+nGj!Le~wpwjI`HX%R;A&gFD(-e&-wa3XX+574jjc8^-=2AxH3qpNOd z)C8R&cVs@i#fOUK^sg5)apRZt;b<}C-F*fUx>s?4VQSrd>?>Fa8{BO7i)t^P2u_ehT zq@C@xWq)u^rty`M6A~XzUn_-rC7;K~`5Ae-Ie!;1&u;5IVdMwy08o=sGIu>{<5!?u zh0gZh)ABPDMl~X9@86)TVA8OdM|$>6wPg_O;I10Zi&NzzYiXMIRjEt=7E$b{FOkk> zzgQ)!UYr;L+&KkNIXg-Ua^+Pvu8aB+`=d5?U~og4v+A#J_Q=j454ZLVubmPN=*)ZB z)^2cu?0Ct3CXsIvO+ia}7EuIHv@c48f` zkj{H%>aU`LGR!V8?Jt}E)GXG4L=Vbi-acQfv$wo)cl-Ho!!_mYm8#%B%Hw&Uv`g3@ zHdvOaxnP&n0{4(81~z9>`c99id~<9|m!NgLULBuA>(rtN5oRD2E~r^3?A;&!T_2px zG-yDK&0GIBQ_0%@Ts*`ljv);Z3PCLMM(RC?_rFsb?{hRCc4cW7w;|M??KQPgJH(;L z_s2FayWbnoL2O|>LVFaXUr1IAmxD0ccEvQx*HOxNS}6{%eMv5oDMrl{J$YSy-Cq%Z zsx9%%{gUUIEWrGP!o8<3t5GT=p#Rq57#OmETwdmP-3>`6z3CO;sqdM5MY18lxn$8j zH5R_OdmbZjuG!OMwgw7eWcqDy7q9T8D~(OHPKe^CX+L2){mVJxA#`p>jl=M;LZNak zW$n+zO9GM}K?GEi3WB_m6$Q!Z>$iILoY|dG z0SVo=Z>lOMc!^R8NYVtFi3b@U!F^)I4ltXj_J=hb`XEdYRT z@1N2s-p-YBzR~lC3HD6l9Krv(Ma$$fch#Tbei}31x}ZsRclo>$2zYno4k5TvIsIz~ z>QI_k?ne4qT|L_$6;oXLdo|TiW=QU`Lo}~t5HvwW zD0vNQq@(+!L}q$n(9m8j$NRq7)7op5Jmy_ltlfCMZ=!E|)Mzi_QGFl-V;ZTWG>z5M zW?9(r2gtq-3};T-ivGO&ePG;}D)!s0jLxODt#a1)XfZj8ML3_C11%*i1G~Rf3N#a$ zvIX(N?=2rMWSOulh1_D0y$T|yS6M4o=Z-}P5N3m?r2Y-Gx3K{<{{b`D0n`FT-bXQ% zvDjcCB9o-{a$KW&uLNny_lH@yE=<@a)oIT^!Ps;xFm=eC@aSLn^!&=3ce2Y(vhH2;nAz+3-F4=M3%<@hAbSh(`mXK7ztqJHkZvD7b)$GglB9V3`8(I=sxhKl84su z{>aa%nU6=NDdbrIZ}eP)?G4p)J3AL_i^2g#NU1wMwwL)nuFHd zlPgf$XJ6g@x1P^_c>SZAkl0rq;-FvQtUgIJGB9aP0RSrzV*WZNs@SX^b!E@^W`1YxtD?8aw zN@J?%U8GBXukLfA^(OPF`5ND~rKjW0d2`qD4H2O~ZZDoiUhkdX(E=cd7@G2@yNTG} zdc*4R;I6bK9Tr7B&Erkumn5P`Y4QuCO7FZLUJ~3K^`xN;-Y>#aWAmEdJ`oUo6Yqy0 zFpKvordH%X@ zx(PvD|ErzLaNnT`_ypP=PI}~uq_`z80>r;c7wgg~BS_of467-J)|@reC3*#oZRYyS z*Rze^zB|4k8_A%RG1fm-X~*kC47z$q-Afo+`heumaxoIJym&3jKH-7{Q<#uAvSOim z{_3E_ok1Rp3?MZ7oOq>*>Wpb_Ha8hb3To4;>3SMO23InGqGa#q%JrGX!n@rw-%PH+ z7scM(*H7ZD-~_iqbrg9^32HCm8|w;_AoaM#fz8VAU%9IQec1Y4ruY&9e9W zSiw&G9w+|8iBEJ6)q3RW-~+i1AGD})P%?a)5}NE;RAE1$pUC7Ex|Y86{v&OD+@3kI z3-}K6kuyWgjZq}&u=3$fyY5MpIgbbWyzbn$u`2zTLI*3JN=qs74-^ysqwJ-9O_ z{Zr(w>|c|61sAVgyyoahc3O*aM5z>Y2xGBC~s827W>dQs_s43sJhgUP}$r0H(Cz9X*9;u&`S9bJ_8(Rtg2wA|6pf= z*zpTEf6mdVCTeOd?ydrS(_}*VS#d&{e!2l&ZT54(`$ z7{8aeTd%ID6kT^`8E{O3k-NsXfZRy~xpBY%jq?X7FR=A2pZ~&n6>9+pE2CZ^Z5ut_ zS4;dV&1U_vo>F|&M^-Z_D?FgzJQ~-V?M&MCELF3ps`xsB=3TiP^y66`$23>iLq=@?+Fi)iPk13~yS#E=R#q=2 zD(0Y3g&-a(#+e=?qjJigJ&F(0loNSqG4 z;Wn`AR)vdR}&G}Y;Ay~!MfC=UQ*U~9YN zjQ}XBKHsI+`-ms`srd6XUBAfYfxTW{BB7nqlz82UWo1E0|$Wqb@S^_x&35k=#;I_D*X8oNab*a zf%MM8G}sKs*ez_aWzml-tLfRy%r8zCaM84Hxs-Vex9kCH6PF?edu4JF=XQer6Mmp?-@@QapeykZJ&tZ~mm z#oz<`6nT_iPKP0|v zx9CY0=y8(z;EiD{?^OLM;deDDAT~{FAFx%R5MOUa%fK#&Pfkdy_=KZJ?wO|ooT&9) zXAS&ACEfz|{OK;Iq5{zI(ZnKSmzTek50hIYH0Pz>ooB{1Zfz)D;v+S=!qQxavVE=f zU0-Aa#!^D}z#a7^`T!(Ry&5}*+?I6r(~YsRo$TwLW12d#N17eTP`;TUqB@?y8Taf@ z-D9*5D&);&ofY2}^&nXb4S04j=cHC`;hADj(XcHgKl?qKiZWXTS?(i? zS8tiDPwVSd@7q!Fge6$XM$%?E2?A$ojaFu(YN(eB_*(pQUQyNOHqcLK;y7>3Vws;Y z6!&O$bGc541jRY(rhYTXDPQQze8*1u8-OMQ?f1*pk-%ev`kN4j(jc#2ap9_0RglC2 zkev(Nk%#!~!P-Nu>Wh~&vb@4sQ{6xn6P1d-(at#LN%rG*MyK6m=eRjiT!9>p1Md=P z!o?0-p$Nb3GNEAozlOObr*wu$UYK~VfZ;di8N9$azcU8?TW)*7{R`T_zouk4_9sJ` z>wKKbdzS^Ksg+P9P@~g$JQ!jSiCx`jPjR=i-t8;cou=&}kC}6RjXMz*P#s6cIgu;H z-_KFgtLd>v{>etr7^1e&I%&|=+afs8u(})(VH_{Pnb`je*S_g=f7Bd1xth#7JD7kX zmjDV86G`vOh+|F4hY|^17DnV;{;2Z%E4~w7w(j0MD5zf0&3og&SN@mXL+)*^<$|E^iu;Xcn=bRm{dUoHOor&j`) z#{OY((sH<*ZlERfq(7pL?r~vy3FP{loZh+3YxnLqlx052%lbib{A!S*n>ap`aU2C2 z8!L&c&`&N&_s^!RdN{Ji{sDE4{*k?%Ab@%Wm0b3&0dkV0d6D>a)?LPmzpU9@cn_y9 z8C&(Jk`Eec!D?m-*|#FC3Z~shV>SU6`$}Qcpz7H%7vKp zyBk6QW=z^lHPBk2di2fkc0ggdzGfS_(nk81S;8)HLo3^_e?mQNe*k(bPAM%EUD4?(k0F+!^_423oF@&Fs(U7kr&*xZ7day+no)Sk3=YvapH-ykb zi(e@lzK*CTZAbC@YF<5mAt46whUwWNE80yDH}o10^#zRiXKU!qaT4TF2e;kUSQ@Hn z*mnDzi4)2Jg5S0SIY(FJvoW-hMdPHNgp|qJnTipt=<5QCeDTuPX@0e_cP~$PBI^Fp zIszm4zx{{`2>7l*6T_ivNi_FsuJ&1<={;lbievTU{pT({-epxhc#a<;AVa3SM0x3_ zeVIu&!j4{{#)b2FYb7uQ5Z;;VIU}cfUMd^qPE2=ZKwGDjW+&gY=V6Wz_|@X}{3OmP5)HbdBk*`4F6{ zoXX0oT;X%#%hNAvUVZYQ>1GF!kkdZf^SGWN4SErjKkpW*-pBmR!lWEI!MiD0iul|S z?xWxT=_qcGW&inb^sfPZms@6??HS?-p0QE;9>Y-AZRQcpB)x&6@7+HLU*7uc=<0HS zaCeed3Y)f9xg5OH`~4vfG*ay+DAQb&(SUu0kNxO4*YS{igy>(PT%4^ckjHX zeToC(dz4`C=Ejzhx_`|1?&|^Hbp!nib~=g=>m<{|kU{7UHd=1ltgqVO%~sOuNsRWr z;U16JPY)E7)6XCl22U^2EQQQ&$(*8FBUdj^ByOw;Ep@#veg=u8&mo4B`9q-8Kc2Z+ zo^Raq8v{O?D_oFbGmNits-ovWM*4e`f&=*~mf0ZX^%t#HzZ#IXh(w2;+`hbp9q-h8 zJFOro<4z`xoOy%JTYUUT&k`Rx^T;pivH0JKNp?v%DB5ziV0WWI{C=BbT;TtLWW zRJ=LkBXHDNHb^*2vJ|eNcr!JSbKagq+X+VfMmBRb-oE1vubgI5Y}2uMgkPkAUK0G} z2o4VJM4_k3dlqRO+joW@2}pJMtx$Uk{=^KRCPfzU?3(5@$t1#83UUES$h|YLA1qO- z2FWn8)RQy|Tw>6_ksGUU3nmG`yx`;9tuJ)^0&wy|d{d!x zlVjs9r>+Ci7Gn#EBlh>BK8{?4zXG#+jViQ@&>{h%*vPg4NTskOd@QGs2iiq@3D40W zUy24vy@W>L@IHIresV7;+!HctjaFAKZFE7@cgO<2QB25|9L3oq;2^1*q1y{iL) zHbHiK=JETTo)VrQQt2kB(mdD}P!zpv&`IHL1WFKIf-g-QZI0uFhn_g_e~QNOSS{3w zhEa#dTe!jUiz3E2f~?ooPJ>G%T7PT>bo{~l^3@eirXD0mi2@QHRO?9nexAvCzih0* zEg!_hYV>t^$WEgdW1hIklx?ijvRg@Y6o?th9@*8Y~3hWjcNm!EP36^Se zKtzJBb_eqhZ1q^0@nI*;S|h#pVtba72tBzQy6Lb?sKXyMD3!P8QhX0Q-Cn1QBFB6z zUarZ^B@(^c8#x}C8f|~&Nc{!v6PX*Fzb}OVZ}XbVFNrQB>wJ&ub5J_pn9utU7Y%{# zfOjKAKtP6O=233<#c9^T3FU}1HQyD2fr810t4SV!1Xp(pp@9`hz5+fADvIpOL2Dut zgiR6TXIb+YJY#iI?ocVy`A!s|7vfB{_U2u|{`~0rv9{8FZ=dsPJz=0tBmQsqZ;%qUsBC}N|WaOnRot-i0giw=;W07<;Lr2c7I=5K8v(ZrW7nT*7>u-)6fQpr+n-Oin2&)xq0S(>BpDWPoPK6vWGug(cG z49ziM(fCdN{-;o1g&G7<>q6elat_uny@0BUA3LF?%=(Uvi(ekq+Axr*Idx?L*%Xm# zcV_n9)(l*c`FH>=bm{r$yoQlKr;|NBM}@_NR#}vutR3i!xm7p7BC9a>86LIWBoqla zz3x&~JK@QQRs7n?A_ON=HMzZ*vX=t)*H>dnluq7=QU-dpRrsAN!0^nCQJUdgHSdPox_502|)Ga=!mId09f7 z37daXe%)2?@j#YezHNv#Qf;6L-Ah-zF8i)yYPULbDo<^;61a4&gdk#{>Ep%+N#IT> zCM=&MFB1OAsv2h5!Gc_SoimOcq;GIGVPWV7Ws%(VV%H^USYV}z-y8lub z%e-0LAEBa9=6>6YnFZO!*me27!~Tl*Cn2`yZ*$BNuQ3xUuS92(^OiZjDE~<3KRc+9 z9?F@0_&+PNPx1E4h@Noe?=M%PgO8>WNjLmZEJVk{@0ERI)s+o6VK#kfrl5SZ+wNv6~s%H$t0gU zq~Jh~&ayApxbuqIcCTG8=$p$O7$`71rAZh59qNJD0AG(K5!mw*N!+-n3yVZKND&Z2Y08B7)(G;vo`{$ z|9(_Pv9!p2oal+>k5hb{iKkSbsD>zWsLvS@X!F|s^d^7fYgg@%Z1;!@$3k^B*~-Oo zPok7|k{1FXba_}qOmdepzazF;>72-!l}^Cl4}U&~k_L*z!HQfj>#-FCx4`8R3Z=8Z z;w8As|DZD-VDP2fs)NSJ`})&F@$VWj*VCkD6bXz426s$ut~!Sv)>&^LJ&%6fH%h)R zp0Y&K{^)m83F7c^#rCr5Nhi~zEz#>(!8LidysPT#u>k)>?#Kr1&pnUMGjvAm%JGVz z?cvDm?95VDM&1JD*X7}C;wN@CG$wC#?{Y9I)RHlBn-#&26@F|gcTQ>H(H(!KM=C`0pm2-D+gtO2R<|N>8ES^a~S-!n1ItwNbXhs zWi?;8z5BL)e&;FLl_2>y6*&h3{kARIB@hRTt1F{Z_R47JgRlQ+|DCt;BTxepRNRSZ z3CTmNEMK-iwibQz_l~jklwZCmr37R~N)4UAm^(&~oL87GEQo|09*`rvAp_bOkPl{p zLRFowdfYJ|N*GS{j_<(rh|fT5o~}rZN4MYAu8nTe(Gswd$LzHw8#&{e?>_Dy>fQne z6u1=Xnt_!4`g{wgOLZb^iui&kHdG_H>wDhNd93N@!!ZG(7+)HO%b*pwAep77Ng@_S z)-H>zFi)m}+b+n5H64JkWvGh}MiG|8Xu?SBo_z*|(4;>^gH6Wx@wAjPMW?+J+ozR@ z(N<3LAVUbp7&KKl4K?x3aQoyP%Imv_$+9%$y6@R}J!nJ@Ys; z9SY6!jRxGN{^S>_cFptOWaJ*`E@!f|H^yGpK)~Lq_HGJoqEW7XONDN@cP>redB_Bd zLm(Sa52=WNc31w4B)$KuT!obI%;iBLkP@61v0!zfFsD_~r|&*50)`mP*r3|IRik+k zFQf|`%ro03`_TCbmj~_LqoeXsIWz%y&xo+qd{wc+FT!0prZ_v^0+MO5jP_jxp zKMl?@w}D9J!N~O4xpQ-!YaIW9P8@kiECp=e`s^@1Li9+24%9y!bI9oABY+{F`i!wi zq4zpG|MK|pI=HItgy`WPHn*>ygDEP{HbHoWbZlKE0#)I@8cNuoG43mj{{+ z7LD4hA;9(Gfn0qo9=C^+to|{`){Ahc>CXl}mg>aTWVD4%*zwQjZkXg*U!y;TYT3kgJ@<;dn<_i~;8ZNjNw|Q)4 z@cZcd-(j94Z?A5yAIQ5QZ9l9_HQFnAU8#i9qPY;!@s;p^1#WD&yCm)lL_9&JpsC0M zO%7SVPyOq*FP0y^pBk>&&`@zkURdD=Q5UOt4rzpzXNZIAYwnmVba*P3p<@gr>i*&5 zG9$C_5Wj>k{O{FHkFA8af87*g306Do{Qc&oDRGxC?W8*Js`J!|bsG45wWsP61g~VI z1Q|Ne=QY3RydACm9d<(Hgu=2NhJPIHwfB+w-8*y+FR19GE$b2c+FWJ};lK2-0&OTL zG|q#l5XA-&N`vv&>Gz0TdgE`5VAilU;W&cuSPXV!0bknFR~4W_Mq=KBS+M z4vAoBo^7E$TYaf7g(D8WXy%diBaWeso@ms^vb(LQ*JA7zc1Qo#M zOrbF<`r9G9K-+njzulO006;*30wt?ocv&T&k6Y_{eQOJ~HE&JZLIJ$X zQ<#6SfO?ZCE=WT(^ME$=O~2x6t(w$IMU(c{HSeC`{68*S85)`|)*U z>F#mOU#G*mI)7Qz5Gbw~DxlarrlUKeWWHF2F)Bl==y3;+>wMfTYRuE07WHe!xz-c< zu!ZMvret)9-3L}1ZC0PM>O5y{_V#|#5G{qC=$+&r$ROVHyO{;6_x-~EuWhQ7ePC{+ zZLsN}cg>51t_jAIB6&_LK-{6i>dFThwge)Bijq&TR(RVG{$)6;G*)^32l8cz~0+51(RcQg0!KmfjL2Uw3b^pd65<_(^9#l5D6$EY8a4DbFh6+b*C6^CAUVG4H;g)>H1 z(C3@yyZqL8_|W}wb{jmm<|A%#1(G6XqMS02p3m^%ibMM<2vSKVelTDe_zOQIK$~oF zee4lwMH`w{2E)TVm_2RY=u0sE&6f=7J&ZVBIJyJbH5y09qOF+D;H0*AX=f*iP-~FufDv5;e-p;tX{1wApY_T@p7QPOH59K0^(9NU8H(Pg_v# z=5?gzl>L;3*ksG>rg=a@`!^)3Aq{{1#!eepDU4Wv;t0Cl4-I-9t6L@aw}Z8lpnw1x zyhVE1F@1h_%+3y1ocEXR!j=ljy7P%qGlfRv9s&z?56kiHd!WG zMUe|BpECDXN_wQ}C!mJ0`|GS(y~m$pS%>Wwc$qD^H(JS75`blWXL(7qy9uKcQl=I_ zlP(!A>65Xbs*L_Vkjk*SYctVf3>@HU&1N=#I$6U`=bCQh=ai$Ie2p-NC0i@scUmFC zB|q(d=M^-N5eNlR=>@ID>=O^XucaSYCi(o?KwgQMMDEm+4+ehQ5>EU90v_*Z9%B&? zi;RTgE~L(3oaR}=qG zeDpd75=rKGASjJKlW_ZNKvXpHc{6}qrBqN&6w{T=8qG$V6l7qQ?bigTG>|Jf)JKb6 zKlXCh=w0q{Q}em~z&*3L#L%BNbcvSpSYIjs48A~*CBDIh-9QF=9zCw;G>)zKt~fo_ z&pU@gq>!U3oZrY0{-tl_(fYGUpE6(@6i*o(e&;cV<%?Ah*VK}MX`pcDS?C-TXT^nD zOM2w1FT}nDTKdrEzdWBbF~9Hi7b@I1KQU(C+@s1j5Xis8^PH>~jz2PqW@j<4)g=<@ zqw^8-6V2IRKedClopkqGjWUNAb~D(K82dm-G6)6v&~z)jWBfV9TWL~N{uy2%o_VT| zC%O`Pqd!Y~n%jvB&h~|WA6``sISDOP8&&};uSY=3s+4h@?7uFVv%gHW9V}1PID5dU z`GVe16o`d@c|;2Xzoku-&L+YZPCu=UNEDB#kjt2-phYvHQC;+7*2TrSxTWI?(k*xf)U_+ zJQKyAX&guk7#DxUWi~v~Z4ON6j zAxpn!IU?J1$T5AX)q~*Qm3c181pbOqaiKJSd9(qm7~0+%4&*qHe_x_qymseQd`!~= z_r9?CXCC=P#MEbYC3<+CZckwXW zLb{vEX}Yni!YpNbaW56x?hE}aG~=j$$X!+A^Iw|I+Yy(ixb}Xp=cDF>>8ZvkFb=HWog(tsrme9>HRiVk! zfh^^qU9JyjXzemHMU}mdw{d?BB-6ebd-`xU9|!45GkkGP_A0V)*8TKik^+-eJ|XyZ z8OfTHppqdk0%dMvWW;9KSidG79)4~LblwvCyPUDyt2Y<4X6{Y8)x?0^Zm)CXh|pJ|Ak~34c%;wNrNw_Ls<*jLU-u>dnOU7D z=>jnWy)n0|0qEqY-43XE9GiYI`sFR%t?KZ%CRlQ~t<-N&(6_a<2Rk2yIR_vTLf0(Q z**$4tPow?D-4C|M*zK_Jv%Gg6fF083PaD9QaPeJL1FDr^CZ4Yuyg{UOy2#Q;scRE0 zEvtOromKDnHJKrQSko2s>q7UrYdfpatte=@;=wW(S!W#}~V^3innz z5kMb0d#d#x=m@#-i;SR0A_X{zco5O;GZK{v)tRR!50d!pXMn@V7aB-qiH>-s(=U@v zR;=-g#>L!uxaOVr(XxV+Y@d)a&`h`S=(@&{sQ@`pa^z9JNxKZ-u z&z#H7MZk+OJ2)|DxRUk=xt@zN^M>C(VP^K(L3+Pz{^4UQXby-smGwV0Iv()4H=w0m z-23|}WDE8p@LjeqZjakH-C#px{VIW@LaPDOn$%UkxNHNkM}5;Z1;QL}N=n7Bz?hNa zQxV+E7L-U--O0<2QhGOX$YhkSziKaoeQ!e!bMw~vb{djU^VdbKDc1Y!0%}B*Y<|u&yuecc8^EE56j4}1` z^pUuQA+s$7tst2nP@2QG9Wc627t1kB;Rk_V!SVJShAI3USw2+rM@o3(X4Ev@=@Zt} z^Rp%@vBnF-OP0Rfei5mh22k%iF-et)_TyY3$j0#}CC1`kna@>uk}rC-9SB-}V^Z8f zBMizZ60HxRVo$J`i`-VZEwJt5M+V_1ZLoF0DYHcE8;LlW)HuDlGiy&K{O_ zt@7&({O;Xw3jpn|IS-i=<0y+=90@%vq_8lZjuEE zju^Y2!4t2}NMPA!h=m?drYbR09b;(It&D7I-|zN!{Rf50T?;y0Y#hBaF$2%0aSfoE z+yDaapBrdSXxaKw= ze>@qV*WE6l?me2UdqMp)XY#D0-K&+TJ$3EU=v3YK*edu)R3LNU#$@72QC8p7Lr|6hT45InG4-~b>=#s8PZ zxj7ix6lC@0p;OnR+n;?gi63R^>(IKzpnnHjOH36~iQ}Qynf(F%8kYAs-%_;R7u1;> zAr-g_WCPn?q0oB_GubYv7&?-&$E&=0N|0$Axl3|6ZDpXSoOIcp9>?t0D{7Er$iw0A zTkL^Kzp_wCHpF4_=SK@X#(>%fxAvfS#wN!kWU|9Untfh#YkqojXRT0bv10;UOC^tF zAw&M(bA6)-vaJ3xO6~^hoCX?ixV584#y)A(F(aCc^7RJSZ9>qEO`K{T z&`5&6j&~=Qe!Rx+9Aclrhtu)=btj}6c?wC~iSMjr5Fm38a+5Dqdue~1Kcd~}mv!R# z#+V$lDHH@>mqO9cG(W-ZyxFH7GhA79Yc-OcMA2s!=2%7N^h}PUjz4ZXRb9ES(D?IB zkN&EYvysSm;O7H^fOPn2f`c|idQq<9hh!`uuZUW^K?!GGTsgGAmHqI$TpS8XAHXzt zpN<@Gx1K5V_kb4>dxQmvq?k~7ZU$3{^n7InF0>CW;$5D~e|u5`-`Wcj066Dx+}e!cm%|-v7mgfcYUZQ*XRAR_Kxjw_f|zK`*QpW zCboDhNVV37BKmJ}@5Y2wjyPJs=y*bvQB_4_o zVNdPPJ&a{WNn3xyiK({v(gk`xA{}`9nQ(rlvvEql=E@7&V#6y(=stg*Dy#&W1Z`~bC@e1c)i!$8@50`H96f-l)Ka48sg8-*@6D2q(Z=_S3m_5-)34*=AhL6swX(} zrK|l%&0(q81|n)A4|sDQlo=v8+5F&&BKy_HTyVOdtG%&DwicYK7H0*ARxht)EBy3K zv9>M7y9^3_CPLAeiW*C}tRh2rI??})O3@iK@^|*TEeFWj^6zcQ8SSBgJ>8Da^^%28 z3=P$+Gjz(wKt4Nc&!#(R>x^phpu?&3b9;dfsng_^GH&_Pw!LuhB}WjSJPd)FmVUa4 zjjx}!_)d~O`fdh~_hltl)Fs{^!AHrEHmmouLnG2l2);MFuy$Q6f|4`|QX*9!DOon0gI`&5K!?c+dHvZ!H^}x44pw71P;LAD74Ogx*mvswH$q9~)@4g_@a8b8(wbjh1(~#f zuo>3@jh};XoZ6nb0}@~eOb5VGxQ4>{`4Mea`*xKJY5UW+y0FksKC)!pA;V$F*oomh z3$<>SH%tDRpji2^ijDf%0XaU#jp~8DOQTJ?8!t!px`IzyEPEJnRSQX2AO(o~3_a4_ zO;E&8`Fi6DXXgm@XVB&y9jip<_w`0#zGTWtvYGb&gQiI{?g5qL!&oRi!%Obc@A=xY zXZf5@>_vQ2&)=~t>I4K?sv4+;^V>aWIP;~CIm&iE8vP~U`EiO7yh3>K#`8c1`9cZd zm_uJ}GVd+(q>e2*vR9;-er&Ilm&^)y=q(@bUVyUbODkx~daUsdqtN&NXi8bgUY}e3 zVjMt`j$-{TPd_sR-+c(~FdG`Jfz}+m01B}`^y&uTt~)R0r8KH9YF~Fx0|l-qy41>a zzk2gEFoJS-lZ+8Ij+m!&tJ~{yWhFZ-LOU-odry6j+EcY${Ngwi@l$p}-yP)12zTb7 z$<+Hj{%L_zr-i32J>asrPcJuL6m@O@1@UxxNVn>qgWRrI&RuptXqXrB>*|2I+22T1 zdr2lXy%ItZ^`+m~k4e0?ls+4>)`PrG7%oUyx^g4$9?1_Gx}gGBY@aGnbeEmH11M{| z-lUKSJgUU))e}|%J=pa4hJ-y=rB*V*hiE`@isLMLuV;7t2^kwVnjd<(@AL&qid6a> zi6Oc9wZ%Waf+17C5t-()i%x@d{vt&z40~se1Y#y1_1Am5cw*iA(M98Rut&X?%x&{; zb;QKaHydf^v2)n@EkO?x-4Kq|`*uEL5Ie-##H!ezp66cQOw?mDu=wjq(^wVKB||~( z1c(t3P-$NfqQ`{N0zco=38}J|4zGe@*9k0x3&cJS=lv zlCCufIXqDL<*!HBE1sIt$g9)Cv`&rNT#5VpW0GU461RmzV}dAYKaD(Cd}6kl6_F1# zYQ+EM=m)R(w>PTI!5CS0?7Mo58G{5fsVwfgPx_HenYsb%F`lj0=>r~1`aq_0c$>&L zRi^k1*0g6-@K2ZBp4p)3DU>BpbG_jjRKkUbU)*AXxV>NwQ}+AbPeM=pTDyKg#&vp9 zO>=W49+PFFL`Ju26xxruk{x%YG%(8{L*h_oE|0vSYnmEdg($zVr8d0PSC0J|EYlu3Vp_!254TU32mzce3`=b4#47IQPd& zYYHJO_6u5NM4)xdy+vg_cJPU-`m3d!nA_-xq>Wmyx4fH#w)1j*Nz_DlADFl9HiSmW5+MgqU$wn1YH z7~)QhkjBIP>40YvL~`Z7ADGk8Tf09w>*d3L0D&SHB$=6|bi3&4jJ)V^RHEDbJ>DzR z*OPdbEb2LIS|EojXLi*Xkny!?esKJw>H;jyn2k85lFZmM*}Si2VN7}RPVKK_3r0(C zRU`np#P9?5$PwI*yZ98`v+0)#xI1#tJPai`GAaM7jG_GT5VX?+pA0&REDY6_Lx1}6 zQNXL?&$g01kA*euo253lkDghH6kw9cmmTL(tyB(Smt1C+H;*XXct-zSueekEcxk=JvKIDHZE_WbaDiKas zGwn#mga7Jo)LsETEXlzREp`w7;0KE|S?<9H6HJ=4OBtu{ab#KZ(_gkUp(RFtep%}Z zNZ`pJDIryCM(C9>QoJU8@uck;iSRJkuc-*3%!614RIq;C3F!2CwyaY%CmExl=~do5 zaHw39gGenvrOSa7I@j{XD@v?X51i`s)e%meVK=$~Nr1G=`(2q{LsPiL#ooBtM20{; zUF<8^rs!fssH%PMiS`UmD1&LrsL0NwREC?3)|BUG4(eIA^ok=tNu;d7#;JP<(?E^% z!+bx)5gt6ZM%~;6#tVIu0KyVuX>B6mA_DA;N|vu^=+ zLY^5_6EB|wII2B{0dyzc9rD$E+VxbmG4X(Y2}m8C4sycN>@nvtxW{p=g4UKXIw%bodXd+1rbu8V{ltjJ zWZ`&Fcbg2b_L!49_FMOJ$I&8M#aA-qO}%B;@Nyd2?&)0;U@%lDMkfn|&R^%Rnw6+a zxzbD?5S^e!$o~B?hw``?zg-Z#hcXh_UtoN+rFd;KBJlZE+`fmIQh{kd`-y#%NO5>~ zq>S_`4S8gOCrCJnXnPq-ems!@BJUH<&)D@biqr(DmOEet;l)6^1BOEjNoacKYwt&b zT4bUzOtp$gTc811gr4I?-1AEys#@{_ahk583e-samhJV^F)V;UOoAqUt%o*=54_SC z3M{|c*TjBPAxTp~n{9uXEVXEoPIlM;av_&tb}E0_&*i`)Ix1l(FDeVjWYj zN1TCr!Bi0U06WT&bzXcpGOE{KP9MHg@3QA)6okkAd|R80DG1W-UO$XWAZGhHY2C%PZ2d7{v78VE>c1# zg9*3sfbv8Ta$bY0mM;hYo1mUVzIAZn>8Q^b4a^L*JoM{PW=DZDw=`TE%&E-hWV*X9 znm@U7wmV)d2q-6ok@9=&hx#tmZD^D9n*E_mS!*Ik6^m_3i|}JxA-UAVy?>u0`0;Xx z>s>8qOj*xyYYW}BlX>}(TmrQ{di~qbHvT5K5p{NbC%=GRMC2rSmup~Mf5i$4%iyyP zRlV^*{nf%{7wKRNgXS4HjjX)|N62W6c~mAE<#Cj=wLppbCSG6NWt5v)v<7D}@Bs%$ zQl3?3jql;|673C&B8)>;JnG4fpupAEZMmJUqjHU)lmxPepb*IsSvDqk?eixJ}un{qUVE_{&s^-8C=|FO_`?|RZ?QpfPmJxip6ExS z=9!yq_PF~+3bm>Cb>FLRN8aJ2^Y-5V%&XcVHTxAcL6r)Yj=^)%fA!mPEE*4z0{$%r zv3F@;2YF9iOy{f2-=9u>H`#id;TEHW4$Kj`@E)bS<+ecW2p~Qga<9jV?6Dlr>fYE^ z^lH68>53}H-L=wz4tYLej*KGB|LPy4^IS13!djw zVBt=vPbL%#^p~xWjl@g6g*)Jb6<7wqlvo)peH2^$`9aYq3b~|Z%q_lfw6PTe(6iX1 z1Xv<@%+z`6x`y0L(NbSd!SHP#WF1kfV`<&bXaiu`6Zf)N=eCO5 z@B|5)>bVVIusdP4v|kz`4iI%`w}XPMl5J<|uxe4uKn`0}4m8eCE#_Ms_=lol_Hl9> z12(Htqhi3Ru|K+D1YPNq5xn&ZH6!BZj6~>9osJ*s^!QGBKL>x(8y%*!ck$t`tev)* zckm2yJIzC95n=?NtcUi-n?u9@vi)u>e+~aINd}KNjm|O7<`X76aP|7*xMH2MhF@FE`_FZXz3#yo}$jRQJLJ%3S3sKdS0g(7d(sgYqszlLWk_?Xo5hWwh zH=>A$f+YF++4QW{_l~VJlB(*29nSti>@RzORAwG=+c^T@jB&Fk6i>5Hkf&JJW%+hYq=E=v}iZ|kA-h{GoE-yU7|&;8<@ zy?UQb4Sm`g*@^@dcIf^(1A!4Tc%N#1i%7LKYGP7{vWNutTf;yJ^xh*C6aTV8uFNX= z_}4gMIW+Epiv_49PfMpoZ}_1k0%lZozIoa6FC<_lO+Iq%_A=gg7*c*M6^Xx)pB_Q| zoF21Hn|r(gSKe+luH5@W$(Su#U^q0xX7=^Sjjq_ho;pk71>YW+bsBsR&mz~k_3bpB zgUhp|R$N-)aO1*{r;xE!Yw4Z_76-P;_DjH1H4VKW`!AqZIh0T_HAwn*01LUf6q<5` zan@nKMryzMxAUr_ZBlvIM*coIj)}%ypq`(G)b$$V)MK?r)!N zwJ}KV4tuiUm87FE?8>t_z@+=lP5B8u*n8nYV{#UkA3O!IJ-+lNak3D+_lxCJ6HFkt zfOo7v#96&Bhq+{YXnFK6-T398sXRNx!k$*6dB*Ed$YuNX!ko18@4U&(dMQ z{Zu=jR-}>UqEmv;0bQNJrn*iWJW8t69+)VhUtV_VnI>R4sEdWb6H}46_1o1Y2Bh`U zX1vH8ZNk)nXe8h1+BdjjYET_e%7D&TQ!53ydOJ!JqgHd7(K)ALtrBQ*)QM#Q6FqXWA4FCQVZpFeuLbW*S9Z0 z4M(PFzCRh6Emw^MjOep{=_C$Y-3oiwy^==W<>7F=2NZ$Il-<*905_^rIVS;d`05fh*GXK^C0xY8+&Ww4oM4^0!H>L^I zf2~CwUtqdSK7`wT5P7y{71~pHSwL6QK{f`nB$0VP1<{X08+hm7Ph#QcpUcCAw4wy% z)F{TU{ZFFt^wI5x7df%r)YOc{2O3wro}S8#Jf4&-UeUUJgW4avc?M z)oFpks6HCUmI=(;X@OHk=7o(OWd{Z>xUFLh*?eARh#nN%;VoV_@TQksD6VH8hkFdC zsyH@zxUD3nQHk+TjICZOCX+uY(;amu#mYIgjlMA~G*K!KMhWO$07^^jwRYU5lYV#h zhtKtkHJnIc;p~-#8{Ac2>iY;W;%fYL??7J6yw-~=6n_U;Yrdpc|GbFSJ{hOOYurZg zV3fweudPyY;T86MpH~O$ymmaIzN4+RN`1{2EQ0s2^$n}gQ0yGFZZkr_8&OGyA7Aw8 z^Q{b9njD|kkYp}k7f@#IygsLANqnGU3&zuPE3n=WRR2(4nDO<>M__r4hI#$ z{*JW-RmeOcD(xqCio_QXIt+69W^kR+Nguv^8Z+J?{_Om{?Ia>V$%Kl#Ga z0mOD;3YCc1f783GzE*I$ZI00pC^IWg*2gA?gwq}Rne%hy?4UY$~YY^lo zK)vhZH^zkd#D0YPpv6fpzUDa_b53*^NpmGVW)R!dx4+d- z(6<7mrGOiQM89dYWeQ^}7@KL|KQ}(?`<>160qSS__+R)x0BiW8XrBcpb%w*OGCkkXIL+uz;nn*nv~qGLgno^9GJrrQclt_u-AoC#vvw*6F7OX=G#JfhC~wPW05a^M3nT}$D2Tr4+$OnL(%?|UydK`Qw;A6<_N&fmU=YIBxe zO8R=2`2(ACGqhQ75V4?@aC8XcFq^8i{UG| z#j~2N@|@9nVE^$yPr}rAS2+E|&(-pzeU@j7FN*K!d}WUxamdya%yqz+px`>uU;7y# zus*`R)F&L0o_=LK8*0*KF&6x2ooUzkKs{iFf!R85=TqotX|?JzPrxghTQbtM<%vi- zYuMLa)b{H8Uaeq8b6-gzX`&}VDzM7uuRlSUgG#)c%zNT54|$aFR{pUuXw}zm&di8x zhJ1kJXmo+j{7BhgVLBgld_JrU9IBt31RKGYFu7-_)RkNupF63p3fY`1G>a$h^LT2C zU(fQhIjG)4ugsrbRV)`y`}~>l_}{M~c|s+x5pzAux4=3)a#A3*=rKcP4N4EAigEzD z%`#N0XD|=x6zkE{KSBgz0V002SMNkH5BKDN5`}F>!x$AL`^xy)u4S|T><zAs7G`=O_tGtkDdpMHWTDtFk{o@v1dx`RcyKrF5@o}pcTUIt3 zi4l2M4e9FTwRHeEF86M+tXPS6rPa6G5%!*kTr-#(`bUQ>dx}3WmHW-`*EUhNk*bHCOmaGc0Wa>ok2T)Je=U9^R9J(M+N-iIhCXqg&`}EWudiAPF(d``daBmoA}01 z8QEhY71io%a5<7Q4NOwv$NB5_*~6TiL@;L1ULW?^MP_0E#V>`6bKA=WRt4vh<%a&I5rI&4z#_=lnMqq2*hj1Nc&`Rrn#eOC0E*u`l z)4E9GQz#Q!j5`fF?iX0oOU?c`w$5IcOFtyIWu2#Ay)T(?Usb3%9+LIBMu#UEqmED! zi4g(xTlf1~zVPf=`;rH}I*}1-pMb2E`iG$h`4I}6agOToJVy*LWU8mZ2>`5;+cb~4 zNjcVA)}RrQSi_APLtT91JHEF#b~`xpiq^~902ZCwFLXwfgZ?{p+K${%NnzmCBS&LG;xGqU9YELen^oL)_?wYSyC>)CW_7j^tm<{T ze7bL+?qSBEjC@6H)H&#Z;CXr1?EtESl-EQC{9F}Qr9E(J#mZ5LXDo2Zd7J=4^6VU%{%Q6b;cQWK0A=we`o6duq0I`to zCGifY3*GAX)!$uFxfm=X$-}gJ;Ma;VO(x45?2%M(Vc~`}K2*f8Zno<0XB2 zyDh&yk(B=ZCGyJ_5_EdGMS5}3C#pII7r}_2=PDD<4VoD3ho{spWI)Mt@ZtTq5D7>L z$zyWNb?_@OeMqz5y}yff(?|{|OCV#*#%Q^hV7IRio0SxCnF#K)8kg2dM(1MNhe1MV zdS!#;<}?M?O?A8hmLP&NEw?{HmcVtmf;Vsr~E4mwH*!=k)gOfRn=ECC}CXy!HXR4vW`6}K#8EgIVa1gA z%8ebN96G4zWfB}3W;d%Yv0UbEf{)dHnD`Mt-F7MWzkJ5_Awd}Mqq0m4^zgOS_N zd{gRU`yFwRk6!V$KJ`WAGR$YFG3+B5U|^1Dp^MrwS0SUUJA5^zJ$6c`>@d>w;byiW z6LxyI+qt;j*CzcVwP`R{N(fd|E%$>{f57bs_WU?DQmc9NYDJID%-k zT{4rt=0ZI8%WSd%xhrdl!Wo82S6|H?llEW4EIjtbHhtkpMx7MGYbL%byB@neIE9-5 zdFg;T^JQxI3L-9rr(vXhheJciOU{3@_=Dw7^}v0NE#?J?QHsJsB9D*u_?w|XutZ+b zB1)MQl|P&;rbX)yPyi)?ISR!{)I!;|#F!$L9~3;rF9ZMw9K`ymmi;}{JA_DOog?6IDa zld=sn=4&AwGkr2_0MCvO`%4R-4ViEXseM1dZmT}Go=*B)>0hPn5NjzsBM^g-7TTB>FbKc}Cl62UWgMGH0elf< z^?i!7Pzg{87+itK7fCmMFunwLV%7OKpE)!ruL@kj6z7(iCh{iGrn{qo>REA;_aKQJ zS9wUDQL^fK!Z67kavu_qZA>{ALB?8XmwJ6H7NHBmL-Lf-m!`tw>!ADe=|x0k@;rRU zyd53EC?;jWlL-|$`Bt3wbF|CPt9~v=2qcJb?-36-3o7kb`={6hv&}Uz-rV3%POPPH z9RY_b!~UT%XRgjpBy&YDzn|fw&JIdELHNq-1i+0lT0niLd7NUR{aNT~+YO;77XYOu zqTXKQ_jW%-tap_%_gr-cC{!HMetecSOlIB-_IW8!XS9fv9+}9l&<2i46{4u;WF={Y zUYE%1oZpDJ8(m5R&F}O!sqfhegQZVUBkd~p^7i&X_C=9hw;ht({6-r7Xy}rs!hLi? zz;J5%Tcy; z>(ZbtpI=aR#A}oZ*JZkArj^{^^YecJu`Gqh9*vM0*N-E%5{*3VNt;`C{TjGF?R6)I zDl~Mc(?%rMD)aC@4f)@1BSPkl??C@tVk&g5c%QKEJ|yBSiurIUshp_Fhby^Not(KT z=yyiV>X7cnh^mr+NEb&*&)S!7@|EZ2MsE_aY97g)M_@_df+EHQx1mj>5=|1p{g~nF z;Mh+rQ;6 zHTC&LaRXb{*Bl%4f^TuuV#afE+@q4K)8-a;2%*dXUkUmBq!;=$d*pgfnC=ta z`a~6JXvb+w9SC%Z)9x&&(p`JJN5L&5FPRYIxaEwjinaj+AIto|&p1Vqcw&pN~I z?S@@tA^{J_pu2J76Gi-HP>L1$@d#PdL~m9I*d%#xPPv8|$&fhX)hw;o-e13(aN{r( z9OtDj4IM4-Z)alpRtM|T!LG75%mDNrsM8NQ)Q~v`)SC>L$o;-|;O;=gZr@8GEE=yX1cim2-U9AQNzWIvoG1+i%Nkq5n!9Pn%4s_}||TT6*(r)Vz62 zOldCn!L584_Sv#{l`=V>U|j=|JrE*xZcwM+=J$!<>4~l2D2HuaYfAgKhp$tueW;D) ze)h@r`flvU0D*n|Q^``ZWy_a4ClkPU4N+o9sMI@+JjP+WYtD`-;iMZJhVLao0wE}Y zAIrWTqS@0C&^Y(2?s>i+yAqF0dB%X^`(C;LXgZp1j9F+8P>AhRDV(e9c+ zS|E*=rzuy6a<4d0-P4@9E1i}k)676h9}thLV6FkN?StFE10CFrxqRXHjeNd&Zo3>V z3-P|B?`=knXztUZ0vzgmZX-Q_7+-q$k!xL0H~wRMrvibO3>L4NDxl^UC4VQWGQGOi zX1cSNt-QKvM?b?H2cg)weMt9K(rnEv%0pjW&dzvH`$LH`XjfcMkg9N8KDbqY*vCzC zbM^GSK)QA1#ylkB)Y-r4vz%__vzS}^#M95$mx`Ep63msM zEW43kZ~1c5>2rsfXu%YYuP*P4ZCtvo|8pH^d9BCepn7u*wJzso**g|lZ7V$As!Z)c zX}!gWB(BvfXW(#gvt2EUJa+Ew4;Pfb-@R&m`3nHj(t~G zYq)oKQA#vqWaTD_!%)xm9+u`r{V7@Ha`6WT)KSa3*^)qfl$Otydp?P$(=@ujdv?ev zC<5$>Rcd6akyU&q0@2S&$`SZ4B@YK6|ZUx=+kYF0j zo$r}|H4fei&Lxu@i(B%T-c)=e8?LGKoS=33vtN#_UDfvwy$RWDwS%43^!PT~N5=BU zlg|@x_n;KU0c4#amOplfiV-`s1Y5pAo*@|G=jEqqBes#7TYrNHEnV12X@jxdz3*Lj zeJCB6>xs=?HIBL~Wx5%r9Fw1(P>Qiq7>+@g2pm;-gq7)GzgBdtZ_^%gl-aOFG+VX5 zELFM}q)-;|8q3$zHn1*H*fWQx}~bhH}XMl=6m#qsgYcz zYK;B3m@|CB;G~^>jXgm4m{gfCJ{>FVPftq`Afo%y4=|pf>Sj^5-$ysMkG@aZ%{LB~ z!MJs>z2&RqT>_cucA{UeqhRN!&4RJWGZaW@!`$5DpXJ~%8$L)>D)t#k(>1(jFf<0Lyny}UedGGUoM>72UEei&u?`Wi82!f2i^UuN$hif5WJP; zkn~CifdFWxbX*FifDaDuJk-WJOhRfcPb8ZV08udKUxiEgMoZxaF}+lnuKY~i)`^8O z-btdPFfg-o0SQWD>IgdI)rq=mYTSm>$Jkw2doCzJY%+I5WWF?*xE8B>S`IztEzj zUR|`uHb9K{aL|Gf;DhMlH+BRh{>Gmi5`dyg^`HBYU^A+rsvMo}va`LU+^yI4_nNR63$L$)s|ki|RKh!zkamh{!Yb zbJMH=QOFbv0ud4OA|(gmycYvs9KEy*Rz)eBtf$ip$HLLuS%RzY4_+X= zTel}Pkr7;~G=JKmfRdn{txhdA(+lM2e5?=4SeN|O)3uUY?5rbi4Qj>G%*FPJjIj*v z-2p9}WV-P)TaH$+7VNh9=<>U}0o_HjXq$d)1Za4W+}Bc!=-=O%(4^`1Y=N7^O=SQ$ zrM)FNdHyga>|cV}_3a*1Z7u}y{j1NccxT_knY|vW^$RTgXVSAf11yYsKr`l|WaSFS z@79}U5_)UfIY)^@Hf&`R-Y6Lt&9y2SQ%=^RJQ*h_b!gdb`GK~qiP0CG&r^e1AD2Zq zlR}Ii@HYdBbA#Fy$H?^9qk7pOFs?y1h@rk5L*rf=-X4R^1xml&+YE}(_yr1eBEe;0 zD@daYh3G68GqlPM(^ENIQJ*q-h9iYf<7qjbxaj(vxhVvRT-U&C;;z;rrvXSu{xdY_-{<7TVT z$O0*x%7=rb3)Wzu%7^vg@C7k>Q5PuH(%A+Qk-tY1x_tC&k2teXw5=ijD76rMT7G$o zOxXME4`>(7Zh-O~+)YX#@O0rWW}Cm?jf{K1{s40@vdf1srg-vW`+f!g@L|2U{w_ub zTT~5O+|*8{KKsZQ2p*-q2nAsHf({Kg5F#_a^qZ|sbpKps`zUb^?9Z{lOujm@(Awyk|%5`c}DD!dMt zdbQTymS;z1e|(_kDcdUdrL6`?fai<8`5)#)`7X&`OW4{R&};rNzr^7w9^$yt!G+G? zXS)k$jyn~H*u)8}4a5tuujxDQ7Ag|8UnJ%&`2JR+%UrwFHEu#tr+D`h6yfc=1XaGPwLmTl0id-s#IUjuk#1O z@%N)M1w#t~y&RC1sOt~OUM!^?`B6qNYTN81m!7^d$;V}uwGap7=2B_06U#F^pjQU7R{qng6wPO5yK3;7(kZch+j8!8TTaq_I~)Q_|Fo&bTLuy7H3@Q$B^sGFPf zYfEnrA@>M{g_6x(4yr{;mp3Vnmf94V@uQ>%<95U>Z+IT|zg*MjQ5h8U_>{ zJUB*aQYGUZEZbv9$=EYeHs0?6CN{Wo%Un8ojPZ@s8Gj>HM*i~$53kz&8oE|@S;%vC6#ODTmFI`W zerWrb>OkEx`&LE|DL8^p37IlK8@X=r2g6F5GWyGoFPJ-DUr_H!L1p}nw=FQ7Yb-3- zvE@66l)sIj=0f@XO@WOzRXjtUXg_C9?BX=W`-H{me@uT9LZ!B`=*;@7FWHZN z9$+NipTaDGGeg_!A8!rvpj2D)md|@)%Euc${pi;oZ8dkHbs&hzto(F)MNP2tzd-Jl zNs`)zbXeOe7LTcbg+>H`_oyS2l+bBlb;zPzV?a&p;3&=D=>(A-eU#m6OsyU=L2_zI@4I%}+TudP`xQ9c{3@4Ti%WSTGDrIO&k! zsgveH`WO8{QJiGAcW7?p@8AJVa45j;B}_GeHQ6HPSG&`m`D|*={=mOG<1U|(U#N<6 z8f`v_Zf`h-MM~lVN4IaF#W22MLm54ZqB!nhF5F1>!>@&G{!n&k_-L_3jd4F$A%quH ztjv-y#MLXl(Y{FGSp{LMxTEF)an^?lZ%D0}z$hz1${xI73(gr!N#S9i(q=d)$-WlX zl$1=oOJY}C@u%Pr>(>Lg z%YJwO8~pvVtESF!>it4RBw=67s6<&7kcWL9++Lu= z-ZZ%k)P*>%tjtmHEQ249;eijEDIJISjPVBwl8V^;1>}LtcssLHjYQVwt^lIZY?0m; z(A5YjV?gbB@9T>K0Ywa2b@STUO9t-&8;DNcy%E%a-o3(jlnc4}pv7yPMx=0>S|9$d zp)JVi;dxcLc;ZmuR+H#bnB@G;TcI3F4hWv_Cxh@-1HIR8c4On^5x^aXs%H2If7teD znT`cw2RI&5^gL5iUlAi@6E0e@U3vgZ<;4%*Yx+2=)}`53;faNx#)IO?d$zArY`9Sy zjYa;if+~^6)CSt+`v+rbcKcyTQbK41#*MN+KIf`|TPnG0Dz7JXc<7vG2^%J;&oY(k**HrZo>0^Bq`oUUWQSm-as746iP|%^N zT?%LnfjM=xGixEtDTQRL43|rw%dwYy*eC8~IH>!|we0ET&4UC4l#m>@6rqFpy*@Ka zj-T)^1(`?8Y;Ciw3s+<}M%6!!(kO*_abWN}UtTt%+4mkwO`Lwf3z7(8?{S8oVxtUn{{GhTBEI~ieFHJu( z#03uPavClaQo=nV!uo1o8bdN#OXnHc940US;_V_3z~=2nUNs2rUZFB1v3mwTEcw@? zfe5A|Q1z_jAw^Dmr*`S|(J&A^VV z$jxuJpR3Scta$d%+^DJun#Q{QG*2N#g*QBk;oMD3UT65$o{DP`-E>(z>~QDcws`xn zPxC$UeJY;79*z{0#0f(T`{00&xWFoyeaWvJf4`^qzp--^MH{l8yVjgU5dk@SCpbYl zcS^PU(>MFl`s3CK07<~!iZ-ujg}($zb^ms8#7vP*2{VZI7wuhu` zM;nhji^*3KJn0Ag;ndx37Yn9OhWI*-vH9r0zcc6yluMRYBYmj2FY@fn5rN%F(TTW8 zTB+3R{R9nXyn{+{H@+UL#H|MsVscZ7Go7gylrJ|9f<;wwZnp!wg8KO^!+>BZxT|wK zbA-p1J&|vl%m?#q8>WB!Q&aJVS_c!53gmj-XD<46-Iu08HT;F;MtozshT&%o>?h>G zUbGJw*TAx&!P3tGdY588$?YA*0t#ATm;K@7-lzD{gj_~YIjuX|V>p2aB4F%`I)9F( zQbBbtkRWMaXg;QM6xva7BW{=6*VNb}japgw3;V3VbWr!t=L^%BH%t(}zP=7qYww}u zDcF?yMsYr|rzqq();nbPs`jc~y8e78;w?x@{O!_fU!Ums_%1gH`QQvC?PU>{^>FiI zZ!`9|7FyX`TpibsA-+o~$(ZGRN?u9mAib8*Op5!s{|Nd)=`&TiBHnkH{1tcXz!v-n zy}I-%TYk{k z``+<1dI6!`s$^gz=Jv<$y4`jaS0J#nUWHE(@rMra9SS5&!7f^^qPV}qC(3TTgTHhr z%JQua!|>re|5m1Ha7VfHWlVRm5UEsm|H2@(aObP?Y3g^@Eahi#3XX?g_Z{86_BP@R zRk%(f^D3UxUgEveU=!~d#K@Jr-qx^J*gWDw8d99+jdrb^A{Svqk&&Ng#-38@@w#2F zul(d^%Ul}7f}x>4ZU+k5x=z+|qW~P4_=w&x71}r*P#@|pBZnl;6YHH8KqacLn24n? zK7YpgYTxJl>fhU2+5oe>^SmYE6?7jsPrRA-ryV9{qy5LVc$QMG*!@5!OHvjxViMv5 z-m!JOj)wE8o0FU5mnHjJBSFu@_SV2})b4OZ)ozXt!A2a%D#zxZTblM3KXWTL$Id(D zCdWU!j2V!wB8+aN@MlF|j%GFo_7w#$m5cTw>BLOU+#U*GUe4`O) za2Spwftmj&#P~3sYwq4QfucY=PZo%v7PT5si=85f&q+qJ0G{OD9PdI_g2BFAM1+1yh(ur5=0jY$!4a}CD2Wa8aL7%znzL$GIbAPzqT(~jEpdMCKgAAgLG zk$D(Il0m6uNwHe0%ky^*l@%U3!skw8;0`&!W%AWSToG zJlMj!*9wg|G3`UIjeyt#JLaP~3uT71tiaJ)uwU>dnZB{5#@si=@u_}UVOg7O9UGr2 z&)#+RqyjqsLc|ra_IY%=aCp@+o6&<;sO$0=eI1#GL_; zclW}M+FXf&-&!3^hwu8HP`RF#=p|F6J5i&hT&{kDRqL&6gT4e#Vl2o1vD!*xDch5 z2(xdtf>?k*R<360uE6k&I5Im3jovTK0QqhBVkv-!=D8i5`9@lFZG*g^2?Hw2I`qq} zc|oaaNO;ujy2(II{lU-)j#6sJF4d_DVwFd^*h2{XM9{H-Hlw!G=xom1hAM$-+O^wi ze^rY$)GBByMXJvnClzrpdebIRK1X*INQE<;qT>luetp^WE1YO!PoHkSEWpM9S|jMC z`niJCAD%j)#Hq_$I~SkI5E7uHCYuZ&P3i8@PJ~L1bo{INfUfvk6&j%r%v(8Q@jopj zNM`Z!a<5ti^!|CT*=;(7lxAx;I9Fa z{k|M3M}RO{+%wWr+E&Sbh!?wFY5&AIJqfX~-xkJu=|hcSx@Cj?R#tbSqi&b9%o!~} zy>qcaUQn{AMB_76IXYcdCiP9`To#tw^53>@HTzPhs*=VbLdxwqin|rP9FF$x;H@XP<=ZrSsE204jcYEiVtrW%!#wY(}~DZavFmY5!eb$$jZ1ydTz(zFgyr>q9w} zNw8n$BHm5k{d_A2UQa^&(&=|9l7+PiZGRNw!|OZZiCAkxR66S$8Vd=NpUSF}+=4VR z)5o2Qq`mxhwdoJXIzGQEBl~h?%EDmhp$Obj?gD@8#5&7+;}i-}Z%y-)|r0Iv>;`rORkrue{{joMAkikF zBeutpZOZDhHM9+w5V4o(4wc_rARrZkPuR0-q%9)(t%xD`yi_mi3DLNa^*J>T>(|;X zZ`GjA_P_|Q&_`jB2}2?yTwXLZ5NYu?8&(yQGcPNJ`UN;a;NWJqXJJ#{9Lq1cua4DJ zPnXCm#crs$3T+YZI{Z|n(U_Q9uql744#k}1blm=Uu92`31h45e>rX zbph0}=2hhdSl!+H1Ce)Hb_DVAG@d_pNxvz=gTyr2_qe0&KA5*lTAboy<%ix8SE>(m zs^_*8=GTW$1Np6nWyO#MpJ?vjVNDX(BS#&E0FyfX-R1YxkCz?7t1TRAVo6!oA)4tL zLCB@QlJ-8(xN8kkiw4$Q`GTPi9%Qvk`|=Eop#V2e!Ml9c{W8L(S@uVw_b1{$Zz~7b zWc2Miwu~qk98uqa*_dgc2uN!JRTjmWrQdVLlyD^}-eUCGy!FSN__6O8dz^24n8Tm^ z^9u*z^}=F;uG5msYU^6-pEAe8J05EHW_45i9J zR6mcp3h)K(&^M?E_Yl{izzmD?F!-KR20JI;&Ud4F*!Hq5;IJ^e?v8Ew901cM>cQ#U zeWNg|+%#7~HvrF#p1N+#ST8ukMgb>6W6=Ihox)jms9h^s%I~~U_=@s0EvZZbIHfkw zCNhQ)-CjJqlKrxO=QMr$q;ssIFTd?|3}7c9cm|o!LIFLETP|TP=;nz}KCL^?Oe9L$ z5MPiJNt!7jlG{gjbB!DyjylPq19Jr*iS1)6TJ?4;O}!6^k@vsOA?Shdo7y;h!b6ac zs96ePYZH6AGE)|?vSZ`lzibvJ(+3*!qn#_C*I4DR7og!odoH9Edp50EswhSM^wI+y z%N?&M-5jp{S~T2TaV+Ktaod{*9^O@6WQjx%fw*F#=}aGrA=A5K%DNV|@;saC^N4DK z>R7rIpV%#_;Z`3}U+{ZjWs(+ymG<;Sz7n zwskREpyMDPe0Yq7OU)gPazQC)_l|~n81JuL{5{;rcsXddn|rh`gR>oT?H5YrwKxtB z{pUMHwVn2w&jCC~@U6araHANSv5>6fkjr5{^XW4cLOrB*g5BLf7f92c3wa0^bJEJ` z*h9aN6fMW%<7kh?7OSZ;$er23%9NC!6h*n1tV!zL#pIc*u2i74;gkdaZr7YxFHoBx zn2*V(2m~bs!6vz9qweb|tof2?sdMN9=&0*DQvH?sAy8N*)gD{Bl@&g>0obJVFJy#* z2Yj$fX`c6JEhUX2fIK30StY2-t)fUR7CV#0^%kzoc!S94=RHo%sTqa|f6#&qeeWC~ zT{foZB`SYGdx}U-Wbyf#MvYqrAh*F5_eTfN(@Z_;yTPYi^JlFPog-x!;^1mI=d4v6 zpgl-wb8S|oo=>fo04;FM4F)rY zx@PxrscB>?AWpWca{h49y9XZ9ouY~&PZc1FtjwZvPZsGImaL`N%q!P*`StMD&0J4W3M;5%D>>#{uZ2IQSXblShbLWwOSuzRi& zT@-)DaP+PXIdM3f^me8!Qtp1(in%5;FyzU*N+`AhvAkH;1Cr9p%=WKQ2tT6-bktiB$1*+~XEQcBL_J|brJ7O`a=IK-j6==LTg2{ZY8iL%hOv$x> z98O2YMh~aF?guiNCNRba^#d$qXu9r6n6ueyuCGkBdbpPOhq&e?5-FarM8|sl4Kxo0 zZ0(!y;I$U;)Wk%{L#&6+!^>wmaVscA%)s2 zql)g~Q&4zhK|mU{-(0?4&1ullQHCMaIUyl;1lD#S2!eB1mSCzt0NB1ca45)Cg5bK1*AIqxgzuRlY z$BD?Qdn2fs*5Lz4@{nZfYZ=zy;FQlG#V6a?lTUNJt2w0kU-x!)I<7w)F>WBxmL7!Nix(k}EAUzion*Z{)%1|J+-qLANlbxu~?+=&nR5ahavwME<2Bj0>&xX%KO-2?sSu|`(kG^;75{1wIb zM%ZCepDAC+rJ-Y0`+Kb*;)NB#==LQcp8uAlU1Uzpf%VV4Td6{9p*V9E<^Rplt5Rqe zG*YMSn$K_C0`I#GH1RssZWKXnyY=MllwBcOJ68KzclZr2>BbMO*(Oc-q5O7+NfNy!+QxPhmb0hA%- zA%NJ*A7cRmXG}PL5g?uodM$du2yI}()HB9ozeRR}|AB1G33!|T(c8{d$4f{hx1p68 z+{Z0meTe5%s`B%M?9t*voy_g0Xw zD)^$ZC!GemGWg37*L%eH)}3>WCKbI+>>&Y^ujNmd??Zosh0zvNUqR)PE^~nePm!L% zTrxX@W**MnKC;&e<$U8dG|&aQU%34CyxrkeJUy={a7!os4Qm2U&x(?k);Sz7|444a zUYQt1i4$=$+2RD*-0Y-Sag4-MeA7#HhcGg+`Fxy+G^%4#ct!$^f91tv_v!C;o^83i zkB?;N;IxK!v~W*|-j}7{S4rk@fi|ZlD8am086UCRwdw8=N_x$>P_yC8z72EMr}a8W z3GL;k1~kn6MI}*O;2F^WPR#w6=06A|6}k)=GJB6-S~G`Fu{RhQH{wy3#$sbmHMGl8 z;(lWQxgre=qVB+D*(qC=V_~V6idgT|1qCN;3E~o6jJ#WT%R#Yc=)c_gUO5~~ zFDtyTfY1ZBy#f#Oh>pTp(8qzPRoi!*p9z`aJ8(pjdq2V6g4K?k_qzDt0e$!M2@~_4 z??be!*zc&nzaF(U)S>wJsQEHrUrl?z(=7!}4lTP9zr3fP+iI{8yN^3Z(bMCZ^%jo6 zZvYyDUTs@acYUtS`%V>4h1vQOKC1S(7xzMX75EZ0dnH19D1;p-q!u1>v2F$;_^xJG z-JS_MI^Ns|F&8!&T@L6INeK?p8K$aN}4wsxF z1GO(2n4DoBtJlT~Po|1E|DxD9uS2SRSer`vW5V|@?Fk2s{aK3x)co(NSh+MC+f;qH zyw27>hg}$kk_wCvhk^nxe|*c4ee-N_ZZ99J;mYZb?&>2qNbgJ=?8{M{3pKytN+!eF zJy7{$!tG&PfC%bnD8h4vNclgSu4`LSB#Qo$NPYwnQIQ~sz?FKJKeVx z0imcmVF%{;JP|qSLQ^+08gswXRlg^Rkyd_BNYc5OHP{JtPIra6FO^H*Ms>P6IQ-s^ zJXdTb&6V`zy@93;KoFsTA&89>ykNsBaI@e8G(sN_j!y`&Qf9OLFf&UY+%$A0(awi-g+Hub!_A7%U zJ#zh?G`v%xhp8^yj6g4u0Yo~#!_&BzLDu>4t)b9N2?kDg|DdB^`p%XM_{V(vF9E<+ zToQ#`3(>3B1a|GOye`?2`aZqd^H0)BI$MH2G~L&hc-%HTQRAIPOt-Y*-=lrnpK|X< zkm!{U%hguym**fYtK(BARrWM?ks5g4;Na2^LPIAJ@-&Ki>PB(@COma;wyD{ttly-w zul*eHKixk@;)(sMex zpN}uW2`GK@PNKN`#DSmZWnVxc|H0OH!bNZZxlELbkLHj`N9ods<|*#6+T3AqcaFU% zSFV2r=bEt8;)8*>XH*pw4&G;2E&d622FeSX`OdeUszYael$t)wF3V}KKKSZCc@&;p zs&=T=t!ln66*N32ed)ys%Ncz*LR;VrxStDZ?FxLOXEs)HhqP0TiJyuWca=mB=Y(>Y z_h1l=sREhIWMES7F-Gn@xL1`IzDMB-XnJov_xpr*euHqjIHM;yt}E%v^`NdaUd9QC z-bLA-+%oz(9g zm(kB5(wMSPj)SMz_mbYn7UoV7t-Y@4ky7{BLv%Qu1D3Ps%WVLTHi1I+PBJr6;?6;M zc}<4PVSEf`_coLtbqA|ztj`$%DC~5A>hxZ;LPh7rqM3)^V&Ehg1%@71_L`-QZ8`F1 z8m+lC%LE4Y*Td=>{mv4Bl9M>&zZ=h*aTItkf?ZT_Gd&I+ zyDx^z^Vi&}+QN(dv&o4woVfPAOAq}~GS+JYng?QrSZ>8|vZk|ke9vbx@tAe>DpFYC ztiY--bMcOEySZCxbOa>qq~4;Ea4o?<>}4O+O@5;;{+iF_^8&g7``Tb|;M}^(t%RNd z#(13u5-ww}iu|%md_!mhuK1aqb0Ea8vD(vKaku+AHZ`R{<>dUv+(;G zm?61|Bv>_jw9oC6TcPCw*)J~!S|nXL!Cz>-b8>ew%sY7j`){$Zg2?YSJvZ8cAb~R9 zuQqd2W3vd;4c(;Zm<$DV)8II44J=(>lFZGkn1rl5Orz#jms0vrNJOHHQfVr{kk>@s zuzOVX*d=3S0g$Nb4`jt3j__zB7USEEQZxaQI~*w~{)?n=)K{b<`?0}coclP^LHgp) z1&F}6RAl@2wuXRZqrO~EkaFS|AL1^bAnCtz12(`9FarRx(Ej#6_lB~{2mPoYEzCcV zMT%46B~ecQ`DWkG%oXu7ve&&;02S+S0OeiX{FI@e<*)Fc#{q!kq>{eKNcC@wYA;qZA=jkc~i^o3< zPAxJy!=t_zonhhuXH@m(!Y&KmkR`}tK+)`>Jxoco!>PYt+Wmg2P)^%dVHsF9^m+Gr zQ!#e-ru>+`eeBjrZAOc~VVp?tq$8owqI+j^Wt{JRI+c~K`^O($lU<#|!fmezF@S}~ zN*?rCso!wLVujp3h;<8u%4|*-Dy^uRjP8)lgf~LM4h7Qal%=p#(Yd?z5+G5Ju$E3vN!i2ikcPf1A;(v8y%;F2B@?}0 zGcddMLqjF=Eoc&vmiub825%NK!0}MSoNyH$7PPgxx;Xl#e*6T(?FVT|G+-X7d;!VQ zIO*5(DC}4C%;xEz4Z2 z$frc(=U8#~QsBx~_q1zHrTeEvio|7u7IhHAtLt(1Q9^G%aT)AugE_!k3Z1_1Nl>_6 zuy|lhonHFoU#yi7)u37ZFy$_n&AE5|3jfXv` zS`*Te?&3jS z`2ERHwI_3Jqr%bY$4YOx+XTX2@5r{sT`AN3)V&j}clv9yAEnCs)9ATB!9BvVo=YQ= zb`9@Grvwhh9u@Cs^$;PdoLInJk}cH&do7NbpA8b?#S``O;#%4LYLLIZOd}NG(m7ay zVX6n#o7;hOG#>aS)q!ASz-G4ZSn3T39;^@vinC(lX_9rOqPaPWVrWJ*F>B_S%Pbf_Zr+ubX=tj-8nY1z{QYU$Y0=n%+_O-h67a@LGzbl>>x ziFwfJhg8!>A^%d1F2?K+Qm=#fZH*VS)A66qfZgiR%LSKFTn}gG2@eGPs^YN}2?O*& z(g-&EZXeO%n2gdg=u>Vz%q!p5fdBw$3e2pQF2vlK+(^EUObgv1C6Vqo`99xZs4*F^ zUjzCngYQB*v+8H|ndKhAoM!}!{+KoOGz~I@5MMTXL>Wyharxkc^ZA?^%KYt9-gIh8 z=CtkH28j=SZc8e%9EBquRJ{$UlI|wOeYEH+q*K6JYV)L?TMS+6c@KlhZg#IwC?g1# zZBBO-FgxJla-_Ic8^P1_{QT|9+UJ3gO0tp1&(8P%GbQ? zvji8dC1LF&>H2`4q%e%~*v;(C1TqNbwdJ zfxN}9zh}zc;)Ep8FLGKiST(JIvyFMCcRL#DSLc)r8!Un6#&M*Q<^ny;&(R<|{Y3;1 z;~X8U%g^)csVmu6L&|gd<;x8z+`+%bgF1IM_o;&|6Etgi8^7r$1Fn^f-618OBTH}K zUVHiG+9Oc3D4d5AR?}m&KG*oL*8zLI3a8=ba>FQq7V;MAyo*W16~y)No(KzsulMeq zNx0fIgu7(GKTiBbZyq%G$fuJz9^5&GkdC{0vl?C>3DZ{76*qUVmApY+oZ?Q(Syi^% z;LI_m%oB84NYn~2;d(?B;%YtDxlc2A} z%~cQH7y@YInO(>M79oP(lyP6fMo)0&>ePh4g=r=`5`tqN)|~=6D|}Ld4Y&*?*^|{* z90IJ%#~Fs=4SEjZ<`2Nq({UEw56|hWbcS>{Y2J_f06*HMpY1_>gjO3rlbMdW2DpoB zCB8|*-LFH~4;Kc-+-EA=YC|q=zex6< zGKSF>k-8ao|8j+DzTuy~wYg^dI{&zS;9#&kHrwpTa^IA1givOa# zx%O;Aso$>p-U!nSKH0u5ys&AzKbgd|P^q}gm2k12Ei5PTj=Z~~qFeH2;>L|Mw{zgF zSPI$j;ltz`4NP`?>R~%G_sL`LH8;q;Qvxb2m#9>%_kaG2i{ z0$X|VlCiA!Xtc`S%0qJo_UiBJ$~fF(H343r!R-}Oez^@vj4B{hFjwa`*2bR12%JJL zwbAc0V-yo!KQdQ!G|zkfe20yTbwC|Je%rhy$?Nw#>K(!$aRzqea48}Zc#Qort)lEZ zcm6CI^PMt97RjAi%Zc7x9`uD57$le?WjT|Vr_%f?8JYS{Y%BCE3m9FR$7L9brFvO7 zP(^MAs_GwyCs!lUaE~QrCHxsXPysYQ1FI^Y5Y+AYlJ3Iz^L>9`0>C%QeG)%>1}$Q~ zs{uXnr4S}mDSwFwznXh=nYv7iX4W5NV~;QYb|DuZ^FS6)F{V3(5;n~Tzr?u4sD(+{ zlsqHWHEsUn@yvBl#CujN{^m$s)VO|b(%Y%Wv^4nI`8-?@t)h0Dlp?7lzu&o$`(5to zd=Oinzu&G%%Vidp#Cxu>`3p3sP`Pi(mGRYO0EhB+k@Zr9d>rLaX_6;O{=L-e-b$5w zd1yii1;U>BcX>dWIFz#fc{o0?y@XSm4vZA+8|iRa_~FkWO(azFRE;~-LgH%98rK?AHyi7{VZP|?FCu@>7d_~&KD zKb>a1S~YC}QstN5WT4$c;K4!iy>O|6%$K}BucySwKwvCLFV;%+cGwPoMwvL5-x%oBeyZdNhC}=rx8RSSgui$gxatJN5xo;YoP+hy*zX&#$K6^?-kQ0{Ey0OUEmDn# z@;++0*@x(pUtE?yAB3QUw^<2{`tHvu5@bY!?o$x0cKaMVV7AEz0mNMDO;|+43}z{z zdmP5S6ry}jZ2}t#?%hzFGgyN|6Aj+&pEuB^2yEovomM^??RoiSdENh3?^6ZW z7k!MqjRRQ~q(>mJq#CC44d}1MHvKjYYr$y$;J`3@>1n?hootd~*d>t&IUoM#XHmHw zV!05XIrSrd(Aui)yyQ^3hR1!2Q?$x`d=`aOHTU~w;CDy=?9n+~u$zawkT-inY~Zp4 zQ3mHjXF}c?UI#E=NtpA8a+)S#bv1Kg7kp(6xQNXAvSN5+RfC`iV(|GA8!Zi-kt*$V z?bBsqz7^6m#h|}8hI_-8ow|yNFi-`6^Nt&Pr*L|P=4Hhib&-cZ*8rW#X_hBs)#Es} z)Rr%-vw3%`q=^0*s1Mx0zTkCpFEsfNp2XO@*#6-*s66wU$7P=o_FM2mY9Yhd8+y0X zOWvnYt#ireea+G+G`EkCq+iJ-t`IMa)|?|hbpIZ-+8koDXO#+)A=eXg$$5c5%kE~6 zlGKc6nts+soeu%A!NlxE2-TRyDW_!n+5)%ql67ERA?ln1d&}r|HXaCFp|@R2V>TG0 zT0}h*I-G8A#Y5*3eW7vulFaQ6RTB=ddAz#$-`GDq-?}41RJtdi#SgZse0yx3a@do6 z=5vH7^!`Bqo>r~?Ed=X%sZccr$M199gMi4=g&PSUkubjK7u{HHl*fLG35g2*q^w0d z`%o4pBoV$@C!m}2Q>}X+&iXR)4{?^5ZkGf$m+yUYU?i;O94ybEF{;Jq`A;s3J+EOP zCa1XBC@3!4SJ2%uLj~9DcVyx&CR*t;LGcXzL7uu7+3mLWScYVH7md#k-8RI@fL@}~ z*-#UHN&UMaKf_-1#lZu}vq$z99I_H_8i+qbz`qeCRAQQIFv)wO>9DWYp8^S+IjnKO zE*#t>FN34|888?+T|ZvkUCU5tnnx-xDc`#x2ovF$MTH<{PepOuBM58HQ6Q$j57v31 zerNS4LBR1$FYJZ>Ebn6yVS{gBkj_hK+I?M@@4d(!x-uPhbp~8(@lJUiz)Y8#MYcfR znve2CbxTxa8}8n}XAwVt&jdx4tD!6(iQDel`tHA~d_MLxL{i~)+S9i7 zM?3S#YvIFeX*`IJtvS43vU1{R?q&T#1vC)(_#^60J;-nRJiIOY{*(cVNJ{f1JIQ`h z#{&;44)idKcrhS%PUOkxm(Sy|`TD=^<_zD|o+|CBFY#2~zqWPZZ=+73p|n74MT!`* zugX*O8O(^=#xv7#5Ns>vJ6!c{>u@42xwQu%EWueZcU1ozmfj4|S~&TA61w(Vgx14o$7C$w5xM2%mJyVj%)s^OFDAA?1wNYpg&@q9-| z$j8q<{|(IszJq>)7s`zCMEPY;6YNL#4x21qq0eewr`U>lY92?3Bz-AZqmXOKB^POr zm6>mG1%H_z4>LhA!3C{4kVE?QxY6uZul$+iILoxKGkN1${1q_XJ>o)4w_+0xF3Ay) zUkr?O1uFXqNb^3CJw>Z#m%*O5Kfw)R;Y?6DewL`39ntsab(8#Rk^xk$L75?2H$20D z9`gnO)bRV^EMf2iUHHOBp-W-H2E8kz2r?$ouf*BE_Mj!ikIYkS^_svT#sdX{S8R(Iknxijt8>gsFwJ!P71!-2`xI zx`-Kdhr&m(KF(GxTKfb%cA$!uo!X_Hv%G*u;$e0E;aBSXPz{JZ?Rv%_$+*zi+b<30 z@oeGQ+@0#9Xa;OjRj-KrWN6^|23;@OV`k1)OG;Nm;BWXqe0d7cn$Eu`@HOtEQ9A;x z2M0QHQ05DQ<4+9Fz6P~n7;U5ve%hU`MZX^?zA80FB_}3yveyf>Mka!q%+^!qO9Ay` zh=L5vhe*8r(QoU{Fz(;$K0y=@Et{QbQ~_i-Mf4=IlOXpf7?^#9 z#}SH5g~EA$@|2~~l$!nA_K~SS=XI*2miZ`#u{^`%VWtP=54};Aa|#0;&IEcM5?BD; z#1F6&M_a}qho8nTh2*7lL|Qc4P<=LW`??c|BiL(Sxf?+lud!)4xRD+c;wfb?d}fDM0%{1;sy`nQf*0G_x*UE)Aeeu zKklJ@pj$;Xp)etFc%ll~mWC^C%*&(qa>vyNiDbW~qxMNNs6GB2So|@sf}ASC!#|7Q z3PFUY)^2cER`uKzi3(p+4$YMrx>o+jL0X7-dFF^D$@^BX3M z{_xx*iyjU@$Ap0IE>K^;=h@`PK?&b+o9PG%PQ|6==5p>l2u1N_6?NF{>?5KOQAfR0BF~(ZRGtpy`C;XW`Osfz#4O8QyWje= zoa~=Dyaf($iDDmgvimLotU&H*Tv>Fsh-Zw72(;1Ck`L$IIne``&6Zxr@!9}@anS0N z{g#S%%Z`^b`4iI@sNuLQA(ll?Tn6kAz!V&hN~a+ZDjSm z$Lj%@_$%{UTYTN}dYI9;w_#46+FaA(K12n^gX}isJ(7ZExwnW?WG4j6m2UunggX3S z?kiAys=Uc@LM5}q52;_$OwCdQ3MVF^{ORbiix9OG&gdfT%{)95F1eone09@mU#F_e zWy$tuXlRag2MyKZL65nD5&mS(K1pO*hOql2$^y|kuk>=>@0fsoJT(#@+2?rhQ~HGL z4-nRUAL^|&6ryg<2!3ASKFa8jDO(wo4do!mzc7AOzaj4#uBjCf+#Ulsn1U!r>aiGQ zffJF=B(4SFVLsjSVT8dAoF=F3MIA)4F;}>S%$^dj2d72+KP@hMAU=y{i)6k z`Gq0%VG0r#`&M2Cqqk9HkNyg$doq0j=^=AIYLKdOqQwuYlIgfJV59wD_@SBit%V|k z9_!rYlEtG2?HmZQoO-yBV*_wO9p07o@EN zjwFuglS3Zsa|-&3SL@11yH}-_Hgs2R-Dw}NTkD<&Z#}3avkv3}traG7_Aw9biGW<$ z>5JcCXe>@WY(x1i&xhrHkk3ld9zXfKj}T%9AK~ZvT8}{%6gRoawG%|qq^bD4^YEk} z!WY~wr7W`F_RFuZEg1dyQ)0wri0HMwP+24F<60`u5lpdP)a?mkfbX#-IgHlKq zI*@K%cM;ujhRkH>rt-$%Gq%*RT?0$7SA71~+%H$yWDgUZJPLvJZqDm(2^I0YuL(;c zXTlLV=Eg-9y9I)#fu#u_i5tfX{sIPW(4cnpCOhJGh(o4x>VeZ0Z?uhbN5odQk>)#N zp4__E6iyeTyx!{P*F7Y&!ixwNTe=dAHdg zCYh74k%&zA8edKvXrA30em8~ty}a`eSMv$U4OHu!wV;H@el)>Yue@`jo>ZCK5CzPr zHfHcs+?-qZuKDt0qqaob(8tA01>4^4Iq9nH3hm-sNA9yUIwIY~h5?YEk-dNDrQK;k zK0!F+JKCmnat=y%z;Kf}ZGS^Wg^9YoZWrilby*ke?>P9M$GN=PgPWS-+(2&#c3pTS zu|AZ9{+B(o!HQlf1@`AL)QfBgC_#+`BOL38DbwhHX{2ks-TeZgcW~b|t+Je7Si*F| z-4aL+N1fIm^qvFTG7YVlbNunLm2NrC5Q!HC$^J}W!~SdCaHe7azVVZF1#T2=rYMQW z9-iDx$u<>*LnnxY2%KlQj>C(H7A1xJ`-^=-%<;WE>9iM+`#1BF6jL^f8<0_I^ZGAyYPNUX&CSfxbiv8fauJ zg@95tZ+@8FlrQe?-f*zY{p*PPF3qypqsx7^m9HTtLviU{iex(7Fuj-OgvC@%$HbPZ z?haANhG>$M&Q5z4oQCWS!H}2wvQaz@86w_35e?ZkH^+s{@qRK9?1n&mZaO zX5Zsag+>Cb3ak4^;JsX^*xyQOj%fHrN}X<$n6(tdo?bUdXsG*4lM)p73!#udu?>(o zAK5gA;W9_$9n_J!Kf}3h;VrF#+0MwoKoh=8@pJWfEkMaK4R^J^uC#IKu+6^@m4~9(+2j=y8jy>z6F$i@X-#!N5 zl*n0Y-0I(NpCoc@?nvo`xO=@)_Qt@@H&UN)!xjS(iW7JnS4|LPQ5C0)rs^BIEYx8-z9#Y%TkH+kx#@Ly>y^j3s`w=AlsFJSX=?ve14`aG66AeY zPt*1wy3f-D(w4NZm=6CT6FbvvYwZ^K?2|A~J5xFZbMX@ebks4!Y1 zG{a8Oaj4D(9%_j{2EC*-kld6h2GKKgc6*nTASe1}=xOi@57h3L-wB}XW5-tLg@XceYA#~^Ql$g`XXCNi z*5G&2svqPslAvV423gbfqO6 znUz2bFZvPc2rl#UlFF+Sr=33WB|xDU%OO7YCfe^2$+Ud_iUku?0oB^S0~!W=Qs zL7~Uu?2;YjDzhmXN9cxho7b4l)=sF&VT&zr3(S<{Ra7QfFNYuw$&FZ642KTr!VmU-YG(00%hQeL23a3hhx=ba-M~2y{K$E zWk)vYppm?ADumh8-W~29l$Y~ypUzDFK-dBpE9t2^x9~QqObF*NLoeA?EXmD&fu9%D2$=SrU$eoa6VUXn}5?*6SV4!~l^3 zAozo)tabZ&hmjc_GQekfQlfG+>Vd%~LB)ODibxT)(+{X7(DZ&5Xl`=~F*QL*^5PyA z`j#g4o=zVj$pv#Z!dHkpd7ghsu|k3}4bG;i1BEQ8)ycew`FWW(ULBpwJ2@_&pTAbW zn-pX26{YW;shP52x%8Kld>#KLL#J(sg%ZTNC#sFqqgpSq1JF)(T+dKo%sj7k=iB+Z z?a2omR`vQdU(cAu<<-6lUUdH>lCK74&qe)IDYSp$kp#GxOurVkf~@WcL@SNP-EAWw zU9WsVG2cf7uj1{~7n)ydK99`uE>Ddk*)6+4665oBYf6!(MGF9{^3U4m?&5TWR^fiamL8?X=TlCZn^5IB z=t`;CpL}|H@B4q(H)W5&)H$(YkQGh9cOKkx z28`+Wnj*4oY@OaiB=Q|W)1R6khI6qWF@4WaYkyR?5-Sge6b^CPFMwSCL61di)+o|* zuORlQuqeegEfK-=5>B^9RcXfBn8&krhdLPRUTn+=;;%L@=%^3lyezFk5L+LGeb4^Y z8shXa%|T;|%H^saB*;JENQZGh-8GhkUUC|g$nuxjY^7eQoxm?M?NkS5AGC*f z%ZbibP3m#+%L7sEZ7w;r%Y7G472_+)G~7}hn-?0&qr>knk8Z=MDl*gAF3)Z7VC6R5 z+&fr zySgJOU46eGw1(|rn&7A18&kRDo$UxfHMpAq`)l9E(j~K;Sw^m56sTcL_S9+o zEh1wJY@NRB!G)e@09yRFLNi&F3qzodHMZppPL7*$^Ay; zDjGJ&_@th$u6qCI?D$^J@i(J$NF8A@6@PmjgdNCJ!cyWZ@YePKk=E+x3L@ey*;QWf z7eAh+_DT#y{R!3xvEv^wTn~KHWu2Y5DMPV*BnxFOn!Bd`B2{4@S3eF67cHXUW>2w` zzV6PAxNQ5guK#)Nu@FR6mkCSQ5$(-AUFIsMhM7|FR6T_(0I2ves`I|4?>^OLb@kn@ zqUBZ7qo}yQJrz%_ch%49)cI}r>2|IG$%#NVDDCrj zd1tzH>%WN2-NUt)zWMXzzQ$^w#~Hds)x!faQl;S>f7kZqu2MLm-RDJqJauquX*X~E zc*kR57C#uloS4_BQ~|)7*klXb z9)69~K7TUs%MU>RjuvI;g~!&fY>O8FIO@29BrKNO;Lm;oKv(Ye#^obj#fSZXtNYM= z&${cIf*{{@k6?v8sb?M^?H3%?8Gb6bOOIklI$Xf)H_`Y8e zR+^JB+pwx=$WpK8!;gLTR0Se>L&e)=di?Sti(}D;px~|`GBVOh z{7z>>(Zt(BW!1*5vfsMWa^m|SZ7w44j%Sw{q54^_aqqGlO*(%%Tz2YO%ivKy?W9q4yX@_d2zP(Q^#SK|cY3iiVHdfM!WJH;p8KOG3LYh|HWj^H6L zFGYD*#gp3kvEm)`mssyHM(VRZRLnk*;?1|Fd31RQHv?IMetlwmzd98LUrZA68!RCd z(cb(ek=V5Zyin@g9PD-B=e(jV*IGunE1!0iFH>cT(G?Ix|7fyGw(d_*ePyz&e=nC= z;Ev?$B9$w&5jEGmrgu8oQIH}e4pJ@^B%8*R6Naaa{S)^T#!hG=#{;0~O^T1h++y4G zMv4Ug?8!z_kB#(n%A=yl8tLqQFY@X)e`;hR{EPQs5g3>78)--Vox9?+^247}-yZTw z*SI}yWU|{WKh7qM`SN2}Pr!^&8cW z)&MR=oY@?#bPkU^M1LnmFlIrTBrEhXc82OH+-dNc{o)&{dJ1)DDG?U^D&~C-6XcB3 zF3`?`mESq*_ZSYk5*WGS=udvUCM3t5Wk!9p;S5B(y-*R0j+ZdP&xncrz3&8DIv{i4dq!{Na)I5*tn{&dg3vYS@x<%Xgp~QFBy9wK>)UnB7(>pkf8lU7p&dMT&>nkV z3T{DP56mqmE&NLKVQOD<>+5T>EpmqDRFcAVE=0wNFy`zlZ$iEP)Q)g4{e{S z=UtD%XciT~T#gtSXW<-fk9VBiN;_D7SGW;MfXZj+sGe^xcd}52^)H~TKyhUPlMGUx zN@?Aip#F@j7V!f}XE?(8&bTW3ShTgzwMsPItBP-g{n8E~8o8;~P)EeIHs28#cbFB( zWS%ca=Md!&UL_pFg4OJPzMBlwvGni4{Qx<2V8MsYl_t5Ed-yR<-Fpvp0{UXYk!}*< zziziOwh=EmJYd+(<e zE!dw}aqTMY%ASB4_dau8oQes?_2BFydjdz{!`BEVmhbN*Ah_`NQH$fV;JT$Kg6;l0 zK{(f4k94?619j8I{a(=i_oF4_<1`?UdZiZi`(_!ATfs8$P z-~KM0p7;4Nj3%L}WweJS!@lSi{;H4n`ZGm;nOz=Dm-dcMAl~Yq%vPIi!WDMHTX0v# zoV^EeC8sAM4VPu%qNU|n&1FN5=t!q`3N{J_1v`6%b*Vjz5o1v=8D`0GC047*Mtwtrw8hKmBqla34ju)=HLg z(I2DHDgZoVNQ*&+Q5V5NjtcEq!!hDDKa}^)58kh{^?uO25<>aNWDQ?B@uA5Z@4z&U zHJ>~J4tf0}WkKn7>kYGnYBd@?vxs&}x{ruOB2JtXF2j&-{!bc?#`D?3 zBV{CE5gRXGX;bWhRUb5aSvl2xo{5k7^(0y)C`45v?aROTlO=L{yMXiXl!=^&YWb&G zz^He!W!_IbA9Llo0wwQ!RJ-e232wsx_y;yBKy)}pH?K5m=_vl3E6XOm1 zcm-(Nwak>+V`nOgU(qc{jAC;<*zr?A?ANdbE3S;4iXaYY{mC8u+LATa z3nQ(`^`Ge{tbq5>%IthRm9&`1VIpTd@*Mf#WwXGQ)>N~3g&b=kfLyS z<)lt8kF(ocm7>Onl6!x@|2{$`5~Z40e2577GL0(SM?l~>IA4@@4q+w@jGy8%Ktd*U z_>CqFpaTDTLf8j${$9#Mw?de^tKEXA$Qtl`_B?a*iBiXtjp&ICI`x;`*FW}rm6go4 zJ8}Rtar@H&?+aF+KgmMB=@UU2~`ulH{VdPImph^1c~VaCH5Fsyc4iC8bZsS|dnPdD#k@o=H1 z!iXq>Gz(OdtvBX&hFmi$*m0Y?rxSU>=;X-@;$tjK*EwOv~blx{P}KI$k4(?YsoL6~m)-X;=u= z;P>t)*U?jCx0sFQ&=_PdgmAxL;H@;^3?N=+g{@l{Y#9zOXfygvm^UsEXu$dHp);T- z*S4u%ra_6DO2GmeCcYQec>!*Yos3I>CZ$^vqP#&XiQ2!AQbQwtRdYAkSt9&^qD!o6N8X57X?Zn*L8y*T%@7pNc)L%XG#IG; z+2~x2;%?8e0h=MBT!L=z9N%WM{60PR!a){;XDu0(__>~e$x+Jlww_a{^wB-2Gr$y< z-XB9b-R~$Xbo8k!nYy7Vm3&O=)%+ydRo82o-k`f!R~uZeQkm+VP>V08_{_rY&OF}z z*_c~;2=^6Mnkn)TZ|C`e)eb@(czVObMFaf1yG~z^9Wr(7ybIz3S-cz~xGG_80R9pG zE-OKjFU{~&pGIY;2B=n(z4e+$mQs=gEEo9d@3fewgIJk@QQoP;o|icClANPKrw?-D zTO;wfHRH7&_E6++C4frWlDDTPAMmBjP0+!m;1Ln@&;l=iE~McnX${>eKrvsbAyO-L ztfuZayMbbUNgcO-@5ISRGlKaWZR0yK#~2keVZxmet2VLLdLslI?p781dAKdq>)+?% zE)`EGc?-O-Ut2QZ8#@A7)VV6Ugd4?3*_@bybcBg@*2ij;%(pn*=eAHSl3aRZ>sD07 z&1i(KkDtU>^up=FU8%ECpX)%!Vqo0Z^;eQAia$#&yb1mDr`vP&sPV6r`hc$cu~Egq9ja%&E&I+H-UlV(8nZ{1Ax05AC(O`#=Sy7L>rfj%ECo`Ux}%mm>mz)A=?8 z{&Y2}0l?H&<#O2kVHZZCo{Uos4Y$N%NPc)HZ;_Evbv(kB^O^5C#)dC`L$4GIh&gb? z2=7cgfO#8oFz;HbKsQNIs`c(+=7Mk}JSlx5tK*r1IckG_D7|oASrE90?x9aIutz_9eu$vcD3M~ELb*k|q_5qQ#&@&}fECXd(xmS(GQ=WT9H4Vzp)`4l?LB^EIhZ)5hyK)ym)r z{{eE;CcQQ^XN#w7i^tz{;eNb_?l>|!nOkqZ043k>XZF@aOdD8A@BXA+z^{vwoIUhN zU&=bYp&V_7THi8BsMm1U2Gc7d*`anK|7yyl%>5{CdYtxhL;VvW^ON2W)h)*?B3t%A zrDytVd%U&$$2den+aNa|P25{86;*XVj1)Zevu;u8XO)#Mpf6OlN`=5#kx zeyE#0TCIv6x}DXgN#{bZ%FKtCMr~V=uodBVEHS6zi)weS%1`rvC5QgZlE&?6YQRS* zVaf-8WEcJNd0!s3!`MKv?2~a^@pszzw1jY`8pW)Fl&hX>@^pLVd`%3<7GWdx8bq4X z?|T7>u=F=#oIG`Xoi$d$-_s3yJ=T>05?TbFPC!J+sL*UfemozxDXJQO@Ifu^i$^$#1B1L005*NN_L3R^RW!5HZ$U1p^`gdjU63o>=ED zlnxd=-io1!LEFjfH}Oj5M=+_|2T25PbPXAC&5v+=IvDqwc+%vz-e+YlrQq&V+bk@D z6PObdci_Holp9vt{mX%3&b)rf3vx`-S=XV}=)F!293M1!g}eqEF7H_3k49|!_QthA@BG9>_o;tlNO zTlZsklMuru#U87@-w?jf{U018R*LS_nl_1tk|Xv3fZz=zik#5Ux47*?+()lCa}2X^ z7c=xgt8cpeUF?%A5J32oGX0|HsjWp}$^lp$HD*)j*mEgNQ+t8!RolLwik9Ev6Mgwh zK_7-hM!=<9EZzL@nR>lXFK>@Rus0_WQPl`;EBKP4x&0VW62HLeGN1HK)%6=OntVXR z`z=$>Rd1e7#XAZ+_^1qz?xV_pGRHkbLRiFAe^?6W^!%w@?jJ9XK~`K zr|Z=qDxD91-1k$MUjc2Jx^ZL`VFrV9pP_xrq!wSY;`joX6)L<`7avsm$U6@xUoIjD zDGe^6{F@=K&&XdY89-wbWa4URBO2~s-Q1o(R=uH%ZsW$lv?z{iaZl<9#b6!#8m^8@ z6F`v-{-+F+O3xo5F7rG*e&65T-4lPp7&!--{=usd-fPC=8Jx!F?Ju64J)vO1szv@J z_ofBB+WrYw8fw99W@$?DeqU#*JI{iDr!X8rRAEI8TK~Tw7TluIqYvztsZdLL4%`+!+WvlJ%2N=#-hfO9!VY z^nAfLrH?xCWS~L7oeom-JlRb4s6P&1^RFv-Xi$G>Qdq~|p_e0;1hu8>yaX4WxE;zW zkS1Js`S$E0^P14mv{V^MbKw8;n^OzY-~BIMsog~a5-as(A@;gRB*5Zam$C-wSOYC#M{;WDY_m-6vUrRHDlYCAQvgNFO(nOZk#+&kc}g#=f|UfV~p}t*#SRA(?>q zM|b>PsU*IQiQ%D?dC+eIOSG%f%}P zNfA+`;|so#n2oUPOQPX9kLdjmEWVmJ-4ojR{-rHs2+NU_(oko;$#EU_a9=MTweqt5 ze8{=)fy%Eu^*%XAhmS38C}^io2Ja0xZ|xvy*2LlJ&Sz-4csz#&q5rM_W9hoKRYij6 zFG+?+5D}H6f+BB3$toGXes-TbYn{1sf+C^2y1HtIfcpg#$-3}Szs7(HD8nG1eRwYo z7$kb)2G^5HPtPXSB)3smRgPwIJyX_JnV-wge<=$)8u@fG`IH{YEmM$mFjscBoH_+% zXpf7tM<)FlVH@nAkVW94NE9|c6OkH_KBG?!m*406J^Sc`!r&#o@DJ(3hUBDPE0-Or z?`L`XH(TkkIBCX*&FQuYYbYjh$+$h=|AbFSu4 z-{KYMhMC$3t5>93}$FmMut_W6T!gDY} zA5s3e$Z0BhyEB>R($oX;c+kIrzV=EPXQF;$Bxg~#_CrQ_GD@Kz{s9&s!k@Kvt6gq? zxJ+pxmDRWV>7c)0OLhsDd#UC2{#nPZZ5I9I1hvrmNAGb-MLVS-m||yy+NinL9T>1) z_UUTvM=IPXDS9yGu>P*B0nu0`RjixOHgHuzrK>xyRiFBVee`FA0Vzd`|na<-gdMKY_nazY|e|u^*l&t^HQIz z)=qpyYsjqP!aW5^hkfz`B{qI9)BJm=8Q0xVmHsZckf#l65GzYdV*H@g*!Wcy zxeIqeHl+dZ8+^~edUOFTmyUeDb{RIM8MB;sUDKG^5gU(&7^jHNUg+kO+io(DuykUr>E0bW(IB zejaZEKz_sA5xFYjl&z4nBj1xV8;soA8k8E^t(tqQ=h3~zuNQYeV6ERMbM+{rIJ8`U z+`&h^GV&vL)<>>{n557#!>`(pB7Iyil1jkf?-bl6OjkbN@0aD)J|C&@xU#UusNY5i zx_sBv;u_xuC=pdHX$>`B-8hqVbaRf++nAQv7WE$kneT48|Djj$8h8PS`dI7_u)PD5 z@5SxUv)IllZocx(0Jv@VZ^ymd)3Lnn$BY~N{2o#lfPj|qNYk!#n1Z=(lou>Qt#(Y`QR^0&@oA7+lK7VT#+&?KrLNoa zN14!9-#Uow{Z8=L3bte!;Z4aVytqEJ?E3e--|4;00}aYl_jvHQo&m`g)`yi4-t_mI z_(HS(^1H0(clc7fDoPo*enjIOmB79IRuu@~e0hI0+ z!?ow9xNivp7!o!^D0DvE3&_Yt3U$R1bPKYG7rwci4A~ZMu*;!bb;j>v1yaY&2Buo_ ze$fy_jc>0vWQs}>3(C)WoqB9lc?Mn4KcRt)YmrI0IoVcev-c`$uYmp}?^L{L;J#=8 zh&*GWy{v_N%MGTfx|Ieu@BMcAoU3+8KEN~@AvKLB5;B{-tq=K~deqGtppbkLqqNm# zhl<VIDE;?W8n9I?hoY^doI81ivWU60_M^`D`4Oa2sn!U_oMJENjwE{|_ z^Z8HlYwfQZNG-@n6g~Xj(EOOsF^S4#K9H088t?D{;@~Zr_L+n#ka*mFiFix5s~XV4 z3@>B6`t=o#=ap^zs9if>t8ddt|5&7c&!PrvSO<=O7s4*(T)3Z$1$2jvmJi;?_dhUd z&Z<{^PIM_8cvyB=8EnSvni*155|ZD}O!e{ww^B~JMO<}0IJ5Cpb%ng0oa7yqyyB?8 zr1RN>!gYn7%9mizwX=udPVr<@rODx|kfz}G(s?rn_z3WE!|Gg*CQ3@m_19hHH=1pK zx>w?LiClqX<{;?54>Ofr8q!^Bf8pbhzTjxdTu=6NyWQFk80B_@S59Z@4SzUpRgfHSJjw^{oL z<*d%d^~iBsEi=aV?%g_ZHj=*d#@U@ru9KXbIYWW=`!=2s&#P}rc1dN8|7GUZ6u<2z z45^j1xO!Ah6jIZ@UqMs4=lIV2*T!oM=`BG9ECPe^cglk%$l2uk`GNlP_1p9E3_gd9 zhw~A+#Ojxdo8_Mt?kuS&_^MV+hHzcng5m`QCxOz}iKFIsOEb?*ALXU={J8pm5SD8hYH-MGt&8h=+#}yLHhl^A_P&H25*0gV ziXmx*Y+nF~gWL>I6guo?_mxcoQ&fE9_6s?pa{#sb=p{;<{&6-sY991ts|&;m@8kCE zDe3o+`qMHID>&!@0C@7N@>rCC%ABB}Z{@dh3s%;816JEb^Zq~pw2+b)I~R45>gjDf zlN83a(H%S~Vcz4zmqElN_1W#3YDw@LJvjWH=lw=%RwLp83?*?4a-4$xRF}*zpL7Rj zhQISJ!nqPjf#f$JW@!3dMEv@TVM6tAqMrwLgw4|j=}j8YS~0hUFSIhu;~^jb|G8dJ zoUag+M+L~i<&or{UIH~Q-F5ZlF)oT*f;6=T9uptx7nvm0i)!@md*pvPS%5(am!9RQ zEljT&_vi1*sOreSO0svMessXzcBX5Pl#rMA69-N~C9Pb84axWO%5`xxPfpd7eRbnD zpO?jCo7%p@he@~FBlEgPA`6*L`;+oQN~qA3%Ji3SF7&;f25pj+UJh#=DyCg|hVfzr z>HnrrBZUFmaVS)1pEVxMLI7hkB$LXPK}8ewSWCvEfL zzlpzezD)9$l5ASE-E6v3(<%N=bnYDuu^;b8rEoz2#&$j*$zyzZ#RIfg2YMBX@mQNk z$vX|IpI;A0fd$as15yR`E3;>@~Z$#|fQ0|Gb*zYCcb3|1=Qn?DZp!H$na7 zOF)U5DO7W)ydjILKwR#&pf{cLF(3R9-405)lw_7z9XAL*#M4G z64+XP3!NF_H~6YCnY1L41oXif5i;xI9+;(Kw@;0-*sC{HR`bgt{0(&Q`io@6l^pWH z%;){`@lQu8dJDwlC7E|(k*z<7g><-H?aVX0h{vaNDfZrU;5%JNg7Kbnuw5E45cj;4 zo~fw5Sae^g8XZ3{eH6#@ZW(n=KufV7IL;Fq8SeY^g!XgXN-{&%aYqysZtprr|9v{& zKXTVPX*V;jvo@l={BHGCm<$>MQ(?aUzU=Wg_LAwb#U=PyFN-2I_bEK}9tE*5?&0nk zh$CKBF1(>-=|SuMXL})*XzAx;YvJSJDEalW=y7tyr)!V^;XBaK*oYzWjM~&a=&Jst zOdC|}2??tL3i$5@pC~!#FTVBum>PNA{-a+GiBO{z0@0@L<_o(pm_9{zP|w_>{&@+k zz&Zi`)jzr2_sBQq6UZGj_4pGmk@g2dy#nozK^I05q8|5uWzcUYL_>H6$^#7$>f5hnbklD)-u(3F`5o{3mPaUT0~7waTebw zZ74PS3XhoiOwYErI#-auEL0HLl>``&)mV7woX*V(q zdfCvg<};@o+!!s8>7uQsG>+yIln>WWRztWns9IVCrz(JF==6p7G4NamSBowY0P(?J zD2`M!y_BLW9z-XN-<2XkrgfI3u(YXn7a$dHO8Y7K2PF-_vChYN|HL6LlaZ_|FmEpi zhN_RQUq2*=5vhTxY02F=igR!2Z4=bLp$SM-gj}p*cNPC4aV>1IK?!MVGn37mbGKMwNY-O zTSqg;lkQh%sO8dpxP4p^Ehudj=rS20PH{bFC`lnxQMeZMx>cfue4!lZiHn^^WtP3o z6m5!E=$_xNI_EH`=-OKGwM?kPk4_K2h3)J8?socK zSeRX14Z32!7qatLzCWw$wO2={x9}{Iu$l>0c*UgEpqj=1VmsF!9$G=x*B`nU|7B)J zKb$uUBAp=fWoQ%*dlGP8%T9PEaIj%bok?v)je+{Paj39AHM?|&7zDTND!j$B{{F!r zH}0qbH);&i42g?zpphvlgqAU(&L|3-jwyqQI1$W5buDx&VcW8@2|kq z!0M~t?-Y3?W-n)k%<&+8_4uhLPxB#OlEaQ0zPr=Cn>e47B7;FKU&IS8zvQ`oo7h>S zIrH>@VL=7k4Q9f2;DM`m={wQYW4F&p{7NeJHqT;Q429?jNBrjM!5KqhzSmHo+hr5Y zYr5q>hk3L5Tx)oUnhCC!E4}qNn>8~2;u{PA4jCiZ1GpDi#@$&ad))=WsI0y_Xj_(j z=j5wKdjqh?vr8`K+a-ug?^E9f!ca2Kb!3M3mFHC~yov`LCWHXw@MGev1hA5s7;a6Kq2x`ad?p>%x6M7cY zlqApmmi}mlr#X6px4RFs3b$4QE z1x|T(Ogrd@0w^=8V_bi?;_%dOvL@7Pc}g#JFYN}2Ilsd5gIWYrzt0fYw(h`EHA!za zBHU75G1FW0sdmLbWi)&i)IwCc+lA0?g7#s*v=aRhzWOf~O9iSg6;prUbe1=;th*N5 zApD{$*?y66C2sZS^BHQh%b(S&C3Cee*KeqEx;f;<_Gio1_eYV(WeH!{4+?*N z6mTao9)H*yC4amgO& z(6%Y7(H`f$?O^wcOLG?A*d5?10!&k-JSbg*CZMi^OvuAg-4c+t53oxdsKW)Bj^>dy zW^fZdwaZ`jn?IR4zMbE4ZiJZ!i6W%^7uD#Z|z$@)=5c!o-F53J%^^c)!tu z@VdVD2RvSFRbh$vV;C6RTX%kQY~CKa-q8QN*n(ST2Ut>-%WS=MzAJI6+KE$Ih)54g z`35ywY=1lq@m`Al+VA3>31D;fhv8HseJcE%VX7LwovO#)e@jN~-pm56RE9ZxAI1n* zcpFEwkJ9Pr=jSGY!Snkku@oGD zzNs^sbvDdJI_dzkkdt)CEVdS_gUff>f%DTVtOgvKGLY66h7JEC#o^HPc%mj#Sl5qF z65Mzz3<;^&yA1hy_5Pwvhs0BHOzm6e{QzfdH#y`x+pYENbJJDv~9R6j^dGoFEz00n;Ab}w^(nd zEw4m0cL?+bv5Kq=x6gwkqd}5a*lSC2w;T>YOI`%OI0RA?rS&j!eV~+=K}vpbr^{We zxnz_{Y3L7!y#p}TFZ9To(g1hM?qGmO4qxxmWT07({M?y z4P4f-5?y@YP4vZ@DOhOF*3Ag`E`9%~508>+VnRZ={ymO6dA3RVcRZrz9PI|(G+x?^ z2X;=xZ+8xnG0~V0*FIVPRPoF$e6xJ1z=xfLu=O==aY3Qr9`4T~TSG-Im5l=pB;;z2 z*C*VatGL_Uin~glBliaj!8ef0z}kXso^sX3^m*DY^%Z+8wPOy?$H|X+Ti~ok7uOpC zt@0AD?wsWhNk3E)`BZf@Z_^`}#PjR(sMfLFJ9pmrOCT9Y;Yr0{M8Ox${XqebKQ&;z z!L+7Oeor@-d5iWjJ0MEFHBd-j9{h~)8JXBZA#W^5KXe{o zOy!xmfBTd3+gkih47sOH;?uT%^j;XhKBKc>uQK`kLkYb2Q!tJ2!Vmm6HW3d<<3-eO zl+?V9);)*nI9!qoR`H{wb=iv&yMH?k$2~2mcsx&+v?RrKOZ{@If|?C1qxX6|soRP@ z7#ubZcN{QYwV*f%8g(~B_>1oW$Q>pcB{9{r)W`S+u*$)J=vxxUnw*}jK%8C;rac?J z$N?xVm0rVhu8$o9HY}C_~Ka&)+Bo$>X1yCp+B4!%V*(zC49i`CN@Pd^`a) zQSWj=$?)LVC9hNb!afw~?k%#}v*fjVy_neEHM$+_1NnWSinXR?)n8bxh+et&IOO`i zuTCfjI5#pVI9#>n?8Y{i*40oC`H3a74ko)I?1kRo2$7plx6$Pkyncwz*7vZ*T=4~0 z-E0!h1BLiHcS1-5L^ILPgTmx%f)zv~vC}Glvb21{JI&u2WCY3bo=t2c*b4afl8mnH zfq%$o)oXtV(YyuOPL5knk9K0M!BNUI8uYtcFoz&y2!5FzkLln3`f@1EcLZ+X2PF$Xvx0-&3w-ghM#ox`1H5|xXq$Ku z?NtfNT%=6$N_S`Q=R7s(9l&XPDwY`FeYsdV=rCrT-Xt8h`|kP{>Razh8SY-3w7b{GA22iD|SFF`KFoo+bi0a=5j!I-IC_ZEd za*B1KmwX)U=J)cevSJv4F(tBAJ+PYJURzl6T77GUdsdd(0W|( zEVU;SaD15M`i&z=84X8Kezl(8?N0)ow z>h>?Hy%&qQi`S-@1kC(m2<3toI@_lZeceKBDvI?vo!`76{N)=T=D2-5u z$fAA9cjFuF&WI2(wd-+j)koPu74>ZAD z^oRRb#+Z6xQG>$R!YCZ=k&@S~NRNzhCEv!n+xaU+)v{Z|Dr)1YaFCAep=w$DbyX;c zls_{=P7o`s8z(2yvaRBpItd{dYLT;`8FKxaBs1eLG7v#LLYo%9aOBs=4e{%S%sCZ2 zP@#MJS-*SjkE!kX1rH7MYYbnjIc~^=65}Q5Qax=LHL7kIw26%Vj?|b>;K#dz{EYS7 zr~SE_6UaQ?W8C5;ynPixxq|Cm91n_WKn54QXruMW1a1d#-eT0Vo4rwf^z2w2`pE_{ zW$)ATYlfe&XW+t%KMoQ%a`o~YMR)f=qn49?^Th;pJl-8lRManb`WpN3xA6U=^ofl( zeak>}po{NI7qsQqR7HMZfTPdhgl58`FR;c(MFzm@0(|VZ0*E^{V+o}yzn?z(thLu) zsJ7B2ZWA(Q55X9=jXaerf3JJ$F8Xv^8R8n8cl>tSF*VQgB?(9#2yxGMbF;E*go{+Z ztBe9pki93jwwuFbV3-J9wmQh$vgxNqU} zLj#Qj&_DyloJhXyNy%qi?^|5+qatr3>ZXcF)(i8lUge#|YWMv2|_Tp^3=HuZP)L^hLqv+00&l0b^bX_6x01` zAq_!??%$`{pidk=*-r5+l_yyv#vQoe+j3lnrJVXR<*~-|_oMDS1<*y49LvQ?P5`MM z&3U=|S#-6E$kjjjsSz@P3X;!nFTnT5qC+X#EsxpK0r?(!)>3mAyw95RH(B5C%BqC~Zq~HtrEoOb= zUculi95eaBl_?|^%sxznb3AF!zg$a>1IiE{rM*H0byuKaaiCX`Wa0-lX)m>m-Us}8 zA}B5g1yt65(8Jh$yF&;GE{Ii;2|X?rt9cg0$$mSqu`U#@3BR8F@ebJb1Mp8b*bHy- zr8guopB1>+mPd)KMesd=4h zL|0misq;v}9(lou@o)Y08;wg_cLNE4f(#Z`=b!rrG`_JH;B=QTe`m+BR*&Z^=m@jg zm*N?hVJ8phTmcwwd-y$+Gkg5YLkncUnjQ2+dqL5Xj4XKSC#aJmKnRK-h0d7k^SN8I zYWPr2YLyOE0UjV8ogb*ZEqnpKerBJq3g;e+IRR{j+LJLM$6|EoZ^n^&vm0E&{QG4l zcWgV$z@|6q@3+W#^qa~f5TM$0ypQB6pLS+jcFwurKQ?Tzc2)u{a!qgEQ~a8(WM8*t z1m_b`O82~d|LuUJK6U>6VUimpmg_x3O`3I#{Q9xw$9MNwbAN6wuP=$#W^g3myZ}=nw^oL4|Q|=8!p+-@UdUl4iQLhJtrwU z&_-RRA2b7xGnKe4hABAEb-^e@KxBh4SPhJSq&>%A9y1u1e=V1LJD&ANygap}r4ifS z4lQYE|S^! zK>QO40$g$bR6=()NKkOKZoUw&6@0O)q}I!>%sTp(wf+1(bRDv=wzyd=a^||AG^AlO zeegp)IIj2aHC`$G{wjlc{sryLe=j&RNF)`-!!oz44zJ>*CWUD5*H3sI#v{ja-H}=c zSdk5?Nfkkk9@#mw9$iUxSWj;Xz0+hJKJWoJT_xN`rAyLIh#qJ^@2bamoroQ%7M`H) z?(7fyY1IJK@{7)_;OkTy4@j?=kQTp@>(k;`m6EU@v9rhzn&6zLLRjdAfAU=()d4+# zn7Hbr)NZQb-uKtKf~WmcWschp(!+VV4$$(vKJBU!VD^ENpm7jSO6y(UqYh+dbNqDD{72e; zppp@GaL@FUUg(!A+SY55o9SHQ`F9CV)>{dAZdmIa}!f-V(lj z`KjgATFhq*YsThncyqQD!66Jib#*LsZ*h~bHY?cOxKBGeH4hS9daq!=y-3TS@Fg2Z zoT38dPJCAQtkC$f;MDX1?)!Hz;f2y?^2vclok_}Qb=07vi)G?XF4+pXop;}nxjA!z zfRk5lsxH8->N?+E}K>c|Bd`|E%hFBMwLCi=Cl`>l>y9QX@StN~Gd+$l;iC-qv*zi5I4=;jcPymKg1T zLLQmed<5fsB$*{8_se9UT7nO$&3e78->?ndOk9bNuN^9a6{C&e|GtL8Ht$B1D{1US zGYi28!GhlK>v4C{3^Sc@nKCJ$02995ZZJXA`9KfviDSi30I;efJB1;3o#!@A0ou8p zFM4~G(N?SxH}02xUjXQ_9&OB7%>y5ueP5^3%9ZnhQ_w+(Lw$(M>(p&o!%c9-)puX} z@cRniy5vOq#DL=L{+hY&yZR;?#c75s4A{1Jv3q7`1!8%gt+HkZ<~D8i0kZa48TM`i zwh~TS?dEAZotam*3MCrxBo@_=5O6(zTW`_ss9M=x=;DbF2Ad4vQ@;i9s{7QHKAJGg zx=D{%5nvCl@}Ie;u*d>#c`^`=wEJac=S#@w!8D;B&)LuWJPhYwr)S`C6jSz6ZeDd= zd$MmC>1E2Z10l5?@!;WhA(1e-Ui}&B_Dm#JPPP($oPJYp&so=_#in`Uhq*e6y!Uj%twD?5FL>TaCo zsb~X`N?^`q(Ry)!8QCvst44*%t?YmomymK7Wsu6fa>^pHK3;^EL(#&p&XDxo{Ooan zi-RvYho>qg(6If()fwG0F7(kIdM=OABjK}Agn3WLW)vf)f4)c~duhLohvN#%kpTk= z={YGaTdS;Okjh~Ggz+LpCy7PU(@EqQmFPqkOb)~dB4+a47*;fS@t&{AsX`z3xGTzz zu6AIFM#7A)Kvs|70U=tvK0o=@LgGlC7YYQ=)Sc{urt>b3^0l$L16tqG z#UG|GCb9O*M=42d;h6u%F!ly$$kpSvWd@5KxFCl+ke!F*9mY-23Y&qC3WSk`!xOU> z&%m>pzb$}8310oJsZEim9leGjPom2A9@($Nf~OemK=Y`5gr(`gC%A2nX`>3y-ElPY zuN69}B8dqN6IqvB3yf9`iuppACnn>oj8G#(!;*wb9>G&%Xo(A(W!F}jZU>VbD91gw zFXX{j#mWv`PRT%l#tY|PWkDlhb?m_;v^iHgYN;`GCu@=(h3j?inR-IBox@$3vv$8y zw<`$H&JdR4;gIG^>m7%pE=HuElBnIrT5$CIXg+ne)Ijjj1Q8!1W~BIz>LWZxAcyh6EMbKG z?z{!;rMZd1dH?h8Fy>UHXu0<;|D62U85+K$CT@h6%JVgSdl&_J5=5vLC=mD0@?%E_ z`+Qnndop6p5p8uN-(Y`p{#~5Q>o-Bkr3vYKZErm+8J1#yYy*A+xokL3a7;f)HY5j_ z-^bV9UMgztMeO&(HJjv(b#c;KGCrP3m@uy4ZJH{?_VFXQa1Q^xGgdEsD&e^&GZ`cO z;&4MAZ;*k=4aE*eH+R%lIXhuln!~=*yI@3#)jbSlbb*IfBEBA9gS94`?}WZw?beo` zdvr?|n1IDk%@6OesZfNs1*@2))tVmZ5vdIZit?&n~n>7BI*lDo6*h-;r5z zsDbp^NX)tbaVv8i^z;|G<|_o z{!-^}vpdo0fH0#?)DgmFpbDaQc3IBQnTM4H=fOA1zSq)C5WYcmuM+-;&DLA}eSq1w zIZn(&))<~5RZrt_pHt-!A&KIBHixl^@g(s?KKjx*7}&O+t{QGo4=i1h-5}erwj2U) zw7}0YTW|`>lr*)Q3p#vFaub5*%s^I~@jK|t(E)Zg3_2kW1n&8ZmD}q24pmrA_YKqT zPab*ocr^#TI@z08HlBRe<6TDOEayaNUcS2sou$3PN{x({OK=xFO8SnIo&Uh!9Uf+ zwFL54W&kmEd4*;TNqnf|FpGE25y|KvhZVy77DzGtHZknN| zmm50!$>|KmEv9hGEqxI6WGzJTK|$AfOfv&)#fNdHRN{3Xd%O4nQ}(8D2j#qyB{bb% zXP&k%3@|H~Xi@2clQ|$*y}fu5+EKiIHwCUIC`Br`&$5Vu!`;GiqU_m8ZIse#4ErAM zV+#g}=NRJz{#s}JE4BOP(?M(fwF{kUNOMrS$;Tay&kbTfR8dIGoeJ-4B{BB)TU9a* zPnT_jn=&=IgD;nJG6c?1jC4xePN$dCK8}LdWPaCQPY@M4s+VMNND2ZIH$z{mjt|N- zKFd2kM&0|Q*s8X50|*i0p?Ks^<~GOdP4~9)emADqJv}g{OC~O_32bfXw*;2bD@u5^ZmkPBvX1ZaKj2NfZK58pHf~V*ZMi*jqYQ z)KBli{yBy)gbTGIaDCxdh5awdWcNb3hn^ySI6sa4w*>6*^l{RQqo1Vn)XB6sx%M-~ zD-#Y`89+W_I^I-dW*YQmIK!UB`VGS){S0A~t`#li0Vb=u-M{PtWhGgVeQ8wsX?vuW z+*355fg-t7b-Je9%6n^+v5^y`-WZo`4PNnvh1 z84+@C&d`HUF-_tuuS=G=_ z=zZfOr#k{&zR zNNo(LWt=~0Ie>1D&+vWLH!#g1+KpCDQU^@(_~<-0T)A(71s7cE*Aa=^4sZr z`{9E=Tu7%=9jnZH4~%Ua2B}0Nia6u-`y^LFE=B*VfbG8{Hi}yGK9Z3Zv}=!AWSA>J z=ez}R$&jz%X6?b)Ox;-6Eynw2eiCad;njL4_`Aw$qwphL@$O1rVmaXsE0kjI>6rc0 zr+JN%$9}cBRC*Hsb6#m5X@LQM+R-CJ&TX1E#Q#X2x4m+G%^p4M$HwDqkM{6s>z&0*( z*q7Yta@WQ#c~jG`054G$Y+<2vuarLNi{0Ny@$1mWO@lH+_nY%)TXqyaeW`et(}(9jE-f>2g>6 z^ryIzm6mde;BIqFfJwlQu;BjY!DH6M$n$3K;5;gW;YW3b$;|G^WI)6W-ToR4VH-XC zt3-lW1ii!j?CjgBi^}wr-nF;+Qtqw%}?J^In4*yRlttYTR20?gF#HYW-uQbHN~ zWJus#X|$%`-e>&YDc{USvlkVz&Bh-gfL{js^%Ztn?2!`7HTZ1KCGKXj%5~cw#%|Y$ z%5Efkq;EfIr&z&QKKFLMun}1nws4zW7(O}ElpRd?RAgR{28(EvqvPGFwze$qQ%w2k zb$ki#vD#qE1(dvzVToH<=UPTo5^}-0H{5nPGYO?{$*syG88j` z7y1bos#WJHfL;l;Gby-R`N_fBTg$>f$hx$b#9E3)&pUm^qH}4O;ijMxYGo1o(QT23 z%{zbg%%DBPTgIx0^e~54Am()*#;}Ce`!0eq^~xZ}(tb5fA!ce8_wBFd$0aqBWXm(l z6;Cn+lsftOf%ybFIz641!05=B7SGORx#>zAMf);= z5(y*dUbDa7go&x`Q)}Js)WAW464tzr{wj#j;htIu8wlK`ItzvKtd5_(Dx(~y=?+Oi z$My;5^0%J#<@*r^984nW{ zRvD?sBUhM@_IV2B3tBOCq$CID*lp^3sg;t#anCU%l1G(OTdjB>0k{yJQMqHVZL5nv zfuFX8kvLL(#5xA0Q{^dwwd_>e(Qw6n|?^`~EBcB!O8$oX1v z7wu!z9P6s@a&}ph@fLPXw+q|EX*xw*dU9;-t(#*JU$@)wb9~%)c{-5>pyp4{ofsKb z#X|{c5~cG;ep*l?1wLY06F7u+BEj^7((%-_m+A};Llj>H+)$@Px&}3@rC8;IZME8* zN5ZyDGV?@jt)4P-{pW$l7OuYx=F62Y zP>jQYSb#O^b^&XxT`01pNQ33J)mPiU?(!9YKjpO(kR~WFYsc1>8XE3=c)CzDKS*X= zm&R+aq;>X2(yXepJUc%5) zl6m^va16(Z!7XK=rV(fFv=@tdi_Y;)-A5l+oWA*Rg3L61(#`t_qBEz6tG~Xg2k0_u z=ub%&a~CP4Jt#%XYP)b@KyGaz`_Ha(#G~*e4_}YB{`3HkcY=4e|5@~>A%kDP1bUqcF)hm_az3jO9{ELF!i7fYrfy(Iio7Hqb z06=1zLfpKgtFbF0AHX(GWPx0U7wHn)D`7||(Q$Yi63P#Fb36YGKttk6mg+#F{!k`( zNoXwxcphHY45U2qUiOgo?2orah1@C*p<#vjQ56Ili`Kq%KfMBl9IorL0}Wa0`shh? zbtChWe|wn%tXb7JPU0_}^9-0L+ zv}tiJA1XxcOM6lEfY+SZ99rX$D%bK!Kf;cv+p6&i?f0o!QDNAA}xJ6Ymi{@xLDn_chV`s(cty^>716|odlZ! z7>9XH;hl5#I(_sGZmkfG2vW*{{*^JA5vgmV{g!-5M;aN9zJ7`OGxd$g;J0IOFqRMXQnO#T7?Su{(cc~F8i&a z9Wuy8I;y#lTE9iwcPh%{84uo*>EBiPy@RKX(NxAOV{|g&^S%A!>A2!%z#rjTzI*kz zaH_gE=x-!{;O?U!kQkkQ{d2_vS`)7?KHX^J#ZdZGXx6*HqB>^cpur>B>qd-Jln zUwv%dr*p-%AD1Ny@^o}!_qmJ<3-;EQC)svqkw%b-nTGK$Lq!t%#a1WP zdqo!^gkj#zb4|}?mMo}!;3lc;!zy5B{+_h%SoH-_hrn|bT_P1^I zx*0U;Y}Spm-{KoPAu{DJ6$Qs=JbfT%GCIx-`Ba7{cNPPhE&_7D2M&>6Eet>PmGznJ zIB}6k4I7*V2_-6-e>~w`^rx%gD{gqdAGSUI+6#L(mvO8xFYMp!T8{(D!P_OWp<&a5 zKBL#~5666pOTmA*a7VNtK}8Wy+4$pu#K}@A+A2OgkN)%52C!`>%$D_tUzf5wA;TkC zQ@nK)4fSj6kg!22t{&Ohs9-^pCk>-M|~h2IcwW}t3)1$0}Nmc6od!lCIl z&Lr%L5W`mH8v*sFz8eoW#zh%*i^ji+oC;8=baG$YfO2Mk;UuzL*_zi!^(O+g0|3|3 zY>*FWohBM>9G(dPwQ%zkOt`EUW&hrzQ8ZJGs1ZaM=ZJgr9srj|$Z2mud=bToCca@oi}DhV}}nG1{-Wed|Bp zn92(K2;C;9M6ve3b zV9s7a_Bfhmp72Qzy0kwwb8BDhXtq}}i!bD3Uv>MyyxPadWE2OPFe-2A<^9C#TSB3Q ztRTK(^m+io^|@a6c?N%~W~p_U`5uY+UC$N})Io{l!0CyBqu>^jrY&BeJSLj40IU6% z?XPQX0FgVHi`|7u@qbH!!|6T&ku#9O0|(Qrx4DOV!FJV0^R&&1O5ff3^bl#cmY0FY79LqXP}L)wey~n9xQf->mp!U(DZO98y?5 zclnhwf4q6mt^&ufT}^ER7diLt4YpZP%ZTkvZGT(u2P@F)L;^sA|0(Uj0F_4n+zEz7 zFIRnpbl!a^ExZ4Itl=>YL%T)r6CEEJABDkW_^H;c3v04$A}h63o4R}?wbcSLJwveq z6p#AF=#&JXGq?-reEe7WFb;`6mqw=Q=W~@{pS2HYCR+}^0#g~7)?D+&>NBbqyvT@% zSf+xM%mcvRYk3Je<1P_gt$lnbNk3;B<1G)aNB!F-p;`DZRqL2)fve)#=Ez>;(16HL z*^9#@J)0F;9H%Ew5=)Zd8&nSo1%}AyzceA?Mw2{ftV6_IR1tJw;xR2wt!GMvhH~f~zGy?IWUY`x#Xh-cpX*X}AGJrVnHffo3|_`3>^zW_*?>`P#h` z=Lwx$b|6}Q$_(^(L&N@a;8H1ARw&2`^Wik0ocExI>=1{|$A@$OYy)$vM5iZzg#}M> zqaVl{j@p~TVV^LwhqJ_=TlqYriKzrQ)|!t&iYA5u4#Rk-LYM@wu#qhp`!;GSBPcFH zQfKIZ#H;H773$k`(r*G02*@B=KX)+!31*-EWYP0?I=A-@zJgfg7@g43)@?U1FGRkO zIY9LwgtN~ILEGd_dy1$LV78m6?pYJ-0;e#GK6|(uFJEKcfl4%S2bfQ#jRX)}H+2dmzK&sL_=9y2D`7 zb2S^q;8)#<_MQQ|9;Yf&_l2Ep8c7&C_73x#(PER)gtUtkUs5Yw+uSfOU|e9LkPaoB z24__>yr*;a8uG~7=6I;{A>D*~?zZWS)_WiUa0bpR0c1A>E`(4$uUy)-$7f5KcP6-% zlQ$vh3?GEhxXvktx-?#!)7=4l_FX%=RmjqQfk4NWS8;$I6P@1{=qNZme0y~ zRklSSOHPax-n>xZgp{8#GSupTm;rx@_4Zw{6J=S0z-K3OUd!Y}ue=K83pzOH%f+Rr zA?j~A+CU!nucjpGRXy&LK@~j4!~KeS7DJN%|v;Q zhV$!zI2?3xUV#}oThIuJ?(K&Cl3nngadf|QX7l>}@TOYXd+aI63}`m7GGXz2xjKim zfd9qst3Aa20)Xs&C|)RGkhykFWi5qy`}~bh7r$8H({wnS9ZZai4W3l{WuwsmC1tYT ze6aJCf*+zaZqlZIk`5r-)Uc$A~fQwQd+_SLVBXEb}KhG1?)v${v#fR$9 zUu{#O5RIZXrh|2Ri`PgV)pNO^oN^%y0WVtN|50Cr)bY>P>$H!z0F;BJar!p@qM)om zAbHH*2_FJh$Q_^i`FYmhljMyNJ1j#7t_OU;Q=`}g5S%wU)o-8DmRKhi#zH`z2!xC} z0fYyYO}gR{d@B~cPrpoLEC+^KV9p)4FAry%dA`8Nnk)9aSAg0odqr9hciJTb}#)gs+xj zEqV}GnW>Klc-{A}2LVG0^x!@T$pJoeuSuA;xuDakEzTHlY?ypz?lgYhnHIfaHz>dQ z2X-5ZAtRVydvjQh>d`(iBlkQzBpT%`_h&dg#;x@J5P%on?$00hlVARjp`!0szR`3! z%;WZ8$CQyhL+x$9{5hA$rW)5QwKT7O{@a#)SLzaI|YJ=A60 z{dyMJOqbKRz6$c;7$FtR1O3X+u#=5xY7-P>4@i{CX2znh=}S@cj%6@V0qCeR@;7y6 zA|JjUYv~2=zesd6z3T^7Q4XSpg-uGSlIrb!Gc{3t4~HL({e_hWmPg`Qid0S6_d4NN zIMWKcZ>d|2c7#UN`IGk#wCx%^9(}TOo%82Q0GsRj48-j|y@ZEut54h_7Tv?NYL^~S zSCEb4_tYJ}n&+|vq(hskNC5V7BYCP5sWeF*EJQ-U z_ngleFEL-QnH9b%%LwAT-7|EyaL9?L(I!s+9|x zGO;P~{j$3p7MAkidksn*e1I2V)*;b>S?$R?`^8iv2H>nO`~0F)sXJVHzOOf*usSmB z1~T$rz7kJWQr+oIU9CaT-uB-f>b^&N%}%H@s+)`Ubtb4$0~PIK4~q{R)@zBNnz`S7 zBx9>y3Hq5I=cS}*;z=mL#0TUtjsm+yjr+!@Dg5r6;?eDHm063R%aq7#wE&Gh3 zA=HOqg0w*RARvpVWQ}0S;l7cOY%7K`2fgzE)ozV&`O-%$<8!c6gMAjFZ6rTteG)xm znlp*st2|gT6ogtc%x^Cn=$VnbHfhAo5k@Lf?DM`2V`bp-k)HsG1=UnZNZ2#3Dn*+x z`<;k=oHJhcvj%t=QGMX5KWP5o+4g3)*FNdD>@@1b#K7_XzLX#L0UZHnuXl4Q%=zXV zv~~1fcf3mnXYk+`)9lNYt&HSp`Fk6@Xj^V>S5>sZx~G!~W=9tcksSo5-#&_q$4B6J zvIo^`D(~P*Z0~1vA*7pqXlwaoU_GHkI~NIckiUDAz7K(KI9*A7+abJWD<{{3lMt|qZ z$hVGaflfL;pkh|9qx`hn{-V>Kimfj+6Y)JctIYoMzU2iOBkICjibf|e<82q;ND7rc zmanx2klak{{k@%9ntl`L8@RPPdo=d#5?cLknq)6&N!`iyl&YZ~p6*EuW7arHP7THE z%2;J!SN4ERSg`bH;F!_xaps^A&?dCLT;=TXlOE$bpfT>J@Hzt!usR!$6O&(_=W zDgRZ-8L@!zi;NdEZFByx@Ot~BSTn(928_bwkgJwiUUzX%mF!|YRD4U7u`|L^nFPda z>Inx@_d%8C7X3jU;_H~r%-I=XF@^bJIx5b7laXIEC7VfG&4;Dvtc-c9(sH6sSDX1X z(F0&rJZTp0e0IB0pn4tS+r95TrBam7Mr+rGM7O{CYHjD;M{j!WtfQt9%w6q*z86~0 zaNX~9pAuyCrpP^mo%FIuJ6IyX#&RI<0X5225x4fc*^;l=-_Lto@n(BLV42@t_QY9D zN^kz#7WTSBtF(9Z%4-m;&nh^--L^zPjGbGP1qWp4WWn?5;+ng^FZWPYy&lK?VH`pB zG#(G0s?in=-f_*QCrr+ULPpFg&kCk5ElW9%P4+GV0f(LxCxHXsG!79Jn z3f7h~GpftJi+F9Ph}{RMslFGeDeq>HGC$^dcsUdOi$wjl2W@bZ}rI z#Bw=|AYtq697)=3X{vitdn}?K8LbHzhHjx_{acUsZzDdreOZR#yFXw?9dv4}0H;DN zaCyk(8YdqzPur}$eOXwqr}`~87v!Ae+@8hoY2+N7#rWpGd}sekNEFhHKDc{ui`Wcu z2k3}YfQ4RH$YktJf9&Dhel$lWjA~a;g_)C)DOb;*B6@}Ho+g#fIp~8v7pRDF?cy!^ zSI*d&zGMXAeKs3Qzv&G9Itz$z$NTkgMF$UtxTIbl^}8<#S-A%G;yliRJbVWOE|s+2 zuGXaefOi#b`;Ke^W%yFcM{o*Y;>Y!O9>OUFv75JRH+8_X*|)WQq#n^UUToqmo5XYQ z0}@tSax2k@gCND(xjB5IXj2%SU46~{SfN?*YhnRY2w%a^+0n&#{gkwDTe}N#{ht*F zX^s!PwejT7vc9AlvE0)8E5Rd*c9!JMkfb^R7odn5e>%S9ruT-I##y>#8M*T~*84M~ z$Ipp*Dj06hcKbNY;Me|UuBQ#mR(6bJe|=-f@3Vdja|l`@0*H1lg5n84)y~w6t;s&n zr|07Eoa^9uUj*k$wVp(@XXte{a^H~LyvLqv8mi{ccEr-Z#r=GF{cUme+eONYp59E~YOk109kAGmh#qhyDC!XH$=v)=ElxeyQ4g-1P-Ih&(*_%xlInDLy`1=*>o z_+lY2o_&mJg@^yf!6dzVd~X6cYr{hVhj#qElZJeFev6OcuHJQio@`?|eWu~&MzrTl zQ+fLBGiCU92bMF@FV6RK0GsAb+49g$ik=vTIW9X5K=JS1IAf?Q>Sw#rX)gWe);9FJ~vxLhBV?1a7l<4#8XHyf3rE)09$kIJvIu2Lq2! z=FS_z@}_1>$+F-qN8Mk|@mwC#aOlxlvzI&+`6CKICLWRtn#yFiDY;)a;P)x=%gQ4_ z95pZd!hsp{)1M`hy2cT%y+r8o2vfcEc){0I%C*qHrYT$*&SLf{F+M4_SC1!S+d{fI zp3eFNB90$On_B>22#@=eZvw!RW78Jn3`EAErXzHMO?9}YfHCWJ(ATIhV)0Z&+AAF^ zTq8qhRXgY&hRE6NxOwHcxWgWI^}LKMqVqxb{(NT5eeimZjeeyB1wN|!h<#Yr;g`<& zi9CRpPO9(dLXUU~=Eo;x(5Sk+rOt$9ZNgHaz*R>yk-1&PG}o2es@#Ye0Bby0r54&wjnPmKs|oJ9?u!FxLI>~T2AJ~> zM0dY|;HiOWJ(UN8hMR<2imdpV>!yh+g4I3eg)N;Caqe~qPb@U@uUerl6KdASVJwTU zAwz1*)j#=+&+~|bJ|s^!F?)O4dhMm_-i?zUo6eoe=c6+{q7HHnN`e|%p_OC4IQrB$ zoA2fd$>vmsH_mru6=axeNHVomIGwCq~^Otl4XX}UoxVh6@G>?8rl89 z{ucc3`u+CH(Rcts6onc`BWCZAO;5k*hBtX4V*k{b1f4fo5m)%2M@%9e9ExE@>OI*S z+zlb4`W~uMa_2D2o&H-?5FdsjL3SG~4A76`p_f+ZaPFm>^LBb@l`Bm~FR+l%$s>RH zgje44D=**Hbn zv#Wls{Y&SZp>INbyXAc0zN1Gu84s(<*L_chKSSIPEi4m6r!1k$_z+|9{Obq6OAm&n zx%hWz*>@wK7cMe9?6F(sgeBi&fpbdg6{YD-u88w75!M~bVYDg zIs3tP*K1IEuz%KdUt=x;ITrRZvBJe}H6Y}rY(5@~^)uh`JrOv`w@FXolMA2%g)UYf zyPx*(WUn#ZYNg>Ip+soNOFkFrjyc4kPH4?($bEu^C%~nRZNQQ1;?WyI@=j1YmPtCu z@Mz}Uf6vy`YbzGkf)p5mY(weADxViVmzA@_)Li$@e8mkYd$yXS+uQ3U!kx0@_|-*? z6FDmY=Dou-1;>~T5EVdgj_5nwzxe_1q&GWfOzIy2L=w1t?x2P^E?*GOo6${ik1I2X zHE3UdlWZPooUFze#+%cvmBXv^2`&7F$$qmsJ7;>WsjWj@ z#LbCv?sELSl!p&8k7!nsr$XxgxV-mufC};Rfv(L&aAetJdQ{ThCau6mCw%U@Eaj2#*ZcU`Q%wqR$!JX@?x1<^{~rN^ z#*tr@K;D2(;g>a9EAEP2yJcAE^_1F!I4ztOn1l3O78!EG+!)4F*>a8CV&i4w`a(N@ ziz9y3s1hX=Lg3p9j+7<+3U57{9pGt$u5zY8ZTW7tlpM1MdA?@C^6Sr0tq-3NBRxW?C8{eyIz}gQoeK-rq4Vtd%&;8NDQZ0po zFK%7APu=a)Z?R0kL_3YvcjoO$mD|u`Ioa=)gysguEf(;y*Wc47Uk?RM|BXsIa%kGO z!#=JqvUQ6gff@b9`*SCiYP7}Xw@=V)LXCHo)j5yF?WJ^&KZWUq;81UA{ZH$0j{%*4 z*?PNh+p2}0r=q@SZE7!fVnT<6QNj#dB}-6_guIVB2EZe6 z(Cpzp(z%>&RCy;LM;tX6QUd9@hwjs7j8Xzna_Xv4_w{ol;KbKW(P_MFb~^W+ti#5d zC4mQZL+t&%AeVY_U!m=56;64c{PlwcMNfs0(O#Zo7IW&;xjnb(-BAA`Dhi95C5tad6~;w#@EMV90wcD9~n<}BjRbV z?6JI}+zZA1PF{GaSi-lZzSw$ZVZ{D@RAdMomr;TeDVDF7O@*06oj&hsX=b(e`19eM zf4iqq;bh_rO11-7>?x}98o;-K-G`%D^2f_uFG)U!?nB`dXMJs-KQEW{g2x#b4S!-2 zw!}bFfEn&{g2&?oNRq2X zcNduJch*W-!bBI?Q|r<0b6 zK?2BdU*Pw7ame2dCe`dNYFZoP;z!?u#PGtZd~5n-6TyjrRfX9`+BoeSLd^$E z5(|P9v+=OQ&n4mmr-~)Zr8wRr=jHx4yTQ-rQEJxj5@`kd3!;gXnrJIwBfTlvacBNOlQB7ENKH zN$N&C8P*lT*`?S3ISzM}k(IBS6- z`8D&X8)_WH`yPPfkJ!IwGR88Z;IcyU{Y23{xvH7+Sinon`>@J+@%fC_UnJeT$@t8A zVKdqUHNOh3TOY(W~NWpZ|dyp6*?@e)=wV8MSar(3#yb zG*d^9FDdbU(;kHSDQuyNz!&zTsX!@W_N0&k=hiUje%yGE(Hq9RZ`(Uo)}}=ejxKQ- zZC|&?z#sB`<@6XA$;<{MScHlSJ^)Tb#Q7up-qmmEQqfZRYVC2$v(4ru8yYQYsf7+6 z7w!Ie}$;TjqO9I#8e<4XaZeKHzD0LbWd1% z89XnS7#eQK*-AlIJmYFr^=GSZl$UU4pF+a2ae@~GjjzmKPu_9(b27yH@(%qn5S-KOvRD-1x1xu-c1Jl#hJ zlfY{K4TojfZm-Q|br^2-xV@k(-cIIzlWFGgiuMsQzC_36f0>|f>WQkBO9U1yl?Jqf zcfia^GRlM*;t_>wx%lWrtr5G!1J*Z>jhEtC^nJ-dH55s(P?6~4J9q7%K3 zdlN2 z3R~dA@LBjX`o6W;vwZI?x0+_4ja~T8Z{9aO9sdXkctyUDa=-T4D(<1?PUAhB&(M7fh0wFbRvB4F7y0dJ>#;|TKDN0V_qVJw!W)F zcMXr&gdAt6i|fTDn=+I%^718e19nop?Wy|E?9+@>`f7>_ki3^7O69A@SX{dO?pZtu zh2|%oQ|>z-1yB<&H!jc{R<9Ov?6h=vuw|WNwS72$SKyLi2DOWIz}bgiiR2n*^yPxL zLR%!F(Sau%Oks+jY-Ym=&sKXCTWT&2;ML?0vi+z3{i7BGM%3eUI0W6=$S{%doLEg> z22&zoJyh-)LNsu1WTfrum5PJJKcTJtoElLBt8JeuPR-r54;HT*690j+eUVlnU~o|0 zdw#J=U9QcE52vZ4j)`3!Tc!W0A6QG-LLmDipMsIM_4Ei2svrF4iukTv_Xzs9cE;>H zy>Iu+mxpb=Za@5%%z5OwvPDEn^m?IIk>Ajz_#t5*rWqYRbSql>X(!>SP%fuT`f*q! z71SX2hny>QxY8toR3!poJEifSsj|7>N#E!0M7=$mJqBpu0%nNQ?@?$hl*w@5WLdHl z#9w}EA0TX?*RTl824obuJSo}W8BtELZS=W(_wX@9h-mo5^4I$hLh8FY9jX0&J1kpM z|NL~&EKzCW!Ji&cs}hH|L`8ZT&%mGG0ZlEy#Xh(ms>;T}ujFd9LBtiUCA|({+&;o5 z3ZIc00>FayXgp(mm7ANO6GTh$Njl#8-|Fw{GqTI$z0#hyJ0QyvnD_g*)9h=0zRn;B zzt!f7uCr1KS|1L+n+=y15Y0E)N)u>=zQ!O9mwm4_+Dx->{=ZfEjn?tYaXWt@|9l0PQ+nlF`V?fXW%!~0j{V=x()_iO*2m7TJDOtrI@5867jT;rzZ~ot z$K4h~LI(T`dp7!q->AxF!Bv}zZ<4-MK)34jzGoU}3m zX;5hb7mwhf*T!BsQU)3c1QE@X?NO8~Pe|S8fnniE&YYTZdZQ<1fa8&vI;VZJ@h5%T zg>p?%sT%|E$&`1J{t#a{`eZzx$9+%Z$Cv#d4S>r|W-@?s-|SU##Q4&?>C;1NxQm z&6`&VHz-Cg!}xsu5^yc{D<1}@RbP$I@Ak69Q#FW&w9aa(&3lCTB%@r3sDv6tp_X4fxMV(LQDaUd*gg+MOx>}k6`j(GNU|ZUX`D2&k z^K}Vj#YHCxu@&O@@IIt>%{|)fxho<1N*akA&)33{NI6>YHXEr}BhC3T zS~V5uWFnYn3J#RVIDtgDk@tN#Je=O%t$dZgLv^Ns%tp z23FUjYAUK_PH>|>Xll=#xk6Gd<~mphwZDW@Xu044PzM^zr84dp__pNV6^YIuy=7%Z z%hV}Cl@u#`LdSJBEXqR8$ci5-mCdFH989x*<4Z!@?{ZStWPVY;Zm`G7hc~Cpp>tZQ-#e@!hUB>Ko{^%)FMXXB z@QHsEs%CO}R=u~THLTUqe$_U@ZM6=7=c|N-^murk*o4F#;RZH4-4`tyK3Bae)#Cu~ zHIuWXpb-P!PFwkXCgm59SV%9e_R_DPXsX2UN0jg*EZ3v)N3+H~F8xp=Y~0V#*NzPd zrZ3iZ#gqJ$H-o))Dgen9kZHu3wm*SD@m8cD0f6JKFU-Vj>M^EXgxZMO9Nv5q>I8#a zs@q@eVu>1`F_!q3%r|(T;vRblFK17*8t)VP;Tm5e8Jp#X`1Cd+8VTYZZjac${HZ0i zJV-~JH|c&C_E{icjbC?04>W$YSK^Wg`KiKnQsriMfBeYlN@~cj@&a`S9gH&47dJ%d z5n2xKBTM#?_Y_iBw!u|By^M7Q8nMM1+N1&E;PRElbuIB#97lMB7 z2Qr-w)F{v@d5_G@Sec0{f{*ATG>w&fkH|cD0?C3X%aN&r8`L2hw zMGQlJv5bDRe!L!S$YVCT8}ISi0Tm$r4@%`;9g%|!0 zPZ_ZOm73f40Ph+}F)gwr^!oMQZ@JY1cz#)(qDT-ANL5vma&+U5k8QjL@M=S0(#P_t zOy)cw(l5-4vX*3r(mzeU*>WGTVTkF`R2du0sqY@2LWl!nUrD42;}b>E2R4TNus`Gbb` z_#S`9&^T#}GD9?lm&wPH)=h0m^ui@M)BY&wE^k#3I2p(0MIX}T62@;nG9irR>FqbQ zZw2P|0y~)}E{S1^JO=|CJ)WQa7JB@&rj-mtRoi|+Q4=OM({9m#Y1-RWCPL*gWW~6N z$y-J$7ZjuAwwi`YJ;ANGV(JA;Ms3S5g2wMt|Is$@`-JvV2>WWr#bZWQYPA$Y~ySB%7a5#!06C}y`z&s#zOPKF&l?kscPW}vH%X<+2 zmOp=_Gs)sh`@C;ewW~IdK19e+w8LhEoF-u*Tv;UClx%Gn!<@b9^?(Zt2V>HG?wkaB z(y{=M^yGO=6rizy0tK1<6lLi%yF{`pL=qYp3NYgwTJA^9c!7WR}T zKKhA}ND|D!@L~fVV56tF1CLM?c{_*lM?9OI>m%KFJ9)`Z+BG(~C-lbJvc5=R zVVKPsf=Drp=W8YovgSHTU>P0LV`h}V=UCx7EfDy;eNx~#tCO^{s5GBBOzSJ>%$XP= z@5JmphnD9{*Kq}f_h|OX@6+&IpALL+o2GD!Q3U->)?cR&-YM$sSCkP~x%mrosJEob z-{&BHTzc4VVw>Ua{KtRG3Nbrd{Sp8J8L(P1P{hNET)y?@r+mY%S7+Fy^s>6y7T>ornY`2t44M> zE1A$YoeI}je$`NPT=oOPe(IL4V9@UGA8#CgtPozJ<-z6vVZ%=;hrjwbKTj9_`xsD0 z(SH5m=lboO-@q`0hm+nEXkkc}#Ey^4gWQkf*?`oBWQBq)`!53M^EQtDLCe_JngL~h z>h9nkKJ?c)`@`2~Tutl;FbxSxesRp{rEh81%8#f6l^|%wV}HVu?<0z?e~8BtDGhAm z?#Bf}YQf^Pvr-CaOOO=t)v8~7O2J4S98bBw*H72BkwP8{u!i0D`h-1r8JzT*HreTg z0fZ{ebEd@K5z#KS^?>y(-!!$$DfC92DnHLfY2-ah`2Xs(cV>T8nZfsCfAz`lRsrq{ z)0AjIlX-RDW&5Z z%-z3V&V-1T0|_IHE0p+xCK1tW@@UvLl$nr}T#f#E1yA{&WY+zAQ*oOj=9E}ucET0! zyKh}y?+a>J4K!=}xRS(6`yTD#@=OmYeF*TeENNKGOJ|M^`(-yY3#^HxD%i>?8r7es zp<^e{VUBC%p`Ww1C|Q3-6S8C`^E@gn&k1M2to{lO&X3QkM-9r%Mi)K%b;ZMtybk5_ z-YVw(K|GS%iS&^DlaGVXa|0*R3VmhF;SF1IXctcP2|j!=noF!l@p)hqR|eGUH;H^i zb1;+?Pcruf)Q~m3#CRZ?t*jTH;vP?08nUy8%&*lm6(_&m!af_pe0sgvx1p6bq0DDs zOlI!W>_Iuje_Hm3d< zn#<2~z`lT~TVmZCN)0?g9@nz$Mpz{_GX-%bg(~tCCpTlhHRbzOLigSfguZIxXN#~` zIkukzv@TdUm725D+qqqT5KG$o^E*>;p}lMG=2N`{q4(`FNCJ~w@i|QL$wE{J8C>wERga%=@yBCj)-SMhWhc-=zC^P z5mw~4f<7j`@Aw|V6FQx5YS&JGju#1l^qoW9plEx+Vxo47>*JP1kH)3X1WX~X>o~_g z+S&=IK!>of-(B_RI7Bv9WdQW~8H<)9bX5KKJ_*T#XU6A(Pt6nEuQ{Uv19*l*52ZC+ ztP8oC@C0-m?jEq+y$b{OY#=%pc^lXUxn+pcXIPB1`H9AsilbN`QXmgXh|>)PA;*e< zrewhrtgIDQAs-m6c;X&}c-}?4S0^;E3?Ke}`F-~6!@c*E$9{U5MBLA~h%WVrY@X&* zL~HAp^L#7Rf9LvIZ$G{H{d5A2pa5e3_eYOoHi{MJil9 z>vJ%`e&sk;(eaV9-h~f1dEsi|*ka@y=;3$Ujf-LQ6GxAn2 z#Uh#AI%0Wj2ov)-T`RphEO0NjzW{xhT9F-Co3g{(#4@oJzRUI+TUmSDX3Rc{$8H_) zbCSL9mZH;5?7jzPmmJOgWw>v}dFyS~5H9-RZAy663r`c+z))g7KVzj;I(d(|09(Dd zc!)bTQIVsYa9BjWwgCnWIsXdhIn^{OE+jUJi2Nwt9nG7{i2f!`EZ*uH+D3vX zZid2qD0f}P5h{PV(v{eQVUv8rfY4+xS{0SY@hDw_za03%X~I3226Se;&%uoD>I?s| zn<*FrIlq+|%i;sr$at{37l%StQIG~#Z#4?^@Y|;%v9|b1(TArHztNXq{%L(WU|3iV zvj>`+V2RkPyhnYT{wGo%@fK0!qJ|%TA@jA{=Z$=o4qD(WEd@QtJ?i$U5-;VqVwL5i z7`sWNli_S`j6OB}{2Q(p0DohE`wUi)Ix!J}ybhHXgcT z*_->bY#31R@#(OmqUDK3@yWNtGTG5}UGIIKckdD#P-)0XWqVjz{l+1R&>{1qMu54PKS z`Fz2Ol!$Dg8gJAn{Bfn22rpjcsxPc9ZPU&Hyy@>59#?}_cE(pl0AWAxX zWjeLcHx2hZye`7vZ-;MA##!s!52niv(_2h49q*RTXK8w`?r3LqF^>i`zfRS(+hJxT)ksvlG3?duSTh~=)E7{it@K&Skj}4f{Oi$F%1U9n zP+q~C3}}?yfcf5Uj*{KR^HJS1QUy#MYClk@({Chn*QfGlf?*0_1h-4z_L#pyUw?kx z<54L;#^_L{d&aI;uQk`-bKq0kp(D3Z^_SDYW?%b8o0xuyGgC!?v8yo>8=o@S;RCxSs_L4$6k0 zX|GPn@-x5QZ~NjUuKcXWLFEodU5yCEpzLM?)M28 zxQA!NRA(>0J<~LQ@$(72vP_h&!sZxH*B3ME`Sd|H6ViU+K_64A5w33&Ww=0GKv?Z&>o*?qX=)WbZD!o|0r zCPUNvisitn2H48vz4%R~F8b|2vg~Z1*3P0;cmaqP{gP6@9!RH-`q>GDfE?xGg|X-> zLp^76@=`BGO`5)yd_8xC!Po)=v}rVor!l?v92QdMnnoTzQyo!}Zuvu(c*Rwr9}jh( z)h}!aAd7YVq&fx+REsi9mD-Ejg1B90pFe1glHN22S*dJq#Fa7-@%cQ;xRc2z;cM%@ zfJ;i-Yyzgu2bp+cwEaYu<2G$Z^vp&+vetV5#h#zwc9K?J-uAObeICU=Lf;?hMYAo@ z=R?0pz0aR!WqG{n_66BRS_lABfer=^BRyVB3&GP}oavu2?dwT!e<1^;6cGrvmCw)A z_gY62Q^IhVzefi#z07+klb>MD-JXwcdVkTrTV3{Vf}aV8IM#=KkD8*356Wp$*hfuv zKN<~7=p)=eAdnJ|61dU+XLo7)X#4G|ES(I%{O3EaH1K0ZU2-8%OYGZ1k0Q@5XpEh% zhL4PIZtLPzCI1g)^)tuiytLs@Hsy?*I1YUJfZBmCSpU!2vyqD;w zl}7!O;v*%PRPKM@AIQ$E&Ice_+k(emzx?=0WNO6K5-fKBY-*T8WPmC7<6q4)+zd{Y zTtFqV0QK1CSK5~c$%Rf3XvN!^o?+`GM|>SS=QPxQ+Bx#zVPE%HA@IDHiY&<}Pwk?7 zHYr)LTq`ZINc*AOhePyp_Bl^13g(nG_UCEL(di)jX&4DU>Ynv}!L0*!FUqcekn(w- z=?`bVgjECNDcDYCw{*Vbgve_8o_FrA_Yyj7T*GUTn)(MCXw>fDzSauvBTuNdD2PcB zU2Bl1>LX9=_d)u7gc~A5)jd;!FFwXbba8`zui41$_gdtPZ|=qAr1Q5=w|X{MEtMIa zgtJ4)vbM!^wok0>Um}P@qlGPa1)Wbc{Z}{pL2HmX`<%@5>Sel=dUBcI!_rodI~BXb z7@G=7SFLiTuKNuaetfhos8bUNa4Ets;0}aFsNg~8ad3Z959mJN zZQv3&Oe_+8+A4Z$eEgVxwSkisH1@gCt2uZGmQJJ&(wupi5ukk8s)v2~m}`A`+n(?W zgbSGCUwwN__W^L7rps)JDU<~EK}!uH5Q8@tICUzjl7W?F5B_1{O`W%5yC%FLh{vI~ zi)0}tzPqT>J?!>{hgFmYhVSBi`^nJQO*{!-YZ7dF_#!cQoTOJ6#NmevwOHs}An@af zdOghJ#(VQ^`%de&ue3Q!ZVu?w??_aWuP`CB!F>!PHFu1;>*wXx*rGoH6d2m(8@&yzx(^(d6%+{Qbl1lc)J);EwnLZQlAt^k8OgsL9^pfe!g1 zllVlgZu=MKCUhTP_B&AJ7FeC)#sJYL^Jggv6pn zjzOW01f3r}%5~N9cBT^RviPUdq`?*r?y7S53th}mQu{ZKoMYN2HU;uL3>$bSJ zcECw9^1LFA-aG9dSe&t?k~HP92UVA^=bLtKrA%v}=7FVIvKsQ)Cqwilkl|mGvDC67 zbP0H}>#vt?zwA_KOr*KtS3>$rl-p&j(#GN^lP6v_ek=0#Bow(;8!1c9V064UGAQ&W zT8-VZSRSDzJ%}Mn1vh>`?US#us@L|5iTm`J_m7uiOutJy9INlve{b6r|KdeIvc7Gj zfAdtd?6}#MVueGg>1-?D(nR$*QQV1tb|F4%ux87?+@HQYZSST)R|;OA|9Sd#rw6Yk zhUtF_@WIfx_=V#W{Uh&xsLl&y`7*8gSemtBhHq|w}Sm{6_{Xz>E;0qi?3Dm zLn1vFDZJ}6`C!Pc@Dh@?xfzYvuPTe$vG~1>{Jung>sN{Q5TCF9D`AY|8~&Qza2vgB z;I@(3HB@cqY7HD*2;**FIG9J1P3qk2&A9M}cDf6?Do>&UF>8tDSb`sF_b9Gav7*q$ zXX`e@F)aHWeCl;BX*r8&#!UKsxVx~*5X%AS6$gC)@`s6^YiiG`h08QjP1fT%&4T7N zZRDp9TV7r6i#a9yMmGC-$JYcxZ3DLWGQMNijK)(_@Y(wK`^9nX@u zM<@H)yuP#WCZoswT~GFVBd^PF`tkO@E@e_$>MoK{V}eta?nP3fjjj2}w-$as2H=>x@3w)yoqG_X`R`AV2Ca<8q!{#g)j9 zSM4*o$wt58&XI<(xDXz0U__^9qVfCtqgJ_BO#pm$?Ve?I=J1Y;iS56ABmz&S3&{-R z^K37?x)rK%D{e~BC(2_h;=6p%N`f`F3c>(6G+THbqR97M$K>guW;*b!gR zqu~wX*ogvQA?7+Iw;!y{p^Wv>&_(_+&W~p6iictlh~>D@=V6bi-uPB29vfmP#^0A7 zHe@P!se}mdW8uS9l2CD{sX=QP$C68HyYJN@FsXPR;vZsEJeXbTPg|t-DPFFiwYx29 z+<+vOfx=UP{e=bxJgrl<(&%*XXq(L@&qD)LyT_2c3|_e!n%e1L&F)*G<8Of`Fsl0T z>8%Y{3jvSe+^3kf^x-+py zW0+E|@?kgpU|~W;MV55_64=CDOsM&^o(OL>vpE#%{>@#zjNMOH`QNF`lCLYJoNi=1 z9h)metuM9@!rS^CNo^b z)l_wBy_|PzSuN(k8Eehv3=x{u9xth=-$n5m%;$v}L-ALI8!`~te<|3RrPOx-(%0sV z)i1%f}3vzCOKE7edE8X8aMvio~FqOfqGUM{qHuDi+DFZW7cCa{0((~*5c z{Ww;R$4XCqlsE&J1Mz)kI=OjGJnulFKfozZ( zh?oF!9;Az%Pfc>&&1Iy2#4;wfXP-vgF8Tv(>a$?v2##l@Wgj7VAa z@RLdJj*K4*TIm#iOL1Fpw`c)QKy%E@BHa59?)!FRzQy&bH4kr8P2=ihd^VDyAd}NZWIpG9&0}!M^V{7ygsu+&HtRLyQYPlx3fB3egYyNbg?dMO66Gr`=}h+tQDrK zd^3^!XkG2xB=V=P5z-834iX8ykw_)5zT%jIp&Ta4yGH3@anECd0Ya4ID!F4;@v)#q zyGKB%b13HMNH0#HTW_CiajsIeYMyxoDyW1<;$+&MQlB3id7^-5Ct&V@SC;ow@B?TX zJ)Nf3H$523g!kZTMt$8|fqnB{gYexmGT4IGJ*bWgaRCN0Zj*fOj+vo0DTuW=^Xe@f z_(qVX=MD=T-S(8qdB6G3XG9O-RqMa`>B=9Xv4Qn)&%bA_o1K*Zt2gyEb+<37raEI)TkT;r5E0Y?wD@oan=2F#j?%G_>SnHSkjQU4 zflx0Q)k9!K!@NjWlT*h*0)~YXLiWTZEZ!tKntD1dkt|53tU97U+N_xcHlA5Nzg6Fv z%-jrG)lp@qn(V?DCb#n08^t0JIP%QbeC~^KUjuwXcaASv_GZqZas$4#RNjKhPn&#v zOpR!z1`tYBdHbGEM{tpa&9?}V2SYyTsgMM~@?b&`nTb|ebjiUApca*}8hcdKi zp%~5|xgvO6n3Et(mlr`-DNQ6&0OyST&Z7Of4^j#i)WS){RzIdzaetGVd32-f0JsQ4 z7aVb|$lf#9kKj#v>K?k+ed!i3el_aW6R(oY(>WwqzTaz#)u(Fqtz{=wjurv(j0>03 zFJ~F5C4e&0-o-lSQJ4@{hu%i(8etF zT>@{RdscX=yuqBmry@v6b#))~cq}WH!8WhzHJ)EH@7f4n2ISd&D-yJwL|tT=`S;AB z-9}vMwBt_|`X3^|BaYmd4Sf$N=$XaUhOc5pmE2_Sq`rEF&Eo^Hw8{21G!4$|{m+$f z&N>FqD<8|b{jTDh^V9Be><}=oclPLA>%=7LW#FL(lGlpIk604rB%@S#m}Y9tZ}2WY zlA=w@?DAmzuRn0*X7+wWXI$oj<>#4jmx0zqdJF0%5G3KdYq=%HP?EcU{HRB{6OSkK1t>4(xL zyc}ye;Px<9eOMpJJL16JY^08rZ|>zKBSjqFzqQL~fL6RhNh(w3`^bRR_|(MjgWd+H zF*4jISpeAz)~^4Vw}PfeWvrhjH(=+n?Xwil?T2*^NVy#h+k`YG2hMo0c zULgpH=LUr1IX){q2sX)mn{pE(g8YHG>Vekd@4cy?&$kLrPG5`__*_B<8ND+hK4nZq z4oh;o{7KG&{*OEJP)sGIjG`q-?N6L9+_mx`FqTquo9In35D9PL8Dz=wb6m{fR-LE; zh}BoXr_G$fW&?k5Gtaxc?D%ftc#7$nb2Q8I7aGYfBruLtYVGq~X?TNfB!=#kfDWkl9mzukg zvBuHak$!y#$@pc})3p@g6YvZCBd64zj_vDoTYI3eF@*PzMw#@F@+opJpKBEbvG1;7 zB%Lps6J6f>Q6j->{F7#n-^)3R`91_{5foZ%kXBEEu=e`9eMXVcC3?A{zrPXm%9o)x zN}ht!@pV2z(@lv*n!L{ES&)a@;B@eW9iCnq%AKn%(IH5hhm>V$`qp_nHZb$f*WY^| zs%NBh5_&=m|DZ~W_kXy`{SH&>ja-Y6H2J;RtD$K8y~EQoIzt+J^bv?gC_Q*9ESHEV zwG?)u%{#9KL(UJkmZ0{9Jb%ik=l{03uPhx~@0WWNuW4Ey#rNsI>d1i)n*VtR;I!!k!nOJo;ISkG@_}x{;Rc z8vp!&)?64dK}0$8nMYHdMp|8={X4V9L%-C3OsVJJ$7uUi>N)1eQ5p}adCq6la~|B= zf_Xq0!)I|V+|xbh&xbhuNPXs(BO%7m$PdsF6mP!X`Z@&)a3+%826bQg_Z;6NZ%k(Q z>>wvx6DBY&f0EAWu3s)U&|o>#$6@$bP?rTa5zj>w5LUr^<(oIGtt}-^dE53ejM+Da z+Q-RK=LZya9smifYCXpv@Vz)pt(&Gapjt=!1N(WY_a)aSaR_r>8DU+6)bY8|W`6dd!<{;8f>#a=ncF0Rs^zsVLw{h6Ch z)iY_l86+_l(mE{QOSre=_qDk6>7qTp5;Sj$xnP}`0IYU3gKUo!5HrWxDceGp<&>c~ zO6I`)8K5s{6BFBQ`$)hiu{P9bX2;R@6>JZ~y7&knUU(4>p)39hu#UJVF(lLxa+?Tr z8jO%+GW?woOXVNi1$vui%QFiX;{CWva2%p37S0Z7Z##xqh9J&?puHj0hVJ;Az6OVq z1LY=Y1&-}wtF4lGAK)M+f-vBH;l0Ig)?Lkk6MU_gat}W|qayZ6cK@KfevuMmzq(tp$JhP)e?pV7kxaAGXJxz27t0I8 z(j~6wMeZXJtZM)8b-=-gsWp0?VM`Uq$@)?Vra-_wrFd<%Jyo~E!8O~(D&}jgSE!ld z#YPs?5T$X7UC9oqB&FzX8m`}ydDg*?hU6TS?b^Om-hh5-glZB*eb2@eO6bZtAAK!( z-OUD?Dc)CpLyC2rPiEf&8FBejqD@3|9}d)4rvZ9^k_&#Bk%mWc6S;Cw0*+hP=kWma z7|WikLnpVcr$p>wopv~_rb6uzurUXciApmU*IL< z!)G};1}0`iLjs76vlH z0k44Rk`O>Es~qrZcW%D-`P7sUxnUdSlwY?oQBlCC6XTWEHsrAEvwq><&A5Z|wC`3o z;}Z3g4Tu6^LG+8=vnizLXWMnSg6D?Ibf6%ZL~9l`vwZ<_e=%j$`Mtr2ji}#Or4t#T z2F0Bp67lC}9NF)~P-YLuBg{L?gXJ~e4)zyUYGtQ~c;V*c=~W(-Pw|vmo;mP`evpV+ zCRGCqKcfbDbl-n;3$l5fxTb!BGOJt_uqLe8JVBt{p_1AUW+LuL*clYIzMvm9G_AN<6>LHbcQ4rj3{3Mhjwc&UDNk7omzr0&U1?0+R zy#9@g{lHaxbPncUQuMCsN?Am9w8y)ls^e1?LTo9Je|T>$O)|U*RVK z&RG%8*I8G~^khbLK6076_Mw#|&j&N|W^PY!##NTGzpxv~W2A_i!Hs8MI zBA%hc`YH{IhwNi8m`JDTm!|?|GiP88P!Ik1nxPfBTGqZk#Pc=AKe+?SpY!gC;|HDC zqDs$jQ~Kz)g?rV~H@cZJc4czvSyNtm%Hp9)pbmXDz~BkB5y@Lx}1yM&kW zx=JpwOMuX?MA;|dHRro(dYAJ!gnK>z4%ShxDKrpe>=QL9+^>1q<2F&%zHes5k!KLG zHuB8xW8*F1qsmx5G>-gnbo(MsDU+WXJA~ed!Fd2szF@`GFU#-o;Z|n*p)9J%X6W8V zW6edkXJ=5bZeI@?Sa^Sp9z`zLheZQ`!{am=B-q(XG#h0SI)~`7@E|eZPp)~O$n#>N zD`c}#b6Z?J{k~GNw&$dfXWhZM98wneBa$H*WygFmZ{sP<)HvSX2dnPSj@a+%^C<&? z^m=^=Jz;ZzF^rQ;tWhIA>Y$y1sl+H z0O>hB{N0g!j!$_1z52t6wWEi7s~n|fjw`fC`;=-2Yh;1CpOQdZPpr{yHy>`}_2o^U zBV(?K+&Fi^Fm1{Bm1Z)`fK*-Agoq`I#Gdc_K=z)PwO0+`*UO|RK(CdY1geD)UIvd6 zA|o2X!G=_m(>)!8M|yQ{oD(hxjoaa4Tlq`w%=R!+B|V*cKVMV(h9IiJ2abc==IzKm zr*~?q?kW=Vr+xNljQ0fyPB&3xNiWzNXmaA%71yMZ0cS?M_MM&yuL)dDbsW;Z@H=!{ zej+e$6I{FH$I`Ywg>l0;5;YRgJfQeyzUi#!mFA6_0)25I+%xwHVUD(CEe42twQ ztl$B#XZ=Z{wr4LXI2LG@FTe2ZlH>78I3t6$&wc7nVyo+g`6HSy(ON0gJ7K$q_kTh~ zANQw*tjU1V707Tql7-mom)5t2iGpR$agjVz*Ex=EnY}NL>UviQ-+8B-(AoESJF{SG zU+4)joND)Q*n+e_lFjukJZed%_ih0DsNjU~2D4L69&z$II|JaIyR)4vTBV|goifwb zZ56!WD=8>WuFn)fKn<5!3Dz0vy#}^-_p@p+mqSngEHp?T)fFnaC|FPyEwX~y7d`sA z9kk03y=AWyIR-G!gZP782d=7X;n4dPso@Jgi$7^@`jE!K$dmB=OqlAdt$0-fP1}&B zv0Tch#6GNYEI<;mSXP+KzMR2=^%|DBF{atZw`&}=2iV8-cJ7AHwfh$;d-cRrf)7Rs zl7#8QUy9P>ag>Cm6bStKd$V;>eSQz-DtLQn&Q@xkULw$(rZah89xyW}le zdpyrO>pqn5$gWU3W1bYtue%n+df!%>%j~1N9mq@iV1w?S`)%htJ_&u?h~M*&0AXjF zy~#}XcWRyRGSPlbSoB-vD00HR17s=I7B68aI?vETmu28A>dJ*CKQ{lr`zD@meH6m< z7Z>yjoY$RG>igy`8L%wd&pRN(i^+Q!-D<0}oF?9YOx*0V*9|O#K?LF8mL3Qx6XWE7 ztZj-fWvQ;hiD!=C#=!ZFC+Uxtm16jrha+thCe-(y_s9Kt#?6u?l(+Z6QcZeuAm1kx z+OIv(%ABGz)$e!ns|OMtYr0EwnNj;q!+)qNf-?wwYE13Z@)?yOwpfyW8l;UTVO6gztb!#-aQSt=e)feUpZUYi#FQUW4lm67A$&mk!@3}mgpBnR`tp}t;=XG0S0PZFm44N$ zV!WQBK*0kCZ)GYxuPkcPtU4ioAA^qW-|^|fi6C6b*n}R|f&3j84c;3*+*^q`f~4{7 z^<1-)C+~Y8jTbG)ndR@&W0UPD>`<8~B7_FQ78>;KhynD&hW2$iQpe#@?;lMbG&D8n z4J$5wQwjquy-y;hD*JgCuL>A<>OFk*^}ad+*;IdZ;b;6`Zu`2R3MZI-xZmppw+!#-g5rMR3@{nSGo7GGdhU9)kMH|M7w@K;FAzo3#`MU< zo9?>St=Y+qdr?}J9}rDcM4)CIJTn0V@rU`itIJfK`u2 z-$zm~NcZz822QMO z2M00dbJgjyJ*D?|2h3}HC)bDfu`^@3pH4UuQh9+U6)gxea3H{|;I1>M<5?LV^8LAY zFwXWq+BEy1SC7UP>(5E@69QTpg<|Q4K3soLl6btzxn$4hW*L>|Nk}sxtg5qqB~a}X zMfei-3+HD)4PT&q{MCv72Zb5v>^=a~BURzEDG@WY*Zad7i>dxj&;66(F=(l=#ZbYk z`qJJ~Yd;F2Z}I(1|I8M*P(D8^^st{d?e_g8$JQ3Pvt~Lma6oz1L5=_Psk&X&3VgdR z?TZUtX#0rUIN!&vPCHM#JS%iIbS0adn{cU`;G|wQVL|m5r#F2Gvj~*n$W-4bj*?A& z=to-HiiW|T)s@BnFQR9CAYz;q`n}5c6fL2%p2k92yq70e!{A8h)VsE;z(Bsrr=G7^_wtGIyHsSNz{xp;DL9#!MgI@7{rM#4ahyg*X zHogp!eO@G1*WDg&BC$}vSRi-#)aDNw+aaz}Lm^ecWp*f6;x|pXLEnX!$C}e#)7x!F z7b3Hr&bw3`>ec?Kf3#zb)5Dwhb%EMfb^Lo24&$89LoR{E8m^vjs08f1`J9(C8O$J% z$M^i{C?0MyXdIKHE@8_ynobXM)?RJis_f!!@3#$Awi&IH&%oqq^b@_`@iyn{htCf- z(Z+Z$Jn$`nPtx+b`Z}t^TbXTVP4OJ}J{yD*Czq5i*Ga0NcUa19CReBkcm-L)dzYz?sTic#YW0&?r=P<6I%!CuP?#8yw>HB)X z!k8nU9i*^hq$&Wp3U8P#8^tINCwjo4s=Zc;1|>@oVH9Q?(0vcv+mw~(lWakL7=o_} zZiVl<4d*U?0VF-eM;Y?LQSH|8kK8|hK6^6s91Gq0t@vr=BG$<^wilnp7W%g(`ATB= zZ3=qbhd&qMyVUgI`iVjF%c+_9Hc)nfgPy>gUTaqCu0F9G$h$7 z$pp+<$ZUFDZ+yOT#3byC!ILpu$=xe_MrR#@;z_UoTOlD^O`q74EIewhyD`SGGKKpc zP?PBZ@SO5{-ab)zQF)liSwi8976U4(0|z&p%SsP>l5>YDgK(RVBdT^N8Nk$8OspqF zaGq=erH#0(teLr;+UK#*nYqjyW`T1vmaAFOj z8zOs9gV7w@`O;DRQ^ngt>?s`EZML_MxYZOHZcpDJ=inlISfecDH0XB*h}P`ANbPJ|)infwCtZll2DSJ8>@JpD?_0(z*(rM%|H#z~(qzXJs*U|C zTyNP!{2T?uP&ui~?n#uM1Dm^|lO>Mt?<}8Dqg*8=%eQN{FS~!Z^hqUHORb0*?gj=*HSRd!Hn#KV1wZ=CL zm{F!T-dIQ1Q%9DBGJq!GN|E0`PMs&_hZ4OF`LzS!&c9RDu&%OSq+QQ}HP z`9AL)mQ^`g;Ch!xOOC~Cg*dFe+dIl+BLexQ^?^0FA#XX42{mkqwF0k~lYIk1e^_!S%9ms?`eZJc&yXP_x!jG({W z9*mp1>2cW4TfdU2P~_JMaJ{O9jmNzs_RtF@3`tGm(D&->fNQ~$CC_uP%@kF7UxR{E ztWE@9Qh$t72t@!W$#)yzJET;=iY9yeA9pQcg-?lhz&kN+=+eVw5ZYIup*VId#`Dnw z=B|c~o>?0pa|deh={G)=el*|aG3KEPbCpJDj*J%=~( zQ_;qx9JjEb2P6fNO>0F*ptD1!Z>XbQW(Rtuq&=3MgmHC!!&mA6_+qjrj}Rwm;T!L4 z<^{-<2XyLjZgiVH4!_7V12r4^r$BdLAEimf?^%A?>I-eYjYxoZYg;poJ6Ive}B(0w$*SxU`muL0%e z4&KH?+ZRR4W(@l2yTvu$Z!;d!^i8|hz63PCK=jK8Xr5Hn=RNVTf0Uh%dpYI{fj_uD zEP*r%nqGC%Mx)E!^V^UJB(^Gb^kprPNfhhS9&YMWZNq6B=WA%YgW9*{g|z+ddKA#N zY37?}#m+YhGnx(K1TOL96*Aa(7u%?t$es)XOCyHIre^0~f+6{&M5ii z<##*1wVW6G5}uVXV&4;{H}ixobwb5f;5n!uH7~`X>EKnUr?*rI6<=6k#n~s4e1kzbc9?Ty z9U$`=M5HDC2!gat%gZ7>57lK#0(TwZwtCdPk*A` zI3wA#8IcCf%i7bbXC?#L^5I(Pws|0zo1IRjhVTJbS&3 zB1yF?NdZq~J|OVz`4HmZySn^IGjB!xEX^<%xwXwD{}4YCCrCM1M{&!(7Y66z*9%ZN zdJ*blZm&BQQ#-O1s+5}2z_984lVV2aS?0}X9Cr?rV!T{}Cvi_@mCG(>Oc-5jTP4L^ z-!maES}OA&h;UaEQ~-!dz0qJkiFdVhlh94*7!j(><{7KRa}e;GXWRG<33dSe~Ioo<*MXFwgz2pzI5sSY&^Pisyz$;@+XnlFE_p{?84&awEYh% zXL#vU@s~YL_#F}%k?N%npi6V5bdCQ(RfoP-IdD(C`VynDU*=B zhT9iq--261eMeQC3Khh9QjA)<`0%7~kURTje!WaDu#&@=W5f9*Yz5t9broUCeOniN*<04 z8oLWBy`@fKjHOh*uag3ZS$NXNW0Jg;wqu7)cA)(3CPFg5#C5tUy3!r_0$$>DurJ*S zBV-reqtEY`bw(D&_h|diqPK*+X0NkX8|0)S!8;Q>n@8iV`yAq5EBKb`KKQ2dbo{f% z650EQ_77LdzwO>Favw-93@ptapYkIs##qqq+u$&8rKa5r8+|2pU%27pUA?UVr;J>9=&x?+X7&%v~l5@^SgGcTg&QH!Uy^ z#J95FJ4oYOmtg8s@!0Iw!C#N-D@h)76nA%~6z_O0foAJSfJ-vB#$zu=pvi-$r>{M% z2Gri(qd_oDhpjP0G%tc7cu2N6<(EfLpRV<9ZVH$B7s9jAnKAKXYcDs`Iixpg=zk?hGz8CD7-*)4b+f}UMN%w}pzwc*&T2C-8>Ek-R&(0r9>~s}5 zu&j?W`Vb{k^5*&Y0FR4|AELMjQ}FFJMipA@bR+u^Z|A7hGVt%aed+@Xo|}_H%g*Tp z6at^rXQ;#B4|t$Ee8_sxE4clM3ykC1#Pk`Z>Cy7IWT8^4xW@gvK34SN6c4`H?@hJX zN11%c@UnZ_Jhl73+5uQyp3-$qASqCO++S0l&2x)bDa$84zh<~;dm^{zGW#w|9w+~p z1v%3gKL__rQ;VZKL`Ri?N+`S~dl<$xw;pT*{EZ`kq=dndIgCNlGR$cEWO}C4K(7#Y zxT(<>E8RnUyw{PzZwXt@>Apw`BTYjh($S=9LB9TQR{r8s zYE5|69tX|%(f`ED4>t2IsaAi8b?96Du;-KVFFKMmUwVf+YAokO!sYYUkZG3q55NZT zw)^?X6EnJ3kwx#Fjly<5v+$al>YF24YY+@C3Lx*9-ls@_w7>lmtP|9b|1$mR;~an1 zJN{ptOuEen>Q{oM9{O<4&3&fmL!*+PCu=x!6-<8O1i-lqpimY!4%nQ<()J{xfzGAa z43nljBRz#>AoJSf(U71F$Xt|nfOpvwuB?Lbgk&9`#BUD;z6HL5L~GS$uZ@qaRuS*f zi;vNVgcb9+AY{p>Ojd{LR$c27z}fyP!ouZ2GG#UAaJS(=+VzyU@f}V_Yqd>Qjwf)g zuv6PSk?1J;tz-SUS4D1mAM*3%rWq9F&;yJ%Ay-?9aq4(F%CqOG#AVvT~(^)2c!4>{(!YupcOMw~8*zY`HJ` zNd8W#_-7A65$wFcv+OB3^s;9>BYa^V=A}CV{iRcUjd^Psd7+csxPMnC{eklEqsm@~ z8+Qx|F59L9&Tj8Ik-L3EMdUvdFf3?ZCV6$G**FuVQka7zU2&%A z079#m`~X+3GZIy#TjsVueVh%T5(#@zI-4v);U!2MIeDN9q^qRq@9Tk9%5P16@7my= zzju*8{lJ1&-eYSroXEJoNY^JA7 zNM^iqkAdYmUh4Zzv2yFjCXlg3Ac(}DJp~A(J3l~1RCuZ*sP~POG=~?VWqW8!;xlmL zHZ$dvDGLr@DMd7SUnCuJmL1`g1u7=6iihGWB(X_T?bTd-K{d9Pq_+ID#FF(xOU8z| zy(#RY;J&!!P>7QLEecMwEFuK@q`( zWjbhiuk(x1x1pBNC)(dkoQ~oPDIxzSIf}1zjoe#^im5v91qk)nchTnr5@u0RKy&O$ zM4HX1gZv4yfLeKj$q2z1VQig0Qt@=>p7VBXp3pnT(jkxgWL1%ufD}Sp%|F*aap`+4 zxkoZA>ZOSrURfRe#%q?7K7x`=9@jWJE9!aK$4ddPU@s#tHxI(H33boQsA0q=8nrsp zCF5webu~O#w_%`9*wF9VE@z1IJjHkeo-3o4+fi-n!?BlDSf#r<(bcQ){cT$bvczeY zC%nh+vnO~oe?RCyk;O^AL&5sG6_^%mzCgmok9~Kx zGMMq?$M8mM;`JKmmq8T|KQo%3yZ(kYdr8ygrzJq`~Xeggz=K1S9;HB+PVDpDTxa!zi&9VL#Ycu|`)u(OW?w{T zz@&NDpDE29b!1&l;S&75WwOuTFIR=SFYCba5D4!CFtM8Wd!l|VTmTLq$C{VBH^%T< z`r3u5>;bxm9{USMr!hCXR(iX^bpgVp*x5rFI`t82v|RF^LhBZAO%-495gN83gK+hb zr@Vv$grOfl<=?cz9Ub>DjK|wQHC*FG%Yi2Io+a*2mB!QM1MQoL{~h;vbh+OMZG|e# z?^}Yoaif|v-Jd5_nlh~uOQa_{eE)v)e!ot`jkH&Bv6nG@F?O(R{XAeJ^l~FE z+avLxIK*qY>hC-#`0Jxod}#;{Ij&plr=2cmrbJC&uDH=bW=LL?(-&pF z93gLhy5zvNtqVXmPw0s7Z-io@sK*AJd`Fzd4EGC$d(-2x@6lO_!~Z=QtlYfxp9=pS zy|eL^K8BDi^I^0h^iQ2dDcoZu(3o+Igsd>I&cS>k+Rb8LExSia_Yj<9s z;3}Qt>$*R&osvHZHi9ZqM`ExU!LtnnmpEUmOz_l?QGj?XkKjsr2VF?)>EcnT@R-3G z9D2$es=8M;lOBY!o-QkgW>wO1~AFPDY=6qv4MZo)qh4>1`q*X{$bkOdb$+v){Cn^AXmrf)k z?Vut^vHRj7-&!!E_q=IxzFTkrW#^#@N=S;zmAc+)RY4LX$IHHK=9_zo*qZmIGcd6y z`n8Y9DUo23wcd2m@Fx=EK#L+d|5Gq1;V(ME4|ad4Q(#E~_}r`2$PJ!N+8B$PyUTUC zHEVo2#3__Ji5v7-!su_>_VlF3!d*c3`se;FR19&ph8o?-Y)zTK`F<9V{S%Y<^z40mcgOS)Xbq`r_7ELNaO-s__|S628KfXR z+m72^UvJ>uDObYsIMJ(+T;foi@_dxgo7)`9B?SW_&CmF#fpUqx%B`M#n?>JQ|6Nhs z>2UlJJvsZpjdyyG1>tO9f!Bb{{>85*_$t*clx|~FzD3i{{}e1k<}$b}Zn*peb69Pc zPh=Rs@u!mRb-`y@dD2A z+NVzzTNt*ScFkV^76(Wu88&D%yS?jr8X>b5GpzIbj^l9d51*{4JWY>5!@JPctWXN% zPWM3hx!&su97X^%c-=e>>Gj2CpeKG1%8?)2&%*{mOk8~@SH3^%gc_en*}&(~xL3-4 zH71m->e-4L{8Kzj;tT<6kQ@giSL+Hu^1oyB`Y0xKg_!{Zi2RX(FQHyq(+1uRnjySP zW>s>%y=V$afZ;gea|qNxe^Amgv+QHF>WOoUh9>O8$GH0jiHZp>Me%HSdhr zrv&>c3^s!6ufF3}wE^$}LAWeAAF5ATDIos{;49xtDSbYdDnyK=ks#orr6mq{qt-A7 zon>7t8Y=$c{hU6KUi^M$f>Y_&x4ar;s(}QEUn8eBt0vTM?Nw~xDoUmEGl2}qiRaS- z)eO0Ij(}LQgv>98Wy5AZ z>IP(KA$;_TBO(KNVFQd4D^A(Jmia4n2!>4N)@hjCafNcysP}#EKX33w`P_?H5+3Kl zR{>RmE6IpRD{u7YrAWOXK}}l?hYJ({zYMLsV2iQGHZ2HCfj4r?QknM9;~DQy_@~HM zQo40#>p0ODFR=Di`0!wz7sNjB>0Xc{MOyQ_B8Q zO7L$bq8RNJNRjMsXlfMMK$CXU-<(lHMIfq9O1^bb7@RrpCfCt>-{+7&Yh!M2m$_X| z94*p6+y~9{=kRR#gA6+hs=ojm$Z&pc_s=kWR8plwoH8CIqrH@5`SL@2X%IyIP~TMs zEOadSo{0!Uyh7P$9gsgjgAys_kF9>AZfr2a6i}+bLVhb?c(=bDI<)TL(A&Gy3k*$& z=x~L%07j99t;(raCV8ejLU3F7ef7)as;34<+!#|3H8_4OeUQEsldSV`FGwoXNJBFj zKgquI+NaBM-*=U8KwukVn&$^$I+yF}aF7sWf{oa};G4hIg3Ug-;~#Wi@h>VUS0#{T zuXuycDpX}*-Gh=0*OVJ{D_}+uy!KC#foVcf-JYR51%_Tfp`KRQk%Fg##p^QfX@PZJ zKQuwKJRk0R)hG($oIC|w5HNuVz(nGd z&c<-}hw(T(XSgY#%KC!!mxypKqanCq#EQFLRBzcnq86%Khg?)&wT<4Cl zpXG7-(8B8`!iWS+Q~8 z?AHOJee^KQHDD2e0p(|?HqRFh_;UFf6!Q@OtP`)~WoaQG&~OdCbK>VuO%>;2i8nep zm?3`<0gv3Hr4>Y1s6|Cnns(2=uiyR^eFblQTwry(uUaV@Mea&m_WU@jX8ZJo%>KnD z`D3_e5!pMn?th#!qACZk+TF&l2H6pKDf6&%%mbFu;z&Fi5iq6el!22FosQJT&Ic%4 z;}lQovx}%}(C<1q@#zONCw!MwSg!c;(P>Tu|23*(7Rm48{S%J)P#jI}DL|dzai!k3 z6sKr^#rSI4)wSYtbvyvkORl#{@;+7C3!gULn1>5ob@c{ug1**W@m=*VY_vq^3O-86QQMDXV>$OE)!f*YfjEL$yHe?CEzK+%hLo;=lgb9 z0^C-O|ER2~4cHFD<510`ihUcq10k{o8TQe(^V;(VNrI4U0`+YC{8Nag`9hcoOlAji z)6=(T_;U$3$63^mvH5vay0c?Xv=-f6v3W}wT$pM4=J7QlRIxX%ZdBD~7l+co-tFFnfe+X2nZ-z%r-+L$1_eJ4Tw1VxqNng2&@T%jgGw%+ z(SklCgpa21Ogta2h$NE}T!(|}3bJ-1UEJ+n3-D=pT{eKV>2P0-=ZBmrpF2d)PYd3} z1of5Gijamcv;}m5n3!G8(WDt=<10K$3#uj!)?yqw!CcN4-e6-i-uREC^XgVqiGuK7 zB8Nv%5fKTB3cN|qN)Eq%iZg4?y));S1-f_duKLQ@)P0&uA0b8wWx#(J!W8Tds{9O~ zw10Yu54ZTd_EAfTd;v(KuuQXn77@Mu*YWJ_FEb*p0=J)AKtt|V{8Oe>1d`H3OvRCF zy3g$1VQrb{^?G04=#>K(fSq%7ADL$FBJ9t-xEL#-#BUJG2*lCj4-o5xGU=c5FkinvzZ3;UT=tp(k}jV*z03)5VC|9 z3Xj}-9O&Ln$fdZ!F?ev`vDoOf&dxVMe0;YNPS_gBNO(-kot&s@C!M=9ubUj6&M3&s ziOC#d!lZ-^-41=gl3VVz_dtd*{nj>)OJm)v1e z8!5^`#VWa{YQ-nIL(`|Y%^^BVOBwU~*$*4SrL9J$6cmZKP68mQRv(zj{goBTi`dA3 zC5}0ippOizJo}JH^wA39zpeHwgkPa}zGXtFQ?T)GnZt@5lcCVqa+-a@DV#=h_vVfhcAt^xmY|5;muccqy<(-GS25iZzAio=YH`USc z-s1x#R!an&caBHZyu0J%BX`w5U2@{bA4@;3EW;lT>nQZv>5k{l`TR%hLxhAb@a;># z_X!1hdXA*VKedG!g%@XA!?^3#^E1TQy7)x)@>PqTHc26f%ST}zFOrIb^m7$HB}*^; z%K%#BxwnGk5Y7T+=Q~`@Aw1BM_!NJ0bTpQGR#TwSQ;yu1mxSTSrd-)synDZ|f1=uJ zB7U!TL@+~(k1Anu-`CgtU=Hd2q*}eX>`gX}uaCF@61T^;THO_dn4j(#U6y{YF3$8z z;KZi@aKQ)cU!&!2TAZd+c7rMAi(PZjk+4Jlh#mr$3e}L1^a+)Gmn{28TD&d0!r!b` zxjyjZK8Jt=AaTk0c#(Hvj}pe$$=6*sAj8?)K!g8q_-*|8w!-u@#tpCGhag%E*>I7P z==ukU@Ap_$xp84Uy{-G}sC5BR;dQ>721iB@UfTdexcmg=o!yZQntM1$l;-o4f}sH@ zCB4R1`M^CoE3?kG3pA)uZF|S|ve#~6di#CsbU6641;IQ-(zdv z9148M^hU2S$%Ez)3#&$%*QRsYx>n`NFQLm8%7LNWR`q@dG8D8kCTxswG9>Uw4Z2qE zgu5JhwV_XZ!8@l^w&35WiH)De_JKI#{0|!(oF5mK!JMhEnU^T@!%qO+9?dGNA-Ka1 zA#Sk=H$MewAOF~)h!9?VW2cXpC0dlpM`Tf!XU#QP_PSrM-@rRJlIju%UJXGzWnf`2 zj&V`8!GN5W||B^ye=6ou78=Iq9lSKX<{Q0R3yFI=Y(Ai zuo0d^l&dc9+T^`!5OpPq4!H&PO?2*E&|K4%lWvQ8f6pSQS-ix}s#`59apQz&pT>}C zhsO~KMG3;%gb(~m{mpOStLcmx5UKLEK8Z)G!e|`t+dlGuEM}33>?z3%)t|tx;oyF(rf#okTcwOMM2`lKI<82 zr27r<@@Q{#6`5!K8jEwBM%#K6kx0#j7e9H^nQT> zRn=GV_txBAN#OVT!tjVHWhEoG@Z?l+&$+UtGaH)z_kQR;2Itr9R|}7H0QSECdASmBX-?rUHlKp?yE5A?L#Ee1vv?>s_@MLgL+h zU17Sm6HswH)=Sl(eTCtYvmdHQ8&m~K;Qs!uQ+2=L?n(o4M;<;o{_1$!zOI^M?7c;c zt^aA6+*U%zAFa%FKpFv|?v(}J0!u%qs}3Jq$(aYeW|0f|9UP%YNL7Uts~!M6@+09| zWfrx9v~DoBL!;EQ?Xeh<8A%bmr(uwLe`!vMBMM>j{nw~PXcB(+x$G|je=gd7M`FV; z0J2eQJSwv_evOSy*5D`h$=qu zS(J3XjIRv;nN%_aIE7!6`R5oID-Z~9ecjB^JS87z4VU@@T=-)j?PMEUXN?W0#$FY= zW%rP1<5ne}S+islw9nx~8GT{^;S06Kf}}fM^w9-T%*1#rk1_7jnQ$opRuiZFkdyI# zxO zW3J3zC*ZR{`hJDWwx1UiSh)?E9H}MX-0^UcaP7-S>;64F~Ei3CqMF zz&PFyn)l6)bcP5a)3Wg#%i(#3(Z=9c#*N=`8D_ufV*fe(FD%u*TzNS&juoWbv7fR5W2hrcXFn=`Y^`#cD-_^`emg&D>iYO6Nt|mJ*(A4 z(lauUxzq?9q(4{kv4;$Coo3+up4;bZ!6gm{NFZHDIEO-f@$#R@2!9_c^9}tW9w!yQ z;KG~N05x?l@%W9nVST;!?O5u6Y`wzU0Z-c1-~1NVJ8qw}1@av6guu|7Pj7 z9aPo%1vA|wHC))plx@V# z*aDjwE4{i|bNm#^8hmx(9>?`aRM~qou;(D4o=Su^J{&~230SFOG5pD89a`4{RE>vf z{(_g-fw91zv+K1QQI-Q+fp2oYog-Q0Pvrvw?E}}quGhK8kYrZ3Z;=}zw9%3#A#0gu zELryjr_4XGL)`?&4=E{!CSTbWJGzRHD=I=gBz?w`i3c>D1zV8i;t zr7lHZe{}z1=H%3zA|H(&Cc1NEdMJcM?rJPA&Rc+2+USBp+F`0p6Ar+A%g6XpZw<{^ z&8wZ;)797FaC{Wgo#!^+Q_)#AC1D;4%TM;M4DSKU7zaSq>&K`sR7eTm6xG|!$Hm~U z%pAsT*?WCjcrFj#rD0rheTLD#K8o1~S>0Zitw|-55yU|);$wDw-G}8%Pv0jw4@k6X z-baQ$_AT3aPioHQIl3p&x^I#1g*E<&$HQbzirY8*!@GSZzw%>`Hs}@RiY#|F>_Bz< z_c=B{*nw9xUQQd!AA5C5Pn@FEbwu8{`4H}1m(=yfHI?0S`&#(BgA4`sZo@M2BFX&} z?gpfHsHA=}V{iM-{%b?}=`_Zrp~=5}mJ2{nU>ykRfg(H@4%Hf0hU``a zy-LUCOz+K9Bf_Sk_B~qK9O>Kx3mwzH%m@_@1YQ`?R0!&VhuCc(gv?nprT*?$*R3_Vx!!#j+fXGP2(^~NeVq{ zJ0m&h2rvgL(F8mCmOp)jUlnA}4;@Licu>1)u~o0VaQ)-pjHx4BnHyH3C+$x4z5^Sj zzSRXbn`wl+Z?${a>mBTPTb~FmyhHpJULIPHB15vc;W`KHyjrNv)F}KRpp}EHh<@x+ zR%QG?E5ZH=XPtj*`<0m-J(w?UM~>_Yj0*MlV6Ysx=qOP6<_QGvWl%X&la*TG+d?S;_MkxDfcq zs@Erj-&^wjydUTIuMEL;Ezg1VeL&VZ6)= zp7iOUY;ZazBQRBpU^LHiC}V<6;SuiFHyOP?xO7h7xp^vuD zQit+l;V180S!%j0t>1bL+-+-Nca@%sGZ3%bGw{%fJA+;wn({Vkw`BzNh&Gq$miFui z+Q}#M4gF^$=W`BZRA}=FyVCfsWa0_GejkPxYt-f6_ce@6#;&_6L&-h+g9PN&wzQk( zFZGsS-7D|)bHC$K)doA#+#Bxxl$XQl zVyq>Qh`-0)$bVfT#vfLeG9F$1 z`#LtLbJi%nh!B&E#`VAJIt=9(fHpJ%cnRyvvND7NyI&0X0nUYs6M(CxQCp;(KOK#2 zgz(`G@AprDy9PA1EB4cffr$$7c`6$FNKs-oij? z&yWRVM8hcS5dDP-N_gTM*-N1}U7TW00wg z$xVJ*$@Jy+3q-mXpOpZMkCn>;*(%IAa_0=u<|27OzIL;9(RHg3wG@o4w+uCurU~-n z^Z9s|yyf~vMEmVnYCR3Xb{dGWL2lcc$ZzIURzrN^C7di!iQ)h(l{vsz3_?uB6Y>w6 zkmy;zLgCMLysyBwE)g!$G%D|;`x3`hzWQ{xAD?@Hb{)OwpOce*61{gZk}B81)aQ*i zE%5|Mq51=>N*B#`Gw_~`0GV()t&&t#Y=#>*PG)n`nXq4zKe=MB+&Rb%oasFlVfg*r z#m{Nl2O(~+QvwL0Zg9{*XMcR}eJG}IW5%H;y^WGNf`AeCoDbLIgs)a!o9u8!B)0jm z?+FHXnVzIrkeT_wKdaTln1|oB>ET5W?$1SDA>4LK`t&9``WW**G;387KfY)_0MlR~ zzdn4udQ{oUZQQ#$%~iz3EGHe3>U6_DDJvGKop)1^T|Iz_whgM?EG_Ccbc~Xz>t|Fx zqhg+pV;UX7WPCQy#>>$JWa!`RG~IvR zm@gevtAeQ7_n#FzJhu#%{=h@s$-1jE{@0n zZhFyCWyY)!(;NWSRrh7!y&zK#)}t|ZqyrMJ`R z&TQ<1XM#YhkPCD>gvw77{9;_c6ioI;}zg@p~Z3>KhURh4qgt6ZWf4Tqe zx$9*lBfm{0rFlmU>Xq;_8Qm6p zkgYGV88-*_ac`4=*KJFH;?XMh2l9_&o|qS*hP>&~oYgc%bU-!3&Zn@Uf8fJ?7xHFe zkFOO9UHt4rmU2+`50%Vzj|xFq)h;>z*77ChR7GTG`;8n8Vvhomp~3f~g&DulSxh_- zw$sjG(BALl({I+|*Y*8XQ0J-v(xX7H_0a@VCKTlujhI{!F-t+-DfS$0 zW+!DQY@?<9$;C8avrocoWfe?V{73b+2WKlxvWdR=!@V-hPPD7-;42_oVNT~bgu?uR zog9BD??hTgTsQzN z+(eD0+v;%;^2Zf4fK0H@i@rj!$r_SsjJ=K}xVN8H%N<$C{6}WFg|i#3J?quOy`4F@ z71IHlGJqK5j)o8(tzUgv+0W@)wp_V7c$8mSUn|b}FzxrjH5VQELO7JWoNoI7hGX8T z%Q7nC;Z?Gwk{=la~t^R5qtYwwO72)2FTI-39(mS2JWMr7mOK?mb|)I{#*_(H*OOPF?Pq^KJWEsO9lzc$bM>s^!2Xmndw{-k0pJOuyx#GS>F=o$5Dq1bph#o7_4x*?~{9e%OtyKUD35pWfy{>VG# z)7hti*Rh2S3;!Sj9&FKQ(y=NXUBtL%(wzki-hhsA>TQgWT? zeSQ6BS@YNAeHc)DZQUsyGD-Vr)CFaM|GsqRLd{;fGu0lxT&3Pkb27bO|M$|$e{4`! zVq$9(kW%kXPOjg4KMsoWlAeG4v}M1{ z>Y!F@&L>iBeJ8V4TLQly)N)@FS;qTL;$o6g&_e0bybCFE1%XxCzdrG1?~??0>MHSi zyVR;W50N4gQzFdD6!lbgV`X+Wd20UQx^eC!rEM6?S@i zPPke7Z?8wiS7$rOI~&1Y9E7j;QB|+;Mqj&TU(wT9PkqVOyD?z$Q$@|%EM&{9;b%Q6c2Z1VF7r4=V&TM0z#+v!C`F zp_<(Xb|8e)CqbY_X~X87UJ>JC0B|y>=bBII>UlucCGPt%Waf)5@70gp@*BU;-Hlgp z>fT`fi8@^)ai7PS_2_mpP*7wLW8;17%V7LT+(~zyGJShkW!Z1YQw<6C2%as?ks>sg z&b|n)dMFr;T~~|n*isXlIVcEVaS9AQ6oh}d=1?PLsF^huPq<&NbFF@$W)^%!|t zKLb`n$9)Fs7)cN5`}1;uF9$l2$yIhs_Y=s|A1t84{8c|0in(NuZ2v8a!Tmp(EjyW7 zVfu*k=}!pnLPZY+mx@3XlXefA^bH$OG(#Z8VVG@IJ37}_FgQJr+SO4EQpo}^Iq`Hp z&ITN~eIPZr*Q=oyR^?qWkMh3#xEWJpS);Mpg9gB&l4%Jd@ddPOAGQ@&+lNhWmq983 zGos?0kCxBX!k2%D>g^57B$asbifl6R(dwKGcBLL5B0A}G$2q$PPDRJ$QFLOR4NTRo ztZ#1PwWjOu`A3I2E?NYWq3gi0`tFSs1FAuaD@IcJ?I21C z8eT*szX={4)wfRC`v8G?oZM2|KTOH~aq(xj0! zg4hI=5Hdq*xydKRX*`T_^J?nJGrhk-WmEFNRBEIj_2KL)ohwu zYo0G4=U#_+4+=EK1{Pg_s)FMO{3(49%r z2$EmLhhJ^hPe-p2ykAfpI=3;>SOtSK_ngMg5N3`;{FNF$IL4h?O z7Mjlx(s_H@c(fs6`HNiXBZMR!qVujsOzGrySi z?k*z-@(&Z@2~DAsl&JxCNvGkWrW+LE&b$QoSiQJgZImrf z)}x&W=L}n;DF$8ddGBV>!TIue8nus#HX;=+^g$D-6H8vKwN|`N;<;D|9b(~mj#G%2 z;mOsi=}UA;$P-noO5Oe`1RWcphF_g6Xt!|(XLcv@X)7|AwmU0$R9- z)x07_;wv01wHOap+H%hnZ$#mBX`6KxxC@o&#B#V4g>>wc-?zYXlUjG&=?vxD^gVoS}z|`~07hvzgt_Hamb`H1e zcSb@cS?zph`LiH=&qB^*aHDk_Rj7p@Ui`0hUd|=1TKVAn#&MXi9=qaYCXXp%ZJ*E) z-P5aTO{A|59Dut9!8e^J31dU?tU|BE1{-o>7NirA3z)~3$CM9Sc16dy5xu+ zc@y4v{Ml+k9zLIFe0EM1w@$T(vA6p%O15c2oi(2-A& z3uEcjSOyj5=dpj!Kb1O15gBGcj#^=>OWCHqD(BUl9gp&vz~4$6t=jK1giTf;`-#O) z!y$@7-R4qM;ey$ypDF2(uCaw_t2;Y34?)0>G`9!VTv#mm`Gcjjs z-seT>PG%~Gz4;ZDY~Fl|;2pi)93uxb%%XWY9!;UT?G|&0z4m!ll7&qBynpr31l47s z$1QJQA*ai%)d{WWQVB@{FZM4Vxr}XIYHFSf_6JHxLuXiaTDI@^#-A%hRX;y+h%jd) zM!wY7d$Cao%KY_#P}*SXCcF##CNQn9Mn5L%#<4w#Q= z(Utt^{qD5yI67}yy$m7m<>GNE2D*l#0Z*Oe4H8@IFY+1;uBGnJ{-^Wf`+zu#q_=V65X9KjgEyZ?bAp`GyZdG!H4$&{EA&G6X)rmDuETpe z^*1~U{r-{hM{}(~)E15*I>0&_K`^aUkld z*dYmF9bQSnoUdo{#5qn{Y1$p>Mg2W|p0;%I*l#CTfq{bsg=X;(Wa7clWnruJodO0<~CDVEp?Lz^i2|TNM=Qp`a%T9NFgJ@VHFINd>thh{41@4z^*VIAE zGDAxO+1m)pRox|w(;uvwSk5Ahlny~b8W7*VzSEvvG76pKe*X>zCkBg&%%%8n4?+`!WcfFU=4v!%eD)rebyeP@k`|e{`eZLJ|tGtwzLD z1QNEcPl$E9byTd#!uN(X0b6mxSm!&ImNE{D62omE z)dZisAMcpB$2U&po(*DhoytGa<(law6*PGklT;1UbYVCjs`R}o; z^{chrQ`#+FTVUS$z2iHm$$RT&h43`x{i4p(xY*pWAw*r9U$NC%NGgDvAYljc3%RsQUgL_cZlQ z90m9Z=t)zbAWAFhK5fu98}f?{9AbeKU^_!(+XKHwL4oN{DJ6nKXG;HZ7+qV*)QwiE zEJB55O%-dEs!R67?1OL`KqKU?`kGjMmm^@kmyTb^B3TwoyYoslMXw%M!-ivOuT>Vq zSmMV~yr1(A`s>k@wPX}=2UZS#2u8&dBJgG-{dh-L$sd$D7I+$xqJJJfL%dRsEl4a4 zM`1Km{*Du|(WLNj``kCT|IB2&8b$ize2O2Lm)}zdbJ#2pnzvhG2gnxrcGj1!v}_cx zb#i~%>0F&_umGq|6~~)$%AZ5wi`MDP0=Mi}|6%?ehdpn&gEjwy`tWaD$F4@EA+}R) z{3wJ;KkqPo$sfeLFv%<;Ne$yL!7PY^&Xd~eH-%CjJDZ zKq`?#aM~%Ry|i{}qFFj|WshXy?Z9DWT+wT;D(iuhe1P`xjX1_m-e=3#@tlO$M2`pe z&sOq_v#9ULywEa!2hmIAmiLGce?$884nFN94YOc^P`xDtckIH+6!qW&$0;v$`v5O< zfCn9vl5OsG>P9d7xP>Q#WC16gO+pr<)0s`*eM?6Ec;+K)@ed0OVaqN4Hh^&Y?xrgl zt{G~(2-#VjBkm^ye%_{n>!-K93vERE|0DB8VQ*ZRReD7VL{svu3p4zg);dtozR#;p z*e4_b45!$*LGPXJ*ZF@}N}L71{((6DJi1RHE`8zyDiqRt z_ZORzf@;2)K$N#2@Q2b7nVYpAg~1n_))Y5r>haU(BQ;Wcql3TXDO?HR`69%X8CNWSL9$uB{hA|}%uMwz_iOZu(D&&WmRuIZ zjBsUsB#z}(>{`r>gu#t|1PjZ0r=0uN%_X zmLhEl_Zc&twa=Q;lIeB)T7F6Sy4~hQg~+m8TC3TwMueU5Q(WHn~HZfM92otN7AxyM4ib`rT~nktp^bcm2bvW|^y8xK()_)3)^ z5?+K!bJFKGWf!zxHVN~Td}!2dzebOLvzB(V4nhSA4XQBtO*^;E+??NIeKfb^`+7!C z@9j=lAvu3 zbKZSB4pB7Y;Sx%>$EJS=QF}T5eL^)G2vgu3(bdihM(T3Q_#DL>jZ;c~7~=DXTt{WL z6oemzy<_9D`Xy(Nw#~DwxN;m?fr+B)0j9VbG`|h9vmvs^<+BeBVNN?#`t-Z*77TwQ zF5ZF7Z#mK&Uv1cjJjgTp5BUgCQo`&Y4&y)*_QfvKDLegxQ5ppshYbuY7^h1__ zv%fRl^HOWZ66*Qh&){DK;E*36wh18&Mvav|PDX`cULzcS*Dyu^VMov|TL#GanfJ?d zj9$v)K?!$iqLMNflSbb6vR=I^85LUbi!f;kJem`XRLf&IkM|}d5GD{%NH1rAbo_#t z+9EI(jVUF*?QIbY6eXZT5=p&W*z(65`Zh*Et9WQE=9B6I3vy2s+f)agRA zn1G2_0Khuoek$XEz@}|a6;$MFOFBooTB>uu{eWSi#7KPf!24@{@ho1SrG>y2+l-Hc z;s?p;A?$_`lxc8Rb{Hj#<|G{fLTvrf9tjD6tR}H1;`HhFXGiE4L!L2=|L_6ik$7&| zLQth;Py3VXi_FL2t_V`>W@D@;M?dO=piJk|T0Va5s|#=4z_3nwM3XvzD|cxdtzRLVPx+BPDZY^Ng5cLb1OAv9CKe0r*rtm8d3d*QX9r<8z|G4*y#%CHg#?jX9kyp7^tKlq%$jRC zs#97P4tmU^ir}ul1_s0DJ|Q;l@?0Zsxjlx@6YY}98J#h*B;l}MA|FX!x@&?KaUUQQ zm-!OaYbLqh29Y5o$RD%3v({Vz33hi zagCH}jrk_eW{W>U`uI8fa3IB`3by<^BTD^TPY0Y=7wn}xuR_KAVW_QX0p5UwGIaQ3 z4OmS7*M7Um`Gksi)7Nke)Q8NFVz?Ivvps=H_Ytz1;HqBavVY2N$e9?K= za4EJZL|Y8=(cPzQ1>w9r&K>y~F9eX9{v$Ll<{EZ>M~dS8N|#LdWqyln{pMeMdN5il zVCs_n^+9{aeII7if6iFVnXjWxbQm#|TRm>li{O6RJ_DQ#$)t~6 zB59_;60p0BAue)82zE7xcG_W-5LXY3H#3jY1?^nDjnrU6+Xf~hr&I+ zCHDh0JDKl=3&=ru0v(;x`NuI8CyQ?fZ4FazL16mZd4Abbe7^x?ljfMx=IMUKo^~6Sw$Hh26BeW?d1A-cMoYc%NWxS^iKNiTdx$JRN!uJ4 zSkN0_m?ahk5#Q)wKUXU*_Uq8Y=T^j@bmRK{ zXiegEQmEL=b}@$V2cyzbYQPWjvAx!JK79@YI?>Os4q?iEYK5|j>SR9(`;^hrEvdhK z`gfjKJ-FW0SS&8i&#|-fjMkPE7I#E$Rqfr~U-sqdi7U`-p?;Q*oPQemnb}foLwR}* zFKnci?@{oZSY6$2r8?17Gt4h5?PTd22?>`YA{l0S+$U~P=xHB)u*Xwb!oi#>pWU(m zDP-K&ULvGl4ySaNT`I;;l*GI)=F8Jk?}}$#nLF9_!F3!8or^xMtYLSDHm?^E4T~7P z^}{n^t&Js9&LZfVzi=CpvE%KI7{~ovTJAv6J#Al3g+r8MvbhGOIh>zmDofl!nF6b$ zv9#)LcYpt`!v~5X;|eY3wJ@XsJVWty*l^K{-!+EoiFXcA`9rpeFJ1YWC+d>bTlTZ4 zFE+5-P-ko6;`mTskt_FLUQ8&9QZM$0GEJ z7u3y4yYc~tTs$KYLG+$_$w2*=`;*i*wdeaDZP{cr|ZNgkh)e8+1Bl$2hB0efDXnEj>RT8o4HYQC^E#6KXj3$--0-- z&Vo`_K74F^^(o0Nd|!4Gb&6*vIpmd*QqJWyrZG5JFAK^z4j-HymsSw5d+~wg#XRbM z;fz}XmWxx)=^*l=@!)g8WsYKHi+9y|p0Hq-qh3Uu@|(FqJtpq2d2`P9$fzXx26AM2 zg`Nn%yskvh)Z^DL_sS(a!3!(_Q=0ms8NK&iD`g_#bj}(>y1(3S8hFP;V@$*M^#dKa z2ngKcJQMbDDJ7(vyg`kAEw13oFc7#8p?U_q^48o+)G0%tn_^iAG8tl?O4Au&7pV!+ zEEW!@zGj5-d@K~9Q>XKG8}2ADF4(Tab&CyDAeIFQ2onW;yScjl`LL|lzVsW!5_QRb zn%JTF_c?KmC|dBGbhv~5CS-9vOCvTU!vy!&ezO?aY!1^6|A_ZR>(3hAHJ^5oFJ9;% z_AcNMe${np<_NWrECs~v4{JmF zJ1Yb&&R0;3qg5`=xnve+AHlT6kt`#75)QsNvpWH=CUQq(RK3?(DuUEojFx^!1Uxbq zyVLUuc@$6kwlR!6K}2)Cy}ve3!06e$GDO3gNQ*#$pIzZy@l&4u%ezek<_LgRyid?6 z$?azgTqW>iX8W;V+h#hr_Dhl4b)0u!utEdadBZkka#ZWje(Vheh^k9wy@Vi#X;*|q zhd3!9<&p1WfURHAQ*HP+{4!TlVfA(yyn-cAjs!91dQO=Q%T8sy-=6Vt<+Udb1F-dF zumyqVjs=AmY?{}v^VD>maXd|{HorNxsqmnIV=I0lj%wPRm?bepbr$6*XvAo57w!Yx z4_t<*`MK5=dfWOuOOn|4&`g0wnb`BrxJ9=d?$3Q*MCn1)ZwD?yI z?q5yv0-sDJklMSlXQpX$j9yCTBZlbd-Vu<)AtypSebAy;v$dO@_(;kGLVI2}oEOS4 zPWHi-Mh~imPk3RP{ep=3mNM#i08{z6O=MwDFz}7g^IGYu?ImsV+jk$3UJL%%$}RW} z_>9=C9W1J_6cOF3V{jLbzGVFJo--Ngb+|rQ~8p{^BK039~eMHR5{PA`> zMJO2d^CK;h3@omfJGF8nwSWuMOo1f3Q(+B`#L+mYINe_b0j&Ng34s@Pe7njBpvExC4N|>mYeA%R6O|wwX64*)vdCuxc_h= z@jQ^rr1dfwb78T*@)F;ct7qns}m7n7YWzEi0i zYA13Y8|WhW>1*)wI|;MLnUDWi*1H5p8NOJp1qRG2m_ZbMk@oe_v1l8$M0RKq&?)0y zwY^Xn{X{K(%DKbhUWTj?8!QZ^25;nPQ@n=eR$%1j==wT<;yn5EhYcbUcEgDW2i~g_ zxuQK>CkBp(?Ezf;VK_UVaNLu3rR2L$yp)7fQr_yl)|Hxly%HN3AY`9f%r#kW`ZSp? z#Lj3Hn5l8d!B=Pu@-h(gSsz0%s|;gbQGRhc4Lt}F=TxGzdf%W?o)W1O(q15(_SVFB zzjg>=;8p!PlKz4?9Fkhgy5^Y_2stoG+AF7(7r1PmK9x`8zygp1BxP6cH4U`SA*Gfn zK;9Rcuy@3da)JL4(xOD>3cg+-8xmkXjjgv0%o77;!ZZ1vn3S()8KHwlmGoIUvDjgK z7N3iBjn#Vv+7*DBUW16W)8X3|MP&5R^MoFGGM+etMPN>nv+@}m#Nk^k;GT?dnkxGT z7Nx-dYC{05`TNs)Uy;H%LZyt&So!%JK|ePuZ?4$Bn`0q6(_)NAh@7;r*GsXv!48QS zDh2EkJQq7(E%w*)q4m<|-+lrSQt2ea+ z7ZaEl|Dst%@AMX_m0eGACFp4~2H;4H57-UjasA7gyl#WCL1VY8>#&HWpXj-7HZax9-l0TV zEAeJ8t@x<0NdLIO+UL`WH$={ZsGy?u^Gl*X03Dljn#yLHvn=`7gd+0m+`F#@Bx?U* z*yh|?R0smd!-|2#E89{0AkHd!$ZV#`gRS1o{)s4YIWo`u>GbSxi(>HQ6}%wAc^2|Q zG@%^f`mCq*v{(Y#z=hT67yCXt)b+Db(y!~B-yNwfr+52K^o#>Zv-2%WeWm>s+ym?J z&{uj)1?u;toAIzhmb1C^-e+!aF`4QQ}Ox>4ZiqT3D=Z{2`#96PO%3ZbhbK^>!?||ihaPH%$IiSF8 z`4qIbtYA}N6&s)CX}bM>UjB3q$YnYNSXBbDGfZP-`(Gw`R%m#)ed&$Ib7DUJToCBv z)ZDAjh-9oKEDZ_?Z9#$rfCb=Gn33t+M=~XyqzB-eyq!n+2Xmt$lzeg;vpl%!pS)Ficc4~Qv3o03VSsN+zyT(io@8Q1x zb7xLrY;+;VdY@}wN>LWPXxnfChGW!^{VDjb`7SlPF7^ruYXKzcba|Q5*M;ym_NDUM zVC_*!a7WAj2ggn6>S07Q?)%5b6fI<5H3s_qYv_VhFm*VBvV&(iJ9h3fok3H`NL!}V zl*db}=^<>V`I>_r_qL~m0979>DSomngS|hL^Cb-<*j1u-txih$V~vaYj%MeDCp>=k zl52l?;qyo!L^s>d%X02xNXKh6gXL(!cdS4{vKL*$4=%KoGtzao02iaRPy^xqvsb|X z|GZV}Rp|1$dCre>`rrWaaue`=zHmVm5J_~>ejwThxq;6lJKtrhr1y9{QTus4QU+&L z!{1={GKF@!~O6cgH>XyOI!BtXsr_ ziKN|omX-e~XYcz1e;uFx>lPS~+xfM~NHfX}&_TQ|&C6+IoUI6NLzsfFt`f`5+NZHg z7LsZKZJX0Ks20YZ1O3H3;1S0CI?{kikk&^Cw}STqitFj5P?raMfS5J^;lq#5lMZZ1pYUNa62fce>o;kX>K7+UPO6N|8 z^=tFo`4Gs%3H8ZNrzZZS2q*bB-sYT?X2!X=#>S@9dJzUB%CJ$fD%Bc4348k3^rl`9 zv`TIg7sT^3hGKlMIJ&fF(OJmXx+6OJG~S4y7912A=PaPI+9WZH%k2pmXULC;bXc3P zi#G|d`+euT0YM@e;;Hz2n^Ad8AG4>VJt|akoJxn;xit?I2F_x-wsN~S3_K@HnPoJi zX=7N5$HM3NWUQ;{9;>vA(iy?4?wi`nO~AZDmr(q@uHL~uH|=75or5Hc;U%`a>b*aI z6QAu>0(t68fF9KD4R&?R0XNN`=3b(eDZiu zS&PEuE5d*{;&p)xH4S%K&$}FTbodhSe0T#ixVR|gZXG4pvqvrDx|NbdAQ*XQIu$M^ zw9M_nZcA1;0dgBt2W`Idf3WkvA%+e5<9Q{fn7nE(lqVXhA9lH*zCoG(IxgR{QNu@I zI(-y6+wXk^kLd92?++nmV8#hW8Xi0E@%OXY&oRe=?9cVN zm#r3^-EQsakn4`8p7#^-T-etZZb6```4is@@VGFRc@)<-AsO%cG2lk=Hm4GadExog z=U3aVwI$`-Z@Y-F zpZrLGcCdl0MO6sebsoFYuU=$=Ra5cByA53bXq z71&lAp1pT`7L-`By~~jNwms}p0W(yzAZmxneJ7VcV)k`CZugv;NfEOKi1J0I9@=Di z5>*H1`-^sfC*$dIFzNkqf+OIW;=K#s->K14Yenc5@D2RDV4iZ|p{Y7$52#b%t!z&m zUT&^br^ns&`>-%Z*F^*%_8tKJ=rrMa9eEF~4ltv@ZgLH?l6$+ZUoB z_T~JzN?~s2dus3bXAaEG;iOJV$lvf@!Se{CE3L5+LqGo=tLjF9oB3qQLL!QsRj>PO z)OL4;=41;$GMCMdET*!(VoMFI8M^g7f;rhPS8ac5uV(T7>ZtK2j)NYX^A+R6p^4A3 zj}m`Te7)8VPBN@xnjFqG%D&cUXQ8Fq<%e?hv4Lj zqKvqXF{Pffwt+L^UJlBa?W7Rjs{s7O@Tm7e%Kjz{onjkTpU}B*rdmTJVZYM@P8o0z zzQ-|&H(1DkG< z;NUfDiik6G`}c68qy@GNg+l83N3j3l!s_{Ll0}nSv~~9+)dO^^?l2?dv2YZFlnn96v0-42)R8t&C;75N>AB|k`0oe5Bf1+m$b+_uVq$P+2z z%=qa+iv2^Of_q~*^S!{)CtTla+O!p(Z}-)9*95NEbnd?I^Dseh>?z75+7p1iW!hJk z4$ecWT+)6wttI67Rm0sr*86l20M7f9;?5p-n|eVGuyE{vezUKH`E160 zI_qf017Ug4AP981Z8ag8qzK2Wh`Sm$Rk+cGNxZl%V*7D=JQPwBfSlVeE9$4Kno>@= zJ}^mTt7FlLutbG)Xv_TyOD_y{{f@c>8_@CVXk}O1qE&%TTuA57>mDSOMAu9Q?gw*; z5C1fZFDvt}D}*#2-$MiG3$kFeQ2J!_{uK0SdpbFzHQ#8j7VBj`-p)4gt0I$J3}a(@ zn&R1g{$1_~wOc#M3F}{iC$CW*D@(jnXId|Pu_ccA)NiVHuV8LVqG;CY`sXhEGZXx^ z!j$+>SI!T$O;UfKYXgnQ8dw{Z!#3|9=WD4c`+A(D#PlQ!+W$SKNcN_R?r`R=U5Gzg;O!sO+|eqM|9Vtb095+=8P&={h1i|`7+&$%~T zTymc_fEWa3pvt$e!Ct-w^T*R4 ztOpeU7p!WvQsC(c2gp6_h#Nv9~Mc{OIUnu1GuZuBo-eQVAcSv1X)rb%V zMyi*F0d2gQFSV#|ZJ+p`@BZ@M&ul~Y7e+t>B%5vDo0lOiygr@8zmVza>BtIAo(Ah; zgVuNCKpx8uUJo%~ooh5*p^tpeiR4IQlV_kX>l2t#zh%U)38;}WTlH7Nt@u~%u5V}M z3Rl<%OX^A6IKV}~L8(vh4|)sjQ@)Uy;_BDtkdG`o-fvXOy{Hd_Fv8^U{sTBJ8aghefsv3%Z=7x&HabwI9T1&eB8-}WA~HgPB6Us zjDoxFaCB$P#M-v6_4uZxC4bM5t%%p9y;s3zS`2!s$Sf_-ohWRT<8_ z-(DH@5enxgFYe^`(Lz&tV6^)td~V0afVS-LeqZv0nu@49AY3}tKzFz~Ra^I7F5nuq zQoGRGevLr=6C_&>*Vpj;K<`;j5_mu@-Px=HxTfIx? zKPq@VW>6W&U;W*vMHf`rh)DI;?JM9-^kc1sy^Q-Z8f4V_MnE3QU2owYZTkZwKKfAp z=k>AeL5IHb6;N=gWK~7&`PV13ZaS|<5cC(YiWWacJGC#6%p+@V$ZI%4}2oN42zyyQh0X4z*t zEn<)W$U-PJ33aI7)~j12PwdD+T9G+r7vPgwNTY@G%J)1^wU_Scq{1*x^Q%%$!c^Mi5ncI3!|sR@KtpTPLupc2oTm zUk=5$0Su^RBJr|`xj;(HS-ly-b2{v~C)ViIE%|pzcGG$toY_uMwa7)fhY6_9>CAp- z2fdEAh=2)$G|F}T`*fY0a({Xd0ervalCjOmO6Bd9hB+L2+a^{pM76XsN4o})OlxeE z`k0!mNJNhEaPfT+;@f4guT0FeL7@huUlB+Nu&GLLB^VNZLq9>2CLW?Ze3VJ9f7}ZQ z3Q3%kc`B8qCer%~kKXMUf22*Ql1I#+V32~c28?be@?9>=@5{Z~-!zaLYQpg?hO~bb zh&R4JrH?&jySnDI;?mss?qn>FUlc;6^x1tTs2O4%1V^jt-~4f)RIQ^m|Hb1ofZ{K} zy`Mui;FUMVBGDZPvv#VaQU+Vo4%>YvL)eyD1hVX$=wlMm;JfCjAXapKzu33 zX@Jf;rM2a%Jg)j?tNVK6Lvqu4pSVW!!g#ZzKuFcX*^37A+(^g5*1u7Nd(udI_`bD= zxdE94fNJQWoCv&4Eqj^#dFz)M0Q2q#p509ft;Uiv zhX(uq9fq^q4tH%o=i@E7v#>@!!Q5wU<=_=KqV}4P8;h#3Vf+QR9JiBY^utSlR|_M_ zI_kP{i-1JBXMj^dzZBf_+0H&Mo7)zQ9+V@NOTx4Y!O1?P!6_p$?t5-yQj4f;T@P>P z&6p9$$PYyw*;#u-(M3}$R=Cgo^Pz0A`yS5=&(rnwN_?bI!|iOH()XpmIj*2pOXeEJ z5^j@m)ZxS4GWiFRQ6xwXW|wXVbxQJj*UrVA)E$t@m))EwwIgD`DSME@|2=f&ug=8` zB7mDh!35-V+83#j4Y$)2;U}$pGcN(p82LKoVK5=c(Em)TxOocBkA1mP@BQ(wL_ovt zAh%DnS6V^2;x8BHlKt}h+wP6?!Mgfb8uZ>~U?o!u!gdIz7kmK7@LaQ^wTOcZSn{VC z$PI8oDbh(A*gX)vab`#=y8_Q?fNhI^vKFu_A!wj61%v+Gjnp2S` zY-XdQ=7zXH->j1l59|AL*r!gJqY{l<7PzKJ-s4I_Re!2Hnz4&YKV(a{PfTpEF&;B} zUx@mCAD`^KTo=Fx@M-)}`uu9J*Yg+5r{7dI?AL_&T-!^1WIhY|*dE`$GMaM~4G zuA+`!(ouSgnZeTTZ*Xs9xH@~L+%tkP7_nON%7>f5I;;pda8J#xC_itCd_1?*@3cE_ z)aTipqE&4}Ml7||uqw3bp(dfv5e`>o>cIY52)DT=Y)06^a_Bb0kz1LB_4oJAg zHs@SA{8h-QO`g6$qMXUg9=6j(U~BhSRQ_-T#?Cj{1=Vw?1ON?wo(Q^vx?mkRdu24S z2vlOM4p_OoI)ykY_q(U{5S72#d;GGjgxBnWQg=3{Kbf-d&@=(Ksb4M?qy26goM-e; z?FL*>>zq7s4;~=uhl2Q3qwMS}q*EiLTLoL>k%Ahwd7gv&FuNBmc%;~eemlz1-=${z>iLVLiXB!jpd``|>2e9WS_;&%h{AT4vAp{09ka zhrX=!%fp)DNTJfr5Gw>S=q&B?E;T8C=%!XsjG4yjLuOF!NDDnL?7PKRfgZ_kXwEUybD@i2tjH-tDpu{A}_75S?GUANz|cM>nfM5QbIG&R;%#U^6ords)IH>QV#5A zUqAe}Ri*;@343rUvG$_$C)eDpp_}yub(C06NPQsL5G;1^zF>NgTY8BPtPORd1sPdc zz)WDD#;?WUV z*b*>?M*^39pWgcYK6sw>L?ro8=jL9oe=Z+~G}~8c1-!iAb0R*#{>zxcj2Vb)59k*QRF8(w~f{i%QTD+fsJf2rh<_|j*QtZ=x|3}Zi z{ZeZ21N@>-z4Z(aX}>**4@x-&(o&<4TtuABX@s13)H+hbHv2bdy*368aPE1F|{X35|w5Rh%5 zpV@v@y?qLq$nZ_ldI_lp9Ke8oLP`;jQcGTjU-7OijM=lOT>W@jQT^i*PKX@;52bsg zItf9X=#m|!tgi}cF0KS-<5mt$M6fFKD^G_e192 zx9{CoLjBa@GU?R&(*(iE50Xo$w521MeCBQ6vpjK0bYd?RMjEZ9VCWLqoc)}G{4SC= zq;>_WS)zuSv)VxJ- z)~x6ZVT6uVA^k`Wy4Uw;hJ~F{J^F?=*n~pz)HudAO8y`CBNCywdCB&{(?*GP5nJB} z>d{S3aT_0R-D;;ir)qZNx%+mTL(Kru%0ScTvp)#?O^*>1x}jKpKhFU2uKC>~rWcrM zC-(RRE7I(kQ$DyKI%UKZ4@DLR%!4AT*bY=sATK7LlU3Xqg9`^^2|dNoPqv1I$tW_(rQx?kDE* zdkrG_&C_`26aF%suCL_E4rYT>l=r>wqiqR{`(?kn4_rs$0N2B6 z!-OT@cexJPl(w4j{o(eDFXQkfj-E{!lN)b@E4JcP(p^&@=}YmvXe+j%ginI4Z{cpo z2>!HXLvP^KSpD^L*)J<^3v6GZR7@NvCd=vZm=T0roPHD)4{S=4Q2@5MFJ=#^$Xi~I zV3&XhJNd;E6i<1=3i%^0s5$j>Z(Y(ynWwivhGON>o&e$n|gxr+a0oSsa-3k_mBD>xhQq^~&xmsr+v>UyA z+<;WxL-UyqApAD!B|En|=ht`Fh-+X^PBV(!`HA*&ep7!hO!P7(ydp)_nvSe> z!McI=M`4}YFTp+eP5`S5P*`Nyo_+#O>UwcOZ)S9Lz@n1)pJ9wMJ1NHs3$+ftgfsl6 z47N``I-e-t1u|^d127)f&ANSIthhgK+sDZdOtc<3l_ztxcYN&Cxb1%6*h(uk615W$>txi45neY3k#Lj2$>oqXcYP~Ulu z&VXR*t>oDza$VCTJ__!Ft(>$ik@H5hKV{5pl=ntva_>;#zKg|JyI>&q*T@r6r>!U5 z0Um@5kU-mLjN*_`ofb(f9?^l)_5%jS@zU1GdYiiJyd4~bjO*+L7`R=);dgZ*keduMR86f_zDU>VScE7_DzZ9Fd$c7}(1`K2g zx!G?^`)wf6BGG(RX%g7GcxlkF27t;xJiI*J7wiXpG4yYJ!fDD5OqH8D3I)Bf;U9KB zN=HUUjlk?%W4nZE_RZMeXK%dY>y7N7@?a)6=X;8haO68Q5!Bc8Wf7KcuDY1HyJo%w zx|2hJ-`yV($6o9jWgPH=m9_6(2w?sswZA?-XCR|-+fv1ca#YR zMxTx}KlJ8yogP-QuMHnIajxPCk(KeK#r{*cul{q1dXr~opR1aqUT&uv0~{^CZm>Nl z`yO-B*TTku@e!+sZY|fhFVmbG#>{8rs$fG#z6U%f-p3K77?9x!g;d7$PV)*ptU1stK;@R~*TUl+t&MUXcO=!c3 zZb?sWMtlX2Gz3=koW?%HBH3aw<$hn_#`BzgZ=~^3_?c(A{jM=Fr^$w&xhzyOJkag7vbOeQ)N&ASHq8ZfG^^3riByI9-;l!3E`0% zA@Mxhu`vvAC^8{z%D;c0yTZND4SVR-4=uLqen+|+qa4)jRSX<%gv{VyMaInj{}m#v zmp>(i@|5}Kvjnuh6mpNMhl6P67&kZ~S6Z|EzK^_amlnp(`+QI#M3Olc@<~~^5t?0I zCdnr#{3W{qwyp6pk(F3Iy>|(r{@FGm3nU6>t0jW6oKDd!ew4JHr#t{L;Pj4v6&jJt z!84I-tMD#Ru7c_`ubIn4@_Xsi>YcoV=& z2=4XC@wAmH)DuJ{t7&nuf=LaOLXP`XBOmMSgjtOsVS^!!13YhF`l;fH)g^J}M*FAR z1w}9*Pjl^4BryFL_!y9c$J65%h-9x+e}X3M#}3$VX)NtYkQ=Ea-4aC)cmQl>Je*rf z9YVu{v-Yf2DBE)uk-W`}y#XHXZqCdDE_ihkhho9y@`3zUu5%Yjw=q_HpT6HH1QD2; z^~}h~_HpI=fvSJy@{N!Z=timo_s^;4@ma5aXfG{&Pk_M3ak2@^-x-%G+|Py85-4oA zE*Z`}30d(s4D|38#aE^SA1L~t7KUnGI<#T91|CI9Vc%R|dVg1=VQJ&ra@^(6*y2$b%9#ETaq^qS)FhNL*&;iK{h8yaXlwUMCdx8+v^|x^cD_x+I(%F z^K*Pf=_suJDa+G0Ve!H!CBKM$$U=V#zxPL|AWr+QaCraJy@L?}8*3;_cIV83x&r&w z)VUty3W78zNh_M=2zIji{Jlu`KbFhfq5#?sJBC@yK{wC1+&uNYDOj0=S3mm$Xj8Vn=6dW%zU?dN(cH@(J zEE6KnFnIz|SmYH{AxgRyy+>lFdmgtB#+vQFeZQ(#31tJhUSJ(Ue)IIS&lSNCj~M5A z15(J@3ZD7*p}>ah)}}9%)r4GYpGR(w{bR;;a#a0Eg!!&>KLGiF**Au-$0O|P6Y3g} za}&kIxH@OiuMYd#p1q#kP@W#frH;DWZ5r?z>3b8q#x0CN0{}1gh~pYJxdN`Y?A0KO zkDk4v+F9K#-&>wb}Aumt(esn`O!JsPS9F*YO$^CdN5K18u4XHA%u(&OvUl?Ulm0Xb)lI=29hIp8_;Gh?rwb5VPikqqdfIQ8`JIUJIg5QOjc9_ST|8Tq-) z480WeexJB@{%C0HG6^KnOJ}3D4tg9YMN{){s`?vO1;A8zzYOms3P1ant8hJ6mm&|? zT(8jO?aTe*3G8~hxUi#gyy?8?N3{2rQ;GY_Kpu5Q#o!-5Hr0pU zH90lLrJviGcNr);!p*hpbpXlO189GJ0CTF~z~u&W2W>_fIjRGaSUqMBaxnd4IDi73i7ZvPHiq-P9V?kGn988X|nq?+0=GC1A zJTMX=jPHY|x^=6#-*Sk9lhKdr;p|#gmYlJDcc>zqNgsxZ$dQh9wN4i}WR=>{z6hc7 z+3%s_ccmYXXh$5c2kogKt9St-DeWoJd|sY`MeA$@E&4TsCdKX2G_Xx%27#aNvxLb~ zw(7f3KSNTGv>DrLjpNsQ2m5~4zm9uvPk#))mIaU+u3C}PD8;L5VZ`=j#5?^JhR&WF$ayr|QkDg|-jz8$Y! z;*inhQe$vD#v;SC^0{8w{mDC`Y?s|W>18&7E`_)*GZF`&6pq*{?CV}oqe+z)=3<1m z*_BOJ$l&1l*T;}Mwmwm@$O%}@0(Iy{Qm#?AlMYHOnCa_^g@lQU%lpa zi8_$V;ZzIU?7rYFh99E{B_D2sWpPfq&j9F(5;U6Lyti2Kt`T?oA?o`T8!q;SYC2`i37OE_|0yJtOBA_7GS(^AGr(KZ4f&>@+D zt;Deidr4TcnLPN?`wQP4_oTB8BWCy1>kma4Wq&x*aL*Lzw3~t@)#H+}v{z)V331cp zCpBZau2uay1y{dxd03snDYN7r-vumS(Qh}ZboZEoCrvmqanIh?A%CLls~uk4Zl#6T z&AEkUVLam-FgDrGFagpo5EM0jn58f5Pyg(QFq3=uN_zdZ^Y_R%MJ$aF7S5yxFfe!G z8Y+@45xk^$pVK+;SnWMdlN#Xr4K-w_uC9-+Ow zN+M)m2D^#UZ^|^oBAGLPim~6LGzCW~0eTS~1Nmq`fPmbH5r2VYYk!WPCB1jIWo2y+ zW$ysz7Gq}3r|j?<`X4VSbA7_q!`z5n(`^egydVi;aJX3i-1+bld6YM|9}Idd@+W7W zqnO&mwPXVwT%6anBL*?X+HrfPgFCs}K%UP{=09RK;&Ya3X=BT_JngL+yR>_%P47$d{t(I^xPaezX|CbvgWNHky$g=<_)tAie=AWA{aFG2Pfkp__4tn_Dk+ zQL~F#S_On6F>ainBVAJ-8_bRnzPIva7Swlff^)XNC$^L}+~DuTSuP#A(fb62`CqL0 zz@jJReR0JDkeq#jq7c11c?XXrZYi(N>luY{9jLbV2YT)I0jsBMmp=%pHg|ikyGtjM zvUohGhdtf*f`_SkHhEA!SWM)#1+roNnVUoAS=vHXjRhph#H9-3c z=Ww;l81{-g#yIR3Z2Bepz$lB)&w(R~ zA%^o`@m%pC>v`p3#x~R)lORL<;#}EOcnf}`aZ77i&NQUWcv28fm!N6g-GMS&XSE`&>M zGxO_1UF04V-53`^ABKe6fCXw9hAoWyT$+zBHZ6bI_x&Ef){iPrC2-m9FS^_B6i>qG zGFkiipFgQx&adPs+^*i6H7APiSbr)+yD1;68@Z5SHu;jc(O;kfrEbHxWsMj18Tee$ zw|yC;->q)hBSflB2h3_Z1PeB;Qe?P-wa)<(V#ks#|2nTn^S24XvHXp%G56I*l9)%M z!`||<7$jW!?t>zV0HC$=!!gIS*iQk5Z&2!$A0{1_Jy zr;Z!%Qvgljm~^qzt>G$tUN-(9uHAIdEZH+C@iFcX#h2FXNTt3|#@gS8e|RyyctETV zXET65bRrSXDTE6bpMv1p;Gb{LM9!mn!8lY&*s8f#yL($2v z-=DqL2Gi#=q3|w?){Px*jFYSV=bXv}=e4{C2 zCC?Y*lmn)J#ANol{?X3Fz?%2H0uf<~`*Q{@KgfwQ$nXw7DCCw!X_lCL_Nf>2Q~wt2 z3SZ?&_m_ihrO@z`JXhTw5c3GGAt!LwlDyUvCTnoBl$!Kq738Oxij>6CIt3Imhl#O_6=Ark0LNG6A(zhiUXSh0FQYz8%zX?^pVFLZAZS zxyXMOUS3jcCtH4f&Als%Nt>Td9D+%dV3F{Fo(Eywa~`=53{Ux`1D zy~4JZ>w~Erb3T z{WS*G`f^~=R|CcIfr6I%gIV3vBim}qL|UimY7YVWZLCTVOtVje-y$XdxseE^5m|cV zu>IM3jwrb>NOLf=uvtHaQK5v6WXC7z7J`YC8eJeUp7IMzs3yJCP-mdYWk*VM2ekNJ zSM`B$Bbe@Ogt2^DyZv029MShv9h^7oID0{K-Y)~tW@t`9)Km)vHkvr+YVQ}GJU8}y zdO;sTc@*?bn~iS#KpO1(T=MMQ6Ip%Kpa_0ujs2Ef(=G2&aqZ|U+|9pxvP*xsaSuM3 zZAuJ?WFnP*~#5bz&Nt*+VvRL1KLeo zzc2Vx)81!|rs#+Lg4H45G4vg4kgkyX*ft*BmRa~oKfoS}nMugDsAs1ekPpZPeJz69xZqB1@%2RAQ6##feGYf39T1@i(x z5?w1&-v#IG367nLqlZ``z7x0mQ#orx`Un=4DueP8Jc117OWYmJopo^QP)F@U`B30MxUGtaI zZU;s=0r}v;+EW4%lu^mfqDd0Znc<|Q+F>Q(f;SNmPQ-HDb<%w}m7~z}Mi-z}!~VSl z1daf53$wFMab`tDqr(#SsIT+8Z6GwI^8Qz2Cqg3)E zRi;b;{Ze~!+P$|*YD7w{q7E~YjNt3LQHOa>jqP2G$wzssb+39m z%2$r2J^JL|DMx)Z3(B&~fo1+?3`Y*|7dT`+bcmMA+tpsQAHem)$S@)Kf%^0`>sfqf zxu;se^U=><$jnOS0|}bPmmA(oMcfYNjbxD0RJt+4p)1E8U1$~#$7!WbP$oAcaoVG% zR)3d)Acrg=e<{p_`|3zC9KX+e-RBo&C;(~GQj82|{=|LxWOi(rE|BNZmXiNA0RWpg zX8;jPE6sc0B3BOCFgEZSEC`%zPJf((eR5LY$Ni);jeh3Pp<@q!z6knT%)1!2v`H-NH16@IT0@2CO-lCVDA7K?5@0+%#^@+#zE4@e7@itr;2yX`1q*z90b@{q#`th!s>Pm zmz#*RY9O=lGA~NHJ@0qm$pSq|N7-RUNxy$-XHv#`8aEhnyPq-fi_nANbGJA?-FG)X zTpRe)`u@s_HPod4M7rqtQHFeAgjEJZaRz(le#2tKn9Wk#B@h+t_a%kUk17|%gQ~e7 z$%an~Ld23PxNxn6K8)O;oN*RlzgG!R$4zCOB!2nV-`=NfgD6@6aT_IsI;}_L@Yt!Z zbSzSk0T4I6;hpk#JN^2ikkwLhFtePYup4GqjBUiC23+0(5xjFPdD&8(-x zA2&dREhJJ8gMq?X zweIt2EIaJ;92DK>DzID&tpTII_ZahggqNOqDv@n}abvl&k=-UVwg-Gw#ENd|g0KaP{ExEL=6gD<-;+ z{BuQo8N)Rl+r#bhy9xZv4#qK z%hG1@yia)s!cW-78RJDq$oWXSn^IKvl3GU`gsiCbSpO>WZ&i|DQi``_@X7PPrF^}^ ziLZVpLYeHFKt1n#MwyBO-vp<(Jn%`(vNs)*T5O;Ckh1XsAqn>`qtepnlpwCb$ZTb4L*Eb|0B|0P{=h0dE|_6b1Gs2gww&?>Viu=lO~PMBg{``Y(&?) z=Jd^>%e~B`GF1k@nmxMv?y1|?{h|&ewMzN5Hy;Kj>S{F%R+ZWZYRGUYZcXeoKN+d$ z+9&>KY^5!rV)^tfMZv>f(SiMfxy*4N7w&uwp&c7u)b5Uz#u=w>e}h4)L2#qBvF)HU6joH)(AWK;Hl!AxSqtOvRDU?Rd2r;u~mXz zN_od}auS)TAb8)YGFH>R36~ap#WbJC-6i)tQx-e74rIEQuu=l?IJtM zs1BYQJ)Q}9X|{3`g!RAy(Xl%EcLr+(;G>6B#wyJRJxrWJ8rZM>!&fz`%Ai(1_2adB zfzRX$$+l)$A*jk+aYe$@I^U6g-${9JO*Nx`iLtNeAg32x5qzRId0*Ka3jK4moL6f6 zPD=BBoUdTyT@JO-CffUbQ%x)Gwf?xIoHuZVadekG+;va;kk^HAVx-xG)r$lL&I21T zm@U2I+mh7_0l(k+4;@JDON!Mohw>r*OuDkNgE~_d^~w||UZg>3iCHM1+MI7tyH9>+(eMhT?$8|D zW;06QW4H%1YB7;3EM-X{UQKPgv3UizoQUN+qrkAy#pJZJ#AWfE$@WNu7w%5kiF6q7 zx4Olej)Liseb4&qCb%4`!s=gy1&)b79@RDprpCtoGu0RUqQZ@m%06YQ2?dV_{;c!5~@rCq=|cgg;2`mmug<+sOr z>hEwOlk+@laDc_;gfEjR-j&+4gC9D7;?HORJ z1@h^K`lAcw=Um_U8S*@<@qUq9`9=RsK^oKbS4R6{7FJ^&E9VlTz1)M0;Xnn|D~o4~ zG&0ZK0@U_!zXGQB#H6_50Ir(QZ{czn6jTGYcMYi`Ki+pihbCPDa1umv;zZ{@ej3#c zqHU};cez}=Derfvzs*mIuyo%8_In9FK7lgM45r_O*A+perH&||;2Agsd&r6xZ=?s^ zk(Km89Y>RQuS(^%sEvsSF{_C44B4rZoRfN$4(0iUBr3~53KL`)#qR) zZYh4Rc^bCgVxi7Er)dU7jGK#dU{>^c*aBphTT^~Qa5?URUyD19MxT5cije0kC7AeC zrV>DWFPBpcg6H{H0~5F>fgb((Zl)dW>%Giw!1Ciofx|B|Z0i(L01vt8;_|jx54Ji7 zGUvDT0VWD~$L2h*dunJ(Ugi?v>sBb$f%@XkU1&7V<^0$A{q#I~pSpQV;Or@7_7`=; z`<}xakI>?P`>KPsgycfbKh8(Kmwg_|E+3C8h{Jkqp`IC#{$kRn=l14ltIn0zwgF~u z5!d{Ki37}O!Dz^F(u9P z=b3mpYG&V~Vnqq5tMY*~560$MSA`63_DhVD{nj0bBtw&&hp}{WLm(nMNEzhcJB+8O zNt8{9pai|oJM-hV{r2-7pYEY(J~Z?d6RQ>fsE?CuHT#;Ll*ppsnF=&69thw4pl69EW@Tf#9HHiy7KZ_}D_FvvL=hIUcdPW#NLrdxl8JXYB%yh<01_B)OMtk47t+tUJgN#ymq!0WLA zsQtIklX`!&FW?eA-uHK03#efeKed33qFEiDCh4A2cu4}4t7lAKA#;)4KmGEB-_Mch z!a3GNkH^nMXkN*2z329U=U`ZzKPEQ=cG_JjzbF%kjV+B{m|;mEw`L}pN(0l-R)|* z0AWXt#1uz0?P*h zg>==vp}+<8zLd$oHSZ3`(*7vRWBKdixLMMA(U}GG;LAMv2j!7SxdjZgf$IabKlY#n z1+&iBpg|>=`mBJWX9go$&-LYaao#yy9IhF}IiffV&MB8(i8-V)@p!fV=yd4kttQ1C z9`!xhQ}9jYe04GS_uZMOJDYs6bHOH|(yT3j7eH3$KUP3IY zTQuDaPaHk?vMZFqsQZd4`Zizb>vC9bzjB^puYTtSs>jJw#N|T67w@@VoNPW_%tIbt z=yLr1)g+n=#e)u?l22mp^gY;Fe-(?g|3eabt{2E4%($MiWU-;-^)hK;y-UJyyy>W_}u@o0VpgCYo?(bc5Klp6h%{t?qKQ+BTe^6yMV6WbmPGjvpE=P9Y zpWU?VFcDhzlxHQglGnE90Uv2E<^+oA@d6zuFUKo>7cToE?5L2bL?x4xpppCC zS>{lnq4xJM20s8S*Ms>Z%pA{u9s++>yLpwo(ib>q?&}l@){JCti$UgfdJSzLcoXI7ky z(Op z5>~8v$JK!RYw>nN^X|Y`t1KrMiyRPUk9*Lx=LrX+9pA4Q97jm)9#u#z1?0e zo>iZ0F;DSi*CkV!GVi`jZWKS zHBz9YUClj8+rs=4CukiaZguqT-bB7pP`DBc6^f7hTlFb)6kGjI zB0)e2(X*0PpQ<`ngNK1o#3Tf-#@~&<)HyK(Ug1pC-!~(Oa43f7F1jVLqbX?xE-#!t z&T*u|Qb}=Rs67%7B8IN(G5TuD()HW*Y|iy!bFtPMTp?P@`n!Tj)#0GlGw=@3Pc(Ry z-p2+yG!kJSq_~TzrLVbOvjj`ZeL84w=!$lwSAfFP?fc4|XRE#eyuefD0Yx7uv#=p| zpAZO%zZ&(W96{9<1Kfg5*w%lS7)B(qzmY^?Cg%9&SENvth!+k8>1Hn7u96X0Gwe<5 z5>A_sPtE!=-+OP)KF4g*gXVvGj%<=xF6T=8{cD0om0D{#|P?!g(1apT;Zbo zsxKDhy8B?DRSseT^@amCqG=+{a3S_kgamhCG^?R}UdyCWi^Nxh#r00XbA z$&ik9HI8WeRu#g<$Y~ecvWGDI;YY~Z`*3ENszmi z&U{I~eJwrEmJpCHP1_#aGu_vsFTpoA&3yZp3f@5-7du1}{Sjoh>dhu=lIzC{zIv=2 zdblpravZ;Jd+5f<|yaHwvmm%JFxdOjL%sCLi2qk(_@S8qsY=O&508@k^V{ zF-vsj#f5P5{mOgLoA37%wJ{jd6~|XCGKc90BkD0%mN|qS>2yD?cl%O)hU-^4v3K_Q z6-jxWk+4oEFMM*V$hEC)-N&2rqa(C1^IPn(sGBD$FnY*F*J-^(ys7A-Fe%n;pHa(? z5noQVDHOfRWT4|*r;Di2?!&UaeBIf2Y|kAgcdX0Gmb7uc#`l$F_x#Mg*)BhMX1|F^ zyNS6{c#OPmnnY_TA{q*LISHRQ!^6sL`+BZH-LC}cIip(sTB?#y;AL^nk<57brhNVS z1TW$DrG|A0?7&L#_}-%smV4+GvB^ZpEQVXeA80%)5H4)!IPrdr>SZN6YG+1>zsgr> zcjXuwpB`de0s@I^d{X%0q@O;n=Vt#%kqS&nbiqnGQBav>zp-WgZ{-78S3!L~D>F}T z?)8DN!ahSO{*eDBme~G>Fc$AF!vKZTf#g%Hn?qImg-Rt{R_W7p{9EH5&m%-mZ!;<2El+z4g z4tUT!ST+0m92=T=eWpv7LmtLGz5JS;m;C47rP4A@+vi_(xLHt1Y5T}-ff)PxIvEUS zk2GBb_`(!iw1dI}n#sP{5DIVZmX@qeiirSgXDc}|u(`78Gk1LKV*#g9e;m&Sxo5au)IZP8x-H)&F{GZ> zz{u`7P^vHYE9BiHiMtvHRrE|CK2x5exL^d$@v%=~XEjWo_k^Ii!GI3CMlv|kQux;+$om7b+`Pu_Wq9(S$V%eA~Nxh#K% zVb2mh8lP*MS`Q(j61o!!4`gyL;7ZIn-#jkfZ*IL^!=jm$|SxvHE0YqDt`+%oI#KH|;*E+8ZcpI(F zva+bJ9laJR+;s?|W4GJ=ENcAwy00<8#(FsxcHmd%eGJP4-avx;^h)HR)eq~v^;Hrc zRbZo3#?x}KrAgmfW0?I{!mZ@pP3&JG(2MK5%$Nu%;ocdC1LP+c*fe|^O>8GPp<{V_ z-hmcj;J~`w-wAfkyS!Y983=s7nXwO} z;^p+%oX7XT@^4tLTm^r?8v2JDWMo`HHwJck)< zI=y~5AKBvS&yt+olL=BY`lb<7U#vovFfw-42#eR0|2iSByRD{|7O|5@Oopx1D z&}A20e>QqrIe)tY1|6w9tHs$w+XOH&@0F6QxB7UJ6m+ap4asVHR9(4c+LalCQu@3h zi`r+mLyvT~AD);r+t-T1x(zQ*eS)7aKe^uO9?R!Id=0sGY3f|ZulqAqO6H(Vt$URA z)Bn+6Dto#nZ@_R^7rzhs$475`i;}Qc%^Rt{@lllc) zE=PxGc|&9WjP8!O@Lr46NEw8b4;Z2p+x$%XN00r?mly3kEP$PnML3wcDm&LH;JkDt zV%E4bqy8h5KJwh64?&zuz0BE%eDh2qUx|=7vzI4w;`G1Ft{C#DFyoP?QR7INWB)xA(}V|#$9hjT9FJz+ptrO29C#AvUzHkzl7{@d*o4$_WfOga*o^DsBXQT+L`D@|d;tLW zd}m*9?D39%{`pkYGNeNBvMvQ25cMywrHoc*9ad)K8~~1r(2p4A4#9Nwy?hzaiT6cs z#Wx|Z?#mk3o}^aP(y8&xDTIeWqflMc}1PeJ+{M>>S-5m;fMhT-i z!kAI+wNh>CPOHzy4rbjO8lm4mN-%kOggJ@87n+52SpGX%v9PzV@!`T9yt=906T11( zmhY+_oL}eex=)O<2bI?G@<`k8MmyHWGT`d^RE}1oBZYdHpL=MuXHq2R`jo%I<_|s7 zeD%ZNriESruzA|ev5~kFn#KW^JO^|&y;#MXXv6V8x0`&`?H8h?uc8htu5y< zwzyn2lP5;q8Xqm*10nOW80zsze1kszV@**L^skl$%wr>Rm~|C~#)h$&rk_oXBlrVS zN?Bl;KVU&59WD``8I_PMmo0_z6|~Pk@#RTBy<7#iQEz;byfwEzS4=5e55y)PJ&KB=Ig4ya^>9{r~0fm8{%$mQV%ZEbcMi+(DG=CBZF=>R`Syz+fc%{7YU6tjRw9b(3`kT%^0-mIp<*)}CQzIwHE%C?8VU$4QZZNSZM&(I)4s`;oPMswBLWdy2=JL+tltwB_*b8y?}y=>PBtRdrEsBsee2{YVMC40YKhjschT3=$!hY?yyFb%iEV%aL zRzz1He1WZ`p6-w}lB6M3lkQyz3Ii`d#e8ENlHB=ZJ?B$!6&m$xl%A9^E_*<#Vy&6% z`hYDbT3D{U$akhLLJ(&i(qXW__tfcV220#vx2iCuDQ}U%-wf_s9QW(0odbWGegQm( z*vEr)FXwR-d`I|dEc~+cUYtNjom>a}VwG6!^KNvYKmJ;fF zD&a>>gZ`rWmRek=zgxalCaBtS7uXyw*pTxFdj$2yvl6C3Wg`&= zD`vlB7*&lXn0g0T^h`gb(a}D-SScz-4xsIW~RAdgUk$ zK(73ml}El1boR-nx9QOWSpHkp@-}6Tt+L;>ui@gEQf>XQ5A>5q)1rr`bDF;IK@@(V z41DakYUL3v7X2aiZ!Otx`!C!vj~A9RE%A=!xT{a!ELw{%m9kgsHQcAck?FeJ(_{D% zBXgYptls)e;o(hS*x^CJC1wb4*^$rIH!f^n@gAg3{j~m^gYf8H(Tmb}g>F``4(IvZ zeMdqEABrlBqkX4KV&=~mwPtuYjRd%TeLolGs-(2_)}Al^gC3Md7pDC4R+M6ndH=vC zv0&#<3qHN=`NaLuWQG@4-XzH{HB@Sj+plk+{?L}Mu;KHGzo2x8FYK#xFY<%=f#G7q z)u{n+Ld!o_V-FhbJOQ<$^xOMqzYeeF5tSl%#=NXreO^1(-7^-BLbrAY*CQ7xgZ#et zbW2hkeaxbjeiFpC_}lsgnZvxi`TS(*tAUkN{pPg()LC4Ar8@E#ZHGN{(+7Ej=FLy5 z%AO7)WMrZc#qs%-G}b#2mYzep{c`17Wp+xpP#>q$)98%UcyaTcFUT)WsI<=nDBcGc zj!Nj@M$a6|qv)w3}F`AxQfE&^3Q3h>%; zzlJ_>XAX5HKe{~OxVtUH?K3~U-YO*O!c?j?%9RV?`Bdgp28qPeNB`^&eP`5iGxY+> zJ^^GOjdY5?o0BvkZ`+S@_*JjeriK$JvO@;>g~rC{^K~nMyH0vy&IoBb4Qne!E)>5A zal1+A7H#m)`go!0S%n?~ig`%R@$x$6k27m=tFng=7!chr*TI&zhD+t|w7`u4G!>j@09rfiG{p^XU@3#lD6kj*+Sh!N` z5rEC_BU$wta6FI@;(vUS8U4dP)`|5v!7>mJd255F)XU4aql;F*(X53DS{~P%0Wf?h zsk7QmhJNu2EdI2Qi?+L?nB{*ZGNY|#oywAJfgY|<_A797+ORyP>?Ak0!8<;oqF)3K z%5yw-_8aOy#RrwhZ7Wjn*(6-vj@dkNh=0 zg$2jmRbtw;C=Fx>UuQ)~(E29}1?-x6y86|FXQTW|xe*guC1JGQ6TrgAIONTIoOWHE^qh{~!6y0Ezsw(u zJ@g>039ba?kLAfa!blt+krjGSRy|;mUZ+K?9o8shDzB$!I5y{vv(1AmHp1I`^V~Or z1V2=x&qWUQ6i92@+p^!a)8-sBAlSZ8eULsN_y3Dq6#C#SSr%yFCj^6VN;zvqg2uA7`g zPcGUoI+^23q_QABc_ovkE27}b9Fnvf2>FrH3+aLOq0#MTT zaN6ka02IhQW%w%-9G}xg-IHRQyAOf!ud(mt`V>^)2O-q#ZEfD|wgGcYj4L?1VJ%?X z!Xcp$eMIxb9>MTW!XjcKl79d`zHPGrH71=BE{4Sy&=cjl{3LWCaDT+GGF!-w8p-$a z*yKsY7_Oj0DgT@MhOcPl(=rP3AQIEXc*N`TbxPPy6&g4PXF+D2y!9%RT&w;3q6u%D zR$^=}F@sNQgh*_@-Xre!X~u7WhED8T@U>-p&e}8Z0Sgi3IljSHfVo_?dI_x)pY|^m z;-_^mGOb4=|1FO;xHJ~qWM>mzFI!R2G%Ei(=NH5+h<%3P=^$6{%9iZQqGoA6z6=Ue zt4!`AlJK~`_zOaqoa^8N;`KzYRNcJIwz^OlKz3qzZq$(h~=&VtpR zsJw6R6yFCWjtX4FdI7@Vb`G9ziUjk{s);e;p%>|14Sr<|rNp z1wVEUh2=Qb>*H@)7G_oaK>QTX+|usDas8C;{AIWduwMw=HAb$3fp=^24tlRFo~KK# zLDw>D6*28|a(znK=)jn!KPw(ZDRM0CMAM+z&MpHA+Pr)z@Mpwjfrdk0!iHBgE*&_hJ+O~~xfsSI(K#GNu4C|y zTgpU#MCw=u(#@r6!YWyRiv=*9F@X`2G9WmII}FSbpXyh)&k_PBCA<$2eFWKitp8TB zR6@Ardpe$oeR*1Ws@-K*5{ZiZK0Q(J*i!|6%leSU4jImh{Z*vjcbL_=cE%1q?+^En zu7q^JnV7iu7{q|);16Gb-=k`!$~Q10kAowx_4~(G?Rer3+IWnh`ZA>Ye*X-3YYCIb zncG?H^8j#%HgY$r?Bn`-{m4NkK!KDVreqMsC5Kr};Pz&eRDW&_95*`At))e)tPh+> z2CFI*?;6fq3@1znL$7ODFKZnZfXM&zd zQh29NGn}t9()smGNS9UP-$DTHX`n8fFTM*xj5Qj@iVzsVFSft$!^3NwX#!9r8fGbhS`{}T zYnEck!!)JrM~n=v4sNCpI;H839$_M(rH57vmmVDaK3Jkj`7lWL=%fL!ApmGxp|uMJ zU3=suZAN+{l`-vOq_v3O>O=f-#u@03#F{Q3pl7bdZZ5(VSl>%0V17mWI z$4QddHH*!66P}ytPRk=~)xe=6_IE#wSKfY8K|(%iQDw8w@BKv`xhNkbGeBz@2~PY5 zqF~S8Fd}YbsX9u3BKiFc(8p)&(q}rN8o~{&?sAj&SjSW$xbqAB{nhu`dQPAm0g3GB z69Qqq;3$ii)<7Mx_d4FgvbaZ^zi@vDf9TED1+KKIaJwr5!6v7zKX&=7xYs^`4^95N z(z9d(BamGq-#Kgjy*%1!tp-31@|rF>7|phQy^bBr`iUF8SC}5ggcRZ4*1=p2nNM4f zF&)BC=aS2RQ#wblnilLc!25x9w6Dro06>kXJX)!01r&uv(VIZPxGogM5fN%%)3A~R~`_1Pcm{WP7- z&%|;JI``2WoG7vM_zg@H?NHT>hdcr-y5kO}3z1o-FYoZN*&rTflXe*TQ`@}uu86bRi zQ?E9>|FEa9Y`jQg0M~b)Ph7&tv7li4Bd6#iZ$?dK^J+UZoDsyc+U|a^;6Dd%E))G> zL6<0Y`YP&}-yhrx2dL?2}V}xs9>4j!RXMS3^A?Cq{rHnKj&Z zNv$$$QD|z#A9@3k{0mfJrXGMh?g#~4RgHRe_J(N%Y{_gpuPU^`7gx{Oc7BVp6NKnu zFXZpE{d8sT=Xt-#JrDjBlrTE7#Ft-=V4ZCh_SUt1e=nEPdFmGfI5$49r*Uj_C*k$b<(i zGG;C9tz<0^Q$AK_U({2@ig}MD%wJ7)ufETHpK!<|Q~D!%M(8IQCY#R95SHx|E`G8P zm*eHHJ0Aj|u;3 zYBFeIy*x=FHA*+@tn=uK8a)0xUZF)z+AFrO(#r zfzGT8#DiCURWG-9&uH@HNaYqtN+_<}LKD=|NuZObejt6SsEhy_3h#cZeAccpZ|4LT zIOwzLiwl#^X5z0yb{~y{5oD1y}9i-2&*{B zTfH+{4uw#j5{WEvOb)6T*vcGeq-VD{*Q?4&w;B%0fZYZ~aXe(^KGQx<_wo4#9l_jB zt((Y)>1Z^UC~SVym6O}Jgt*m?Q(I#2yx9h>@YMzBu5V>FgJtj+@^st$V=S=WQq^!s z2C_we)Df}t4W|=Q3kJolu2cr0x0LLn^kXJN)z7W@`6B$p3^yj+VGgg4gvGTB?d_kz zr<(V$6GVl=%p=`GgA>i~pLIDoGIc!X_u>7_R_w9ao&>5sIxMfePh6gMsSJclPy3dj z$Vp$k^>E!shxd&cW;lFUw_{y?6CtUNU%A|;g^Dm;+X`OjpVS{KI>V-e`XW>BbL+?H zsa{c&XcPLAI;GLN5#RtE7LtEq8lByyJph+J(Fat=k@q2@#~wj79iWrWsmrDVc^GKe zS%`+n5Tc8O9qoN|0<%m-tSBYPJ#627If^}dlIhDYMM87{ffJ&}9sQ^1vnZ71AB=yE z-`e?LC442=lL$uPj2%#Y;sKpbl_i@P#_0fO!e#TqYkv%JXo{Dme^jG){ul%2R$7}* zYBQAyHAd9m#&L&aiCx4;Qi`nTlfImpb4eLIs=AiUKLrmsWjBBb7hBw{&jM@3ZrStr z)QKFEaW_I%;qF2q<(b&&DnS}Qt6lpzCqay^m3~$rQn^;>EdIuq)zfr&WA4w-G(7Eh zgE`~2!4Bc;tij=^iz@lxDHW!Idw6+Asd5D)z02hoS`9oR%{i8J)O4s(f{ftJ^`^D> z5g7R!B)Qk{mV9f>43$#|U3DMh9k0Z6rXbj~una;gQPkx}c)!u=Z&tp82y@c8mMa@8 zfPJ$LT8Z7pf%?M8&9rsTxDO8}yT2k$u}UwN68qR0AT2o6rH>tJ(Q zwJct)&kmup4^{QBfz3Ty&6o`3&ju~JeYhF1ZZ&*u<-BOul`ur6kB$)=+h`HnqFKl; zPH2S|`8(FYF2){ZI2|u4_U9<8$K( z(z*)-U-E_dl#{tO9Rq=!_i#4Y$=1O_1)|FeG^fCkkI&{&qq{DE9GT2m(6aXVVGDc1ysJjlNVDuG)$;6YL8((5?K_zS^6bh|Q3r z)WIluqZwje%=VpHCw5&v$lN99zf5l#=LhGfu;o4S(S}lS??2^vQD%tHmHo{WlvnQr zHPci34zeQyAb$$YqU>af0=zn=1oR4{-D5<5Ueg&2JJ%va^cEjuRior7X2M5wTdd1I z-i89Mzu{0kJFPvsX-}oyg-3~1pE5MtGSJm-l2J3I($Aba~X|K|E~x?Z0P{^Ym#el#3jfY^g6BO{%AG z#N&;2r}mCKg|t?Zu8ln*8o}uZ>UJjKBl;{6q#1oG)a4RW0HHCscu2xaYeUmsc_r~H zGkCHp!Y=|^T%0BFPee;Yhl@!!U))bJ3BZ>ap=gb8+wB_wz)PVM~_S4^gbhxZ-zFZ!hp&d?# z{$6P`s-%r^H9rzqdE8^MUNXU>(YSsdnGF4KczJO0KUEM^eW<=yLsq5RnhjWi6z9GF zPa$WiwU0A#`iKG!8$V`&rdT?An$9B3cEn4RmF#H?r4+YF7_6w_2o^LhY zztf(cRFSm z_l#m+OMTv-l=JLRFrS}nFFuaN`bQm=(0)_3^_PTQZ!w+l%$`Mp5d!$YE>_k&@f=54 zb{IO}M+wt`*C%&v6~_EYw|n&YOhI?#i2W_H5L(@aRZOSD z{o(}8jZL?C50A7HNZo-&iai+kOd8FgXgl!tsbLu|pusY*)xoL|Ka2xi*zg3rSCi#2 z=0?n;c?cdQ{}y+nLS<|BZ{@2n?Q4pY_<1VX8!b_#bb3IjMG-%nS?#D&())&1IHZ-% z{+#b8sn&(uD8zWxXRiDZ4oIQ5xJ$9%ppVS++d;;1T1Q(U<7mi~Tvq zpMU@ccce?S%mi6>wpdS|$6;#SCApPLnkL=6s9T z`}jIB#KhjG{q8_LfS>M3_$Eygy?&FhXOnP&DPt*4g8BVYC)5;!I>(8+P_~LUP2ae z7Wa@#Y-v>;OXk_UFQypt)ceT7E?^<>oGsH&=g(lBIp&dxX+z2nzYt|>`Qz)y5pC88 zO{HVG8<$kx@*I+cJfO+=&q`}5fM+;%Gq#X^WCOcoj6;ErMFE_mVN+@ynfC1rH05Q# z9{X1G2&K8u87$Jl__ojKf&E9SZbI-Y%qb4P$#=d!qxDEUWT)TuL6M%n!~(5+MLXiC z{dhXp$JZzP@y<)_bvkJBvO<&M?tYG~Q(tzx^Ru!MCZk+Rmdk6Vz3xz+krqW;EObJl zI9x2(^7L;qGUaWLV#PLXUAzFl??+|R#kZ4xXL#%2ub?CMNe@Wclt56ppiHRAlr)^K z=3zj^P!GL^Lxz3dG`rB=RzzuN3?}Sio24%1I_R#bidKs}dY4f>hvqg{) z7LWY;yYMjcQjYr_^M0{t^I{;NY4Gt6!vu3)#Zom97xEvERDe7sFnof7e;&=|Esw|Z zgUy1|fS7vZdR5u!Gblp|ZM zqoay_O`pSJfB8caCE>nOX*IcP>q-F~+?KTADG2KV8YLvHVZoulX}=axEfCOAQX4CG zs85u93d;*!hFC)2V-Uq|iY229i);KJ5;5y_%6I{|aNzBRc`icHZlQx8K>lIjbh?Y=u@b{Y%?}xo5TnDOYvHc`ds06OAzK_{GKV? zcQ}Ka_%4Lf7Ha98-^jlh%2UT!I(Z zB(4s&*r&J`at#eXW9XpR-Ax5R46y^8D)D|Z8pg4J<6p@cp(oj!;Qnj-8gjou|G;6{ zM!NAn!+>Q@mpazinrAH%_YVAF0@2;O?U$QUi*+iH*A&=Rmt~nz>Cy4<=5&EQ_Bam` zEeX*}`mMQ~Qz`ytvHx32iQ~uS4p;#~0cfr4-WMocVWW9e82&-Dd?My6iG< zNS4t>{-=Z|>v=v@-Yim-urK=kf^s0wsn~F|UM2h4gN-_PeX(RdhQet~F3$o3t&&{V zC(XL9I0z?p|1_IJ-{?LU!h8>g@fl&h>TTI?3UtA%Bi3H--J} zeCq-uwi^)n`~&IsxO~(<2StNSPN& z>O_YQX&c>JJ!L*0ujZ>IFYvDqRGUFv4V34DTqmVuq+Px~V)ioJ`y$*0$0ka1L>VsS=9{lcs zC`_|fib!9rTfMd`NQzS2UCvJ1JbpwfU^7KXYaw}bHJ@MhVat}+#gY}{ht+0&9;&CG zWMYTLu%%ocIeBqmPs}5QW}dQrc(8#vihcxIw&^PwiN;ys)3}3ufZ@{ob(n6=)$)b4 zE9vikNoE}_)O7neqGcL}#a4dZLiAE6PV*F6I7KVOoSjNInC^$3Ny~m4x;xB8>EIap zoh7TJ|6~qDjSjQtFB0_nUQ|7?t>W<4&)4h|#rVSOX_Ffnl7?Nn9HtEgq{^!kxzcl$ z0m@jlKhO1jAGZvQW#&Hj`b#sXaj8iy{-{bOHq`gQeU0~8T`Tdyss^xaI`LtO+2Z~j zJ>N80oufbN;b<0zrTj$^e~Hhh{c7z@@t$%~?UYXOxbe+$y#JBEuZZc=J4F`O?|Xjx zK3v^FHNW^S-|sVN@H}3-$8<|SASSKMiS-nG3zD|a-#@p2#YuAQQ~MhR<2409sTKHb zZwZpBhw{E(X+RMHxW~q(c;kPsZlyc+be9j87_i($u!^^-fmc=mh(t?^cW`23HF%Hz)jzw zxd2VKA1|J4qKd@hWm?i==qQl`|wL&_O9sT=~2*O9+NWR#Ya&=e{$C zw%GGX(j@sIB!`j5Yi}-!?`~%_1l^ttpV3T1A7idc$Xoq*??D=tl8c#JCVALr@s1&Y zI+2ZI)&o4TdT#`%n~ z9oFA#<%l0U%q1^AtU6JUod0MV_S=7!Grs@zg2r>X+CYThJm*s<7n^jCUwsC&yY;|K zW3q@p9}X#!m((!Y`$sq5kDMqTFXD_o`@u|jNtwx&9wCRvv*&|)!W}an^il`n4M=Gm zWSbk3X2x&5XUD^n61&g#)m!a!n~10t_v>(?(a|syY8Wnml7W|uUTpR}-W93}_p66= zfCmJq1J*fSk>ic9$TDpTSUu6?J4K4z#fPr1(dkQbGeHc!W z7|}*?`{pnP6IK1>0Mqk2d}VGt<^Dbx+{x$VP|#{2h~I5ag0z^0d_#ycvydPEHN4}0t>dwV{|Jub-K$H27fd9^}xJGar~i4Cky zte#mLw29ltRg|2lxPAvmV6LIS0D${xNZSJL0Es}8|L)6N{Ge-e6N>R{8Q|^F<|WzB zs;f9`Sf_q)F;vW>$fxg7g~{3dQ8gBbHnEX(XW`j&!J1te628L&)D83?$~j%d=ft>3 zR7ajvm`-$0`SFvo#0MhY)Ae^nXrvTlguGLL=w3LK`^^dR?85mEj-`v9@WDJ8Z=f#E7r5#8`8b2$ZJ$1HziUom`1>-ZQ4>W|>=#&DAY zY#W83$%U!h@P!W3pme2{@A!`8h&pRDSnMZ^adJ0WX#3@<)a}K`!u;&};U5{w@!ZGX% zk5N#I^rooXp&P2|&o1%qLfDX;i<{#%rtFanS;`g4PII!woOk(VfXPtz5)!A2G8ca5 zigc7eVTkfNr)%pbUhxOiF|7TvIAffE014VRl4B1?W6!XnLoL~Cn-%W%cnxaJo*wj9 zBjdxXTyC%aMIVR3r_smm#NwxZnoo3D`ddo|{7G82&f6}q4x5ikMlH*s{yen1puZqh z-xU6IP}cSSOXsu((xQ}Ch60|Jn6-03v3E5Tl|5b?Y zmN#v$;z+*qu0K+E#8(YJUT=utI_r;! zx|P!$-qq@0h@|m3+gN#wnN_Oa`E>c!+Va^1oCJwtYK!up+(2%RrO1T)J6y>|Cf^uC z&o6cbQSC{_DZYAX|E~8}Ozyq$$@NEd@n6@C|MPVqXZA2X;?5A3QeJMN`s)K~;@7bF zFyEdgP=1(v_uJ3^+l^8}KEVNY^n@;G1SL0i*{>e(jGn|NcEPACeY}C77qPj1)kZls z0`LpZfsQO+1T%b+4c?!Ur<|TM!lF#&G8*4~6wmJXU!EAj;{Yr*A`Aun4EKb|Ei|%U z(5r6!D#pIoa~_BF{04I3HHxbUATBoD7c1eIYSZD>(p-%eqK6!E3R=CGzj;6jy5`@K4VumsT6}U#c7)Y=Fq6O=B6m+2>n-Ew% z{afwV>+NzSVNxBQ143Q^(@lI7cbI81N$`f}a>Q?TVmVe(t@t@K)%JY?KnNrL@Ri|ox zXqRkc-}ifl{zWf=ymt(wtLk}6F;hvxHk{!)@Jl%*K~`0#9A2x6sa@N8KB^b({Z&WK zEX(ajhTiKS*i=t4zsoHTM4qSmzPLg|bS;|2r>^^DJ4gG3v~~NMbI-KA@7`4oz&3%U zNV0!0*W5o3ykm3cvnmhg{y4#}^a$2c<(pDPiUE5Mb#OC!atoI{EncqP(o?>vj{h!%w>b3z10q{wY;_)6#YRx+3!E_|=ighamit^|YeZ`Xb!L znb))q>G2l8@lPKk51zP}_nfoLY(1qfw7z_=a{ux9-3n-j9X*1p9@oX{S=-dQID>6`?*i z4WVz)Pd)N9)Z!`N9GWSl@_%SV?O}Gp#k(4aV`T(5!HTt)y9XTo zH99k!iYm@2UD^~#xEJzNjjz9NEQ+cWI*waxHav-GbNiX<;OA3(&hY3x)#xwz?URMP zPU;(^?UT8x)0h^2L>@FDJOzvnQck;YVdVZYWx}Et=y#+x>r+e9@2?-3oIa~XPIAa; zUba@P3;8b;s*`P!=9r(I+RP{_AtNK7?o!8=4Pn^U2E9DZu?nme~~r0IRmw(upa#onYZ2|k!X&r6KEnX7G7VUABOzMYZE0tjvtgMFBa zmVHOGNX^PG=Ay0pB-T~Mj}eUisnfK^5F zyM2VSvFJw7JZ(0-Uq0?Y8FW`0cK52G5c*R#WJ<%lLhrHkAbW8Ms@HG{I9;wt*K z2nPaF;3bR7e|)vDeSR+t%uY&zWmiXX+JQylmTIoTel-Dh^@jf8<91pQr>Jw8n8T%N zlWSsJ(uR1xY9q3qW_L3mt~EyOOVt z2#(hEll4TGB4hm3jgOGSjf|DeQws*?II68$>63pg_5taYGVhE#JgW4k?iVt51Ly&q z$zRfPINY_sj0l_N{m4^`==tfpz!_>t(I$^-ALhS(C)7IfaJB#YLpk)yf^!26SN11o zW+SauEKX>kPEXb0U0FBtb!br|{TkXkBsn*!|%mVLq}6| zrPi}&6Mx2Ff||{w6(T{TcPFW`S!JOwK}*T@-J|?;-9uw7t)2>##r^l+=K#?M8Z3tH z$$aHu#A&4BlVCKbiT`wmAxd#IA4;_Vq6$?OIpaSBW~3~=>I#-fEs!<`eJzZ$JaoOR zoPh)UE)x%i7^~|I*EXZ{vvhH7DiYum9kA~t`^h-8Pn>zG3fdkpC`hwFA{Nw8>_s_q zk5j>A(S>}|kEB@A&7m274={X^qo-?RdS<>>DbMj)gY*?%JY`w4t<*4Y+fMmV$pDtY zZ9$0Jd;hBdZ@4qLuWRB+sxML(-kEDIhzXLkw)WRXiCPdODD?hqatha-I1Z|7>5C!T z)c7&0li_1n#%uQ^Lpb#7pP;h2LQESESl?24uII?yRU!S*VrwgdRs){Nx9E6vU}JiZ zJh_ezPqKsUBSn-BRrAYw6^zLqX4#-`%h42aTEgkdJ^2C<*gG)=7ZtP;`Dor%uG>y-%9K&I9+XNfRZ1rn zJuxekT>u}7rCSfg;l@6c{N>)o1vqbs>^3AF@h&{I+1wfjBGep>2-^aTxUtI@f) zVTE6&cm$Wa2xIUwjVQG@HkZUY-3bhCi!@8GGl8e)$>_R-z_)(IGZum z9|Qsu^jekSxKX;pzd?11k4I(StiT)jJ6p_3YsHPMM{Gjm`*8pXL$-1KaKufYG@6|w zH639DITP^j!!bQKxYDcS!yFpku~4LN9v3he6ykb-R`OaX0z(Ebfr8rhp^A#K)%oUR zPwKinmx}Iyf|Wghjblh*krQaHF0HzhE7?XZF5;NbkvaU@bEUz^Nxm?_$BFk7o0HB1 z29`AsHuI4nX`8 zWxF_$3jUQjtkic`JaoC{hWVpwa}q6*c#2Oc{jHZlz7f}^4I~~#VgRZ1F5BbM*zis2 zC5ss$b(aXygV(_RRecaZ_>v)8~0#^@nwR zV}N*n6Qa9)6pDGmWv_gOe_5NO8<#mCC^R)e@^SQf8QCLSpbDegT!SNbwEASXQ&2++By*Mbi7GBABT@ zz!T>m_rNo+mfG(7^g2t^8$!J)3jKZuwzn=7LUZ>kt*dz?7pUVDpZnA^u>b+QObt8! z`*xBczLRwD`NqvmBKTMUxl-aEW*Jog{wa(+J{g5wPcb z)YMTEfI>(+oyt09Z^c)fSW+P;?}^PMx$TQO0OpnMO0s)hx{L91ZvD;Pmv$Ir(HH;a zrXMmXFY<70sZN;bOm?-M3u5qpJF0un8E+@LH$jK06wF3ITT|Qte^eNr3HNN z$ApRI)zkzZ2z~Zq>TQwUy7|oqvvlv34=j*Uz$U+VS&qm3qBkYKWYS#@~ z>sZ_FA{{AHIiYiNJZ;ePXi&v}noh3rO7Ked6;}E%=E?WNIk72i?m6Lw)L%SPcQ5lL z%Bp9#4ovBeS5}aQ7U_Op8e%|Pdf&UVJQP?p=Q1pu4JceCz~u(Z;vc#1bKZJRKH=4A zH1jhX!Y0L_wV&yat=s$^+bgE>2W$7(%&M;ddO-c|Bv;Vj>kj_9Q|u$w*n?_RpAL*V z!BCYtzmgagbQ!kK6(+*&MkW-e$-F65QD>sIR=**e95{qO@4atNOKim%FKOu%?e{^0 z*Jo`Fr>t7%PLhU=#t;#U!`5Zv`Hag{Id)y~xlP!f4#hS$hd!Psb}ZeCgPxOmYOs%L z@a{$D20sO`RnUa`*6#0-W|7V;QKDf%VGUAcp9cr9H*|j)@IY(X+Uz&1rUuU6&%Dz< zFCw|j!le|@Bd{{zcJn+{Duj85A9tb7b8yVN<8?|1$Li_Q7)DKZEc z{?`7Xd_cn=0mhZ+q$D%xqUk=WLvPV#ws&S5YD0j18YOD zR?^pCwxBNAL-kfOiVfRzhm{?ZG%RxhT|j zjRhLV>&xF4ruUq@#}0~tglMeR<9aPEk)2KKH|9s8JdUqb26g<)wy)sffBPZ=n!S!V z#^UC8zAr;p7?PtqfhP6{hwi*32Ax(%ciod+NHnvzZ=~crib4l|&pRfnhcRTP3DJVSPo)1|ipNA#BP)W{L58G6vy& z3uX(#dgtNEm&moIU-WjU!n{3}g`bLxXb&)m)(!wc#q~|_n!dhSifN0Dhj5bu-b&@+ zeiKiLAAe2)|5o-j=x;16w+bjDC#0P6*yt&n!F-8;F2sjHfm!`*Hy#T}&t)+LR`%_3 zQ^5WAM;LH5d>&j#HNi?7>|*Z$6~4B!t`q1>OY(R@L?SCq`O$*)_UsrEB@p>V=A`y7Yx58nn5ObScVKi^WG2K`x&0uyQqUoCg~y@K+?4t6}f8$ThY3Ct)WHCqzC5G)5~EW3j7cTWh%rkrtesU(klmzVOZ7q zE^4xnh#44-hHIllJ-&7ZG5p3_>90*vU(Db}_Kf{BojVG4>^}9>L477S{o^w$(Y)2z z7^u7Ek=?Yu>O(R!jG(|atZ}qh*so+pI(7S=jbf0jo|c1K>%G6S z0LG3)%q)3?srITrWnDP=8T(fgg%|ON2^U& zafE>VG<5{Q)ma^{owJ<37eS)*qPO_qx9@ut9=#Mu@XoK-pnrV}!WwvVXNf?6CijjX za(2hR_J1##9xy@AcKHOq12CkDtIJ!lKM3$Hmr{S^4BSjN7^R=ggDk%qxJSphIX5AOrh`h+#Hq!A6Du;FmEqY;m+k_Gv zzQyrv>P5CMKgN63i9h)8UTl_|?+QDqcMkco^BqXzk?Om{8o4J}k!Q!zVuk&KL#r-x zW@_ZRNnlv_8ZG!>?yxb1`P;H}3B;lZRg}NPUedD1W0Ax;6-xPBK$A4%ohDy!zR!#` z_H2?dDTBFu+Y`WJtvhXKJ3>oHV8uqI$C3xEQuGp1w=@CFv^=;6)cp>29(s47eOtw3y3 zwNX6~Up)3SBEBQ{Pz0%R4)|#KlE(l-#v}aAwwGeJ47&0va@Rw!4AnY(~(OmOiY~1a56jscaUtR%}-Sm0F=z#Ck(dX}^&^`7pEjj^8BvkJalh zd~Zaj!?-+?Zcoa8)gSH_zeRgiKi&zIu&!GDSSkA`=a>8V%BYM=6m{C`Jn~TuY1n+w z*CeEs0wlQbttp+O=MkO8KmA3Wj`)~j$v;imPZO-Az-@hcU|3WiH(A9U56Z z0R#eY!Qeg_A|=s#;Y2dAc+2Dk@s%+4dfb+HXey0O;oTH%c}lsa@foj}B?5*TeQ6)7 zFW#}a%wy=UIdJPE63yrLe$E${C1>7p?VoC1h5{_q;-wq(fpE`l+hXxwAy9Q@<0+Vm zoxdS37iq|Tcc%=nYj_r$?+^qdvmE(8!>%hRXo6ocXE@3%m{vh0H#CF za(*~(Sx;Fbn3|A-|4B;sEASV z5!5;T%w1GdgOb#nXd9)-Twkc)ox%jPokN^JyQK z3j0l%_qFnn3fvoh znF&25*8)=~;Ic&g8y_e2Oi4GM(>{g3^S1N&eTI<%+!V&QubDc?y~=*iuf^KiK=mVFHe zMwMPaN;1$zj5hX<7&!S*pN7qRPGT^~%=NOIVW$j2O{q>n^N{&D5`^JpLfUywkpBDU z52^`+GKEl-97oeE-`}U67$9a4FFv^MAw6MYN3os08K#Bzv&cACg{Q4=vg~}IhxRee zv!y)VHnGWnc}327zRBvhR*D;dWzmQjx9WW&Ew;58zTaGLIJW}0PxRRP^9`D|PCj%G z?PXi%C^?0f6|+~US4k-6&>cB zcPRB!D+j;xrX{LL(efc=;i-#NOqJAUMQ8BBfD=Wx*Xl}*g=f&^IMtXP&~1zswo^Z` zZZR+;nK|7r`ck`Cr*;|VLqVGc6t3pK)J9g0z$k_`_+4lxn7`Pep*TmTeHDN;P8qkF z=$_D!%Tn02Sm?wG*{%Tl(9+)tpohjzD^5Bwl*2(yxpC}8nQJLnQ57Tj@g!ccC>Z?J z6s5w;WBtXiG+dy>K3TB z>)TA+hAO)72TckN#|!6#Ei1D~8ciQ+XWf=EeD<>ra(XyEo3E_xRguCvUZ>hlm3aE- zHg{phZ!`Ni3fOWhP;=>B|x>!%tpXIrS(@C2K z7}{JXFpRWjp=Ey?kS{JDcsHl0dzKOABsAlMBj`n6X1RqgG|6Ylk?AeH$|57n(2pOw zta=lsB^5-aY0jQ8yq!w(il`{eBi3xeCC0E!e&y?CO382?v5sWjsCb{{<1&AJm?7Fz zB`EAQD3BqGRQPcJ+N||@_CSQv*rSv!muf7V0Gy2tVAn(Nm|Tgu2Mj~sUqea7MlzEC zasw43tzR%rgLA5PpMp)f$lMd>2}#GE!evPn&p2$r@9t!{6akSTng(zaN@$p zphAd+gu6n!dC+tU(x9bOJn0L$*?>Lzp$IM{9@1qoH)Z+ znjj~XUMP^|VSKrTR@6|p+Xsq`vVS%|kBBov>i(MF?$dLUQe3clvb`z{@#ReiiZrX~V9%8M{Oaekd?D}sBDXl&`+F$J zA-M9u&`inWM<;GHBM^XkQ`KyA2Df)ab|DLnLKasn>_-vZbr_-KTY19dL>oa+^;pU{x3`)&2_74I%0r7Oc44?4bf$AA3ig{kO2bad>p~NG3150mHpG6=W5Nsd4fgo^0xbm3=@!Wb?0%8GX`m4C* ztmSZ!op!Av`!TE0m%`gqB}>*1&qFfbYU4n>)&yFMNVkQo%U zrWh<6@b1ADBgs2N8Yl9p!@N5n%r>hS zng_yH24(xBciV4JH}BCQr`Em4rnW9@3j}MDr{k}qR#}60dC8pb-61JF($96)1iNBd z1bQ+B+1xi?`*%v8+G92ndw_@rxC|ScgM>o;W2=o5r#!8K**_jc?3OyHwnO7KfA(y0 zDs6a128Vo3Sb16=X*Mok#45pXR@h@Cqfkn9FHY*g(5Lq$z>=Ocs7?jov?ZhRBJ4IZ zYzPI3EhO#^jWh`1QfB?SmP~_K*cJfhhj%`dM*=DWt?OPGEA$<>EAJ|2Y65}Q(=B>y zagpecmR*rD`9(1@H}v6fg8NxZ;lwyM5yIBtMgHE??+N*=9Pet+YR%A=6{nd9f_`Cl zFuMP~;Ii%=0cDVH{1>J#7fZtCNd*_NE2+aCsDu#89>&`TCrEMRb$&jZTq@$xqu;0R zptYuN%wMr0n5M@Yk?4gRV{=%RRCUJ80$2@;ry4$qk50NItQ~bId0GONrJi|Mdg!;6 zlCO^Xs**)I+_OD0%(rsOL(*?E4c)-(o)>*3JJ33e1X#Kl1w{AHMNdJ45Fec@;G3in zNrp;EAragS&44l6qaJ=z2)B&vbKj$0t@6}&64)mV;BMrcJ^%16nrJW_G-H8Dy!3yv z;`1JLGNqf|=2OO{X11Vr$T45sS5HHh>%ddGNqaq{kF;THX1>}7r~Z)FXx<9cpTAV* z2~telvCXw}%3V=$+`_kGp-K6T;$w zPHAic)XOvxz<0pho;ICVAyEM@cnd;823%lF_N?MEb5*T{wv>!3MI zX9^f#K<54RTi+vyFm$EuTkYic=h$55Mu{x31v%d(}>CrN(E+4A7^a-Rh8%vL#k2S_j`iqolv zz+RadzRNcLpZ#Qa$ax5*=F8GVB^Xz#%6{02-Dgw19R=MmgeALsDzz_+GFjl?=xxmRp}g9^u!U~Hj|cn=4>CFd=hS^)jyR< zmlXPLe{$dYtnZy}Y8TMW4!J@&5O;(@)>NWeSjh6^kgM%JJZ(vT40XIDaQ=c zQ6>x>PPrXOFz^A$UQm)QY`b)Ym?9yVcfVN|zgtgh8upx@0DQ};=#lG-9E_K92dz*d zOio*~(NEtS8Y6^fc*le758bH8yFu9=h-I8wi2s0F>_d2z!ZD|{6H=nF*_4Tj=i4@z z5<7-Z<7HiiEFQJvE^?`UiWy3VARLW%>TF-1p9V07FHMKu_T!&)p061`;j~Y9{LDW) zT1T7R6YObM_)!g!egO8>*y!w<6wpkPN=WgX7f{8=VjhW6Z1g}eQ&d+}5Wnu;!1(O| z1bO@1cEwfop}mtfgnD(2#gXaX4BYzkLW;TC(i#8HI~2mJBolOp>~p4oVmrWbo#$w& zu^zm3e)#NXL!6PJ;dE^l14T^>N(doIpPSn~)K@LD8%S0IG`?!y4@Xq)!;L*tzsCFB z;qN{iE=4i@h$pdR(=oY}$D-R#6*M$tdNH2SnOl`mETPT1n;3nO04sZn_2eC1B^-fL zIL*(`zbw7?aGmn zyy$nwJAN_+_fPc`X!awd9FQYIU~`dGTflRq%t_k6ix?hyx9oN?$(%M*>2TV` zC!e9twNHq6b>IEt2v{hj#tm15g3af0Rz0vxZdxH~@ulE7~_g z$?;Fj0TCt2Z2tzNq`x2ukk0|lh+fOi!8r_g$cd+Iv=3c4hfqT3czk_7UorL7mG#G% zm;mb(MXT7N9+&?X+R7f4^sXH5t((MTb}V?*3DS~xY#~3~UWp<+RyWZOrFga4FNE(_ z>n*N(!G&(HOkx{pmi{dl#+$H#e{fQKM%r^hI&S+o*TYr#W&4b0FF$Cy!T+1PhwAFL zwmFihTFlb+7^&{rjn%@(=+9(41oF2u85cwboevDQe}RuehT zb*z$7shU1-h>hyAV9X#w>Hg!CHY)rIWR#Y!U~NM(pf_S>uiloA0q@bn zhh{2Laoc0jJOM1|e_7C$Tgs?1vnc%^c^IQs0V^d>A;C}Yu7^;ZCJHK{PlDs~X zm--9F+P}z0CPy%768qg`^P0f*aX%Dos=#mpFspyCRLkTW-_cGJmlYv`eM^sn%gg5; z&|yL+pZNlrBYR)dFHn+MO`VvdyAe7YKm6t+P3X(LnX4l?cA_sMWatK?6(FJhfy+;2@^ z1148byg5AyZ-Ggg$S}tt5$a?_uLO?bB-9Br>qNrT(RP?m4(1&gn&e2Yc}!0WF(uH! zyaK*X4_GmwfokMJ&P~#h7W%hS-rrSOqPa!Gzt@9pcXt9n`}rqd)~{S%mKCd4nWB+O(SH!d7 zxl9@0$DKXDAJNJPOH!zx+Qbs*)zqRr*}RPw6mweySlqg2Hh)@ni55R`z&lLIRUE;D zuG8`4^s+#5R-v7cMbe(X=hLuBIlm8zobJ1=;(1Ld-iFpv7c3|qi`AjpQo4@diGv<9 z?n50?6aWg2aWmjdNq*87lVu&D{$5ia++vAR4aq%i4qd5bhVx1cZ`bSj^s!bl@N%QS8$ZFE;)A>l2bv zvV{J*R3(b2l=&fVcj3f9T;{d(CNNbz*3sd$Tc61#VlA2>j2I^%<&mvz<*l|jNw7!A z%c<2sUYYik5K%zQoj}PA-aKp(Svz!JWE-T=@c|9mVNLZ2n8Wlgnbue{269+e=l1yM zgp6HIvP4v~A$!Rf_{Qiy9Kj2J66rbsrzM!7f>Sf!!*+kqEzR7eRV>bi>4qo=-g|fX zoPhQI(CQ6EdkUrlfOG?CUVV!~hWJCWy}ZX0hIC#4Bt2}?Fk}{U6ka^yU@az|{rmdB##k{!Oo%aPX!o z*caJ7Q^wi^RhK2KL_$-_s)Qr$7Iz_F75Mxyh4dM>^jgeA#qG7sR-T*TNFE>d=_T2D zuCK40XWN+_*ZpfapIN8xTxoFoV$cY*njcrP0{g^VR{gGz8D(i4J-@jqx32KraWN-| zy^VQGkFVpT8-q$dU*uJHe%NTh0L8nG=nxa|d)|l7E8VvP|Lvm@lV5(gXMK2RPk(-s z=NKsXYIc_sKZ%POCvPK9+xSHeaGke2=JZsU4LT+g}RR8Fn5+4$%AL z{QOjC5ET~J!3FYF-Mu_P<(y4|nQYImsD;$=>6h$t?$<+B|HX^)d3&T~bqAX*-k5?7 zHF?^=e-LR{ObfTQU>cNX#aw%6hYv^QxrEAp4G9>%(sIsfFY}CA z;fRW|njtG_e2B(h{KNPsUD=twX+W3?ALJkn0?;8cIy7I^`u7Dys_y02%{~^#mxIMU zG6p)kp-(oFsQ^U`w(!t{06_%r1}{w7mJFWHdVE~`JGx5PriG1=K7)ZHGJfBu zf?}Tl=ce4qwak-b$?_rsdd{}e7@&b@&rBSD-YJdg!8vBqs zyI`Z;BFLDW%p%5qHVDsjAKbpyXuUkbfAh);f*5Ft{Fy5VhC6)sh)NM4klvGv@;LA& zx&R?JdQ`%$K>%3q2+?K7#$Iio`_*E~uVZ=GUTnWUuZ{rZ;)78(M&hD9U)=8547}AJ z%m6lve}#)xANQrKGDzW~=)e6txWv;@xR?7R3@;mK($k5%Gc_@zWANm|D}Ok@>s0W~>!MOU9t=@qvwA*=KHjRHI5bHs>n5RQBZf^R@PP%xvbNxL3Xb znZ)t<$1Y39R4Bza=9L;;HToqK;9dOj!KPb+4fw7Z2$Rt3dk8M}&H_b)t&jRwi-&#L zvX?@AvhSbq37y5A!P7`-0&sOay9Jo3FtldGy?6qGR{BvlT%XKzL*owq8d{ zTfXk1?E9MJbZYE({osYW!$Tuf)~0>%fk#FWQL34n_bzq=61C{`I?pPJ6k|~J@sd-V zUmxS+7T;*+VoImNzwG%43;nuuekOGl$J^q*$9v*AupQZjs?Q%0_5!)H3n<9pxsjNoKKeU`8v5Om&TI^iyX{k*bVe=3+A+^w3{vz$VodlU(Fb-$>T z001BzgWM9H{SgTj{q3Rjr(PZhs6gQ@VA;-u`D}_O=do_`DYP*G`t7gcHJ!VwOEX7B zJ?05rcQ;^=Un8{d-V%SO|6IbnUdds}L)cZ+xh(I)`{LdjNA5v1F^7}~L|m|SafM#l z0ZhlL*Kp6F>)iG?&DoP<`7%@-L>)siH_kEh?svs_c@sZcLAhtg`0l%@xKy|7x9R8K zEt&Ypzka!~1KO3P$;>m44XQv&0bVxt`@fdi@+a_OAILnu@JZ=~PxhoEr7mDJ^~xWX z4dfisRYVUfu3FFoXB>hoFxI~X=lZ2p2fEE$*<)&|P(iTVo21fds%YT{lI{Ym)f@z0=&@dzW&%cyRKKk&)rB**Q;!^PV&9rYu#J>)s zP2W6&njRV4As_1*U#oAx3Hig*-LL)ANTb-o-e;<+!x`IZaL{qfr1P}HDU z?Eb!C$p6j?p)4pI;I8zG|=F`6|Ds~W3*?c;wkHu{9PdSU|% z4;cib@3OKn;X1kZH>`l+^s4zGb1Dzxbcga#N!;2 zLW}!;x@#H@HVNF^O+B$1W2D?Y>Hzf%11={5Ldr>jv%`KRt(bIGLm3C6!mihbRu_z> zy`zju%6OWzeX86bjDNpe!EtzR?BRF*TUASK5zoEGe@Owrzmov=@DKczlN^d6-V>M; zMB^NYp6xdWu+xWo+{otobNq9%x-nqA++KU+rsI_7M(Oqz9B~Kq9OR2YQ*J#ss4MY0 z;GT$$Zc(xnIE71jSa6}s;0;9g=lV8~zc=6xZy<40GDho&ulf|O!dbbm3*z-9B=<0i z!M!jy@yjZaqm#SAh7;219IUgM01P2 zKgH9$-z3x$t>Tm97x*KPSqc0KYpB*~IyVm*ErEbDJensIdOE&#Bn5@IuBI!y^gg1x z{FjJYY1aGc3uH4SYqH{kM_pLve?>)C)2P{t2P0O(T=r%-;y0 zun8RK^UoxoJC%@+gfGEsc4yO9zh<#u>dqhFG_s!rEMe}icr`y^% z5M{srIh;3Le9Z;z$3STgyn{CXoDWX>evX)XZC25E7nSB=H$FeqZy_-tCTNA=(M7Np z<2?d!siy2*l268j{jDZM>%hzB({09a-9Qm#4iXrb3SW)T=v#yG;XcxQeNXgmVU@rt zd*u$V7Z=augas1yD|PK!--xh*SNRbnW2hRRpKu5!f{ur?qd~w)?*MfifL5mNy+F)O zdgy|67VJOMiCQ|m0CNCB#0la~tj-SE%XpWCa3n1$C z;C*$F^HILS#XC~R1ASh*yLS(`J;*|Fo<0Ou=sdDfLl68BhV4BbUmfW6zZj zQ&?{B_G6JF1f$4EH�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

    6u5?C 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

    C`_dkCq@RvW1S)Kb>F4R_!!q?aEnQ(QO)fw zj^g2dK+kL6B?!QF6!?q?`bb}0==MEY=B8oD(YB#BGS%a;pO1c#)>#HYE1RGAHqY{J zHF?3Kj>q?{QbJQSS#f=e+!u5jtozX3)hAxf$%4u##*!4X)K9VR_5=-F+5C@5 z#X_XN-{Fw1i4YWv8@F9WntlB(80E|l&sK*my?UhbDZ#{!h7BOz{hgIR80!D=Q(*jx zD3DcYMs_8I_qb7=yObkb=j;Y`)mTx%xf8ptqBW9eHAltLBf@X2ofT+NuRTM_4Yg7J z&Q>lB!l{{tB()LB-L=Jdo;mZW70H#zwTmLf96oND5x7_ilCUyL ziiEEx%Cf0vU7>t+?rXyfyD3c)PK;A;z6sIn@#e9x97jXG6DOB{Ul z8)1AlC|9Np%2%8*&HW+uAw3VCRGHM`*q@}Uw>Q%2V=+WFQ=d{(4Kxp|113}to*Lbn zDK#DvHLsK}i_PtxzP-Azp;(KL1%8g!7j$uDX47_!#59f@GMv$%32J1e0s0wMWFFc) zDX7@=Ga|y9=%+#jiJHkTO@BAqs?0(B&oz1?y6l`o)La7&d^QaH457oGJ z)?wCA?shYnP=kfKpFWRwx7=_(CUh_#7(OERMV{s)ng(q1M(PT|IG_+v(#6CqO3IQh zTocP<5ENA4>d+mXdmVfBe%K|1slVCX z#LFndwN@OVQSrx(sKZ=(+52%y`?(s%OKFqYn^X0}aw9v*goc4HCknKWQTyus{U1;p z8PH^s{ZM?2u2$Z`o)wdXLysi?IOxVCOI$$-e~3B*eb$=PtNDhQ{zG}RxS7Xt^)fmk zVSFs%imhM*nBa9XOk+u>ZQ?`Zzt(VifhGpXdJ`t5cTdW1iO%-@x~BO{FgJ}Eou8@9 zY=lUP0j`XzYt7iV*CvYaRiR%Qf4t~hUOj!>M_!_X_tdnEy!oeut3~Q{d;b)>PU37^wdZxW^!NC z;kVf`AIs=|N~2&<+DkInPDXu%Hin7NP}}im$6-}Tf825*2s62)@4Ok;Wi&@iyW1(W zY3bLvQm|DeeZe%-y;Tv*&x?@S;WsN@n+8QscQK)FU3JekE}!InOOL0Xk1hMq!1CQ_ zuXRbCI)#m>ASt44{es+LX=88tSS64p1VR*Q-_9l&_Fdexezzt66zD3*`OCJE3UBx1 zoD>}}KdEW8Le#rGx=!Phl{Y?_MPP~2MdoCk`Sfkix^nnGF2M9#k?2>+AFG?ApEV?T zbN#ft$@m60bCa^8p@fHce9Kti-qx9Er1kn5Kocd@s~`$V(uz1yUZ@Ye)8x}EEarIbe9 zPDwVs$To$VZJK?T&ZLCgh7)Pt(O5!?iUx0cCYc~+tsb;qy>Q?K$| zpZfJ66HBLamevA-Y8ESj^6GqId6SMjzLq1so`GvaPw z1Pe8c=Kt>Ldi_y$MGlon5bw&8z~>ZYc8WiQX1NIK=fX5EtGHx+0WFpL#wUK4>bFbS zX5oy>h;Od!FJ>;@UG1%aC|Y5CSj43G_LN~lg&m3=A||o7->Fq|&>cLWC|j;+DL7fu zSuSr@y|xoj`uN-vNwbEV|!0Qvdof(-W=9<6sO;!g-v0p43SNY2MvS4`zY} z0oP866UeWXtnr=4S?=Xw-(1&)ZqF;?f2lfO?k+dG&dJlPd|@4GH_ zPJWS)puJYmHAhU1;ER+d|0t)T!m!f|tefE4w$S<*dqA`C}rds@4 zJSN~TbMdFWwZ9f1p*&2cOPbd| z(hl9%$C#sf)4Uvwt?&RZDA6hZna@y{*U5kpfI>s_mu3U1K4geztRRt)2;OW)mGE3zwn zGGBjkL(1|cELws!+-mdzg0*Kx**#E$T1s*Ha(;_7A@1uR_;lc#xnN;dX{(4Y?@c zVRN0n?(3thhjo(djGTOFnk9W2IXcf(Y<4L;))X@bJaTMKL$zLXDKQ6c>wBCZo*|x) z{!0{)VaZAhhauLTTX4X`2ZayKg0`XS1F9PwS7QcazbEmoj*6N&B1qN0Ds|1(@=|HD zxD_)f7Hcq)=#6kJP45r>&Q196sek=?$WP_hg?Qq4L821lpV6|D2+q2>V*3I=A^w_q z)#r%gZiYFc5yjuziN1cn6yhuT*{z;q<}Zj)vEKyAjez@gPqsqmw==G4na91rRRF< zu`JWCOljFII`(|23bYi_Pz&|EnC$3ZDFHPMHSkBZc{{6z;|5!&C6jM0dX*$CdPlYF zFDmB_KVj3Sc#bSY622<_O!iARkR;evWLKK!lyp2gH+*8wxz^G)F7Vgcd($#TJPrP+ z1??XwGbt)sm8`6;*Hz=50A)?Bwpw3>hedPX6U6{mMpN!?MDZ_6nR7tM!5w61=47C! zmwLxv(3*!#>Bs%nM$W+1k|rhTS5N_if15fdd)AB__E3eEo?z}yr1)|4W6qgJ%qiDb zE`kg{bS!_Cmk>WqtvA%yZof=fc$zinmt*p zWZE{JOqj&Ah3I9?e=<_pk6o`nrCdz|Mk;ISJjwB|f!iDf4#^4@d?wMNKe@98ID~ne zId{LkW(szqP=QB}%EW_}=_?0}eGk_OOpZo9@8!I&M~RIkJ?!4P+2nRy#UbLyvVJ@3 z>2{K!L-oC-OruQY&8G^jaF^Yg*bX*c7okemqE8_q&Wa^`3Nhn$yJUsVrifHJMl?0K zd(J_Sj`ECew}B%yEi7F^Vh#H*UGi5n1U%Z;AMi=j&e}>0`izC^7$v_;rlm>e@f~sS zefOB&8LKu(NcNoe4_?cuvht7;lrpfR1U8nl@oa(9g5e-XrlTYNrS3CrIkGXkglpRk z>l=z~@`y2&cPr1VtWJ5zKscpYW)~jv84($I(RRvs zxsZJ0xqj#)D__^D;RoGxWXJMK_`Ym`;~D&8ozUVB)o$fcGHUp`7-YBW#Uqyf^Qu`5 z(c1U6I^*Li1zhKrou)n^SrWH}!`MnA+Uw_K^VtUO?uf6Sw>DCyd`pg~A&`g(fB$Bm zkT8>M|6t#8a$T>S@#`0;?iiC(X_Y-rBa2cA6TLJArg399%mynov z7!Yb@EG;c%!zMv_wp^Qyz~!MRpf-^5JIvu;!RnTrjhFkc`_EuCKOXBba-&zh36Hoz zUuZ#4dW~@D-#B^(Xr61+_61J)#@cWDy1So+rM_QIY(3wZtOx{6F~k8~;4>&Ug#-s@ z01C*k@X0Sp(0iZBX>Dk!^x8?yW-gO6@Y1A{E1VU|zU_V%7D`)bj z3je6OTMSqn*~b+ieQPyVI1>#XwWcdqFp_QfKE=CV;+q4oS1$zW7~vX&SI>OWcqX}V0qJiMrHGgZR6i3xJp z`Otc?W;%F~?{sM9Ntq@S)e&fZF2Xj}`c(7DhnCOy@AtcYo2J#iN)r)~K>NZ-F>StZ zTQKq=r3Z%@ict%}-xEaa2;Kd3K5!q8^C*SazIm=!Id;G@D6*m=PzC;z(~-qrP`nnvQ<#D*HFV}{1{B> zx=O>KsrROffyH@c(gSKrXm@va5FHD6F-S5vNc>Q- zhZeg&2Dib5Pkh_&W?gG1voCbK21L+wK!Q*MJ;{UtFBdfXmW>cTPN+!@K%{&NO5TU- z1tml0M;mKE&!u``GhR$lHqi2Rej_?Mn&8QD)4}Ao*K}8BD{0(s7UgP|ldSn4e*v5Q zCD65Q>c9JawhK-3YKRE(k1@3xDqQ+yEh};`MzV4^(Ldm*LOD6bG}K{V|AKN9ho09z z%uf5O3(tEtX3w04^AmFyt<@Ndt{j7U!GQ6Upf_(1EVrh}SyV^_%*&d!h}GqZTt%Fo zPSjp>!y~?FO+~vq4!y;Y&_}+D^3#6POt>qD`5`@i{MZx_U@ST#X{?-CH4D>A8qO62 z`hD8N-9YEmJirG2(eeXKVR7;f*kAD{^MW72yM&VQ5cy~30IgfZrs~(tly!*)EvzG} zWmhyqOlqn!V774e0WQ1137}Z1Gvf#yBNOYT4?W^<@kzN9y*`x`IDjuRI$9r9Fg2v{ z290VtC_PW--;~V*I{NdLcJRWEU^+_vEx(oVa=70%S2?%XK z1CFonI4HejjM#q$c=QaP`m)xE%mmd5(8W%}``YAIjVl4IP+7E@DtM0eVy`W(_`Y4N`x}{_vx-^d` zStjEWAKg-prUNR@I^|2cOj(Xy>w_6TcJ<-nN`3hN+~87k6wAm4Pqv_^um8 z)vJKyr18`38~emIa2awQ7sndLZJ+~1&oKK$^UCw^u&{d!HV)4bb8Jgbnnxp;nX-iA;_jmmT7htV4?Z#wYbpWabdAJQKrC+Haa0Pt~dAI1JKSEooh9`3|LD( ztu%k`fOY;s!ZA1H{bUJ*5{`gd6+l1+qaeTGCx5Q3EywrE!4Hok9B*<_4&1*fxH}^Z?xxs>z`Cwe0*$n_(!Gh z`^_?0N`Is1_})||He|BQc4Jk2y0Yv3#VJ<>0`bc7;?NW%l`cH)-bpHYNm}5uXvcNa zKWHJlq_RAV%kMi|X#Ma=wK@1l0MOxZYL8W38YA{)Lyvg)fmT>}#y$LM$l0%?-aWS*>Bq zu83|y631`UJ5XYZ7P$Pcawg=rCs`!Y_4x*87c;gVb@VXSspTbjc~l-~;LGCbV~w}C zv^4ld{$mg(b$fgJ5NPtCF#}2)yt{MBytot;Maq?Pt0)m2na@~Zh@I8o=Kw(u-vF%Q z71h{@rk_9s6_q~VPsFC55DST+6418m~0XbACQTt3&&bR;ZY>N1Ch}4K9mM% z8#GTnC%SlJ{Q&e+(oU6WHtzCA$A3jz>72y0y+l3ZLd& zF~EyvG>OZbnyPU5J$yGrN;AEtEORuNc^!P@l#kE|f)hi18de2z7bP;W#xd-0ITe^4`>-M5Ir3cFwY0eJV5lnIx15W#^ z4J+4zjg-mxIE56e-Ro+mLEdw!YC&j0IPQz49Fu}oUlteXo!C|eleYH;@<-n<9`7ay zM)3%kp3t?SczMy**zdxxgeJbmYH09?{!*o#{3bSp<$Y zNXR7YZ_-8WK!Cu;3#Yn;n;U9LQ0J;NEF*e+?z^KLYR~dwT_DDG>v^i++($&V%K6Y0 zDACp#7yDQ6KERqo$|tY-eqE#x|30nz)7X=PB~ZE&G5Gp}@~5%0Bver}DW+1%?Ravz zlW$!QrZ_UIjGI4;89&2gU}TJLTUXS7P~x4wQAs1KwIF>F$EKw%H!i&H_Rh26ywDM1 zU4Fxj&ftXeem@2-I@vTU=9oR!_DDjt=jYEX2pPXw%gcfc38PN2aYW z(%Lq2+!(rVie1?+uq*6Xe$~APoClxCu&LU_hj@26Jb3`z50qb&x8~%<>hn?FX3i0Z z<1tD8>w4(iA3?e*W+x4sxg&E^({?vfCyQzEZA0v|@}g!Z9LN2|opQnWOKW6Y5($eo z=)4j^QkShu{h&nTck9`*c%6?gfT$MfeW%r)>gQ2~a9otE5X`#s0`=TPX{t|QZHvc2X2B}1c zB=-1!>EOr%AIpjc+sbP0n$hpZ@xlL3RbL(t<@dgCtzpPmn=CODM&3e9M2KOcEQ6%7 zD@BqmA#0(LkS#?jgh|3UgN0J*PdkSOH=gzxdm)gJoN1Lo-C`XJ>6jDOCa+pZm zNyzC}i>+oy6if2Fd49U+{;4~hq}o>tn9oF5}vlphqX+Fff!Br_jofu=X!QhPk;K9Nh%)=6yLTZAq{Fu z4t4y&pE55kio6FBkPnFs4e6p5IYr0(W&_D@M&>_!er7-ESvr6H>}CNNQbP*4;*yVY z`f#SpY15dqp0UHzF7ZmUk~HLfO#V8zR=8qu>}1+K3TLAa8nYuu!Y&JIh9g|VtUuk5h&JaKncgOZ=F zf4w%GUr|7%tEf?{85TWAPbN);3NMG^w zp`#y>B>v^qEITKeKQ(ib5baw29U-&74i}923>~N!rURLth<)Sz@M65|omAeYTys~a z*19Wq#BujGQ>%Q;`(Kn^C|F*es~jF4I({gg_Xe}Ow(jb zQ7vb(!$Up&Cr*XW%s%za@DvLQxDfRUr53M0?u#6G-%O5v*CK@DM;e*YZ*R#}>XuY- zyNlTR5%#I`BL?8ryC;<9LqNDR0;ELII9c!2uiX|`b!M}&xaK=7$3cQIg*UTD2xlCR zUipJ|(4;01hqA5o{_J&U8;%Ef{J2=fXHV8hf`b4!T$(%{+YXmQ44ie{&%*QmVGSI@ z)y%{F$jtD5CSuTc+rd}?fQg20=l&0W(^6_ryBU5snBUIiq038_Q1=wvnun(*^LB`n=?`=faz|$9FB3dfb-CJmC3bJp(H8 zIA;j*cVi5-*oj#7GP8KSEC72<-UvIeJ?J0Qve$y`6X_Fwo(h^kX(nTm1H$ao)f7Hd z7wVf|`G`6d zLRAcoxE??8~x^lZ5Z}G}qn)wYu^(h}oTl`!C^%4?kZ+phw z`_K(84qb~1!rqCb#bBju)lBP1YqW)K>n;?LQ@C3sC|3vjQJo}ut;~bICdBzV-}?4q z{g8!exaM_T`Y?4G5V~q2!o!{ekJN1FH}}TWSKrKmVekk`I2W5S5ehC8_4v3&No z;D!7((Q)-9YUm86Mg+NA%ICR+lKYdf>=1Gai8PW8KD zDW=#_v#?s(j){e)dxkiX6tr-{uxs%Kj3_28_E6U`PW2ijW@FU-$i?*Z^aNK|*FH=N zmoTMW?!PAKyOEI`T~E8FJR*DO#KpxeWcEMb{OE{Vl4D8r70R!)D=?P~dLW$kHQl~j3p;8M;Rx$76@)ShB?(NT zF*UY&8S@89dpCmo*XBvz_2L`jxS7j(o!*6!v~tmyAO(Z7XT4j`Tudsw2=VsS<5(qT zOy|!d@s09zb_HeogV1{T10U?>2SAxoPWZ>i4jpU}eBg_~WGb!qwMCbkc}xz{-%Ymaw;0r#_qn9 zAo|u~dRR2ZKEfI;2_Q|3RIA(-6ni17G_39m(s#ac)gY94Fe+!(7gc#q&M=+8+2V#j zKgU+F#2&T_BciXaD-3yChnrEk$UF>(u{G!RV!fuqnyw6?x6nfofdRcv)5q}0)RdHN z-_7+UMgaaLef5M}L@ob1O+&-Qq>VpjTn_1qytK45zF^d8PGU-Ieq7^dLI<=j*1?FL0#0cV z>ab#x9uH^4CBMY^uTIw|fT=gf5%$83wAfp~EpQ+BCC3dZ@^%GY+T`M_b45SJN_#DA z&~@$5UTtYz)MFWK`14|N^`P^wSi|f&@3JeBJSR#6ItQE;?w`P(2D8zyQMUGe)HO*! zPKM{+@-1k-yzr!YoKu@mY5h4$nJpV~G>rJ$Rhb)#0JOV<`WFYj2YZX!lby>6XSaz8*Nh$#=wK63xxYS)hZ+izo5$h0L}<67Kq{fNvNqH<$C5VASS4 z!*U)66+?>K3l!f<&y+{De??VjU*YA`en*;HI3y+b?-_2OX|O?;*txl{`Pti#A2p;r zpz;^1rsUhfeC$hUd=@Ln-XaE%L*k9a$p$(mf>!PWL*cZy#;vashlhqtc80RDakQ8l zQu@1a1QM!cOe%gN&x*F%uE5tx_Tl4s@3Nj?)YVe6>=O~P@p}y^+Hk4UE5++hxWv*d z^HPtDk9NcNHhW=v?MeOyL~SLb9;N1E>$Y0B#Hka)36J993O`@HT+}f!b(ZKTl#-#q z@eBlrS#?EQ?cy72Tf_qw(d@m|jq~pe+AjtRe<}VrxUgef_y13ImWdM;{X-@Qyxdj=*7hpCaryO(xMl+~P>GONRqUKK25*ZUeHt4Zy8&9=^GEn2B9x-?CPh zg@=!SSAAiKHH%ORKc>bbzHysp?W382n z4{N=kKsoQFc6_F12oZr)$K#&C8nyf7VR}Yg<#SpR^B3<O!3F6>; z7Q2a%7sQUT8d5@FUnRr#C#mC6Y|`UqI$+)u4lb_Vj=y}Q=95d_Lf8Vk%cgp=9Mr_6Ra!) z4w4)G&CQZ`x6A?TLKL4f8x>2Uc2vlK==kP)N*Ey6bvFJ>8xbp?d{*8l&j>5rZb%tR zi}gxKcX?G!15QU>eLdR&35gXooh~iJY({K89+CHT+eOX##+|kw2 z*jse9e+r;Noa&*hGBPqf8XxPOiri!xywpjSp`r3^u8DOJi94y~WdP?~20oyiD`TsLp#j0<3q#}qH@ z2Y@*8xJh>vJ0DB6Dayg=5wkj8Qi}Y3N5mJn{;C0jC?4djja_~C@mpUdUBo-P>QGdd z^C!Sbs74RwipLvN&}R^jV+GfM0)wKTiU!ekQ|yJK%HdTF!PaNwZrpo6%Nu3Hp~w*B zCdr<+Jco!%)q9dnWb>=BxwGxvvIEipLuX*kv32YY)QEio$L~9cJWaD!qhCWpNw=`j z=61CU9PhftcDLRkzBdCM(UnSjOriYkv;4P3_%?L$JF5iTDgtPk%vfSc6cQ;_Hv!eM z7rP&6Vu!)U1S5Bc2<&11`9{8LdZty}L=08SpSSnPd-0F>{kkOYw(*6weSDpC+W=iv zs+0Sqtm-7ylYXkTrF@+QG_-pu6Be>Cux>MKLxS=p$prksrI`MR}j z?^aj?LXPuqswDnJ1^xI6!QR|NQp&CLisu>`Z42ZbkEf&HF*#iGQ#5*GA$QQ^3D1lDhk#JGjI8<$tdfVPYUcFy@dnV{%as$0j z!hnzVDWCiYD*#LrTs{bWFwN(=N}B`X<;Z)`OIMO8u~v>+ff*q!bd6^ z#(`EgWE;6dQh-me6YkP(PXP5*$cL_-8w|Rv&%}2ox_W{df_8Io88zg9Qm{u1+^*Fw zXg3xA_l>?(;E&4W=LRJLASb8$Y)6G4AVl$Ho?u!3v*Ofi-emZZ+BpM~0G~nRZ@m4q zWm=C@X?R_vpgu6)yd>&W+A{D#m8z}aqW%gH9=teeaRGOW^}@xAMki0Q6vAoJy?DUF zz#P}CJkJ7U;ZUmH9ndaBlHTRK{O?SDPbFLs_Z1XuDLAyr<-=rH{A1(kT^q(FqMyo2k3Z&CE^$)s&Jiuy38xoqf}P zyVLnA!W#B5FLfU$WYwwvyQ?4cfj{oBO2wZjUtjEL%RF^}($GNEucWtx0tyfoUCto_ zAp`c%p%|Wn7AIR;TDZ8mH9^NQ{p(jVYD3X?(DM`Xh`qf_AhTR`;$?w)%8<&MyDxab zHEF^M-qz5TW_;#+HSk+ksWgXdF%D7fW)bU|;#JdR*%TQH2wEd3mEztl+~KPuQHB46yVXjdLFkKWtJm zRXM+__O{m?e@t}rB>*6}!{|OkBUz4V-2MBXfrCI3qL-g&?haI&jhL{YK7QK6>oF9k`3s@*Y$W<-Z3ty~ z=53eum<*L-AKI9>l6)7tfV@De)&UX+4g%&S?#aNwVH9rkFe|fWhaTggdn{B?%|rJ< zGSK0!RbJp&)lK@a-OB!b`aJhMANyRnaHA%r3M%^gA4tfA$Oui zWo#(XH{Hivn}6zs$&BDk0W&^!3G+vgi~+5@{W((Al)UN3nkn9D`erZ4aM zG?qhUNbHn{VudN z5J0E2Pz7v+_dwY`brCdFjb9U#i$G(s6^P?9438=#Sa;=L_|fMH1RSyATwf(@yHW{k z%WQ@7sWhnpYGq;pf;hWIS*>+t_+_G8aTgvn1jI&S~ZaKDjHX;QSO? z?=oiJZLGZDod-a{sTMj(5)`+v?8+B;v^$A8jx4(t#xgd(0v$IeH&bPVpPJ)<@lHRT zW_2Bf|AcUN`3`3rs#Hd?N}l!kJsMAt9+H>Qh;SO<3Z|Hz-j9>^kB|mnbENVd0%l`M zIxn!J5Huq8^UnCW_CreLei&=q6nhve|5QFO-vo;a;hYng!dPK<(-cumg~Np(DItB~ zGD&np>IknCfO04Tt9AVh2r0PKLze;rCzrE5W(Q~=E7mnYTW79|sm>&8H7N;Ja3 z$|Xo(6^OpHd?$gMVfOrLrA@W}=4!vrl~en1Kzymwe#7cm@Ps~9;^vNvP=4S9(YXxy zy4r>vsmyOKbLo?iO=Xagh{SNcy0$pXSbax9mZ)w5xs5L(VHuu6jr_Y|VYfC7BK<9_ zeh3*PGR#z`;OuQB|L&5lYQ!Lk)vO~RiI|;QVb47&>6WbFw+?Eb2J9&Qu8QDYU9)x> za>m1AKg>|k6AaMtOSTE;53SH&IKx2p{Ix$r+4;R{hMn^pRm;XI`Y>kxvI;1EO6_(X zkz>ftGw4E3TDi&5M;6~$a*C^~jF8C)hG$1D@c3(@iAlP}#nQOK06@J-s?S$RWau$Jwu(_$V~RZ^-OP8Poq)$lYecvro)Mj|?2PyZHQSf(IigtQ z*VxeC)CL&9dl_WtGm~Wf>l%T3FVuC8Kp%LPTA#nKW{XBC(89s4K#OBP@$X1b@M3Cv z)j0!ToKMgR9YI6UZ~2Y>xbo#kxA%{3pUl!Hf83FQ5x}Vqj`ZGm$^Z8Yw%xC-S7CK< zH}Sbu|9qRjJ#y5V^;>W#AHBU18Mj>$_|s3Y{RuTZjEICVK{IZJ1pkJ$WjkZ2eTy;I lr}JF@x61!MK|%y>?rbXR(n6H9p^}ssV=ppx${72;?_(R;#*$^)i_jv4P>D)ek}Fv&QCUMs zmP+<53^KO=d1gVkZufTo-|zSLU3BlOW}fFf=X}m*d4HDkdFHH!y7FqqO^nNyEnBUs zqM)^G8B@=)Wi*rYE5H@y?6@=F9~uuWWw~Xkm0Q3agAh+e15XzpJB+jKG9F=h@+Tey z+yU$1$s?@5gFslixe3@{EbZMbT|5L_Z9TyyaNh-MgR#Td+K|T};0Td@aIt+ta2>c9 zkFYFU82lw9EC3f3F(Qw*w6}GoOo+nzVVs>Uc@RpX0&pWa@BZpOVP-;8~dGOg8<75l|QMR>q!a|S8 zJGf(Az!fDS1VR7~{Rb{;TiRK=V-`&T?ZMmD-2;PlrEEb&Ktw=Dm`ts$r=>mlvaXVW zsOUahNl8^}F~7sU>SEqe| zl8Lu>r>;a<7`mX1@uO~$v>^oC-V0-6>p^*%{G=xq>+Fef`}U$W*45S4nxY4k87ABm4(D4$#+~V zse>sy@o=!T!Q#lzeJi-fuOHg%ATkG!oj#BM4dDeC}L{Pkz&x#2!< zO#eUA0evNzfu*w-Rq@C=?CDF@VZaWOmSbE<5|9HXubhaLzK@r+pPPu4 zva^?^9~@(;q6N2BzPNHaSN%A;fReM`yArC88l%%SQ z1KdVMR!q%T5Cgq7Jv!_i@(1h&o!S zpgd6qo{oTCoSK20gN?Gin2o_9kHhlnq-)m7N^nbgCviJ%%2-!V7fXE~544M@x0Q?T z!gUPJ%Mjt?r>3JWZY`|kYlZN1Rx_}1Gg8sQq8;UMwhEq-YA)&?*1m8*TZECDl`>9D z)lbzArElnq0{1lJCH-tvoIQ+mL?pmGZq`a9TI?p7~(I9247W- z1jGq>NzyKLp-<<$GkSw6j z_L8a?5g|YaSVhUt8t4O=M<|S%AJ_+pw{lJz+J`(*ItSQL;PT3Z%a7s^XrN7WvsErLT~WFaa0 zswyaYp%lP1U(y&Kl#V^%sNwhD{R|;agJ)&^)G?6cWPQMV2p}PQlsx$w$$I^)$>Zj& z7zL!O3C1e=ptVKd>KIvHu&yX+EQzk~G@80gc}Z6dN1V42&@VM%fJuHLkVg@g1OCs` z65~n=2OvzN05AYmTZ%XS0mPFo{oKzicpGI~5d3($`vQ+cnNdtqnBpWT?tPz#hy>*d zZoyd!iAabGP`tjwB3~&Ar;N3v_-On26(HyFSNs?lLve#Y-vtzY{?1!cA`|Z=7X`Vp zB^R~iqLy3~2yZB^d&xy9{8zXr2@we~s_*#^bW$RJo=4fb+Q>qAE(il$v92K7l5_9` zDT}ZIRQVufN~BT>6cc!Ox?`PesfiO0LKqHLQj&wlk?&9wT;O|!XG>3v_qX}~kAjh(2N&cJX(3S3z+yl_YCcMm6cvXH2nk8f z{~<3vuZ=Z+cW?)J8xe`8f)P`Cnt z*nEWebAC}qlj5;I8~I(>Mq$){YuNUaih`po4h3b=F4iFPG;%XCu#vYC1{o-n%gD>Z z(ekpsP{Iw(86#i10h!$po~OW&&3*K zC7?<|s!r%qsssiIXGbvq;tbo@RtJs&`I0YMUe(^(721O#$Z+j3s>%+|mijhW8z{?n zlwF*C!_}b>6+HLz%v+J1d6V7uUt34VaPc~RD9Soeen_b>kh6Vdbq_-Wbw7~JldCG) zs@{O7H9SHS|*><)@$m@z-er z&&i5fDQJTEG`-L|TF^QmUtL6xqo%ML>An-lRc)|9J|c#Gie6|1YY&t>w63)upwm|! zg9FtUU0?8dfgT+wU;aaSJS_D^ok8Wq7gSMvz`P{Bq8uR^lPW4c&~>!Dh@U#p2U`V2 zpbx4)sH%`<3sv5XwB7Sjb}MXKmPH2R|CMG#~? zfM`(!av|M==$yazU9Ev!aZ&~r;-U*QRdw-`(5!x7R+5F<>OiwXH5yf@h6K$zfA0@w zrDXk3bx?zJd_cZ#&(Iyg`-*Alf-)+N_^seaB? zRoNM;y6TWA)3dYGSN8_hcgPp|8tJRURaFj&LRJTGSOo0Y*B0_Oz9J%!KeANTb2CCX zz`=b8$03f)SDwih3o5`1zTrpJXHc0YRi9PJHEyU@Z>6IMRs$)O0;pH(7-3P45VGqz zLN!g`F-T~SR-o(X9cT=A4x(Ps9`Znb z>IhKt$A}=%ppL8tYQX@(q3=MxaDZ~4-b}h?g8<2{m%1bH1oCizn1-U{`9aNCp5%cR zkF^9`_+5?rdrwQ{Alajn==#>9LtX+zB#Ub56g(txA5>!@^ar1HKvnhoIxm&0-y$ra z(us5uK=vo#EJVeL;!oy%30U*T)GziW-{3zf27pi+str3)QQ8;s34egl%Ia>`;Oqf- zCX$yU&8DmlX_+XrI%!{|2`0uiue<}1+4s3sxIDDHe;~X%aw%Tr%r2G^I z&bNV!U6fjbz6R$-skD-ktSqQ!Q&Z_bzC%s2p`02EX2*C!`~_+1zsP|Li+tz6#VNd5 zBuE6+O)r)q;{UW@4-BWI#ZnIGig|3foBkdOU~JckGz zAplChzl#ar-#d?g%hZq3mi06L|DW8Fw3PahN}Nln-%{!a65XZLkJLZ|BK`0FhgxCg z4{GKQsU#2x=%DW>sh`k)Zt6!ZS^fm{$puNho~*9)NeAzw1@_Ur}>$aiB}zsX0QF zQq-UxhWz8t{r|ds{cX*rc0K^nT0-5S)Xlg-eGndygnxd@|6?EZyDkcG36UQ%kYclc z-YohTSCRY^H2SrLNUaWJzWfy){0sXigeZ{vGoQGG5tLHtzot=09PwinrzF@^v--zl z1Ze02h5he+u*7$LN&n^;0ku+nw~u*{{Wa62qMD1(?~w>D`X}7_wT1qTG2$=u$p3Qa zu;^rDK2G>S`{DmgVDNus^nWoT`P&x%uk>Yqp-q-r+p}}F^`XR|i^E=PXG;$cj5Ua6 z7aj3^dmachof`In#z|7pOnF^Z2reKDwZu}-&q%j_cRolyGzEkHR}@=91pa;JH8>ic z2k3vEKa&s<`)f=8M=1AS=y?6d1Zt#{gztL9m6YIcF?q7S|4}lxU_I2XaZ*+ZI>;9l zJHWSvS_kw6%Cn*TkyI7=8zmA_K1m@7TJH}mYjKY`g_mTxgXO^^lnm^@uCO9Le}uoN zo9`e_q%rDK0KHU#$G;+J8IT{8!d9{z9wkKPKe^ucA4ax)H7!Lft z3-nW}p$r_(%a(C113$8-<73v};&R_q-Oi^SNYYy@(_6iyev-zdrBB~uy!@{(M4dlj2Mza37?-I0 zudDb8!h>ID3s?1p;D|uwh-mI#*Ecz0J(cWVptf5DsZzK@rQ+8O5tyOVFDyjW=Or`z zW2P;c;g2!lKgkSPPZQ?)(Q_gN(;cN}S*Tk7t$E?^(zzPsa0kw^2U_;_nN-IW$sFxD zJlqvD-Zikg`3%FiqbV?wz=&^~3!mc_b7|6fVPLnlxR`qeH#?G6yko75l#@*Ajvqn> zo`xxJq9JHs;1n(hR|I>0jVNCl_9Crd)b#na^lR&WNFOp87Bq3PF#LgWws(_VPss_w z;gG)YAA-wrHs%^m^*1L8r?s7gd45Czat(mcE%%ys{^;g1d@Jx-6RC+#>MANh5?Nx} zKlELnfxoD_aS!#wo6OzU0cH*zdeV8~#1a|*gWTAtqY|{QsOlg=W4iP7!Pw{eF+X#{5RP|HonN6G{Xn+dB{ z#r@C_e!L__=XJJoC7P>puR8wAk2bM0*I)}z+5OOX{(x?>O-Itx_vmZUKmVbH|BMd& zINb@t`?MPzKSZHFc3#L}Bo7GBBH5n7e~jWkc{CvafW)|y!-}7>@kaz{oCU_ua}vJl z$Jp?b-8-0r$Y*9#G|f-h_#=Xr#Q7%zUJ~b@+3S*Z{)xRVS?7zVj#H0d#9A6#7}92*piHq0mw&v;?+`-0~k9%o5lxfh{T1T#9TLg&;q& zoTbQiDY7L+u1jTvADIX6FrPwp>r;CH=41S&lEP9+VJT_(6W>A#&z6#wrKDvkY54=+ zGVf2I4@*hQQqr=NwESUCzsQ7^l9r{UWhrU-lL(v)rb~&+pRj4ELi8t5{1Vvy!@!ov z{bf32=4xqTri6cBjqucwIO6!NFsF*``T^$C>cvU=(+Ld^Vg#g*?Tbnq^1s_xBkGjZ zFywe`E46C|X$M+&%8R0T7dgZ49A-j9k&ncePapdHo<2P<_b^B9v}uO3$ZRU{?(OSM zeQ&aAt9##P#gEf7JD7hs8MQst$9C2?RBo23TTWEiP}y-QjZwQ6e+GY$n_00$fjMaX)Pytv*N&XjBtA8`=(^oXp1NrXMJT2OUl+ zH=s6NUS|T0^y>Fye`=@oY#Y}$#|I8R!`w>aSw4|@`A%oV2ma9`tI3>+(6?awgnl~X z848=eCDS!v+BY9rGl8Z_bFP9^>T>fp7JVRSS+EtOKTf?-|Ju{HJG8A#HHMACatlTp znpwW|*h3U0a6p4bru=9QA@Y5Vvqh}KM|pPe35R~Hm~iH3Jmh!xMnSH1-;+(b)@9Li zbDx~V9aGkM|GqQKg(=iKzwm1cSKxauQ9tt5ErwxyMe*M6vqxt?Ia$(DMZf_%#OzOa zaL~X)SRU&HyX9+qWXWp^I&70?fp3T&5&OP>xx~$j^Z{nD%yT+9Jk?GUg#4kyzIF;K8_ljQN{Vk{P0;_6wkLXihxx6%WeRtFKL*orv^!rCg;LN8M!qY;i|{E}8Y{+Qdlc(8HZ-i%vu zPdOMU>PQw3nEPn*bZOk+kW@t|RiGbgV7H0_8T*o}3+7uNxpG0np10LjW(RpLy5XU) zODV_mh1DMkIozUl2#W~73;F^X2RYA}p09fOh01>t#R;2eay#_38JAP{q{G9NZmui2 zit}Z|i8>1br`Vb&51heuK)5X|@uX8Ixjb^jgDb&GXyr zT+iGXuU|bzostv0MwHD(Pf+8c8v*PZjvNXact=n>O<^+J2S0p$d~I>+Q~zaD`9Ip} z_RcoyMNN%XGp;QlA!UZe=SWjc-x5kFB>&>>3!qC4hXCkeIOcg%wx zghn7EVSKUi-eodgNv}V0P_Zi*iKf%Cm}|Pu!k0coC71cC0a7K%Y7g(aJIWSp<%KeF zXKx*O5{F+GBfX}>v3sB741%pSBgAFEDh%jZ^^|qh^pM;MkWa0 z-=t3R#-Eq)FG$Vcph`QqD4kZzK!$Ei+oElLiu4=75woWh)VVZH7wx_}mm$H?GqGj? z_xl(UBW7JP4qGf(kiG>HWG;SUrKN&&*u#Oh_Q>-dpo{mp6wo zE$9X7V~NCgBmb5@GxpN3t*mwN;q`B6iQEeag8~mG_Bh>a3v^6Dsxli0){eo8*$N%51q+RInaNAYAv*{8BO*8_NM3M zZQ(`7@gLZj&%&h<9&9?=clX849W3i&6<$e_^d-TVCati=&%4FwUe&k@OT*x!%)o}< znka81L~j5+%ukN4Xk*9cw%a5E_3NFNJeP)?#iLvZBH9+#9bvk^z6LGL)Y~=DupHk@ zyUl<9CxQoipkxyZ^E&5bJ*B2pB+*|i(Yh~*yFyGZV9IpJWDFIAu35QRxzs4PH$2{h zuO}q!aM$}Ag}I`VO@=Zj#}?$morq;&Hi#&4XqZ0GUVKa`!FWO38Jnuj&kh_h?mrjV zh(AGvF|J!he%v#+Z{L30lN9qQ&VTTg1PsN>rEwC;*by{)8EH^y6$(4XzS6vbX^kt} z#ftU&`(In$8pgdv?;EHy3s1d%O0O+-=8-aJC{m?WqM6fl2%4^nA_DK{l)~7De)uVt z@_yMW@aA98GDWc$PiVCyWavf*qRsV9L+9Ui;?6u4a(PcRz^B`>m9k zHTA_45#Dr76&aMnXlKQ6!9>2`;FG@8&QALxTKfCkT(O1YH5=*rK(ysn`NDkP9tthU zGFVT51!I45n*8c7?{y11);sr;A*d)8G?RP4p2QaU!EU()Hc7T=79tsMO)@Lacp>DV z$Gf9~8`_@q@!dDa1%!r?h2?;@xEK)_t=ptISA<`Fj5rY4c!ps*9m!}dJ?>e2SNQpr z93AGi)QRV2tafO!MVinLhOhiORWMbMUZ6|4wn_sCB3MzpV;Xk)lR~4YOrb}EG(Cg& zzI)QJ8FrO6@l&4tVf*BxT~|FQz}~l!4zj%-zyHyj(>-x#GUpyEiSNg0gybB5l~lO) zw6*#D;;=PFwX_uIw0I1=bc%4PI#S<^V<=$ApKk1Qu1R^GEuQW1p{LVq)ts-7+~t~e z(4W4s@hUInnFJ;PXj7Q3nS(1PYW<5j3-?>~B?&xwL`AVXMgUWKM>d)`0nEiVOi%0P zN{Hl`Ie6v=cf7DHRy;*G%|^R^q+$+db3u9)W}je-Esn zzS?dFW_+b2;%B88J>dZJV~1(htrdA`=vv(|HS zkMuj2jJ<1Kv?g^~ejyKDhF7Fl+gyXTZqE0|HG98zInrHyLvfX1JlO1>2=9uazRJmV z+3824cejr4ny#;;YObdsh%I|SsAk;iB9mX$oZUZTJCULgLLq_rT0;|?#HOm^fnnc| z(}yo(+3o>(M>h<{&D0N2gPR9@>MuY3%57T|E zMVt2aS?bRe=+);@yoCuY^Aw@hhjz?ES235ilexQWaPpX@2R|%|`exW3RtM4apn=LW zgfi+jx}kSe!_Q&%Owws}_f|@<1gtSKy)VJ|sqM?mR;}8~uRYAgRfVktN`gjE=E@J3 z+LYWr>ti>zJicclVE>7+DIJst+2uWFeLOS%zWsgMtoMbpZT>^~9%Gm0{dv{fun-33 ztJ++2@il{!_ElBys*ee9o*Yp&XBS!3LZy-3W`o1N^!V2J+2+>r-Se5~Wme`ILHh^E zr|7gI_Rx)LBMXO0cUweu`tF`?PaYZ*lObb}g%GU$z+e!6K~qe1pr4@c&eU+iTk2jN z6fNRf2H1s4w;u2=-VrXf{Z1kM(SUU-um^*2GK`RdvU0GS#aMAL$^u1^^JNtE4LA(|HG%V>bwHIJp0Al;eXd_9b zr_&ug+{t>5cCplj*TJ%e(q;TO{Rb-7Z6Z?5+6J(wN-5=IJ>8lYXUzs;xT}1+vzdly$-x|F}b|(6sB|n+8qELYI!q0N<7sB{f zdHHV%2ch4jY7#t}|$>eQm1uI*vcW)okbzz-YJ=%w4zF0!BE?Uvzxqg6lXZ;6{B#63Q>BVhN~ z6KNJ>@wf0z)>Mh8@xwJ$=1#Jkok6z+1?3Unro}z}s2JzdS$^&DAh9ooV`%$>&Vi}S zwbCM3R$Y_1nh~c@ZTo`qU$u-X-$;JsH2ZqOy8>6f%dNNWuFpu_-FE`sZ;N3vIYD#9 zUHgxC;|q>r<4n2cBJ~9YOGifBXTw&s9?vqdqxsqz+a}pH70T8aw7s&V^i#_4iy8f{ z`0_2%%`E=y18b!ZC^Pk$_xgK?HE}vNPIMwF3&gu{m6Q3BbKUQIo*Gq}r=&?w+GywA zNuK&`Zlp72^tswQ`7-Vqk++XxW-G+oOmsEoZdjMzbMING zX_+3`Yc+bdc8vC-z_Ek4ceqc@VHHk;yL!iPO_7rCCudzmV&04BPvT}pj56cjznk2^`>Md55#o%)W)>3rM2W_Mt(GNk7Whv zOk^P;Wax}CXTYPguLk{|r%H_Upv8siudKY*s`g--Q1wXaSyjbp4=5>o=Kb?e|H>P)!N3tHLthzv~}0% zg9poQZ#El^KRBX1d^o%L;YVNftLP8WE&iQOMQ=AVCZ3k(ocqixCRN2S$^g9=xn*v& z)xXQB7~I=3Q@;FQ^OGAjM|oqV{l#Wq7zcV5C^4GNIL&o7v}Xr);TXpy4E6V&eAN*B zrn4fZ9fT?7&0YFgISO^ za?VANUy*3^{=zeraPwIcsj+h&eQPTEu(PjoR>nZ$+UCq*Usd{A!vElvw#lGof9!NU zcyqJx7JdTUx<;qbF5O6&^{JY4872-n3mi{Z66}#4?n;#q#%Z*TW*}_&$By1FckUhF zkw$;HaVc-C=dcnYt!DbcT#B*lS()jVoE2>m8|v48ohY2}A3hsCH(_^qc91EE(>UAJ z#V#*uQ#bVP^bB}+`uSR!=3<+P0$=R(5IW%A*^J+$ULMR_7SR5o;_Zs7B@HFJFUQZm zztQ-9Pk64NfpTJKs%Lx1aCCWw}Xo{z!AN?9Q~p z$-~{-oCB>VEXp<}n@Mr*wH}x>2(;&(nJ&4z5?qvMIJ#CW-+uNDyLo=~+AMFDx(UEI zBeP<_MB$Vab}(?PTV4rKSTik6-&2K^P-P1Gx-y7)ZlG%R=tb=m31yYSbBO6$S^AzR zKD9DIB;O;#XWll>9;XUrMu8U3-iKd9X0qQ(m79fDpk5+uJy{WjnJX10&r5Udv5xg) zsj0#a?6L`LuX}zIE0;8p*Cz3G{A>L_8BM!qtb~g@?hMhqq5ZNoR%>+m%{58-imY-( z+t(WYD(Rs1Yj%QmbTd;A&bm1&BCzHT&mF!_NR+wWaNj<6<$;uD&xW^w zYsCic%@L!-1PL>vd9ndjrAfw@GUM{QyR0+Aa-?k{`FN>Vq+rG<&!yc%^0e|FWNYR0g zK+>pmmFpB&m#%YXMVuTf^esc{j9yBt@o&*@nR@3_p`1I(=dg`A(y%H^hHKBQh-@I2 zynKZ!5R)gN2iyI2V<+X2RYSA=TDU8W_m#ya*FcVM~k`~qw zWbYx`99}q*bCoAnCK_Z%)3-g>iWO$~r`v{V3&w>2J#v11NK?&eIy?gIkT~%JFb~0z29cDGk44+MU;C6QP~b| zM2Qcf!XM->yRA`E%jt`Y1t1tHYOpu)Gu<7voaPh!?fpRZ_G{0KZ1zX$lt_$iPmFJC zLcIjKdAi9}u6{#3np0z7J5U16Yh%r?fnjX&g;b{9??_74DcZ8~0uw>GW0Ma~5^{wG zja6jsCML{o#Wl06T(hNn1?IKh2|_aM=9fL91+xWXCvTrTc}_sUpRr43?6t>*XG)`6 z%!0b!#Pl0YSnzs8Pw;QPUA|Z1-B?^Ws#9dhFfP1e@8jVyIpXHcUPn&(r7n2Luaivu5Yrj&PLc&sq~6juoisIDgJ0sLHpb$QQFNP{Ig_!_U&TFsDYCUnE?|z%2MjK#8UryFa1zVjb1Bxnz##LEHDMC99 z>^g1zS=N;g?IVGOJW#BpsmCZs0U5WM0 zAE)1FjSyqz1S9>^C(pMW-v^9y_~`x6tS;-x>n8~idNm*4*WUa|x{<9qXy$N?b=Beb zuer{TjnwU}e8Dar;BhZdnlt8{Q|Be8fP-SAC-&rPsK^9a8ogHOY7^W7~%YJ@zTtdZDx^EM!B8ljuB?TuP;{uoPf*$Hy*sZFazumXeQw4 zgO(HJ*jT?iGrMf|SdAyitSC@rBjHQv0DP$4n8qwB!FtcEsqNx^qlf4=V#ugf_x+RO23dY!L-#D(&{1CFLDg`uN9fV_?h z|5|G%K_q5k`cX*WzETmu@v8t4?#9JL*v5jr4FPu%XubB#Yk<=LT#R!Wt^s_gevNtw z79P1Y6i)EcER~WC03&oBbO5%T=p0g12?~6!YIKKhr^G8CV`*g-cu>a)$QV3SWEeoq zJ=|VuJu%qQ5{#-o7con#vRvx+sfISilc!3`u0NaPLtgftE01^V&#Lj@GSRNVFwDq99;c~Me zd(D`^O%oQ$qtRpiYqv~WfavO}p&+j11PmBEy=WH(7(0W+(+)WzE0>qsIsf#nTqq(ti_y)wD~$o#egZOdswy2h0Mr&h z&0}ye2Mr)@>PvQhI$Mv^S?ijK76A2klwyEJy!3nzVv_8*D8~o&p*FMEq6VNXXMeNh zP3FOljNMi1_@C5$`U2DGObh+Fa$Bhc?Hqkz9JsyU$d`c&t@cq;HRzj7lQ+UkubeIr zIg-7N8KoxLa5lgXDZ;K$5^|Ct{3%Q{|7C>5HIDi>z{qF!gJW20sms9sACjH9#EbS` zo~^!Dj`;3uOuvO@T4BhV?x;rTprf)t$LAWJOE*rJ3_iUgq@M3{P_LwEG-J9F01JRs zaPi3Cd+Ej+*_mXsBLW4Fdt&-Flz|Y)DW{{$+V;eg9sseMOUI1v3hlTSRNn!No8MX> z(Y(YrFY2s3aXtZ$8y^(gbGYpdy(b3Gd^AP?f z8-Fk0Pu$c1e9GTL!QITuFp5U-=c?-(+bAW zy8_JzNd7PzU_f0`AHab9X@*s1Ix24U!@v1m2V8m0K<3IU6q?r?W6wW7y%zT^XRra5 ze5u62q)&Dj_9{VVqFwCdg;B++abiq7;KR?@1R`&?I;saa#}znu&b}dlb8yn&0zzaC zc#N89fC^RE$C^x8wmZc)VN>SJl^&`ASb~Bh1SNH?;*>E9^b{V4vQ~qf;gZLn&h52x zerkJ(K9N0v7kxeYb6tPemh-j4@25uRt~QSCdU)WslA(A%7ZZX~!{i3t0Fa~E8~cmYZnsS#)6~!bhy79>Z_4RmyCc z0*8?N&a3uQDi)whr6I>fN2v85x+psXs=RATjSs7#IVoirB%KlCr7EqP!2gfNv~4Nf z+;qnNitm$CMKUa3r|+K8wtxN1IY-K>&AoUWap1(2>#?o#WiNV9t_V3I-7#WDp6AE> z9Lh)?r&mca@b6C$gxhSLFWjv{0fNAx<`MhY-C|=0tgu^% zt%B5p2Cmb{HhJRI_yB8lRfgLm!))Z;4^@wkF>ACqJ?oxdyqCpi_Qjb(U;ZJVqrqZn zY4zj-GyGZb+l0JU?po(zA*;IIOBa@`w^W-iCGkM@uA8zmJC5YXo9R9*B5o%YE0?e9 z_E4GgO7l0B8mrS@elO|nx-(~Ls}#5R=WRLp1uf|$J^zDV1my%Bjkzx8Wp(k2*1O2% zC~0tLGVW+s%+x9y#PeI}g|B>G)UpmZ*7Lz%la_iTRG&2XHPOe()MjqhT;qrEm*nA9y-&NGrI^G-{MV zilwSF?rX~Arfb8!zhfg*lV+!_nHt^P{`75H&f1|;4<;vaNq&`fLO7)8bH%&|S@!PT z`<(xt;acs4V)fYehwrl$6N49y?ZMgAJ39B3W3}jlk*7`X`q~dsDw6_W(>Y&F^62rK z+p+Bqu>wtAOHk`D(qUO{ro z6P3fZuvBx_BgEeCbn72J^XO9GS!-WDpmb;B2-K1+7cyZE7B0Q@LSV=KqeWs-_q{0+ zUkxO_??Mvo2A1k2f(kPGWcwz?fLdsld}^GmzFa{rS(=2J#gi!zY|zts8AK`Fr# z*(Pwkf`9e$`JX_$qX6lLTb}5e;?zTSE*r@rL-xS}7{OZE1)I(X?ZRKAnQ_7?C7Lff zaHf5-UPX3BIlg?NHsd#wZAV(-&OC^DvNgM&s_=b4=EmDl^jprczQcXqaytEhJ!{!B zuKBI*VFS;X$NFN}BqsY$a-q*YuZ-cjJT}i? zxDB4I4$b*Y+W%nqvk|T0f(|Jcr%1AxxZD`P?>?5@^uym8R%_n4cEjebtr_BL0*0a% z3;P}IA=eB-{GTbA`9hxKrDM7y;|qk@YW}VSMG8yt9tKh1fqnRAj$GB#JtMp4mW| zYr>z{k|DY+Jf@C(90Y7X3Yo$^QxPLx`XIY?)9JOGaZa-WyQ&kBl`W#Bvb2O4lWi*~ z#eZh5>c_~+_-I@4nG*KXA4v^9fKA{Rx$ZS2DEV7Yy8yu|cJe2fpD^T|$Ft>Zj}NGq z3>=YqUtWuTc1VV0{;=k%Zo-R*K*sK&wnCY(Es}`7N2baNrubO=^&^qcIbwtEztesa~bdzvIR!goW57JLbX*tP-*@BYSwUYm!svzi|o+gXz1%b481IaC5bS!6|9 zbJ~M508!;XH}HPDmd1RS#!G&##CQ&a(ORa@tr!oH?Ur#pPVJPV5s1c2MxZIFEd=`q z=laNYg5L=|lD?U*txza7XzIQ2L}ZC?g=jL<9^CkKFiBkPmhdJimbnr)PaUA>^i^YUa0xoUJo&yTNOAgqN_*lwa?#~>@ND}L?eRd*MU99> zbokhzvHZg9*Ay~*X$QecpRYiCZ_|5hVZgmn!Gn?m34#eS>^DM;*}t042@b8IC5#ds zA?2Qn&-cfV+{+u9nLGc|c7=i^vxsnQaMV*JhjiXBD?KA6huP$_cb{HTin(zQ*ydu=pnW$6FZb&&+qCl6V;Gu|8-`3D6?=g4J|Wr84c|x##NkbZ_@5($JHua zA=tF+8Q>0H2BYT!f0Z&Y*L0oOeL1+SH`?wdtq)_?=T$2xk1-b+uBOTk$yt}X{HCaK)++938?A7)%U-ZW{SFf-@ zB#`J}R^du`OBl;9x{yJ;GF#$A!`wT+noVRv=tbDL606Q?Zp2@AS6T5nu&bTp@?o26 zp#woqRudIX;m)07hK1;rOmHo`jD_ zS9d;cz9PW<<`B`D`ZzR^20xAd&`M(Gxo-B&)OkOsfM12)VGw;@@XLlttLfub+hmb4 zyEf+TSXeqDBe*Qa!#6*E*y_y|%5ydX5jzuQ>?^lS<`zyJF#OHgu(SP!EbXBkUpiV` zPai_IJrI1bcnZCu7nic`B*lB{N^GMrrHLL$fQ|1&QE+otVsw&pPK7)E{*_j_@+jFw z`_{0hd5~17IBu_=uJ*)6qczeuSL6(pD>gh36%rCENSPG6gzN5%kLlYR*U=Kne9hpF z6xJh`;r$r;gUmj^xzOKLK85c`VOS^>fN-bB1Mykl!^4Y7*P8b|)TqxNesPLAIYh)H zQ~#ys2(F2c+2}DP(V6>-n6;E=AF`d5jkx1wQ2at|5 z>_aO%4<}3U?9~cCzk;mIK(E3G2zO$YYD7$ty5!E~?uD7N3|$hpZd=ZaiiQ@!;x-odVT0lBzSggcwz{iY zATg*3ll&@v`c?eP-nS_sVxA?(gUxAHcR8uFy;Y(wjpQF#ykVel6?sy&WdqS~_LFs1 zbOY$GZGTba-^=uQ+dJOV*H>F>2wbp5lp0Pg-tsb74;@g{)`$(1%_c~}9>@_lRnIk+ z9^BPe|6p&`iH&@)R9f$T7D+^Bk{3+E)daJiq889IoUl~a?f~U%l_7pk;e@r6&E2`M zjC*F&KJN=jz1z=NSA_=$UeJrlSfuIICKe(6QGK63mY?-OM=V%3as{kHj#!(7x|EXo zIB50c#HBgJJ5NQWwEqp8S#vRy! zj)+w+XEbr)`E8CpkrnQ;{p}J|og(ddnyI@si@;}Wh%HMzyrRR@Q2ekzRjkN8cqQ(D z)!pVthhHEhB(C0bS)-J&4wib)YEvu;Wp$37Q(d$x4P*RFRfyF7i!+3r8{+=jMhc{* z5;_4nPJyt`LIJBkI53yK5HsK3!DsmKCZ-7t!0-y#QhNawbVHef$=9;gMQ6%YG0c?h zYB8RW2l9~_${YRs@pNX;Lygxr+$CU>^kkDTZHwCH-XOMb5gY{vbK;+;oohZ28(>Z> z-nZBwIe=fNqQ7W&lfi^{ZP|u*oGx9o{w&W_gG;!nECA;5ng7GR=!58YuYE0hsCcH% zoGwokwkwbDsFXY%e6WiFru5;$^6e|l+`43S)o{N(T4YzjSp3K1+li55B~z#7K?QHb z#9Wg$HZpa6nqnU6QL0g^UgySUp`R~Woa=+S1#1uV(8ej?r0lv zO`Oqt>6w);Q25~<<{LbtDFyo7+rrO&Mz79(0gSjTgXeo_D0(omzB-~{1pznE#53AeRfU5S!jPJ@CbUldIr~hx zZblN`QC1*ppb;!J?xmvWjN^6QagZ=nN~;xpz^siwNcB7tP(_xflPw}|;VdPr>l z+s#KaTOZ#QUj(IzFs2Rs5g;@!duUsBQS9jvdY!{XUP$xjlbdQ5xC98mJ2F1@LEm^w zh$6UUVnwSq+MOifZLmI#9MLSN@7=W!$E&}6?i*nmJ7HVDcx5$<_$?r;MR#U?DrsG$ z|LYk0n{zG&2g)5-laf&MMV4j8J;$_(w?^`X?b=7@7r=ZO%$Jek2$d6LX8_Z&Q5z^h zN`fB5^sMGt-dy$ZmwxZs?_2M&+W##yy8~$6c5Grz4nObpMNnI90J*;hK0WTWj6@^V z_|=P1=-ytpueulfPq&n(VN=fpE<{lbfYrPw+SA7=a5R8Zd%W^3ob}m}jTB{sK!k1s z@E}21gx7XC2}Q#84vW}Pr%n2b0@0Dl9N)4j0u zy6Gj}0f+Qn9__h*Ky*}j0s0c$Vawg)`!Byy>$*L(RjdqBI)qD9$zrwPIu%^DCu$rn zFt9^~)!MLe5%A-+m>wUEf4aKp_Ce8&QsiCu0+X)tr`yw17@~0=CAvF`IrVOL&htl$ zrgR(A5r`{!kwaDklDLqSu-v$HAbbR@HeS<1J9Wm2^ty7G#gq0-@htu`;@cMt+ypgtRYOAIWt$xU4#qgH>1H zQtF!0`OpN!i>@^J90qM3j~n;z3gI{JzG(}AGX%)^a}ZR0g-yl9rEr~>4o|i@Ssta{ zrhQ9h0j_D8zwAy|953@4aqE=s^=Ak`un+Mel5fi{8WPR)mA>0)C~Ewyr@AH2Vxkhl zU;=G80)$Y>VfV_Zu1yOBjc9!7jZ&ujm!uz>jZ4_x=)J9NwrQ~x;jpRC>HHD?v7yR) zd;0vD#1<{c{DtcSVz>3$xveeR^E0K?&Io+7XasC3p5528xTX5rD4AIk0HeZgZ>N3f z+G}0~HxFILT=RUDkXMG`6bW14@-o;97B}A=>3X&1yFAVb8!8=JxQAR%cNEmel0x`R zH56q#Pb}P720H@8xw7Y~lo`srEhv3n0xTdnR7P4w)x!?Li2IL`nS5pWV*7I3{^4PC zK|yx)#Kvzz{SU|wUsBrF^DCRXSNj~_B{;y^6Z&>!?}`KHO7rDu*i=c?u>F-+cQmL7Z%|TZB;a zJOo;7O#>r}njKAABq*dT?a@5J9!ZpqDq40|Ih>*d33mVrhCD&gaYm&D7a&%><~d=< z7q>B$BXLt*&>_9zO=}N)W2Vb# zRzGV#&>x=kE%uR6%#wz42uV$>SJ8*L1a*OWG9a_?@(x%8~2 z>4JHy%)w;?x>`MhksP%9yFx(e>iHodC0a)Abh5i}=1;k;545DRDcN$7x$W8eVaHdi zc9!b2{=3D+3)C^c)Ip~7^i>oqmmplmPn7t)jxshkA{%i+F%ZJxJfDKo1!P;h{eH5B z5B-W!FyIXXjNWG*{b_<|Y#GSY#@1KIc+vMX;AXB#!Wd`?r#|+5wtUBTiy*~n`Cul1dtO;Mk^wqDIU7R&)R>zX!gdQ_fYOyV6wf;MxBo5+B%r%1_!p92F4~}bs92w0AK(Q+nxwp(;}GNW(pLr8(R4f z`v_iqYV?M7-k%{~00=OB7J8WdjKkNH-xv$?nLS@#(p*?BsL*m?GSE*uqrko=_F~@Z zFe>040&!_to%@q(p?zFxK6SK&mis#%Y>&tV0&9*6rs2}q2-N4KA>)c;NDjJ3(X$)g z4LNtyj$MCK17BEQm-f`!bKOxx=YtEdM~L&W8>n||f)Ux${ZG%7D;_5XcqsbWPxgeH zQLUmH2!ttLYI3dX_5KTE4@=)8>AU@JCGDV{23}wSs~%3zrVH>M`TM}7r*2~vp8piQ)dnV8xg^Y@m)bk{Y`<-NSMBhW5UHehv+ zlfir>;kXaH7EoW-<~Kre&ze}d?3Z$e6D3d;Lq`X!tjK-^!ySPHpI{(C})Tp`iam>|@0cT0*{iEeC88%2lf3;#hV^12S(upl_E=xD5027>4DPmNokJ zMzP!NUjY2w(ZNG|E`6LNMg7SRdqNkfJ`L?_eh?CxqR(#O7!?l*d(|$^iBlhL;FYGL z6F0O~D~=IPg>7#~z3Ppwjqn*>kXg0^f{})R$SB*}8+lkps^i)VI-l6Nn#i>)m)i5hZ!*$obHc6eWS(!_V#202*eqC!jX zxRq>8JHiU8&hgUHJ2XT9MkpGylpII)&>bx-e3LMnRkOFx#Owezte_iNb^An5 zlt4nXO$AyxDIB`@B`NsSaCVzllylQ#mMhWp4i-Tj>-Ar*cB-$lDN$p^AEW;~8K;uc z+oxSDa=(gNM2iHqP4ic_F4A|s9xB(D#WmZhBW1+>_A7Cj15zf5wFh8|P^6Lg)`Fj2 zM~Peju}mAy={O&8P&Od#vnO>X`p?@FXmS!92Qpq~C0%q8IR5HR?WA?B?QF_*j;t#M z*OZg;xdhcV9j>cZplgbY`|x#kc9!cy3HfmViG;CJD@Mo0RvJsw(f2iYv|RJ5g!!%* z^XlDHZ(j2pRVEp~!jrVo;9w>|nt%>dQ<7d(p8B>60qzpnEbFSP&c}tZyfg~dnot{WeJn+*}T7`az}Md3rTp=qq337E;~?M*qpdHH6S&XPxna-K4wCUF(L ziiEcn@kW~Q_lSmZs*g@0nV<^B79UxK=R{u@owrqo;{wS}+-(og13s+KrUs1yz01vf zw{q5;2@Xu1_6$SL0_7YvU#=7k@?v1lwmchG!XjB;_T`6@@akT#{$Qw;96cAaE|-a6 z)3jvoaKF9@elRXBVSASAt}jN-Zx9IDhb$ZYzC2CvbIEm_BuZ=E8+d8JT-gv2X!%I3<_=}n6^SaLU zIF9oqe^A6HmPSyhbxW^3;`tt7(Y-}W`eu$^Uz{tqC`E9}x z>UV|E?SI#%B^$weJ(6MXxY3>u!d}9t{}T;0;IK=jy8z6)>uA4@cuGrm#d#4&MKDtj z9VR4)&9hYfczJRq6!< zc68LZ5d>h6h-asT>8F5c9#j`g(uqOFz}^GYN$INeBiydQ%5&bMbTF0852g>frk+@7 zdV)z^H=gXnyZ1GiFqSaR*S|Xf0kP9@*R9g%rJE5|W44_+DPf~&rU#}hDI>FTa!`_J zpvYq+$p{gNEPAwS6F@v@OkBlt?LA2fK^%55=~tGQIp7!Xce>aiYcoy1Q@tP}IuN$i z)y2=v%tg2(4y&v2gqwxhN=aVi6&HuPY5#xZ<23{r@N@IFMqKmn9M6|kt`%9g7L{}i zUDo-N#J`*cNnF2l3!$1SZ5a`l9srbVF0 z>`aRdO840qmPEl{UXtp)#?fu7@tDXwn`6^u^1Ueb_j7Gv?#6fM+5)S$3o{K*BcpZY z{eOzyvAPpC(B7xI{V#;GwNCSqF5ST-{6 z2!RE8bepi~*jA%=^o#eONL7pkw*0bk51^fx&tiGg$$6em#}|}JUKYg983uB0UYZfu z(^3|)iMt`Cn9f%EHRj)GL~-=2rn*yR6yB5`V7&inQynE4PeF4Tufxr)FShxXhr_MM)<66*c(O$NbeB{6PtUIb7&ioy5fe*> zXA;>rW<|#AD)a*Epw+9C^?Xr+)`H8~MDLBb#Sy2UM<4Mw=txMzd7&Ke1>61b3WQ{IR6sAmO8UuDvKNFx&C|Ktui}hOcOU==aEpW4+2R%7vjaIKUT7peCLT>{N4Ob^A3Xr6jAcO1 zJ!cK$?1RdL9#>wv-c%rOF4AGngzv4ids?~WFvcAG&$-iP`D~5jwm)DQ7J``Yy%SLn}~Dq5DvmxLD_O#<&o1^fE-drZxo?MjY&Cjd=5I)P5G0ld_q$+3uUGvK|6_oCSR0_9 zauGUA&sHI)^M+5+qBkJ1Kol+7+VaJ#jG1^X1pUK)%*QLLjc?tk#LOPEpQ5&9;* zAL)CBe>i^7rk1hf5*{BH&i(@{wA}I2*})Z`?t1A?f$jSf@!|zYI#B~*V-9ddTvob; zks5mp&mYdzpc00}U%EYk)2i#-r}Wc5b?q=Fo_s74DQaI${;gAVaOYuv-zCV}%sss? zQGL-tDn0`KV$?-p$eV!JA{WZe&5ze&#E+zI24qr~o?(6{=vHP%6G+^bPCO#aNxk#7 z5Frl^ngs7%)NvwBi6m7l=50M_7!zrC*7C=@yr_4=vZvNxjwMt1F!2-RC#eVM&QHyD z*6#TY6%}xpeOLNIBhQ|nqi(f&RT#?7UF|vzfy2j^I*-Byh8CDMdY>PU#s=-Revt3m zALEG}XLL3H(*Q|zr7*3eIb@$ccaR9308-84?-qMn(Cy}1`Zbc#tS%+G#ff%)^L2&|7Sc-C?&mUi{H`Ag4kuryUQySe=@ap4^6a_u|I1y^I6f zvFUi`43F-ac4pChna>OB!?M?|Nq2;9KaHLu?3gHWPGR7^YdEyWNN0s@%cJmk(|6FW z!c2-gf)>oil=j}f>R@?Z&mZa=V~0$rQE2`w(#z?KQd>9vFCqSd zeBI#nm1r63#@6;zPIh%uF^P!sG~{P7?<`Q@7&0=jOGJRiu-Q=XQoF8USY@4l^P_e| z#uSW;^(CE11Ryr&2?T@Mx7T%95_YHXuj7y288^Qx|G|i7#sd?yiygM<>2}}u>AWm2 z|E+c+aHOOIV;6QTu6i>so5(mCc@>H|-Z8!TlQbI?4iinUoZffNWcuLY3SnH+Ie{bD zn3U&GcfSdJVNNzIJL?9yC>$&PZmFN2h5I$K1&7eC^R0r&b>}~N->;A-b8w2kn52bH zr|(j~VmwZocM}U60;{L{7kVjkHTOu1%eZmLU+Cq~3)v3&J8>r8>!z3gW#KbScjuVO z5dqa?(^$yvy^0RqA5BNM0bcBHc!p|@{@bMr`+>vGNbZCUnDwG>Y{ybi3lo1> z+`*XOkGq@A18)wynY|FcrU8Bt%(tnRJ>9Z*&pL7i_RH3yT`q{)5W3%LtNd;dWg^K^ zn;E)0_{ptAs%|+p93}!Rbr@J`960tqP_s%rjX+U(6G_Y@b$wX;`6_5)@)LVuV^ca3 zx%TABY5o%>LZlxnm&+$Bo9uEi#?7H2vO<>MmU-1LzQl8(roOG5XXca`^pI;_ogP5d z4=;u2CFL|G{`<^f>D)c2`1XdM0lHE>gy5dBJ$}n~+{1L14Q4G48G#2%`g8tZlf-qE zH6lx9jvkvB*&?`9du=PMmXU_HKaM<1wwteq$-3|O^?kbL%1Hz8a;NCGJx(H(Zcf<4 zZ0XXBl9|v&-ze3)D-EtL@uC~N&r zi3R6z4;!@;>XI6wa^g?J5t#>aY`@z%{manOxilv!2SS*GM|kdXji_N`NkY?lE{~A4 zxrE$|A{WEg7{0lFxBiT>8^pPfkKuHABd2j}LxjV8p&ocw2zf^$^{6!=1EZW6SS}fG zO@yp>Q9Sv&a4JY#W?}q*79Kl(O05{?eES|`BA`ftf&J&`5S`t^FPakOfb+KQ;)WqZ_ zr6(2hW$-bCG5ysgTS-iX9WG_12TFVyw$}q?B{r^9_Y}aUHO0vR1aeesYt`*n=rt7+-T zgpoK15Q#^ePczn@9C%IyG>WqCFV0RqW*2%=;3x8sVRYmlXgo0in3vJ&`IO4Z)C=jb zhqWOyfJaHT*q#JjS{Ph+v{*L6_Q-XtX9E9K_OSF^MTOvdf3*OS@6wJ~xyd4NT2TMNI|V-zpRsAy$C zC*XnVBGoHD>RVFXj{&~S`qI(Z2vguuhQV(9KrhCef;;a{Pujqwi?M46XG93luL~5q zo*IDhc!-<_Q1wn@U z&~HdaYbs$y;5a#c%I(dXE-$eJWyfYk`2$$NSdw-H+b(kz*qJBTVW;i!Qif7~MEIHC z&(v@^hT6Jl2IhWt4r4mMj{2k9rHx~6;MquvDa;|rU%8h&7l5 zcLM)M_+2n^ z6{7Gp)>p=TF5a_DFfjZ2iFJ1Q-dzS6Z5^H8rpW!-e^U_DVdSfdic1*NQ!XNKsVvy} zq##|$ez^9_L^#LX&;5ej!w11x^Y|_T%~g?yT&Od?`PmzK3Dy{Y_3T=U!WZV^;F|Ku zP)SYVR9Ye{hpu?;nm~}6d3g!3{3f29cXZp}DR$p3-02T$exP5GQ>W9vOl2LDA(CWa zyxXT!Zr=>QxaEwtH~8n4_~#!u_2jV2_lPGfCzMimVz;{kw%%04w@l6qC4&Vb3-?LC zv|m?+zf`VO>x|mkQ4^O9ukSWpo)G+}SpcAzUY}22rtbqqoazAyuPc+gHUp~se^AKb z9j~poHxL$cPt{o-WPH8FrpXLCK@Yl?FL{+EF)tpSxZCi6nSSe1y*3@WcshV*#%H9E zX=ypELrY}beBhe{00n0L_35p6x668_sXA}coq3c?FZ1Z|$LnF`@i5Azqx}MR>$_=1 zgjkkYEll>+SD>z`UdTQ-q_h(y7|ZV6|BI<)j@t6kRxaKL^=L4;tSgd_uTAXitjZe^^k1VkqNzlw&6AzFZ*(O+)tmz~< z2pwF`ae!wVy-zq|%R@XgJ38 zE5L*BbhDtSnJm&sv6B*7m?IsIU5~-v>Y&>uo_!$p&Z%Q&#Tzwdzcn&anpf#3R)Ac5 zcf)}(#Ts;A@6r-Jh#4QF^V=eXjF~PizUHe?sH*%x9)Y#?JJ2rq7vn6)Py@DM`Od_X z)4#rox59R?LWw|3XP+t9bt)o6zpp+twQ zM0O~Nx0L0r)yTkNQ>*gVS^9C+hqpamu7{dx5}9}+JJ=;2MMM(_7d(&INqlsDE_amk zr;_<{KI{0iik(>CXe-^7?*NP%(w5M`F)=u`5mmg#FCRbA

    WJKZX+!2qz>`g1r!rMmU#BrQvI3%nEy(OT$H=7K< z$U{D8uD;!ApI>&l_|f?}s*d@2k?qM)y9(^^TY=Jq8C)he9-iXNO_XUaw#Sq|r#m^c z^WGXC8Q}n=Y6&rfUXn%EqHx}oPD5lq>$#r3ftHUm z8PPzg1(X*T)4@&M-b;wPj{A)A@P~yBxQ9Q)YcHTE2*K}$|rsj}l(MaBDyx-sjFu;3YJ zEMl>6t=~&73-TYzd~0= zhZ-B>CT~;*QeY@(??c75OL$er*=vHNmYq>L8oZe@Y@s!zsNbDC8Pk6YQ!wpA%HeGC zns|7GY%#ISCx@#ye!(#$^Ue42X$D`ALy=ODY_SLpS-LGp1(sz?xSSF!a{zU8_gyoT zVD5rol;>VQGqhu?h0V!a)_bX?j{a!$#M9hg)CP`BL?l@%&c7EZWo@(xt|4}~pA z|K;H}Q>R8)$cm4lV6b5y@9A*S57U$yCu%)3VN%=TnE!))os60dp~rJMW8QCDAAWk0 zl)2hQtSsUOe@6 z=e%8FyuAN=t5;?y%{kCLR(vQ)5A9q)43 zui|k;e3SCj3fxMipY(;t8!0mI8Hb zmJs8=oW*9kNMQu&6XwvTKl~mkTdFFCY+v2O7KC$$p-L-9t`xvR#hJz@M5vS4z4**7 zo-U^O%(Xg6%R!9t$)U=2BlE%t4Q=2@a*qnmFtB&u&NVbA%$&|_M+rK7+_!!L7C#Df zAq3dAfs|cCnISA1kNX+clKaqFO;vxjxw6)Q;L{3!@NP1IoAg?5G(HiPFd}(NC<^~6 z3J+aWy}=6KZ?og6Fh2)3RR|C7mscLjKv{&@7uD15fxFdh9{u7M@u zZ9%d~D&cm^qZ9m*M9|As_FKyhdomms8dCZ|QVLf)Y4#D*Yu16mV(OmTe;dyAnhu+} zudeU4L+4=DRlyB2(pR*>=yoZGBLMpDIiIc4F zjXax8bg@xeF{DBll~}aVA-a%N13!*2(KSU#9Cz9TiC;Ed|k9IbVFr>#e-~d%r5TG7&``b>oVZJr0oSnUX8cfOHedUGu~A2m*-6=Zi_Ml`HlKW8%!f0&nEd z@e^uS&+?vJ;1Bu7hUeURz>W6pmerFiuQPjpC-d~wuA9JKf;3rZ-s@8aAaKqhEcuz! zCQK+ShJPV@ZZ=AnGcM>#?h`nY@wLF8XvEdTtVv9IH+sO^3*P{)apr#X>!sZ^_$H_2 z1C>=6RLvzPt}Wn|K7yF2KNhsm7(TJ{Hlas~x!+$=Sd-Z2>UKI(kJxZ zCa?Q1ZK`9%AR2?OOpXzk9QA0NntFX?v*(fVC!gioqJh%!yW*Y-40V7SKiIK_nja(vdw^DTHS9U-J8C#(X znfq%wiW}R{D8cOv+m`Rz-5_3K79Pcz*g%4>EWNv;q9Pd-{#$BuAwS^@Tlo56W%#O1 z)A~o|-FqwtCW zdU|tOp_H2HD99*0a5JJxz33=S1lX>l3$dA;a?(YccV9~gm>v8MW_Cb(h0Eo)n;9R+j>JD#xPyNrtyBfn>&Kh@kRZ3f#d%?L(ZL;bQ@mEsz< zARF2+ExK%6G~#14y8%8!;d_!5u+O`6ABhj1jRN{rPdHIW7yH}vcz*OCT)G!Y9YcPG zQa(XzaZB3}ibF8gDXnf&rkB;k7Vrcn6@%}i@NH3egUf%Sv9jAQhMErBD11H~3yQwK zLb@^F%l+SnYZU|fcN{4s7}7Ni%M*UvPI;|d-2eOD&*Y)dUZ}x7c`6(E@_j>}udD<> zR_?f+qGPxj)vjJd2L>kq$OvHzAWGAS`jeG8O!Jk=PtN5$nRr72&+%>{=hMnE?~r9n z!Ez?ph#hbhD~+JNY}o&=mvyA${7#MLf0-@IyLUB^CX{_U65TO7Mxpk*{K=u zy2ohJ`5z)Ar`VOC0TrM}13)58hBjq(*CwD>;e*1t8uB2np~q3J+noX6dY77;swwNq?$ee#n>e>0Ai=a z9Ju*L=*w7I8PausEWomxSqL>7)#n^OXQxcwZV{&-cHd9T65b_epLm{#;eV)2TluLt)GdtCKf2hUtB^}Cj_w*H zLT~I7=bgGf?)yw^){R|jSU(N6aM0~2tDIf9+2Iw&8e)xua}5@b&KHUhd_Qe z%E#=Ef@{@&MgH2azdzFj*Tl zy~bXX_zt{$I%HfyOS|RQu}_SPoI{oKY=X|T;fWL@Anj^V2%V6jH0g)p7jqvA^=Dro zHQ2~h=E%YFI^3wu(2z<}To%3~?J+uZagzCWJCs^dL&q@`qCDd+&mBry5CEs#5O7HFl<16Py# z@+?{~>?d6l;60u}s7TUk@~{zv92Jk+9;y5SL##M(hEx05AkxD{M*Rp4v!S5-*2~)9 zD~~UFNKl(9KKnLqogKr<8N~Y=>ID$lfn6Y%7=GQO;WczHnoF4U@5h9{k_(@QomY8S z?(n>I_XFZgCPb$&Y{yEO(06S1Vr859#+q1olQp9De$xM)OQJ?QD=vut4BI-WA!!4z5WIMzR2eiS|i6E*DP&vG6Iwh<3#Et0+1V<4|CGV@UcPGL|ZZ-cL%< zm)~E{PteoR>0%OqgH0hR36w9D`upU88*HDyni};YG(c8N|K4n(Ni+ZeST|%S_#a~t zh}+x!zPe+VVh;Nd6-K?&=8ceZ2c*SY@-=!A07uD3a}|Jw6F?JROS?un zG=MlL@<1GPh~5A=j!U?2*iH*JwP%Vn^(>k?YeY3eOc87LVyJ6uRAUM;oYMa@q3CPY z1vdEd-7&VgJFyp6w!3B7uxSGIM`5mw<#R(o6-qj%24X@a!5t(}Ah)6n#A7v6f;=rMxK=Xj@0h zB)PzRsHi82C{kVFG0XR!p3)-g@SF><<2W*s*P4YpK4; z5lkjv9-~`U$ZKhkW^$m?<2Nr+a+q;No8d&%yO-3VZn+_!8G%ipoKgM}UcZ9fUbZs= zcXo23ZD$GnvhR)f;{aYtpHTO*xY1^_^B+;8u@SIH#CLdSJgnzkklI-RHuVe12=ANm zeXlRYq~%D-P>Ps;zYQW?$kWxu_FE4#(=#@5UZz2&EUQ8M%8~*x(BwX`nMed}J|GQ5 zfRJ*f8Uq>N^lkP9+y|_cOlZEldZrMV4qv^RFZS1i)|f=d$wq=gqp10t-?0~~e}C{i zW*z-qo>rJ(+N?gyY}tdzl9h6lL!umf?9e5F!#al|?=z;iQ

    C)3H1bj&byK3?($Z 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 J<{7(0{2$bPU={!X literal 0 HcmV?d00001 diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/debug/debug_marker_rviz.png b/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/debug/debug_marker_rviz.png new file mode 100644 index 0000000000000000000000000000000000000000..aee050a3388f9f04c6f964cf999fee32fdbfc313 GIT binary patch literal 458550 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

    8%dX)mtjZK^2U7Vafas?aQmx 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

    R|I{Un;)mtU^vuk|zypB%9ya1d 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

    2qTw|El`V8m2*47y{Hv18OTt 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

    c+YyQoV+y9J4zC{* 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 h&D-k=3yXth*O< - - - - - - - - - - - - - - - - -
    -
    -
    - velocity [m/s] -
    -
    -
    -
    - velocity [m/s] -
    -
    - - - - -
    -
    -
    - lateral margin [m] -
    -
    -
    -
    - lateral margin [m] -
    -
    - - - - - - - - - - - - - - -
    -
    -
    - define representative points in config file -
    -
    -
    -
    - define representati... -
    -
    - - - - - -
    -
    -
    - linear interpolation between two representative points -
    -
    -
    -
    - linear interpolation between two... -
    -
    - - - - -
    -
    -
    - Ve -
    -
    -
    -
    - Ve -
    -
    - - - - -
    -
    -
    - Dlat -
    -
    -
    -
    - Dlat -
    -
    -
    - - - - Text is not SVG - cannot display - - -
    diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/envelope_polygon.svg b/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/envelope_polygon.svg deleted file mode 100644 index d997551399987..0000000000000 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/envelope_polygon.svg +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - - - - - - -
    -
    -
    - Avoidance Target -
    -
    -
    -
    - Avoidance Target -
    -
    - - - - - -
    -
    -
    - Avoidance Target -
    -
    -
    -
    - Avoidance Target -
    -
    - - - - - -
    -
    -
    - Avoidance Target -
    -
    -
    -
    - Avoidance Target -
    -
    - - - - - -
    -
    -
    - Avoidance Target -
    -
    -
    -
    - Avoidance Target -
    -
    - - - - - - -
    -
    -
    - Avoidance Target -
    -
    -
    -
    - Avoidance Target -
    -
    - - - - - -
    -
    -
    - Avoidance Target -
    -
    -
    -
    - Avoidance Target -
    -
    - - - - - - - -
    -
    -
    - Step:T -
    -
    -
    -
    - Step:T -
    -
    - - - - -
    -
    -
    - Step:T+1 (before update) -
    -
    -
    -
    - Step:T+1 (befor... -
    -
    - - - - -
    -
    -
    - Step:T+1 (after update) -
    -
    -
    -
    - Step:T+1 (aft... -
    -
    - - - - -
    -
    -
    - create new Envelope Polygon -
    -
    -
    -
    - create new Envelope Polygon -
    -
    - - - - - -
    -
    -
    - avoidance target is not within Envelope Polygon -
    -
    -
    -
    - avoidance target is not with... -
    -
    - - - - -
    -
    -
    - avoidance target is within Envelope Polygon -
    -
    -
    -
    - avoidance target is within E... -
    -
    - - - - -
    -
    -
    - keep current Envelope Polygon -
    -
    -
    -
    - keep current Envelope Polygon -
    -
    -
    - - - - Text is not SVG - cannot display - - -
    diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/obstacle_to_road_shoulder_distance.drawio.svg b/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/obstacle_to_road_shoulder_distance.drawio.svg deleted file mode 100644 index ae024ae99da47..0000000000000 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/obstacle_to_road_shoulder_distance.drawio.svg +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - - - - - -
    -
    -
    - - - enable_avoidance_over_same_direction == false -
    -
    -
    -
    -
    -
    -
    - enable_avoidance_over_same_direction == false -
    -
    - - - - - - - -
    -
    -
    - - to_road_shoulder_distance - -
    -
    -
    -
    - to_road_shoulder_distance -
    -
    - - - - - - - - - - - - - - - - -
    -
    -
    - - - enable_avoidance_over_same_direction == true && enable_avoidance_over_opposite_direction == false -
    -
    -
    -
    -
    -
    -
    - enable_avoidance_over_same_direction == true && enable_a... -
    -
    - - - - - - - -
    -
    -
    - - to_road_shoulder_distance - -
    -
    -
    -
    - to_road_shoulder_distance -
    -
    - - - - - - - - - - - - - - - - -
    -
    -
    - - - enable_avoidance_over_same_direction == true && enable_avoidance_over_opposite_direction == true -
    -
    -
    -
    -
    -
    -
    - enable_avoidance_over_same_direction == true && enable_a... -
    -
    - - - - - - - -
    -
    -
    - - to_road_shoulder_distance - -
    -
    -
    -
    - to_road_shoulder_distance -
    -
    - - - - - - - - -
    - - - - Text is not SVG - cannot display - - -
    diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/parked-car-detection.svg b/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/parked-car-detection.svg deleted file mode 100644 index 79787f1f60b01..0000000000000 --- a/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/parked-car-detection.svg +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - - - - - - - - - -
    -
    -
    - Ego -
    -
    -
    -
    - Ego -
    -
    - - - - -
    -
    -
    - road shoulder -
    -
    -
    -
    - road shoulder -
    -
    - - - - -
    -
    -
    - Non-Avoidance Target -
    - (NotParkingObject:
    shiftable_ratio < threshold)
    -
    -
    -
    -
    - Non-Avoidance Target... -
    -
    - - - - -
    -
    -
    - Non-Avoidance Target -
    - (TooNearCenterLine:
    shift_length < threshold)
    -
    -
    -
    -
    - Non-Avoidance Target... -
    -
    - - - - -
    -
    -
    - Avoidance Target -
    -
    -
    -
    - Avoidance Target -
    -
    - - - - -
    -
    -
    - Avoidance Target
    (shiftable_ratio > threshold)
    -
    -
    -
    -
    - Avoidance Target... -
    -
    - - - - -
    -
    -
    - Non-Avoidance Target -
    - (OutOfTargetArea) -
    -
    -
    -
    - Non-Avoidance Target... -
    -
    - - - - -
    -
    -
    - Non-Avoidance Target -
    - (MovingObject:
    moving_time > threshold &&
    velocity > threshold)
    -
    -
    -
    -
    - Non-Avoidance Target... -
    -
    - - - - - - -
    -
    -
    - Avoidance Target -
    -
    -
    -
    - Avoidance Target -
    -
    -
    - - - - Text is not SVG - cannot display - - -
    diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/envelope_polygon.png b/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/envelope_polygon.png new file mode 100644 index 0000000000000000000000000000000000000000..5a627ab740cab79a13267f285230b4f692cf64fe GIT binary patch literal 162724 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

    R@$3V1 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

    k8+{ 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

    saNX=GkEk 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 G;r{_i==Prg literal 0 HcmV?d00001 diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/envelope_polygon_rviz.png b/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/envelope_polygon_rviz.png new file mode 100644 index 0000000000000000000000000000000000000000..fc6670dea98f06f64e68e70197a45353fb070476 GIT binary patch literal 159952 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 literal 0 HcmV?d00001 diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/lateral.png b/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/lateral.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8512f04292297428ed073139f2772cea8af17b GIT binary patch literal 81586 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 z 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%0D#L^2pn>6_W_^^(M$o7>kV}$T^;A;r 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 Fe*gvURJs5F literal 0 HcmV?d00001 diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/opposite_direction.png b/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/opposite_direction.png new file mode 100644 index 0000000000000000000000000000000000000000..43c72e1d5abd85da382f039b4e3d22f1b794a7b2 GIT binary patch literal 104366 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�Hi&Jt6hKIzMNpP}5#d*q6;@ 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%0AMVi0UY0#}nR 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 UbzAkz^D+Q|r>mdKI;Vst01$Uy`v3p{ literal 0 HcmV?d00001 diff --git a/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/same_direction.png b/planning/autoware_behavior_path_static_obstacle_avoidance_module/images/path_generation/same_direction.png new file mode 100644 index 0000000000000000000000000000000000000000..acf1134c85c5cb759306adfc0a05df4d635e6c71 GIT binary patch literal 102885 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%0A!W%>m*NE7!j6-mx>T>zx1zWLlq%$g>8`lY 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

    xG`4gy`27`J~5)R5f-#WyhU_8Az?P-FBK| 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

  • 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