From 406a2f563542453f71b701078aa023ac44350b6b Mon Sep 17 00:00:00 2001 From: Chris Lalancette Date: Wed, 2 Oct 2024 15:00:58 -0400 Subject: [PATCH] Switch nav2_waypoint_follower to modern CMake idioms. (#4648) Signed-off-by: Chris Lalancette --- nav2_waypoint_follower/CMakeLists.txt | 168 ++++++++++++------ .../plugins/photo_at_waypoint.hpp | 8 - nav2_waypoint_follower/package.xml | 27 +-- nav2_waypoint_follower/test/CMakeLists.txt | 19 +- 4 files changed, 141 insertions(+), 81 deletions(-) diff --git a/nav2_waypoint_follower/CMakeLists.txt b/nav2_waypoint_follower/CMakeLists.txt index 0ea7eda8eb..e9624f36c8 100644 --- a/nav2_waypoint_follower/CMakeLists.txt +++ b/nav2_waypoint_follower/CMakeLists.txt @@ -1,87 +1,126 @@ cmake_minimum_required(VERSION 3.5) project(nav2_waypoint_follower) -# Try for OpenCV 4.X, but settle for whatever is installed -find_package(OpenCV 4 QUIET) -if(NOT OpenCV_FOUND) - find_package(OpenCV REQUIRED) -endif() -message(STATUS "Found OpenCV version ${OpenCV_VERSION}") - -find_package(image_transport REQUIRED) -find_package(cv_bridge REQUIRED) find_package(ament_cmake REQUIRED) +find_package(cv_bridge REQUIRED) +find_package(geographic_msgs REQUIRED) +find_package(geometry_msgs REQUIRED) +find_package(image_transport REQUIRED) find_package(nav2_common REQUIRED) -find_package(rclcpp REQUIRED) -find_package(rclcpp_action REQUIRED) -find_package(rclcpp_lifecycle REQUIRED) -find_package(rclcpp_components REQUIRED) -find_package(nav_msgs REQUIRED) +find_package(nav2_core REQUIRED) find_package(nav2_msgs REQUIRED) find_package(nav2_util REQUIRED) -find_package(tf2_ros REQUIRED) -find_package(nav2_core REQUIRED) +find_package(nav_msgs REQUIRED) +find_package(OpenCV REQUIRED) find_package(pluginlib REQUIRED) +find_package(rclcpp REQUIRED) +find_package(rclcpp_action REQUIRED) +find_package(rclcpp_components REQUIRED) +find_package(rclcpp_lifecycle REQUIRED) find_package(robot_localization REQUIRED) -find_package(geographic_msgs REQUIRED) +find_package(sensor_msgs REQUIRED) +find_package(std_msgs REQUIRED) +find_package(tf2_ros REQUIRED) nav2_package() -include_directories( - include -) - set(executable_name waypoint_follower) -add_executable(${executable_name} - src/main.cpp -) - set(library_name ${executable_name}_core) add_library(${library_name} SHARED src/waypoint_follower.cpp ) - -set(dependencies - rclcpp - rclcpp_action - rclcpp_lifecycle - rclcpp_components - nav_msgs - nav2_msgs - nav2_util - tf2_ros - nav2_core - pluginlib - image_transport - cv_bridge - OpenCV - robot_localization +target_include_directories(${library_name} PUBLIC + "$" + "$" ) - -ament_target_dependencies(${executable_name} - ${dependencies} +target_link_libraries(${library_name} PUBLIC + ${geographic_msgs_TARGETS} + nav2_core::nav2_core + ${nav2_msgs_TARGETS} + nav2_util::nav2_util_core + ${nav_msgs_TARGETS} + pluginlib::pluginlib + rclcpp::rclcpp + rclcpp_action::rclcpp_action + rclcpp_lifecycle::rclcpp_lifecycle + robot_localization::rl_lib + tf2_ros::tf2_ros +) +target_link_libraries(${library_name} PRIVATE + rclcpp_components::component ) -target_link_libraries(${executable_name} ${library_name}) - -ament_target_dependencies(${library_name} - ${dependencies} +add_executable(${executable_name} + src/main.cpp +) +target_include_directories(${executable_name} PRIVATE + "$" + "$" +) +target_link_libraries(${executable_name} PRIVATE + ${library_name} + rclcpp::rclcpp ) add_library(wait_at_waypoint SHARED plugins/wait_at_waypoint.cpp) -ament_target_dependencies(wait_at_waypoint ${dependencies}) +target_include_directories(wait_at_waypoint PUBLIC + "$" + "$" +) +target_link_libraries(wait_at_waypoint PUBLIC + ${geometry_msgs_TARGETS} + rclcpp::rclcpp + rclcpp_lifecycle::rclcpp_lifecycle + nav2_core::nav2_core +) +target_link_libraries(wait_at_waypoint PRIVATE + pluginlib::pluginlib + nav2_util::nav2_util_core +) add_library(photo_at_waypoint SHARED plugins/photo_at_waypoint.cpp) -ament_target_dependencies(photo_at_waypoint ${dependencies}) +target_include_directories(photo_at_waypoint PUBLIC + "$" + "$" +) +target_link_libraries(photo_at_waypoint PUBLIC + cv_bridge::cv_bridge + ${geometry_msgs_TARGETS} + image_transport::image_transport + nav2_core::nav2_core + opencv_core + rclcpp::rclcpp + rclcpp_lifecycle::rclcpp_lifecycle + ${sensor_msgs_TARGETS} +) +target_link_libraries(photo_at_waypoint PRIVATE + nav2_util::nav2_util_core + pluginlib::pluginlib +) add_library(input_at_waypoint SHARED plugins/input_at_waypoint.cpp) -ament_target_dependencies(input_at_waypoint ${dependencies}) +target_include_directories(input_at_waypoint PUBLIC + "$" + "$" +) +target_link_libraries(input_at_waypoint PUBLIC + ${geometry_msgs_TARGETS} + nav2_core::nav2_core + rclcpp::rclcpp + rclcpp_lifecycle::rclcpp_lifecycle + ${std_msgs_TARGETS} +) +target_link_libraries(input_at_waypoint PRIVATE + pluginlib::pluginlib + nav2_util::nav2_util_core +) rclcpp_components_register_nodes(${library_name} "nav2_waypoint_follower::WaypointFollower") install(TARGETS ${library_name} wait_at_waypoint photo_at_waypoint input_at_waypoint + EXPORT ${PROJECT_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin @@ -92,19 +131,40 @@ install(TARGETS ${executable_name} ) install(DIRECTORY include/ - DESTINATION include/ + DESTINATION include/${PROJECT_NAME} ) if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) find_package(ament_cmake_gtest REQUIRED) ament_lint_auto_find_test_dependencies() + + ament_find_gtest() add_subdirectory(test) endif() -ament_export_include_directories(include) +ament_export_include_directories(include/${PROJECT_NAME}) ament_export_libraries(wait_at_waypoint photo_at_waypoint input_at_waypoint ${library_name}) -ament_export_dependencies(${dependencies}) +ament_export_dependencies( + cv_bridge + geographic_msgs + geometry_msgs + image_transport + nav2_core + nav2_msgs + nav2_util + nav_msgs + OpenCV + pluginlib + rclcpp + rclcpp_action + rclcpp_lifecycle + robot_localization + sensor_msgs + std_msgs + tf2_ros +) +ament_export_targets(${PROJECT_NAME}) pluginlib_export_plugin_description_file(nav2_waypoint_follower plugins.xml) ament_package() diff --git a/nav2_waypoint_follower/include/nav2_waypoint_follower/plugins/photo_at_waypoint.hpp b/nav2_waypoint_follower/include/nav2_waypoint_follower/plugins/photo_at_waypoint.hpp index 1e6048aefc..8b5b2aaf15 100644 --- a/nav2_waypoint_follower/include/nav2_waypoint_follower/plugins/photo_at_waypoint.hpp +++ b/nav2_waypoint_follower/include/nav2_waypoint_follower/plugins/photo_at_waypoint.hpp @@ -15,20 +15,12 @@ #ifndef NAV2_WAYPOINT_FOLLOWER__PLUGINS__PHOTO_AT_WAYPOINT_HPP_ #define NAV2_WAYPOINT_FOLLOWER__PLUGINS__PHOTO_AT_WAYPOINT_HPP_ -/** - * While C++17 isn't the project standard. We have to force LLVM/CLang - * to ignore deprecated declarations - */ -#define _LIBCPP_NO_EXPERIMENTAL_DEPRECATION_WARNING_FILESYSTEM - - #include #include #include #include #include "rclcpp/rclcpp.hpp" -#include "rclcpp_components/register_node_macro.hpp" #include "sensor_msgs/msg/image.hpp" #include "nav2_core/waypoint_task_executor.hpp" diff --git a/nav2_waypoint_follower/package.xml b/nav2_waypoint_follower/package.xml index 574a64bcc2..aeb3d44009 100644 --- a/nav2_waypoint_follower/package.xml +++ b/nav2_waypoint_follower/package.xml @@ -8,26 +8,29 @@ Apache-2.0 ament_cmake + nav2_common - nav2_common cv_bridge - pluginlib + geographic_msgs + geometry_msgs image_transport + nav2_core + nav2_msgs + nav2_util + nav_msgs + pluginlib rclcpp rclcpp_action + rclcpp_components rclcpp_lifecycle - nav_msgs - nav2_msgs - nav2_util - nav2_core - tf2_ros robot_localization - geographic_msgs - - ament_lint_common - ament_lint_auto + sensor_msgs + std_msgs + tf2_ros + ament_cmake_gtest - ament_cmake_pytest + ament_lint_auto + ament_lint_common ament_cmake diff --git a/nav2_waypoint_follower/test/CMakeLists.txt b/nav2_waypoint_follower/test/CMakeLists.txt index a6a7388ead..a8f498ca02 100644 --- a/nav2_waypoint_follower/test/CMakeLists.txt +++ b/nav2_waypoint_follower/test/CMakeLists.txt @@ -2,20 +2,25 @@ ament_add_gtest(test_task_executors test_task_executors.cpp ) -ament_target_dependencies(test_task_executors - ${dependencies} -) target_link_libraries(test_task_executors - ${library_name} wait_at_waypoint photo_at_waypoint input_at_waypoint + ${library_name} + wait_at_waypoint + photo_at_waypoint + input_at_waypoint + ${geometry_msgs_TARGETS} + nav2_util::nav2_util_core + rclcpp::rclcpp + rclcpp_lifecycle::rclcpp_lifecycle + ${sensor_msgs_TARGETS} ) # Test dynamic parameters ament_add_gtest(test_dynamic_parameters test_dynamic_parameters.cpp ) -ament_target_dependencies(test_dynamic_parameters - ${dependencies} -) target_link_libraries(test_dynamic_parameters ${library_name} + nav2_util::nav2_util_core + rclcpp::rclcpp + rclcpp_lifecycle::rclcpp_lifecycle )