capture.h
Go to the documentation of this file.
1 #ifndef CAPTURE_HEADER
2 #define CAPTURE_HEADER
3 
4 #include "std_include.h"
5 #include "serialization.h"
6 #include "camera.h"
7 #include "spinnaker_configure.h"
8 #include <boost/archive/binary_oarchive.hpp>
9 #include <boost/filesystem.hpp>
10 //ROS
11 #include "std_msgs/Float64.h"
12 #include "std_msgs/String.h"
13 //Dynamic reconfigure
14 #include <dynamic_reconfigure/server.h>
15 #include <spinnaker_sdk_camera_driver/spinnaker_camConfig.h>
16 
17 #include "spinnaker_sdk_camera_driver/SpinnakerImageNames.h"
18 
19 #include <sstream>
21 // nodelets
22 #include <nodelet/nodelet.h>
23 #include <nodelet/loader.h>
25 
26 #ifdef trigger_msgs_FOUND
27  #include <trigger_msgs/sync_trigger.h>
28 #endif
29 
30 using namespace Spinnaker;
31 using namespace Spinnaker::GenApi;
32 using namespace Spinnaker::GenICam;
33 using namespace cv;
34 using namespace std;
35 
36 namespace acquisition {
37 
38  class Capture : public nodelet::Nodelet {
39 
40  public:
41 
42  ~Capture();
43  Capture();
44  virtual void onInit();
45 
46  std::shared_ptr<boost::thread> pubThread_;
47 
48  void load_cameras();
49  void init_variables_register_to_ros();
50  void init_array();
51  void init_cameras(bool);
52  void start_acquisition();
53  void end_acquisition();
54  void deinit_cameras();
55  void acquire_mat_images(int);
56  void run();
57  void run_external_trig();
58  void run_soft_trig();
59  void run_mt();
60  void publish_to_ros(int, char**, float);
61 
62  void read_parameters();
63  std::string todays_date();
64 
65 
66  void write_queue_to_disk(queue<ImagePtr>*, int);
67  void acquire_images_to_queue(vector<queue<ImagePtr>>*);
68 
69  private:
70 
71  void set_frame_rate(CameraPtr, float);
72 
73  void create_cam_directories();
74  void save_mat_frames(int);
75  void save_binary_frames(int);
76  void get_mat_images();
77  void update_grid();
78  void export_to_ROS();
79  void dynamicReconfigureCallback(spinnaker_sdk_camera_driver::spinnaker_camConfig &config, uint32_t level);
80 
81  float mem_usage();
82 
83  SystemPtr system_;
84  CameraList camList_;
85  vector<acquisition::Camera> cams;
86  vector<string> cam_ids_;
87  vector<string> cam_names_;
89  unsigned int numCameras_;
90  vector<CameraPtr> pCams_;
91  vector<ImagePtr> pResultImages_;
92  vector<Mat> frames_;
93  vector<string> time_stamps_;
94  vector< vector<Mat> > mem_frames_;
95  vector<vector<double>> intrinsic_coeff_vec_;
96  vector<vector<double>> distortion_coeff_vec_;
97  vector<vector<double>> rect_coeff_vec_;
98  vector<vector<double>> proj_coeff_vec_;
99  vector<string> imageNames;
100  vector<bool> flip_horizontal_vec_;
101  vector<bool> flip_vertical_vec_;
102 
103  string path_;
104  string todays_date_;
105 
106  time_t time_now_;
107  double grab_time_, save_time_, toMat_time_, save_mat_time_, export_to_ROS_time_, achieved_time_;
108 
109  int nframes_;
110  float init_delay_;
112  float master_fps_;
113  int binning_;
114  bool color_;
115  string dump_img_;
116  string ext_;
118  float gain_;
121  // int decimation_;
122  string tf_prefix_;
123  int soft_framerate_; // Software (ROS) frame rate
124 
126  int CAM_; // active cam during live
129 
134  bool SAVE_;
135  bool SAVE_BIN_;
137  bool LIVE_;
140 // bool MEM_SAVE_;
147 
148  #ifdef trigger_msgs_FOUND
149  ros::Time latest_imu_trigger_time_;
150  uint32_t prev_imu_trigger_count_ = 0;
151  uint32_t latest_imu_trigger_count_;
152 
153  void assignTimeStampCallback(const trigger_msgs::sync_trigger::ConstPtr& msg);
154  struct SyncInfo_{
155  uint32_t latest_imu_trigger_count_;
156  ros::Time latest_imu_trigger_time_;
157  };
158  std::vector<std::queue<SyncInfo_>> sync_message_queue_vector_;
159  ros::Subscriber timeStamp_sub;
160  #endif
161 
162 
168 
169  // grid view related variables
171  Mat grid_;
172 
173  // ros variables
176  std::shared_ptr<image_transport::ImageTransport> it_;
177 
178  dynamic_reconfigure::Server<spinnaker_sdk_camera_driver::spinnaker_camConfig>* dynamicReCfgServer_;
179 
181  //vector<ros::Publisher> camera_image_pubs;
182  vector<image_transport::CameraPublisher> camera_image_pubs;
183  //vector<ros::Publisher> camera_info_pubs;
184 
185 
186  vector<sensor_msgs::ImagePtr> img_msgs;
187  vector<sensor_msgs::CameraInfoPtr> cam_info_msgs;
188  spinnaker_sdk_camera_driver::SpinnakerImageNames mesg;
189  boost::mutex queue_mutex_;
190  };
191 
192 }
193 
194 #endif
int region_of_interest_height_
Definition: capture.h:165
bool first_image_received
Definition: capture.h:120
vector< vector< double > > distortion_coeff_vec_
Definition: capture.h:96
vector< vector< Mat > > mem_frames_
Definition: capture.h:94
int region_of_interest_width_
Definition: capture.h:164
vector< string > cam_ids_
Definition: capture.h:86
std::shared_ptr< boost::thread > pubThread_
Definition: capture.h:46
vector< string > cam_names_
Definition: capture.h:87
CameraList camList_
Definition: capture.h:84
int region_of_interest_y_offset_
Definition: capture.h:167
bool SOFT_FRAME_RATE_CTRL_
Definition: capture.h:141
vector< vector< double > > intrinsic_coeff_vec_
Definition: capture.h:95
ros::NodeHandle nh_pvt_
Definition: capture.h:175
vector< bool > flip_vertical_vec_
Definition: capture.h:101
vector< string > time_stamps_
Definition: capture.h:93
dynamic_reconfigure::Server< spinnaker_sdk_camera_driver::spinnaker_camConfig > * dynamicReCfgServer_
Definition: capture.h:178
vector< bool > flip_horizontal_vec_
Definition: capture.h:100
vector< sensor_msgs::ImagePtr > img_msgs
Definition: capture.h:186
ros::NodeHandle nh_
Definition: capture.h:174
spinnaker_sdk_camera_driver::SpinnakerImageNames mesg
Definition: capture.h:188
vector< CameraPtr > pCams_
Definition: capture.h:90
SystemPtr system_
Definition: capture.h:83
std::shared_ptr< image_transport::ImageTransport > it_
Definition: capture.h:176
vector< vector< double > > rect_coeff_vec_
Definition: capture.h:97
boost::mutex queue_mutex_
Definition: capture.h:189
double target_grey_value_
Definition: capture.h:119
vector< sensor_msgs::CameraInfoPtr > cam_info_msgs
Definition: capture.h:187
bool region_of_interest_set_
Definition: capture.h:163
vector< acquisition::Camera > cams
Definition: capture.h:85
vector< ImagePtr > pResultImages_
Definition: capture.h:91
vector< string > imageNames
Definition: capture.h:99
vector< image_transport::CameraPublisher > camera_image_pubs
Definition: capture.h:182
unsigned int numCameras_
Definition: capture.h:89
bool MASTER_TIMESTAMP_FOR_ALL_
Definition: capture.h:132
void run(ClassLoader *loader)
int region_of_interest_x_offset_
Definition: capture.h:166
vector< Mat > frames_
Definition: capture.h:92
vector< vector< double > > proj_coeff_vec_
Definition: capture.h:98
uint64_t SPINNAKER_GET_NEXT_IMAGE_TIMEOUT_
Definition: capture.h:146
string master_cam_id_
Definition: capture.h:88
ros::Publisher acquisition_pub
Definition: capture.h:180


spinnaker_sdk_camera_driver
Author(s): Abhishek Bajpayee, Pushyami Kaveti, Vikrant Shah
autogenerated on Sun Feb 14 2021 03:34:42