From c4ae3961ab21c5a2fc48bdcfa9007369fa2efe4c Mon Sep 17 00:00:00 2001 From: HiepLM Date: Wed, 7 Jan 2026 16:54:50 +0700 Subject: [PATCH] update for ROS --- CMakeLists.txt | 233 ++++++++++++++++++++++++++++++++++--------------- package.xml | 58 ++++++++++++ 2 files changed, 219 insertions(+), 72 deletions(-) create mode 100644 package.xml diff --git a/CMakeLists.txt b/CMakeLists.txt index ed393bb..484fca6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,39 +1,88 @@ -# --- CMake version và project name --- -cmake_minimum_required(VERSION 3.10) -project(dock_planner) +cmake_minimum_required(VERSION 3.0.2) +project(dock_planner VERSION 1.0.0 LANGUAGES CXX) -# --- C++ standard và position independent code --- -set(CMAKE_CXX_STANDARD 17) # Sử dụng C++17 -set(CMAKE_POSITION_INDEPENDENT_CODE ON) # Thư viện có thể build thành shared lib +if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL) + set(BUILDING_WITH_CATKIN TRUE) + message(STATUS "Building dock_planner with Catkin") -# --- RPATH settings: ưu tiên thư viện build tại chỗ --- -# Dùng để runtime linker tìm thư viện đã build trước khi install -set(CMAKE_SKIP_BUILD_RPATH FALSE) -set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) -set(CMAKE_BUILD_RPATH "${CMAKE_BINARY_DIR}/dock_planner") -set(CMAKE_INSTALL_RPATH "${CMAKE_BINARY_DIR}/dock_planner") -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +else() + set(BUILDING_WITH_CATKIN FALSE) + message(STATUS "Building dock_planner with Standalone CMake") +endif() -# --- Dependencies --- -# Tìm các thư viện cần thiết -# find_package(tf3 REQUIRED) # Nếu dùng tf3 -find_package(Eigen3 REQUIRED) # Thư viện Eigen cho toán học -find_package(Boost REQUIRED COMPONENTS system thread filesystem) # Boost: system, thread, filesystem +# C++ Standard - must be set before find_package +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) -# --- Include directories --- -# Thêm các folder chứa header files -include_directories( - include +# Find dependencies +find_package(Eigen3 REQUIRED) +find_package(Boost REQUIRED COMPONENTS system thread filesystem) + +if (NOT BUILDING_WITH_CATKIN) + + # Enable Position Independent Code + set(CMAKE_POSITION_INDEPENDENT_CODE ON) + + # Cấu hình RPATH để tránh cycle trong runtime search path + set(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE) + set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + set(CMAKE_BUILD_RPATH "${CMAKE_BINARY_DIR}") + + set(PACKAGES_DIR + robot_visualization_msgs + robot_nav_msgs + robot_nav_2d_msgs + robot_nav_2d_utils + robot_std_msgs + robot_geometry_msgs + tf3 + robot_time + data_convert + robot_costmap_2d + robot_nav_core + robot_cpp + ) + +else() + +# ======================================================== +# Catkin specific configuration +# ======================================================== + find_package(catkin REQUIRED COMPONENTS + robot_visualization_msgs + robot_nav_msgs + robot_nav_2d_msgs + robot_nav_2d_utils + robot_std_msgs + robot_geometry_msgs + tf3 + robot_time + data_convert + robot_costmap_2d + robot_nav_core + robot_cpp + ) + + catkin_package( + INCLUDE_DIRS include + LIBRARIES ${PROJECT_NAME} + CATKIN_DEPENDS robot_visualization_msgs robot_nav_msgs robot_nav_2d_msgs robot_nav_2d_utils robot_std_msgs robot_geometry_msgs tf3 robot_time data_convert robot_costmap_2d robot_nav_core robot_cpp + DEPENDS Eigen3 Boost + ) + + include_directories( + include + ${catkin_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} -) + ) +endif() -# --- Eigen và PCL definitions --- -add_definitions(${EIGEN3_DEFINITIONS}) - -# --- Core library: dock_planner --- -# Tạo thư viện chính -add_library(dock_planner +# ======================================================== +# Libraries +# ======================================================== +add_library(${PROJECT_NAME} SHARED src/dock_planner.cpp src/dock_calc.cpp src/utils/curve_common.cpp @@ -41,50 +90,90 @@ add_library(dock_planner src/utils/line_common.cpp ) -# --- Link các thư viện phụ thuộc --- -target_link_libraries(dock_planner - ${Boost_LIBRARIES} # Boost - robot_visualization_msgs - robot_nav_msgs - tf3 - robot_tf3_geometry_msgs - robot_time - data_convert - robot_costmap_2d - robot_nav_core - robot_cpp - robot_nav_2d_utils -) +if(BUILDING_WITH_CATKIN) + add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) -# --- Include directories cho target --- -target_include_directories(dock_planner - PUBLIC - ${Boost_INCLUDE_DIRS} # Boost headers - $ # Khi build từ source - $ # Khi install - ) + target_include_directories(${PROJECT_NAME} + PUBLIC + $ + $ + ) -# --- Cài đặt thư viện vào hệ thống khi chạy make install --- -install(TARGETS dock_planner - EXPORT dock_planner-targets - ARCHIVE DESTINATION lib # Thư viện tĩnh .a - LIBRARY DESTINATION lib # Thư viện động .so - RUNTIME DESTINATION bin # File thực thi (nếu có) - INCLUDES DESTINATION include # Cài đặt include -) + target_link_libraries(${PROJECT_NAME} + PUBLIC ${catkin_LIBRARIES} + PRIVATE Eigen3::Eigen Boost::system Boost::thread Boost::filesystem + ) -# --- Xuất export set robot_costmap_2dTargets thành file CMake module --- -# --- Tạo file lib/cmake/dock_planner/robot_costmap_2dTargets.cmake --- -# --- File này chứa cấu hình giúp project khác có thể dùng --- -# --- Find_package(dock_planner REQUIRED) --- -# --- Target_link_libraries(my_app PRIVATE dock_planner::dock_planner) --- -install(EXPORT dock_planner-targets - FILE dock_planner-targets.cmake - NAMESPACE dock_planner:: - DESTINATION lib/cmake/dock_planner -) +else() -# --- Cài đặt headers --- -install(DIRECTORY include/${PROJECT_NAME}/ - DESTINATION include/${PROJECT_NAME} -) + target_include_directories(${PROJECT_NAME} + PUBLIC + $ + $ + ) + + target_link_libraries(${PROJECT_NAME} + PUBLIC + ${PACKAGES_DIR} + PRIVATE + Eigen3::Eigen Boost::system Boost::thread Boost::filesystem + ) + + set_target_properties(${PROJECT_NAME} PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} + BUILD_RPATH "${CMAKE_BINARY_DIR}" + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" + ) + +endif() + +# ======================================================== +# Install +# ======================================================== +if(BUILDING_WITH_CATKIN) + ## Mark libraries for installation + ## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html + install(TARGETS ${PROJECT_NAME} + ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} + LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} + RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} + ) + + ## Mark cpp header files for installation + install(DIRECTORY include/${PROJECT_NAME}/ + DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} + FILES_MATCHING PATTERN "*.h" + PATTERN ".svn" EXCLUDE + ) + +else() + + install(TARGETS ${PROJECT_NAME} + EXPORT ${PROJECT_NAME}-targets + ARCHIVE DESTINATION lib + LIBRARY DESTINATION lib + RUNTIME DESTINATION bin + ) + + # Export targets + install(EXPORT ${PROJECT_NAME}-targets + FILE ${PROJECT_NAME}-targets.cmake + NAMESPACE ${PROJECT_NAME}:: + DESTINATION lib/cmake/${PROJECT_NAME} + ) + + ## Mark cpp header files for installation + install(DIRECTORY include/${PROJECT_NAME}/ + DESTINATION include + FILES_MATCHING PATTERN "*.h" + PATTERN ".svn" EXCLUDE + ) + + # Print configuration info + message(STATUS "=================================") + message(STATUS "Project: ${PROJECT_NAME}") + message(STATUS "Version: ${PROJECT_VERSION}") + message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}") + message(STATUS "Dependencies: robot_visualization_msgs, robot_nav_msgs, robot_nav_2d_msgs, robot_nav_2d_utils, robot_std_msgs, robot_geometry_msgs, tf3, robot_time, data_convert, robot_costmap_2d, robot_nav_core, robot_cpp, Eigen3, Boost") + message(STATUS "=================================") +endif() diff --git a/package.xml b/package.xml new file mode 100644 index 0000000..f28c398 --- /dev/null +++ b/package.xml @@ -0,0 +1,58 @@ + + dock_planner + 0.7.10 + + dock_planner is the second generation of the transform library, which lets + the user keep track of multiple coordinate frames over time. dock_planner + maintains the relationship between coordinate frames in a tree + structure buffered in time, and lets the user transform points, + vectors, etc between any two coordinate frames at any desired + point in time. + + Tully Foote + Eitan Marder-Eppstein + Wim Meeussen + Tully Foote + BSD + + http://www.ros.org/wiki/dock_planner + + catkin + + robot_costmap_2d + robot_costmap_2d + + robot_nav_core + robot_nav_core + + robot_geometry_msgs + robot_geometry_msgs + + robot_nav_msgs + robot_nav_msgs + + robot_std_msgs + robot_std_msgs + + tf3 + tf3 + + robot_cpp + robot_cpp + + robot_time + robot_time + + robot_visualization_msgs + robot_visualization_msgs + + data_convert + data_convert + + robot_nav_2d_msgs + robot_nav_2d_msgs + + robot_nav_2d_utils + robot_nav_2d_utils + + \ No newline at end of file