callback_impl.cpp
Go to the documentation of this file.
1 /******************************************************************************
2 Copyright (c), 2023 - Analog Devices Inc. All Rights Reserved.
3 This software is PROPRIETARY & CONFIDENTIAL to Analog Devices, Inc.
4 and its licensors.
5 ******************************************************************************/
7 #include <ros/ros.h>
8 #include <tf2_eigen/tf2_eigen.h>
11 #include "module_profile.h"
12 
13 #ifdef ENABLE_OPENMP_OPTIMIZATION
14 #include <omp.h>
15 #endif
16 
18 
25 {
26  float horiz_fov_ = abs(camera_yaw_max_ - camera_yaw_min_); //FOV generated between the yaw of leftmost and rightmost sensors
27  horiz_fov_ = std::min((double)360.0f,((horiz_fov_/M_PI)*180) + horizontal_fov_sensor_in_degrees_) ; //Adding the FOV on either side of extreme end sensors
28 
29  camera_yaw_correction_ = 1.5708f - ((horizontal_fov_sensor_in_degrees_/(2*180))*M_PI) - camera_yaw_max_ ; //1.5708f is = pi(starting point of projection) + optical frame yaw (which is 1.57)
30 
31  //updating the stitching parameters
32  int updated_out_image_width_ = (int)(ceil(horiz_fov_/horizontal_fov_sensor_in_degrees_) * sensor_image_width_);
33 
34 #ifdef ENABLE_GPU_OPTIMIZATION
35  stitch_frames_core_GPU_->update_parameters(updated_out_image_width_, out_image_height_,horiz_fov_, camera_yaw_correction_);
36 #else
38 #endif
39 
40  //Update videowriter object to accomodate new frame size
41  if (output_sensor_ != nullptr && updated_out_image_width_!=out_image_width_)
42  {
43  //open a fresh video output file with updated output size
45  output_sensor_->open(output_file_name_, updated_out_image_width_,
47  }
48  //Update output width
49  out_image_width_ = updated_out_image_width_;
50 
51  //Update Point cloud size
53 }
54 
64 void ADI3DToFImageStitching::sync2CamerasDepthIRImageCallback(const sensor_msgs::ImageConstPtr& depth_image_cam1,
65  const sensor_msgs::ImageConstPtr& ir_image_cam1,
66  const sensor_msgs::ImageConstPtr& depth_image_cam2,
67  const sensor_msgs::ImageConstPtr& ir_image_cam2)
68 {
69  PROFILE_FUNCTION_START(Message_Callback_processing);
70  // Allocate a node
71  ADI3DToFImageStitchingInputInfo* image_stitch_input_info =
73 
74  camera_yaw_min_ = 5.0f;
75  camera_yaw_max_ = -5.0f;
76 
77  // Call respective callbacks with the id.
78  irImageCallback(ir_image_cam1, 0, image_stitch_input_info);
79  depthImageCallback(depth_image_cam1, 0, image_stitch_input_info);
80 
81  irImageCallback(ir_image_cam2, 1, image_stitch_input_info);
82  depthImageCallback(depth_image_cam2, 1, image_stitch_input_info);
83 
85  {
86  if(tf_recvd_[0] && tf_recvd_[1])
87  {
88  //Recenter the point cloud and update projection parameters and output size
89  AutoscaleStitching(image_stitch_input_info);
90  autoscaling_flag_ = true;
91  }
92  }
93 
94  // Add new node to the queue
95  addInputNodeToQueue<ADI3DToFImageStitchingInputInfo>(image_stitch_input_info);
96  PROFILE_FUNCTION_END(Message_Callback_processing);
97 }
98 
110 void ADI3DToFImageStitching::sync3CamerasDepthIRImageCallback(const sensor_msgs::ImageConstPtr& depth_image_cam1,
111  const sensor_msgs::ImageConstPtr& ir_image_cam1,
112  const sensor_msgs::ImageConstPtr& depth_image_cam2,
113  const sensor_msgs::ImageConstPtr& ir_image_cam2,
114  const sensor_msgs::ImageConstPtr& depth_image_cam3,
115  const sensor_msgs::ImageConstPtr& ir_image_cam3)
116 {
117  PROFILE_FUNCTION_START(Message_Callback_processing);
118  // Allocate a node
119  ADI3DToFImageStitchingInputInfo* image_stitch_input_info =
121 
122  camera_yaw_min_ = 5.0;
123  camera_yaw_max_ = -5.0;
124 
125 #ifdef ENABLE_OPENMP_OPTIMIZATION
126 #pragma omp parallel sections
127  {
128 #pragma omp section
129  {
130  irImageCallback(ir_image_cam1, 0, image_stitch_input_info);
131  depthImageCallback(depth_image_cam1, 0, image_stitch_input_info);
132  }
133 
134 #pragma omp section
135  {
136  irImageCallback(ir_image_cam2, 1, image_stitch_input_info);
137  depthImageCallback(depth_image_cam2, 1, image_stitch_input_info);
138  }
139 
140 #pragma omp section
141  {
142  irImageCallback(ir_image_cam3, 2, image_stitch_input_info);
143  depthImageCallback(depth_image_cam3, 2, image_stitch_input_info);
144  }
145  }
146 #else
147  // Call respective callbacks with the id.
148  irImageCallback(ir_image_cam1, 0, image_stitch_input_info);
149  depthImageCallback(depth_image_cam1, 0, image_stitch_input_info);
150 
151  irImageCallback(ir_image_cam2, 1, image_stitch_input_info);
152  depthImageCallback(depth_image_cam2, 1, image_stitch_input_info);
153 
154  irImageCallback(ir_image_cam3, 2, image_stitch_input_info);
155  depthImageCallback(depth_image_cam3, 2, image_stitch_input_info);
156 
157 #endif
158 
160  {
161  if(tf_recvd_[0] && tf_recvd_[1] && tf_recvd_[2])
162  {
163  //Recenter the point cloud and update projection parameters and output size
164  AutoscaleStitching(image_stitch_input_info);
165  autoscaling_flag_ = true;
166  }
167  }
168 
169  // Add new node to the queue
170  addInputNodeToQueue<ADI3DToFImageStitchingInputInfo>(image_stitch_input_info);
171  PROFILE_FUNCTION_END(Message_Callback_processing);
172 }
173 
188  const sensor_msgs::ImageConstPtr& depth_image_cam1, const sensor_msgs::ImageConstPtr& ir_image_cam1,
189  const sensor_msgs::ImageConstPtr& depth_image_cam2, const sensor_msgs::ImageConstPtr& ir_image_cam2,
190  const sensor_msgs::ImageConstPtr& depth_image_cam3, const sensor_msgs::ImageConstPtr& ir_image_cam3,
191  const sensor_msgs::ImageConstPtr& depth_image_cam4, const sensor_msgs::ImageConstPtr& ir_image_cam4)
192 {
193  PROFILE_FUNCTION_START(Message_Callback_processing);
194  // Allocate a node
195  ADI3DToFImageStitchingInputInfo* image_stitch_input_info =
197 
198  camera_yaw_min_ = 5.0;
199  camera_yaw_max_ = -5.0;
200 
201 #ifdef ENABLE_OPENMP_OPTIMIZATION
202 #pragma omp parallel sections
203  {
204 #pragma omp section
205  {
206  irImageCallback(ir_image_cam1, 0, image_stitch_input_info);
207  depthImageCallback(depth_image_cam1, 0, image_stitch_input_info);
208  }
209 
210 #pragma omp section
211  {
212  irImageCallback(ir_image_cam2, 1, image_stitch_input_info);
213  depthImageCallback(depth_image_cam2, 1, image_stitch_input_info);
214  }
215 
216 #pragma omp section
217  {
218  irImageCallback(ir_image_cam3, 2, image_stitch_input_info);
219  depthImageCallback(depth_image_cam3, 2, image_stitch_input_info);
220  }
221 
222 #pragma omp section
223  {
224  irImageCallback(ir_image_cam4, 3, image_stitch_input_info);
225  depthImageCallback(depth_image_cam4, 3, image_stitch_input_info);
226  }
227  }
228 #else
229  // Call respective callbacks with the id.
230  irImageCallback(ir_image_cam1, 0, image_stitch_input_info);
231  depthImageCallback(depth_image_cam1, 0, image_stitch_input_info);
232 
233  irImageCallback(ir_image_cam2, 1, image_stitch_input_info);
234  depthImageCallback(depth_image_cam2, 1, image_stitch_input_info);
235 
236  irImageCallback(ir_image_cam3, 2, image_stitch_input_info);
237  depthImageCallback(depth_image_cam3, 2, image_stitch_input_info);
238 
239  irImageCallback(ir_image_cam4, 3, image_stitch_input_info);
240  depthImageCallback(depth_image_cam4, 3, image_stitch_input_info);
241 
242 #endif
243 
245  {
246  if(tf_recvd_[0] && tf_recvd_[1] && tf_recvd_[2] && tf_recvd_[3])
247  {
248  //Recenter the point cloud and update projection parameters and output size
249  AutoscaleStitching(image_stitch_input_info);
250  autoscaling_flag_ = true;
251  }
252  }
253 
254  // Add new node to the queue
255  addInputNodeToQueue<ADI3DToFImageStitchingInputInfo>(image_stitch_input_info);
256  PROFILE_FUNCTION_END(Message_Callback_processing);
257 }
258 
266 void ADI3DToFImageStitching::sync2CamerasCamInfoCallback(const sensor_msgs::CameraInfoConstPtr& CameraInfo_cam1,
267  const sensor_msgs::CameraInfoConstPtr& CameraInfo_cam2)
268 {
269  camInfoCallback(CameraInfo_cam1, 0);
270  camInfoCallback(CameraInfo_cam2, 1);
271 }
272 
281 void ADI3DToFImageStitching::sync3CamerasCamInfoCallback(const sensor_msgs::CameraInfoConstPtr& CameraInfo_cam1,
282  const sensor_msgs::CameraInfoConstPtr& CameraInfo_cam2,
283  const sensor_msgs::CameraInfoConstPtr& CameraInfo_cam3)
284 {
285  // Call respective callbacks with the id.
286  camInfoCallback(CameraInfo_cam1, 0);
287  camInfoCallback(CameraInfo_cam2, 1);
288  camInfoCallback(CameraInfo_cam3, 2);
289 }
290 
300 void ADI3DToFImageStitching::sync4CamerasCamInfoCallback(const sensor_msgs::CameraInfoConstPtr& CameraInfo_cam1,
301  const sensor_msgs::CameraInfoConstPtr& CameraInfo_cam2,
302  const sensor_msgs::CameraInfoConstPtr& CameraInfo_cam3,
303  const sensor_msgs::CameraInfoConstPtr& CameraInfo_cam4)
304 {
305  // Call respective callbacks with the id.
306  camInfoCallback(CameraInfo_cam1, 0);
307  camInfoCallback(CameraInfo_cam2, 1);
308  camInfoCallback(CameraInfo_cam3, 2);
309  camInfoCallback(CameraInfo_cam4, 3);
310 }
311 
319 void ADI3DToFImageStitching::camInfoCallback(const sensor_msgs::CameraInfoConstPtr& cam_info, int cam_id)
320 {
321  if (!camera_parameters_updated_[cam_id])
322  {
323  CameraIntrinsics cam_intrinsics;
324  populateCameraInstrinsics(cam_intrinsics);
325  // Save
326  sensor_image_width_ = cam_info->width;
327  sensor_image_height_ = cam_info->height;
328  if ((sensor_image_width_ != 512) || (sensor_image_height_ != 512))
329  {
330  return;
331  }
332 
333  cam_intrinsics.camera_matrix[0] = cam_info->K[0];
334  cam_intrinsics.camera_matrix[1] = 0.0f;
335  cam_intrinsics.camera_matrix[2] = cam_info->K[2];
336  cam_intrinsics.camera_matrix[3] = 0.0f;
337  cam_intrinsics.camera_matrix[4] = cam_info->K[4];
338  cam_intrinsics.camera_matrix[5] = cam_info->K[5];
339  cam_intrinsics.camera_matrix[6] = 0.0f;
340  cam_intrinsics.camera_matrix[7] = 0.0f;
341  cam_intrinsics.camera_matrix[8] = 1.0f;
342 
343  for (int i = 0; i < 8; i++)
344  {
345  cam_intrinsics.distortion_coeffs[i] = cam_info->D[i];
346  }
347 
348  image_proc_utils_[cam_id]->generateRangeTo3DLUT(&cam_intrinsics);
349 
350 #ifdef ENABLE_GPU_OPTIMIZATION
351  // Copy the LUT to GPU device
352  stitch_frames_core_GPU_->copyRange2XYZLUT(image_proc_utils_[cam_id]->getRangeToXYZLUT(), cam_id);
353 #else
354  stitch_frames_core_CPU_->copyRange2XYZLUT(image_proc_utils_[cam_id]->getRangeToXYZLUT(), cam_id);
355 #endif
356 
357  camera_parameters_updated_[cam_id] = true;
358  }
359 }
360 
369 void ADI3DToFImageStitching::depthImageCallback(const sensor_msgs::ImageConstPtr& depth_image, int cam_id,
370  ADI3DToFImageStitchingInputInfo* image_stitch_input_info)
371 {
372  if ((depth_image == nullptr))
373  {
374  return;
375  }
376  if (!camera_parameters_updated_[cam_id])
377  {
378  return;
379  }
380  if (image_stitch_input_info->getDepthFrame(cam_id) == nullptr)
381  {
382  return;
383  }
384  int image_width = depth_image->width;
385  int image_height = depth_image->height;
386  if ((image_width != 512) || (image_height != 512))
387  {
388  return;
389  }
390 
391 
392  memcpy(image_stitch_input_info->getDepthFrame(cam_id), &depth_image->data[0], image_width * image_height * 2);
393 
394  // Set frame timestamp
395  image_stitch_input_info->setDepthFrameTimestamp((ros::Time)depth_image->header.stamp, cam_id);
396 
397  // Store transform matrix(4x4)
398  // Transform to map
399  // Get the transform wrt to "map"
400  if (!tf_recvd_[cam_id])
401  {
402  if (!tf_buffer_[cam_id].canTransform("map", depth_image->header.frame_id, depth_image->header.stamp,
403  ros::Duration(30.0)))
404  {
405  return;
406  }
407  try
408  {
409  camera_map_transform_[cam_id] =
410  tf_buffer_[cam_id].lookupTransform("map", depth_image->header.frame_id, depth_image->header.stamp, ros::Duration(1.0f));
411  }
412  catch (tf2::TransformException& ex)
413  {
414  ROS_ERROR("Camera to Map TF2 Error: %s\n", ex.what());
415  return;
416  }
417 
418  Eigen::Matrix4f transform4x4 = tf2::transformToEigen(camera_map_transform_[cam_id].transform).matrix().cast<float>();
419 
420  float* transform_matrix = transform_matrix_[cam_id];
421 
422  tf2::Quaternion camera_map_qt(camera_map_transform_[cam_id].transform.rotation.x, camera_map_transform_[cam_id].transform.rotation.y,
423  camera_map_transform_[cam_id].transform.rotation.z, camera_map_transform_[cam_id].transform.rotation.w);
424  tf2::Matrix3x3 camera_map_rotation_matrix(camera_map_qt);
425 
426  double roll, pitch, yaw;
427  camera_map_rotation_matrix.getRPY(roll, pitch, yaw);
428  camera_yaw_[cam_id]=yaw;
429  if(yaw < camera_yaw_min_)
430  camera_yaw_min_ = yaw;
431  if(yaw > camera_yaw_max_)
432  camera_yaw_max_ = yaw;
433 
434  //Create transformation matrix
435  for (int r = 0; r < 4; r++)
436  {
437  for (int c = 0; c < 4; c++)
438  {
439  *transform_matrix++ = transform4x4(r, c);
440  }
441  }
442  memcpy(image_stitch_input_info->getTransformMatrix(cam_id), &transform_matrix_[cam_id], 4 * 4 * sizeof(float));
443  //set flag after updating tf
444  tf_recvd_[cam_id] = true;
445  }
446  else
447  {
448  //Copying existing transformation data
449  memcpy(image_stitch_input_info->getTransformMatrix(cam_id), &transform_matrix_[cam_id], 4 * 4 * sizeof(float));
450  }
451 
452  // Set flag
453  depth_image_recvd_[cam_id] = true;
454 }
455 
464 void ADI3DToFImageStitching::irImageCallback(const sensor_msgs::ImageConstPtr& ir_image, int cam_id,
465  ADI3DToFImageStitchingInputInfo* image_stitch_input_info)
466 {
467  if ((ir_image == nullptr))
468  {
469  return;
470  }
471  if (!camera_parameters_updated_[cam_id])
472  {
473  return;
474  }
475  sensor_image_width_ = ir_image->width;
476  sensor_image_height_ = ir_image->height;
477  if ((sensor_image_width_ != 512) || (sensor_image_height_ != 512))
478  {
479  return;
480  }
481  if (image_stitch_input_info->getIRFrame(cam_id) != nullptr)
482  {
483  // copy
484  memcpy(image_stitch_input_info->getIRFrame(cam_id), &ir_image->data[0],
486 
487  // Set frame timestamp
488  image_stitch_input_info->setIRFrameTimestamp((ros::Time)ir_image->header.stamp, cam_id);
489 
490  // Set flag
491  ir_image_recvd_[cam_id] = true;
492  }
493 }
494 
495 template <typename T>
497 {
498  // Add it to the queue
499  input_thread_mtx_.lock();
500  int queue_size = input_node_queue_.size();
501  input_thread_mtx_.unlock();
502  if (queue_size <= (input_queue_length_ - 1))
503  {
504  input_thread_mtx_.lock();
505  input_node_queue_.push(new_frame);
506  input_thread_mtx_.unlock();
507  }
508  else
509  {
510  std::cout << "Overwrite buffer" << std::endl;
511  // If the Queue is full, then overwrite the last buffer with the latest frame
512  input_thread_mtx_.lock();
513  T* last_node = (T*)input_node_queue_.back();
514  input_thread_mtx_.unlock();
515  last_node = new_frame;
516  delete new_frame;
517  }
518 }
ADI3DToFImageStitching::input_node_queue_
std::queue< ADI3DToFImageStitchingInputInfo * > input_node_queue_
Definition: adi_3dtof_image_stitching.h:488
ADI3DToFImageStitching::tf_recvd_
bool tf_recvd_[MAX_NUM_DEVICES]
Definition: adi_3dtof_image_stitching.h:450
ADI3DToFImageStitchingInputInfo::setIRFrameTimestamp
void setIRFrameTimestamp(ros::Time timeIR, int cam_id)
Definition: adi_3dtof_image_stitching_input_info.h:117
sensor_msgs::image_encodings
ADI3DToFImageStitching::sync4CamerasCamInfoCallback
void sync4CamerasCamInfoCallback(const sensor_msgs::CameraInfoConstPtr &CameraInfo_cam1, const sensor_msgs::CameraInfoConstPtr &CameraInfo_cam2, const sensor_msgs::CameraInfoConstPtr &CameraInfo_cam3, const sensor_msgs::CameraInfoConstPtr &CameraInfo_cam4)
Call back for synchronised topics(CameraInfo) for 4 camera configuration.
Definition: callback_impl.cpp:300
ADI3DToFImageStitching::AutoscaleStitching
void AutoscaleStitching(ADI3DToFImageStitchingInputInfo *image_stitch_input_info)
Calculates Yaw correction and updates output size.
Definition: callback_impl.cpp:24
compression_common.h
ADI3DToFImageStitchingInputInfo::getIRFrame
unsigned short * getIRFrame(int cam_id) const
Definition: adi_3dtof_image_stitching_input_info.h:97
ADI3DToFImageStitching::depthImageCallback
void depthImageCallback(const sensor_msgs::ImageConstPtr &depth_image, int cam_id, ADI3DToFImageStitchingInputInfo *image_stitch_input_info)
Low-level callback for depth image.
Definition: callback_impl.cpp:369
ADI3DToFImageStitching::out_image_height_
int out_image_height_
Definition: adi_3dtof_image_stitching.h:108
ADI3DToFImageStitching::input_queue_length_
int input_queue_length_
Definition: adi_3dtof_image_stitching.h:478
tf2_eigen.h
ADI3DToFImageStitching::sensor_image_width_
int sensor_image_width_
Definition: adi_3dtof_image_stitching.h:429
module_profile.h
ADI3DToFImageStitchingInputInfo::getTransformMatrix
float * getTransformMatrix(int cam_id)
Definition: adi_3dtof_image_stitching_input_info.h:122
ADI3DToFImageStitching::horizontal_fov_sensor_in_degrees_
float horizontal_fov_sensor_in_degrees_
Definition: adi_3dtof_image_stitching.h:107
ros.h
ADI3DToFImageStitching::sensor_image_height_
int sensor_image_height_
Definition: adi_3dtof_image_stitching.h:430
ADI3DToFImageStitching::camera_map_transform_
geometry_msgs::TransformStamped camera_map_transform_[MAX_NUM_DEVICES]
Definition: adi_3dtof_image_stitching.h:453
ADI3DToFImageStitchingInputInfo::getDepthFrame
unsigned short * getDepthFrame(int cam_id) const
Definition: adi_3dtof_image_stitching_input_info.h:92
CameraIntrinsics::camera_matrix
float camera_matrix[9]
Camera matrix = [fx, 0, cx, 0, fy, cy, 0, 0, 1] fx, fy : Camera focal lengths (pixels) cx,...
Definition: adi_camera.h:27
PROFILE_FUNCTION_END
#define PROFILE_FUNCTION_END(ID)
Definition: module_profile.h:25
ADI3DToFImageStitching::output_sensor_
IOutputSensor * output_sensor_
Definition: adi_3dtof_image_stitching.h:428
f
f
ADI3DToFImageStitching::output_file_name_
std::string output_file_name_
Definition: adi_3dtof_image_stitching.h:438
tf2::Matrix3x3::getRPY
void getRPY(tf2Scalar &roll, tf2Scalar &pitch, tf2Scalar &yaw, unsigned int solution_number=1) const
ADI3DToFImageStitching::sync2CamerasCamInfoCallback
void sync2CamerasCamInfoCallback(const sensor_msgs::CameraInfoConstPtr &CameraInfo_cam1, const sensor_msgs::CameraInfoConstPtr &CameraInfo_cam2)
Call back for synchronised topics(CameraInfo) for 2 camera configuration.
Definition: callback_impl.cpp:266
ADI3DToFImageStitching::sync2CamerasDepthIRImageCallback
void sync2CamerasDepthIRImageCallback(const sensor_msgs::ImageConstPtr &depth_image_cam1, const sensor_msgs::ImageConstPtr &ir_image_cam1, const sensor_msgs::ImageConstPtr &depth_image_cam2, const sensor_msgs::ImageConstPtr &ir_image_cam2)
Call back for synchronised topics(depth and IR image pair) for 2 camera configuration.
Definition: callback_impl.cpp:64
ADI3DToFImageStitching::camInfoCallback
void camInfoCallback(const sensor_msgs::CameraInfoConstPtr &cam_info, int cam_id)
Low-level callback for Com-Info the ID would indicate the source camera.
Definition: callback_impl.cpp:319
ADI3DToFImageStitching::sync3CamerasCamInfoCallback
void sync3CamerasCamInfoCallback(const sensor_msgs::CameraInfoConstPtr &CameraInfo_cam1, const sensor_msgs::CameraInfoConstPtr &CameraInfo_cam2, const sensor_msgs::CameraInfoConstPtr &CameraInfo_cam3)
Call back for synchronised topics(CameraInfo) for 3 camera configuration.
Definition: callback_impl.cpp:281
ADI3DToFImageStitching::image_proc_utils_
ImageProcUtils * image_proc_utils_[MAX_NUM_DEVICES]
Definition: adi_3dtof_image_stitching.h:435
ADI3DToFImageStitching::camera_yaw_min_
float camera_yaw_min_
Definition: adi_3dtof_image_stitching.h:454
subscriber_filter.h
ADI3DToFImageStitching::tf_buffer_
tf2_ros::Buffer tf_buffer_[MAX_NUM_DEVICES]
Definition: adi_3dtof_image_stitching.h:446
IOutputSensor::close
virtual void close()=0
ADI3DToFImageStitching::depth_image_recvd_
bool depth_image_recvd_[MAX_NUM_DEVICES]
Definition: adi_3dtof_image_stitching.h:449
IOutputSensor::open
virtual void open(std::string input_file_name, int image_width, int image_height)=0
ADI3DToFImageStitching::out_image_width_
int out_image_width_
Definition: adi_3dtof_image_stitching.h:109
ADI3DToFImageStitchingInputInfo
ENABLE_GPU_OPTIMIZATION.
Definition: adi_3dtof_image_stitching_input_info.h:20
tf2::transformToEigen
Eigen::Isometry3d transformToEigen(const geometry_msgs::Transform &t)
StitchFramesCoreCPU::copyRange2XYZLUT
void copyRange2XYZLUT(float *range_2_xyz_lut, int cam_id)
Function to copy range data to XYZ lut.
Definition: stitch_frames_core_cpu.cpp:395
PROFILE_FUNCTION_START
#define PROFILE_FUNCTION_START(ID)
Definition: module_profile.h:24
ADI3DToFImageStitching::sync4CamerasDepthIRImageCallback
void sync4CamerasDepthIRImageCallback(const sensor_msgs::ImageConstPtr &depth_image_cam1, const sensor_msgs::ImageConstPtr &ir_image_cam1, const sensor_msgs::ImageConstPtr &depth_image_cam2, const sensor_msgs::ImageConstPtr &ir_image_cam2, const sensor_msgs::ImageConstPtr &depth_image_cam3, const sensor_msgs::ImageConstPtr &ir_image_cam3, const sensor_msgs::ImageConstPtr &depth_image_cam4, const sensor_msgs::ImageConstPtr &ir_image_cam4)
Call back for synchronised topics(depth and IR image pair) for 4 camera configuration.
Definition: callback_impl.cpp:187
ADI3DToFImageStitching::stitch_frames_core_CPU_
StitchFramesCoreCPU * stitch_frames_core_CPU_
Definition: adi_3dtof_image_stitching.h:493
StitchFramesCoreCPU::update_parameters
void update_parameters(int out_image_width, int out_image_height, float horizontal_fov_in_degrees, float yaw_correction_in_radians)
Updating the image stitching parameters.
Definition: stitch_frames_core_cpu.cpp:351
ADI3DToFImageStitching::camera_yaw_max_
float camera_yaw_max_
Definition: adi_3dtof_image_stitching.h:455
ADI3DToFImageStitching::enable_autoscaling_
bool enable_autoscaling_
Definition: adi_3dtof_image_stitching.h:439
ros::Time
ADI3DToFImageStitching::input_thread_mtx_
boost::mutex input_thread_mtx_
Definition: adi_3dtof_image_stitching.h:484
ADI3DToFImageStitching::camera_parameters_updated_
bool camera_parameters_updated_[MAX_NUM_DEVICES]
Definition: adi_3dtof_image_stitching.h:105
ADI3DToFImageStitching::camera_yaw_correction_
float camera_yaw_correction_
Definition: adi_3dtof_image_stitching.h:456
ADI3DToFImageStitching::addInputNodeToQueue
void addInputNodeToQueue(T *image_stitch_input_info)
Definition: callback_impl.cpp:496
CameraIntrinsics
Intrinsic parameters of the camera.
Definition: adi_camera.h:15
ROS_ERROR
#define ROS_ERROR(...)
ADI3DToFImageStitching::sync3CamerasDepthIRImageCallback
void sync3CamerasDepthIRImageCallback(const sensor_msgs::ImageConstPtr &depth_image_cam1, const sensor_msgs::ImageConstPtr &ir_image_cam1, const sensor_msgs::ImageConstPtr &depth_image_cam2, const sensor_msgs::ImageConstPtr &ir_image_cam2, const sensor_msgs::ImageConstPtr &depth_image_cam3, const sensor_msgs::ImageConstPtr &ir_image_cam3)
Call back for synchronised topics(depth and IR image pair) for 3 camera configuration.
Definition: callback_impl.cpp:110
ADI3DToFImageStitching::transform_matrix_
float transform_matrix_[MAX_NUM_DEVICES][16]
Definition: adi_3dtof_image_stitching.h:451
ADI3DToFImageStitching::ir_image_recvd_
bool ir_image_recvd_[MAX_NUM_DEVICES]
Definition: adi_3dtof_image_stitching.h:448
ADI3DToFImageStitching::camera_yaw_
float camera_yaw_[MAX_NUM_DEVICES]
Definition: adi_3dtof_image_stitching.h:452
tf2::Quaternion
ADI3DToFImageStitching::stitched_pc_pcl_
pcl::PointCloud< pcl::PointXYZ >::Ptr stitched_pc_pcl_
Definition: adi_3dtof_image_stitching.h:472
tf2::Matrix3x3
tf2::TransformException
ADI3DToFImageStitching::irImageCallback
void irImageCallback(const sensor_msgs::ImageConstPtr &ir_image, int cam_id, ADI3DToFImageStitchingInputInfo *image_stitch_input_info)
Low-level callback for IR image.
Definition: callback_impl.cpp:464
CameraIntrinsics::distortion_coeffs
float distortion_coeffs[8]
Distortion vector = [k1, k2, p1, p2, k3, k4, k5, k6] k1, k2, k3, k4, k5, k6 : Camera radial distortio...
Definition: adi_camera.h:35
ros::Duration
ADI3DToFImageStitching::populateCameraInstrinsics
void populateCameraInstrinsics(CameraIntrinsics &camera_intrinsics)
Populate camera Intrinsic data.
Definition: adi_3dtof_image_stitching.h:560
adi_3dtof_image_stitching.h
ADI3DToFImageStitching::autoscaling_flag_
bool autoscaling_flag_
Definition: adi_3dtof_image_stitching.h:440
ImageProcUtils::generateRangeTo3DLUT
void generateRangeTo3DLUT(CameraIntrinsics *camera_intrinsics)
Generates a Range to 3D projection Look up table, which can be used to compute point-cloud from the d...
Definition: image_proc_utils.h:56
tf2_ros::Buffer::lookupTransform
virtual geometry_msgs::TransformStamped lookupTransform(const std::string &target_frame, const ros::Time &target_time, const std::string &source_frame, const ros::Time &source_time, const std::string &fixed_frame, const ros::Duration timeout) const
ADI3DToFImageStitchingInputInfo::setDepthFrameTimestamp
void setDepthFrameTimestamp(ros::Time timeDepth, int cam_id)
Definition: adi_3dtof_image_stitching_input_info.h:112


adi_3dtof_image_stitching
Author(s):
autogenerated on Fri Mar 21 2025 02:27:20