37 #ifndef DIAGNOSTIC_UPDATER__UPDATE_FUNCTIONS_HPP_
38 #define DIAGNOSTIC_UPDATER__UPDATE_FUNCTIONS_HPP_
45 #include "diagnostic_updater/diagnostic_updater.hpp"
53 struct FrequencyStatusParam
60 double * min_freq,
double * max_freq,
61 double tolerance = 0.1,
int window_size = 5)
110 class FrequencyStatus :
public DiagnosticTask
113 const FrequencyStatusParam
params_;
116 std::vector<rclcpp::Time>
times_;
120 rclcpp::Logger debug_logger_;
130 debug_logger_(rclcpp::get_logger(
"FrequencyStatus_debug_logger"))
150 std::unique_lock<std::mutex> lock(
lock_);
167 std::unique_lock<std::mutex> lock(
lock_);
168 RCLCPP_DEBUG(debug_logger_,
"TICK %i",
count_);
174 std::unique_lock<std::mutex> lock(
lock_);
180 double freq = events / window;
186 stat.
summary(2,
"No events recorded.");
188 stat.
summary(1,
"Frequency too low.");
190 stat.
summary(1,
"Frequency too high.");
192 stat.
summary(0,
"Desired frequency met");
195 stat.
addf(
"Events in window",
"%d", events);
196 stat.
addf(
"Events since startup",
"%d",
count_);
197 stat.
addf(
"Duration of window (s)",
"%f", window);
198 stat.
addf(
"Actual frequency (Hz)",
"%f", freq);
204 "Minimum acceptable frequency (Hz)",
"%f",
209 "Maximum acceptable frequency (Hz)",
"%f",
220 struct TimeStampStatusParam
227 const double min_acceptable = -1,
228 const double max_acceptable = 5)
250 TimeStampStatusParam();
263 class TimeStampStatus :
public DiagnosticTask
283 const TimeStampStatusParam & params,
285 const rclcpp::Clock::SharedPtr & clock = std::make_shared<rclcpp::Clock>())
297 const TimeStampStatusParam & params,
298 const rclcpp::Clock::SharedPtr & clock = std::make_shared<rclcpp::Clock>())
310 const rclcpp::Clock::SharedPtr & clock = std::make_shared<rclcpp::Clock>())
320 void tick(
double stamp)
322 std::unique_lock<std::mutex> lock(
lock_);
327 const double delta = clock_ptr_->now().seconds() - stamp;
351 std::unique_lock<std::mutex> lock(
lock_);
353 stat.
summary(0,
"Timestamps are reasonable.");
355 stat.
summary(1,
"No data since last update.");
358 stat.
summary(2,
"Timestamps too far in future seen.");
363 stat.
summary(2,
"Timestamps too far in past seen.");
368 stat.
summary(2,
"Zero timestamp seen.");
376 "Earliest acceptable timestamp delay:",
"%f",
379 "Latest acceptable timestamp delay:",
"%f",
400 const rclcpp::Clock::SharedPtr clock_ptr_;
410 class Heartbeat :
public DiagnosticTask
427 #endif // DIAGNOSTIC_UPDATER__UPDATE_FUNCTIONS_HPP_