r200_nodelet.cpp
Go to the documentation of this file.
1 /******************************************************************************
2  Copyright (c) 2017, Intel Corporation
3  All rights reserved.
4 
5  Redistribution and use in source and binary forms, with or without
6  modification, are permitted provided that the following conditions are met:
7 
8  1. Redistributions of source code must retain the above copyright notice, this
9  list of conditions and the following disclaimer.
10 
11  2. Redistributions in binary form must reproduce the above copyright notice,
12  this list of conditions and the following disclaimer in the documentation
13  and/or other materials provided with the distribution.
14 
15  3. Neither the name of the copyright holder nor the names of its contributors
16  may be used to endorse or promote products derived from this software without
17  specific prior written permission.
18 
19  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23  FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  *******************************************************************************/
30 
31 #include <string>
32 #include <vector>
33 #include <cstdlib>
34 #include <bitset>
35 
37 
39 
40 namespace realsense_camera
41 {
42  /*
43  * Initialize the nodelet.
44  */
45  void R200Nodelet::onInit()
46  {
49  cv_type_[RS_STREAM_COLOR] = CV_8UC3;
50  unit_step_size_[RS_STREAM_COLOR] = sizeof(unsigned char) * 3;
51 
52  format_[RS_STREAM_DEPTH] = RS_FORMAT_Z16;
54  cv_type_[RS_STREAM_DEPTH] = CV_16UC1;
55  unit_step_size_[RS_STREAM_DEPTH] = sizeof(uint16_t);
56 
59  cv_type_[RS_STREAM_INFRARED] = CV_8UC1;
60  unit_step_size_[RS_STREAM_INFRARED] = sizeof(unsigned char);
61 
64  cv_type_[RS_STREAM_INFRARED2] = CV_8UC1;
65  unit_step_size_[RS_STREAM_INFRARED2] = sizeof(unsigned char);
66 
67  max_z_ = R200_MAX_Z;
68 
69  SyncNodelet::onInit();
70  }
71 
72  /*
73  * Get the nodelet parameters.
74  */
75  void R200Nodelet::getParameters()
76  {
77  BaseNodelet::getParameters();
78  pnh_.param("ir2_frame_id", frame_id_[RS_STREAM_INFRARED2], DEFAULT_IR2_FRAME_ID);
79  pnh_.param("ir2_optical_frame_id", optical_frame_id_[RS_STREAM_INFRARED2], DEFAULT_IR2_OPTICAL_FRAME_ID);
80  pnh_.param("enable_ir2", enable_[RS_STREAM_INFRARED2], ENABLE_IR2);
81 
82  // set IR2 stream to match depth
83  width_[RS_STREAM_INFRARED2] = width_[RS_STREAM_DEPTH];
84  height_[RS_STREAM_INFRARED2] = height_[RS_STREAM_DEPTH];
85  fps_[RS_STREAM_INFRARED2] = fps_[RS_STREAM_DEPTH];
86  }
87 
88  /*
89  * Advertise topics.
90  */
91  void R200Nodelet::advertiseTopics()
92  {
93  BaseNodelet::advertiseTopics();
94  ros::NodeHandle ir2_nh(nh_, IR2_NAMESPACE);
95  image_transport::ImageTransport ir2_image_transport(ir2_nh);
96  camera_publisher_[RS_STREAM_INFRARED2] = ir2_image_transport.advertiseCamera(IR2_TOPIC, 1);
97  }
98 
99  /*
100  * Set Dynamic Reconfigure Server and return the dynamic params.
101  */
102  std::vector<std::string> R200Nodelet::setDynamicReconfServer()
103  {
104  dynamic_reconf_server_.reset(new dynamic_reconfigure::Server<realsense_camera::r200_paramsConfig>(pnh_));
105 
106  // Get dynamic options from the dynamic reconfigure server.
107  realsense_camera::r200_paramsConfig params_config;
108  dynamic_reconf_server_->getConfigDefault(params_config);
109  std::vector<realsense_camera::r200_paramsConfig::AbstractParamDescriptionConstPtr> param_desc =
110  params_config.__getParamDescriptions__();
111  std::vector<std::string> dynamic_params;
112  for (realsense_camera::r200_paramsConfig::AbstractParamDescriptionConstPtr param_desc_ptr : param_desc)
113  {
114  dynamic_params.push_back((* param_desc_ptr).name);
115  }
116 
117  return dynamic_params;
118  }
119 
120  /*
121  * Start Dynamic Reconfigure Callback.
122  */
123  void R200Nodelet::startDynamicReconfCallback()
124  {
125  dynamic_reconf_server_->setCallback(boost::bind(&R200Nodelet::configCallback, this, _1, _2));
126  }
127 
128  /*
129  * Change the Depth Control Preset
130  */
131  void R200Nodelet::setDynamicReconfigDepthControlPreset(int preset)
132  {
133  // There is not a C++ API for dynamic reconfig so we need to use a system call
134  // Adding the sleep to ensure the current callback can end before we
135  // attempt the next callback from the system call.
136  std::vector<std::string> argv;
137  argv.push_back("rosrun");
138  argv.push_back("dynamic_reconfigure");
139  argv.push_back("dynparam");
140  argv.push_back("set");
141  argv.push_back(nodelet_name_);
142  argv.push_back("r200_dc_preset");
143  argv.push_back(std::to_string(preset));
144 
145  wrappedSystem(argv);
146  }
147 
148  /*
149  * Change the Depth Control Individual values
150  * GET ALL of the DC options from librealsense
151  * Call dynamic reconfig and set all 10 values as a set
152  */
153  std::string R200Nodelet::setDynamicReconfigDepthControlIndividuals()
154  {
155  std::string current_param;
156  std::string current_dc;
157  std::string option_value;
158 
159  // There is not a C++ API for dynamic reconfig so we need to use a system call
160  // Adding the sleep to ensure the current callback can end before we
161  // attempt the next callback from the system call.
162  std::vector<std::string> argv;
163  argv.push_back("rosrun");
164  argv.push_back("dynamic_reconfigure");
165  argv.push_back("dynparam");
166  argv.push_back("set");
167  argv.push_back(nodelet_name_);
168 
169  current_param = "{";
170 
171  option_value =
172  std::to_string(static_cast<uint32_t>(rs_get_device_option(rs_device_,
174  current_param += "'r200_dc_estimate_median_decrement':" + option_value + ", ";
175  current_dc += option_value + ":";
176 
177  option_value =
178  std::to_string(static_cast<uint32_t>(rs_get_device_option(rs_device_,
180  current_param += "'r200_dc_estimate_median_increment':" + option_value + ", ";
181  current_dc += option_value + ":";
182 
183  option_value =
184  std::to_string(static_cast<uint32_t>(rs_get_device_option(rs_device_,
186  current_param += "'r200_dc_median_threshold':" + option_value + ", ";
187  current_dc += option_value + ":";
188 
189  option_value =
190  std::to_string(static_cast<uint32_t>(rs_get_device_option(rs_device_,
192  current_param += "'r200_dc_score_minimum_threshold':" + option_value + ", ";
193  current_dc += option_value + ":";
194 
195  option_value =
196  std::to_string(static_cast<uint32_t>(rs_get_device_option(rs_device_,
198  current_param += "'r200_dc_score_maximum_threshold':" + option_value + ", ";
199  current_dc += option_value + ":";
200 
201  option_value =
202  std::to_string(static_cast<uint32_t>(rs_get_device_option(rs_device_,
204  current_param += "'r200_dc_texture_count_threshold':" + option_value + ", ";
205  current_dc += option_value + ":";
206 
207  option_value =
208  std::to_string(static_cast<uint32_t>(rs_get_device_option(rs_device_,
210  current_param += "'r200_dc_texture_difference_threshold':" + option_value + ", ";
211  current_dc += option_value + ":";
212 
213  option_value =
214  std::to_string(static_cast<uint32_t>(rs_get_device_option(rs_device_,
216  current_param += "'r200_dc_second_peak_threshold':" + option_value + ", ";
217  current_dc += option_value + ":";
218 
219  option_value =
220  std::to_string(static_cast<uint32_t>(rs_get_device_option(rs_device_,
222  current_param += "'r200_dc_neighbor_threshold':" + option_value + ", ";
223  current_dc += option_value + ":";
224 
225  option_value =
226  std::to_string(static_cast<uint32_t>(rs_get_device_option(rs_device_,
228  current_param += "'r200_dc_lr_threshold':" + option_value + "}";
229  current_dc += option_value;
230 
231  ROS_DEBUG_STREAM(nodelet_name_ << " - Setting DC: " << current_param);
232 
233  argv.push_back(current_param);
234 
235  wrappedSystem(argv);
236 
237  return current_dc;
238  }
239 
240  /*
241  * Get the dynamic param values.
242  */
243  void R200Nodelet::configCallback(realsense_camera::r200_paramsConfig &config, uint32_t level)
244  {
245  // Save the dc_preset value as there is no getter API for this value
246  static int dc_preset = -2;
247  int previous_dc_preset = dc_preset;
248  // Save the last depth control preset values as a string
249  static std::string last_dc;
250 
251  // level is the ORing of all levels which have a changed value
252  std::bitset<32> bit_level{level};
253 
254  if (bit_level.test(6)) // 2^6 = 64 : Depth Control Preset
255  {
256  ROS_INFO_STREAM(nodelet_name_ << " - Setting dynamic camera options" <<
257  " (r200_dc_preset=" << config.r200_dc_preset << ")");
258  }
259  else
260  {
261  ROS_INFO_STREAM(nodelet_name_ << " - Setting dynamic camera options");
262  }
263 
264  // set the depth enable
265  BaseNodelet::setDepthEnable(config.enable_depth);
266 
267  // Set common options
268  rs_set_device_option(rs_device_, RS_OPTION_COLOR_BACKLIGHT_COMPENSATION, config.color_backlight_compensation, 0);
269  rs_set_device_option(rs_device_, RS_OPTION_COLOR_BRIGHTNESS, config.color_brightness, 0);
270  rs_set_device_option(rs_device_, RS_OPTION_COLOR_CONTRAST, config.color_contrast, 0);
271  rs_set_device_option(rs_device_, RS_OPTION_COLOR_GAIN, config.color_gain, 0);
272  rs_set_device_option(rs_device_, RS_OPTION_COLOR_GAMMA, config.color_gamma, 0);
273  rs_set_device_option(rs_device_, RS_OPTION_COLOR_HUE, config.color_hue, 0);
274  rs_set_device_option(rs_device_, RS_OPTION_COLOR_SATURATION, config.color_saturation, 0);
275  rs_set_device_option(rs_device_, RS_OPTION_COLOR_SHARPNESS, config.color_sharpness, 0);
277  config.color_enable_auto_exposure, 0);
278  if (config.color_enable_auto_exposure == 0)
279  {
280  rs_set_device_option(rs_device_, RS_OPTION_COLOR_EXPOSURE, config.color_exposure, 0);
281  }
283  config.color_enable_auto_white_balance, 0);
284  if (config.color_enable_auto_white_balance == 0)
285  {
286  rs_set_device_option(rs_device_, RS_OPTION_COLOR_WHITE_BALANCE, config.color_white_balance, 0);
287  }
288 
289  // Set R200 specific options
290  rs_set_device_option(rs_device_, RS_OPTION_R200_LR_AUTO_EXPOSURE_ENABLED, config.r200_lr_auto_exposure_enabled, 0);
291  if (config.r200_lr_auto_exposure_enabled == 0)
292  {
293  rs_set_device_option(rs_device_, RS_OPTION_R200_LR_GAIN, config.r200_lr_gain, 0);
294  rs_set_device_option(rs_device_, RS_OPTION_R200_LR_EXPOSURE, config.r200_lr_exposure, 0);
295  }
296 
297  if (config.r200_lr_auto_exposure_enabled == 1)
298  {
299  if (config.r200_auto_exposure_top_edge >= height_[RS_STREAM_DEPTH])
300  {
301  config.r200_auto_exposure_top_edge = height_[RS_STREAM_DEPTH] - 1;
302  }
303  if (config.r200_auto_exposure_bottom_edge >= height_[RS_STREAM_DEPTH])
304  {
305  config.r200_auto_exposure_bottom_edge = height_[RS_STREAM_DEPTH] - 1;
306  }
307  if (config.r200_auto_exposure_left_edge >= width_[RS_STREAM_DEPTH])
308  {
309  config.r200_auto_exposure_left_edge = width_[RS_STREAM_DEPTH] - 1;
310  }
311  if (config.r200_auto_exposure_right_edge >= width_[RS_STREAM_DEPTH])
312  {
313  config.r200_auto_exposure_right_edge = width_[RS_STREAM_DEPTH] - 1;
314  }
315  double edge_values_[4];
316  edge_values_[0] = config.r200_auto_exposure_left_edge;
317  edge_values_[1] = config.r200_auto_exposure_top_edge;
318  edge_values_[2] = config.r200_auto_exposure_right_edge;
319  edge_values_[3] = config.r200_auto_exposure_bottom_edge;
320  rs_set_device_options(rs_device_, edge_options_, 4, edge_values_, 0);
321  }
322 
323  rs_set_device_option(rs_device_, RS_OPTION_R200_EMITTER_ENABLED, config.r200_emitter_enabled, 0);
324 
325  // Depth Control Group Settings
326  // NOTE: do NOT use the config.groups values as they are zero the first time called
327  if (bit_level.test(5)) // 2^5 = 32 : Individual Depth Control settings
328  {
329  std::string current_dc;
330 
331  ROS_DEBUG_STREAM(nodelet_name_ << " - Setting Individual Depth Control");
332 
334  config.r200_dc_estimate_median_decrement, 0);
335  current_dc += std::to_string(static_cast<uint32_t>(config.r200_dc_estimate_median_decrement)) + ":";
337  config.r200_dc_estimate_median_increment, 0);
338  current_dc += std::to_string(static_cast<uint32_t>(config.r200_dc_estimate_median_increment)) + ":";
340  config.r200_dc_median_threshold, 0);
341  current_dc += std::to_string(static_cast<uint32_t>(config.r200_dc_median_threshold)) + ":";
343  config.r200_dc_score_minimum_threshold, 0);
344  current_dc += std::to_string(static_cast<uint32_t>(config.r200_dc_score_minimum_threshold)) + ":";
346  config.r200_dc_score_maximum_threshold, 0);
347  current_dc += std::to_string(static_cast<uint32_t>(config.r200_dc_score_maximum_threshold)) + ":";
349  config.r200_dc_texture_count_threshold, 0);
350  current_dc += std::to_string(static_cast<uint32_t>(config.r200_dc_texture_count_threshold)) + ":";
352  config.r200_dc_texture_difference_threshold, 0);
353  current_dc += std::to_string(static_cast<uint32_t>(config.r200_dc_texture_difference_threshold)) + ":";
355  config.r200_dc_second_peak_threshold, 0);
356  current_dc += std::to_string(static_cast<uint32_t>(config.r200_dc_second_peak_threshold)) + ":";
358  config.r200_dc_neighbor_threshold, 0);
359  current_dc += std::to_string(static_cast<uint32_t>(config.r200_dc_neighbor_threshold)) + ":";
361  config.r200_dc_lr_threshold, 0);
362  current_dc += std::to_string(static_cast<uint32_t>(config.r200_dc_lr_threshold));
363 
364  // Preset also changed in the same update callback
365  // This is either First callback special case, or both set via
366  // dynamic configure command line.
367  if (bit_level.test(6)) // 2^6 = 64 : Depth Control Preset
368  {
369  dc_preset = config.r200_dc_preset;
370 
371  if (previous_dc_preset != -2) // not the first pass special case (-2)
372  {
373  // Changing individual Depth Control params means preset is Unused/Invalid
374  // if the individual values are not the same as the preset values
375  if (dc_preset != -1 && current_dc != last_dc)
376  {
377  ROS_DEBUG_STREAM(nodelet_name_ << " - Forcing Depth Control Preset to Unused");
378  setDynamicReconfigDepthControlPreset(-1);
379  }
380  }
381  else
382  {
383  // This is the first pass callback, in this instance we allow the
384  // dc_preset to trump the individual values as it might have been
385  // set from the launch file. To allow override of individual values,
386  // set dc_preset to -1 (Unused) in the launch file.
387  if (dc_preset != -1)
388  {
389  ROS_INFO_STREAM(nodelet_name_ << " - Initializing Depth Control Preset to " << dc_preset);
390  ROS_DEBUG_STREAM(nodelet_name_ << " - NOTICE: Individual Depth Control values " <<
391  "set by params will be ignored; set r200_dc_preset=-1 to override.");
392  rs_apply_depth_control_preset(rs_device_, dc_preset);
393 
394  // Save the preset value string
395  last_dc = setDynamicReconfigDepthControlIndividuals();
396  }
397  }
398  }
399  else
400  {
401  // Changing individual Depth Control params means preset is Unused/Invalid
402  // if the individual values are not the same as the preset values
403  if (dc_preset != -1 && current_dc != last_dc)
404  {
405  ROS_DEBUG_STREAM(nodelet_name_ << " - Forcing Depth Control Preset to Unused");
406  setDynamicReconfigDepthControlPreset(-1);
407  }
408  }
409  }
410  else
411  { // Individual Depth Control not set
412  if (bit_level.test(6)) // 2^6 = 64 : Depth Control Preset
413  {
414  dc_preset = config.r200_dc_preset;
415 
416  if (dc_preset != -1)
417  {
418  ROS_DEBUG_STREAM(nodelet_name_ << " - Set Depth Control Preset to " << dc_preset);
419  rs_apply_depth_control_preset(rs_device_, dc_preset);
420 
421  // Save the preset value string
422  last_dc = setDynamicReconfigDepthControlIndividuals();
423  }
424  }
425  }
426  }
427 
428  /*
429  * Get the camera extrinsics
430  */
431  void R200Nodelet::getCameraExtrinsics()
432  {
433  BaseNodelet::getCameraExtrinsics();
434 
435  // Get offset between base frame and infrared2 frame
436  rs_get_device_extrinsics(rs_device_, RS_STREAM_INFRARED2, RS_STREAM_COLOR, &color2ir2_extrinsic_, &rs_error_);
437  if (rs_error_)
438  {
439  ROS_ERROR_STREAM(nodelet_name_ << " - Verify camera is calibrated!");
440  }
441  checkError();
442  }
443 
444  /*
445  * Publish Static transforms.
446  */
447  void R200Nodelet::publishStaticTransforms()
448  {
449  BaseNodelet::publishStaticTransforms();
450 
451  tf::Quaternion q_i2io;
452  geometry_msgs::TransformStamped b2i_msg;
453  geometry_msgs::TransformStamped i2io_msg;
454 
455  // Transform base frame to infrared2 frame
456  b2i_msg.header.stamp = transform_ts_;
457  b2i_msg.header.frame_id = base_frame_id_;
458  b2i_msg.child_frame_id = frame_id_[RS_STREAM_INFRARED2];
459  b2i_msg.transform.translation.x = color2ir2_extrinsic_.translation[2];
460  b2i_msg.transform.translation.y = -color2ir2_extrinsic_.translation[0];
461  b2i_msg.transform.translation.z = -color2ir2_extrinsic_.translation[1];
462  b2i_msg.transform.rotation.x = 0;
463  b2i_msg.transform.rotation.y = 0;
464  b2i_msg.transform.rotation.z = 0;
465  b2i_msg.transform.rotation.w = 1;
466  static_tf_broadcaster_.sendTransform(b2i_msg);
467 
468  // Transform infrared2 frame to infrared2 optical frame
469  q_i2io.setRPY(-M_PI/2, 0.0, -M_PI/2);
470  i2io_msg.header.stamp = transform_ts_;
471  i2io_msg.header.frame_id = frame_id_[RS_STREAM_INFRARED2];
472  i2io_msg.child_frame_id = optical_frame_id_[RS_STREAM_INFRARED2];
473  i2io_msg.transform.translation.x = 0;
474  i2io_msg.transform.translation.y = 0;
475  i2io_msg.transform.translation.z = 0;
476  i2io_msg.transform.rotation.x = q_i2io.getX();
477  i2io_msg.transform.rotation.y = q_i2io.getY();
478  i2io_msg.transform.rotation.z = q_i2io.getZ();
479  i2io_msg.transform.rotation.w = q_i2io.getW();
480  static_tf_broadcaster_.sendTransform(i2io_msg);
481  }
482 
483  /*
484  * Publish Dynamic transforms.
485  */
486  void R200Nodelet::publishDynamicTransforms()
487  {
488  tf::Transform tr;
490 
491  BaseNodelet::publishDynamicTransforms();
492 
493  // Transform base frame to infrared2 frame
495  color2ir2_extrinsic_.translation[2],
496  -color2ir2_extrinsic_.translation[0],
497  -color2ir2_extrinsic_.translation[1]));
498  tr.setRotation(tf::Quaternion(0, 0, 0, 1));
499  dynamic_tf_broadcaster_.sendTransform(tf::StampedTransform(tr, transform_ts_,
500  base_frame_id_, frame_id_[RS_STREAM_INFRARED2]));
501 
502  // Transform infrared2 frame to infrared2 optical frame
503  tr.setOrigin(tf::Vector3(0, 0, 0));
504  q.setRPY(-M_PI/2, 0.0, -M_PI/2);
505  tr.setRotation(q);
506  dynamic_tf_broadcaster_.sendTransform(tf::StampedTransform(tr, transform_ts_,
507  frame_id_[RS_STREAM_INFRARED2], optical_frame_id_[RS_STREAM_INFRARED2]));
508  }
509 } // namespace realsense_camera
RS_STREAM_INFRARED2
RS_OPTION_R200_LR_AUTO_EXPOSURE_ENABLED
RS_OPTION_COLOR_ENABLE_AUTO_EXPOSURE
void rs_set_device_option(rs_device *device, rs_option option, double value, rs_error **error)
const float R200_MAX_Z
Definition: constants.h:97
RS_OPTION_COLOR_BACKLIGHT_COMPENSATION
TFSIMD_FORCE_INLINE void setRotation(const Quaternion &q)
RS_OPTION_COLOR_ENABLE_AUTO_WHITE_BALANCE
RS_OPTION_R200_LR_GAIN
RS_OPTION_R200_DEPTH_CONTROL_SECOND_PEAK_THRESHOLD
RS_OPTION_R200_LR_EXPOSURE
PLUGINLIB_EXPORT_CLASS(depth_image_proc::ConvertMetricNodelet, nodelet::Nodelet)
RS_OPTION_R200_DEPTH_CONTROL_ESTIMATE_MEDIAN_INCREMENT
const std::string TYPE_8UC1
RS_OPTION_COLOR_HUE
TFSIMD_FORCE_INLINE const tfScalar & getW() const
RS_OPTION_COLOR_GAIN
void rs_set_device_options(rs_device *device, const rs_option options[], unsigned int count, const double values[], rs_error **error)
RS_OPTION_R200_DEPTH_CONTROL_SCORE_MINIMUM_THRESHOLD
RS_OPTION_R200_DEPTH_CONTROL_SCORE_MAXIMUM_THRESHOLD
RS_FORMAT_Z16
RS_OPTION_COLOR_CONTRAST
RS_OPTION_COLOR_WHITE_BALANCE
const bool ENABLE_IR2
Definition: constants.h:56
rs_error * rs_error_
RS_OPTION_COLOR_EXPOSURE
const std::string IR2_TOPIC
Definition: constants.h:89
GLint level
CameraPublisher advertiseCamera(const std::string &base_topic, uint32_t queue_size, bool latch=false)
RS_OPTION_COLOR_SHARPNESS
void setRPY(const tfScalar &roll, const tfScalar &pitch, const tfScalar &yaw)
const std::string IR2_NAMESPACE
Definition: constants.h:88
RS_OPTION_R200_DEPTH_CONTROL_ESTIMATE_MEDIAN_DECREMENT
double rs_get_device_option(rs_device *device, rs_option option, rs_error **error)
const std::string TYPE_16UC1
RS_OPTION_R200_DEPTH_CONTROL_NEIGHBOR_THRESHOLD
RS_OPTION_R200_EMITTER_ENABLED
void rs_get_device_extrinsics(const rs_device *device, rs_stream from, rs_stream to, rs_extrinsics *extrin, rs_error **error)
#define ROS_DEBUG_STREAM(args)
RS_OPTION_R200_DEPTH_CONTROL_MEDIAN_THRESHOLD
RS_OPTION_R200_DEPTH_CONTROL_TEXTURE_DIFFERENCE_THRESHOLD
#define ROS_INFO_STREAM(args)
const std::string DEFAULT_IR2_FRAME_ID
Definition: constants.h:90
const std::string DEFAULT_IR2_OPTICAL_FRAME_ID
Definition: constants.h:91
RS_OPTION_COLOR_SATURATION
GLdouble GLdouble GLdouble GLdouble q
RS_FORMAT_RGB8
#define ROS_ERROR_STREAM(args)
RS_STREAM_DEPTH
RS_OPTION_R200_DEPTH_CONTROL_LR_THRESHOLD
RS_OPTION_R200_DEPTH_CONTROL_TEXTURE_COUNT_THRESHOLD
RS_FORMAT_Y8
TFSIMD_FORCE_INLINE void setOrigin(const Vector3 &origin)
RS_STREAM_INFRARED
RS_OPTION_COLOR_BRIGHTNESS
RS_OPTION_COLOR_GAMMA
RS_STREAM_COLOR
preset


realsense_camera
Author(s): Rajvi Jingar , Reagan Lopez , Matt Hansen , Mark Horn
autogenerated on Mon Jun 10 2019 14:40:37