32 #include "../../../rtabmap_conversions/include/rtabmap_conversions/MsgConversion.h"
36 #define IMAGE_CONVERSION() \
37 std::vector<cv_bridge::CvImageConstPtr> imageMsgs(3); \
38 std::vector<cv_bridge::CvImageConstPtr> depthMsgs(3); \
39 rtabmap_conversions::toCvShare(image1Msg, imageMsgs[0], depthMsgs[0]); \
40 rtabmap_conversions::toCvShare(image2Msg, imageMsgs[1], depthMsgs[1]); \
41 rtabmap_conversions::toCvShare(image3Msg, imageMsgs[2], depthMsgs[2]); \
42 if(!depthMsgs[0].get()) \
44 std::vector<sensor_msgs::CameraInfo> cameraInfoMsgs; \
45 cameraInfoMsgs.push_back(image1Msg->rgb_camera_info); \
46 cameraInfoMsgs.push_back(image2Msg->rgb_camera_info); \
47 cameraInfoMsgs.push_back(image3Msg->rgb_camera_info); \
48 std::vector<sensor_msgs::CameraInfo> depthCameraInfoMsgs; \
49 depthCameraInfoMsgs.push_back(image1Msg->depth_camera_info); \
50 depthCameraInfoMsgs.push_back(image2Msg->depth_camera_info); \
51 depthCameraInfoMsgs.push_back(image3Msg->depth_camera_info); \
52 std::vector<rtabmap_msgs::GlobalDescriptor> globalDescriptorMsgs; \
53 std::vector<std::vector<rtabmap_msgs::KeyPoint> > localKeyPoints; \
54 std::vector<std::vector<rtabmap_msgs::Point3f> > localPoints3d; \
55 std::vector<cv::Mat> localDescriptors; \
56 if(!image1Msg->global_descriptor.data.empty()) \
57 globalDescriptorMsgs.push_back(image1Msg->global_descriptor); \
58 if(!image2Msg->global_descriptor.data.empty()) \
59 globalDescriptorMsgs.push_back(image2Msg->global_descriptor); \
60 if(!image3Msg->global_descriptor.data.empty()) \
61 globalDescriptorMsgs.push_back(image3Msg->global_descriptor); \
62 localKeyPoints.push_back(image1Msg->key_points); \
63 localKeyPoints.push_back(image2Msg->key_points); \
64 localKeyPoints.push_back(image3Msg->key_points); \
65 localPoints3d.push_back(image1Msg->points); \
66 localPoints3d.push_back(image2Msg->points); \
67 localPoints3d.push_back(image3Msg->points); \
68 localDescriptors.push_back(rtabmap::uncompressData(image1Msg->descriptors)); \
69 localDescriptors.push_back(rtabmap::uncompressData(image2Msg->descriptors)); \
70 localDescriptors.push_back(rtabmap::uncompressData(image3Msg->descriptors));
73 void CommonDataSubscriber::rgbd3Callback(
74 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
75 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
76 const rtabmap_msgs::RGBDImageConstPtr& image3Msg)
80 nav_msgs::OdometryConstPtr odomMsg;
81 rtabmap_msgs::UserDataConstPtr userDataMsg;
82 sensor_msgs::LaserScan scanMsg;
83 sensor_msgs::PointCloud2 scan3dMsg;
84 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
86 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg,
87 scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
88 localKeyPoints, localPoints3d, localDescriptors);
90 void CommonDataSubscriber::rgbd3Scan2dCallback(
91 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
92 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
93 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
94 const sensor_msgs::LaserScanConstPtr& scanMsg)
98 nav_msgs::OdometryConstPtr odomMsg;
99 rtabmap_msgs::UserDataConstPtr userDataMsg;
100 sensor_msgs::PointCloud2 scan3dMsg;
101 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
103 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, *scanMsg,
104 scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
105 localKeyPoints, localPoints3d, localDescriptors);
107 void CommonDataSubscriber::rgbd3Scan3dCallback(
108 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
109 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
110 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
111 const sensor_msgs::PointCloud2ConstPtr& scan3dMsg)
115 nav_msgs::OdometryConstPtr odomMsg;
116 rtabmap_msgs::UserDataConstPtr userDataMsg;
117 sensor_msgs::LaserScan scanMsg;
118 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
120 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg,
121 *scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
122 localKeyPoints, localPoints3d, localDescriptors);
124 void CommonDataSubscriber::rgbd3ScanDescCallback(
125 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
126 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
127 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
128 const rtabmap_msgs::ScanDescriptorConstPtr& scanDescMsg)
132 nav_msgs::OdometryConstPtr odomMsg;
133 rtabmap_msgs::UserDataConstPtr userDataMsg;
134 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
135 if(!scanDescMsg->global_descriptor.data.empty())
137 globalDescriptorMsgs.push_back(scanDescMsg->global_descriptor);
140 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanDescMsg->scan,
141 scanDescMsg->scan_cloud, odomInfoMsg, globalDescriptorMsgs,
142 localKeyPoints, localPoints3d, localDescriptors);
144 void CommonDataSubscriber::rgbd3InfoCallback(
145 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
146 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
147 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
148 const rtabmap_msgs::OdomInfoConstPtr& odomInfoMsg)
152 nav_msgs::OdometryConstPtr odomMsg;
153 rtabmap_msgs::UserDataConstPtr userDataMsg;
154 sensor_msgs::LaserScan scanMsg;
155 sensor_msgs::PointCloud2 scan3dMsg;
157 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg,
158 scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
159 localKeyPoints, localPoints3d, localDescriptors);
163 void CommonDataSubscriber::rgbd3OdomCallback(
164 const nav_msgs::OdometryConstPtr & odomMsg,
165 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
166 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
167 const rtabmap_msgs::RGBDImageConstPtr& image3Msg)
171 rtabmap_msgs::UserDataConstPtr userDataMsg;
172 sensor_msgs::LaserScan scanMsg;
173 sensor_msgs::PointCloud2 scan3dMsg;
174 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
176 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg,
177 scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
178 localKeyPoints, localPoints3d, localDescriptors);
180 void CommonDataSubscriber::rgbd3OdomScan2dCallback(
181 const nav_msgs::OdometryConstPtr & odomMsg,
182 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
183 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
184 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
185 const sensor_msgs::LaserScanConstPtr& scanMsg)
189 rtabmap_msgs::UserDataConstPtr userDataMsg;
190 sensor_msgs::PointCloud2 scan3dMsg;
191 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
193 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, *scanMsg,
194 scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
195 localKeyPoints, localPoints3d, localDescriptors);
197 void CommonDataSubscriber::rgbd3OdomScan3dCallback(
198 const nav_msgs::OdometryConstPtr & odomMsg,
199 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
200 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
201 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
202 const sensor_msgs::PointCloud2ConstPtr& scan3dMsg)
206 rtabmap_msgs::UserDataConstPtr userDataMsg;
207 sensor_msgs::LaserScan scanMsg;
208 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
210 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg,
211 *scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
212 localKeyPoints, localPoints3d, localDescriptors);
214 void CommonDataSubscriber::rgbd3OdomScanDescCallback(
215 const nav_msgs::OdometryConstPtr & odomMsg,
216 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
217 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
218 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
219 const rtabmap_msgs::ScanDescriptorConstPtr& scanDescMsg)
223 rtabmap_msgs::UserDataConstPtr userDataMsg;
224 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
225 if(!scanDescMsg->global_descriptor.data.empty())
227 globalDescriptorMsgs.push_back(scanDescMsg->global_descriptor);
230 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanDescMsg->scan,
231 scanDescMsg->scan_cloud, odomInfoMsg, globalDescriptorMsgs,
232 localKeyPoints, localPoints3d, localDescriptors);
234 void CommonDataSubscriber::rgbd3OdomInfoCallback(
235 const nav_msgs::OdometryConstPtr & odomMsg,
236 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
237 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
238 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
239 const rtabmap_msgs::OdomInfoConstPtr& odomInfoMsg)
243 rtabmap_msgs::UserDataConstPtr userDataMsg;
244 sensor_msgs::LaserScan scanMsg;
245 sensor_msgs::PointCloud2 scan3dMsg;
247 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg,
248 scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
249 localKeyPoints, localPoints3d, localDescriptors);
252 #ifdef RTABMAP_SYNC_USER_DATA
254 void CommonDataSubscriber::rgbd3DataCallback(
255 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
256 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
257 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
258 const rtabmap_msgs::RGBDImageConstPtr& image3Msg)
262 nav_msgs::OdometryConstPtr odomMsg;
263 sensor_msgs::LaserScan scanMsg;
264 sensor_msgs::PointCloud2 scan3dMsg;
265 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
267 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg,
268 scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
269 localKeyPoints, localPoints3d, localDescriptors);
271 void CommonDataSubscriber::rgbd3DataScan2dCallback(
272 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
273 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
274 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
275 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
276 const sensor_msgs::LaserScanConstPtr& scanMsg)
280 nav_msgs::OdometryConstPtr odomMsg;
281 sensor_msgs::PointCloud2 scan3dMsg;
282 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
284 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, *scanMsg,
285 scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
286 localKeyPoints, localPoints3d, localDescriptors);
288 void CommonDataSubscriber::rgbd3DataScan3dCallback(
289 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
290 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
291 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
292 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
293 const sensor_msgs::PointCloud2ConstPtr& scan3dMsg)
297 nav_msgs::OdometryConstPtr odomMsg;
298 sensor_msgs::LaserScan scanMsg;
299 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
301 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg,
302 *scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
303 localKeyPoints, localPoints3d, localDescriptors);
305 void CommonDataSubscriber::rgbd3DataScanDescCallback(
306 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
307 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
308 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
309 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
310 const rtabmap_msgs::ScanDescriptorConstPtr& scanDescMsg)
314 nav_msgs::OdometryConstPtr odomMsg;
315 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
316 if(!scanDescMsg->global_descriptor.data.empty())
318 globalDescriptorMsgs.push_back(scanDescMsg->global_descriptor);
321 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanDescMsg->scan,
322 scanDescMsg->scan_cloud, odomInfoMsg, globalDescriptorMsgs,
323 localKeyPoints, localPoints3d, localDescriptors);
325 void CommonDataSubscriber::rgbd3DataInfoCallback(
326 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
327 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
328 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
329 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
330 const rtabmap_msgs::OdomInfoConstPtr& odomInfoMsg)
334 nav_msgs::OdometryConstPtr odomMsg;
335 sensor_msgs::LaserScan scanMsg;
336 sensor_msgs::PointCloud2 scan3dMsg;
338 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg,
339 scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
340 localKeyPoints, localPoints3d, localDescriptors);
343 void CommonDataSubscriber::rgbd3OdomDataCallback(
344 const nav_msgs::OdometryConstPtr& odomMsg,
345 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
346 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
347 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
348 const rtabmap_msgs::RGBDImageConstPtr& image3Msg)
352 sensor_msgs::LaserScan scanMsg;
353 sensor_msgs::PointCloud2 scan3dMsg;
354 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
356 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg,
357 scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
358 localKeyPoints, localPoints3d, localDescriptors);
360 void CommonDataSubscriber::rgbd3OdomDataScan2dCallback(
361 const nav_msgs::OdometryConstPtr& odomMsg,
362 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
363 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
364 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
365 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
366 const sensor_msgs::LaserScanConstPtr& scanMsg)
370 sensor_msgs::PointCloud2 scan3dMsg;
371 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
373 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, *scanMsg,
374 scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
375 localKeyPoints, localPoints3d, localDescriptors);
377 void CommonDataSubscriber::rgbd3OdomDataScan3dCallback(
378 const nav_msgs::OdometryConstPtr& odomMsg,
379 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
380 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
381 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
382 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
383 const sensor_msgs::PointCloud2ConstPtr& scan3dMsg)
387 sensor_msgs::LaserScan scanMsg;
388 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
390 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg,
391 *scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
392 localKeyPoints, localPoints3d, localDescriptors);
394 void CommonDataSubscriber::rgbd3OdomDataScanDescCallback(
395 const nav_msgs::OdometryConstPtr& odomMsg,
396 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
397 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
398 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
399 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
400 const rtabmap_msgs::ScanDescriptorConstPtr& scanDescMsg)
404 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
405 if(!scanDescMsg->global_descriptor.data.empty())
407 globalDescriptorMsgs.push_back(scanDescMsg->global_descriptor);
410 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanDescMsg->scan,
411 scanDescMsg->scan_cloud, odomInfoMsg, globalDescriptorMsgs,
412 localKeyPoints, localPoints3d, localDescriptors);
414 void CommonDataSubscriber::rgbd3OdomDataInfoCallback(
415 const nav_msgs::OdometryConstPtr& odomMsg,
416 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
417 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
418 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
419 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
420 const rtabmap_msgs::OdomInfoConstPtr& odomInfoMsg)
424 sensor_msgs::LaserScan scanMsg;
425 sensor_msgs::PointCloud2 scan3dMsg;
427 depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg,
428 scan3dMsg, odomInfoMsg, globalDescriptorMsgs,
429 localKeyPoints, localPoints3d, localDescriptors);
433 void CommonDataSubscriber::setupRGBD3Callbacks(
437 bool subscribeUserData,
438 bool subscribeScan2d,
439 bool subscribeScan3d,
440 bool subscribeScanDescriptor,
441 bool subscribeOdomInfo)
446 for(
int i=0;
i<3; ++
i)
451 #ifdef RTABMAP_SYNC_USER_DATA
452 if(subscribeOdom && subscribeUserData)
456 if(subscribeScanDescriptor)
460 if(subscribeOdomInfo)
463 ROS_WARN(
"subscribe_odom_info ignored...");
467 else if(subscribeScan2d)
471 if(subscribeOdomInfo)
474 ROS_WARN(
"subscribe_odom_info ignored...");
478 else if(subscribeScan3d)
482 if(subscribeOdomInfo)
485 ROS_WARN(
"subscribe_odom_info ignored...");
489 else if(subscribeOdomInfo)
505 if(subscribeScanDescriptor)
509 if(subscribeOdomInfo)
512 ROS_WARN(
"subscribe_odom_info ignored...");
516 else if(subscribeScan2d)
520 if(subscribeOdomInfo)
523 ROS_WARN(
"subscribe_odom_info ignored...");
527 else if(subscribeScan3d)
531 if(subscribeOdomInfo)
534 ROS_WARN(
"subscribe_odom_info ignored...");
538 else if(subscribeOdomInfo)
549 #ifdef RTABMAP_SYNC_USER_DATA
550 else if(subscribeUserData)
553 if(subscribeScanDescriptor)
557 if(subscribeOdomInfo)
560 ROS_WARN(
"subscribe_odom_info ignored...");
563 else if(subscribeScan2d)
567 if(subscribeOdomInfo)
570 ROS_WARN(
"subscribe_odom_info ignored...");
574 else if(subscribeScan3d)
578 if(subscribeOdomInfo)
581 ROS_WARN(
"subscribe_odom_info ignored...");
585 else if(subscribeOdomInfo)
599 if(subscribeScanDescriptor)
603 if(subscribeOdomInfo)
606 ROS_WARN(
"subscribe_odom_info ignored...");
610 else if(subscribeScan2d)
614 if(subscribeOdomInfo)
617 ROS_WARN(
"subscribe_odom_info ignored...");
621 else if(subscribeScan3d)
625 if(subscribeOdomInfo)
628 ROS_WARN(
"subscribe_odom_info ignored...");
632 else if(subscribeOdomInfo)