diff --git a/rviz_default_plugins/include/rviz_default_plugins/displays/image/image_transport_display.hpp b/rviz_default_plugins/include/rviz_default_plugins/displays/image/image_transport_display.hpp index 4cb0933c3..791ce3472 100644 --- a/rviz_default_plugins/include/rviz_default_plugins/displays/image/image_transport_display.hpp +++ b/rviz_default_plugins/include/rviz_default_plugins/displays/image/image_transport_display.hpp @@ -34,6 +34,7 @@ #define RVIZ_DEFAULT_PLUGINS__DISPLAYS__IMAGE__IMAGE_TRANSPORT_DISPLAY_HPP_ #include +#include #include "get_transport_from_topic.hpp" #include "image_transport/image_transport.hpp" @@ -171,18 +172,32 @@ class ImageTransportDisplay : public rviz_common::_RosTopicDisplay ++messages_received_; QString topic_str = QString::number(messages_received_) + " messages received"; + rviz_common::properties::StatusProperty::Level topic_status_level = + rviz_common::properties::StatusProperty::Ok; // Append topic subscription frequency if we can lock rviz_ros_node_. std::shared_ptr node_interface = rviz_ros_node_.lock(); if (node_interface != nullptr) { - const double duration = - (node_interface->get_raw_node()->now() - subscription_start_time_).seconds(); - const double subscription_frequency = - static_cast(messages_received_) / duration; - topic_str += " at " + QString::number(subscription_frequency, 'f', 1) + " hz."; + try { + const double duration = + (node_interface->get_raw_node()->now() - subscription_start_time_).seconds(); + const double subscription_frequency = + static_cast(messages_received_) / duration; + topic_str += " at " + QString::number(subscription_frequency, 'f', 1) + " hz."; + } catch (const std::runtime_error & e) { + if (std::string(e.what()).find("can't subtract times with different time sources") != + std::string::npos) + { + topic_status_level = rviz_common::properties::StatusProperty::Warn; + topic_str += ". "; + topic_str += e.what(); + } else { + throw; + } + } } setStatus( - rviz_common::properties::StatusProperty::Ok, + topic_status_level, "Topic", topic_str);