Skip to content

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

(opens in a new tab)

ROS2 DistroBuild StatusPackage build
RollingImage: 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)
LyricalImage: 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)
KiltedImage: 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)
JazzyImage: 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)
HumbleImage: 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
Authors
ROS 1 Version:
ROS 2 Version:
License

This project is licensed under the BSD License - see the LICENSE (opens in a new tab) file for details.

Acknowledgments

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

Facts read at commit c58985d

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.