diff --git a/src/Libraries/common_msgs b/src/Libraries/common_msgs index fb03bdf..5c276af 160000 --- a/src/Libraries/common_msgs +++ b/src/Libraries/common_msgs @@ -1 +1 @@ -Subproject commit fb03bdf2e8695f3d01ea80a52107bd18d7802062 +Subproject commit 5c276afb3469a4618e3d2f3523a27bff2f9fb3c8 diff --git a/src/Libraries/test/test_node_handle.cpp b/src/Libraries/robot_cpp/test/test_node_handle.cpp similarity index 100% rename from src/Libraries/test/test_node_handle.cpp rename to src/Libraries/robot_cpp/test/test_node_handle.cpp diff --git a/src/Libraries/robot_nav_2d_msgs/CMakeLists.txt b/src/Libraries/robot_nav_2d_msgs/CMakeLists.txt index ccc6454..775ff89 100755 --- a/src/Libraries/robot_nav_2d_msgs/CMakeLists.txt +++ b/src/Libraries/robot_nav_2d_msgs/CMakeLists.txt @@ -1,5 +1,19 @@ cmake_minimum_required(VERSION 3.10) +# ======================================================== +# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake +# ======================================================== + +# Detect if building with Catkin +if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL) + set(BUILDING_WITH_CATKIN TRUE) + message(STATUS "Building robot_nav_2d_msgs with Catkin") + find_package(catkin REQUIRED) +else() + set(BUILDING_WITH_CATKIN FALSE) + message(STATUS "Building robot_nav_2d_msgs with Standalone CMake") +endif() + project(robot_nav_2d_msgs VERSION 1.0.0 LANGUAGES CXX) # Chuẩn C++ @@ -7,6 +21,22 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) +# ======================================================== +# Catkin specific configuration +# ======================================================== + +if(BUILDING_WITH_CATKIN) + ## The catkin_package macro generates cmake config files for your package + ## Note: Dependencies (robot_std_msgs, geometry_msgs) are not Catkin packages, + ## they are built as CMake targets in the same workspace and will be available + ## when this package is built. They are linked via target_link_libraries instead of CATKIN_DEPENDS + catkin_package( + INCLUDE_DIRS include + # LIBRARIES không cần vì đây là header-only library + # CATKIN_DEPENDS không cần vì dependencies không phải Catkin packages + ) +endif() + # Tìm tất cả header files file(GLOB_RECURSE HEADERS "include/robot_nav_2d_msgs/*.h") @@ -28,10 +58,25 @@ target_link_libraries(robot_nav_2d_msgs geometry_msgs ) +# Add include directories from dependencies explicitly for Catkin build +if(BUILDING_WITH_CATKIN) + # Use relative paths from current source directory + # From robot_nav_2d_msgs (pnkx_nav_core/src/Libraries/robot_nav_2d_msgs) + # to robot_std_msgs (pnkx_nav_core/src/Libraries/common_msgs/robot_std_msgs) is ../common_msgs/robot_std_msgs + get_filename_component(ROBOT_STD_MSGS_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/../common_msgs/robot_std_msgs/include" ABSOLUTE) + get_filename_component(GEOMETRY_MSGS_INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/../common_msgs/robot_geometry_msgs/include" ABSOLUTE) + target_include_directories(robot_nav_2d_msgs INTERFACE + $ + $ + ) +endif() + # Cài đặt header files -install(DIRECTORY include/robot_nav_2d_msgs - DESTINATION include - FILES_MATCHING PATTERN "*.h") +if(NOT BUILDING_WITH_CATKIN) + install(DIRECTORY include/robot_nav_2d_msgs + DESTINATION include + FILES_MATCHING PATTERN "*.h") +endif() # Cài đặt target install(TARGETS robot_nav_2d_msgs diff --git a/src/Libraries/robot_nav_2d_utils/CMakeLists.txt b/src/Libraries/robot_nav_2d_utils/CMakeLists.txt index 4e90a4c..7c6727f 100755 --- a/src/Libraries/robot_nav_2d_utils/CMakeLists.txt +++ b/src/Libraries/robot_nav_2d_utils/CMakeLists.txt @@ -1,5 +1,19 @@ cmake_minimum_required(VERSION 3.10) +# ======================================================== +# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake +# ======================================================== + +# Detect if building with Catkin +if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL) + set(BUILDING_WITH_CATKIN TRUE) + message(STATUS "Building robot_nav_2d_utils with Catkin") + find_package(catkin REQUIRED) +else() + set(BUILDING_WITH_CATKIN FALSE) + message(STATUS "Building robot_nav_2d_utils with Standalone CMake") +endif() + project(robot_nav_2d_utils VERSION 1.0.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) @@ -9,6 +23,24 @@ set(CMAKE_CXX_EXTENSIONS OFF) # 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}") + +# ======================================================== +# Catkin specific configuration +# ======================================================== + +if(BUILDING_WITH_CATKIN) + catkin_package( + INCLUDE_DIRS include + LIBRARIES conversions path_ops polygons bounds tf_help robot_nav_2d_utils + # CATKIN_DEPENDS không cần vì dependencies không phải Catkin packages + DEPENDS console_bridge Boost + ) +endif() + # Find dependencies find_package(console_bridge REQUIRED) find_package(Boost REQUIRED COMPONENTS system thread) @@ -36,6 +68,8 @@ target_link_libraries(conversions set_target_properties(conversions PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} + BUILD_RPATH "${CMAKE_BINARY_DIR}" + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" ) add_library(path_ops src/path_ops.cpp) @@ -51,6 +85,12 @@ target_link_libraries(path_ops robot_cpp ) +set_target_properties(path_ops PROPERTIES + LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} + BUILD_RPATH "${CMAKE_BINARY_DIR}" + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" +) + add_library(polygons src/polygons.cpp src/footprint.cpp) target_include_directories(polygons PUBLIC @@ -77,6 +117,8 @@ endif() set_target_properties(polygons PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} + BUILD_RPATH "${CMAKE_BINARY_DIR}" + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" ) add_library(bounds src/bounds.cpp) @@ -94,6 +136,8 @@ target_link_libraries(bounds set_target_properties(bounds PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} + BUILD_RPATH "${CMAKE_BINARY_DIR}" + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" ) add_library(tf_help src/tf_help.cpp) @@ -113,6 +157,8 @@ target_link_libraries(tf_help set_target_properties(tf_help PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} + BUILD_RPATH "${CMAKE_BINARY_DIR}" + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" ) # Create an INTERFACE library that represents all robot_nav_2d_utils libraries @@ -133,14 +179,16 @@ target_link_libraries(robot_nav_2d_utils ) # Install header files -install(DIRECTORY include/robot_nav_2d_utils - DESTINATION include - FILES_MATCHING PATTERN "*.h") +if(NOT BUILDING_WITH_CATKIN) + install(DIRECTORY include/robot_nav_2d_utils + DESTINATION include + FILES_MATCHING PATTERN "*.h") -# Install mapbox headers -install(DIRECTORY include/mapbox - DESTINATION include - FILES_MATCHING PATTERN "*.hpp") + # Install mapbox headers + install(DIRECTORY include/mapbox + DESTINATION include + FILES_MATCHING PATTERN "*.hpp") +endif() # Install targets install(TARGETS robot_nav_2d_utils conversions path_ops polygons bounds tf_help diff --git a/src/Libraries/robot_time b/src/Libraries/robot_time index d42ae54..504de86 160000 --- a/src/Libraries/robot_time +++ b/src/Libraries/robot_time @@ -1 +1 @@ -Subproject commit d42ae54383af04a7d7654b4039466ac9c208fdef +Subproject commit 504de86ee92a2684564cc3a561f3f534eb798160 diff --git a/src/Libraries/tf3/CMakeLists.txt b/src/Libraries/tf3/CMakeLists.txt index ba86e54..12ba4b6 100644 --- a/src/Libraries/tf3/CMakeLists.txt +++ b/src/Libraries/tf3/CMakeLists.txt @@ -1,12 +1,44 @@ cmake_minimum_required(VERSION 3.0.2) - project(tf3) 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}") + +# ======================================================== +# Find Packages +# ======================================================== +# ======================================================== +# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake +# ======================================================== + +# Detect if building with Catkin +if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL) + set(BUILDING_WITH_CATKIN TRUE) + + find_package(catkin REQUIRED COMPONENTS console_bridge) +else() + set(BUILDING_WITH_CATKIN FALSE) +endif() + find_package(console_bridge REQUIRED) find_package(Boost REQUIRED COMPONENTS system thread) +# ======================================================== +# Catkin specific configuration +# ======================================================== + +if(BUILDING_WITH_CATKIN) + ## The catkin_package macro generates cmake config files for your package + catkin_package( + INCLUDE_DIRS include + LIBRARIES tf3 + DEPENDS console_bridge + ) +endif() include_directories(include ${console_bridge_INCLUDE_DIRS}) # export user definitions @@ -16,7 +48,14 @@ add_library(tf3 src/cache.cpp src/buffer_core.cpp src/static_cache.cpp) target_link_libraries(tf3 ${Boost_LIBRARIES} ${console_bridge_LIBRARIES}) set_target_properties(tf3 PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} + BUILD_RPATH "${CMAKE_BINARY_DIR}" + INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib" ) + +## Add cmake target dependencies +if(BUILDING_WITH_CATKIN) + add_dependencies(tf3 ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) +endif() target_include_directories(tf3 PUBLIC $ $) @@ -27,20 +66,21 @@ target_link_libraries(simple_tf3_example PRIVATE tf3 pthread ${console_bridge_LI set_target_properties(simple_tf3_example PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} ) +# Export target trong mọi trường hợp để các target khác có thể export và phụ thuộc vào nó install(TARGETS tf3 + EXPORT tf3-targets ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin ) -install(DIRECTORY include/${PROJECT_NAME}/ - DESTINATION include/${PROJECT_NAME} -) +if(NOT BUILDING_WITH_CATKIN) + install(DIRECTORY include/${PROJECT_NAME}/ + DESTINATION include/${PROJECT_NAME} + ) +endif() -install(TARGETS tf3 - EXPORT tf3-targets) - -# Export targets +# Export targets - cần trong mọi trường hợp install(EXPORT tf3-targets FILE tf3-targets.cmake NAMESPACE tf3:: diff --git a/src/Navigations/Cores/move_base_core/CMakeLists.txt b/src/Navigations/Cores/move_base_core/CMakeLists.txt index ab5fe64..1cf0697 100644 --- a/src/Navigations/Cores/move_base_core/CMakeLists.txt +++ b/src/Navigations/Cores/move_base_core/CMakeLists.txt @@ -1,41 +1,64 @@ cmake_minimum_required(VERSION 3.10) - -# Tên dự án project(move_base_core VERSION 1.0.0 LANGUAGES CXX) # Chuẩn C++ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -# Cho phép các project khác include được header của move_base_core -set(MOVE_BASE_CORE_INCLUDE_DIRS - ${CMAKE_CURRENT_SOURCE_DIR}/include - PARENT_SCOPE -) +# ======================================================== +# Catkin specific configuration +# ======================================================== +if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL) + set(BUILDING_WITH_CATKIN TRUE) + message(STATUS "Building move_base_core with Catkin") +else() + set(BUILDING_WITH_CATKIN FALSE) + message(STATUS "Building move_base_core with Standalone CMake") +endif() -include_directories( - ${PROJECT_SOURCE_DIR}/include -) +if(BUILDING_WITH_CATKIN) + find_package(catkin REQUIRED COMPONENTS tf3 robot_time robot_geometry_msgs robot_protocol_msgs robot_nav_2d_msgs) + + catkin_package( + INCLUDE_DIRS include + LIBRARIES move_base_core + CATKIN_DEPENDS tf3 robot_time robot_geometry_msgs robot_protocol_msgs robot_nav_2d_msgs + # CATKIN_DEPENDS không cần vì dependencies không phải Catkin packages + ) +endif() # Tìm tất cả header files file(GLOB HEADERS "include/move_base_core/*.h") - # Tạo INTERFACE library (header-only) add_library(move_base_core INTERFACE) -target_link_libraries(move_base_core - INTERFACE tf3 robot_time robot_geometry_msgs robot_protocol_msgs) -# Set include directories +# Set include directories trước khi link libraries target_include_directories(move_base_core INTERFACE $ $ ) +# Link với dependencies - include directories sẽ được truyền tự động qua INTERFACE properties +if(BUILDING_WITH_CATKIN) + target_link_libraries(move_base_core INTERFACE ${catkin_TARGETS}) +else() + target_link_libraries(move_base_core + INTERFACE + tf3 + robot_time + robot_geometry_msgs + robot_protocol_msgs + robot_nav_2d_msgs # Thêm vì navigation.h include robot_nav_2d_msgs/Twist2DStamped.h + ) +endif() + # Cài đặt header files -install(DIRECTORY include/move_base_core - DESTINATION include - FILES_MATCHING PATTERN "*.h") +if(NOT BUILDING_WITH_CATKIN) + install(DIRECTORY include/move_base_core + DESTINATION include + FILES_MATCHING PATTERN "*.h") +endif() # Cài đặt target install(TARGETS move_base_core diff --git a/src/Navigations/Cores/move_base_core/package.xml b/src/Navigations/Cores/move_base_core/package.xml index 0bc57d8..ba67c66 100644 --- a/src/Navigations/Cores/move_base_core/package.xml +++ b/src/Navigations/Cores/move_base_core/package.xml @@ -19,8 +19,16 @@ catkin - libconsole-bridge-dev + tf3 + robot_time + robot_geometry_msgs + robot_protocol_msgs + robot_nav_2d_msgs - libconsole-bridge-dev + tf3 + robot_time + robot_geometry_msgs + robot_protocol_msgs + robot_nav_2d_msgs \ No newline at end of file