6.1 Диагностические сообщения о состоянии робота

Тип сообщения диагностического статуса (DiagnosticStatus) ROS позволяет нам представлять различные виды диагностической информации в общем формате. Чтобы просмотреть определение сообщения, выполните команду:

$ rosmsg show diagnostic_msgs/DiagnosticStatus
byte OK=0 byte 
WARN=1 byte 
ERROR=2 byte 
level string name 
string message 
string hardware_id 
diagnostic_msgs/KeyValue[] values 
    string key 
string value

Как мы видим выше, сообщение сначала перечисляет три общих уровня состояния: OK, WARN и ERROR. Поле level содержит текущее состояние самого устройства и будет иметь значение 0, 1 или 2, чтобы указать состояние OK, WARN или ERROR соответственно. Далее мы видим три строки для хранения имени компонента, произвольного сообщения и его hardware_id. Остальная часть сообщения представляет собой массив пар «ключ-значение», которые могут хранить необработанные значения, возвращаемые аппаратным драйвером. Например, пара ключ=температура (key=temperature), value=31 будет означать, что температура устройства составляет 31℃

Примечание: для читателей, заглядывая наперёд, в ROS Indigo в DiagnosticStatus был добавлен новый статус STALE. Это означает, что сообщение будет иметь новую подпись MD5 и не будет совместимо с узлами, работающими под управлением ROS Indigo или более ранней версии. Поэтому не следует смешивать диагностические узлы или мониторы роботов, работающие на preIndigo и post-Indigo дистрибутивах.

Данный драйвер аппаратного обеспечения обычно публикует массив таких значений используя тип сообщения DiagnosticArray, который выглядит следующим образом:

std_msgs/Header header 
diagnostic_msgs/DiagnosticStatus[] status

Как мы видим, это сообщение состоит из заголовков ROS и массива диагностических сообщений DiagnosticStatus, по одному для каждого отслеживаемого компонента. Это станет яснее ниже, когда мы рассмотрим конкретный пример использования сервоприводов Dynamixel.

Last updated