From c04c83bead33ae70818f8ea7c6977cab0b077fd5 Mon Sep 17 00:00:00 2001 From: Emre Karincali Date: Thu, 4 Sep 2025 16:38:57 +0000 Subject: [PATCH 01/11] add compressedImage to plugin description xml --- rviz_default_plugins/plugins_description.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/rviz_default_plugins/plugins_description.xml b/rviz_default_plugins/plugins_description.xml index 6b0b581f6..b13bd50fa 100644 --- a/rviz_default_plugins/plugins_description.xml +++ b/rviz_default_plugins/plugins_description.xml @@ -120,6 +120,7 @@ The Image display creates a new rendering window with an image. sensor_msgs/msg/Image + sensor_msgs/msg/CompressedImage Date: Tue, 16 Sep 2025 10:30:06 +0000 Subject: [PATCH 02/11] add support for displaying compressed image topics in rviz2 Image display dropdown menu --- rviz_common/src/rviz_common/properties/ros_topic_property.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rviz_common/src/rviz_common/properties/ros_topic_property.cpp b/rviz_common/src/rviz_common/properties/ros_topic_property.cpp index 6a1fab396..59f2c7d69 100644 --- a/rviz_common/src/rviz_common/properties/ros_topic_property.cpp +++ b/rviz_common/src/rviz_common/properties/ros_topic_property.cpp @@ -80,7 +80,7 @@ void RosTopicProperty::fillTopicList() for (const auto & topic : published_topics) { // Only add topics whose type matches. for (const auto & type : topic.second) { - if (type == std_message_type) { + if (type == std_message_type || (type == "sensor_msgs/msg/CompressedImage" && std_message_type == "sensor_msgs/msg/Image")) { addOptionStd(topic.first); } } From 4037ee4dd7c66c9470ed8c5cc9f9b21c60e07974 Mon Sep 17 00:00:00 2001 From: Emre Date: Wed, 17 Sep 2025 16:42:53 +0200 Subject: [PATCH 03/11] add ffmpeg and theora to ImageDisplay in plugins_decription.xml Co-authored-by: Lennart Reiher Signed-off-by: Emre --- rviz_default_plugins/plugins_description.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rviz_default_plugins/plugins_description.xml b/rviz_default_plugins/plugins_description.xml index b13bd50fa..b40efb245 100644 --- a/rviz_default_plugins/plugins_description.xml +++ b/rviz_default_plugins/plugins_description.xml @@ -119,8 +119,10 @@ The Image display creates a new rendering window with an image. - sensor_msgs/msg/Image + ffmpeg_image_transport_msgs/msg/FFMPEGPacket sensor_msgs/msg/CompressedImage + sensor_msgs/msg/Image + theora_image_transport/msg/Packet Date: Wed, 17 Sep 2025 16:47:06 +0200 Subject: [PATCH 04/11] add ffmpeg and theora to CameraDisplay in plugins_description.xml --- rviz_default_plugins/plugins_description.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rviz_default_plugins/plugins_description.xml b/rviz_default_plugins/plugins_description.xml index b40efb245..ca81314b2 100644 --- a/rviz_default_plugins/plugins_description.xml +++ b/rviz_default_plugins/plugins_description.xml @@ -31,8 +31,10 @@ Displays an image from a camera, with the visualized world rendered behind it. <a href="http://www.ros.org/wiki/rviz/DisplayTypes/Camera">More Information</a>. - sensor_msgs/msg/Image + ffmpeg_image_transport_msgs/msg/FFMPEGPacket sensor_msgs/msg/CompressedImage + sensor_msgs/msg/Image + theora_image_transport/msg/Packet Date: Wed, 17 Sep 2025 16:52:18 +0200 Subject: [PATCH 05/11] add support for CompressedPointCloud2 message type in Point Cloud2 display --- rviz_default_plugins/plugins_description.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/rviz_default_plugins/plugins_description.xml b/rviz_default_plugins/plugins_description.xml index ca81314b2..24a7c5f47 100644 --- a/rviz_default_plugins/plugins_description.xml +++ b/rviz_default_plugins/plugins_description.xml @@ -178,6 +178,7 @@ The Point Cloud2 display shows data from a (recommended) sensor_msgs/PointCloud2 message. + point_cloud_interfaces/msg/CompressedPointCloud2 sensor_msgs/msg/PointCloud2 From 3bca12a9739767d2c68ce55c3a4c87be9b0dccf9 Mon Sep 17 00:00:00 2001 From: Emre Karincali Date: Wed, 1 Oct 2025 10:07:25 +0000 Subject: [PATCH 06/11] improve support for compressed image topics in image display dropdowns --- .../properties/ros_topic_property.hpp | 10 ++++++++-- .../properties/ros_topic_property.cpp | 20 +++++++++++++------ .../image/image_transport_display.hpp | 9 ++++++++- 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/rviz_common/include/rviz_common/properties/ros_topic_property.hpp b/rviz_common/include/rviz_common/properties/ros_topic_property.hpp index c55303e6d..20754805a 100644 --- a/rviz_common/include/rviz_common/properties/ros_topic_property.hpp +++ b/rviz_common/include/rviz_common/properties/ros_topic_property.hpp @@ -30,6 +30,7 @@ #define RVIZ_COMMON__PROPERTIES__ROS_TOPIC_PROPERTY_HPP_ #include +#include #include "rviz_common/properties/editable_enum_property.hpp" #include "rviz_common/ros_integration/ros_node_abstraction_iface.hpp" @@ -58,8 +59,13 @@ class RVIZ_COMMON_PUBLIC RosTopicProperty : public EditableEnumProperty void setMessageType(const QString & message_type); + void setMessageTypes(const std::vector & message_types); + QString getMessageType() const - {return message_type_;} + {return message_types_.front();} + + std::vector getMessageTypes() const + {return message_types_;} QString getTopic() const {return getValue().toString();} @@ -75,7 +81,7 @@ protected Q_SLOTS: private: ros_integration::RosNodeAbstractionIface::WeakPtr rviz_ros_node_; - QString message_type_; + std::vector message_types_; }; class RVIZ_COMMON_PUBLIC RosFilteredTopicProperty diff --git a/rviz_common/src/rviz_common/properties/ros_topic_property.cpp b/rviz_common/src/rviz_common/properties/ros_topic_property.cpp index 59f2c7d69..80dcae744 100644 --- a/rviz_common/src/rviz_common/properties/ros_topic_property.cpp +++ b/rviz_common/src/rviz_common/properties/ros_topic_property.cpp @@ -51,7 +51,7 @@ RosTopicProperty::RosTopicProperty( QObject * receiver) : EditableEnumProperty(name, default_value, description, parent, changed_slot, receiver), rviz_ros_node_(), - message_type_(message_type) + message_types_({message_type}) { connect( this, SIGNAL(requestOptions(EditableEnumProperty*)), @@ -65,7 +65,13 @@ void RosTopicProperty::initialize(ros_integration::RosNodeAbstractionIface::Weak void RosTopicProperty::setMessageType(const QString & message_type) { - message_type_ = message_type; + message_types_.clear(); + message_types_.push_back(message_type); +} + +void RosTopicProperty::setMessageTypes(const std::vector & message_types) +{ + message_types_ = message_types; } void RosTopicProperty::fillTopicList() @@ -73,15 +79,17 @@ void RosTopicProperty::fillTopicList() QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); clearOptions(); - std::string std_message_type = message_type_.toStdString(); std::map> published_topics = rviz_ros_node_.lock()->get_topic_names_and_types(); for (const auto & topic : published_topics) { - // Only add topics whose type matches. for (const auto & type : topic.second) { - if (type == std_message_type || (type == "sensor_msgs/msg/CompressedImage" && std_message_type == "sensor_msgs/msg/Image")) { - addOptionStd(topic.first); + for (const auto & message_type : message_types_) { + std::string std_message_type = message_type.toStdString(); + if (type == std_message_type) { + addOptionStd(topic.first); + break; + } } } } 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 f1a193c94..559b8b346 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 @@ -60,7 +60,14 @@ class ImageTransportDisplay : public rviz_common::_RosTopicDisplay : messages_received_(0) { QString message_type = QString::fromStdString(rosidl_generator_traits::name()); - topic_property_->setMessageType(message_type); + std::vector supported_types = { + "sensor_msgs/msg/Image", + "sensor_msgs/msg/CompressedImage", + "ffmpeg_image_transport/msg/FFMPEGPacket", + "theora_image_transport/msg/Packet" + }; + + topic_property_->setMessageTypes(supported_types); topic_property_->setDescription(message_type + " topic to subscribe to."); } From 27db6694eaaddff95755757e890abb41a8c54e68 Mon Sep 17 00:00:00 2001 From: Emre Karincali Date: Wed, 1 Oct 2025 10:07:58 +0000 Subject: [PATCH 07/11] Add support for compressed point-cloud topics in pcl2 display dropdowns --- .../displays/pointcloud/point_cloud_transport_display.hpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/rviz_default_plugins/include/rviz_default_plugins/displays/pointcloud/point_cloud_transport_display.hpp b/rviz_default_plugins/include/rviz_default_plugins/displays/pointcloud/point_cloud_transport_display.hpp index 8a682d7b8..c1bb62663 100644 --- a/rviz_default_plugins/include/rviz_default_plugins/displays/pointcloud/point_cloud_transport_display.hpp +++ b/rviz_default_plugins/include/rviz_default_plugins/displays/pointcloud/point_cloud_transport_display.hpp @@ -58,7 +58,12 @@ class PointCloud2TransportDisplay : public rviz_common::_RosTopicDisplay : messages_received_(0) { QString message_type = QString::fromStdString(rosidl_generator_traits::name()); - topic_property_->setMessageType(message_type); + std::vector supported_types = { + "sensor_msgs/msg/PointCloud2", + "point_cloud_intefaces/msg/CompressedPointCloud2" + }; + + topic_property_->setMessageTypes(supported_types); topic_property_->setDescription(message_type + " topic to subscribe to."); } From 40c6d5b038d5d4befb883158020c444ad82e7d16 Mon Sep 17 00:00:00 2001 From: Emre Karincali Date: Wed, 1 Oct 2025 10:26:05 +0000 Subject: [PATCH 08/11] fix typo --- .../displays/pointcloud/point_cloud_transport_display.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rviz_default_plugins/include/rviz_default_plugins/displays/pointcloud/point_cloud_transport_display.hpp b/rviz_default_plugins/include/rviz_default_plugins/displays/pointcloud/point_cloud_transport_display.hpp index c1bb62663..d0c08ab53 100644 --- a/rviz_default_plugins/include/rviz_default_plugins/displays/pointcloud/point_cloud_transport_display.hpp +++ b/rviz_default_plugins/include/rviz_default_plugins/displays/pointcloud/point_cloud_transport_display.hpp @@ -60,7 +60,7 @@ class PointCloud2TransportDisplay : public rviz_common::_RosTopicDisplay QString message_type = QString::fromStdString(rosidl_generator_traits::name()); std::vector supported_types = { "sensor_msgs/msg/PointCloud2", - "point_cloud_intefaces/msg/CompressedPointCloud2" + "point_cloud_interfaces/msg/CompressedPointCloud2" }; topic_property_->setMessageTypes(supported_types); From 35e71e11a2a1e66cfb6c88545b1b4f64a5aa1e41 Mon Sep 17 00:00:00 2001 From: Emre Date: Thu, 2 Oct 2025 14:22:23 +0200 Subject: [PATCH 09/11] use message_type variable instead of hardcoded string in ImageDisplay Co-authored-by: Lennart Reiher Signed-off-by: Emre --- .../displays/image/image_transport_display.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 559b8b346..c6bcaede3 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 @@ -61,7 +61,7 @@ class ImageTransportDisplay : public rviz_common::_RosTopicDisplay { QString message_type = QString::fromStdString(rosidl_generator_traits::name()); std::vector supported_types = { - "sensor_msgs/msg/Image", + message_type, "sensor_msgs/msg/CompressedImage", "ffmpeg_image_transport/msg/FFMPEGPacket", "theora_image_transport/msg/Packet" From 2a06dc7a152fed3371ad5ea9db63903565272c0c Mon Sep 17 00:00:00 2001 From: Emre Date: Thu, 2 Oct 2025 14:23:10 +0200 Subject: [PATCH 10/11] use message_type variable instead of hardcoded string in PCL2-Display Co-authored-by: Lennart Reiher Signed-off-by: Emre --- .../displays/pointcloud/point_cloud_transport_display.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rviz_default_plugins/include/rviz_default_plugins/displays/pointcloud/point_cloud_transport_display.hpp b/rviz_default_plugins/include/rviz_default_plugins/displays/pointcloud/point_cloud_transport_display.hpp index d0c08ab53..c6451dd82 100644 --- a/rviz_default_plugins/include/rviz_default_plugins/displays/pointcloud/point_cloud_transport_display.hpp +++ b/rviz_default_plugins/include/rviz_default_plugins/displays/pointcloud/point_cloud_transport_display.hpp @@ -59,7 +59,7 @@ class PointCloud2TransportDisplay : public rviz_common::_RosTopicDisplay { QString message_type = QString::fromStdString(rosidl_generator_traits::name()); std::vector supported_types = { - "sensor_msgs/msg/PointCloud2", + message_type, "point_cloud_interfaces/msg/CompressedPointCloud2" }; From 1d8979758023b3cf2196eec5d419c6c5ad26f3bb Mon Sep 17 00:00:00 2001 From: Emre Date: Thu, 2 Oct 2025 14:31:43 +0200 Subject: [PATCH 11/11] add check for empty vector in getMessageType function Signed-off-by: Emre --- .../include/rviz_common/properties/ros_topic_property.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rviz_common/include/rviz_common/properties/ros_topic_property.hpp b/rviz_common/include/rviz_common/properties/ros_topic_property.hpp index 20754805a..339ef898c 100644 --- a/rviz_common/include/rviz_common/properties/ros_topic_property.hpp +++ b/rviz_common/include/rviz_common/properties/ros_topic_property.hpp @@ -62,7 +62,7 @@ class RVIZ_COMMON_PUBLIC RosTopicProperty : public EditableEnumProperty void setMessageTypes(const std::vector & message_types); QString getMessageType() const - {return message_types_.front();} + {return message_types_.empty() ? QString() : message_types_.front();} std::vector getMessageTypes() const {return message_types_;}