|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |
System Dependencies
Dependant Packages
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_ros at Robotics Stack Exchange
|
cloudini_ros package from cloudini repocloudini_lib cloudini_ros |
ROS Distro
|
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
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/PointCloud2point_cloud_interfaces/msg/CompressedPointCloud2
It is genrally more efficient than using the point_cloud_transport because the latter would:
- Receive a serialized DDS message.
- Convert that to CompressedPointCloud2.
- Do the actual decompression.
- 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 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) orcloudini_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.
- 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
- 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
Package Dependencies
| Deps | Name |
|---|---|
| pluginlib | |
| ament_cmake | |
| ament_lint_common | |
| ament_lint_auto | |
| cloudini_lib | |
| point_cloud_interfaces | |
| point_cloud_transport | |
| sensor_msgs | |
| rclcpp | |
| rclcpp_components | |
| rosbag2_cpp | |
| pcl_conversions |