36 #define IMAGE_CONVERSION() \
37 std::vector<cv_bridge::CvImageConstPtr> imageMsgs(5); \
38 std::vector<cv_bridge::CvImageConstPtr> depthMsgs(5); \
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 if(!depthMsgs[0].get()) \
46 std::vector<sensor_msgs::CameraInfo> cameraInfoMsgs; \
47 cameraInfoMsgs.push_back(image1Msg->rgb_camera_info); \
48 cameraInfoMsgs.push_back(image2Msg->rgb_camera_info); \
49 cameraInfoMsgs.push_back(image3Msg->rgb_camera_info); \
50 cameraInfoMsgs.push_back(image4Msg->rgb_camera_info); \
51 cameraInfoMsgs.push_back(image5Msg->rgb_camera_info); \
52 std::vector<sensor_msgs::CameraInfo> depthCameraInfoMsgs; \
53 depthCameraInfoMsgs.push_back(image1Msg->depth_camera_info); \
54 depthCameraInfoMsgs.push_back(image2Msg->depth_camera_info); \
55 depthCameraInfoMsgs.push_back(image3Msg->depth_camera_info); \
56 depthCameraInfoMsgs.push_back(image4Msg->depth_camera_info); \
57 depthCameraInfoMsgs.push_back(image5Msg->depth_camera_info); \
58 std::vector<rtabmap_msgs::GlobalDescriptor> globalDescriptorMsgs; \
59 std::vector<std::vector<rtabmap_msgs::KeyPoint> > localKeyPoints; \
60 std::vector<std::vector<rtabmap_msgs::Point3f> > localPoints3d; \
61 std::vector<cv::Mat> localDescriptors; \
62 if(!image1Msg->global_descriptor.data.empty()) \
63 globalDescriptorMsgs.push_back(image1Msg->global_descriptor); \
64 if(!image2Msg->global_descriptor.data.empty()) \
65 globalDescriptorMsgs.push_back(image2Msg->global_descriptor); \
66 if(!image3Msg->global_descriptor.data.empty()) \
67 globalDescriptorMsgs.push_back(image3Msg->global_descriptor); \
68 if(!image4Msg->global_descriptor.data.empty()) \
69 globalDescriptorMsgs.push_back(image4Msg->global_descriptor); \
70 if(!image5Msg->global_descriptor.data.empty()) \
71 globalDescriptorMsgs.push_back(image5Msg->global_descriptor); \
72 localKeyPoints.push_back(image1Msg->key_points); \
73 localKeyPoints.push_back(image2Msg->key_points); \
74 localKeyPoints.push_back(image3Msg->key_points); \
75 localKeyPoints.push_back(image4Msg->key_points); \
76 localKeyPoints.push_back(image5Msg->key_points); \
77 localPoints3d.push_back(image1Msg->points); \
78 localPoints3d.push_back(image2Msg->points); \
79 localPoints3d.push_back(image3Msg->points); \
80 localPoints3d.push_back(image4Msg->points); \
81 localPoints3d.push_back(image5Msg->points); \
82 localDescriptors.push_back(rtabmap::uncompressData(image1Msg->descriptors)); \
83 localDescriptors.push_back(rtabmap::uncompressData(image2Msg->descriptors)); \
84 localDescriptors.push_back(rtabmap::uncompressData(image3Msg->descriptors)); \
85 localDescriptors.push_back(rtabmap::uncompressData(image4Msg->descriptors)); \
86 localDescriptors.push_back(rtabmap::uncompressData(image5Msg->descriptors));
89 void CommonDataSubscriber::rgbd5Callback(
90 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
91 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
92 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
93 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
94 const rtabmap_msgs::RGBDImageConstPtr& image5Msg)
98 nav_msgs::OdometryConstPtr odomMsg;
99 rtabmap_msgs::UserDataConstPtr userDataMsg;
100 sensor_msgs::LaserScan scanMsg;
101 sensor_msgs::PointCloud2 scan3dMsg;
102 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
103 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
105 void CommonDataSubscriber::rgbd5Scan2dCallback(
106 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
107 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
108 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
109 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
110 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
111 const sensor_msgs::LaserScanConstPtr& scanMsg)
115 nav_msgs::OdometryConstPtr odomMsg;
116 rtabmap_msgs::UserDataConstPtr userDataMsg;
117 sensor_msgs::PointCloud2 scan3dMsg;
118 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
119 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, *scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
121 void CommonDataSubscriber::rgbd5Scan3dCallback(
122 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
123 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
124 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
125 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
126 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
127 const sensor_msgs::PointCloud2ConstPtr& scan3dMsg)
131 nav_msgs::OdometryConstPtr odomMsg;
132 rtabmap_msgs::UserDataConstPtr userDataMsg;
133 sensor_msgs::LaserScan scanMsg;
134 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
135 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, *scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
137 void CommonDataSubscriber::rgbd5ScanDescCallback(
138 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
139 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
140 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
141 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
142 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
143 const rtabmap_msgs::ScanDescriptorConstPtr& scanDescMsg)
147 nav_msgs::OdometryConstPtr odomMsg;
148 rtabmap_msgs::UserDataConstPtr userDataMsg;
149 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
150 if(!scanDescMsg->global_descriptor.data.empty())
152 globalDescriptorMsgs.push_back(scanDescMsg->global_descriptor);
154 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanDescMsg->scan, scanDescMsg->scan_cloud, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
156 void CommonDataSubscriber::rgbd5InfoCallback(
157 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
158 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
159 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
160 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
161 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
162 const rtabmap_msgs::OdomInfoConstPtr& odomInfoMsg)
166 nav_msgs::OdometryConstPtr odomMsg;
167 rtabmap_msgs::UserDataConstPtr userDataMsg;
168 sensor_msgs::LaserScan scanMsg;
169 sensor_msgs::PointCloud2 scan3dMsg;
170 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
174 void CommonDataSubscriber::rgbd5OdomCallback(
175 const nav_msgs::OdometryConstPtr & odomMsg,
176 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
177 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
178 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
179 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
180 const rtabmap_msgs::RGBDImageConstPtr& image5Msg)
184 rtabmap_msgs::UserDataConstPtr userDataMsg;
185 sensor_msgs::LaserScan scanMsg;
186 sensor_msgs::PointCloud2 scan3dMsg;
187 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
188 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
190 void CommonDataSubscriber::rgbd5OdomScan2dCallback(
191 const nav_msgs::OdometryConstPtr & odomMsg,
192 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
193 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
194 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
195 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
196 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
197 const sensor_msgs::LaserScanConstPtr& scanMsg)
201 rtabmap_msgs::UserDataConstPtr userDataMsg;
202 sensor_msgs::PointCloud2 scan3dMsg;
203 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
204 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, *scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
206 void CommonDataSubscriber::rgbd5OdomScan3dCallback(
207 const nav_msgs::OdometryConstPtr & odomMsg,
208 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
209 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
210 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
211 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
212 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
213 const sensor_msgs::PointCloud2ConstPtr& scan3dMsg)
217 rtabmap_msgs::UserDataConstPtr userDataMsg;
218 sensor_msgs::LaserScan scanMsg;
219 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
220 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, *scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
222 void CommonDataSubscriber::rgbd5OdomScanDescCallback(
223 const nav_msgs::OdometryConstPtr & odomMsg,
224 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
225 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
226 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
227 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
228 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
229 const rtabmap_msgs::ScanDescriptorConstPtr& scanDescMsg)
233 rtabmap_msgs::UserDataConstPtr userDataMsg;
234 rtabmap_msgs::OdomInfoConstPtr odomInfoMsg;
235 if(!scanDescMsg->global_descriptor.data.empty())
237 globalDescriptorMsgs.push_back(scanDescMsg->global_descriptor);
239 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanDescMsg->scan, scanDescMsg->scan_cloud, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
241 void CommonDataSubscriber::rgbd5OdomInfoCallback(
242 const nav_msgs::OdometryConstPtr & odomMsg,
243 const rtabmap_msgs::RGBDImageConstPtr& image1Msg,
244 const rtabmap_msgs::RGBDImageConstPtr& image2Msg,
245 const rtabmap_msgs::RGBDImageConstPtr& image3Msg,
246 const rtabmap_msgs::RGBDImageConstPtr& image4Msg,
247 const rtabmap_msgs::RGBDImageConstPtr& image5Msg,
248 const rtabmap_msgs::OdomInfoConstPtr& odomInfoMsg)
252 rtabmap_msgs::UserDataConstPtr userDataMsg;
253 sensor_msgs::LaserScan scanMsg;
254 sensor_msgs::PointCloud2 scan3dMsg;
255 commonMultiCameraCallback(odomMsg, userDataMsg, imageMsgs, depthMsgs, cameraInfoMsgs, depthCameraInfoMsgs, scanMsg, scan3dMsg, odomInfoMsg, globalDescriptorMsgs, localKeyPoints, localPoints3d, localDescriptors);
258 void CommonDataSubscriber::setupRGBD5Callbacks(
262 bool subscribeUserData,
263 bool subscribeScan2d,
264 bool subscribeScan3d,
265 bool subscribeScanDesc,
266 bool subscribeOdomInfo)
271 for(
int i=0;
i<5; ++
i)
279 if(subscribeScanDesc)
283 if(subscribeOdomInfo)
286 ROS_WARN(
"subscribe_odom_info ignored...");
288 SYNC_DECL7(
CommonDataSubscriber, rgbd5OdomScanDesc,
approxSync_,
syncQueueSize_,
odomSub_, (*
rgbdSubs_[0]), (*
rgbdSubs_[1]), (*
rgbdSubs_[2]), (*
rgbdSubs_[3]), (*
rgbdSubs_[4]),
scanDescSub_);
290 else if(subscribeScan2d)
294 if(subscribeOdomInfo)
297 ROS_WARN(
"subscribe_odom_info ignored...");
299 SYNC_DECL7(
CommonDataSubscriber, rgbd5OdomScan2d,
approxSync_,
syncQueueSize_,
odomSub_, (*
rgbdSubs_[0]), (*
rgbdSubs_[1]), (*
rgbdSubs_[2]), (*
rgbdSubs_[3]), (*
rgbdSubs_[4]),
scanSub_);
301 else if(subscribeScan3d)
305 if(subscribeOdomInfo)
308 ROS_WARN(
"subscribe_odom_info ignored...");
310 SYNC_DECL7(
CommonDataSubscriber, rgbd5OdomScan3d,
approxSync_,
syncQueueSize_,
odomSub_, (*
rgbdSubs_[0]), (*
rgbdSubs_[1]), (*
rgbdSubs_[2]), (*
rgbdSubs_[3]), (*
rgbdSubs_[4]),
scan3dSub_);
312 else if(subscribeOdomInfo)
316 SYNC_DECL7(
CommonDataSubscriber, rgbd5OdomInfo,
approxSync_,
syncQueueSize_,
odomSub_, (*
rgbdSubs_[0]), (*
rgbdSubs_[1]), (*
rgbdSubs_[2]), (*
rgbdSubs_[3]), (*
rgbdSubs_[4]),
odomInfoSub_);
325 if(subscribeScanDesc)
329 if(subscribeOdomInfo)
332 ROS_WARN(
"subscribe_odom_info ignored...");
336 else if(subscribeScan2d)
340 if(subscribeOdomInfo)
343 ROS_WARN(
"subscribe_odom_info ignored...");
347 else if(subscribeScan3d)
351 if(subscribeOdomInfo)
354 ROS_WARN(
"subscribe_odom_info ignored...");
358 else if(subscribeOdomInfo)