pfsdp_2300.cpp
Go to the documentation of this file.
2 
4 
5 PFSDP_2300::PFSDP_2300(std::shared_ptr<HandleInfo> info, std::shared_ptr<ScanConfig> config,
6  std::shared_ptr<ScanParameters> params)
7  : PFSDPBase(info, config, params)
8 {
9 }
10 
12 {
13  return get_parameter_str("product");
14 }
15 
16 std::string PFSDP_2300::get_part()
17 {
18  return get_parameter_str("product");
19 }
20 
22 {
23  auto resp = get_parameter("angular_fov", "radial_range_min", "radial_range_max", "measure_start_angle",
24  "measure_stop_angle", "scan_frequency");
25  params_->angular_fov = parser_utils::to_float(resp["angular_fov"]) * M_PI / 180.0;
26  params_->radial_range_max = parser_utils::to_float(resp["radial_range_max"]);
27  params_->radial_range_min = parser_utils::to_float(resp["radial_range_min"]);
28 
29  auto start_stop = get_angle_start_stop(config_->start_angle);
30  params_->angle_min = start_stop.first;
31  params_->angle_max = start_stop.second;
32  get_layers_enabled(params_->layers_enabled, params_->h_enabled_layer);
33  params_->scan_freq = parser_utils::to_float(resp["scan_frequency"]);
34 }
35 
37 {
38  param_server_R2300_ = std::make_unique<dynamic_reconfigure::Server<pf_driver::PFDriverR2300Config>>();
39  param_server_R2300_->setCallback(
40  boost::bind(&PFSDP_2300::reconfig_callback, this, boost::placeholders::_1, boost::placeholders::_2));
41 }
42 
43 void PFSDP_2300::get_layers_enabled(uint16_t& enabled, uint16_t& highest)
44 {
45  enabled = 0;
46  std::string layers = get_parameter_str("layer_enable");
47  std::vector<std::string> vals = parser_utils::split(layers);
48  std::vector<bool> enabled_layers(vals.size(), false);
49  for (int i = 0; i < vals.size(); i++)
50  {
51  if (vals[i].compare("on") == 0)
52  {
53  enabled += pow(2, i);
54  highest = i;
55  }
56  }
57 }
58 
59 std::pair<float, float> PFSDP_2300::get_angle_start_stop(int start_angle)
60 {
61  float measure_start_angle = get_parameter_float("measure_start_angle") / 10000.0 * M_PI / 180.0;
62  float measure_stop_angle = get_parameter_float("measure_stop_angle") / 10000.0 * M_PI / 180.0;
63  start_angle = start_angle * M_PI / 180.0;
64 
65  // float min = (measure_start_angle > start_angle) ? measure_start_angle : start_angle;
66  // float max = measure_stop_angle;
67  return std::pair<float, float>(measure_start_angle, measure_stop_angle);
68 }
69 
71 {
72  return std::string("start_angle");
73 }
74 
75 void PFSDP_2300::reconfig_callback(pf_driver::PFDriverR2300Config& config, uint32_t level)
76 {
77  if (level == 1)
78  {
79  set_parameter({ KV("ip_mode", config.ip_mode) });
80  }
81  else if (level == 2)
82  {
83  set_parameter({ KV("ip_address", config.ip_address) });
84  }
85  else if (level == 3)
86  {
87  set_parameter({ KV("subnet_mask", config.subnet_mask) });
88  }
89  else if (level == 4)
90  {
91  set_parameter({ KV("gateway", config.gateway) });
92  }
93  else if (level == 5)
94  {
95  set_parameter({ KV("user_tag", config.user_tag) });
96  }
97  else if (level == 6)
98  {
99  set_parameter({ KV("layer_enable", config.layer_enable) });
100  }
101  else if (level == 7)
102  {
103  set_parameter({ KV("scan_frequency", config.scan_frequency) });
104  }
105  else if (level == 8)
106  {
107  set_parameter({ KV("scan_direction", config.scan_direction) });
108  }
109  else if (level == 9)
110  {
111  set_parameter({ KV("measure_start_angle", config.measure_start_angle) });
112  }
113  else if (level == 10)
114  {
115  set_parameter({ KV("measure_stop_angle", config.measure_stop_angle) });
116  }
117  else if (level == 11)
118  {
119  set_parameter({ KV("locator_indication", config.locator_indication) });
120  }
121  else if (level == 12)
122  {
123  set_parameter({ KV("pilot_laser", config.pilot_laser) });
124  }
125  else if (level == 13)
126  {
127  set_parameter({ KV("pilot_start_angle", config.pilot_start_angle) });
128  }
129  else if (level == 14)
130  {
131  set_parameter({ KV("pilot_stop_angle", config.pilot_stop_angle) });
132  }
133  else if (level == 15)
134  {
135  set_parameter({ KV("operating_mode", config.operating_mode) });
136  }
137  else if (level == 18)
138  {
139  config_->packet_type = config.packet_type;
140  }
141  else if (level == 19)
142  {
143  // currently always none for R2300
144  // config_->packet_crc = config.packet_crc;
145  }
146  else if (level == 20)
147  {
148  config_->watchdog = (config.watchdog == "on") ? true : false;
149  }
150  else if (level == 21)
151  {
152  config_->watchdogtimeout = config.watchdogtimeout;
153  }
154  else if (level == 22)
155  {
156  config_->start_angle = config.start_angle;
157  }
158  else if (level == 23)
159  {
160  config_->max_num_points_scan = config.max_num_points_scan;
161  }
162  else if (level == 24)
163  {
164  config_->skip_scans = config.skip_scans;
165  }
167 }
float to_float(const std::string &s)
std::unique_ptr< dynamic_reconfigure::Server< pf_driver::PFDriverR2300Config > > param_server_R2300_
Definition: pfsdp_2300.h:31
const std::vector< std::string > split(const std::string &str, const char delim=';')
Definition: parser_utils.cpp:6
void reconfig_callback(pf_driver::PFDriverR2300Config &config, uint32_t level)
Definition: pfsdp_2300.cpp:75
void setup_param_server()
Definition: pfsdp_2300.cpp:36
std::string get_parameter_str(const std::string &param)
Definition: pfsdp_base.cpp:168
void get_layers_enabled(uint16_t &enabled, uint16_t &highest)
Definition: pfsdp_2300.cpp:43
virtual std::pair< float, float > get_angle_start_stop(int start_angle)
Definition: pfsdp_2300.cpp:59
virtual std::string get_start_angle_str()
Definition: pfsdp_2300.cpp:70
virtual std::string get_product()
Definition: pfsdp_2300.cpp:11
std::map< std::string, std::string > get_parameter(const Ts &... ts)
Definition: pfsdp_base.h:83
PFSDP_2300(std::shared_ptr< HandleInfo > info, std::shared_ptr< ScanConfig > config, std::shared_ptr< ScanParameters > params)
Definition: pfsdp_2300.cpp:5
bool set_parameter(const std::initializer_list< param_type > params)
Definition: pfsdp_base.h:77
Definition: kv.h:9
INLINE Rall1d< T, V, S > pow(const Rall1d< T, V, S > &arg, double m)
virtual void get_scan_parameters()
Definition: pfsdp_2300.cpp:21
bool update_scanoutput_config()
Definition: pfsdp_base.cpp:243
float get_parameter_float(const std::string &param)
Definition: pfsdp_base.cpp:158
std::shared_ptr< ScanConfig > config_
Definition: pfsdp_base.h:57
std::shared_ptr< ScanParameters > params_
Definition: pfsdp_base.h:58
virtual std::string get_part()
Definition: pfsdp_2300.cpp:16


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