Diagnostic Updater API
diagnostic_updater provides a variety of C++ utilities to assist in integrating diagnostics with your software. Common updater tasks include:
- publishing the status of a sensor data topic on a device driver
- reporting that a hardware device is closed
- reporting an error when a value is out of bounds, e.g. temperature
It also provides a Python API very similar to the C++ API
Examples and Tutorials
A working example of a diagnostic_updater can be found in diagnostic_updater/src/example.cpp. This example goes through some of the most common uses of an updater.
The documented C++ API is widely used and should be considered stable.
The diagnostic_updater::DiagnosticStatusWrapper class eases the pain of filling out a diagnostic_msgs/DiagnosticStatus message. It handles setting the summary, possibly with printf-type formatting of the message field, and setting of key-value pairs with type-conversion and formatting of the values. It also has facilities for merging multiple diagnostic_msgs/DiagnosticStatus messages without losing information in the status message.
The diagnostic_updater::Updater class manages a set of diagnostic update functions, and their periodic publication.
Monitoring a topic's frequency, a common diagnostics feature, and the validity of its timestamps can be done using pre-packaged diagnostic update functions. A diagnostic_updater::DiagnosedPublisher wraps a Publisher and standard diagnostics that relate to it in a single class.
Topics with expected frequency lower than 1 Hz are supported. However, DiagnosedPublisher will report the diagnostic_updater::TimeStampStatus task in WARNING state for the periods when no message came. If you want to work around this limitation and report the timestamp status as OK in the empty periods, you have to manually create a task of type diagnostic_updater::SlowTimeStampStatus and use it together with a diagnostic_updater::FrequencyStatus task instead of the DiagnosedPublisher.