StereoNode.cpp
Go to the documentation of this file.
1 /*********************************************************************
2  * Software License Agreement (BSD License)
3  *
4  * Copyright (c) 2012-2016, Kevin Hallenbeck
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * * Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  * * Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the following
15  * disclaimer in the documentation and/or other materials provided
16  * with the distribution.
17  * * Neither the name of Kevin Hallenbeck nor the names of its
18  * contributors may be used to endorse or promote products derived
19  * from this software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32  * POSSIBILITY OF SUCH DAMAGE.
33  *********************************************************************/
34 
35 #include <ueye/StereoNode.h>
36 #include <boost/format.hpp>
37 
38 namespace ueye
39 {
40 
42  srv_(priv_nh), it_(node)
43 {
44  running_ = false;
45  configured_ = false;
46  force_streaming_ = false;
47  auto_exposure_ = false;
48  auto_gain_ = false;
49  trigger_mode_ = zoom_ = -1;
51 
52  // Check for a valid uEye installation and supported version
53  const char *version;
54  int major, minor, build;
55  if (l_cam_.checkVersion(major, minor, build, version)) {
56  ROS_INFO("Loaded uEye SDK %s.", version);
57  } else {
58  ROS_WARN("Loaded uEye SDK %d.%d.%d. Expecting %s.", major, minor, build, version);
59  }
60 
61  // Make sure there is at least one camera available
62  int num_cameras = l_cam_.getNumberOfCameras();
63  if (num_cameras > 0) {
64  if (num_cameras == 1) {
65  ROS_ERROR("Found 1 uEye camera.");
66  ros::shutdown();
67  } else {
68  ROS_INFO("Found %d uEye cameras.", num_cameras);
69  }
70  } else {
71  ROS_ERROR("Found 0 uEye cameras.");
72  ros::shutdown();
73  return;
74  }
75 
76  // Service call for setting calibration.
77  l_srv_cam_info_ = node.advertiseService("left/set_camera_info", &StereoNode::setCameraInfoL, this);
78  r_srv_cam_info_ = node.advertiseService("right/set_camera_info", &StereoNode::setCameraInfoR, this);
79 
80  // Special publisher for images to support compression
81  l_pub_stream_ = it_.advertiseCamera("left/image_raw", 0);
82  r_pub_stream_ = it_.advertiseCamera("right/image_raw", 0);
83 
84  // Open cameras with either serialNo, deviceId, or cameraId
85  int id = 0;
86  if (priv_nh.getParam("lSerialNo", id)) {
87  if (!l_cam_.openCameraSerNo(id)) {
88  ROS_ERROR("Failed to open uEye camera with serialNo: %u.", id);
89  ros::shutdown();
90  return;
91  }
92  } else if (priv_nh.getParam("lDeviceId", id)) {
93  if (!l_cam_.openCameraDevId(id)) {
94  ROS_ERROR("Failed to open uEye camera with deviceId: %u.", id);
95  ros::shutdown();
96  return;
97  }
98  } else {
99  priv_nh.getParam("lCameraId", id);
100  if (!l_cam_.openCameraCamId(id)) {
101  ROS_ERROR("Failed to open uEye camera with cameraId: %u.", id);
102  ros::shutdown();
103  return;
104  }
105  }
106  ROS_INFO("Left camera: %s %u", l_cam_.getCameraName(), l_cam_.getCameraSerialNo());
107  id = 0;
108  if (priv_nh.getParam("rSerialNo", id)) {
109  if (!r_cam_.openCameraSerNo(id)) {
110  ROS_ERROR("Failed to open uEye camera with serialNo: %u.", id);
111  ros::shutdown();
112  return;
113  }
114  } else if (priv_nh.getParam("rDeviceId", id)) {
115  if (!r_cam_.openCameraDevId(id)) {
116  ROS_ERROR("Failed to open uEye camera with deviceId: %u.", id);
117  ros::shutdown();
118  return;
119  }
120  } else {
121  priv_nh.getParam("rCameraId", id);
122  if (!r_cam_.openCameraCamId(id)) {
123  ROS_ERROR("Failed to open uEye camera with cameraId: %u.", id);
124  ros::shutdown();
125  return;
126  }
127  }
128  ROS_INFO("Right camera: %s %u", r_cam_.getCameraName(), r_cam_.getCameraSerialNo());
129 
130  // Disable trigger delays
133 
136 
137  // Setup Dynamic Reconfigure
138  dynamic_reconfigure::Server<stereoConfig>::CallbackType f = boost::bind(&StereoNode::reconfig, this, _1, _2);
139  srv_.setCallback(f); //start dynamic reconfigure
140 
141  // Set up Timer
143 }
144 
146 {
147  closeCamera();
148 }
149 
150 void StereoNode::handlePath(std::string &path)
151 {
152  // Set default path if not present
153  if (path.length() == 0) {
154  path = ros::package::getPath("ueye");
155  }
156 
157  // Remove trailing "/" from folder path
158  unsigned int length = path.length();
159  if (length > 0) {
160  if (path.c_str()[length - 1] == '/') {
161  path = path.substr(0, length - 1);
162  }
163  }
164  config_path_ = path;
165 }
166 void StereoNode::reconfigCam(stereoConfig &config, uint32_t level, Camera &cam)
167 {
168  // Color Mode
169  uEyeColor color;
170  switch (config.color) {
171  default:
172  case mono_COLOR_MONO8:
173  color = MONO8;
174  break;
175  case mono_COLOR_MONO16:
176  color = MONO16;
177  break;
178  case mono_COLOR_YUV:
179  color = YUV;
180  break;
181  case mono_COLOR_YCbCr:
182  color = YCbCr;
183  break;
184  case mono_COLOR_BGR5:
185  color = BGR5;
186  break;
187  case mono_COLOR_BGR565:
188  color = BGR565;
189  break;
190  case mono_COLOR_BGR8:
191  color = BGR8;
192  break;
193  case mono_COLOR_BGRA8:
194  color = BGRA8;
195  break;
196  case mono_COLOR_BGRY8:
197  color = BGRY8;
198  break;
199  case mono_COLOR_RGB8:
200  color = RGB8;
201  break;
202  case mono_COLOR_RGBA8:
203  color = RGBA8;
204  break;
205  case mono_COLOR_RGBY8:
206  color = RGBY8;
207  break;
208  }
209  if (cam.getColorMode() != color) {
210  cam.setColorMode(color);
211  }
212 
213  // Hardware Gamma Correction
214  if (cam.getHardwareGamma() != config.hardware_gamma) {
215  cam.setHardwareGamma(&config.hardware_gamma);
216  }
217 
218  // Gain Boost
219  if (cam.getGainBoost() != config.gain_boost) {
220  cam.setGainBoost(&config.gain_boost);
221  }
222 
223  // Hardware Gain
224  if (cam.getAutoGain() != config.auto_gain) {
225  cam.setAutoGain(&config.auto_gain);
226  }
227  if (!config.auto_gain) {
228  cam.setHardwareGain(&config.gain);
229  }
230 
231  // Zoom
232  if (cam.getZoom() != config.zoom) {
233  cam.setZoom(&config.zoom);
234  }
235 
236  // Frame Rate
237  if (config.trigger == stereo_TGR_SOFTWARE) {
238  //In software trigger mode we don't want to set a frame rate
239  double d = 2.0;
240  cam.setFrameRate(&d);
241  } else {
242  cam.setFrameRate(&config.frame_rate);
243  ROS_INFO("config.trigger %d", config.trigger);
244  }
245 
246  // Exposure
247  if (cam.getAutoExposure() != config.auto_exposure) {
248  cam.setAutoExposure(&config.auto_exposure);
249  }
250  if (!config.auto_exposure) {
251  cam.setExposure(&config.exposure_time);
252  }
253 }
254 void StereoNode::reconfig(stereoConfig &config, uint32_t level)
255 {
256  force_streaming_ = config.force_streaming;
257  handlePath(config.config_path);
258 
259  const FlashMode flash_active_mode = config.flash_polarity ? FLASH_FREERUN_ACTIVE_HI : FLASH_FREERUN_ACTIVE_LO;
260 
261  if (trigger_mode_ != config.trigger) {
262  stopCamera();
263  TriggerMode l_trigger, r_trigger;
264  FlashMode l_flash = FLASH_OFF;
265  FlashMode r_flash = FLASH_OFF;
266  switch (config.trigger) {
267  case stereo_TGR_SOFTWARE:
268  case stereo_TGR_HARDWARE_RISING:
269  l_trigger = r_trigger = TRIGGER_LO_HI;
270  break;
271  case stereo_TGR_HARDWARE_FALLING:
272  l_trigger = r_trigger = TRIGGER_HI_LO;
273  break;
274  case stereo_TGR_L_MASTER_R_RISING:
275  l_trigger = TRIGGER_OFF;
276  r_trigger = TRIGGER_LO_HI;
277  l_flash = flash_active_mode;
278  break;
279  case stereo_TGR_L_MASTER_R_FALLING:
280  l_trigger = TRIGGER_OFF;
281  r_trigger = TRIGGER_HI_LO;
282  l_flash = flash_active_mode;
283  break;
284  case stereo_TGR_R_MASTER_L_RISING:
285  l_trigger = TRIGGER_LO_HI;
286  r_trigger = TRIGGER_OFF;
287  r_flash = flash_active_mode;
288  break;
289  case stereo_TGR_R_MASTER_L_FALLING:
290  l_trigger = TRIGGER_HI_LO;
291  r_trigger = TRIGGER_OFF;
292  r_flash = flash_active_mode;
293  break;
294  case stereo_TGR_AUTO:
295  default:
296  config.trigger = stereo_TGR_AUTO;
297  l_trigger = r_trigger = TRIGGER_OFF;
298  break;
299  }
300  if (!(l_cam_.setTriggerMode(l_trigger) && r_cam_.setTriggerMode(r_trigger))) {
301  ROS_ERROR("Failed to configure triggers");
304  config.trigger = stereo_TGR_AUTO;
307  } else {
308  l_cam_.setFlash(l_flash, config.flash_delay, config.flash_duration);
309  r_cam_.setFlash(r_flash, config.flash_delay, config.flash_duration);
310  }
311  }
312 
313  // Latch Auto Parameters
314  if (auto_gain_ && !config.auto_gain) {
315  config.gain = l_cam_.getHardwareGain();
316  }
317  auto_gain_ = config.auto_gain;
318  if (auto_exposure_ && !config.auto_exposure) {
319  config.exposure_time = l_cam_.getExposure();
320  }
321  auto_exposure_ = config.auto_exposure;
322 
323  // Pixel Clock
324  if (l_cam_.getPixelClock() != config.l_pixel_clock) {
325  l_cam_.setPixelClock(&config.l_pixel_clock);
326  }
327  if (r_cam_.getPixelClock() != config.r_pixel_clock) {
328  r_cam_.setPixelClock(&config.r_pixel_clock);
329  }
330 
331  reconfigCam(config, level, l_cam_);
332  reconfigCam(config, level, r_cam_);
333 
334  trigger_mode_ = config.trigger;
335  if (trigger_mode_ == stereo_TGR_SOFTWARE) {
336  timer_force_trigger_.setPeriod(ros::Duration(1 / config.frame_rate));
337  }
338 
339  if (zoom_ != config.zoom) {
340  zoom_ = config.zoom;
343  }
344 
345  l_msg_camera_info_.header.frame_id = config.l_frame_id;
346  r_msg_camera_info_.header.frame_id = config.r_frame_id;
347  configured_ = true;
348 }
349 
351 {
353  startCamera();
354  } else {
355  stopCamera();
356  }
357 }
359 {
360  if (trigger_mode_ == stereo_TGR_SOFTWARE) {
361  bool success = true;
362  success &= l_cam_.forceTrigger();
363  success &= r_cam_.forceTrigger();
364  if (!success) {
365  ROS_WARN("Failed to force trigger");
366  }
367  }
368 }
369 
370 // Support camera calibration requests
371 // http://www.ros.org/wiki/camera_calibration/Tutorials/MonocularCalibration
372 bool StereoNode::setCameraInfo(sensor_msgs::SetCameraInfo::Request& req, sensor_msgs::SetCameraInfo::Response& rsp,
373  Camera& cam, sensor_msgs::CameraInfo &msg_info)
374 {
375  ROS_INFO("New camera info received");
376  sensor_msgs::CameraInfo &info = req.camera_info;
377  info.header.frame_id = msg_info.header.frame_id;
378 
379  // Sanity check: the image dimensions should match the resolution of the sensor.
380  unsigned int height = cam.getHeight();
381  unsigned int width = cam.getWidth();
382 
383  if (info.width != width || info.height != height) {
384  rsp.success = false;
385  rsp.status_message = (boost::format("Camera_info resolution %ix%i does not match current video "
386  "setting, camera running at resolution %ix%i.") % info.width % info.height
387  % width % height).str();
388  ROS_ERROR("%s", rsp.status_message.c_str());
389  return true;
390  }
391 
392  std::string camname = cam.getCameraName();
393  std::stringstream ini_stream;
394  if (!camera_calibration_parsers::writeCalibrationIni(ini_stream, camname, info)) {
395  rsp.status_message = "Error formatting camera_info for storage.";
396  rsp.success = false;
397  } else {
398  std::string ini = ini_stream.str();
399  std::fstream param_file;
400  std::string filename = config_path_ + "/" + configFileName(cam);
401  param_file.open(filename.c_str(), std::ios::in | std::ios::out | std::ios::trunc);
402 
403  if (param_file.is_open()) {
404  param_file << ini.c_str();
405  param_file.close();
406 
407  msg_info = info;
408  rsp.success = true;
409  } else {
410  rsp.success = false;
411  rsp.status_message = "file write failed";
412  }
413  }
414  if (!rsp.success) {
415  ROS_ERROR("%s", rsp.status_message.c_str());
416  }
417  return true;
418 }
419 bool StereoNode::setCameraInfoL(sensor_msgs::SetCameraInfo::Request& req, sensor_msgs::SetCameraInfo::Response& rsp)
420 {
421  return setCameraInfo(req, rsp, l_cam_, l_msg_camera_info_);
422 }
423 bool StereoNode::setCameraInfoR(sensor_msgs::SetCameraInfo::Request& req, sensor_msgs::SetCameraInfo::Response& rsp)
424 {
425  return setCameraInfo(req, rsp, r_cam_, r_msg_camera_info_);
426 }
427 
428 // Try to load previously saved camera calibration from a file.
429 void StereoNode::loadIntrinsics(Camera &cam, sensor_msgs::CameraInfo &msg_info)
430 {
431  char buffer[12800];
432 
433  std::string MyPath = config_path_ + "/" + configFileName(cam);
434  std::fstream param_file;
435  param_file.open(MyPath.c_str(), std::ios::in);
436 
437  if (param_file.is_open()) {
438  param_file.read(buffer, 12800);
439  param_file.close();
440  }
441 
442  // Parse calibration file
443  std::string camera_name;
444  if (camera_calibration_parsers::parseCalibrationIni(buffer, camera_name, msg_info)) {
445  ROS_INFO("Calibration : %s %u", camera_name.c_str(), cam.getCameraSerialNo());
446  } else {
447  ROS_WARN("Failed to load intrinsics for camera from file");
448  }
449 }
450 
451 // Add properties to image message
452 sensor_msgs::ImagePtr StereoNode::processFrame(const char *frame, size_t size, const Camera &cam,
453  sensor_msgs::CameraInfoPtr &info, sensor_msgs::CameraInfo &msg_info)
454 {
455  msg_info.roi.x_offset = 0;
456  msg_info.roi.y_offset = 0;
457  msg_info.height = cam.getHeight();
458  msg_info.width = cam.getWidth();
459  msg_info.roi.width = 0;
460  msg_info.roi.height = 0;
461  sensor_msgs::CameraInfoPtr msg(new sensor_msgs::CameraInfo(msg_info));
462  info = msg;
463 
464  sensor_msgs::ImagePtr msg_image(new sensor_msgs::Image());
465  msg_image->header = msg_info.header;
466  msg_image->height = msg_info.height;
467  msg_image->width = msg_info.width;
468  msg_image->encoding = Camera::colorModeToString(cam.getColorMode());
469  msg_image->is_bigendian = false;
470  msg_image->step = size / msg_image->height;
471  msg_image->data.resize(size);
472  memcpy(msg_image->data.data(), frame, size);
473  return msg_image;
474 }
475 
476 // Timestamp and publish the image. Called by the streaming thread.
477 void StereoNode::publishImageL(const char *frame, size_t size)
478 {
479  ros::Time stamp = ros::Time::now();
480  boost::lock_guard<boost::mutex> lock(mutex_);
481  l_stamp_ = stamp;
482  double diff = (l_stamp_ - r_stamp_).toSec();
483  if ((diff >= 0) && (diff < 0.02)) {
484  l_msg_camera_info_.header.stamp = r_msg_camera_info_.header.stamp;
485  } else {
486  l_msg_camera_info_.header.stamp = l_stamp_;
487  }
488  sensor_msgs::CameraInfoPtr info;
489  sensor_msgs::ImagePtr img = processFrame(frame, size, l_cam_, info, l_msg_camera_info_);
490  l_pub_stream_.publish(img, info);
491 }
492 void StereoNode::publishImageR(const char *frame, size_t size)
493 {
494  ros::Time stamp = ros::Time::now();
495  boost::lock_guard<boost::mutex> lock(mutex_);
496  r_stamp_ = stamp;
497  double diff = (r_stamp_ - l_stamp_).toSec();
498  if ((diff >= 0) && (diff < 0.02)) {
499  r_msg_camera_info_.header.stamp = l_msg_camera_info_.header.stamp;
500  } else {
501  r_msg_camera_info_.header.stamp = r_stamp_;
502  }
503  sensor_msgs::CameraInfoPtr info;
504  sensor_msgs::ImagePtr img = processFrame(frame, size, r_cam_, info, r_msg_camera_info_);
505  r_pub_stream_.publish(img, info);
506 }
507 
509 {
510  if (running_ || !configured_)
511  return;
512  l_cam_.startVideoCapture(boost::bind(&StereoNode::publishImageL, this, _1, _2));
513  r_cam_.startVideoCapture(boost::bind(&StereoNode::publishImageR, this, _1, _2));
515  ROS_INFO("Started video stream.");
516  running_ = true;
517 }
518 
520 {
522  if (!running_)
523  return;
524  ROS_INFO("Stopping video stream.");
527  ROS_INFO("Stopped video stream.");
528  running_ = false;
529 }
530 
532 {
533  stopCamera();
536 }
537 
538 } // namespace ueye
ueye::Camera r_cam_
Definition: StereoNode.h:81
unsigned int getHardwareGain()
Definition: Camera.cpp:235
void handlePath(std::string &path)
Definition: StereoNode.cpp:150
dynamic_reconfigure::Server< stereoConfig > srv_
Definition: StereoNode.h:76
bool forceTrigger()
Definition: Camera.cpp:460
ros::Time r_stamp_
Definition: StereoNode.h:90
void publish(const sensor_msgs::Image &image, const sensor_msgs::CameraInfo &info) const
void setFlash(FlashMode mode, int delay_usec, unsigned int duration_usec)
Definition: Camera.cpp:423
void setHardwareGain(int *gain)
Definition: Camera.cpp:378
void loadIntrinsics(Camera &cam, sensor_msgs::CameraInfo &msg_info)
Definition: StereoNode.cpp:429
Definition: Camera.h:44
bool getAutoGain() const
Definition: Camera.h:121
ros::ServiceServer r_srv_cam_info_
Definition: StereoNode.h:95
f
static const char * colorModeToString(uEyeColor mode)
Definition: Camera.cpp:200
unsigned int getCameraSerialNo() const
Definition: Camera.h:109
uint32_t getNumSubscribers() const
void stop()
void setAutoGain(bool *enable)
Definition: Camera.cpp:367
void setPeriod(const Duration &period, bool reset=true)
void start()
const char * getCameraName() const
Definition: Camera.h:108
bool setTriggerMode(TriggerMode mode)
Definition: Camera.cpp:389
std::string config_path_
Definition: StereoNode.h:85
sensor_msgs::CameraInfo r_msg_camera_info_
Definition: StereoNode.h:79
image_transport::CameraPublisher l_pub_stream_
Definition: StereoNode.h:94
bool setCameraInfo(sensor_msgs::SetCameraInfo::Request &req, sensor_msgs::SetCameraInfo::Response &rsp, Camera &cam, sensor_msgs::CameraInfo &msg_info)
Definition: StereoNode.cpp:372
image_transport::CameraPublisher r_pub_stream_
Definition: StereoNode.h:94
void setZoom(int *zoom)
Definition: Camera.cpp:293
ServiceServer advertiseService(const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T *obj)
ros::ServiceServer l_srv_cam_info_
Definition: StereoNode.h:95
#define ROS_WARN(...)
void setTriggerDelay(int delay_usec)
Definition: Camera.cpp:455
void stopVideoCapture()
Definition: Camera.cpp:696
boost::mutex mutex_
Definition: StereoNode.h:98
ros::Timer timer_force_trigger_
Definition: StereoNode.h:78
bool getGainBoost() const
Definition: Camera.h:120
void setHardwareGamma(bool *enable)
Definition: Camera.cpp:281
void timerCallback(const ros::TimerEvent &event)
Definition: StereoNode.cpp:350
CameraPublisher advertiseCamera(const std::string &base_topic, uint32_t queue_size, bool latch=false)
bool getAutoExposure() const
Definition: Camera.h:116
int getWidth() const
Definition: Camera.h:112
void reconfig(stereoConfig &config, uint32_t level)
Definition: StereoNode.cpp:254
bool force_streaming_
Definition: StereoNode.h:84
void setAutoExposure(bool *enable)
Definition: Camera.cpp:262
void closeCamera()
Definition: Camera.cpp:552
#define ROS_INFO(...)
bool openCameraDevId(unsigned int id)
Definition: Camera.cpp:183
TriggerMode
Definition: Camera.h:71
Timer createTimer(Rate r, Handler h, Obj o, bool oneshot=false, bool autostart=true) const
sensor_msgs::ImagePtr processFrame(const char *frame, size_t size, const Camera &cam, sensor_msgs::CameraInfoPtr &info, sensor_msgs::CameraInfo &msg_info)
Definition: StereoNode.cpp:452
void setGainBoost(bool *enable)
Definition: Camera.cpp:354
bool writeCalibrationIni(std::ostream &out, const std::string &camera_name, const sensor_msgs::CameraInfo &cam_info)
int getNumberOfCameras() const
Definition: Camera.cpp:123
uEyeColor
Definition: Camera.h:56
void startVideoCapture(CamCaptureCB)
Definition: Camera.cpp:691
int getPixelClock() const
Definition: Camera.h:119
ros::Timer timer_
Definition: StereoNode.h:77
void setPixelClock(int *MHz)
Definition: Camera.cpp:316
ROSLIB_DECL std::string getPath(const std::string &package_name)
void publishImageR(const char *frame, size_t size)
Definition: StereoNode.cpp:492
ueye::Camera l_cam_
Definition: StereoNode.h:81
void setColorMode(uEyeColor mode)
Definition: Camera.cpp:249
FlashMode
Definition: Camera.h:80
StereoNode(ros::NodeHandle node, ros::NodeHandle private_nh)
Definition: StereoNode.cpp:41
sensor_msgs::CameraInfo l_msg_camera_info_
Definition: StereoNode.h:79
bool getParam(const std::string &key, std::string &s) const
void setFrameRate(double *rate)
Definition: Camera.cpp:348
void timerForceTrigger(const ros::TimerEvent &event)
Definition: StereoNode.cpp:358
double getExposure()
Definition: Camera.cpp:229
bool openCameraSerNo(unsigned int serial_number)
Definition: Camera.cpp:187
static Time now()
static std::string configFileName(const Camera &cam)
Definition: CameraNode.h:61
ROSCPP_DECL void shutdown()
void setExposure(double *time_ms)
Definition: Camera.cpp:273
bool parseCalibrationIni(const std::string &buffer, std::string &camera_name, sensor_msgs::CameraInfo &cam_info)
void reconfigCam(stereoConfig &config, uint32_t level, Camera &cam)
Definition: StereoNode.cpp:166
uEyeColor getColorMode() const
Definition: Camera.h:115
image_transport::ImageTransport it_
Definition: StereoNode.h:93
bool setCameraInfoL(sensor_msgs::SetCameraInfo::Request &req, sensor_msgs::SetCameraInfo::Response &rsp)
Definition: StereoNode.cpp:419
static bool checkVersion(int &major, int &minor, int &build, const char *&expected)
Definition: Camera.cpp:108
void publishImageL(const char *frame, size_t size)
Definition: StereoNode.cpp:477
ros::Time l_stamp_
Definition: StereoNode.h:90
int getZoom() const
Definition: Camera.h:114
bool getHardwareGamma() const
Definition: Camera.h:118
#define ROS_ERROR(...)
int getHeight() const
Definition: Camera.h:113
bool openCameraCamId(unsigned int id)
Definition: Camera.cpp:153
bool setCameraInfoR(sensor_msgs::SetCameraInfo::Request &req, sensor_msgs::SetCameraInfo::Response &rsp)
Definition: StereoNode.cpp:423


ueye
Author(s): Kevin Hallenbeck
autogenerated on Sun Oct 6 2019 03:35:25