diff --git a/.devcontainer/humble/devcontainer.json b/.devcontainer/humble/devcontainer.json index a1666586..96db65bc 100644 --- a/.devcontainer/humble/devcontainer.json +++ b/.devcontainer/humble/devcontainer.json @@ -22,6 +22,18 @@ }, "workspaceMount": "source=${localWorkspaceFolder},target=/home/vscode/ros2_ws/src/rtabmap_ros,type=bind", "workspaceFolder": "/home/vscode/ros2_ws", - "postCreateCommand": "echo 'Initialize: export MAKEFLAGS=\"-j6\" && colcon build --cmake-args -DRTABMAP_SYNC_MULTI_RGBD=ON -DCMAKE_BUILD_TYPE=Release --parallel-workers 2'" - //"runArgs": ["--privileged", "--runtime=nvidia", "--network=host"] + "postCreateCommand": "sudo rosdep init && rosdep update && sudo apt update && rosdep install --from-paths ~/ros2_ws/src/rtabmap_ros -i --skip-keys=rtabmap -y && echo 'Initialize: export MAKEFLAGS=\"-j6\" && colcon build --cmake-args -DRTABMAP_SYNC_MULTI_RGBD=ON -DCMAKE_BUILD_TYPE=Release --parallel-workers 2'", + "hostRequirements": { + "gpu": "optional" + }, + "runArgs": ["--privileged", + "--network=host", + "--gpus=all", + //"--runtime=nvidia", // uncommment this if rtabmap doesn't show up in nvidia-smi on the host computer + "--env=DISPLAY", + "--env=QT_X11_NO_MITSHM=1", + "--volume=/tmp/.X11-unix:/tmp/.X11-unix"], + "containerEnv": { + "NVIDIA_VISIBLE_DEVICES": "all" + } } diff --git a/.devcontainer/jazzy/devcontainer.json b/.devcontainer/jazzy/devcontainer.json index 3cff6f58..447b63a9 100644 --- a/.devcontainer/jazzy/devcontainer.json +++ b/.devcontainer/jazzy/devcontainer.json @@ -22,7 +22,7 @@ }, "workspaceMount": "source=${localWorkspaceFolder},target=/home/vscode/ros2_ws/src/rtabmap_ros,type=bind", "workspaceFolder": "/home/vscode/ros2_ws", - "postCreateCommand": "echo 'Initialize: export MAKEFLAGS=\"-j6\" && colcon build --cmake-args -DRTABMAP_SYNC_MULTI_RGBD=ON -DCMAKE_BUILD_TYPE=Release --parallel-workers 2'", + "postCreateCommand": "sudo rosdep init && rosdep update && sudo apt update && rosdep install --from-paths ~/ros2_ws/src/rtabmap_ros -i --skip-keys=rtabmap -y && echo 'Initialize: export MAKEFLAGS=\"-j6\" && colcon build --cmake-args -DRTABMAP_SYNC_MULTI_RGBD=ON -DCMAKE_BUILD_TYPE=Release --parallel-workers 2'", "hostRequirements": { "gpu": "optional" }, diff --git a/.devcontainer/kilted/devcontainer.json b/.devcontainer/kilted/devcontainer.json index 6176ee77..bc93b422 100644 --- a/.devcontainer/kilted/devcontainer.json +++ b/.devcontainer/kilted/devcontainer.json @@ -22,6 +22,18 @@ }, "workspaceMount": "source=${localWorkspaceFolder},target=/home/vscode/ros2_ws/src/rtabmap_ros,type=bind", "workspaceFolder": "/home/vscode/ros2_ws", - "postCreateCommand": "echo 'Initialize: export MAKEFLAGS=\"-j6\" && colcon build --cmake-args -DRTABMAP_SYNC_MULTI_RGBD=ON -DCMAKE_BUILD_TYPE=Release --parallel-workers 2'" - //"runArgs": ["--privileged", "--runtime=nvidia", "--network=host"] + "postCreateCommand": "sudo rosdep init && rosdep update && sudo apt update && rosdep install --from-paths ~/ros2_ws/src/rtabmap_ros -i --skip-keys=rtabmap -y && echo 'Initialize: export MAKEFLAGS=\"-j6\" && colcon build --cmake-args -DRTABMAP_SYNC_MULTI_RGBD=ON -DCMAKE_BUILD_TYPE=Release --parallel-workers 2'", + "hostRequirements": { + "gpu": "optional" + }, + "runArgs": ["--privileged", + "--network=host", + "--gpus=all", + //"--runtime=nvidia", // uncommment this if rtabmap doesn't show up in nvidia-smi on the host computer + "--env=DISPLAY", + "--env=QT_X11_NO_MITSHM=1", + "--volume=/tmp/.X11-unix:/tmp/.X11-unix"], + "containerEnv": { + "NVIDIA_VISIBLE_DEVICES": "all" + } } diff --git a/.github/workflows/ros2.yml b/.github/workflows/ros2.yml index 715f5f3f..538949a2 100644 --- a/.github/workflows/ros2.yml +++ b/.github/workflows/ros2.yml @@ -10,6 +10,10 @@ on: env: BUILD_TYPE: Release +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: ${{ github.event_name == 'pull_request' }} + jobs: build: name: Build ros2 ${{ matrix.ros_distro }} @@ -39,6 +43,10 @@ jobs: - uses: ros-tooling/setup-ros@v0.7 with: required-ros-distributions: ${{ matrix.ros_distro }} + - run: | + DEBIAN_FRONTEND=noninteractive + sudo apt update + sudo apt upgrade -y - run: | echo "repositories:\n introlab/rtabmap:\n type: git\n url: https://github.com/introlab/rtabmap.git\n version: master\n" > /tmp/deps.repos &&\ cat /tmp/deps.repos diff --git a/rtabmap_conversions/CMakeLists.txt b/rtabmap_conversions/CMakeLists.txt index 11b82f62..4dc41907 100644 --- a/rtabmap_conversions/CMakeLists.txt +++ b/rtabmap_conversions/CMakeLists.txt @@ -28,15 +28,30 @@ find_package(std_msgs REQUIRED) find_package(tf2 REQUIRED) find_package(tf2_eigen REQUIRED) find_package(tf2_geometry_msgs REQUIRED) +find_package(tf2_ros REQUIRED) find_package(RTABMap 0.23.5 REQUIRED) -include_directories( - ${CMAKE_CURRENT_SOURCE_DIR}/include -) - # libraries SET(Libraries + image_geometry::image_geometry + laser_geometry::laser_geometry + pcl_conversions::pcl_conversions + std_msgs::std_msgs + tf2::tf2 + tf2_eigen::tf2_eigen + tf2_geometry_msgs::tf2_geometry_msgs +) +SET(PublicLibraries + sensor_msgs::sensor_msgs + geometry_msgs::geometry_msgs + rtabmap_msgs::rtabmap_msgs + rclcpp::rclcpp + rtabmap::core + cv_bridge::cv_bridge + tf2_ros::tf2_ros +) +SET(AmentLibraries cv_bridge geometry_msgs image_geometry @@ -74,7 +89,11 @@ target_include_directories(rtabmap_conversions $ $ ) -ament_target_dependencies(rtabmap_conversions ${Libraries}) +if("$ENV{ROS_DISTRO}" STRLESS "lyrical") + ament_target_dependencies(rtabmap_conversions ${AmentLibraries}) +ELSE() + target_link_libraries(rtabmap_conversions PRIVATE ${Libraries} PUBLIC ${PublicLibraries}) +ENDIF() IF("$ENV{ROS_DISTRO}" STRLESS "iron") target_compile_definitions(rtabmap_conversions PUBLIC -DPRE_ROS_IRON -DPRE_ROS_KILTED) @@ -85,8 +104,7 @@ ENDIF() ############# ## Install ## ############# - -ament_export_dependencies(${Libraries}) +ament_export_dependencies(${AmentLibraries}) ament_export_include_directories(include) ament_export_targets(${PROJECT_NAME}) # To include downstream with targets ament_export_libraries(rtabmap_conversions) # To include downstream without targets diff --git a/rtabmap_conversions/package.xml b/rtabmap_conversions/package.xml index a0c94b20..33c3fb7a 100644 --- a/rtabmap_conversions/package.xml +++ b/rtabmap_conversions/package.xml @@ -28,6 +28,7 @@ tf2 tf2_eigen tf2_geometry_msgs + tf2_ros ament_cmake diff --git a/rtabmap_costmap_plugins/CMakeLists.txt b/rtabmap_costmap_plugins/CMakeLists.txt index 390fa065..d592a057 100644 --- a/rtabmap_costmap_plugins/CMakeLists.txt +++ b/rtabmap_costmap_plugins/CMakeLists.txt @@ -16,6 +16,12 @@ include_directories( ) SET(Libraries + pluginlib::pluginlib + rclcpp::rclcpp + nav2_costmap_2d::layers + visualization_msgs::visualization_msgs +) +SET(AmentLibraries pluginlib rclcpp nav2_costmap_2d @@ -35,11 +41,16 @@ target_include_directories(rtabmap_costmap_plugins $ ) -IF("$ENV{ROS_DISTRO}" STRLESS "jazzy") - target_compile_definitions(rtabmap_costmap_plugins PRIVATE -DPRE_ROS_JAZZY) +IF("$ENV{ROS_DISTRO}" STRLESS "lyrical") + IF("$ENV{ROS_DISTRO}" STRLESS "jazzy") + target_compile_definitions(rtabmap_costmap_plugins PRIVATE -DPRE_ROS_JAZZY) + ENDIF() + ament_target_dependencies(rtabmap_costmap_plugins ${AmentLibraries}) +ELSE() + target_link_libraries(rtabmap_costmap_plugins PRIVATE ${Libraries}) ENDIF() -ament_target_dependencies(rtabmap_costmap_plugins ${Libraries}) + # Causes the visibility macros to use dllexport rather than dllimport, # which is appropriate when building the dll but not consuming it. @@ -51,14 +62,17 @@ target_compile_definitions(rtabmap_costmap_plugins PUBLIC "PLUGINLIB__DISABLE_BO pluginlib_export_plugin_description_file(nav2_costmap_2d costmap_plugins.xml) add_executable(rtabmap_costmap_voxel_marker src/voxel_marker.cpp) -ament_target_dependencies(rtabmap_costmap_voxel_marker ${Libraries}) +IF("$ENV{ROS_DISTRO}" STRLESS "lyrical") + ament_target_dependencies(rtabmap_costmap_voxel_marker ${AmentLibraries}) +ELSE() + target_link_libraries(rtabmap_costmap_voxel_marker PRIVATE ${Libraries}) +ENDIF() set_target_properties(rtabmap_costmap_voxel_marker PROPERTIES OUTPUT_NAME "voxel_marker") ############# ## Install ## ############# - -ament_export_dependencies(${Libraries}) +ament_export_dependencies(${AmentLibraries}) ament_export_include_directories(include) ament_export_targets(${PROJECT_NAME}) # To include downstream with targets ament_export_libraries(rtabmap_costmap_plugins) # To include downstream without targets diff --git a/rtabmap_odom/CMakeLists.txt b/rtabmap_odom/CMakeLists.txt index 96130502..129810c1 100644 --- a/rtabmap_odom/CMakeLists.txt +++ b/rtabmap_odom/CMakeLists.txt @@ -41,7 +41,25 @@ include_directories( ) SET(Libraries + cv_bridge::cv_bridge + rclcpp_components::component + image_geometry::image_geometry + laser_geometry::laser_geometry + message_filters::message_filters + pcl_conversions::pcl_conversions +) +SET(PublicLibraries + rclcpp::rclcpp + sensor_msgs::sensor_msgs + nav_msgs::nav_msgs + rtabmap_conversions::rtabmap_conversions + rtabmap_msgs::rtabmap_msgs + rtabmap_util::rtabmap_util + rtabmap_sync::rtabmap_sync +) +SET(AmentLibraries cv_bridge + rclcpp_components image_geometry laser_geometry message_filters @@ -81,10 +99,13 @@ target_include_directories(rtabmap_odom ) add_library(rtabmap_odom_plugins SHARED ${rtabmap_odom_plugins_lib_src}) -ament_target_dependencies(rtabmap_odom ${Libraries}) -ament_target_dependencies(rtabmap_odom_plugins ${Libraries}) - -target_link_libraries(rtabmap_odom_plugins rtabmap_odom) +if("$ENV{ROS_DISTRO}" STRLESS "lyrical") + ament_target_dependencies(rtabmap_odom ${AmentLibraries}) +else() + target_link_libraries(rtabmap_odom PRIVATE ${Libraries} PUBLIC ${PublicLibraries}) + target_link_libraries(rtabmap_odom_plugins PUBLIC ${Libraries}) +endif() +target_link_libraries(rtabmap_odom_plugins PUBLIC rtabmap_odom) rclcpp_components_register_nodes(rtabmap_odom_plugins "rtabmap_odom::RGBDOdometry") rclcpp_components_register_nodes(rtabmap_odom_plugins "rtabmap_odom::StereoOdometry") @@ -92,25 +113,21 @@ rclcpp_components_register_nodes(rtabmap_odom_plugins "rtabmap_odom::ICPOdometry add_executable(rtabmap_rgbd_odometry src/RGBDOdometryNode.cpp) -ament_target_dependencies(rtabmap_rgbd_odometry ${Libraries}) -target_link_libraries(rtabmap_rgbd_odometry rtabmap_odom_plugins) +target_link_libraries(rtabmap_rgbd_odometry PRIVATE rtabmap_odom_plugins) set_target_properties(rtabmap_rgbd_odometry PROPERTIES OUTPUT_NAME "rgbd_odometry") add_executable(rtabmap_stereo_odometry src/StereoOdometryNode.cpp) -ament_target_dependencies(rtabmap_stereo_odometry ${Libraries}) -target_link_libraries(rtabmap_stereo_odometry rtabmap_odom_plugins) +target_link_libraries(rtabmap_stereo_odometry PRIVATE rtabmap_odom_plugins) set_target_properties(rtabmap_stereo_odometry PROPERTIES OUTPUT_NAME "stereo_odometry") add_executable(rtabmap_icp_odometry src/ICPOdometryNode.cpp) -ament_target_dependencies(rtabmap_icp_odometry ${Libraries}) -target_link_libraries(rtabmap_icp_odometry rtabmap_odom_plugins) +target_link_libraries(rtabmap_icp_odometry PRIVATE rtabmap_odom_plugins) set_target_properties(rtabmap_icp_odometry PROPERTIES OUTPUT_NAME "icp_odometry") ############# ## Install ## ############# - -ament_export_dependencies(${Libraries}) +ament_export_dependencies(${AmentLibraries}) ament_export_include_directories(include) ament_export_targets(${PROJECT_NAME}) # To include downstream with targets ament_export_libraries(rtabmap_odom rtabmap_odom_plugins) # To include downstream without targets diff --git a/rtabmap_rviz_plugins/CMakeLists.txt b/rtabmap_rviz_plugins/CMakeLists.txt index c26c7e1a..4e47a684 100644 --- a/rtabmap_rviz_plugins/CMakeLists.txt +++ b/rtabmap_rviz_plugins/CMakeLists.txt @@ -14,11 +14,13 @@ if(CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64") ) endif() +# Make sure it is first to prevent Qt6 from claiming the generic versionless targets first +find_package(Qt5 QUIET COMPONENTS Widgets) + find_package(ament_cmake_ros REQUIRED) find_package(pcl_conversions REQUIRED) find_package(pluginlib REQUIRED) find_package(rclcpp REQUIRED) -find_package(QT NAMES Qt5 QUIET COMPONENTS Widgets) find_package(rviz_common REQUIRED) find_package(rviz_rendering REQUIRED) find_package(rviz_default_plugins REQUIRED) @@ -33,6 +35,19 @@ include_directories( ) SET(Libraries + pcl_conversions::pcl_conversions + pluginlib::pluginlib + rclcpp::rclcpp + rviz_common::rviz_common + rviz_rendering::rviz_rendering + rviz_default_plugins::rviz_default_plugins + sensor_msgs::sensor_msgs + std_msgs::std_msgs + tf2::tf2 + rtabmap_conversions::rtabmap_conversions + rtabmap_msgs::rtabmap_msgs +) +SET(AmentLibraries pcl_conversions pluginlib rclcpp @@ -73,8 +88,11 @@ target_include_directories(rtabmap_rviz_plugins $ $ ) - -ament_target_dependencies(rtabmap_rviz_plugins ${Libraries}) +if("$ENV{ROS_DISTRO}" STRLESS "lyrical") + ament_target_dependencies(rtabmap_rviz_plugins ${AmentLibraries}) +ELSE() + target_link_libraries(rtabmap_rviz_plugins PRIVATE ${Libraries}) +ENDIF() # Causes the visibility macros to use dllexport rather than dllimport, # which is appropriate when building the dll but not consuming it. diff --git a/rtabmap_rviz_plugins/package.xml b/rtabmap_rviz_plugins/package.xml index 326ab8f2..6ab1a040 100644 --- a/rtabmap_rviz_plugins/package.xml +++ b/rtabmap_rviz_plugins/package.xml @@ -13,6 +13,7 @@ ament_cmake_ros ros_environment + qtbase5-private-dev pcl_conversions pluginlib diff --git a/rtabmap_slam/CMakeLists.txt b/rtabmap_slam/CMakeLists.txt index f53b7aaa..aa7df4b4 100644 --- a/rtabmap_slam/CMakeLists.txt +++ b/rtabmap_slam/CMakeLists.txt @@ -54,6 +54,22 @@ include_directories( # libraries SET(Libraries + cv_bridge::cv_bridge + geometry_msgs::geometry_msgs + nav_msgs::nav_msgs + rclcpp::rclcpp + rclcpp_components::component + sensor_msgs::sensor_msgs + std_msgs::std_msgs + std_srvs::std_srvs + tf2::tf2 + tf2_ros::tf2_ros + visualization_msgs::visualization_msgs + rtabmap_msgs::rtabmap_msgs + rtabmap_util::rtabmap_util + rtabmap_sync::rtabmap_sync +) +SET(AmentLibraries cv_bridge geometry_msgs nav_msgs @@ -88,6 +104,10 @@ MESSAGE(STATUS "WITH apriltag_msgs") ADD_DEFINITIONS("-DWITH_APRILTAG_MSGS") SET(Libraries ${Libraries} + apriltag_msgs::apriltag_msgs +) +SET(AmentLibraries + ${AmentLibraries} apriltag_msgs ) ENDIF(apriltag_msgs_FOUND) @@ -98,6 +118,10 @@ MESSAGE(STATUS "WITH aruco_msgs") ADD_DEFINITIONS("-DWITH_ARUCO_MSGS") SET(Libraries ${Libraries} + aruco_msgs::aruco_msgs +) +SET(AmentLibraries + ${AmentLibraries} aruco_msgs ) ENDIF(aruco_msgs_FOUND) @@ -108,6 +132,10 @@ MESSAGE(STATUS "WITH aruco_opencv_msgs") ADD_DEFINITIONS("-DWITH_ARUCO_OPENCV_MSGS") SET(Libraries ${Libraries} + aruco_opencv_msgs::aruco_opencv_msgs +) +SET(AmentLibraries + ${AmentLibraries} aruco_opencv_msgs ) ENDIF(aruco_opencv_msgs_FOUND) @@ -118,6 +146,10 @@ MESSAGE(STATUS "WITH aruco_markers_msgs") ADD_DEFINITIONS("-DWITH_ARUCO_MARKERS_MSGS") SET(Libraries ${Libraries} + aruco_markers_msgs::aruco_markers_msgs +) +SET(AmentLibraries + ${AmentLibraries} aruco_markers_msgs ) ENDIF(aruco_markers_msgs_FOUND) @@ -128,6 +160,10 @@ MESSAGE(STATUS "WITH ros2_aruco_interfaces") ADD_DEFINITIONS("-DWITH_ROS2_ARUCO_INTERFACES") SET(Libraries ${Libraries} + ros2_aruco_interfaces::ros2_aruco_interfaces +) +SET(AmentLibraries + ${AmentLibraries} ros2_aruco_interfaces ) ENDIF(ros2_aruco_interfaces_FOUND) @@ -138,6 +174,10 @@ MESSAGE(STATUS "WITH nav2_msgs") ADD_DEFINITIONS("-DWITH_NAV2_MSGS") SET(Libraries ${Libraries} + nav2_msgs::nav2_msgs +) +SET(AmentLibraries + ${AmentLibraries} nav2_msgs ) IF(${nav2_msgs_VERSION_MAJOR} EQUAL 0) @@ -157,20 +197,23 @@ target_include_directories(rtabmap_slam_plugins $ ) -ament_target_dependencies(rtabmap_slam_plugins ${Libraries}) +if("$ENV{ROS_DISTRO}" STRLESS "lyrical") + ament_target_dependencies(rtabmap_slam_plugins ${AmentLibraries}) +else() + target_link_libraries(rtabmap_slam_plugins PUBLIC ${Libraries}) +endif() rclcpp_components_register_nodes(rtabmap_slam_plugins "rtabmap_slam::CoreWrapper") add_executable(rtabmap_node src/CoreNode.cpp) -ament_target_dependencies(rtabmap_node ${Libraries}) -target_link_libraries(rtabmap_node rtabmap_slam_plugins) +target_link_libraries(rtabmap_node PRIVATE rtabmap_slam_plugins) set_target_properties(rtabmap_node PROPERTIES OUTPUT_NAME "rtabmap") ############# ## Install ## ############# -ament_export_dependencies(${Libraries}) +ament_export_dependencies(${AmentLibraries}) ament_export_include_directories(include) ament_export_targets(${PROJECT_NAME}) # To include downstream with targets ament_export_libraries(rtabmap_slam_plugins) # To include downstream without targets diff --git a/rtabmap_sync/CMakeLists.txt b/rtabmap_sync/CMakeLists.txt index 5bbf39fd..710997b5 100644 --- a/rtabmap_sync/CMakeLists.txt +++ b/rtabmap_sync/CMakeLists.txt @@ -55,6 +55,21 @@ include_directories( # libraries SET(Libraries + rclcpp_components::component +) +SET(PublicLibraries + cv_bridge::cv_bridge + rclcpp::rclcpp + message_filters::message_filters + image_transport::image_transport + sensor_msgs::sensor_msgs + nav_msgs::nav_msgs + rtabmap_msgs::rtabmap_msgs + rtabmap_conversions::rtabmap_conversions + diagnostic_updater::diagnostic_updater +) + +SET(AmentLibraries cv_bridge image_transport message_filters @@ -117,8 +132,14 @@ target_include_directories(rtabmap_sync $ ) -ament_target_dependencies(rtabmap_sync ${Libraries}) -ament_target_dependencies(rtabmap_sync_plugins ${Libraries}) + +if("$ENV{ROS_DISTRO}" STRLESS "lyrical") + ament_target_dependencies(rtabmap_sync ${AmentLibraries}) +ELSE() + target_link_libraries(rtabmap_sync PRIVATE ${Libraries} PUBLIC ${PublicLibraries}) + target_link_libraries(rtabmap_sync_plugins PUBLIC ${Libraries}) +ENDIF() +target_link_libraries(rtabmap_sync_plugins PUBLIC rtabmap_sync) rclcpp_components_register_nodes(rtabmap_sync_plugins "rtabmap_sync::RGBDSync") rclcpp_components_register_nodes(rtabmap_sync_plugins "rtabmap_sync::StereoSync") @@ -126,30 +147,25 @@ rclcpp_components_register_nodes(rtabmap_sync_plugins "rtabmap_sync::RGBSync") rclcpp_components_register_nodes(rtabmap_sync_plugins "rtabmap_sync::RGBDXSync") add_executable(rtabmap_rgbd_sync src/RGBDSyncNode.cpp) -ament_target_dependencies(rtabmap_rgbd_sync ${Libraries}) -target_link_libraries(rtabmap_rgbd_sync rtabmap_sync_plugins) +target_link_libraries(rtabmap_rgbd_sync PRIVATE rtabmap_sync_plugins) set_target_properties(rtabmap_rgbd_sync PROPERTIES OUTPUT_NAME "rgbd_sync") add_executable(rtabmap_rgbdx_sync src/RGBDXSyncNode.cpp) -ament_target_dependencies(rtabmap_rgbdx_sync ${Libraries}) -target_link_libraries(rtabmap_rgbdx_sync rtabmap_sync_plugins) +target_link_libraries(rtabmap_rgbdx_sync PRIVATE rtabmap_sync_plugins) set_target_properties(rtabmap_rgbdx_sync PROPERTIES OUTPUT_NAME "rgbdx_sync") add_executable(rtabmap_stereo_sync src/StereoSyncNode.cpp) -ament_target_dependencies(rtabmap_stereo_sync ${Libraries}) -target_link_libraries(rtabmap_stereo_sync rtabmap_sync_plugins) +target_link_libraries(rtabmap_stereo_sync PRIVATE rtabmap_sync_plugins) set_target_properties(rtabmap_stereo_sync PROPERTIES OUTPUT_NAME "stereo_sync") add_executable(rtabmap_rgb_sync src/RGBSyncNode.cpp) -ament_target_dependencies(rtabmap_rgb_sync ${Libraries}) -target_link_libraries(rtabmap_rgb_sync rtabmap_sync_plugins) +target_link_libraries(rtabmap_rgb_sync PRIVATE rtabmap_sync_plugins) set_target_properties(rtabmap_rgb_sync PROPERTIES OUTPUT_NAME "rgb_sync") ############# ## Install ## ############# - -ament_export_dependencies(${Libraries}) +ament_export_dependencies(${AmentLibraries}) ament_export_include_directories(include) ament_export_targets(${PROJECT_NAME}) # To include downstream with targets ament_export_libraries(rtabmap_sync rtabmap_sync_plugins) # To include downstream without targets diff --git a/rtabmap_util/CMakeLists.txt b/rtabmap_util/CMakeLists.txt index e9edf324..7b08cfb9 100644 --- a/rtabmap_util/CMakeLists.txt +++ b/rtabmap_util/CMakeLists.txt @@ -28,6 +28,8 @@ find_package(rtabmap_msgs REQUIRED) find_package(rtabmap_conversions REQUIRED) find_package(rtabmap_sync REQUIRED) +find_package(RTABMap COMPONENTS gui REQUIRED) + # Optional components find_package(octomap_msgs) find_package(grid_map_ros) @@ -38,6 +40,29 @@ include_directories( # libraries SET(Libraries + cv_bridge::cv_bridge + image_transport::image_transport + rclcpp_components::component + stereo_msgs::stereo_msgs + std_msgs::std_msgs + tf2::tf2 + tf2_geometry_msgs::tf2_geometry_msgs + tf2_ros::tf2_ros + laser_geometry::laser_geometry + image_geometry::image_geometry + message_filters::message_filters + rtabmap_msgs::rtabmap_msgs + rtabmap_sync::rtabmap_sync +) +SET(PublicLibraries + rclcpp::rclcpp + nav_msgs::nav_msgs + pcl_conversions::pcl_conversions + sensor_msgs::sensor_msgs + rtabmap_conversions::rtabmap_conversions +) + +SET(AmentLibraries cv_bridge image_transport rclcpp @@ -65,9 +90,10 @@ endif() ########### ## Build ## ########### - -SET(rtabmap_util_plugins_lib_src - src/MapsManager.cpp +SET(rtabmap_util_lib_src + src/MapsManager.cpp +) +SET(rtabmap_util_plugins_src src/nodelets/point_cloud_xyzrgb.cpp src/nodelets/point_cloud_xyz.cpp src/nodelets/disparity_to_depth.cpp @@ -83,16 +109,16 @@ SET(rtabmap_util_plugins_lib_src src/nodelets/map_assembler.cpp ) - # If octomap is found, add dependency IF(octomap_msgs_FOUND) MESSAGE(STATUS "WITH octomap_msgs") -include_directories( - ${octomap_msgs_INCLUDE_DIRS} +SET(PublicLibraries + octomap_msgs::octomap_msgs + ${PublicLibraries} ) -SET(Libraries +SET(AmentLibraries octomap_msgs - ${Libraries} + ${AmentLibraries} ) ADD_DEFINITIONS("-DWITH_OCTOMAP_MSGS") ENDIF(octomap_msgs_FOUND) @@ -100,36 +126,46 @@ ENDIF(octomap_msgs_FOUND) # If grid_map is found, add dependency IF(grid_map_ros_FOUND) MESSAGE(STATUS "WITH grid_map_ros") -include_directories( - ${grid_map_ros_INCLUDE_DIRS} +SET(PublicLibraries + grid_map_ros::grid_map_ros + ${PublicLibraries} ) -SET(Libraries +SET(AmentLibraries grid_map_ros - ${Libraries} + ${AmentLibraries} ) ENDIF(grid_map_ros_FOUND) ############################ ## Declare a cpp library ############################ -add_library(rtabmap_util_plugins SHARED - ${rtabmap_util_plugins_lib_src} +add_library(rtabmap_util SHARED + ${rtabmap_util_lib_src} ) -target_include_directories(rtabmap_util_plugins +add_library(rtabmap_util_plugins SHARED + ${rtabmap_util_plugins_src} +) +target_include_directories(rtabmap_util PUBLIC $ $ ) IF(octomap_msgs_FOUND) - target_compile_definitions(rtabmap_util_plugins PUBLIC -DWITH_OCTOMAP_MSGS) + target_compile_definitions(rtabmap_util PUBLIC -DWITH_OCTOMAP_MSGS) ENDIF(octomap_msgs_FOUND) IF(grid_map_ros_FOUND) - target_compile_definitions(rtabmap_util_plugins PUBLIC -DWITH_GRID_MAP_ROS) + target_compile_definitions(rtabmap_util PUBLIC -DWITH_GRID_MAP_ROS) ENDIF(grid_map_ros_FOUND) -ament_target_dependencies(rtabmap_util_plugins ${Libraries}) +if("$ENV{ROS_DISTRO}" STRLESS "lyrical") + ament_target_dependencies(rtabmap_util ${AmentLibraries}) +ELSE() + target_link_libraries(rtabmap_util PRIVATE ${Libraries} PUBLIC ${PublicLibraries}) + target_link_libraries(rtabmap_util_plugins PUBLIC ${Libraries}) +ENDIF() +target_link_libraries(rtabmap_util_plugins PUBLIC rtabmap_util) rclcpp_components_register_nodes(rtabmap_util_plugins "rtabmap_util::RGBDRelay") rclcpp_components_register_nodes(rtabmap_util_plugins "rtabmap_util::RGBDSplit") @@ -146,88 +182,73 @@ rclcpp_components_register_nodes(rtabmap_util_plugins "rtabmap_util::PointCloudA rclcpp_components_register_nodes(rtabmap_util_plugins "rtabmap_util::MapAssembler") add_executable(rtabmap_rgbd_relay src/RGBDRelayNode.cpp) -ament_target_dependencies(rtabmap_rgbd_relay ${Libraries}) -target_link_libraries(rtabmap_rgbd_relay rtabmap_util_plugins) +target_link_libraries(rtabmap_rgbd_relay PRIVATE rtabmap_util_plugins) set_target_properties(rtabmap_rgbd_relay PROPERTIES OUTPUT_NAME "rgbd_relay") add_executable(rtabmap_rgbd_split src/RGBDSplitNode.cpp) -ament_target_dependencies(rtabmap_rgbd_split ${Libraries}) -target_link_libraries(rtabmap_rgbd_split rtabmap_util_plugins) +target_link_libraries(rtabmap_rgbd_split PRIVATE rtabmap_util_plugins) set_target_properties(rtabmap_rgbd_split PROPERTIES OUTPUT_NAME "rgbd_split") #add_executable(rtabmap_map_optimizer src/MapOptimizerNode.cpp) -#ament_target_dependencies(rtabmap_map_optimizer ${Libraries}) #target_link_libraries(rtabmap_map_optimizer rtabmap_util_plugins) #set_target_properties(rtabmap_map_optimizer PROPERTIES OUTPUT_NAME "map_optimizer") add_executable(rtabmap_map_assembler src/MapAssemblerNode.cpp) -ament_target_dependencies(rtabmap_map_assembler ${Libraries}) -target_link_libraries(rtabmap_map_assembler rtabmap_util_plugins) +target_link_libraries(rtabmap_map_assembler PRIVATE rtabmap_util_plugins) set_target_properties(rtabmap_map_assembler PROPERTIES OUTPUT_NAME "map_assembler") add_executable(rtabmap_imu_to_tf src/ImuToTFNode.cpp) -ament_target_dependencies(rtabmap_imu_to_tf ${Libraries}) -target_link_libraries(rtabmap_imu_to_tf rtabmap_util_plugins) +target_link_libraries(rtabmap_imu_to_tf PRIVATE rtabmap_util_plugins) set_target_properties(rtabmap_imu_to_tf PROPERTIES OUTPUT_NAME "imu_to_tf") add_executable(rtabmap_disparity_to_depth src/DisparityToDepthNode.cpp) -ament_target_dependencies(rtabmap_disparity_to_depth ${Libraries}) -target_link_libraries(rtabmap_disparity_to_depth rtabmap_util_plugins) +target_link_libraries(rtabmap_disparity_to_depth PRIVATE rtabmap_util_plugins) set_target_properties(rtabmap_disparity_to_depth PROPERTIES OUTPUT_NAME "disparity_to_depth") add_executable(rtabmap_lidar_deskewing src/LidarDeskewingNode.cpp) -ament_target_dependencies(rtabmap_lidar_deskewing ${Libraries}) -target_link_libraries(rtabmap_lidar_deskewing rtabmap_util_plugins) +target_link_libraries(rtabmap_lidar_deskewing PRIVATE rtabmap_util_plugins) set_target_properties(rtabmap_lidar_deskewing PROPERTIES OUTPUT_NAME "lidar_deskewing") add_executable(rtabmap_point_cloud_xyz src/PointCloudXYZNode.cpp) -ament_target_dependencies(rtabmap_point_cloud_xyz ${Libraries}) -target_link_libraries(rtabmap_point_cloud_xyz rtabmap_util_plugins) +target_link_libraries(rtabmap_point_cloud_xyz PRIVATE rtabmap_util_plugins) set_target_properties(rtabmap_point_cloud_xyz PROPERTIES OUTPUT_NAME "point_cloud_xyz") add_executable(rtabmap_point_cloud_xyzrgb src/PointCloudXYZRGBNode.cpp) -ament_target_dependencies(rtabmap_point_cloud_xyzrgb ${Libraries}) -target_link_libraries(rtabmap_point_cloud_xyzrgb rtabmap_util_plugins) +target_link_libraries(rtabmap_point_cloud_xyzrgb PRIVATE rtabmap_util_plugins) set_target_properties(rtabmap_point_cloud_xyzrgb PROPERTIES OUTPUT_NAME "point_cloud_xyzrgb") add_executable(rtabmap_data_player src/DbPlayerNode.cpp) -ament_target_dependencies(rtabmap_data_player ${Libraries}) -target_link_libraries(rtabmap_data_player rtabmap_util_plugins) +target_link_libraries(rtabmap_data_player PRIVATE rtabmap_util_plugins) set_target_properties(rtabmap_data_player PROPERTIES OUTPUT_NAME "data_player") #add_executable(rtabmap_odom_msg_to_tf src/OdomMsgToTFNode.cpp) -#ament_target_dependencies(rtabmap_odom_msg_to_tf ${Libraries}) -#target_link_libraries(rtabmap_odom_msg_to_tf rtabmap_util_plugins) +#target_link_libraries(rtabmap_odom_msg_to_tf PRIVATE ${Libraries}) +#target_link_libraries(rtabmap_odom_msg_to_tf PRIVATE rtabmap_util_plugins) #set_target_properties(rtabmap_odom_msg_to_tf PROPERTIES OUTPUT_NAME "odom_msg_to_tf") add_executable(rtabmap_pointcloud_to_depthimage src/PointCloudToDepthImageNode.cpp) -ament_target_dependencies(rtabmap_pointcloud_to_depthimage ${Libraries}) -target_link_libraries(rtabmap_pointcloud_to_depthimage rtabmap_util_plugins) +target_link_libraries(rtabmap_pointcloud_to_depthimage PRIVATE rtabmap_util_plugins) set_target_properties(rtabmap_pointcloud_to_depthimage PROPERTIES OUTPUT_NAME "pointcloud_to_depthimage") add_executable(rtabmap_obstacles_detection src/ObstaclesDetectionNode.cpp) -ament_target_dependencies(rtabmap_obstacles_detection ${Libraries}) -target_link_libraries(rtabmap_obstacles_detection rtabmap_util_plugins) +target_link_libraries(rtabmap_obstacles_detection PRIVATE rtabmap_util_plugins) set_target_properties(rtabmap_obstacles_detection PROPERTIES OUTPUT_NAME "obstacles_detection") add_executable(rtabmap_point_cloud_aggregator src/PointCloudAggregatorNode.cpp) -ament_target_dependencies(rtabmap_point_cloud_aggregator ${Libraries}) -target_link_libraries(rtabmap_point_cloud_aggregator rtabmap_util_plugins) +target_link_libraries(rtabmap_point_cloud_aggregator PRIVATE rtabmap_util_plugins) set_target_properties(rtabmap_point_cloud_aggregator PROPERTIES OUTPUT_NAME "point_cloud_aggregator") add_executable(rtabmap_point_cloud_assembler src/PointCloudAssemblerNode.cpp) -ament_target_dependencies(rtabmap_point_cloud_assembler ${Libraries}) -target_link_libraries(rtabmap_point_cloud_assembler rtabmap_util_plugins) +target_link_libraries(rtabmap_point_cloud_assembler PRIVATE rtabmap_util_plugins) set_target_properties(rtabmap_point_cloud_assembler PROPERTIES OUTPUT_NAME "point_cloud_assembler") ############# ## Install ## ############# - -ament_export_dependencies(${Libraries}) +ament_export_dependencies(${AmentLibraries}) ament_export_include_directories(include) ament_export_targets(${PROJECT_NAME}) # To include downstream with targets -ament_export_libraries(rtabmap_util_plugins) # To include downstream without targets +ament_export_libraries(rtabmap_util rtabmap_util_plugins) # To include downstream without targets # Install Python executables @@ -244,6 +265,7 @@ install(PROGRAMS ) install(TARGETS + rtabmap_util rtabmap_util_plugins EXPORT ${PROJECT_NAME} ARCHIVE DESTINATION lib diff --git a/rtabmap_util/package.xml b/rtabmap_util/package.xml index 21d5df95..d356f8c9 100644 --- a/rtabmap_util/package.xml +++ b/rtabmap_util/package.xml @@ -27,6 +27,7 @@ tf2_geometry_msgs tf2_ros laser_geometry + image_geometry pcl_conversions pcl_ros message_filters diff --git a/rtabmap_viz/CMakeLists.txt b/rtabmap_viz/CMakeLists.txt index 60dcfd7c..add21b02 100644 --- a/rtabmap_viz/CMakeLists.txt +++ b/rtabmap_viz/CMakeLists.txt @@ -43,6 +43,18 @@ include_directories( # libraries SET(Libraries + cv_bridge::cv_bridge + geometry_msgs::geometry_msgs + rclcpp::rclcpp + std_msgs::std_msgs + std_srvs::std_srvs + nav_msgs::nav_msgs + rtabmap_msgs::rtabmap_msgs + rtabmap_sync::rtabmap_sync + tf2::tf2 + rtabmap::gui +) +SET(AmentLibraries cv_bridge geometry_msgs rclcpp @@ -52,6 +64,7 @@ SET(Libraries rtabmap_msgs rtabmap_sync tf2 + RTABMap ) ########### @@ -59,7 +72,11 @@ SET(Libraries ########### add_executable(rtabmap_viz src/GuiNode.cpp src/GuiWrapper.cpp src/PreferencesDialogROS.cpp include/${PROJECT_NAME}/PreferencesDialogROS.h) -ament_target_dependencies(rtabmap_viz ${Libraries}) +if("$ENV{ROS_DISTRO}" STRLESS "lyrical") + ament_target_dependencies(rtabmap_viz ${AmentLibraries}) +else() + target_link_libraries(rtabmap_viz PRIVATE ${Libraries}) +endif() SET_TARGET_PROPERTIES( rtabmap_viz PROPERTIES @@ -69,7 +86,11 @@ SET_TARGET_PROPERTIES( ) add_executable(rgbd_image_viewer src/RGBDImageViewerNode.cpp src/rgbd_image_viewer.cpp include/${PROJECT_NAME}/rgbd_image_viewer.hpp) -ament_target_dependencies(rgbd_image_viewer ${Libraries}) +if("$ENV{ROS_DISTRO}" STRLESS "lyrical") + ament_target_dependencies(rgbd_image_viewer ${AmentLibraries}) +else() + target_link_libraries(rgbd_image_viewer PRIVATE ${Libraries}) +endif() SET_TARGET_PROPERTIES( rgbd_image_viewer PROPERTIES