1 #ifndef ED_LOOP_USAGE_STATUS_H_
2 #define ED_LOOP_USAGE_STATUS_H_
4 #include <diagnostic_updater/diagnostic_updater.h>
5 #include <diagnostic_updater/update_functions.h>
7 #include <diagnostic_msgs/DiagnosticStatus.h>
30 const diagnostic_updater::FrequencyStatusParam
params_;
47 DiagnosticTask(name),
params_(params),
59 DiagnosticTask(
"Loop Usage Status"),
params_(params),
76 boost::mutex::scoped_lock lock(
lock_);
92 boost::mutex::scoped_lock lock(
lock_);
101 boost::mutex::scoped_lock lock(
lock_);
108 virtual void run(diagnostic_updater::DiagnosticStatusWrapper &stat)
110 boost::mutex::scoped_lock lock(
lock_);
121 freq = events / window;
130 stat.summary(diagnostic_msgs::DiagnosticStatus::ERROR,
"No events recorded.");
132 else if (window != 0 && freq < *
params_.min_freq_ * (1 -
params_.tolerance_))
134 stat.summary(diagnostic_msgs::DiagnosticStatus::WARN,
"Frequency too low.");
136 else if (window != 0 && freq > *
params_.max_freq_ * (1 +
params_.tolerance_))
138 stat.summary(diagnostic_msgs::DiagnosticStatus::WARN,
"Frequency too high.");
140 else if (window != 0)
142 stat.summary(diagnostic_msgs::DiagnosticStatus::OK,
"Desired frequency met");
145 stat.addf(
"Events in window",
"%d", events);
146 stat.addf(
"Events since startup",
"%d", curseq);
147 stat.addf(
"Duration of window (s)",
"%f", window);
148 stat.addf(
"Total loop time during window (s)",
"%f", loop_time_window);
151 stat.addf(
"Loop Usage (%)",
"%f", 100*loop_time_window/window);
152 stat.addf(
"Actual frequency (Hz)",
"%f", freq);
156 stat.addf(
"Target frequency (Hz)",
"%f",*
params_.min_freq_);
160 stat.addf(
"Minimum acceptable frequency (Hz)",
"%f", *
params_.min_freq_ * (1 -
params_.tolerance_));
165 stat.addf(
"Maximum acceptable frequency (Hz)",
"%f", *
params_.max_freq_ * (1 +
params_.tolerance_));