42 #include <sensor_msgs/Image.h>    47 #include <rtabmap_ros/RGBDImages.h>   134                 bool approxSync = 
true;
   135                 bool subscribeRGBD = 
false;
   136                 double approxSyncMaxInterval = 0.0;
   137                 pnh.
param(
"approx_sync", approxSync, approxSync);
   138                 pnh.
param(
"approx_sync_max_interval", approxSyncMaxInterval, approxSyncMaxInterval);
   139                 pnh.
param(
"queue_size", queueSize_, queueSize_);
   140                 pnh.
param(
"subscribe_rgbd", subscribeRGBD, subscribeRGBD);
   143                         ROS_ERROR(
"\"depth_cameras\" parameter doesn't exist anymore. It is replaced by \"rgbd_cameras\" with the \"rgbd_image\" input topics. \"subscribe_rgbd\" should be also set to true.");
   145                 pnh.
param(
"rgbd_cameras", rgbdCameras, rgbdCameras);
   152                         NODELET_FATAL(
"Only 5 cameras maximum supported yet. Set 0 to use rgbd_images input (for which rgbdx_sync node can sync up to 8 cameras).");
   154                 pnh.
param(
"keep_color", keepColor_, keepColor_);
   156                 NODELET_INFO(
"RGBDOdometry: approx_sync    = %s", approxSync?
"true":
"false");
   158                         NODELET_INFO(
"RGBDOdometry: approx_sync_max_interval = %f", approxSyncMaxInterval);
   159                 NODELET_INFO(
"RGBDOdometry: queue_size     = %d", queueSize_);
   160                 NODELET_INFO(
"RGBDOdometry: subscribe_rgbd = %s", subscribeRGBD?
"true":
"false");
   161                 NODELET_INFO(
"RGBDOdometry: rgbd_cameras   = %d", rgbdCameras);
   162                 NODELET_INFO(
"RGBDOdometry: keep_color     = %s", keepColor_?
"true":
"false");
   164                 std::string subscribedTopicsMsg;
   169                                 rgbd_image1_sub_.subscribe(nh, 
"rgbd_image0", 1);
   170                                 rgbd_image2_sub_.subscribe(nh, 
"rgbd_image1", 1);
   173                                         rgbd_image3_sub_.subscribe(nh, 
"rgbd_image2", 1);
   177                                         rgbd_image4_sub_.subscribe(nh, 
"rgbd_image3", 1);
   181                                         rgbd_image5_sub_.subscribe(nh, 
"rgbd_image4", 1);
   192                                                 if(approxSyncMaxInterval > 0.0)
   193                                                         approxSync2_->setMaxIntervalDuration(
ros::Duration(approxSyncMaxInterval));
   194                                                 approxSync2_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD2, 
this, boost::placeholders::_1, boost::placeholders::_2));
   202                                                 exactSync2_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD2, 
this, boost::placeholders::_1, boost::placeholders::_2));
   204                                         subscribedTopicsMsg = 
uFormat(
"\n%s subscribed to (%s sync%s):\n   %s \\\n   %s",
   206                                                         approxSync?
"approx":
"exact",
   207                                                         approxSync&&approxSyncMaxInterval!=0.0?
uFormat(
", max interval=%fs", approxSyncMaxInterval).c_str():
"",
   208                                                         rgbd_image1_sub_.getTopic().c_str(),
   209                                                         rgbd_image2_sub_.getTopic().c_str());
   211                                 else if(rgbdCameras == 3)
   220                                                 if(approxSyncMaxInterval > 0.0)
   221                                                         approxSync3_->setMaxIntervalDuration(
ros::Duration(approxSyncMaxInterval));
   222                                                 approxSync3_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD3, 
this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
   231                                                 exactSync3_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD3, 
this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
   233                                         subscribedTopicsMsg = 
uFormat(
"\n%s subscribed to (%s sync%s):\n   %s \\\n   %s \\\n   %s",
   235                                                         approxSync?
"approx":
"exact",
   236                                                         approxSync&&approxSyncMaxInterval!=0.0?
uFormat(
", max interval=%fs", approxSyncMaxInterval).c_str():
"",
   237                                                         rgbd_image1_sub_.getTopic().c_str(),
   238                                                         rgbd_image2_sub_.getTopic().c_str(),
   239                                                         rgbd_image3_sub_.getTopic().c_str());
   241                                 else if(rgbdCameras == 4)
   251                                                 if(approxSyncMaxInterval > 0.0)
   252                                                         approxSync4_->setMaxIntervalDuration(
ros::Duration(approxSyncMaxInterval));
   253                                                 approxSync4_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD4, 
this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3, boost::placeholders::_4));
   263                                                 exactSync4_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD4, 
this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3, boost::placeholders::_4));
   265                                         subscribedTopicsMsg = 
uFormat(
"\n%s subscribed to (%s sync%s):\n   %s \\\n   %s \\\n   %s \\\n   %s",
   267                                                         approxSync?
"approx":
"exact",
   268                                                         approxSync&&approxSyncMaxInterval!=0.0?
uFormat(
", max interval=%fs", approxSyncMaxInterval).c_str():
"",
   269                                                         rgbd_image1_sub_.getTopic().c_str(),
   270                                                         rgbd_image2_sub_.getTopic().c_str(),
   271                                                         rgbd_image3_sub_.getTopic().c_str(),
   272                                                         rgbd_image4_sub_.getTopic().c_str());
   274                                 else if(rgbdCameras == 5)
   285                                                 if(approxSyncMaxInterval > 0.0)
   286                                                         approxSync5_->setMaxIntervalDuration(
ros::Duration(approxSyncMaxInterval));
   287                                                 approxSync5_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD5, 
this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3, boost::placeholders::_4, boost::placeholders::_5));
   298                                                 exactSync5_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD5, 
this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3, boost::placeholders::_4, boost::placeholders::_5));
   300                                         subscribedTopicsMsg = 
uFormat(
"\n%s subscribed to (%s sync%s):\n   %s \\\n  %s \\\n  %s \\\n   %s \\\n   %s",
   302                                                         approxSync?
"approx":
"exact",
   303                                                         approxSync&&approxSyncMaxInterval!=0.0?
uFormat(
", max interval=%fs", approxSyncMaxInterval).c_str():
"",
   304                                                         rgbd_image1_sub_.getTopic().c_str(),
   305                                                         rgbd_image2_sub_.getTopic().c_str(),
   306                                                         rgbd_image3_sub_.getTopic().c_str(),
   307                                                         rgbd_image4_sub_.getTopic().c_str(),
   308                                                         rgbd_image5_sub_.getTopic().c_str());
   312                         else if(rgbdCameras == 0)
   314                                 rgbdxSub_ = nh.
subscribe(
"rgbd_images", 1, &RGBDOdometry::callbackRGBDX, 
this);
   316                                 subscribedTopicsMsg =
   317                                                 uFormat(
"\n%s subscribed to:\n   %s",
   319                                                 rgbdxSub_.getTopic().c_str());
   323                                 rgbdSub_ = nh.
subscribe(
"rgbd_image", 1, &RGBDOdometry::callbackRGBD, 
this);
   325                                 subscribedTopicsMsg =
   326                                                 uFormat(
"\n%s subscribed to:\n   %s",
   328                                                 rgbdSub_.getTopic().c_str());
   342                         image_mono_sub_.subscribe(rgb_it, rgb_nh.
resolveName(
"image"), 1, hintsRgb);
   343                         image_depth_sub_.subscribe(depth_it, depth_nh.
resolveName(
"image"), 1, hintsDepth);
   344                         info_sub_.subscribe(rgb_nh, 
"camera_info", 1);
   349                                 if(approxSyncMaxInterval > 0.0)
   350                                         approxSync_->setMaxIntervalDuration(
ros::Duration(approxSyncMaxInterval));
   359                         subscribedTopicsMsg = 
uFormat(
"\n%s subscribed to (%s sync%s):\n   %s \\\n   %s \\\n   %s",
   361                                         approxSync?
"approx":
"exact",
   362                                         approxSync&&approxSyncMaxInterval!=0.0?
uFormat(
", max interval=%fs", approxSyncMaxInterval).c_str():
"",
   363                                         image_mono_sub_.getTopic().c_str(),
   364                                         image_depth_sub_.getTopic().c_str(),
   365                                         info_sub_.getTopic().c_str());
   367                 this->startWarningThread(subscribedTopicsMsg, approxSync);
   373                 ParametersMap::iterator iter = parameters.find(Parameters::kRegStrategy());
   374                 if(iter != parameters.end() && iter->second.compare(
"0") != 0)
   376                         ROS_WARN(
"RGBD odometry works only with \"Reg/Strategy\"=0. Ignoring value %s.", iter->second.c_str());
   380                 int estimationType = Parameters::defaultVisEstimationType();
   384                 bool subscribeRGBD = 
false;
   385                 pnh.
param(
"subscribe_rgbd", subscribeRGBD, subscribeRGBD);
   386                 pnh.
param(
"rgbd_cameras", rgbdCameras, rgbdCameras);
   390                                 const std::vector<cv_bridge::CvImageConstPtr> & rgbImages,
   391                                 const std::vector<cv_bridge::CvImageConstPtr> & depthImages,
   392                                 const std::vector<sensor_msgs::CameraInfo>& cameraInfos)
   394                 ROS_ASSERT(rgbImages.size() > 0 && rgbImages.size() == depthImages.size() && rgbImages.size() == cameraInfos.size());
   396                 int imageWidth = rgbImages[0]->image.cols;
   397                 int imageHeight = rgbImages[0]->image.rows;
   398                 int depthWidth = depthImages[0]->image.cols;
   399                 int depthHeight = depthImages[0]->image.rows;
   402                         imageWidth/depthWidth == imageHeight/depthHeight,
   403                         uFormat(
"rgb=%dx%d depth=%dx%d", imageWidth, imageHeight, depthWidth, depthHeight).c_str());
   405                 int cameraCount = rgbImages.size();
   408                 std::vector<rtabmap::CameraModel> cameraModels;
   409                 for(
unsigned int i=0; i<rgbImages.size(); ++i)
   423                                         NODELET_ERROR(
"Input type must be image=mono8,mono16,rgb8,bgr8,bgra8,rgba8 and "   424                                         "image_depth=32FC1,16UC1,mono16. Current rgb=%s and depth=%s",
   425                                                 rgbImages[i]->encoding.c_str(),
   426                                                 depthImages[i]->encoding.c_str());
   429                         UASSERT_MSG(rgbImages[i]->image.cols == imageWidth && rgbImages[i]->image.rows == imageHeight,
   430                                         uFormat(
"imageWidth=%d vs %d imageHeight=%d vs %d",
   432                                                         rgbImages[i]->image.cols,
   434                                                         rgbImages[i]->image.rows).c_str());
   435                         UASSERT_MSG(depthImages[i]->image.cols == depthWidth && depthImages[i]->image.rows == depthHeight,
   436                                         uFormat(
"depthWidth=%d vs %d depthHeight=%d vs %d",
   438                                                         depthImages[i]->image.cols,
   440                                                         depthImages[i]->image.rows).c_str());
   442                         ros::Time stamp = rgbImages[i]->header.stamp>depthImages[i]->header.stamp?rgbImages[i]->header.stamp:depthImages[i]->header.stamp;
   448                         else if(stamp > higherStamp)
   454                         if(localTransform.
isNull())
   461                                 double stampDiff = fabs(rgbImages[i]->
header.stamp.toSec() - rgbImages[i-1]->header.stamp.toSec());
   462                                 if(stampDiff > 1.0/60.0)
   464                                         static bool warningShown = 
false;
   467                                                 NODELET_WARN(
"The time difference between cameras %d and %d is "   468                                                                 "high (diff=%fs, cam%d=%fs, cam%d=%fs). You may want "   469                                                                 "to set approx_sync_max_interval to reject bad synchronizations or use "   470                                                                 "approx_sync=false if streams have all the exact same timestamp. This "   471                                                                 "message is only printed once.",
   474                                                                 i-1, rgbImages[i-1]->
header.stamp.toSec(),
   475                                                                 i, rgbImages[i]->header.stamp.toSec());
   501                                 rgb = cv::Mat(imageHeight, imageWidth*cameraCount, ptrImage->image.type());
   505                                 depth = cv::Mat(depthHeight, depthWidth*cameraCount, ptrDepth->image.type());
   508                         if(ptrImage->image.type() == rgb.type())
   510                                 ptrImage->image.copyTo(cv::Mat(rgb, cv::Rect(i*imageWidth, 0, imageWidth, imageHeight)));
   514                                 NODELET_ERROR(
"Some RGB images are not the same type! %d vs %d", ptrImage->image.type(), rgb.type());
   518                         if(ptrDepth->image.type() == depth.type())
   520                                 ptrDepth->image.copyTo(cv::Mat(depth, cv::Rect(i*depthWidth, 0, depthWidth, depthHeight)));
   524                                 NODELET_ERROR(
"Some Depth images are not the same type! %d vs %d", ptrDepth->image.type(), depth.type());
   539                 header.stamp = higherStamp;
   540                 header.frame_id = rgbImages.size()==1?rgbImages[0]->header.frame_id:
"";
   541                 this->processData(data, header);
   545                         const sensor_msgs::ImageConstPtr& image,
   546                         const sensor_msgs::ImageConstPtr& depth,
   547                         const sensor_msgs::CameraInfoConstPtr& cameraInfo)
   550                 if(!this->isPaused())
   552                         std::vector<cv_bridge::CvImageConstPtr> imageMsgs(1);
   553                         std::vector<cv_bridge::CvImageConstPtr> depthMsgs(1);
   554                         std::vector<sensor_msgs::CameraInfo> infoMsgs;
   557                         infoMsgs.push_back(*cameraInfo);
   559                         double stampDiff = fabs(image->header.stamp.toSec() - depth->header.stamp.toSec());
   560                         if(stampDiff > 0.020)
   562                                 NODELET_WARN(
"The time difference between rgb and depth frames is "   563                                                 "high (diff=%fs, rgb=%fs, depth=%fs). You may want "   564                                                 "to set approx_sync_max_interval lower than 0.02s to reject spurious bad synchronizations or use "   565                                                 "approx_sync=false if streams have all the exact same timestamp.",
   567                                                 image->header.stamp.toSec(),
   568                                                 depth->header.stamp.toSec());
   571                         this->commonCallback(imageMsgs, depthMsgs, infoMsgs);
   576                         const rtabmap_ros::RGBDImageConstPtr& image)
   579                 if(!this->isPaused())
   581                         std::vector<cv_bridge::CvImageConstPtr> imageMsgs(1);
   582                         std::vector<cv_bridge::CvImageConstPtr> depthMsgs(1);
   583                         std::vector<sensor_msgs::CameraInfo> infoMsgs;
   585                         infoMsgs.push_back(image->rgb_camera_info);
   587                         this->commonCallback(imageMsgs, depthMsgs, infoMsgs);
   592                         const rtabmap_ros::RGBDImagesConstPtr& images)
   595                 if(!this->isPaused())
   597                         if(images->rgbd_images.empty())
   599                                 NODELET_ERROR(
"Input topic \"%s\" doesn't contain any image(s)!", rgbdxSub_.getTopic().c_str());
   602                         std::vector<cv_bridge::CvImageConstPtr> imageMsgs(images->rgbd_images.size());
   603                         std::vector<cv_bridge::CvImageConstPtr> depthMsgs(images->rgbd_images.size());
   604                         std::vector<sensor_msgs::CameraInfo> infoMsgs;
   605                         for(
size_t i=0; i<images->rgbd_images.size(); ++i)
   608                                 infoMsgs.push_back(images->rgbd_images[i].rgb_camera_info);
   611                         this->commonCallback(imageMsgs, depthMsgs, infoMsgs);
   616                         const rtabmap_ros::RGBDImageConstPtr& image,
   617                         const rtabmap_ros::RGBDImageConstPtr& image2)
   620                 if(!this->isPaused())
   622                         std::vector<cv_bridge::CvImageConstPtr> imageMsgs(2);
   623                         std::vector<cv_bridge::CvImageConstPtr> depthMsgs(2);
   624                         std::vector<sensor_msgs::CameraInfo> infoMsgs;
   627                         infoMsgs.push_back(image->rgb_camera_info);
   628                         infoMsgs.push_back(image2->rgb_camera_info);
   630                         this->commonCallback(imageMsgs, depthMsgs, infoMsgs);
   635                         const rtabmap_ros::RGBDImageConstPtr& image,
   636                         const rtabmap_ros::RGBDImageConstPtr& image2,
   637                         const rtabmap_ros::RGBDImageConstPtr& image3)
   640                 if(!this->isPaused())
   642                         std::vector<cv_bridge::CvImageConstPtr> imageMsgs(3);
   643                         std::vector<cv_bridge::CvImageConstPtr> depthMsgs(3);
   644                         std::vector<sensor_msgs::CameraInfo> infoMsgs;
   648                         infoMsgs.push_back(image->rgb_camera_info);
   649                         infoMsgs.push_back(image2->rgb_camera_info);
   650                         infoMsgs.push_back(image3->rgb_camera_info);
   652                         this->commonCallback(imageMsgs, depthMsgs, infoMsgs);
   657                         const rtabmap_ros::RGBDImageConstPtr& image,
   658                         const rtabmap_ros::RGBDImageConstPtr& image2,
   659                         const rtabmap_ros::RGBDImageConstPtr& image3,
   660                         const rtabmap_ros::RGBDImageConstPtr& image4)
   663                 if(!this->isPaused())
   665                         std::vector<cv_bridge::CvImageConstPtr> imageMsgs(4);
   666                         std::vector<cv_bridge::CvImageConstPtr> depthMsgs(4);
   667                         std::vector<sensor_msgs::CameraInfo> infoMsgs;
   672                         infoMsgs.push_back(image->rgb_camera_info);
   673                         infoMsgs.push_back(image2->rgb_camera_info);
   674                         infoMsgs.push_back(image3->rgb_camera_info);
   675                         infoMsgs.push_back(image4->rgb_camera_info);
   677                         this->commonCallback(imageMsgs, depthMsgs, infoMsgs);
   682                         const rtabmap_ros::RGBDImageConstPtr& image,
   683                         const rtabmap_ros::RGBDImageConstPtr& image2,
   684                         const rtabmap_ros::RGBDImageConstPtr& image3,
   685                         const rtabmap_ros::RGBDImageConstPtr& image4,
   686                         const rtabmap_ros::RGBDImageConstPtr& image5)
   689                 if(!this->isPaused())
   691                         std::vector<cv_bridge::CvImageConstPtr> imageMsgs(5);
   692                         std::vector<cv_bridge::CvImageConstPtr> depthMsgs(5);
   693                         std::vector<sensor_msgs::CameraInfo> infoMsgs;
   699                         infoMsgs.push_back(image->rgb_camera_info);
   700                         infoMsgs.push_back(image2->rgb_camera_info);
   701                         infoMsgs.push_back(image3->rgb_camera_info);
   702                         infoMsgs.push_back(image4->rgb_camera_info);
   703                         infoMsgs.push_back(image5->rgb_camera_info);
   705                         this->commonCallback(imageMsgs, depthMsgs, infoMsgs);
   732                         approxSync2_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD2, 
this, boost::placeholders::_1, boost::placeholders::_2));
   741                         exactSync2_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD2, 
this, boost::placeholders::_1, boost::placeholders::_2));
   751                         approxSync3_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD3, 
this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
   761                         exactSync3_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD3, 
this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3));
   772                         approxSync4_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD4, 
this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3, boost::placeholders::_4));
   783                         exactSync4_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD4, 
this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3, boost::placeholders::_4));
   795                         approxSync5_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD5, 
this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3, boost::placeholders::_4, boost::placeholders::_5));
   807                         exactSync5_->
registerCallback(boost::bind(&RGBDOdometry::callbackRGBD5, 
this, boost::placeholders::_1, boost::placeholders::_2, boost::placeholders::_3, boost::placeholders::_4, boost::placeholders::_5));
 CvImageConstPtr toCvShare(const sensor_msgs::ImageConstPtr &source, const std::string &encoding=std::string())
const std::string BAYER_GRBG8
message_filters::Subscriber< rtabmap_ros::RGBDImage > rgbd_image2_sub_
message_filters::Subscriber< sensor_msgs::CameraInfo > info_sub_
static bool parse(const ParametersMap ¶meters, const std::string &key, bool &value)
void callbackRGBD4(const rtabmap_ros::RGBDImageConstPtr &image, const rtabmap_ros::RGBDImageConstPtr &image2, const rtabmap_ros::RGBDImageConstPtr &image3, const rtabmap_ros::RGBDImageConstPtr &image4)
std::string uFormat(const char *fmt,...)
#define NODELET_ERROR(...)
message_filters::sync_policies::ExactTime< rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage > MyExactSync5Policy
#define NODELET_WARN(...)
message_filters::sync_policies::ApproximateTime< sensor_msgs::Image, sensor_msgs::Image, sensor_msgs::CameraInfo > MyApproxSyncPolicy
void commonCallback(const std::vector< cv_bridge::CvImageConstPtr > &rgbImages, const std::vector< cv_bridge::CvImageConstPtr > &depthImages, const std::vector< sensor_msgs::CameraInfo > &cameraInfos)
message_filters::Synchronizer< MyExactSync2Policy > * exactSync2_
message_filters::sync_policies::ExactTime< sensor_msgs::Image, sensor_msgs::Image, sensor_msgs::CameraInfo > MyExactSyncPolicy
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
message_filters::Subscriber< rtabmap_ros::RGBDImage > rgbd_image1_sub_
std::pair< std::string, std::string > ParametersPair
message_filters::sync_policies::ApproximateTime< rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage > MyApproxSync2Policy
message_filters::Subscriber< rtabmap_ros::RGBDImage > rgbd_image3_sub_
message_filters::Synchronizer< MyExactSyncPolicy > * exactSync_
message_filters::Synchronizer< MyExactSync5Policy > * exactSync5_
ROSCONSOLE_CONSOLE_IMPL_DECL std::string getName(void *handle)
message_filters::Synchronizer< MyApproxSync3Policy > * approxSync3_
const std::string TYPE_8UC1
message_filters::sync_policies::ExactTime< rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage > MyExactSync2Policy
message_filters::Synchronizer< MyApproxSync4Policy > * approxSync4_
virtual void onOdomInit()
rtabmap::Transform getTransform(const std::string &fromFrameId, const std::string &toFrameId, const ros::Time &stamp, tf::TransformListener &listener, double waitForTransform)
image_transport::SubscriberFilter image_depth_sub_
void callbackRGBD5(const rtabmap_ros::RGBDImageConstPtr &image, const rtabmap_ros::RGBDImageConstPtr &image2, const rtabmap_ros::RGBDImageConstPtr &image3, const rtabmap_ros::RGBDImageConstPtr &image4, const rtabmap_ros::RGBDImageConstPtr &image5)
void callbackRGBD(const rtabmap_ros::RGBDImageConstPtr &image)
void callbackRGBD2(const rtabmap_ros::RGBDImageConstPtr &image, const rtabmap_ros::RGBDImageConstPtr &image2)
message_filters::sync_policies::ApproximateTime< rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage > MyApproxSync3Policy
message_filters::Synchronizer< MyApproxSync5Policy > * approxSync5_
void callback(const sensor_msgs::ImageConstPtr &image, const sensor_msgs::ImageConstPtr &depth, const sensor_msgs::CameraInfoConstPtr &cameraInfo)
message_filters::Subscriber< rtabmap_ros::RGBDImage > rgbd_image5_sub_
bool param(const std::string ¶m_name, T ¶m_val, const T &default_val) const
message_filters::Synchronizer< MyApproxSync2Policy > * approxSync2_
Connection registerCallback(C &callback)
#define UASSERT_MSG(condition, msg_str)
CvImagePtr cvtColor(const CvImageConstPtr &source, const std::string &encoding)
message_filters::Synchronizer< MyApproxSyncPolicy > * approxSync_
const std::string TYPE_32FC1
rtabmap::CameraModel cameraModelFromROS(const sensor_msgs::CameraInfo &camInfo, const rtabmap::Transform &localTransform=rtabmap::Transform::getIdentity())
const std::string TYPE_16UC1
std::string resolveName(const std::string &name, bool remap=true) const
message_filters::sync_policies::ApproximateTime< rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage > MyApproxSync5Policy
QMap< QString, QVariant > ParametersMap
image_transport::SubscriberFilter image_mono_sub_
message_filters::sync_policies::ApproximateTime< rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage > MyApproxSync4Policy
bool hasParam(const std::string &key) const
void callback(rtabmap_ros::CameraConfig &config, uint32_t level)
message_filters::sync_policies::ExactTime< rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage > MyExactSync4Policy
message_filters::Subscriber< rtabmap_ros::RGBDImage > rgbd_image4_sub_
#define NODELET_INFO(...)
virtual void updateParameters(ParametersMap ¶meters)
message_filters::Synchronizer< MyExactSync4Policy > * exactSync4_
void callbackRGBDX(const rtabmap_ros::RGBDImagesConstPtr &images)
ros::Subscriber rgbdxSub_
void toCvShare(const rtabmap_ros::RGBDImageConstPtr &image, cv_bridge::CvImageConstPtr &rgb, cv_bridge::CvImageConstPtr &depth)
void callbackRGBD3(const rtabmap_ros::RGBDImageConstPtr &image, const rtabmap_ros::RGBDImageConstPtr &image2, const rtabmap_ros::RGBDImageConstPtr &image3)
double timestampFromROS(const ros::Time &stamp)
message_filters::sync_policies::ExactTime< rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage, rtabmap_ros::RGBDImage > MyExactSync3Policy
message_filters::Synchronizer< MyExactSync3Policy > * exactSync3_
#define NODELET_FATAL(...)
PLUGINLIB_EXPORT_CLASS(apriltag_ros::ContinuousDetector, nodelet::Nodelet)
virtual void flushCallbacks()
void uInsert(std::map< K, V > &map, const std::pair< K, V > &pair)