sample_capture_2d.cpp
Go to the documentation of this file.
1 #include <zivid_camera/Settings2DAcquisitionConfig.h>
2 #include <zivid_camera/Capture2D.h>
3 #include <dynamic_reconfigure/Reconfigure.h>
4 #include <dynamic_reconfigure/client.h>
5 #include <sensor_msgs/Image.h>
6 #include <ros/ros.h>
7 
8 #define CHECK(cmd) \
9  do \
10  { \
11  if (!cmd) \
12  { \
13  throw std::runtime_error{ "\"" #cmd "\" failed!" }; \
14  } \
15  } while (false)
16 
17 namespace
18 {
19 const ros::Duration default_wait_duration{ 30 };
20 
21 void capture()
22 {
23  ROS_INFO("Calling capture_2d service");
24  zivid_camera::Capture2D capture_2d;
25  CHECK(ros::service::call("/zivid_camera/capture_2d", capture_2d));
26 }
27 
28 void on_image_color(const sensor_msgs::ImageConstPtr&)
29 {
30  ROS_INFO("2D color image received");
31  capture();
32 }
33 
34 } // namespace
35 
36 int main(int argc, char** argv)
37 {
38  ros::init(argc, argv, "sample_capture_2d");
40 
41  ROS_INFO("Starting sample_capture_2d.cpp");
42 
43  CHECK(ros::service::waitForService("/zivid_camera/capture_2d", default_wait_duration));
44 
45  ros::AsyncSpinner spinner(1);
46  spinner.start();
47 
48  auto image_color_sub = n.subscribe("/zivid_camera/color/image_color", 1, on_image_color);
49 
50  ROS_INFO("Configuring image settings");
51  dynamic_reconfigure::Client<zivid_camera::Settings2DAcquisitionConfig> acquisition_0_client("/zivid_camera/"
52  "settings_2d/"
53  "acquisition_0/");
54 
55  // To initialize the cfg object we need to load the default configuration from the server.
56  // The default values of settings depends on which Zivid camera model is connected.
57  zivid_camera::Settings2DAcquisitionConfig acquisition_0_config;
58  CHECK(acquisition_0_client.getDefaultConfiguration(acquisition_0_config, default_wait_duration));
59 
60  acquisition_0_config.enabled = true;
61  acquisition_0_config.aperture = 5.66;
62  acquisition_0_config.exposure_time = 10000;
63  acquisition_0_config.brightness = 1.0;
64  CHECK(acquisition_0_client.setConfiguration(acquisition_0_config));
65 
66  capture();
67 
69 
70  return 0;
71 }
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
int main(int argc, char **argv)
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)
#define ROS_INFO(...)
#define CHECK(cmd)
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