ros_main.cpp
Go to the documentation of this file.
1 #include <memory>
2 #include <string>
3 #include <utility>
4 #include <ros/ros.h>
5 
7 
8 int main(int argc, char* argv[])
9 {
10  ros::init(argc, argv, "pf_driver");
11  ros::NodeHandle nh("~");
12 
13  std::string device;
14  nh.getParam("device", device);
15 
16  ros::NodeHandle dev_nh("~/" + device);
17 
18  std::string transport_str;
19  bool init_valid = true;
20  std::shared_ptr<HandleInfo> info = std::make_shared<HandleInfo>();
21  init_valid &= dev_nh.getParam("transport", transport_str);
22  // selecting TCP as default if not UDP
23  info->handle_type = transport_str == "udp" ? HandleInfo::HANDLE_TYPE_UDP : HandleInfo::HANDLE_TYPE_TCP;
24  init_valid &= dev_nh.getParam("scanner_ip", info->hostname);
25  dev_nh.param<std::string>("port", info->port, "0");
26 
27  if (!init_valid)
28  {
29  ROS_ERROR("Please provide the IP address and the port");
30  return 1;
31  }
32 
33  std::shared_ptr<ScanConfig> config = std::make_shared<ScanConfig>();
34  // other parameters can also be set in the same way
35  int max_num_points_scan = 0;
36  int watchdogtimeout = 0;
37  bool watchdog;
38  int num_layers = 0;
39  bool apply_correction;
40  dev_nh.getParam("start_angle", config->start_angle);
41  dev_nh.getParam("max_num_points_scan", max_num_points_scan);
42  dev_nh.getParam("packet_type", config->packet_type);
43  dev_nh.getParam("watchdogtimeout", watchdogtimeout);
44  dev_nh.getParam("watchdog", watchdog);
45  dev_nh.getParam("num_layers", num_layers);
46  dev_nh.param<bool>("apply_correction", apply_correction, false);
47 
48  config->max_num_points_scan = max_num_points_scan;
49  config->watchdogtimeout = watchdogtimeout;
50  config->watchdog = watchdog;
51 
52  std::string topic, frame_id;
53  dev_nh.getParam("scan_topic", topic);
54  dev_nh.getParam("frame_id", frame_id);
55 
56  // currently ScanParameters is not set through params
57  std::shared_ptr<ScanParameters> params = std::make_shared<ScanParameters>();
58  params->apply_correction = apply_correction;
59 
61  spinner.start();
62 
63  PFInterface pf_interface;
64 
65  std::shared_ptr<std::mutex> net_mtx_ = std::make_shared<std::mutex>();
66  std::shared_ptr<std::condition_variable> net_cv_ = std::make_shared<std::condition_variable>();
67  bool net_fail = false;
68 
69  bool retrying = false;
70 
71  while (ros::ok())
72  {
73  net_fail = false;
74  if (!pf_interface.init(info, config, params, topic, frame_id, num_layers))
75  {
76  ROS_ERROR("Unable to initialize device");
77  if (retrying)
78  {
79  std::this_thread::sleep_for(std::chrono::milliseconds(2000));
80  continue;
81  }
82  return -1;
83  }
84  if (!pf_interface.start_transmission(net_mtx_, net_cv_, net_fail))
85  {
86  ROS_ERROR("Unable to start scan");
87  return -1;
88  }
89  retrying = true;
90  {
91  // wait for condition variable
92  std::unique_lock<std::mutex> net_lock(*net_mtx_);
93  while (ros::ok() &&
94  !net_cv_->wait_for(net_lock, std::chrono::milliseconds(1000), [&net_fail] { return net_fail; }))
95  {
96  };
97  if (ros::ok())
98  {
99  ROS_ERROR("Network failure");
100  }
101  }
102  pf_interface.terminate();
103  }
104 
105  pf_interface.stop_transmission();
106  return 0;
107 }
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
config
#define ROS_ERROR(...)
void spinner()
void terminate()
bool start_transmission(std::shared_ptr< std::mutex > net_mtx, std::shared_ptr< std::condition_variable > net_cv, bool &net_fail)
bool param(const std::string &param_name, T &param_val, const T &default_val) const
bool getParam(const std::string &key, std::string &s) const
ROSCPP_DECL bool ok()
int main(int argc, char *argv[])
Definition: ros_main.cpp:8
bool init(std::shared_ptr< HandleInfo > info, std::shared_ptr< ScanConfig > config, std::shared_ptr< ScanParameters > params, const std::string &topic, const std::string &frame_id, const uint16_t num_layers)
static const int HANDLE_TYPE_TCP
Definition: handle_info.h:7
static const int HANDLE_TYPE_UDP
Definition: handle_info.h:8
void stop_transmission()


pf_driver
Author(s): Harsh Deshpande
autogenerated on Fri Feb 24 2023 03:59:35