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-11-14 |
| 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.
Python binding for point cloud concatenation
The concatenation core (CloudConcatenator, which the concatenate_data node runs) can be used
from Python through autoware_pointcloud_preprocessor.concatenate_pointclouds. It is built and
installed with the package, so no extra build option is needed. It takes and returns rclpy messages
and needs no ROS node: no rclpy.init(), no executor and no TF listener. This makes it useful for
offline work such as re-concatenating a rosbag.
from autoware_pointcloud_preprocessor.concatenate_pointclouds import Concatenator, FrameStatus
concatenator = Concatenator(
["/sensing/lidar/top/pointcloud", "/sensing/lidar/left/pointcloud"],
output_frame="base_link",
timeout_sec=0.1,
)
concatenator.set_transform(top_to_base_link) # a TransformStamped per sensor frame
concatenator.set_transform(left_to_base_link)
concatenator.process_twist(twist) # TwistWithCovarianceStamped; or process_odometry(odometry)
# Feed the clouds in arrival order. The arrival time (seconds) replaces the node's clock.
for frame in concatenator.process_cloud("/sensing/lidar/top/pointcloud", cloud, arrival_time=t):
if frame.status is FrameStatus.COMPLETE:
merged = frame.result.concatenated_cloud # sensor_msgs.msg.PointCloud2
# At the end of the stream, close the collectors that are still open (as TIMEOUT frames).
remaining = concatenator.flush()
Each frame carries status (COMPLETE, TIMEOUT or LATE), result.concatenated_cloud,
result.concatenation_info, result.motion_compensation_status and
result.dropped_sources_missing_transform. frame.build_diagnostics() returns the
DiagnosticStatus the node would publish for it.
The arguments, return values and exceptions of each call are in the docstrings
(help(Concatenator)).
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-11-14 |
| 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.
Python binding for point cloud concatenation
The concatenation core (CloudConcatenator, which the concatenate_data node runs) can be used
from Python through autoware_pointcloud_preprocessor.concatenate_pointclouds. It is built and
installed with the package, so no extra build option is needed. It takes and returns rclpy messages
and needs no ROS node: no rclpy.init(), no executor and no TF listener. This makes it useful for
offline work such as re-concatenating a rosbag.
from autoware_pointcloud_preprocessor.concatenate_pointclouds import Concatenator, FrameStatus
concatenator = Concatenator(
["/sensing/lidar/top/pointcloud", "/sensing/lidar/left/pointcloud"],
output_frame="base_link",
timeout_sec=0.1,
)
concatenator.set_transform(top_to_base_link) # a TransformStamped per sensor frame
concatenator.set_transform(left_to_base_link)
concatenator.process_twist(twist) # TwistWithCovarianceStamped; or process_odometry(odometry)
# Feed the clouds in arrival order. The arrival time (seconds) replaces the node's clock.
for frame in concatenator.process_cloud("/sensing/lidar/top/pointcloud", cloud, arrival_time=t):
if frame.status is FrameStatus.COMPLETE:
merged = frame.result.concatenated_cloud # sensor_msgs.msg.PointCloud2
# At the end of the stream, close the collectors that are still open (as TIMEOUT frames).
remaining = concatenator.flush()
Each frame carries status (COMPLETE, TIMEOUT or LATE), result.concatenated_cloud,
result.concatenation_info, result.motion_compensation_status and
result.dropped_sources_missing_transform. frame.build_diagnostics() returns the
DiagnosticStatus the node would publish for it.
The arguments, return values and exceptions of each call are in the docstrings
(help(Concatenator)).
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-11-14 |
| 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.
Python binding for point cloud concatenation
The concatenation core (CloudConcatenator, which the concatenate_data node runs) can be used
from Python through autoware_pointcloud_preprocessor.concatenate_pointclouds. It is built and
installed with the package, so no extra build option is needed. It takes and returns rclpy messages
and needs no ROS node: no rclpy.init(), no executor and no TF listener. This makes it useful for
offline work such as re-concatenating a rosbag.
from autoware_pointcloud_preprocessor.concatenate_pointclouds import Concatenator, FrameStatus
concatenator = Concatenator(
["/sensing/lidar/top/pointcloud", "/sensing/lidar/left/pointcloud"],
output_frame="base_link",
timeout_sec=0.1,
)
concatenator.set_transform(top_to_base_link) # a TransformStamped per sensor frame
concatenator.set_transform(left_to_base_link)
concatenator.process_twist(twist) # TwistWithCovarianceStamped; or process_odometry(odometry)
# Feed the clouds in arrival order. The arrival time (seconds) replaces the node's clock.
for frame in concatenator.process_cloud("/sensing/lidar/top/pointcloud", cloud, arrival_time=t):
if frame.status is FrameStatus.COMPLETE:
merged = frame.result.concatenated_cloud # sensor_msgs.msg.PointCloud2
# At the end of the stream, close the collectors that are still open (as TIMEOUT frames).
remaining = concatenator.flush()
Each frame carries status (COMPLETE, TIMEOUT or LATE), result.concatenated_cloud,
result.concatenation_info, result.motion_compensation_status and
result.dropped_sources_missing_transform. frame.build_diagnostics() returns the
DiagnosticStatus the node would publish for it.
The arguments, return values and exceptions of each call are in the docstrings
(help(Concatenator)).
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-11-14 |
| 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.
Python binding for point cloud concatenation
The concatenation core (CloudConcatenator, which the concatenate_data node runs) can be used
from Python through autoware_pointcloud_preprocessor.concatenate_pointclouds. It is built and
installed with the package, so no extra build option is needed. It takes and returns rclpy messages
and needs no ROS node: no rclpy.init(), no executor and no TF listener. This makes it useful for
offline work such as re-concatenating a rosbag.
from autoware_pointcloud_preprocessor.concatenate_pointclouds import Concatenator, FrameStatus
concatenator = Concatenator(
["/sensing/lidar/top/pointcloud", "/sensing/lidar/left/pointcloud"],
output_frame="base_link",
timeout_sec=0.1,
)
concatenator.set_transform(top_to_base_link) # a TransformStamped per sensor frame
concatenator.set_transform(left_to_base_link)
concatenator.process_twist(twist) # TwistWithCovarianceStamped; or process_odometry(odometry)
# Feed the clouds in arrival order. The arrival time (seconds) replaces the node's clock.
for frame in concatenator.process_cloud("/sensing/lidar/top/pointcloud", cloud, arrival_time=t):
if frame.status is FrameStatus.COMPLETE:
merged = frame.result.concatenated_cloud # sensor_msgs.msg.PointCloud2
# At the end of the stream, close the collectors that are still open (as TIMEOUT frames).
remaining = concatenator.flush()
Each frame carries status (COMPLETE, TIMEOUT or LATE), result.concatenated_cloud,
result.concatenation_info, result.motion_compensation_status and
result.dropped_sources_missing_transform. frame.build_diagnostics() returns the
DiagnosticStatus the node would publish for it.
The arguments, return values and exceptions of each call are in the docstrings
(help(Concatenator)).
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-11-14 |
| 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.
Python binding for point cloud concatenation
The concatenation core (CloudConcatenator, which the concatenate_data node runs) can be used
from Python through autoware_pointcloud_preprocessor.concatenate_pointclouds. It is built and
installed with the package, so no extra build option is needed. It takes and returns rclpy messages
and needs no ROS node: no rclpy.init(), no executor and no TF listener. This makes it useful for
offline work such as re-concatenating a rosbag.
from autoware_pointcloud_preprocessor.concatenate_pointclouds import Concatenator, FrameStatus
concatenator = Concatenator(
["/sensing/lidar/top/pointcloud", "/sensing/lidar/left/pointcloud"],
output_frame="base_link",
timeout_sec=0.1,
)
concatenator.set_transform(top_to_base_link) # a TransformStamped per sensor frame
concatenator.set_transform(left_to_base_link)
concatenator.process_twist(twist) # TwistWithCovarianceStamped; or process_odometry(odometry)
# Feed the clouds in arrival order. The arrival time (seconds) replaces the node's clock.
for frame in concatenator.process_cloud("/sensing/lidar/top/pointcloud", cloud, arrival_time=t):
if frame.status is FrameStatus.COMPLETE:
merged = frame.result.concatenated_cloud # sensor_msgs.msg.PointCloud2
# At the end of the stream, close the collectors that are still open (as TIMEOUT frames).
remaining = concatenator.flush()
Each frame carries status (COMPLETE, TIMEOUT or LATE), result.concatenated_cloud,
result.concatenation_info, result.motion_compensation_status and
result.dropped_sources_missing_transform. frame.build_diagnostics() returns the
DiagnosticStatus the node would publish for it.
The arguments, return values and exceptions of each call are in the docstrings
(help(Concatenator)).
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-11-14 |
| 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.
Python binding for point cloud concatenation
The concatenation core (CloudConcatenator, which the concatenate_data node runs) can be used
from Python through autoware_pointcloud_preprocessor.concatenate_pointclouds. It is built and
installed with the package, so no extra build option is needed. It takes and returns rclpy messages
and needs no ROS node: no rclpy.init(), no executor and no TF listener. This makes it useful for
offline work such as re-concatenating a rosbag.
from autoware_pointcloud_preprocessor.concatenate_pointclouds import Concatenator, FrameStatus
concatenator = Concatenator(
["/sensing/lidar/top/pointcloud", "/sensing/lidar/left/pointcloud"],
output_frame="base_link",
timeout_sec=0.1,
)
concatenator.set_transform(top_to_base_link) # a TransformStamped per sensor frame
concatenator.set_transform(left_to_base_link)
concatenator.process_twist(twist) # TwistWithCovarianceStamped; or process_odometry(odometry)
# Feed the clouds in arrival order. The arrival time (seconds) replaces the node's clock.
for frame in concatenator.process_cloud("/sensing/lidar/top/pointcloud", cloud, arrival_time=t):
if frame.status is FrameStatus.COMPLETE:
merged = frame.result.concatenated_cloud # sensor_msgs.msg.PointCloud2
# At the end of the stream, close the collectors that are still open (as TIMEOUT frames).
remaining = concatenator.flush()
Each frame carries status (COMPLETE, TIMEOUT or LATE), result.concatenated_cloud,
result.concatenation_info, result.motion_compensation_status and
result.dropped_sources_missing_transform. frame.build_diagnostics() returns the
DiagnosticStatus the node would publish for it.
The arguments, return values and exceptions of each call are in the docstrings
(help(Concatenator)).
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-11-14 |
| 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.
Python binding for point cloud concatenation
The concatenation core (CloudConcatenator, which the concatenate_data node runs) can be used
from Python through autoware_pointcloud_preprocessor.concatenate_pointclouds. It is built and
installed with the package, so no extra build option is needed. It takes and returns rclpy messages
and needs no ROS node: no rclpy.init(), no executor and no TF listener. This makes it useful for
offline work such as re-concatenating a rosbag.
from autoware_pointcloud_preprocessor.concatenate_pointclouds import Concatenator, FrameStatus
concatenator = Concatenator(
["/sensing/lidar/top/pointcloud", "/sensing/lidar/left/pointcloud"],
output_frame="base_link",
timeout_sec=0.1,
)
concatenator.set_transform(top_to_base_link) # a TransformStamped per sensor frame
concatenator.set_transform(left_to_base_link)
concatenator.process_twist(twist) # TwistWithCovarianceStamped; or process_odometry(odometry)
# Feed the clouds in arrival order. The arrival time (seconds) replaces the node's clock.
for frame in concatenator.process_cloud("/sensing/lidar/top/pointcloud", cloud, arrival_time=t):
if frame.status is FrameStatus.COMPLETE:
merged = frame.result.concatenated_cloud # sensor_msgs.msg.PointCloud2
# At the end of the stream, close the collectors that are still open (as TIMEOUT frames).
remaining = concatenator.flush()
Each frame carries status (COMPLETE, TIMEOUT or LATE), result.concatenated_cloud,
result.concatenation_info, result.motion_compensation_status and
result.dropped_sources_missing_transform. frame.build_diagnostics() returns the
DiagnosticStatus the node would publish for it.
The arguments, return values and exceptions of each call are in the docstrings
(help(Concatenator)).
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-11-14 |
| 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.
Python binding for point cloud concatenation
The concatenation core (CloudConcatenator, which the concatenate_data node runs) can be used
from Python through autoware_pointcloud_preprocessor.concatenate_pointclouds. It is built and
installed with the package, so no extra build option is needed. It takes and returns rclpy messages
and needs no ROS node: no rclpy.init(), no executor and no TF listener. This makes it useful for
offline work such as re-concatenating a rosbag.
from autoware_pointcloud_preprocessor.concatenate_pointclouds import Concatenator, FrameStatus
concatenator = Concatenator(
["/sensing/lidar/top/pointcloud", "/sensing/lidar/left/pointcloud"],
output_frame="base_link",
timeout_sec=0.1,
)
concatenator.set_transform(top_to_base_link) # a TransformStamped per sensor frame
concatenator.set_transform(left_to_base_link)
concatenator.process_twist(twist) # TwistWithCovarianceStamped; or process_odometry(odometry)
# Feed the clouds in arrival order. The arrival time (seconds) replaces the node's clock.
for frame in concatenator.process_cloud("/sensing/lidar/top/pointcloud", cloud, arrival_time=t):
if frame.status is FrameStatus.COMPLETE:
merged = frame.result.concatenated_cloud # sensor_msgs.msg.PointCloud2
# At the end of the stream, close the collectors that are still open (as TIMEOUT frames).
remaining = concatenator.flush()
Each frame carries status (COMPLETE, TIMEOUT or LATE), result.concatenated_cloud,
result.concatenation_info, result.motion_compensation_status and
result.dropped_sources_missing_transform. frame.build_diagnostics() returns the
DiagnosticStatus the node would publish for it.
The arguments, return values and exceptions of each call are in the docstrings
(help(Concatenator)).
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-11-14 |
| 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.
Python binding for point cloud concatenation
The concatenation core (CloudConcatenator, which the concatenate_data node runs) can be used
from Python through autoware_pointcloud_preprocessor.concatenate_pointclouds. It is built and
installed with the package, so no extra build option is needed. It takes and returns rclpy messages
and needs no ROS node: no rclpy.init(), no executor and no TF listener. This makes it useful for
offline work such as re-concatenating a rosbag.
from autoware_pointcloud_preprocessor.concatenate_pointclouds import Concatenator, FrameStatus
concatenator = Concatenator(
["/sensing/lidar/top/pointcloud", "/sensing/lidar/left/pointcloud"],
output_frame="base_link",
timeout_sec=0.1,
)
concatenator.set_transform(top_to_base_link) # a TransformStamped per sensor frame
concatenator.set_transform(left_to_base_link)
concatenator.process_twist(twist) # TwistWithCovarianceStamped; or process_odometry(odometry)
# Feed the clouds in arrival order. The arrival time (seconds) replaces the node's clock.
for frame in concatenator.process_cloud("/sensing/lidar/top/pointcloud", cloud, arrival_time=t):
if frame.status is FrameStatus.COMPLETE:
merged = frame.result.concatenated_cloud # sensor_msgs.msg.PointCloud2
# At the end of the stream, close the collectors that are still open (as TIMEOUT frames).
remaining = concatenator.flush()
Each frame carries status (COMPLETE, TIMEOUT or LATE), result.concatenated_cloud,
result.concatenation_info, result.motion_compensation_status and
result.dropped_sources_missing_transform. frame.build_diagnostics() returns the
DiagnosticStatus the node would publish for it.
The arguments, return values and exceptions of each call are in the docstrings
(help(Concatenator)).
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-11-14 |
| 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.
Python binding for point cloud concatenation
The concatenation core (CloudConcatenator, which the concatenate_data node runs) can be used
from Python through autoware_pointcloud_preprocessor.concatenate_pointclouds. It is built and
installed with the package, so no extra build option is needed. It takes and returns rclpy messages
and needs no ROS node: no rclpy.init(), no executor and no TF listener. This makes it useful for
offline work such as re-concatenating a rosbag.
from autoware_pointcloud_preprocessor.concatenate_pointclouds import Concatenator, FrameStatus
concatenator = Concatenator(
["/sensing/lidar/top/pointcloud", "/sensing/lidar/left/pointcloud"],
output_frame="base_link",
timeout_sec=0.1,
)
concatenator.set_transform(top_to_base_link) # a TransformStamped per sensor frame
concatenator.set_transform(left_to_base_link)
concatenator.process_twist(twist) # TwistWithCovarianceStamped; or process_odometry(odometry)
# Feed the clouds in arrival order. The arrival time (seconds) replaces the node's clock.
for frame in concatenator.process_cloud("/sensing/lidar/top/pointcloud", cloud, arrival_time=t):
if frame.status is FrameStatus.COMPLETE:
merged = frame.result.concatenated_cloud # sensor_msgs.msg.PointCloud2
# At the end of the stream, close the collectors that are still open (as TIMEOUT frames).
remaining = concatenator.flush()
Each frame carries status (COMPLETE, TIMEOUT or LATE), result.concatenated_cloud,
result.concatenation_info, result.motion_compensation_status and
result.dropped_sources_missing_transform. frame.build_diagnostics() returns the
DiagnosticStatus the node would publish for it.
The arguments, return values and exceptions of each call are in the docstrings
(help(Concatenator)).
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]