sample_capture.cpp
Go to the documentation of this file.
1 #include <zivid_camera/SettingsAcquisitionConfig.h>
2 #include <zivid_camera/SettingsConfig.h>
3 #include <zivid_camera/Capture.h>
4 #include <dynamic_reconfigure/Reconfigure.h>
5 #include <dynamic_reconfigure/client.h>
6 #include <sensor_msgs/PointCloud2.h>
7 #include <ros/ros.h>
8 
9 #define CHECK(cmd) \
10  do \
11  { \
12  if (!cmd) \
13  { \
14  throw std::runtime_error{ "\"" #cmd "\" failed!" }; \
15  } \
16  } while (false)
17 
18 namespace
19 {
20 const ros::Duration default_wait_duration{ 30 };
21 
22 void capture()
23 {
24  ROS_INFO("Calling capture service");
25  zivid_camera::Capture capture;
26  CHECK(ros::service::call("/zivid_camera/capture", capture));
27 }
28 
29 void on_points(const sensor_msgs::PointCloud2ConstPtr&)
30 {
31  ROS_INFO("PointCloud received");
32  capture();
33 }
34 
35 } // namespace
36 
37 int main(int argc, char** argv)
38 {
39  ros::init(argc, argv, "sample_capture_cpp");
41 
42  ROS_INFO("Starting sample_capture.cpp");
43 
44  CHECK(ros::service::waitForService("/zivid_camera/capture", default_wait_duration));
45 
46  ros::AsyncSpinner spinner(1);
47  spinner.start();
48 
49  auto points_sub = n.subscribe("/zivid_camera/points/xyzrgba", 1, on_points);
50 
51  dynamic_reconfigure::Client<zivid_camera::SettingsConfig> settings_client("/zivid_camera/"
52  "settings/");
53 
54  // To initialize the settings_config object we need to load the default configuration from the server.
55  // The default values of settings depends on which Zivid camera model is connected.
56  zivid_camera::SettingsConfig settings_config;
57  CHECK(settings_client.getDefaultConfiguration(settings_config, default_wait_duration));
58 
59  ROS_INFO("Enabling the reflection removal filter");
60  settings_config.processing_filters_reflection_removal_enabled = true;
61  CHECK(settings_client.setConfiguration(settings_config));
62 
63  dynamic_reconfigure::Client<zivid_camera::SettingsAcquisitionConfig> acquisition_0_client("/zivid_camera/settings/"
64  "acquisition_0/");
65 
66  // To initialize the acquisition_0_config object we need to load the default configuration from the server.
67  // The default values of settings depends on which Zivid camera model is connected.
68  zivid_camera::SettingsAcquisitionConfig acquisition_0_config;
69  CHECK(acquisition_0_client.getDefaultConfiguration(acquisition_0_config, default_wait_duration));
70 
71  ROS_INFO("Enabling and configuring the first acquisition");
72  acquisition_0_config.enabled = true;
73  acquisition_0_config.aperture = 5.66;
74  acquisition_0_config.exposure_time = 20000;
75  CHECK(acquisition_0_client.setConfiguration(acquisition_0_config));
76 
77  ROS_INFO("Calling capture");
78 
79  capture();
80 
82 
83  return 0;
84 }
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
#define CHECK(cmd)
bool call(const std::string &service_name, MReq &req, MRes &res)
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
int main(int argc, char **argv)
#define ROS_INFO(...)
ROSCPP_DECL void waitForShutdown()
ROSCPP_DECL bool waitForService(const std::string &service_name, int32_t timeout)


zivid_samples
Author(s):
autogenerated on Sat Apr 17 2021 02:51:09