Merged master to ros2. ros2: Uniformized qos of all subscribers and publishers.

This commit is contained in:
matlabbe
2021-10-04 19:29:19 -04:00
121 changed files with 10854 additions and 3478 deletions
+192 -48
View File
@@ -46,15 +46,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <nav_msgs/msg/odometry.hpp>
#include <rtabmap_ros/msg/rgbd_image.hpp>
#include <rtabmap_ros/msg/rgbd_images.hpp>
#include <rtabmap_ros/msg/user_data.hpp>
#include <rtabmap_ros/msg/odom_info.hpp>
#include <rtabmap_ros/msg/scan_descriptor.hpp>
#include <rtabmap_ros/CommonDataSubscriberDefines.h>
namespace rtabmap_ros {
class CommonDataSubscriber {
public:
CommonDataSubscriber(rclcpp::Node& node, bool gui);
CommonDataSubscriber(rclcpp::Node & node, bool gui);
virtual ~CommonDataSubscriber();
bool isSubscribedToDepth() const {return subscribedToDepth_;}
@@ -69,6 +71,7 @@ public:
int rgbdCameras() const {return isSubscribedToRGBD()?(int)rgbdSubs_.size():0;}
int getQueueSize() const {return queueSize_;}
bool isApproxSync() const {return approxSync_;}
const std::string & name() const {return name_;}
protected:
void setupCallbacks(rclcpp::Node & node);
@@ -78,9 +81,13 @@ protected:
const std::vector<cv_bridge::CvImageConstPtr> & imageMsgs,
const std::vector<cv_bridge::CvImageConstPtr> & depthMsgs,
const std::vector<sensor_msgs::msg::CameraInfo> & cameraInfoMsgs,
const sensor_msgs::msg::LaserScan::ConstSharedPtr& scanMsg,
const sensor_msgs::msg::PointCloud2::ConstSharedPtr& scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg) = 0;
const sensor_msgs::msg::LaserScan & scanMsg,
const sensor_msgs::msg::PointCloud2 & scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg,
const std::vector<rtabmap_ros::msg::GlobalDescriptor> & globalDescriptorMsgs = std::vector<rtabmap_ros::msg::GlobalDescriptor>(),
const std::vector<std::vector<rtabmap_ros::msg::KeyPoint> > & localKeyPoints = std::vector<std::vector<rtabmap_ros::msg::KeyPoint> >(),
const std::vector<std::vector<rtabmap_ros::msg::Point3f> > & localPoints3d = std::vector<std::vector<rtabmap_ros::msg::Point3f> >(),
const std::vector<cv::Mat> & localDescriptors = std::vector<cv::Mat>()) = 0;
virtual void commonStereoCallback(
const nav_msgs::msg::Odometry::ConstSharedPtr & odomMsg,
const rtabmap_ros::msg::UserData::ConstSharedPtr & userDataMsg,
@@ -88,15 +95,20 @@ protected:
const cv_bridge::CvImageConstPtr& rightImageMsg,
const sensor_msgs::msg::CameraInfo& leftCamInfoMsg,
const sensor_msgs::msg::CameraInfo& rightCamInfoMsg,
const sensor_msgs::msg::LaserScan::ConstSharedPtr& scanMsg,
const sensor_msgs::msg::PointCloud2::ConstSharedPtr& scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg) = 0;
const sensor_msgs::msg::LaserScan & scanMsg,
const sensor_msgs::msg::PointCloud2 & scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg,
const std::vector<rtabmap_ros::msg::GlobalDescriptor> & globalDescriptorMsgs = std::vector<rtabmap_ros::msg::GlobalDescriptor>(),
const std::vector<rtabmap_ros::msg::KeyPoint> & localKeyPoints = std::vector<rtabmap_ros::msg::KeyPoint>(),
const std::vector<rtabmap_ros::msg::Point3f> & localPoints3d = std::vector<rtabmap_ros::msg::Point3f>(),
const cv::Mat & localDescriptors = cv::Mat()) = 0;
virtual void commonLaserScanCallback(
const nav_msgs::msg::Odometry::ConstSharedPtr & odomMsg,
const rtabmap_ros::msg::UserData::ConstSharedPtr & userDataMsg,
const sensor_msgs::msg::LaserScan::ConstSharedPtr& scanMsg,
const sensor_msgs::msg::PointCloud2::ConstSharedPtr& scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg) = 0;
const sensor_msgs::msg::LaserScan & scanMsg,
const sensor_msgs::msg::PointCloud2 & scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg,
const rtabmap_ros::msg::GlobalDescriptor & globalDescriptor = rtabmap_ros::msg::GlobalDescriptor()) = 0;
virtual void commonOdomCallback(
const nav_msgs::msg::Odometry::ConstSharedPtr & odomMsg,
const rtabmap_ros::msg::UserData::ConstSharedPtr & userDataMsg,
@@ -109,9 +121,13 @@ protected:
const cv_bridge::CvImageConstPtr & depthMsg,
const sensor_msgs::msg::CameraInfo & rgbCameraInfoMsg,
const sensor_msgs::msg::CameraInfo & depthCameraInfoMsg,
const sensor_msgs::msg::LaserScan::ConstSharedPtr& scanMsg,
const sensor_msgs::msg::PointCloud2::ConstSharedPtr& scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg);
const sensor_msgs::msg::LaserScan & scanMsg,
const sensor_msgs::msg::PointCloud2 & scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg,
const std::vector<rtabmap_ros::msg::GlobalDescriptor> & globalDescriptorMsgs = std::vector<rtabmap_ros::msg::GlobalDescriptor>(),
const std::vector<rtabmap_ros::msg::KeyPoint> & localKeyPoints = std::vector<rtabmap_ros::msg::KeyPoint>(),
const std::vector<rtabmap_ros::msg::Point3f> & localPoints3d = std::vector<rtabmap_ros::msg::Point3f>(),
const cv::Mat & localDescriptors = cv::Mat());
private:
void callbackCalled() {callbackCalled_ = true;}
@@ -121,6 +137,7 @@ private:
bool subscribeUserData,
bool subscribeScan2d,
bool subscribeScan3d,
bool subscribeScanDesc,
bool subscribeOdomInfo,
int queueSize,
bool approxSync);
@@ -136,6 +153,7 @@ private:
bool subscribeUserData,
bool subscribeScan2d,
bool subscribeScan3d,
bool subscribeScanDesc,
bool subscribeOdomInfo,
int queueSize,
bool approxSync);
@@ -145,15 +163,28 @@ private:
bool subscribeUserData,
bool subscribeScan2d,
bool subscribeScan3d,
bool subscribeScanDesc,
bool subscribeOdomInfo,
int queueSize,
bool approxSync);
void setupRGBDXCallbacks(
rclcpp::Node & node,
bool subscribeOdom,
bool subscribeUserData,
bool subscribeScan2d,
bool subscribeScan3d,
bool subscribeScanDesc,
bool subscribeOdomInfo,
int queueSize,
bool approxSync);
#ifdef RTABMAP_SYNC_MULTI_RGBD
void setupRGBD2Callbacks(
rclcpp::Node & node,
bool subscribeOdom,
bool subscribeUserData,
bool subscribeScan2d,
bool subscribeScan3d,
bool subscribeScanDesc,
bool subscribeOdomInfo,
int queueSize,
bool approxSync);
@@ -163,6 +194,7 @@ private:
bool subscribeUserData,
bool subscribeScan2d,
bool subscribeScan3d,
bool subscribeScanDesc,
bool subscribeOdomInfo,
int queueSize,
bool approxSync);
@@ -172,12 +204,35 @@ private:
bool subscribeUserData,
bool subscribeScan2d,
bool subscribeScan3d,
bool subscribeScanDesc,
bool subscribeOdomInfo,
int queueSize,
bool approxSync);
void setupRGBD5Callbacks(
rclcpp::Node & node,
bool subscribeOdom,
bool subscribeUserData,
bool subscribeScan2d,
bool subscribeScan3d,
bool subscribeScanDesc,
bool subscribeOdomInfo,
int queueSize,
bool approxSync);
void setupRGBD6Callbacks(
rclcpp::Node & node,
bool subscribeOdom,
bool subscribeUserData,
bool subscribeScan2d,
bool subscribeScan3d,
bool subscribeScanDesc,
bool subscribeOdomInfo,
int queueSize,
bool approxSync);
#endif
void setupScanCallbacks(
rclcpp::Node & node,
bool scan2dTopic,
bool subscribeScan2d,
bool subscribeScanDesc,
bool subscribeOdom,
bool subscribeUserData,
bool subscribeOdomInfo,
@@ -205,8 +260,10 @@ private:
bool subscribedToRGBD_;
bool subscribedToScan2d_;
bool subscribedToScan3d_;
bool subscribedToScanDescriptor_;
bool subscribedToOdomInfo_;
bool subscribedToUserData_;
std::string odomFrameId_;
int rgbdCameras_;
std::string name_;
@@ -218,6 +275,8 @@ private:
//for rgbd callback
rclcpp::Subscription<rtabmap_ros::msg::RGBDImage>::ConstSharedPtr rgbdSub_;
std::vector<message_filters::Subscriber<rtabmap_ros::msg::RGBDImage>*> rgbdSubs_;
rclcpp::Subscription<rtabmap_ros::msg::RGBDImages>::ConstSharedPtr rgbdXSubOnly_;
message_filters::Subscriber<rtabmap_ros::msg::RGBDImages> rgbdXSub_;
//stereo callback
image_transport::SubscriberFilter imageRectLeft_;
@@ -229,43 +288,55 @@ private:
message_filters::Subscriber<rtabmap_ros::msg::UserData> userDataSub_;
message_filters::Subscriber<sensor_msgs::msg::LaserScan> scanSub_;
message_filters::Subscriber<sensor_msgs::msg::PointCloud2> scan3dSub_;
message_filters::Subscriber<rtabmap_ros::msg::ScanDescriptor> scanDescSub_;
message_filters::Subscriber<rtabmap_ros::msg::OdomInfo> odomInfoSub_;
rclcpp::Subscription<sensor_msgs::msg::LaserScan>::ConstSharedPtr scan2dSubOnly_;
rclcpp::Subscription<sensor_msgs::msg::PointCloud2>::ConstSharedPtr scan3dSubOnly_;
rclcpp::Subscription<rtabmap_ros::msg::ScanDescriptor>::ConstSharedPtr scanDescSubOnly_;
rclcpp::Subscription<nav_msgs::msg::Odometry>::ConstSharedPtr odomSubOnly_;
// RGB + Depth
DATA_SYNCS3(depth, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo)
DATA_SYNCS4(depthScan2d, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan)
DATA_SYNCS4(depthScan3d, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2)
DATA_SYNCS4(depthScanDesc, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS4(depthInfo, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(depthScan2dInfo, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(depthScan3dInfo, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(depthScanDescInfo, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor, rtabmap_ros::msg::OdomInfo)
// RGB + Depth + Odom
DATA_SYNCS4(depthOdom, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo)
DATA_SYNCS5(depthOdomScan2d, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan)
DATA_SYNCS5(depthOdomScan3d, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2)
DATA_SYNCS5(depthOdomScanDesc, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS5(depthOdomInfo, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(depthOdomScan2dInfo, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(depthOdomScan3dInfo, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(depthOdomScanDescInfo, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor, rtabmap_ros::msg::OdomInfo)
#ifdef RTABMAP_SYNC_USER_DATA
// RGB + Depth + User Data
DATA_SYNCS4(depthData, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo)
DATA_SYNCS5(depthDataScan2d, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan)
DATA_SYNCS5(depthDataScan3d, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2)
DATA_SYNCS5(depthDataScanDesc, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS5(depthDataInfo, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(depthDataScan2dInfo, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(depthDataScan3dInfo, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(depthDataScanDescInfo, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor, rtabmap_ros::msg::OdomInfo)
// RGB + Depth + Odom + User Data
DATA_SYNCS5(depthOdomData, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo)
DATA_SYNCS6(depthOdomDataScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan)
DATA_SYNCS6(depthOdomDataScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2)
DATA_SYNCS6(depthOdomDataScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS6(depthOdomDataInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS7(depthOdomDataScan2dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS7(depthOdomDataScan3dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS7(depthOdomDataScanDescInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor, rtabmap_ros::msg::OdomInfo)
#endif
// Stereo
DATA_SYNCS4(stereo, sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::CameraInfo)
@@ -279,193 +350,266 @@ private:
DATA_SYNCS2(rgb, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo)
DATA_SYNCS3(rgbScan2d, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan)
DATA_SYNCS3(rgbScan3d, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2)
DATA_SYNCS3(rgbScanDesc, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS3(rgbInfo, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS4(rgbScan2dInfo, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS4(rgbScan3dInfo, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS4(rgbScanDescInfo, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor, rtabmap_ros::msg::OdomInfo)
// RGB-only + Odom
DATA_SYNCS3(rgbOdom, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo)
DATA_SYNCS4(rgbOdomScan2d, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan)
DATA_SYNCS4(rgbOdomScan3d, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2)
DATA_SYNCS4(rgbOdomScanDesc, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS4(rgbOdomInfo, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbOdomScan2dInfo, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbOdomScan3dInfo, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbOdomScanDescInfo, nav_msgs::msg::Odometry, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor, rtabmap_ros::msg::OdomInfo)
#ifdef RTABMAP_SYNC_USER_DATA
// RGB-only + User Data
DATA_SYNCS3(rgbData, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo)
DATA_SYNCS4(rgbDataScan2d, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan)
DATA_SYNCS4(rgbDataScan3d, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2)
DATA_SYNCS4(rgbDataScanDesc, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS4(rgbDataInfo, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbDataScan2dInfo, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbDataScan3dInfo, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbDataScanDescInfo, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor, rtabmap_ros::msg::OdomInfo)
// RGB-only + Odom + User Data
DATA_SYNCS4(rgbOdomData, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo)
DATA_SYNCS5(rgbOdomDataScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan)
DATA_SYNCS5(rgbOdomDataScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2)
DATA_SYNCS5(rgbOdomDataScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS5(rgbOdomDataInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(rgbOdomDataScan2dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(rgbOdomDataScan3dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(rgbOdomDataScanDescInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, rtabmap_ros::msg::ScanDescriptor, rtabmap_ros::msg::OdomInfo)
#endif
// 1 RGBD
void rgbdCallback(const rtabmap_ros::msg::RGBDImage::ConstSharedPtr);
DATA_SYNCS2(rgbdScan2d, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS2(rgbdScan3d, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS2(rgbdScanDesc, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS2(rgbdInfo, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS3(rgbdScan2dInfo, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS3(rgbdScan3dInfo, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
// 1 RGBD + Odom
DATA_SYNCS2(rgbdOdom, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS3(rgbdOdomScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS3(rgbdOdomScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS3(rgbdOdomScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS3(rgbdOdomInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS4(rgbdOdomScan2dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS4(rgbdOdomScan3dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
#ifdef RTABMAP_SYNC_USER_DATA
// 1 RGBD + User Data
DATA_SYNCS2(rgbdData, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS3(rgbdDataScan2d, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS3(rgbdDataScan3d, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS3(rgbdDataScanDesc, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS3(rgbdDataInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS4(rgbdDataScan2dInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS4(rgbdDataScan3dInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
// 1 RGBD + Odom + User Data
DATA_SYNCS3(rgbdOdomData, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS4(rgbdOdomDataScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS4(rgbdOdomDataScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS4(rgbdOdomDataScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS4(rgbdOdomDataInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbdOdomDataScan2dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbdOdomDataScan3dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
#endif
// X RGBD
void rgbdXCallback(const rtabmap_ros::msg::RGBDImages::ConstSharedPtr);
DATA_SYNCS2(rgbdXScan2d, rtabmap_ros::msg::RGBDImages, sensor_msgs::msg::LaserScan)
DATA_SYNCS2(rgbdXScan3d, rtabmap_ros::msg::RGBDImages, sensor_msgs::msg::PointCloud2)
DATA_SYNCS2(rgbdXScanDesc, rtabmap_ros::msg::RGBDImages, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS2(rgbdXInfo, rtabmap_ros::msg::RGBDImages, rtabmap_ros::msg::OdomInfo)
// X RGBD + Odom
DATA_SYNCS2(rgbdXOdom, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImages)
DATA_SYNCS3(rgbdXOdomScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImages, sensor_msgs::msg::LaserScan)
DATA_SYNCS3(rgbdXOdomScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImages, sensor_msgs::msg::PointCloud2)
DATA_SYNCS3(rgbdXOdomScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImages, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS3(rgbdXOdomInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImages, rtabmap_ros::msg::OdomInfo)
#ifdef RTABMAP_SYNC_USER_DATA
// X RGBD + User Data
DATA_SYNCS2(rgbdXData, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImages)
DATA_SYNCS3(rgbdXDataScan2d, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImages, sensor_msgs::msg::LaserScan)
DATA_SYNCS3(rgbdXDataScan3d, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImages, sensor_msgs::msg::PointCloud2)
DATA_SYNCS3(rgbdXDataScanDesc, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImages, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS3(rgbdXDataInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImages, rtabmap_ros::msg::OdomInfo)
// X RGBD + Odom + User Data
DATA_SYNCS3(rgbdXOdomData, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImages)
DATA_SYNCS4(rgbdXOdomDataScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImages, sensor_msgs::msg::LaserScan)
DATA_SYNCS4(rgbdXOdomDataScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImages, sensor_msgs::msg::PointCloud2)
DATA_SYNCS4(rgbdXOdomDataScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImages, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS4(rgbdXOdomDataInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImages, rtabmap_ros::msg::OdomInfo)
#endif
#ifdef RTABMAP_SYNC_MULTI_RGBD
// 2 RGBD
DATA_SYNCS2(rgbd2, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS3(rgbd2Scan2d, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS3(rgbd2Scan3d, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS3(rgbd2ScanDesc, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS3(rgbd2Info, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS4(rgbd2Scan2dInfo, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS4(rgbd2Scan3dInfo, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
// 2 RGBD + Odom
DATA_SYNCS3(rgbd2Odom, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS4(rgbd2OdomScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS4(rgbd2OdomScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS4(rgbd2OdomScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS4(rgbd2OdomInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbd2OdomScan2dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbd2OdomScan3dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
#ifdef RTABMAP_SYNC_USER_DATA
// 2 RGBD + User Data
DATA_SYNCS3(rgbd2Data, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS4(rgbd2DataScan2d, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS4(rgbd2DataScan3d, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS4(rgbd2DataScanDesc, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS4(rgbd2DataInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbd2DataScan2dInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbd2DataScan3dInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
// 2 RGBD + Odom + User Data
DATA_SYNCS4(rgbd2OdomData, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS5(rgbd2OdomDataScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS5(rgbd2OdomDataScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS5(rgbd2OdomDataScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS5(rgbd2OdomDataInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(rgbd2OdomDataScan2dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(rgbd2OdomDataScan3dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
#endif
// 3 RGBD
DATA_SYNCS3(rgbd3, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS4(rgbd3Scan2d, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS4(rgbd3Scan3d, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS4(rgbd3ScanDesc, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS4(rgbd3Info, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbd3Scan2dInfo, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS5(rgbd3Scan3dInfo, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
// 3 RGBD + Odom
DATA_SYNCS4(rgbd3Odom, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS5(rgbd3OdomScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS5(rgbd3OdomScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS5(rgbd3OdomScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS5(rgbd3OdomInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(rgbd3OdomScan2dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(rgbd3OdomScan3dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
#ifdef RTABMAP_SYNC_USER_DATA
// 3 RGBD + User Data
DATA_SYNCS4(rgbd3Data, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS5(rgbd3DataScan2d, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS5(rgbd3DataScan3d, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS5(rgbd3DataScanDesc, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS5(rgbd3DataInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(rgbd3DataScan2dInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(rgbd3DataScan3dInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
// 3 RGBD + Odom + User Data
DATA_SYNCS5(rgbd3OdomData, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS6(rgbd3OdomDataScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS6(rgbd3OdomDataScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS6(rgbd3OdomDataScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS6(rgbd3OdomDataInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS7(rgbd3OdomDataScan2dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS7(rgbd3OdomDataScan3dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
#endif
// 4 RGBD
DATA_SYNCS4(rgbd4, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS5(rgbd4Scan2d, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS5(rgbd4Scan3d, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS5(rgbd4ScanDesc, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS5(rgbd4Info, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(rgbd4Scan2dInfo, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS6(rgbd4Scan3dInfo, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
// 4 RGBD + Odom
DATA_SYNCS5(rgbd4Odom, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS6(rgbd4OdomScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS6(rgbd4OdomScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS6(rgbd4OdomScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS6(rgbd4OdomInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS7(rgbd4OdomScan2dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS7(rgbd4OdomScan3dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
#ifdef RTABMAP_SYNC_USER_DATA
// 4 RGBD + User Data
DATA_SYNCS5(rgbd4Data, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS6(rgbd4DataScan2d, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS6(rgbd4DataScan3d, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS6(rgbd4DataScanDesc, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS6(rgbd4DataInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS7(rgbd4DataScan2dInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS7(rgbd4DataScan3dInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
// 4 RGBD + Odom + User Data
DATA_SYNCS6(rgbd4OdomData, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS7(rgbd4OdomDataScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS7(rgbd4OdomDataScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS7(rgbd4OdomDataScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS7(rgbd4OdomDataInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS8(rgbd4OdomDataScan2dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS8(rgbd4OdomDataScan3dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
#endif
// 5 RGBD
DATA_SYNCS5(rgbd5, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS6(rgbd5Scan2d, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS6(rgbd5Scan3d, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS6(rgbd5ScanDesc, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS6(rgbd5Info, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
// 5 RGBD + Odom
DATA_SYNCS6(rgbd5Odom, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS7(rgbd5OdomScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS7(rgbd5OdomScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS7(rgbd5OdomScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS7(rgbd5OdomInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
// 6 RGBD
DATA_SYNCS6(rgbd6, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS7(rgbd6Scan2d, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS7(rgbd6Scan3d, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS7(rgbd6ScanDesc, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS7(rgbd6Info, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
// 6 RGBD + Odom
DATA_SYNCS7(rgbd6Odom, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS8(rgbd6OdomScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::LaserScan)
DATA_SYNCS8(rgbd6OdomScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, sensor_msgs::msg::PointCloud2)
DATA_SYNCS8(rgbd6OdomScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS8(rgbd6OdomInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::OdomInfo)
#endif //RTABMAP_SYNC_MULTI_RGBD
// Scan
void scan2dCallback(const sensor_msgs::msg::LaserScan::ConstSharedPtr);
void scan3dCallback(const sensor_msgs::msg::PointCloud2::ConstSharedPtr);
void scanDescCallback(const rtabmap_ros::msg::ScanDescriptor::ConstSharedPtr);
DATA_SYNCS2(scan2dInfo, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS2(scan3dInfo, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS2(scanDescInfo, rtabmap_ros::msg::ScanDescriptor, rtabmap_ros::msg::OdomInfo)
// Scan + Odom
DATA_SYNCS2(odomScan2d, nav_msgs::msg::Odometry, sensor_msgs::msg::LaserScan)
DATA_SYNCS2(odomScan3d, nav_msgs::msg::Odometry, sensor_msgs::msg::PointCloud2)
DATA_SYNCS2(odomScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS3(odomScan2dInfo, nav_msgs::msg::Odometry, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS3(odomScan3dInfo, nav_msgs::msg::Odometry, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS3(odomScanDescInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::ScanDescriptor, rtabmap_ros::msg::OdomInfo)
#ifdef RTABMAP_SYNC_USER_DATA
// Scan + User Data
DATA_SYNCS2(dataScan2d, rtabmap_ros::msg::UserData, sensor_msgs::msg::LaserScan)
DATA_SYNCS2(dataScan3d, rtabmap_ros::msg::UserData, sensor_msgs::msg::PointCloud2)
DATA_SYNCS2(dataScanDesc, rtabmap_ros::msg::UserData, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS3(dataScan2dInfo, rtabmap_ros::msg::UserData, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS3(dataScan3dInfo, rtabmap_ros::msg::UserData, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS3(dataScanDescInfo, rtabmap_ros::msg::UserData, rtabmap_ros::msg::ScanDescriptor, rtabmap_ros::msg::OdomInfo)
// Scan + Odom + User Data
DATA_SYNCS3(odomDataScan2d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::LaserScan)
DATA_SYNCS3(odomDataScan3d, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::PointCloud2)
DATA_SYNCS3(odomDataScanDesc, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::ScanDescriptor)
DATA_SYNCS4(odomDataScan2dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::LaserScan, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS4(odomDataScan3dInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, sensor_msgs::msg::PointCloud2, rtabmap_ros::msg::OdomInfo)
DATA_SYNCS4(odomDataScanDescInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::ScanDescriptor, rtabmap_ros::msg::OdomInfo)
#endif
// Odom
void odomCallback(const nav_msgs::msg::Odometry::ConstSharedPtr);
DATA_SYNCS2(odomInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::OdomInfo)
#ifdef RTABMAP_SYNC_USER_DATA
// Odom + User Data
DATA_SYNCS2(odomData, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData)
DATA_SYNCS3(odomDataInfo, nav_msgs::msg::Odometry, rtabmap_ros::msg::UserData, rtabmap_ros::msg::OdomInfo)
#endif
};
} /* namespace rtabmap_ros */
@@ -106,59 +106,59 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if(PREFIX##ExactSync_) delete PREFIX##ExactSync_;
// Sync declarations
#define SYNC_DECL2(PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1) \
#define SYNC_DECL2(CLASS, PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1) \
if(APPROX) \
{ \
PREFIX##ApproximateSync_ = new message_filters::Synchronizer<PREFIX##ApproximateSyncPolicy>( \
PREFIX##ApproximateSyncPolicy(QUEUE_SIZE), SUB0, SUB1); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2)); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2)); \
} \
else \
{ \
PREFIX##ExactSync_ = new message_filters::Synchronizer<PREFIX##ExactSyncPolicy>( \
PREFIX##ExactSyncPolicy(QUEUE_SIZE), SUB0, SUB1); \
PREFIX##ExactSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2)); \
PREFIX##ExactSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2)); \
} \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s,\n %s", \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s \\\n %s", \
name_.c_str(), \
APPROX?"approx":"exact", \
getTopicName(SUB0.getSubscriber()).c_str(), \
getTopicName(SUB1.getSubscriber()).c_str());
#define SYNC_DECL3(PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1, SUB2) \
#define SYNC_DECL3(CLASS, PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1, SUB2) \
if(APPROX) \
{ \
PREFIX##ApproximateSync_ = new message_filters::Synchronizer<PREFIX##ApproximateSyncPolicy>( \
PREFIX##ApproximateSyncPolicy(QUEUE_SIZE), SUB0, SUB1, SUB2); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); \
} \
else \
{ \
PREFIX##ExactSync_ = new message_filters::Synchronizer<PREFIX##ExactSyncPolicy>( \
PREFIX##ExactSyncPolicy(QUEUE_SIZE), SUB0, SUB1, SUB2); \
PREFIX##ExactSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); \
PREFIX##ExactSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)); \
} \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s,\n %s,\n %s", \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s \\\n %s \\\n %s", \
name_.c_str(), \
APPROX?"approx":"exact", \
getTopicName(SUB0.getSubscriber()).c_str(), \
getTopicName(SUB1.getSubscriber()).c_str(), \
getTopicName(SUB2.getSubscriber()).c_str());
#define SYNC_DECL4(PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1, SUB2, SUB3) \
#define SYNC_DECL4(CLASS, PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1, SUB2, SUB3) \
if(APPROX) \
{ \
PREFIX##ApproximateSync_ = new message_filters::Synchronizer<PREFIX##ApproximateSyncPolicy>( \
PREFIX##ApproximateSyncPolicy(QUEUE_SIZE), SUB0, SUB1, SUB2, SUB3); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4)); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4)); \
} \
else \
{ \
PREFIX##ExactSync_ = new message_filters::Synchronizer<PREFIX##ExactSyncPolicy>( \
PREFIX##ExactSyncPolicy(QUEUE_SIZE), SUB0, SUB1, SUB2, SUB3); \
PREFIX##ExactSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4)); \
PREFIX##ExactSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4)); \
} \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s,\n %s,\n %s,\n %s", \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s \\\n %s \\\n %s \\\n %s", \
name_.c_str(), \
APPROX?"approx":"exact", \
getTopicName(SUB0.getSubscriber()).c_str(), \
@@ -166,20 +166,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
getTopicName(SUB2.getSubscriber()).c_str(), \
getTopicName(SUB3.getSubscriber()).c_str());
#define SYNC_DECL5(PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1, SUB2, SUB3, SUB4) \
#define SYNC_DECL5(CLASS, PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1, SUB2, SUB3, SUB4) \
if(APPROX) \
{ \
PREFIX##ApproximateSync_ = new message_filters::Synchronizer<PREFIX##ApproximateSyncPolicy>( \
PREFIX##ApproximateSyncPolicy(QUEUE_SIZE), SUB0, SUB1, SUB2, SUB3, SUB4); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5)); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5)); \
} \
else \
{ \
PREFIX##ExactSync_ = new message_filters::Synchronizer<PREFIX##ExactSyncPolicy>( \
PREFIX##ExactSyncPolicy(QUEUE_SIZE), SUB0, SUB1, SUB2, SUB3, SUB4); \
PREFIX##ExactSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5)); \
PREFIX##ExactSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5)); \
} \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s,\n %s,\n %s,\n %s,\n %s", \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s \\\n %s \\\n %s \\\n %s \\\n %s", \
name_.c_str(), \
approxSync?"approx":"exact", \
getTopicName(SUB0.getSubscriber()).c_str(), \
@@ -188,20 +188,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
getTopicName(SUB3.getSubscriber()).c_str(), \
getTopicName(SUB4.getSubscriber()).c_str());
#define SYNC_DECL6(PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1, SUB2, SUB3, SUB4, SUB5) \
#define SYNC_DECL6(CLASS, PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1, SUB2, SUB3, SUB4, SUB5) \
if(APPROX) \
{ \
PREFIX##ApproximateSync_ = new message_filters::Synchronizer<PREFIX##ApproximateSyncPolicy>( \
PREFIX##ApproximateSyncPolicy(QUEUE_SIZE), SUB0, SUB1, SUB2, SUB3, SUB4, SUB5); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6)); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6)); \
} \
else \
{ \
PREFIX##ExactSync_ = new message_filters::Synchronizer<PREFIX##ExactSyncPolicy>( \
PREFIX##ExactSyncPolicy(QUEUE_SIZE), SUB0, SUB1, SUB2, SUB3, SUB4, SUB5); \
PREFIX##ExactSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6)); \
PREFIX##ExactSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6)); \
} \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s,\n %s,\n %s,\n %s,\n %s,\n %s", \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s \\\n %s \\\n %s \\\n %s \\\n %s \\\n %s", \
name_.c_str(), \
APPROX?"approx":"exact", \
getTopicName(SUB0.getSubscriber()).c_str(), \
@@ -211,20 +211,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
getTopicName(SUB4.getSubscriber()).c_str(), \
getTopicName(SUB5.getSubscriber()).c_str());
#define SYNC_DECL7(PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1, SUB2, SUB3, SUB4, SUB5, SUB6) \
#define SYNC_DECL7(CLASS, PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1, SUB2, SUB3, SUB4, SUB5, SUB6) \
if(APPROX) \
{ \
PREFIX##ApproximateSync_ = new message_filters::Synchronizer<PREFIX##ApproximateSyncPolicy>( \
PREFIX##ApproximateSyncPolicy(QUEUE_SIZE), SUB0, SUB1, SUB2, SUB3, SUB4, SUB5, SUB6); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7)); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7)); \
} \
else \
{ \
PREFIX##ExactSync_ = new message_filters::Synchronizer<PREFIX##ExactSyncPolicy>( \
PREFIX##ExactSyncPolicy(QUEUE_SIZE), SUB0, SUB1, SUB2, SUB3, SUB4, SUB5, SUB6); \
PREFIX##ExactSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7)); \
PREFIX##ExactSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7)); \
} \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s,\n %s,\n %s,\n %s,\n %s,\n %s,\n %s", \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s \\\n %s \\\n %s \\\n %s \\\n %s \\\n %s \\\n %s", \
name_.c_str(), \
APPROX?"approx":"exact", \
getTopicName(SUB0.getSubscriber()).c_str(), \
@@ -235,20 +235,20 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
getTopicName(SUB5.getSubscriber()).c_str(), \
getTopicName(SUB6.getSubscriber()).c_str());
#define SYNC_DECL8(PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1, SUB2, SUB3, SUB4, SUB5, SUB6, SUB7) \
#define SYNC_DECL8(CLASS, PREFIX, APPROX, QUEUE_SIZE, SUB0, SUB1, SUB2, SUB3, SUB4, SUB5, SUB6, SUB7) \
if(APPROX) \
{ \
PREFIX##ApproximateSync_ = new message_filters::Synchronizer<PREFIX##ApproximateSyncPolicy>( \
PREFIX##ApproximateSyncPolicy(QUEUE_SIZE), SUB0, SUB1, SUB2, SUB3, SUB4, SUB5, SUB6, SUB7); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7, std::placeholders::_8)); \
PREFIX##ApproximateSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7, std::placeholders::_8)); \
} \
else \
{ \
PREFIX##ExactSync_ = new message_filters::Synchronizer<PREFIX##ExactSyncPolicy>( \
PREFIX##ExactSyncPolicy(QUEUE_SIZE), SUB0, SUB1, SUB2, SUB3, SUB4, SUB5, SUB6, SUB7); \
PREFIX##ExactSync_->registerCallback(std::bind(&CommonDataSubscriber::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7, std::placeholders::_8)); \
PREFIX##ExactSync_->registerCallback(std::bind(&CLASS::PREFIX##Callback, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3, std::placeholders::_4, std::placeholders::_5, std::placeholders::_6, std::placeholders::_7, std::placeholders::_8)); \
} \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s,\n %s,\n %s,\n %s,\n %s,\n %s,\n %s", \
subscribedTopicsMsg_ = uFormat("\n%s subscribed to (%s sync):\n %s \\\n %s \\\n %s \\\n %s \\\n %s \\\n %s \\\n %s \\\n %s", \
name_.c_str(), \
APPROX?"approx":"exact", \
getTopicName(SUB0.getSubscriber()).c_str(), \
+94 -41
View File
@@ -39,6 +39,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <std_msgs/msg/empty.hpp>
#include <std_msgs/msg/int32.hpp>
#include <std_msgs/msg/int32_multi_array.hpp>
#include <std_msgs/msg/bool.hpp>
#include <sensor_msgs/msg/nav_sat_fix.hpp>
#include <sensor_msgs/msg/imu.hpp>
@@ -52,7 +53,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <rtabmap/core/Rtabmap.h>
#include <rtabmap/core/OdometryInfo.h>
#include "rtabmap_ros/srv/get_node_data.hpp"
#include "rtabmap_ros/srv/get_map.hpp"
#include "rtabmap_ros/srv/get_map2.hpp"
#include "rtabmap_ros/srv/list_labels.hpp"
#include "rtabmap_ros/srv/publish_map.hpp"
#include "rtabmap_ros/srv/set_goal.hpp"
@@ -63,25 +66,26 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "rtabmap_ros/msg/odom_info.hpp"
#include "rtabmap_ros/msg/info.hpp"
#include "rtabmap_ros/srv/get_nodes_in_radius.hpp"
#include "rtabmap_ros/srv/load_database.hpp"
#include "rtabmap_ros/srv/detect_more_loop_closures.hpp"
#include "rtabmap_ros/srv/global_bundle_adjustment.hpp"
#include "rtabmap_ros/srv/cleanup_local_grids.hpp"
#include "rtabmap_ros/srv/add_link.hpp"
#include "MapsManager.h"
#ifdef WITH_OCTOMAP_MSGS
#include <octomap_msgs/GetOctomap.h>
#include <octomap_msgs/srv/get_octomap.hpp>
#endif
#ifdef WITH_APRILTAG_ROS
#include <apriltag_ros/msg/april_tag_detection_array.hpp>
#ifdef WITH_APRILTAG_MSGS
#include <apriltag_msgs/msg/april_tag_detection_array.hpp>
#endif
#ifdef WITH_MOVE_BASE_MSGS
#include <actionlib/client/simple_action_client.h>
#include <move_base_msgs/MoveBaseAction.h>
#include <move_base_msgs/MoveBaseActionGoal.h>
#include <move_base_msgs/MoveBaseActionResult.h>
#include <move_base_msgs/MoveBaseActionFeedback.h>
#include <actionlib_msgs/GoalStatusArray.h>
typedef actionlib::SimpleActionClient<move_base_msgs::MoveBaseAction> MoveBaseClient;
#include <move_base_msgs/action/move_base.hpp>
#include <rclcpp_action/rclcpp_action.hpp>
#endif
namespace rtabmap {
@@ -107,18 +111,26 @@ private:
const std::vector<cv_bridge::CvImageConstPtr> & imageMsgs,
const std::vector<cv_bridge::CvImageConstPtr> & depthMsgs,
const std::vector<sensor_msgs::msg::CameraInfo> & cameraInfoMsgs,
const sensor_msgs::msg::LaserScan::ConstSharedPtr& scanMsg,
const sensor_msgs::msg::PointCloud2::ConstSharedPtr& scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg);
const sensor_msgs::msg::LaserScan & scanMsg,
const sensor_msgs::msg::PointCloud2 & scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg,
const std::vector<rtabmap_ros::msg::GlobalDescriptor> & globalDescriptorMsgs = std::vector<rtabmap_ros::msg::GlobalDescriptor>(),
const std::vector<std::vector<rtabmap_ros::msg::KeyPoint> > & localKeyPoints = std::vector<std::vector<rtabmap_ros::msg::KeyPoint> >(),
const std::vector<std::vector<rtabmap_ros::msg::Point3f> > & localPoints3d = std::vector<std::vector<rtabmap_ros::msg::Point3f> >(),
const std::vector<cv::Mat> & localDescriptors = std::vector<cv::Mat>());
void commonDepthCallbackImpl(
const std::string & odomFrameId,
const rtabmap_ros::msg::UserData::ConstSharedPtr & userDataMsg,
const std::vector<cv_bridge::CvImageConstPtr> & imageMsgs,
const std::vector<cv_bridge::CvImageConstPtr> & depthMsgs,
const std::vector<sensor_msgs::msg::CameraInfo> & cameraInfoMsgs,
const sensor_msgs::msg::LaserScan::ConstSharedPtr& scan2dMsg,
const sensor_msgs::msg::PointCloud2::ConstSharedPtr& scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg);
const sensor_msgs::msg::LaserScan & scan2dMsg,
const sensor_msgs::msg::PointCloud2 & scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg,
const std::vector<rtabmap_ros::msg::GlobalDescriptor> & globalDescriptorMsgs,
const std::vector<std::vector<rtabmap_ros::msg::KeyPoint> > & localKeyPoints,
const std::vector<std::vector<rtabmap_ros::msg::Point3f> > & localPoints3d,
const std::vector<cv::Mat> & localDescriptors);
virtual void commonStereoCallback(
const nav_msgs::msg::Odometry::ConstSharedPtr & odomMsg,
const rtabmap_ros::msg::UserData::ConstSharedPtr & userDataMsg,
@@ -126,15 +138,20 @@ private:
const cv_bridge::CvImageConstPtr& rightImageMsg,
const sensor_msgs::msg::CameraInfo& leftCamInfoMsg,
const sensor_msgs::msg::CameraInfo& rightCamInfoMsg,
const sensor_msgs::msg::LaserScan::ConstSharedPtr& scanMsg,
const sensor_msgs::msg::PointCloud2::ConstSharedPtr& scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg);
const sensor_msgs::msg::LaserScan & scanMsg,
const sensor_msgs::msg::PointCloud2 & scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg,
const std::vector<rtabmap_ros::msg::GlobalDescriptor> & globalDescriptorMsgs = std::vector<rtabmap_ros::msg::GlobalDescriptor>(),
const std::vector<rtabmap_ros::msg::KeyPoint> & localKeyPoints = std::vector<rtabmap_ros::msg::KeyPoint>(),
const std::vector<rtabmap_ros::msg::Point3f> & localPoints3d = std::vector<rtabmap_ros::msg::Point3f>(),
const cv::Mat & localDescriptors = cv::Mat());
virtual void commonLaserScanCallback(
const nav_msgs::msg::Odometry::ConstSharedPtr & odomMsg,
const rtabmap_ros::msg::UserData::ConstSharedPtr & userDataMsg,
const sensor_msgs::msg::LaserScan::ConstSharedPtr& scanMsg,
const sensor_msgs::msg::PointCloud2::ConstSharedPtr& scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg);
const sensor_msgs::msg::LaserScan & scanMsg,
const sensor_msgs::msg::PointCloud2 & scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg,
const rtabmap_ros::msg::GlobalDescriptor & globalDescriptor = rtabmap_ros::msg::GlobalDescriptor());
virtual void commonOdomCallback(
const nav_msgs::msg::Odometry::ConstSharedPtr & odomMsg,
const rtabmap_ros::msg::UserData::ConstSharedPtr & userDataMsg,
@@ -145,10 +162,11 @@ private:
void userDataAsyncCallback(const rtabmap_ros::msg::UserData::SharedPtr dataMsg);
void globalPoseAsyncCallback(const geometry_msgs::msg::PoseWithCovarianceStamped::SharedPtr globalPoseMsg);
void gpsFixAsyncCallback(const sensor_msgs::msg::NavSatFix::SharedPtr gpsFixMsg);
#ifdef WITH_APRILTAG_ROS
void tagDetectionsAsyncCallback(const apriltag_ros::AprilTagDetectionArray tagDetections);
#ifdef WITH_APRILTAG_MSGS
void tagDetectionsAsyncCallback(const apriltag_msgs::msg::AprilTagDetectionArray::SharedPtr tagDetections);
#endif
void imuAsyncCallback(const sensor_msgs::msg::Imu::SharedPtr msg);
void republishNodeDataCallback(const std_msgs::msg::Int32MultiArray::ConstSharedPtr msg);
void interOdomCallback(const nav_msgs::msg::Odometry::SharedPtr msg);
void interOdomInfoCallback(const nav_msgs::msg::Odometry::ConstSharedPtr & msg1, const rtabmap_ros::msg::OdomInfo::ConstSharedPtr & msg2);
@@ -170,24 +188,33 @@ private:
const rtabmap::Transform & odom = rtabmap::Transform(),
const std::string & odomFrameId = "",
const cv::Mat & odomCovariance = cv::Mat::eye(6,6,CV_64FC1),
const rtabmap::OdometryInfo & odomInfo = rtabmap::OdometryInfo());
const rtabmap::OdometryInfo & odomInfo = rtabmap::OdometryInfo(),
double timeMsgConversion = 0.0);
std::map<int, rtabmap::Transform> filterNodesToAssemble(
const std::map<int, rtabmap::Transform> & nodes,
const rtabmap::Transform & currentPose);
void updateRtabmapCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void resetRtabmapCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void pauseRtabmapCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void resumeRtabmapCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void loadDatabaseCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::LoadDatabase::Request>, std::shared_ptr<rtabmap_ros::srv::LoadDatabase::Response>);
void triggerNewMapCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void backupDatabaseCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void detectMoreLoopClosuresCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::DetectMoreLoopClosures::Request>, std::shared_ptr<rtabmap_ros::srv::DetectMoreLoopClosures::Response>);
void globalBundleAdjustmentCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::GlobalBundleAdjustment::Request>, std::shared_ptr<rtabmap_ros::srv::GlobalBundleAdjustment::Response>);
void cleanupLocalGridsCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::CleanupLocalGrids::Request>, std::shared_ptr<rtabmap_ros::srv::CleanupLocalGrids::Response>);
void setModeLocalizationCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void setModeMappingCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void setLogDebug(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void setLogInfo(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void setLogWarn(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void setLogError(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void getNodeDataCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::GetNodeData::Request>, std::shared_ptr<rtabmap_ros::srv::GetNodeData::Response>);
void getMapDataCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::GetMap::Request>, std::shared_ptr<rtabmap_ros::srv::GetMap::Response>);
void getMapData2Callback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::GetMap2::Request>, std::shared_ptr<rtabmap_ros::srv::GetMap2::Response>);
void getMapCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<nav_msgs::srv::GetMap::Request>, std::shared_ptr<nav_msgs::srv::GetMap::Response>);
void getProbMapCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<nav_msgs::srv::GetMap::Request>, std::shared_ptr<nav_msgs::srv::GetMap::Response>);
void getProjMapCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<nav_msgs::srv::GetMap::Request>, std::shared_ptr<nav_msgs::srv::GetMap::Response>);
void getGridMapCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<nav_msgs::srv::GetMap::Request>, std::shared_ptr<nav_msgs::srv::GetMap::Response>);
void publishMapCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::PublishMap::Request>, std::shared_ptr<rtabmap_ros::srv::PublishMap::Response>);
void getPlanCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<nav_msgs::srv::GetPlan::Request>, std::shared_ptr<nav_msgs::srv::GetPlan::Response>);
void getPlanNodesCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::GetPlan::Request>, std::shared_ptr<rtabmap_ros::srv::GetPlan::Response>);
@@ -195,9 +222,11 @@ private:
void cancelGoalCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void setLabelCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::SetLabel::Request>, std::shared_ptr<rtabmap_ros::srv::SetLabel::Response>);
void listLabelsCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::ListLabels::Request>, std::shared_ptr<rtabmap_ros::srv::ListLabels::Response> res);
void addLinkCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::AddLink::Request>, std::shared_ptr<rtabmap_ros::srv::AddLink::Response> res);
void getNodesInRadiusCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::GetNodesInRadius::Request>, std::shared_ptr<rtabmap_ros::srv::GetNodesInRadius::Response> res);
#ifdef WITH_OCTOMAP_MSGS
void octomapBinaryCallback(const std::shared_ptr<rmw_request_id_t>, octomap_msgs::GetOctomap::Request>, std::shared_ptr<octomap_msgs::GetOctomap::Response>);
void octomapFullCallback(const std::shared_ptr<rmw_request_id_t>, octomap_msgs::GetOctomap::Request>, std::shared_ptr<octomap_msgs::GetOctomap::Response>);
void octomapBinaryCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<octomap_msgs::srv::GetOctomap::Request>, std::shared_ptr<octomap_msgs::srv::GetOctomap::Response>);
void octomapFullCallback(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<octomap_msgs::srv::GetOctomap::Request>, std::shared_ptr<octomap_msgs::srv::GetOctomap::Response>);
#endif
void loadParameters(const std::string & configFile, rtabmap::ParametersMap & parameters);
@@ -206,12 +235,15 @@ private:
void publishStats(const rclcpp::Time & stamp);
void publishCurrentGoal(const rclcpp::Time & stamp);
#ifdef WITH_MOVE_BASE_MSGS
void goalDoneCb(const actionlib::SimpleClientGoalState& state, const move_base_msgs::MoveBaseResult::SharedPtr& result);
void goalActiveCb();
void goalFeedbackCb(const move_base_msgs::MoveBaseFeedback::SharedPtr& feedback);
using MoveBase = move_base_msgs::action::MoveBase;
using GoalHandleMoveBase = rclcpp_action::ClientGoalHandle<MoveBase>;
void goalResponseCallback(std::shared_future<GoalHandleMoveBase::SharedPtr> future);
void feedbackCallback(GoalHandleMoveBase::SharedPtr, const std::shared_ptr<const MoveBase::Feedback> feedback);
void resultCallback(const GoalHandleMoveBase::WrappedResult & result);
#endif
void publishLocalPath(const rclcpp::Time & stamp);
void publishGlobalPath(const rclcpp::Time & stamp);
void republishMaps();
private:
rtabmap::Rtabmap rtabmap_;
@@ -247,6 +279,11 @@ private:
bool genScan_;
double genScanMaxDepth_;
double genScanMinDepth_;
bool genDepth_;
int genDepthDecimation_;
int genDepthFillHolesSize_;
int genDepthFillIterations_;
double genDepthFillHolesError_;
int scanCloudMaxPoints_;
rtabmap::Transform mapToOdom_;
@@ -284,18 +321,25 @@ private:
rclcpp::SyncParametersClient::SharedPtr parametersClient_;
rclcpp::Subscription<rcl_interfaces::msg::ParameterEvent>::SharedPtr parameterEventSub_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr updateSrv_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr resetSrv_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr pauseSrv_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr resumeSrv_;
rclcpp::Service<rtabmap_ros::srv::LoadDatabase>::SharedPtr loadDatabaseSrv_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr triggerNewMapSrv_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr backupDatabase_;
rclcpp::Service<rtabmap_ros::srv::DetectMoreLoopClosures>::SharedPtr detectMoreLoopClosuresSrv_;
rclcpp::Service<rtabmap_ros::srv::GlobalBundleAdjustment>::SharedPtr globalBundleAdjustmentSrv_;
rclcpp::Service<rtabmap_ros::srv::CleanupLocalGrids>::SharedPtr cleanupLocalGridsSrv_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr setModeLocalizationSrv_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr setModeMappingSrv_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr setLogDebugSrv_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr setLogInfoSrv_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr setLogWarnSrv_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr setLogErrorSrv_;
rclcpp::Service<rtabmap_ros::srv::GetNodeData>::SharedPtr getNodeDataSrv_;
rclcpp::Service<rtabmap_ros::srv::GetMap>::SharedPtr getMapDataSrv_;
rclcpp::Service<rtabmap_ros::srv::GetMap2>::SharedPtr getMapData2Srv_;
rclcpp::Service<nav_msgs::srv::GetMap>::SharedPtr getMapSrv_;
rclcpp::Service<nav_msgs::srv::GetMap>::SharedPtr getProbMapSrv_;
rclcpp::Service<rtabmap_ros::srv::PublishMap>::SharedPtr publishMapDataSrv_;
@@ -305,13 +349,15 @@ private:
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr cancelGoalSrv_;
rclcpp::Service<rtabmap_ros::srv::SetLabel>::SharedPtr setLabelSrv_;
rclcpp::Service<rtabmap_ros::srv::ListLabels>::SharedPtr listLabelsSrv_;
rclcpp::Service<rtabmap_ros::srv::AddLink>::SharedPtr addLinkSrv_;
rclcpp::Service<rtabmap_ros::srv::GetNodesInRadius>::SharedPtr getNodesInRadiusSrv_;
#ifdef WITH_OCTOMAP_MSGS
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr octomapBinarySrv_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr octomapFullSrv_;
rclcpp::Service<octomap_msgs::srv::GetOctomap>::SharedPtr octomapBinarySrv_;
rclcpp::Service<octomap_msgs::srv::GetOctomap>::SharedPtr octomapFullSrv_;
#endif
#ifdef WITH_MOVE_BASE_MSGS
rclcpp_action::Client<MoveBase>::SharedPtr moveBaseClient_;
#endif
// MoveBaseClient * mbClient_;
std::thread* transformThread_;
bool tfThreadRunning_;
@@ -327,12 +373,14 @@ private:
geometry_msgs::msg::PoseWithCovarianceStamped globalPose_;
rclcpp::Subscription<sensor_msgs::msg::NavSatFix>::SharedPtr gpsFixAsyncSub_;
rtabmap::GPS gps_;
#ifdef WITH_APRILTAG_ROS
rclcpp::Subscription<apriltag_ros::AprilTagDetectionArray>::SharedPtr tagDetectionsSub_;
#ifdef WITH_APRILTAG_MSGS
rclcpp::Subscription<apriltag_msgs::msg::AprilTagDetectionArray>::SharedPtr tagDetectionsSub_;
#endif
std::map<int, geometry_msgs::msg::PoseWithCovarianceStamped> tags_;
std::map<int, std::pair<geometry_msgs::msg::PoseWithCovarianceStamped, float> > tags_; // id, <pose, size>
rclcpp::Subscription<sensor_msgs::msg::Imu>::SharedPtr imuSub_;
std::map<double, rtabmap::Transform> imus_;
std::string imuFrameId_;
rclcpp::Subscription<std_msgs::msg::Int32MultiArray>::SharedPtr republishNodeDataSub_;
rclcpp::Subscription<nav_msgs::msg::Odometry>::SharedPtr interOdomSub_;
std::list<std::pair<nav_msgs::msg::Odometry, rtabmap_ros::msg::OdomInfo> > interOdoms_;
@@ -345,8 +393,13 @@ private:
bool odomSensorSync_;
float rate_;
bool createIntermediateNodes_;
int maxMappingNodes_;
int mappingMaxNodes_;
double mappingAltitudeDelta_;
bool alreadyRectifiedImages_;
bool twoDMapping_;
rclcpp::Time previousStamp_;
std::set<int> nodesToRepublish_;
int maxNodesRepublished_;
};
}
+21 -9
View File
@@ -51,6 +51,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
namespace rtabmap
{
class MainWindow;
class PreferencesDialog;
}
class QApplication;
@@ -78,9 +79,13 @@ private:
const std::vector<cv_bridge::CvImageConstPtr> & imageMsgs,
const std::vector<cv_bridge::CvImageConstPtr> & depthMsgs,
const std::vector<sensor_msgs::msg::CameraInfo> & cameraInfoMsgs,
const sensor_msgs::msg::LaserScan::ConstSharedPtr& scanMsg,
const sensor_msgs::msg::PointCloud2::ConstSharedPtr& scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg);
const sensor_msgs::msg::LaserScan & scanMsg,
const sensor_msgs::msg::PointCloud2 & scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg,
const std::vector<rtabmap_ros::msg::GlobalDescriptor> & globalDescriptorMsgs = std::vector<rtabmap_ros::msg::GlobalDescriptor>(),
const std::vector<std::vector<rtabmap_ros::msg::KeyPoint> > & localKeyPoints = std::vector<std::vector<rtabmap_ros::msg::KeyPoint> >(),
const std::vector<std::vector<rtabmap_ros::msg::Point3f> > & localPoints3d = std::vector<std::vector<rtabmap_ros::msg::Point3f> >(),
const std::vector<cv::Mat> & localDescriptors = std::vector<cv::Mat>());
virtual void commonStereoCallback(
const nav_msgs::msg::Odometry::ConstSharedPtr & odomMsg,
const rtabmap_ros::msg::UserData::ConstSharedPtr & userDataMsg,
@@ -88,15 +93,20 @@ private:
const cv_bridge::CvImageConstPtr& rightImageMsg,
const sensor_msgs::msg::CameraInfo& leftCamInfoMsg,
const sensor_msgs::msg::CameraInfo& rightCamInfoMsg,
const sensor_msgs::msg::LaserScan::ConstSharedPtr& scan2dMsg,
const sensor_msgs::msg::PointCloud2::ConstSharedPtr& scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg);
const sensor_msgs::msg::LaserScan & scan2dMsg,
const sensor_msgs::msg::PointCloud2 & scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg,
const std::vector<rtabmap_ros::msg::GlobalDescriptor> & globalDescriptorMsgs = std::vector<rtabmap_ros::msg::GlobalDescriptor>(),
const std::vector<rtabmap_ros::msg::KeyPoint> & localKeyPoints = std::vector<rtabmap_ros::msg::KeyPoint>(),
const std::vector<rtabmap_ros::msg::Point3f> & localPoints3d = std::vector<rtabmap_ros::msg::Point3f>(),
const cv::Mat & localDescriptors = cv::Mat());
virtual void commonLaserScanCallback(
const nav_msgs::msg::Odometry::ConstSharedPtr & odomMsg,
const rtabmap_ros::msg::UserData::ConstSharedPtr & userDataMsg,
const sensor_msgs::msg::LaserScan::ConstSharedPtr& scan2dMsg,
const sensor_msgs::msg::PointCloud2::ConstSharedPtr& scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg);
const sensor_msgs::msg::LaserScan & scan2dMsg,
const sensor_msgs::msg::PointCloud2 & scan3dMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr& odomInfoMsg,
const rtabmap_ros::msg::GlobalDescriptor & globalDescriptor = rtabmap_ros::msg::GlobalDescriptor());
virtual void commonOdomCallback(
const nav_msgs::msg::Odometry::ConstSharedPtr & odomMsg,
@@ -110,9 +120,11 @@ private:
bool callMapDataService(const std::string & name, bool global, bool optimized, bool graphOnly);
private:
rtabmap::PreferencesDialog * prefDialog_;
rtabmap::MainWindow * mainWindow_;
std::string cameraNodeName_;
double lastOdomInfoUpdateTime_;
std::string rtabmapNodeName_;
// odometry subscription stuffs
std::string frameId_;
+14 -4
View File
@@ -37,6 +37,12 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <sensor_msgs/msg/point_cloud2.hpp>
#include <nav_msgs/msg/occupancy_grid.hpp>
#ifdef RTABMAP_OCTOMAP
#ifdef WITH_OCTOMAP_MSGS
#include <octomap_msgs/msg/octomap.hpp>
#endif
#endif
namespace rtabmap {
class OctoMap;
class Memory;
@@ -80,7 +86,9 @@ public:
float & yMin,
float & gridCellSize);
#ifdef RTABMAP_OCTOMAP
const rtabmap::OctoMap * getOctomap() const {return octomap_;}
#endif
const rtabmap::OccupancyGrid * getOccupancyGrid() const {return occupancyGrid_;}
private:
@@ -99,11 +107,10 @@ private:
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr cloudObstaclesPub_;
rclcpp::Publisher<nav_msgs::msg::OccupancyGrid>::SharedPtr gridMapPub_;
rclcpp::Publisher<nav_msgs::msg::OccupancyGrid>::SharedPtr gridProbMapPub_;
#ifdef WITH_OCTOMAP_MSGS
#ifdef RTABMAP_OCTOMAP
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr octoMapPubBin_;
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr octoMapPubFull_;
#endif
#ifdef WITH_OCTOMAP_MSGS
rclcpp::Publisher<octomap_msgs::msg::Octomap>::SharedPtr octoMapPubBin_;
rclcpp::Publisher<octomap_msgs::msg::Octomap>::SharedPtr octoMapPubFull_;
#endif
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr octoMapCloud_;
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr octoMapFrontierCloud_;
@@ -111,6 +118,7 @@ private:
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr octoMapObstacleCloud_;
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr octoMapEmptySpace_;
rclcpp::Publisher<nav_msgs::msg::OccupancyGrid>::SharedPtr octoMapProj_;
#endif
std::map<int, rtabmap::Transform> assembledGroundPoses_;
std::map<int, rtabmap::Transform> assembledObstaclePoses_;
@@ -129,7 +137,9 @@ private:
rtabmap::OccupancyGrid * occupancyGrid_;
bool gridUpdated_;
#ifdef RTABMAP_OCTOMAP
rtabmap::OctoMap * octomap_;
#endif
int octomapTreeDepth_;
bool octomapUpdated_;
+57 -9
View File
@@ -36,6 +36,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <sensor_msgs/msg/camera_info.hpp>
#include <sensor_msgs/msg/laser_scan.hpp>
#include <sensor_msgs/msg/image.hpp>
#include <sensor_msgs/msg/point_cloud2.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/features2d/features2d.hpp>
@@ -69,10 +70,12 @@ void transformToGeometryMsg(const rtabmap::Transform & transform, geometry_msgs:
rtabmap::Transform transformFromGeometryMsg(const geometry_msgs::msg::Transform & msg);
void transformToPoseMsg(const rtabmap::Transform & transform, geometry_msgs::msg::Pose & msg);
rtabmap::Transform transformFromPoseMsg(const geometry_msgs::msg::Pose & msg);
rtabmap::Transform transformFromPoseMsg(const geometry_msgs::msg::Pose & msg, bool ignoreRotationIfNotSet = false);
void toCvCopy(const rtabmap_ros::msg::RGBDImage & image, cv_bridge::CvImagePtr & rgb, cv_bridge::CvImagePtr & depth);
void toCvShare(const rtabmap_ros::msg::RGBDImage::ConstSharedPtr & image, cv_bridge::CvImageConstPtr & rgb, cv_bridge::CvImageConstPtr & depth);
void toCvShare(const rtabmap_ros::msg::RGBDImage & image, const std::shared_ptr<void const>& trackedObject, cv_bridge::CvImageConstPtr & rgb, cv_bridge::CvImageConstPtr & depth);
void rgbdImageToROS(const rtabmap::SensorData & data, rtabmap_ros::msg::RGBDImage & msg, const std::string & sensorFrameId);
rtabmap::SensorData rgbdImageFromROS(const rtabmap_ros::msg::RGBDImage::ConstSharedPtr & image);
// copy data
@@ -89,8 +92,20 @@ cv::KeyPoint keypointFromROS(const rtabmap_ros::msg::KeyPoint & msg);
void keypointToROS(const cv::KeyPoint & kpt, rtabmap_ros::msg::KeyPoint & msg);
std::vector<cv::KeyPoint> keypointsFromROS(const std::vector<rtabmap_ros::msg::KeyPoint> & msg);
void keypointsFromROS(const std::vector<rtabmap_ros::msg::KeyPoint> & msg, std::vector<cv::KeyPoint> & kpts, int xShift=0);
void keypointsToROS(const std::vector<cv::KeyPoint> & kpts, std::vector<rtabmap_ros::msg::KeyPoint> & msg);
rtabmap::GlobalDescriptor globalDescriptorFromROS(const rtabmap_ros::msg::GlobalDescriptor & msg);
void globalDescriptorToROS(const rtabmap::GlobalDescriptor & desc, rtabmap_ros::msg::GlobalDescriptor & msg);
std::vector<rtabmap::GlobalDescriptor> globalDescriptorsFromROS(const std::vector<rtabmap_ros::msg::GlobalDescriptor> & msg);
void globalDescriptorsToROS(const std::vector<rtabmap::GlobalDescriptor> & desc, std::vector<rtabmap_ros::msg::GlobalDescriptor> & msg);
rtabmap::EnvSensor envSensorFromROS(const rtabmap_ros::msg::EnvSensor & msg);
void envSensorToROS(const rtabmap::EnvSensor & sensor, rtabmap_ros::msg::EnvSensor & msg);
rtabmap::EnvSensors envSensorsFromROS(const std::vector<rtabmap_ros::msg::EnvSensor> & msg);
void envSensorsToROS(const rtabmap::EnvSensors & sensors, std::vector<rtabmap_ros::msg::EnvSensor> & msg);
cv::Point2f point2fFromROS(const rtabmap_ros::msg::Point2f & msg);
void point2fToROS(const cv::Point2f & kpt, rtabmap_ros::msg::Point2f & msg);
@@ -100,8 +115,9 @@ void points2fToROS(const std::vector<cv::Point2f> & kpts, std::vector<rtabmap_ro
cv::Point3f point3fFromROS(const rtabmap_ros::msg::Point3f & msg);
void point3fToROS(const cv::Point3f & kpt, rtabmap_ros::msg::Point3f & msg);
std::vector<cv::Point3f> points3fFromROS(const std::vector<rtabmap_ros::msg::Point3f> & msg);
void points3fToROS(const std::vector<cv::Point3f> & kpts, std::vector<rtabmap_ros::msg::Point3f> & msg);
std::vector<cv::Point3f> points3fFromROS(const std::vector<rtabmap_ros::msg::Point3f> & msg, const rtabmap::Transform & transform = rtabmap::Transform());
void points3fFromROS(const std::vector<rtabmap_ros::msg::Point3f> & msg, std::vector<cv::Point3f> & points3, const rtabmap::Transform & transform = rtabmap::Transform());
void points3fToROS(const std::vector<cv::Point3f> & kpts, std::vector<rtabmap_ros::msg::Point3f> & msg, const rtabmap::Transform & transform = rtabmap::Transform());
rtabmap::CameraModel cameraModelFromROS(
const sensor_msgs::msg::CameraInfo & camInfo,
@@ -153,14 +169,14 @@ rtabmap::Signature nodeInfoFromROS(const rtabmap_ros::msg::NodeData & msg);
void nodeInfoToROS(const rtabmap::Signature & signature, rtabmap_ros::msg::NodeData & msg);
std::map<std::string, float> odomInfoToStatistics(const rtabmap::OdometryInfo & info);
rtabmap::OdometryInfo odomInfoFromROS(const rtabmap_ros::msg::OdomInfo & msg);
void odomInfoToROS(const rtabmap::OdometryInfo & info, rtabmap_ros::msg::OdomInfo & msg);
rtabmap::OdometryInfo odomInfoFromROS(const rtabmap_ros::msg::OdomInfo & msg, bool ignoreData = false);
void odomInfoToROS(const rtabmap::OdometryInfo & info, rtabmap_ros::msg::OdomInfo & msg, bool ignoreData = false);
cv::Mat userDataFromROS(const rtabmap_ros::msg::UserData & dataMsg);
void userDataToROS(const cv::Mat & data, rtabmap_ros::msg::UserData & dataMsg, bool compress);
rtabmap::Landmarks landmarksFromROS(
const std::map<int, geometry_msgs::msg::PoseWithCovarianceStamped> & tags,
const std::map<int, std::pair<geometry_msgs::msg::PoseWithCovarianceStamped, float> > & tags,
const std::string & frameId,
const std::string & odomFrameId,
const rclcpp::Time & odomStamp,
@@ -170,6 +186,7 @@ rtabmap::Landmarks landmarksFromROS(
double defaultAngVariance);
inline double timestampFromROS(const rclcpp::Time & stamp) {return double(stamp.seconds()) + double(stamp.nanoseconds())/1000000000.0;}
inline rclcpp::Time timestampToROS(const double & t) {uint32_t sec= (uint32_t)floor(t); return rclcpp::Time(sec, (uint32_t)std::round((t-sec) * 1e9));}
// common stuff
rtabmap::Transform getTransform(
@@ -201,7 +218,13 @@ bool convertRGBDMsgs(
cv::Mat & depth,
std::vector<rtabmap::CameraModel> & cameraModels,
tf2_ros::Buffer & tfBuffer,
double waitForTransform);
double waitForTransform,
const std::vector<std::vector<rtabmap_ros::msg::KeyPoint> > & localKeyPointsMsgs = std::vector<std::vector<rtabmap_ros::msg::KeyPoint> >(),
const std::vector<std::vector<rtabmap_ros::msg::Point3f> > & localPoints3dMsgs = std::vector<std::vector<rtabmap_ros::msg::Point3f> >(),
const std::vector<cv::Mat> & localDescriptorsMsgs = std::vector<cv::Mat>(),
std::vector<cv::KeyPoint> * localKeyPoints = 0,
std::vector<cv::Point3f> * localPoints3d = 0,
cv::Mat * localDescriptors = 0);
bool convertStereoMsg(
const cv_bridge::CvImageConstPtr& leftImageMsg,
@@ -215,10 +238,11 @@ bool convertStereoMsg(
cv::Mat & right,
rtabmap::StereoCameraModel & stereoModel,
tf2_ros::Buffer & tfBuffer,
double waitForTransform);
double waitForTransform,
bool alreadyRectified);
bool convertScanMsg(
const sensor_msgs::msg::LaserScan& scan2dMsg,
const sensor_msgs::msg::LaserScan & scan2dMsg,
const std::string & frameId,
const std::string & odomFrameId,
const rclcpp::Time & odomStamp,
@@ -243,6 +267,30 @@ void transformPointCloud (
const Eigen::Matrix4f &transform,
const sensor_msgs::msg::PointCloud2 &in,
sensor_msgs::msg::PointCloud2 &out);
/** Return the size of a datatype (which is an enum of sensor_msgs::PointField::) in bytes
* @param datatype one of the enums of sensor_msgs::PointField::
* Note: Missing function in ros2 (from old pcl_ros)
*/
inline int sizeOfPointField(int datatype)
{
if ((datatype == sensor_msgs::msg::PointField::INT8) || (datatype == sensor_msgs::msg::PointField::UINT8))
return 1;
else if ((datatype == sensor_msgs::msg::PointField::INT16) || (datatype == sensor_msgs::msg::PointField::UINT16))
return 2;
else if ((datatype == sensor_msgs::msg::PointField::INT32) || (datatype == sensor_msgs::msg::PointField::UINT32) ||
(datatype == sensor_msgs::msg::PointField::FLOAT32))
return 4;
else if (datatype == sensor_msgs::msg::PointField::FLOAT64)
return 8;
else
{
std::stringstream err;
err << "PointField of type " << datatype << " does not exist";
throw std::runtime_error(err.str());
}
return -1;
}
}
#endif /* MSGCONVERSION_H_ */
+9 -6
View File
@@ -41,6 +41,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include <sensor_msgs/msg/point_cloud2.hpp>
#include <rtabmap_ros/msg/odom_info.hpp>
#include <rtabmap_ros/msg/rgbd_image.hpp>
#include <rtabmap_ros/srv/reset_pose.hpp>
#include <rtabmap/core/SensorData.h>
#include <rtabmap/core/Parameters.h>
@@ -61,7 +62,7 @@ public:
explicit OdometryROS(const std::string & name, const rclcpp::NodeOptions & options);
virtual ~OdometryROS();
void processData(const rtabmap::SensorData & data, const rclcpp::Time & stamp);
void processData(rtabmap::SensorData & data, const std_msgs::msg::Header & header);
void resetOdom(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<std_srvs::srv::Empty::Request>, std::shared_ptr<std_srvs::srv::Empty::Response>);
void resetToPose(const std::shared_ptr<rmw_request_id_t>, const std::shared_ptr<rtabmap_ros::srv::ResetPose::Request>, std::shared_ptr<rtabmap_ros::srv::ResetPose::Response>);
@@ -82,10 +83,10 @@ protected:
void startWarningThread(const std::string & subscribedTopicsMsg, bool approxSync);
void callbackCalled() {callbackCalled_ = true;}
virtual void flushCallbacks() {}
virtual void flushCallbacks() {};
tf2_ros::Buffer & tfBuffer() {return *tfBuffer_;}
const double & waitForTransform() const {return waitForTransform_;}
const int & queueSize() const {return queueSize_;}
virtual void postProcessData(const rtabmap::SensorData & /*data*/, const std_msgs::msg::Header & /*header*/) const {}
private:
void warningLoop(const std::string & subscribedTopicsMsg, bool approxSync);
@@ -114,14 +115,15 @@ private:
bool publishTf_;
double waitForTransform_;
bool publishNullWhenLost_;
int queueSize_;
rtabmap::ParametersMap parameters_;
rclcpp::Publisher<nav_msgs::msg::Odometry>::SharedPtr odomPub_;
rclcpp::Publisher<rtabmap_ros::msg::OdomInfo>::SharedPtr odomInfoPub_;
rclcpp::Publisher<rtabmap_ros::msg::OdomInfo>::SharedPtr odomInfoLitePub_;
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr odomLocalMap_;
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr odomLocalScanMap_;
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr odomLastFrame_;
rclcpp::Publisher<rtabmap_ros::msg::RGBDImage>::SharedPtr odomRgbdImagePub_;
rclcpp::Service<std_srvs::srv::Empty>::SharedPtr resetSrv_;
rclcpp::Service<rtabmap_ros::srv::ResetPose>::SharedPtr resetToPoseSrv_;
@@ -147,11 +149,12 @@ private:
rtabmap::Transform guessPreviousPose_;
double previousStamp_;
double expectedUpdateRate_;
double maxUpdateRate_;
int odomStrategy_;
bool waitIMUToinit_;
bool imuProcessed_;
double lastImuReceivedStamp_;
rtabmap::SensorData bufferedData_;
std::map<double, rtabmap::IMU> imus_;
std::pair<rtabmap::SensorData, std_msgs::msg::Header > bufferedData_;
std::string configPath_;
rtabmap::Transform initialPose_;
};
+2 -1
View File
@@ -37,7 +37,7 @@ using namespace rtabmap;
class PreferencesDialogROS : public PreferencesDialog
{
public:
PreferencesDialogROS(rclcpp::Node * node, const QString & configFile);
PreferencesDialogROS(rclcpp::Node * node, const QString & configFile, const std::string & rtabmapNodeName);
virtual ~PreferencesDialogROS();
virtual QString getIniFilePath() const;
@@ -54,6 +54,7 @@ protected:
private:
QString configFile_;
rclcpp::Node * node_;
std::string rtabmapNodeName_;
};
#endif /* PREFERENCESDIALOGROS_H_ */
+4
View File
@@ -61,6 +61,7 @@ private:
protected:
virtual void flushCallbacks();
void postProcessData(const SensorData & data, const std_msgs::msg::Header & header) const;
private:
rclcpp::Subscription<sensor_msgs::msg::LaserScan>::SharedPtr scan_sub_;
@@ -73,8 +74,11 @@ private:
double scanVoxelSize_;
int scanNormalK_;
double scanNormalRadius_;
double scanNormalGroundUp_;
//std::vector<std::shared_ptr<rtabmap_ros::PluginInterface> > plugins_;
//pluginlib::ClassLoader<rtabmap_ros::PluginInterface> plugin_loader_;
bool scanReceived_ = false;
bool cloudReceived_ = false;
};
@@ -90,7 +90,7 @@ private:
std::string frameId_;
std::string fixedFrameId_;
double waitForTransform_;
std::shared_ptr<tf2_ros::Buffer> tfBuffer_;
std::shared_ptr<tf2_ros::TransformListener> tfListener_;
};
+20 -3
View File
@@ -61,6 +61,11 @@ public:
virtual ~PointCloudAssembler();
private:
void callbackCloudOdomInfo(
const sensor_msgs::msg::PointCloud2::ConstSharedPtr cloudMsg,
const nav_msgs::msg::Odometry::ConstSharedPtr odomMsg,
const rtabmap_ros::msg::OdomInfo::ConstSharedPtr odomInfoMsg);
void callbackCloudOdom(
const sensor_msgs::msg::PointCloud2::ConstSharedPtr cloudMsg,
const nav_msgs::msg::Odometry::ConstSharedPtr odomMsg);
@@ -75,24 +80,36 @@ private:
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr cloudPub_;
typedef message_filters::sync_policies::ExactTime<sensor_msgs::msg::PointCloud2, nav_msgs::msg::Odometry> syncPolicy;
typedef message_filters::sync_policies::ExactTime<sensor_msgs::msg::PointCloud2, nav_msgs::msg::Odometry, rtabmap_ros::msg::OdomInfo> syncInfoPolicy;
message_filters::Synchronizer<syncPolicy>* exactSync_;
message_filters::Synchronizer<syncInfoPolicy>* exactInfoSync_;
message_filters::Subscriber<sensor_msgs::msg::PointCloud2> syncCloudSub_;
message_filters::Subscriber<nav_msgs::msg::Odometry> syncOdomSub_;
message_filters::Subscriber<rtabmap_ros::msg::OdomInfo> syncOdomInfoSub_;
int maxClouds_;
int skipClouds_;
int cloudsSkipped_;
bool circularBuffer_;
double linearUpdate_;
double angularUpdate_;
double assemblingTime_;
double waitForTransformDuration_;
double waitForTransform_;
double rangeMin_;
double rangeMax_;
double voxelSize_;
double noiseRadius_;
int noiseMinNeighbors_;
bool removeZ_;
std::string fixedFrameId_;
std::string frameId_;
std::shared_ptr<tf2_ros::Buffer> tfBuffer_;
std::shared_ptr<tf2_ros::TransformListener> tfListener_;
rtabmap::Transform previousPose_;
std::vector<sensor_msgs::msg::PointCloud2::SharedPtr> clouds_;
std::list<pcl::PCLPointCloud2::Ptr> clouds_;
std::string subscribedTopicsMsg_;
};
}
@@ -59,6 +59,7 @@ private:
private:
image_transport::Publisher depthImage16Pub_;
image_transport::Publisher depthImage32Pub_;
rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr pointCloudTransformedPub_;
message_filters::Subscriber<sensor_msgs::msg::PointCloud2> pointCloudSub_;
message_filters::Subscriber<sensor_msgs::msg::CameraInfo> cameraInfoSub_;
std::string fixedFrameId_;
@@ -77,3 +78,4 @@ private:
};
}
+81
View File
@@ -0,0 +1,81 @@
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
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 Universite de Sherbrooke 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 HOLDER 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 <rtabmap_ros/visibility.h>
#include "rclcpp/rclcpp.hpp"
#include <sensor_msgs/msg/image.hpp>
#include <sensor_msgs/msg/camera_info.hpp>
#include <image_transport/image_transport.hpp>
#include <image_transport/subscriber_filter.hpp>
#include <message_filters/sync_policies/approximate_time.h>
#include <message_filters/sync_policies/exact_time.h>
#include <message_filters/subscriber.h>
#include "rtabmap_ros/msg/rgbd_image.hpp"
namespace rtabmap_ros
{
class RGBSync : public rclcpp::Node
{
public:
RTABMAP_ROS_PUBLIC
explicit RGBSync(const rclcpp::NodeOptions & options);
virtual ~RGBSync();
void callback(
const sensor_msgs::msg::Image::ConstSharedPtr image,
const sensor_msgs::msg::CameraInfo::ConstSharedPtr cameraInfo);
private:
double compressedRate_;
std::thread * warningThread_;
bool callbackCalled_;
rclcpp::Time lastCompressedPublished_;
std::string subscribedTopicsMsg_;
rclcpp::Publisher<rtabmap_ros::msg::RGBDImage>::SharedPtr rgbdImagePub_;
rclcpp::Publisher<rtabmap_ros::msg::RGBDImage>::SharedPtr rgbdImageCompressedPub_;
image_transport::SubscriberFilter imageSub_;
message_filters::Subscriber<sensor_msgs::msg::CameraInfo> cameraInfoSub_;
typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo> MyApproxSyncPolicy;
message_filters::Synchronizer<MyApproxSyncPolicy> * approxSync_;
typedef message_filters::sync_policies::ExactTime<sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo> MyExactSyncPolicy;
message_filters::Synchronizer<MyExactSyncPolicy> * exactSync_;
};
}
+14
View File
@@ -84,6 +84,13 @@ private:
const rtabmap_ros::msg::RGBDImage::ConstSharedPtr image3,
const rtabmap_ros::msg::RGBDImage::ConstSharedPtr image4);
void callbackRGBD5(
const rtabmap_ros::msg::RGBDImage::ConstSharedPtr image,
const rtabmap_ros::msg::RGBDImage::ConstSharedPtr image2,
const rtabmap_ros::msg::RGBDImage::ConstSharedPtr image3,
const rtabmap_ros::msg::RGBDImage::ConstSharedPtr image4,
const rtabmap_ros::msg::RGBDImage::ConstSharedPtr image5);
protected:
virtual void flushCallbacks();
@@ -97,6 +104,7 @@ private:
message_filters::Subscriber<rtabmap_ros::msg::RGBDImage> rgbd_image2_sub_;
message_filters::Subscriber<rtabmap_ros::msg::RGBDImage> rgbd_image3_sub_;
message_filters::Subscriber<rtabmap_ros::msg::RGBDImage> rgbd_image4_sub_;
message_filters::Subscriber<rtabmap_ros::msg::RGBDImage> rgbd_image5_sub_;
typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo> MyApproxSyncPolicy;
message_filters::Synchronizer<MyApproxSyncPolicy> * approxSync_;
@@ -114,6 +122,12 @@ private:
message_filters::Synchronizer<MyApproxSync4Policy> * approxSync4_;
typedef message_filters::sync_policies::ExactTime<rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage> MyExactSync4Policy;
message_filters::Synchronizer<MyExactSync4Policy> * exactSync4_;
typedef message_filters::sync_policies::ApproximateTime<rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage> MyApproxSync5Policy;
message_filters::Synchronizer<MyApproxSync5Policy> * approxSync5_;
typedef message_filters::sync_policies::ExactTime<rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage> MyExactSync5Policy;
message_filters::Synchronizer<MyExactSync5Policy> * exactSync5_;
int queueSize_;
bool keepColor_;
};
}
+2 -1
View File
@@ -58,12 +58,13 @@ public:
private:
double depthScale_;
int decimation_;
double compressedRate_;
std::thread * warningThread_;
bool callbackCalled_;
rclcpp::Time lastCompressedPublished_;
std::thread * warningThread_;
std::string subscribedTopicsMsg_;
rclcpp::Publisher<rtabmap_ros::msg::RGBDImage>::SharedPtr rgbdImagePub_;
+82
View File
@@ -0,0 +1,82 @@
/*
Copyright (c) 2010-2016, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
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 Universite de Sherbrooke 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 HOLDER 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 <rtabmap_ros/visibility.h>
#include "rclcpp/rclcpp.hpp"
#include <sensor_msgs/msg/image.hpp>
#include <sensor_msgs/msg/camera_info.hpp>
#include <image_transport/image_transport.hpp>
#include <image_transport/subscriber_filter.hpp>
#include <message_filters/sync_policies/approximate_time.h>
#include <message_filters/sync_policies/exact_time.h>
#include <message_filters/subscriber.h>
#include "rtabmap_ros/msg/rgbd_image.hpp"
#include "rtabmap_ros/msg/rgbd_images.hpp"
#include "rtabmap_ros/CommonDataSubscriber.h"
namespace rtabmap_ros
{
class RGBDXSync : public rclcpp::Node
{
public:
RTABMAP_ROS_PUBLIC
explicit RGBDXSync(const rclcpp::NodeOptions & options);
virtual ~RGBDXSync();
void callback(
const sensor_msgs::msg::Image::ConstSharedPtr image,
const sensor_msgs::msg::Image::ConstSharedPtr depth,
const sensor_msgs::msg::CameraInfo::ConstSharedPtr cameraInfo);
private:
DATA_SYNCS2(rgbd2, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS3(rgbd3, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS4(rgbd4, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS5(rgbd5, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS6(rgbd6, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS7(rgbd7, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
DATA_SYNCS8(rgbd8, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage, rtabmap_ros::msg::RGBDImage)
private:
std::thread * warningThread_;
bool callbackCalled_;
std::string subscribedTopicsMsg_;
rclcpp::Publisher<rtabmap_ros::msg::RGBDImages>::SharedPtr rgbdImagesPub_;
std::vector<message_filters::Subscriber<rtabmap_ros::msg::RGBDImage>*> rgbdSubs_;
};
}
+2
View File
@@ -76,6 +76,8 @@ private:
typedef message_filters::sync_policies::ExactTime<sensor_msgs::msg::Image, sensor_msgs::msg::Image, sensor_msgs::msg::CameraInfo, sensor_msgs::msg::CameraInfo> MyExactSyncPolicy;
message_filters::Synchronizer<MyExactSyncPolicy> * exactSync_;
rclcpp::Subscription<rtabmap_ros::msg::RGBDImage>::SharedPtr rgbdSub_;
int queueSize_;
bool keepColor_;
};
}