Compare commits
2 Commits
ca9e100bd9
...
6054f72ba8
| Author | SHA1 | Date | |
|---|---|---|---|
| 6054f72ba8 | |||
| 768573b2bb |
|
|
@ -1,29 +1,48 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
# Tên dự án
|
|
||||||
project(score_algorithm VERSION 1.0.0 LANGUAGES CXX)
|
project(score_algorithm VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# Chuẩn C++
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
||||||
|
|
||||||
if(NOT CMAKE_BUILD_TYPE)
|
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Find Packages
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building score_algorithm with Catkin")
|
message(STATUS "Building score_algorithm with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building score_algorithm with Standalone CMake")
|
message(STATUS "Building score_algorithm with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
# C++ Standard - must be set before find_package
|
||||||
## Find catkin macros and libraries
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
# Find dependencies
|
||||||
|
find_package(Boost REQUIRED COMPONENTS filesystem system)
|
||||||
|
|
||||||
|
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_nav_2d_msgs
|
||||||
|
robot_nav_2d_utils
|
||||||
|
robot_nav_core2
|
||||||
|
robot_nav_core
|
||||||
|
robot_cpp
|
||||||
|
mkt_msgs
|
||||||
|
angles
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# ========================================================
|
||||||
|
# Catkin specific configuration
|
||||||
|
# ========================================================
|
||||||
find_package(catkin REQUIRED COMPONENTS
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
robot_nav_2d_msgs
|
robot_nav_2d_msgs
|
||||||
robot_nav_2d_utils
|
robot_nav_2d_utils
|
||||||
|
|
@ -33,124 +52,107 @@ if(BUILDING_WITH_CATKIN)
|
||||||
mkt_msgs
|
mkt_msgs
|
||||||
angles
|
angles
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
## System dependencies
|
|
||||||
find_package(Boost REQUIRED COMPONENTS filesystem system)
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Catkin specific configuration
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
## The catkin_package macro generates cmake config files for your package
|
|
||||||
catkin_package(
|
catkin_package(
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
LIBRARIES score_algorithm
|
LIBRARIES ${PROJECT_NAME}
|
||||||
CATKIN_DEPENDS robot_nav_2d_msgs robot_nav_2d_utils robot_nav_core robot_nav_core2 robot_cpp mkt_msgs
|
CATKIN_DEPENDS robot_nav_2d_msgs robot_nav_2d_utils robot_nav_core robot_nav_core2 robot_cpp mkt_msgs angles
|
||||||
|
DEPENDS Boost
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
|
${Boost_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Thư mục include
|
# Libraries
|
||||||
include_directories(
|
add_library(${PROJECT_NAME} SHARED
|
||||||
${PROJECT_SOURCE_DIR}/include
|
src/score_algorithm.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
if(BUILDING_WITH_CATKIN)
|
||||||
include_directories(${catkin_INCLUDE_DIRS})
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
endif()
|
|
||||||
# ========================================================
|
|
||||||
# Build
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Tạo thư viện shared (.so)
|
target_include_directories(${PROJECT_NAME}
|
||||||
add_library(score_algorithm src/score_algorithm.cpp)
|
|
||||||
|
|
||||||
# Link libraries
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
target_link_libraries(score_algorithm
|
|
||||||
PUBLIC
|
PUBLIC
|
||||||
${catkin_LIBRARIES}
|
|
||||||
PRIVATE
|
|
||||||
Boost::filesystem
|
|
||||||
Boost::system
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
# Standalone mode: link dependencies directly
|
|
||||||
target_link_libraries(score_algorithm
|
|
||||||
PUBLIC
|
|
||||||
robot_nav_2d_msgs
|
|
||||||
robot_nav_2d_utils
|
|
||||||
robot_nav_core2
|
|
||||||
robot_nav_core2
|
|
||||||
robot_cpp
|
|
||||||
mkt_msgs
|
|
||||||
angles
|
|
||||||
PRIVATE
|
|
||||||
Boost::filesystem
|
|
||||||
Boost::system
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(score_algorithm PROPERTIES
|
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
## Add cmake target dependencies
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
add_dependencies(score_algorithm ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
target_include_directories(score_algorithm PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>)
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
# ========================================================
|
target_link_libraries(${PROJECT_NAME}
|
||||||
# Installation
|
PUBLIC ${catkin_LIBRARIES}
|
||||||
# ========================================================
|
PRIVATE Boost::filesystem Boost::system
|
||||||
|
)
|
||||||
|
|
||||||
# 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 score_algorithm
|
|
||||||
EXPORT score_algorithm-targets
|
|
||||||
LIBRARY DESTINATION lib
|
|
||||||
ARCHIVE DESTINATION lib
|
|
||||||
RUNTIME DESTINATION bin)
|
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
|
||||||
# Cài đặt header files (chỉ cho standalone mode)
|
|
||||||
install(DIRECTORY include/score_algorithm
|
|
||||||
DESTINATION include
|
|
||||||
FILES_MATCHING PATTERN "*.h")
|
|
||||||
|
|
||||||
# Export targets (chỉ cho standalone mode)
|
|
||||||
install(EXPORT score_algorithm-targets
|
|
||||||
FILE score_algorithm-targets.cmake
|
|
||||||
DESTINATION lib/cmake/score_algorithm)
|
|
||||||
else()
|
else()
|
||||||
# Khi build với Catkin, vẫn cần export để các target khác có thể export
|
|
||||||
install(EXPORT score_algorithm-targets
|
target_include_directories(${PROJECT_NAME}
|
||||||
FILE score_algorithm-targets.cmake
|
PUBLIC
|
||||||
DESTINATION lib/cmake/score_algorithm)
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
PRIVATE
|
||||||
|
Boost::filesystem Boost::system
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Tùy chọn build
|
if(BUILDING_WITH_CATKIN)
|
||||||
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
|
## Mark libraries for installation
|
||||||
option(BUILD_TESTS "Build test programs" OFF)
|
## 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}
|
||||||
|
)
|
||||||
|
|
||||||
# Flags biên dịch
|
## Mark cpp header files for installation
|
||||||
# Warning flags - disabled to suppress warnings during build
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") # -w suppresses all warnings
|
FILES_MATCHING PATTERN "*.h"
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
|
PATTERN ".svn" EXCLUDE
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
|
)
|
||||||
|
|
||||||
# In thông tin cấu hình
|
else()
|
||||||
message(STATUS "=================================")
|
|
||||||
message(STATUS "Project: ${PROJECT_NAME}")
|
install(TARGETS ${PROJECT_NAME}
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
EXPORT ${PROJECT_NAME}-targets
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
ARCHIVE DESTINATION lib
|
||||||
message(STATUS "Headers found:")
|
LIBRARY DESTINATION lib
|
||||||
foreach(hdr ${HEADERS})
|
RUNTIME DESTINATION bin
|
||||||
message(STATUS " - ${hdr}")
|
)
|
||||||
endforeach()
|
|
||||||
message(STATUS "=================================")
|
# 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_nav_2d_msgs, robot_nav_2d_utils, robot_nav_core, robot_nav_core2, robot_cpp, mkt_msgs, angles, Boost")
|
||||||
|
message(STATUS "=================================")
|
||||||
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -1,70 +1,129 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
|
project(angles VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Detect if building with Catkin
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building angles with Catkin")
|
message(STATUS "Building angles with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building angles with Standalone CMake")
|
message(STATUS "Building angles with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
project(angles VERSION 1.0.0 LANGUAGES CXX)
|
# C++ Standard - must be set before find_package
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
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}")
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Catkin specific configuration
|
# Catkin specific configuration
|
||||||
# ========================================================
|
# ========================================================
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
find_package(catkin REQUIRED)
|
find_package(catkin REQUIRED)
|
||||||
|
|
||||||
catkin_package(
|
catkin_package(
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
# Header-only library; keep LIBRARIES for visibility when exporting
|
# LIBRARIES không cần vì đây là header-only library
|
||||||
LIBRARIES angles
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Create interface library (header-only)
|
# Tìm tất cả header files
|
||||||
add_library(angles INTERFACE)
|
file(GLOB_RECURSE HEADERS "include/angles/*.h")
|
||||||
|
|
||||||
# Set include directories
|
# Tạo INTERFACE library (header-only)
|
||||||
target_include_directories(angles INTERFACE
|
add_library(${PROJECT_NAME} INTERFACE)
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:include>
|
|
||||||
)
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
if(BUILDING_WITH_CATKIN)
|
||||||
add_dependencies(angles ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
|
||||||
|
# Set include directories
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
# Link dependencies (header-only, chỉ cần include paths)
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
${catkin_LIBRARIES}
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# Set include directories
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# ========================================================
|
if(BUILDING_WITH_CATKIN)
|
||||||
# Installation
|
## 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}
|
||||||
|
)
|
||||||
|
|
||||||
install(TARGETS angles
|
## Mark cpp header files for installation
|
||||||
EXPORT angles-targets
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
INCLUDES DESTINATION include
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||||
)
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
|
)
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
else()
|
||||||
# Install headers (standalone)
|
|
||||||
install(DIRECTORY include/angles
|
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
|
DESTINATION include
|
||||||
FILES_MATCHING PATTERN "*.h"
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Print configuration info
|
||||||
|
message(STATUS "=================================")
|
||||||
|
message(STATUS "Project: ${PROJECT_NAME} (Header-Only)")
|
||||||
|
message(STATUS "Version: ${PROJECT_VERSION}")
|
||||||
|
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||||||
|
message(STATUS "Headers found:")
|
||||||
|
foreach(hdr ${HEADERS})
|
||||||
|
message(STATUS " - ${hdr}")
|
||||||
|
endforeach()
|
||||||
|
message(STATUS "Dependencies: None")
|
||||||
|
message(STATUS "=================================")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Export targets
|
|
||||||
install(EXPORT angles-targets
|
|
||||||
FILE angles-targets.cmake
|
|
||||||
DESTINATION lib/cmake/angles
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,142 +1,181 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
|
project(kalman VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Detect if building with Catkin
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building kalman with Catkin")
|
message(STATUS "Building kalman with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building kalman with Standalone CMake")
|
message(STATUS "Building kalman with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
project(kalman VERSION 1.0.0 LANGUAGES CXX)
|
# C++ Standard - must be set before find_package
|
||||||
|
|
||||||
# Chuẩn C++
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
if(NOT CMAKE_BUILD_TYPE)
|
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Find dependencies
|
# Find dependencies
|
||||||
# ========================================================
|
|
||||||
find_package(Eigen3 REQUIRED)
|
find_package(Eigen3 REQUIRED)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
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}")
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# ========================================================
|
||||||
|
# Catkin specific configuration
|
||||||
|
# ========================================================
|
||||||
find_package(catkin REQUIRED)
|
find_package(catkin REQUIRED)
|
||||||
|
|
||||||
catkin_package(
|
catkin_package(
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
LIBRARIES kalman
|
LIBRARIES ${PROJECT_NAME}
|
||||||
DEPENDS Eigen3
|
DEPENDS Eigen3
|
||||||
)
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
|
${EIGEN3_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Thư mục include
|
# ========================================================
|
||||||
include_directories(
|
# Libraries
|
||||||
${PROJECT_SOURCE_DIR}/include
|
# ========================================================
|
||||||
${EIGEN3_INCLUDE_DIRS}
|
add_library(${PROJECT_NAME} SHARED
|
||||||
|
src/kalman.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
if(BUILDING_WITH_CATKIN)
|
||||||
include_directories(${catkin_INCLUDE_DIRS})
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
endif()
|
|
||||||
|
|
||||||
# Tìm tất cả file source
|
target_include_directories(${PROJECT_NAME}
|
||||||
file(GLOB SOURCES "src/kalman.cpp")
|
|
||||||
file(GLOB HEADERS "include/kalman/kalman.h")
|
|
||||||
|
|
||||||
# Tạo thư viện shared (.so)
|
|
||||||
add_library(kalman SHARED ${SOURCES} ${HEADERS})
|
|
||||||
|
|
||||||
# Link libraries
|
|
||||||
target_link_libraries(kalman
|
|
||||||
PUBLIC
|
|
||||||
Eigen3::Eigen
|
|
||||||
$<$<BOOL:${BUILDING_WITH_CATKIN}>:${catkin_LIBRARIES}>
|
|
||||||
)
|
|
||||||
|
|
||||||
set_target_properties(kalman PROPERTIES
|
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Set include directories
|
|
||||||
target_include_directories(kalman
|
|
||||||
PUBLIC
|
PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
${EIGEN3_INCLUDE_DIRS}
|
)
|
||||||
)
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PUBLIC ${catkin_LIBRARIES}
|
||||||
|
PRIVATE Eigen3::Eigen
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PUBLIC
|
||||||
|
Eigen3::Eigen
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
add_dependencies(kalman ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Tạo executable cho test
|
# ========================================================
|
||||||
add_executable(kalman_node src/kalman-test.cpp)
|
# Test executable
|
||||||
target_link_libraries(kalman_node
|
# ========================================================
|
||||||
PRIVATE
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/src/kalman-test.cpp)
|
||||||
kalman
|
add_executable(${PROJECT_NAME}_node src/kalman-test.cpp)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}_node PRIVATE
|
||||||
|
${PROJECT_NAME}
|
||||||
Eigen3::Eigen
|
Eigen3::Eigen
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(kalman_node PROPERTIES
|
if(NOT BUILDING_WITH_CATKIN)
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
# Configure RPATH to find libraries in devel space
|
||||||
)
|
set_target_properties(${PROJECT_NAME}_node PROPERTIES
|
||||||
|
BUILD_WITH_INSTALL_RPATH FALSE
|
||||||
|
INSTALL_RPATH_USE_LINK_PATH TRUE
|
||||||
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Installation
|
# 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}
|
||||||
|
)
|
||||||
|
|
||||||
# Cài đặt library
|
## Mark cpp header files for installation
|
||||||
install(TARGETS kalman
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
EXPORT kalman-targets
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||||
LIBRARY DESTINATION lib
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
|
)
|
||||||
|
|
||||||
|
## Install test executable if it exists
|
||||||
|
if(TARGET ${PROJECT_NAME}_node)
|
||||||
|
install(TARGETS ${PROJECT_NAME}_node
|
||||||
|
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
install(TARGETS ${PROJECT_NAME}
|
||||||
|
EXPORT ${PROJECT_NAME}-targets
|
||||||
ARCHIVE DESTINATION lib
|
ARCHIVE DESTINATION lib
|
||||||
|
LIBRARY DESTINATION lib
|
||||||
RUNTIME DESTINATION bin
|
RUNTIME DESTINATION bin
|
||||||
)
|
)
|
||||||
|
|
||||||
# Cài đặt executable (optional)
|
# Export targets
|
||||||
install(TARGETS kalman_node
|
install(EXPORT ${PROJECT_NAME}-targets
|
||||||
RUNTIME DESTINATION bin
|
FILE ${PROJECT_NAME}-targets.cmake
|
||||||
)
|
NAMESPACE ${PROJECT_NAME}::
|
||||||
|
DESTINATION lib/cmake/${PROJECT_NAME}
|
||||||
|
)
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
## Mark cpp header files for installation
|
||||||
# Cài đặt header files (standalone)
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
install(DIRECTORY include/kalman
|
|
||||||
DESTINATION include
|
DESTINATION include
|
||||||
FILES_MATCHING PATTERN "*.h"
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
)
|
)
|
||||||
|
|
||||||
|
## Install test executable if it exists
|
||||||
|
if(TARGET ${PROJECT_NAME}_node)
|
||||||
|
install(TARGETS ${PROJECT_NAME}_node
|
||||||
|
RUNTIME DESTINATION bin
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Print configuration info
|
||||||
|
message(STATUS "=================================")
|
||||||
|
message(STATUS "Project: ${PROJECT_NAME}")
|
||||||
|
message(STATUS "Version: ${PROJECT_VERSION}")
|
||||||
|
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||||||
|
message(STATUS "Libraries: ${PROJECT_NAME}")
|
||||||
|
if(TARGET ${PROJECT_NAME}_node)
|
||||||
|
message(STATUS "Executables: ${PROJECT_NAME}_node")
|
||||||
|
endif()
|
||||||
|
message(STATUS "Dependencies: Eigen3")
|
||||||
|
message(STATUS "=================================")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Export targets
|
|
||||||
install(EXPORT kalman-targets
|
|
||||||
FILE kalman-targets.cmake
|
|
||||||
DESTINATION lib/cmake/kalman
|
|
||||||
)
|
|
||||||
|
|
||||||
# Tùy chọn build
|
|
||||||
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
|
|
||||||
option(BUILD_TESTS "Build test programs" OFF)
|
|
||||||
|
|
||||||
# Flags biên dịch
|
|
||||||
# Warning flags - disabled to suppress warnings during build
|
|
||||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") # -w suppresses all warnings
|
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
|
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
|
|
||||||
|
|
||||||
# In thông tin cấu hình
|
|
||||||
message(STATUS "=================================")
|
|
||||||
message(STATUS "Project: ${PROJECT_NAME}")
|
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
|
||||||
message(STATUS "Eigen3 found: ${EIGEN3_FOUND}")
|
|
||||||
message(STATUS "Eigen3 include dir: ${EIGEN3_INCLUDE_DIRS}")
|
|
||||||
message(STATUS "=================================")
|
|
||||||
|
|
|
||||||
|
|
@ -1,36 +1,53 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
|
project(mkt_algorithm VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Detect if building with Catkin
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building mkt_algorithm with Catkin")
|
message(STATUS "Building mkt_algorithm with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building mkt_algorithm with Standalone CMake")
|
message(STATUS "Building mkt_algorithm with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
project(mkt_algorithm VERSION 1.0.0 LANGUAGES CXX)
|
# C++ Standard - must be set before find_package
|
||||||
|
|
||||||
# Chuẩn C++
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
if(NOT CMAKE_BUILD_TYPE)
|
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Find dependencies
|
# Find dependencies
|
||||||
# ========================================================
|
|
||||||
find_package(Boost REQUIRED COMPONENTS system)
|
find_package(Boost REQUIRED COMPONENTS system)
|
||||||
find_package(Eigen3 REQUIRED)
|
find_package(Eigen3 REQUIRED)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
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
|
||||||
|
geometry_msgs
|
||||||
|
score_algorithm
|
||||||
|
robot_nav_2d_msgs
|
||||||
|
robot_nav_2d_utils
|
||||||
|
kalman
|
||||||
|
angles
|
||||||
|
nav_grid
|
||||||
|
robot_costmap_2d
|
||||||
|
robot_sensor_msgs
|
||||||
|
robot_std_msgs
|
||||||
|
robot_cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# ========================================================
|
||||||
|
# Catkin specific configuration
|
||||||
|
# ========================================================
|
||||||
find_package(catkin REQUIRED COMPONENTS
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
geometry_msgs
|
geometry_msgs
|
||||||
score_algorithm
|
score_algorithm
|
||||||
|
|
@ -44,128 +61,130 @@ if(BUILDING_WITH_CATKIN)
|
||||||
robot_std_msgs
|
robot_std_msgs
|
||||||
robot_cpp
|
robot_cpp
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
# Thư mục include
|
catkin_package(
|
||||||
include_directories(
|
INCLUDE_DIRS include
|
||||||
${PROJECT_SOURCE_DIR}/include
|
LIBRARIES ${PROJECT_NAME}_diff
|
||||||
|
CATKIN_DEPENDS geometry_msgs score_algorithm robot_nav_2d_msgs robot_nav_2d_utils kalman angles nav_grid robot_costmap_2d robot_sensor_msgs robot_std_msgs robot_cpp
|
||||||
|
DEPENDS Boost Eigen3
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
${EIGEN3_INCLUDE_DIRS}
|
${EIGEN3_INCLUDE_DIRS}
|
||||||
)
|
${Boost_INCLUDE_DIRS}
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
include_directories(${catkin_INCLUDE_DIRS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Dependencies packages
|
|
||||||
set(PACKAGES_DIR
|
|
||||||
geometry_msgs
|
|
||||||
score_algorithm
|
|
||||||
robot_nav_2d_msgs
|
|
||||||
robot_nav_2d_utils
|
|
||||||
kalman
|
|
||||||
angles
|
|
||||||
nav_grid
|
|
||||||
robot_costmap_2d
|
|
||||||
robot_sensor_msgs
|
|
||||||
robot_std_msgs
|
|
||||||
)
|
|
||||||
|
|
||||||
# Tìm tất cả file source cho diff library
|
|
||||||
file(GLOB DIFF_SOURCES
|
|
||||||
"src/diff/diff_predictive_trajectory.cpp"
|
|
||||||
"src/diff/diff_rotate_to_goal.cpp"
|
|
||||||
"src/diff/diff_go_straight.cpp"
|
|
||||||
)
|
|
||||||
|
|
||||||
file(GLOB DIFF_HEADERS
|
|
||||||
"include/mkt_algorithm/diff/*.h"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Tạo thư viện shared cho diff
|
|
||||||
add_library(mkt_algorithm_diff SHARED ${DIFF_SOURCES} ${DIFF_HEADERS})
|
|
||||||
|
|
||||||
# Link libraries
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
target_link_libraries(mkt_algorithm_diff
|
|
||||||
PUBLIC
|
|
||||||
${catkin_LIBRARIES}
|
|
||||||
Boost::system
|
|
||||||
Eigen3::Eigen
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_link_libraries(mkt_algorithm_diff
|
|
||||||
PUBLIC
|
|
||||||
${PACKAGES_DIR}
|
|
||||||
robot_cpp
|
|
||||||
Boost::system
|
|
||||||
Eigen3::Eigen
|
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
# ========================================================
|
||||||
add_dependencies(mkt_algorithm_diff ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
# Libraries
|
||||||
endif()
|
# ========================================================
|
||||||
|
add_library(${PROJECT_NAME}_diff SHARED
|
||||||
set_target_properties(mkt_algorithm_diff PROPERTIES
|
src/diff/diff_predictive_trajectory.cpp
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
src/diff/diff_rotate_to_goal.cpp
|
||||||
|
src/diff/diff_go_straight.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
# Set include directories
|
if(BUILDING_WITH_CATKIN)
|
||||||
target_include_directories(mkt_algorithm_diff
|
add_dependencies(${PROJECT_NAME}_diff ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}_diff
|
||||||
PUBLIC
|
PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
${EIGEN3_INCLUDE_DIRS}
|
)
|
||||||
)
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}_diff
|
||||||
|
PUBLIC ${catkin_LIBRARIES}
|
||||||
|
PRIVATE Boost::system Eigen3::Eigen
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}_diff
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}_diff
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
PRIVATE
|
||||||
|
Boost::system Eigen3::Eigen
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME}_diff PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Installation
|
# 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}_diff
|
||||||
|
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
|
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
|
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
|
||||||
|
)
|
||||||
|
|
||||||
# Cài đặt library
|
## Mark cpp header files for installation
|
||||||
install(TARGETS mkt_algorithm_diff
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
EXPORT mkt_algorithm-targets
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||||
LIBRARY DESTINATION lib
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
|
)
|
||||||
|
|
||||||
|
## Install plugins.xml if it exists
|
||||||
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/plugins.xml)
|
||||||
|
install(FILES plugins.xml
|
||||||
|
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
install(TARGETS ${PROJECT_NAME}_diff
|
||||||
|
EXPORT ${PROJECT_NAME}-targets
|
||||||
ARCHIVE DESTINATION lib
|
ARCHIVE DESTINATION lib
|
||||||
|
LIBRARY DESTINATION lib
|
||||||
RUNTIME DESTINATION bin
|
RUNTIME DESTINATION bin
|
||||||
)
|
)
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
# Export targets
|
||||||
# Cài đặt header files (standalone)
|
install(EXPORT ${PROJECT_NAME}-targets
|
||||||
install(DIRECTORY include/mkt_algorithm
|
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
|
DESTINATION include
|
||||||
FILES_MATCHING PATTERN "*.h"
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
# Cài đặt plugins.xml (nếu cần cho pluginlib)
|
## Install plugins.xml if it exists
|
||||||
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/plugins.xml)
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/plugins.xml)
|
||||||
install(FILES plugins.xml
|
install(FILES plugins.xml
|
||||||
DESTINATION share/${PROJECT_NAME}
|
DESTINATION share/${PROJECT_NAME}
|
||||||
)
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Print configuration info
|
||||||
|
message(STATUS "=================================")
|
||||||
|
message(STATUS "Project: ${PROJECT_NAME}")
|
||||||
|
message(STATUS "Version: ${PROJECT_VERSION}")
|
||||||
|
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||||||
|
message(STATUS "Libraries: ${PROJECT_NAME}_diff")
|
||||||
|
message(STATUS "Dependencies: geometry_msgs, score_algorithm, robot_nav_2d_msgs, robot_nav_2d_utils, kalman, angles, nav_grid, robot_costmap_2d, robot_sensor_msgs, robot_std_msgs, robot_cpp, Boost, Eigen3")
|
||||||
|
message(STATUS "=================================")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Export targets
|
|
||||||
install(EXPORT mkt_algorithm-targets
|
|
||||||
FILE mkt_algorithm-targets.cmake
|
|
||||||
DESTINATION lib/cmake/mkt_algorithm
|
|
||||||
)
|
|
||||||
|
|
||||||
# Tùy chọn build
|
|
||||||
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
|
|
||||||
option(BUILD_TESTS "Build test programs" OFF)
|
|
||||||
|
|
||||||
# Flags biên dịch
|
|
||||||
# Warning flags - disabled to suppress warnings during build
|
|
||||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") # -w suppresses all warnings
|
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
|
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
|
|
||||||
|
|
||||||
# In thông tin cấu hình
|
|
||||||
message(STATUS "=================================")
|
|
||||||
message(STATUS "Project: ${PROJECT_NAME}")
|
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
|
||||||
message(STATUS "Eigen3 found: ${EIGEN3_FOUND}")
|
|
||||||
message(STATUS "=================================")
|
|
||||||
|
|
|
||||||
|
|
@ -1,103 +1,144 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
# Tên dự án
|
|
||||||
project(mkt_msgs VERSION 1.0.0 LANGUAGES CXX)
|
project(mkt_msgs VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# Chuẩn C++
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Find Packages
|
|
||||||
# ========================================================
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building mkt_msgs with Catkin")
|
message(STATUS "Building mkt_msgs with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building mkt_msgs with Standalone CMake")
|
message(STATUS "Building mkt_msgs with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
# C++ Standard - must be set before find_package
|
||||||
## Find catkin macros and libraries
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
find_package(catkin REQUIRED COMPONENTS
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
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_nav_2d_msgs
|
robot_nav_2d_msgs
|
||||||
geometry_msgs
|
geometry_msgs
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
# Cho phép các project khác include được header của mkt_msgs
|
else()
|
||||||
set(mkt_msgs_INCLUDE_DIRS
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
||||||
PARENT_SCOPE
|
|
||||||
)
|
|
||||||
|
|
||||||
include_directories(
|
|
||||||
${PROJECT_SOURCE_DIR}/include
|
|
||||||
)
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
include_directories(${catkin_INCLUDE_DIRS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Catkin specific configuration
|
# Catkin specific configuration
|
||||||
# ========================================================
|
# ========================================================
|
||||||
if(BUILDING_WITH_CATKIN)
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
## The catkin_package macro generates cmake config files for your package
|
robot_nav_2d_msgs
|
||||||
|
geometry_msgs
|
||||||
|
)
|
||||||
|
|
||||||
catkin_package(
|
catkin_package(
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
# Header-only library so LIBRARIES is optional; keep for visibility
|
# LIBRARIES không cần vì đây là header-only library
|
||||||
LIBRARIES mkt_msgs
|
|
||||||
CATKIN_DEPENDS robot_nav_2d_msgs geometry_msgs
|
CATKIN_DEPENDS robot_nav_2d_msgs geometry_msgs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# ========================================================
|
# Tìm tất cả header files
|
||||||
# Build (header-only INTERFACE)
|
file(GLOB_RECURSE HEADERS "include/mkt_msgs/*.h")
|
||||||
# ========================================================
|
|
||||||
add_library(mkt_msgs INTERFACE)
|
# Tạo INTERFACE library (header-only)
|
||||||
|
add_library(${PROJECT_NAME} INTERFACE)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
if(BUILDING_WITH_CATKIN)
|
||||||
target_link_libraries(mkt_msgs INTERFACE ${catkin_LIBRARIES})
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
add_dependencies(mkt_msgs ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
|
||||||
else()
|
|
||||||
target_link_libraries(mkt_msgs INTERFACE robot_nav_2d_msgs geometry_msgs)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Set include directories
|
# Set include directories
|
||||||
target_include_directories(mkt_msgs
|
target_include_directories(${PROJECT_NAME}
|
||||||
INTERFACE
|
INTERFACE
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
)
|
)
|
||||||
|
|
||||||
# ========================================================
|
# Link dependencies (header-only, chỉ cần include paths)
|
||||||
# Installation
|
target_link_libraries(${PROJECT_NAME}
|
||||||
# ========================================================
|
INTERFACE
|
||||||
|
${catkin_LIBRARIES}
|
||||||
|
)
|
||||||
|
|
||||||
install(TARGETS mkt_msgs
|
else()
|
||||||
EXPORT mkt_msgs-targets
|
|
||||||
LIBRARY DESTINATION lib
|
# Set include directories
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
# Link dependencies (header-only, chỉ cần include paths)
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
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
|
ARCHIVE DESTINATION lib
|
||||||
RUNTIME DESTINATION bin)
|
LIBRARY DESTINATION lib
|
||||||
|
RUNTIME DESTINATION bin
|
||||||
|
)
|
||||||
|
|
||||||
# Cài đặt header files (cả catkin và standalone)
|
# Export targets
|
||||||
install(DIRECTORY include/mkt_msgs
|
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
|
DESTINATION include
|
||||||
FILES_MATCHING PATTERN "*.h")
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
|
)
|
||||||
|
|
||||||
# Export targets (cho cả hai chế độ)
|
# Print configuration info
|
||||||
install(EXPORT mkt_msgs-targets
|
message(STATUS "=================================")
|
||||||
FILE mkt_msgs-targets.cmake
|
message(STATUS "Project: ${PROJECT_NAME} (Header-Only)")
|
||||||
DESTINATION lib/cmake/mkt_msgs)
|
message(STATUS "Version: ${PROJECT_VERSION}")
|
||||||
|
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||||||
# In thông tin cấu hình
|
message(STATUS "Headers found:")
|
||||||
message(STATUS "=================================")
|
foreach(hdr ${HEADERS})
|
||||||
message(STATUS "Project: ${PROJECT_NAME} (Header-Only)")
|
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
|
||||||
message(STATUS "Headers found:")
|
|
||||||
foreach(hdr ${HEADERS})
|
|
||||||
message(STATUS " - ${hdr}")
|
message(STATUS " - ${hdr}")
|
||||||
endforeach()
|
endforeach()
|
||||||
message(STATUS "=================================")
|
message(STATUS "Dependencies: robot_nav_2d_msgs, geometry_msgs")
|
||||||
|
message(STATUS "=================================")
|
||||||
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -1,38 +1,50 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
|
project(mkt_plugins VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Detect if building with Catkin
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building mkt_plugins with Catkin")
|
message(STATUS "Building mkt_plugins with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building mkt_plugins with Standalone CMake")
|
message(STATUS "Building mkt_plugins with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
project(mkt_plugins VERSION 1.0.0 LANGUAGES CXX)
|
# C++ Standard - must be set before find_package
|
||||||
|
|
||||||
# Chuẩn C++
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
# Build type
|
|
||||||
if(NOT CMAKE_BUILD_TYPE)
|
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Find dependencies
|
# Find dependencies
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Find system dependencies
|
|
||||||
find_package(Boost REQUIRED COMPONENTS system)
|
find_package(Boost REQUIRED COMPONENTS system)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
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
|
||||||
|
score_algorithm
|
||||||
|
robot_nav_2d_msgs
|
||||||
|
robot_nav_2d_utils
|
||||||
|
robot_nav_core2
|
||||||
|
geometry_msgs
|
||||||
|
robot_nav_msgs
|
||||||
|
robot_std_msgs
|
||||||
|
robot_sensor_msgs
|
||||||
|
angles
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# ========================================================
|
||||||
|
# Catkin specific configuration
|
||||||
|
# ========================================================
|
||||||
find_package(catkin REQUIRED COMPONENTS
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
score_algorithm
|
score_algorithm
|
||||||
robot_nav_2d_msgs
|
robot_nav_2d_msgs
|
||||||
|
|
@ -44,84 +56,30 @@ if(BUILDING_WITH_CATKIN)
|
||||||
robot_sensor_msgs
|
robot_sensor_msgs
|
||||||
angles
|
angles
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
# Flags biên dịch
|
|
||||||
# Warning flags - disabled to suppress warnings during build
|
|
||||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") # -w suppresses all warnings
|
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
|
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Catkin specific configuration
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
catkin_package(
|
catkin_package(
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
LIBRARIES mkt_plugins_goal_checker mkt_plugins_standard_traj_generator
|
LIBRARIES ${PROJECT_NAME}_goal_checker ${PROJECT_NAME}_standard_traj_generator
|
||||||
CATKIN_DEPENDS score_algorithm robot_nav_2d_msgs robot_nav_2d_utils robot_nav_core2 geometry_msgs robot_nav_msgs robot_std_msgs robot_sensor_msgs angles
|
CATKIN_DEPENDS score_algorithm robot_nav_2d_msgs robot_nav_2d_utils robot_nav_core2 geometry_msgs robot_nav_msgs robot_std_msgs robot_sensor_msgs angles
|
||||||
|
DEPENDS Boost
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
|
${Boost_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Thư mục include
|
# ========================================================
|
||||||
include_directories(
|
# Libraries
|
||||||
${PROJECT_SOURCE_DIR}/include
|
# ========================================================
|
||||||
)
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
include_directories(${catkin_INCLUDE_DIRS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Dependencies packages (internal libraries)
|
|
||||||
set(PACKAGES_DIR
|
|
||||||
score_algorithm
|
|
||||||
robot_nav_2d_msgs
|
|
||||||
robot_nav_2d_utils
|
|
||||||
robot_nav_core2
|
|
||||||
geometry_msgs
|
|
||||||
robot_nav_msgs
|
|
||||||
robot_std_msgs
|
|
||||||
robot_sensor_msgs
|
|
||||||
angles
|
|
||||||
)
|
|
||||||
|
|
||||||
###########
|
|
||||||
## Build ##
|
|
||||||
###########
|
|
||||||
|
|
||||||
# Library 1: goal_checker
|
|
||||||
add_library(${PROJECT_NAME}_goal_checker SHARED
|
add_library(${PROJECT_NAME}_goal_checker SHARED
|
||||||
src/goal_checker.cpp
|
src/goal_checker.cpp
|
||||||
src/simple_goal_checker.cpp
|
src/simple_goal_checker.cpp
|
||||||
src/equation_line.cpp
|
src/equation_line.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
# Link libraries
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
target_link_libraries(${PROJECT_NAME}_goal_checker
|
|
||||||
PUBLIC ${catkin_LIBRARIES}
|
|
||||||
PRIVATE Boost::boost
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_link_libraries(${PROJECT_NAME}_goal_checker
|
|
||||||
PUBLIC ${PACKAGES_DIR}
|
|
||||||
PRIVATE Boost::boost
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}_goal_checker PROPERTIES
|
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories(${PROJECT_NAME}_goal_checker
|
|
||||||
PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:include>
|
|
||||||
)
|
|
||||||
|
|
||||||
# Library 3: standard_traj_generator
|
|
||||||
add_library(${PROJECT_NAME}_standard_traj_generator SHARED
|
add_library(${PROJECT_NAME}_standard_traj_generator SHARED
|
||||||
src/kinematic_parameters.cpp
|
src/kinematic_parameters.cpp
|
||||||
src/xy_theta_iterator.cpp
|
src/xy_theta_iterator.cpp
|
||||||
|
|
@ -130,69 +88,121 @@ add_library(${PROJECT_NAME}_standard_traj_generator SHARED
|
||||||
)
|
)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
if(BUILDING_WITH_CATKIN)
|
||||||
target_link_libraries(${PROJECT_NAME}_standard_traj_generator
|
add_dependencies(${PROJECT_NAME}_goal_checker ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
PUBLIC ${catkin_LIBRARIES}
|
add_dependencies(${PROJECT_NAME}_standard_traj_generator ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
PRIVATE Boost::boost
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_link_libraries(${PROJECT_NAME}_standard_traj_generator
|
|
||||||
PUBLIC ${PACKAGES_DIR}
|
|
||||||
PRIVATE Boost::boost
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}_standard_traj_generator PROPERTIES
|
target_include_directories(${PROJECT_NAME}_goal_checker
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
target_include_directories(${PROJECT_NAME}_standard_traj_generator
|
|
||||||
PUBLIC
|
PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}_standard_traj_generator
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}_goal_checker
|
||||||
|
PUBLIC ${catkin_LIBRARIES}
|
||||||
|
PRIVATE Boost::system
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}_standard_traj_generator
|
||||||
|
PUBLIC ${catkin_LIBRARIES}
|
||||||
|
PRIVATE Boost::system
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}_goal_checker
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}_standard_traj_generator
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}_goal_checker
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
PRIVATE
|
||||||
|
Boost::system
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}_standard_traj_generator
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
PRIVATE
|
||||||
|
Boost::system
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME}_goal_checker PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME}_standard_traj_generator PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
add_dependencies(${PROJECT_NAME}_goal_checker ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
|
||||||
add_dependencies(${PROJECT_NAME}_standard_traj_generator ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#############
|
# ========================================================
|
||||||
## Install ##
|
# 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}_goal_checker ${PROJECT_NAME}_standard_traj_generator
|
||||||
|
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
|
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
|
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
|
||||||
|
)
|
||||||
|
|
||||||
# Cài đặt libraries
|
## Mark cpp header files for installation
|
||||||
install(TARGETS
|
|
||||||
${PROJECT_NAME}_standard_traj_generator
|
|
||||||
${PROJECT_NAME}_goal_checker
|
|
||||||
EXPORT ${PROJECT_NAME}-targets
|
|
||||||
LIBRARY DESTINATION lib
|
|
||||||
ARCHIVE DESTINATION lib
|
|
||||||
RUNTIME DESTINATION bin
|
|
||||||
)
|
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
|
||||||
# Cài đặt header files (standalone)
|
|
||||||
install(DIRECTORY include/${PROJECT_NAME}/
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
DESTINATION include/${PROJECT_NAME}
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||||
FILES_MATCHING PATTERN "*.h"
|
FILES_MATCHING PATTERN "*.h"
|
||||||
PATTERN ".svn" EXCLUDE
|
PATTERN ".svn" EXCLUDE
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
# Export targets
|
else()
|
||||||
install(EXPORT ${PROJECT_NAME}-targets
|
|
||||||
|
install(TARGETS ${PROJECT_NAME}_goal_checker ${PROJECT_NAME}_standard_traj_generator
|
||||||
|
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
|
FILE ${PROJECT_NAME}-targets.cmake
|
||||||
|
NAMESPACE ${PROJECT_NAME}::
|
||||||
DESTINATION lib/cmake/${PROJECT_NAME}
|
DESTINATION lib/cmake/${PROJECT_NAME}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Tùy chọn build
|
## Mark cpp header files for installation
|
||||||
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
option(BUILD_TESTS "Build test programs" OFF)
|
DESTINATION include
|
||||||
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
|
)
|
||||||
|
|
||||||
# In thông tin cấu hình
|
# Print configuration info
|
||||||
message(STATUS "=================================")
|
message(STATUS "=================================")
|
||||||
message(STATUS "Project: ${PROJECT_NAME}")
|
message(STATUS "Project: ${PROJECT_NAME}")
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
message(STATUS "Version: ${PROJECT_VERSION}")
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||||||
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
message(STATUS "Libraries: ${PROJECT_NAME}_goal_checker, ${PROJECT_NAME}_standard_traj_generator")
|
||||||
message(STATUS "=================================")
|
message(STATUS "Dependencies: score_algorithm, robot_nav_2d_msgs, robot_nav_2d_utils, robot_nav_core2, geometry_msgs, robot_nav_msgs, robot_std_msgs, robot_sensor_msgs, angles, Boost")
|
||||||
|
message(STATUS "=================================")
|
||||||
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 0b01c22019b66c905d6d67611d333742e1e37a55
|
Subproject commit 540d79321b53ef36a4979f15c6e36b759c134e07
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 22aa83fe5a66f5c090bcb8c1fafb41cfe777ebc1
|
Subproject commit c4ae3961ab21c5a2fc48bdcfa9007369fa2efe4c
|
||||||
|
|
@ -1,166 +1,165 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
|
project(two_points_planner VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Detect if building with Catkin
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building two_points_planner with Catkin")
|
message(STATUS "Building two_points_planner with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building two_points_planner with Standalone CMake")
|
message(STATUS "Building two_points_planner with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Tên dự án
|
# C++ Standard - must be set before find_package
|
||||||
project(two_points_planner VERSION 1.0.0 LANGUAGES CXX)
|
|
||||||
|
|
||||||
# Chuẩn C++
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
# Build type
|
|
||||||
if(NOT CMAKE_BUILD_TYPE)
|
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Find dependencies
|
# Find dependencies
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Find system dependencies
|
|
||||||
find_package(Boost REQUIRED COMPONENTS filesystem system)
|
find_package(Boost REQUIRED COMPONENTS filesystem system)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
if (NOT BUILDING_WITH_CATKIN)
|
||||||
find_package(catkin REQUIRED COMPONENTS
|
|
||||||
|
# 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_costmap_2d
|
robot_costmap_2d
|
||||||
robot_nav_core
|
robot_nav_core
|
||||||
geometry_msgs
|
robot_geometry_msgs
|
||||||
robot_nav_msgs
|
robot_nav_msgs
|
||||||
robot_std_msgs
|
|
||||||
tf3
|
tf3
|
||||||
robot_tf3_geometry_msgs
|
robot_tf3_geometry_msgs
|
||||||
|
robot_time
|
||||||
robot_cpp
|
robot_cpp
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
else()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Catkin specific configuration
|
# Catkin specific configuration
|
||||||
# ========================================================
|
# ========================================================
|
||||||
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
catkin_package(
|
|
||||||
INCLUDE_DIRS include
|
|
||||||
LIBRARIES two_points_planner
|
|
||||||
CATKIN_DEPENDS robot_costmap_2d robot_nav_core geometry_msgs robot_nav_msgs robot_std_msgs tf3 robot_tf3_geometry_msgs robot_cpp
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Thư mục include
|
|
||||||
include_directories(
|
|
||||||
${PROJECT_SOURCE_DIR}/include
|
|
||||||
)
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
include_directories(${catkin_INCLUDE_DIRS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Tìm tất cả file source
|
|
||||||
file(GLOB SOURCES "src/two_points_planner.cpp")
|
|
||||||
file(GLOB HEADERS "include/two_points_planner/*.h")
|
|
||||||
|
|
||||||
# Dependencies packages (internal libraries)
|
|
||||||
set(PACKAGES_DIR
|
|
||||||
robot_costmap_2d
|
robot_costmap_2d
|
||||||
robot_nav_core
|
robot_nav_core
|
||||||
geometry_msgs
|
robot_geometry_msgs
|
||||||
robot_nav_msgs
|
robot_nav_msgs
|
||||||
robot_std_msgs
|
|
||||||
tf3
|
tf3
|
||||||
robot_tf3_geometry_msgs
|
robot_tf3_geometry_msgs
|
||||||
)
|
robot_time
|
||||||
|
robot_cpp
|
||||||
# Tạo thư viện shared (.so)
|
|
||||||
add_library(two_points_planner SHARED ${SOURCES} ${HEADERS})
|
|
||||||
|
|
||||||
# Link libraries
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
target_link_libraries(two_points_planner
|
|
||||||
PUBLIC ${catkin_LIBRARIES}
|
|
||||||
PRIVATE Boost::filesystem
|
|
||||||
PRIVATE Boost::system
|
|
||||||
)
|
)
|
||||||
else()
|
|
||||||
target_link_libraries(two_points_planner
|
catkin_package(
|
||||||
PUBLIC ${PACKAGES_DIR}
|
INCLUDE_DIRS include
|
||||||
PUBLIC robot_cpp
|
LIBRARIES ${PROJECT_NAME}
|
||||||
PRIVATE Boost::boost
|
CATKIN_DEPENDS robot_costmap_2d robot_nav_core robot_geometry_msgs robot_nav_msgs tf3 robot_tf3_geometry_msgs robot_time robot_cpp
|
||||||
|
DEPENDS Boost
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
|
${Boost_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
# ========================================================
|
||||||
add_dependencies(two_points_planner ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
# Libraries
|
||||||
endif()
|
# ========================================================
|
||||||
|
add_library(${PROJECT_NAME} SHARED
|
||||||
set_target_properties(two_points_planner PROPERTIES
|
src/two_points_planner.cpp
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Set include directories
|
if(BUILDING_WITH_CATKIN)
|
||||||
target_include_directories(two_points_planner
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
PUBLIC
|
PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PUBLIC ${catkin_LIBRARIES}
|
||||||
|
PRIVATE Boost::filesystem Boost::system
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
PRIVATE
|
||||||
|
Boost::filesystem Boost::system
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Installation
|
# 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}
|
||||||
|
)
|
||||||
|
|
||||||
# Cài đặt library
|
## Mark cpp header files for installation
|
||||||
install(TARGETS two_points_planner
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
EXPORT two_points_planner-targets
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||||
LIBRARY DESTINATION lib
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
install(TARGETS ${PROJECT_NAME}
|
||||||
|
EXPORT ${PROJECT_NAME}-targets
|
||||||
ARCHIVE DESTINATION lib
|
ARCHIVE DESTINATION lib
|
||||||
|
LIBRARY DESTINATION lib
|
||||||
RUNTIME DESTINATION bin
|
RUNTIME DESTINATION bin
|
||||||
)
|
)
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
# Export targets
|
||||||
# Cài đặt header files (standalone)
|
install(EXPORT ${PROJECT_NAME}-targets
|
||||||
install(DIRECTORY include/two_points_planner
|
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
|
DESTINATION include
|
||||||
FILES_MATCHING PATTERN "*.h"
|
FILES_MATCHING PATTERN "*.h"
|
||||||
PATTERN ".svn" EXCLUDE
|
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_costmap_2d, robot_nav_core, robot_geometry_msgs, robot_nav_msgs, tf3, robot_tf3_geometry_msgs, robot_time, robot_cpp, Boost")
|
||||||
|
message(STATUS "=================================")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Export targets
|
|
||||||
install(EXPORT two_points_planner-targets
|
|
||||||
FILE two_points_planner-targets.cmake
|
|
||||||
DESTINATION lib/cmake/two_points_planner
|
|
||||||
)
|
|
||||||
|
|
||||||
# Tùy chọn build
|
|
||||||
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
|
|
||||||
option(BUILD_TESTS "Build test programs" OFF)
|
|
||||||
|
|
||||||
# Flags biên dịch
|
|
||||||
# Warning flags - disabled to suppress warnings during build
|
|
||||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") # -w suppresses all warnings
|
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
|
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
|
|
||||||
|
|
||||||
# In thông tin cấu hình
|
|
||||||
message(STATUS "=================================")
|
|
||||||
message(STATUS "Project: two_points_planner")
|
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
|
||||||
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
|
||||||
message(STATUS "Headers found:")
|
|
||||||
foreach(hdr ${HEADERS})
|
|
||||||
message(STATUS " - ${hdr}")
|
|
||||||
endforeach()
|
|
||||||
message(STATUS "=================================")
|
|
||||||
|
|
|
||||||
|
|
@ -25,21 +25,21 @@
|
||||||
<build_depend>robot_nav_core</build_depend>
|
<build_depend>robot_nav_core</build_depend>
|
||||||
<run_depend>robot_nav_core</run_depend>
|
<run_depend>robot_nav_core</run_depend>
|
||||||
|
|
||||||
<build_depend>geometry_msgs</build_depend>
|
<build_depend>robot_geometry_msgs</build_depend>
|
||||||
<run_depend>geometry_msgs</run_depend>
|
<run_depend>robot_geometry_msgs</run_depend>
|
||||||
|
|
||||||
<build_depend>robot_nav_msgs</build_depend>
|
<build_depend>robot_nav_msgs</build_depend>
|
||||||
<run_depend>robot_nav_msgs</run_depend>
|
<run_depend>robot_nav_msgs</run_depend>
|
||||||
|
|
||||||
<build_depend>robot_std_msgs</build_depend>
|
|
||||||
<run_depend>robot_std_msgs</run_depend>
|
|
||||||
|
|
||||||
<build_depend>tf3</build_depend>
|
<build_depend>tf3</build_depend>
|
||||||
<run_depend>tf3</run_depend>
|
<run_depend>tf3</run_depend>
|
||||||
|
|
||||||
<build_depend>robot_tf3_geometry_msgs</build_depend>
|
<build_depend>robot_tf3_geometry_msgs</build_depend>
|
||||||
<run_depend>robot_tf3_geometry_msgs</run_depend>
|
<run_depend>robot_tf3_geometry_msgs</run_depend>
|
||||||
|
|
||||||
|
<build_depend>robot_time</build_depend>
|
||||||
|
<run_depend>robot_time</run_depend>
|
||||||
|
|
||||||
<build_depend>robot_cpp</build_depend>
|
<build_depend>robot_cpp</build_depend>
|
||||||
<run_depend>robot_cpp</run_depend>
|
<run_depend>robot_cpp</run_depend>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,44 +1,39 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
|
project(pnkx_local_planner VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Detect if building with Catkin
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building pnkx_local_planner with Catkin")
|
message(STATUS "Building pnkx_local_planner with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building pnkx_local_planner with Standalone CMake")
|
message(STATUS "Building pnkx_local_planner with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
project(pnkx_local_planner VERSION 1.0.0 LANGUAGES CXX)
|
# C++ Standard - must be set before find_package
|
||||||
|
|
||||||
# Chuẩn C++
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
# Build type
|
|
||||||
if(NOT CMAKE_BUILD_TYPE)
|
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Find dependencies
|
# Find dependencies
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Find system dependencies
|
|
||||||
find_package(Boost REQUIRED COMPONENTS system)
|
find_package(Boost REQUIRED COMPONENTS system)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
if (NOT BUILDING_WITH_CATKIN)
|
||||||
find_package(catkin REQUIRED COMPONENTS
|
|
||||||
geometry_msgs
|
# 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_geometry_msgs
|
||||||
robot_nav_msgs
|
robot_nav_msgs
|
||||||
robot_std_msgs
|
robot_std_msgs
|
||||||
robot_sensor_msgs
|
|
||||||
robot_visualization_msgs
|
robot_visualization_msgs
|
||||||
|
robot_nav_2d_msgs
|
||||||
robot_nav_2d_utils
|
robot_nav_2d_utils
|
||||||
robot_nav_core2
|
robot_nav_core2
|
||||||
mkt_msgs
|
mkt_msgs
|
||||||
|
|
@ -46,47 +41,22 @@ if(BUILDING_WITH_CATKIN)
|
||||||
robot_costmap_2d
|
robot_costmap_2d
|
||||||
tf3
|
tf3
|
||||||
robot_tf3_geometry_msgs
|
robot_tf3_geometry_msgs
|
||||||
robot_tf3_sensor_msgs
|
data_convert
|
||||||
robot_cpp
|
robot_cpp
|
||||||
angles
|
angles
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
# Flags biên dịch
|
else()
|
||||||
# Warning flags - disabled to suppress warnings during build
|
|
||||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") # -w suppresses all warnings
|
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
|
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
|
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Catkin specific configuration
|
# Catkin specific configuration
|
||||||
# ========================================================
|
# ========================================================
|
||||||
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
if(BUILDING_WITH_CATKIN)
|
robot_geometry_msgs
|
||||||
catkin_package(
|
|
||||||
INCLUDE_DIRS include
|
|
||||||
LIBRARIES pnkx_local_planner pnkx_local_planner_utils
|
|
||||||
CATKIN_DEPENDS geometry_msgs robot_nav_msgs robot_std_msgs robot_sensor_msgs robot_visualization_msgs robot_nav_2d_utils robot_nav_core2 mkt_msgs score_algorithm robot_costmap_2d tf3 robot_tf3_geometry_msgs robot_tf3_sensor_msgs robot_cpp angles
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Thư mục include
|
|
||||||
include_directories(
|
|
||||||
${PROJECT_SOURCE_DIR}/include
|
|
||||||
)
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
include_directories(${catkin_INCLUDE_DIRS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Dependencies packages (internal libraries)
|
|
||||||
set(PACKAGES_DIR
|
|
||||||
geometry_msgs
|
|
||||||
robot_nav_msgs
|
robot_nav_msgs
|
||||||
robot_std_msgs
|
robot_std_msgs
|
||||||
robot_sensor_msgs
|
|
||||||
robot_visualization_msgs
|
robot_visualization_msgs
|
||||||
|
robot_nav_2d_msgs
|
||||||
robot_nav_2d_utils
|
robot_nav_2d_utils
|
||||||
robot_nav_core2
|
robot_nav_core2
|
||||||
mkt_msgs
|
mkt_msgs
|
||||||
|
|
@ -94,125 +64,172 @@ set(PACKAGES_DIR
|
||||||
robot_costmap_2d
|
robot_costmap_2d
|
||||||
tf3
|
tf3
|
||||||
robot_tf3_geometry_msgs
|
robot_tf3_geometry_msgs
|
||||||
robot_tf3_sensor_msgs
|
data_convert
|
||||||
robot_cpp
|
robot_cpp
|
||||||
angles
|
angles
|
||||||
)
|
)
|
||||||
|
|
||||||
|
catkin_package(
|
||||||
|
INCLUDE_DIRS include
|
||||||
|
LIBRARIES ${PROJECT_NAME} ${PROJECT_NAME}_utils
|
||||||
|
CATKIN_DEPENDS robot_geometry_msgs robot_nav_msgs robot_std_msgs robot_visualization_msgs robot_nav_2d_msgs robot_nav_2d_utils robot_nav_core2 mkt_msgs score_algorithm robot_costmap_2d tf3 robot_tf3_geometry_msgs data_convert robot_cpp angles
|
||||||
|
DEPENDS Boost
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
|
${Boost_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ========================================================
|
||||||
|
# Libraries
|
||||||
|
# ========================================================
|
||||||
# Tạo thư viện utils trước
|
# Tạo thư viện utils trước
|
||||||
add_library(${PROJECT_NAME}_utils SHARED
|
add_library(${PROJECT_NAME}_utils SHARED
|
||||||
src/transforms.cpp
|
src/transforms.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
# Link libraries cho utils
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
target_link_libraries(${PROJECT_NAME}_utils
|
|
||||||
PUBLIC ${catkin_LIBRARIES}
|
|
||||||
PRIVATE Boost::boost
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_link_libraries(${PROJECT_NAME}_utils
|
|
||||||
PUBLIC ${PACKAGES_DIR}
|
|
||||||
PRIVATE Boost::boost
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}_utils PROPERTIES
|
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Set include directories cho utils
|
|
||||||
target_include_directories(${PROJECT_NAME}_utils
|
|
||||||
PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:include>
|
|
||||||
)
|
|
||||||
|
|
||||||
# Tạo thư viện chính
|
# Tạo thư viện chính
|
||||||
add_library(${PROJECT_NAME} SHARED
|
add_library(${PROJECT_NAME} SHARED
|
||||||
src/pnkx_local_planner.cpp
|
src/pnkx_local_planner.cpp
|
||||||
# src/pnkx_docking_local_planner.cpp
|
|
||||||
src/pnkx_go_straight_local_planner.cpp
|
src/pnkx_go_straight_local_planner.cpp
|
||||||
src/pnkx_rotate_local_planner.cpp
|
src/pnkx_rotate_local_planner.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
# Link libraries cho thư viện chính
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
target_link_libraries(${PROJECT_NAME}
|
|
||||||
PUBLIC ${PROJECT_NAME}_utils
|
|
||||||
PUBLIC ${catkin_LIBRARIES}
|
|
||||||
PRIVATE Boost::boost
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_link_libraries(${PROJECT_NAME}
|
|
||||||
PUBLIC ${PROJECT_NAME}_utils
|
|
||||||
PUBLIC ${PACKAGES_DIR}
|
|
||||||
PRIVATE Boost::boost
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
# Set include directories cho thư viện chính
|
|
||||||
target_include_directories(${PROJECT_NAME}
|
|
||||||
PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:include>
|
|
||||||
)
|
|
||||||
|
|
||||||
# Compile options
|
|
||||||
target_compile_options(${PROJECT_NAME} PUBLIC "-Wno-terminate")
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
if(BUILDING_WITH_CATKIN)
|
||||||
add_dependencies(${PROJECT_NAME}_utils ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
add_dependencies(${PROJECT_NAME}_utils ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}_utils
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}_utils
|
||||||
|
PUBLIC ${catkin_LIBRARIES}
|
||||||
|
PRIVATE Boost::system
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PUBLIC ${PROJECT_NAME}_utils
|
||||||
|
PUBLIC ${catkin_LIBRARIES}
|
||||||
|
PRIVATE Boost::system
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}_utils
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}_utils
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
PRIVATE
|
||||||
|
Boost::system
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PUBLIC ${PROJECT_NAME}_utils
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
PRIVATE
|
||||||
|
Boost::system
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME}_utils PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Tùy chọn build
|
# ========================================================
|
||||||
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
|
# Install
|
||||||
option(BUILD_TESTS "Build test programs" OFF)
|
# ========================================================
|
||||||
|
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} ${PROJECT_NAME}_utils
|
||||||
|
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 ##
|
|
||||||
#############
|
|
||||||
|
|
||||||
# Cài đặt libraries
|
|
||||||
install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_utils
|
|
||||||
EXPORT ${PROJECT_NAME}-targets
|
|
||||||
LIBRARY DESTINATION lib
|
|
||||||
ARCHIVE DESTINATION lib
|
|
||||||
RUNTIME DESTINATION bin
|
|
||||||
)
|
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
|
||||||
# Cài đặt header files (standalone)
|
|
||||||
install(DIRECTORY include/${PROJECT_NAME}/
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
DESTINATION include/${PROJECT_NAME}
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||||
FILES_MATCHING PATTERN "*.h"
|
FILES_MATCHING PATTERN "*.h"
|
||||||
PATTERN ".svn" EXCLUDE
|
PATTERN ".svn" EXCLUDE
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
# Export targets
|
## Install plugins.xml if it exists
|
||||||
install(EXPORT ${PROJECT_NAME}-targets
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/plugins.xml)
|
||||||
|
install(FILES plugins.xml
|
||||||
|
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_utils
|
||||||
|
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
|
FILE ${PROJECT_NAME}-targets.cmake
|
||||||
|
NAMESPACE ${PROJECT_NAME}::
|
||||||
DESTINATION lib/cmake/${PROJECT_NAME}
|
DESTINATION lib/cmake/${PROJECT_NAME}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Cài đặt plugins.xml nếu có
|
## Mark cpp header files for installation
|
||||||
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/plugins.xml)
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
install(FILES
|
DESTINATION include
|
||||||
plugins.xml
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
|
)
|
||||||
|
|
||||||
|
## Install plugins.xml if it exists
|
||||||
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/plugins.xml)
|
||||||
|
install(FILES plugins.xml
|
||||||
DESTINATION share/${PROJECT_NAME}
|
DESTINATION share/${PROJECT_NAME}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# In thông tin cấu hình
|
# Print configuration info
|
||||||
message(STATUS "=================================")
|
message(STATUS "=================================")
|
||||||
message(STATUS "Project: ${PROJECT_NAME}")
|
message(STATUS "Project: ${PROJECT_NAME}")
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
message(STATUS "Version: ${PROJECT_VERSION}")
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||||||
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
message(STATUS "Libraries: ${PROJECT_NAME}, ${PROJECT_NAME}_utils")
|
||||||
message(STATUS "=================================")
|
message(STATUS "Dependencies: robot_geometry_msgs, robot_nav_msgs, robot_std_msgs, robot_visualization_msgs, robot_nav_2d_msgs, robot_nav_2d_utils, robot_nav_core2, mkt_msgs, score_algorithm, robot_costmap_2d, tf3, robot_tf3_geometry_msgs, data_convert, robot_cpp, angles, Boost")
|
||||||
|
message(STATUS "=================================")
|
||||||
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -19,8 +19,8 @@
|
||||||
|
|
||||||
<buildtool_depend version_gte="0.5.68">catkin</buildtool_depend>
|
<buildtool_depend version_gte="0.5.68">catkin</buildtool_depend>
|
||||||
|
|
||||||
<build_depend>geometry_msgs</build_depend>
|
<build_depend>robot_geometry_msgs</build_depend>
|
||||||
<run_depend>geometry_msgs</run_depend>
|
<run_depend>robot_geometry_msgs</run_depend>
|
||||||
|
|
||||||
<build_depend>robot_nav_msgs</build_depend>
|
<build_depend>robot_nav_msgs</build_depend>
|
||||||
<run_depend>robot_nav_msgs</run_depend>
|
<run_depend>robot_nav_msgs</run_depend>
|
||||||
|
|
@ -28,12 +28,12 @@
|
||||||
<build_depend>robot_std_msgs</build_depend>
|
<build_depend>robot_std_msgs</build_depend>
|
||||||
<run_depend>robot_std_msgs</run_depend>
|
<run_depend>robot_std_msgs</run_depend>
|
||||||
|
|
||||||
<build_depend>robot_sensor_msgs</build_depend>
|
|
||||||
<run_depend>robot_sensor_msgs</run_depend>
|
|
||||||
|
|
||||||
<build_depend>robot_visualization_msgs</build_depend>
|
<build_depend>robot_visualization_msgs</build_depend>
|
||||||
<run_depend>robot_visualization_msgs</run_depend>
|
<run_depend>robot_visualization_msgs</run_depend>
|
||||||
|
|
||||||
|
<build_depend>robot_nav_2d_msgs</build_depend>
|
||||||
|
<run_depend>robot_nav_2d_msgs</run_depend>
|
||||||
|
|
||||||
<build_depend>robot_nav_2d_utils</build_depend>
|
<build_depend>robot_nav_2d_utils</build_depend>
|
||||||
<run_depend>robot_nav_2d_utils</run_depend>
|
<run_depend>robot_nav_2d_utils</run_depend>
|
||||||
|
|
||||||
|
|
@ -55,8 +55,8 @@
|
||||||
<build_depend>robot_tf3_geometry_msgs</build_depend>
|
<build_depend>robot_tf3_geometry_msgs</build_depend>
|
||||||
<run_depend>robot_tf3_geometry_msgs</run_depend>
|
<run_depend>robot_tf3_geometry_msgs</run_depend>
|
||||||
|
|
||||||
<build_depend>robot_tf3_sensor_msgs</build_depend>
|
<build_depend>data_convert</build_depend>
|
||||||
<run_depend>robot_tf3_sensor_msgs</run_depend>
|
<run_depend>data_convert</run_depend>
|
||||||
|
|
||||||
<build_depend>robot_cpp</build_depend>
|
<build_depend>robot_cpp</build_depend>
|
||||||
<run_depend>robot_cpp</run_depend>
|
<run_depend>robot_cpp</run_depend>
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 1df5ed676fe374c63665d434f4d8b2c9923d41a1
|
Subproject commit b8b0528f1e649b93ff07b3458aa01f251b286405
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 80bde38f4d5dbb66bab5a8bd5c2c3faaa870aa9f
|
Subproject commit f052dac1421e7e2bedba4088780526a8775b0c29
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit d7eed928fbfb26d822fd4c4cb7ab84e3cb46866a
|
Subproject commit 004dd7f0ffafe6b3d3a1c86e40bc7041b561756c
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit e0db8d0e20142df254de7232ada253c9ba4d0a08
|
Subproject commit ff90ea2f297258555863a2b6e9cf8442ede3a481
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 7cb758a986f481ee91afb8be7b407b6329dd61b0
|
Subproject commit 4fb3fdc28cc8fdd58fa3ab2d60857feb228948be
|
||||||
|
|
@ -1,40 +1,64 @@
|
||||||
cmake_minimum_required(VERSION 3.0.2)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
|
project(robot_cpp VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Detect if building with Catkin
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building robot_cpp with Catkin")
|
message(STATUS "Building robot_cpp with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building robot_cpp with Standalone CMake")
|
message(STATUS "Building robot_cpp with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
project(robot_cpp)
|
# C++ Standard - must be set before find_package
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
# Find dependencies
|
||||||
|
find_package(yaml-cpp REQUIRED)
|
||||||
|
find_package(console_bridge REQUIRED)
|
||||||
|
|
||||||
|
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_xmlrpcpp
|
||||||
|
robot_time
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Find Packages
|
# Catkin specific configuration
|
||||||
# ========================================================
|
# ========================================================
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
## Find catkin macros and libraries
|
|
||||||
find_package(catkin REQUIRED COMPONENTS
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
robot_xmlrpcpp
|
robot_xmlrpcpp
|
||||||
|
robot_time
|
||||||
|
)
|
||||||
|
|
||||||
|
catkin_package(
|
||||||
|
INCLUDE_DIRS include
|
||||||
|
LIBRARIES ${PROJECT_NAME}
|
||||||
|
CATKIN_DEPENDS robot_xmlrpcpp robot_time
|
||||||
|
# Note: yaml-cpp and console_bridge are system dependencies,
|
||||||
|
# linked via target_link_libraries, not via catkin_package DEPENDS
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
## System dependencies
|
# Use yaml-cpp target if available (modern CMake)
|
||||||
# Find yaml-cpp library
|
|
||||||
find_package(yaml-cpp REQUIRED)
|
|
||||||
|
|
||||||
# Use target if available (modern CMake)
|
|
||||||
if(TARGET yaml-cpp::yaml-cpp)
|
if(TARGET yaml-cpp::yaml-cpp)
|
||||||
set(YAML_CPP_TARGET yaml-cpp::yaml-cpp)
|
set(YAML_CPP_TARGET yaml-cpp::yaml-cpp)
|
||||||
message(STATUS "Using yaml-cpp target: yaml-cpp::yaml-cpp")
|
message(STATUS "Using yaml-cpp target: yaml-cpp::yaml-cpp")
|
||||||
|
|
@ -51,80 +75,83 @@ else()
|
||||||
message(STATUS "Using yaml-cpp library name: yaml-cpp")
|
message(STATUS "Using yaml-cpp library name: yaml-cpp")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(console_bridge REQUIRED)
|
# Compiler flags
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Catkin specific configuration
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
## The catkin_package macro generates cmake config files for your package
|
|
||||||
## Note: yaml-cpp and console_bridge are system dependencies, not declared in DEPENDS
|
|
||||||
## as they don't provide the required INCLUDE_DIRS/LIBRARIES variables for catkin
|
|
||||||
catkin_package(
|
|
||||||
INCLUDE_DIRS include
|
|
||||||
LIBRARIES robot_cpp
|
|
||||||
CATKIN_DEPENDS robot_xmlrpcpp
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
###########
|
|
||||||
## Build ##
|
|
||||||
###########
|
|
||||||
|
|
||||||
## Compiler flags
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
# Warning flags - disabled to suppress warnings during build
|
# Warning flags - disabled to suppress warnings during build
|
||||||
# add_compile_options(-Wall -Wextra -Wpedantic -fPIC)
|
# add_compile_options(-Wall -Wextra -Wpedantic -fPIC)
|
||||||
add_compile_options(-w -fPIC) # -w suppresses all warnings
|
add_compile_options(-w -fPIC) # -w suppresses all warnings
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
## Include directories
|
# Libraries
|
||||||
include_directories(
|
|
||||||
include
|
|
||||||
)
|
|
||||||
|
|
||||||
# yaml-cpp and console_bridge are linked via targets, so we don't need to add their include dirs
|
|
||||||
# if they provide targets (modern CMake), or we handle them via target_link_libraries
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
include_directories(${catkin_INCLUDE_DIRS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Create unified robot_cpp library combining console and node_handle
|
|
||||||
add_library(${PROJECT_NAME} SHARED
|
add_library(${PROJECT_NAME} SHARED
|
||||||
src/console.cpp
|
src/console.cpp
|
||||||
src/node_handle.cpp
|
src/node_handle.cpp
|
||||||
src/plugin_loader_helper.cpp
|
src/plugin_loader_helper.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_include_directories(${PROJECT_NAME}
|
# Enable C++17 filesystem feature
|
||||||
|
target_compile_features(${PROJECT_NAME} PUBLIC cxx_std_17)
|
||||||
|
|
||||||
|
if(BUILDING_WITH_CATKIN)
|
||||||
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
PUBLIC
|
PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
)
|
)
|
||||||
|
|
||||||
## Link libraries
|
# Link filesystem library if needed (for GCC < 9 or Clang)
|
||||||
# Use the determined yaml-cpp target/library
|
set(FILESYSTEM_LIB "")
|
||||||
target_link_libraries(${PROJECT_NAME}
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0")
|
||||||
|
set(FILESYSTEM_LIB "stdc++fs")
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
|
find_library(FILESYSTEM_LIB c++fs)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PUBLIC ${catkin_LIBRARIES}
|
||||||
|
PRIVATE ${YAML_CPP_TARGET}
|
||||||
|
PRIVATE dl # Required for dladdr() function used in plugin_loader_helper.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
if(FILESYSTEM_LIB)
|
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE ${FILESYSTEM_LIB})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
PUBLIC
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
# Link filesystem library if needed (for GCC < 9 or Clang)
|
||||||
|
set(FILESYSTEM_LIB "")
|
||||||
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0")
|
||||||
|
set(FILESYSTEM_LIB "stdc++fs")
|
||||||
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||||
|
find_library(FILESYSTEM_LIB c++fs)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
${YAML_CPP_TARGET}
|
${YAML_CPP_TARGET}
|
||||||
robot_xmlrpcpp
|
|
||||||
robot_time
|
|
||||||
PRIVATE
|
PRIVATE
|
||||||
dl # Required for dladdr() function used in plugin_loader_helper.cpp
|
dl # Required for dladdr() function used in plugin_loader_helper.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if(FILESYSTEM_LIB)
|
||||||
|
target_link_libraries(${PROJECT_NAME} PRIVATE ${FILESYSTEM_LIB})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
## Add cmake target dependencies
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
# Define CMAKE_BINARY_DIR as compile definition so it's available at runtime
|
# Define CMAKE_BINARY_DIR as compile definition so it's available at runtime
|
||||||
target_compile_definitions(${PROJECT_NAME}
|
target_compile_definitions(${PROJECT_NAME}
|
||||||
|
|
@ -132,25 +159,44 @@ target_compile_definitions(${PROJECT_NAME}
|
||||||
PNKX_NAV_CORE_BUILD_DIR="${CMAKE_BINARY_DIR}"
|
PNKX_NAV_CORE_BUILD_DIR="${CMAKE_BINARY_DIR}"
|
||||||
)
|
)
|
||||||
|
|
||||||
# ========================================================
|
if(BUILDING_WITH_CATKIN)
|
||||||
# Installation (Standalone CMake only)
|
## 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}
|
||||||
|
)
|
||||||
|
|
||||||
# Export target trong mọi trường hợp để các target khác có thể export và phụ thuộc vào nó
|
## Mark cpp header files for installation
|
||||||
install(TARGETS ${PROJECT_NAME}
|
install(DIRECTORY include/
|
||||||
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||||
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
install(TARGETS ${PROJECT_NAME}
|
||||||
EXPORT ${PROJECT_NAME}-targets
|
EXPORT ${PROJECT_NAME}-targets
|
||||||
ARCHIVE DESTINATION lib
|
ARCHIVE DESTINATION lib
|
||||||
LIBRARY DESTINATION lib
|
LIBRARY DESTINATION lib
|
||||||
RUNTIME DESTINATION bin)
|
RUNTIME DESTINATION bin
|
||||||
|
)
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
# 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/
|
install(DIRECTORY include/
|
||||||
DESTINATION include
|
DESTINATION include
|
||||||
FILES_MATCHING PATTERN "*.h")
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
install(EXPORT ${PROJECT_NAME}-targets
|
)
|
||||||
# NAMESPACE robot::
|
|
||||||
DESTINATION lib/cmake/${PROJECT_NAME})
|
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Install CMake Config File for find_package()
|
# Install CMake Config File for find_package()
|
||||||
|
|
@ -167,29 +213,16 @@ if(NOT BUILDING_WITH_CATKIN)
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/robot_cppConfig.cmake
|
${CMAKE_CURRENT_BINARY_DIR}/robot_cppConfig.cmake
|
||||||
DESTINATION lib/cmake/${PROJECT_NAME}
|
DESTINATION lib/cmake/${PROJECT_NAME}
|
||||||
)
|
)
|
||||||
else()
|
|
||||||
# Khi build với Catkin, vẫn cần export để các target khác có thể export
|
# Print configuration info
|
||||||
install(EXPORT ${PROJECT_NAME}-targets
|
message(STATUS "=================================")
|
||||||
# NAMESPACE robot::
|
message(STATUS "Project: ${PROJECT_NAME}")
|
||||||
DESTINATION lib/cmake/${PROJECT_NAME})
|
message(STATUS "Version: ${PROJECT_VERSION}")
|
||||||
|
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||||||
|
message(STATUS "Dependencies: robot_xmlrpcpp, robot_time, yaml-cpp, console_bridge")
|
||||||
|
message(STATUS "=================================")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Install CMake Config File for find_package()
|
|
||||||
# ========================================================
|
|
||||||
# Generate config file from template
|
|
||||||
configure_file(
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/robot_cppConfig.cmake.in
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/robot_cppConfig.cmake
|
|
||||||
@ONLY
|
|
||||||
)
|
|
||||||
|
|
||||||
# Install config file
|
|
||||||
install(FILES
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/robot_cppConfig.cmake
|
|
||||||
DESTINATION lib/cmake/${PROJECT_NAME}
|
|
||||||
)
|
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Test executable
|
# Test executable
|
||||||
# ========================================================
|
# ========================================================
|
||||||
|
|
@ -207,8 +240,8 @@ if(BUILD_TESTS)
|
||||||
|
|
||||||
target_link_libraries(test_node_handle
|
target_link_libraries(test_node_handle
|
||||||
PRIVATE
|
PRIVATE
|
||||||
robot_cpp
|
${PROJECT_NAME}
|
||||||
yaml-cpp
|
${YAML_CPP_TARGET}
|
||||||
)
|
)
|
||||||
|
|
||||||
set_target_properties(test_node_handle PROPERTIES
|
set_target_properties(test_node_handle PROPERTIES
|
||||||
|
|
|
||||||
|
|
@ -38,10 +38,15 @@ class PluginLoaderHelper
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @brief Constructor
|
* @brief Constructor
|
||||||
* @param nh NodeHandle to read parameters from (default: root NodeHandle)
|
*/
|
||||||
|
PluginLoaderHelper();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Constructor
|
||||||
|
* @param nh NodeHandle to read parameters from
|
||||||
* @param config_namespace Namespace in NodeHandle where plugins are stored (default: root)
|
* @param config_namespace Namespace in NodeHandle where plugins are stored (default: root)
|
||||||
*/
|
*/
|
||||||
PluginLoaderHelper(robot::NodeHandle nh = robot::NodeHandle(), const std::string& config_namespace = "");
|
PluginLoaderHelper(robot::NodeHandle nh, const std::string& config_namespace = "");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Find library path from symbol name (export name)
|
* @brief Find library path from symbol name (export name)
|
||||||
|
|
@ -76,6 +81,12 @@ public:
|
||||||
*/
|
*/
|
||||||
static std::string getBuildDirectory();
|
static std::string getBuildDirectory();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Get workspace path at runtime
|
||||||
|
* @return Workspace path (e.g., /home/robotics/AGV/Diff_Wheel_Prj/t800_v2_ws), or empty if not found
|
||||||
|
*/
|
||||||
|
static std::string getWorkspacePath();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* @brief Resolve library path (handle relative paths, search in search_paths)
|
* @brief Resolve library path (handle relative paths, search in search_paths)
|
||||||
|
|
|
||||||
|
|
@ -27,17 +27,25 @@
|
||||||
namespace robot
|
namespace robot
|
||||||
{
|
{
|
||||||
|
|
||||||
|
PluginLoaderHelper::PluginLoaderHelper()
|
||||||
|
: PluginLoaderHelper(robot::NodeHandle(), "")
|
||||||
|
{
|
||||||
|
// Delegate to the other constructor with default NodeHandle
|
||||||
|
}
|
||||||
|
|
||||||
PluginLoaderHelper::PluginLoaderHelper(robot::NodeHandle nh, const std::string& config_namespace)
|
PluginLoaderHelper::PluginLoaderHelper(robot::NodeHandle nh, const std::string& config_namespace)
|
||||||
: nh_(nh), config_namespace_(config_namespace)
|
: nh_(nh), config_namespace_(config_namespace)
|
||||||
{
|
{
|
||||||
std::string build_dir = getBuildDirectory();
|
std::string build_dir = getBuildDirectory();
|
||||||
if (!build_dir.empty()) {
|
if (!build_dir.empty()) {
|
||||||
search_paths_.push_back(build_dir);
|
search_paths_.push_back(build_dir);
|
||||||
// Thêm các subdirectories thường dùng
|
}
|
||||||
search_paths_.push_back(build_dir + "/src/Algorithms/Packages/global_planners");
|
|
||||||
search_paths_.push_back(build_dir + "/src/Algorithms/Packages/local_planners");
|
// Thêm các subdirectories thường dùng từ workspace path
|
||||||
search_paths_.push_back(build_dir + "/src/Navigations/Cores/robot_nav_core2_adapter");
|
std::string workspace_path = getWorkspacePath();
|
||||||
search_paths_.push_back(build_dir + "/src/Libraries/robot_costmap_2d");
|
if (!workspace_path.empty()) {
|
||||||
|
search_paths_.push_back(workspace_path + "/install/lib");
|
||||||
|
search_paths_.push_back(workspace_path + "/devel/lib");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -56,7 +64,6 @@ std::string PluginLoaderHelper::findLibraryPath(const std::string& symbol_name)
|
||||||
} else {
|
} else {
|
||||||
param_path = symbol_name + "/library_path";
|
param_path = symbol_name + "/library_path";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to read from NodeHandle
|
// Try to read from NodeHandle
|
||||||
std::string library_path;
|
std::string library_path;
|
||||||
if (nh_.hasParam(param_path)) {
|
if (nh_.hasParam(param_path)) {
|
||||||
|
|
@ -97,12 +104,13 @@ std::string PluginLoaderHelper::findLibraryPath(const std::string& symbol_name)
|
||||||
std::string ld_path_str(ld_path);
|
std::string ld_path_str(ld_path);
|
||||||
std::stringstream ss(ld_path_str);
|
std::stringstream ss(ld_path_str);
|
||||||
std::string path;
|
std::string path;
|
||||||
|
|
||||||
while (std::getline(ss, path, ':')) {
|
while (std::getline(ss, path, ':')) {
|
||||||
if (!path.empty()) {
|
if (!path.empty()) {
|
||||||
// Try different naming conventions
|
// Try different naming conventions
|
||||||
std::vector<std::string> possible_names = {
|
std::vector<std::string> possible_names = {
|
||||||
"lib" + symbol_name + ".so",
|
"lib" + library_path + ".so",
|
||||||
symbol_name + ".so"
|
library_path + ".so"
|
||||||
};
|
};
|
||||||
|
|
||||||
// Also try without namespace
|
// Also try without namespace
|
||||||
|
|
@ -327,5 +335,103 @@ std::string PluginLoaderHelper::getBuildDirectory()
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string PluginLoaderHelper::getWorkspacePath()
|
||||||
|
{
|
||||||
|
// Method 1: Từ environment variable PNKX_NAV_CORE_DIR
|
||||||
|
const char* workspace_path = std::getenv("PNKX_NAV_CORE_DIR");
|
||||||
|
if (workspace_path && std::filesystem::exists(workspace_path)) {
|
||||||
|
return std::string(workspace_path);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method 2: Từ environment variable ROS_WORKSPACE hoặc CATKIN_WS
|
||||||
|
const char* ros_workspace = std::getenv("ROS_WORKSPACE");
|
||||||
|
if (ros_workspace && std::filesystem::exists(ros_workspace)) {
|
||||||
|
return std::string(ros_workspace);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char* catkin_ws = std::getenv("CATKIN_WS");
|
||||||
|
if (catkin_ws && std::filesystem::exists(catkin_ws)) {
|
||||||
|
return std::string(catkin_ws);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method 3: Từ build directory (lấy parent directory)
|
||||||
|
std::string build_dir = getBuildDirectory();
|
||||||
|
if (!build_dir.empty()) {
|
||||||
|
std::filesystem::path build_path(build_dir);
|
||||||
|
std::filesystem::path parent = build_path.parent_path();
|
||||||
|
// Kiểm tra xem có phải workspace không (có thư mục src/)
|
||||||
|
if (std::filesystem::exists(parent / "src") && std::filesystem::is_directory(parent / "src")) {
|
||||||
|
return parent.string();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method 4: Từ executable path và tìm workspace
|
||||||
|
try {
|
||||||
|
char exe_path[PATH_MAX];
|
||||||
|
ssize_t count = readlink("/proc/self/exe", exe_path, PATH_MAX);
|
||||||
|
if (count != -1) {
|
||||||
|
exe_path[count] = '\0';
|
||||||
|
std::filesystem::path exe_dir = std::filesystem::path(exe_path).parent_path();
|
||||||
|
|
||||||
|
// Thử các relative paths: ../.., ../../.., etc. để tìm workspace
|
||||||
|
std::vector<std::filesystem::path> relative_paths = {
|
||||||
|
exe_dir.parent_path().parent_path(), // ../..
|
||||||
|
exe_dir.parent_path().parent_path().parent_path(), // ../../..
|
||||||
|
exe_dir.parent_path().parent_path().parent_path().parent_path() // ../../../..
|
||||||
|
};
|
||||||
|
|
||||||
|
for (const auto& rel_path : relative_paths) {
|
||||||
|
// Kiểm tra xem có phải workspace không (có thư mục src/ hoặc build/)
|
||||||
|
if (std::filesystem::exists(rel_path) &&
|
||||||
|
std::filesystem::is_directory(rel_path) &&
|
||||||
|
(std::filesystem::exists(rel_path / "src") ||
|
||||||
|
std::filesystem::exists(rel_path / "build"))) {
|
||||||
|
try {
|
||||||
|
return std::filesystem::canonical(rel_path).string();
|
||||||
|
} catch (...) {
|
||||||
|
return rel_path.string();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (const std::exception&) {
|
||||||
|
// Ignore errors
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method 5: Từ library path (librobot_cpp.so) và tìm workspace
|
||||||
|
Dl_info dl_info;
|
||||||
|
if (dladdr(reinterpret_cast<void*>(&PluginLoaderHelper::getWorkspacePath), &dl_info) != 0) {
|
||||||
|
if (dl_info.dli_fname) {
|
||||||
|
std::filesystem::path lib_path(dl_info.dli_fname);
|
||||||
|
std::filesystem::path lib_dir = lib_path.parent_path();
|
||||||
|
|
||||||
|
// Tìm workspace từ library path
|
||||||
|
std::filesystem::path current = lib_dir;
|
||||||
|
for (int i = 0; i < 5; ++i) { // Tối đa 5 levels up
|
||||||
|
if (std::filesystem::exists(current / "src") ||
|
||||||
|
std::filesystem::exists(current / "build")) {
|
||||||
|
try {
|
||||||
|
return std::filesystem::canonical(current).string();
|
||||||
|
} catch (...) {
|
||||||
|
return current.string();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
current = current.parent_path();
|
||||||
|
if (current == current.parent_path()) { // Reached root
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Method 6: Hardcoded fallback (nếu các phương pháp trên không hoạt động)
|
||||||
|
std::string fallback = "/home/robotics/AGV/Diff_Wheel_Prj/t800_v2_ws";
|
||||||
|
if (std::filesystem::exists(fallback)) {
|
||||||
|
return fallback;
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace robot
|
} // namespace robot
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,106 +1,149 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
|
project(robot_nav_2d_msgs VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Detect if building with Catkin
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building robot_nav_2d_msgs with Catkin")
|
message(STATUS "Building robot_nav_2d_msgs with Catkin")
|
||||||
find_package(catkin REQUIRED)
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building robot_nav_2d_msgs with Standalone CMake")
|
message(STATUS "Building robot_nav_2d_msgs with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
project(robot_nav_2d_msgs VERSION 1.0.0 LANGUAGES CXX)
|
if (NOT BUILDING_WITH_CATKIN)
|
||||||
|
|
||||||
# Chuẩn C++
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
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}")
|
||||||
|
|
||||||
|
set(PACKAGES_DIR
|
||||||
|
robot_std_msgs
|
||||||
|
robot_geometry_msgs
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Catkin specific configuration
|
# Catkin specific configuration
|
||||||
# ========================================================
|
# ========================================================
|
||||||
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
|
robot_std_msgs
|
||||||
|
robot_geometry_msgs
|
||||||
|
)
|
||||||
|
|
||||||
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(
|
catkin_package(
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
# LIBRARIES không cần vì đây là header-only library
|
# 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
|
# CATKIN_DEPENDS không cần vì dependencies không phải Catkin packages
|
||||||
)
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Tìm tất cả header files
|
# Tìm tất cả header files
|
||||||
file(GLOB_RECURSE HEADERS "include/robot_nav_2d_msgs/*.h")
|
file(GLOB_RECURSE HEADERS "include/robot_nav_2d_msgs/*.h")
|
||||||
|
|
||||||
# Tạo INTERFACE library (header-only)
|
# Tạo INTERFACE library (header-only)
|
||||||
add_library(robot_nav_2d_msgs INTERFACE)
|
add_library(${PROJECT_NAME} INTERFACE)
|
||||||
|
|
||||||
# Set include directories
|
if(BUILDING_WITH_CATKIN)
|
||||||
target_include_directories(robot_nav_2d_msgs
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
|
||||||
|
# Set include directories
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
INTERFACE
|
INTERFACE
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
)
|
)
|
||||||
|
|
||||||
# Link dependencies (header-only, chỉ cần include paths)
|
# Link dependencies (header-only, chỉ cần include paths)
|
||||||
# Các dependencies này cũng là header-only từ common_msgs
|
target_link_libraries(${PROJECT_NAME}
|
||||||
target_link_libraries(robot_nav_2d_msgs
|
|
||||||
INTERFACE
|
INTERFACE
|
||||||
robot_std_msgs
|
${catkin_LIBRARIES}
|
||||||
geometry_msgs
|
)
|
||||||
)
|
|
||||||
|
|
||||||
# Add include directories from dependencies explicitly for Catkin build
|
# Add include directories from dependencies explicitly for Catkin build
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
# Use relative paths from current source directory
|
# Use relative paths from current source directory
|
||||||
# From robot_nav_2d_msgs (pnkx_robot_nav_core2/src/Libraries/robot_nav_2d_msgs)
|
target_include_directories(${PROJECT_NAME} INTERFACE
|
||||||
# to robot_std_msgs (pnkx_robot_nav_core2/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
|
|
||||||
$<BUILD_INTERFACE:${ROBOT_STD_MSGS_INCLUDE}>
|
$<BUILD_INTERFACE:${ROBOT_STD_MSGS_INCLUDE}>
|
||||||
$<BUILD_INTERFACE:${GEOMETRY_MSGS_INCLUDE}>
|
$<BUILD_INTERFACE:${GEOMETRY_MSGS_INCLUDE}>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# Set include directories
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
# Link dependencies (header-only, chỉ cần include paths)
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Cài đặt header files
|
if(BUILDING_WITH_CATKIN)
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
## Mark libraries for installation
|
||||||
install(DIRECTORY include/robot_nav_2d_msgs
|
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
|
||||||
DESTINATION include
|
install(TARGETS ${PROJECT_NAME}
|
||||||
FILES_MATCHING PATTERN "*.h")
|
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
endif()
|
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
|
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
|
||||||
|
)
|
||||||
|
|
||||||
# Cài đặt target
|
## Mark cpp header files for installation
|
||||||
install(TARGETS robot_nav_2d_msgs
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
EXPORT robot_nav_2d_msgs-targets
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||||
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
|
||||||
|
install(TARGETS ${PROJECT_NAME}
|
||||||
|
EXPORT ${PROJECT_NAME}-targets
|
||||||
ARCHIVE DESTINATION lib
|
ARCHIVE DESTINATION lib
|
||||||
LIBRARY DESTINATION lib
|
LIBRARY DESTINATION lib
|
||||||
RUNTIME DESTINATION bin)
|
RUNTIME DESTINATION bin
|
||||||
|
)
|
||||||
|
|
||||||
# Export targets
|
# Export targets
|
||||||
# Bây giờ có thể export dependencies vì robot_std_msgs và geometry_msgs đã được export
|
install(EXPORT ${PROJECT_NAME}-targets
|
||||||
install(EXPORT robot_nav_2d_msgs-targets
|
FILE ${PROJECT_NAME}-targets.cmake
|
||||||
FILE robot_nav_2d_msgs-targets.cmake
|
NAMESPACE ${PROJECT_NAME}::
|
||||||
NAMESPACE robot_nav_2d_msgs::
|
DESTINATION lib/cmake/${PROJECT_NAME}
|
||||||
DESTINATION lib/cmake/robot_nav_2d_msgs)
|
)
|
||||||
|
|
||||||
# In thông tin cấu hình
|
## Mark cpp header files for installation
|
||||||
message(STATUS "=================================")
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
message(STATUS "Project: ${PROJECT_NAME} (Header-Only)")
|
DESTINATION include
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
FILES_MATCHING PATTERN "*.h"
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
PATTERN ".svn" EXCLUDE
|
||||||
message(STATUS "Headers found:")
|
)
|
||||||
foreach(hdr ${HEADERS})
|
|
||||||
|
# Print configuration info
|
||||||
|
message(STATUS "=================================")
|
||||||
|
message(STATUS "Project: ${PROJECT_NAME} (Header-Only)")
|
||||||
|
message(STATUS "Version: ${PROJECT_VERSION}")
|
||||||
|
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||||||
|
message(STATUS "Headers found:")
|
||||||
|
foreach(hdr ${HEADERS})
|
||||||
message(STATUS " - ${hdr}")
|
message(STATUS " - ${hdr}")
|
||||||
endforeach()
|
endforeach()
|
||||||
message(STATUS "Dependencies: robot_std_msgs, geometry_msgs")
|
message(STATUS "Dependencies: robot_std_msgs, geometry_msgs")
|
||||||
message(STATUS "=================================")
|
message(STATUS "=================================")
|
||||||
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -19,4 +19,8 @@
|
||||||
|
|
||||||
<buildtool_depend version_gte="0.5.68">catkin</buildtool_depend>
|
<buildtool_depend version_gte="0.5.68">catkin</buildtool_depend>
|
||||||
|
|
||||||
|
<build_depend>robot_std_msgs</build_depend>
|
||||||
|
<build_depend>robot_geometry_msgs</build_depend>
|
||||||
|
<run_depend>robot_std_msgs</run_depend>
|
||||||
|
<run_depend>robot_geometry_msgs</run_depend>
|
||||||
</package>
|
</package>
|
||||||
|
|
@ -1,22 +1,6 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
project(robot_nav_2d_utils VERSION 1.0.0 LANGUAGES CXX)
|
project(robot_nav_2d_utils VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
||||||
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(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building robot_nav_2d_utils with Catkin")
|
message(STATUS "Building robot_nav_2d_utils with Catkin")
|
||||||
|
|
@ -26,7 +10,41 @@ else()
|
||||||
message(STATUS "Building robot_nav_2d_utils with Standalone CMake")
|
message(STATUS "Building robot_nav_2d_utils with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
'set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
# Find dependencies
|
||||||
|
find_package(console_bridge REQUIRED)
|
||||||
|
find_package(Boost REQUIRED COMPONENTS system thread)
|
||||||
|
|
||||||
|
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_nav_2d_msgs
|
||||||
|
robot_geometry_msgs
|
||||||
|
robot_nav_msgs
|
||||||
|
nav_grid
|
||||||
|
robot_nav_core2
|
||||||
|
tf3
|
||||||
|
robot_tf3_geometry_msgs
|
||||||
|
robot_cpp
|
||||||
|
console_bridge
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# ========================================================
|
||||||
|
# Catkin specific configuration
|
||||||
|
# ========================================================
|
||||||
find_package(catkin REQUIRED COMPONENTS
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
robot_nav_2d_msgs
|
robot_nav_2d_msgs
|
||||||
robot_geometry_msgs
|
robot_geometry_msgs
|
||||||
|
|
@ -38,183 +56,178 @@ if(BUILDING_WITH_CATKIN)
|
||||||
robot_cpp
|
robot_cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Find dependencies
|
||||||
|
find_package(console_bridge REQUIRED)
|
||||||
|
find_package(Boost REQUIRED COMPONENTS system thread)
|
||||||
|
|
||||||
catkin_package(
|
catkin_package(
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
LIBRARIES ${PROJECT_NAME}_conversions ${PROJECT_NAME}_path_ops ${PROJECT_NAME}_polygons ${PROJECT_NAME}_bounds ${PROJECT_NAME}_tf_help ${PROJECT_NAME}
|
LIBRARIES ${PROJECT_NAME}_conversions ${PROJECT_NAME}_path_ops ${PROJECT_NAME}_polygons ${PROJECT_NAME}_bounds ${PROJECT_NAME}_tf_help ${PROJECT_NAME}
|
||||||
# CATKIN_DEPENDS không cần vì dependencies không phải Catkin packages
|
CATKIN_DEPENDS robot_cpp robot_geometry_msgs robot_nav_2d_msgs robot_nav_msgs nav_grid robot_nav_core2
|
||||||
DEPENDS console_bridge Boost
|
DEPENDS console_bridge Boost
|
||||||
)
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
|
${Boost_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Find dependencies
|
|
||||||
find_package(console_bridge REQUIRED)
|
|
||||||
find_package(Boost REQUIRED COMPONENTS system thread)
|
|
||||||
|
|
||||||
# Libraries
|
# Libraries
|
||||||
add_library(${PROJECT_NAME}_conversions src/conversions.cpp)
|
add_library(${PROJECT_NAME}_conversions src/conversions.cpp)
|
||||||
target_include_directories(${PROJECT_NAME}_conversions
|
|
||||||
PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:include>
|
|
||||||
)
|
|
||||||
target_link_libraries(${PROJECT_NAME}_conversions
|
|
||||||
PUBLIC
|
|
||||||
robot_nav_2d_msgs
|
|
||||||
robot_geometry_msgs
|
|
||||||
robot_nav_msgs
|
|
||||||
nav_grid
|
|
||||||
robot_nav_core2
|
|
||||||
robot_cpp
|
|
||||||
PRIVATE
|
|
||||||
console_bridge::console_bridge
|
|
||||||
Boost::system
|
|
||||||
Boost::thread
|
|
||||||
)
|
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}_conversions PROPERTIES
|
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
|
||||||
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}_path_ops src/path_ops.cpp)
|
add_library(${PROJECT_NAME}_path_ops src/path_ops.cpp)
|
||||||
target_include_directories(${PROJECT_NAME}_path_ops
|
|
||||||
PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:include>
|
|
||||||
)
|
|
||||||
target_link_libraries(${PROJECT_NAME}_path_ops
|
|
||||||
PUBLIC
|
|
||||||
robot_nav_2d_msgs
|
|
||||||
robot_geometry_msgs
|
|
||||||
robot_cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}_path_ops PROPERTIES
|
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
|
||||||
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}_polygons src/polygons.cpp src/footprint.cpp)
|
add_library(${PROJECT_NAME}_polygons src/polygons.cpp src/footprint.cpp)
|
||||||
target_include_directories(${PROJECT_NAME}_polygons
|
|
||||||
PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:include>
|
|
||||||
)
|
|
||||||
|
|
||||||
if(robot_xmlrpcpp_FOUND)
|
|
||||||
target_include_directories(${PROJECT_NAME}_polygons PRIVATE ${robot_xmlrpcpp_INCLUDE_DIRS})
|
|
||||||
target_link_libraries(${PROJECT_NAME}_polygons
|
|
||||||
PUBLIC robot_nav_2d_msgs robot_geometry_msgs robot_cpp
|
|
||||||
PRIVATE ${robot_xmlrpcpp_LIBRARIES})
|
|
||||||
elseif(XmlRpcCpp_FOUND)
|
|
||||||
target_include_directories(${PROJECT_NAME}_polygons PRIVATE ${XmlRpcCpp_INCLUDE_DIRS})
|
|
||||||
target_link_libraries(${PROJECT_NAME}_polygons
|
|
||||||
PUBLIC robot_nav_2d_msgs robot_geometry_msgs robot_cpp
|
|
||||||
PRIVATE ${XmlRpcCpp_LIBRARIES})
|
|
||||||
else()
|
|
||||||
target_include_directories(${PROJECT_NAME}_polygons PRIVATE ${robot_xmlrpcpp_INCLUDE_DIRS})
|
|
||||||
target_link_libraries(${PROJECT_NAME}_polygons
|
|
||||||
PUBLIC robot_nav_2d_msgs robot_geometry_msgs robot_cpp
|
|
||||||
PRIVATE ${robot_xmlrpcpp_LIBRARIES})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}_polygons PROPERTIES
|
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
|
||||||
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}_bounds src/bounds.cpp)
|
add_library(${PROJECT_NAME}_bounds src/bounds.cpp)
|
||||||
target_include_directories(${PROJECT_NAME}_bounds
|
|
||||||
PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:include>
|
|
||||||
)
|
|
||||||
target_link_libraries(${PROJECT_NAME}_bounds
|
|
||||||
PUBLIC
|
|
||||||
nav_grid
|
|
||||||
robot_nav_core2
|
|
||||||
robot_cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}_bounds PROPERTIES
|
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
|
||||||
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
|
||||||
)
|
|
||||||
|
|
||||||
add_library(${PROJECT_NAME}_tf_help src/tf_help.cpp)
|
add_library(${PROJECT_NAME}_tf_help src/tf_help.cpp)
|
||||||
target_include_directories(${PROJECT_NAME}_tf_help
|
|
||||||
PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:include>
|
|
||||||
)
|
|
||||||
target_link_libraries(${PROJECT_NAME}_tf_help
|
|
||||||
PUBLIC
|
|
||||||
robot_nav_2d_msgs
|
|
||||||
robot_geometry_msgs
|
|
||||||
robot_nav_msgs
|
|
||||||
robot_nav_core2
|
|
||||||
tf3
|
|
||||||
robot_tf3_geometry_msgs
|
|
||||||
robot_cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
set_target_properties(${PROJECT_NAME}_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
|
|
||||||
add_library(${PROJECT_NAME} INTERFACE)
|
add_library(${PROJECT_NAME} INTERFACE)
|
||||||
target_include_directories(${PROJECT_NAME}
|
|
||||||
|
if(BUILDING_WITH_CATKIN)
|
||||||
|
add_dependencies(${PROJECT_NAME}_conversions ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
add_dependencies(${PROJECT_NAME}_path_ops ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
add_dependencies(${PROJECT_NAME}_polygons ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
add_dependencies(${PROJECT_NAME}_bounds ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
add_dependencies(${PROJECT_NAME}_tf_help ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}_conversions ${PACKAGES_DIR} ${Boost_LIBRARIES})
|
||||||
|
target_link_libraries(${PROJECT_NAME}_path_ops ${PACKAGES_DIR} ${Boost_LIBRARIES})
|
||||||
|
target_link_libraries(${PROJECT_NAME}_polygons ${PACKAGES_DIR} ${Boost_LIBRARIES})
|
||||||
|
target_link_libraries(${PROJECT_NAME}_bounds ${PACKAGES_DIR} ${Boost_LIBRARIES})
|
||||||
|
target_link_libraries(${PROJECT_NAME}_tf_help ${PACKAGES_DIR} ${Boost_LIBRARIES})
|
||||||
|
target_link_libraries(${PROJECT_NAME} INTERFACE ${PACKAGES_DIR} ${Boost_LIBRARIES})
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}_conversions
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
${Boost_LIBRARIES}
|
||||||
|
)
|
||||||
|
target_link_libraries(${PROJECT_NAME}_path_ops
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
${Boost_LIBRARIES}
|
||||||
|
)
|
||||||
|
target_link_libraries(${PROJECT_NAME}_polygons
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
${Boost_LIBRARIES}
|
||||||
|
)
|
||||||
|
target_link_libraries(${PROJECT_NAME}_bounds
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
${Boost_LIBRARIES}
|
||||||
|
)
|
||||||
|
target_link_libraries(${PROJECT_NAME}_tf_help
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
${Boost_LIBRARIES}
|
||||||
|
)
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
${Boost_LIBRARIES}
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME}_conversions PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
)
|
||||||
|
set_target_properties(${PROJECT_NAME}_path_ops PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
)
|
||||||
|
set_target_properties(${PROJECT_NAME}_polygons PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
)
|
||||||
|
set_target_properties(${PROJECT_NAME}_bounds PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
)
|
||||||
|
set_target_properties(${PROJECT_NAME}_tf_help PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
)
|
||||||
|
# Note: ${PROJECT_NAME} is an INTERFACE library, so it cannot have LIBRARY_OUTPUT_DIRECTORY
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}_conversions
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
target_include_directories(${PROJECT_NAME}_path_ops
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
target_include_directories(${PROJECT_NAME}_polygons
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
target_include_directories(${PROJECT_NAME}_bounds
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
target_include_directories(${PROJECT_NAME}_tf_help
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
INTERFACE
|
INTERFACE
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
)
|
)
|
||||||
target_link_libraries(${PROJECT_NAME}
|
|
||||||
INTERFACE
|
|
||||||
${PROJECT_NAME}_conversions
|
|
||||||
${PROJECT_NAME}_path_ops
|
|
||||||
${PROJECT_NAME}_polygons
|
|
||||||
${PROJECT_NAME}_bounds
|
|
||||||
${PROJECT_NAME}_tf_help
|
|
||||||
robot_cpp
|
|
||||||
)
|
|
||||||
|
|
||||||
# Install header files
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
|
||||||
install(DIRECTORY include/${PROJECT_NAME}
|
|
||||||
DESTINATION include
|
|
||||||
FILES_MATCHING PATTERN "*.h")
|
|
||||||
|
|
||||||
# Install mapbox headers
|
|
||||||
install(DIRECTORY include/mapbox
|
|
||||||
DESTINATION include
|
|
||||||
FILES_MATCHING PATTERN "*.hpp")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Install targets
|
if(BUILDING_WITH_CATKIN)
|
||||||
install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_conversions ${PROJECT_NAME}_path_ops ${PROJECT_NAME}_polygons ${PROJECT_NAME}_bounds ${PROJECT_NAME}_tf_help
|
## Mark libraries for installation
|
||||||
|
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
|
||||||
|
install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_conversions ${PROJECT_NAME}_path_ops ${PROJECT_NAME}_polygons ${PROJECT_NAME}_bounds ${PROJECT_NAME}_tf_help
|
||||||
|
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}/ include/mapbox
|
||||||
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||||
|
FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
|
||||||
|
install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_conversions ${PROJECT_NAME}_path_ops ${PROJECT_NAME}_polygons ${PROJECT_NAME}_bounds ${PROJECT_NAME}_tf_help
|
||||||
EXPORT ${PROJECT_NAME}-targets
|
EXPORT ${PROJECT_NAME}-targets
|
||||||
ARCHIVE DESTINATION lib
|
|
||||||
LIBRARY DESTINATION lib
|
LIBRARY DESTINATION lib
|
||||||
RUNTIME DESTINATION bin)
|
ARCHIVE DESTINATION lib
|
||||||
|
RUNTIME DESTINATION bin
|
||||||
|
)
|
||||||
|
|
||||||
# Export targets
|
# Export targets
|
||||||
install(EXPORT ${PROJECT_NAME}-targets
|
install(EXPORT ${PROJECT_NAME}-targets
|
||||||
FILE ${PROJECT_NAME}-targets.cmake
|
FILE ${PROJECT_NAME}-targets.cmake
|
||||||
NAMESPACE ${PROJECT_NAME}::
|
DESTINATION lib/cmake/${PROJECT_NAME}
|
||||||
DESTINATION lib/cmake/${PROJECT_NAME})
|
)
|
||||||
|
|
||||||
|
## Mark cpp header files for installation
|
||||||
|
install(DIRECTORY include/${PROJECT_NAME}/ include/mapbox
|
||||||
|
DESTINATION include
|
||||||
|
FILES_MATCHING PATTERN "*.h" PATTERN "*.hpp"
|
||||||
|
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 "Libraries: ${PROJECT_NAME}_conversions, ${PROJECT_NAME}_path_ops, ${PROJECT_NAME}_polygons, ${PROJECT_NAME}_bounds, ${PROJECT_NAME}_tf_help")
|
||||||
|
message(STATUS "Dependencies: robot_nav_2d_msgs, robot_geometry_msgs, robot_nav_msgs, nav_grid, robot_nav_core2, tf3, console_bridge, Boost")
|
||||||
|
message(STATUS "=================================")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Print configuration info
|
|
||||||
message(STATUS "=================================")
|
|
||||||
message(STATUS "Project: ${PROJECT_NAME}")
|
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
|
||||||
message(STATUS "Libraries: ${PROJECT_NAME}_conversions, ${PROJECT_NAME}_path_ops, ${PROJECT_NAME}_polygons, ${PROJECT_NAME}_bounds, ${PROJECT_NAME}_tf_help")
|
|
||||||
message(STATUS "Dependencies: robot_nav_2d_msgs, robot_geometry_msgs, robot_nav_msgs, nav_grid, robot_nav_core2, tf3, console_bridge, Boost")
|
|
||||||
message(STATUS "=================================")
|
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 504de86ee92a2684564cc3a561f3f534eb798160
|
Subproject commit 6b23f32c6e3d3b969c840ef763c5fb22cc2e14d7
|
||||||
|
|
@ -1,113 +1,208 @@
|
||||||
cmake_minimum_required(VERSION 3.0.2)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
project(tf3)
|
project(tf3 VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
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)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
|
message(STATUS "Building tf3 with Catkin")
|
||||||
|
|
||||||
find_package(catkin REQUIRED COMPONENTS console_bridge)
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
|
message(STATUS "Building tf3 with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# C++ Standard - must be set before find_package
|
||||||
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
# Find dependencies
|
||||||
find_package(console_bridge REQUIRED)
|
find_package(console_bridge REQUIRED)
|
||||||
find_package(Boost REQUIRED COMPONENTS system thread)
|
find_package(Boost REQUIRED COMPONENTS system thread)
|
||||||
|
|
||||||
|
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}")
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Catkin specific configuration
|
# Catkin specific configuration
|
||||||
# ========================================================
|
# ========================================================
|
||||||
|
find_package(catkin REQUIRED)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
## The catkin_package macro generates cmake config files for your package
|
|
||||||
catkin_package(
|
catkin_package(
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
LIBRARIES tf3
|
LIBRARIES ${PROJECT_NAME}
|
||||||
DEPENDS console_bridge
|
DEPENDS console_bridge Boost
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
|
${console_bridge_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
include_directories(include ${console_bridge_INCLUDE_DIRS})
|
|
||||||
|
|
||||||
# export user definitions
|
# Libraries
|
||||||
|
add_library(${PROJECT_NAME} SHARED
|
||||||
|
src/cache.cpp
|
||||||
|
src/buffer_core.cpp
|
||||||
|
src/static_cache.cpp
|
||||||
|
)
|
||||||
|
|
||||||
#CPP Libraries
|
if(BUILDING_WITH_CATKIN)
|
||||||
add_library(tf3 src/cache.cpp src/buffer_core.cpp src/static_cache.cpp)
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
target_link_libraries(tf3 ${Boost_LIBRARIES} ${console_bridge_LIBRARIES})
|
|
||||||
set_target_properties(tf3 PROPERTIES
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PUBLIC ${catkin_LIBRARIES}
|
||||||
|
PRIVATE Boost::boost Boost::system Boost::thread
|
||||||
|
PRIVATE console_bridge::console_bridge
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PUBLIC
|
||||||
|
Boost::boost Boost::system Boost::thread
|
||||||
|
console_bridge::console_bridge
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
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()
|
endif()
|
||||||
target_include_directories(tf3 PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:include>)
|
|
||||||
|
|
||||||
add_executable(simple_tf3_example examples/simple_tf3_example.cpp)
|
if(BUILDING_WITH_CATKIN)
|
||||||
target_include_directories(simple_tf3_example PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
## Mark libraries for installation
|
||||||
target_link_libraries(simple_tf3_example PRIVATE tf3 pthread ${console_bridge_LIBRARIES})
|
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
|
||||||
set_target_properties(simple_tf3_example PROPERTIES
|
install(TARGETS ${PROJECT_NAME}
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
)
|
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
# Export target trong mọi trường hợp để các target khác có thể export và phụ thuộc vào nó
|
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
|
||||||
install(TARGETS tf3
|
)
|
||||||
EXPORT tf3-targets
|
|
||||||
|
## 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
|
ARCHIVE DESTINATION lib
|
||||||
LIBRARY DESTINATION lib
|
LIBRARY DESTINATION lib
|
||||||
RUNTIME DESTINATION bin
|
RUNTIME DESTINATION bin
|
||||||
)
|
)
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
# 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}/
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
DESTINATION 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: console_bridge, Boost")
|
||||||
|
message(STATUS "=================================")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ========================================================
|
||||||
|
# Example executables
|
||||||
|
# ========================================================
|
||||||
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/examples/simple_tf3_example.cpp)
|
||||||
|
add_executable(${PROJECT_NAME}_example examples/simple_tf3_example.cpp)
|
||||||
|
target_include_directories(${PROJECT_NAME}_example PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||||
|
target_link_libraries(${PROJECT_NAME}_example PRIVATE
|
||||||
|
${PROJECT_NAME}
|
||||||
|
pthread
|
||||||
|
console_bridge::console_bridge
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Export targets - cần trong mọi trường hợp
|
# ========================================================
|
||||||
install(EXPORT tf3-targets
|
# Test executables
|
||||||
FILE tf3-targets.cmake
|
# ========================================================
|
||||||
NAMESPACE tf3::
|
|
||||||
DESTINATION lib/cmake/tf3)
|
|
||||||
|
|
||||||
# Tests
|
|
||||||
option(BUILD_TESTING "Build tests" OFF)
|
option(BUILD_TESTING "Build tests" OFF)
|
||||||
if(BUILD_TESTING)
|
if(BUILD_TESTING)
|
||||||
enable_testing()
|
enable_testing()
|
||||||
add_executable(test_cache_unittest test/cache_unittest.cpp)
|
|
||||||
target_link_libraries(test_cache_unittest tf3 ${console_bridge_LIBRARIES})
|
|
||||||
|
|
||||||
add_executable(test_static_cache_unittest test/static_cache_test.cpp)
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/test/cache_unittest.cpp)
|
||||||
target_link_libraries(test_static_cache_unittest tf3 ${console_bridge_LIBRARIES})
|
add_executable(${PROJECT_NAME}_cache_test test/cache_unittest.cpp)
|
||||||
|
target_link_libraries(${PROJECT_NAME}_cache_test PRIVATE
|
||||||
|
${PROJECT_NAME}
|
||||||
|
console_bridge::console_bridge
|
||||||
|
)
|
||||||
|
add_test(NAME ${PROJECT_NAME}_cache_test COMMAND ${PROJECT_NAME}_cache_test)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_executable(test_simple test/simple_tf3_core.cpp)
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/test/static_cache_test.cpp)
|
||||||
target_link_libraries(test_simple tf3 ${console_bridge_LIBRARIES})
|
add_executable(${PROJECT_NAME}_static_cache_test test/static_cache_test.cpp)
|
||||||
|
target_link_libraries(${PROJECT_NAME}_static_cache_test PRIVATE
|
||||||
|
${PROJECT_NAME}
|
||||||
|
console_bridge::console_bridge
|
||||||
|
)
|
||||||
|
add_test(NAME ${PROJECT_NAME}_static_cache_test COMMAND ${PROJECT_NAME}_static_cache_test)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_executable(speed_test test/speed_test.cpp)
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/test/simple_tf3_core.cpp)
|
||||||
target_link_libraries(speed_test tf3 ${console_bridge_LIBRARIES})
|
add_executable(${PROJECT_NAME}_simple_test test/simple_tf3_core.cpp)
|
||||||
|
target_link_libraries(${PROJECT_NAME}_simple_test PRIVATE
|
||||||
|
${PROJECT_NAME}
|
||||||
|
console_bridge::console_bridge
|
||||||
|
)
|
||||||
|
add_test(NAME ${PROJECT_NAME}_simple_test COMMAND ${PROJECT_NAME}_simple_test)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_executable(test_transform_datatypes test/test_transform_datatypes.cpp)
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/test/speed_test.cpp)
|
||||||
target_link_libraries(test_transform_datatypes tf3 ${console_bridge_LIBRARIES})
|
add_executable(${PROJECT_NAME}_speed_test test/speed_test.cpp)
|
||||||
|
target_link_libraries(${PROJECT_NAME}_speed_test PRIVATE
|
||||||
|
${PROJECT_NAME}
|
||||||
|
console_bridge::console_bridge
|
||||||
|
)
|
||||||
|
add_test(NAME ${PROJECT_NAME}_speed_test COMMAND ${PROJECT_NAME}_speed_test)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_test(NAME test_cache_unittest COMMAND test_cache_unittest)
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/test/test_transform_datatypes.cpp)
|
||||||
add_test(NAME test_static_cache_unittest COMMAND test_static_cache_unittest)
|
add_executable(${PROJECT_NAME}_transform_datatypes_test test/test_transform_datatypes.cpp)
|
||||||
add_test(NAME test_simple COMMAND test_simple)
|
target_link_libraries(${PROJECT_NAME}_transform_datatypes_test PRIVATE
|
||||||
add_test(NAME speed_test COMMAND speed_test)
|
${PROJECT_NAME}
|
||||||
add_test(NAME test_transform_datatypes COMMAND test_transform_datatypes)
|
console_bridge::console_bridge
|
||||||
|
)
|
||||||
|
add_test(NAME ${PROJECT_NAME}_transform_datatypes_test COMMAND ${PROJECT_NAME}_transform_datatypes_test)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -19,5 +19,7 @@
|
||||||
|
|
||||||
<buildtool_depend version_gte="0.5.68">catkin</buildtool_depend>
|
<buildtool_depend version_gte="0.5.68">catkin</buildtool_depend>
|
||||||
|
|
||||||
|
<build_depend>console_bridge</build_depend>
|
||||||
|
<run_depend>console_bridge</run_depend>
|
||||||
|
|
||||||
</package>
|
</package>
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 4303737ff92db94dc1bcde2d8a3bef527e76355a
|
Subproject commit 3daeae614788ff326feb04bfd6ad9d76ffc7a105
|
||||||
|
|
@ -1 +1 @@
|
||||||
Subproject commit 5f7ae1233dc66c6fa8c75e881b7100f0d77f9a64
|
Subproject commit 948405bba436a164cb27f1b24cbb2bcf8ca053b2
|
||||||
|
|
@ -1,84 +1,150 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
project(move_base_core VERSION 1.0.0 LANGUAGES CXX)
|
project(move_base_core VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# Chuẩn C++
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Catkin specific configuration
|
|
||||||
# ========================================================
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building move_base_core with Catkin")
|
message(STATUS "Building move_base_core with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building move_base_core with Standalone CMake")
|
message(STATUS "Building move_base_core with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
# C++ Standard - must be set before find_package
|
||||||
find_package(catkin REQUIRED COMPONENTS tf3 robot_time robot_geometry_msgs robot_protocol_msgs robot_nav_2d_msgs)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
catkin_package(
|
if (NOT BUILDING_WITH_CATKIN)
|
||||||
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
|
# Enable Position Independent Code
|
||||||
file(GLOB HEADERS "include/move_base_core/*.h")
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
# Tạo INTERFACE library (header-only)
|
|
||||||
add_library(move_base_core INTERFACE)
|
|
||||||
|
|
||||||
# Set include directories trước khi link libraries
|
# Cấu hình RPATH để tránh cycle trong runtime search path
|
||||||
target_include_directories(move_base_core
|
set(CMAKE_BUILD_RPATH_USE_ORIGIN TRUE)
|
||||||
INTERFACE
|
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
set(CMAKE_BUILD_RPATH "${CMAKE_BINARY_DIR}")
|
||||||
$<INSTALL_INTERFACE:include>
|
|
||||||
)
|
|
||||||
|
|
||||||
# Link với dependencies - include directories sẽ được truyền tự động qua INTERFACE properties
|
set(PACKAGES_DIR
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
target_link_libraries(move_base_core INTERFACE ${catkin_TARGETS})
|
|
||||||
else()
|
|
||||||
target_link_libraries(move_base_core
|
|
||||||
INTERFACE
|
|
||||||
tf3
|
tf3
|
||||||
robot_time
|
robot_time
|
||||||
robot_geometry_msgs
|
robot_geometry_msgs
|
||||||
robot_protocol_msgs
|
robot_protocol_msgs
|
||||||
robot_nav_2d_msgs # Thêm vì navigation.h include robot_nav_2d_msgs/Twist2DStamped.h
|
robot_nav_2d_msgs
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# ========================================================
|
||||||
|
# Catkin specific configuration
|
||||||
|
# ========================================================
|
||||||
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
|
tf3
|
||||||
|
robot_time
|
||||||
|
robot_geometry_msgs
|
||||||
|
robot_protocol_msgs
|
||||||
|
robot_nav_2d_msgs
|
||||||
|
)
|
||||||
|
|
||||||
|
catkin_package(
|
||||||
|
INCLUDE_DIRS include
|
||||||
|
# LIBRARIES không cần vì đây là header-only library
|
||||||
|
CATKIN_DEPENDS tf3 robot_time robot_geometry_msgs robot_protocol_msgs robot_nav_2d_msgs
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Cài đặt header files
|
# Tìm tất cả header files
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
file(GLOB_RECURSE HEADERS "include/move_base_core/*.h")
|
||||||
install(DIRECTORY include/move_base_core
|
|
||||||
DESTINATION include
|
# Tạo INTERFACE library (header-only)
|
||||||
FILES_MATCHING PATTERN "*.h")
|
add_library(${PROJECT_NAME} INTERFACE)
|
||||||
|
|
||||||
|
if(BUILDING_WITH_CATKIN)
|
||||||
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
|
||||||
|
# Set include directories
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
# Link dependencies (header-only, chỉ cần include paths)
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
${catkin_LIBRARIES}
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# Set include directories
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
# Link dependencies (header-only, chỉ cần include paths)
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Cài đặt target
|
if(BUILDING_WITH_CATKIN)
|
||||||
install(TARGETS move_base_core
|
## Mark libraries for installation
|
||||||
EXPORT move_base_core-targets
|
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
|
||||||
LIBRARY DESTINATION lib
|
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
|
ARCHIVE DESTINATION lib
|
||||||
RUNTIME DESTINATION bin)
|
LIBRARY DESTINATION lib
|
||||||
|
RUNTIME DESTINATION bin
|
||||||
|
)
|
||||||
|
|
||||||
# Export targets
|
# Export targets
|
||||||
install(EXPORT move_base_core-targets
|
install(EXPORT ${PROJECT_NAME}-targets
|
||||||
FILE move_base_core-targets.cmake
|
FILE ${PROJECT_NAME}-targets.cmake
|
||||||
DESTINATION lib/cmake/move_base_core)
|
NAMESPACE ${PROJECT_NAME}::
|
||||||
|
DESTINATION lib/cmake/${PROJECT_NAME}
|
||||||
|
)
|
||||||
|
|
||||||
# In thông tin cấu hình
|
## Mark cpp header files for installation
|
||||||
message(STATUS "=================================")
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
message(STATUS "Project: ${PROJECT_NAME} (Header-Only)")
|
DESTINATION include
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
FILES_MATCHING PATTERN "*.h"
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
PATTERN ".svn" EXCLUDE
|
||||||
message(STATUS "Headers found:")
|
)
|
||||||
foreach(hdr ${HEADERS})
|
|
||||||
|
# Print configuration info
|
||||||
|
message(STATUS "=================================")
|
||||||
|
message(STATUS "Project: ${PROJECT_NAME} (Header-Only)")
|
||||||
|
message(STATUS "Version: ${PROJECT_VERSION}")
|
||||||
|
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||||||
|
message(STATUS "Headers found:")
|
||||||
|
foreach(hdr ${HEADERS})
|
||||||
message(STATUS " - ${hdr}")
|
message(STATUS " - ${hdr}")
|
||||||
endforeach()
|
endforeach()
|
||||||
message(STATUS "=================================")
|
message(STATUS "Dependencies: tf3, robot_time, robot_geometry_msgs, robot_protocol_msgs, robot_nav_2d_msgs")
|
||||||
|
message(STATUS "=================================")
|
||||||
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -1,120 +1,146 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
|
project(robot_nav_core VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Detect if building with Catkin
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building robot_nav_core with Catkin")
|
message(STATUS "Building robot_nav_core with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building robot_nav_core with Standalone CMake")
|
message(STATUS "Building robot_nav_core with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Tên dự án
|
# C++ Standard - must be set before find_package
|
||||||
project(robot_nav_core VERSION 1.0.0 LANGUAGES CXX)
|
|
||||||
|
|
||||||
# Chuẩn C++
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
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_costmap_2d
|
||||||
|
tf3
|
||||||
|
robot_protocol_msgs
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Find dependencies
|
# Catkin specific configuration
|
||||||
# ========================================================
|
# ========================================================
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
find_package(catkin REQUIRED COMPONENTS
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
robot_costmap_2d
|
robot_costmap_2d
|
||||||
tf3
|
tf3
|
||||||
robot_protocol_msgs
|
robot_protocol_msgs
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Catkin specific configuration
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
catkin_package(
|
catkin_package(
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
# Header-only library; keep LIBRARIES for visibility when exporting
|
# LIBRARIES không cần vì đây là header-only library
|
||||||
LIBRARIES robot_nav_core
|
|
||||||
CATKIN_DEPENDS robot_costmap_2d tf3 robot_protocol_msgs
|
CATKIN_DEPENDS robot_costmap_2d tf3 robot_protocol_msgs
|
||||||
)
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Cho phép các project khác include được header của robot_nav_core
|
# Tìm tất cả header files
|
||||||
set(${PROJECT_NAME}_INCLUDE_DIRS
|
file(GLOB_RECURSE HEADERS "include/robot_nav_core/*.h")
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
|
||||||
PARENT_SCOPE
|
|
||||||
)
|
|
||||||
|
|
||||||
include_directories(
|
|
||||||
${PROJECT_SOURCE_DIR}/include
|
|
||||||
)
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
include_directories(${catkin_INCLUDE_DIRS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Tạo INTERFACE library (header-only)
|
# Tạo INTERFACE library (header-only)
|
||||||
add_library(${PROJECT_NAME} INTERFACE)
|
add_library(${PROJECT_NAME} INTERFACE)
|
||||||
|
|
||||||
# Link libraries
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
target_link_libraries(${PROJECT_NAME} INTERFACE
|
|
||||||
${catkin_LIBRARIES}
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_link_libraries(${PROJECT_NAME} INTERFACE
|
|
||||||
robot_costmap_2d
|
|
||||||
tf3
|
|
||||||
robot_protocol_msgs
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
if(BUILDING_WITH_CATKIN)
|
||||||
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
endif()
|
|
||||||
|
|
||||||
# Set include directories
|
# Set include directories
|
||||||
target_include_directories(${PROJECT_NAME}
|
target_include_directories(${PROJECT_NAME}
|
||||||
INTERFACE
|
INTERFACE
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
)
|
)
|
||||||
|
|
||||||
# ========================================================
|
# Link dependencies (header-only, chỉ cần include paths)
|
||||||
# Installation
|
target_link_libraries(${PROJECT_NAME}
|
||||||
# ========================================================
|
INTERFACE
|
||||||
|
${catkin_LIBRARIES}
|
||||||
|
)
|
||||||
|
|
||||||
install(TARGETS ${PROJECT_NAME}
|
else()
|
||||||
EXPORT ${PROJECT_NAME}-targets
|
|
||||||
LIBRARY DESTINATION lib
|
# Set include directories
|
||||||
ARCHIVE DESTINATION lib
|
target_include_directories(${PROJECT_NAME}
|
||||||
RUNTIME DESTINATION bin)
|
INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
# Link dependencies (header-only, chỉ cần include paths)
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
|
||||||
# Cài đặt header files (standalone)
|
|
||||||
install(DIRECTORY include/${PROJECT_NAME}
|
|
||||||
DESTINATION include
|
|
||||||
FILES_MATCHING PATTERN "*.h")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Export targets
|
if(BUILDING_WITH_CATKIN)
|
||||||
install(EXPORT ${PROJECT_NAME}-targets
|
## Mark libraries for installation
|
||||||
FILE ${PROJECT_NAME}-targets.cmake
|
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
|
||||||
DESTINATION lib/cmake/${PROJECT_NAME})
|
install(TARGETS ${PROJECT_NAME}
|
||||||
|
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
|
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
|
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
|
||||||
|
)
|
||||||
|
|
||||||
# In thông tin cấu hình
|
## Mark cpp header files for installation
|
||||||
message(STATUS "=================================")
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
message(STATUS "Project: ${PROJECT_NAME} (Header-Only)")
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
FILES_MATCHING PATTERN "*.h"
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
PATTERN ".svn" EXCLUDE
|
||||||
message(STATUS "Headers found:")
|
)
|
||||||
foreach(hdr ${HEADERS})
|
|
||||||
|
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} (Header-Only)")
|
||||||
|
message(STATUS "Version: ${PROJECT_VERSION}")
|
||||||
|
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||||||
|
message(STATUS "Headers found:")
|
||||||
|
foreach(hdr ${HEADERS})
|
||||||
message(STATUS " - ${hdr}")
|
message(STATUS " - ${hdr}")
|
||||||
endforeach()
|
endforeach()
|
||||||
message(STATUS "=================================")
|
message(STATUS "Dependencies: robot_costmap_2d, tf3, robot_protocol_msgs")
|
||||||
|
message(STATUS "=================================")
|
||||||
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -1,138 +1,152 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
|
project(robot_nav_core2 VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Detect if building with Catkin
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building robot_nav_core2 with Catkin")
|
message(STATUS "Building robot_nav_core2 with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building robot_nav_core2 with Standalone CMake")
|
message(STATUS "Building robot_nav_core2 with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Tên dự án
|
# C++ Standard - must be set before find_package
|
||||||
project(robot_nav_core2 VERSION 1.0.0 LANGUAGES CXX)
|
|
||||||
|
|
||||||
# Chuẩn C++
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
|
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_costmap_2d
|
||||||
|
tf3
|
||||||
|
nav_grid
|
||||||
|
robot_nav_2d_msgs
|
||||||
|
robot_cpp
|
||||||
|
robot_geometry_msgs
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Find dependencies
|
# Catkin specific configuration
|
||||||
# ========================================================
|
# ========================================================
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
find_package(catkin REQUIRED COMPONENTS
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
robot_costmap_2d
|
robot_costmap_2d
|
||||||
tf3
|
tf3
|
||||||
nav_grid
|
nav_grid
|
||||||
robot_nav_2d_msgs
|
robot_nav_2d_msgs
|
||||||
robot_cpp
|
robot_cpp
|
||||||
robot_sensor_msgs
|
robot_geometry_msgs
|
||||||
robot_std_msgs
|
|
||||||
geometry_msgs
|
|
||||||
robot_nav_msgs
|
|
||||||
robot_map_msgs
|
|
||||||
robot_laser_geometry
|
|
||||||
robot_visualization_msgs
|
|
||||||
robot_voxel_grid
|
|
||||||
robot_tf3_geometry_msgs
|
|
||||||
robot_tf3_sensor_msgs
|
|
||||||
data_convert
|
|
||||||
robot_xmlrpcpp
|
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Catkin specific configuration
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
catkin_package(
|
catkin_package(
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
# Header-only library; keep LIBRARIES for visibility when exporting
|
# LIBRARIES không cần vì đây là header-only library
|
||||||
LIBRARIES robot_nav_core2
|
CATKIN_DEPENDS robot_costmap_2d tf3 nav_grid robot_nav_2d_msgs robot_cpp robot_geometry_msgs
|
||||||
CATKIN_DEPENDS robot_costmap_2d tf3 nav_grid robot_nav_2d_msgs robot_cpp
|
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
# Cho phép các project khác include được header của robot_nav_core2
|
include_directories(
|
||||||
set(robot_nav_core2_INCLUDE_DIRS
|
include
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
${catkin_INCLUDE_DIRS}
|
||||||
PARENT_SCOPE
|
)
|
||||||
)
|
|
||||||
|
|
||||||
include_directories(
|
|
||||||
${PROJECT_SOURCE_DIR}/include
|
|
||||||
)
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
include_directories(${catkin_INCLUDE_DIRS})
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Tìm tất cả header files
|
# Tìm tất cả header files
|
||||||
file(GLOB HEADERS "include/robot_nav_core2/*.h")
|
file(GLOB_RECURSE HEADERS "include/robot_nav_core2/*.h")
|
||||||
|
|
||||||
# Tạo INTERFACE library (header-only)
|
# Tạo INTERFACE library (header-only)
|
||||||
add_library(${PROJECT_NAME} INTERFACE)
|
add_library(${PROJECT_NAME} INTERFACE)
|
||||||
|
|
||||||
# Link libraries
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
target_link_libraries(${PROJECT_NAME} INTERFACE
|
|
||||||
${catkin_LIBRARIES}
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_link_libraries(${PROJECT_NAME} INTERFACE
|
|
||||||
robot_costmap_2d
|
|
||||||
tf3
|
|
||||||
nav_grid
|
|
||||||
robot_nav_2d_msgs
|
|
||||||
robot_cpp
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
if(BUILDING_WITH_CATKIN)
|
||||||
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
endif()
|
|
||||||
|
|
||||||
# Set include directories
|
# Set include directories
|
||||||
target_include_directories(${PROJECT_NAME}
|
target_include_directories(${PROJECT_NAME}
|
||||||
INTERFACE
|
INTERFACE
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
)
|
)
|
||||||
|
|
||||||
# ========================================================
|
# Link dependencies (header-only, chỉ cần include paths)
|
||||||
# Installation
|
target_link_libraries(${PROJECT_NAME}
|
||||||
# ========================================================
|
INTERFACE
|
||||||
|
${catkin_LIBRARIES}
|
||||||
|
)
|
||||||
|
|
||||||
# Cài đặt target
|
else()
|
||||||
install(TARGETS ${PROJECT_NAME}
|
|
||||||
EXPORT ${PROJECT_NAME}-targets)
|
# Set include directories
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
# Link dependencies (header-only, chỉ cần include paths)
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
|
||||||
# Cài đặt header files (standalone)
|
|
||||||
install(DIRECTORY include/${PROJECT_NAME}
|
|
||||||
DESTINATION include
|
|
||||||
FILES_MATCHING PATTERN "*.h")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Export targets
|
if(BUILDING_WITH_CATKIN)
|
||||||
install(EXPORT ${PROJECT_NAME}-targets
|
## 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
|
FILE ${PROJECT_NAME}-targets.cmake
|
||||||
NAMESPACE ${PROJECT_NAME}::
|
NAMESPACE ${PROJECT_NAME}::
|
||||||
DESTINATION lib/cmake/${PROJECT_NAME})
|
DESTINATION lib/cmake/${PROJECT_NAME}
|
||||||
|
)
|
||||||
|
|
||||||
# In thông tin cấu hình
|
## Mark cpp header files for installation
|
||||||
message(STATUS "=================================")
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
message(STATUS "Project: ${PROJECT_NAME} (Header-Only)")
|
DESTINATION include
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
FILES_MATCHING PATTERN "*.h"
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
PATTERN ".svn" EXCLUDE
|
||||||
message(STATUS "Headers found:")
|
)
|
||||||
foreach(hdr ${HEADERS})
|
|
||||||
|
# Print configuration info
|
||||||
|
message(STATUS "=================================")
|
||||||
|
message(STATUS "Project: ${PROJECT_NAME} (Header-Only)")
|
||||||
|
message(STATUS "Version: ${PROJECT_VERSION}")
|
||||||
|
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||||||
|
message(STATUS "Headers found:")
|
||||||
|
foreach(hdr ${HEADERS})
|
||||||
message(STATUS " - ${hdr}")
|
message(STATUS " - ${hdr}")
|
||||||
endforeach()
|
endforeach()
|
||||||
message(STATUS "=================================")
|
message(STATUS "Dependencies: robot_costmap_2d, tf3, nav_grid, robot_nav_2d_msgs, robot_cpp, robot_geometry_msgs")
|
||||||
|
message(STATUS "=================================")
|
||||||
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -34,4 +34,7 @@
|
||||||
<build_depend>robot_cpp</build_depend>
|
<build_depend>robot_cpp</build_depend>
|
||||||
<run_depend>robot_cpp</run_depend>
|
<run_depend>robot_cpp</run_depend>
|
||||||
|
|
||||||
|
<build_depend>robot_geometry_msgs</build_depend>
|
||||||
|
<run_depend>robot_geometry_msgs</run_depend>
|
||||||
|
|
||||||
</package>
|
</package>
|
||||||
|
|
@ -1,37 +1,48 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
|
project(robot_nav_core_adapter VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Detect if building with Catkin
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building robot_nav_core_adapter with Catkin")
|
message(STATUS "Building robot_nav_core_adapter with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building robot_nav_core_adapter with Standalone CMake")
|
message(STATUS "Building robot_nav_core_adapter with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Tên dự án
|
# C++ Standard - must be set before find_package
|
||||||
project(robot_nav_core_adapter VERSION 1.0.0 LANGUAGES CXX)
|
|
||||||
|
|
||||||
# Chuẩn C++
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
if(NOT CMAKE_BUILD_TYPE)
|
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Find dependencies
|
# Find dependencies
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Find system dependencies
|
|
||||||
find_package(Boost REQUIRED COMPONENTS filesystem system)
|
find_package(Boost REQUIRED COMPONENTS filesystem system)
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
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
|
||||||
|
geometry_msgs
|
||||||
|
robot_std_msgs
|
||||||
|
robot_nav_core
|
||||||
|
robot_nav_core2
|
||||||
|
robot_nav_2d_utils
|
||||||
|
robot_cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# ========================================================
|
||||||
|
# Catkin specific configuration
|
||||||
|
# ========================================================
|
||||||
find_package(catkin REQUIRED COMPONENTS
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
geometry_msgs
|
geometry_msgs
|
||||||
robot_std_msgs
|
robot_std_msgs
|
||||||
|
|
@ -40,173 +51,194 @@ if(BUILDING_WITH_CATKIN)
|
||||||
robot_nav_2d_utils
|
robot_nav_2d_utils
|
||||||
robot_cpp
|
robot_cpp
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
# Dependencies packages (internal libraries)
|
|
||||||
set(PACKAGES_DIR geometry_msgs robot_std_msgs robot_nav_core robot_nav_core2 robot_nav_2d_utils pthread)
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Catkin specific configuration
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
catkin_package(
|
catkin_package(
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
LIBRARIES costmap_adapter local_planner_adapter global_planner_adapter
|
LIBRARIES costmap_adapter local_planner_adapter global_planner_adapter
|
||||||
CATKIN_DEPENDS geometry_msgs robot_std_msgs robot_nav_core robot_nav_core2 robot_nav_2d_utils robot_cpp
|
CATKIN_DEPENDS geometry_msgs robot_std_msgs robot_nav_core robot_nav_core2 robot_nav_2d_utils robot_cpp
|
||||||
|
DEPENDS Boost
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
|
${Boost_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Thư mục include
|
# ========================================================
|
||||||
include_directories(
|
# Libraries
|
||||||
${PROJECT_SOURCE_DIR}/include
|
# ========================================================
|
||||||
|
add_library(costmap_adapter SHARED
|
||||||
|
src/costmap_adapter.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
add_library(local_planner_adapter SHARED
|
||||||
include_directories(${catkin_INCLUDE_DIRS})
|
src/local_planner_adapter.cpp
|
||||||
endif()
|
)
|
||||||
|
|
||||||
# ========================================================
|
add_library(global_planner_adapter SHARED
|
||||||
# Build
|
src/global_planner_adapter.cpp
|
||||||
# ========================================================
|
)
|
||||||
|
|
||||||
# Tạo thư viện shared (.so)
|
|
||||||
add_library(costmap_adapter src/costmap_adapter.cpp)
|
|
||||||
|
|
||||||
# Link libraries
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
target_link_libraries(costmap_adapter
|
|
||||||
PRIVATE ${catkin_LIBRARIES}
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_link_libraries(costmap_adapter
|
|
||||||
PRIVATE ${PACKAGES_DIR}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
target_include_directories(costmap_adapter PUBLIC
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:include>)
|
|
||||||
|
|
||||||
add_library(local_planner_adapter src/local_planner_adapter.cpp)
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
target_link_libraries(local_planner_adapter
|
|
||||||
PRIVATE
|
|
||||||
Boost::filesystem
|
|
||||||
Boost::system
|
|
||||||
dl
|
|
||||||
costmap_adapter
|
|
||||||
${catkin_LIBRARIES}
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_link_libraries(local_planner_adapter
|
|
||||||
PRIVATE
|
|
||||||
Boost::filesystem
|
|
||||||
Boost::system
|
|
||||||
dl
|
|
||||||
costmap_adapter
|
|
||||||
robot_cpp
|
|
||||||
${PACKAGES_DIR}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
target_include_directories(local_planner_adapter PRIVATE
|
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
|
||||||
$<INSTALL_INTERFACE:include>)
|
|
||||||
|
|
||||||
add_library(global_planner_adapter src/global_planner_adapter.cpp)
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
target_link_libraries(global_planner_adapter
|
|
||||||
PRIVATE
|
|
||||||
Boost::filesystem
|
|
||||||
Boost::system
|
|
||||||
dl
|
|
||||||
costmap_adapter
|
|
||||||
${catkin_LIBRARIES}
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
target_link_libraries(global_planner_adapter
|
|
||||||
PRIVATE
|
|
||||||
Boost::filesystem
|
|
||||||
Boost::system
|
|
||||||
dl
|
|
||||||
costmap_adapter
|
|
||||||
${PACKAGES_DIR}
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
if(BUILDING_WITH_CATKIN)
|
||||||
add_dependencies(costmap_adapter ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
add_dependencies(costmap_adapter ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
add_dependencies(local_planner_adapter ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
add_dependencies(local_planner_adapter ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
add_dependencies(global_planner_adapter ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
add_dependencies(global_planner_adapter ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
endif()
|
|
||||||
|
|
||||||
target_include_directories(global_planner_adapter PRIVATE
|
# costmap_adapter
|
||||||
|
target_include_directories(costmap_adapter
|
||||||
|
PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>)
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
# Ensure runtime loader prefers in-tree adapter libs over system/ROS libs.
|
target_link_libraries(costmap_adapter
|
||||||
# Without this, dlopen() may resolve libcostmap_adapter.so from /opt/ros/noetic/lib,
|
PUBLIC ${catkin_LIBRARIES}
|
||||||
# which has a different ABI (Costmap2DROBOT) and causes missing symbols.
|
)
|
||||||
set(_ROBOT_NAV_CORE_ADAPTER_RPATH
|
|
||||||
"${CMAKE_BINARY_DIR}/src/Navigations/Cores/robot_nav_core_adapter"
|
|
||||||
"${CMAKE_BINARY_DIR}/src/Libraries/robot_costmap_2d"
|
|
||||||
"${CMAKE_BINARY_DIR}/src/Libraries/tf3"
|
|
||||||
"${CMAKE_BINARY_DIR}/src/Libraries/robot_time"
|
|
||||||
"${CMAKE_BINARY_DIR}/src/Libraries/robot_cpp"
|
|
||||||
)
|
|
||||||
|
|
||||||
set_target_properties(costmap_adapter PROPERTIES
|
# local_planner_adapter
|
||||||
|
target_include_directories(local_planner_adapter
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(local_planner_adapter
|
||||||
|
PUBLIC costmap_adapter
|
||||||
|
PRIVATE ${catkin_LIBRARIES}
|
||||||
|
PRIVATE Boost::filesystem Boost::system
|
||||||
|
PRIVATE dl
|
||||||
|
PRIVATE robot_cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
# global_planner_adapter
|
||||||
|
target_include_directories(global_planner_adapter
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(global_planner_adapter
|
||||||
|
PUBLIC costmap_adapter
|
||||||
|
PRIVATE ${catkin_LIBRARIES}
|
||||||
|
PRIVATE Boost::filesystem Boost::system
|
||||||
|
PRIVATE dl
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# costmap_adapter
|
||||||
|
target_include_directories(costmap_adapter
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(costmap_adapter
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(costmap_adapter PROPERTIES
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
)
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
set_target_properties(local_planner_adapter PROPERTIES
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
# local_planner_adapter
|
||||||
|
target_include_directories(local_planner_adapter
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(local_planner_adapter
|
||||||
|
PUBLIC costmap_adapter
|
||||||
|
PRIVATE
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
Boost::filesystem Boost::system
|
||||||
|
dl
|
||||||
|
robot_cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(local_planner_adapter PROPERTIES
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
)
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
set_target_properties(global_planner_adapter PROPERTIES
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
# global_planner_adapter
|
||||||
|
target_include_directories(global_planner_adapter
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(global_planner_adapter
|
||||||
|
PUBLIC costmap_adapter
|
||||||
|
PRIVATE
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
Boost::filesystem Boost::system
|
||||||
|
dl
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(global_planner_adapter PROPERTIES
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
)
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Installation
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Cài đặt library
|
|
||||||
install(TARGETS global_planner_adapter local_planner_adapter costmap_adapter
|
|
||||||
EXPORT robot_nav_core_adapter-targets
|
|
||||||
LIBRARY DESTINATION lib
|
|
||||||
ARCHIVE DESTINATION lib
|
|
||||||
RUNTIME DESTINATION bin)
|
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
|
||||||
# Cài đặt header files (standalone)
|
|
||||||
install(DIRECTORY include/robot_nav_core_adapter
|
|
||||||
DESTINATION include
|
|
||||||
FILES_MATCHING PATTERN "*.h")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Export targets
|
# ========================================================
|
||||||
install(EXPORT robot_nav_core_adapter-targets
|
# Install
|
||||||
FILE robot_nav_core_adapter-targets.cmake
|
# ========================================================
|
||||||
DESTINATION lib/cmake/robot_nav_core_adapter)
|
if(BUILDING_WITH_CATKIN)
|
||||||
|
## Mark libraries for installation
|
||||||
|
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
|
||||||
|
install(TARGETS costmap_adapter local_planner_adapter global_planner_adapter
|
||||||
|
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
|
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
|
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
|
||||||
|
)
|
||||||
|
|
||||||
# Tùy chọn build
|
## Mark cpp header files for installation
|
||||||
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
option(BUILD_TESTS "Build test programs" OFF)
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||||
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
|
)
|
||||||
|
|
||||||
# Flags biên dịch
|
else()
|
||||||
# Warning flags - disabled to suppress warnings during build
|
|
||||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") # -w suppresses all warnings
|
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
|
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
|
|
||||||
|
|
||||||
# In thông tin cấu hình
|
install(TARGETS costmap_adapter local_planner_adapter global_planner_adapter
|
||||||
message(STATUS "=================================")
|
EXPORT ${PROJECT_NAME}-targets
|
||||||
message(STATUS "Project: ${PROJECT_NAME}")
|
ARCHIVE DESTINATION lib
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
LIBRARY DESTINATION lib
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
RUNTIME DESTINATION bin
|
||||||
message(STATUS "Headers found:")
|
)
|
||||||
foreach(hdr ${HEADERS})
|
|
||||||
message(STATUS " - ${hdr}")
|
# Export targets
|
||||||
endforeach()
|
install(EXPORT ${PROJECT_NAME}-targets
|
||||||
message(STATUS "=================================")
|
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 "Libraries: costmap_adapter, local_planner_adapter, global_planner_adapter")
|
||||||
|
message(STATUS "Dependencies: geometry_msgs, robot_std_msgs, robot_nav_core, robot_nav_core2, robot_nav_2d_utils, robot_cpp, Boost")
|
||||||
|
message(STATUS "=================================")
|
||||||
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -1,41 +1,48 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
|
project(nav_grid VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Detect if building with Catkin
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building nav_grid with Catkin")
|
message(STATUS "Building nav_grid with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building nav_grid with Standalone CMake")
|
message(STATUS "Building nav_grid with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
project(nav_grid VERSION 1.0.0 LANGUAGES CXX)
|
# C++ Standard - must be set before find_package
|
||||||
|
|
||||||
# Chuẩn C++
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Find dependencies
|
# Find dependencies
|
||||||
# ========================================================
|
find_package(GTest QUIET)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
if (NOT BUILDING_WITH_CATKIN)
|
||||||
find_package(catkin REQUIRED)
|
|
||||||
endif()
|
# 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}")
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Catkin specific configuration
|
# Catkin specific configuration
|
||||||
# ========================================================
|
# ========================================================
|
||||||
|
find_package(catkin REQUIRED)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
catkin_package(
|
catkin_package(
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
LIBRARIES nav_grid
|
# LIBRARIES không cần vì đây là header-only library
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
@ -43,67 +50,104 @@ endif()
|
||||||
file(GLOB_RECURSE HEADERS "include/nav_grid/*.h")
|
file(GLOB_RECURSE HEADERS "include/nav_grid/*.h")
|
||||||
|
|
||||||
# Tạo INTERFACE library (header-only)
|
# Tạo INTERFACE library (header-only)
|
||||||
add_library(nav_grid INTERFACE)
|
add_library(${PROJECT_NAME} INTERFACE)
|
||||||
|
|
||||||
# Set include directories
|
if(BUILDING_WITH_CATKIN)
|
||||||
target_include_directories(nav_grid
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
|
|
||||||
|
# Set include directories
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
# Link dependencies (header-only, chỉ cần include paths)
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
INTERFACE
|
||||||
|
${catkin_LIBRARIES}
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# Set include directories
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
INTERFACE
|
INTERFACE
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
)
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
add_dependencies(nav_grid ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Cài đặt header files
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
|
||||||
install(DIRECTORY include/nav_grid
|
|
||||||
DESTINATION include
|
|
||||||
FILES_MATCHING PATTERN "*.h")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Cài đặt target
|
|
||||||
install(TARGETS nav_grid
|
|
||||||
EXPORT nav_grid-targets
|
|
||||||
ARCHIVE DESTINATION lib
|
|
||||||
LIBRARY DESTINATION lib
|
|
||||||
RUNTIME DESTINATION bin)
|
|
||||||
|
|
||||||
# Export targets
|
|
||||||
install(EXPORT nav_grid-targets
|
|
||||||
FILE nav_grid-targets.cmake
|
|
||||||
NAMESPACE nav_grid::
|
|
||||||
DESTINATION lib/cmake/nav_grid)
|
|
||||||
|
|
||||||
# Tùy chọn build tests
|
|
||||||
option(BUILD_TESTING "Build test programs" OFF)
|
|
||||||
|
|
||||||
if(BUILD_TESTING)
|
|
||||||
find_package(GTest REQUIRED)
|
|
||||||
|
|
||||||
# Tạo test executable
|
|
||||||
add_executable(nav_grid_test test/utest.cpp)
|
|
||||||
target_link_libraries(nav_grid_test
|
|
||||||
PRIVATE
|
|
||||||
nav_grid
|
|
||||||
GTest::GTest
|
|
||||||
GTest::Main
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Thêm test vào CTest
|
|
||||||
enable_testing()
|
|
||||||
add_test(NAME nav_grid_test COMMAND nav_grid_test)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# In thông tin cấu hình
|
if(BUILDING_WITH_CATKIN)
|
||||||
message(STATUS "=================================")
|
## Mark libraries for installation
|
||||||
message(STATUS "Project: ${PROJECT_NAME} (Header-Only)")
|
## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
install(TARGETS ${PROJECT_NAME}
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
message(STATUS "Headers found:")
|
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
foreach(hdr ${HEADERS})
|
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} (Header-Only)")
|
||||||
|
message(STATUS "Version: ${PROJECT_VERSION}")
|
||||||
|
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
||||||
|
message(STATUS "Headers found:")
|
||||||
|
foreach(hdr ${HEADERS})
|
||||||
message(STATUS " - ${hdr}")
|
message(STATUS " - ${hdr}")
|
||||||
endforeach()
|
endforeach()
|
||||||
message(STATUS "Build tests: ${BUILD_TESTING}")
|
message(STATUS "Dependencies: None")
|
||||||
message(STATUS "=================================")
|
message(STATUS "=================================")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ========================================================
|
||||||
|
# Test executables
|
||||||
|
# ========================================================
|
||||||
|
if(GTest_FOUND OR GTEST_FOUND)
|
||||||
|
enable_testing()
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/test/utest.cpp)
|
||||||
|
add_executable(${PROJECT_NAME}_test test/utest.cpp)
|
||||||
|
target_link_libraries(${PROJECT_NAME}_test PRIVATE
|
||||||
|
${PROJECT_NAME}
|
||||||
|
GTest::GTest
|
||||||
|
GTest::Main
|
||||||
|
Threads::Threads
|
||||||
|
)
|
||||||
|
add_test(NAME ${PROJECT_NAME}_test COMMAND ${PROJECT_NAME}_test)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(STATUS "Google Test not found. Tests will not be built.")
|
||||||
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -1,35 +1,54 @@
|
||||||
cmake_minimum_required(VERSION 3.10)
|
cmake_minimum_required(VERSION 3.0.2)
|
||||||
|
project(move_base VERSION 1.0.0 LANGUAGES CXX)
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dual-mode CMakeLists.txt: Supports both Catkin and Standalone CMake
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
# Detect if building with Catkin
|
|
||||||
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
if(DEFINED CATKIN_DEVEL_PREFIX OR DEFINED CATKIN_TOPLEVEL)
|
||||||
set(BUILDING_WITH_CATKIN TRUE)
|
set(BUILDING_WITH_CATKIN TRUE)
|
||||||
message(STATUS "Building move_base with Catkin")
|
message(STATUS "Building move_base with Catkin")
|
||||||
|
|
||||||
else()
|
else()
|
||||||
set(BUILDING_WITH_CATKIN FALSE)
|
set(BUILDING_WITH_CATKIN FALSE)
|
||||||
message(STATUS "Building move_base with Standalone CMake")
|
message(STATUS "Building move_base with Standalone CMake")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Tên dự án
|
# C++ Standard - must be set before find_package
|
||||||
project(move_base VERSION 1.0.0 LANGUAGES CXX)
|
|
||||||
|
|
||||||
# Chuẩn C++
|
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
|
|
||||||
if(NOT CMAKE_BUILD_TYPE)
|
# Find dependencies
|
||||||
set(CMAKE_BUILD_TYPE Release)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Find Packages
|
|
||||||
# ========================================================
|
|
||||||
find_package(Boost REQUIRED COMPONENTS filesystem system)
|
find_package(Boost REQUIRED COMPONENTS filesystem system)
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
find_package(yaml-cpp REQUIRED)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
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
|
||||||
|
geometry_msgs
|
||||||
|
robot_std_msgs
|
||||||
|
move_base_core
|
||||||
|
robot_nav_core
|
||||||
|
robot_costmap_2d
|
||||||
|
plugins
|
||||||
|
robot_tf3_sensor_msgs
|
||||||
|
robot_tf3_geometry_msgs
|
||||||
|
data_convert
|
||||||
|
robot_nav_2d_utils
|
||||||
|
robot_cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
# ========================================================
|
||||||
|
# Catkin specific configuration
|
||||||
|
# ========================================================
|
||||||
find_package(catkin REQUIRED COMPONENTS
|
find_package(catkin REQUIRED COMPONENTS
|
||||||
geometry_msgs
|
geometry_msgs
|
||||||
robot_std_msgs
|
robot_std_msgs
|
||||||
|
|
@ -42,175 +61,145 @@ if(BUILDING_WITH_CATKIN)
|
||||||
robot_nav_2d_utils
|
robot_nav_2d_utils
|
||||||
robot_cpp
|
robot_cpp
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Source Files
|
|
||||||
# ========================================================
|
|
||||||
file(GLOB SOURCES "src/move_base.cpp")
|
|
||||||
file(GLOB HEADERS "include/move_base/move_base.h")
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Catkin specific configuration
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
catkin_package(
|
catkin_package(
|
||||||
INCLUDE_DIRS include
|
INCLUDE_DIRS include
|
||||||
LIBRARIES move_base
|
LIBRARIES ${PROJECT_NAME}
|
||||||
CATKIN_DEPENDS geometry_msgs robot_std_msgs move_base_core robot_nav_core robot_costmap_2d robot_tf3_sensor_msgs robot_tf3_geometry_msgs data_convert robot_nav_2d_utils robot_cpp
|
CATKIN_DEPENDS geometry_msgs robot_std_msgs move_base_core robot_nav_core robot_costmap_2d robot_tf3_sensor_msgs robot_tf3_geometry_msgs data_convert robot_nav_2d_utils robot_cpp
|
||||||
|
DEPENDS Boost yaml-cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
include
|
||||||
|
${catkin_INCLUDE_DIRS}
|
||||||
|
${Boost_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Include Directories
|
# Libraries
|
||||||
# ========================================================
|
# ========================================================
|
||||||
include_directories(
|
add_library(${PROJECT_NAME} SHARED
|
||||||
${PROJECT_SOURCE_DIR}/include
|
src/move_base.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
if(BUILDING_WITH_CATKIN)
|
||||||
include_directories(${catkin_INCLUDE_DIRS})
|
add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
||||||
endif()
|
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
# ========================================================
|
|
||||||
# RPATH settings: ưu tiên thư viện build tại chỗ
|
|
||||||
# ========================================================
|
|
||||||
set(CMAKE_SKIP_BUILD_RPATH FALSE)
|
|
||||||
set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
|
|
||||||
set(CMAKE_BUILD_RPATH "${CMAKE_BINARY_DIR}/src/Libraries/robot_costmap_2d:${CMAKE_BINARY_DIR}/src/Libraries/node_handle:${CMAKE_BINARY_DIR}/src/Libraries/tf3:${CMAKE_BINARY_DIR}/src/Libraries/robot_time:${CMAKE_BINARY_DIR}/src/Libraries/xmlrpcpp")
|
|
||||||
set(CMAKE_INSTALL_RPATH "${CMAKE_BINARY_DIR}/src/Libraries/robot_costmap_2d:${CMAKE_BINARY_DIR}/src/Libraries/node_handle:${CMAKE_BINARY_DIR}/src/Libraries/tf3:${CMAKE_BINARY_DIR}/src/Libraries/robot_time:${CMAKE_BINARY_DIR}/src/Libraries/xmlrpcpp")
|
|
||||||
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Create Library
|
|
||||||
# ========================================================
|
|
||||||
add_library(move_base SHARED ${SOURCES} ${HEADERS})
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Dependencies and Link Libraries
|
|
||||||
# ========================================================
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
target_link_libraries(move_base
|
|
||||||
PUBLIC ${catkin_LIBRARIES}
|
|
||||||
PRIVATE Boost::filesystem Boost::system
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
# Standalone CMake mode: link all dependencies manually
|
|
||||||
set(PACKAGES_DIR
|
|
||||||
geometry_msgs
|
|
||||||
robot_std_msgs
|
|
||||||
move_base_core
|
|
||||||
robot_nav_core
|
|
||||||
robot_costmap_2d
|
|
||||||
plugins # Link với plugins library để có StaticLayer typeinfo
|
|
||||||
yaml-cpp
|
|
||||||
robot_tf3_sensor_msgs
|
|
||||||
robot_tf3_geometry_msgs
|
|
||||||
data_convert
|
|
||||||
dl
|
|
||||||
pthread
|
|
||||||
robot_nav_2d_utils
|
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries(move_base
|
|
||||||
PUBLIC ${PACKAGES_DIR}
|
|
||||||
PUBLIC robot_cpp
|
|
||||||
PRIVATE Boost::filesystem Boost::system
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Set RPATH để ưu tiên thư viện build cục bộ
|
|
||||||
set_target_properties(move_base PROPERTIES
|
|
||||||
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
if(BUILDING_WITH_CATKIN)
|
|
||||||
add_dependencies(move_base ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Include Directories for Target
|
|
||||||
# ========================================================
|
|
||||||
target_include_directories(move_base
|
|
||||||
PUBLIC
|
PUBLIC
|
||||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
$<INSTALL_INTERFACE:include>
|
$<INSTALL_INTERFACE:include>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PUBLIC ${catkin_LIBRARIES}
|
||||||
|
PRIVATE Boost::filesystem Boost::system
|
||||||
|
dl
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
target_include_directories(${PROJECT_NAME}
|
||||||
|
PUBLIC
|
||||||
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:include>
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
PUBLIC
|
||||||
|
${PACKAGES_DIR}
|
||||||
|
PRIVATE
|
||||||
|
Boost::filesystem Boost::system
|
||||||
|
yaml-cpp
|
||||||
|
dl
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
|
INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib"
|
||||||
|
)
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Executable
|
# Executable
|
||||||
# ========================================================
|
# ========================================================
|
||||||
add_executable(move_base_main src/move_base_main.cpp)
|
add_executable(${PROJECT_NAME}_main src/move_base_main.cpp)
|
||||||
target_link_libraries(move_base_main
|
|
||||||
PRIVATE move_base robot_cpp
|
|
||||||
PRIVATE Boost::filesystem Boost::system
|
|
||||||
)
|
|
||||||
|
|
||||||
# Set RPATH for executable to find libraries in build directory first
|
if(BUILDING_WITH_CATKIN)
|
||||||
# Use RPATH instead of RUNPATH for higher priority
|
target_link_libraries(${PROJECT_NAME}_main PRIVATE
|
||||||
|
${PROJECT_NAME}
|
||||||
|
robot_cpp
|
||||||
|
Boost::filesystem Boost::system
|
||||||
|
dl
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
target_link_libraries(${PROJECT_NAME}_main PRIVATE
|
||||||
|
${PROJECT_NAME}
|
||||||
|
robot_cpp
|
||||||
|
Boost::filesystem Boost::system
|
||||||
|
dl
|
||||||
|
)
|
||||||
|
|
||||||
# Force use of RPATH instead of RUNPATH
|
# Configure RPATH to find libraries in devel space
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--disable-new-dtags")
|
set_target_properties(${PROJECT_NAME}_main PROPERTIES
|
||||||
|
BUILD_WITH_INSTALL_RPATH FALSE
|
||||||
|
INSTALL_RPATH_USE_LINK_PATH TRUE
|
||||||
|
BUILD_RPATH "${CMAKE_BINARY_DIR}"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
# ========================================================
|
# ========================================================
|
||||||
# Installation
|
# 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} ${PROJECT_NAME}_main
|
||||||
|
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
|
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
|
||||||
|
RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
|
||||||
|
)
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
## Mark cpp header files for installation
|
||||||
# Standalone CMake installation
|
install(DIRECTORY include/${PROJECT_NAME}/
|
||||||
install(DIRECTORY include/move_base
|
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
|
||||||
|
FILES_MATCHING PATTERN "*.h"
|
||||||
|
PATTERN ".svn" EXCLUDE
|
||||||
|
)
|
||||||
|
|
||||||
|
else()
|
||||||
|
|
||||||
|
install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_main
|
||||||
|
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
|
DESTINATION include
|
||||||
FILES_MATCHING PATTERN "*.h"
|
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 "Libraries: ${PROJECT_NAME}")
|
||||||
|
message(STATUS "Executables: ${PROJECT_NAME}_main")
|
||||||
|
message(STATUS "Dependencies: geometry_msgs, robot_std_msgs, move_base_core, robot_nav_core, robot_costmap_2d, robot_tf3_sensor_msgs, robot_tf3_geometry_msgs, data_convert, robot_nav_2d_utils, robot_cpp, Boost, yaml-cpp")
|
||||||
|
message(STATUS "=================================")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
install(TARGETS move_base move_base_main
|
|
||||||
EXPORT move_base-targets
|
|
||||||
LIBRARY DESTINATION lib
|
|
||||||
ARCHIVE DESTINATION lib
|
|
||||||
RUNTIME DESTINATION bin
|
|
||||||
)
|
|
||||||
|
|
||||||
if(NOT BUILDING_WITH_CATKIN)
|
|
||||||
install(EXPORT move_base-targets
|
|
||||||
FILE move_base-targets.cmake
|
|
||||||
DESTINATION lib/cmake/move_base
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Build Options
|
|
||||||
# ========================================================
|
|
||||||
option(BUILD_SHARED_LIBS "Build shared libraries" ON)
|
|
||||||
option(BUILD_TESTS "Build test programs" OFF)
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Compiler Flags
|
|
||||||
# ========================================================
|
|
||||||
# Warning flags - disabled to suppress warnings during build
|
|
||||||
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wpedantic")
|
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -w") # -w suppresses all warnings
|
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
|
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
|
|
||||||
|
|
||||||
# ========================================================
|
|
||||||
# Status Messages
|
|
||||||
# ========================================================
|
|
||||||
message(STATUS "=================================")
|
|
||||||
message(STATUS "Project: ${PROJECT_NAME}")
|
|
||||||
message(STATUS "Version: ${PROJECT_VERSION}")
|
|
||||||
message(STATUS "Build mode: ${BUILDING_WITH_CATKIN}")
|
|
||||||
message(STATUS "C++ Standard: ${CMAKE_CXX_STANDARD}")
|
|
||||||
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
|
||||||
message(STATUS "Headers found:")
|
|
||||||
foreach(hdr ${HEADERS})
|
|
||||||
message(STATUS " - ${hdr}")
|
|
||||||
endforeach()
|
|
||||||
message(STATUS "=================================")
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user