Point cloud type transition#
Tracked in Point Cloud Type Transition #6708.
Autoware transitions from using raw memcpy operations and using PointCloud2Iterator<> to using Point Cloud Message Wrapper.
This way the point cloud messages can be edited in-place with a std::vector<>-like wrapper.
The only downside is that this requires strong type definitions for the point cloud message fields.
We have already made the compatibility requirements for PointXYZIRC and PointXYZIRCAEDT types with autoware_universe#6996.
Now we need to start using this wrapper in the rest of the codebase.
We also need to provide a tool to convert point cloud messages from outside types to the Autoware expected types.
The point type adapter node of Autoware.Auto is a reference implementation.
For the fields of each point type and their meaning, see Point cloud fields.
Transition#
The plan applies to each node:
- 2026 May: Switch all memcpy usages to
PointCloud2Iterator<>. - 2026 June: Add two paths for the codebase: check the full compatibility of the point type with the expected point type.
- If compatible, use the wrapper.
- If not compatible, use
PointCloud2Iterator<>and print warnings.
- 2026 June: Add a node that converts point cloud messages from outside types to the Autoware expected types.
- 2026 December: Drop the
PointCloud2Iterator<>usage.
Status in Autoware 2.0.0#
The issue is open. The steps of May and June 2026 are not complete in Autoware 2.0.0 (autoware_core 1.10.0 and autoware_universe 0.53.1).
What is ready:
- The
autoware_point_typespackage of Autoware Core defines the point typesPointXYZI,PointXYZIRC,PointXYZIRCT,PointXYZIRADRT,PointXYZIRCAEDT, andPointXYZCPE. It registers the types for PCL and defines field generators forpoint_cloud_msg_wrapper. - The
memory.hppheader of this package has a layout check for each type, for exampleis_data_layout_compatible_with_point_xyzirc(). This check is the compatibility test of the second step. - Some nodes of
autoware_pointcloud_preprocessoralready use the wrapper: the concatenation nodes and the time synchronizer.
What is left:
- Many nodes still copy point data with
memcpy, for example inautoware_ground_filter,autoware_crop_box_filter,autoware_pointcloud_preprocessor, andautoware_compare_map_segmentation. - Many nodes still read point data with
PointCloud2Iterator<>, for example inautoware_pointcloud_preprocessor,autoware_probabilistic_occupancy_grid_map, andautoware_image_projection_based_fusion. - The ring outlier filter of
autoware_pointcloud_preprocessorreads and writes the raw point buffer directly, with no wrapper. - Autoware 2.0.0 has no node that converts outside point types to the Autoware point types.