From 16d5cb1888d17ec750bb50f08f02bbd71d985c9c Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Wed, 25 Dec 2024 12:10:15 +0900 Subject: [PATCH 01/77] feat!: move diagnostics_module from localization_util to unverse_utils (#9714) * feat!: move diagnostics_module from localization_util to unverse_utils Signed-off-by: kminoda * remove diagnostics module from localization_util Signed-off-by: kminoda * style(pre-commit): autofix * minor fix in pose_initializer Signed-off-by: kminoda * add test Signed-off-by: kminoda * style(pre-commit): autofix * remove unnecessary declaration Signed-off-by: kminoda * module -> interface Signed-off-by: kminoda * remove unnecessary equal expression Signed-off-by: kminoda * revert the remove of template function Signed-off-by: kminoda * style(pre-commit): autofix * use overload instead Signed-off-by: kminoda * include what you use -- test_diagnostics_interface.cpp Signed-off-by: kminoda --------- Signed-off-by: kminoda Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- common/autoware_universe_utils/CMakeLists.txt | 1 + .../ros/diagnostics_interface.hpp | 23 +-- .../src/ros/diagnostics_interface.cpp | 24 ++- .../src/ros/test_diagnostics_interface.cpp | 179 ++++++++++++++++++ .../src/gyro_odometer_core.cpp | 2 +- .../src/gyro_odometer_core.hpp | 4 +- .../src/lidar_marker_localizer.cpp | 42 ++-- .../src/lidar_marker_localizer.hpp | 4 +- .../CHANGELOG.rst | 4 +- .../src/localization_error_monitor.cpp | 2 +- .../src/localization_error_monitor.hpp | 4 +- .../autoware_localization_util/CMakeLists.txt | 1 - .../ndt_scan_matcher/map_update_module.hpp | 12 +- .../ndt_scan_matcher_core.hpp | 14 +- .../src/map_update_module.cpp | 10 +- .../src/ndt_scan_matcher_core.cpp | 14 +- .../autoware_pose_initializer/package.xml | 1 - .../src/pose_initializer_core.cpp | 2 +- .../src/pose_initializer_core.hpp | 5 +- 19 files changed, 261 insertions(+), 87 deletions(-) rename localization/autoware_localization_util/include/autoware/localization_util/diagnostics_module.hpp => common/autoware_universe_utils/include/autoware/universe_utils/ros/diagnostics_interface.hpp (70%) rename localization/autoware_localization_util/src/diagnostics_module.cpp => common/autoware_universe_utils/src/ros/diagnostics_interface.cpp (76%) create mode 100644 common/autoware_universe_utils/test/src/ros/test_diagnostics_interface.cpp diff --git a/common/autoware_universe_utils/CMakeLists.txt b/common/autoware_universe_utils/CMakeLists.txt index f295662e69091..72486b5de8818 100644 --- a/common/autoware_universe_utils/CMakeLists.txt +++ b/common/autoware_universe_utils/CMakeLists.txt @@ -21,6 +21,7 @@ ament_auto_add_library(autoware_universe_utils SHARED src/geometry/sat_2d.cpp src/math/sin_table.cpp src/math/trigonometry.cpp + src/ros/diagnostics_interface.cpp src/ros/msg_operation.cpp src/ros/marker_helper.cpp src/ros/logger_level_configure.cpp diff --git a/localization/autoware_localization_util/include/autoware/localization_util/diagnostics_module.hpp b/common/autoware_universe_utils/include/autoware/universe_utils/ros/diagnostics_interface.hpp similarity index 70% rename from localization/autoware_localization_util/include/autoware/localization_util/diagnostics_module.hpp rename to common/autoware_universe_utils/include/autoware/universe_utils/ros/diagnostics_interface.hpp index 8c19c94127630..120aed7c7548e 100644 --- a/localization/autoware_localization_util/include/autoware/localization_util/diagnostics_module.hpp +++ b/common/autoware_universe_utils/include/autoware/universe_utils/ros/diagnostics_interface.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef AUTOWARE__LOCALIZATION_UTIL__DIAGNOSTICS_MODULE_HPP_ -#define AUTOWARE__LOCALIZATION_UTIL__DIAGNOSTICS_MODULE_HPP_ +#ifndef AUTOWARE__UNIVERSE_UTILS__ROS__DIAGNOSTICS_INTERFACE_HPP_ +#define AUTOWARE__UNIVERSE_UTILS__ROS__DIAGNOSTICS_INTERFACE_HPP_ #include @@ -22,16 +22,18 @@ #include #include -namespace autoware::localization_util +namespace autoware::universe_utils { -class DiagnosticsModule +class DiagnosticInterface { public: - DiagnosticsModule(rclcpp::Node * node, const std::string & diagnostic_name); + DiagnosticInterface(rclcpp::Node * node, const std::string & diagnostic_name); void clear(); void add_key_value(const diagnostic_msgs::msg::KeyValue & key_value_msg); template void add_key_value(const std::string & key, const T & value); + void add_key_value(const std::string & key, const std::string & value); + void add_key_value(const std::string & key, bool value); void update_level_and_message(const int8_t level, const std::string & message); void publish(const rclcpp::Time & publish_time_stamp); @@ -46,7 +48,7 @@ class DiagnosticsModule }; template -void DiagnosticsModule::add_key_value(const std::string & key, const T & value) +void DiagnosticInterface::add_key_value(const std::string & key, const T & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; @@ -54,11 +56,6 @@ void DiagnosticsModule::add_key_value(const std::string & key, const T & value) add_key_value(key_value); } -template <> -void DiagnosticsModule::add_key_value(const std::string & key, const std::string & value); -template <> -void DiagnosticsModule::add_key_value(const std::string & key, const bool & value); +} // namespace autoware::universe_utils -} // namespace autoware::localization_util - -#endif // AUTOWARE__LOCALIZATION_UTIL__DIAGNOSTICS_MODULE_HPP_ +#endif // AUTOWARE__UNIVERSE_UTILS__ROS__DIAGNOSTICS_INTERFACE_HPP_ diff --git a/localization/autoware_localization_util/src/diagnostics_module.cpp b/common/autoware_universe_utils/src/ros/diagnostics_interface.cpp similarity index 76% rename from localization/autoware_localization_util/src/diagnostics_module.cpp rename to common/autoware_universe_utils/src/ros/diagnostics_interface.cpp index 2b68dbf4f5890..978af27f202d4 100644 --- a/localization/autoware_localization_util/src/diagnostics_module.cpp +++ b/common/autoware_universe_utils/src/ros/diagnostics_interface.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware/localization_util/diagnostics_module.hpp" +#include "autoware/universe_utils/ros/diagnostics_interface.hpp" #include @@ -21,9 +21,9 @@ #include #include -namespace autoware::localization_util +namespace autoware::universe_utils { -DiagnosticsModule::DiagnosticsModule(rclcpp::Node * node, const std::string & diagnostic_name) +DiagnosticInterface::DiagnosticInterface(rclcpp::Node * node, const std::string & diagnostic_name) : clock_(node->get_clock()) { diagnostics_pub_ = @@ -34,7 +34,7 @@ DiagnosticsModule::DiagnosticsModule(rclcpp::Node * node, const std::string & di diagnostics_status_msg_.hardware_id = node->get_name(); } -void DiagnosticsModule::clear() +void DiagnosticInterface::clear() { diagnostics_status_msg_.values.clear(); diagnostics_status_msg_.values.shrink_to_fit(); @@ -43,7 +43,7 @@ void DiagnosticsModule::clear() diagnostics_status_msg_.message = ""; } -void DiagnosticsModule::add_key_value(const diagnostic_msgs::msg::KeyValue & key_value_msg) +void DiagnosticInterface::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), @@ -56,8 +56,7 @@ 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 DiagnosticInterface::add_key_value(const std::string & key, const std::string & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; @@ -65,8 +64,7 @@ void DiagnosticsModule::add_key_value(const std::string & key, const std::string add_key_value(key_value); } -template <> -void DiagnosticsModule::add_key_value(const std::string & key, const bool & value) +void DiagnosticInterface::add_key_value(const std::string & key, bool value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; @@ -74,7 +72,7 @@ void DiagnosticsModule::add_key_value(const std::string & key, const bool & valu add_key_value(key_value); } -void DiagnosticsModule::update_level_and_message(const int8_t level, const std::string & message) +void DiagnosticInterface::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,12 +85,12 @@ void DiagnosticsModule::update_level_and_message(const int8_t level, const std:: } } -void DiagnosticsModule::publish(const rclcpp::Time & publish_time_stamp) +void DiagnosticInterface::publish(const rclcpp::Time & publish_time_stamp) { diagnostics_pub_->publish(create_diagnostics_array(publish_time_stamp)); } -diagnostic_msgs::msg::DiagnosticArray DiagnosticsModule::create_diagnostics_array( +diagnostic_msgs::msg::DiagnosticArray DiagnosticInterface::create_diagnostics_array( const rclcpp::Time & publish_time_stamp) const { diagnostic_msgs::msg::DiagnosticArray diagnostics_msg; @@ -105,4 +103,4 @@ diagnostic_msgs::msg::DiagnosticArray DiagnosticsModule::create_diagnostics_arra return diagnostics_msg; } -} // namespace autoware::localization_util +} // namespace autoware::universe_utils diff --git a/common/autoware_universe_utils/test/src/ros/test_diagnostics_interface.cpp b/common/autoware_universe_utils/test/src/ros/test_diagnostics_interface.cpp new file mode 100644 index 0000000000000..a0683694cc2b7 --- /dev/null +++ b/common/autoware_universe_utils/test/src/ros/test_diagnostics_interface.cpp @@ -0,0 +1,179 @@ +// Copyright 2024 Autoware Foundation +// +// 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 "autoware/universe_utils/ros/diagnostics_interface.hpp" + +#include + +#include +#include +#include + +#include + +#include +#include + +using autoware::universe_utils::DiagnosticInterface; + +class TestDiagnosticInterface : public ::testing::Test +{ +protected: + void SetUp() override + { + // Create a test node + node_ = std::make_shared("test_diagnostics_interface"); + } + + // Automatically destroyed at the end of each test + std::shared_ptr node_; +}; + +/* + * Test clear(): + * Verify that calling clear() resets DiagnosticStatus values, level, and message. + */ +TEST_F(TestDiagnosticInterface, ClearTest) +{ + DiagnosticInterface module(node_.get(), "test_diagnostic"); + + // Add some key-value pairs and update level/message + module.add_key_value("param1", 42); + module.update_level_and_message( + diagnostic_msgs::msg::DiagnosticStatus::WARN, "Something is not OK"); + + // Call clear() + module.clear(); + + // After calling clear(), publish and check the contents of the message + diagnostic_msgs::msg::DiagnosticArray::ConstSharedPtr received_msg; + auto sub = node_->create_subscription( + "/diagnostics", 10, + [&](diagnostic_msgs::msg::DiagnosticArray::ConstSharedPtr msg) { received_msg = msg; }); + + // Publish the message + module.publish(node_->now()); + + // Spin to allow the subscriber to receive messages + rclcpp::spin_some(node_); + + ASSERT_NE(nullptr, received_msg); + ASSERT_FALSE(received_msg->status.empty()); + const auto & status = received_msg->status.front(); + + // After clear(), key-value pairs should be empty + EXPECT_TRUE(status.values.empty()); + + // After clear(), level should be OK (=0) + EXPECT_EQ(status.level, diagnostic_msgs::msg::DiagnosticStatus::OK); + + // After clear(), message is empty internally, + // but "OK" is set during publishing when level == OK + EXPECT_EQ(status.message, "OK"); +} + +/* + * Test add_key_value(): + * Verify that adding the same key updates its value instead of adding a duplicate. + */ +TEST_F(TestDiagnosticInterface, AddKeyValueTest) +{ + DiagnosticInterface module(node_.get(), "test_diagnostic"); + + // Call the template version of add_key_value() with different types + module.add_key_value("string_key", std::string("initial_value")); + module.add_key_value("int_key", 123); + module.add_key_value("bool_key", true); + + // Overwrite the value for "string_key" + module.add_key_value("string_key", std::string("updated_value")); + + // Capture the published message to verify its contents + diagnostic_msgs::msg::DiagnosticArray::ConstSharedPtr received_msg; + auto sub = node_->create_subscription( + "/diagnostics", 10, + [&](diagnostic_msgs::msg::DiagnosticArray::ConstSharedPtr msg) { received_msg = msg; }); + module.publish(node_->now()); + rclcpp::spin_some(node_); + + ASSERT_NE(nullptr, received_msg); + ASSERT_FALSE(received_msg->status.empty()); + const auto & status = received_msg->status.front(); + + // Expect 3 key-value pairs + ASSERT_EQ(status.values.size(), 3U); + + // Helper lambda to find a value by key + auto find_value = [&](const std::string & key) -> std::string { + for (const auto & kv : status.values) { + if (kv.key == key) { + return kv.value; + } + } + return ""; + }; + + EXPECT_EQ(find_value("string_key"), "updated_value"); + EXPECT_EQ(find_value("int_key"), "123"); + EXPECT_EQ(find_value("bool_key"), "True"); + + // Status level should still be OK + EXPECT_EQ(status.level, diagnostic_msgs::msg::DiagnosticStatus::OK); + // Message should be "OK" + EXPECT_EQ(status.message, "OK"); +} + +/* + * Test update_level_and_message(): + * Verify that the level is updated to the highest severity and + * that messages are concatenated if level > OK. + */ +TEST_F(TestDiagnosticInterface, UpdateLevelAndMessageTest) +{ + DiagnosticInterface module(node_.get(), "test_diagnostic"); + + // Initial status is level=OK(0), message="" + module.update_level_and_message(diagnostic_msgs::msg::DiagnosticStatus::OK, "Initial OK"); + // Update to WARN (1) + module.update_level_and_message(diagnostic_msgs::msg::DiagnosticStatus::WARN, "Low battery"); + // Update to ERROR (2) + module.update_level_and_message(diagnostic_msgs::msg::DiagnosticStatus::ERROR, "Sensor failure"); + // Another WARN (1) after ERROR should not downgrade the overall level + module.update_level_and_message( + diagnostic_msgs::msg::DiagnosticStatus::WARN, "Should not override error"); + + diagnostic_msgs::msg::DiagnosticArray::ConstSharedPtr received_msg; + auto sub = node_->create_subscription( + "/diagnostics", 10, + [&](diagnostic_msgs::msg::DiagnosticArray::ConstSharedPtr msg) { received_msg = msg; }); + + module.publish(node_->now()); + rclcpp::spin_some(node_); + + ASSERT_NE(nullptr, received_msg); + ASSERT_FALSE(received_msg->status.empty()); + const auto & status = received_msg->status.front(); + + // Final level should be ERROR (2) + EXPECT_EQ(status.level, diagnostic_msgs::msg::DiagnosticStatus::ERROR); + + // The message should contain all parts that were added when level > OK. + // Thus, we expect something like: + // "Low battery; Sensor failure; Should not override error" + const std::string & final_message = status.message; + EXPECT_FALSE(final_message.find("Initial OK") != std::string::npos); + EXPECT_TRUE(final_message.find("Low battery") != std::string::npos); + EXPECT_TRUE(final_message.find("Sensor failure") != std::string::npos); + EXPECT_TRUE(final_message.find("Should not override error") != std::string::npos); +} diff --git a/localization/autoware_gyro_odometer/src/gyro_odometer_core.cpp b/localization/autoware_gyro_odometer/src/gyro_odometer_core.cpp index 9511f168f346f..d52fb5e798b58 100644 --- a/localization/autoware_gyro_odometer/src/gyro_odometer_core.cpp +++ b/localization/autoware_gyro_odometer/src/gyro_odometer_core.cpp @@ -73,7 +73,7 @@ GyroOdometerNode::GyroOdometerNode(const rclcpp::NodeOptions & node_options) "twist_with_covariance", rclcpp::QoS{10}); diagnostics_ = - std::make_unique(this, "gyro_odometer_status"); + std::make_unique(this, "gyro_odometer_status"); // TODO(YamatoAndo) createTimer } diff --git a/localization/autoware_gyro_odometer/src/gyro_odometer_core.hpp b/localization/autoware_gyro_odometer/src/gyro_odometer_core.hpp index 036b3d7cab527..70334738e9ce3 100644 --- a/localization/autoware_gyro_odometer/src/gyro_odometer_core.hpp +++ b/localization/autoware_gyro_odometer/src/gyro_odometer_core.hpp @@ -15,7 +15,7 @@ #ifndef GYRO_ODOMETER_CORE_HPP_ #define GYRO_ODOMETER_CORE_HPP_ -#include "autoware/localization_util/diagnostics_module.hpp" +#include "autoware/universe_utils/ros/diagnostics_interface.hpp" #include "autoware/universe_utils/ros/logger_level_configure.hpp" #include "autoware/universe_utils/ros/msg_covariance.hpp" #include "autoware/universe_utils/ros/transform_listener.hpp" @@ -80,7 +80,7 @@ class GyroOdometerNode : public rclcpp::Node std::deque vehicle_twist_queue_; std::deque gyro_queue_; - std::unique_ptr diagnostics_; + std::unique_ptr diagnostics_; }; } // namespace autoware::gyro_odometer diff --git a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.cpp b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.cpp index 2faf2d19168a5..bc7dbbcfc9ca1 100644 --- a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.cpp +++ b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.cpp @@ -124,22 +124,22 @@ LidarMarkerLocalizer::LidarMarkerLocalizer(const rclcpp::NodeOptions & node_opti tf_buffer_ = std::make_shared(this->get_clock()); tf_listener_ = std::make_shared(*tf_buffer_, this, false); - diagnostics_module_.reset( - new autoware::localization_util::DiagnosticsModule(this, "marker_detection_status")); + diagnostics_interface_.reset( + new autoware::universe_utils::DiagnosticInterface(this, "marker_detection_status")); } void LidarMarkerLocalizer::initialize_diagnostics() { - diagnostics_module_->clear(); - diagnostics_module_->add_key_value("is_received_map", false); - diagnostics_module_->add_key_value("is_received_self_pose", false); - diagnostics_module_->add_key_value("detect_marker_num", 0); - diagnostics_module_->add_key_value("distance_self_pose_to_nearest_marker", 0.0); - diagnostics_module_->add_key_value( + diagnostics_interface_->clear(); + diagnostics_interface_->add_key_value("is_received_map", false); + diagnostics_interface_->add_key_value("is_received_self_pose", false); + diagnostics_interface_->add_key_value("detect_marker_num", 0); + diagnostics_interface_->add_key_value("distance_self_pose_to_nearest_marker", 0.0); + diagnostics_interface_->add_key_value( "limit_distance_from_self_pose_to_nearest_marker", param_.limit_distance_from_self_pose_to_nearest_marker); - diagnostics_module_->add_key_value("distance_lanelet2_marker_to_detected_marker", 0.0); - diagnostics_module_->add_key_value( + diagnostics_interface_->add_key_value("distance_lanelet2_marker_to_detected_marker", 0.0); + diagnostics_interface_->add_key_value( "limit_distance_from_lanelet2_marker_to_detected_marker", param_.limit_distance_from_self_pose_to_marker); } @@ -176,7 +176,7 @@ void LidarMarkerLocalizer::points_callback(const PointCloud2::ConstSharedPtr & p main_process(points_msg_ptr); - diagnostics_module_->publish(sensor_ros_time); + diagnostics_interface_->publish(sensor_ros_time); } void LidarMarkerLocalizer::main_process(const PointCloud2::ConstSharedPtr & points_msg_ptr) @@ -186,13 +186,13 @@ void LidarMarkerLocalizer::main_process(const PointCloud2::ConstSharedPtr & poin // (1) check if the map have be received const std::vector map_landmarks = landmark_manager_.get_landmarks(); const bool is_received_map = !map_landmarks.empty(); - diagnostics_module_->add_key_value("is_received_map", is_received_map); + diagnostics_interface_->add_key_value("is_received_map", is_received_map); if (!is_received_map) { std::stringstream message; message << "Not receive the landmark information. Please check if the vector map is being " << "published and if the landmark information is correctly specified."; RCLCPP_INFO_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); - diagnostics_module_->update_level_and_message( + diagnostics_interface_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return; } @@ -202,13 +202,13 @@ void LidarMarkerLocalizer::main_process(const PointCloud2::ConstSharedPtr & poin interpolate_result = ekf_pose_buffer_->interpolate(sensor_ros_time); const bool is_received_self_pose = interpolate_result != std::nullopt; - diagnostics_module_->add_key_value("is_received_self_pose", is_received_self_pose); + diagnostics_interface_->add_key_value("is_received_self_pose", is_received_self_pose); if (!is_received_self_pose) { std::stringstream message; message << "Could not get self_pose. Please check if the self pose is being published and if " << "the timestamp of the self pose is correctly specified"; RCLCPP_INFO_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); - diagnostics_module_->update_level_and_message( + diagnostics_interface_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return; } @@ -221,7 +221,7 @@ void LidarMarkerLocalizer::main_process(const PointCloud2::ConstSharedPtr & poin detect_landmarks(points_msg_ptr); const bool is_detected_marker = !detected_landmarks.empty(); - diagnostics_module_->add_key_value("detect_marker_num", detected_landmarks.size()); + diagnostics_interface_->add_key_value("detect_marker_num", detected_landmarks.size()); // (4) check distance to the nearest marker const landmark_manager::Landmark nearest_marker = get_nearest_landmark(self_pose, map_landmarks); @@ -230,7 +230,7 @@ void LidarMarkerLocalizer::main_process(const PointCloud2::ConstSharedPtr & poin const double distance_from_self_pose_to_nearest_marker = std::abs(nearest_marker_pose_on_base_link.position.x); - diagnostics_module_->add_key_value( + diagnostics_interface_->add_key_value( "distance_self_pose_to_nearest_marker", distance_from_self_pose_to_nearest_marker); const bool is_exist_marker_within_self_pose = @@ -242,14 +242,14 @@ void LidarMarkerLocalizer::main_process(const PointCloud2::ConstSharedPtr & poin std::stringstream message; message << "Could not detect marker, because the distance from self_pose to nearest_marker " << "is too far (" << distance_from_self_pose_to_nearest_marker << " [m])."; - diagnostics_module_->update_level_and_message( + diagnostics_interface_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::OK, message.str()); } else { std::stringstream message; message << "Could not detect marker, although the distance from self_pose to nearest_marker " << "is near (" << distance_from_self_pose_to_nearest_marker << " [m])."; RCLCPP_INFO_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); - diagnostics_module_->update_level_and_message( + diagnostics_interface_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); } return; @@ -279,13 +279,13 @@ void LidarMarkerLocalizer::main_process(const PointCloud2::ConstSharedPtr & poin const bool is_exist_marker_within_lanelet2_map = diff_norm < param_.limit_distance_from_self_pose_to_marker; - diagnostics_module_->add_key_value("distance_lanelet2_marker_to_detected_marker", diff_norm); + diagnostics_interface_->add_key_value("distance_lanelet2_marker_to_detected_marker", diff_norm); if (!is_exist_marker_within_lanelet2_map) { std::stringstream message; message << "The distance from lanelet2 to the detect marker is too far(" << diff_norm << " [m]). The limit is " << param_.limit_distance_from_self_pose_to_marker << "."; RCLCPP_INFO_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); - diagnostics_module_->update_level_and_message( + diagnostics_interface_->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); return; } diff --git a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.hpp b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.hpp index d1482c6912592..1b5672cff9d04 100644 --- a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.hpp +++ b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.hpp @@ -15,8 +15,8 @@ #ifndef LIDAR_MARKER_LOCALIZER_HPP_ #define LIDAR_MARKER_LOCALIZER_HPP_ -#include "autoware/localization_util/diagnostics_module.hpp" #include "autoware/localization_util/smart_pose_buffer.hpp" +#include "autoware/universe_utils/ros/diagnostics_interface.hpp" #include @@ -134,7 +134,7 @@ class LidarMarkerLocalizer : public rclcpp::Node rclcpp::Publisher::SharedPtr pub_debug_pose_with_covariance_; rclcpp::Publisher::SharedPtr pub_marker_pointcloud_; - std::shared_ptr diagnostics_module_; + std::shared_ptr diagnostics_interface_; Param param_; bool is_activated_; diff --git a/localization/autoware_localization_error_monitor/CHANGELOG.rst b/localization/autoware_localization_error_monitor/CHANGELOG.rst index e9583916e2e8f..69833a04a8d3a 100644 --- a/localization/autoware_localization_error_monitor/CHANGELOG.rst +++ b/localization/autoware_localization_error_monitor/CHANGELOG.rst @@ -43,8 +43,8 @@ Changelog for package autoware_localization_error_monitor * unify package.xml version to 0.37.0 * refactor(localization_util)!: prefix package and namespace with autoware (`#8922 `_) add autoware prefix to localization_util -* fix(localization_error_monitor, system diag): fix to use diagnostics_module in localization_util (`#8543 `_) - * fix(localization_error_monitor): fix to use diagnostics_module in localization_util +* fix(localization_error_monitor, system diag): fix to use diagnostics_interface in localization_util (`#8543 `_) + * fix(localization_error_monitor): fix to use diagnostics_interface in localization_util * fix: update media * fix: update component name * fix: rename include file diff --git a/localization/autoware_localization_error_monitor/src/localization_error_monitor.cpp b/localization/autoware_localization_error_monitor/src/localization_error_monitor.cpp index 63edbe5f6a9c7..5ebcd105d57ba 100644 --- a/localization/autoware_localization_error_monitor/src/localization_error_monitor.cpp +++ b/localization/autoware_localization_error_monitor/src/localization_error_monitor.cpp @@ -59,7 +59,7 @@ LocalizationErrorMonitor::LocalizationErrorMonitor(const rclcpp::NodeOptions & o logger_configure_ = std::make_unique(this); diagnostics_error_monitor_ = - std::make_unique(this, "ellipse_error_status"); + std::make_unique(this, "ellipse_error_status"); } void LocalizationErrorMonitor::on_odom(nav_msgs::msg::Odometry::ConstSharedPtr input_msg) diff --git a/localization/autoware_localization_error_monitor/src/localization_error_monitor.hpp b/localization/autoware_localization_error_monitor/src/localization_error_monitor.hpp index 7b26573964b38..b38958c420b19 100644 --- a/localization/autoware_localization_error_monitor/src/localization_error_monitor.hpp +++ b/localization/autoware_localization_error_monitor/src/localization_error_monitor.hpp @@ -16,7 +16,7 @@ #define LOCALIZATION_ERROR_MONITOR_HPP_ #include "autoware/localization_util/covariance_ellipse.hpp" -#include "autoware/localization_util/diagnostics_module.hpp" +#include "autoware/universe_utils/ros/diagnostics_interface.hpp" #include #include @@ -39,7 +39,7 @@ class LocalizationErrorMonitor : public rclcpp::Node std::unique_ptr logger_configure_; - std::unique_ptr diagnostics_error_monitor_; + std::unique_ptr diagnostics_error_monitor_; double scale_; double error_ellipse_size_; diff --git a/localization/autoware_localization_util/CMakeLists.txt b/localization/autoware_localization_util/CMakeLists.txt index dd18f3cbad932..de62633124f3d 100644 --- a/localization/autoware_localization_util/CMakeLists.txt +++ b/localization/autoware_localization_util/CMakeLists.txt @@ -6,7 +6,6 @@ autoware_package() ament_auto_add_library(${PROJECT_NAME} SHARED src/util_func.cpp - src/diagnostics_module.cpp src/smart_pose_buffer.cpp src/tree_structured_parzen_estimator.cpp src/covariance_ellipse.cpp diff --git a/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/map_update_module.hpp b/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/map_update_module.hpp index d2dce42e3923e..bf8fce2b302c0 100644 --- a/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/map_update_module.hpp +++ b/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/map_update_module.hpp @@ -15,8 +15,8 @@ #ifndef AUTOWARE__NDT_SCAN_MATCHER__MAP_UPDATE_MODULE_HPP_ #define AUTOWARE__NDT_SCAN_MATCHER__MAP_UPDATE_MODULE_HPP_ -#include "autoware/localization_util/diagnostics_module.hpp" #include "autoware/localization_util/util_func.hpp" +#include "autoware/universe_utils/ros/diagnostics_interface.hpp" #include "hyper_parameters.hpp" #include "ndt_omp/multigrid_ndt_omp.h" #include "particle.hpp" @@ -42,7 +42,7 @@ namespace autoware::ndt_scan_matcher { -using DiagnosticsModule = autoware::localization_util::DiagnosticsModule; +using DiagnosticInterface = autoware::universe_utils::DiagnosticInterface; class MapUpdateModule { @@ -63,19 +63,19 @@ class MapUpdateModule void callback_timer( const bool is_activated, const std::optional & position, - std::unique_ptr & diagnostics_ptr); + std::unique_ptr & diagnostics_ptr); [[nodiscard]] bool should_update_map( const geometry_msgs::msg::Point & position, - std::unique_ptr & diagnostics_ptr); + std::unique_ptr & diagnostics_ptr); void update_map( const geometry_msgs::msg::Point & position, - std::unique_ptr & diagnostics_ptr); + std::unique_ptr & diagnostics_ptr); // Update the specified NDT bool update_ndt( const geometry_msgs::msg::Point & position, NdtType & ndt, - std::unique_ptr & diagnostics_ptr); + std::unique_ptr & diagnostics_ptr); void publish_partial_pcd_map(); rclcpp::Publisher::SharedPtr loaded_pcd_pub_; diff --git a/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/ndt_scan_matcher_core.hpp b/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/ndt_scan_matcher_core.hpp index 22b6bfb2ff740..25b7417ffbe3c 100644 --- a/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/ndt_scan_matcher_core.hpp +++ b/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/ndt_scan_matcher_core.hpp @@ -17,8 +17,8 @@ #define FMT_HEADER_ONLY -#include "autoware/localization_util/diagnostics_module.hpp" #include "autoware/localization_util/smart_pose_buffer.hpp" +#include "autoware/universe_utils/ros/diagnostics_interface.hpp" #include "hyper_parameters.hpp" #include "map_update_module.hpp" #include "ndt_omp/multigrid_ndt_omp.h" @@ -211,12 +211,12 @@ class NDTScanMatcher : public rclcpp::Node std::unique_ptr regularization_pose_buffer_; std::atomic is_activated_; - std::unique_ptr diagnostics_scan_points_; - std::unique_ptr diagnostics_initial_pose_; - std::unique_ptr diagnostics_regularization_pose_; - std::unique_ptr diagnostics_map_update_; - std::unique_ptr diagnostics_ndt_align_; - std::unique_ptr diagnostics_trigger_node_; + std::unique_ptr diagnostics_scan_points_; + std::unique_ptr diagnostics_initial_pose_; + std::unique_ptr diagnostics_regularization_pose_; + std::unique_ptr diagnostics_map_update_; + std::unique_ptr diagnostics_ndt_align_; + std::unique_ptr diagnostics_trigger_node_; std::unique_ptr map_update_module_; std::unique_ptr logger_configure_; diff --git a/localization/autoware_ndt_scan_matcher/src/map_update_module.cpp b/localization/autoware_ndt_scan_matcher/src/map_update_module.cpp index 25b51b55aebd7..eea0b8f3d06c4 100644 --- a/localization/autoware_ndt_scan_matcher/src/map_update_module.cpp +++ b/localization/autoware_ndt_scan_matcher/src/map_update_module.cpp @@ -56,7 +56,7 @@ MapUpdateModule::MapUpdateModule( void MapUpdateModule::callback_timer( const bool is_activated, const std::optional & position, - std::unique_ptr & diagnostics_ptr) + std::unique_ptr & diagnostics_ptr) { // check is_activated diagnostics_ptr->add_key_value("is_activated", is_activated); @@ -86,7 +86,8 @@ void MapUpdateModule::callback_timer( } bool MapUpdateModule::should_update_map( - const geometry_msgs::msg::Point & position, std::unique_ptr & diagnostics_ptr) + const geometry_msgs::msg::Point & position, + std::unique_ptr & diagnostics_ptr) { last_update_position_mtx_.lock(); @@ -141,7 +142,8 @@ bool MapUpdateModule::out_of_map_range(const geometry_msgs::msg::Point & positio } void MapUpdateModule::update_map( - const geometry_msgs::msg::Point & position, std::unique_ptr & diagnostics_ptr) + const geometry_msgs::msg::Point & position, + std::unique_ptr & diagnostics_ptr) { diagnostics_ptr->add_key_value("is_need_rebuild", need_rebuild_); @@ -229,7 +231,7 @@ void MapUpdateModule::update_map( bool MapUpdateModule::update_ndt( const geometry_msgs::msg::Point & position, NdtType & ndt, - std::unique_ptr & diagnostics_ptr) + std::unique_ptr & diagnostics_ptr) { diagnostics_ptr->add_key_value("maps_size_before", ndt.getCurrentMapIDs().size()); diff --git a/localization/autoware_ndt_scan_matcher/src/ndt_scan_matcher_core.cpp b/localization/autoware_ndt_scan_matcher/src/ndt_scan_matcher_core.cpp index a1871023d525b..cef8724423bed 100644 --- a/localization/autoware_ndt_scan_matcher/src/ndt_scan_matcher_core.cpp +++ b/localization/autoware_ndt_scan_matcher/src/ndt_scan_matcher_core.cpp @@ -49,9 +49,9 @@ using autoware::localization_util::matrix4f_to_pose; using autoware::localization_util::point_to_vector3d; using autoware::localization_util::pose_to_matrix4f; -using autoware::localization_util::DiagnosticsModule; using autoware::localization_util::SmartPoseBuffer; using autoware::localization_util::TreeStructuredParzenEstimator; +using autoware::universe_utils::DiagnosticInterface; tier4_debug_msgs::msg::Float32Stamped make_float32_stamped( const builtin_interfaces::msg::Time & stamp, const float data) @@ -141,7 +141,7 @@ NDTScanMatcher::NDTScanMatcher(const rclcpp::NodeOptions & options) std::make_unique(this->get_logger(), value_as_unlimited, value_as_unlimited); diagnostics_regularization_pose_ = - std::make_unique(this, "regularization_pose_subscriber_status"); + std::make_unique(this, "regularization_pose_subscriber_status"); } sensor_aligned_pose_pub_ = @@ -209,13 +209,13 @@ NDTScanMatcher::NDTScanMatcher(const rclcpp::NodeOptions & options) map_update_module_ = std::make_unique(this, &ndt_ptr_mtx_, ndt_ptr_, param_.dynamic_map_loading); - diagnostics_scan_points_ = std::make_unique(this, "scan_matching_status"); + diagnostics_scan_points_ = std::make_unique(this, "scan_matching_status"); diagnostics_initial_pose_ = - std::make_unique(this, "initial_pose_subscriber_status"); - diagnostics_map_update_ = std::make_unique(this, "map_update_status"); - diagnostics_ndt_align_ = std::make_unique(this, "ndt_align_service_status"); + std::make_unique(this, "initial_pose_subscriber_status"); + diagnostics_map_update_ = std::make_unique(this, "map_update_status"); + diagnostics_ndt_align_ = std::make_unique(this, "ndt_align_service_status"); diagnostics_trigger_node_ = - std::make_unique(this, "trigger_node_service_status"); + std::make_unique(this, "trigger_node_service_status"); logger_configure_ = std::make_unique(this); } diff --git a/localization/autoware_pose_initializer/package.xml b/localization/autoware_pose_initializer/package.xml index eeeb46a8db3e5..de3ecd880ea45 100644 --- a/localization/autoware_pose_initializer/package.xml +++ b/localization/autoware_pose_initializer/package.xml @@ -21,7 +21,6 @@ autoware_component_interface_specs autoware_component_interface_utils - autoware_localization_util autoware_map_height_fitter autoware_motion_utils autoware_universe_utils diff --git a/localization/autoware_pose_initializer/src/pose_initializer_core.cpp b/localization/autoware_pose_initializer/src/pose_initializer_core.cpp index 5e9c68d2acc80..67d5c447c09b6 100644 --- a/localization/autoware_pose_initializer/src/pose_initializer_core.cpp +++ b/localization/autoware_pose_initializer/src/pose_initializer_core.cpp @@ -40,7 +40,7 @@ PoseInitializer::PoseInitializer(const rclcpp::NodeOptions & options) output_pose_covariance_ = get_covariance_parameter(this, "output_pose_covariance"); gnss_particle_covariance_ = get_covariance_parameter(this, "gnss_particle_covariance"); - diagnostics_pose_reliable_ = std::make_unique( + diagnostics_pose_reliable_ = std::make_unique( this, "pose_initializer_status"); if (declare_parameter("ekf_enabled")) { diff --git a/localization/autoware_pose_initializer/src/pose_initializer_core.hpp b/localization/autoware_pose_initializer/src/pose_initializer_core.hpp index 28d2eae08c3f1..5305bcc3ad347 100644 --- a/localization/autoware_pose_initializer/src/pose_initializer_core.hpp +++ b/localization/autoware_pose_initializer/src/pose_initializer_core.hpp @@ -15,10 +15,9 @@ #ifndef POSE_INITIALIZER_CORE_HPP_ #define POSE_INITIALIZER_CORE_HPP_ -#include "autoware/localization_util/diagnostics_module.hpp" - #include #include +#include #include #include @@ -61,7 +60,7 @@ class PoseInitializer : public rclcpp::Node std::unique_ptr ekf_localization_trigger_; std::unique_ptr ndt_localization_trigger_; std::unique_ptr logger_configure_; - std::unique_ptr diagnostics_pose_reliable_; + std::unique_ptr diagnostics_pose_reliable_; double stop_check_duration_; void change_node_trigger(bool flag, bool need_spin = false); From 3d53032a827477c9c2cb83e80be3222e1d64bf03 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Wed, 25 Dec 2024 12:38:28 +0900 Subject: [PATCH 02/77] chore(autoware_multi_object_tracker): fix autoware univserse documentation page (#9772) * feat: Add descriptions for confidence thresholds in multi_object_tracker_node schema Signed-off-by: Taekjin LEE * feat: Update multi_object_tracker_node schema with confidence threshold descriptions Signed-off-by: Taekjin LEE --------- Signed-off-by: Taekjin LEE --- perception/autoware_multi_object_tracker/README.md | 5 +++++ .../schema/multi_object_tracker_node.schema.json | 11 +++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/perception/autoware_multi_object_tracker/README.md b/perception/autoware_multi_object_tracker/README.md index afb1598645733..3f83817f6509f 100644 --- a/perception/autoware_multi_object_tracker/README.md +++ b/perception/autoware_multi_object_tracker/README.md @@ -69,7 +69,12 @@ Multiple inputs are pre-defined in the input channel parameters (described below ### Core Parameters +- Node + {{ json_to_markdown("perception/autoware_multi_object_tracker/schema/multi_object_tracker_node.schema.json") }} + +- Association + {{ json_to_markdown("perception/autoware_multi_object_tracker/schema/data_association_matrix.schema.json") }} #### Simulation parameters diff --git a/perception/autoware_multi_object_tracker/schema/multi_object_tracker_node.schema.json b/perception/autoware_multi_object_tracker/schema/multi_object_tracker_node.schema.json index f32db284c1738..d3bca273da803 100644 --- a/perception/autoware_multi_object_tracker/schema/multi_object_tracker_node.schema.json +++ b/perception/autoware_multi_object_tracker/schema/multi_object_tracker_node.schema.json @@ -86,38 +86,45 @@ "properties": { "UNKNOWN": { "type": "number", + "description": "Number of measurements to consider tracker as confident for unknown object classes.", "default": 3 }, "CAR": { "type": "number", + "description": "Number of measurements to consider tracker as confident for car object classes.", "default": 3 }, "TRUCK": { "type": "number", + "description": "Number of measurements to consider tracker as confident for truck object classes.", "default": 3 }, "BUS": { "type": "number", + "description": "Number of measurements to consider tracker as confident for bus object classes.", "default": 3 }, "TRAILER": { "type": "number", + "description": "Number of measurements to consider tracker as confident for trailer object classes.", "default": 3 }, "MOTORBIKE": { "type": "number", + "description": "Number of measurements to consider tracker as confident for motorbike object classes.", "default": 3 }, "BICYCLE": { "type": "number", + "description": "Number of measurements to consider tracker as confident for bicycle object classes.", "default": 3 }, "PEDESTRIAN": { "type": "number", + "description": "Number of measurements to consider tracker as confident for pedestrian object classes.", "default": 3 } - }, - "description": "Number of measurements to consider tracker as confident for different object classes." + } }, "publish_processing_time": { "type": "boolean", From b764c57c89182bbf631c51bec10cc0826dcc13fd Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 25 Dec 2024 13:58:37 +0900 Subject: [PATCH 03/77] feat(behavior_path_planner): use autoware internal stamped messages (#9750) * feat(behavior_path_planner): use autoware internal stamped messages Signed-off-by: Takayuki Murooka * fix universe_utils Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../universe_utils/ros/debug_traits.hpp | 62 +++++++++++++++++++ common/autoware_universe_utils/package.xml | 1 + .../behavior_path_planner/planner_manager.hpp | 6 +- .../package.xml | 1 + 4 files changed, 68 insertions(+), 2 deletions(-) diff --git a/common/autoware_universe_utils/include/autoware/universe_utils/ros/debug_traits.hpp b/common/autoware_universe_utils/include/autoware/universe_utils/ros/debug_traits.hpp index 8420f930e0ce9..5878641676d9f 100644 --- a/common/autoware_universe_utils/include/autoware/universe_utils/ros/debug_traits.hpp +++ b/common/autoware_universe_utils/include/autoware/universe_utils/ros/debug_traits.hpp @@ -15,6 +15,16 @@ #ifndef AUTOWARE__UNIVERSE_UTILS__ROS__DEBUG_TRAITS_HPP_ #define AUTOWARE__UNIVERSE_UTILS__ROS__DEBUG_TRAITS_HPP_ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include #include #include @@ -84,6 +94,58 @@ template <> struct is_debug_message : std::true_type { }; + +template <> +struct is_debug_message : std::true_type +{ +}; + +template <> +struct is_debug_message +: std::true_type +{ +}; + +template <> +struct is_debug_message : std::true_type +{ +}; + +template <> +struct is_debug_message +: std::true_type +{ +}; + +template <> +struct is_debug_message : std::true_type +{ +}; + +template <> +struct is_debug_message : std::true_type +{ +}; + +template <> +struct is_debug_message : std::true_type +{ +}; + +template <> +struct is_debug_message : std::true_type +{ +}; + +template <> +struct is_debug_message : std::true_type +{ +}; + +template <> +struct is_debug_message : std::true_type +{ +}; } // namespace autoware::universe_utils::debug_traits #endif // AUTOWARE__UNIVERSE_UTILS__ROS__DEBUG_TRAITS_HPP_ diff --git a/common/autoware_universe_utils/package.xml b/common/autoware_universe_utils/package.xml index d04e1a57e78ab..0e7b892a8c689 100644 --- a/common/autoware_universe_utils/package.xml +++ b/common/autoware_universe_utils/package.xml @@ -12,6 +12,7 @@ ament_cmake_auto autoware_cmake + autoware_internal_debug_msgs autoware_internal_msgs autoware_perception_msgs autoware_planning_msgs diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/planner_manager.hpp b/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/planner_manager.hpp index 3bed1e6a88bd8..741202590779c 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/planner_manager.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/planner_manager.hpp @@ -25,6 +25,8 @@ #include #include +#include +#include #include #include @@ -44,8 +46,8 @@ using tier4_planning_msgs::msg::PathWithLaneId; using SceneModulePtr = std::shared_ptr; using SceneModuleManagerPtr = std::shared_ptr; using DebugPublisher = autoware::universe_utils::DebugPublisher; -using DebugDoubleMsg = tier4_debug_msgs::msg::Float64Stamped; -using DebugStringMsg = tier4_debug_msgs::msg::StringStamped; +using DebugDoubleMsg = autoware_internal_debug_msgs::msg::Float64Stamped; +using DebugStringMsg = autoware_internal_debug_msgs::msg::StringStamped; struct SceneModuleUpdateInfo { diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/package.xml b/planning/behavior_path_planner/autoware_behavior_path_planner/package.xml index 6141480d1597a..7b7e2438a3fd6 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/package.xml +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/package.xml @@ -40,6 +40,7 @@ autoware_behavior_path_planner_common autoware_freespace_planning_algorithms autoware_frenet_planner + autoware_internal_debug_msgs autoware_interpolation autoware_lane_departure_checker autoware_lanelet2_extension From fe597e2a5118f267260785bd4fc68c9648d31835 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Wed, 25 Dec 2024 15:10:41 +0900 Subject: [PATCH 04/77] fix(autoware_motion_velocity_obstacle_velocity_limiter_module): fix bugprone-exception-escape (#9779) * fix: bugprone-error Signed-off-by: kobayu858 * fix: cppcheck Signed-off-by: kobayu858 * fix: cpplint Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../collision_checker_benchmark.cpp | 85 ++++++++++--------- 1 file changed, 47 insertions(+), 38 deletions(-) diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/benchmarks/collision_checker_benchmark.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/benchmarks/collision_checker_benchmark.cpp index 79b817c51169c..1d980e220ccef 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/benchmarks/collision_checker_benchmark.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/benchmarks/collision_checker_benchmark.cpp @@ -16,6 +16,7 @@ #include "../src/types.hpp" #include +#include #include #include @@ -55,45 +56,53 @@ polygon_t random_polygon() int main() { - Obstacles obstacles; - std::vector polygons; - polygons.reserve(100); - for (auto i = 0; i < 100; ++i) { - polygons.push_back(random_polygon()); - } - for (auto nb_lines = 1lu; nb_lines < 1000lu; nb_lines += 10) { - obstacles.lines.push_back(random_line()); - obstacles.points.clear(); - for (auto nb_points = 1lu; nb_points < 1000lu; nb_points += 10) { - obstacles.points.push_back(random_point()); - const auto rtt_constr_start = std::chrono::system_clock::now(); - CollisionChecker rtree_collision_checker(obstacles, 0, 0); - const auto rtt_constr_end = std::chrono::system_clock::now(); - const auto naive_constr_start = std::chrono::system_clock::now(); - CollisionChecker naive_collision_checker(obstacles, nb_points + 1, nb_lines * 100); - const auto naive_constr_end = std::chrono::system_clock::now(); - const auto rtt_check_start = std::chrono::system_clock::now(); - for (const auto & polygon : polygons) - // cppcheck-suppress unreadVariable - const auto rtree_result = rtree_collision_checker.intersections(polygon); - const auto rtt_check_end = std::chrono::system_clock::now(); - const auto naive_check_start = std::chrono::system_clock::now(); - for (const auto & polygon : polygons) - // cppcheck-suppress unreadVariable - const auto naive_result = naive_collision_checker.intersections(polygon); - const auto naive_check_end = std::chrono::system_clock::now(); - const auto rtt_constr_time = - std::chrono::duration_cast(rtt_constr_end - rtt_constr_start); - const auto naive_constr_time = - std::chrono::duration_cast(naive_constr_end - naive_constr_start); - const auto rtt_check_time = - std::chrono::duration_cast(rtt_check_end - rtt_check_start); - const auto naive_check_time = - std::chrono::duration_cast(naive_check_end - naive_check_start); - std::printf( - "%lu, %lu, %ld, %ld, %ld, %ld\n", nb_lines, nb_points, rtt_constr_time.count(), - rtt_check_time.count(), naive_constr_time.count(), naive_check_time.count()); + try { + Obstacles obstacles; + std::vector polygons; + polygons.reserve(100); + for (auto i = 0; i < 100; ++i) { + polygons.push_back(random_polygon()); + } + for (auto nb_lines = 1lu; nb_lines < 1000lu; nb_lines += 10) { + obstacles.lines.push_back(random_line()); + obstacles.points.clear(); + for (auto nb_points = 1lu; nb_points < 1000lu; nb_points += 10) { + obstacles.points.push_back(random_point()); + const auto rtt_constr_start = std::chrono::system_clock::now(); + CollisionChecker rtree_collision_checker(obstacles, 0, 0); + const auto rtt_constr_end = std::chrono::system_clock::now(); + const auto naive_constr_start = std::chrono::system_clock::now(); + CollisionChecker naive_collision_checker(obstacles, nb_points + 1, nb_lines * 100); + const auto naive_constr_end = std::chrono::system_clock::now(); + const auto rtt_check_start = std::chrono::system_clock::now(); + for (const auto & polygon : polygons) + // cppcheck-suppress unreadVariable + const auto rtree_result = rtree_collision_checker.intersections(polygon); + const auto rtt_check_end = std::chrono::system_clock::now(); + const auto naive_check_start = std::chrono::system_clock::now(); + for (const auto & polygon : polygons) + // cppcheck-suppress unreadVariable + const auto naive_result = naive_collision_checker.intersections(polygon); + const auto naive_check_end = std::chrono::system_clock::now(); + const auto rtt_constr_time = + std::chrono::duration_cast(rtt_constr_end - rtt_constr_start); + const auto naive_constr_time = std::chrono::duration_cast( + naive_constr_end - naive_constr_start); + const auto rtt_check_time = + std::chrono::duration_cast(rtt_check_end - rtt_check_start); + const auto naive_check_time = + std::chrono::duration_cast(naive_check_end - naive_check_start); + std::printf( + "%lu, %lu, %ld, %ld, %ld, %ld\n", nb_lines, nb_points, rtt_constr_time.count(), + rtt_check_time.count(), naive_constr_time.count(), naive_check_time.count()); + } } + } catch (const std::exception & e) { + std::cerr << "Exception in main(): " << e.what() << std::endl; + return {}; + } catch (...) { + std::cerr << "Unknown exception in main()" << std::endl; + return {}; } return 0; } From d0c39d38cbf9d6f352f352aef41dc3f7b3590e1f Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Wed, 25 Dec 2024 15:12:44 +0900 Subject: [PATCH 05/77] fix(autoware_processing_time_checker): fix bugprone-exception-escape (#9780) * fix: bugprone-error Signed-off-by: kobayu858 * fix: cpplint Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../src/processing_time_checker.cpp | 79 ++++++++++--------- 1 file changed, 43 insertions(+), 36 deletions(-) diff --git a/system/autoware_processing_time_checker/src/processing_time_checker.cpp b/system/autoware_processing_time_checker/src/processing_time_checker.cpp index 1e3f04af8fa89..5455cdab422d5 100644 --- a/system/autoware_processing_time_checker/src/processing_time_checker.cpp +++ b/system/autoware_processing_time_checker/src/processing_time_checker.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include @@ -103,45 +104,51 @@ ProcessingTimeChecker::~ProcessingTimeChecker() return; } - // generate json data - nlohmann::json j; - for (const auto & accumulator_iterator : processing_time_accumulator_map_) { - const auto module_name = accumulator_iterator.first; - const auto processing_time_accumulator = accumulator_iterator.second; - j[module_name + "/min"] = processing_time_accumulator.min(); - j[module_name + "/max"] = processing_time_accumulator.max(); - j[module_name + "/mean"] = processing_time_accumulator.mean(); - j[module_name + "/count"] = processing_time_accumulator.count(); - j[module_name + "/description"] = "processing time of " + module_name + "[ms]"; - } + try { + // generate json data + nlohmann::json j; + for (const auto & accumulator_iterator : processing_time_accumulator_map_) { + const auto module_name = accumulator_iterator.first; + const auto processing_time_accumulator = accumulator_iterator.second; + j[module_name + "/min"] = processing_time_accumulator.min(); + j[module_name + "/max"] = processing_time_accumulator.max(); + j[module_name + "/mean"] = processing_time_accumulator.mean(); + j[module_name + "/count"] = processing_time_accumulator.count(); + j[module_name + "/description"] = "processing time of " + module_name + "[ms]"; + } - // get output folder - const std::string output_folder_str = - rclcpp::get_logging_directory().string() + "/autoware_metrics"; - if (!std::filesystem::exists(output_folder_str)) { - if (!std::filesystem::create_directories(output_folder_str)) { - RCLCPP_ERROR( - this->get_logger(), "Failed to create directories: %s", output_folder_str.c_str()); - return; + // get output folder + const std::string output_folder_str = + rclcpp::get_logging_directory().string() + "/autoware_metrics"; + if (!std::filesystem::exists(output_folder_str)) { + if (!std::filesystem::create_directories(output_folder_str)) { + RCLCPP_ERROR( + this->get_logger(), "Failed to create directories: %s", output_folder_str.c_str()); + return; + } } - } - // get time stamp - std::time_t now_time_t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); - std::tm * local_time = std::localtime(&now_time_t); - std::ostringstream oss; - oss << std::put_time(local_time, "%Y-%m-%d-%H-%M-%S"); - std::string cur_time_str = oss.str(); - - // Write metrics .json to file - const std::string output_file_str = - output_folder_str + "/autoware_processing_time_checker-" + cur_time_str + ".json"; - std::ofstream f(output_file_str); - if (f.is_open()) { - f << j.dump(4); - f.close(); - } else { - RCLCPP_ERROR(this->get_logger(), "Failed to open file: %s", output_file_str.c_str()); + // get time stamp + std::time_t now_time_t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); + std::tm * local_time = std::localtime(&now_time_t); + std::ostringstream oss; + oss << std::put_time(local_time, "%Y-%m-%d-%H-%M-%S"); + std::string cur_time_str = oss.str(); + + // Write metrics .json to file + const std::string output_file_str = + output_folder_str + "/autoware_processing_time_checker-" + cur_time_str + ".json"; + std::ofstream f(output_file_str); + if (f.is_open()) { + f << j.dump(4); + f.close(); + } else { + RCLCPP_ERROR(this->get_logger(), "Failed to open file: %s", output_file_str.c_str()); + } + } catch (const std::exception & e) { + std::cerr << "Exception in ProcessingTimeChecker: " << e.what() << std::endl; + } catch (...) { + std::cerr << "Unknown exception in ProcessingTimeChecker" << std::endl; } } From c11d613278ab3c7f7cfe014a6dcaf1ac1d4954ae Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Wed, 25 Dec 2024 15:18:21 +0900 Subject: [PATCH 06/77] fix(autoware_objects_of_interest_marker_interface): fix bugprone-branch-clone (#9671) Signed-off-by: kobayu858 --- .../src/objects_of_interest_marker_interface.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/planning/autoware_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 index cbdb2542b97e7..e18190a8bf9e7 100644 --- a/planning/autoware_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 @@ -76,14 +76,14 @@ ColorRGBA ObjectsOfInterestMarkerInterface::getColor( const ColorName & color_name, const float alpha) { switch (color_name) { + case ColorName::GRAY: + return coloring::getGray(alpha); case ColorName::GREEN: return coloring::getGreen(alpha); case ColorName::AMBER: return coloring::getAmber(alpha); case ColorName::RED: return coloring::getRed(alpha); - case ColorName::GRAY: - return coloring::getGray(alpha); default: return coloring::getGray(alpha); } From d2a9531b4a86be0ae10b8207a6c615aca575b105 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara <32741405+kyoichi-sugahara@users.noreply.github.com> Date: Wed, 25 Dec 2024 15:23:50 +0900 Subject: [PATCH 07/77] test(autoware_behavior_path_start_planner_module): add unit tests for shift shift pull out planner (#9776) feat(behavior_path_planner): add unit tests for ShiftPullOut path planning Signed-off-by: kyoichi-sugahara --- .../autoware_planning_test_manager_utils.hpp | 6 +- .../shift_pull_out.hpp | 2 + .../test/test_shift_pull_out.cpp | 179 ++++++++++++++++++ 3 files changed, 184 insertions(+), 3 deletions(-) create mode 100644 planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_shift_pull_out.cpp 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 5081b14dda63b..8a075594ebd3a 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 @@ -35,7 +35,7 @@ using geometry_msgs::msg::Pose; using nav_msgs::msg::Odometry; using RouteSections = std::vector; -Pose createPoseFromLaneID( +inline Pose createPoseFromLaneID( const lanelet::Id & lane_id, const std::string & package_name = "autoware_test_utils", const std::string & map_filename = "lanelet2_map.osm") { @@ -70,7 +70,7 @@ Pose createPoseFromLaneID( // Function to create a route from given start and goal lanelet ids // start pose and goal pose are set to the middle of the lanelet -LaneletRoute makeBehaviorRouteFromLaneId( +inline LaneletRoute makeBehaviorRouteFromLaneId( const int & start_lane_id, const int & goal_lane_id, const std::string & package_name = "autoware_test_utils", const std::string & map_filename = "lanelet2_map.osm") @@ -119,7 +119,7 @@ LaneletRoute makeBehaviorRouteFromLaneId( return route; } -Odometry makeInitialPoseFromLaneId(const lanelet::Id & lane_id) +inline Odometry makeInitialPoseFromLaneId(const lanelet::Id & lane_id) { Odometry current_odometry; current_odometry.pose.pose = createPoseFromLaneID(lane_id); diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/shift_pull_out.hpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/shift_pull_out.hpp index d1b4c9dabdd7f..5b4f78b252d22 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/shift_pull_out.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/shift_pull_out.hpp @@ -56,6 +56,8 @@ class ShiftPullOut : public PullOutPlannerBase std::shared_ptr lane_departure_checker_; + friend class TestShiftPullOut; + private: // Calculate longitudinal distance based on the acceleration limit, curvature limit, and the // minimum distance requirement. diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_shift_pull_out.cpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_shift_pull_out.cpp new file mode 100644 index 0000000000000..156cf62f9ac4a --- /dev/null +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_shift_pull_out.cpp @@ -0,0 +1,179 @@ +// 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 +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +using autoware::behavior_path_planner::ShiftPullOut; +using autoware::behavior_path_planner::StartPlannerParameters; +using autoware::lane_departure_checker::LaneDepartureChecker; +using autoware::test_utils::get_absolute_path_to_config; +using autoware_planning_msgs::msg::LaneletRoute; +using RouteSections = std::vector; +using autoware_planning_test_manager::utils::makeBehaviorRouteFromLaneId; + +namespace autoware::behavior_path_planner +{ + +class TestShiftPullOut : public ::testing::Test +{ +public: + std::optional call_plan( + const Pose & start_pose, const Pose & goal_pose, PlannerDebugData & planner_debug_data) + { + return shift_pull_out_->plan(start_pose, goal_pose, planner_debug_data); + } + +protected: + void SetUp() override + { + rclcpp::init(0, nullptr); + node_ = rclcpp::Node::make_shared("shift_pull_out", make_node_options()); + + initialize_lane_departure_checker(); + initialize_shift_pull_out_planner(); + } + + void TearDown() override { rclcpp::shutdown(); } + + PlannerData make_planner_data( + const Pose & start_pose, const int route_start_lane_id, const int route_goal_lane_id) + { + PlannerData planner_data; + planner_data.init_parameters(*node_); + + // Load a sample lanelet map and create a route handler + const auto shoulder_map_path = autoware::test_utils::get_absolute_path_to_lanelet_map( + "autoware_test_utils", "road_shoulder/lanelet2_map.osm"); + const auto map_bin_msg = autoware::test_utils::make_map_bin_msg(shoulder_map_path, 0.5); + auto route_handler = std::make_shared(map_bin_msg); + + // Set up current odometry at start pose + auto odometry = std::make_shared(); + odometry->pose.pose = start_pose; + odometry->header.frame_id = "map"; + planner_data.self_odometry = odometry; + + // Setup route + const auto route = makeBehaviorRouteFromLaneId( + route_start_lane_id, route_goal_lane_id, "autoware_test_utils", + "road_shoulder/lanelet2_map.osm"); + route_handler->setRoute(route); + + // Update planner data with the route handler + planner_data.route_handler = route_handler; + + return planner_data; + } + + // Member variables + std::shared_ptr node_; + std::shared_ptr shift_pull_out_; + std::shared_ptr lane_departure_checker_; + +private: + rclcpp::NodeOptions make_node_options() const + { + // Load common configuration files + auto node_options = rclcpp::NodeOptions{}; + + const auto common_param_path = + get_absolute_path_to_config("autoware_test_utils", "test_common.param.yaml"); + const auto nearest_search_param_path = + get_absolute_path_to_config("autoware_test_utils", "test_nearest_search.param.yaml"); + const auto vehicle_info_param_path = + get_absolute_path_to_config("autoware_test_utils", "test_vehicle_info.param.yaml"); + const auto behavior_path_planner_param_path = get_absolute_path_to_config( + "autoware_behavior_path_planner", "behavior_path_planner.param.yaml"); + const auto drivable_area_expansion_param_path = get_absolute_path_to_config( + "autoware_behavior_path_planner", "drivable_area_expansion.param.yaml"); + const auto scene_module_manager_param_path = get_absolute_path_to_config( + "autoware_behavior_path_planner", "scene_module_manager.param.yaml"); + const auto start_planner_param_path = get_absolute_path_to_config( + "autoware_behavior_path_start_planner_module", "start_planner.param.yaml"); + + autoware::test_utils::updateNodeOptions( + node_options, {common_param_path, nearest_search_param_path, vehicle_info_param_path, + behavior_path_planner_param_path, drivable_area_expansion_param_path, + scene_module_manager_param_path, start_planner_param_path}); + + return node_options; + } + + void initialize_lane_departure_checker() + { + const auto vehicle_info = + autoware::vehicle_info_utils::VehicleInfoUtils(*node_).getVehicleInfo(); + lane_departure_checker_ = std::make_shared(); + lane_departure_checker_->setVehicleInfo(vehicle_info); + + autoware::lane_departure_checker::Param lane_departure_checker_params{}; + lane_departure_checker_->setParam(lane_departure_checker_params); + } + + void initialize_shift_pull_out_planner() + { + auto parameters = StartPlannerParameters::init(*node_); + + auto time_keeper = std::make_shared(); + shift_pull_out_ = + std::make_shared(*node_, parameters, lane_departure_checker_, time_keeper); + } +}; + +TEST_F(TestShiftPullOut, GenerateValidShiftPullOutPath) +{ + const auto start_pose = + geometry_msgs::build() + .position(geometry_msgs::build().x(362.181).y(362.164).z(100.000)) + .orientation( + geometry_msgs::build().x(0.0).y(0.0).z(0.709650).w( + 0.704554)); + + const auto goal_pose = + geometry_msgs::build() + .position(geometry_msgs::build().x(365.658).y(507.253).z(100.000)) + .orientation( + geometry_msgs::build().x(0.0).y(0.0).z(0.705897).w( + 0.708314)); + const auto planner_data = make_planner_data(start_pose, 4619, 4635); + + shift_pull_out_->setPlannerData(std::make_shared(planner_data)); + + // Plan the pull out path + PlannerDebugData debug_data; + auto result = call_plan(start_pose, goal_pose, debug_data); + + // Assert that a valid shift pull out path is generated + ASSERT_TRUE(result.has_value()) << "shift pull out path generation failed."; + EXPECT_EQ(result->partial_paths.size(), 1UL) + << "Generated shift pull out path does not have the expected number of partial paths."; + EXPECT_EQ(debug_data.conditions_evaluation.back(), "success") + << "shift pull out path planning did not succeed."; +} + +} // namespace autoware::behavior_path_planner From e0531b8e5dbd14c8b9c9fb22e487fd81c311d89c Mon Sep 17 00:00:00 2001 From: "Takagi, Isamu" <43976882+isamu-takagi@users.noreply.github.com> Date: Wed, 25 Dec 2024 15:28:30 +0900 Subject: [PATCH 08/77] feat(autoware_default_adapi): release adapi v1.6.0 (#9704) * feat: reject clearing route during autonomous mode Signed-off-by: Takagi, Isamu * feat: modify check and relay door service Signed-off-by: Takagi, Isamu * fix door condition Signed-off-by: Takagi, Isamu * fix error and add option Signed-off-by: Takagi, Isamu * update v1.6.0 Signed-off-by: Takagi, Isamu --------- Signed-off-by: Takagi, Isamu --- .../include/autoware/adapi_specs/vehicle.hpp | 2 +- .../config/default_adapi.param.yaml | 4 ++ .../launch/test_default_adapi.launch.xml | 5 ++ .../autoware_default_adapi/src/interface.cpp | 2 +- system/autoware_default_adapi/src/routing.cpp | 11 ++++- system/autoware_default_adapi/src/routing.hpp | 1 + .../src/vehicle_door.cpp | 46 ++++++++++++++++--- .../src/vehicle_door.hpp | 37 +++++++++++---- .../test/node/interface_version.py | 2 +- 9 files changed, 90 insertions(+), 20 deletions(-) create mode 100644 system/autoware_default_adapi/launch/test_default_adapi.launch.xml diff --git a/common/autoware_adapi_specs/include/autoware/adapi_specs/vehicle.hpp b/common/autoware_adapi_specs/include/autoware/adapi_specs/vehicle.hpp index a7568d54b5e1a..dc907b6610cde 100644 --- a/common/autoware_adapi_specs/include/autoware/adapi_specs/vehicle.hpp +++ b/common/autoware_adapi_specs/include/autoware/adapi_specs/vehicle.hpp @@ -41,7 +41,7 @@ struct VehicleStatus using Message = autoware_adapi_v1_msgs::msg::VehicleStatus; static constexpr char name[] = "/api/vehicle/status"; static constexpr size_t depth = 1; - static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE; + static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_BEST_EFFORT; static constexpr auto durability = RMW_QOS_POLICY_DURABILITY_VOLATILE; }; diff --git a/system/autoware_default_adapi/config/default_adapi.param.yaml b/system/autoware_default_adapi/config/default_adapi.param.yaml index ddbf103878953..f2782e313e785 100644 --- a/system/autoware_default_adapi/config/default_adapi.param.yaml +++ b/system/autoware_default_adapi/config/default_adapi.param.yaml @@ -6,3 +6,7 @@ ros__parameters: require_accept_start: false stop_check_duration: 1.0 + +/adapi/node/vehicle_door: + ros__parameters: + check_autoware_control: true diff --git a/system/autoware_default_adapi/launch/test_default_adapi.launch.xml b/system/autoware_default_adapi/launch/test_default_adapi.launch.xml new file mode 100644 index 0000000000000..3a00beeb623d4 --- /dev/null +++ b/system/autoware_default_adapi/launch/test_default_adapi.launch.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/system/autoware_default_adapi/src/interface.cpp b/system/autoware_default_adapi/src/interface.cpp index fb924f06f42ea..6535dcfca30fd 100644 --- a/system/autoware_default_adapi/src/interface.cpp +++ b/system/autoware_default_adapi/src/interface.cpp @@ -21,7 +21,7 @@ InterfaceNode::InterfaceNode(const rclcpp::NodeOptions & options) : Node("interf { const auto on_interface_version = [](auto, auto res) { res->major = 1; - res->minor = 5; + res->minor = 6; res->patch = 0; }; diff --git a/system/autoware_default_adapi/src/routing.cpp b/system/autoware_default_adapi/src/routing.cpp index 4eaa98376b147..93f31ff693344 100644 --- a/system/autoware_default_adapi/src/routing.cpp +++ b/system/autoware_default_adapi/src/routing.cpp @@ -68,6 +68,7 @@ RoutingNode::RoutingNode(const rclcpp::NodeOptions & options) : Node("routing", adaptor.init_cli(cli_operation_mode_, group_cli_); adaptor.init_sub(sub_operation_mode_, this, &RoutingNode::on_operation_mode); + is_autoware_control_ = false; is_auto_mode_ = false; state_.state = State::Message::UNKNOWN; } @@ -85,6 +86,7 @@ void RoutingNode::change_stop_mode() void RoutingNode::on_operation_mode(const OperationModeState::Message::ConstSharedPtr msg) { + is_autoware_control_ = msg->is_autoware_control_enabled; is_auto_mode_ = msg->mode == OperationModeState::Message::AUTONOMOUS; } @@ -119,7 +121,14 @@ void RoutingNode::on_clear_route( const autoware::adapi_specs::routing::ClearRoute::Service::Request::SharedPtr req, const autoware::adapi_specs::routing::ClearRoute::Service::Response::SharedPtr res) { - change_stop_mode(); + // For safety, do not clear the route while it is in use. + // https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/ad-api/list/api/routing/clear_route/ + if (is_auto_mode_ && is_autoware_control_) { + res->status.success = false; + res->status.code = ResponseStatus::UNKNOWN; + res->status.message = "The route cannot be cleared while it is in use."; + return; + } res->status = conversion::convert_call(cli_clear_route_, req); } diff --git a/system/autoware_default_adapi/src/routing.hpp b/system/autoware_default_adapi/src/routing.hpp index 10eed606a5f6b..f37b8a978a235 100644 --- a/system/autoware_default_adapi/src/routing.hpp +++ b/system/autoware_default_adapi/src/routing.hpp @@ -52,6 +52,7 @@ class RoutingNode : public rclcpp::Node Cli cli_clear_route_; Cli cli_operation_mode_; Sub sub_operation_mode_; + bool is_autoware_control_; bool is_auto_mode_; State::Message state_; diff --git a/system/autoware_default_adapi/src/vehicle_door.cpp b/system/autoware_default_adapi/src/vehicle_door.cpp index 23588bdf4597a..d3ad5d8ddccee 100644 --- a/system/autoware_default_adapi/src/vehicle_door.cpp +++ b/system/autoware_default_adapi/src/vehicle_door.cpp @@ -24,18 +24,50 @@ VehicleDoorNode::VehicleDoorNode(const rclcpp::NodeOptions & options) { const auto adaptor = autoware::component_interface_utils::NodeAdaptor(this); group_cli_ = create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive); - adaptor.relay_service(cli_command_, srv_command_, group_cli_, 3.0); - adaptor.relay_service(cli_layout_, srv_layout_, group_cli_, 3.0); + adaptor.relay_service(cli_layout_, srv_layout_, group_cli_); + adaptor.init_cli(cli_command_, group_cli_); + adaptor.init_srv(srv_command_, this, &VehicleDoorNode::on_command); adaptor.init_pub(pub_status_); adaptor.init_sub(sub_status_, this, &VehicleDoorNode::on_status); + adaptor.init_sub(sub_operation_mode_, this, &VehicleDoorNode::on_operation_mode); + + check_autoware_control_ = declare_parameter("check_autoware_control"); + is_autoware_control_ = false; + is_stop_mode_ = false; +} + +void VehicleDoorNode::on_operation_mode(const OperationModeState::Message::ConstSharedPtr msg) +{ + is_autoware_control_ = msg->is_autoware_control_enabled; + is_stop_mode_ = msg->mode == OperationModeState::Message::STOP; +} +void VehicleDoorNode::on_status(InternalDoorStatus::Message::ConstSharedPtr msg) +{ + utils::notify(pub_status_, status_, *msg, utils::ignore_stamp); } -void VehicleDoorNode::on_status( - autoware::component_interface_specs::vehicle::DoorStatus::Message::ConstSharedPtr msg) +void VehicleDoorNode::on_command( + const ExternalDoorCommand::Service::Request::SharedPtr req, + const ExternalDoorCommand::Service::Response::SharedPtr res) { - utils::notify( - pub_status_, status_, *msg, - utils::ignore_stamp); + // For safety, do not open the door if the vehicle is not stopped. + // https://autowarefoundation.github.io/autoware-documentation/main/design/autoware-interfaces/ad-api/list/api/vehicle/doors/command/ + if (!is_stop_mode_ || (!is_autoware_control_ && check_autoware_control_)) { + bool is_open = false; + for (const auto & door : req->doors) { + if (door.command == autoware_adapi_v1_msgs::msg::DoorCommand::OPEN) { + is_open = true; + break; + } + } + if (is_open) { + res->status.success = false; + res->status.code = autoware_adapi_v1_msgs::msg::ResponseStatus::UNKNOWN; + res->status.message = "Doors cannot be opened if the vehicle is not stopped."; + return; + } + } + autoware::component_interface_utils::status::copy(cli_command_->call(req), res); } } // namespace autoware::default_adapi diff --git a/system/autoware_default_adapi/src/vehicle_door.hpp b/system/autoware_default_adapi/src/vehicle_door.hpp index 50312a38a4cb7..a75232a2b2c74 100644 --- a/system/autoware_default_adapi/src/vehicle_door.hpp +++ b/system/autoware_default_adapi/src/vehicle_door.hpp @@ -16,7 +16,9 @@ #define VEHICLE_DOOR_HPP_ #include +#include #include +#include #include #include @@ -33,16 +35,33 @@ class VehicleDoorNode : public rclcpp::Node explicit VehicleDoorNode(const rclcpp::NodeOptions & options); private: - void on_status( - autoware::component_interface_specs::vehicle::DoorStatus::Message::ConstSharedPtr msg); + using OperationModeState = autoware::component_interface_specs::system::OperationModeState; + using InternalDoorStatus = autoware::component_interface_specs::vehicle::DoorStatus; + using InternalDoorLayout = autoware::component_interface_specs::vehicle::DoorLayout; + using InternalDoorCommand = autoware::component_interface_specs::vehicle::DoorCommand; + using ExternalDoorStatus = autoware::adapi_specs::vehicle::DoorStatus; + using ExternalDoorLayout = autoware::adapi_specs::vehicle::DoorLayout; + using ExternalDoorCommand = autoware::adapi_specs::vehicle::DoorCommand; + + void on_operation_mode(const OperationModeState::Message::ConstSharedPtr msg); + void on_status(InternalDoorStatus::Message::ConstSharedPtr msg); + void on_command( + const ExternalDoorCommand::Service::Request::SharedPtr req, + const ExternalDoorCommand::Service::Response::SharedPtr res); + rclcpp::CallbackGroup::SharedPtr group_cli_; - Srv srv_command_; - Srv srv_layout_; - Pub pub_status_; - Cli cli_command_; - Cli cli_layout_; - Sub sub_status_; - std::optional status_; + Srv srv_command_; + Srv srv_layout_; + Pub pub_status_; + Cli cli_command_; + Cli cli_layout_; + Sub sub_status_; + std::optional status_; + + bool check_autoware_control_; + bool is_autoware_control_; + bool is_stop_mode_; + Sub sub_operation_mode_; }; } // namespace autoware::default_adapi diff --git a/system/autoware_default_adapi/test/node/interface_version.py b/system/autoware_default_adapi/test/node/interface_version.py index c91889149cb0e..8db70ca5cba9a 100644 --- a/system/autoware_default_adapi/test/node/interface_version.py +++ b/system/autoware_default_adapi/test/node/interface_version.py @@ -30,7 +30,7 @@ if response.major != 1: exit(1) -if response.minor != 5: +if response.minor != 6: exit(1) if response.patch != 0: exit(1) From 2579f3c436a8fb07bd4a12a685af22bb00397659 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 25 Dec 2024 15:58:42 +0900 Subject: [PATCH 09/77] feat(behavior_velocity_planner): use XXXStamped in autoware_internal_debug_msgs (#9744) * feat(behavior_velocity_planner): use XXXStamped in autoware_internal_debug_msgs Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../package.xml | 2 +- .../scripts/time_to_collision_plotter.py | 2 +- .../src/scene_crosswalk.cpp | 8 ++++---- .../src/scene_crosswalk.hpp | 5 +++-- .../package.xml | 1 + .../scripts/ttc.py | 2 +- .../src/scene_intersection.cpp | 11 ++++++----- .../src/scene_intersection.hpp | 12 +++++++----- .../src/scene_intersection_collision.cpp | 4 ++-- .../scene_module_interface.hpp | 4 ++-- .../package.xml | 1 + .../package.xml | 1 + .../src/debug.cpp | 2 +- .../src/debug.hpp | 8 ++++---- .../src/scene.hpp | 2 +- .../src/utils.hpp | 4 ++-- 16 files changed, 38 insertions(+), 31 deletions(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/package.xml index 699f80ec8356e..08bd8f91c7d71 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/package.xml @@ -23,6 +23,7 @@ autoware_behavior_velocity_planner_common autoware_grid_map_utils + autoware_internal_debug_msgs autoware_interpolation autoware_lanelet2_extension autoware_motion_utils @@ -41,7 +42,6 @@ pluginlib rclcpp sensor_msgs - tier4_debug_msgs visualization_msgs ament_cmake_ros diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/scripts/time_to_collision_plotter.py b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/scripts/time_to_collision_plotter.py index 8a9de1a563249..5b13b6f5752d3 100755 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/scripts/time_to_collision_plotter.py +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/scripts/time_to_collision_plotter.py @@ -19,10 +19,10 @@ from copy import deepcopy from ament_index_python.packages import get_package_share_directory +from autoware_internal_debug_msgs.msg import StringStamped import matplotlib.pyplot as plt import rclpy from rclpy.node import Node -from tier4_debug_msgs.msg import StringStamped import yaml diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp index 1bea0626b0b2f..07b2f1deff0c7 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp @@ -153,11 +153,11 @@ StopFactor createStopFactor( return stop_factor; } -tier4_debug_msgs::msg::StringStamped createStringStampedMessage( +autoware_internal_debug_msgs::msg::StringStamped createStringStampedMessage( const rclcpp::Time & now, const int64_t module_id_, const std::vector> & collision_points) { - tier4_debug_msgs::msg::StringStamped msg; + autoware_internal_debug_msgs::msg::StringStamped msg; msg.stamp = now; for (const auto & collision_point : collision_points) { std::stringstream ss; @@ -199,8 +199,8 @@ CrosswalkModule::CrosswalkModule( road_ = lanelet_map_ptr->laneletLayer.get(lane_id); - collision_info_pub_ = - node.create_publisher("~/debug/collision_info", 1); + collision_info_pub_ = node.create_publisher( + "~/debug/collision_info", 1); } bool CrosswalkModule::modifyPathVelocity(PathWithLaneId * path) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp index 9b771c0d503a4..b3fbc2f6cfaba 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp @@ -23,9 +23,9 @@ #include #include +#include #include #include -#include #include #include @@ -456,7 +456,8 @@ class CrosswalkModule : public SceneModuleInterface const int64_t module_id_; - rclcpp::Publisher::SharedPtr collision_info_pub_; + rclcpp::Publisher::SharedPtr + collision_info_pub_; lanelet::ConstLanelet crosswalk_; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml index b056f71614da3..7a64d1d6638ff 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml @@ -20,6 +20,7 @@ autoware_cmake autoware_behavior_velocity_planner_common + autoware_internal_debug_msgs autoware_interpolation autoware_lanelet2_extension autoware_motion_utils diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/scripts/ttc.py b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/scripts/ttc.py index 1eb6ae1ffafc1..c1bed003ea3a9 100755 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/scripts/ttc.py +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/scripts/ttc.py @@ -22,13 +22,13 @@ import time from PIL import Image +from autoware_internal_debug_msgs.msg import Float64MultiArrayStamped import imageio import matplotlib import matplotlib.pyplot as plt import numpy as np import rclpy from rclpy.node import Node -from tier4_debug_msgs.msg import Float64MultiArrayStamped matplotlib.use("TKAgg") diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp index 6f7841ebb0bbb..7c492a9dd42bf 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp @@ -88,10 +88,11 @@ IntersectionModule::IntersectionModule( static_occlusion_timeout_state_machine_.setState(StateMachine::State::STOP); } - ego_ttc_pub_ = node.create_publisher( + ego_ttc_pub_ = node.create_publisher( "~/debug/intersection/ego_ttc", 1); - object_ttc_pub_ = node.create_publisher( - "~/debug/intersection/object_ttc", 1); + object_ttc_pub_ = + node.create_publisher( + "~/debug/intersection/object_ttc", 1); } bool IntersectionModule::modifyPathVelocity(PathWithLaneId * path) @@ -231,7 +232,7 @@ DecisionResult IntersectionModule::modifyPathVelocityDetail(PathWithLaneId * pat // calculate the expected vehicle speed and obtain the spatiotemporal profile of ego to the // exit of intersection // ========================================================================================== - tier4_debug_msgs::msg::Float64MultiArrayStamped ego_ttc_time_array; + autoware_internal_debug_msgs::msg::Float64MultiArrayStamped ego_ttc_time_array; const auto time_distance_array = calcIntersectionPassingTime(*path, is_prioritized, intersection_stoplines, &ego_ttc_time_array); @@ -240,7 +241,7 @@ DecisionResult IntersectionModule::modifyPathVelocityDetail(PathWithLaneId * pat // passed each pass judge line for the first time, save current collision status for late // diagnosis // ========================================================================================== - tier4_debug_msgs::msg::Float64MultiArrayStamped object_ttc_time_array; + autoware_internal_debug_msgs::msg::Float64MultiArrayStamped object_ttc_time_array; updateObjectInfoManagerCollision( path_lanelets, time_distance_array, traffic_prioritized_level, safely_passed_1st_judge_line, safely_passed_2nd_judge_line, &object_ttc_time_array); diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp index b718dd84d33af..164df7588bd68 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp @@ -27,7 +27,7 @@ #include #include -#include +#include #include #include @@ -748,7 +748,7 @@ class IntersectionModule : public SceneModuleInterface 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); + autoware_internal_debug_msgs::msg::Float64MultiArrayStamped * object_ttc_time_array); void cutPredictPathWithinDuration( const builtin_interfaces::msg::Time & object_stamp, const double time_thr, @@ -809,13 +809,15 @@ class IntersectionModule : public SceneModuleInterface TimeDistanceArray calcIntersectionPassingTime( const tier4_planning_msgs::msg::PathWithLaneId & path, const bool is_prioritized, const IntersectionStopLines & intersection_stoplines, - tier4_debug_msgs::msg::Float64MultiArrayStamped * ego_ttc_array) const; + autoware_internal_debug_msgs::msg::Float64MultiArrayStamped * ego_ttc_array) const; /** @} */ mutable DebugData debug_data_; mutable InternalDebugData internal_debug_data_{}; - rclcpp::Publisher::SharedPtr ego_ttc_pub_; - rclcpp::Publisher::SharedPtr object_ttc_pub_; + rclcpp::Publisher::SharedPtr + ego_ttc_pub_; + rclcpp::Publisher::SharedPtr + object_ttc_pub_; }; } // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection_collision.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection_collision.cpp index 5a66bec15bab1..5103cd6cc46e4 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection_collision.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection_collision.cpp @@ -152,7 +152,7 @@ void IntersectionModule::updateObjectInfoManagerCollision( 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, - tier4_debug_msgs::msg::Float64MultiArrayStamped * object_ttc_time_array) + autoware_internal_debug_msgs::msg::Float64MultiArrayStamped * object_ttc_time_array) { const auto & intersection_lanelets = intersection_lanelets_.value(); @@ -815,7 +815,7 @@ std::optional IntersectionModule::checkAngleForTargetLanelets( IntersectionModule::TimeDistanceArray IntersectionModule::calcIntersectionPassingTime( const tier4_planning_msgs::msg::PathWithLaneId & path, const bool is_prioritized, const IntersectionStopLines & intersection_stoplines, - tier4_debug_msgs::msg::Float64MultiArrayStamped * ego_ttc_array) const + autoware_internal_debug_msgs::msg::Float64MultiArrayStamped * ego_ttc_array) const { const double intersection_velocity = planner_param_.collision_detection.velocity_profile.default_velocity; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp index fadda66f12562..4e898d9d28715 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp @@ -27,8 +27,8 @@ #include #include +#include #include -#include #include #include #include @@ -57,8 +57,8 @@ using autoware::objects_of_interest_marker_interface::ObjectsOfInterestMarkerInt using autoware::rtc_interface::RTCInterface; using autoware::universe_utils::DebugPublisher; using autoware::universe_utils::getOrDeclareParameter; +using autoware_internal_debug_msgs::msg::Float64Stamped; using builtin_interfaces::msg::Time; -using tier4_debug_msgs::msg::Float64Stamped; using tier4_planning_msgs::msg::PathWithLaneId; using tier4_rtc_msgs::msg::Module; using tier4_rtc_msgs::msg::State; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/package.xml index 6d94e20cfdb1b..a0b54cb879cab 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/package.xml @@ -20,6 +20,7 @@ eigen3_cmake_module autoware_adapi_v1_msgs + autoware_internal_debug_msgs autoware_interpolation autoware_lanelet2_extension autoware_map_msgs diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/package.xml index 90e1d32198854..b3ced8b2e9b9f 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/package.xml @@ -21,6 +21,7 @@ autoware_behavior_velocity_crosswalk_module autoware_behavior_velocity_planner_common + autoware_internal_debug_msgs autoware_motion_utils autoware_object_recognition_utils autoware_perception_msgs diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/debug.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/debug.cpp index 2823648e184d3..3f4b9f330e2d0 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/debug.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/debug.cpp @@ -316,7 +316,7 @@ void RunOutDebug::setAccelReason(const AccelReason & accel_reason) void RunOutDebug::publishDebugValue() { // publish debug values - tier4_debug_msgs::msg::Float32MultiArrayStamped debug_msg{}; + autoware_internal_debug_msgs::msg::Float32MultiArrayStamped debug_msg{}; debug_msg.stamp = node_.now(); for (const auto & v : debug_values_.getValues()) { debug_msg.data.push_back(v); diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/debug.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/debug.hpp index 3e913f57f30c0..1ffa826c4d1d1 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/debug.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/debug.hpp @@ -18,17 +18,17 @@ #include -#include -#include +#include +#include #include #include #include namespace autoware::behavior_velocity_planner { +using autoware_internal_debug_msgs::msg::Float32MultiArrayStamped; +using autoware_internal_debug_msgs::msg::Int32Stamped; using sensor_msgs::msg::PointCloud2; -using tier4_debug_msgs::msg::Float32MultiArrayStamped; -using tier4_debug_msgs::msg::Int32Stamped; class DebugValues { diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/scene.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/scene.hpp index 3673a215bb749..83123c71f461e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/scene.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/scene.hpp @@ -32,10 +32,10 @@ namespace autoware::behavior_velocity_planner { +using autoware_internal_debug_msgs::msg::Float32Stamped; using autoware_perception_msgs::msg::PredictedObjects; using run_out_utils::PlannerParam; using run_out_utils::PoseWithRange; -using tier4_debug_msgs::msg::Float32Stamped; using tier4_planning_msgs::msg::PathPointWithLaneId; using tier4_planning_msgs::msg::PathWithLaneId; using BasicPolygons2d = std::vector; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/utils.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/utils.hpp index 1f948cc7faaa1..c48e4f867fac0 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/utils.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/utils.hpp @@ -21,10 +21,10 @@ #include #include +#include #include #include #include -#include #include #include @@ -39,11 +39,11 @@ using autoware::universe_utils::LineString2d; using autoware::universe_utils::Point2d; using autoware::universe_utils::Polygon2d; using autoware::vehicle_info_utils::VehicleInfo; +using autoware_internal_debug_msgs::msg::Float32Stamped; 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 tier4_debug_msgs::msg::Float32Stamped; using tier4_planning_msgs::msg::PathWithLaneId; using PathPointsWithLaneId = std::vector; struct CommonParam From a7655bca2cebeccc37c638d464f367a712560015 Mon Sep 17 00:00:00 2001 From: mkquda <168697710+mkquda@users.noreply.github.com> Date: Wed, 25 Dec 2024 16:40:57 +0900 Subject: [PATCH 10/77] feat(lane_change): add info text to virtual wall (#9783) * specify reason for lane change stop line Signed-off-by: mohammad alqudah * add stop reason for incoming rear object Signed-off-by: mohammad alqudah --------- Signed-off-by: mohammad alqudah --- .../base_class.hpp | 6 ++++-- .../scene.hpp | 4 +++- .../src/interface.cpp | 8 ++------ .../src/scene.cpp | 20 ++++++++++--------- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/base_class.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/base_class.hpp index ce2552a41d380..1061e07e516a2 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/base_class.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/base_class.hpp @@ -18,6 +18,7 @@ #include "autoware/behavior_path_lane_change_module/structs/debug.hpp" #include "autoware/behavior_path_lane_change_module/structs/path.hpp" #include "autoware/behavior_path_lane_change_module/utils/utils.hpp" +#include "autoware/behavior_path_planner_common/data_manager.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" @@ -38,6 +39,7 @@ class TestNormalLaneChange; namespace autoware::behavior_path_planner { +using autoware::behavior_path_planner::PoseWithDetailOpt; using autoware::route_handler::Direction; using autoware::universe_utils::StopWatch; using geometry_msgs::msg::Point; @@ -222,7 +224,7 @@ class LaneChangeBase return direction_; } - std::optional getStopPose() const { return lane_change_stop_pose_; } + PoseWithDetailOpt getStopPose() const { return lane_change_stop_pose_; } void resetStopPose() { lane_change_stop_pose_ = std::nullopt; } @@ -282,7 +284,7 @@ class LaneChangeBase lane_change::CommonDataPtr common_data_ptr_; FilteredLanesObjects filtered_objects_{}; BehaviorModuleOutput prev_module_output_{}; - std::optional lane_change_stop_pose_{std::nullopt}; + PoseWithDetailOpt lane_change_stop_pose_{std::nullopt}; PathWithLaneId prev_approved_path_; diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/scene.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/scene.hpp index 6367caaea6829..5f1da79bc7ea0 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/scene.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/scene.hpp @@ -18,6 +18,7 @@ #include "autoware/behavior_path_lane_change_module/structs/data.hpp" #include +#include #include #include @@ -157,7 +158,8 @@ class NormalLaneChange : public LaneChangeBase bool check_prepare_phase() const; - void set_stop_pose(const double arc_length_to_stop_pose, PathWithLaneId & path); + void set_stop_pose( + const double arc_length_to_stop_pose, PathWithLaneId & path, const std::string & reason = ""); void updateStopTime(); diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp index d65e51997eb32..f80aad721a07c 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp @@ -111,9 +111,7 @@ BehaviorModuleOutput LaneChangeInterface::plan() path_reference_ = std::make_shared(output.reference_path); *prev_approved_path_ = getPreviousModuleOutput().path; - const auto stop_pose_opt = module_type_->getStopPose(); - stop_pose_ = stop_pose_opt.has_value() ? PoseWithDetailOpt(PoseWithDetail(stop_pose_opt.value())) - : PoseWithDetailOpt(); + stop_pose_ = module_type_->getStopPose(); const auto & lane_change_debug = module_type_->getDebugData(); for (const auto & [uuid, data] : lane_change_debug.collision_check_objects_after_approval) { @@ -171,9 +169,7 @@ BehaviorModuleOutput LaneChangeInterface::planWaitingApproval() } path_reference_ = std::make_shared(out.reference_path); - const auto stop_pose_opt = module_type_->getStopPose(); - stop_pose_ = stop_pose_opt.has_value() ? PoseWithDetailOpt(PoseWithDetail(stop_pose_opt.value())) - : PoseWithDetailOpt(); + stop_pose_ = module_type_->getStopPose(); if (!module_type_->isValidPath()) { path_candidate_ = std::make_shared(); diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp index f8a200a9685a7..7f0e6d7f575f6 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp @@ -408,7 +408,7 @@ BehaviorModuleOutput NormalLaneChange::generateOutput() output.path.points, output.path.points.front().point.pose.position, getEgoPosition()); const auto stop_dist = -(current_velocity * current_velocity / (2.0 * planner_data_->parameters.min_acc)); - set_stop_pose(stop_dist + current_dist, output.path); + set_stop_pose(stop_dist + current_dist, output.path, "incoming rear object"); } else { insert_stop_point(get_target_lanes(), output.path); } @@ -471,7 +471,7 @@ void NormalLaneChange::insert_stop_point( if (!is_current_lane) { const auto arc_length_to_stop_pose = motion_utils::calcArcLength(path.points) - common_data_ptr_->transient_data.next_dist_buffer.min; - set_stop_pose(arc_length_to_stop_pose, path); + set_stop_pose(arc_length_to_stop_pose, path, "next lc terminal"); return; } @@ -514,8 +514,9 @@ void NormalLaneChange::insert_stop_point_on_current_lanes(PathWithLaneId & path) const auto dist_to_terminal_stop = std::min(dist_to_terminal_start, distance_to_last_fit_width); + const auto terminal_stop_reason = status_.is_valid_path ? "no safe path" : "no valid path"; if (filtered_objects_.current_lane.empty()) { - set_stop_pose(dist_to_terminal_stop, path); + set_stop_pose(dist_to_terminal_stop, path, terminal_stop_reason); return; } @@ -541,12 +542,12 @@ void NormalLaneChange::insert_stop_point_on_current_lanes(PathWithLaneId & path) const auto stop_arc_length_behind_obj = arc_length_to_current_obj - stop_margin; if (stop_arc_length_behind_obj < dist_to_target_lane_start) { - set_stop_pose(dist_to_target_lane_start, path); + set_stop_pose(dist_to_target_lane_start, path, "maintain distance to front object"); return; } if (stop_arc_length_behind_obj > dist_to_terminal_stop) { - set_stop_pose(dist_to_terminal_stop, path); + set_stop_pose(dist_to_terminal_stop, path, terminal_stop_reason); return; } @@ -562,11 +563,11 @@ void NormalLaneChange::insert_stop_point_on_current_lanes(PathWithLaneId & path) filtered_objects_.target_lane_leading, stop_arc_length_behind_obj, path); if (has_blocking_target_lane_obj || stop_arc_length_behind_obj <= 0.0) { - set_stop_pose(dist_to_terminal_stop, path); + set_stop_pose(dist_to_terminal_stop, path, terminal_stop_reason); return; } - set_stop_pose(stop_arc_length_behind_obj, path); + set_stop_pose(stop_arc_length_behind_obj, path, "maintain distance to front object"); } PathWithLaneId NormalLaneChange::getReferencePath() const @@ -1688,10 +1689,11 @@ bool NormalLaneChange::is_ego_stuck() const return has_object_blocking; } -void NormalLaneChange::set_stop_pose(const double arc_length_to_stop_pose, PathWithLaneId & path) +void NormalLaneChange::set_stop_pose( + const double arc_length_to_stop_pose, PathWithLaneId & path, const std::string & reason) { const auto stop_point = utils::insertStopPoint(arc_length_to_stop_pose, path); - lane_change_stop_pose_ = stop_point.point.pose; + lane_change_stop_pose_ = PoseWithDetailOpt(PoseWithDetail(stop_point.point.pose, reason)); } void NormalLaneChange::updateStopTime() From d4ced2a84c70f9755e78e77746e814bb3291077f Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Wed, 25 Dec 2024 17:02:18 +0900 Subject: [PATCH 11/77] refactor(lane_change): replace sstream to fmt for marker's text (#9775) Signed-off-by: Zulfaqar Azmi --- .../structs/debug.hpp | 4 +- .../package.xml | 1 + .../src/utils/markers.cpp | 54 +++++++------------ 3 files changed, 22 insertions(+), 37 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/debug.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/debug.hpp index ea9807ad1616f..8738b412e18b9 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/debug.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/debug.hpp @@ -45,7 +45,7 @@ struct Debug double distance_to_end_of_current_lane{std::numeric_limits::max()}; double distance_to_lane_change_finished{std::numeric_limits::max()}; double distance_to_abort_finished{std::numeric_limits::max()}; - bool is_able_to_return_to_current_lane{false}; + bool is_able_to_return_to_current_lane{true}; bool is_stuck{false}; bool is_abort{false}; @@ -69,7 +69,7 @@ struct Debug distance_to_end_of_current_lane = std::numeric_limits::max(); distance_to_lane_change_finished = std::numeric_limits::max(); distance_to_abort_finished = std::numeric_limits::max(); - is_able_to_return_to_current_lane = false; + is_able_to_return_to_current_lane = true; is_stuck = false; is_abort = false; } diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/package.xml b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/package.xml index dd4dbe63e41d4..fad98ecf8f8e1 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/package.xml +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/package.xml @@ -26,6 +26,7 @@ autoware_motion_utils autoware_rtc_interface autoware_universe_utils + fmt pluginlib range-v3 rclcpp diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/markers.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/markers.cpp index 3277b8f031486..30af582175d14 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/markers.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/markers.cpp @@ -25,10 +25,11 @@ #include #include +#include + #include #include #include -#include #include #include @@ -52,27 +53,6 @@ MarkerArray showAllValidLaneChangePath( const auto loop_size = std::min(lane_change_paths.size(), colors.size()); marker_array.markers.reserve(loop_size); - const auto info_prep_to_string = - [](const autoware::behavior_path_planner::lane_change::Info & info) -> std::string { - std::ostringstream ss_text; - ss_text << std::setprecision(3) << "vel: " << info.velocity.prepare - << "[m/s] | lon_acc: " << info.longitudinal_acceleration.prepare - << "[m/s2] | t: " << info.duration.prepare << "[s] | L: " << info.length.prepare - << "[m]"; - return ss_text.str(); - }; - - const auto info_lc_to_string = - [](const autoware::behavior_path_planner::lane_change::Info & info) -> std::string { - std::ostringstream ss_text; - ss_text << std::setprecision(3) << "vel: " << info.velocity.lane_changing - << "[m/s] | lon_acc: " << info.longitudinal_acceleration.lane_changing - << "[m/s2] | lat_acc: " << info.lateral_acceleration - << "[m/s2] | t: " << info.duration.lane_changing - << "[s] | L: " << info.length.lane_changing << "[m]"; - return ss_text.str(); - }; - for (std::size_t idx = 0; idx < loop_size; ++idx) { int32_t id{0}; const auto & lc_path = lane_change_paths.at(idx); @@ -91,19 +71,30 @@ MarkerArray showAllValidLaneChangePath( marker.points.push_back(point.point.pose.position); } + const auto & info = lc_path.info; auto text_marker = createDefaultMarker( "map", current_time, ns_with_idx, ++id, visualization_msgs::msg::Marker::TEXT_VIEW_FACING, createMarkerScale(0.1, 0.1, 0.8), colors::yellow()); const auto prep_idx = points.size() / 4; text_marker.pose = points.at(prep_idx).point.pose; text_marker.pose.position.z += 2.0; - text_marker.text = info_prep_to_string(lc_path.info); + text_marker.text = fmt::format( + "vel: {vel:.3f}[m/s] | lon_acc: {lon_acc:.3f}[m/s2] | t: {time:.3f}[s] | L: {length:.3f}[m]", + fmt::arg("vel", info.velocity.prepare), + fmt::arg("lon_acc", info.longitudinal_acceleration.prepare), + fmt::arg("time", info.duration.prepare), fmt::arg("length", info.length.prepare)); marker_array.markers.push_back(text_marker); const auto lc_idx = points.size() / 2; text_marker.id = ++id; text_marker.pose = points.at(lc_idx).point.pose; - text_marker.text = info_lc_to_string(lc_path.info); + text_marker.text = fmt::format( + "vel: {vel:.3f}[m/s] | lon_acc: {lon_acc:.3f}[m/s2] | lat_acc: {lat_acc:.3f}[m/s2] | t: " + "{time:.3f}[s] | L: {length:.3f}[m]", + fmt::arg("vel", info.velocity.lane_changing), + fmt::arg("lon_acc", info.longitudinal_acceleration.lane_changing), + fmt::arg("lat_acc", info.lateral_acceleration), fmt::arg("time", info.duration.lane_changing), + fmt::arg("length", info.length.lane_changing)); marker_array.markers.push_back(text_marker); marker_array.markers.push_back(marker); @@ -186,17 +177,10 @@ MarkerArray showExecutionInfo(const Debug & debug_data, const geometry_msgs::msg safety_check_info_text.pose = ego_pose; safety_check_info_text.pose.position.z += 4.0; - std::ostringstream ss; - - ss << "\nDistToEndOfCurrentLane: " << std::setprecision(5) - << debug_data.distance_to_end_of_current_lane - << "\nDistToLaneChangeFinished: " << debug_data.distance_to_lane_change_finished - << (debug_data.is_stuck ? "\nVehicleStuck" : "") - << (debug_data.is_able_to_return_to_current_lane ? "\nAbleToReturnToCurrentLane" : "") - << (debug_data.is_abort ? "\nAborting" : "") - << "\nDistanceToAbortFinished: " << debug_data.distance_to_abort_finished; - - safety_check_info_text.text = ss.str(); + safety_check_info_text.text = fmt::format( + "{stuck} | {return_lane} | {abort}", fmt::arg("stuck", debug_data.is_stuck ? "is stuck" : ""), + fmt::arg("return_lane", debug_data.is_able_to_return_to_current_lane ? "" : "can't return"), + fmt::arg("abort", debug_data.is_abort ? "aborting" : "")); marker_array.markers.push_back(safety_check_info_text); return marker_array; } From 2465d07acccdeb30d8a561764c1fbd4d238740db Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Wed, 25 Dec 2024 17:33:58 +0900 Subject: [PATCH 12/77] fix(perception): fix perception docs (#9766) * fix: fix perception docs Signed-off-by: vividf * fix: fix missing parameter in schema Signed-off-by: vividf * Update perception/autoware_object_merger/schema/data_association_matrix.schema.json Co-authored-by: Taekjin LEE * Update perception/autoware_object_merger/schema/data_association_matrix.schema.json Co-authored-by: Taekjin LEE * Update perception/autoware_object_merger/schema/data_association_matrix.schema.json Co-authored-by: Taekjin LEE * Update perception/autoware_object_merger/schema/data_association_matrix.schema.json Co-authored-by: Taekjin LEE * style(pre-commit): autofix * chore: seperate paramters for different nodes Signed-off-by: vividf --------- Signed-off-by: vividf Co-authored-by: Taekjin LEE Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- perception/autoware_object_merger/README.md | 8 + .../data_association_matrix.schema.json | 61 +++++- .../object_association_merger.schema.json | 9 +- .../schema/overlapped_judge.schema.json | 33 ++- .../README.md | 2 +- .../README.md | 29 ++- ...chronized_grid_map_fusion_node.schema.json | 196 ++++++++++-------- 7 files changed, 220 insertions(+), 118 deletions(-) diff --git a/perception/autoware_object_merger/README.md b/perception/autoware_object_merger/README.md index c65353efa3a91..a78cd70052707 100644 --- a/perception/autoware_object_merger/README.md +++ b/perception/autoware_object_merger/README.md @@ -25,8 +25,16 @@ The successive shortest path algorithm is used to solve the data association pro ## Parameters +- object association merger + {{ json_to_markdown("perception/autoware_object_merger/schema/object_association_merger.schema.json") }} + +- data association matrix + {{ json_to_markdown("perception/autoware_object_merger/schema/data_association_matrix.schema.json") }} + +- overlapped judge + {{ json_to_markdown("perception/autoware_object_merger/schema/overlapped_judge.schema.json") }} ## Tips diff --git a/perception/autoware_object_merger/schema/data_association_matrix.schema.json b/perception/autoware_object_merger/schema/data_association_matrix.schema.json index 68dc977224ba5..52f6aa3d8c37c 100644 --- a/perception/autoware_object_merger/schema/data_association_matrix.schema.json +++ b/perception/autoware_object_merger/schema/data_association_matrix.schema.json @@ -2,8 +2,8 @@ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Data Association Matrix Parameters", "type": "object", - "properties": { - "ros__parameters": { + "definitions": { + "data_association_matrix": { "type": "object", "properties": { "can_assign_matrix": { @@ -11,31 +11,72 @@ "items": { "type": "number" }, - "description": "Assignment table for data association" + "description": "Assignment table for data association.", + "default": [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, + 0, 0, 0, 1, 1, 1 + ] }, "max_dist_matrix": { "type": "array", "items": { "type": "number" }, - "description": "Maximum distance table for data association" + "description": "Maximum distance table for data association.", + "default": [ + 4.0, 4.0, 5.0, 5.0, 5.0, 2.0, 2.0, 2.0, 4.0, 2.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, 5.0, + 5.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, 5.0, 5.0, 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, 5.0, 5.0, + 5.0, 5.0, 5.0, 1.0, 1.0, 1.0, 2.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 3.0, 2.0, 1.0, 1.0, + 1.0, 1.0, 3.0, 3.0, 3.0, 2.0, 1.0, 1.0, 1.0, 1.0, 3.0, 3.0, 2.0 + ] }, "max_rad_matrix": { "type": "array", "items": { - "type": "number" + "type": "number", + "minimum": 0.0 }, - "description": "Maximum angle table for data association. If value is greater than pi, it will be ignored." + "description": "Maximum angle table for data association. If value is greater than pi, it will be ignored.", + "default": [ + 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 1.047, 1.047, 1.047, 1.047, 3.15, + 3.15, 3.15, 3.15, 1.047, 1.047, 1.047, 1.047, 3.15, 3.15, 3.15, 3.15, 1.047, 1.047, + 1.047, 1.047, 3.15, 3.15, 3.15, 3.15, 1.047, 1.047, 1.047, 1.047, 3.15, 3.15, 3.15, + 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, + 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15, 3.15 + ] }, "min_iou_matrix": { "type": "array", "items": { - "type": "number" + "type": "number", + "minimum": 0.0 }, - "description": "Minimum IoU threshold matrix for data association. If value is negative, it will be ignored." + "description": "Minimum IoU threshold matrix for data association. If value is negative, it will be ignored.", + "default": [ + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.3, 0.2, 0.2, 0.2, 0.1, 0.1, 0.1, 0.1, + 0.2, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, 0.1, 0.2, 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, 0.1, 0.2, + 0.3, 0.3, 0.3, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 + ] + } + }, + "required": ["can_assign_matrix", "max_dist_matrix", "max_rad_matrix", "min_iou_matrix"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/data_association_matrix" } }, - "required": ["can_assign_matrix", "max_dist_matrix", "max_rad_matrix", "min_iou_matrix"] + "required": ["ros__parameters"], + "additionalProperties": false } - } + }, + "required": ["/**"], + "additionalProperties": false } diff --git a/perception/autoware_object_merger/schema/object_association_merger.schema.json b/perception/autoware_object_merger/schema/object_association_merger.schema.json index 11090fab9c7b3..c31cb8866b8cc 100644 --- a/perception/autoware_object_merger/schema/object_association_merger.schema.json +++ b/perception/autoware_object_merger/schema/object_association_merger.schema.json @@ -45,7 +45,8 @@ "remove_overlapped_unknown_objects", "base_link_frame_id", "priority_mode" - ] + ], + "additionalProperties": false } }, "properties": { @@ -56,8 +57,10 @@ "$ref": "#/definitions/object_association_merger" } }, - "required": ["ros__parameters"] + "required": ["ros__parameters"], + "additionalProperties": false } }, - "required": ["/**"] + "required": ["/**"], + "additionalProperties": false } diff --git a/perception/autoware_object_merger/schema/overlapped_judge.schema.json b/perception/autoware_object_merger/schema/overlapped_judge.schema.json index b65464c6201d1..b8ed9f313eb3a 100644 --- a/perception/autoware_object_merger/schema/overlapped_judge.schema.json +++ b/perception/autoware_object_merger/schema/overlapped_judge.schema.json @@ -2,8 +2,8 @@ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Overlapped Judge Parameters", "type": "object", - "properties": { - "ros__parameters": { + "definitions": { + "overlapped_judge": { "type": "object", "properties": { "distance_threshold_list": { @@ -11,17 +11,36 @@ "items": { "type": "number" }, - "description": "Distance threshold for each class used in judging overlap." + "description": "Distance threshold for each class used in judging overlap.", + "default": [9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0, 9.0] }, "generalized_iou_threshold": { "type": "array", "items": { - "type": "number" + "type": "number", + "minimum": -1.0, + "maximum": 1.0 }, - "description": "Generalized IoU threshold for each class." + "description": "Generalized IoU threshold for each class.", + "default": [-0.1, -0.1, -0.1, -0.6, -0.6, -0.1, -0.1, -0.1] + } + }, + "required": ["distance_threshold_list", "generalized_iou_threshold"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/overlapped_judge" } }, - "required": ["distance_threshold_list", "generalized_iou_threshold"] + "required": ["ros__parameters"], + "additionalProperties": false } - } + }, + "required": ["/**"], + "additionalProperties": false } diff --git a/perception/autoware_occupancy_grid_map_outlier_filter/README.md b/perception/autoware_occupancy_grid_map_outlier_filter/README.md index 7de2cc1dce92c..b920aa6908946 100644 --- a/perception/autoware_occupancy_grid_map_outlier_filter/README.md +++ b/perception/autoware_occupancy_grid_map_outlier_filter/README.md @@ -40,7 +40,7 @@ The following video is a sample. Yellow points are high occupancy probability, g ## Parameters -{{ json_to_markdown("perception/occupancy_grid_map_outlier_filter/schema/occupancy_grid_map_outlier_filter.schema.json") }} +{{ json_to_markdown("perception/autoware_occupancy_grid_map_outlier_filter/schema/occupancy_grid_map_outlier_filter.schema.json") }} ## Assumptions / Known limits diff --git a/perception/autoware_probabilistic_occupancy_grid_map/README.md b/perception/autoware_probabilistic_occupancy_grid_map/README.md index 575411bcbd220..3637dcb10daeb 100644 --- a/perception/autoware_probabilistic_occupancy_grid_map/README.md +++ b/perception/autoware_probabilistic_occupancy_grid_map/README.md @@ -21,12 +21,29 @@ You may need to choose `scan_origin_frame` and `gridmap_origin_frame` which mean ### Parameters -{{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/binary_bayes_filter_updater.schema.json") }} -{{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/grid_map.schema.json") }} -{{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/laserscan_based_occupancy_grid_map.schema.json") }} -{{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/multi_lidar_pointcloud_based_occupancy_grid_map.schema.json") }} -{{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/pointcloud_based_occupancy_grid_map.schema.json") }} -{{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/synchronized_grid_map_fusion_node.schema.json") }} +- binary bayes filter updater + + {{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/binary_bayes_filter_updater.schema.json") }} + +- grid map + + {{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/grid_map.schema.json") }} + +- laserscan based occupancy grid map + + {{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/laserscan_based_occupancy_grid_map.schema.json") }} + +- multi lidar pointcloud based occupancy grid map + + {{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/multi_lidar_pointcloud_based_occupancy_grid_map.schema.json") }} + +- pointcloud based occupancy grid map + + {{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/pointcloud_based_occupancy_grid_map.schema.json") }} + +- synchronized grid map fusion + + {{ json_to_markdown("perception/autoware_probabilistic_occupancy_grid_map/schema/synchronized_grid_map_fusion_node.schema.json") }} ### Downsample input pointcloud(Optional) diff --git a/perception/autoware_probabilistic_occupancy_grid_map/schema/synchronized_grid_map_fusion_node.schema.json b/perception/autoware_probabilistic_occupancy_grid_map/schema/synchronized_grid_map_fusion_node.schema.json index 14f4305f55de8..de7c1e194ed42 100644 --- a/perception/autoware_probabilistic_occupancy_grid_map/schema/synchronized_grid_map_fusion_node.schema.json +++ b/perception/autoware_probabilistic_occupancy_grid_map/schema/synchronized_grid_map_fusion_node.schema.json @@ -2,104 +2,118 @@ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Parameters for Synchronized Grid Map Fusion Node", "type": "object", + "definitions": { + "synchronized_grid_map_fusion": { + "type": "object", + "properties": { + "fusion_input_ogm_topics": { + "type": "array", + "description": "List of fusion input occupancy grid map topics.", + "items": { + "type": "string" + }, + "default": ["topic1", "topic2"] + }, + "input_ogm_reliabilities": { + "type": "array", + "description": "Reliability of each sensor for fusion.", + "items": { + "type": "number", + "minimum": 0.0, + "maximum": 1.0 + }, + "default": [0.8, 0.2] + }, + "fusion_method": { + "type": "string", + "description": "Method for occupancy grid map fusion.", + "enum": ["overwrite", "log-odds", "dempster-shafer"], + "default": "overwrite" + }, + "match_threshold_sec": { + "type": "number", + "description": "Time threshold for matching in seconds.", + "default": 0.01 + }, + "timeout_sec": { + "type": "number", + "description": "Timeout for synchronization in seconds.", + "default": 0.1 + }, + "input_offset_sec": { + "type": "array", + "description": "Offset for each input in seconds.", + "items": { + "type": "number" + }, + "default": [0.0, 0.0] + }, + "map_frame_": { + "type": "string", + "description": "The frame ID of the map.", + "default": "map" + }, + "base_link_frame_": { + "type": "string", + "description": "The frame ID of the base link.", + "default": "base_link" + }, + "grid_map_origin_frame_": { + "type": "string", + "description": "The frame ID of the grid map origin.", + "default": "base_link" + }, + "fusion_map_length_x": { + "type": "number", + "description": "The length of the fusion map in the x direction.", + "default": 100.0 + }, + "fusion_map_length_y": { + "type": "number", + "description": "The length of the fusion map in the y direction.", + "default": 100.0 + }, + "fusion_map_resolution": { + "type": "number", + "description": "The resolution of the fusion map.", + "default": 0.5 + }, + "publish_processing_time_detail": { + "type": "boolean", + "description": "True for showing detail of publish processing time.", + "default": false + } + }, + "required": [ + "fusion_input_ogm_topics", + "input_ogm_reliabilities", + "fusion_method", + "match_threshold_sec", + "timeout_sec", + "input_offset_sec", + "map_frame_", + "base_link_frame_", + "grid_map_origin_frame_", + "fusion_map_length_x", + "fusion_map_length_y", + "fusion_map_resolution", + "publish_processing_time_detail" + ], + "additionalProperties": false + } + }, "properties": { "/**": { "type": "object", "properties": { "ros__parameters": { - "type": "object", - "properties": { - "fusion_input_ogm_topics": { - "type": "array", - "description": "List of fusion input occupancy grid map topics.", - "items": { - "type": "string" - }, - "default": ["topic1", "topic2"] - }, - "input_ogm_reliabilities": { - "type": "array", - "description": "Reliability of each sensor for fusion.", - "items": { - "type": "number", - "minimum": 0.0, - "maximum": 1.0 - }, - "default": [0.8, 0.2] - }, - "fusion_method": { - "type": "string", - "description": "Method for occupancy grid map fusion.", - "enum": ["overwrite", "log-odds", "dempster-shafer"], - "default": "overwrite" - }, - "match_threshold_sec": { - "type": "number", - "description": "Time threshold for matching in seconds.", - "default": 0.01 - }, - "timeout_sec": { - "type": "number", - "description": "Timeout for synchronization in seconds.", - "default": 0.1 - }, - "input_offset_sec": { - "type": "array", - "description": "Offset for each input in seconds.", - "items": { - "type": "number" - }, - "default": [0.0, 0.0] - }, - "map_frame_": { - "type": "string", - "description": "The frame ID of the map.", - "default": "map" - }, - "base_link_frame_": { - "type": "string", - "description": "The frame ID of the base link.", - "default": "base_link" - }, - "grid_map_origin_frame_": { - "type": "string", - "description": "The frame ID of the grid map origin.", - "default": "base_link" - }, - "fusion_map_length_x": { - "type": "number", - "description": "The length of the fusion map in the x direction.", - "default": 100.0 - }, - "fusion_map_length_y": { - "type": "number", - "description": "The length of the fusion map in the y direction.", - "default": 100.0 - }, - "fusion_map_resolution": { - "type": "number", - "description": "The resolution of the fusion map.", - "default": 0.5 - } - }, - "required": [ - "fusion_input_ogm_topics", - "input_ogm_reliabilities", - "fusion_method", - "match_threshold_sec", - "timeout_sec", - "input_offset_sec", - "map_frame_", - "base_link_frame_", - "grid_map_origin_frame_", - "fusion_map_length_x", - "fusion_map_length_y", - "fusion_map_resolution" - ] + "$ref": "#/definitions/synchronized_grid_map_fusion" } }, - "required": ["ros__parameters"] + "required": ["ros__parameters"], + "additionalProperties": false } }, - "required": ["/**"] + "required": ["/**"], + "additionalProperties": false } From aaad09f15b936b475108f9419e1a438629cd68ac Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Wed, 25 Dec 2024 18:05:37 +0900 Subject: [PATCH 13/77] fix(static_avoidance): add optional check (#9782) Signed-off-by: Zulfaqar Azmi --- .../src/shift_line_generator.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp index 2aba986ab680d..52d5ee49c9a68 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp @@ -264,7 +264,9 @@ AvoidOutlines ShiftLineGenerator::generateAvoidOutline( AvoidOutlines outlines; for (auto & o : data.target_objects) { if (!o.avoid_margin.has_value()) { - if (data.red_signal_lane.value().id() == o.overhang_lanelet.id()) { + if ( + data.red_signal_lane.has_value() && + data.red_signal_lane.value().id() == o.overhang_lanelet.id()) { o.info = ObjectInfo::LIMIT_DRIVABLE_SPACE_TEMPORARY; } else { o.info = ObjectInfo::INSUFFICIENT_DRIVABLE_SPACE; From 1586372c7aa9d8e0c4adb7c6cc3ca049c664f98c Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Wed, 25 Dec 2024 18:11:54 +0900 Subject: [PATCH 14/77] fix(autoware_pointcloud_preprocessor): fix autoware pointcloud preprocessor docs (#9765) * fix downsample and passthrough Signed-off-by: vividf * fix: fix blockage-diag docs that page is not shown Signed-off-by: vividf --------- Signed-off-by: vividf --- .../docs/{blockage_diag.md => blockage-diag.md} | 0 .../autoware_pointcloud_preprocessor/docs/downsample-filter.md | 2 +- .../docs/passthrough-filter.md | 3 +-- .../schema/blockage_diag_node.schema.json | 3 ++- .../schema/distortion_corrector_node.schema.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) rename sensing/autoware_pointcloud_preprocessor/docs/{blockage_diag.md => blockage-diag.md} (100%) diff --git a/sensing/autoware_pointcloud_preprocessor/docs/blockage_diag.md b/sensing/autoware_pointcloud_preprocessor/docs/blockage-diag.md similarity index 100% rename from sensing/autoware_pointcloud_preprocessor/docs/blockage_diag.md rename to sensing/autoware_pointcloud_preprocessor/docs/blockage-diag.md diff --git a/sensing/autoware_pointcloud_preprocessor/docs/downsample-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/downsample-filter.md index 92ca1d3b3081c..f237a1871b5e5 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/downsample-filter.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/downsample-filter.md @@ -48,7 +48,7 @@ These implementations inherit `autoware::pointcloud_preprocessor::Filter` class, ### Pickup Based Voxel Grid Downsample Filter -{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json") }} +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter_node.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/docs/passthrough-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/passthrough-filter.md index 58da60c8fe90e..25d2f3d4127a0 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/passthrough-filter.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/passthrough-filter.md @@ -25,8 +25,7 @@ The `passthrough_filter` is a node that removes points on the outside of a range ### Core Parameters -{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/passthrough_filter_uint16_node.schema.json -") }} +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/passthrough_filter_uint16_node.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/schema/blockage_diag_node.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/blockage_diag_node.schema.json index 0e4a02d37bd16..cdca58a6a73f0 100644 --- a/sensing/autoware_pointcloud_preprocessor/schema/blockage_diag_node.schema.json +++ b/sensing/autoware_pointcloud_preprocessor/schema/blockage_diag_node.schema.json @@ -99,7 +99,8 @@ "type": "number", "minimum": 0.0, "maximum": 360.0 - } + }, + "default": [0.0, 360.0] }, "vertical_bins": { "type": "integer", diff --git a/sensing/autoware_pointcloud_preprocessor/schema/distortion_corrector_node.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/distortion_corrector_node.schema.json index 091695716c610..c59541d1d2fba 100644 --- a/sensing/autoware_pointcloud_preprocessor/schema/distortion_corrector_node.schema.json +++ b/sensing/autoware_pointcloud_preprocessor/schema/distortion_corrector_node.schema.json @@ -29,7 +29,7 @@ "has_static_tf_only": { "type": "boolean", "description": "Flag to indicate if only static TF is used.", - "default": false + "default": "false" } }, "required": [ From 452e076d7659efe19a413da3716979a2c537cf28 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 26 Dec 2024 12:14:56 +0900 Subject: [PATCH 15/77] feat(autoware_overlay_rviz_plugin): add plugin to show string stamped (#9683) * feat(autoware_overlay_rviz_plugin): add plugin to show string stamped Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * better visualization Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka * fix cpp check and typo Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../CMakeLists.txt | 28 +++ .../README.md | 7 + .../package.xml | 30 +++ .../plugins/plugins_description.xml | 5 + .../src/jsk_overlay_utils.cpp | 225 +++++++++++++++++ .../src/jsk_overlay_utils.hpp | 143 +++++++++++ .../src/string_stamped_overlay_display.cpp | 237 ++++++++++++++++++ .../src/string_stamped_overlay_display.hpp | 110 ++++++++ 8 files changed, 785 insertions(+) create mode 100644 visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/CMakeLists.txt create mode 100644 visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/README.md create mode 100644 visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/package.xml create mode 100644 visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/plugins/plugins_description.xml create mode 100644 visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/jsk_overlay_utils.cpp create mode 100644 visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/jsk_overlay_utils.hpp create mode 100644 visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/string_stamped_overlay_display.cpp create mode 100644 visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/string_stamped_overlay_display.hpp diff --git a/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/CMakeLists.txt b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/CMakeLists.txt new file mode 100644 index 0000000000000..7ff4e19c69419 --- /dev/null +++ b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/CMakeLists.txt @@ -0,0 +1,28 @@ +cmake_minimum_required(VERSION 3.8) +project(autoware_string_stamped_rviz_plugin) + +# find dependencies +find_package(autoware_cmake REQUIRED) +autoware_package() + +find_package(Qt5 REQUIRED Core Widgets) +set(QT_LIBRARIES Qt5::Widgets) +set(CMAKE_AUTOMOC ON) +set(CMAKE_INCLUDE_CURRENT_DIR ON) +add_definitions(-DQT_NO_KEYWORDS) + +ament_auto_add_library(${PROJECT_NAME} SHARED + DIRECTORY src +) + +target_link_libraries(${PROJECT_NAME} + ${QT_LIBRARIES} +) + +# Export the plugin to be imported by rviz2 +pluginlib_export_plugin_description_file(rviz_common plugins/plugins_description.xml) + +ament_auto_package( + INSTALL_TO_SHARE + plugins +) diff --git a/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/README.md b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/README.md new file mode 100644 index 0000000000000..e5add261325f4 --- /dev/null +++ b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/README.md @@ -0,0 +1,7 @@ +# autoware_string_stamped_rviz_plugin + +Plugin for displaying 2D overlays over the RViz2 3D scene. + +## Purpose + +This plugin displays the ROS message whose topic type is `autoware_internal_debug_msgs::msg::StringStamped` in rviz. diff --git a/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/package.xml b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/package.xml new file mode 100644 index 0000000000000..c22bc75f55290 --- /dev/null +++ b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/package.xml @@ -0,0 +1,30 @@ + + + + autoware_string_stamped_rviz_plugin + 0.39.0 + + RViz2 plugin for 2D overlays in the 3D view. Mainly a port of the JSK overlay plugin + (https://github.com/jsk-ros-pkg/jsk_visualization). + + Takayuki Murooka + Satoshi Ota + + Apache License 2.0 + + ament_cmake_auto + autoware_cmake + + ament_index_cpp + autoware_internal_debug_msgs + rviz_common + rviz_ogre_vendor + rviz_rendering + + ament_lint_auto + autoware_lint_common + + + ament_cmake + + diff --git a/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/plugins/plugins_description.xml b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/plugins/plugins_description.xml new file mode 100644 index 0000000000000..302bcc629b892 --- /dev/null +++ b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/plugins/plugins_description.xml @@ -0,0 +1,5 @@ + + + String stamped overlay plugin for the 3D view. + + diff --git a/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/jsk_overlay_utils.cpp b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/jsk_overlay_utils.cpp new file mode 100644 index 0000000000000..03fd8bca5aee8 --- /dev/null +++ b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/jsk_overlay_utils.cpp @@ -0,0 +1,225 @@ +// 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) 2014, JSK Lab +// All rights reserved. +// +// Software License Agreement (BSD License) +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of {copyright_holder} nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE.S SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +#include "jsk_overlay_utils.hpp" + +#include + +namespace jsk_rviz_plugins +{ +ScopedPixelBuffer::ScopedPixelBuffer(Ogre::HardwarePixelBufferSharedPtr pixel_buffer) +: pixel_buffer_(pixel_buffer) +{ + pixel_buffer_->lock(Ogre::HardwareBuffer::HBL_NORMAL); +} + +ScopedPixelBuffer::~ScopedPixelBuffer() +{ + pixel_buffer_->unlock(); +} + +Ogre::HardwarePixelBufferSharedPtr ScopedPixelBuffer::getPixelBuffer() +{ + return pixel_buffer_; +} + +QImage ScopedPixelBuffer::getQImage(unsigned int width, unsigned int height) +{ + const Ogre::PixelBox & pixelBox = pixel_buffer_->getCurrentLock(); + Ogre::uint8 * pDest = static_cast(pixelBox.data); + memset(pDest, 0, width * height); + return QImage(pDest, width, height, QImage::Format_ARGB32); +} + +QImage ScopedPixelBuffer::getQImage(unsigned int width, unsigned int height, QColor & bg_color) +{ + QImage Hud = getQImage(width, height); + for (unsigned int i = 0; i < width; i++) { + for (unsigned int j = 0; j < height; j++) { + Hud.setPixel(i, j, bg_color.rgba()); + } + } + return Hud; +} + +QImage ScopedPixelBuffer::getQImage(OverlayObject & overlay) +{ + return getQImage(overlay.getTextureWidth(), overlay.getTextureHeight()); +} + +QImage ScopedPixelBuffer::getQImage(OverlayObject & overlay, QColor & bg_color) +{ + return getQImage(overlay.getTextureWidth(), overlay.getTextureHeight(), bg_color); +} + +OverlayObject::OverlayObject( + Ogre::SceneManager * manager, rclcpp::Logger logger, const std::string & name) +: name_(name), logger_(logger) +{ + rviz_rendering::RenderSystem::get()->prepareOverlays(manager); + std::string material_name = name_ + "Material"; + Ogre::OverlayManager * mOverlayMgr = Ogre::OverlayManager::getSingletonPtr(); + overlay_ = mOverlayMgr->create(name_); + panel_ = static_cast( + mOverlayMgr->createOverlayElement("Panel", name_ + "Panel")); + panel_->setMetricsMode(Ogre::GMM_PIXELS); + + panel_material_ = Ogre::MaterialManager::getSingleton().create( + material_name, Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); + panel_->setMaterialName(panel_material_->getName()); + overlay_->add2D(panel_); +} + +OverlayObject::~OverlayObject() +{ + hide(); + panel_material_->unload(); + Ogre::MaterialManager::getSingleton().remove(panel_material_->getName()); + // Ogre::OverlayManager* mOverlayMgr = Ogre::OverlayManager::getSingletonPtr(); + // mOverlayMgr->destroyOverlayElement(panel_); + // delete panel_; + // delete overlay_; +} + +std::string OverlayObject::getName() +{ + return name_; +} + +void OverlayObject::hide() +{ + if (overlay_->isVisible()) { + overlay_->hide(); + } +} + +void OverlayObject::show() +{ + if (!overlay_->isVisible()) { + overlay_->show(); + } +} + +bool OverlayObject::isTextureReady() +{ + return static_cast(texture_); +} + +void OverlayObject::updateTextureSize(unsigned int width, unsigned int height) +{ + const std::string texture_name = name_ + "Texture"; + if (width == 0) { + RCLCPP_WARN(logger_, "width=0 is specified as texture size"); + width = 1; + } + if (height == 0) { + RCLCPP_WARN(logger_, "height=0 is specified as texture size"); + height = 1; + } + if (!isTextureReady() || ((width != texture_->getWidth()) || (height != texture_->getHeight()))) { + if (isTextureReady()) { + Ogre::TextureManager::getSingleton().remove(texture_name); + panel_material_->getTechnique(0)->getPass(0)->removeAllTextureUnitStates(); + } + texture_ = Ogre::TextureManager::getSingleton().createManual( + texture_name, // name + Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, + Ogre::TEX_TYPE_2D, // type + width, height, // width & height of the render window + 0, // number of mipmaps + Ogre::PF_A8R8G8B8, // pixel format chosen to match a format Qt can use + Ogre::TU_DEFAULT // usage + ); + panel_material_->getTechnique(0)->getPass(0)->createTextureUnitState(texture_name); + + panel_material_->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA); + } +} + +ScopedPixelBuffer OverlayObject::getBuffer() +{ + if (isTextureReady()) { + return ScopedPixelBuffer(texture_->getBuffer()); + } else { + return ScopedPixelBuffer(Ogre::HardwarePixelBufferSharedPtr()); + } +} + +void OverlayObject::setPosition(double left, double top) +{ + panel_->setPosition(left, top); +} + +void OverlayObject::setDimensions(double width, double height) +{ + panel_->setDimensions(width, height); +} + +bool OverlayObject::isVisible() +{ + return overlay_->isVisible(); +} + +unsigned int OverlayObject::getTextureWidth() +{ + if (isTextureReady()) { + return texture_->getWidth(); + } else { + return 0; + } +} + +unsigned int OverlayObject::getTextureHeight() +{ + if (isTextureReady()) { + return texture_->getHeight(); + } else { + return 0; + } +} + +} // namespace jsk_rviz_plugins diff --git a/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/jsk_overlay_utils.hpp b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/jsk_overlay_utils.hpp new file mode 100644 index 0000000000000..e69abed49f371 --- /dev/null +++ b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/jsk_overlay_utils.hpp @@ -0,0 +1,143 @@ +// 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) 2014, JSK Lab +// All rights reserved. +// +// Software License Agreement (BSD License) +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of {copyright_holder} nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE.S SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +#ifndef JSK_OVERLAY_UTILS_HPP_ +#define JSK_OVERLAY_UTILS_HPP_ + +#include +#include +#include +#include +#include +#include + +#include +#include +// see OGRE/OgrePrerequisites.h +// #define OGRE_VERSION +// ((OGRE_VERSION_MAJOR << 16) | (OGRE_VERSION_MINOR << 8) | OGRE_VERSION_PATCH) +#if OGRE_VERSION < ((1 << 16) | (9 << 8) | 0) +#include +#include +#include +#include +#else +#include +#include +#include +#include +#include +#endif + +#include +#include +#include +#include +#include +#include + +namespace jsk_rviz_plugins +{ +class OverlayObject; + +class ScopedPixelBuffer +{ +public: + explicit ScopedPixelBuffer(Ogre::HardwarePixelBufferSharedPtr pixel_buffer); + virtual ~ScopedPixelBuffer(); + virtual Ogre::HardwarePixelBufferSharedPtr getPixelBuffer(); + virtual QImage getQImage(unsigned int width, unsigned int height); + virtual QImage getQImage(OverlayObject & overlay); + virtual QImage getQImage(unsigned int width, unsigned int height, QColor & bg_color); + virtual QImage getQImage(OverlayObject & overlay, QColor & bg_color); + +protected: + Ogre::HardwarePixelBufferSharedPtr pixel_buffer_; + +private: +}; + +// this is a class for put overlay object on rviz 3D panel. +// This class suppose to be instantiated in onInitialize method +// of rviz::Display class. +class OverlayObject +{ +public: + typedef std::shared_ptr Ptr; + + OverlayObject(Ogre::SceneManager * manager, rclcpp::Logger logger, const std::string & name); + virtual ~OverlayObject(); + + virtual std::string getName(); + /*virtual*/ void hide(); // remove "virtual" for cppcheck + virtual void show(); + virtual bool isTextureReady(); + virtual void updateTextureSize(unsigned int width, unsigned int height); + virtual ScopedPixelBuffer getBuffer(); + virtual void setPosition(double left, double top); + virtual void setDimensions(double width, double height); + virtual bool isVisible(); + virtual unsigned int getTextureWidth(); + virtual unsigned int getTextureHeight(); + +protected: + const std::string name_; + rclcpp::Logger logger_; + Ogre::Overlay * overlay_; + Ogre::PanelOverlayElement * panel_; + Ogre::MaterialPtr panel_material_; + Ogre::TexturePtr texture_; + +private: +}; + +// Ogre::Overlay* createOverlay(std::string name); +// Ogre::PanelOverlayElement* createOverlayPanel(Ogre::Overlay* overlay); +// Ogre::MaterialPtr createOverlayMaterial(Ogre::Overlay* overlay); +} // namespace jsk_rviz_plugins + +#endif // JSK_OVERLAY_UTILS_HPP_ diff --git a/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/string_stamped_overlay_display.cpp b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/string_stamped_overlay_display.cpp new file mode 100644 index 0000000000000..d5746e99ff084 --- /dev/null +++ b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/string_stamped_overlay_display.cpp @@ -0,0 +1,237 @@ +// 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) 2014, JSK Lab +// All rights reserved. +// +// Software License Agreement (BSD License) +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of {copyright_holder} nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE.S SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +#include "string_stamped_overlay_display.hpp" + +#include "jsk_overlay_utils.hpp" + +#include +#include + +#include + +#include +#include +#include +#include +#include + +namespace autoware::string_stamped_rviz_plugin +{ +StringStampedOverlayDisplay::StringStampedOverlayDisplay() +{ + const Screen * screen_info = DefaultScreenOfDisplay(XOpenDisplay(NULL)); + + constexpr float hight_4k = 2160.0; + const float scale = static_cast(screen_info->height) / hight_4k; + const auto left = static_cast(std::round(1024 * scale)); + const auto top = static_cast(std::round(128 * scale)); + + property_text_color_ = new rviz_common::properties::ColorProperty( + "Text Color", QColor(25, 255, 240), "text color", this, SLOT(updateVisualization()), this); + property_left_ = new rviz_common::properties::IntProperty( + "Left", left, "Left of the plotter window", this, SLOT(updateVisualization()), this); + property_left_->setMin(0); + property_top_ = new rviz_common::properties::IntProperty( + "Top", top, "Top of the plotter window", this, SLOT(updateVisualization())); + property_top_->setMin(0); + + property_value_height_offset_ = new rviz_common::properties::IntProperty( + "Value height offset", 0, "Height offset of the plotter window", this, + SLOT(updateVisualization())); + property_font_size_ = new rviz_common::properties::IntProperty( + "Font Size", 15, "Font Size", this, SLOT(updateVisualization()), this); + property_font_size_->setMin(1); + property_max_letter_num_ = new rviz_common::properties::IntProperty( + "Max Letter Num", 100, "Max Letter Num", this, SLOT(updateVisualization()), this); + property_max_letter_num_->setMin(10); + + property_last_diag_keep_time_ = new rviz_common::properties::FloatProperty( + "Time To Keep Last Diag", 1.0, "Time To Keep Last Diag", this, SLOT(updateVisualization()), + this); + property_last_diag_keep_time_->setMin(0); + + property_last_diag_erase_time_ = new rviz_common::properties::FloatProperty( + "Time To Erase Last Diag", 2.0, "Time To Erase Last Diag", this, SLOT(updateVisualization()), + this); + property_last_diag_erase_time_->setMin(0.001); +} + +StringStampedOverlayDisplay::~StringStampedOverlayDisplay() +{ + if (initialized()) { + overlay_->hide(); + } +} + +void StringStampedOverlayDisplay::onInitialize() +{ + RTDClass::onInitialize(); + + static int count = 0; + rviz_common::UniformStringStream ss; + ss << "StringOverlayDisplayObject" << count++; + auto logger = context_->getRosNodeAbstraction().lock()->get_raw_node()->get_logger(); + overlay_.reset(new jsk_rviz_plugins::OverlayObject(scene_manager_, logger, ss.str())); + + overlay_->show(); + + const int texture_size = property_font_size_->getInt() * property_max_letter_num_->getInt(); + overlay_->updateTextureSize(texture_size, texture_size); + overlay_->setPosition(property_left_->getInt(), property_top_->getInt()); + overlay_->setDimensions(overlay_->getTextureWidth(), overlay_->getTextureHeight()); +} + +void StringStampedOverlayDisplay::onEnable() +{ + subscribe(); + overlay_->show(); +} + +void StringStampedOverlayDisplay::onDisable() +{ + unsubscribe(); + reset(); + overlay_->hide(); +} + +void StringStampedOverlayDisplay::update(float wall_dt, float ros_dt) +{ + (void)wall_dt; + (void)ros_dt; + + { + std::lock_guard message_lock(mutex_); + if (!last_non_empty_msg_ptr_) { + return; + } + } + + // calculate text and alpha + const auto text_with_alpha = [&]() { + std::lock_guard message_lock(mutex_); + if (last_msg_text_.empty()) { + const auto current_time = context_->getRosNodeAbstraction().lock()->get_raw_node()->now(); + const auto duration = (current_time - last_non_empty_msg_ptr_->stamp).seconds(); + if ( + duration < + property_last_diag_keep_time_->getFloat() + property_last_diag_erase_time_->getFloat()) { + const int dynamic_alpha = static_cast(std::max( + (1.0 - std::max(duration - property_last_diag_keep_time_->getFloat(), 0.0) / + property_last_diag_erase_time_->getFloat()) * + 255, + 0.0)); + return std::make_pair(last_non_empty_msg_ptr_->data, dynamic_alpha); + } + } + return std::make_pair(last_msg_text_, 255); + }(); + + // Display + QColor background_color; + background_color.setAlpha(0); + jsk_rviz_plugins::ScopedPixelBuffer buffer = overlay_->getBuffer(); + QImage hud = buffer.getQImage(*overlay_); + hud.fill(background_color); + + QPainter painter(&hud); + painter.setRenderHint(QPainter::Antialiasing, true); + + const int w = overlay_->getTextureWidth() - line_width_; + const int h = overlay_->getTextureHeight() - line_width_; + + // text + QColor text_color(property_text_color_->getColor()); + text_color.setAlpha(text_with_alpha.second); + painter.setPen(QPen(text_color, static_cast(2), Qt::SolidLine)); + QFont font = painter.font(); + font.setPixelSize(property_font_size_->getInt()); + font.setBold(true); + painter.setFont(font); + + // same as above, but align on right side + painter.drawText( + 0, std::min(property_value_height_offset_->getInt(), h - 1), w, + std::max(h - property_value_height_offset_->getInt(), 1), Qt::AlignLeft | Qt::AlignTop, + text_with_alpha.first.c_str()); + painter.end(); + updateVisualization(); +} + +void StringStampedOverlayDisplay::processMessage( + const autoware_internal_debug_msgs::msg::StringStamped::ConstSharedPtr msg_ptr) +{ + if (!isEnabled()) { + return; + } + + { + std::lock_guard message_lock(mutex_); + last_msg_text_ = msg_ptr->data; + + // keep the non empty last message for visualization + if (!msg_ptr->data.empty()) { + last_non_empty_msg_ptr_ = msg_ptr; + } + } + + queueRender(); +} + +void StringStampedOverlayDisplay::updateVisualization() +{ + const int texture_size = property_font_size_->getInt() * property_max_letter_num_->getInt(); + overlay_->updateTextureSize(texture_size, texture_size); + overlay_->setPosition(property_left_->getInt(), property_top_->getInt()); + overlay_->setDimensions(overlay_->getTextureWidth(), overlay_->getTextureHeight()); +} + +} // namespace autoware::string_stamped_rviz_plugin + +#include +PLUGINLIB_EXPORT_CLASS( + autoware::string_stamped_rviz_plugin::StringStampedOverlayDisplay, rviz_common::Display) diff --git a/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/string_stamped_overlay_display.hpp b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/string_stamped_overlay_display.hpp new file mode 100644 index 0000000000000..6f7cd84b91aaa --- /dev/null +++ b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/src/string_stamped_overlay_display.hpp @@ -0,0 +1,110 @@ +// 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) 2014, JSK Lab +// All rights reserved. +// +// Software License Agreement (BSD License) +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// * Neither the name of {copyright_holder} nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE.S SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +#ifndef STRING_STAMPED_OVERLAY_DISPLAY_HPP_ +#define STRING_STAMPED_OVERLAY_DISPLAY_HPP_ + +#include +#include +#include + +#ifndef Q_MOC_RUN +#include "jsk_overlay_utils.hpp" + +#include +#include +#include +#include + +#endif + +#include + +namespace autoware::string_stamped_rviz_plugin +{ +class StringStampedOverlayDisplay +: public rviz_common::RosTopicDisplay + +{ + Q_OBJECT + +public: + StringStampedOverlayDisplay(); + ~StringStampedOverlayDisplay() override; + + void onInitialize() override; + void onEnable() override; + void onDisable() override; + +private Q_SLOTS: + void updateVisualization(); + +protected: + void update(float wall_dt, float ros_dt) override; + void processMessage( + const autoware_internal_debug_msgs::msg::StringStamped::ConstSharedPtr msg_ptr) override; + jsk_rviz_plugins::OverlayObject::Ptr overlay_; + rviz_common::properties::ColorProperty * property_text_color_; + rviz_common::properties::IntProperty * property_left_; + rviz_common::properties::IntProperty * property_top_; + rviz_common::properties::IntProperty * property_value_height_offset_; + rviz_common::properties::IntProperty * property_font_size_; + rviz_common::properties::IntProperty * property_max_letter_num_; + rviz_common::properties::FloatProperty * property_last_diag_keep_time_; + rviz_common::properties::FloatProperty * property_last_diag_erase_time_; + +private: + static constexpr int line_width_ = 2; + static constexpr int hand_width_ = 4; + + std::mutex mutex_; + std::string last_msg_text_; + autoware_internal_debug_msgs::msg::StringStamped::ConstSharedPtr last_non_empty_msg_ptr_; +}; +} // namespace autoware::string_stamped_rviz_plugin + +#endif // STRING_STAMPED_OVERLAY_DISPLAY_HPP_ From ee93be1fe1ecb1721a3f4dab118d814d1263a193 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 26 Dec 2024 14:35:11 +0900 Subject: [PATCH 16/77] refactor(behavior_velocity_planner): independent of plugin packages (#9760) Signed-off-by: Takayuki Murooka --- .../CMakeLists.txt | 3 +- .../behavior_velocity_planner}/node.hpp | 8 +- .../planner_manager.hpp | 6 +- .../behavior_velocity_planner/test_utils.hpp | 47 ++++++++ .../package.xml | 13 --- .../src/node.cpp | 2 +- .../src/planner_manager.cpp | 2 +- .../test_utils.cpp} | 108 ++++-------------- .../test/test_node_interface.cpp | 61 ++++++++++ 9 files changed, 144 insertions(+), 106 deletions(-) rename planning/behavior_velocity_planner/autoware_behavior_velocity_planner/{src => include/autoware/behavior_velocity_planner}/node.hpp (96%) rename planning/behavior_velocity_planner/autoware_behavior_velocity_planner/{src => include/autoware/behavior_velocity_planner}/planner_manager.hpp (91%) create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/test_utils.hpp rename planning/behavior_velocity_planner/autoware_behavior_velocity_planner/{test/src/test_node_interface.cpp => src/test_utils.cpp} (50%) create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_planner/test/test_node_interface.cpp diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/CMakeLists.txt index 37a02b844dfe9..31900a23d00e5 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/CMakeLists.txt +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/CMakeLists.txt @@ -16,6 +16,7 @@ autoware_package() ament_auto_add_library(${PROJECT_NAME}_lib SHARED src/node.cpp src/planner_manager.cpp + src/test_utils.cpp ) rclcpp_components_register_node(${PROJECT_NAME}_lib @@ -34,7 +35,7 @@ endif() if(BUILD_TESTING) ament_add_ros_isolated_gtest(test_${PROJECT_NAME} - test/src/test_node_interface.cpp + test/test_node_interface.cpp ) target_link_libraries(test_${PROJECT_NAME} gtest_main diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/node.hpp similarity index 96% rename from planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.hpp rename to planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/node.hpp index 4efb58e38b74f..4c1f10c355226 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/node.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef NODE_HPP_ -#define NODE_HPP_ +#ifndef AUTOWARE__BEHAVIOR_VELOCITY_PLANNER__NODE_HPP_ +#define AUTOWARE__BEHAVIOR_VELOCITY_PLANNER__NODE_HPP_ +#include "autoware/behavior_velocity_planner/planner_manager.hpp" #include "autoware/universe_utils/ros/logger_level_configure.hpp" #include "autoware/universe_utils/ros/polling_subscriber.hpp" -#include "planner_manager.hpp" #include #include @@ -150,4 +150,4 @@ class BehaviorVelocityPlannerNode : public rclcpp::Node }; } // namespace autoware::behavior_velocity_planner -#endif // NODE_HPP_ +#endif // AUTOWARE__BEHAVIOR_VELOCITY_PLANNER__NODE_HPP_ diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/planner_manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/planner_manager.hpp similarity index 91% rename from planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/planner_manager.hpp rename to planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/planner_manager.hpp index fddd658cef06e..9bd423ecfef21 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/planner_manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/planner_manager.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PLANNER_MANAGER_HPP_ -#define PLANNER_MANAGER_HPP_ +#ifndef AUTOWARE__BEHAVIOR_VELOCITY_PLANNER__PLANNER_MANAGER_HPP_ +#define AUTOWARE__BEHAVIOR_VELOCITY_PLANNER__PLANNER_MANAGER_HPP_ #include #include @@ -57,4 +57,4 @@ class BehaviorVelocityPlannerManager }; } // namespace autoware::behavior_velocity_planner -#endif // PLANNER_MANAGER_HPP_ +#endif // AUTOWARE__BEHAVIOR_VELOCITY_PLANNER__PLANNER_MANAGER_HPP_ diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/test_utils.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/test_utils.hpp new file mode 100644 index 0000000000000..f34182e77e6f1 --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/test_utils.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 AUTOWARE__BEHAVIOR_VELOCITY_PLANNER__TEST_UTILS_HPP_ +#define AUTOWARE__BEHAVIOR_VELOCITY_PLANNER__TEST_UTILS_HPP_ + +#include "autoware/behavior_velocity_planner/node.hpp" + +#include + +#include +#include +#include + +namespace autoware::behavior_velocity_planner +{ +using autoware::behavior_velocity_planner::BehaviorVelocityPlannerNode; +using autoware::planning_test_manager::PlanningInterfaceTestManager; + +struct PluginInfo +{ + std::string module_name; // e.g. crosswalk + std::string plugin_name; // e.g. autoware::behavior_velocity_planner::CrosswalkModulePlugin +}; + +std::shared_ptr generateTestManager(); + +std::shared_ptr generateNode( + const std::vector & plugin_info_vec); + +void publishMandatoryTopics( + std::shared_ptr test_manager, + std::shared_ptr test_target_node); +} // namespace autoware::behavior_velocity_planner + +#endif // AUTOWARE__BEHAVIOR_VELOCITY_PLANNER__TEST_UTILS_HPP_ diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/package.xml index e051374ed3dda..04b4cf0328fd1 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/package.xml @@ -64,19 +64,6 @@ ament_cmake_ros ament_lint_auto - autoware_behavior_velocity_blind_spot_module - autoware_behavior_velocity_crosswalk_module - autoware_behavior_velocity_detection_area_module - autoware_behavior_velocity_intersection_module - autoware_behavior_velocity_no_drivable_lane_module - autoware_behavior_velocity_no_stopping_area_module - autoware_behavior_velocity_occlusion_spot_module - autoware_behavior_velocity_run_out_module - autoware_behavior_velocity_speed_bump_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 diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.cpp index d78bc883e6b35..5f78e4c670b49 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "node.hpp" +#include "autoware/behavior_velocity_planner/node.hpp" #include #include diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/planner_manager.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/planner_manager.cpp index 4820c340058ff..45ee83260d53a 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/planner_manager.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/planner_manager.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "planner_manager.hpp" +#include "autoware/behavior_velocity_planner/planner_manager.hpp" #include #include diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/test_utils.cpp similarity index 50% rename from planning/behavior_velocity_planner/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp rename to planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/test_utils.cpp index fe79450d0def8..ee1bb8f89fc46 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/test_utils.cpp @@ -1,4 +1,4 @@ -// Copyright 2023 Tier IV, Inc. +// 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. @@ -12,22 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "node.hpp" +#include "autoware/behavior_velocity_planner/test_utils.hpp" #include #include #include -#include - -#include #include #include #include -using autoware::behavior_velocity_planner::BehaviorVelocityPlannerNode; -using autoware::planning_test_manager::PlanningInterfaceTestManager; - +namespace autoware::behavior_velocity_planner +{ std::shared_ptr generateTestManager() { auto test_manager = std::make_shared(); @@ -45,7 +41,8 @@ std::shared_ptr generateTestManager() return test_manager; } -std::shared_ptr generateNode() +std::shared_ptr generateNode( + const std::vector & plugin_info_vec) { auto node_options = rclcpp::NodeOptions{}; @@ -64,49 +61,29 @@ std::shared_ptr generateNode() return package_path + "/config/" + module + ".param.yaml"; }; - std::vector module_names; - module_names.emplace_back("autoware::behavior_velocity_planner::CrosswalkModulePlugin"); - module_names.emplace_back("autoware::behavior_velocity_planner::WalkwayModulePlugin"); - module_names.emplace_back("autoware::behavior_velocity_planner::TrafficLightModulePlugin"); - module_names.emplace_back("autoware::behavior_velocity_planner::IntersectionModulePlugin"); - 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("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("autoware::behavior_velocity_planner::SpeedBumpModulePlugin"); - module_names.emplace_back("autoware::behavior_velocity_planner::NoDrivableLaneModulePlugin"); + std::vector plugin_names; + for (const auto & plugin_info : plugin_info_vec) { + plugin_names.emplace_back(plugin_info.plugin_name); + } std::vector params; - params.emplace_back("launch_modules", module_names); + params.emplace_back("launch_modules", plugin_names); params.emplace_back("is_simulation", false); node_options.parameter_overrides(params); - autoware::test_utils::updateNodeOptions( - node_options, - {autoware_test_utils_dir + "/config/test_common.param.yaml", - autoware_test_utils_dir + "/config/test_nearest_search.param.yaml", - autoware_test_utils_dir + "/config/test_vehicle_info.param.yaml", - velocity_smoother_dir + "/config/default_velocity_smoother.param.yaml", - velocity_smoother_dir + "/config/Analytical.param.yaml", - behavior_velocity_planner_common_dir + "/config/behavior_velocity_planner_common.param.yaml", - behavior_velocity_planner_dir + "/config/behavior_velocity_planner.param.yaml", - get_behavior_velocity_module_config("blind_spot"), - get_behavior_velocity_module_config("crosswalk"), - get_behavior_velocity_module_config("walkway"), - get_behavior_velocity_module_config("detection_area"), - get_behavior_velocity_module_config("intersection"), - get_behavior_velocity_module_config("no_stopping_area"), - get_behavior_velocity_module_config("occlusion_spot"), - get_behavior_velocity_module_config("run_out"), - get_behavior_velocity_module_config("speed_bump"), - get_behavior_velocity_module_config("stop_line"), - get_behavior_velocity_module_config("traffic_light"), - get_behavior_velocity_module_config("virtual_traffic_light"), - get_behavior_velocity_module_config("no_drivable_lane")}); + auto yaml_files = std::vector{ + autoware_test_utils_dir + "/config/test_common.param.yaml", + autoware_test_utils_dir + "/config/test_nearest_search.param.yaml", + autoware_test_utils_dir + "/config/test_vehicle_info.param.yaml", + velocity_smoother_dir + "/config/default_velocity_smoother.param.yaml", + velocity_smoother_dir + "/config/Analytical.param.yaml", + behavior_velocity_planner_common_dir + "/config/behavior_velocity_planner_common.param.yaml", + behavior_velocity_planner_dir + "/config/behavior_velocity_planner.param.yaml"}; + for (const auto & plugin_info : plugin_info_vec) { + yaml_files.push_back(get_behavior_velocity_module_config(plugin_info.module_name)); + } + + autoware::test_utils::updateNodeOptions(node_options, yaml_files); // TODO(Takagi, Isamu): set launch_modules // TODO(Kyoichi Sugahara) set to true launch_virtual_traffic_light @@ -141,39 +118,4 @@ void publishMandatoryTopics( test_manager->publishOccupancyGrid( test_target_node, "behavior_velocity_planner_node/input/occupancy_grid"); } - -TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID) -{ - rclcpp::init(0, nullptr); - auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); - - publishMandatoryTopics(test_manager, test_target_node); - - // test with nominal path_with_lane_id - ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); - EXPECT_GE(test_manager->getReceivedTopicNum(), 1); - - // test with empty path_with_lane_id - ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node)); - rclcpp::shutdown(); -} - -TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) -{ - rclcpp::init(0, nullptr); - - auto test_manager = generateTestManager(); - auto test_target_node = generateNode(); - publishMandatoryTopics(test_manager, test_target_node); - - // test for normal trajectory - ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); - - // make sure behavior_path_planner is running - EXPECT_GE(test_manager->getReceivedTopicNum(), 1); - - ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node)); - - rclcpp::shutdown(); -} +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/test/test_node_interface.cpp new file mode 100644 index 0000000000000..6e232318c1711 --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/test/test_node_interface.cpp @@ -0,0 +1,61 @@ +// 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 "autoware/behavior_velocity_planner/test_utils.hpp" + +#include + +#include +#include +#include +#include + +namespace autoware::behavior_velocity_planner +{ +TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID) +{ + rclcpp::init(0, nullptr); + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode({}); + + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test with nominal path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + // test with empty path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node)); + rclcpp::shutdown(); +} + +TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) +{ + rclcpp::init(0, nullptr); + + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode({}); + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test for normal trajectory + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + + // make sure behavior_path_planner is running + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node)); + + rclcpp::shutdown(); +} +} // namespace autoware::behavior_velocity_planner From ad16612cf12fa7122304eebb9f7c5112fa72cbaa Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Thu, 26 Dec 2024 14:45:37 +0900 Subject: [PATCH 17/77] chore(cppcheck): ignore examples/ dir (#9798) Signed-off-by: Mamoru Sobue --- .cppcheck_suppressions | 1 + 1 file changed, 1 insertion(+) diff --git a/.cppcheck_suppressions b/.cppcheck_suppressions index 5e1035de20c64..ab267ec3ac007 100644 --- a/.cppcheck_suppressions +++ b/.cppcheck_suppressions @@ -1,4 +1,5 @@ *:*/test/* +*:*/examples/* checkersReport missingInclude From 0997af503fbcb36a7d5679968eba18659030d144 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara <32741405+kyoichi-sugahara@users.noreply.github.com> Date: Thu, 26 Dec 2024 16:42:01 +0900 Subject: [PATCH 18/77] fix(autoware_planning_evaluator): rename lateral deviation metrics (#9801) * refactor(planning_evaluator): rename and add lateral trajectory displacement metrics Signed-off-by: kyoichi-sugahara * fix typo Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .../config/planning_evaluator.param.yaml | 3 ++- .../metrics/deviation_metrics.hpp | 2 +- .../planning_evaluator/metrics/metric.hpp | 16 ++++++++-------- .../metrics/stability_metrics.hpp | 2 +- .../src/metrics/deviation_metrics.cpp | 2 +- .../src/metrics/stability_metrics.cpp | 2 +- .../src/metrics_calculator.cpp | 10 +++++----- 7 files changed, 19 insertions(+), 18 deletions(-) diff --git a/evaluator/autoware_planning_evaluator/config/planning_evaluator.param.yaml b/evaluator/autoware_planning_evaluator/config/planning_evaluator.param.yaml index 73c1f3dfded09..7605ed2a5e859 100644 --- a/evaluator/autoware_planning_evaluator/config/planning_evaluator.param.yaml +++ b/evaluator/autoware_planning_evaluator/config/planning_evaluator.param.yaml @@ -14,7 +14,8 @@ - lateral_deviation - yaw_deviation - velocity_deviation - - trajectory_lateral_displacement + - lateral_trajectory_displacement_local + - lateral_trajectory_displacement_lookahead - stability - stability_frechet - obstacle_distance diff --git a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/metrics/deviation_metrics.hpp b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/metrics/deviation_metrics.hpp index 0e08398ffa87e..2341ad2bb6ba3 100644 --- a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/metrics/deviation_metrics.hpp +++ b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/metrics/deviation_metrics.hpp @@ -45,7 +45,7 @@ Accumulator calcLateralDeviation(const Trajectory & ref, const Trajector * @param [in] base_pose base pose * @return calculated statistics */ -Accumulator calcLateralTrajectoryDisplacement( +Accumulator calcLocalLateralTrajectoryDisplacement( const Trajectory & prev, const Trajectory & traj, const Pose & base_pose); /** diff --git a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/metrics/metric.hpp b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/metrics/metric.hpp index 22b365881ce28..7c207bf6c8f57 100644 --- a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/metrics/metric.hpp +++ b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/metrics/metric.hpp @@ -37,10 +37,10 @@ enum class Metric { lateral_deviation, yaw_deviation, velocity_deviation, - lateral_trajectory_displacement, + lateral_trajectory_displacement_local, + lateral_trajectory_displacement_lookahead, stability, stability_frechet, - trajectory_lateral_displacement, obstacle_distance, obstacle_ttc, modified_goal_longitudinal_deviation, @@ -64,10 +64,10 @@ static const std::unordered_map str_to_metric = { {"lateral_deviation", Metric::lateral_deviation}, {"yaw_deviation", Metric::yaw_deviation}, {"velocity_deviation", Metric::velocity_deviation}, - {"lateral_trajectory_displacement", Metric::lateral_trajectory_displacement}, + {"lateral_trajectory_displacement_local", Metric::lateral_trajectory_displacement_local}, + {"lateral_trajectory_displacement_lookahead", Metric::lateral_trajectory_displacement_lookahead}, {"stability", Metric::stability}, {"stability_frechet", Metric::stability_frechet}, - {"trajectory_lateral_displacement", Metric::trajectory_lateral_displacement}, {"obstacle_distance", Metric::obstacle_distance}, {"obstacle_ttc", Metric::obstacle_ttc}, {"modified_goal_longitudinal_deviation", Metric::modified_goal_longitudinal_deviation}, @@ -86,10 +86,10 @@ static const std::unordered_map metric_to_str = { {Metric::lateral_deviation, "lateral_deviation"}, {Metric::yaw_deviation, "yaw_deviation"}, {Metric::velocity_deviation, "velocity_deviation"}, - {Metric::lateral_trajectory_displacement, "lateral_trajectory_displacement"}, + {Metric::lateral_trajectory_displacement_local, "lateral_trajectory_displacement_local"}, + {Metric::lateral_trajectory_displacement_lookahead, "lateral_trajectory_displacement_lookahead"}, {Metric::stability, "stability"}, {Metric::stability_frechet, "stability_frechet"}, - {Metric::trajectory_lateral_displacement, "trajectory_lateral_displacement"}, {Metric::obstacle_distance, "obstacle_distance"}, {Metric::obstacle_ttc, "obstacle_ttc"}, {Metric::modified_goal_longitudinal_deviation, "modified_goal_longitudinal_deviation"}, @@ -109,10 +109,10 @@ static const std::unordered_map metric_descriptions = { {Metric::lateral_deviation, "Lateral_deviation[m]"}, {Metric::yaw_deviation, "Yaw_deviation[rad]"}, {Metric::velocity_deviation, "Velocity_deviation[m/s]"}, - {Metric::lateral_trajectory_displacement, "Nearest Pose Lateral Deviation[m]"}, + {Metric::lateral_trajectory_displacement_local, "Nearest Pose Lateral Deviation[m]"}, + {Metric::lateral_trajectory_displacement_lookahead, "Lateral_Offset_Over_Distance_Ahead[m]"}, {Metric::stability, "Stability[m]"}, {Metric::stability_frechet, "StabilityFrechet[m]"}, - {Metric::trajectory_lateral_displacement, "Trajectory_lateral_displacement[m]"}, {Metric::obstacle_distance, "Obstacle_distance[m]"}, {Metric::obstacle_ttc, "Obstacle_time_to_collision[s]"}, {Metric::modified_goal_longitudinal_deviation, "Modified_goal_longitudinal_deviation[m]"}, diff --git a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/metrics/stability_metrics.hpp b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/metrics/stability_metrics.hpp index 69df00b26551b..1b46fbddfb297 100644 --- a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/metrics/stability_metrics.hpp +++ b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/metrics/stability_metrics.hpp @@ -56,7 +56,7 @@ Accumulator calcLateralDistance(const Trajectory & traj1, const Trajecto * @param [in] trajectory_eval_time_s time duration for trajectory evaluation in seconds * @return statistical accumulator containing the total lateral displacement */ -Accumulator calcTrajectoryLateralDisplacement( +Accumulator calcLookaheadLateralTrajectoryDisplacement( const Trajectory traj1, const Trajectory traj2, const nav_msgs::msg::Odometry & ego_odom, const double trajectory_eval_time_s); diff --git a/evaluator/autoware_planning_evaluator/src/metrics/deviation_metrics.cpp b/evaluator/autoware_planning_evaluator/src/metrics/deviation_metrics.cpp index ffb56baf29f17..82ba86c65d6af 100644 --- a/evaluator/autoware_planning_evaluator/src/metrics/deviation_metrics.cpp +++ b/evaluator/autoware_planning_evaluator/src/metrics/deviation_metrics.cpp @@ -45,7 +45,7 @@ Accumulator calcLateralDeviation(const Trajectory & ref, const Trajector return stat; } -Accumulator calcLateralTrajectoryDisplacement( +Accumulator calcLocalLateralTrajectoryDisplacement( const Trajectory & prev, const Trajectory & traj, const Pose & ego_pose) { Accumulator stat; diff --git a/evaluator/autoware_planning_evaluator/src/metrics/stability_metrics.cpp b/evaluator/autoware_planning_evaluator/src/metrics/stability_metrics.cpp index b99a4ebd20050..61e18a6ad0b63 100644 --- a/evaluator/autoware_planning_evaluator/src/metrics/stability_metrics.cpp +++ b/evaluator/autoware_planning_evaluator/src/metrics/stability_metrics.cpp @@ -98,7 +98,7 @@ Accumulator calcLateralDistance(const Trajectory & traj1, const Trajecto return stat; } -Accumulator calcTrajectoryLateralDisplacement( +Accumulator calcLookaheadLateralTrajectoryDisplacement( const Trajectory traj1, const Trajectory traj2, const nav_msgs::msg::Odometry & ego_odom, const double trajectory_eval_time_s) { diff --git a/evaluator/autoware_planning_evaluator/src/metrics_calculator.cpp b/evaluator/autoware_planning_evaluator/src/metrics_calculator.cpp index 201fbcba0e9f7..c30420a5632fa 100644 --- a/evaluator/autoware_planning_evaluator/src/metrics_calculator.cpp +++ b/evaluator/autoware_planning_evaluator/src/metrics_calculator.cpp @@ -50,8 +50,11 @@ std::optional> MetricsCalculator::calculate( return metrics::calcYawDeviation(reference_trajectory_, traj); case Metric::velocity_deviation: return metrics::calcVelocityDeviation(reference_trajectory_, traj); - case Metric::lateral_trajectory_displacement: - return metrics::calcLateralTrajectoryDisplacement(previous_trajectory_, traj, ego_pose_); + case Metric::lateral_trajectory_displacement_local: + return metrics::calcLocalLateralTrajectoryDisplacement(previous_trajectory_, traj, ego_pose_); + case Metric::lateral_trajectory_displacement_lookahead: + return metrics::calcLookaheadLateralTrajectoryDisplacement( + previous_trajectory_, traj, ego_odometry_, parameters.trajectory.evaluation_time_s); case Metric::stability_frechet: return metrics::calcFrechetDistance( metrics::utils::get_lookahead_trajectory( @@ -68,9 +71,6 @@ std::optional> MetricsCalculator::calculate( metrics::utils::get_lookahead_trajectory( traj, ego_pose_, parameters.trajectory.lookahead.max_dist_m, parameters.trajectory.lookahead.max_time_s)); - case Metric::trajectory_lateral_displacement: - return metrics::calcTrajectoryLateralDisplacement( - previous_trajectory_, traj, ego_odometry_, parameters.trajectory.evaluation_time_s); case Metric::obstacle_distance: return metrics::calcDistanceToObstacle(dynamic_objects_, traj); case Metric::obstacle_ttc: From 231c341e4bac7061c477f1222eeddd526fbad18c Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 26 Dec 2024 19:48:50 +0900 Subject: [PATCH 19/77] fix(behavior_path_planner): add freespace_planning_algorithms dependency (#9800) --- .../autoware_behavior_path_goal_planner_module/package.xml | 1 + .../autoware_behavior_path_start_planner_module/package.xml | 1 + 2 files changed, 2 insertions(+) diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/package.xml b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/package.xml index 232c548b28da3..78c4ea7e4c609 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/package.xml +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/package.xml @@ -23,6 +23,7 @@ autoware_behavior_path_planner autoware_behavior_path_planner_common autoware_bezier_sampler + autoware_freespace_planning_algorithms autoware_motion_utils autoware_rtc_interface autoware_test_utils diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/package.xml b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/package.xml index c7cabb403f164..214731f96cebc 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/package.xml +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/package.xml @@ -22,6 +22,7 @@ autoware_behavior_path_planner autoware_behavior_path_planner_common + autoware_freespace_planning_algorithms autoware_motion_utils autoware_rtc_interface autoware_universe_utils From 4ed851f651777e7e241e791ff2cfd76deb3522ba Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Fri, 27 Dec 2024 10:16:22 +0900 Subject: [PATCH 20/77] refactor(behavior_velocity_planner_common): add behavior_velocity_rtc_interface and move RTC-related implementation (#9799) * split into planer_common and rtc_interface Signed-off-by: Takayuki Murooka * Update planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp Co-authored-by: Mamoru Sobue * Update planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/include/autoware/behavior_velocity_rtc_interface/scene_module_interface_with_rtc.hpp Co-authored-by: Mamoru Sobue * fix Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka Co-authored-by: Mamoru Sobue --- .../manager.hpp | 6 +- .../scene.hpp | 4 +- .../package.xml | 1 + .../src/manager.cpp | 2 +- .../src/scene.cpp | 2 +- .../package.xml | 1 + .../src/manager.cpp | 4 +- .../src/manager.hpp | 6 +- .../src/scene_crosswalk.cpp | 2 +- .../src/scene_crosswalk.hpp | 4 +- .../package.xml | 1 + .../src/manager.cpp | 9 +- .../src/manager.hpp | 6 +- .../src/scene.cpp | 2 +- .../src/scene.hpp | 4 +- .../package.xml | 1 + .../src/manager.cpp | 4 +- .../src/manager.hpp | 7 +- .../src/scene_intersection.cpp | 2 +- .../src/scene_intersection.hpp | 4 +- .../src/manager.hpp | 2 +- .../package.xml | 1 + .../src/manager.cpp | 9 +- .../src/manager.hpp | 6 +- .../src/scene_no_stopping_area.cpp | 2 +- .../src/scene_no_stopping_area.hpp | 4 +- .../src/manager.hpp | 2 +- .../README.md | 2 +- .../scene_module_interface.hpp | 229 ++++++++++------- .../package.xml | 1 - .../src/scene_module_interface.cpp | 238 +----------------- .../CMakeLists.txt | 11 + .../README.md | 3 + .../scene_module_interface_with_rtc.hpp | 154 ++++++++++++ .../package.xml | 38 +++ .../src/scene_module_interface_with_rtc.cpp | 140 +++++++++++ .../src/manager.hpp | 2 +- .../src/manager.hpp | 2 +- .../src/manager.hpp | 2 +- .../src/manager.hpp | 2 +- .../package.xml | 1 + .../src/manager.cpp | 4 +- .../src/manager.hpp | 6 +- .../src/scene.cpp | 2 +- .../src/scene.hpp | 4 +- .../src/manager.hpp | 2 +- .../src/manager.hpp | 2 +- 47 files changed, 562 insertions(+), 381 deletions(-) create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/CMakeLists.txt create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/README.md create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/include/autoware/behavior_velocity_rtc_interface/scene_module_interface_with_rtc.hpp create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/package.xml create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/src/scene_module_interface_with_rtc.cpp diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/manager.hpp index f296ad03cbac6..bf01986d5c28f 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/manager.hpp @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include @@ -42,8 +42,8 @@ class BlindSpotModuleManager : public SceneModuleManagerInterfaceWithRTC void launchNewModules(const tier4_planning_msgs::msg::PathWithLaneId & path) override; - std::function &)> getModuleExpiredFunction( - const tier4_planning_msgs::msg::PathWithLaneId & path) override; + std::function &)> + getModuleExpiredFunction(const tier4_planning_msgs::msg::PathWithLaneId & path) override; }; class BlindSpotModulePlugin : public PluginWrapper diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/scene.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/scene.hpp index 1bfa41d86ffbe..50ce8634ec600 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/scene.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/scene.hpp @@ -16,8 +16,8 @@ #define AUTOWARE__BEHAVIOR_VELOCITY_BLIND_SPOT_MODULE__SCENE_HPP_ #include -#include #include +#include #include #include @@ -59,7 +59,7 @@ struct Safe using BlindSpotDecision = std::variant; -class BlindSpotModule : public SceneModuleInterface +class BlindSpotModule : public SceneModuleInterfaceWithRTC { public: struct DebugData diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml index a2ea4a82a884d..9739370387df7 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml @@ -18,6 +18,7 @@ autoware_cmake autoware_behavior_velocity_planner_common + autoware_behavior_velocity_rtc_interface autoware_lanelet2_extension autoware_motion_utils autoware_perception_msgs diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/manager.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/manager.cpp index cc63b42df68e4..a1410d2fecfd5 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/manager.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/manager.cpp @@ -83,7 +83,7 @@ void BlindSpotModuleManager::launchNewModules(const tier4_planning_msgs::msg::Pa } } -std::function &)> +std::function &)> BlindSpotModuleManager::getModuleExpiredFunction( const tier4_planning_msgs::msg::PathWithLaneId & path) { diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/scene.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/scene.cpp index 7697786adb19d..7d1a68c5006a0 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/scene.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/scene.cpp @@ -41,7 +41,7 @@ BlindSpotModule::BlindSpotModule( const int64_t module_id, const int64_t lane_id, const TurnDirection turn_direction, const std::shared_ptr planner_data, const PlannerParam & planner_param, const rclcpp::Logger logger, const rclcpp::Clock::SharedPtr clock) -: SceneModuleInterface(module_id, logger, clock), +: SceneModuleInterfaceWithRTC(module_id, logger, clock), lane_id_(lane_id), planner_param_{planner_param}, turn_direction_(turn_direction), diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/package.xml index 08bd8f91c7d71..ff01e85aa5456 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/package.xml @@ -22,6 +22,7 @@ eigen3_cmake_module autoware_behavior_velocity_planner_common + autoware_behavior_velocity_rtc_interface autoware_grid_map_utils autoware_internal_debug_msgs autoware_interpolation diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/manager.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/manager.cpp index 8ba05be36ae56..cdaff7225a7d2 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/manager.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/manager.cpp @@ -216,7 +216,7 @@ void CrosswalkModuleManager::launchNewModules(const PathWithLaneId & path) } } -std::function &)> +std::function &)> CrosswalkModuleManager::getModuleExpiredFunction(const PathWithLaneId & path) { const auto rh = planner_data_->route_handler_; @@ -233,7 +233,7 @@ CrosswalkModuleManager::getModuleExpiredFunction(const PathWithLaneId & path) crosswalk_id_set.insert(crosswalk.first->crosswalkLanelet().id()); } - return [crosswalk_id_set](const std::shared_ptr & scene_module) { + return [crosswalk_id_set](const std::shared_ptr & scene_module) { return crosswalk_id_set.count(scene_module->getModuleId()) == 0; }; } diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/manager.hpp index d6f6ddfb7b6ad..091a427e14949 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/manager.hpp @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include @@ -48,8 +48,8 @@ class CrosswalkModuleManager : public SceneModuleManagerInterfaceWithRTC void launchNewModules(const PathWithLaneId & path) override; - std::function &)> getModuleExpiredFunction( - const PathWithLaneId & path) override; + std::function &)> + getModuleExpiredFunction(const PathWithLaneId & path) override; }; class CrosswalkModulePlugin : public PluginWrapper diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp index 07b2f1deff0c7..64f7e9e14dcd1 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp @@ -176,7 +176,7 @@ CrosswalkModule::CrosswalkModule( const std::optional & reg_elem_id, const lanelet::LaneletMapPtr & lanelet_map_ptr, const PlannerParam & planner_param, const rclcpp::Logger & logger, const rclcpp::Clock::SharedPtr clock) -: SceneModuleInterface(module_id, logger, clock), +: SceneModuleInterfaceWithRTC(module_id, logger, clock), module_id_(module_id), planner_param_(planner_param), use_regulatory_element_(reg_elem_id) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp index b3fbc2f6cfaba..d5a9e463c730b 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp @@ -17,7 +17,7 @@ #include "autoware/behavior_velocity_crosswalk_module/util.hpp" -#include +#include #include #include #include @@ -112,7 +112,7 @@ double InterpolateMap( } } // namespace -class CrosswalkModule : public SceneModuleInterface +class CrosswalkModule : public SceneModuleInterfaceWithRTC { public: struct PlannerParam diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml index ff91cf40a32a6..90aaddf96feef 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml @@ -18,6 +18,7 @@ eigen3_cmake_module autoware_behavior_velocity_planner_common + autoware_behavior_velocity_rtc_interface autoware_lanelet2_extension autoware_motion_utils autoware_planning_msgs diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.cpp index 3f39696ff6bcc..62f5b88699a37 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.cpp @@ -74,16 +74,17 @@ void DetectionAreaModuleManager::launchNewModules( } } -std::function &)> +std::function &)> DetectionAreaModuleManager::getModuleExpiredFunction( const tier4_planning_msgs::msg::PathWithLaneId & path) { const auto detection_area_id_set = planning_utils::getRegElemIdSetOnPath( path, planner_data_->route_handler_->getLaneletMapPtr(), planner_data_->current_odometry->pose); - return [detection_area_id_set](const std::shared_ptr & scene_module) { - return detection_area_id_set.count(scene_module->getModuleId()) == 0; - }; + return + [detection_area_id_set](const std::shared_ptr & scene_module) { + return detection_area_id_set.count(scene_module->getModuleId()) == 0; + }; } } // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.hpp index 7aa60cbbaa18b..1fbcc16461ebc 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.hpp @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include @@ -41,8 +41,8 @@ class DetectionAreaModuleManager : public SceneModuleManagerInterfaceWithRTC void launchNewModules(const tier4_planning_msgs::msg::PathWithLaneId & path) override; - std::function &)> getModuleExpiredFunction( - const tier4_planning_msgs::msg::PathWithLaneId & path) override; + std::function &)> + getModuleExpiredFunction(const tier4_planning_msgs::msg::PathWithLaneId & path) override; }; class DetectionAreaModulePlugin : public PluginWrapper diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.cpp index 61b3b185999d8..6d7754624485c 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.cpp @@ -37,7 +37,7 @@ DetectionAreaModule::DetectionAreaModule( const lanelet::autoware::DetectionArea & detection_area_reg_elem, const PlannerParam & planner_param, const rclcpp::Logger & logger, const rclcpp::Clock::SharedPtr clock) -: SceneModuleInterface(module_id, logger, clock), +: SceneModuleInterfaceWithRTC(module_id, logger, clock), lane_id_(lane_id), detection_area_reg_elem_(detection_area_reg_elem), state_(State::GO), diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.hpp index 9224cf4624687..bdf2d05a35bcb 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.hpp @@ -23,8 +23,8 @@ #define EIGEN_MPL2_ONLY #include -#include #include +#include #include #include @@ -38,7 +38,7 @@ using PathIndexWithPoint2d = std::pair; // front using PathIndexWithOffset = std::pair; // front index, offset using tier4_planning_msgs::msg::PathWithLaneId; -class DetectionAreaModule : public SceneModuleInterface +class DetectionAreaModule : public SceneModuleInterfaceWithRTC { public: enum class State { GO, STOP }; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml index 7a64d1d6638ff..208e7ed49de71 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml @@ -20,6 +20,7 @@ autoware_cmake autoware_behavior_velocity_planner_common + autoware_behavior_velocity_rtc_interface autoware_internal_debug_msgs autoware_interpolation autoware_lanelet2_extension diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/manager.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/manager.cpp index 39ed8e80412a6..41bdbe3e43c8b 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/manager.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/manager.cpp @@ -353,14 +353,14 @@ void IntersectionModuleManager::launchNewModules( } } -std::function &)> +std::function &)> IntersectionModuleManager::getModuleExpiredFunction( const tier4_planning_msgs::msg::PathWithLaneId & path) { const auto lane_set = planning_utils::getLaneletsOnPath( path, planner_data_->route_handler_->getLaneletMapPtr(), planner_data_->current_odometry->pose); - return [lane_set](const std::shared_ptr & scene_module) { + return [lane_set](const std::shared_ptr & scene_module) { const auto intersection_module = std::dynamic_pointer_cast(scene_module); const auto & associative_ids = intersection_module->getAssociativeIds(); for (const auto & lane : lane_set) { diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/manager.hpp index 80c87e55c6696..c6f76d7c39640 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/manager.hpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include @@ -47,8 +48,8 @@ class IntersectionModuleManager : public SceneModuleManagerInterfaceWithRTC void launchNewModules(const tier4_planning_msgs::msg::PathWithLaneId & path) override; - std::function &)> getModuleExpiredFunction( - const tier4_planning_msgs::msg::PathWithLaneId & path) override; + std::function &)> + getModuleExpiredFunction(const tier4_planning_msgs::msg::PathWithLaneId & path) override; bool hasSameParentLaneletAndTurnDirectionWithRegistered(const lanelet::ConstLanelet & lane) const; @@ -63,7 +64,7 @@ class IntersectionModuleManager : public SceneModuleManagerInterfaceWithRTC tl_observation_pub_; }; -class MergeFromPrivateModuleManager : public SceneModuleManagerInterface +class MergeFromPrivateModuleManager : public SceneModuleManagerInterface<> { public: explicit MergeFromPrivateModuleManager(rclcpp::Node & node); diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp index 7c492a9dd42bf..e33416860c319 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp @@ -53,7 +53,7 @@ IntersectionModule::IntersectionModule( const PlannerParam & planner_param, const std::set & associative_ids, const std::string & turn_direction, const bool has_traffic_light, rclcpp::Node & node, const rclcpp::Logger logger, const rclcpp::Clock::SharedPtr clock) -: SceneModuleInterface(module_id, logger, clock), +: SceneModuleInterfaceWithRTC(module_id, logger, clock), planner_param_(planner_param), lane_id_(lane_id), associative_ids_(associative_ids), diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp index 164df7588bd68..6c31be2ce83b9 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.hpp +++ b/planning/behavior_velocity_planner/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 @@ -46,7 +46,7 @@ namespace autoware::behavior_velocity_planner { -class IntersectionModule : public SceneModuleInterface +class IntersectionModule : public SceneModuleInterfaceWithRTC { public: struct PlannerParam diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/src/manager.hpp index 545af1576c6a8..bea068f5b9579 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/src/manager.hpp @@ -29,7 +29,7 @@ namespace autoware::behavior_velocity_planner { -class NoDrivableLaneModuleManager : public SceneModuleManagerInterface +class NoDrivableLaneModuleManager : public SceneModuleManagerInterface<> { public: explicit NoDrivableLaneModuleManager(rclcpp::Node & node); diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/package.xml index 88fafeb5b90dc..4415eadef62c7 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/package.xml @@ -18,6 +18,7 @@ autoware_cmake autoware_behavior_velocity_planner_common + autoware_behavior_velocity_rtc_interface autoware_interpolation autoware_lanelet2_extension autoware_motion_utils diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/manager.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/manager.cpp index 9d66aa6672d36..dca2dde33b693 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/manager.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/manager.cpp @@ -69,16 +69,17 @@ void NoStoppingAreaModuleManager::launchNewModules( } } -std::function &)> +std::function &)> NoStoppingAreaModuleManager::getModuleExpiredFunction( const tier4_planning_msgs::msg::PathWithLaneId & path) { const auto no_stopping_area_id_set = planning_utils::getRegElemIdSetOnPath( path, planner_data_->route_handler_->getLaneletMapPtr(), planner_data_->current_odometry->pose); - return [no_stopping_area_id_set](const std::shared_ptr & scene_module) { - return no_stopping_area_id_set.count(scene_module->getModuleId()) == 0; - }; + return + [no_stopping_area_id_set](const std::shared_ptr & scene_module) { + return no_stopping_area_id_set.count(scene_module->getModuleId()) == 0; + }; } } // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/manager.hpp index 7009e94612580..523cbba291632 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/manager.hpp @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include @@ -41,8 +41,8 @@ class NoStoppingAreaModuleManager : public SceneModuleManagerInterfaceWithRTC void launchNewModules(const tier4_planning_msgs::msg::PathWithLaneId & path) override; - std::function &)> getModuleExpiredFunction( - const tier4_planning_msgs::msg::PathWithLaneId & path) override; + std::function &)> + getModuleExpiredFunction(const tier4_planning_msgs::msg::PathWithLaneId & path) override; }; class NoStoppingAreaModulePlugin : public PluginWrapper diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.cpp index 3769aed71a1ec..5c79ec69a9d98 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.cpp @@ -41,7 +41,7 @@ NoStoppingAreaModule::NoStoppingAreaModule( const lanelet::autoware::NoStoppingArea & no_stopping_area_reg_elem, const PlannerParam & planner_param, const rclcpp::Logger & logger, const rclcpp::Clock::SharedPtr clock) -: SceneModuleInterface(module_id, logger, clock), +: SceneModuleInterfaceWithRTC(module_id, logger, clock), lane_id_(lane_id), no_stopping_area_reg_elem_(no_stopping_area_reg_elem), planner_param_(planner_param), diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.hpp index 51f3a0d261ebd..1eafcf157623d 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/src/scene_no_stopping_area.hpp @@ -17,9 +17,9 @@ #include "utils.hpp" -#include #include #include +#include #include #include @@ -31,7 +31,7 @@ namespace autoware::behavior_velocity_planner { -class NoStoppingAreaModule : public SceneModuleInterface +class NoStoppingAreaModule : public SceneModuleInterfaceWithRTC { public: struct PlannerParam diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/src/manager.hpp index 32b1818214952..08c1516dea67a 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/src/manager.hpp @@ -39,7 +39,7 @@ namespace autoware::behavior_velocity_planner { -class OcclusionSpotModuleManager : public SceneModuleManagerInterface +class OcclusionSpotModuleManager : public SceneModuleManagerInterface<> { public: explicit OcclusionSpotModuleManager(rclcpp::Node & node); diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md index 2abbb83575af5..c4c8d97b4b390 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/README.md @@ -1,3 +1,3 @@ # Behavior Velocity Planner Common -This package provides common functions as a library, which are used in the `behavior_velocity_planner` node and modules. +This package provides a behavior velocity interface without RTC, and common functions as a library, which are used in the `behavior_velocity_planner` node and modules. diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp index 4e898d9d28715..9dbed9009a93e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp @@ -16,12 +16,14 @@ #define AUTOWARE__BEHAVIOR_VELOCITY_PLANNER_COMMON__SCENE_MODULE_INTERFACE_HPP_ #include +#include #include #include +#include #include -#include #include #include +#include #include #include @@ -30,7 +32,6 @@ #include #include #include -#include #include #include @@ -54,14 +55,12 @@ using autoware::motion_utils::PlanningBehavior; using autoware::motion_utils::VelocityFactor; using autoware::objects_of_interest_marker_interface::ColorName; using autoware::objects_of_interest_marker_interface::ObjectsOfInterestMarkerInterface; -using autoware::rtc_interface::RTCInterface; using autoware::universe_utils::DebugPublisher; using autoware::universe_utils::getOrDeclareParameter; +using autoware::universe_utils::StopWatch; using autoware_internal_debug_msgs::msg::Float64Stamped; using builtin_interfaces::msg::Time; using tier4_planning_msgs::msg::PathWithLaneId; -using tier4_rtc_msgs::msg::Module; -using tier4_rtc_msgs::msg::State; using unique_identifier_msgs::msg::UUID; struct ObjectOfInterest @@ -114,12 +113,6 @@ class SceneModuleInterface std::shared_ptr getTimeKeeper() { return time_keeper_; } - void setActivation(const bool activated) { activated_ = activated; } - void setRTCEnabled(const bool enable_rtc) { rtc_enabled_ = enable_rtc; } - bool isActivated() const { return activated_; } - bool isSafe() const { return safe_; } - double getDistance() const { return distance_; } - void resetVelocityFactor() { velocity_factor_.reset(); } VelocityFactor getVelocityFactor() const { return velocity_factor_.get(); } std::vector getObjectsOfInterestData() const { return objects_of_interest_; } @@ -127,10 +120,6 @@ class SceneModuleInterface protected: const int64_t module_id_; - bool activated_; - bool safe_; - bool rtc_enabled_; - double distance_; rclcpp::Logger logger_; rclcpp::Clock::SharedPtr clock_; std::shared_ptr planner_data_; @@ -139,16 +128,6 @@ class SceneModuleInterface std::vector objects_of_interest_; mutable std::shared_ptr time_keeper_; - void setSafe(const bool safe) - { - safe_ = safe; - if (!rtc_enabled_) { - syncActivation(); - } - } - void setDistance(const double distance) { distance_ = distance; } - void syncActivation() { setActivation(isSafe()); } - void setObjectsOfInterestData( const geometry_msgs::msg::Pose & pose, const autoware_perception_msgs::msg::Shape & shape, const ColorName & color_name) @@ -160,10 +139,39 @@ class SceneModuleInterface const std::vector & points) const; }; +template class SceneModuleManagerInterface { public: - SceneModuleManagerInterface(rclcpp::Node & node, [[maybe_unused]] const char * module_name); + SceneModuleManagerInterface(rclcpp::Node & node, [[maybe_unused]] const char * module_name) + : node_(node), clock_(node.get_clock()), logger_(node.get_logger()) + { + const auto ns = std::string("~/debug/") + module_name; + pub_debug_ = node.create_publisher(ns, 1); + if (!node.has_parameter("is_publish_debug_path")) { + is_publish_debug_path_ = node.declare_parameter("is_publish_debug_path"); + } else { + is_publish_debug_path_ = node.get_parameter("is_publish_debug_path").as_bool(); + } + if (is_publish_debug_path_) { + pub_debug_path_ = node.create_publisher( + std::string("~/debug/path_with_lane_id/") + module_name, 1); + } + pub_virtual_wall_ = node.create_publisher( + std::string("~/virtual_wall/") + module_name, 5); + pub_velocity_factor_ = node.create_publisher( + std::string("/planning/velocity_factors/") + module_name, 1); + pub_infrastructure_commands_ = + node.create_publisher( + "~/output/infrastructure_commands", 1); + + processing_time_publisher_ = std::make_shared(&node, "~/debug"); + + pub_processing_time_detail_ = node.create_publisher( + "~/debug/processing_time_detail_ms/" + std::string(module_name), 1); + + time_keeper_ = std::make_shared(pub_processing_time_detail_); + } virtual ~SceneModuleManagerInterface() = default; @@ -171,31 +179,111 @@ class SceneModuleManagerInterface void updateSceneModuleInstances( const std::shared_ptr & planner_data, - const tier4_planning_msgs::msg::PathWithLaneId & path); + const tier4_planning_msgs::msg::PathWithLaneId & path) + { + planner_data_ = planner_data; + + launchNewModules(path); + deleteExpiredModules(path); + } virtual void plan(tier4_planning_msgs::msg::PathWithLaneId * path) { modifyPathVelocity(path); } protected: - virtual void modifyPathVelocity(tier4_planning_msgs::msg::PathWithLaneId * path); + virtual void modifyPathVelocity(tier4_planning_msgs::msg::PathWithLaneId * path) + { + universe_utils::ScopedTimeTrack st( + "SceneModuleManagerInterface::modifyPathVelocity", *time_keeper_); + StopWatch stop_watch; + stop_watch.tic("Total"); + visualization_msgs::msg::MarkerArray debug_marker_array; + autoware_adapi_v1_msgs::msg::VelocityFactorArray velocity_factor_array; + velocity_factor_array.header.frame_id = "map"; + velocity_factor_array.header.stamp = clock_->now(); + + tier4_v2x_msgs::msg::InfrastructureCommandArray infrastructure_command_array; + infrastructure_command_array.stamp = clock_->now(); + + for (const auto & scene_module : scene_modules_) { + scene_module->resetVelocityFactor(); + scene_module->setPlannerData(planner_data_); + scene_module->modifyPathVelocity(path); + + // The velocity factor must be called after modifyPathVelocity. + const auto velocity_factor = scene_module->getVelocityFactor(); + if (velocity_factor.behavior != PlanningBehavior::UNKNOWN) { + velocity_factor_array.factors.emplace_back(velocity_factor); + } + + if (const auto command = scene_module->getInfrastructureCommand()) { + infrastructure_command_array.commands.push_back(*command); + } + + for (const auto & marker : scene_module->createDebugMarkerArray().markers) { + debug_marker_array.markers.push_back(marker); + } + + virtual_wall_marker_creator_.add_virtual_walls(scene_module->createVirtualWalls()); + } + + pub_velocity_factor_->publish(velocity_factor_array); + pub_infrastructure_commands_->publish(infrastructure_command_array); + pub_debug_->publish(debug_marker_array); + if (is_publish_debug_path_) { + tier4_planning_msgs::msg::PathWithLaneId debug_path; + debug_path.header = path->header; + debug_path.points = path->points; + pub_debug_path_->publish(debug_path); + } + pub_virtual_wall_->publish(virtual_wall_marker_creator_.create_markers(clock_->now())); + processing_time_publisher_->publish( + std::string(getModuleName()) + "/processing_time_ms", stop_watch.toc("Total")); + } virtual void launchNewModules(const tier4_planning_msgs::msg::PathWithLaneId & path) = 0; - virtual std::function &)> - getModuleExpiredFunction(const tier4_planning_msgs::msg::PathWithLaneId & path) = 0; + virtual std::function &)> getModuleExpiredFunction( + const tier4_planning_msgs::msg::PathWithLaneId & path) = 0; - virtual void deleteExpiredModules(const tier4_planning_msgs::msg::PathWithLaneId & path); + virtual void deleteExpiredModules(const tier4_planning_msgs::msg::PathWithLaneId & path) + { + const auto isModuleExpired = getModuleExpiredFunction(path); + + auto itr = scene_modules_.begin(); + while (itr != scene_modules_.end()) { + if (isModuleExpired(*itr)) { + itr = scene_modules_.erase(itr); + } else { + itr++; + } + } + } bool isModuleRegistered(const int64_t module_id) { return registered_module_id_set_.count(module_id) != 0; } - void registerModule(const std::shared_ptr & scene_module); + void registerModule(const std::shared_ptr & scene_module) + { + RCLCPP_DEBUG( + logger_, "register task: module = %s, id = %lu", getModuleName(), + scene_module->getModuleId()); + registered_module_id_set_.emplace(scene_module->getModuleId()); + scene_module->setTimeKeeper(time_keeper_); + scene_modules_.insert(scene_module); + } size_t findEgoSegmentIndex( - const std::vector & points) const; + const std::vector & points) const + { + const auto & p = planner_data_; + return autoware::motion_utils::findFirstNearestSegmentIndexWithSoftConstraints( + points, p->current_odometry->pose, p->ego_nearest_dist_threshold, + p->ego_nearest_yaw_threshold); + } - std::set> scene_modules_; + std::set> scene_modules_; std::set registered_module_id_set_; std::shared_ptr planner_data_; @@ -220,66 +308,19 @@ class SceneModuleManagerInterface std::shared_ptr time_keeper_; }; - -class SceneModuleManagerInterfaceWithRTC : public SceneModuleManagerInterface -{ -public: - SceneModuleManagerInterfaceWithRTC( - rclcpp::Node & node, const char * module_name, const bool enable_rtc = true); - - void plan(tier4_planning_msgs::msg::PathWithLaneId * path) override; - -protected: - RTCInterface rtc_interface_; - std::unordered_map map_uuid_; - - ObjectsOfInterestMarkerInterface objects_of_interest_marker_interface_; - - virtual void sendRTC(const Time & stamp); - - virtual void setActivation(); - - void updateRTCStatus( - const UUID & uuid, const bool safe, const uint8_t state, const double distance, - const Time & stamp) - { - rtc_interface_.updateCooperateStatus(uuid, safe, state, distance, distance, stamp); - } - - void removeRTCStatus(const UUID & uuid) { rtc_interface_.removeCooperateStatus(uuid); } - - void publishRTCStatus(const Time & stamp) - { - rtc_interface_.removeExpiredCooperateStatus(); - rtc_interface_.publishCooperateStatus(stamp); - } - - UUID getUUID(const int64_t & module_id) const; - - void generateUUID(const int64_t & module_id); - - void removeUUID(const int64_t & module_id); - - void publishObjectsOfInterestMarker(); - - void deleteExpiredModules(const tier4_planning_msgs::msg::PathWithLaneId & path) override; - - static bool getEnableRTC(rclcpp::Node & node, const std::string & param_name) - { - bool enable_rtc = true; - - try { - enable_rtc = getOrDeclareParameter(node, "enable_all_modules_auto_mode") - ? false - : getOrDeclareParameter(node, param_name); - } catch (const std::exception & e) { - enable_rtc = getOrDeclareParameter(node, param_name); - } - - return enable_rtc; - } -}; - +extern template SceneModuleManagerInterface::SceneModuleManagerInterface( + rclcpp::Node & node, [[maybe_unused]] const char * module_name); +extern template size_t SceneModuleManagerInterface::findEgoSegmentIndex( + const std::vector & points) const; +extern template void SceneModuleManagerInterface::updateSceneModuleInstances( + const std::shared_ptr & planner_data, + const tier4_planning_msgs::msg::PathWithLaneId & path); +extern template void SceneModuleManagerInterface::modifyPathVelocity( + tier4_planning_msgs::msg::PathWithLaneId * path); +extern template void SceneModuleManagerInterface::deleteExpiredModules( + const tier4_planning_msgs::msg::PathWithLaneId & path); +extern template void SceneModuleManagerInterface::registerModule( + const std::shared_ptr & scene_module); } // namespace autoware::behavior_velocity_planner #endif // AUTOWARE__BEHAVIOR_VELOCITY_PLANNER_COMMON__SCENE_MODULE_INTERFACE_HPP_ diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/package.xml index a0b54cb879cab..002c3362260cc 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/package.xml @@ -29,7 +29,6 @@ autoware_perception_msgs autoware_planning_msgs autoware_route_handler - autoware_rtc_interface autoware_universe_utils autoware_vehicle_info_utils autoware_velocity_smoother diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/src/scene_module_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/src/scene_module_interface.cpp index cdfde1ce51205..ffd454012d13e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/src/scene_module_interface.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/src/scene_module_interface.cpp @@ -13,29 +13,20 @@ // limitations under the License. #include -#include #include -#include -#include #include #include #include #include -#include #include namespace autoware::behavior_velocity_planner { -using autoware::universe_utils::StopWatch; - SceneModuleInterface::SceneModuleInterface( const int64_t module_id, rclcpp::Logger logger, rclcpp::Clock::SharedPtr clock) : module_id_(module_id), - activated_(false), - safe_(false), - distance_(std::numeric_limits::lowest()), logger_(logger), clock_(clock), time_keeper_(std::shared_ptr()) @@ -50,222 +41,17 @@ size_t SceneModuleInterface::findEgoSegmentIndex( points, p->current_odometry->pose, p->ego_nearest_dist_threshold); } -SceneModuleManagerInterface::SceneModuleManagerInterface( - rclcpp::Node & node, [[maybe_unused]] const char * module_name) -: node_(node), clock_(node.get_clock()), logger_(node.get_logger()) -{ - const auto ns = std::string("~/debug/") + module_name; - pub_debug_ = node.create_publisher(ns, 1); - if (!node.has_parameter("is_publish_debug_path")) { - is_publish_debug_path_ = node.declare_parameter("is_publish_debug_path"); - } else { - is_publish_debug_path_ = node.get_parameter("is_publish_debug_path").as_bool(); - } - if (is_publish_debug_path_) { - pub_debug_path_ = node.create_publisher( - std::string("~/debug/path_with_lane_id/") + module_name, 1); - } - pub_virtual_wall_ = node.create_publisher( - std::string("~/virtual_wall/") + module_name, 5); - pub_velocity_factor_ = node.create_publisher( - std::string("/planning/velocity_factors/") + module_name, 1); - pub_infrastructure_commands_ = - node.create_publisher( - "~/output/infrastructure_commands", 1); - - processing_time_publisher_ = std::make_shared(&node, "~/debug"); - - pub_processing_time_detail_ = node.create_publisher( - "~/debug/processing_time_detail_ms/" + std::string(module_name), 1); - - time_keeper_ = std::make_shared(pub_processing_time_detail_); -} - -size_t SceneModuleManagerInterface::findEgoSegmentIndex( - const std::vector & points) const -{ - const auto & p = planner_data_; - return autoware::motion_utils::findFirstNearestSegmentIndexWithSoftConstraints( - points, p->current_odometry->pose, p->ego_nearest_dist_threshold, p->ego_nearest_yaw_threshold); -} - -void SceneModuleManagerInterface::updateSceneModuleInstances( +template SceneModuleManagerInterface::SceneModuleManagerInterface( + rclcpp::Node & node, [[maybe_unused]] const char * module_name); +template size_t SceneModuleManagerInterface::findEgoSegmentIndex( + const std::vector & points) const; +template void SceneModuleManagerInterface::updateSceneModuleInstances( const std::shared_ptr & planner_data, - const tier4_planning_msgs::msg::PathWithLaneId & path) -{ - planner_data_ = planner_data; - - launchNewModules(path); - deleteExpiredModules(path); -} - -void SceneModuleManagerInterface::modifyPathVelocity( - tier4_planning_msgs::msg::PathWithLaneId * path) -{ - universe_utils::ScopedTimeTrack st( - "SceneModuleManagerInterface::modifyPathVelocity", *time_keeper_); - StopWatch stop_watch; - stop_watch.tic("Total"); - visualization_msgs::msg::MarkerArray debug_marker_array; - autoware_adapi_v1_msgs::msg::VelocityFactorArray velocity_factor_array; - velocity_factor_array.header.frame_id = "map"; - velocity_factor_array.header.stamp = clock_->now(); - - tier4_v2x_msgs::msg::InfrastructureCommandArray infrastructure_command_array; - infrastructure_command_array.stamp = clock_->now(); - - for (const auto & scene_module : scene_modules_) { - scene_module->resetVelocityFactor(); - scene_module->setPlannerData(planner_data_); - scene_module->modifyPathVelocity(path); - - // The velocity factor must be called after modifyPathVelocity. - const auto velocity_factor = scene_module->getVelocityFactor(); - if (velocity_factor.behavior != PlanningBehavior::UNKNOWN) { - velocity_factor_array.factors.emplace_back(velocity_factor); - } - - if (const auto command = scene_module->getInfrastructureCommand()) { - infrastructure_command_array.commands.push_back(*command); - } - - for (const auto & marker : scene_module->createDebugMarkerArray().markers) { - debug_marker_array.markers.push_back(marker); - } - - virtual_wall_marker_creator_.add_virtual_walls(scene_module->createVirtualWalls()); - } - - pub_velocity_factor_->publish(velocity_factor_array); - pub_infrastructure_commands_->publish(infrastructure_command_array); - pub_debug_->publish(debug_marker_array); - if (is_publish_debug_path_) { - tier4_planning_msgs::msg::PathWithLaneId debug_path; - debug_path.header = path->header; - debug_path.points = path->points; - pub_debug_path_->publish(debug_path); - } - pub_virtual_wall_->publish(virtual_wall_marker_creator_.create_markers(clock_->now())); - processing_time_publisher_->publish( - std::string(getModuleName()) + "/processing_time_ms", stop_watch.toc("Total")); -} - -void SceneModuleManagerInterface::deleteExpiredModules( - const tier4_planning_msgs::msg::PathWithLaneId & path) -{ - const auto isModuleExpired = getModuleExpiredFunction(path); - - auto itr = scene_modules_.begin(); - while (itr != scene_modules_.end()) { - if (isModuleExpired(*itr)) { - itr = scene_modules_.erase(itr); - } else { - itr++; - } - } -} - -void SceneModuleManagerInterface::registerModule( - const std::shared_ptr & scene_module) -{ - RCLCPP_DEBUG( - logger_, "register task: module = %s, id = %lu", getModuleName(), scene_module->getModuleId()); - registered_module_id_set_.emplace(scene_module->getModuleId()); - scene_module->setTimeKeeper(time_keeper_); - scene_modules_.insert(scene_module); -} - -SceneModuleManagerInterfaceWithRTC::SceneModuleManagerInterfaceWithRTC( - rclcpp::Node & node, const char * module_name, const bool enable_rtc) -: SceneModuleManagerInterface(node, module_name), - rtc_interface_(&node, module_name, enable_rtc), - objects_of_interest_marker_interface_(&node, module_name) -{ -} - -void SceneModuleManagerInterfaceWithRTC::plan(tier4_planning_msgs::msg::PathWithLaneId * path) -{ - setActivation(); - modifyPathVelocity(path); - sendRTC(path->header.stamp); - publishObjectsOfInterestMarker(); -} - -void SceneModuleManagerInterfaceWithRTC::sendRTC(const Time & stamp) -{ - for (const auto & scene_module : scene_modules_) { - const UUID uuid = getUUID(scene_module->getModuleId()); - const auto state = !scene_module->isActivated() && scene_module->isSafe() - ? State::WAITING_FOR_EXECUTION - : State::RUNNING; - updateRTCStatus(uuid, scene_module->isSafe(), state, scene_module->getDistance(), stamp); - } - publishRTCStatus(stamp); -} - -void SceneModuleManagerInterfaceWithRTC::setActivation() -{ - for (const auto & scene_module : scene_modules_) { - const UUID uuid = getUUID(scene_module->getModuleId()); - scene_module->setActivation(rtc_interface_.isActivated(uuid)); - scene_module->setRTCEnabled(rtc_interface_.isRTCEnabled(uuid)); - } -} - -UUID SceneModuleManagerInterfaceWithRTC::getUUID(const int64_t & module_id) const -{ - if (map_uuid_.count(module_id) == 0) { - const UUID uuid; - return uuid; - } - return map_uuid_.at(module_id); -} - -void SceneModuleManagerInterfaceWithRTC::generateUUID(const int64_t & module_id) -{ - map_uuid_.insert({module_id, autoware::universe_utils::generateUUID()}); -} - -void SceneModuleManagerInterfaceWithRTC::removeUUID(const int64_t & module_id) -{ - const auto result = map_uuid_.erase(module_id); - if (result == 0) { - RCLCPP_WARN_STREAM(logger_, "[removeUUID] module_id = " << module_id << " is not registered."); - } -} - -void SceneModuleManagerInterfaceWithRTC::publishObjectsOfInterestMarker() -{ - for (const auto & scene_module : scene_modules_) { - const auto objects = scene_module->getObjectsOfInterestData(); - for (const auto & obj : objects) { - objects_of_interest_marker_interface_.insertObjectData(obj.pose, obj.shape, obj.color); - } - scene_module->clearObjectsOfInterestData(); - } - - objects_of_interest_marker_interface_.publishMarkerArray(); -} - -void SceneModuleManagerInterfaceWithRTC::deleteExpiredModules( - const tier4_planning_msgs::msg::PathWithLaneId & path) -{ - const auto isModuleExpired = getModuleExpiredFunction(path); - - auto itr = scene_modules_.begin(); - while (itr != scene_modules_.end()) { - if (isModuleExpired(*itr)) { - const UUID uuid = getUUID((*itr)->getModuleId()); - updateRTCStatus( - uuid, (*itr)->isSafe(), State::SUCCEEDED, std::numeric_limits::lowest(), - clock_->now()); - removeUUID((*itr)->getModuleId()); - registered_module_id_set_.erase((*itr)->getModuleId()); - itr = scene_modules_.erase(itr); - } else { - itr++; - } - } -} - + const tier4_planning_msgs::msg::PathWithLaneId & path); +template void SceneModuleManagerInterface::modifyPathVelocity( + tier4_planning_msgs::msg::PathWithLaneId * path); +template void SceneModuleManagerInterface::deleteExpiredModules( + const tier4_planning_msgs::msg::PathWithLaneId & path); +template void SceneModuleManagerInterface::registerModule( + const std::shared_ptr & scene_module); } // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/CMakeLists.txt new file mode 100644 index 0000000000000..2bd9b9b8d20f0 --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.14) +project(autoware_behavior_velocity_rtc_interface) + +find_package(autoware_cmake REQUIRED) +autoware_package() + +ament_auto_add_library(${PROJECT_NAME} SHARED + src/scene_module_interface_with_rtc.cpp +) + +ament_auto_package(INSTALL_TO_SHARE) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/README.md new file mode 100644 index 0000000000000..79b5a4e3d7b95 --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/README.md @@ -0,0 +1,3 @@ +# Behavior Velocity RTC Interface + +This package provides a behavior velocity interface with RTC, which are used in the `behavior_velocity_planner` node and modules. diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/include/autoware/behavior_velocity_rtc_interface/scene_module_interface_with_rtc.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/include/autoware/behavior_velocity_rtc_interface/scene_module_interface_with_rtc.hpp new file mode 100644 index 0000000000000..4e30ab019aa4e --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/include/autoware/behavior_velocity_rtc_interface/scene_module_interface_with_rtc.hpp @@ -0,0 +1,154 @@ +// Copyright 2020 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__BEHAVIOR_VELOCITY_RTC_INTERFACE__SCENE_MODULE_INTERFACE_WITH_RTC_HPP_ +#define AUTOWARE__BEHAVIOR_VELOCITY_RTC_INTERFACE__SCENE_MODULE_INTERFACE_WITH_RTC_HPP_ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +// Debug +#include +#include + +namespace autoware::behavior_velocity_planner +{ + +using autoware::rtc_interface::RTCInterface; +using autoware::universe_utils::getOrDeclareParameter; +using builtin_interfaces::msg::Time; +using tier4_planning_msgs::msg::PathWithLaneId; +using tier4_rtc_msgs::msg::Module; +using tier4_rtc_msgs::msg::State; +using unique_identifier_msgs::msg::UUID; + +class SceneModuleInterfaceWithRTC : public SceneModuleInterface +{ +public: + explicit SceneModuleInterfaceWithRTC( + const int64_t module_id, rclcpp::Logger logger, rclcpp::Clock::SharedPtr clock); + virtual ~SceneModuleInterfaceWithRTC() = default; + + void setActivation(const bool activated) { activated_ = activated; } + void setRTCEnabled(const bool enable_rtc) { rtc_enabled_ = enable_rtc; } + bool isActivated() const { return activated_; } + bool isSafe() const { return safe_; } + double getDistance() const { return distance_; } + +protected: + bool activated_; + bool safe_; + bool rtc_enabled_; + double distance_; + + void setSafe(const bool safe) + { + safe_ = safe; + if (!rtc_enabled_) { + syncActivation(); + } + } + void setDistance(const double distance) { distance_ = distance; } + void syncActivation() { setActivation(isSafe()); } +}; + +class SceneModuleManagerInterfaceWithRTC +: public SceneModuleManagerInterface +{ +public: + SceneModuleManagerInterfaceWithRTC( + rclcpp::Node & node, const char * module_name, const bool enable_rtc = true); + + void plan(tier4_planning_msgs::msg::PathWithLaneId * path) override; + +protected: + RTCInterface rtc_interface_; + std::unordered_map map_uuid_; + + ObjectsOfInterestMarkerInterface objects_of_interest_marker_interface_; + + virtual void sendRTC(const Time & stamp); + + virtual void setActivation(); + + void updateRTCStatus( + const UUID & uuid, const bool safe, const uint8_t state, const double distance, + const Time & stamp) + { + rtc_interface_.updateCooperateStatus(uuid, safe, state, distance, distance, stamp); + } + + void removeRTCStatus(const UUID & uuid) { rtc_interface_.removeCooperateStatus(uuid); } + + void publishRTCStatus(const Time & stamp) + { + rtc_interface_.removeExpiredCooperateStatus(); + rtc_interface_.publishCooperateStatus(stamp); + } + + UUID getUUID(const int64_t & module_id) const; + + void generateUUID(const int64_t & module_id); + + void removeUUID(const int64_t & module_id); + + void publishObjectsOfInterestMarker(); + + void deleteExpiredModules(const tier4_planning_msgs::msg::PathWithLaneId & path) override; + + static bool getEnableRTC(rclcpp::Node & node, const std::string & param_name) + { + bool enable_rtc = true; + + try { + enable_rtc = getOrDeclareParameter(node, "enable_all_modules_auto_mode") + ? false + : getOrDeclareParameter(node, param_name); + } catch (const std::exception & e) { + enable_rtc = getOrDeclareParameter(node, param_name); + } + + return enable_rtc; + } +}; + +extern template size_t +SceneModuleManagerInterface::findEgoSegmentIndex( + const std::vector & points) const; +extern template void +SceneModuleManagerInterface::updateSceneModuleInstances( + const std::shared_ptr & planner_data, + const tier4_planning_msgs::msg::PathWithLaneId & path); +extern template void SceneModuleManagerInterface::modifyPathVelocity( + tier4_planning_msgs::msg::PathWithLaneId * path); +extern template void SceneModuleManagerInterface::registerModule( + const std::shared_ptr & scene_module); +} // namespace autoware::behavior_velocity_planner + +#endif // AUTOWARE__BEHAVIOR_VELOCITY_RTC_INTERFACE__SCENE_MODULE_INTERFACE_WITH_RTC_HPP_ diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/package.xml new file mode 100644 index 0000000000000..88b252106a90a --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/package.xml @@ -0,0 +1,38 @@ + + + + autoware_behavior_velocity_rtc_interface + 0.40.0 + The autoware_behavior_velocity_rtc_interface package + + Mamoru Sobue + Takayuki Murooka + Tomoya Kimura + Shumpei Wakabayashi + Takagi, Isamu + Fumiya Watanabe + + Apache License 2.0 + + Takayuki Murooka + + ament_cmake_auto + autoware_cmake + + autoware_behavior_velocity_planner_common + autoware_motion_utils + autoware_planning_msgs + autoware_rtc_interface + autoware_universe_utils + rclcpp + rclcpp_components + tier4_planning_msgs + + ament_cmake_ros + ament_lint_auto + autoware_lint_common + + + ament_cmake + + diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/src/scene_module_interface_with_rtc.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/src/scene_module_interface_with_rtc.cpp new file mode 100644 index 0000000000000..abac509fd2b2b --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/src/scene_module_interface_with_rtc.cpp @@ -0,0 +1,140 @@ +// 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 +#include +#include +#include + +#include +#include +#include +#include +#include + +namespace autoware::behavior_velocity_planner +{ + +SceneModuleInterfaceWithRTC::SceneModuleInterfaceWithRTC( + const int64_t module_id, rclcpp::Logger logger, rclcpp::Clock::SharedPtr clock) +: SceneModuleInterface(module_id, logger, clock), + activated_(false), + safe_(false), + distance_(std::numeric_limits::lowest()) +{ +} + +SceneModuleManagerInterfaceWithRTC::SceneModuleManagerInterfaceWithRTC( + rclcpp::Node & node, const char * module_name, const bool enable_rtc) +: SceneModuleManagerInterface(node, module_name), + rtc_interface_(&node, module_name, enable_rtc), + objects_of_interest_marker_interface_(&node, module_name) +{ +} + +void SceneModuleManagerInterfaceWithRTC::plan(tier4_planning_msgs::msg::PathWithLaneId * path) +{ + setActivation(); + modifyPathVelocity(path); + sendRTC(path->header.stamp); + publishObjectsOfInterestMarker(); +} + +void SceneModuleManagerInterfaceWithRTC::sendRTC(const Time & stamp) +{ + for (const auto & scene_module : scene_modules_) { + const UUID uuid = getUUID(scene_module->getModuleId()); + const auto state = !scene_module->isActivated() && scene_module->isSafe() + ? State::WAITING_FOR_EXECUTION + : State::RUNNING; + updateRTCStatus(uuid, scene_module->isSafe(), state, scene_module->getDistance(), stamp); + } + publishRTCStatus(stamp); +} + +void SceneModuleManagerInterfaceWithRTC::setActivation() +{ + for (const auto & scene_module : scene_modules_) { + const UUID uuid = getUUID(scene_module->getModuleId()); + scene_module->setActivation(rtc_interface_.isActivated(uuid)); + scene_module->setRTCEnabled(rtc_interface_.isRTCEnabled(uuid)); + } +} + +UUID SceneModuleManagerInterfaceWithRTC::getUUID(const int64_t & module_id) const +{ + if (map_uuid_.count(module_id) == 0) { + const UUID uuid; + return uuid; + } + return map_uuid_.at(module_id); +} + +void SceneModuleManagerInterfaceWithRTC::generateUUID(const int64_t & module_id) +{ + map_uuid_.insert({module_id, autoware::universe_utils::generateUUID()}); +} + +void SceneModuleManagerInterfaceWithRTC::removeUUID(const int64_t & module_id) +{ + const auto result = map_uuid_.erase(module_id); + if (result == 0) { + RCLCPP_WARN_STREAM(logger_, "[removeUUID] module_id = " << module_id << " is not registered."); + } +} + +void SceneModuleManagerInterfaceWithRTC::publishObjectsOfInterestMarker() +{ + for (const auto & scene_module : scene_modules_) { + const auto objects = scene_module->getObjectsOfInterestData(); + for (const auto & obj : objects) { + objects_of_interest_marker_interface_.insertObjectData(obj.pose, obj.shape, obj.color); + } + scene_module->clearObjectsOfInterestData(); + } + + objects_of_interest_marker_interface_.publishMarkerArray(); +} + +void SceneModuleManagerInterfaceWithRTC::deleteExpiredModules( + const tier4_planning_msgs::msg::PathWithLaneId & path) +{ + const auto isModuleExpired = getModuleExpiredFunction(path); + + auto itr = scene_modules_.begin(); + while (itr != scene_modules_.end()) { + if (isModuleExpired(*itr)) { + const UUID uuid = getUUID((*itr)->getModuleId()); + updateRTCStatus( + uuid, (*itr)->isSafe(), State::SUCCEEDED, std::numeric_limits::lowest(), + clock_->now()); + removeUUID((*itr)->getModuleId()); + registered_module_id_set_.erase((*itr)->getModuleId()); + itr = scene_modules_.erase(itr); + } else { + itr++; + } + } +} + +template size_t SceneModuleManagerInterface::findEgoSegmentIndex( + const std::vector & points) const; +template void SceneModuleManagerInterface::updateSceneModuleInstances( + const std::shared_ptr & planner_data, + const tier4_planning_msgs::msg::PathWithLaneId & path); +template void SceneModuleManagerInterface::modifyPathVelocity( + tier4_planning_msgs::msg::PathWithLaneId * path); +template void SceneModuleManagerInterface::registerModule( + const std::shared_ptr & scene_module); +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/manager.hpp index 131ba32f32100..068ed81015fb1 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/manager.hpp @@ -25,7 +25,7 @@ namespace autoware::behavior_velocity_planner { -class RunOutModuleManager : public SceneModuleManagerInterface +class RunOutModuleManager : public SceneModuleManagerInterface<> { public: explicit RunOutModuleManager(rclcpp::Node & node); diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/src/manager.hpp index 950bb8471cc22..f98db8b88b7a9 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_speed_bump_module/src/manager.hpp @@ -29,7 +29,7 @@ namespace autoware::behavior_velocity_planner { -class SpeedBumpModuleManager : public SceneModuleManagerInterface +class SpeedBumpModuleManager : public SceneModuleManagerInterface<> { public: explicit SpeedBumpModuleManager(rclcpp::Node & node); diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/src/manager.hpp index bef8a5eef4ac0..c746e2bf6a314 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/src/manager.hpp @@ -33,7 +33,7 @@ namespace autoware::behavior_velocity_planner { using StopLineWithLaneId = std::pair; -class StopLineModuleManager : public SceneModuleManagerInterface +class StopLineModuleManager : public SceneModuleManagerInterface<> { public: explicit StopLineModuleManager(rclcpp::Node & node); diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/src/manager.hpp index a7a0d83be6368..c5b9293fcdcc5 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_template_module/src/manager.hpp @@ -38,7 +38,7 @@ namespace autoware::behavior_velocity_planner * @param node A reference to the ROS node. */ class TemplateModuleManager -: public autoware::behavior_velocity_planner::SceneModuleManagerInterface +: public autoware::behavior_velocity_planner::SceneModuleManagerInterface<> { public: explicit TemplateModuleManager(rclcpp::Node & node); diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/package.xml index 082973d9431e5..ebc45d372f92d 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/package.xml @@ -20,6 +20,7 @@ autoware_adapi_v1_msgs autoware_behavior_velocity_planner_common + autoware_behavior_velocity_rtc_interface autoware_lanelet2_extension autoware_motion_utils autoware_perception_msgs diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/manager.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/manager.cpp index b6747724ba6f7..1b66824d04623 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/manager.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/manager.cpp @@ -123,7 +123,7 @@ void TrafficLightModuleManager::launchNewModules( } } -std::function &)> +std::function &)> TrafficLightModuleManager::getModuleExpiredFunction( const tier4_planning_msgs::msg::PathWithLaneId & path) { @@ -131,7 +131,7 @@ TrafficLightModuleManager::getModuleExpiredFunction( path, planner_data_->route_handler_->getLaneletMapPtr(), planner_data_->current_odometry->pose); return [this, lanelet_id_set]( - [[maybe_unused]] const std::shared_ptr & scene_module) { + [[maybe_unused]] const std::shared_ptr & scene_module) { for (const auto & id : lanelet_id_set) { if (isModuleRegisteredFromExistingAssociatedModule(id)) { return false; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/manager.hpp index eb8ef53ddb604..5ac32d1107880 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/manager.hpp @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include @@ -42,8 +42,8 @@ class TrafficLightModuleManager : public SceneModuleManagerInterfaceWithRTC void launchNewModules(const tier4_planning_msgs::msg::PathWithLaneId & path) override; - std::function &)> getModuleExpiredFunction( - const tier4_planning_msgs::msg::PathWithLaneId & path) override; + std::function &)> + getModuleExpiredFunction(const tier4_planning_msgs::msg::PathWithLaneId & path) override; void modifyPathVelocity(tier4_planning_msgs::msg::PathWithLaneId * path) override; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/scene.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/scene.cpp index 5eb0d5aa5f267..458d8e1588a5b 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/scene.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/scene.cpp @@ -44,7 +44,7 @@ TrafficLightModule::TrafficLightModule( const int64_t lane_id, const lanelet::TrafficLight & traffic_light_reg_elem, lanelet::ConstLanelet lane, const PlannerParam & planner_param, const rclcpp::Logger logger, const rclcpp::Clock::SharedPtr clock) -: SceneModuleInterface(lane_id, logger, clock), +: SceneModuleInterfaceWithRTC(lane_id, logger, clock), lane_id_(lane_id), traffic_light_reg_elem_(traffic_light_reg_elem), lane_(lane), diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/scene.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/scene.hpp index 8221bb3740273..3af13bc1927ce 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/scene.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/src/scene.hpp @@ -23,8 +23,8 @@ #define EIGEN_MPL2_ONLY #include #include -#include #include +#include #include #include @@ -33,7 +33,7 @@ namespace autoware::behavior_velocity_planner { -class TrafficLightModule : public SceneModuleInterface +class TrafficLightModule : public SceneModuleInterfaceWithRTC { public: using TrafficSignal = autoware_perception_msgs::msg::TrafficLightGroup; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.hpp index ba5a4b23a6fe0..8e0abc98c90de 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.hpp @@ -29,7 +29,7 @@ namespace autoware::behavior_velocity_planner { -class VirtualTrafficLightModuleManager : public SceneModuleManagerInterface +class VirtualTrafficLightModuleManager : public SceneModuleManagerInterface<> { public: explicit VirtualTrafficLightModuleManager(rclcpp::Node & node); diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/src/manager.hpp index 85d4495914823..b323d6d201795 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/src/manager.hpp @@ -35,7 +35,7 @@ namespace autoware::behavior_velocity_planner { using tier4_planning_msgs::msg::PathWithLaneId; -class WalkwayModuleManager : public SceneModuleManagerInterface +class WalkwayModuleManager : public SceneModuleManagerInterface<> { public: explicit WalkwayModuleManager(rclcpp::Node & node); From a313653f7b14a40dd0c938b96ea68f9ee1e2fe48 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Fri, 27 Dec 2024 10:22:15 +0900 Subject: [PATCH 21/77] feat(build_depends.repos): update version of autoware_internal_msgs (#9806) Signed-off-by: Takayuki Murooka --- build_depends.repos | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build_depends.repos b/build_depends.repos index 7e547be7409cf..2313a9be487a6 100644 --- a/build_depends.repos +++ b/build_depends.repos @@ -32,7 +32,7 @@ repositories: core/autoware_internal_msgs: type: git url: https://github.com/autowarefoundation/autoware_internal_msgs.git - version: 1.2.0 + version: 1.3.0 # universe universe/external/tier4_autoware_msgs: type: git From 4d1f69d793449c349d6a7befc79120ea6a9f8efa Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Fri, 27 Dec 2024 11:23:07 +0900 Subject: [PATCH 22/77] refactor(autoware_universe_utils): add missing 's' in the class of diagnostics_interface (#9777) Signed-off-by: kminoda --- .../universe_utils/ros/diagnostics_interface.hpp | 6 +++--- .../src/ros/diagnostics_interface.cpp | 16 ++++++++-------- .../test/src/ros/test_diagnostics_interface.cpp | 16 ++++++++-------- .../src/gyro_odometer_core.cpp | 2 +- .../src/gyro_odometer_core.hpp | 2 +- .../src/lidar_marker_localizer.cpp | 2 +- .../src/lidar_marker_localizer.hpp | 2 +- .../src/localization_error_monitor.cpp | 2 +- .../src/localization_error_monitor.hpp | 2 +- .../ndt_scan_matcher/map_update_module.hpp | 10 +++++----- .../ndt_scan_matcher/ndt_scan_matcher_core.hpp | 12 ++++++------ .../src/map_update_module.cpp | 8 ++++---- .../src/ndt_scan_matcher_core.cpp | 14 +++++++------- .../src/pose_initializer_core.cpp | 2 +- .../src/pose_initializer_core.hpp | 2 +- 15 files changed, 49 insertions(+), 49 deletions(-) diff --git a/common/autoware_universe_utils/include/autoware/universe_utils/ros/diagnostics_interface.hpp b/common/autoware_universe_utils/include/autoware/universe_utils/ros/diagnostics_interface.hpp index 120aed7c7548e..db370eb46ef43 100644 --- a/common/autoware_universe_utils/include/autoware/universe_utils/ros/diagnostics_interface.hpp +++ b/common/autoware_universe_utils/include/autoware/universe_utils/ros/diagnostics_interface.hpp @@ -24,10 +24,10 @@ namespace autoware::universe_utils { -class DiagnosticInterface +class DiagnosticsInterface { public: - DiagnosticInterface(rclcpp::Node * node, const std::string & diagnostic_name); + DiagnosticsInterface(rclcpp::Node * node, const std::string & diagnostic_name); void clear(); void add_key_value(const diagnostic_msgs::msg::KeyValue & key_value_msg); template @@ -48,7 +48,7 @@ class DiagnosticInterface }; template -void DiagnosticInterface::add_key_value(const std::string & key, const T & value) +void DiagnosticsInterface::add_key_value(const std::string & key, const T & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; diff --git a/common/autoware_universe_utils/src/ros/diagnostics_interface.cpp b/common/autoware_universe_utils/src/ros/diagnostics_interface.cpp index 978af27f202d4..e4d1ec8494113 100644 --- a/common/autoware_universe_utils/src/ros/diagnostics_interface.cpp +++ b/common/autoware_universe_utils/src/ros/diagnostics_interface.cpp @@ -23,7 +23,7 @@ namespace autoware::universe_utils { -DiagnosticInterface::DiagnosticInterface(rclcpp::Node * node, const std::string & diagnostic_name) +DiagnosticsInterface::DiagnosticsInterface(rclcpp::Node * node, const std::string & diagnostic_name) : clock_(node->get_clock()) { diagnostics_pub_ = @@ -34,7 +34,7 @@ DiagnosticInterface::DiagnosticInterface(rclcpp::Node * node, const std::string diagnostics_status_msg_.hardware_id = node->get_name(); } -void DiagnosticInterface::clear() +void DiagnosticsInterface::clear() { diagnostics_status_msg_.values.clear(); diagnostics_status_msg_.values.shrink_to_fit(); @@ -43,7 +43,7 @@ void DiagnosticInterface::clear() diagnostics_status_msg_.message = ""; } -void DiagnosticInterface::add_key_value(const diagnostic_msgs::msg::KeyValue & key_value_msg) +void DiagnosticsInterface::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), @@ -56,7 +56,7 @@ void DiagnosticInterface::add_key_value(const diagnostic_msgs::msg::KeyValue & k } } -void DiagnosticInterface::add_key_value(const std::string & key, const std::string & value) +void DiagnosticsInterface::add_key_value(const std::string & key, const std::string & value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; @@ -64,7 +64,7 @@ void DiagnosticInterface::add_key_value(const std::string & key, const std::stri add_key_value(key_value); } -void DiagnosticInterface::add_key_value(const std::string & key, bool value) +void DiagnosticsInterface::add_key_value(const std::string & key, bool value) { diagnostic_msgs::msg::KeyValue key_value; key_value.key = key; @@ -72,7 +72,7 @@ void DiagnosticInterface::add_key_value(const std::string & key, bool value) add_key_value(key_value); } -void DiagnosticInterface::update_level_and_message(const int8_t level, const std::string & message) +void DiagnosticsInterface::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()) { @@ -85,12 +85,12 @@ void DiagnosticInterface::update_level_and_message(const int8_t level, const std } } -void DiagnosticInterface::publish(const rclcpp::Time & publish_time_stamp) +void DiagnosticsInterface::publish(const rclcpp::Time & publish_time_stamp) { diagnostics_pub_->publish(create_diagnostics_array(publish_time_stamp)); } -diagnostic_msgs::msg::DiagnosticArray DiagnosticInterface::create_diagnostics_array( +diagnostic_msgs::msg::DiagnosticArray DiagnosticsInterface::create_diagnostics_array( const rclcpp::Time & publish_time_stamp) const { diagnostic_msgs::msg::DiagnosticArray diagnostics_msg; diff --git a/common/autoware_universe_utils/test/src/ros/test_diagnostics_interface.cpp b/common/autoware_universe_utils/test/src/ros/test_diagnostics_interface.cpp index a0683694cc2b7..6ec4fccf78b43 100644 --- a/common/autoware_universe_utils/test/src/ros/test_diagnostics_interface.cpp +++ b/common/autoware_universe_utils/test/src/ros/test_diagnostics_interface.cpp @@ -25,9 +25,9 @@ #include #include -using autoware::universe_utils::DiagnosticInterface; +using autoware::universe_utils::DiagnosticsInterface; -class TestDiagnosticInterface : public ::testing::Test +class TestDiagnosticsInterface : public ::testing::Test { protected: void SetUp() override @@ -44,9 +44,9 @@ class TestDiagnosticInterface : public ::testing::Test * Test clear(): * Verify that calling clear() resets DiagnosticStatus values, level, and message. */ -TEST_F(TestDiagnosticInterface, ClearTest) +TEST_F(TestDiagnosticsInterface, ClearTest) { - DiagnosticInterface module(node_.get(), "test_diagnostic"); + DiagnosticsInterface module(node_.get(), "test_diagnostic"); // Add some key-value pairs and update level/message module.add_key_value("param1", 42); @@ -87,9 +87,9 @@ TEST_F(TestDiagnosticInterface, ClearTest) * Test add_key_value(): * Verify that adding the same key updates its value instead of adding a duplicate. */ -TEST_F(TestDiagnosticInterface, AddKeyValueTest) +TEST_F(TestDiagnosticsInterface, AddKeyValueTest) { - DiagnosticInterface module(node_.get(), "test_diagnostic"); + DiagnosticsInterface module(node_.get(), "test_diagnostic"); // Call the template version of add_key_value() with different types module.add_key_value("string_key", std::string("initial_value")); @@ -139,9 +139,9 @@ TEST_F(TestDiagnosticInterface, AddKeyValueTest) * Verify that the level is updated to the highest severity and * that messages are concatenated if level > OK. */ -TEST_F(TestDiagnosticInterface, UpdateLevelAndMessageTest) +TEST_F(TestDiagnosticsInterface, UpdateLevelAndMessageTest) { - DiagnosticInterface module(node_.get(), "test_diagnostic"); + DiagnosticsInterface module(node_.get(), "test_diagnostic"); // Initial status is level=OK(0), message="" module.update_level_and_message(diagnostic_msgs::msg::DiagnosticStatus::OK, "Initial OK"); diff --git a/localization/autoware_gyro_odometer/src/gyro_odometer_core.cpp b/localization/autoware_gyro_odometer/src/gyro_odometer_core.cpp index d52fb5e798b58..0a85f75b74ad7 100644 --- a/localization/autoware_gyro_odometer/src/gyro_odometer_core.cpp +++ b/localization/autoware_gyro_odometer/src/gyro_odometer_core.cpp @@ -73,7 +73,7 @@ GyroOdometerNode::GyroOdometerNode(const rclcpp::NodeOptions & node_options) "twist_with_covariance", rclcpp::QoS{10}); diagnostics_ = - std::make_unique(this, "gyro_odometer_status"); + std::make_unique(this, "gyro_odometer_status"); // TODO(YamatoAndo) createTimer } diff --git a/localization/autoware_gyro_odometer/src/gyro_odometer_core.hpp b/localization/autoware_gyro_odometer/src/gyro_odometer_core.hpp index 70334738e9ce3..b59e6af341ec2 100644 --- a/localization/autoware_gyro_odometer/src/gyro_odometer_core.hpp +++ b/localization/autoware_gyro_odometer/src/gyro_odometer_core.hpp @@ -80,7 +80,7 @@ class GyroOdometerNode : public rclcpp::Node std::deque vehicle_twist_queue_; std::deque gyro_queue_; - std::unique_ptr diagnostics_; + std::unique_ptr diagnostics_; }; } // namespace autoware::gyro_odometer diff --git a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.cpp b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.cpp index bc7dbbcfc9ca1..34fc61797231b 100644 --- a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.cpp +++ b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.cpp @@ -125,7 +125,7 @@ LidarMarkerLocalizer::LidarMarkerLocalizer(const rclcpp::NodeOptions & node_opti tf_listener_ = std::make_shared(*tf_buffer_, this, false); diagnostics_interface_.reset( - new autoware::universe_utils::DiagnosticInterface(this, "marker_detection_status")); + new autoware::universe_utils::DiagnosticsInterface(this, "marker_detection_status")); } void LidarMarkerLocalizer::initialize_diagnostics() diff --git a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.hpp b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.hpp index 1b5672cff9d04..22a0c3f642563 100644 --- a/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.hpp +++ b/localization/autoware_landmark_based_localizer/autoware_lidar_marker_localizer/src/lidar_marker_localizer.hpp @@ -134,7 +134,7 @@ class LidarMarkerLocalizer : public rclcpp::Node rclcpp::Publisher::SharedPtr pub_debug_pose_with_covariance_; rclcpp::Publisher::SharedPtr pub_marker_pointcloud_; - std::shared_ptr diagnostics_interface_; + std::shared_ptr diagnostics_interface_; Param param_; bool is_activated_; diff --git a/localization/autoware_localization_error_monitor/src/localization_error_monitor.cpp b/localization/autoware_localization_error_monitor/src/localization_error_monitor.cpp index 5ebcd105d57ba..1f26f6b80aa17 100644 --- a/localization/autoware_localization_error_monitor/src/localization_error_monitor.cpp +++ b/localization/autoware_localization_error_monitor/src/localization_error_monitor.cpp @@ -59,7 +59,7 @@ LocalizationErrorMonitor::LocalizationErrorMonitor(const rclcpp::NodeOptions & o logger_configure_ = std::make_unique(this); diagnostics_error_monitor_ = - std::make_unique(this, "ellipse_error_status"); + std::make_unique(this, "ellipse_error_status"); } void LocalizationErrorMonitor::on_odom(nav_msgs::msg::Odometry::ConstSharedPtr input_msg) diff --git a/localization/autoware_localization_error_monitor/src/localization_error_monitor.hpp b/localization/autoware_localization_error_monitor/src/localization_error_monitor.hpp index b38958c420b19..b7d2454eb9f75 100644 --- a/localization/autoware_localization_error_monitor/src/localization_error_monitor.hpp +++ b/localization/autoware_localization_error_monitor/src/localization_error_monitor.hpp @@ -39,7 +39,7 @@ class LocalizationErrorMonitor : public rclcpp::Node std::unique_ptr logger_configure_; - std::unique_ptr diagnostics_error_monitor_; + std::unique_ptr diagnostics_error_monitor_; double scale_; double error_ellipse_size_; diff --git a/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/map_update_module.hpp b/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/map_update_module.hpp index bf8fce2b302c0..12990259f88cd 100644 --- a/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/map_update_module.hpp +++ b/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/map_update_module.hpp @@ -42,7 +42,7 @@ namespace autoware::ndt_scan_matcher { -using DiagnosticInterface = autoware::universe_utils::DiagnosticInterface; +using DiagnosticsInterface = autoware::universe_utils::DiagnosticsInterface; class MapUpdateModule { @@ -63,19 +63,19 @@ class MapUpdateModule void callback_timer( const bool is_activated, const std::optional & position, - std::unique_ptr & diagnostics_ptr); + std::unique_ptr & diagnostics_ptr); [[nodiscard]] bool should_update_map( const geometry_msgs::msg::Point & position, - std::unique_ptr & diagnostics_ptr); + std::unique_ptr & diagnostics_ptr); void update_map( const geometry_msgs::msg::Point & position, - std::unique_ptr & diagnostics_ptr); + std::unique_ptr & diagnostics_ptr); // Update the specified NDT bool update_ndt( const geometry_msgs::msg::Point & position, NdtType & ndt, - std::unique_ptr & diagnostics_ptr); + std::unique_ptr & diagnostics_ptr); void publish_partial_pcd_map(); rclcpp::Publisher::SharedPtr loaded_pcd_pub_; diff --git a/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/ndt_scan_matcher_core.hpp b/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/ndt_scan_matcher_core.hpp index 25b7417ffbe3c..e083e6751c3db 100644 --- a/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/ndt_scan_matcher_core.hpp +++ b/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/ndt_scan_matcher_core.hpp @@ -211,12 +211,12 @@ class NDTScanMatcher : public rclcpp::Node std::unique_ptr regularization_pose_buffer_; std::atomic is_activated_; - std::unique_ptr diagnostics_scan_points_; - std::unique_ptr diagnostics_initial_pose_; - std::unique_ptr diagnostics_regularization_pose_; - std::unique_ptr diagnostics_map_update_; - std::unique_ptr diagnostics_ndt_align_; - std::unique_ptr diagnostics_trigger_node_; + std::unique_ptr diagnostics_scan_points_; + std::unique_ptr diagnostics_initial_pose_; + std::unique_ptr diagnostics_regularization_pose_; + std::unique_ptr diagnostics_map_update_; + std::unique_ptr diagnostics_ndt_align_; + std::unique_ptr diagnostics_trigger_node_; std::unique_ptr map_update_module_; std::unique_ptr logger_configure_; diff --git a/localization/autoware_ndt_scan_matcher/src/map_update_module.cpp b/localization/autoware_ndt_scan_matcher/src/map_update_module.cpp index eea0b8f3d06c4..299d596401b19 100644 --- a/localization/autoware_ndt_scan_matcher/src/map_update_module.cpp +++ b/localization/autoware_ndt_scan_matcher/src/map_update_module.cpp @@ -56,7 +56,7 @@ MapUpdateModule::MapUpdateModule( void MapUpdateModule::callback_timer( const bool is_activated, const std::optional & position, - std::unique_ptr & diagnostics_ptr) + std::unique_ptr & diagnostics_ptr) { // check is_activated diagnostics_ptr->add_key_value("is_activated", is_activated); @@ -87,7 +87,7 @@ void MapUpdateModule::callback_timer( bool MapUpdateModule::should_update_map( const geometry_msgs::msg::Point & position, - std::unique_ptr & diagnostics_ptr) + std::unique_ptr & diagnostics_ptr) { last_update_position_mtx_.lock(); @@ -143,7 +143,7 @@ bool MapUpdateModule::out_of_map_range(const geometry_msgs::msg::Point & positio void MapUpdateModule::update_map( const geometry_msgs::msg::Point & position, - std::unique_ptr & diagnostics_ptr) + std::unique_ptr & diagnostics_ptr) { diagnostics_ptr->add_key_value("is_need_rebuild", need_rebuild_); @@ -231,7 +231,7 @@ void MapUpdateModule::update_map( bool MapUpdateModule::update_ndt( const geometry_msgs::msg::Point & position, NdtType & ndt, - std::unique_ptr & diagnostics_ptr) + std::unique_ptr & diagnostics_ptr) { diagnostics_ptr->add_key_value("maps_size_before", ndt.getCurrentMapIDs().size()); diff --git a/localization/autoware_ndt_scan_matcher/src/ndt_scan_matcher_core.cpp b/localization/autoware_ndt_scan_matcher/src/ndt_scan_matcher_core.cpp index cef8724423bed..d3e1fa5982867 100644 --- a/localization/autoware_ndt_scan_matcher/src/ndt_scan_matcher_core.cpp +++ b/localization/autoware_ndt_scan_matcher/src/ndt_scan_matcher_core.cpp @@ -51,7 +51,7 @@ using autoware::localization_util::pose_to_matrix4f; using autoware::localization_util::SmartPoseBuffer; using autoware::localization_util::TreeStructuredParzenEstimator; -using autoware::universe_utils::DiagnosticInterface; +using autoware::universe_utils::DiagnosticsInterface; tier4_debug_msgs::msg::Float32Stamped make_float32_stamped( const builtin_interfaces::msg::Time & stamp, const float data) @@ -141,7 +141,7 @@ NDTScanMatcher::NDTScanMatcher(const rclcpp::NodeOptions & options) std::make_unique(this->get_logger(), value_as_unlimited, value_as_unlimited); diagnostics_regularization_pose_ = - std::make_unique(this, "regularization_pose_subscriber_status"); + std::make_unique(this, "regularization_pose_subscriber_status"); } sensor_aligned_pose_pub_ = @@ -209,13 +209,13 @@ NDTScanMatcher::NDTScanMatcher(const rclcpp::NodeOptions & options) map_update_module_ = std::make_unique(this, &ndt_ptr_mtx_, ndt_ptr_, param_.dynamic_map_loading); - diagnostics_scan_points_ = std::make_unique(this, "scan_matching_status"); + diagnostics_scan_points_ = std::make_unique(this, "scan_matching_status"); diagnostics_initial_pose_ = - std::make_unique(this, "initial_pose_subscriber_status"); - diagnostics_map_update_ = std::make_unique(this, "map_update_status"); - diagnostics_ndt_align_ = std::make_unique(this, "ndt_align_service_status"); + std::make_unique(this, "initial_pose_subscriber_status"); + diagnostics_map_update_ = std::make_unique(this, "map_update_status"); + diagnostics_ndt_align_ = std::make_unique(this, "ndt_align_service_status"); diagnostics_trigger_node_ = - std::make_unique(this, "trigger_node_service_status"); + std::make_unique(this, "trigger_node_service_status"); logger_configure_ = std::make_unique(this); } diff --git a/localization/autoware_pose_initializer/src/pose_initializer_core.cpp b/localization/autoware_pose_initializer/src/pose_initializer_core.cpp index 67d5c447c09b6..5bde25a564f1d 100644 --- a/localization/autoware_pose_initializer/src/pose_initializer_core.cpp +++ b/localization/autoware_pose_initializer/src/pose_initializer_core.cpp @@ -40,7 +40,7 @@ PoseInitializer::PoseInitializer(const rclcpp::NodeOptions & options) output_pose_covariance_ = get_covariance_parameter(this, "output_pose_covariance"); gnss_particle_covariance_ = get_covariance_parameter(this, "gnss_particle_covariance"); - diagnostics_pose_reliable_ = std::make_unique( + diagnostics_pose_reliable_ = std::make_unique( this, "pose_initializer_status"); if (declare_parameter("ekf_enabled")) { diff --git a/localization/autoware_pose_initializer/src/pose_initializer_core.hpp b/localization/autoware_pose_initializer/src/pose_initializer_core.hpp index 5305bcc3ad347..a0c1ed3a86576 100644 --- a/localization/autoware_pose_initializer/src/pose_initializer_core.hpp +++ b/localization/autoware_pose_initializer/src/pose_initializer_core.hpp @@ -60,7 +60,7 @@ class PoseInitializer : public rclcpp::Node std::unique_ptr ekf_localization_trigger_; std::unique_ptr ndt_localization_trigger_; std::unique_ptr logger_configure_; - std::unique_ptr diagnostics_pose_reliable_; + std::unique_ptr diagnostics_pose_reliable_; double stop_check_duration_; void change_node_trigger(bool flag, bool need_spin = false); From 8048b9ef8eb4efa1a6db0351ae6be7acdcc1e3ef Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 27 Dec 2024 12:03:00 +0900 Subject: [PATCH 23/77] fix(autoware_static_centerline_generator): fix bugprone-exception-escape (#9805) fix:bugprone-error Signed-off-by: kobayu858 --- .../src/main.cpp | 62 +++++++++++-------- 1 file changed, 35 insertions(+), 27 deletions(-) diff --git a/planning/autoware_static_centerline_generator/src/main.cpp b/planning/autoware_static_centerline_generator/src/main.cpp index 811d57c6036ef..71a076ee86fe0 100644 --- a/planning/autoware_static_centerline_generator/src/main.cpp +++ b/planning/autoware_static_centerline_generator/src/main.cpp @@ -14,38 +14,46 @@ #include "static_centerline_generator_node.hpp" +#include #include #include int main(int argc, char * argv[]) { - rclcpp::init(argc, argv); - - // initialize node - rclcpp::NodeOptions node_options; - auto node = - std::make_shared( - node_options); - - // get ros parameter - const auto mode = node->declare_parameter("mode"); - - // process - if (mode == "AUTO") { - node->generate_centerline(); - node->validate(); - node->save_map(); - } else if (mode == "GUI") { - node->generate_centerline(); - } else if (mode == "VMB") { - // Do nothing - } else { - throw std::invalid_argument("The `mode` is invalid."); + try { + rclcpp::init(argc, argv); + + // initialize node + rclcpp::NodeOptions node_options; + auto node = + std::make_shared( + node_options); + + // get ros parameter + const auto mode = node->declare_parameter("mode"); + + // process + if (mode == "AUTO") { + node->generate_centerline(); + node->validate(); + node->save_map(); + } else if (mode == "GUI") { + node->generate_centerline(); + } else if (mode == "VMB") { + // Do nothing + } else { + throw std::invalid_argument("The `mode` is invalid."); + } + + // NOTE: spin node to keep showing debug path/trajectory in rviz with transient local + rclcpp::spin(node); + rclcpp::shutdown(); + } catch (const std::exception & e) { + std::cerr << "Exception in main(): " << e.what() << std::endl; + return {}; + } catch (...) { + std::cerr << "Unknown exception in main()" << std::endl; + return {}; } - - // NOTE: spin node to keep showing debug path/trajectory in rviz with transient local - rclcpp::spin(node); - rclcpp::shutdown(); - return 0; } From 7e3a80c0987c507b789148d3df1073798df5b65d Mon Sep 17 00:00:00 2001 From: mkquda <168697710+mkquda@users.noreply.github.com> Date: Fri, 27 Dec 2024 12:13:25 +0900 Subject: [PATCH 24/77] feat(lane_change): revise current lane objects filtering (#9785) * consider stopped front objects Signed-off-by: mohammad alqudah * simplify computation of dist to front current lane object Signed-off-by: mohammad alqudah * add flag to enable/disable keeping distance from front stopped vehicle Signed-off-by: mohammad alqudah * fix object filtering test Signed-off-by: mohammad alqudah --------- Signed-off-by: mohammad alqudah --- .../README.md | 1 + .../config/lane_change.param.yaml | 1 + .../structs/parameters.hpp | 1 + .../src/manager.cpp | 4 ++++ .../src/scene.cpp | 12 ++++------ .../src/utils/utils.cpp | 22 +++++++++---------- .../test/test_lane_change_scene.cpp | 5 ++--- 7 files changed, 23 insertions(+), 23 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md index 86d8d1c0c1413..5a6c22a731bf9 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md @@ -886,6 +886,7 @@ The following parameters are configurable in [lane_change.param.yaml](https://gi | `backward_length_buffer_for_end_of_lane` | [m] | double | The end of lane buffer to ensure ego vehicle has enough distance to start lane change | 3.0 | | `backward_length_buffer_for_blocking_object` | [m] | double | The end of lane buffer to ensure ego vehicle has enough distance to start lane change when there is an object in front | 3.0 | | `backward_length_from_intersection` | [m] | double | Distance threshold from the last intersection to invalidate or cancel the lane change path | 5.0 | +| `enable_stopped_vehicle_buffer` | [-] | bool | If true, will keep enough distance from current lane front stopped object to perform lane change when possible | true | | `trajectory.max_prepare_duration` | [s] | double | The maximum preparation time for the ego vehicle to be ready to perform lane change. | 4.0 | | `trajectory.min_prepare_duration` | [s] | double | The minimum preparation time for the ego vehicle to be ready to perform lane change. | 2.0 | | `trajectory.lateral_jerk` | [m/s3] | double | Lateral jerk value for lane change path generation | 0.5 | diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/config/lane_change.param.yaml b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/config/lane_change.param.yaml index bf892b3058a16..61e41b4ea3ea4 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/config/lane_change.param.yaml +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/config/lane_change.param.yaml @@ -5,6 +5,7 @@ backward_length_buffer_for_end_of_lane: 3.0 # [m] backward_length_buffer_for_blocking_object: 3.0 # [m] backward_length_from_intersection: 5.0 # [m] + enable_stopped_vehicle_buffer: true # turn signal min_length_for_turn_signal_activation: 10.0 # [m] diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/parameters.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/parameters.hpp index 719bbbbf3057a..94020e8a08279 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/parameters.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/parameters.hpp @@ -149,6 +149,7 @@ struct Parameters double backward_length_buffer_for_end_of_lane{0.0}; double backward_length_buffer_for_blocking_object{0.0}; double backward_length_from_intersection{5.0}; + bool enable_stopped_vehicle_buffer{false}; // parked vehicle double object_check_min_road_shoulder_width{0.5}; diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/manager.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/manager.cpp index 1bb41069140e7..9f7a811770b5d 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/manager.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/manager.cpp @@ -195,6 +195,8 @@ LCParamPtr LaneChangeModuleManager::set_params(rclcpp::Node * node, const std::s getOrDeclareParameter(*node, parameter("backward_length_buffer_for_blocking_object")); p.backward_length_from_intersection = getOrDeclareParameter(*node, parameter("backward_length_from_intersection")); + p.enable_stopped_vehicle_buffer = + getOrDeclareParameter(*node, parameter("enable_stopped_vehicle_buffer")); if (p.backward_length_buffer_for_end_of_lane < 1.0) { RCLCPP_WARN_STREAM( @@ -305,6 +307,8 @@ void LaneChangeModuleManager::updateModuleParams(const std::vectorbackward_length_buffer_for_blocking_object); updateParam( parameters, ns + "lane_change_finish_judge_buffer", p->lane_change_finish_judge_buffer); + updateParam( + parameters, ns + "enable_stopped_vehicle_buffer", p->enable_stopped_vehicle_buffer); updateParam( parameters, ns + "finish_judge_lateral_threshold", p->th_finish_judge_lateral_diff); diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp index 7f0e6d7f575f6..e2543c602cbfa 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp @@ -515,7 +515,9 @@ void NormalLaneChange::insert_stop_point_on_current_lanes(PathWithLaneId & path) const auto dist_to_terminal_stop = std::min(dist_to_terminal_start, distance_to_last_fit_width); const auto terminal_stop_reason = status_.is_valid_path ? "no safe path" : "no valid path"; - if (filtered_objects_.current_lane.empty()) { + if ( + filtered_objects_.current_lane.empty() || + !lane_change_parameters_->enable_stopped_vehicle_buffer) { set_stop_pose(dist_to_terminal_stop, path, terminal_stop_reason); return; } @@ -948,8 +950,6 @@ FilteredLanesObjects NormalLaneChange::filter_objects() const filtered_objects.target_lane_trailing.reserve(reserve_size); filtered_objects.others.reserve(reserve_size); - const auto stopped_obj_vel_th = lane_change_parameters_->safety.th_stopped_object_velocity; - for (const auto & object : objects.objects) { auto ext_object = utils::lane_change::transform(object, *lane_change_parameters_); const auto & ext_obj_pose = ext_object.initial_pose; @@ -968,12 +968,8 @@ FilteredLanesObjects NormalLaneChange::filter_objects() const continue; } - // TODO(Azu): We have to think about how to remove is_within_vel_th without breaking AW behavior - const auto is_moving = velocity_filter( - ext_object.initial_twist, stopped_obj_vel_th, std::numeric_limits::max()); - if ( - ahead_of_ego && is_moving && is_before_terminal && + ahead_of_ego && is_before_terminal && !boost::geometry::disjoint(ext_object.initial_polygon, lanes_polygon.current)) { // check only the objects that are in front of the ego vehicle filtered_objects.current_lane.push_back(ext_object); diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/utils.cpp index 147ef3856ac4e..9360435891632 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/utils.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/utils.cpp @@ -920,19 +920,17 @@ double get_min_dist_to_current_lanes_obj( continue; } - // calculate distance from path front to the stationary object polygon on the ego lane. - for (const auto & polygon_p : object.initial_polygon.outer()) { - const auto p_fp = autoware::universe_utils::toMsg(polygon_p.to_3d()); - const auto lateral_fp = motion_utils::calcLateralOffset(path_points, p_fp); - - // ignore if the point is not on ego path - if (std::abs(lateral_fp) > (common_data_ptr->bpp_param_ptr->vehicle_width / 2)) { - continue; - } - - const auto current_distance_to_obj = motion_utils::calcSignedArcLength(path_points, 0, p_fp); - min_dist_to_obj = std::min(min_dist_to_obj, current_distance_to_obj); + // check if object is on ego path + const auto obj_half_width = object.shape.dimensions.y / 2; + const auto obj_lat_dist_to_path = + std::abs(motion_utils::calcLateralOffset(path_points, object.initial_pose.position)) - + obj_half_width; + if (obj_lat_dist_to_path > (common_data_ptr->bpp_param_ptr->vehicle_width / 2)) { + continue; } + + min_dist_to_obj = std::min(min_dist_to_obj, dist_to_obj); + break; } return min_dist_to_obj; } diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/test/test_lane_change_scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/test/test_lane_change_scene.cpp index 114a38a77876c..5fb445788672c 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/test/test_lane_change_scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/test/test_lane_change_scene.cpp @@ -242,15 +242,14 @@ TEST_F(TestNormalLaneChange, testFilteredObjects) const auto & filtered_objects = get_filtered_objects(); - // Note: There's 1 stopping object in current lanes, however, it was filtered out. const auto filtered_size = filtered_objects.current_lane.size() + filtered_objects.target_lane_leading.size() + filtered_objects.target_lane_trailing.size() + filtered_objects.others.size(); EXPECT_EQ(filtered_size, planner_data_->dynamic_object->objects.size()); - EXPECT_EQ(filtered_objects.current_lane.size(), 0); + EXPECT_EQ(filtered_objects.current_lane.size(), 1); EXPECT_EQ(filtered_objects.target_lane_leading.size(), 2); EXPECT_EQ(filtered_objects.target_lane_trailing.size(), 0); - EXPECT_EQ(filtered_objects.others.size(), 2); + EXPECT_EQ(filtered_objects.others.size(), 1); } TEST_F(TestNormalLaneChange, testGetPathWhenValid) From f211728650c8abcf757fb8088c9b824780b736b6 Mon Sep 17 00:00:00 2001 From: mkquda <168697710+mkquda@users.noreply.github.com> Date: Fri, 27 Dec 2024 15:38:11 +0900 Subject: [PATCH 25/77] feat(lane_change): add text display for candidate path sampling metrics (#9810) * display candidate path sampling metrics on rviz Signed-off-by: mohammad alqudah * rename struct Signed-off-by: mohammad alqudah --------- Signed-off-by: mohammad alqudah --- .../structs/debug.hpp | 12 ++++++ .../src/scene.cpp | 8 +++- .../src/utils/markers.cpp | 42 +++++++++++++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/debug.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/debug.hpp index 8738b412e18b9..90b13f86976b2 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/debug.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/debug.hpp @@ -25,10 +25,20 @@ #include #include +#include namespace autoware::behavior_path_planner::lane_change { using utils::path_safety_checker::CollisionCheckDebugMap; + +struct MetricsDebug +{ + LaneChangePhaseMetrics prep_metric; + std::vector lc_metrics; + double max_prepare_length; + double max_lane_changing_length; +}; + struct Debug { std::string module_type; @@ -41,6 +51,7 @@ struct Debug lanelet::ConstLanelets current_lanes; lanelet::ConstLanelets target_lanes; lanelet::ConstLanelets target_backward_lanes; + std::vector lane_change_metrics; double collision_check_object_debug_lifetime{0.0}; double distance_to_end_of_current_lane{std::numeric_limits::max()}; double distance_to_lane_change_finished{std::numeric_limits::max()}; @@ -64,6 +75,7 @@ struct Debug current_lanes.clear(); target_lanes.clear(); target_backward_lanes.clear(); + lane_change_metrics.clear(); collision_check_object_debug_lifetime = 0.0; distance_to_end_of_current_lane = std::numeric_limits::max(); diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp index e2543c602cbfa..fb4f7aeca1525 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp @@ -1061,14 +1061,20 @@ std::vector NormalLaneChange::get_lane_changing_metrics( }); const auto max_path_velocity = prep_segment.points.back().point.longitudinal_velocity_mps; - return calculation::calc_shift_phase_metrics( + const auto lc_metrics = calculation::calc_shift_phase_metrics( common_data_ptr_, shift_length, prep_metric.velocity, max_path_velocity, prep_metric.sampled_lon_accel, max_lane_changing_length); + + const auto max_prep_length = common_data_ptr_->transient_data.dist_to_terminal_start; + lane_change_debug_.lane_change_metrics.push_back( + {prep_metric, lc_metrics, max_prep_length, max_lane_changing_length}); + return lc_metrics; } bool NormalLaneChange::get_lane_change_paths(LaneChangePaths & candidate_paths) const { lane_change_debug_.collision_check_objects.clear(); + lane_change_debug_.lane_change_metrics.clear(); if (!common_data_ptr_->is_lanes_available()) { RCLCPP_WARN(logger_, "lanes are not available. Not expected."); diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/markers.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/markers.cpp index 30af582175d14..da9ee52b038c6 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/markers.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/markers.cpp @@ -16,6 +16,7 @@ #include "autoware/behavior_path_planner_common/marker_utils/utils.hpp" #include +#include #include #include @@ -185,6 +186,46 @@ MarkerArray showExecutionInfo(const Debug & debug_data, const geometry_msgs::msg return marker_array; } +MarkerArray ShowLaneChangeMetricsInfo( + const Debug & debug_data, const geometry_msgs::msg::Pose & pose) +{ + MarkerArray marker_array; + if (debug_data.lane_change_metrics.empty()) { + return marker_array; + } + + auto text_marker = createDefaultMarker( + "map", rclcpp::Clock{RCL_ROS_TIME}.now(), "sampling_metrics", 0, Marker::TEXT_VIEW_FACING, + createMarkerScale(0.6, 0.6, 0.6), colors::yellow()); + text_marker.pose = autoware::universe_utils::calcOffsetPose(pose, 10.0, 15.0, 0.0); + + text_marker.text = fmt::format("{:<12}", "") + fmt::format("{:^18}|", "lat_accel[m/s2]") + + fmt::format("{:^18}|", "lon_accel[m/s2]") + + fmt::format("{:^17}|", "velocity[m/s]") + + fmt::format("{:^15}|", "duration[s]") + fmt::format("{:^15}|", "length[m]") + + fmt::format("{:^20}\n", "max_length_th[m]"); + for (const auto & metrics : debug_data.lane_change_metrics) { + text_marker.text += fmt::format("{:-<170}\n", ""); + const auto & p_m = metrics.prep_metric; + text_marker.text += + fmt::format("{:<17}", "prep_metrics:") + fmt::format("{:^10.3f}", p_m.lat_accel) + + fmt::format("{:^21.3f}", p_m.actual_lon_accel) + fmt::format("{:^12.3f}", p_m.velocity) + + fmt::format("{:^15.3f}", p_m.duration) + fmt::format("{:^15.3f}", p_m.length) + + fmt::format("{:^17.3f}\n", metrics.max_prepare_length); + text_marker.text += fmt::format("{:<20}\n", "lc_metrics:"); + for (const auto lc_m : metrics.lc_metrics) { + text_marker.text += + fmt::format("{:<15}", "") + fmt::format("{:^10.3f}", lc_m.lat_accel) + + fmt::format("{:^21.3f}", lc_m.actual_lon_accel) + fmt::format("{:^12.3f}", lc_m.velocity) + + fmt::format("{:^15.3f}", lc_m.duration) + fmt::format("{:^15.3f}", lc_m.length) + + fmt::format("{:^17.3f}\n", metrics.max_lane_changing_length); + } + } + + marker_array.markers.push_back(text_marker); + return marker_array; +} + MarkerArray createDebugMarkerArray( const Debug & debug_data, const geometry_msgs::msg::Pose & ego_pose) { @@ -212,6 +253,7 @@ MarkerArray createDebugMarkerArray( } add(showExecutionInfo(debug_data, ego_pose)); + add(ShowLaneChangeMetricsInfo(debug_data, ego_pose)); // lanes add(laneletsAsTriangleMarkerArray( From 5de2e4a3123c37390e83bd45a6e11e7755db56b8 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Fri, 27 Dec 2024 16:35:02 +0900 Subject: [PATCH 26/77] feat(behavior_velocity_detection_area): use base class without RTC (#9802) * feat(behavior_velocity_detection_area): use base class without RTC Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../config/detection_area.param.yaml | 1 - .../package.xml | 1 - .../src/manager.cpp | 16 +++++----------- .../src/manager.hpp | 8 ++++---- .../src/scene.cpp | 13 ++++--------- .../src/scene.hpp | 4 ++-- 6 files changed, 15 insertions(+), 28 deletions(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/config/detection_area.param.yaml b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/config/detection_area.param.yaml index b49b43794685c..9294795274066 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/config/detection_area.param.yaml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/config/detection_area.param.yaml @@ -8,5 +8,4 @@ state_clear_time: 2.0 hold_stop_margin_distance: 0.0 distance_to_judge_over_stop_line: 0.5 - enable_rtc: false # If set to true, the scene modules require approval from the rtc (request to cooperate) function. If set to false, the modules can be executed without requiring rtc approval suppress_pass_judge_when_stopping: false diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml index 90aaddf96feef..ff91cf40a32a6 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml @@ -18,7 +18,6 @@ eigen3_cmake_module autoware_behavior_velocity_planner_common - autoware_behavior_velocity_rtc_interface autoware_lanelet2_extension autoware_motion_utils autoware_planning_msgs diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.cpp index 62f5b88699a37..fb2c17d9e3745 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.cpp @@ -34,8 +34,7 @@ using autoware::universe_utils::getOrDeclareParameter; using lanelet::autoware::DetectionArea; DetectionAreaModuleManager::DetectionAreaModuleManager(rclcpp::Node & node) -: SceneModuleManagerInterfaceWithRTC( - node, getModuleName(), getEnableRTC(node, std::string(getModuleName()) + ".enable_rtc")) +: SceneModuleManagerInterface(node, getModuleName()) { const std::string ns(DetectionAreaModuleManager::getModuleName()); planner_param_.stop_margin = getOrDeclareParameter(node, ns + ".stop_margin"); @@ -66,25 +65,20 @@ void DetectionAreaModuleManager::launchNewModules( registerModule(std::make_shared( module_id, lane_id, *detection_area_with_lane_id.first, planner_param_, logger_.get_child("detection_area_module"), clock_)); - generateUUID(module_id); - updateRTCStatus( - getUUID(module_id), true, State::WAITING_FOR_EXECUTION, - std::numeric_limits::lowest(), path.header.stamp); } } } -std::function &)> +std::function &)> DetectionAreaModuleManager::getModuleExpiredFunction( const tier4_planning_msgs::msg::PathWithLaneId & path) { const auto detection_area_id_set = planning_utils::getRegElemIdSetOnPath( path, planner_data_->route_handler_->getLaneletMapPtr(), planner_data_->current_odometry->pose); - return - [detection_area_id_set](const std::shared_ptr & scene_module) { - return detection_area_id_set.count(scene_module->getModuleId()) == 0; - }; + return [detection_area_id_set](const std::shared_ptr & scene_module) { + return detection_area_id_set.count(scene_module->getModuleId()) == 0; + }; } } // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.hpp index 1fbcc16461ebc..4b34ac4a45298 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/manager.hpp @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include @@ -29,7 +29,7 @@ namespace autoware::behavior_velocity_planner { -class DetectionAreaModuleManager : public SceneModuleManagerInterfaceWithRTC +class DetectionAreaModuleManager : public SceneModuleManagerInterface<> { public: explicit DetectionAreaModuleManager(rclcpp::Node & node); @@ -41,8 +41,8 @@ class DetectionAreaModuleManager : public SceneModuleManagerInterfaceWithRTC void launchNewModules(const tier4_planning_msgs::msg::PathWithLaneId & path) override; - std::function &)> - getModuleExpiredFunction(const tier4_planning_msgs::msg::PathWithLaneId & path) override; + std::function &)> getModuleExpiredFunction( + const tier4_planning_msgs::msg::PathWithLaneId & path) override; }; class DetectionAreaModulePlugin : public PluginWrapper diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.cpp index 6d7754624485c..031c45753022e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.cpp @@ -37,7 +37,7 @@ DetectionAreaModule::DetectionAreaModule( const lanelet::autoware::DetectionArea & detection_area_reg_elem, const PlannerParam & planner_param, const rclcpp::Logger & logger, const rclcpp::Clock::SharedPtr clock) -: SceneModuleInterfaceWithRTC(module_id, logger, clock), +: SceneModuleInterface(module_id, logger, clock), lane_id_(lane_id), detection_area_reg_elem_(detection_area_reg_elem), state_(State::GO), @@ -105,12 +105,10 @@ bool DetectionAreaModule::modifyPathVelocity(PathWithLaneId * path) modified_stop_line_seg_idx = current_seg_idx; } - setDistance(stop_dist); - // Check state - setSafe(detection_area::can_clear_stop_state( - last_obstacle_found_time_, clock_->now(), planner_param_.state_clear_time)); - if (isActivated()) { + const bool is_safe = detection_area::can_clear_stop_state( + last_obstacle_found_time_, clock_->now(), planner_param_.state_clear_time); + if (is_safe) { last_obstacle_found_time_ = {}; if (!planner_param_.suppress_pass_judge_when_stopping || !is_stopped) { state_ = State::GO; @@ -139,7 +137,6 @@ bool DetectionAreaModule::modifyPathVelocity(PathWithLaneId * path) dead_line_seg_idx); if (dist_from_ego_to_dead_line < 0.0) { RCLCPP_WARN(logger_, "[detection_area] vehicle is over dead line"); - setSafe(true); return true; } } @@ -152,7 +149,6 @@ bool DetectionAreaModule::modifyPathVelocity(PathWithLaneId * path) if ( state_ != State::STOP && dist_from_ego_to_stop < -planner_param_.distance_to_judge_over_stop_line) { - setSafe(true); return true; } @@ -169,7 +165,6 @@ bool DetectionAreaModule::modifyPathVelocity(PathWithLaneId * path) RCLCPP_WARN_THROTTLE( logger_, *clock_, std::chrono::milliseconds(1000).count(), "[detection_area] vehicle is over stop border"); - setSafe(true); return true; } } diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.hpp index bdf2d05a35bcb..9224cf4624687 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/src/scene.hpp @@ -23,8 +23,8 @@ #define EIGEN_MPL2_ONLY #include +#include #include -#include #include #include @@ -38,7 +38,7 @@ using PathIndexWithPoint2d = std::pair; // front using PathIndexWithOffset = std::pair; // front index, offset using tier4_planning_msgs::msg::PathWithLaneId; -class DetectionAreaModule : public SceneModuleInterfaceWithRTC +class DetectionAreaModule : public SceneModuleInterface { public: enum class State { GO, STOP }; From eaf5ad7a82a527a51775166b0f218f3804e43abd Mon Sep 17 00:00:00 2001 From: Masato Saeki <78376491+MasatoSaeki@users.noreply.github.com> Date: Fri, 27 Dec 2024 16:46:50 +0900 Subject: [PATCH 27/77] feat(autoware_crosswalk_traffic_light_estimator): overwrite invalid detection result (#9667) * add code in order to check invalid detection Signed-off-by: MasatoSaeki * style(pre-commit): autofix --------- Signed-off-by: MasatoSaeki Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../node.hpp | 2 ++ .../src/node.cpp | 21 +++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/perception/autoware_crosswalk_traffic_light_estimator/include/autoware_crosswalk_traffic_light_estimator/node.hpp b/perception/autoware_crosswalk_traffic_light_estimator/include/autoware_crosswalk_traffic_light_estimator/node.hpp index 8efb90cc87c89..085e423db38ba 100644 --- a/perception/autoware_crosswalk_traffic_light_estimator/include/autoware_crosswalk_traffic_light_estimator/node.hpp +++ b/perception/autoware_crosswalk_traffic_light_estimator/include/autoware_crosswalk_traffic_light_estimator/node.hpp @@ -97,6 +97,8 @@ class CrosswalkTrafficLightEstimatorNode : public rclcpp::Node void removeDuplicateIds(TrafficSignalArray & signal_array) const; + bool isInvalidDetectionStatus(const TrafficSignal & signal) const; + // Node param bool use_last_detect_color_; double last_detect_color_hold_time_; diff --git a/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp b/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp index b0ec4d0e5ffd0..d7cc6c725edfd 100644 --- a/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp +++ b/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp @@ -298,6 +298,14 @@ void CrosswalkTrafficLightEstimatorNode::setCrosswalkTrafficSignal( if (valid_id2idx_map.count(id)) { size_t idx = valid_id2idx_map[id]; auto signal = msg.traffic_light_groups[idx]; + if (isInvalidDetectionStatus(signal)) { + TrafficSignalElement output_traffic_signal_element; + output_traffic_signal_element.color = color; + output_traffic_signal_element.shape = TrafficSignalElement::CIRCLE; + output_traffic_signal_element.confidence = 1.0; + output.traffic_light_groups[idx].elements[0] = output_traffic_signal_element; + continue; + } updateFlashingState(signal); // check if it is flashing // update output msg according to flashing and current state output.traffic_light_groups[idx].elements[0].color = updateAndGetColorState(signal); @@ -314,6 +322,19 @@ void CrosswalkTrafficLightEstimatorNode::setCrosswalkTrafficSignal( } } +bool CrosswalkTrafficLightEstimatorNode::isInvalidDetectionStatus( + const TrafficSignal & signal) const +{ + // check occlusion, backlight(shape is unknown) and no detection(shape is circle) + if ( + signal.elements.front().color == TrafficSignalElement::UNKNOWN && + signal.elements.front().confidence == 0.0) { + return true; + } + + return false; +} + void CrosswalkTrafficLightEstimatorNode::updateFlashingState(const TrafficSignal & signal) { const auto id = signal.traffic_light_group_id; From cd06f625c980e57fc21b9cbd246513f6512dae29 Mon Sep 17 00:00:00 2001 From: "awf-autoware-bot[bot]" <94889083+awf-autoware-bot[bot]@users.noreply.github.com> Date: Fri, 27 Dec 2024 08:01:44 +0000 Subject: [PATCH 28/77] chore: update CODEOWNERS (#9808) Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions --- .github/CODEOWNERS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index cda3c8ceaca89..5bbc4d1c6177b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -170,6 +170,7 @@ planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_m planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/** shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_planner/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/behavior_velocity_planner/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/behavior_velocity_planner/autoware_behavior_velocity_rtc_interface/** fumiya.watanabe@tier4.jp isamu.takagi@tier4.jp mamoru.sobue@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_planner/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_planner/autoware_behavior_velocity_speed_bump_module/** mdogru@leodrive.ai shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp yukinari.hisaki.2@tier4.jp zhe.shen@tier4.jp @@ -234,6 +235,7 @@ vehicle/autoware_raw_vehicle_cmd_converter/** kosuke.takeuchi@tier4.jp kyoichi.s vehicle/autoware_steer_offset_estimator/** taiki.tanaka@tier4.jp visualization/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/** ahmed.ebrahim@leodrive.ai visualization/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/** khalil@leodrive.ai +visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/** satoshi.ota@tier4.jp takayuki.murooka@tier4.jp visualization/autoware_perception_rviz_plugin/** opensource@apex.ai shunsuke.miura@tier4.jp taiki.tanaka@tier4.jp takeshi.miura@tier4.jp yoshi.ri@tier4.jp visualization/bag_time_manager_rviz_plugin/** taiki.tanaka@tier4.jp visualization/tier4_adapi_rviz_plugin/** hiroki.ota@tier4.jp isamu.takagi@tier4.jp kosuke.takeuchi@tier4.jp From 75fde99c78aef0ea140154b183fcae05f1639784 Mon Sep 17 00:00:00 2001 From: mkquda <168697710+mkquda@users.noreply.github.com> Date: Fri, 27 Dec 2024 17:27:23 +0900 Subject: [PATCH 29/77] feat(lane_change): implement terminal lane change feature (#9592) * implement function to compute terminal lane change path Signed-off-by: mohammad alqudah * push terminal path to candidate paths if no other valid candidate path is found Signed-off-by: mohammad alqudah * use terminal path in LC interface planWaitingApproval function Signed-off-by: mohammad alqudah * set lane changing longitudinal accel to zero for terminal lc path Signed-off-by: mohammad alqudah * rename function Signed-off-by: mohammad alqudah * chore: rename codeowners file Signed-off-by: tomoya.kimura * remove unused member variable prev_approved_path_ Signed-off-by: mohammad alqudah * refactor stop point insertion for terminal lc path Signed-off-by: mohammad alqudah * add flag to enable/disable terminal path feature Signed-off-by: mohammad alqudah * update README Signed-off-by: mohammad alqudah * add parameter to configure stop point placement Signed-off-by: mohammad alqudah * compute terminal path only when near terminal start Signed-off-by: mohammad alqudah * add option to disable feature near goal Signed-off-by: mohammad alqudah * set default flag value to false Signed-off-by: mohammad alqudah * add documentation for terminal lane change path Signed-off-by: mohammad alqudah * ensure actual prepare duration is always above minimum prepare duration threshold Signed-off-by: mohammad alqudah * explicitly return std::nullopt Signed-off-by: mohammad alqudah * Update planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp Co-authored-by: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> * fix assignment Signed-off-by: mohammad alqudah * fix spelling Signed-off-by: mohammad alqudah * fix merge errors Signed-off-by: mohammad alqudah --------- Signed-off-by: mohammad alqudah Signed-off-by: tomoya.kimura Co-authored-by: tomoya.kimura Co-authored-by: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> --- .../README.md | 20 ++ .../config/lane_change.param.yaml | 6 + .../images/lane_change-no_terminal_path.png | Bin 0 -> 52805 bytes .../images/lane_change-terminal_path.png | Bin 0 -> 56568 bytes .../base_class.hpp | 7 +- .../interface.hpp | 2 - .../scene.hpp | 11 +- .../structs/data.hpp | 18 ++ .../structs/parameters.hpp | 8 + .../utils/calculation.hpp | 3 + .../utils/path.hpp | 2 +- .../src/interface.cpp | 10 +- .../src/manager.cpp | 7 + .../src/scene.cpp | 186 +++++++++++++++--- .../src/utils/calculation.cpp | 58 ++++-- .../src/utils/path.cpp | 4 +- 16 files changed, 283 insertions(+), 59 deletions(-) create mode 100644 planning/behavior_path_planner/autoware_behavior_path_lane_change_module/images/lane_change-no_terminal_path.png create mode 100644 planning/behavior_path_planner/autoware_behavior_path_lane_change_module/images/lane_change-terminal_path.png diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md index 5a6c22a731bf9..0508dc753a2e8 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/README.md @@ -874,6 +874,16 @@ endif @enduml ``` +## Terminal Lane Change Path + +Depending on the space configuration around the Ego vehicle, it is possible that a valid LC path cannot be generated. If that happens, then Ego will get stuck at `terminal_start` and will be not be able to proceed. Therefore we introduced the terminal LC path feature; when ego gets near to the terminal point (dist to `terminal_start` is less than the maximum lane change length) a terminal lane changing path will be computed starting from the terminal start point on the current lane and connects to the target lane. The terminal path only needs to be computed once in each execution of LC module. If no valid candidate paths are found in the path generation process, then the terminal path will be used as a fallback candidate path, the safety of the terminal path is not ensured and therefore it can only be force approved. The following images illustrate the expected behavior without and with the terminal path feature respectively: + +![no terminal path](./images/lane_change-no_terminal_path.png) + +![terminal path](./images/lane_change-terminal_path.png) + +Additionally if terminal path feature is enabled and path is computed, stop point placement can be configured to be at the edge of the current lane instead of at the `terminal_start` position, as indicated by the dashed red line in the image above. + ## Parameters ### Essential lane change parameters @@ -935,6 +945,16 @@ The following parameters are used to judge lane change completion. | `delay_lane_change.min_road_shoulder_width` | [m] | double | Width considered as road shoulder if lane doesn't have road shoulder when checking for parked vehicle | 0.5 | | `delay_lane_change.th_parked_vehicle_shift_ratio` | [-] | double | Stopped vehicles beyond this distance ratio from center line will be considered as parked | 0.6 | +### Terminal Lane Change Path + +The following parameters are used to configure terminal lane change path feature. + +| Name | Unit | Type | Description | Default value | +| :-------------------------------- | ---- | ---- | ------------------------------------------------------------------------- | ------------- | +| `terminal_path.enable` | [-] | bool | Flag to enable/disable terminal path feature | true | +| `terminal_path.disable_near_goal` | [-] | bool | Flag to disable terminal path feature if ego is near goal | true | +| `terminal_path.stop_at_boundary` | [-] | bool | If true, ego will stop at current lane boundary instead of middle of lane | false | + ### Collision checks #### Target Objects diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/config/lane_change.param.yaml b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/config/lane_change.param.yaml index 61e41b4ea3ea4..91b296f8bd40f 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/config/lane_change.param.yaml +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/config/lane_change.param.yaml @@ -10,6 +10,12 @@ # turn signal min_length_for_turn_signal_activation: 10.0 # [m] + # terminal path + terminal_path: + enable: true + disable_near_goal: true + stop_at_boundary: false + # trajectory generation trajectory: max_prepare_duration: 4.0 diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/images/lane_change-no_terminal_path.png b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/images/lane_change-no_terminal_path.png new file mode 100644 index 0000000000000000000000000000000000000000..2c7b76e1749974c64c7422aa524ed6839e12059b GIT binary patch literal 52805 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%0AA!>F~S?BC6_O;8>{3liQ zxe+6G)-NU}ZGNxy_EX3TcA}*3lx@?-T>IR1Yt_UXHxG7v+HiTyh}lO+H+<(q%1i3h zeNdx$4`;pDb$acNfd%aj-9iF;$+-Dzo-E1e@GEoC7Z=Efw>q7?6!BzVhyGJWHLTzv zIk7V{;>puCdx_*U~_y;~&+!bt*mg zMb|FTWgCxSnUlVOkJt_0@hrN7a9ywA_r1HPc3S7U*h_KyVe5jA2lT_+NAdYfpUsL{ zP2{b(-LypBp={>iFG_~>wsi`59ubk3YSs8K{@jp~_Tx59fAaB*=XWiGy8d+KDV1t2kns*m9vYcV8NeQY7vf4j8;Toc9xqds_Hb6mI_CK-Q zhK->0wQoK#)Vld3*l-v7$4xQ0w@VIsHW%cloZ8j-MW18V=jZz5jl8Tsf4XwB^L&Gv zF(W2?ASiih&6SqyZ*wE(=#lA9;4RLKl)Lq79+kC~#r|Mf8LMcK6|?Tbj5CK;H|Gr> zH|pXCH!~fdtX<|-P-E=4z-p}G*Y8Cmq**lQ>M zPcv5@4(0m((T0vVEfk@0q)pDTP4=}^qE01@Ey<9{SO;M&sg#bT6ooO9CHtT;WNe+2 zrNWFXGiESI8Dq?mGQ>1|pO-r4{J!7o{QvXET&{Vq_kHf?e(&dg?)&rkJd=RDf%7}W zEqDayPufW!rDOOR-Z!6LD0CVScZgo&;9iAE3$EJHBfV8N16fZS&c)+tvDHhm718uL zj;wDQQ729?v5(qZC~w(DE`2P7FZWhmx&M-Qq??`oXhpXwe&ZNeG;pt9xJ(M!lTOu@ zR_tZGAvX{gu!Wc)Y+$Y(=9qD%bVV z(ZYKu?U2i)bv#cim?S0@h1?ij#%Nh|iE|Yka(9#8?)7AjTZ2g>_FO7!`Z4%e6{^xu zq#M<-<~H^XafJ#O5&M1fN7Wcwyi5qA{O-g&Q&%e2S~vZR>@nns%OIhD?eJA7G;GAI zNWRFZ_wyN4JNnIDh4aX=W^ZDSb_#7rqrS=;I7~Awd9qdB)JZF^_k>p?JQP)*{v}xeFNC~{hV|1ze z>?dCPhu8emtvXuF3^caRjW8hxZ6{|kV}xV1Q3RW749Yd(7ZUI^}vb!n_W1E{0pb#r+%2zw5bJtOTBCiF)a6&K^;^ zSoK3Je&a;k2EOQxC`wc{H4^nORb`8d;r3TN=DjDM{Tn0z52IUfazr;3c~+qj#>FX)!UR4nNKS zFkfFw+^w+V_v}?p>p@X7xzRydZjLL35KOV77poeplFa+Xyc=lTz>AARyncuA(lyw{ zCfw{w{jf{8_UxV*+a~uXZ9v8 zheY5V0Z;6}C?cW zeJmU3L*1LlVd=O58b-O&>8|YI2M`tVR#D&b>os5Y&Kg^iFe!TGgWNNZwoUZi1wFb| z$N}0^Mkda!Huz=_oy^eq4OXx?n(sGMS(ye&c!F@iDI4u%GC36$Xs(^==p9}x7i>vV- zle)LX$Q2`)pZ`h59>`up&nak#1sH|Yi#PKf=Jv>#OlO(gUEf)Gm4po%OtT-*QzN>% z0Ma2zL$nHGbjifaB%VJ$TLQ||uyR+#^Py6zZ|BL+mqNC(vzXBXN7$BgKqQfotguA6 zqZINn)VA{&imHd6FY=Q7tQA9J@0rN#h(ftb;d!_a_yy-F?^^X5QEiCwpZSU+8?k%O z+v^WG>GAhci(C>63qq7XWic_E(G-9!-DiAe>j_CPf!+G9h`FhvnVSl_S5xTAe8h@3 z8pItMG8W$T8Ju_R{3ylzZ46I}59J`2hiInG$(%5lR5L&H5Q~?C8p?NVaPwO#M#-N_ zPfxdwPf}D_s;>@88VKnNq09t@oX=6R%~Nu(*CUyvbah%J46?FlA%+2z(X6q#$Xo$X zgLL|s3F`KE^T0Pey|!{>Jx1u&G<hec3|imHOi zHGzwvTdvvi&boJ|A7S5MXXP3(>aP*&XD1KZM)NwON=11Icd-BqI3*TEkiLR3q)*3h zxw$ajyOffny2;q5L>A>|`!d+DM-E!AvCHCL(1|tCf4rXN<6cH4)|9W|&8FHqk1a^8 z9=F)_57?!7{|LSFO2acvy+az*s-$FgtMTzWj}*5>aKlug3fDAc-B)t!fJIldeq@lg zQo+wrZ%!CZiB|P^o)yQB>D>=gU#)}xMwd-DgFEy*Lmt55PKxjnRq~-4o3n3(t^t zfEbtn-IST~ZYJ2#8YTRLCV!)ap4GsypI5 zhSjTFp_0L<&1xW};grk4p`@*{Bjde{k$|Adjynx2eaUr|7dkA41GsCv*>%;*T{1Y( zokd2~%Zsi(>kyN9&MU61vq(#AZp9q&BoTU;m&flqtjAj-R;%S0(@0?9%)*QhD6HH? zQMOnqC0GF^tAFE)`A5WnIf?7QUA9vz?bOb;Aa;^n)&Gti03_ zacB~<|Ia275oDGs2^YaRihg5s-Zcn&tRDRHr{)Ob} z8ED~}&7n#IIYH~!uZ0+-re}gSRWK6joDD0@Bugc$et&BJUU`w+P+shw( zFi4y3d)Y=*PM^X&iyJ_~A-wJOZ8um!N7AS9kDvu`-r+j)iLl&6Lefow23e? zNhiGP(Q9gdeb2q8KyXr?CIU4OP;=u^(>z+xB96xx_3r!D#kj3|w+WB&Rb0WWjU~UJ zgM4s`Ep0&_%BF(0pvQ{a>Qu@hAgBA+7a$qICkwJ>du+)|M9THKpdCpS>$_-bS;0In zOe*8`F%h2S9n5N9{*QAMreeUYdZZ0qMv{`2OxOF|SN4(#o@5-vb_f=MUwY_mzEPPcwXzC9D zl{hWgD$uiUJ~U!4QZ`hPeW09}8?5MUQu8w_tC%iz?b^PJ$5f-OCoR#|B*Tej>vdHw(DmwZtM<8c>rqMk^LAH z@&GENP4f0#g%yPFZ2siGCqe|9nyPa8+ShwrOJ!W|N=+_P7jug$Z_XXpod|}P2yIR` zr42rF8^aPFPUQ&=oT|0!bQBC75DFO_t zcgI0EAcmASI*3-e5p$Uzg?Q~z^!t=6Y2+O6o z;DitGcU3iu2;#O8rT(0oS=l({o*?Dm+9I9&{FU~a#ZBVNK_EX!#$<3SW4vf;b5uj=ef@ZnpJ2{W@(r+yZuWG5GTk zSN)V|73&6h`#W^ z^9+BlP8#0SE0e3AMxGHdSF@56K-=u7T!kCkL&5|r$uQwxzS*U4z?_xwrh1+*ou4`OFzk|>+*xjb z;Nl*Pl(br)ruh`)(L7uXMjhbLX9|468-|+-k7qEi(~HYVgoiHV5H!4WOc;FPa6`y| zN#*-5Ex(5J2I}0V_D-GOyP4Gr#9FS^K=cU%1Wi z1Ke~tjp&JJs@`H;@cEwQ@Jb~9u?v(Nw|>o&2Emga!~fY_{ike4eOq~Vw}R)@LUhq4 ztZJE4se4e~Cl4t+(x+tGDW@mFHd?t;#9SnNgH~GnW;-c>$?TK)4vD@ve6fipFxtW_ zwvY1`-bkV((4x8ak6>KKt>o4qL$0sA3*{#@HLGlZR(1r>uHu2QT|lN4A9b6v3t}0& z9J>Jcco==ZI@Epw_&K_VFX9*%12bCz!5m)^%qJUsS~7!i>*MCf+`&Y{b$V$NOb0Cm6?_ORp~u9VLAitlf3 zv->1Kok9OS*%rk2AYXkgSD`d{xpO;vug-#pId};ovFEpTaT^+EO4|b+to`#Znf%d< zXm}dhNo6~3a+g292sRIBW4#H8%Xmmxbmpk3-$`YS1NS-GxR#U2WvVLmj~X^U4-!4- zP1|rphm;tf_JW*3QG_4~8B;t$6o84{I{}M$jfI!+*^)u54gSFQ%>wlD z!PoIc>!Ivw>URu{c))seVW>2o7sl_x_V&y)wMZQ_&UPa0MI2x7J1zCC5Qb{@mE{!% zNIu@fpTJr(-M8+`ZIu5lyEre*u6vaG-(Y+2I#yo~m~JnSi`pgzQmOT_K|LNC>Ig9EM;$%$>hGC%BPNw-Hn)tE8w*65rh9Ly@Z}8UI~o8y&;|O&F9~Z zSzYkJw$~sOY@Zr~BVYe>X~pc_vOu>wGt#Z|mu-Jr3H`V0G1$Ie_ZFc3?RxXyWU*ub zj3fWe8-E$_-A$&3Vp0lA#|Y$cAN!+^M96H_^fy@yqDw;x=;Z$4ntu-8ZT0>46^dW3 z?IJwy-|^3@-<=7*JAOL$(VB_b_c`?M!~M@}qa;7dn46&YEBxCdJV0{PR*EG5H%0&b zNnapca=~HGfAi!OprFRK#+|1B+jL9-uO#fvzxr>UOa#|^!aj2J|HXwP1wcc9BR@#| vZqa}FI1h>id1+&p|N0eyzr6c(>le5En*3g^WSpc3_&agb){zf_g+FX9ZWYE|Fg0Uh9r0Q-&gNGlRMD9-F;>H%zHEYZ89pV_DRD}A|fKH zNyL0*L_~!J@OyjZitzWu@l__lKapOgh!?T?P~+PX5tD*GfyU zqd7%wdY6YXdWssMN2E1N(3%ksz0m(-B^0k1E}S|TJq(FtSafG*(d!nfs4dYMqoQ!# zfMCF3le#%EHiGZ@xVMr%9RZO?=Qhh+l+g|yQ-R_sF}Ov2Qo*7I4!3yTCQr#Q#iP;< zDodz%KFsjE5r!$nLK(e9?-oDkbGht3i~GYygUjhO8j7)2{GiU`arr-dY@o|tytv|L z+_3HsdZ!yy?_pZ%F~UOm%tg<3a7N3|M?c9kRJGbO&%<)FG$%>V0o;>wRZ% z@o`@sSBjGgqlO-?2ysU04{Y+DQo_XZx5@QA(Ta>9@nAhbxc>JHRl-l^QoK~s<}uoJ zK1=F{Y^p2fYty^#K9q8QCh@<|ZGUH6E{h!vlpN-l;!#;FW;BDtegCIetd~rpn6`@M|IbVUcuhwm zprk`L-IbS~!#{$>zq24FgIg>*J_h3dAFPUo`7=y0Vm=%IxV{K}|7io1bXbBAq?io; zlLp{+{b&KKV)^@@)&Iu;`sey*fyp8)qLqJyF2aw49Z+ekRab07 zr2a3`FARoI$fJdMk>>g5^~>MX93LqkP(58KS`B`vd}!%kqz#y?usV6C4Op?<|8IRz z#9RLdGyt2;jpla!Kold~m}oAym^(|v<$t~spq0-@<9?)g{%M*2-^i84OZZz{3AUV@ zR^%2(*zV?mTjR5UwVkBX8|}$1ufKpUVNHYNv1TbOxI#Y?hQ5UX*d5F2xQ; z^1B}5?G_X59{F5uXw`Y$Mc%+bOMo_Ic;Nx#OIm5erg#c`O6SwHX2lm>B0_JfsWrk2 zfc1$aB#Tjm4D#4|B9LMTx!HP=Jw+E{Saf0~!@zf?Cb1|M738pFK~Ac{VMvv!Z5+9Z zTl8E|Vls-DUcFPsl{m}{N*o`P6y(Aih7>9!OVP8W&ZLmUFXP9j8d#)LV&Ne=0%s{4 zTz0Zb;+OE_O)|BBlVnvO628I@_uV9)VNr{O98x14D6>dlp2;Gmopj3RUt*MDBm(wi z3&*M#%X~78&kFPPCuw+QN@R+mG*WM30vc{Jh=dGXf-QESs`y!_&!Hm%Ub%yls&`=T z+b#YSEfNSNsnJ*iOBvK7K6{dea+6}EOK#=)jeH+B$$@$eK}N`kkZ!%mA0r7#LNY=d zl)=5^1a62D+r6Zk-4*(A8-(Gxm~?~!V1jye8lGRPQMx2nc2|P~w^9i_7fINiIx*b0 zhS$u}5lV&*)(x;=CRqgmfCCMm6jUWKL7!#=i-vD_4nc_pxR(c`hF6KvtK_r0CL!-& zBr+6@ZI`BM31#Td#}!y4;-WReIH4pf2G=&24~+}@w}~sUu$eFq7)2N|06i4JNM=b2 z!8*dQ<=K)|QlCs6&q%V`yfSNi3QCxKXpkM0X|z5WVPYj&B>~DR)ag}>0GhyN$W(s6 zE`d?hZeav;d_#)NDnw+s+n1ykKtGB=5})TvQWv!+sfDiM{sM%90b?mrP`1AhMjI0L?A7Ir}PM_h-BaSa&#hzbH>tcti^BSEF=Ej+&-v8PaCpb{%^6ktxS ziU;nJrJ!nwNv2}^WtMmv%RvcWkRszlTQK}gK&CbUM74js4rysf!@Kbz)Iwt}J^=k8 zfFYACp{Om)y&*%alWR(eAXR_6wN&xLr3hS^k-BhNV%5)RhHN`r+OgHiWEp!u; z)wMV@P!fBJE%u}SS1TvjCi;8f@-oM%%yBZ6IZkDc6YYrpeFwG7aViM~{O@s`{-B&# z{}P^4u>vjgoXR|>vZ!8JRPUo`XPM{pZ{j&2F~uRff2puu@ort2aw=0!Wy+~cIh84= zf6FZ=CX-XVfAcS;oQf4{nQ|&qPG!oeOgWV)r+-i7#9$X6fcTeEP9+I8W!mYV)J||J z&>v%fOcgDHaV1V(kkp`dgOjww2`D)ACQa2Ln2+w8B;2Vwf(_3|Qz?RDD}A3r>^3-^ z2SI%a8%~4;;Z&cAa^OJ&Vo%ju;nbUoO`mxC`S=Rl9=@-~0x~&f zrhg}?Fx;!eg#>0*rl>}!L^bs35Rr&9;3r2CG2*uo<+)J zVqSt8!&8)Eg$GVmCgNhD0}UBG20O+!h)9Xj!Ay{2ZjYW%C6XbWrx#JUQYdsP`DTG! zj9YO>z((SzMkaDQal%aM#CD4Tk(w#7S%x#ruwGeEhuJ)ogR9U9g)Ehtd5o5usG4Hn0E}Y?W0i(({!p5)m+U7M}xmN)QD>2~mV%sT_8v%whMc>;?{%;3E}G zDx|f!1uCYHg@z;uZZ*qMp&K_KN*jr}c`~tEs#Qx<4GfZrSp^=M6ZPXvH>t#wBxbjh z1{)gGV@j6-ClQqu^=X}EvBGXhC2e-M5tneZR;gDlwyO+;JAgY$jzX=JqBbF_cAz4X z;lp(fUyKTI!^u#yLv1y92odQt2$VRzHaN#CBdr3qUV!3iyObxh+l2l?DN>g??;`kkpAY z?L33c&cW5mGaG0Ug01w18(7 z<_*9ZVge8Pf|MPNA(^CEi3w9x8eWi43wZ?L52;jM4=M7Yq*%sOt8tAAFso*{Q6**z zq7FRCzz}*3R%Iei1e_{F!of5=i^1+z6(lOQ}g6$q1Me5qE&Zw0<2TwV@cL!C(yrnx=wW6te-$oVcH2 zqBey_5Cr_NFal&0!f}EeVPH;5rM6+IC=zgy0yl};%t&I;CzosN3WI=BYn?oa8kdS? zAcHUgZXq1ZkXqmyq`=%_qsS+fIqfM5%*#|@HiW`BQY?WhO$rHPC>-aZEHugJaCv~< zB(f0BGK5H=c@s;=BDHc1m+A!pfh?pHp&FrEZIkj*hbd?jn{|dDH=uB$s22FZV3#7$ zzhAGxRR&Cm%P@0_98-#w0%am;7a|4+WyK&{m?S8cmKpECHFhZ_q!b|Q6lz4Mq689# z7DI)4fr6=Y_?ddASwuRhWK_e0zBo3$h$%AgNrhZ!CuBBBDy#vK**Mlj1mupIk}JhR zo!W{96It#gogGg=5iV1KC_Mkz)W$O4Q2H~V+6rbc!HhYZDDaA=Kj|Fnnug3A9 zI;520Oj4+32~uIcOafC%aT_ksIhBbjn=FWGlpv`nuR*{h39%B9Im`|ebb^r(Cd&n8 z2FQLnf#V+BsuapKcu_}G z8z&LfNCRldoPevi76pSNRw;X1jF52*Hg^(<2+g=v%EK5O7s?V^WDGN3#{yla z7P2X^n+>!l1^vM>Izi&I%n5`I1)Sqd9Ye@4U;#7eA+wASc$7h(*Fb=ru}M4z4aOt| zfgmohr^0+BxWy+nsJJW{CS|DzFQQ^fMPx!(;3Xkn&bLb_IF+vsdi`?TmWuOnQendw zDn4n(LQ1vTPNo<&lv1xoy|~!y)Y_z4gH6jo)zlz4VdH2SZZ_}>L%|T52?s}u3nf7N zE(V5id}_Whg~a1M2CL95hpYgjh3f@f5|hYMYH`f$&t@rs5@(uKDB(+0SSf-e%tDaw zR+Ipkgrt1RitE%2pP3TcK<`Nta0lhbL^w%;y`T@tJQ%`M88Kx@jRXV=LTJOpQn}Vn zCK66wf?kL#aRF*4LzEgvq#iASN)%3aq5{EjEJX3qAlD{i3X_yhQVuc@M;THS{vCwk zN&@6#j0$W$1C9la30@AsN39g1gh7mIzv7=TqA$hFnO>4Pr`-34{VQ zQz?;IwG5C47G;9ZDYM$Okfq^IVz?7$I z6%}9zYDL95hFPK%N!3OT@Ss&mC~!(4$E7?%$g`-_iqu3F2^N4`hFQ%bt(6KH1V!_w zKpvw))Ml_#J_U^%D~~VNNNt1zWCMfLPz+y!f#E`wB2uWe;sGNrm4cmMBN+;?O|)#4 z0A!>i;8J4tWT1bK8uNn;BvX_)PfIfGGQAy7QrMVD6eg4#Yyk(!G?RL}mLn5M1$u;3 zVGLymV+jR%fsoVzttEklDYHw3Dh(c^!i7?;1{WEHq*D#>QD96n;N6TmI7-yU4j9F# z7899yI77%L2vloyN=c>0<=257tFW7xMwp9AW0n|b+eBkdHsDH?QN#|B2-r3RGg*n7 zgK~kAq1D(^Q3fi-5G7wHpn_sVIpF{N?ZlwP4fW z8n=@I*=E3{0m>%z5O!M#(+I`5h9@&(xD$6OV-gwoASHr2DHczQfeos2C%!!MXOraC(H?4tb9wgT&?K;qd7^5o_c+RYc z_2YJ-gcAAK!2eRUQL1_K={nC zu0*ZIELS?sKD_|+7p}(~v=f80Q%UE|`NP zAQuP_u#2=R3~=cXCdfrhzSfSaNewR<=pjT}?F`W4Ov(l-T)<{3369g~1iloYBt-yi z*>E;ws#xWqmsAdr7fzF3F7jDGSNmjQvqIsd+)9GYB=}}0+?N?O@u_;2GLZnCqC?Cq z!Xahhq5z@|fz89>u|OXB)r304%>QM=0exqGV>jJ-$NlC!B1AfO5%*Nqh z4$_4Z{!|>7V&IR(82Fe+k5K^?*!C(W&H=w91+{U+DjVCAgmB%Y+OELFLM_mnjwG0g zIFrW)8J8?4gejB*RT3h00A#uuXQ3<#{5^xsoJ2T$ZoM6K%Q2>h6uT3E&cLcvauga~ zKyT^F(6P`Mz$Z#E-8vl~VOUj71*B&MC(ap_!KGuQ!x}Qm0iguVSXTM6ZIi`GA0x% z^n_2M5~Im72dV>q4*X+<2jpN#C-C6}h9Po|P)0cd3O&otQ7~X$3>!-=RPrg2*=e-- z;Qzv8gGLf0K(6S7HYTo-rjmTA+h7y&WlkYt#Ds%jJhxJ#MYM!jA`{yQ9FwZ#xRPTO z1aM`L>(@F+0u`82RRW<)EiijAG06gd&8xMVT{@f3AtRJ(lEC>%h+PUW$51eq)Iy;) z5upN<22C-FaFt3UVH%irn=&M0<90L!7xQE?KJdN8$JVLMIMD5&L>6jRI4H5!hWQPI z(gJ>Ys)Atx8(FGUvv_>U0eXrsFqJ|R8^X4MgMI4_Fd>gPy z?2xEPDndf1Orx|CxLE`+)fq%m9DGoRf|i}Q)RPnfiGp~+-)Ddis7zL|;sZ%xU&)85 z5GGFvI0l=>s}tD}rPbs|#o&vpr7prLB@&r-LWLXrFfTReJ)g?PjUkbM(_mw!fV~nj zsC+!sA+;)SsVgyrn!%Tx-q!;8*2Saj^nsD_vsv>WM+(F93qN$e|} ziRv&wb|_@cd0ajyC=xEF)R_sT82*??M_D|OK3w#O-$+-BDz1a_Uz=LTWV0a;fKCM{ zNnhw%oElIneW9ebL+R8yqjG4^2SD6AobE4J!z^8;p}3w=afZi#ZDuCx!y*DK=AR_L6hHC-_54pJ zW-^N@{%=uF2?qWZs|NgyY5@?#m(dyW4g zGmzuY(TgxTgSt5HUl>b5bXm`Lr|1!mT@H2_XcG^qc3EXsLl82kneWl4jkc9*xR4srkc{*DjHX!&WHmc%TA-~$2q>fL43IgEE${27BdEW7C zSxC!H3TNCK!1fj}VXp)7w;>;#ZwjGS6TAcal_42JrUoB40mh&!GQfQ_WD3H&L3lSn zj|0y#P`-@52eBmqQ>NC2P?g^Ydp8KmmxSbe8zK>e@3Y}vP_DMIV$a6zh?vfBz~B4QKbclUdYu76XfOto@42*~$5GqpIncOZ(zF53031y~PX;f*7I0yracUxf-ikQ{Do&JC zyNLIb4*1XNE7|jl3EL{_ch|mR8zqLO4|!3Q44*!{Z)j&2)h^&?x@yIHP6+4uJ0vW# zSssixC70B!a0JXo*e58e`|<8+;EiN)sj3>z@NX8#h;Ri8z#CmTf+^<%t4!2o!o-!I}Dz#mJ- z*K%kY4_CIJaSynoc?0MZs*Aw82|QiVUMgK-gkdR?R4yyY7t$DU{28p@Nh|e75>3S{ zt~BDJ=TBGic!vRyKP6Q?!g4oU;e&6oNJMlM6GqYeAnpw`3A`(S8V|rTY8lWyUHwA_ zbZY~wh1Ui2XQO$NrcIhR*ubkrvI+Q2t~LRmK@|@xT@^+Pya6zVHlW{7xLvJfqkKb% zZihA&#Py(d1n?psV5f#kB}KFgd~V}NKsEtRp&tnXeBuq$o*H--cnNAxfc&sA0memR z)ASv(nT&r%--semOyA)OF-ZjYbp-0B#I_jOdm8_nH2)EO|2f5SiYXQa2?Q9>($WcP z>G%PHG=-XgazHxMbyU0#G--OAZ)i zz&mVN&<|Jv$!FCv0m3GL1WoZAkZ^Q=z#S5hzz{vO#6ztY14tB*79dq04@UU zApmJ+0|{kd09NUD0w5VdOGy4)Li~3@FhKh~#riM=_@-%)maAUS5kLblV>Q$sDdJV& zL6F-}hXm*|i1HzV2XdKyM^4i%?D@lQpbr`7HGv7L%!Gi(fM&F`oB&LKRE63n09AmH zEKsBewV(syLB`PfKmp@nj4&@-*g)4bRuo0D8tSEhJcauvFZ9a+`Ul-+0=Wy-Z9s0L zYAph?hSrTh-!>M=brWD8beRqMmj%Q8AA+$$@nJa*eSq8sSrDXk49y=jHVpq=nBf0~ zthN{1NjTT7MYt)3AYH5JLzyiF|5j0y(CZBUrtP{Q?Z1YpjSsdVz%$$iHqJ+FrK%)B zr6>#UU6mwQJJ^zRwIbjYupx_V$3Lr9^d~Z|D3_;5#?im|66j0HfpaA^r?Fu^v^=5P z=n709wu#Jk9YMLMaHS?KJoCPSl8ml4Li^=KRg>s{}hb_3jvkDpt zL8v$coQ2VrEA(aHNJOArgKPv=Nn5M`=t@Lj;XAP6Wc2WFdLm=ysZi6+joJ0N_9P55nw^BQZ)w0vOS~gGCFy7uDzr_Y81EiYS#%ll~8mRy2PY z;lt5@w*cy(ziF*iyuOlk3+QzNbi;N&Xs|!jbow*e_~SZ}l68IvQ5p0MmTI`p9L-hq zXms7La2+{6?KK+tblZo|{h>nEUt63Zf4CZ5GF_^;sK!+3SeQ{4j)nbCl$~NSKF$F^ z*d_JOOGU@n#TjAdQiX((;`5pRGtsespjK&Fd;{vHmBlycN{D6gjk5SgS$yLoTe&R0 zQ5N4Qi*J<0H{SVvW$}&wo>*O3e4`}hQ5N4QU1|HzeAqwkLX^cf{vOQ!==Yb!H~z22 zHxN$oX^oOJQiSy{5#K2L>OPQ<-)u(@ylcS2#=a?^%QAlKK^3fzld@w z4oCj2#4Mweg6~7S{BTmNIM1zAqTh$#kuS={EBSsa(C^3PHW6;|4n)bA{}S|DRvWs^@-MUe%Pjvg%m3fm z@(25_IQO8WpvV8FU6b$!wLLBuls6HyX2gT>^8SCtAKMnu6)$8i%4q-Knebi8qJx4M zj^Z1|FF@%FV^PZ|7pE?dh-e-GVMleK|NV?l>0&Y!jWrcUIf&~D}0 zR-~gRS+!jM=2uqLzmeHv_!s-HMvlr}^fqc&AA{oOQ@oM5Ag;oy=H;X-tNd``h3swN z;hl@89&{oZtc>p4Ug!5}8XRS~+5PgvC*9BP+x}wPQVP6 ze#HH??M}8B9#O7x^FR5kez~Y4b1VPpE&B1y$~EI&{~}%Tmk+?(<^S^L-+fycG4I8> zyGqT=o(=!9lggt$7bmXh9D6x5u4R*!!ygR2pOW|Z2f@Tt%J8Ra24IXhQOkVdr|&wE zTYpuInGg{=kb5-mLGMe`e)xqa>Yl*_NYq>vH?0G9{n6FzqYn-Zg|UaXjO_1iJZLT4 z++61hXHV_0W9y z&Bp)O+m%Pf#gF)As5Wt2-7oS5@qg&>a)rtZ(%RmP2m^Ic?Y)QUYB&G<^y-r*f_3YD zKh>)G_>ZU|u0xfYaZ8Vxj}rjW<|m^nFHkvtz1`(Ql8M_1?d4;dvn$cWwlg8JoVf;b z*(V=U-YuZ0LkG{4r`ww=;Fa3O#pbpjbv5OansIG!?>yEyjKW$ihTmj=yz=I&p`$@J zZe0m4A`@PCy+85B$7G^z6&KO(yPAcQ=oL-g46l6KJ#~HK4=2^UJxpV&zW(hfdKz&W zm^u1sc;r%l{oWxiq6smy`b4^?D=Q)**RR>G4que8&9W9h4}Rf%b!Wwz>sf^bYwT}s zx8(*NeQEXeh##!oV8vdYJv_9{!P%UtF^==ni(6B!ovU3gcXOWC9Uf%>jguQoJf()L zDRz#ye|}TWRC$jURqJ+|+_}%jy(0=<-`F{#ys~fKxfhzqA6>$ht0l{^6>T`SQ{Pvt z)=>QX>w5d|`!BTE)5PDmZ%7!?q+V+EvGkN{){ZQfJCot9`N06uBYF;gzPFESM{9Xf zdUWrV1Je7>OFVjM@zSL^_x+dJ4}1G0eF-|R8xw0jd}909N(nS6eX}eg(wDS_Tc3tj z38l2k+_^R7F17#qK4jS2A!oCOWgT7E0b9QJ+s=LVYfbapcb0c+?_^mF3%gT~u1v`u z->7%5x?`TcsegW>W2!5w0H5BaPaE6m)zh-a)M&Klr~W&(`VQ=$l9~2;zho5|9C|_g z`Dbx^#?LMv7F56X9Ujr`=Jm!kOQZ2KBF@zP#og0~D@Sk0RaSp?=j7Da53&YC@3@B? z-SG9)9qTO@w=N#H0$+pXK4{v_C$4)Sz00D)yn1K12fh1_wZDIE!_;r5w$14>^zpcv zPbWomYjdD+RG3DiX*$#0T2N}S%_j%S<$t+L(NeU(Q82iB{Mq&E*;|$;*1LT=E9>zs zb^CpF;^r7Ox-R#c)x$DndtP47I@{@JgYdO+#(?NW&4wJ&v_1Eb7jb_R<5^1@fWOLN zJwu;2Zt%f+q*u1gVj16T9`r-Tzzr8XcUO7#%=7Q=G33$~@6sX9&zkbCjjp!NdUE;9 zMwyS^JZZgW`-A+uhM_~+Ryxs|LvFOUUphZ^_Il^Vtrr^H8T{hjcUf z-_+t=9$Z-9xtMaA%ca!kKZ_Inwi^wvuS$!!hB4IE-B9gtdLTRFEp1g49 z_ZRxkib+{sOS;i<9-lw#@ozH^47rq6gVo!fldtl67c%c`e*EJc>e1vDnPWeDFDV9n4s_kIccs!&d&HHh z_6wU86>Bu44)i!>Z17;%mB=mmvu)#N9T__PE1>b*BMbA=yJWVj-6Q?P@@bUGl=E%d z`R$(FJ^f;FgWiq{=EgQ4>UCGgG?PwmSY_1^;P}>sPjd#mJvP7;ckgd)4M7f#yan3BpX`MSf?gEIwYrUe_ALy&EI!`WKGfYxAw19eeX~%B+nG5Yzt$O}4zE79X zl=Sp2*<-3tTh(V%!;_Ysp%*=0)W2KrZeFeab?)b!Xs^0{Klp?y$bZ&f-Qb&UCq(n| zFQm+uPTH#_Gp;Xdn_j2dl8(eO{ef2L?4V~EXJN{=$b$TRqGoBWIJT2h#xxzO ziQaY(xtuSKxZkMr=S95Q4|w%KLR|UMMpg4O<+^$CY;osq<%9XP zLKTF<(_dA{o8-U59N6jZ)`O&P-}qXKgkM*C$O)XPl-MhH@8Bp90ee@h+0kZ|yw{e+ z)1r>_s#gEx7qt9aJQEbk*lJxbeqj16Ew}cQ1?lNM`!sFH+C6jMid~O>-8XeYvS!AW zM?c)Vw4+b{Men2`k9JksO&+F&eI%@V$&7vj-*AuS9BR^?Iy9GySbpc91!<{X-B;Uf zps|51)wZ)S`TYL*wy{rhTMQWTcFW@dJ)N85AMAM8t6VO>cP(@8Fdcqi$dnM{S8ZyJ ziwHfrdC>D%P_Mz=&uq8Pu9)#@qh1$OW82OT@Y?ixK2u>@MQ)&SA6-4RB(dJ%a!z@p zMn+@9OIc5UABPOR(3Mt-ikt+ zqNnDWYGJ*zAu8tKC2Z)JjEp5$kIAJD)#TptPu3x-s$(yOq4rMq){2^bXik^IPY3UO zdHHykd(Hj5n3rm==p^Z~>=tN{31<(J)P?-y z>^`n-t4@r3(WAR&ZpUM-yZ$JfXB}cu>>&mWyQn$VYJG0EGyYrG_nza}uHWiixTQzT zpdaR@JwLm9AZW#=;_6|;s^+}moSK)m-!gZ#zn$~y#n`uASDBOS`Qad%v`NiWsrD&QIN4TiCZ_&*z?BUG===Xzkdo4@}e9-w)wl{>emh z{JF!;hCUkc_{GBP(ULWncJynOP3{{0w!nDl!j|2=3vRx7a^rT^Th6k9y~gNoC*{rw zy_i0!_uDfs*Bm1HwXV_gjl02d$N7!>c1D)JK5|%LAM2^*t*^CBnw%KD<<~P4BhDRH zP2L}7<$IrKvh@Yt;KD(hzdZY3kbXmxNZ-oE-0G$EQLE*{FGsFFggzMj;^OX3H-r-! z?)%g>a9UzIZiC#=bOOAdXWk-l%yq@HbV4V>Q3IVGZ-ZuIw~ zY2w=T8Dpfe+QjS%`xj=+7%P4t@5)T3aw$4*X7$m}Ws`be zUmv@>bG2%-4kmN8rjD<7B}UvI(;=laTf`w%UN(u#;+iIY+LXPw`SBagd<`mh$+@S^ zxW4P?q6r;f`JpW@-o8$&nwGs`aL)A3Q(olXUH9eNA=(|G4Ip05SKcXi9v2P;H@d-H z*6B3^F6TryO0gVCD@=Q_@9vr%1K*@Q9a%$q+Iew*<1rEEyrB;Kh!LY|9=Q@c(eAqj zEPfvCOMUjk*`YDY>>Gm1t2oscMzUID#GZ>fa;dAb>IYP{CJw1^B=+gO_Sp}2#10&} z!F0IkmTMc&U(Yz)i*-t0z4O*K&$ir}-*Jm-X~T@~cSP5?Ff5BUDx;3{&sH`AV)=P^ z#X}8y*diQt=SA*t_ABS#A3VN_HLJ>;d9S%=M@F3cw(j{4K+^%7B~k31trtcgik=_q zU#*DWU_H55n=w$isejM2Yty#XsatpYsAELR?JrsiC$gJP$u+hZ{#-eAD|l?&sJhX0 z_8p2oKciK8g@gBQzMPjCb>wlzt-T+Z$8^}>=!D}S2XD-u+xTeft~A@F026D?aZ0geV(0)y$t%I)ZMh4|k+-u`mKXliO+EIBy&l`&oKzPH*Y702u zY^>YwtAvEyR_zB~IRInUXcy^wvuAkScOsCs9)1SvVNs*>2CRX5TVC6fvoK-I_20*J znLcLs#A)D}OjmDAxr;YI%#*hlzJ0y>fT`b{eDKsJKKSz6rg0C?Z(8%R;Kik>p=Wod zRXwt?-?mRSt!=sa<+Vxo?fBK0TLt;2KX)2T<sFFL?bT=a)A_EJqf^&k~;2Y)p!&-niYfiH*7W!zMHum#ZQNKkKl;@x_jt z<|`|8Pj2?yMm^Yn<3{xpr(B(KCT)JXtm}hTuBMmjFMfXS;#S#n$Jv{_8@a1FlU&U= zOza+du%*g^6?L88S--;w3KvGEhbuyeI%eV4v0 zPtF_?IQZ>N!8fNH_xJw5b@`h0_tFg)u5$KlJ3V*(q|?&;^{<3q4?b*f(dc!-u9q2e z2G8nbY4^&LsW?2|ls;{3jo$V*Te4r>%IUo6V%>w26BiHJmtT|D-4-`^TKa+X-U9~q zd@=Xvj9&hWt^GHyijAu2`*Ur`U@_yt6X5Sq=l`+pc#Z z^J~;^zG?K@l)Re1og}Rlg#M0d}>SIQoJ+j z>o;litg5|VZn_)t4bSM-_sZ6$)w0uv-4>jFX0AW9fOC55>OCu-=c?FaKJAhJy)ssC zdP{>Bd!u5p`mfRXT_tVgb91-O-}d_Xv~901UEA7p12dg{=SO6NqU9#R;U--!B_H*k z9TyvT>wesNUFyNv$i@9#ePV0fdO5Ktm$!auL)jT~IbRmI5475p(79o+^fZwi#(nwb z_S0Fb?>=7M^KNf#bjJa+uWjuqJH$;m*Ux+7Xw^r>8Zu>Ik%q(rbFa0@Y`I7NX7JbN zvGu#AXU^DvDpNFUgjY2*=23-Zug~e}*}i?cH)UN$PH^>Ii$}J)?bVz4Gd#bJ`+39J z-)ba2<23r=4l!uM^1S=AMT^eG`j$>5H)mz$HmZ9$jqyv$;HLvKgJTq{?;d@8bdaad z(>993jW+!TP&qvHZQm`O^Pep4O*pHr;ohj4H@o(wF{kJ5y;Tja3X>ks&W0tP?%dxy zE-^@2uTkvq}HFQ?i74y!1LtcK@J<`g~^%_=-RtYN|J6U(Nq-JKErn{N8N?*9F0FD`W~4BTq6jNGvN)2xTR zwmjInE-QBHK5qwN*%#ARsAH-JuT6;Ee`R4p&Y5mi7Npz~2PbORqA_o%SBS_Uj*vw( zc|5Ac@aRI*z7_RWs;e%zznxd%v24xh!pHve8FO1c`z~VZo1<-qM_(Qjv2{qZa=Ghz zMIE`3&Wbv+{pOih^I9E?*?#lU>}yZoT;+^8-FWG(@hO984j2@A+coWAi{YsqhWK7z z+H|3l_fjAs_1>8lDR)kMC)u*ab4qKHOlZitzVmHC-ceDreG5jEH@z`-r z4>DhCd#_tNMEla8UA<|KcH?^G?+wKFy1)K-t5vD@k@9uFKRvg}>*xE&RuimSMYcYh zJcO~e;}m0;-qUBgkN>1LPny%<$dEeg-(++YHw&HssT=(|+CDO+%0#l+s_DNsJV_N= z4*n9oOJO{Yo_%sYW`y>u?1Q2vt18dUzLB2&veon&Yq(eUF&dItw z>~iJw4SfSg1&H&_OQnrJN0c)47Fg}|3$BbjwxQ1^WZod8{MPL~_N>%2+Zq@;rusyW z-cZr!J8+M-d;*=4lbav=WzL2PiyX7ItQQJwTv4CiuYbdL0*cR1_pnQcui~2bD%WEa zBlH5C@5IARdye19Ra!1>-*R9sC$ZsO*3UiO=}O_M{!vGo#;#f1t(-ZFT2?PI>Rwgz zqaKFQdw)`V(eiEK)}<{)=PsWf*}2NRo^hX=KaV;R*`)q#dP47X%!pdeho{EY$sfN( z)GWw{s7ISVF|O(5D^(YR`>{k9+8Q>Cvn$atvu)kQqjpqTkfvLr1Rd5P()P%nnq-Pw z)92RU*edhV+E)KH5@MyyPub;48&u^w#YNm7>VAIjY|G0-pG?RdpPTmjd4n1)515bf z>4?sTW5+HugCKEiLI+{Q2&&$Zi2Pq`=RD6lYZ8Q>d^eD6*GC|a(C9KRgGWb zxX=Obu2p|UhG*vO?`XU*s>=N50T?3h%7C}}6TxSk(|Zdb27s-=pFOP~zw#c$ygd&e zUCrARdxGYblJIiAVuxHHnq(@xQj+K zxzJ*f5kjd%WZD>XWbXW)i-txlY|yPs2TjL0FYb-C`MU<(5K11&s=GcMJ1jxLSM9I( zBX(r|B=&eb)NeBe(9vJxvFrQt<~%w4;#0%x=l4B#560%)N+0Gt@#;!K4atn?emz$7 z{^|1_kAA6|H{-jO6K>A)KG;J04$Fu&{g>UmgEZ+@KK~%syI8qI3VarLb$lAp@cgF@ zyCz=>Jvq2&V6Ev7A1!~_Y1h?ht)78x^t4>VUZPhI+GfmKWRic~v&sUM?)%#b~aa4N`cuin0X*eK)s4eAxR?Cq8>N3fk2&ag&| ztW;yapkDuWy$fD0QrxmEo!2H~Kp-AGh^uFrUn##^z2xF58=)1~>G;=r$LT|7#z%B(*HYRYY+6RSPHSt;Tqyo&H0(N@a39r_ zmNDOqjO$b`m$vOr_S?1}Lha+5&Yv@@z3NBw*;C!9hMpR^mj|RiIMV_G@!vtDTylA6 zL8~2#MO}Z&_wJq0D0cs%+HLki6s^5zVq@m?3r9E`&Tn!xdp?{Fx7Thq?83{eszYD* zF}#`zA>?xAVWY>8wc?szjq){FG>Ziu1odFSVA@Qqa=Jpp#={_j|8i1f=Tf2Bh!I~_ z{q>9Ccx1KoHCfNevpWWFqMa(|mS^~uYlpfo8F+B^{D|9~a+j%o+*{c5$@s=y-Eqso zJ-s#8JMn_&yrWimQeM6BB5AKTSIP(PEL(a#L*D!I`zsDTz_ZUk+?=o+Uq$}-`PLqy z)6xCH4rXDsM!oump5MXNHDN6vGY#{Cmg%6R*}HZQq`>dxp^kO zv~Qhi3mQciEItvl<4LorU#(1HeBk>>M)9eK+gq<&b=jBw!|tz5dmqa$Tsya9(c&C2 zcZ<4bHv>`r_uI#RY>?sSu$%OtzVSUgnq7JEj&==uOlr!J_8(S|a;-i|+XwXq3|ag1 z_Hohdg5T@yzGp7@By_Y=@hJhi=BDGvH}n zII(Th8whDIw+7!l-jf55t)QM~yln(>APYYg%b)MXz6Umh|2n}qcMZbEr`#|WE((DC0hF^Txgj*k$I7-$C(6g~xyN@UHF7e0Fpkn)~UkX2bF&nH}3rPPuz(+VZ?n zwb98=VnAowm_E~M<$$dIyC*d=)o+yJJF%tcy}U3%(v!@JCVn_?e%brx!ZC|g zw+{7Z_p~<&Ti0nT=8XkJjrb&r*Q{OOw~pTHV~IlC+GSqBkcaE5Xm*QtHvIH%`l?9x z<}6!A->-ii`g~l(IeEW3!V+;uYn)a!UxJHg{Ic-vI`F$J{{8KzbT^KrDC*^@40^*r z7JI2({_q~1VVf0c+VH1DV{VeM%h*GW`)~0qNt)B`+}F7I7%qVi9BCN}9fAtQv<1#)KJ-wweFR)h|ziNc%uJBUN5nc07 zg|@eiT)$_58Ytks^556y=g>221NN80hk$sQGJk&bq#pS{z3KK#!u{=cUW2bm?Y*)K zDNHY{lNPs7ix!?-Gyd$6tZvsny%ssR;eye9E}xNf@1@;(LNldDAy!aw7Qk?0?C12> z5ZCwe=f*wU&GnyyD(LvC_nK2nQ;+rcp0}QR(E(cwQbiay44V<{xv4cxTP}UQcJSe* zX92o-;NR{)|Kw(aoK*ACjRPL<>AipQ!h|KT=dnB*!KVEfOlbckXOwjeiu(u6VRk^#|v-ZKCGvp3taKjkeq0 zjP1C8)Zwj1f8En;#?tvijxqKgIy7C>ba0aO^y>S42r$1EEzw8SWK>`W=5O-^XPrIt z-6&t(^>v%}2&ngdIwc|d=Hj_)?>(DTEpq+oA5MILZb`dGd5K;2{REmfPC0V#uxQPf zJvJYD_`{y_AYgms?`;WzyZ+109vRxKyY{YY*xOg0!h#o#SaVW>Q;)3k-a_|1ICFGn zwbjNmkFM^XQ+;UNa^~JC%NmWSQ~aV}AIhZhmKcH4o9YEcEY{nTV_v)@Hm?qzG^Bkq^) zfPD~2LO#hIc{lX@Ui)pS57=A%&VfIU&(9gK*qAe&d4Kil8aph<+nn9zUz3Y8SsQ)Y zcNh2UozXwo`qUV|uSdV-38($1mhheq-dw5n?9Yb+01?lxm0#s%*I2T7^BGN_{M)Aa z-?0w&IDVA5=5Yx5mSr)6b8JS=DF8 zo5JNMSB$)L;gj=AYtZ_j*^&X5GkWJ_Ae9fU+1O=wc67>mPE}rzl6I@v zsWmfB+D`2qT(#c*-j~xhU6*}*=j4h+a5Zmi?EYYK{tK&Gk1RSF7x0u z8S@6CX+Nr8u1x8?|4wt(>kD-p8!{j6X?Q5J_W9m$fFZ5p#?oE_=;QHMf=7Q4Ailjd z&knU$8<;k8Ud5wZ?Fq20u^9IEB(@D8Tc%{*9{J|8wYf-}ZW9~w@A~_B5)yahKQkUk zsIjj?lWyXJyvX+cpFY7e6Kxn>IQq} zjmAGenH$mV%kn($d+3DEg`8TcZK?8jjkk|2S?9QmL$p}@1AAU78RhGj3+Ej6a&OIT z$@O3EoVC6a^Rtfa%H?V#-o{a%shii$v41aGl(FFTr23|n1@`I9qmCT#pp$C@bmA+H z9rywH)~w(wxY8x_B@bV%X_4NkUk7?)E7EA>tFla+vAf+Uyl>qHsz``ulexGSt)hst5a9BGcM0Oe}Dhx%Ci@GU*BA{Sa-kM zAWQj5Deb_mt2zGQ2gc8cb>+s?XcjZwdt^-Qrf0I!&mM{FE%BZ5Zn$%D!VTq}Q>!|H zLHVt1T$Kga_8;C=tMdG~9@EeMB#t-rzMD{)Gh|{)3*W>IoA>N#IsAG3@9&fb9<7Dl zZD7a)<5txYOGh+6m|DFYW1+XEaMz-knsI}pB%Jqpt>_mY_Kus(Yc#mUd?lSQ%o((j68Uva5)ImFAC-r0NHRf>ga8)rD2eyc<^H&-mz zze=m@{6n8>N6o3wGvlyq9axJ$|0)!O+CMLhI?_JoiVp$~rE%2U40DffRO{TxxbMsD z`#Ce?;_ADgJkc~^Osq7PcWcYV)ph3Gu#Y~RdRMotPEDBli1;7JeKhrWh<{hl%RLek z)uE>Nlrg45!$4Zih0(vQ&0p8MzO7pZOhDiM4LyM#FMUlunm}cG0`)7L8$LW?gu2@N zY2UVvX*|EvvP^EIZ+Uv;(`Fw%eh3~P)HI^{q~Wzks5O_lQ!3S{{@{4{*Apz7q(s|?$N%`3vI%($C1D{uZ>yyV%uRro|x_eqW0=Up27#j97&eP=%! zD*V#U^7QGkn#;;X_KwmF%-(el_BRgCeU&w9b+_ydM3>&9zwY({HxyscaMj3*XX<>oiud+u^J!6FBy>(+^YWNt#)OFcmB$ZHZqj{Y_jBJ(__Kb)i&Baf zcy8=pmw(>XIOR;`1+Q;j=nUINQ~&(XV1H}Yp>3&>w zbNGxk+;7*!*MLKEE;v>ArtXhJqiX*A$)nlXuVCwKZJlpI6@8r=?OR(jF0K`J+8@)b zLqM>NwY_Jx@Xkvw(u7a{f6aY)IMi+XH?k&0l8`7#vXq3(5ZM#T64?tGjIGAl2^B4N zvW+qJrR-y0qR754GmLDB!C10}Qtvg?^W69I-0$!G{rURCaX4nK<$GS|`Z+(>SIcu2 zRZwRAwGjOMsGl#?E7Fr)hOQ>r^A>~D*M1Bulu?!c9vj%TXk4;dFfML=k_l~G@^$&d zz<)CR$R;+S1~4WTb}qgN6W%*8=-X%(2(Tq4IQCfJns|`xf3NEQFXN(Q>zNpiTlq0c z@GI-VSZ|kg1j==0=>JXkf1d&mneWz^F+acxa-yvH%Uo5BfkYCtS~}$5L8Xoi>AS3i zkh9aKsAzc#}br#$<~^Wg!zG#0-2<7L?oU3_rI2aVPAO-~&?KA2skJ3+1E5g&pJ z;pA$!->Q0t?PtM*zFcB`XDedA*SIFL5B>%4fhX6gU!yQ;nBhQKw|G^L zMLmPE$Bf7@rAUM?4Hssu+YPmYf3CaiSf;4x7~puzHmBoEc-s-SfqLn15)?lBsoHIB zO^-*T!jYRO`nP%amyr*qkzq(iKkbUxfd%$*lU$&P0F>p`}z0edOb}^z`R94U;s4>Yu>MMK?TMtdO>;gpFV`wkW7YsaCR=Ju(9cv78TBIhVE}D_3sh9ex|3H8%5Ad^J;E{sQ(^}8I}I}`t7sq%=DBZH<1Josaa{;<$=+N0&*N;9Men3>V3ZF&VSi2SQV&z8 z;#9|Q*CMJsGO(1?m_l>%=%0`VxWR&zm8s^FZSR8*O<_8hTSZtfV;LfbM>p#^I5<@3 zeGIg;yg8e+fBTGjb`Vm{@8;+|u@>RHj3QknVFV*+?ppH=!Bn-iBgCL~t)D+OX$Y#@ zQ?IM&-JJ0t-T-`!;6K|>W$Phr7oJvBH*J@&85^s_E_8N8%bLJaGmtgrrKx8uF`gbC zk*8Lz{kop}I&RuGBa09G_JP#8;56f=A}{5gv2m5tt7@dhqDP@S+D|wj@UOX#GaJqQ z; z{xM5!#ztX3(W|#__qBj9pfozM>e^w37GZP~6)wHuOY&}ggPLw%(aF#ex5CADq};Sg zf9a3kwJO8nQ^)XG;%KMY-ZYJm5XH71YWZE!sat&a#=LP5$&ni07DA$@_|Dg%qK@aA zK^Oqd0>Tn2eQo}7Ye)35<&_5gCwFS|?}%Ku{LVl~SmVO@6HOH7ZtwW3b+@xp*p|U& z2wwupM+bdjzx?BUM&r$pjB!}WJ+^Q${F`g7!8vBhJc*}{+G)?$?T2(dB^IVznVIFG zmWSAd;Y`*o_P%cVLdLNI0ACfGs#F$ArV?hZ5+Z zvwr3Gb0uiPPxu&3BhC^y`b=N`ynF7eZ{D17|IZ*#7QJsK8)fd%vhnhrw1DnbEPuunjsO6-JY9dR&Atly{E%3U!1Uk zxQkF^AH2dWOF^#EatVK)PjS6Hthgv!ZT;p=DCSzm1KB|IwONfdrl}_74S7`wdl{GP zhbNd)*uM}*q|c80wqtn;8Y&j~psE4cXwf`3*YGGe^u-+*^Z{&8a}~!hrBr9!&hz-h z8O_boB3+sh-iaKFc6;|Wj;OX=scg;|#}iN-9;LUaR}o(;HfNuBI5mH!88O;%O}E^7 zv^qAIbvOqBv%GQmH+HK}NyuRz*)|?QO+l3CPo5vu%9D)o#c}I5aWUiS? zOQ)LuaSUoQ{_?av`YPhVj>XGgbgmb3TzPCtRNPL%T`)99+_~#RHQNXkWUc)uqjyP6 zwWmtbN*MP{V>)am0oD=`d}!EX%%eC>H!C~97s$*?tu^xGr?_)7-KX-%;p4|KoBpa& z?b>ntX3s66OJ}Rthr3J`k1q%dv$X^=rXvHFyAvcu7&11xwP5P1T=FPvW~r&r@r#ny z+9Wsl^OFQ?aTi=6)Wpw`7GGebK(e`Z$GR4WJr;zK6C4QH^P7HkRAP+DfN-P;6Z}4` zyoYs-9J^PBu)r|lz8b>jyh&@SGKx+*4RdoEXAsuWu~nXY*;3J-Q|?*K*!m7s=S#=C zom`LLb*YttgS&a+DIT{YVqpi72_^*!M9rrNv?fLbfOHt8bBgwb3v zGi+~=w7Bna>0|tyK;F=9V?%G+yYS#*HhpsK?etJJD#%DBGOekJo&Ok(7sugfjuTc-I+tLolyesUwl5Z1JGP>zriuPD66D?qI7$tP) zC_2JQQHwFB)8h@IGtW$7=qSKnPe15+uNJZYU=~oE?DaunW`jP0=IeD-qjBvu#KI3 z(lydfw;4OBbkuh1WRA!TSIx|!2R>=In#1t$r909?B{|x!H?NPkl=@zNlL~jc;!qga zQ$=kM(Ll6!Mu(}OLH0;40_a2iE>f1D44WN4*dTBl(j)nYLNAHj;H1R4Y9*uy53=mq zZ3E!l9Ab-3c}v$bQC{;E@41$9y#N_gc#+A)FbC-xjf}yL+9~2+1kX^0>rZub zXn1tJKXj#f(F#h=Zu}crzJA|1<>|m929JRqVJ*2p;%eUU@-x5rG+z8wt+(_2bgWXr zH=j_EjLCJ~Tfz+ySLM7)_A5t!XDWZ7*&!u?y*n@xp?4;sZ)f*ut;5rvc-BuxD6OI2 zQ#f-Wok6T~9p}-fr&WvcnK%}i>}<|+7lh3l;r)WwCsJ&fkmwd|S0Z6WrN8v!fRsCpsdM7;qb`hUwfZ)Fo>anptxS#Y?mZmffq3(s zq!?3kVQ0mp_F>rc!g*76BVb};4_u=S_-@GprIP>57)O$WGD$CP{`i8+3(?$&k~5PV zz!L(k7?Vq#X4cLpzLS=xaQL>cFH1`505VckBbK84@MsUn;$}a+Q+|83)UTn*sD3$& zXoMG9UrWntbw$`Q4WRQ!hA%@$?zR_$?$T=EEpdXSPtqfqy^NDcewp<3^`(2P%|z-~yAC<3dUigv zD*+S&zNOW#0OL2ej< zbvsK=+YFIdt64i3sMVrvN(9u zX1_qjFG(5nh54x4z3v=;8?eq9H!G(bVI~&2Vs_4^&TYj@>kH{lxNlSG>+5!ay3@Mr z6^bcnovxj^8%DZ<6|EhK4>HLxYFNxymqY_Izhqf21 zms`u1V|=lE2~Frn+x(AiVxYmpU5+tBCoVgO*Zd^Fd#|JnT$?%-&kIPTpR1Bc1(moc z#<8`Fwdc*KnI2bc9W|`B*3{d*uq@GR`z+5W@x;T}3xjXe0Wa`m!F8J~rX9U)>t>wz zCVY+w%iVev+E#TeNK~kpShKcJ7%R-4N|LWeb4z%9J{vFdFg0%~ro49)T!9$%88yec zcM3i}e-scGms-=E)J1B%+nk9Y6j-=kJI3wDdmh>O>#3APlSaII}Q-I^Kq z?+L6qWqMWR#a`TBz9p_^Y{_PM^DO1HeS0wo58WrHRm*KQxl;E~_pscGvtmm2cz>{o zQQsr)`5lTyVrS0Aq>?VUb;&bEG`P`((nWI*3P4AA5yie)9td>`?rr-i&4OadBG1mE z@0|4^98%V<-LIWTR=m2j+3NCFa73nALU$Ey35K7eU}gS+X<)+=S0{CkYWJ0~^$WiQ zLdOwXvdwewVgvt+PM)tXcB9OuzhCu9lhtwX2efg9P!GV;-sz23d(fY$`RKjVW3D*< zs{u9XPx{%Rq)lI8v55IaTf&69t^Thq9TG%<)Z7@b{*Y(4rD^rSk$Ll z+KO7x#gf9C&e7ihg)ULF`(t+)v1xu%X+9!XDyvr}y=AV`)`Q5(V=VM5D+HhT^_p45 zSrYOk(Ei7nUspCInhW4H$X!_7_&u!|xVJEsjc+EIdpCY>bnF$W5=Z}J-*Z%g}F%Q&~fJ5WxvpO(+e-iPLkCl2)~X)jWgVfbO%X=qD5iJpD~aEAgTOx&>3NOtI+VIci<0(^=m;!qWTf>;UM^+H=mVWN?rBOHaG#Tc z>IQGU#Ml^b6N$4RkI%16O2vMk@Fss50NVl$=g&Rl>FBBSS<`Q_haIFc+nYBErR$}& z|2^iDl=&;0O#$#4S%EUpGTig*Za`Q|KZZs?X8QB>y!W8 zXs9|ET^dKaip^Dt4qup2_XFd+KP3_n7D9V5eS+ROq+IH_$<(5B5!>%Fvw{`y^N7u3 zZ1l`m5HG0>$z#$QI&=PPjy{wE@9t&!USceX)p%cgetuAJ2yVU$J{o?>@w%s3Xey*j zrR@G!3&mdcLQ!J#d+qZFbJ4K5;Am-@$l^3GluO@H>(932ovACDMz|P(oDzrrT!sDw zIv>?*H@9l}3VLAf6ckKsq6nrObO;dAN|`#wvZtOm{@_3pu-Xn zhy;jL53IHbbGC{>Z69i6q~jt^kIxXjd~#6*?P>;WvcI*Cn8Y zb~2{nD9mxtP+QYTbKFyA>K|;*-0~MenxVlMzq_!UtPKSWRlW&)ryx)FhP8JtHtiio z;^yYiR-Cw0*4U6P`Cdo(ES0b6)Zj-GDMS2YoK(WDa4V-giK}BrWi6>gW7~Jr-uS7> zl!I6i%f90J9|LR96&qY3>qp^fFgZwS2hf(y>M>8EB%y#xD3?e_~< z=1(pJHAuX({mdy#T)%y>gtM2E{evWIQ>i^VSSrg-tk}!Vu+r+q`wz{CG+F4-5%PMP z{#;dVu>iKZns6U((6*z39mj85)ikLhe9CEi;^X626T9n-hh^D^4uh|gwPFFN_{g5I zswq&)9k4;fg!;-Dz^-E~EVrNAyog$v(G%&QV}``nHj&qPwZD!irMMq1Xk<=tsYVnx zT;c0W5FE~50mWzxIe%`L{IZijLTccV_^~`tiIrJc$#pI0J~F@WPAUBR!1E=t0QnbF zftntjD`&$l6mvvSy$q!*QFbj+?a2Wq=7nS8%q=Y~;WXE%54#fTCHD&}_P9uJ{L=;$ zd3X;~Mx#0ss&mIyV0Q_5BNJY;G5KNs3wdP}Mil7Aj&Rzw-?{-{zs>PDK9EMs)BO11 zp6@EH50=YB>8|O$n3+`4M>uL7*ilr)lHKj%>{RpqGl1TO2I$(vvm5jI$sc7n#0Aj2#=%kz1Wa)0hfUZ?QRM0J#4K2AId%QrQd?K^Ln@>>=B$f?|sS7 zQO)ytyNM7hwHw**1O-$jc^In~H}T%O=H*1nr>=v)58Z!)+zo{Z+khTd<6Zd%7*k5= zRrCwX@*JGR8KiZDbal(pPuDUmZ4acq{jEh;s2!m6rHdF^e0sXGE3XWmPAgWWs7tB8 z^fdDL6&kW4@giv~9-{HX4Kqlc42h@jvJu3~crQ|ib=G|>2faZ_W6&wZx{_Im>KY42 zm~X+Xu$ZDvoF zdXdScSACd6N6#5LY4D9k6LN(5R39xakOn1jT=x+A(I^h>l*Qt)bQP?1mc#;n1B2wY z*@K7V=MUa3SnD-0SZJFoeP?Etlun%CtRCoU32zs63YZrrt_GN`?YzOn^jQSfxQ01_ zEe5pAaW&z};wLMR9O2H3J(6%QzS61)~|+$F7+Vf%twe z_&^>|p{opypQkEubVu!^7CW9wI(IU4c7dX;EK8h@Zrca5_^ixOrM`8c z_f2OSw7#!b{oGv`)|Qp;-Ko~Kw$7B1@+w0s7BlVpRC?;$;GF%QC`17*Dx<;~f|d`) z)%dMc#*UcIZoabOtVr`u6YaRSQjxvBXYoem2H3O?{_7p_ga|6zwR2ZpT0@EmIhcJz<07(0P)$&XTj&LM zoUbt~3gK{TK-}MT|0uu8k@G!T;7&dKdnC@Jp>r(hF1w&xoWIA3KZm-`TV<)Mj?5ll zl=v}tX@o>~#;%rANpHBye_BrqGlD#`@MH{u3CW$sZDjtYfoLX57G_Azz?z21O zH=gJT-$OIx8N+Sfh^K65-d6uX(=q<4gJTM^wmn&7$=^R&Y_hUUCRXf41OMCP2WJ5G zJQ3%&ab3Arly35vu2ZoK!wb*mYpJLOp8h)qyL}Q#quxKHU8GrYfi9jid+2m{0+6;G zDpmlCK-{G0;ODD}t3@Te>D?gwK&w8cQ!ft=!ZjgfA-bFU*(Yx{2m#l*ImlON#n^jL zI$)RAOJeTkvDz+Xdx&T9;59QXfJ%<|8seXQIX9Sh?mPKxas-p{p0zWiQn`}2_8W2I zy1FgnW?9PaaYbF8OCZvGdL1?8bRhc=gTjLRA{brA!=P#Of)@yayMPzMl4vp9q;>?+ z$ED|}V<~;~B)Fi!tab{pvXKrpOsTO-^h!}#?xBfu;(S}IF9MA z?y%Zzn|z)(1AFxk5W>EC1Df(vPPPN@%uMs{`<4N zL16S>zWyKc{69zk``u7BzkS<(?2r5>vwpI6no6$`3nWF^ z2WD&VX0abWEbHoqnEgYuabKo-=fh+4jUC@@#2hTgI@WXkPqWI`gEY3pRB#_{{UVF-0d9jioiM3au06#aBwUqJ| H?gjiG%@K1E literal 0 HcmV?d00001 diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/base_class.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/base_class.hpp index 1061e07e516a2..43a929591dad1 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/base_class.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/base_class.hpp @@ -104,6 +104,8 @@ class LaneChangeBase virtual LaneChangePath getLaneChangePath() const = 0; + virtual BehaviorModuleOutput getTerminalLaneChangePath() const = 0; + virtual bool isEgoOnPreparePhase() const = 0; virtual bool isRequiredStop(const bool is_trailing_object) = 0; @@ -130,7 +132,7 @@ class LaneChangeBase virtual void insert_stop_point( [[maybe_unused]] const lanelet::ConstLanelets & lanelets, - [[maybe_unused]] PathWithLaneId & path) + [[maybe_unused]] PathWithLaneId & path, [[maybe_unused]] const bool is_waiting_approval = false) { } @@ -285,8 +287,7 @@ class LaneChangeBase FilteredLanesObjects filtered_objects_{}; BehaviorModuleOutput prev_module_output_{}; PoseWithDetailOpt lane_change_stop_pose_{std::nullopt}; - - PathWithLaneId prev_approved_path_; + mutable std::optional terminal_lane_change_path_{std::nullopt}; int unsafe_hysteresis_count_{0}; bool is_abort_path_approved_{false}; diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/interface.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/interface.hpp index 9d6fbd65acfd8..a69ae0d92647a 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/interface.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/interface.hpp @@ -129,8 +129,6 @@ class LaneChangeInterface : public SceneModuleInterface mutable MarkerArray virtual_wall_marker_; - std::unique_ptr prev_approved_path_; - void clearAbortApproval() { is_abort_path_approved_ = false; } bool is_abort_path_approved_{false}; diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/scene.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/scene.hpp index 5f1da79bc7ea0..fe1d18ea6ea0c 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/scene.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/scene.hpp @@ -65,13 +65,18 @@ class NormalLaneChange : public LaneChangeBase LaneChangePath getLaneChangePath() const override; + BehaviorModuleOutput getTerminalLaneChangePath() const override; + BehaviorModuleOutput generateOutput() override; void extendOutputDrivableArea(BehaviorModuleOutput & output) const override; - void insert_stop_point(const lanelet::ConstLanelets & lanelets, PathWithLaneId & path) override; + void insert_stop_point( + const lanelet::ConstLanelets & lanelets, PathWithLaneId & path, + const bool is_waiting_approval = false) override; - void insert_stop_point_on_current_lanes(PathWithLaneId & path); + void insert_stop_point_on_current_lanes( + PathWithLaneId & path, const bool is_waiting_approval = false); PathWithLaneId getReferencePath() const override; @@ -137,6 +142,8 @@ class NormalLaneChange : public LaneChangeBase bool check_candidate_path_safety( const LaneChangePath & candidate_path, const lane_change::TargetObjects & target_objects) const; + std::optional compute_terminal_lane_change_path() const; + bool isValidPath(const PathWithLaneId & path) const override; PathSafetyStatus isLaneChangePathSafe( diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/data.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/data.hpp index 5f36be806bba4..d5bbfe25fe1e9 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/data.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/data.hpp @@ -128,6 +128,22 @@ struct Info terminal_lane_changing_velocity = _lc_metrics.velocity; shift_line = _shift_line; } + + void set_prepare(const PhaseMetrics & _prep_metrics) + { + longitudinal_acceleration.prepare = _prep_metrics.actual_lon_accel; + velocity.prepare = _prep_metrics.velocity; + duration.prepare = _prep_metrics.duration; + length.prepare = _prep_metrics.length; + } + + void set_lane_changing(const PhaseMetrics & _lc_metrics) + { + longitudinal_acceleration.lane_changing = _lc_metrics.actual_lon_accel; + velocity.lane_changing = _lc_metrics.velocity; + duration.lane_changing = _lc_metrics.duration; + length.lane_changing = _lc_metrics.length; + } }; struct TargetLaneLeadingObjects @@ -219,6 +235,8 @@ struct TransientData double target_lane_length{std::numeric_limits::min()}; + double dist_to_target_end{std::numeric_limits::max()}; + lanelet::ArcCoordinates current_lanes_ego_arc; // arc coordinates of ego pose along current lanes lanelet::ArcCoordinates target_lanes_ego_arc; // arc coordinates of ego pose along target lanes diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/parameters.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/parameters.hpp index 94020e8a08279..b25dbc99189e8 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/parameters.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/parameters.hpp @@ -137,12 +137,20 @@ struct DelayParameters double th_parked_vehicle_shift_ratio{0.6}; }; +struct TerminalPathParameters +{ + bool enable{false}; + bool disable_near_goal{false}; + bool stop_at_boundary{false}; +}; + struct Parameters { TrajectoryParameters trajectory{}; SafetyParameters safety{}; CancelParameters cancel{}; DelayParameters delay{}; + TerminalPathParameters terminal_path{}; // lane change parameters double backward_lane_length{200.0}; diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/calculation.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/calculation.hpp index eced227a5be32..29a9f258545a2 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/calculation.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/calculation.hpp @@ -67,6 +67,9 @@ double calc_dist_to_last_fit_width( const lanelet::ConstLanelets & lanelets, const Pose & src_pose, const BehaviorPathPlannerParameters & bpp_param, const double margin = 0.1); +double calc_dist_to_last_fit_width( + const CommonDataPtr & common_data_ptr, const PathWithLaneId & path, const double margin = 0.1); + /** * @brief Calculates the maximum preparation longitudinal distance for lane change. * diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/path.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/path.hpp index dcc327b4793e1..77ba8fe68a653 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/path.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/path.hpp @@ -48,7 +48,7 @@ using behavior_path_planner::lane_change::CommonDataPtr; */ bool get_prepare_segment( const CommonDataPtr & common_data_ptr, const PathWithLaneId & prev_module_path, - const LaneChangePhaseMetrics prep_metric, PathWithLaneId & prepare_segment); + const double prep_length, PathWithLaneId & prepare_segment); /** * @brief Generates the candidate path for a lane change maneuver. diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp index f80aad721a07c..9f3c6c9ef48bf 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp @@ -43,8 +43,7 @@ LaneChangeInterface::LaneChangeInterface( std::unique_ptr && module_type) : SceneModuleInterface{name, node, rtc_interface_ptr_map, objects_of_interest_marker_interface_ptr_map}, // NOLINT parameters_{std::move(parameters)}, - module_type_{std::move(module_type)}, - prev_approved_path_{std::make_unique()} + module_type_{std::move(module_type)} { module_type_->setTimeKeeper(getTimeKeeper()); logger_ = utils::lane_change::getLogger(module_type_->getModuleTypeStr()); @@ -109,7 +108,6 @@ BehaviorModuleOutput LaneChangeInterface::plan() auto output = module_type_->generateOutput(); path_reference_ = std::make_shared(output.reference_path); - *prev_approved_path_ = getPreviousModuleOutput().path; stop_pose_ = module_type_->getStopPose(); @@ -155,11 +153,9 @@ BehaviorModuleOutput LaneChangeInterface::plan() BehaviorModuleOutput LaneChangeInterface::planWaitingApproval() { - BehaviorModuleOutput out = getPreviousModuleOutput(); + BehaviorModuleOutput out = module_type_->getTerminalLaneChangePath(); - *prev_approved_path_ = out.path; - - module_type_->insert_stop_point(module_type_->get_current_lanes(), out.path); + module_type_->insert_stop_point(module_type_->get_current_lanes(), out.path, true); out.turn_signal_info = module_type_->get_current_turn_signal_info(); const auto & lane_change_debug = module_type_->getDebugData(); diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/manager.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/manager.cpp index 9f7a811770b5d..ec000b8fee97c 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/manager.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/manager.cpp @@ -242,6 +242,13 @@ LCParamPtr LaneChangeModuleManager::set_params(rclcpp::Node * node, const std::s // debug marker p.publish_debug_marker = getOrDeclareParameter(*node, parameter("publish_debug_marker")); + // terminal lane change path + p.terminal_path.enable = getOrDeclareParameter(*node, parameter("terminal_path.enable")); + p.terminal_path.disable_near_goal = + getOrDeclareParameter(*node, parameter("terminal_path.disable_near_goal")); + p.terminal_path.stop_at_boundary = + getOrDeclareParameter(*node, parameter("terminal_path.stop_at_boundary")); + // validation of safety check parameters // if loose check is not enabled, lane change module will keep on chattering and canceling, and // false positive situation might occur diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp index fb4f7aeca1525..2719239baaed8 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -169,6 +170,9 @@ void NormalLaneChange::update_transient_data(const bool is_approved) transient_data.dist_to_terminal_start = transient_data.dist_to_terminal_end - transient_data.current_dist_buffer.min; + transient_data.dist_to_target_end = calculation::calc_dist_from_pose_to_terminal_end( + common_data_ptr_, common_data_ptr_->lanes_ptr->target, common_data_ptr_->get_ego_pose()); + transient_data.max_prepare_length = calculation::calc_maximum_prepare_length(common_data_ptr_); transient_data.target_lane_length = @@ -246,6 +250,10 @@ std::pair NormalLaneChange::getSafePath(LaneChangePath & safe_path) bool found_safe_path = get_lane_change_paths(valid_paths); // if no safe path is found and ego is stuck, try to find a path with a small margin + if (valid_paths.empty() && terminal_lane_change_path_) { + valid_paths.push_back(terminal_lane_change_path_.value()); + } + lane_change_debug_.valid_paths = valid_paths; if (valid_paths.empty()) { @@ -380,6 +388,45 @@ LaneChangePath NormalLaneChange::getLaneChangePath() const return status_.lane_change_path; } +BehaviorModuleOutput NormalLaneChange::getTerminalLaneChangePath() const +{ + if ( + !lane_change_parameters_->terminal_path.enable || + !common_data_ptr_->transient_data.is_ego_near_current_terminal_start) { + return prev_module_output_; + } + + const auto is_near_goal = lane_change_parameters_->terminal_path.disable_near_goal && + common_data_ptr_->lanes_ptr->target_lane_in_goal_section && + common_data_ptr_->transient_data.dist_to_target_end < + common_data_ptr_->transient_data.lane_changing_length.max; + if (is_near_goal) { + return prev_module_output_; + } + + const auto & current_lanes = get_current_lanes(); + if (current_lanes.empty()) { + RCLCPP_DEBUG(logger_, "Current lanes not found. Returning previous module's path as output."); + return prev_module_output_; + } + + const auto terminal_lc_path = compute_terminal_lane_change_path(); + + if (!terminal_lc_path) { + RCLCPP_DEBUG(logger_, "Terminal path not found. Returning previous module's path as output."); + return prev_module_output_; + } + + auto output = prev_module_output_; + + output.path = *terminal_lc_path; + output.turn_signal_info = get_current_turn_signal_info(); + + extendOutputDrivableArea(output); + + return output; +} + BehaviorModuleOutput NormalLaneChange::generateOutput() { universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); @@ -450,7 +497,7 @@ void NormalLaneChange::extendOutputDrivableArea(BehaviorModuleOutput & output) c } void NormalLaneChange::insert_stop_point( - const lanelet::ConstLanelets & lanelets, PathWithLaneId & path) + const lanelet::ConstLanelets & lanelets, PathWithLaneId & path, const bool is_waiting_approval) { universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); if (lanelets.empty()) { @@ -475,44 +522,42 @@ void NormalLaneChange::insert_stop_point( return; } - insert_stop_point_on_current_lanes(path); + insert_stop_point_on_current_lanes(path, is_waiting_approval); } -void NormalLaneChange::insert_stop_point_on_current_lanes(PathWithLaneId & path) +void NormalLaneChange::insert_stop_point_on_current_lanes( + PathWithLaneId & path, const bool is_waiting_approval) { const auto & path_front_pose = path.points.front().point.pose; - const auto & center_line = common_data_ptr_->current_lanes_path.points; - const auto get_arc_length_along_lanelet = [&](const geometry_msgs::msg::Pose & target) { - return motion_utils::calcSignedArcLength( - center_line, path_front_pose.position, target.position); - }; + const auto & ego_pose = common_data_ptr_->get_ego_pose(); + const auto dist_from_path_front = + motion_utils::calcSignedArcLength(path.points, path_front_pose.position, ego_pose.position); const auto & transient_data = common_data_ptr_->transient_data; const auto & lanes_ptr = common_data_ptr_->lanes_ptr; const auto & lc_param_ptr = common_data_ptr_->lc_param_ptr; - const auto dist_to_terminal = std::invoke([&]() -> double { - const auto target_pose = (lanes_ptr->current_lane_in_goal_section) - ? common_data_ptr_->route_handler_ptr->getGoalPose() - : center_line.back().point.pose; - return get_arc_length_along_lanelet(target_pose); - }); - - const auto & bpp_param_ptr = common_data_ptr_->bpp_param_ptr; - const auto min_dist_buffer = transient_data.current_dist_buffer.min; const auto dist_to_terminal_start = - dist_to_terminal - min_dist_buffer - calculation::calc_stopping_distance(lc_param_ptr); + transient_data.dist_to_terminal_start - calculation::calc_stopping_distance(lc_param_ptr); - const auto distance_to_last_fit_width = std::invoke([&]() -> double { + const auto & bpp_param_ptr = common_data_ptr_->bpp_param_ptr; + const auto dist_to_terminal_stop = std::invoke([&]() -> double { const auto & curr_lanes_poly = common_data_ptr_->lanes_polygon_ptr->current; - if (utils::isEgoWithinOriginalLane(curr_lanes_poly, getEgoPose(), *bpp_param_ptr)) { - return utils::lane_change::calculation::calc_dist_to_last_fit_width( - lanes_ptr->current, path.points.front().point.pose, *bpp_param_ptr); + if (!utils::isEgoWithinOriginalLane(curr_lanes_poly, getEgoPose(), *bpp_param_ptr)) { + return dist_from_path_front + dist_to_terminal_start; } - return std::numeric_limits::max(); - }); - const auto dist_to_terminal_stop = std::min(dist_to_terminal_start, distance_to_last_fit_width); + if ( + terminal_lane_change_path_ && is_waiting_approval && + lc_param_ptr->terminal_path.stop_at_boundary) { + return calculation::calc_dist_to_last_fit_width(common_data_ptr_, path); + } + + const auto dist_to_last_fit_width = calculation::calc_dist_to_last_fit_width( + lanes_ptr->current, path.points.front().point.pose, *bpp_param_ptr); + + return std::min(dist_from_path_front + dist_to_terminal_start, dist_to_last_fit_width); + }); const auto terminal_stop_reason = status_.is_valid_path ? "no safe path" : "no valid path"; if ( @@ -522,11 +567,13 @@ void NormalLaneChange::insert_stop_point_on_current_lanes(PathWithLaneId & path) return; } + const auto & center_line = common_data_ptr_->current_lanes_path.points; const auto dist_to_target_lane_start = std::invoke([&]() -> double { const auto & front_lane = lanes_ptr->target_neighbor.front(); const auto target_front = utils::to_geom_msg_pose(front_lane.centerline2d().front(), front_lane); - return get_arc_length_along_lanelet(target_front); + return motion_utils::calcSignedArcLength( + center_line, path_front_pose.position, target_front.position); }); const auto arc_length_to_current_obj = utils::lane_change::get_min_dist_to_current_lanes_obj( @@ -1129,7 +1176,7 @@ bool NormalLaneChange::get_lane_change_paths(LaneChangePaths & candidate_paths) PathWithLaneId prepare_segment; try { if (!utils::lane_change::get_prepare_segment( - common_data_ptr_, prev_module_output_.path, prep_metric, prepare_segment)) { + common_data_ptr_, prev_module_output_.path, prep_metric.length, prepare_segment)) { debug_print("Reject: failed to get valid prepare segment!"); continue; } @@ -1247,6 +1294,91 @@ bool NormalLaneChange::check_candidate_path_safety( return safety_check_with_normal_rss.is_safe; } +std::optional NormalLaneChange::compute_terminal_lane_change_path() const +{ + const auto & transient_data = common_data_ptr_->transient_data; + const auto dist_to_terminal_start = transient_data.dist_to_terminal_start; + const auto min_lc_velocity = lane_change_parameters_->trajectory.min_lane_changing_velocity; + const auto current_velocity = getEgoVelocity(); + + PathWithLaneId prepare_segment; + try { + if (!utils::lane_change::get_prepare_segment( + common_data_ptr_, prev_module_output_.path, dist_to_terminal_start, prepare_segment)) { + RCLCPP_DEBUG(logger_, "failed to get valid prepare segment for terminal LC path"); + return std::nullopt; + } + } catch (const std::exception & e) { + RCLCPP_DEBUG(logger_, "failed to get terminal LC path: %s", e.what()); + return std::nullopt; + } + + // t = 2 * d / (v1 + v2) + const auto duration_to_lc_start = + 2.0 * dist_to_terminal_start / (current_velocity + min_lc_velocity); + const auto lon_accel = std::invoke([&]() -> double { + if (duration_to_lc_start < calculation::eps) { + return 0.0; + } + return std::clamp( + (min_lc_velocity - current_velocity) / duration_to_lc_start, + lane_change_parameters_->trajectory.min_longitudinal_acc, + lane_change_parameters_->trajectory.max_longitudinal_acc); + }); + const auto vel_on_prep = current_velocity + lon_accel * duration_to_lc_start; + const LaneChangePhaseMetrics prep_metric( + duration_to_lc_start, dist_to_terminal_start, vel_on_prep, lon_accel, lon_accel, 0.0); + + if (terminal_lane_change_path_) { + terminal_lane_change_path_->info.set_prepare(prep_metric); + if (prepare_segment.points.empty()) { + terminal_lane_change_path_->path = terminal_lane_change_path_->shifted_path.path; + return terminal_lane_change_path_->path; + } + prepare_segment.points.pop_back(); + terminal_lane_change_path_->path = + utils::combinePath(prepare_segment, terminal_lane_change_path_->shifted_path.path); + return terminal_lane_change_path_->path; + } + + const auto & lane_changing_start_pose = prepare_segment.points.back().point.pose; + const auto & target_lanes = common_data_ptr_->lanes_ptr->target; + const auto shift_length = + lanelet::utils::getLateralDistanceToClosestLanelet(target_lanes, lane_changing_start_pose); + + const auto dist_lc_start_to_end_of_lanes = calculation::calc_dist_from_pose_to_terminal_end( + common_data_ptr_, common_data_ptr_->lanes_ptr->target_neighbor, + prepare_segment.points.back().point.pose); + + const auto max_lane_changing_length = std::invoke([&]() { + double max_length = transient_data.dist_to_terminal_end - prep_metric.length; + return std::min( + max_length, dist_lc_start_to_end_of_lanes - transient_data.next_dist_buffer.min); + }); + + const auto max_path_velocity = prepare_segment.points.back().point.longitudinal_velocity_mps; + constexpr double lane_changing_lon_accel{0.0}; + const auto lane_changing_metrics = calculation::calc_shift_phase_metrics( + common_data_ptr_, shift_length, prep_metric.velocity, max_path_velocity, + lane_changing_lon_accel, max_lane_changing_length); + + const auto sorted_lane_ids = utils::lane_change::get_sorted_lane_ids(common_data_ptr_); + + LaneChangePath candidate_path; + for (const auto & lc_metric : lane_changing_metrics) { + try { + candidate_path = utils::lane_change::get_candidate_path( + common_data_ptr_, prep_metric, lc_metric, prepare_segment, sorted_lane_ids, shift_length); + } catch (const std::exception & e) { + continue; + } + terminal_lane_change_path_ = candidate_path; + return candidate_path.path; + } + + return std::nullopt; +} + PathSafetyStatus NormalLaneChange::isApprovedPathSafe() const { const auto & path = status_.lane_change_path; diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/calculation.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/calculation.cpp index 550c0fa290a99..a0130fcd27041 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/calculation.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/calculation.cpp @@ -58,22 +58,10 @@ double calc_stopping_distance(const LCParamPtr & lc_param_ptr) } double calc_dist_to_last_fit_width( - const lanelet::ConstLanelets & lanelets, const Pose & src_pose, + const lanelet::ConstLanelets & lanelets, const lanelet::BasicPolygon2d & lanelet_polygon, + const universe_utils::LineString2d & line_string, const Pose & src_pose, const BehaviorPathPlannerParameters & bpp_param, const double margin) { - if (lanelets.empty()) return 0.0; - - const auto lane_polygon = lanelets.back().polygon2d().basicPolygon(); - const auto center_line = lanelet::utils::generateFineCenterline(lanelets.back(), 1.0); - - if (center_line.size() <= 1) return 0.0; - - universe_utils::LineString2d line_string; - line_string.reserve(center_line.size() - 1); - std::for_each(center_line.begin() + 1, center_line.end(), [&line_string](const auto & point) { - boost::geometry::append(line_string, universe_utils::Point2d(point.x(), point.y())); - }); - const double buffer_distance = 0.5 * bpp_param.vehicle_width + margin; universe_utils::MultiPolygon2d center_line_polygon; namespace strategy = boost::geometry::strategy::buffer; @@ -85,7 +73,7 @@ double calc_dist_to_last_fit_width( if (center_line_polygon.empty()) return 0.0; std::vector intersection_points; - boost::geometry::intersection(lane_polygon, center_line_polygon, intersection_points); + boost::geometry::intersection(lanelet_polygon, center_line_polygon, intersection_points); if (intersection_points.empty()) { return utils::getDistanceToEndOfLane(src_pose, lanelets); @@ -102,6 +90,46 @@ double calc_dist_to_last_fit_width( return std::max(distance - (bpp_param.base_link2front + margin), 0.0); } +double calc_dist_to_last_fit_width( + const CommonDataPtr & common_data_ptr, const PathWithLaneId & path, const double margin) +{ + const auto & current_lanes = common_data_ptr->lanes_ptr->current; + const auto & current_lanes_polygon = common_data_ptr->lanes_polygon_ptr->current; + const auto & bpp_param = *common_data_ptr->bpp_param_ptr; + + universe_utils::LineString2d line_string; + line_string.reserve(path.points.size() - 1); + std::for_each(path.points.begin() + 1, path.points.end(), [&line_string](const auto & point) { + const auto & position = point.point.pose.position; + boost::geometry::append(line_string, universe_utils::Point2d(position.x, position.y)); + }); + + const auto & src_pose = path.points.front().point.pose; + return calc_dist_to_last_fit_width( + current_lanes, current_lanes_polygon, line_string, src_pose, bpp_param, margin); +} + +double calc_dist_to_last_fit_width( + const lanelet::ConstLanelets & lanelets, const Pose & src_pose, + const BehaviorPathPlannerParameters & bpp_param, const double margin) +{ + if (lanelets.empty()) return 0.0; + + const auto lane_polygon = lanelets.back().polygon2d().basicPolygon(); + const auto center_line = lanelet::utils::generateFineCenterline(lanelets.back(), 1.0); + + if (center_line.size() <= 1) return 0.0; + + universe_utils::LineString2d line_string; + line_string.reserve(center_line.size() - 1); + std::for_each(center_line.begin() + 1, center_line.end(), [&line_string](const auto & point) { + boost::geometry::append(line_string, universe_utils::Point2d(point.x(), point.y())); + }); + + return calc_dist_to_last_fit_width( + lanelets, lane_polygon, line_string, src_pose, bpp_param, margin); +} + double calc_maximum_prepare_length(const CommonDataPtr & common_data_ptr) { const auto max_prepare_duration = common_data_ptr->lc_param_ptr->trajectory.max_prepare_duration; diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/path.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/path.cpp index d7303d7d1df2d..44ee1624f0f51 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/path.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/path.cpp @@ -154,7 +154,7 @@ using behavior_path_planner::lane_change::CommonDataPtr; bool get_prepare_segment( const CommonDataPtr & common_data_ptr, const PathWithLaneId & prev_module_path, - const LaneChangePhaseMetrics prep_metric, PathWithLaneId & prepare_segment) + const double prep_length, PathWithLaneId & prepare_segment) { const auto & current_lanes = common_data_ptr->lanes_ptr->current; const auto & target_lanes = common_data_ptr->lanes_ptr->target; @@ -168,7 +168,7 @@ bool get_prepare_segment( const size_t current_seg_idx = autoware::motion_utils::findFirstNearestSegmentIndexWithSoftConstraints( prepare_segment.points, common_data_ptr->get_ego_pose(), 3.0, 1.0); - utils::clipPathLength(prepare_segment, current_seg_idx, prep_metric.length, backward_path_length); + utils::clipPathLength(prepare_segment, current_seg_idx, prep_length, backward_path_length); if (prepare_segment.points.empty()) return false; From 203587335202d0c39260b40fae458300929d7a2b Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 27 Dec 2024 19:24:46 +0900 Subject: [PATCH 30/77] fix(autoware_scenario_selector): fix bugprone-branch-clone (#9699) fix: bugprone-error Signed-off-by: kobayu858 --- planning/autoware_scenario_selector/src/node.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/planning/autoware_scenario_selector/src/node.cpp b/planning/autoware_scenario_selector/src/node.cpp index 4bb64e27368d8..defbde4f6aabc 100644 --- a/planning/autoware_scenario_selector/src/node.cpp +++ b/planning/autoware_scenario_selector/src/node.cpp @@ -156,9 +156,8 @@ std::string ScenarioSelectorNode::selectScenarioByPosition() return tier4_planning_msgs::msg::Scenario::LANEDRIVING; } else if (is_in_parking_lot) { return tier4_planning_msgs::msg::Scenario::PARKING; - } else { - return tier4_planning_msgs::msg::Scenario::LANEDRIVING; } + return tier4_planning_msgs::msg::Scenario::LANEDRIVING; } if (current_scenario_ == tier4_planning_msgs::msg::Scenario::LANEDRIVING) { From 869cf4c435704f704e3d9ebc898d91ba697d2653 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 27 Dec 2024 19:25:33 +0900 Subject: [PATCH 31/77] fix(autoware_behavior_velocity_intersection_module): fix bugprone-branch-clone (#9702) fix: bugprone-error Signed-off-by: kobayu858 --- .../src/scene_intersection.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp index e33416860c319..93a13a4d62737 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp @@ -354,9 +354,7 @@ DecisionResult IntersectionModule::modifyPathVelocityDetail(PathWithLaneId * pat (std::fabs(dist_stopline) < planner_param_.common.stopline_overshoot_margin); const bool over_stopline = (dist_stopline < 0.0); const bool is_stopped_duration = planner_data_->isVehicleStopped(duration); - if (over_stopline) { - state_machine.setState(StateMachine::State::GO); - } else if (is_stopped_duration && approached_dist_stopline) { + if (over_stopline || (is_stopped_duration && approached_dist_stopline)) { state_machine.setState(StateMachine::State::GO); } return state_machine.getState() == StateMachine::State::GO; @@ -367,12 +365,7 @@ DecisionResult IntersectionModule::modifyPathVelocityDetail(PathWithLaneId * pat (std::fabs(dist_stopline) < planner_param_.common.stopline_overshoot_margin); const bool over_stopline = (dist_stopline < -planner_param_.common.stopline_overshoot_margin); const bool is_stopped = planner_data_->isVehicleStopped(duration); - if (over_stopline) { - return true; - } else if (is_stopped && approached_dist_stopline) { - return true; - } - return false; + return over_stopline || (is_stopped && approached_dist_stopline); }; const auto occlusion_wo_tl_pass_judge_line_idx = From c8e00409c03555274c6ff26cc438e75144e1dcfd Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Sat, 28 Dec 2024 03:16:48 +0900 Subject: [PATCH 32/77] feat(pointpainting_fusion): enable cloud display on image (#9813) --- .../src/pointpainting_fusion/node.cpp | 90 ++++++++++--------- 1 file changed, 48 insertions(+), 42 deletions(-) diff --git a/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp b/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp index 2837bac458541..25d9064ddbfc7 100644 --- a/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp +++ b/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp @@ -316,54 +316,56 @@ dc | dc dc dc dc ||zc| // iterate points // Requires 'OMP_NUM_THREADS=N' omp_set_num_threads(omp_num_threads_); -#pragma omp parallel for - for (int i = 0; i < iterations; i++) { - int stride = p_step * i; - unsigned char * data = &painted_pointcloud_msg.data[0]; - unsigned char * output = &painted_pointcloud_msg.data[0]; - // cppcheck-suppress-begin invalidPointerCast - float p_x = *reinterpret_cast(&data[stride + x_offset]); - float p_y = *reinterpret_cast(&data[stride + y_offset]); - float p_z = *reinterpret_cast(&data[stride + z_offset]); - // cppcheck-suppress-end invalidPointerCast - point_lidar << p_x, p_y, p_z; - point_camera = lidar2cam_affine * point_lidar; - p_x = point_camera.x(); - p_y = point_camera.y(); - p_z = point_camera.z(); - - if (camera_projectors_[image_id].isOutsideHorizontalView(p_x, p_z)) { - continue; - } + std::vector> local_vectors(omp_num_threads_); +#pragma omp parallel + { +#pragma omp for + for (int i = 0; i < iterations; i++) { + int stride = p_step * i; + unsigned char * data = &painted_pointcloud_msg.data[0]; + unsigned char * output = &painted_pointcloud_msg.data[0]; + // cppcheck-suppress-begin invalidPointerCast + float p_x = *reinterpret_cast(&data[stride + x_offset]); + float p_y = *reinterpret_cast(&data[stride + y_offset]); + float p_z = *reinterpret_cast(&data[stride + z_offset]); + // cppcheck-suppress-end invalidPointerCast + point_lidar << p_x, p_y, p_z; + point_camera = lidar2cam_affine * point_lidar; + p_x = point_camera.x(); + p_y = point_camera.y(); + p_z = point_camera.z(); + + if (camera_projectors_[image_id].isOutsideHorizontalView(p_x, p_z)) { + continue; + } - // project - Eigen::Vector2d projected_point; - if (camera_projectors_[image_id].calcImageProjectedPoint( - cv::Point3d(p_x, p_y, p_z), projected_point)) { - // iterate 2d bbox - for (const auto & feature_object : objects) { - sensor_msgs::msg::RegionOfInterest roi = feature_object.feature.roi; - // paint current point if it is inside bbox - int label2d = feature_object.object.classification.front().label; - if ( - !isUnknown(label2d) && isInsideBbox(projected_point.x(), projected_point.y(), roi, 1.0)) { - // cppcheck-suppress invalidPointerCast - auto p_class = reinterpret_cast(&output[stride + class_offset]); - for (const auto & cls : isClassTable_) { - // add up the class values if the point belongs to multiple classes - *p_class = cls.second(label2d) ? (class_index_[cls.first] + *p_class) : *p_class; + // project + Eigen::Vector2d projected_point; + if (camera_projectors_[image_id].calcImageProjectedPoint( + cv::Point3d(p_x, p_y, p_z), projected_point)) { + // iterate 2d bbox + for (const auto & feature_object : objects) { + sensor_msgs::msg::RegionOfInterest roi = feature_object.feature.roi; + // paint current point if it is inside bbox + int label2d = feature_object.object.classification.front().label; + if ( + !isUnknown(label2d) && + isInsideBbox(projected_point.x(), projected_point.y(), roi, 1.0)) { + // cppcheck-suppress invalidPointerCast + auto p_class = reinterpret_cast(&output[stride + class_offset]); + for (const auto & cls : isClassTable_) { + // add up the class values if the point belongs to multiple classes + *p_class = cls.second(label2d) ? (class_index_[cls.first] + *p_class) : *p_class; + } } } + if (debugger_) { + int thread_id = omp_get_thread_num(); + local_vectors[thread_id].push_back(projected_point); + } } -#if 0 - // Parallelizing loop don't support push_back - if (debugger_) { - debug_image_points.push_back(projected_point); - } -#endif } } - if (debugger_) { std::unique_ptr inner_st_ptr; if (time_keeper_) @@ -373,6 +375,10 @@ dc | dc dc dc dc ||zc| debug_image_rois.push_back(feature_object.feature.roi); } + for (const auto & local_vec : local_vectors) { + debug_image_points.insert(debug_image_points.end(), local_vec.begin(), local_vec.end()); + } + debugger_->image_rois_ = debug_image_rois; debugger_->obstacle_points_ = debug_image_points; debugger_->publishImage(image_id, input_roi_msg.header.stamp); From 58df2a112243562a49cf807fa8f64b7957a9ba44 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Tue, 31 Dec 2024 20:26:35 +0900 Subject: [PATCH 33/77] fix(goal_planner): fix usage of last_previous_module_output (#9811) --- .../examples/plot_map_case1.cpp | 10 ++-- .../examples/plot_map_case2.cpp | 10 ++-- .../fixed_goal_planner_base.hpp | 8 +-- .../goal_planner_module.hpp | 13 ++-- .../pull_over_planner/bezier_pull_over.hpp | 6 +- .../pull_over_planner/freespace_pull_over.hpp | 2 +- .../pull_over_planner/geometric_pull_over.hpp | 2 +- .../pull_over_planner_base.hpp | 2 +- .../pull_over_planner/shift_pull_over.hpp | 4 +- .../thread_data.hpp | 23 +++---- .../src/goal_planner_module.cpp | 60 ++++++++++--------- .../pull_over_planner/bezier_pull_over.cpp | 18 +++--- .../pull_over_planner/freespace_pull_over.cpp | 2 +- .../pull_over_planner/geometric_pull_over.cpp | 2 +- .../src/pull_over_planner/shift_pull_over.cpp | 10 ++-- .../src/thread_data.cpp | 5 +- 16 files changed, 87 insertions(+), 90 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case1.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case1.cpp index 56e207c160873..46d3b97b71e58 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case1.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case1.cpp @@ -288,7 +288,7 @@ bool hasEnoughDistance( std::vector selectPullOverPaths( const std::vector & pull_over_path_candidates, const GoalCandidates & goal_candidates, const std::shared_ptr planner_data, - const GoalPlannerParameters & parameters, const BehaviorModuleOutput & previous_module_output) + const GoalPlannerParameters & parameters, const BehaviorModuleOutput & upstream_module_output) { using autoware::behavior_path_planner::utils::getExtendedCurrentLanesFromPath; using autoware::motion_utils::calcSignedArcLength; @@ -313,15 +313,15 @@ std::vector selectPullOverPaths( } const double prev_path_front_to_goal_dist = calcSignedArcLength( - previous_module_output.path.points, - previous_module_output.path.points.front().point.pose.position, goal_pose.position); + upstream_module_output.path.points, + upstream_module_output.path.points.front().point.pose.position, goal_pose.position); const auto & long_tail_reference_path = [&]() { if (prev_path_front_to_goal_dist > backward_length) { - return previous_module_output.path; + return upstream_module_output.path; } // get road lanes which is at least backward_length[m] behind the goal const auto road_lanes = getExtendedCurrentLanesFromPath( - previous_module_output.path, planner_data, backward_length, 0.0, false); + upstream_module_output.path, planner_data, backward_length, 0.0, false); const auto goal_pose_length = lanelet::utils::getArcCoordinates(road_lanes, goal_pose).length; return planner_data->route_handler->getCenterLinePath( road_lanes, std::max(0.0, goal_pose_length - backward_length), diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case2.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case2.cpp index 102e5ef53b164..3518b5041be53 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case2.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case2.cpp @@ -287,7 +287,7 @@ bool hasEnoughDistance( std::vector selectPullOverPaths( const std::vector & pull_over_path_candidates, const GoalCandidates & goal_candidates, const std::shared_ptr planner_data, - const GoalPlannerParameters & parameters, const BehaviorModuleOutput & previous_module_output) + const GoalPlannerParameters & parameters, const BehaviorModuleOutput & upstream_module_output) { using autoware::behavior_path_planner::utils::getExtendedCurrentLanesFromPath; using autoware::motion_utils::calcSignedArcLength; @@ -312,15 +312,15 @@ std::vector selectPullOverPaths( } const double prev_path_front_to_goal_dist = calcSignedArcLength( - previous_module_output.path.points, - previous_module_output.path.points.front().point.pose.position, goal_pose.position); + upstream_module_output.path.points, + upstream_module_output.path.points.front().point.pose.position, goal_pose.position); const auto & long_tail_reference_path = [&]() { if (prev_path_front_to_goal_dist > backward_length) { - return previous_module_output.path; + return upstream_module_output.path; } // get road lanes which is at least backward_length[m] behind the goal const auto road_lanes = getExtendedCurrentLanesFromPath( - previous_module_output.path, planner_data, backward_length, 0.0, false); + upstream_module_output.path, planner_data, backward_length, 0.0, false); const auto goal_pose_length = lanelet::utils::getArcCoordinates(road_lanes, goal_pose).length; return planner_data->route_handler->getCenterLinePath( road_lanes, std::max(0.0, goal_pose_length - backward_length), diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/fixed_goal_planner_base.hpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/fixed_goal_planner_base.hpp index f670e3b05fa77..201b7c2d33bf6 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/fixed_goal_planner_base.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/fixed_goal_planner_base.hpp @@ -38,15 +38,15 @@ class FixedGoalPlannerBase virtual BehaviorModuleOutput plan( const std::shared_ptr & planner_data) const = 0; - void setPreviousModuleOutput(const BehaviorModuleOutput & previous_module_output) + void setPreviousModuleOutput(const BehaviorModuleOutput & upstream_module_output) { - previous_module_output_ = previous_module_output; + upstream_module_output_ = upstream_module_output; } - BehaviorModuleOutput getPreviousModuleOutput() const { return previous_module_output_; } + BehaviorModuleOutput getPreviousModuleOutput() const { return upstream_module_output_; } protected: - BehaviorModuleOutput previous_module_output_; + BehaviorModuleOutput upstream_module_output_; }; } // namespace autoware::behavior_path_planner diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/goal_planner_module.hpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/goal_planner_module.hpp index 3a1773324fe24..0765147cbeb80 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/goal_planner_module.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/goal_planner_module.hpp @@ -133,12 +133,12 @@ bool isOnModifiedGoal( const GoalPlannerParameters & parameters); bool hasPreviousModulePathShapeChanged( - const BehaviorModuleOutput & previous_module_output, - const BehaviorModuleOutput & last_previous_module_output); + const BehaviorModuleOutput & upstream_module_output, + const BehaviorModuleOutput & last_upstream_module_output); bool hasDeviatedFromLastPreviousModulePath( - const PlannerData & planner_data, const BehaviorModuleOutput & last_previous_module_output); + const PlannerData & planner_data, const BehaviorModuleOutput & last_upstream_module_output); bool hasDeviatedFromCurrentPreviousModulePath( - const PlannerData & planner_data, const BehaviorModuleOutput & previous_module_output); + const PlannerData & planner_data, const BehaviorModuleOutput & upstream_module_output); bool needPathUpdate( const Pose & current_pose, const double path_update_duration, const rclcpp::Time & now, @@ -189,6 +189,7 @@ class LaneParkingPlanner void onTimer(); private: + const GoalPlannerParameters parameters_; std::mutex & mutex_; const std::optional & request_; LaneParkingResponse & response_; @@ -196,6 +197,10 @@ class LaneParkingPlanner rclcpp::Logger logger_; std::vector> pull_over_planners_; + BehaviorModuleOutput + original_upstream_module_output_; // plan( const GoalCandidate & modified_goal_pose, const size_t id, const std::shared_ptr planner_data, - const BehaviorModuleOutput & previous_module_output) override; + const BehaviorModuleOutput & upstream_module_output) override; std::vector plans( const GoalCandidate & modified_goal_pose, const size_t id, const std::shared_ptr planner_data, - const BehaviorModuleOutput & previous_module_output); + const BehaviorModuleOutput & upstream_module_output); private: const LaneDepartureChecker lane_departure_checker_; @@ -50,7 +50,7 @@ class BezierPullOver : public PullOverPlannerBase std::vector generateBezierPath( const GoalCandidate & goal_candidate, const size_t id, const std::shared_ptr planner_data, - const BehaviorModuleOutput & previous_module_output, const lanelet::ConstLanelets & road_lanes, + const BehaviorModuleOutput & upstream_module_output, const lanelet::ConstLanelets & road_lanes, const lanelet::ConstLanelets & shoulder_lanes, const double lateral_jerk) const; PathWithLaneId generateReferencePath( diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/freespace_pull_over.hpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/freespace_pull_over.hpp index e32488965f69a..37c82ea904a55 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/freespace_pull_over.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/freespace_pull_over.hpp @@ -41,7 +41,7 @@ class FreespacePullOver : public PullOverPlannerBase std::optional plan( const GoalCandidate & modified_goal_pose, const size_t id, const std::shared_ptr planner_data, - const BehaviorModuleOutput & previous_module_output) override; + const BehaviorModuleOutput & upstream_module_output) override; protected: const double velocity_; diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/geometric_pull_over.hpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/geometric_pull_over.hpp index 89181b258fbea..d15c1e796bbe7 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/geometric_pull_over.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/geometric_pull_over.hpp @@ -45,7 +45,7 @@ class GeometricPullOver : public PullOverPlannerBase std::optional plan( const GoalCandidate & modified_goal_pose, const size_t id, const std::shared_ptr planner_data, - const BehaviorModuleOutput & previous_module_output) override; + const BehaviorModuleOutput & upstream_module_output) override; std::vector generatePullOverPaths( const lanelet::ConstLanelets & road_lanes, const lanelet::ConstLanelets & shoulder_lanes, diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/pull_over_planner_base.hpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/pull_over_planner_base.hpp index 5b336a7de6acc..5af69894c0a2e 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/pull_over_planner_base.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/pull_over_planner_base.hpp @@ -130,7 +130,7 @@ class PullOverPlannerBase virtual std::optional plan( const GoalCandidate & modified_goal_pose, const size_t id, const std::shared_ptr planner_data, - const BehaviorModuleOutput & previous_module_output) = 0; + const BehaviorModuleOutput & upstream_module_output) = 0; protected: const autoware::vehicle_info_utils::VehicleInfo vehicle_info_; diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/shift_pull_over.hpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/shift_pull_over.hpp index 08e0b8508c991..2c6aec919bfbb 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/shift_pull_over.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner/shift_pull_over.hpp @@ -38,7 +38,7 @@ class ShiftPullOver : public PullOverPlannerBase std::optional plan( const GoalCandidate & modified_goal_pose, const size_t id, const std::shared_ptr planner_data, - const BehaviorModuleOutput & previous_module_output) override; + const BehaviorModuleOutput & upstream_module_output) override; protected: PathWithLaneId generateReferencePath( @@ -49,7 +49,7 @@ class ShiftPullOver : public PullOverPlannerBase std::optional generatePullOverPath( const GoalCandidate & goal_candidate, const size_t id, const std::shared_ptr planner_data, - const BehaviorModuleOutput & previous_module_output, const lanelet::ConstLanelets & road_lanes, + const BehaviorModuleOutput & upstream_module_output, const lanelet::ConstLanelets & road_lanes, const lanelet::ConstLanelets & pull_over_lanes, const double lateral_jerk) const; static double calcBeforeShiftedArcLength( const PathWithLaneId & path, const double after_shifted_arc_length, const double dr); diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/thread_data.hpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/thread_data.hpp index bfef4226b2661..7173b275e26fb 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/thread_data.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/thread_data.hpp @@ -32,35 +32,27 @@ class LaneParkingRequest { public: LaneParkingRequest( - const GoalPlannerParameters & parameters, const autoware::universe_utils::LinearRing2d & vehicle_footprint, - const GoalCandidates & goal_candidates, const BehaviorModuleOutput & previous_module_output) - : parameters_(parameters), - vehicle_footprint_(vehicle_footprint), + const GoalCandidates & goal_candidates, const BehaviorModuleOutput & upstream_module_output) + : vehicle_footprint_(vehicle_footprint), goal_candidates_(goal_candidates), - previous_module_output_(previous_module_output), - last_previous_module_output_(previous_module_output) + upstream_module_output_(upstream_module_output) { } void update( const PlannerData & planner_data, const ModuleStatus & current_status, - const BehaviorModuleOutput & previous_module_output, + const BehaviorModuleOutput & upstream_module_output, const std::optional & pull_over_path, const PathDecisionState & prev_data); - const GoalPlannerParameters parameters_; const autoware::universe_utils::LinearRing2d vehicle_footprint_; const GoalCandidates goal_candidates_; const std::shared_ptr & get_planner_data() const { return planner_data_; } const ModuleStatus & get_current_status() const { return current_status_; } - const BehaviorModuleOutput & get_previous_module_output() const - { - return previous_module_output_; - } - const BehaviorModuleOutput & get_last_previous_module_output() const + const BehaviorModuleOutput & get_upstream_module_output() const { - return last_previous_module_output_; + return upstream_module_output_; } const std::optional & get_pull_over_path() const { return pull_over_path_; } const PathDecisionState & get_prev_data() const { return prev_data_; } @@ -68,8 +60,7 @@ class LaneParkingRequest private: std::shared_ptr planner_data_; ModuleStatus current_status_; - BehaviorModuleOutput previous_module_output_; - BehaviorModuleOutput last_previous_module_output_; + BehaviorModuleOutput upstream_module_output_; std::optional pull_over_path_; // LATERAL_DEVIATION_THRESH) { return true; } @@ -185,19 +185,19 @@ bool hasPreviousModulePathShapeChanged( } bool hasDeviatedFromLastPreviousModulePath( - const PlannerData & planner_data, const BehaviorModuleOutput & last_previous_module_output) + const PlannerData & planner_data, const BehaviorModuleOutput & last_upstream_module_output) { return std::abs(autoware::motion_utils::calcLateralOffset( - last_previous_module_output.path.points, + last_upstream_module_output.path.points, planner_data.self_odometry->pose.pose.position)) > 0.3; } bool hasDeviatedFromCurrentPreviousModulePath( - const PlannerData & planner_data, const BehaviorModuleOutput & previous_module_output) + const PlannerData & planner_data, const BehaviorModuleOutput & upstream_module_output) { constexpr double LATERAL_DEVIATION_THRESH = 0.3; return std::abs(autoware::motion_utils::calcLateralOffset( - previous_module_output.path.points, planner_data.self_odometry->pose.pose.position)) > + upstream_module_output.path.points, planner_data.self_odometry->pose.pose.position)) > LATERAL_DEVIATION_THRESH; } @@ -282,7 +282,8 @@ LaneParkingPlanner::LaneParkingPlanner( const std::optional & request, LaneParkingResponse & response, std::atomic & is_lane_parking_cb_running, const rclcpp::Logger & logger, const GoalPlannerParameters & parameters) -: mutex_(lane_parking_mutex), +: parameters_(parameters), + mutex_(lane_parking_mutex), request_(request), response_(response), is_lane_parking_cb_running_(is_lane_parking_cb_running), @@ -335,12 +336,10 @@ void LaneParkingPlanner::onTimer() return; } const auto & local_request = local_request_opt.value(); - const auto & parameters = local_request.parameters_; const auto & goal_candidates = local_request.goal_candidates_; const auto & local_planner_data = local_request.get_planner_data(); const auto & current_status = local_request.get_current_status(); - const auto & previous_module_output = local_request.get_previous_module_output(); - const auto & last_previous_module_output = local_request.get_last_previous_module_output(); + const auto & upstream_module_output = local_request.get_upstream_module_output(); const auto & pull_over_path_opt = local_request.get_pull_over_path(); const auto & prev_data = local_request.get_prev_data(); @@ -371,19 +370,21 @@ void LaneParkingPlanner::onTimer() ? std::make_optional(pull_over_path_opt.value().modified_goal()) : std::nullopt; if (isOnModifiedGoal( - local_planner_data->self_odometry->pose.pose, modified_goal_opt, parameters)) { + local_planner_data->self_odometry->pose.pose, modified_goal_opt, parameters_)) { return false; } - if (hasDeviatedFromCurrentPreviousModulePath(*local_planner_data, previous_module_output)) { + if (hasDeviatedFromCurrentPreviousModulePath(*local_planner_data, upstream_module_output)) { RCLCPP_DEBUG(getLogger(), "has deviated from current previous module path"); return false; } - if (hasPreviousModulePathShapeChanged(previous_module_output, last_previous_module_output)) { + if (hasPreviousModulePathShapeChanged( + upstream_module_output, original_upstream_module_output_)) { RCLCPP_DEBUG(getLogger(), "has previous module path shape changed"); return true; } if ( - hasDeviatedFromLastPreviousModulePath(*local_planner_data, last_previous_module_output) && + hasDeviatedFromLastPreviousModulePath( + *local_planner_data, original_upstream_module_output_) && current_state != PathDecisionState::DecisionKind::DECIDED) { RCLCPP_DEBUG(getLogger(), "has deviated from last previous module path"); return true; @@ -400,8 +401,8 @@ void LaneParkingPlanner::onTimer() // generate valid pull over path candidates and calculate closest start pose const auto current_lanes = utils::getExtendedCurrentLanes( - local_planner_data, parameters.backward_goal_search_length, - parameters.forward_goal_search_length, + local_planner_data, parameters_.backward_goal_search_length, + parameters_.forward_goal_search_length, /*forward_only_in_route*/ false); std::vector path_candidates{}; std::optional closest_start_pose{}; @@ -410,7 +411,7 @@ void LaneParkingPlanner::onTimer() const std::shared_ptr & planner, const GoalCandidate & goal_candidate) { const auto pull_over_path = planner->plan( - goal_candidate, path_candidates.size(), local_planner_data, previous_module_output); + goal_candidate, path_candidates.size(), local_planner_data, upstream_module_output); if (pull_over_path) { // calculate absolute maximum curvature of parking path(start pose to end pose) for path // priority @@ -428,13 +429,13 @@ void LaneParkingPlanner::onTimer() // todo: currently non centerline input path is supported only by shift pull over const bool is_center_line_input_path = goal_planner_utils::isReferencePath( - previous_module_output.reference_path, previous_module_output.path, 0.1); + upstream_module_output.reference_path, upstream_module_output.path, 0.1); RCLCPP_DEBUG( getLogger(), "the input path of pull over planner is center line: %d", is_center_line_input_path); // plan candidate paths and set them to the member variable - if (parameters.path_priority == "efficient_path") { + if (parameters_.path_priority == "efficient_path") { for (const auto & planner : pull_over_planners_) { // todo: temporary skip NON SHIFT planner when input path is not center line if (!is_center_line_input_path && planner->getPlannerType() != PullOverPlannerType::SHIFT) { @@ -444,7 +445,7 @@ void LaneParkingPlanner::onTimer() planCandidatePaths(planner, goal_candidate); } } - } else if (parameters.path_priority == "close_goal") { + } else if (parameters_.path_priority == "close_goal") { for (const auto & goal_candidate : goal_candidates) { for (const auto & planner : pull_over_planners_) { // todo: temporary skip NON SHIFT planner when input path is not center line @@ -457,14 +458,15 @@ void LaneParkingPlanner::onTimer() } else { RCLCPP_ERROR( getLogger(), "path_priority should be efficient_path or close_goal, but %s is given.", - parameters.path_priority.c_str()); + parameters_.path_priority.c_str()); throw std::domain_error("[pull_over] invalid path_priority"); } // set response { + original_upstream_module_output_ = upstream_module_output; std::lock_guard guard(mutex_); - response_.pull_over_path_candidates = path_candidates; + response_.pull_over_path_candidates = std::move(path_candidates); response_.closest_start_pose = closest_start_pose; RCLCPP_INFO( getLogger(), "generated %lu pull over path candidates", @@ -562,7 +564,7 @@ std::pair GoalPlannerModule::sync // In PlannerManager::run(), it calls SceneModuleInterface::setData and // SceneModuleInterface::setPreviousModuleOutput before module_ptr->run(). // Then module_ptr->run() invokes GoalPlannerModule::updateData and then - // planWaitingApproval()/plan(), so we can copy latest current_status/previous_module_output to + // planWaitingApproval()/plan(), so we can copy latest current_status/upstream_module_output to // lane_parking_request/freespace_parking_request std::optional pull_over_path = @@ -578,7 +580,7 @@ std::pair GoalPlannerModule::sync std::lock_guard guard(lane_parking_mutex_); if (!lane_parking_request_) { lane_parking_request_.emplace( - *parameters_, vehicle_footprint_, goal_candidates_, getPreviousModuleOutput()); + vehicle_footprint_, goal_candidates_, getPreviousModuleOutput()); } // NOTE: for the above reasons, PlannerManager/behavior_path_planner_node ensure that // planner_data_ is not nullptr, so it is OK to copy as value diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/bezier_pull_over.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/bezier_pull_over.cpp index 0da5ab5dae38b..ad42ccf1582ab 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/bezier_pull_over.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/bezier_pull_over.cpp @@ -43,7 +43,7 @@ BezierPullOver::BezierPullOver( std::optional BezierPullOver::plan( [[maybe_unused]] const GoalCandidate & modified_goal_pose, [[maybe_unused]] const size_t id, [[maybe_unused]] const std::shared_ptr planner_data, - [[maybe_unused]] const BehaviorModuleOutput & previous_module_output) + [[maybe_unused]] const BehaviorModuleOutput & upstream_module_output) { const auto & route_handler = planner_data->route_handler; const double min_jerk = parameters_.minimum_lateral_jerk; @@ -55,7 +55,7 @@ std::optional BezierPullOver::plan( std::abs(max_jerk - min_jerk) / shift_sampling_num; const auto road_lanes = utils::getExtendedCurrentLanesFromPath( - previous_module_output.path, planner_data, backward_search_length, forward_search_length, + upstream_module_output.path, planner_data, backward_search_length, forward_search_length, /*forward_only_in_route*/ false); const auto pull_over_lanes = goal_planner_utils::getPullOverLanes( @@ -67,7 +67,7 @@ std::optional BezierPullOver::plan( // find safe one from paths with different jerk for (double lateral_jerk = min_jerk; lateral_jerk <= max_jerk; lateral_jerk += jerk_resolution) { const auto pull_over_path = generateBezierPath( - modified_goal_pose, id, planner_data, previous_module_output, road_lanes, pull_over_lanes, + modified_goal_pose, id, planner_data, upstream_module_output, road_lanes, pull_over_lanes, lateral_jerk); if (!pull_over_path.empty()) { return pull_over_path.at(0); @@ -80,7 +80,7 @@ std::optional BezierPullOver::plan( std::vector BezierPullOver::plans( [[maybe_unused]] const GoalCandidate & modified_goal_pose, [[maybe_unused]] const size_t id, [[maybe_unused]] const std::shared_ptr planner_data, - [[maybe_unused]] const BehaviorModuleOutput & previous_module_output) + [[maybe_unused]] const BehaviorModuleOutput & upstream_module_output) { const auto & route_handler = planner_data->route_handler; const double min_jerk = parameters_.minimum_lateral_jerk; @@ -92,7 +92,7 @@ std::vector BezierPullOver::plans( std::abs(max_jerk - min_jerk) / shift_sampling_num; const auto road_lanes = utils::getExtendedCurrentLanesFromPath( - previous_module_output.path, planner_data, backward_search_length, forward_search_length, + upstream_module_output.path, planner_data, backward_search_length, forward_search_length, /*forward_only_in_route*/ false); const auto pull_over_lanes = goal_planner_utils::getPullOverLanes( @@ -105,7 +105,7 @@ std::vector BezierPullOver::plans( std::vector paths; for (double lateral_jerk = min_jerk; lateral_jerk <= max_jerk; lateral_jerk += jerk_resolution) { auto pull_over_paths = generateBezierPath( - modified_goal_pose, id, planner_data, previous_module_output, road_lanes, pull_over_lanes, + modified_goal_pose, id, planner_data, upstream_module_output, road_lanes, pull_over_lanes, lateral_jerk); std::copy( std::make_move_iterator(pull_over_paths.begin()), @@ -118,7 +118,7 @@ std::vector BezierPullOver::plans( std::vector BezierPullOver::generateBezierPath( const GoalCandidate & goal_candidate, const size_t id, const std::shared_ptr planner_data, - const BehaviorModuleOutput & previous_module_output, const lanelet::ConstLanelets & road_lanes, + const BehaviorModuleOutput & upstream_module_output, const lanelet::ConstLanelets & road_lanes, const lanelet::ConstLanelets & pull_over_lanes, const double lateral_jerk) const { const double pull_over_velocity = parameters_.pull_over_velocity; @@ -133,7 +133,7 @@ std::vector BezierPullOver::generateBezierPath( generateReferencePath(planner_data, road_lanes, shift_end_pose), parameters_.center_line_path_interval); const auto prev_module_path = utils::resamplePathWithSpline( - previous_module_output.path, parameters_.center_line_path_interval); + upstream_module_output.path, parameters_.center_line_path_interval); const auto prev_module_path_terminal_pose = prev_module_path.points.back().point.pose; // process previous module path for path shifter input path @@ -318,7 +318,7 @@ std::vector BezierPullOver::generateBezierPath( drivable_lanes, dp.drivable_area_left_bound_offset, dp.drivable_area_right_bound_offset, dp.drivable_area_types_to_skip); const auto combined_drivable = utils::combineDrivableLanes( - expanded_lanes, previous_module_output.drivable_area_info.drivable_lanes); + expanded_lanes, upstream_module_output.drivable_area_info.drivable_lanes); return !lane_departure_checker_.checkPathWillLeaveLane( utils::transformToLanelets(combined_drivable), pull_over_path.parking_path()); }); diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/freespace_pull_over.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/freespace_pull_over.cpp index 5b11d1b170ce1..473f76b5904d6 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/freespace_pull_over.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/freespace_pull_over.cpp @@ -60,7 +60,7 @@ FreespacePullOver::FreespacePullOver( std::optional FreespacePullOver::plan( const GoalCandidate & modified_goal_pose, const size_t id, const std::shared_ptr planner_data, - [[maybe_unused]] const BehaviorModuleOutput & previous_module_output) + [[maybe_unused]] const BehaviorModuleOutput & upstream_module_output) { const Pose & current_pose = planner_data->self_odometry->pose.pose; diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/geometric_pull_over.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/geometric_pull_over.cpp index c0bac5c5ce2a8..74b3fe149fd1d 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/geometric_pull_over.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/geometric_pull_over.cpp @@ -40,7 +40,7 @@ GeometricPullOver::GeometricPullOver( std::optional GeometricPullOver::plan( const GoalCandidate & modified_goal_pose, const size_t id, const std::shared_ptr planner_data, - [[maybe_unused]] const BehaviorModuleOutput & previous_module_output) + [[maybe_unused]] const BehaviorModuleOutput & upstream_module_output) { const auto & route_handler = planner_data->route_handler; diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/shift_pull_over.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/shift_pull_over.cpp index edecfd733d3be..9a3e2d6b13db9 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/shift_pull_over.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/pull_over_planner/shift_pull_over.cpp @@ -41,7 +41,7 @@ ShiftPullOver::ShiftPullOver( std::optional ShiftPullOver::plan( const GoalCandidate & modified_goal_pose, const size_t id, const std::shared_ptr planner_data, - const BehaviorModuleOutput & previous_module_output) + const BehaviorModuleOutput & upstream_module_output) { const auto & route_handler = planner_data->route_handler; const double min_jerk = parameters_.minimum_lateral_jerk; @@ -52,7 +52,7 @@ std::optional ShiftPullOver::plan( const double jerk_resolution = std::abs(max_jerk - min_jerk) / shift_sampling_num; const auto road_lanes = utils::getExtendedCurrentLanesFromPath( - previous_module_output.path, planner_data, backward_search_length, forward_search_length, + upstream_module_output.path, planner_data, backward_search_length, forward_search_length, /*forward_only_in_route*/ false); const auto pull_over_lanes = goal_planner_utils::getPullOverLanes( @@ -64,7 +64,7 @@ std::optional ShiftPullOver::plan( // find safe one from paths with different jerk for (double lateral_jerk = min_jerk; lateral_jerk <= max_jerk; lateral_jerk += jerk_resolution) { const auto pull_over_path = generatePullOverPath( - modified_goal_pose, id, planner_data, previous_module_output, road_lanes, pull_over_lanes, + modified_goal_pose, id, planner_data, upstream_module_output, road_lanes, pull_over_lanes, lateral_jerk); if (!pull_over_path) continue; return pull_over_path; @@ -134,7 +134,7 @@ std::optional ShiftPullOver::cropPrevModulePath( std::optional ShiftPullOver::generatePullOverPath( const GoalCandidate & goal_candidate, const size_t id, const std::shared_ptr planner_data, - const BehaviorModuleOutput & previous_module_output, const lanelet::ConstLanelets & road_lanes, + const BehaviorModuleOutput & upstream_module_output, const lanelet::ConstLanelets & road_lanes, const lanelet::ConstLanelets & pull_over_lanes, const double lateral_jerk) const { const double pull_over_velocity = parameters_.pull_over_velocity; @@ -151,7 +151,7 @@ std::optional ShiftPullOver::generatePullOverPath( generateReferencePath(planner_data, road_lanes, shift_end_pose), parameters_.center_line_path_interval); const auto prev_module_path = utils::resamplePathWithSpline( - previous_module_output.path, parameters_.center_line_path_interval); + upstream_module_output.path, parameters_.center_line_path_interval); const auto prev_module_path_terminal_pose = prev_module_path.points.back().point.pose; // process previous module path for path shifter input path diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/thread_data.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/thread_data.cpp index f12d510e23030..89458c199c130 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/thread_data.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/thread_data.cpp @@ -21,14 +21,13 @@ namespace autoware::behavior_path_planner void LaneParkingRequest::update( const PlannerData & planner_data, const ModuleStatus & current_status, - const BehaviorModuleOutput & previous_module_output, + const BehaviorModuleOutput & upstream_module_output, const std::optional & pull_over_path, const PathDecisionState & prev_data) { planner_data_ = std::make_shared(planner_data); planner_data_->route_handler = std::make_shared(*(planner_data.route_handler)); current_status_ = current_status; - last_previous_module_output_ = previous_module_output_; - previous_module_output_ = previous_module_output; + upstream_module_output_ = upstream_module_output; pull_over_path_ = pull_over_path; prev_data_ = prev_data; } From 33b9913a65cc8cfdb99a3e0d776421f430f66318 Mon Sep 17 00:00:00 2001 From: Ryohsuke Mitsudome <43976834+mitsudome-r@users.noreply.github.com> Date: Tue, 31 Dec 2024 23:09:05 +0900 Subject: [PATCH 34/77] ci: pass run condition to reusable workflow (#9771) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ryohsuke Mitsudome Co-authored-by: M. Fatih Cırıt --- .../actions/evaluate-job-result/action.yaml | 45 ------------ .../build-and-test-differential.yaml | 5 ++ .github/workflows/build-test-tidy-pr.yaml | 72 +++---------------- .../workflows/clang-tidy-differential.yaml | 5 ++ 4 files changed, 19 insertions(+), 108 deletions(-) delete mode 100644 .github/actions/evaluate-job-result/action.yaml diff --git a/.github/actions/evaluate-job-result/action.yaml b/.github/actions/evaluate-job-result/action.yaml deleted file mode 100644 index c5c013080fd27..0000000000000 --- a/.github/actions/evaluate-job-result/action.yaml +++ /dev/null @@ -1,45 +0,0 @@ -name: Evaluate Job Result -description: Evaluates the result of a job and updates the summary. -inputs: - job_result: - description: Result of the job to evaluate (e.g., success, failure, skipped) - required: true - type: string - job_name: - description: Name of the job to evaluate - required: true - type: string - expected_results: - description: Comma-separated list of acceptable results (e.g., success,skipped) - required: true - type: string -outputs: - failed: - description: Indicates if the job failed - value: ${{ steps.evaluate.outputs.failed }} - -runs: - using: composite - steps: - - name: Evaluate Job Result - id: evaluate - run: | - JOB_RESULT="${{ inputs.job_result }}" - IFS=',' read -ra EXPECTED <<< "${{ inputs.expected_results }}" - FAILED=false - - for RESULT in "${EXPECTED[@]}"; do - if [[ "$JOB_RESULT" == "$RESULT" ]]; then - echo "- **${{ inputs.job_name }}:** "$JOB_RESULT" ✅" >> "$GITHUB_STEP_SUMMARY" - echo "failed=false" >> "$GITHUB_OUTPUT" - exit 0 - fi - done - - # If no expected result matched - echo "::error::${{ inputs.job_name }} failed. ❌" - echo "- **${{ inputs.job_name }}:** failed ❌" >> "$GITHUB_STEP_SUMMARY" - echo "failed=true" >> "$GITHUB_OUTPUT" - - exit 1 - shell: bash diff --git a/.github/workflows/build-and-test-differential.yaml b/.github/workflows/build-and-test-differential.yaml index 0925cb0f53930..c25f6b24c5e47 100644 --- a/.github/workflows/build-and-test-differential.yaml +++ b/.github/workflows/build-and-test-differential.yaml @@ -14,6 +14,10 @@ on: default: humble required: false type: string + run-condition: + default: true + required: false + type: boolean container-suffix: required: false default: "" @@ -28,6 +32,7 @@ env: jobs: build-and-test-differential: + if: ${{ inputs.run-condition }} runs-on: ${{ inputs.runner }} container: ${{ inputs.container }}${{ inputs.container-suffix }} steps: diff --git a/.github/workflows/build-test-tidy-pr.yaml b/.github/workflows/build-test-tidy-pr.yaml index d1ea9b2d0f79d..c0442694b5c77 100644 --- a/.github/workflows/build-test-tidy-pr.yaml +++ b/.github/workflows/build-test-tidy-pr.yaml @@ -40,98 +40,44 @@ jobs: shell: bash build-and-test-differential: + if: ${{ always() }} needs: - require-label uses: ./.github/workflows/build-and-test-differential.yaml with: container: ghcr.io/autowarefoundation/autoware:universe-devel + run-condition: ${{ needs.require-label.outputs.result == 'true' }} secrets: codecov-token: ${{ secrets.CODECOV_TOKEN }} build-and-test-differential-cuda: + if: ${{ always() }} needs: check-if-cuda-job-is-needed - if: ${{ needs.check-if-cuda-job-is-needed.outputs.cuda_job_is_needed == 'true' }} uses: ./.github/workflows/build-and-test-differential.yaml with: container: ghcr.io/autowarefoundation/autoware:universe-devel container-suffix: -cuda + run-condition: ${{ needs.check-if-cuda-job-is-needed.outputs.cuda_job_is_needed == 'true' }} secrets: codecov-token: ${{ secrets.CODECOV_TOKEN }} - build-test-pr: - needs: - - build-and-test-differential - - build-and-test-differential-cuda - if: ${{ always() }} - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Initialize Summary - run: echo "### Build Test PR Results" > $GITHUB_STEP_SUMMARY - shell: bash - - - name: Evaluate build-and-test-differential - uses: ./.github/actions/evaluate-job-result - with: - job_result: ${{ needs.build-and-test-differential.result }} - job_name: build-and-test-differential - expected_results: success - - - name: Evaluate build-and-test-differential-cuda - if: ${{ always() }} - uses: ./.github/actions/evaluate-job-result - with: - job_result: ${{ needs.build-and-test-differential-cuda.result }} - job_name: build-and-test-differential-cuda - expected_results: success,skipped - clang-tidy-differential: + if: ${{ always() }} # always run to provide report for status check needs: - check-if-cuda-job-is-needed - build-and-test-differential - if: ${{ needs.check-if-cuda-job-is-needed.outputs.cuda_job_is_needed == 'false' }} uses: ./.github/workflows/clang-tidy-differential.yaml with: container: ghcr.io/autowarefoundation/autoware:universe-devel + run-condition: ${{ needs.check-if-cuda-job-is-needed.outputs.cuda_job_is_needed == 'false' && needs.build-and-test-differential.result == 'success' }} clang-tidy-differential-cuda: + if: ${{ always() }} # always run to provide report for status check needs: + - check-if-cuda-job-is-needed - build-and-test-differential-cuda uses: ./.github/workflows/clang-tidy-differential.yaml with: container: ghcr.io/autowarefoundation/autoware:universe-devel container-suffix: -cuda - - clang-tidy-pr: - needs: - - clang-tidy-differential - - clang-tidy-differential-cuda - if: ${{ always() }} - runs-on: ubuntu-latest - steps: - - name: Initialize Summary - run: echo "### Clang Tidy PR Results" > $GITHUB_STEP_SUMMARY - shell: bash - - - name: Check clang-tidy success - if: ${{ needs.clang-tidy-differential.result == 'success' || needs.clang-tidy-differential-cuda.result == 'success' }} - run: | - echo "✅ Either one of the following has succeeded:" >> $GITHUB_STEP_SUMMARY - - - name: Fail if conditions not met - if: ${{ !(needs.clang-tidy-differential.result == 'success' || needs.clang-tidy-differential-cuda.result == 'success') }} - run: | - echo "::error::❌ Either one of the following should have succeeded:" - echo "::error::clang-tidy-differential: ${{ needs.clang-tidy-differential.result }}" - echo "::error::clang-tidy-differential-cuda: ${{ needs.clang-tidy-differential-cuda.result }}" - - echo "❌ Either one of the following should have succeeded:" >> $GITHUB_STEP_SUMMARY - - exit 1 - - - name: Print the results - if: ${{ always() }} - run: | - echo "- **clang-tidy-differential:** ${{ needs.clang-tidy-differential.result }}" >> $GITHUB_STEP_SUMMARY - echo "- **clang-tidy-differential-cuda:** ${{ needs.clang-tidy-differential-cuda.result }}" >> $GITHUB_STEP_SUMMARY + run-condition: ${{ needs.check-if-cuda-job-is-needed.outputs.cuda_job_is_needed == 'true' && needs.build-and-test-differential-cuda.result == 'success' }} diff --git a/.github/workflows/clang-tidy-differential.yaml b/.github/workflows/clang-tidy-differential.yaml index 51e0a8408468c..41d722c8e07b0 100644 --- a/.github/workflows/clang-tidy-differential.yaml +++ b/.github/workflows/clang-tidy-differential.yaml @@ -14,9 +14,14 @@ on: default: ubuntu-24.04 required: false type: string + run-condition: + default: true + required: false + type: boolean jobs: clang-tidy-differential: + if: ${{ inputs.run-condition }} runs-on: ${{ inputs.runner }} container: ${{ inputs.container }}${{ inputs.container-suffix }} steps: From 77c1a3f02a4cc5afece9ac701193f24de7af3755 Mon Sep 17 00:00:00 2001 From: Atto Armoo <168620037+AA-T4@users.noreply.github.com> Date: Tue, 31 Dec 2024 23:26:19 +0900 Subject: [PATCH 35/77] fix(planning): corrects minor typos (#9809) Signed-off-by: Atto Armoo <168620037+AA-T4@users.noreply.github.com> --- planning/README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/planning/README.md b/planning/README.md index ccf8288df3911..3fadafe54ed4c 100644 --- a/planning/README.md +++ b/planning/README.md @@ -18,7 +18,7 @@ Enabling and disabling modules involves managing settings in key configuration a ### Key Files for Configuration -The `default_preset.yaml` file acts as the primary configuration file, where planning modules can be disable or enabled. Furthermore, users can also set the type of motion planner across various motion planners. For example: +The `default_preset.yaml` file acts as the primary configuration file, where planning modules can be disabled or enabled. Furthermore, users can also set the type of motion planner across various motion planners. For example: - `launch_avoidance_module`: Set to `true` to enable the avoidance module, or `false` to disable it. - `motion_stop_planner_type`: Set `default` to either `obstacle_stop_planner` or `obstacle_cruise_planner`. @@ -35,7 +35,7 @@ The [launch files](https://github.com/autowarefoundation/autoware.universe/tree/ corresponds to launch_avoidance_module from `default_preset.yaml`. -### Parameters configuration +### Parameter Configuration There are multiple parameters available for configuration, and users have the option to modify them in [here](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning). It's important to note that not all parameters are adjustable via `rqt_reconfigure`. To ensure the changes are effective, modify the parameters and then restart Autoware. Additionally, detailed information about each parameter is available in the corresponding documents under the planning tab. @@ -43,7 +43,7 @@ There are multiple parameters available for configuration, and users have the op This guide outlines the steps for integrating your custom module into Autoware: -- Add your modules to the `default_preset.yaml` file. For example +- Add your modules to the `default_preset.yaml` file. For example: ```yaml - arg: @@ -51,7 +51,7 @@ This guide outlines the steps for integrating your custom module into Autoware: default: "true" ``` -- Incorporate your modules into the [launcher](https://github.com/autowarefoundation/autoware.universe/tree/main/launch/tier4_planning_launch/launch/scenario_planning). For example in [behavior_planning.launch.xml](https://github.com/autowarefoundation/autoware.universe/blob/main/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml): +- Incorporate your modules into the [launcher](https://github.com/autowarefoundation/autoware.universe/tree/main/launch/tier4_planning_launch/launch/scenario_planning). For example, in [behavior_planning.launch.xml](https://github.com/autowarefoundation/autoware.universe/blob/main/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml): ```xml @@ -63,14 +63,14 @@ This guide outlines the steps for integrating your custom module into Autoware: /> ``` -- If applicable, place your parameter folder within the appropriate existing parameter folder. For example [intersection_module's parameters](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml) is in [behavior_velocity_planner](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner). -- Insert the path of your parameters in the [tier4_planning_component.launch.xml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/launch/components/tier4_planning_component.launch.xml). For example `behavior_velocity_planner_intersection_module_param_path` is used. +- If applicable, place your parameter folder within the appropriate existing parameter folder. For example, [intersection_module's parameters](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/intersection.param.yaml) are in [behavior_velocity_planner](https://github.com/autowarefoundation/autoware_launch/tree/main/autoware_launch/config/planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner). +- Insert the path of your parameters in the [tier4_planning_component.launch.xml](https://github.com/autowarefoundation/autoware_launch/blob/main/autoware_launch/launch/components/tier4_planning_component.launch.xml). For example, `behavior_velocity_planner_intersection_module_param_path` is used. ```xml ``` -- Define your parameter path variable within the corresponding launcher. For example in [behavior_planning.launch.xml](https://github.com/autowarefoundation/autoware.universe/blob/04aa54bf5fb0c88e70198ca74b9ac343cc3457bf/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml#L191) +- Define your parameter path variable within the corresponding launcher. For example, in [behavior_planning.launch.xml](https://github.com/autowarefoundation/autoware.universe/blob/04aa54bf5fb0c88e70198ca74b9ac343cc3457bf/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml#L191) ```xml @@ -82,7 +82,7 @@ This guide outlines the steps for integrating your custom module into Autoware: ## Join Our Community-Driven Effort -Autoware thrives on community collaboration. Every contribution, big or small, is invaluable to us. Whether it's reporting bugs, suggesting improvements, offering new ideas, or anything else you can think of – we welcome it all with open arms. +Autoware thrives on community collaboration. Every contribution, big or small, is invaluable to us. Whether it's reporting bugs, suggesting improvements, offering new ideas, or anything else you can think of – we welcome all contributions with open arms. ### How to Contribute? @@ -105,7 +105,7 @@ Interested in joining our meetings? We’d love to have you! For more informatio Occasionally, we publish papers specific to the Planning Component in Autoware. We encourage you to explore these publications and find valuable insights for your work. If you find them useful and incorporate any of our methodologies or algorithms in your projects, citing our papers would be immensely helpful. This support allows us to reach a broader audience and continue contributing to the field. -If you use the Jerk Constrained Velocity Planning algorithm in [Motion Velocity Smoother](./autoware_velocity_smoother/README.md) module in the Planning Component, we kindly request you to cite the relevant paper. +If you use the Jerk Constrained Velocity Planning algorithm in the [Motion Velocity Smoother](./autoware_velocity_smoother/README.md) module in the Planning Component, we kindly request you cite the relevant paper. From a32cae1d4547290d9e4c3bb9b86480bfc373459d Mon Sep 17 00:00:00 2001 From: "awf-autoware-bot[bot]" <94889083+awf-autoware-bot[bot]@users.noreply.github.com> Date: Thu, 2 Jan 2025 11:12:43 +0000 Subject: [PATCH 36/77] chore: sync files (#9825) Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions --- .pre-commit-config-optional.yaml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.pre-commit-config-optional.yaml b/.pre-commit-config-optional.yaml index ff325af5e8774..f0b5bdba2d24d 100644 --- a/.pre-commit-config-optional.yaml +++ b/.pre-commit-config-optional.yaml @@ -2,6 +2,13 @@ # https://github.com/autowarefoundation/sync-file-templates # To make changes, update the source repository and follow the guidelines in its README. +# https://pre-commit.ci/#configuration +ci: + autofix_commit_msg: "style(pre-commit-optional): autofix" + # we already have our own daily update mechanism, we set this to quarterly + autoupdate_schedule: quarterly + autoupdate_commit_msg: "ci(pre-commit-optional): quarterly autoupdate" + repos: - repo: https://github.com/tcort/markdown-link-check rev: v3.12.2 From 176e2e31a4f1b89a6ad4b6e4af5a04c3cc4ba4c3 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 6 Jan 2025 11:25:20 +0900 Subject: [PATCH 37/77] feat(behavior_velocity_modules): add node test (#9790) * feat(behavior_velocity_crosswalk): add node test Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * feat(behavior_velocity_xxx_module): add node test Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * change directory tests -> test Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../CMakeLists.txt | 10 +++ .../package.xml | 2 + .../test/test_node_interface.cpp | 64 ++++++++++++++++++ .../CMakeLists.txt | 1 + .../package.xml | 1 + .../test/test_node_interface.cpp | 64 ++++++++++++++++++ .../CMakeLists.txt | 1 + .../package.xml | 1 + .../test/test_node_interface.cpp | 64 ++++++++++++++++++ .../package.xml | 1 + .../test/test_node_interface.cpp | 64 ++++++++++++++++++ .../CMakeLists.txt | 1 + .../package.xml | 1 + .../test/test_node_interface.cpp | 64 ++++++++++++++++++ .../CMakeLists.txt | 17 ----- .../behavior_velocity_planner/node.hpp | 16 ++--- .../package.xml | 7 +- .../src/node.cpp | 16 ++--- .../srv/LoadPlugin.srv | 3 - .../srv/UnloadPlugin.srv | 3 - .../CMakeLists.txt | 9 +-- .../package.xml | 1 + .../{tests => test}/test_dynamic_obstacle.cpp | 0 .../test/test_node_interface.cpp | 64 ++++++++++++++++++ .../{tests => test}/test_path_utils.cpp | 0 .../{tests => test}/test_state_machine.cpp | 0 .../{tests => test}/test_utils.cpp | 0 .../CMakeLists.txt | 1 + .../package.xml | 1 + .../test/test_node_interface.cpp | 64 ++++++++++++++++++ .../CMakeLists.txt | 1 + .../package.xml | 1 + .../test/test_node_interface.cpp | 64 ++++++++++++++++++ .../package.xml | 1 + .../test/test_node_interface.cpp | 65 +++++++++++++++++++ .../CMakeLists.txt | 10 +++ .../package.xml | 2 + .../test/test_node_interface.cpp | 64 ++++++++++++++++++ 38 files changed, 699 insertions(+), 50 deletions(-) create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test/test_node_interface.cpp create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/test/test_node_interface.cpp create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/test/test_node_interface.cpp create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/test/test_node_interface.cpp create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/test/test_node_interface.cpp delete mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_planner/srv/LoadPlugin.srv delete mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_planner/srv/UnloadPlugin.srv rename planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/{tests => test}/test_dynamic_obstacle.cpp (100%) create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/test/test_node_interface.cpp rename planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/{tests => test}/test_path_utils.cpp (100%) rename planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/{tests => test}/test_state_machine.cpp (100%) rename planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/{tests => test}/test_utils.cpp (100%) create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/test/test_node_interface.cpp create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/test/test_node_interface.cpp create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/test/test_node_interface.cpp create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/test/test_node_interface.cpp diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt index b4a688d711221..b28e486c9be05 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt @@ -13,4 +13,14 @@ ament_auto_add_library(${PROJECT_NAME} SHARED src/util.cpp ) +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + ament_lint_auto_find_test_dependencies() + file(GLOB_RECURSE TEST_SOURCES test/*.cpp) + ament_add_ros_isolated_gtest(test_${PROJECT_NAME} + ${TEST_SOURCES} + ) + target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME}) +endif() + ament_auto_package(INSTALL_TO_SHARE config) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml index 9739370387df7..8c34678f439ed 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml @@ -17,6 +17,7 @@ ament_cmake_auto autoware_cmake + autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_rtc_interface autoware_lanelet2_extension @@ -32,6 +33,7 @@ tier4_planning_msgs visualization_msgs + ament_cmake_ros ament_lint_auto autoware_lint_common diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test/test_node_interface.cpp new file mode 100644 index 0000000000000..e0ceca4e12951 --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test/test_node_interface.cpp @@ -0,0 +1,64 @@ +// 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 + +#include + +#include +#include +#include +#include + +namespace autoware::behavior_velocity_planner +{ +TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID) +{ + rclcpp::init(0, nullptr); + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode({}); + + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test with nominal path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + // test with empty path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node)); + rclcpp::shutdown(); +} + +TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) +{ + rclcpp::init(0, nullptr); + + const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{ + "blind_spot", "autoware::behavior_velocity_planner::BlindSpotModulePlugin"}}; + + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec); + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test for normal trajectory + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + + // make sure behavior_path_planner is running + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node)); + + rclcpp::shutdown(); +} +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/CMakeLists.txt index 10b694ce22cbd..3a429008c1b8e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/CMakeLists.txt +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/CMakeLists.txt @@ -15,6 +15,7 @@ if(BUILD_TESTING) ament_lint_auto_find_test_dependencies() ament_add_ros_isolated_gtest(test_${PROJECT_NAME} test/test_crosswalk.cpp + test/test_node_interface.cpp ) target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME}) endif() diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/package.xml index ff01e85aa5456..1f0e9e68a65c6 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/package.xml @@ -21,6 +21,7 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_rtc_interface autoware_grid_map_utils diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/test/test_node_interface.cpp new file mode 100644 index 0000000000000..7a875327d4dde --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/test/test_node_interface.cpp @@ -0,0 +1,64 @@ +// 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 + +#include + +#include +#include +#include +#include + +namespace autoware::behavior_velocity_planner +{ +TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID) +{ + rclcpp::init(0, nullptr); + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode({}); + + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test with nominal path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + // test with empty path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node)); + rclcpp::shutdown(); +} + +TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) +{ + rclcpp::init(0, nullptr); + + const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{ + "crosswalk", "autoware::behavior_velocity_planner::CrosswalkModulePlugin"}}; + + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec); + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test for normal trajectory + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + + // make sure behavior_path_planner is running + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node)); + + rclcpp::shutdown(); +} +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/CMakeLists.txt index 3aff4a524ffdd..53eafaffbba6c 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/CMakeLists.txt +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/CMakeLists.txt @@ -14,6 +14,7 @@ if(BUILD_TESTING) ament_lint_auto_find_test_dependencies() ament_add_ros_isolated_gtest(test_${PROJECT_NAME} test/test_utils.cpp + test/test_node_interface.cpp ) target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME}) endif() diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml index ff91cf40a32a6..4ae1d20991078 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/package.xml @@ -17,6 +17,7 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_lanelet2_extension autoware_motion_utils diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/test/test_node_interface.cpp new file mode 100644 index 0000000000000..f84d22debea8e --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_detection_area_module/test/test_node_interface.cpp @@ -0,0 +1,64 @@ +// 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 + +#include + +#include +#include +#include +#include + +namespace autoware::behavior_velocity_planner +{ +TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID) +{ + rclcpp::init(0, nullptr); + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode({}); + + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test with nominal path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + // test with empty path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node)); + rclcpp::shutdown(); +} + +TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) +{ + rclcpp::init(0, nullptr); + + const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{ + "detection_area", "autoware::behavior_velocity_planner::DetectionAreaModulePlugin"}}; + + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec); + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test for normal trajectory + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + + // make sure behavior_path_planner is running + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node)); + + rclcpp::shutdown(); +} +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml index 208e7ed49de71..4f7c3aeea7618 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/package.xml @@ -19,6 +19,7 @@ ament_cmake_auto autoware_cmake + autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_rtc_interface autoware_internal_debug_msgs diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/test/test_node_interface.cpp new file mode 100644 index 0000000000000..b515107e0ae8e --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/test/test_node_interface.cpp @@ -0,0 +1,64 @@ +// 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 + +#include + +#include +#include +#include +#include + +namespace autoware::behavior_velocity_planner +{ +TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID) +{ + rclcpp::init(0, nullptr); + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode({}); + + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test with nominal path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + // test with empty path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node)); + rclcpp::shutdown(); +} + +TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) +{ + rclcpp::init(0, nullptr); + + const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{ + "intersection", "autoware::behavior_velocity_planner::IntersectionModulePlugin"}}; + + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec); + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test for normal trajectory + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + + // make sure behavior_path_planner is running + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node)); + + rclcpp::shutdown(); +} +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/CMakeLists.txt index b710924410549..e6b362271afb3 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/CMakeLists.txt +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/CMakeLists.txt @@ -14,6 +14,7 @@ if(BUILD_TESTING) ament_lint_auto_find_test_dependencies() ament_add_ros_isolated_gtest(test_${PROJECT_NAME} test/test_utils.cpp + test/test_node_interface.cpp ) target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME}) endif() diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/package.xml index 4415eadef62c7..28677bfb80b15 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/package.xml @@ -17,6 +17,7 @@ ament_cmake_auto autoware_cmake + autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_rtc_interface autoware_interpolation diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/test/test_node_interface.cpp new file mode 100644 index 0000000000000..875e757cbfcec --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_stopping_area_module/test/test_node_interface.cpp @@ -0,0 +1,64 @@ +// 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 + +#include + +#include +#include +#include +#include + +namespace autoware::behavior_velocity_planner +{ +TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID) +{ + rclcpp::init(0, nullptr); + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode({}); + + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test with nominal path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + // test with empty path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node)); + rclcpp::shutdown(); +} + +TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) +{ + rclcpp::init(0, nullptr); + + const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{ + "no_stopping_area", "autoware::behavior_velocity_planner::NoStoppingAreaModulePlugin"}}; + + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec); + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test for normal trajectory + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + + // make sure behavior_path_planner is running + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node)); + + rclcpp::shutdown(); +} +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/CMakeLists.txt index 31900a23d00e5..a520b02a43c05 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/CMakeLists.txt +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/CMakeLists.txt @@ -2,14 +2,6 @@ cmake_minimum_required(VERSION 3.14) project(autoware_behavior_velocity_planner) find_package(autoware_cmake REQUIRED) -find_package(rosidl_default_generators REQUIRED) - -rosidl_generate_interfaces( - ${PROJECT_NAME} - "srv/LoadPlugin.srv" - "srv/UnloadPlugin.srv" - DEPENDENCIES -) autoware_package() @@ -24,15 +16,6 @@ rclcpp_components_register_node(${PROJECT_NAME}_lib EXECUTABLE ${PROJECT_NAME}_node ) -if(${rosidl_cmake_VERSION} VERSION_LESS 2.5.0) - rosidl_target_interfaces(${PROJECT_NAME}_lib - ${PROJECT_NAME} "rosidl_typesupport_cpp") -else() - rosidl_get_typesupport_target( - cpp_typesupport_target ${PROJECT_NAME} "rosidl_typesupport_cpp") - target_link_libraries(${PROJECT_NAME}_lib "${cpp_typesupport_target}") -endif() - if(BUILD_TESTING) ament_add_ros_isolated_gtest(test_${PROJECT_NAME} test/test_node_interface.cpp diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/node.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/node.hpp index 4c1f10c355226..8a52ae70231d0 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/node.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/node.hpp @@ -21,10 +21,9 @@ #include #include -#include -#include #include +#include #include #include #include @@ -45,8 +44,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 tier4_planning_msgs::msg::VelocityLimit; @@ -125,13 +122,14 @@ class BehaviorVelocityPlannerNode : public rclcpp::Node BehaviorVelocityPlannerManager planner_manager_; bool is_driving_forward_{true}; - rclcpp::Service::SharedPtr srv_load_plugin_; - rclcpp::Service::SharedPtr srv_unload_plugin_; + rclcpp::Service::SharedPtr srv_load_plugin_; + rclcpp::Service::SharedPtr srv_unload_plugin_; void onUnloadPlugin( - const UnloadPlugin::Request::SharedPtr request, - const UnloadPlugin::Response::SharedPtr response); + const autoware_internal_debug_msgs::srv::String::Request::SharedPtr request, + const autoware_internal_debug_msgs::srv::String::Response::SharedPtr response); void onLoadPlugin( - const LoadPlugin::Request::SharedPtr request, const LoadPlugin::Response::SharedPtr response); + const autoware_internal_debug_msgs::srv::String::Request::SharedPtr request, + const autoware_internal_debug_msgs::srv::String::Response::SharedPtr response); // mutex for planner_data_ std::mutex mutex_; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/package.xml index 04b4cf0328fd1..eca49a09c8a56 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/package.xml @@ -32,9 +32,8 @@ autoware_cmake eigen3_cmake_module - rosidl_default_generators - autoware_behavior_velocity_planner_common + autoware_internal_debug_msgs autoware_lanelet2_extension autoware_map_msgs autoware_motion_utils @@ -60,15 +59,11 @@ tier4_v2x_msgs visualization_msgs - rosidl_default_runtime - ament_cmake_ros ament_lint_auto autoware_lint_common - rosidl_interface_packages - ament_cmake diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.cpp index 5f78e4c670b49..1e3e691076b8a 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.cpp @@ -70,9 +70,9 @@ BehaviorVelocityPlannerNode::BehaviorVelocityPlannerNode(const rclcpp::NodeOptio this->create_subscription( "~/input/path_with_lane_id", 1, std::bind(&BehaviorVelocityPlannerNode::onTrigger, this, _1)); - srv_load_plugin_ = create_service( + srv_load_plugin_ = create_service( "~/service/load_plugin", std::bind(&BehaviorVelocityPlannerNode::onLoadPlugin, this, _1, _2)); - srv_unload_plugin_ = create_service( + srv_unload_plugin_ = create_service( "~/service/unload_plugin", std::bind(&BehaviorVelocityPlannerNode::onUnloadPlugin, this, _1, _2)); @@ -112,19 +112,19 @@ BehaviorVelocityPlannerNode::BehaviorVelocityPlannerNode(const rclcpp::NodeOptio } void BehaviorVelocityPlannerNode::onLoadPlugin( - const LoadPlugin::Request::SharedPtr request, - [[maybe_unused]] const LoadPlugin::Response::SharedPtr response) + const autoware_internal_debug_msgs::srv::String::Request::SharedPtr request, + [[maybe_unused]] const autoware_internal_debug_msgs::srv::String::Response::SharedPtr response) { std::unique_lock lk(mutex_); - planner_manager_.launchScenePlugin(*this, request->plugin_name); + planner_manager_.launchScenePlugin(*this, request->data); } void BehaviorVelocityPlannerNode::onUnloadPlugin( - const UnloadPlugin::Request::SharedPtr request, - [[maybe_unused]] const UnloadPlugin::Response::SharedPtr response) + const autoware_internal_debug_msgs::srv::String::Request::SharedPtr request, + [[maybe_unused]] const autoware_internal_debug_msgs::srv::String::Response::SharedPtr response) { std::unique_lock lk(mutex_); - planner_manager_.removeScenePlugin(*this, request->plugin_name); + planner_manager_.removeScenePlugin(*this, request->data); } void BehaviorVelocityPlannerNode::onParam() diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/srv/LoadPlugin.srv b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/srv/LoadPlugin.srv deleted file mode 100644 index 7b9f08ab0ded8..0000000000000 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/srv/LoadPlugin.srv +++ /dev/null @@ -1,3 +0,0 @@ -string plugin_name ---- -bool success diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/srv/UnloadPlugin.srv b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/srv/UnloadPlugin.srv deleted file mode 100644 index 7b9f08ab0ded8..0000000000000 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/srv/UnloadPlugin.srv +++ /dev/null @@ -1,3 +0,0 @@ -string plugin_name ---- -bool success diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/CMakeLists.txt index da2f4ce33ff60..a2f35ada11b5e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/CMakeLists.txt +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/CMakeLists.txt @@ -17,10 +17,11 @@ ament_auto_add_library(${PROJECT_NAME} SHARED if(BUILD_TESTING) ament_add_ros_isolated_gtest(test_${PROJECT_NAME} - tests/test_dynamic_obstacle.cpp - tests/test_path_utils.cpp - tests/test_utils.cpp - tests/test_state_machine.cpp + test/test_dynamic_obstacle.cpp + test/test_path_utils.cpp + test/test_utils.cpp + test/test_state_machine.cpp + test/test_node_interface.cpp ) target_link_libraries(test_${PROJECT_NAME} autoware_behavior_velocity_run_out_module diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/package.xml index b3ced8b2e9b9f..18db8281356f8 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/package.xml @@ -20,6 +20,7 @@ eigen3_cmake_module autoware_behavior_velocity_crosswalk_module + autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_internal_debug_msgs autoware_motion_utils diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/tests/test_dynamic_obstacle.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/test/test_dynamic_obstacle.cpp similarity index 100% rename from planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/tests/test_dynamic_obstacle.cpp rename to planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/test/test_dynamic_obstacle.cpp diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/test/test_node_interface.cpp new file mode 100644 index 0000000000000..75bf59751ed44 --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/test/test_node_interface.cpp @@ -0,0 +1,64 @@ +// 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 + +#include + +#include +#include +#include +#include + +namespace autoware::behavior_velocity_planner +{ +TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID) +{ + rclcpp::init(0, nullptr); + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode({}); + + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test with nominal path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + // test with empty path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node)); + rclcpp::shutdown(); +} + +TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) +{ + rclcpp::init(0, nullptr); + + const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{ + "run_out", "autoware::behavior_velocity_planner::RunOutModulePlugin"}}; + + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec); + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test for normal trajectory + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + + // make sure behavior_path_planner is running + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node)); + + rclcpp::shutdown(); +} +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/tests/test_path_utils.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/test/test_path_utils.cpp similarity index 100% rename from planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/tests/test_path_utils.cpp rename to planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/test/test_path_utils.cpp diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/tests/test_state_machine.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/test/test_state_machine.cpp similarity index 100% rename from planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/tests/test_state_machine.cpp rename to planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/test/test_state_machine.cpp diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/tests/test_utils.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/test/test_utils.cpp similarity index 100% rename from planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/tests/test_utils.cpp rename to planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/test/test_utils.cpp diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/CMakeLists.txt index f4528f0d13cf4..a187b4cda9459 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/CMakeLists.txt +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/CMakeLists.txt @@ -14,6 +14,7 @@ ament_auto_add_library(${PROJECT_NAME} SHARED if(BUILD_TESTING) ament_add_ros_isolated_gtest(test_${PROJECT_NAME} test/test_scene.cpp + test/test_node_interface.cpp ) target_link_libraries(test_${PROJECT_NAME} gtest_main diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/package.xml index fd4b9f83ae998..849ab3915c649 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/package.xml @@ -20,6 +20,7 @@ autoware_cmake eigen3_cmake_module + autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_lanelet2_extension autoware_motion_utils diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/test/test_node_interface.cpp new file mode 100644 index 0000000000000..c6d6ff638cfbb --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/test/test_node_interface.cpp @@ -0,0 +1,64 @@ +// 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 + +#include + +#include +#include +#include +#include + +namespace autoware::behavior_velocity_planner +{ +TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID) +{ + rclcpp::init(0, nullptr); + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode({}); + + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test with nominal path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + // test with empty path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node)); + rclcpp::shutdown(); +} + +TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) +{ + rclcpp::init(0, nullptr); + + const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{ + "stop_line", "autoware::behavior_velocity_planner::StopLineModulePlugin"}}; + + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec); + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test for normal trajectory + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + + // make sure behavior_path_planner is running + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node)); + + rclcpp::shutdown(); +} +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/CMakeLists.txt index 6370dd5e6c21d..02ed192459970 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/CMakeLists.txt +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/CMakeLists.txt @@ -15,6 +15,7 @@ ament_auto_add_library(${PROJECT_NAME} SHARED if(BUILD_TESTING) ament_add_ros_isolated_gtest(test_${PROJECT_NAME} test/test_utils.cpp + test/test_node_interface.cpp ) target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME} diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/package.xml index ebc45d372f92d..4bc7a15cddc48 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/package.xml @@ -19,6 +19,7 @@ eigen3_cmake_module autoware_adapi_v1_msgs + autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_behavior_velocity_rtc_interface autoware_lanelet2_extension diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/test/test_node_interface.cpp new file mode 100644 index 0000000000000..e24c2dab5dab9 --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_module/test/test_node_interface.cpp @@ -0,0 +1,64 @@ +// 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 + +#include + +#include +#include +#include +#include + +namespace autoware::behavior_velocity_planner +{ +TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID) +{ + rclcpp::init(0, nullptr); + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode({}); + + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test with nominal path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + // test with empty path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node)); + rclcpp::shutdown(); +} + +TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) +{ + rclcpp::init(0, nullptr); + + const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{ + "traffic_light", "autoware::behavior_velocity_planner::TrafficLightModulePlugin"}}; + + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec); + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test for normal trajectory + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + + // make sure behavior_path_planner is running + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node)); + + rclcpp::shutdown(); +} +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/package.xml index 6d3bc68242d7c..056f84a970c58 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/package.xml @@ -18,6 +18,7 @@ autoware_cmake autoware_adapi_v1_msgs + autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_lanelet2_extension autoware_motion_utils diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/test/test_node_interface.cpp new file mode 100644 index 0000000000000..9cb6bbfd40639 --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/test/test_node_interface.cpp @@ -0,0 +1,65 @@ +// 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 + +#include + +#include +#include +#include +#include + +namespace autoware::behavior_velocity_planner +{ +TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID) +{ + rclcpp::init(0, nullptr); + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode({}); + + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test with nominal path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + // test with empty path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node)); + rclcpp::shutdown(); +} + +TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) +{ + rclcpp::init(0, nullptr); + + const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{ + "virtual_traffic_light", + "autoware::behavior_velocity_planner::VirtualTrafficLightModulePlugin"}}; + + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec); + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test for normal trajectory + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + + // make sure behavior_path_planner is running + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node)); + + rclcpp::shutdown(); +} +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/CMakeLists.txt index 11504d9c8999c..8b11fdce7283e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/CMakeLists.txt +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/CMakeLists.txt @@ -11,4 +11,14 @@ ament_auto_add_library(${PROJECT_NAME} SHARED src/scene_walkway.cpp ) +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + ament_lint_auto_find_test_dependencies() + file(GLOB_RECURSE TEST_SOURCES test/*.cpp) + ament_add_ros_isolated_gtest(test_${PROJECT_NAME} + ${TEST_SOURCES} + ) + target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME}) +endif() + ament_auto_package(INSTALL_TO_SHARE config) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/package.xml index 5f1aea22855a4..857d9b524beb0 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/package.xml @@ -18,6 +18,7 @@ autoware_cmake autoware_behavior_velocity_crosswalk_module + autoware_behavior_velocity_planner autoware_behavior_velocity_planner_common autoware_lanelet2_extension autoware_motion_utils @@ -31,6 +32,7 @@ rclcpp visualization_msgs + ament_cmake_ros ament_lint_auto autoware_lint_common diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/test/test_node_interface.cpp new file mode 100644 index 0000000000000..e0b7fa5c31965 --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/test/test_node_interface.cpp @@ -0,0 +1,64 @@ +// 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 + +#include + +#include +#include +#include +#include + +namespace autoware::behavior_velocity_planner +{ +TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID) +{ + rclcpp::init(0, nullptr); + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode({}); + + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test with nominal path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + // test with empty path_with_lane_id + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithAbnormalPathWithLaneId(test_target_node)); + rclcpp::shutdown(); +} + +TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) +{ + rclcpp::init(0, nullptr); + + const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{ + "walkway", "autoware::behavior_velocity_planner::WalkwayModulePlugin"}}; + + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); + auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec); + autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + + // test for normal trajectory + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); + + // make sure behavior_path_planner is running + EXPECT_GE(test_manager->getReceivedTopicNum(), 1); + + ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testOffTrackFromPathWithLaneId(test_target_node)); + + rclcpp::shutdown(); +} +} // namespace autoware::behavior_velocity_planner From a8a843a6cf7645a125658bdeb8785bd9d5fa71ac Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Mon, 6 Jan 2025 11:59:04 +0900 Subject: [PATCH 38/77] fix(simple_planning_simulator): fix bugprone-branch-clone (#9725) * fix: bugprone-error Signed-off-by: kobayu858 * fix: build error Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../simple_planning_simulator_core.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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 d61654c32af02..8c95e144b3f8d 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 @@ -585,9 +585,7 @@ void SimplePlanningSimulator::set_input(const InputCommand & cmd, const double a std::visit( [this, acc_by_slope](auto && arg) { using T = std::decay_t; - if constexpr (std::is_same_v) { - set_input(arg, acc_by_slope); - } else if constexpr (std::is_same_v) { + if constexpr (std::is_same_v || std::is_same_v) { set_input(arg, acc_by_slope); } else { throw std::invalid_argument("Invalid input command type"); @@ -640,7 +638,7 @@ void SimplePlanningSimulator::set_input(const Control & cmd, const double acc_by input << vel, steer; } else if ( // NOLINT vehicle_model_type_ == VehicleModelType::IDEAL_STEER_ACC || - vehicle_model_type_ == VehicleModelType::DELAY_STEER_ACC) { + vehicle_model_type_ == VehicleModelType::DELAY_STEER_ACC) { // NOLINT input << combined_acc, steer; } else if ( // NOLINT vehicle_model_type_ == VehicleModelType::IDEAL_STEER_ACC_GEARED || From 4a181d6a6d09071a22a99ce71a4ad2c3d18c827e Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Mon, 6 Jan 2025 12:23:41 +0900 Subject: [PATCH 39/77] fix(autoware_behavior_velocity_occlusion_spot_module): fix bugprone-macro-parentheses (#9712) * fix: bugprone-error Signed-off-by: kobayu858 * fix: fmt Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../src/scene_occlusion_spot.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.cpp index 522e83390b0f1..c5d1cf61614b2 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_occlusion_spot_module/src/scene_occlusion_spot.cpp @@ -36,7 +36,7 @@ // turn on only when debugging. #define DEBUG_PRINT(enable, n, x) \ if (enable) { \ - const std::string time_msg = n + std::to_string(x); \ + const std::string time_msg = (n) + std::to_string(x); \ RCLCPP_INFO_STREAM_THROTTLE(logger_, *clock_, 3000, time_msg); \ } From ca2d4e7774abe3a8929fecbcfd17c2f1bb7da55f Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Mon, 6 Jan 2025 16:40:09 +0900 Subject: [PATCH 40/77] fix(autoware_carla_interface): fix lidar topic name (#9645) Signed-off-by: Maxime CLEMENT --- .../src/autoware_carla_interface/carla_ros.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simulator/autoware_carla_interface/src/autoware_carla_interface/carla_ros.py b/simulator/autoware_carla_interface/src/autoware_carla_interface/carla_ros.py index a4f8dee7af1a0..9b978b66feefb 100644 --- a/simulator/autoware_carla_interface/src/autoware_carla_interface/carla_ros.py +++ b/simulator/autoware_carla_interface/src/autoware_carla_interface/carla_ros.py @@ -147,7 +147,7 @@ def __init__(self): elif sensor["type"] == "sensor.lidar.ray_cast": if sensor["id"] in self.sensor_frequencies: self.pub_lidar[sensor["id"]] = self.ros2_node.create_publisher( - PointCloud2, f'/sensing/lidar/{sensor["id"]}/pointcloud', 10 + PointCloud2, f'/sensing/lidar/{sensor["id"]}/pointcloud_before_sync', 10 ) else: self.ros2_node.get_logger().info( From d86c46a35882e75051a0abcba55853da78c1d21f Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 6 Jan 2025 17:42:32 +0900 Subject: [PATCH 41/77] feat(motion_velocity_planner): introduce Object/Pointcloud structure in PlannerData (#9812) * feat: new object/pointcloud struct in motion velocity planner Signed-off-by: Takayuki Murooka * update planner_data Signed-off-by: Takayuki Murooka * modify modules Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../src/dynamic_obstacle_stop_module.cpp | 2 +- .../src/object_filtering.cpp | 20 +++--- .../src/object_filtering.hpp | 4 +- .../test/test_object_filtering.cpp | 6 +- .../src/obstacle_velocity_limiter.cpp | 2 +- .../src/obstacle_velocity_limiter.hpp | 2 +- .../src/obstacle_velocity_limiter_module.cpp | 6 +- .../src/obstacles.cpp | 14 ++-- .../src/obstacles.hpp | 4 +- .../test/test_collision_distance.cpp | 9 ++- .../src/filter_predicted_objects.cpp | 25 +++---- .../planner_data.hpp | 66 ++++++++++++++++++- .../src/node.cpp | 5 +- 13 files changed, 121 insertions(+), 44 deletions(-) diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/dynamic_obstacle_stop_module.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/dynamic_obstacle_stop_module.cpp index 40aa985ee42e2..7fd5834ba2cfa 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/dynamic_obstacle_stop_module.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/dynamic_obstacle_stop_module.cpp @@ -131,7 +131,7 @@ VelocityPlanningResult DynamicObstacleStopModule::plan( ? 0.0 : params_.hysteresis; const auto dynamic_obstacles = dynamic_obstacle_stop::filter_predicted_objects( - planner_data->predicted_objects, ego_data, params_, hysteresis); + planner_data->objects, ego_data, params_, hysteresis); const auto preprocessing_duration_us = stopwatch.toc("preprocessing"); diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/object_filtering.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/object_filtering.cpp index 2ab3c09e64edd..0726fdba02de0 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/object_filtering.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/object_filtering.cpp @@ -96,20 +96,22 @@ bool is_unavoidable( }; std::vector filter_predicted_objects( - const autoware_perception_msgs::msg::PredictedObjects & objects, const EgoData & ego_data, + const std::vector & objects, const EgoData & ego_data, const PlannerParam & params, const double hysteresis) { std::vector filtered_objects; - for (const auto & object : objects.objects) { - const auto is_not_too_slow = object.kinematics.initial_twist_with_covariance.twist.linear.x >= - params.minimum_object_velocity; + for (const auto & object : objects) { + const auto & predicted_object = object.predicted_object; + const auto is_not_too_slow = + predicted_object.kinematics.initial_twist_with_covariance.twist.linear.x >= + params.minimum_object_velocity; if ( - is_vehicle(object) && is_not_too_slow && - is_in_range(object, ego_data.trajectory, params, hysteresis) && - is_not_too_close(object, ego_data, params.ego_longitudinal_offset) && + is_vehicle(predicted_object) && is_not_too_slow && + is_in_range(predicted_object, ego_data.trajectory, params, hysteresis) && + is_not_too_close(predicted_object, ego_data, params.ego_longitudinal_offset) && (!params.ignore_unavoidable_collisions || - !is_unavoidable(object, ego_data.pose, ego_data.earliest_stop_pose, params))) - filtered_objects.push_back(object); + !is_unavoidable(predicted_object, ego_data.pose, ego_data.earliest_stop_pose, params))) + filtered_objects.push_back(predicted_object); } return filtered_objects; } diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/object_filtering.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/object_filtering.hpp index d20d6354066c6..6024cde019489 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/object_filtering.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/object_filtering.hpp @@ -17,6 +17,8 @@ #include "types.hpp" +#include + #include #include @@ -74,7 +76,7 @@ bool is_unavoidable( /// @param hysteresis [m] extra distance threshold used for filtering /// @return filtered predicted objects std::vector filter_predicted_objects( - const autoware_perception_msgs::msg::PredictedObjects & objects, const EgoData & ego_data, + const std::vector & objects, const EgoData & ego_data, const PlannerParam & params, const double hysteresis); } // namespace autoware::motion_velocity_planner::dynamic_obstacle_stop diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/test/test_object_filtering.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/test/test_object_filtering.cpp index 3fa179903c23f..5993f81c7a8f1 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/test/test_object_filtering.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/test/test_object_filtering.cpp @@ -14,6 +14,7 @@ #include "../src/object_filtering.hpp" +#include #include #include @@ -26,6 +27,8 @@ #include #include +#include + TEST(TestObjectFiltering, isVehicle) { using autoware::motion_velocity_planner::dynamic_obstacle_stop::is_vehicle; @@ -202,8 +205,7 @@ TEST(TestObjectFiltering, isUnavoidable) TEST(TestObjectFiltering, filterPredictedObjects) { using autoware::motion_velocity_planner::dynamic_obstacle_stop::filter_predicted_objects; - autoware_perception_msgs::msg::PredictedObjects objects; - autoware_perception_msgs::msg::PredictedObject object; + std::vector objects; autoware::motion_velocity_planner::dynamic_obstacle_stop::EgoData ego_data; autoware::motion_velocity_planner::dynamic_obstacle_stop::PlannerParam params; double hysteresis{}; diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacle_velocity_limiter.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacle_velocity_limiter.cpp index e501b756af6a1..9be7f52bca99a 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacle_velocity_limiter.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacle_velocity_limiter.cpp @@ -29,7 +29,7 @@ namespace autoware::motion_velocity_planner::obstacle_velocity_limiter { multi_polygon_t createPolygonMasks( - const autoware_perception_msgs::msg::PredictedObjects & dynamic_obstacles, const double buffer, + const std::vector & dynamic_obstacles, const double buffer, const double min_vel) { return createObjectPolygons(dynamic_obstacles, buffer, min_vel); diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacle_velocity_limiter.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacle_velocity_limiter.hpp index d7d2de63b33f8..b0cdb1f802e0f 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacle_velocity_limiter.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacle_velocity_limiter.hpp @@ -56,7 +56,7 @@ void calculateSteeringAngles(TrajectoryPoints & trajectory, const double wheel_b /// @param[in] min_vel minimum velocity for an object to be masked /// @return polygon masks around dynamic objects multi_polygon_t createPolygonMasks( - const autoware_perception_msgs::msg::PredictedObjects & dynamic_obstacles, const double buffer, + const std::vector & dynamic_obstacles, const double buffer, const double min_vel); /// @brief create footprint polygons from projection lines diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacle_velocity_limiter_module.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacle_velocity_limiter_module.cpp index 532cc834c19ac..1923f023552e3 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacle_velocity_limiter_module.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacle_velocity_limiter_module.cpp @@ -170,7 +170,7 @@ VelocityPlanningResult ObstacleVelocityLimiterModule::plan( const auto preprocessing_us = stopwatch.toc("preprocessing"); stopwatch.tic("obstacles"); obstacle_masks.negative_masks = obstacle_velocity_limiter::createPolygonMasks( - planner_data->predicted_objects, obstacle_params_.dynamic_obstacles_buffer, + planner_data->objects, obstacle_params_.dynamic_obstacles_buffer, obstacle_params_.dynamic_obstacles_min_vel); if (obstacle_params_.ignore_on_path) obstacle_masks.negative_masks.push_back(obstacle_velocity_limiter::createTrajectoryFootprint( @@ -189,8 +189,8 @@ VelocityPlanningResult ObstacleVelocityLimiterModule::plan( obstacle_masks.positive_mask = obstacle_velocity_limiter::createEnvelopePolygon(footprint_polygons); obstacle_velocity_limiter::addSensorObstacles( - obstacles, planner_data->occupancy_grid, planner_data->no_ground_pointcloud, obstacle_masks, - obstacle_params_); + obstacles, planner_data->occupancy_grid, planner_data->no_ground_pointcloud.pointcloud, + obstacle_masks, obstacle_params_); } const auto obstacles_us = stopwatch.toc("obstacles"); autoware::motion_utils::VirtualWalls virtual_walls; diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacles.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacles.cpp index 47215ee5cb0c4..187f028dc5969 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacles.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacles.cpp @@ -25,6 +25,7 @@ #include #include +#include namespace autoware::motion_velocity_planner::obstacle_velocity_limiter { @@ -58,17 +59,18 @@ polygon_t createObjectPolygon( } multi_polygon_t createObjectPolygons( - const autoware_perception_msgs::msg::PredictedObjects & objects, const double buffer, - const double min_velocity) + const std::vector & objects, const double buffer, const double min_velocity) { multi_polygon_t polygons; - for (const auto & object : objects.objects) { + for (const auto & object : objects) { + const auto & predicted_object = object.predicted_object; const double obj_vel_norm = std::hypot( - object.kinematics.initial_twist_with_covariance.twist.linear.x, - object.kinematics.initial_twist_with_covariance.twist.linear.y); + predicted_object.kinematics.initial_twist_with_covariance.twist.linear.x, + predicted_object.kinematics.initial_twist_with_covariance.twist.linear.y); if (min_velocity <= obj_vel_norm) { polygons.push_back(createObjectPolygon( - object.kinematics.initial_pose_with_covariance.pose, object.shape.dimensions, buffer)); + predicted_object.kinematics.initial_pose_with_covariance.pose, + predicted_object.shape.dimensions, buffer)); } } return polygons; diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacles.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacles.hpp index 7e4704ba6818c..a98d92994f497 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacles.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/obstacles.hpp @@ -18,6 +18,7 @@ #include "parameters.hpp" #include "types.hpp" +#include #include #include @@ -163,8 +164,7 @@ polygon_t createObjectPolygon( /// @param [in] min_velocity objects with velocity lower will be ignored /// @return polygons of the objects multi_polygon_t createObjectPolygons( - const autoware_perception_msgs::msg::PredictedObjects & objects, const double buffer, - const double min_velocity); + const std::vector & objects, const double buffer, const double min_velocity); /// @brief add obstacles obtained from sensors to the given Obstacles object /// @param[out] obstacles Obstacles object in which to add the sensor obstacles diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/test/test_collision_distance.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/test/test_collision_distance.cpp index ac07c62f62cf7..023ae83774917 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/test/test_collision_distance.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/test/test_collision_distance.cpp @@ -15,6 +15,7 @@ #include "../src/distance.hpp" #include "../src/obstacles.hpp" #include "../src/types.hpp" +#include "autoware/motion_velocity_planner_common/planner_data.hpp" #include "autoware/universe_utils/geometry/geometry.hpp" #include @@ -27,6 +28,7 @@ #include #include +#include const auto point_in_polygon = [](const auto x, const auto y, const auto & polygon) { return std::find_if(polygon.outer().begin(), polygon.outer().end(), [=](const auto & pt) { @@ -387,11 +389,12 @@ TEST(TestCollisionDistance, arcDistance) TEST(TestCollisionDistance, createObjPolygons) { + using autoware::motion_velocity_planner::PlannerData; using autoware::motion_velocity_planner::obstacle_velocity_limiter::createObjectPolygons; using autoware_perception_msgs::msg::PredictedObject; using autoware_perception_msgs::msg::PredictedObjects; - PredictedObjects objects; + std::vector objects; auto polygons = createObjectPolygons(objects, 0.0, 0.0); EXPECT_TRUE(polygons.empty()); @@ -404,7 +407,7 @@ TEST(TestCollisionDistance, createObjPolygons) object1.kinematics.initial_twist_with_covariance.twist.linear.x = 0.0; object1.shape.dimensions.x = 1.0; object1.shape.dimensions.y = 1.0; - objects.objects.push_back(object1); + objects.push_back(PlannerData::Object(object1)); polygons = createObjectPolygons(objects, 0.0, 1.0); EXPECT_TRUE(polygons.empty()); @@ -431,7 +434,7 @@ TEST(TestCollisionDistance, createObjPolygons) object2.kinematics.initial_twist_with_covariance.twist.linear.x = 2.0; object2.shape.dimensions.x = 2.0; object2.shape.dimensions.y = 1.0; - objects.objects.push_back(object2); + objects.push_back(PlannerData::Object(object2)); polygons = createObjectPolygons(objects, 0.0, 2.0); ASSERT_EQ(polygons.size(), 1ul); 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 f9ba7f4af9877..a6c8368c20571 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 @@ -106,23 +106,26 @@ 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) { + filtered_objects.header = planner_data.predicted_objects_header; + for (const auto & object : planner_data.objects) { + const auto & predicted_object = object.predicted_object; 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(); + std::find_if( + predicted_object.classification.begin(), predicted_object.classification.end(), + [](const auto & c) { + return c.label == autoware_perception_msgs::msg::ObjectClassification::PEDESTRIAN; + }) != predicted_object.classification.end(); if (is_pedestrian) continue; const auto is_coming_from_behind = motion_utils::calcSignedArcLength( ego_data.trajectory_points, 0UL, - object.kinematics.initial_pose_with_covariance.pose.position) < 0.0; + predicted_object.kinematics.initial_pose_with_covariance.pose.position) < 0.0; if (params.objects_ignore_behind_ego && is_coming_from_behind) { continue; } - auto filtered_object = object; + auto filtered_object = predicted_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); @@ -130,10 +133,10 @@ autoware_perception_msgs::msg::PredictedObjects filter_predicted_objects( 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); + lat_offset_to_current_ego <= predicted_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; }; auto & predicted_paths = filtered_object.kinematics.predicted_paths; 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 9ef3bf5c7f756..07c8e1580e4f0 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 @@ -39,6 +39,7 @@ #include #include #include +#include namespace autoware::motion_velocity_planner { @@ -54,11 +55,72 @@ struct PlannerData { } + struct Object + { + public: + Object() = default; + explicit Object(const autoware_perception_msgs::msg::PredictedObject & arg_predicted_object) + : predicted_object(arg_predicted_object) + { + } + + autoware_perception_msgs::msg::PredictedObject predicted_object; + // double get_lon_vel_relative_to_traj() + // { + // if (!lon_vel_relative_to_traj) { + // lon_vel_relative_to_traj = 0.0; + // } + // return *lon_vel_relative_to_traj; + // } + // double get_lat_vel_relative_to_traj() + // { + // if (!lat_vel_relative_to_traj) { + // lat_vel_relative_to_traj = 0.0; + // } + // return *lat_vel_relative_to_traj; + // } + + private: + // TODO(murooka) implement the following variables and their functions. + // std::optional dist_to_traj_poly{std::nullopt}; + // std::optional dist_to_traj_lateral{std::nullopt}; + // std::optional dist_from_ego_longitudinal{std::nullopt}; + // std::optional lon_vel_relative_to_traj{std::nullopt}; + // std::optional lat_vel_relative_to_traj{std::nullopt}; + }; + + struct Pointcloud + { + public: + Pointcloud() = default; + explicit Pointcloud(const pcl::PointCloud & arg_pointcloud) + : pointcloud(arg_pointcloud) + { + } + + pcl::PointCloud pointcloud; + + private: + // NOTE: clustered result will be added. + }; + + void process_predicted_objects( + const autoware_perception_msgs::msg::PredictedObjects & predicted_objects) + { + predicted_objects_header = predicted_objects.header; + + objects.clear(); + for (const auto & predicted_object : predicted_objects.objects) { + objects.push_back(Object(predicted_object)); + } + } + // msgs from callbacks that are used for data-ready nav_msgs::msg::Odometry current_odometry; geometry_msgs::msg::AccelWithCovarianceStamped current_acceleration; - autoware_perception_msgs::msg::PredictedObjects predicted_objects; - pcl::PointCloud no_ground_pointcloud; + std_msgs::msg::Header predicted_objects_header; + std::vector objects; + Pointcloud no_ground_pointcloud; nav_msgs::msg::OccupancyGrid occupancy_grid; std::shared_ptr route_handler; 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 cefc84836beda..a78ab1489e080 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 @@ -161,13 +161,14 @@ bool MotionVelocityPlannerNode::update_planner_data( 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; + planner_data_.process_predicted_objects(*predicted_objects_ptr); processing_times["update_planner_data.pred_obj"] = sw.toc(true); 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; + if (no_ground_pointcloud) + planner_data_.no_ground_pointcloud = PlannerData::Pointcloud(*no_ground_pointcloud); } processing_times["update_planner_data.pcd"] = sw.toc(true); From 7fb4c1bd29c657847f366eb8853c016729f753a2 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 6 Jan 2025 22:01:40 +0900 Subject: [PATCH 42/77] feat(behavior_velocity_planner): remove virtual traffic light dependency from behavior_velocity_planner and behavior_velocity_planner_common (#9746) * feat: remove-virtual-traffic-light-dependency-from-plugin-manager Signed-off-by: Takayuki Murooka * build passed Signed-off-by: Takayuki Murooka * fix test Signed-off-by: Takayuki Murooka * fix test Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix typo Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../behavior_velocity_planner/node.hpp | 4 -- .../package.xml | 1 - .../src/node.cpp | 3 -- .../src/test_utils.cpp | 2 - .../planner_data.hpp | 2 - .../scene_module_interface.hpp | 26 ------------ .../package.xml | 1 - .../src/manager.cpp | 40 ++++++++++++++++++- .../src/manager.hpp | 18 ++++++++- .../src/scene.cpp | 25 ++++++++++-- .../src/scene.hpp | 14 +++++++ .../test/test_node_interface.cpp | 11 ++++- 12 files changed, 100 insertions(+), 47 deletions(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/node.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/node.hpp index 8a52ae70231d0..472538406c382 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/node.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/include/autoware/behavior_velocity_planner/node.hpp @@ -81,10 +81,6 @@ class BehaviorVelocityPlannerNode : public rclcpp::Node autoware_perception_msgs::msg::TrafficLightGroupArray> sub_traffic_signals_{this, "~/input/traffic_signals"}; - autoware::universe_utils::InterProcessPollingSubscriber< - tier4_v2x_msgs::msg::VirtualTrafficLightStateArray> - sub_virtual_traffic_light_states_{this, "~/input/virtual_traffic_light_states"}; - autoware::universe_utils::InterProcessPollingSubscriber sub_occupancy_grid_{this, "~/input/occupancy_grid"}; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/package.xml index eca49a09c8a56..c40d80c2bf998 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/package.xml @@ -56,7 +56,6 @@ tf2_geometry_msgs tf2_ros tier4_planning_msgs - tier4_v2x_msgs visualization_msgs ament_cmake_ros diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.cpp index 1e3e691076b8a..443bfebe2a3eb 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/node.cpp @@ -271,9 +271,6 @@ bool BehaviorVelocityPlannerNode::processData(rclcpp::Clock clock) planner_data_.route_handler_ = std::make_shared(*map_data); } - // optional data - getData(planner_data_.virtual_traffic_light_states, sub_virtual_traffic_light_states_); - // planner_data_.external_velocity_limit is std::optional type variable. const auto external_velocity_limit = sub_external_velocity_limit_.takeData(); if (external_velocity_limit) { diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/test_utils.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/test_utils.cpp index ee1bb8f89fc46..8b9f39e97d22b 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/test_utils.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/src/test_utils.cpp @@ -113,8 +113,6 @@ void publishMandatoryTopics( test_target_node, "behavior_velocity_planner_node/input/traffic_signals"); test_manager->publishMaxVelocity( test_target_node, "behavior_velocity_planner_node/input/external_velocity_limit_mps"); - test_manager->publishVirtualTrafficLightState( - test_target_node, "behavior_velocity_planner_node/input/virtual_traffic_light_states"); test_manager->publishOccupancyGrid( test_target_node, "behavior_velocity_planner_node/input/occupancy_grid"); } diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/planner_data.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/planner_data.hpp index 983aaec2acf4f..f8b37999cb6bf 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/planner_data.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/planner_data.hpp @@ -30,7 +30,6 @@ #include #include #include -#include #include #include @@ -64,7 +63,6 @@ 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; bool is_simulation = false; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp index 9dbed9009a93e..d8d640a078267 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp @@ -32,7 +32,6 @@ #include #include #include -#include #include #include @@ -95,17 +94,6 @@ class SceneModuleInterface planner_data_ = planner_data; } - std::optional getInfrastructureCommand() - { - return infrastructure_command_; - } - - void setInfrastructureCommand( - const std::optional & command) - { - infrastructure_command_ = command; - } - void setTimeKeeper(const std::shared_ptr & time_keeper) { time_keeper_ = time_keeper; @@ -123,7 +111,6 @@ class SceneModuleInterface rclcpp::Logger logger_; rclcpp::Clock::SharedPtr clock_; std::shared_ptr planner_data_; - std::optional infrastructure_command_; autoware::motion_utils::VelocityFactorInterface velocity_factor_; std::vector objects_of_interest_; mutable std::shared_ptr time_keeper_; @@ -161,9 +148,6 @@ class SceneModuleManagerInterface std::string("~/virtual_wall/") + module_name, 5); pub_velocity_factor_ = node.create_publisher( std::string("/planning/velocity_factors/") + module_name, 1); - pub_infrastructure_commands_ = - node.create_publisher( - "~/output/infrastructure_commands", 1); processing_time_publisher_ = std::make_shared(&node, "~/debug"); @@ -201,9 +185,6 @@ class SceneModuleManagerInterface velocity_factor_array.header.frame_id = "map"; velocity_factor_array.header.stamp = clock_->now(); - tier4_v2x_msgs::msg::InfrastructureCommandArray infrastructure_command_array; - infrastructure_command_array.stamp = clock_->now(); - for (const auto & scene_module : scene_modules_) { scene_module->resetVelocityFactor(); scene_module->setPlannerData(planner_data_); @@ -215,10 +196,6 @@ class SceneModuleManagerInterface velocity_factor_array.factors.emplace_back(velocity_factor); } - if (const auto command = scene_module->getInfrastructureCommand()) { - infrastructure_command_array.commands.push_back(*command); - } - for (const auto & marker : scene_module->createDebugMarkerArray().markers) { debug_marker_array.markers.push_back(marker); } @@ -227,7 +204,6 @@ class SceneModuleManagerInterface } pub_velocity_factor_->publish(velocity_factor_array); - pub_infrastructure_commands_->publish(infrastructure_command_array); pub_debug_->publish(debug_marker_array); if (is_publish_debug_path_) { tier4_planning_msgs::msg::PathWithLaneId debug_path; @@ -299,8 +275,6 @@ class SceneModuleManagerInterface rclcpp::Publisher::SharedPtr pub_debug_path_; rclcpp::Publisher::SharedPtr pub_velocity_factor_; - rclcpp::Publisher::SharedPtr - pub_infrastructure_commands_; std::shared_ptr processing_time_publisher_; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/package.xml index 002c3362260cc..9f920dff8f166 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/package.xml @@ -45,7 +45,6 @@ tf2_geometry_msgs tf2_ros tier4_planning_msgs - tier4_v2x_msgs visualization_msgs ament_cmake_ros diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.cpp index a51cf9211c21f..3815c83d3b6ab 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.cpp @@ -21,6 +21,8 @@ #include #include +#include + #include #include @@ -53,6 +55,14 @@ VirtualTrafficLightModuleManager::VirtualTrafficLightModuleManager(rclcpp::Node p.check_timeout_after_stop_line = getOrDeclareParameter(node, ns + ".check_timeout_after_stop_line"); } + + sub_virtual_traffic_light_states_ = autoware::universe_utils::InterProcessPollingSubscriber< + tier4_v2x_msgs::msg::VirtualTrafficLightStateArray>:: + create_subscription(&node, "~/input/virtual_traffic_light_states"); + + pub_infrastructure_commands_ = + node.create_publisher( + "~/output/infrastructure_commands", 1); } void VirtualTrafficLightModuleManager::launchNewModules( @@ -89,17 +99,43 @@ void VirtualTrafficLightModuleManager::launchNewModules( } } -std::function &)> +std::function &)> VirtualTrafficLightModuleManager::getModuleExpiredFunction( const tier4_planning_msgs::msg::PathWithLaneId & path) { const auto id_set = planning_utils::getLaneletIdSetOnPath( path, planner_data_->route_handler_->getLaneletMapPtr(), planner_data_->current_odometry->pose); - return [id_set](const std::shared_ptr & scene_module) { + return [id_set](const std::shared_ptr & scene_module) { return id_set.count(scene_module->getModuleId()) == 0; }; } + +void VirtualTrafficLightModuleManager::modifyPathVelocity( + tier4_planning_msgs::msg::PathWithLaneId * path) +{ + // NOTE: virtual traffic light specific implementation + // Since the argument of modifyPathVelocity cannot be changed, the specific information + // of virtual traffic light states is set here. + const auto virtual_traffic_light_states = sub_virtual_traffic_light_states_->takeData(); + for (const auto & scene_module : scene_modules_) { + scene_module->setVirtualTrafficLightStates(virtual_traffic_light_states); + } + + SceneModuleManagerInterface::modifyPathVelocity(path); + + // NOTE: virtual traffic light specific implementation + // publish infrastructure_command_array + tier4_v2x_msgs::msg::InfrastructureCommandArray infrastructure_command_array; + infrastructure_command_array.stamp = clock_->now(); + + for (const auto & scene_module : scene_modules_) { + if (const auto command = scene_module->getInfrastructureCommand()) { + infrastructure_command_array.commands.push_back(*command); + } + } + pub_infrastructure_commands_->publish(infrastructure_command_array); +} } // namespace autoware::behavior_velocity_planner #include diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.hpp index 8e0abc98c90de..aecef0851d8ab 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/manager.hpp @@ -20,16 +20,20 @@ #include #include #include +#include #include #include +#include +#include #include #include namespace autoware::behavior_velocity_planner { -class VirtualTrafficLightModuleManager : public SceneModuleManagerInterface<> +class VirtualTrafficLightModuleManager +: public SceneModuleManagerInterface { public: explicit VirtualTrafficLightModuleManager(rclcpp::Node & node); @@ -38,10 +42,20 @@ class VirtualTrafficLightModuleManager : public SceneModuleManagerInterface<> private: VirtualTrafficLightModule::PlannerParam planner_param_; + + void modifyPathVelocity(tier4_planning_msgs::msg::PathWithLaneId * path) override; + void launchNewModules(const tier4_planning_msgs::msg::PathWithLaneId & path) override; - std::function &)> getModuleExpiredFunction( + std::function &)> getModuleExpiredFunction( const tier4_planning_msgs::msg::PathWithLaneId & path) override; + + autoware::universe_utils::InterProcessPollingSubscriber< + tier4_v2x_msgs::msg::VirtualTrafficLightStateArray>::SharedPtr + sub_virtual_traffic_light_states_; + + rclcpp::Publisher::SharedPtr + pub_infrastructure_commands_; }; class VirtualTrafficLightModulePlugin : public PluginWrapper diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.cpp index 206fb14b6d41c..86239816ed6f2 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.cpp @@ -333,12 +333,12 @@ bool VirtualTrafficLightModule::isNearAnyEndLine(const size_t end_line_idx) std::optional VirtualTrafficLightModule::findCorrespondingState() { - // No message - if (!planner_data_->virtual_traffic_light_states) { + // Note: This variable is set by virtual traffic light's manager. + if (!virtual_traffic_light_states_) { return {}; } - for (const auto & state : planner_data_->virtual_traffic_light_states->states) { + for (const auto & state : virtual_traffic_light_states_->states) { if (state.id == map_data_.instrument_id) { return state; } @@ -457,4 +457,23 @@ void VirtualTrafficLightModule::insertStopVelocityAtEndLine( module_data_.stop_head_pose_at_end_line = calcHeadPose(stop_pose, planner_data_->vehicle_info_.max_longitudinal_offset_m); } + +std::optional +VirtualTrafficLightModule::getInfrastructureCommand() const +{ + return infrastructure_command_; +} + +void VirtualTrafficLightModule::setInfrastructureCommand( + const std::optional & command) +{ + infrastructure_command_ = command; +} + +void VirtualTrafficLightModule::setVirtualTrafficLightStates( + const tier4_v2x_msgs::msg::VirtualTrafficLightStateArray::ConstSharedPtr + virtual_traffic_light_states) +{ + virtual_traffic_light_states_ = virtual_traffic_light_states; +} } // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.hpp index b031ba5b2bb2b..7f37e7078a431 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/src/scene.hpp @@ -17,6 +17,7 @@ #include #include +#include #include #include #include @@ -24,6 +25,9 @@ #include #include +#include +#include + #include #include @@ -84,13 +88,23 @@ class VirtualTrafficLightModule : public SceneModuleInterface visualization_msgs::msg::MarkerArray createDebugMarkerArray() override; autoware::motion_utils::VirtualWalls createVirtualWalls() override; + std::optional getInfrastructureCommand() const; + void setInfrastructureCommand( + const std::optional & command); + + void setVirtualTrafficLightStates( + const tier4_v2x_msgs::msg::VirtualTrafficLightStateArray::ConstSharedPtr + virtual_traffic_light_states); + private: const int64_t lane_id_; const lanelet::autoware::VirtualTrafficLight & reg_elem_; const lanelet::ConstLanelet lane_; const PlannerParam planner_param_; + tier4_v2x_msgs::msg::VirtualTrafficLightStateArray::ConstSharedPtr virtual_traffic_light_states_; State state_{State::NONE}; tier4_v2x_msgs::msg::InfrastructureCommand command_; + std::optional infrastructure_command_; MapData map_data_; ModuleData module_data_; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/test/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/test/test_node_interface.cpp index 9cb6bbfd40639..ab2fd5847c5be 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/test/test_node_interface.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/test/test_node_interface.cpp @@ -26,10 +26,17 @@ namespace autoware::behavior_velocity_planner TEST(PlanningModuleInterfaceTest, NodeTestWithExceptionPathWithLaneID) { rclcpp::init(0, nullptr); + + const auto plugin_info_vec = {autoware::behavior_velocity_planner::PluginInfo{ + "virtual_traffic_light", + "autoware::behavior_velocity_planner::VirtualTrafficLightModulePlugin"}}; + auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); - auto test_target_node = autoware::behavior_velocity_planner::generateNode({}); + auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec); autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + test_manager->publishVirtualTrafficLightState( + test_target_node, "behavior_velocity_planner_node/input/virtual_traffic_light_states"); // test with nominal path_with_lane_id ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); @@ -51,6 +58,8 @@ TEST(PlanningModuleInterfaceTest, NodeTestWithOffTrackEgoPose) auto test_manager = autoware::behavior_velocity_planner::generateTestManager(); auto test_target_node = autoware::behavior_velocity_planner::generateNode(plugin_info_vec); autoware::behavior_velocity_planner::publishMandatoryTopics(test_manager, test_target_node); + test_manager->publishVirtualTrafficLightState( + test_target_node, "behavior_velocity_planner_node/input/virtual_traffic_light_states"); // test for normal trajectory ASSERT_NO_THROW_WITH_ERROR_MSG(test_manager->testWithNominalPathWithLaneId(test_target_node)); From ab845fb7371ca60ef35889c390236abfc3fb4763 Mon Sep 17 00:00:00 2001 From: Kenzo Lobos Tsunekawa Date: Tue, 7 Jan 2025 13:35:44 +0900 Subject: [PATCH 43/77] fix(autoware_lidar_centerpoint): fixed rounding errors that caused illegal memory access (#9795) fix: fixed rounding errors that caused illegal memory address Signed-off-by: Kenzo Lobos-Tsunekawa --- .../lib/preprocess/preprocess_kernel.cu | 2 ++ 1 file changed, 2 insertions(+) diff --git a/perception/autoware_lidar_centerpoint/lib/preprocess/preprocess_kernel.cu b/perception/autoware_lidar_centerpoint/lib/preprocess/preprocess_kernel.cu index f300411a44aad..95ac7b4353e90 100644 --- a/perception/autoware_lidar_centerpoint/lib/preprocess/preprocess_kernel.cu +++ b/perception/autoware_lidar_centerpoint/lib/preprocess/preprocess_kernel.cu @@ -148,6 +148,8 @@ __global__ void generateVoxels_random_kernel( int voxel_idx = floorf((point.x - min_x_range) / pillar_x_size); int voxel_idy = floorf((point.y - min_y_range) / pillar_y_size); + voxel_idx = voxel_idx < 0 ? 0 : voxel_idx >= grid_x_size ? grid_x_size - 1 : voxel_idx; + voxel_idy = voxel_idy < 0 ? 0 : voxel_idy >= grid_y_size ? grid_y_size - 1 : voxel_idy; unsigned int voxel_index = (grid_x_size - 1 - voxel_idx) * grid_y_size + voxel_idy; unsigned int point_id = atomicAdd(&(mask[voxel_index]), 1); From f242fbf91e5d5e55da8e04dc3f8fdecbbf20a6e6 Mon Sep 17 00:00:00 2001 From: Kenzo Lobos Tsunekawa Date: Tue, 7 Jan 2025 13:55:52 +0900 Subject: [PATCH 44/77] fix(autoware_lidar_transfusion): fixed rounding errors that caused illegal memory access (#9796) fix: fixed rounding errors that caused illegal memory address Signed-off-by: Kenzo Lobos-Tsunekawa Co-authored-by: Amadeusz Szymko --- .../lib/preprocess/preprocess_kernel.cu | 2 ++ 1 file changed, 2 insertions(+) diff --git a/perception/autoware_lidar_transfusion/lib/preprocess/preprocess_kernel.cu b/perception/autoware_lidar_transfusion/lib/preprocess/preprocess_kernel.cu index 49131218ff698..a89268e646cfc 100644 --- a/perception/autoware_lidar_transfusion/lib/preprocess/preprocess_kernel.cu +++ b/perception/autoware_lidar_transfusion/lib/preprocess/preprocess_kernel.cu @@ -176,6 +176,8 @@ __global__ void generateVoxels_random_kernel( int voxel_idx = floorf((x - min_x_range) / pillar_x_size); int voxel_idy = floorf((y - min_y_range) / pillar_y_size); + voxel_idx = voxel_idx < 0 ? 0 : voxel_idx >= grid_x_size ? grid_x_size - 1 : voxel_idx; + voxel_idy = voxel_idy < 0 ? 0 : voxel_idy >= grid_y_size ? grid_y_size - 1 : voxel_idy; unsigned int voxel_index = voxel_idy * grid_x_size + voxel_idx; unsigned int point_id = atomicAdd(&(mask[voxel_index]), 1); From 515a21f86808bb15e5fb0601576a966f2abe9614 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara <32741405+kyoichi-sugahara@users.noreply.github.com> Date: Tue, 7 Jan 2025 14:27:14 +0900 Subject: [PATCH 45/77] refactor(autoware_behavior_path_start_planner_module): remove unnecessary time_keeper parameter from pull-out planners (#9827) * refactor(autoware_behavior_path_start_planner_module): remove unnecessary time_keeper parameter from pull-out planners Signed-off-by: Kyoichi Sugahara --------- Signed-off-by: Kyoichi Sugahara --- .../freespace_pull_out.hpp | 5 +---- .../geometric_pull_out.hpp | 3 ++- .../pull_out_planner_base.hpp | 13 +++++++------ .../shift_pull_out.hpp | 3 ++- .../src/freespace_pull_out.cpp | 10 +++------- .../src/start_planner_module.cpp | 3 +-- .../test/test_geometric_pull_out.cpp | 3 +-- .../test/test_shift_pull_out.cpp | 4 +--- 8 files changed, 18 insertions(+), 26 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/freespace_pull_out.hpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/freespace_pull_out.hpp index e358e35ed7794..364d2d31a2577 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/freespace_pull_out.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/freespace_pull_out.hpp @@ -35,10 +35,7 @@ using autoware::freespace_planning_algorithms::RRTStar; class FreespacePullOut : public PullOutPlannerBase { public: - FreespacePullOut( - rclcpp::Node & node, const StartPlannerParameters & parameters, - const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, - std::shared_ptr time_keeper); + FreespacePullOut(rclcpp::Node & node, const StartPlannerParameters & parameters); PlannerType getPlannerType() const override { return PlannerType::FREESPACE; } diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/geometric_pull_out.hpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/geometric_pull_out.hpp index 18d1f3c3b9b81..78eb72183cdf5 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/geometric_pull_out.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/geometric_pull_out.hpp @@ -35,7 +35,8 @@ class GeometricPullOut : public PullOutPlannerBase rclcpp::Node & node, const StartPlannerParameters & parameters, const std::shared_ptr lane_departure_checker, - std::shared_ptr time_keeper); + std::shared_ptr time_keeper = + std::make_shared()); PlannerType getPlannerType() const override { return PlannerType::GEOMETRIC; }; std::optional plan( diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/pull_out_planner_base.hpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/pull_out_planner_base.hpp index f606679e7f2da..dfd972aff9be0 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/pull_out_planner_base.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/pull_out_planner_base.hpp @@ -40,12 +40,13 @@ class PullOutPlannerBase public: explicit PullOutPlannerBase( rclcpp::Node & node, const StartPlannerParameters & parameters, - std::shared_ptr time_keeper) - : time_keeper_(time_keeper) + std::shared_ptr time_keeper = + std::make_shared()) + : parameters_(parameters), + vehicle_info_(autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo()), + vehicle_footprint_(vehicle_info_.createFootprint()), + time_keeper_(time_keeper) { - vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo(); - vehicle_footprint_ = vehicle_info_.createFootprint(); - parameters_ = parameters; } virtual ~PullOutPlannerBase() = default; @@ -68,9 +69,9 @@ class PullOutPlannerBase double collision_check_distance_from_end) const; std::shared_ptr planner_data_; + StartPlannerParameters parameters_; autoware::vehicle_info_utils::VehicleInfo vehicle_info_; LinearRing2d vehicle_footprint_; - StartPlannerParameters parameters_; double collision_check_margin_; mutable std::shared_ptr time_keeper_; diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/shift_pull_out.hpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/shift_pull_out.hpp index 5b4f78b252d22..8da104940d327 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/shift_pull_out.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/shift_pull_out.hpp @@ -36,7 +36,8 @@ class ShiftPullOut : public PullOutPlannerBase explicit ShiftPullOut( rclcpp::Node & node, const StartPlannerParameters & parameters, std::shared_ptr & lane_departure_checker, - std::shared_ptr time_keeper); + std::shared_ptr time_keeper = + std::make_shared()); PlannerType getPlannerType() const override { return PlannerType::SHIFT; }; std::optional plan( diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp index 42698f799c6b3..a089f6a8a83fc 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/freespace_pull_out.cpp @@ -28,15 +28,11 @@ namespace autoware::behavior_path_planner { -FreespacePullOut::FreespacePullOut( - rclcpp::Node & node, const StartPlannerParameters & parameters, - const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, - std::shared_ptr time_keeper) -: PullOutPlannerBase{node, parameters, time_keeper}, - velocity_{parameters.freespace_planner_velocity} +FreespacePullOut::FreespacePullOut(rclcpp::Node & node, const StartPlannerParameters & parameters) +: PullOutPlannerBase{node, parameters}, velocity_{parameters.freespace_planner_velocity} { autoware::freespace_planning_algorithms::VehicleShape vehicle_shape( - vehicle_info, parameters.vehicle_shape_margin); + vehicle_info_, parameters.vehicle_shape_margin); if (parameters.freespace_planner_algorithm == "astar") { use_back_ = parameters.astar_parameters.use_back; planner_ = std::make_unique( diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp index c223390e454d1..f45924b9542dc 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp @@ -90,8 +90,7 @@ StartPlannerModule::StartPlannerModule( } if (parameters_->enable_freespace_planner) { - freespace_planner_ = - std::make_unique(node, *parameters, vehicle_info_, time_keeper_); + freespace_planner_ = std::make_unique(node, *parameters); const auto freespace_planner_period_ns = rclcpp::Rate(1.0).period(); freespace_planner_timer_cb_group_ = node.create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive); diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_geometric_pull_out.cpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_geometric_pull_out.cpp index fb39e186afd4e..dd8bb02c97dea 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_geometric_pull_out.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_geometric_pull_out.cpp @@ -156,9 +156,8 @@ class TestGeometricPullOut : public ::testing::Test parameters->th_moving_object_velocity = th_moving_object_velocity_; parameters->divide_pull_out_path = divide_pull_out_path_; - auto time_keeper = std::make_shared(); geometric_pull_out_ = - std::make_shared(*node_, *parameters, lane_departure_checker_, time_keeper); + std::make_shared(*node_, *parameters, lane_departure_checker_); } void initialize_planner_data() diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_shift_pull_out.cpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_shift_pull_out.cpp index 156cf62f9ac4a..474da055b4de7 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_shift_pull_out.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_shift_pull_out.cpp @@ -139,9 +139,7 @@ class TestShiftPullOut : public ::testing::Test { auto parameters = StartPlannerParameters::init(*node_); - auto time_keeper = std::make_shared(); - shift_pull_out_ = - std::make_shared(*node_, parameters, lane_departure_checker_, time_keeper); + shift_pull_out_ = std::make_shared(*node_, parameters, lane_departure_checker_); } }; From db78285c34a6bdf6b1db0d3666180f680ead15fe Mon Sep 17 00:00:00 2001 From: Atto Armoo <168620037+AA-T4@users.noreply.github.com> Date: Tue, 7 Jan 2025 15:19:04 +0900 Subject: [PATCH 46/77] fix(planning): corrects typos (#9840) * fix(planning): corrects typos Signed-off-by: Atto Armoo <168620037+AA-T4@users.noreply.github.com> * style(pre-commit): autofix --------- Signed-off-by: Atto Armoo <168620037+AA-T4@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../README.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md index f373afc2351bf..efe4a9a353ecc 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/README.md @@ -1,33 +1,33 @@ -## Stop Line +# Stop Line -### Role +## Role -This module plans velocity so that the vehicle can stop right before stop lines and restart driving after stopped. +This module plans the vehicle's velocity to ensure it stops just before stop lines and can resume movement after stopping. ![stop line](docs/stop_line.svg) -### Activation Timing +## Activation Timing This module is activated when there is a stop line in a target lane. -### Module Parameters +## Module Parameters | Parameter | Type | Description | | -------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `stop_margin` | double | a margin that the vehicle tries to stop before stop_line | -| `stop_duration_sec` | double | [s] time parameter for the ego vehicle to stop in front of a stop line | -| `hold_stop_margin_distance` | double | [m] parameter for restart prevention (See Algorithm section). Also, when the ego vehicle is within this distance from a stop line, the ego state becomes STOPPED from APPROACHING | -| `use_initialization_stop_state` | bool | A flag to determine whether to return to the approaching state when the vehicle moves away from a stop line. | -| `show_stop_line_collision_check` | bool | A flag to determine whether to show the debug information of collision check with a stop line | +| `stop_margin` | double | Margin that the vehicle tries to stop in before stop_line | +| `stop_duration_sec` | double | [s] Time parameter for the ego vehicle to stop before stop line | +| `hold_stop_margin_distance` | double | [m] Parameter for restart prevention (See Algorithm section). Also, when the ego vehicle is within this distance from a stop line, the ego state becomes STOPPED from APPROACHING | +| `use_initialization_stop_state` | bool | Flag to determine whether to return to the approaching state when the vehicle moves away from a stop line. | +| `show_stop_line_collision_check` | bool | Flag to determine whether to show the debug information of collision check with a stop line | -### Inner-workings / Algorithms +## Inner-workings / Algorithms - Gets a stop line from map information. -- insert a stop point on the path from the stop line defined in the map and the ego vehicle length. +- Inserts a stop point on the path from the stop line defined in the map and the ego vehicle length. - Sets velocities of the path after the stop point to 0[m/s]. -- Release the inserted stop velocity when the vehicle stops at the stop point for `stop_duration_sec` seconds. +- Releases the inserted stop velocity when the vehicle halts at the stop point for `stop_duration_sec` seconds. -#### Flowchart +### Flowchart ```plantuml @startuml @@ -85,15 +85,15 @@ Then, we can get `offset segment` and `offset from segment start`. ![find_offset_segment](docs/./find_offset_segment.drawio.svg) -After that, we can calculate a offset point from `offset segment` and `offset`. This will be `stop_pose`. +After that, we can calculate an offset point from `offset segment` and `offset`. This will be `stop_pose`. ![calculate_stop_pose](docs/./calculate_stop_pose.drawio.svg) -#### Restart prevention +### Restart Prevention -If it needs X meters (e.g. 0.5 meters) to stop once the vehicle starts moving due to the poor vehicle control performance, the vehicle goes over the stopping position that should be strictly observed when the vehicle starts to moving in order to approach the near stop point (e.g. 0.3 meters away). +If the vehicle requires X meters (e.g. 0.5 meters) to stop once it starts moving due to poor vehicle control performance, it may overshoot the stopping position, which must be strictly observed. This happens when the vehicle begins to move in order to approach a nearby stop point (e.g. 0.3 meters away). -This module has parameter `hold_stop_margin_distance` in order to prevent from these redundant restart. If the vehicle is stopped within `hold_stop_margin_distance` meters from stop point of the module (\_front_to_stop_line < hold_stop_margin_distance), the module judges that the vehicle has already stopped for the module's stop point and plans to keep stopping current position even if the vehicle is stopped due to other factors. +This module includes the parameter `hold_stop_margin_distance` to prevent redundant restarts in such a situation. If the vehicle is stopped within `hold_stop_margin_distance` meters of the stop point (\_front_to_stop_line < hold_stop_margin_distance), the module determines that the vehicle has already stopped at the stop point and will maintain the current stopping position, even if the vehicle has come to a stop due to other factors.
![example](docs/restart_prevention.svg){width=1000} From 95e6b19b69dc59244d4e70361e0f95ea9628b937 Mon Sep 17 00:00:00 2001 From: Atto Armoo <168620037+AA-T4@users.noreply.github.com> Date: Tue, 7 Jan 2025 15:19:17 +0900 Subject: [PATCH 47/77] fix(planning): corrects typo in svg (#9814) Signed-off-by: Atto Armoo <168620037+AA-T4@users.noreply.github.com> --- .../docs/node_and_segment.drawio.svg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/docs/node_and_segment.drawio.svg b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/docs/node_and_segment.drawio.svg index 182c941907f57..6cd47ffc14a56 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/docs/node_and_segment.drawio.svg +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/docs/node_and_segment.drawio.svg @@ -233,7 +233,7 @@
= node(i) + node(i+1)
- = all segment has two points + = all segments have two points From e5070d18e4c37c02bd60a4228c2faf430d602698 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Tue, 7 Jan 2025 15:20:44 +0900 Subject: [PATCH 48/77] fix(autoware_motion_velocity_obstacle_velocity_limiter_module): remove cppcheck suppressions (#9843) Signed-off-by: veqcc --- .../benchmarks/collision_checker_benchmark.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/benchmarks/collision_checker_benchmark.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/benchmarks/collision_checker_benchmark.cpp index 1d980e220ccef..c8aa9895a0451 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/benchmarks/collision_checker_benchmark.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/benchmarks/collision_checker_benchmark.cpp @@ -76,12 +76,10 @@ int main() const auto naive_constr_end = std::chrono::system_clock::now(); const auto rtt_check_start = std::chrono::system_clock::now(); for (const auto & polygon : polygons) - // cppcheck-suppress unreadVariable const auto rtree_result = rtree_collision_checker.intersections(polygon); const auto rtt_check_end = std::chrono::system_clock::now(); const auto naive_check_start = std::chrono::system_clock::now(); for (const auto & polygon : polygons) - // cppcheck-suppress unreadVariable const auto naive_result = naive_collision_checker.intersections(polygon); const auto naive_check_end = std::chrono::system_clock::now(); const auto rtt_constr_time = From 9d5c246baf29ceed9c8e1ad264d559415591631b Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Tue, 7 Jan 2025 15:42:29 +0900 Subject: [PATCH 49/77] feat(autoware_test_utils): add visualization and yaml dumper for PathWithLaneId (#9841) Signed-off-by: Mamoru Sobue --- .../config/sample_topic_snapshot.yaml | 9 +- .../autoware_test_utils/mock_data_parser.hpp | 13 + .../autoware_test_utils/visualization.hpp | 117 ++- common/autoware_test_utils/package.xml | 1 + .../src/mock_data_parser.cpp | 50 ++ .../src/topic_snapshot_saver.cpp | 11 +- .../test_map/intersection/lanelet2_map.osm | 839 ++++++------------ 7 files changed, 479 insertions(+), 561 deletions(-) diff --git a/common/autoware_test_utils/config/sample_topic_snapshot.yaml b/common/autoware_test_utils/config/sample_topic_snapshot.yaml index d9eff5d579540..2ff746b84c3ac 100644 --- a/common/autoware_test_utils/config/sample_topic_snapshot.yaml +++ b/common/autoware_test_utils/config/sample_topic_snapshot.yaml @@ -24,6 +24,9 @@ fields: - name: dynamic_object type: PredictedObjects # autoware_perception_msgs::msg::PredictedObjects topic: /perception/object_recognition/objects -# - name: tracked_object -# type: TrackedObjects # autoware_perception_msgs::msg::TrackedObjects -# topic: /perception/object_recognition/tracking/objects + # - name: tracked_object + # type: TrackedObjects # autoware_perception_msgs::msg::TrackedObjects + # topic: /perception/object_recognition/tracking/objects + # - name: path_with_lane_id + # type: PathWithLaneId # tier4_planning_msgs::msg::PathWithLaneId + # topic: /planning/scenario_planning/lane_driving/behavior_planning/path_with_lane_id diff --git a/common/autoware_test_utils/include/autoware_test_utils/mock_data_parser.hpp b/common/autoware_test_utils/include/autoware_test_utils/mock_data_parser.hpp index 5e07237e2c495..8375d3e731683 100644 --- a/common/autoware_test_utils/include/autoware_test_utils/mock_data_parser.hpp +++ b/common/autoware_test_utils/include/autoware_test_utils/mock_data_parser.hpp @@ -59,6 +59,7 @@ using autoware_perception_msgs::msg::TrafficLightGroupArray; using autoware_planning_msgs::msg::LaneletPrimitive; using autoware_planning_msgs::msg::LaneletRoute; using autoware_planning_msgs::msg::LaneletSegment; +using autoware_planning_msgs::msg::PathPoint; using builtin_interfaces::msg::Duration; using builtin_interfaces::msg::Time; using geometry_msgs::msg::Accel; @@ -97,6 +98,9 @@ Duration parse(const YAML::Node & node); template <> Time parse(const YAML::Node & node); +template <> +Point parse(const YAML::Node & node); + template <> std::vector parse(const YAML::Node & node); @@ -145,6 +149,15 @@ std::vector parse(const YAML::Node & node); template <> UUID parse(const YAML::Node & node); +template <> +PathPoint parse(const YAML::Node & node); + +template <> +PathPointWithLaneId parse(const YAML::Node & node); + +template <> +PathWithLaneId parse(const YAML::Node & node); + template <> PredictedPath parse(const YAML::Node & node); diff --git a/common/autoware_test_utils/include/autoware_test_utils/visualization.hpp b/common/autoware_test_utils/include/autoware_test_utils/visualization.hpp index c2185e65422e8..dbd3dd6638c95 100644 --- a/common/autoware_test_utils/include/autoware_test_utils/visualization.hpp +++ b/common/autoware_test_utils/include/autoware_test_utils/visualization.hpp @@ -19,6 +19,9 @@ #include #include +#include + +#include #include #include @@ -150,7 +153,8 @@ inline void plot_lanelet2_object( const auto center = (left.front().basicPoint2d() + left.back().basicPoint2d() + right.front().basicPoint2d() + right.back().basicPoint2d()) / 4.0; - axes.text(Args(center.x(), center.y(), std::to_string(lanelet.id()))); + axes.text( + Args(center.x(), center.y(), std::to_string(lanelet.id())), Kwargs("clip_on"_a = true)); } if (config_opt && config_opt.value().label) { @@ -214,16 +218,111 @@ inline void plot_lanelet2_object( axes.add_patch(Args(poly.unwrap())); } +struct DrivableAreaConfig +{ + static DrivableAreaConfig defaults() { return {"turquoise", 2.0}; } + std::optional color{}; + std::optional linewidth{}; +}; + +struct PathWithLaneIdConfig +{ + static PathWithLaneIdConfig defaults() + { + return {std::nullopt, "k", 1.0, std::nullopt, false, 1.0}; + } + std::optional label{}; + std::optional color{}; + std::optional linewidth{}; + std::optional da{}; + bool lane_id{}; // & config_opt = std::nullopt); -*/ +inline void plot_autoware_object( + const tier4_planning_msgs::msg::PathWithLaneId & path, autoware::pyplot::Axes & axes, + const std::optional & config_opt = std::nullopt) +{ + py::dict kwargs{}; + if (config_opt) { + const auto & config = config_opt.value(); + if (config.label) { + kwargs["label"] = config.label.value(); + } + if (config.color) { + kwargs["color"] = config.color.value(); + } + if (config.linewidth) { + kwargs["linewidth"] = config.linewidth.value(); + } + } + std::vector xs; + std::vector ys; + std::vector yaw_cos; + std::vector yaw_sin; + std::vector> ids; + const bool plot_lane_id = config_opt ? config_opt.value().lane_id : false; + for (const auto & point : path.points) { + xs.push_back(point.point.pose.position.x); + ys.push_back(point.point.pose.position.y); + const auto th = autoware::universe_utils::getRPY(point.point.pose.orientation).z; + yaw_cos.push_back(std::cos(th)); + yaw_sin.push_back(std::sin(th)); + if (plot_lane_id) { + ids.emplace_back(); + for (const auto & id : point.lane_ids) { + ids.back().push_back(id); + } + } + } + // plot centerline + axes.plot(Args(xs, ys), kwargs); + const auto quiver_scale = + config_opt ? config_opt.value().quiver_size : PathWithLaneIdConfig::defaults().quiver_size; + const auto quiver_color = + config_opt ? (config_opt.value().color ? config_opt.value().color.value() : "k") : "k"; + axes.quiver( + Args(xs, ys, yaw_cos, yaw_sin), Kwargs( + "angles"_a = "xy", "scale_units"_a = "xy", + "scale"_a = quiver_scale, "color"_a = quiver_color)); + if (plot_lane_id) { + for (size_t i = 0; i < xs.size(); ++i) { + std::stringstream ss; + const char * delimiter = ""; + for (const auto id : ids[i]) { + ss << std::exchange(delimiter, ",") << id; + } + axes.text(Args(xs[i], ys[i], ss.str()), Kwargs("clip_on"_a = true)); + } + } + // plot drivable area + if (config_opt && config_opt.value().da) { + auto plot_boundary = [&](const decltype(path.left_bound) & points) { + std::vector xs; + std::vector ys; + for (const auto & point : points) { + xs.push_back(point.x); + ys.push_back(point.y); + } + const auto & cfg = config_opt.value().da.value(); + py::dict kwargs{}; + if (cfg.color) { + kwargs["color"] = cfg.color.value(); + } + if (cfg.linewidth) { + kwargs["linewidth"] = cfg.linewidth.value(); + } + axes.plot(Args(xs, ys), kwargs); + }; + plot_boundary(path.left_bound); + plot_boundary(path.right_bound); + } +} + } // namespace autoware::test_utils #endif // AUTOWARE_TEST_UTILS__VISUALIZATION_HPP_ diff --git a/common/autoware_test_utils/package.xml b/common/autoware_test_utils/package.xml index c328f37ba357d..740e7f840141d 100644 --- a/common/autoware_test_utils/package.xml +++ b/common/autoware_test_utils/package.xml @@ -8,6 +8,7 @@ Takamasa Horibe Zulfaqar Azmi Mamoru Sobue + Yukinari Hisaki Apache License 2.0 Kyoichi Sugahara diff --git a/common/autoware_test_utils/src/mock_data_parser.cpp b/common/autoware_test_utils/src/mock_data_parser.cpp index 6e7002501bf30..29aed75357441 100644 --- a/common/autoware_test_utils/src/mock_data_parser.cpp +++ b/common/autoware_test_utils/src/mock_data_parser.cpp @@ -65,6 +65,16 @@ std::array parse(const YAML::Node & node) return msg; } +template <> +Point parse(const YAML::Node & node) +{ + Point geom_point; + geom_point.x = node["x"].as(); + geom_point.y = node["y"].as(); + geom_point.z = node["z"].as(); + return geom_point; +} + template <> std::vector parse(const YAML::Node & node) { @@ -285,6 +295,46 @@ Shape parse(const YAML::Node & node) return msg; } +template <> +PathPoint parse(const YAML::Node & node) +{ + PathPoint point; + point.pose = parse(node["pose"]); + point.longitudinal_velocity_mps = node["longitudinal_velocity_mps"].as(); + point.lateral_velocity_mps = node["lateral_velocity_mps"].as(); + point.heading_rate_rps = node["heading_rate_rps"].as(); + point.is_final = node["is_final"].as(); + return point; +} + +template <> +PathPointWithLaneId parse(const YAML::Node & node) +{ + PathPointWithLaneId point; + point.point = parse(node["point"]); + for (const auto & lane_id_node : node["lane_ids"]) { + point.lane_ids.push_back(lane_id_node.as()); + } + return point; +} + +template <> +PathWithLaneId parse(const YAML::Node & node) +{ + PathWithLaneId path; + path.header = parse
(node["header"]); + for (const auto & point_node : node["points"]) { + path.points.push_back(parse(point_node)); + } + for (const auto & left_bound_node : node["left_bound"]) { + path.left_bound.push_back(parse(left_bound_node)); + } + for (const auto & right_bound_node : node["right_bound"]) { + path.right_bound.push_back(parse(right_bound_node)); + } + return path; +} + template <> PredictedPath parse(const YAML::Node & node) { diff --git a/common/autoware_test_utils/src/topic_snapshot_saver.cpp b/common/autoware_test_utils/src/topic_snapshot_saver.cpp index b2cb2a17c9621..bd9af2d5672b8 100644 --- a/common/autoware_test_utils/src/topic_snapshot_saver.cpp +++ b/common/autoware_test_utils/src/topic_snapshot_saver.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include @@ -46,7 +47,8 @@ using MessageType = std::variant< autoware_adapi_v1_msgs::msg::OperationModeState, // 3 autoware_planning_msgs::msg::LaneletRoute, // 4 autoware_perception_msgs::msg::TrafficLightGroupArray, // 5 - autoware_perception_msgs::msg::TrackedObjects // 6 + autoware_perception_msgs::msg::TrackedObjects, // 6 + tier4_planning_msgs::msg::PathWithLaneId // 7 >; std::optional get_topic_index(const std::string & name) @@ -72,6 +74,9 @@ std::optional get_topic_index(const std::string & name) if (name == "TrackedObjects") { return 6; } + if (name == "PathWithLaneId") { + return 7; + } return std::nullopt; } @@ -196,6 +201,7 @@ class TopicSnapShotSaver REGISTER_CALLBACK(4); REGISTER_CALLBACK(5); REGISTER_CALLBACK(6); + REGISTER_CALLBACK(7); } } @@ -243,6 +249,7 @@ class TopicSnapShotSaver REGISTER_WRITE_TYPE(4); REGISTER_WRITE_TYPE(5); REGISTER_WRITE_TYPE(6); + REGISTER_WRITE_TYPE(7); } const std::string desc = std::string(R"(# @@ -253,7 +260,7 @@ class TopicSnapShotSaver # map_path_uri: package:/// # fields(this is array) # - name: -# type: either {Odometry | AccelWithCovarianceStamped | PredictedObjects | OperationModeState | LaneletRoute | TrafficLightGroupArray | TrackedObjects | TBD} +# type: either {Odometry | AccelWithCovarianceStamped | PredictedObjects | OperationModeState | LaneletRoute | TrafficLightGroupArray | TrackedObjects | PathWithLaneId | TBD} # topic: # )"); diff --git a/common/autoware_test_utils/test_map/intersection/lanelet2_map.osm b/common/autoware_test_utils/test_map/intersection/lanelet2_map.osm index c5c5b7b1fc657..9f28ed79a91ae 100644 --- a/common/autoware_test_utils/test_map/intersection/lanelet2_map.osm +++ b/common/autoware_test_utils/test_map/intersection/lanelet2_map.osm @@ -1,6 +1,6 @@ - + @@ -8002,391 +8002,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -10004,16 +9619,6 @@ - - - - - - - - - - @@ -15586,6 +15191,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -18669,142 +18449,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -19364,12 +19008,6 @@ - - - - - - @@ -21131,6 +20769,68 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -22269,15 +21969,6 @@ - - - - - - - - - @@ -22853,6 +22544,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From e2accc57e9d0b1328641bd88a48e446c74879af3 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Tue, 7 Jan 2025 16:21:57 +0900 Subject: [PATCH 50/77] fix(tier4_camera_view_rviz_plugin): fix bugprone-parent-virtual-call (#9815) * fix:bugprone-error Signed-off-by: kobayu858 * fix:fmt Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../src/third_person_view_controller.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visualization/tier4_camera_view_rviz_plugin/src/third_person_view_controller.cpp b/visualization/tier4_camera_view_rviz_plugin/src/third_person_view_controller.cpp index b7d754b02d4bd..386c8cdfb0b13 100644 --- a/visualization/tier4_camera_view_rviz_plugin/src/third_person_view_controller.cpp +++ b/visualization/tier4_camera_view_rviz_plugin/src/third_person_view_controller.cpp @@ -184,7 +184,7 @@ void ThirdPersonViewController::handleMouseEvent(rviz_common::ViewportMouseEvent void ThirdPersonViewController::mimic(rviz_common::ViewController * source_view) { - FramePositionTrackingViewController::mimic(source_view); + FramePositionTrackingViewController::mimic(source_view); // NOLINT target_frame_property_->setValue(TARGET_FRAME_START); getNewTransform(); From 3aa84a0fb2a9796a8e54f99e44e89ae3a125131e Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Tue, 7 Jan 2025 16:23:13 +0900 Subject: [PATCH 51/77] fix(system_monitor): fix bugprone-exception-escape (#9781) * fix: bugprone-error Signed-off-by: kobayu858 * fix: clippy Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../reader/hdd_reader/hdd_reader.cpp | 83 +++++----- .../reader/msr_reader/msr_reader.cpp | 146 +++++++++--------- 2 files changed, 123 insertions(+), 106 deletions(-) diff --git a/system/system_monitor/reader/hdd_reader/hdd_reader.cpp b/system/system_monitor/reader/hdd_reader/hdd_reader.cpp index 740f841382f47..098f4240782ae 100644 --- a/system/system_monitor/reader/hdd_reader/hdd_reader.cpp +++ b/system/system_monitor/reader/hdd_reader/hdd_reader.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include #include #include @@ -655,48 +656,56 @@ void run(int port) int main(int argc, char ** argv) { - static struct option long_options[] = { - {"help", no_argument, nullptr, 'h'}, - {"port", required_argument, nullptr, 'p'}, - {nullptr, 0, nullptr, 0}}; - - // Parse command-line options - int c = 0; - int option_index = 0; - int port = PORT; - while ((c = getopt_long(argc, argv, "hp:", long_options, &option_index)) != -1) { - switch (c) { - case 'h': - usage(); - return EXIT_SUCCESS; - - case 'p': - try { - port = boost::lexical_cast(optarg); - } catch (const boost::bad_lexical_cast & e) { - printf("Error: %s\n", e.what()); - return EXIT_FAILURE; - } - break; - - default: - break; + try { + static struct option long_options[] = { + {"help", no_argument, nullptr, 'h'}, + {"port", required_argument, nullptr, 'p'}, + {nullptr, 0, nullptr, 0}}; + + // Parse command-line options + int c = 0; + int option_index = 0; + int port = PORT; + while ((c = getopt_long(argc, argv, "hp:", long_options, &option_index)) != -1) { + switch (c) { + case 'h': + usage(); + return EXIT_SUCCESS; + + case 'p': + try { + port = boost::lexical_cast(optarg); + } catch (const boost::bad_lexical_cast & e) { + printf("Error: %s\n", e.what()); + return EXIT_FAILURE; + } + break; + + default: + break; + } } - } - // Put the program in the background - if (daemon(0, 0) < 0) { - printf("Failed to put the program in the background. %s\n", strerror(errno)); - return errno; - } + // Put the program in the background + if (daemon(0, 0) < 0) { + printf("Failed to put the program in the background. %s\n", strerror(errno)); + return errno; + } - // Open connection to system logger - openlog(nullptr, LOG_PID, LOG_DAEMON); + // Open connection to system logger + openlog(nullptr, LOG_PID, LOG_DAEMON); - run(port); + run(port); - // Close descriptor used to write to system logger - closelog(); + // Close descriptor used to write to system logger + closelog(); + } catch (const std::exception & e) { + std::cerr << "Exception in main(): " << e.what() << std::endl; + return EXIT_FAILURE; + } catch (...) { + std::cerr << "Unknown exception in main()" << std::endl; + return EXIT_FAILURE; + } return EXIT_SUCCESS; } diff --git a/system/system_monitor/reader/msr_reader/msr_reader.cpp b/system/system_monitor/reader/msr_reader/msr_reader.cpp index fc7bcab795be0..89f95d05c282e 100644 --- a/system/system_monitor/reader/msr_reader/msr_reader.cpp +++ b/system/system_monitor/reader/msr_reader/msr_reader.cpp @@ -212,90 +212,98 @@ void run(int port, const std::vector & list) int main(int argc, char ** argv) { - static struct option long_options[] = { - {"help", no_argument, 0, 'h'}, {"port", required_argument, 0, 'p'}, {0, 0, 0, 0}}; - - // Parse command-line options - int c = 0; - int option_index = 0; - int port = PORT; - while ((c = getopt_long(argc, argv, "hp:", long_options, &option_index)) != -1) { - switch (c) { - case 'h': - usage(); - return EXIT_SUCCESS; - - case 'p': - try { - port = boost::lexical_cast(optarg); - } catch (const boost::bad_lexical_cast & e) { - printf("Error: %s\n", e.what()); - return EXIT_FAILURE; - } - break; + try { + static struct option long_options[] = { + {"help", no_argument, 0, 'h'}, {"port", required_argument, 0, 'p'}, {0, 0, 0, 0}}; + + // Parse command-line options + int c = 0; + int option_index = 0; + int port = PORT; + while ((c = getopt_long(argc, argv, "hp:", long_options, &option_index)) != -1) { + switch (c) { + case 'h': + usage(); + return EXIT_SUCCESS; + + case 'p': + try { + port = boost::lexical_cast(optarg); + } catch (const boost::bad_lexical_cast & e) { + printf("Error: %s\n", e.what()); + return EXIT_FAILURE; + } + break; + + default: + break; + } + } - default: - break; + if (!fs::exists("/dev/cpu")) { + printf("Failed to access /dev/cpu.\n"); + return EXIT_FAILURE; } - } - if (!fs::exists("/dev/cpu")) { - printf("Failed to access /dev/cpu.\n"); - return EXIT_FAILURE; - } + std::vector list; + const fs::path root("/dev/cpu"); - std::vector list; - const fs::path root("/dev/cpu"); + for (const fs::path & path : boost::make_iterator_range( + fs::recursive_directory_iterator(root), fs::recursive_directory_iterator())) { + if (fs::is_directory(path)) { + continue; + } - for (const fs::path & path : boost::make_iterator_range( - fs::recursive_directory_iterator(root), fs::recursive_directory_iterator())) { - if (fs::is_directory(path)) { - continue; - } + std::cmatch match; + const char * msr = path.generic_string().c_str(); - std::cmatch match; - const char * msr = path.generic_string().c_str(); + // /dev/cpu/[0-9]/msr ? + if (!std::regex_match(msr, match, std::regex(".*msr"))) { + continue; + } - // /dev/cpu/[0-9]/msr ? - if (!std::regex_match(msr, match, std::regex(".*msr"))) { - continue; + list.push_back(path.generic_string()); } - list.push_back(path.generic_string()); - } + std::sort(list.begin(), list.end(), [](const std::string & c1, const std::string & c2) { + std::cmatch match; + const std::regex filter(".*/(\\d+)/msr"); + int n1 = 0; + int n2 = 0; + if (std::regex_match(c1.c_str(), match, filter)) { + n1 = std::stoi(match[1].str()); + } + if (std::regex_match(c2.c_str(), match, filter)) { + n2 = std::stoi(match[1].str()); + } + return n1 < n2; + }); // NOLINT - std::sort(list.begin(), list.end(), [](const std::string & c1, const std::string & c2) { - std::cmatch match; - const std::regex filter(".*/(\\d+)/msr"); - int n1 = 0; - int n2 = 0; - if (std::regex_match(c1.c_str(), match, filter)) { - n1 = std::stoi(match[1].str()); - } - if (std::regex_match(c2.c_str(), match, filter)) { - n2 = std::stoi(match[1].str()); + if (list.empty()) { + printf("No msr found in /dev/cpu.\n"); + return EXIT_FAILURE; } - return n1 < n2; - }); // NOLINT - - if (list.empty()) { - printf("No msr found in /dev/cpu.\n"); - return EXIT_FAILURE; - } - // Put the program in the background - if (daemon(0, 0) < 0) { - printf("Failed to put the program in the background. %s\n", strerror(errno)); - return errno; - } + // Put the program in the background + if (daemon(0, 0) < 0) { + printf("Failed to put the program in the background. %s\n", strerror(errno)); + return errno; + } - // Open connection to system logger - openlog(nullptr, LOG_PID, LOG_DAEMON); + // Open connection to system logger + openlog(nullptr, LOG_PID, LOG_DAEMON); - run(port, list); + run(port, list); - // Close descriptor used to write to system logger - closelog(); + // Close descriptor used to write to system logger + closelog(); + } catch (const std::exception & e) { + std::cerr << "Exception in main(): " << e.what() << std::endl; + return EXIT_FAILURE; + } catch (...) { + std::cerr << "Unknown exception in main()" << std::endl; + return EXIT_FAILURE; + } return EXIT_SUCCESS; } From 19f7f95b8a25fc7deb748db8671a33d0d835bed7 Mon Sep 17 00:00:00 2001 From: Yamato Ando Date: Tue, 7 Jan 2025 18:42:38 +0900 Subject: [PATCH 52/77] feat(ekf_localizer): check whether the initialpose has been set (#9787) * check set intialpose Signed-off-by: Yamato Ando * update png 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> --- localization/autoware_ekf_localizer/README.md | 1 + .../autoware/ekf_localizer/diagnostics.hpp | 1 + .../autoware/ekf_localizer/ekf_localizer.hpp | 1 + .../media/ekf_diagnostics.png | Bin 142232 -> 145097 bytes .../src/diagnostics.cpp | 19 ++++++++++++++++++ .../src/ekf_localizer.cpp | 16 +++++++++++++-- .../test/test_diagnostics.cpp | 13 ++++++++++++ 7 files changed, 49 insertions(+), 2 deletions(-) diff --git a/localization/autoware_ekf_localizer/README.md b/localization/autoware_ekf_localizer/README.md index aad65da2516d1..802bf7dbb16c3 100644 --- a/localization/autoware_ekf_localizer/README.md +++ b/localization/autoware_ekf_localizer/README.md @@ -191,6 +191,7 @@ Note that, although the dimension gets larger since the analytical expansion can ### The conditions that result in a WARN state - The node is not in the activate state. +- The initial pose is not set. - The number of consecutive no measurement update via the Pose/Twist topic exceeds the `pose_no_update_count_threshold_warn`/`twist_no_update_count_threshold_warn`. - The timestamp of the Pose/Twist topic is beyond the delay compensation range. - The Pose/Twist topic is beyond the range of Mahalanobis distance for covariance estimation. diff --git a/localization/autoware_ekf_localizer/include/autoware/ekf_localizer/diagnostics.hpp b/localization/autoware_ekf_localizer/include/autoware/ekf_localizer/diagnostics.hpp index 20a77354c0996..b194c3e956341 100644 --- a/localization/autoware_ekf_localizer/include/autoware/ekf_localizer/diagnostics.hpp +++ b/localization/autoware_ekf_localizer/include/autoware/ekf_localizer/diagnostics.hpp @@ -24,6 +24,7 @@ namespace autoware::ekf_localizer { diagnostic_msgs::msg::DiagnosticStatus check_process_activated(const bool is_activated); +diagnostic_msgs::msg::DiagnosticStatus check_set_initialpose(const bool is_set_initialpose); diagnostic_msgs::msg::DiagnosticStatus check_measurement_updated( const std::string & measurement_type, const size_t no_update_count, diff --git a/localization/autoware_ekf_localizer/include/autoware/ekf_localizer/ekf_localizer.hpp b/localization/autoware_ekf_localizer/include/autoware/ekf_localizer/ekf_localizer.hpp index 1b437f26e9c7d..0561e250298ac 100644 --- a/localization/autoware_ekf_localizer/include/autoware/ekf_localizer/ekf_localizer.hpp +++ b/localization/autoware_ekf_localizer/include/autoware/ekf_localizer/ekf_localizer.hpp @@ -119,6 +119,7 @@ class EKFLocalizer : public rclcpp::Node double ekf_dt_; bool is_activated_; + bool is_set_initialpose_; EKFDiagnosticInfo pose_diag_info_; EKFDiagnosticInfo twist_diag_info_; diff --git a/localization/autoware_ekf_localizer/media/ekf_diagnostics.png b/localization/autoware_ekf_localizer/media/ekf_diagnostics.png index 234b2f1e19b6dd701dd1253b853580ab759f725d..a1561c3f5270709791a19557b874dfae1d6f56ba 100644 GIT binary patch literal 145097 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

YbpvNBYf`F%rAI);i#Bl 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

al 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 z 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%0DqZIG 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 XiOI=(SH+P(0Q}{QaCfBJ2a*2+{3E69 diff --git a/localization/autoware_ekf_localizer/src/diagnostics.cpp b/localization/autoware_ekf_localizer/src/diagnostics.cpp index a1af492487fe4..45468abf72d6c 100644 --- a/localization/autoware_ekf_localizer/src/diagnostics.cpp +++ b/localization/autoware_ekf_localizer/src/diagnostics.cpp @@ -41,6 +41,25 @@ diagnostic_msgs::msg::DiagnosticStatus check_process_activated(const bool is_act return stat; } +diagnostic_msgs::msg::DiagnosticStatus check_set_initialpose(const bool is_set_initialpose) +{ + diagnostic_msgs::msg::DiagnosticStatus stat; + + diagnostic_msgs::msg::KeyValue key_value; + key_value.key = "is_set_initialpose"; + key_value.value = is_set_initialpose ? "True" : "False"; + stat.values.push_back(key_value); + + stat.level = diagnostic_msgs::msg::DiagnosticStatus::OK; + stat.message = "OK"; + if (!is_set_initialpose) { + stat.level = diagnostic_msgs::msg::DiagnosticStatus::WARN; + stat.message = "[WARN]initial pose is not set"; + } + + return stat; +} + 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) diff --git a/localization/autoware_ekf_localizer/src/ekf_localizer.cpp b/localization/autoware_ekf_localizer/src/ekf_localizer.cpp index d34be2a537ef1..11d7788adfade 100644 --- a/localization/autoware_ekf_localizer/src/ekf_localizer.cpp +++ b/localization/autoware_ekf_localizer/src/ekf_localizer.cpp @@ -56,6 +56,7 @@ EKFLocalizer::EKFLocalizer(const rclcpp::NodeOptions & node_options) twist_queue_(params_.twist_smoothing_steps) { is_activated_ = false; + is_set_initialpose_ = false; /* initialize ros system */ timer_control_ = rclcpp::create_timer( @@ -143,6 +144,13 @@ void EKFLocalizer::timer_callback() return; } + if (!is_set_initialpose_) { + warning_->warn_throttle( + "Initial pose is not set. Provide initial pose to pose_initializer", 2000); + publish_diagnostics(geometry_msgs::msg::PoseStamped{}, current_time); + return; + } + DEBUG_INFO(get_logger(), "========================= timer called ========================="); /* update predict frequency with measured timer rate */ @@ -264,6 +272,8 @@ void EKFLocalizer::callback_initial_pose( params_.pose_frame_id.c_str(), msg->header.frame_id.c_str()); } ekf_module_->initialize(*msg, transform); + + is_set_initialpose_ = true; } /* @@ -272,7 +282,7 @@ void EKFLocalizer::callback_initial_pose( void EKFLocalizer::callback_pose_with_covariance( geometry_msgs::msg::PoseWithCovarianceStamped::SharedPtr msg) { - if (!is_activated_) { + if (!is_activated_ && !is_set_initialpose_) { return; } @@ -359,8 +369,9 @@ void EKFLocalizer::publish_diagnostics( std::vector diag_status_array; diag_status_array.push_back(check_process_activated(is_activated_)); + diag_status_array.push_back(check_set_initialpose(is_set_initialpose_)); - if (is_activated_) { + if (is_activated_ && is_set_initialpose_) { 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)); @@ -439,6 +450,7 @@ void EKFLocalizer::service_trigger_node( is_activated_ = true; } else { is_activated_ = false; + is_set_initialpose_ = false; } res->success = true; } diff --git a/localization/autoware_ekf_localizer/test/test_diagnostics.cpp b/localization/autoware_ekf_localizer/test/test_diagnostics.cpp index 165102adec1d7..5ce39df484e98 100644 --- a/localization/autoware_ekf_localizer/test/test_diagnostics.cpp +++ b/localization/autoware_ekf_localizer/test/test_diagnostics.cpp @@ -35,6 +35,19 @@ TEST(TestEkfDiagnostics, check_process_activated) EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); } +TEST(TestEkfDiagnostics, check_set_initialpose) +{ + diagnostic_msgs::msg::DiagnosticStatus stat; + + bool is_set_initialpose = true; + stat = check_set_initialpose(is_set_initialpose); + EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::OK); + + is_set_initialpose = false; + stat = check_set_initialpose(is_set_initialpose); + EXPECT_EQ(stat.level, diagnostic_msgs::msg::DiagnosticStatus::WARN); +} + TEST(TestEkfDiagnostics, check_measurement_updated) { diagnostic_msgs::msg::DiagnosticStatus stat; From 1e686028828e17913a1885480c8d27101585adae Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Wed, 8 Jan 2025 14:18:01 +0900 Subject: [PATCH 53/77] test(blind_spot): add unit tests for util functions (#9597) Signed-off-by: Mamoru Sobue --- .../CMakeLists.txt | 16 +- .../manager.hpp | 3 +- .../parameter.hpp | 40 + .../scene.hpp | 15 +- .../util.hpp | 32 +- .../package.xml | 1 + .../src/manager.cpp | 18 +- .../src/parameter.cpp | 45 + .../src/scene.cpp | 24 +- .../src/util.cpp | 49 +- .../test/test_util.cpp | 448 +++ .../test_data/object_on_adj_lane.yaml | 2698 +++++++++++++++++ .../test_data/object_on_shoulder.yaml | 2512 +++++++++++++++ 13 files changed, 5824 insertions(+), 77 deletions(-) create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/parameter.hpp create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/parameter.cpp create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test/test_util.cpp create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test_data/object_on_adj_lane.yaml create mode 100644 planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test_data/object_on_shoulder.yaml diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt index b28e486c9be05..220c380eb0fd7 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.14) project(autoware_behavior_velocity_blind_spot_module) +option(EXPORT_TEST_PLOT_FIGURE "Export plot figures in test" OFF) + find_package(autoware_cmake REQUIRED) autoware_package() pluginlib_export_plugin_description_file(autoware_behavior_velocity_planner plugins.xml) @@ -11,16 +13,20 @@ ament_auto_add_library(${PROJECT_NAME} SHARED src/scene.cpp src/decisions.cpp src/util.cpp + src/parameter.cpp ) if(BUILD_TESTING) + if(EXPORT_TEST_PLOT_FIGURE) + add_definitions(-DEXPORT_TEST_PLOT_FIGURE "-Wno-attributes") # // cspell: ignore DEXPORT + endif() find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() - file(GLOB_RECURSE TEST_SOURCES test/*.cpp) - ament_add_ros_isolated_gtest(test_${PROJECT_NAME} - ${TEST_SOURCES} + # NOTE(soblin): pybind11::scoped_interpreter needs to be initialized globally, not in the FixtureClass instantiated for each test suite + ament_add_gtest(test_${PROJECT_NAME}_util + test/test_util.cpp ) - target_link_libraries(test_${PROJECT_NAME} ${PROJECT_NAME}) + target_link_libraries(test_${PROJECT_NAME}_util ${PROJECT_NAME}) endif() -ament_auto_package(INSTALL_TO_SHARE config) +ament_auto_package(INSTALL_TO_SHARE config test_data) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/manager.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/manager.hpp index bf01986d5c28f..41330e459a524 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/manager.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/manager.hpp @@ -15,6 +15,7 @@ #ifndef AUTOWARE__BEHAVIOR_VELOCITY_BLIND_SPOT_MODULE__MANAGER_HPP_ #define AUTOWARE__BEHAVIOR_VELOCITY_BLIND_SPOT_MODULE__MANAGER_HPP_ +#include "autoware/behavior_velocity_blind_spot_module/parameter.hpp" #include "autoware/behavior_velocity_blind_spot_module/scene.hpp" #include @@ -38,7 +39,7 @@ class BlindSpotModuleManager : public SceneModuleManagerInterfaceWithRTC const char * getModuleName() override { return "blind_spot"; } private: - BlindSpotModule::PlannerParam planner_param_; + PlannerParam planner_param_; void launchNewModules(const tier4_planning_msgs::msg::PathWithLaneId & path) override; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/parameter.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/parameter.hpp new file mode 100644 index 0000000000000..59322caecb62f --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/parameter.hpp @@ -0,0 +1,40 @@ +// 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 AUTOWARE__BEHAVIOR_VELOCITY_BLIND_SPOT_MODULE__PARAMETER_HPP_ +#define AUTOWARE__BEHAVIOR_VELOCITY_BLIND_SPOT_MODULE__PARAMETER_HPP_ + +#include + +#include + +namespace autoware::behavior_velocity_planner +{ +struct PlannerParam +{ + static PlannerParam init(rclcpp::Node & node, const std::string & ns); + bool use_pass_judge_line{}; + double stop_line_margin{}; + double backward_detection_length{}; + double ignore_width_from_center_line{}; + double adjacent_extend_width{}; + double opposite_adjacent_extend_width{}; + double max_future_movement_time{}; + double ttc_min{}; + double ttc_max{}; + double ttc_ego_minimal_velocity{}; +}; +} // namespace autoware::behavior_velocity_planner + +#endif // AUTOWARE__BEHAVIOR_VELOCITY_BLIND_SPOT_MODULE__PARAMETER_HPP_ diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/scene.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/scene.hpp index 50ce8634ec600..5e8ef9fc8a063 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/scene.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/scene.hpp @@ -15,6 +15,7 @@ #ifndef AUTOWARE__BEHAVIOR_VELOCITY_BLIND_SPOT_MODULE__SCENE_HPP_ #define AUTOWARE__BEHAVIOR_VELOCITY_BLIND_SPOT_MODULE__SCENE_HPP_ +#include #include #include #include @@ -70,20 +71,6 @@ class BlindSpotModule : public SceneModuleInterfaceWithRTC }; public: - struct PlannerParam - { - bool use_pass_judge_line; - double stop_line_margin; - double backward_detection_length; - double ignore_width_from_center_line; - double adjacent_extend_width; - double opposite_adjacent_extend_width; - double max_future_movement_time; - double ttc_min; - double ttc_max; - double ttc_ego_minimal_velocity; - }; - BlindSpotModule( const int64_t module_id, const int64_t lane_id, const TurnDirection turn_direction, const std::shared_ptr planner_data, const PlannerParam & planner_param, diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/util.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/util.hpp index 9d908414b6d95..e18d96709ef92 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/util.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/include/autoware/behavior_velocity_blind_spot_module/util.hpp @@ -16,6 +16,7 @@ #define AUTOWARE__BEHAVIOR_VELOCITY_BLIND_SPOT_MODULE__UTIL_HPP_ #include +#include #include @@ -25,6 +26,7 @@ #include #include #include +#include namespace autoware::behavior_velocity_planner { @@ -50,31 +52,49 @@ std::optional generateInterpolatedPathInfo( const lanelet::Id lane_id, const tier4_planning_msgs::msg::PathWithLaneId & input_path, rclcpp::Logger logger); +std::optional getFirstPointIntersectsLineByFootprint( + const lanelet::ConstLineString2d & line, const InterpolatedPathInfo & interpolated_path_info, + const autoware::universe_utils::LinearRing2d & footprint, const double vehicle_length); + std::optional getSiblingStraightLanelet( const lanelet::Lanelet assigned_lane, const lanelet::routing::RoutingGraphConstPtr routing_graph_ptr); /** - * @brief Create half lanelet - * @param lanelet input lanelet - * @return Half lanelet + * @brief generate a new lanelet object on the `turn_direction` side of `lanelet` which is offset + * from `ignore_width_from_centerline` from the centerline of `lanelet` + * @return new lanelet object */ lanelet::ConstLanelet generateHalfLanelet( const lanelet::ConstLanelet lanelet, const TurnDirection & turn_direction, const double ignore_width_from_centerline); +/** + * @brief generate a new lanelet object from the `turn_direction` side neighboring lanelet of the + * input `lanelet` by the width of `adjacent_extend_width` + * @param new lanelet object + */ lanelet::ConstLanelet generateExtendedAdjacentLanelet( const lanelet::ConstLanelet lanelet, const TurnDirection direction, const double adjacent_extend_width); + +/** + * @brief generate a new lanelet object from the `turn_direction` side neighboring opposite lanelet + * of the input `lanelet` by the width of `opposite_adjacent_extend_width` + * @param new lanelet object + */ lanelet::ConstLanelet generateExtendedOppositeAdjacentLanelet( const lanelet::ConstLanelet lanelet, const TurnDirection direction, const double opposite_adjacent_extend_width); +std::vector find_lane_ids_upto( + const tier4_planning_msgs::msg::PathWithLaneId & path, const lanelet::Id lane_id); + lanelet::ConstLanelets generateBlindSpotLanelets( const std::shared_ptr route_handler, - const TurnDirection turn_direction, const lanelet::Id lane_id, - const tier4_planning_msgs::msg::PathWithLaneId & path, const double ignore_width_from_centerline, - const double adjacent_extend_width, const double opposite_adjacent_extend_width); + const TurnDirection turn_direction, const std::vector & lane_ids_upto_intersection, + const double ignore_width_from_centerline, const double adjacent_extend_width, + const double opposite_adjacent_extend_width); /** * @brief Make blind spot areas. Narrow area is made from closest path point to stop line index. diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml index 8c34678f439ed..dabd3045b31d2 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/package.xml @@ -25,6 +25,7 @@ autoware_perception_msgs autoware_planning_msgs autoware_route_handler + autoware_test_utils autoware_universe_utils geometry_msgs pluginlib diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/manager.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/manager.cpp index a1410d2fecfd5..d6cae9004600a 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/manager.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/manager.cpp @@ -34,23 +34,7 @@ BlindSpotModuleManager::BlindSpotModuleManager(rclcpp::Node & node) node, getModuleName(), getEnableRTC(node, std::string(getModuleName()) + ".enable_rtc")) { const std::string ns(BlindSpotModuleManager::getModuleName()); - planner_param_.use_pass_judge_line = - getOrDeclareParameter(node, ns + ".use_pass_judge_line"); - planner_param_.stop_line_margin = getOrDeclareParameter(node, ns + ".stop_line_margin"); - planner_param_.backward_detection_length = - getOrDeclareParameter(node, ns + ".backward_detection_length"); - planner_param_.ignore_width_from_center_line = - getOrDeclareParameter(node, ns + ".ignore_width_from_center_line"); - planner_param_.adjacent_extend_width = - getOrDeclareParameter(node, ns + ".adjacent_extend_width"); - planner_param_.opposite_adjacent_extend_width = - getOrDeclareParameter(node, ns + ".opposite_adjacent_extend_width"); - planner_param_.max_future_movement_time = - getOrDeclareParameter(node, ns + ".max_future_movement_time"); - planner_param_.ttc_min = getOrDeclareParameter(node, ns + ".ttc_min"); - planner_param_.ttc_max = getOrDeclareParameter(node, ns + ".ttc_max"); - planner_param_.ttc_ego_minimal_velocity = - getOrDeclareParameter(node, ns + ".ttc_ego_minimal_velocity"); + planner_param_ = PlannerParam::init(node, ns); } void BlindSpotModuleManager::launchNewModules(const tier4_planning_msgs::msg::PathWithLaneId & path) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/parameter.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/parameter.cpp new file mode 100644 index 0000000000000..0984de6f73262 --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/parameter.cpp @@ -0,0 +1,45 @@ +// 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 "autoware/behavior_velocity_blind_spot_module/parameter.hpp" + +#include + +#include + +namespace autoware::behavior_velocity_planner +{ + +PlannerParam PlannerParam::init(rclcpp::Node & node, const std::string & ns) +{ + using autoware::universe_utils::getOrDeclareParameter; + PlannerParam param; + param.use_pass_judge_line = getOrDeclareParameter(node, ns + ".use_pass_judge_line"); + param.stop_line_margin = getOrDeclareParameter(node, ns + ".stop_line_margin"); + param.backward_detection_length = + getOrDeclareParameter(node, ns + ".backward_detection_length"); + param.ignore_width_from_center_line = + getOrDeclareParameter(node, ns + ".ignore_width_from_center_line"); + param.adjacent_extend_width = getOrDeclareParameter(node, ns + ".adjacent_extend_width"); + param.opposite_adjacent_extend_width = + getOrDeclareParameter(node, ns + ".opposite_adjacent_extend_width"); + param.max_future_movement_time = + getOrDeclareParameter(node, ns + ".max_future_movement_time"); + param.ttc_min = getOrDeclareParameter(node, ns + ".ttc_min"); + param.ttc_max = getOrDeclareParameter(node, ns + ".ttc_max"); + param.ttc_ego_minimal_velocity = + getOrDeclareParameter(node, ns + ".ttc_ego_minimal_velocity"); + return param; +} +} // namespace autoware::behavior_velocity_planner diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/scene.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/scene.cpp index 7d1a68c5006a0..8a9401646aaea 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/scene.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/scene.cpp @@ -101,8 +101,9 @@ BlindSpotDecision BlindSpotModule::modifyPathVelocityDetail(PathWithLaneId * pat } if (!blind_spot_lanelets_) { + const auto lane_ids_upto_intersection = find_lane_ids_upto(input_path, lane_id_); const auto blind_spot_lanelets = generateBlindSpotLanelets( - planner_data_->route_handler_, turn_direction_, lane_id_, input_path, + planner_data_->route_handler_, turn_direction_, lane_ids_upto_intersection, planner_param_.ignore_width_from_center_line, planner_param_.adjacent_extend_width, planner_param_.opposite_adjacent_extend_width); if (!blind_spot_lanelets.empty()) { @@ -179,27 +180,6 @@ bool BlindSpotModule::modifyPathVelocity(PathWithLaneId * path) return true; } -static std::optional getFirstPointIntersectsLineByFootprint( - const lanelet::ConstLineString2d & line, const InterpolatedPathInfo & interpolated_path_info, - const autoware::universe_utils::LinearRing2d & footprint, const double vehicle_length) -{ - const auto & path_ip = interpolated_path_info.path; - const auto [lane_start, lane_end] = interpolated_path_info.lane_id_interval.value(); - const size_t vehicle_length_idx = static_cast(vehicle_length / interpolated_path_info.ds); - const size_t start = - static_cast(std::max(0, static_cast(lane_start) - vehicle_length_idx)); - const auto line2d = line.basicLineString(); - for (auto i = start; i <= lane_end; ++i) { - const auto & base_pose = path_ip.points.at(i).point.pose; - const auto path_footprint = autoware::universe_utils::transformVector( - footprint, autoware::universe_utils::pose2transform(base_pose)); - if (bg::intersects(path_footprint, line2d)) { - return std::make_optional(i); - } - } - return std::nullopt; -} - static std::optional getDuplicatedPointIdx( const tier4_planning_msgs::msg::PathWithLaneId & path, const geometry_msgs::msg::Point & point) { diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/util.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/util.cpp index 5c5aa0a26b3b4..8451661b2b71f 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/util.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/util.cpp @@ -88,6 +88,27 @@ std::optional generateInterpolatedPathInfo( return interpolated_path_info; } +std::optional getFirstPointIntersectsLineByFootprint( + const lanelet::ConstLineString2d & line, const InterpolatedPathInfo & interpolated_path_info, + const autoware::universe_utils::LinearRing2d & footprint, const double vehicle_length) +{ + const auto & path_ip = interpolated_path_info.path; + const auto [lane_start, lane_end] = interpolated_path_info.lane_id_interval.value(); + const size_t vehicle_length_idx = static_cast(vehicle_length / interpolated_path_info.ds); + const size_t start = + static_cast(std::max(0, static_cast(lane_start) - vehicle_length_idx)); + const auto line2d = line.basicLineString(); + for (auto i = start; i <= lane_end; ++i) { + const auto & base_pose = path_ip.points.at(i).point.pose; + const auto path_footprint = autoware::universe_utils::transformVector( + footprint, autoware::universe_utils::pose2transform(base_pose)); + if (boost::geometry::intersects(path_footprint, line2d)) { + return std::make_optional(i); + } + } + return std::nullopt; +} + std::optional getSiblingStraightLanelet( const lanelet::Lanelet assigned_lane, const lanelet::routing::RoutingGraphConstPtr routing_graph_ptr) @@ -200,15 +221,9 @@ static lanelet::LineString3d removeConst(lanelet::ConstLineString3d line) return lanelet::LineString3d(lanelet::InvalId, pts); } -lanelet::ConstLanelets generateBlindSpotLanelets( - const std::shared_ptr route_handler, - const TurnDirection turn_direction, const lanelet::Id lane_id, - const tier4_planning_msgs::msg::PathWithLaneId & path, const double ignore_width_from_centerline, - const double adjacent_extend_width, const double opposite_adjacent_extend_width) +std::vector find_lane_ids_upto( + const tier4_planning_msgs::msg::PathWithLaneId & path, const lanelet::Id lane_id) { - const auto lanelet_map_ptr = route_handler->getLaneletMapPtr(); - const auto routing_graph_ptr = route_handler->getRoutingGraphPtr(); - std::vector lane_ids; /* get lane ids until intersection */ for (const auto & point : path.points) { @@ -216,19 +231,29 @@ lanelet::ConstLanelets generateBlindSpotLanelets( for (const auto id : point.lane_ids) { if (id == lane_id) { found_intersection_lane = true; - lane_ids.push_back(lane_id); break; } // make lane_ids unique - if (std::find(lane_ids.begin(), lane_ids.end(), lane_id) == lane_ids.end()) { - lane_ids.push_back(lane_id); + if (std::find(lane_ids.begin(), lane_ids.end(), id) == lane_ids.end()) { + lane_ids.push_back(id); } } if (found_intersection_lane) break; } + return lane_ids; +} + +lanelet::ConstLanelets generateBlindSpotLanelets( + const std::shared_ptr route_handler, + const TurnDirection turn_direction, const std::vector & lane_ids_upto_intersection, + const double ignore_width_from_centerline, const double adjacent_extend_width, + const double opposite_adjacent_extend_width) +{ + const auto lanelet_map_ptr = route_handler->getLaneletMapPtr(); + const auto routing_graph_ptr = route_handler->getRoutingGraphPtr(); lanelet::ConstLanelets blind_spot_lanelets; - for (const auto i : lane_ids) { + for (const auto i : lane_ids_upto_intersection) { const auto lane = lanelet_map_ptr->laneletLayer.get(i); const auto ego_half_lanelet = generateHalfLanelet(lane, turn_direction, ignore_width_from_centerline); diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test/test_util.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test/test_util.cpp new file mode 100644 index 0000000000000..5c2a239e4142f --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test/test_util.cpp @@ -0,0 +1,448 @@ +// 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 +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include +#include +#include + +#ifdef EXPORT_TEST_PLOT_FIGURE +#include +#include +#include +#include + +#include +#include // needed for passing std::string to Args + +#endif + +using autoware::test_utils::parse; + +class TestWithAdjLaneData : public ::testing::Test +{ +protected: + void SetUp() override + { + const auto test_data_file = + ament_index_cpp::get_package_share_directory("autoware_behavior_velocity_blind_spot_module") + + "/test_data/object_on_adj_lane.yaml"; + const auto config = YAML::LoadFile(test_data_file); + const auto route = parse(config["route"]); + const auto map_path = + autoware::test_utils::resolve_pkg_share_uri(config["map_path_uri"].as()); + if (!map_path) { + ASSERT_DEATH({ assert(false); }, "invalid map path"); + } + const auto intersection_map = autoware::test_utils::make_map_bin_msg(map_path.value()); + route_handler = std::make_shared(); + route_handler->setMap(intersection_map); + route_handler->setRoute(route); + self_odometry = autoware::test_utils::create_const_shared_ptr( + parse(config["self_odometry"])); + dynamic_object = autoware::test_utils::create_const_shared_ptr( + parse(config["dynamic_object"])); + path_with_lane_id = + parse(config["path_with_lane_id"]); + + // parameter + auto node_options = rclcpp::NodeOptions{}; + node_options.arguments(std::vector{ + "--ros-args", + "--params-file", + ament_index_cpp::get_package_share_directory("autoware_behavior_velocity_blind_spot_module") + + "/config/blind_spot.param.yaml", + }); + + auto node = rclcpp::Node::make_shared("blind_spot_test", node_options); + param = autoware::behavior_velocity_planner::PlannerParam::init(*node, "blind_spot"); + } + + std::shared_ptr route_handler{}; + std::shared_ptr self_odometry{}; + std::shared_ptr dynamic_object{}; + const lanelet::Id lane_id_{2200}; + tier4_planning_msgs::msg::PathWithLaneId path_with_lane_id; + autoware::behavior_velocity_planner::PlannerParam param; +}; + +TEST_F(TestWithAdjLaneData, getSiblingStraightLanelet) +{ + const auto sibling_straight_lanelet_opt = + autoware::behavior_velocity_planner::getSiblingStraightLanelet( + route_handler->getLaneletMapPtr()->laneletLayer.get(lane_id_), + route_handler->getRoutingGraphPtr()); + ASSERT_NO_FATAL_FAILURE({ ASSERT_TRUE(sibling_straight_lanelet_opt.has_value()); }); + EXPECT_EQ(sibling_straight_lanelet_opt.value().id(), 2100); + +#ifdef EXPORT_TEST_PLOT_FIGURE + py::gil_scoped_acquire acquire; + using autoware::test_utils::LaneConfig; + using autoware::test_utils::LineConfig; + auto plt = autoware::pyplot::import(); + auto [fig, axes] = plt.subplots(1, 1); + auto & ax = axes[0]; + autoware::test_utils::plot_lanelet2_object( + route_handler->getLaneletMapPtr()->laneletLayer.get(lane_id_), ax, + autoware::test_utils::LaneConfig{"intersection turning lanes", LineConfig{"blue"}}); + + // for illustration + autoware::test_utils::plot_lanelet2_object( + route_handler->getLaneletMapPtr()->laneletLayer.get(3010933), ax, + autoware::test_utils::LaneConfig{std::nullopt, LineConfig{"green"}}); + autoware::test_utils::plot_lanelet2_object( + route_handler->getLaneletMapPtr()->laneletLayer.get(2201), ax, + autoware::test_utils::LaneConfig{std::nullopt, LineConfig{"blue"}}); + autoware::test_utils::plot_lanelet2_object( + route_handler->getLaneletMapPtr()->laneletLayer.get(2202), ax, + autoware::test_utils::LaneConfig{std::nullopt, LineConfig{"blue"}}); + autoware::test_utils::plot_lanelet2_object( + route_handler->getLaneletMapPtr()->laneletLayer.get(2010), ax, + autoware::test_utils::LaneConfig{std::nullopt, LineConfig{"green"}}); + + const auto [x0, x1] = ax.get_xlim(); + const auto [y0, y1] = ax.get_ylim(); + const double width = x1 - x0; + const double height = y1 - y0; + ax.set_xlim(Args(x0, x0 + width * 1.3)); + ax.set_ylim(Args(y0, y0 + height * 1.3)); + autoware::test_utils::plot_lanelet2_object( + sibling_straight_lanelet_opt.value(), ax, + LaneConfig{"sibling_straight_lanelet", LineConfig{"red"}}); + ax.set_aspect(Args("equal")); + ax.grid(); + ax.legend(Args(), Kwargs{"loc"_a = "upper right"}); + fig.tight_layout(); + const std::string filename = std::string( + ament_index_cpp::get_package_share_directory("autoware_behavior_velocity_blind_spot_module") + + "/test_data/" + ::testing::UnitTest::GetInstance()->current_test_info()->name() + ".svg"); + plt.savefig(Args(filename)); +#endif +} + +TEST_F(TestWithAdjLaneData, generateHalfLanelet) +{ + const auto lanelet = route_handler->getLaneletMapPtr()->laneletLayer.get(2010); + + const auto half_lanelet = autoware::behavior_velocity_planner::generateHalfLanelet( + lanelet, autoware::behavior_velocity_planner::TurnDirection::LEFT, + param.ignore_width_from_center_line); + + /* + TODO(soblin): how to check if they overlap only on the left line string + EXPECT_EQ( + boost::geometry::within( + half_lanelet.polygon2d().basicPolygon(), lanelet.polygon2d().basicPolygon()), + true); + */ + EXPECT_EQ( + boost::geometry::area(lanelet.polygon2d().basicPolygon()) / 2.0 > + boost::geometry::area(half_lanelet.polygon2d().basicPolygon()), + true); + +#ifdef EXPORT_TEST_PLOT_FIGURE + py::gil_scoped_acquire acquire; + using autoware::test_utils::LaneConfig; + using autoware::test_utils::LineConfig; + auto plt = autoware::pyplot::import(); + auto [fig, axes] = plt.subplots(1, 1); + auto & ax = axes[0]; + autoware::test_utils::plot_lanelet2_object( + lanelet, ax, autoware::test_utils::LaneConfig{"original", LineConfig{"blue", 1.5}}); + autoware::test_utils::plot_lanelet2_object( + half_lanelet, ax, LaneConfig{"half lanelet", LineConfig{"red", 0.75}}); + + const auto [x0, x1] = ax.get_xlim(); + const auto [y0, y1] = ax.get_ylim(); + const double width = x1 - x0; + // const double height = y1 - y0; + ax.set_xlim(Args(x0, x0 + width * 1.3)); + ax.set_ylim(Args(y0, 650)); + ax.set_aspect(Args("equal")); + ax.grid(); + ax.legend(Args(), Kwargs{"loc"_a = "upper right"}); + fig.tight_layout(); + const std::string filename = std::string( + ament_index_cpp::get_package_share_directory("autoware_behavior_velocity_blind_spot_module") + + "/test_data/" + ::testing::UnitTest::GetInstance()->current_test_info()->name() + ".svg"); + plt.savefig(Args(filename)); +#endif +} + +TEST_F(TestWithAdjLaneData, generateExtendedAdjacentLanelet) +{ + const auto lanelet = route_handler->getLaneletMapPtr()->laneletLayer.get(2010); + const auto adj_lanelet = *(route_handler->getRoutingGraphPtr()->adjacentLeft(lanelet)); + + const auto extended_adj_lanelet = + autoware::behavior_velocity_planner::generateExtendedAdjacentLanelet( + adj_lanelet, autoware::behavior_velocity_planner::TurnDirection::LEFT, + param.adjacent_extend_width); + +#ifdef EXPORT_TEST_PLOT_FIGURE + py::gil_scoped_acquire acquire; + using autoware::test_utils::LaneConfig; + using autoware::test_utils::LineConfig; + auto plt = autoware::pyplot::import(); + auto [fig, axes] = plt.subplots(1, 1); + auto & ax = axes[0]; + autoware::test_utils::plot_lanelet2_object( + lanelet, ax, autoware::test_utils::LaneConfig{"given", LineConfig{"blue", 1.0}}); + autoware::test_utils::plot_lanelet2_object( + adj_lanelet, ax, autoware::test_utils::LaneConfig{"adjacent", LineConfig{"green", 1.0}}); + autoware::test_utils::plot_lanelet2_object( + extended_adj_lanelet, ax, LaneConfig{"generated", LineConfig{"red", 2.0}}); + + const auto [x0, x1] = ax.get_xlim(); + const auto [y0, y1] = ax.get_ylim(); + const double width = x1 - x0; + const double height = y1 - y0; + ax.set_xlim(Args(x0, x0 + width * 1.3)); + ax.set_ylim(Args(y0, y0 + height * 1.3)); + ax.set_aspect(Args("equal")); + ax.grid(); + ax.legend(Args(), Kwargs{"loc"_a = "upper right"}); + fig.tight_layout(); + const std::string filename = std::string( + ament_index_cpp::get_package_share_directory("autoware_behavior_velocity_blind_spot_module") + + "/test_data/" + ::testing::UnitTest::GetInstance()->current_test_info()->name() + ".svg"); + plt.savefig(Args(filename)); +#endif +} + +TEST_F(TestWithAdjLaneData, generateBlindSpotLanelets_left) +{ + const auto blind_spot_lanelets = autoware::behavior_velocity_planner::generateBlindSpotLanelets( + route_handler, autoware::behavior_velocity_planner::TurnDirection::LEFT, {2000, 2010}, + param.ignore_width_from_center_line, param.adjacent_extend_width, + param.opposite_adjacent_extend_width); + EXPECT_EQ(blind_spot_lanelets.size(), 2); + +#ifdef EXPORT_TEST_PLOT_FIGURE + py::gil_scoped_acquire acquire; + using autoware::test_utils::LaneConfig; + using autoware::test_utils::LineConfig; + auto plt = autoware::pyplot::import(); + auto [fig, axes] = plt.subplots(1, 1); + auto & ax = axes[0]; + for (const auto & id : {2010, 3010933, 2200, 3010920, 3010933, 2000}) { + const auto lanelet = route_handler->getLaneletMapPtr()->laneletLayer.get(id); + autoware::test_utils::plot_lanelet2_object( + lanelet, ax, LaneConfig{std::nullopt, LineConfig{"k", 0.75}}); + } + for (const auto & blind_spot_lanelet : blind_spot_lanelets) { + autoware::test_utils::plot_lanelet2_object( + blind_spot_lanelet, ax, LaneConfig{"blind_spot_lanelet", LineConfig{"blue", 2.0}}); + } + const auto [y0, y1] = ax.get_ylim(); + const double height = y1 - y0; + ax.set_xlim(Args(300, 365)); + ax.set_ylim(Args(y0, y0 + height * 1.3)); + ax.set_aspect(Args("equal")); + ax.grid(); + ax.legend(Args(), Kwargs{"loc"_a = "upper right"}); + fig.tight_layout(); + const std::string filename = std::string( + ament_index_cpp::get_package_share_directory("autoware_behavior_velocity_blind_spot_module") + + "/test_data/" + ::testing::UnitTest::GetInstance()->current_test_info()->name() + ".svg"); + plt.savefig(Args(filename)); +#endif +} + +TEST_F(TestWithAdjLaneData, generateBlindSpotLanelets_right) +{ + const auto blind_spot_lanelets = autoware::behavior_velocity_planner::generateBlindSpotLanelets( + route_handler, autoware::behavior_velocity_planner::TurnDirection::RIGHT, {3008067}, + param.ignore_width_from_center_line, param.adjacent_extend_width, + param.opposite_adjacent_extend_width); + EXPECT_EQ(blind_spot_lanelets.size(), 1); + +#ifdef EXPORT_TEST_PLOT_FIGURE + py::gil_scoped_acquire acquire; + using autoware::test_utils::LaneConfig; + using autoware::test_utils::LineConfig; + auto plt = autoware::pyplot::import(); + auto [fig, axes] = plt.subplots(1, 1); + auto & ax = axes[0]; + for (const auto & id : {3008057, 3008054, 3008056, 3008061, 3008062, 3008059, 3008067, 3008066}) { + const auto lanelet = route_handler->getLaneletMapPtr()->laneletLayer.get(id); + autoware::test_utils::plot_lanelet2_object( + lanelet, ax, LaneConfig{std::nullopt, LineConfig{"k", 0.75}}); + } + for (const auto & blind_spot_lanelet : blind_spot_lanelets) { + autoware::test_utils::plot_lanelet2_object( + blind_spot_lanelet, ax, LaneConfig{"blind_spot_lanelet", LineConfig{"blue", 2.0}}); + } + ax.set_xlim(Args(905, 920)); + ax.set_ylim(Args(650, 950)); + ax.set_aspect(Args("equal")); + ax.grid(); + ax.legend(Args(), Kwargs{"loc"_a = "upper right"}); + fig.tight_layout(); + const std::string filename = std::string( + ament_index_cpp::get_package_share_directory("autoware_behavior_velocity_blind_spot_module") + + "/test_data/" + ::testing::UnitTest::GetInstance()->current_test_info()->name() + ".svg"); + plt.savefig(Args(filename)); +#endif +} + +TEST_F(TestWithAdjLaneData, generateInterpolatedPathInfo) +{ + const auto interpolated_path_info_opt = + autoware::behavior_velocity_planner::generateInterpolatedPathInfo( + lane_id_, path_with_lane_id, rclcpp::get_logger("test")); + EXPECT_EQ(interpolated_path_info_opt.has_value(), true); + const auto & interpolated_path_info = interpolated_path_info_opt.value(); + EXPECT_EQ(interpolated_path_info.lane_id_interval.has_value(), true); + const auto [start, end] = interpolated_path_info.lane_id_interval.value(); + tier4_planning_msgs::msg::PathWithLaneId interpolated_path; + for (auto i = start; i <= end; ++i) { + interpolated_path.points.push_back(interpolated_path_info.path.points.at(i)); + } +#ifdef EXPORT_TEST_PLOT_FIGURE + py::gil_scoped_acquire acquire; + using autoware::test_utils::LaneConfig; + using autoware::test_utils::LineConfig; + using autoware::test_utils::PathWithLaneIdConfig; + auto plt = autoware::pyplot::import(); + auto [fig, axes] = plt.subplots(1, 1); + auto & ax = axes[0]; + for (const auto & id : {2010, 3010933, 2200, 3010920, 3010933, 2000, 3500}) { + const auto lanelet = route_handler->getLaneletMapPtr()->laneletLayer.get(id); + autoware::test_utils::plot_lanelet2_object( + lanelet, ax, LaneConfig{std::nullopt, LineConfig{"k", 0.75}}); + } + autoware::test_utils::plot_autoware_object( + path_with_lane_id, ax, PathWithLaneIdConfig{"original path", "red", 0.75}); + autoware::test_utils::plot_autoware_object( + interpolated_path, ax, PathWithLaneIdConfig{"interpolated path on lane 2010", "blue", 1.0}); + const auto [x0, x1] = ax.get_xlim(); + ax.set_xlim(Args(335, x1)); + ax.set_ylim(Args(640, 670)); + ax.set_aspect(Args("equal")); + ax.grid(); + ax.legend(Args(), Kwargs{"loc"_a = "upper right"}); + fig.tight_layout(); + const std::string filename = std::string( + ament_index_cpp::get_package_share_directory("autoware_behavior_velocity_blind_spot_module") + + "/test_data/" + ::testing::UnitTest::GetInstance()->current_test_info()->name() + ".svg"); + plt.savefig(Args(filename)); +#endif +} + +class TestWithShoulderData : public ::testing::Test +{ +protected: + void SetUp() override + { + const auto test_data_file = + ament_index_cpp::get_package_share_directory("autoware_behavior_velocity_blind_spot_module") + + "/test_data/object_on_shoulder.yaml"; + const auto config = YAML::LoadFile(test_data_file); + const auto route = parse(config["route"]); + const auto map_path = + autoware::test_utils::resolve_pkg_share_uri(config["map_path_uri"].as()); + if (!map_path) { + ASSERT_DEATH({ assert(false); }, "invalid map path"); + } + const auto intersection_map = autoware::test_utils::make_map_bin_msg(map_path.value()); + route_handler = std::make_shared(); + route_handler->setMap(intersection_map); + route_handler->setRoute(route); + self_odometry = autoware::test_utils::create_const_shared_ptr( + parse(config["self_odometry"])); + dynamic_object = autoware::test_utils::create_const_shared_ptr( + parse(config["dynamic_object"])); + path_with_lane_id = + parse(config["path_with_lane_id"]); + + // parameter + auto node_options = rclcpp::NodeOptions{}; + node_options.arguments(std::vector{ + "--ros-args", + "--params-file", + ament_index_cpp::get_package_share_directory("autoware_behavior_velocity_blind_spot_module") + + "/config/blind_spot.param.yaml", + }); + + auto node = rclcpp::Node::make_shared("blind_spot_test", node_options); + param = autoware::behavior_velocity_planner::PlannerParam::init(*node, "blind_spot"); + } + + std::shared_ptr route_handler{}; + std::shared_ptr self_odometry{}; + std::shared_ptr dynamic_object{}; + const lanelet::Id lane_id_{1010}; + tier4_planning_msgs::msg::PathWithLaneId path_with_lane_id; + autoware::behavior_velocity_planner::PlannerParam param; +}; + +TEST_F(TestWithShoulderData, generateBlindSpotLaneletsShoulder_left) +{ + const auto blind_spot_lanelets = autoware::behavior_velocity_planner::generateBlindSpotLanelets( + route_handler, autoware::behavior_velocity_planner::TurnDirection::LEFT, {1000, 1010}, + param.ignore_width_from_center_line, param.adjacent_extend_width, + param.opposite_adjacent_extend_width); + EXPECT_EQ(blind_spot_lanelets.size(), 2); + +#ifdef EXPORT_TEST_PLOT_FIGURE + py::gil_scoped_acquire acquire; + using autoware::test_utils::LaneConfig; + using autoware::test_utils::LineConfig; + auto plt = autoware::pyplot::import(); + auto [fig, axes] = plt.subplots(1, 1); + auto & ax = axes[0]; + for (const auto & id : {1000, 1010, 3010907, 3010879, 1200, 1100}) { + const auto lanelet = route_handler->getLaneletMapPtr()->laneletLayer.get(id); + autoware::test_utils::plot_lanelet2_object( + lanelet, ax, LaneConfig{std::nullopt, LineConfig{"k", 0.75}}); + } + for (const auto & blind_spot_lanelet : blind_spot_lanelets) { + autoware::test_utils::plot_lanelet2_object( + blind_spot_lanelet, ax, LaneConfig{"blind_spot_lanelet", LineConfig{"blue", 2.0}}); + } + ax.set_xlim(Args(330, 365)); + ax.set_ylim(Args(580, 625)); + ax.set_aspect(Args("equal")); + ax.grid(); + ax.legend(Args(), Kwargs{"loc"_a = "upper left"}); + fig.tight_layout(); + const std::string filename = std::string( + ament_index_cpp::get_package_share_directory("autoware_behavior_velocity_blind_spot_module") + + "/test_data/" + ::testing::UnitTest::GetInstance()->current_test_info()->name() + ".svg"); + plt.savefig(Args(filename)); +#endif +} + +int main(int argc, char ** argv) +{ +#ifdef EXPORT_TEST_PLOT_FIGURE + py::scoped_interpreter guard{}; +#endif + rclcpp::init(0, nullptr); + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test_data/object_on_adj_lane.yaml b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test_data/object_on_adj_lane.yaml new file mode 100644 index 0000000000000..97068d69cd296 --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test_data/object_on_adj_lane.yaml @@ -0,0 +1,2698 @@ +# +# AUTO GENERATED by autoware_test_utils::topic_snapshot_saver +# format1: +# +# format_version: +# map_path_uri: package:/// +# fields(this is array) +# - name: +# type: either {Odometry | AccelWithCovarianceStamped | PredictedObjects | OperationModeState | LaneletRoute | TrafficLightGroupArray | TrackedObjects | PathWithLaneId | TBD} +# topic: +# +format_version: 1 +map_path_uri: package://autoware_test_utils/test_map/intersection/lanelet2_map.osm +path_with_lane_id: + header: + stamp: + sec: 563 + nanosec: 125840339 + frame_id: map + points: + - point: + pose: + position: + x: 330.010 + y: 643.206 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00655991 + w: 0.999978 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2010 + - point: + pose: + position: + x: 332.010 + y: 643.233 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00656125 + w: 0.999978 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2010 + - point: + pose: + position: + x: 334.009 + y: 643.259 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00658745 + w: 0.999978 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2010 + - point: + pose: + position: + x: 336.009 + y: 643.285 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00660718 + w: 0.999978 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2010 + - point: + pose: + position: + x: 338.009 + y: 643.312 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00658719 + w: 0.999978 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2010 + - point: + pose: + position: + x: 340.009 + y: 643.338 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00656661 + w: 0.999978 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2010 + - point: + pose: + position: + x: 342.009 + y: 643.364 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00657433 + w: 0.999978 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2010 + - point: + pose: + position: + x: 342.809 + y: 643.375 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0162350 + w: 0.999868 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2010 + - 2200 + - point: + pose: + position: + x: 344.008 + y: 643.414 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0355542 + w: 0.999368 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 346.003 + y: 643.556 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0600763 + w: 0.998194 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 347.986 + y: 643.796 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.134724 + w: 0.990883 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 349.912 + y: 644.329 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.199426 + w: 0.979913 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 351.776 + y: 645.121 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.281519 + w: 0.959556 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 353.448 + y: 646.194 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.345347 + w: 0.938475 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 354.997 + y: 647.513 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.407454 + w: 0.913226 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 356.322 + y: 648.989 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.480104 + w: 0.877212 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 357.418 + y: 650.701 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.544895 + w: 0.838504 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 358.228 + y: 652.525 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.610262 + w: 0.792199 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 358.741 + y: 654.467 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.646506 + w: 0.762909 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 359.070 + y: 656.445 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.697457 + w: 0.716627 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 359.124 + y: 658.438 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.713869 + w: 0.700280 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 359.085 + y: 660.438 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.714886 + w: 0.699241 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - point: + pose: + position: + x: 359.052 + y: 661.935 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2200 + - 3500 + - point: + pose: + position: + x: 359.040 + y: 662.438 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 3500 + - point: + pose: + position: + x: 358.993 + y: 664.437 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 3500 + - point: + pose: + position: + x: 358.945 + y: 666.436 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715334 + w: 0.698782 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 3500 + - point: + pose: + position: + x: 358.900 + y: 668.374 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.714518 + w: 0.699617 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 3500 + - point: + pose: + position: + x: 358.858 + y: 670.373 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.712894 + w: 0.701272 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 3500 + - point: + pose: + position: + x: 358.825 + y: 672.373 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.710606 + w: 0.703590 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 3500 + - point: + pose: + position: + x: 358.807 + y: 674.174 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.705159 + w: 0.709049 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 3500 + - point: + pose: + position: + x: 358.812 + y: 675.174 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.705159 + w: 0.709049 + longitudinal_velocity_mps: 0.00000 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 3500 + left_bound: + - x: 329.488 + y: 644.822 + z: 100.000 + - x: 332.672 + y: 644.864 + z: 100.000 + - x: 334.352 + y: 644.886 + z: 100.000 + - x: 336.351 + y: 644.913 + z: 100.000 + - x: 337.719 + y: 644.931 + z: 100.000 + - x: 340.352 + y: 644.965 + z: 100.000 + - x: 342.813 + y: 645.020 + z: 100.000 + - x: 344.277 + y: 645.102 + z: 100.000 + - x: 346.200 + y: 645.256 + z: 100.000 + - x: 347.374 + y: 645.428 + z: 100.000 + - x: 348.470 + y: 645.697 + z: 100.000 + - x: 349.568 + y: 646.035 + z: 100.000 + - x: 350.592 + y: 646.513 + z: 100.000 + - x: 351.572 + y: 647.043 + z: 100.000 + - x: 352.507 + y: 647.713 + z: 100.000 + - x: 353.327 + y: 648.476 + z: 100.000 + - x: 354.109 + y: 649.196 + z: 100.000 + - x: 354.661 + y: 649.830 + z: 100.000 + - x: 355.275 + y: 650.523 + z: 100.000 + - x: 356.177 + y: 652.020 + z: 100.000 + - x: 356.615 + y: 653.084 + z: 100.000 + - x: 356.929 + y: 654.139 + z: 100.000 + - x: 357.146 + y: 655.241 + z: 100.000 + - x: 357.284 + y: 656.160 + z: 100.000 + - x: 357.312 + y: 657.420 + z: 100.000 + - x: 357.425 + y: 658.703 + z: 100.000 + - x: 357.383 + y: 660.465 + z: 100.000 + - x: 357.349 + y: 661.894 + z: 100.000 + - x: 357.386 + y: 664.700 + z: 100.000 + - x: 357.338 + y: 666.699 + z: 100.000 + - x: 357.291 + y: 668.699 + z: 100.000 + - x: 357.243 + y: 670.698 + z: 100.000 + - x: 357.195 + y: 672.698 + z: 100.000 + - x: 357.148 + y: 674.697 + z: 100.000 + - x: 357.021 + y: 680.023 + z: 100.000 + right_bound: + - x: 329.531 + y: 641.578 + z: 100.000 + - x: 332.717 + y: 641.619 + z: 100.000 + - x: 334.395 + y: 641.641 + z: 100.000 + - x: 336.394 + y: 641.668 + z: 100.000 + - x: 337.761 + y: 641.686 + z: 100.000 + - x: 340.394 + y: 641.721 + z: 100.000 + - x: 342.805 + y: 641.730 + z: 100.000 + - x: 344.462 + y: 641.823 + z: 100.000 + - x: 346.283 + y: 641.878 + z: 100.000 + - x: 347.708 + y: 641.985 + z: 100.000 + - x: 349.158 + y: 642.284 + z: 100.000 + - x: 350.570 + y: 642.681 + z: 100.000 + - x: 351.954 + y: 643.219 + z: 100.000 + - x: 353.269 + y: 643.933 + z: 100.000 + - x: 354.499 + y: 644.727 + z: 100.000 + - x: 355.646 + y: 645.678 + z: 100.000 + - x: 356.516 + y: 646.483 + z: 100.000 + - x: 357.282 + y: 647.228 + z: 100.000 + - x: 357.690 + y: 647.819 + z: 100.000 + - x: 358.527 + y: 649.081 + z: 100.000 + - x: 359.237 + y: 650.418 + z: 100.000 + - x: 359.789 + y: 651.774 + z: 100.000 + - x: 360.225 + y: 653.220 + z: 100.000 + - x: 360.523 + y: 654.391 + z: 100.000 + - x: 360.701 + y: 655.780 + z: 100.000 + - x: 360.976 + y: 657.487 + z: 100.000 + - x: 360.804 + y: 658.842 + z: 100.000 + - x: 360.774 + y: 660.766 + z: 100.000 + - x: 360.755 + y: 661.975 + z: 100.000 + - x: 360.585 + y: 664.776 + z: 100.000 + - x: 360.537 + y: 666.776 + z: 100.000 + - x: 360.490 + y: 668.775 + z: 100.000 + - x: 360.442 + y: 670.774 + z: 100.000 + - x: 360.394 + y: 672.774 + z: 100.000 + - x: 360.347 + y: 674.773 + z: 100.000 + - x: 360.220 + y: 680.099 + z: 100.000 +dynamic_object: + header: + stamp: + sec: 563 + nanosec: 160706650 + frame_id: map + objects: + - object_id: + uuid: + - 6 + - 144 + - 167 + - 221 + - 26 + - 196 + - 145 + - 186 + - 207 + - 95 + - 21 + - 211 + - 96 + - 13 + - 92 + - 5 + existence_probability: 0.00000 + classification: + - label: 6 + probability: 1.00000 + kinematics: + initial_pose_with_covariance: + pose: + position: + x: 404.688 + y: 647.065 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + covariance: + - 0.415785 + - -0.000621846 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - -0.000621846 + - 0.388031 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0108039 + initial_twist_with_covariance: + twist: + linear: + x: 9.96635 + y: 3.24754e-05 + z: 0.00000 + angular: + x: 0.00000 + y: 0.00000 + z: 5.69744e-05 + covariance: + - 1.01780 + - -2.02150e-05 + - 0.00000 + - 0.00000 + - 0.00000 + - -3.54650e-05 + - -2.02150e-05 + - 0.00403854 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00708516 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - -3.54650e-05 + - 0.00708516 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0124301 + initial_acceleration_with_covariance: + accel: + linear: + x: 0.00000 + y: 0.00000 + z: 0.00000 + angular: + x: 0.00000 + y: 0.00000 + z: 0.00000 + covariance: + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + predicted_paths: + - path: + - position: + x: 404.688 + y: 647.065 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 409.670 + y: 647.155 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 414.653 + y: 647.245 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 419.635 + y: 647.335 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 424.617 + y: 647.425 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 429.600 + y: 647.515 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 434.582 + y: 647.605 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 439.565 + y: 647.694 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 444.547 + y: 647.784 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 449.529 + y: 647.874 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 454.512 + y: 647.964 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 459.494 + y: 648.054 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 464.476 + y: 648.144 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 469.459 + y: 648.233 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 474.441 + y: 648.323 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 479.423 + y: 648.413 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 484.406 + y: 648.503 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 489.388 + y: 648.593 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 494.371 + y: 648.683 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 499.353 + y: 648.773 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + - position: + x: 504.335 + y: 648.862 + z: 100.630 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00901435 + w: 0.999959 + time_step: + sec: 0 + nanosec: 500000000 + confidence: 1.00000 + shape: + type: 0 + footprint: + points: [] + dimensions: + x: 1.90000 + y: 0.501209 + z: 0.690476 + - object_id: + uuid: + - 32 + - 119 + - 141 + - 16 + - 72 + - 85 + - 32 + - 153 + - 66 + - 136 + - 88 + - 177 + - 247 + - 166 + - 151 + - 80 + existence_probability: 0.00000 + classification: + - label: 6 + probability: 1.00000 + kinematics: + initial_pose_with_covariance: + pose: + position: + x: 323.928 + y: 644.831 + z: 100.568 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00410256 + w: 0.999992 + covariance: + - 0.0657687 + - -0.000366900 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - -0.000366900 + - 0.0451891 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00300423 + initial_twist_with_covariance: + twist: + linear: + x: 10.0048 + y: -0.00124906 + z: 0.00000 + angular: + x: 0.00000 + y: 0.00000 + z: -0.00219133 + covariance: + - 0.522271 + - -6.09993e-05 + - 0.00000 + - 0.00000 + - 0.00000 + - -0.000107016 + - -6.09993e-05 + - 0.00263830 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00462859 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - -0.000107016 + - 0.00462859 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00812034 + initial_acceleration_with_covariance: + accel: + linear: + x: 0.00000 + y: 0.00000 + z: 0.00000 + angular: + x: 0.00000 + y: 0.00000 + z: 0.00000 + covariance: + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + predicted_paths: + - path: + - position: + x: 323.928 + y: 644.831 + z: 100.568 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00410256 + w: 0.999992 + - position: + x: 328.930 + y: 644.785 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00453640 + w: 0.999990 + - position: + x: 333.933 + y: 644.723 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00622365 + w: 0.999981 + - position: + x: 338.935 + y: 644.640 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00828910 + w: 0.999966 + - position: + x: 343.877 + y: 644.600 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00409926 + w: 0.999992 + - position: + x: 348.624 + y: 645.122 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0547342 + w: 0.998501 + - position: + x: 352.898 + y: 646.993 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.204867 + w: 0.978790 + - position: + x: 356.221 + y: 650.176 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.372718 + w: 0.927945 + - position: + x: 358.029 + y: 654.521 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.554937 + w: 0.831892 + - position: + x: 358.484 + y: 659.393 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.673390 + w: 0.739287 + - position: + x: 358.380 + y: 664.391 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.714418 + w: 0.699720 + - position: + x: 358.261 + y: 669.391 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 358.142 + y: 674.391 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 358.023 + y: 679.392 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.904 + y: 684.392 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.784 + y: 689.392 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.665 + y: 694.393 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.546 + y: 699.393 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.427 + y: 704.394 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.308 + y: 709.394 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.188 + y: 714.395 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.069 + y: 719.395 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.950 + y: 724.396 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.831 + y: 729.397 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.712 + y: 734.398 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.593 + y: 739.399 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.473 + y: 744.400 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.354 + y: 749.400 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.235 + y: 754.401 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.116 + y: 759.402 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 355.997 + y: 764.403 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + time_step: + sec: 0 + nanosec: 500000000 + confidence: 0.250000 + - path: + - position: + x: 323.928 + y: 644.831 + z: 100.568 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00410256 + w: 0.999992 + - position: + x: 328.930 + y: 644.786 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00451016 + w: 0.999990 + - position: + x: 333.933 + y: 644.725 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00607237 + w: 0.999982 + - position: + x: 338.935 + y: 644.645 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00796688 + w: 0.999968 + - position: + x: 343.880 + y: 644.606 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00392303 + w: 0.999992 + - position: + x: 348.786 + y: 644.906 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0304731 + w: 0.999536 + - position: + x: 353.463 + y: 645.966 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.111241 + w: 0.993793 + - position: + x: 357.696 + y: 648.148 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.235723 + w: 0.971820 + - position: + x: 361.186 + y: 651.334 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.361617 + w: 0.932327 + - position: + x: 363.716 + y: 655.456 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.488304 + w: 0.872674 + - position: + x: 364.853 + y: 660.052 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.616332 + w: 0.787487 + - position: + x: 364.887 + y: 665.003 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.704715 + w: 0.709490 + - position: + x: 364.768 + y: 670.003 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 364.648 + y: 675.003 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 364.529 + y: 680.004 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 364.410 + y: 685.004 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 364.291 + y: 690.005 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 364.172 + y: 695.005 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 364.053 + y: 700.006 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 363.933 + y: 705.006 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 363.814 + y: 710.007 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 363.695 + y: 715.007 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 363.576 + y: 720.008 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 363.457 + y: 725.009 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 363.338 + y: 730.010 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 363.218 + y: 735.011 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 363.099 + y: 740.011 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 362.980 + y: 745.012 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 362.861 + y: 750.013 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 362.742 + y: 755.014 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 362.622 + y: 760.015 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + time_step: + sec: 0 + nanosec: 500000000 + confidence: 0.250000 + - path: + - position: + x: 323.928 + y: 644.831 + z: 100.568 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00410256 + w: 0.999992 + - position: + x: 328.930 + y: 644.786 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00451016 + w: 0.999990 + - position: + x: 333.933 + y: 644.725 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00607237 + w: 0.999982 + - position: + x: 338.935 + y: 644.645 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00796688 + w: 0.999968 + - position: + x: 343.873 + y: 644.613 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00329511 + w: 0.999995 + - position: + x: 348.698 + y: 645.015 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0415760 + w: 0.999135 + - position: + x: 353.223 + y: 646.395 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.147464 + w: 0.989067 + - position: + x: 357.115 + y: 649.075 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.296991 + w: 0.954880 + - position: + x: 359.997 + y: 652.871 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.444541 + w: 0.895759 + - position: + x: 361.525 + y: 657.337 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.581548 + w: 0.813512 + - position: + x: 361.651 + y: 662.207 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.697878 + w: 0.716217 + - position: + x: 361.533 + y: 667.205 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715386 + w: 0.698729 + - position: + x: 361.414 + y: 672.205 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 361.295 + y: 677.206 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 361.176 + y: 682.206 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 361.057 + y: 687.206 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.938 + y: 692.207 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.818 + y: 697.207 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.699 + y: 702.208 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.580 + y: 707.208 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.461 + y: 712.209 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.342 + y: 717.209 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.222 + y: 722.210 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.103 + y: 727.211 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.984 + y: 732.212 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.865 + y: 737.213 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.746 + y: 742.214 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.626 + y: 747.214 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.507 + y: 752.215 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.388 + y: 757.216 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.269 + y: 762.217 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + time_step: + sec: 0 + nanosec: 500000000 + confidence: 0.250000 + - path: + - position: + x: 323.928 + y: 644.831 + z: 100.568 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00410256 + w: 0.999992 + - position: + x: 328.930 + y: 644.785 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00457230 + w: 0.999990 + - position: + x: 333.933 + y: 644.721 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00644958 + w: 0.999979 + - position: + x: 338.935 + y: 644.632 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00883007 + w: 0.999961 + - position: + x: 343.938 + y: 644.526 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.0105871 + w: 0.999944 + - position: + x: 348.941 + y: 644.416 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.0110042 + w: 0.999939 + - position: + x: 353.943 + y: 644.319 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00972075 + w: 0.999953 + - position: + x: 358.946 + y: 644.250 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00691289 + w: 0.999976 + - position: + x: 363.948 + y: 644.219 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.00309863 + w: 0.999995 + - position: + x: 368.950 + y: 644.228 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.000886733 + w: 1.00000 + - position: + x: 373.952 + y: 644.264 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00363761 + w: 0.999993 + - position: + x: 378.954 + y: 644.305 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00413557 + w: 0.999991 + - position: + x: 383.955 + y: 644.347 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00420318 + w: 0.999991 + - position: + x: 388.957 + y: 644.388 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00411113 + w: 0.999992 + - position: + x: 393.958 + y: 644.432 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00439488 + w: 0.999990 + - position: + x: 398.956 + y: 644.454 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00215849 + w: 0.999998 + - position: + x: 403.941 + y: 644.630 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0176845 + w: 0.999844 + - position: + x: 408.939 + y: 644.821 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + - position: + x: 413.938 + y: 645.012 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + - position: + x: 418.936 + y: 645.202 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + - position: + x: 423.935 + y: 645.393 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + - position: + x: 428.933 + y: 645.584 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + - position: + x: 433.932 + y: 645.774 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + - position: + x: 438.931 + y: 645.965 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + - position: + x: 443.929 + y: 646.156 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + - position: + x: 448.928 + y: 646.346 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + - position: + x: 453.927 + y: 646.537 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + - position: + x: 458.925 + y: 646.728 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + - position: + x: 463.924 + y: 646.918 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + - position: + x: 468.923 + y: 647.109 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + - position: + x: 473.922 + y: 647.300 + z: 100.384 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.0190608 + w: 0.999818 + time_step: + sec: 0 + nanosec: 500000000 + confidence: 0.250000 + shape: + type: 0 + footprint: + points: [] + dimensions: + x: 1.90000 + y: 0.604998 + z: 0.767451 +traffic_signal: + stamp: + sec: 0 + nanosec: 0 + traffic_light_groups: [] +route: + header: + stamp: + sec: 21 + nanosec: 17351334 + frame_id: map + start_pose: + position: + x: 301.475 + y: 642.905 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00500123 + w: 0.999987 + goal_pose: + position: + x: 358.812 + y: 675.174 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.705159 + w: 0.709049 + segments: + - preferred_primitive: + id: 2000 + primitive_type: "" + primitives: + - id: 2000 + primitive_type: lane + - id: 2001 + primitive_type: lane + - id: 2002 + primitive_type: lane + - preferred_primitive: + id: 2010 + primitive_type: "" + primitives: + - id: 2010 + primitive_type: lane + - preferred_primitive: + id: 2200 + primitive_type: "" + primitives: + - id: 2200 + primitive_type: lane + - preferred_primitive: + id: 3500 + primitive_type: "" + primitives: + - id: 3500 + primitive_type: lane + - id: 3501 + primitive_type: lane + - id: 3502 + primitive_type: lane + uuid: + uuid: + - 195 + - 84 + - 241 + - 105 + - 133 + - 218 + - 136 + - 83 + - 104 + - 191 + - 48 + - 109 + - 85 + - 60 + - 177 + - 115 + allow_modification: false +operation_mode: + stamp: + sec: 550 + nanosec: 913829317 + mode: 2 + is_autoware_control_enabled: true + is_in_transition: false + is_stop_mode_available: true + is_autonomous_mode_available: true + is_local_mode_available: true + is_remote_mode_available: true +self_acceleration: + header: + stamp: + sec: 563 + nanosec: 188542779 + frame_id: /base_link + accel: + accel: + linear: + x: -0.770147 + y: 0.0409905 + z: 0.00000 + angular: + x: 0.00000 + y: 0.00000 + z: 0.00000 + covariance: + - 0.00100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00100000 +self_odometry: + header: + stamp: + sec: 563 + nanosec: 188542779 + frame_id: map + child_frame_id: base_link + pose: + pose: + position: + x: 337.371 + y: 643.219 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.00401753 + w: 0.999992 + covariance: + - 0.000100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.000100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + twist: + twist: + linear: + x: 4.13155 + y: 0.00000 + z: 0.00000 + angular: + x: 0.00000 + y: 0.00000 + z: 0.00992133 + covariance: + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test_data/object_on_shoulder.yaml b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test_data/object_on_shoulder.yaml new file mode 100644 index 0000000000000..9a20cbee9c1ff --- /dev/null +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/test_data/object_on_shoulder.yaml @@ -0,0 +1,2512 @@ +# +# AUTO GENERATED by autoware_test_utils::topic_snapshot_saver +# format1: +# +# format_version: +# map_path_uri: package:/// +# fields(this is array) +# - name: +# type: either {Odometry | AccelWithCovarianceStamped | PredictedObjects | OperationModeState | LaneletRoute | TrafficLightGroupArray | TrackedObjects | PathWithLaneId | TBD} +# topic: +# +format_version: 1 +map_path_uri: package://autoware_test_utils/test_map/intersection/lanelet2_map.osm +path_with_lane_id: + header: + stamp: + sec: 74 + nanosec: 11949715 + frame_id: map + points: + - point: + pose: + position: + x: 360.306 + y: 597.246 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.710800 + w: 0.703394 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1010 + - point: + pose: + position: + x: 360.285 + y: 599.246 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.710829 + w: 0.703365 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1010 + - point: + pose: + position: + x: 360.264 + y: 601.246 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.710857 + w: 0.703336 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1010 + - point: + pose: + position: + x: 360.243 + y: 603.246 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.710881 + w: 0.703312 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1010 + - point: + pose: + position: + x: 360.222 + y: 605.246 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.710951 + w: 0.703242 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1010 + - point: + pose: + position: + x: 360.200 + y: 607.246 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.711036 + w: 0.703156 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1010 + - point: + pose: + position: + x: 360.177 + y: 609.246 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.711601 + w: 0.702584 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1010 + - point: + pose: + position: + x: 360.152 + y: 611.245 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.711932 + w: 0.702248 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1010 + - point: + pose: + position: + x: 360.133 + y: 612.628 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.716985 + w: 0.697089 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1010 + - 1200 + - point: + pose: + position: + x: 360.116 + y: 613.245 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.732064 + w: 0.681236 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 359.972 + y: 615.239 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.740537 + w: 0.672016 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 359.778 + y: 617.231 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.759018 + w: 0.651069 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 359.474 + y: 619.204 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.784627 + w: 0.619968 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 359.010 + y: 621.159 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.835622 + w: 0.549305 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 358.221 + y: 622.986 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.876871 + w: 0.480726 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 357.127 + y: 624.700 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.906015 + w: 0.423245 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 355.847 + y: 626.230 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.934815 + w: 0.355135 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 354.341 + y: 627.567 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.956562 + w: 0.291529 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 352.674 + y: 628.688 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.976933 + w: 0.213544 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 350.854 + y: 629.523 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.989029 + w: 0.147720 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 348.920 + y: 630.114 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.997418 + w: 0.0718077 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 346.951 + y: 630.399 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.999926 + w: 0.0121684 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 344.951 + y: 630.448 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 1.00000 + w: 0.000253960 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 342.951 + y: 630.449 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999959 + w: 0.00906744 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - point: + pose: + position: + x: 342.741 + y: 630.445 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 1200 + - 2500 + - point: + pose: + position: + x: 340.951 + y: 630.409 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999893 + w: 0.0146423 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2500 + - point: + pose: + position: + x: 339.014 + y: 630.352 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999803 + w: 0.0198557 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2500 + - point: + pose: + position: + x: 337.016 + y: 630.273 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999732 + w: 0.0231414 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2500 + - point: + pose: + position: + x: 335.018 + y: 630.180 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999702 + w: 0.0243973 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2500 + - point: + pose: + position: + x: 333.020 + y: 630.083 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999705 + w: 0.0242858 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2500 + - point: + pose: + position: + x: 332.731 + y: 630.068 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999615 + w: 0.0277448 + longitudinal_velocity_mps: 16.6667 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2500 + - point: + pose: + position: + x: 331.733 + y: 630.013 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999615 + w: 0.0277448 + longitudinal_velocity_mps: 0.00000 + lateral_velocity_mps: 0.00000 + heading_rate_rps: 0.00000 + is_final: false + lane_ids: + - 2500 + left_bound: + - x: 358.794 + y: 596.731 + z: 100.000 + - x: 358.788 + y: 597.342 + z: 100.000 + - x: 358.758 + y: 600.198 + z: 100.000 + - x: 358.736 + y: 602.392 + z: 100.000 + - x: 358.718 + y: 604.199 + z: 100.000 + - x: 358.698 + y: 606.199 + z: 100.000 + - x: 358.686 + y: 607.440 + z: 100.000 + - x: 358.610 + y: 610.191 + z: 100.000 + - x: 358.512 + y: 612.597 + z: 100.000 + - x: 358.405 + y: 614.096 + z: 100.000 + - x: 358.218 + y: 616.079 + z: 100.000 + - x: 358.086 + y: 617.465 + z: 100.000 + - x: 357.913 + y: 618.622 + z: 100.000 + - x: 357.666 + y: 619.746 + z: 100.000 + - x: 357.285 + y: 620.810 + z: 100.000 + - x: 356.832 + y: 621.812 + z: 100.000 + - x: 356.284 + y: 622.823 + z: 100.000 + - x: 355.663 + y: 623.752 + z: 100.000 + - x: 354.964 + y: 624.613 + z: 100.000 + - x: 354.158 + y: 625.437 + z: 100.000 + - x: 353.306 + y: 626.152 + z: 100.000 + - x: 352.395 + y: 626.788 + z: 100.000 + - x: 351.400 + y: 627.366 + z: 100.000 + - x: 350.389 + y: 627.820 + z: 100.000 + - x: 349.337 + y: 628.212 + z: 100.000 + - x: 348.219 + y: 628.479 + z: 100.000 + - x: 347.083 + y: 628.681 + z: 100.000 + - x: 346.042 + y: 628.729 + z: 100.000 + - x: 344.050 + y: 628.720 + z: 100.000 + - x: 342.764 + y: 628.777 + z: 100.000 + - x: 340.080 + y: 628.723 + z: 100.000 + - x: 338.078 + y: 628.751 + z: 100.000 + - x: 336.079 + y: 628.710 + z: 100.000 + - x: 334.080 + y: 628.670 + z: 100.000 + - x: 332.082 + y: 628.629 + z: 100.000 + - x: 326.872 + y: 628.524 + z: 100.000 + right_bound: + - x: 361.830 + y: 596.762 + z: 100.000 + - x: 361.823 + y: 597.400 + z: 100.000 + - x: 361.792 + y: 600.231 + z: 100.000 + - x: 361.767 + y: 602.446 + z: 100.000 + - x: 361.748 + y: 604.230 + z: 100.000 + - x: 361.726 + y: 606.230 + z: 100.000 + - x: 361.712 + y: 607.493 + z: 100.000 + - x: 361.718 + y: 610.230 + z: 100.000 + - x: 361.754 + y: 612.657 + z: 100.000 + - x: 361.627 + y: 614.331 + z: 100.000 + - x: 361.519 + y: 616.330 + z: 100.000 + - x: 361.452 + y: 617.634 + z: 100.000 + - x: 361.277 + y: 619.056 + z: 100.000 + - x: 360.998 + y: 620.486 + z: 100.000 + - x: 360.581 + y: 621.905 + z: 100.000 + - x: 359.991 + y: 623.293 + z: 100.000 + - x: 359.319 + y: 624.583 + z: 100.000 + - x: 358.490 + y: 625.825 + z: 100.000 + - x: 357.546 + y: 626.984 + z: 100.000 + - x: 356.525 + y: 628.025 + z: 100.000 + - x: 355.377 + y: 628.981 + z: 100.000 + - x: 354.158 + y: 629.845 + z: 100.000 + - x: 352.881 + y: 630.552 + z: 100.000 + - x: 351.515 + y: 631.167 + z: 100.000 + - x: 350.098 + y: 631.615 + z: 100.000 + - x: 348.672 + y: 631.919 + z: 100.000 + - x: 347.236 + y: 632.124 + z: 100.000 + - x: 346.083 + y: 632.098 + z: 100.000 + - x: 344.082 + y: 632.081 + z: 100.000 + - x: 342.719 + y: 632.113 + z: 100.000 + - x: 340.012 + y: 632.058 + z: 100.000 + - x: 338.014 + y: 631.950 + z: 100.000 + - x: 336.015 + y: 631.909 + z: 100.000 + - x: 334.016 + y: 631.869 + z: 100.000 + - x: 332.017 + y: 631.829 + z: 100.000 + - x: 326.807 + y: 631.724 + z: 100.000 +dynamic_object: + header: + stamp: + sec: 73 + nanosec: 980215670 + frame_id: map + objects: + - object_id: + uuid: + - 251 + - 180 + - 23 + - 85 + - 112 + - 118 + - 142 + - 88 + - 241 + - 29 + - 194 + - 27 + - 222 + - 164 + - 130 + - 251 + existence_probability: 0.00000 + classification: + - label: 6 + probability: 1.00000 + kinematics: + initial_pose_with_covariance: + pose: + position: + x: 357.408 + y: 667.312 + z: 100.774 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.712257 + w: 0.701919 + covariance: + - 0.299126 + - -8.23923e-05 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - -8.23923e-05 + - 0.349251 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00879510 + initial_twist_with_covariance: + twist: + linear: + x: 9.98083 + y: 0.00185652 + z: 0.00000 + angular: + x: 0.00000 + y: 0.00000 + z: 0.00325706 + covariance: + - 0.970951 + - 0.000139981 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.000245582 + - 0.000139981 + - 0.00384142 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00673936 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.000245582 + - 0.00673936 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0118235 + initial_acceleration_with_covariance: + accel: + linear: + x: 0.00000 + y: 0.00000 + z: 0.00000 + angular: + x: 0.00000 + y: 0.00000 + z: 0.00000 + covariance: + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + predicted_paths: + - path: + - position: + x: 357.408 + y: 667.312 + z: 100.774 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.712257 + w: 0.701919 + - position: + x: 357.373 + y: 672.303 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.709614 + w: 0.704590 + - position: + x: 357.520 + y: 677.298 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.696604 + w: 0.717456 + - position: + x: 357.917 + y: 682.299 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.678600 + w: 0.734508 + - position: + x: 358.531 + y: 687.305 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.662668 + w: 0.748913 + - position: + x: 359.266 + y: 692.315 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.653723 + w: 0.756734 + - position: + x: 359.995 + y: 697.324 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.654217 + w: 0.756307 + - position: + x: 360.590 + y: 702.329 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.664107 + w: 0.747638 + - position: + x: 360.955 + y: 707.330 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.680844 + w: 0.732428 + - position: + x: 361.063 + y: 712.324 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.699424 + w: 0.714707 + - position: + x: 360.983 + y: 717.314 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.712725 + w: 0.701443 + - position: + x: 360.864 + y: 722.303 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.746 + y: 727.292 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.627 + y: 732.280 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.508 + y: 737.269 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.389 + y: 742.258 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.270 + y: 747.247 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.151 + y: 752.236 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 360.032 + y: 757.225 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.913 + y: 762.214 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.794 + y: 767.203 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.675 + y: 772.192 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.557 + y: 777.181 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.438 + y: 782.170 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.319 + y: 787.159 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.200 + y: 792.148 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 359.081 + y: 797.137 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 358.962 + y: 802.126 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 358.843 + y: 807.115 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 358.724 + y: 812.104 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 358.605 + y: 817.093 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + time_step: + sec: 0 + nanosec: 500000000 + confidence: 0.230769 + - path: + - position: + x: 357.408 + y: 667.312 + z: 100.774 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.712257 + w: 0.701919 + - position: + x: 357.340 + y: 672.302 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.711946 + w: 0.702234 + - position: + x: 357.296 + y: 677.293 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.710176 + w: 0.704024 + - position: + x: 357.286 + y: 682.284 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.707820 + w: 0.706393 + - position: + x: 357.304 + y: 687.276 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.705868 + w: 0.708343 + - position: + x: 357.334 + y: 692.269 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.704976 + w: 0.709232 + - position: + x: 357.357 + y: 697.261 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.705452 + w: 0.708758 + - position: + x: 357.355 + y: 702.252 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.707256 + w: 0.706957 + - position: + x: 357.314 + y: 707.243 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.709999 + w: 0.704203 + - position: + x: 357.231 + y: 712.233 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.712949 + w: 0.701216 + - position: + x: 357.119 + y: 717.222 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715047 + w: 0.699076 + - position: + x: 357.000 + y: 722.211 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.881 + y: 727.199 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.762 + y: 732.188 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.643 + y: 737.177 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.524 + y: 742.166 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.405 + y: 747.155 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.286 + y: 752.144 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.167 + y: 757.133 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.049 + y: 762.122 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 355.930 + y: 767.111 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 355.811 + y: 772.100 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 355.692 + y: 777.089 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 355.573 + y: 782.078 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 355.454 + y: 787.067 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 355.335 + y: 792.056 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 355.216 + y: 797.045 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 355.097 + y: 802.033 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 354.978 + y: 807.022 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 354.859 + y: 812.011 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 354.741 + y: 817.000 + z: 100.306 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + time_step: + sec: 0 + nanosec: 500000000 + confidence: 0.769231 + shape: + type: 0 + footprint: + points: [] + dimensions: + x: 1.89999 + y: 0.500442 + z: 0.612431 + - object_id: + uuid: + - 218 + - 141 + - 152 + - 171 + - 185 + - 127 + - 84 + - 175 + - 69 + - 40 + - 199 + - 89 + - 96 + - 107 + - 61 + - 243 + existence_probability: 0.00000 + classification: + - label: 6 + probability: 1.00000 + kinematics: + initial_pose_with_covariance: + pose: + position: + x: 358.218 + y: 603.622 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.707443 + w: 0.706770 + covariance: + - 0.0636258 + - -0.000170219 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - -0.000170219 + - 0.0826995 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00394708 + initial_twist_with_covariance: + twist: + linear: + x: 10.0303 + y: -0.00247386 + z: 0.00000 + angular: + x: 0.00000 + y: 0.00000 + z: -0.00434011 + covariance: + - 0.579437 + - -9.81341e-05 + - 0.00000 + - 0.00000 + - 0.00000 + - -0.000172165 + - -9.81341e-05 + - 0.00311875 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00547149 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.0100000 + - 0.00000 + - -0.000172165 + - 0.00547149 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00959910 + initial_acceleration_with_covariance: + accel: + linear: + x: 0.00000 + y: 0.00000 + z: 0.00000 + angular: + x: 0.00000 + y: 0.00000 + z: 0.00000 + covariance: + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + predicted_paths: + - path: + - position: + x: 358.218 + y: 603.622 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.707443 + w: 0.706770 + - position: + x: 358.224 + y: 608.637 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.706633 + w: 0.707581 + - position: + x: 358.279 + y: 613.653 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.703235 + w: 0.710958 + - position: + x: 358.397 + y: 618.671 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.698737 + w: 0.715379 + - position: + x: 358.567 + y: 623.690 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.695068 + w: 0.718944 + - position: + x: 358.758 + y: 628.710 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.693532 + w: 0.720426 + - position: + x: 358.932 + y: 633.729 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.694735 + w: 0.719266 + - position: + x: 359.054 + y: 638.747 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.698453 + w: 0.715656 + - position: + x: 359.097 + y: 643.763 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.704045 + w: 0.710155 + - position: + x: 359.057 + y: 648.778 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.709938 + w: 0.704265 + - position: + x: 358.958 + y: 653.791 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.714096 + w: 0.700048 + - position: + x: 358.849 + y: 658.805 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.714730 + w: 0.699401 + - position: + x: 358.740 + y: 663.817 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.714768 + w: 0.699361 + - position: + x: 358.620 + y: 668.830 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 358.501 + y: 673.843 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 358.381 + y: 678.856 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 358.262 + y: 683.870 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 358.142 + y: 688.883 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 358.023 + y: 693.896 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.903 + y: 698.909 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.784 + y: 703.923 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.664 + y: 708.936 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.545 + y: 713.950 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.425 + y: 718.963 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.306 + y: 723.977 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.186 + y: 728.991 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 357.067 + y: 734.004 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.947 + y: 739.018 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.828 + y: 744.032 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.708 + y: 749.045 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + - position: + x: 356.589 + y: 754.059 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.715481 + w: 0.698632 + time_step: + sec: 0 + nanosec: 500000000 + confidence: 0.500000 + - path: + - position: + x: 358.218 + y: 603.622 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.707443 + w: 0.706770 + - position: + x: 358.206 + y: 608.635 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.707930 + w: 0.706283 + - position: + x: 358.149 + y: 613.642 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.711130 + w: 0.703060 + - position: + x: 358.010 + y: 618.635 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.716853 + w: 0.697224 + - position: + x: 357.024 + y: 623.117 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.779378 + w: 0.626554 + - position: + x: 354.441 + y: 627.006 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.881248 + w: 0.472653 + - position: + x: 350.340 + y: 629.665 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.958935 + w: 0.283625 + - position: + x: 345.469 + y: 630.694 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.994592 + w: 0.103864 + - position: + x: 340.508 + y: 630.814 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.999926 + w: 0.0121264 + - position: + x: 335.554 + y: 630.768 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999989 + w: 0.00460609 + - position: + x: 330.597 + y: 630.677 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999957 + w: 0.00925679 + - position: + x: 325.638 + y: 630.576 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 320.674 + y: 630.476 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 315.708 + y: 630.376 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 310.737 + y: 630.276 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 305.763 + y: 630.175 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 300.785 + y: 630.075 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 295.803 + y: 629.974 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 290.817 + y: 629.874 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 285.828 + y: 629.773 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 280.835 + y: 629.672 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 275.839 + y: 629.571 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 270.840 + y: 629.470 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 265.838 + y: 629.370 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 260.833 + y: 629.268 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 255.825 + y: 629.167 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 250.816 + y: 629.066 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 245.805 + y: 628.965 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 240.792 + y: 628.864 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 235.778 + y: 628.763 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + - position: + x: 230.764 + y: 628.662 + z: 100.496 + orientation: + x: 0.00000 + y: 0.00000 + z: -0.999949 + w: 0.0100898 + time_step: + sec: 0 + nanosec: 500000000 + confidence: 0.500000 + shape: + type: 0 + footprint: + points: [] + dimensions: + x: 1.90000 + y: 0.644288 + z: 0.991445 +traffic_signal: + stamp: + sec: 0 + nanosec: 0 + traffic_light_groups: [] +route: + header: + stamp: + sec: 19 + nanosec: 549630704 + frame_id: map + start_pose: + position: + x: 360.481 + y: 591.844 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.721675 + w: 0.692232 + goal_pose: + position: + x: 331.733 + y: 630.013 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.999615 + w: -0.0277448 + segments: + - preferred_primitive: + id: 1010 + primitive_type: "" + primitives: + - id: 1010 + primitive_type: lane + - preferred_primitive: + id: 1200 + primitive_type: "" + primitives: + - id: 1200 + primitive_type: lane + - preferred_primitive: + id: 2500 + primitive_type: "" + primitives: + - id: 2500 + primitive_type: lane + - id: 2501 + primitive_type: lane + uuid: + uuid: + - 83 + - 230 + - 40 + - 201 + - 182 + - 232 + - 31 + - 237 + - 204 + - 91 + - 39 + - 90 + - 153 + - 179 + - 6 + - 123 + allow_modification: false +operation_mode: + stamp: + sec: 65 + nanosec: 819714871 + mode: 2 + is_autoware_control_enabled: true + is_in_transition: false + is_stop_mode_available: true + is_autonomous_mode_available: true + is_local_mode_available: true + is_remote_mode_available: true +self_acceleration: + header: + stamp: + sec: 74 + nanosec: 42641063 + frame_id: /base_link + accel: + accel: + linear: + x: -1.01094 + y: 0.00400509 + z: 0.00000 + angular: + x: 0.00000 + y: 0.00000 + z: 0.00000 + covariance: + - 0.00100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00100000 +self_odometry: + header: + stamp: + sec: 74 + nanosec: 42641063 + frame_id: map + child_frame_id: base_link + pose: + pose: + position: + x: 360.302 + y: 604.493 + z: 100.000 + orientation: + x: 0.00000 + y: 0.00000 + z: 0.707950 + w: 0.706263 + covariance: + - 0.000100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.000100000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + twist: + twist: + linear: + x: 2.31221 + y: 0.00000 + z: 0.00000 + angular: + x: 0.00000 + y: 0.00000 + z: 0.00173214 + covariance: + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 + - 0.00000 From 9ce874c9131f37a57c8661a5e65affa95831b381 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Wed, 8 Jan 2025 16:02:09 +0900 Subject: [PATCH 54/77] feat(lidar_centerpoint, pointpainting): add diag publisher for max voxel size (#9720) --- .../pointpainting_fusion/node.hpp | 2 ++ .../src/pointpainting_fusion/node.cpp | 17 ++++++++++++++++- .../lidar_centerpoint/centerpoint_trt.hpp | 2 +- .../include/autoware/lidar_centerpoint/node.hpp | 2 ++ .../lib/centerpoint_trt.cpp | 6 +++++- .../autoware_lidar_centerpoint/src/node.cpp | 17 ++++++++++++++++- 6 files changed, 42 insertions(+), 4 deletions(-) diff --git a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp index cd6cd87976522..5bc428a8e7ab8 100644 --- a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp +++ b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -58,6 +59,7 @@ class PointPaintingFusionNode void postprocess(sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) override; rclcpp::Publisher::SharedPtr obj_pub_ptr_; + std::unique_ptr diagnostics_interface_ptr_; int omp_num_threads_{1}; float score_threshold_{0.0}; diff --git a/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp b/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp index 25d9064ddbfc7..2f6f853d4281e 100644 --- a/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp +++ b/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp @@ -186,6 +186,8 @@ PointPaintingFusionNode::PointPaintingFusionNode(const rclcpp::NodeOptions & opt // create detector detector_ptr_ = std::make_unique( encoder_param, head_param, densification_param, config); + diagnostics_interface_ptr_ = + std::make_unique(this, "pointpainting_trt"); obj_pub_ptr_ = this->create_publisher("~/output/objects", rclcpp::QoS{1}); @@ -389,6 +391,7 @@ void PointPaintingFusionNode::postprocess(sensor_msgs::msg::PointCloud2 & painte { std::unique_ptr st_ptr; if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); + diagnostics_interface_ptr_->clear(); const auto objects_sub_count = obj_pub_ptr_->get_subscription_count() + obj_pub_ptr_->get_intra_process_subscription_count(); @@ -403,10 +406,21 @@ void PointPaintingFusionNode::postprocess(sensor_msgs::msg::PointCloud2 & painte } std::vector det_boxes3d; - bool is_success = detector_ptr_->detect(painted_pointcloud_msg, tf_buffer_, det_boxes3d); + bool is_num_pillars_within_range = true; + bool is_success = detector_ptr_->detect( + painted_pointcloud_msg, tf_buffer_, det_boxes3d, is_num_pillars_within_range); if (!is_success) { return; } + diagnostics_interface_ptr_->add_key_value( + "is_num_pillars_within_range", is_num_pillars_within_range); + if (!is_num_pillars_within_range) { + std::stringstream message; + message << "PointPaintingTRT::detect: The actual number of pillars exceeds its maximum value, " + << "which may limit the detection performance."; + diagnostics_interface_ptr_->update_level_and_message( + diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); + } std::vector raw_objects; raw_objects.reserve(det_boxes3d.size()); @@ -425,6 +439,7 @@ void PointPaintingFusionNode::postprocess(sensor_msgs::msg::PointCloud2 & painte if (objects_sub_count > 0) { obj_pub_ptr_->publish(output_msg); } + diagnostics_interface_ptr_->publish(painted_pointcloud_msg.header.stamp); } bool PointPaintingFusionNode::out_of_scope(__attribute__((unused)) const DetectedObjects & obj) diff --git a/perception/autoware_lidar_centerpoint/include/autoware/lidar_centerpoint/centerpoint_trt.hpp b/perception/autoware_lidar_centerpoint/include/autoware/lidar_centerpoint/centerpoint_trt.hpp index ce5ec3ea0abfe..671ff54f8ce0d 100644 --- a/perception/autoware_lidar_centerpoint/include/autoware/lidar_centerpoint/centerpoint_trt.hpp +++ b/perception/autoware_lidar_centerpoint/include/autoware/lidar_centerpoint/centerpoint_trt.hpp @@ -62,7 +62,7 @@ class CenterPointTRT bool detect( const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, const tf2_ros::Buffer & tf_buffer, - std::vector & det_boxes3d); + std::vector & det_boxes3d, bool & is_num_pillars_within_range); protected: void initPtr(); diff --git a/perception/autoware_lidar_centerpoint/include/autoware/lidar_centerpoint/node.hpp b/perception/autoware_lidar_centerpoint/include/autoware/lidar_centerpoint/node.hpp index a49451fde9d0d..1748db0e48392 100644 --- a/perception/autoware_lidar_centerpoint/include/autoware/lidar_centerpoint/node.hpp +++ b/perception/autoware_lidar_centerpoint/include/autoware/lidar_centerpoint/node.hpp @@ -20,6 +20,7 @@ #include "autoware/lidar_centerpoint/postprocess/non_maximum_suppression.hpp" #include +#include #include #include #include @@ -59,6 +60,7 @@ class LidarCenterPointNode : public rclcpp::Node DetectionClassRemapper detection_class_remapper_; std::unique_ptr detector_ptr_{nullptr}; + std::unique_ptr diagnostics_interface_ptr_; // debugger std::unique_ptr> stop_watch_ptr_{ diff --git a/perception/autoware_lidar_centerpoint/lib/centerpoint_trt.cpp b/perception/autoware_lidar_centerpoint/lib/centerpoint_trt.cpp index 6ee2b3733bdb0..530f59179d25b 100644 --- a/perception/autoware_lidar_centerpoint/lib/centerpoint_trt.cpp +++ b/perception/autoware_lidar_centerpoint/lib/centerpoint_trt.cpp @@ -19,6 +19,7 @@ #include "autoware/lidar_centerpoint/preprocess/preprocess_kernel.hpp" #include +#include #include #include @@ -127,8 +128,10 @@ void CenterPointTRT::initPtr() bool CenterPointTRT::detect( const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, const tf2_ros::Buffer & tf_buffer, - std::vector & det_boxes3d) + std::vector & det_boxes3d, bool & is_num_pillars_within_range) { + is_num_pillars_within_range = true; + CHECK_CUDA_ERROR(cudaMemsetAsync( encoder_in_features_d_.get(), 0, encoder_in_feature_size_ * sizeof(float), stream_)); CHECK_CUDA_ERROR( @@ -155,6 +158,7 @@ bool CenterPointTRT::detect( "The actual number of pillars (%u) exceeds its maximum value (%zu). " "Please considering increasing it since it may limit the detection performance.", num_pillars, config_.max_voxel_size_); + is_num_pillars_within_range = false; } return true; diff --git a/perception/autoware_lidar_centerpoint/src/node.cpp b/perception/autoware_lidar_centerpoint/src/node.cpp index 59acceeac54d6..825fc40234120 100644 --- a/perception/autoware_lidar_centerpoint/src/node.cpp +++ b/perception/autoware_lidar_centerpoint/src/node.cpp @@ -107,6 +107,8 @@ LidarCenterPointNode::LidarCenterPointNode(const rclcpp::NodeOptions & node_opti circle_nms_dist_threshold, yaw_norm_thresholds, has_variance_); detector_ptr_ = std::make_unique(encoder_param, head_param, densification_param, config); + diagnostics_interface_ptr_ = + std::make_unique(this, "centerpoint_trt"); pointcloud_sub_ = this->create_subscription( "~/input/pointcloud", rclcpp::SensorDataQoS{}.keep_last(1), @@ -144,12 +146,24 @@ void LidarCenterPointNode::pointCloudCallback( if (stop_watch_ptr_) { stop_watch_ptr_->toc("processing_time", true); } + diagnostics_interface_ptr_->clear(); std::vector det_boxes3d; - bool is_success = detector_ptr_->detect(*input_pointcloud_msg, tf_buffer_, det_boxes3d); + bool is_num_pillars_within_range = true; + bool is_success = detector_ptr_->detect( + *input_pointcloud_msg, tf_buffer_, det_boxes3d, is_num_pillars_within_range); if (!is_success) { return; } + diagnostics_interface_ptr_->add_key_value( + "is_num_pillars_within_range", is_num_pillars_within_range); + if (!is_num_pillars_within_range) { + std::stringstream message; + message << "CenterPointTRT::detect: The actual number of pillars exceeds its maximum value, " + << "which may limit the detection performance."; + diagnostics_interface_ptr_->update_level_and_message( + diagnostic_msgs::msg::DiagnosticStatus::WARN, message.str()); + } std::vector raw_objects; raw_objects.reserve(det_boxes3d.size()); @@ -169,6 +183,7 @@ void LidarCenterPointNode::pointCloudCallback( objects_pub_->publish(output_msg); published_time_publisher_->publish_if_subscribed(objects_pub_, output_msg.header.stamp); } + diagnostics_interface_ptr_->publish(input_pointcloud_msg->header.stamp); // add processing time for debug if (debug_publisher_ptr_ && stop_watch_ptr_) { From 14ee08b9d19c5f33ed37c72b9504fdcad464ef1b Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Wed, 8 Jan 2025 16:38:33 +0900 Subject: [PATCH 55/77] refactor(autoware_image_projection_based_fusion): organize 2d-detection related members (#9789) * chore: input_camera_topics_ is only for debug Signed-off-by: Taekjin LEE * feat: fuse main message with cached roi messages in fusion_node.cpp Signed-off-by: Taekjin LEE * chore: add comments on each process step, organize methods Signed-off-by: Taekjin LEE * feat: Export process method in fusion_node.cpp Export the `exportProcess()` method in `fusion_node.cpp` to handle the post-processing and publishing of the fused messages. This method cancels the timer, performs the necessary post-processing steps, publishes the output message, and resets the flags. It also adds processing time for debugging purposes. This change improves the organization and readability of the code. Signed-off-by: Taekjin LEE * feat: Refactor fusion_node.hpp and fusion_node.cpp Refactor the `fusion_node.hpp` and `fusion_node.cpp` files to improve code organization and readability. This includes exporting the `exportProcess()` method in `fusion_node.cpp` to handle post-processing and publishing of fused messages, adding comments on each process step, organizing methods, and fusing the main message with cached ROI messages. These changes enhance the overall quality of the codebase. Signed-off-by: Taekjin LEE * Refactor fusion_node.cpp and fusion_node.hpp for improved code organization and readability Signed-off-by: Taekjin LEE * Refactor fusion_node.hpp and fusion_node.cpp for improved code organization and readability Signed-off-by: Taekjin LEE * feat: Refactor fusion_node.cpp for improved code organization and readability Signed-off-by: Taekjin LEE * Refactor fusion_node.cpp for improved code organization and readability Signed-off-by: Taekjin LEE * feat: implement mutex per 2d detection process Signed-off-by: Taekjin LEE * Refactor fusion_node.hpp and fusion_node.cpp for improved code organization and readability Signed-off-by: Taekjin LEE * Refactor fusion_node.hpp and fusion_node.cpp for improved code organization and readability Signed-off-by: Taekjin LEE * revise template, inputs first and output at the last Signed-off-by: Taekjin LEE * explicit in and out types 1 Signed-off-by: Taekjin LEE * clarify pointcloud message type Signed-off-by: Taekjin LEE * Refactor fusion_node.hpp and fusion_node.cpp for improved code organization and readability Signed-off-by: Taekjin LEE * Refactor fusion_node.hpp and fusion_node.cpp for improved code organization and readability Signed-off-by: Taekjin LEE * Refactor fusion_node.hpp and fusion_node.cpp for improved code organization and readability Signed-off-by: Taekjin LEE * Refactor publisher types in fusion_node.hpp and node.hpp Signed-off-by: Taekjin LEE * fix: resolve cppcheck issue shadowVariable Signed-off-by: Taekjin LEE * Refactor fusion_node.hpp and fusion_node.cpp for improved code organization and readability Signed-off-by: Taekjin LEE * chore: rename Det2dManager to Det2dStatus Signed-off-by: Taekjin LEE * revert mutex related changes Signed-off-by: Taekjin LEE * refactor: review member and method's access Signed-off-by: Taekjin LEE * fix: resolve shadowVariable of 'det2d' Signed-off-by: Taekjin LEE * fix missing line Signed-off-by: Taekjin LEE * refactor message postprocess and publish methods Signed-off-by: Taekjin LEE * publish the main message is common Signed-off-by: Taekjin LEE * fix: replace pointcloud message type by the typename Signed-off-by: Taekjin LEE * review member access Signed-off-by: Taekjin LEE * Refactor fusion_node.hpp and fusion_node.cpp for improved code organization and readability Signed-off-by: Taekjin LEE * refactor: fix condition for publishing painted pointcloud message Signed-off-by: Taekjin LEE * fix: remove unused variable Signed-off-by: Taekjin LEE --------- Signed-off-by: Taekjin LEE --- .../fusion_node.hpp | 124 +++-- .../pointpainting_fusion/node.hpp | 20 +- .../roi_cluster_fusion/node.hpp | 21 +- .../roi_detected_object_fusion/node.hpp | 16 +- .../roi_pointcloud_fusion/node.hpp | 35 +- .../segmentation_pointcloud_fusion/node.hpp | 48 +- .../utils/utils.hpp | 12 +- .../src/fusion_node.cpp | 518 +++++++++--------- .../src/pointpainting_fusion/node.cpp | 86 ++- .../src/roi_cluster_fusion/node.cpp | 63 +-- .../src/roi_detected_object_fusion/node.cpp | 63 ++- .../src/roi_pointcloud_fusion/node.cpp | 91 ++- .../segmentation_pointcloud_fusion/node.cpp | 73 ++- .../src/utils/utils.cpp | 12 +- 14 files changed, 603 insertions(+), 579 deletions(-) diff --git a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/fusion_node.hpp b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/fusion_node.hpp index 239d406650ce8..b8881bc6abff7 100644 --- a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/fusion_node.hpp +++ b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/fusion_node.hpp @@ -52,14 +52,33 @@ using autoware_perception_msgs::msg::DetectedObject; using autoware_perception_msgs::msg::DetectedObjects; using sensor_msgs::msg::CameraInfo; using sensor_msgs::msg::Image; -using sensor_msgs::msg::PointCloud2; -using tier4_perception_msgs::msg::DetectedObjectsWithFeature; +using PointCloudMsgType = sensor_msgs::msg::PointCloud2; +using RoiMsgType = tier4_perception_msgs::msg::DetectedObjectsWithFeature; +using ClusterMsgType = tier4_perception_msgs::msg::DetectedObjectsWithFeature; +using ClusterObjType = tier4_perception_msgs::msg::DetectedObjectWithFeature; using tier4_perception_msgs::msg::DetectedObjectWithFeature; using PointCloud = pcl::PointCloud; using autoware::image_projection_based_fusion::CameraProjection; using autoware_perception_msgs::msg::ObjectClassification; -template +template +struct Det2dStatus +{ + // camera index + std::size_t id = 0; + // camera projection + std::unique_ptr camera_projector_ptr; + bool project_to_unrectified_image = false; + bool approximate_camera_projection = false; + // process flags + bool is_fused = false; + // timing + double input_offset_ms = 0.0; + // cache + std::map cached_det2d_msgs; +}; + +template class FusionNode : public rclcpp::Node { public: @@ -71,75 +90,72 @@ class FusionNode : public rclcpp::Node explicit FusionNode( const std::string & node_name, const rclcpp::NodeOptions & options, int queue_size); -protected: +private: + // Common process methods void cameraInfoCallback( const sensor_msgs::msg::CameraInfo::ConstSharedPtr input_camera_info_msg, const std::size_t camera_id); - virtual void preprocess(TargetMsg3D & output_msg); - - // callback for Msg subscription - virtual void subCallback(const typename TargetMsg3D::ConstSharedPtr input_msg); - - // callback for roi subscription - - virtual void roiCallback( - const typename Msg2D::ConstSharedPtr input_roi_msg, const std::size_t roi_i); - - virtual void fuseOnSingleImage( - const TargetMsg3D & input_msg, const std::size_t image_id, const Msg2D & input_roi_msg, - TargetMsg3D & output_msg) = 0; - - // set args if you need - virtual void postprocess(TargetMsg3D & output_msg); - - virtual void publish(const TargetMsg3D & output_msg); - + // callback for timer void timer_callback(); void setPeriod(const int64_t new_period); + void exportProcess(); + + // 2d detection management methods + bool checkAllDet2dFused() + { + for (const auto & det2d : det2d_list_) { + if (!det2d.is_fused) { + return false; + } + } + return true; + } - std::size_t rois_number_{1}; - tf2_ros::Buffer tf_buffer_; - tf2_ros::TransformListener tf_listener_; - - std::vector point_project_to_unrectified_image_; - - // camera_info - std::map camera_info_map_; - std::vector::SharedPtr> camera_info_subs_; // camera projection - std::vector camera_projectors_; - std::vector approx_camera_projection_; float approx_grid_cell_w_size_; float approx_grid_cell_h_size_; + // timer rclcpp::TimerBase::SharedPtr timer_; double timeout_ms_{}; double match_threshold_ms_{}; - std::vector input_rois_topics_; - std::vector input_camera_info_topics_; - std::vector input_camera_topics_; - /** \brief A vector of subscriber. */ - typename rclcpp::Subscription::SharedPtr sub_; std::vector::SharedPtr> rois_subs_; - - // offsets between cameras and the lidars - std::vector input_offset_ms_; + std::vector::SharedPtr> camera_info_subs_; // cache for fusion - std::vector is_fused_; - std::pair - cached_msg_; // first element is the timestamp in nanoseconds, second element is the message - std::vector> cached_roi_msgs_; + int64_t cached_det3d_msg_timestamp_; + typename Msg3D::SharedPtr cached_det3d_msg_ptr_; std::mutex mutex_cached_msgs_; - // output publisher - typename rclcpp::Publisher::SharedPtr pub_ptr_; +protected: + void setDet2DStatus(std::size_t rois_number); - // debugger - std::shared_ptr debugger_; - virtual bool out_of_scope(const ObjType & obj) = 0; + // callback for main subscription + void subCallback(const typename Msg3D::ConstSharedPtr input_msg); + // callback for roi subscription + void roiCallback(const typename Msg2D::ConstSharedPtr input_roi_msg, const std::size_t roi_i); + + // Custom process methods + virtual void preprocess(Msg3D & output_msg); + virtual void fuseOnSingleImage( + const Msg3D & input_msg, const Det2dStatus & det2d, const Msg2D & input_roi_msg, + Msg3D & output_msg) = 0; + virtual void postprocess(const Msg3D & processing_msg, ExportObj & output_msg); + virtual void publish(const ExportObj & output_msg); + + // Members + tf2_ros::Buffer tf_buffer_; + tf2_ros::TransformListener tf_listener_; + + // 2d detection management + std::vector> det2d_list_; + + /** \brief A vector of subscriber. */ + typename rclcpp::Subscription::SharedPtr sub_; + + // parameters for out_of_scope filter float filter_scope_min_x_; float filter_scope_max_x_; float filter_scope_min_y_; @@ -147,6 +163,12 @@ class FusionNode : public rclcpp::Node float filter_scope_min_z_; float filter_scope_max_z_; + // output publisher + typename rclcpp::Publisher::SharedPtr pub_ptr_; + + // debugger + std::shared_ptr debugger_; + /** \brief processing time publisher. **/ std::unique_ptr> stop_watch_ptr_; std::unique_ptr debug_publisher_; diff --git a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp index 5bc428a8e7ab8..9505a926df2f8 100644 --- a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp +++ b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp @@ -42,27 +42,25 @@ inline bool isInsideBbox( proj_y >= roi.y_offset * zc && proj_y <= (roi.y_offset + roi.height) * zc; } -class PointPaintingFusionNode -: public FusionNode +class PointPaintingFusionNode : public FusionNode { public: explicit PointPaintingFusionNode(const rclcpp::NodeOptions & options); -protected: - void preprocess(sensor_msgs::msg::PointCloud2 & pointcloud_msg) override; +private: + void preprocess(PointCloudMsgType & pointcloud_msg) override; void fuseOnSingleImage( - const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, const std::size_t image_id, - const DetectedObjectsWithFeature & input_roi_msg, - sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) override; + const PointCloudMsgType & input_pointcloud_msg, const Det2dStatus & det2d, + const RoiMsgType & input_roi_msg, PointCloudMsgType & painted_pointcloud_msg) override; - void postprocess(sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) override; + void postprocess( + const PointCloudMsgType & painted_pointcloud_msg, DetectedObjects & output_msg) override; - rclcpp::Publisher::SharedPtr obj_pub_ptr_; + rclcpp::Publisher::SharedPtr point_pub_ptr_; std::unique_ptr diagnostics_interface_ptr_; int omp_num_threads_{1}; - float score_threshold_{0.0}; std::vector class_names_; std::map class_index_; std::map> isClassTable_; @@ -74,8 +72,6 @@ class PointPaintingFusionNode autoware::lidar_centerpoint::DetectionClassRemapper detection_class_remapper_; std::unique_ptr detector_ptr_{nullptr}; - - bool out_of_scope(const DetectedObjects & obj) override; }; } // namespace autoware::image_projection_based_fusion #endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__NODE_HPP_ diff --git a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_cluster_fusion/node.hpp b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_cluster_fusion/node.hpp index 903b153af0681..b7bf8738b68a4 100644 --- a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_cluster_fusion/node.hpp +++ b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_cluster_fusion/node.hpp @@ -24,21 +24,19 @@ namespace autoware::image_projection_based_fusion { const std::map IOU_MODE_MAP{{"iou", 0}, {"iou_x", 1}, {"iou_y", 2}}; -class RoiClusterFusionNode -: public FusionNode< - DetectedObjectsWithFeature, DetectedObjectWithFeature, DetectedObjectsWithFeature> +class RoiClusterFusionNode : public FusionNode { public: explicit RoiClusterFusionNode(const rclcpp::NodeOptions & options); -protected: - void preprocess(DetectedObjectsWithFeature & output_cluster_msg) override; - void postprocess(DetectedObjectsWithFeature & output_cluster_msg) override; +private: + void preprocess(ClusterMsgType & output_cluster_msg) override; void fuseOnSingleImage( - const DetectedObjectsWithFeature & input_cluster_msg, const std::size_t image_id, - const DetectedObjectsWithFeature & input_roi_msg, - DetectedObjectsWithFeature & output_cluster_msg) override; + const ClusterMsgType & input_cluster_msg, const Det2dStatus & det2d, + const RoiMsgType & input_roi_msg, ClusterMsgType & output_cluster_msg) override; + + void postprocess(const ClusterMsgType & output_cluster_msg, ClusterMsgType & output_msg) override; std::string trust_object_iou_mode_{"iou"}; bool use_cluster_semantic_type_{false}; @@ -53,12 +51,11 @@ class RoiClusterFusionNode double trust_object_distance_; std::string non_trust_object_iou_mode_{"iou_x"}; - bool is_far_enough(const DetectedObjectWithFeature & obj, const double distance_threshold); - bool out_of_scope(const DetectedObjectWithFeature & obj) override; + bool is_far_enough(const ClusterObjType & obj, const double distance_threshold); + bool out_of_scope(const ClusterObjType & obj); double cal_iou_by_mode( const sensor_msgs::msg::RegionOfInterest & roi_1, const sensor_msgs::msg::RegionOfInterest & roi_2, const std::string iou_mode); - // bool CheckUnknown(const DetectedObjectsWithFeature & obj); }; } // namespace autoware::image_projection_based_fusion diff --git a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_detected_object_fusion/node.hpp b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_detected_object_fusion/node.hpp index 43ec134168ef9..ba197126277a0 100644 --- a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_detected_object_fusion/node.hpp +++ b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_detected_object_fusion/node.hpp @@ -31,21 +31,20 @@ namespace autoware::image_projection_based_fusion using sensor_msgs::msg::RegionOfInterest; -class RoiDetectedObjectFusionNode -: public FusionNode +class RoiDetectedObjectFusionNode : public FusionNode { public: explicit RoiDetectedObjectFusionNode(const rclcpp::NodeOptions & options); -protected: +private: void preprocess(DetectedObjects & output_msg) override; void fuseOnSingleImage( - const DetectedObjects & input_object_msg, const std::size_t image_id, - const DetectedObjectsWithFeature & input_roi_msg, DetectedObjects & output_object_msg) override; + const DetectedObjects & input_object_msg, const Det2dStatus & det2d, + const RoiMsgType & input_roi_msg, DetectedObjects & output_object_msg) override; std::map generateDetectedObjectRoIs( - const DetectedObjects & input_object_msg, const std::size_t & image_id, + const DetectedObjects & input_object_msg, const Det2dStatus & det2d, const Eigen::Affine3d & object2camera_affine); void fuseObjectsOnImage( @@ -53,11 +52,10 @@ class RoiDetectedObjectFusionNode const std::vector & image_rois, const std::map & object_roi_map); - void publish(const DetectedObjects & output_msg) override; + void postprocess(const DetectedObjects & processing_msg, DetectedObjects & output_msg) override; - bool out_of_scope(const DetectedObject & obj) override; + bool out_of_scope(const DetectedObject & obj); -private: struct { std::vector passthrough_lower_bound_probability_thresholds{}; diff --git a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_pointcloud_fusion/node.hpp b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_pointcloud_fusion/node.hpp index 2f2c8222e196f..77a1745faa7e5 100644 --- a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_pointcloud_fusion/node.hpp +++ b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_pointcloud_fusion/node.hpp @@ -25,32 +25,29 @@ namespace autoware::image_projection_based_fusion { -class RoiPointCloudFusionNode -: public FusionNode +class RoiPointCloudFusionNode : public FusionNode { +public: + explicit RoiPointCloudFusionNode(const rclcpp::NodeOptions & options); + private: - int min_cluster_size_{1}; - int max_cluster_size_{20}; - bool fuse_unknown_only_{true}; - double cluster_2d_tolerance_; + rclcpp::Publisher::SharedPtr point_pub_ptr_; + rclcpp::Publisher::SharedPtr cluster_debug_pub_; - rclcpp::Publisher::SharedPtr pub_objects_ptr_; - std::vector output_fused_objects_; - rclcpp::Publisher::SharedPtr cluster_debug_pub_; + void fuseOnSingleImage( + const PointCloudMsgType & input_pointcloud_msg, const Det2dStatus & det2d, + const RoiMsgType & input_roi_msg, PointCloudMsgType & output_pointcloud_msg) override; - /* data */ -public: - explicit RoiPointCloudFusionNode(const rclcpp::NodeOptions & options); + void postprocess(const PointCloudMsgType & pointcloud_msg, ClusterMsgType & output_msg) override; -protected: - void preprocess(sensor_msgs::msg::PointCloud2 & pointcloud_msg) override; + void publish(const ClusterMsgType & output_msg) override; - void postprocess(sensor_msgs::msg::PointCloud2 & pointcloud_msg) override; + int min_cluster_size_{1}; + int max_cluster_size_{20}; + bool fuse_unknown_only_{true}; + double cluster_2d_tolerance_; - void fuseOnSingleImage( - const PointCloud2 & input_pointcloud_msg, const std::size_t image_id, - const DetectedObjectsWithFeature & input_roi_msg, PointCloud2 & output_pointcloud_msg) override; - bool out_of_scope(const DetectedObjectWithFeature & obj) override; + std::vector output_fused_objects_; }; } // namespace autoware::image_projection_based_fusion diff --git a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp index 7454cb7bcd173..5414f98e142cd 100644 --- a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp +++ b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp @@ -34,10 +34,32 @@ namespace autoware::image_projection_based_fusion { -class SegmentPointCloudFusionNode : public FusionNode +class SegmentPointCloudFusionNode : public FusionNode { +public: + explicit SegmentPointCloudFusionNode(const rclcpp::NodeOptions & options); + private: - rclcpp::Publisher::SharedPtr pub_pointcloud_ptr_; + void preprocess(PointCloudMsgType & pointcloud_msg) override; + + void fuseOnSingleImage( + const PointCloudMsgType & input_pointcloud_msg, const Det2dStatus & det2d, + const Image & input_mask, PointCloudMsgType & output_pointcloud_msg) override; + + inline void copyPointCloud( + const PointCloudMsgType & input, const int point_step, const size_t global_offset, + PointCloudMsgType & output, size_t & output_pointcloud_size) + { + std::memcpy(&output.data[output_pointcloud_size], &input.data[global_offset], point_step); + output_pointcloud_size += point_step; + } + + void postprocess( + const PointCloudMsgType & pointcloud_msg, PointCloudMsgType & output_msg) override; + + // debug + image_transport::Publisher pub_debug_mask_ptr_; + std::vector filter_semantic_label_target_; float filter_distance_threshold_; // declare list of semantic label target, depend on trained data of yolox segmentation model @@ -47,30 +69,8 @@ class SegmentPointCloudFusionNode : public FusionNode filter_global_offset_set_; - -public: - explicit SegmentPointCloudFusionNode(const rclcpp::NodeOptions & options); - -protected: - void preprocess(PointCloud2 & pointcloud_msg) override; - - void postprocess(PointCloud2 & pointcloud_msg) override; - - void fuseOnSingleImage( - const PointCloud2 & input_pointcloud_msg, const std::size_t image_id, const Image & input_mask, - PointCloud2 & output_pointcloud_msg) override; - - bool out_of_scope(const PointCloud2 & filtered_cloud) override; - inline void copyPointCloud( - const PointCloud2 & input, const int point_step, const size_t global_offset, - PointCloud2 & output, size_t & output_pointcloud_size) - { - std::memcpy(&output.data[output_pointcloud_size], &input.data[global_offset], point_step); - output_pointcloud_size += point_step; - } }; } // namespace autoware::image_projection_based_fusion diff --git a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/utils/utils.hpp b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/utils/utils.hpp index 12577081713be..044a71ab57533 100644 --- a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/utils/utils.hpp +++ b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/utils/utils.hpp @@ -56,7 +56,7 @@ namespace autoware::image_projection_based_fusion { using PointCloud = pcl::PointCloud; -using PointCloud2 = sensor_msgs::msg::PointCloud2; + struct PointData { float distance; @@ -72,17 +72,17 @@ std::optional getTransformStamped( Eigen::Affine3d transformToEigen(const geometry_msgs::msg::Transform & t); void closest_cluster( - const PointCloud2 & cluster, const double cluster_2d_tolerance, const int min_cluster_size, - const pcl::PointXYZ & center, PointCloud2 & out_cluster); + const PointCloudMsgType & cluster, const double cluster_2d_tolerance, const int min_cluster_size, + const pcl::PointXYZ & center, PointCloudMsgType & out_cluster); void updateOutputFusedObjects( - std::vector & output_objs, std::vector & clusters, - const std::vector & clusters_data_size, const PointCloud2 & in_cloud, + std::vector & output_objs, std::vector & clusters, + const std::vector & clusters_data_size, const PointCloudMsgType & in_cloud, const std_msgs::msg::Header & in_roi_header, const tf2_ros::Buffer & tf_buffer, const int min_cluster_size, const int max_cluster_size, const float cluster_2d_tolerance, std::vector & output_fused_objects); -geometry_msgs::msg::Point getCentroid(const sensor_msgs::msg::PointCloud2 & pointcloud); +geometry_msgs::msg::Point getCentroid(const PointCloudMsgType & pointcloud); } // namespace autoware::image_projection_based_fusion diff --git a/perception/autoware_image_projection_based_fusion/src/fusion_node.cpp b/perception/autoware_image_projection_based_fusion/src/fusion_node.cpp index ea0904215cb86..310c68f12db88 100644 --- a/perception/autoware_image_projection_based_fusion/src/fusion_node.cpp +++ b/perception/autoware_image_projection_based_fusion/src/fusion_node.cpp @@ -28,6 +28,7 @@ #include #include #include +#include #ifdef ROS_DISTRO_GALACTIC #include @@ -45,79 +46,66 @@ namespace autoware::image_projection_based_fusion { using autoware::universe_utils::ScopedTimeTrack; -template -FusionNode::FusionNode( +template +FusionNode::FusionNode( const std::string & node_name, const rclcpp::NodeOptions & options) : Node(node_name, options), tf_buffer_(this->get_clock()), tf_listener_(tf_buffer_) { // set rois_number - rois_number_ = static_cast(declare_parameter("rois_number")); - if (rois_number_ < 1) { - RCLCPP_WARN( - this->get_logger(), "minimum rois_number is 1. current rois_number is %zu", rois_number_); - rois_number_ = 1; + const std::size_t rois_number = + static_cast(declare_parameter("rois_number")); + if (rois_number < 1) { + RCLCPP_ERROR( + this->get_logger(), "minimum rois_number is 1. current rois_number is %zu", rois_number); } - if (rois_number_ > 8) { + if (rois_number > 8) { RCLCPP_WARN( this->get_logger(), - "Current rois_number is %zu. Large rois number may cause performance issue.", rois_number_); + "Current rois_number is %zu. Large rois number may cause performance issue.", rois_number); } // Set parameters match_threshold_ms_ = declare_parameter("match_threshold_ms"); timeout_ms_ = declare_parameter("timeout_ms"); - input_rois_topics_.resize(rois_number_); - input_camera_topics_.resize(rois_number_); - input_camera_info_topics_.resize(rois_number_); + std::vector input_rois_topics; + std::vector input_camera_info_topics; + + input_rois_topics.resize(rois_number); + input_camera_info_topics.resize(rois_number); - for (std::size_t roi_i = 0; roi_i < rois_number_; ++roi_i) { - input_rois_topics_.at(roi_i) = declare_parameter( + for (std::size_t roi_i = 0; roi_i < rois_number; ++roi_i) { + input_rois_topics.at(roi_i) = declare_parameter( "input/rois" + std::to_string(roi_i), "/perception/object_recognition/detection/rois" + std::to_string(roi_i)); - input_camera_info_topics_.at(roi_i) = declare_parameter( + input_camera_info_topics.at(roi_i) = declare_parameter( "input/camera_info" + std::to_string(roi_i), "/sensing/camera/camera" + std::to_string(roi_i) + "/camera_info"); - - input_camera_topics_.at(roi_i) = declare_parameter( - "input/image" + std::to_string(roi_i), - "/sensing/camera/camera" + std::to_string(roi_i) + "/image_rect_color"); } - input_offset_ms_ = declare_parameter>("input_offset_ms"); - if (!input_offset_ms_.empty() && rois_number_ > input_offset_ms_.size()) { - throw std::runtime_error("The number of offsets does not match the number of topics."); - } - - // sub camera info - camera_info_subs_.resize(rois_number_); - for (std::size_t roi_i = 0; roi_i < rois_number_; ++roi_i) { + // subscribe camera info + camera_info_subs_.resize(rois_number); + for (std::size_t roi_i = 0; roi_i < rois_number; ++roi_i) { std::function fnc = std::bind(&FusionNode::cameraInfoCallback, this, std::placeholders::_1, roi_i); camera_info_subs_.at(roi_i) = this->create_subscription( - input_camera_info_topics_.at(roi_i), rclcpp::QoS{1}.best_effort(), fnc); + input_camera_info_topics.at(roi_i), rclcpp::QoS{1}.best_effort(), fnc); } - // sub rois - rois_subs_.resize(rois_number_); - cached_roi_msgs_.resize(rois_number_); - is_fused_.resize(rois_number_, false); - for (std::size_t roi_i = 0; roi_i < rois_number_; ++roi_i) { + // subscribe rois + rois_subs_.resize(rois_number); + for (std::size_t roi_i = 0; roi_i < rois_number; ++roi_i) { std::function roi_callback = std::bind(&FusionNode::roiCallback, this, std::placeholders::_1, roi_i); rois_subs_.at(roi_i) = this->create_subscription( - input_rois_topics_.at(roi_i), rclcpp::QoS{1}.best_effort(), roi_callback); + input_rois_topics.at(roi_i), rclcpp::QoS{1}.best_effort(), roi_callback); } - // subscribers - std::function sub_callback = + // subscribe 3d detection + std::function sub_callback = std::bind(&FusionNode::subCallback, this, std::placeholders::_1); - sub_ = - this->create_subscription("input", rclcpp::QoS(1).best_effort(), sub_callback); - - // publisher - pub_ptr_ = this->create_publisher("output", rclcpp::QoS{1}); + sub_ = this->create_subscription("input", rclcpp::QoS(1).best_effort(), sub_callback); // Set timer const auto period_ns = std::chrono::duration_cast( @@ -125,40 +113,34 @@ FusionNode::FusionNode( timer_ = rclcpp::create_timer( this, get_clock(), period_ns, std::bind(&FusionNode::timer_callback, this)); - // camera projection settings - camera_projectors_.resize(rois_number_); - point_project_to_unrectified_image_ = - declare_parameter>("point_project_to_unrectified_image"); + // initialization on each 2d detections + setDet2DStatus(rois_number); - if (rois_number_ > point_project_to_unrectified_image_.size()) { - throw std::runtime_error( - "The number of point_project_to_unrectified_image does not match the number of rois topics."); - } - approx_camera_projection_ = declare_parameter>("approximate_camera_projection"); - if (rois_number_ != approx_camera_projection_.size()) { - const std::size_t current_size = approx_camera_projection_.size(); - RCLCPP_WARN( - this->get_logger(), - "The number of elements in approximate_camera_projection should be the same as in " - "rois_number. " - "It has %zu elements.", - current_size); - if (current_size < rois_number_) { - approx_camera_projection_.resize(rois_number_); - for (std::size_t i = current_size; i < rois_number_; i++) { - approx_camera_projection_.at(i) = true; - } - } - } + // parameters for approximation grid approx_grid_cell_w_size_ = declare_parameter("approximation_grid_cell_width"); approx_grid_cell_h_size_ = declare_parameter("approximation_grid_cell_height"); + // parameters for out_of_scope filter + filter_scope_min_x_ = declare_parameter("filter_scope_min_x"); + filter_scope_max_x_ = declare_parameter("filter_scope_max_x"); + filter_scope_min_y_ = declare_parameter("filter_scope_min_y"); + filter_scope_max_y_ = declare_parameter("filter_scope_max_y"); + filter_scope_min_z_ = declare_parameter("filter_scope_min_z"); + filter_scope_max_z_ = declare_parameter("filter_scope_max_z"); + // debugger if (declare_parameter("debug_mode", false)) { + std::vector input_camera_topics; + input_camera_topics.resize(rois_number); + for (std::size_t roi_i = 0; roi_i < rois_number; ++roi_i) { + input_camera_topics.at(roi_i) = declare_parameter( + "input/image" + std::to_string(roi_i), + "/sensing/camera/camera" + std::to_string(roi_i) + "/image_rect_color"); + } std::size_t image_buffer_size = static_cast(declare_parameter("image_buffer_size")); debugger_ = - std::make_shared(this, rois_number_, image_buffer_size, input_camera_topics_); + std::make_shared(this, rois_number, image_buffer_size, input_camera_topics); } // time keeper @@ -180,77 +162,127 @@ FusionNode::FusionNode( stop_watch_ptr_->tic("cyclic_time"); stop_watch_ptr_->tic("processing_time"); } +} - filter_scope_min_x_ = declare_parameter("filter_scope_min_x"); - filter_scope_max_x_ = declare_parameter("filter_scope_max_x"); - filter_scope_min_y_ = declare_parameter("filter_scope_min_y"); - filter_scope_max_y_ = declare_parameter("filter_scope_max_y"); - filter_scope_min_z_ = declare_parameter("filter_scope_min_z"); - filter_scope_max_z_ = declare_parameter("filter_scope_max_z"); +template +void FusionNode::setDet2DStatus(std::size_t rois_number) +{ + // camera offset settings + std::vector input_offset_ms = declare_parameter>("input_offset_ms"); + if (!input_offset_ms.empty() && rois_number > input_offset_ms.size()) { + throw std::runtime_error("The number of offsets does not match the number of topics."); + } + + // camera projection settings + std::vector point_project_to_unrectified_image = + declare_parameter>("point_project_to_unrectified_image"); + if (rois_number > point_project_to_unrectified_image.size()) { + throw std::runtime_error( + "The number of point_project_to_unrectified_image does not match the number of rois " + "topics."); + } + std::vector approx_camera_projection = + declare_parameter>("approximate_camera_projection"); + if (rois_number != approx_camera_projection.size()) { + const std::size_t current_size = approx_camera_projection.size(); + RCLCPP_WARN( + get_logger(), + "The number of elements in approximate_camera_projection should be the same as in " + "rois_number. " + "It has %zu elements.", + current_size); + if (current_size < rois_number) { + approx_camera_projection.resize(rois_number); + for (std::size_t i = current_size; i < rois_number; i++) { + approx_camera_projection.at(i) = true; + } + } + } + + // 2d detection status initialization + det2d_list_.resize(rois_number); + for (std::size_t roi_i = 0; roi_i < rois_number; ++roi_i) { + det2d_list_.at(roi_i).id = roi_i; + det2d_list_.at(roi_i).project_to_unrectified_image = + point_project_to_unrectified_image.at(roi_i); + det2d_list_.at(roi_i).approximate_camera_projection = approx_camera_projection.at(roi_i); + det2d_list_.at(roi_i).input_offset_ms = input_offset_ms.at(roi_i); + } } -template -void FusionNode::cameraInfoCallback( +template +void FusionNode::cameraInfoCallback( const sensor_msgs::msg::CameraInfo::ConstSharedPtr input_camera_info_msg, const std::size_t camera_id) { // create the CameraProjection when the camera info arrives for the first time // assuming the camera info does not change while the node is running - if ( - camera_info_map_.find(camera_id) == camera_info_map_.end() && - checkCameraInfo(*input_camera_info_msg)) { - camera_projectors_.at(camera_id) = CameraProjection( + auto & det2d = det2d_list_.at(camera_id); + if (!det2d.camera_projector_ptr && checkCameraInfo(*input_camera_info_msg)) { + det2d.camera_projector_ptr = std::make_unique( *input_camera_info_msg, approx_grid_cell_w_size_, approx_grid_cell_h_size_, - point_project_to_unrectified_image_.at(camera_id), approx_camera_projection_.at(camera_id)); - camera_projectors_.at(camera_id).initialize(); - - camera_info_map_[camera_id] = *input_camera_info_msg; + det2d.project_to_unrectified_image, det2d.approximate_camera_projection); + det2d.camera_projector_ptr->initialize(); } } -template -void FusionNode::preprocess(TargetMsg3D & ouput_msg - __attribute__((unused))) +template +void FusionNode::preprocess(Msg3D & ouput_msg __attribute__((unused))) { // do nothing by default } -template -void FusionNode::subCallback( - const typename TargetMsg3D::ConstSharedPtr input_msg) +template +void FusionNode::exportProcess() +{ + timer_->cancel(); + + ExportObj output_msg; + postprocess(*(cached_det3d_msg_ptr_), output_msg); + publish(output_msg); + + // add processing time for debug + if (debug_publisher_) { + const double cyclic_time_ms = stop_watch_ptr_->toc("cyclic_time", true); + const double pipeline_latency_ms = + std::chrono::duration( + std::chrono::nanoseconds( + (this->get_clock()->now() - cached_det3d_msg_ptr_->header.stamp).nanoseconds())) + .count(); + debug_publisher_->publish( + "debug/cyclic_time_ms", cyclic_time_ms); + debug_publisher_->publish( + "debug/processing_time_ms", + processing_time_ms + stop_watch_ptr_->toc("processing_time", true)); + debug_publisher_->publish( + "debug/pipeline_latency_ms", pipeline_latency_ms); + processing_time_ms = 0; + } + cached_det3d_msg_ptr_ = nullptr; +} + +template +void FusionNode::subCallback( + const typename Msg3D::ConstSharedPtr det3d_msg) { std::unique_ptr st_ptr; if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); - if (cached_msg_.second != nullptr) { + if (cached_det3d_msg_ptr_ != nullptr) { + // PROCESS: if the main message is remained (and roi is not collected all) publish the main + // message may processed partially with arrived 2d rois stop_watch_ptr_->toc("processing_time", true); - timer_->cancel(); - postprocess(*(cached_msg_.second)); - publish(*(cached_msg_.second)); - std::fill(is_fused_.begin(), is_fused_.end(), false); - - // add processing time for debug - if (debug_publisher_) { - const double cyclic_time_ms = stop_watch_ptr_->toc("cyclic_time", true); - const double pipeline_latency_ms = - std::chrono::duration( - std::chrono::nanoseconds( - (this->get_clock()->now() - cached_msg_.second->header.stamp).nanoseconds())) - .count(); - debug_publisher_->publish( - "debug/cyclic_time_ms", cyclic_time_ms); - debug_publisher_->publish( - "debug/processing_time_ms", - processing_time_ms + stop_watch_ptr_->toc("processing_time", true)); - debug_publisher_->publish( - "debug/pipeline_latency_ms", pipeline_latency_ms); - processing_time_ms = 0; - } + exportProcess(); - cached_msg_.second = nullptr; + // reset flags + for (auto & det2d : det2d_list_) { + det2d.is_fused = false; + } } std::lock_guard lock(mutex_cached_msgs_); + + // TIMING: reset timer to the timeout time auto period = std::chrono::duration_cast( std::chrono::duration(timeout_ms_)); try { @@ -262,154 +294,141 @@ void FusionNode::subCallback( stop_watch_ptr_->toc("processing_time", true); - typename TargetMsg3D::SharedPtr output_msg = std::make_shared(*input_msg); - + // PROCESS: preprocess the main message + typename Msg3D::SharedPtr output_msg = std::make_shared(*det3d_msg); preprocess(*output_msg); + // PROCESS: fuse the main message with the cached roi messages + // (please ask maintainers before parallelize this loop because debugger is not thread safe) int64_t timestamp_nsec = (*output_msg).header.stamp.sec * static_cast(1e9) + (*output_msg).header.stamp.nanosec; + // for loop for each roi + for (auto & det2d : det2d_list_) { + const auto roi_i = det2d.id; - // if matching rois exist, fuseOnSingle - // please ask maintainers before parallelize this loop because debugger is not thread safe - for (std::size_t roi_i = 0; roi_i < rois_number_; ++roi_i) { - if (camera_info_map_.find(roi_i) == camera_info_map_.end()) { + // check camera info + if (det2d.camera_projector_ptr == nullptr) { RCLCPP_WARN_THROTTLE( this->get_logger(), *this->get_clock(), 5000, "no camera info. id is %zu", roi_i); continue; } - - if ((cached_roi_msgs_.at(roi_i)).size() > 0) { - int64_t min_interval = 1e9; - int64_t matched_stamp = -1; - std::list outdate_stamps; - - for (const auto & [k, v] : cached_roi_msgs_.at(roi_i)) { - int64_t new_stamp = timestamp_nsec + input_offset_ms_.at(roi_i) * static_cast(1e6); - int64_t interval = abs(static_cast(k) - new_stamp); - - if ( - interval <= min_interval && interval <= match_threshold_ms_ * static_cast(1e6)) { - min_interval = interval; - matched_stamp = k; - } else if ( - static_cast(k) < new_stamp && - interval > match_threshold_ms_ * static_cast(1e6)) { - outdate_stamps.push_back(static_cast(k)); - } + auto & det2d_msgs = det2d.cached_det2d_msgs; + + // check if the roi is collected + if (det2d_msgs.size() == 0) continue; + + // MATCH: get the closest roi message, and remove outdated messages + int64_t min_interval = 1e9; + int64_t matched_stamp = -1; + std::list outdate_stamps; + for (const auto & [roi_stamp, value] : det2d_msgs) { + int64_t new_stamp = timestamp_nsec + det2d.input_offset_ms * static_cast(1e6); + int64_t interval = abs(static_cast(roi_stamp) - new_stamp); + + if (interval <= min_interval && interval <= match_threshold_ms_ * static_cast(1e6)) { + min_interval = interval; + matched_stamp = roi_stamp; + } else if ( + static_cast(roi_stamp) < new_stamp && + interval > match_threshold_ms_ * static_cast(1e6)) { + outdate_stamps.push_back(static_cast(roi_stamp)); } + } + for (auto stamp : outdate_stamps) { + det2d_msgs.erase(stamp); + } - // remove outdated stamps - for (auto stamp : outdate_stamps) { - (cached_roi_msgs_.at(roi_i)).erase(stamp); + // PROCESS: if matched, fuse the main message with the roi message + if (matched_stamp != -1) { + if (debugger_) { + debugger_->clear(); } - // fuseOnSingle - if (matched_stamp != -1) { - if (debugger_) { - debugger_->clear(); - } + fuseOnSingleImage(*det3d_msg, det2d, *(det2d_msgs[matched_stamp]), *output_msg); + det2d_msgs.erase(matched_stamp); + det2d.is_fused = true; - fuseOnSingleImage( - *input_msg, roi_i, *((cached_roi_msgs_.at(roi_i))[matched_stamp]), *output_msg); - (cached_roi_msgs_.at(roi_i)).erase(matched_stamp); - is_fused_.at(roi_i) = true; - - // add timestamp interval for debug - if (debug_publisher_) { - double timestamp_interval_ms = (matched_stamp - timestamp_nsec) / 1e6; - debug_publisher_->publish( - "debug/roi" + std::to_string(roi_i) + "/timestamp_interval_ms", timestamp_interval_ms); - debug_publisher_->publish( - "debug/roi" + std::to_string(roi_i) + "/timestamp_interval_offset_ms", - timestamp_interval_ms - input_offset_ms_.at(roi_i)); - } + // add timestamp interval for debug + if (debug_publisher_) { + double timestamp_interval_ms = (matched_stamp - timestamp_nsec) / 1e6; + debug_publisher_->publish( + "debug/roi" + std::to_string(roi_i) + "/timestamp_interval_ms", timestamp_interval_ms); + debug_publisher_->publish( + "debug/roi" + std::to_string(roi_i) + "/timestamp_interval_offset_ms", + timestamp_interval_ms - det2d.input_offset_ms); } } } - // if all camera fused, postprocess; else, publish the old Msg(if exists) and cache the current - // Msg - if (std::count(is_fused_.begin(), is_fused_.end(), true) == static_cast(rois_number_)) { - timer_->cancel(); - postprocess(*output_msg); - publish(*output_msg); - std::fill(is_fused_.begin(), is_fused_.end(), false); - cached_msg_.second = nullptr; - - // add processing time for debug - if (debug_publisher_) { - const double cyclic_time_ms = stop_watch_ptr_->toc("cyclic_time", true); - processing_time_ms = stop_watch_ptr_->toc("processing_time", true); - debug_publisher_->publish( - "debug/cyclic_time_ms", cyclic_time_ms); - debug_publisher_->publish( - "debug/processing_time_ms", processing_time_ms); - processing_time_ms = 0; + // PROCESS: check if the fused message is ready to publish + cached_det3d_msg_timestamp_ = timestamp_nsec; + cached_det3d_msg_ptr_ = output_msg; + if (checkAllDet2dFused()) { + // if all camera fused, postprocess and publish the main message + exportProcess(); + + // reset flags + for (auto & det2d : det2d_list_) { + det2d.is_fused = false; } } else { - cached_msg_.first = timestamp_nsec; - cached_msg_.second = output_msg; + // if all of rois are not collected, publish the old Msg(if exists) and cache the + // current Msg processing_time_ms = stop_watch_ptr_->toc("processing_time", true); } } -template -void FusionNode::roiCallback( - const typename Msg2D::ConstSharedPtr input_roi_msg, const std::size_t roi_i) +template +void FusionNode::roiCallback( + const typename Msg2D::ConstSharedPtr det2d_msg, const std::size_t roi_i) { std::unique_ptr st_ptr; if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); stop_watch_ptr_->toc("processing_time", true); - int64_t timestamp_nsec = (*input_roi_msg).header.stamp.sec * static_cast(1e9) + - (*input_roi_msg).header.stamp.nanosec; + auto & det2d = det2d_list_.at(roi_i); + int64_t timestamp_nsec = + (*det2d_msg).header.stamp.sec * static_cast(1e9) + (*det2d_msg).header.stamp.nanosec; // if cached Msg exist, try to match - if (cached_msg_.second != nullptr) { - int64_t new_stamp = cached_msg_.first + input_offset_ms_.at(roi_i) * static_cast(1e6); + if (cached_det3d_msg_ptr_ != nullptr) { + int64_t new_stamp = + cached_det3d_msg_timestamp_ + det2d.input_offset_ms * static_cast(1e6); int64_t interval = abs(timestamp_nsec - new_stamp); - if ( - interval < match_threshold_ms_ * static_cast(1e6) && is_fused_.at(roi_i) == false) { - if (camera_info_map_.find(roi_i) == camera_info_map_.end()) { + // PROCESS: if matched, fuse the main message with the roi message + if (interval < match_threshold_ms_ * static_cast(1e6) && det2d.is_fused == false) { + // check camera info + if (det2d.camera_projector_ptr == nullptr) { RCLCPP_WARN_THROTTLE( this->get_logger(), *this->get_clock(), 5000, "no camera info. id is %zu", roi_i); - (cached_roi_msgs_.at(roi_i))[timestamp_nsec] = input_roi_msg; + det2d.cached_det2d_msgs[timestamp_nsec] = det2d_msg; return; } + if (debugger_) { debugger_->clear(); } - - fuseOnSingleImage(*(cached_msg_.second), roi_i, *input_roi_msg, *(cached_msg_.second)); - is_fused_.at(roi_i) = true; + // PROCESS: fuse the main message with the roi message + fuseOnSingleImage(*(cached_det3d_msg_ptr_), det2d, *det2d_msg, *(cached_det3d_msg_ptr_)); + det2d.is_fused = true; if (debug_publisher_) { - double timestamp_interval_ms = (timestamp_nsec - cached_msg_.first) / 1e6; + double timestamp_interval_ms = (timestamp_nsec - cached_det3d_msg_timestamp_) / 1e6; debug_publisher_->publish( "debug/roi" + std::to_string(roi_i) + "/timestamp_interval_ms", timestamp_interval_ms); debug_publisher_->publish( "debug/roi" + std::to_string(roi_i) + "/timestamp_interval_offset_ms", - timestamp_interval_ms - input_offset_ms_.at(roi_i)); + timestamp_interval_ms - det2d.input_offset_ms); } - if (std::count(is_fused_.begin(), is_fused_.end(), true) == static_cast(rois_number_)) { - timer_->cancel(); - postprocess(*(cached_msg_.second)); - publish(*(cached_msg_.second)); - std::fill(is_fused_.begin(), is_fused_.end(), false); - cached_msg_.second = nullptr; - - // add processing time for debug - if (debug_publisher_) { - const double cyclic_time_ms = stop_watch_ptr_->toc("cyclic_time", true); - debug_publisher_->publish( - "debug/cyclic_time_ms", cyclic_time_ms); - debug_publisher_->publish( - "debug/processing_time_ms", - processing_time_ms + stop_watch_ptr_->toc("processing_time", true)); - processing_time_ms = 0; + // PROCESS: if all camera fused, postprocess and publish the main message + if (checkAllDet2dFused()) { + exportProcess(); + // reset flags + for (auto & status : det2d_list_) { + status.is_fused = false; } } processing_time_ms = processing_time_ms + stop_watch_ptr_->toc("processing_time", true); @@ -417,18 +436,11 @@ void FusionNode::roiCallback( } } // store roi msg if not matched - (cached_roi_msgs_.at(roi_i))[timestamp_nsec] = input_roi_msg; + det2d.cached_det2d_msgs[timestamp_nsec] = det2d_msg; } -template -void FusionNode::postprocess(TargetMsg3D & output_msg - __attribute__((unused))) -{ - // do nothing by default -} - -template -void FusionNode::timer_callback() +template +void FusionNode::timer_callback() { std::unique_ptr st_ptr; if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); @@ -436,29 +448,20 @@ void FusionNode::timer_callback() using std::chrono_literals::operator""ms; timer_->cancel(); if (mutex_cached_msgs_.try_lock()) { - // timeout, postprocess cached msg - if (cached_msg_.second != nullptr) { + // PROCESS: if timeout, postprocess cached msg + if (cached_det3d_msg_ptr_ != nullptr) { stop_watch_ptr_->toc("processing_time", true); + exportProcess(); + } - postprocess(*(cached_msg_.second)); - publish(*(cached_msg_.second)); - - // add processing time for debug - if (debug_publisher_) { - const double cyclic_time_ms = stop_watch_ptr_->toc("cyclic_time", true); - debug_publisher_->publish( - "debug/cyclic_time_ms", cyclic_time_ms); - debug_publisher_->publish( - "debug/processing_time_ms", - processing_time_ms + stop_watch_ptr_->toc("processing_time", true)); - processing_time_ms = 0; - } + // reset flags whether the message is fused or not + for (auto & det2d : det2d_list_) { + det2d.is_fused = false; } - std::fill(is_fused_.begin(), is_fused_.end(), false); - cached_msg_.second = nullptr; mutex_cached_msgs_.unlock(); } else { + // TIMING: retry the process after 10ms try { std::chrono::nanoseconds period = 10ms; setPeriod(period.count()); @@ -469,8 +472,8 @@ void FusionNode::timer_callback() } } -template -void FusionNode::setPeriod(const int64_t new_period) +template +void FusionNode::setPeriod(const int64_t new_period) { if (!timer_) { return; @@ -486,8 +489,16 @@ void FusionNode::setPeriod(const int64_t new_period) } } -template -void FusionNode::publish(const TargetMsg3D & output_msg) +template +void FusionNode::postprocess( + const Msg3D & processing_msg __attribute__((unused)), + ExportObj & output_msg __attribute__((unused))) +{ + // do nothing by default +} + +template +void FusionNode::publish(const ExportObj & output_msg) { if (pub_ptr_->get_subscription_count() < 1) { return; @@ -495,10 +506,21 @@ void FusionNode::publish(const TargetMsg3D & output_msg pub_ptr_->publish(output_msg); } -template class FusionNode; -template class FusionNode< - DetectedObjectsWithFeature, DetectedObjectWithFeature, DetectedObjectsWithFeature>; -template class FusionNode; -template class FusionNode; -template class FusionNode; +// Explicit instantiation for the supported types + +// pointpainting fusion +template class FusionNode; + +// roi cluster fusion +template class FusionNode; + +// roi detected-object fusion +template class FusionNode; + +// roi pointcloud fusion +template class FusionNode; + +// segment pointcloud fusion +template class FusionNode; + } // namespace autoware::image_projection_based_fusion diff --git a/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp b/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp index 2f6f853d4281e..bcd62383319c1 100644 --- a/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp +++ b/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp @@ -91,8 +91,7 @@ inline bool isUnknown(int label2d) } PointPaintingFusionNode::PointPaintingFusionNode(const rclcpp::NodeOptions & options) -: FusionNode( - "pointpainting_fusion", options) +: FusionNode("pointpainting_fusion", options) { omp_num_threads_ = this->declare_parameter("omp_params.num_threads"); const float score_threshold = @@ -156,11 +155,16 @@ PointPaintingFusionNode::PointPaintingFusionNode(const rclcpp::NodeOptions & opt const auto min_area_matrix = this->declare_parameter>("min_area_matrix"); const auto max_area_matrix = this->declare_parameter>("max_area_matrix"); - std::function sub_callback = + // subscriber + std::function sub_callback = std::bind(&PointPaintingFusionNode::subCallback, this, std::placeholders::_1); - sub_ = this->create_subscription( + sub_ = this->create_subscription( "~/input/pointcloud", rclcpp::SensorDataQoS().keep_last(3), sub_callback); + // publisher + point_pub_ptr_ = this->create_publisher("output", rclcpp::QoS{1}); + pub_ptr_ = this->create_publisher("~/output/objects", rclcpp::QoS{1}); + detection_class_remapper_.setParameters( allow_remapping_by_area_matrix, min_area_matrix, max_area_matrix); @@ -189,15 +193,13 @@ PointPaintingFusionNode::PointPaintingFusionNode(const rclcpp::NodeOptions & opt diagnostics_interface_ptr_ = std::make_unique(this, "pointpainting_trt"); - obj_pub_ptr_ = this->create_publisher("~/output/objects", rclcpp::QoS{1}); - if (this->declare_parameter("build_only", false)) { RCLCPP_INFO(this->get_logger(), "TensorRT engine is built and shutdown node."); rclcpp::shutdown(); } } -void PointPaintingFusionNode::preprocess(sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) +void PointPaintingFusionNode::preprocess(PointCloudMsgType & painted_pointcloud_msg) { std::unique_ptr st_ptr; if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); @@ -254,9 +256,9 @@ void PointPaintingFusionNode::preprocess(sensor_msgs::msg::PointCloud2 & painted } void PointPaintingFusionNode::fuseOnSingleImage( - __attribute__((unused)) const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, - const std::size_t image_id, const DetectedObjectsWithFeature & input_roi_msg, - sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) + __attribute__((unused)) const PointCloudMsgType & input_pointcloud_msg, + const Det2dStatus & det2d, const RoiMsgType & input_roi_msg, + PointCloudMsgType & painted_pointcloud_msg) { if (painted_pointcloud_msg.data.empty() || painted_pointcloud_msg.fields.empty()) { RCLCPP_WARN_STREAM_THROTTLE( @@ -288,10 +290,6 @@ void PointPaintingFusionNode::fuseOnSingleImage( lidar2cam_affine = _transformToEigen(transform_stamped_optional.value().transform); } - // transform - // sensor_msgs::msg::PointCloud2 transformed_pointcloud; - // tf2::doTransform(painted_pointcloud_msg, transformed_pointcloud, transform_stamped); - const auto x_offset = painted_pointcloud_msg.fields .at(static_cast(autoware::point_types::PointXYZIRCIndex::X)) .offset; @@ -337,13 +335,13 @@ dc | dc dc dc dc ||zc| p_y = point_camera.y(); p_z = point_camera.z(); - if (camera_projectors_[image_id].isOutsideHorizontalView(p_x, p_z)) { + if (det2d.camera_projector_ptr->isOutsideHorizontalView(p_x, p_z)) { continue; } // project Eigen::Vector2d projected_point; - if (camera_projectors_[image_id].calcImageProjectedPoint( + if (det2d.camera_projector_ptr->calcImageProjectedPoint( cv::Point3d(p_x, p_y, p_z), projected_point)) { // iterate 2d bbox for (const auto & feature_object : objects) { @@ -360,41 +358,45 @@ dc | dc dc dc dc ||zc| *p_class = cls.second(label2d) ? (class_index_[cls.first] + *p_class) : *p_class; } } - } - if (debugger_) { - int thread_id = omp_get_thread_num(); - local_vectors[thread_id].push_back(projected_point); + if (debugger_) { + int thread_id = omp_get_thread_num(); + local_vectors[thread_id].push_back(projected_point); + } } } } - } - if (debugger_) { - std::unique_ptr inner_st_ptr; - if (time_keeper_) - inner_st_ptr = std::make_unique("publish debug message", *time_keeper_); + if (debugger_) { + std::unique_ptr inner_st_ptr; + if (time_keeper_) + inner_st_ptr = std::make_unique("publish debug message", *time_keeper_); - for (const auto & feature_object : input_roi_msg.feature_objects) { - debug_image_rois.push_back(feature_object.feature.roi); - } + for (const auto & feature_object : input_roi_msg.feature_objects) { + debug_image_rois.push_back(feature_object.feature.roi); + } - for (const auto & local_vec : local_vectors) { - debug_image_points.insert(debug_image_points.end(), local_vec.begin(), local_vec.end()); - } + for (const auto & local_vec : local_vectors) { + debug_image_points.insert(debug_image_points.end(), local_vec.begin(), local_vec.end()); + } - debugger_->image_rois_ = debug_image_rois; - debugger_->obstacle_points_ = debug_image_points; - debugger_->publishImage(image_id, input_roi_msg.header.stamp); + debugger_->image_rois_ = debug_image_rois; + debugger_->obstacle_points_ = debug_image_points; + debugger_->publishImage(det2d.id, input_roi_msg.header.stamp); + } } } -void PointPaintingFusionNode::postprocess(sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) +void PointPaintingFusionNode::postprocess( + const PointCloudMsgType & painted_pointcloud_msg, DetectedObjects & output_msg) { std::unique_ptr st_ptr; if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); diagnostics_interface_ptr_->clear(); + output_msg.header = painted_pointcloud_msg.header; + output_msg.objects.clear(); + const auto objects_sub_count = - obj_pub_ptr_->get_subscription_count() + obj_pub_ptr_->get_intra_process_subscription_count(); + pub_ptr_->get_subscription_count() + pub_ptr_->get_intra_process_subscription_count(); if (objects_sub_count < 1) { return; } @@ -430,22 +432,18 @@ void PointPaintingFusionNode::postprocess(sensor_msgs::msg::PointCloud2 & painte raw_objects.emplace_back(obj); } - autoware_perception_msgs::msg::DetectedObjects output_msg; - output_msg.header = painted_pointcloud_msg.header; + // prepare output message output_msg.objects = iou_bev_nms_.apply(raw_objects); detection_class_remapper_.mapClasses(output_msg); - if (objects_sub_count > 0) { - obj_pub_ptr_->publish(output_msg); + // publish debug message: painted pointcloud + if (point_pub_ptr_->get_subscription_count() > 0) { + point_pub_ptr_->publish(painted_pointcloud_msg); } diagnostics_interface_ptr_->publish(painted_pointcloud_msg.header.stamp); } -bool PointPaintingFusionNode::out_of_scope(__attribute__((unused)) const DetectedObjects & obj) -{ - return false; -} } // namespace autoware::image_projection_based_fusion #include diff --git a/perception/autoware_image_projection_based_fusion/src/roi_cluster_fusion/node.cpp b/perception/autoware_image_projection_based_fusion/src/roi_cluster_fusion/node.cpp index 32db5319bb487..0a9d9e3391882 100644 --- a/perception/autoware_image_projection_based_fusion/src/roi_cluster_fusion/node.cpp +++ b/perception/autoware_image_projection_based_fusion/src/roi_cluster_fusion/node.cpp @@ -41,8 +41,7 @@ namespace autoware::image_projection_based_fusion using autoware::universe_utils::ScopedTimeTrack; RoiClusterFusionNode::RoiClusterFusionNode(const rclcpp::NodeOptions & options) -: FusionNode( - "roi_cluster_fusion", options) +: FusionNode("roi_cluster_fusion", options) { trust_object_iou_mode_ = declare_parameter("trust_object_iou_mode"); non_trust_object_iou_mode_ = declare_parameter("non_trust_object_iou_mode"); @@ -54,9 +53,12 @@ RoiClusterFusionNode::RoiClusterFusionNode(const rclcpp::NodeOptions & options) remove_unknown_ = declare_parameter("remove_unknown"); fusion_distance_ = declare_parameter("fusion_distance"); trust_object_distance_ = declare_parameter("trust_object_distance"); + + // publisher + pub_ptr_ = this->create_publisher("output", rclcpp::QoS{1}); } -void RoiClusterFusionNode::preprocess(DetectedObjectsWithFeature & output_cluster_msg) +void RoiClusterFusionNode::preprocess(ClusterMsgType & output_cluster_msg) { std::unique_ptr st_ptr; if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); @@ -71,36 +73,14 @@ void RoiClusterFusionNode::preprocess(DetectedObjectsWithFeature & output_cluste } } -void RoiClusterFusionNode::postprocess(DetectedObjectsWithFeature & output_cluster_msg) -{ - std::unique_ptr st_ptr; - if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); - - if (!remove_unknown_) { - return; - } - DetectedObjectsWithFeature known_objects; - known_objects.feature_objects.reserve(output_cluster_msg.feature_objects.size()); - for (auto & feature_object : output_cluster_msg.feature_objects) { - bool is_roi_label_known = feature_object.object.classification.front().label != - autoware_perception_msgs::msg::ObjectClassification::UNKNOWN; - if ( - is_roi_label_known || - feature_object.object.existence_probability >= min_roi_existence_prob_) { - known_objects.feature_objects.push_back(feature_object); - } - } - output_cluster_msg.feature_objects = known_objects.feature_objects; -} - void RoiClusterFusionNode::fuseOnSingleImage( - const DetectedObjectsWithFeature & input_cluster_msg, const std::size_t image_id, - const DetectedObjectsWithFeature & input_roi_msg, DetectedObjectsWithFeature & output_cluster_msg) + const ClusterMsgType & input_cluster_msg, const Det2dStatus & det2d, + const RoiMsgType & input_roi_msg, ClusterMsgType & output_cluster_msg) { std::unique_ptr st_ptr; if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); - const sensor_msgs::msg::CameraInfo & camera_info = camera_projectors_[image_id].getCameraInfo(); + const sensor_msgs::msg::CameraInfo & camera_info = det2d.camera_projector_ptr->getCameraInfo(); // get transform from cluster frame id to camera optical frame id geometry_msgs::msg::TransformStamped transform_stamped; @@ -149,7 +129,7 @@ void RoiClusterFusionNode::fuseOnSingleImage( } Eigen::Vector2d projected_point; - if (camera_projectors_[image_id].calcImageProjectedPoint( + if (det2d.camera_projector_ptr->calcImageProjectedPoint( cv::Point3d(*iter_x, *iter_y, *iter_z), projected_point)) { const int px = static_cast(projected_point.x()); const int py = static_cast(projected_point.y()); @@ -168,7 +148,6 @@ void RoiClusterFusionNode::fuseOnSingleImage( } sensor_msgs::msg::RegionOfInterest roi; - // roi.do_rectify = m_camera_info_.at(id).do_rectify; roi.x_offset = min_x; roi.y_offset = min_y; roi.width = max_x - min_x; @@ -231,7 +210,7 @@ void RoiClusterFusionNode::fuseOnSingleImage( // note: debug objects are safely cleared in fusion_node.cpp if (debugger_) { - debugger_->publishImage(image_id, input_roi_msg.header.stamp); + debugger_->publishImage(det2d.id, input_roi_msg.header.stamp); } } @@ -291,6 +270,28 @@ double RoiClusterFusionNode::cal_iou_by_mode( } } +void RoiClusterFusionNode::postprocess( + const ClusterMsgType & processing_msg, ClusterMsgType & output_msg) +{ + std::unique_ptr st_ptr; + if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); + + output_msg = processing_msg; + + if (remove_unknown_) { + // filter by object classification and existence probability + output_msg.feature_objects.clear(); + for (const auto & feature_object : processing_msg.feature_objects) { + if ( + feature_object.object.classification.front().label != + autoware_perception_msgs::msg::ObjectClassification::UNKNOWN || + feature_object.object.existence_probability >= min_roi_existence_prob_) { + output_msg.feature_objects.push_back(feature_object); + } + } + } +} + } // namespace autoware::image_projection_based_fusion #include diff --git a/perception/autoware_image_projection_based_fusion/src/roi_detected_object_fusion/node.cpp b/perception/autoware_image_projection_based_fusion/src/roi_detected_object_fusion/node.cpp index 7be18d59fdbf1..37769ad73e8c7 100644 --- a/perception/autoware_image_projection_based_fusion/src/roi_detected_object_fusion/node.cpp +++ b/perception/autoware_image_projection_based_fusion/src/roi_detected_object_fusion/node.cpp @@ -31,8 +31,7 @@ namespace autoware::image_projection_based_fusion using autoware::universe_utils::ScopedTimeTrack; RoiDetectedObjectFusionNode::RoiDetectedObjectFusionNode(const rclcpp::NodeOptions & options) -: FusionNode( - "roi_detected_object_fusion", options) +: FusionNode("roi_detected_object_fusion", options) { fusion_params_.passthrough_lower_bound_probability_thresholds = declare_parameter>("passthrough_lower_bound_probability_thresholds"); @@ -48,6 +47,9 @@ RoiDetectedObjectFusionNode::RoiDetectedObjectFusionNode(const rclcpp::NodeOptio can_assign_vector.data(), label_num, label_num); fusion_params_.can_assign_matrix = can_assign_matrix_tmp.transpose(); } + + // publisher + pub_ptr_ = this->create_publisher("output", rclcpp::QoS{1}); } void RoiDetectedObjectFusionNode::preprocess(DetectedObjects & output_msg) @@ -82,9 +84,8 @@ void RoiDetectedObjectFusionNode::preprocess(DetectedObjects & output_msg) } void RoiDetectedObjectFusionNode::fuseOnSingleImage( - const DetectedObjects & input_object_msg, const std::size_t image_id, - const DetectedObjectsWithFeature & input_roi_msg, - DetectedObjects & output_object_msg __attribute__((unused))) + const DetectedObjects & input_object_msg, const Det2dStatus & det2d, + const RoiMsgType & input_roi_msg, DetectedObjects & output_object_msg __attribute__((unused))) { std::unique_ptr st_ptr; if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); @@ -101,7 +102,7 @@ void RoiDetectedObjectFusionNode::fuseOnSingleImage( } const auto object_roi_map = - generateDetectedObjectRoIs(input_object_msg, image_id, object2camera_affine); + generateDetectedObjectRoIs(input_object_msg, det2d, object2camera_affine); fuseObjectsOnImage(input_object_msg, input_roi_msg.feature_objects, object_roi_map); if (debugger_) { @@ -109,13 +110,13 @@ void RoiDetectedObjectFusionNode::fuseOnSingleImage( for (std::size_t roi_i = 0; roi_i < input_roi_msg.feature_objects.size(); ++roi_i) { debugger_->image_rois_.push_back(input_roi_msg.feature_objects.at(roi_i).feature.roi); } - debugger_->publishImage(image_id, input_roi_msg.header.stamp); + debugger_->publishImage(det2d.id, input_roi_msg.header.stamp); } } std::map RoiDetectedObjectFusionNode::generateDetectedObjectRoIs( - const DetectedObjects & input_object_msg, const std::size_t & image_id, + const DetectedObjects & input_object_msg, const Det2dStatus & det2d, const Eigen::Affine3d & object2camera_affine) { std::unique_ptr st_ptr; @@ -131,7 +132,7 @@ RoiDetectedObjectFusionNode::generateDetectedObjectRoIs( return object_roi_map; } const auto & passthrough_object_flags = passthrough_object_flags_map_.at(timestamp_nsec); - const sensor_msgs::msg::CameraInfo & camera_info = camera_projectors_[image_id].getCameraInfo(); + const sensor_msgs::msg::CameraInfo & camera_info = det2d.camera_projector_ptr->getCameraInfo(); const double image_width = static_cast(camera_info.width); const double image_height = static_cast(camera_info.height); @@ -162,7 +163,7 @@ RoiDetectedObjectFusionNode::generateDetectedObjectRoIs( } Eigen::Vector2d proj_point; - if (camera_projectors_[image_id].calcImageProjectedPoint( + if (det2d.camera_projector_ptr->calcImageProjectedPoint( cv::Point3d(point.x(), point.y(), point.z()), proj_point)) { const double px = proj_point.x(); const double py = proj_point.y(); @@ -289,14 +290,15 @@ bool RoiDetectedObjectFusionNode::out_of_scope(const DetectedObject & obj) return is_out; } -void RoiDetectedObjectFusionNode::publish(const DetectedObjects & output_msg) +void RoiDetectedObjectFusionNode::postprocess( + const DetectedObjects & processing_msg, DetectedObjects & output_msg) { - if (pub_ptr_->get_subscription_count() < 1) { - return; - } + output_msg.header = processing_msg.header; + output_msg.objects.clear(); - int64_t timestamp_nsec = - output_msg.header.stamp.sec * static_cast(1e9) + output_msg.header.stamp.nanosec; + // filter out ignored objects + int64_t timestamp_nsec = processing_msg.header.stamp.sec * static_cast(1e9) + + processing_msg.header.stamp.nanosec; if ( passthrough_object_flags_map_.size() == 0 || fused_object_flags_map_.size() == 0 || ignored_object_flags_map_.size() == 0) { @@ -308,33 +310,34 @@ void RoiDetectedObjectFusionNode::publish(const DetectedObjects & output_msg) ignored_object_flags_map_.count(timestamp_nsec) == 0) { return; } + auto & passthrough_object_flags = passthrough_object_flags_map_.at(timestamp_nsec); auto & fused_object_flags = fused_object_flags_map_.at(timestamp_nsec); - auto & ignored_object_flags = ignored_object_flags_map_.at(timestamp_nsec); - - DetectedObjects output_objects_msg, debug_fused_objects_msg, debug_ignored_objects_msg; - output_objects_msg.header = output_msg.header; - debug_fused_objects_msg.header = output_msg.header; - debug_ignored_objects_msg.header = output_msg.header; - for (std::size_t obj_i = 0; obj_i < output_msg.objects.size(); ++obj_i) { - const auto & obj = output_msg.objects.at(obj_i); - if (passthrough_object_flags.at(obj_i)) { - output_objects_msg.objects.emplace_back(obj); + for (std::size_t obj_i = 0; obj_i < processing_msg.objects.size(); ++obj_i) { + const auto & obj = processing_msg.objects.at(obj_i); + if (passthrough_object_flags.at(obj_i) || fused_object_flags.at(obj_i)) { + output_msg.objects.emplace_back(obj); } + } + + // debug messages + auto & ignored_object_flags = ignored_object_flags_map_.at(timestamp_nsec); + DetectedObjects debug_fused_objects_msg, debug_ignored_objects_msg; + debug_fused_objects_msg.header = processing_msg.header; + debug_ignored_objects_msg.header = processing_msg.header; + for (std::size_t obj_i = 0; obj_i < processing_msg.objects.size(); ++obj_i) { + const auto & obj = processing_msg.objects.at(obj_i); if (fused_object_flags.at(obj_i)) { - output_objects_msg.objects.emplace_back(obj); debug_fused_objects_msg.objects.emplace_back(obj); } if (ignored_object_flags.at(obj_i)) { debug_ignored_objects_msg.objects.emplace_back(obj); } } - - pub_ptr_->publish(output_objects_msg); - debug_publisher_->publish("debug/fused_objects", debug_fused_objects_msg); debug_publisher_->publish("debug/ignored_objects", debug_ignored_objects_msg); + // clear flags passthrough_object_flags_map_.erase(timestamp_nsec); fused_object_flags_map_.erase(timestamp_nsec); ignored_object_flags_map_.erase(timestamp_nsec); diff --git a/perception/autoware_image_projection_based_fusion/src/roi_pointcloud_fusion/node.cpp b/perception/autoware_image_projection_based_fusion/src/roi_pointcloud_fusion/node.cpp index 998072d87774e..b1eef00053946 100644 --- a/perception/autoware_image_projection_based_fusion/src/roi_pointcloud_fusion/node.cpp +++ b/perception/autoware_image_projection_based_fusion/src/roi_pointcloud_fusion/node.cpp @@ -37,58 +37,23 @@ namespace autoware::image_projection_based_fusion using autoware::universe_utils::ScopedTimeTrack; RoiPointCloudFusionNode::RoiPointCloudFusionNode(const rclcpp::NodeOptions & options) -: FusionNode( - "roi_pointcloud_fusion", options) +: FusionNode("roi_pointcloud_fusion", options) { fuse_unknown_only_ = declare_parameter("fuse_unknown_only"); min_cluster_size_ = declare_parameter("min_cluster_size"); max_cluster_size_ = declare_parameter("max_cluster_size"); cluster_2d_tolerance_ = declare_parameter("cluster_2d_tolerance"); - pub_objects_ptr_ = - this->create_publisher("output_clusters", rclcpp::QoS{1}); - cluster_debug_pub_ = this->create_publisher("debug/clusters", 1); -} - -void RoiPointCloudFusionNode::preprocess( - __attribute__((unused)) sensor_msgs::msg::PointCloud2 & pointcloud_msg) -{ - std::unique_ptr st_ptr; - if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); - return; + // publisher + point_pub_ptr_ = this->create_publisher("output", rclcpp::QoS{1}); + pub_ptr_ = this->create_publisher("output_clusters", rclcpp::QoS{1}); + cluster_debug_pub_ = this->create_publisher("debug/clusters", 1); } -void RoiPointCloudFusionNode::postprocess( - __attribute__((unused)) sensor_msgs::msg::PointCloud2 & pointcloud_msg) -{ - std::unique_ptr st_ptr; - if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); - - const auto objects_sub_count = pub_objects_ptr_->get_subscription_count() + - pub_objects_ptr_->get_intra_process_subscription_count(); - if (objects_sub_count < 1) { - return; - } - - DetectedObjectsWithFeature output_msg; - output_msg.header = pointcloud_msg.header; - output_msg.feature_objects = output_fused_objects_; - - if (objects_sub_count > 0) { - pub_objects_ptr_->publish(output_msg); - } - output_fused_objects_.clear(); - // publish debug cluster - if (cluster_debug_pub_->get_subscription_count() > 0) { - sensor_msgs::msg::PointCloud2 debug_cluster_msg; - autoware::euclidean_cluster::convertObjectMsg2SensorMsg(output_msg, debug_cluster_msg); - cluster_debug_pub_->publish(debug_cluster_msg); - } -} void RoiPointCloudFusionNode::fuseOnSingleImage( - const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, const std::size_t image_id, - const DetectedObjectsWithFeature & input_roi_msg, - __attribute__((unused)) sensor_msgs::msg::PointCloud2 & output_pointcloud_msg) + const PointCloudMsgType & input_pointcloud_msg, const Det2dStatus & det2d, + const RoiMsgType & input_roi_msg, + __attribute__((unused)) PointCloudMsgType & output_pointcloud_msg) { std::unique_ptr st_ptr; if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); @@ -137,10 +102,10 @@ void RoiPointCloudFusionNode::fuseOnSingleImage( const int z_offset = input_pointcloud_msg.fields[pcl::getFieldIndex(input_pointcloud_msg, "z")].offset; - sensor_msgs::msg::PointCloud2 transformed_cloud; + PointCloudMsgType transformed_cloud; tf2::doTransform(input_pointcloud_msg, transformed_cloud, transform_stamped); - std::vector clusters; + std::vector clusters; std::vector clusters_data_size; clusters.resize(output_objs.size()); for (auto & cluster : clusters) { @@ -162,7 +127,7 @@ void RoiPointCloudFusionNode::fuseOnSingleImage( } Eigen::Vector2d projected_point; - if (camera_projectors_[image_id].calcImageProjectedPoint( + if (det2d.camera_projector_ptr->calcImageProjectedPoint( cv::Point3d(transformed_x, transformed_y, transformed_z), projected_point)) { for (std::size_t i = 0; i < output_objs.size(); ++i) { auto & feature_obj = output_objs.at(i); @@ -202,14 +167,40 @@ void RoiPointCloudFusionNode::fuseOnSingleImage( if (debugger_) { debugger_->image_rois_ = debug_image_rois; debugger_->obstacle_points_ = debug_image_points; - debugger_->publishImage(image_id, input_roi_msg.header.stamp); + debugger_->publishImage(det2d.id, input_roi_msg.header.stamp); } } -bool RoiPointCloudFusionNode::out_of_scope(__attribute__((unused)) - const DetectedObjectWithFeature & obj) +void RoiPointCloudFusionNode::postprocess( + const PointCloudMsgType & pointcloud_msg, ClusterMsgType & output_msg) { - return false; + std::unique_ptr st_ptr; + if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); + + output_msg.header = pointcloud_msg.header; + output_msg.feature_objects = output_fused_objects_; + + output_fused_objects_.clear(); + + // publish debug cluster + if (cluster_debug_pub_->get_subscription_count() > 0) { + PointCloudMsgType debug_cluster_msg; + autoware::euclidean_cluster::convertObjectMsg2SensorMsg(output_msg, debug_cluster_msg); + cluster_debug_pub_->publish(debug_cluster_msg); + } + if (point_pub_ptr_->get_subscription_count() > 0) { + point_pub_ptr_->publish(pointcloud_msg); + } +} + +void RoiPointCloudFusionNode::publish(const ClusterMsgType & output_msg) +{ + const auto objects_sub_count = + pub_ptr_->get_subscription_count() + pub_ptr_->get_intra_process_subscription_count(); + if (objects_sub_count < 1) { + return; + } + pub_ptr_->publish(output_msg); } } // namespace autoware::image_projection_based_fusion diff --git a/perception/autoware_image_projection_based_fusion/src/segmentation_pointcloud_fusion/node.cpp b/perception/autoware_image_projection_based_fusion/src/segmentation_pointcloud_fusion/node.cpp index 486ae291abc6a..7d63cac7273c6 100644 --- a/perception/autoware_image_projection_based_fusion/src/segmentation_pointcloud_fusion/node.cpp +++ b/perception/autoware_image_projection_based_fusion/src/segmentation_pointcloud_fusion/node.cpp @@ -36,7 +36,7 @@ namespace autoware::image_projection_based_fusion using autoware::universe_utils::ScopedTimeTrack; SegmentPointCloudFusionNode::SegmentPointCloudFusionNode(const rclcpp::NodeOptions & options) -: FusionNode("segmentation_pointcloud_fusion", options) +: FusionNode("segmentation_pointcloud_fusion", options) { filter_distance_threshold_ = declare_parameter("filter_distance_threshold"); for (auto & item : filter_semantic_label_target_list_) { @@ -48,47 +48,24 @@ SegmentPointCloudFusionNode::SegmentPointCloudFusionNode(const rclcpp::NodeOptio } is_publish_debug_mask_ = declare_parameter("is_publish_debug_mask"); pub_debug_mask_ptr_ = image_transport::create_publisher(this, "~/debug/mask"); -} - -void SegmentPointCloudFusionNode::preprocess(__attribute__((unused)) PointCloud2 & pointcloud_msg) -{ - std::unique_ptr st_ptr; - if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); - return; + // publisher + pub_ptr_ = this->create_publisher("output", rclcpp::QoS{1}); } -void SegmentPointCloudFusionNode::postprocess(PointCloud2 & pointcloud_msg) +void SegmentPointCloudFusionNode::preprocess(__attribute__((unused)) + PointCloudMsgType & pointcloud_msg) { std::unique_ptr st_ptr; if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); - auto original_cloud = std::make_shared(pointcloud_msg); - - int point_step = original_cloud->point_step; - size_t output_pointcloud_size = 0; - pointcloud_msg.data.clear(); - pointcloud_msg.data.resize(original_cloud->data.size()); - - for (size_t global_offset = 0; global_offset < original_cloud->data.size(); - global_offset += point_step) { - if (filter_global_offset_set_.find(global_offset) == filter_global_offset_set_.end()) { - copyPointCloud( - *original_cloud, point_step, global_offset, pointcloud_msg, output_pointcloud_size); - } - } - - pointcloud_msg.data.resize(output_pointcloud_size); - pointcloud_msg.row_step = output_pointcloud_size / pointcloud_msg.height; - pointcloud_msg.width = output_pointcloud_size / pointcloud_msg.point_step / pointcloud_msg.height; - - filter_global_offset_set_.clear(); return; } void SegmentPointCloudFusionNode::fuseOnSingleImage( - const PointCloud2 & input_pointcloud_msg, const std::size_t image_id, - [[maybe_unused]] const Image & input_mask, __attribute__((unused)) PointCloud2 & output_cloud) + const PointCloudMsgType & input_pointcloud_msg, const Det2dStatus & det2d, + [[maybe_unused]] const Image & input_mask, + __attribute__((unused)) PointCloudMsgType & output_cloud) { std::unique_ptr st_ptr; if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); @@ -100,7 +77,7 @@ void SegmentPointCloudFusionNode::fuseOnSingleImage( return; } - const sensor_msgs::msg::CameraInfo & camera_info = camera_projectors_[image_id].getCameraInfo(); + const sensor_msgs::msg::CameraInfo & camera_info = det2d.camera_projector_ptr->getCameraInfo(); std::vector mask_data(input_mask.data.begin(), input_mask.data.end()); cv::Mat mask = perception_utils::runLengthDecoder(mask_data, input_mask.height, input_mask.width); @@ -128,7 +105,7 @@ void SegmentPointCloudFusionNode::fuseOnSingleImage( transform_stamped = transform_stamped_optional.value(); } - PointCloud2 transformed_cloud; + PointCloudMsgType transformed_cloud; tf2::doTransform(input_pointcloud_msg, transformed_cloud, transform_stamped); int point_step = input_pointcloud_msg.point_step; @@ -150,7 +127,7 @@ void SegmentPointCloudFusionNode::fuseOnSingleImage( } Eigen::Vector2d projected_point; - if (!camera_projectors_[image_id].calcImageProjectedPoint( + if (!det2d.camera_projector_ptr->calcImageProjectedPoint( cv::Point3d(transformed_x, transformed_y, transformed_z), projected_point)) { continue; } @@ -168,11 +145,33 @@ void SegmentPointCloudFusionNode::fuseOnSingleImage( } } -bool SegmentPointCloudFusionNode::out_of_scope(__attribute__((unused)) - const PointCloud2 & filtered_cloud) +void SegmentPointCloudFusionNode::postprocess( + const PointCloudMsgType & pointcloud_msg, PointCloudMsgType & output_msg) { - return false; + std::unique_ptr st_ptr; + if (time_keeper_) st_ptr = std::make_unique(__func__, *time_keeper_); + + output_msg.header = pointcloud_msg.header; + output_msg.data.clear(); + output_msg.data.resize(pointcloud_msg.data.size()); + const int point_step = pointcloud_msg.point_step; + + size_t output_pointcloud_size = 0; + for (size_t global_offset = 0; global_offset < pointcloud_msg.data.size(); + global_offset += point_step) { + if (filter_global_offset_set_.find(global_offset) == filter_global_offset_set_.end()) { + copyPointCloud(pointcloud_msg, point_step, global_offset, output_msg, output_pointcloud_size); + } + } + + output_msg.data.resize(output_pointcloud_size); + output_msg.row_step = output_pointcloud_size / output_msg.height; + output_msg.width = output_pointcloud_size / output_msg.point_step / output_msg.height; + + filter_global_offset_set_.clear(); + return; } + } // namespace autoware::image_projection_based_fusion #include diff --git a/perception/autoware_image_projection_based_fusion/src/utils/utils.cpp b/perception/autoware_image_projection_based_fusion/src/utils/utils.cpp index 4456d25b18167..81424d4c23a34 100644 --- a/perception/autoware_image_projection_based_fusion/src/utils/utils.cpp +++ b/perception/autoware_image_projection_based_fusion/src/utils/utils.cpp @@ -67,8 +67,8 @@ Eigen::Affine3d transformToEigen(const geometry_msgs::msg::Transform & t) } void closest_cluster( - const PointCloud2 & cluster, const double cluster_2d_tolerance, const int min_cluster_size, - const pcl::PointXYZ & center, PointCloud2 & out_cluster) + const PointCloudMsgType & cluster, const double cluster_2d_tolerance, const int min_cluster_size, + const pcl::PointXYZ & center, PointCloudMsgType & out_cluster) { // sort point by distance to camera origin @@ -123,8 +123,8 @@ void closest_cluster( } void updateOutputFusedObjects( - std::vector & output_objs, std::vector & clusters, - const std::vector & clusters_data_size, const PointCloud2 & in_cloud, + std::vector & output_objs, std::vector & clusters, + const std::vector & clusters_data_size, const PointCloudMsgType & in_cloud, const std_msgs::msg::Header & in_roi_header, const tf2_ros::Buffer & tf_buffer, const int min_cluster_size, const int max_cluster_size, const float cluster_2d_tolerance, std::vector & output_fused_objects) @@ -162,7 +162,7 @@ void updateOutputFusedObjects( // TODO(badai-nguyen): change to interface to select refine criteria like closest, largest // to output refine cluster and centroid - sensor_msgs::msg::PointCloud2 refine_cluster; + PointCloudMsgType refine_cluster; closest_cluster( cluster, cluster_2d_tolerance, min_cluster_size, camera_orig_point_frame, refine_cluster); if ( @@ -184,7 +184,7 @@ void updateOutputFusedObjects( } } -geometry_msgs::msg::Point getCentroid(const sensor_msgs::msg::PointCloud2 & pointcloud) +geometry_msgs::msg::Point getCentroid(const PointCloudMsgType & pointcloud) { geometry_msgs::msg::Point centroid; centroid.x = 0.0f; From 811f59d696d39c99e8731b70214f01bdcc64378e Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Wed, 8 Jan 2025 18:39:53 +0900 Subject: [PATCH 56/77] docs(bpp): revise explanation for Failure modules (#9863) Signed-off-by: Zulfaqar Azmi --- .../docs/behavior_path_planner_manager_design.md | 4 ++-- .../autoware_behavior_path_planner/package.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/docs/behavior_path_planner_manager_design.md b/planning/behavior_path_planner/autoware_behavior_path_planner/docs/behavior_path_planner_manager_design.md index 1e8532eba2f3a..3b787303d8d20 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/docs/behavior_path_planner_manager_design.md +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/docs/behavior_path_planner_manager_design.md @@ -533,9 +533,9 @@ If this case happened in the slot, `is_upstream_waiting_approved` is set to true ### Failure modules -The failure modules return the status `ModuleStatus::FAILURE`. The manager removes the module from approved modules stack as well as waiting approval modules, but the failure module is not moved to candidate modules stack. +If a module returns `ModuleStatus::FAILURE`, the manager removes the failed module. Additionally, all modules after the failed module are removed, even if they did not return `ModuleStatus::FAILURE`. These modules are not added back to the candidate modules stack and will instead run again from the beginning. Once these modules are removed, the output of the module prior to the failed module will be used as the planner's output. -As a result, the module A's output is used as approved modules stack. +As shown in the example below, modules B, A, and C are running. When module A returns `ModuleStatus::FAILURE`, both module A and C are removed from the approved modules stack. Module B's output is then used as the final output of the planner. ![failure_modules](../image/manager/failure_modules.drawio.svg) diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/package.xml b/planning/behavior_path_planner/autoware_behavior_path_planner/package.xml index 7b7e2438a3fd6..f9c736b9d5dde 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/package.xml +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/package.xml @@ -21,6 +21,7 @@ Kyoichi Sugahara Takayuki Murooka Go Sakayori + Mamoru Sobue Apache License 2.0 @@ -29,7 +30,6 @@ Fumiya Watanabe Zulfaqar Azmi Kosuke Takeuchi - Yutaka Shimizu Takayuki Murooka Ryohsuke Mitsudome From b5c008a2b6726458e7b2c304fce7b3e5c159cb5f Mon Sep 17 00:00:00 2001 From: cyn-liu <104069308+cyn-liu@users.noreply.github.com> Date: Thu, 9 Jan 2025 08:01:43 +0800 Subject: [PATCH 57/77] feat(autoware_point_types): move autoware_point_types to autoware.core (#9864) Signed-off-by: liu cui --- common/autoware_point_types/CHANGELOG.rst | 150 -------------- common/autoware_point_types/CMakeLists.txt | 25 --- common/autoware_point_types/README.md | 1 - .../include/autoware/point_types/types.hpp | 188 ------------------ common/autoware_point_types/package.xml | 34 ---- .../test/test_point_types.cpp | 66 ------ 6 files changed, 464 deletions(-) delete mode 100644 common/autoware_point_types/CHANGELOG.rst delete mode 100644 common/autoware_point_types/CMakeLists.txt delete mode 100644 common/autoware_point_types/README.md delete mode 100644 common/autoware_point_types/include/autoware/point_types/types.hpp delete mode 100644 common/autoware_point_types/package.xml delete mode 100644 common/autoware_point_types/test/test_point_types.cpp diff --git a/common/autoware_point_types/CHANGELOG.rst b/common/autoware_point_types/CHANGELOG.rst deleted file mode 100644 index 5e26002677a36..0000000000000 --- a/common/autoware_point_types/CHANGELOG.rst +++ /dev/null @@ -1,150 +0,0 @@ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package autoware_point_types -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -0.40.0 (2024-12-12) -------------------- -* Revert "chore(package.xml): bump version to 0.39.0 (`#9587 `_)" - This reverts commit c9f0f2688c57b0f657f5c1f28f036a970682e7f5. -* fix: fix ticket links in CHANGELOG.rst (`#9588 `_) -* chore(package.xml): bump version to 0.39.0 (`#9587 `_) - * chore(package.xml): bump version to 0.39.0 - * fix: fix ticket links in CHANGELOG.rst - * fix: remove unnecessary diff - --------- - Co-authored-by: Yutaka Kondo -* fix: fix ticket links in CHANGELOG.rst (`#9588 `_) -* 0.39.0 -* update changelog -* fix: fix ticket links to point to https://github.com/autowarefoundation/autoware.universe (`#9304 `_) -* fix: fix ticket links to point to https://github.com/autowarefoundation/autoware.universe (`#9304 `_) -* chore(package.xml): bump version to 0.38.0 (`#9266 `_) (`#9284 `_) - * unify package.xml version to 0.37.0 - * remove system_monitor/CHANGELOG.rst - * add changelog - * 0.38.0 - --------- -* Contributors: Esteve Fernandez, Fumiya Watanabe, Ryohsuke Mitsudome, Yutaka Kondo - -0.39.0 (2024-11-25) -------------------- -* fix: fix ticket links to point to https://github.com/autowarefoundation/autoware.universe (`#9304 `_) -* fix: fix ticket links to point to https://github.com/autowarefoundation/autoware.universe (`#9304 `_) -* chore(package.xml): bump version to 0.38.0 (`#9266 `_) (`#9284 `_) - * unify package.xml version to 0.37.0 - * remove system_monitor/CHANGELOG.rst - * add changelog - * 0.38.0 - --------- -* Contributors: Esteve Fernandez, Yutaka Kondo - -0.38.0 (2024-11-08) -------------------- -* unify package.xml version to 0.37.0 -* refactor(autoware_point_types): prefix namespace with autoware::point_types (`#9169 `_) -* feat: migrating pointcloud types (`#6996 `_) - * feat: changed most of sensing to the new type - * chore: started applying changes to the perception stack - * feat: confirmed operation until centerpoint - * feat: reverted to the original implementation of pointpainting - * chore: forgot to push a header - * feat: also implemented the changes for the subsample filters that were out of scope before - * fix: some point type changes were missing from the latest merge from main - * chore: removed unused code, added comments, and brought back a removed publish - * chore: replaced pointcloud_raw for pointcloud_raw_ex to avoid extra processing time in the drivers - * feat: added memory layout checks - * chore: updated documentation regarding the point types - * chore: added hyperlinks to the point definitions. will be valid only once the PR is merged - * fix: fixed compilation due to moving the utilities files to the base library - * chore: separated the utilities functions due to a dependency issue - * chore: forgot that perception also uses the filter class - * feature: adapted the undistortion tests to the new point type - --------- - Co-authored-by: kminoda <44218668+kminoda@users.noreply.github.com> - Co-authored-by: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> -* chore: updated maintainers for the autoware_point_types package (`#7797 `_) -* docs(common): adding .pages file (`#7148 `_) - * docs(common): adding .pages file - * fix naming - * fix naming - * fix naming - * include main page plus explanation to autoware tools - * style(pre-commit): autofix - --------- - Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> -* Contributors: Esteve Fernandez, Kenzo Lobos Tsunekawa, Yutaka Kondo, Zulfaqar Azmi - -0.26.0 (2024-04-03) -------------------- -* build: mark autoware_cmake as (`#3616 `_) - * build: mark autoware_cmake as - with , autoware_cmake is automatically exported with ament_target_dependencies() (unecessary) - * style(pre-commit): autofix - * chore: fix pre-commit errors - --------- - Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> - Co-authored-by: Kenji Miyake -* feat: isolate gtests in all packages (`#693 `_) -* chore: upgrade cmake_minimum_required to 3.14 (`#856 `_) -* refactor: use autoware cmake (`#849 `_) - * remove autoware_auto_cmake - * add build_depend of autoware_cmake - * use autoware_cmake in CMakeLists.txt - * fix bugs - * fix cmake lint errors -* feat: add blockage diagnostics (`#461 `_) - * feat!: add blockage diagnostic - * fix: typo - * docs: add documentation - * ci(pre-commit): autofix - * fix: typo - * ci(pre-commit): autofix - * fix: typo - * chore: add adjustable param - * ci(pre-commit): autofix - * feat!: add blockage diagnostic - * fix: typo - * docs: add documentation - * ci(pre-commit): autofix - * fix: typo - * ci(pre-commit): autofix - * fix: typo - * chore: add adjustable param - * ci(pre-commit): autofix - * chore: rearrange header file - * chore: fix typo - * chore: rearrange header - * fix: revert accident change - * chore: fix typo - * docs: add limits - * chore: check overflow - Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> -* ci: check include guard (`#438 `_) - * ci: check include guard - * apply pre-commit - * Update .pre-commit-config.yaml - Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com> - * fix: pre-commit - Co-authored-by: Kenji Miyake - Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com> -* feat: add point_types for wrapper (`#784 `_) (`#215 `_) - * add point_types - * Revert "add point_types" - This reverts commit 5810000cd1cbd876bc22372e2bb74ccaca06187b. - * create autoware_point_types pkg - * add include - * add cmath - * fix author - * fix bug - * define epsilon as argument - * add test - * remove unnamed namespace - * update test - * fix test name - * use std::max - * change comparison method - * remove unnencessary line - * fix test - * fix comparison method name - Co-authored-by: Taichi Higashide -* Contributors: Daisuke Nishimatsu, Kenji Miyake, Maxime CLEMENT, Takagi, Isamu, Vincent Richard, badai nguyen diff --git a/common/autoware_point_types/CMakeLists.txt b/common/autoware_point_types/CMakeLists.txt deleted file mode 100644 index c149f79dab71f..0000000000000 --- a/common/autoware_point_types/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(autoware_point_types) - -find_package(autoware_cmake REQUIRED) -autoware_package() - -include_directories( - include - SYSTEM - ${PCL_INCLUDE_DIRS} -) - -if(BUILD_TESTING) - ament_add_ros_isolated_gtest(test_autoware_point_types - test/test_point_types.cpp - ) - target_include_directories(test_autoware_point_types - PRIVATE include - ) - ament_target_dependencies(test_autoware_point_types - point_cloud_msg_wrapper - ) -endif() - -ament_auto_package() diff --git a/common/autoware_point_types/README.md b/common/autoware_point_types/README.md deleted file mode 100644 index 92f19d2bc353a..0000000000000 --- a/common/autoware_point_types/README.md +++ /dev/null @@ -1 +0,0 @@ -# Autoware Point Types diff --git a/common/autoware_point_types/include/autoware/point_types/types.hpp b/common/autoware_point_types/include/autoware/point_types/types.hpp deleted file mode 100644 index 0fde62222e276..0000000000000 --- a/common/autoware_point_types/include/autoware/point_types/types.hpp +++ /dev/null @@ -1,188 +0,0 @@ -// Copyright 2021 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__POINT_TYPES__TYPES_HPP_ -#define AUTOWARE__POINT_TYPES__TYPES_HPP_ - -#include - -#include - -#include -#include - -namespace autoware::point_types -{ -template -bool float_eq(const T a, const T b, const T eps = 10e-6) -{ - return std::fabs(a - b) < eps; -} - -struct PointXYZI -{ - float x{0.0F}; - float y{0.0F}; - float z{0.0F}; - float intensity{0.0F}; - friend bool operator==(const PointXYZI & p1, const PointXYZI & p2) noexcept - { - return float_eq(p1.x, p2.x) && float_eq(p1.y, p2.y) && - float_eq(p1.z, p2.z) && float_eq(p1.intensity, p2.intensity); - } -}; - -enum ReturnType : uint8_t { - INVALID = 0, - SINGLE_STRONGEST, - SINGLE_LAST, - DUAL_STRONGEST_FIRST, - DUAL_STRONGEST_LAST, - DUAL_WEAK_FIRST, - DUAL_WEAK_LAST, - DUAL_ONLY, -}; - -struct PointXYZIRC -{ - float x{0.0F}; - float y{0.0F}; - float z{0.0F}; - std::uint8_t intensity{0U}; - std::uint8_t return_type{0U}; - std::uint16_t channel{0U}; - - friend bool operator==(const PointXYZIRC & p1, const PointXYZIRC & p2) noexcept - { - return float_eq(p1.x, p2.x) && float_eq(p1.y, p2.y) && - float_eq(p1.z, p2.z) && p1.intensity == p2.intensity && - p1.return_type == p2.return_type && p1.channel == p2.channel; - } -}; - -struct PointXYZIRADRT -{ - float x{0.0F}; - float y{0.0F}; - float z{0.0F}; - float intensity{0.0F}; - uint16_t ring{0U}; - float azimuth{0.0F}; - float distance{0.0F}; - uint8_t return_type{0U}; - double time_stamp{0.0}; - friend bool operator==(const PointXYZIRADRT & p1, const PointXYZIRADRT & p2) noexcept - { - return float_eq(p1.x, p2.x) && float_eq(p1.y, p2.y) && - float_eq(p1.z, p2.z) && float_eq(p1.intensity, p2.intensity) && - p1.ring == p2.ring && float_eq(p1.azimuth, p2.azimuth) && - float_eq(p1.distance, p2.distance) && p1.return_type == p2.return_type && - float_eq(p1.time_stamp, p2.time_stamp); - } -}; - -struct PointXYZIRCAEDT -{ - float x{0.0F}; - float y{0.0F}; - float z{0.0F}; - std::uint8_t intensity{0U}; - std::uint8_t return_type{0U}; - std::uint16_t channel{0U}; - float azimuth{0.0F}; - float elevation{0.0F}; - float distance{0.0F}; - std::uint32_t time_stamp{0U}; - - friend bool operator==(const PointXYZIRCAEDT & p1, const PointXYZIRCAEDT & p2) noexcept - { - return float_eq(p1.x, p2.x) && float_eq(p1.y, p2.y) && - float_eq(p1.z, p2.z) && p1.intensity == p2.intensity && - p1.return_type == p2.return_type && p1.channel == p2.channel && - float_eq(p1.azimuth, p2.azimuth) && float_eq(p1.distance, p2.distance) && - p1.time_stamp == p2.time_stamp; - } -}; - -enum class PointXYZIIndex { X, Y, Z, Intensity }; -enum class PointXYZIRCIndex { X, Y, Z, Intensity, ReturnType, Channel }; -enum class PointXYZIRADRTIndex { - X, - Y, - Z, - Intensity, - Ring, - Azimuth, - Distance, - ReturnType, - TimeStamp -}; -enum class PointXYZIRCAEDTIndex { - X, - Y, - Z, - Intensity, - ReturnType, - Channel, - Azimuth, - Elevation, - Distance, - TimeStamp -}; - -LIDAR_UTILS__DEFINE_FIELD_GENERATOR_FOR_MEMBER(azimuth); -LIDAR_UTILS__DEFINE_FIELD_GENERATOR_FOR_MEMBER(elevation); -LIDAR_UTILS__DEFINE_FIELD_GENERATOR_FOR_MEMBER(distance); -LIDAR_UTILS__DEFINE_FIELD_GENERATOR_FOR_MEMBER(return_type); -LIDAR_UTILS__DEFINE_FIELD_GENERATOR_FOR_MEMBER(time_stamp); - -LIDAR_UTILS__DEFINE_FIELD_GENERATOR_FOR_MEMBER(channel); - -using PointXYZIRCGenerator = std::tuple< - point_cloud_msg_wrapper::field_x_generator, point_cloud_msg_wrapper::field_y_generator, - point_cloud_msg_wrapper::field_z_generator, point_cloud_msg_wrapper::field_intensity_generator, - field_return_type_generator, field_channel_generator>; - -using PointXYZIRADRTGenerator = std::tuple< - point_cloud_msg_wrapper::field_x_generator, point_cloud_msg_wrapper::field_y_generator, - point_cloud_msg_wrapper::field_z_generator, point_cloud_msg_wrapper::field_intensity_generator, - point_cloud_msg_wrapper::field_ring_generator, field_azimuth_generator, field_distance_generator, - field_return_type_generator, field_time_stamp_generator>; - -using PointXYZIRCAEDTGenerator = std::tuple< - point_cloud_msg_wrapper::field_x_generator, point_cloud_msg_wrapper::field_y_generator, - point_cloud_msg_wrapper::field_z_generator, point_cloud_msg_wrapper::field_intensity_generator, - field_return_type_generator, field_channel_generator, field_azimuth_generator, - field_elevation_generator, field_distance_generator, field_time_stamp_generator>; - -} // namespace autoware::point_types - -POINT_CLOUD_REGISTER_POINT_STRUCT( - autoware::point_types::PointXYZIRC, - (float, x, x)(float, y, y)(float, z, z)(std::uint8_t, intensity, intensity)( - std::uint8_t, return_type, return_type)(std::uint16_t, channel, channel)) - -POINT_CLOUD_REGISTER_POINT_STRUCT( - autoware::point_types::PointXYZIRADRT, - (float, x, x)(float, y, y)(float, z, z)(float, intensity, intensity)(std::uint16_t, ring, ring)( - float, azimuth, azimuth)(float, distance, distance)(std::uint8_t, return_type, return_type)( - double, time_stamp, time_stamp)) - -POINT_CLOUD_REGISTER_POINT_STRUCT( - autoware::point_types::PointXYZIRCAEDT, - (float, x, x)(float, y, y)(float, z, z)(std::uint8_t, intensity, intensity)( - std::uint8_t, return_type, - return_type)(std::uint16_t, channel, channel)(float, azimuth, azimuth)( - float, elevation, elevation)(float, distance, distance)(std::uint32_t, time_stamp, time_stamp)) -#endif // AUTOWARE__POINT_TYPES__TYPES_HPP_ diff --git a/common/autoware_point_types/package.xml b/common/autoware_point_types/package.xml deleted file mode 100644 index e35e6a63de648..0000000000000 --- a/common/autoware_point_types/package.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - autoware_point_types - 0.40.0 - The point types definition to use point_cloud_msg_wrapper - David Wong - Max Schmeller - Apache License 2.0 - - ament_cmake_core - ament_cmake_export_dependencies - ament_cmake_test - autoware_cmake - - ament_cmake_core - ament_cmake_test - - ament_cmake_copyright - ament_cmake_cppcheck - ament_cmake_lint_cmake - ament_cmake_xmllint - pcl_ros - point_cloud_msg_wrapper - - ament_cmake_ros - ament_lint_auto - autoware_lint_common - point_cloud_msg_wrapper - - - ament_cmake - - diff --git a/common/autoware_point_types/test/test_point_types.cpp b/common/autoware_point_types/test/test_point_types.cpp deleted file mode 100644 index 08696a9948f60..0000000000000 --- a/common/autoware_point_types/test/test_point_types.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright 2021 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 "autoware/point_types/types.hpp" - -#include - -#include - -TEST(PointEquality, PointXYZI) -{ - using autoware::point_types::PointXYZI; - - PointXYZI pt0{0, 1, 2, 3}; - PointXYZI pt1{0, 1, 2, 3}; - EXPECT_EQ(pt0, pt1); -} - -TEST(PointEquality, PointXYZIRADRT) -{ - using autoware::point_types::PointXYZIRADRT; - - PointXYZIRADRT pt0{0, 1, 2, 3, 4, 5, 6, 7, 8}; - PointXYZIRADRT pt1{0, 1, 2, 3, 4, 5, 6, 7, 8}; - EXPECT_EQ(pt0, pt1); -} - -TEST(PointEquality, PointXYZIRCAEDT) -{ - using autoware::point_types::PointXYZIRCAEDT; - - PointXYZIRCAEDT pt0{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; - PointXYZIRCAEDT pt1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; - EXPECT_EQ(pt0, pt1); -} - -TEST(PointEquality, FloatEq) -{ - // test template - EXPECT_TRUE(autoware::point_types::float_eq(1, 1)); - EXPECT_TRUE(autoware::point_types::float_eq(1, 1)); - - // test floating point error - EXPECT_TRUE(autoware::point_types::float_eq(1, 1 + std::numeric_limits::epsilon())); - - // test difference of sign - EXPECT_FALSE(autoware::point_types::float_eq(2, -2)); - EXPECT_FALSE(autoware::point_types::float_eq(-2, 2)); - - // small value difference - EXPECT_FALSE(autoware::point_types::float_eq(2, 2 + 10e-6)); - - // expect same value if epsilon is larger than difference - EXPECT_TRUE(autoware::point_types::float_eq(2, 2 + 10e-6, 10e-5)); -} From fd23b61e8c81ef22deacc4ef29970bf1fe460629 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Thu, 9 Jan 2025 09:10:40 +0900 Subject: [PATCH 58/77] fix(image_projection_based_fusion): remove mutex (#9862) refactor: Refactor fusion_node.hpp and fusion_node.cpp for improved code organization and readability Signed-off-by: Taekjin LEE --- .../fusion_node.hpp | 2 -- .../src/fusion_node.cpp | 30 +++++-------------- 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/fusion_node.hpp b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/fusion_node.hpp index b8881bc6abff7..e05339771f667 100644 --- a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/fusion_node.hpp +++ b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/fusion_node.hpp @@ -40,7 +40,6 @@ #include #include -#include #include #include #include @@ -127,7 +126,6 @@ class FusionNode : public rclcpp::Node // cache for fusion int64_t cached_det3d_msg_timestamp_; typename Msg3D::SharedPtr cached_det3d_msg_ptr_; - std::mutex mutex_cached_msgs_; protected: void setDet2DStatus(std::size_t rois_number); diff --git a/perception/autoware_image_projection_based_fusion/src/fusion_node.cpp b/perception/autoware_image_projection_based_fusion/src/fusion_node.cpp index 310c68f12db88..700d249831000 100644 --- a/perception/autoware_image_projection_based_fusion/src/fusion_node.cpp +++ b/perception/autoware_image_projection_based_fusion/src/fusion_node.cpp @@ -280,8 +280,6 @@ void FusionNode::subCallback( } } - std::lock_guard lock(mutex_cached_msgs_); - // TIMING: reset timer to the timeout time auto period = std::chrono::duration_cast( std::chrono::duration(timeout_ms_)); @@ -447,28 +445,16 @@ void FusionNode::timer_callback() using std::chrono_literals::operator""ms; timer_->cancel(); - if (mutex_cached_msgs_.try_lock()) { - // PROCESS: if timeout, postprocess cached msg - if (cached_det3d_msg_ptr_ != nullptr) { - stop_watch_ptr_->toc("processing_time", true); - exportProcess(); - } - // reset flags whether the message is fused or not - for (auto & det2d : det2d_list_) { - det2d.is_fused = false; - } + // PROCESS: if timeout, postprocess cached msg + if (cached_det3d_msg_ptr_ != nullptr) { + stop_watch_ptr_->toc("processing_time", true); + exportProcess(); + } - mutex_cached_msgs_.unlock(); - } else { - // TIMING: retry the process after 10ms - try { - std::chrono::nanoseconds period = 10ms; - setPeriod(period.count()); - } catch (rclcpp::exceptions::RCLError & ex) { - RCLCPP_WARN_THROTTLE(get_logger(), *get_clock(), 5000, "%s", ex.what()); - } - timer_->reset(); + // reset flags whether the message is fused or not + for (auto & det2d : det2d_list_) { + det2d.is_fused = false; } } From 51818f00ec4775510386c7757065bba84474a0a1 Mon Sep 17 00:00:00 2001 From: Vishal Chauhan <40782713+vish0012@users.noreply.github.com> Date: Thu, 9 Jan 2025 13:30:05 +0900 Subject: [PATCH 59/77] feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files localization/autoware_twist2accel (#9868) Signed-off-by: vish0012 Co-authored-by: SakodaShintaro --- localization/autoware_twist2accel/package.xml | 2 +- localization/autoware_twist2accel/src/twist2accel.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/localization/autoware_twist2accel/package.xml b/localization/autoware_twist2accel/package.xml index 75cea94546516..013ef54fe52d1 100644 --- a/localization/autoware_twist2accel/package.xml +++ b/localization/autoware_twist2accel/package.xml @@ -17,13 +17,13 @@ ament_cmake_auto autoware_cmake + autoware_internal_debug_msgs autoware_signal_processing geometry_msgs nav_msgs rclcpp rclcpp_components tf2 - tier4_debug_msgs ament_cmake_ros ament_lint_auto diff --git a/localization/autoware_twist2accel/src/twist2accel.hpp b/localization/autoware_twist2accel/src/twist2accel.hpp index d338b256fec77..d142328f9d498 100644 --- a/localization/autoware_twist2accel/src/twist2accel.hpp +++ b/localization/autoware_twist2accel/src/twist2accel.hpp @@ -19,11 +19,11 @@ #include +#include #include #include #include #include -#include #include #include From 708fa76bcad2baf1eb17817c8fb79eb87dff3a72 Mon Sep 17 00:00:00 2001 From: Vishal Chauhan <40782713+vish0012@users.noreply.github.com> Date: Thu, 9 Jan 2025 14:42:41 +0900 Subject: [PATCH 60/77] =?UTF-8?q?feat:=20tier4=5Fdebug=5Fmsgs=20to=20autow?= =?UTF-8?q?are=5Finternal=5Fdebug=5Fmsgs=20in=20files=20=20perc=E2=80=A6?= =?UTF-8?q?=20(#9879)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: tier4_debug_msgs to autoware_internal_debug_msgs in files perception/autoware_multi_object_tracker Signed-off-by: vish0012 --- .../src/debugger/debugger.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/perception/autoware_multi_object_tracker/src/debugger/debugger.cpp b/perception/autoware_multi_object_tracker/src/debugger/debugger.cpp index 3eebb3c11ee3e..3761fc1e6f43a 100644 --- a/perception/autoware_multi_object_tracker/src/debugger/debugger.cpp +++ b/perception/autoware_multi_object_tracker/src/debugger/debugger.cpp @@ -127,7 +127,7 @@ void TrackerDebugger::startMeasurementTime( stamp_process_start_ = now; if (debug_settings_.publish_processing_time) { double input_latency_ms = (now - last_input_stamp_).seconds() * 1e3; - processing_time_publisher_->publish( + processing_time_publisher_->publish( "debug/input_latency_ms", input_latency_ms); } // initialize debug time stamps @@ -169,15 +169,15 @@ void TrackerDebugger::endPublishTime(const rclcpp::Time & now, const rclcpp::Tim double measurement_to_object_ms = (object_time - last_input_stamp_).seconds() * 1e3; // starting from the measurement time - processing_time_publisher_->publish( + processing_time_publisher_->publish( "debug/pipeline_latency_ms", pipeline_latency_ms_); - processing_time_publisher_->publish( + processing_time_publisher_->publish( "debug/cyclic_time_ms", cyclic_time_ms); - processing_time_publisher_->publish( + processing_time_publisher_->publish( "debug/processing_time_ms", processing_time_ms); - processing_time_publisher_->publish( + processing_time_publisher_->publish( "debug/processing_latency_ms", processing_latency_ms); - processing_time_publisher_->publish( + processing_time_publisher_->publish( "debug/meas_to_tracked_object_ms", measurement_to_object_ms); } stamp_publish_output_ = now; From e60c867c73bc7f89220c83a0e228cee8b9abf4de Mon Sep 17 00:00:00 2001 From: Vishal Chauhan <40782713+vish0012@users.noreply.github.com> Date: Thu, 9 Jan 2025 14:42:50 +0900 Subject: [PATCH 61/77] =?UTF-8?q?feat:=20tier4=5Fdebug=5Fmsgs=20changed=20?= =?UTF-8?q?to=20autoware=5Finternal=5Fdebug=5Fmsgs=20in=20fil=E2=80=A6=20(?= =?UTF-8?q?#9875)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files perception/autoware_map_based_prediction Signed-off-by: vish0012 --- .../map_based_prediction/map_based_prediction_node.hpp | 2 +- perception/autoware_map_based_prediction/package.xml | 2 +- .../src/map_based_prediction_node.cpp | 4 ++-- 3 files changed, 4 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 1675f8b1fbfa2..b047cd28114ba 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 @@ -71,8 +71,8 @@ struct hash } // namespace std namespace autoware::map_based_prediction { +using autoware_internal_debug_msgs::msg::StringStamped; using autoware_planning_msgs::msg::TrajectoryPoint; -using tier4_debug_msgs::msg::StringStamped; using TrajectoryPoints = std::vector; class MapBasedPredictionNode : public rclcpp::Node diff --git a/perception/autoware_map_based_prediction/package.xml b/perception/autoware_map_based_prediction/package.xml index 9012590a45b14..58dfcb17c7631 100644 --- a/perception/autoware_map_based_prediction/package.xml +++ b/perception/autoware_map_based_prediction/package.xml @@ -16,6 +16,7 @@ ament_cmake autoware_cmake + autoware_internal_debug_msgs autoware_interpolation autoware_lanelet2_extension autoware_motion_utils @@ -27,7 +28,6 @@ tf2 tf2_geometry_msgs tf2_ros - tier4_debug_msgs unique_identifier_msgs visualization_msgs 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 42dbf5b83fa8c..b65020d6b4708 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 @@ -670,9 +670,9 @@ void MapBasedPredictionNode::objectsCallback(const TrackedObjects::ConstSharedPt if (stop_watch_ptr_) { const auto processing_time_ms = stop_watch_ptr_->toc("processing_time", true); const auto cyclic_time_ms = stop_watch_ptr_->toc("cyclic_time", true); - processing_time_publisher_->publish( + processing_time_publisher_->publish( "debug/cyclic_time_ms", cyclic_time_ms); - processing_time_publisher_->publish( + processing_time_publisher_->publish( "debug/processing_time_ms", processing_time_ms); } } From 8d38d7fbae8e6860c54c7a435530bfda28df6672 Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Thu, 9 Jan 2025 14:46:51 +0900 Subject: [PATCH 62/77] chore(autoware_string_stamped_overlay_rviz_plugin): fix version in package.xml (#9874) Signed-off-by: Fumiya Watanabe --- .../autoware_string_stamped_overlay_rviz_plugin/package.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/package.xml b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/package.xml index c22bc75f55290..faef2f674832e 100644 --- a/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/package.xml +++ b/visualization/autoware_overlay_rviz_plugin/autoware_string_stamped_overlay_rviz_plugin/package.xml @@ -2,7 +2,7 @@ autoware_string_stamped_rviz_plugin - 0.39.0 + 0.40.0 RViz2 plugin for 2D overlays in the 3D view. Mainly a port of the JSK overlay plugin (https://github.com/jsk-ros-pkg/jsk_visualization). From 7d8b2613988bc0289bdbe824e3032ff23ed37d4b Mon Sep 17 00:00:00 2001 From: SakodaShintaro Date: Thu, 9 Jan 2025 15:01:44 +0900 Subject: [PATCH 63/77] chore(autoware_twist2accel): remove an unused dependency (#9881) Removed an unused dependency Signed-off-by: Shintaro Sakoda --- localization/autoware_twist2accel/package.xml | 1 - localization/autoware_twist2accel/src/twist2accel.hpp | 1 - 2 files changed, 2 deletions(-) diff --git a/localization/autoware_twist2accel/package.xml b/localization/autoware_twist2accel/package.xml index 013ef54fe52d1..092b227c2ad40 100644 --- a/localization/autoware_twist2accel/package.xml +++ b/localization/autoware_twist2accel/package.xml @@ -17,7 +17,6 @@ ament_cmake_auto autoware_cmake - autoware_internal_debug_msgs autoware_signal_processing geometry_msgs nav_msgs diff --git a/localization/autoware_twist2accel/src/twist2accel.hpp b/localization/autoware_twist2accel/src/twist2accel.hpp index d142328f9d498..48bc03a326091 100644 --- a/localization/autoware_twist2accel/src/twist2accel.hpp +++ b/localization/autoware_twist2accel/src/twist2accel.hpp @@ -19,7 +19,6 @@ #include -#include #include #include #include From 7f4ed3dcea5f97bb0395a4b828785e0c08ef3bb0 Mon Sep 17 00:00:00 2001 From: Vishal Chauhan <40782713+vish0012@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:02:36 +0900 Subject: [PATCH 64/77] feat: tier4_debug_msgs to autoware_internal_debug_msgs in files localization/autoware_stop_filter (#9867) Signed-off-by: vish0012 Co-authored-by: SakodaShintaro --- localization/autoware_stop_filter/README.md | 8 ++++---- localization/autoware_stop_filter/package.xml | 2 +- localization/autoware_stop_filter/src/stop_filter.cpp | 5 +++-- localization/autoware_stop_filter/src/stop_filter.hpp | 4 ++-- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/localization/autoware_stop_filter/README.md b/localization/autoware_stop_filter/README.md index 9904707a59996..9136f6b6fc8a0 100644 --- a/localization/autoware_stop_filter/README.md +++ b/localization/autoware_stop_filter/README.md @@ -18,10 +18,10 @@ This node aims to: ### Output -| Name | Type | Description | -| ----------------- | ------------------------------------ | -------------------------------------------------------- | -| `output/odom` | `nav_msgs::msg::Odometry` | odometry with suppressed longitudinal and yaw twist | -| `debug/stop_flag` | `tier4_debug_msgs::msg::BoolStamped` | flag to represent whether the vehicle is stopping or not | +| Name | Type | Description | +| ----------------- | ------------------------------------------------ | -------------------------------------------------------- | +| `output/odom` | `nav_msgs::msg::Odometry` | odometry with suppressed longitudinal and yaw twist | +| `debug/stop_flag` | `autoware_internal_debug_msgs::msg::BoolStamped` | flag to represent whether the vehicle is stopping or not | ## Parameters diff --git a/localization/autoware_stop_filter/package.xml b/localization/autoware_stop_filter/package.xml index 1ed5e2c2082be..50ba98484f59d 100644 --- a/localization/autoware_stop_filter/package.xml +++ b/localization/autoware_stop_filter/package.xml @@ -17,12 +17,12 @@ ament_cmake_auto autoware_cmake + autoware_internal_debug_msgs geometry_msgs nav_msgs rclcpp rclcpp_components tf2 - tier4_debug_msgs ament_cmake_ros ament_lint_auto diff --git a/localization/autoware_stop_filter/src/stop_filter.cpp b/localization/autoware_stop_filter/src/stop_filter.cpp index 17eaafdc3002a..b0f1bc8eba053 100644 --- a/localization/autoware_stop_filter/src/stop_filter.cpp +++ b/localization/autoware_stop_filter/src/stop_filter.cpp @@ -34,12 +34,13 @@ StopFilter::StopFilter(const rclcpp::NodeOptions & node_options) "input/odom", 1, std::bind(&StopFilter::callback_odometry, this, std::placeholders::_1)); pub_odom_ = create_publisher("output/odom", 1); - pub_stop_flag_ = create_publisher("debug/stop_flag", 1); + pub_stop_flag_ = + create_publisher("debug/stop_flag", 1); } void StopFilter::callback_odometry(const nav_msgs::msg::Odometry::SharedPtr msg) { - tier4_debug_msgs::msg::BoolStamped stop_flag_msg; + autoware_internal_debug_msgs::msg::BoolStamped stop_flag_msg; stop_flag_msg.stamp = msg->header.stamp; stop_flag_msg.data = false; diff --git a/localization/autoware_stop_filter/src/stop_filter.hpp b/localization/autoware_stop_filter/src/stop_filter.hpp index b6d56b5f77059..71864fab0a580 100644 --- a/localization/autoware_stop_filter/src/stop_filter.hpp +++ b/localization/autoware_stop_filter/src/stop_filter.hpp @@ -17,10 +17,10 @@ #include +#include #include #include #include -#include #include #include @@ -43,7 +43,7 @@ class StopFilter : public rclcpp::Node private: rclcpp::Publisher::SharedPtr pub_odom_; //!< @brief odom publisher - rclcpp::Publisher::SharedPtr + rclcpp::Publisher::SharedPtr pub_stop_flag_; //!< @brief stop flag publisher rclcpp::Subscription::SharedPtr sub_odom_; //!< @brief measurement odometry subscriber From ddb64dbe5e3809636470dad7a33d580a628a4fff Mon Sep 17 00:00:00 2001 From: Vishal Chauhan <40782713+vish0012@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:12:19 +0900 Subject: [PATCH 65/77] feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files localization/autoware_pose2twist (#9866) Signed-off-by: vish0012 --- localization/autoware_pose2twist/README.md | 10 +++++----- localization/autoware_pose2twist/package.xml | 2 +- .../autoware_pose2twist/src/pose2twist_core.cpp | 9 +++++---- .../autoware_pose2twist/src/pose2twist_core.hpp | 6 +++--- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/localization/autoware_pose2twist/README.md b/localization/autoware_pose2twist/README.md index 55ca4667c423d..7f81e0dece5b0 100644 --- a/localization/autoware_pose2twist/README.md +++ b/localization/autoware_pose2twist/README.md @@ -17,11 +17,11 @@ The `twist.angular` is calculated as `relative_rotation_vector / dt` for each fi ### Output -| Name | Type | Description | -| --------- | ------------------------------------- | --------------------------------------------- | -| twist | geometry_msgs::msg::TwistStamped | twist calculated from the input pose history. | -| linear_x | tier4_debug_msgs::msg::Float32Stamped | linear-x field of the output twist. | -| angular_z | tier4_debug_msgs::msg::Float32Stamped | angular-z field of the output twist. | +| Name | Type | Description | +| --------- | ------------------------------------------------- | --------------------------------------------- | +| twist | geometry_msgs::msg::TwistStamped | twist calculated from the input pose history. | +| linear_x | autoware_internal_debug_msgs::msg::Float32Stamped | linear-x field of the output twist. | +| angular_z | autoware_internal_debug_msgs::msg::Float32Stamped | angular-z field of the output twist. | ## Parameters diff --git a/localization/autoware_pose2twist/package.xml b/localization/autoware_pose2twist/package.xml index 3fd16856ef6af..cfde18d430cfd 100644 --- a/localization/autoware_pose2twist/package.xml +++ b/localization/autoware_pose2twist/package.xml @@ -17,11 +17,11 @@ ament_cmake autoware_cmake + autoware_internal_debug_msgs geometry_msgs rclcpp rclcpp_components tf2_geometry_msgs - tier4_debug_msgs ament_lint_auto autoware_lint_common diff --git a/localization/autoware_pose2twist/src/pose2twist_core.cpp b/localization/autoware_pose2twist/src/pose2twist_core.cpp index 4dc7b5fb04209..f071d7c8c66e2 100644 --- a/localization/autoware_pose2twist/src/pose2twist_core.cpp +++ b/localization/autoware_pose2twist/src/pose2twist_core.cpp @@ -29,9 +29,10 @@ Pose2Twist::Pose2Twist(const rclcpp::NodeOptions & options) : rclcpp::Node("pose durable_qos.transient_local(); twist_pub_ = create_publisher("twist", durable_qos); - linear_x_pub_ = create_publisher("linear_x", durable_qos); + linear_x_pub_ = + create_publisher("linear_x", durable_qos); angular_z_pub_ = - create_publisher("angular_z", durable_qos); + create_publisher("angular_z", durable_qos); // Note: this callback publishes topics above pose_sub_ = create_subscription( "pose", queue_size, std::bind(&Pose2Twist::callback_pose, this, _1)); @@ -105,12 +106,12 @@ void Pose2Twist::callback_pose(geometry_msgs::msg::PoseStamped::SharedPtr pose_m twist_msg.header.frame_id = "base_link"; twist_pub_->publish(twist_msg); - tier4_debug_msgs::msg::Float32Stamped linear_x_msg; + autoware_internal_debug_msgs::msg::Float32Stamped linear_x_msg; linear_x_msg.stamp = this->now(); linear_x_msg.data = static_cast(twist_msg.twist.linear.x); linear_x_pub_->publish(linear_x_msg); - tier4_debug_msgs::msg::Float32Stamped angular_z_msg; + autoware_internal_debug_msgs::msg::Float32Stamped angular_z_msg; angular_z_msg.stamp = this->now(); angular_z_msg.data = static_cast(twist_msg.twist.angular.z); angular_z_pub_->publish(angular_z_msg); diff --git a/localization/autoware_pose2twist/src/pose2twist_core.hpp b/localization/autoware_pose2twist/src/pose2twist_core.hpp index ed3e542beb857..22540c9aee473 100644 --- a/localization/autoware_pose2twist/src/pose2twist_core.hpp +++ b/localization/autoware_pose2twist/src/pose2twist_core.hpp @@ -17,9 +17,9 @@ #include +#include #include #include -#include #ifdef ROS_DISTRO_GALACTIC #include @@ -44,8 +44,8 @@ class Pose2Twist : public rclcpp::Node rclcpp::Subscription::SharedPtr pose_sub_; rclcpp::Publisher::SharedPtr twist_pub_; - rclcpp::Publisher::SharedPtr linear_x_pub_; - rclcpp::Publisher::SharedPtr angular_z_pub_; + rclcpp::Publisher::SharedPtr linear_x_pub_; + rclcpp::Publisher::SharedPtr angular_z_pub_; }; } // namespace autoware::pose2twist From 4215995c02c917edf4e5995ea6ec81df66dcc5a3 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 9 Jan 2025 15:22:06 +0900 Subject: [PATCH 66/77] feat(static_centerline_generator)!: remove the package (#9855) feat(static_centerline_generator): remove the package Signed-off-by: Takayuki Murooka --- .../CHANGELOG.rst | 287 ------- .../CMakeLists.txt | 66 -- .../README.md | 83 -- .../config/common.param.yaml | 17 - .../config/nearest_search.param.yaml | 5 - .../static_centerline_generator.param.yaml | 9 - .../config/vehicle_info.param.yaml | 12 - .../launch/run_planning_server.launch.xml | 12 - .../static_centerline_generator.launch.xml | 91 -- .../media/rviz.png | Bin 183524 -> 0 bytes .../media/unsafe_footprints.png | Bin 229195 -> 0 bytes .../msg/PointsWithLaneId.msg | 2 - .../package.xml | 57 -- .../rviz/static_centerline_generator.rviz | 459 ----------- .../scripts/app.py | 178 ---- .../scripts/centerline_updater_helper.py | 207 ----- .../scripts/show_lanelet2_map_diff.py | 139 ---- .../bag_ego_trajectory_based_centerline.sh | 5 - ...ptimization_trajectory_based_centerline.sh | 3 - .../bag_ego_trajectory_based_centerline.cpp | 86 -- .../bag_ego_trajectory_based_centerline.hpp | 27 - ...timization_trajectory_based_centerline.cpp | 187 ----- ...timization_trajectory_based_centerline.hpp | 43 - .../src/main.cpp | 59 -- .../src/static_centerline_generator_node.cpp | 774 ------------------ .../src/static_centerline_generator_node.hpp | 187 ----- .../src/type_alias.hpp | 47 -- .../src/utils.cpp | 263 ------ .../src/utils.hpp | 67 -- .../srv/LoadMap.srv | 3 - .../srv/PlanPath.srv | 6 - .../srv/PlanRoute.srv | 5 - .../bag_ego_trajectory_turn-left-right.db3 | Bin 2740224 -> 0 bytes .../data/bag_ego_trajectory_turn-right.db3 | Bin 2654208 -> 0 bytes .../test/data/lanelet2_map.osm | 146 ---- .../test_static_centerline_generator.test.py | 112 --- 36 files changed, 3644 deletions(-) delete mode 100644 planning/autoware_static_centerline_generator/CHANGELOG.rst delete mode 100644 planning/autoware_static_centerline_generator/CMakeLists.txt delete mode 100644 planning/autoware_static_centerline_generator/README.md delete mode 100644 planning/autoware_static_centerline_generator/config/common.param.yaml delete mode 100644 planning/autoware_static_centerline_generator/config/nearest_search.param.yaml delete mode 100644 planning/autoware_static_centerline_generator/config/static_centerline_generator.param.yaml delete mode 100644 planning/autoware_static_centerline_generator/config/vehicle_info.param.yaml delete mode 100644 planning/autoware_static_centerline_generator/launch/run_planning_server.launch.xml delete mode 100644 planning/autoware_static_centerline_generator/launch/static_centerline_generator.launch.xml delete mode 100644 planning/autoware_static_centerline_generator/media/rviz.png delete mode 100644 planning/autoware_static_centerline_generator/media/unsafe_footprints.png delete mode 100644 planning/autoware_static_centerline_generator/msg/PointsWithLaneId.msg delete mode 100644 planning/autoware_static_centerline_generator/package.xml delete mode 100644 planning/autoware_static_centerline_generator/rviz/static_centerline_generator.rviz delete mode 100755 planning/autoware_static_centerline_generator/scripts/app.py delete mode 100755 planning/autoware_static_centerline_generator/scripts/centerline_updater_helper.py delete mode 100755 planning/autoware_static_centerline_generator/scripts/show_lanelet2_map_diff.py delete mode 100755 planning/autoware_static_centerline_generator/scripts/tmp/bag_ego_trajectory_based_centerline.sh delete mode 100755 planning/autoware_static_centerline_generator/scripts/tmp/optimization_trajectory_based_centerline.sh delete mode 100644 planning/autoware_static_centerline_generator/src/centerline_source/bag_ego_trajectory_based_centerline.cpp delete mode 100644 planning/autoware_static_centerline_generator/src/centerline_source/bag_ego_trajectory_based_centerline.hpp delete mode 100644 planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.cpp delete mode 100644 planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.hpp delete mode 100644 planning/autoware_static_centerline_generator/src/main.cpp delete mode 100644 planning/autoware_static_centerline_generator/src/static_centerline_generator_node.cpp delete mode 100644 planning/autoware_static_centerline_generator/src/static_centerline_generator_node.hpp delete mode 100644 planning/autoware_static_centerline_generator/src/type_alias.hpp delete mode 100644 planning/autoware_static_centerline_generator/src/utils.cpp delete mode 100644 planning/autoware_static_centerline_generator/src/utils.hpp delete mode 100644 planning/autoware_static_centerline_generator/srv/LoadMap.srv delete mode 100644 planning/autoware_static_centerline_generator/srv/PlanPath.srv delete mode 100644 planning/autoware_static_centerline_generator/srv/PlanRoute.srv delete mode 100644 planning/autoware_static_centerline_generator/test/data/bag_ego_trajectory_turn-left-right.db3 delete mode 100644 planning/autoware_static_centerline_generator/test/data/bag_ego_trajectory_turn-right.db3 delete mode 100644 planning/autoware_static_centerline_generator/test/data/lanelet2_map.osm delete mode 100644 planning/autoware_static_centerline_generator/test/test_static_centerline_generator.test.py diff --git a/planning/autoware_static_centerline_generator/CHANGELOG.rst b/planning/autoware_static_centerline_generator/CHANGELOG.rst deleted file mode 100644 index 0338cdc8b66bb..0000000000000 --- a/planning/autoware_static_centerline_generator/CHANGELOG.rst +++ /dev/null @@ -1,287 +0,0 @@ -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Changelog for package autoware_static_centerline_generator -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -0.40.0 (2024-12-12) -------------------- -* Merge branch 'main' into release-0.40.0 -* Revert "chore(package.xml): bump version to 0.39.0 (`#9587 `_)" - This reverts commit c9f0f2688c57b0f657f5c1f28f036a970682e7f5. -* fix(static_centerline_generator): several bug fixes (`#9426 `_) - * fix: dependent packages - * feat: use steer angle, use warn for steer angle failure, calc curvature dicontinuously - * fix cppcheck - --------- -* fix: fix ticket links in CHANGELOG.rst (`#9588 `_) -* chore(package.xml): bump version to 0.39.0 (`#9587 `_) - * chore(package.xml): bump version to 0.39.0 - * fix: fix ticket links in CHANGELOG.rst - * fix: remove unnecessary diff - --------- - Co-authored-by: Yutaka Kondo -* fix: fix ticket links in CHANGELOG.rst (`#9588 `_) -* fix(cpplint): include what you use - planning (`#9570 `_) -* refactor(global_parameter_loader): prefix package and namespace with autoware (`#9303 `_) -* feat!: replace tier4_map_msgs with autoware_map_msgs for MapProjectorInfo (`#9392 `_) -* refactor(map_loader)!: prefix package and namespace with autoware (`#8927 `_) - * make lanelet2_map_visualization independent - * remove unused files - * remove unused package - * fix package name - * add autoware\_ prefix - * add autoware to exec name - * add autoware prefix - * removed unnecessary dependency - --------- -* 0.39.0 -* update changelog -* fix: fix ticket links to point to https://github.com/autowarefoundation/autoware.universe (`#9304 `_) -* fix(static_centerline_generator): map_tf_generator package name needs update (`#9383 `_) - fix map_tf_generator name in autoware_static_centerline_generator.launch -* refactor(map_loader)!: prefix package and namespace with autoware (`#8927 `_) - * make lanelet2_map_visualization independent - * remove unused files - * remove unused package - * fix package name - * add autoware\_ prefix - * add autoware to exec name - * add autoware prefix - * removed unnecessary dependency - --------- -* fix: fix ticket links to point to https://github.com/autowarefoundation/autoware.universe (`#9304 `_) -* chore(package.xml): bump version to 0.38.0 (`#9266 `_) (`#9284 `_) - * unify package.xml version to 0.37.0 - * remove system_monitor/CHANGELOG.rst - * add changelog - * 0.38.0 - --------- -* Contributors: Esteve Fernandez, Fumiya Watanabe, M. Fatih Cırıt, Masaki Baba, Ryohsuke Mitsudome, Takayuki Murooka, Yutaka Kondo, Zhanhong Yan - -0.39.0 (2024-11-25) -------------------- -* fix: fix ticket links to point to https://github.com/autowarefoundation/autoware.universe (`#9304 `_) -* fix: fix ticket links to point to https://github.com/autowarefoundation/autoware.universe (`#9304 `_) -* chore(package.xml): bump version to 0.38.0 (`#9266 `_) (`#9284 `_) - * unify package.xml version to 0.37.0 - * remove system_monitor/CHANGELOG.rst - * add changelog - * 0.38.0 - --------- -* Contributors: Esteve Fernandez, Yutaka Kondo - -0.38.0 (2024-11-08) -------------------- -* unify package.xml version to 0.37.0 -* refactor(osqp_interface): added autoware prefix to osqp_interface (`#8958 `_) -* refactor(autoware_interpolation): prefix package and namespace with autoware (`#8088 `_) - Co-authored-by: kosuke55 -* fix(other_planning_packages): align the parameters with launcher (`#8793 `_) - * parameters in planning/others aligned - * update json - --------- -* refactor(map_projection_loader)!: prefix package and namespace with autoware (`#8420 `_) - * add autoware\_ prefix - * add autoware\_ prefix - --------- - Co-authored-by: SakodaShintaro -* fix(autoware_static_centerline_generator): fix unusedFunction (`#8647 `_) - * fix:unusedFunction - * fix:unusedFunction - * fix:compile error - --------- -* refactor(geography_utils): prefix package and namespace with autoware (`#7790 `_) - * refactor(geography_utils): prefix package and namespace with autoware - * move headers to include/autoware/ - --------- -* fix(autoware_static_centerline_generator): fix funcArgNamesDifferent (`#8019 `_) - fix:funcArgNamesDifferent -* fix(static_centerline_generator): save_map only once (`#7770 `_) -* refactor(static_centerline_optimizer): clean up the code (`#7756 `_) -* feat: add `autoware\_` prefix to `lanelet2_extension` (`#7640 `_) -* feat(static_centerline_generator): organize AUTO/GUI/VMB modes (`#7432 `_) -* refactor(universe_utils/motion_utils)!: add autoware namespace (`#7594 `_) -* refactor(motion_utils)!: add autoware prefix and include dir (`#7539 `_) - refactor(motion_utils): add autoware prefix and include dir -* feat(autoware_universe_utils)!: rename from tier4_autoware_utils (`#7538 `_) - Co-authored-by: kosuke55 -* refactor(route_handler)!: rename to include/autoware/{package_name} (`#7530 `_) - refactor(route_handler)!: rename to include/autoware/{package_name} -* feat(map_loader): add waypoints flag (`#7480 `_) - * feat(map_loader): handle centelrine and waypoints - * update README - * fix doc - * update schema - * fix - * fix - --------- -* feat(path_optimizer): rename to include/autoware/{package_name} (`#7529 `_) -* feat(path_smoother): rename to include/autoware/{package_name} (`#7527 `_) - * feat(path_smoother): rename to include/autoware/{package_name} - * fix - --------- -* refactor(behaivor_path_planner)!: rename to include/autoware/{package_name} (`#7522 `_) - * refactor(behavior_path_planner)!: make autoware dir in include - * refactor(start_planner): make autoware include dir - * refactor(goal_planner): make autoware include dir - * sampling planner module - * fix sampling planner build - * dynamic_avoidance - * lc - * side shift - * autoware_behavior_path_static_obstacle_avoidance_module - * autoware_behavior_path_planner_common - * make behavior_path dir - * pre-commit - * fix pre-commit - * fix build - --------- -* feat(mission_planner): rename to include/autoware/{package_name} (`#7513 `_) - * feat(mission_planner): rename to include/autoware/{package_name} - * feat(mission_planner): rename to include/autoware/{package_name} - * feat(mission_planner): rename to include/autoware/{package_name} - --------- -* fix(static_centerline_generator): fix dependency (`#7442 `_) - * fix: deps - * fix: package name - * fix: package name - --------- -* refactor(route_handler): route handler add autoware prefix (`#7341 `_) - * rename route handler package - * update packages dependencies - * update include guards - * update includes - * put in autoware namespace - * fix formats - * keep header and source file name as before - --------- -* refactor(mission_planner)!: add autoware prefix and namespace (`#7414 `_) - * refactor(mission_planner)!: add autoware prefix and namespace - * fix svg - --------- -* refactor(vehicle_info_utils)!: prefix package and namespace with autoware (`#7353 `_) - * chore(autoware_vehicle_info_utils): rename header - * chore(bpp-common): vehicle info - * chore(path_optimizer): vehicle info - * chore(velocity_smoother): vehicle info - * chore(bvp-common): vehicle info - * chore(static_centerline_generator): vehicle info - * chore(obstacle_cruise_planner): vehicle info - * chore(obstacle_velocity_limiter): vehicle info - * chore(mission_planner): vehicle info - * chore(obstacle_stop_planner): vehicle info - * chore(planning_validator): vehicle info - * chore(surround_obstacle_checker): vehicle info - * chore(goal_planner): vehicle info - * chore(start_planner): vehicle info - * chore(control_performance_analysis): vehicle info - * chore(lane_departure_checker): vehicle info - * chore(predicted_path_checker): vehicle info - * chore(vehicle_cmd_gate): vehicle info - * chore(obstacle_collision_checker): vehicle info - * chore(operation_mode_transition_manager): vehicle info - * chore(mpc): vehicle info - * chore(control): vehicle info - * chore(common): vehicle info - * chore(perception): vehicle info - * chore(evaluator): vehicle info - * chore(freespace): vehicle info - * chore(planning): vehicle info - * chore(vehicle): vehicle info - * chore(simulator): vehicle info - * chore(launch): vehicle info - * chore(system): vehicle info - * chore(sensing): vehicle info - * fix(autoware_joy_controller): remove unused deps - --------- -* refactor(path_smoother)!: prefix package and namespace with autoware (`#7381 `_) - * git mv - * fix - * fix launch - * rever a part of prefix - * fix test - * fix - * fix static_centerline_optimizer - * fix - --------- -* refactor(path_optimizer, velocity_smoother)!: prefix package and namespace with autoware (`#7354 `_) - * chore(autoware_velocity_smoother): update namespace - * chore(autoware_path_optimizer): update namespace - --------- -* chore(bpp): add prefix `autoware\_` (`#7288 `_) - * chore(common): rename package - * fix(static_obstacle_avoidance): fix header - * fix(dynamic_obstacle_avoidance): fix header - * fix(side_shift): fix header - * fix(sampling_planner): fix header - * fix(start_planner): fix header - * fix(goal_planner): fix header - * fix(lane_change): fix header - * fix(external_lane_change): fix header - * fix(AbLC): fix header - * fix(bpp-node): fix header - * fix(static_centerline_generator): fix header - * fix(.pages): update link - --------- -* feat!: replace autoware_auto_msgs with autoware_msgs for planning modules (`#7246 `_) - Co-authored-by: Cynthia Liu - Co-authored-by: NorahXiong - Co-authored-by: beginningfan -* chore(autoware_velocity_smoother, autoware_path_optimizer): rename packages (`#7202 `_) - * chore(autoware_path_optimizer): rename package and namespace - * chore(autoware_static_centerline_generator): rename package and namespace - * chore: update module name - * chore(autoware_velocity_smoother): rename package and namespace - * chore(tier4_planning_launch): update module name - * chore: update module name - * fix: test - * fix: test - * fix: test - --------- -* refactor(behavior_velocity_planner)!: prefix package and namespace with autoware\_ (`#6693 `_) -* fix(autoware_static_centerline_generator): update the centerline correctly with map projector (`#6825 `_) - * fix(static_centerline_generator): fixed the bug of offset lat/lon values - * fix typo - --------- -* fix(autoware_static_centerline_generator): remove prefix from topics and node names (`#7028 `_) -* build(static_centerline_generator): prefix package and namespace with autoware\_ (`#6817 `_) - * build(static_centerline_generator): prefix package and namespace with autoware\_ - * style(pre-commit): autofix - * build: fix CMake target - * build(autoware_static_centerline_generator): more renames - * style(pre-commit): autofix - * build(autoware_static_centerline_generator): fix namespace - * fix(autoware_static_centerline_generator): fix clang-tidy issues - * style(pre-commit): autofix - * style(pre-commit): autofix - * fix(autoware_static_centerline_generator): fix clang-tidy issues - * fix(autoware_static_centerline_generator): fix build issues - * fix(autoware_static_centerline_generator): fix build issues - * style(pre-commit): autofix - * fix(autoware_static_centerline_optimizer): fix clang-tidy issues - * style(pre-commit): autofix - * build: fix build errors - * fix: remove else statements after return - * fix(autoware_static_centerline_generator): fix clang-tidy issues - * style(pre-commit): autofix - * revert changes for static_centerline_generator - * fix(autoware_static_centerline_generator): add autoware\_ prefix - * style(pre-commit): autofix - * fix(autoware_static_centerline_generator): fix filenames - * fix(autoware_static_centerline_generator): fix namespaces - * style(pre-commit): autofix - * fix: added prefix to missing strings - * refactor(autoware_static_centerline_generator): move header files to src - * refactor(autoware_static_centerline_generator): fix include paths - * style(pre-commit): autofix - * refactor(autoware_static_centerline_generator): rename base folder - * Update planning/autoware_static_centerline_generator/launch/static_centerline_generator.launch.xml - Co-authored-by: M. Fatih Cırıt - * build(autoware_static_centerline_generator): fix include in CMake - * build(autoware_static_centerline_generator): fix missing includes - --------- - Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> - Co-authored-by: M. Fatih Cırıt -* Contributors: Esteve Fernandez, Kosuke Takeuchi, Masaki Baba, Ryohsuke Mitsudome, Satoshi OTA, Takayuki Murooka, Yutaka Kondo, Zhe Shen, kobayu858, mkquda - -0.26.0 (2024-04-03) -------------------- diff --git a/planning/autoware_static_centerline_generator/CMakeLists.txt b/planning/autoware_static_centerline_generator/CMakeLists.txt deleted file mode 100644 index 261e8beb0022f..0000000000000 --- a/planning/autoware_static_centerline_generator/CMakeLists.txt +++ /dev/null @@ -1,66 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(autoware_static_centerline_generator) - -find_package(autoware_cmake REQUIRED) - -find_package(builtin_interfaces REQUIRED) -find_package(geometry_msgs REQUIRED) -find_package(rosidl_default_generators REQUIRED) -find_package(std_msgs REQUIRED) - -rosidl_generate_interfaces( - autoware_static_centerline_generator - "srv/LoadMap.srv" - "srv/PlanRoute.srv" - "srv/PlanPath.srv" - "msg/PointsWithLaneId.msg" - DEPENDENCIES builtin_interfaces geometry_msgs -) - -autoware_package() - -ament_auto_add_executable(main - src/main.cpp - src/static_centerline_generator_node.cpp - src/centerline_source/optimization_trajectory_based_centerline.cpp - src/centerline_source/bag_ego_trajectory_based_centerline.cpp - src/utils.cpp -) - -if(${rosidl_cmake_VERSION} VERSION_LESS 2.5.0) - rosidl_target_interfaces(main - autoware_static_centerline_generator "rosidl_typesupport_cpp") -else() - rosidl_get_typesupport_target( - cpp_typesupport_target autoware_static_centerline_generator "rosidl_typesupport_cpp") - target_link_libraries(main "${cpp_typesupport_target}") -endif() - -ament_auto_package( - INSTALL_TO_SHARE - launch - config - rviz -) - -target_include_directories(main PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/src -) - -if(BUILD_TESTING) - add_launch_test( - test/test_static_centerline_generator.test.py - TIMEOUT "30" - ) - install(DIRECTORY - test/data/ - DESTINATION share/${PROJECT_NAME}/test/data/ - ) -endif() - -install(PROGRAMS - scripts/app.py - scripts/centerline_updater_helper.py - scripts/show_lanelet2_map_diff.py - DESTINATION lib/${PROJECT_NAME} -) diff --git a/planning/autoware_static_centerline_generator/README.md b/planning/autoware_static_centerline_generator/README.md deleted file mode 100644 index 426d5487cf0cb..0000000000000 --- a/planning/autoware_static_centerline_generator/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# Static Centerline Generator - -## Purpose - -This package statically calculates the centerline satisfying path footprints inside the drivable area. - -On narrow-road driving, the default centerline, which is the middle line between lanelets' right and left boundaries, often causes path footprints outside the drivable area. -To make path footprints inside the drivable area, we use online path shape optimization by [the autoware_path_optimizer package](https://github.com/autowarefoundation/autoware.universe/tree/main/planning/autoware_path_optimizer/). - -Instead of online path shape optimization, we introduce static centerline optimization. -With this static centerline optimization, we have following advantages. - -- We can see the optimized centerline shape in advance. - - With the default autoware, path shape is not determined until the vehicle drives there. - - This enables offline path shape evaluation. -- We do not have to calculate a heavy and sometimes unstable path optimization since the path footprints are already inside the drivable area. - -## Use cases - -There are two interfaces to communicate with the centerline optimizer. - -### Vector Map Builder Interface - -Note: This function of Vector Map Builder has not been released. Please wait for a while. -Currently there is no documentation about Vector Map Builder's operation for this function. - -The optimized centerline can be generated from Vector Map Builder's operation. - -We can run - -- path planning server -- http server to connect path planning server and Vector Map Builder - -with the following command by designating `` - -```sh -ros2 launch autoware_static_centerline_generator run_planning_server.launch.xml vehicle_model:= -``` - -FYI, port ID of the http server is 4010 by default. - -### Command Line Interface - -The optimized centerline can be generated from the command line interface by designating - -- `` -- `` (not mandatory) -- `` -- `` -- `` - -```sh -ros2 launch autoware_static_centerline_generator static_centerline_generator.launch.xml run_backgrond:=false lanelet2_input_file_path:= lanelet2_output_file_path:= start_lanelet_id:= end_lanelet_id:= vehicle_model:= -``` - -The default output map path containing the optimized centerline locates `/tmp/lanelet2_map.osm`. -If you want to change the output map path, you can remap the path by designating ``. - -## Visualization - -When launching the path planning server, rviz is launched as well as follows. -![rviz](./media/rviz.png) - -- The yellow footprints are the original ones from the osm map file. - - FYI: Footprints are generated based on the centerline and vehicle size. -- The red footprints are the optimized ones. -- The gray area is the drivable area. -- You can see that the red footprints are inside the drivable area although the yellow ones are outside. - -### Unsafe footprints - -Sometimes the optimized centerline footprints are close to the lanes' boundaries. -We can check how close they are with `unsafe footprints` marker as follows. - -Footprints' color depends on its distance to the boundaries, and text expresses its distance. - -![rviz](./media/unsafe_footprints.png) - -By default, footprints' color is - -- when the distance is less than 0.1 [m] : red -- when the distance is less than 0.2 [m] : green -- when the distance is less than 0.3 [m] : blue diff --git a/planning/autoware_static_centerline_generator/config/common.param.yaml b/planning/autoware_static_centerline_generator/config/common.param.yaml deleted file mode 100644 index 6c547c8cd83dc..0000000000000 --- a/planning/autoware_static_centerline_generator/config/common.param.yaml +++ /dev/null @@ -1,17 +0,0 @@ -/**: - ros__parameters: - # constraints param for normal driving - max_vel: 11.1 # max velocity limit [m/s] - - normal: - min_acc: -1.0 # min deceleration [m/ss] - max_acc: 1.0 # max acceleration [m/ss] - min_jerk: -1.0 # min jerk [m/sss] - max_jerk: 1.0 # max jerk [m/sss] - - # constraints to be observed - limit: - min_acc: -2.5 # min deceleration limit [m/ss] - max_acc: 1.0 # max acceleration limit [m/ss] - min_jerk: -1.5 # min jerk limit [m/sss] - max_jerk: 1.5 # max jerk limit [m/sss] diff --git a/planning/autoware_static_centerline_generator/config/nearest_search.param.yaml b/planning/autoware_static_centerline_generator/config/nearest_search.param.yaml deleted file mode 100644 index eb6709764ce3e..0000000000000 --- a/planning/autoware_static_centerline_generator/config/nearest_search.param.yaml +++ /dev/null @@ -1,5 +0,0 @@ -/**: - ros__parameters: - # ego - ego_nearest_dist_threshold: 3.0 # [m] - ego_nearest_yaw_threshold: 1.046 # [rad] = 60 [deg] diff --git a/planning/autoware_static_centerline_generator/config/static_centerline_generator.param.yaml b/planning/autoware_static_centerline_generator/config/static_centerline_generator.param.yaml deleted file mode 100644 index 060590803428a..0000000000000 --- a/planning/autoware_static_centerline_generator/config/static_centerline_generator.param.yaml +++ /dev/null @@ -1,9 +0,0 @@ -/**: - ros__parameters: - marker_color: ["FF0000", "FF5A00", "FFFF00"] - marker_color_dist_thresh : [0.1, 0.2, 0.3] - output_trajectory_interval: 1.0 - - validation: - dist_threshold_to_road_border: 0.0 - max_steer_angle_margin: 0.0 # [rad] NOTE: Positive value makes max steer angle threshold to decrease. diff --git a/planning/autoware_static_centerline_generator/config/vehicle_info.param.yaml b/planning/autoware_static_centerline_generator/config/vehicle_info.param.yaml deleted file mode 100644 index 8941b92b4e78e..0000000000000 --- a/planning/autoware_static_centerline_generator/config/vehicle_info.param.yaml +++ /dev/null @@ -1,12 +0,0 @@ -/**: - ros__parameters: - wheel_radius: 0.39 - wheel_width: 0.42 - wheel_base: 2.74 # between front wheel center and rear wheel center - wheel_tread: 1.63 # between left wheel center and right wheel center - front_overhang: 1.0 # between front wheel center and vehicle front - rear_overhang: 1.03 # between rear wheel center and vehicle rear - left_overhang: 0.1 # between left wheel center and vehicle left - right_overhang: 0.1 # between right wheel center and vehicle right - vehicle_height: 2.5 - max_steer_angle: 0.70 # [rad] diff --git a/planning/autoware_static_centerline_generator/launch/run_planning_server.launch.xml b/planning/autoware_static_centerline_generator/launch/run_planning_server.launch.xml deleted file mode 100644 index cb368ca336316..0000000000000 --- a/planning/autoware_static_centerline_generator/launch/run_planning_server.launch.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - 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 deleted file mode 100644 index 0590009ab378c..0000000000000 --- a/planning/autoware_static_centerline_generator/launch/static_centerline_generator.launch.xml +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/planning/autoware_static_centerline_generator/media/rviz.png b/planning/autoware_static_centerline_generator/media/rviz.png deleted file mode 100644 index e76ede78294f02c154a02ccbc133491531cb886c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183524 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�(<&aFy2=?v>ZFd-9-jg34A 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∈ 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%0Dj>~* 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 R(BG{zDj-b-nB2SI{{j0*mc;-7 diff --git a/planning/autoware_static_centerline_generator/media/unsafe_footprints.png b/planning/autoware_static_centerline_generator/media/unsafe_footprints.png deleted file mode 100644 index b4404f4cfa89bc7ce9efc9adfac4fbc2f6b35d14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229195 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

nxLmzzFaB_ zEBTakglA7C-y zIKKwk^jC4mBqZduT@WBAVmAvD&!*dP04-6dme|ri|N8?6m7^ayjC;aHgn=yyT3U^> zN8c&|7=^wn#*i#Z$w#_lSMPDeG~)rT?M*G--(T{w1C%Gv&Is@Ok;lzq4R360h=_;) zye3Mw1jk3M`1Op8SB{RzKST59D@&c7S=rf+)5oXqSsKR!$CBG0;lWzG$lOurMhg z!04&!KVN(+^bTm3*eec>aUfkTz#|pqT-DSfJgo*Wbsq?x60ctcL0@X}>a9YX3};OWA&afPPr}Pp5y(_EQevJ`}+b%T+2=p;x8P zlTQ&-R4G)^DI6D8qg`Nrv@z1V8K!k!GB`li%p2@J%eHR+17aR-x#`kE32NEo*}QzN zB`5bx_elF!NUhR4a(g*Zdzv9Cy|y$bgkjg0xsd(UoDh0v|Wp4@`m|=4J->)U{X+id)Zcml|abf#ay8rl&)RC`=?l zWX&}oK99xa3S7(F^M|={xm@HSL9s;A)}ksv3+VH!;z_h{opb;GJ@A3xUGZWXIUVk+dU|OI4}$Ic zK06mTF{BJWdm70v_V=`!oOZXHu?p#{*(N;CFKV3)ST}vsk(=OxJ+~l zK`%Z&PREs=Bx%J;rj4gnt?Zl{YgX^!7zK$jGx^CiI0W!~qR8sthF1`?e+l}^sF6vA zlIpfDzHh6N$N~^(sE&YN0X%Z@0sAvMJDac12JFEs`o}0}Wmmn7of8=7=nEBw@3AHy zfOt`!J?kqkb0D}^s&rV>rJ1X8=yd30bM_;w*lVV_y$umT+Q2iMUB+hJ=;V1*Vu}yH z3`>QZijBM;F;fc*dJ#~r>uxk*x@YG~LASFH0dvdTU2Zo#!X~m{bF$c5I4dR4}PrrQ9qh<#!B?N`>jq`7rKr zU=i}E(=(8wKSNLGqqfd`c|-nfU}vg8F}LMjRJG4*8gixhLM>=@lYfD@tSj>TH7eJ> zrwT-Uda7B4*Nw~W6?s;_TrhsbK&v~q;zyO{h?^N*^9M1z6Kpv-+Eb)Ks>zK+{qosa zrmH&>0y?R(1aajlQ|u2xk0^lk+uYoh&R0IJq2+3gUuE#9Z?4F)`5c*08>MLBivRFm z!&5f!VC&fNZ9W+$6GRJ);i;x(dsn#YTHK4)I8hL1yBqJ!pw%+XP<>pWnWi?^nDC+e z$#7Ez66`yBjyPHR`A~^iN=uJU3@X-piT09vpNB9}r#R1Tb4S*?Ti!B}^=mL9zgCX% z!tjGaYkaBp6<3MHP0trnkitX2rwT2DzhKdy5*K|Wn^KnUPI23TYb_dUU}QB?OLG6? zpWOlS!$|nPYza6eN`ofA)+_%U3aV3&20_LzZ;LHd#D47%&-%hZk$bN`z zEPJ<4mCX6mBoF=XmV(aTnmo@KbJ(o88>1O<2fM$I?A2eaIMpa|?!+S%C!At6<}Y`7 zpU0eZ@~Q6$zl*MvxAE*3U?z{)B22@7K_8`HM;&kNKPdD z+S@JUcUO*BcXu18h}DMP#^5m#D6k$cohpCGxVP}&8rLkN>g9OzK+R## zf}VeHB`}tI%423TZpE*?Kjg|-s*RugW6j^DwQ{9Q&(F_0j^^mtY%ecItv8*22dkG0 z#V8wflIrj_A(rC4pa{0X^;b`>HGRAsHm$`js?;7g9Y94YO^meOrQ0CCKxc2~;$R7q2=Y6AT)h{F2ixc$rx_V7mP->p3oYC#^rW0Ft}V5e>p^nG4u{SJw-jAte856j?US5BGdb?lJKd&4pEi>H~3 zh_&83rXP>6M-JH)#7{Gc(8VRn$Cj0fE58RuA^1lNFzxG=Zov|YrAp`O$~=wtqP(VT zi`{J|gNy4v7NMKV?Z9Sxlm1l7*+u3$jlMVGA@rNR?=P}q?C0TwoN^~6v6tcD7G9%u zbM1>{s=EsX&nd{G^&Y0)UX{nmXDcUat!lK+o_`jib{CcheJ?L5DWQ}!3hS#%F*X*# zq?D|xs-pkW@lOW}YV;-+V(U0ksJbd{hVYkk>0kf(1__oTglqb~hR0kiw`?rlb+FD1L~A83E)KZa04UFD%zG#1&jBxxe-0 z%a?#B7;1$|rlUEMd3kxCp!zLt_Urv|f}W=wpGLcehbu5c2XINR*7R~1MRk8w9GA!@ zknP6)5FiF2%13jhg@NND5Wt9qg~iKNS5>7{JdrCE_uo7I;w=MCh@YPy5W~9*8IP2g z0s8^rn3Gde^}{>R)*Q>-{PR2TM=QjLO9wXz$&pXJD2P@iS2}?@%VE7A_g^jAv`_V5dcXhEW~ zvQkXss@kOu!LkH}-d zm>UUrJ`%?m=rXoCc0i7oe~RCkvQVU-kkgSADujaRI^rdt``4fz*RtT*W*1Qo;QOMrS0UPKp}kIA3|ZbZ`mZ ze5bU~RwHv6)^a#>x{7ft-R}NtW5Kl4+f1*|`^|rB9q7Oi%Ip^r6yz34IyCRD*xym% z`G6nMPeguHR z*&WY#y||`y?dPbZQtj&7vHC^HpYH6W&6Zx^edJIsYAqT^L>#?(4P84*nZ|#*>USpP za<2vg@zrDBvM&X)Hj8790CDYbbN@5_=kq?)Jd|v~K@ktd!z`_nI!~YBn_YR-UYufD z^6cabbK7chnp-8%(~UfPEcRlyC;iM;vw9HYt|&QNv%&@0M1`#dP6N+3s*Tan7##`d zK4G_Hga0^O6n1=pngv`o@^|q&Q*gQGWMX2H#D}Np0m*rYXY5tk49r`iZK_`IbWaY%L^Sh~6R;v`pelv5Km<`wT z=G=!c$K350b`Ti*UzqbN(>gDLEITieWNj%#lnY1H?SB&qq9@L^}1&tg1O>$vj2i9@fze+I z*LjMV8%`yrDa+@ZwFbsO?(CK4T{^xrncd-b%Cz=+BZH@JI3c8xqS&-O^&LmA6gfyg0Hsj`~X_Mea?I=GV*sIpV}aU!>!y#*&rdDTV^xb|i?CS7CdbRfxKI^PSgd#;V-wMyBx zVR9w`c4RX1O1yS`T3=~uP>^V|mbEq~lgN0DsbjuLJ**m!l&qrSH5L|ot!tsy#QD0* zc9zXHtekyPqW*gQxZ~E8K(Sgp?uF$_B9hWnU2tbTDbgId=;)sURe@356 zmhK$lLz-;0rcrPDzI^olL_yNnvwy8Dtp{(IA2oTnIJ@1_kGW%K1CLc;o0EN|imT;v zaDD?p3OKJcHbA4exc=_2iC zw?6v)C4&DLKG2UVie^l%^6hH9(h$5%mT2ymo(`94l&vZ5tCCxxYg)KW4!=e-^diel zS6yHi+g@IIyMz=#>!LcQtDCk%V@Pm&B`3G_ea`N^Lsm_i_+i91$@b%JNfeu6g*wJ*V4akl;KsHC&=qvmdtQ>5)r|0ao?q!>fS%AL z9KV`rvrMqKBgxaaKnBnIYzx&v2~rnn2C4C|5A;mLu=;;?UC z3i@1`Yq5BK4$=tjKOt8ARaGLtyB)03QKmJ9Ma+HaT!j^6b#;5Rc@w2<=3VN|bfVAN`6O!d6a*{}47%_C#ozN?e=i+ex0Z7GkAGJiDA{O-lNYa0IadNV5iSIAZ zRS-yD)a0yBoX7Duup$d!$N)7x#?tP5=VsDy32-Sum?3S42k4aqaGB7>1n#$yf9>qs z&u{-LX8MS{nK$G06SLNOniJ+7^8f63(1P-R_h;|l7Xt=QK`>sl^hXE4}t_X}$EY~A%niYD@Nwome&RWcEl*V*V{ z(8CAfDh&@j+>gr?OD}C%5gezzeR^CW4H60R55b>sM8z<_ninu0E&Vb}_4Uzd+kFGc z<%B=aLfkgnRHh^JuY3d=tetA>ljr|n%R)xqs&rKIcj=)M!2`i750~@aRVre_UaXrL z2~%jgOl|W)tN5dUrEVN4b{Ir^JE-yH_6culS-IR)Xo1NLSH2vfZqxCiJd6J;$6I{k zGvwV8Fw7YRrrh`W*w{uF7w>d?MD9FR>dU#jbsL>>5yBT-_=C#-U;Jb;z5k1!oQE9N z6?R}8XhH5xETV6X_tblzWh&#zB8(VXw0H-V`v{DSW~yzZDTVdMrsfxvN>vI=88~l@ zPENX<=5uTd1=-883@7^V^Z=R;G5S6Nscym3dCM6*@2S!I1>f9tGO3iC+lRI`IC#%aS zInPu6fzsZF85&+YQ?9JM+3&EfF6`jYLz#7V%S!#spYbW%CL?`68-0J34B_lM9z9yE zfBcV(rzYI@ll4r8ZMo4ef0p{1BT}<*;)I>k)q6^0V8l6TmnZd>kJ}*LQv)IE;~aK! zf$@t%wtSzK7oDXZB9d08@+H4J`Me)Wz^eT1lDo7gqKM0545VK})FQw7d3QoXOGM+) zjeTuw)%$5L_9qeIk=viv?TyPK>BmTd(Bo3jj3aIv_qA?rRb|;@DflonA*Q0ZQHf1X zyipG=Bh!4Km$R0!BkH&3W&_`c;Ff903St8}>!FP3G=_*S(nWon%dtGF1+_wX07Hty z2?}x~hv~~l7@wBToae}ttLiu867LR_Xv{}Bo}2CH83OU+pCbh{(Rwa%%Gqo zPLh+GgLry!3$-DE9HmIHVrI0o#n9cbJ#1+TA=}={UK2~Y*c4MxpjQ2Dc^9fFDbFIo=Yn*(KQX$v zq8M>*?lrr>4;|t?wv4Re)i?b!1HbI_wBmOi^h7Y_=;J~On&rEKANKh3lmoF-quYFR zac2amgGNZU=ANlwg{bizYwF;f{%`_Uz3%!&!-yYwg5>ttU zMK_OZ#oTWXc6`&IN<5n>*v92?u{GX)+1`Qck?Y5(&SxO(8;bDf7 z3nT)iAr<6nb+B7E_eC#T-{W*!4H&>Sfv>iXd2kl&XpDBWm`s#M>JA!j2lyNTjtfU=)i^cC?9dexfDfmZ4yU*)1D3KbAiv+NBXon?@dzVCqS}TEZpw z;Z2**Je9!QO!sZh9Y#_NAJ} zK=+e2ZvlPTx=g!Er;GN%fampI3-+UjGG~8KQ!;KC6Aw$b#!KVZglepKof;3Lel%K7 z3Ug7jpK4&*u;IlUeq~grQ9|ut%G#2tmysNqYf`0RRfMlNbk6Xt{Xb{1>Qsk>1rQdyGn1`oQ2Vl=sRCl}W|Lo#)V#WbMouG9d@>qov7<3;kr#wmSkLg( zi12*8pmmn}sl}HOB&(Xf7U@EG?BB*&-K)%DUm#s|#os0sTCS^0W1r-ol5$mjPkU05 ze$lD7DrfmvT{UQEu84qfp3PNqKI+73qKQ~OMz5#JKQ~TXsKF9`$OY&@rE{GV@Si8& z4YW$a>Fe?snYX%Z+0iA@1BiGSaH;~Ew~v`_*@^nl!aGTWojueXiU(Xu(k{T#zLC+7 z`&>KpZg%t(ncqW&m|ki*7hDW-FQTWsMnA1nq)PEDnedI3M$u^At5YrQr&4`(7P%N~ z9IqBHgRVK74GXf=txrpxT7ziIv$N~p;p(R#j+{F^@Fmc%TlXzo`OV?$=U=jHiRnVPaU4DV9MGvjnaU za~VB9C@GUOhdd$ljMv1@K6lGsS~?<-9A?-BJf_~-$LoSpr;ard$flct@BuUD zLl$c_zVcbN;&@>)eof1WyHQ!?%b|!5cwwAe>s~XpcI?JoQqC7W2!seyV$f#V#`($F zA^#~sIJm*?!z>-08SKRK`gEv9@AN)a<%_so?xG4)&GgAJ?7}a)wRsd=Hpjar6qwVe zH|s-J6!`;t3$z@;gh`rlg)?*QiCA>45;8Y?;}7qi?arnrDrkH@h6NW4)~r*chv^PCPsmX44=n?kNy%=mLcWi%Q@iNkCeagt6Kd=c zR+eu?RmhE@cLBXhU%|YYYWh+OIdCR=bu6Qa|T;!I?vS zh*$G6@>8%6xgVRc@5T$02*Yo(@1oI^h0Y?!iQd@$EWK&Y&l2TI6btqH1pisnf zeAp&V2TkLfH;}ZTdrA}Aujy|WPJ0q=h9YV4Iz%`Lj0&HD)9PL}`fPtgBlZsnSiHzs zYTW>C=B>AxKb8i>e99`_Z(r{&v^KZ4de0>M_cJG<`Id*}bhw`nzZC1;)t~c)pI0~G z*o!_<@+kW1$Ks-4v~>8otmL(n?z>LeCezB8x2p8!s2zg?qvk6*6wnE(z7~@{Pbz7n zQ*#i=Zw14U^)KuFLm~*9iZ%X24mrI@EGz29oc{-ty+?|tjvVYT>7Ne9r7kZwU4Tv( z9-HsktBr{}>dD3L7O0GvLWN#DpCPp@{gsXa{U%DsGxC*| z9Ln17>&aPe;+Yz6O=73zl=S3tfd_{yj=2G*-a&6d6y=1xYlA9@gU+1l1kwrg8=BNItsj06FesQj;$;imqM6UyF zen$&jP63=W6S2NvqjZy(o<1pcDUmxPG>+t98Fc3*mn=+q_4Ko7p{6y|-Cfc`w#%gP zomBr~Qk^2bdGN}9jidk%OM4@gV$r)OjaR)fOqwvBQ%%U);QFUycaGf9oG1kVxLH$e zdo;`k2qMS61_nw;=L}_>h#+C9{3q@lSU~pgrsihgej+Z2%jLJO-pz;wg$WBy-A)Ia z=VXro@!{W!vJ5vPM!C#iUB4cr?mKFp#;@;$bqB53d^Jjdd2)h<)Rt+BikICaP%{5e@a#1wuwodd9}NS%Du5j{ z?tRD~+ji1Qm7{?=Xgw|+`S=_SZNj3KHpKsxfafVA2M5Qlkekj@vMmj4*6U~k`EX<) zFG~W6CCp5!ARD)vJ));O-n^P-lb@_QwWeM5hxk*lvd?;`C_wi#AxK5^ew0j(DdXo4 z;I`CvtP+_T#}>F)QM73s99GFU7;$0Un3A9LLsnjk@VxJmigTc#&*42bX>3!wlGPFu zjUBXpu~_EYFa0ic8<=fBBgW<-l-t`|Y#O-%)5lDb(Q-6QLdnVBqfhl{Jj7`8L#ZgnT&bo z+`m@xWHn4B6Y)$UPT)iAO{#2^(PSl8M#CuqQ)FL6sT{DMAkwluDUH z=YY%Fa+};&s)MJc(sxz1XJXc!d{P$|h1h3O9Er=BvFO4WfNBrSc~X{1eRN(Ss}av8Rt7P7o}~p+6{ldm)a_2di3lqdaKvP zr=1hRT3NF;tt?qpHBV|&9y>D|bM1FcghYLP{!t1=PLd*5D`GEcRvBZQ{@Pfeb4*;P zwadw6=ZI?m7HPNeU?7inM!`R)#CyN@ZoX+4Rld~yr~yeD`(Q`S4Yo}!k_28F@~=OY zl-6Y=-at1KYsY=Zifra>3kbcMF^zcdUiC1Jq_=KN}{` z-`5NCR+w#fq(7NR5_FwAeLqIr7KQH!lhj09WlQrXw`z4gRMrkS<~E`xCy)Ca0*suz zTB!mZA)u^T75Rg-|L`n*O5+MEey(UM^lhp!>3~oES*;Q;1@t$gua^M0x>v_Zda!#; zta(o(W!;J5QnH`|ZK^?x0@S?V>kHhGyie5@D?L}P?uTcwV|s>7GL~CDHf^3d3nn#RiJKQFDt`8JKKQp4X)*Xa}?p{253E zMpH7qO&=I$KY2_1`sFsZ#cy5ScTd2EH_E36e~4cnA6HpfX*IWxI;0Z_HOu;u)@za` zyvxi&z;T!488f45C9A139K2}uGWz9XPCGSB#S5WM?F$SN&Y3rDBXeAnfRq#L%Oq4> zq&T6Ldbwt2K$)biN&i6+);aHViFZdBzV@xhFtUr!JK2jhZz0_naxRLzhPv3OG4A*n z6m9;r*`IE^_=D!ZJ&ff#W6kN4bxTbo&`+eg2OJQh|BPDDLy_;MNv!c%aTAXpQaMn>uFkw?MOq+h7*D8jQnV-CUja#lt%qFquhq+@4+;>c{F)W!B>EUZY+ z7ZuKzN6$o9lyEmpEo)BouXHJJql*5AA7As4Z3p2y9&?R%ex^?vUoy($etOk-m%ook zfd01?{EkZa?ZfY*F<|z~Qi)dXErbV4Hmt8?~WdyILm8n9T z#Ut!|l=ogIF}&=+T@(=u-bh;?(LnhPl3NqKORi*MQli0lb*ziGs#M@n__> zYxWwaOiZ$9fv(3eYse9D7oVKKv!Z(lVYE6ey-V0?nRy@rWay;*iy#Je)wvrI<^wDi zg^VL6Khmr9pvsF0bv_3mk$!0#Poman>&-a?|EvmXvh$BFhnAMmMjGHt{`y^f%yysQ z{huNLd-P|;dAWU0!Fw1+4qQ4R&>m#;=gr@LX)&Mvt!G^_{!F|D^a7{K3+!+Fzj6*i zWW|xZUS7@!tzvY91=I5JU6w;`fo$#pZTB{HFdqVmK1F_1SpF;p zyv#XD=)HUQzAF5QE%4I#w~>AIARy*q+o|c`z)mvyn6O6Z<3gijzEC7}7LXy$)%6UB z@ZOk`TQ)WT(qU~MY0GCpHHrqui{AaM>k`sw_zb8~-oE~$RjR0}>Nl16%X8at;?s;D zWBV8`Zv63Mfm*ScBF@9*>1uNztNXN5v=>}%-We-+;Gp{R1Wmjrr$VwNhE>Zogh8tv zW;pw%`G`OmO*DEyf=L)FCeg!dgNFW58_l2LL>|s$#uolUt^z6`;FFx z1${vAZaYp^qs~fF9;R);2A8ZqI2$rl^*Aqc5;`tOp+U@u8)c6yW5#`Lz-y+v&4QXp=V2+5ITv9ibjxZ zZ~9TMWW7}nFe-c8{ZJ_6nHP>DTydbbxAN1S&DSpb6-MNTL`cw7pQu?L{rj}*|3lbY zKtmId_dyjh*=eXalwlJg*jMaZM>L*U|W0|g|| zt;NI;T0w@*tK3d=X+7Hr2A8k*5ZfYwmoUgEHkgU0{^Yy-ed5i^a4V5! zEh`7Z+|NI^`Rkc~^HwXuLN6wO1ymjy#|KMDROmIb_Lu=HrgW0E8~iyGge^{uEQgbH zbR$%*u*qtkOg*9(CbyoJ^rbMu{$*JE{U@iSPw;^n7;m92QF$T^Qb90qsht5_x*6plM6(jZC&&0h*6_8q@CSHWW&_Q?y zXpk`3A4fpe3tWDyKbDr-ie!PWo+d8h5PJ|tnEm?xnTIo$Qo3{!YwM|T{{VICh%~=A zy(}w!K-ml7-5hKlOg0Ya&OUDasnlwLn207RrBj_cnc|vLAwm95PAoU3KqKkd;K2wA zOZA=OM>bihXjX_5-h^2zzx>o*SOiL_C#`PNhn!#N$#cRi^{VF%?dcDeJ@GoYvT$?X z?tkyB_eIdbzxzr{KY8M$1$$%KGo2X9bOqovP>6pHTFn~=0+_To5EbQa&RShn=p0Tt zxKmYSgF!-g*C;0Rb^JROwF>ou`WT^hJP-D09=ABlJdGqmEC(K@WHwq$0d^1yXQedf6n{wy5AR1m!8_K1AE~i zZSxb}OE_CAa8E`MfDw@)K_!H&_$pM!;{n9OKurbWwz8tZB^XIInF9 z|H$5~yt#i|$?uL{LgWt)ihUuonSTRWU;+h^fZjti5NCv#Xe-FeQ!y=h;^7ly#!O}z zE59E$uI|k=eM=q>^l}j}L(g~S>%ybLpmo=s{vprB5HOX!Vkosz)Re~;1GcqgD-P;3 zCq2sg%GST0rjl&m3X?k2zxU8}h!9 z1N*<}tsZzSJKAscg`pXU*$Q@^lgCC+^Q+6OgXPGCW3@`o27K}j%dsJGkdPi4*@Y2D zFJ{TP%e$HJ04J6_wYPiyMXfe!mgF_>EiCMdP$J1u=uhkAVG+e&XCV_uA5!K@HIx(o zEZ#q#8skspk(@%E9^R>#K`NGf6TD#o0VbM~Fs?+lwHR1I!hjc1!QMixLa~vefIIgxX{s~{zK&YwMHeK)CW|dmZX6s-ngBZg|q$UZ;126jY~=a<*7vU zvnRp^8@f;K1;3T+o?9*EF#Y@UCE140OS<1%i2<@9$%g`y{~j1E1_H-ZUiDJgH*h|K zMsE4vDGwu}h=IXcaA+t%3OJHKu|EqK$HfH;HZUgA_nFA-;bD^^#ifX|b>}kV{w(ik z{Ju{%kKg%=_SNElwsZA2*+*?om$!p+=^s`~Ds`d7YkC;XUyK;uym>=SP2FP#TmZ8+ zPzf*v_zhU@3`zXusH#1!P16j^qh9UIN%|;*0S*6&@VToxjSo}WB_^LKrUDxI{}TkU zJ&Oc^-is*P_!)`qwI*7yU*O5+&?=8u7_l3{3P&lsJGHRI>OA1%9MQATVLhVR{vQ2uobY>yJ=w#@%e^er`q(xi zT}0CrcUdW^chuUEVPPJqv40-z)wD{?g3gprF%`+n#OE$wqQlnvt0#0<)f6TLs9Rx5>=V_X<`|h_5nT zx12}s_Rj_C6t_{@VFZRh-N0gSa$>5BXNqWyGfKhw_)fT374LE5_mo=3Xg(n!BGMgM zAr+8cdhKwX8BehpX<;|BYGXgzoLsnaSuR=On9-vz+kX*Vfk&r|@jP&DVX0hUmps$H zF-C8MXPshyDkG3$ezN$zagJItk6OjD``!um%Rs4UXY+QCO3#t*c@<@vyl*bYMVrb? z$oVV3*V2j!jX^EXG-; z)%tXB&r2-5!&JOBq3?63vTMUA!t{A*7#uLR81tFV5r{AYS`7BY#KcfiM1m`Xc&nhx zJGjfW<+g`w$_XLVXJt?eIT&(e0+>DDzN5F7xXG#IjgaRZZR9klmf_{!errzHXsOE6BE)hS7vzY(41`e;cRZ z72@yl_;G!EXr)2!6mC`RDH%*}xU<>FUB||5DGcKIx({2-sr*{Pvol7u@r@pDvvAYdj_! z4%!BH8#HR8zxex~kbc%yFIg`7u;$0P_(D;?6&@Qjd{J?Ao&u&!H=L{U;GvIDF+EVL zS&L(Yegea9dzy;qUPut~MoTA(?po>zz4CpSzSef0RG@h5U6>K|w0igkmxMvC@2@JT zM80^sz{i|Mu7-WD-ZoUFgyaRU7{0R7XidupR9P1fGWS|aX+WU+S=0NJDM#1Z3EFt- zdR!uO1CKpRiPqYO%vnL1?$@fqZ-7M`yF1Lw=Um=7F5kT6sPN(WI52lx-Q-hRusJFjwGbB)(nAt@B}wG8dd1jb z*b`;Ia%{g*=+2XN(c7=S#X(ZwJvPQPPjdpN5jvcBduFwt#o@d6=wKdxc*U9?z>RV z>9ap{@9C?{TC5(p&}4hm35!Ooj3aBaf@KKkwh?Jw|6IL%!N4I$Vb<|&N(@Tt$+%GM zds+QZvTxk1un;d+X#0ENKJoKc`Kl*E4Z<6&zO*wthETEC4fd_0%9W2OH38eGk__$1 zA_WtZ9U!>^G+w%2^}LRy3V)y3k?pr61j~ZS47)_t9u z28zRdgnSsOrE58*C-dWF*E;ufU9F_ZJ<$b-rq0hYgBh38$1D&1TZ6HJKk-&^@z*WI zaYiOroBf8TYoXouo=q!c%1bqKk9M57f5BjaQx@PF;#->28{ z@b{lVULE?$ShaqievYz@`*g|?s4nKfX#DDHYEWLjtb#(he85~>Q0Z7|z^sf9cJckY zFpy1qp=;jAE!}tv(OhpfDL-pda5}f&&Y=V?9uGI6UoE-pybAdDJA)VoCrcqI~g&?@|O=7C@mh$b$6}q?Mh19_|J=ndxD% z(d)i|v;7$)4(@oXn|ZVj+^VKKYZr~J~J|gG}IKXg}>JL2%l>HaAe-@ zW$Db@wn6N>`@&K7;h{2|Bbudct*N>F=AYK431?8_!SsZ))|k0fB-*#i+n04*u>0?(_-XJ zV2%{YPaJg#FQ}V+D><3m!IGPE@Q%UISjtAtRO0TwC52!kDNStP2d-={sOvNTo**XZ z!KpQhli5_6D`N510&dRZDrtpwu1<{^TN`Oz`_>*ODsv>sV(tejUGj||8^+PajQ9%s zuerNRul+v@$Q4A{>37LoUiEXRpN{I6tk>(j!F;>WYOU+@pu3%B=IA$@J8$&mA6p11 z_*)g!IEun&-m%R^k(r(%<5gAnNEQ?91%fL{0()arWi0FQ&^1kb@GBdOP%Mi-6G}@* zQuVr9pWAiyQ?gY583si)$gX>qO~TUN#=lDx2Qvfj^}oxPo`Okf{}iwdNJ~ot#Gnmx zB_aSv7!vM}S%9hnz|*s{vjZe0AXV1W6@ArS01=RxnOQplctz^+SJ7)%{K1!{e01A2 zKgtsZuG~k*rNafckJ_J0o0_d@%@*#T(phXyI9c?3Z4GX^u(nhHn+@JNJ82PV_-^xU z)FdLa1z*Tgpx+K=Hs3*qB^V&`rkkeplNX2M{L-Aqsg0gc+g`|F!MWiX*j}YT=8Hp} z#3q4ota#7tviC=3i$2f&&6K!Hf>W_dPQdQ%Xa89WukC3_7uk^gyt}QWafU&**CWSm zS28(D0t78w8m~;>>O5`S_{qOSXj)#9m-q<9{y7I|*{MahzSpx7GaPa}Y0CY~y&(0tb5%H$89UT-v zSq^Ai0uPMwMtWs=XR2H`h=~ah6!Ew@vuwMapP6y<^h~^}&BB?fF^|g3H0+Bw+}qQ0 z{PKGV$0;nN?FPf0Yn)d_lsTljGFo1x1X-T5xX=N$hnd~L%jZYWKrc-X{<*(|B zZ;rCETTK)>taVqvVZO8YkV0MlsCXYWEaY=|)4JM73IfSUOZQiIO-%6j2#}*|XLN%E zgM)l82Xue_{CTj{svF0$Vmk`8H^j$Jga{ojwG!dsUA)+O_T)M&GLi{sQ%z7&)Bqb9 zD22mXV>1F!JppyBdO-*tboC0qJR)`W|5|v@7s3OrIG!_il^1wrZ+($*9Kv zIaUQSL5~XSOU$PmOJrKyG+z^>Ko?&_5y85W^Q@-*CQB>b5k!Ej3AodajT)cBdkFf8 z%Xa!ySRaBBDiwmk>H`Gqeyi##|I}&}4p)okgJ=F$_LV%Uz|?klU4!l$-+qdVBxTf{ zvxR>siBjuM6Xj+qiYzVRDtSo3&&BT2EO9mU<$*CXo4+PEp&U*2eMFBjt^Ec3StBJ- z_R+!GG~)1lwCNf;ne+BcmZNkU+Cx`PP7W3p*2&^ve}Dh<^d-l@pS0o0lEGW)x7TL< z)$M7$CvVYv3?v%x~^31v9(gOF|UAo3pbEj;>u3ZkBCCssA84CyHTy#;cGyj#WFt= zkQ`dSqA1;DoOf+*(6k(a(CCHF)E^qDe29!cB)hg%U5_wP0N;&P9yao_r`)sPzfMWVB+b5Q1)J{%Y^@L}0JHs+E~z$x<(vu+q;j|aR?rnTiMU`;aP zk9N6jdD0yMdn_YnaRobd;F)`dFAegewgcGC_|v=9rP@?aytd`Giqi7pxz7GZvr_WR zM;|JlM>hI0ef|>nI4JAGshQczp7LbJpoYFOl{$d1~KC;=J;$7HV*YGFLQzA|bd_7jvaw zT%)H!Gm!aZU#*B(W5seCg=hcq-$IkU#KjB3ex7~?dA3)LAG&Frd8ZrXqux`Gh+8(z9rIHoQQ{( zmi97tTrmLc{wx5Nm)=v)@cPlH#SXr^#U|?-AH|>2h(Hd#fY0`G)p%- ziAMK{9%3|8Imu*qb51T$f2ndI!??JLk8#>R_<%TZTknrS{4TZZrhFn!DoNRz$qL+?{5oqA~^K&;SLk>+7|OQjLlv zKG%Z{`e`6pe+hU20`Q#aFLlA1m5mm2@WNl+$yVvfrX78%&440W6g~QY-GWF9S=}YG zZBKrCi>7$8oAV)8%~Rb>2uf7aN^T$jS7O%#;q^7%Q=jV}lIb5egWr_q zWN4Hjy$0QSBaX%$4+N5LrIW8mSIaY)P&dZh%Qk>S@qNqPtw?8ASGiUd2*@guR$d#& zP+~?iz@8zZ5wn`~wz!`H8hSzKM1U3|HIisJUL&X9uc}1m9^}a#cU?2fx(^5Xl}%Uk z`LZmI!6#r!?kUUhw)kdY#<|+kF0ZF}%rl&VWl-&@WGxSNOWa?jS=1b)`&YItO^YFI z`?jw+O5Lnarw9#DOo&?OvOD{a_4<<7Q4gZLd0JQHd50bh1Z*Qzd!A@qb!}`rkLl>p;0KNsL zQNE)70hKh*@M_3I8U0){|&m+ zJB?5}D@mKr^rchzeRKJeLbWfi`l0*9QM zJ+#h*f^~4+%U+v&l;DiLQnvx&@{D;uAYKe{;BB57gHM2Wk77d+U zu|i^o)7!FIUF&oA`?sQC9_3k)KKk!B<)>4+KEh&QP-bcl62r%j9wQEQ75hG|DyFHw_3vWQMrZTl+FCW`Z0OU zT=4SRxLTpK43`3v-0$x>2K8gfZ|-Wlc)#>&P=NJefLPHSJr@N>k;uh!ZDS1Ba2osm zWbgFbya7O-1Nf1o2za_A>;pCz2L}i4#Jzi^8qQxk6f&gq=%$j%qu)+mA5$J#ss9%R;|5qAjd=dgt22S1A0!dUe5b5eO#g(g9j-? zMldHbory*QL)Ko$6~?FaR!~$#M@I)hVyKt^o)*wHmCEjIZ|^CcI4`J3A|3r;cKaf+ z2jW>+)vSF|o=enz?J=IdLuQ-4Vt?bsd@r;sWN0y;UlDt8*EGDD?n=bp9!^5x{m*cG zGV#6f$bi_CfJU8>=1?XLsG!#Qw1|bh2v#lfLqC{G{$Oo4Pp-x3L3)Gy8IcZa_=QNU zSE|ogW$H;R`kZ>**fRI25_J!QG3zbqDc<>w^>$~0yrR#$mRLmu6dsnFpV4bOg0g~p zY?i-%RycXK!V1xjT{+|<8r_E5=8rTsPOcsj$HtozcAC}M5+?|BbsH|fm&h+uOQ3^h zcxFzBd>^U{Gj$Q8_85z6R5=Lvs`{F;suuT1<+k<4GXxra6n0NVGUqJ5|9yV;#W8kI z?h9}<`O{S!&q#S^{6lD42ryq_`sc+hB}@P~4w?8C*43wzf zO991M9jG19DB0cIG_$iCdJXWTQy5?X!S49vB*xTzZ>DM%@dF-e!C}OSHmmuuVsjTS?-w;=`8soL;&6Du%}@}07XP?$0{Ha6A1I64Z6jBEpJ0p{wgQ5^7qU}|WwLazC>;E(&d3jBX6XUlb=uk`g4 z(s|DTom8(&XjRqm#gH?(%oP`axcT2@1wRp>u0zOWm*y_3r8NT-HNs6lN}nhyF2}ov ztMCL1CKsocz*>|S4I(_2`13fDK(g|g<|AO7k4hNmrj;3-99)AQCI>QS%Oo<5fPidM zLxahkJ20ki-@b8ilRfFx1UwTRP}N762pWOWQRZmZn3*oklxi}AR@2zJUp+EbjQ{X` zZuFOyNQgrxHn<~|!6l36QR7Qzlz+CsC%?*1?DYeVI6B6G7$eZ{5cc=m-`kVlfK4n7 zAWN9n{cQ;pz>&8Sr-txv3hV_d`M0P1%kX6@1+okVCKkthex&4NCaleybBp0BY#}Bbg0}a+LiX5b)eM zW&`jUoqqQhb?ru!?c_k->o`R$bUPj*3iSQnNgM~4E!*;W?~0&NmAaA&>bC8xRb|k* zF9%q;a0v3M9htt&mnFhySh`ch8omhedhE4N1=&-Y`#xX7pr>eo1KnBR5{Ad;J3P;J z1^>tn14z=yjFtF{|L;VUKV~s*pF*EeE$0oA47O~KjG*lc@0OkIFJ*&yhALXkZfd8r z_UD^|PLr9b8|8TEFYMgIzW-(EWa0E0G@*1oMa}x>N!G^`j~_tx$Y}9`r0HS1bIGSv z(`&rGzBNix8EceSrR&uU48U)B;<`RVU|7{?nld0H)e z7}8>Tm6K3%vAuz3DOoj*4dcQ{D<( z+x4uhtQN`l8u2?^cB{)RwoyM~6Zar6l z(}Ybv$v#;q0l$vT^w27~-_-ZXczRm6>#3Ded$*Y}u;waPv}I>s0AziOMCdm=S1<;AmR3?SJ&KFjk)dwU(3XemN1g z-J@G|6`s}{?Gc`B z1POuA_O-@TX9TO3%W~(o5RY++y)G4}Z5D4jI#ak3E-WucAI!CfnR{$rPkC(PnN|ks zUK|=s8P<8*OouiboI$73b*lLLtp|c_QzA*X$eJHg%N>}1uARyH+VPfc-)(HR-nx`& zkF+Q7PCJ|=0jJyV3+F2k25yrmD+SRxu3rIj&K>4;84@0@TV*5;IQp=3uyj*OgFxB| zKn}uf()$&VvIexFQOP(v2M6Ub0)C4)+xVL;om?v`Tw`vgOgllq1opA9?$88N66DwzNS-}XYKmF z&6kLF%yuT7$PrETsNdc}oK{X3x-p&7NDqSkjy)`pR${xFQ54A?Ru$!PQTMwt1&Q{Z zurxR4^1AxCCYc7fRfdMX#MB4$22a-efVTp;7N{lzxKa;5#XB&=LNMTD@rHc`Q}-cc zE$(6Zkk5Gc48B2*)fYv9k8ZDDm=jxG2UwsIW%gPY!)KfIXiGRPwW#kiYcvh@kKXP7 zX|B=p&H*Cc04#KeXQPOdhxg_!&1zJ=SG)EBYl|m=L}wWvWJhzeGT!>J@A~xDLJy1G zZ)P5FDd~;yoG-BW21ZuyXD2+tad#hI}Q+p@ZJ3T zXrj`mQ=vr~f|-2Jv-O}rJ27hc+o{9wN&Edn!$YS*y!a}*5AmpJzfk!m!_rJijJQna zo&k2nh8ue#&lcn*156_shlA#>&8Nt^8-*U|kp)G2vDtJTTp?QOmru1V=<~)~yA!jz{ClJC1NQQpEr^vr<%9$R&p7Mo1UU;OT9D{DB4Tr6qv`An;2-86DaQYB zl$K1is`moT(pDtS)zw6!;PxAn>Webn=8C&bbH=SRXY7zqnn1=;F=2ml#ngrj($6U+ zfU&H|3)F4>qNw2&Bt-`O4w;=mtj8s)@fR75mMf!E8}U&t`KLk^yqnw~_q$(m81jEU zDOZ1X8&JM*o9s&yUe>Y28F}#4Vf=4>^oiS-uWJAzD;q#x{NF<9AD>+KA9hBMzD(!G zHO!l%-<{m=JR9~BTq2&M(=AGUR_fAm%Ul0ok~3DKsddQ;3F(yK5SUzkxai`F5VBac zDQW*G#G&eoa(%pfdlBSWgjIQed_K?xwU*Z(?@E!XcKWu#^>AmZCg6y_oz&QzjF)v+iA_eR|@?kb#(ohJO90^NWVaL$g*pmPChv z)0F?b%k_ob5>U5EqAT~Td2)V}{BU#(2pm3JWlopt0&Y*WKv9yA!-^QNd;k9V84x{1 zMnpI}IRUEY<`6*LUp`?2u+4UJckip_2ZCQ4W26K$w32>>ITCz$XNo#Eu&(X~W_UHFL(6LojyPjC-|A1h=-0;%9 zC7I{S?@@fo8}GgGLcjfL?UbdB5QJ5V_F%G*f!?0p&|;j*Oqh81e~NyKi0U}^f>ftT zQ4K8XvyXO0JJ>$0>_lAFBzmCmM2?TJLg9Z8HsO~dhaov)ApmNv+ZYH(>;Og6QA7Zl zp#1**FCao39~%SctblSn@Hsap2XJeyFlgO@!vWELdRTREu;iytXXyaktU^EaG3&?> zX#O#Z;U}sVDhPPrurJ@++Ss(Tw#s_xC?NwTUp>RamFwNEE-p-sKYsuF@87$+@`09r zGBhACaIw`Bx=peBN!7WjI2nq>rrS4uX})A+Wv6q7eczm)zu&(guUl@%thihW1f4TE zX}LhP5AV|q5TJ6{EpVSEtlqc=k5vMHj){qhz!xxt;9_9dLmfhVa)L`jqOT{0TOcbD z`SjVdPzyk*Hkk`xScZpiZ$Vf(e8YD?9g%(3`V%*0QN9CFMI&qxf}*9U$1nj-tBi?B zDFQnwO1d+|1jMM!YWxI}CIrLJQK|Y8PSv`Z*zgLJ_OQAn zAseY8rJ*H#C$}En#?p>&#<29wZDK{M^l=W&U|G1}c#~`IR-YmRvSBUyI$p+kKjfVL z>ILzbIaw8|p~ePoaNn&jc>g2hOe-+JZBGL;w5%f> zGA0Pe64xE_HffC3xNQ}!0vET$oBt}MwxX04vaH)o>tS(8U~$UXNt+(G+NH$_#|iTd zNF=WeEBZ_+KM5!7b0i(DRFvueSYDsaP{;}h4}gqKdF&~qBTO2r7!;L?tIekZzq}X; zd=rKV?>z>#xNk=(f0y17+0T#?2SKsY_|Sy6IL_=T2UgC0663n%Z9_BfTify}wH-2g zRus~Fv&WM^wkc#6RgQidwMemM7nskbG>* z&`6Y@QOI2+A{K9@IX1Q?tDQ|63n>?I0?_08<-_#a{dRp$&8{aVEV_Mgy1a9eMDwV^ z%xns24{*fka|)`XBZ_Na=b~@8W^XOb?Vm*aiPH_L>VC~MIIMMrla73F5jG`&a zy=S0Up2Q}>>9UJiXM`Q3kx{OKr6IPsT~ZiGCk#`5@2B|(5W~&?A8qIC#lBDAk`I*hpZak6hlQpFU3^&fg@RTUJBkubbZ> zO%uqPFdU*0MiG-J^6}g|U)r6Nwib$mIHJL40}Zk;AeRuQLBjmozRj6=YSC&?IlW6J z?bt}zRi`CRO2@6XloIq#SZ_>FZSs!mBPW7%xEZ{Z5dMv(@UwYutm zOIAhv=d3+8K3+X?o_R6cwVI=jRlRld8dz6AUt&^@hq>q4yE~_*oV|!DjA{&%XOmR8 zG?eaR1x-`z{zsBg?3_>Cd)%7XKthL+zuuUU{n;Sftw62Ye11Io^d=^*cZQ{EhEOoe z72H;RF$$C?X;W5Fvz$Fz4H7mWujYn^6mmzCQc}WlXpuza~cD`#_f!K!5Ap)?sgbF5d!$}BRjf*CwAp<6 zOx#x9BK|F4zUj6ek$%>TB93SUe0%<;6JRPmeOvzo;1aYN-0SUqszCM6ZgbbUXDA&eSY^X9l4)JoEiUadXS!wIPgDYxAW4q@%<(zNRhi|j$R+fHk1g}(9;Ac;s!eJL1{9#O{y9c_< z>E14U^0emk-DZN3y9$ra=6$0y<{45}^flCNOd|hGnX=iDuIC-L3Gr|#6mqdxZmWK< zl1+64!7B{xt9Cx5&8_TOs;AKB?e8jhefq32|)7Mo5YxqPRM( z)jiQgJ*aWjCGTuC?bV~TG^=6LewxJFNE_XIc}3*k6Y-1jRHjRb6B2^C(WLjjpu@@Q zFz#^W+6X*p(pX6e>@<|!ZR)faD55KfHZI?goIY=j{B}pWZ|44+IS<3Fig4c%~f^s?kKmx#uQqi42 z7-s(1@@`MqF{S8Zy*ibE{6f{`m~*S9mi6ft{+r!{Zo0Bb1|Amou9vR!assf%NP9qzQWHCuN5dCCwj2=u<1_VcrQB$5B1rbUYA?UFqch%zZ`< zdyl_3ID71e94YNLtbLY<*q~_Ih^hrv!;Te5FMFZnBsdJ;bRsb8%}K(BkB2v#w8!@u zxAi^zEghxvs8$;b-;AUvFY{vn%UrX1s0< z!%Lw{o``(v?@!{f(Q{c7R5Y}_`5S%Kd)huQ4op%S3LGD48I&@djt3u#Q^)2&PWz>u zIa>_#3mJ{JR0h?`xt%Cn;E_&>SmVkMf5>u5IF{gJ$lK68w<*#gNNsidq3}(cN-iDj5F?~%-abzUFY;@cYywwR! z(nY=1*=b=$kwH+c0~JZ8=cz5`l=~9(XD(YGd_FP%y;#?u6<81B8=Y*zF``+z6_DQkkp_g`9XN|<33XE!%7I8Ym4NSL^`)MX1EOtghN7HK`pw{<98Z4qV?`a~ZJ))**nu$2=0Fv+*rhFG2 zLaCj4UcYngjn|*C3=$x0s$6uvF8reD%j<@_G5mW#PXaFjs!sh!#A9}3$MBQ~?k-@G z3AQ}#G)SY3&|gv@UMi#|4{vO3G>ZPa$?=r5#Em<0si-){cUw)bztL7G z(dLAWUGj+4l;Mt87}!7Z1Iu=`NDUbLQ!Zm zy_V8*GooGsuMC(!SHZo#U$y7n{f%%(NHIxppM$LEV09)uYXTp%hnl5hNR%7iEZ}C? zSM<7jN?TD&D=_!xXR^3R;f%kwrj{10F7t9|c(%1q)fafWmgAQ1w=qmzT+C=}bVmg* zdsC)DtAHbWlZJivyVK%!e^TPdgrS{Kr^D!QtRrWnr{Xb{vW5@-EYO=Dn)v>MP|3r6 z5k;}GZ`yg3nvSFQUbyme*<0mvBLxz9fvQVA;f668av|Axf%!@8<+HA80u`_A)uJxm z`!)7tHdA4z!X{8CT77x{LbIC?ps<|dl8geEJ_*k;&o=0AbRJ&dy?$plv5xRMNVP?H2BQg5iesK;DMjQ5MG-MZX7H&DP|;L>f=5aV~%8SQlM#~MS@@J>m-cn zpGDH*0q5KG^0PkxFEt=l_?Hbf-B+-q7ibCzs=C2}z3Y0U^TBB=bxm=o8*Y^R z-qvoLQT#@vH}6Av96anHR1A- zkI0A96Cq&AB(&YF=%&+y`rYCv>~p$^rkr$XF>@*kELfZ_r%WRq>%j!Jv~6)nJE<#Y zAdb;7W5p{fV~xifdyhYd*c1EKdH6k%^-w|A@YJC~wYj^)0NFg99Hvh11-I=8g zyiRW=jlIkO+E5$|HcmcrN>kQ)mg;LVJc8@3+V!pK`GMkJ@w=6)P`e zP5Fk5U(eGZ5#ffZ`hRtYx6?rM@d6|vRAzHUG))Xh9cm??J-o%VU4HS0(yHM2;&&PQ zA2F!PF<_dqf0<%&S?Lm!>84bs1P#5$%(rB}l#`dvY|K8RN1ju@Y1H%-&ULS1`Sum) zIp8!Kp=4Q4m0!XTP(VJ1L%A)NwRIB^_|mtAAzf~jf%|CKfzUhU*ogHzWWXZ9U{&Yg@DhsWLmLYkgPkzT%6%z=}|GRf%Zz6bPCN3^c zMM=5doEje=Us-u*o%Dy__oOAi6KT{?VYnr5V=-?{eU<|L_H}~|X746y z*4v9@YYN@#hSGSqVv1FC*I~4|_k8f?D(A3!vZx+1ou+kzQtA7WRNTvv!1({20zI*h z@cW|8X=2~}!Rsb1*VlA9@@e@WGz?@6SJ)T2e^!pj6W6@ter0oAuS#}Nba_*##;S5a zjNYDAvRofYLcg7T606$&cw^r2AuWW~effE&>xIjbm!pWPd^AlL_JuqVA=c=)t5Lf@ znO*>We-x0$IH3Q9fIPZXUijgG0tU`uLEG+;Dm;?K?Ce1W_%EFkSk2e6t$|*ZaHLF$ zud0oWjR?B?8N0i2=Z3FFWD;Lac*s`6lN zi@L)?pA>!~PzUn0|4}Qkd2-Lu+Mi7KTm%D$5T!?^ZC`R|-a&vP>Pz^3*x#u~rm%)r zV1k~14grBjzk;FD7IW6@n*{~H$Nr>MM>mqlyFCr0hiZQH!qk%SeHleX0Qf8;&2q=1 zUI;UY)R*DlOS)!0`@I-NX^WA!M@B}ze#P+gynRYs{a@{;O2c+Tf&Pq^llP*-9*6a1 zK6|2P>5{_*XSS~i2;hgA^NfN2X+n8TPD{&pd9hiIC!%<82%hX8+jcC5!x31o*Y6Z; z3rV3?9D5z&;{rBt_@HWVBtW4HYh8st`9q=0P-76wm-K1AvpJ70)zQZ4o4b;9P|1aR zZq~C+QVF&>*mUIZEE1CGJ9v#}AvY}kc>;b=g~-A1(;}HjjIOPyHj6Vkuy|!W)4e_) zMEiGTDoa>~P5}}gjso=5lt^mxi%aTjthylt;{bw@gZ=yLQcg|gZpvh7xAUc~K~G&y z1ThXy+$9oVV{k8lN`zPo=XBfIk}z9d|zkxk6_ z((U`uq4*d{E4W@m#zo*{kL<> z`QyNaGHZ8Izx|Tw+i8*YW?gF6i&I+bV&xJ>eO_;;^Z2N~a~jbS%M!(iG3?_WKL7d2 z(j6P)0>BU_&B`UE`a0;M%jYeAhkw(RMlBm#UFCw!`ek9JDgFEu$$TwGcd6uM3Be`5 z{}*$Ljv5}5nkfbDcj(8k2@P#elZ}$o z6f|og%jDJ`hnv1(K4+aAVqV`tJ;m#ROEQFW_h~vhFC%s3wm)FUEqfpL${5z;{)CZV zp#r$^OcmSjMZlCAr01vhYy9Fy1*VH#dWb9Nk+%11c6Ex=KJ%R#Wb}>d7*35SE1`)L z=mu|vOb0aw8P3roeYo~(E?;nG@Uj<|(Ee@Wy=*5yfwDt=zd2o8Rq2~#$k?dhz^{geT&|c0?xzS%^;xu8{LJVQXP)b{oi22 zbb|i}*pLxIAUQ=X*ye6E?;m(uETLqsh=4ik;d)@{_AO&~pHWwk?*!_j)l6+mSlUet z3Ayjhl{<;Pr(x$b+d`8Nd|9&k)ywUXW$L4WDlF0XWF|b3^d;%}j*hu~Lv+Kbuk1td zB|KkTj2;P$x^ooU+;m^PF?aP=Jv8KbunyyV{YU&FcfYkdp{G7e4x;nf2o#_Kmm;+e z*zUEE@am@Ci()W%V6N1;5U(vrKR?`Euer%67p*+CG$iG=fW(=o)p+^K_Yza)^0ans z;ud55kFu(u66oEM&+u$JvCdp}O&{!8elyqMS6Rix0arFXpw=>Xc6FN=8Q{%%iQ)bN zTFwwt?J@6K0#Ne|%L4>5>yUBv%9{U`Zap+SvZNiyw26(rg~l~cF3%1seC zKOQluQt{^g#Sz~BFB~EN>^GpD7(p1Z`7;pZnzTZIeMy~I5e)Vhud7hyWJEhw##G+f zKxHdry1BoqOQIZ|qf}4SV2Z%5v0p4E58M+tv(cI!_a&|Oa+N7;MY$lAAs&NwE*(vH zsLpYl^{4Rs7L(>V^PDo|^X4SqUj?I&Z=s4dd=gSbxUB1(x-gPQuwm3}Rw`e{A;DZMAMY)-dtnThS{8T)FaszT~`tRp9 zFU#T&F)>-<%gs}>zA+bG(@MLVPq%y>`PPw`v(`5zmpQbXUx05!Ao1@a-JYyFTY?x# z=hq}kCH|E7y%dw<-#@W6H`g3-Mp|500C0xvo)>!z^Ut0=1Iz+X1@z!-?z@-wY3r%G z5~x?agOlyq;V~hfdW3cbe|gSVg=;XMGtn>UUiwT|h62V+w$qJ1zxGHlk8wd4@RUb; zF#f}&UwZVh>E%7ADV2F>uNyQQQ= zdMN2;=uQV18tI&wbEEh?@B86=IlnW%`FPh}d&RY`z4qE*@M>3tcil2eUCr;QYoT2h zcPe1RJ45L9hR!U?zpDd!WVVmH{Wcn{?aJrbGBR=onJ3Co(dLYQAXXE59td%Jwe$(F z4xgB)6BFuny3f1(#$;Ky&Uy3J(@km!Pi_Cor$!V$ym)K*c(JFG<|D2w9$!cMwwI0Frrf?U1GQ;7 zDvUf2$gsEK+54JHsKOa?>#^V=hmxYw%EZv;5RcE(1OsT>c%YNC5MpEe|15RXwfPRE zaG{vATQ7n}>u)q$a=4$lCf121!j!Rv#p3Iz@XhI~8T(Ux^3D)6=O5G#aif0<|K}j$wY$mS3U>V#8#!D|AK5-_KJPFB4urd>k)@aJql7iDFEnSI#9bqP-i@ zG*eTtgl_oKXU0MhCyC$^qU>*5d2*G;L;O(WS0xwP;%NUzm*MY%7HXMKh(|Q{rk&ml zE=tuaceRM4Q#I)MzNZ^6XBZFEc}x1Yzht$R@0Hw5a2-h)86Pco(0s-4Ycp55W_Lwa zDy8{;wd90EL1TYFj0H}6b^=ZYt2N7=``#f0q1PWB@FRmAucuvS46E?M{>=uYcRDL> zq(7|l%9kV!C%$R_L~XUnWwYZ@01*DYr!TJcU;E~zS81Ib898)uoHMXV4yafJ>decm zXMo&rw70i+dOC?0=<6$}6;rHR{cCB7xqElKm4ce-v$$f(U_=#4t~#FI@$W0vhcwP z!<7ZcG}-0f8lrOX*d5L*`?OhnnJ;%?a?dD}MbrEI$OfL=x{+hDznVjU&vq_LYh`Zj zIM%6qxsmeUBK8q(W5&&q7VWisHm5^KO>^_3_;Wm_*47_vS}~S^5phCkGf@<+C8+$C z63O@Cow_P*cT*oZ@U-1g5{-3EQe;VVV6C{D8Xt1EHF8~+UMGV2Wtzc246|$mb3znU zp6N-D_;a6e>XBF5m`tB%F0Y(2YX&%vF|@SbUcSxsez_>hC3U>xhIZ8&{^GG!ol{!M zf3W)V=TCf63DwpEP~6B4s$Ib;kI(vPTm#bkuoS%eg~#(DX5L?F|KW}>TD=QbE*4y4 z^hOiY$KbWN4Ldk$INxEIgU#sT8ZwLmqA#3t&w#|r99v+#`D)p3Ny%vEI+ueEda~7U zNy#5_&Ry`;p;Lr$G3xnEA)%`vU3+t|PhTT4`9&({lk$c$1^t>Ml`x^INnE<{#cT|x zsygs`tS!qq~)&d4>roH`V)uKW3z!=z#gVke!#?exGrq?%g3?3;$)tgDH6*JhUFzhqa(7DvWBcp@Yb<77MU7P;uT60I z+t60LA=QAkrd4`wRdmUs_}odKmWs#WgsJSGb!{I74fs|-O8u>(_fj{Pj(wllKkOm^ zE#|P`eK6hDa!c$m;R0ts`#4W_6uYJkxoy;giLzenQLrzapMhwEXXm41l79+NIlX6}~ zudgCK587R(j~ZAb&*v`ch<(gvJWM3NEIK-;PklH{^u0yW2Gn=}pL}&cZwB}MS4@~T zSMaXrglcaF^g5LO9u*mHRLAhueWbVZhrQDgnlUaHNnRxC`gC&-SQpvI))oauFVY|6bnjXIvQp1pZ zxPswny>A=d$I}C!SpB4&+I46iVdsD>AM~><#lW6=Rv~P$Or$3Q9~7is1e&Cy>w5YS%aCO!oB2?1l&Y3JTZ!w4caRy=FI_zj+(Sy@5-6WRr;6+LRUmb%uN{6d z(7P@mXNU8PW_D*1DZbs6liF9YA$jy>x2Dp0x{9fypwnFN;AF3vRMKmalc4P`_?>Wr zaQ)U?z3~%G#b@nzZEEcoUC#PQsd^c_k!@i`X1W6(Tq7fkiIYyW=So=p%h~b^Uk2vV zSbMZPR0dX2Y~j|h+aY=PEi}EBvzHpmBurFT4(Y^p#xShKZ(5;2qhDuUkoW7fyH0m7cUmDsINv`*~#>}I~T_Fz@UM49AK%PJwn(|MkTfb|ae znZs23FS^PCYpsT#*27zYzVA~p*kgjZ@@370NGqEZuM?+YtIdQn>o>J#FJ(M3M{*F1#=S11SxVe9YVtXOA`{kv}uf_^6GZqv!S|6$c7X$fouq)#2dU0MZ zKh*}YsU&1THgkZ9rMB9u+^WsU-~{Frr0S7@U^ICKdm1Q^VZ8rA&Jt*`Cmr5(%>B!> z|HRR*Y|5ofr;_GfP=r!vMRC~l2|ebCf(Q8BxO|kD*Y5citG@fzmrw7=YYj$*e^||Y z47IA*WZ_{7WmcGiy+70Ou8|4M1x^(xLnTxkIPdjiOpwNL0G(!u{V0x5mJZxcA)R3-;U^5 zFx*U$gm}B!o_E*|@+NFmdvs&AE$5~SSZK=~-Ol7HZBBS>Yy@PXA^FybUp6*6cFlLX z6ZhW{YHwHB?aj?p8);4A`T4bzlEN9N5|VDeRN@kLEHBbAaF6W!&$LLZZohI4w#1-M z#Sb0+SaI}r!26Yl%qKM5we3zaQHXx!BeURQGp!*@#7$F;35%N7`?Gb{I@%Sflq$6J zv=C1zyT<4?r?)WoyNf{ReSDPBg(rNWE>Kz5^!f=aQyXfLySGo`OX}J>*I;j_%PiQn^+-dn-AEo zz@1mY)JoxvGXAi2e{`P(FR`60RK;^o2XdBeSRt&#r67jgz^99KDyu78SllQ2F?BQ^ zd{n;`7?9f*Hdj_Vw6C`TTdnjKS{C3s`PDGtiC(+E{nmT8Smnz%q1uIp({_AP<$wTz zw-pPK$uaia*iFbbZjHU#e(Jt{L;3-tFuw?Pa*!(Y=w!H@OG&KS<)}N=%dpmX#(3`d zXHa>fIOKd|Uh}#v6v|3}-WUu!Tpm8?UESX5hQa0=JNwLU(AyX6tdkgVj}% zaj<&l`No?g2AyA_8_Vbv>f>Wbotx*&_Bn6MnexI-;bJw2)GtV;zK1ie9VYZ@w4|)m zF8t2+c|6^mJIeGXFVRwOmeN=0Uf%UDW5_K@+ucvXZ%0Q5e;!}-r}6m^A4;?E?8B+> zuF#&QROuYik&P`7o!vOLRUY-mR50tz#iBc5w!ePUb&kaF0U@ML%54XdjD2x-`sNIA zT?QI;=Vh-#58NUlSYOqCqje~Syu7MasKsMv{=`8$Mz{V11~c!*=uo(5fx#RV^J8-k z2U|#8+_=r#vpP~|%g0dmQc=F#O6_9p>?lgj_G0hTBkS`q6`T4}t(Jg7t+*P9R-sP0 zL3qSsp2M8@rn%kGrub11>obS-=-{Yw%SLh?NBiTm2FlcXqOg6%x&O!+ok!$74%JL- zer%sO_)GF?>lA+=mdIg^tj0qv_IK33sCt1**|Vuci3L_a;+0 z)_V0%pkRHC6a0?Zd;(<&(J1$8+w=1UrH$^Vc&oU;m_y8|ezXPW(@l5f-}$>=>0H*< zApP9|VUwP*xf->ti;P_wwkdoP0ri}Hn4t5&nG=vUieaIWXk zHivbGz4c?1u!|j^=5n7pCoDLd%f*ItE3dl@-Ov2&v!zbQ0B2#s*h@ z;!~P?CL`09Z)rt#vTPb`#~=-E{gKN{o5B@T`BU%xR!VJ>&bN7zy%tA;7q~;I`o^(O zxH8D6BEzH{_BkO^r_psb-bY!H5V2VCm=XUuTDrk^g>QDTOWAiEx?`Aacw1-~W?Y`I zB16u>>|NT&^_&UR(8-z@CmxMo%-(ig11TN@WG@f>vML^C5Ji($&{VL4+jNA=i-lVh zLKvt!&$ywF`fK9)wKduYm#+a$0kWX2)Y{x6SPbLYEbc(F9#RmR{YBVCJ38s3P!!@Q z#pO7R>aWzGnH}Pi+edWhZ5CFXXt?Wx@Z-tFMVMofi>sbO`523aEfAA!u5yS}g@Sy} zqb=|d{rg(bJ0;6sz-X0JZ?mJVz!F|T{=h^6o5h_^fu#CVuB{dM^mStKArmnjmXOqP zgbnPhkNarxJO4nxYy87m=&$2Am*2y2rFrG3wO-N!O7T@eOJ3;5SDHin{?2Pwe^c@ZrRn^w9A~okv5#Cwyff02RZmjPn^z9{t!J@gg*V5zH{yD<<8?T( zx65|89BbLpbmJNInD;J#n_ia}4$ZcP@5J`$(%NPe+Z~R4N_7OGG+W38*9HcF zJ@!?h9A1@v9j$QKUd`FF3MWk4^0l|2e6Cwf?~!zvE(O#JGO}&7$|i2#bu6b?&(kR98DcF8-m_X;6H zb^R{S#iH~Bwa5q}oo^xC5GQ*Z;(5LlCAB-p-oZ?|3tlJ0PiUZzEN z;Gj@n-z#3K0o6d~`d#e4g>lI+orDE9c{pS`Lf2ZQ&mC))v(SCk_2vV7awm(^AAnWb z_3OoYbqG%ifR%_-Q4Bw--kM{%!y0|6`pCKev6_R3OV!r4XdhpA!}kK5wd{GAyQwK! z@@P8JdoeF3WwOS_#*Q;S&h-O_#Ef0T#yC3|tEhTJ@Ahjsgx_W2kb8=I>(z2yNy#cp zd)|}?zvh7)Z_QXIWw*JNHTN%OYs6|cu(33Y!EN3b*adSvsOsKYAMo&@iHZ1AN1*iI zmw-O^mpiCu?RW>3h0w4vcIJ8O(7w~hY3;GNPEb^}nw4+E>eUu|q*Z>Ha}N-*Pe2^F zvZjb@_q&;%DhEd2x88vAj2M;Nxu_#)GYWg4EmgWH7f?%yAp#P-<*&;bb&XjT^#|cd zO^^G)?I0grqVRl4+9g8Ft1azP*^XOCyo~N=^LOUleUBE z@kM%M&IQy^-KU*?25beoES|sSAe$o4`?Z6|ZMJEZ_@-B4`E2fiXch_8vkdueLYriN z+Kg{yIW3aK5u8^*J&=pjHGnz$=mrj>YI~72yX7Wavjr~15V=>6R#tD3Bd1I$k(AFy zIs7BKLz3|C)83O?@d$4KLDMj~b zx*0qMM$A7$X2y@4NvFFJKBXA#yu2cUp#k|+GhW`kTBfG|ebc38>orm*uRLei$8evf zZOD)J&GIIJ!^#9>#02Jv9n>zwTgHgx(=s62pvz;u*=E11&HX5_dF4V@+AE<>8y?$l zMdT>$Kyw8oJD>BXGq;bs;1FFnivy!%&%5k4rq8!XKtHF+r2lNbTGKUguv<0-t9=OaQG4)LQaubaUU^rYf>M(X#o!FQ z!2x%|=e5+;(9gAryv#`Cj`m-9Tm$*I`CgRY0I6(jc2_Vzs}p{6zXLnG3Ys96k)Q}x z1#lM|&@=Sn3Ii;mfX%)0rM>z*M*eoBDUTdb?epZXQRJEeQ?@WJaR2t%P6?7{Zk#^& zgaB2Ph_#ezQlfKWcy_c%%|s!Vb_LXWsRccECxjS@!XVo}Hob?EZoRV78GN_$bZ=$Y zwrtqcYF{Jrg>;%+B9<5=U2>`6PVA|>?;xVRtg75E=p}6u#PCWNohrRS(wmn99xmOg z&-GXT!JJbH-;ZGmE6T}+_jrsAQFxI96{nZ)9WE`K4Yj;ayZYpNasNHnEjPzHVJBet zw14;JNWTr@=24Ec>T%l&ZFA_!w8+VO4`{-X9^4U7gCNx-!s3Oaoz=(H#USXWije;=JMUI&vwi^v#ta3xHdkZzam%+tV( zy%jzoC!^(KUyW2iP(O8V|JBsx!f#;^w`X-E$jAJ$dCPF&YE_x3ilYm(>SN|T$@{PP%a3dKR&1@x zptHV77Xx}sap`mIca+6)UQK>H;!h`#X z%MvuOlvhvO%5av&8@DG)_Pn{kUNhz@F1hj-YVvdXa`bCq>us_o_9H*1i)_3BIdI@4 z+}oAO!s#+(p=N>B{J;(Nz_DbOPKFo0$I-t3ZLY@R|Aj!$XS&1{ttKB>vJ#!`nu~Fas>tF`ILtmTM^*RZE znBm}Kx7W?fAx7PAejbH7aDO^NGjyu7cW2J`yNK_j$*_$xC3U_bPmXke9>4UZQPPTw zw~%LV_}o6BxklV|TkhD&>IsCveiX10qcYS=^|RR2OU#xj9jBe}bI1~}yXxsOjp@PJ zzn%aUiI;9sK23dHg(Z@~b_OHwHTOfAeFSVDimsb-ie-vKTb}7hCp;Rk$m$CA@*N-E z4t~JTrO~1X$0ifWo(KRQa98fqpz>dbuj?Mw6?y39K`J->6^D?IgxzNG3g?y(F4S!= zvt}PH+;$YnzQ)YmXyfRD7hRU9lnF0B7JI&)iE~-dOV*44g6q>>p!l0ak z1n(voo@W{-YpyAez0Le|vYezCCMkD)z$kl3CJGSa4I7$^+kC3ES?sgW#6cT^z0&(< zQHDh9YZRDrt&fsn6?^KK5voqr&d+&ioXA5wD(5wiL}EcKg~QQ&AK z*fdi+1sNy;Rw(CQ(tnbJ8kDx=@Foz5H%l3`)<@EZ_X~(xO@e$xe_8!`;bT_$uTLy= zTJBQ?iy11iYv!?p4_ZADVeEfMCW@^Eg3RwOC!V@arXJD+v!Uz%V@U?eQ2^uuYco+| zf&!kaL4)69t^4%7)ayBRF#NH-L`fyU4|pZEd)vUSZ9piZ17LW-SLT5$6#;kRH8_el z@d$bECN9?sl&lu~*jyT47g_ zE!A+S7Vqo92h+Ua>mY-oOXug{q?QL03}MzjsEaVpwSVOb7$jg@b0pyNrBA%IxK1j{#;P8SMp*SG1CKjYMO#`KqPYw-c5J?p*7) z?!$&kn{c#byTz@2BsnniZ|?*Gr^e#-){8-c?ir{pUTZ$~=speWT!h&s>D$k|_bYk6 zUgL*oJ zy|GrNeBGFn&AvqQo ztHAA1?mq?e1wu#)Y090UeH>0dA1iZ4Kbj$Q)6-p)qw;?`L&o;pfTz79Eq=!oIN0n` zcv%a9Nt)(1R6;Z%_X3n!dEgyMQ_MoWEOqkY_IJcoO_~78FHNNO?q96b<#^;EA{3g- z#R6QSfCFYM>oRoaa!PuI`=1d5D{SX(J9!@WOJXw(|9s>9*^mp+4?19_P4wf%CWZah zgDc7NGEm$yvl-lvDF z<9d7cJ{hz8S!roa8KD=RZpZsia*+$+-!c16=zc5SObUq1ccuX?4nF#mJ4w&jqKcrc z*{!QiN#P|W{wyp_{0)0L=0OsFX7IZ6gK6Wb``Y9n1F3&7gpB!RiP;~7WLY)yKAm0{ z!CE@aR5}1l!?|^|K#rLX1*2{N)<8u*aS9SVlWQSr#uf>wxLKwXnHgb-?HiSa;*-@-py$Tak>szbto$?lx7wrZF=R z8b1M89Qa9lT}Zlj^ZFtss+ZMZ#(3)8RK)9=@Ux|5C2;~L;2Z4!p+T}&&z&6np0<0a z``S-Cp;FK|vGoHBNT73$g(9AZ=wYIXfqz>92Ec|+pD!^m!};>Bo^b(i821U2O@kS5 z3HJSfU<&lC@@2-MeNXate30tZOH-1(*^<3*6_G}FgV5_hBU^X-g`*3b7fI&DY`9zo ze=%~!)Ka5t<~hCMw2yFV#SGKJ!I&h#m4g-o|Gjd$iY8%-_`pU(f}bllEt5RrgK!E} zlFGe&#ji2_V!M_FPR?Oc1qG~r=p_SV~Fx( z{<0<<@{{EA1&1vE@$wC+Wx4$&9pl2c3*}GRJ?QVG|2H6i+ifv>yh)tjx{!YqJB~ zstgX7g7peQW)KHW8L~jbRsHjKn=bWx7DZ>>MQ0I)wMoqKDS=9v(6%nY*#_SHpKl!V zB37pVLO$_#b$-j9aoB z@1WfJ7=mY`y&j1nnEkjtvzS%wm`;9`%kkKT=mQ6bgd3f-lHYMb|f$GqqCAJk+zWcw{Rb!AB!L97lU)}$u z=-=11cg`f1{P10nE7*E?EL+p|v%d>Zxo!1>ypJR~W2;JH;!+R?e09?CfZHHdmRQFZ zfSUnAPy}uG&8)KL&5K4NKGp!6rN|*jcKQ@{RQvJq6}siNnR;t7=1JUh4|ye6!1HOY zV{3fSf5eyR$J4ToM0q!GAtR%SNmm|}JfO@>l7sJ_Ir_Pi+*f@L=A=jdjKd0^u}@Pe zjsX9*Rz|8{jFO0Y9ug9IAV%^+0A#S`ivI^YX#|i@m{P(!1|85FMyEv|e>`80)}{fQ zMk8+DO5=YwBryqY@)aCud&##|${>?7=o#_he~p;~{h~Qe!+dk0ITVFjZRZ&~wMU8< z4qs`G>sgoQUodk;h|TUpQ22XFqc!nH*}0lMzv1x*J0?q|q4 zCoV4-+3!u1YHrNo&Zp+21}DEon={bWO*;XMI}deRn2ecy8c3`b-w=4P#1&$kkRPWA zIO~urYE@`cul>b{`Pqbk%o51Q^U~RHpySl$z84^ch3Yra5F0uw(Hf(`J7yA|uF>l$ znrr^qZV&EBd)O79l@w3_{6i_mfQg5mWa-n1!(!-UG`Y-~JDq8))mx`Bt2hHOx3vs z>bQG3cNu-02OHwEcIGF$(X1*!L5x{As&i3T&vOUuM>gxNn(=OEdg}HMd_y6?MMb-@ z5+>Y5#{ld%^b+}$b^7_q&Z>$-iLN84|>z&R?k z#p9d^JI$2mXA&+!sqD6z7JI;R%;3pi^<0oF}l{bqb26u5%YIOUpANb5_J!Uwp@!{MleALVlLh(6$=WQC&*Z;PGvjxt zDczKQ!?Ri%0DQzIOvB@$y1gaGa{%=ja9=*KygRf;GF|D0?APxkC~EbSU1H%aXMg7h zim^`T@&8x${wXy+n*ix+HZ7LmbNGrc5Z<-Z>>+l2py3KAj`1?|Zr&nD(?SyUu8mr1 zxG$BDosn|9Zd_<(v_UDxrEcn7+cNK+RRc-){=-^DDfI;^*P8mzGuPH`DN1VQTo>EM zMz~k!gM1SH!BPVLcr!;k=*)r5F~?{VZ)t31KvziG#lUhZ?}1d+{|$t5%XsE0kE9Us zk&O}It9|mW-?Y9d}p-Xi6 zoc&E?BVTzPK0&0?Lcj?p+;T-TAM%f2H@E3l-Ut#gPE1C$pS>KrgN;qRqpQ+Y%Pv9sICnQs6e{kpdI!n{D{8Yw0AbiHfY zKbG5KSRCBLm#i0TQBE7l;pAR=JBn<$9-*0vL#aKZde>%=qkgd z&AdM0HOqaRp@QJ7kE)jM714Y@Q6R;h(~Dwhiv$2h=fmY2wC};6 zs6TN$?YBN*N%NpHHL`r(5+h%@z} zilvZtvQAnoF@@@pm~t^{}#AB;&Cz5>$SUm0KZgamwPn22w0Ii{1*H-)WHl%0D2(I0#L-j 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%0AeAqLweGhBhjWuKV1wQd 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�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 diff --git a/planning/autoware_static_centerline_generator/msg/PointsWithLaneId.msg b/planning/autoware_static_centerline_generator/msg/PointsWithLaneId.msg deleted file mode 100644 index 97cd0355df831..0000000000000 --- a/planning/autoware_static_centerline_generator/msg/PointsWithLaneId.msg +++ /dev/null @@ -1,2 +0,0 @@ -int64 lane_id -geometry_msgs/Point[] points diff --git a/planning/autoware_static_centerline_generator/package.xml b/planning/autoware_static_centerline_generator/package.xml deleted file mode 100644 index cea18e5605921..0000000000000 --- a/planning/autoware_static_centerline_generator/package.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - - autoware_static_centerline_generator - 0.40.0 - The autoware_static_centerline_generator package - Takayuki Murooka - Kosuke Takeuchi - Apache License 2.0 - - Takayuki Murooka - - ament_cmake_auto - autoware_cmake - - rosidl_default_generators - - autoware_behavior_path_planner_common - autoware_geography_utils - autoware_global_parameter_loader - autoware_interpolation - autoware_lanelet2_extension - autoware_lanelet2_map_visualizer - autoware_map_loader - autoware_map_msgs - autoware_map_projection_loader - autoware_map_tf_generator - autoware_mission_planner - autoware_motion_utils - autoware_osqp_interface - autoware_path_optimizer - autoware_path_smoother - autoware_perception_msgs - autoware_planning_msgs - autoware_route_handler - autoware_universe_utils - autoware_vehicle_info_utils - geometry_msgs - rclcpp - rclcpp_components - - python3-flask-cors - rosidl_default_runtime - - ament_cmake_gmock - ament_lint_auto - autoware_behavior_path_planner - autoware_behavior_velocity_planner - autoware_lint_common - ros_testing - - rosidl_interface_packages - - - ament_cmake - - diff --git a/planning/autoware_static_centerline_generator/rviz/static_centerline_generator.rviz b/planning/autoware_static_centerline_generator/rviz/static_centerline_generator.rviz deleted file mode 100644 index f1bd110783009..0000000000000 --- a/planning/autoware_static_centerline_generator/rviz/static_centerline_generator.rviz +++ /dev/null @@ -1,459 +0,0 @@ -Panels: - - Class: rviz_common/Displays - Help Height: 0 - Name: Displays - Property Tree Widget: - Expanded: ~ - Splitter Ratio: 0.550000011920929 - Tree Height: 386 - - Class: rviz_common/Selection - Name: Selection - - Class: rviz_common/Tool Properties - Expanded: - - /2D Dummy Car1 - Name: Tool Properties - Splitter Ratio: 0.5886790156364441 - - Class: rviz_common/Views - Expanded: - - /Current View1 - Name: Views - Splitter Ratio: 0.5 - - Class: rviz_common/Time - Experimental: false - Name: Time - SyncMode: 0 - SyncSource: "" - - Class: rviz_plugins::AutowareStatePanel - Name: AutowareStatePanel -Visualization Manager: - Class: "" - Displays: - - Class: rviz_common/Group - Displays: - - Class: rviz_default_plugins/TF - Enabled: false - Frame Timeout: 15 - Frames: - All Enabled: true - Marker Scale: 1 - Name: TF - Show Arrows: true - Show Axes: true - Show Names: true - Tree: - {} - Update Interval: 0 - Value: false - - Alpha: 0.5 - Cell Size: 1 - Class: rviz_default_plugins/Grid - Color: 160; 160; 164 - Enabled: false - Line Style: - Line Width: 0.029999999329447746 - Value: Lines - Name: Grid - Normal Cell Count: 0 - Offset: - X: 0 - Y: 0 - Z: 0 - Plane: XY - Plane Cell Count: 10 - Reference Frame: - Value: false - Enabled: false - Name: System - - Class: rviz_common/Group - Displays: - - Alpha: 0.20000000298023224 - Autocompute Intensity Bounds: true - Autocompute Value Bounds: - Max Value: 28.71826171875 - Min Value: -7.4224700927734375 - Value: true - Axis: Z - Channel Name: intensity - Class: rviz_default_plugins/PointCloud2 - Color: 255; 255; 255 - Color Transformer: FlatColor - Decay Time: 0 - Enabled: true - Invert Rainbow: false - Max Color: 255; 255; 255 - Max Intensity: 237 - Min Color: 211; 215; 207 - Min Intensity: 0 - Name: PointCloudMap - Position Transformer: XYZ - Selectable: false - Size (Pixels): 1 - Size (m): 0.019999999552965164 - Style: Points - Topic: - Depth: 5 - Durability Policy: Transient Local - Filter size: 10 - History Policy: Keep Last - Reliability Policy: Reliable - Value: /map/pointcloud_map - Use Fixed Frame: true - Use rainbow: false - Value: true - - Class: rviz_default_plugins/MarkerArray - Enabled: true - Name: Lanelet2VectorMap - Namespaces: - center_lane_line: true - center_line_arrows: true - lane_start_bound: false - lanelet_id: false - left_lane_bound: true - right_lane_bound: true - road_lanelets: false - Topic: - Depth: 5 - Durability Policy: Transient Local - History Policy: Keep Last - Reliability Policy: Reliable - Value: /map/vector_map_marker - Value: true - Enabled: true - Name: Map - - Class: rviz_plugins/PathWithLaneId - Color Border Vel Max: 3 - Enabled: false - Name: Raw Centerline - Topic: - Depth: 5 - Durability Policy: Transient Local - Filter size: 10 - History Policy: Keep Last - Reliability Policy: Reliable - Value: /static_centerline_generator/input_centerline - Value: true - View Drivable Area: - Alpha: 0.9990000128746033 - Color: 0; 148; 205 - Value: true - Width: 0.30000001192092896 - View Footprint: - Alpha: 1 - Color: 230; 230; 50 - Offset from BaseLink: 0 - Rear Overhang: 1.0299999713897705 - Value: true - Vehicle Length: 4.769999980926514 - Vehicle Width: 1.8300000429153442 - View LaneId: - Scale: 0.10000000149011612 - Value: false - View Path: - Alpha: 1 - Color: 0; 0; 0 - Constant Color: false - Value: false - Width: 2 - View Point: - Alpha: 1 - Color: 0; 60; 255 - Offset: 0 - Radius: 0.10000000149011612 - Value: false - View Text Velocity: - Scale: 0.30000001192092896 - Value: false - View Velocity: - Alpha: 1 - Color: 0; 0; 0 - Constant Color: false - Scale: 0.30000001192092896 - Value: false - - Class: rviz_plugins/Trajectory - Color Border Vel Max: 3 - Enabled: true - Name: Optimized Centerline - Topic: - Depth: 5 - Durability Policy: Transient Local - Filter size: 10 - History Policy: Keep Last - Reliability Policy: Reliable - Value: /static_centerline_generator/output/centerline - Value: true - View Footprint: - Alpha: 0.5 - Color: 0; 255; 0 - Offset from BaseLink: 0 - Rear Overhang: 1.0299999713897705 - Value: true - Vehicle Length: 4.769999980926514 - Vehicle Width: 1.8300000429153442 - View Path: - Alpha: 1 - Color: 0; 0; 0 - Constant Color: false - Value: false - Width: 2 - View Point: - Alpha: 1 - Color: 0; 60; 255 - Offset: 0 - Radius: 0.10000000149011612 - Value: false - View Text Velocity: - Scale: 0.30000001192092896 - Value: false - View Velocity: - Alpha: 1 - Color: 0; 0; 0 - Constant Color: false - Scale: 0.30000001192092896 - Value: false - - Class: rviz_common/Group - Displays: - - Class: rviz_plugins/Path - Color Border Vel Max: 3 - Enabled: false - Name: Raw Centerline (Path type) - Topic: - Depth: 5 - Durability Policy: Transient Local - Filter size: 10 - History Policy: Keep Last - Reliability Policy: Reliable - Value: /static_centerline_generator/debug/raw_centerline - Value: false - View Drivable Area: - Alpha: 0.9990000128746033 - Color: 0; 148; 205 - Value: true - Width: 0.30000001192092896 - View Footprint: - Alpha: 1 - Color: 230; 230; 50 - Offset from BaseLink: 0 - Rear Overhang: 1.0299999713897705 - Value: true - Vehicle Length: 4.769999980926514 - Vehicle Width: 1.8300000429153442 - View Path: - Alpha: 1 - Color: 0; 0; 0 - Constant Color: false - Value: true - Width: 2 - View Point: - Alpha: 1 - Color: 0; 60; 255 - Offset: 0 - Radius: 0.10000000149011612 - Value: false - View Text Velocity: - Scale: 0.30000001192092896 - Value: false - View Velocity: - Alpha: 1 - Color: 0; 0; 0 - Constant Color: false - Scale: 0.30000001192092896 - Value: true - - Class: rviz_default_plugins/MarkerArray - Enabled: true - Name: MarkerArray - Namespaces: - {} - Topic: - Depth: 5 - Durability Policy: Transient Local - History Policy: Keep Last - Reliability Policy: Reliable - Value: /static_centerline_generator/output/validation_results - Value: true - - Class: rviz_default_plugins/MarkerArray - Enabled: true - Name: Debug Markers - Namespaces: - curvature: false - Topic: - Depth: 5 - Durability Policy: Transient Local - History Policy: Keep Last - Reliability Policy: Reliable - Value: /static_centerline_generator/debug/markers - Value: true - - Class: rviz_default_plugins/MarkerArray - Enabled: false - Name: MarkerArray - Namespaces: - {} - Topic: - Depth: 5 - Durability Policy: Transient Local - History Policy: Keep Last - Reliability Policy: Reliable - Value: /static_centerline_generator/debug/ego_footprint_bounds - Value: true - Enabled: true - Name: debug - Enabled: true - Global Options: - Background Color: 10; 10; 10 - Fixed Frame: map - Frame Rate: 30 - Name: root - Tools: - - Class: rviz_default_plugins/Interact - Hide Inactive Objects: true - - Class: rviz_default_plugins/MoveCamera - - Class: rviz_default_plugins/Select - - Class: rviz_default_plugins/FocusCamera - - Class: rviz_default_plugins/Measure - Line color: 128; 128; 0 - - Class: rviz_default_plugins/SetInitialPose - Covariance x: 0.25 - Covariance y: 0.25 - Covariance yaw: 0.06853891909122467 - Topic: - Depth: 5 - Durability Policy: Volatile - History Policy: Keep Last - Reliability Policy: Reliable - Value: /initialpose - - Class: rviz_default_plugins/SetGoal - Topic: - Depth: 5 - Durability Policy: Volatile - History Policy: Keep Last - Reliability Policy: Reliable - Value: /planning/mission_planning/goal - - Acceleration: 0 - Class: rviz_plugins/PedestrianInitialPoseTool - Interactive: false - Max velocity: 33.29999923706055 - Min velocity: -33.29999923706055 - Pose Topic: /simulation/dummy_perception_publisher/object_info - Target Frame: - Theta std deviation: 0.0872664600610733 - Velocity: 0 - X std deviation: 0.029999999329447746 - Y std deviation: 0.029999999329447746 - Z position: 1 - Z std deviation: 0.029999999329447746 - - Acceleration: 0 - Class: rviz_plugins/CarInitialPoseTool - H vehicle height: 2 - Interactive: false - L vehicle length: 4 - Max velocity: 33.29999923706055 - Min velocity: -33.29999923706055 - Pose Topic: /simulation/dummy_perception_publisher/object_info - Target Frame: - Theta std deviation: 0.0872664600610733 - Velocity: 8 - W vehicle width: 1.7999999523162842 - X std deviation: 0.029999999329447746 - Y std deviation: 0.029999999329447746 - Z position: 0 - Z std deviation: 0.029999999329447746 - - Acceleration: 0 - Class: rviz_plugins/BusInitialPoseTool - H vehicle height: 3.5 - Interactive: false - L vehicle length: 10.5 - Max velocity: 33.29999923706055 - Min velocity: -33.29999923706055 - Pose Topic: /simulation/dummy_perception_publisher/object_info - Target Frame: - Theta std deviation: 0.0872664600610733 - Velocity: 0 - W vehicle width: 2.5 - X std deviation: 0.029999999329447746 - Y std deviation: 0.029999999329447746 - Z position: 0 - Z std deviation: 0.029999999329447746 - - Class: rviz_plugins/MissionCheckpointTool - Pose Topic: /planning/mission_planning/checkpoint - Theta std deviation: 0.2617993950843811 - X std deviation: 0.5 - Y std deviation: 0.5 - Z position: 0 - - Class: rviz_plugins/DeleteAllObjectsTool - Pose Topic: /simulation/dummy_perception_publisher/object_info - Transformation: - Current: - Class: rviz_default_plugins/TF - Value: true - Views: - Current: - Angle: 0 - Class: rviz_default_plugins/TopDownOrtho - Enable Stereo Rendering: - Stereo Eye Separation: 0.05999999865889549 - Stereo Focal Distance: 1 - Swap Stereo Eyes: false - Value: false - Invert Z Axis: false - Name: Current View - Near Clip Distance: 0.009999999776482582 - Scale: 10 - Target Frame: viewer - Value: TopDownOrtho (rviz_default_plugins) - X: 0 - Y: 0 - Saved: - - Class: rviz_default_plugins/ThirdPersonFollower - Distance: 18 - Enable Stereo Rendering: - Stereo Eye Separation: 0.05999999865889549 - Stereo Focal Distance: 1 - Swap Stereo Eyes: false - Value: false - Focal Point: - X: 0 - Y: 0 - Z: 0 - Focal Shape Fixed Size: true - Focal Shape Size: 0.05000000074505806 - Invert Z Axis: false - Name: ThirdPersonFollower - Near Clip Distance: 0.009999999776482582 - Pitch: 0.20000000298023224 - Target Frame: base_link - Value: ThirdPersonFollower (rviz) - Yaw: 3.141592025756836 - - Angle: 0 - Class: rviz_default_plugins/TopDownOrtho - Enable Stereo Rendering: - Stereo Eye Separation: 0.05999999865889549 - Stereo Focal Distance: 1 - Swap Stereo Eyes: false - Value: false - Invert Z Axis: false - Name: TopDownOrtho - Near Clip Distance: 0.009999999776482582 - Scale: 10 - Target Frame: viewer - Value: TopDownOrtho (rviz) - X: 0 - Y: 0 -Window Geometry: - AutowareStatePanel: - collapsed: false - Displays: - collapsed: false - Height: 1043 - Hide Left Dock: false - Hide Right Dock: false - QMainWindow State: 000000ff00000000fd00000004000000000000019200000357fc020000000efb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003e000001c0000000ca00fffffffc0000020400000191000000c40100001dfa000000000100000002fb0000000a0056006900650077007301000000000000033c0000010000fffffffb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000000ffffffff0000008a00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000c00430061006d0065007200610100000682000000eb0000000000000000fb0000000a0049006d0061006700650100000505000002680000000000000000fb0000002c0049006e0069007400690061006c0050006f007300650042007500740074006f006e00500061006e0065006c000000068f000000de0000007a00fffffffb0000002c0049006e0069007400690061006c0050006f007300650042007500740074006f006e00500061006e0065006c000000068f000000de0000000000000000fb00000030005200650063006f0067006e006900740069006f006e0052006500730075006c0074004f006e0049006d00610067006500000001d3000000af0000000000000000fb00000024004100750074006f00770061007200650053007400610074006500500061006e0065006c000000029b000000fb0000017c00ffffff000000010000015f000006fffc0200000002fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000e7a0000005afc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000007800000005afc0100000002fb0000000800540069006d00650100000000000007800000027100fffffffb0000000800540069006d00650100000000000004500000000000000000000005e80000035700000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 - Selection: - collapsed: false - Time: - collapsed: false - Tool Properties: - collapsed: false - Views: - collapsed: false - Width: 1920 - X: 0 - Y: 0 diff --git a/planning/autoware_static_centerline_generator/scripts/app.py b/planning/autoware_static_centerline_generator/scripts/app.py deleted file mode 100755 index 08bff8b80dcb7..0000000000000 --- a/planning/autoware_static_centerline_generator/scripts/app.py +++ /dev/null @@ -1,178 +0,0 @@ -#!/usr/bin/env python3 - -# 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. - -import json -import uuid - -from autoware_static_centerline_generator.srv import LoadMap -from autoware_static_centerline_generator.srv import PlanPath -from autoware_static_centerline_generator.srv import PlanRoute -from flask import Flask -from flask import jsonify -from flask import request -from flask_cors import CORS -import rclpy -from rclpy.node import Node - -rclpy.init() -node = Node("static_centerline_generator_http_server") - -app = Flask(__name__) -CORS(app) - - -def create_client(service_type, server_name): - # create client - cli = node.create_client(service_type, server_name) - while not cli.wait_for_service(timeout_sec=1.0): - print("{} service not available, waiting again...".format(server_name)) - return cli - - -@app.route("/map", methods=["POST"]) -def get_map(): - data = request.get_json() - - map_uuid = str(uuid.uuid4()) - global map_id - map_id = map_uuid - - # create client - cli = create_client(LoadMap, "/planning/static_centerline_generator/load_map") - - # request map loading - req = LoadMap.Request(map=data["map"]) - future = cli.call_async(req) - - # get result - rclpy.spin_until_future_complete(node, future) - res = future.result() - - # error handling - if res.message == "InvalidMapFormat": - return jsonify(code=res.message, message="Map format is invalid."), 400 - elif res.message != "": - return ( - jsonify( - code="InternalServerError", - message="Error occurred on the server. Please check the terminal.", - ), - 500, - ) - - return map_uuid - - -@app.route("/planned_route", methods=["GET"]) -def post_planned_route(): - args = request.args.to_dict() - global map_id - if map_id != args.get("map_id"): - # TODO(murooka) error handling for map_id mismatch - print("map_id is not correct.") - - # create client - cli = create_client(PlanRoute, "/planning/static_centerline_generator/plan_route") - - # request route planning - req = PlanRoute.Request( - start_lane_id=int(args.get("start_lane_id")), end_lane_id=int(args.get("end_lane_id")) - ) - future = cli.call_async(req) - - # get result - rclpy.spin_until_future_complete(node, future) - res = future.result() - - # error handling - if res.message == "MapNotFound": - return jsonify(code=res.message, message="Map is missing."), 404 - elif res.message == "RouteNotFound": - return jsonify(code=res.message, message="Planning route failed."), 404 - elif res.message != "": - return ( - jsonify( - code="InternalServerError", - message="Error occurred on the server. Please check the terminal.", - ), - 500, - ) - - return json.dumps(tuple(res.lane_ids)) - - -@app.route("/planned_path", methods=["GET"]) -def post_planned_path(): - args = request.args.to_dict() - global map_id - if map_id != args.get("map_id"): - # TODO(murooka) error handling for map_id mismatch - print("map_id is not correct.") - - # create client - cli = create_client(PlanPath, "/planning/static_centerline_generator/plan_path") - - # request path planning - route_lane_ids = [eval(i) for i in request.args.getlist("route[]")] - req = PlanPath.Request(route=route_lane_ids) - future = cli.call_async(req) - - # get result - rclpy.spin_until_future_complete(node, future) - res = future.result() - - # error handling - if res.message == "MapNotFound": - return jsonify(code=res.message, message="Map is missing."), 404 - elif res.message == "LaneletsNotConnected": - return ( - jsonify( - code=res.message, - message="Lanelets are not connected.", - object_ids=tuple(res.unconnected_lane_ids), - ), - 400, - ) - elif res.message != "": - return ( - jsonify( - code="InternalServerError", - message="Error occurred on the server. Please check the terminal.", - ), - 500, - ) - - # create output json - result_json = [] - for points_with_lane_id in res.points_with_lane_ids: - current_lane_points = [] - for geom_point in points_with_lane_id.points: - point = {"x": geom_point.x, "y": geom_point.y, "z": geom_point.z} - current_lane_points.append(point) - - current_result_json = {} - current_result_json["lane_id"] = int(points_with_lane_id.lane_id) - current_result_json["points"] = current_lane_points - - result_json.append(current_result_json) - - return json.dumps(tuple(result_json)) - - -if __name__ == "__main__": - app.debug = True - app.secret_key = "tmp_secret_key" - app.run(host="localhost", port=4010) diff --git a/planning/autoware_static_centerline_generator/scripts/centerline_updater_helper.py b/planning/autoware_static_centerline_generator/scripts/centerline_updater_helper.py deleted file mode 100755 index f3d908713361d..0000000000000 --- a/planning/autoware_static_centerline_generator/scripts/centerline_updater_helper.py +++ /dev/null @@ -1,207 +0,0 @@ -#!/bin/env python3 - -# 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. - - -import sys -import time - -from PyQt5 import QtCore -from PyQt5.QtWidgets import QApplication -from PyQt5.QtWidgets import QGroupBox -from PyQt5.QtWidgets import QMainWindow -from PyQt5.QtWidgets import QPushButton -from PyQt5.QtWidgets import QSizePolicy -from PyQt5.QtWidgets import QSlider -from PyQt5.QtWidgets import QVBoxLayout -from PyQt5.QtWidgets import QWidget -from autoware_planning_msgs.msg import Trajectory -import rclpy -from rclpy.node import Node -from rclpy.qos import QoSDurabilityPolicy -from rclpy.qos import QoSProfile -from std_msgs.msg import Empty -from std_msgs.msg import Float32 -from std_msgs.msg import Int32 - - -class CenterlineUpdaterWidget(QMainWindow): - def __init__(self): - super(self.__class__, self).__init__() - self.setupUI() - - def setupUI(self): - self.setObjectName("MainWindow") - self.resize(480, 120) - self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) - - central_widget = QWidget(self) - self.grid_layout = QVBoxLayout(central_widget) - self.grid_layout.setContentsMargins(10, 10, 10, 10) - - # slide of the trajectory's start and end index - self.traj_start_index_slider = QSlider(QtCore.Qt.Horizontal) - self.traj_end_index_slider = QSlider(QtCore.Qt.Horizontal) - self.min_traj_start_index = 0 - self.max_traj_end_index = None - - # Layout: Range of Centerline - centerline_vertical_box = QVBoxLayout(self) - centerline_vertical_box.addWidget(self.traj_start_index_slider) - centerline_vertical_box.addWidget(self.traj_end_index_slider) - centerline_group = QGroupBox("Centerline") - centerline_group.setLayout(centerline_vertical_box) - self.grid_layout.addWidget(centerline_group) - - """ - # 2. Road Boundary - road_boundary_group = QGroupBox("Road Boundary") - road_boundary_vertical_box = QVBoxLayout(self) - road_boundary_group.setLayout(road_boundary_vertical_box) - self.grid_layout.addWidget(road_boundary_group) - - # 2.1. Slider - self.road_boundary_lateral_margin_slider = QSlider(QtCore.Qt.Horizontal) - road_boundary_vertical_box.addWidget(self.road_boundary_lateral_margin_slider) - self.road_boundary_lateral_margin_ratio = 10 - self.road_boundary_lateral_margin_slider.setMinimum(0) - self.road_boundary_lateral_margin_slider.setMaximum( - 5 * self.road_boundary_lateral_margin_ratio - ) - road_boundary_vertical_box.addWidget(QPushButton("reset")) - """ - - # 3. General - general_group = QGroupBox("General") - general_vertical_box = QVBoxLayout(self) - general_group.setLayout(general_vertical_box) - self.grid_layout.addWidget(general_group) - - # 3.1. Validate Centerline - self.validate_button = QPushButton("validate") - self.validate_button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - general_vertical_box.addWidget(self.validate_button) - - # 3.2. Save Map - self.save_map_button = QPushButton("save map") - self.save_map_button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) - general_vertical_box.addWidget(self.save_map_button) - - self.setCentralWidget(central_widget) - - def initWithEndIndex(self, max_traj_end_index): - self.max_traj_end_index = max_traj_end_index - - # initialize sliders - self.traj_start_index_slider.setMinimum(self.min_traj_start_index) - self.traj_start_index_slider.setMaximum(self.max_traj_end_index) - self.traj_start_index_slider.setValue(self.min_traj_start_index) - - self.traj_end_index_slider.setMinimum(self.min_traj_start_index) - self.traj_end_index_slider.setMaximum(self.max_traj_end_index) - self.traj_end_index_slider.setValue(self.max_traj_end_index) - - -class CenterlineUpdaterHelper(Node): - def __init__(self): - super().__init__("centerline_updater_helper") - # Qt - self.widget = CenterlineUpdaterWidget() - self.widget.show() - self.widget.save_map_button.clicked.connect(self.onSaveMapButtonPushed) - self.widget.validate_button.clicked.connect(self.onValidateButtonPushed) - self.widget.traj_start_index_slider.valueChanged.connect(self.onStartIndexChanged) - self.widget.traj_end_index_slider.valueChanged.connect(self.onEndIndexChanged) - """ - self.widget.road_boundary_lateral_margin_slider.valueChanged.connect( - self.onRoadBoundaryLateralMargin - ) - """ - - # ROS - self.pub_save_map = self.create_publisher(Empty, "/static_centerline_generator/save_map", 1) - self.pub_validate = self.create_publisher(Empty, "/static_centerline_generator/validate", 1) - self.pub_traj_start_index = self.create_publisher( - Int32, "/static_centerline_generator/traj_start_index", 1 - ) - self.pub_traj_end_index = self.create_publisher( - Int32, "/static_centerline_generator/traj_end_index", 1 - ) - self.pub_road_boundary_lateral_margin = self.create_publisher( - Float32, "/static_centerline_generator/road_boundary_lateral_margin", 1 - ) - - transient_local_qos = QoSProfile(depth=1, durability=QoSDurabilityPolicy.TRANSIENT_LOCAL) - self.sub_whole_centerline = self.create_subscription( - Trajectory, - "/static_centerline_generator/output/whole_centerline", - self.onWholeCenterline, - transient_local_qos, - ) - - while self.widget.max_traj_end_index is None: - rclpy.spin_once(self, timeout_sec=0.01) - time.sleep(0.1) - - def onWholeCenterline(self, whole_centerline): - self.widget.initWithEndIndex(len(whole_centerline.points) - 1) - - def onSaveMapButtonPushed(self, event): - msg = Empty() - self.pub_save_map.publish(msg) - - # NOTE: After saving the map, the generated centerline is written - # in original_map_ptr_ in static_centerline_generator_node. - # When saving the map again, another centerline is written without - # removing the previous centerline. - # Therefore, saving the map can be called only once. - self.widget.save_map_button.setEnabled(False) - - def onValidateButtonPushed(self, event): - msg = Empty() - self.pub_validate.publish(msg) - - def onStartIndexChanged(self, event): - msg = Int32() - msg.data = self.widget.traj_start_index_slider.value() - self.pub_traj_start_index.publish(msg) - - def onEndIndexChanged(self, event): - msg = Int32() - msg.data = self.widget.traj_end_index_slider.value() - self.pub_traj_end_index.publish(msg) - - def onRoadBoundaryLateralMargin(self, event): - msg = Float32() - msg.data = ( - self.widget.road_boundary_lateral_margin_slider.value() - / self.widget.road_boundary_lateral_margin_ratio - ) - self.pub_road_boundary_lateral_margin.publish(msg) - - -def main(args=None): - app = QApplication(sys.argv) - - rclpy.init(args=args) - node = CenterlineUpdaterHelper() - - while True: - app.processEvents() - rclpy.spin_once(node, timeout_sec=0.01) - - -if __name__ == "__main__": - main() diff --git a/planning/autoware_static_centerline_generator/scripts/show_lanelet2_map_diff.py b/planning/autoware_static_centerline_generator/scripts/show_lanelet2_map_diff.py deleted file mode 100755 index 00d06ca2213d1..0000000000000 --- a/planning/autoware_static_centerline_generator/scripts/show_lanelet2_map_diff.py +++ /dev/null @@ -1,139 +0,0 @@ -#!/bin/env python3 - -# 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. - -import argparse -from decimal import Decimal -import os -import subprocess -import xml.etree.ElementTree as ET - - -def sort_attributes(root): - for shallow_element in root: - # sort nodes - attrib = shallow_element.attrib - if len(attrib) > 1: - attributes = sorted(attrib.items()) - attrib.clear() - attrib.update(attributes) - if shallow_element.tag == "relation": - pass - - # sort the element in the tag - for deep_element in shallow_element: - attrib = deep_element.attrib - if len(attrib) > 1: - # adjust attribute order, e.g. by sorting - attributes = sorted(attrib.items()) - attrib.clear() - attrib.update(attributes) - - # sort tags - sorted_shallow_element = sorted(shallow_element, key=lambda x: x.items()) - if len(shallow_element) != 0: - # NOTE: This "tail" is related to the indent of the next tag - first_tail = shallow_element[0].tail - last_tail = shallow_element[-1].tail - for idx, val_shallow_element in enumerate(sorted_shallow_element): - shallow_element[idx] = val_shallow_element - if idx == len(shallow_element) - 1: - shallow_element[idx].tail = last_tail - else: - shallow_element[idx].tail = first_tail - - -def remove_diff_to_ignore(osm_root): - decimal_precision = 11 # for lat/lon values - - # remove attributes of the osm tag - osm_root.attrib.clear() - - # remove the MetaInfo tag generated by Vector Map Builder - if osm_root[0].tag == "MetaInfo": - osm_root.remove(osm_root[0]) - - # remove unnecessary attributes for diff - for osm_child in osm_root: - if osm_child.tag == "osm": - osm_child.attrib.pop("osm") - if "visible" in osm_child.attrib and osm_child.attrib["visible"]: - osm_child.attrib.pop("visible") - if "version" in osm_child.attrib and osm_child.attrib["version"]: - osm_child.attrib.pop("version") - if "action" in osm_child.attrib and osm_child.attrib["action"] == "modify": - osm_child.attrib.pop("action") - if "lat" in osm_child.attrib: - osm_child.attrib["lat"] = str( - Decimal(float(osm_child.attrib["lat"])).quantize(Decimal(f"1e-{decimal_precision}")) - ) - if "lon" in osm_child.attrib: - osm_child.attrib["lon"] = str( - Decimal(float(osm_child.attrib["lon"])).quantize(Decimal(f"1e-{decimal_precision}")) - ) - - -if __name__ == "__main__": - parser = argparse.ArgumentParser() - parser.add_argument( - "-s", "--sort-attributes", action="store_true", help="Sort attributes of LL2 maps" - ) - parser.add_argument( - "-i", - "--ignore-minor-attributes", - action="store_true", - help="Ignore minor attributes of LL2 maps which does not change the map's behavior", - ) - args = parser.parse_args() - - original_osm_file_name = "/tmp/autoware_static_centerline_generator/input/lanelet2_map.osm" - modified_osm_file_name = "/tmp/autoware_static_centerline_generator/output/lanelet2_map.osm" - - # load LL2 maps - original_osm_tree = ET.parse(original_osm_file_name) - original_osm_root = original_osm_tree.getroot() - modified_osm_tree = ET.parse(modified_osm_file_name) - modified_osm_root = modified_osm_tree.getroot() - - # sort attributes - if args.sort_attributes: - sort_attributes(modified_osm_root) - sort_attributes(original_osm_root) - - # ignore minor attributes - if args.ignore_minor_attributes: - remove_diff_to_ignore(original_osm_root) - remove_diff_to_ignore(modified_osm_root) - - # write LL2 maps - output_dir_path = "/tmp/autoware_static_centerline_generator/show_lanelet2_map_diff/" - os.makedirs(output_dir_path + "original/", exist_ok=True) - os.makedirs(output_dir_path + "modified/", exist_ok=True) - - original_osm_tree.write(output_dir_path + "original/lanelet2_map.osm") - modified_osm_tree.write(output_dir_path + "modified/lanelet2_map.osm") - - # show diff - print("[INFO] Show diff of following LL2 maps") - print(f" {output_dir_path + 'original/lanelet2_map.osm'}") - print(f" {output_dir_path + 'modified/lanelet2_map.osm'}") - subprocess.run( - [ - "diff", - output_dir_path + "original/lanelet2_map.osm", - output_dir_path + "modified/lanelet2_map.osm", - "--color", - ] - ) diff --git a/planning/autoware_static_centerline_generator/scripts/tmp/bag_ego_trajectory_based_centerline.sh b/planning/autoware_static_centerline_generator/scripts/tmp/bag_ego_trajectory_based_centerline.sh deleted file mode 100755 index c170e24e475d9..0000000000000 --- a/planning/autoware_static_centerline_generator/scripts/tmp/bag_ego_trajectory_based_centerline.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -ros2 launch autoware_static_centerline_generator static_centerline_generator.launch.xml centerline_source:="bag_ego_trajectory_base" mode:="GUI" lanelet2_input_file_path:="$HOME/autoware_map/sample_map/lanelet2_map.osm" bag_filename:="$(ros2 pkg prefix autoware_static_centerline_generator --share)/test/data/bag_ego_trajectory_turn-right.db3" vehicle_model:=lexus - -# ros2 launch autoware_static_centerline_generator static_centerline_generator.launch.xml centerline_source:="bag_ego_trajectory_base" mode:="GUI" lanelet2_input_file_path:="$HOME/autoware_map/sample_map/lanelet2_map.osm" bag_filename:="$(ros2 pkg prefix autoware_static_centerline_generator --share)/test/data/bag_ego_trajectory_turn-left-right.db3" vehicle_model:=lexus diff --git a/planning/autoware_static_centerline_generator/scripts/tmp/optimization_trajectory_based_centerline.sh b/planning/autoware_static_centerline_generator/scripts/tmp/optimization_trajectory_based_centerline.sh deleted file mode 100755 index 488091989d1fa..0000000000000 --- a/planning/autoware_static_centerline_generator/scripts/tmp/optimization_trajectory_based_centerline.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -ros2 launch autoware_static_centerline_generator static_centerline_generator.launch.xml centerline_source:="optimization_trajectory_base" run_background:=false lanelet2_input_file_path:="$HOME/autoware_map/sample_map/lanelet2_map.osm" start_lanelet_id:=125 end_lanelet_id:=132 vehicle_model:=lexus diff --git a/planning/autoware_static_centerline_generator/src/centerline_source/bag_ego_trajectory_based_centerline.cpp b/planning/autoware_static_centerline_generator/src/centerline_source/bag_ego_trajectory_based_centerline.cpp deleted file mode 100644 index dc950f190652b..0000000000000 --- a/planning/autoware_static_centerline_generator/src/centerline_source/bag_ego_trajectory_based_centerline.cpp +++ /dev/null @@ -1,86 +0,0 @@ -// 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 "centerline_source/bag_ego_trajectory_based_centerline.hpp" - -#include "rclcpp/serialization.hpp" -#include "rosbag2_cpp/reader.hpp" -#include "static_centerline_generator_node.hpp" - -#include - -#include -#include -#include - -namespace autoware::static_centerline_generator -{ -std::vector generate_centerline_with_bag(rclcpp::Node & node) -{ - const auto bag_filename = node.declare_parameter("bag_filename"); - - // open rosbag - rosbag2_cpp::Reader bag_reader; - bag_reader.open(bag_filename); - - // extract 2D position of ego's trajectory from rosbag - rclcpp::Serialization bag_serialization; - std::vector centerline_traj_points; - while (bag_reader.has_next()) { - const rosbag2_storage::SerializedBagMessageSharedPtr msg = bag_reader.read_next(); - - if (msg->topic_name != "/localization/kinematic_state") { - continue; - } - - rclcpp::SerializedMessage serialized_msg(*msg->serialized_data); - const auto ros_msg = std::make_shared(); - - bag_serialization.deserialize_message(&serialized_msg, ros_msg.get()); - - if (!centerline_traj_points.empty()) { - constexpr double epsilon = 1e-1; - if ( - std::abs(centerline_traj_points.back().pose.position.x - ros_msg->pose.pose.position.x) < - epsilon && - std::abs(centerline_traj_points.back().pose.position.y - ros_msg->pose.pose.position.y) < - epsilon) { - continue; - } - } - TrajectoryPoint centerline_traj_point; - centerline_traj_point.pose.position = ros_msg->pose.pose.position; - centerline_traj_points.push_back(centerline_traj_point); - } - - RCLCPP_INFO(node.get_logger(), "Extracted centerline from the bag."); - - // calculate rough orientation of centerline trajectory points - for (size_t i = 0; i < centerline_traj_points.size(); ++i) { - if (i == centerline_traj_points.size() - 1) { - if (i != 0) { - centerline_traj_points.at(i).pose.orientation = - centerline_traj_points.at(i - 1).pose.orientation; - } - } else { - const double yaw_angle = autoware::universe_utils::calcAzimuthAngle( - centerline_traj_points.at(i).pose.position, centerline_traj_points.at(i + 1).pose.position); - centerline_traj_points.at(i).pose.orientation = - autoware::universe_utils::createQuaternionFromYaw(yaw_angle); - } - } - - return centerline_traj_points; -} -} // namespace autoware::static_centerline_generator diff --git a/planning/autoware_static_centerline_generator/src/centerline_source/bag_ego_trajectory_based_centerline.hpp b/planning/autoware_static_centerline_generator/src/centerline_source/bag_ego_trajectory_based_centerline.hpp deleted file mode 100644 index 2275f88184c6f..0000000000000 --- a/planning/autoware_static_centerline_generator/src/centerline_source/bag_ego_trajectory_based_centerline.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// 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 CENTERLINE_SOURCE__BAG_EGO_TRAJECTORY_BASED_CENTERLINE_HPP_ -#define CENTERLINE_SOURCE__BAG_EGO_TRAJECTORY_BASED_CENTERLINE_HPP_ - -#include "rclcpp/rclcpp.hpp" -#include "type_alias.hpp" - -#include - -namespace autoware::static_centerline_generator -{ -std::vector generate_centerline_with_bag(rclcpp::Node & node); -} // namespace autoware::static_centerline_generator -#endif // CENTERLINE_SOURCE__BAG_EGO_TRAJECTORY_BASED_CENTERLINE_HPP_ 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 deleted file mode 100644 index 51725fb8a3799..0000000000000 --- a/planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.cpp +++ /dev/null @@ -1,187 +0,0 @@ -// 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 "centerline_source/optimization_trajectory_based_centerline.hpp" - -#include "autoware/motion_utils/resample/resample.hpp" -#include "autoware/motion_utils/trajectory/conversion.hpp" -#include "autoware/path_optimizer/node.hpp" -#include "autoware/path_smoother/elastic_band_smoother.hpp" -#include "autoware/universe_utils/ros/parameter.hpp" -#include "static_centerline_generator_node.hpp" -#include "utils.hpp" - -#include -#include - -namespace autoware::static_centerline_generator -{ -namespace -{ -rclcpp::NodeOptions create_node_options() -{ - return rclcpp::NodeOptions{}; -} - -Path convert_to_path(const PathWithLaneId & path_with_lane_id) -{ - Path path; - path.header = path_with_lane_id.header; - path.left_bound = path_with_lane_id.left_bound; - path.right_bound = path_with_lane_id.right_bound; - for (const auto & point : path_with_lane_id.points) { - path.points.push_back(point.point); - } - - return path; -} - -Trajectory convert_to_trajectory(const Path & path) -{ - Trajectory traj; - for (const auto & point : path.points) { - TrajectoryPoint traj_point; - traj_point.pose = point.pose; - traj_point.longitudinal_velocity_mps = point.longitudinal_velocity_mps; - traj_point.lateral_velocity_mps = point.lateral_velocity_mps; - traj_point.heading_rate_rps = point.heading_rate_rps; - - traj.points.push_back(traj_point); - } - return traj; -} -} // namespace - -OptimizationTrajectoryBasedCenterline::OptimizationTrajectoryBasedCenterline(rclcpp::Node & node) -{ - pub_raw_path_with_lane_id_ = - node.create_publisher("input_centerline", utils::create_transient_local_qos()); - pub_raw_path_ = - node.create_publisher("debug/raw_centerline", utils::create_transient_local_qos()); -} - -std::vector -OptimizationTrajectoryBasedCenterline::generate_centerline_with_optimization( - rclcpp::Node & node, const RouteHandler & route_handler, - const std::vector & route_lane_ids) -{ - const auto route_lanelets = utils::get_lanelets_from_ids(route_handler, route_lane_ids); - - // optimize centerline inside the lane - const auto start_center_pose = utils::get_center_pose(route_handler, route_lane_ids.front()); - - // get ego nearest search parameters and resample interval in behavior_path_planner - const double ego_nearest_dist_threshold = - autoware::universe_utils::getOrDeclareParameter(node, "ego_nearest_dist_threshold"); - const double ego_nearest_yaw_threshold = - autoware::universe_utils::getOrDeclareParameter(node, "ego_nearest_yaw_threshold"); - const double behavior_path_interval = - autoware::universe_utils::getOrDeclareParameter(node, "output_path_interval"); - const double behavior_vel_interval = - autoware::universe_utils::getOrDeclareParameter(node, "behavior_output_path_interval"); - - // extract path with lane id from lanelets - const auto raw_path_with_lane_id = [&]() { - const auto non_resampled_path_with_lane_id = utils::get_path_with_lane_id( - route_handler, route_lanelets, start_center_pose, ego_nearest_dist_threshold, - ego_nearest_yaw_threshold); - return autoware::motion_utils::resamplePath( - non_resampled_path_with_lane_id, behavior_path_interval); - }(); - pub_raw_path_with_lane_id_->publish(raw_path_with_lane_id); - RCLCPP_INFO(node.get_logger(), "Calculated raw path with lane id and published."); - - // convert path with lane id to path - const auto raw_path = [&]() { - const auto non_resampled_path = convert_to_path(raw_path_with_lane_id); - return autoware::motion_utils::resamplePath(non_resampled_path, behavior_vel_interval); - }(); - pub_raw_path_->publish(raw_path); - RCLCPP_INFO(node.get_logger(), "Converted to path and published."); - - // smooth trajectory and road collision avoidance - const auto optimized_traj_points = optimize_trajectory(raw_path); - RCLCPP_INFO( - node.get_logger(), - "Smoothed trajectory and made it collision free with the road and published."); - - return optimized_traj_points; -} - -std::vector OptimizationTrajectoryBasedCenterline::optimize_trajectory( - const Path & raw_path) const -{ - // convert to trajectory points - const auto raw_traj_points = [&]() { - const auto raw_traj = convert_to_trajectory(raw_path); - return autoware::motion_utils::convertToTrajectoryPointArray(raw_traj); - }(); - - // create an instance of elastic band and model predictive trajectory. - const auto eb_path_smoother_ptr = - autoware::path_smoother::ElasticBandSmoother(create_node_options()).getElasticBandSmoother(); - const auto mpt_optimizer_ptr = - 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; - const int traj_segment_num = raw_traj_points.size() / valid_optimized_traj_points_num; - - // NOTE: num_initial_optimization exists to make the both optimizations stable since they may use - // warm start. - constexpr int num_initial_optimization = 2; - - std::vector whole_optimized_traj_points; - for (int virtual_ego_pose_idx = -num_initial_optimization; - virtual_ego_pose_idx < traj_segment_num; ++virtual_ego_pose_idx) { - // calculate virtual ego pose for the optimization - constexpr int virtual_ego_pose_offset_idx = 1; - const auto virtual_ego_pose = - raw_traj_points - .at( - valid_optimized_traj_points_num * std::max(virtual_ego_pose_idx, 0) + - virtual_ego_pose_offset_idx) - .pose; - - // 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); - - // road collision avoidance by model predictive trajectory in the autoware_path_optimizer - // package - 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); - - // connect the previously and currently optimized trajectory points - for (size_t j = 0; j < whole_optimized_traj_points.size(); ++j) { - const double dist = autoware::universe_utils::calcDistance2d( - whole_optimized_traj_points.at(j), optimized_traj_points.front()); - if (dist < 0.5) { - const std::vector extracted_whole_optimized_traj_points{ - whole_optimized_traj_points.begin(), - whole_optimized_traj_points.begin() + std::max(j, 1UL) - 1}; - whole_optimized_traj_points = extracted_whole_optimized_traj_points; - break; - } - } - for (size_t j = 0; j < optimized_traj_points.size(); ++j) { - whole_optimized_traj_points.push_back(optimized_traj_points.at(j)); - } - } - - return whole_optimized_traj_points; -} -} // namespace autoware::static_centerline_generator diff --git a/planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.hpp b/planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.hpp deleted file mode 100644 index 88def6fa7bd4c..0000000000000 --- a/planning/autoware_static_centerline_generator/src/centerline_source/optimization_trajectory_based_centerline.hpp +++ /dev/null @@ -1,43 +0,0 @@ -// 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 CENTERLINE_SOURCE__OPTIMIZATION_TRAJECTORY_BASED_CENTERLINE_HPP_ // NOLINT -#define CENTERLINE_SOURCE__OPTIMIZATION_TRAJECTORY_BASED_CENTERLINE_HPP_ // NOLINT - -#include "rclcpp/rclcpp.hpp" -#include "type_alias.hpp" - -#include - -namespace autoware::static_centerline_generator -{ -class OptimizationTrajectoryBasedCenterline -{ -public: - OptimizationTrajectoryBasedCenterline() = default; - explicit OptimizationTrajectoryBasedCenterline(rclcpp::Node & node); - std::vector generate_centerline_with_optimization( - rclcpp::Node & node, const RouteHandler & route_handler, - const std::vector & route_lane_ids); - -private: - std::vector optimize_trajectory(const Path & raw_path) const; - - rclcpp::Publisher::SharedPtr pub_raw_path_with_lane_id_{nullptr}; - rclcpp::Publisher::SharedPtr pub_raw_path_{nullptr}; -}; -} // namespace autoware::static_centerline_generator -// clang-format off -#endif // CENTERLINE_SOURCE__OPTIMIZATION_TRAJECTORY_BASED_CENTERLINE_HPP_ // NOLINT -// clang-format on diff --git a/planning/autoware_static_centerline_generator/src/main.cpp b/planning/autoware_static_centerline_generator/src/main.cpp deleted file mode 100644 index 71a076ee86fe0..0000000000000 --- a/planning/autoware_static_centerline_generator/src/main.cpp +++ /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. - -#include "static_centerline_generator_node.hpp" - -#include -#include -#include - -int main(int argc, char * argv[]) -{ - try { - rclcpp::init(argc, argv); - - // initialize node - rclcpp::NodeOptions node_options; - auto node = - std::make_shared( - node_options); - - // get ros parameter - const auto mode = node->declare_parameter("mode"); - - // process - if (mode == "AUTO") { - node->generate_centerline(); - node->validate(); - node->save_map(); - } else if (mode == "GUI") { - node->generate_centerline(); - } else if (mode == "VMB") { - // Do nothing - } else { - throw std::invalid_argument("The `mode` is invalid."); - } - - // NOTE: spin node to keep showing debug path/trajectory in rviz with transient local - rclcpp::spin(node); - rclcpp::shutdown(); - } catch (const std::exception & e) { - std::cerr << "Exception in main(): " << e.what() << std::endl; - return {}; - } catch (...) { - std::cerr << "Unknown exception in main()" << std::endl; - return {}; - } - return 0; -} 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 deleted file mode 100644 index f172e3e0cb1cd..0000000000000 --- a/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.cpp +++ /dev/null @@ -1,774 +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 "static_centerline_generator_node.hpp" - -#include "autoware/map_loader/lanelet2_map_loader_node.hpp" -#include "autoware/map_projection_loader/load_info_from_lanelet2_map.hpp" -#include "autoware/map_projection_loader/map_projection_loader.hpp" -#include "autoware/motion_utils/resample/resample.hpp" -#include "autoware/motion_utils/trajectory/conversion.hpp" -#include "autoware/motion_utils/trajectory/trajectory.hpp" -#include "autoware/universe_utils/geometry/geometry.hpp" -#include "autoware/universe_utils/math/unit_conversion.hpp" -#include "autoware/universe_utils/ros/parameter.hpp" -#include "autoware_lanelet2_extension/utility/message_conversion.hpp" -#include "autoware_lanelet2_extension/utility/query.hpp" -#include "autoware_lanelet2_extension/utility/utilities.hpp" -#include "autoware_static_centerline_generator/msg/points_with_lane_id.hpp" -#include "centerline_source/bag_ego_trajectory_based_centerline.hpp" -#include "type_alias.hpp" -#include "utils.hpp" - -#include -#include -#include -#include - -#include "std_msgs/msg/empty.hpp" -#include "std_msgs/msg/float32.hpp" -#include "std_msgs/msg/int32.hpp" - -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define RESET_TEXT "\x1B[0m" -#define RED_TEXT "\x1B[31m" -#define YELLOW_TEXT "\x1b[33m" -#define BOLD_TEXT "\x1B[1m" - -namespace autoware::static_centerline_generator -{ -namespace -{ -std::vector get_lane_ids_from_route(const LaneletRoute & route) -{ - std::vector lane_ids; - for (const auto & segment : route.segments) { - const auto & target_lanelet_id = segment.preferred_primitive.id; - lane_ids.push_back(target_lanelet_id); - } - - return lane_ids; -} - -lanelet::BasicPoint2d convert_to_lanelet_point(const geometry_msgs::msg::Point & geom_point) -{ - lanelet::BasicPoint2d point(geom_point.x, geom_point.y); - return point; -} - -LinearRing2d create_vehicle_footprint( - const geometry_msgs::msg::Pose & pose, - const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const double margin = 0.0) -{ - const auto & i = vehicle_info; - - const double x_front = i.front_overhang_m + i.wheel_base_m + margin; - const double x_rear = -(i.rear_overhang_m + margin); - const double y_left = i.wheel_tread_m / 2.0 + i.left_overhang_m + margin; - const double y_right = -(i.wheel_tread_m / 2.0 + i.right_overhang_m + margin); - - std::vector geom_points; - geom_points.push_back( - autoware::universe_utils::calcOffsetPose(pose, x_front, y_left, 0.0).position); - geom_points.push_back( - autoware::universe_utils::calcOffsetPose(pose, x_front, y_right, 0.0).position); - geom_points.push_back( - autoware::universe_utils::calcOffsetPose(pose, x_rear, y_right, 0.0).position); - geom_points.push_back( - autoware::universe_utils::calcOffsetPose(pose, x_rear, y_left, 0.0).position); - - LinearRing2d footprint; - for (const auto & geom_point : geom_points) { - footprint.push_back(Point2d{geom_point.x, geom_point.y}); - } - footprint.push_back(footprint.back()); - - boost::geometry::correct(footprint); - - return footprint; -} - -geometry_msgs::msg::Pose get_text_pose( - const geometry_msgs::msg::Pose & pose, - const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) -{ - const auto & i = vehicle_info; - - const double x_front = i.front_overhang_m + i.wheel_base_m; - const double y_left = i.wheel_tread_m / 2.0 + i.left_overhang_m + 0.5; - - return autoware::universe_utils::calcOffsetPose(pose, x_front, y_left, 0.0); -} - -std::array convert_hex_string_to_decimal(const std::string & hex_str_color) -{ - unsigned int hex_int_color; - std::istringstream iss(hex_str_color); - iss >> std::hex >> hex_int_color; - - unsigned int unit = 16 * 16; - unsigned int b = hex_int_color % unit; - unsigned int g = (hex_int_color - b) / unit % unit; - unsigned int r = (hex_int_color - g * unit - b) / unit / unit; - - return std::array{r / 255.0, g / 255.0, b / 255.0}; -} - -std::vector check_lanelet_connection( - const RouteHandler & route_handler, const lanelet::ConstLanelets & route_lanelets) -{ - std::vector unconnected_lane_ids; - - for (size_t i = 0; i < route_lanelets.size() - 1; ++i) { - const auto next_lanelets = route_handler.getNextLanelets(route_lanelets.at(i)); - - const bool is_connected = - std::find_if(next_lanelets.begin(), next_lanelets.end(), [&](const auto & next_lanelet) { - return next_lanelet.id() == route_lanelets.at(i + 1).id(); - }) != next_lanelets.end(); - if (!is_connected) { - unconnected_lane_ids.push_back(route_lanelets.at(i).id()); - } - } - - return unconnected_lane_ids; -} - -std_msgs::msg::Header create_header(const rclcpp::Time & now) -{ - std_msgs::msg::Header header; - header.frame_id = "map"; - header.stamp = now; - return header; -} - -std::vector resample_trajectory_points( - const std::vector & input_traj_points, const double resample_interval) -{ - // resample and calculate trajectory points' orientation - const auto input_traj = autoware::motion_utils::convertToTrajectory(input_traj_points); - auto resampled_input_traj = - autoware::motion_utils::resampleTrajectory(input_traj, resample_interval); - return autoware::motion_utils::convertToTrajectoryPointArray(resampled_input_traj); -} - -std::vector convertToGeometryPoints(const LineString2d & lanelet_points) -{ - std::vector points; - for (const auto & lanelet_point : lanelet_points) { - geometry_msgs::msg::Point point; - point.x = lanelet_point.x(); - point.y = lanelet_point.y(); - points.push_back(point); - } - return points; -} -} // namespace - -StaticCenterlineGeneratorNode::StaticCenterlineGeneratorNode( - const rclcpp::NodeOptions & node_options) -: Node("static_centerline_generator", node_options) -{ - // publishers - pub_map_bin_ = - create_publisher("lanelet2_map_topic", utils::create_transient_local_qos()); - pub_whole_centerline_ = - create_publisher("~/output/whole_centerline", utils::create_transient_local_qos()); - pub_centerline_ = - create_publisher("~/output/centerline", utils::create_transient_local_qos()); - - // debug publishers - pub_validation_results_ = - create_publisher("~/validation_results", utils::create_transient_local_qos()); - pub_debug_markers_ = - create_publisher("~/debug/markers", utils::create_transient_local_qos()); - - pub_debug_ego_footprint_bounds_ = create_publisher( - "~/debug/ego_footprint_bounds", utils::create_transient_local_qos()); - - // subscribers - sub_footprint_margin_for_road_bound_ = create_subscription( - "/static_centerline_generator/road_boundary_lateral_margin", rclcpp::QoS{1}, - [this](const std_msgs::msg::Float32 & msg) { footprint_margin_for_road_bound_ = msg.data; }); - sub_traj_start_index_ = create_subscription( - "/static_centerline_generator/traj_start_index", rclcpp::QoS{1}, - [this](const std_msgs::msg::Int32 & msg) { - if (centerline_handler_.update_start_index(msg.data)) { - visualize_selected_centerline(); - } - }); - sub_traj_end_index_ = create_subscription( - "/static_centerline_generator/traj_end_index", rclcpp::QoS{1}, - [this](const std_msgs::msg::Int32 & msg) { - if (centerline_handler_.update_end_index(msg.data)) { - visualize_selected_centerline(); - } - }); - sub_save_map_ = create_subscription( - "/static_centerline_generator/save_map", rclcpp::QoS{1}, - [this]([[maybe_unused]] const std_msgs::msg::Empty & msg) { - if (!centerline_handler_.is_valid()) { - return; - } - save_map(); - }); - sub_validate_ = create_subscription( - "/static_centerline_generator/validate", rclcpp::QoS{1}, - [this]([[maybe_unused]] const std_msgs::msg::Empty & msg) { validate(); }); - - // services - callback_group_ = create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive); - srv_load_map_ = create_service( - "/planning/static_centerline_generator/load_map", - std::bind( - &StaticCenterlineGeneratorNode::on_load_map, this, std::placeholders::_1, - std::placeholders::_2), - rmw_qos_profile_services_default, callback_group_); - srv_plan_route_ = create_service( - "/planning/static_centerline_generator/plan_route", - std::bind( - &StaticCenterlineGeneratorNode::on_plan_route, this, std::placeholders::_1, - std::placeholders::_2), - rmw_qos_profile_services_default, callback_group_); - srv_plan_path_ = create_service( - "/planning/static_centerline_generator/plan_path", - std::bind( - &StaticCenterlineGeneratorNode::on_plan_path, this, std::placeholders::_1, - std::placeholders::_2), - rmw_qos_profile_services_default, callback_group_); - - // vehicle info - vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); - - centerline_source_ = [&]() { - const auto centerline_source_param = declare_parameter("centerline_source"); - if (centerline_source_param == "optimization_trajectory_base") { - optimization_trajectory_based_centerline_ = OptimizationTrajectoryBasedCenterline(*this); - return CenterlineSource::OptimizationTrajectoryBase; - } else if (centerline_source_param == "bag_ego_trajectory_base") { - return CenterlineSource::BagEgoTrajectoryBase; - } - throw std::logic_error( - "The centerline source is not supported in autoware_static_centerline_generator."); - }(); -} - -void StaticCenterlineGeneratorNode::visualize_selected_centerline() -{ - // publish selected centerline - const auto selected_centerline = centerline_handler_.get_selected_centerline(); - pub_centerline_->publish( - autoware::motion_utils::convertToTrajectory(selected_centerline, create_header(this->now()))); - - // delete markers for validation - pub_validation_results_->publish(utils::create_delete_all_marker_array({}, now())); - pub_debug_markers_->publish(utils::create_delete_all_marker_array( - {"unsafe_footprints", "unsafe_footprints_distance"}, now())); - pub_debug_ego_footprint_bounds_->publish( - utils::create_delete_all_marker_array({"road_bounds"}, now())); -} - -void StaticCenterlineGeneratorNode::generate_centerline() -{ - // declare planning setting parameters - const auto lanelet2_input_file_path = declare_parameter("lanelet2_input_file_path"); - - // process - load_map(lanelet2_input_file_path); - const auto whole_centerline_with_route = generate_whole_centerline_with_route(); - centerline_handler_ = CenterlineHandler(whole_centerline_with_route); - - visualize_selected_centerline(); -} - -CenterlineWithRoute StaticCenterlineGeneratorNode::generate_whole_centerline_with_route() -{ - if (!route_handler_ptr_) { - RCLCPP_ERROR(get_logger(), "Route handler is not ready. Return empty trajectory."); - return CenterlineWithRoute{}; - } - - // generate centerline with route - auto centerline_with_route = [&]() { - if (centerline_source_ == CenterlineSource::OptimizationTrajectoryBase) { - const lanelet::Id start_lanelet_id = declare_parameter("start_lanelet_id"); - const lanelet::Id end_lanelet_id = declare_parameter("end_lanelet_id"); - const auto route_lane_ids = plan_route_by_lane_ids(start_lanelet_id, end_lanelet_id); - const auto optimized_centerline = - optimization_trajectory_based_centerline_.generate_centerline_with_optimization( - *this, *route_handler_ptr_, route_lane_ids); - return CenterlineWithRoute{optimized_centerline, route_lane_ids}; - } else if (centerline_source_ == CenterlineSource::BagEgoTrajectoryBase) { - const auto bag_centerline = generate_centerline_with_bag(*this); - const auto route_lane_ids = - plan_route(bag_centerline.front().pose, bag_centerline.back().pose); - return CenterlineWithRoute{bag_centerline, route_lane_ids}; - } - throw std::logic_error( - "The centerline source is not supported in autoware_static_centerline_generator."); - }(); - - // resample - const double output_trajectory_interval = declare_parameter("output_trajectory_interval"); - centerline_with_route.centerline = - resample_trajectory_points(centerline_with_route.centerline, output_trajectory_interval); - - pub_whole_centerline_->publish(autoware::motion_utils::convertToTrajectory( - centerline_with_route.centerline, create_header(this->now()))); - - return centerline_with_route; -} - -void StaticCenterlineGeneratorNode::load_map(const std::string & lanelet2_input_file_path) -{ - // copy the input LL2 map to the temporary file for debugging - const std::string debug_input_file_dir{"/tmp/autoware_static_centerline_generator/input/"}; - std::filesystem::create_directories(debug_input_file_dir); - std::filesystem::copy( - lanelet2_input_file_path, debug_input_file_dir + "lanelet2_map.osm", - std::filesystem::copy_options::overwrite_existing); - - // load map by the map_loader package - map_bin_ptr_ = [&]() -> LaneletMapBin::ConstSharedPtr { - // load map - map_projector_info_ = std::make_unique( - autoware::map_projection_loader::load_info_from_lanelet2_map(lanelet2_input_file_path)); - const auto map_ptr = autoware::map_loader::Lanelet2MapLoaderNode::load_map( - lanelet2_input_file_path, *map_projector_info_); - if (!map_ptr) { - return nullptr; - } - - // NOTE: The original map is stored here since the centerline will be added to all the - // lanelet when lanelet::utils::overwriteLaneletCenterline is called. - original_map_ptr_ = autoware::map_loader::Lanelet2MapLoaderNode::load_map( - lanelet2_input_file_path, *map_projector_info_); - - // overwrite more dense centerline - // NOTE: overwriteLaneletsCenterlineWithWaypoints is used only in real time calculation. - lanelet::utils::overwriteLaneletsCenterline(map_ptr, 5.0, false); - - // create map bin msg - const auto map_bin_msg = autoware::map_loader::Lanelet2MapLoaderNode::create_map_bin_msg( - map_ptr, lanelet2_input_file_path, now()); - - return std::make_shared(map_bin_msg); - }(); - - // check if map_bin_ptr_ is not null pointer - if (!map_bin_ptr_) { - RCLCPP_ERROR(get_logger(), "Loading map failed"); - return; - } - RCLCPP_INFO(get_logger(), "Loaded map."); - - // publish map bin msg - pub_map_bin_->publish(*map_bin_ptr_); - RCLCPP_INFO(get_logger(), "Published map."); - - // create route_handler - route_handler_ptr_ = std::make_shared(); - route_handler_ptr_->setMap(*map_bin_ptr_); -} - -void StaticCenterlineGeneratorNode::on_load_map( - const LoadMap::Request::SharedPtr request, const LoadMap::Response::SharedPtr response) -{ - const std::string tmp_lanelet2_input_file_path = "/tmp/input_lanelet2_map.osm"; - - // save map file temporarily since load map's input must be a file - std::ofstream map_writer; - map_writer.open(tmp_lanelet2_input_file_path, std::ios::out); - map_writer << request->map; - map_writer.close(); - - // load map from the saved map file - load_map(tmp_lanelet2_input_file_path); - - if (map_bin_ptr_) { - return; - } - - response->message = "InvalidMapFormat"; -} - -std::vector StaticCenterlineGeneratorNode::plan_route_by_lane_ids( - const lanelet::Id start_lanelet_id, const lanelet::Id end_lanelet_id) -{ - if (!route_handler_ptr_) { - RCLCPP_ERROR(get_logger(), "Map or route handler is not ready. Return empty lane ids."); - return std::vector{}; - } - - const auto start_center_pose = utils::get_center_pose(*route_handler_ptr_, start_lanelet_id); - const auto end_center_pose = utils::get_center_pose(*route_handler_ptr_, end_lanelet_id); - return plan_route(start_center_pose, end_center_pose); -} - -std::vector StaticCenterlineGeneratorNode::plan_route( - const geometry_msgs::msg::Pose & start_center_pose, - const geometry_msgs::msg::Pose & end_center_pose) -{ - if (!map_bin_ptr_) { - RCLCPP_ERROR(get_logger(), "Map or route handler is not ready. Return empty lane ids."); - return std::vector{}; - } - - // plan route by the mission_planner package - const auto route = [&]() { - // calculate check points - RCLCPP_INFO(get_logger(), "Calculated check points."); - const auto check_points = - std::vector{start_center_pose, end_center_pose}; - - // create mission_planner plugin - auto plugin_loader = pluginlib::ClassLoader( - "autoware_mission_planner", "autoware::mission_planner::PlannerPlugin"); - auto mission_planner = - plugin_loader.createSharedInstance("autoware::mission_planner::lanelet2::DefaultPlanner"); - - // initialize mission_planner - auto node = rclcpp::Node("mission_planner"); - mission_planner->initialize(&node, map_bin_ptr_); - - // plan route - const auto route = mission_planner->plan(check_points); - - return route; - }(); - - // get lanelets - const auto route_lane_ids = get_lane_ids_from_route(route); - - std::string route_lane_ids_str = ""; - for (const lanelet::Id route_lane_id : route_lane_ids) { - route_lane_ids_str += std::to_string(route_lane_id) + ","; - } - RCLCPP_INFO_STREAM(get_logger(), "Planned route. (" << route_lane_ids_str << ")"); - - return route_lane_ids; -} - -void StaticCenterlineGeneratorNode::on_plan_route( - const PlanRoute::Request::SharedPtr request, const PlanRoute::Response::SharedPtr response) -{ - if (!map_bin_ptr_ || !route_handler_ptr_) { - response->message = "MapNotFound"; - RCLCPP_ERROR(get_logger(), "Map is not ready."); - return; - } - - const lanelet::Id start_lanelet_id = request->start_lane_id; - const lanelet::Id end_lanelet_id = request->end_lane_id; - - // plan route - const auto route_lane_ids = plan_route_by_lane_ids(start_lanelet_id, end_lanelet_id); - const auto route_lanelets = utils::get_lanelets_from_ids(*route_handler_ptr_, route_lane_ids); - - // extract lane ids - std::vector lane_ids; - for (const auto & lanelet : route_lanelets) { - lane_ids.push_back(lanelet.id()); - } - - // check calculation result - if (lane_ids.empty()) { - response->message = "RouteNotFound"; - RCLCPP_ERROR(get_logger(), "Route planning failed."); - return; - } - - // set response - response->lane_ids = lane_ids; -} - -void StaticCenterlineGeneratorNode::on_plan_path( - const PlanPath::Request::SharedPtr request, const PlanPath::Response::SharedPtr response) -{ - if (!route_handler_ptr_) { - response->message = "MapNotFound"; - RCLCPP_ERROR(get_logger(), "Route handler is not ready."); - return; - } - - // get lanelets from route lane ids - const auto route_lane_ids = request->route; - const auto route_lanelets = utils::get_lanelets_from_ids(*route_handler_ptr_, route_lane_ids); - - // check if input route lanelets are connected to each other. - const auto unconnected_lane_ids = check_lanelet_connection(*route_handler_ptr_, route_lanelets); - if (!unconnected_lane_ids.empty()) { - response->message = "LaneletsNotConnected"; - response->unconnected_lane_ids = unconnected_lane_ids; - RCLCPP_ERROR(get_logger(), "Lanelets are not connected."); - return; - } - - // plan path - const auto optimized_traj_points = - optimization_trajectory_based_centerline_.generate_centerline_with_optimization( - *this, *route_handler_ptr_, route_lane_ids); - - // check calculation result - if (optimized_traj_points.empty()) { - response->message = "PathNotFound"; - RCLCPP_ERROR(get_logger(), "Path planning failed."); - return; - } - - centerline_handler_ = - CenterlineHandler(CenterlineWithRoute{optimized_traj_points, route_lane_ids}); - - // publish unsafe_footprints - validate(); - - // create output data - auto target_traj_point = optimized_traj_points.cbegin(); - bool is_end_lanelet = false; - for (const auto & lanelet : route_lanelets) { - std::vector current_lanelet_points; - - // check if target point is inside the lanelet - while (lanelet::geometry::inside( - lanelet, convert_to_lanelet_point(target_traj_point->pose.position))) { - // memorize points inside the lanelet - current_lanelet_points.push_back(target_traj_point->pose.position); - target_traj_point++; - - if (target_traj_point == optimized_traj_points.cend()) { - is_end_lanelet = true; - break; - } - } - - if (!current_lanelet_points.empty()) { - // register points with lane_id - autoware_static_centerline_generator::msg::PointsWithLaneId points_with_lane_id; - points_with_lane_id.lane_id = lanelet.id(); - points_with_lane_id.points = current_lanelet_points; - response->points_with_lane_ids.push_back(points_with_lane_id); - } - - if (is_end_lanelet) { - break; - } - } - - // empty string if error did not occur - response->message = ""; -} - -void StaticCenterlineGeneratorNode::validate() -{ - std::cerr << std::endl - << "############################################## Validation Results " - "##############################################" - << std::endl; - - const auto & centerline = centerline_handler_.get_selected_centerline(); - const auto & route_lane_ids = centerline_handler_.get_route_lane_ids(); - const auto route_lanelets = utils::get_lanelets_from_ids(*route_handler_ptr_, route_lane_ids); - - const double dist_thresh_to_road_border = - getRosParameter("validation.dist_threshold_to_road_border"); - const double max_steer_angle_margin = - getRosParameter("validation.max_steer_angle_margin"); - - // calculate color for distance to road border - const auto dist_thresh_vec = getRosParameter>("marker_color_dist_thresh"); - const auto marker_color_vec = getRosParameter>("marker_color"); - const auto get_marker_color = [&](const double dist) -> boost::optional> { - for (size_t i = 0; i < dist_thresh_vec.size(); ++i) { - const double dist_thresh = dist_thresh_vec.at(i); - if (dist < dist_thresh) { - return convert_hex_string_to_decimal(marker_color_vec.at(i)); - } - } - return boost::none; - }; - - // create right/left bound - LineString2d lanelet_right_bound; - LineString2d lanelet_left_bound; - for (const auto & lanelet : route_lanelets) { - for (const auto & point : lanelet.rightBound()) { - boost::geometry::append(lanelet_right_bound, Point2d(point.x(), point.y())); - } - for (const auto & point : lanelet.leftBound()) { - boost::geometry::append(lanelet_left_bound, Point2d(point.x(), point.y())); - } - } - - // calculate curvature - const auto curvature_vec = autoware::motion_utils::calcCurvature(centerline); - const double steer_angle_threshold = vehicle_info_.max_steer_angle_rad - max_steer_angle_margin; - - // calculate the distance between footprint and right/left bounds - MarkerArray marker_array; - double min_dist = std::numeric_limits::max(); - double max_curvature = std::numeric_limits::min(); - for (size_t i = 0; i < centerline.size(); ++i) { - const auto & traj_point = centerline.at(i); - - const auto footprint_poly = create_vehicle_footprint(traj_point.pose, vehicle_info_); - - const double dist_to_right = boost::geometry::distance(footprint_poly, lanelet_right_bound); - const double dist_to_left = boost::geometry::distance(footprint_poly, lanelet_left_bound); - const double min_dist_to_bound = std::min(dist_to_right, dist_to_left); - - if (min_dist_to_bound < min_dist) { - min_dist = min_dist_to_bound; - } - - // create marker - const auto marker_color_opt = get_marker_color(min_dist_to_bound); - const auto text_pose = get_text_pose(traj_point.pose, vehicle_info_); - if (marker_color_opt) { - const auto & marker_color = marker_color_opt.get(); - - // add footprint marker - const auto footprint_marker = utils::create_footprint_marker( - footprint_poly, 0.05, marker_color.at(0), marker_color.at(1), marker_color.at(2), 0.7, - now(), i); - marker_array.markers.push_back(footprint_marker); - - // add text of distance to bounds marker - const auto text_marker = utils::create_text_marker( - "unsafe_footprints_distance", text_pose, min_dist_to_bound, marker_color.at(0), - marker_color.at(1), marker_color.at(2), 0.999, now(), i); - marker_array.markers.push_back(text_marker); - } - - const double curvature = curvature_vec.at(i); - const auto text_marker = - utils::create_text_marker("curvature", text_pose, curvature, 0.05, 0.05, 0.0, 0.9, now(), i); - marker_array.markers.push_back(text_marker); - - if (max_curvature < std::abs(curvature)) { - max_curvature = std::abs(curvature); - } - } - const double max_steer_angle = vehicle_info_.calcSteerAngleFromCurvature(max_curvature); - - // publish road boundaries - const auto left_bound = convertToGeometryPoints(lanelet_left_bound); - const auto right_bound = convertToGeometryPoints(lanelet_right_bound); - - marker_array.markers.push_back( - utils::create_points_marker("left_bound", left_bound, 0.05, 0.0, 0.6, 0.8, 0.8, now())); - marker_array.markers.push_back( - utils::create_points_marker("right_bound", right_bound, 0.05, 0.0, 0.6, 0.8, 0.8, now())); - pub_debug_markers_->publish(marker_array); - - // show the validation results - // 1. distance from footprints to road boundaries - const bool are_footprints_inside_lanelets = [&]() { - std::cerr << "1. Footprints inside Lanelets:" << std::endl; - if (dist_thresh_to_road_border < min_dist) { - std::cerr << " The generated centerline is inside the lanelet. (threshold:" - << dist_thresh_to_road_border << "[m] < actual:" << min_dist << "[m])" << std::endl - << " Passed." << std::endl; - return true; - } - std::cerr << RED_TEXT - << " The generated centerline is outside the lanelet. (actual:" << min_dist - << "[m] <= threshold:" << dist_thresh_to_road_border << "[m])" << std::endl - << " Failed." << RESET_TEXT << std::endl; - return false; - }(); - // 2. centerline's curvature - std::cerr << "2. Curvature:" << std::endl; - const bool is_curvature_low = - true; // always tre for now since the curvature is just estimated and not enough precise. - if (max_steer_angle < steer_angle_threshold) { - std::cerr << " The generated centerline has no high steer angle. (estimated:" - << autoware::universe_utils::rad2deg(max_steer_angle) - << "[deg] < threshold:" << autoware::universe_utils::rad2deg(steer_angle_threshold) - << "[deg])" << std::endl - << " Passed." << std::endl; - } else { - std::cerr << YELLOW_TEXT << " The generated centerline has a too high steer angle. (threshold:" - << autoware::universe_utils::rad2deg(steer_angle_threshold) - << "[deg] <= estimated:" << autoware::universe_utils::rad2deg(max_steer_angle) - << "[deg])" << std::endl - << " However, the estimated steer angle is not enough precise, so the result is " - "conditional pass." - << std::endl - << " Conditionally Passed." << RESET_TEXT << std::endl; - } - // 3. result - std::cerr << std::endl << BOLD_TEXT << "Result:" << RESET_TEXT << std::endl; - if (are_footprints_inside_lanelets && is_curvature_low) { - std::cerr << BOLD_TEXT << " Passed!" << RESET_TEXT << std::endl; - } else { - std::cerr << BOLD_TEXT << RED_TEXT << " Failed!" << RESET_TEXT << std::endl; - } - - std::cerr << "###################################################################################" - "#############################" - << std::endl - << std::endl; - RCLCPP_INFO(get_logger(), "Validated the generated centerline."); -} - -void StaticCenterlineGeneratorNode::save_map() -{ - if (!route_handler_ptr_) { - return; - } - - const auto & centerline = centerline_handler_.get_selected_centerline(); - const auto & route_lane_ids = centerline_handler_.get_route_lane_ids(); - - const auto lanelet2_output_file_path = getRosParameter("lanelet2_output_file_path"); - - const auto route_lanelets = utils::get_lanelets_from_ids(*route_handler_ptr_, route_lane_ids); - - // update centerline in map - utils::update_centerline(original_map_ptr_, route_lanelets, centerline); - RCLCPP_INFO(get_logger(), "Updated centerline in map."); - - // save map with modified center line - std::filesystem::create_directory("/tmp/autoware_static_centerline_generator"); - const auto map_projector = - autoware::geography_utils::get_lanelet2_projector(*map_projector_info_); - lanelet::write(lanelet2_output_file_path, *original_map_ptr_, *map_projector); - RCLCPP_INFO( - get_logger(), "Saved map in %s", "/tmp/autoware_static_centerline_generator/lanelet2_map.osm"); - - // copy the output LL2 map to the temporary file for debugging - const std::string debug_output_file_dir{"/tmp/autoware_static_centerline_generator/output/"}; - std::filesystem::create_directories(debug_output_file_dir); - std::filesystem::copy( - lanelet2_output_file_path, debug_output_file_dir + "lanelet2_map.osm", - std::filesystem::copy_options::overwrite_existing); -} -} // namespace autoware::static_centerline_generator 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 deleted file mode 100644 index c591dcfc73bd8..0000000000000 --- a/planning/autoware_static_centerline_generator/src/static_centerline_generator_node.hpp +++ /dev/null @@ -1,187 +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 STATIC_CENTERLINE_GENERATOR_NODE_HPP_ -#define STATIC_CENTERLINE_GENERATOR_NODE_HPP_ - -#include "autoware/universe_utils/ros/parameter.hpp" -#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 "autoware_map_msgs/msg/map_projector_info.hpp" -#include "std_msgs/msg/empty.hpp" -#include "std_msgs/msg/float32.hpp" -#include "std_msgs/msg/int32.hpp" - -#include -#include -#include -#include - -namespace autoware::static_centerline_generator -{ -using autoware_map_msgs::msg::MapProjectorInfo; -using autoware_static_centerline_generator::srv::LoadMap; -using autoware_static_centerline_generator::srv::PlanPath; -using autoware_static_centerline_generator::srv::PlanRoute; - -struct CenterlineWithRoute -{ - std::vector centerline{}; - std::vector route_lane_ids{}; -}; -struct CenterlineHandler -{ - CenterlineHandler() = default; - explicit CenterlineHandler(const CenterlineWithRoute & centerline_with_route) - : whole_centerline_with_route(centerline_with_route), - start_index(0), - end_index(centerline_with_route.centerline.size() - 1) - { - } - std::vector get_selected_centerline() const - { - if (!whole_centerline_with_route) { - return std::vector{}; - } - const auto & centerline_begin = whole_centerline_with_route->centerline.begin(); - return std::vector( - centerline_begin + start_index, centerline_begin + end_index + 1); - } - std::vector get_route_lane_ids() const - { - if (!whole_centerline_with_route) { - return std::vector{}; - } - return whole_centerline_with_route->route_lane_ids; - } - bool is_valid() const { return whole_centerline_with_route && start_index < end_index; } - bool update_start_index(const int arg_start_index) - { - if (whole_centerline_with_route && arg_start_index < end_index) { - start_index = arg_start_index; - return true; - } - return false; - } - bool update_end_index(const int arg_end_index) - { - if (whole_centerline_with_route && start_index < arg_end_index) { - end_index = arg_end_index; - return true; - } - return false; - } - - std::optional whole_centerline_with_route{std::nullopt}; - int start_index{}; - int end_index{}; -}; - -struct RoadBounds -{ - std::vector left_bound; - std::vector right_bound; -}; - -class StaticCenterlineGeneratorNode : public rclcpp::Node -{ -public: - explicit StaticCenterlineGeneratorNode(const rclcpp::NodeOptions & node_options); - void generate_centerline(); - void validate(); - void save_map(); - -private: - // load map - void load_map(const std::string & lanelet2_input_file_path); - void on_load_map( - const LoadMap::Request::SharedPtr request, const LoadMap::Response::SharedPtr response); - - // plan route - std::vector plan_route_by_lane_ids( - const lanelet::Id start_lanelet_id, const lanelet::Id end_lanelet_id); - std::vector plan_route( - const geometry_msgs::msg::Pose & start_center_pose, - const geometry_msgs::msg::Pose & end_center_pose); - - void on_plan_route( - const PlanRoute::Request::SharedPtr request, const PlanRoute::Response::SharedPtr response); - - // plan centerline - CenterlineWithRoute generate_whole_centerline_with_route(); - std::vector get_route_lane_ids_from_points( - const std::vector & points); - void on_plan_path( - const PlanPath::Request::SharedPtr request, const PlanPath::Response::SharedPtr response); - - void visualize_selected_centerline(); - - // parameter - template - T getRosParameter(const std::string & param_name) - { - return autoware::universe_utils::getOrDeclareParameter(*this, param_name); - } - - lanelet::LaneletMapPtr original_map_ptr_{nullptr}; - LaneletMapBin::ConstSharedPtr map_bin_ptr_{nullptr}; - std::shared_ptr route_handler_ptr_{nullptr}; - std::unique_ptr map_projector_info_{nullptr}; - - CenterlineHandler centerline_handler_; - - float footprint_margin_for_road_bound_{0.0}; - - enum class CenterlineSource { - OptimizationTrajectoryBase = 0, - BagEgoTrajectoryBase, - }; - CenterlineSource centerline_source_; - OptimizationTrajectoryBasedCenterline optimization_trajectory_based_centerline_; - - // publisher - rclcpp::Publisher::SharedPtr pub_map_bin_{nullptr}; - rclcpp::Publisher::SharedPtr pub_whole_centerline_{nullptr}; - rclcpp::Publisher::SharedPtr pub_centerline_{nullptr}; - rclcpp::Publisher::SharedPtr pub_validation_results_{nullptr}; - rclcpp::Publisher::SharedPtr pub_debug_ego_footprint_bounds_{nullptr}; - rclcpp::Publisher::SharedPtr pub_debug_markers_{nullptr}; - - // subscriber - rclcpp::Subscription::SharedPtr sub_traj_start_index_; - rclcpp::Subscription::SharedPtr sub_traj_end_index_; - rclcpp::Subscription::SharedPtr sub_save_map_; - rclcpp::Subscription::SharedPtr sub_validate_; - rclcpp::Subscription::SharedPtr sub_traj_resample_interval_; - rclcpp::Subscription::SharedPtr sub_footprint_margin_for_road_bound_; - - // service - rclcpp::Service::SharedPtr srv_load_map_; - rclcpp::Service::SharedPtr srv_plan_route_; - rclcpp::Service::SharedPtr srv_plan_path_; - - // callback group for service - rclcpp::CallbackGroup::SharedPtr callback_group_; - - // 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_static_centerline_generator/src/type_alias.hpp b/planning/autoware_static_centerline_generator/src/type_alias.hpp deleted file mode 100644 index 2b7b99bfe81be..0000000000000 --- a/planning/autoware_static_centerline_generator/src/type_alias.hpp +++ /dev/null @@ -1,47 +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 TYPE_ALIAS_HPP_ -#define TYPE_ALIAS_HPP_ - -#include "autoware/route_handler/route_handler.hpp" -#include "autoware/universe_utils/geometry/geometry.hpp" - -#include "autoware_map_msgs/msg/lanelet_map_bin.hpp" -#include "autoware_perception_msgs/msg/predicted_objects.hpp" -#include "autoware_planning_msgs/msg/lanelet_route.hpp" -#include "autoware_planning_msgs/msg/path.hpp" -#include "autoware_planning_msgs/msg/path_point.hpp" -#include "autoware_planning_msgs/msg/trajectory.hpp" -#include "autoware_planning_msgs/msg/trajectory_point.hpp" -#include "visualization_msgs/msg/marker_array.hpp" - -namespace autoware::static_centerline_generator -{ -using autoware::route_handler::RouteHandler; -using autoware::universe_utils::LinearRing2d; -using autoware::universe_utils::LineString2d; -using autoware::universe_utils::Point2d; -using autoware_map_msgs::msg::LaneletMapBin; -using autoware_perception_msgs::msg::PredictedObjects; -using autoware_planning_msgs::msg::LaneletRoute; -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 tier4_planning_msgs::msg::PathWithLaneId; -using visualization_msgs::msg::Marker; -using visualization_msgs::msg::MarkerArray; -} // namespace autoware::static_centerline_generator - -#endif // TYPE_ALIAS_HPP_ diff --git a/planning/autoware_static_centerline_generator/src/utils.cpp b/planning/autoware_static_centerline_generator/src/utils.cpp deleted file mode 100644 index f84fe79cec288..0000000000000 --- a/planning/autoware_static_centerline_generator/src/utils.cpp +++ /dev/null @@ -1,263 +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 "utils.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/universe_utils/geometry/geometry.hpp" -#include "autoware/universe_utils/ros/marker_helper.hpp" - -#include -#include - -#include -#include -#include -#include -#include - -namespace autoware::static_centerline_generator -{ -namespace -{ -nav_msgs::msg::Odometry::ConstSharedPtr convert_to_odometry(const geometry_msgs::msg::Pose & pose) -{ - auto odometry_ptr = std::make_shared(); - odometry_ptr->pose.pose = pose; - return odometry_ptr; -} - -lanelet::Point3d createPoint3d(const double x, const double y, const double z) -{ - lanelet::Point3d point(lanelet::utils::getId()); - - // position - point.x() = x; - point.y() = y; - point.z() = z; - - // attributes - point.setAttribute("local_x", x); - point.setAttribute("local_y", y); - // NOTE: It seems that the attribute "ele" is assigned automatically. - - return point; -} -} // namespace - -namespace utils -{ -rclcpp::QoS create_transient_local_qos() -{ - return rclcpp::QoS{1}.transient_local(); -} - -lanelet::ConstLanelets get_lanelets_from_ids( - const RouteHandler & route_handler, const std::vector & lane_ids) -{ - lanelet::ConstLanelets lanelets; - for (const lanelet::Id lane_id : lane_ids) { - const auto lanelet = route_handler.getLaneletsFromId(lane_id); - lanelets.push_back(lanelet); - } - return lanelets; -} - -geometry_msgs::msg::Pose get_center_pose( - const RouteHandler & route_handler, const size_t lanelet_id) -{ - // get middle idx of the lanelet - const auto lanelet = route_handler.getLaneletsFromId(lanelet_id); - const auto center_line = lanelet.centerline(); - const size_t middle_point_idx = std::floor(center_line.size() / 2.0); - - // get middle position of the lanelet - geometry_msgs::msg::Point middle_pos; - middle_pos.x = center_line[middle_point_idx].x(); - middle_pos.y = center_line[middle_point_idx].y(); - middle_pos.z = center_line[middle_point_idx].z(); - - // get next middle position of the lanelet - geometry_msgs::msg::Point next_middle_pos; - next_middle_pos.x = center_line[middle_point_idx + 1].x(); - next_middle_pos.y = center_line[middle_point_idx + 1].y(); - next_middle_pos.z = center_line[middle_point_idx + 1].z(); - - // calculate middle pose - geometry_msgs::msg::Pose middle_pose; - middle_pose.position = middle_pos; - const double yaw = autoware::universe_utils::calcAzimuthAngle(middle_pos, next_middle_pos); - middle_pose.orientation = autoware::universe_utils::createQuaternionFromYaw(yaw); - - return middle_pose; -} - -PathWithLaneId get_path_with_lane_id( - const RouteHandler & route_handler, const lanelet::ConstLanelets lanelets, - const geometry_msgs::msg::Pose & start_pose, const double ego_nearest_dist_threshold, - const double ego_nearest_yaw_threshold) -{ - // get center line - constexpr double s_start = 0.0; - constexpr double s_end = std::numeric_limits::max(); - auto path_with_lane_id = route_handler.getCenterLinePath(lanelets, s_start, s_end); - path_with_lane_id.header.frame_id = "map"; - - // create planner data - auto planner_data = std::make_shared(); - planner_data->route_handler = std::make_shared(route_handler); - planner_data->self_odometry = convert_to_odometry(start_pose); - planner_data->parameters.ego_nearest_dist_threshold = ego_nearest_dist_threshold; - planner_data->parameters.ego_nearest_yaw_threshold = ego_nearest_yaw_threshold; - - // generate drivable area and store it in path with lane id - constexpr double vehicle_length = 0.0; - const auto drivable_lanes = behavior_path_planner::utils::generateDrivableLanes(lanelets); - behavior_path_planner::utils::generateDrivableArea( - path_with_lane_id, drivable_lanes, false, false, vehicle_length, planner_data); - - return path_with_lane_id; -} - -void update_centerline( - lanelet::LaneletMapPtr lanelet_map_ptr, const lanelet::ConstLanelets & lanelets, - const std::vector & new_centerline) -{ - // get lanelet as reference to update centerline - lanelet::Lanelets lanelets_ref; - for (const auto & lanelet : lanelets) { - for (auto & lanelet_ref : lanelet_map_ptr->laneletLayer) { - if (lanelet_ref.id() == lanelet.id()) { - lanelets_ref.push_back(lanelet_ref); - } - } - } - - // store new centerline in lanelets - size_t lanelet_idx = 0; - lanelet::LineString3d centerline(lanelet::utils::getId()); - for (size_t traj_idx = 0; traj_idx < new_centerline.size(); ++traj_idx) { - const auto & traj_pos = new_centerline.at(traj_idx).pose.position; - - for (; lanelet_idx < lanelets_ref.size(); ++lanelet_idx) { - auto & lanelet_ref = lanelets_ref.at(lanelet_idx); - - const lanelet::BasicPoint2d point(traj_pos.x, traj_pos.y); - // TODO(murooka) This does not work with L-crank map. - const bool is_inside = lanelet::geometry::inside(lanelet_ref, point); - if (is_inside) { - const auto center_point = createPoint3d(traj_pos.x, traj_pos.y, traj_pos.z); - - // set center point - centerline.push_back(center_point); - lanelet_map_ptr->add(center_point); - break; - } - - if (!centerline.empty()) { - // set centerline - lanelet_map_ptr->add(centerline); - lanelet_ref.setCenterline(centerline); - - // prepare new centerline - centerline = lanelet::LineString3d(lanelet::utils::getId()); - } - } - - if (traj_idx == new_centerline.size() - 1 && !centerline.empty()) { - auto & lanelet_ref = lanelets_ref.at(lanelet_idx); - - // set centerline - lanelet_map_ptr->add(centerline); - lanelet_ref.setCenterline(centerline); - } - } -} - -Marker create_footprint_marker( - const LinearRing2d & footprint_poly, const double width, const double r, const double g, - const double b, const double a, const rclcpp::Time & now, const size_t idx) -{ - auto marker = autoware::universe_utils::createDefaultMarker( - "map", rclcpp::Clock().now(), "unsafe_footprints", idx, - visualization_msgs::msg::Marker::LINE_STRIP, - autoware::universe_utils::createMarkerScale(width, 0.0, 0.0), - autoware::universe_utils::createMarkerColor(r, g, b, a)); - marker.header.stamp = now; - // TODO(murooka) Ideally, the following is unnecessary for the topic of transient local. - marker.lifetime = rclcpp::Duration(0, 0); - - for (const auto & point : footprint_poly) { - geometry_msgs::msg::Point geom_point; - geom_point.x = point.x(); - geom_point.y = point.y(); - // geom_point.z = point.z(); - - marker.points.push_back(geom_point); - } - marker.points.push_back(marker.points.front()); - return marker; -} - -Marker create_text_marker( - const std::string & ns, const geometry_msgs::msg::Pose & pose, const double value, const double r, - const double g, const double b, const double a, const rclcpp::Time & now, const size_t idx) -{ - auto marker = autoware::universe_utils::createDefaultMarker( - "map", rclcpp::Clock().now(), ns, idx, visualization_msgs::msg::Marker::TEXT_VIEW_FACING, - autoware::universe_utils::createMarkerScale(0.5, 0.5, 0.5), - autoware::universe_utils::createMarkerColor(r, g, b, a)); - marker.pose = pose; - marker.header.stamp = now; - marker.lifetime = rclcpp::Duration(0, 0); - - std::stringstream ss; - ss << std::setprecision(2) << value; - marker.text = ss.str(); - - return marker; -} - -Marker create_points_marker( - const std::string & ns, const std::vector & points, const double width, - const double r, const double g, const double b, const double a, const rclcpp::Time & now) -{ - auto marker = autoware::universe_utils::createDefaultMarker( - "map", now, ns, 1, Marker::LINE_STRIP, - autoware::universe_utils::createMarkerScale(width, 0.0, 0.0), - autoware::universe_utils::createMarkerColor(r, g, b, a)); - marker.lifetime = rclcpp::Duration(0, 0); - marker.points = points; - return marker; -} - -MarkerArray create_delete_all_marker_array( - const std::vector & ns_vec, const rclcpp::Time & now) -{ - Marker marker; - marker.header.stamp = now; - marker.action = visualization_msgs::msg::Marker::DELETEALL; - - MarkerArray marker_array; - for (const auto & ns : ns_vec) { - marker.ns = ns; - marker_array.markers.push_back(marker); - } - - return marker_array; -} - -} // namespace utils -} // namespace autoware::static_centerline_generator diff --git a/planning/autoware_static_centerline_generator/src/utils.hpp b/planning/autoware_static_centerline_generator/src/utils.hpp deleted file mode 100644 index f4d15d3dcfd4f..0000000000000 --- a/planning/autoware_static_centerline_generator/src/utils.hpp +++ /dev/null @@ -1,67 +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 UTILS_HPP_ -#define UTILS_HPP_ - -#include "autoware/route_handler/route_handler.hpp" -#include "type_alias.hpp" - -#include - -#include -#include -#include -#include - -namespace autoware::static_centerline_generator -{ -namespace utils -{ -rclcpp::QoS create_transient_local_qos(); - -lanelet::ConstLanelets get_lanelets_from_ids( - const RouteHandler & route_handler, const std::vector & lane_ids); - -geometry_msgs::msg::Pose get_center_pose( - const RouteHandler & route_handler, const size_t lanelet_id); - -PathWithLaneId get_path_with_lane_id( - const RouteHandler & route_handler, const lanelet::ConstLanelets lanelets, - const geometry_msgs::msg::Pose & start_pose, const double ego_nearest_dist_threshold, - const double ego_nearest_yaw_threshold); - -void update_centerline( - lanelet::LaneletMapPtr lanelet_map_ptr, const lanelet::ConstLanelets & lanelets, - const std::vector & new_centerline); - -Marker create_footprint_marker( - const LinearRing2d & footprint_poly, const double width, const double r, const double g, - const double b, const double a, const rclcpp::Time & now, const size_t idx); - -Marker create_text_marker( - const std::string & ns, const geometry_msgs::msg::Pose & pose, const double value, const double r, - const double g, const double b, const double a, const rclcpp::Time & now, const size_t idx); - -Marker create_points_marker( - const std::string & ns, const std::vector & points, const double width, - const double r, const double g, const double b, const double a, const rclcpp::Time & now); - -MarkerArray create_delete_all_marker_array( - const std::vector & ns_vec, const rclcpp::Time & now); - -} // namespace utils -} // namespace autoware::static_centerline_generator - -#endif // UTILS_HPP_ diff --git a/planning/autoware_static_centerline_generator/srv/LoadMap.srv b/planning/autoware_static_centerline_generator/srv/LoadMap.srv deleted file mode 100644 index 02142e60c0035..0000000000000 --- a/planning/autoware_static_centerline_generator/srv/LoadMap.srv +++ /dev/null @@ -1,3 +0,0 @@ -string map ---- -string message diff --git a/planning/autoware_static_centerline_generator/srv/PlanPath.srv b/planning/autoware_static_centerline_generator/srv/PlanPath.srv deleted file mode 100644 index 3a8d0321ffb9a..0000000000000 --- a/planning/autoware_static_centerline_generator/srv/PlanPath.srv +++ /dev/null @@ -1,6 +0,0 @@ -uint32 map_id -int64[] route ---- -autoware_static_centerline_generator/PointsWithLaneId[] points_with_lane_ids -string message -int64[] unconnected_lane_ids diff --git a/planning/autoware_static_centerline_generator/srv/PlanRoute.srv b/planning/autoware_static_centerline_generator/srv/PlanRoute.srv deleted file mode 100644 index fb50c04b0ff26..0000000000000 --- a/planning/autoware_static_centerline_generator/srv/PlanRoute.srv +++ /dev/null @@ -1,5 +0,0 @@ -int64 start_lane_id -int64 end_lane_id ---- -int64[] lane_ids -string message diff --git a/planning/autoware_static_centerline_generator/test/data/bag_ego_trajectory_turn-left-right.db3 b/planning/autoware_static_centerline_generator/test/data/bag_ego_trajectory_turn-left-right.db3 deleted file mode 100644 index ed3448772b794d73ff3e094907bbf6343b59585b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2740224 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νVt})$~97fLnKq>nRNLzOQ-ye=~L-B+v7`eO=J| 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 jAZL>$$lRGdS(iQNlJsjeKgJ|Nk~SkC8mj_x`yY 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%0A*QrsAq4N2kB%HCi8_M3MH?FCd;`Fo| zNAS4HR538@bXlFE5eZEC9=g5{kj2DXRLv+v;n*NahZ^_j))(d2{};S}aV-|tW5DXY zjOt?+C%?fXqMMg*5dhDWI$WQ>z{mR|M@ErIN-I!SRWjw;jK4T>_vy=@cGm0Wef5r@ z)5pt4CuXgY4bsTiTY(1ex($o}!TZ|RKprf-4aX~@zan^l4~}c6;BB%u-&h>Mo4D39 z&#KT7?D=u;e(K%;pgYufI%%2=4;xr^X6-Km5kvj`!$OfDVEl~%=eE_Dct43U@-CQr zPdY@6`x4{rF=dZky~oad=$;}lUiEII`WV8=Z_=cJG#4WP;(T}tA2s6Roqe*z4Ip@b z=T>G}!i_)nCLHc~8+>&0yvLhvACt=rD1#Foq`6`tUMBEJaBg99WR6C@{P!25eF8`g zT2E7hnr4kB(MN2V%ErZ5HR$3|HmlW04JuW>%1Nm~Rif_}$sl`>u4vjUKKsTJOsvie zeqk5{k_HvbG=|Br=kk8>jl>&Z<=xS%UTY$Oq2Zi*Qtt|Y^>Ns}`F=l3|0T(S8aHj( zIhTA9y9TY}Z5_;0V7wZ%kLqJBPJSt$`0eJd@&iRLIkk%fNE_>OLH}GMQ`P)PObgH# zEFo9T;Xh&tI;#&jEF#VS8l*>`kG^`LD023nN9;Npyc-|9ut)KZGUpJ+!ux*4r{=8) z-XUclR#5O>zAv3=8G?7LGiTd%d229trQu-U&p>c4{|oQe5i-0^dXo3|)(UXTvtZg$ zJQDaD-`jZez8EInoK-zn!mV3LC#Z4Z;>$V?$7AE2K3!pJvWoHWMtz*a$#0|6r@ohy z{D4D6xcAZw{v&qaUACR{sTT0+-OA6tiuic<5u6u;K&g4ZgLI5YpAR8jo#GdNr?*sS z@P2Y8Y#PP;meyM#EW9~aECf~v-Y3Qdv?+M&2?+J^A$UI^FV4*Zz1HneO z1$Eh@WO&s!*=eDe>tJxLHS_D`kzk{FW7f<3!esFVo(Nhfput4`}zWF3R-nlpLy;no_Lj9Yct75sTZ7^~n00v}7Ty-?dkee}ydNnlSyJ#mY0+u-6KRkZ zUh3D`X>SWEw{9xwk_!a0rdwLn$C2uN>iW~FN9ACNR9OW8ZawY{ndkoV79dBT`rm^AS4~M#`@` zm_j0q{f%o``EX$D7j_M@>plQ)Qf9mw1XF$3x-{x?X|^!fO@ zWM`RK{U5y5Xz+d!R`Ad4ZTh~4OR@0g;oa&!gy609u=F|wZxQMtL=|FXYX^ z`M0v2ox6fTf$JpG2Ystv9Dg^KM@*B4%ZC{Itw@@Be)P;#Vq+x2D zf=}-|$0lsNOR{}CLKqNlZmJKw{BqX5DzYEv2jOQvvNQ?f*B>;Qf5}hz>e9S>kj~1PkvAf?QGrq(LfDc=M8i z_f3Pd*Oidzt>j^a==k)#;8KeH@&48z!2Nb^N!oidoZ9hwKqJs-?*~~!8`GR&Nv0{xM~h31q5#&r?WycS1iD^jOVG|GeLk9JGRK{ zBN?u1F~4&8?hU}(%WZ$UDFVpHl}~#2$YJ8W%cpS5jhl@m6>3~zv5G5x>O$kC%=#DvW~Ztk?OsJFaIkqKHkF#TVA|I@D7Lwy}R%+9h(z1yDq=qqcrdF zCTyb9N9<(U@_*O=3G?C?(*FaR8r1QDjRUPg>W+%iST$(R3Cq}R$O!W4t#>!eks7r9 zrlU}UgNpW(-(tYPOCR)K^K4n*5DLC`x9jM%k>PKWBf!KNzmJa+ zw_w&FA)l*!gA1N%O;O_(%DonnPJH%^SA#^UKJfC}>tA0kc3%LH4WC5o z?!d1>2k+~qrZ+c(&fQf>+{@?~LFV&5=~dn}|7%bIoj#UYc_{xKL2A+9-Cq1*0gAVx zJXsP8@9TNrNY)76L+*Zk6ufOqk1G!%c$UJ@@vBZ$6HVHy>Yeyoo8};hjVE zftR1gVEmh1;R3)*_oriHQpeLng= z`xdDEeL;E?4c@PU!Zc94*OtN(Sa>^#Ax8AFYB>h;Gc|X0ilTIHa&$$~obpJF+nlyN~SrxXTcprUzQ5*|zX)yBYB!c&y zJug>M@Lu6N0TB#W<>}MLIX0-l$26tilj29Ng{1CnM)*; zBvR4IkfHJ2NBi9OeA#!O_uDz|@A`84{aPQ^%KxtYto=ND@0mB=55Z#VXPGmS;h)`^A>nQULD6*)ZSD+_TT)g9rrVx)%1mYtHGLNk-no+;h;Z;Uu?g;5o!;bf7RO4YyC!V0Eu%M zo!xiQ7yTQgrl&LB^kz}sCH4nW$1be=j6aEqujU5#J|4`w=78OUUI(piv|)V)1n<3J ztMp>S($+mqDgSL|#h;XQO`wwTB}wP;KhjrV-cVebi; zcf)89A7TDy+&b9Z5A)uBWzPGO@K&%=|JZ2JKroQYe2dR*#Y4w)4=J~-sRmiw;;V;^ z!@!T&l#?Q|J5YIpO`Ly96$kZxA#sVqHYX0PM(53Q<{ryJBIWVkhSb4FOc_t;C=r5^So^q*gHs0%7WL1-q%t+?*l62)zRgees=2b1JYYacn==?BSYlv zs!}0?##;c=a{dGJepGr}pTPS`?mBB(`1aQ1>}%zH&~_k?%WW#?36h%qw#hbUg5|G4@haulZOes*?xwEB*DCgdia7t%T91% z;6RFEO)yxc7c;qIOFI#@8k6q|Q0=dqKQ0-u2u(`+|JuaPnT zTWIJtO}?Q1@Bfim$D5%34gG(+w>}B)S8Nx*6M0XUo2^CTt+aV-(0Z76j$ZI30`CT+ zZ$gDIZ~vH+a+_j}0Mnf#X-AWS!Djj`664SC(3`dXSp^(b0Oxl3coaSiboLaTb>iNJ z+P%kXCJ(5UKGS=K#9f5sQ&v4f=Pg{DH)VQ~^1AmYqz zTc-`H;CGM~*5%!bt^vPVgWH1Z!oW=4@rW0AQ`8>xMJg;;>+`tYA`%xS9p$fYV}Tl< zZmenKP(gV;=qpmkWsLlKq^_@|H{k*wau4H@gRpy0-^#SCpC;X4B7Sa@AHcrEo}FKM zVpd#C{VT{N^6H>*XUu$bZg~f3CkgL&X>a<7ysy6=Rz&0NoML9}3-kU|7@|htP49lx z^%TszB*#;-p;Gvgq->SJhfq*%0 z{+8gPFmNWh`m8IL2`X>9oF|a&%Tc{}ByO+LhJE`#px@qVFl_*zDk+b*15(EmjQslB zCF=F9xPa&H`1b23uz9;YY*ak&&<#WeIfB`xvAg#q&8{_GP1Jw>f035FI{wT&kKOY3 z>n#Q(yx(d!uO#y3c@n08#(Tb?w(L60yU~~a5`p(iv8Pd6VcsipAFD?dY61FK^_@134968FQ7(c}3; zblxG+^x+0|l*juaQpYKb{JaxFdIGL-0T<9(3cRs-uP#+udmrZghLKU~%{wv3k$1t`9r9?r&xSm@S4mi$v|B?2-hvh9q&;BX ztyWKDJdbVy-vV&tcAim#l}mJ7UCyCc}%4V!nwcO?() z{BAHExGF9!4}1R~7pB5I{l=2|7bj%ap|4U^6&d;8{EwrCA9()XP11utR*KdVd(g~z znvG~ZXv4;>)}I|p^s8AIX-nZABvQ!34-p2WixKb2?Ny=R$q4=0wh&N%*|0gj1P^7* z*lgazUk8k~e%lly91cV)G_8EA&$$uSfXB%Urt*Iij`Ad z4{Ap0c!rVRmvs_WALzM&%HH@2hD_`p)Qi8bRUFX;G`BXpZg@mS4;qPYoHwO&>4H~J;BY~^CK`oyH3 zJrcLY`0nvhTXfz|2i~3Sxleh#?-A?3$WK!bAMDl11tec(%6BAV^M+r~)p26H3j}B| zJI5wqA8)aYPZ1q%)TjCb($Z(it7DtFw-eXd<>M{JB)mV^u3JOoo%KCi4UKom_Vj)M zn0LQU=Me($ceUFyiecUrcVBdhJr;(zw+ppz%nbn%9lOgU?%|<3L8Cl0{*Tb2bZ3=sQBDIg$pc2S4k@B5_kaD-7=rqIY}GV`l{Pt0<569;A+g82ODPw`{Ux z-~zMOJAy|354>x$RP{@bVc*_5SM~9!i{3h_=l%8(d3C71rYrNxT<+exNO+H{NJ|oV ztH}7MqVaaopea>?c{_yQuMl`^3i7YN3iHM};u985^*ouhk9r;(8v?xiB7VGkfQNQC z{#fHJQwx5Tu9&>#9tLzr+I%kdp+E4vmi2+}_17Qu^oVggCK3~Fq4Pevmn9&sp7MCh zAa%H6<=3>nm-RpVQVjPXaoV_3PVgBd>9BKZcmo6I)`t%p+TVr(ZS|9oVKyFezWnCF>XdrG z5$k!9u`3i5)ehEIn_HpI^JV5-_79)U=-ol$4qT|NICvaAJ~lmocQB9gde9xDj!2CB z^hTK#u(Cy9JuJ7vT0Qu9-6A>=hE65k?I2VdOQ2+P;aB}3;amUTJ z=I!4Xr0*f&{UtX21o0B<{JujQjrVt-S+$EW@5*8}nG%?{&9~&YIxz2BYxd;5sND(~ z7j$g|@TYYBJ)QQh%f&;t&PEw}?y3i0D_^^bw}pZZgZ1C$OVQ`~n1S05z6s9gy+Go= zMltTYydIr5({=|TqXNp~9gEaKkCETE{1f3<;7e@vtoDRuB{uKG0M*D#FmIn+wpa3% zWV~XhtIyKCL&2#JxP$dbL#sop(%Kd6hi{-o2GY>IlQgZz^fsi9;Qnz%8oaM#LR# z-ZvPyQWmW`fjxcnQ1dJ7{eRq3GUk@4pOTws1Kbw@%8Ht!4Z)B8A?yTHXA!JU?!afXDV2)s>6cz;?PF(C4u?%J$@#yhm)_xT=}_l~2lo)UQL{wTC>gn7>^5C3*% z)qo_Uv#v!9h5%t1x6K)acqo@sgO}lO9f&LU+u?sc3~b!TTxgtwKF?oa2srt89IvN^ z#928sRnO+5^VaV4nN6voJl@$z9qJhQebkUhFtp(Ut~p5^_ithIX1TMtWDN6`2(}nf zlE&tZQ#|REJ*r9l^S?Zqb&TAv!o!P`|Gxi+qx>JZ2icPJpl>(Dj}v+jVg8rAZ@vPp z2iaXX8cqlIpfp$c$|AT2T?&#}Ckn41`35<8@xtbi+3Hij@p|C^Xo{Y>aS;#g|M5DU zowgA;YV4}$RtyDSYrdChh}ojf|I%hgPZa3p^_GyhrI;5gLpj!{@v2dKH+OZ2K$P|m zPOL)_BR_!y7hPrAxxnLLd9mpi*gdFJ>vPH${dOSzec&ofEjcU5+_e_yd_F$;RFH5wsD<))3nO*ZVdQtbtv{(@9-!t62c=h(c%1v5(WdfP!u;X0W! ztFe!_T)U@Lef;$ns^1_DCbJH8T!QP?_~re7YZBhG`U}^IytxLy(xLG#RZL@3gL&g_ zJk%oGy`7#fnlprXx8i>#BqZ&I_P44FZpDRzH#<@sFQnih=9rQ)u@en|(ZzIBcQgbz z76<=$nu^XfI67p{)f;nqZb%%xy5vjIdGz^z^P^q2;<_o1cMwv?CXDZ;{uERU+QTP|2A2SDCUfAl|q1Avhfm zg__$6I<9K~uNdb0SigpVqCJI0TUVml*&%Q9LcNd8Z9xKSi-$m!`=c_i@JwSQ9 ziFKU7$WLmr+de*+6F^7SRyMa{^EL>HS;_V*RlP1l}ECF*YGE?_imY=Xzpy zLaGerksDWs0h-gPxo%nT_y4?u^u*uRgKCTGj+?)Qf}s_`iX8mtykkertTdu$^+u7n z-K_3E^=i<0D?e}_7SE-;`TsOhhXO`^OosgvDok9Uw~9-iyAhlBmbI4jJ7C_Q4xNpf zNG9X)mQkMrCX6c7KmWfcvyOJl6B_@`|2V4nf#-h*k{V{GO3(~@`kXHx)w9)vU zzb8odk?{WRnVL@Ioxewj1&#N84P%3wFz?BVD-Q^~C0^c;359uEhWAJ8w6cIqHGc$( zkbAe0W1dG|Hv3cJ;^84j>*EX=SeOI1F9`*{- zK4bHzFNM-nzk&?UB(IM5E{UyMGL~16dr5dN>5Zxpd7D1}#Eizs1G4A35gVj54 z41UJuEiRvs5C!wDJhEGCj-0Qz{GxrOTrWlSym92#amlJo>hJLudlKG@%qG4>-o;jT zn9z8S6`N1JfO$*)yrM<8duw@h=@$pgTPN6$#a?+2Bo>%s8)6*}Dnc7hmYl^y-%eNX zC0u9(Ijbut_Z$lYi7PGk4_l#k?_%Z9vNx|5^sHk5Jz2En*!t82RNrHog*`zy;2XH;a4rVe@vTmx*GB_ugb<(-_@duz8<+6|&{f zUFtua*g$3-pHkjgKZnoW{Iu{&)G`9wbSV6V*iQK^ZHJxzT#i^Sm3GtKlBx z`mknI0ep#NZ!g~QhH!~psh$2%-WnRS_I=fF6#;N@-h$sw;32-)d-A>6&0zBtyXKsq zA%J$*72!S14yY^0%M>S^pz?AKeoaa}X*8kkuEEG6=`NiAeY<2{^a zKH&uOF1UaG6M^@;n1r=GFmI!Ly7JsQOK8uL5UtN&!@+`NfcuLeJj8GDxPks{6W~2w zJ3b~73O1R2H$8Z2FY4l?Xz){%QrHi@%}8AG864eM68b>(Yz?kOm;#^wzm3%K93#K9 z(D>iyEx15SrH*ni8NAOSyuatYGsBr;-@P@ey1Z}ESeoh=C%dZ2t7B?USDV0#KI`kx7DK@G_jB`ZkI`>${ju*<6RZEOcMFNj9aievs)f#* zpK^5FZ~DD|>%huS@W|7{KQ3?qZ@+GHuJ5#%YwzikKUO)w-TT|J(n^8sRA8@8S9X;Q#g@Nyf`I5U~dx=G-KJ)`J`!n%@@g zEzuV}|Dxa)+=HGURXuhU{s!qjg)@F`zP8ZrNuhfExd=cH7R`oS@zAx;rgt_sw1Cz~ z!`^)%A)qiuzdv)y5%m%~?r9)rbsPsuk+}Mnum&l0on?3J!Cu}ope0@)JJ{l??IQztb^}Zr{drF z-<^c_3iswuMBZDQIQY?cmnqCB)WWj zldrt}nM#4jTY`}~GBNTiiH^a0{N@C959{{-k;dlznlqs1Sw|Dduy^^rl?(e8JI>pr zMe9W?_4D>5ua1#}<1XbT%PUAX65b370rN!O47t6$XuKJgZXbFH^Db1>*U5)@@5sGk zqYm>9zeeY<7-a)}S4!Wp?sf#2t1xA?ID&^(`Uyu}vupuZ8ZLV{%7=pb6MnAlU(vg_ z)v+_i71v*x!pL{8f&AZ%3 zDyZ~9GYDo$(jPUzKD}joTx3=MIa#Wo|0lf3tK(>t)icNZW!|nNyy@n6bcwu^kLIjG z<9+GI{nRO#x2o3-_>F2a`T;aHM@HZQsVLNX;_ad})L!?pNhmS`OyNEGcQP?UsvhZ7v7^ftvyLieJop(st)cp<$eE+`$Qb#04 zezzP*l)=+#khvqfU z2oQL#WC!apJT$Q`Md#q_X0XaD-Qfm*C=j!G_G8y0^t-n|`RPpZ4Sws1B600?H=l-& zpx?cX91BRBe?)onKThCp9kCesG49%t{0%;Pd*oDpuazJ+?;DdF+;_oyZ>rf+Rbcxu5m>#baLF+-4 zyM7$hgfFqmOq=9x!aZn7O6N-myn?*2!i`76XD{?9Zs$?Cn~|VtFe+uz1`lP6Ein`| zJOwo!+FlPBL%{ucvkPaOolpm)biMW)6Xvv_9En@Qvqs{Q(mvGq$xwV#`6T7_pe&@0 zuNe82t}|)8CdUi(3a*?qH^c5h&$P2+E)>?o&;L)ea7;p||1SUh_TT6q3VlcYZ;;L( zB(Dyx5l#Ldsmm)!4-($2mfMDiyf3x?5JuxI0{J~Mg?aC_J{dsZy+f2OHyP&rOT`}_ z(Pa;nhhM(c5g7^eJXgth*yEwvWT{@3q^Cf;b7Ke{e7vRAEk`WwGdgd+HT1$^uV_FA z5~pr+AoYGYI`4pcNjD>&P#$kVq>d1b{Jh6M?Hc#w1z)y(eeYq2&D%K8JzT7)9_$Uj zzvuYl8f@NWqO2{qH&Fe6gexYqj%YToJzl(oH%J{J;myLUx%~AO!rNPvKh~{AZp_RttG5qN4F3Fg*+V6WSUhiq*#Ma0~ng0Y45 z+`}DVAbxVgkrpu*)L#o!(&#;gS#<@81`S14Cin5wwDQguAx^RVwnsFmLG>DRv1v>>$q@ z+due8!%rx7{pkzd55ND9-PlM(`6=isPR$L<2nAJ#cdLDUjo!T{epFU!0X=#1?X3c;2YP5eaxx^iL|g;Gw#qQ+8{bR{oqgfkL(m4Q=iO>YUL7pB4l^B}|K@+<)tjRK3twW7lk^~-Qwx8H zJ&3PCN(!w9$%Isd)Y+Hl^Dw$!%7c4QT?GgXhkH=Kj@6TUOejuOM^3HAMLz z5Q8Y~-+BtE;|4~4Nt2OtD<@ZhE*TzK+$ro8fRjo1kh>dp4+^(q`L@s@ zLG>$0CwubhXgho(MEb(={C|vuH@Csn<@f&+2Be|fSqU`WJ^nIc12FH0O8jF4-rgU& zFPwsTr!uVnuIl9o?f1`F|IjK5bOl{EezF@6y*_<~-qxoTNYZYP&$JH)ZGOJI`gQ2M z4Q3SV=Va(XI}&%NZbcIVBRX%b@N<3^#+1j~2&qE{BfnSR;Txs(yugTQ|AUB=*t|u0 z*B1}Ky#F-Z*!i`AjN>h(+2>qZsDFbLcbm*Q9&XZ9`Fp&@n}jzPcjGQ%_Z~Ke#L;+r zU3)t;4fEC$4AHm&^Zw!ChWCJZtEIcS)g(ATyyu^`#EC|M(hqWc^JaL6Jt*ynVm>l*d~VspAGle)!A- zW6Ymc0rM-}@7TPsd1pN7q8%-*1rzR}0oz!xpWZ4S0I_W!Q>eas9~>mFj)&Wr#zikJ zcW*Be-W*>V-Vk|vNTi9O@&0!2Og=L_Ai2dIjwA3E|L~Q6AIv-D*$1Jc=l4Mw3>RKT zyom(Gr~GI(S>T}oi=;2iqOD-Gi~YL!{b2BiZHebz0y^)m$A3m?_2~c&``@^rO&T}a zFQN0c(R-mAEkk*{dyqQpF!H+^udx2HGB2z~Xkedv6XtboiG8 zHt#1dc`n>JR|hgUX)E#{)M4{pxn+d6pZedug<~eKj>E_7wYlKeTm1L@|33|ma{mC& z|9&JrNYJ}%9kB=9dnO=<)`PCsFxH#EE6AhoUw+Mndywbj&fu+Z53=NE#zk#(hE$A~ z5~|#z!LWs#`P(gcXuY_vikDd%=;kWB!gwSY4C?Ck|B^u8K{`aE@3Qa63NVbs-FH+| zKFfrD&vItbK0Yym@_LX5QpX%de(L^$<@HLdzy(2BHSUYpJxDuY(SnyG<@Cx!z zrNP4w&Zw7$vZ#lab`mQ9J+5jw&c)NGM&lm(iPOMr?ik6_l*junQb#aGe(BMdvY(`{ z0x3^EeEt%L&HG6XOY*n!$KVWI+@oYoY~CJuA*!3ZsQ&|LaXIAGVL!Kyv!H32w+{(# ze%9OnJiQg9ULk|VJJ!WbDj4Q{#5pRBz66w?`4?xZ05Dk1l|gqM@-Jc zyh8&&P5A3OL6>q9bkDa(fh{Z2J3Mycp<@M$0coFF!HZy}jPA?9ASIg5_e(lD?*gl{ zs&eNUKspk~)Y$h6CyUOz_0rqTi>Z{yyBMjX9V0*4zFa5%#Z^GE&!Idt5}UVensmeS z?GTtq>)5ku277Ztc=y5a+Xb0azc}eLC9e+k_|eJPxaIDBf`s>~Jemn2Z>`{Arl?8motqSKsZ2+E-rrURnrmPR#5&6KI5oKG_$}TQ;ez^ppEb?L!r0fVz{fS)rPLo__n?Rq zd-u5AeE>2-_GVrj!hS&7I#_LcOaE%BUqS8*BCn2l@tQwe{>zuxKoZ^}N_D10-gtr6 zifFu#6+b;T1M|+&SeZlM-T!W5@=chxs>h(2{~8yFPHUmG;8Qe6_++nDt_!aqtHVyr zL2W>oD^ciPM=+TC5W6sJgwC7W2uEC z&szqN@D`p+)gbZ?9=g6Bjkm=!;m=I)3ergG^(=w+f$>2a!rNPM8h0(5J~~5(c8sd@ zbwq>3fbB1&^ze{QxWa(?%{H)4?ZU3m$HCyu>#)5~8PR#iD5ZZrsL2RMkvM%WYrB-y z=)C*Vx7y13P#*6%q>g@!{Ni{%cCNX+3dD@>&Cbrp<{j~e)j#C)L!h-~R5dsn`+)Sw zwJ6oZluWAc-ppjyF*m9EeO1iz0cn2{-mAM<=!m?ND*P4DczdO{ONhd}BXpe&2%8fw z+76%B!2^=}K$FwDQfKJA&;g?@MbTia*GsDmz#mBSTQOmEwhj0g1^kI)4h9N(dv8IC z=$jJ)KFwbIKUV-1B<@8a?;c+>^vwwz|DNJ!p_Ip47^#B>Bfnu&?pD4pJfQwuGQ;`; zY~E1_?Krio*Z^U78LE+o$Lrt*!WpU`h_)m=OJVjzU_cyC7PsK>~! zrtl?i$?jEPzhLIo_c_?S*U%}9y*Tp_R0asCt!g6UaH5Y~AO8rT{`udF%sOQEZejm# z{-@lTpER?Wy)ihF9<D?1>xbE6CCxXTqEWDX#}vBXyKv`cVHYT$d2Z*X<1rwehUuQ+Mm+Q(^NYu3)pqdl z_wOR7*dQ=_%xrj*B0BE^**vv(_Do<7iIa2qmO%F}x3_v1zVGMfraa!akvd*teT+U0rfWFKb`DQjJeLoW~%3nJ3?k1ob*?f z|DGTXCE+cBSFt2^Z#CPiYG}Nf0&WMU!MtS{ON?`1-bJH&i%anQ?_AWI^tRCjGPR8{ zzUvSJe!Z8w5}|>IHjI8XxG&rez6zFVe?A%n&ggDC;xUCjAT6oHm2&ejfjA^i$!_FE z)h_hztt|@G_fX&o(qBj&x)}NON0r{1hXfP{baqd6`3*;{@24O^$% zz~iIml=4|Zz|zktq1ic9`RYUh2KG{RQ3J}+=Cn+ zY@^={4@i9)?^KfE`Tw*+|KN`57+{;PEqqo94^1v?r9YkD4wxjwOoQZufYYFctm-55 z9@O3M=qppe4D69OZ=aL9#u)$Qp5=XGiw6vpcZuyo>d?o?4?k;JlKzbwcuA;*D)wOa zpq%%dDoPe*;G^5;saZ0P*ojFUs4?oSqWS^JQk=Xx%G!hk|13ZMA45;VTTb|{7V#3R zwZ26gjkofhtdkt@CAP*%Oz$epJHNc0&jjWzo`0NmXvqai+^Msr=6(!_xE^*QR~Zit zeQ|H~O>PHUoOiyz#~lRP>JDzY5r)oN$6;%Fq%SjQLgE~(6L;==i++jK!Z+@C$Vhp- zHzRfEVC46G$jw1_4-YWc&EU!C!sZQ{rZ{)QyshH4hvLXNViz^~^=eNe)$_(hkXgs* ztMb2}w}_!5;VnB}V@Txv;(D?c8t)$lGYN>NRv|Me zZf`p%d6tp3_$mlAt`hmYu^FBBM&s5jfk`G%kHlRB59f^s(0R9B7V%FLr##-9kUH8i z^4s5aWkJWE2MpFs?csv3c@G#a*jjMh0Ya?84*(u}?+xdCxMhp*9;#oQggcQ}hs+l? z){z_k&Ht1<_WzR`e2HC2(t}jCbxIR@5Mlm*9cQ@$tp~kk=yr*O=YOZ)F2Y%G4~l)4 zY?tT?e?fYrHu+7I3v@H@4sP#c4DcH~J9AVH578Y~Hh+if0DYTJ=y~1?1a-Nl^-m_y zdyvPzj~ds5R)WV!oYJ`O1~)tO`JbbYx6ADX<-KCp3#o$_BR>`Tpy7NSZm`InbFq9H zy9e!Ke^sq*QUd&Uw3_%#WA7lvMjf;-ET{fwkQB(Q!wo#$BeMJksTgJw-pZUCRf)VM zgd`czc+*@OWzB$jr|F9N6L=ry)zP(wc_&P5e!VHp1v)WMcdhAt3@|_0amiI44~ZMj zb?Sd@2Wp%Ln`+Yo!KNJi)ZV-3yiac6e;>blCD1_Pfbwm6c6D^#bZzD`T`wt*w;xgm zGe&-nim)?a_Q`o%EoIgPCxVr>Ap7U9SzubVmg47kfA#?vO)n8(9yvdCs#?TD61H*hfou#-y;5nvfeL4!AcXof5MX&Tq;Eu!pU zgv|+|(mzw>@PL#td$(?~+XZ3>oQt!576U><4bFS6$3x?L^!%hc-~s87^;e0kK#)=P zNMi5598SC`20iut%?y%|xZBNM4=sM94@j%7X5ZzQp*-G&NF72L`T2V_+-9xe2K6kB zA?5F|dE4G`8lQ)G+Zlzt(0){p-MtUr6*tNkSpx6bsjq?>Fz>sp?C0s>%?Zoi5aX9Jx9}PkHnI zeWVVY(7)$bQKGQ4?+Q1l&E3KMupgWEwQr?gZGYbeC#ugYObwDT|8J?cT<2#-^^22m zee&v{<7Sy+z5Cz%|Ids~$$x+^u^c2lNMi#Fp4fxFGwx(X>p@G+KjYZo9>k$nX_^7| zppu}@Gl$?6WFx=Fp<5}=(1!=NFErp|0NZ2f!Qr)dNZX@|u5xz=7-E<@7b6-3R!i`m zDR_+DgKE82dh)+u0Rl)|x#l}zeP;9{c`r}bD#U40UJt5A>KMStFZ2B-v#NP65PQK- zz=@7tAB)WF9iL#Hn+2ea-lco}B=!ojLcivQ*t!g=??H3g&egPmsmiPwhpgL zdA!|`I<{iu*ZJA%w4Wh2@Qc&ax58obR$rfQ83gkd+sLrRGQI(Isq)YNCb8T1tc$-! z^}KOWWYz(x0h+%nNH!AQ>d%hI6M1J{7-L4`{pk1h6S^>O_PM*vnK19b6?zisFz?0v z2j=7@T%c=dyJ+pEV?fe%hYwjYc*uCennoU#4v^Jsc|Ex?2;62|t@?Vc8|tqmeOr3l z@kAC-jKsCt_9!LGpm%TacyYg)?Uctm3#mg2Bfo+-8@0QIxxokJoQe2F>=mR(j=RUx zqlG}_O&s%sZtN4JxTu)5&MT#;e?W>PuZ|22OPMUYd{CLfL{clRwIVao8{Da|L>D5KpTm>G?pS+E{M)sNqu&v-Hh^hb0Br7VdR&v zB9zPG7dK!$c$C|87Mpj`3%_k2w-kd+&%vJ~@=sCQ1hIR6TCGxFk|0C%-Fp?8bYTHfuM)lEqkk5kM&z6TQKn02W<>%Dh{Vy+6zZaKyK*EvodJwUWM;Q4@ z|50mi&EW*m>|HHPCj>n+$Nj* zj`hNqSX!5dmn86z-~p2-P;3XF-?CetVI%-7eUp-jXF=z^<$hr2g$x$3fW+;td}til zfPRVPX&z!)$aqWZeyx6?6Q|B5ZVcwM&iW(k>H=r(6 z{%Nh9x+>df_fb7>TsN6@(8WDh_&fh|lknDVlT0J>=8Ag5fyO)UiK%Q0%=_&%GwpPk zw@X6l%VwDO%f~u)0Uw|Tl;^b7=iQ!^rs zVd%Uso#VGqiDm)3NL+~b!>1bG(0Nz$j;i(gQ6BFkq>g%w{64?Rml(Up39j)9bFARN z=AGF0C;wJ$KCtJi-M!R8#_KILog*^NjZ;1Ea5C%AyEza~duzFSbCK}Y%G|S>$otH6 z89N$pD|30eVVHNW5laezcdX>n<=-%GMZ@#=1XnmiJa4+Q|G=lW#LjGK(3XNfkZwBO zcjrh4@WX3bfTMvRStnE0&lR0_&FjslwtBLF%ShZ=wvH>(|MEh$j!#=M`{O8&cO6nk z4@Q0`xGU?M=(#|+!p>y=mDs#x75RqR4iPq4r24JIiNy!;O#c5zrCgJN?slM zyAEEc{`+tuCkb!OgTo0#-l3HNY-qgGo+k;s7yKy@Q(0kBa{xRd%&8*-s5_cIot(-K6-h(oy`Wp@V zDen?Hi`0>gk>BV!{MJ8_oFJBOiR+LYb`QGwPPB&I@j6K2KgfEh82c7Gj)AT`WZ0Ja zdk`aeb&Q|(tsl6#yn+-U;k|kKY6p?`pw|k1G~TbLcR$gCd3WZuv!}wm4S)CCYlC?| zB)wP-;Dv6lw9>%VBUo(f#$JI9iZc=*o#r6AmHcgU%XU+&Re{@!2iu1 z)_>w|SB;6j??LB%!+GoWyfMn-EsE4pfRUe})kFCk7F^&h&7Ij@QrNs_Z7vyxjO2ms z)+&n?C$V3UK7O%vskpzJ>UkSpBCn1Qh6nXOr7rIv@sse@Z_1P+^2T@e@}luJxNLaQ z3g$g+aK(eb8~iefxeD{s=n0biTd!ULzU%|9ykntpZ(C&l@*DUL7^snjR|}m%BF~32zXu zxRc2HOK9dQG~PZVKRl1Zyw%L*=diPz(gcS{OT8M-r@e)8mgnuwEk_K zN)3OP6-Ztk#}kizUv*-+d-Ia;*4sbjOyq4i?ahP6`+n2#i71$N?QNU2gv|*+!y8tvwoo6VdfvEZ^6HTGmhzR)`fvZA8d??(p8rKidXORSM|)xqvg}$X zg4ToPfo<)5>k|EXRrA3lxCdRm(Z@ar--GNoY5ZRA=M0@a&nxN*zk{TcmDwd{H6Eh< z3Hh%7(E-wGt$Mv^g1|h(jM?`Y^h+#l{L*$uJvOk2#L3`9c5jqLf8x|N!(Sq!i1K<6 z4N}J;jQp;1T|Hx^&Ix|BGBM5SVfUcIHTCI{ZfRisjKICNmDsn~!y9(L_~ejB^(#nn z>#)i5D`bP;K??I;L&AH`1=}&K_=!Nl6hGus8&AATX5hz*+CIUfcv(IbVW^~?f4)*dTtz`qx zkT{)JnqenbqVsO8uRKwBhw^w6>*&PDPjG(IXIVc^u<2a-+7;T^ykj4AZIP0`0yx~E zZeM-uODwC%ZEo}8l~lijG(ct@+q}Y+9TJv#3zP6Rc--ql*YD%}&)k0_5fv5pXo{6JOlZpJE3@MYso z)`MEuyvNd$*?MKJ0JB>Tow}@z*vDIZEP5dE*Fem8x=HTU_iOst!lE?3)Y7VF@5(^fV$L`)4Z^xdUNUx^)0cmlBygJ-< zO8T=im%FzR3GZ!o4F8<}*K+U>MB^sL81nO=(l-eYVU=V9InhK@jFumkM1>Dy&l9tga|N`<;@(Rr`lvL^V>YgXWm#5o?w zT2ie-=e_k?UY%qIv^qBLJ#I(+gw%7u{k+w7t>X>Y z-5Y3CR3ty8dfvFrWY#fvp;7w3{eP+${|WQIBuNi46%2_YUSb!eq@>V#P}q$kH$C_g z8~6y!U4na%lE<-w{BCOc4}RliFQ~gfZ!hm||Ct^G_Dqxrs|ewt-|6PnlaX)fh@n60;rMXE%Tcuxw;?5uu>(If-Z+(#A z*VS7%0asn~&E$R9J?P5@!=t`O698}X^qJ`?GJ4R@2X}8LWm5h8kNZt#9jo>+uK#;L zT7rbP$*in6k+;+oP7;lG5YxfU)-dnvm$}xLVczeX78L|w-X~lJsx}F_Ko1^Po9s@F z0j9OA0>@$Aa;0lZn%Fx*Y4t8<#~Xp5Lx0CF*>C8)xsLhorkiI4-AG)+hn-dv|MI=S zotq!s6{JAk#5#;I@_YB~SD?TG2Pl~q*vD;-&D&JxS?%7~i{RsX{{v-}WE^kF``Iw_ zT#ot&Br@wL*q@*_0J9>G8RE&i8uF#B7B5%6>L@_kpr`CG+ z$H2Ue1Pg@-n-j;PWL^uxyw_Lo=W_QtLlHWOF9YGtiSp!26MtadTWth|FEVt3eS%zb z3Qz#R(Ovzy^bvi7^oFi3*Y2mRfDVb$8C*=yv`)2*oU;^)<{a*ur!}Gsr^$@dWk~1_NpO7$jJ_d*%GoIN7 z@4d-<;R;$!(+QYPc+@eS4+P^+w1N(tNAKQt345}fY}mj@Bu@2s@j}rLbl&`2wXMCk zC~y8J*0CBRzZDzg7{3H?f@+iGfqVmO-glmu{@T7T30zu`%W3K+c&UHw z?N4SMYYp8A4=4V2{+|kN0l@RWEJ+Wt;!Bz)_8_iMm9N&8t!@bb>E;gF z1}^A5NKI6-PC1kfWFv7NJg0csSD>#T|2S3+H@8#XB~~4&1GoR*^GnL?Ju@M|0rn~G zKd<16-Gi=Z8c3$Siv`Umdp$iOv2U^Cy6@Qv~efZ-b z%zKVCa^bybCva5YW{b!R03LA+tj4P7yw^b{T3+sK;208TBPw@|X9E2ayFYVluvHu7 z@g~;cgpuFMof^?G7dgP|lJ4HZUsbC zMqV8i7uOV({Cz>XGzsrLH)cDDyfeO3$e{85?z&Yd z6E-K}Iu=veVBS{mPRy+fc7fj8UVc>r-@Tn^Z#+~F^S1B|#QhZP1Ps3GBb1Z^fl=Px zX|tQ?y!VaqJ-h_iz-}b&@VN@b>jLPDleWlEPSIY<>)ymVIx+IAdCpdUBbEaQ=A|Dr zKZwoSRj|j`H2yTGRV;Qg`H8(a2_G@)_mAH|_49xDd-Ccyx+;5)BXxOkB1OX6Yzx~_ zB5&(Xi?wLH(^LdArD5J%)wnJZcpJ5T$mfH3cj5(}B^$dy>PezzyR%}z^UZ}%W?|mO zzx-?l`8vV8#_5+gw*>;Q|5%Ai2|91f-)&(W%4}dO636Rgc;1~4op-xCt!(96%HwT? z)X{~J-)5#3t2c1>_T1>OyUZDz_wlPuegYl|K!WQE2e&dd@BW;*Q+;1AP<{7)a*ez? z2Iig#r2cpQp9+S5I7N8=Ur*A5?0@Sl5_?dE6RR>>55m!`FSdqPkn~>!)h@t2C^^%5 z>;XLgH;CPdc&>Q>@_LveJ{cDSMzd_A4++3ukczU_+NazJES*dwKEvn#b?L?4<=4BT z-Ws;Ich0u+VF&t1oOXZjw}{W^J*Xp8q5e4qz97v3siO-szcnx93^~A>F(#mI$;YsJkkC6#Thnd>s_#L@qvX{gn!ph%7`}XoRUqMQ*YbTEk@rsT zAw@La)!$V%d&0bXKHs@W;Qe5KacL9GTRv~2tIWCskg;*rdZV*3pwHO9FAnA{vyR0< zL$MR2MovW!Pr?VJotYHwT}S5~QXTF2*o7TLB5}_yOv#?_L+2flI^bA&nDTD1hY{<* z$geJyduK{L2Y6P*Ro@wd&3lnixT4^86ll5j)?$x6_WX})*fHfXyqoHI<66k9V~iSaSP1>$dk*_Q9V8eXq2?iJ%@RB8r+PDT-OQ2RA(oLX9K~M)U?mK%jmrC z{@5>9X2K4pk+|ynYHP3m3vUa1>-5nG%Hw?xsly5*za)uk=V=~s0BKjH{R4s6yzQas z@#AeV!2YOUY&ZXMU;p3DF3-s?zsTkE{GB6jam31fLQ-jmUj z-gjW$L+fu9lJbr(v41`A+XZT{aW}MvdDHgXdCCOO|4!eJn68xW1c7HVq#ykZ0Mcxx zAA54q=YJV~n!@>HHXx70=|0#d?yZ2{z0ds*dv6{W;}`z_kGb2InTd$BQc0AwC?%&- zwo0pz_Dz(c5>1P?$&wVJM2ak-m26q=XtC6UBubGaTWPU{%I{3?xqasG_$I?y?DCLxz0KFIjps^Th%H?EiH*YLMsmVqvTX zUDObshgXAAR~x_TbSg4^dNHUlT zaEOgub3;4^_Ww&ZZ!r;vHE6haWoPCO{2COy;Kh+&QWP-4j$3g^`^xGV{2H{Y<;m2T z9Nw!ziEJN4`7NG3Q2%ll1*n}?c{_BOxCTkjs!H06cmV(WnL6qt#6#?b#bsxo$=dM! z3{u;QJ0Df^eSEwA`NVE62i_jf@BV$>Vo<1A4-fA{&rSyZf_Uq;j+C?T7TFUJJPc=$ z-_|`Jv~~AEo7^m_ijx>%R?GczZ-}?EVc`5*5bp)AS2s95iv-7Ci-u)Cz{gwmhp5M# zQAv=`j;ovEX1B>3A8#v}yV0Ky^B&%cY#-JH`7!Ob$vBKqz%H5RaWy5xc;8GX(cLH> zKzfDT(nrU+_`GGkz|{!SD!#{?w2@064SBz`|CvE*bKvcMEhviZp$W# z@o)y|Ik9xoUWj*Rlw9Ili1&nj)~i;#_@HIYCNXmd$4eBPo~YH50$6F%NLvx{dhc_#_(vEx*Y4Ch#%z{lIG zj_R@IH1FZ9&-UR%klz;B^WPi4P(e(`qz76Di1A)fZeQN>eGAw!|MzmLJ@MCD1#{0$ zN~AgP{r-QXE_Xf(ibC|4$Blj7qQ!x?>uiNG4DX>d)46zfuk<=T3LxI}+cHmCc-PLU zIamPkz7rlUn`!BTHpFKwJ_YyQ42mNv)Li;Mn$>t<``A69$LGoJ?zaa(Ip!H|=MlON1HEG;JnD(&?b1>hh39GJXx(7OL%<`jZ0M*>SCIha;W)@rT%J7Q&ZN zGu~Tbk7oNI%5Un;+1GzoQ$YRIMt_Yi;uD$Rp{;JvBm#yF)o*h z0(q-Xe|$$UAj(e!9i8e_ zOaVQTN2?kh5aX>a+&7gLZh=}FE-%>D!bSh@UlMgtn#T7H5{XM6qc_3^R_BlP|9TvF z`&etP!|;yS?rDgJx5W;nvWpP!8qb^QEWF(nR@KTuyhZ+$%Ov>upxuk=+v5@#pkE!K zJ3zb}GzNMezy@hmkl8+;*->ErjbOE~nfQ3mk997!Yp48;Ykqj;Wri_6-nDrHYQv7a zhxbCZ52F0~_UMMslB0q2N&OcBDv9y-%v^F?d|M!RK7RFcJ2~S1|EhAyfaT+QzHg8w zsdDGT?f%1=zhlPwe_al|y_GKNVtBtC(lNlpTjfB5a~;IHYS>|r6Yu7u>wZ@I`k+Tz z=O(8>yk8x3kn(|e-@B!<^BP>eWgL{1o~}a&qy4Y!Z|mbvP89XBKl`dt{>Eh)?$T5_ zjz2j`a+%w4=>+dBZ>g|-5asvkXpW%GROmOXXwm)~#CSKxyw5BS3%w zzx|(wmr4g|GxkKO91cw0QdhFaMYln&;4WP|5^Qi-%4L0 zyc(45-f?`uvBP`i42?1Nm@t;m!sBy{OyTfgO0HJ$gEmBlLQzBpzE2hWLbV5Ps#k-Za0*U*7tyP`(&(DnG`vz%- z6L&slpRx%t`sW0xF$dm(We$h1<*mVXH9dlF z$A9AHDLsBL{v|%%*>)A)OHFwXZzZ;mEQ0)evs4{}gsDJ0UA}UbC^6oq6u&Y-?NG3= zy=7W zyYPC;=H}qhE_}ST3~O7n)u`YBJMQ%4=*2%~;x|b5<|UnJSj>BP>#%*)66BY!?m1s= zD+TP(wCtAtMLdK2HbUCCG&Kk;G}ErH{lmo!^0vB-^{xL0?*G5TosWnbrY0GFsyo-7U=v}RJpr_L!p7aGDZxi9Tt*XjYFqa*7eV>Gp+#GzoxA_cs zNZ9fo-sWr{TM6>Jr(+xY_$viGU=*9F_Y>nyN~PqtlQ)96X}3cq)QRyvr|f!n`l1oO zZ;&z+x$~h|Q6`%lHHNn#2i^gb6-qF?%eSSC!^3;?(`Y*ybol?&iyG$ z1?Smux0d-lxlF;wTOsIK$T;r4MwmjWL{@{MY{zb#XlKd)WV*anzvDr-f};4QkS} zk-)1#!7fe-TVeknJpV=b4p@UU-)ar1!5S2)R3qfz?1TCT7O#0_&j8l3sDmo3L5GKh z+n?&eD|RbpT`er8gDvCh<_~n^*Pz7gK*b+1RIr&HSL|Z^7FmE_gZ7_wTu-y(y&ANO z?PCu?enZKgPYl*mfZnv=y~=9D4brwFznA7sSr0y?=ueSDxHy9(uRCpcPb&Y{AZ6}+ z^t)|1DRX^nh&AQFd-E~09K(BVii|iO-X!fKHE9s<&}N4g7T%fP0`_Y{ynUJWlbD`9 zsP1B`#(gW{6+5BF1!h9LYtD=PItcNe^!1O9;2}DA>s&E^*#msMbIK*Jr){EwPIg?z zMem<&8u)leUA*)=%bNG_KFRj6g&@BVW^X1mzMuf#&m+GtDih<~YqK@|>C-R}YA}#- zhl>}a#AxsDTs-%M@9~~Ifjb{pHAkkUq>bSXIPl)Y=*Y$JuJj%d#lzduz4OZ%i1&^i zn@n~>yf*|LCC`I+x7K-t)d%^Y=8IJF@x0FA{P2$kniy(X>;jAv`&)!ddor%yh9eR{e|H@ zx#^||9^Mnajn}V)cwcXOcASOx>iF9>W)SbXsDdI&ln**u7Pw=!2LlW{bq88PycgSk zHL1{P0RB_tJX-vsfY8s)(wDOE_y2d8osDerq=IqmxKEpNzB%s0$6Ko=sJO_1_wY_* z`_LfBuWNJF!Jl{G=ER{78-GqD#{2ea7!U8co;!X$hj{ngyC=fhoN(5Oe6k4Qou+$f zH;L|pMg<-z9Ph^f9*-w2XMLQQZt`ezE8KfqE#~075T5_1+^!J+vI-w>5#)8g+;S=q zWyf8eH@y8v5I){$Yw4atJh*yGVf(mAkl()T9zu5%X<)mMwbIuA!`_=TDYmeMLHv44 z=IpD7@?Y)bd%UO2;Lb-=FPSC~pYdP+&jal}VG6JYE#{~}+wRgdADb3<5z+O)sMEI;RshHcDSzr&UR1elWN>|qUZKj++pz#;ab zhW)vOSUPyv@91{s4*m?%D4ZOURYV2%*l{g23i89c_%#Sga6o4|@!k+?%Jwl5|L^&g zb)M3*Hm873{fzFdtXkH* ze>O-hIq=?k{6YYRx5BYWQh0cqp)L*5aELWs{k@Ha_qQ_!({v!-<=#4Z@1A<2zdTK* zB&=Y7yT>eL7C^jT6q1+v!v?8s;hvOmS2{R1DzB}bgOB&n?!=1p0xCGkj@!B3BOo;dIZ7Y|~6@|CAK3CGRwPAqR9U7@B5bpyw7QT27m$$<0e>ozabnx=a z)(+KU_;`1W4zC)`r-BxC+|?IUUo&}pyaRq(D|EW>9^Tz-AKnD{<=1shLY3+t5Dt^%jdb@ZMrV7r?4_ zKzcC+5AT@cpT;eLc;~Jo7qakH{184<9^&nG^Ppoo{6Kou?a!XQRt%t5Z%CJic(u>C#u{I}=An{yfh`0a2etBmb zAM}aRT(dGbIYGBI?NWw#&;Jw0oCNWHl>Y-9Fs1{;*>ClKhT`L`3l7fkOQ8Z?c3igC zpR)(Z_;}meoC$O1!MV3F+sAT({3Z`nDeojxfwR-MCdE0#c$Xff>>QsS0MuWY?O%1D zi^GZPwihni{o#AONwc~1p(ItJ_TTqYTBcYUxU0O1W#x4;1N4hwhyBG zl-5l8s-i#vkDt6k-9m|LkVZ~b?l_?+v`@;eZSV{iGswXk9qOSK{9l9WZ*k{iO@xTn zKmGr54!mPBKE1|<*aC)x3?AOvxo-ClL%fBXMmtz|f3H|Rdke&yQKT8t=Hi7KE!(>} z$cq8)ysbOc1&7%E@~>_8s5ihTWWKz4@QDuSZ!PYG7~wCm3+k7=D!)qwTi9{?a_#Qv zM&jdLm@(6T5fAPl3A25iBgk*}qmI;xyClJpwUSX`e#Cg6>b1XGf0~Xel!sc0$#AiQ zL@H5{p2`2uTab`4u6$f>k)I*ZG&X}=#({UV>tGLt_wLc=iFkO626~8HfOxN2?QEF@ z@zz_BZ0iB>Ui4ZiIrxbedam+Im8c86L3-V+@z)^UXK!i_tcCagAIw`Xp3LAU$XMm`{-3?cC`LW8jI|9@&z^ zpInLY7K|7B^y^pzx^Bh5N#!77ya!!&e-d`R#P|JwDLIuZ9|O&8gLB{x5}ceY<-j}2 z*jgIHo1R`MjfZ!U{}X`+5bvUlg9R+SuYG>?3qZUL7X($*d3&QvWM_mggohK?hz?a| zK)go{I*(n{YyflXOFtFAp##c3a-o?PKHd+1eIKa0PX!|ExH&K1oVEHFyk|aBBKPoM z|KG^=p+b<~P>lEFfIvx5;9B@GZZ$F939H=a(GEtSSF_&##h)yl+D{-2zX zCvxS3_Dr$-+&_;KFX6yDa>P;&!+ZQ-=mb2xB|iC#djs(fZ_J{yHYf5UXJgp_l7|3eB`zJ&1b#d^56M?p6KxZJqb9(+HusNq|249 zSPk+D)l|T%K@C%u^-91Rv`6vvk$6~x&WVJ^#rW%*K3yhRP`Ta>4L|nG=2Z;?Y>$hy z7n1Em3sY{CpPkqMCeC}5zPO7HsxQ494Vi~O#Li5$8_4)h1t>et#TZE;$KltY`axsM za2_0DXR&?M5#*=Uy|0|9MFqPu6$8W5h-=VYi&*#Wym<8G%4c)0?IJ#dN0cl&&=@4(S@7Wlb_AnyRn!7cFgbE_yjI*DNWg*Pl7KHD5+L5&z_e$ha0Zz@xcum?wH_$-*yZZR{qTbH?B0kxi1(4ZS%+NY8o*h`c*$|1 zba2!2@I%FaxgcF;bG)*47ZqG%$2A(xD!C(qk2m#LMac2hyodJ`whu{y{MMK++jrr$ zB(NONzLJ_kjCWnU_xZTv@#sEN%R@dlxY$9mxMIKHZam-PO)}@whmG3TY5%O=+Hl|< zuNXZ2FW!=eWbyD`K3;dcJ;YnyVPiQ9@4l#4=7%BP$*$p+b60qx?ibqUHE(7Bzcs6c zgCO3E9Vg9vsMr94FBy&AE1`oLL5(WOKls&qb^YCgn;_nm?6~#slSn-t_;{D=70y#| z=RLe#**-21 zVukD8=SMtI`$^3ztfRDFaNYl_79z2{F%=RHmlwVTKhoxnbz;<4#bpNYUW1~oG&j7B+@2jD1#HOCwhcA-{eRcjGR5poG_af3?hcbnLW|6sRF(9JcaRo#_#7+U z9?thONXJI*d{}*8e+k;Jqt%Z9lWt9T#c>(RRW{H&2mtgRDzH9 z_*%;Yy1_J1!H!!#@}%lR2R`1R)%Rc8Pvt$lF&~==@=Ge#{IZ|d<^d?%^R07HiLBJz7?yAbbPFWvfA4y;AD6-|F!@`(Y?X$ws&hj@Qp8nVY( ztN~arzoM2$j{?Q3q#jhG_;^43Q}gjd5DlDX$89Z<+WhD}KHg1gb0@d+Al{gdCj|NB zO_`G^7*#N={Xw&*r>7e}2*?r}0{$G@|ruc(Nf zPa@yrP2$!^xxazbKg(P89C$N&q+2k&-S4|8;^AGS7%}t>;=N-b-GsF{@uoNF{b^Xe zFV{cNv(0x!74o}ABw88Z@~OrabBK3~%i0~~QVqZ$+dFrsR1{GC=+;%~i(kFXKWBKv zBQ&7Qj(fQ$-)q%je7w~r9f>)yk@xUk#P*>=ke{<5@+-;wd zCZPcr8<6&5;<-1;Fl2_{b7{VxoRH>m=flq4w_+{4-txcw|Gx!}cYlEWzY9kVNr?&cW`$dWO|4Ebr2k)V1 z{;xs5&T!=;bo{Dx^Alq;$Tb{zr)`SM!SH@((4~%tcZ^fvyEzc=!=!3jEX4blqmkoE zi1*%$cQhYvaz@48z3cuYmJGTzg9_Ck-g=8{Tx)jAh&+@M$trkydSKL zce2u=furoW12pBAjivZ_FO@K5EIrSAc-OIgSPW{IU3-WQB2X5iti zr|+V%4B}mMj=7bE_w3wdSGPdCZ*_076CAe+{a{-nIfs@E7No>WeSoXCvt}&Yy5u_( z$nTV=YpPFJ$9Oh^ac<9)o5J0E)Y^#gY88mr!`IPgxD z@fXDKcHO&I4G-@{H&tT2A>NNgx4vTG-Q%OFb_U|@EOb$avSc;-XZN=CUJ&nqd!LQyKp*Pw;#?Zh|c3h&&fy+f#@vFD=YufHK zH6@phbZ<4~Ht2rlv z`M>`c;nGKkl``uCX*lzs}&%3#Jy){5Zs$q!#pSK{b=FZ3EZL*;Azw`gR+w*f~25XQ9M-4iZbut;NL9SOR z+ITf6_@v;rOuHge201e?3f7<{-$lhNU=1qpCoNJt?})mdcJa2n&H$tum3zMOeQ2lr z@A!^(CTQ+Hax&hF4qm)@q+<6k-~T@}ESPX%B@MK)c> zBeoAIg8Ww0iagzANC6wqJ#W?(5HjWbC;H!hUiI0iuzxTPHD4oBJ+hJbfVA@XrLTv} z9r%6*>88z{50x(TL+?Kqq`PzAeK1(+JchThNS78K-k)B1Hk3lVr%T-xiH3OlA4@th zAL8wH*7xxa87I_QMk3avfdPIl7{Ac~;$0J-7gW>11lN~6jCo{32Pf0at8#YX?;v&M zzgNs(K?C{hIQ?lW&olJ#hgknBG1kl9@*duA**?4p@@rrmc(UXK1(5uGe^rhW53!PZ zrO!gX#G%cHcb2<8=Hh^K_z~aNxh{N9n9KG3)>|JWfXbmoMs>6u*&;G!IVO9bMbPJQlm^9>XH z&{Da541T>8E79TpO%;Cz`Q-QuT8$MA#IWN|eEshHISC){LkmS+ojQ0A?FT{9<&Ttv7_z;ioSMt91L+mbLgA}(!Vt9oo|M&kSE`3}T-F+qF z=ve>n%7OO*;ShjT@3VKJXXD}h!{kE58;G~kP0JP*-oD=l)h0l^Uk_Eav}>+JS1rv> zvj4*Xj*7+CpTpJLNsg8K?{+i6!yhFZ%)Y?;{~Q~C{Q8%V6J?OQf1WO*flzkbl#iC0 z2UGF!Ry%+9cVs*7;XRq{Lxmu}J(Ts@9`JcfA>qeU>idZCZc^6MkI79!%eLRyEpI`5 zyrt6U#Gk#^9em&alNWO5LptTvwPe^J!MXQZ4!rj@?=r>kp7UtMEIhnpY-~OaL%dD> z22ELeZxVa2UQva3&%fqzTPtNHO7je|J3&qc&AaAkJQ)j!s-GNj&!^y&v6pcpV(byM4pFNgVtzhl4M~GQus7@Bofvjm8!~A{dKyg(Hg^E>-6l= zm@>IzWHSa(G4(s>q|k@Df%TR-4NUN6Zp#-hT{?JIuxVOF5Pl6>xVNkJf)WjMv*UjB zzg3R_`gAN;nGLl2MX&AQi!(?2i`|k1qx$BY>?L@Jv_W~Qclg%g?K+~ zutVq&@2@h?3&umdhb5xrKM@0o*j4KmBIPUejnUMpw4DV)91~+hqpT0$9;nQ0z8aGn&oKV zkNKUfvYwhTDe2;gnJ$F7*rW#AkKQuOj^ya`j zd&VachWEp!W4d^FhXp^MYYp+%aGtS&h4-Tb!+TwD2ANvc`abNNJ$hs50)0<-duxoq zqR=0(|G#Y>rg5N&34EJA6d!vX362<9h6yX;<9&5_`y77}8pvkHY0jS9cJ~cF-cH9Y z+>Y_!4N}+HJ{$=03qN0fJ_4>*EB~pwdPs&C?}(TaPD0P((dXAcTYf)Ui~HaH?c7K+v6zulFF{8jUr}c0OZ**pq7x_C1UQQ(_%F;;Hy} zJIN-ut{0$z$?UidxozQPFYxiUdh%sWCJ)};>df}Blpw#T;?n^J@OsNzX5=GJB#H4B zWoW*dt&xDX%^$wj-b%bddO_B=bU?+)_%H5!`a_ZocRpqrMU;vCbG@Y}2i}>FU!1`3 zKHg?I7Z2~*s<&igA>JR>x)`$d-j1%zk+6bz8@?!On`7gM20oPf^Ya`7d3| z+P~T-wvQZw{BlCpUow3n362l+$7qNV<9%}GtniQO3214g=%Qr_TvTs^d19?|-tm9` z@5!ByNOwHFnpYvXWRL}NNPmtfFQ}zjU z$0;CAK`SuNins=SJG5GA(sTwo_2{A<yNf`=VNHERQ>sq zu?8uC1MlNbE$!G4`{48gBRsrkt}?H_2=Tt((lf-uTh!-q(hG>UR+zC<=yY4utVB#Y zn8pB62iGej5O3>Y@ARp$NrQM#UCK~b_p(D5T*(T`P+|!yWu4wiI#7&D7IFHQ(^~@}5l>HP(|`gyE_C_X)0+SCyyf2Ov!2Ko z@*duUY#)0F@_Qn_@Q>C<3P|><4wBF##=AvuN^AbM?P&Me;E?iZ#QlHV{`Svzukio! zR^0gxu6!&kvr7ugADf)`ap0X(Dft=0d+oA$26%Yq{C@D71pEKQnpQp5-dkpSex4n~ zds*niBGGO;^lY@hXU<#(n5UpWkjUD5OHC@r0xC`Ov{|sb4uW8-MQIHU09e z0!&e{tNXblKzyG(91Mf2yI!YMcGt{RE;^E!VIkHg~;w_*%zL$l!ZsB43 zEQt5}-yO9ziq>fJ@xB^a1qO&L{B`In?ElwZ{8O>}A`^6y>@LVU!4ITWry05Z%M-h^ zEKMr5ET@4+cAQFb&9_yP@P}A)O?lUY?|Bbz4Ym)W{HFK4l&+|PGswg{5#zmx@vin% zY_uAPK^q!$^MlWGam7xjr2acUZT@eNmJ4y^BjQxW=z)`CGsqwgyie0wb1}S44}3=O z@V53lr)2~2)<5`jWdy`Ka=cYw1jO6bK`KNk*BZU^N7iQMBnD_(P^Ix0;{8?Euj2J3 zCUCwlYv*Z52cv^blK&d~8DvtALWdYUAU(p4%YURPFy~*Mw-9>a@{!cVdw4V0K8W&@ zyg97%Yz7Uyk&WALz!CaJKn>4KHG;RL4E~=d6TLxQ^0+Ldd)lk2fUN_?Of*IM7(-S>yjx| z*twhU@s@iqT*8fy*p?|(O8>0hZs5Q>|KftN<1MVYw_kJmI6S<|U)%|dgLqd>dacIV zoM=gED-wiw4@IxK-T%P`eRSP)QT8|n@S3kS8U*p)abC|R<^~g_$(MCMOpgTJg`zM$C(Fo-fzEzk9W4sfP8Zg@8K=R_K`)9-=aGKizLmdAj&VQ@th-Z z^-jq1u^um(i01D7^7_=dD&p1KuPKrnk8kGxx%V)aKHhljpYh-Me_rnT|0g%t|A%qZ zpyEv?bZm(AyS+jJuLk-3C^&X-MUiQNntxCjtU(gzrdz&b)u7qUjsgQ#=;mt@Z-&<} zfb*%72l`qx{XOJ)-MEPA|?%vb7n+jaL%Dw(%5Z9pPyEZ7dKirOncnuxg@ra8W^zoU< z8Ru^PuR*W5^--a(`Oo?PP!7C{=KpZU@E*vL5y!*3WwX9_Da3o+cdki=}-O#lyR9;&ItJ zi1$pYuVpyId)|7@n~x#hN7dsN`RuVmYkzLq?PJ0K=94}@$$)tOyd$~nYXK7&eYj7z z?4Sdg%nv(K-s0me+we0Y<|++LV#i7Kgm$@y;p5$&I%kH6FYn=v`FKf?-}je2J#ryb zAYI$$_B)vv?-}-<6}ojXXlikI=oC;(ID-tL95&30s^@#WUw+8q%12_STk@wJV|Z`k z!28_ekXabsf7D7v@bETX6f^J^;_XxCdVz)aZQI9Jsv+JB7bzayMrvpaVI52{rd$_;^qG?G+Poh4we@)y|&#Ju&!ruX;F1 z{=FCP;f?uNO_1Lax;N=-FBR0TOu4AAofvNq_nnq=>tj&T!DGT7B#8Te(!5RU_HL5m z|H;Y72JU=>%i6LhCm|eopFJJ&clFjNHc1!{Z_00>2Y(>m&dsl6S(_6W-U7J`oI_Vw zp>5^eYMl`8&6#ar2QG?3;Hzi?1ERZo9 zk5_}1imeM64{K1g9>rxdtU(bi&N|6(h$Z#kIppYKi)v0a9+-R__W#%1ceNIDe{-eVs~M{wYMLFn?|8RXFTmsC8w&n2$kvKZoR`E+zv zD8##K^QDmrh_^GjY;K0%og5CU&cTYc8K8mF@m_@V3s`nNSyh|I`HeuD< z&bpX_hxev~&ncb|Z@qGd11!8nh1C6DL%fHB)D`a-SfhhdsqZI;Fu<|TY2z#*-pd}7 z)IkmtByQC8`@Js;BzRcPe7+kW@1N@?I3+^7hSSyT^*`p9?N@pV?JIG zx&xZN_Wj6PCw@*BTtl{GB?Zt(O z;ZrZR^F7|QL)`gj8!qbhhj(xP*Z=cu*Z)6>!3HUYqXt#Dzx#;|u};RulksZML5cUx z={7~C(>8nCguohf;OX4iF|Yo}*CNe># zm(8ACg>*m*8oz06GJXvj=X)#n;z!!wIOdcA+x`{!HK23El{iiP z(AW?g&4Kr|*;~CZyxUL_89coA3btN42l1XiXX9lS-utF?uGk9k79u^p(_iI)UaVZ= z+w}$xu}vxo*%0rQLreYqlbHaVh<99K)YK}zyQ zK8DGM@IBrnPwssDj$SFW^wL;^6vct}RmAEZhIfK-<3v2X+uvVcR71R%Sy(G>f_RfM z`>KK=-WoZx+gBIbqkmp@AtetPK$9}hGZ^CiYxScf&s|KQ{7irGBnI3dO^ThZ;*XEF z&jhi1C40gzNa5s!&Vl!3X6z&k?^yNo z(s+0)9SfQB65?%cm%oFBw{?p$%^TwVL}5XdpPL<8=_x3<=L!SdlRmP?4C4KA#9eFs z9wxX|`+doZV{|ay?$C)ziTHRIFU<>~zlD<%c3fjQ#CV7Kt-aR^@qWLm?E1r6E)FM_n{|Gf;K%n366p$;K5{ea z*zf;Ea^QU_LpvG6TkrLz33zz-X6$etf_OjMJlxO1TTFcR#L+*UoJg<9@d*#3W|9_fn9{!23Hkr&(gDTfp{cVu$hv_Te)gWf^op+M3 z1{tl(oxc&*pbfWI_7A~3NIr?nh#1JPK~*ngbpLTq26JoYx`s~gLp#jh#i3i7z;CY! zC4D3kY`8srVpJ9WH%ND)-Q%5PrT)fs-`VwE_Y3|Rr0qJLv)8uqUJXLoK4J;-n{j%V ztXnD#^s7(kn=d15N<_@wX`cGei=t3bQ3b!^65=~ZNV0S8r@sm2`xzujfjb}J`*JKU z=CEdv$>TWiMin0WVMFYOx4-4^@NWM0+(aGX&6uBkl7)94iYgwBxEH#C!Pd((lhA;q#VC&-VFrM}onajkErg;NyL0;a>Gxn$+JoYnOr? zx%c>ZSIYEHUG$ju@XlcSAj&WCgx=jPwo(AGo_njCLX3BN{jHjW-WXIv+Qh_R5i#Dk ztV3qGHooC|yyvXo&PRc3V?gQ-*78;|i39JOKZ<-Xy!(dgr{dv#Cro;mImG*qdL%U% z;=TH+YBK8s>5O?`k@_`fRNUEl`l8v%VE=irVlKqHSIT*UZZs1tzBp<(?^PraxP1LW zY#~10mR;=+nb94&Tbn{eRl-B^zIN@IBsfT>3Cr^vm564T_N839y)Xu-m|;j4JJao4HcucuFqbHQjcBzR6t7x8lxW!s1R@Yr;=uS zVwvD_n*NkrG9AP(pe{N41Rw9yU(@>ogrz_nJI?Q!U~1zKe)azC);TV}n)mR|XZ!d? zklzc^Xn21W4KNU9U=u=&_fePp;xOY_^aEr3xQS|a2v=`Sdp8CrOnuDv4boCtFjqc| z>TImK_K)Em%Ypaxor8&3_0F8=Hw6!G{fUfc5fJZOi??rBc&iG3H;9LLfBtmh`SNHd zGZ3|X|d@7Vw@M@5B zbFTCbYk0-(?!ifcum<^e1d@DU4XR;w$17}fLkkv$-O1RQ3hCPtxoh8Giczzz5PZx$}{& zQ+l}epZ;Hn1Miv%U;x8Au5w@+9^O)lN6b$^yl>_s3>Mx=nOZR>5bw(!vM=PWxT3+s zq03SdlR<}Njp;Oq_r=9dQ~Lwq2hzVQNi|K8;MUcc-<7-Z@m^~v^m(;~6u8ZfYkgDe zeV`p5Z&bllYQF^U;k}COqmm%M+d^Np*Xc`vh?tH?GnW$MeLel9{O-p|s7cQX3+Hdd zco*trNgV8Z%l8dZ*BtJAv|dC^+Qu$OOBUq7yXtd@B!+kDw<={kyl;l=-E$M-9jJTw z3k&Z@&R=@OA>KE1D^I+5wH7^msBOuKm}F2f|Jkbn*dR$gx-p~?!UXh}Ulkp$M}o`E zXI>a?!N>dJfc8kau@tz*j?=cfx7PGAKHieGDI#`c-ov|u?Sn#)pMK-uaJV-O1X`NFw7oB54-?@&V$I&J+N$&)9z*g^WZEp+`9{$JiAed5lClK!cM^GnB8Zv{B;zEf5y zjp3bfDOCv%?-jLA-#&+UAG;ps9R%^dn-OsAF5H}`G@&${Zg)W~OD9atibw{_ZZ62V z4e`D^vgxUBC=-0VbY-LK-AG`&JME+*10V0w3D?Wj^rV0TJ1%c)gvh+-_;_bcnYL&0 zPu^>gir79f3G$0*UaWWL7!8O`D_D0^ix_X^Svy`$`WcUEY#X2i9IYYj|4*vi4)x7_ z!uJhQxDj_g+QU+^zU&^u8{xqF_MU_g3~%cX{)%{bi@Ke2`2z8NEcJ}Z!h1C$^PnB# zoxT6jkrGK4^wP4;ex~5mlR1@M&a@l@(@3H>}`u_kfeSFK_&w9N@47Rr&NF|9nNbRCFQ}0nLsD;#H z)O2bBHJs{CT}@q1T|m{MDpAK%1t{Ms?=nBpc2ew+*iJFJSdf^zn4Orpn4XxL*kmy=(P7cgq8*}*qSd08MGHi;MfZrt zif$717IhL`ENUpKAu1xyS+$EfFP= z@gf4k--X``w+hz_-x4krJ|UbToGiRec!RL3@Csp5VI5%=;Yq?GLcfH1gkB0g61pQ) zE_7NbOK7)Hv{0~+r;vk?h0r`9bs`TWkj1}>cZ)w4e;|HCyjVO>e7|^-c!YR>xQn>8 z_(E}Q@oD1H;zD9WVjsoY#2UmZDW=E;?fMpUEBM zMshXzGP!`9P2NL}C2t~olby(m$%bSNvK*Q6KWiN0F8t5W|NX@Ke*=<;5LxE_Mit|! zdRvh7n414S?GX}yDMPeX16hYDgT%s2#2-`htZL^Xewfl%ww#9eVoFbBj~3#CDV zW{5YY<{ns)fp}p`+im40#1m6XZjx55I#L1u!h&iUjH&oXlW|$JQ_+f#VVoFr_a3lgS zCH!pna%3TMvxKCo}foNdr zGt(U)GcnbBvhEV1j;WsYhJDBkOnoxS{Dr7t>Z3?sE24_2_w7_NqJpV+#Ri_pbWC-J z8#^P@F!k2@iVdQSsjf*HhY%%9b-tUChA3j{b=m3nhytcM5*Keq>^ zTMUq?m}={N@CcE`)QcM?r;sU_YTb4EC^8vSEskyKhzzElt3D$mlQ8v+vU3kI5mQg^ z29+bym})wGim8Si&0PouQ_KzH zS0Iv@syF=g4w1lA-PBJf5phi2Z%s%<#4vU5{C71(6jOIY6Cx22OtIG65n)WRmM0M* zOtDsT5J60_nqNc!Q>Q~DahY3#rm9| z{0&pAub;_ZF~z!vnEVA(tZQ4zgP3C7a!DS*6zftzazCb6cc_v3FvWV!i2NB-tjAx- zy_jOXl|k;o6zgdL@+VBOZek~YWGfZ#&2>Gsny@cB_j!#T2v1Fup<`;r+^z{oB&KZ0 zFWQl9n6i3sKN#7HspZG&>W~ObE%V#(0NH}6rMiYzNI0gJOcr~Egkj3EePbySiYbdc zttMnMrWS4f(}--sl)1$uIRySE_-7tsCRb&E1Y-)ciZYRnm|A%D;Tt3fQzrCh@kk)1 z7P!1Rglu4|>8uy7$saJqdJvfW9#gFMQ_1fz#d>a%+>I&L>wM(5m^zx0tw-*{)R9$z z!sIuY%AWCwMDE1YVUpz=@@q_GK7Mh6+<~b>StpapuP}8mSn53aC8jdwX_k`PF?B#V z1d!V>wXb=XDftDa(vR(XN^Zqe+NQW1ato&RnkAN!pJOUj#$S;93{xo`ncv9GnA&{> z874o))UMo-8{{TT?Of{UNq&N<9ZJ`BkQ*_@=#g$AKgLwj<;qs_BTOZx8l;dPVk*JQ zJd50bsd&ZU>0~CRw)g%VB-djqwt9yJxsI(=e2%ByMpCff#bkVXO@4r>XxG6W@_kH2 z8Cy$}?_nx(#8QrY7gO8r(pHgcF}3yhg#dC5rXqZb%gEK3+G0W%AXi~3TqNfq`3|N+ zpBA=}Z)0lnF|?dqiK$JDj$AT|sgT8Mf01utDp-vC8 zl9T6=D=@X*ey1M!8m0m!E0mD0V#@z*y&3rmru=U0_99=#ly5?uGx-vxe5^Isk;^gV zt#nbBd=XQg-;0IG7ck}V{B9_@3{&n$jxHpZV#>{jszxrsl zTn=}TQX>-ONUiSZPgP$Tu?xvS{>q+UJ5_js6fFI7YZVhXZPA?_Do6*WOq+E1eEc;? zx$YC^G{U5S89S~x?^4gVulQ?_KfkQVPqI|zx&40`wvQo#{4P$5HCS&!1GQ6aNBW`PTYoTF~s{pT3?P+jXPRpyz$$uf@ENFt#E@1#9P&? zq@&D*3Fc3@ZZy0lXe?|IW>s;dj# z(Wfol&zL#M!0%w{;X!!3rN+N=o`^dW7)lylI($D8+|xY}CK`f|w`-Tg`d7hl2ZZ;Ga=q8E1ZIE?{!Db>y~W3nVt;nPW?E16XNZvb^hT&FDCGPbJ_N593A}r z{6@}H1OI@uPXGRiQ$nS{2s_Tz_=bUjzAx@Z;31~2&d-Ishqor%M+QND8YjEL(F_`} z6Vbc+!-E)aOUaz2XZ&}dce=bi&ChUgy`{BK-@@Y`_Uv&vqb!)@bR|Y+8W!Z z!Fzc7uzjo`$nWWvh~=+rq=3x+>%D?b#CQjPj*U-*XKzz$dTkGFAimyG{hM&dDa4=e ztM}z`B3$`kRt=<0-k$N_`F}oW|5^RN6h{qW?TuhHsOOfjHeL-1i+X%7#;VA4OO*Ua ze^`S?uBX@!!W!hZCH9uaRCjb%?;q{U2i~mB zJ`C?+<=0wxc#}8zh-5*$E2r#pTnF*4e3kO+EyR0+va~L`#vR>5eHyUnZZdeF7QUGb z@fM_jk1ws5U{1!Q@u$B;f&$Wg&HeHCLu_Z=t?8n026>hpCx0N`Gw&mQ|L>LF*L~cI z_watn_Cb{27H1(>p=c^t`_yQ_Gnae3MXpSH^0BZ6cV>-M*gO+~y;Tq6`5teprQG?b z&AaV}{FxM!Sdf_OK1M;*R=!W|tt zs9YUToeY-u?1*^=m$xQmiN{u~V1nmyBR)!R;P?OMM2)_Mu9c0?J2v6O9f57|{D1r1!#1*1%>Rk!SjY0?=$U)F zbW{8_{^>1*OVY`Sok!??{*SMvu8y8vh_zPk-2Bf@!JG7a5t+AeuIX|t-dnHB823Zo zW4g+RNxTOIqW9f^yf69-)k_b$BX09W4zbpx0ER_jdv`+KK1LT-J#uIPXDcV!SAiJt zo^_ROeLHsdo_;U<Ki zXZw$Hvdt;L%cpfWr|dA2VUX+mL$d|6N{_9VREPn$4BMFxT*mG}raz?;?kd3-q|rG4 z_IbU0{}_R?dAANOp$Kgt>A1gtb?!Ek>eQDvr0`{u?HjqPp$JpR@&oz1+C*Z_rLSo<-59TKYYc` z{^F%iQ!V(s_p`U`*(8~ScrTy5sANvXfV9LhCRWxLH+JJY0{@yK-QR^;2U!Vpp|4K12flcniWB`(JYL2>tUmrLK;3 zm&LMPpPB34JQTc1FLjW46E?>xWAV1P(q^}SyywqLUrgGZa4i?@Xo0+I4h>C$#Hm7SBH>D+ziv)=PgpWDR`6KQX=!N<*`!2;@!CWtduw8 zeX&n2j>LPveUZ^m$os>MpHl}vK;E96DUTnefDA!%&kd0GRR)*43rykh7Ad#eBUNI- z$J8w+Hs8SJ{Uq>n{HYzpzj0f3)>Mn7WAiq8`0&Cz2ioi2&1fBX`Dt?QBrJ3xf>Rml z0^*nPc@Ni}*)+615efgw!h7N>K5qi=0l{8>Hu~@05>(b9mUaK+f9L;E(J*Kr1kV3U zDS8m;Jxx*%;(*^Et%>s?VD+G#2~DhFaQ;sXRjSJz;URa_vx-*<)cPy8O#hS(-vK9P=mU~UZH>ZM`@ zscmaw`2EPX>Z6o zk3oB$3FMtbxR}U3<%X!bcpb8Sm;yeIIx@Y7x3_+1Z;InoXaQMIWQ#KWV}beU&-{kX z*t`o02+RN>f;DKI;DT>U+Rk9}{+_!=(*Gju@jiprftO$RuhK+l6*K@vEPrd)^xqsH?**fZs*Rckb~P0SexvH|fc|(+jdS zv3M6|iQAlqyzlEQJ3!)n>`d}=Ysg#3Gp{JN#0^oiG1uaQD@du(T%i)k`+!=nQO(L0 zV8iWUy~HsVm{S&Jn4@ufY~o&DIfl)fFH_+A=K|W}eGIJwFTX1V z#_|>=TwvLdxwgm`eBKLJPkM`}rXW#O!4H_f-o?Lr8}0Sf@zDg`^Cs-4t`6pAow~jI z=ejpP1#i;P5Ma7Dl;E>Kb)YW3^`KJSKRHW#j*B!so+r8$={KJVKI)h@_vC(?O zzi|qL2dlnvV0Z6tg4wa;QTK}(St~*J&}44 zY5srj?ZkxDgT}jcO?oZL^uLsvC3?ah^hUVs_AY-F{n6|z!bPnfh(V9Z%2V@FLBZ8k z#?tce56FIQBmCQP0j8(B!iAnCJ`a9;CgprA0iN2p*tu)4PlfpK@XMphaq1 zt4G6WuLo(Ob>QWfqS)s6UWE$?Z*O?3xQs;~4@{+NN0`<8MC8Mn3j_8YRLuX|eNMGvec+TL?5Lh^Oi4~>bO*+1e%-dE%k`asd*BoVC0=&fDn>;X1;=R05_lr5? z-M)@3&ic3q65SJ9aAYC{OuSj9FavLIMfIrO@8@p;dkuZ-h;}hx+JAem?mxc&_vC`c z-Uj%9^lvmyswAuR=}+waf5&>HG9rlfc$4dJ!pZM-%Vbx|3>PrG(I!zXjn7*;By0b< zg-J-w;}@rkh4AP9o*u!;k%g0V&zrx4x;oAd{W#L{=lp*W3f`pi_{h9_vWDkl@iu-q z>?;g;3;(?2?*(~-vu|}7A@AqSZ7WYXdLT!G)~M8dP613Sdx_1EclDVn*5yJi;Bx5Y zi5Dwkz>Bs8FY6CtckhagF6sl2cLy4m`FWA&r++-Xbt59GbJted<4vvuFTcYNdW6rZ z!7pZkp`j3AeBK%2F%?(XlaMCfno7HN`~is&yw%>WXqN7I69TELWB0+Ce3d^hNDEW& zCLJ(I<~?%yHUk##>WP`vAg%w`P@U- z0%(u-cC?NkIQhjtIJ@}zZZ05jCFnf|5udkyW$;UoRM(^MbNEN%LJhIPh zp!@xQ{hid+q3C+L`Nh7u#fcCFZ_I8YSua>YO?Y%wSu4C2#eEHg`61YAZ?)FYD`y|l9&d6TsyO-Ob;s_Tnok60ZgYtOR(#%WBfpEJ zMpKcXop0su=TI^K`^8nW6@RDy`9FxtIxabV)BJD##~a~jZdd^_D+CCMy{3FrUb z_2(pW7q);)(m%&MOk;pyQ_5TabnHv)(`LsT=XMc+F&d|5#~hvVkMsW+;%`~~PNcma z)PmNr04KlujlBgNFFC<^>E52LuJ}DjHe#f%W_~cES)M)+d@3)k=B2~TX^nqgr>S@8B28ydIC z$G`w|VXq)h9yrJRZYS;WUX9jq8YjP^nS*y+u5bbEjpv{EIpFiwYIZ6!R!c-eXHu31 zQ!)R$tYo-k*ga17ygjL`V;AGIMXZ@~`~Q*@yh*3}lX-`x3@*gtz5P~+>ORPO0%Xg0 zK;9y62*&du@8X$@YjZAmAYyX$5u9qUds|Q6Is$o{i!fL3=V$?HQ4(cpqtSrH$;yNS zVDtW3)y4W5@?M0-`5Y0G$bN*)dq%b_LoAl|cn_j={KCmE?W(F2!xK*6*)#9vYD;|H zn!K4hmz5F`Bd%Um$Cp&h|7)F$Bt&QEo;QKYI)uB1-+e8a>)sL+yh)#_AoDIUt6;(6 zUDxfbR|0v9^&`0?-shOD#n@_5Sw?R=3U<-F|@~<53M5!C%^jC z*sBi|xj^=&en)0~eBM{IKaJ=n?LvNX)_xfrx`R9aM-|@N(6rKp?&tq@D(kplba8>MF7@cp?m{jJMR; zQb9*?)PyDEy`HE2X&_GvP!_*_$c!ll$kpEQ(%*>9o8_lZWXNtJP(8lQLf%o>+7sk;#0iQo1|k5DoHAND^w z#Px;#=l?V+>p1GJukhdePaE?+UKVivUq;b`NMD{J_aG5tb8f62Bo~@`waL6p-}3xQ zR#(`A>Y7uQt87)#FY2iUm8tH?xulO72}mkLNW$~ zBL+DFcGx{=(N_IJfdnE5MdN&KUwZJQ2fGJ-X_jz*aFF&cvCL>4!#Me+oK8i=TsXll zk8R-xQt*3_x3;bHH>Lzc84;R&_=<}8pCQy^{=xqb=Kq0hRMoM0pMT@fskuw6JOyvk zr_{*2f7oylv3Otml)a!E@^<>j8cX6GsedSd1M+SS4L|N)4nJ?Pz|&wsSt@wKmzo?8 zdCS$NpSJ$h49r@(w|#~KlJ*xq1pygs-jlca&sf3RTUuzGmPxG6oqwz#!)K4$j%Cmu z?@_dlNSyqRcSr8*+Xj!f5N24+7md$b>BFX|$^HbyZ{7VD(o6C8|F0erUF0D}{|`vp zBvMz0!J76*JO1qd%Te$qeH)O>yZl!lCl+tMBqilp$Xjru{~(Dsa8kDFg7d%Ow%3cq z-?$@Vo_@bWb5g;wJ3O8nAnzH@qyEE$7Lf7!+{oztXdt**qkEcw&0B@zx)LW`K`uq( z_`bFYAGnU)y)Rho{8^e#d%Rbob(G`ecYOSATizN@pxkif=fiM(-tR3>bPW$CAgyZ` z_b;Vp|KH?fsiemL2lKxXb#(xrz!NIvbKP5(f;Z`7mt@|VxuqOfyl3P?HVeQ3Nq5uG zMmNYiWT&+KDahM$`~;UVCww?@;3-1G~ops5Gy7)!KnXh+n=YQWFOWg)0oaui4zZ*ea9o}Y9zeWzt@s^?BP5OE( znYXdwZgwo*gZ)Qh)F5w8guj`@yYt0hy#eHXEJ6wSVC8{GZnAaQ=#dKc>T-H9LEaV} zs=oD1Er99U)rQ=*Xt0zwZBsc9cK05BUc}RuNCZM?oCBM%x>X%EZ%v2S%jIZraq2|MPz-m317i z6P5gL{>PiVY2)W`{$EMagGk@6Cift_Y`~AzgGNt{JFbQ+NZDJn?Jlqf%^NN`rW~lE ze&dWbQVUTv1{7TZ0RjKN?r@F30ad zUNy>0$s$q6H93OA4tD%YEJ0J`iN$~?{qG>Hpt6qHh$%(bgCOq}6ue0vWGC~U$HBvg z#oMyrioHGLjW}7EZ-Bhd%&=?D!1+Io)oXUkPd6lahv-9^q8zusAG_HMfl(knr zHt#sX%i`mVw8vW?tphK=ib-|e&|6%Ij1ZMRcj>~PzKL=kg2``I7i4oC-E zl)|;V=zoKBx|zB;dUgUN>m^P6WYd+`{k;+BLe^yw7}--{{Fgd%R1~Itp;|OSrw#u4{-B$QWogZ=r(s zCY1Nr+aFcihVd6CSvgJ5fagoPACO`)sH-F3hjG~X19S8LathufD^*piys)R%YXg`%Kzy z$hn}8zg@4T0S;cPyRYC1QZ(A;uE)n_P~4@esth+ss}?7|PWpk}gG~BlqH+!r!8J54 z`hLv&OaFL+^rfMYby5ZG^&kVZj#ixf_Qq_AhP>a3vGC?V-e2E#YzA2|Y-fn0eo;dk+|9H0Q%REkC z>2v$)vRC-LZ!dRL{*WAp9G9}IVF<%tLALGY`?8_(1Ksmhj-jp&<;9co!GFI0r%b_n z>PTG@xqFv&K3a;!JA!CA*$sI&YGfvpcz4fhIQA6sR_I`}yyoSG#NAo}hjw*1fCTO|tKKQ@UF$h_Bo$P>ikJ-leN>=)$S62mx2;=OOnqF6z=Il&U# zsK6WThS+ArOPq*G153M3JA^^rqfW2(`3^OMR$k`K$%Zk2J+V;C!QKb+UyDIf-%~*X!wO_2=V6t0;I+%6H6tdz*CjmeV0W0W98H zUDorK!uj7m)zgo(_qNwh;DjsWZJ9ik+;zzf@rmLaoM({+3>xqEJ3`(}gX_|Khnqn* zACqeneE(mx#l+?u1NPn9EmLc5ZJU7m|7e`}?0(s60odK%SF`41BscBd-r9uL;e(Uk zEZgztIg^~gwQS(2z;%4y+m~&h*DDl-1oZFbG%&zld+RN<>DqB?J>4%(Vt%Zns*VBi zvX-*U|Gxi6%VYoF+~EAL`9D2KYF@v5GWil45ici&)q~s>IS~PPi6#CL2wo3+5bI>t z1wpuiY<(2<>psC9QM{?}La`miGm@K`R<3G+^%+d*gm1B2V)_Z@YID{{d-{ZwkJZ*OTbJ2i+K^u8w)eYBxTm%+8?kI@=l#s z))e@@8GvPG^82-7LC~5*U+xNG^FH(K;jdHN+`u1=i%h8NUYLf>J9txRu_2&6-Y3yI z0&wz^(q{KHF6II=XWI8Cj^Xnj&AMl+dngd8NUZn$Ld_?3(lT|2+cW5%HzAd}I&|KR z5wgnWZf~vrAKsF`6Hlxm^WJG&CyvGYM`U}q9pqg<-D%?pd0)J*{96g~KKRnK#c-D! zLYPtv=&DZx1#XIC;*hr-o0y|RcQZJlW8G@HDi&PjRP)K@#pYeBVe6g9#tq8JaplAF z`S)P+&gxR!Go?m*ysOYU4&vmuOH|V?ub&I7iBi6}@hd)W=lQLz>%_JrM}LbsdKlsl zNUUagoLz>W=$`i{6YA>F`VsN$__jIT>J+?xna=u=dGB{l6~p4a<#>-n2;|LkpjcYz1dblG4n>SMhYn=NE+T-1V)-fL^KRui8H>%}{;G0eB1MyGz zyfa0WUs*|PN3@d-%+D0u#k`O5cM&Rs1oK&R)Bgsk6qR+%42qqGA4r31Z#4?uvm)+M zWZr{%uA*4Ht9m|2?}NN~`EMzc_TI?6vtPKXb1!#8ijtiKUPIp1Pn{|z;QYU}mieCU zhi1^QpfRamCkCX{mmWHcp9?S?F=apT7N7Tx;w=GD9nna?2pjm)iU01cWn+zc-i~c_-@QK~)YV~~ zb*5-MF6+PZ|Nr(k8vYCHL3;nwgQS>WW&B-13JVJ?!|Fj^E z9GhPY-$A+_Ix$9g;EtGSuZ|Y4Oao%;MKVbP(%n@u8%YCF=95e1wQxXku+!UjVm|gI zRh{TfgKvBcQb8WWG40{RGI3S7kF0mqL9kMw2`C4&U*sLc4=PWy;ZL$mX z@x;tB?dl3)cLO&WPxri*#-IP2H@f_^dz47`J*dKyx;h3AT?lj9GdKV1Qt)QFU=l*U z#D?ee$zk!X(tTrI1bL51%$z0helm7W^a=Nh39EC$&s(bL@4MfLeTm&{Fxj`jh#Qd4EE0E48tVrSlQ_GLt(vZOCy?NqD_saoSknSoODe)111sVUL%PqnojqZ8Jk5E^K zM$)CX9>?YeBpnLgj63JgegBWNgLF~ohAbBEd<|!%+mLsC-OVKqkhegg$@Wi>x6I3n zZ@#C)ueSg2-fz)5ZsO$E5cz!MStA$7Oz9g*5X9%5aB_ zS7f_fxd@+k{hOy3vgJO~J@2e9)YZXOJ=Ilza*nq)1@8q`PJcHiUZ(Gt!Q$Q6@=^Ld z@|lnhctCnx z-r$5DH$HDaul+U)7AhmpleaC>s&2xc{}T;ss+gncfBw&;vX1&ATS*6`!L_#*1@HNs zvoFYtla)ob(pbC&HP5imLf%i5ENAArch=RLM96!=3fA&(s_w|e%zy^F8)@KL&ATrq zkoVF0z9XL@?*OCzM?=}M;JwD~-3mdznEzUemiwgNljR1T2FR>g&>_;CYxIc|qcRGEQam6I?;+iJwf> z$#q9wiT8&;ge%CBn*kSxA#caTx05&E4$?by6K}!V7;v@v`~lTW?C$+RuJV~J3pcoo z#?^n=rSnJ~`~MD|-cK9HO=ypI7h1>5-1*$)l{(S#WpMp25@uV@CH(zG50v2xuk9x~> zkavt4tA!op9W3?2(hc(FIumNw(&UabIln2aG7k5D>pcW#zjST3dLOf2k+#U zGi!5bk9Rm)$61{GczQ*Ggy8)SNB(GMUUhulQmG@hL&AYz(kAA0@7=qYzen=goA6}^ ztN4Ro^nZKn8uuy|tDWKlW@OWI!A z4_A=YTlY`=hAYS`-alP+gk!+w31@kcx7a=9VO{*WRCjLRjmEuf``Xkojr|PL{8uWI zZ;NQJ2i-yIn1_>J#fW2JlLQfbWa`i`K7ikY^k;Rmcu@mfGuw zAn&9|apBMTZiqnYy_CrrxPqMW-9@^+<-hns8aKSXwX{p)+~{;Pc+;3C|L`9#NV|Ci z-+yAw4LZ;`WkF3N*M4l?UMbwEl}Blhw-Z{2J5GKFO4Os>yokX1wc+}G>G-_)L%X-V ziVH>72FMHA-@1)|iDil;ZU#H(o;TrF1a);>ulHT{X9vlYf;TZ~7aN&3Yt&^GEZ%xM zH52n7Z*QBDOcL*~_1*{1lkVP%Z)|pIc0+34^G2)~Oapq01^b^u-s4s!Vug^m)^sC# z>FyYyU^{Z?mLc|lG&NCb5n{{@mZ5Qdgh7#|QrO)-Z|m=UW9hWVdkn4P1WtaxgtS@f zgo&U;XHSMzEI#l2_*&%bv;*Q?sXFq3ipN_Bi!}W2hcnRqfE3S0T^+aHtshbP)4fe7 zcyleUB9eKh76&O~@!tRV@~@ka_v-7C^GTZ%^*&3_H$vVI7aT}P{^f@3R9jo9|1u5q z1;ae-b7*5w-Vv_ysZgQ$EFWhAiiC4-(Iua#qHi79>fM*YxSgi z-pTi=tHZaMN5(yFZgFBv!JA{2SAonM>C{ug;w}Gbt9J+FEy=t#io~0+!24Yv5(lVD1HXN*Ge3vC`7(dKJOX(;_omeF9*P08p>NovH(+<~Eb#Mcx(YX# zM&nK{X{jic$L4+5{?SI3NZR9l0IeevCqLGvjY6l2i9j`{xF9$XpZD{;l<3+J3nV#o zXlAg!370qF#FxhhqQ>Zd{x7Anj?-Hr)&D#HkJcvr|9d`gK(eCfK?2vk;z&J+6FxzD zVVxTRs|RWP;D~57F4IrTtn;vhJt)^=dejWwVwXiGlEnwz5DxuvFpXBo~D7_gR0q-9}%~4gFrN{dGtFclO}c#+VE^4gKs_U z^`J_$4kw)ah>0iLCu_LCqbGgmzg@=fK`))6z5%y&NL%Bb|1Vb810=@4P^6 z5Q@g#DYUqxC5g@3e6OXHdNu9wK91I5ij$w;iPh`d;1i_NUXB5mO7MAGnB|!7=kZ3y zj+EPMUO@%#PS)a+P4DQQchM8->QL$GZ|(T=dCRpFy!keq|NHdTxXDRPEZ*r`c061J zSCGFN%1x~x@9?aAiR+Me*Ujn5;xadcarQ=An_fE5o$?jqfxM3oc|ZODdH?26w-Q|& z1FF+TljRw(yLVB9O~rs8H>g14x?MYhr1-FTTkraz@x6lfc%MP*u)@i2X|ZRDh7A#n z=YBT5at@!j#QP96Y`MvxmP+hB;F@Izi}|a0ckAofy$~>H^jl->eL&>bTHVcyod?% zR``<4{Svn%l>iK}vN&>nALw2nfY{Ina2IqJuWpxw@7ox}fP?`@w(yoq2U{>O=A zkar34A`x`oy<2Ojt7GQ}_37}`|K9)qzYp9r_D|vbZ%5ICL>um;k>`K$c}`4NJ*Zil zH$o2%NY#N#OV+?129rpJ^3>3EAc9tHF3koV6++5B%5V!*Sdc^=s>u(@XT8t%Uc=l>QoF3v4eO>Z%F ze6M*L^Gh1My_JF1@eU`yv6X!(g7EQ{VjkN=Jx%z$*Z#cvWs{B#^6{{xg~c2EBX(+3 zo_-2$rT+ucI;gDUV!uqu>OaR@+EDNow%?#i=B@8PG9Qcgqa6L|XvlkrJ9pk%$Xox- zQ73-Ldt{AW#WJD?^22f zx{7pb*&zF@!COeceT>X|Mh0QP z;%)PB$JrdnTg-bRlEnMsSLGK=A#V%6==b^A?#NyCNaMz^bWkCF9-*3td^-$`X1cc;b<#vhvF zZB4;j@H=xWnYXw7@p)LhM@|lCRYKl@^}Jt5yic~DOA&><-`zeQLRjFA2#kobY}}j< zGP4fUNkQH*%}%z5A#cBT;kEJ-G2mvBre)JJY~CyjG8ot+xWNrH?#z1C-3)Bl@ug;M zPqsDD9&aYJj$)krB;Lu?*-vqSb>fn;95?WJue_F@wC|u5QXFkNu;u|34=1kk@--^# zrT_hZGb-!Iu3Rebr21#srCga)J7|^c% z(OoGXd;T9>o9niPhX=ew1}Ib&52t-EE5q+AT`-qvnVm_YLmVaYOXqgDR-3!`fvLx`X6M!CNZE zVlSC@inBNy7Vna7uiJMZ?_W0V8s?BUx6CFLG06K=6t}3yX-`D)?#PP;*|DK90ph-xw`B}c!QfLi9&iMWQ!`#HWjBJ&Te_WVaqDK< z;|ay^(79!CKu$1 z*L<<`3VhzT#uQ$PGSmOs@Q^VO|BvtFm|%38$cd9=czg#QRcL$M=zl2Hv{4 z`QM&`x7d45Uo!74g?pH>c&p1e6pKOLn(ChUl)QWD5~61z@6zRrCwD^LJG?dY)FJPU z_I=IxM{Fj#(fud56ZOk%i1bHdzaV%w2oAq{E+p2Ehe{#;3EH(&U|53 zeLORcYx;DOr%jN{heH-6?ZJNr={uumum?vM-S;2{cIxVQH=CEXGh^=j|BV#9m-+5B zAzxzWxpNS)c&i80@U4Wr=l|5}A@TMwmdUqT`^392~$9pSU zM=(x)MZ0Qc<9~30*EQ1i_x~5XJK`G4ro8Xqt{?-p?SJrjTN~Z;Zred!9WMP2?(*4l zE65ELyyXqF^vJyPzx8us@&2+{XTBBWEwxq5*%b0_bK}W0g}lFB5NWI3>4oSOvRW;L zyc2hnuCa%_!)$|6Io>vdC;5>A+7F|_AO~Aak_R@|wk5#}UR~k_{b-zegH|WcPwWlS z&{79)Usl@V{S>Vu5GTKp@89kU=o3N4J(0&V-1yzw)ZQqohr<+UIXCR&Ma}URZy!uP z{_&dbc@u`ItYd#)tNfqiEnFyg%W*zrA@j~bsyMKCKN;~E41m1*jDEI|c>AvZsGtpb zuVILuR&nt{N(DSOT)3VNg1`N&S_^q^+3-vF2;}`V_EP-^w;0eH%pOG%PK7S$Y@qUQbF^Q93=+gq;PmDzH;pv5k!@uwcqEiS9h-3S(~O?J9Gy)B ze%ibDC`{w?Zj066^oX!U+}1BP%woNZyErM>RjsKKOaHgGF4j|5hv#Mf>A=JP&Hs2a z98LTj&i`H%JxJ+@br!h?UCPno$Lc{+^A6a@8kXt5YI-4T1bfgcW8s)V*n{>@jYB<~v`od(eQB*%8LGwAX{qqjmJ*-cQgt@ijklI9_4%K9w&RTvxpgrX?_^$ai7Lo@o46#aG31@~)SV+2^453Wyeq%f3$d2tDoQ}$3UbKJ z#1iuMTNXOL3-VsUyMo(TF%~o$eaU1yfz3Na%|2YwhzB&Gan+KQ^?m<%;_DyuEr>y#9Jk5;WcN-+bf^# zpjERM!h1d_m*qw}cr2jZYzKMQx1UqyfxP>|8#inR@bi`%#Pd&;WAkpVFK+u~!UGi0 zxOt)GjpOau-CM@&;Le6~wAa1wqjiYm_0^f0yp}{|RTQtmE99ZBl=3Z@E$MR(PWAK<3Q|B6+ZQUsb#3HU@cz zip)+>@@6;g3}J!1&un~{!v=W^6^5O2g1oQ2&Gtv&=0sTi(L7gcI~j0WltuzS#J zu}o2^)wI`x7|=SNc+*-XJ(P25C+%v&?z z-cl^y3o8wp#UXD&XZ9Kr@3wE-t=B=`vmu^2K}lZ7^QHY|m-h~y$BMMaTN|yT z11CS?^MeXsQn*03SJCB&{{`>R*Qp=Yf4_svd*{nC+q0Kn(S7%pF)gR64xPOlgiGKK z5?q{kQ}9-0*|&nsyL@SxAQtbMftp(Y@^=0BVU;1|efGRbsV3yTbag0?VY(N>b89q& z5pGT}OMm|@3VHur{?R`Sz97BlIlG-M7d-zzDcI}Y0c@@&#Bt(SGyFIa8s`)s!x687 z9dFNm-+2WM@&;%f>u~bhUVG~Bf~QU~x?D$HbvugK>X|H?xqjg-t$*(lcZi7}A7qD0=d~MVepEseC zlmCsLH;^oM|K>P|e>f4r@X;Nw?;q*^_LdlRb!fahVLp!b`-keM9^Bks4S zgIYJ<{SI(IN*IWo5dPW>Ov6vuGHApAaVfv8e#O|AO!mnqjY_@TKmv_(4jWn2?1~*9 z`shx2uLu`ZP3LkQ=r{MRXlD1VIcYC9O*lOv?^f3Gt8Jxu0mZM!)8u7dWCZ<$N&o7Ivd_)lP|IIHZu}fyajS1UIjqjPXzjUNxUDV zI11W8-fOw5nfCd4A!{#5J70bVUyxoJ;}r>co7gx`b`Ca!$O$I?2sj||DSNd=rC@W7 zmKISs+Q|+0(YV~*ryo5s!;Uu-J=Q}6w8uLFt-}Z>zdq)BRP_Ps=pxA3Rnt-Vw=g3Nn5r%oJ;cUZf{ zi*(5Q#mgyo0C{VA)v0|NZ^BX5Gx(E;~3=4aNvXGvCqw*;B`jt zo#Qbe$Nhoa2{!B%p_FQ2c*q-Wa2$=BXRFMyCK;P|L2KKuCSBU&ErQl@3MW7F27wG6 zZ7y)Mxg+yb3_kCXKA&d3d(j}MW8dd=)_eE^(v=s6rd4n0pZ8Vj>ZolGj^{o%*S-BH zcx!$-@RZDZ-SPcmSiIerNjDWk-nAE=y(aN)-m+i82lB2GJ#ye#m=`ip6|YkUA8&c7 zzv^8L+)6Lg0}|Jv5d?+<@aV$EZ)Ak{+;(A?@wpft|#riEy%El3MVa2 zW?R-c#&{vqANEB3zLpN8>}KL#LEg&M=S{ZuHG}jOQVss+V!+DByK_zoV0Uj#wi$Da zx7iy4!xYb2FuaB-rF)}fD+U+BjOJDx{e;1)MS#hOrj-iO?}7Mu#) z4u&En2HM#1*WQH28#24I+v$J)7q6zSjw_7^^-GQgB{%(<3;yv965qG2KeM*-{Ea(aFIX0?fZelBl@en@p3>e5 z(i^QK7bm|*Pgitb(<1_#!gl7;v-mwogeA-~>-H}2-0p2dPbC#A$kp#fji+tse+7Aj zx;kdQ);%A)GMdTs_Ygrm>k7Ynx%j-p8yVv+-Q5Yw)K5L= zH^JxKwW?IT-?EDCc}tw5t`637g=M!g=XeKG@HP;-y_(Fsb^N+47Vn#y(Kg>8@2<7M zzev1YG**f1hrBCeq|R7C-k*f-&fNTz4)pfzHGKnlYbClWXihW(9&TBoN#9t&tJpZb z`vx}G6#Kr}cy}JK7>x_Ox)G`3!;T*Y<5AJKX^;0Fw2m)0`Mu{8>hx+N;rYk# zdDq1=tbTrfC#V|V+Pdo`{(wZ#Pp&z*mHv5CT}Qsy;;cVkZwaE{4LTOKka-^+-z|g1 z`^)aNdK_>-Vzx<+(1pCKp6=1nhrC_8sy!PaZ*|3P|7Tt4K=tc#Z2}ySF1OnryEE1d z7-a?OD}!PILw(MH1ONE`U!9Pao8cxNz=+0q^*m6l=f~##@Lkq>?|Zbzy9TY}E>3>> z-9JAcSOhDi=zc)@ol0FDvu@GM zdt>IF-U_7Ptyl7-m&`lb&Q2PO_oB$zX9|$_lzQe6CGY8S>Bjg?UdVaNuVtShZ=Pqw zd^yNFP+9&8`$#k3{C!%OCj@@IhvXjgJZ;e`tRBQG(=xUct{@*- zbzjzmm)Pf))|zkOC068eXLa`?FNFK_5|xGK8DPgwX|-ATVZ`l8pHu6C7I5BC^(nF& zK0(U;q~L5Xc2Ch1QA{cqN_QzLWNPkSbb-7*2j1?))|y*SNrD z=X05Z5Al0YZU95ZtB43-&@J$`=`$5Q=*Bm-9u;G{ACTg&ex<68mNm@bzE|f4r0o>E z%~dqkl6mtNyjg+8dyCZB3tEtO-ca{4Ey&xLhRN?eBM3{gRPDw5kULship+6eBR7!RghL|o;+L8}$2**Yw;4a{J2LNQ#+MYacsm$%X}dt)iRX<9NxVN>B?L@E-WP>} zN2^wOAt9T(JXbBx05#rMD%BwGB)gnx(RnQ(HzKz^O)mzNv=(U;{^M&b7OOtC9Atub zZ_&8GGF2JHe|$mu&Z&lDF@Chi+XStn5huSD3zU@CsuRIz^)A6rH}QFA>fDr>2YKs< z=PfXz=Ibr*Siu}^Gg_bz&bRp@e^P>-Gbe{`vy`Q-_qdMTfU=p^y1{lv;O@s0iNEv zI3Yvf`6YbbN{@t1QWr*m?{cRGo7C|SCn7jstn1uD(_u3mo<|>Yicq#eC|>!*{Wh{&t?faVgI)KJHtKeS7QK zIvwG8uW7G)yP|bG#>ww^M5?gHLT)f(ArPKjg3o)&qWaVmO}l_ehT00g>-fCuG`2ck zi!!16?rmR8T^%{f*Ng?>+1vlk|NpOtdn*3-VGoL-=t1i|PK1+tP{eH}b*vt=;oX7n zaiC29gI$~9YS@E%)Rjb^!WCrug%7Vgws|70GR+l}X&E3t;97+*od1_vJeI8FXaRc) z!aB~m!*7r*TB=)d3;UA!L+4p#lrcR24~+{eKi{lz7CZhppTgz_8azR21g+y3PJXgR zDV&r2M4)02p64=#--E9AY`lI*ZU@kx_7Cb4Z^G>5e+3+hkn{cVQuFVBr`NxTMp9SD zd#=Yye^!vu6uhmKKJbuvFR6T?ip6_$b+mOJswIe`m7j!-Xhi-B!9-|y&%uxX6KLX0F=DrFSv6L zmv{Wx-P<W1M&{(T$9!YdF!2a>mI(~iEK?mPM!kI%bon`Z5WlTl#OxHer1o40@F#jH!xJRlN{t6aGDHS>LJ-oLqBeQZ-` zkGD5k$1F~MS(1mghv{*HC0>lj1m5BEzRY=|R$ zttZsgv1gOY$v=;`L{jix1K$B8^RD4AQNrTQzVMOZEaYwF{zIL#_huU;9rO(H4nCxP z3;E@VyylXgS74t3G&JN>x=D+Zz*RraGPQt@^<_JWuzMSGa&s8`qk9X+T{xU0!vl=a zxNjB@33>OhdB?dv+}fNmFY(v8f{gDJ?Io7uQe}NMc>oWrpxxBJ7PMunCaP}4DdO8!`KbE zVT8?Sk%Eh03lJ>7S;{XN1HP{r-TWvKyQi?%bTEj7@qjTjZs|pR`G#EV`1N~(bJjej zy&lAb*5QDY9}A)G)#rmmV4xvuEh@#PkB4TowaU<^DiVCmt-ENR-h?|K5gg^~d8Izm z|NKvF9Sf`R6ucc|%h!-EvF44$ot@_T|>{{E%r}A zr*?D8c_4dwtPa11yxm6Kg*zedSEUP<&hoVY?{ZP2fT9?1>*%vyT}JE`WXG^gSc5MQ zK+w2~i#ZaXUSRXSk-O}E77aci-HO&xg_9p+&YG1>@ch4ICN`EZ4t(Ch-r&TSjszeV zW3_Ep1O5}F1dI1em{_;d{|a&qb#?FtTz_`w?A#90E(+du-y3zwyvu`gHL-Xv^cq_) z0eQdpxu%80Tj2eU?%=g6Hx-WFhab;~lf zeKFv@^%fVVe|(KaEAr^=XRbWp9U8aSLCN8F6E<%HBaaF58rtjLDrg=0IQh*SHHhS2 z$_<+D1nZ?Nz~}AB<(%30atAo(w65#xcYNNPmQ*qx_xeQlyqEA&S4UQek#O3duea=^ z;B8wk{P*R=7c0Fruy_wnZA>+Qyq_>vTc|_cZep7129S4g=od2+Hcv!*B&}@_^1j*q z!g4v}ec0pP-V59F%L*6r0=TEN#7u9W!0G2q3gnwYSEeBSb7UBy|` z^*rD?8Yg)CzVPA(Y~BWDU$!oPh z`$C@o^N!mwVfCOy-f&$LIRER9**Yr29wc@xcDEtC#A*jtIyHGx#YOA(#Lg?!^rWT_{sF(m-N?zwv+2X z%P;=hYFTMH9C&5xe}B6+`VR7d+pYdp_YZ^d2mK#b((sBMN7r%3n=iL9{3UjZ#yZ>` z)~wnZH+PARWTE11D`mBp!aKrp87mU+U-;lr7sy+|cC>Sj_h(lSbO7?+n$;vVu-Kl+ z?p?X!$cbnmQ>bL719?00tyb!kA%P|whr&sB_y+0sRtqQoam(CGH`x~)7Xl9CI2N`O zOf~;_f>iI(!JjR3_=uegxem1aHa75|(elE9z$9~JE-iH4;cn5p{HqRwUXA@PcX6X% zVlg#Qr=LjJF+6XY>);$Xp)&t?OC&QD?_FP+A}G8c631DPcz+lezJ3z&R$tv|sX52{ z%EA??kazTf<9AAr+7k)R5n>M_qQOM(V5c4A?f)_tdr67}Sk-G3RV9N#$chWCIf2Nx zw~}=16eW)dfnajn*V|>!>ZFk4g^0D6vb*T7dqna@J+phX1P6M4c zVdL{fr#A-xj!xl(omd*a-qKE3>biND@p-q=RtKAtVH989eD`Le;%$AyY8!=jf_eor z67Qha>VV6Tclo0B&N<%q#QMrRA@2Z(or2b%?1^bR;vYSXi3X`3Y_x(QZ~3HHr|`uj z5W#a$pJ`z*2s`yz>yRHZ*BcU;2+N~F;21e>=v_SaggA2iy@k6RpVJ}ltK>TFqU6VZ zzNA2xTM#tYMLug+Md$t2@#DFa;=@2S(=u))8~WE<7ALkf@~Casp^FXi{~!tWINIvy zG>$w~d}8kR|B)Cf-d5qk^Yj1Q+1p-=I3^_C(-*Xq>mcv+hw+wkXKy}ko*GNx*&DFq zj|>WQAU=s9q(6f5ztUyHsEd%d`u$EtH3<^X`m$}4t~DO$dzA>cl_Kw@nHQhDzb;$| z0CL=}pjYj#|G2&NZI$k#C;jx-y=Nr<)bSN1zcsFb_x8ZU3CGl34|-J4dHTz9;7f{nVz?*)-cFNHHOK7IH)9*ZonT6Jo_pvQQ2|A_4S%ut#hCW@swlH1@%m)66W4&pq&hiR5K5g`IyZtNr z>p?x_I?(cab$X{(t}zaXy@-6`V~XB`bf$E|F75IG;VV;*_IIP7AT9N%xIdNa%kVqM z30vCgNHW={@hN!z63aowdoQ2+B?@n~#bVq@yo1#2dmAC|;Z}n^YLGX_+4C!eAaC~< zT7pVDiqZ_U-x0XLLMAoAh19X!kN;G_fSTpWeW^?u=+LZ{P0 zAdDP0X4>>ht`<4o;6^BK86Do=Q6X=e;KJ(zBNPhd{dUwRP-1=sQT`MLPu!g}r2W-eOZbXsTmmW?9_c^YgsfsCe5K zsq;{H7e1-rK;pexw$_vl4oL0JzBcNR_buHpB`6q5^2;;ya`Hr7Y4AFTj?I#&q)Exq6ja{@Rp3w01mcj$-U9G(g&l_Vz zV;%0Edo=#sy=A51y*q;GCxv%!^%-^~-si>Jjc?BD zk8n4l&i`S@BflTNJIwI&KPH^EIu!M?RxG>v-~9i-HNyXo{ylL1=cDRD`_{f%OzA=I z+BOIx^`Q6boSfO<4syaX%31~Xpt0O5+{y4B99ChX_QXX$8p5H<8Qt@`fDzB&T4!+KhL*m_3e28fo75W>u z)#2mETmLv9O|KApcJ(X$@jgecBMl|LnW8<%(^d%r_hXv{XT8vQvv8cw`E|k_cy2ry zZ&iZMyS>tEtN*KUhTlO3KBKLUXYIx7)FS6^Z}Cv^c4_@#OW`ejy^kM>H!sJo*0m;aQ7+v{$IgKB~d@fyMu4%K&Kjfdy7QJy`nTc zSR7uJp!N-U;3)uCT`Y5ifFwE2l*P6>lM}gno0}gA+&n>lymQEPY(>e>XIIIBCx>t# zSu*bM#6EQ1{jauKrUbf!?6#$Z+FLa2AoH`lk1d^Kc;1+swAGQ8qVo35wfXMNO~uxKs_Shle93Je7Z?$~=37NN+?88U)8A8B{92c4MLn)I5nRm(?5-I2- z{qbHwuH!sPe&zSXcsU>7Ky6|wSBV2UZ-tBB&DxId1+OHx*gjp4&U@;6(~0QA+Zg`* z|IlyR>iF`bZK&bcJZ~;4-cG)c{yuvvS#^{biMQv_tTF-eUY#rKGI#c-&z{lD1$hrP z=zKe=??5DqKkE^I@Bf?L`TTes`WH| zo#ePnQmxiHT*$nu&#b$gH%5QFZ;|VGfRdkEfz!FS0)n6`y=mDmOLX2uyO#BSk$d59 zn8mIf%B10NqA(@z`h)k3KmVuGSjU>R&r;#*E&eTm zmLq@7LZlv4kw0d*U$;nqw4u0L3HG3gsEiA;a0j{kUg(O(C$_{Nzk>VK!wBH8#kFsN zOUH@beAzya4M;#)VvTmf5_mv5vulUPKi&v^!XhA5<*g71C&%f^Fxi&9N4_K{dx+bF zuaG1D@BBxj{oitoT*q0I{913V3v<0C2(D?Ht%$jR-h<9&M-ONwoB%%N2a@+2)u7&k z#LVnlWT3r|@pq7-`)R9V%~t;l^RL*66r|$q@$F~=h4+C>>;fd-6CN`Ik&ySgYB!tZ zkoTU>jwF4^`(FHA$N!WT3NPfRKi)>1@<}lt$9R(=H;*lO$ZY&D~Z?;yZD+Sx8MmN zXzb30OnLYW5{K~)3kwp+(~9#AunPkDCYcJiZaX8+t;+k(p3Ph$46c#m9-sLVRFsL_ zgM`B++1Ku+zaFGWt^_QslhEQ1SD8$C8bZ)BmQ^% z>q>p&D}yA)fBrvg6>W8JN=qv~`11tm0xI6VGjh);yqTZPN+9vhvP<-M4|(srCfhg1 z`-tnS3kr~T^v62kq@6ZI=Fe-&??T=$u6j1qK;94A*uuV;kwA#__klO-fRLnVfX>bB7wF#w(uOXar!eLiBj?Qscw#;@D7oA zvCIFiqvUTH-_l-7{ zhDlQr;Fn5r2+#@w+hsV2F-ge0H)k*0a+gc^Z=B;pVxrk8WZoI8O?NKZN`JgJlIuuE z$*;`vj(FfsL9oF;C&{b?op){5%|#_*CxHL$9Tr~aXt;Y@#7%t3Gsy6~G37MYF_SO* z=k2YLB2>J+6DoBnyuYcR7f0gVbX&zy5%M+*N_jEIdozbByEx>%B>rLD>aRA$eew5> zw?f{bLl?~@;O(t#j($A9OyJ9j-B%0Yii5xycKo$47cy7is^-_pCj2+ErOWb*g>r-e50my#|Ikge;)?)o`&1Fmix+?0E=}&{eH%)1wd&?3lE5Fv`X5@HZ0fEgQOzDreJh={Ul>9`PJ&nBs1c4@#OUs%|=)9-W ztHTH3*_(X$c>a(&diPdfkqPMeWXM&AB)_(*)PW<2e|9ASL-#@_lUy`Z^ z1qs%4QhJb>p_Cj_54zRWz_}a_NKE*;E_v94LT#!Y9>X3qu2vXJs<9zn>)X84DxU!A zIMT1;;0{txb^nTJ8xokjAz>xdf(KU*xR$=>MLrP{)J~SOz9$TF$#GV%f9 z1V$KtKyrITTO9?tr1+*|^9Q67RJ@P8x6h{V#+gpaAn`V+oKe^ec^5`E*)D~=W$O&z zq9^8?)@0tF`_x!NM zX@|M*2!nERT>Gh)2Ri=o#wmH5yOM-S`s2++u0s|jzhim(Tzdy_KtVnCl6*HhZ?o|O zMS74oX339={0Q{(e+-`#_sOFF3kDiN`7@KQ!aa! z3j$Ah?$~Wl(0RXz*S#&~?GGeQ{Rp?$M(^JF?v73q`W6g7Ak}!#R!4$r;;;<-f)w1G zh*R+nIQpEA!ka%oQVNOpi>hwV7|1(@>!ZUm$Xl7CL0B2`KH;A0cj@IW;v2cm1FwS! z0RJqiWrHzwXUOuA>$uzaJZC(^N5nz-N_8qwFJe-rCLlL#BTIKs4@@L9QSA%ZV`WZ*QAO z7-akd(lOfV@K^X9?0R{=dy7%=_P4(2LE-&5(s2nAZ^aGOE(MTxTDx68HE+dCW8T>Q zT||kiT3n-$ce?i=HU#p1UE5Nax19v4l^=?PUkC!e;*VWpCXw&nwoCSSswfKsA99@2 z5eea;$3OiD$rmpV~&qKSI7F6VErV#{1A;5Bf%~ zqY@>*^vA~^S(@TNZ`kAS#P8@mNaKYRQC8C*{P6YpjBl+)Js`ytdu^%r{L1*3*en|B zD06orpCCz7@eb{Yyhpjjeit87K;mtD(Yc`z^45|5{%nqS^sJg@(A*9(Vv5ta!IpSO zU)|$#7Xf&Nb+es^yw|rs}c0kOo@zqD(Ez{R6i%yJ}=xn47p)XLBm1{vfy8;1=o zq5pV-^x0<5!du?-$NMU|j;AR3Iaa^b_Y;6mkYc1O2EU;5-cj|XLA5>*1aWE?{Nh0W z1!-7qpr~J2IKy9JF?VUJLw)d)=S{&5R%}#ddVgZllBQ%}1_76eYhQr@ez^4mcoXChX4k z8J#zQ$tk;?#TPU-h#N7jLw`V8?yBia){XBNp7)7l+UgL+m-zIz^^muy`E>Fn5|i@rUTId*_nt zC`8FG@s$YMWHIF3SeXhi)pKI=L;=&oLxwE&x7{A=NkoOj`9pQyDHpD~2 zk2Z|KmlMVP{_GPJ+f}9))#df;g#X5gpONk6 zx{e%weDANO`@iUq_eOFZ$58T9eQ~blFbM~qt9GRGkD&9`aAslJ+7<-fuE@OTJ4M6c z1Q$_sJ)a}v^X8_l4w;K01MF~f^56Xbcgm*UKfw8a8C4HDh4Gi7^dQ$*9yO#Mv^lQ& z#OT^0{ej;fo26h6Y93?VyaM*1FPHr{yGQLNvJMzronnRW{|{|`_d#}?XrRY3bIFqg zY%fdP%ILv^+Ks_XlPi&X%1gO(u@CHp|HgS9T7SLZB657+msyM4Nc!tR1LQiMqvXe& zni*$1h66tF{&rX{9(^=0T5md}&PDkH-A@YTtm5eRATe)dYP$F%7{3R7qOA^2~Y)5k(cfya7XT^X~HEu;IbL2-SQiG{*P7~X)`nz{u|fmSMVt@ z6q)z!pEup|@bt%mCJ2c3W5tUCA)t!qw|hAagM!8cGBVPEfaDbrYQNvXfRKmKPm{iyKgUV#Gvy| z?W^IxCwv5a8tVy>j7R5P25)b< zUEH*4Hy#-B&fKysL*`xKeZ)Kr2!r+HxP=M|m1f(Kc{?j*I&vJOzwUjPT*qFN{1jrc z@(vSm;Nznh0j6K*1JYpy)4i2y{-9h}Q(-#+{qYv#0*jgfcW;J&yk+4KZFT5(_b810 z`Tn0Q74NY17*k63ZW}ROj>H>N8AS4eyjgmVKcC}mvBxXN81haW_x!@gZ%5pG1|KUp zL;#5eTW9w`-s|_Z)Gl--0a8Q%m-^Ho;I(qo)P^s}x3@k$sA8?%APf$Y<8Ztc^7{Yy zRyXgF^=?y#>5n(14lb1Z0>Akd9%sgZ0`mhFQ9sdnXOek~R!y|qd)1@f-V*pM^f+bf zJBB}dQyrqM4q)eT(ID}^`5$eDql>=}=YM6Y9uz$-dzI3IL>4fuM(RQO8PbG}aQ??F z`J}NJ_Mr7uD{ldB`2N4!!^~;d?1}dXnGI(@5x`XFTR{^z|Ch;~#-Bez0vXOvdHe6+ z!Tkld#NG=cUosVDj}p(t34o|;(--V)Oj=Pd@ zV9FcUAEJ%EgN*Y}@c425IA{v3dYoKO!~Eaz(S`ZTQO4gv(pX2jX=vxV==u47ITde0 zz4rixx9sBfl}Nnr<6@i+K;CzDd?=sey)D}5wlL(KAnjllE@ z{qep;u7ejPKYjt`({FbR0{az&yA>+vyfwCZW?eT81i?#=Uc1eTev3Uqe!ut@>@>sk z-aum=c#nIQ9~0&ukXEAN9Th**M&Zpja#0hB_oEu79np~Y4~*WrC6G7U?9aYlxPx4G zdf7AkP4>j@vgXedKL~(yB~tk;1U3@cgXwH z%F1b;o9O5Nn6R;1%5lFLo;R&^+$*b@aR2iIX+V$JA-B(Ul5%uaq6Jh0$Deev2qzP;T6z>7m(!hhpzl2_&&-G|IuyEm5U?K%46 z-A=AU6D2?QDT(fls)7I`tVtXfMd!^~`6gm#d?2{59cb-tRENqN)A8X+g75zY&)&YG zv5q2%<(mJ!|Bo)ld(cgW}&4yXSfk?zN)Z70=xmq#hKrc~NDqR+0YU8`@VE z!5%aydowo@4oDl{>RhW5hu{BuX~a5r4>ICQ)$Kf)aiY_*o>dD^kifGK1ji+M!N4s( z;SuLCLKqrOkSr`ee>uRz_&Z2*+UmID-Rvb%I)8~( zqv9P`aQ|c2uvY0rGw-y>^)d^*mp2UZX1*P9Hs8#iXr-1^WHLek zOPb5iG(q0HpLAZlKSl!Q7oK0~u`C$eIxzY~^dCQX{`CVqHIWqoCFD5s(-uwce8{|S z2xJXc0Q%!SO|BykCBH@Ciq1?o;4St^q1`=u(Ru5daGUKiIs&dN+P0}l5q&_)lgWN9 zOE|>vyoaP|tE1fAd*N98Jnt1$yw9ArkEigiQcGTo#9QI8+Pe|RyP>>%}TEsoG+{I|Da3}~$5>ct72KMzQ&Qt>{${qrdb?|1F?T1dQ;J-@$V zg9Fm?7xqe$kazuk?^BMD_pgqj@}drVqMQat>i7o&nCW+FoQ1rtR$m@84}mX8J8-<9 zd}T1$E`9Ex7 zRhtN&1g5{(2tG2#g90f*=b8-U+gp{2ZqI*Y2!niboG>YPV$nh5z4``WJmDCT{^tL3 zavcCAKmMfbn%)i^c-B~5d|@j(Z|13TF_y>>U@sw)ar6`o-Fxe)tp4gThUbl;wGQ1@ zOTPc+|NrGl^Z)Q)2j~CQR6QtpP#s5^|4jJPZpfP;mKA^Ol^wA>BtdPomH>hY<0^`f_XWw~Cw*bvopoLaxIBCBGSi zQ~0)C0f5_fgWt>>owr77)ShjNLO|mK(FkK2c90u(*jMg&*w661e{QF(4rW2Cdp!a3 zyjN23J{vB7hr*k6*(3`R?^HFuM<#Rg|A&(@;*hu5YmvT39}#uJ_Q(!D9V#bP0#eofNj{&X64kh998 zMy^8)&l~fb#yZklqO||a|C&_1ldPk}DZB;iYnhRF52{z5-UoRfxm9~F`mK1$ct)j+Pp1SP*Hd1Yo} z2|@5;LTPZ&1)aB&h8&o24+Ycio`)wi(H~BXz3<-Xk;BaJ-TU1g+Ugj4blv+7{5bJ{ zzyJR~oXP(;|1miK>rnNe^qw*WN)IyV+RTI0gO=U>EaSSSNZ&+NIZ_n%pbNL<1bAQ% znmWrh8Bk+K6yY5tfEWUJVD@DD3+Zv%x>lVBVAaC`%PF*u_{y%bI=c2JvJ7NZh^!>X@1mLxSyJ8UXK5XtyJO+8c7_d2M zlZyvcS9Eu6`^OGa(rQnmN4PK`lH(#4Yh83~L*{Kd>XM~%hW>ajBG+MrlHVPk+`(f3 z0^s-Yo#QJb(0TjxslBg1WCV<_4Sk6$M!&>jQWiV$CB!oPB^L9LwmMp#-mY={^9Jd) zRJ_xU7-mp-w?+?hBJmbC4I9jbygxTfC(ZHp>uf#w8uBh!7vb)ZYe#(hWyUh$A_3HN zURCXfymMs@lu97)wwqCnmIORdaXpp$d<40BuLA6)wUGA;a$G}X5uW!xGViGbqxxm> z^v7G1T*oJr`~-xSA5}8Kfz+v~(t%^>yf2uD*xU);4;noM&FX{Ee;{ob*zhc82@Asy zNGw^j)v;*uKH+Eh{LfposCcIuMa;jPXzt;}gZyP2NW6nH_mnn5-ZHIU7cPXn&m6tD zwifdKq59NkLy{da65|r9evJTNzzyQ{sJ7@jwVWq_tSMANF4UCo@od%K2;cZyKPO-lFPwdxc* z67Nl|s;AyU-WQV^GUj+IpU;^&3wh_Sa2nbiYDaXxRiGzSP5{YlxRgoA8~1k6M_I_b znMul6>I5DLxbNf6>_hI}hllN(7sK0Ig5)?u<@Pn;ANLDl`pk9uvgwbvAGwZjl>8d* zvHQNT!GZgFCZ7}i(0P}BewcP^SpYbH3Zz7fqi;^iKG$6}(b~`On-d2b>qt0RzUpwq zfAjzU<{1Bf{O^MEzdltD%4wY(rSzZ~p7rq79|q&)=!4;ce|2*7bKT>4;GhTmv-&Ki zp18V5pYId?jS%cXOret<<#7I2>0=vw?O;a)X}gw(CKG_hf&)A8um|~wcZh9CCV}GY z#+iG=LEzx>l{b0~k$aF|P;_HMs4zH0j${6q;H+~J`4U?g(j4&o7#;Q?avixS`KhI- z^<)iIG1h1$XmpC%BR!Mj(BeJS^h{O z0i^ETZIu9d3x4?(`RFVOWC?BmaDVfaSw2G>^idc>doP}*Li z$A!*~4Tl+?_jOm=>d@=me~u|@eg~;X#XHOYO$vqgclnq6NW8s!ig}pf4l)1}HaW-J z`u?o-amf2EUSNTBtR3;xIqQhKX9%EahuQOd$h-aY^UcypBycOPva|mheDm>$5dRN0 zWZs40>sg;e-jq1eAhs9j4#>PsD{drJ9j8Cu1>`!6QS$4%{c~pR9sy7_T-iHz6`l9> z-dg(wE{DP3r?2`?8fsB_V|3SR*A9d-Ja3FBjdeWQk|6Qt{C^!4?@V2nGz#xp;e0+M z-a&hIsLDd#nGe37m01BQL?-^f2=Y8Ya@0hGuFK{VkonFce`sO6;+akji+8BnP|HEF;R>zjWbz8=g z=DW8p74Hmwg+L1Lp(Dq5k$BgVJk}XO-fuU`GR>X6J#i@eun_VN3BO}q*J4L3TNrzD zAe;ccD%cdXLEcqzD}oB+NkHcE?nMb(;Oi}Xx2}@8hRj>gbI16*7-4XW9G6^q#3H%? znfD%R(9x1af4p(zI(DJtXWWz@lIbG=hG$sV{m!BDZq0mqFXO&5xLLirLb)82;=na2suP5Q>}M*=PUv{y)m*l&=2@=YM0W9+cN`(3sML_HnFTh}45F_9P03 z!2zkmnt44A_Mo?q-Sijxz(?$Ad5_+>V?*3y+E?0BLjau9*jI0);Q2q>3iC&qB(TRl z)JDWA82CPnyqj?Wxu=A6AGmOPfe1K6j(fbNqWi2r@-s+Fhxt~O2-4p(NR&FHQSuwv zP;jgAJr4XHd)g=7jNXHuetNNHQDPAA*U+#^El0lxnN{UkRKmgdJILZQwAIm7t24?M zIe&s=M8*4Ra#IO~H-{4U0wmtfdA{D-koT#xmCbX!JA1uea6{e|Q4Thr6>W)OD|$k$ z;4OAss6YWLyu@CYVH@wiNCE*T#`5sX;qU)*cw;X4AoDI(GxV*;iGWgaT!=g80xvsc z-dk15c5LLMKi-r&HlgGmSea zhg{q)_mM{g>?OyomwS6IeLFJm9dcn_%-rp*I-`@JK|;CN6TYU37|sz$F22{H_x?N>A_SI zs2eptV5l4nItt@t)c(=Ee;MuMo#qq)o#eQN9~NaiR>-`au|fUUIO&h~PjVd&DEURp z8!}tm!~yYwCnc)2=)A`oCl4Bs@Ze}2-b5m!0sZ#Y!e`|LZw@j1fP@jHu?}s^!c=z= z0QcSoRJvh&;lpeG;Vbx-!9%QrII4EFMk$zO` z+I&9PgC1=5_11?2(g5yv{}E$rV(jZnp+|ZN@I=J?aWRipsc0G~5ag&wT3B|t1mssDkcIx{y=j-%Hc-_Wpw%v>a*D14mZd1Gj- zW7gxu{>%CE^Z!OF-i3~<-6*_EZJHM$@jkxq@blY{_weFaeJJ` z-U?VC^IoyiALpz@f4nJmEJw-D*>k;cuM7^{^N`#sJ%rx9e^^Ni)U~^Tii&%yF0iBX z{u%T%t6gG%;du`Q(pCqzw(f}HnR(tORJ;qci}NVFZT&BaBk|6Y9(&gbd0RdhQ5S%` z+4(=8(}cWB6R-c+I=hQlU9P$P0Q~*`4t9-;&mr$!i8j)$StM{y#bN&_TQDfNVw(_X zip;zF*M(=w>LP#RF3Gx|Szw9GTVHprpQa-H@ut+FgOZ=5-H_~hcN{ny)x@GRh|W7P zXp7rE$opHtPzQT?9s2z5!MZj#*_ZL>|E)CEA;-Q%>d)gX8>o0+o4T}+!uw&-elaB8 z0zR8gPeI-eyGkqOcsuk}epQ0JNAFK2f8A+AY^!doX?{!q7U*Y_3PSt}-@1%!QdXV9FB{`%Xbo|mH$F`M4`oq1&>^!gsjh#NxVgP%PYa+Ov z8@rQu_Ov&@$UXQ4se3{E%CHA@$o1*2DkOo#w%Uqg9KqnQ9{2X4e_Ub};|p3ELPUTs zIj%b2{^_TG%>VBjOJ@f6(_ar-My_K7B|jz4gC<@5IB<(XDr;&>8s>dq*(CdCeaBe{PLkat;9CU0~e33LVQ-W{GA4D=>ySUvlYdB5;JQe5gO0(8i6rlr5PVs9h!UTJpz zL4zIr@$M$qp@x#*w>P)V%*Jp4E56n2`i>YSf~bK0p9!o0*b=A#d)VvJG9iBv81%t45$87~Bq*lw17~nfKPB@#hjA z@aZjbT=UgKPf7QXd2hNTLn@&|-e%-Fj8O9HJpjJ9>j(m=-!d2dC((HaUa_C??ezue z!x}r;1JECDx&B^VchLVW!_WU^92zv$!6TW__PKkW_hu^IH$FSvqwqdcyJra!@6F8b zBrGBC0k-C)b7yabUv~1$9Zn3q->RhBYelq;U3PqFKLK#PQmj4$d2@`)Hzr>p0grJ1 zJzo2R!OAV&%ftS0o?ky3BEH;Q1Za}uE(&tS)v(bI?Pb=`}RP(tcKdalcil;D8WC_l276ZW9TKHk}Zum>Hl z#~euBy^Y9!uJQNwAOfhLxzqN1$vAQR>>d9fH%Va7wRv^iGd!5)yk~?HMZUy(TB<*F z$`=8j$#JncAJ)})AorlPi#O?L$I)L8awpfZ5+%P7jpAXC7#w(T6dzZjfIc9J99%!q zujU2fBiFG07_CR`K|SRyA!l@VGyD!RzM8f=t`Ao`c>j6D&JHTxcTYLFP@37k$I;d6pAQ6MSr|Mkn1>)lAj>k z5rTgkd_mgAG5bgI=)4E)^g2aWcmW5dk6|WJG|c~*`&-2;ofw`srhvveuue_n*IRC< z;(ce6vjK&7f_v#QB;Ev0o)k~WJ4$o2Hy7l+cf04*F39_uj`RBN+U>-gkLTOBpC`lowuqvBn@VDtrrH|FK3rAWMkqw-TuL*8sgU0>&TAD=yKt_^vw zE$DIjT)2Zc^T9EoJRiQj<%8@_7C0cenmjg|xK08`MUBlo1A{^KnX`^qw715azozcV^+8IAaBc5>+`L`JBdHPIUL_{3x0dsQ8sP?|vsLFbH48yU-vGxd*vC8^G0< ziGWaY9A{PYV%2}#Vz<4M^R)gf{q-OxavfGE`NdmHv0akD0ZTc{MhOe_9<)?p#gD-A zhk!u*YTZ@b=(pH03FakjKV2Dr2f2l|IyP8Z-}m_Q3({RwyosK#{(jzaMxtL8i8oVT z=7!6VcT#coI(EqWq}P|ORLJ|=ni7qUdNZPl&C*{U+X&#@lHajjkoQDt*5ZYCNg(IV zkYB)>U=XY$y5rtqWZqn3SDd%p6#)U{xaRjR&rTH}Ut-mDA_lWk=#Mu$xegVS{J7UW zVE^uc1IJ>*`FoAgd2e!VKlotEAGA(7O{nXmUt$j~x__{w@iD{mR;a6@sg9^8E*}ie z&YvJzQ}MnJ6vZgr+v3S}6(rtP<@+!Vkhiz&<;FSQ-(9%-mO|d|p_*~_zpgm7fl?dn}$6dYg{in@U zWZsEUTc6oy&>!z#l3u;{WX_!p%kpI%<`n+5hD z$++Xm<$jv_y1yREzW!oDyt4AT{b(@(xKEcRH7_0~nzN@2`_+;Fv)1pdjn;Tz?iQ6h zdmZ^5Btnr5DR(7Bz$S8B$2nH)h&*x+Iwrc^?%7xRdk3i?xsDK&{J3T`0)1Wy0F~}7 zNsIl_FR`J|t@s>>Q^!ovM?`ds`!b0A@d5OzULf%q>7jlzNY$Tc-lQI9EMgX#-+pdg2-sRbe z6~)ygke#`|DP}1i#P$Sk6F7>@n`LlYg0F-Kh#<#RNQj;{;zZ_scj-}L2OaWeBG*xd zlAlk)>Xmwz1wiz*hng=Bpz{v7Yq<5?{zKsKYn7k<-_Zvo4$rJC<2PLl&)eODwmQsy ze6|+&vxD4C#k+2`#oryIS7eqZ67M2qEm=u8Aia3jFUSgcOF7mx0m%F1xP|y~rA@@O zmU?>*A18n{rrS5oLf%mat|JX4zvbr(4dcfJK#j)Drf+WOyl)qX+E#cR0z&Ps-$XCa z(7m5opAW;oWO&{fTI(=9pRDv}{|NSq>yt^--JeTmB{&+tk*YOM`Ka1^tb*1G3VA^%M#oh^> z_ui|X0{49a;m?OwvzK|GcWwhPzCZ%FAa-1SF)M7+3Ip&nGpf_MArS%g}h6S zjGAt*B!Q^l)&3eic(7XgNyy^`$Xr9sbj^g|{I5oitEp+_C7wXuoYWQH8Ea0Yzxh9y zT*m{H{7kMc6uW7O1A8Sim0Rr5d0)GFEV!0!Fu^Z#@``Tt1{&i~F-J?L@LI_tShtRVcvuJe+87^EH)NeFh*gaeX^z%nZ) z*nQV(O`zBp-va>AZuO{pD%a}pFz5LUo(9P9#}t8 z8{B&s`4T&}^kUOt`2PQ$fPnE|$6%he#7N`6b!>e`Ce3jo`8CDE#Abl#5zs`0ivj{v*bWv0Y2^e0F$v+qx}co5esMma&*?q=@zx{P(S?%Vo2V>5F994lEwPXFH6ES!wvu&Sg}5W&A*)P5 zC=G9r>Z*DF@@n5thUeX$Lt7mm@EsrYPtHFey_bsj!*6>dD7@FEI%y&C&i-Dmc^>j! z?7#lw9Pc}gV(aI+cgN0+KH9f75Sd(dbZwj_0DZfoa%Uj#t6hEf6dU1ybS2igCR7u+>NW5K~cvJh`?79J&cU_lrhw@MQ zR@*-|jINM_v>F_|Txd1R8jcz2f6P`!Nvkt+=eGr-IJ=cj?>W+11+_o_8ya zbxfBUI2=p-@A-cQnEo*sIREdb>Ot+--pxP%KR5pepW4NS)PtCf+_2H=Mf$vFc4z#a zozTBqFrxCi42dG#t*P&(qk*rEf4_@$#F~1gv6M9NA5vhZ&DvJ2hiU=NG)<5o+$bGHyBvSMBu=W zTN3$qE6{h4+BZc?9MbT>QT?>Sq$B$C|Jq;pmOss4{OAA0CuyrgPf*P5{htq{@1x@V zWSjfbzqhxFrCE`9=kz(s6++(Qm)9?!g}j0DG`3mAa5gomOFF2{hoYjX@I;-A9I<9 zm8~cK#(QlFz7-8lrZk=%hP+QGdJ!X^kO0;Nx5q~(7{tHPo;AQD^L}*iWP~H+eVQC6 z-N;t8q!*dD!kfJP=AQJ&yO~_aQk49z^p&k!%Z3Bh9^*qli_m%B6S}ob^!E{v+o@By zU;+9Yq>rBG&j;U!7@qfr6x!-YD8%r^gw4iY86PT9wA@d$8oT{ znZjFNFqR34cW|7Rsvw;IOBOq{Q1kwIlhb=~mJ#tm#<|5mA@5DXZ=WoKyvKC${`Mpi zaM#$NEVLaDa!lV!*5)D4{~toHFGyc30y4;PR;PoUveqE;mgSCc{Qi;t=KuHPI;2tZ zd&(;6eAiF_@aKIjsJ)ENdrAFEzlsiDz@zQ2`C+^s_4bxaDoe7>EaU&YB{`9{I#!+( zn#w$I5^%u*_$A8&4F6~TA^vCl5BV$j3;8qnAzTJFV`84?C_(b_QcxQM=dHZ?Wcx!k|d2@MFc%ykk zcn|XK<=xI}#JieTfmfWDhvzrXC!SY49Xt&@cX;x7(s|Bs-Qv2;mCO~zh3E3*a^SMy zGUQsxwUlci7Z>MG&X1fgIomnwILkQmIMX;|IgfJsa5{1BIIvi-7_zKnS<14Ig^T$o^GD{F%DJ%7%9TQkB%1Z54)=BId%4)^ox0kT1DJ#{C!8O=bl$DCm zaYyV*%4+%8dM~UdWu;WMMir|;St$~t)?w8tD+OE6msmB*YMJx`PV5TGO8!egA6AvJ zlB-$q6stm6$tEgPV3jE=8GC(6>~hLVdfD_MtP*9lWXh!;t4LWbZqh8mDo|FE7h-&{ z%P1>}{YI?VrIgho4KHV`JY^-$`luT#M_Dawn~}%LQdSEtrFCLuC@WE~(C1ib%1Q*B zQN>D8R>FM8nz2hLE5X;xH)9u5R=8`^M64ubC2-hjA6A00;x{q6i(N!n@hviG!HQE> zJnsm@STV|qyV41dT}WARMN1W97f@E5)~&5rQOb%#p;s6yLRqnm#iwC~DJ#}0M^~&6 zWraPrp$RKUS+UqGzlp_BR?Ldsd$0nO6%)H~BbJ}MlACRMFOKD-tbP|A2*UDGR=?c- zANKA%oT@c^9RAkcC}keDB2#3DObsL+GYM%hWJn|=BAH2|G8YX}BqX6!qNHi7Oo>fG zlnRA1ga%{7`)uuXzWaKwcb&C=?;pQw@9%ZaKXo6^b)Dy~&$-uguV<}i9W)>;LZY8* zH9ry-BGD|jd>?@WiKbr(z9%d|qNyC>3}HSJO&;(VAh09Rgps)jfend%2!2^lU`3*D zz4Fxr0up__e_;^;k3{1~j@c0AA<>wHNi2Z{iAE(2t`l%bG%`J(1OEq!hVNSG;(sI2 z(6P{T{4XRL+*&t-|A|DOReap=vq&^BvCtMjgGBvLe5LTyNYr<_Z54hBi9R~9JK`si z=!5cpL;M61_2R9Z@IR2KyW#m8{C6aJpHaIX{|$-WxyYTte?_9VYYhwW<4DxSG3AOM zL!#IHh3oL6NYr`Rs}BDKi8=!R#N$Vh=#}AFKm0HfwaW#h;fIi@wZBmvKZryxul=aO ze?}t8{dW8(B%<7}5ZaM#J3<3_sA< z*!-OYFC_Bb@a7R=4-)Ma*7GNLB9RwY(s6M$RobBkgywx+^xT965Nnz zw^DE(VHXm)Ei^bqa77|lQqUoS3lh1U2%9GCM53LZZ`%pZNaQSYahR|JiJZP$BoLgC z$gz=ijNphw4%zEJ5*(1oJ~L;AV2?!GHMj!^+mXnQ(>#q}heS3_KYtNyk;wYuWaE-4=BFYDW@z0Qm^8HkN z9THJKH;J!BBFfkK@HI$OP_xenUyVdp(w>##tB@$)Ro)5z6p1d&ksjlpAkn4YJ)-!> zNR-?3eHdSfL^-)ShwvmM$_^Mv$3H@%i|gIa;~yeX7Pnjo{s9tYzP=-ezmG&2mvEQx z_mJp(uznW40*THU9+SY|MWS^6tP*@V5~cO1^5X9x(V1(h{P^2QbUH@nF1`$jPT9sS z!IvV@Ns*aB{4FF(86dWPCaj?Vpiu$Dc(azsL27_%tN)O?|K)e+G&6d1%byPa~0!;x9q`DJ0rE z5t)iVi9}w{jW^>{k!a8Pq)dDY5_$T+yn#P~L>`*GV))}o;X^~}N@q$+FcdF$XiNF51gkJgw2(%`<% z$1)odLAi@%iyGWPI`}n6ub`_DJbF;IawR;2H1$l@n@_&zx7fcsi{)Hx6$B@!<03x= ze9am~zXxe8&uS=omho<}BYAAYm>)2R9hazqXOMD4e82Mw`yOQG+LvJC9anHl*=~Az z0{a2!pTDP1KjH~u`W>XgPWtk=QpnjL2+tsayuE37Q|8!SA@4!F9XtX}UH7h?*3U0Ox}>F?9Qg)%i9n|;cdIt!J$Vo>h=aTfeY)qxEer=Y zA7|rUZb0YlaBE=oOrs#UP91k<;HHFi2RiT6la(#qsf@?lk(x&e#{AsWo%i3EH_nB=JZknj_E#0nJwdvchBu|} zM0hvq^esT+ty#YR?lQ>ROMGOC!dw4|kk$_h?}KN#)iQNSXWm;pm|2?$c*BhsnnK>= zKSfSizi9;7?}|MN;n!O~EzlFlFh=K{yZdV%-!nnbM;$lBYg>~35}o%APwV{9WQj<^5#ya=PedO zUmhH5o)>f`&++!6;Z3=bg76L(c`zT1x3Kip=SGmXbw}}$UliW&&isyq`~PE>$HHSY z^+*?fWW;??Oa#^Jo7|ls?+d3#*35P`g3{yG)w{*v`TrqRyWcya^L|{k{grMF+#scn zlg)PztN544Thw|ge3g?KkM|R59x52~+g5+;=y*IYnEvc-qxl@0_hG$0d=linzT|yX z*wQM@4N_b)`}yH1FQ(uB$5qjp$1Q@t)ZdpA_t5aB+!;i8zq%03j>da!yz?Iq$XmC) zmzVPFZR0!rS0^CvhWISmL7X6S0RuHJbsjfhC<#-mn1K&?`Qu=yMwxILQPw#wowOkO?P{(DjTxw;{kAA#m-)Q6$i73Y7eTACGM~wLuXdJ&}XUGd~ z`VHI~CSmj5W|=SbaNYs%dei)5{z~j;Z*c)O-mhNGGCyxR^I-c}tBp(j@A-cw=>F%P z|M#bPjdwQ!4vqGUiF^maTRD%H_qU_hl=%Cu0XGH({~0GyBju(# zgFgOLsbeR5KI7G(IBFgzG3KYZ+x_z$_(`Gnt3U5sK7w6?O0CkKnvJ`GrMoAen({Sc zUShk}o)F?({)g#TkkXs!%j4mZmYF*bvnc)lej47C%|3*;YsMm8G~UZzkov75@11(N zS1G(7ts&m<@Kx7M>1lU8Pyi6z5id?n=@*W$9TMvJd`lzcgtd# zaKJYnFrGh_YWRP^o4fVGliQ!GF{?MunsaHkG4uETqM`KV;cFlvf{OQN8-ah(=dz|6o#3yhuM?wM}{lEVPV#kmF1^xd@I`e3@ z{zy3>4K7ah(eS1`Uxe@umJR1b$;Dt!3?DP1$=JKeMg=2jso;LvYy3L>*GV zD6kmblnC@rowisGd8;IEAM=0P2yUqVoZ;OO4g%Egn7z$J=UuZxt|PEV5cpHaZHe2H zsIm}!aUv;}61O{-@pvP7NMOuQVk5qO7RL)R=4Wp7>%!(;Av^ARN_aQ0Tronfc#OUG zhVy(%ab=S^EEAni@oT!V;-Lua2$~Myo-lSwBS*m5X)5 zYiHdjU=2D}U@o#0_Wuuj2i~#VG$Lua9xjTEjt8==v(aU+|5r*D^WN9r2u`lObGTa~ z9LU5ccdYrBTkPQ?VPV@&34!I*aR+y9YF+X#HR!CNvw)J(auTEcnIEF&aT;TO1nbwq zO1A~T5+#E?_eET~Sb5ZuWZzn?+6OAff@pYC9vMb>_jt`GqVYDKS0!@|^5)HnAEoeicq$Mz;{!i$A+?;(+1ik#aO-G` zTx~o!G1OI24SBCv82Co851#+`Hu|xNKsY$&ANi4Va%`m#ohw183C|S#XqKLJ~r>2H-f!)DDDGgn_fH$o_vDc zAi00QKaFMn1_`%^&OFABEL{C}1sO=goAL}i!n=EZyC53x5A1`+jga>PQbfok#IfT`cBE_}B=*=ezr&vctjk9K{!f@6mY& zm&PwWyio|;ppN^R+8AYJgw9*84?nz)h4FZYQuA1jF~7~B%QTlg6ab4F62CV6#$G{I zWvvr;{^11XU;HIMDq4-ryVgIQ=e<4CACQiFMqeHW?c@&`<;_*^02H97V zpz&U{p;r70vEh9rRQ*Y%4!A#c8xrF>c+ z8bOA2WF>ofILN-O4~!y;FJauVIPKyGZ>|;Hi&{*C6#$^C-la zpJ?l!o5k}5K@RzBNZm9x?|?@lyDyn~fw8`suM_sz2c(~0t5Gt1-+}2DCu92bbVog=Xf8W;Z1o<3E{oIz?UD5_iN{`r980z&kwnIoWeVcuQQz;uDvxnv;;;@>XPof zGn;oXJpm|Li!S&Cc{i}++ROAdf|LovfM+TZfXmh7p4S2N+f~AcxgOQ92mx;DIP(cS zzAFx$w;jjbzytRgk2jH;2iE-R+Mn*R-XsVnd#tj|C$M>MdGmQd+r$gx3$llAK99Zj z#%T;BJy!K*dfqrwI`i<~s=aOBf9L;W^>7UFb9fIjf~E#h-qS>Cki-@RF|-E*#+PFT}nipTWojNJ81v(Q z=lbE%7D4bK_rn{rW!Mc;`1z{xwi98%sk3DwIbganvP;l; zuh{;}(cza6sG*K4l(TKSZ-UNSKYY)Bl^8-voCj`Ms{yz_X31jna z(GxZDbqE7_m5%=5!8O>`yJ+%}(*7+>&l^W?9!K@T1+Tdc(oh=Sl%pXK-uE`9FG1t| zc|&ZTDTTMf=50S9@Ai>V8#Bn;JZb0okscG$mx~z}ZL`55ZKnMs^$1P9o&}rC+&Rb{uN0yJL8IQLEHIMZe^Bdc_ zZ(WG4Ab5A+_C-}*Y~IA(s|M`7g20CJ={p9`U~iBrM%T%oy21P(C+4_FUmj*BMSSlc zoqKvKgoZcetP_Oy-E(^vqw(Hw{7vs3$h)EW=35GHye#Y6HIVm_^MXP)UB;yN2Rmc} zP2z#2hM>lI$Xg`jkAwB6M&OX3s-I~X4jz8b8tRHf=S>s}K6wN_Z%Cq!o0l?}{#y#2 zw?lqzuZuV1@fM-xVTUol^wOLws}2YNF~P5QHMp^P6CRWlSGop)cEj`Ys>SH2-tza# zL)UmQ{n|Tf1$}vxvq!eo-S}_+pCS5ttVtYoh-0CtL6p;;kQ#L5gtRnT4Z0;`$GQgg z|Khv14~@YZ^xXbo`#SgzlJIQq@8SYGk^+aMUA<@=c*=RUWUt65DRQUDWYf<^ur%mM zxY??3aHBpl@Q)jM4N6%#S^h4K2#TrWyjpYHR~e$$px|qoGYzX{Nm%Lr-~Rb2Y94_Y z^D~RNewRC307Mr|OmJ&q*P!wHi)B6pfc z(k3#ugA|9O;Y~Td4B=gv_gxB&_vvX#`|XhTTi>pTamf3_3h$2r@CE6iZ_AI(dul^E z{N_{IjBp(2s9!@o3wd{TduPp`X#{0udF#vJ<1IF8dG-fvM(1s=_GF`0DiK&y$8q0O zsU2F4&f5#ux~ox@@px~d=HZDkKlAIi0t7z@fTIhK%{=AAijxA9Z8Bj74;-it0A zHg8KcyE_A{FPNTpr!swcq~0W@cEV5W!2bUb4R6YMdFX_LJw?xwLrW`Pd@cyHm zB!R|z!)WO4Y{>gg)aD!t@7@#LlbrDNmdKyEPgUM+CjH(NA-RY<4wSul@_GdFwiUH6 zkN6IG$B9SQjE4i^Pujcnmb;_gmKh96@63bMdogufo}kaq+Dvrb4m)mWTQT6`WQ3Z> zc8vM)ym5^_3H$#A;o+`AE3kRLBp0_w1x5iq$xUl731WZV0$1a(Vu!Ii^YbpCFOP-< zp^&p_bJhDG4R6YcsR(Zco*m+7y!YI9l70ethyVGpg0lDa!%H^z4cwgA(6?1+{k+Yj zuHj0}oK zjm>-QIbXukYrRa*doY5&JT|nDuX9hF0{@-=_kX+F{QvRagZ)1nO%0-)8I9DS!agAd zv>Nnw$V?|$saRJ-e53LgScA@QaX5S-1`#a z-Gh8V&BGgGey1*PmJU!91j5oOzi#Vb*C3@C$C6_ak>Ealt^0k`TGT&BM1<+ucB8EQ zhnc{J-oJ)l&%xLk)I_VShEuQ??c|=(n2z}>}2qem(V(q5DEsn8X|T#qw~IOw7+p3 z3lV&xj+^9CSTTR&zwk~i8~TvJc)Sa!dH7(=uZ%0?)r}YdpxRNT;s&sJ%ZbNk?>!s| z$kO7XAGgraAO%KB9TG}ldfriA=*uHGMok+YZU+1RI06lC%BlVcZ|?59vS_@oE{!KQ zLEa|a!3Lv{_j0A`m8y{U`qiq$oz>1HHMg0Y5>Mm6ftq^PkC69a-)kCQ31q-(w4O8R zSSVbP?{(+1xR(RurCemXdHhVgiRrRL#>F~14LXpW=9 z0w8yBtG%Z#Ht+s?t}w2Q!{FitvkNwAPcWN8`;A<3BqFd2>_=H&S>X^Lb;?8lbLQ&9C}0|FaY6kI{oS@?mjc zYWlhnKkWa{>^uP!=aIqkzWID>=ZAshn(42GR&J<&E$x1$S66%&0*TadlP9_eH;$t7 z4)(vc*779d@$RJN5ri>6zFW1r-|Yo~&>NeDMs!r~sVjpEb0P15iyvQk>tplAy%syG zb#a{Ot2fS5oW49#!urq8J>C*GkA^qpyDJFql$VY&XuJ=l4&LX3{lD3wneCLlxBKaz z>)YYpo45LaXQ!Dx$ww*Eevw2RxLUSQOBeEXYK~<;_ooqD7tlTO!!sPL)qEV=a}K@# z=baBOJj^13)zop%`-cXj-O&602c_=)xb=+J{|iv_xQ8*no)cepe3KRg%3{|=BiCbB z?+S?{EkpV-;NXaCz^-N3{lESTJ>HWwJDHyMWEFjRB%geAVj}MJfBiqwd@=H`a0R)L zrUp^IJcZPtGWJ45So(I4VzI7lyO{S7tU*86w8ll@3Uch?p`y3kyGTi*-@Y!6 zP5=Sp$@v;^1$kBVeP93=8LX=?uXEcL2BMZa;tximUt%wDu0C(uLV}6Q}p-vC43xL$7a-U*5>>AWM{ptGien;TCWBnlOB=#eA zr9z!`ftmZ6z6KS3@1QG>l$XU3CW(|s?BY0RcvC*5hVagQ)4LLlcmBnbx&*j_bg2xU zq41ts@jTHS@-{qu+$*5cm1Lz~rF=jQenHymj;KE59aiM?R08t;uBx0?w=xV|4YnE%A`IjljEoKV4l(*X8QYv-S_*S!`EA=<66>^yOLg`^EOO*uCavytG6gM z4;_s8Nv=5E#=ctsEN81a_0t@iw?T?k>bT2(aE#4DZ)H|BChww8(S#DSR;I7skyZ5N z@!f#;e}h)I9hw=6Atq+s_KJ0J!u#J}Jo*o44zy!?-lJ{h*^eE&jD| z6((<7hYNr1yS>bRK-xN2`topMU7#@ccuO2R4R6ZVTM^zkVbc|8ybb&gllMa2hW01& zXn9`&hKYXTE+idGNB?xlJM+U0{cy-T=jn#A;A?8ywUy|+B|oLh zm@grMUh25hVLTSW|8jdvAWG5KvV`$&Z^=;e;KrDr)#Vgbyr}?a9Vt*%qvP&vmxk7< z(BL4@%E}rUQ-;0whFdf3of%1B`s$54L|-0vVuwRMi+I5Yqz?e43QmJvq=cz+_6--|8KmJ= zm#!`zCEagrDm*Sk2A={;zn2<@fmBg0sahZO8pINFXWSe%NT;deTt;ImPO_ligB)&M z<92)t<6UCesCo2b%+Ci57dl(;g95?uenKSnC01os)Yj|pI|>|2>et5om?0aX19xUdA#1P;Xop|V9%x80C~6F(|DF4KnCw?^RiiG!ocsn<+5fL=)4b? z6fJ&ACW1fIaqxIGE4vZ&6{OKo$Bp}K7>{=>H4lI>zmEc!rsQw%13zc&&2pjGyd7KA zy%zBt1UxG|+J*b+SV0;;yRl}OEz|SH>Cu_T+P%(-e^-!P|HE7Q&$GcL2=DHDS?XxK zHTwePLm}@G{VNYCynEVIT%JMRSz`fsP5)h_b!F#Fzk@{Ztvqz%GvxjK_pQ}$`N&|y z_{*u!&%=PT_ZidKNp#-3H;9%dbP)d;xBktQVsm};>P==*9g1{eJled;D{@Bx$T3^`_lk%3E#XBa6;vZ*7=qqJfp8QywOGH zeXsnqwze2MrM3N0PKv(ReFewh<#i-fbdjZz;U{ zL@h5*K;BhaMcON^cae0yW#u2MNdN>svwKS+?@3LcCttbApijFw)-5^=3|vcy>$rx_ zdv$9@8BZq>e4vgiD_c<0|1aPFtG(&r_Q#F!c(0@8@dRUj7oJW!>>%@l2fLP-1-M}I zURULQx^5j}nevQLGzjdbpww)}Z(cJHI@K?;thm?77-Cu#=Qw zV(U3vkqCY-NEYCMD@e!7b!zDnWN>=S$0*S(447;@<|uaxy$0R(>PuP(??IYV$AMpU z71xK*8zfV;@XeN)jCT+6J~aYL zmHBSrwdjx7i5oh$of+`?e;H~Xi!kO_qB3*GCY}$} z#*Uc8W@7VJ+msSm*BA)mci!4~UITjtiL<{~tlh)>4@l#T>C40LJCHZOGS?vS)9_|} z=&~E(ZP0y26OH%DqM@8R$h-SsL=T1c*LUx00w8ZwCAqMYRu|HS0?pR*4T<3Eb{*kO zkoTH1yuLo7WKicgOFUZ@28=zll9uzL^L`!uyZR#JZAKmUHuSNOn>0G_^mFI3TN$u= zcT@8?g)zT1XD7<*J^6uJXxW-y$FX^<7r0#CWE23bxum;VoUlJ{*^tPm8m{Ti^ymM5 z*-u{{=IK@Z8;{I2NPINB31^I-A-qevyfn~wrwT^jAA-D}6t@HnK;G992lo#{-r4T* zEF61XNx5Z;68kz5!Nn-iHb2OFQN==CKtVZNwj}=0WHE_MT;j_+`dhoD5U*=)joYwE1bN@AvqC?akM2xpCOMPxEcA@7oXn zlpZ|V`%I3G>TPxN>4S`2OwSuHtYOwxpUQjO z27ma$$j#rgI{ycIZv{)UqOy#!t9SV0eV?zhJ2L&++w&oPdAL85=VCwh-}C=Si_Or# z!v22=O%37_F(FfG5T*ZL@X&@0tp;`CZ@hk`P^?=)-Z9Y&YY=;9$ahNrA8A88uz<~m z^z?pnmhpH3Xj{4n^a+oWvLo1~w57?Q?9eN@r|m!S28+wIzrz4krIYi)51UlnMa?a7rlDxZ8sfpUqA%S)NvkF+kYf4MdwXu z;1E6&%Xqv^sCoQ({_pb(ENwr*f13|%K2f^)_;qaF31?k08adp6Qe0`%j6U}MKZlgT zjvgK6@Bh_A>C59LD?j;q%v}FZq~XnxAaN7neKp|GJT%_&nymiXkau>aRtAN4bx1+) zRmi(o!QSCUsuO8$ z#gO+KP0=WC?po}{$$@B*+LQka`hOq#@)%!X&L%c@{$HFB4etfEO-%^zg0-hu(0JEL z+Yp=~?|5CC<&?d*vtynsk|A%Lc$kHI+)fhP`Q;pbw-UiE$;#rNkoN}ftomL_GVpE+ z+qf_(416D%-|F0k&inDUFPU=7h+v93?#=zNYJq>*|G$vbR#3%&XK&R|^EihwKkY3$ z+)ujmfw6iGmfOYH)w{m&fzZ6+U0}=dHR4Mwv7fzdxOFOR(TQzL-~T`POkW-!A931s zB>uPm&(M88GC8<{6sM^{0$hjcks2gzuyGMu4N`cOyix%+NPE_Om+po&h@0Fn`wQNK zG%d^Ns&`Q(E!pvMl`}B`=;*xGz5{DetFfK;GC4B1v1P4P@{dp;kyDzxbUk_vdhTS% zpV=b>mQlxjJiWC#@h$rPzZCC{S01*Ew}Nb><{^eLKfTw(Cr|9>1-Fk0POognu0c{~ z7HT&q?gDxPS(_H8R$*Ua?<($9)0$!aXOM2vna9Am&fgQHB@M#&rvS z>u#ZlH#c!izd{eDagCByRL)6 zyHUzlI3Mo+d-wW?I#^kfEY9wfC#EF;2W^{0?U1)hPVI+tGGt&Dqgdo&6$aFuIyc6j zL+3qD>BgOk2_dkSI?mkm@O)KP^yucOrdx$P&~7{>05yZxI^a+$M$<2yfQ% z7k$KHQd8A+;@l`yyqLweJ18b1PiuG*^RmfoQtmZDc$D!c#pX=R4 ztmrj}zxHKs{}Z8q#@$+zeC|^O7ps^ z1>Cw=VmMyEY10`A0j9$qujEcvVb&mA)oMe0#1!-Q{}<`Z!|Ty0>I>4#Xm|@Z&&VLW zg^zLZqVXOfi`>nCyr0{Yv{HCK2pzs$3tzDlsFzm}_+tbHZ`n14zKsW)Y!tpYLf-ds zL%g|HlEF3(A-sWJ7M^Gy^)$n3&#AK<%1V~OXLL)c;D4Y|H5vNxC(BWm*o0^lyn`huR_@U zzx&rfT{ne4OwYR|k-j`KT~yu;ADrv|C24pI`5b(O@Lu|%kPD6XR`R&Q2grNDq3T~0 z-kIfJ>|NpU7TJMLUl;6D0JGzupmZc29I4y(C=K$KJbO1{lL8qCayZFd5eNf8t}QEA z9nq_|ah>mtf_5PgLLC>|V{`Yf4PFt?3%)%F>;o4h*hPNO%z7pYm z`d%m}8t+w{9e>zh|9_#U^5lESTXOMK`#N~`R%M5Xq7{n>X=?KLxwTXApjP;G@m0us zq1xu$5xDpE%YWDS3px1itzD}33tx2JJj2gAz2WABDRo@1QG{djPjue?Znai}+Zm5H zA2pAC81ozFQDr;4oEMzGwe--b*Vw${BiNSO!M(Tnea}iaeZ%hm?;R}KpAq(j>DS&z z?CHy+{r2rUKeGSp|FL>FhWI(GLGm;;NPN<*8mU3tztn}%YS4+iS37IuigmZiSZsd{ zYf#|z+F8m0>F%%lRFAmYgW=*kTL_v7Ao9hp9(&>_>Cf`lCF(kG1xdD(PPGmLG8>*h z#a%?NL0&tJdI~NJf#uY3F#(3r-HPbuLkX<<}u6v@AETAILPA7&kJg- z{by~7*bP$LwY;Xi)8QaR!7a`-9QzeJHffL2wY$QZ{u29hK7D!Iy4mwUA$o2FDM!Ow z?3sEo!dpFH9ubZA)}Xb+r~FZHMhZ41S@(Pw52U#uZMC zfxPWxRl9C$kwN>G`lpwL!+>FB%R%3r=)B9vG8Q`(2>ml|)GMWNbUr$7mjlP{dk8Qd z@4M7I95Lp%*=zh+g#{0gdHl6wA051xzPP#BV_pPkCa&U;p{M_U8fUj*%TcE1jmxDk zkF>?bR)mXlD@a)y-b*tQ{Se-V?zIS_@vh!oXUqv3BuO))=r@qJXZE|70g$(MD}Lpe zl?}+r6Dt+KxkX-hh=)`y#Fkg-X>Kn1O%z$ z++QDZ`uzia1!+IMeAmt;jK`a0$=^I|Fy<$d)xGMi2rmc&obAbU@D8|j8lRPM3^W97 zxY)87yZ`s>sL{7N!2AsoR~~(NyfoFu(0DhU2>GT0 zdG|UO5xXF7`D6P{Vj%DHoOiFTCv63>V{6hjevJpQHkzs3koQTUuKMBCWZ>eviRAJz z6et^(%Jj>l^VWY;o3s0_&_Cl|KQ0#O9zf@<>g;m=(sIV*ZAi^S31faGPVf8HIP!ps zFZ181^J6bgxY!$8L{g6dx%-#iA8o3^-kk7vQ_6cV&GgkfN{hZcG(`?4geS~ZZy6fi zB5FRn5Z=dr`SPRjPCvXiU>oG^+q2~wg}2TLR-;77yF>Yn;KWrcP`zv0`4cbV0T-tP zw*>6}J3jaO%&5Y(_Z0`CJ$&}|*+8X&!#Z@{hq+06duoJ09d%r2uWamrQFPv+eO(jm zYZ#ArG&PSPjQQaorY;${#sk(6#hV{3!sfkg?*M=8a0sYeUEuz86ubXVc{^_WAz+y4 z`~RDj^yOg!)|||RXK!=D2A7rPGLBP{L!W&Y;RyWgfB!Jrp8&kXuB53!GT#E^Vx7EmDp*$cUIiSjU6?P3$vzTb#^C}F4Nd6qsZg`4)iA{Oa{5j?`)7Kze zCY^btXjf6s|5KvjE&W9KCBl2Z@^4Wz-j%$v^EDvvsFfR8J0R~aQ|}WuA@40;{fy3~ zIe^^c_qj=@5`b4p@0|w7`+N9Q6pINN9Lmqzx34A)WUKVbX#POw{oK~E;g&oRT%?YR z3)+m|cM+X;_tBL;?-Lo1HZB62SB;NL(&`dF1~9JS7ElD@a8e-pfwP-9vaQlWIiJcoPh_6*xfNyJogz zPA>KN`aWCKiuIILKr3 z#vNDQU|<&r^0#bRwoCz=xBbuV$+D;xrsq92Nnail4}a%Z9iQX9f`+%0lkQT4_tE>O zm!R=3nti|e5aiv;#;@85c~}01->-lTQcK-4r~7{#z@{$4S5amOASWkUo*VZ6XMZ@o znAIl(wqn!9Z_mPj@|cg)p$T-}7x!$8KCDChXPjr{!U*#V=)9+s!zNi7@CE4{Y98M( z=9fG#Oma2c|G%}>Q8!H%n|DF><^mq4K(J^vUt#fJ753s}%1F=ofgAHLPCnC_M}6d! z(%-|06li!$%1((Oym^kfEk@(5^Wa%|F6518AAL&8J8G@7vlQMD+&fFK^M|~HBR)l} zguMAr*fvk;k^x!o-nyzY@bnf{-SUWTblxE=6vd49&L z-l5byCNSnF{BVbVsTmKr*1GIdlQ=eSvs7CJr{j^pWHr99v<&<1E$;eD$?3g+n4fn# zeR*^Ue10E(`@jC5(OUig&-uXqU!A4~tr#)zL26JT-!f^m8kC|T(&r*utov}eSad7A z#AaEW6>f)**qwg44t{LZ4zwpcc>fT7L5fSmHB%6-ATNoiE30iGg9pNr&v}~Q8>H1L zRi^)PK-z~F95P*;M6ixJ?)h(gn(uA&8r0&iy;#+g@oEr~M-#^UJRb@tZ&u;~J8UIi z#wcUgps`Pr?#tE&f*a;i7nBsSSCF1-7er5-b7J}xWLF@4dAv^GQ`~TRZUw1E!&~9b z+J7FgQ#AN0g~q$o{QljekoO4Za^W_}dtpw|R0`xhs1V0*@!JlBY5MFjkWK_WI6)gV z$h+k+XNR8^8D!1#tZ6F^17^4`wj&?WFR?#klR9xcL|{rC=N5d!h%FDDw`9ka=M{Sy zk2jKs7{>fo^Y}yx?&krA*VG?gOb73pB=uWf>VaU0L*Sv=5FIPX^V$pG3DQi@8`nf< z9$ca(GJjW)sx-Xiiu^7i6k2DjeD{}3nA~dem%t$-nBe#-&-JWLUdO1$jo-I zD{f-w6Fw0{A1G4X2zlFDPIY{>Bm=%(aur{5!@z0o?sH8q(0OaEE)h>%Oav#X;|6+< z5A~;`^Y%-=a3d^;@pvP7_+ZTMsqk~xRcbsS@ps`~4?1pdMTQw|_@LkotoE_*Zl1#4 zLCRfIi3ZOcFES&|F2BLTUL^|0O5VV-d-Gy zH{M&fX$rFy)@l<65HI01Bw3dLmTi*AiGsY>2E~88y^#zI zrR+tw`-K6G9hSpkndrR5+T51Cf_raksN-IDhEDtlMz7w_!;k;;U_jpD)I4f2=J!nB zyjgAy54gWu+5g*WY~IFa`>u?1g#j%O$G$Ev?CO1e-_g6Tox7Qy_wQu-@`!Oi{fayF zzyAOKv)^X4e+m144VoIH`f=+xQiEJSh$^7fpzsWb#Ny?}y70{7Q!ii*S~O_nYYkVB z^QzlhH(j>{1HbjyHf1LQ@qLnuy#z-|aeJ~Kzj7pl$o)SqU4fU_Teh=jjr-ASP{4;6 z3!Xnh;5v0&p3If;9i`|s$m*)6f!7wsyTk@j^RU2}U-V*mXAfx}P!#9BhE)!`2Bpux z@#M;YQpfMJM*7Gq98V;L3qEC8XUS`0$lLMWRg2}mw!rV0kJHW6M4;HjtDgXQJDVPxXtyVW znAtO({25^&85e+CN=D~x^GUPB2J()hj(ZxtH7xO8`v3lO2VB&*F&=MQY91dj=9j&} z<~^@F4>;C#XVi#}4N?W+;m1!Q@8*)XmN|lStRRb8S4Z!+Xa4>_iOxK(N>BIi5TraH zy@rOja?qzs2=BL>%4E@aD?TTF`2l&C?>S1M@Gjr(I=ce${%xxrzgXH9_`6qM4vR_z ztiS3G6+zy=lB8u{*^$8|{^gvZ+TmbBdU^Tsz}=`Dd(ZA|>PmqpNEuPbg_qb56i%a8 z@5-$m{ZAYik9R#akB1oZ(+?#4OaVN=_!H^y7dmcl5fzs|%n&#PT04Gl6da)AcuUKd zA9>t6n4dSDdFRF5MwpjmYIT~*P6N_(_b-d4JLX z^M1n@q=N>gO&3420ScohZ;tFu1b>c;+^DATKE53&*^)u}_2=&8=fi=T6_2q38J+hI z`N{V`<%mFqI*#kW#Hu}No~ZvjSSb~D#2;cj-pGQu&Sc-cEOJpH^9BOAJlQr0?bp=UZ7X+^{rzacib6|w<|Rd zO^o?z)E7KV?&JnpfeW4`sAKbXx>|Xm#WMnQ%)TV3;A&C-xBsWrJAqGA-~Ns1c}Lx( zFOT;uems2F|Lgz%`TJ+&-@qEAO;dx`b}DfrH7HL?Pz9|99b6qQF(Xr~o6)&DpA2iz zIo?&>8{j2&%SN54C8kb5LNUT?rX~^8R=&-8DFC1U4|Roy1CT-7HQ(Ycqj0dZ5LeN1 z1ic0&9bYN>ZXOZrppI)vdF1h$8~qY{$GBKo+mi8WP%<@-5{&tg&oBIbZiEMv^E;&T zN?_NZ_R`pEP5J(yzN{-j^Z|Aait3r{X?f$v^ef0H?kT$R=v&XBzY(563VE-m;l1Y4 z2od3ZIOXk1G~SuR(+x{ugLI>0K&uJzzIoNP`!wX8{k8QYf2#v15~{oL=t&}&e)C|{ z5ahiHpZBHOjSQ?L)Rh0oL*5C)h40+ad9O09J@ECH5OAW7d$jiIIosdpm)MHfO;3m$ z8ISjBY93`6^E={D$Hu103oh$ucW^Aj=G}U;g0G1!9O$=9SiISa&3lcC-dImh8`JY1 z-a}s=`eVkY-sH^j)}rCPI`rH@g!e-CQYAFr1Hz3L^dN7K%Gnnb-Zm|d@<$+VE1)}c zQOq8!i5P9Ie3%G^uLoY?geypcyN8prT**M>v74WtWH^w@oOa#sh|W8*T)t#*MhJ*g z$Aui$eAzLH&O4PX?E7K^yPF{guhLAYa4tE@CO@B3}HR;jax1EF71 zsn$i}JJ6A`Cx%>}2*c^VnwU0Wk?zS}hjwy8B$)qPwk{IyrEjKlfc#QeE$*MnSy8~}; zg;w1kmBHp6V;=u={qhL#u%myP=Lh!ft+>)M<#l$y(4^t5 z&fBve;q6;%u>y@Z*NPtZc*tAK$?g}0_va4LJPPl2w^_G6s;TNRDJ9`v-q<4YSj|?&-&nE&k_f-FrutEC%ZOaEQFEW_DYmwt791iq&l{16w z(QA;(*7f^2xQRfQI?mCS-B1FL-v1kB-@mBFfHeroLl0wqkM?#9c@*$~wj%>QFMea6 zL7MNU<(rn`4$iONBX+A2`x1-O*+dE~@MiuMq#=EIWPf&x1i5n!k{%83_2=(CKzJ8$ zwXH(q?HF;o#24}|2{UwQpzt=&{eA)R=8WjNy?U)H2$h+zjw(n5p$ktwDuBG(V(c7d zJjvh!%YGl;pJ5S(-m8a?AvA#XOWq)`g*-IW$Q$|3Jw<*)lUi@5-C z!f^G$ibUWiT6>?uyF1s@;0NR_clt?|?&mOIcf?JWPZpi`3Ed-K_rcd&Y^mc|!iJPe z`_Oq8>rL`y+Atn(B#$DD`IRehl6Z=Ez`*v5colZ+6=c)_mA?2NN~AR*+w~7;W3M2i z&XxYsis)u~-ncaS^4N2FP(0x8?JYpVd!5$ebx8H@nSVeHjraR^!Rt#Q?_3F^gN=~) zyPlHdM#wvg>(S!%7o5Rq7v1USjfp^$=+0IMc^9nsX7w5Jw$v8f)-ekY)oJhzGSxum z-KxJxr&fpvf~n(zSLnoKeL?5_YL5Vi=MKi>jpXqXV}6JIs}|Y7j}yh;R=OR}iOm}~ ztgBdmzz-Ma+P&6Z#I{=oJ&rf-l&chQ$eN`H0r&A-Q6=+N-iWNYR^cq?`r zs-p4sOA9J%hrAazeBq_+ywHZaUSfCd zXes2^L$5*0cHy`9EGGgd>bR6f2E9=~;G~VM5PCu9D=hjICM>PVZEFtgw z2cBgU`^eya-Y))mY2o0A=G}1N9(3O81TMHHFC&6z>bP0g^c9V$AQu`eD}fS9pQ9W?ylB4>oW4iT$r`ddug`Y&9@6_W_8^N%?DLf-71pUxC}lfg;fuYSW9!oihH zE;a8yblzqqw{Cuf)%!Aaocn{KjC-5Wd9Py2JMX`X@pvP7s9?;G&p^EIxd9*89TO?y zI)=@g!I=NI2JpzOWUuwsX-em@Bh>PUq8N+4Xp;biS&+-FDur)*}7M{2G$_a zZJW0o*{80{-Lm$Y)O}A7tKLw3s(ZBp z$~V7?u8g_ITg+&9o7hV_A-vscCh=&zHT`-Xt%1B--BpchA@7l=XFIDQ@0FYP~WZ~Oem&RM#h4-NI4v}rUB&0$F+0=0!H3iXc_|bXGv)I*( zG2r4Pl$wVO#{3RQ*&cnL$qRzg)6(*rv3Ymxu@p4VhyXPm0f`nB)tHMDZTqS%lGZ<% zp7#?|`trDSlTZlK{(JwQDK5{j|KChggEn22_@_a7+PrZQS`A80xyEJ;`~PIIaI2@V z1}&@zW~cQ3zhpvp8_Iiv`QoatlT;GG(WaF@_2CLK)VkiUEs6}x-W3Sk)_@HXo0G)) zB=j0&csn5M%u0BIGdE9B-lW>2S!~^Ee7*9FgYSR{a7FzSWm2aZnX=&di&-YPY(bhu%eFB z{62h5cQHC|>&6>xGW!^>dhbW_z?fgx`)$h0*YSek{7AWnh1k6Lqs428T#?`yp`oHg z7Mr)_>)@j~noUg4JMt}kc|0#(CvZ7=j<+QZZ}Vke&LF%cPd%KE#@lwW&!20M_x>3c zd^O~)$7hmh2zgty)@O1}dV;c_gRc~P6Tm~xxYa3;ck#2v*M;F^a5_Qg;!DMFkga{{ z(O4)t?-RQ3S?8G(K_+!v?^!}CH<=gMeNb?e zx{1x3<$L#|s0EQAR?%*M=l~s?6De=yT?X5kzCpt6r!$XltQCrXA5OHO;ceENFOTq! zKN!P~#=HN^8Sf^@TSfiYDGKkLE>BxG$opCFie>(9Ji!LF(^7rW31Id7Uxvky_seb{ z&dN|S&~Xs1e>@xpqW>TE?mV2T^?w|`q0C{M=ed%Ij7hp_prm9-LdqDTP^OJiindvW zP%@KHDGgFPbD`ZphKL3gDGE)7Jonbx=eMut`L46}?|QE5dG`KY=krf>&iiw&_q$%b z*Zp4iTK8(iH#_Q~^Zub~p!&^76dXa~0>oyF0+`Tw8-FC?c^>|2teCY=s5883D@CT&_t;7QXv>x=$BI#hJLb*{)HusSSum_che+w&zJ!sL5 zgCj1tJivSAelu(NSl}^W7xGMCj3_f~e^Koe2~5rwvR{MG|F7Qt>}0A9dJpQHR5&8R zD+=_GxTR(*E}96S_n;#w15;bI>F*NTjnsk1$Zxlkam<7X4(!xUE8TDqy9bHIvM^5? z`-3CXq)u^Z?D@Z;ZEwoC7mPn3tsSJTj#BQp!|s1~kakeUGw|5YPV51R>4f{CBdWm+e~FE(p{ zL&e*Av-?vDZ!OmMd}zFPbZ@sGfV?{<>MxRc`&ymlJP&yr;QBnW_v{0vg!1%6@mRpr z=Be`=^5#+IlPf$)0?(yVj08LI;ODXpd3*om{r`mcvRnJ*MZq`{H)x&LMVLl^ddm^y zoxenf=l>-kb=YC#w=+-5wem4PxGC6ItR9TbyCFWlilf61T(4a{_~sk-3bO5sCZ7e4 z@sGEx)X}1;j#b~wGm?+Y&;Qm`ysd=K$xwJ_?5pHO15PGp7y604DeMjhnc`PhMU z6!PwN$#vmu+Xpr``hSlXiUqsOgp+yTfE34nbHMWi38b+GYONc=gJ$nfhg<*U^p-O& z2St0}=0qJ5H}0xIJj;Q;IB`8W6u@Ukf89G3sbeojehnvmSv93`z+~G-j?3ZLy!9%# z)}83|1H;!wpPQejVg6rmQ6nL25981O0yNg)P~EQkcmB7c;=R4!Y!`+1-O`9fXuLJf z5PB3L@1nQs9*}vfaYVu5gSQvL2uDwS$ZY3x|-ab_We>#qnz*d&I z+#fDs;N5lZgX{00FHXJ%>8jVOiGqG4u3G=0^=?yi-WE-o(oS^9djhFr3r2oiJCiG} zz2XP#PnFgLBx3V^(au*`lpY8Ou02!2!w)g%etGCprj+Uoe4_%wPc+?@Dt z{%4H&-+`(JIpnMvr1YTNG#xRt9<;waqWH6Xxlvi?kqh@=4=RhW?d|o|GCKM3Xg5j2 z4b0e^qzReDf*qN`rib7Pa^lclEu};fxYw1j%#0Tg_C1($O*`R+`gdnrpn*!qVRrgyjm2Ex9Yn^ z-#Fobl&C)=ejoDwb$aWr1@IC(vSRZy{xmmG9{kSHe0?m4h*LWs1$o!0y%dy6Ab~~4 z#((E8!Govr)05q3ZQil&lew!xT<)U2h->0e>*DPc8ko@D7-y0%Y@K)zb*#MJ0NexQf@mUhee!*34toG8vwf=jlwv{Oy>Hz2Aa4zc*zBhRun*4R2DozcBv%f1AcSR@~ythR0j{ zH~;^0{iffazyWD5RS$Ab!vCi9puPMnWzc$1q#*Z+^>F^bn=$^p8ulO=%eu9Te6)wsa z3<<2rG4o|=aC`U*0ndv|pn9e)3hQpX{T z{C-`L$mOcWfn&M7JDaqydFLJ7Lz2u02KUP4r*8WE4g*nty{@kA}SM#gx8~d2{+V3bVqyw+h>aU!}~rfDKsL|F! zUGx>?v+R_DLUa0CK~m~y#mJ9az)$pj7!EkU4CV4)hs|5r^@0jM^#FKq<>7(4Q#9-# z@jQ5MeBvYH^Ik|>9UNz$r);d4@7}wqc<-Lv8cX3F8I~e}#(Q9$Q)V&b9T}U7uYtT- zzm}f733=yfpS)_{2+7%u0`jKcN7<^v7kTRlsXP$-37GOA=zjjZ)88kK z#yh_yvF8!w{f1+llf3sv;XSD7W@Fdw3YI4bXZ^8&dv8rXvW}3qJ#Hu{D+wNN=@(#N zumKN@iwzI#yobIxF;*vT=gkxW0Ev^1T3ja^i@rF~&rq%us-eHTx0E`xG4i{fv_1Wf z0S>5mu)UPugw1<_-MOzjL=OP*vgzEl3N+0BsxK9sWd1NbZzeI?>R=%p)E2w`-~K=S z4*gV_!TH~vst4^ObX=nJphecpl+b#RcUa%hMLBpt`jam*w_y)zUuRERv0uxmOjTTK zi;n{+o;su0CJ+mL*Qt+M!1;e--)AfCToO>j@6;9Mg&#=Q)M7V^M8CwAUF;3PsN)-X4< zz!%L2zaPpCn6Z#b1TH)ggXuQA3 z<(NKzyyc#?6q9*Bf16ui1bM&oJQ1BKxEuWHyxMY0E*6-m+Z;atdH0pFvU6S}f#n>Y zVGn-efzBxjrhHFy-a$;ePx-?Yq!tpl<`e&Rf;2ks-%1I3EGG2Fn^MOlMt&-7uU~)M zivyol)_?oSf_;fqFF)?`_A(xPuj8(-TZzs4aHO5-LgfyI=e_ADZFN|&7+;e9d;Xs* z6>oR7;C~KCJ1|=(kH*__Nn6=#$XoWweT_Sick?r?w^oq%lBrtj#D#l+;&|l`>6Njd z+oQ=l9`arue)sXB3nY-2ba8I|6dvH$xZ(Z&<#>x&c3IJV@D0*XBu-!h_j4eF&YLwF z*EdXuUvDKKbM5{Tq|rns*&3{-tv{G@WT2kKqN zqfaYX_F9XA8%UhSi#3{G($RSrgf~Vdc+g+>rqq#*k>Bw*c7m+&I8d*z4xY+j^9H7s zYp?8#1a1wxPl~+5emRkeL+4(U!Dq%FkoMA6hk36~;%G$_`Qb!oD&8){praJt9yWVq z(RiC`vl+@m-iP}>7?bzj{PfN~tAxCVzeg)+Dma6Z^c6E(OkzQi-B#s3$os`FdqRIY z3CQgp-RoQw2GZD5nA zzSA`;0kGq9glF0R#@?HC^w*nQx~-^fg0gUzntZU|OxKIyySLefTAJ#xy%~GbfGPFA z{eKDodj1jiAaAN3@faV0N@VE>D*l;Sfo)z{WPInCx`yvu3iO-C9J%k6(h%tP^?&t%O!xx)Fg1_Jc z(n#EF5vO6W5PAH_wF#FTu^ktpNH@I8nrjmA3i19~(5eqzUqinq_^-uo2Z;#D7&(Rh1LibaXT z0V)0E%lBm70(l?C#2{}LP_A>ecL#hgox?+>iU1KQg~p~ns#6=JTyWq;7B?Y$2%FR?~k+3`5hR}9blH9u{2G;n>$(So1Yf!*7a ziuZmo;{Xb8?yl=g(RlOpy-{5Qd2eDPh1`U^dzcP<6o$Ol&dt@YQQrwF%+?g1dqDt~ z`9z|`A#dAdE2SS4kbogieuZEq9w_=8%(PsB&O1(kYs*S_dW#$qm%mo@$lp8_N4n-TsJmvu2c8VtXbv?c5b*VxcVp!-CL{nkML{{ z!}DfZPFo%3t51J)`ulmyeN?=?dE*l)yw5gAFG1sdzl8gz6Xdbcc#v3cw0Z*RX4 z=MRSG`bXQn8!@|g`t{-R`}yq*KmUhU(pHDSqcVf8v-6u19#p(NAAG$|;XU%!X)zk_ zDuP79QOJ9buy`7o_m}dcM$(XXe}GL;3X?q;w#>i(oGlixW<|5>LEdVDOtBStB*2oB zV(D-W56;vuzbs`#=Y8HT@JcHDdTR<2m(%)SQ}Ymd_wH(0mZ+pjf4nJmJj2K@ysee> z%w`-gUhphJau}O;#}mn&=aT(_9betWhL(Cv-c0tLfwRQd49}Zs7mamnZD=Kbd+WdF z|LJ+~M{SxCOyOf9`3z+rZcd6kV*C7isr+? z;KZk2+h5RwC0d(Fro%l5@@b*>)61R=mgYUCIUqK%IqokkuhyHk5BXxvg&#=Z~9p?!c=1g{LW6;TY3^e*;(G1 zLC9M(SS~oMganihNk_A94FfoVH(eR<^bxdX5uf>V5nxpfcviM}K zMTd892}m8282LGPgj`i|6abBSY5Epr*u1-fKN$>|xqw!MCbz7s*u0g(4{Y`oA7yyn zN*1)$Q8KnvK;Gy3 z<7BswSb^4&`%8c?0q{k<5*~%TMSXmn-W8KT)$dyc2^L|1-(`*Vhjw({+=n+Ajw}=f zi;%eXJ1O~>wxRRZb{biDhL`>ZBrc?m6&U%s>{uaNcM%8r(|rrgu4D5SKcn5W-`oW} zeBBdwxw09xO;FlLl4sbI>1eF{F+J zjQseRvfKRzaUhpPAU?JRoA*YASKq~2T|v#)?D%8m*t~PuD!Wq(EE&FgDMRV)m({McSW*#Y-RYvbY zUCO7`RNX~@2NL&W;oPRg3iSEEpj|jt+nfFdBuX7Q82Q}`UGLMOCIFV#sD7)B#_mC1 z*5p{fblnGvKRsZ+?t+nDXWZH^t3gVh>UA4$&L^=l%Zz z_6}_{-d}4TMn8hQ8x*_QMUn^ zABK+pbRqy9?~Z~9$XjyyfIb)G&9blLe7`c>AT{gHHGGWDJ6Gw#2Q6C>pn}BNT$))~ zc@&+u!bB01vlIRC&Oz#s!N^aG^fjfe0tfbQ-cK-;GJF!e?XcGw*gIcjNM=pwEg>di$4|bz*p+Rg(_2V&hc(f7zaO?-vIq`H z=e>i1u0h^0r#SU^A@99|MQvb0CJputiNevlZi15O$Ky==#y5IfD^Q1rC0!STN82S0D?hyYy$`4r9 zdZ~yfWAiQ?ebAMt7zBjAo1RE`Peb=+KIhlA&V%83N6w_vRL9b}s9Ax(UvKfF;(hr1 zv45VujeNOwB^vL-MNpZ||CH}`&+ zqd(r0NFAXV`PJ`RFi;qU0~YxUB+62;dDlEpyd)MD3^+FGUNPgu=52QNrO;O=#y{R- z?`7KRu*LhC_n9i@fLa0MAG zv0+g;>_OZg&2Wye2PMBvJ(Fi>2UG>*dTkO3;1Y9no+Io*F8l(Izrgvww7qG0Ay*hM zxSr-9Qi4AJKi!pS@`p_ntVH7Kaz@6^EJp7^LK@9Fd+D$TJwxi?$H>n!>FM3}Q~}Tw z6`jTDh~0y(rC$3suDc#wslU2x;m?Pt_i`zJ-uSNTzx^%-G5mm(mq%M2hL+W1jWP2( zNFh|bkE~FrpsXPMzcA9HO8diQ_N*eegXFop-fm z?V$u_`n$#c38~{IMt(JpAEI>Halq%|n3uCNHt#;EB$-P(>p_xUEVEPr_9d2yFG^@k zH-h1LGhIDSQysTmMogdl-Tx1!;vN3W#h$`DXEHk95CMF=`|*?u8z<6uNa@qR@Q&MfpZD!T`r|!`)DeS`-!q=4Lrro5AT`7N%W5xd-c$Fl zor(En3}z}_omKK0F}pX*^yl8%y)PM_cThBKb>tn=tBFjWzk3@*#XIbwr5Aw|?_fzzm6MQn zn#lXnoEbbgxXI`j^J#S6QO+XYrQreT-bh^Ail%Gsa_HS#?uD%HX&(CHeFCXN3L`(q z#-wHL0Rq4*ZN!fC05!*3{q8aQzCX9{;CJmYO@)6soG2crY4`Y$2$)3T%1-{W+4mIv_7?lgAAjb8 z=x_d~)WM38-@RVb!7rb1fa~(>vXF3W-jT=Oj`8m|17f@hUp4BRF}pX@_Em@Cy#g4% zdq?7Ft0T~=_+$b+oan#j|0&ZK9sdaD|07gA=;Zd2E94$Tp8qe%S+k+_Ah!2|zwD*U zjdFX}Sd_vZgx_S&Uf>NkNRQo}0LgYBC8Fw*#7hF$SeyNGFYG~8A?eHZ!5%cTLjRWE zV?3zPd%M>x1^p7+t6CYMZz=)`khtW0m1+G>^d7|1=~X_mj{bTOr49~^{3?ca95|+n z18WZ0Da7ew_aO7x-*FXoyu{0sZ_8a4wqW<5$fx%VGLAER4`Q;Ut&UUOk4+Q*zCjv6 z#ruTRcszyozUMLv(Rk}-wp)io-VXeGd&#`BF0b*s19?aD{Yr{1w*!s+Rotte5WsJ# zqYLdJ?|8PUgRdcPUfBn8r}FWDOZ9w5zAHNKH(`bG-sU2J8Hpq0UgJt6qVpE~6qC}h ziT-#~>fpu5Z#HXzXCRLN_+NZt`=P*&Nzqot4}F6)tvUOO z6nwnJ0*PD3^<;aNF*@(O>Hyq` z?exF!?sWH#5%qwJ6C_S{W5>Yg26WynvK_L?`-xt^&0YSWmY^^26;!R66}@9dvCez`pS3hz@?#GV$J6WAffJ8{x-<_GrPpH zCdeDl>8AfwHw-AhB{DtgLSLM)sGeARjYky7AaP4Sx=(xm%jYdBt7C;~>G16>N*z}) z@-sQ-s<>8Qys}R z6+fMB{x|>A@znpnQakBDV5RCoaT{Nsr1T*9?oB*sJ?NvVuW+?gxe*JozoZ!UpmhC9 zoaFgG{Qk-0VQD+yyf#ikku?@PS}1CE9QGi~D7~dB6(kUJF{QQcX(%XCRlj^T8GQw5 zRrJ(aQc(nCBXKQuF}rU6%O!Tl=INk(EkBU28_X&D#bflp z{(%1HpY3|Qdt>oOY9kb1$mRkIvU+SKFB{!-a#U;Q1Olx z8Jyq$Cl5&C{LTd;qOTxltTdOa z%hDh3ex#0H82P=abVzsNzyZ5Ob^ROXuz4>hxs1DT?IvE`{Jz-sDGf*LJUr?n@9)O& zyqRv%SjR%#@)h$dNCGnz?^6?b0+jB(zDl%_etQwxoTXS<& zg77*!z;!%#V(dEs$V(@!^o6{MdhQou;q(8Oghsn89D0K<8a4&{|feCISv3 zakagn>b~LVywy1;_AgSVKi*f6I#e+7JAH2JI|mX!aCkd;uSgJk1?kzg^wPeg^_J;)liTV^fn_CPH2lZ`8PENFjnKqU$Gpz_j^P3G_wyPaMg)?Ai& zP$MbAu|*F39^|2yzpS1t6aiI8+_4Df1D#RmJ*df2XC`!3iAYz!w=fxBq>cv|`SIh= zEq8UrfrxF>uD@Pl4@ho{T`k%sG>F~jOUGSr(6EA355L_PgeZHOermy zUqP}{@lNKE3#VLSPipYt(0F@Pl##R{Z?ojDfrXIwiU1BzPRM(~_a{3Xi*|uuNAwb& zbH##XQH!(UA@48CpPdMXylr?QyYrUdfx?~*kzwQLm)MC{QOhM+MSvs{m%U|;kC!hx zZ_n1XoPpEy$9oj1!v!NhP#DOqaTy1^CO>}Q`H0P1LnyGl$;W|M+0*>d%>F368?sWqg1SjdvEG(|%jXyXxUMYZ2r<>&kiX zJ6u7Ym6-i5ue}SLWzS1ig}k$(ZjX`g-riC*&=G;Rw=9_1c)s%DLHJXr-wj>pytgf# z7Q4tI0s@h^>Tf&kW}VS_$BnYz%A!Nwn~^%AG4dlg;2L-Sz=3OfHr&q{#^$|J-D~w5 z2M1zoojP7R7kfZr5{L=wE`H1KylJkZZ~W@t<1Gjasdy(8-zuW;&iYWwi^jWD)LkzG z^2VL7Jx%6q5|!224tY26I^`1J(_34&)iv+qj0J~e5A6ztyrrL&zP=85h#w0koWVR)=n8-JFrdGab+M!ED#?v z?m7Z_OCCISeK+Lov7tD0dLbS>{n(&y{|KFTo9x=zj|w8-5fW!oV0D(s1)X?|vr_qg`~UPdi~f)K!1;d>RS!znTM$I)L9a_ziJ|qN>(=E}0g~lLK1Ifc zd9Vk)^=tX92nVFtWC_EkDo&u$bei{FKLHf{XjvEtdrXTi$am-;=6&R>DRKL5d!$|XTbk3 z8@IQvmyKY>JlTCD^Tj&X&l(_yY`OcZEW63UEd;_)O5kRnA<$AG#s(>RAnfsj;)#Dc`I$B zt&XHIwU=kl%+LSaRJ_kVUkQKp_w6mSE1kk0Lqyz&4okWf3hSV;Nc3Ahx-^`N-Z92kYBaB?qA;j?}*sZ6rCml zjF7m?PG(+h|H6Cosv>>9X!_$#Lh4wDk>Ba?{PleOI52J;H)4Mun|BTij^&1#F0imE z;PAfHfVuzA^lg@VM7xRMc{6>du@24jJjK6{w{TJMK69aFn!;Nk=z9t@uT^>PqyPI&PhT73%g&U(5_@h-f33pN)grpJZ> z=3=Af^IJVo|5)BD+SeV;6#+9vf8)*$^sqPDp}+s{f4FE9Ukd&49zg2w#>lTIAUN@T z2@X8?%AVohhRxe{_v?CAduw2v@5Pd>i+#K$)7Delh423#@PRZX+Un5u)A5jpFG$0+ zHzyVE)84uw6y7N*;mV|6>l-TBYWLzBsW~sBqBd5&=^of8+LV*UfudioQ58-5=Sa z!c2d>&5=5cF!B?TV|$RdTmW2M=NmHg9Gkbcn|Hdz84co2J0H${H?eu&x)5M>HJR}r zPL$tITOE3=F)hZiXaC#({~rf#I{SyP2MJL1pbIMB^C>+@ounay)`QqwkBM|ilpCE| zVN`q(_MrER9(|dD_aIOFxmnd;<_wgagF5*#382?VYZbW%tqjnXbca3Yz?qHpAAf}c z&Z!F=8tv%!ApP%Z?F#=T3>G4BUDLBSQrDsPpkKF(?yvkze;cH}NFCoX^26WM@)A)L z0IjJnjE91;d(h}ixa;8rFOb5{{$p02h85&P!@{e3#u@(}WHya;C>zRY{ar!gsCZ{h zpPQiYHgKGlLgTHYA-U=YaC zsgQSu>{O~0B}w`i-w^kVwfeHHU7NPa5bnGNCM6yEnen8`l%v z+icyr&*vxh0>?l1lbkCEp!Hkr#$@seQrVoz8}iO^`r|9M2M-K!?pK)Bp!1H^D&43J zd9Oy|O!Ie3%O64K{rGKeT=Ovf@ji*v@dzWoMIEM-U$g}P@6to2FA}kNb6aj=ZhGNP z{Jk|WpvM`T_larGo$0EK|9Ok*WZLRb{wkYQHh=yffscxJ#<_5I3h%NfnG$HcaVr;R zXhYua?`t)4A@7o!KMTkYCz|kQJd2Ci3$&*;hMU|afE`BGVUdux<&ZYFE4;nMK7daS z+=T~Kp&9zj+UUGxBlg}q^+Om`B5_xyI^+&Spz}U3$G;9gLVvs^kvhCF@=I8F?%2bV z0-&>A^w^4X*t`wWXRnJqcPIKSa^m7|reSlUpd9z`_eaL>-a<6iaXOSGbN=fs1YRoM z=Uk8Or|>T5bQ4G8T~8v;SV7)gUy`fHy!HFudP+jxj*nJ4)(Gzbf=Qh{{2c^v?fWHh z^2>>eWz}2%K;EL__A1;$VZiBpzM^6`I`6)X_UaaJ@67>;lVp*OsO3Yyz16pEwL|U^ z`kVi|kUF|C^7|R}dgqj&09dN@J6f;=n|ITBHnUI1Y>Dr*mc%zN#h(9*9xwX3LBp2e zc@Iw0R!5`YpQP`E|K|UH7N_+56FC2iQuUyG(Gv?PJ?J~9tP)xe^8Gp;yBZEiOl_wH zF2EkNOXR?fn_gN*uNrF4U8r{f?S<=KG9M;@qKKoar(q9riRk`8UP0>C@a;=93{`A*_bdWko82QOb45-(~2>?*% z6D4DY-Gc%I7uMx}T}RZ=`ldhZjeY)~LGhMhA;Y~4--GyBX{$rD^Rwu~2=e*=1Q9CU zxx>%rKe0=Gy+w`tn*ti|50_@Mc0u0PBk!e>dD|S?casC&-ntoO@MKG@3y8=K(RU0d z01d;3#5l;CGf%;s1bKV3a$Rc^2?Le2b+yt%=$F{t5AQ8Hd`bjdLE`KMW%etxpz~e} z)_oN_Onc2>6P`#bH~IzD=LeHv;@8bs&aEW4gx6OngmtHVfYijDa9 z;Y2|y-r0N3&VPHGyg0cL;wFp6yF_7S&n?J%eZw+E^4=STcj(>Ut?7_=p;2Y+7sy+X z@Vzez@-7VdlVJ>bi=7Uft{`8nri4esc}f%P#f`-=Rqd8df&f1rH93rrHKeepDWy@j8Dlddk; zdxqz2HEK#z9rtIS$G(8aTm1L_KRplrNN(^FD@E0VE(wDG3#{9u)bBSdcAV zZsdjcJdp`|(87@M=T@FtM$gil*GfKe0dfhR4w2gk0O!A}_W|rdG6JldQ%gypP+)}? z2TLemlRCbCrr#BHVZXsN;KYLG!hjixJFjiu@wEv3egSUZ-P4~M=&uK@L+ZfFujHPn z&M9LY=5X!^T@BuT})_-C0PWd&LAWK0>2cQK32>^;c)Vo^4G7UW$k$%{J*d7panEV!u0 z1)Sk<(p+v$057gtJ*dt-7;UWF;&P3|K%5SJ6K65l42eyyl{FE19Ut$Lq?c3AFwt>jQTgBG< zo|g0fhR+8LZD4rbOd&MZ@hN8$a{iwL74M=eo0KTLd6Ta%MdNL4yk*@h$os?lW3go3 ztQ%gfxdwUXThHwq{OkhcJ2xn1*b#t>*o%P@$UADIA>fB!kY>3eF%V)G3Z%SK{NL%K zKfQHxg2lhLUl@oXaYDxInJq8Td23m91N<}k<6VW+ft6p#TDR;oJK+P;uC*iyS!~|? z`GG!#qSnOfZ2|h{4Y2qBnMgWwxrWaepLYjsb+`?(1dSHY-`*0Z;$0XO*FfQIx02X^B2;?m<_qfKK)fMcjAJ%8yLjXth$D7VV-akM4-nD>t zZ*$cS=&gsmZDQ2x6SdKK-@W%z&ft?UutehS>2a?<_zIo(wj9v_LLdF{u14zEijkkY z4nF(0x&YW^7+i5|DK_t{!b`8c11-S9OP)9G#x`LtPR<=!pfl%h#PIL`H=U%dj;YjD zgVulF{}-d;U0{BTmBL%R*K#o$Zxt3zYD`G*ng-v7=2l+qI0kZY0q%xvB4gc_#AA+nY(}`UswNOHz$B?s}#)oU=K>U9_BbuLIUNH zx6he=4goPY6VIQKN`IGFN*&D@`Hk3L zQvUUvAFThwF>xagd;VA6)m5O;X98+UMunO`VE3RJ)|+~Lv1=H91^MuL6-{;6jw>p# zCd{uO<*0a%)8d)w=J3X_fKvys`Vit`}Iu8jskSvm%Do1GYW-4IufT5e)#LoP;}mW zR=vinGwF{vr49j%{CJr>CEO%%;9kC&;mga|ydCcZvK($R0mP=t@{W@(S* zyel$a?9Ilz05V^GeU<)rMdOha+&vZXRCV1>V!}Dg!4yUaS_rl?&f4jFd z74K4`^xKr~J*jEB9F6zS(&?Q?A@8+1uFT}Ux7QzkR;xhX`i)Hm@2g$F%1id^{2=eN z%&BXSA@9`9FNGdK-aG>9J^<}dph}!LStf*jd+WmW(i3`5g~1XeuC1A4+NlSiw5AkR3NhR6FbUU9N}(3=Geh zx|hK3|5;D5+2o-2pp<9Ed=K{ugFGbe9&c>^?GNZZ=!xx%xF|dN>p`cHI-Xn5GJpNO4FENj+N`K`?>?cT>eE2GFI|9bP#Qx%?sgAU?rIQ7J zkJwpE#rt~8t}eo#5pOkT>5PJ9`@BU0tir6#;n<->?7l>$nTpfAuZ5}LE7{h^*@R;A_S5*;=bYt09Qq!7e1Q)3D|Y5G zL8jh8cNm^`QCA>MbvQ3iZIO?ke?VG^ig#sN=1L0hThFt#(0HE_;?yjIyxT>}2xQ&` zVJm-mL*AucR#zMjxPS?zHnor22|&5@&C9Ql_nza|v*U|N;GFxEj{MqC;52gLyp$R` z?=Rw|mP(<*z#fS!ar7qETtnwwbMsI`)j|5>J&M%v03*LX@3%iv5AlPKLw^!>AH(K7 zNqA)&kmNwTST|x7IfcD~jC}Osda+S0!}Dh9q^*wlb+3w)%I4>PMJnFcywAR-@XlxV z)kNc6l(}_HE95c*1}c`sMJ|9T7LEpd3dN5$3!WU6_(Jb@13e1N?1JA&j_ z!n?P=t;aQ5mxlu4r|z2LqUgN)6IRKY#R`LJB(9>MV9S!r=)9k~eR;wkNq@WtkUCyq zmSPQxCQmT@q|AKrshDmz`f$;K7b?fN(xcYpv`9BzD3gY&vH1fL-c2mM6WJXm0BhYQjj>6!-Ti}KIqRN9a=4Sr$v$edXP9$M<7Oi zx9u#{zBLE|oAI?t8LHSlsO#q0p&~^OqA$*WQHB8tvj;Uje9w*Ny~OY9 z!wb#)huP#eNL8qK-?>*fMY+VL@-(eR<1MH!>o);;ioG5Zyg8oSNfao6-~Y>b;MNoz3j8fqhq43FFR?lWG1t8o3j<#y zF6r`-SGM=jSCHebdh!}_^v7Elsbdl&ztM7wfn@l2%hMa{5`zCXcqcoq+&>_WJ^vrp z&tvf)&trJrdPj0;s$;{^x{kWPPmnI7;(a^O_Y#Ho3`eRy8t>t(GI0U8f{cyk|3l_& z_eUdh5c1yhV1kdp9H#`o-9Wg~sT- zV?Oc4G;0fk?MPh6=G$&E#pt|48aekqSV4chPa$>SG4dM>nq_TX#1GC#n7YcW!tUOS z4;hB3$$1d)5Ig<`_6KP=gp+rLQ@^dsUF`)3g!nSWh&mc-1$5xybGS} zTZP7(^e&`T1M;>gx*B;F@)jY6eNZFM|NS;zYJ9g*xP+^FCRV9w`XukGDHgM+`=O zIG6fGWp@04(`V_rt(&oVdkiK<9&B|X4tk~wxqicbyhYzb>d_iE9K+B58^UO-V|mc% zsvXDXc`v2neN%_nM&W&7gPtB5?@6x(mn|UggO)N2$a`;JHpXu!ka@SawMP}W0QJP1 z&5=6@;Bo%qErO8uL~F%HJIGsLt@Vo;5DI?SD*1P7q4VDKeO&wGE@3c%#N{OAi1Pl+ z?JaEs$)`D%^v8QMQim=^eioZ~3p|VYft{8??j=iX-it1t{3g)iLaf*(d8RM30dwum zU=l?`b+Uoea%t!-1-tyo6Kb_D1f^Y z{Id3jXTR*gfsy>V0+Tu}BP=;nQ!cqZDuKj9))yXD9Ks%u&R*IPxbAjxHP(NZ-v2$J z-I}I4o-|wS`4c_AL8?y0n^^6VNxsCAc{l!Cybz6dN~6?Hd&pb7o@t!S+qzG{{sQEE zQ#o3_G|m+Sze^TgaGC(d>mRotfxP*Z-DkIClR!nZ!m(*BJn&=Rlv%d{o%da#1%f<6 z!oUZKd&YnFU8pcR?{cptW?T5_k2evi;|fN8%f4L1_i^HYyu?P1`#0pXond(1Og^;L!R^4@XIeSGf?Pqx`+mIH0SfPt(lJ&v-nE=6 zB_WV^>6e26DUf$ccFo!Z$eSrwpu+KlE7-c}a;G_g0HU{UXx|5Uvoa@re|V7uRuGbU zHnG6tEqB-0$4R0OJnF^fYc7chgDXf}sZ8bB!~gPm3!{plsw@He|qwLa|ATbVqw!~IO>7@s%S1)Az8*&f&0l`_v; zjf(d@hn{o_?>FuZENHyP{EW@hA@2c=&68x_t9sks`$68OhLHzs!d-!Dde0J;qXba7 zUgGpl$Xl{axx6O_ZjgqZ*uVNW9*Ei9@_E9C&ig>X@o^VPVIYjenF?yEdlAsPH(z$h zwh0mX;~jw1fy2np%XZ3HOI83FdM{`VWW^qk+CL5n`1$!0J(zp$ElF(`6bKraMn8EfE%}@v5f#WZ=*_% zzEubOiQA3#^7p=L#pKN-uJY-$s2tLhpGoP zy^}RCR&N9(_QP54Uyjo)iKnk+`MG>s7KBqW2*G zZzBsDCKQSE_Is{?)DeJ@U!l#OnZ;B5zD#gzO_)8X zO?yq`+Q`3;`sR$q&5}r#%tF7ZfsnwAO%(is)VIAQp>H8?HSRO19qA;X9#DI3qcFV0)^oWP ztD*Bg8xmKO^g{^D)cuV!NxNASJdS=zjtmj5iug`{yi<`nj$`DfF)`eE-w+43ti7g? z=ZekStXjdyy?88+Ozh;t?A|uQtE0w40seyA9w&Bm-i?(D4ygVS0)a@J)2;0}67SG?3%cf>@SmYS-Vc#F zgfa5FRd8~f$t*u`%emDV9g5BS>-)Q@w|f1F%A5NPZv1J)?B3%p8>^%4ir=NTtK0u> zK5q5vXsW~JiQjPHnfdOmNyWQvyIx!2zj4(lam#@|GW!7&{Gl zrwAXY$SZaQdbiJcJSimr`7O`X?nB-sw=Y<%%!Dr|GW%x*kA{NyM~bV5nb3K^Iksl( zBD*j+g~VBMxF{>VN9U~zcte#J(%=059;rhgBfr)&x~ZI|IACqOsXr$goAMNYBRS;$T#ff}AO?4D3Sfh0lKE3td z{{R2(_3{6QcsT#Brs_d$-H~~e9yBt(RsgLB=}aBzSYw2$VS%cJpm7lFhLdKG8exMz-rb+xWrxBKfUH2Y0 zE1ioV9xJqILA-SuORiQc(-1g-9+K7=^%hZ z<9%|`KC4xb_qw%9mc&EeZwzd|uZ6r9yR^(TwYq_H_je-JaQ+{WvHa-_c{}Dkcyl$0 z1UlqaXASp;0vD@4xBg6_KVoOq80`iozxi(O zxDP*XSyi>u2=bPxya=S<8(7ShdimH>sGa=A`#H}#9p?O9G zeFga;VJaE4(;x3Jqzd=s1W6M+xU%yh=gm zeX-M5-DyAwgd%aFXO6LSiJ|lE8Vpa_|C;`IQ|iFV@AbBOVY5N->n#$dFGuvTc}qpy zy5xJ_k61exdc#^9dqC3rwN=(|Y9+(Z|6j*xtK*qSo$}ga^A9KLQt^JsAL>u(-f46A zMQFT%AiH50(Of?d}*A@6OgZit(w zl7N);I;)@%JeV*y88ZHt?%i{1JeD2qy^SJq8MaJOZxzsa8!Sl^sG-BXx0gsASo!s? zaebM0haV6HE;;&|VDk>k+GOdQ=SQr@=?PXYXvVyI%e14pe;`1U;k$PvzLBOnx&|Vj zy{-Ch{>Pf(=;GhQ`5#dApyv-~Z%}&B>kZmsXgw&URG>XcxZEiB>|SRA>_PS7Z{63! z9(2DxTT?;E1H9kwj{llW04=47t>0k}(#(r$+7nFzBZA9h^^W5~cl75>mMrv3?Au4$ zmnDA+fes{&uj|5#?tke)*281R+NS9568jFRV+Tflc9o;mS5EMQ$=IoP?@nP4NOP$_ zF7b5x5v{mimpmQAp8t7Af4%cBVf-G{sZ3iPrh)uwi~fH9Z!Hz?XSu!Q6yD*ne4=Q) zvp0FXy$pGOXsPHT^X^*aXhP<#mb2GTqT3x5j=YOj%_0D|CBIAFK;B_Of$h05Bw%T} zL$cT(50>;TS34Ag&RgoHt=?L=gQS4ODT;ZPam%7#V)M%f$1ZTv-z|1&q>ciN{6a3P z?i+c`4{oY@9lm=On>VwMW%h|4KO&Dm=-+UfhWY=RiI2F29>ZT^nIbmQR>y~L+mREb z4XJoP^{|bi@V?*rOc;&#Z=QQ4&5-xS-Y)Z4$h$R5=ZOL2%~N@Q_YpYwXgn%?w5pf@ zwBApAXob8_diX4!Jw*auUb&wnCBwk!Ua4XWUG%%LHAlC4aYze;1SD?Vjd1+QW9Ymu zUK04&DNTR8?;&;MVC3hU{xQrYjUUV%sm&F+fz8`S*h1BG{QWR?&b?`zBK&cB1a9YR{`$h>URFhBmv+H;0VnO`>B8fAL8fmIS=(5>&j@bG6-++oYiFKV2g?CTS zK|wU$Z_HCtnBe@MH~P(hy!S@oE$%XH#lOZKh%dOiu?+IIS6*bA4SBzi-Ep`#js)VB zA60n6mlK13^YW+eLSLK^4?U{RyCnqtk+`z2yYDG~ME~nR7`FLfQbT`hZ%Q3l`LXY? zZ#n454;)hBo9}jF^L}!iCAjmaA2CGd)e-x?Cd~Oi(x3g|=TprL&pT3iAx(9Zzqs^Z zA$&RUzy1IJ7ro^FtN$yU|2I(epl)I_52Xj?e_keo)`OJx=k8>Om)L`@lX5Yz2aT(p zFu%7?%gE%Jk+=}|KF})jKK{2p0VoU*{6YlBh!r(gOSc>$fxT5XmL53;AF(Ss!Rk_t zzCj8yP7Rt$2mt~Tcjeu?>MQpD7kg(OPG#5j{~gyhPaBy^QKp1aLM2OuXh5itka>>G zLs3#TMM;t-5g9V8DA`F=)GjF@iKryalp*z7yY|()kN5apUHi|y-{XG%(f7X3<2lZ+ zKKHrSxz@VY!mdGKQBfXN^I5M3p*|vU^1JKSqc!`1FcAB!(l<{DzXmXMM9vg3;ivAS`wOJ2uGTnziPJa6eeI7)s zih!CuB7@0V_;}CSlpQj+E0Pl1Gtznb7!&>fr-|XrP;<7&n=r_v4}-9sT7UNcS25t- zZtu1N#ar;j?HO2jJM^u)u>#_4-?@e>0pbl(O74zAysxAb1MU`gz}a84I%x|T@D}yE zE`xY)y&je^Z!Z<7TOE2*^ECpD%c-39QNo@<7VS2beXb)8M(J^jQ%sSaXa9ls@hGaL zG3()7NcZ87lb>PHoCKMt!eH9$p@W^9@$oLPdCe875>6SjPTKjalZpO+VNozCyo3Gm zR$-GA=?Tgia;6Fn|#6mO@1b23Tuz|F6oQ z-hKt%(|70o+iU}GGVuAFqbLROR`DJlHQh%A&rMWr-+C7T)a9qERL;Q0+g%Bf99}C9 zROxXNKdwBvm4%J>My`){-)vz$yip(4IQiB1=6zDSDgxY1Fyv301_x}SZ%=vis2!NG;UT-mAz`JcSe*neX%gS9E3-3isu09Qd zc;}S`zN6t?-F?@Qb~tfm(*w#4xNLPsE4y)S0vWt2oe{ph2|}kJ+R0Fv(J^dtn1hRp7rql>jNi0M>C1#Z}dfg zwTUlq2*by_s{NI(NTeTSpSkT4!OkYk-wWEp#S-Lo+HLN#fB&x_$CQr>K1I&UCI9vR z=-)p}|AhU&DMJnFse0{%)*v4_c?GN*BxyHc94%gKuxq#H(|xc8jV5g%&Vw_^ukjUU z-QiBpr`BHYa|ANT%~rV~DE^V6$7v<~IhYC(qLstz2O`1fqU4}9N$eq0D`wU82?ufT zg&ybfIX^~29=ithJ(L+R4`96-w1ndWiQ=^%}2_9v4lM>(FVB@{w*wT%u0q}Z@pg(a(pO}92{|DYn zWV~Dt#IPRT`g9+9@t0py5!4iXUWm2F3S(jeYD#AU{kqT%JlQB9{x zDG|Ui?``?HQS8kLoxt8FPlUyRJw5K>t0*0(VC=cNLrcx|DS6hz8}+drC%?I2n*(>4 z3j;-+hfy)2_;}YWw)0au8Ab_Mv3uI-HvH-x>y?&nWZTL1coWVu=VNcfORZ_}>n%Rm z#Po9BAP9dE9uRI9z9W29_@eL`;lsjvg@c9Ng>8h_3hN1L2+IkJ3L`?_ga(DWgzgE| z36%+D3#AF|7YY~h7P1#I6IvvsAS5BgBRC;AEZ8IXQ1GT;m0+G=hG3##w4lGBlc1%b zp`f;)ilB_3fWS|IPXaFm9t$)HR0|XeoDxXptKd7&m(G{K7s=<#=fG#dw~9}TPl->8 zkB|2U?+4yq-bcK*crWwj^JelM)-^^dj zU&5copUS_FKa}5--;RGhzdrv${yF^O{9Jrvd_#QQd{n+0LI#`_oaZ^yITJV|Iej@D zI4w9=acXfYaY}LWas1%;z|qU`h~pN=WsZD~Opb#byEy_loH?vHj5%~UR5@mH2>nkd zJFVh>{`}vcSpPR5$jQYadDlrEA}XS4-GW+4q5`Vc@&w-{&PA0;+lzeS98|5zl~yClqsllm z^(|2jRYoh6e-US+%8)x(oj40stDc*g5@k`f^8C^i;!IQ-1e#EZGf)NAdHE4#P^B;K zl1!9FmEOxbNum_0mN&<$5hYQzY;RU5Q36#^SBT+dM?a-&MwcgArd7pj!>+TIX}s8SSq zvw?`9YHo+M29Xn0bBe~^5IImKzejBaaT==RjNA2z1XRtIsB=Spp-T2ObuID}RWo~^ zUqq%*HDgcmY~%;3WUP3Tkx5iZ%TrGx6R48>xbGA)jw%VtsWD^>RnrqTOCjG;CBAKW z8S)KPV)IW|A)}}wP3)3KMo=a4xbiFV6;;A#<8zQNs1ov)sYX7dN^p@}9P$ZO0>n!d z$VXK1brts^A5g`6!F4+F9#uTvd&H1oRB^B3uSMRWic4gMBQk_4WVp!!d5bE}!rU5U z5LFyubN3@}P&Lg|9zkBCiXb8Q8hJ%mia%e(E=2}VHC6p~BhrtmAA8EKA}>)jX+3U+ z^r31(?$~;y7ggiaWUe7EQ1!hwJ6#H8hMDSSG`C-@&Hu>)#C_4MOFV^LpS6;s$QB%UO?`l zs!z9z4{1Twi$V2Hq#0GT^>*Ygs%XoT$Q@MCR&$WssG>E$NE51Py#msRD%z<%!_j~#7AmTMLV~Q zTtgM@1|j4ss%RIkAT_9>-A{p3ql)%9KXL_Cw6C9$%c!E=LyTNP746zqqzYBETP~4G zRM9R4L@H24yF(2rM-}ZgBcu#fw8vkNQdH62%0Nm`MSEHRDMl6TCU)c^T`5I&YaJ%8 zM^!}Ctv=#9RE6(498Fw{s<3rA(}QRP3{&`(^2D!*Hcz7bcV$~S!=j%a`?9|yh~B0!b*;?{Jc zKB_z?U+*TaK$XXxmL{Ses@!u%bcoAQ zbx`G$+qi(JjVj0Bvd_dNsB+LtT29nL)i!AvPU2!zZGC0Cg187(b`@8`iJGXgjamJR zxDZt~&OKqo1*qCG_ZBBn167-b7m$eRsItCM^NOfOSBh8R3)e^ys%Q@aBZa7R9oK<9%^|u{isq$i z5I3OzE*()^fE+|s+9ORaBneeVPuET&iKt5T)|NoXs5%1n9zYUMbyz?y8aaTfaSkyupiPc8k1 z#GoqPBEJ;bjjDY!zZ^t%p=$5&%W)(cReSC?97Li}6`OFr1BpacjP<7dNCc{OYs@J@ z!ci4H=4^+Ap(^UmMlU23RgvkxbdV5KMR;U3BEhH%*ZI(n1feSQ*TWUaPE>_FU%-U~ zqAK{*9w#IKRY8F~<;V_H?OdkUjQIa|{-5=GJlgwzW(;ePv{?-XZOM-_V$x5N#EV!18E^Gl{Zktz=0L;{VmIlH7f37o*o|pZp z;5%`ba1Rm*5>$;huCu^iV&6uHKEiof4D6@JCGE-8sP({JgFM%_``n7QITTj=jiWwt zaPr$f6?#@E7+#Pzd%-hffBYRJy)QQNWC=Sc?p2TWYc(-(f^_gp{|B-+`|luCG3R4s z%WT)RRloQDH!$E$o2H|92b12bVBuYp`pQlOF0t=>T_PMu+aUFu*YgA7t>&KFTnIcs znbwhC!VL*P#dgHd1>!BSWwfJw2Ng5~xUAUr7(S5x%OzBCCN|zeJ$WkcYQ%sgJ?_D+ z0~<^%vGFc5ql~JwvmV~4k4l{U7Vm8EG}j>k>O|CxOZ)Kgo@-iHI%F3}**hw>xNH<3 z?|u9SO?fs9uszU_~qq zZ?SI0wke3WO|6v>=Qa-@tlqlt7&QSH^d1$qfOw0YEbQqGpn}8Yv6=Bj5g@wvRc!u8 z>>VTxE98Y^gBXaU$Hm{vG&!&m8}CJ-ts>4ntcN%1V+l@vUU$qZw)ltuo<#Fez9aZ} z=l>EuknI>q*)6p)^h$OU=EgBPn#EFHmYLhXWqZ71Z!+iO!jm$SU4PF1uVcWQwvdA2 z-81`;5*FV3AJ5}6hImK0#eb&Zy<;dPYz*S9=ocBf!J#dzr4UvGINx`=m6EDhBS+UfHr}=buhW`?tcN%1 zV;fF>yK>2D4J9HVOul-Rehxm~t4hx}5(h&lhx#JhMB5udYtW81p@mpA z$b04<1%KH88;_rIjDxlrzJN?EY7GXC?s>R3Zs)EJ-#$9sp3%mJ`8>d7bTh|X{u-*_mpYB5l zC%+}GJb|U~25FP(9V&=8ehn&kva(U3#hc}Xe-?mNo_hQ(o%uoo3-8?O{i0-ucYV0wBO2aW6LO)h5bskh*S~M#bO$miE=@}* z3E+%~EJ%fTCr3&DYJhlG-KyNa4_>jGpdlu;sudgWrW%X2Q!!$H@$p{S)nggo?L{fupF6dS$ixHbqW07a zm-n%KgG4A}&WE^mW+m;49az0LGT=?yy+-jC=_ypl!dsEzwB|g-J1jE@y-Xt>9T%Q(A+M^_r@*~ye~g(Vp@icH_2sOy2_#>)x7GdL*z0K|K-$rtV*hNxoB?mz`63i=outDQT}VdH(rdZxW|r5JFa$AzEES^DfC zHs0roZ3ywLtcN%1BO52bm!G9cBE}?eFUczBh9f@SJ8s?FqW;sLqUn(6T@{2sIZ-P~ zO-?!C$o6q!@^K}+2C9e(RU1#y%N ztA?@&ARTKeJRpQ!gWmt_=Xpk%+t;AjGtBvD zkv85RfAaSbyM+O7+L2)tZ;S6ww6O3V{brfW35QsCrdPZ_mNO$E+cxpwPABES}< z4N`vhu<_KqJpO&9mR|@y;Oxxt8VoQw()Unr?!(@$n8T*B#H>!uI?Bgh1we ze2UZf;9dQ@dRsH#P5Vj-#k;?Ixh59gt!fu}tRUVZU2BGEc<0RM9Df8?Z(Him>=a6J z0~HT^WbZU4fCHBlre{ICKfHU^*9Yf4VCY<~Xr+XeVa}xnBX-o8{@#FXZ3TIP1&%wR7N^0xR z!z-FFe=q3NUB!teeWRA(Mf%54BBV z`bWy;v!j7mU8vx0+v7_vW|1JzyFT=29d->emhsE@iHQA;iyE@>M)a_2P+#=rSx=X+ zUJY7H_wfQJzoV*`(i|_6z|N_N`fYyrL#*+mw|P!-?iAJf=>9#G_)F{}A*%5Q3!>P5 z2B~euoR1wRi5c;GfA1jKGvH18@E9Fplfv#V!@_&wMv><(i1$H4i$gTTd(t|$aRlOR z7b|XXK*klkPaQt-JcJD9zVs0gg?P`krmU25rGn2_KT5ZVM}oDMEvcttvGKM^{V~YJ zEA}^TQTB|IXY$y14+=l>_@K*rcyFcqc!iUng7Lb1$rmDE(`7-`=i&Hx>qLy22rY4^ zaQ(0`u&rcb2AQk5sYo)O?eUI{V$MfE%B85?XMWEhw=&>O`;s2TTV=tqrC4~2)!DAg zfOww|L0V~eTh>r@1Ym=tC-Gpv?E+WOk?T~y*bzREo_~H!5aRvK@r{Td#C!J~lYw;; z5kPxXVRNlBHr^3i3k5TU#K01I+=Z#vpE#tk@#Z%U8Vp&%dU)@m`{2gOkD8srkuL{7 zZ$UiuWm9FI_CWb;p$bDk0u7F*b&~Al`kl%|!|jZx71(35zwZK;3BhoJ2!1XmwBy z{0SQ*AySh=tQ!@WtRAXyfzMlHWOQqd+x!D>ZA+uV>F{tOJ+5)p;}yCyu<;I(5R7(S z&4PH-eeA%=&&)RCm5dt+DDXW$qLz-2cYC+CtG`GHWljG`zu)O5+y;r@WV!kIarXbb zg&@VG5A(2Z$NyY!Y0H2&?XD9PZ<`7&9W1HU~{|&<| zxv*-G8PB%CSEOPCMAEpeVRSkIUGqJ1otGU4uk-XM!nN)~iA4 zbRQx(`8Dk24|)(r0uOt(&F_BCWq|(mVEue&-@5OWT{y+u%C6d85x@W6Et*rgyEL5b zYmmZ7Hd8)&7in@0|M@_AI|JUd>&sBQ4~owvV&OfK=jHbk;@xC5v^o;veXQlev4s%t z(ib+Tkc}?jO)-D1MLRs+vUFTU6XL!0lgQ)N?NktY^Xw#e83FFEA^)h_f<45h$rn7K z4vPXRJ#Kp3RFLRDHb@8Ceq!sbQ)lFhfI%bPQ=FXmLu|o=P`{t1 z;gp3_9K?^Wn($|kEm7We9eddx@7SBn`KaZ37kB#42hvUqc+>9VL-CF{{*e<4@68rT zJrZyRS@1lih=zAaTSTxO#CwU!mSLV47qCjML;F-C8Axg`QImmqPZRL;*$h{2!-dzF zJiZeF<_5;Py@DI5Sk-C%B8%0jUqpcdJuZZw%1!Raju-H(NsdxtJ-jvPKKOC+yZrdJ z_^~%4;E|pCm2GqI@ebx+?ryE%MA@qGsHBJ+AMYw#i9o&+gKUp?q!DvIj7N-add2_l z{~a0drd=?J;ytQ!ivtVqvw`W!3n1R-Bu&I=n-icfC^iY=opJ4EU&3V<0OD_qzbGez zlIlGfk`Qk_Ckavt#QWLC3(MsjBY>jF!VwQGY+SwPzJ5A6E((lf#GHL5@w6=@gCz+?rfXuMA2FyXS3}p6CX%F5bAE9>MS$#9M5k;#I|@NMKN)-<13d8}B1$=IJ0@ zVt?aE>s1~)*|=j?`+LE+$9^UD6A1yffDOho|ejXA5uaNBONgI5;`&a0=$U8ew z;vNQgyXxT2y$L(W)(gc5?2orIb3VA{Kc8NZ```XQ*6fI-{yFUbJ^rT#DbenXMr%;w z$Ql8x8pQF~_?kCtkOZrho`k^~w1_((?3deOgWU_Zx~N`v2D9=`_#1VR!R{r_;~!xS zBB^NWp4mhNikqjuh^dGKTf|$0GF7l^ioe;Fy~^vv{>J@S$jh%_j~#EJoct(@JAPgpA%XKE0Z6wZ~mqjif+A=vqW|yW^G3Qf2xl>k<(YQ zWcwO4Qp}u>c^wh1%}0OFAl(`8rd@)L;=M{?CO;P5VN1o7;~?I5iL3O&A>OSo$XBD_ zCw7-~j#rvKat7(z&OYaQ$zWNFuPqhgeZQbtm$C&uvCA2BQ~zuvFfKg#OjZ;d*LPpT zUR7I&{f#R!Ypy-K1v|d~WlgbIJnP~8iSDBhC%^jlMS3%qi-OgM52?&JgpYTg_2`TZ z)-e>4c<7|CEE6-x(`u!;zqYVF-h^BxeY{t56aO=VbYsAqcB?;%w`Au4FBaZg+y$&p zLcGZ&pKKc51&)@G)hBAD-weHo)5KDGZb~oJVsG{KS{}b*$TX>z^#r}A=GUub!Y&zc+-`~~S^?&gG z{Y(XlcaKyB4;J42TlZvFLcE7oF5;zaP9!xh^&NtEx9EO-rNrj~xFiy0BcI72{`ka_ z6o@xjdc&oftyB;{EatGlJmF&0f{p8(b&^@R9%4Y79!HunQ?lwdcKpJpHVFF`A|9t&Te7vo>+^U)y!96plIA;5L3%=(x`S&ZaJD~?_2VUW{~ukQcVy_DC~&36J&GyV zC^`=tZ&Qww$t&it9^QNDKGxvmch2#b5ZP1|D84i;j(miV_q>AW(rYVYD94SwW+>fh z!kv2)45iA8t-i27-bzgRST(WpBs|{o-~E4R_r=0LVgK*@KQ%~+_VN^3gIv4yM6qg6 zPDRwJ5s_j80nY615IDpRJv_E9ahA)qc~c zk3yXM@)LQZ)ICX{@A~7OP7(YXG;%Qh#!7udij8`P*w^z+tU*>E$uQ~hXa5;w6LUW9 zt$X`!>Dk{ytPca;w5QZiyi;$9kg)K+$D#6+9}cl4_Du$%5buC(wF@&K-jX-_)Me#e zK;HA+V`{s|K*s3hq&CDmVAI)M_8X~SY*Ie+<=RMabHBIT&@=2I);R0n+8dRkpn)ED zbnD)i$b0N~Vv>X@U=MQM zv_Yj17TybPX;>_Wc;6d5z(?Dh_}SOd`xD~r^TJ!m<$*KU7VU73TuKH{tpz0&A>K!} zC116Jc)!`Wa(abqB(Su2mu{1fjjQtI6Y_@|M1d7OE-*>wlT$Btym}T7$&bK#4U#I| zhXzi5Csk&@C2EQSud#3rr>*#Sf4y~B<5f!(#l?cK_L1A>_a_dnqe7s}w)ixwQh@uR-PQR0O zwh6cYk9AnC&_H>^{{4Rvb3Qir9=NEV_TThzF6up_eTQQ)Awqh4y-{7@BehD zgbh-~i095nDv{vYv5Jkdcd&;{qofY!1D>LP;|gT!-Zx#rjt?65JSSc%&vO00G2KTn zPJVV{H|&>;h=Ad1#XB#Ni3b1Qzbl4+=%oSHue@gjj+HBNmGa>)u@esJ5tgoTW&auE z=yIlfoK3yAs{YRb=>P`2X%Diac-y&fNMhk_Xz-XX9pb$}%GoR!;+?{+0JtIE-FnBa znn<_;Z9@;+H-cmkWc@97ImDZXEdRh6;;q;bE#p9l1gGzBPKY>(jcaK5^j~?QqJQK1 zO2{#_7qH{kJ`wVsyvBNXhtYkk!^ux_U3z4PJ_$IVn_SYJg^zd4m(%J+t%j7Mw$sl! z4Dg58k${ktw{j2I9&h&(!A$vRB}A*M9{#<&wSxg~0pg_!6z{!H+oxmUU0+{cTMY3Y z&bFzb;jPuz{_8B9L2fEfd>--A1##3}#yG_FM|_-qk*s8V>QEYuYwGFcbl{ zAF1iI-iwVZhYjB2Y-e0zcD8*zq%ZGqecLSr2d2 z$4s33YFc%i-`kM@VUA|>_ilW=2f7!y1_f-Td`$GKCL{Q(w}hpcDss2}58VH^k~tq= z1OtTY3x8K{KL)&cFSt%e@h6TWnk}eHJ+`TqX+U(c^yH z^GW~kkIRW3nzjfJequemtLQ#jaq<)AiP4>-EefU?if`XFg^%~d(e&XKHQ zg;j&XgEflOEeVVQ_MFD?oZ2D3nehoS{Lq>Go%3w-BZC=lLCe|Pc4;$W|OtWYE8btWO zq>r*WPiSY5Al@Mic#F+HU4`Nun>INU3vWBad0KNJ-a-@id}w%!X1i^g3-R9W{OpBc zu^X7Lm3WdekpR~0P2FY-@kYWFVj|3`;38+|(&hKz^OmhEY7d2A<64j{RogEs3exFu zL$Z4)!+zND4}LA(@WzYv@GhkLz{@Y+HKH$SGYQmPS-bn%Jbb)GxipoCQSOwZ9b+rj zJ;&cc(vwt|;sJeZk2hJ7IUk6G-)H2{^%lVlc#|e}$)k854!Ju63-9}%bw-y$yiY$+ zY@y-pKIhs41mfNMVsZUhOE*xPeY^1Kw*(O6-DyYRuG*J*gNfH$Vh@x$t?GEi_IMK#nDZfkob-)9_q#y~V!&JEaphMO zZzY$LGFW(@)NDFy0r7sJpsGsSoCrv$4{L|3x68-opCJsof|4BT2Wh4rE>2VW%0iIDF*ztDj+$An0vmV~4 z4_lo4E-lcZw)BbsyD0DMW#;&Ji>cVonI&&YIdH(LoX@WjbJB*+iIa=g%xEI5X8ZmB zx{J*Dc!I2XsgwL0@0|>I3!jb8LGiwku|paQZwjaRRu71`C7}sz3^n35^-jB2^5btv{=KRQQhyZJw&&_H4M>RfH*i%)%RTP-g z*1YF_kovR>#;`Uk|sQR+dee>%n2Xwvdgk_zmhB|3S5a? zR;^6D-V)wn;&i8t{rCSzpEBp;a$f`O^_Ktof3(1{@K4wvMKRPM87tmov<7MPC@Nsp zAk#-HH=YqLHnDvnu@Sw-(UAt-_X^I`M5uNm8-6GbjLHFrC zG;#9#&J)}paEk<BY}akWlDBM_;~lHf2?Tbh@@<^x!So&mx<3? zG}aGO@3Q~>e*`9d>^wGS((=y^QUn9uk{|b-Lh(MBUI*{GAQ1ev2N3w+Pv`AHZjQcQ z{yy-}G0A&c?n1n;b(N0L@Rl_g;4^`ER}}GF(0}d@Lf5xU4;Cc@YWU^@S0Ubr&2;Ka zQz|$+Fx1BfB0+gT<(lU2*wy%$pb9beGYM4E<085B7AL1-$5%^v#<#CzJ-pNDKCa^A zx9Z81+(L6vuv52Ml;b`=-XHseIb}S8DV?Vyh60&*z2(l4jwz$L<80smi>ET@4kV}N()*BLc9~cglU*UyhnY+C^^U6fmmtx z;V3>bcpkWukOT3iJeen7u$BrklH>{-=SPCp=)pIq{&AkaF65=had_PW8dqGn=4M$k zHr}}<8B>?dSPyRs-A5iyex=f4ANUWFz>7lvWrw@)@qQSv_0_0*FlFWu=MQ%)m^hpm zeqi$Xqi<}FcWfwgK8#;od}IqRNP~0lFb2G*Cv28N@y>f?HyaCY?kO?(ZxHYOa>P;^ z-Z^bqj;kTwms&cHS{b+l1zTe0CjuD+9$Rxi3F7T~dZ1TxJrxkzCvM%;iv;F7;>#L7 zVB;#;;nis%Ec!PNnA!2?oWYJy5?rn=zK!+pmZJMOh?Ad;HGfxa2ML(y*EuSD#K)U7 zZHw~;!(fUY*k!M7jE{Gc)O&K6p9S0F9XFRb9~(EHiy4Xk@BBYr562S!K7MN=fuRP; z8Mo`BHApH*LKUk9xrMoTErd0QpXwjv4{OlFT;+E!;2NY~#M<$Jw;o_%IPiF;HyK>& z^>?tB{7C6`7g*t}5APsNSvROA9R;}F?jxS>!fudcuPfh8kr4&F^tgPT2kwGn*fmJ? zqQO#0f7Yu(GwD9maPrd}-BNuVeh|LLXjPP(0DcWRl~Yv%n(ZmGnuZc(!trZRm#=7o z;F?CZuR+6^%=tLl@VRT?&jV>O40z9$sB=T{cC~t=f`#{sG)YZkh<6>250!?u`Heu| zG1?AN*X;Xi?s@@yyL7I8v zi6gyoq9B$Yr`L7jdU%`BeE^*N>bk~HZ=4hboj;yw?U{v-cbVdv zo32moDIbpqwpI2w;qD+2#6R^;$lqssya}RA`sk<%X#R7&Wj6!fvahLYQM`EvE0nSD zHhy3{uodF1xJqW;4v6>E){WOh;SBQY#KqD51symAdDXO(frMe1^;;7;-J^grzWwihqoHtM>0-+ zM|7qIR4x+*LlZ}`^YrlXHeN;uT~{AK(cSPxRbvzW@|H@FS!#cd5!-K&Chla;N8+zD z^0}{nUvIIC0q>c;&o82QrzqzuVc~so9nUU*h_?{mk5C%ki5id77eKs)ZkvUijqv~< z#<}ly&n1IGznzNs9=1q^jq<1k>JGLt#zL$ z*prP#P7cyu&q&}jJ#Mq*uCQ81?0CL)Wz&vpupZv14?&##)a@#H&%n)z?Y?crqn`M9 z_l%9U+_l?HS*ci)Cd`9BIZ-jc+dA*iYqrN*U?p=tYC|e=p6&au|Hm3WSn8j{{-4ND zgOv2z-k>#T{x5-rST*Q?h1|IYp<;s{vQ_!MaEN`@TKH}){KU>mq+?d@Voy+b*+u+r zH+(@_&Z|EH)}UYGWpkwTs9>l!PSfy3B;c$6Wk0I~d&n$Zdftxr6$uE?7^MwQg=yCkZHhT*fVGprwhx%p3*0LVnsE@}u`Ed)r9os)0Ua`C3M&8x4 z_;|OtsNC6h%7gOm`t&6gx%fjY!F|2nH`o6I*IT|`$CQuD7jy_#7ic?3iJT00&+V|* zK=D4hF<%`E?{d=^pN|ml9lE=mX?P#yjp&ep%Uklw7jHYw^#oEc9S>C%lEJFf&79s4 zZ(iN{`z9->VEKZTpRH>m0ddUuXml(#-fpUC@vjJ?fSVq7qjKHZ_2t-jU%30~W&9S_ z!`qeaBOfO}y-OPjXSa)jTJq~h$TfVtcT}#E6!@u2(bhz2ozFL7Hk#-tuvYBMr!N^T zY+t?QLQXT~!yr()dPm}Kyg3-~o>MgTcXHxWx=RfU??ZjRP7q;(6O^LfH<8cV){BTW*N=nfi)Zn_45mp@MVXt?--x`s@GS zKcgIUC!I;6AekQL;_i1Nr4bwNh6e_6h3>3}cO>0MBTjy)$i8#o@G@r7iAjf!W_-M> z^cN-kT(Oj*_^xrlR)LAvTduw@RF!RJ`v!@Cd|=MU(Xe{O-`86tPGi7ZevjG;w0d`r zn9s+;+beH#hYZBqG-RtZZFAz9L|O73h_`=v#n%*0Pk_AKx$ICB8N{^SH1LFYKl8HE zO@Vmd*`RlT%P0!WkFcm|9->>UBG_v5wiTZRO z<2d=PoqSS6^%n)A^Gqy0Dm*PpWh6nh2Z-j95EIC@+PWpAZ#8Y>&& zFu?P1U*yUjsnubW!s-+4_RE>5K_84?Da8e{e+_!ToR8W(FRF9S?-?X71Kz5?dTdd= zjV0Q&u<*W|^z@xS#M`zddX*2vd(DNHA2lG}Bl`!sOdolG*RqLZccDZ;d9>625yV^L zMcaD=Z7RrlC>boMyaOLfXVUO)zocdno7x61V#MHKI=dXbB;@D|LAjm>~~ zcSPoYqT#(PszY!DUXXSxKKhrJxF@)HxI(d-D-lF+&s8`B@!sSfGV9z@DtO|audZ=8BK^gaP->`n*6&!kk_s#0UTWzw-erP6)NSvHkIuy2Z@-h+V$eZQ8Ei)tid} zZ)M*Z$5Fh?9rQG@@ZQ<}d8ioT-Q!cRp0@XPjnfs-p0}tqj#g`2<_RoJ)MVm5kwKcZ znbskQw}8S;p1aGaAT&H<`%m5|@Ga|j`>KB&Z_$V^b)42s0%P>JfRmr|67OK+oxP2# zWpar;%gwz}A2~Sr-AOz5k}M<&c3ax_bOht$9jqKuRGSk>`Dyr}=SDsL-W%c0L{s9^ z_w2vCwTd|(PQ!J5DS zv4Q*8S$!{9gCcS$gHdn>8TV{U{9+Cd@GbSyvolhOV5&MZWUbUkikv}3X@Uk7kOO6A z^CpLbojqcc$D*-kgoiaGeAnI(0b%qwY6#DhA2QhSviIdv52&)<5R3Z2%g^1SbM&hi z3CQ0#JipeA!vK$&=EeKpE2lY8th=_h-CK`8gH(7}lo+WqNGIK;c3w9MX7-UEyXev+w{ zOa#s4j=NVvyu)mkHq2N+1(z$+zn}082dlf=8((b3#&yjt_q;Ny2r#9`9pB#^`&t+~ zUi1Cc19x>;4{y{5UVcB-+m>;_8>DC3u3aLq9Ut$M^A{?Rvrd#g(Qkv(GnlwyN20Q> zqh=G^<4sUy(uc|C?W%uvkOUdGg>Ks*XBr~ z4+-R+FdGxg!^hijxl%}oU?Ao2(IdgZQTUUSn>YH^2ut+YzW?9cz?_e&dk4LWkNn1) zp8;=mSAl#KZ!Sq~9W1<&dh>E4i1+NHBgbfX-#>TfpfSWdIBL&@;A{`jsW~o$h$n(a z71ww3LA*%@?}#~zsNlZ!qr)!m!@ne-9!_QSmY?*AjO#s6UcFV0Ydbmum3qWynwiVYW54O*P(v>+Mw|9*$BANGJX z$ZyfFD=%RUS{-#a>tdZd;9H@h*1($xRuh(u#laesXuk}m!# z@w`6G0FRxJ=<<<*{*4s9@D;9!-|=UV1p9Z>vNkxf{|u5zAE#=%pAn*e53ynlcxz8- zH==l}olqiT;a#-jyHPg8+imBLS2Vnx&QJ@ULcEtW@3`04LJ=_# z?`&dC!TkADP~LRvjo6QHu-_tw#Qy^uSCY8a;L`vRK&Hoir-e5hv zQ6G5u*&pq++dnD-UY6eITiAts{^%@xC_R;@$}Ho~#PafA_#0 zNHGq+g_#9LQlcPb6< z8|~%i^C8}?(N5v#;H5*E!fP7*VS^Mg|8c(u#QRGU$5g%=yx!tUHP7DqaB!?|BFzdgFGPA|R6U&-z3keR~ z$w?syv|D({kJ4PVuO#*re*a%ruhn|?=nA&)|7))^=i|2Msx~9?@9HhWfcN5U8A>SL zX~>~zSa`Qu6wc^{c=za;4$<(gy{BzL+k3l5&G_K)#vPa^pLTMQP6Rq0^Afi}yk}HA zFDzH5f>z43o&(L{0O^VKm{Es~>-T+I54Bf_06uzL{5j8*OIq0R4|DVutIT3OyuZQ=;NO5Om$d;f{S#<-Czw;x@#Sp z4zJjm*rM@u3+(^fN`=H_rpVw&-Iuc`U=2dvS*}Q&M+G-O^mp9Si2x3f`oo6i*!};V z3h8eLM}&bRJI_LAIx%pj#gCniH*&SJSC7WE;HlV7u@UH8LHBA~pg=`{B|{28QP z*vr+qMHUnl%j8*K+nH#P>?hMr<=OuYQi2t8K4z?S00MtbkV-M&t@pA{5*=b6O-$#< z!uv^~`zZs6x4MF>sXN3wVx8Xg%@FTSs}qMsue$@=kr)yFU+{_DO54J8i1*$p(ZCvr zx73O&ob!kgV2q!KvPTjd@4;tUH46kpzyv)mbKT{_GHL7~cIfl+bOd3&1_|}?1}DF` zJ@YosKLMBXn#TuM7~)EsS?;49I$4nvKW*3bVKJAJC)$ii1;tyh1 zZ__OQ2UAN#z*Tx&vYe=QfG0NIkt=wj6D(N|Z`4OPPJTMs4LUyOMSw$rO7@;ae7sG% zd8*oMwotsEb>|HBF>ydzztCUH$dc{*e*$36M`3SS*!-;D)q6Sv-b<~gR8hP|@9*cv z!u#v{KX4?-O|-l3 zaGQB&NiYdamv|Kay#OC?byX3WeGfKLQXSVQ6wSxKz4g36fibvl$@bMdT#z{*1%PzX z-8b#O_y1Uvlj+^^f=Wyy0b#QW7nX&e${URty!=CFQofu#L4g4jOEKV=8!-{4M}}r9>L(> ze`y55;p4Al@{N5dyfr14H@?FE#Ex)=*X)E_INR4C!dd2g%nYPeR0|p@8S<*2LG`wrZ7I=Swc-yr-am_OH06~#%vc7PLy_qDju>j(I z;2pnMxC#{*?>en4b2}1P)T>7P7ZC~rI^Kt+i@4{ob{)29; zhxZe@j|({Y&A7T>CeT|H?0su`DCj;u-aZZ!a$RJ5O61+Tb!&Is!~8v>|CuP}jTgJd zu>S|r8*`cS;aha?b>@NJUy#mZzf)t{z6cFgtwfhX5o5knF|r&UPxd5HI+4^ydkAl^Rik9p#TNODA;%!l8E+Ph3Z@0SZJt#_v z0P>AtbM60eT_tgm?V{3rVK9dtm;F%pgpe6F-bx!!n{GJCdU$iveaywlPwAeB{a8N< zaO^KGwSJ3__u#hRZ_Df&r60q)RO`f4|<6D8qm^ zSm))3;;nT%S`Z8G^DfqzG7#^doYDm}ylv&Rg>TdFe(G-&MR5mv7v86OO_IUNX7Zy` z5bvtNzJbjUZ?}+G-zNtmz|zZ|`bN3f)mz6zXu3d~Fjz*9Lv)H-_x$7Qt-ylGIH?BK z!yEPCkCPwYXp!ZZJPACJ7%R$VPo5r7^u!oWtX2JLWyuZETeis4mi^?Za z)v+6-MJu{@#hM%;L5k@s&cgq+#F1{J>^X39ssZ)|%>%I_KE90t5i z+Ftzr#Ey2nrDcFe5({s|Ej{_k5btC?VLKY$LYnKZ+d;hD_W4iE%kTjFm!hh7!_QlG zJm0@z7Q~xcc~$$392FF(4MphPf-^|q*rCmVjd$^f(wK@5LSQaE?$m;;lfM5r|L-`w zGULk!*26oW?!yizznonj!OdADaBWDb!;lAm2Kk1w_pxALH09HQ`1zZAnfS!c|H`UY z{Jw0DH$j(49}g_w(ho?>GvK`@SNiY%|9hp5=~#H{>BWPy5bsD(dX|RwGSz4fe~5RE z;MO zFAQwxaqlwr=!+#{SMO~Gr#!UzSZ@Ytiu%CGPuTLNN{Isr+z;4x{H_i@-jjCkQm3-R zDE3R=7Q8mV@BayAFC=rc{|`KnuE3m+9h1BGi$DCX-f|3h8;7R8MJFddz30WT@Ltb< zd3PDa+W{dB((qm+X5X?G;+=NXvWzp)12iq(y)TMC5o~YT?%4l95NM387f2OC^BtPLP|1I#>|qbjL9sdq>>_~hzu!1h&qap9F>ZQ zlA)wBlq8DZKA!uu&RW0s{oLoj?>V3KeE#vgTi05j>(Z-h?`z-FRc`S8kJW;{DK_uN zn-xyn*x-*JxyUB}D5wc@b8@TDc>IB|8O>k+-yTR=9d|wB1jqjQyoE3s@9mlr3nbqB z4-WI9@y{d3S@8Q?+U4)F7@&OeXNJ6Pzn=Q~~MZETjY;XW|NTE)3WasF zok=5ZPB`G;%Se}p;}B)jVRmMSh5z~A|54j-0M7rCWIf1untp`TgK}?5uR-fU*OT__ zlY%{ny&QMT5%wVQH{us#;5|rDE?i4LSGWOIo;enchD6}@lGC&t4oLK6l4&vg?O;WX zq0NQd5I~n@-u&w)`Wa;H@r$CH**O2kb+vjs=gc{yE+rL~I|5<_sBb{3M(QZR$giU; zY;V#m7f7gaS#H}sk6I^*&%JS-Mo)r0e){74)qqdfJ!p^A;WH*LjcI;B+AtqTQ5|<| zs%lPWFYX{E$awE==5i(R{@Fb*gvQ(GnUjm=KuVAe!lIytm1UJft%VLUw1m}yo=Z9rdEg^#>?(6^8Qpw!41-n_X;MRrTy#wxK_&QU}zaLRmxfH-s{PD8`*C& zCGlq8e10VwZ~08&a9hY*Xs=`pk+-GEy`DM9Tce=(tIG{H(DF6;ko>nq(4YM$ECTZW zbj;BC(aLs^&QQooFAxf3U9S4aI-~Qhsa*9VF@+PzA#rMa>!Nl3<@T0z^+*w&v((4C z5~(8h-jMhHjq*>3yvGY{_Nl=6U&jAi zS>-i15Ss0^@h7}FQKv_!!5;F~XW+khQ>YzyvZb8KTpJ4XHafIMdZF{?EPN=R*~kfY zAaSGpGycZ=(YyD4(2&2sh5C52B6V0{%HfHwX)ldh1t<&3pC;R~da`Qa1Cw|cW^Zy4at7Ce*pJV4AgipOir#~Q8@9>h(NSLy z`ij)ykCESs&GuCX2f2WU`{uKQPyb-{l<0~l1*s?0@uT0`{-}SzUSe@;SX+X+Y5yK1 z+-Az^5ZSVM`st;`9i$8yZ?pQEVG{2Gvmat;yd~ReJx3t#8jb86B5xZO10e>ugA5<) z+WBbG4P4Z_pf!Ij5%{YWwe>;X$>DeJ^+Mk882Rkb!0nWd1 z8rOC4o&R!yl%>pt;m`)^>L{GA&nb^z+(Al{@ix8a)I{Qa`{iR%G~P{t`?+Tz zZ)J}+14Q1=^F{~dA#b-X;XQ}D+`yZG@SGpTi9oG-A+rPW9*EG2JhdD?-V(Ut(9X(G zV7)?G!xNU9kZc6-lRJ6F!HM{-S(<^oD0+& zxiefdyURLae=&NcK0T&h94(BWi{kfRFw!^y;o>A zL*CaVU7K}Rz#F8$sAt`L918fGqK{jwLFawIsotUN80X(OfyjLq7_-rNUoPI)DSCqX zcsn6=WMJgSUC6m~PLmtlI>0Vm6M)TIZuD%dbf7&xR{-yMd_DGnBv2(NtauA2)N( zjqf|Tz|oM~Q%0%3F?-4{8O~bgZZG`ysJtKD-4x9KLOPA@F%C38AmLajt7G)C2Tx4V z;u5P!#@nW>DwxE(-R!d@8gI@Ibv~Jpw`6bfej;zqLDLUBkoPZHML)qVcMyBVOM*2# z5iI3&ujGfk!(RjsDs#63i+TP8mvZ=s-La8y11WUglT4!9*kalL#$9ONG8T+S=l#Ab z@5!Bf>f`+bsiO}gze>yLpjaMm(3LBg%G-*~n|^I){K67nywI%Gp#=f#`9C~Sw9+cE zo91~p`BGNLY<~8=a}kU4zXBO=>tniq?;zFTtdv0G-SMzrqzLlfn_Y65$h*GOsA~?M z-hLBq&i!=V9lV{`omw1~2;L2_q%cC>=QC}V+w-)82Kl+qr70mGPLd(6Y99Ue7QO-L z?e4eO|Hj!k6p4wHqx0^ITyFR1IrZ@tK~6Whu=1Z&D-db{JYq1 zhwu|x2A#1KyuB6YWnLtp`G4U1f8LbUk@;v#3G=zd?k!Ko+sf%}5UG0;^b*CRO99@y6LG#!DIVr5euKASHlgvfl za%8+M*EatB_SWoM%k^lygNrpLA4A?hd(MjyPjBC8<|Woc-uW9pr?akd2exCQ@;&Dg z!P}&}W}}ezG6{PRet2=B7vGjyVIB(Da<8%K9Jo!NIQ`uxvQ zJj;*op}zT_2dRS|Bfs zhdpR*;*{)5I3OK(wq*H5Zx7&=dHbMfY9jFJdy`fKcaWhcxrCFM+kuB?3GQM{C|KIG zy@iDp{fK=oe*0KbZr!Z?@oBNt0^xxs1pBluB#B6_uVhP13qm5_)l^|x5g-#|6iWlwl?nj z6Po9}qJXkG+S&$7PRA_H|C`8o+Xvp7B=H_@E09Iw9e@4+i#_DMcFNb0$a{-wcvcAH zU7X!{>g84s(7h_;_P&Tj@SybP+ar*-m-^3Jj7!_Ws`H+`V%tN3@b|?2Ef3InrxAp| z>78N+B1qg=p}T`UJvwhyU$I>IJJiSf98!l8Mt-|CYrM^a^FNOJ$h=htHgBz@Uk=-t>^ z1UMiKglawA*^bVe$C2fH#zS^6h{P3sZOAbHm(9sNukO*|57ftdIZ{UzMt)zjYEG{? z!vz*X{8Y!-v5&VLx=IEbltb}ZJarxA6WH_rSzG4j+@2bmACTBqQdUQ?i%)<}+T#4L zM87{fJpQS^y978+SEhCj?~Bd zE>g!MjQo0UTnUIvh1cFzN?q_##O8fQQYK-aTqwThG4JctGzzZ&_oPc*I`x$1dE=5O ztRt&sK>EMy|7d%E>iTmy|7(!-Ah(t$O{68Z@;z=dS`QNZCA4*xtwcLzuA*)qTw+1c zlhZkHiIwu5m(^GE00nbmS1vqG1cBFedl*-Z;|p)8b;Z!ZH%Nt+R0o|40e5u1wS_97 zFR{7oS1+qfuz_kME}N^*Y}Y>Y9`wTS>r!6nm3Zp<<>GMpNF7-Dc~pi}B){hZYGxDq z!^X3ygCnWF4Uq>WWZ7--4hrR58CNOTK{m+NHf%aT^8*r&!a5G!@)W6q&mckG>SVlK zuT80tcsrkZu8hX}%jYKxEO3df3>Taw@^&-YzONGUuDIxDFJtHd<_qv_3=a~)iKk{u z|G*_S!%Q?-h`t?6h4~*};}rtr8f-QuFrf1m4p-Fh;#dk4k+`usYqRiO=)Auk7aVuh zqdwlENF7-Dok`oQS-6H91m3vbP8W^M`}n22`C|A5X-;*qK$RTq9i)>->he4H+G(Em zs5@nKoK4H<2}oY#twzS%CG12iiT5+V5+yX=>-XGQ;D@|Fc%`ZmPj8>gnr?amdEd+G zytHYb2Pmw2{ge~lLAo!ae%~nMy;E}Zt@V<2U~iH+lwlSE#5RR8HUG;FvQJ&ZvtDK? zSc}B9o|r$f(*T{fy83&e250Ky-H+6vhLK`93oO}?^ zH#!mgV+{p6$gUyV8qJq9&l^W+9kDNZh+mL~-Fpie?*qC$;UwNqPK0elQASt1U3 z&s?cJOys@XronLt@-`X{TV3ww0hqRKyRfGy5lrNHj=YAvn|enSV;R~(k8$t5!tWs< zr10k^#YFV(&2*sWhlI&e5QfCmY|DVl?Dj9EQ zmg^}b-e-1cDx&fJ9bETV8S>V5KX#kQn;}<~V;u6n@>p$q`%$>}zIbN4@cBf*@1f?< z1bIK-dyt`pu^r_8!RNod6$<7DXFHVD(XYKdATWMvU&Rh^L;u9RW7~87#9H*z+o7|8 z{6+@UH~&9E>UfWlU(=IFc@_9_;<+nPSw)+$PjBmfpN!0g*WL=+&oSlLV)MS9BdPO5 zWh>2hZ{8b})xmkRD9P{Gf6xDuW;Lq*376QdWIgC$$E)P_!w_7WN>GMn%1Aum_!y$lrG$&mF8PG8a`6P68YIc=RRV{4cq1#GYw^0PdX< z6!{5Xv70MXh0FHgY4jy_#O5%8Ge(f==Kmz54y^nf zw}zsveA?EedM{#RD|?rtq$itp0kSN_fX1T#L+rLESP;Wf?oAYXUN>ZmVQ zrF#*(c!5-#jJJ3CPz-5_U0@}sq48!HNj826d20yVe@W!cv1CFt7xGR}O9AG1chIu? z3$q|s5)j9;H3>uBh98;DFGJpZ5^q+2U=9W0d@d)J!cXy{{nPgx{GbwO&juoqxa!)e zrj?=Sye*cg7N=gNKHdkBIe zXV7^w(8t9zN3nq&NSuJDgq*k^I`489oXF>g)W@3{siOiTKZA#E!wDtaU_xSzs&yMS z@4dCn9?x?%@#7s8Dfhgwzur2(yiMuC3oDu*kn{y9tAm$w$GM=m#qO;|#@kcrc{+)= zp__{;8t(_^PCV{|yt8H^^@zM9ZGLfOLEhUQubObD^8gcb+3%l!N(Ae+wwG~1-sXHx z5>=3Qd!FrZ+w&0cyJFbkU@$swvp}|rLxpSrSNTtzotfnGUT<{XOjDe;PM@fcw-r(c zR(_l%$Md8PmAVe@9#Rv>oZi6(xAsc!eu1_~ZdOd9)6XGi<^O%ZVK{onil(YF6o^yhH?*CXpe0T1UFzaT}N{{;=~n9zC< z|C2(TFYG~SI&u*z%xKQIf!AP6Aj3HcEL4XC1i~J~|Mdgi;4cEu z{7eW5vWD;fXZT?&uoAro1w2*X>3ob8Fd}h0N=qbMzd4}}RE{;AIWg@5cq;nME~es- z)Zv7YU$6Y_ispCl{ePnmj2*Vkpw>yM&uRH!iOgC%yqxdGK-uRFnDMxSYag)i{U7)S zNjQadM0n32A4uCy#@qi)Z6R@qCGxJHlw(BW-SP`(brkY`d$y;N$ouRZS1a-T|LX1i zdn1>-1CA>rCc{=qK)68TiU;J)!DDtadzJw7c7LKzd=dh-CFpnPB%||QVg8{vFP9Y< zAaPa8QvdARgucWw&bGhpnxsD7q&k=|@{`{9RU|iy3ls(^$a7r6=1uQZGRD980DkY_ zi^>O_*hlPtPb^+?|)C1FV6ql$awo%dP$LZE8ZJlg2ww;$)AnM zkhkW1{y34h%;Zk5e8~G%8+X}B6?c$PpS?Z6CZX2r`xc3>#X5-`|Ra|Z+PKZd`7zovwLT3G4@dn@1c3#+J`8s!{g=2H~Y^n^42Be z?JIeD@dfF`?p?syNRP%l>eS@63y^nq-Tn>4(_0;g+*%yh(Lz#K`acb=K`dV_ZO1Nyq5wR_x;~tK{iq z%VZb4;En3Xe;Bb(Z*jXn9B{a3OY_|ux0kXyMA{lsiwpj{{!g0KsQM@DK|9HMP)J4N zdr}W7mfXpX)`Nm?FK<LgkxE35_plK zT3QEtkWK76nKeHMpk=nSEV(xXR976I<0(U5V$}~GD*E)81=JyN^i!+ct$EOU&=&)N z`P*XDHy~|6>KMn!j}eG<`aR+Hg#yj|E>f#-w#2w_er-Dn-csJf(kkN#^>+c&B5_!L0 z)1AK@F0r-ch01$;+<^8}L$E+(5~wIslPo3je&SwCH%$Qjc0uQvZifKvJr|RBqS1Mm zGwiGL8Ds(5kvPE{9mlKa(Rn{Id9y!Vjrw?(A$7E1n#k(cn9sgMn~%2<@z63(RiyA zy*pt5c?U4`^bvWd{5qY!1@iXW!6#Lj;s%zj%qy!4O#+{t4fAs#?{9kx6^0@25u4F1 z=MqBz{gT;1B@1-k(+RhqA7W$$Oi0{NmTrmd5A@U93qPuwYHX;F_Yb6wER6iJ6;F>p z5QU$&I1>IzwHKSWOVE{w^k{FqTE&(!-d^l0NR8_F`)jK{(>!k-QOfFY-!8rS&OfiW z&?n=4MBtk*iT7FON)|NU`Da4uEFkaQla1WO<1PP|UGBv9|8o~z=B;;H@W%B(Z~U=xZd2A{6m;(xy*D$l zBQ(!D(ucA-e02w|P5$$7q8((s1IItX|Mkzs2~UUP%xJv(*9g@-2SyjQ5t z==IpKf?6alHB?XY8zcJW#OUPuo`zED<4vk#7e;>a&2_JfuW$hlThZ?`!q~@KV*Y*{ z-K*{J>kcrrJUobfyrnFmt55&Eo93VY=iEeD9i8gi_wP9M-~3P2b3Z9LIREb<>p{n^ z<9J9t=;=wogVuv;R?1dSv6g5zWIRAeX_#XZfF0mJk614VC5Q=G4ESecphwI^J3_sy@zL z?B2V`c!#sL%aM5VS>|)1@eYYq$>oQ(pCj<;qyV z1|-g{H}L1N4d}dwS6ph0Vy8adcab_qF!JMgE4}@bKR1vX;J5r>iOt*Imj8743O9Te zD`T;0Su^Hd9cRAW6R=IuJnzWel-032dE%`PJl^{6{(sVtO~pUq{BKUygW@g(ttIuK z1y^MOv>x<>K1HG$&i^-5_aC){ODy+~p}K2M@C(uk%f2x;xq=Qa)lFbo5)gRg!m=OE z|3`nmTPyaN0P4rSH6K?A1%iig6KfUGm)K61&ua1~n1K)y_tsf+_4`@$BX;|xgLtmA${*>?*gYuH>o)s( zo+GrsgLJ2?4&Je*uY|(I9i$l*_7?&W&z^4aTp9|ThM!nH#-a1Ra`y0j z#T(4v01`L5b#DK?QFPv(+^Wk4x%sJ%_a&qbFO2*IkG}219pV9&=g&5^@nO&Z$IrE0 z@#FWxhv0v2y6cS1`@U~!W#+o~G|&5~7iD#f2@0NRJio}>l#F-GrfxqH@2xt|m!t8H zQ6oHg26>wtdND-g?R>jj_ygp<(l|Z01@d0Tp!8PzD*;pn zUHdaN5d!i`y=|Qb(07pSoJS(pw=je2NF3V^&9vD;bl!AIqbt_PQy=d(qz-zF{6>NT z3~$u%fR&!Ff6*&o^B%DuE8YZoSEz6#j5cAP-r^Kwmyd1vNb|gLVieY)@}%#=KVNUz zOU65z)pj|Fw{-e-J~ZC>${wnHkoQ4dCPCuy7U$iz7#?_W!faro=l6muXjobh7H*jY zicgtHOF`b-O=LT?#t1;>=Id9YZ$p5>#owQ6pP=*Rd{lbBahw@!MB=LJaZ`5h(RrWV zO2^$|Mt!{5kvh^a@>9%rV>>y=4Sbb)O}Y1D^A5GB={E54#K#*S-m`Tb_WZx3IsN#} zS_hhcy~RuoWpyxwG7ca8=jB8uWV|DL4iu4i=d3!yi^lu<+QampAa5nf$2*C<3F8fn z5sC%o=_YofboZ%*0twCfjh_dT7^*b&51k@ zpUsLQ7T}G_tbgd8>BL zyRP-|#0Og}|1NCZ>4emn(z zT^Xjn`M(XRBM>7$`Y+kb^?7-~#Z4LeJaE|a|5rkkY`2jw{`k0JsrCcxJ4kV2AxA># z{|`KaBtlso?(PFFN&kF7%9@OKQb6+G*IUZ!EL)AnJCE_XMIz)~ptin_$h*mHiHHN_ zJrjNV*iQK3^V+g|x$S9*AeVP(X&L0rVsO-y=>q}0_dEak(slTOG&`rH%h%C)Z+_6@ zHlNN6#E>}eS5dDsB+!@G<4Y%U$&T)QSgeL51|udO<$hV{D9OFLRlS5cZ4Q(#4lb!vLfT1sG|FK2kD$cScS&> zvwZ!>vyk^a!+8S9yx-vplH^=O92*irluI^Tz$5td0Z`d_!^G;_;Rx z8SjKy13S{@WXbQ-E75pAIjRwS1@h*Z+`Wo;ycOLI!V)2GgYPzd?-m_acT_f}(IEnXF!H_q7K zu5lOj@zzG_pu@<|w4rYGR}UW0u~kz3*%55sv3>qY7RwIdkEq}ehf(nLmV=jy38!M7 z)BFX}%q+_4a0{=$d_8WFw*?vR_}Bi6-`*xZoVdExM-YuSv%?FwV#qt#Z;25(?~+Wx zJpO9fy`RdC20`BIQV-oY1bN>){>A9`CjziNd~H0a5uVau%9#d&{2G1WEdAUU#2fuWOo`|d- z$ERdIIq~Kl0XP{q(Eo}J1y}F#Fov8*Ut+xypRHMoX9CxdxL4wyB8*?qd(f+o;pGx4 z)YpUDkvcjt@)K*U$h#!U1BO-#xf-cYVP5~&h=^@|-(!z=+OmDtmk0Y9B-}dF%I<>q zwBLgSDXe38bHdhtZjiPkY1bOet zELPmG{s4%0U!o9Q0(mD`9_5C-^9SZeOZy2xz5Ge^#m!-0kS^BhfPp*eU*j7QUKNE8 zOyC0&m#(_uqqZ^n4$^|~@PXGp>f`+yslyT@zrMFDca1-BgCRqq7hOlNc}KimJtAS^ ziVsX+!Nssq@QNMIUwt)^2WfvmVxz1M{X@fB0&g$wAor8;KDBn+Iuh??y7xuVc;9>5 zw|XDseX!sG9dZ8unzC?*84gHImR|R6o;d(kvD6=$A36>qo}S(K2kszqrSo*2z9)d| zK7J~KieX@5V(*fR+UUGjt8q@7EMo?nkhrknnBI6(bl&0LJ+ca7sE_wbq>iH)`ROMq zzNUM^1D5MuJ{f-jn|FBit(hY`_u<(Uwo2%+V}HFx`wr6$qwzO1&wKV3Wp%6*DOo5= zSv=m_N5=ak+ls~a{}TtKvddRQ(0K0`m%8B!dF$UeBTMA1sAJHs40%@v=Czs$xB#Vf zOxN`!5&>VQu)qZ5O*cuW<2?XhPW(bU)Wj$Zw9w%{4_cw~cFhalbw`I8v>|afiunT_ zJkWVxr@uQnSV4Wfosl{UF!DRy@JG&tj|Z5UyGg6x!RGy%H;M0#-9G%9A@PH!)=|*C zo10gM)4inq&B+bQ>L@%~x{>L8Jn{X1wq(3dG?uuNy7yauJ7F~5S9U)=<_~$Nd2X>I z@@AIW`D!cV{b+hd`IearSjpY|o=Yzg^uF^p_y~F94ksE9K;C-`g~C7n3I(bK20?W6 z=)Bi|4}5&tk{PHYants(uO|QH;Y6R--MgJzsE@Z8QpX{T{P^?lGOE1c0etf|>0Sfa zyn`e!YSQiY#na>8U0rh!o45OXF}UDH`wu6|eWt9AbCbdJxc}b&PhE39S~jo;9U$vL z=fe`Nl6ugOpUXF(^&me^?Q%}ogO(_+eqaWB&;{#NLW-~l@$q-qrf@g`GXb`jGmjI1 z&nnT+VQ@e?|3q{6R1X2X-pU>LOdt$|+Ad6_ZbI)ts}(z19g>+qI1)#%uH&Jw4tG0yl-1!8A#Z4Oa&bU%CgYuMd|92udw_pL5{>sg*#}EkLf)n^#uG%| z_v61OeuwkFkX~WGbD9&-ob%pQ@+$!l6eJa0AaA#tM;Y(l5P;~aTBkq!@Cj1-A&*o= zbl!oNOEV2CnLsBJCv#Rxzx&@Fv1?Fo%2S{|-o8j3!x;G$bEj8YKjsFjBM0L-%CLE# z4Zc}g{@xWY|J}{h$`|{1%hJLqfrIA?%@0WQ=9JZOl0Tn8 z1RC%8^}&(riQQXzR+xCa^=M|4{u1PU$mqkXTt#Q_`i2nSjg7}alyOsv8RX3-*>tzQ zmjJx3?O%UGJ`9X+trLsTL+Ab3ck4@z_e@{{iF~diUPR{&+UbhWdDaKOJiho72X;MDVrjuH>bBwJXy#(~b|B-OR`Fqk#Jl_Lp7m(F_dny(R)@UzEwc+D@?Kjk zZ*UuSZrdv#!P1!RRkD!x@gJEtB;mEU9qsRCm%!Uwthd$Q^m>5K zJ6_lFJ4+VR-#7uM+%4lX=-1v@Ph9&@y`1{GcQjH58%BO!>NkT6y12pEn~ld^)?)KM z;EtD4d1;S7@pOOP5rDn-_H2v4f7Pv%=6QdqpsbFcO0?PD3cN9eJ*anLH+vhL|KmHRi#2)e!QFns+``*< zQ0mF7^$zwRj-EYRhhGwaL#dumcwZ<8>r2|!xeR>=*|@%nzR`^lgd%Zc4V&^dccS;8 z{j3f2LKA#cx5Pd`>afGe&+_q}vnPJ=fT@(F7PZRQJ4msOTzRD#9(c7k=4Y(RuphBg zu?iWgx$jK#1JaNgWp(6E`Fy31TD*efPR2XSxZnec_fw@ea%jBg*<%k5K;8iyPne1G z|Bs>e-UpDkS(X&wn{v`>Z{Z8VQcF6m8tkvl^uLz(h>Bm>IJMf6zm$gHD z7=4MIez|Z{HkJ`=LE?;R!fr&ipz|(F&}?41lnQr{NF7BO`CUGF&fh_f2Qbj}+po~Y z=KYS2<E@t}F$k*$=~Q7T-P8kD`bgLEU~oheof|JOfn zkZvuyFN?t_Wo!?{Utuhh>mA!6Hdva=!!UklbOAA)5e>8q-zXgS?gG zGiIN45&+N7#^RY_u56FUFT>n&W!cxT)a?;!CuGBcD$ zmX^!5gS=x7o?aNvasl% z`9J3Y_=n%F4XH97U;=lLxD_7tBg6363@!d_MCz0A0qW!Z6{!O&zo%+1o71=Q0Hx&? z;dCk3y!CYHcKR{<;j`^NYtFrGLH)gueqU#UyKXe}sndM-etn#>I&RJCXWxuF```Wl zBmmU>6VCrWWIgDbzg`Qe2i2Y9*o@YL60GBOuE8bNAR_}uod1P;p5}4GcaVq;g|oEr z+5(}i8%uKJwZ~dD!wg^_ z631q^-u3Kx^d01Jy;qDJhpBJ=KZewih>@SC#f?ufw|GGHj7;j&>Tj4mJ;{1P*jQ7>8@qb^CW@Ff`jK(|t z=Ev$1$lHl)oeYt8?)>#<43PH$`|{R=Zd;IFS>oWZCmtMSZmAN3ysgz&WdD3d0FCFY z4K9U-f_=;GtC`rrI&b5ejyYUe?tS?rt>C8y8Ah9e!)gGJfVS4oKc) zymMH8e_ix*KmPFq4QVBlahy#-8=*<0x`@k&G=E}aS0nZD-ig%Fgpprng|cm)KM&B@FRfwy1)F#KyStmOK6b}n z-EP{=OUc(;&I;%VzO|(N`TrJ$b#y9hllkZN7EdzX*;jS@NZngJR6`MsH)p^LF#_b> zhhr!u^1gh2@4F7jd!=QH@hvYqu+;B@@GL$aa6GOx`3iY|Sy6D84_f_CY)DeP_pZWpzZ+qdz37a}! zK?Q#7`Cl_f;78OSSA1-m*6UZ4e7(hv(fXR&C)(%jLRlRw;yW95UH|X;KQ)j2e{+NL ze*jqzx)CPhP3%D{;UjiyEbVY;J?OGD_ZMH-gE*M%6!yX%WG!GKLwtjDum82R+h;6+ z)}f$Z{yA~rg6yUEWVnNz7`rW3+DZTeYYZE@^}>MR+o0!pC(+L!pJc3!d-ILqZ=Bw$ z+d19c=sk#M>?q-V9QE~}$4DK^G4i`wu(|Sp3@>QoIlp0t8uk)g68H3$`R= zJE<68^B%q$8RQRnGgg0GT_Q%oD|UD`i3g}`qIuppZVKxdot{?yX9wv=#{2q|uqui7 zsiIR`(0C7hKc^H6d2ir!jU@7}uFT{Xg~wZ+k0gczyQ~3EScMk-TpVz#eUat?c^g;7 z;j`NaV9zG!k8&*GpmNt3@4zk()Kf~Hu92hSa*UuHiDQkD_?d2qeg&yxyXlM$@>NwdDOIRE>S@y=^*s3GyzsB~6E;~ius77D!xIaqJ1p zf4O_hqKom4p%wMnqNOlN=^;00poNm7o<*u2G*MUCzgJn^yqf96A-uz9z* z&@o>5@{Hzr|4yc?4m;Nar&Zwx(&66w5E<{>bJKrcZ{bO|Q3Z{6*EQLp49I(RVBjkv zZ=J9|r7L0g_H`>Azv^KFI2fHJkMhO?ZS~Ld`jEE)zxs#5b^?eCYR%7h6AH{Y2Xb`Q zp!2@^S?+#m2LsrP#Hq~EKU`UgzB!Rs8Isa)ras)b|SK1%A=IualTN!nvFCWw`|o_}5NeaUJKM zV#bdxe`_1x@RsHWq|wPfis~@Fj_(+GlTBP=gUEQ_6z9|=@!n^+juDMF^XI@NMv%9` z@~`Pc-aU^q4M!mFPOrX~=Y`F{bMMkywLEcPPc{3}2axyUsx8`Ao8cX#HfH7D`a{7X zPu-PcD(FjWK>x9xSIZgx#(6E-n8X%^zQjKKS$KZ*7WMJ=N9uTlk>97x9ODm`yx`O! zsn{E1l=BX~bKbes2m2K}MmK+^-MdBmFG&BCNm(63RuLs!iHo>0qzGyIKfS;~B5?@@H#f8vu@9eYfDytR=!a0&mO zAII#=&q-%^K>zLq?r=k`3HN8_zkSm(PR@;>i$?j4bLQS`UeddORw>#>{k6${`V zTV_k|7zbv@Okwku z;pt%Xf749!1CoF&Wp${Bd(0a}FLv)hGTw!!O#Df_g?&%aq45sUzZ>4>+@Ot}R6poA;(L zbx%+D{lAvgm+lMYQZWDf{TxbO)&i|apZ<=y{3@K$c=An%5xYW3l4m4ozAj4{R+UAq5#O`b!L; z7l|9cGc~$?1bvC+9?WUURii%M8b}>{82Rmg<6q!(MHI{%%muaCV)K?7bcicb(ZWv! z`rvMr)?@MxoKs_)I9)^YykGyKtd9D2$1%^8Mc!d#yvv4}7r)*@yn8F)`Y;()|%$t5WSd25;L)*h)e0e8C|MXc?J1&Ok}=G~C@VU-<40P=p#;lxz9 z`6y6Q_L;_A@kIS=k<^bC<*+{r5=ipV)G_loLE)OY`=ZzCF<{m#QT`K zuiFcONt!?2>XV|Z4#D(Rb=k`|h`d9{c;7l2&P?JRzV#S08t>ID2cx$@-oo4J4T-$R zS(uj*A5Pq>`NNPR-$0mUrQ4YZ?B=J>s-qdt}`K)Og?DGg8|1)OUKDiqzqck>4J%!GL{01k~n4u^<0T zIq%73QW;Zb9jLz-5^txx_}v1WBQ(!DIf=45rggg+cSq*_cm1CPfSP~C*(TGI^`Kgi z#7F8uXSy_a(0b56 zRp}|%gN|;#GoRZ?04`RiwN{)C14)g_}L#^{kn;G{XdzGjQ8DT`xaksNgR+IuX1vu@mBW9^7;;WTN~uB zC(i#F+^vDc`~M^4Ma7GyO~Am+tVrvXSRe<6CcZ-6HjlzH+29T`dUD0Lc=!bAhXi50 zU32J9kY+2Cuajk91pP>y@4=G|yu9eV72Tuc4D+aucP3JYGDdzA6OWIL>=y+lbVZ-1 zDc~(i{}1oFj46o*BkU_k!G+eD!G>>Wo_B8(Wp&((j128aCSE~G#*y)^9`<)4b#F!f zcgxUtYnO%J{|$MkJ0=(rd7I%fOF7^UQfO?`xc;9#U{+}DOdb6GdVKk>M;{??iyqB- zAIRI&>)7-#e7!|B&OpKXGdgdLZ#v0a-!gy;NSrg%``~^qbl$a5W`nDaQ6KLuNF8{L z{8%PF26!=xg05vYySBf_?%whlIwL;U&F~UR@AurQz(ZL~ zrahqV2;=qCqF9i2cD(34O?dzo~+H)op?0)$ANaVkKAZ^Qm(&gjT@a9A$ zj)DG6R+Sh!@35`+wgg#IAMedb9T6D$ZBrWm5w}GY=nYT2;rxTmyN%!buvx)gJijZU zJ7Y8U(_6i4At@ZyT6NUCPo^Zd9!ARQklgf3sWg0%cLW*lJI5}3BXw`9@hA>7-hB_x z-r$71?OM$@(o;AL_=Q{QAK8VzzjgcR_w{L>U zSy3=`bCPv4FZTQ|lltbJZq8o(VFfwc2Ye4P_ue?3bu#%8wEy;2oG^uTe0#fE0Y04g z-~IoTG>!kqF>nXTOxA-QY<(F?>OsY#+5%`jDDs>6y?by6dB`?l2XX#?x1n`MARLg6 z$fSX<)u!ORYPw!Jya%NAQm^A7;ciz%z?ec^1nYJ zbNG`V-pGZA{lYHnB^KwXyNavEkLJ%Had#-J;~c?Kdhr42WF|7+_3Xy%B;LQbF!7`D zzNb2%-voJ=zQTJFd56}&$UhEwe>i^j<)pqTd{yl7jxl(9L3TZhxh3SS@5!Dee4hZW z7#dsJ*M|bepgPrffWE};sfyd!@`eG>BXQ9c=MLJfKwn~?EV+PViKaf@yO25v82OE{ z>Mb2C5(NsJ=Pk!{v3VbLXz21^>5td7;bUdqh&}(~P90pYeV>l@2c$vD>hM>HUeO2# zblANa$#~y?eflr&jX3y#30zzbI{M<+;7=#V02h024<9f1-~0Ev@;-&U6Rqb?5_xkx zUAi>~@(y>rq%qdC7qsbGeCmY9Tbh>ZJhUM1H#aYUMmzyb%&G4_a4!@XTRE=eRYT|9 zB(J>8nu!q@B5@0+Z62$yMCUDqzhXpRM18y)kvgO?@~a9wdadt>7@*fQY}Inb<}I9C z8CA~bhu^s4-MAVjHt)bfFC2bP2+i}Z0NxbUVZ36&#|yqe8uDf!<9#ppKm)0JTU@)! zhsHbLkx*Y3cCjSK0M| z0N5v|R;<1l27-QyMuhRBU!3sCFAugf`N=)G>>Z zpUI!d6D2WXp#Guzo)z;?ueP@XNTJc9&A{f^=Mx^z4?Eku=X6$0kEj9WoiU z(fSpO-Fpcc?>gV6ViIq0dmmmj-k)x+a_fh@TQmGSiM&r)$|eyXPPF53Np=S&sjIJjwk3{@;%vbvR<=H#NI+n@NuZu*lFCeM`Z`i81wmE>4VX z_wir1?K$d9LP}^?m%5mq!5Gc+?pdI$j?3QVGSgB2UH>Qj{ZsW%xWuxP^`K^@+;CD4 zT9c%-2CWCVGYY>i+xGO`um?pSjjybLJ?NsU_EO8s=HPS73#&1B{oirs*|n!| zi8WHuy`y!90KmwLHHUda0n2;c$sgy@=l{YZWlTKR;DCh0y>XembTc1){@2dSFPPp< zeM{_hqzJ$`im<;Ege>@!H2-gLKDU)Irl z4|3-{Pf;B~rP;y97T+M9yp)XhqlHIVB;KAbe}vF@U-7ZolnHq&_O7cT^45s-pCJxN zhHX+SuPd2@m2WKcw!#7FSm!47M#%d?XJN;0$a~Gqi#zzFP#~3jm_3#geL$M)7E~j& zGJv&6T=Wr_GTTvf-cMIaHE2`e=PiCBbv(n!uW5hE>fKzTfcHv7?Zg*s-qGxdsXzPd z@x>+~9rUW$ym2COzbp4B&^&LP0EKmk1&m#Quh@azn~jWjV{^+N67PFz&8yIO^O-*n zx(0b)nn`{`K2w=Yfdy$(;7-+k)s^V)kI&YyHU$n*)7(p`PW}PZ|~)1*Zw&XFqU%Pw5|f1_xzy2?dWd-_^*A@PW$g+KOh~s z(NQHTYl8M4kdCFS4ukJ{Dv{-j^FIq2?}t8b-;uia6I~BMG~N;B5i=E#cNn+lTH^dq z;{C9~q9bUf8GO7YV*4QEeQw`39ivd-JT=l5+>XBY9?4K< z89l=Q?2x$7@b}Xa&(Jp~!dXt0^qSPidkCpR1S7v<-K7e?vm(Hz#VU7x0-Lvk0RL`V zc(-(5pwITJIlN#GdRKXLau@7DGgdEr1K<+d`8q1glGzH(O?cCtaEk@cs(v{2 z!yZ&;E*GR*3Ev>?AZ67X83L|;sA$gOL+?S`o^8%~$-V?!LgLIgmvQt#86SC= zY3renjbGqE`$NF$j>@CqW3H%w zEzQX5$Nkvul9AXOpyC9X9Xh zX;x={i0=jwNuH&mW!O8&mk#qz4dQJy&-V#0dSc`r|2(xu|K1dJnb`73x6UQ3|!UgI?NDu$2xo*?B#>R64D z-?Z2ED34BIaKlyf&-6GpZ@yMbd!JRiL2R{++rDz_9V9ONx+K${7c|csr%z!WK6~WzLSr zW5FJwXPrHe_u-El(o!JrRxK|XWy26~E`;+)NGCe)yCP+*zs@cJsYu+3XO-_fq|tdl zpC4#!(W5@zRY)DrF!IYueK>HeQWykTO4G(TMl#_BJqw4J0Oh4Tf{cjKMC^I*zOiU5=~n?LrC3x|TvhQW}&>*#xL z%}WpPo)HY-84}lH6MVR~0G;=g*%6%^($qKqt08q@D14VFTzIn>~Fnr#Goi;t?`=u$}mo{4&SmQr? z8!I&MHsWLr>sRm1jOB6p0n&e`;J^N#S$fcaod;Y&O3>Ay4lM;`v-3w(;8l_9b?&U$e{nIc%VeHty2zWZrxNb`83`c_PE`l`zxw|8cZD%5mn` zwQgFWX_YLPi)aQ(uN}f{9MONvt8!J@-A^`AT5L+sK757WAQ7ZUcP@Tl{r*3;dO1UR zC}h8Mrzb|)A3t>ZVzQxSPyMdO68P5DJR|SmjZjb}V zgd+SXC-Hed%d4rmUhPI%-w}9aqy&EjNqA^4yj`lD<#`iI7|dgx{U)`)Z*Pgx@oqcR zuova+mYuAM#rup@!gY7Z`*`G>Dk|?jvkziE z-WIexHsQ?gp^jhiCxO|(VXRJb-V1!*zu&($i2dS0DO)|eTp$j=dhh#syQ}JyG0XS= zk82sr<8wJzmQdQC>McUY`(cog9m;!Gyx&|b-eZ+6v3`*Eq0Kwnsk~*KuT}*>-j}op zCEM-b;l#N|gCf_uwfQh zLmOA-D9Qe~5u0~mrFp!JI`eIB>C^Hkz?q**^_eYNWNEPJRi?rPTYTOXy64wyF|(tj ztStF5HH^Q4l*!97=%{yK`3C6`iLpH7Yjj+`X8z$VO~;5PjOIJkS42?&rZPpzwBw>Lq7)>u<^C@=@4=P7`V@7s|I=7EPffE0eN3up=-=L z5CQfs`h9poDmL#B71wv8*|R_tZ5%S%e^!Em&0B4P|8lB5^YIR)<9YsNI{@cbw4D|muPX~AxxU)QOf+vG{%xcxw{@edc(eZv7 z{oyFe+oyu8g~fZk{C?3jPn-lFJMcYm$ zFdy%1S{{#Z=BLP>*F$!d0fM$0&m0}W=Y6Et$fw@V?!I%6m%Dr8NTbesZ#? zquSR6Z00OZUS^p9EL?!)PF7vkE`FZ1!Yx3W2t-fVrhiNc+1 zC$~x-|LrY>1WkD)ko6ZQBchDuaW(1E`6KY{t^dCNhjwdB{1f*7igY#T6<72ov<7iZ zAd9hTQ1-o5hQEmyj6H<|YDYrj2u~nHUJF!d^ixP+YUBej)Sq z|6gc%;LVTQ_uQNK5eZ;9BczbR`4P9DZ%SLQxLH;TC|Z3BIsO#C|Bsd0R_CtqmgW2Z z*m%bBNHXtypAWx*19>aZ@qW?qYY64Nx$TiY7Vk+F;$kAa#C}E=*-&{uJ-s6#6Y}nB zi%1BmafZ+LZ?E;`O9UF0>_Q5V_rSW<>Q^A|zIToD%|1qe@_;pp+Q+eZs}@|m^e&44 z&d|oi1hn#t7Gv|aj^5sV!kPJatJCtpo8QtDLqqr7l0ZVj=ANSwKJV)>yOYO97K4`; zA14cr;`jeaOV)idpIOWDD@gCxjO8J4`B~bl{6D3H{EIIs-mEfij|5R3Qd#~~Yj z$h%c_D3r>3*}Rsm@sPJv<+CmIubqL|$Ft^T!wF#ARi}d5Al-McPl|xN3ojp&dDj*J zTyEWQ(v899JaH7u9tWbM0B4H({E=JdEb_(C+`wrsMtmpyEFV zq!Fby>tXRe7dyC24DvSg7)qh?KD_h3%2vo*;Nm5V2_Y9yZ16jo{ZRrSJF~S>x3?-{ z72jGw-rI^TKO7DtgI_26_xQ}lZjfAr>RurO1TaP$r(V{0#`+sJ?_=xzcekHqKHhG$ zJn-h%-jV2hOHm4lKUmHF_%=Ro#Xb**bK0M7aa=Pw_@I-4{$IE(tkATJ^?7?UmdA}H zzOH@n0e!eQk)z}N%%tm|ueVNwtyqA?J9EOuT^90=+}m)5%G+p(LXIQky|K)xRomPJ z5S+iLPQ&;A`_rHMYC+!b6Sa#ZA@4J12Za~zBm+ZV&d_#cY~FiUM-{ymodxu0opFZjEFWz%YD;FQ#pBQb@~yFV%TK-Mcm%Ff*`2U=wD z`~O!mt1VMy`&obO{n(75JZ?rtTwcBJzy6OeP6XV!5UCtQ)QHd@fl`Zee> zV|f$|Po2Dc^3Nq!g^u@|7Rdu>gLKmC-cl^y2RA-C_y+P$Sz|__^1iXWp&}CURwO?) zPkZVFri~YQN$*bt7k79CP+xBWY@*lX;Oi~@r9H{7OUR%liSzm|A8g)g^UWUnt|5SW z+Bku`vlU~1VDsMU=kzdFocS)X8nisN;LK0f*}`&5ssyOe4&V|H9>nDxUw*l6CUhO8 zarBTncOicNU)|oecBdO)`4wd0BgXPDGr0W0@bBj>=g{$fefFXn%6s1QDMKvYxj}Qc zeT2L@bU1sdy!E~>v`B-zpX^?-TUyB(yxzXYYR!g3P;YTkR~Yi{Dy-{phrH9C9(y2B zKn52JX3vy6Ve?K;)?2Y^2LYU>jhk8HyI6e;oA-~GBJu@B%*T5_Ef2i;&3BTo(Bqc` zKF=4;3R{BDyRk}HDA#oz<-2L+{fjaT^#AFnrz36~u{>`=3WIs%Enbl0_2=`J%5=Q@ z;Vu!%+wEA?5-i>!8i~QfkoR$Cu^&|4zj;am^C!@Bc-57gVH{5E^_?k@dd z%*T5-Ef2i;nSahWG}}lLY;xc7dwU^1?>9MBPL@*^KxudH%Q6rA28ob}xNE$yW%v+PI@j z<()GBrT;HMBGwPcF(2=Bv^?vR}AIB@Y zs5OY%|LDIEwGXF6$e_a_)8oub>^n#me!5THmd=nK(8ih9wp%15W3M1V z%Z{pJo%~GK|6iizfj7S^nqe!pu}c6#k`U;vdXHOE3JZ0+E0UckQ)Tmyo|9!@1xfj0 zV;A<6^)Ino7|g?L;63dLQVlxZgEzT?P~J*)$_N&3x$#c3ddNFvwx%wX_j{pS!d=MQ ze%>L8t?74eE0?Vh9hX#Iw};iC<&;n&%a~@dFu}-@C-xV zlv|xewLxScNgf?lUx3XUk^H8){Ok-#kTz~O$th;RO>Ev?mK@S=Oqh>1k(LME{J1rD zUfHr<0^HQv(|BqHKJS$9czI5j5K6dCW_Yy?KJN#4?e0lbTqM#k(2OGTOM?l-&}9>)5=1 zY`yk2X%F-9Zl>jdH^1*)i}ydcD*=qV;zjjB@p*q&R2$QF458c#s2%k@$H2{rN?*ML zZp|#un^4GL9&a-eXrH%KrQtomhhA@9Y(OIJ6Rw}LVxI05L88xXY~E~+6^pj8 z6ToZQxX=?N=Ne_Ox3{cSCl_r!%6#|U*lBrK;>^#P^JYmyFTn->9YJtJ@U38{V3Xht z!SjOof|-JQ1-Afe8YUN z`JV7K@>TPd@g3*e&r`uu%#*{jk0+8Rl*g0DmdAugpGTEPiid}Ln)?fPA9p+V9quab zQtqSN>D?YYgkmvGPHmg5%SCUA{#z2)lUYT~-Vb)GAqE0b$4*LJQzE@v)F zE+ek_T#8>pXNZoF6!!aX#R@#d(Rdh!egZ!WqH2k<*=XEvGT39;XVY1Sc19k~l5klBFzHlA2^h0iuotuEu-VVh?A z!q&&u&US~bimjCGC|f#PG}{(7Up9L-Gqxpc^VsCr1pc@6F{|Q#zyJ3e^ZyO-vlH3i zo{*XsB?S=q(8%+M;58yI8hLnb^&#@0k-Pr0J|Z_7x&97MBXXgU%M&dQA}1O-m%9}Z ziD=}sv3iJzpphdu!b#*nBL|^yF(Nw}t?zwrMPx%GyW5EfaTXe_BWt`O641!jtaBgo z8;xv)7f_HHG+OhXFdO-WM%Gn7%8+R^vWoKmhD@Q6rQL;J$RrwBsOr@sKhbFQs810x zfktM{dB(^%8m&rM(Ta?r(aKE=HX}dK$W%iz4*8BoE5?nbkx?`rvjWpMLMj?G@G*3}{4e|<&)IYs0L|&qi+N~E}$O|-5%~d{t z^rF#Rzv&9(IU1>~`1KKahDOR$D(XlN8Ywl_@*~}7q?p5_g><2j!bZ+mq!W$gNk%ou zQ#6`Ai)Rpdf=03(m(`FCG?F$k7e;E)h!Ar4IdYR0ss3JQB!SeR(F{*F8M%Q*(;WxH zk?UwQmG_GqsYav8U0G(xH8lEZ&c}&Vq0xj$b`x?HjmBOSL?V@F^y8A^LF5V=ecye( z9jQR0(KQ~ckjrQ^B0koNTtcJa&s#c?ay0sSb<0xZA{u>3usw`iK%>uVzL+5A(P&6< z{X^s&8d3M#kuo%*Zcid-(TKX6gOs8XwfRNPpb@oKKuXYv`qUnB8jYwAIU&VpM13X% zIfX{lTj)p;8d2{!A}7&^`tBc6h(^>`rH}$NqP|&zHiAL13GLQpkL_Jyn*^frlFR>#Tv`8&kT3C~)jYf&@ zb_o!*&?upC`2p6WD8Y@{Ip1wdcrl5jz-i2fsr&cqMo0Mq@oe^ zxJe`hji{&dA^Xs%e#MhmBpHqB_-y!)Bs99!eUJ}HM5Eeb{{|!hjc#sfJdebqQ4L5H zL-wN44MF!FBo2+L--Y`kv1oMd#)%>%292s>@@MZ(djlsuU~C75{O1eE~&O70ce!FJGlt)N245@f@O#w8XZ=e4-j88I`s7`2jYW9 zS(O7H5N|X(cwp=d;)O<;UcKpvCmJ1?vr+}|K%@OU5;=%F8l~U45QMm)QCd#jQp6RF zQn#gzAuec?Vqkg>aYm!$NefTJ35}Av!+#@=Xq1?@YYyUoMhT%|$%s7~#V_jFimXSY zz1(i%h#eZmKJ!0^tV5%i5`qX~i$>AW+wu{c|K9&+{vMA2@Bi!2?LkskHRv9sXPpfn z)*fWE+NOKQ;U1)bcSN2g+=Coh`jCeW-a#sgIh>()-Vq$|jaT^6o&?OTCrV7<9^~>h zMO9+(4wAS5yWW-SWFXFo9J-T*y$6|nchxUd^F zl6jTu2tIer=JC6e1QO3kEHZ_>Kdz2%lYqSSn``|&BjG1@VvQdr*kbeUQf9a6bNxl~ zr;Qspux$IrbJ)Dw*^7g9r@-7VZNugf@yi+%}?aDvBcMIao}tG z=)qi5eBM0`voo4Alqg1Kn?J4lfzLZKoogt*uao6@KMQ0mk2%g+UI~Azw-z05>P8C6 zJNDfbE-c>O7pvtjLf(xTlKoWPR^L>5+#zp!KSH6Gzav;1kfNJjkOa=0uiHcA{n;#> zPag7KXZSd`8jyj$dx}B55H{~E{97^w@Bbp{(8lRsZF&0bFgEWai^=AF!OX{d6D^NC zocZ0`d9U&0LUAzs{Lt8-A3pDhVqZ!dNtvS6ptHZG5dZ#vY;nTFmAp?`o_FjH#`4g- zHm|A%;;1h zHt(&by=@aE%*Q*5mIvPaOp;afC*j&VJb80xcs4%ov&moR{hP|1Me{6*%)-D%*H$KuZh| zUacq}>VAjYAbpbZ%wKodfkG-7`B7+!e~F#@y597(@B)^<#BOY5EDx^`$yc&}KajSN zjyLsYAIjS!OGFrpcTVz3;S|VQXI7v&mA7i$(7qz-2~xhwcO_(fooP_*x8 zzboW@_PTh1&$(8xrKQ>bum>5`hGlslC1La4({*yrqvg}2YTCFqS34K+eb~IcH~Lxd zzhge$yJ>m&;LNWun{CaTbTKfeBcS&DC_e9azCqJDxek<4tC8j*9{l(J2||i1d-#{J zJa58E2J=V~7Nx!3qDRM@diNUTEw|)_AQtbvqa!ynAa9NQEH^6e&ca*$S0V4Q2US|B z*PTF7w`NZJP!iDmY`Vt|@{X9j_S`7s{YdldnV(#dz|Y=3^ynZqZ{Jgjl%cSxx3w#+6maAabvvLE2@-cBaVA#I#46z$-E z3@vv2-CM%sHBa43jjYd`!8`_D&N19u@@IPso}~KE%Zb#-F;LzCMP&k5ykCwxY{`PW zF9y5{qw+Rf7oz?U@^<9i)4IjX3D}8w9%vaz0*j{u!_6S?Lx)seG@Ne*2aUIN9r*=6 zPSi3}@Zvc(Z&yX6-T2xxDUCLc*Q#JX?`v${9~(Zz3cE8OZzozFLpbx(C?{Wh?j{a6 zo?eNlh{ET6ELpI^MOKGGDJU=az;PdUG4rbB_{j9-MJ#{*pXYtX@+d9Mn{tc(b8|wM zjyLuBB9wRYyhwg5-uEAz5zmFZ)nqw*fP<;C>{^5z&=wja6W2p+Gh*p~S!2{^1# z>80MB=+<_R8-u)^3H!F@Pm#f<8$}`cUD&*B9iC1eoth>E)5cW{9oh}vVe@`FVR1vK zfcbc@q2=)oXMUbbTym3ciGlbH;YvTw;qxAjT6buaSBKIvXyKT0wi%Z<;c;qlX&LLk z|4)cwERVJ8LIyeD*<1hh|E$sf8`9Mv>Jye|4cb<|L<*}0dCF992E!VpyyR4a1*}1* z?2jK@2y0MOb9+OSksH`>8>u`bnGD>{yGT308nkOMC^-sOkiKRm{^#aL0uTEp{rB=g znE!VgVp8}rMadY7cH;j z3O3tN+*a}?gB0~Iaz2o^xqXwmnq(b(+P$KhfZz8t9 zJ6pcK#`3&fO&QDM$<{}e#ea{tTujHC`cenV`}M60VpzN#j=DFJA@Apl)^k%EB=0)y zH$jlM)L_nOvji6qB|o+zl06x4nA&~{fV|sXcXH)G-u6}xEn{TJV71|4Gmlx=yo<9! zCi1hVNG7y#q={*+3oh8arI#%1S^=1kcM&ZQ8JziDcz1FoX+#t}-5u9`b`w5tll1ML zUFoX<->XlTceOEaK>FnQ=VBsNEYF*e%wQhDKTK5r9&fpbjyLr!C6xE)Z#zV>cwg8m zs}lox8=QWrK;`|~uJ>00C93GA~^-@5_w_I+SYN`$-}J0`xX zH6@HH7cev^>Od=I1NZ?`v~a1h~vyorP?Di(6AZ zpM14MPa>4^tnozX)cYpf@q|FPjXw=o{{!iS*)e}$a|u>CzQ&2ll_N$FUWh~@UCA;i#);FTXhQN=E=Y(F=_D%$opb$YgZNA zVqbf2ytw-o84Sor_f%G4^B!yad8$lelJu4~?&q?vvm>&wdF!7m)`@IlKHfiQc`U-2 zUrlb|>{kawfd?X?dmsy+_hL@9#I6}#P#W(LzE&T9drN)Q!9$7#)hxe)Y!75C4~Hkh zQOs%Qu-d0mb(mWyW{P{m}sk~nd z{!o7mc}KtNoH$qN4sKlO>Z;UE2Ek_8Mynz3(}Tv9p^*3eTuSrWY%*|9shGA+#^y~L zlnGg#3~x@*#<`B)duf?~&3jglwVJd6^X=ZEd9dTmPj`G&l*dpMH0ByFb+5kXh|*8n2GeyCgG^J1J^5%isThmdaQjYb~ZCFYNildnp}n>bFi%-a<1QrLlO= zd8AkB2YI(inO>ms24m9dYOw!z*3uM8FLeXw$teLza>-!l?3(7akazXs4vpV%?cLy% zpr(123_jdB9=_lxHt%_z-{d+B%kg1 zd4hD7Httx5Zmd!i_9fP{@`H0>F&ESI|Fe?+=HZ1iKal?&!S#pD^As#L_^+3#dik$L$)BY4v~d?c2OTo-!{*)gI!RJ*@p&Kq=5tAxe7YQkbafV`VC0wt-uBZZa2iXrdkQUi}eGrU1h z%f4L|Ta$s5Us-x07(uEyJ(lzD?ot)>Y3uU-;RFLOP_i?M^oX z)qAN++`yWfEYF*;kg+@z57ezG_}l**)A6Q$U=rp1J0M*Vi}xCy4>wmr-ZkwvwWz$W z$5fg;g}hgU4kiVudxPo5?@y~XB!iZeh^M{lmdE3iu7u zvAOdN>|buC7@j`4=Ef-g<1H)CFW`RBEY0%$Ki^r#@|a|69w+>LyamwlrhYLMQ7P$ZCsD>L(V7u*t|FV9^4ln%zV6?Xn6$V z%&(4j$|L_htlkA%1X>O7dD})^J>%EAnbPl(a_Q?42KxV&fp1NlFR*_9U&&w|sn7Z5 z{n!7qK=Ti$2v?BibTx?j&1kd+4T~tv!>U2VL+{*VU=6a7>58WI|CbCdNtSypG)^z& z^c^|x3rZ+Y52nHzbm+Te;ld;MEW()Aj#$v^?8~y_SlO7*u0NyI-rwjH$m#8jgwrISf9KUo44X)bqQg9=4+6S((=HYpKHhQD|g34 zfb_>DjYiM#d8>Cn@-V%#k@EY@&TC?)@mG){qANCx2%l#82C3`1F++JES^LL};3Iah zdYjSlrhe5Q<;|U1t%k*0J8pr&T*&*>4sedjo0vFa{Q>gM{BcWiubMBAU%KESS6DK5 z#9z^RAMzgB{L3luR4Ygd((7rOt!AZ**|iQ+YR~tTq>d{r}7T zyPv#m_W=dQ=9YEjWS~;E%J(MZJwIo?k6&>sP~*=$-usaZ{0;XQhmB(ME}BziyRKk@ zNy!jmsTvzp2P!ya$Sh-@w9emzdAxF*^T@Ipj z72T~Gue*nPGlP)SDHpm=m*xBa*l5P`SYu!rl6?42^-CQi*f|6Rd zbs+D@AA>uoyjQua9bE-^U)yqX&zDU;Ag|DG*AS@cRDQ(y!nm$1n*Dv z69uJTm4^G9@Odwuyp(xw{YJ{N)o(su^Tp?Ff970H$U+sCuiiUPGL{GTq@~)a6aPK` z&k`E|a0R)Bt_D$0o4lU&P&|X8szxw>&xSw3yl|>UZ9x& z@C8?Pm8C1f52Ptk7U>8peWhHmxze(rpcQEMACwIrj0E?BtXENHuxn7;BmJBjkqJ^g zZJgJ;SqtNSVAr6Y{L~9`9&s{V|NoelM;FfgzH)or?%faHAl3I>x3UO-5AxSy_8`r4 zUy6l-#dBe9{7>xUG-!Q~`clO5HHhyHV|mzzsA@g`dxO-PjyLrvHI#R6>a+P+yk+-k zXS2gg?1e9BN>twR!Ga0TA@9^XoqBA;zJRAV=4vfpGU)G)S%yH~*6U^^zJt7P^!!rZ zLx}{#Vt!AawPW)Ry>M6Kz1{@rBW+wqPq*^9fB8UKThnsa%&*MHJB*gcL!9|($*UW3 zJ`w@@Ghd#yiN)t#AlSL~>^@)0@%-t&r>F7n{}Wyr>gcJSWqIC&9>(%;?!u#kT<7;r6HBK&V+!y7VQ6T|9-l=dC(X17}b9@fe%P8 z6AF=Najb}U>Ai+8}Gw9f*NcY8~SEtU7`9-YWM z$U7)JF5>oUUr?dTxmdIzJzux0LDm zI-65Y6l2qrM^g1o`2BynYnzvD8SCF5m0~Q9NGsm)jAMVQw*?(<>gla0Z{&!%CKm5n zm7l$0koWj3uONEf5?j9McthT~VO%;2khjj;{AUA@cXxKi%kz+TXNlp1hGsHwyxGek z*@L~k^(y%36FJcd(mL9>{r<%R{UO-A{UenegxZ*IaneuA!w+YER>>;Sis7OlZjnyI z5CNZe{$>HMOC&pr*~kRYAIImt&-pg#=NBE8Uz}`gs%I#V#m1S(ysOMLsHApjwe=$}KI@~B{-3R;s>ym`b)$kI_m6zk72QRVVK^`sZ3Vgwwblx+& z{F1=1mqxf3Y>;{{uCm;7v=w};{PM}}2N`Vp`19=zLF`NHjrLuKZ|@r?ZK93K-=Y=k z5QJTW*8HqN8Z4Nv23@D+VTCh4@tp1-4XGkPvTf+=s#g4OkPsVp>%>tuP$oo;tlu&6 ziJe_qM(^t?SpO0m#9$uJZ>OmJy@RxljyLr{c9i#b zrsnJ`LlwwrQ3{GX+k{%oA)B;k&oBv#z`M(<9Pb+-z)zY-fPq<3qdUN@kaBo z#+jevESCpE#UeoFexG2oJ3jC9vny0j+4@mpZRBDPn&3aZ)y{iO!niDt<$2qGXDpAT zZ~9`({x(Q9bi5@+PG+OLHF|gHVeytHvDJQqyj6{UcTst7*>-i_3dlQejd_~hj4!Y^ z5ZrVVp59t}#r}decZn#!%(e~N%-%DZ+c7~u1EIqEy)W#>m346E0B&dBL4 zTY^t&>g2Hg;zWeOJVYya)&DL|*3$77A3D1b<$Yu}Sb)X5;fnFQamc%+%=H_U_cNsx zg&QI7-i>qj2~GNf>^iwqatNWI`MF^^nf`HQYX!<9#)JOroopkM|%g4{x0L73V}fHoYYRrlyY-G<4$k z|1vA9-;hoPQa*#A4x z)gZ+j9xZAOl6#{OI9%sJz^Xyq#BTX|Sc9%V>Jy^YpooAyNyG3Nq}PD+fWul}Q0M%} zT5VPmP_VX)Zh|%FNJQ9|{zI+c{oFM1?Wf4#bzOhhx4YPTkY9$kTGW+{k@{%kHVFhY z`)OcbVs|-{v`>c;neP7o5G{`#IP-Iww5@G?A`E_gm&l8|I)GVgQBl1g?Z1WW-%eS# zBqeD|2Y&?_lu=Kf>C&WSRPhyc;34n|I;8j((zW<$Qg@XV#7MxmSXW9OsFil z2YKgj(9)#x4mm!fbq(@1@2Yv}=->+$T&b#Q;7tOGOE2-2L*CC1O6n&ah95|Ob63)2 zHyO14YB=t89GmyYW0JK+m&Zu=Y2z{sP19yeVe=lVx%=(?PUhqNftJT8&ir!UXgie4 zih!E$T{~nl@p&%}dgmvUv7NHF?1A{y=R3In9SALb<(Jj}5A^@W4CWzUK-T%Yf^?wc zEl)D4L3w8>oHE4X-L(F=)kDZz)Jx5b$~#>03UL#a_nuECw>*5o?AIN?B&CwTTSpDv zT*$jOkf%c^w-v1Xyy;N$oJf#ST69Ku6?TJUn8DT>)i6d%rH$)%;QKJR1)F#4$;$;2 z`=&2*|T^CQQq$x0+wL$9!npnegb))DN*yL@}93Kvz`a? zCN6K&s@dQRuI606cT6=21WqjPih{gn94t=UI?@WB-QT|Vt!yM%thQYHUwE(oxrF@r81wOdNy}p$&is@tvs1FJhybBGA7U?k#P9zlemvSJ zd}9OUPQT6WxBKuLqzByBp6!!o{qz5P+p8GLqj2&3y|?53e7$8o9dFr=%W5d^$BXm~ zuy}{6#d2bqtE-oN?Cq;OOE|JLwT%NrgBX6 zz<>Qe+N&}3PuTyv)72o=T;&7Q8bs~?A8ha@V%4Cv6lbA)Sc6KeUc{Nf8dM87ZjQij zkjT`Yir2g13tXg6&RZ&x1l|QENed`{r8wTLDKk6(?;u4h=#_+!LCfsKQe7}o3{^NpMVyB(vvHS}1W>qaid2pQAchC&hAjsQ|j`v)@ z=?av0rL!`E#XCVB zuB=Rc#h%#;)FVjOgWwC&V*@3=-$Jl?o6nz`yLIOn2^|;py5ZfD=h(bEX0GiK1s#O+^CVwD zwoS-7z?}p*k6Aw$gDXg1wy=a&$oq*Nah{`? z2H(Nv{qq7S=QL+N-WzCnjN{DjhRnq^?_z|3=OS6>KyQ5B>21AoveEvO1t(n-_ix0n z-oqO@T%w1{Sf2L-CC2htb^VB$?%&;87dqa`Q!45x?@#`>*|2zn59W?nAn!Kgj&3UN zWgmvNg+bmoZ{I4P3HAkXDz-xV;LVB6x9^#Kg1jS!$18IV!tJe@Ni7a-GWg_FKj*kD zHgA{TyuY@kjgioC4s*7@7-_}kEknHc{+b>0@ph!;A%!zPy|&4cUroZ`K=%t#A0vF; zzC71*7bf^qMy2n$i8eLhE=~yV#SVTUl(IZ;!fOWec#*tc;cxYJrsJ*DSj&&{CLYR| zg~fYnW=HZ3$lD^wXpG8RUs_^jHsn369Tqd!+!xI6J!~;No(Nv-{u$E?d7CWr6*`jD z3a;G_wzchr$6InVzc(RZ_y2db!;H&MjFHfBLgf#S%{9gD|97Sbm+1O4AMe|=JhtP^ zkNc6^_>)XwaKAP0a^_q7-P=s>?t4DcTPQaD+ZFtN&VsI6#LEEI~ z%x-}-s3a)ruw~NrV;XFbW=5MU8@V`+=;U!b*(%8pl?%l&3Pgp1>n=Ed``j^-aQHJt3TV!`U?#7?~-5SzavOSrZw{Vj*u)hwEI_OYF{brH7wG-sS3j`s`|cK=szL&O?StKtO8lmram& ze38tXmVK?jsLC*`JwFoYC10CvzlY6xm*T*P-itBPLfW``m8b464r24>P_&bHb%yzP zZ=>bGjx#?ele;62DIy?z<0Z+|0DRtethv9n#q6NS9bfoa&l8`w{LMG_2LxIF^A-o9 z8Ovj4|G_M=v_HJP=y=al6#sL2D|PpFj`(|SEZ+BH_Wn+WysPcjs8f0Sp8ME240$g~ zsQV^2~k}|=hS2K=C2>D^ntw5 zar30Pcc}l%2~x$nelP5qkT*9ik0PA;ebQRHZX1s%Fq*qkfol~$?+Cu1EkB}nP{{cM zJSGhctRT79dXoYQS-*M{8O&qXx|g)mTRiD_tABc3h*odCf{R>OyqiYqpB#X^`R{0$ zQ+ZGKw|wJ;2c#X??D*zwqc1pN>8P|+HVMr4X?wC1^1k_GO2;%E9&afpAiVQLB*+3@ zip%d}^EMN!BF%a~MncCWtsA@$`!63zt9;ntq;-k;s<#O(j|!am?Wmka*e3=7zODK^2>3I*WBY*9@>kHOZo!VgzdDkrxUabOow`5-TqGYs! zrJ9rH5%}zF_LV5^z8385t-9#$hMil+NQY?SvK4N0usf-@dfgZN?Jd4_9luA|w^0aPAC_J3VW4{J8%O%&P*}hJ&jbwRG3#wm zye&Mv<-h))iTi$ZYOwzgq^m)C+k{V}HHhp;62YoLaU})4cCZHZ={>Qb_W$48W-J!L z6{O&!;=ycrf8chvaYL;ae8n!cSjlD1SIU;|8&-4%8l(U^-U}>hG*RAP zoP~w4c(<=wrt1oMTWdCKqVnENQCn;edCxf!yPo}rADF*iKKYnO5@4@%EvJhI!@bvZMv2Z zHg5s5%9R1t%*We;mIvPaeuys+N}VSH1Q*yXmm%WwwtAt>6ESNqWn4(NTeg^i734`v zb&5a*%U5s0DaP{P{Pp%y<=^xF{OEY=aO56Ec|YJR7r^3u;Kr-oAjmuW+?}&j-Zmrg zf)^q0{W;U;ucZ0`3FjI~#5oDf4Qs1>4jUxr)h$-r;#xtKoo)1@bO4(rBjgmW~-;R0DapE3_P3|_)Teg%|({yO;BMlk6)ID zHR0mqzy2R>vYGfN?EgdPYS5DK01vbVO&Tnf!m2@!GfS^(!5Rd#2d}JzHApUE{e@rf z9i)zT!C&_k2Y}%>66{0p0qHzb;k&Xb@CGSCGjvmEE9lZ`pY3*l41RPwgbCDOH%R$} zx2c_RW26z3IR}N;Gaqk7S{|l2 z^V=WhWUP2w7_`@fI~rfX=RM}GYP0@e4CUF}hui|Z_-~LB)T={p9PnfP2FZi5Jd6#O zREO37SwRNV@m?$t^XL2j)cgOr+)u@^cykj2)*3 z3&V-{r?))H%lsJ3^^E0tyMAXZ4>>lnrQF{aq=V>q>%Y`^fmUx1?J_Ye-gDg}Cru%5 zZ_gYNYJ(Kf-SfEw@_uwC4t#I)2UX%_Q6d&e0Gza~E`z+6rN4-7+|~;Ec=_k{Oq0P; z$B}AV4Q$?q&XWT_VfD_TjXU;xmT#>RHt%a@idK>9n2$G_M>Wp;YFk_D0-p*4ne!5J z=11Z44iiycCMz9Bv3KZbemnh+=MjfRKw9r-kHY_tdv9`|LnZSz<1bFM7QZ(QIIxK2d5`)r zmWRolrk?V&|GxkKPkCeJUtkT|LRW)G9yd+V8sz4#E{|1%qGa~SvBMg)(P)I1x`K?g zt^HsP`+tkyE!WTO+yLy>U0CH3mk18cYYmx!{lC#UyAX;;D-fTno%BUD67;p6>aMcI zu0dUILrm`FjFEb2ow8kVm?o|cT|u|&uD_5Hsq$jx-Tm+J?< zM0u;OoR-7leXS`!m>2TCMDf$6@>YGt_9y`I-kw!3yhwEe=7^gCKCOUjPgJP!+-ip!fI=+7EWtQhXWx-e;qFU9@ zOw#|XAj9Z*8?pDDLwQpQT4k|#C+OyNi9+5k9UeAR-g(!IF2+ONd%p6=NH+(9hFkHv zJ=YRJ_qJzJxsbO=^&y7{|5k93xa_WjA{or7<8U6f#OD1*`IoOl>KI9ZHqI+C=#d=> zoA;^BNoj$8%*T6xmPawp{8s8E=nbA01~x_gaXVb_c^{8jaeQ`OBIWk4GVe-8PH(Xn z{r1(Oisg9|92m^whB89Eg9H~Ro9K8iZJu&Ld2<{&EQ7`S+{xOFa*+3nec!fHd5@i5 zQCA9iv)7jnE_M$D-bZX+E_s#+BEFrbY=FGkujU_1+RzG$L)N||T_b}Ceh0#~*Vw%8 zI-G9$lrl!zK^ym~&q30=7n}Eul8tK~`Y<2wCR!eN^Rr2{-8nZz7-X+jDJN**^A@ko zNgO*7M-d3KiHqaBhr5`Gy`~}Q0}NRHcuPj};5JAzA3OS|dWX{SHY_Abp}dbE8>F## zA5@e5p#phZ<^^U`c~32TJJAh!+blb$GV&|{EK1k-rp2BFkb{MvjUeyAJ&W^AH@1TF z#3(I=dt{&&ow2ED1e^EL>h(E4VD;9ajVqmC8(cAp&07UAL5i7>_i|bub8+VPIV*~D zL$xr7?5rs76vXF!$h=pBy#n5Q6E92d1o%&H-Lyvb>^*Uhn&9Yjgj?)g zmOoFt>InkU&iBXJ*b;$8;rRh+Rd|9ldHUfJt5#4jSZZ7xvm30OE4TL3$zaS&!y}?n zmG{+g(hAzR$KA3n>h;+D|3_7)Q1%?=`vz${Essw)^UHKzzGzVpe8f&aM@UZL6XxFw z`tKHZU`$dw1SPZoN5PycLT@bXF}UEuzA;~iJ7=lwfWDt-9SK1!y+oy2uB_?KA1s}oyR?)pFQ z{r>{S@)#Nw zX^b{*W?I!f^&U3w(zP=pG3m_5+ntujS)BP@YI}Xbbx;`0OZ@6}kN0&uG#2Il;T=xL+qlPz1LbY?EmIMTchk4w zh7riS>0n3;J?}*=pOI|J2JrvbyVG#0-Zp;tn<$cDo1#=mhzwCO)V_$MRE9D|8c1d# zLguNc&?K3aq#~5DVj=T9G@yYJrDP{$=2^SezK{LlzkX}~pBK-w_i=Q;(S3Iv$9;b5 z)48s5jkkv?f)!xi5qch>4lwWYWzVXkjp4Vq{#Z7lAL9eQ?h)B&RfK+V0%}xY>)9|# z_>8QxwNrR&riae^Xz4TXfsyujS0Xu%Vbo_ZV>Dep2)`ih7+0))CpK?ph*x11%v*rT z;0_lxUvIhiU8d0QF5UCSy1C{o!+WJa(H3X7u0s<$H8NG&}y$UmVN`9 zw^EY!mE~>WP{X34n%^_*y*F;(5|zN+>U6*N#@SMrBblLZwf3Wb^FMi3qv@aU{O?22 zgZ3I`&yx?aP5i5+(0b6&sh6X9a1WZy=Bn8V?;z9p8F8cV{D1I6*O1n{9ncZZy1(>w z2pG#yba9X%LhDr(SA}eaU$NWwtf|`B2P8fcb78%N-h)I94(qSBo+Kn8>k94{xQhv+ z_aKgb<1@|&Xzvia0m*??pKpZTam{yl&@2kE{C>6lZO!%*Lvi}}Kz`QMv@_a1SDQZjGLS3{C$yuaKyyZ0%~+k7zU3yJqi z?{_u~@GW-RS#PPv&)9(#!_#IPR)hj??)IM>Vcxe^UA^~Ar5S`~Oy+Uu_y7Wf{I!** z(0M!gwr!L&pCs%+*3EW5jQ+)i&YSCcw`{T|?eTU&a^NxQ6TiuN!v>EB{+g%v5ME>R zKEOT~^yWb%D_`@}tg80hxaWBrgiyyT^{-Ci8ae zdnSR#+o&@)qY~yV`%;9Jw1bRnKeU1m=3Oe!*U&p@2eQox-krLkz`0EE#~1kQZMwlu z`-vURKun1kVyfi>ULG365v|dA?}{>eedORIp#xcW6>^FZ;z8%leCtNglnU+f)<$wH z!>G^0&>z=gga-$1)a$SM}?jt%isCmlY;lI2#sbk?+!l04QRX%Fc(U9!o0_Gigii6 z2MP~L0$TzMM zblxZPl8(%EnVx;dH3BW>`_jkJ>E7*j!zi%sl-Q%7bfAso-J4%K;!eh*UOmE@_}9=Hb~>w?gOn2n z;>|$qdiS}E1aBa8VcJls0G;=zCmc4+_a+I#$huu864Z46gSU3ys#_U1X^;0Hk^`&0 zL%$gEr6l0jTV6TlG(J6y*}bcU4xXvky#m?fMX4Xuqhdgk=o;R8w36<52Z~dd4@-r4H%zMsl6Xr_Kc9I8^IlQAQc8abyg6}R zHT=mx1TZ{~JI?^~mh#rrdMe!vTqAe%cRcq7=Y#6MOLw93E}UPfIecxB5P_`YReo6I z7lhuuiyxh0+!0KByq_XDukd5uf+W4 z&^9_EH)!yb?gu0#Dsza}q_1Owg+j*rVMgfC9~+F86SS-u%ut6`{m$>IZ=xFECKxjB1qk!Y&o3k8Fv zV;-H_(nKi1+4uX3@g~5gZJ1Z_-3xf7oAf#Twn05K)DC|7xi+Trm0PDt?vs;9Ss5!~`4l?}aYCW0&sU^xQnB1dc z2g!3*_wCt3biaed2~wG3Ro!igKd0C)Eur9T#O20I=I!zJjm07#JV6kuOX=Tc)*e27Eeb*Y~C;DiiyTB3>3T#E5n${ykl~G6wr8=+@Ak(2Iid;^{$=7d&{%WJ=HL8#~SUL#as5E z>~sI&oS|S)q_tMK9lkj6<85Iq7d!m@KbDi%iZ^?M{b`b>-J0mU+xudBGvLQt4k7EV zo6PN7Uy05;dUV=Fg9fkvzeaLk)#qh=@_xnwH(23ufceKNY~Im?431Xko6tG_cM(~J zwV2&La3u5SDNZB0=Zzy$mm@dWxBSPQKiwNg!P~%lV=tMvx1GjjG~Pz(qy2s`?_0sF zze&8gB-+1jgD+0Zh-F@qI1YF3z`&;KoFU-O4W?@+VBYtfWkaoan?ZgDK~wdoH^?0o zzLLp^KL0CSi(ECwG({*t)=5V$gDzb~pa1tisVrDGPkY^44atF3pONQ$U0VPTU~(O- z<*38HI3ZK_{dYU-b?EnnDMDy2_RWc*FO0WFm(l;Xw~H&N%TXQl%c?i}-}Qg;tVYv6 z;X^DdMGvyr($h!kL2KY=keJwy;m~@}+$kMbDYysi$XWGJ9qvJ{T7D||@ch5#(RzaZ z5eM+NVaQp)DH!N)Z_yu;AwtVS?kp>)X#%}E1g^XvUhs?3eO~_@M4$iPAFz$_FPkC| zkabf6$)a{!&=0Y7A0(QY-q7Cs{~5`FRUgwS!!G}K++el7^|Au+6Z4SS{BDhrCsQ)? zHtf!7V*Lxu^*H6+c|R3H`X7*_sm$RkGqwKj{Lezc`|zUMMe-r`u5P_58t>b}$}(GE z-e1a0+ey4L>Nl1b!MwGs>V*y;Z~#@Gm{&=h3kLJ0TP|3_yszaFwef9DU}-!5^stFH zaDIB=%!ncS4w6$#i^2Ey6u|>ocRn$dqaYofcfb-H=qaQ<-uy@otoq_3KU9s~;RdNp zT%{IEuz4??wA=S4D+y}In3o=($3Dd3gx$J_gZt>7cOVaSIlil2_qucI&kk}K1#h#L z@HJ7mdy}3Zb&^U@LF4_HV0?WC%==xP>2DHm_0G5*PhsBbPtGX5+u;Btzw7tgTnq*} z0mn>UZX!Y-nO8lv>}~=RM+rN2DtUwQuAOKL)NYPu&vfD3Y|C0 zjBnrMP1@r@cntc<)x(*yiIe=Q^>rBwQQBqcw3wg_@E8**0PvbMH-Oa_^;P~ z2J^NgFtNKzI{?$Uy;~fUg8{*(OF|dsUH5+b_>E6ZzccI@ahK3}pUYaQ^xd2Gcn2Xlu9i;1Qi!2w)Qm{3htzP-Z*M=oY*J(_v1vDm??Oh*cT6zdA9{9Y(wK6H}Y$P zKFnKQ;szk`UVh1+k<`8Qqvho8@;d;rq9vJ(1;M~Y>f1~;eC;hHRk$$tdlO(REbKNH z_Xas$Utbx@pz}_ZiE27(Hbp2z*7--5R+n5u=PmNFHss53+T(o>$$?ehDXBsm4PG9w zvC(?TC0%UZyPSvu_3*Vf)uMJ*>qYE)Z=JtvyQZzKL-(7LjA`m}5c@tgwBGnP|I_r` zPc9Cg|2Zgn&^P*X@$2SX4Qhgip)L7kRw^nVYM50yD&!;M7#&j0KbypOL=6(jSGj}vA_PGv zpP{DSU}fp-2f-cahuG?|0F&@_(}cCix~L2Wb^#~!LoAo7oh64Z?eT6#a&TbOH{A7P z_wp-c-Fv1|pqCMWYb(o7KcGfq8#bUSm9x?*Q_aCkI7J z1_K2PzRW~9BJ^bi+bR9~Fz?#ho%gqTgL6u^x);`=^R5$08N@G}CIlht1_Mv0*O;L5 zwh+9SdtHY1c()=s4rA1(k-Cn5U+Z2`9^*RH|Pj&vCHws=53>* ztYoa00!6y(2X_WzpWebb>@T12{7(10aYj_;@cK=RFZ$EHms9XQV(EIE%==*FWd=0f zOS?-x2*bQBKvWosccRCE_8gdZc|OLSO=uPp`F(0Q0ACYw*@|Ij2KaS3O@#QX^$OYP)|8F2Uu*D>4T ztN-SITA4xrvkrI%$wSeDY(;OZBln<;lzl7EdQgf}OJ5~C|N9Oy2$1Ig$?k!5*6?}zqD-v z+tiHpp6~GnGKa!47r4<6vDt<49n5#937e61KYUqmGwaX~v9hh1d4fM^ZwL7V$$?d0 zceHJo)+0Pn>-&2Dz7sa@=5u12sjau6H9y#Y2##a#AOqdU>z-V7r~5-}pc8dDqSM+t zBxC;UAn_EuPgXTLk$HCtjC7x<~lXIpC__{i5l7}ylLXLTC$EVS|x1x%&JZI!Ip&D5?{*rS= z1P40r(-s{`j7_x1TNTNHRUebOR#V>;9{BOeJz~|x=DqaoVSAh1X^`W$%ul;EVDr8% zbpK{vSQp*%p5vu1hvDplF}=U1x40;HTVHA)BlA98Rm_6M``XoGOrK%i-j1qqB;I=K zx+M3*ybYVwBj)xxg5jOY(!;gz=7gJX$r6}%=F(@Ti2+SOz8qSzV~sb6_{1plWDK2m zweanrvo6zwE6BP|otws&xzKsXTKaKWKBPU~O-K%``sAi@rd`_HAU1#3k2pna-rY6) zLNnTF&^Cv{BA$LKE>7HYzR$S-72Wg3Wm1{r+_w!fe>W$b6uhmD#`KVRU-OPwhQ?b) zK>f!E%=?UITqTLOcfVAl3e4O3hjgbWvm>a9SF92y1_Ae@rO?UEL`W!je6LPq69`q& zA3hE99@{>Y^Wi_b_pN=ct~<=93A4z$vAWkUOxL3GcD1OFvb;ijyi<`JSoNv!37-$f zbA#+Gh8^2DuzCNEe?1rjUwbqCtR?V%0DJxyj(GlXZ)q>x@4bC;smqbWIQ~s0_TT(Z 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

%c;{O2cJDaS2oD>7Fw57+A7a1F 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

`XsJ)rl@M`6u8coK~>|CaE+q#m31 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 z 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 Qr4F`x@7{faZ*Td30Fh2Dvj6}9 diff --git a/planning/autoware_static_centerline_generator/test/data/bag_ego_trajectory_turn-right.db3 b/planning/autoware_static_centerline_generator/test/data/bag_ego_trajectory_turn-right.db3 deleted file mode 100644 index 0883307acbae0ff5e4a42efa165cba8ae262ae64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2654208 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

`qk&3%TwfI<;#bp; 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≈e?NKFN*MhyspB4ixpZIz&oGdgb$ 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

I!4X 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 diff --git a/planning/autoware_static_centerline_generator/test/data/lanelet2_map.osm b/planning/autoware_static_centerline_generator/test/data/lanelet2_map.osm deleted file mode 100644 index 406cd85c151ea..0000000000000 --- a/planning/autoware_static_centerline_generator/test/data/lanelet2_map.osm +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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 deleted file mode 100644 index ca2621212ef83..0000000000000 --- a/planning/autoware_static_centerline_generator/test/test_static_centerline_generator.test.py +++ /dev/null @@ -1,112 +0,0 @@ -#!/usr/bin/env python3 - -# 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. - -import os -import unittest - -from ament_index_python import get_package_share_directory -import launch -from launch import LaunchDescription -from launch_ros.actions import Node -import launch_testing -import pytest - - -@pytest.mark.launch_test -def generate_test_description(): - lanelet2_map_path = os.path.join( - get_package_share_directory("autoware_static_centerline_generator"), - "test/data/lanelet2_map.osm", - ) - - static_centerline_generator_node = Node( - package="autoware_static_centerline_generator", - executable="main", - output="screen", - parameters=[ - {"lanelet2_map_path": lanelet2_map_path}, - {"mode": "AUTO"}, - {"rviz": False}, - {"centerline_source": "optimization_trajectory_base"}, - {"lanelet2_input_file_path": lanelet2_map_path}, - {"lanelet2_output_file_path": "/tmp/lanelet2_map.osm"}, - {"start_lanelet_id": 215}, - {"end_lanelet_id": 216}, - os.path.join( - get_package_share_directory("autoware_mission_planner"), - "config", - "mission_planner.param.yaml", - ), - os.path.join( - get_package_share_directory("autoware_static_centerline_generator"), - "config/static_centerline_generator.param.yaml", - ), - os.path.join( - get_package_share_directory("autoware_behavior_path_planner"), - "config/behavior_path_planner.param.yaml", - ), - os.path.join( - get_package_share_directory("autoware_behavior_velocity_planner"), - "config/behavior_velocity_planner.param.yaml", - ), - os.path.join( - get_package_share_directory("autoware_path_smoother"), - "config/elastic_band_smoother.param.yaml", - ), - os.path.join( - get_package_share_directory("autoware_path_optimizer"), - "config/path_optimizer.param.yaml", - ), - os.path.join( - get_package_share_directory("autoware_map_loader"), - "config/lanelet2_map_loader.param.yaml", - ), - os.path.join( - get_package_share_directory("autoware_static_centerline_generator"), - "config/common.param.yaml", - ), - os.path.join( - get_package_share_directory("autoware_static_centerline_generator"), - "config/nearest_search.param.yaml", - ), - os.path.join( - get_package_share_directory("autoware_static_centerline_generator"), - "config/vehicle_info.param.yaml", - ), - ], - ) - - context = {} - - return ( - LaunchDescription( - [ - static_centerline_generator_node, - # Start test after 1s - gives time for the autoware_static_centerline_generator to finish initialization - launch.actions.TimerAction( - period=1.0, actions=[launch_testing.actions.ReadyToTest()] - ), - ] - ), - context, - ) - - -@launch_testing.post_shutdown_test() -class TestProcessOutput(unittest.TestCase): - def test_exit_code(self, proc_info): - # Check that process exits with code 0: no error - launch_testing.asserts.assertExitCodes(proc_info) From 7ac40b7d5e29bee9a1eeed604e9340fdbd58e762 Mon Sep 17 00:00:00 2001 From: Vishal Chauhan <40782713+vish0012@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:30:58 +0900 Subject: [PATCH 67/77] feat: tier4_debug_msgs changed to autoware-internal_debug_msgs in files localization/autoware_ndt_scan_matcher (#9861) Signed-off-by: vish0012 Co-authored-by: SakodaShintaro --- .../autoware_ndt_scan_matcher/README.md | 40 +++++++++---------- .../ndt_scan_matcher_core.hpp | 23 ++++++----- .../autoware_ndt_scan_matcher/package.xml | 2 +- .../src/ndt_scan_matcher_core.cpp | 33 ++++++++------- 4 files changed, 51 insertions(+), 47 deletions(-) diff --git a/localization/autoware_ndt_scan_matcher/README.md b/localization/autoware_ndt_scan_matcher/README.md index 22e56930a0048..ee177608bdefe 100644 --- a/localization/autoware_ndt_scan_matcher/README.md +++ b/localization/autoware_ndt_scan_matcher/README.md @@ -25,26 +25,26 @@ One optional function is regularization. Please see the regularization chapter i ### Output -| Name | Type | Description | -| --------------------------------- | ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -| `ndt_pose` | `geometry_msgs::msg::PoseStamped` | estimated pose | -| `ndt_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | estimated pose with covariance | -| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | diagnostics | -| `points_aligned` | `sensor_msgs::msg::PointCloud2` | [debug topic] pointcloud aligned by scan matching | -| `points_aligned_no_ground` | `sensor_msgs::msg::PointCloud2` | [debug topic] no ground pointcloud aligned by scan matching | -| `initial_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [debug topic] initial pose used in scan matching | -| `multi_ndt_pose` | `geometry_msgs::msg::PoseArray` | [debug topic] estimated poses from multiple initial poses in real-time covariance estimation | -| `multi_initial_pose` | `geometry_msgs::msg::PoseArray` | [debug topic] initial poses for real-time covariance estimation | -| `exe_time_ms` | `tier4_debug_msgs::msg::Float32Stamped` | [debug topic] execution time for scan matching [ms] | -| `transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [debug topic] score of scan matching | -| `no_ground_transform_probability` | `tier4_debug_msgs::msg::Float32Stamped` | [debug topic] score of scan matching based on no ground LiDAR scan | -| `iteration_num` | `tier4_debug_msgs::msg::Int32Stamped` | [debug topic] number of scan matching iterations | -| `initial_to_result_relative_pose` | `geometry_msgs::msg::PoseStamped` | [debug topic] relative pose between the initial point and the convergence point | -| `initial_to_result_distance` | `tier4_debug_msgs::msg::Float32Stamped` | [debug topic] distance difference between the initial point and the convergence point [m] | -| `initial_to_result_distance_old` | `tier4_debug_msgs::msg::Float32Stamped` | [debug topic] distance difference between the older of the two initial points used in linear interpolation and the convergence point [m] | -| `initial_to_result_distance_new` | `tier4_debug_msgs::msg::Float32Stamped` | [debug topic] distance difference between the newer of the two initial points used in linear interpolation and the convergence point [m] | -| `ndt_marker` | `visualization_msgs::msg::MarkerArray` | [debug topic] markers for debugging | -| `monte_carlo_initial_pose_marker` | `visualization_msgs::msg::MarkerArray` | [debug topic] particles used in initial position estimation | +| Name | Type | Description | +| --------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `ndt_pose` | `geometry_msgs::msg::PoseStamped` | estimated pose | +| `ndt_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | estimated pose with covariance | +| `/diagnostics` | `diagnostic_msgs::msg::DiagnosticArray` | diagnostics | +| `points_aligned` | `sensor_msgs::msg::PointCloud2` | [debug topic] pointcloud aligned by scan matching | +| `points_aligned_no_ground` | `sensor_msgs::msg::PointCloud2` | [debug topic] no ground pointcloud aligned by scan matching | +| `initial_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | [debug topic] initial pose used in scan matching | +| `multi_ndt_pose` | `geometry_msgs::msg::PoseArray` | [debug topic] estimated poses from multiple initial poses in real-time covariance estimation | +| `multi_initial_pose` | `geometry_msgs::msg::PoseArray` | [debug topic] initial poses for real-time covariance estimation | +| `exe_time_ms` | `autoware_internal_debug_msgs::msg::Float32Stamped` | [debug topic] execution time for scan matching [ms] | +| `transform_probability` | `autoware_internal_debug_msgs::msg::Float32Stamped` | [debug topic] score of scan matching | +| `no_ground_transform_probability` | `autoware_internal_debug_msgs::msg::Float32Stamped` | [debug topic] score of scan matching based on no ground LiDAR scan | +| `iteration_num` | `autoware_internal_debug_msgs::msg::Int32Stamped` | [debug topic] number of scan matching iterations | +| `initial_to_result_relative_pose` | `geometry_msgs::msg::PoseStamped` | [debug topic] relative pose between the initial point and the convergence point | +| `initial_to_result_distance` | `autoware_internal_debug_msgs::msg::Float32Stamped` | [debug topic] distance difference between the initial point and the convergence point [m] | +| `initial_to_result_distance_old` | `autoware_internal_debug_msgs::msg::Float32Stamped` | [debug topic] distance difference between the older of the two initial points used in linear interpolation and the convergence point [m] | +| `initial_to_result_distance_new` | `autoware_internal_debug_msgs::msg::Float32Stamped` | [debug topic] distance difference between the newer of the two initial points used in linear interpolation and the convergence point [m] | +| `ndt_marker` | `visualization_msgs::msg::MarkerArray` | [debug topic] markers for debugging | +| `monte_carlo_initial_pose_marker` | `visualization_msgs::msg::MarkerArray` | [debug topic] particles used in initial position estimation | ### Service diff --git a/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/ndt_scan_matcher_core.hpp b/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/ndt_scan_matcher_core.hpp index e083e6751c3db..d6e629ee2f1c3 100644 --- a/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/ndt_scan_matcher_core.hpp +++ b/localization/autoware_ndt_scan_matcher/include/autoware/ndt_scan_matcher/ndt_scan_matcher_core.hpp @@ -26,6 +26,8 @@ #include #include +#include +#include #include #include #include @@ -33,8 +35,6 @@ #include #include #include -#include -#include #include #include @@ -166,23 +166,24 @@ class NDTScanMatcher : public rclcpp::Node initial_pose_with_covariance_pub_; rclcpp::Publisher::SharedPtr multi_ndt_pose_pub_; rclcpp::Publisher::SharedPtr multi_initial_pose_pub_; - rclcpp::Publisher::SharedPtr exe_time_pub_; - rclcpp::Publisher::SharedPtr transform_probability_pub_; - rclcpp::Publisher::SharedPtr + rclcpp::Publisher::SharedPtr exe_time_pub_; + rclcpp::Publisher::SharedPtr + transform_probability_pub_; + rclcpp::Publisher::SharedPtr nearest_voxel_transformation_likelihood_pub_; rclcpp::Publisher::SharedPtr voxel_score_points_pub_; - rclcpp::Publisher::SharedPtr + rclcpp::Publisher::SharedPtr no_ground_transform_probability_pub_; - rclcpp::Publisher::SharedPtr + rclcpp::Publisher::SharedPtr no_ground_nearest_voxel_transformation_likelihood_pub_; - rclcpp::Publisher::SharedPtr iteration_num_pub_; + rclcpp::Publisher::SharedPtr iteration_num_pub_; rclcpp::Publisher::SharedPtr initial_to_result_relative_pose_pub_; - rclcpp::Publisher::SharedPtr + rclcpp::Publisher::SharedPtr initial_to_result_distance_pub_; - rclcpp::Publisher::SharedPtr + rclcpp::Publisher::SharedPtr initial_to_result_distance_old_pub_; - rclcpp::Publisher::SharedPtr + rclcpp::Publisher::SharedPtr initial_to_result_distance_new_pub_; rclcpp::Publisher::SharedPtr ndt_marker_pub_; rclcpp::Publisher::SharedPtr diff --git a/localization/autoware_ndt_scan_matcher/package.xml b/localization/autoware_ndt_scan_matcher/package.xml index f2047418310aa..ebd1ebda2d573 100644 --- a/localization/autoware_ndt_scan_matcher/package.xml +++ b/localization/autoware_ndt_scan_matcher/package.xml @@ -17,6 +17,7 @@ ament_cmake_auto autoware_cmake + autoware_internal_debug_msgs autoware_localization_util autoware_map_msgs autoware_universe_utils @@ -35,7 +36,6 @@ tf2_geometry_msgs tf2_ros tf2_sensor_msgs - tier4_debug_msgs tier4_localization_msgs visualization_msgs diff --git a/localization/autoware_ndt_scan_matcher/src/ndt_scan_matcher_core.cpp b/localization/autoware_ndt_scan_matcher/src/ndt_scan_matcher_core.cpp index d3e1fa5982867..3d06dfffa16ed 100644 --- a/localization/autoware_ndt_scan_matcher/src/ndt_scan_matcher_core.cpp +++ b/localization/autoware_ndt_scan_matcher/src/ndt_scan_matcher_core.cpp @@ -53,18 +53,18 @@ using autoware::localization_util::SmartPoseBuffer; using autoware::localization_util::TreeStructuredParzenEstimator; using autoware::universe_utils::DiagnosticsInterface; -tier4_debug_msgs::msg::Float32Stamped make_float32_stamped( +autoware_internal_debug_msgs::msg::Float32Stamped make_float32_stamped( const builtin_interfaces::msg::Time & stamp, const float data) { - using T = tier4_debug_msgs::msg::Float32Stamped; - return tier4_debug_msgs::build().stamp(stamp).data(data); + using T = autoware_internal_debug_msgs::msg::Float32Stamped; + return autoware_internal_debug_msgs::build().stamp(stamp).data(data); } -tier4_debug_msgs::msg::Int32Stamped make_int32_stamped( +autoware_internal_debug_msgs::msg::Int32Stamped make_int32_stamped( const builtin_interfaces::msg::Time & stamp, const int32_t data) { - using T = tier4_debug_msgs::msg::Int32Stamped; - return tier4_debug_msgs::build().stamp(stamp).data(data); + using T = autoware_internal_debug_msgs::msg::Int32Stamped; + return autoware_internal_debug_msgs::build().stamp(stamp).data(data); } std::array rotate_covariance( @@ -158,31 +158,34 @@ NDTScanMatcher::NDTScanMatcher(const rclcpp::NodeOptions & options) multi_ndt_pose_pub_ = this->create_publisher("multi_ndt_pose", 10); multi_initial_pose_pub_ = this->create_publisher("multi_initial_pose", 10); - exe_time_pub_ = this->create_publisher("exe_time_ms", 10); + exe_time_pub_ = + this->create_publisher("exe_time_ms", 10); transform_probability_pub_ = - this->create_publisher("transform_probability", 10); + this->create_publisher( + "transform_probability", 10); nearest_voxel_transformation_likelihood_pub_ = - this->create_publisher( + this->create_publisher( "nearest_voxel_transformation_likelihood", 10); voxel_score_points_pub_ = this->create_publisher("voxel_score_points", 10); no_ground_transform_probability_pub_ = - this->create_publisher( + this->create_publisher( "no_ground_transform_probability", 10); no_ground_nearest_voxel_transformation_likelihood_pub_ = - this->create_publisher( + this->create_publisher( "no_ground_nearest_voxel_transformation_likelihood", 10); iteration_num_pub_ = - this->create_publisher("iteration_num", 10); + this->create_publisher("iteration_num", 10); initial_to_result_relative_pose_pub_ = this->create_publisher("initial_to_result_relative_pose", 10); initial_to_result_distance_pub_ = - this->create_publisher("initial_to_result_distance", 10); + this->create_publisher( + "initial_to_result_distance", 10); initial_to_result_distance_old_pub_ = - this->create_publisher( + this->create_publisher( "initial_to_result_distance_old", 10); initial_to_result_distance_new_pub_ = - this->create_publisher( + this->create_publisher( "initial_to_result_distance_new", 10); ndt_marker_pub_ = this->create_publisher("ndt_marker", 10); ndt_monte_carlo_initial_pose_marker_pub_ = From 22ca70398f7785af65446ee6a363b476c0fe72bd Mon Sep 17 00:00:00 2001 From: Vishal Chauhan <40782713+vish0012@users.noreply.github.com> Date: Thu, 9 Jan 2025 15:57:04 +0900 Subject: [PATCH 68/77] feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in fies localization/autoware_ekf_localizer (#9860) Signed-off-by: vish0012 Co-authored-by: SakodaShintaro --- localization/autoware_ekf_localizer/README.md | 22 +++++++++---------- .../autoware/ekf_localizer/ekf_localizer.hpp | 9 ++++---- .../autoware_ekf_localizer/package.xml | 2 +- .../src/ekf_localizer.cpp | 16 ++++++++------ 4 files changed, 26 insertions(+), 23 deletions(-) diff --git a/localization/autoware_ekf_localizer/README.md b/localization/autoware_ekf_localizer/README.md index 802bf7dbb16c3..a46ea7181315f 100644 --- a/localization/autoware_ekf_localizer/README.md +++ b/localization/autoware_ekf_localizer/README.md @@ -44,17 +44,17 @@ This package includes the following features: ### Published Topics -| Name | Type | Description | -| --------------------------------- | ------------------------------------------------ | ----------------------------------------------------- | -| `ekf_odom` | `nav_msgs::msg::Odometry` | Estimated odometry. | -| `ekf_pose` | `geometry_msgs::msg::PoseStamped` | Estimated pose. | -| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Estimated pose with covariance. | -| `ekf_biased_pose` | `geometry_msgs::msg::PoseStamped` | Estimated pose including the yaw bias | -| `ekf_biased_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Estimated pose with covariance including the yaw bias | -| `ekf_twist` | `geometry_msgs::msg::TwistStamped` | Estimated twist. | -| `ekf_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | The estimated twist with covariance. | -| `diagnostics` | `diagnostics_msgs::msg::DiagnosticArray` | The diagnostic information. | -| `debug/processing_time_ms` | `tier4_debug_msgs::msg::Float64Stamped` | The processing time [ms]. | +| Name | Type | Description | +| --------------------------------- | --------------------------------------------------- | ----------------------------------------------------- | +| `ekf_odom` | `nav_msgs::msg::Odometry` | Estimated odometry. | +| `ekf_pose` | `geometry_msgs::msg::PoseStamped` | Estimated pose. | +| `ekf_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Estimated pose with covariance. | +| `ekf_biased_pose` | `geometry_msgs::msg::PoseStamped` | Estimated pose including the yaw bias | +| `ekf_biased_pose_with_covariance` | `geometry_msgs::msg::PoseWithCovarianceStamped` | Estimated pose with covariance including the yaw bias | +| `ekf_twist` | `geometry_msgs::msg::TwistStamped` | Estimated twist. | +| `ekf_twist_with_covariance` | `geometry_msgs::msg::TwistWithCovarianceStamped` | The estimated twist with covariance. | +| `diagnostics` | `diagnostics_msgs::msg::DiagnosticArray` | The diagnostic information. | +| `debug/processing_time_ms` | `autoware_internal_debug_msgs::msg::Float64Stamped` | The processing time [ms]. | ### Published TF diff --git a/localization/autoware_ekf_localizer/include/autoware/ekf_localizer/ekf_localizer.hpp b/localization/autoware_ekf_localizer/include/autoware/ekf_localizer/ekf_localizer.hpp index 0561e250298ac..84018c043cc14 100644 --- a/localization/autoware_ekf_localizer/include/autoware/ekf_localizer/ekf_localizer.hpp +++ b/localization/autoware_ekf_localizer/include/autoware/ekf_localizer/ekf_localizer.hpp @@ -25,6 +25,8 @@ #include #include +#include +#include #include #include #include @@ -34,8 +36,6 @@ #include #include #include -#include -#include #include #include @@ -78,7 +78,7 @@ class EKFLocalizer : public rclcpp::Node //!< @brief ekf estimated twist with covariance publisher rclcpp::Publisher::SharedPtr pub_twist_cov_; //!< @brief ekf estimated yaw bias publisher - rclcpp::Publisher::SharedPtr pub_yaw_bias_; + rclcpp::Publisher::SharedPtr pub_yaw_bias_; //!< @brief ekf estimated yaw bias publisher rclcpp::Publisher::SharedPtr pub_biased_pose_; //!< @brief ekf estimated yaw bias publisher @@ -86,7 +86,8 @@ class EKFLocalizer : public rclcpp::Node //!< @brief diagnostics publisher rclcpp::Publisher::SharedPtr pub_diag_; //!< @brief processing_time publisher - rclcpp::Publisher::SharedPtr pub_processing_time_; + rclcpp::Publisher::SharedPtr + pub_processing_time_; //!< @brief initial pose subscriber rclcpp::Subscription::SharedPtr sub_initialpose_; //!< @brief measurement pose with covariance subscriber diff --git a/localization/autoware_ekf_localizer/package.xml b/localization/autoware_ekf_localizer/package.xml index 8dc3cc9844c50..e0e37f59d1acb 100644 --- a/localization/autoware_ekf_localizer/package.xml +++ b/localization/autoware_ekf_localizer/package.xml @@ -22,6 +22,7 @@ eigen + autoware_internal_debug_msgs autoware_kalman_filter autoware_localization_util autoware_universe_utils @@ -34,7 +35,6 @@ std_srvs tf2 tf2_ros - tier4_debug_msgs ament_cmake_ros ament_lint_auto diff --git a/localization/autoware_ekf_localizer/src/ekf_localizer.cpp b/localization/autoware_ekf_localizer/src/ekf_localizer.cpp index 11d7788adfade..5638a5416e6ab 100644 --- a/localization/autoware_ekf_localizer/src/ekf_localizer.cpp +++ b/localization/autoware_ekf_localizer/src/ekf_localizer.cpp @@ -70,13 +70,14 @@ EKFLocalizer::EKFLocalizer(const rclcpp::NodeOptions & node_options) pub_twist_ = create_publisher("ekf_twist", 1); pub_twist_cov_ = create_publisher( "ekf_twist_with_covariance", 1); - pub_yaw_bias_ = create_publisher("estimated_yaw_bias", 1); + pub_yaw_bias_ = + create_publisher("estimated_yaw_bias", 1); pub_biased_pose_ = create_publisher("ekf_biased_pose", 1); pub_biased_pose_cov_ = create_publisher( "ekf_biased_pose_with_covariance", 1); pub_diag_ = this->create_publisher("/diagnostics", 10); - pub_processing_time_ = - create_publisher("debug/processing_time_ms", 1); + pub_processing_time_ = create_publisher( + "debug/processing_time_ms", 1); sub_initialpose_ = create_subscription( "initialpose", 1, std::bind(&EKFLocalizer::callback_initial_pose, this, _1)); sub_pose_with_cov_ = create_subscription( @@ -235,9 +236,10 @@ void EKFLocalizer::timer_callback() /* publish processing time */ const double elapsed_time = stop_watch_timer_cb_.toc(); - pub_processing_time_->publish(tier4_debug_msgs::build() - .stamp(current_time) - .data(elapsed_time)); + pub_processing_time_->publish( + autoware_internal_debug_msgs::build() + .stamp(current_time) + .data(elapsed_time)); } /* @@ -343,7 +345,7 @@ void EKFLocalizer::publish_estimate_result( pub_twist_cov_->publish(twist_cov); /* publish yaw bias */ - tier4_debug_msgs::msg::Float64Stamped yawb; + autoware_internal_debug_msgs::msg::Float64Stamped yawb; yawb.stamp = current_ekf_twist.header.stamp; yawb.data = ekf_module_->get_yaw_bias(); pub_yaw_bias_->publish(yawb); From bb66275f29f829dd02a729de0df7fda8deb0884b Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 9 Jan 2025 16:27:44 +0900 Subject: [PATCH 69/77] ci(cppcheck): ignore benchmarks directories for cppcheck (#9842) Signed-off-by: veqcc --- .cppcheck_suppressions | 1 + 1 file changed, 1 insertion(+) diff --git a/.cppcheck_suppressions b/.cppcheck_suppressions index ab267ec3ac007..4119e69ed72e1 100644 --- a/.cppcheck_suppressions +++ b/.cppcheck_suppressions @@ -1,5 +1,6 @@ *:*/test/* *:*/examples/* +*:*/benchmarks/* checkersReport missingInclude From c8ee48bd6828ba0b7352250541425e66aa96f2b3 Mon Sep 17 00:00:00 2001 From: Vishal Chauhan <40782713+vish0012@users.noreply.github.com> Date: Thu, 9 Jan 2025 20:38:17 +0900 Subject: [PATCH 70/77] =?UTF-8?q?feat:=20tier4=5Fdebug=5Fmsgs=20changed=20?= =?UTF-8?q?to=20autoware=5Finternal=5Fdebug=5Fmsgs=20in=20fil=E2=80=A6=20(?= =?UTF-8?q?#9880)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files perception/autoware_detection_by_tracker Signed-off-by: vish0012 Co-authored-by: Taekjin LEE --- .../autoware_detection_by_tracker/src/debugger/debugger.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/perception/autoware_detection_by_tracker/src/debugger/debugger.hpp b/perception/autoware_detection_by_tracker/src/debugger/debugger.hpp index 39dd3db10cfa9..8bd1deba35ccb 100644 --- a/perception/autoware_detection_by_tracker/src/debugger/debugger.hpp +++ b/perception/autoware_detection_by_tracker/src/debugger/debugger.hpp @@ -89,9 +89,9 @@ class Debugger void startMeasureProcessingTime() { stop_watch_ptr_->tic("processing_time"); } void publishProcessingTime() { - processing_time_publisher_->publish( + processing_time_publisher_->publish( "debug/cyclic_time_ms", stop_watch_ptr_->toc("cyclic_time", true)); - processing_time_publisher_->publish( + processing_time_publisher_->publish( "debug/processing_time_ms", stop_watch_ptr_->toc("processing_time", true)); } From 56ff9b8de27e050787f9b2fe610f5df1348c4a03 Mon Sep 17 00:00:00 2001 From: Vishal Chauhan <40782713+vish0012@users.noreply.github.com> Date: Fri, 10 Jan 2025 01:49:20 +0900 Subject: [PATCH 71/77] =?UTF-8?q?feat:=20tier4=5Fdebug=5Fmsgs=20changed=20?= =?UTF-8?q?to=20autoware=5Finternal=5Fdebug=5Fmsgs=20in=20fil=E2=80=A6=20(?= =?UTF-8?q?#9858)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files evaluator/autoware_control_evaluator Signed-off-by: vish0012 --- .../autoware/control_evaluator/control_evaluator_node.hpp | 5 +++-- .../src/control_evaluator_node.cpp | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp b/evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp index c510b2ea46779..9606dea577bd0 100644 --- a/evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp +++ b/evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp @@ -25,9 +25,9 @@ #include #include "geometry_msgs/msg/accel_with_covariance_stamped.hpp" +#include #include #include -#include #include #include @@ -85,7 +85,8 @@ class ControlEvaluatorNode : public rclcpp::Node LaneletMapBin, autoware::universe_utils::polling_policy::Newest> vector_map_subscriber_{this, "~/input/vector_map", rclcpp::QoS{1}.transient_local()}; - rclcpp::Publisher::SharedPtr processing_time_pub_; + rclcpp::Publisher::SharedPtr + processing_time_pub_; rclcpp::Publisher::SharedPtr metrics_pub_; // update Route Handler diff --git a/evaluator/autoware_control_evaluator/src/control_evaluator_node.cpp b/evaluator/autoware_control_evaluator/src/control_evaluator_node.cpp index b0db41b0fdc73..79e89423af6dd 100644 --- a/evaluator/autoware_control_evaluator/src/control_evaluator_node.cpp +++ b/evaluator/autoware_control_evaluator/src/control_evaluator_node.cpp @@ -34,8 +34,8 @@ ControlEvaluatorNode::ControlEvaluatorNode(const rclcpp::NodeOptions & node_opti using std::placeholders::_1; // Publisher - processing_time_pub_ = - this->create_publisher("~/debug/processing_time_ms", 1); + processing_time_pub_ = this->create_publisher( + "~/debug/processing_time_ms", 1); metrics_pub_ = create_publisher("~/metrics", 1); // Parameters @@ -288,7 +288,7 @@ void ControlEvaluatorNode::onTimer() metrics_msg_ = MetricArrayMsg{}; // Publish processing time - tier4_debug_msgs::msg::Float64Stamped processing_time_msg; + autoware_internal_debug_msgs::msg::Float64Stamped processing_time_msg; processing_time_msg.stamp = get_clock()->now(); processing_time_msg.data = stop_watch.toc(); processing_time_pub_->publish(processing_time_msg); From 6fe89228f731af6f97541de0f3b163752a5baefc Mon Sep 17 00:00:00 2001 From: Vishal Chauhan <40782713+vish0012@users.noreply.github.com> Date: Fri, 10 Jan 2025 01:49:37 +0900 Subject: [PATCH 72/77] =?UTF-8?q?feat:=20tier4=5Fdebug=5Fmsgs=20changed=20?= =?UTF-8?q?to=20autoware=5Finternal=5Fdebug=5Fmsgs=20in=20fil=E2=80=A6=20(?= =?UTF-8?q?#9857)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files control/control_performance_analysis Signed-off-by: vish0012 --- control/control_performance_analysis/package.xml | 2 +- .../scripts/control_performance_plot.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/control/control_performance_analysis/package.xml b/control/control_performance_analysis/package.xml index 9c2ef69e0137b..f2630a7d47f62 100644 --- a/control/control_performance_analysis/package.xml +++ b/control/control_performance_analysis/package.xml @@ -25,6 +25,7 @@ builtin_interfaces autoware_control_msgs + autoware_internal_debug_msgs autoware_motion_utils autoware_planning_msgs autoware_signal_processing @@ -41,7 +42,6 @@ tf2 tf2_eigen tf2_ros - tier4_debug_msgs autoware_global_parameter_loader builtin_interfaces rosidl_default_runtime diff --git a/control/control_performance_analysis/scripts/control_performance_plot.py b/control/control_performance_analysis/scripts/control_performance_plot.py index c5e5cabd5b059..d4a6038465e12 100644 --- a/control/control_performance_analysis/scripts/control_performance_plot.py +++ b/control/control_performance_analysis/scripts/control_performance_plot.py @@ -17,13 +17,13 @@ import argparse import math +from autoware_internal_debug_msgs.msg import BoolStamped from control_performance_analysis.msg import DrivingMonitorStamped from control_performance_analysis.msg import ErrorStamped import matplotlib.pyplot as plt from nav_msgs.msg import Odometry import rclpy from rclpy.node import Node -from tier4_debug_msgs.msg import BoolStamped parser = argparse.ArgumentParser() parser.add_argument("-i", "--interval", help="interval distance to plot") From 4d0a86f10df9462696a1955511f882042914db5d Mon Sep 17 00:00:00 2001 From: Vishal Chauhan <40782713+vish0012@users.noreply.github.com> Date: Fri, 10 Jan 2025 01:50:28 +0900 Subject: [PATCH 73/77] =?UTF-8?q?feat:=20tier4=5Fdebug=5Fmsgs=20changed=20?= =?UTF-8?q?to=20autoware=5Finternal=5Fmsgs=20in=20files=20con=E2=80=A6=20(?= =?UTF-8?q?#9852)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: tier4_debug_msgs changed to autoware_internal_msgs in files control/autoware_trajectory_follower_base Signed-off-by: vish0012 --- control/autoware_trajectory_follower_base/package.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/control/autoware_trajectory_follower_base/package.xml b/control/autoware_trajectory_follower_base/package.xml index e7b00e4b19cdc..195c077835910 100644 --- a/control/autoware_trajectory_follower_base/package.xml +++ b/control/autoware_trajectory_follower_base/package.xml @@ -21,6 +21,7 @@ autoware_adapi_v1_msgs autoware_control_msgs + autoware_internal_debug_msgs autoware_interpolation autoware_motion_utils autoware_osqp_interface @@ -37,7 +38,6 @@ std_msgs tf2 tf2_ros - tier4_debug_msgs ament_cmake_ros ament_lint_auto From 926ad7f3d6d1e0a6c689ce6e2a1a104d850913e3 Mon Sep 17 00:00:00 2001 From: Vishal Chauhan <40782713+vish0012@users.noreply.github.com> Date: Fri, 10 Jan 2025 01:52:15 +0900 Subject: [PATCH 74/77] =?UTF-8?q?feat:=20tier4=5Fdebug=5Fmsgs=20changed=20?= =?UTF-8?q?to=20autoware=5Finternal=5Fdebug=5Fmsgs=20in=20fil=E2=80=A6=20(?= =?UTF-8?q?#9848)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files control/autoware_pid_longitudinal_controller Signed-off-by: vish0012 --- .../pid_longitudinal_controller.hpp | 8 +++++--- control/autoware_pid_longitudinal_controller/package.xml | 2 +- .../src/pid_longitudinal_controller.cpp | 8 ++++---- 3 files changed, 10 insertions(+), 8 deletions(-) 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 1d03d1b339af6..db5fa09b5eeee 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 @@ -34,11 +34,11 @@ #include "autoware_adapi_v1_msgs/msg/operation_mode_state.hpp" #include "autoware_control_msgs/msg/longitudinal.hpp" +#include "autoware_internal_debug_msgs/msg/float32_multi_array_stamped.hpp" #include "autoware_planning_msgs/msg/trajectory.hpp" #include "geometry_msgs/msg/pose_stamped.hpp" #include "nav_msgs/msg/odometry.hpp" #include "tf2_msgs/msg/tf_message.hpp" -#include "tier4_debug_msgs/msg/float32_multi_array_stamped.hpp" #include "visualization_msgs/msg/marker.hpp" #include @@ -98,8 +98,10 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro rclcpp::Clock::SharedPtr clock_; rclcpp::Logger logger_; // ros variables - rclcpp::Publisher::SharedPtr m_pub_slope; - rclcpp::Publisher::SharedPtr m_pub_debug; + rclcpp::Publisher::SharedPtr + m_pub_slope; + rclcpp::Publisher::SharedPtr + m_pub_debug; rclcpp::Publisher::SharedPtr m_pub_virtual_wall_marker; rclcpp::Node::OnSetParametersCallbackHandle::SharedPtr m_set_param_res; diff --git a/control/autoware_pid_longitudinal_controller/package.xml b/control/autoware_pid_longitudinal_controller/package.xml index 67e95a9d4c0ac..127ce8e76d69d 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_internal_debug_msgs autoware_interpolation autoware_motion_utils autoware_planning_msgs @@ -37,7 +38,6 @@ std_msgs tf2 tf2_ros - tier4_debug_msgs 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 ec95ce656fa6f..c87e936de3e40 100644 --- a/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp +++ b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp @@ -214,9 +214,9 @@ PidLongitudinalController::PidLongitudinalController( : node.declare_parameter("ego_nearest_yaw_threshold"); // [rad] // subscriber, publisher - m_pub_slope = node.create_publisher( + m_pub_slope = node.create_publisher( "~/output/slope_angle", rclcpp::QoS{1}); - m_pub_debug = node.create_publisher( + m_pub_debug = node.create_publisher( "~/output/longitudinal_diagnostic", rclcpp::QoS{1}); m_pub_virtual_wall_marker = node.create_publisher("~/virtual_wall", 1); @@ -931,7 +931,7 @@ void PidLongitudinalController::publishDebugData( m_debug_values.setValues(DebugValues::TYPE::ACC_CMD_PUBLISHED, ctrl_cmd.acc); // publish debug values - tier4_debug_msgs::msg::Float32MultiArrayStamped debug_msg{}; + autoware_internal_debug_msgs::msg::Float32MultiArrayStamped debug_msg{}; debug_msg.stamp = clock_->now(); for (const auto & v : m_debug_values.getValues()) { debug_msg.data.push_back(static_cast(v)); @@ -939,7 +939,7 @@ void PidLongitudinalController::publishDebugData( m_pub_debug->publish(debug_msg); // slope angle - tier4_debug_msgs::msg::Float32MultiArrayStamped slope_msg{}; + autoware_internal_debug_msgs::msg::Float32MultiArrayStamped slope_msg{}; slope_msg.stamp = clock_->now(); slope_msg.data.push_back( static_cast(control_data.slope_angle)); From 0b73c13206e4185b0182a8ec11710e7c17959006 Mon Sep 17 00:00:00 2001 From: Vishal Chauhan <40782713+vish0012@users.noreply.github.com> Date: Fri, 10 Jan 2025 01:52:55 +0900 Subject: [PATCH 75/77] =?UTF-8?q?feat:=20tier4=5Fdebug=5Fmsgs=20changed=20?= =?UTF-8?q?to=20autoware=5Finternal=5Fdebug=5Fmsgs=20in=20fil=E2=80=A6=20(?= =?UTF-8?q?#9846)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: tier4_debug_msgs changed to autoware_internal_debug_msgs in files ontrol/autoware_mpc_lateral_controller Signed-off-by: vish0012 * style(pre-commit): autofix --------- Signed-off-by: vish0012 Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../lane_departure_checker_node.hpp | 5 +++-- control/autoware_lane_departure_checker/package.xml | 2 +- .../lane_departure_checker_node.cpp | 12 +++++++----- .../include/autoware/mpc_lateral_controller/mpc.hpp | 4 ++-- .../mpc_lateral_controller.hpp | 8 ++++---- control/autoware_mpc_lateral_controller/package.xml | 2 +- .../test/test_mpc.cpp | 4 ++-- 7 files changed, 20 insertions(+), 17 deletions(-) diff --git a/control/autoware_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 index 7e2229d7b5754..4d99b1a134b3a 100644 --- a/control/autoware_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 @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -31,7 +32,6 @@ #include #include #include -#include #include #include @@ -115,7 +115,8 @@ class LaneDepartureCheckerNode : public rclcpp::Node autoware::universe_utils::DebugPublisher debug_publisher_{this, "~/debug"}; autoware::universe_utils::ProcessingTimePublisher processing_diag_publisher_{ this, "~/debug/processing_time_ms_diag"}; - rclcpp::Publisher::SharedPtr processing_time_publisher_; + rclcpp::Publisher::SharedPtr + processing_time_publisher_; // Timer rclcpp::TimerBase::SharedPtr timer_; diff --git a/control/autoware_lane_departure_checker/package.xml b/control/autoware_lane_departure_checker/package.xml index 2689b4a4dbcb7..97ad5eaf82e00 100644 --- a/control/autoware_lane_departure_checker/package.xml +++ b/control/autoware_lane_departure_checker/package.xml @@ -14,6 +14,7 @@ autoware_cmake autoware_adapi_v1_msgs + autoware_internal_debug_msgs autoware_lanelet2_extension autoware_map_msgs autoware_motion_utils @@ -32,7 +33,6 @@ tf2_eigen tf2_geometry_msgs tf2_ros - tier4_debug_msgs ament_cmake_ros ament_lint_auto diff --git a/control/autoware_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 index 366b84a1f6131..d9775415d3ed3 100644 --- a/control/autoware_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 @@ -171,7 +171,8 @@ LaneDepartureCheckerNode::LaneDepartureCheckerNode(const rclcpp::NodeOptions & o // Publisher processing_time_publisher_ = - this->create_publisher("~/debug/processing_time_ms", 1); + this->create_publisher( + "~/debug/processing_time_ms", 1); // Nothing // Diagnostic Updater @@ -342,10 +343,11 @@ void LaneDepartureCheckerNode::onTimer() { const auto & deviation = output_.trajectory_deviation; - debug_publisher_.publish( + debug_publisher_.publish( "deviation/lateral", deviation.lateral); - debug_publisher_.publish("deviation/yaw", deviation.yaw); - debug_publisher_.publish( + debug_publisher_.publish( + "deviation/yaw", deviation.yaw); + debug_publisher_.publish( "deviation/yaw_deg", rad2deg(deviation.yaw)); } processing_time_map["Node: publishTrajectoryDeviation"] = stop_watch.toc(true); @@ -361,7 +363,7 @@ void LaneDepartureCheckerNode::onTimer() processing_time_map["Total"] = stop_watch.toc("Total"); processing_diag_publisher_.publish(processing_time_map); - tier4_debug_msgs::msg::Float64Stamped processing_time_msg; + autoware_internal_debug_msgs::msg::Float64Stamped processing_time_msg; processing_time_msg.stamp = get_clock()->now(); processing_time_msg.data = processing_time_map["Total"]; processing_time_publisher_->publish(processing_time_msg); diff --git a/control/autoware_mpc_lateral_controller/include/autoware/mpc_lateral_controller/mpc.hpp b/control/autoware_mpc_lateral_controller/include/autoware/mpc_lateral_controller/mpc.hpp index 4c8d5df2c22a7..166dfa1814562 100644 --- a/control/autoware_mpc_lateral_controller/include/autoware/mpc_lateral_controller/mpc.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware/mpc_lateral_controller/mpc.hpp @@ -24,11 +24,11 @@ #include "rclcpp/rclcpp.hpp" #include "autoware_control_msgs/msg/lateral.hpp" +#include "autoware_internal_debug_msgs/msg/float32_multi_array_stamped.hpp" #include "autoware_planning_msgs/msg/trajectory.hpp" #include "autoware_vehicle_msgs/msg/steering_report.hpp" #include "geometry_msgs/msg/pose.hpp" #include "nav_msgs/msg/odometry.hpp" -#include "tier4_debug_msgs/msg/float32_multi_array_stamped.hpp" #include #include @@ -41,11 +41,11 @@ namespace autoware::motion::control::mpc_lateral_controller using autoware::motion::control::trajectory_follower::LateralHorizon; using autoware_control_msgs::msg::Lateral; +using autoware_internal_debug_msgs::msg::Float32MultiArrayStamped; using autoware_planning_msgs::msg::Trajectory; using autoware_vehicle_msgs::msg::SteeringReport; using geometry_msgs::msg::Pose; using nav_msgs::msg::Odometry; -using tier4_debug_msgs::msg::Float32MultiArrayStamped; using Eigen::MatrixXd; using Eigen::VectorXd; 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 d7442f64b028a..0f3004775e5bd 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 @@ -26,13 +26,13 @@ #include #include "autoware_control_msgs/msg/lateral.hpp" +#include "autoware_internal_debug_msgs/msg/float32_multi_array_stamped.hpp" +#include "autoware_internal_debug_msgs/msg/float32_stamped.hpp" #include "autoware_planning_msgs/msg/trajectory.hpp" #include "autoware_vehicle_msgs/msg/steering_report.hpp" #include "geometry_msgs/msg/pose.hpp" #include "geometry_msgs/msg/pose_stamped.hpp" #include "nav_msgs/msg/odometry.hpp" -#include "tier4_debug_msgs/msg/float32_multi_array_stamped.hpp" -#include "tier4_debug_msgs/msg/float32_stamped.hpp" #include #include @@ -45,11 +45,11 @@ namespace autoware::motion::control::mpc_lateral_controller namespace trajectory_follower = ::autoware::motion::control::trajectory_follower; using autoware_control_msgs::msg::Lateral; +using autoware_internal_debug_msgs::msg::Float32MultiArrayStamped; +using autoware_internal_debug_msgs::msg::Float32Stamped; using autoware_planning_msgs::msg::Trajectory; using autoware_vehicle_msgs::msg::SteeringReport; using nav_msgs::msg::Odometry; -using tier4_debug_msgs::msg::Float32MultiArrayStamped; -using tier4_debug_msgs::msg::Float32Stamped; using trajectory_follower::LateralHorizon; class MpcLateralController : public trajectory_follower::LateralControllerBase diff --git a/control/autoware_mpc_lateral_controller/package.xml b/control/autoware_mpc_lateral_controller/package.xml index b450af05ea0e1..719d11ef7948b 100644 --- a/control/autoware_mpc_lateral_controller/package.xml +++ b/control/autoware_mpc_lateral_controller/package.xml @@ -19,6 +19,7 @@ autoware_cmake autoware_control_msgs + autoware_internal_debug_msgs autoware_interpolation autoware_motion_utils autoware_osqp_interface @@ -36,7 +37,6 @@ std_msgs tf2 tf2_ros - tier4_debug_msgs ament_cmake_ros ament_lint_auto diff --git a/control/autoware_mpc_lateral_controller/test/test_mpc.cpp b/control/autoware_mpc_lateral_controller/test/test_mpc.cpp index 9c30369305f6e..0a34302f8f60c 100644 --- a/control/autoware_mpc_lateral_controller/test/test_mpc.cpp +++ b/control/autoware_mpc_lateral_controller/test/test_mpc.cpp @@ -24,11 +24,11 @@ #include #include "autoware_control_msgs/msg/lateral.hpp" +#include "autoware_internal_debug_msgs/msg/float32_multi_array_stamped.hpp" #include "autoware_planning_msgs/msg/trajectory.hpp" #include "autoware_planning_msgs/msg/trajectory_point.hpp" #include "autoware_vehicle_msgs/msg/steering_report.hpp" #include "geometry_msgs/msg/pose.hpp" -#include "tier4_debug_msgs/msg/float32_multi_array_stamped.hpp" #ifdef ROS_DISTRO_GALACTIC #include "tf2_geometry_msgs/tf2_geometry_msgs.h" @@ -45,12 +45,12 @@ namespace autoware::motion::control::mpc_lateral_controller using autoware::motion::control::trajectory_follower::LateralHorizon; using autoware_control_msgs::msg::Lateral; +using autoware_internal_debug_msgs::msg::Float32MultiArrayStamped; using autoware_planning_msgs::msg::Trajectory; using autoware_planning_msgs::msg::TrajectoryPoint; using autoware_vehicle_msgs::msg::SteeringReport; using geometry_msgs::msg::Pose; using geometry_msgs::msg::PoseStamped; -using tier4_debug_msgs::msg::Float32MultiArrayStamped; TrajectoryPoint makePoint(const double x, const double y, const float vx) { From 4dc720114dab3d07989b365bdd64be84bf5f4b60 Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Fri, 10 Jan 2025 10:20:00 +0900 Subject: [PATCH 76/77] refactor(lane_change): refactor transit failure function (#9835) * refactor(lane_change): refactor transit failure function Signed-off-by: Zulfaqar Azmi * fixed failed scenario Signed-off-by: Zulfaqar Azmi * remove is abort from debug Signed-off-by: Zulfaqar Azmi * set is abort state Signed-off-by: Zulfaqar Azmi * add comments for clarity Signed-off-by: Zulfaqar Azmi * include what you use. Signed-off-by: Zulfaqar Azmi --------- Signed-off-by: Zulfaqar Azmi --- .../interface.hpp | 5 + .../structs/data.hpp | 1 + .../structs/debug.hpp | 8 +- .../utils/markers.hpp | 8 +- .../src/interface.cpp | 154 ++++++++---------- .../src/scene.cpp | 19 +-- .../src/utils/markers.cpp | 41 +++-- 7 files changed, 111 insertions(+), 125 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/interface.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/interface.hpp index a69ae0d92647a..4b97fb0d069a0 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/interface.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/interface.hpp @@ -35,6 +35,7 @@ #include #include #include +#include namespace autoware::behavior_path_planner { @@ -120,6 +121,8 @@ class LaneChangeInterface : public SceneModuleInterface } } + std::pair check_transit_failure(); + void updateDebugMarker() const; void updateSteeringFactorPtr(const BehaviorModuleOutput & output); @@ -134,6 +137,8 @@ class LaneChangeInterface : public SceneModuleInterface bool is_abort_path_approved_{false}; bool is_abort_approval_requested_{false}; + + lane_change::InterfaceDebug interface_debug_; }; } // namespace autoware::behavior_path_planner diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/data.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/data.hpp index d5bbfe25fe1e9..9e6b9d229d2f2 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/data.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/data.hpp @@ -48,6 +48,7 @@ enum class States { Cancel, Abort, Stop, + Warning, }; struct PhaseInfo diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/debug.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/debug.hpp index 90b13f86976b2..1541846841f20 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/debug.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/structs/debug.hpp @@ -58,7 +58,6 @@ struct Debug double distance_to_abort_finished{std::numeric_limits::max()}; bool is_able_to_return_to_current_lane{true}; bool is_stuck{false}; - bool is_abort{false}; void reset() { @@ -83,9 +82,14 @@ struct Debug distance_to_abort_finished = std::numeric_limits::max(); is_able_to_return_to_current_lane = true; is_stuck = false; - is_abort = false; } }; + +struct InterfaceDebug +{ + std::string_view failing_reason; + LaneChangeStates lc_state; +}; } // namespace autoware::behavior_path_planner::lane_change #endif // AUTOWARE__BEHAVIOR_PATH_LANE_CHANGE_MODULE__STRUCTS__DEBUG_HPP_ diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/markers.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/markers.hpp index 059db8e38300f..a9ea35cb9b83e 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/markers.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/markers.hpp @@ -32,6 +32,7 @@ namespace marker_utils::lane_change_markers using autoware::behavior_path_planner::FilteredLanesObjects; using autoware::behavior_path_planner::LaneChangePath; using autoware::behavior_path_planner::lane_change::Debug; +using autoware::behavior_path_planner::lane_change::InterfaceDebug; using autoware::behavior_path_planner::utils::path_safety_checker::ExtendedPredictedObjects; using visualization_msgs::msg::MarkerArray; MarkerArray showAllValidLaneChangePath( @@ -42,9 +43,12 @@ MarkerArray createLaneChangingVirtualWallMarker( MarkerArray showFilteredObjects( const FilteredLanesObjects & filtered_objects, const std::string & ns); MarkerArray createExecutionArea(const geometry_msgs::msg::Polygon & execution_area); -MarkerArray showExecutionInfo(const Debug & debug_data, const geometry_msgs::msg::Pose & ego_pose); +MarkerArray showExecutionInfo( + const InterfaceDebug & interface_debug_data, const Debug & scene_debug_data, + const geometry_msgs::msg::Pose & ego_pose); MarkerArray createDebugMarkerArray( - const Debug & debug_data, const geometry_msgs::msg::Pose & ego_pose); + const InterfaceDebug & interface_debug_data, const Debug & scene_debug_data, + const geometry_msgs::msg::Pose & ego_pose); } // namespace marker_utils::lane_change_markers #endif // AUTOWARE__BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__MARKERS_HPP_ diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp index 9f3c6c9ef48bf..ebcd4eb4809fc 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp @@ -139,9 +139,8 @@ BehaviorModuleOutput LaneChangeInterface::plan() const auto force_activated = std::any_of( rtc_interface_ptr_map_.begin(), rtc_interface_ptr_map_.end(), [&](const auto & rtc) { return rtc.second->isForceActivated(uuid_map_.at(rtc.first)); }); - const bool safe = force_activated ? false : true; updateRTCStatus( - path.start_distance_to_path_change, path.finish_distance_to_path_change, safe, + path.start_distance_to_path_change, path.finish_distance_to_path_change, !force_activated, State::RUNNING); } } @@ -220,9 +219,7 @@ bool LaneChangeInterface::canTransitSuccessState() if (module_type_->specialExpiredCheck() && isWaitingApproval()) { log_debug_throttled("Run specialExpiredCheck."); - if (isWaitingApproval()) { - return true; - } + return true; } if (module_type_->hasFinishedLaneChange()) { @@ -237,13 +234,6 @@ bool LaneChangeInterface::canTransitSuccessState() bool LaneChangeInterface::canTransitFailureState() { - auto log_debug_throttled = [&](std::string_view message) -> void { - RCLCPP_DEBUG(getLogger(), "%s", message.data()); - }; - - updateDebugMarker(); - log_debug_throttled(__func__); - const auto force_activated = std::any_of( rtc_interface_ptr_map_.begin(), rtc_interface_ptr_map_.end(), [&](const auto & rtc) { return rtc.second->isForceActivated(uuid_map_.at(rtc.first)); }); @@ -253,121 +243,106 @@ bool LaneChangeInterface::canTransitFailureState() return false; } - if (module_type_->isAbortState() && !module_type_->hasFinishedAbort()) { - log_debug_throttled("Abort process has on going."); - return false; - } + const auto [state, reason] = check_transit_failure(); - if (isWaitingApproval()) { - if (module_type_->is_near_regulatory_element()) { - log_debug_throttled("Ego is close to regulatory element. Cancel lane change"); - updateRTCStatus( - std::numeric_limits::lowest(), std::numeric_limits::lowest(), true, - State::FAILED); - return true; - } - log_debug_throttled("Can't transit to failure state. Module is WAITING_FOR_APPROVAL"); - return false; - } + interface_debug_.failing_reason = reason; + interface_debug_.lc_state = state; - if (!module_type_->isValidPath()) { - log_debug_throttled("Transit to failure state due not to find valid path"); + updateDebugMarker(); + + if (state == LaneChangeStates::Cancel) { updateRTCStatus( std::numeric_limits::lowest(), std::numeric_limits::lowest(), true, State::FAILED); + module_type_->toCancelState(); return true; } - if (module_type_->isAbortState() && module_type_->hasFinishedAbort()) { - log_debug_throttled("Abort process has completed."); - updateRTCStatus( - std::numeric_limits::lowest(), std::numeric_limits::lowest(), true, - State::FAILED); - return true; + if (state == LaneChangeStates::Abort) { + module_type_->toAbortState(); + return false; } - if (module_type_->is_near_terminal()) { - log_debug_throttled("Unsafe, but ego is approaching terminal. Continue lane change"); + // Note: Ideally, if it is unsafe, but for some reason, we can't abort or cancel, then we should + // stop. Note: This feature is not working properly for now. + const auto [is_safe, unsafe_trailing_obj] = post_process_safety_status_; + if (!is_safe && module_type_->isRequiredStop(unsafe_trailing_obj)) { + module_type_->toStopState(); + return false; + } + + module_type_->toNormalState(); + return false; +} - if (module_type_->isRequiredStop(post_process_safety_status_.is_trailing_object)) { - log_debug_throttled("Module require stopping"); +std::pair LaneChangeInterface::check_transit_failure() +{ + if (module_type_->isAbortState()) { + if (module_type_->hasFinishedAbort()) { + return {LaneChangeStates::Cancel, "Aborted"}; } - return false; + return {LaneChangeStates::Abort, "Aborting"}; } - if (module_type_->isCancelEnabled() && module_type_->isEgoOnPreparePhase()) { - if (module_type_->isStoppedAtRedTrafficLight()) { - log_debug_throttled("Stopping at traffic light while in prepare phase. Cancel lane change"); - module_type_->toCancelState(); - updateRTCStatus( - std::numeric_limits::lowest(), std::numeric_limits::lowest(), true, - State::FAILED); - return true; + if (isWaitingApproval()) { + if (module_type_->is_near_regulatory_element()) { + return {LaneChangeStates::Cancel, "CloseToRegElement"}; } + return {LaneChangeStates::Normal, "WaitingForApproval"}; + } + if (!module_type_->isValidPath()) { + return {LaneChangeStates::Cancel, "InvalidPath"}; + } + + const auto is_preparing = module_type_->isEgoOnPreparePhase(); + const auto can_return_to_current = module_type_->isAbleToReturnCurrentLane(); + + // regardless of safe and unsafe, we want to cancel lane change. + if (is_preparing) { const auto force_deactivated = std::any_of( rtc_interface_ptr_map_.begin(), rtc_interface_ptr_map_.end(), [&](const auto & rtc) { return rtc.second->isForceDeactivated(uuid_map_.at(rtc.first)); }); - if (force_deactivated && module_type_->isAbleToReturnCurrentLane()) { - log_debug_throttled("Cancel lane change due to force deactivation"); - module_type_->toCancelState(); - updateRTCStatus( - std::numeric_limits::lowest(), std::numeric_limits::lowest(), true, - State::FAILED); - return true; - } - - if (post_process_safety_status_.is_safe) { - log_debug_throttled("Can't transit to failure state. Ego is on prepare, and it's safe."); - return false; - } - - if (module_type_->isAbleToReturnCurrentLane()) { - log_debug_throttled("It's possible to return to current lane. Cancel lane change."); - updateRTCStatus( - std::numeric_limits::lowest(), std::numeric_limits::lowest(), true, - State::FAILED); - return true; + if (force_deactivated && can_return_to_current) { + return {LaneChangeStates::Cancel, "ForceDeactivation"}; } } if (post_process_safety_status_.is_safe) { - log_debug_throttled("Can't transit to failure state. Ego is lane changing, and it's safe."); - return false; + return {LaneChangeStates::Normal, "SafeToLaneChange"}; } - if (module_type_->isRequiredStop(post_process_safety_status_.is_trailing_object)) { - log_debug_throttled("Module require stopping"); + if (!module_type_->isCancelEnabled()) { + return {LaneChangeStates::Warning, "CancelDisabled"}; } - if (!module_type_->isCancelEnabled()) { - log_debug_throttled( - "Lane change path is unsafe but cancel was not enabled. Continue lane change."); - return false; + // We also check if the ego can return to the current lane, as prepare segment might be out of the + // lane, for example, during an evasive maneuver around a static object. + if (is_preparing && can_return_to_current) { + return {LaneChangeStates::Cancel, "SafeToCancel"}; + } + + if (module_type_->is_near_terminal()) { + return {LaneChangeStates::Warning, "TooNearTerminal"}; } if (!module_type_->isAbortEnabled()) { - log_debug_throttled( - "Lane change path is unsafe but abort was not enabled. Continue lane change."); - return false; + return {LaneChangeStates::Warning, "AbortDisabled"}; } - if (!module_type_->isAbleToReturnCurrentLane()) { - log_debug_throttled("It's is not possible to return to original lane. Continue lane change."); - return false; + // To prevent the lane module from having to check rear objects in the current lane, we limit the + // abort maneuver to cases where the ego vehicle is still in the current lane. + if (!can_return_to_current) { + return {LaneChangeStates::Warning, "TooLateToAbort"}; } const auto found_abort_path = module_type_->calcAbortPath(); if (!found_abort_path) { - log_debug_throttled( - "Lane change path is unsafe but abort path not found. Continue lane change."); - return false; + return {LaneChangeStates::Warning, "AbortPathNotFound"}; } - log_debug_throttled("Lane change path is unsafe. Abort lane change."); - module_type_->toAbortState(); - return false; + return {LaneChangeStates::Abort, "SafeToAbort"}; } void LaneChangeInterface::updateDebugMarker() const @@ -377,7 +352,8 @@ void LaneChangeInterface::updateDebugMarker() const return; } using marker_utils::lane_change_markers::createDebugMarkerArray; - debug_marker_ = createDebugMarkerArray(module_type_->getDebugData(), module_type_->getEgoPose()); + debug_marker_ = createDebugMarkerArray( + interface_debug_, module_type_->getDebugData(), module_type_->getEgoPose()); } MarkerArray LaneChangeInterface::getModuleVirtualWall() diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp index 2719239baaed8..09a4216bf5857 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp @@ -892,7 +892,6 @@ bool NormalLaneChange::isAbleToStopSafely() const bool NormalLaneChange::hasFinishedAbort() const { if (!abort_path_) { - lane_change_debug_.is_abort = true; return true; } @@ -901,7 +900,6 @@ bool NormalLaneChange::hasFinishedAbort() const lane_change_debug_.distance_to_abort_finished = distance_to_finish; const auto has_finished_abort = distance_to_finish < 0.0; - lane_change_debug_.is_abort = has_finished_abort; return has_finished_abort; } @@ -916,12 +914,7 @@ bool NormalLaneChange::isAbortState() const return false; } - if (!abort_path_) { - return false; - } - - lane_change_debug_.is_abort = true; - return true; + return abort_path_ != nullptr; } int NormalLaneChange::getNumToPreferredLane(const lanelet::ConstLanelet & lane) const @@ -1491,14 +1484,8 @@ bool NormalLaneChange::isValidPath(const PathWithLaneId & path) const bool NormalLaneChange::isRequiredStop(const bool is_trailing_object) { universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); - if ( - common_data_ptr_->transient_data.is_ego_near_current_terminal_start && isAbleToStopSafely() && - is_trailing_object) { - current_lane_change_state_ = LaneChangeStates::Stop; - return true; - } - current_lane_change_state_ = LaneChangeStates::Normal; - return false; + return common_data_ptr_->transient_data.is_ego_near_current_terminal_start && + isAbleToStopSafely() && is_trailing_object; } bool NormalLaneChange::calcAbortPath() diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/markers.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/markers.cpp index da9ee52b038c6..eb120e006a229 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/markers.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/markers.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -164,7 +165,9 @@ MarkerArray showFilteredObjects( return marker_array; } -MarkerArray showExecutionInfo(const Debug & debug_data, const geometry_msgs::msg::Pose & ego_pose) +MarkerArray showExecutionInfo( + const InterfaceDebug & interface_debug_data, const Debug & scene_debug_data, + const geometry_msgs::msg::Pose & ego_pose) { auto default_text_marker = [&]() { return createDefaultMarker( @@ -177,11 +180,15 @@ MarkerArray showExecutionInfo(const Debug & debug_data, const geometry_msgs::msg auto safety_check_info_text = default_text_marker(); safety_check_info_text.pose = ego_pose; safety_check_info_text.pose.position.z += 4.0; + const auto lc_state = interface_debug_data.lc_state; + const auto & failing_reason = interface_debug_data.failing_reason; safety_check_info_text.text = fmt::format( - "{stuck} | {return_lane} | {abort}", fmt::arg("stuck", debug_data.is_stuck ? "is stuck" : ""), - fmt::arg("return_lane", debug_data.is_able_to_return_to_current_lane ? "" : "can't return"), - fmt::arg("abort", debug_data.is_abort ? "aborting" : "")); + "{stuck} | {return_lane} | {state} : {reason}", + fmt::arg("stuck", scene_debug_data.is_stuck ? "is stuck" : ""), + fmt::arg( + "return_lane", scene_debug_data.is_able_to_return_to_current_lane ? "" : "can't return"), + fmt::arg("state", magic_enum::enum_name(lc_state)), fmt::arg("reason", failing_reason)); marker_array.markers.push_back(safety_check_info_text); return marker_array; } @@ -227,7 +234,8 @@ MarkerArray ShowLaneChangeMetricsInfo( } MarkerArray createDebugMarkerArray( - const Debug & debug_data, const geometry_msgs::msg::Pose & ego_pose) + const InterfaceDebug & interface_debug_data, const Debug & scene_debug_data, + const geometry_msgs::msg::Pose & ego_pose) { using lanelet::visualization::laneletsAsTriangleMarkerArray; using marker_utils::showPolygon; @@ -236,31 +244,32 @@ MarkerArray createDebugMarkerArray( using marker_utils::lane_change_markers::showAllValidLaneChangePath; using marker_utils::lane_change_markers::showFilteredObjects; - const auto & debug_collision_check_object = debug_data.collision_check_objects; + const auto & debug_collision_check_object = scene_debug_data.collision_check_objects; const auto & debug_collision_check_object_after_approval = - debug_data.collision_check_objects_after_approval; - const auto & debug_valid_paths = debug_data.valid_paths; - const auto & debug_filtered_objects = debug_data.filtered_objects; + scene_debug_data.collision_check_objects_after_approval; + const auto & debug_valid_paths = scene_debug_data.valid_paths; + const auto & debug_filtered_objects = scene_debug_data.filtered_objects; MarkerArray debug_marker; const auto add = [&debug_marker](const MarkerArray & added) { autoware::universe_utils::appendMarkerArray(added, &debug_marker); }; - if (!debug_data.execution_area.points.empty()) { + if (!scene_debug_data.execution_area.points.empty()) { add(createPolygonMarkerArray( - debug_data.execution_area, "execution_area", 0, 0.16, 1.0, 0.69, 0.1)); + scene_debug_data.execution_area, "execution_area", 0, 0.16, 1.0, 0.69, 0.1)); } - add(showExecutionInfo(debug_data, ego_pose)); - add(ShowLaneChangeMetricsInfo(debug_data, ego_pose)); + add(showExecutionInfo(interface_debug_data, scene_debug_data, ego_pose)); + add(ShowLaneChangeMetricsInfo(scene_debug_data, ego_pose)); // lanes add(laneletsAsTriangleMarkerArray( - "current_lanes", debug_data.current_lanes, colors::light_yellow(0.2))); - add(laneletsAsTriangleMarkerArray("target_lanes", debug_data.target_lanes, colors::aqua(0.2))); + "current_lanes", scene_debug_data.current_lanes, colors::light_yellow(0.2))); add(laneletsAsTriangleMarkerArray( - "target_backward_lanes", debug_data.target_backward_lanes, colors::blue(0.2))); + "target_lanes", scene_debug_data.target_lanes, colors::aqua(0.2))); + add(laneletsAsTriangleMarkerArray( + "target_backward_lanes", scene_debug_data.target_backward_lanes, colors::blue(0.2))); add(showAllValidLaneChangePath(debug_valid_paths, "lane_change_valid_paths")); add(showFilteredObjects(debug_filtered_objects, "object_filtered")); From 485ccc660cfacc0e939e3019b5cc13c0f25fd9ae Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara <32741405+kyoichi-sugahara@users.noreply.github.com> Date: Fri, 10 Jan 2025 16:05:23 +0900 Subject: [PATCH 77/77] refactor(lane_departure_checker): improve LaneDepartureChecker initialization and parameter handling (#9791) * refactor(lane_departure_checker): improve LaneDepartureChecker initialization and parameter handling Signed-off-by: kyoichi-sugahara --------- Signed-off-by: Kyoichi Sugahara --- .../CMakeLists.txt | 1 + .../lane_departure_checker.hpp | 73 ++------- .../lane_departure_checker_node.hpp | 16 +- .../lane_departure_checker/parameters.hpp | 101 +++++++++++++ .../lane_departure_checker_node.cpp | 35 +---- .../parameters.cpp | 59 ++++++++ .../examples/plot_map_case1.cpp | 7 +- .../examples/plot_map_case2.cpp | 5 +- .../src/goal_planner_module.cpp | 4 +- .../src/start_planner_module.cpp | 6 +- .../test/test_geometric_pull_out.cpp | 138 ++++++------------ .../test/test_shift_pull_out.cpp | 8 +- 12 files changed, 230 insertions(+), 223 deletions(-) create mode 100644 control/autoware_lane_departure_checker/include/autoware/lane_departure_checker/parameters.hpp create mode 100644 control/autoware_lane_departure_checker/src/lane_departure_checker_node/parameters.cpp diff --git a/control/autoware_lane_departure_checker/CMakeLists.txt b/control/autoware_lane_departure_checker/CMakeLists.txt index 199195fc88b08..19046a09922f0 100644 --- a/control/autoware_lane_departure_checker/CMakeLists.txt +++ b/control/autoware_lane_departure_checker/CMakeLists.txt @@ -14,6 +14,7 @@ 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 src/lane_departure_checker_node/utils.cpp + src/lane_departure_checker_node/parameters.cpp ) rclcpp_components_register_node(${PROJECT_NAME} diff --git a/control/autoware_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 index 1ac984394a25e..101338551cbf3 100644 --- a/control/autoware_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 @@ -15,15 +15,12 @@ #ifndef AUTOWARE__LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_HPP_ #define AUTOWARE__LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_HPP_ -#include -#include +#include "autoware/lane_departure_checker/parameters.hpp" + #include #include #include -#include -#include -#include #include #include #include @@ -48,81 +45,33 @@ namespace autoware::lane_departure_checker { -using autoware::universe_utils::LinearRing2d; -using autoware::universe_utils::PoseDeviation; using autoware::universe_utils::Segment2d; -using autoware_planning_msgs::msg::LaneletRoute; -using autoware_planning_msgs::msg::Trajectory; -using autoware_planning_msgs::msg::TrajectoryPoint; using tier4_planning_msgs::msg::PathWithLaneId; -using TrajectoryPoints = std::vector; typedef boost::geometry::index::rtree> SegmentRtree; -struct Param -{ - double footprint_margin_scale{0.0}; - double footprint_extra_margin{0.0}; - double resample_interval{0.0}; - double max_deceleration{0.0}; - double delay_time{0.0}; - double max_lateral_deviation{0.0}; - double max_longitudinal_deviation{0.0}; - double max_yaw_deviation_deg{0.0}; - double min_braking_distance{0.0}; - // nearest search to ego - double ego_nearest_dist_threshold{0.0}; - double ego_nearest_yaw_threshold{0.0}; -}; - -struct Input -{ - nav_msgs::msg::Odometry::ConstSharedPtr current_odom{}; - lanelet::LaneletMapPtr lanelet_map{}; - LaneletRoute::ConstSharedPtr route{}; - lanelet::ConstLanelets route_lanelets{}; - lanelet::ConstLanelets shoulder_lanelets{}; - Trajectory::ConstSharedPtr reference_trajectory{}; - Trajectory::ConstSharedPtr predicted_trajectory{}; - std::vector boundary_types_to_detect{}; -}; - -struct Output -{ - std::map processing_time_map{}; - bool will_leave_lane{}; - bool is_out_of_lane{}; - bool will_cross_boundary{}; - PoseDeviation trajectory_deviation{}; - lanelet::ConstLanelets candidate_lanelets{}; - TrajectoryPoints resampled_trajectory{}; - std::vector vehicle_footprints{}; - std::vector vehicle_passing_areas{}; -}; - class LaneDepartureChecker { public: - LaneDepartureChecker( + explicit LaneDepartureChecker( std::shared_ptr time_keeper = std::make_shared()) : time_keeper_(time_keeper) { } - Output update(const Input & input); - void setParam(const Param & param, const autoware::vehicle_info_utils::VehicleInfo vehicle_info) + LaneDepartureChecker( + const Param & param, const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, + std::shared_ptr time_keeper = + std::make_shared()) + : param_(param), + vehicle_info_ptr_(std::make_shared(vehicle_info)), + time_keeper_(time_keeper) { - param_ = param; - vehicle_info_ptr_ = std::make_shared(vehicle_info); } + Output update(const Input & input); void setParam(const Param & param) { param_ = param; } - void setVehicleInfo(const autoware::vehicle_info_utils::VehicleInfo vehicle_info) - { - vehicle_info_ptr_ = std::make_shared(vehicle_info); - } - bool checkPathWillLeaveLane( const lanelet::ConstLanelets & lanelets, const PathWithLaneId & path) const; diff --git a/control/autoware_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 index 4d99b1a134b3a..7aaf4816708bd 100644 --- a/control/autoware_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 @@ -16,6 +16,7 @@ #define AUTOWARE__LANE_DEPARTURE_CHECKER__LANE_DEPARTURE_CHECKER_NODE_HPP_ #include "autoware/lane_departure_checker/lane_departure_checker.hpp" +#include "autoware/lane_departure_checker/parameters.hpp" #include "autoware/universe_utils/ros/polling_subscriber.hpp" #include @@ -47,21 +48,6 @@ namespace autoware::lane_departure_checker { using autoware_map_msgs::msg::LaneletMapBin; -struct NodeParam -{ - bool will_out_of_lane_checker; - bool out_of_lane_checker; - bool boundary_departure_checker; - - double update_rate; - bool visualize_lanelet; - bool include_right_lanes; - bool include_left_lanes; - bool include_opposite_lanes; - bool include_conflicting_lanes; - std::vector boundary_types_to_detect; -}; - class LaneDepartureCheckerNode : public rclcpp::Node { public: diff --git a/control/autoware_lane_departure_checker/include/autoware/lane_departure_checker/parameters.hpp b/control/autoware_lane_departure_checker/include/autoware/lane_departure_checker/parameters.hpp new file mode 100644 index 0000000000000..425b032af425f --- /dev/null +++ b/control/autoware_lane_departure_checker/include/autoware/lane_departure_checker/parameters.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 AUTOWARE__LANE_DEPARTURE_CHECKER__PARAMETERS_HPP_ +#define AUTOWARE__LANE_DEPARTURE_CHECKER__PARAMETERS_HPP_ + +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include +#include +#include + +namespace autoware::lane_departure_checker +{ +using autoware::universe_utils::PoseDeviation; +using autoware_planning_msgs::msg::LaneletRoute; +using autoware_planning_msgs::msg::Trajectory; +using autoware_planning_msgs::msg::TrajectoryPoint; +using TrajectoryPoints = std::vector; +using autoware::universe_utils::LinearRing2d; + +struct Param +{ + static Param init(rclcpp::Node & node); + double footprint_margin_scale{}; + double footprint_extra_margin{}; + double resample_interval{}; + double max_deceleration{}; + double delay_time{}; + double max_lateral_deviation{}; + double max_longitudinal_deviation{}; + double max_yaw_deviation_deg{}; + double min_braking_distance{}; + // nearest search to ego + double ego_nearest_dist_threshold{}; + double ego_nearest_yaw_threshold{}; +}; + +struct NodeParam +{ + static NodeParam init(rclcpp::Node & node); + bool will_out_of_lane_checker{}; + bool out_of_lane_checker{}; + bool boundary_departure_checker{}; + + double update_rate{}; + bool visualize_lanelet{}; + bool include_right_lanes{}; + bool include_left_lanes{}; + bool include_opposite_lanes{}; + bool include_conflicting_lanes{}; + std::vector boundary_types_to_detect{}; +}; + +struct Input +{ + nav_msgs::msg::Odometry::ConstSharedPtr current_odom{}; + lanelet::LaneletMapPtr lanelet_map{}; + LaneletRoute::ConstSharedPtr route{}; + lanelet::ConstLanelets route_lanelets{}; + lanelet::ConstLanelets shoulder_lanelets{}; + Trajectory::ConstSharedPtr reference_trajectory{}; + Trajectory::ConstSharedPtr predicted_trajectory{}; + std::vector boundary_types_to_detect{}; +}; + +struct Output +{ + std::map processing_time_map{}; + bool will_leave_lane{}; + bool is_out_of_lane{}; + bool will_cross_boundary{}; + PoseDeviation trajectory_deviation{}; + lanelet::ConstLanelets candidate_lanelets{}; + TrajectoryPoints resampled_trajectory{}; + std::vector vehicle_footprints{}; + std::vector vehicle_passing_areas{}; +}; +} // namespace autoware::lane_departure_checker + +#endif // AUTOWARE__LANE_DEPARTURE_CHECKER__PARAMETERS_HPP_ diff --git a/control/autoware_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 index d9775415d3ed3..32384b7e6c7dd 100644 --- a/control/autoware_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 @@ -126,48 +126,19 @@ LaneDepartureCheckerNode::LaneDepartureCheckerNode(const rclcpp::NodeOptions & o : Node("lane_departure_checker_node", options) { using std::placeholders::_1; - - // Enable feature - node_param_.will_out_of_lane_checker = declare_parameter("will_out_of_lane_checker"); - node_param_.out_of_lane_checker = declare_parameter("out_of_lane_checker"); - node_param_.boundary_departure_checker = declare_parameter("boundary_departure_checker"); - - // Node Parameter - node_param_.update_rate = declare_parameter("update_rate"); - node_param_.visualize_lanelet = declare_parameter("visualize_lanelet"); - node_param_.include_right_lanes = declare_parameter("include_right_lanes"); - node_param_.include_left_lanes = declare_parameter("include_left_lanes"); - node_param_.include_opposite_lanes = declare_parameter("include_opposite_lanes"); - node_param_.include_conflicting_lanes = declare_parameter("include_conflicting_lanes"); - - // Boundary_departure_checker - node_param_.boundary_types_to_detect = - declare_parameter>("boundary_types_to_detect"); + node_param_ = NodeParam::init(*this); + param_ = Param::init(*this); // Vehicle Info const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo(); vehicle_length_m_ = vehicle_info.vehicle_length_m; - // Core Parameter - param_.footprint_margin_scale = declare_parameter("footprint_margin_scale"); - param_.footprint_extra_margin = declare_parameter("footprint_extra_margin"); - param_.resample_interval = declare_parameter("resample_interval"); - param_.max_deceleration = declare_parameter("max_deceleration"); - param_.delay_time = declare_parameter("delay_time"); - param_.max_lateral_deviation = declare_parameter("max_lateral_deviation"); - param_.max_longitudinal_deviation = declare_parameter("max_longitudinal_deviation"); - param_.max_yaw_deviation_deg = declare_parameter("max_yaw_deviation_deg"); - param_.ego_nearest_dist_threshold = declare_parameter("ego_nearest_dist_threshold"); - param_.ego_nearest_yaw_threshold = declare_parameter("ego_nearest_yaw_threshold"); - param_.min_braking_distance = declare_parameter("min_braking_distance"); - // Parameter Callback set_param_res_ = add_on_set_parameters_callback(std::bind(&LaneDepartureCheckerNode::onParameter, this, _1)); // Core - lane_departure_checker_ = std::make_unique(); - lane_departure_checker_->setParam(param_, vehicle_info); + lane_departure_checker_ = std::make_unique(param_, vehicle_info); // Publisher processing_time_publisher_ = diff --git a/control/autoware_lane_departure_checker/src/lane_departure_checker_node/parameters.cpp b/control/autoware_lane_departure_checker/src/lane_departure_checker_node/parameters.cpp new file mode 100644 index 0000000000000..f3aa23275e35c --- /dev/null +++ b/control/autoware_lane_departure_checker/src/lane_departure_checker_node/parameters.cpp @@ -0,0 +1,59 @@ +// 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 "autoware/lane_departure_checker/parameters.hpp" + +#include +#include + +#include + +namespace autoware::lane_departure_checker +{ +using autoware::universe_utils::getOrDeclareParameter; + +Param Param::init(rclcpp::Node & node) +{ + Param p; + p.footprint_margin_scale = getOrDeclareParameter(node, "footprint_margin_scale"); + p.footprint_extra_margin = getOrDeclareParameter(node, "footprint_extra_margin"); + p.resample_interval = getOrDeclareParameter(node, "resample_interval"); + p.max_deceleration = getOrDeclareParameter(node, "max_deceleration"); + p.delay_time = getOrDeclareParameter(node, "delay_time"); + p.max_lateral_deviation = getOrDeclareParameter(node, "max_lateral_deviation"); + p.max_longitudinal_deviation = getOrDeclareParameter(node, "max_longitudinal_deviation"); + p.max_yaw_deviation_deg = getOrDeclareParameter(node, "max_yaw_deviation_deg"); + p.min_braking_distance = getOrDeclareParameter(node, "min_braking_distance"); + p.ego_nearest_dist_threshold = getOrDeclareParameter(node, "ego_nearest_dist_threshold"); + p.ego_nearest_yaw_threshold = getOrDeclareParameter(node, "ego_nearest_yaw_threshold"); + return p; +} + +NodeParam NodeParam::init(rclcpp::Node & node) +{ + NodeParam p; + p.will_out_of_lane_checker = getOrDeclareParameter(node, "will_out_of_lane_checker"); + p.out_of_lane_checker = getOrDeclareParameter(node, "out_of_lane_checker"); + p.boundary_departure_checker = getOrDeclareParameter(node, "boundary_departure_checker"); + p.update_rate = getOrDeclareParameter(node, "update_rate"); + p.visualize_lanelet = getOrDeclareParameter(node, "visualize_lanelet"); + p.include_right_lanes = getOrDeclareParameter(node, "include_right_lanes"); + p.include_left_lanes = getOrDeclareParameter(node, "include_left_lanes"); + p.include_opposite_lanes = getOrDeclareParameter(node, "include_opposite_lanes"); + p.include_conflicting_lanes = getOrDeclareParameter(node, "include_conflicting_lanes"); + p.boundary_types_to_detect = + getOrDeclareParameter>(node, "boundary_types_to_detect"); + return p; +} +} // namespace autoware::lane_departure_checker diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case1.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case1.cpp index 46d3b97b71e58..6172fb75978cd 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case1.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case1.cpp @@ -564,13 +564,12 @@ int main(int argc, char ** argv) node.get(), "goal_planner."); goal_planner_parameter.bus_stop_area.use_bus_stop_area = true; goal_planner_parameter.lane_departure_check_expansion_margin = 0.2; - const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*node).getVehicleInfo(); - autoware::lane_departure_checker::LaneDepartureChecker lane_departure_checker{}; - lane_departure_checker.setVehicleInfo(vehicle_info); autoware::lane_departure_checker::Param lane_departure_checker_params; lane_departure_checker_params.footprint_extra_margin = goal_planner_parameter.lane_departure_check_expansion_margin; - lane_departure_checker.setParam(lane_departure_checker_params); + autoware::lane_departure_checker::LaneDepartureChecker lane_departure_checker( + lane_departure_checker_params, vehicle_info); + const auto footprint = vehicle_info.createFootprint(); autoware::behavior_path_planner::GoalSearcher goal_searcher(goal_planner_parameter, footprint); auto goal_candidates = goal_searcher.search(planner_data); diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case2.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case2.cpp index 3518b5041be53..f7fefa8ba9dc0 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case2.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/examples/plot_map_case2.cpp @@ -573,12 +573,11 @@ int main(int argc, char ** argv) autoware::behavior_path_planner::GoalPlannerModuleManager::initGoalPlannerParameters( node.get(), "goal_planner."); const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*node).getVehicleInfo(); - autoware::lane_departure_checker::LaneDepartureChecker lane_departure_checker{}; - lane_departure_checker.setVehicleInfo(vehicle_info); autoware::lane_departure_checker::Param lane_departure_checker_params; lane_departure_checker_params.footprint_extra_margin = goal_planner_parameter.lane_departure_check_expansion_margin; - lane_departure_checker.setParam(lane_departure_checker_params); + autoware::lane_departure_checker::LaneDepartureChecker lane_departure_checker( + lane_departure_checker_params, vehicle_info); const auto footprint = vehicle_info.createFootprint(); autoware::behavior_path_planner::GoalSearcher goal_searcher(goal_planner_parameter, footprint); auto goal_candidates = goal_searcher.search(planner_data); diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/goal_planner_module.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/goal_planner_module.cpp index 8272ddde0189e..96aeb5f5e4da8 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/goal_planner_module.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/goal_planner_module.cpp @@ -290,12 +290,10 @@ LaneParkingPlanner::LaneParkingPlanner( logger_(logger) { const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo(); - LaneDepartureChecker lane_departure_checker{}; - lane_departure_checker.setVehicleInfo(vehicle_info); lane_departure_checker::Param lane_departure_checker_params; lane_departure_checker_params.footprint_extra_margin = parameters.lane_departure_check_expansion_margin; - lane_departure_checker.setParam(lane_departure_checker_params); + LaneDepartureChecker lane_departure_checker(lane_departure_checker_params, vehicle_info); for (const std::string & planner_type : parameters.efficient_path_order) { if (planner_type == "SHIFT" && parameters.enable_shift_parking) { diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp index f45924b9542dc..83c1d55c7d022 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp @@ -68,13 +68,11 @@ StartPlannerModule::StartPlannerModule( vehicle_info_{autoware::vehicle_info_utils::VehicleInfoUtils(node).getVehicleInfo()}, is_freespace_planner_cb_running_{false} { - lane_departure_checker_ = std::make_shared(time_keeper_); - lane_departure_checker_->setVehicleInfo(vehicle_info_); autoware::lane_departure_checker::Param lane_departure_checker_params{}; lane_departure_checker_params.footprint_extra_margin = parameters->lane_departure_check_expansion_margin; - - lane_departure_checker_->setParam(lane_departure_checker_params); + lane_departure_checker_ = std::make_shared( + lane_departure_checker_params, vehicle_info_, time_keeper_); // set enabled planner if (parameters_->enable_shift_pull_out) { diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_geometric_pull_out.cpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_geometric_pull_out.cpp index dd8bb02c97dea..726c9ccc4c5d7 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_geometric_pull_out.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_geometric_pull_out.cpp @@ -24,9 +24,7 @@ #include -#include #include -#include #include #include @@ -44,7 +42,7 @@ namespace autoware::behavior_path_planner class TestGeometricPullOut : public ::testing::Test { public: - std::optional plan( + std::optional call_plan( const Pose & start_pose, const Pose & goal_pose, PlannerDebugData & planner_debug_data) { return geometric_pull_out_->plan(start_pose, goal_pose, planner_debug_data); @@ -54,27 +52,51 @@ class TestGeometricPullOut : public ::testing::Test void SetUp() override { rclcpp::init(0, nullptr); - node_ = rclcpp::Node::make_shared("geometric_pull_out", get_node_options()); + node_ = rclcpp::Node::make_shared("geometric_pull_out", make_node_options()); - load_parameters(); - initialize_vehicle_info(); initialize_lane_departure_checker(); - initialize_routeHandler(); initialize_geometric_pull_out_planner(); - initialize_planner_data(); } void TearDown() override { rclcpp::shutdown(); } + + PlannerData make_planner_data( + const Pose & start_pose, const int route_start_lane_id, const int route_goal_lane_id) + { + PlannerData planner_data; + planner_data.init_parameters(*node_); + + // Load a sample lanelet map and create a route handler + const auto shoulder_map_path = autoware::test_utils::get_absolute_path_to_lanelet_map( + "autoware_test_utils", "road_shoulder/lanelet2_map.osm"); + const auto map_bin_msg = autoware::test_utils::make_map_bin_msg(shoulder_map_path, 0.5); + auto route_handler = std::make_shared(map_bin_msg); + + // Set up current odometry at start pose + auto odometry = std::make_shared(); + odometry->pose.pose = start_pose; + odometry->header.frame_id = "map"; + planner_data.self_odometry = odometry; + + // Setup route + const auto route = makeBehaviorRouteFromLaneId( + route_start_lane_id, route_goal_lane_id, "autoware_test_utils", + "road_shoulder/lanelet2_map.osm"); + route_handler->setRoute(route); + + // Update planner data with the route handler + planner_data.route_handler = route_handler; + + return planner_data; + } + // Member variables std::shared_ptr node_; - std::shared_ptr route_handler_; - autoware::vehicle_info_utils::VehicleInfo vehicle_info_; std::shared_ptr geometric_pull_out_; std::shared_ptr lane_departure_checker_; - PlannerData planner_data_; private: - rclcpp::NodeOptions get_node_options() const + rclcpp::NodeOptions make_node_options() const { // Load common configuration files auto node_options = rclcpp::NodeOptions{}; @@ -102,84 +124,22 @@ class TestGeometricPullOut : public ::testing::Test return node_options; } - void load_parameters() - { - const auto dp_double = [&](const std::string & s) { - return node_->declare_parameter(s); - }; - const auto dp_bool = [&](const std::string & s) { return node_->declare_parameter(s); }; - // Load parameters required for planning - const std::string ns = "start_planner."; - lane_departure_check_expansion_margin_ = - dp_double(ns + "lane_departure_check_expansion_margin"); - pull_out_max_steer_angle_ = dp_double(ns + "pull_out_max_steer_angle"); - pull_out_arc_path_interval_ = dp_double(ns + "arc_path_interval"); - center_line_path_interval_ = dp_double(ns + "center_line_path_interval"); - th_moving_object_velocity_ = dp_double(ns + "th_moving_object_velocity"); - divide_pull_out_path_ = dp_bool(ns + "divide_pull_out_path"); - backward_path_length_ = dp_double("backward_path_length"); - forward_path_length_ = dp_double("forward_path_length"); - } - - void initialize_vehicle_info() - { - vehicle_info_ = autoware::vehicle_info_utils::VehicleInfoUtils(*node_).getVehicleInfo(); - } - void initialize_lane_departure_checker() { - lane_departure_checker_ = std::make_shared(); - lane_departure_checker_->setVehicleInfo(vehicle_info_); - autoware::lane_departure_checker::Param lane_departure_checker_params{}; - lane_departure_checker_params.footprint_extra_margin = lane_departure_check_expansion_margin_; - lane_departure_checker_->setParam(lane_departure_checker_params); - } - - void initialize_routeHandler() - { - // Load a sample lanelet map and create a route handler - const auto shoulder_map_path = autoware::test_utils::get_absolute_path_to_lanelet_map( - "autoware_test_utils", "road_shoulder/lanelet2_map.osm"); - const auto map_bin_msg = autoware::test_utils::make_map_bin_msg(shoulder_map_path, 0.5); - - route_handler_ = std::make_shared(map_bin_msg); + const auto vehicle_info = + autoware::vehicle_info_utils::VehicleInfoUtils(*node_).getVehicleInfo(); + lane_departure_checker_ = + std::make_shared(lane_departure_checker_params, vehicle_info); } void initialize_geometric_pull_out_planner() { - auto parameters = std::make_shared(); - parameters->parallel_parking_parameters.pull_out_max_steer_angle = pull_out_max_steer_angle_; - parameters->parallel_parking_parameters.pull_out_arc_path_interval = - pull_out_arc_path_interval_; - parameters->parallel_parking_parameters.center_line_path_interval = center_line_path_interval_; - parameters->th_moving_object_velocity = th_moving_object_velocity_; - parameters->divide_pull_out_path = divide_pull_out_path_; + auto parameters = StartPlannerParameters::init(*node_); geometric_pull_out_ = - std::make_shared(*node_, *parameters, lane_departure_checker_); - } - - void initialize_planner_data() - { - planner_data_.parameters.backward_path_length = backward_path_length_; - planner_data_.parameters.forward_path_length = forward_path_length_; - planner_data_.parameters.wheel_base = vehicle_info_.wheel_base_m; - planner_data_.parameters.wheel_tread = vehicle_info_.wheel_tread_m; - planner_data_.parameters.front_overhang = vehicle_info_.front_overhang_m; - planner_data_.parameters.left_over_hang = vehicle_info_.left_overhang_m; - planner_data_.parameters.right_over_hang = vehicle_info_.right_overhang_m; + std::make_shared(*node_, parameters, lane_departure_checker_); } - - // Parameter variables - double lane_departure_check_expansion_margin_{0.0}; - double pull_out_max_steer_angle_{0.0}; - double pull_out_arc_path_interval_{0.0}; - double center_line_path_interval_{0.0}; - double th_moving_object_velocity_{0.0}; - double backward_path_length_{0.0}; - double forward_path_length_{0.0}; - bool divide_pull_out_path_{false}; }; TEST_F(TestGeometricPullOut, GenerateValidGeometricPullOutPath) @@ -197,25 +157,13 @@ TEST_F(TestGeometricPullOut, GenerateValidGeometricPullOutPath) .orientation( geometry_msgs::build().x(0.0).y(0.0).z(0.705897).w( 0.708314)); + const auto planner_data = make_planner_data(start_pose, 4619, 4635); - // Set up current odometry at start pose - auto odometry = std::make_shared(); - odometry->pose.pose = start_pose; - odometry->header.frame_id = "map"; - planner_data_.self_odometry = odometry; - - // Setup route - const auto route = makeBehaviorRouteFromLaneId( - 4619, 4635, "autoware_test_utils", "road_shoulder/lanelet2_map.osm"); - route_handler_->setRoute(route); - - // Update planner data with the route handler - planner_data_.route_handler = route_handler_; - geometric_pull_out_->setPlannerData(std::make_shared(planner_data_)); + geometric_pull_out_->setPlannerData(std::make_shared(planner_data)); // Plan the pull out path PlannerDebugData debug_data; - auto result = plan(start_pose, goal_pose, debug_data); + auto result = call_plan(start_pose, goal_pose, debug_data); // Assert that a valid geometric geometric pull out path is generated ASSERT_TRUE(result.has_value()) << "Geometric pull out path generation failed."; diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_shift_pull_out.cpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_shift_pull_out.cpp index 474da055b4de7..05a9201dad41d 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_shift_pull_out.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/test/test_shift_pull_out.cpp @@ -126,13 +126,11 @@ class TestShiftPullOut : public ::testing::Test void initialize_lane_departure_checker() { + autoware::lane_departure_checker::Param lane_departure_checker_params{}; const auto vehicle_info = autoware::vehicle_info_utils::VehicleInfoUtils(*node_).getVehicleInfo(); - lane_departure_checker_ = std::make_shared(); - lane_departure_checker_->setVehicleInfo(vehicle_info); - - autoware::lane_departure_checker::Param lane_departure_checker_params{}; - lane_departure_checker_->setParam(lane_departure_checker_params); + lane_departure_checker_ = + std::make_shared(lane_departure_checker_params, vehicle_info); } void initialize_shift_pull_out_planner()