camera.h
Go to the documentation of this file.
1 
34 #ifndef MULTISENSE_ROS_CAMERA_H
35 #define MULTISENSE_ROS_CAMERA_H
36 
37 #include <memory>
38 #include <mutex>
39 #include <thread>
40 
41 #include <ros/ros.h>
42 
49 #include <stereo_msgs/DisparityImage.h>
50 #include <sensor_msgs/PointCloud2.h>
52 
53 #include <multisense_lib/MultiSenseChannel.hh>
54 #include <multisense_ros/RawCamData.h>
57 
58 namespace multisense_ros {
59 
60 class Camera {
61 public:
63  const std::string& tf_prefix);
64  ~Camera();
65 
66  void updateConfig(const crl::multisense::image::Config& config);
67 
69  void rectCallback(const crl::multisense::image::Header& header);
80 
81  void borderClipChanged(const BorderClip &borderClipType, double borderClipValue);
82 
83  void maxPointCloudRangeChanged(double range);
84 
86 
88  const ground_surface_utilities::SplineDrawParameters &spline_draw_params);
89 
90 private:
91  //
92  // Node names
93 
94  static constexpr char LEFT[] = "left";
95  static constexpr char RIGHT[] = "right";
96  static constexpr char AUX[] = "aux";
97  static constexpr char CALIBRATION[] = "calibration";
98  static constexpr char GROUND_SURFACE[] = "ground_surface";
99 
100  //
101  // Frames
102 
103  static constexpr char ORIGIN_FRAME[] = "/origin";
104  static constexpr char HEAD_FRAME[] = "/head";
105  static constexpr char LEFT_CAMERA_FRAME[] = "/left_camera_frame";
106  static constexpr char LEFT_RECTIFIED_FRAME[] = "/left_camera_optical_frame";
107  static constexpr char RIGHT_CAMERA_FRAME[] = "/right_camera_frame";
108  static constexpr char RIGHT_RECTIFIED_FRAME[] = "/right_camera_optical_frame";
109  static constexpr char AUX_CAMERA_FRAME[] = "/aux_camera_frame";
110  static constexpr char AUX_RECTIFIED_FRAME[] = "/aux_camera_optical_frame";
111 
112  //
113  // Topic names
114 
115  static constexpr char DEVICE_INFO_TOPIC[] = "device_info";
116  static constexpr char RAW_CAM_CAL_TOPIC[] = "raw_cam_cal";
117  static constexpr char RAW_CAM_CONFIG_TOPIC[] = "raw_cam_config";
118  static constexpr char RAW_CAM_DATA_TOPIC[] = "raw_cam_data";
119  static constexpr char HISTOGRAM_TOPIC[] = "histogram";
120  static constexpr char MONO_TOPIC[] = "image_mono";
121  static constexpr char RECT_TOPIC[] = "image_rect";
122  static constexpr char DISPARITY_TOPIC[] = "disparity";
123  static constexpr char DISPARITY_IMAGE_TOPIC[] = "disparity_image";
124  static constexpr char DEPTH_TOPIC[] = "depth";
125  static constexpr char OPENNI_DEPTH_TOPIC[] = "openni_depth";
126  static constexpr char COST_TOPIC[] = "cost";
127  static constexpr char COLOR_TOPIC[] = "image_color";
128  static constexpr char RECT_COLOR_TOPIC[] = "image_rect_color";
129  static constexpr char POINTCLOUD_TOPIC[] = "image_points2";
130  static constexpr char COLOR_POINTCLOUD_TOPIC[] = "image_points2_color";
131  static constexpr char ORGANIZED_POINTCLOUD_TOPIC[] = "organized_image_points2";
132  static constexpr char COLOR_ORGANIZED_POINTCLOUD_TOPIC[] = "organized_image_points2_color";
133  static constexpr char MONO_CAMERA_INFO_TOPIC[] = "image_mono/camera_info";
134  static constexpr char RECT_CAMERA_INFO_TOPIC[] = "image_rect/camera_info";
135  static constexpr char COLOR_CAMERA_INFO_TOPIC[] = "image_color/camera_info";
136  static constexpr char RECT_COLOR_CAMERA_INFO_TOPIC[] = "image_rect_color/camera_info";
137  static constexpr char DEPTH_CAMERA_INFO_TOPIC[] = "depth/camera_info";
138  static constexpr char DISPARITY_CAMERA_INFO_TOPIC[] = "disparity/camera_info";
139  static constexpr char COST_CAMERA_INFO_TOPIC[] = "cost/camera_info";
140  static constexpr char GROUND_SURFACE_IMAGE_TOPIC[] = "image";
141  static constexpr char GROUND_SURFACE_INFO_TOPIC[] = "camera_info";
142  static constexpr char GROUND_SURFACE_POINT_SPLINE_TOPIC[] = "spline";
143 
144 
145  //
146  // Device stream control
147 
150  void stop();
151 
152  //
153  // Republish camera info messages by publishing the current messages
154  // Used whenever the resolution of the camera changes
155 
156  void publishAllCameraInfo();
157 
158  //
159  // CRL sensor API
160 
162 
163  //
164  // Driver nodes
165 
172 
173  //
174  // Image transports
175 
192 
193  //
194  // Data publishers
195 
201  image_transport::Publisher ni_depth_cam_pub_; // publish depth infomation in the openNI format
209 
225 
229 
232 
236 
239 
240  //
241  // Raw data publishers
242 
248 
249  //
250  // Store outgoing messages for efficiency
251 
252  sensor_msgs::Image left_mono_image_;
253  sensor_msgs::Image right_mono_image_;
254  sensor_msgs::Image left_rect_image_;
255  sensor_msgs::Image right_rect_image_;
256  sensor_msgs::Image depth_image_;
257  sensor_msgs::Image ni_depth_image_;
258  sensor_msgs::PointCloud2 luma_point_cloud_;
259  sensor_msgs::PointCloud2 color_point_cloud_;
260  sensor_msgs::PointCloud2 luma_organized_point_cloud_;
261  sensor_msgs::PointCloud2 color_organized_point_cloud_;
262 
263  sensor_msgs::Image aux_mono_image_;
264  sensor_msgs::Image left_rgb_image_;
265  sensor_msgs::Image aux_rgb_image_;
266  sensor_msgs::Image left_rgb_rect_image_;
267  sensor_msgs::Image aux_rect_image_;
268  sensor_msgs::Image aux_rgb_rect_image_;
269 
270  sensor_msgs::Image left_disparity_image_;
271  sensor_msgs::Image left_disparity_cost_image_;
272  sensor_msgs::Image right_disparity_image_;
273 
274  stereo_msgs::DisparityImage left_stereo_disparity_;
275  stereo_msgs::DisparityImage right_stereo_disparity_;
276 
277  sensor_msgs::Image ground_surface_image_;
278 
279  multisense_ros::RawCamData raw_cam_data_;
280 
281  std::vector<uint8_t> pointcloud_color_buffer_;
282  std::vector<uint8_t> pointcloud_rect_color_buffer_;
283 
284  //
285  // Calibration from sensor
286 
289  std::vector<crl::multisense::system::DeviceMode> device_modes_;
290 
291  //
292  // Calibration manager
293 
294  std::shared_ptr<StereoCalibrationManager> stereo_calibration_manager_;
295 
296  //
297  // The frame IDs
298 
299  const std::string frame_id_origin_;
300  const std::string frame_id_head_;
301  const std::string frame_id_left_;
302  const std::string frame_id_right_;
303  const std::string frame_id_aux_;
304  const std::string frame_id_rectified_left_;
305  const std::string frame_id_rectified_right_;
306  const std::string frame_id_rectified_aux_;
307 
309 
310  //
311  // Stream subscriptions
312 
313  typedef std::map<crl::multisense::DataSource, int32_t> StreamMapType;
314  std::mutex stream_lock_;
315  StreamMapType stream_map_;
316 
317  //
318  // Max distance from the camera for a point to be considered valid
319 
320  double pointcloud_max_range_ = 15.0;
321 
322  //
323  // Histogram tracking
324 
325  int64_t last_frame_id_ = -1;
326 
327  //
328  // The mask used to perform the border clipping of the disparity image
329 
331  double border_clip_value_ = 0.0;
332 
333  //
334  // Parameters for drawing ground surface spline
335 
337 
338  //
339  // Storage of images which we use for pointcloud colorizing
340 
341  std::unordered_map<crl::multisense::DataSource, std::shared_ptr<BufferWrapper<crl::multisense::image::Header>>> image_buffers_;
342 
343  //
344  // Has a left camera
345 
346  bool has_right_camera_ = false;
347 
348  //
349  // Has a left camera
350 
351  bool has_left_camera_ = false;
352 
353  //
354  // Has a 3rd aux color camera
355 
356  bool has_aux_camera_ = false;
357 
358  //
359  // Has color camera streams, either color sensors or a color aux
360 
361  bool has_color_ = false;
362 
363  //
364  // Can support the ground surface detector
365 
367 
368  //
369  // Diagnostics
373 
376 };
377 
378 }
379 
380 #endif
ros::Publisher left_rgb_cam_info_pub_
Definition: camera.h:217
static constexpr char AUX_RECTIFIED_FRAME[]
Definition: camera.h:110
const std::string frame_id_rectified_right_
Definition: camera.h:305
static constexpr char LEFT[]
Definition: camera.h:94
std::vector< crl::multisense::system::DeviceMode > device_modes_
Definition: camera.h:289
image_transport::Publisher right_disparity_pub_
Definition: camera.h:234
static constexpr char RECT_CAMERA_INFO_TOPIC[]
Definition: camera.h:134
void maxPointCloudRangeChanged(double range)
Definition: camera.cpp:888
ros::Publisher luma_organized_point_cloud_pub_
Definition: camera.h:230
void pointCloudCallback(const crl::multisense::image::Header &header)
Definition: camera.cpp:1603
void rawCamDataCallback(const crl::multisense::image::Header &header)
Definition: camera.cpp:1895
image_transport::ImageTransport disparity_cost_transport_
Definition: camera.h:186
image_transport::Publisher left_mono_cam_pub_
Definition: camera.h:196
static constexpr char RAW_CAM_DATA_TOPIC[]
Definition: camera.h:118
sensor_msgs::Image right_rect_image_
Definition: camera.h:255
static constexpr char COLOR_CAMERA_INFO_TOPIC[]
Definition: camera.h:135
static constexpr char RIGHT_CAMERA_FRAME[]
Definition: camera.h:107
void disparityImageCallback(const crl::multisense::image::Header &header)
Definition: camera.cpp:1030
ros::NodeHandle device_nh_
Definition: camera.h:166
const std::string frame_id_head_
Definition: camera.h:300
static constexpr char GROUND_SURFACE[]
Definition: camera.h:98
tf2_ros::StaticTransformBroadcaster static_tf_broadcaster_
Definition: camera.h:308
static constexpr char DEPTH_TOPIC[]
Definition: camera.h:124
ros::Publisher right_stereo_disparity_pub_
Definition: camera.h:238
static constexpr char MONO_TOPIC[]
Definition: camera.h:120
ros::Publisher right_rect_cam_info_pub_
Definition: camera.h:213
void colorImageCallback(const crl::multisense::image::Header &header)
Definition: camera.cpp:1936
static constexpr char DISPARITY_CAMERA_INFO_TOPIC[]
Definition: camera.h:138
static constexpr char RIGHT[]
Definition: camera.h:95
static constexpr char COST_CAMERA_INFO_TOPIC[]
Definition: camera.h:139
image_transport::ImageTransport left_rect_transport_
Definition: camera.h:178
sensor_msgs::Image ni_depth_image_
Definition: camera.h:257
sensor_msgs::PointCloud2 luma_organized_point_cloud_
Definition: camera.h:260
sensor_msgs::PointCloud2 luma_point_cloud_
Definition: camera.h:258
void monoCallback(const crl::multisense::image::Header &header)
Definition: camera.cpp:1215
image_transport::Publisher left_disparity_cost_pub_
Definition: camera.h:235
sensor_msgs::PointCloud2 color_point_cloud_
Definition: camera.h:259
ros::Publisher left_stereo_disparity_pub_
Definition: camera.h:237
ros::Publisher luma_point_cloud_pub_
Definition: camera.h:226
ros::NodeHandle aux_nh_
Definition: camera.h:169
static constexpr char GROUND_SURFACE_POINT_SPLINE_TOPIC[]
Definition: camera.h:142
ros::Publisher depth_cam_info_pub_
Definition: camera.h:219
ros::Publisher histogram_pub_
Definition: camera.h:247
ros::Publisher left_mono_cam_info_pub_
Definition: camera.h:210
Camera(crl::multisense::Channel *driver, const std::string &tf_prefix)
Definition: camera.cpp:281
const std::string frame_id_left_
Definition: camera.h:301
static constexpr char ORGANIZED_POINTCLOUD_TOPIC[]
Definition: camera.h:131
void diagnosticTimerCallback(const ros::TimerEvent &)
Definition: camera.cpp:2449
sensor_msgs::Image right_disparity_image_
Definition: camera.h:272
std::unordered_map< crl::multisense::DataSource, std::shared_ptr< BufferWrapper< crl::multisense::image::Header > > > image_buffers_
Definition: camera.h:341
static constexpr char DEVICE_INFO_TOPIC[]
Definition: camera.h:115
static constexpr char RECT_TOPIC[]
Definition: camera.h:121
double border_clip_value_
Definition: camera.h:331
sensor_msgs::Image depth_image_
Definition: camera.h:256
image_transport::ImageTransport aux_rgb_transport_
Definition: camera.h:188
void disconnectStream(crl::multisense::DataSource disableMask)
Definition: camera.cpp:2485
image_transport::Publisher aux_mono_cam_pub_
Definition: camera.h:205
static constexpr char DISPARITY_IMAGE_TOPIC[]
Definition: camera.h:123
void depthCallback(const crl::multisense::image::Header &header)
Definition: camera.cpp:1458
ros::Publisher ground_surface_info_pub_
Definition: camera.h:224
void connectStream(crl::multisense::DataSource enableMask)
Definition: camera.cpp:2466
ros::NodeHandle ground_surface_nh_
Definition: camera.h:171
ros::Publisher raw_cam_config_pub_
Definition: camera.h:244
static constexpr char COST_TOPIC[]
Definition: camera.h:126
sensor_msgs::Image left_disparity_cost_image_
Definition: camera.h:271
image_transport::ImageTransport right_mono_transport_
Definition: camera.h:177
image_transport::ImageTransport left_rgb_transport_
Definition: camera.h:180
void colorizeCallback(const crl::multisense::image::Header &header)
Definition: camera.cpp:2125
sensor_msgs::Image ground_surface_image_
Definition: camera.h:277
ros::Publisher right_mono_cam_info_pub_
Definition: camera.h:211
const std::string frame_id_right_
Definition: camera.h:302
stereo_msgs::DisparityImage left_stereo_disparity_
Definition: camera.h:274
bool can_support_ground_surface_
Definition: camera.h:366
image_transport::ImageTransport aux_mono_transport_
Definition: camera.h:187
ros::Publisher aux_rgb_cam_info_pub_
Definition: camera.h:221
ros::Timer diagnostic_trigger_
Definition: camera.h:375
image_transport::Publisher right_mono_cam_pub_
Definition: camera.h:197
static constexpr char ORIGIN_FRAME[]
Definition: camera.h:103
void borderClipChanged(const BorderClip &borderClipType, double borderClipValue)
Definition: camera.cpp:879
StreamMapType stream_map_
Definition: camera.h:315
crl::multisense::system::DeviceInfo device_info_
Definition: camera.h:288
image_transport::CameraPublisher aux_rgb_rect_cam_pub_
Definition: camera.h:207
image_transport::Publisher ground_surface_cam_pub_
Definition: camera.h:208
ros::Publisher aux_rect_cam_info_pub_
Definition: camera.h:222
sensor_msgs::Image left_mono_image_
Definition: camera.h:252
image_transport::Publisher ni_depth_cam_pub_
Definition: camera.h:201
void rectCallback(const crl::multisense::image::Header &header)
Definition: camera.cpp:1327
image_transport::ImageTransport aux_rgb_rect_transport_
Definition: camera.h:190
const std::string frame_id_rectified_left_
Definition: camera.h:304
void updateConfig(const crl::multisense::image::Config &config)
Definition: camera.cpp:2255
image_transport::Publisher left_disparity_pub_
Definition: camera.h:233
ros::Publisher raw_cam_data_pub_
Definition: camera.h:243
image_transport::CameraPublisher left_rgb_rect_cam_pub_
Definition: camera.h:203
void groundSurfaceCallback(const crl::multisense::image::Header &header)
Definition: camera.cpp:2140
ros::Publisher left_disp_cam_info_pub_
Definition: camera.h:214
image_transport::Publisher depth_cam_pub_
Definition: camera.h:200
BorderClip border_clip_type_
Definition: camera.h:330
image_transport::ImageTransport ground_surface_transport_
Definition: camera.h:191
std::map< crl::multisense::DataSource, int32_t > StreamMapType
Definition: camera.h:313
void groundSurfaceSplineDrawParametersChanged(const ground_surface_utilities::SplineDrawParameters &spline_draw_params)
Definition: camera.cpp:923
static constexpr char GROUND_SURFACE_INFO_TOPIC[]
Definition: camera.h:141
image_transport::ImageTransport aux_rect_transport_
Definition: camera.h:189
void deviceStatusDiagnostic(diagnostic_updater::DiagnosticStatusWrapper &stat)
Definition: camera.cpp:2421
Struct containing parameters for drawing a pointcloud representation of a B-Spline model...
ros::NodeHandle right_nh_
Definition: camera.h:168
image_transport::CameraPublisher right_rect_cam_pub_
Definition: camera.h:199
static constexpr char LEFT_CAMERA_FRAME[]
Definition: camera.h:105
image_transport::ImageTransport left_mono_transport_
Definition: camera.h:176
static constexpr char GROUND_SURFACE_IMAGE_TOPIC[]
Definition: camera.h:140
image_transport::CameraPublisher aux_rect_cam_pub_
Definition: camera.h:206
ros::Publisher raw_cam_cal_pub_
Definition: camera.h:245
static constexpr char LEFT_RECTIFIED_FRAME[]
Definition: camera.h:106
image_transport::CameraPublisher left_rect_cam_pub_
Definition: camera.h:198
sensor_msgs::Image left_rect_image_
Definition: camera.h:254
diagnostic_updater::Updater diagnostic_updater_
Definition: camera.h:370
ros::Publisher right_disp_cam_info_pub_
Definition: camera.h:215
crl::multisense::Channel * driver_
Definition: camera.h:161
void deviceInfoDiagnostic(diagnostic_updater::DiagnosticStatusWrapper &stat)
Definition: camera.cpp:2379
void groundSurfaceSplineCallback(const crl::multisense::ground_surface::Header &header)
Definition: camera.cpp:2209
ros::Publisher device_info_pub_
Definition: camera.h:246
static constexpr char RAW_CAM_CAL_TOPIC[]
Definition: camera.h:116
image_transport::Publisher left_rgb_cam_pub_
Definition: camera.h:202
const std::string frame_id_rectified_aux_
Definition: camera.h:306
void extrinsicsChanged(crl::multisense::system::ExternalCalibration extrinsics)
Definition: camera.cpp:893
static constexpr char RECT_COLOR_CAMERA_INFO_TOPIC[]
Definition: camera.h:136
static constexpr char COLOR_POINTCLOUD_TOPIC[]
Definition: camera.h:130
static constexpr char OPENNI_DEPTH_TOPIC[]
Definition: camera.h:125
static constexpr char COLOR_TOPIC[]
Definition: camera.h:127
image_transport::ImageTransport left_rgb_rect_transport_
Definition: camera.h:181
std::mutex stream_lock_
Definition: camera.h:314
std::shared_ptr< StereoCalibrationManager > stereo_calibration_manager_
Definition: camera.h:294
ros::NodeHandle calibration_nh_
Definition: camera.h:170
ros::Publisher aux_rgb_rect_cam_info_pub_
Definition: camera.h:223
sensor_msgs::Image aux_rgb_image_
Definition: camera.h:265
sensor_msgs::Image left_rgb_image_
Definition: camera.h:264
sensor_msgs::Image right_mono_image_
Definition: camera.h:253
static constexpr char AUX_CAMERA_FRAME[]
Definition: camera.h:109
image_transport::ImageTransport depth_transport_
Definition: camera.h:182
ros::Publisher left_rgb_rect_cam_info_pub_
Definition: camera.h:218
void histogramCallback(const crl::multisense::image::Header &header)
Definition: camera.cpp:929
ground_surface_utilities::SplineDrawParameters spline_draw_params_
Definition: camera.h:336
stereo_msgs::DisparityImage right_stereo_disparity_
Definition: camera.h:275
static constexpr char RECT_COLOR_TOPIC[]
Definition: camera.h:128
uint32_t DataSource
ros::NodeHandle left_nh_
Definition: camera.h:167
double pointcloud_max_range_
Definition: camera.h:320
image_transport::ImageTransport right_rect_transport_
Definition: camera.h:179
ros::Publisher ground_surface_spline_pub_
Definition: camera.h:228
ros::Publisher left_cost_cam_info_pub_
Definition: camera.h:216
static constexpr char DEPTH_CAMERA_INFO_TOPIC[]
Definition: camera.h:137
static constexpr char HISTOGRAM_TOPIC[]
Definition: camera.h:119
image_transport::Publisher aux_rgb_cam_pub_
Definition: camera.h:204
image_transport::ImageTransport ni_depth_transport_
Definition: camera.h:183
image_transport::ImageTransport disparity_right_transport_
Definition: camera.h:185
static constexpr char POINTCLOUD_TOPIC[]
Definition: camera.h:129
sensor_msgs::Image aux_mono_image_
Definition: camera.h:263
ros::Publisher left_rect_cam_info_pub_
Definition: camera.h:212
std::vector< uint8_t > pointcloud_rect_color_buffer_
Definition: camera.h:282
void jpegImageCallback(const crl::multisense::image::Header &header)
Definition: camera.cpp:965
sensor_msgs::Image left_disparity_image_
Definition: camera.h:270
ros::Publisher color_organized_point_cloud_pub_
Definition: camera.h:231
const std::string header
sensor_msgs::Image aux_rgb_rect_image_
Definition: camera.h:268
static constexpr char MONO_CAMERA_INFO_TOPIC[]
Definition: camera.h:133
static constexpr char CALIBRATION[]
Definition: camera.h:97
image_transport::ImageTransport disparity_left_transport_
Definition: camera.h:184
static constexpr char RIGHT_RECTIFIED_FRAME[]
Definition: camera.h:108
const std::string frame_id_origin_
Definition: camera.h:299
static constexpr char HEAD_FRAME[]
Definition: camera.h:104
sensor_msgs::PointCloud2 color_organized_point_cloud_
Definition: camera.h:261
crl::multisense::system::VersionInfo version_info_
Definition: camera.h:287
static constexpr char AUX[]
Definition: camera.h:96
static constexpr char COLOR_ORGANIZED_POINTCLOUD_TOPIC[]
Definition: camera.h:132
sensor_msgs::Image left_rgb_rect_image_
Definition: camera.h:266
const std::string frame_id_aux_
Definition: camera.h:303
ros::Publisher aux_mono_cam_info_pub_
Definition: camera.h:220
multisense_ros::RawCamData raw_cam_data_
Definition: camera.h:279
ros::Publisher color_point_cloud_pub_
Definition: camera.h:227
int64_t last_frame_id_
Definition: camera.h:325
sensor_msgs::Image aux_rect_image_
Definition: camera.h:267
std::vector< uint8_t > pointcloud_color_buffer_
Definition: camera.h:281
static constexpr char DISPARITY_TOPIC[]
Definition: camera.h:122
static constexpr char RAW_CAM_CONFIG_TOPIC[]
Definition: camera.h:117


multisense_ros
Author(s):
autogenerated on Sat Jun 24 2023 03:01:30