Software
point_cloud_transport
By ROS Perception, from github.com/ros-perception/point_cloud_transport (opens in a new tab)
- Perception
- Library
- BSD-3-Clause
A ROS 2 package for publishing and subscribing to PointCloud2 messages through pluggable transport layers, such as compressed transport for low-bandwidth links.
Facts
- GitHub stars
- 104read on 6 Nov 2026
- Last update
- 22 Oct 2026Newest commit on rolling
- Maintenance
- Activea commit in the last 90 days
- Difficulty
- Intermediate
Checked on GitHub on 6 Nov 2026.
Licenses
- Code
- BSD-3-Clause (opens in a new tab)
Read by Robotheca from LICENSE (opens in a new tab) (BSD-3-Clause) at commit c58985d (opens in a new tab), on 24 Oct 2026.
- Commercial use
- Yes
Overview
What it does: Robotheca's summary
- Lets nodes publish and subscribe to PointCloud2 messages with greater flexibility than plain ROS 2 publishers and subscribers.
- Can be used outside ROS 2 through a codec interface that encodes point clouds to a chosen transport.
- Includes a republish component that converts a topic from one transport to another, such as raw to Draco.
- Exposes its functionality to Python via pybind11 and rclpy serialization.
- Lets users whitelist which transport plugins to load.
- Known transport plugins are Draco (lossy compression), Zlib (lossless) and Zstd (lossless).
Written by Robotheca from the project's README (opens in a new tab) at commit f9fbb77, not by its creator.
The README
The creator's own README, copied as written: README.md by ROS Perception, at commit c58985d, under BSD-3-Clause (opens in a new tab). The original on GitHub (opens in a new tab).
Read the README here
point_cloud_transport
| ROS2 Distro | Build Status | Package build |
|---|---|---|
| Rolling | Image: Build Status (opens in a new tab) (opens in a new tab) | Image: Build Status (opens in a new tab) (opens in a new tab) |
| Lyrical | Image: Build Status (opens in a new tab) (opens in a new tab) | Image: Build Status (opens in a new tab) (opens in a new tab) |
| Kilted | Image: Build Status (opens in a new tab) (opens in a new tab) | Image: Build Status (opens in a new tab) (opens in a new tab) |
| Jazzy | Image: Build Status (opens in a new tab) (opens in a new tab) | Image: Build Status (opens in a new tab) (opens in a new tab) |
| Humble | Image: Build Status (opens in a new tab) (opens in a new tab) | Image: Build Status (opens in a new tab) (opens in a new tab) |
Description
point_cloud_transport (opens in a new tab) is a ROS 2 (opens in a new tab) package for subscribing to and publishing PointCloud2 (opens in a new tab) messages via different transport layers. E.g. it can provide support for transporting point clouds in low-bandwidth environment using Draco (opens in a new tab) compression library.
Usage
point_cloud_transport (opens in a new tab) can be used to publish and subscribe to PointCloud2 (opens in a new tab) messages. At this level of usage, it is similar to using ROS 2 Publishers and Subscribers. Using point_cloud_transport (opens in a new tab) instead of the ROS 2 primitives, however, gives the user much greater flexibility in how point clouds are communicated between nodes.
For complete examples of publishing and subscribing to point clouds using point_cloud_transport (opens in a new tab), see Tutorial (opens in a new tab).
C++
Communicating PointCloud2 messages using point_cloud_transport (opens in a new tab):
#include <rclcpp/node.hpp>
#include <point_cloud_transport/point_cloud_transport.hpp>
void Callback(const sensor_msgs::msg::PointCloud2::ConstSharedPtr& msg)
{
// ... process the message
}
auto node = std::make_shared<rclcpp::Node>();
point_cloud_transport::PointCloudTransport pct(*node);
point_cloud_transport::Subscriber sub = pct.subscribe("in_point_cloud_base_topic", 1, Callback);
point_cloud_transport::Publisher pub = pct.advertise("out_point_cloud_base_topic", 1);
Alternatively, you can use point_cloud_transport outside of ROS2.
#include <sensor_msgs/msg/point_cloud2.hpp>
#include <point_cloud_transport/point_cloud_codec.hpp>
point_cloud_transport::PointCloudCodec codec;
sensor_msgs::msg::PointCloud2 msg;
// ... do some cool pointcloud generation stuff ...
// untyped version (outputs an rclcpp::SerializedMessage)
rclcpp::SerializedMessage serialized_msg;
bool success = codec.encode("draco", msg, serialized_msg);
// OR
// typed version (outputs whatever message your selected transport returns,
// for draco that is a point_cloud_interfaces::msg::CompressedPointCloud2)
point_cloud_interfaces::msg::CompressedPointCloud2 compressed_msg;
bool success = codec.encode("draco", msg, compressed_msg);
Republish rclcpp component
We provide a process to republish any topic speaking in a given transport to a different topic speaking a different transport. e.g. have it subscribe to a topic you recorded encoded using draco and publish it as a raw, decoded message
ros2 run point_cloud_transport republish --ros-args -p in_transport:=raw -p out_transport:=draco --remap in:=input_topic_name --remap out:=ouput_topic_name
Python
The functionality of point_cloud_transport is also exposed to python via pybind11 and rclpy serialization.
Please see publisher.py (opens in a new tab) and subscriber.py (opens in a new tab) for example usage.
Whitelist point cloud transport
This allows you to specify plugins you do want to load (a.k.a. whitelist them).
ros2 run point_cloud_transport_tutorial my_publisher --ros-args -p pct.point_cloud.enable_pub_plugins:=["point_cloud_transport/zlib"]
Known transports
- draco_point_cloud_transport (opens in a new tab): Lossy compression via Google
- zlib_point_cloud_transport (opens in a new tab): Lossless compression via Zlib compression.
- zstd_point_cloud_transport (opens in a new tab): Lossless compression via Zstd compression.
- Did you write one? Don't hesitate and send a pull request adding it to this list!
Authors
ROS 1 Version:
- Jakub Paplhám - Initial work - paplhjak (opens in a new tab)
- Ing. Tomáš Petříček, Ph.D. - Supervisor - tpet (opens in a new tab)
- Martin Pecka - Maintainer - peci1 (opens in a new tab)
ROS 2 Version:
- John D'Angelo - Port to ROS 2 and Maintainer - john-maidbot (opens in a new tab)
- Alejandro Hernández - Port to ROS 2 and Maintainer - ahcorde (opens in a new tab)
License
This project is licensed under the BSD License - see the LICENSE (opens in a new tab) file for details.
Acknowledgments
- image_transport (opens in a new tab) - Provided template of plugin interface
- Draco (opens in a new tab) - Provided compression functionality
Support
For questions/comments please email the maintainer mentioned in package.xml.
If you have found an error in this package, please file an issue at: (opens in a new tab)
Patches are encouraged, and may be submitted by forking this project and submitting a pull request through GitHub. Any help is further development of the project is much appreciated.
Files and versions
- Repository on GitHubgithub.com/ros-perception/point_cloud_transport (opens in a new tab)
- The version Robotheca readc58985d (opens in a new tab)
- Latest releaseNone published on GitHub
Robotheca read the repository at two versions: the summary at f9fbb77 and the facts and the README at c58985d (read on 6 Nov 2026).
Robotheca never hosts the code: each link goes to the creator's own page.
Use it
How to install it, in the creator's words: The project's website (opens in a new tab)
Robotheca doesn't review code. Read it before running it.
Robotheca lists software as a reference: nothing is hosted or run here, and every fact links to where it was read.