|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |
Launch files
Messages
Services
Plugins
Recent questions tagged cloudini_lib at Robotics Stack Exchange
|
cloudini_lib 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
Changelog for package cloudini_lib
1.4.1 (2026-09-29)
- fix: build with MSVC. The V6 encoder called the GCC/Clang builtin
__builtin_clzll; it now usesstd::countl_zero. Output is unchanged. - ci: build and test the library with MSVC on Windows.
1.4.0 (2026-09-28)
-
feat: V6 wire format, now the default (#150)
- V6 codes x, y, z as residual streams against a predictor chosen per chunk (previous point, point K back, LOCO-I median of the two, second order), skips no-return points with a validity mask, and gives every other float field its own stream. With ZSTD, the median output is 13% smaller than V5 on 13 LiDAR/depth datasets.
- Encoders write V6 by default. Decoders from 1.3.1 and earlier
cannot read it: select version 5 for them
(
--encoding-version 5,encoding_version:=5,cloudini_encoding_version: 5, orEncodingInfo::version = 5). - Resolutions are refined to the data by default
(
RefineResolutionsToData): integer-valued floats such as intensity are stored at resolution 1, with the same error bound. On a 2.8 GB warehouse bag, V6 with refinement is 24% smaller than 1.3.1 and decodes 1.75x faster.cloudini_rosbag_converter --no-refineturns it off. - V5: adaptive integer sections sized for the stage-2 compressor (same format).
- Faster decode of V4, V5 and V6 (same bytes on the wire): up to +59% for V4 clouds with integer fields.
-
PointcloudEncoderCachekeeps one encoder per stream (rosbag converter, topic converter, point_cloud_transport plugin,SerializeCompressedPointCloud2). - Fixes: heap overflow on crafted V5 RLE runs; writes past the output for fields beyond point_step; misaligned loads of packed fields; signed overflow on corrupted input; encoding versions no decoder reads are rejected by the encoder.
- Tools:
mcap_codec_benchmarkV6 and V6-viz modes,--profileand--no-refine;cloudini_rosbag_converter --no-refine, profile files read whole.
-
fix: a cloud from a newer Cloudini fails with an error that asks to update Cloudini (library, ROS package or Foxglove extension), instead of "Unsupported encoding version"
-
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>>
-
fix: parse/format header resolution locale-independently (#123) (#145) The YAML header resolution was parsed with std::stof, which honors the C locale: with a ',' decimal separator (e.g. de_DE.UTF-8) "0.001" was read as 0 and FieldDecoderFloatN_Lossy threw during decoding. The writer used an ostringstream, which follows the global C++ locale (std::locale::global) and could emit "0,001" or grouped integers such as "1.234.567".
- EncodingInfoToYAML: imbue the stream with std::locale::classic() and write resolutions with the shortest precision that round-trips exactly.
- EncodingInfoFromYAML: parse resolution with a classic-locale stream.
- YAML::Node::parseScalar: imbue std::locale::classic(). Streams are used instead of std::from_chars/to_chars for float because those are not available on all supported standard libraries (older libc++). Add regression tests that switch to a comma-decimal locale (C locale only, and C + global C++ locale), skipped if no such locale is installed. Claude-Session: https://claude.ai/code/session_01EAorWbhzp56yxAVUF7M3Dd Co-authored-by: Claude <<noreply@anthropic.com>>
-
Contributors: Davide Faconti
1.3.1 (2026-09-20)
- build: make cloudini_lib embeddable with add_subdirectory / FetchContent (#142) Reuses zstd/lz4 targets defined by a parent project, ignores an inherited ament_cmake, and keeps the build type, tests, tools, benchmarks, PCL and install rules out of the parent. New options CLOUDINI_WITH_PCL and CLOUDINI_INSTALL; cloudini::cloudini_lib is
File truncated at 100 lines see the full file
Dependant Packages
| Name | Deps |
|---|---|
| cloudini_ros |