36 #define IMAGE_CONVERSION() \
37 std::vector<cv_bridge::CvImageConstPtr> imageMsgs(2); \
38 std::vector<cv_bridge::CvImageConstPtr> depthMsgs(2); \
39 rtabmap_conversions::toCvShare(image1Msg, imageMsgs[0], depthMsgs[0]); \
40 rtabmap_conversions::toCvShare(image2Msg, imageMsgs[1], depthMsgs[1]); \
41 if(!depthMsgs[0].get()) \
43 std::vector<sensor_msgs::CameraInfo> cameraInfoMsgs; \
44 cameraInfoMsgs.push_back(image1Msg->rgb_camera_info); \
45 cameraInfoMsgs.push_back(image2Msg->rgb_camera_info); \
46 std::vector<sensor_msgs::CameraInfo> depthCameraInfoMsgs; \
47 depthCameraInfoMsgs.push_back(image1Msg->depth_camera_info); \
48 depthCameraInfoMsgs.push_back(image2Msg->depth_camera_info); \
49 std::vector<rtabmap_msgs::GlobalDescriptor> globalDescriptorMsgs; \
50 std::vector<std::vector<rtabmap_msgs::KeyPoint> > localKeyPoints; \
51 std::vector<std::vector<rtabmap_msgs::Point3f> > localPoints3d; \
52 std::vector<cv::Mat> localDescriptors; \
53 if(!image1Msg->global_descriptor.data.empty()) \
54 globalDescriptorMsgs.push_back(image1Msg->global_descriptor); \
55 if(!image2Msg->global_descriptor.data.empty()) \
56 globalDescriptorMsgs.push_back(image2Msg->global_descriptor); \
57 localKeyPoints.push_back(image1Msg->key_points); \
58 localKeyPoints.push_back(image2Msg->key_points); \
59 localPoints3d.push_back(image1Msg->points); \
60 localPoints3d.push_back(image2Msg->points); \
61 localDescriptors.push_back(rtabmap::uncompressData(image1Msg->descriptors)); \
62 localDescriptors.push_back(rtabmap::uncompressData(image2Msg->descriptors));
65 void CommonDataSubscriber::rgbd2Callback(
66 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
67 const rtabmap_msgs::RGBDImageConstPtr& image2Msg)
71 nav_msgs::OdometryConstPtr odomMsg;
72 rtabmap_msgs::UserDataConstPtr userDataMsg;
73 sensor_msgs::LaserScan scanMsg;
74 sensor_msgs::PointCloud2 scan3dMsg;
75 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
76 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
78 void CommonDataSubscriber::rgbd2Scan2dCallback(
79 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
80 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
81 const sensor_msgs::LaserScanConstPtr& scanMsg)
85 nav_msgs::OdometryConstPtr odomMsg;
86 rtabmap_msgs::UserDataConstPtr userDataMsg;
87 sensor_msgs::PointCloud2 scan3dMsg;
88 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
89 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, *scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
91 void CommonDataSubscriber::rgbd2Scan3dCallback(
92 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
93 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
94 const sensor_msgs::PointCloud2ConstPtr& scan3dMsg)
98 nav_msgs::OdometryConstPtr odomMsg;
99 rtabmap_msgs::UserDataConstPtr userDataMsg;
100 sensor_msgs::LaserScan scanMsg;
101 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
102 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, *scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
104 void CommonDataSubscriber::rgbd2ScanDescCallback(
105 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
106 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
107 const rtabmap_msgs::ScanDescriptorConstPtr& scanDescMsg)
111 nav_msgs::OdometryConstPtr odomMsg;
112 rtabmap_msgs::UserDataConstPtr userDataMsg;
113 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
114 if(!scanDescMsg->global_descriptor.data.empty())
116 globalDescriptorMsgs.push_back(scanDescMsg->global_descriptor);
118 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanDescMsg->scan, scanDescMsg->scan_cloud, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
120 void CommonDataSubscriber::rgbd2InfoCallback(
121 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
122 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
123 const rtabmap_msgs::OdomInfoConstPtr& odomInfoMsg)
127 nav_msgs::OdometryConstPtr odomMsg;
128 rtabmap_msgs::UserDataConstPtr userDataMsg;
129 sensor_msgs::LaserScan scanMsg;
130 sensor_msgs::PointCloud2 scan3dMsg;
131 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
134 void CommonDataSubscriber::rgbd2OdomCallback(
135 const nav_msgs::OdometryConstPtr & odomMsg,
136 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
137 const rtabmap_msgs::RGBDImageConstPtr& image2Msg)
141 rtabmap_msgs::UserDataConstPtr userDataMsg;
142 sensor_msgs::LaserScan scanMsg;
143 sensor_msgs::PointCloud2 scan3dMsg;
144 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
145 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
147 void CommonDataSubscriber::rgbd2OdomScan2dCallback(
148 const nav_msgs::OdometryConstPtr & odomMsg,
149 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
150 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
151 const sensor_msgs::LaserScanConstPtr& scanMsg)
155 rtabmap_msgs::UserDataConstPtr userDataMsg;
156 sensor_msgs::PointCloud2 scan3dMsg;
157 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
158 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, *scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
160 void CommonDataSubscriber::rgbd2OdomScan3dCallback(
161 const nav_msgs::OdometryConstPtr & odomMsg,
162 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
163 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
164 const sensor_msgs::PointCloud2ConstPtr& scan3dMsg)
168 rtabmap_msgs::UserDataConstPtr userDataMsg;
169 sensor_msgs::LaserScan scanMsg;
170 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
171 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, *scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
173 void CommonDataSubscriber::rgbd2OdomScanDescCallback(
174 const nav_msgs::OdometryConstPtr & odomMsg,
175 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
176 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
177 const rtabmap_msgs::ScanDescriptorConstPtr& scanDescMsg)
181 rtabmap_msgs::UserDataConstPtr userDataMsg;
182 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
183 if(!scanDescMsg->global_descriptor.data.empty())
185 globalDescriptorMsgs.push_back(scanDescMsg->global_descriptor);
187 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanDescMsg->scan, scanDescMsg->scan_cloud, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
189 void CommonDataSubscriber::rgbd2OdomInfoCallback(
190 const nav_msgs::OdometryConstPtr & odomMsg,
191 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
192 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
193 const rtabmap_msgs::OdomInfoConstPtr& odomInfoMsg)
197 rtabmap_msgs::UserDataConstPtr userDataMsg;
198 sensor_msgs::LaserScan scanMsg;
199 sensor_msgs::PointCloud2 scan3dMsg;
200 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
203 #ifdef RTABMAP_SYNC_USER_DATA
205 void CommonDataSubscriber::rgbd2DataCallback(
206 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
207 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
208 const rtabmap_msgs::RGBDImageConstPtr& image2Msg)
212 nav_msgs::OdometryConstPtr odomMsg;
213 sensor_msgs::LaserScan scanMsg;
214 sensor_msgs::PointCloud2 scan3dMsg;
215 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
216 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
218 void CommonDataSubscriber::rgbd2DataScan2dCallback(
219 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
220 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
221 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
222 const sensor_msgs::LaserScanConstPtr& scanMsg)
226 nav_msgs::OdometryConstPtr odomMsg;
227 sensor_msgs::PointCloud2 scan3dMsg;
228 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
229 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, *scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
231 void CommonDataSubscriber::rgbd2DataScan3dCallback(
232 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
233 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
234 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
235 const sensor_msgs::PointCloud2ConstPtr& scan3dMsg)
239 nav_msgs::OdometryConstPtr odomMsg;
240 sensor_msgs::LaserScan scanMsg;
241 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
242 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, *scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
244 void CommonDataSubscriber::rgbd2DataScanDescCallback(
245 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
246 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
247 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
248 const rtabmap_msgs::ScanDescriptorConstPtr& scanDescMsg)
252 nav_msgs::OdometryConstPtr odomMsg;
253 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
254 if(!scanDescMsg->global_descriptor.data.empty())
256 globalDescriptorMsgs.push_back(scanDescMsg->global_descriptor);
258 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanDescMsg->scan, scanDescMsg->scan_cloud, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
260 void CommonDataSubscriber::rgbd2DataInfoCallback(
261 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
262 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
263 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
264 const rtabmap_msgs::OdomInfoConstPtr& odomInfoMsg)
268 nav_msgs::OdometryConstPtr odomMsg;
269 sensor_msgs::LaserScan scanMsg;
270 sensor_msgs::PointCloud2 scan3dMsg;
271 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
275 void CommonDataSubscriber::rgbd2OdomDataCallback(
276 const nav_msgs::OdometryConstPtr& odomMsg,
277 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
278 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
279 const rtabmap_msgs::RGBDImageConstPtr& image2Msg)
283 sensor_msgs::LaserScan scanMsg;
284 sensor_msgs::PointCloud2 scan3dMsg;
285 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
286 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
288 void CommonDataSubscriber::rgbd2OdomDataScan2dCallback(
289 const nav_msgs::OdometryConstPtr& odomMsg,
290 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
291 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
292 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
293 const sensor_msgs::LaserScanConstPtr& scanMsg)
297 sensor_msgs::PointCloud2 scan3dMsg;
298 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
299 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, *scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
301 void CommonDataSubscriber::rgbd2OdomDataScan3dCallback(
302 const nav_msgs::OdometryConstPtr& odomMsg,
303 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
304 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
305 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
306 const sensor_msgs::PointCloud2ConstPtr& scan3dMsg)
310 sensor_msgs::LaserScan scanMsg;
311 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
312 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, *scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
314 void CommonDataSubscriber::rgbd2OdomDataScanDescCallback(
315 const nav_msgs::OdometryConstPtr& odomMsg,
316 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
317 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
318 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
319 const rtabmap_msgs::ScanDescriptorConstPtr& scanDescMsg)
323 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
324 if(!scanDescMsg->global_descriptor.data.empty())
326 globalDescriptorMsgs.push_back(scanDescMsg->global_descriptor);
328 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanDescMsg->scan, scanDescMsg->scan_cloud, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
330 void CommonDataSubscriber::rgbd2OdomDataInfoCallback(
331 const nav_msgs::OdometryConstPtr& odomMsg,
332 const rtabmap_msgs::UserDataConstPtr& userDataMsg,
333 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
334 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
335 const rtabmap_msgs::OdomInfoConstPtr& odomInfoMsg)
339 sensor_msgs::LaserScan scanMsg;
340 sensor_msgs::PointCloud2 scan3dMsg;
341 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
345 void CommonDataSubscriber::setupRGBD2Callbacks(
349 bool subscribeUserData,
350 bool subscribeScan2d,
351 bool subscribeScan3d,
352 bool subscribeScanDesc,
353 bool subscribeOdomInfo)
358 for(
int i=0;
i<2; ++
i)
363 #ifdef RTABMAP_SYNC_USER_DATA
364 if(subscribeOdom && subscribeUserData)
368 if(subscribeScanDesc)
372 if(subscribeOdomInfo)
375 ROS_WARN(
"subscribe_odom_info ignored...");
379 else if(subscribeScan2d)
383 if(subscribeOdomInfo)
386 ROS_WARN(
"subscribe_odom_info ignored...");
390 else if(subscribeScan3d)
394 if(subscribeOdomInfo)
397 ROS_WARN(
"subscribe_odom_info ignored...");
401 else if(subscribeOdomInfo)
417 if(subscribeScanDesc)
421 if(subscribeOdomInfo)
424 ROS_WARN(
"subscribe_odom_info ignored...");
428 else if(subscribeScan2d)
432 if(subscribeOdomInfo)
435 ROS_WARN(
"subscribe_odom_info ignored...");
439 else if(subscribeScan3d)
443 if(subscribeOdomInfo)
446 ROS_WARN(
"subscribe_odom_info ignored...");
450 else if(subscribeOdomInfo)
461 #ifdef RTABMAP_SYNC_USER_DATA
462 else if(subscribeUserData)
465 if(subscribeScanDesc)
469 if(subscribeOdomInfo)
472 ROS_WARN(
"subscribe_odom_info ignored...");
476 else if(subscribeScan2d)
480 if(subscribeOdomInfo)
483 ROS_WARN(
"subscribe_odom_info ignored...");
487 else if(subscribeScan3d)
491 if(subscribeOdomInfo)
494 ROS_WARN(
"subscribe_odom_info ignored...");
498 else if(subscribeOdomInfo)
512 if(subscribeScanDesc)
516 if(subscribeOdomInfo)
519 ROS_WARN(
"subscribe_odom_info ignored...");
523 else if(subscribeScan2d)
527 if(subscribeOdomInfo)
530 ROS_WARN(
"subscribe_odom_info ignored...");
534 else if(subscribeScan3d)
538 if(subscribeOdomInfo)
541 ROS_WARN(
"subscribe_odom_info ignored...");
545 else if(subscribeOdomInfo)