Lightweight and fast frequency monitor. More...
#include <frequency.hpp>
Public Member Functions | |
const FrequencyDiagnostics & | analyse () |
Analyse the recent updates to generate monitoring statistics. | |
const FrequencyDiagnostics & | diagnostics () const |
Diagnostics getter function. | |
FrequencyMonitor (const float &window_period=2.0, const bool &use_realtime_clock=false) | |
Setup the frequency monitor. | |
void | update () |
Let the diagnostics know that new data has arrived. | |
Protected Attributes | |
FrequencyDiagnostics | current_diagnostics |
unsigned int | incoming_counter |
ecl::TimeStamp | last_anyalsed |
ecl::TimeStamp | last_incoming |
ecl::TimeStamp | maximum_interval |
ecl::TimeStamp | minimum_interval |
ecl::TimeStamp | period |
bool | use_realtime_clock |
Lightweight and fast frequency monitor.
This class doesn't dynamically update over a window, nor does it collect and store data to compute characteristics like standard deviations. It is however, suitable for most use case scenarios where you are simply interested in the hz/minimum_interval/maximum_interval of data over a fixed period.
Usage:
float window_period = 2.0; FrequencyMonitor monitor(window_period, false); FrequencyMonitor ros_monitor(window_period, true); // use the realtime clock to match ros timestamps FrequencyDiagnostics diagnostics; void incomingDataCallback() { monitor.update(); // register that new data has arrived } void process() { diagnostics = monitor.analyse(); } void process2() { monitor.analyse(); diagnostics = monitor.getDiagnostics(); }
Definition at line 83 of file frequency.hpp.
ecl::FrequencyMonitor::FrequencyMonitor | ( | const float & | window_period = 2.0 , |
const bool & | use_realtime_clock = false |
||
) |
Setup the frequency monitor.
window_period | : time interval over which updates are analysed. |
use_realtime_clock | : better to use the monotonic clock, but sometimes (e.g. ros), realtime is required. |
Definition at line 20 of file lib/frequency.cpp.
const FrequencyDiagnostics & ecl::FrequencyMonitor::analyse | ( | ) |
Analyse the recent updates to generate monitoring statistics.
Right now this just uses a fixed window (not moving) that only updates the information if the period since the last analyse() request was made has been exceeded.
every two seconds, we update the status as follows
Definition at line 57 of file lib/frequency.cpp.
const FrequencyDiagnostics& ecl::FrequencyMonitor::diagnostics | ( | ) | const [inline] |
Diagnostics getter function.
Definition at line 113 of file frequency.hpp.
void ecl::FrequencyMonitor::update | ( | ) |
Let the diagnostics know that new data has arrived.
This updates the internal counter, with a timestamp.
Definition at line 39 of file lib/frequency.cpp.
Definition at line 113 of file frequency.hpp.
unsigned int ecl::FrequencyMonitor::incoming_counter [protected] |
Definition at line 117 of file frequency.hpp.
ecl::TimeStamp ecl::FrequencyMonitor::last_anyalsed [protected] |
Definition at line 118 of file frequency.hpp.
ecl::TimeStamp ecl::FrequencyMonitor::last_incoming [protected] |
Definition at line 123 of file frequency.hpp.
ecl::TimeStamp ecl::FrequencyMonitor::maximum_interval [protected] |
Definition at line 121 of file frequency.hpp.
ecl::TimeStamp ecl::FrequencyMonitor::minimum_interval [protected] |
Definition at line 120 of file frequency.hpp.
ecl::TimeStamp ecl::FrequencyMonitor::period [protected] |
Definition at line 119 of file frequency.hpp.
bool ecl::FrequencyMonitor::use_realtime_clock [protected] |
Definition at line 122 of file frequency.hpp.