Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
jazzy

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
kilted

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
lyrical

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
rolling

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released UNRELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro ardent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro bouncy showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro crystal showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro eloquent showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro dashing showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro galactic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro foxy showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro iron showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro lunar showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro jade showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro indigo showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro hydro showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro kinetic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro melodic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange

No version for distro noetic showing humble. Known supported distros are highlighted in the buttons above.
Package symbol

cloudini_ros package from cloudini repo

cloudini_lib cloudini_ros

ROS Distro
humble

Package Summary

Version 1.4.1
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Checkout URI https://github.com/facontidavide/cloudini.git
VCS Type git
VCS Version main
Last Updated 2026-09-28
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Main library of Cloudini, the pointcloud compression library

Maintainers

  • Davide Faconti

Authors

  • Davide Faconti

ROS2 specific libraries and utilities

cloudini_topic_converter

A simple node that subscribes to one of these two topic types and publishes the other:

  • sensor_msgs/msg/PointCloud2
  • point_cloud_interfaces/msg/CompressedPointCloud2

It is genrally more efficient than using the point_cloud_transport because the latter would:

  1. Receive a serialized DDS message.
  2. Convert that to CompressedPointCloud2.
  3. Do the actual decompression.
  4. Convert PointCloud2 to a serialized DDS message.

Instead, we work directly with raw serialized messages, bypassing the ROS type system, skipping steps 2 and 4 in the list above.

Parameters

  • topic_input (string): name of the topic to subscribe to.
  • topic_output (string): name of the topic to publish into.
  • compressing(bool): true if you are subscribing to a regular pointcloud2, and you want to compress it. False if you are subscribing to a compressed topic and you want to decompress it.
  • resolution (double): resolution of floating point fields in meters. Default: 0.001

Example usage

To convert a regular sensor_msgs/msg/PointCloud2 to a compressed one:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=true  \
    -p topic_input:=/points  \
    -p topic_output:=/points/compressed

To decompress that topic back in to its original form:

ros2 run cloudini_ros cloudini_topic_converter --ros-args \
    -p compressing:=false  \
    -p topic_input:=/points/compressed  \
    -p topic_output:=/points/decompressed

Composable Node (Component Container)

The topic converter is also available as a composable node, allowing it to be loaded into a component container for reduced overhead when running multiple nodes in the same process.

# Start a component container
ros2 run rclcpp_components component_container

# Load the topic converter as a component
ros2 component load /ComponentManager cloudini_ros CloudiniPointcloudConverter \
  -p compressing:=true \
  -p topic_input:=/points \
  -p topic_output:=/points/compressed \
  -p resolution:=0.001

Or via launch file:

from launch_ros.actions import ComposableNodeContainer, LoadComposableNodes
from launch_ros.descriptions import ComposableNode

container = ComposableNodeContainer(
    name='cloudini_container',
    namespace='',
    package='rclcpp_components',
    executable='component_container',
)

converter = LoadComposableNodes(
    target_container='cloudini_container',
    composable_node_descriptions=[
        ComposableNode(
            package='cloudini_ros',
            plugin='CloudiniPointcloudConverter',
            parameters=[{
                'compressing': True,
                'topic_input': '/points',
                'topic_output': '/points/compressed',
                'resolution': 0.001,
            }],
        ),
    ],
)

cloudini_rosbag_converter

A command line tool that, given a rosbag (limited to MCAP format), converts all sensor_msgs/msg/PointCloud2 topics into compressed point_cloud_interfaces/msg/CompressedPointCloud2 of vice-versa.

Encoding/decoding is faster than general-purpose compression algorithms and achieves a better compression ratio at 1mm resolution.

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package cloudini_ros

1.4.1 (2026-09-29)

  • Follows cloudini_lib 1.4.1 (MSVC build fix); no changes in this package.

1.4.0 (2026-09-28)

  • feat: V6 wire format, now the default (#150)
    • The topic converter and the point_cloud_transport plugin write V6 and refine the resolutions to the data by default. Subscribers on cloudini 1.3.1 or earlier cannot decode V6: set encoding_version:=5 (topic converter) or cloudini_encoding_version: 5 (plugin) for them.
    • One encoder per topic (PointcloudEncoderCache), so V6 reuses its per-chunk choices between clouds.
    • The plugin validates cloudini_encoding_version (point_cloud_transport ignores the parameter's range) and no longer zero-fills a raw-sized buffer per cloud.
  • fix: keep packed rgb/rgba FLOAT32 fields lossless (#135) (#146) Some ROS drivers pack RGB(A) as uint32 bits reinterpreted into a FLOAT32 field named "rgb"/"rgba". Every path that assigned a default resolution to FLOAT32 fields quantized these bits, destroying the colors. Add Cloudini::isPackedColorField() / defaultFieldResolution() in basic_types.hpp and use them in applyResolutionProfile, the PCL ConvertToEncodingInfo, the WASM encode helpers and the ROS ConvertToEncodingInfo. An explicit resolution profile entry still wins. Decoding needs no change: resolution is stored in the header. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
  • Contributors: Davide Faconti

1.3.1 (2026-09-20)

  • No changes; released together with cloudini_lib 1.3.1

1.3.0 (2026-09-20)

  • Fix license tags in package.xml According to ros_license_toolkit[\^1] license tags should be in SPDX list of licenses. In case of claudini_ros, the license version was missing and in case of claudini_lib, the license name was not "exact". This commit changes the license tags to use SPDX license identifiers. Note that it doesn't fix the failures reported in claudini_lib in the output below: [cloudini_ros] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache. LicensesInCodeCheck WARNING For the following files, please change the License Tag in the package file to SPDX format: 'include/cloudini_plugin/cloudini_publisher_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_plugin/cloudini_subscriber_plugin.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/cloudini_subscriber_pcl.hpp' is of Apache-2.0 but its Tag is Apache. 'include/cloudini_ros/conversion_utils.hpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_publisher_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_pcl.cpp' is of Apache-2.0 but its Tag is Apache. 'src/cloudini_subscriber_plugin.cpp' is of Apache-2.0 but its Tag is Apache. 'src/conversion_utils.cpp' is of Apache-2.0 but its Tag is Apache. 'src/plugin_manifest.cpp' is of Apache-2.0 but its Tag is Apache. 'src/topic_converter.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.cpp' is of Apache-2.0 but its Tag is Apache. 'test/draco_helper.hpp' is of Apache-2.0 but its Tag is Apache. 'test/rosbag_benchmark.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_cloudini_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_direct_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_publisher.cpp' is of Apache-2.0 but its Tag is Apache. 'test/test_plugin_subscriber.cpp' is of Apache-2.0 but its Tag is Apache. LicenseFilesReferencedCheck SUCCESS All license declaration are referenced by a tag. --------------------[cloudini_lib] git hash of (/home/src/github.com/facontidavide/cloudini): d202e5255d12519ff1f3db1dac4df3ca0e550ee7 SchemaCheck SUCCESS Detected package.xml version 3, validation of scheme successful. LicenseTagExistsCheck SUCCESS Found licenses ['Apache 2.0'] LicenseTagIsInSpdxListCheck WARNING Licenses ['Apache 2.0'] are not in SPDX list of licenses. Make sure to exactly match one of https://spdx.org/licenses/. LicenseTextExistsCheck WARNING Since they are not in the SPDX list, we can not check if these tags have the correct license text: 'Apache 2.0': License text file '../LICENSE' is of license Apache-2.0 but tag is Apache 2.0. LicensesInCodeCheck FAILURE The following files contain licenses that are not covered by any license tag: 'benchmarks/pcd_benchmark.cpp': ['MIT'] 'cmake/CPM.cmake':

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged cloudini_ros at Robotics Stack Exchange