From 63dc18f3f0a5d95247401e4c69359f678d525541 Mon Sep 17 00:00:00 2001 From: duongtd Date: Fri, 24 Oct 2025 17:26:44 +0700 Subject: [PATCH] 1726_24102025 --- CMakeLists.txt | 56 +- build/CMakeCache.txt | 417 +++++++++++ build/CMakeFiles/3.16.3/CMakeCCompiler.cmake | 76 ++ .../CMakeFiles/3.16.3/CMakeCXXCompiler.cmake | 88 +++ .../3.16.3/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 16552 bytes .../3.16.3/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 16560 bytes build/CMakeFiles/3.16.3/CMakeSystem.cmake | 15 + .../3.16.3/CompilerIdC/CMakeCCompilerId.c | 671 ++++++++++++++++++ build/CMakeFiles/3.16.3/CompilerIdC/a.out | Bin 0 -> 16712 bytes .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 660 +++++++++++++++++ build/CMakeFiles/3.16.3/CompilerIdCXX/a.out | Bin 0 -> 16720 bytes .../CMakeDirectoryInformation.cmake | 16 + build/CMakeFiles/CMakeError.log | 58 ++ build/CMakeFiles/CMakeOutput.log | 489 +++++++++++++ build/CMakeFiles/Makefile.cmake | 78 ++ build/CMakeFiles/Makefile2 | 135 ++++ build/CMakeFiles/Progress/3 | 1 + build/CMakeFiles/Progress/count.txt | 1 + build/CMakeFiles/TargetDirectories.txt | 4 + build/CMakeFiles/cmake.check_cache | 1 + .../costmap_2d.dir/CXX.includecache | 36 + .../costmap_2d.dir/DependInfo.cmake | 35 + build/CMakeFiles/costmap_2d.dir/build.make | 174 +++++ .../costmap_2d.dir/cmake_clean.cmake | 15 + .../costmap_2d.dir/cmake_clean_target.cmake | 3 + .../CMakeFiles/costmap_2d.dir/depend.internal | 33 + build/CMakeFiles/costmap_2d.dir/depend.make | 33 + build/CMakeFiles/costmap_2d.dir/flags.make | 10 + build/CMakeFiles/costmap_2d.dir/link.txt | 2 + build/CMakeFiles/costmap_2d.dir/progress.make | 8 + .../costmap_2d.dir/src/array_parser.cpp.o | Bin 0 -> 79880 bytes .../costmap_2d.dir/src/costmap_2d.cpp.o | Bin 0 -> 388960 bytes .../costmap_2d.dir/src/footprint.cpp.o | Bin 0 -> 107472 bytes .../CMakeFiles/costmap_2d.dir/src/layer.cpp.o | Bin 0 -> 282392 bytes .../costmap_2d.dir/src/layered_costmap.cpp.o | Bin 0 -> 369696 bytes build/CMakeFiles/layers.dir/CXX.includecache | 8 + build/CMakeFiles/layers.dir/DependInfo.cmake | 31 + build/CMakeFiles/layers.dir/build.make | 99 +++ build/CMakeFiles/layers.dir/cmake_clean.cmake | 10 + .../layers.dir/cmake_clean_target.cmake | 3 + build/CMakeFiles/layers.dir/depend.internal | 5 + build/CMakeFiles/layers.dir/depend.make | 5 + build/CMakeFiles/layers.dir/flags.make | 10 + build/CMakeFiles/layers.dir/link.txt | 2 + .../layers.dir/plugins/inflation_layer.cpp.o | Bin 0 -> 1088 bytes build/CMakeFiles/layers.dir/progress.make | 3 + build/CMakeFiles/progress.marks | 1 + build/Makefile | 372 ++++++++++ build/cmake_install.cmake | 49 ++ build/libcostmap_2d.a | Bin 0 -> 1417606 bytes build/liblayers.a | Bin 0 -> 1304 bytes include/costmap_2d/array_parser.h | 51 ++ include/costmap_2d/costmap_2d.h | 289 +++----- include/costmap_2d/costmap_layer.h | 151 ++++ include/costmap_2d/costmap_math.h | 69 ++ include/costmap_2d/critical_layer.h | 19 + include/costmap_2d/footprint.h | 147 ++++ include/costmap_2d/inflation_layer.h | 164 +++++ include/costmap_2d/layer.h | 151 ++++ include/costmap_2d/layered_costmap.h | 193 +++++ include/costmap_2d/msg.h | 66 ++ include/costmap_2d/observation_buffer.h | 154 ++++ include/costmap_2d/static_layer.h | 101 +++ plugins/critical_layer.cpp | 38 + plugins/directional_layer.cpp | 412 +++++++++++ plugins/inflation_layer.cpp | 0 plugins/obstacle_layer.cpp | 623 ++++++++++++++++ plugins/preferred_layer.cpp | 28 + plugins/static_layer.cpp | 351 +++++++++ plugins/unpreferred_layer.cpp | 27 + plugins/voxel_layer.cpp | 449 ++++++++++++ src/array_parser.cpp | 115 +++ src/costmap_2d.cpp | 482 +++++++++++-- src/footprint.cpp | 325 +++++++++ src/layer.cpp | 27 + src/layered_costmap.cpp | 153 ++++ src/observation_buffer.cpp | 251 +++++++ 77 files changed, 8301 insertions(+), 248 deletions(-) create mode 100644 build/CMakeCache.txt create mode 100644 build/CMakeFiles/3.16.3/CMakeCCompiler.cmake create mode 100644 build/CMakeFiles/3.16.3/CMakeCXXCompiler.cmake create mode 100755 build/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_C.bin create mode 100755 build/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_CXX.bin create mode 100644 build/CMakeFiles/3.16.3/CMakeSystem.cmake create mode 100644 build/CMakeFiles/3.16.3/CompilerIdC/CMakeCCompilerId.c create mode 100755 build/CMakeFiles/3.16.3/CompilerIdC/a.out create mode 100644 build/CMakeFiles/3.16.3/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100755 build/CMakeFiles/3.16.3/CompilerIdCXX/a.out create mode 100644 build/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 build/CMakeFiles/CMakeError.log create mode 100644 build/CMakeFiles/CMakeOutput.log create mode 100644 build/CMakeFiles/Makefile.cmake create mode 100644 build/CMakeFiles/Makefile2 create mode 100644 build/CMakeFiles/Progress/3 create mode 100644 build/CMakeFiles/Progress/count.txt create mode 100644 build/CMakeFiles/TargetDirectories.txt create mode 100644 build/CMakeFiles/cmake.check_cache create mode 100644 build/CMakeFiles/costmap_2d.dir/CXX.includecache create mode 100644 build/CMakeFiles/costmap_2d.dir/DependInfo.cmake create mode 100644 build/CMakeFiles/costmap_2d.dir/build.make create mode 100644 build/CMakeFiles/costmap_2d.dir/cmake_clean.cmake create mode 100644 build/CMakeFiles/costmap_2d.dir/cmake_clean_target.cmake create mode 100644 build/CMakeFiles/costmap_2d.dir/depend.internal create mode 100644 build/CMakeFiles/costmap_2d.dir/depend.make create mode 100644 build/CMakeFiles/costmap_2d.dir/flags.make create mode 100644 build/CMakeFiles/costmap_2d.dir/link.txt create mode 100644 build/CMakeFiles/costmap_2d.dir/progress.make create mode 100644 build/CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o create mode 100644 build/CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o create mode 100644 build/CMakeFiles/costmap_2d.dir/src/footprint.cpp.o create mode 100644 build/CMakeFiles/costmap_2d.dir/src/layer.cpp.o create mode 100644 build/CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o create mode 100644 build/CMakeFiles/layers.dir/CXX.includecache create mode 100644 build/CMakeFiles/layers.dir/DependInfo.cmake create mode 100644 build/CMakeFiles/layers.dir/build.make create mode 100644 build/CMakeFiles/layers.dir/cmake_clean.cmake create mode 100644 build/CMakeFiles/layers.dir/cmake_clean_target.cmake create mode 100644 build/CMakeFiles/layers.dir/depend.internal create mode 100644 build/CMakeFiles/layers.dir/depend.make create mode 100644 build/CMakeFiles/layers.dir/flags.make create mode 100644 build/CMakeFiles/layers.dir/link.txt create mode 100644 build/CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o create mode 100644 build/CMakeFiles/layers.dir/progress.make create mode 100644 build/CMakeFiles/progress.marks create mode 100644 build/Makefile create mode 100644 build/cmake_install.cmake create mode 100644 build/libcostmap_2d.a create mode 100644 build/liblayers.a create mode 100644 include/costmap_2d/array_parser.h create mode 100644 include/costmap_2d/costmap_layer.h create mode 100644 include/costmap_2d/costmap_math.h create mode 100644 include/costmap_2d/critical_layer.h create mode 100644 include/costmap_2d/footprint.h create mode 100644 include/costmap_2d/inflation_layer.h create mode 100644 include/costmap_2d/layer.h create mode 100644 include/costmap_2d/msg.h create mode 100644 include/costmap_2d/observation_buffer.h create mode 100644 include/costmap_2d/static_layer.h create mode 100644 plugins/critical_layer.cpp create mode 100644 plugins/directional_layer.cpp create mode 100644 plugins/inflation_layer.cpp create mode 100644 plugins/obstacle_layer.cpp create mode 100644 plugins/preferred_layer.cpp create mode 100644 plugins/static_layer.cpp create mode 100644 plugins/unpreferred_layer.cpp create mode 100644 plugins/voxel_layer.cpp create mode 100644 src/array_parser.cpp create mode 100644 src/footprint.cpp create mode 100644 src/layer.cpp create mode 100644 src/layered_costmap.cpp create mode 100644 src/observation_buffer.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 7db7e1b..d39ee4a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,40 +2,50 @@ cmake_minimum_required(VERSION 3.10) project(costmap_2d) set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_POSITION_INDEPENDENT_CODE ON) -# Dependencies +# ---- Dependencies ---- find_package(Eigen3 REQUIRED) +find_package(Boost REQUIRED COMPONENTS system thread) -# Include directories include_directories( include - ${EIGEN3_INCLUDE_DIR} + ${EIGEN3_INCLUDE_DIRS} + ${Boost_INCLUDE_DIRS} + /usr/include ) -# Library source files -set(COSTMAP_SOURCES +add_definitions(${EIGEN3_DEFINITIONS}) + +# ---- Core costmap_2d library ---- +add_library(costmap_2d + src/array_parser.cpp src/costmap_2d.cpp - # src/layer.cpp + src/observation_buffer.cpp + src/layer.cpp src/layered_costmap.cpp + # src/costmap_math.cpp + src/footprint.cpp # src/costmap_layer.cpp - # src/static_layer.cpp - # src/obstacle_layer.cpp - # src/inflation_layer.cpp - # src/observation_buffer.cpp - # src/footprint.cpp ) -# Create library -add_library(${PROJECT_NAME} SHARED ${COSTMAP_SOURCES}) -target_link_libraries(${PROJECT_NAME} Eigen3::Eigen) - -# Install -install(TARGETS ${PROJECT_NAME} - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib +target_link_libraries(costmap_2d + ${Boost_LIBRARIES} ) -install(DIRECTORY include/${PROJECT_NAME}/ - DESTINATION include/${PROJECT_NAME} -) \ No newline at end of file +# # ---- Layer plugins ---- +add_library(layers + plugins/inflation_layer.cpp +# plugins/obstacle_layer.cpp +# plugins/static_layer.cpp +# plugins/voxel_layer.cpp +) + +target_link_libraries(layers + costmap_2d + ${Boost_LIBRARIES} +) + +# ---- Example Executable ---- +# add_executable(test_costmap main.cpp) +# target_link_libraries(test_costmap costmap_2d layers) diff --git a/build/CMakeCache.txt b/build/CMakeCache.txt new file mode 100644 index 0000000..509c80c --- /dev/null +++ b/build/CMakeCache.txt @@ -0,0 +1,417 @@ +# This is the CMakeCache file. +# For build in directory: /home/duongtd/robotics_core/costmap_2d/build +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//The directory containing a CMake configuration file for Boost. +Boost_DIR:PATH=/usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0 + +//Path to a file. +Boost_INCLUDE_DIR:PATH=/usr/include + +Boost_SYSTEM_LIBRARY_RELEASE:STRING=/usr/lib/x86_64-linux-gnu/libboost_system.so.1.71.0 + +Boost_THREAD_LIBRARY_RELEASE:STRING=/usr/lib/x86_64-linux-gnu/libboost_thread.so.1.71.0 + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-9 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-9 + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//C compiler +CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar-9 + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib-9 + +//Flags used by the C compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the C compiler during DEBUG builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the C compiler during MINSIZEREL builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the C compiler during RELEASE builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the C compiler during RELWITHDEBINFO builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=OFF + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=costmap_2d + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//The directory containing a CMake configuration file for Eigen3. +Eigen3_DIR:PATH=/usr/lib/cmake/eigen3 + +//The directory containing a CMake configuration file for boost_atomic. +boost_atomic_DIR:PATH=/usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0 + +//The directory containing a CMake configuration file for boost_headers. +boost_headers_DIR:PATH=/usr/lib/x86_64-linux-gnu/cmake/boost_headers-1.71.0 + +//The directory containing a CMake configuration file for boost_system. +boost_system_DIR:PATH=/usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0 + +//The directory containing a CMake configuration file for boost_thread. +boost_thread_DIR:PATH=/usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0 + +//Value Computed by CMake +costmap_2d_BINARY_DIR:STATIC=/home/duongtd/robotics_core/costmap_2d/build + +//Dependencies for the target +costmap_2d_LIB_DEPENDS:STATIC=general;Boost::system;general;Boost::thread; + +//Value Computed by CMake +costmap_2d_SOURCE_DIR:STATIC=/home/duongtd/robotics_core/costmap_2d + +//Dependencies for the target +layers_LIB_DEPENDS:STATIC=general;costmap_2d;general;Boost::system;general;Boost::thread; + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: Boost_DIR +Boost_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/duongtd/robotics_core/costmap_2d/build +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=16 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=3 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_AR +CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB +CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Test CMAKE_HAVE_LIBC_PTHREAD +CMAKE_HAVE_LIBC_PTHREAD:INTERNAL= +//Have library pthreads +CMAKE_HAVE_PTHREADS_CREATE:INTERNAL= +//Have library pthread +CMAKE_HAVE_PTHREAD_CREATE:INTERNAL=1 +//Have include pthread.h +CMAKE_HAVE_PTHREAD_H:INTERNAL=1 +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/duongtd/robotics_core/costmap_2d +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.16 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//Details about finding Boost +FIND_PACKAGE_MESSAGE_DETAILS_Boost:INTERNAL=[/usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake][cfound components: system thread ][v1.71.0()] +//ADVANCED property for variable: boost_atomic_DIR +boost_atomic_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: boost_headers_DIR +boost_headers_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: boost_system_DIR +boost_system_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: boost_thread_DIR +boost_thread_DIR-ADVANCED:INTERNAL=1 + diff --git a/build/CMakeFiles/3.16.3/CMakeCCompiler.cmake b/build/CMakeFiles/3.16.3/CMakeCCompiler.cmake new file mode 100644 index 0000000..c5ece7b --- /dev/null +++ b/build/CMakeFiles/3.16.3/CMakeCCompiler.cmake @@ -0,0 +1,76 @@ +set(CMAKE_C_COMPILER "/usr/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "9.4.0") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "11") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "") +set(CMAKE_C_SIMULATE_VERSION "") + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar-9") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib-9") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/build/CMakeFiles/3.16.3/CMakeCXXCompiler.cmake b/build/CMakeFiles/3.16.3/CMakeCXXCompiler.cmake new file mode 100644 index 0000000..278ef39 --- /dev/null +++ b/build/CMakeFiles/3.16.3/CMakeCXXCompiler.cmake @@ -0,0 +1,88 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "9.4.0") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "14") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar-9") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib-9") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) +set(CMAKE_COMPILER_IS_MINGW ) +set(CMAKE_COMPILER_IS_CYGWIN ) +if(CMAKE_COMPILER_IS_CYGWIN) + set(CYGWIN 1) + set(UNIX 1) +endif() + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +if(CMAKE_COMPILER_IS_MINGW) + set(MINGW 1) +endif() +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;CPP) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/9;/usr/include/x86_64-linux-gnu/c++/9;/usr/include/c++/9/backward;/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/build/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_C.bin b/build/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..b7a0b099a8541ad05f2c95de959aebbb88a8d67c GIT binary patch literal 16552 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 YyNq+WEQ{06YWl~+N@A@`!Ic#M1cl@}X8-^I literal 0 HcmV?d00001 diff --git a/build/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_CXX.bin b/build/CMakeFiles/3.16.3/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..a9f2f4fcd2212c7a691a5f97281887e6d1b41c2a GIT binary patch literal 16560 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 hhyRyw+g>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +#if !defined(__STDC__) +# if (defined(_MSC_VER) && !defined(__clang__)) \ + || (defined(__ibmxl__) || defined(__IBMC__)) +# define C_DIALECT "90" +# else +# define C_DIALECT +# endif +#elif __STDC_VERSION__ >= 201000L +# define C_DIALECT "11" +#elif __STDC_VERSION__ >= 199901L +# define C_DIALECT "99" +#else +# define C_DIALECT "90" +#endif +const char* info_language_dialect_default = + "INFO" ":" "dialect_default[" C_DIALECT "]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/build/CMakeFiles/3.16.3/CompilerIdC/a.out b/build/CMakeFiles/3.16.3/CompilerIdC/a.out new file mode 100755 index 0000000000000000000000000000000000000000..b5c91a373fc518990e2aec59df62ee3a3ddb612a GIT binary patch literal 16712 zcmeHOeQX>@6`%9jiPI)$Cv}LMwDpn?$)WY-Y!c(7HNCTa&K|OpHnC}t>n>~G**>@r zbGJwBij+Xo!VwGsB2oT8ii!jX!XM?2ejovkLJO?`H3Eg8f=GcDgF@<-2Dy;tcyH#t z^X~dwB+4HM?MSz8=J!7L&FtRJ?##!deZ5sapWxyb?-kez*DEAUjM_a^0TLD+VhtQ` z7B`6%(5{x4;)fLht|}L*oV1p3KTy!ESR#tyFrh- zmL%Sqa5o{P%rC01oB}dwK?nuR3QprqVs%5I9y`_C;FrN*!Nyiu$`oJ-@ zci*4@GqZ?M8f9NJP#gI#?vB2&W!v2^9*Cd%;uyqyi0l>5h_~4OYn4tZP@HYQhLc5kED`TFGRLR+gC3v}Hwevu5+ zh83T2Zr8hTO;d7>E<8uL=E6Tkc(V)t65$u_6tdu0!1Lj9(T4LmBX7=z^Vmdu-iGrv zhWLUFm-kBqz2arS%Yc^wF9Ti%ybO35@G|g!lYzh0-SQ9p=%rfyc+IbO2%$eTYgLt= z*N^_F_N+X|(ym7Veyz0aYe4Fn1j<9}`?A#|WV`jRvEsS=^y2UJqko*gYoKqY<~%%_ z>N9H$NjlGfrPBHwsJwncpXq!GD*8;#caiK~u-1d?eOL$At4bH^nvS63vqV9@DCKv3 z63O;!dU0MqbNNpF%z|I{J)@tyW;K9;ZDgRfbaAY%3F2aXjQ2=q6xgD0>!5zLvkI$v z@g-}ue!O!9H0HLKN~O6t9G!cp+V3q9=@a(3m1PJy^3M#$Jajx zGxg)qOZp?a@A&H)6xL&!M^QpVjs`dT`QIJGjIB>rq&lIzkS8m z`ihr(ihqif8h)oAJ?qnV|F-ZK?Ej(R$i0!_$bAvx?ATbauIU(_uk3Fe8R%DzoAOAJ zZ13P@z{`M_0WSky2D}V-8SpaTWx&gTmjN#W|Dzf3IleY74KlW`cmJNzYmBgqeM;wPnCk%@~Wnp`_usqR!mQ=hTE>+;v94Tb1 zg0?#d6Z@9df^4-u*cJ+gb_UzFEBxOF5J?OZ>s44D0PrrCa`TBIq zZ-5sfc0|?vaJ7dj;(Rw+)WPepTD)3XL{ts$YgHm3CSCc2^%fF8<-*@dINv9g6(QaO z6&SVUc+ek~UikUoZ4lr0BnSswoR5C_zRUPDRD5D-J|6+RQvA!E*SDpeb>f#8u&Y$E z^OTgiVM(0N0q(=QsjI(!LGpaRXBRKa%F^-khP1P^e;;FyP5+INs3Lr(*(hw;`CX3L6>lYE%Q?G9o;LH6rO zp8xNj1|03UucLEhXFK_o?<&C-uHae=`D}LCc^z>$U$-6TT%m!UyKDq}vm1nVJK&g~ zu%?)8B-1VN4MGbmfa4dVIV*1!U?tM1Slk|BSZQMvH;Ck6b4WaEjHj|AX3B_L*<9W* z3sVB$T&EINA|C7rwYOFl!mTMu!_4K(X(N%ba?@fgXQmTIypT>$gNm(XfTZOR?d~@} zoapYR7v!-xgl8DN2O|AZBf780fL$t1owzW1KCmy+AM18<CYsTFK}P@9+h!7R(=u6Qao~q% z7tC=;xbvMqh{N_DP9yFMs<_$5xxL7FQqn$slu)tYHwGbs`RTM}jsUfCicWAXnSpIb zlOmYOT8ZFzrVyOWWhWCkYuW~l6q2wpEEy*#(iLm5%yA*bC(QhW2*#%~;6hO=r#Kvk z6r+X#yj&t>qJjv@lm#bKmcT=BJPQ>oF$G5)q9B=-JsC_)(4d@%gFd&Ez8alMgX>`2 zOeaSn92^Ki=mZgjPD#UPr_1hb6PyRYtpRTXvhZ^qQ=SJ9Tgq}B=@$6mGcxP*^B+?U zc=l4hFA&%c)UJPso(Gw3wJSrN@5cAVx$y8%OqHg_r0RKBY>vQ}(zhTP$@!J&^ zcl;(`IJaSap8qgCfl5&D95K(V&-0cfV0g-`&(E<;dHw_Dy(m(Ja+7&A0&f1UD$XX-v&R9hwp!@0OQ#0`rpJq1}Ob5>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__FUJITSU) || defined(__FCC_VERSION) || defined(__fcc_version) +# define COMPILER_ID "Fujitsu" + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION % 10000) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(__VISUALDSPVERSION__) || defined(__ADSPBLACKFIN__) || defined(__ADSPTS__) || defined(__ADSP21000__) +# define COMPILER_ID "ADSP" +#if defined(__VISUALDSPVERSION__) + /* __VISUALDSPVERSION__ = 0xVVRRPP00 */ +# define COMPILER_VERSION_MAJOR HEX(__VISUALDSPVERSION__>>24) +# define COMPILER_VERSION_MINOR HEX(__VISUALDSPVERSION__>>16 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__VISUALDSPVERSION__>>8 & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXE) || defined(__CRAYXC) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number components. */ +#ifdef COMPILER_VERSION_MAJOR +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_dialect_default = "INFO" ":" "dialect_default[" +#if CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXE) || defined(__CRAYXC) + require += info_cray[argc]; +#endif + require += info_language_dialect_default[argc]; + (void)argv; + return require; +} diff --git a/build/CMakeFiles/3.16.3/CompilerIdCXX/a.out b/build/CMakeFiles/3.16.3/CompilerIdCXX/a.out new file mode 100755 index 0000000000000000000000000000000000000000..2881803fe1c1315653cec8eead6766e2c9b69693 GIT binary patch literal 16720 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 e4*oGfdcfhF>oukL>{;1 + +void* test_func(void* data) +{ + return data; +} + +int main(void) +{ + pthread_t thread; + pthread_create(&thread, NULL, test_func, NULL); + pthread_detach(thread); + pthread_join(thread, NULL); + pthread_atfork(NULL, NULL, NULL); + pthread_exit(NULL); + + return 0; +} + +Determining if the function pthread_create exists in the pthreads failed with the following output: +Change Dir: /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_08e7c/fast && /usr/bin/make -f CMakeFiles/cmTC_08e7c.dir/build.make CMakeFiles/cmTC_08e7c.dir/build +make[1]: Entering directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_08e7c.dir/CheckFunctionExists.c.o +/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create -fPIE -o CMakeFiles/cmTC_08e7c.dir/CheckFunctionExists.c.o -c /usr/share/cmake-3.16/Modules/CheckFunctionExists.c +Linking C executable cmTC_08e7c +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_08e7c.dir/link.txt --verbose=1 +/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create CMakeFiles/cmTC_08e7c.dir/CheckFunctionExists.c.o -o cmTC_08e7c -lpthreads +/usr/bin/ld: cannot find -lpthreads +collect2: error: ld returned 1 exit status +make[1]: *** [CMakeFiles/cmTC_08e7c.dir/build.make:87: cmTC_08e7c] Error 1 +make[1]: Leaving directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' +make: *** [Makefile:121: cmTC_08e7c/fast] Error 2 + + + diff --git a/build/CMakeFiles/CMakeOutput.log b/build/CMakeFiles/CMakeOutput.log new file mode 100644 index 0000000..efeec88 --- /dev/null +++ b/build/CMakeFiles/CMakeOutput.log @@ -0,0 +1,489 @@ +The system is: Linux - 5.15.0-139-generic - x86_64 +Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. +Compiler: /usr/bin/cc +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + +The C compiler identification is GNU, found in "/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/3.16.3/CompilerIdC/a.out" + +Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. +Compiler: /usr/bin/c++ +Build flags: +Id flags: + +The output was: +0 + + +Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + +The CXX compiler identification is GNU, found in "/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/3.16.3/CompilerIdCXX/a.out" + +Determining if the C compiler works passed with the following output: +Change Dir: /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_049bd/fast && /usr/bin/make -f CMakeFiles/cmTC_049bd.dir/build.make CMakeFiles/cmTC_049bd.dir/build +make[1]: Entering directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_049bd.dir/testCCompiler.c.o +/usr/bin/cc -o CMakeFiles/cmTC_049bd.dir/testCCompiler.c.o -c /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp/testCCompiler.c +Linking C executable cmTC_049bd +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_049bd.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_049bd.dir/testCCompiler.c.o -o cmTC_049bd +make[1]: Leaving directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' + + + +Detecting C compiler ABI info compiled with the following output: +Change Dir: /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_6fd48/fast && /usr/bin/make -f CMakeFiles/cmTC_6fd48.dir/build.make CMakeFiles/cmTC_6fd48.dir/build +make[1]: Entering directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o +/usr/bin/cc -v -o CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cc3c2RcL.s +GNU C17 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu) + compiled by GNU C version 9.4.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include" +#include "..." search starts here: +#include <...> search starts here: + /usr/lib/gcc/x86_64-linux-gnu/9/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include +End of search list. +GNU C17 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu) + compiled by GNU C version 9.4.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +Compiler executable checksum: 01da938ff5dc2163489aa33cb3b747a7 +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' + as -v --64 -o CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o /tmp/cc3c2RcL.s +GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34 +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' +Linking C executable cmTC_6fd48 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6fd48.dir/link.txt --verbose=1 +/usr/bin/cc -v CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o -o cmTC_6fd48 +Using built-in specs. +COLLECT_GCC=/usr/bin/cc +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_6fd48' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/cconKWCg.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_6fd48 /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_6fd48' '-mtune=generic' '-march=x86-64' +make[1]: Leaving directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' + + + +Parsed C implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-linux-gnu/9/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/9/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/9/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + +Parsed C implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/usr/bin/make cmTC_6fd48/fast && /usr/bin/make -f CMakeFiles/cmTC_6fd48.dir/build.make CMakeFiles/cmTC_6fd48.dir/build] + ignore line: [make[1]: Entering directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp'] + ignore line: [Building C object CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o] + ignore line: [/usr/bin/cc -v -o CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/cc1 -quiet -v -imultiarch x86_64-linux-gnu /usr/share/cmake-3.16/Modules/CMakeCCompilerABI.c -quiet -dumpbase CMakeCCompilerABI.c -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cc3c2RcL.s] + ignore line: [GNU C17 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.4.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C17 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.4.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: 01da938ff5dc2163489aa33cb3b747a7] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o /tmp/cc3c2RcL.s] + ignore line: [GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64'] + ignore line: [Linking C executable cmTC_6fd48] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6fd48.dir/link.txt --verbose=1] + ignore line: [/usr/bin/cc -v CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o -o cmTC_6fd48 ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_6fd48' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/cconKWCg.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_6fd48 /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/9/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cconKWCg.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_6fd48] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] + arg [CMakeFiles/cmTC_6fd48.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] ==> ignore + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9] ==> [/usr/lib/gcc/x86_64-linux-gnu/9] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> [/usr/lib] + implicit libs: [gcc;gcc_s;c;gcc;gcc_s] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + +Determining if the CXX compiler works passed with the following output: +Change Dir: /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_c9cbf/fast && /usr/bin/make -f CMakeFiles/cmTC_c9cbf.dir/build.make CMakeFiles/cmTC_c9cbf.dir/build +make[1]: Entering directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_c9cbf.dir/testCXXCompiler.cxx.o +/usr/bin/c++ -o CMakeFiles/cmTC_c9cbf.dir/testCXXCompiler.cxx.o -c /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx +Linking CXX executable cmTC_c9cbf +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c9cbf.dir/link.txt --verbose=1 +/usr/bin/c++ CMakeFiles/cmTC_c9cbf.dir/testCXXCompiler.cxx.o -o cmTC_c9cbf +make[1]: Leaving directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' + + + +Detecting CXX compiler ABI info compiled with the following output: +Change Dir: /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_4e5e7/fast && /usr/bin/make -f CMakeFiles/cmTC_4e5e7.dir/build.make CMakeFiles/cmTC_4e5e7.dir/build +make[1]: Entering directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' +Building CXX object CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o +/usr/bin/c++ -v -o CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cc7HlAOK.s +GNU C++14 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu) + compiled by GNU C version 9.4.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/9" +ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed" +ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include" +#include "..." search starts here: +#include <...> search starts here: + /usr/include/c++/9 + /usr/include/x86_64-linux-gnu/c++/9 + /usr/include/c++/9/backward + /usr/lib/gcc/x86_64-linux-gnu/9/include + /usr/local/include + /usr/include/x86_64-linux-gnu + /usr/include +End of search list. +GNU C++14 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu) + compiled by GNU C version 9.4.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version isl-0.22.1-GMP + +GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 +Compiler executable checksum: 3d1eba838554fa2348dba760e4770469 +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + as -v --64 -o CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o /tmp/cc7HlAOK.s +GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34 +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' +Linking CXX executable cmTC_4e5e7 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4e5e7.dir/link.txt --verbose=1 +/usr/bin/c++ -v CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_4e5e7 +Using built-in specs. +COLLECT_GCC=/usr/bin/c++ +COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper +OFFLOAD_TARGET_NAMES=nvptx-none:hsa +OFFLOAD_TARGET_DEFAULT=1 +Target: x86_64-linux-gnu +Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu +Thread model: posix +gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) +COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/ +LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/ +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_4e5e7' '-shared-libgcc' '-mtune=generic' '-march=x86-64' + /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/cc83fSqd.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_4e5e7 /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_4e5e7' '-shared-libgcc' '-mtune=generic' '-march=x86-64' +make[1]: Leaving directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' + + + +Parsed CXX implicit include dir info from above output: rv=done + found start of include info + found start of implicit include info + add: [/usr/include/c++/9] + add: [/usr/include/x86_64-linux-gnu/c++/9] + add: [/usr/include/c++/9/backward] + add: [/usr/lib/gcc/x86_64-linux-gnu/9/include] + add: [/usr/local/include] + add: [/usr/include/x86_64-linux-gnu] + add: [/usr/include] + end of search list found + collapse include dir [/usr/include/c++/9] ==> [/usr/include/c++/9] + collapse include dir [/usr/include/x86_64-linux-gnu/c++/9] ==> [/usr/include/x86_64-linux-gnu/c++/9] + collapse include dir [/usr/include/c++/9/backward] ==> [/usr/include/c++/9/backward] + collapse include dir [/usr/lib/gcc/x86_64-linux-gnu/9/include] ==> [/usr/lib/gcc/x86_64-linux-gnu/9/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include/x86_64-linux-gnu] ==> [/usr/include/x86_64-linux-gnu] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/9;/usr/include/x86_64-linux-gnu/c++/9;/usr/include/c++/9/backward;/usr/lib/gcc/x86_64-linux-gnu/9/include;/usr/local/include;/usr/include/x86_64-linux-gnu;/usr/include] + + +Parsed CXX implicit link information from above output: + link line regex: [^( *|.*[/\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] + ignore line: [Change Dir: /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp] + ignore line: [] + ignore line: [Run Build Command(s):/usr/bin/make cmTC_4e5e7/fast && /usr/bin/make -f CMakeFiles/cmTC_4e5e7.dir/build.make CMakeFiles/cmTC_4e5e7.dir/build] + ignore line: [make[1]: Entering directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp'] + ignore line: [Building CXX object CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/cc1plus -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mtune=generic -march=x86-64 -auxbase-strip CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o -version -fasynchronous-unwind-tables -fstack-protector-strong -Wformat -Wformat-security -fstack-clash-protection -fcf-protection -o /tmp/cc7HlAOK.s] + ignore line: [GNU C++14 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.4.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/9"] + ignore line: [ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/include/c++/9] + ignore line: [ /usr/include/x86_64-linux-gnu/c++/9] + ignore line: [ /usr/include/c++/9/backward] + ignore line: [ /usr/lib/gcc/x86_64-linux-gnu/9/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include/x86_64-linux-gnu] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [GNU C++14 (Ubuntu 9.4.0-1ubuntu1~20.04.2) version 9.4.0 (x86_64-linux-gnu)] + ignore line: [ compiled by GNU C version 9.4.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version isl-0.22.1-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [Compiler executable checksum: 3d1eba838554fa2348dba760e4770469] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o /tmp/cc7HlAOK.s] + ignore line: [GNU assembler version 2.34 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.34] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + ignore line: [Linking CXX executable cmTC_4e5e7] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4e5e7.dir/link.txt --verbose=1] + ignore line: [/usr/bin/c++ -v CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_4e5e7 ] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:hsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-linux-gnu] + ignore line: [Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c ada c++ go brig d fortran objc obj-c++ gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32 m64 mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-9-9QDOt0/gcc-9-9.4.0/debian/tmp-nvptx/usr hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu] + ignore line: [Thread model: posix] + ignore line: [gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) ] + ignore line: [COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/9/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib/:/lib/x86_64-linux-gnu/:/lib/../lib/:/usr/lib/x86_64-linux-gnu/:/usr/lib/../lib/:/usr/lib/gcc/x86_64-linux-gnu/9/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_4e5e7' '-shared-libgcc' '-mtune=generic' '-march=x86-64'] + link line: [ /usr/lib/gcc/x86_64-linux-gnu/9/collect2 -plugin /usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so -plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper -plugin-opt=-fresolution=/tmp/cc83fSqd.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --eh-frame-hdr -m elf_x86_64 --hash-style=gnu --as-needed -dynamic-linker /lib64/ld-linux-x86-64.so.2 -pie -z now -z relro -o cmTC_4e5e7 /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o -L/usr/lib/gcc/x86_64-linux-gnu/9 -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu -L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib -L/lib/x86_64-linux-gnu -L/lib/../lib -L/usr/lib/x86_64-linux-gnu -L/usr/lib/../lib -L/usr/lib/gcc/x86_64-linux-gnu/9/../../.. CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] + arg [/usr/lib/gcc/x86_64-linux-gnu/9/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/lib/gcc/x86_64-linux-gnu/9/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cc83fSqd.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [--as-needed] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-pie] ==> ignore + arg [-znow] ==> ignore + arg [-zrelro] ==> ignore + arg [-o] ==> ignore + arg [cmTC_4e5e7] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crti.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtbeginS.o] ==> ignore + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] + arg [-L/lib/x86_64-linux-gnu] ==> dir [/lib/x86_64-linux-gnu] + arg [-L/lib/../lib] ==> dir [/lib/../lib] + arg [-L/usr/lib/x86_64-linux-gnu] ==> dir [/usr/lib/x86_64-linux-gnu] + arg [-L/usr/lib/../lib] ==> dir [/usr/lib/../lib] + arg [-L/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] + arg [CMakeFiles/cmTC_4e5e7.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-linux-gnu/9/crtendS.o] ==> ignore + arg [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/crtn.o] ==> ignore + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9] ==> [/usr/lib/gcc/x86_64-linux-gnu/9] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../../../lib] ==> [/usr/lib] + collapse library dir [/lib/x86_64-linux-gnu] ==> [/lib/x86_64-linux-gnu] + collapse library dir [/lib/../lib] ==> [/lib] + collapse library dir [/usr/lib/x86_64-linux-gnu] ==> [/usr/lib/x86_64-linux-gnu] + collapse library dir [/usr/lib/../lib] ==> [/usr/lib] + collapse library dir [/usr/lib/gcc/x86_64-linux-gnu/9/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit dirs: [/usr/lib/gcc/x86_64-linux-gnu/9;/usr/lib/x86_64-linux-gnu;/usr/lib;/lib/x86_64-linux-gnu;/lib] + implicit fwks: [] + + +Determining if the include file pthread.h exists passed with the following output: +Change Dir: /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_4fb05/fast && /usr/bin/make -f CMakeFiles/cmTC_4fb05.dir/build.make CMakeFiles/cmTC_4fb05.dir/build +make[1]: Entering directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_4fb05.dir/CheckIncludeFile.c.o +/usr/bin/cc -fPIE -o CMakeFiles/cmTC_4fb05.dir/CheckIncludeFile.c.o -c /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp/CheckIncludeFile.c +Linking C executable cmTC_4fb05 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4fb05.dir/link.txt --verbose=1 +/usr/bin/cc CMakeFiles/cmTC_4fb05.dir/CheckIncludeFile.c.o -o cmTC_4fb05 +make[1]: Leaving directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' + + + +Determining if the function pthread_create exists in the pthread passed with the following output: +Change Dir: /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp + +Run Build Command(s):/usr/bin/make cmTC_0fd95/fast && /usr/bin/make -f CMakeFiles/cmTC_0fd95.dir/build.make CMakeFiles/cmTC_0fd95.dir/build +make[1]: Entering directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' +Building C object CMakeFiles/cmTC_0fd95.dir/CheckFunctionExists.c.o +/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create -fPIE -o CMakeFiles/cmTC_0fd95.dir/CheckFunctionExists.c.o -c /usr/share/cmake-3.16/Modules/CheckFunctionExists.c +Linking C executable cmTC_0fd95 +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0fd95.dir/link.txt --verbose=1 +/usr/bin/cc -DCHECK_FUNCTION_EXISTS=pthread_create CMakeFiles/cmTC_0fd95.dir/CheckFunctionExists.c.o -o cmTC_0fd95 -lpthread +make[1]: Leaving directory '/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/CMakeTmp' + + + diff --git a/build/CMakeFiles/Makefile.cmake b/build/CMakeFiles/Makefile.cmake new file mode 100644 index 0000000..863d161 --- /dev/null +++ b/build/CMakeFiles/Makefile.cmake @@ -0,0 +1,78 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "../CMakeLists.txt" + "CMakeFiles/3.16.3/CMakeCCompiler.cmake" + "CMakeFiles/3.16.3/CMakeCXXCompiler.cmake" + "CMakeFiles/3.16.3/CMakeSystem.cmake" + "/usr/lib/cmake/eigen3/Eigen3Config.cmake" + "/usr/lib/cmake/eigen3/Eigen3ConfigVersion.cmake" + "/usr/lib/cmake/eigen3/Eigen3Targets.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfigVersion.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/BoostDetectToolset-1.71.0.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/boost_atomic-config-version.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/boost_atomic-config.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/libboost_atomic-variant-shared.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_atomic-1.71.0/libboost_atomic-variant-static.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_headers-1.71.0/boost_headers-config-version.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_headers-1.71.0/boost_headers-config.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/boost_system-config-version.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/boost_system-config.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/libboost_system-variant-shared.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_system-1.71.0/libboost_system-variant-static.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/boost_thread-config-version.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/boost_thread-config.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/libboost_thread-variant-shared.cmake" + "/usr/lib/x86_64-linux-gnu/cmake/boost_thread-1.71.0/libboost_thread-variant-static.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCXXInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake" + "/usr/share/cmake-3.16/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/share/cmake-3.16/Modules/CMakeFindDependencyMacro.cmake" + "/usr/share/cmake-3.16/Modules/CMakeGenericSystem.cmake" + "/usr/share/cmake-3.16/Modules/CMakeInitializeConfigs.cmake" + "/usr/share/cmake-3.16/Modules/CMakeLanguageInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/share/cmake-3.16/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/share/cmake-3.16/Modules/CheckCSourceCompiles.cmake" + "/usr/share/cmake-3.16/Modules/CheckIncludeFile.cmake" + "/usr/share/cmake-3.16/Modules/CheckLibraryExists.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU-C.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU-CXX.cmake" + "/usr/share/cmake-3.16/Modules/Compiler/GNU.cmake" + "/usr/share/cmake-3.16/Modules/FindBoost.cmake" + "/usr/share/cmake-3.16/Modules/FindPackageHandleStandardArgs.cmake" + "/usr/share/cmake-3.16/Modules/FindPackageMessage.cmake" + "/usr/share/cmake-3.16/Modules/FindThreads.cmake" + "/usr/share/cmake-3.16/Modules/Internal/CMakeCheckCompilerFlag.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux-GNU-C.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux-GNU-CXX.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux-GNU.cmake" + "/usr/share/cmake-3.16/Modules/Platform/Linux.cmake" + "/usr/share/cmake-3.16/Modules/Platform/UnixPaths.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "CMakeFiles/layers.dir/DependInfo.cmake" + "CMakeFiles/costmap_2d.dir/DependInfo.cmake" + ) diff --git a/build/CMakeFiles/Makefile2 b/build/CMakeFiles/Makefile2 new file mode 100644 index 0000000..a535eb3 --- /dev/null +++ b/build/CMakeFiles/Makefile2 @@ -0,0 +1,135 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Default target executed when no arguments are given to make. +default_target: all + +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/duongtd/robotics_core/costmap_2d + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/duongtd/robotics_core/costmap_2d/build + +#============================================================================= +# Directory level rules for the build root directory + +# The main recursive "all" target. +all: CMakeFiles/layers.dir/all +all: CMakeFiles/costmap_2d.dir/all + +.PHONY : all + +# The main recursive "preinstall" target. +preinstall: + +.PHONY : preinstall + +# The main recursive "clean" target. +clean: CMakeFiles/layers.dir/clean +clean: CMakeFiles/costmap_2d.dir/clean + +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/layers.dir + +# All Build rule for target. +CMakeFiles/layers.dir/all: CMakeFiles/costmap_2d.dir/all + $(MAKE) -f CMakeFiles/layers.dir/build.make CMakeFiles/layers.dir/depend + $(MAKE) -f CMakeFiles/layers.dir/build.make CMakeFiles/layers.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles --progress-num=8,9 "Built target layers" +.PHONY : CMakeFiles/layers.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/layers.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles 9 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/layers.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles 0 +.PHONY : CMakeFiles/layers.dir/rule + +# Convenience name for target. +layers: CMakeFiles/layers.dir/rule + +.PHONY : layers + +# clean rule for target. +CMakeFiles/layers.dir/clean: + $(MAKE) -f CMakeFiles/layers.dir/build.make CMakeFiles/layers.dir/clean +.PHONY : CMakeFiles/layers.dir/clean + +#============================================================================= +# Target rules for target CMakeFiles/costmap_2d.dir + +# All Build rule for target. +CMakeFiles/costmap_2d.dir/all: + $(MAKE) -f CMakeFiles/costmap_2d.dir/build.make CMakeFiles/costmap_2d.dir/depend + $(MAKE) -f CMakeFiles/costmap_2d.dir/build.make CMakeFiles/costmap_2d.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --progress-dir=/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles --progress-num=1,2,3,4,5,6,7 "Built target costmap_2d" +.PHONY : CMakeFiles/costmap_2d.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/costmap_2d.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles 7 + $(MAKE) -f CMakeFiles/Makefile2 CMakeFiles/costmap_2d.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles 0 +.PHONY : CMakeFiles/costmap_2d.dir/rule + +# Convenience name for target. +costmap_2d: CMakeFiles/costmap_2d.dir/rule + +.PHONY : costmap_2d + +# clean rule for target. +CMakeFiles/costmap_2d.dir/clean: + $(MAKE) -f CMakeFiles/costmap_2d.dir/build.make CMakeFiles/costmap_2d.dir/clean +.PHONY : CMakeFiles/costmap_2d.dir/clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/build/CMakeFiles/Progress/3 b/build/CMakeFiles/Progress/3 new file mode 100644 index 0000000..7b4d68d --- /dev/null +++ b/build/CMakeFiles/Progress/3 @@ -0,0 +1 @@ +empty \ No newline at end of file diff --git a/build/CMakeFiles/Progress/count.txt b/build/CMakeFiles/Progress/count.txt new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/build/CMakeFiles/Progress/count.txt @@ -0,0 +1 @@ +9 diff --git a/build/CMakeFiles/TargetDirectories.txt b/build/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..665892b --- /dev/null +++ b/build/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,4 @@ +/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/rebuild_cache.dir +/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/layers.dir +/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/edit_cache.dir +/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/costmap_2d.dir diff --git a/build/CMakeFiles/cmake.check_cache b/build/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/build/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/build/CMakeFiles/costmap_2d.dir/CXX.includecache b/build/CMakeFiles/costmap_2d.dir/CXX.includecache new file mode 100644 index 0000000..c4d6649 --- /dev/null +++ b/build/CMakeFiles/costmap_2d.dir/CXX.includecache @@ -0,0 +1,36 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + +../include/costmap_2d/observation_buffer.h +vector +- +list +- +string +- +ros/time.h +- +costmap_2d/observation.h +- +tf2_ros/buffer.h +- +sensor_msgs/PointCloud2.h +- +boost/thread.hpp +- + +/home/duongtd/robotics_core/costmap_2d/src/observation_buffer.cpp +costmap_2d/observation_buffer.h +- +tf2_geometry_msgs/tf2_geometry_msgs.h +- +tf2_sensor_msgs/tf2_sensor_msgs.h +- +sensor_msgs/point_cloud2_iterator.h +- + diff --git a/build/CMakeFiles/costmap_2d.dir/DependInfo.cmake b/build/CMakeFiles/costmap_2d.dir/DependInfo.cmake new file mode 100644 index 0000000..fd5ac44 --- /dev/null +++ b/build/CMakeFiles/costmap_2d.dir/DependInfo.cmake @@ -0,0 +1,35 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/duongtd/robotics_core/costmap_2d/src/array_parser.cpp" "/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o" + "/home/duongtd/robotics_core/costmap_2d/src/costmap_2d.cpp" "/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o" + "/home/duongtd/robotics_core/costmap_2d/src/footprint.cpp" "/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/costmap_2d.dir/src/footprint.cpp.o" + "/home/duongtd/robotics_core/costmap_2d/src/layer.cpp" "/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/costmap_2d.dir/src/layer.cpp.o" + "/home/duongtd/robotics_core/costmap_2d/src/layered_costmap.cpp" "/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o" + "/home/duongtd/robotics_core/costmap_2d/src/observation_buffer.cpp" "/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "BOOST_ALL_NO_LIB" + "BOOST_ATOMIC_DYN_LINK" + "BOOST_SYSTEM_DYN_LINK" + "BOOST_THREAD_DYN_LINK" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../include" + "/usr/include/eigen3" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/build/CMakeFiles/costmap_2d.dir/build.make b/build/CMakeFiles/costmap_2d.dir/build.make new file mode 100644 index 0000000..0702c62 --- /dev/null +++ b/build/CMakeFiles/costmap_2d.dir/build.make @@ -0,0 +1,174 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/duongtd/robotics_core/costmap_2d + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/duongtd/robotics_core/costmap_2d/build + +# Include any dependencies generated for this target. +include CMakeFiles/costmap_2d.dir/depend.make + +# Include the progress variables for this target. +include CMakeFiles/costmap_2d.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/costmap_2d.dir/flags.make + +CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o: CMakeFiles/costmap_2d.dir/flags.make +CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o: ../src/array_parser.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o -c /home/duongtd/robotics_core/costmap_2d/src/array_parser.cpp + +CMakeFiles/costmap_2d.dir/src/array_parser.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/costmap_2d.dir/src/array_parser.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/duongtd/robotics_core/costmap_2d/src/array_parser.cpp > CMakeFiles/costmap_2d.dir/src/array_parser.cpp.i + +CMakeFiles/costmap_2d.dir/src/array_parser.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/costmap_2d.dir/src/array_parser.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/duongtd/robotics_core/costmap_2d/src/array_parser.cpp -o CMakeFiles/costmap_2d.dir/src/array_parser.cpp.s + +CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o: CMakeFiles/costmap_2d.dir/flags.make +CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o: ../src/costmap_2d.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o -c /home/duongtd/robotics_core/costmap_2d/src/costmap_2d.cpp + +CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/duongtd/robotics_core/costmap_2d/src/costmap_2d.cpp > CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.i + +CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/duongtd/robotics_core/costmap_2d/src/costmap_2d.cpp -o CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.s + +CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.o: CMakeFiles/costmap_2d.dir/flags.make +CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.o: ../src/observation_buffer.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.o -c /home/duongtd/robotics_core/costmap_2d/src/observation_buffer.cpp + +CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/duongtd/robotics_core/costmap_2d/src/observation_buffer.cpp > CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.i + +CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/duongtd/robotics_core/costmap_2d/src/observation_buffer.cpp -o CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.s + +CMakeFiles/costmap_2d.dir/src/layer.cpp.o: CMakeFiles/costmap_2d.dir/flags.make +CMakeFiles/costmap_2d.dir/src/layer.cpp.o: ../src/layer.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/costmap_2d.dir/src/layer.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/costmap_2d.dir/src/layer.cpp.o -c /home/duongtd/robotics_core/costmap_2d/src/layer.cpp + +CMakeFiles/costmap_2d.dir/src/layer.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/costmap_2d.dir/src/layer.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/duongtd/robotics_core/costmap_2d/src/layer.cpp > CMakeFiles/costmap_2d.dir/src/layer.cpp.i + +CMakeFiles/costmap_2d.dir/src/layer.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/costmap_2d.dir/src/layer.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/duongtd/robotics_core/costmap_2d/src/layer.cpp -o CMakeFiles/costmap_2d.dir/src/layer.cpp.s + +CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o: CMakeFiles/costmap_2d.dir/flags.make +CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o: ../src/layered_costmap.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o -c /home/duongtd/robotics_core/costmap_2d/src/layered_costmap.cpp + +CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/duongtd/robotics_core/costmap_2d/src/layered_costmap.cpp > CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.i + +CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/duongtd/robotics_core/costmap_2d/src/layered_costmap.cpp -o CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.s + +CMakeFiles/costmap_2d.dir/src/footprint.cpp.o: CMakeFiles/costmap_2d.dir/flags.make +CMakeFiles/costmap_2d.dir/src/footprint.cpp.o: ../src/footprint.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object CMakeFiles/costmap_2d.dir/src/footprint.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/costmap_2d.dir/src/footprint.cpp.o -c /home/duongtd/robotics_core/costmap_2d/src/footprint.cpp + +CMakeFiles/costmap_2d.dir/src/footprint.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/costmap_2d.dir/src/footprint.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/duongtd/robotics_core/costmap_2d/src/footprint.cpp > CMakeFiles/costmap_2d.dir/src/footprint.cpp.i + +CMakeFiles/costmap_2d.dir/src/footprint.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/costmap_2d.dir/src/footprint.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/duongtd/robotics_core/costmap_2d/src/footprint.cpp -o CMakeFiles/costmap_2d.dir/src/footprint.cpp.s + +# Object files for target costmap_2d +costmap_2d_OBJECTS = \ +"CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o" \ +"CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o" \ +"CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.o" \ +"CMakeFiles/costmap_2d.dir/src/layer.cpp.o" \ +"CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o" \ +"CMakeFiles/costmap_2d.dir/src/footprint.cpp.o" + +# External object files for target costmap_2d +costmap_2d_EXTERNAL_OBJECTS = + +libcostmap_2d.a: CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o +libcostmap_2d.a: CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o +libcostmap_2d.a: CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.o +libcostmap_2d.a: CMakeFiles/costmap_2d.dir/src/layer.cpp.o +libcostmap_2d.a: CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o +libcostmap_2d.a: CMakeFiles/costmap_2d.dir/src/footprint.cpp.o +libcostmap_2d.a: CMakeFiles/costmap_2d.dir/build.make +libcostmap_2d.a: CMakeFiles/costmap_2d.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Linking CXX static library libcostmap_2d.a" + $(CMAKE_COMMAND) -P CMakeFiles/costmap_2d.dir/cmake_clean_target.cmake + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/costmap_2d.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/costmap_2d.dir/build: libcostmap_2d.a + +.PHONY : CMakeFiles/costmap_2d.dir/build + +CMakeFiles/costmap_2d.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/costmap_2d.dir/cmake_clean.cmake +.PHONY : CMakeFiles/costmap_2d.dir/clean + +CMakeFiles/costmap_2d.dir/depend: + cd /home/duongtd/robotics_core/costmap_2d/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/duongtd/robotics_core/costmap_2d /home/duongtd/robotics_core/costmap_2d /home/duongtd/robotics_core/costmap_2d/build /home/duongtd/robotics_core/costmap_2d/build /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/costmap_2d.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/costmap_2d.dir/depend + diff --git a/build/CMakeFiles/costmap_2d.dir/cmake_clean.cmake b/build/CMakeFiles/costmap_2d.dir/cmake_clean.cmake new file mode 100644 index 0000000..942ff64 --- /dev/null +++ b/build/CMakeFiles/costmap_2d.dir/cmake_clean.cmake @@ -0,0 +1,15 @@ +file(REMOVE_RECURSE + "CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o" + "CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o" + "CMakeFiles/costmap_2d.dir/src/footprint.cpp.o" + "CMakeFiles/costmap_2d.dir/src/layer.cpp.o" + "CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o" + "CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.o" + "libcostmap_2d.a" + "libcostmap_2d.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/costmap_2d.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/build/CMakeFiles/costmap_2d.dir/cmake_clean_target.cmake b/build/CMakeFiles/costmap_2d.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..cc64826 --- /dev/null +++ b/build/CMakeFiles/costmap_2d.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libcostmap_2d.a" +) diff --git a/build/CMakeFiles/costmap_2d.dir/depend.internal b/build/CMakeFiles/costmap_2d.dir/depend.internal new file mode 100644 index 0000000..ee23026 --- /dev/null +++ b/build/CMakeFiles/costmap_2d.dir/depend.internal @@ -0,0 +1,33 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o + /home/duongtd/robotics_core/costmap_2d/src/array_parser.cpp +CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o + ../include/costmap_2d/costmap_2d.h + ../include/costmap_2d/msg.h + /home/duongtd/robotics_core/costmap_2d/src/costmap_2d.cpp +CMakeFiles/costmap_2d.dir/src/footprint.cpp.o + ../include/costmap_2d/array_parser.h + ../include/costmap_2d/costmap_math.h + ../include/costmap_2d/footprint.h + ../include/costmap_2d/msg.h + /home/duongtd/robotics_core/costmap_2d/src/footprint.cpp +CMakeFiles/costmap_2d.dir/src/layer.cpp.o + ../include/costmap_2d/cost_values.h + ../include/costmap_2d/costmap_2d.h + ../include/costmap_2d/layer.h + ../include/costmap_2d/layered_costmap.h + ../include/costmap_2d/msg.h + /home/duongtd/robotics_core/costmap_2d/src/layer.cpp +CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o + ../include/costmap_2d/cost_values.h + ../include/costmap_2d/costmap_2d.h + ../include/costmap_2d/footprint.h + ../include/costmap_2d/layer.h + ../include/costmap_2d/layered_costmap.h + ../include/costmap_2d/msg.h + /home/duongtd/robotics_core/costmap_2d/src/layered_costmap.cpp +CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.o + ../include/costmap_2d/observation_buffer.h + /home/duongtd/robotics_core/costmap_2d/src/observation_buffer.cpp diff --git a/build/CMakeFiles/costmap_2d.dir/depend.make b/build/CMakeFiles/costmap_2d.dir/depend.make new file mode 100644 index 0000000..ea34c7f --- /dev/null +++ b/build/CMakeFiles/costmap_2d.dir/depend.make @@ -0,0 +1,33 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o: ../src/array_parser.cpp + +CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o: ../include/costmap_2d/costmap_2d.h +CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o: ../include/costmap_2d/msg.h +CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o: ../src/costmap_2d.cpp + +CMakeFiles/costmap_2d.dir/src/footprint.cpp.o: ../include/costmap_2d/array_parser.h +CMakeFiles/costmap_2d.dir/src/footprint.cpp.o: ../include/costmap_2d/costmap_math.h +CMakeFiles/costmap_2d.dir/src/footprint.cpp.o: ../include/costmap_2d/footprint.h +CMakeFiles/costmap_2d.dir/src/footprint.cpp.o: ../include/costmap_2d/msg.h +CMakeFiles/costmap_2d.dir/src/footprint.cpp.o: ../src/footprint.cpp + +CMakeFiles/costmap_2d.dir/src/layer.cpp.o: ../include/costmap_2d/cost_values.h +CMakeFiles/costmap_2d.dir/src/layer.cpp.o: ../include/costmap_2d/costmap_2d.h +CMakeFiles/costmap_2d.dir/src/layer.cpp.o: ../include/costmap_2d/layer.h +CMakeFiles/costmap_2d.dir/src/layer.cpp.o: ../include/costmap_2d/layered_costmap.h +CMakeFiles/costmap_2d.dir/src/layer.cpp.o: ../include/costmap_2d/msg.h +CMakeFiles/costmap_2d.dir/src/layer.cpp.o: ../src/layer.cpp + +CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o: ../include/costmap_2d/cost_values.h +CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o: ../include/costmap_2d/costmap_2d.h +CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o: ../include/costmap_2d/footprint.h +CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o: ../include/costmap_2d/layer.h +CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o: ../include/costmap_2d/layered_costmap.h +CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o: ../include/costmap_2d/msg.h +CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o: ../src/layered_costmap.cpp + +CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.o: ../include/costmap_2d/observation_buffer.h +CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.o: ../src/observation_buffer.cpp + diff --git a/build/CMakeFiles/costmap_2d.dir/flags.make b/build/CMakeFiles/costmap_2d.dir/flags.make new file mode 100644 index 0000000..ad98dd8 --- /dev/null +++ b/build/CMakeFiles/costmap_2d.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -fPIC -std=gnu++17 + +CXX_DEFINES = -DBOOST_ALL_NO_LIB -DBOOST_ATOMIC_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DBOOST_THREAD_DYN_LINK + +CXX_INCLUDES = -I/home/duongtd/robotics_core/costmap_2d/include -I/usr/include/eigen3 + diff --git a/build/CMakeFiles/costmap_2d.dir/link.txt b/build/CMakeFiles/costmap_2d.dir/link.txt new file mode 100644 index 0000000..eb03c95 --- /dev/null +++ b/build/CMakeFiles/costmap_2d.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc libcostmap_2d.a CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o CMakeFiles/costmap_2d.dir/src/observation_buffer.cpp.o CMakeFiles/costmap_2d.dir/src/layer.cpp.o CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o CMakeFiles/costmap_2d.dir/src/footprint.cpp.o +/usr/bin/ranlib libcostmap_2d.a diff --git a/build/CMakeFiles/costmap_2d.dir/progress.make b/build/CMakeFiles/costmap_2d.dir/progress.make new file mode 100644 index 0000000..2f82315 --- /dev/null +++ b/build/CMakeFiles/costmap_2d.dir/progress.make @@ -0,0 +1,8 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 +CMAKE_PROGRESS_3 = 3 +CMAKE_PROGRESS_4 = 4 +CMAKE_PROGRESS_5 = 5 +CMAKE_PROGRESS_6 = 6 +CMAKE_PROGRESS_7 = 7 + diff --git a/build/CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o b/build/CMakeFiles/costmap_2d.dir/src/array_parser.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..a83818ff670891c25f250ee6342038875932761d GIT binary patch literal 79880 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%0AU5W|{bl9TlzvZsIcT7nrPmi5v?9{-K?96R%z$ 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 literal 0 HcmV?d00001 diff --git a/build/CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o b/build/CMakeFiles/costmap_2d.dir/src/costmap_2d.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..1156f3cb0a1d243c1609770dcfc8e2ddcaf8ade4 GIT binary patch literal 388960 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
&;Vdie@( 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 P$8-AIEb`CXZ2kWS5^BIq literal 0 HcmV?d00001 diff --git a/build/CMakeFiles/costmap_2d.dir/src/footprint.cpp.o b/build/CMakeFiles/costmap_2d.dir/src/footprint.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..ccb51041d43b2baf26367faf86aa75c818819c83 GIT binary patch literal 107472 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 G|Nj7b077a2 literal 0 HcmV?d00001 diff --git a/build/CMakeFiles/costmap_2d.dir/src/layer.cpp.o b/build/CMakeFiles/costmap_2d.dir/src/layer.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..75b428d85647727794fd5b8a88ef8b9f8234889c GIT binary patch literal 282392 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 bs?9WDNnyv2`$vtx?wg@iMN3n&w)y`L({?O> literal 0 HcmV?d00001 diff --git a/build/CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o b/build/CMakeFiles/costmap_2d.dir/src/layered_costmap.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..d0463f1230ad14e1ffc5aadd26645ecbbe42a66e GIT binary patch literal 369696 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 O%j~PJqx{^(=l>V>5pA#l literal 0 HcmV?d00001 diff --git a/build/CMakeFiles/layers.dir/CXX.includecache b/build/CMakeFiles/layers.dir/CXX.includecache new file mode 100644 index 0000000..8e54ca9 --- /dev/null +++ b/build/CMakeFiles/layers.dir/CXX.includecache @@ -0,0 +1,8 @@ +#IncludeRegexLine: ^[ ]*[#%][ ]*(include|import)[ ]*[<"]([^">]+)([">]) + +#IncludeRegexScan: ^.*$ + +#IncludeRegexComplain: ^$ + +#IncludeRegexTransform: + diff --git a/build/CMakeFiles/layers.dir/DependInfo.cmake b/build/CMakeFiles/layers.dir/DependInfo.cmake new file mode 100644 index 0000000..4cb1564 --- /dev/null +++ b/build/CMakeFiles/layers.dir/DependInfo.cmake @@ -0,0 +1,31 @@ +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + "CXX" + ) +# The set of files for implicit dependencies of each language: +set(CMAKE_DEPENDS_CHECK_CXX + "/home/duongtd/robotics_core/costmap_2d/plugins/inflation_layer.cpp" "/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o" + ) +set(CMAKE_CXX_COMPILER_ID "GNU") + +# Preprocessor definitions for this target. +set(CMAKE_TARGET_DEFINITIONS_CXX + "BOOST_ALL_NO_LIB" + "BOOST_ATOMIC_DYN_LINK" + "BOOST_SYSTEM_DYN_LINK" + "BOOST_THREAD_DYN_LINK" + ) + +# The include file search paths: +set(CMAKE_CXX_TARGET_INCLUDE_PATH + "../include" + "/usr/include/eigen3" + ) + +# Targets to which this target links. +set(CMAKE_TARGET_LINKED_INFO_FILES + "/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/costmap_2d.dir/DependInfo.cmake" + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/build/CMakeFiles/layers.dir/build.make b/build/CMakeFiles/layers.dir/build.make new file mode 100644 index 0000000..803d64f --- /dev/null +++ b/build/CMakeFiles/layers.dir/build.make @@ -0,0 +1,99 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + + +# Remove some rules from gmake that .SUFFIXES does not remove. +SUFFIXES = + +.SUFFIXES: .hpux_make_needs_suffix_list + + +# Suppress display of executed commands. +$(VERBOSE).SILENT: + + +# A target that is always out of date. +cmake_force: + +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E remove -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = /home/duongtd/robotics_core/costmap_2d + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = /home/duongtd/robotics_core/costmap_2d/build + +# Include any dependencies generated for this target. +include CMakeFiles/layers.dir/depend.make + +# Include the progress variables for this target. +include CMakeFiles/layers.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/layers.dir/flags.make + +CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o: CMakeFiles/layers.dir/flags.make +CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o: ../plugins/inflation_layer.cpp + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -o CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o -c /home/duongtd/robotics_core/costmap_2d/plugins/inflation_layer.cpp + +CMakeFiles/layers.dir/plugins/inflation_layer.cpp.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/layers.dir/plugins/inflation_layer.cpp.i" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/duongtd/robotics_core/costmap_2d/plugins/inflation_layer.cpp > CMakeFiles/layers.dir/plugins/inflation_layer.cpp.i + +CMakeFiles/layers.dir/plugins/inflation_layer.cpp.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/layers.dir/plugins/inflation_layer.cpp.s" + /usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/duongtd/robotics_core/costmap_2d/plugins/inflation_layer.cpp -o CMakeFiles/layers.dir/plugins/inflation_layer.cpp.s + +# Object files for target layers +layers_OBJECTS = \ +"CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o" + +# External object files for target layers +layers_EXTERNAL_OBJECTS = + +liblayers.a: CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o +liblayers.a: CMakeFiles/layers.dir/build.make +liblayers.a: CMakeFiles/layers.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/duongtd/robotics_core/costmap_2d/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Linking CXX static library liblayers.a" + $(CMAKE_COMMAND) -P CMakeFiles/layers.dir/cmake_clean_target.cmake + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/layers.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/layers.dir/build: liblayers.a + +.PHONY : CMakeFiles/layers.dir/build + +CMakeFiles/layers.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/layers.dir/cmake_clean.cmake +.PHONY : CMakeFiles/layers.dir/clean + +CMakeFiles/layers.dir/depend: + cd /home/duongtd/robotics_core/costmap_2d/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/duongtd/robotics_core/costmap_2d /home/duongtd/robotics_core/costmap_2d /home/duongtd/robotics_core/costmap_2d/build /home/duongtd/robotics_core/costmap_2d/build /home/duongtd/robotics_core/costmap_2d/build/CMakeFiles/layers.dir/DependInfo.cmake --color=$(COLOR) +.PHONY : CMakeFiles/layers.dir/depend + diff --git a/build/CMakeFiles/layers.dir/cmake_clean.cmake b/build/CMakeFiles/layers.dir/cmake_clean.cmake new file mode 100644 index 0000000..1089c36 --- /dev/null +++ b/build/CMakeFiles/layers.dir/cmake_clean.cmake @@ -0,0 +1,10 @@ +file(REMOVE_RECURSE + "CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o" + "liblayers.a" + "liblayers.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang CXX) + include(CMakeFiles/layers.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/build/CMakeFiles/layers.dir/cmake_clean_target.cmake b/build/CMakeFiles/layers.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..13815ce --- /dev/null +++ b/build/CMakeFiles/layers.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "liblayers.a" +) diff --git a/build/CMakeFiles/layers.dir/depend.internal b/build/CMakeFiles/layers.dir/depend.internal new file mode 100644 index 0000000..5636432 --- /dev/null +++ b/build/CMakeFiles/layers.dir/depend.internal @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o + /home/duongtd/robotics_core/costmap_2d/plugins/inflation_layer.cpp diff --git a/build/CMakeFiles/layers.dir/depend.make b/build/CMakeFiles/layers.dir/depend.make new file mode 100644 index 0000000..8013d5e --- /dev/null +++ b/build/CMakeFiles/layers.dir/depend.make @@ -0,0 +1,5 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o: ../plugins/inflation_layer.cpp + diff --git a/build/CMakeFiles/layers.dir/flags.make b/build/CMakeFiles/layers.dir/flags.make new file mode 100644 index 0000000..ad98dd8 --- /dev/null +++ b/build/CMakeFiles/layers.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.16 + +# compile CXX with /usr/bin/c++ +CXX_FLAGS = -fPIC -std=gnu++17 + +CXX_DEFINES = -DBOOST_ALL_NO_LIB -DBOOST_ATOMIC_DYN_LINK -DBOOST_SYSTEM_DYN_LINK -DBOOST_THREAD_DYN_LINK + +CXX_INCLUDES = -I/home/duongtd/robotics_core/costmap_2d/include -I/usr/include/eigen3 + diff --git a/build/CMakeFiles/layers.dir/link.txt b/build/CMakeFiles/layers.dir/link.txt new file mode 100644 index 0000000..6e4bd22 --- /dev/null +++ b/build/CMakeFiles/layers.dir/link.txt @@ -0,0 +1,2 @@ +/usr/bin/ar qc liblayers.a CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o +/usr/bin/ranlib liblayers.a diff --git a/build/CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o b/build/CMakeFiles/layers.dir/plugins/inflation_layer.cpp.o new file mode 100644 index 0000000000000000000000000000000000000000..0a2a870a31a65debeaa401817282b40253c7f29e GIT binary patch literal 1088 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 +#include + +namespace costmap_2d +{ + +/** @brief Parse a vector of vectors of floats from a string. + * @param error_return If no error, error_return is set to "". If + * error, error_return will describe the error. + * Syntax is [[1.0, 2.0], [3.3, 4.4, 5.5], ...] + * + * On error, error_return is set and the return value could be + * anything, like part of a successful parse. */ +std::vector > parseVVF(const std::string& input, std::string& error_return); + +} // end namespace costmap_2d + +#endif // COSTMAP_2D_ARRAY_PARSER_H diff --git a/include/costmap_2d/costmap_2d.h b/include/costmap_2d/costmap_2d.h index b7fec3a..2849ace 100644 --- a/include/costmap_2d/costmap_2d.h +++ b/include/costmap_2d/costmap_2d.h @@ -1,137 +1,103 @@ -#ifndef COSTMAP_2D_COSTMAP_2D_H_ +#ifndef COSTMAP_2D_COSTMAP_2D_H_ // Bảo vệ tránh include file nhiều lần #define COSTMAP_2D_COSTMAP_2D_H_ -#include -#include -#include +#include // Dùng cho std::vector +#include // Dùng trong các thuật toán quét ô (flood fill, BFS) +#include // Dùng mutex để đồng bộ truy cập giữa các thread (multi-thread safe) +#include -namespace costmap_2d +namespace costmap_2d // Mọi thứ nằm trong namespace costmap_2d { - // convenient for storing x/y point pairs - struct MapLocation - { - unsigned int x; - unsigned int y; - }; - struct Point - { - double x; - double y; - }; - /** +// Cấu trúc tiện dụng để lưu trữ cặp tọa độ (x, y) trên bản đồ (dạng ô) +struct MapLocation +{ + unsigned int x; // Chỉ số hàng (hoặc cột) theo trục X trong costmap + unsigned int y; // Chỉ số hàng (hoặc cột) theo trục Y trong costmap +}; + +/** * @class Costmap2D - * @brief A 2D costmap provides a mapping between points in the world and their associated "costs". + * @brief Lớp này đại diện cho bản đồ chi phí 2D (costmap) + * + * Nó ánh xạ giữa không gian thế giới (tọa độ thực, mét) và lưới ô (cells), + * mỗi ô chứa "cost" – tức là chi phí để robot đi qua ô đó (ví dụ: 0 là free, 255 là obstacle). */ class Costmap2D { + // friend class CostmapTester; // Cho phép lớp test (gtest) truy cập vào các thành viên private public: /** - * @brief Constructor for a costmap - * @param cells_size_x The x size of the map in cells - * @param cells_size_y The y size of the map in cells - * @param resolution The resolution of the map in meters/cell - * @param origin_x The x origin of the map - * @param origin_y The y origin of the map - * @param default_value Default Value + * Constructor khởi tạo bản đồ costmap + * @param cells_size_x: số ô theo chiều X + * @param cells_size_y: số ô theo chiều Y + * @param resolution: kích thước 1 ô (mét / ô) + * @param origin_x: gốc bản đồ (tọa độ thế giới) theo trục X + * @param origin_y: gốc bản đồ (tọa độ thế giới) theo trục Y + * @param default_value: giá trị mặc định của mỗi ô (thường là 0 = free) */ Costmap2D(unsigned int cells_size_x, unsigned int cells_size_y, double resolution, double origin_x, double origin_y, unsigned char default_value = 0); /** - * @brief Copy constructor for a costmap, creates a copy efficiently - * @param map The costmap to copy + * Constructor sao chép (copy constructor) + * Dùng để tạo bản sao nhanh của một bản đồ costmap khác. */ Costmap2D(const Costmap2D& map); /** - * @brief Overloaded assignment operator - * @param map The costmap to copy - * @return A reference to the map after the copy has finished + * Toán tử gán (=) được overload để sao chép dữ liệu từ bản đồ khác. */ Costmap2D& operator=(const Costmap2D& map); /** - * @brief Turn this costmap into a copy of a window of a costmap passed in - * @param map The costmap to copy - * @param win_origin_x The x origin (lower left corner) for the window to copy, in meters - * @param win_origin_y The y origin (lower left corner) for the window to copy, in meters - * @param win_size_x The x size of the window, in meters - * @param win_size_y The y size of the window, in meters + * Tạo bản sao từ một vùng (window) của bản đồ khác. + * Dùng khi ta chỉ muốn sao chép một phần nhỏ của bản đồ lớn. */ bool copyCostmapWindow(const Costmap2D& map, double win_origin_x, double win_origin_y, double win_size_x, double win_size_y); - /** - * @brief Default constructor - */ + /// Constructor mặc định (không khởi tạo kích thước) Costmap2D(); - /** - * @brief Destructor - */ + /// Destructor virtual ~Costmap2D(); /** - * @brief Get the cost of a cell in the costmap - * @param mx The x coordinate of the cell - * @param my The y coordinate of the cell - * @return The cost of the cell + * Trả về giá trị chi phí (cost) của một ô (mx, my) */ unsigned char getCost(unsigned int mx, unsigned int my) const; /** - * @brief Set the cost of a cell in the costmap - * @param mx The x coordinate of the cell - * @param my The y coordinate of the cell - * @param cost The cost to set the cell to + * Đặt giá trị cost cho một ô (mx, my) */ void setCost(unsigned int mx, unsigned int my, unsigned char cost); /** - * @brief Convert from map coordinates to world coordinates - * @param mx The x map coordinate - * @param my The y map coordinate - * @param wx Will be set to the associated world x coordinate - * @param wy Will be set to the associated world y coordinate + * Chuyển đổi tọa độ map (ô) → tọa độ thế giới (mét) + * Dùng để vẽ, debug hoặc xác định vị trí thực tế của một ô. */ void mapToWorld(unsigned int mx, unsigned int my, double& wx, double& wy) const; /** - * @brief Convert from world coordinates to map coordinates - * @param wx The x world coordinate - * @param wy The y world coordinate - * @param mx Will be set to the associated map x coordinate - * @param my Will be set to the associated map y coordinate - * @return True if the conversion was successful (legal bounds) false otherwise + * Chuyển đổi tọa độ thế giới → tọa độ map (ô) + * Nếu tọa độ nằm ngoài bản đồ → trả về false */ bool worldToMap(double wx, double wy, unsigned int& mx, unsigned int& my) const; /** - * @brief Convert from world coordinates to map coordinates without checking for legal bounds - * @param wx The x world coordinate - * @param wy The y world coordinate - * @param mx Will be set to the associated map x coordinate - * @param my Will be set to the associated map y coordinate - * @note The returned map coordinates are not guaranteed to lie within the map. + * Chuyển đổi mà không kiểm tra biên hợp lệ (có thể nằm ngoài bản đồ) */ void worldToMapNoBounds(double wx, double wy, int& mx, int& my) const; /** - * @brief Convert from world coordinates to map coordinates, constraining results to legal bounds. - * @param wx The x world coordinate - * @param wy The y world coordinate - * @param mx Will be set to the associated map x coordinate - * @param my Will be set to the associated map y coordinate - * @note The returned map coordinates are guaranteed to lie within the map. + * Chuyển đổi nhưng ép kết quả nằm trong biên của bản đồ (clamped) */ void worldToMapEnforceBounds(double wx, double wy, int& mx, int& my) const; /** - * @brief Given two map coordinates... compute the associated index - * @param mx The x coordinate - * @param my The y coordinate - * @return The associated index + * Tính chỉ số 1D của ô từ cặp tọa độ (mx, my) + * Công thức: index = my * size_x_ + mx */ inline unsigned int getIndex(unsigned int mx, unsigned int my) const { @@ -139,10 +105,7 @@ public: } /** - * @brief Given an index... compute the associated map coordinates - * @param index The index - * @param mx Will be set to the x coordinate - * @param my Will be set to the y coordinate + * Chuyển ngược lại: từ chỉ số 1D → cặp tọa độ (mx, my) */ inline void indexToCells(unsigned int index, unsigned int& mx, unsigned int& my) const { @@ -151,111 +114,103 @@ public: } /** - * @brief Will return a pointer to the underlying unsigned char array used as the costmap - * @return A pointer to the underlying unsigned char array storing cost values + * Trả về con trỏ đến mảng dữ liệu costmap (unsigned char array) */ unsigned char* getCharMap() const; /** - * @brief Accessor for the x size of the costmap in cells - * @return The x size of the costmap + * Trả về số ô theo trục X */ unsigned int getSizeInCellsX() const; /** - * @brief Accessor for the y size of the costmap in cells - * @return The y size of the costmap + * Trả về số ô theo trục Y */ unsigned int getSizeInCellsY() const; /** - * @brief Accessor for the x size of the costmap in meters - * @return The x size of the costmap (returns the centerpoint of the last legal cell in the map) + * Trả về kích thước bản đồ theo mét (theo X) */ double getSizeInMetersX() const; /** - * @brief Accessor for the y size of the costmap in meters - * @return The y size of the costmap (returns the centerpoint of the last legal cell in the map) + * Trả về kích thước bản đồ theo mét (theo Y) */ double getSizeInMetersY() const; /** - * @brief Accessor for the x origin of the costmap - * @return The x origin of the costmap + * Trả về tọa độ gốc bản đồ theo trục X (tọa độ thế giới) */ double getOriginX() const; /** - * @brief Accessor for the y origin of the costmap - * @return The y origin of the costmap + * Trả về tọa độ gốc bản đồ theo trục Y (tọa độ thế giới) */ double getOriginY() const; /** - * @brief Accessor for the resolution of the costmap - * @return The resolution of the costmap + * Trả về độ phân giải (mét / ô) */ double getResolution() const; + /// Đặt giá trị mặc định (cost khi reset map) void setDefaultValue(unsigned char c) { default_value_ = c; } + /// Trả về giá trị mặc định unsigned char getDefaultValue() { return default_value_; } /** - * @brief Sets the cost of a convex polygon to a desired value - * @param polygon The polygon to perform the operation on - * @param cost_value The value to set costs to - * @return True if the polygon was filled... false if it could not be filled + * Đặt cost cho một vùng đa giác lồi (convex polygon) + * Dùng để đánh dấu vùng chướng ngại vật hoặc vùng forbidden. */ bool setConvexPolygonCost(const std::vector& polygon, unsigned char cost_value); /** - * @brief Get the map cells that make up the outline of a polygon - * @param polygon The polygon in map coordinates to rasterize - * @param polygon_cells Will be set to the cells contained in the outline of the polygon + * Lấy danh sách các ô nằm trên viền (outline) của một polygon. */ void polygonOutlineCells(const std::vector& polygon, std::vector& polygon_cells); /** - * @brief Get the map cells that fill a convex polygon - * @param polygon The polygon in map coordinates to rasterize - * @param polygon_cells Will be set to the cells that fill the polygon + * Lấy danh sách các ô nằm bên trong polygon (điền vùng lồi). */ void convexFillCells(const std::vector& polygon, std::vector& polygon_cells); /** - * @brief Move the origin of the costmap to a new location.... keeping data when it can - * @param new_origin_x The x coordinate of the new origin - * @param new_origin_y The y coordinate of the new origin + * Cập nhật lại gốc bản đồ (origin) sang vị trí mới, + * giữ lại dữ liệu cũ nếu có thể (thường dùng khi robot di chuyển xa). */ virtual void updateOrigin(double new_origin_x, double new_origin_y); /** - * @brief Save the costmap out to a pgm file - * @param file_name The name of the file to save + * Lưu bản đồ ra file ảnh PGM (phục vụ debug hoặc visualization) */ bool saveMap(std::string file_name); + /** + * Thay đổi kích thước bản đồ (resize toàn bộ) + */ void resizeMap(unsigned int size_x, unsigned int size_y, double resolution, double origin_x, double origin_y); + /** + * Reset toàn bộ costmap trong vùng (x0, y0) → (xn, yn) + */ void resetMap(unsigned int x0, unsigned int y0, unsigned int xn, unsigned int yn); /** - * @brief Given distance in the world... convert it to cells - * @param world_dist The world distance - * @return The equivalent cell distance + * Chuyển khoảng cách theo mét → số ô tương ứng */ unsigned int cellDistance(double world_dist); - // Provide a typedef to ease future code maintenance + /** + * Định nghĩa mutex để bảo vệ truy cập đồng thời. + */ typedef boost::recursive_mutex mutex_t; mutex_t* getMutex() { @@ -264,17 +219,8 @@ public: protected: /** - * @brief Copy a region of a source map into a destination map - * @param source_map The source map - * @param sm_lower_left_x The lower left x point of the source map to start the copy - * @param sm_lower_left_y The lower left y point of the source map to start the copy - * @param sm_size_x The x size of the source map - * @param dest_map The destination map - * @param dm_lower_left_x The lower left x point of the destination map to start the copy - * @param dm_lower_left_y The lower left y point of the destination map to start the copy - * @param dm_size_x The x size of the destination map - * @param region_size_x The x size of the region to copy - * @param region_size_y The y size of the region to copy + * Hàm template copy một vùng dữ liệu từ bản đồ nguồn → bản đồ đích + * Dữ liệu được copy bằng memcpy để đảm bảo nhanh. */ template void copyMapRegion(data_type* source_map, unsigned int sm_lower_left_x, unsigned int sm_lower_left_y, @@ -282,65 +228,60 @@ protected: unsigned int dm_lower_left_y, unsigned int dm_size_x, unsigned int region_size_x, unsigned int region_size_y) { - // we'll first need to compute the starting points for each map + // Con trỏ bắt đầu tại vị trí góc dưới trái của vùng cần copy trong source data_type* sm_index = source_map + (sm_lower_left_y * sm_size_x + sm_lower_left_x); + // Con trỏ bắt đầu tại vị trí góc dưới trái trong dest data_type* dm_index = dest_map + (dm_lower_left_y * dm_size_x + dm_lower_left_x); - // now, we'll copy the source map into the destination map + // Lặp qua từng hàng trong vùng copy for (unsigned int i = 0; i < region_size_y; ++i) { + // Copy nguyên hàng (memcpy nhanh hơn vòng for từng phần tử) memcpy(dm_index, sm_index, region_size_x * sizeof(data_type)); - sm_index += sm_size_x; - dm_index += dm_size_x; + sm_index += sm_size_x; // chuyển sang hàng tiếp theo của source + dm_index += dm_size_x; // chuyển sang hàng tiếp theo của dest } } /** - * @brief Deletes the costmap, static_map, and markers data structures + * Xóa toàn bộ dữ liệu bản đồ (free bộ nhớ) */ virtual void deleteMaps(); /** - * @brief Resets the costmap and static_map to be unknown space + * Reset toàn bộ dữ liệu bản đồ về trạng thái UNKNOWN (NO_INFORMATION) */ virtual void resetMaps(); /** - * @brief Initializes the costmap, static_map, and markers data structures - * @param size_x The x size to use for map initialization - * @param size_y The y size to use for map initialization + * Cấp phát và khởi tạo bộ nhớ cho costmap */ virtual void initMaps(unsigned int size_x, unsigned int size_y); /** - * @brief Raytrace a line and apply some action at each step - * @param at The action to take... a functor - * @param x0 The starting x coordinate - * @param y0 The starting y coordinate - * @param x1 The ending x coordinate - * @param y1 The ending y coordinate - * @param max_length The maximum desired length of the segment... allows you to not go all the way to the endpoint + * Thuật toán raytracing Bresenham — đi từ điểm (x0,y0) → (x1,y1) + * Mỗi bước sẽ gọi “ActionType” (một functor) để đánh dấu hoặc xử lý từng ô. + * Thường dùng cho sensor update (quét laser). */ template inline void raytraceLine(ActionType at, unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1, unsigned int max_length = UINT_MAX) { - int dx = x1 - x0; - int dy = y1 - y0; + int dx = x1 - x0; // Khoảng cách theo trục X + int dy = y1 - y0; // Khoảng cách theo trục Y unsigned int abs_dx = abs(dx); unsigned int abs_dy = abs(dy); - int offset_dx = sign(dx); - int offset_dy = sign(dy) * size_x_; + int offset_dx = sign(dx); // Hướng đi theo X + int offset_dy = sign(dy) * size_x_; // Hướng đi theo Y (theo stride của hàng) - unsigned int offset = y0 * size_x_ + x0; + unsigned int offset = y0 * size_x_ + x0; // Vị trí bắt đầu trong mảng costmap - // we need to chose how much to scale our dominant dimension, based on the maximum length of the line - double dist = hypot(dx, dy); + double dist = hypot(dx, dy); // Chiều dài đoạn thẳng double scale = (dist == 0.0) ? 1.0 : std::min(1.0, max_length / dist); - // if x is dominant + // Xét hướng nào là trục chính (dominant) if (abs_dx >= abs_dy) { int error_y = abs_dx / 2; @@ -348,14 +289,13 @@ protected: return; } - // otherwise y is dominant int error_x = abs_dy / 2; bresenham2D(at, abs_dy, abs_dx, error_x, offset_dy, offset_dx, offset, (unsigned int)(scale * abs_dy)); } private: /** - * @brief A 2D implementation of Bresenham's raytracing algorithm... applies an action at each step + * Triển khai Bresenham 2D — đi qua từng ô trên đường thẳng và gọi “at(offset)” mỗi bước. */ template inline void bresenham2D(ActionType at, unsigned int abs_da, unsigned int abs_db, int error_b, int offset_a, @@ -364,33 +304,38 @@ private: unsigned int end = std::min(max_length, abs_da); for (unsigned int i = 0; i < end; ++i) { - at(offset); - offset += offset_a; + at(offset); // Gọi hành động (thường là đánh dấu costmap) + offset += offset_a; // Tiến thêm 1 bước theo hướng chính error_b += abs_db; if ((unsigned int)error_b >= abs_da) { - offset += offset_b; + offset += offset_b; // Bước sang hàng tiếp theo khi sai số tích lũy đủ lớn error_b -= abs_da; } } - at(offset); + at(offset); // Xử lý ô cuối cùng } + /// Trả về dấu của số nguyên (x>0:1, x<0:-1) inline int sign(int x) { return x > 0 ? 1.0 : -1.0; } - mutex_t* access_; -protected: - unsigned int size_x_; - unsigned int size_y_; - double resolution_; - double origin_x_; - double origin_y_; - unsigned char* costmap_; - unsigned char default_value_; + mutex_t* access_; // Con trỏ đến mutex (đồng bộ truy cập costmap giữa các thread) +protected: + unsigned int size_x_; // Số lượng ô theo trục X + unsigned int size_y_; // Số lượng ô theo trục Y + double resolution_; // Độ phân giải: mét/ô + double origin_x_; // Tọa độ gốc bản đồ (theo thế giới) trục X + double origin_y_; // Tọa độ gốc bản đồ (theo thế giới) trục Y + unsigned char* costmap_; // Mảng 1 chiều chứa giá trị cost của toàn bộ bản đồ + unsigned char default_value_; // Giá trị mặc định cho các ô (thường = 0 hoặc 255 nếu unknown) + + /** + * Functor nội bộ: dùng trong raytraceLine để đánh dấu một ô. + */ class MarkCell { public: @@ -400,13 +345,16 @@ protected: } inline void operator()(unsigned int offset) { - costmap_[offset] = value_; + costmap_[offset] = value_; // Gán cost của ô bằng giá trị value_ } private: unsigned char* costmap_; unsigned char value_; }; + /** + * Functor nội bộ: dùng để thu thập các ô nằm trên viền polygon. + */ class PolygonOutlineCells { public: @@ -415,12 +363,11 @@ protected: { } - // just push the relevant cells back onto the list inline void operator()(unsigned int offset) { MapLocation loc; - costmap_.indexToCells(offset, loc.x, loc.y); - cells_.push_back(loc); + costmap_.indexToCells(offset, loc.x, loc.y); // Chuyển index → (x, y) + cells_.push_back(loc); // Thêm ô này vào danh sách viền polygon } private: @@ -432,4 +379,4 @@ protected: } // namespace costmap_2d -#endif // COSTMAP_2D_COSTMAP_2D_H +#endif // COSTMAP_2D_COSTMAP_2D_H_ diff --git a/include/costmap_2d/costmap_layer.h b/include/costmap_2d/costmap_layer.h new file mode 100644 index 0000000..a989796 --- /dev/null +++ b/include/costmap_2d/costmap_layer.h @@ -0,0 +1,151 @@ +/********************************************************************* + * + * Software License Agreement (BSD License) + * + * Copyright (c) 2008, 2013, Willow Garage, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * Author: Eitan Marder-Eppstein + * David V. Lu!! + *********************************************************************/ +#ifndef COSTMAP_2D_COSTMAP_LAYER_H_ +#define COSTMAP_2D_COSTMAP_LAYER_H_ +#include +#include +#include + +namespace costmap_2d +{ + +class CostmapLayer : public Layer, public Costmap2D +{ +public: + CostmapLayer() : has_extra_bounds_(false), + extra_min_x_(1e6), extra_max_x_(-1e6), + extra_min_y_(1e6), extra_max_y_(-1e6) {} + + bool isDiscretized() + { + return true; + } + + virtual void matchSize(); + + virtual void clearArea(int start_x, int start_y, int end_x, int end_y, bool invert_area=false); + + /** + * If an external source changes values in the costmap, + * it should call this method with the area that it changed + * to ensure that the costmap includes this region as well. + * @param mx0 Minimum x value of the bounding box + * @param my0 Minimum y value of the bounding box + * @param mx1 Maximum x value of the bounding box + * @param my1 Maximum y value of the bounding box + */ + void addExtraBounds(double mx0, double my0, double mx1, double my1); + +protected: + /* + * Updates the master_grid within the specified + * bounding box using this layer's values. + * + * TrueOverwrite means every value from this layer + * is written into the master grid. + */ + void updateWithTrueOverwrite(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j); + + /* + * Updates the master_grid within the specified + * bounding box using this layer's values. + * + * Overwrite means every valid value from this layer + * is written into the master grid (does not copy NO_INFORMATION) + */ + void updateWithOverwrite(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j); + + /* + * Updates the master_grid within the specified + * bounding box using this layer's values. + * + * Sets the new value to the maximum of the master_grid's value + * and this layer's value. If the master value is NO_INFORMATION, + * it is overwritten. If the layer's value is NO_INFORMATION, + * the master value does not change. + */ + void updateWithMax(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j); + + /* + * Updates the master_grid within the specified + * bounding box using this layer's values. + * + * Sets the new value to the sum of the master grid's value + * and this layer's value. If the master value is NO_INFORMATION, + * it is overwritten with the layer's value. If the layer's value + * is NO_INFORMATION, then the master value does not change. + * + * If the sum value is larger than INSCRIBED_INFLATED_OBSTACLE, + * the master value is set to (INSCRIBED_INFLATED_OBSTACLE - 1). + */ + void updateWithAddition(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j); + + /** + * Updates the bounding box specified in the parameters to include + * the location (x,y) + * + * @param x x-coordinate to include + * @param y y-coordinate to include + * @param min_x bounding box + * @param min_y bounding box + * @param max_x bounding box + * @param max_y bounding box + */ + void touch(double x, double y, double* min_x, double* min_y, double* max_x, double* max_y); + + /* + * Updates the bounding box specified in the parameters + * to include the bounding box from the addExtraBounds + * call. If addExtraBounds was not called, the method will do nothing. + * + * Should be called at the beginning of the updateBounds method + * + * @param min_x bounding box (input and output) + * @param min_y bounding box (input and output) + * @param max_x bounding box (input and output) + * @param max_y bounding box (input and output) + */ + void useExtraBounds(double* min_x, double* min_y, double* max_x, double* max_y); + bool has_extra_bounds_; + +private: + double extra_min_x_, extra_max_x_, extra_min_y_, extra_max_y_; +}; + +} // namespace costmap_2d +#endif // COSTMAP_2D_COSTMAP_LAYER_H_ diff --git a/include/costmap_2d/costmap_math.h b/include/costmap_2d/costmap_math.h new file mode 100644 index 0000000..46872b3 --- /dev/null +++ b/include/costmap_2d/costmap_math.h @@ -0,0 +1,69 @@ +/********************************************************************* + * + * Software License Agreement (BSD License) + * + * Copyright (c) 2008, 2013, Willow Garage, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * Author: Eitan Marder-Eppstein + * David V. Lu!! + *********************************************************************/ +#ifndef COSTMAP_2D_COSTMAP_MATH_H_ +#define COSTMAP_2D_COSTMAP_MATH_H_ + +#include +#include +#include +#include + +/** @brief Return -1 if x < 0, +1 otherwise. */ +inline double sign(double x) +{ + return x < 0.0 ? -1.0 : 1.0; +} + +/** @brief Same as sign(x) but returns 0 if x is 0. */ +inline double sign0(double x) +{ + return x < 0.0 ? -1.0 : (x > 0.0 ? 1.0 : 0.0); +} + +inline double distance(double x0, double y0, double x1, double y1) +{ + return hypot(x1 - x0, y1 - y0); +} + +double distanceToLine(double pX, double pY, double x0, double y0, double x1, double y1); + +bool intersects(std::vector& polygon, float testx, float testy); + +bool intersects(std::vector& polygon1, std::vector& polygon2); + +#endif // COSTMAP_2D_COSTMAP_MATH_H_ diff --git a/include/costmap_2d/critical_layer.h b/include/costmap_2d/critical_layer.h new file mode 100644 index 0000000..eb4e3ee --- /dev/null +++ b/include/costmap_2d/critical_layer.h @@ -0,0 +1,19 @@ +#ifndef COSTMAP_2D_CRITICAL_LAYER_H_ +#define COSTMAP_2D_CRITICAL_LAYER_H_ + +#include + +namespace costmap_2d +{ +class CriticalLayer : public StaticLayer +{ +public: + CriticalLayer(); + virtual ~CriticalLayer(); +private: + unsigned char interpretValue(unsigned char value); + void updateCosts(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j); +}; +} + +#endif // COSTMAP_2D_CRITICAL_LAYER_H_ \ No newline at end of file diff --git a/include/costmap_2d/footprint.h b/include/costmap_2d/footprint.h new file mode 100644 index 0000000..8fce107 --- /dev/null +++ b/include/costmap_2d/footprint.h @@ -0,0 +1,147 @@ +/********************************************************************* + * + * Software License Agreement (BSD License) + * + * Copyright (c) 2008, 2013, Willow Garage, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * Author: Eitan Marder-Eppstein + * David V. Lu!! + *********************************************************************/ +#ifndef COSTMAP_2D_FOOTPRINT_H +#define COSTMAP_2D_FOOTPRINT_H + +#include +#include +#include + +using namespace std; + +namespace costmap_2d +{ + +/** + * @brief Calculate the extreme distances for the footprint + * + * @param footprint The footprint to examine + * @param min_dist Output parameter of the minimum distance + * @param max_dist Output parameter of the maximum distance + */ +void calculateMinAndMaxDistances(const std::vector& footprint, + double& min_dist, double& max_dist); + +/** + * @brief Convert Point32 to Point + */ +Point toPoint(Point32 pt); + +/** + * @brief Convert Point to Point32 + */ +Point32 toPoint32(Point pt); + +/** + * @brief Convert vector of Points to Polygon msg + */ +Polygon toPolygon(std::vector pts); + +/** + * @brief Convert Polygon msg to vector of Points. + */ +std::vector toPointVector(Polygon polygon); + +/** + * @brief Given a pose and base footprint, build the oriented footprint of the robot (list of Points) + * @param x The x position of the robot + * @param y The y position of the robot + * @param theta The orientation of the robot + * @param footprint_spec Basic shape of the footprint + * @param oriented_footprint Will be filled with the points in the oriented footprint of the robot +*/ +void transformFootprint(double x, double y, double theta, const std::vector& footprint_spec, + std::vector& oriented_footprint); + +/** + * @brief Given a pose and base footprint, build the oriented footprint of the robot (PolygonStamped) + * @param x The x position of the robot + * @param y The y position of the robot + * @param theta The orientation of the robot + * @param footprint_spec Basic shape of the footprint + * @param oriented_footprint Will be filled with the points in the oriented footprint of the robot +*/ +void transformFootprint(double x, double y, double theta, const std::vector& footprint_spec, + PolygonStamped & oriented_footprint); + +/** + * @brief Adds the specified amount of padding to the footprint (in place) + */ +void padFootprint(std::vector& footprint, double padding); + +/** + * @brief Create a circular footprint from a given radius + */ +std::vector makeFootprintFromRadius(double radius); + +/** + * @brief Make the footprint from the given string. + * + * Format should be bracketed array of arrays of floats, like so: [[1.0, 2.2], [3.3, 4.2], ...] + * + */ +bool makeFootprintFromString(const std::string& footprint_string, std::vector& footprint); + +/** + * @brief Read the ros-params "footprint" and/or "robot_radius" from + * the given NodeHandle using searchParam() to go up the tree. + */ +std::vector makeFootprintFromParams(std::string& nh); + +/** + * @brief Create the footprint from the given XmlRpcValue. + * + * @param footprint_xmlrpc should be an array of arrays, where the + * top-level array should have 3 or more elements, and the + * sub-arrays should all have exactly 2 elements (x and y + * coordinates). + * + * @param full_param_name this is the full name of the rosparam from + * which the footprint_xmlrpc value came. It is used only for + * reporting errors. */ +std::vector makeFootprintFromXMLRPC(XmlRpcValue& footprint_xmlrpc, + const std::string& full_param_name); + +/** @brief Write the current unpadded_footprint_ to the "footprint" + * parameter of the given NodeHandle so that dynamic_reconfigure + * will see the new value. */ +void writeFootprintToParam(std::string& nh, const std::vector& footprint); + +} // end namespace costmap_2d + +#endif // COSTMAP_2D_FOOTPRINT_H diff --git a/include/costmap_2d/inflation_layer.h b/include/costmap_2d/inflation_layer.h new file mode 100644 index 0000000..ff6c7ff --- /dev/null +++ b/include/costmap_2d/inflation_layer.h @@ -0,0 +1,164 @@ + +#ifndef COSTMAP_2D_INFLATION_LAYER_H_ +#define COSTMAP_2D_INFLATION_LAYER_H_ + +// #include +// #include +// #include +// #include +// #include +// #include + +// namespace costmap_2d +// { +// /** +// * @class CellData +// * @brief Storage for cell information used during obstacle inflation +// */ +// class CellData +// { +// public: +// /** +// * @brief Constructor for a CellData objects +// * @param i The index of the cell in the cost map +// * @param x The x coordinate of the cell in the cost map +// * @param y The y coordinate of the cell in the cost map +// * @param sx The x coordinate of the closest obstacle cell in the costmap +// * @param sy The y coordinate of the closest obstacle cell in the costmap +// * @return +// */ +// CellData(double i, unsigned int x, unsigned int y, unsigned int sx, unsigned int sy) : +// index_(i), x_(x), y_(y), src_x_(sx), src_y_(sy) +// { +// } +// unsigned int index_; +// unsigned int x_, y_; +// unsigned int src_x_, src_y_; +// }; + +// class InflationLayer : public Layer +// { +// public: +// InflationLayer(); + +// virtual ~InflationLayer() +// { +// deleteKernels(); +// if (dsrv_) +// delete dsrv_; +// if (seen_) +// delete[] seen_; +// } + +// virtual void onInitialize(); +// virtual void updateBounds(double robot_x, double robot_y, double robot_yaw, double* min_x, double* min_y, +// double* max_x, double* max_y); +// virtual void updateCosts(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j); +// virtual bool isDiscretized() +// { +// return true; +// } +// virtual void matchSize(); + +// virtual void reset() { onInitialize(); } + +// /** @brief Given a distance, compute a cost. +// * @param distance The distance from an obstacle in cells +// * @return A cost value for the distance */ +// virtual inline unsigned char computeCost(double distance) const +// { +// unsigned char cost = 0; +// if (distance == 0) +// cost = LETHAL_OBSTACLE; +// else if (distance * resolution_ <= inscribed_radius_) +// cost = INSCRIBED_INFLATED_OBSTACLE; +// else +// { +// // make sure cost falls off by Euclidean distance +// double euclidean_distance = distance * resolution_; +// double factor = exp(-1.0 * weight_ * (euclidean_distance - inscribed_radius_)); +// cost = (unsigned char)((INSCRIBED_INFLATED_OBSTACLE - 1) * factor); +// } +// return cost; +// } + +// /** +// * @brief Change the values of the inflation radius parameters +// * @param inflation_radius The new inflation radius +// * @param cost_scaling_factor The new weight +// */ +// void setInflationParameters(double inflation_radius, double cost_scaling_factor); + +// protected: +// virtual void onFootprintChanged(); +// boost::recursive_mutex* inflation_access_; + +// double resolution_; +// double inflation_radius_; +// double inscribed_radius_; +// double weight_; +// bool inflate_unknown_; + +// private: +// /** +// * @brief Lookup pre-computed distances +// * @param mx The x coordinate of the current cell +// * @param my The y coordinate of the current cell +// * @param src_x The x coordinate of the source cell +// * @param src_y The y coordinate of the source cell +// * @return +// */ +// inline double distanceLookup(int mx, int my, int src_x, int src_y) +// { +// unsigned int dx = abs(mx - src_x); +// unsigned int dy = abs(my - src_y); +// return cached_distances_[dx][dy]; +// } + +// /** +// * @brief Lookup pre-computed costs +// * @param mx The x coordinate of the current cell +// * @param my The y coordinate of the current cell +// * @param src_x The x coordinate of the source cell +// * @param src_y The y coordinate of the source cell +// * @return +// */ +// inline unsigned char costLookup(int mx, int my, int src_x, int src_y) +// { +// unsigned int dx = abs(mx - src_x); +// unsigned int dy = abs(my - src_y); +// return cached_costs_[dx][dy]; +// } + +// void computeCaches(); +// void deleteKernels(); +// void inflate_area(int min_i, int min_j, int max_i, int max_j, unsigned char* master_grid); + +// unsigned int cellDistance(double world_dist) +// { +// return layered_costmap_->getCostmap()->cellDistance(world_dist); +// } + +// inline void enqueue(unsigned int index, unsigned int mx, unsigned int my, +// unsigned int src_x, unsigned int src_y); + +// unsigned int cell_inflation_radius_; +// unsigned int cached_cell_inflation_radius_; +// std::map > inflation_cells_; + +// bool* seen_; +// int seen_size_; + +// unsigned char** cached_costs_; +// double** cached_distances_; +// double last_min_x_, last_min_y_, last_max_x_, last_max_y_; + +// dynamic_reconfigure::Server *dsrv_; +// void reconfigureCB(costmap_2d::InflationPluginConfig &config, uint32_t level); + +// bool need_reinflation_; ///< Indicates that the entire costmap should be reinflated next time around. +// }; + +// } // namespace costmap_2d + +#endif // COSTMAP_2D_INFLATION_LAYER_H_ diff --git a/include/costmap_2d/layer.h b/include/costmap_2d/layer.h new file mode 100644 index 0000000..d5940ff --- /dev/null +++ b/include/costmap_2d/layer.h @@ -0,0 +1,151 @@ +/********************************************************************* + * + * Software License Agreement (BSD License) + * + * Copyright (c) 2008, 2013, Willow Garage, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * Author: David V. Lu!! + *********************************************************************/ +#ifndef COSTMAP_2D_LAYER_H_ +#define COSTMAP_2D_LAYER_H_ + +#include +#include +#include +#include "tf2/buffer_core.h" + +namespace costmap_2d +{ +class LayeredCostmap; + +class Layer +{ +public: + Layer(); + + void initialize(LayeredCostmap* parent, std::string name, std::shared_ptr *tf); + + /** + * @brief This is called by the LayeredCostmap to poll this plugin as to how + * much of the costmap it needs to update. Each layer can increase + * the size of this bounds. + * + * For more details, see "Layered Costmaps for Context-Sensitive Navigation", + * by Lu et. Al, IROS 2014. + */ + virtual void updateBounds(double robot_x, double robot_y, double robot_yaw, double* min_x, double* min_y, + double* max_x, double* max_y) {} + + /** + * @brief Actually update the underlying costmap, only within the bounds + * calculated during UpdateBounds(). + */ + virtual void updateCosts(Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j) {} + + /** @brief Stop publishers. */ + virtual void deactivate() {} + + /** @brief Restart publishers if they've been stopped. */ + virtual void activate() {} + + virtual void reset() {} + + virtual ~Layer() {} + + /** + * @brief Check to make sure all the data in the layer is up to date. + * If the layer is not up to date, then it may be unsafe to + * plan using the data from this layer, and the planner may + * need to know. + * + * A layer's current state should be managed by the protected + * variable current_. + * @return Whether the data in the layer is up to date. + */ + bool isCurrent() const + { + return current_; + } + + /** + * @brief getter if the current layer is enabled. + * + * The user may enable/disable a layer though dynamic reconfigure. + * Disabled layers won't receive calls to + * - Layer::updateCosts + * - Layer::updateBounds + * - Layer::isCurrent + * from the LayeredCostmap. + * + * Calls to Layer::activate, Layer::deactivate and Layer::reset won't be + * blocked. + */ + inline bool isEnabled() const noexcept + { + return enabled_; + } + + /** @brief Implement this to make this layer match the size of the parent costmap. */ + virtual void matchSize() {} + + inline const std::string& getName() const noexcept + { + return name_; + } + + /** @brief Convenience function for layered_costmap_->getFootprint(). */ + const std::vector& getFootprint() const; + + /** @brief LayeredCostmap calls this whenever the footprint there + * changes (via LayeredCostmap::setFootprint()). Override to be + * notified of changes to the robot's footprint. */ + virtual void onFootprintChanged() {} + +protected: + /** @brief This is called at the end of initialize(). Override to + * implement subclass-specific initialization. + * + * tf_, name_, and layered_costmap_ will all be set already when this is called. */ + virtual void onInitialize() {} + + LayeredCostmap* layered_costmap_; + bool current_; + bool enabled_; + std::string name_; + std::shared_ptr *tf_; + +private: + std::vector footprint_spec_; +}; + +} // namespace costmap_2d + +#endif // COSTMAP_2D_LAYER_H_ diff --git a/include/costmap_2d/layered_costmap.h b/include/costmap_2d/layered_costmap.h index e69de29..6227106 100644 --- a/include/costmap_2d/layered_costmap.h +++ b/include/costmap_2d/layered_costmap.h @@ -0,0 +1,193 @@ +#ifndef COSTMAP_2D_LAYERED_COSTMAP_H_ +#define COSTMAP_2D_LAYERED_COSTMAP_H_ + +#include // Chứa các hằng số giá trị chi phí (ví dụ: FREE_SPACE, LETHAL_OBSTACLE, NO_INFORMATION) +#include // Lớp cơ sở cho các lớp (layer) con: static layer, obstacle layer, inflation layer... +#include // Định nghĩa lớp Costmap2D (bản đồ 2D cơ bản) +#include +#include + +namespace costmap_2d +{ + +class Layer; // Khai báo trước để dùng trong vector plugin + +/** + * @class LayeredCostmap + * @brief Lớp này quản lý nhiều "layer" (tầng bản đồ) khác nhau và kết hợp chúng thành một bản đồ chi phí tổng hợp. + * Mỗi layer có thể chứa thông tin khác nhau: chướng ngại vật, vùng lạm phát, vùng cấm, v.v. + */ +class LayeredCostmap +{ +public: + /** + * @brief Hàm khởi tạo LayeredCostmap. + * @param global_frame: Tên frame toàn cục (ví dụ: "map" hoặc "odom"). + * @param rolling_window: Nếu true, bản đồ sẽ "trượt" theo robot (rolling window). + * @param track_unknown: Nếu true, sẽ lưu trữ vùng chưa biết (NO_INFORMATION). + */ + LayeredCostmap(std::string global_frame, bool rolling_window, bool track_unknown); + + /** + * @brief Hàm huỷ lớp LayeredCostmap. + */ + ~LayeredCostmap(); + + /** + * @brief Cập nhật bản đồ tổng hợp từ tất cả các layer. + * @param robot_x, robot_y, robot_yaw: vị trí và hướng hiện tại của robot. + * @note Hàm này gọi updateBounds() và updateCosts() trên từng layer. + */ + void updateMap(double robot_x, double robot_y, double robot_yaw); + + /// @brief Trả về frame toàn cục (ví dụ "map"). + inline const std::string& getGlobalFrameID() const noexcept + { + return global_frame_; + } + + /** + * @brief Thay đổi kích thước bản đồ (số ô, độ phân giải, gốc). + * @param size_x, size_y: kích thước theo ô (cells). + * @param resolution: độ phân giải (mỗi ô = bao nhiêu mét). + * @param origin_x, origin_y: toạ độ gốc của bản đồ. + * @param size_locked: nếu true, không cho phép thay đổi kích thước sau này. + */ + void resizeMap(unsigned int size_x, unsigned int size_y, double resolution, double origin_x, double origin_y, + bool size_locked = false); + + /** + * @brief Lấy vùng bản đồ bị thay đổi gần nhất sau lần cập nhật gần nhất. + * @param [out] minx, miny, maxx, maxy: toạ độ của vùng được cập nhật. + */ + void getUpdatedBounds(double& minx, double& miny, double& maxx, double& maxy) + { + minx = minx_; + miny = miny_; + maxx = maxx_; + maxy = maxy_; + } + + /** + * @brief Kiểm tra xem tất cả các layer hiện tại có dữ liệu mới nhất (current) hay không. + * @return true nếu tất cả layer đều cập nhật. + */ + bool isCurrent(); + + /** + * @brief Trả về con trỏ đến bản đồ Costmap2D cơ sở (master map). + */ + Costmap2D* getCostmap() + { + return &costmap_; + } + + /** + * @brief Kiểm tra xem bản đồ có phải kiểu "rolling window" không. + */ + bool isRolling() + { + return rolling_window_; + } + + /** + * @brief Kiểm tra xem bản đồ có đang lưu trữ vùng "chưa biết" không (NO_INFORMATION). + */ + bool isTrackingUnknown() + { + return costmap_.getDefaultValue() == costmap_2d::NO_INFORMATION; + } + + /** + * @brief Trả về danh sách các plugin (layer) đã được nạp. + * @return vector các shared_ptr. + */ + std::vector >* getPlugins() + { + return &plugins_; + } + + /** + * @brief Thêm một plugin (layer) mới vào bản đồ. + * @param plugin: con trỏ thông minh đến lớp layer. + */ + void addPlugin(boost::shared_ptr plugin) + { + plugins_.push_back(plugin); + } + + /** + * @brief Kiểm tra xem bản đồ có bị khoá kích thước không. + */ + bool isSizeLocked() + { + return size_locked_; + } + + /** + * @brief Lấy giới hạn vùng bản đồ được cập nhật trong lần gọi update gần nhất. + * @param [out] x0, xn, y0, yn: chỉ số ô (cells) bắt đầu và kết thúc. + */ + void getBounds(unsigned int* x0, unsigned int* xn, unsigned int* y0, unsigned int* yn) + { + *x0 = bx0_; + *xn = bxn_; + *y0 = by0_; + *yn = byn_; + } + + /** + * @brief Kiểm tra xem lớp LayeredCostmap đã được khởi tạo hoàn chỉnh chưa. + */ + bool isInitialized() + { + return initialized_; + } + + /** + * @brief Cập nhật footprint (hình dạng chiếm chỗ của robot). + * Đồng thời tính lại bán kính bao quanh và nội tiếp. + * Gọi hàm onFootprintChanged() của tất cả layer. + * @param footprint_spec: vector các điểm (geometry_msgs::Point) mô tả đa giác footprint. + */ + void setFootprint(const std::vector& footprint_spec); + + /** + * @brief Trả về footprint hiện tại của robot. + */ + const std::vector& getFootprint() { return footprint_; } + + /** + * @brief Bán kính đường tròn bao ngoài (circumscribed radius): + * bán kính nhỏ nhất của đường tròn chứa toàn bộ robot. + */ + double getCircumscribedRadius() { return circumscribed_radius_; } + + /** + * @brief Bán kính đường tròn nội tiếp (inscribed radius): + * bán kính lớn nhất của đường tròn nằm hoàn toàn bên trong footprint robot. + */ + double getInscribedRadius() { return inscribed_radius_; } + +private: + Costmap2D costmap_; ///< Bản đồ 2D chính (lưu ma trận chi phí tổng hợp) + std::string global_frame_; ///< Frame toàn cục (thường là "map" hoặc "odom") + + bool rolling_window_; ///< Nếu true, bản đồ sẽ di chuyển theo robot (bản đồ trượt) + + bool current_; ///< Cờ đánh dấu tất cả các layer có dữ liệu mới nhất hay không + double minx_, miny_, maxx_, maxy_; ///< Giới hạn vùng bản đồ được cập nhật (tọa độ thế giới) + unsigned int bx0_, bxn_, by0_, byn_; ///< Giới hạn vùng bản đồ được cập nhật (tọa độ lưới) + + std::vector > plugins_; ///< Danh sách các layer plugin (ví dụ: StaticLayer, ObstacleLayer, InflationLayer) + + bool initialized_; ///< Đã được khởi tạo hoàn toàn hay chưa + bool size_locked_; ///< Có cho phép thay đổi kích thước bản đồ sau này không + + double circumscribed_radius_, inscribed_radius_; ///< Hai bán kính của footprint robot (bao ngoài và nội tiếp) + std::vector footprint_; ///< Đa giác mô tả footprint robot +}; + +} // namespace costmap_2d + +#endif // COSTMAP_2D_LAYERED_COSTMAP_H_ diff --git a/include/costmap_2d/msg.h b/include/costmap_2d/msg.h new file mode 100644 index 0000000..1987718 --- /dev/null +++ b/include/costmap_2d/msg.h @@ -0,0 +1,66 @@ +#ifndef COSTMAP_2D_COST_VALUES_H_MSG +#define COSTMAP_2D_COST_VALUES_H_MSG +/** Provides a mapping for often used cost values */ +#include +namespace costmap_2d +{ + struct Point + { + double x; + double y; + double z; + }; + + struct Point32 + { + float x; + float y; + float z; + }; + + struct Polygon + { + std::vector points; + }; + + struct PolygonStamped + { + // std_msgs/Header header; // Ignored for simplicity + Polygon polygon; + }; + + struct XmlRpcValue + { + std::vector points; + }; + + struct PointField + { + uint8_t INT8=1; + uint8_t UINT8=2; + uint8_t INT16=3; + uint8_t UINT16=4; + uint8_t INT32=5; + uint8_t UINT32=6; + uint8_t FLOAT32=7; + uint8_t FLOAT64=8; + std::string name; + uint32_t offset; + uint8_t datatype; + uint32_t count; + }; + + struct PointCloud2 + { + uint32_t height; + uint32_t width; + std::vector fields; + bool is_bigendian; + uint32_t point_step; + uint32_t row_step; + std::vector data; + bool is_dense; + }; + +} +#endif // COSTMAP_2D_COST_VALUES_H_MSG diff --git a/include/costmap_2d/observation_buffer.h b/include/costmap_2d/observation_buffer.h new file mode 100644 index 0000000..14d7165 --- /dev/null +++ b/include/costmap_2d/observation_buffer.h @@ -0,0 +1,154 @@ +/********************************************************************* + * + * Software License Agreement (BSD License) + * + * Copyright (c) 2008, 2013, Willow Garage, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * Author: Eitan Marder-Eppstein + *********************************************************************/ +#ifndef COSTMAP_2D_OBSERVATION_BUFFER_H_ +#define COSTMAP_2D_OBSERVATION_BUFFER_H_ + +#include +#include +#include +#include +#include +#include + +#include + +// Thread support +#include + +namespace costmap_2d +{ +/** + * @class ObservationBuffer + * @brief Takes in point clouds from sensors, transforms them to the desired frame, and stores them + */ +class ObservationBuffer +{ +public: + /** + * @brief Constructs an observation buffer + * @param topic_name The topic of the observations, used as an identifier for error and warning messages + * @param observation_keep_time Defines the persistence of observations in seconds, 0 means only keep the latest + * @param expected_update_rate How often this buffer is expected to be updated, 0 means there is no limit + * @param min_obstacle_height The minimum height of a hitpoint to be considered legal + * @param max_obstacle_height The minimum height of a hitpoint to be considered legal + * @param obstacle_range The range to which the sensor should be trusted for inserting obstacles + * @param raytrace_range The range to which the sensor should be trusted for raytracing to clear out space + * @param tf2_buffer A reference to a tf2 Buffer + * @param global_frame The frame to transform PointClouds into + * @param sensor_frame The frame of the origin of the sensor, can be left blank to be read from the messages + * @param tf_tolerance The amount of time to wait for a transform to be available when setting a new global frame + */ + ObservationBuffer(std::string topic_name, double observation_keep_time, double expected_update_rate, + double min_obstacle_height, double max_obstacle_height, double obstacle_range, + double raytrace_range, tf2_ros::Buffer& tf2_buffer, std::string global_frame, + std::string sensor_frame, double tf_tolerance); + + /** + * @brief Destructor... cleans up + */ + ~ObservationBuffer(); + + /** + * @brief Sets the global frame of an observation buffer. This will + * transform all the currently cached observations to the new global + * frame + * @param new_global_frame The name of the new global frame. + * @return True if the operation succeeds, false otherwise + */ + bool setGlobalFrame(const std::string new_global_frame); + + /** + * @brief Transforms a PointCloud to the global frame and buffers it + * Note: The burden is on the user to make sure the transform is available... ie they should use a MessageNotifier + * @param cloud The cloud to be buffered + */ + void bufferCloud(const sensor_msgs::PointCloud2& cloud); + + /** + * @brief Pushes copies of all current observations onto the end of the vector passed in + * @param observations The vector to be filled + */ + void getObservations(std::vector& observations); + + /** + * @brief Check if the observation buffer is being update at its expected rate + * @return True if it is being updated at the expected rate, false otherwise + */ + bool isCurrent() const; + + /** + * @brief Lock the observation buffer + */ + inline void lock() + { + lock_.lock(); + } + + /** + * @brief Lock the observation buffer + */ + inline void unlock() + { + lock_.unlock(); + } + + /** + * @brief Reset last updated timestamp + */ + void resetLastUpdated(); + +private: + /** + * @brief Removes any stale observations from the buffer list + */ + void purgeStaleObservations(); + + tf2_ros::Buffer& tf2_buffer_; + const ros::Duration observation_keep_time_; + const ros::Duration expected_update_rate_; + ros::Time last_updated_; + std::string global_frame_; + std::string sensor_frame_; + std::list observation_list_; + std::string topic_name_; + double min_obstacle_height_, max_obstacle_height_; + boost::recursive_mutex lock_; ///< @brief A lock for accessing data in callbacks safely + double obstacle_range_, raytrace_range_; + double tf_tolerance_; +}; +} // namespace costmap_2d +#endif // COSTMAP_2D_OBSERVATION_BUFFER_H_ diff --git a/include/costmap_2d/static_layer.h b/include/costmap_2d/static_layer.h new file mode 100644 index 0000000..893431d --- /dev/null +++ b/include/costmap_2d/static_layer.h @@ -0,0 +1,101 @@ +/********************************************************************* + * + * Software License Agreement (BSD License) + * + * Copyright (c) 2008, 2013, Willow Garage, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * Author: Eitan Marder-Eppstein + * David V. Lu!! + *********************************************************************/ +#ifndef COSTMAP_2D_STATIC_LAYER_H_ +#define COSTMAP_2D_STATIC_LAYER_H_ + +#include +#include +#include +#include +#include +#include +#include +#include + +namespace costmap_2d +{ + +class StaticLayer : public CostmapLayer +{ +public: + StaticLayer(); + virtual ~StaticLayer(); + virtual void onInitialize(); + virtual void activate(); + virtual void deactivate(); + virtual void reset(); + + virtual void updateBounds(double robot_x, double robot_y, double robot_yaw, double* min_x, double* min_y, + double* max_x, double* max_y); + virtual void updateCosts(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j); + + virtual void matchSize(); +protected: + virtual unsigned char interpretValue(unsigned char value); + virtual void incomingMap(const nav_msgs::OccupancyGridConstPtr& new_map); + virtual void incomingUpdate(const map_msgs::OccupancyGridUpdateConstPtr& update); + unsigned char* threshold_; + std::string base_frame_id_; + std::string global_frame_; ///< @brief The global frame for the costmap + std::string map_frame_; /// @brief frame that map is located in + std::string map_topic_; // Hiep thêm vào mục đich phân biết zones + bool subscribe_to_updates_; + bool map_received_; + bool has_updated_data_; + unsigned int x_, y_, width_, height_; + bool track_unknown_space_; + bool use_maximum_; + bool first_map_only_; ///< @brief Store the first static map and reuse it on reinitializing + bool trinary_costmap_; + ros::Subscriber map_sub_, map_update_sub_; + unsigned char lethal_threshold_, unknown_cost_value_; + +private: + /** + * @brief Callback to update the costmap's map from the map_server + * @param new_map The map to put into the costmap. The origin of the new + * map along with its size will determine what parts of the costmap's + * static map are overwritten. + */ + void reconfigureCB(costmap_2d::GenericPluginConfig &config, uint32_t level); + dynamic_reconfigure::Server *dsrv_; +}; + +} // namespace costmap_2d + +#endif // COSTMAP_2D_STATIC_LAYER_H_ diff --git a/plugins/critical_layer.cpp b/plugins/critical_layer.cpp new file mode 100644 index 0000000..d695165 --- /dev/null +++ b/plugins/critical_layer.cpp @@ -0,0 +1,38 @@ +#include +#include +#include "shared.h" + +PLUGINLIB_EXPORT_CLASS(costmap_2d::CriticalLayer, costmap_2d::Layer) + +using costmap_2d::NO_INFORMATION; +using costmap_2d::LETHAL_OBSTACLE; +using costmap_2d::CRITICAL_SPACE; + +namespace costmap_2d +{ + +CriticalLayer::CriticalLayer(){} +CriticalLayer::~CriticalLayer(){} + +unsigned char CriticalLayer::interpretValue(unsigned char value) +{ + // check if the static value is above the unknown or lethal thresholds + if(value >= *this->threshold_) + return CRITICAL_SPACE; + else + return NO_INFORMATION; +} + +void CriticalLayer::updateCosts(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j) +{ + if (!map_received_) + return; + + // if not rolling, the layered costmap (master_grid) has same coordinates as this layer + if (!use_maximum_) + updateWithOverwrite(master_grid, min_i, min_j, max_i, max_j); + else + updateWithMax(master_grid, min_i, min_j, max_i, max_j); + +} +} \ No newline at end of file diff --git a/plugins/directional_layer.cpp b/plugins/directional_layer.cpp new file mode 100644 index 0000000..be4bd40 --- /dev/null +++ b/plugins/directional_layer.cpp @@ -0,0 +1,412 @@ +#include +#include +#include +#include +#include +#include + +PLUGINLIB_EXPORT_CLASS(costmap_2d::DirectionalLayer, costmap_2d::Layer) + +#define MAP_IDX(sx, i, j) ((sx) * (j) + (i)) + +using costmap_2d::CRITICAL_SPACE; +using costmap_2d::LETHAL_OBSTACLE; +using costmap_2d::NO_INFORMATION; + +namespace costmap_2d +{ + DirectionalLayer::DirectionalLayer() + { + ros::NodeHandle nh("~/" + name_); + lane_mask_pub_ = nh.advertise("/direction_zones/lanes", 1); + } + DirectionalLayer::~DirectionalLayer() {} + + bool DirectionalLayer::laneFilter(const std::vector plan) + { + if (directional_areas_.empty()) + throw "Has no map data"; + nav_msgs::Path path; + path.header.stamp = ros::Time::now(); + path.header.frame_id = map_frame_; + path.poses = plan; + return this->laneFilter(directional_areas_, path); + } + + void DirectionalLayer::incomingMap(const nav_msgs::OccupancyGridConstPtr &new_map) + { + unsigned int size_x = new_map->info.width, size_y = new_map->info.height; + + ROS_DEBUG("Received a %d X %d map at %f m/pix", size_x / 2, size_y / 2, new_map->info.resolution); + + // resize costmap if size, resolution or origin do not match + Costmap2D *master = layered_costmap_->getCostmap(); + if (!layered_costmap_->isRolling() && + (master->getSizeInCellsX() != size_x / 2 || + master->getSizeInCellsY() != size_y / 2 || + master->getResolution() != new_map->info.resolution || + master->getOriginX() != new_map->info.origin.position.x || + master->getOriginY() != new_map->info.origin.position.y)) + { + // Update the size of the layered costmap (and all layers, including this one) + ROS_INFO("Resizing costmap to %d X %d at %f m/pix", size_x / 2, size_y / 2, new_map->info.resolution); + layered_costmap_->resizeMap(size_x / 2, size_y / 2, new_map->info.resolution, new_map->info.origin.position.x, + new_map->info.origin.position.y, + true /* set size_locked to true, prevents reconfigureCb from overriding map size*/); + } + else if (size_x_ != size_x / 2 || size_y_ != size_y / 2 || + resolution_ != new_map->info.resolution || + origin_x_ != new_map->info.origin.position.x || + origin_y_ != new_map->info.origin.position.y) + { + // only update the size of the costmap stored locally in this layer + ROS_INFO("Resizing static layer to %d X %d at %f m/pix", size_x / 2, size_y / 2, new_map->info.resolution); + resizeMap(size_x / 2, size_y / 2, new_map->info.resolution, + new_map->info.origin.position.x, new_map->info.origin.position.y); + } + unsigned char values[4]; + directional_areas_.clear(); + directional_areas_.resize(size_x / 2 * size_y / 2); + // initialize the costmap with static data + for (unsigned int iy = 0; iy < size_y; iy += 2) + { + for (unsigned int ix = 0; ix < size_x; ix += 2) + { + values[0] = new_map->data[MAP_IDX(size_x, ix, iy)]; + values[1] = new_map->data[MAP_IDX(size_x, ix + 1, iy)]; + values[2] = new_map->data[MAP_IDX(size_x, ix, iy + 1)]; + values[3] = new_map->data[MAP_IDX(size_x, ix + 1, iy + 1)]; + uint32_t color_avg = (uint32_t)(values[0] | values[1] << 8u | values[2] << 16u | values[3] << 24u); + int index = getIndex(ix / 2, iy / 2); + directional_areas_[index][0] = (uint16_t)(color_avg & 0xfff); + directional_areas_[index][1] = (uint16_t)(color_avg >> 12u); + costmap_[index] = costmap_2d::NO_INFORMATION; + } + } + map_frame_ = new_map->header.frame_id; + + // we have a new map, update full size of map + x_ = y_ = 0; + width_ = size_x_; + height_ = size_y_; + map_received_ = true; + has_updated_data_ = true; + + new_map_.header = new_map->header; + new_map_.header.stamp = ros::Time::now(); + new_map_.info = new_map->info; + new_map_.info.width = width_; + new_map_.info.height = height_; + + // shutdown the map subscrber if firt_map_only_ flag is on + if (first_map_only_) + { + ROS_INFO("Shutting down the map subscriber. first_map_only flag is on"); + map_sub_.shutdown(); + } + } + + bool DirectionalLayer::laneFilter(std::vector> new_map, const nav_msgs::Path path) + { + boost::unique_lock lock(*layered_costmap_->getCostmap()->getMutex()); + if (new_map.empty()) + return false; + + std::vector> X_List, Y_List; + std::vector Yaw_list; + + const geometry_msgs::PoseStamped &e = path.poses.back(); + + bool get_success = getRobotPose(pose_x_, pose_y_, pose_yaw_); + if(!get_success) return false; + for (auto it = path.poses.begin(); it != path.poses.end(); ++it) + { + const geometry_msgs::PoseStamped &p = *it; // Get the pose from the iterator + unsigned int mx, my; + if (!worldToMap(p.pose.position.x, p.pose.position.y, mx, my)) + { + ROS_ERROR("ERROR: trying to set a start cell %f %f that is outside of map\n", p.pose.position.x, p.pose.position.y); + return false; + } + // Convert to yaw + tf::Quaternion quaternion; + tf::quaternionMsgToTF(p.pose.orientation, quaternion); + double theta = tf::getYaw(quaternion); + unsigned char value = laneFilter(mx, my, theta); + if (get_success) + { + if ( + (!inSkipErea(pose_x_, pose_y_, p.pose.position.x, p.pose.position.y, distance_skip_) & + !inSkipErea(p.pose.position.x, p.pose.position.y, e.pose.position.x, e.pose.position.y, distance_skip_)) + || p == path.poses.back() + ) + { + if (value == costmap_2d::INSCRIBED_INFLATED_OBSTACLE || value == costmap_2d::LETHAL_OBSTACLE) + { + std::pair x_val(mx, p.pose.position.x); + std::pair y_val(my, p.pose.position.y); + X_List.push_back(x_val); + Y_List.push_back(y_val); + Yaw_list.push_back(theta); + // costmap_[getIndex(mx, my)] = value; + } + } + } + } + if (!Yaw_list.empty()) + { + laneFilter(X_List, Y_List, Yaw_list); + nav_msgs::OccupancyGrid lanes; + convertToMap(costmap_, lanes, 0.65, 0.196); + lane_mask_pub_.publish(lanes); + return false; + } + return true; + + } + + void DirectionalLayer::convertToMap(unsigned char *costmap, nav_msgs::OccupancyGrid &dir_map, double occ_th, double free_th) + { + dir_map.header = new_map_.header; + dir_map.header.stamp = ros::Time::now(); + dir_map.info = new_map_.info; + int size_costmap = new_map_.info.width * new_map_.info.height; + dir_map.data.resize(size_costmap); + for (int i = 0; i < size_costmap; i++) + { + int8_t value; + if (costmap[i] == costmap_2d::NO_INFORMATION) + { + value = -1; + } + else + { + double occ = (costmap[i]) / 255.0; + if (occ > occ_th) + value = +100; + else if (occ < free_th) + value = 0; + else + { + double ratio = (occ - free_th) / (occ_th - free_th); + value = 1 + 98 * ratio; + } + } + dir_map.data[i] = value; + } + } + + unsigned char DirectionalLayer::laneFilter(unsigned int x, unsigned int y, double yaw_robot) + { + double yaw_lane; + unsigned char cost = costmap_2d::NO_INFORMATION; + + int index = getIndex(x, y); + for (auto &lane : directional_areas_[index]) + { + if (lane > 359) + { + cost = std::min(cost, costmap_2d::NO_INFORMATION); + } + else + { + double yaw_lane = (double)lane / 180 * M_PI; + if (0.4 <= cos(yaw_robot - yaw_lane) && cos(yaw_robot - yaw_lane) <= 1.0) + cost = std::min(cost, costmap_2d::FREE_SPACE); + else if (-1.0 <= cos(yaw_robot - yaw_lane) && cos(yaw_robot - yaw_lane) <= -0.4) + cost = std::min(cost, costmap_2d::LETHAL_OBSTACLE); + else + cost = std::min(cost, costmap_2d::NO_INFORMATION); + } + } + return cost; + } + + void DirectionalLayer::laneFilter(std::vector> x, + std::vector> y, + std::vector yaw_robot) + { + if(x.empty() || y.empty() || yaw_robot.empty()) + return; + + unsigned int x_min, y_min, x_max, y_max; + double x_min_w, y_min_w, x_max_w, y_max_w; + + x_min = x.front().first; y_min = y.front().first; + x_max = x.front().first; y_max = y.front().first; + x_min_w = x.front().second; y_min_w = y.front().second; + x_max_w = x.front().second; y_max_w = y.front().second; + for (int i = 1; i < yaw_robot.size(); i++) + { + if(inSkipErea(pose_x_, pose_y_, x[i].second, y[i].second, distance_skip_)) + continue; + x_min = std::min(x_min, x[i].first); + y_min = std::min(y_min, y[i].first); + x_max = std::max(x_max, x[i].first); + y_max = std::max(y_max, y[i].first); + + x_min_w = std::min(x_min_w, x[i].second); + y_min_w = std::min(y_min_w, y[i].second); + x_max_w = std::max(x_max_w, x[i].second); + y_max_w = std::max(y_max_w, y[i].second); + + } + // ROS_INFO("%d %d %d %d", x_min, y_min, x_max, y_max); + // ROS_INFO("%f %f %f %f", x_min_w, y_min_w, x_max_w, y_max_w); + for (int i = 0; i < yaw_robot.size(); i++) + { + if(inSkipErea(pose_x_, pose_y_, x[i].second, y[i].second, distance_skip_)) + continue; + + double yaw_rad = (double)yaw_robot[i] / 180 * M_PI; + if (fabs(cos(yaw_rad)) > fabs(sin(yaw_rad))) + { + int x_ = x[i].first; + // Dưới lên trên + for (int j = y[i].first; j <= y_max; j++) + { + int y_ = j; + if (costmap_[getIndex(x_, y_)] == costmap_2d::LETHAL_OBSTACLE) + continue; + unsigned char value = laneFilter(x_, y_, yaw_robot[i]); + if (value >= costmap_2d::INSCRIBED_INFLATED_OBSTACLE && value != costmap_2d::NO_INFORMATION) + costmap_[getIndex(x_, y_)] = value; + else + break; + } + // Trên xuống dưới + for (int k = y[i].first; k >= y_min; k--) + { + int y_ = k; + if (costmap_[getIndex(x_, y_)] == costmap_2d::LETHAL_OBSTACLE) + continue; + unsigned char value = laneFilter(x_, y_, yaw_robot[i]); + if (value >= costmap_2d::INSCRIBED_INFLATED_OBSTACLE && value != costmap_2d::NO_INFORMATION) + costmap_[getIndex(x_, y_)] = value; + else + break; + } + + int y_ = y[i].first; + // Phải qua trái + for (int j = x[i].first; j < layered_costmap_->getCostmap()->getSizeInCellsX(); j++) + { + int x_ = j; + if (costmap_[getIndex(x_, y_)] == costmap_2d::LETHAL_OBSTACLE) + continue; + unsigned char value = laneFilter(x_, y_, yaw_robot[i]); + if (value >= costmap_2d::INSCRIBED_INFLATED_OBSTACLE && value != costmap_2d::NO_INFORMATION) + costmap_[getIndex(x_, y_)] = value; + else + break; + } + // Trái qua phải + for (int k = x[i].first; k >= 0; k--) + { + int x_ = k; + if (costmap_[getIndex(x_, y_)] == costmap_2d::LETHAL_OBSTACLE) + continue; + unsigned char value = laneFilter(x_, y_, yaw_robot[i]); + if (value >= costmap_2d::INSCRIBED_INFLATED_OBSTACLE && value != costmap_2d::NO_INFORMATION) + costmap_[getIndex(x_, y_)] = value; + else + break; + } + } + else if(fabs(cos(yaw_rad)) < fabs(sin(yaw_rad))) + { + int y_ = y[i].first; + // Phải qua trái + for (int j = x[i].first; j <= x_max; j++) + { + int x_ = j; + if (costmap_[getIndex(x_, y_)] == costmap_2d::LETHAL_OBSTACLE) + continue; + unsigned char value = laneFilter(x_, y_, yaw_robot[i]); + if (value >= costmap_2d::INSCRIBED_INFLATED_OBSTACLE && value != costmap_2d::NO_INFORMATION) + costmap_[getIndex(x_, y_)] = value; + else + break; + } + // Trái qua phải + for (int k = x[i].first; k >= x_min; k--) + { + int x_ = k; + if (costmap_[getIndex(x_, y_)] == costmap_2d::LETHAL_OBSTACLE) + continue; + unsigned char value = laneFilter(x_, y_, yaw_robot[i]); + if (value >= costmap_2d::INSCRIBED_INFLATED_OBSTACLE && value != costmap_2d::NO_INFORMATION) + costmap_[getIndex(x_, y_)] = value; + else + break; + } + + int x_ = x[i].first; + // Dưới lên trên + for (int j = y[i].first; j < layered_costmap_->getCostmap()->getSizeInCellsY(); j++) + { + int y_ = j; + if (costmap_[getIndex(x_, y_)] == costmap_2d::LETHAL_OBSTACLE) + continue; + unsigned char value = laneFilter(x_, y_, yaw_robot[i]); + if (value >= costmap_2d::INSCRIBED_INFLATED_OBSTACLE && value != costmap_2d::NO_INFORMATION) + costmap_[getIndex(x_, y_)] = value; + else + break; + } + // Trên xuống dưới + for (int k = y[i].first; k >= 0; k--) + { + int y_ = k; + if (costmap_[getIndex(x_, y_)] == costmap_2d::LETHAL_OBSTACLE) + continue; + unsigned char value = laneFilter(x_, y_, yaw_robot[i]); + if (value >= costmap_2d::INSCRIBED_INFLATED_OBSTACLE && value != costmap_2d::NO_INFORMATION) + costmap_[getIndex(x_, y_)] = value; + else + break; + } + } + } + } + + void DirectionalLayer::resetMap() + { + unsigned int size_x = layered_costmap_->getCostmap()->getSizeInCellsX(); + unsigned int size_y = layered_costmap_->getCostmap()->getSizeInCellsY(); + for (unsigned int iy = 0; iy < size_y; iy++) + { + for (unsigned int ix = 0; ix < size_x; ix++) + { + int index = getIndex(ix, iy); + costmap_[index] = costmap_2d::NO_INFORMATION; + } + } + } + + bool DirectionalLayer::getRobotPose(double &x, double &y, double &yaw) + { + tf::StampedTransform transform; + try + { + listener_.lookupTransform(map_frame_, base_frame_id_, ros::Time(0), transform); + } + catch (tf::TransformException &ex) + { + ROS_ERROR("%s", ex.what()); + return false; + } + x = transform.getOrigin().x(); + y = transform.getOrigin().y(); + // Extract the rotation as a quaternion from the transform + tf::Quaternion rotation = transform.getRotation(); + // Convert the quaternion to a yaw angle (in radians) + yaw = tf::getYaw(rotation); + return true; + } + + bool DirectionalLayer::inSkipErea(double start_x, double start_y, double end_x, double end_y, double skip_distance) + { + return fabs(hypot(start_x - end_x, start_y - end_y)) <= skip_distance; + } +} \ No newline at end of file diff --git a/plugins/inflation_layer.cpp b/plugins/inflation_layer.cpp new file mode 100644 index 0000000..e69de29 diff --git a/plugins/obstacle_layer.cpp b/plugins/obstacle_layer.cpp new file mode 100644 index 0000000..1f713a3 --- /dev/null +++ b/plugins/obstacle_layer.cpp @@ -0,0 +1,623 @@ +/********************************************************************* + * + * Software License Agreement (BSD License) + * + * Copyright (c) 2008, 2013, Willow Garage, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * Author: Eitan Marder-Eppstein + * David V. Lu!! + *********************************************************************/ +#include +#include +#include + +#include +#include + +PLUGINLIB_EXPORT_CLASS(costmap_2d::ObstacleLayer, costmap_2d::Layer) + +using costmap_2d::NO_INFORMATION; +using costmap_2d::LETHAL_OBSTACLE; +using costmap_2d::FREE_SPACE; + +using costmap_2d::ObservationBuffer; +using costmap_2d::Observation; + +namespace costmap_2d +{ + +void ObstacleLayer::onInitialize() +{ + ros::NodeHandle nh("~/" + name_), g_nh; + rolling_window_ = layered_costmap_->isRolling(); + + bool track_unknown_space; + nh.param("track_unknown_space", track_unknown_space, layered_costmap_->isTrackingUnknown()); + if (track_unknown_space) + default_value_ = NO_INFORMATION; + else + default_value_ = FREE_SPACE; + + ObstacleLayer::matchSize(); + current_ = true; + + global_frame_ = layered_costmap_->getGlobalFrameID(); + double transform_tolerance; + nh.param("transform_tolerance", transform_tolerance, 0.2); + + std::string topics_string; + // get the topics that we'll subscribe to from the parameter server + nh.param("observation_sources", topics_string, std::string("")); + ROS_INFO(" Subscribed to Topics: %s", topics_string.c_str()); + + // now we need to split the topics based on whitespace which we can use a stringstream for + std::stringstream ss(topics_string); + + std::string source; + while (ss >> source) + { + ros::NodeHandle source_node(nh, source); + + // get the parameters for the specific topic + double observation_keep_time, expected_update_rate, min_obstacle_height, max_obstacle_height; + std::string topic, sensor_frame, data_type; + bool inf_is_valid, clearing, marking; + + source_node.param("topic", topic, source); + source_node.param("sensor_frame", sensor_frame, std::string("")); + source_node.param("observation_persistence", observation_keep_time, 0.0); + source_node.param("expected_update_rate", expected_update_rate, 0.0); + source_node.param("data_type", data_type, std::string("PointCloud")); + source_node.param("min_obstacle_height", min_obstacle_height, 0.0); + source_node.param("max_obstacle_height", max_obstacle_height, 2.0); + source_node.param("inf_is_valid", inf_is_valid, false); + source_node.param("clearing", clearing, false); + source_node.param("marking", marking, true); + + if (!(data_type == "PointCloud2" || data_type == "PointCloud" || data_type == "LaserScan")) + { + ROS_FATAL("Only topics that use point clouds or laser scans are currently supported"); + throw std::runtime_error("Only topics that use point clouds or laser scans are currently supported"); + } + + std::string raytrace_range_param_name, obstacle_range_param_name; + + // get the obstacle range for the sensor + double obstacle_range = 2.5; + if (source_node.searchParam("obstacle_range", obstacle_range_param_name)) + { + source_node.getParam(obstacle_range_param_name, obstacle_range); + } + + // get the raytrace range for the sensor + double raytrace_range = 3.0; + if (source_node.searchParam("raytrace_range", raytrace_range_param_name)) + { + source_node.getParam(raytrace_range_param_name, raytrace_range); + } + + ROS_DEBUG("Creating an observation buffer for source %s, topic %s, frame %s", source.c_str(), topic.c_str(), + sensor_frame.c_str()); + + // create an observation buffer + observation_buffers_.push_back( + boost::shared_ptr < ObservationBuffer + > (new ObservationBuffer(topic, observation_keep_time, expected_update_rate, min_obstacle_height, + max_obstacle_height, obstacle_range, raytrace_range, *tf_, global_frame_, + sensor_frame, transform_tolerance))); + + // check if we'll add this buffer to our marking observation buffers + if (marking) + marking_buffers_.push_back(observation_buffers_.back()); + + // check if we'll also add this buffer to our clearing observation buffers + if (clearing) + clearing_buffers_.push_back(observation_buffers_.back()); + + ROS_DEBUG( + "Created an observation buffer for source %s, topic %s, global frame: %s, " + "expected update rate: %.2f, observation persistence: %.2f", + source.c_str(), topic.c_str(), global_frame_.c_str(), expected_update_rate, observation_keep_time); + + // create a callback for the topic + if (data_type == "LaserScan") + { + boost::shared_ptr < message_filters::Subscriber + > sub(new message_filters::Subscriber(g_nh, topic, 50)); + + boost::shared_ptr > filter( + new tf2_ros::MessageFilter(*sub, *tf_, global_frame_, 50, g_nh)); + + if (inf_is_valid) + { + filter->registerCallback([this,buffer=observation_buffers_.back()](auto& msg){ laserScanValidInfCallback(msg, buffer); }); + } + else + { + filter->registerCallback([this,buffer=observation_buffers_.back()](auto& msg){ laserScanCallback(msg, buffer); }); + } + + observation_subscribers_.push_back(sub); + observation_notifiers_.push_back(filter); + + observation_notifiers_.back()->setTolerance(ros::Duration(0.05)); + } + else if (data_type == "PointCloud") + { + boost::shared_ptr < message_filters::Subscriber + > sub(new message_filters::Subscriber(g_nh, topic, 50)); + + if (inf_is_valid) + { + ROS_WARN("obstacle_layer: inf_is_valid option is not applicable to PointCloud observations."); + } + + boost::shared_ptr < tf2_ros::MessageFilter + > filter(new tf2_ros::MessageFilter(*sub, *tf_, global_frame_, 50, g_nh)); + filter->registerCallback([this,buffer=observation_buffers_.back()](auto& msg){ pointCloudCallback(msg, buffer); }); + + observation_subscribers_.push_back(sub); + observation_notifiers_.push_back(filter); + } + else + { + boost::shared_ptr < message_filters::Subscriber + > sub(new message_filters::Subscriber(g_nh, topic, 50)); + + if (inf_is_valid) + { + ROS_WARN("obstacle_layer: inf_is_valid option is not applicable to PointCloud observations."); + } + + boost::shared_ptr < tf2_ros::MessageFilter + > filter(new tf2_ros::MessageFilter(*sub, *tf_, global_frame_, 50, g_nh)); + filter->registerCallback([this,buffer=observation_buffers_.back()](auto& msg){ pointCloud2Callback(msg, buffer); }); + + observation_subscribers_.push_back(sub); + observation_notifiers_.push_back(filter); + } + + if (sensor_frame != "") + { + std::vector < std::string > target_frames; + target_frames.push_back(global_frame_); + target_frames.push_back(sensor_frame); + observation_notifiers_.back()->setTargetFrames(target_frames); + } + } + + dsrv_ = NULL; + setupDynamicReconfigure(nh); +} + +void ObstacleLayer::setupDynamicReconfigure(ros::NodeHandle& nh) +{ + dsrv_ = new dynamic_reconfigure::Server(nh); + dynamic_reconfigure::Server::CallbackType cb = + [this](auto& config, auto level){ reconfigureCB(config, level); }; + dsrv_->setCallback(cb); +} + +ObstacleLayer::~ObstacleLayer() +{ + if (dsrv_) + delete dsrv_; +} +void ObstacleLayer::reconfigureCB(costmap_2d::ObstaclePluginConfig &config, uint32_t level) +{ + enabled_ = config.enabled; + footprint_clearing_enabled_ = config.footprint_clearing_enabled; + max_obstacle_height_ = config.max_obstacle_height; + combination_method_ = config.combination_method; +} + +void ObstacleLayer::laserScanCallback(const sensor_msgs::LaserScanConstPtr& message, + const boost::shared_ptr& buffer) +{ + // project the laser into a point cloud + sensor_msgs::PointCloud2 cloud; + cloud.header = message->header; + + // project the scan into a point cloud + try + { + projector_.transformLaserScanToPointCloud(message->header.frame_id, *message, cloud, *tf_); + } + catch (tf2::TransformException &ex) + { + ROS_WARN("High fidelity enabled, but TF returned a transform exception to frame %s: %s", global_frame_.c_str(), + ex.what()); + projector_.projectLaser(*message, cloud); + } + catch (std::runtime_error &ex) + { + ROS_WARN("transformLaserScanToPointCloud error, it seems the message from laser sensor is malformed. Ignore this laser scan. what(): %s", ex.what()); + return; //ignore this message + } + + // buffer the point cloud + buffer->lock(); + buffer->bufferCloud(cloud); + buffer->unlock(); +} + +void ObstacleLayer::laserScanValidInfCallback(const sensor_msgs::LaserScanConstPtr& raw_message, + const boost::shared_ptr& buffer) +{ + // Filter positive infinities ("Inf"s) to max_range. + float epsilon = 0.0001; // a tenth of a millimeter + sensor_msgs::LaserScan message = *raw_message; + for (size_t i = 0; i < message.ranges.size(); i++) + { + float range = message.ranges[ i ]; + if (!std::isfinite(range) && range > 0) + { + message.ranges[ i ] = message.range_max - epsilon; + } + } + + // project the laser into a point cloud + sensor_msgs::PointCloud2 cloud; + cloud.header = message.header; + + // project the scan into a point cloud + try + { + projector_.transformLaserScanToPointCloud(message.header.frame_id, message, cloud, *tf_); + } + catch (tf2::TransformException &ex) + { + ROS_WARN("High fidelity enabled, but TF returned a transform exception to frame %s: %s", + global_frame_.c_str(), ex.what()); + projector_.projectLaser(message, cloud); + } + catch (std::runtime_error &ex) + { + ROS_WARN("transformLaserScanToPointCloud error, it seems the message from laser sensor is malformed. Ignore this laser scan. what(): %s", ex.what()); + return; //ignore this message + } + + // buffer the point cloud + buffer->lock(); + buffer->bufferCloud(cloud); + buffer->unlock(); +} + +void ObstacleLayer::pointCloudCallback(const sensor_msgs::PointCloudConstPtr& message, + const boost::shared_ptr& buffer) +{ + sensor_msgs::PointCloud2 cloud2; + + if (!sensor_msgs::convertPointCloudToPointCloud2(*message, cloud2)) + { + ROS_ERROR("Failed to convert a PointCloud to a PointCloud2, dropping message"); + return; + } + + // buffer the point cloud + buffer->lock(); + buffer->bufferCloud(cloud2); + buffer->unlock(); +} + +void ObstacleLayer::pointCloud2Callback(const sensor_msgs::PointCloud2ConstPtr& message, + const boost::shared_ptr& buffer) +{ + // buffer the point cloud + buffer->lock(); + buffer->bufferCloud(*message); + buffer->unlock(); +} + +void ObstacleLayer::updateBounds(double robot_x, double robot_y, double robot_yaw, double* min_x, + double* min_y, double* max_x, double* max_y) +{ + if (rolling_window_) + updateOrigin(robot_x - getSizeInMetersX() / 2, robot_y - getSizeInMetersY() / 2); + useExtraBounds(min_x, min_y, max_x, max_y); + + bool current = true; + std::vector observations, clearing_observations; + + // get the marking observations + current = current && getMarkingObservations(observations); + + // get the clearing observations + current = current && getClearingObservations(clearing_observations); + + // update the global current status + current_ = current; + + // raytrace freespace + for (unsigned int i = 0; i < clearing_observations.size(); ++i) + { + raytraceFreespace(clearing_observations[i], min_x, min_y, max_x, max_y); + } + + // place the new obstacles into a priority queue... each with a priority of zero to begin with + for (std::vector::const_iterator it = observations.begin(); it != observations.end(); ++it) + { + const Observation& obs = *it; + + const sensor_msgs::PointCloud2& cloud = *(obs.cloud_); + + double sq_obstacle_range = obs.obstacle_range_ * obs.obstacle_range_; + + sensor_msgs::PointCloud2ConstIterator iter_x(cloud, "x"); + sensor_msgs::PointCloud2ConstIterator iter_y(cloud, "y"); + sensor_msgs::PointCloud2ConstIterator iter_z(cloud, "z"); + + for (; iter_x !=iter_x.end(); ++iter_x, ++iter_y, ++iter_z) + { + double px = *iter_x, py = *iter_y, pz = *iter_z; + + // if the obstacle is too high or too far away from the robot we won't add it + if (pz > max_obstacle_height_) + { + ROS_DEBUG("The point is too high"); + continue; + } + + // compute the squared distance from the hitpoint to the pointcloud's origin + double sq_dist = (px - obs.origin_.x) * (px - obs.origin_.x) + (py - obs.origin_.y) * (py - obs.origin_.y) + + (pz - obs.origin_.z) * (pz - obs.origin_.z); + + // if the point is far enough away... we won't consider it + if (sq_dist >= sq_obstacle_range) + { + ROS_DEBUG("The point is too far away"); + continue; + } + + // now we need to compute the map coordinates for the observation + unsigned int mx, my; + if (!worldToMap(px, py, mx, my)) + { + ROS_DEBUG("Computing map coords failed"); + continue; + } + + unsigned int index = getIndex(mx, my); + costmap_[index] = LETHAL_OBSTACLE; + touch(px, py, min_x, min_y, max_x, max_y); + } + } + + updateFootprint(robot_x, robot_y, robot_yaw, min_x, min_y, max_x, max_y); +} + +void ObstacleLayer::updateFootprint(double robot_x, double robot_y, double robot_yaw, double* min_x, double* min_y, + double* max_x, double* max_y) +{ + if (!footprint_clearing_enabled_) return; + transformFootprint(robot_x, robot_y, robot_yaw, getFootprint(), transformed_footprint_); + + for (unsigned int i = 0; i < transformed_footprint_.size(); i++) + { + touch(transformed_footprint_[i].x, transformed_footprint_[i].y, min_x, min_y, max_x, max_y); + } +} + +void ObstacleLayer::updateCosts(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j) +{ + if (footprint_clearing_enabled_) + { + setConvexPolygonCost(transformed_footprint_, costmap_2d::FREE_SPACE); + } + + switch (combination_method_) + { + case 0: // Overwrite + updateWithOverwrite(master_grid, min_i, min_j, max_i, max_j); + break; + case 1: // Maximum + updateWithMax(master_grid, min_i, min_j, max_i, max_j); + break; + default: // Nothing + break; + } + +} + +void ObstacleLayer::addStaticObservation(costmap_2d::Observation& obs, bool marking, bool clearing) +{ + if (marking) + static_marking_observations_.push_back(obs); + if (clearing) + static_clearing_observations_.push_back(obs); +} + +void ObstacleLayer::clearStaticObservations(bool marking, bool clearing) +{ + if (marking) + static_marking_observations_.clear(); + if (clearing) + static_clearing_observations_.clear(); +} + +bool ObstacleLayer::getMarkingObservations(std::vector& marking_observations) const +{ + bool current = true; + // get the marking observations + for (unsigned int i = 0; i < marking_buffers_.size(); ++i) + { + marking_buffers_[i]->lock(); + marking_buffers_[i]->getObservations(marking_observations); + current = marking_buffers_[i]->isCurrent() && current; + marking_buffers_[i]->unlock(); + } + marking_observations.insert(marking_observations.end(), + static_marking_observations_.begin(), static_marking_observations_.end()); + return current; +} + +bool ObstacleLayer::getClearingObservations(std::vector& clearing_observations) const +{ + bool current = true; + // get the clearing observations + for (unsigned int i = 0; i < clearing_buffers_.size(); ++i) + { + clearing_buffers_[i]->lock(); + clearing_buffers_[i]->getObservations(clearing_observations); + current = clearing_buffers_[i]->isCurrent() && current; + clearing_buffers_[i]->unlock(); + } + clearing_observations.insert(clearing_observations.end(), + static_clearing_observations_.begin(), static_clearing_observations_.end()); + return current; +} + +void ObstacleLayer::raytraceFreespace(const Observation& clearing_observation, double* min_x, double* min_y, + double* max_x, double* max_y) +{ + double ox = clearing_observation.origin_.x; + double oy = clearing_observation.origin_.y; + const sensor_msgs::PointCloud2 &cloud = *(clearing_observation.cloud_); + + // get the map coordinates of the origin of the sensor + unsigned int x0, y0; + if (!worldToMap(ox, oy, x0, y0)) + { + ROS_WARN_THROTTLE( + 1.0, "The origin for the sensor at (%.2f, %.2f) is out of map bounds. So, the costmap cannot raytrace for it.", + ox, oy); + return; + } + + // we can pre-compute the enpoints of the map outside of the inner loop... we'll need these later + double origin_x = origin_x_, origin_y = origin_y_; + double map_end_x = origin_x + size_x_ * resolution_; + double map_end_y = origin_y + size_y_ * resolution_; + + + touch(ox, oy, min_x, min_y, max_x, max_y); + + // for each point in the cloud, we want to trace a line from the origin and clear obstacles along it + sensor_msgs::PointCloud2ConstIterator iter_x(cloud, "x"); + sensor_msgs::PointCloud2ConstIterator iter_y(cloud, "y"); + + for (; iter_x != iter_x.end(); ++iter_x, ++iter_y) + { + double wx = *iter_x; + double wy = *iter_y; + + // now we also need to make sure that the enpoint we're raytracing + // to isn't off the costmap and scale if necessary + double a = wx - ox; + double b = wy - oy; + + // the minimum value to raytrace from is the origin + if (wx < origin_x) + { + double t = (origin_x - ox) / a; + wx = origin_x; + wy = oy + b * t; + } + if (wy < origin_y) + { + double t = (origin_y - oy) / b; + wx = ox + a * t; + wy = origin_y; + } + + // the maximum value to raytrace to is the end of the map + if (wx > map_end_x) + { + double t = (map_end_x - ox) / a; + wx = map_end_x - .001; + wy = oy + b * t; + } + if (wy > map_end_y) + { + double t = (map_end_y - oy) / b; + wx = ox + a * t; + wy = map_end_y - .001; + } + + // now that the vector is scaled correctly... we'll get the map coordinates of its endpoint + unsigned int x1, y1; + + // check for legality just in case + if (!worldToMap(wx, wy, x1, y1)) + continue; + + unsigned int cell_raytrace_range = cellDistance(clearing_observation.raytrace_range_); + MarkCell marker(costmap_, FREE_SPACE); + // and finally... we can execute our trace to clear obstacles along that line + raytraceLine(marker, x0, y0, x1, y1, cell_raytrace_range); + + updateRaytraceBounds(ox, oy, wx, wy, clearing_observation.raytrace_range_, min_x, min_y, max_x, max_y); + } +} + +void ObstacleLayer::activate() +{ + // if we're stopped we need to re-subscribe to topics + for (unsigned int i = 0; i < observation_subscribers_.size(); ++i) + { + if (observation_subscribers_[i] != NULL) + observation_subscribers_[i]->subscribe(); + } + + for (unsigned int i = 0; i < observation_buffers_.size(); ++i) + { + if (observation_buffers_[i]) + observation_buffers_[i]->resetLastUpdated(); + } +} +void ObstacleLayer::deactivate() +{ + for (unsigned int i = 0; i < observation_subscribers_.size(); ++i) + { + if (observation_subscribers_[i] != NULL) + observation_subscribers_[i]->unsubscribe(); + } +} + +void ObstacleLayer::updateRaytraceBounds(double ox, double oy, double wx, double wy, double range, + double* min_x, double* min_y, double* max_x, double* max_y) +{ + double dx = wx-ox, dy = wy-oy; + double full_distance = hypot(dx, dy); + double scale = std::min(1.0, range / full_distance); + double ex = ox + dx * scale, ey = oy + dy * scale; + touch(ex, ey, min_x, min_y, max_x, max_y); +} + +void ObstacleLayer::reset() +{ + deactivate(); + resetMaps(); + current_ = true; + activate(); +} + +} // namespace costmap_2d diff --git a/plugins/preferred_layer.cpp b/plugins/preferred_layer.cpp new file mode 100644 index 0000000..fbe128f --- /dev/null +++ b/plugins/preferred_layer.cpp @@ -0,0 +1,28 @@ +#include +#include + +PLUGINLIB_EXPORT_CLASS(costmap_2d::PreferredLayer, costmap_2d::Layer) + +using costmap_2d::NO_INFORMATION; +using costmap_2d::FREE_SPACE; +using costmap_2d::LETHAL_OBSTACLE; +using costmap_2d::PREFERRED_SPACE; + +namespace costmap_2d +{ + +PreferredLayer::PreferredLayer(){} +PreferredLayer::~PreferredLayer(){} + +unsigned char PreferredLayer::interpretValue(unsigned char value) +{ + // check if the static value is above the unknown or lethal thresholds + if(value == 0) return NO_INFORMATION; + else if (value >= *this->threshold_) + return PREFERRED_SPACE; + + double scale = (double) value / *this->threshold_; + return scale * LETHAL_OBSTACLE; +} + +} \ No newline at end of file diff --git a/plugins/static_layer.cpp b/plugins/static_layer.cpp new file mode 100644 index 0000000..2b633dd --- /dev/null +++ b/plugins/static_layer.cpp @@ -0,0 +1,351 @@ +/********************************************************************* + * + * Software License Agreement (BSD License) + * + * Copyright (c) 2008, 2013, Willow Garage, Inc. + * Copyright (c) 2015, Fetch Robotics, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * Author: Eitan Marder-Eppstein + * David V. Lu!! + *********************************************************************/ +#include +#include +#include +#include +#include + +PLUGINLIB_EXPORT_CLASS(costmap_2d::StaticLayer, costmap_2d::Layer) + +using costmap_2d::NO_INFORMATION; +using costmap_2d::LETHAL_OBSTACLE; +using costmap_2d::FREE_SPACE; + +namespace costmap_2d +{ + +StaticLayer::StaticLayer() : dsrv_(NULL) +{ + threshold_ = &lethal_threshold_; +} + +StaticLayer::~StaticLayer() +{ + if (dsrv_) + delete dsrv_; +} + +void StaticLayer::onInitialize() +{ + ros::NodeHandle nh("~/" + name_), g_nh; + current_ = true; + + global_frame_ = layered_costmap_->getGlobalFrameID(); + nh.param("map_topic", map_topic_, std::string("map")); + nh.param("first_map_only", first_map_only_, false); + nh.param("subscribe_to_updates", subscribe_to_updates_, false); + + nh.param("track_unknown_space", track_unknown_space_, true); + nh.param("use_maximum", use_maximum_, false); + + int temp_lethal_threshold, temp_unknown_cost_value; + nh.param("lethal_cost_threshold", temp_lethal_threshold, int(100)); + nh.param("unknown_cost_value", temp_unknown_cost_value, int(-1)); + nh.param("trinary_costmap", trinary_costmap_, true); + nh.param("base_frame_id", base_frame_id_, std::string("base_footprint")); + + // ROS_WARN("global_frame_[%s] map_frame_[%s] map_topic[%s] first_map_only[%d] subscribe_to_updates[%d] track_unknown_space[%d] use_maximum[%d] \n lethal_cost_threshold[%d] unknown_cost_value[%d] trinary_costmap[%d]", + // global_frame_.c_str(), map_frame_.c_str(),map_topic_.c_str(), first_map_only_, subscribe_to_updates_, track_unknown_space_, use_maximum_, temp_lethal_threshold, temp_unknown_cost_value, trinary_costmap_); + lethal_threshold_ = std::max(std::min(temp_lethal_threshold, 100), 0); + unknown_cost_value_ = temp_unknown_cost_value; + + // Only resubscribe if topic has changed + if (map_sub_.getTopic() != ros::names::resolve(map_topic_)) + { + // we'll subscribe to the latched topic that the map server uses + ROS_INFO("Requesting the map..."); + map_sub_ = g_nh.subscribe(map_topic_, 1, &StaticLayer::incomingMap, this); + map_received_ = false; + has_updated_data_ = false; + + ros::Rate r(10); + while (!map_received_ && g_nh.ok()) + { + ros::spinOnce(); + r.sleep(); + } + + ROS_INFO("Received a %d X %d map at %f m/pix", getSizeInCellsX(), getSizeInCellsY(), getResolution()); + + if (subscribe_to_updates_) + { + ROS_INFO("Subscribing to updates"); + map_update_sub_ = g_nh.subscribe(map_topic_ + "_updates", 10, &StaticLayer::incomingUpdate, this); + } + } + else + { + has_updated_data_ = true; + } + + if (dsrv_) + { + delete dsrv_; + } + + dsrv_ = new dynamic_reconfigure::Server(nh); + dynamic_reconfigure::Server::CallbackType cb = + [this](auto& config, auto level){ reconfigureCB(config, level); }; + dsrv_->setCallback(cb); +} + +void StaticLayer::reconfigureCB(costmap_2d::GenericPluginConfig &config, uint32_t level) +{ + if (config.enabled != enabled_) + { + enabled_ = config.enabled; + has_updated_data_ = true; + x_ = y_ = 0; + width_ = size_x_; + height_ = size_y_; + } +} + +void StaticLayer::matchSize() +{ + // If we are using rolling costmap, the static map size is + // unrelated to the size of the layered costmap + if (!layered_costmap_->isRolling()) + { + Costmap2D* master = layered_costmap_->getCostmap(); + resizeMap(master->getSizeInCellsX(), master->getSizeInCellsY(), master->getResolution(), + master->getOriginX(), master->getOriginY()); + } +} + +unsigned char StaticLayer::interpretValue(unsigned char value) +{ + // check if the static value is above the unknown or lethal thresholds + if (track_unknown_space_ && value == unknown_cost_value_) + return NO_INFORMATION; + else if (!track_unknown_space_ && value == unknown_cost_value_) + return FREE_SPACE; + else if (value >= lethal_threshold_) + return LETHAL_OBSTACLE; + else if (trinary_costmap_) + return FREE_SPACE; + + double scale = (double) value / lethal_threshold_; + return scale * LETHAL_OBSTACLE; +} + +void StaticLayer::incomingMap(const nav_msgs::OccupancyGridConstPtr& new_map) +{ + unsigned int size_x = new_map->info.width, size_y = new_map->info.height; + + ROS_DEBUG("Received a %d X %d map at %f m/pix", size_x, size_y, new_map->info.resolution); + + // resize costmap if size, resolution or origin do not match + Costmap2D* master = layered_costmap_->getCostmap(); + if (!layered_costmap_->isRolling() && + (master->getSizeInCellsX() != size_x || + master->getSizeInCellsY() != size_y || + master->getResolution() != new_map->info.resolution || + master->getOriginX() != new_map->info.origin.position.x || + master->getOriginY() != new_map->info.origin.position.y)) + { + // Update the size of the layered costmap (and all layers, including this one) + ROS_INFO("Resizing costmap to %d X %d at %f m/pix", size_x, size_y, new_map->info.resolution); + layered_costmap_->resizeMap(size_x, size_y, new_map->info.resolution, new_map->info.origin.position.x, + new_map->info.origin.position.y, + true /* set size_locked to true, prevents reconfigureCb from overriding map size*/); + } + else if (size_x_ != size_x || size_y_ != size_y || + resolution_ != new_map->info.resolution || + origin_x_ != new_map->info.origin.position.x || + origin_y_ != new_map->info.origin.position.y) + { + // only update the size of the costmap stored locally in this layer + ROS_INFO("Resizing static layer to %d X %d at %f m/pix", size_x, size_y, new_map->info.resolution); + resizeMap(size_x, size_y, new_map->info.resolution, + new_map->info.origin.position.x, new_map->info.origin.position.y); + } + + unsigned int index = 0; + + // initialize the costmap with static data + for (unsigned int i = 0; i < size_y; ++i) + { + for (unsigned int j = 0; j < size_x; ++j) + { + unsigned char value = new_map->data[index]; + costmap_[index] = interpretValue(value); + ++index; + } + } + map_frame_ = new_map->header.frame_id; + + // we have a new map, update full size of map + x_ = y_ = 0; + width_ = size_x_; + height_ = size_y_; + map_received_ = true; + has_updated_data_ = true; + + // shutdown the map subscrber if firt_map_only_ flag is on + if (first_map_only_) + { + ROS_INFO("Shutting down the map subscriber. first_map_only flag is on"); + map_sub_.shutdown(); + } +} + +void StaticLayer::incomingUpdate(const map_msgs::OccupancyGridUpdateConstPtr& update) +{ + unsigned int di = 0; + for (unsigned int y = 0; y < update->height ; y++) + { + unsigned int index_base = (update->y + y) * size_x_; + for (unsigned int x = 0; x < update->width ; x++) + { + unsigned int index = index_base + x + update->x; + costmap_[index] = interpretValue(update->data[di++]); + } + } + x_ = update->x; + y_ = update->y; + width_ = update->width; + height_ = update->height; + has_updated_data_ = true; +} + +void StaticLayer::activate() +{ + onInitialize(); +} + +void StaticLayer::deactivate() +{ + map_sub_.shutdown(); + if (subscribe_to_updates_) + map_update_sub_.shutdown(); +} + +void StaticLayer::reset() +{ + if (first_map_only_) + { + has_updated_data_ = true; + } + else + { + onInitialize(); + } +} + +void StaticLayer::updateBounds(double robot_x, double robot_y, double robot_yaw, double* min_x, double* min_y, + double* max_x, double* max_y) +{ + + if( !layered_costmap_->isRolling() ){ + if (!map_received_ || !(has_updated_data_ || has_extra_bounds_)) + return; + } + + useExtraBounds(min_x, min_y, max_x, max_y); + + double wx, wy; + + mapToWorld(x_, y_, wx, wy); + *min_x = std::min(wx, *min_x); + *min_y = std::min(wy, *min_y); + + mapToWorld(x_ + width_, y_ + height_, wx, wy); + *max_x = std::max(wx, *max_x); + *max_y = std::max(wy, *max_y); + + has_updated_data_ = false; +} + +void StaticLayer::updateCosts(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j) +{ + if (!map_received_) + return; + + if (!layered_costmap_->isRolling()) + { + // if not rolling, the layered costmap (master_grid) has same coordinates as this layer + if (!use_maximum_) + updateWithOverwrite(master_grid, min_i, min_j, max_i, max_j); + else + updateWithMax(master_grid, min_i, min_j, max_i, max_j); + } + else + { + // If rolling window, the master_grid is unlikely to have same coordinates as this layer + unsigned int mx, my; + double wx, wy; + // Might even be in a different frame + geometry_msgs::TransformStamped transform; + try + { + transform = tf_->lookupTransform(map_frame_, global_frame_, ros::Time(0)); + } + catch (tf2::TransformException ex) + { + ROS_ERROR("%s", ex.what()); + return; + } + // Copy map data given proper transformations + tf2::Transform tf2_transform; + tf2::convert(transform.transform, tf2_transform); + for (unsigned int i = min_i; i < max_i; ++i) + { + for (unsigned int j = min_j; j < max_j; ++j) + { + // Convert master_grid coordinates (i,j) into global_frame_(wx,wy) coordinates + layered_costmap_->getCostmap()->mapToWorld(i, j, wx, wy); + // Transform from global_frame_ to map_frame_ + tf2::Vector3 p(wx, wy, 0); + p = tf2_transform*p; + // Set master_grid with cell from map + if (worldToMap(p.x(), p.y(), mx, my)) + { + if (!use_maximum_) + master_grid.setCost(i, j, getCost(mx, my)); + else + master_grid.setCost(i, j, std::max(getCost(mx, my), master_grid.getCost(i, j))); + } + } + } + } +} + +} // namespace costmap_2d diff --git a/plugins/unpreferred_layer.cpp b/plugins/unpreferred_layer.cpp new file mode 100644 index 0000000..d6237f2 --- /dev/null +++ b/plugins/unpreferred_layer.cpp @@ -0,0 +1,27 @@ +#include +#include + +PLUGINLIB_EXPORT_CLASS(costmap_2d::UnPreferredLayer, costmap_2d::Layer) + +using costmap_2d::NO_INFORMATION; +using costmap_2d::LETHAL_OBSTACLE; +using costmap_2d::PREFERRED_SPACE; + +namespace costmap_2d +{ + +UnPreferredLayer::UnPreferredLayer(){} +UnPreferredLayer::~UnPreferredLayer(){} + +unsigned char UnPreferredLayer::interpretValue(unsigned char value) +{ + // check if the static value is above the unknown or lethal thresholds + if(value == 0) return NO_INFORMATION; + else if (value >= *this->threshold_) + return UNPREFERRED_SPACE; + + double scale = (double) value / *this->threshold_; + return scale * LETHAL_OBSTACLE; +} + +} \ No newline at end of file diff --git a/plugins/voxel_layer.cpp b/plugins/voxel_layer.cpp new file mode 100644 index 0000000..9927ddd --- /dev/null +++ b/plugins/voxel_layer.cpp @@ -0,0 +1,449 @@ +/********************************************************************* + * + * Software License Agreement (BSD License) + * + * Copyright (c) 2008, 2013, Willow Garage, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * Author: Eitan Marder-Eppstein + * David V. Lu!! + *********************************************************************/ +#include +#include +#include + +#define VOXEL_BITS 16 +PLUGINLIB_EXPORT_CLASS(costmap_2d::VoxelLayer, costmap_2d::Layer) + +using costmap_2d::NO_INFORMATION; +using costmap_2d::LETHAL_OBSTACLE; +using costmap_2d::FREE_SPACE; + +using costmap_2d::ObservationBuffer; +using costmap_2d::Observation; + +namespace costmap_2d +{ + +void VoxelLayer::onInitialize() +{ + ObstacleLayer::onInitialize(); + ros::NodeHandle private_nh("~/" + name_); + + private_nh.param("publish_voxel_map", publish_voxel_, false); + if (publish_voxel_) + voxel_pub_ = private_nh.advertise < costmap_2d::VoxelGrid > ("voxel_grid", 1); + + clearing_endpoints_pub_ = private_nh.advertise("clearing_endpoints", 1); +} + +void VoxelLayer::setupDynamicReconfigure(ros::NodeHandle& nh) +{ + voxel_dsrv_ = new dynamic_reconfigure::Server(nh); + dynamic_reconfigure::Server::CallbackType cb = + [this](auto& config, auto level){ reconfigureCB(config, level); }; + voxel_dsrv_->setCallback(cb); +} + +VoxelLayer::~VoxelLayer() +{ + if (voxel_dsrv_) + delete voxel_dsrv_; +} + +void VoxelLayer::reconfigureCB(costmap_2d::VoxelPluginConfig &config, uint32_t level) +{ + enabled_ = config.enabled; + footprint_clearing_enabled_ = config.footprint_clearing_enabled; + max_obstacle_height_ = config.max_obstacle_height; + size_z_ = config.z_voxels; + origin_z_ = config.origin_z; + z_resolution_ = config.z_resolution; + unknown_threshold_ = config.unknown_threshold + (VOXEL_BITS - size_z_); + mark_threshold_ = config.mark_threshold; + combination_method_ = config.combination_method; + matchSize(); +} + +void VoxelLayer::matchSize() +{ + ObstacleLayer::matchSize(); + voxel_grid_.resize(size_x_, size_y_, size_z_); + ROS_ASSERT(voxel_grid_.sizeX() == size_x_ && voxel_grid_.sizeY() == size_y_); +} + +void VoxelLayer::reset() +{ + deactivate(); + resetMaps(); + voxel_grid_.reset(); + activate(); +} + +void VoxelLayer::resetMaps() +{ + Costmap2D::resetMaps(); + voxel_grid_.reset(); +} + +void VoxelLayer::updateBounds(double robot_x, double robot_y, double robot_yaw, double* min_x, + double* min_y, double* max_x, double* max_y) +{ + if (rolling_window_) + updateOrigin(robot_x - getSizeInMetersX() / 2, robot_y - getSizeInMetersY() / 2); + useExtraBounds(min_x, min_y, max_x, max_y); + + bool current = true; + std::vector observations, clearing_observations; + + // get the marking observations + current = getMarkingObservations(observations) && current; + + // get the clearing observations + current = getClearingObservations(clearing_observations) && current; + + // update the global current status + current_ = current; + + // raytrace freespace + for (unsigned int i = 0; i < clearing_observations.size(); ++i) + { + raytraceFreespace(clearing_observations[i], min_x, min_y, max_x, max_y); + } + + // place the new obstacles into a priority queue... each with a priority of zero to begin with + for (std::vector::const_iterator it = observations.begin(); it != observations.end(); ++it) + { + const Observation& obs = *it; + + const sensor_msgs::PointCloud2& cloud = *(obs.cloud_); + + double sq_obstacle_range = obs.obstacle_range_ * obs.obstacle_range_; + + sensor_msgs::PointCloud2ConstIterator iter_x(cloud, "x"); + sensor_msgs::PointCloud2ConstIterator iter_y(cloud, "y"); + sensor_msgs::PointCloud2ConstIterator iter_z(cloud, "z"); + + for (unsigned int i = 0; iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z) + { + // if the obstacle is too high or too far away from the robot we won't add it + if (*iter_z > max_obstacle_height_) + continue; + + // compute the squared distance from the hitpoint to the pointcloud's origin + double sq_dist = (*iter_x - obs.origin_.x) * (*iter_x - obs.origin_.x) + + (*iter_y - obs.origin_.y) * (*iter_y - obs.origin_.y) + + (*iter_z - obs.origin_.z) * (*iter_z - obs.origin_.z); + + // if the point is far enough away... we won't consider it + if (sq_dist >= sq_obstacle_range) + continue; + + // now we need to compute the map coordinates for the observation + unsigned int mx, my, mz; + if (*iter_z < origin_z_) + { + if (!worldToMap3D(*iter_x, *iter_y, origin_z_, mx, my, mz)) + continue; + } + else if (!worldToMap3D(*iter_x, *iter_y, *iter_z, mx, my, mz)) + { + continue; + } + + // mark the cell in the voxel grid and check if we should also mark it in the costmap + if (voxel_grid_.markVoxelInMap(mx, my, mz, mark_threshold_)) + { + unsigned int index = getIndex(mx, my); + + costmap_[index] = LETHAL_OBSTACLE; + touch(double(*iter_x), double(*iter_y), min_x, min_y, max_x, max_y); + } + } + } + + if (publish_voxel_) + { + costmap_2d::VoxelGrid grid_msg; + unsigned int size = voxel_grid_.sizeX() * voxel_grid_.sizeY(); + grid_msg.size_x = voxel_grid_.sizeX(); + grid_msg.size_y = voxel_grid_.sizeY(); + grid_msg.size_z = voxel_grid_.sizeZ(); + grid_msg.data.resize(size); + memcpy(&grid_msg.data[0], voxel_grid_.getData(), size * sizeof(unsigned int)); + + grid_msg.origin.x = origin_x_; + grid_msg.origin.y = origin_y_; + grid_msg.origin.z = origin_z_; + + grid_msg.resolutions.x = resolution_; + grid_msg.resolutions.y = resolution_; + grid_msg.resolutions.z = z_resolution_; + grid_msg.header.frame_id = global_frame_; + grid_msg.header.stamp = ros::Time::now(); + voxel_pub_.publish(grid_msg); + } + + updateFootprint(robot_x, robot_y, robot_yaw, min_x, min_y, max_x, max_y); +} + +void VoxelLayer::clearNonLethal(double wx, double wy, double w_size_x, double w_size_y, bool clear_no_info) +{ + // get the cell coordinates of the center point of the window + unsigned int mx, my; + if (!worldToMap(wx, wy, mx, my)) + return; + + // compute the bounds of the window + double start_x = wx - w_size_x / 2; + double start_y = wy - w_size_y / 2; + double end_x = start_x + w_size_x; + double end_y = start_y + w_size_y; + + // scale the window based on the bounds of the costmap + start_x = std::max(origin_x_, start_x); + start_y = std::max(origin_y_, start_y); + + end_x = std::min(origin_x_ + getSizeInMetersX(), end_x); + end_y = std::min(origin_y_ + getSizeInMetersY(), end_y); + + // get the map coordinates of the bounds of the window + unsigned int map_sx, map_sy, map_ex, map_ey; + + // check for legality just in case + if (!worldToMap(start_x, start_y, map_sx, map_sy) || !worldToMap(end_x, end_y, map_ex, map_ey)) + return; + + // we know that we want to clear all non-lethal obstacles in this window to get it ready for inflation + unsigned int index = getIndex(map_sx, map_sy); + unsigned char* current = &costmap_[index]; + for (unsigned int j = map_sy; j <= map_ey; ++j) + { + for (unsigned int i = map_sx; i <= map_ex; ++i) + { + // if the cell is a lethal obstacle... we'll keep it and queue it, otherwise... we'll clear it + if (*current != LETHAL_OBSTACLE) + { + if (clear_no_info || *current != NO_INFORMATION) + { + *current = FREE_SPACE; + voxel_grid_.clearVoxelColumn(index); + } + } + current++; + index++; + } + current += size_x_ - (map_ex - map_sx) - 1; + index += size_x_ - (map_ex - map_sx) - 1; + } +} + +void VoxelLayer::raytraceFreespace(const Observation& clearing_observation, double* min_x, double* min_y, + double* max_x, double* max_y) +{ + size_t clearing_observation_cloud_size = clearing_observation.cloud_->height * clearing_observation.cloud_->width; + if (clearing_observation_cloud_size == 0) + return; + + double sensor_x, sensor_y, sensor_z; + double ox = clearing_observation.origin_.x; + double oy = clearing_observation.origin_.y; + double oz = clearing_observation.origin_.z; + + if (!worldToMap3DFloat(ox, oy, oz, sensor_x, sensor_y, sensor_z)) + { + ROS_WARN_THROTTLE( + 1.0, + "The origin for the sensor at (%.2f, %.2f, %.2f) is out of map bounds. So, the costmap cannot raytrace for it.", + ox, oy, oz); + return; + } + + bool publish_clearing_points = (clearing_endpoints_pub_.getNumSubscribers() > 0); + if (publish_clearing_points) + { + clearing_endpoints_.points.clear(); + clearing_endpoints_.points.reserve(clearing_observation_cloud_size); + } + + // we can pre-compute the enpoints of the map outside of the inner loop... we'll need these later + double map_end_x = origin_x_ + getSizeInMetersX(); + double map_end_y = origin_y_ + getSizeInMetersY(); + + sensor_msgs::PointCloud2ConstIterator iter_x(*(clearing_observation.cloud_), "x"); + sensor_msgs::PointCloud2ConstIterator iter_y(*(clearing_observation.cloud_), "y"); + sensor_msgs::PointCloud2ConstIterator iter_z(*(clearing_observation.cloud_), "z"); + + for (;iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z) + { + double wpx = *iter_x; + double wpy = *iter_y; + double wpz = *iter_z; + + double distance = dist(ox, oy, oz, wpx, wpy, wpz); + double scaling_fact = 1.0; + scaling_fact = std::max(std::min(scaling_fact, (distance - 2 * resolution_) / distance), 0.0); + wpx = scaling_fact * (wpx - ox) + ox; + wpy = scaling_fact * (wpy - oy) + oy; + wpz = scaling_fact * (wpz - oz) + oz; + + double a = wpx - ox; + double b = wpy - oy; + double c = wpz - oz; + double t = 1.0; + + // we can only raytrace to a maximum z height + if (wpz > max_obstacle_height_) + { + // we know we want the vector's z value to be max_z + t = std::max(0.0, std::min(t, (max_obstacle_height_ - 0.01 - oz) / c)); + } + // and we can only raytrace down to the floor + else if (wpz < origin_z_) + { + // we know we want the vector's z value to be 0.0 + t = std::min(t, (origin_z_ - oz) / c); + } + + // the minimum value to raytrace from is the origin + if (wpx < origin_x_) + { + t = std::min(t, (origin_x_ - ox) / a); + } + if (wpy < origin_y_) + { + t = std::min(t, (origin_y_ - oy) / b); + } + + // the maximum value to raytrace to is the end of the map + if (wpx > map_end_x) + { + t = std::min(t, (map_end_x - ox) / a); + } + if (wpy > map_end_y) + { + t = std::min(t, (map_end_y - oy) / b); + } + + wpx = ox + a * t; + wpy = oy + b * t; + wpz = oz + c * t; + + double point_x, point_y, point_z; + if (worldToMap3DFloat(wpx, wpy, wpz, point_x, point_y, point_z)) + { + unsigned int cell_raytrace_range = cellDistance(clearing_observation.raytrace_range_); + + // voxel_grid_.markVoxelLine(sensor_x, sensor_y, sensor_z, point_x, point_y, point_z); + voxel_grid_.clearVoxelLineInMap(sensor_x, sensor_y, sensor_z, point_x, point_y, point_z, costmap_, + unknown_threshold_, mark_threshold_, FREE_SPACE, NO_INFORMATION, + cell_raytrace_range); + + updateRaytraceBounds(ox, oy, wpx, wpy, clearing_observation.raytrace_range_, min_x, min_y, max_x, max_y); + + if (publish_clearing_points) + { + geometry_msgs::Point32 point; + point.x = wpx; + point.y = wpy; + point.z = wpz; + clearing_endpoints_.points.push_back(point); + } + } + } + + if (publish_clearing_points) + { + clearing_endpoints_.header.frame_id = global_frame_; + clearing_endpoints_.header.stamp = clearing_observation.cloud_->header.stamp; + clearing_endpoints_.header.seq = clearing_observation.cloud_->header.seq; + + clearing_endpoints_pub_.publish(clearing_endpoints_); + } +} + +void VoxelLayer::updateOrigin(double new_origin_x, double new_origin_y) +{ + // project the new origin into the grid + int cell_ox, cell_oy; + cell_ox = int((new_origin_x - origin_x_) / resolution_); + cell_oy = int((new_origin_y - origin_y_) / resolution_); + + // compute the associated world coordinates for the origin cell + // beacuase we want to keep things grid-aligned + double new_grid_ox, new_grid_oy; + new_grid_ox = origin_x_ + cell_ox * resolution_; + new_grid_oy = origin_y_ + cell_oy * resolution_; + + // To save casting from unsigned int to int a bunch of times + int size_x = size_x_; + int size_y = size_y_; + + // we need to compute the overlap of the new and existing windows + int lower_left_x, lower_left_y, upper_right_x, upper_right_y; + lower_left_x = std::min(std::max(cell_ox, 0), size_x); + lower_left_y = std::min(std::max(cell_oy, 0), size_y); + upper_right_x = std::min(std::max(cell_ox + size_x, 0), size_x); + upper_right_y = std::min(std::max(cell_oy + size_y, 0), size_y); + + unsigned int cell_size_x = upper_right_x - lower_left_x; + unsigned int cell_size_y = upper_right_y - lower_left_y; + + // we need a map to store the obstacles in the window temporarily + unsigned char* local_map = new unsigned char[cell_size_x * cell_size_y]; + unsigned int* local_voxel_map = new unsigned int[cell_size_x * cell_size_y]; + unsigned int* voxel_map = voxel_grid_.getData(); + + // copy the local window in the costmap to the local map + copyMapRegion(costmap_, lower_left_x, lower_left_y, size_x_, local_map, 0, 0, cell_size_x, cell_size_x, cell_size_y); + copyMapRegion(voxel_map, lower_left_x, lower_left_y, size_x_, local_voxel_map, 0, 0, cell_size_x, cell_size_x, + cell_size_y); + + // we'll reset our maps to unknown space if appropriate + resetMaps(); + + // update the origin with the appropriate world coordinates + origin_x_ = new_grid_ox; + origin_y_ = new_grid_oy; + + // compute the starting cell location for copying data back in + int start_x = lower_left_x - cell_ox; + int start_y = lower_left_y - cell_oy; + + // now we want to copy the overlapping information back into the map, but in its new location + copyMapRegion(local_map, 0, 0, cell_size_x, costmap_, start_x, start_y, size_x_, cell_size_x, cell_size_y); + copyMapRegion(local_voxel_map, 0, 0, cell_size_x, voxel_map, start_x, start_y, size_x_, cell_size_x, cell_size_y); + + // make sure to clean up + delete[] local_map; + delete[] local_voxel_map; +} + +} // namespace costmap_2d diff --git a/src/array_parser.cpp b/src/array_parser.cpp new file mode 100644 index 0000000..144a860 --- /dev/null +++ b/src/array_parser.cpp @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2012, Willow Garage, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * author: Dave Hershberger + */ + +#include // for EOF +#include +#include +#include + +namespace costmap_2d +{ + +/** @brief Parse a vector of vector of floats from a string. + * @param input + * @param error_return + * Syntax is [[1.0, 2.0], [3.3, 4.4, 5.5], ...] */ +std::vector > parseVVF(const std::string& input, std::string& error_return) +{ + std::vector > result; + + std::stringstream input_ss(input); + int depth = 0; + std::vector current_vector; + while (!!input_ss && !input_ss.eof()) + { + switch (input_ss.peek()) + { + case EOF: + break; + case '[': + depth++; + if (depth > 2) + { + error_return = "Array depth greater than 2"; + return result; + } + input_ss.get(); + current_vector.clear(); + break; + case ']': + depth--; + if (depth < 0) + { + error_return = "More close ] than open ["; + return result; + } + input_ss.get(); + if (depth == 1) + { + result.push_back(current_vector); + } + break; + case ',': + case ' ': + case '\t': + input_ss.get(); + break; + default: // All other characters should be part of the numbers. + if (depth != 2) + { + std::stringstream err_ss; + err_ss << "Numbers at depth other than 2. Char was '" << char(input_ss.peek()) << "'."; + error_return = err_ss.str(); + return result; + } + float value; + input_ss >> value; + if (!!input_ss) + { + current_vector.push_back(value); + } + break; + } + } + + if (depth != 0) + { + error_return = "Unterminated vector string."; + } + else + { + error_return = ""; + } + + return result; +} + +} // end namespace costmap_2d diff --git a/src/costmap_2d.cpp b/src/costmap_2d.cpp index ac646a3..3212208 100644 --- a/src/costmap_2d.cpp +++ b/src/costmap_2d.cpp @@ -1,71 +1,445 @@ -#include -#include +/********************************************************************* + * License & Authors + * - Cung cấp lớp Costmap2D để lưu trữ bản đồ chi phí 2D + *********************************************************************/ + +#include // Header định nghĩa lớp Costmap2D +#include // Dùng cho thao tác file (fopen, fprintf, ...) using namespace std; namespace costmap_2d { - Costmap2D::Costmap2D(unsigned int cells_size_x, unsigned int cells_size_y, double resolution, - double origin_x, double origin_y, unsigned char default_value) : + +/***************************************************** + * Hàm khởi tạo chính của Costmap2D + * - Tạo bản đồ kích thước size_x × size_y + * - Gán độ phân giải, gốc tọa độ, và giá trị mặc định + *****************************************************/ +Costmap2D::Costmap2D(unsigned int cells_size_x, unsigned int cells_size_y, double resolution, + double origin_x, double origin_y, unsigned char default_value) : size_x_(cells_size_x), size_y_(cells_size_y), resolution_(resolution), origin_x_(origin_x), origin_y_(origin_y), costmap_(NULL), default_value_(default_value) - { - access_ = new mutex_t(); +{ + access_ = new mutex_t(); // Khóa bảo vệ truy cập đa luồng - // create the costmap - initMaps(size_x_, size_y_); - resetMaps(); + // Cấp phát vùng nhớ cho bản đồ + initMaps(size_x_, size_y_); + + // Gán toàn bộ bản đồ bằng giá trị mặc định (ví dụ: NO_INFORMATION) + resetMaps(); +} + +/***************************************************** + * Xóa bộ nhớ costmap_ + *****************************************************/ +void Costmap2D::deleteMaps() +{ + boost::unique_lock lock(*access_); // Giữ mutex để đảm bảo thread-safe + delete[] costmap_; // Giải phóng vùng nhớ + costmap_ = NULL; +} + +/***************************************************** + * Cấp phát vùng nhớ cho costmap_ + *****************************************************/ +void Costmap2D::initMaps(unsigned int size_x, unsigned int size_y) +{ + boost::unique_lock lock(*access_); + delete[] costmap_; // Xóa vùng nhớ cũ nếu có + costmap_ = new unsigned char[size_x * size_y]; // Mỗi ô lưu 1 byte (0–255) +} + +/***************************************************** + * Thay đổi kích thước bản đồ + * - Thường dùng khi tạo lại bản đồ mới hoặc khi map động + *****************************************************/ +void Costmap2D::resizeMap(unsigned int size_x, unsigned int size_y, double resolution, + double origin_x, double origin_y) +{ + size_x_ = size_x; + size_y_ = size_y; + resolution_ = resolution; + origin_x_ = origin_x; + origin_y_ = origin_y; + + initMaps(size_x, size_y); // Cấp phát vùng nhớ mới + resetMaps(); // Reset toàn bộ dữ liệu +} + +/***************************************************** + * Reset toàn bộ bản đồ về giá trị mặc định + *****************************************************/ +void Costmap2D::resetMaps() +{ + boost::unique_lock lock(*access_); + memset(costmap_, default_value_, size_x_ * size_y_ * sizeof(unsigned char)); +} + +/***************************************************** + * Reset một vùng con trong costmap + *****************************************************/ +void Costmap2D::resetMap(unsigned int x0, unsigned int y0, unsigned int xn, unsigned int yn) +{ + boost::unique_lock lock(*(access_)); + unsigned int len = xn - x0; + for (unsigned int y = y0 * size_x_ + x0; y < yn * size_x_ + x0; y += size_x_) + memset(costmap_ + y, default_value_, len * sizeof(unsigned char)); +} + +/***************************************************** + * Tạo bản đồ mới chỉ bao gồm 1 cửa sổ (window) con của map hiện tại + *****************************************************/ +bool Costmap2D::copyCostmapWindow(const Costmap2D& map, double win_origin_x, double win_origin_y, + double win_size_x, double win_size_y) +{ + // Không thể tạo window của chính mình + if (this == &map) + return false; + + deleteMaps(); // Xóa dữ liệu cũ + + // Chuyển đổi tọa độ thế giới sang tọa độ lưới + unsigned int lower_left_x, lower_left_y, upper_right_x, upper_right_y; + if (!map.worldToMap(win_origin_x, win_origin_y, lower_left_x, lower_left_y) + || !map.worldToMap(win_origin_x + win_size_x, win_origin_y + win_size_y, upper_right_x, upper_right_y)) + return false; + + // Tính kích thước vùng con + size_x_ = upper_right_x - lower_left_x; + size_y_ = upper_right_y - lower_left_y; + resolution_ = map.resolution_; + origin_x_ = win_origin_x; + origin_y_ = win_origin_y; + + initMaps(size_x_, size_y_); // Cấp phát bộ nhớ mới + + // Sao chép dữ liệu vùng con từ bản đồ gốc + copyMapRegion(map.costmap_, lower_left_x, lower_left_y, map.size_x_, + costmap_, 0, 0, size_x_, size_x_, size_y_); + return true; +} + +/***************************************************** + * Toán tử gán (=): sao chép toàn bộ dữ liệu từ map khác + *****************************************************/ +Costmap2D& Costmap2D::operator=(const Costmap2D& map) +{ + if (this == &map) + return *this; + + deleteMaps(); // Xóa map cũ + + size_x_ = map.size_x_; + size_y_ = map.size_y_; + resolution_ = map.resolution_; + origin_x_ = map.origin_x_; + origin_y_ = map.origin_y_; + + initMaps(size_x_, size_y_); // Tạo map mới + memcpy(costmap_, map.costmap_, size_x_ * size_y_ * sizeof(unsigned char)); // Sao chép dữ liệu + + return *this; +} + +/***************************************************** + * Constructor sao chép + *****************************************************/ +Costmap2D::Costmap2D(const Costmap2D& map) : costmap_(NULL) +{ + access_ = new mutex_t(); + *this = map; // Gọi lại toán tử gán +} + +/***************************************************** + * Constructor mặc định (chưa có bản đồ) + *****************************************************/ +Costmap2D::Costmap2D() : + size_x_(0), size_y_(0), resolution_(0.0), + origin_x_(0.0), origin_y_(0.0), costmap_(NULL) +{ + access_ = new mutex_t(); +} + +/***************************************************** + * Destructor: giải phóng bộ nhớ + *****************************************************/ +Costmap2D::~Costmap2D() +{ + deleteMaps(); + delete access_; +} + +/***************************************************** + * Chuyển khoảng cách thực (mét) sang đơn vị ô + *****************************************************/ +unsigned int Costmap2D::cellDistance(double world_dist) +{ + double cells_dist = max(0.0, ceil(world_dist / resolution_)); + return (unsigned int)cells_dist; +} + +/***************************************************** + * Trả về con trỏ dữ liệu costmap + *****************************************************/ +unsigned char* Costmap2D::getCharMap() const +{ + return costmap_; +} + +/***************************************************** + * Lấy giá trị cost tại ô (mx, my) + *****************************************************/ +unsigned char Costmap2D::getCost(unsigned int mx, unsigned int my) const +{ + return costmap_[getIndex(mx, my)]; +} + +/***************************************************** + * Gán giá trị cost tại ô (mx, my) + *****************************************************/ +void Costmap2D::setCost(unsigned int mx, unsigned int my, unsigned char cost) +{ + costmap_[getIndex(mx, my)] = cost; +} + +/***************************************************** + * Chuyển từ tọa độ lưới (ô) sang tọa độ thế giới + *****************************************************/ +void Costmap2D::mapToWorld(unsigned int mx, unsigned int my, double& wx, double& wy) const +{ + wx = origin_x_ + (mx + 0.5) * resolution_; + wy = origin_y_ + (my + 0.5) * resolution_; +} + +/***************************************************** + * Chuyển từ tọa độ thế giới sang tọa độ lưới + *****************************************************/ +bool Costmap2D::worldToMap(double wx, double wy, unsigned int& mx, unsigned int& my) const +{ + if (wx < origin_x_ || wy < origin_y_) + return false; + + mx = (int)((wx - origin_x_) / resolution_); + my = (int)((wy - origin_y_) / resolution_); + + return (mx < size_x_ && my < size_y_); +} + +/***************************************************** + * Phiên bản không kiểm tra biên (có thể ra ngoài map) + *****************************************************/ +void Costmap2D::worldToMapNoBounds(double wx, double wy, int& mx, int& my) const +{ + mx = (int)((wx - origin_x_) / resolution_); + my = (int)((wy - origin_y_) / resolution_); +} + +/***************************************************** + * Phiên bản ép buộc tọa độ nằm trong biên bản đồ + *****************************************************/ +void Costmap2D::worldToMapEnforceBounds(double wx, double wy, int& mx, int& my) const +{ + if (wx < origin_x_) + mx = 0; + else if (wx >= resolution_ * size_x_ + origin_x_) + mx = size_x_ - 1; + else + mx = (int)((wx - origin_x_) / resolution_); + + if (wy < origin_y_) + my = 0; + else if (wy >= resolution_ * size_y_ + origin_y_) + my = size_y_ - 1; + else + my = (int)((wy - origin_y_) / resolution_); +} + +/***************************************************** + * Dịch chuyển gốc của bản đồ khi robot di chuyển + * => Dữ liệu được dịch và giữ lại phần chồng lấn + *****************************************************/ +void Costmap2D::updateOrigin(double new_origin_x, double new_origin_y) +{ + int cell_ox = int((new_origin_x - origin_x_) / resolution_); + int cell_oy = int((new_origin_y - origin_y_) / resolution_); + + if (cell_ox == 0 && cell_oy == 0) + return; + + // Cập nhật lại gốc bản đồ mới (theo bội số của resolution) + double new_grid_ox = origin_x_ + cell_ox * resolution_; + double new_grid_oy = origin_y_ + cell_oy * resolution_; + + int size_x = size_x_; + int size_y = size_y_; + + // Tính vùng chồng lấn giữa bản đồ cũ và bản đồ mới + int lower_left_x = min(max(cell_ox, 0), size_x); + int lower_left_y = min(max(cell_oy, 0), size_y); + int upper_right_x = min(max(cell_ox + size_x, 0), size_x); + int upper_right_y = min(max(cell_oy + size_y, 0), size_y); + + unsigned int cell_size_x = upper_right_x - lower_left_x; + unsigned int cell_size_y = upper_right_y - lower_left_y; + + // Tạo bản đồ tạm để lưu phần chồng lấn + unsigned char* local_map = new unsigned char[cell_size_x * cell_size_y]; + copyMapRegion(costmap_, lower_left_x, lower_left_y, size_x_, + local_map, 0, 0, cell_size_x, cell_size_x, cell_size_y); + + resetMaps(); // Toàn bộ bản đồ được đặt lại giá trị mặc định + + origin_x_ = new_grid_ox; + origin_y_ = new_grid_oy; + + // Copy vùng chồng lấn vào vị trí mới + int start_x = lower_left_x - cell_ox; + int start_y = lower_left_y - cell_oy; + copyMapRegion(local_map, 0, 0, cell_size_x, + costmap_, start_x, start_y, size_x_, cell_size_x, cell_size_y); + + delete[] local_map; // Giải phóng vùng nhớ tạm +} + +/***************************************************** + * Đặt giá trị cost cho vùng đa giác lồi + * (ví dụ: để đánh dấu vùng cấm hoặc vùng obstacle) + *****************************************************/ +bool Costmap2D::setConvexPolygonCost(const std::vector& polygon, unsigned char cost_value) +{ + std::vector map_polygon; + for (unsigned int i = 0; i < polygon.size(); ++i) + { + MapLocation loc; + if (!worldToMap(polygon[i].x, polygon[i].y, loc.x, loc.y)) + return false; // Nếu một điểm nằm ngoài map + map_polygon.push_back(loc); + } + + std::vector polygon_cells; + convexFillCells(map_polygon, polygon_cells); // Lấy toàn bộ ô bên trong đa giác + + for (unsigned int i = 0; i < polygon_cells.size(); ++i) + costmap_[getIndex(polygon_cells[i].x, polygon_cells[i].y)] = cost_value; + + return true; +} + +/***************************************************** + * polygonOutlineCells(): + * - Tìm các ô nằm trên biên của đa giác + *****************************************************/ +void Costmap2D::polygonOutlineCells(const std::vector& polygon, + std::vector& polygon_cells) +{ + PolygonOutlineCells cell_gatherer(*this, costmap_, polygon_cells); + + for (unsigned int i = 0; i < polygon.size() - 1; ++i) + raytraceLine(cell_gatherer, polygon[i].x, polygon[i].y, polygon[i + 1].x, polygon[i + 1].y); + + if (!polygon.empty()) + { + unsigned int last_index = polygon.size() - 1; + // Nối điểm cuối với điểm đầu để khép kín đa giác + raytraceLine(cell_gatherer, polygon[last_index].x, polygon[last_index].y, + polygon[0].x, polygon[0].y); + } +} + +/***************************************************** + * convexFillCells(): + * - Điền đầy các ô bên trong một đa giác lồi + *****************************************************/ +void Costmap2D::convexFillCells(const std::vector& polygon, + std::vector& polygon_cells) +{ + if (polygon.size() < 3) // Ít hơn 3 điểm thì không tạo thành đa giác + return; + + polygonOutlineCells(polygon, polygon_cells); // Lấy biên ngoài + + // Sắp xếp theo trục X để dễ quét cột + MapLocation swap; + unsigned int i = 0; + while (i < polygon_cells.size() - 1) + { + if (polygon_cells[i].x > polygon_cells[i + 1].x) + { + swap = polygon_cells[i]; + polygon_cells[i] = polygon_cells[i + 1]; + polygon_cells[i + 1] = swap; + if (i > 0) --i; + } + else ++i; + } + + // Quét từng cột X để điền đầy Y + i = 0; + MapLocation min_pt, max_pt; + unsigned int min_x = polygon_cells[0].x; + unsigned int max_x = polygon_cells.back().x; + + for (unsigned int x = min_x; x <= max_x; ++x) + { + if (i >= polygon_cells.size() - 1) break; + + if (polygon_cells[i].y < polygon_cells[i + 1].y) + { + min_pt = polygon_cells[i]; + max_pt = polygon_cells[i + 1]; + } + else + { + min_pt = polygon_cells[i + 1]; + max_pt = polygon_cells[i]; } - void Costmap2D::deleteMaps() + i += 2; + while (i < polygon_cells.size() && polygon_cells[i].x == x) { - // clean up data - boost::unique_lock lock(*access_); - delete[] costmap_; - costmap_ = NULL; + if (polygon_cells[i].y < min_pt.y) + min_pt = polygon_cells[i]; + else if (polygon_cells[i].y > max_pt.y) + max_pt = polygon_cells[i]; + ++i; } - void Costmap2D::initMaps(unsigned int size_x, unsigned int size_y) - { - boost::unique_lock lock(*access_); - delete[] costmap_; - costmap_ = new unsigned char[size_x * size_y]; - } + // Điền đầy ô từ min_y đến max_y + for (unsigned int y = min_pt.y; y <= max_pt.y; ++y) + polygon_cells.push_back({x, y}); + } +} - unsigned char Costmap2D::getCost(unsigned int mx, unsigned int my) const - { - return costmap_[getIndex(mx, my)]; - } +/***************************************************** + * Các hàm getter cơ bản + *****************************************************/ +unsigned int Costmap2D::getSizeInCellsX() const { return size_x_; } +unsigned int Costmap2D::getSizeInCellsY() const { return size_y_; } +double Costmap2D::getSizeInMetersX() const { return (size_x_ - 1 + 0.5) * resolution_; } +double Costmap2D::getSizeInMetersY() const { return (size_y_ - 1 + 0.5) * resolution_; } +double Costmap2D::getOriginX() const { return origin_x_; } +double Costmap2D::getOriginY() const { return origin_y_; } +double Costmap2D::getResolution() const { return resolution_; } - void Costmap2D::setCost(unsigned int mx, unsigned int my, unsigned char cost) - { - costmap_[getIndex(mx, my)] = cost; - } +/***************************************************** + * Lưu costmap ra file PGM (grayscale) để debug + *****************************************************/ +bool Costmap2D::saveMap(std::string file_name) +{ + FILE *fp = fopen(file_name.c_str(), "w"); + if (!fp) + return false; - void Costmap2D::mapToWorld(unsigned int mx, unsigned int my, double& wx, double& wy) const - { - wx = origin_x_ + (mx + 0.5) * resolution_; - wy = origin_y_ + (my + 0.5) * resolution_; - } + fprintf(fp, "P2\n%u\n%u\n%u\n", size_x_, size_y_, 0xff); + for (unsigned int iy = 0; iy < size_y_; iy++) + { + for (unsigned int ix = 0; ix < size_x_; ix++) + fprintf(fp, "%d ", getCost(ix, iy)); + fprintf(fp, "\n"); + } + fclose(fp); + return true; +} - bool Costmap2D::worldToMap(double wx, double wy, unsigned int& mx, unsigned int& my) const - { - if (wx < origin_x_ || wy < origin_y_) - return false; - - mx = (int)((wx - origin_x_) / resolution_); - my = (int)((wy - origin_y_) / resolution_); - - if (mx < size_x_ && my < size_y_) - return true; - - return false; - } - - void Costmap2D::worldToMapNoBounds(double wx, double wy, int& mx, int& my) const - { - mx = (int)((wx - origin_x_) / resolution_); - my = (int)((wy - origin_y_) / resolution_); - } - -} \ No newline at end of file +} // namespace costmap_2d diff --git a/src/footprint.cpp b/src/footprint.cpp new file mode 100644 index 0000000..4767c79 --- /dev/null +++ b/src/footprint.cpp @@ -0,0 +1,325 @@ +/* + * Copyright (c) 2013, Willow Garage, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include +#include + +namespace costmap_2d +{ + +void calculateMinAndMaxDistances(const std::vector& footprint, double& min_dist, double& max_dist) +{ + min_dist = std::numeric_limits::max(); + max_dist = 0.0; + + if (footprint.size() <= 2) + { + return; + } + + for (unsigned int i = 0; i < footprint.size() - 1; ++i) + { + // check the distance from the robot center point to the first vertex + double vertex_dist = distance(0.0, 0.0, footprint[i].x, footprint[i].y); + double edge_dist = distanceToLine(0.0, 0.0, footprint[i].x, footprint[i].y, + footprint[i + 1].x, footprint[i + 1].y); + min_dist = std::min(min_dist, std::min(vertex_dist, edge_dist)); + max_dist = std::max(max_dist, std::max(vertex_dist, edge_dist)); + } + + // we also need to do the last vertex and the first vertex + double vertex_dist = distance(0.0, 0.0, footprint.back().x, footprint.back().y); + double edge_dist = distanceToLine(0.0, 0.0, footprint.back().x, footprint.back().y, + footprint.front().x, footprint.front().y); + min_dist = std::min(min_dist, std::min(vertex_dist, edge_dist)); + max_dist = std::max(max_dist, std::max(vertex_dist, edge_dist)); +} + +Point32 toPoint32(Point pt) +{ + Point32 point32; + point32.x = pt.x; + point32.y = pt.y; + point32.z = pt.z; + return point32; +} + +Point toPoint(Point32 pt) +{ + Point point; + point.x = pt.x; + point.y = pt.y; + point.z = pt.z; + return point; +} + +Polygon toPolygon(std::vector pts) +{ + Polygon polygon; + for (int i = 0; i < pts.size(); i++){ + polygon.points.push_back(toPoint32(pts[i])); + } + return polygon; +} + +std::vector toPointVector(Polygon polygon) +{ + std::vector pts; + for (int i = 0; i < polygon.points.size(); i++) + { + pts.push_back(toPoint(polygon.points[i])); + } + return pts; +} + +void transformFootprint(double x, double y, double theta, const std::vector& footprint_spec, + std::vector& oriented_footprint) +{ + // build the oriented footprint at a given location + oriented_footprint.clear(); + double cos_th = cos(theta); + double sin_th = sin(theta); + for (unsigned int i = 0; i < footprint_spec.size(); ++i) + { + Point new_pt; + new_pt.x = x + (footprint_spec[i].x * cos_th - footprint_spec[i].y * sin_th); + new_pt.y = y + (footprint_spec[i].x * sin_th + footprint_spec[i].y * cos_th); + oriented_footprint.push_back(new_pt); + } +} + +void transformFootprint(double x, double y, double theta, const std::vector& footprint_spec, + PolygonStamped& oriented_footprint) +{ + // build the oriented footprint at a given location + oriented_footprint.polygon.points.clear(); + double cos_th = cos(theta); + double sin_th = sin(theta); + for (unsigned int i = 0; i < footprint_spec.size(); ++i) + { + Point32 new_pt; + new_pt.x = x + (footprint_spec[i].x * cos_th - footprint_spec[i].y * sin_th); + new_pt.y = y + (footprint_spec[i].x * sin_th + footprint_spec[i].y * cos_th); + oriented_footprint.polygon.points.push_back(new_pt); + } +} + +void padFootprint(std::vector& footprint, double padding) +{ + // pad footprint in place + for (unsigned int i = 0; i < footprint.size(); i++) + { + Point& pt = footprint[ i ]; + pt.x += sign0(pt.x) * padding; + pt.y += sign0(pt.y) * padding; + } +} + + +std::vector makeFootprintFromRadius(double radius) +{ + std::vector points; + + // Loop over 16 angles around a circle making a point each time + int N = 16; + Point pt; + for (int i = 0; i < N; ++i) + { + double angle = i * 2 * M_PI / N; + pt.x = cos(angle) * radius; + pt.y = sin(angle) * radius; + + points.push_back(pt); + } + + return points; +} + + +bool makeFootprintFromString(const std::string& footprint_string, std::vector& footprint) +{ + std::string error; + std::vector > vvf = parseVVF(footprint_string, error); + + if (error != "") + { + std::printf("Error parsing footprint parameter: '%s'", error.c_str()); + std::printf(" Footprint string was '%s'.", footprint_string.c_str()); + return false; + } + + // convert vvf into points. + if (vvf.size() < 3) + { + std::printf("You must specify at least three points for the robot footprint, reverting to previous footprint."); + return false; + } + footprint.reserve(vvf.size()); + for (unsigned int i = 0; i < vvf.size(); i++) + { + if (vvf[ i ].size() == 2) + { + Point point; + point.x = vvf[ i ][ 0 ]; + point.y = vvf[ i ][ 1 ]; + point.z = 0; + footprint.push_back(point); + } + else + { + std::printf("Points in the footprint specification must be pairs of numbers. Found a point with %d numbers.", + int(vvf[ i ].size())); + return false; + } + } + + return true; +} + + + +// std::vector makeFootprintFromParams(ros::NodeHandle& nh) +// { +// std::string full_param_name; +// std::string full_radius_param_name; +// std::vector points; + +// if (nh.searchParam("footprint", full_param_name)) +// { +// XmlRpc::XmlRpcValue footprint_xmlrpc; +// nh.getParam(full_param_name, footprint_xmlrpc); +// if (footprint_xmlrpc.getType() == XmlRpc::XmlRpcValue::TypeString && +// footprint_xmlrpc != "" && footprint_xmlrpc != "[]") +// { +// if (makeFootprintFromString(std::string(footprint_xmlrpc), points)) +// { +// writeFootprintToParam(nh, points); +// return points; +// } +// } +// else if (footprint_xmlrpc.getType() == XmlRpc::XmlRpcValue::TypeArray) +// { +// points = makeFootprintFromXMLRPC(footprint_xmlrpc, full_param_name); +// writeFootprintToParam(nh, points); +// return points; +// } +// } + +// if (nh.searchParam("robot_radius", full_radius_param_name)) +// { +// double robot_radius; +// nh.param(full_radius_param_name, robot_radius, 1.234); +// points = makeFootprintFromRadius(robot_radius); +// nh.setParam("robot_radius", robot_radius); +// } +// // Else neither param was found anywhere this knows about, so +// // defaults will come from dynamic_reconfigure stuff, set in +// // cfg/Costmap2D.cfg and read in this file in reconfigureCB(). +// return points; +// } + +// void writeFootprintToParam(std::string& nh, const std::vector& footprint) +// { +// std::ostringstream oss; +// bool first = true; +// for (unsigned int i = 0; i < footprint.size(); i++) +// { +// Point p = footprint[ i ]; +// if (first) +// { +// oss << "[[" << p.x << "," << p.y << "]"; +// first = false; +// } +// else +// { +// oss << ",[" << p.x << "," << p.y << "]"; +// } +// } +// oss << "]"; +// nh.setParam("footprint", oss.str().c_str()); +// } + +// double getNumberFromXMLRPC(XmlRpc::XmlRpcValue& value, const std::string& full_param_name) +// { +// // Make sure that the value we're looking at is either a double or an int. +// if (value.getType() != XmlRpc::XmlRpcValue::TypeInt && +// value.getType() != XmlRpc::XmlRpcValue::TypeDouble) +// { +// std::string& value_string = value; +// std::printf("Values in the footprint specification (param %s) must be numbers. Found value %s.", +// full_param_name.c_str(), value_string.c_str()); +// throw std::runtime_error("Values in the footprint specification must be numbers"); +// } +// return value.getType() == XmlRpc::XmlRpcValue::TypeInt ? (int)(value) : (double)(value); +// } + +// std::vector makeFootprintFromXMLRPC(XmlRpcValue& footprint_xmlrpc, +// const std::string& full_param_name) +// { +// // Make sure we have an array of at least 3 elements. +// if (footprint_xmlrpc.getType() != XmlRpc::XmlRpcValue::TypeArray || +// footprint_xmlrpc.size() < 3) +// { +// std::printf("The footprint must be specified as list of lists on the parameter server, %s was specified as %s", +// full_param_name.c_str(), std::string(footprint_xmlrpc).c_str()); +// throw std::runtime_error("The footprint must be specified as list of lists on the parameter server with at least " +// "3 points eg: [[x1, y1], [x2, y2], ..., [xn, yn]]"); +// } + +// std::vector footprint; +// Point pt; + +// for (int i = 0; i < footprint_xmlrpc.size(); ++i) +// { +// // Make sure each element of the list is an array of size 2. (x and y coordinates) +// XmlRpc::XmlRpcValue point = footprint_xmlrpc[ i ]; +// if (point.getType() != XmlRpc::XmlRpcValue::TypeArray || +// point.size() != 2) +// { +// std::printf("The footprint (parameter %s) must be specified as list of lists on the parameter server eg: " +// "[[x1, y1], [x2, y2], ..., [xn, yn]], but this spec is not of that form.", +// full_param_name.c_str()); +// throw std::runtime_error("The footprint must be specified as list of lists on the parameter server eg: " +// "[[x1, y1], [x2, y2], ..., [xn, yn]], but this spec is not of that form"); +// } + +// pt.x = getNumberFromXMLRPC(point[ 0 ], full_param_name); +// pt.y = getNumberFromXMLRPC(point[ 1 ], full_param_name); + +// footprint.push_back(pt); +// } +// return footprint; +// } + +} // end namespace costmap_2d diff --git a/src/layer.cpp b/src/layer.cpp new file mode 100644 index 0000000..60e5afd --- /dev/null +++ b/src/layer.cpp @@ -0,0 +1,27 @@ +#include "costmap_2d/layer.h" + +namespace costmap_2d +{ + +Layer::Layer() + : layered_costmap_(NULL) + , current_(false) + , enabled_(false) + , name_() + , tf_(NULL) +{} + +void Layer::initialize(LayeredCostmap* parent, std::string name, std::shared_ptr *tf) +{ + layered_costmap_ = parent; + name_ = name; + tf_ = tf; + onInitialize(); +} + +const std::vector& Layer::getFootprint() const +{ + return layered_costmap_->getFootprint(); +} + +} // end namespace costmap_2d diff --git a/src/layered_costmap.cpp b/src/layered_costmap.cpp new file mode 100644 index 0000000..ba77b33 --- /dev/null +++ b/src/layered_costmap.cpp @@ -0,0 +1,153 @@ +#include +#include +#include +#include +#include +#include + +using std::vector; + +namespace costmap_2d +{ + + LayeredCostmap::LayeredCostmap(std::string global_frame, bool rolling_window, bool track_unknown) + : costmap_(), + global_frame_(global_frame), + rolling_window_(rolling_window), + current_(false), + minx_(0.0), + miny_(0.0), + maxx_(0.0), + maxy_(0.0), + bx0_(0), + bxn_(0), + by0_(0), + byn_(0), + initialized_(false), + size_locked_(false), + circumscribed_radius_(1.0), + inscribed_radius_(0.1) + { + if (track_unknown) + costmap_.setDefaultValue(NO_INFORMATION); + else + costmap_.setDefaultValue(FREE_SPACE); + } + + LayeredCostmap::~LayeredCostmap() + { + while (plugins_.size() > 0) + { + plugins_.pop_back(); + } + } + + void LayeredCostmap::resizeMap(unsigned int size_x, unsigned int size_y, double resolution, double origin_x, + double origin_y, bool size_locked) + { + boost::unique_lock lock(*(costmap_.getMutex())); + size_locked_ = size_locked; + costmap_.resizeMap(size_x, size_y, resolution, origin_x, origin_y); + for (vector>::iterator plugin = plugins_.begin(); plugin != plugins_.end(); + ++plugin) + { + (*plugin)->matchSize(); + } + } + + void LayeredCostmap::updateMap(double robot_x, double robot_y, double robot_yaw) + { + // Lock for the remainder of this function, some plugins (e.g. VoxelLayer) + // implement thread unsafe updateBounds() functions. + boost::unique_lock lock(*(costmap_.getMutex())); + + // if we're using a rolling buffer costmap... we need to update the origin using the robot's position + if (rolling_window_) + { + double new_origin_x = robot_x - costmap_.getSizeInMetersX() / 2; + double new_origin_y = robot_y - costmap_.getSizeInMetersY() / 2; + costmap_.updateOrigin(new_origin_x, new_origin_y); + } + + if (plugins_.size() == 0) + return; + + minx_ = miny_ = 1e30; + maxx_ = maxy_ = -1e30; + + for (vector>::iterator plugin = plugins_.begin(); plugin != plugins_.end(); + ++plugin) + { + if (!(*plugin)->isEnabled()) + continue; + double prev_minx = minx_; + double prev_miny = miny_; + double prev_maxx = maxx_; + double prev_maxy = maxy_; + (*plugin)->updateBounds(robot_x, robot_y, robot_yaw, &minx_, &miny_, &maxx_, &maxy_); + if (minx_ > prev_minx || miny_ > prev_miny || maxx_ < prev_maxx || maxy_ < prev_maxy) + { + std::printf("Illegal bounds change, was [tl: (%f, %f), br: (%f, %f)], but " + "is now [tl: (%f, %f), br: (%f, %f)]. The offending layer is %s", + prev_minx, prev_miny, prev_maxx, prev_maxy, + minx_, miny_, maxx_, maxy_, + (*plugin)->getName().c_str()); + } + } + + int x0, xn, y0, yn; + costmap_.worldToMapEnforceBounds(minx_, miny_, x0, y0); + costmap_.worldToMapEnforceBounds(maxx_, maxy_, xn, yn); + + x0 = std::max(0, x0); + xn = std::min(int(costmap_.getSizeInCellsX()), xn + 1); + y0 = std::max(0, y0); + yn = std::min(int(costmap_.getSizeInCellsY()), yn + 1); + + std::printf("Updating area x: [%d, %d] y: [%d, %d]", x0, xn, y0, yn); + + if (xn < x0 || yn < y0) + return; + + costmap_.resetMap(x0, y0, xn, yn); + + for (vector>::iterator plugin = plugins_.begin(); plugin != plugins_.end(); + ++plugin) + { + if ((*plugin)->isEnabled()) + (*plugin)->updateCosts(costmap_, x0, y0, xn, yn); + } + + bx0_ = x0; + bxn_ = xn; + by0_ = y0; + byn_ = yn; + + initialized_ = true; + } + + bool LayeredCostmap::isCurrent() + { + current_ = true; + for (vector>::iterator plugin = plugins_.begin(); plugin != plugins_.end(); + ++plugin) + { + if ((*plugin)->isEnabled()) + current_ = current_ && (*plugin)->isCurrent(); + } + return current_; + } + + void LayeredCostmap::setFootprint(const std::vector &footprint_spec) + { + footprint_ = footprint_spec; + costmap_2d::calculateMinAndMaxDistances(footprint_spec, inscribed_radius_, circumscribed_radius_); + + for (vector>::iterator plugin = plugins_.begin(); plugin != plugins_.end(); + ++plugin) + { + (*plugin)->onFootprintChanged(); + } + } + +} // namespace costmap_2d diff --git a/src/observation_buffer.cpp b/src/observation_buffer.cpp new file mode 100644 index 0000000..06fb38e --- /dev/null +++ b/src/observation_buffer.cpp @@ -0,0 +1,251 @@ +/********************************************************************* + * + * Software License Agreement (BSD License) + * + * Copyright (c) 2008, 2013, Willow Garage, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Willow Garage, Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * Author: Eitan Marder-Eppstein + *********************************************************************/ +#include + +#include +#include +#include + +using namespace std; +using namespace tf2; + +namespace costmap_2d +{ +ObservationBuffer::ObservationBuffer(string topic_name, double observation_keep_time, double expected_update_rate, + double min_obstacle_height, double max_obstacle_height, double obstacle_range, + double raytrace_range, tf2_ros::Buffer& tf2_buffer, string global_frame, + string sensor_frame, double tf_tolerance) : + tf2_buffer_(tf2_buffer), observation_keep_time_(observation_keep_time), expected_update_rate_(expected_update_rate), + last_updated_(ros::Time::now()), global_frame_(global_frame), sensor_frame_(sensor_frame), topic_name_(topic_name), + min_obstacle_height_(min_obstacle_height), max_obstacle_height_(max_obstacle_height), + obstacle_range_(obstacle_range), raytrace_range_(raytrace_range), tf_tolerance_(tf_tolerance) +{ +} + +ObservationBuffer::~ObservationBuffer() +{ +} + +bool ObservationBuffer::setGlobalFrame(const std::string new_global_frame) +{ + ros::Time transform_time = ros::Time::now(); + std::string tf_error; + + geometry_msgs::TransformStamped transformStamped; + if (!tf2_buffer_.canTransform(new_global_frame, global_frame_, transform_time, ros::Duration(tf_tolerance_), &tf_error)) + { + ROS_ERROR("Transform between %s and %s with tolerance %.2f failed: %s.", new_global_frame.c_str(), + global_frame_.c_str(), tf_tolerance_, tf_error.c_str()); + return false; + } + + list::iterator obs_it; + for (obs_it = observation_list_.begin(); obs_it != observation_list_.end(); ++obs_it) + { + try + { + Observation& obs = *obs_it; + + geometry_msgs::PointStamped origin; + origin.header.frame_id = global_frame_; + origin.header.stamp = transform_time; + origin.point = obs.origin_; + + // we need to transform the origin of the observation to the new global frame + tf2_buffer_.transform(origin, origin, new_global_frame); + obs.origin_ = origin.point; + + // we also need to transform the cloud of the observation to the new global frame + tf2_buffer_.transform(*(obs.cloud_), *(obs.cloud_), new_global_frame); + } + catch (TransformException& ex) + { + ROS_ERROR("TF Error attempting to transform an observation from %s to %s: %s", global_frame_.c_str(), + new_global_frame.c_str(), ex.what()); + return false; + } + } + + // now we need to update our global_frame member + global_frame_ = new_global_frame; + return true; +} + +void ObservationBuffer::bufferCloud(const sensor_msgs::PointCloud2& cloud) +{ + geometry_msgs::PointStamped global_origin; + + // create a new observation on the list to be populated + observation_list_.push_front(Observation()); + + // check whether the origin frame has been set explicitly or whether we should get it from the cloud + string origin_frame = sensor_frame_ == "" ? cloud.header.frame_id : sensor_frame_; + + try + { + // given these observations come from sensors... we'll need to store the origin pt of the sensor + geometry_msgs::PointStamped local_origin; + local_origin.header.stamp = cloud.header.stamp; + local_origin.header.frame_id = origin_frame; + local_origin.point.x = 0; + local_origin.point.y = 0; + local_origin.point.z = 0; + tf2_buffer_.transform(local_origin, global_origin, global_frame_); + tf2::convert(global_origin.point, observation_list_.front().origin_); + + // make sure to pass on the raytrace/obstacle range of the observation buffer to the observations + observation_list_.front().raytrace_range_ = raytrace_range_; + observation_list_.front().obstacle_range_ = obstacle_range_; + + sensor_msgs::PointCloud2 global_frame_cloud; + + // transform the point cloud + tf2_buffer_.transform(cloud, global_frame_cloud, global_frame_); + global_frame_cloud.header.stamp = cloud.header.stamp; + + // now we need to remove observations from the cloud that are below or above our height thresholds + sensor_msgs::PointCloud2& observation_cloud = *(observation_list_.front().cloud_); + observation_cloud.height = global_frame_cloud.height; + observation_cloud.width = global_frame_cloud.width; + observation_cloud.fields = global_frame_cloud.fields; + observation_cloud.is_bigendian = global_frame_cloud.is_bigendian; + observation_cloud.point_step = global_frame_cloud.point_step; + observation_cloud.row_step = global_frame_cloud.row_step; + observation_cloud.is_dense = global_frame_cloud.is_dense; + + unsigned int cloud_size = global_frame_cloud.height*global_frame_cloud.width; + sensor_msgs::PointCloud2Modifier modifier(observation_cloud); + modifier.resize(cloud_size); + unsigned int point_count = 0; + + // copy over the points that are within our height bounds + sensor_msgs::PointCloud2Iterator iter_z(global_frame_cloud, "z"); + std::vector::const_iterator iter_global = global_frame_cloud.data.begin(), iter_global_end = global_frame_cloud.data.end(); + std::vector::iterator iter_obs = observation_cloud.data.begin(); + for (; iter_global != iter_global_end; ++iter_z, iter_global += global_frame_cloud.point_step) + { + if ((*iter_z) <= max_obstacle_height_ + && (*iter_z) >= min_obstacle_height_) + { + std::copy(iter_global, iter_global + global_frame_cloud.point_step, iter_obs); + iter_obs += global_frame_cloud.point_step; + ++point_count; + } + } + + // resize the cloud for the number of legal points + modifier.resize(point_count); + observation_cloud.header.stamp = cloud.header.stamp; + observation_cloud.header.frame_id = global_frame_cloud.header.frame_id; + } + catch (TransformException& ex) + { + // if an exception occurs, we need to remove the empty observation from the list + observation_list_.pop_front(); + ROS_ERROR("TF Exception that should never happen for sensor frame: %s, cloud frame: %s, %s", sensor_frame_.c_str(), + cloud.header.frame_id.c_str(), ex.what()); + return; + } + + // if the update was successful, we want to update the last updated time + last_updated_ = ros::Time::now(); + + // we'll also remove any stale observations from the list + purgeStaleObservations(); +} + +// returns a copy of the observations +void ObservationBuffer::getObservations(vector& observations) +{ + // first... let's make sure that we don't have any stale observations + purgeStaleObservations(); + + // now we'll just copy the observations for the caller + list::iterator obs_it; + for (obs_it = observation_list_.begin(); obs_it != observation_list_.end(); ++obs_it) + { + observations.push_back(*obs_it); + } +} + +void ObservationBuffer::purgeStaleObservations() +{ + if (!observation_list_.empty()) + { + list::iterator obs_it = observation_list_.begin(); + // if we're keeping observations for no time... then we'll only keep one observation + if (observation_keep_time_ == ros::Duration(0.0)) + { + observation_list_.erase(++obs_it, observation_list_.end()); + return; + } + + // otherwise... we'll have to loop through the observations to see which ones are stale + for (obs_it = observation_list_.begin(); obs_it != observation_list_.end(); ++obs_it) + { + Observation& obs = *obs_it; + // check if the observation is out of date... and if it is, remove it and those that follow from the list + if ((last_updated_ - obs.cloud_->header.stamp) > observation_keep_time_) + { + observation_list_.erase(obs_it, observation_list_.end()); + return; + } + } + } +} + +bool ObservationBuffer::isCurrent() const +{ + if (expected_update_rate_ == ros::Duration(0.0)) + return true; + + bool current = (ros::Time::now() - last_updated_).toSec() <= expected_update_rate_.toSec(); + if (!current) + { + ROS_WARN( + "The %s observation buffer has not been updated for %.2f seconds, and it should be updated every %.2f seconds.", + topic_name_.c_str(), (ros::Time::now() - last_updated_).toSec(), expected_update_rate_.toSec()); + } + return current; +} + +void ObservationBuffer::resetLastUpdated() +{ + last_updated_ = ros::Time::now(); +} +} // namespace costmap_2d +