36 #define IMAGE_CONVERSION() \
37 std::vector<cv_bridge::CvImageConstPtr> imageMsgs(6); \
38 std::vector<cv_bridge::CvImageConstPtr> depthMsgs(6); \
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 rtabmap_conversions::toCvShare(image4Msg, imageMsgs[3], depthMsgs[3]); \
43 rtabmap_conversions::toCvShare(image5Msg, imageMsgs[4], depthMsgs[4]); \
44 rtabmap_conversions::toCvShare(image6Msg, imageMsgs[5], depthMsgs[5]); \
45 if(!depthMsgs[0].get()) \
47 std::vector<sensor_msgs::CameraInfo> cameraInfoMsgs; \
48 cameraInfoMsgs.push_back(image1Msg->rgb_camera_info); \
49 cameraInfoMsgs.push_back(image2Msg->rgb_camera_info); \
50 cameraInfoMsgs.push_back(image3Msg->rgb_camera_info); \
51 cameraInfoMsgs.push_back(image4Msg->rgb_camera_info); \
52 cameraInfoMsgs.push_back(image5Msg->rgb_camera_info); \
53 cameraInfoMsgs.push_back(image6Msg->rgb_camera_info); \
54 std::vector<sensor_msgs::CameraInfo> depthCameraInfoMsgs; \
55 depthCameraInfoMsgs.push_back(image1Msg->depth_camera_info); \
56 depthCameraInfoMsgs.push_back(image2Msg->depth_camera_info); \
57 depthCameraInfoMsgs.push_back(image3Msg->depth_camera_info); \
58 depthCameraInfoMsgs.push_back(image4Msg->depth_camera_info); \
59 depthCameraInfoMsgs.push_back(image5Msg->depth_camera_info); \
60 depthCameraInfoMsgs.push_back(image6Msg->depth_camera_info); \
61 std::vector<rtabmap_msgs::GlobalDescriptor> globalDescriptorMsgs; \
62 std::vector<std::vector<rtabmap_msgs::KeyPoint> > localKeyPoints; \
63 std::vector<std::vector<rtabmap_msgs::Point3f> > localPoints3d; \
64 std::vector<cv::Mat> localDescriptors; \
65 if(!image1Msg->global_descriptor.data.empty()) \
66 globalDescriptorMsgs.push_back(image1Msg->global_descriptor); \
67 if(!image2Msg->global_descriptor.data.empty()) \
68 globalDescriptorMsgs.push_back(image2Msg->global_descriptor); \
69 if(!image3Msg->global_descriptor.data.empty()) \
70 globalDescriptorMsgs.push_back(image3Msg->global_descriptor); \
71 if(!image4Msg->global_descriptor.data.empty()) \
72 globalDescriptorMsgs.push_back(image4Msg->global_descriptor); \
73 if(!image5Msg->global_descriptor.data.empty()) \
74 globalDescriptorMsgs.push_back(image5Msg->global_descriptor); \
75 if(!image6Msg->global_descriptor.data.empty()) \
76 globalDescriptorMsgs.push_back(image6Msg->global_descriptor); \
77 localKeyPoints.push_back(image1Msg->key_points); \
78 localKeyPoints.push_back(image2Msg->key_points); \
79 localKeyPoints.push_back(image3Msg->key_points); \
80 localKeyPoints.push_back(image4Msg->key_points); \
81 localKeyPoints.push_back(image5Msg->key_points); \
82 localKeyPoints.push_back(image6Msg->key_points); \
83 localPoints3d.push_back(image1Msg->points); \
84 localPoints3d.push_back(image2Msg->points); \
85 localPoints3d.push_back(image3Msg->points); \
86 localPoints3d.push_back(image4Msg->points); \
87 localPoints3d.push_back(image5Msg->points); \
88 localPoints3d.push_back(image6Msg->points); \
89 localDescriptors.push_back(rtabmap::uncompressData(image1Msg->descriptors)); \
90 localDescriptors.push_back(rtabmap::uncompressData(image2Msg->descriptors)); \
91 localDescriptors.push_back(rtabmap::uncompressData(image3Msg->descriptors)); \
92 localDescriptors.push_back(rtabmap::uncompressData(image4Msg->descriptors)); \
93 localDescriptors.push_back(rtabmap::uncompressData(image5Msg->descriptors)); \
94 localDescriptors.push_back(rtabmap::uncompressData(image6Msg->descriptors));
97 void CommonDataSubscriber::rgbd6Callback(
98 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
99 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
100 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
101 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
102 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
103 const rtabmap_msgs::RGBDImageConstPtr& image6Msg)
107 nav_msgs::OdometryConstPtr odomMsg;
108 rtabmap_msgs::UserDataConstPtr userDataMsg;
109 sensor_msgs::LaserScan scanMsg;
110 sensor_msgs::PointCloud2 scan3dMsg;
111 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
112 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
114 void CommonDataSubscriber::rgbd6Scan2dCallback(
115 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
116 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
117 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
118 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
119 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
120 const rtabmap_msgs::RGBDImageConstPtr& image6Msg,
121 const sensor_msgs::LaserScanConstPtr& scanMsg)
125 nav_msgs::OdometryConstPtr odomMsg;
126 rtabmap_msgs::UserDataConstPtr userDataMsg;
127 sensor_msgs::PointCloud2 scan3dMsg;
128 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
129 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, *scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
131 void CommonDataSubscriber::rgbd6Scan3dCallback(
132 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
133 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
134 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
135 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
136 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
137 const rtabmap_msgs::RGBDImageConstPtr& image6Msg,
138 const sensor_msgs::PointCloud2ConstPtr& scan3dMsg)
142 nav_msgs::OdometryConstPtr odomMsg;
143 rtabmap_msgs::UserDataConstPtr userDataMsg;
144 sensor_msgs::LaserScan scanMsg;
145 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
146 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, *scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
148 void CommonDataSubscriber::rgbd6ScanDescCallback(
149 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
150 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
151 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
152 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
153 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
154 const rtabmap_msgs::RGBDImageConstPtr& image6Msg,
155 const rtabmap_msgs::ScanDescriptorConstPtr& scanDescMsg)
159 nav_msgs::OdometryConstPtr odomMsg;
160 rtabmap_msgs::UserDataConstPtr userDataMsg;
161 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
162 if(!scanDescMsg->global_descriptor.data.empty())
164 globalDescriptorMsgs.push_back(scanDescMsg->global_descriptor);
166 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanDescMsg->scan, scanDescMsg->scan_cloud, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
168 void CommonDataSubscriber::rgbd6InfoCallback(
169 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
170 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
171 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
172 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
173 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
174 const rtabmap_msgs::RGBDImageConstPtr& image6Msg,
175 const rtabmap_msgs::OdomInfoConstPtr& odomInfoMsg)
179 nav_msgs::OdometryConstPtr odomMsg;
180 rtabmap_msgs::UserDataConstPtr userDataMsg;
181 sensor_msgs::LaserScan scanMsg;
182 sensor_msgs::PointCloud2 scan3dMsg;
183 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
187 void CommonDataSubscriber::rgbd6OdomCallback(
188 const nav_msgs::OdometryConstPtr & odomMsg,
189 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
190 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
191 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
192 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
193 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
194 const rtabmap_msgs::RGBDImageConstPtr& image6Msg)
198 rtabmap_msgs::UserDataConstPtr userDataMsg;
199 sensor_msgs::LaserScan scanMsg;
200 sensor_msgs::PointCloud2 scan3dMsg;
201 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
202 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
204 void CommonDataSubscriber::rgbd6OdomScan2dCallback(
205 const nav_msgs::OdometryConstPtr & odomMsg,
206 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
207 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
208 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
209 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
210 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
211 const rtabmap_msgs::RGBDImageConstPtr& image6Msg,
212 const sensor_msgs::LaserScanConstPtr& scanMsg)
216 rtabmap_msgs::UserDataConstPtr userDataMsg;
217 sensor_msgs::PointCloud2 scan3dMsg;
218 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
219 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, *scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
221 void CommonDataSubscriber::rgbd6OdomScan3dCallback(
222 const nav_msgs::OdometryConstPtr & odomMsg,
223 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
224 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
225 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
226 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
227 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
228 const rtabmap_msgs::RGBDImageConstPtr& image6Msg,
229 const sensor_msgs::PointCloud2ConstPtr& scan3dMsg)
233 rtabmap_msgs::UserDataConstPtr userDataMsg;
234 sensor_msgs::LaserScan scanMsg;
235 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
236 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, *scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
238 void CommonDataSubscriber::rgbd6OdomScanDescCallback(
239 const nav_msgs::OdometryConstPtr & odomMsg,
240 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
241 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
242 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
243 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
244 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
245 const rtabmap_msgs::RGBDImageConstPtr& image6Msg,
246 const rtabmap_msgs::ScanDescriptorConstPtr& scanDescMsg)
250 rtabmap_msgs::UserDataConstPtr userDataMsg;
251 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
252 if(!scanDescMsg->global_descriptor.data.empty())
254 globalDescriptorMsgs.push_back(scanDescMsg->global_descriptor);
256 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanDescMsg->scan, scanDescMsg->scan_cloud, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
258 void CommonDataSubscriber::rgbd6OdomInfoCallback(
259 const nav_msgs::OdometryConstPtr & odomMsg,
260 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
261 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
262 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
263 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
264 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
265 const rtabmap_msgs::RGBDImageConstPtr& image6Msg,
266 const rtabmap_msgs::OdomInfoConstPtr& odomInfoMsg)
270 rtabmap_msgs::UserDataConstPtr userDataMsg;
271 sensor_msgs::LaserScan scanMsg;
272 sensor_msgs::PointCloud2 scan3dMsg;
273 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
276 void CommonDataSubscriber::setupRGBD6Callbacks(
280 bool subscribeUserData,
281 bool subscribeScan2d,
282 bool subscribeScan3d,
283 bool subscribeScanDesc,
284 bool subscribeOdomInfo)
289 for(
int i=0;
i<6; ++
i)
297 if(subscribeScanDesc)
301 if(subscribeOdomInfo)
304 ROS_WARN(
"subscribe_odom_info ignored...");
306 SYNC_DECL8(
CommonDataSubscriber, rgbd6OdomScanDesc,
approxSync_,
syncQueueSize_,
odomSub_, (*
rgbdSubs_[0]), (*
rgbdSubs_[1]), (*
rgbdSubs_[2]), (*
rgbdSubs_[3]), (*
rgbdSubs_[4]), (*
rgbdSubs_[5]),
scanDescSub_);
308 else if(subscribeScan2d)
312 if(subscribeOdomInfo)
315 ROS_WARN(
"subscribe_odom_info ignored...");
317 SYNC_DECL8(
CommonDataSubscriber, rgbd6OdomScan2d,
approxSync_,
syncQueueSize_,
odomSub_, (*
rgbdSubs_[0]), (*
rgbdSubs_[1]), (*
rgbdSubs_[2]), (*
rgbdSubs_[3]), (*
rgbdSubs_[4]), (*
rgbdSubs_[5]),
scanSub_);
319 else if(subscribeScan3d)
323 if(subscribeOdomInfo)
326 ROS_WARN(
"subscribe_odom_info ignored...");
328 SYNC_DECL8(
CommonDataSubscriber, rgbd6OdomScan3d,
approxSync_,
syncQueueSize_,
odomSub_, (*
rgbdSubs_[0]), (*
rgbdSubs_[1]), (*
rgbdSubs_[2]), (*
rgbdSubs_[3]), (*
rgbdSubs_[4]), (*
rgbdSubs_[5]),
scan3dSub_);
330 else if(subscribeOdomInfo)
334 SYNC_DECL8(
CommonDataSubscriber, rgbd6OdomInfo,
approxSync_,
syncQueueSize_,
odomSub_, (*
rgbdSubs_[0]), (*
rgbdSubs_[1]), (*
rgbdSubs_[2]), (*
rgbdSubs_[3]), (*
rgbdSubs_[4]), (*
rgbdSubs_[5]),
odomInfoSub_);
338 SYNC_DECL7(
CommonDataSubscriber, rgbd6Odom,
approxSync_,
syncQueueSize_,
odomSub_, (*
rgbdSubs_[0]), (*
rgbdSubs_[1]), (*
rgbdSubs_[2]), (*
rgbdSubs_[3]), (*
rgbdSubs_[4]), (*
rgbdSubs_[5]));
343 if(subscribeScanDesc)
347 if(subscribeOdomInfo)
350 ROS_WARN(
"subscribe_odom_info ignored...");
352 SYNC_DECL7(
CommonDataSubscriber, rgbd6ScanDesc,
approxSync_,
syncQueueSize_, (*
rgbdSubs_[0]), (*
rgbdSubs_[1]), (*
rgbdSubs_[2]), (*
rgbdSubs_[3]), (*
rgbdSubs_[4]), (*
rgbdSubs_[5]),
scanDescSub_);
354 else if(subscribeScan2d)
358 if(subscribeOdomInfo)
361 ROS_WARN(
"subscribe_odom_info ignored...");
363 SYNC_DECL7(
CommonDataSubscriber, rgbd6Scan2d,
approxSync_,
syncQueueSize_, (*
rgbdSubs_[0]), (*
rgbdSubs_[1]), (*
rgbdSubs_[2]), (*
rgbdSubs_[3]), (*
rgbdSubs_[4]), (*
rgbdSubs_[5]),
scanSub_);
365 else if(subscribeScan3d)
369 if(subscribeOdomInfo)
372 ROS_WARN(
"subscribe_odom_info ignored...");
374 SYNC_DECL7(
CommonDataSubscriber, rgbd6Scan3d,
approxSync_,
syncQueueSize_, (*
rgbdSubs_[0]), (*
rgbdSubs_[1]), (*
rgbdSubs_[2]), (*
rgbdSubs_[3]), (*
rgbdSubs_[4]), (*
rgbdSubs_[5]),
scan3dSub_);
376 else if(subscribeOdomInfo)
380 SYNC_DECL7(
CommonDataSubscriber, rgbd6Info,
approxSync_,
syncQueueSize_, (*
rgbdSubs_[0]), (*
rgbdSubs_[1]), (*
rgbdSubs_[2]), (*
rgbdSubs_[3]), (*
rgbdSubs_[4]), (*
rgbdSubs_[5]),
odomInfoSub_);