Skip to content

Commit 7c7fb77

Browse files
committed
Add zlib image plugin
Signed-off-by: Alejandro Hernandez Cordero <ahcorde@gmail.com>
1 parent 07865bd commit 7c7fb77

12 files changed

Lines changed: 863 additions & 0 deletions

File tree

image_transport_plugins/package.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<exec_depend>compressed_depth_image_transport</exec_depend>
2727
<exec_depend>compressed_image_transport</exec_depend>
2828
<exec_depend>theora_image_transport</exec_depend>
29+
<exec_depend>zlib_image_transport</exec_depend>
2930
<exec_depend>zstd_image_transport</exec_depend>
3031

3132
<export>
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
cmake_minimum_required(VERSION 3.20)
2+
3+
project(zlib_image_transport)
4+
5+
if(NOT CMAKE_CXX_STANDARD)
6+
set(CMAKE_CXX_STANDARD 17)
7+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
8+
endif()
9+
10+
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
11+
add_compile_options(-Wall -Wextra -Wpedantic)
12+
endif()
13+
14+
find_package(ament_cmake REQUIRED)
15+
find_package(image_transport REQUIRED)
16+
find_package(pluginlib REQUIRED)
17+
find_package(rclcpp REQUIRED)
18+
find_package(sensor_msgs REQUIRED)
19+
find_package(ZLIB REQUIRED)
20+
21+
include_directories(include)
22+
23+
add_library(
24+
${PROJECT_NAME} SHARED
25+
src/zlib_wrapper.cpp
26+
src/zlib_publisher.cpp
27+
src/zlib_subscriber.cpp
28+
src/manifest.cpp
29+
)
30+
31+
target_link_libraries(${PROJECT_NAME}
32+
ZLIB::ZLIB
33+
image_transport::image_transport
34+
rclcpp::rclcpp
35+
pluginlib::pluginlib
36+
${sensor_msgs_TARGETS}
37+
)
38+
39+
install(TARGETS ${PROJECT_NAME}
40+
ARCHIVE DESTINATION lib
41+
LIBRARY DESTINATION lib
42+
RUNTIME DESTINATION bin
43+
)
44+
45+
install(
46+
DIRECTORY "include/"
47+
DESTINATION include
48+
)
49+
50+
pluginlib_export_plugin_description_file(image_transport zlib_plugins.xml)
51+
52+
if(BUILD_TESTING)
53+
find_package(ament_lint_auto REQUIRED)
54+
ament_lint_auto_find_test_dependencies()
55+
endif()
56+
57+
ament_package()
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// Copyright (c) 2026, Open Source Robotics Foundation, Inc.
2+
// All rights reserved.
3+
//
4+
// Redistribution and use in source and binary forms, with or without
5+
// modification, are permitted provided that the following conditions are met:
6+
//
7+
// * Redistributions of source code must retain the above copyright
8+
// notice, this list of conditions and the following disclaimer.
9+
//
10+
// * Redistributions in binary form must reproduce the above copyright
11+
// notice, this list of conditions and the following disclaimer in the
12+
// documentation and/or other materials provided with the distribution.
13+
//
14+
// * Neither the name of the copyright holder nor the names of its
15+
// contributors may be used to endorse or promote products derived from
16+
// this software without specific prior written permission.
17+
//
18+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19+
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20+
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21+
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22+
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23+
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24+
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25+
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26+
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27+
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28+
// POSSIBILITY OF SUCH DAMAGE.
29+
30+
#ifndef ZLIB_IMAGE_TRANSPORT__ZLIB_COMMON_HPP_
31+
#define ZLIB_IMAGE_TRANSPORT__ZLIB_COMMON_HPP_
32+
33+
#include <rclcpp/parameter_value.hpp>
34+
#include <rcl_interfaces/msg/parameter_descriptor.hpp>
35+
36+
namespace zlib_image_transport
37+
{
38+
using ParameterDescriptor = rcl_interfaces::msg::ParameterDescriptor;
39+
using ParameterValue = rclcpp::ParameterValue;
40+
41+
struct ParameterDefinition
42+
{
43+
const ParameterValue defaultValue;
44+
const ParameterDescriptor descriptor;
45+
};
46+
} // namespace zlib_image_transport
47+
48+
#endif // ZLIB_IMAGE_TRANSPORT__ZLIB_COMMON_HPP_
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// Copyright (c) 2026, Open Source Robotics Foundation, Inc.
2+
// All rights reserved.
3+
//
4+
// Redistribution and use in source and binary forms, with or without
5+
// modification, are permitted provided that the following conditions are met:
6+
//
7+
// * Redistributions of source code must retain the above copyright
8+
// notice, this list of conditions and the following disclaimer.
9+
//
10+
// * Redistributions in binary form must reproduce the above copyright
11+
// notice, this list of conditions and the following disclaimer in the
12+
// documentation and/or other materials provided with the distribution.
13+
//
14+
// * Neither the name of the copyright holder nor the names of its
15+
// contributors may be used to endorse or promote products derived from
16+
// this software without specific prior written permission.
17+
//
18+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19+
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20+
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21+
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22+
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23+
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24+
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25+
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26+
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27+
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28+
// POSSIBILITY OF SUCH DAMAGE.
29+
30+
#ifndef ZLIB_IMAGE_TRANSPORT__ZLIB_PUBLISHER_HPP_
31+
#define ZLIB_IMAGE_TRANSPORT__ZLIB_PUBLISHER_HPP_
32+
33+
#include <string>
34+
#include <vector>
35+
#include <unordered_set>
36+
37+
#include <sensor_msgs/msg/image.hpp>
38+
#include <sensor_msgs/msg/compressed_image.hpp>
39+
#include <image_transport/node_interfaces.hpp>
40+
#include <image_transport/simple_publisher_plugin.hpp>
41+
42+
#include <rclcpp/node.hpp>
43+
44+
#include "zlib_image_transport/zlib_common.hpp"
45+
46+
namespace zlib_image_transport
47+
{
48+
49+
using CompressedImage = sensor_msgs::msg::CompressedImage;
50+
using ParameterEvent = rcl_interfaces::msg::ParameterEvent;
51+
52+
class ZlibPublisher : public image_transport::SimplePublisherPlugin<CompressedImage>
53+
{
54+
public:
55+
ZlibPublisher();
56+
~ZlibPublisher() override = default;
57+
58+
std::string getTransportName() const override;
59+
60+
protected:
61+
void advertiseImpl(
62+
image_transport::RequiredInterfaces node_interfaces,
63+
const std::string & base_topic,
64+
rclcpp::QoS custom_qos,
65+
rclcpp::PublisherOptions options) final;
66+
67+
void publish(
68+
const sensor_msgs::msg::Image & message,
69+
const PublisherT & publisher) const override;
70+
71+
rclcpp::Logger logger_;
72+
rclcpp::node_interfaces::NodeParametersInterface::SharedPtr node_param_interface_;
73+
rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_base_interface_;
74+
75+
private:
76+
std::vector<std::string> parameters_;
77+
std::unordered_set<std::string> deprecated_parameters_;
78+
79+
rclcpp::node_interfaces::PreSetParametersCallbackHandle::SharedPtr
80+
pre_set_parameter_callback_handle_;
81+
82+
void declareParameter(
83+
const std::string & base_name,
84+
const ParameterDefinition & definition);
85+
86+
void preSetParametersCallback(std::vector<rclcpp::Parameter> & parameters);
87+
};
88+
89+
} // namespace zlib_image_transport
90+
91+
#endif // ZLIB_IMAGE_TRANSPORT__ZLIB_PUBLISHER_HPP_
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
// Copyright (c) 2026, Open Source Robotics Foundation, Inc.
2+
// All rights reserved.
3+
//
4+
// Redistribution and use in source and binary forms, with or without
5+
// modification, are permitted provided that the following conditions are met:
6+
//
7+
// * Redistributions of source code must retain the above copyright
8+
// notice, this list of conditions and the following disclaimer.
9+
//
10+
// * Redistributions in binary form must reproduce the above copyright
11+
// notice, this list of conditions and the following disclaimer in the
12+
// documentation and/or other materials provided with the distribution.
13+
//
14+
// * Neither the name of the copyright holder nor the names of its
15+
// contributors may be used to endorse or promote products derived from
16+
// this software without specific prior written permission.
17+
//
18+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19+
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20+
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21+
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22+
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23+
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24+
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25+
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26+
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27+
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28+
// POSSIBILITY OF SUCH DAMAGE.
29+
30+
#ifndef ZLIB_IMAGE_TRANSPORT__ZLIB_SUBSCRIBER_HPP_
31+
#define ZLIB_IMAGE_TRANSPORT__ZLIB_SUBSCRIBER_HPP_
32+
33+
#include <string>
34+
#include <vector>
35+
36+
#include <rclcpp/node.hpp>
37+
#include <rclcpp/subscription_options.hpp>
38+
39+
#include <sensor_msgs/msg/image.hpp>
40+
#include <sensor_msgs/msg/compressed_image.hpp>
41+
#include <image_transport/node_interfaces.hpp>
42+
#include <image_transport/simple_subscriber_plugin.hpp>
43+
44+
#include "zlib_image_transport/zlib_common.hpp"
45+
46+
namespace zlib_image_transport
47+
{
48+
49+
using ParameterEvent = rcl_interfaces::msg::ParameterEvent;
50+
51+
class ZlibSubscriber final
52+
: public image_transport::SimpleSubscriberPlugin<sensor_msgs::msg::CompressedImage>
53+
{
54+
public:
55+
ZlibSubscriber();
56+
virtual ~ZlibSubscriber() = default;
57+
58+
std::string getTransportName() const override;
59+
60+
protected:
61+
void subscribeImpl(
62+
image_transport::RequiredInterfaces node_interfaces,
63+
const std::string & base_topic,
64+
const Callback & callback,
65+
rclcpp::QoS custom_qos,
66+
rclcpp::SubscriptionOptions options) override;
67+
68+
void internalCallback(
69+
const sensor_msgs::msg::CompressedImage::ConstSharedPtr & message,
70+
const Callback & user_cb) override;
71+
72+
rclcpp::Logger logger_;
73+
};
74+
75+
} // namespace zlib_image_transport
76+
77+
#endif // ZLIB_IMAGE_TRANSPORT__ZLIB_SUBSCRIBER_HPP_

zlib_image_transport/package.xml

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<package format="2">
2+
<name>zlib_image_transport</name>
3+
<version>6.2.2</version>
4+
<description>
5+
zlib_image_transport provides a plugin to image_transport for transparently sending images
6+
encoded as zlib (deflate) blobs.
7+
</description>
8+
<maintainer email="acordero@honurobotics.com">Alejandro Hernandez Cordero</maintainer>
9+
<license>BSD</license>
10+
11+
<url type="website">https://docs.ros.org/en/rolling/p/image_transport/</url>
12+
<author>Alejandro Hernandez Cordero</author>
13+
14+
<buildtool_depend>ament_cmake</buildtool_depend>
15+
16+
<depend>image_transport</depend>
17+
<depend>pluginlib</depend>
18+
<depend>rclcpp</depend>
19+
<depend>sensor_msgs</depend>
20+
<depend>zlib</depend>
21+
22+
<test_depend>ament_lint_auto</test_depend>
23+
<test_depend>ament_lint_common</test_depend>
24+
25+
<export>
26+
<build_type>ament_cmake</build_type>
27+
<image_transport plugin="${prefix}/zlib_plugins.xml" />
28+
</export>
29+
</package>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright (c) 2026, Open Source Robotics Foundation, Inc.
2+
// All rights reserved.
3+
//
4+
// Redistribution and use in source and binary forms, with or without
5+
// modification, are permitted provided that the following conditions are met:
6+
//
7+
// * Redistributions of source code must retain the above copyright
8+
// notice, this list of conditions and the following disclaimer.
9+
//
10+
// * Redistributions in binary form must reproduce the above copyright
11+
// notice, this list of conditions and the following disclaimer in the
12+
// documentation and/or other materials provided with the distribution.
13+
//
14+
// * Neither the name of the copyright holder nor the names of its
15+
// contributors may be used to endorse or promote products derived from
16+
// this software without specific prior written permission.
17+
//
18+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19+
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20+
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21+
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22+
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23+
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24+
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25+
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26+
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27+
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28+
// POSSIBILITY OF SUCH DAMAGE.
29+
30+
#include <pluginlib/class_list_macros.hpp>
31+
#include "zlib_image_transport/zlib_publisher.hpp"
32+
#include "zlib_image_transport/zlib_subscriber.hpp"
33+
34+
PLUGINLIB_EXPORT_CLASS(zlib_image_transport::ZlibPublisher, image_transport::PublisherPlugin)
35+
PLUGINLIB_EXPORT_CLASS(zlib_image_transport::ZlibSubscriber, image_transport::SubscriberPlugin)

0 commit comments

Comments
 (0)