mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-02 01:20:25 +08:00
* update cuvslam api call to adhere to new v4.0 changes * update comment * parse cuvslam major version from the header and throw an error if theversion doesn't match the expected * moving average filter + extensive debug logging * lots more logs * improvement by turning off use_motion_model in cuvslam config. lots of debug logs. * slight improvements to velocity guard logic. lots of debug logs * removing debug logs. working. * let find_package_handle_standard_args handle the version comparison logic. Custom logic to handle newer then requested major version * proper warning message if the major version doesn't match * add back debug logs. Handle no guess transform case. * adding warnings when no guess transform is provided * clean up comments * lowering average window to 5 * moderate odometry mode, 5 value averaging window * adding comment * add reset logs to investigate reset issue * try returning guess or identity on init to avoid reset cascade * disable motion model again * big log when tracking * remove some debug logs * flag to use original covariance from cuVSLAM * use raw covariance * data collection for revised lost detection * compare guess to estimated transform for lost detection * re-enable motion model, it appears to reduce false-positives for the new lost detection * run pose estimation afer init on first frame * don't initialize if we don't have enough features * dont warm up GPU everytime we reset * low estimate velocity guard. Passes all challenges. Debug comments still everywhere. * Remove debug logs. Add thresholds to header in a config section. * Cleanup logs * exposing multi-cam mode as a rtabmap param * remove max frame delta * change to use assertion instead of conditional * replaced some UERROR by UWARN --------- Co-authored-by: Felix Toft <felix@robust.ai> Co-authored-by: matlabbe <matlabbe@gmail.com>
106 lines
4.3 KiB
CMake
106 lines
4.3 KiB
CMake
# - Find cuVSLAM library (https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_visual_slam)
|
|
#
|
|
# CUVSLAM_ROOT_DIR environment variable can be set to find the library.
|
|
#
|
|
# It sets the following variables:
|
|
# CUVSLAM_FOUND - Set to false, or undefined, if cuVSLAM isn't found.
|
|
# CUVSLAM_VERSION - The version of cuVSLAM found (e.g., "14.0.0").
|
|
# CUVSLAM_INCLUDE_DIRS - The cuVSLAM include directory.
|
|
# CUVSLAM_LIBRARIES - The cuVSLAM library to link against.
|
|
|
|
find_package(CUDA REQUIRED)
|
|
find_package(Eigen3 REQUIRED)
|
|
|
|
find_path(CUVSLAM_INCLUDE_DIRS
|
|
NAMES cuvslam.h
|
|
PATHS
|
|
/usr/include
|
|
/usr/local/include
|
|
/opt/cuvslam/include
|
|
/opt/ros/humble/share/isaac_ros_nitros/cuvslam/include
|
|
$ENV{CUVSLAM_ROOT}/include
|
|
$ENV{CUVSLAM_ROOT_DIR}/include
|
|
)
|
|
|
|
find_library(CUVSLAM_LIBRARY
|
|
NAMES cuvslam
|
|
PATHS
|
|
/usr/lib
|
|
/usr/local/lib
|
|
/opt/cuvslam/lib
|
|
/opt/ros/humble/share/isaac_ros_nitros/cuvslam/lib
|
|
$ENV{CUVSLAM_ROOT}/lib
|
|
$ENV{CUVSLAM_ROOT_DIR}/lib
|
|
)
|
|
|
|
if(CUVSLAM_INCLUDE_DIRS AND CUVSLAM_LIBRARY)
|
|
# Extract version from cuvslam.h header
|
|
file(STRINGS "${CUVSLAM_INCLUDE_DIRS}/cuvslam.h" CUVSLAM_VERSION_MAJOR_LINE
|
|
REGEX "^#define CUVSLAM_API_VERSION_MAJOR")
|
|
file(STRINGS "${CUVSLAM_INCLUDE_DIRS}/cuvslam.h" CUVSLAM_VERSION_MINOR_LINE
|
|
REGEX "^#define CUVSLAM_API_VERSION_MINOR")
|
|
|
|
if(CUVSLAM_VERSION_MAJOR_LINE AND CUVSLAM_VERSION_MINOR_LINE)
|
|
string(REGEX MATCH "[0-9]+" CUVSLAM_VERSION_MAJOR "${CUVSLAM_VERSION_MAJOR_LINE}")
|
|
string(REGEX MATCH "[0-9]+" CUVSLAM_VERSION_MINOR "${CUVSLAM_VERSION_MINOR_LINE}")
|
|
set(CUVSLAM_VERSION "${CUVSLAM_VERSION_MAJOR}.${CUVSLAM_VERSION_MINOR}.0")
|
|
endif()
|
|
|
|
set(CUVSLAM_LIBRARIES
|
|
${CUVSLAM_LIBRARY}
|
|
${CUDA_LIBRARIES}
|
|
# Eigen3 is header-only, so we don't need to link to it
|
|
)
|
|
set(CUVSLAM_INCLUDE_DIRS
|
|
${CUVSLAM_INCLUDE_DIRS}
|
|
${CUDA_INCLUDE_DIRS}
|
|
${EIGEN3_INCLUDE_DIR}
|
|
)
|
|
endif()
|
|
|
|
# Version compatibility check - cuVSLAM only guarantees API compatibility within the same major version
|
|
set(CUVSLAM_VERSION_MISMATCH_REASON "")
|
|
if(CuVSLAM_FIND_VERSION AND CUVSLAM_VERSION)
|
|
string(REGEX MATCH "^[0-9]+" REQUESTED_MAJOR_VERSION "${CuVSLAM_FIND_VERSION}")
|
|
if(NOT CUVSLAM_VERSION_MAJOR EQUAL REQUESTED_MAJOR_VERSION)
|
|
set(CUVSLAM_VERSION_MISMATCH_REASON "Major version mismatch: found ${CUVSLAM_VERSION_MAJOR}.x but requested ${REQUESTED_MAJOR_VERSION}.x.\ncuVSLAM only guarantees API compatibility within the same major version.\nPlease install cuVSLAM ${REQUESTED_MAJOR_VERSION}.x or update CMakeLists.txt to request version ${CUVSLAM_VERSION_MAJOR}.0.0")
|
|
|
|
if(CuVSLAM_FIND_REQUIRED)
|
|
message(FATAL_ERROR
|
|
"cuVSLAM major version mismatch: found version ${CUVSLAM_VERSION} but version ${CuVSLAM_FIND_VERSION} is required.\n"
|
|
"cuVSLAM only guarantees API compatibility within the same major version.\n"
|
|
"Found major version ${CUVSLAM_VERSION_MAJOR} is not compatible with requested major version ${REQUESTED_MAJOR_VERSION}.\n"
|
|
"Please install cuVSLAM ${REQUESTED_MAJOR_VERSION}.x or update CMakeLists.txt to request version ${CUVSLAM_VERSION_MAJOR}.x."
|
|
)
|
|
else()
|
|
# Clear the found variables to indicate incompatibility
|
|
unset(CUVSLAM_LIBRARIES)
|
|
unset(CUVSLAM_INCLUDE_DIRS)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
# Handle the QUIET and REQUIRED arguments
|
|
include(FindPackageHandleStandardArgs)
|
|
find_package_handle_standard_args(CuVSLAM
|
|
FOUND_VAR CUVSLAM_FOUND
|
|
REQUIRED_VARS CUVSLAM_LIBRARIES CUVSLAM_INCLUDE_DIRS
|
|
VERSION_VAR CUVSLAM_VERSION
|
|
REASON_FAILURE_MESSAGE "${CUVSLAM_VERSION_MISMATCH_REASON}"
|
|
HANDLE_COMPONENTS
|
|
)
|
|
|
|
if(CUVSLAM_FOUND)
|
|
# Create imported target for modern CMake usage
|
|
if(NOT TARGET cuvslam::cuvslam)
|
|
add_library(cuvslam::cuvslam UNKNOWN IMPORTED)
|
|
set_target_properties(cuvslam::cuvslam PROPERTIES
|
|
IMPORTED_LOCATION "${CUVSLAM_LIBRARY}"
|
|
INTERFACE_INCLUDE_DIRECTORIES "${CUVSLAM_INCLUDE_DIRS}"
|
|
INTERFACE_LINK_LIBRARIES "${CUVSLAM_LIBRARIES};Eigen3::Eigen"
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
mark_as_advanced(CUVSLAM_INCLUDE_DIRS CUVSLAM_LIBRARY)
|