Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
- Junya Sasaki
Authors
- Open Perception
- Julius Kammerl
- William Woodall
autoware_pointcloud_preprocessor
Purpose
The autoware_pointcloud_preprocessor is a package that includes the following filters:
- removing outlier points
- cropping
- concatenating pointclouds
- correcting distortion
- downsampling
- densifying pointclouds
Inner-workings / Algorithms
Detail description of each filter’s algorithm is in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| concatenate_data | subscribe multiple pointclouds and concatenate them into a pointcloud | link |
| crop_box_filter | remove points within a given box | link |
| distortion_corrector | compensate pointcloud distortion caused by ego vehicle’s movement during 1 scan | link |
| downsample_filter | downsampling input pointcloud | link |
| outlier_filter | remove points caused by hardware problems, rain drops and small insects as a noise | link |
| polar_voxel_noise_filter | remove point cloud noise using polar-coordinate voxels and return-type-aware rules | link |
| passthrough_filter | remove points on the outside of a range in given field (e.g. x, y, z, intensity) | link |
| pointcloud_accumulator | accumulate pointclouds for a given amount of time | link |
| pointcloud_densifier | enhance sparse point clouds by using information from previous frames | link |
| vector_map_filter | remove points on the outside of lane by using vector map | link |
| vector_map_inside_area_filter | remove points inside of vector map area that has given type by parameter | link |
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/points |
sensor_msgs::msg::PointCloud2 |
reference points |
~/input/indices |
pcl_msgs::msg::Indices |
reference indices |
Output
| Name | Type | Description |
|---|---|---|
~/output/points |
sensor_msgs::msg::PointCloud2 |
filtered points |
Parameters
Node Parameters
| Name | Type | Default Value | Description |
|---|---|---|---|
input_frame |
string | ” “ | input frame id |
output_frame |
string | ” “ | output frame id |
max_queue_size |
int | 5 | max queue size of input/output topics |
use_indices |
bool | false | flag to use pointcloud indices |
latched_indices |
bool | false | flag to latch pointcloud indices |
approximate_sync |
bool | false | flag to use approximate sync option |
Assumptions / Known limits
autoware::pointcloud_preprocessor::Filter is implemented based on pcl_perception [1] because
of this issue.
Examples
Examples are not built by default, so release builds do not pay for them. Enable them with
-DBUILD_EXAMPLES=ON:
colcon build --packages-select autoware_pointcloud_preprocessor \
--cmake-args -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON
concatenate_without_ros_node
Concatenates three point clouds through the concatenate_core library alone: no node, no executor
and no spinning. Clouds, transforms and twist are handed to the core directly, so every input is
guaranteed to be processed - unlike a pub/sub pipeline, where a subscriber that comes up late
silently misses messages. This makes it a convenient starting point for replaying recorded data
deterministically, and for measuring concatenation cost on its own.
./build/autoware_pointcloud_preprocessor/concatenate_without_ros_node [points_per_cloud] [iterations] [warmup]
| Argument | Default | Description |
|---|---|---|
points_per_cloud |
40000 | points in each of the three source clouds |
iterations |
200 | timed concatenations |
warmup |
20 | untimed runs before measuring |
The example verifies the concatenated cloud and the diagnostics, then reports the time spent inside
combine_pointclouds() only. Building the clouds, the transforms and the grouping all happen
outside the measured region.
```text concatenated cloud frame_id : base_link stamp : 1000
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter (#13384)
* feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter Derive CropBoxFilterComponent from AgnocastFilter, the FilterBase<autoware::agnocast_wrapper::Node> instantiation, and register it through autoware_agnocast_wrapper_register_node on an agnocast-only callback-isolated executor. crop_box_filter_node.launch.xml resolves LD_PRELOAD through agnocast_env.launch.xml. DiagnosticsBase::add_to_interface() takes an autoware_utils::DiagnosticsInterface, an rclcpp-only type, and a virtual method cannot be a template. The diagnostic classes are therefore templatized on the node type, with [using X = BasicX<rclcpp::Node>]{.title-ref} leaving every filter still on rclcpp unchanged.
* refactor(autoware_pointcloud_preprocessor): rename the Basic diagnostics templates to Generic ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter (#13383)
* feat(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT> Turn [Filter]{.title-ref} into [FilterBase<NodeT>]{.title-ref} so filter nodes can be moved onto [autoware::agnocast_wrapper::Node]{.title-ref} one at a time. [Filter]{.title-ref} stays as a class deriving from [FilterBase<rclcpp::Node>]{.title-ref}, so every node that has not been migrated keeps compiling unchanged.
- feat(autoware_pointcloud_preprocessor): let FilterBase run on an agnocast-only executor
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter
- fix(autoware_pointcloud_preprocessor): use the buffer-only TransformListener in FilterBase
* refactor(autoware_pointcloud_preprocessor): keep ManagedTransformBuffer in FilterBase ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter (#13072)
- refactor(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT>
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter
- style(pre-commit): autofix
* feat(autoware_pointcloud_preprocessor): register voxel_grid_downsample_filter through the agnocast wrapper The node now derives from agnocast_wrapper::Node, so under ENABLE_AGNOCAST=1 it needs the generated main that calls agnocast::init(). Loaded into a component container instead, the AgnocastOnly executor aborts the whole container because the agnocast signal handler is not installed in that process. The macro falls back to rclcpp_components_register_node at ENABLE_AGNOCAST=0, so the non-agnocast build is unchanged. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
test(cuda_pointcloud_preprocessor): cover capacity bounds behavior (#13137)
* perf(cuda_pointcloud_preprocessor): avoid runtime thrust allocations Thrust's algorithm calls allocate temporary device memory on every frame. Replace them with explicit kernels and CUB calls running on storage that is allocated once at startup:
- thrust_stream::fill / fill_n become a fill kernel launched on the stream
- thrust::inclusive_scan becomes cub::DeviceScan::InclusiveSum
- thrust_stream::count becomes cub::DeviceReduce::Sum over a transform iterator, accumulating the three diagnostic counters into one device buffer that is copied back in a single transfer The CUB calls share a single scratch workspace, sized at startup to the largest requirement among the sort, the scan and the reductions. The twist struct counts become locals, since they are only used within process(). The counting iterator is thrust::transform_iterator rather than cub::TransformInputIterator, since CCCL 3.0 (CUDA 13, used on jazzy) removed the latter along with its header.
* refactor(cuda_pointcloud_preprocessor): name the processing stat indices Hoist the device_processing_stats_ layout into class-scope constants so that the buffer sizing in initializeBuffers() and the readback in process() share one definition instead of repeating a bare 3. Co-Authored-By: Claude Opus 5 (1M context) <<noreply@anthropic.com>>
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/approximate_downsample_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/approximate_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- approximate_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/approximate_downsample_filter_node.param.yaml]
- launch/blockage_diag_node.launch.xml
-
- input_topic_name [default: pointcloud_raw_ex]
- output_topic_name [default: blockage_diag/pointcloud]
- blockage_diagnostics_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/blockage_diag_node.param.yaml]
- launch/concatenate_and_time_sync_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_and_time_sync_node.param.yaml]
- launch/concatenate_pointcloud.launch.xml
-
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_pointclouds.param.yaml]
- launch/crop_box_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/self_cropped/pointcloud_ex]
- input_frame [default: base_link]
- output_frame [default: base_link]
- crop_box_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/crop_box_filter_node.param.yaml]
- launch/distortion_corrector_node.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/mirror_cropped/pointcloud_ex]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- input/imu [default: /sensing/imu/imu_data]
- output/pointcloud [default: /sensing/lidar/top/rectified/pointcloud_ex]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/distortion_corrector_node.param.yaml]
- launch/dual_return_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- dual_return_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/dual_return_outlier_filter_node.param.yaml]
- launch/lanelet2_map_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: detection_area/pointcloud]
- output_pointcloud [default: vector_map_filtered/pointcloud]
- lanelet2_map_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/lanelet2_map_filter_node.param.yaml]
- launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/pickup_based_voxel_grid_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- pickup_based_voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pickup_based_voxel_grid_downsample_filter_node.param.yaml]
- launch/pointcloud_accumulator_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud]
- output_topic_name [default: /sensing/lidar/top/pointcloud_accumulated]
- input_frame [default: base_link]
- output_frame [default: base_link]
- pointcloud_accumulator_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pointcloud_accumulator_node.param.yaml]
- launch/polar_voxel_noise_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_noise_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_noise_filter_node.param.yaml]
- launch/polar_voxel_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/preprocessor.launch.xml
-
- input_points_raw_list [default: ['/points_raw']]
- output_points_raw [default: /points_raw/cropbox/filtered]
- tf_output_frame [default: base_link]
- launch/radius_search_2d_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_filtered]
- input_frame [default: base_link]
- output_frame [default: base_link]
- radius_search_2d_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/radius_search_2d_outlier_filter_node.param.yaml]
- launch/random_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/random_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- random_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/random_downsample_filter_node.param.yaml]
- launch/ring_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_ring_filtered]
- input_frame [default: ]
- output_frame [default: ]
- ring_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/ring_outlier_filter_node.param.yaml]
- launch/ring_passthrough_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/ring_passthrough_filtered/pointcloud]
- input_frame [default: ]
- output_frame [default: base_link]
- passthrough_filter_uint16_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/passthrough_filter_uint16_node.param.yaml]
- launch/time_synchronizer_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/time_synchronizer_node.param.yaml]
- launch/vector_map_inside_area_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: compare_map_filtered/pointcloud]
- output_pointcloud [default: vector_map_inside_area_filtered/pointcloud]
- vector_map_inside_area_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/vector_map_inside_area_filter_node.param.yaml]
- launch/voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/voxel_grid_downsample_filter/pointcloud]
- input_frame [default: base_link]
- output_frame [default: base_link]
- voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_downsample_filter_node.param.yaml]
- launch/voxel_grid_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- voxel_grid_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_outlier_filter_node.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_pointcloud_preprocessor at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
- Junya Sasaki
Authors
- Open Perception
- Julius Kammerl
- William Woodall
autoware_pointcloud_preprocessor
Purpose
The autoware_pointcloud_preprocessor is a package that includes the following filters:
- removing outlier points
- cropping
- concatenating pointclouds
- correcting distortion
- downsampling
- densifying pointclouds
Inner-workings / Algorithms
Detail description of each filter’s algorithm is in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| concatenate_data | subscribe multiple pointclouds and concatenate them into a pointcloud | link |
| crop_box_filter | remove points within a given box | link |
| distortion_corrector | compensate pointcloud distortion caused by ego vehicle’s movement during 1 scan | link |
| downsample_filter | downsampling input pointcloud | link |
| outlier_filter | remove points caused by hardware problems, rain drops and small insects as a noise | link |
| polar_voxel_noise_filter | remove point cloud noise using polar-coordinate voxels and return-type-aware rules | link |
| passthrough_filter | remove points on the outside of a range in given field (e.g. x, y, z, intensity) | link |
| pointcloud_accumulator | accumulate pointclouds for a given amount of time | link |
| pointcloud_densifier | enhance sparse point clouds by using information from previous frames | link |
| vector_map_filter | remove points on the outside of lane by using vector map | link |
| vector_map_inside_area_filter | remove points inside of vector map area that has given type by parameter | link |
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/points |
sensor_msgs::msg::PointCloud2 |
reference points |
~/input/indices |
pcl_msgs::msg::Indices |
reference indices |
Output
| Name | Type | Description |
|---|---|---|
~/output/points |
sensor_msgs::msg::PointCloud2 |
filtered points |
Parameters
Node Parameters
| Name | Type | Default Value | Description |
|---|---|---|---|
input_frame |
string | ” “ | input frame id |
output_frame |
string | ” “ | output frame id |
max_queue_size |
int | 5 | max queue size of input/output topics |
use_indices |
bool | false | flag to use pointcloud indices |
latched_indices |
bool | false | flag to latch pointcloud indices |
approximate_sync |
bool | false | flag to use approximate sync option |
Assumptions / Known limits
autoware::pointcloud_preprocessor::Filter is implemented based on pcl_perception [1] because
of this issue.
Examples
Examples are not built by default, so release builds do not pay for them. Enable them with
-DBUILD_EXAMPLES=ON:
colcon build --packages-select autoware_pointcloud_preprocessor \
--cmake-args -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON
concatenate_without_ros_node
Concatenates three point clouds through the concatenate_core library alone: no node, no executor
and no spinning. Clouds, transforms and twist are handed to the core directly, so every input is
guaranteed to be processed - unlike a pub/sub pipeline, where a subscriber that comes up late
silently misses messages. This makes it a convenient starting point for replaying recorded data
deterministically, and for measuring concatenation cost on its own.
./build/autoware_pointcloud_preprocessor/concatenate_without_ros_node [points_per_cloud] [iterations] [warmup]
| Argument | Default | Description |
|---|---|---|
points_per_cloud |
40000 | points in each of the three source clouds |
iterations |
200 | timed concatenations |
warmup |
20 | untimed runs before measuring |
The example verifies the concatenated cloud and the diagnostics, then reports the time spent inside
combine_pointclouds() only. Building the clouds, the transforms and the grouping all happen
outside the measured region.
```text concatenated cloud frame_id : base_link stamp : 1000
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter (#13384)
* feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter Derive CropBoxFilterComponent from AgnocastFilter, the FilterBase<autoware::agnocast_wrapper::Node> instantiation, and register it through autoware_agnocast_wrapper_register_node on an agnocast-only callback-isolated executor. crop_box_filter_node.launch.xml resolves LD_PRELOAD through agnocast_env.launch.xml. DiagnosticsBase::add_to_interface() takes an autoware_utils::DiagnosticsInterface, an rclcpp-only type, and a virtual method cannot be a template. The diagnostic classes are therefore templatized on the node type, with [using X = BasicX<rclcpp::Node>]{.title-ref} leaving every filter still on rclcpp unchanged.
* refactor(autoware_pointcloud_preprocessor): rename the Basic diagnostics templates to Generic ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter (#13383)
* feat(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT> Turn [Filter]{.title-ref} into [FilterBase<NodeT>]{.title-ref} so filter nodes can be moved onto [autoware::agnocast_wrapper::Node]{.title-ref} one at a time. [Filter]{.title-ref} stays as a class deriving from [FilterBase<rclcpp::Node>]{.title-ref}, so every node that has not been migrated keeps compiling unchanged.
- feat(autoware_pointcloud_preprocessor): let FilterBase run on an agnocast-only executor
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter
- fix(autoware_pointcloud_preprocessor): use the buffer-only TransformListener in FilterBase
* refactor(autoware_pointcloud_preprocessor): keep ManagedTransformBuffer in FilterBase ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter (#13072)
- refactor(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT>
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter
- style(pre-commit): autofix
* feat(autoware_pointcloud_preprocessor): register voxel_grid_downsample_filter through the agnocast wrapper The node now derives from agnocast_wrapper::Node, so under ENABLE_AGNOCAST=1 it needs the generated main that calls agnocast::init(). Loaded into a component container instead, the AgnocastOnly executor aborts the whole container because the agnocast signal handler is not installed in that process. The macro falls back to rclcpp_components_register_node at ENABLE_AGNOCAST=0, so the non-agnocast build is unchanged. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
test(cuda_pointcloud_preprocessor): cover capacity bounds behavior (#13137)
* perf(cuda_pointcloud_preprocessor): avoid runtime thrust allocations Thrust's algorithm calls allocate temporary device memory on every frame. Replace them with explicit kernels and CUB calls running on storage that is allocated once at startup:
- thrust_stream::fill / fill_n become a fill kernel launched on the stream
- thrust::inclusive_scan becomes cub::DeviceScan::InclusiveSum
- thrust_stream::count becomes cub::DeviceReduce::Sum over a transform iterator, accumulating the three diagnostic counters into one device buffer that is copied back in a single transfer The CUB calls share a single scratch workspace, sized at startup to the largest requirement among the sort, the scan and the reductions. The twist struct counts become locals, since they are only used within process(). The counting iterator is thrust::transform_iterator rather than cub::TransformInputIterator, since CCCL 3.0 (CUDA 13, used on jazzy) removed the latter along with its header.
* refactor(cuda_pointcloud_preprocessor): name the processing stat indices Hoist the device_processing_stats_ layout into class-scope constants so that the buffer sizing in initializeBuffers() and the readback in process() share one definition instead of repeating a bare 3. Co-Authored-By: Claude Opus 5 (1M context) <<noreply@anthropic.com>>
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/approximate_downsample_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/approximate_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- approximate_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/approximate_downsample_filter_node.param.yaml]
- launch/blockage_diag_node.launch.xml
-
- input_topic_name [default: pointcloud_raw_ex]
- output_topic_name [default: blockage_diag/pointcloud]
- blockage_diagnostics_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/blockage_diag_node.param.yaml]
- launch/concatenate_and_time_sync_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_and_time_sync_node.param.yaml]
- launch/concatenate_pointcloud.launch.xml
-
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_pointclouds.param.yaml]
- launch/crop_box_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/self_cropped/pointcloud_ex]
- input_frame [default: base_link]
- output_frame [default: base_link]
- crop_box_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/crop_box_filter_node.param.yaml]
- launch/distortion_corrector_node.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/mirror_cropped/pointcloud_ex]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- input/imu [default: /sensing/imu/imu_data]
- output/pointcloud [default: /sensing/lidar/top/rectified/pointcloud_ex]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/distortion_corrector_node.param.yaml]
- launch/dual_return_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- dual_return_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/dual_return_outlier_filter_node.param.yaml]
- launch/lanelet2_map_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: detection_area/pointcloud]
- output_pointcloud [default: vector_map_filtered/pointcloud]
- lanelet2_map_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/lanelet2_map_filter_node.param.yaml]
- launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/pickup_based_voxel_grid_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- pickup_based_voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pickup_based_voxel_grid_downsample_filter_node.param.yaml]
- launch/pointcloud_accumulator_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud]
- output_topic_name [default: /sensing/lidar/top/pointcloud_accumulated]
- input_frame [default: base_link]
- output_frame [default: base_link]
- pointcloud_accumulator_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pointcloud_accumulator_node.param.yaml]
- launch/polar_voxel_noise_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_noise_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_noise_filter_node.param.yaml]
- launch/polar_voxel_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/preprocessor.launch.xml
-
- input_points_raw_list [default: ['/points_raw']]
- output_points_raw [default: /points_raw/cropbox/filtered]
- tf_output_frame [default: base_link]
- launch/radius_search_2d_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_filtered]
- input_frame [default: base_link]
- output_frame [default: base_link]
- radius_search_2d_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/radius_search_2d_outlier_filter_node.param.yaml]
- launch/random_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/random_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- random_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/random_downsample_filter_node.param.yaml]
- launch/ring_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_ring_filtered]
- input_frame [default: ]
- output_frame [default: ]
- ring_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/ring_outlier_filter_node.param.yaml]
- launch/ring_passthrough_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/ring_passthrough_filtered/pointcloud]
- input_frame [default: ]
- output_frame [default: base_link]
- passthrough_filter_uint16_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/passthrough_filter_uint16_node.param.yaml]
- launch/time_synchronizer_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/time_synchronizer_node.param.yaml]
- launch/vector_map_inside_area_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: compare_map_filtered/pointcloud]
- output_pointcloud [default: vector_map_inside_area_filtered/pointcloud]
- vector_map_inside_area_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/vector_map_inside_area_filter_node.param.yaml]
- launch/voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/voxel_grid_downsample_filter/pointcloud]
- input_frame [default: base_link]
- output_frame [default: base_link]
- voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_downsample_filter_node.param.yaml]
- launch/voxel_grid_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- voxel_grid_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_outlier_filter_node.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_pointcloud_preprocessor at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
- Junya Sasaki
Authors
- Open Perception
- Julius Kammerl
- William Woodall
autoware_pointcloud_preprocessor
Purpose
The autoware_pointcloud_preprocessor is a package that includes the following filters:
- removing outlier points
- cropping
- concatenating pointclouds
- correcting distortion
- downsampling
- densifying pointclouds
Inner-workings / Algorithms
Detail description of each filter’s algorithm is in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| concatenate_data | subscribe multiple pointclouds and concatenate them into a pointcloud | link |
| crop_box_filter | remove points within a given box | link |
| distortion_corrector | compensate pointcloud distortion caused by ego vehicle’s movement during 1 scan | link |
| downsample_filter | downsampling input pointcloud | link |
| outlier_filter | remove points caused by hardware problems, rain drops and small insects as a noise | link |
| polar_voxel_noise_filter | remove point cloud noise using polar-coordinate voxels and return-type-aware rules | link |
| passthrough_filter | remove points on the outside of a range in given field (e.g. x, y, z, intensity) | link |
| pointcloud_accumulator | accumulate pointclouds for a given amount of time | link |
| pointcloud_densifier | enhance sparse point clouds by using information from previous frames | link |
| vector_map_filter | remove points on the outside of lane by using vector map | link |
| vector_map_inside_area_filter | remove points inside of vector map area that has given type by parameter | link |
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/points |
sensor_msgs::msg::PointCloud2 |
reference points |
~/input/indices |
pcl_msgs::msg::Indices |
reference indices |
Output
| Name | Type | Description |
|---|---|---|
~/output/points |
sensor_msgs::msg::PointCloud2 |
filtered points |
Parameters
Node Parameters
| Name | Type | Default Value | Description |
|---|---|---|---|
input_frame |
string | ” “ | input frame id |
output_frame |
string | ” “ | output frame id |
max_queue_size |
int | 5 | max queue size of input/output topics |
use_indices |
bool | false | flag to use pointcloud indices |
latched_indices |
bool | false | flag to latch pointcloud indices |
approximate_sync |
bool | false | flag to use approximate sync option |
Assumptions / Known limits
autoware::pointcloud_preprocessor::Filter is implemented based on pcl_perception [1] because
of this issue.
Examples
Examples are not built by default, so release builds do not pay for them. Enable them with
-DBUILD_EXAMPLES=ON:
colcon build --packages-select autoware_pointcloud_preprocessor \
--cmake-args -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON
concatenate_without_ros_node
Concatenates three point clouds through the concatenate_core library alone: no node, no executor
and no spinning. Clouds, transforms and twist are handed to the core directly, so every input is
guaranteed to be processed - unlike a pub/sub pipeline, where a subscriber that comes up late
silently misses messages. This makes it a convenient starting point for replaying recorded data
deterministically, and for measuring concatenation cost on its own.
./build/autoware_pointcloud_preprocessor/concatenate_without_ros_node [points_per_cloud] [iterations] [warmup]
| Argument | Default | Description |
|---|---|---|
points_per_cloud |
40000 | points in each of the three source clouds |
iterations |
200 | timed concatenations |
warmup |
20 | untimed runs before measuring |
The example verifies the concatenated cloud and the diagnostics, then reports the time spent inside
combine_pointclouds() only. Building the clouds, the transforms and the grouping all happen
outside the measured region.
```text concatenated cloud frame_id : base_link stamp : 1000
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter (#13384)
* feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter Derive CropBoxFilterComponent from AgnocastFilter, the FilterBase<autoware::agnocast_wrapper::Node> instantiation, and register it through autoware_agnocast_wrapper_register_node on an agnocast-only callback-isolated executor. crop_box_filter_node.launch.xml resolves LD_PRELOAD through agnocast_env.launch.xml. DiagnosticsBase::add_to_interface() takes an autoware_utils::DiagnosticsInterface, an rclcpp-only type, and a virtual method cannot be a template. The diagnostic classes are therefore templatized on the node type, with [using X = BasicX<rclcpp::Node>]{.title-ref} leaving every filter still on rclcpp unchanged.
* refactor(autoware_pointcloud_preprocessor): rename the Basic diagnostics templates to Generic ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter (#13383)
* feat(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT> Turn [Filter]{.title-ref} into [FilterBase<NodeT>]{.title-ref} so filter nodes can be moved onto [autoware::agnocast_wrapper::Node]{.title-ref} one at a time. [Filter]{.title-ref} stays as a class deriving from [FilterBase<rclcpp::Node>]{.title-ref}, so every node that has not been migrated keeps compiling unchanged.
- feat(autoware_pointcloud_preprocessor): let FilterBase run on an agnocast-only executor
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter
- fix(autoware_pointcloud_preprocessor): use the buffer-only TransformListener in FilterBase
* refactor(autoware_pointcloud_preprocessor): keep ManagedTransformBuffer in FilterBase ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter (#13072)
- refactor(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT>
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter
- style(pre-commit): autofix
* feat(autoware_pointcloud_preprocessor): register voxel_grid_downsample_filter through the agnocast wrapper The node now derives from agnocast_wrapper::Node, so under ENABLE_AGNOCAST=1 it needs the generated main that calls agnocast::init(). Loaded into a component container instead, the AgnocastOnly executor aborts the whole container because the agnocast signal handler is not installed in that process. The macro falls back to rclcpp_components_register_node at ENABLE_AGNOCAST=0, so the non-agnocast build is unchanged. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
test(cuda_pointcloud_preprocessor): cover capacity bounds behavior (#13137)
* perf(cuda_pointcloud_preprocessor): avoid runtime thrust allocations Thrust's algorithm calls allocate temporary device memory on every frame. Replace them with explicit kernels and CUB calls running on storage that is allocated once at startup:
- thrust_stream::fill / fill_n become a fill kernel launched on the stream
- thrust::inclusive_scan becomes cub::DeviceScan::InclusiveSum
- thrust_stream::count becomes cub::DeviceReduce::Sum over a transform iterator, accumulating the three diagnostic counters into one device buffer that is copied back in a single transfer The CUB calls share a single scratch workspace, sized at startup to the largest requirement among the sort, the scan and the reductions. The twist struct counts become locals, since they are only used within process(). The counting iterator is thrust::transform_iterator rather than cub::TransformInputIterator, since CCCL 3.0 (CUDA 13, used on jazzy) removed the latter along with its header.
* refactor(cuda_pointcloud_preprocessor): name the processing stat indices Hoist the device_processing_stats_ layout into class-scope constants so that the buffer sizing in initializeBuffers() and the readback in process() share one definition instead of repeating a bare 3. Co-Authored-By: Claude Opus 5 (1M context) <<noreply@anthropic.com>>
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/approximate_downsample_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/approximate_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- approximate_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/approximate_downsample_filter_node.param.yaml]
- launch/blockage_diag_node.launch.xml
-
- input_topic_name [default: pointcloud_raw_ex]
- output_topic_name [default: blockage_diag/pointcloud]
- blockage_diagnostics_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/blockage_diag_node.param.yaml]
- launch/concatenate_and_time_sync_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_and_time_sync_node.param.yaml]
- launch/concatenate_pointcloud.launch.xml
-
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_pointclouds.param.yaml]
- launch/crop_box_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/self_cropped/pointcloud_ex]
- input_frame [default: base_link]
- output_frame [default: base_link]
- crop_box_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/crop_box_filter_node.param.yaml]
- launch/distortion_corrector_node.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/mirror_cropped/pointcloud_ex]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- input/imu [default: /sensing/imu/imu_data]
- output/pointcloud [default: /sensing/lidar/top/rectified/pointcloud_ex]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/distortion_corrector_node.param.yaml]
- launch/dual_return_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- dual_return_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/dual_return_outlier_filter_node.param.yaml]
- launch/lanelet2_map_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: detection_area/pointcloud]
- output_pointcloud [default: vector_map_filtered/pointcloud]
- lanelet2_map_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/lanelet2_map_filter_node.param.yaml]
- launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/pickup_based_voxel_grid_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- pickup_based_voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pickup_based_voxel_grid_downsample_filter_node.param.yaml]
- launch/pointcloud_accumulator_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud]
- output_topic_name [default: /sensing/lidar/top/pointcloud_accumulated]
- input_frame [default: base_link]
- output_frame [default: base_link]
- pointcloud_accumulator_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pointcloud_accumulator_node.param.yaml]
- launch/polar_voxel_noise_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_noise_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_noise_filter_node.param.yaml]
- launch/polar_voxel_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/preprocessor.launch.xml
-
- input_points_raw_list [default: ['/points_raw']]
- output_points_raw [default: /points_raw/cropbox/filtered]
- tf_output_frame [default: base_link]
- launch/radius_search_2d_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_filtered]
- input_frame [default: base_link]
- output_frame [default: base_link]
- radius_search_2d_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/radius_search_2d_outlier_filter_node.param.yaml]
- launch/random_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/random_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- random_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/random_downsample_filter_node.param.yaml]
- launch/ring_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_ring_filtered]
- input_frame [default: ]
- output_frame [default: ]
- ring_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/ring_outlier_filter_node.param.yaml]
- launch/ring_passthrough_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/ring_passthrough_filtered/pointcloud]
- input_frame [default: ]
- output_frame [default: base_link]
- passthrough_filter_uint16_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/passthrough_filter_uint16_node.param.yaml]
- launch/time_synchronizer_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/time_synchronizer_node.param.yaml]
- launch/vector_map_inside_area_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: compare_map_filtered/pointcloud]
- output_pointcloud [default: vector_map_inside_area_filtered/pointcloud]
- vector_map_inside_area_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/vector_map_inside_area_filter_node.param.yaml]
- launch/voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/voxel_grid_downsample_filter/pointcloud]
- input_frame [default: base_link]
- output_frame [default: base_link]
- voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_downsample_filter_node.param.yaml]
- launch/voxel_grid_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- voxel_grid_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_outlier_filter_node.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_pointcloud_preprocessor at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
- Junya Sasaki
Authors
- Open Perception
- Julius Kammerl
- William Woodall
autoware_pointcloud_preprocessor
Purpose
The autoware_pointcloud_preprocessor is a package that includes the following filters:
- removing outlier points
- cropping
- concatenating pointclouds
- correcting distortion
- downsampling
- densifying pointclouds
Inner-workings / Algorithms
Detail description of each filter’s algorithm is in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| concatenate_data | subscribe multiple pointclouds and concatenate them into a pointcloud | link |
| crop_box_filter | remove points within a given box | link |
| distortion_corrector | compensate pointcloud distortion caused by ego vehicle’s movement during 1 scan | link |
| downsample_filter | downsampling input pointcloud | link |
| outlier_filter | remove points caused by hardware problems, rain drops and small insects as a noise | link |
| polar_voxel_noise_filter | remove point cloud noise using polar-coordinate voxels and return-type-aware rules | link |
| passthrough_filter | remove points on the outside of a range in given field (e.g. x, y, z, intensity) | link |
| pointcloud_accumulator | accumulate pointclouds for a given amount of time | link |
| pointcloud_densifier | enhance sparse point clouds by using information from previous frames | link |
| vector_map_filter | remove points on the outside of lane by using vector map | link |
| vector_map_inside_area_filter | remove points inside of vector map area that has given type by parameter | link |
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/points |
sensor_msgs::msg::PointCloud2 |
reference points |
~/input/indices |
pcl_msgs::msg::Indices |
reference indices |
Output
| Name | Type | Description |
|---|---|---|
~/output/points |
sensor_msgs::msg::PointCloud2 |
filtered points |
Parameters
Node Parameters
| Name | Type | Default Value | Description |
|---|---|---|---|
input_frame |
string | ” “ | input frame id |
output_frame |
string | ” “ | output frame id |
max_queue_size |
int | 5 | max queue size of input/output topics |
use_indices |
bool | false | flag to use pointcloud indices |
latched_indices |
bool | false | flag to latch pointcloud indices |
approximate_sync |
bool | false | flag to use approximate sync option |
Assumptions / Known limits
autoware::pointcloud_preprocessor::Filter is implemented based on pcl_perception [1] because
of this issue.
Examples
Examples are not built by default, so release builds do not pay for them. Enable them with
-DBUILD_EXAMPLES=ON:
colcon build --packages-select autoware_pointcloud_preprocessor \
--cmake-args -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON
concatenate_without_ros_node
Concatenates three point clouds through the concatenate_core library alone: no node, no executor
and no spinning. Clouds, transforms and twist are handed to the core directly, so every input is
guaranteed to be processed - unlike a pub/sub pipeline, where a subscriber that comes up late
silently misses messages. This makes it a convenient starting point for replaying recorded data
deterministically, and for measuring concatenation cost on its own.
./build/autoware_pointcloud_preprocessor/concatenate_without_ros_node [points_per_cloud] [iterations] [warmup]
| Argument | Default | Description |
|---|---|---|
points_per_cloud |
40000 | points in each of the three source clouds |
iterations |
200 | timed concatenations |
warmup |
20 | untimed runs before measuring |
The example verifies the concatenated cloud and the diagnostics, then reports the time spent inside
combine_pointclouds() only. Building the clouds, the transforms and the grouping all happen
outside the measured region.
```text concatenated cloud frame_id : base_link stamp : 1000
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter (#13384)
* feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter Derive CropBoxFilterComponent from AgnocastFilter, the FilterBase<autoware::agnocast_wrapper::Node> instantiation, and register it through autoware_agnocast_wrapper_register_node on an agnocast-only callback-isolated executor. crop_box_filter_node.launch.xml resolves LD_PRELOAD through agnocast_env.launch.xml. DiagnosticsBase::add_to_interface() takes an autoware_utils::DiagnosticsInterface, an rclcpp-only type, and a virtual method cannot be a template. The diagnostic classes are therefore templatized on the node type, with [using X = BasicX<rclcpp::Node>]{.title-ref} leaving every filter still on rclcpp unchanged.
* refactor(autoware_pointcloud_preprocessor): rename the Basic diagnostics templates to Generic ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter (#13383)
* feat(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT> Turn [Filter]{.title-ref} into [FilterBase<NodeT>]{.title-ref} so filter nodes can be moved onto [autoware::agnocast_wrapper::Node]{.title-ref} one at a time. [Filter]{.title-ref} stays as a class deriving from [FilterBase<rclcpp::Node>]{.title-ref}, so every node that has not been migrated keeps compiling unchanged.
- feat(autoware_pointcloud_preprocessor): let FilterBase run on an agnocast-only executor
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter
- fix(autoware_pointcloud_preprocessor): use the buffer-only TransformListener in FilterBase
* refactor(autoware_pointcloud_preprocessor): keep ManagedTransformBuffer in FilterBase ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter (#13072)
- refactor(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT>
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter
- style(pre-commit): autofix
* feat(autoware_pointcloud_preprocessor): register voxel_grid_downsample_filter through the agnocast wrapper The node now derives from agnocast_wrapper::Node, so under ENABLE_AGNOCAST=1 it needs the generated main that calls agnocast::init(). Loaded into a component container instead, the AgnocastOnly executor aborts the whole container because the agnocast signal handler is not installed in that process. The macro falls back to rclcpp_components_register_node at ENABLE_AGNOCAST=0, so the non-agnocast build is unchanged. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
test(cuda_pointcloud_preprocessor): cover capacity bounds behavior (#13137)
* perf(cuda_pointcloud_preprocessor): avoid runtime thrust allocations Thrust's algorithm calls allocate temporary device memory on every frame. Replace them with explicit kernels and CUB calls running on storage that is allocated once at startup:
- thrust_stream::fill / fill_n become a fill kernel launched on the stream
- thrust::inclusive_scan becomes cub::DeviceScan::InclusiveSum
- thrust_stream::count becomes cub::DeviceReduce::Sum over a transform iterator, accumulating the three diagnostic counters into one device buffer that is copied back in a single transfer The CUB calls share a single scratch workspace, sized at startup to the largest requirement among the sort, the scan and the reductions. The twist struct counts become locals, since they are only used within process(). The counting iterator is thrust::transform_iterator rather than cub::TransformInputIterator, since CCCL 3.0 (CUDA 13, used on jazzy) removed the latter along with its header.
* refactor(cuda_pointcloud_preprocessor): name the processing stat indices Hoist the device_processing_stats_ layout into class-scope constants so that the buffer sizing in initializeBuffers() and the readback in process() share one definition instead of repeating a bare 3. Co-Authored-By: Claude Opus 5 (1M context) <<noreply@anthropic.com>>
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/approximate_downsample_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/approximate_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- approximate_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/approximate_downsample_filter_node.param.yaml]
- launch/blockage_diag_node.launch.xml
-
- input_topic_name [default: pointcloud_raw_ex]
- output_topic_name [default: blockage_diag/pointcloud]
- blockage_diagnostics_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/blockage_diag_node.param.yaml]
- launch/concatenate_and_time_sync_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_and_time_sync_node.param.yaml]
- launch/concatenate_pointcloud.launch.xml
-
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_pointclouds.param.yaml]
- launch/crop_box_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/self_cropped/pointcloud_ex]
- input_frame [default: base_link]
- output_frame [default: base_link]
- crop_box_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/crop_box_filter_node.param.yaml]
- launch/distortion_corrector_node.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/mirror_cropped/pointcloud_ex]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- input/imu [default: /sensing/imu/imu_data]
- output/pointcloud [default: /sensing/lidar/top/rectified/pointcloud_ex]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/distortion_corrector_node.param.yaml]
- launch/dual_return_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- dual_return_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/dual_return_outlier_filter_node.param.yaml]
- launch/lanelet2_map_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: detection_area/pointcloud]
- output_pointcloud [default: vector_map_filtered/pointcloud]
- lanelet2_map_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/lanelet2_map_filter_node.param.yaml]
- launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/pickup_based_voxel_grid_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- pickup_based_voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pickup_based_voxel_grid_downsample_filter_node.param.yaml]
- launch/pointcloud_accumulator_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud]
- output_topic_name [default: /sensing/lidar/top/pointcloud_accumulated]
- input_frame [default: base_link]
- output_frame [default: base_link]
- pointcloud_accumulator_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pointcloud_accumulator_node.param.yaml]
- launch/polar_voxel_noise_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_noise_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_noise_filter_node.param.yaml]
- launch/polar_voxel_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/preprocessor.launch.xml
-
- input_points_raw_list [default: ['/points_raw']]
- output_points_raw [default: /points_raw/cropbox/filtered]
- tf_output_frame [default: base_link]
- launch/radius_search_2d_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_filtered]
- input_frame [default: base_link]
- output_frame [default: base_link]
- radius_search_2d_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/radius_search_2d_outlier_filter_node.param.yaml]
- launch/random_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/random_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- random_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/random_downsample_filter_node.param.yaml]
- launch/ring_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_ring_filtered]
- input_frame [default: ]
- output_frame [default: ]
- ring_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/ring_outlier_filter_node.param.yaml]
- launch/ring_passthrough_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/ring_passthrough_filtered/pointcloud]
- input_frame [default: ]
- output_frame [default: base_link]
- passthrough_filter_uint16_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/passthrough_filter_uint16_node.param.yaml]
- launch/time_synchronizer_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/time_synchronizer_node.param.yaml]
- launch/vector_map_inside_area_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: compare_map_filtered/pointcloud]
- output_pointcloud [default: vector_map_inside_area_filtered/pointcloud]
- vector_map_inside_area_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/vector_map_inside_area_filter_node.param.yaml]
- launch/voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/voxel_grid_downsample_filter/pointcloud]
- input_frame [default: base_link]
- output_frame [default: base_link]
- voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_downsample_filter_node.param.yaml]
- launch/voxel_grid_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- voxel_grid_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_outlier_filter_node.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_pointcloud_preprocessor at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
- Junya Sasaki
Authors
- Open Perception
- Julius Kammerl
- William Woodall
autoware_pointcloud_preprocessor
Purpose
The autoware_pointcloud_preprocessor is a package that includes the following filters:
- removing outlier points
- cropping
- concatenating pointclouds
- correcting distortion
- downsampling
- densifying pointclouds
Inner-workings / Algorithms
Detail description of each filter’s algorithm is in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| concatenate_data | subscribe multiple pointclouds and concatenate them into a pointcloud | link |
| crop_box_filter | remove points within a given box | link |
| distortion_corrector | compensate pointcloud distortion caused by ego vehicle’s movement during 1 scan | link |
| downsample_filter | downsampling input pointcloud | link |
| outlier_filter | remove points caused by hardware problems, rain drops and small insects as a noise | link |
| polar_voxel_noise_filter | remove point cloud noise using polar-coordinate voxels and return-type-aware rules | link |
| passthrough_filter | remove points on the outside of a range in given field (e.g. x, y, z, intensity) | link |
| pointcloud_accumulator | accumulate pointclouds for a given amount of time | link |
| pointcloud_densifier | enhance sparse point clouds by using information from previous frames | link |
| vector_map_filter | remove points on the outside of lane by using vector map | link |
| vector_map_inside_area_filter | remove points inside of vector map area that has given type by parameter | link |
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/points |
sensor_msgs::msg::PointCloud2 |
reference points |
~/input/indices |
pcl_msgs::msg::Indices |
reference indices |
Output
| Name | Type | Description |
|---|---|---|
~/output/points |
sensor_msgs::msg::PointCloud2 |
filtered points |
Parameters
Node Parameters
| Name | Type | Default Value | Description |
|---|---|---|---|
input_frame |
string | ” “ | input frame id |
output_frame |
string | ” “ | output frame id |
max_queue_size |
int | 5 | max queue size of input/output topics |
use_indices |
bool | false | flag to use pointcloud indices |
latched_indices |
bool | false | flag to latch pointcloud indices |
approximate_sync |
bool | false | flag to use approximate sync option |
Assumptions / Known limits
autoware::pointcloud_preprocessor::Filter is implemented based on pcl_perception [1] because
of this issue.
Examples
Examples are not built by default, so release builds do not pay for them. Enable them with
-DBUILD_EXAMPLES=ON:
colcon build --packages-select autoware_pointcloud_preprocessor \
--cmake-args -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON
concatenate_without_ros_node
Concatenates three point clouds through the concatenate_core library alone: no node, no executor
and no spinning. Clouds, transforms and twist are handed to the core directly, so every input is
guaranteed to be processed - unlike a pub/sub pipeline, where a subscriber that comes up late
silently misses messages. This makes it a convenient starting point for replaying recorded data
deterministically, and for measuring concatenation cost on its own.
./build/autoware_pointcloud_preprocessor/concatenate_without_ros_node [points_per_cloud] [iterations] [warmup]
| Argument | Default | Description |
|---|---|---|
points_per_cloud |
40000 | points in each of the three source clouds |
iterations |
200 | timed concatenations |
warmup |
20 | untimed runs before measuring |
The example verifies the concatenated cloud and the diagnostics, then reports the time spent inside
combine_pointclouds() only. Building the clouds, the transforms and the grouping all happen
outside the measured region.
```text concatenated cloud frame_id : base_link stamp : 1000
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter (#13384)
* feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter Derive CropBoxFilterComponent from AgnocastFilter, the FilterBase<autoware::agnocast_wrapper::Node> instantiation, and register it through autoware_agnocast_wrapper_register_node on an agnocast-only callback-isolated executor. crop_box_filter_node.launch.xml resolves LD_PRELOAD through agnocast_env.launch.xml. DiagnosticsBase::add_to_interface() takes an autoware_utils::DiagnosticsInterface, an rclcpp-only type, and a virtual method cannot be a template. The diagnostic classes are therefore templatized on the node type, with [using X = BasicX<rclcpp::Node>]{.title-ref} leaving every filter still on rclcpp unchanged.
* refactor(autoware_pointcloud_preprocessor): rename the Basic diagnostics templates to Generic ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter (#13383)
* feat(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT> Turn [Filter]{.title-ref} into [FilterBase<NodeT>]{.title-ref} so filter nodes can be moved onto [autoware::agnocast_wrapper::Node]{.title-ref} one at a time. [Filter]{.title-ref} stays as a class deriving from [FilterBase<rclcpp::Node>]{.title-ref}, so every node that has not been migrated keeps compiling unchanged.
- feat(autoware_pointcloud_preprocessor): let FilterBase run on an agnocast-only executor
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter
- fix(autoware_pointcloud_preprocessor): use the buffer-only TransformListener in FilterBase
* refactor(autoware_pointcloud_preprocessor): keep ManagedTransformBuffer in FilterBase ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter (#13072)
- refactor(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT>
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter
- style(pre-commit): autofix
* feat(autoware_pointcloud_preprocessor): register voxel_grid_downsample_filter through the agnocast wrapper The node now derives from agnocast_wrapper::Node, so under ENABLE_AGNOCAST=1 it needs the generated main that calls agnocast::init(). Loaded into a component container instead, the AgnocastOnly executor aborts the whole container because the agnocast signal handler is not installed in that process. The macro falls back to rclcpp_components_register_node at ENABLE_AGNOCAST=0, so the non-agnocast build is unchanged. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
test(cuda_pointcloud_preprocessor): cover capacity bounds behavior (#13137)
* perf(cuda_pointcloud_preprocessor): avoid runtime thrust allocations Thrust's algorithm calls allocate temporary device memory on every frame. Replace them with explicit kernels and CUB calls running on storage that is allocated once at startup:
- thrust_stream::fill / fill_n become a fill kernel launched on the stream
- thrust::inclusive_scan becomes cub::DeviceScan::InclusiveSum
- thrust_stream::count becomes cub::DeviceReduce::Sum over a transform iterator, accumulating the three diagnostic counters into one device buffer that is copied back in a single transfer The CUB calls share a single scratch workspace, sized at startup to the largest requirement among the sort, the scan and the reductions. The twist struct counts become locals, since they are only used within process(). The counting iterator is thrust::transform_iterator rather than cub::TransformInputIterator, since CCCL 3.0 (CUDA 13, used on jazzy) removed the latter along with its header.
* refactor(cuda_pointcloud_preprocessor): name the processing stat indices Hoist the device_processing_stats_ layout into class-scope constants so that the buffer sizing in initializeBuffers() and the readback in process() share one definition instead of repeating a bare 3. Co-Authored-By: Claude Opus 5 (1M context) <<noreply@anthropic.com>>
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/approximate_downsample_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/approximate_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- approximate_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/approximate_downsample_filter_node.param.yaml]
- launch/blockage_diag_node.launch.xml
-
- input_topic_name [default: pointcloud_raw_ex]
- output_topic_name [default: blockage_diag/pointcloud]
- blockage_diagnostics_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/blockage_diag_node.param.yaml]
- launch/concatenate_and_time_sync_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_and_time_sync_node.param.yaml]
- launch/concatenate_pointcloud.launch.xml
-
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_pointclouds.param.yaml]
- launch/crop_box_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/self_cropped/pointcloud_ex]
- input_frame [default: base_link]
- output_frame [default: base_link]
- crop_box_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/crop_box_filter_node.param.yaml]
- launch/distortion_corrector_node.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/mirror_cropped/pointcloud_ex]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- input/imu [default: /sensing/imu/imu_data]
- output/pointcloud [default: /sensing/lidar/top/rectified/pointcloud_ex]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/distortion_corrector_node.param.yaml]
- launch/dual_return_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- dual_return_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/dual_return_outlier_filter_node.param.yaml]
- launch/lanelet2_map_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: detection_area/pointcloud]
- output_pointcloud [default: vector_map_filtered/pointcloud]
- lanelet2_map_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/lanelet2_map_filter_node.param.yaml]
- launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/pickup_based_voxel_grid_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- pickup_based_voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pickup_based_voxel_grid_downsample_filter_node.param.yaml]
- launch/pointcloud_accumulator_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud]
- output_topic_name [default: /sensing/lidar/top/pointcloud_accumulated]
- input_frame [default: base_link]
- output_frame [default: base_link]
- pointcloud_accumulator_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pointcloud_accumulator_node.param.yaml]
- launch/polar_voxel_noise_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_noise_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_noise_filter_node.param.yaml]
- launch/polar_voxel_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/preprocessor.launch.xml
-
- input_points_raw_list [default: ['/points_raw']]
- output_points_raw [default: /points_raw/cropbox/filtered]
- tf_output_frame [default: base_link]
- launch/radius_search_2d_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_filtered]
- input_frame [default: base_link]
- output_frame [default: base_link]
- radius_search_2d_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/radius_search_2d_outlier_filter_node.param.yaml]
- launch/random_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/random_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- random_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/random_downsample_filter_node.param.yaml]
- launch/ring_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_ring_filtered]
- input_frame [default: ]
- output_frame [default: ]
- ring_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/ring_outlier_filter_node.param.yaml]
- launch/ring_passthrough_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/ring_passthrough_filtered/pointcloud]
- input_frame [default: ]
- output_frame [default: base_link]
- passthrough_filter_uint16_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/passthrough_filter_uint16_node.param.yaml]
- launch/time_synchronizer_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/time_synchronizer_node.param.yaml]
- launch/vector_map_inside_area_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: compare_map_filtered/pointcloud]
- output_pointcloud [default: vector_map_inside_area_filtered/pointcloud]
- vector_map_inside_area_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/vector_map_inside_area_filter_node.param.yaml]
- launch/voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/voxel_grid_downsample_filter/pointcloud]
- input_frame [default: base_link]
- output_frame [default: base_link]
- voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_downsample_filter_node.param.yaml]
- launch/voxel_grid_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- voxel_grid_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_outlier_filter_node.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_pointcloud_preprocessor at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
- Junya Sasaki
Authors
- Open Perception
- Julius Kammerl
- William Woodall
autoware_pointcloud_preprocessor
Purpose
The autoware_pointcloud_preprocessor is a package that includes the following filters:
- removing outlier points
- cropping
- concatenating pointclouds
- correcting distortion
- downsampling
- densifying pointclouds
Inner-workings / Algorithms
Detail description of each filter’s algorithm is in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| concatenate_data | subscribe multiple pointclouds and concatenate them into a pointcloud | link |
| crop_box_filter | remove points within a given box | link |
| distortion_corrector | compensate pointcloud distortion caused by ego vehicle’s movement during 1 scan | link |
| downsample_filter | downsampling input pointcloud | link |
| outlier_filter | remove points caused by hardware problems, rain drops and small insects as a noise | link |
| polar_voxel_noise_filter | remove point cloud noise using polar-coordinate voxels and return-type-aware rules | link |
| passthrough_filter | remove points on the outside of a range in given field (e.g. x, y, z, intensity) | link |
| pointcloud_accumulator | accumulate pointclouds for a given amount of time | link |
| pointcloud_densifier | enhance sparse point clouds by using information from previous frames | link |
| vector_map_filter | remove points on the outside of lane by using vector map | link |
| vector_map_inside_area_filter | remove points inside of vector map area that has given type by parameter | link |
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/points |
sensor_msgs::msg::PointCloud2 |
reference points |
~/input/indices |
pcl_msgs::msg::Indices |
reference indices |
Output
| Name | Type | Description |
|---|---|---|
~/output/points |
sensor_msgs::msg::PointCloud2 |
filtered points |
Parameters
Node Parameters
| Name | Type | Default Value | Description |
|---|---|---|---|
input_frame |
string | ” “ | input frame id |
output_frame |
string | ” “ | output frame id |
max_queue_size |
int | 5 | max queue size of input/output topics |
use_indices |
bool | false | flag to use pointcloud indices |
latched_indices |
bool | false | flag to latch pointcloud indices |
approximate_sync |
bool | false | flag to use approximate sync option |
Assumptions / Known limits
autoware::pointcloud_preprocessor::Filter is implemented based on pcl_perception [1] because
of this issue.
Examples
Examples are not built by default, so release builds do not pay for them. Enable them with
-DBUILD_EXAMPLES=ON:
colcon build --packages-select autoware_pointcloud_preprocessor \
--cmake-args -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON
concatenate_without_ros_node
Concatenates three point clouds through the concatenate_core library alone: no node, no executor
and no spinning. Clouds, transforms and twist are handed to the core directly, so every input is
guaranteed to be processed - unlike a pub/sub pipeline, where a subscriber that comes up late
silently misses messages. This makes it a convenient starting point for replaying recorded data
deterministically, and for measuring concatenation cost on its own.
./build/autoware_pointcloud_preprocessor/concatenate_without_ros_node [points_per_cloud] [iterations] [warmup]
| Argument | Default | Description |
|---|---|---|
points_per_cloud |
40000 | points in each of the three source clouds |
iterations |
200 | timed concatenations |
warmup |
20 | untimed runs before measuring |
The example verifies the concatenated cloud and the diagnostics, then reports the time spent inside
combine_pointclouds() only. Building the clouds, the transforms and the grouping all happen
outside the measured region.
```text concatenated cloud frame_id : base_link stamp : 1000
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter (#13384)
* feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter Derive CropBoxFilterComponent from AgnocastFilter, the FilterBase<autoware::agnocast_wrapper::Node> instantiation, and register it through autoware_agnocast_wrapper_register_node on an agnocast-only callback-isolated executor. crop_box_filter_node.launch.xml resolves LD_PRELOAD through agnocast_env.launch.xml. DiagnosticsBase::add_to_interface() takes an autoware_utils::DiagnosticsInterface, an rclcpp-only type, and a virtual method cannot be a template. The diagnostic classes are therefore templatized on the node type, with [using X = BasicX<rclcpp::Node>]{.title-ref} leaving every filter still on rclcpp unchanged.
* refactor(autoware_pointcloud_preprocessor): rename the Basic diagnostics templates to Generic ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter (#13383)
* feat(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT> Turn [Filter]{.title-ref} into [FilterBase<NodeT>]{.title-ref} so filter nodes can be moved onto [autoware::agnocast_wrapper::Node]{.title-ref} one at a time. [Filter]{.title-ref} stays as a class deriving from [FilterBase<rclcpp::Node>]{.title-ref}, so every node that has not been migrated keeps compiling unchanged.
- feat(autoware_pointcloud_preprocessor): let FilterBase run on an agnocast-only executor
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter
- fix(autoware_pointcloud_preprocessor): use the buffer-only TransformListener in FilterBase
* refactor(autoware_pointcloud_preprocessor): keep ManagedTransformBuffer in FilterBase ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter (#13072)
- refactor(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT>
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter
- style(pre-commit): autofix
* feat(autoware_pointcloud_preprocessor): register voxel_grid_downsample_filter through the agnocast wrapper The node now derives from agnocast_wrapper::Node, so under ENABLE_AGNOCAST=1 it needs the generated main that calls agnocast::init(). Loaded into a component container instead, the AgnocastOnly executor aborts the whole container because the agnocast signal handler is not installed in that process. The macro falls back to rclcpp_components_register_node at ENABLE_AGNOCAST=0, so the non-agnocast build is unchanged. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
test(cuda_pointcloud_preprocessor): cover capacity bounds behavior (#13137)
* perf(cuda_pointcloud_preprocessor): avoid runtime thrust allocations Thrust's algorithm calls allocate temporary device memory on every frame. Replace them with explicit kernels and CUB calls running on storage that is allocated once at startup:
- thrust_stream::fill / fill_n become a fill kernel launched on the stream
- thrust::inclusive_scan becomes cub::DeviceScan::InclusiveSum
- thrust_stream::count becomes cub::DeviceReduce::Sum over a transform iterator, accumulating the three diagnostic counters into one device buffer that is copied back in a single transfer The CUB calls share a single scratch workspace, sized at startup to the largest requirement among the sort, the scan and the reductions. The twist struct counts become locals, since they are only used within process(). The counting iterator is thrust::transform_iterator rather than cub::TransformInputIterator, since CCCL 3.0 (CUDA 13, used on jazzy) removed the latter along with its header.
* refactor(cuda_pointcloud_preprocessor): name the processing stat indices Hoist the device_processing_stats_ layout into class-scope constants so that the buffer sizing in initializeBuffers() and the readback in process() share one definition instead of repeating a bare 3. Co-Authored-By: Claude Opus 5 (1M context) <<noreply@anthropic.com>>
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/approximate_downsample_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/approximate_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- approximate_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/approximate_downsample_filter_node.param.yaml]
- launch/blockage_diag_node.launch.xml
-
- input_topic_name [default: pointcloud_raw_ex]
- output_topic_name [default: blockage_diag/pointcloud]
- blockage_diagnostics_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/blockage_diag_node.param.yaml]
- launch/concatenate_and_time_sync_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_and_time_sync_node.param.yaml]
- launch/concatenate_pointcloud.launch.xml
-
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_pointclouds.param.yaml]
- launch/crop_box_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/self_cropped/pointcloud_ex]
- input_frame [default: base_link]
- output_frame [default: base_link]
- crop_box_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/crop_box_filter_node.param.yaml]
- launch/distortion_corrector_node.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/mirror_cropped/pointcloud_ex]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- input/imu [default: /sensing/imu/imu_data]
- output/pointcloud [default: /sensing/lidar/top/rectified/pointcloud_ex]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/distortion_corrector_node.param.yaml]
- launch/dual_return_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- dual_return_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/dual_return_outlier_filter_node.param.yaml]
- launch/lanelet2_map_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: detection_area/pointcloud]
- output_pointcloud [default: vector_map_filtered/pointcloud]
- lanelet2_map_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/lanelet2_map_filter_node.param.yaml]
- launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/pickup_based_voxel_grid_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- pickup_based_voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pickup_based_voxel_grid_downsample_filter_node.param.yaml]
- launch/pointcloud_accumulator_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud]
- output_topic_name [default: /sensing/lidar/top/pointcloud_accumulated]
- input_frame [default: base_link]
- output_frame [default: base_link]
- pointcloud_accumulator_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pointcloud_accumulator_node.param.yaml]
- launch/polar_voxel_noise_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_noise_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_noise_filter_node.param.yaml]
- launch/polar_voxel_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/preprocessor.launch.xml
-
- input_points_raw_list [default: ['/points_raw']]
- output_points_raw [default: /points_raw/cropbox/filtered]
- tf_output_frame [default: base_link]
- launch/radius_search_2d_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_filtered]
- input_frame [default: base_link]
- output_frame [default: base_link]
- radius_search_2d_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/radius_search_2d_outlier_filter_node.param.yaml]
- launch/random_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/random_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- random_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/random_downsample_filter_node.param.yaml]
- launch/ring_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_ring_filtered]
- input_frame [default: ]
- output_frame [default: ]
- ring_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/ring_outlier_filter_node.param.yaml]
- launch/ring_passthrough_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/ring_passthrough_filtered/pointcloud]
- input_frame [default: ]
- output_frame [default: base_link]
- passthrough_filter_uint16_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/passthrough_filter_uint16_node.param.yaml]
- launch/time_synchronizer_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/time_synchronizer_node.param.yaml]
- launch/vector_map_inside_area_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: compare_map_filtered/pointcloud]
- output_pointcloud [default: vector_map_inside_area_filtered/pointcloud]
- vector_map_inside_area_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/vector_map_inside_area_filter_node.param.yaml]
- launch/voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/voxel_grid_downsample_filter/pointcloud]
- input_frame [default: base_link]
- output_frame [default: base_link]
- voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_downsample_filter_node.param.yaml]
- launch/voxel_grid_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- voxel_grid_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_outlier_filter_node.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_pointcloud_preprocessor at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
- Junya Sasaki
Authors
- Open Perception
- Julius Kammerl
- William Woodall
autoware_pointcloud_preprocessor
Purpose
The autoware_pointcloud_preprocessor is a package that includes the following filters:
- removing outlier points
- cropping
- concatenating pointclouds
- correcting distortion
- downsampling
- densifying pointclouds
Inner-workings / Algorithms
Detail description of each filter’s algorithm is in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| concatenate_data | subscribe multiple pointclouds and concatenate them into a pointcloud | link |
| crop_box_filter | remove points within a given box | link |
| distortion_corrector | compensate pointcloud distortion caused by ego vehicle’s movement during 1 scan | link |
| downsample_filter | downsampling input pointcloud | link |
| outlier_filter | remove points caused by hardware problems, rain drops and small insects as a noise | link |
| polar_voxel_noise_filter | remove point cloud noise using polar-coordinate voxels and return-type-aware rules | link |
| passthrough_filter | remove points on the outside of a range in given field (e.g. x, y, z, intensity) | link |
| pointcloud_accumulator | accumulate pointclouds for a given amount of time | link |
| pointcloud_densifier | enhance sparse point clouds by using information from previous frames | link |
| vector_map_filter | remove points on the outside of lane by using vector map | link |
| vector_map_inside_area_filter | remove points inside of vector map area that has given type by parameter | link |
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/points |
sensor_msgs::msg::PointCloud2 |
reference points |
~/input/indices |
pcl_msgs::msg::Indices |
reference indices |
Output
| Name | Type | Description |
|---|---|---|
~/output/points |
sensor_msgs::msg::PointCloud2 |
filtered points |
Parameters
Node Parameters
| Name | Type | Default Value | Description |
|---|---|---|---|
input_frame |
string | ” “ | input frame id |
output_frame |
string | ” “ | output frame id |
max_queue_size |
int | 5 | max queue size of input/output topics |
use_indices |
bool | false | flag to use pointcloud indices |
latched_indices |
bool | false | flag to latch pointcloud indices |
approximate_sync |
bool | false | flag to use approximate sync option |
Assumptions / Known limits
autoware::pointcloud_preprocessor::Filter is implemented based on pcl_perception [1] because
of this issue.
Examples
Examples are not built by default, so release builds do not pay for them. Enable them with
-DBUILD_EXAMPLES=ON:
colcon build --packages-select autoware_pointcloud_preprocessor \
--cmake-args -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON
concatenate_without_ros_node
Concatenates three point clouds through the concatenate_core library alone: no node, no executor
and no spinning. Clouds, transforms and twist are handed to the core directly, so every input is
guaranteed to be processed - unlike a pub/sub pipeline, where a subscriber that comes up late
silently misses messages. This makes it a convenient starting point for replaying recorded data
deterministically, and for measuring concatenation cost on its own.
./build/autoware_pointcloud_preprocessor/concatenate_without_ros_node [points_per_cloud] [iterations] [warmup]
| Argument | Default | Description |
|---|---|---|
points_per_cloud |
40000 | points in each of the three source clouds |
iterations |
200 | timed concatenations |
warmup |
20 | untimed runs before measuring |
The example verifies the concatenated cloud and the diagnostics, then reports the time spent inside
combine_pointclouds() only. Building the clouds, the transforms and the grouping all happen
outside the measured region.
```text concatenated cloud frame_id : base_link stamp : 1000
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter (#13384)
* feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter Derive CropBoxFilterComponent from AgnocastFilter, the FilterBase<autoware::agnocast_wrapper::Node> instantiation, and register it through autoware_agnocast_wrapper_register_node on an agnocast-only callback-isolated executor. crop_box_filter_node.launch.xml resolves LD_PRELOAD through agnocast_env.launch.xml. DiagnosticsBase::add_to_interface() takes an autoware_utils::DiagnosticsInterface, an rclcpp-only type, and a virtual method cannot be a template. The diagnostic classes are therefore templatized on the node type, with [using X = BasicX<rclcpp::Node>]{.title-ref} leaving every filter still on rclcpp unchanged.
* refactor(autoware_pointcloud_preprocessor): rename the Basic diagnostics templates to Generic ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter (#13383)
* feat(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT> Turn [Filter]{.title-ref} into [FilterBase<NodeT>]{.title-ref} so filter nodes can be moved onto [autoware::agnocast_wrapper::Node]{.title-ref} one at a time. [Filter]{.title-ref} stays as a class deriving from [FilterBase<rclcpp::Node>]{.title-ref}, so every node that has not been migrated keeps compiling unchanged.
- feat(autoware_pointcloud_preprocessor): let FilterBase run on an agnocast-only executor
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter
- fix(autoware_pointcloud_preprocessor): use the buffer-only TransformListener in FilterBase
* refactor(autoware_pointcloud_preprocessor): keep ManagedTransformBuffer in FilterBase ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter (#13072)
- refactor(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT>
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter
- style(pre-commit): autofix
* feat(autoware_pointcloud_preprocessor): register voxel_grid_downsample_filter through the agnocast wrapper The node now derives from agnocast_wrapper::Node, so under ENABLE_AGNOCAST=1 it needs the generated main that calls agnocast::init(). Loaded into a component container instead, the AgnocastOnly executor aborts the whole container because the agnocast signal handler is not installed in that process. The macro falls back to rclcpp_components_register_node at ENABLE_AGNOCAST=0, so the non-agnocast build is unchanged. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
test(cuda_pointcloud_preprocessor): cover capacity bounds behavior (#13137)
* perf(cuda_pointcloud_preprocessor): avoid runtime thrust allocations Thrust's algorithm calls allocate temporary device memory on every frame. Replace them with explicit kernels and CUB calls running on storage that is allocated once at startup:
- thrust_stream::fill / fill_n become a fill kernel launched on the stream
- thrust::inclusive_scan becomes cub::DeviceScan::InclusiveSum
- thrust_stream::count becomes cub::DeviceReduce::Sum over a transform iterator, accumulating the three diagnostic counters into one device buffer that is copied back in a single transfer The CUB calls share a single scratch workspace, sized at startup to the largest requirement among the sort, the scan and the reductions. The twist struct counts become locals, since they are only used within process(). The counting iterator is thrust::transform_iterator rather than cub::TransformInputIterator, since CCCL 3.0 (CUDA 13, used on jazzy) removed the latter along with its header.
* refactor(cuda_pointcloud_preprocessor): name the processing stat indices Hoist the device_processing_stats_ layout into class-scope constants so that the buffer sizing in initializeBuffers() and the readback in process() share one definition instead of repeating a bare 3. Co-Authored-By: Claude Opus 5 (1M context) <<noreply@anthropic.com>>
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/approximate_downsample_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/approximate_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- approximate_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/approximate_downsample_filter_node.param.yaml]
- launch/blockage_diag_node.launch.xml
-
- input_topic_name [default: pointcloud_raw_ex]
- output_topic_name [default: blockage_diag/pointcloud]
- blockage_diagnostics_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/blockage_diag_node.param.yaml]
- launch/concatenate_and_time_sync_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_and_time_sync_node.param.yaml]
- launch/concatenate_pointcloud.launch.xml
-
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_pointclouds.param.yaml]
- launch/crop_box_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/self_cropped/pointcloud_ex]
- input_frame [default: base_link]
- output_frame [default: base_link]
- crop_box_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/crop_box_filter_node.param.yaml]
- launch/distortion_corrector_node.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/mirror_cropped/pointcloud_ex]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- input/imu [default: /sensing/imu/imu_data]
- output/pointcloud [default: /sensing/lidar/top/rectified/pointcloud_ex]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/distortion_corrector_node.param.yaml]
- launch/dual_return_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- dual_return_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/dual_return_outlier_filter_node.param.yaml]
- launch/lanelet2_map_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: detection_area/pointcloud]
- output_pointcloud [default: vector_map_filtered/pointcloud]
- lanelet2_map_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/lanelet2_map_filter_node.param.yaml]
- launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/pickup_based_voxel_grid_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- pickup_based_voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pickup_based_voxel_grid_downsample_filter_node.param.yaml]
- launch/pointcloud_accumulator_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud]
- output_topic_name [default: /sensing/lidar/top/pointcloud_accumulated]
- input_frame [default: base_link]
- output_frame [default: base_link]
- pointcloud_accumulator_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pointcloud_accumulator_node.param.yaml]
- launch/polar_voxel_noise_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_noise_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_noise_filter_node.param.yaml]
- launch/polar_voxel_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/preprocessor.launch.xml
-
- input_points_raw_list [default: ['/points_raw']]
- output_points_raw [default: /points_raw/cropbox/filtered]
- tf_output_frame [default: base_link]
- launch/radius_search_2d_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_filtered]
- input_frame [default: base_link]
- output_frame [default: base_link]
- radius_search_2d_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/radius_search_2d_outlier_filter_node.param.yaml]
- launch/random_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/random_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- random_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/random_downsample_filter_node.param.yaml]
- launch/ring_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_ring_filtered]
- input_frame [default: ]
- output_frame [default: ]
- ring_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/ring_outlier_filter_node.param.yaml]
- launch/ring_passthrough_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/ring_passthrough_filtered/pointcloud]
- input_frame [default: ]
- output_frame [default: base_link]
- passthrough_filter_uint16_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/passthrough_filter_uint16_node.param.yaml]
- launch/time_synchronizer_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/time_synchronizer_node.param.yaml]
- launch/vector_map_inside_area_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: compare_map_filtered/pointcloud]
- output_pointcloud [default: vector_map_inside_area_filtered/pointcloud]
- vector_map_inside_area_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/vector_map_inside_area_filter_node.param.yaml]
- launch/voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/voxel_grid_downsample_filter/pointcloud]
- input_frame [default: base_link]
- output_frame [default: base_link]
- voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_downsample_filter_node.param.yaml]
- launch/voxel_grid_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- voxel_grid_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_outlier_filter_node.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_pointcloud_preprocessor at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
- Junya Sasaki
Authors
- Open Perception
- Julius Kammerl
- William Woodall
autoware_pointcloud_preprocessor
Purpose
The autoware_pointcloud_preprocessor is a package that includes the following filters:
- removing outlier points
- cropping
- concatenating pointclouds
- correcting distortion
- downsampling
- densifying pointclouds
Inner-workings / Algorithms
Detail description of each filter’s algorithm is in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| concatenate_data | subscribe multiple pointclouds and concatenate them into a pointcloud | link |
| crop_box_filter | remove points within a given box | link |
| distortion_corrector | compensate pointcloud distortion caused by ego vehicle’s movement during 1 scan | link |
| downsample_filter | downsampling input pointcloud | link |
| outlier_filter | remove points caused by hardware problems, rain drops and small insects as a noise | link |
| polar_voxel_noise_filter | remove point cloud noise using polar-coordinate voxels and return-type-aware rules | link |
| passthrough_filter | remove points on the outside of a range in given field (e.g. x, y, z, intensity) | link |
| pointcloud_accumulator | accumulate pointclouds for a given amount of time | link |
| pointcloud_densifier | enhance sparse point clouds by using information from previous frames | link |
| vector_map_filter | remove points on the outside of lane by using vector map | link |
| vector_map_inside_area_filter | remove points inside of vector map area that has given type by parameter | link |
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/points |
sensor_msgs::msg::PointCloud2 |
reference points |
~/input/indices |
pcl_msgs::msg::Indices |
reference indices |
Output
| Name | Type | Description |
|---|---|---|
~/output/points |
sensor_msgs::msg::PointCloud2 |
filtered points |
Parameters
Node Parameters
| Name | Type | Default Value | Description |
|---|---|---|---|
input_frame |
string | ” “ | input frame id |
output_frame |
string | ” “ | output frame id |
max_queue_size |
int | 5 | max queue size of input/output topics |
use_indices |
bool | false | flag to use pointcloud indices |
latched_indices |
bool | false | flag to latch pointcloud indices |
approximate_sync |
bool | false | flag to use approximate sync option |
Assumptions / Known limits
autoware::pointcloud_preprocessor::Filter is implemented based on pcl_perception [1] because
of this issue.
Examples
Examples are not built by default, so release builds do not pay for them. Enable them with
-DBUILD_EXAMPLES=ON:
colcon build --packages-select autoware_pointcloud_preprocessor \
--cmake-args -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON
concatenate_without_ros_node
Concatenates three point clouds through the concatenate_core library alone: no node, no executor
and no spinning. Clouds, transforms and twist are handed to the core directly, so every input is
guaranteed to be processed - unlike a pub/sub pipeline, where a subscriber that comes up late
silently misses messages. This makes it a convenient starting point for replaying recorded data
deterministically, and for measuring concatenation cost on its own.
./build/autoware_pointcloud_preprocessor/concatenate_without_ros_node [points_per_cloud] [iterations] [warmup]
| Argument | Default | Description |
|---|---|---|
points_per_cloud |
40000 | points in each of the three source clouds |
iterations |
200 | timed concatenations |
warmup |
20 | untimed runs before measuring |
The example verifies the concatenated cloud and the diagnostics, then reports the time spent inside
combine_pointclouds() only. Building the clouds, the transforms and the grouping all happen
outside the measured region.
```text concatenated cloud frame_id : base_link stamp : 1000
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter (#13384)
* feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter Derive CropBoxFilterComponent from AgnocastFilter, the FilterBase<autoware::agnocast_wrapper::Node> instantiation, and register it through autoware_agnocast_wrapper_register_node on an agnocast-only callback-isolated executor. crop_box_filter_node.launch.xml resolves LD_PRELOAD through agnocast_env.launch.xml. DiagnosticsBase::add_to_interface() takes an autoware_utils::DiagnosticsInterface, an rclcpp-only type, and a virtual method cannot be a template. The diagnostic classes are therefore templatized on the node type, with [using X = BasicX<rclcpp::Node>]{.title-ref} leaving every filter still on rclcpp unchanged.
* refactor(autoware_pointcloud_preprocessor): rename the Basic diagnostics templates to Generic ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter (#13383)
* feat(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT> Turn [Filter]{.title-ref} into [FilterBase<NodeT>]{.title-ref} so filter nodes can be moved onto [autoware::agnocast_wrapper::Node]{.title-ref} one at a time. [Filter]{.title-ref} stays as a class deriving from [FilterBase<rclcpp::Node>]{.title-ref}, so every node that has not been migrated keeps compiling unchanged.
- feat(autoware_pointcloud_preprocessor): let FilterBase run on an agnocast-only executor
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter
- fix(autoware_pointcloud_preprocessor): use the buffer-only TransformListener in FilterBase
* refactor(autoware_pointcloud_preprocessor): keep ManagedTransformBuffer in FilterBase ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter (#13072)
- refactor(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT>
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter
- style(pre-commit): autofix
* feat(autoware_pointcloud_preprocessor): register voxel_grid_downsample_filter through the agnocast wrapper The node now derives from agnocast_wrapper::Node, so under ENABLE_AGNOCAST=1 it needs the generated main that calls agnocast::init(). Loaded into a component container instead, the AgnocastOnly executor aborts the whole container because the agnocast signal handler is not installed in that process. The macro falls back to rclcpp_components_register_node at ENABLE_AGNOCAST=0, so the non-agnocast build is unchanged. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
test(cuda_pointcloud_preprocessor): cover capacity bounds behavior (#13137)
* perf(cuda_pointcloud_preprocessor): avoid runtime thrust allocations Thrust's algorithm calls allocate temporary device memory on every frame. Replace them with explicit kernels and CUB calls running on storage that is allocated once at startup:
- thrust_stream::fill / fill_n become a fill kernel launched on the stream
- thrust::inclusive_scan becomes cub::DeviceScan::InclusiveSum
- thrust_stream::count becomes cub::DeviceReduce::Sum over a transform iterator, accumulating the three diagnostic counters into one device buffer that is copied back in a single transfer The CUB calls share a single scratch workspace, sized at startup to the largest requirement among the sort, the scan and the reductions. The twist struct counts become locals, since they are only used within process(). The counting iterator is thrust::transform_iterator rather than cub::TransformInputIterator, since CCCL 3.0 (CUDA 13, used on jazzy) removed the latter along with its header.
* refactor(cuda_pointcloud_preprocessor): name the processing stat indices Hoist the device_processing_stats_ layout into class-scope constants so that the buffer sizing in initializeBuffers() and the readback in process() share one definition instead of repeating a bare 3. Co-Authored-By: Claude Opus 5 (1M context) <<noreply@anthropic.com>>
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/approximate_downsample_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/approximate_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- approximate_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/approximate_downsample_filter_node.param.yaml]
- launch/blockage_diag_node.launch.xml
-
- input_topic_name [default: pointcloud_raw_ex]
- output_topic_name [default: blockage_diag/pointcloud]
- blockage_diagnostics_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/blockage_diag_node.param.yaml]
- launch/concatenate_and_time_sync_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_and_time_sync_node.param.yaml]
- launch/concatenate_pointcloud.launch.xml
-
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_pointclouds.param.yaml]
- launch/crop_box_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/self_cropped/pointcloud_ex]
- input_frame [default: base_link]
- output_frame [default: base_link]
- crop_box_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/crop_box_filter_node.param.yaml]
- launch/distortion_corrector_node.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/mirror_cropped/pointcloud_ex]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- input/imu [default: /sensing/imu/imu_data]
- output/pointcloud [default: /sensing/lidar/top/rectified/pointcloud_ex]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/distortion_corrector_node.param.yaml]
- launch/dual_return_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- dual_return_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/dual_return_outlier_filter_node.param.yaml]
- launch/lanelet2_map_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: detection_area/pointcloud]
- output_pointcloud [default: vector_map_filtered/pointcloud]
- lanelet2_map_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/lanelet2_map_filter_node.param.yaml]
- launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/pickup_based_voxel_grid_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- pickup_based_voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pickup_based_voxel_grid_downsample_filter_node.param.yaml]
- launch/pointcloud_accumulator_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud]
- output_topic_name [default: /sensing/lidar/top/pointcloud_accumulated]
- input_frame [default: base_link]
- output_frame [default: base_link]
- pointcloud_accumulator_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pointcloud_accumulator_node.param.yaml]
- launch/polar_voxel_noise_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_noise_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_noise_filter_node.param.yaml]
- launch/polar_voxel_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/preprocessor.launch.xml
-
- input_points_raw_list [default: ['/points_raw']]
- output_points_raw [default: /points_raw/cropbox/filtered]
- tf_output_frame [default: base_link]
- launch/radius_search_2d_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_filtered]
- input_frame [default: base_link]
- output_frame [default: base_link]
- radius_search_2d_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/radius_search_2d_outlier_filter_node.param.yaml]
- launch/random_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/random_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- random_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/random_downsample_filter_node.param.yaml]
- launch/ring_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_ring_filtered]
- input_frame [default: ]
- output_frame [default: ]
- ring_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/ring_outlier_filter_node.param.yaml]
- launch/ring_passthrough_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/ring_passthrough_filtered/pointcloud]
- input_frame [default: ]
- output_frame [default: base_link]
- passthrough_filter_uint16_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/passthrough_filter_uint16_node.param.yaml]
- launch/time_synchronizer_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/time_synchronizer_node.param.yaml]
- launch/vector_map_inside_area_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: compare_map_filtered/pointcloud]
- output_pointcloud [default: vector_map_inside_area_filtered/pointcloud]
- vector_map_inside_area_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/vector_map_inside_area_filter_node.param.yaml]
- launch/voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/voxel_grid_downsample_filter/pointcloud]
- input_frame [default: base_link]
- output_frame [default: base_link]
- voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_downsample_filter_node.param.yaml]
- launch/voxel_grid_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- voxel_grid_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_outlier_filter_node.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_pointcloud_preprocessor at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
- Junya Sasaki
Authors
- Open Perception
- Julius Kammerl
- William Woodall
autoware_pointcloud_preprocessor
Purpose
The autoware_pointcloud_preprocessor is a package that includes the following filters:
- removing outlier points
- cropping
- concatenating pointclouds
- correcting distortion
- downsampling
- densifying pointclouds
Inner-workings / Algorithms
Detail description of each filter’s algorithm is in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| concatenate_data | subscribe multiple pointclouds and concatenate them into a pointcloud | link |
| crop_box_filter | remove points within a given box | link |
| distortion_corrector | compensate pointcloud distortion caused by ego vehicle’s movement during 1 scan | link |
| downsample_filter | downsampling input pointcloud | link |
| outlier_filter | remove points caused by hardware problems, rain drops and small insects as a noise | link |
| polar_voxel_noise_filter | remove point cloud noise using polar-coordinate voxels and return-type-aware rules | link |
| passthrough_filter | remove points on the outside of a range in given field (e.g. x, y, z, intensity) | link |
| pointcloud_accumulator | accumulate pointclouds for a given amount of time | link |
| pointcloud_densifier | enhance sparse point clouds by using information from previous frames | link |
| vector_map_filter | remove points on the outside of lane by using vector map | link |
| vector_map_inside_area_filter | remove points inside of vector map area that has given type by parameter | link |
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/points |
sensor_msgs::msg::PointCloud2 |
reference points |
~/input/indices |
pcl_msgs::msg::Indices |
reference indices |
Output
| Name | Type | Description |
|---|---|---|
~/output/points |
sensor_msgs::msg::PointCloud2 |
filtered points |
Parameters
Node Parameters
| Name | Type | Default Value | Description |
|---|---|---|---|
input_frame |
string | ” “ | input frame id |
output_frame |
string | ” “ | output frame id |
max_queue_size |
int | 5 | max queue size of input/output topics |
use_indices |
bool | false | flag to use pointcloud indices |
latched_indices |
bool | false | flag to latch pointcloud indices |
approximate_sync |
bool | false | flag to use approximate sync option |
Assumptions / Known limits
autoware::pointcloud_preprocessor::Filter is implemented based on pcl_perception [1] because
of this issue.
Examples
Examples are not built by default, so release builds do not pay for them. Enable them with
-DBUILD_EXAMPLES=ON:
colcon build --packages-select autoware_pointcloud_preprocessor \
--cmake-args -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON
concatenate_without_ros_node
Concatenates three point clouds through the concatenate_core library alone: no node, no executor
and no spinning. Clouds, transforms and twist are handed to the core directly, so every input is
guaranteed to be processed - unlike a pub/sub pipeline, where a subscriber that comes up late
silently misses messages. This makes it a convenient starting point for replaying recorded data
deterministically, and for measuring concatenation cost on its own.
./build/autoware_pointcloud_preprocessor/concatenate_without_ros_node [points_per_cloud] [iterations] [warmup]
| Argument | Default | Description |
|---|---|---|
points_per_cloud |
40000 | points in each of the three source clouds |
iterations |
200 | timed concatenations |
warmup |
20 | untimed runs before measuring |
The example verifies the concatenated cloud and the diagnostics, then reports the time spent inside
combine_pointclouds() only. Building the clouds, the transforms and the grouping all happen
outside the measured region.
```text concatenated cloud frame_id : base_link stamp : 1000
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter (#13384)
* feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter Derive CropBoxFilterComponent from AgnocastFilter, the FilterBase<autoware::agnocast_wrapper::Node> instantiation, and register it through autoware_agnocast_wrapper_register_node on an agnocast-only callback-isolated executor. crop_box_filter_node.launch.xml resolves LD_PRELOAD through agnocast_env.launch.xml. DiagnosticsBase::add_to_interface() takes an autoware_utils::DiagnosticsInterface, an rclcpp-only type, and a virtual method cannot be a template. The diagnostic classes are therefore templatized on the node type, with [using X = BasicX<rclcpp::Node>]{.title-ref} leaving every filter still on rclcpp unchanged.
* refactor(autoware_pointcloud_preprocessor): rename the Basic diagnostics templates to Generic ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter (#13383)
* feat(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT> Turn [Filter]{.title-ref} into [FilterBase<NodeT>]{.title-ref} so filter nodes can be moved onto [autoware::agnocast_wrapper::Node]{.title-ref} one at a time. [Filter]{.title-ref} stays as a class deriving from [FilterBase<rclcpp::Node>]{.title-ref}, so every node that has not been migrated keeps compiling unchanged.
- feat(autoware_pointcloud_preprocessor): let FilterBase run on an agnocast-only executor
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter
- fix(autoware_pointcloud_preprocessor): use the buffer-only TransformListener in FilterBase
* refactor(autoware_pointcloud_preprocessor): keep ManagedTransformBuffer in FilterBase ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter (#13072)
- refactor(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT>
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter
- style(pre-commit): autofix
* feat(autoware_pointcloud_preprocessor): register voxel_grid_downsample_filter through the agnocast wrapper The node now derives from agnocast_wrapper::Node, so under ENABLE_AGNOCAST=1 it needs the generated main that calls agnocast::init(). Loaded into a component container instead, the AgnocastOnly executor aborts the whole container because the agnocast signal handler is not installed in that process. The macro falls back to rclcpp_components_register_node at ENABLE_AGNOCAST=0, so the non-agnocast build is unchanged. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
test(cuda_pointcloud_preprocessor): cover capacity bounds behavior (#13137)
* perf(cuda_pointcloud_preprocessor): avoid runtime thrust allocations Thrust's algorithm calls allocate temporary device memory on every frame. Replace them with explicit kernels and CUB calls running on storage that is allocated once at startup:
- thrust_stream::fill / fill_n become a fill kernel launched on the stream
- thrust::inclusive_scan becomes cub::DeviceScan::InclusiveSum
- thrust_stream::count becomes cub::DeviceReduce::Sum over a transform iterator, accumulating the three diagnostic counters into one device buffer that is copied back in a single transfer The CUB calls share a single scratch workspace, sized at startup to the largest requirement among the sort, the scan and the reductions. The twist struct counts become locals, since they are only used within process(). The counting iterator is thrust::transform_iterator rather than cub::TransformInputIterator, since CCCL 3.0 (CUDA 13, used on jazzy) removed the latter along with its header.
* refactor(cuda_pointcloud_preprocessor): name the processing stat indices Hoist the device_processing_stats_ layout into class-scope constants so that the buffer sizing in initializeBuffers() and the readback in process() share one definition instead of repeating a bare 3. Co-Authored-By: Claude Opus 5 (1M context) <<noreply@anthropic.com>>
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/approximate_downsample_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/approximate_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- approximate_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/approximate_downsample_filter_node.param.yaml]
- launch/blockage_diag_node.launch.xml
-
- input_topic_name [default: pointcloud_raw_ex]
- output_topic_name [default: blockage_diag/pointcloud]
- blockage_diagnostics_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/blockage_diag_node.param.yaml]
- launch/concatenate_and_time_sync_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_and_time_sync_node.param.yaml]
- launch/concatenate_pointcloud.launch.xml
-
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_pointclouds.param.yaml]
- launch/crop_box_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/self_cropped/pointcloud_ex]
- input_frame [default: base_link]
- output_frame [default: base_link]
- crop_box_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/crop_box_filter_node.param.yaml]
- launch/distortion_corrector_node.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/mirror_cropped/pointcloud_ex]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- input/imu [default: /sensing/imu/imu_data]
- output/pointcloud [default: /sensing/lidar/top/rectified/pointcloud_ex]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/distortion_corrector_node.param.yaml]
- launch/dual_return_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- dual_return_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/dual_return_outlier_filter_node.param.yaml]
- launch/lanelet2_map_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: detection_area/pointcloud]
- output_pointcloud [default: vector_map_filtered/pointcloud]
- lanelet2_map_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/lanelet2_map_filter_node.param.yaml]
- launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/pickup_based_voxel_grid_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- pickup_based_voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pickup_based_voxel_grid_downsample_filter_node.param.yaml]
- launch/pointcloud_accumulator_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud]
- output_topic_name [default: /sensing/lidar/top/pointcloud_accumulated]
- input_frame [default: base_link]
- output_frame [default: base_link]
- pointcloud_accumulator_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pointcloud_accumulator_node.param.yaml]
- launch/polar_voxel_noise_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_noise_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_noise_filter_node.param.yaml]
- launch/polar_voxel_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/preprocessor.launch.xml
-
- input_points_raw_list [default: ['/points_raw']]
- output_points_raw [default: /points_raw/cropbox/filtered]
- tf_output_frame [default: base_link]
- launch/radius_search_2d_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_filtered]
- input_frame [default: base_link]
- output_frame [default: base_link]
- radius_search_2d_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/radius_search_2d_outlier_filter_node.param.yaml]
- launch/random_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/random_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- random_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/random_downsample_filter_node.param.yaml]
- launch/ring_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_ring_filtered]
- input_frame [default: ]
- output_frame [default: ]
- ring_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/ring_outlier_filter_node.param.yaml]
- launch/ring_passthrough_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/ring_passthrough_filtered/pointcloud]
- input_frame [default: ]
- output_frame [default: base_link]
- passthrough_filter_uint16_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/passthrough_filter_uint16_node.param.yaml]
- launch/time_synchronizer_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/time_synchronizer_node.param.yaml]
- launch/vector_map_inside_area_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: compare_map_filtered/pointcloud]
- output_pointcloud [default: vector_map_inside_area_filtered/pointcloud]
- vector_map_inside_area_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/vector_map_inside_area_filter_node.param.yaml]
- launch/voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/voxel_grid_downsample_filter/pointcloud]
- input_frame [default: base_link]
- output_frame [default: base_link]
- voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_downsample_filter_node.param.yaml]
- launch/voxel_grid_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- voxel_grid_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_outlier_filter_node.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_pointcloud_preprocessor at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-23 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
- Junya Sasaki
Authors
- Open Perception
- Julius Kammerl
- William Woodall
autoware_pointcloud_preprocessor
Purpose
The autoware_pointcloud_preprocessor is a package that includes the following filters:
- removing outlier points
- cropping
- concatenating pointclouds
- correcting distortion
- downsampling
- densifying pointclouds
Inner-workings / Algorithms
Detail description of each filter’s algorithm is in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| concatenate_data | subscribe multiple pointclouds and concatenate them into a pointcloud | link |
| crop_box_filter | remove points within a given box | link |
| distortion_corrector | compensate pointcloud distortion caused by ego vehicle’s movement during 1 scan | link |
| downsample_filter | downsampling input pointcloud | link |
| outlier_filter | remove points caused by hardware problems, rain drops and small insects as a noise | link |
| polar_voxel_noise_filter | remove point cloud noise using polar-coordinate voxels and return-type-aware rules | link |
| passthrough_filter | remove points on the outside of a range in given field (e.g. x, y, z, intensity) | link |
| pointcloud_accumulator | accumulate pointclouds for a given amount of time | link |
| pointcloud_densifier | enhance sparse point clouds by using information from previous frames | link |
| vector_map_filter | remove points on the outside of lane by using vector map | link |
| vector_map_inside_area_filter | remove points inside of vector map area that has given type by parameter | link |
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
~/input/points |
sensor_msgs::msg::PointCloud2 |
reference points |
~/input/indices |
pcl_msgs::msg::Indices |
reference indices |
Output
| Name | Type | Description |
|---|---|---|
~/output/points |
sensor_msgs::msg::PointCloud2 |
filtered points |
Parameters
Node Parameters
| Name | Type | Default Value | Description |
|---|---|---|---|
input_frame |
string | ” “ | input frame id |
output_frame |
string | ” “ | output frame id |
max_queue_size |
int | 5 | max queue size of input/output topics |
use_indices |
bool | false | flag to use pointcloud indices |
latched_indices |
bool | false | flag to latch pointcloud indices |
approximate_sync |
bool | false | flag to use approximate sync option |
Assumptions / Known limits
autoware::pointcloud_preprocessor::Filter is implemented based on pcl_perception [1] because
of this issue.
Examples
Examples are not built by default, so release builds do not pay for them. Enable them with
-DBUILD_EXAMPLES=ON:
colcon build --packages-select autoware_pointcloud_preprocessor \
--cmake-args -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=ON
concatenate_without_ros_node
Concatenates three point clouds through the concatenate_core library alone: no node, no executor
and no spinning. Clouds, transforms and twist are handed to the core directly, so every input is
guaranteed to be processed - unlike a pub/sub pipeline, where a subscriber that comes up late
silently misses messages. This makes it a convenient starting point for replaying recorded data
deterministically, and for measuring concatenation cost on its own.
./build/autoware_pointcloud_preprocessor/concatenate_without_ros_node [points_per_cloud] [iterations] [warmup]
| Argument | Default | Description |
|---|---|---|
points_per_cloud |
40000 | points in each of the three source clouds |
iterations |
200 | timed concatenations |
warmup |
20 | untimed runs before measuring |
The example verifies the concatenated cloud and the diagnostics, then reports the time spent inside
combine_pointclouds() only. Building the clouds, the transforms and the grouping all happen
outside the measured region.
```text concatenated cloud frame_id : base_link stamp : 1000
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter (#13384)
* feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to crop_box_filter Derive CropBoxFilterComponent from AgnocastFilter, the FilterBase<autoware::agnocast_wrapper::Node> instantiation, and register it through autoware_agnocast_wrapper_register_node on an agnocast-only callback-isolated executor. crop_box_filter_node.launch.xml resolves LD_PRELOAD through agnocast_env.launch.xml. DiagnosticsBase::add_to_interface() takes an autoware_utils::DiagnosticsInterface, an rclcpp-only type, and a virtual method cannot be a template. The diagnostic classes are therefore templatized on the node type, with [using X = BasicX<rclcpp::Node>]{.title-ref} leaving every filter still on rclcpp unchanged.
* refactor(autoware_pointcloud_preprocessor): rename the Basic diagnostics templates to Generic ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter (#13383)
* feat(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT> Turn [Filter]{.title-ref} into [FilterBase<NodeT>]{.title-ref} so filter nodes can be moved onto [autoware::agnocast_wrapper::Node]{.title-ref} one at a time. [Filter]{.title-ref} stays as a class deriving from [FilterBase<rclcpp::Node>]{.title-ref}, so every node that has not been migrated keeps compiling unchanged.
- feat(autoware_pointcloud_preprocessor): let FilterBase run on an agnocast-only executor
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to polar_voxel_outlier_filter
- fix(autoware_pointcloud_preprocessor): use the buffer-only TransformListener in FilterBase
* refactor(autoware_pointcloud_preprocessor): keep ManagedTransformBuffer in FilterBase ---------
-
feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter (#13072)
- refactor(autoware_pointcloud_preprocessor): templatize Filter into FilterBase<NodeT>
- feat(autoware_pointcloud_preprocessor): apply agnocast_wrapper::Node to voxel_grid_downsample_filter
- style(pre-commit): autofix
* feat(autoware_pointcloud_preprocessor): register voxel_grid_downsample_filter through the agnocast wrapper The node now derives from agnocast_wrapper::Node, so under ENABLE_AGNOCAST=1 it needs the generated main that calls agnocast::init(). Loaded into a component container instead, the AgnocastOnly executor aborts the whole container because the agnocast signal handler is not installed in that process. The macro falls back to rclcpp_components_register_node at ENABLE_AGNOCAST=0, so the non-agnocast build is unchanged. ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
test(cuda_pointcloud_preprocessor): cover capacity bounds behavior (#13137)
* perf(cuda_pointcloud_preprocessor): avoid runtime thrust allocations Thrust's algorithm calls allocate temporary device memory on every frame. Replace them with explicit kernels and CUB calls running on storage that is allocated once at startup:
- thrust_stream::fill / fill_n become a fill kernel launched on the stream
- thrust::inclusive_scan becomes cub::DeviceScan::InclusiveSum
- thrust_stream::count becomes cub::DeviceReduce::Sum over a transform iterator, accumulating the three diagnostic counters into one device buffer that is copied back in a single transfer The CUB calls share a single scratch workspace, sized at startup to the largest requirement among the sort, the scan and the reductions. The twist struct counts become locals, since they are only used within process(). The counting iterator is thrust::transform_iterator rather than cub::TransformInputIterator, since CCCL 3.0 (CUDA 13, used on jazzy) removed the latter along with its header.
* refactor(cuda_pointcloud_preprocessor): name the processing stat indices Hoist the device_processing_stats_ layout into class-scope constants so that the buffer sizing in initializeBuffers() and the readback in process() share one definition instead of repeating a bare 3. Co-Authored-By: Claude Opus 5 (1M context) <<noreply@anthropic.com>>
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/approximate_downsample_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/approximate_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- approximate_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/approximate_downsample_filter_node.param.yaml]
- launch/blockage_diag_node.launch.xml
-
- input_topic_name [default: pointcloud_raw_ex]
- output_topic_name [default: blockage_diag/pointcloud]
- blockage_diagnostics_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/blockage_diag_node.param.yaml]
- launch/concatenate_and_time_sync_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_and_time_sync_node.param.yaml]
- launch/concatenate_pointcloud.launch.xml
-
- output [default: /sensing/lidar/concatenated/pointcloud]
- output_info [default: /sensing/lidar/concatenated/pointcloud_info]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/concatenate_pointclouds.param.yaml]
- launch/crop_box_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/self_cropped/pointcloud_ex]
- input_frame [default: base_link]
- output_frame [default: base_link]
- crop_box_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/crop_box_filter_node.param.yaml]
- launch/distortion_corrector_node.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/mirror_cropped/pointcloud_ex]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- input/imu [default: /sensing/imu/imu_data]
- output/pointcloud [default: /sensing/lidar/top/rectified/pointcloud_ex]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/distortion_corrector_node.param.yaml]
- launch/dual_return_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- dual_return_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/dual_return_outlier_filter_node.param.yaml]
- launch/lanelet2_map_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: detection_area/pointcloud]
- output_pointcloud [default: vector_map_filtered/pointcloud]
- lanelet2_map_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/lanelet2_map_filter_node.param.yaml]
- launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/pickup_based_voxel_grid_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- pickup_based_voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pickup_based_voxel_grid_downsample_filter_node.param.yaml]
- launch/pointcloud_accumulator_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud]
- output_topic_name [default: /sensing/lidar/top/pointcloud_accumulated]
- input_frame [default: base_link]
- output_frame [default: base_link]
- pointcloud_accumulator_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/pointcloud_accumulator_node.param.yaml]
- launch/polar_voxel_noise_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_noise_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_noise_filter_node.param.yaml]
- launch/polar_voxel_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/preprocessor.launch.xml
-
- input_points_raw_list [default: ['/points_raw']]
- output_points_raw [default: /points_raw/cropbox/filtered]
- tf_output_frame [default: base_link]
- launch/radius_search_2d_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_filtered]
- input_frame [default: base_link]
- output_frame [default: base_link]
- radius_search_2d_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/radius_search_2d_outlier_filter_node.param.yaml]
- launch/random_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/random_downsample_filter/pointcloud]
- input_frame [default: ]
- output_frame [default: ]
- random_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/random_downsample_filter_node.param.yaml]
- launch/ring_outlier_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw_ex]
- output_topic_name [default: /sensing/lidar/top/pointcloud_ring_filtered]
- input_frame [default: ]
- output_frame [default: ]
- ring_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/ring_outlier_filter_node.param.yaml]
- launch/ring_passthrough_filter.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/ring_passthrough_filtered/pointcloud]
- input_frame [default: ]
- output_frame [default: base_link]
- passthrough_filter_uint16_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/passthrough_filter_uint16_node.param.yaml]
- launch/time_synchronizer_node.launch.xml
-
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/time_synchronizer_node.param.yaml]
- launch/vector_map_inside_area_filter_node.launch.xml
-
- input_vector_map [default: /map/vector_map]
- input_pointcloud [default: compare_map_filtered/pointcloud]
- output_pointcloud [default: vector_map_inside_area_filtered/pointcloud]
- vector_map_inside_area_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/vector_map_inside_area_filter_node.param.yaml]
- launch/voxel_grid_downsample_filter_node.launch.xml
-
- input_topic_name [default: /sensing/lidar/top/pointcloud_raw]
- output_topic_name [default: /sensing/lidar/top/voxel_grid_downsample_filter/pointcloud]
- input_frame [default: base_link]
- output_frame [default: base_link]
- voxel_grid_downsample_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_downsample_filter_node.param.yaml]
- launch/voxel_grid_outlier_filter_node.launch.xml
-
- input_topic_name [default: /pointcloud_raw]
- output_topic_name [default: /pointcloud_filtered]
- input_frame [default: ]
- output_frame [default: ]
- voxel_grid_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/voxel_grid_outlier_filter_node.param.yaml]