@@ -17,7 +17,8 @@ VelodyneHwMonitorWrapper::VelodyneHwMonitorWrapper(
17
17
const std::shared_ptr<nebula::drivers::VelodyneHwInterface> & hw_interface,
18
18
std::shared_ptr<const nebula::drivers::VelodyneSensorConfiguration> & config)
19
19
: logger_(parent_node->get_logger ().get_child(" HwMonitor" )),
20
- diagnostics_updater_(parent_node),
20
+ diagnostics_updater_(
21
+ (parent_node->declare_parameter<bool >(" diagnostic_updater.use_fqn" , true ), parent_node)),
21
22
status_(Status::OK),
22
23
hw_interface_(hw_interface),
23
24
parent_node_(parent_node),
@@ -30,18 +31,19 @@ VelodyneHwMonitorWrapper::VelodyneHwMonitorWrapper(
30
31
std::cout << " Get model name and serial." << std::endl;
31
32
auto str = hw_interface_->get_snapshot ();
32
33
if (!str.has_value ()) return ;
33
- current_snapshot_time_. reset ( new rclcpp::Time (parent_node_-> now ()));
34
- current_snapshot_tree_ =
34
+
35
+ auto snapshot_tree =
35
36
std::make_shared<boost::property_tree::ptree>(hw_interface_->parse_json (str.value ()));
36
37
current_diag_tree_ =
37
- std::make_shared<boost::property_tree::ptree>(current_snapshot_tree_ ->get_child (" diag" ));
38
+ std::make_shared<boost::property_tree::ptree>(snapshot_tree ->get_child (" diag" ));
38
39
current_status_tree_ =
39
- std::make_shared<boost::property_tree::ptree>(current_snapshot_tree_->get_child (" status" ));
40
- current_snapshot_.reset (new std::string (str.value ()));
40
+ std::make_shared<boost::property_tree::ptree>(snapshot_tree->get_child (" status" ));
41
41
42
42
try {
43
- info_model_ = get_ptree_value (current_snapshot_tree_, mtx_snapshot_, key_info_model);
44
- info_serial_ = get_ptree_value (current_snapshot_tree_, mtx_snapshot_, key_info_serial);
43
+ // get_ptree_value requires a mutex but we are only accessing a local variable
44
+ std::mutex dummy_mtx;
45
+ info_model_ = get_ptree_value (snapshot_tree, dummy_mtx, key_info_model);
46
+ info_serial_ = get_ptree_value (snapshot_tree, dummy_mtx, key_info_serial);
45
47
RCLCPP_INFO_STREAM (logger_, " Model: " << info_model_);
46
48
RCLCPP_INFO_STREAM (logger_, " Serial: " << info_serial_);
47
49
} catch (boost::bad_lexical_cast & ex) {
@@ -62,10 +64,6 @@ void VelodyneHwMonitorWrapper::initialize_velodyne_diagnostics()
62
64
RCLCPP_INFO_STREAM (logger_, " Hardware ID: " << hardware_id);
63
65
64
66
if (show_advanced_diagnostics_) {
65
- diagnostics_updater_.add (
66
- " velodyne_snapshot-" + sensor_configuration_->frame_id , this ,
67
- &VelodyneHwMonitorWrapper::velodyne_check_snapshot);
68
-
69
67
diagnostics_updater_.add (
70
68
" velodyne_volt_temp_top_hv-" + sensor_configuration_->frame_id , this ,
71
69
&VelodyneHwMonitorWrapper::velodyne_check_top_hv);
@@ -164,55 +162,7 @@ void VelodyneHwMonitorWrapper::initialize_velodyne_diagnostics()
164
162
diagnostics_updater_.add (
165
163
" velodyne_voltage" , this , &VelodyneHwMonitorWrapper::velodyne_check_voltage);
166
164
167
- {
168
- std::lock_guard lock (mtx_snapshot_);
169
- current_snapshot_.reset (new std::string (" " ));
170
- current_snapshot_time_.reset (new rclcpp::Time (parent_node_->now ()));
171
- }
172
-
173
- current_diag_status_ = diagnostic_msgs::msg::DiagnosticStatus::STALE;
174
-
175
- auto on_timer_snapshot = [this ] { on_velodyne_snapshot_timer (); };
176
- diagnostics_snapshot_timer_ = parent_node_->create_wall_timer (
177
- std::chrono::milliseconds (diag_span_), std::move (on_timer_snapshot));
178
-
179
- auto on_timer_update = [this ] {
180
- auto now = parent_node_->now ();
181
- double dif;
182
- {
183
- std::lock_guard lock (mtx_snapshot_);
184
- dif = (now - *current_snapshot_time_).seconds ();
185
- }
186
- if (diag_span_ * 2.0 < dif * 1000 ) {
187
- current_diag_status_ = diagnostic_msgs::msg::DiagnosticStatus::STALE;
188
- RCLCPP_DEBUG_STREAM (logger_, " STALE" );
189
- } else {
190
- current_diag_status_ = diagnostic_msgs::msg::DiagnosticStatus::OK;
191
- RCLCPP_DEBUG_STREAM (logger_, " OK" );
192
- }
193
- diagnostics_updater_.force_update ();
194
- };
195
- diagnostics_update_timer_ =
196
- parent_node_->create_wall_timer (std::chrono::milliseconds (1000 ), std::move (on_timer_update));
197
- }
198
-
199
- void VelodyneHwMonitorWrapper::on_velodyne_snapshot_timer ()
200
- {
201
- auto str = hw_interface_->get_snapshot ();
202
- if (!str.has_value ()) return ;
203
- auto ptree = hw_interface_->parse_json (str.value ());
204
-
205
- {
206
- std::lock_guard lock (mtx_snapshot_);
207
-
208
- current_snapshot_time_.reset (new rclcpp::Time (parent_node_->now ()));
209
- current_snapshot_tree_ = std::make_shared<boost::property_tree::ptree>(ptree);
210
- current_diag_tree_ =
211
- std::make_shared<boost::property_tree::ptree>(current_snapshot_tree_->get_child (" diag" ));
212
- current_status_tree_ =
213
- std::make_shared<boost::property_tree::ptree>(current_snapshot_tree_->get_child (" status" ));
214
- current_snapshot_.reset (new std::string (str.value ()));
215
- }
165
+ diagnostics_updater_.setPeriod (1.0 );
216
166
}
217
167
218
168
void VelodyneHwMonitorWrapper::on_velodyne_diagnostics_timer ()
@@ -1238,14 +1188,6 @@ void VelodyneHwMonitorWrapper::velodyne_check_laser_state(
1238
1188
}
1239
1189
}
1240
1190
1241
- void VelodyneHwMonitorWrapper::velodyne_check_snapshot (
1242
- diagnostic_updater::DiagnosticStatusWrapper & diagnostics)
1243
- {
1244
- uint8_t level = current_diag_status_;
1245
- diagnostics.add (" sensor" , sensor_configuration_->frame_id );
1246
- diagnostics.summary (level, *current_snapshot_);
1247
- }
1248
-
1249
1191
void VelodyneHwMonitorWrapper::velodyne_check_status (
1250
1192
diagnostic_updater::DiagnosticStatusWrapper & diagnostics)
1251
1193
{
0 commit comments