Updater example
To use ROS diagnostics add the following to CMakeLists.txt:
find_package(catkin REQUIRED
COMPONENTS
std_msgs
medusa_msgs
roscpp
**diagnostic_msgs**
serial_lib
nmea_msgs
medusa_gimmicks_library
**medusa_diagnostics_library**
)
and in package.xml guarantee the following two dependencies:
<depend>diagnostic_msgs</depend>
<depend>medusa_diagnostics_library</depend>
Code use
In some header file please include the following:
#include <diagnostic_msgs/KeyValue.h>
#include <diagnostic_msgs/DiagnosticArray.h>
#include <diagnostic_msgs/DiagnosticStatus.h>
#include <medusa_diagnostics_library/MedusaDiagnostics.h>
Below you can find an example, with two different key values(pressure and temperature), the status message is directly populated in the driver node:
void ImsNode::reportingPressure(const medusa_msgs::Pressure &msg)
{
//** Instantiate diagnostic message
diagnostic_msgs::DiagnosticArray diag_msg;
diag_msg.header.stamp = msg.header.stamp;
diag_msg.status.push_back(MedusaDiagnostics::setDiagnosisMsg(diagnostic_msgs::DiagnosticStatus::OK,
"/Sensors/Pressure", "IMS Pressure Good.", "IMS Board"));
diag_msg.status.push_back(MedusaDiagnostics::setDiagnosisMsg(diagnostic_msgs::DiagnosticStatus::OK,
"/Sensors/Temperature", "IMS Temperature Good.", "IMS Board"));
// +.+ Check pressure bounds
if (MedusaDiagnostics::checkLowerBound(msg.pressure, p_min_pressure_) || MedusaDiagnostics::checkUpperBound(msg.pressure, p_max_pressure_))
MedusaDiagnostics::errorLevel(&diag_msg, ros::this_node::getName() + ": Pressure out of bounds", 0);
// +.+ Check temperature bounds
if (MedusaDiagnostics::checkLowerBound(msg.temperature, p_min_temp_) || MedusaDiagnostics::checkUpperBound(msg.temperature, p_max_temp_))
MedusaDiagnostics::errorLevel(&diag_msg, ros::this_node::getName() + ": Temperature out of bounds", 1);
// +.+ Pressure and temperature key values
MedusaDiagnostics::addKeyValue(&diag_msg, "Pressure", boost::str(boost::format("%.0f") % (msg.pressure)), 0);
MedusaDiagnostics::addKeyValue(&diag_msg, "Temperature", boost::str(boost::format("%.0f") % (msg.temperature)), 1);
diagnostics_pub_.publish(diag_msg);
}
where:
diagnostics_pub_ = nh_.advertise<diagnostic_msgs::DiagnosticArray>("/diagnostics", 100);
Last update:
May 30, 2022