Package Summary
| Tags | No category tags. |
| Version | 0.48.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 | 2025-12-03 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
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 |
| 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.
Measuring the performance
In Autoware, point cloud data from each LiDAR sensor undergoes preprocessing in the sensing pipeline before being input into the perception pipeline. The preprocessing stages are illustrated in the diagram below:

Each stage in the pipeline incurs a processing delay. Mostly, we’ve used ros2 topic delay /topic_name to measure
the time between the message header and the current time. This approach works well for small-sized messages. However,
when dealing with large point cloud messages, this method introduces an additional delay. This is primarily because
accessing these large point cloud messages externally impacts the pipeline’s performance.
Our sensing/perception nodes are designed to run within composable node containers, leveraging intra-process communication. External subscriptions to these messages (like using ros2 topic delay or rviz2) impose extra delays and can even slow down the pipeline by subscribing externally. Therefore, these measurements will not be accurate.
To mitigate this issue, we’ve adopted a method where each node in the pipeline reports its pipeline latency time. This approach ensures the integrity of intra-process communication and provides a more accurate measure of delays in the pipeline.
Benchmarking The Pipeline
The nodes within the pipeline report the pipeline latency time, indicating the duration from the sensor driver’s pointcloud output to the node’s output. This data is crucial for assessing the pipeline’s health and efficiency.
When running Autoware, you can monitor the pipeline latency times for each node in the pipeline by subscribing to the following ROS 2 topics:
/sensing/lidar/LidarX/crop_box_filter_self/debug/pipeline_latency_ms/sensing/lidar/LidarX/crop_box_filter_mirror/debug/pipeline_latency_ms/sensing/lidar/LidarX/distortion_corrector/debug/pipeline_latency_ms/sensing/lidar/LidarX/ring_outlier_filter/debug/pipeline_latency_ms/sensing/lidar/concatenate_data_synchronizer/debug/sensing/lidar/LidarX/pointcloud/pipeline_latency_ms
These topics provide the pipeline latency times, giving insights into the delays at various stages of the pipeline from the sensor output of LidarX to each subsequent node.
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.48.0 (2025-11-18)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
-
feat: limit area for visibility estimation (#11549)
- feat: introduce new thresholds to limit area used for visibility estimation
- feat: introduce HysteresisStateMachine to visibility diag
- docs: update document and schema
- style(pre-commit): autofix
- fix: correct typos
- fix: add newly introduced parameters to the test as well
- docs: replace parameters table by including json
- fix(polar_voxel_outlier_filter): use full range (no filter) for [vivisibility_estimation_(min|max)_(azimuth|elevation)_rad]{.title-ref} as default
- feat(polar_voxel_outlier): support min_(azimuthelevation)_rad case
- refactor(polar_voxel_outlier): re-group some parameters
- refactor(polar_voxel_outlier): move hysteresis_state_machine.hpp under include/autoware/pointcloud_preprocessor/diagnostics
- refactor(polar_voxel_outlier): rename variables
- style(pre-commit): autofix
* fix(polar_voxel_outlier): correct typo ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
feat(autoware_pointcloud_preprocessor): polar voxel filter (#10996)
- feat(pointcloud_preprocessor): add basic polar voxel filter
- feat(pointcloud_preprocessor): add initial dual return logic
- feat(pointcloud_preprocessor): refactor and add return type options, documetation
- feat(pointcloud_preprocessor): add visibility to polar voxel filter
- feat(pointcloud_preprocessor): update documentation
- feat(pointcloud_preprocessor): merge readme and documentation files for polar voxel filter
- chore(pointcloud_preprocessor): pass pre-commit
- refector(polar_voxel_filter): simplify return type classification
- refector(polar_voxel_filter): add suffix to parameters with units, update default values
- refector(polar_voxel_filter): explicity speficy index integer type
- refector(polar_voxel_filter): re-work to be O(n) using hashed unordered map, and reduce allocation overhead with multi-stage pass of a single large vector
- refector(polar_voxel_filter): use custom types for cartesian and polar coordinates
- refector(polar_voxel_filter): snake case for functions
- refector(polar_voxel_filter): std::optional for visibility and filter ratio
* Update sensing/autoware_pointcloud_preprocessor/src/outlier_filter/polar_voxel_outlier_filter_node.cpp Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
- refector(polar_voxel_filter): remove log spam and unneccesary comments
- refector(polar_voxel_filter): rename valid points mask and unnecessary variable
- refector(polar_voxel_filter): style and pre-commit fixes
- refactor(pointcloud_preprocessor): address code complexity, duplication
- feat(pointcloud_preprocessor): make noise pointcloud publishing optional
- refactor(pointcloud_preprocessor): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- refactor(pointcloud_preprocessor): limit range in visibilty calculation
- chore(autoware_pointcloud_preprocessor): code complexity and clang-tidy
- feat(polar_voxel_outlier_filter): add visibility estimation parameters, update documentation to match
- feat(polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility), update documentation to match
- refactor(polar_voxel_outlier_filter): reduce cyclic complexity, code smells
- refactor(polar_voxel_outlier_filter): complex conditionals, code smells
- refactor(polar_voxel_outlier_filter): repeated code refactoring
- refactor(polar_voxel_outlier_filter): some more complex conditionals
- feat(polar_voxel_outlier_filter): add unit tests
- refactor(polar_voxel_outlier_filter): code duplication in tests
- refactor(polar_voxel_outlier_filter): more code duplication in tests
- chore(autoware_pointcloud_preprocessor): re-add tests to
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_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
| Tags | No category tags. |
| Version | 0.48.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 | 2025-12-03 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
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 |
| 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.
Measuring the performance
In Autoware, point cloud data from each LiDAR sensor undergoes preprocessing in the sensing pipeline before being input into the perception pipeline. The preprocessing stages are illustrated in the diagram below:

Each stage in the pipeline incurs a processing delay. Mostly, we’ve used ros2 topic delay /topic_name to measure
the time between the message header and the current time. This approach works well for small-sized messages. However,
when dealing with large point cloud messages, this method introduces an additional delay. This is primarily because
accessing these large point cloud messages externally impacts the pipeline’s performance.
Our sensing/perception nodes are designed to run within composable node containers, leveraging intra-process communication. External subscriptions to these messages (like using ros2 topic delay or rviz2) impose extra delays and can even slow down the pipeline by subscribing externally. Therefore, these measurements will not be accurate.
To mitigate this issue, we’ve adopted a method where each node in the pipeline reports its pipeline latency time. This approach ensures the integrity of intra-process communication and provides a more accurate measure of delays in the pipeline.
Benchmarking The Pipeline
The nodes within the pipeline report the pipeline latency time, indicating the duration from the sensor driver’s pointcloud output to the node’s output. This data is crucial for assessing the pipeline’s health and efficiency.
When running Autoware, you can monitor the pipeline latency times for each node in the pipeline by subscribing to the following ROS 2 topics:
/sensing/lidar/LidarX/crop_box_filter_self/debug/pipeline_latency_ms/sensing/lidar/LidarX/crop_box_filter_mirror/debug/pipeline_latency_ms/sensing/lidar/LidarX/distortion_corrector/debug/pipeline_latency_ms/sensing/lidar/LidarX/ring_outlier_filter/debug/pipeline_latency_ms/sensing/lidar/concatenate_data_synchronizer/debug/sensing/lidar/LidarX/pointcloud/pipeline_latency_ms
These topics provide the pipeline latency times, giving insights into the delays at various stages of the pipeline from the sensor output of LidarX to each subsequent node.
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.48.0 (2025-11-18)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
-
feat: limit area for visibility estimation (#11549)
- feat: introduce new thresholds to limit area used for visibility estimation
- feat: introduce HysteresisStateMachine to visibility diag
- docs: update document and schema
- style(pre-commit): autofix
- fix: correct typos
- fix: add newly introduced parameters to the test as well
- docs: replace parameters table by including json
- fix(polar_voxel_outlier_filter): use full range (no filter) for [vivisibility_estimation_(min|max)_(azimuth|elevation)_rad]{.title-ref} as default
- feat(polar_voxel_outlier): support min_(azimuthelevation)_rad case
- refactor(polar_voxel_outlier): re-group some parameters
- refactor(polar_voxel_outlier): move hysteresis_state_machine.hpp under include/autoware/pointcloud_preprocessor/diagnostics
- refactor(polar_voxel_outlier): rename variables
- style(pre-commit): autofix
* fix(polar_voxel_outlier): correct typo ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
feat(autoware_pointcloud_preprocessor): polar voxel filter (#10996)
- feat(pointcloud_preprocessor): add basic polar voxel filter
- feat(pointcloud_preprocessor): add initial dual return logic
- feat(pointcloud_preprocessor): refactor and add return type options, documetation
- feat(pointcloud_preprocessor): add visibility to polar voxel filter
- feat(pointcloud_preprocessor): update documentation
- feat(pointcloud_preprocessor): merge readme and documentation files for polar voxel filter
- chore(pointcloud_preprocessor): pass pre-commit
- refector(polar_voxel_filter): simplify return type classification
- refector(polar_voxel_filter): add suffix to parameters with units, update default values
- refector(polar_voxel_filter): explicity speficy index integer type
- refector(polar_voxel_filter): re-work to be O(n) using hashed unordered map, and reduce allocation overhead with multi-stage pass of a single large vector
- refector(polar_voxel_filter): use custom types for cartesian and polar coordinates
- refector(polar_voxel_filter): snake case for functions
- refector(polar_voxel_filter): std::optional for visibility and filter ratio
* Update sensing/autoware_pointcloud_preprocessor/src/outlier_filter/polar_voxel_outlier_filter_node.cpp Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
- refector(polar_voxel_filter): remove log spam and unneccesary comments
- refector(polar_voxel_filter): rename valid points mask and unnecessary variable
- refector(polar_voxel_filter): style and pre-commit fixes
- refactor(pointcloud_preprocessor): address code complexity, duplication
- feat(pointcloud_preprocessor): make noise pointcloud publishing optional
- refactor(pointcloud_preprocessor): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- refactor(pointcloud_preprocessor): limit range in visibilty calculation
- chore(autoware_pointcloud_preprocessor): code complexity and clang-tidy
- feat(polar_voxel_outlier_filter): add visibility estimation parameters, update documentation to match
- feat(polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility), update documentation to match
- refactor(polar_voxel_outlier_filter): reduce cyclic complexity, code smells
- refactor(polar_voxel_outlier_filter): complex conditionals, code smells
- refactor(polar_voxel_outlier_filter): repeated code refactoring
- refactor(polar_voxel_outlier_filter): some more complex conditionals
- feat(polar_voxel_outlier_filter): add unit tests
- refactor(polar_voxel_outlier_filter): code duplication in tests
- refactor(polar_voxel_outlier_filter): more code duplication in tests
- chore(autoware_pointcloud_preprocessor): re-add tests to
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_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
| Tags | No category tags. |
| Version | 0.48.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 | 2025-12-03 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
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 |
| 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.
Measuring the performance
In Autoware, point cloud data from each LiDAR sensor undergoes preprocessing in the sensing pipeline before being input into the perception pipeline. The preprocessing stages are illustrated in the diagram below:

Each stage in the pipeline incurs a processing delay. Mostly, we’ve used ros2 topic delay /topic_name to measure
the time between the message header and the current time. This approach works well for small-sized messages. However,
when dealing with large point cloud messages, this method introduces an additional delay. This is primarily because
accessing these large point cloud messages externally impacts the pipeline’s performance.
Our sensing/perception nodes are designed to run within composable node containers, leveraging intra-process communication. External subscriptions to these messages (like using ros2 topic delay or rviz2) impose extra delays and can even slow down the pipeline by subscribing externally. Therefore, these measurements will not be accurate.
To mitigate this issue, we’ve adopted a method where each node in the pipeline reports its pipeline latency time. This approach ensures the integrity of intra-process communication and provides a more accurate measure of delays in the pipeline.
Benchmarking The Pipeline
The nodes within the pipeline report the pipeline latency time, indicating the duration from the sensor driver’s pointcloud output to the node’s output. This data is crucial for assessing the pipeline’s health and efficiency.
When running Autoware, you can monitor the pipeline latency times for each node in the pipeline by subscribing to the following ROS 2 topics:
/sensing/lidar/LidarX/crop_box_filter_self/debug/pipeline_latency_ms/sensing/lidar/LidarX/crop_box_filter_mirror/debug/pipeline_latency_ms/sensing/lidar/LidarX/distortion_corrector/debug/pipeline_latency_ms/sensing/lidar/LidarX/ring_outlier_filter/debug/pipeline_latency_ms/sensing/lidar/concatenate_data_synchronizer/debug/sensing/lidar/LidarX/pointcloud/pipeline_latency_ms
These topics provide the pipeline latency times, giving insights into the delays at various stages of the pipeline from the sensor output of LidarX to each subsequent node.
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.48.0 (2025-11-18)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
-
feat: limit area for visibility estimation (#11549)
- feat: introduce new thresholds to limit area used for visibility estimation
- feat: introduce HysteresisStateMachine to visibility diag
- docs: update document and schema
- style(pre-commit): autofix
- fix: correct typos
- fix: add newly introduced parameters to the test as well
- docs: replace parameters table by including json
- fix(polar_voxel_outlier_filter): use full range (no filter) for [vivisibility_estimation_(min|max)_(azimuth|elevation)_rad]{.title-ref} as default
- feat(polar_voxel_outlier): support min_(azimuthelevation)_rad case
- refactor(polar_voxel_outlier): re-group some parameters
- refactor(polar_voxel_outlier): move hysteresis_state_machine.hpp under include/autoware/pointcloud_preprocessor/diagnostics
- refactor(polar_voxel_outlier): rename variables
- style(pre-commit): autofix
* fix(polar_voxel_outlier): correct typo ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
feat(autoware_pointcloud_preprocessor): polar voxel filter (#10996)
- feat(pointcloud_preprocessor): add basic polar voxel filter
- feat(pointcloud_preprocessor): add initial dual return logic
- feat(pointcloud_preprocessor): refactor and add return type options, documetation
- feat(pointcloud_preprocessor): add visibility to polar voxel filter
- feat(pointcloud_preprocessor): update documentation
- feat(pointcloud_preprocessor): merge readme and documentation files for polar voxel filter
- chore(pointcloud_preprocessor): pass pre-commit
- refector(polar_voxel_filter): simplify return type classification
- refector(polar_voxel_filter): add suffix to parameters with units, update default values
- refector(polar_voxel_filter): explicity speficy index integer type
- refector(polar_voxel_filter): re-work to be O(n) using hashed unordered map, and reduce allocation overhead with multi-stage pass of a single large vector
- refector(polar_voxel_filter): use custom types for cartesian and polar coordinates
- refector(polar_voxel_filter): snake case for functions
- refector(polar_voxel_filter): std::optional for visibility and filter ratio
* Update sensing/autoware_pointcloud_preprocessor/src/outlier_filter/polar_voxel_outlier_filter_node.cpp Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
- refector(polar_voxel_filter): remove log spam and unneccesary comments
- refector(polar_voxel_filter): rename valid points mask and unnecessary variable
- refector(polar_voxel_filter): style and pre-commit fixes
- refactor(pointcloud_preprocessor): address code complexity, duplication
- feat(pointcloud_preprocessor): make noise pointcloud publishing optional
- refactor(pointcloud_preprocessor): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- refactor(pointcloud_preprocessor): limit range in visibilty calculation
- chore(autoware_pointcloud_preprocessor): code complexity and clang-tidy
- feat(polar_voxel_outlier_filter): add visibility estimation parameters, update documentation to match
- feat(polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility), update documentation to match
- refactor(polar_voxel_outlier_filter): reduce cyclic complexity, code smells
- refactor(polar_voxel_outlier_filter): complex conditionals, code smells
- refactor(polar_voxel_outlier_filter): repeated code refactoring
- refactor(polar_voxel_outlier_filter): some more complex conditionals
- feat(polar_voxel_outlier_filter): add unit tests
- refactor(polar_voxel_outlier_filter): code duplication in tests
- refactor(polar_voxel_outlier_filter): more code duplication in tests
- chore(autoware_pointcloud_preprocessor): re-add tests to
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_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
| Tags | No category tags. |
| Version | 0.48.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 | 2025-12-03 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
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 |
| 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.
Measuring the performance
In Autoware, point cloud data from each LiDAR sensor undergoes preprocessing in the sensing pipeline before being input into the perception pipeline. The preprocessing stages are illustrated in the diagram below:

Each stage in the pipeline incurs a processing delay. Mostly, we’ve used ros2 topic delay /topic_name to measure
the time between the message header and the current time. This approach works well for small-sized messages. However,
when dealing with large point cloud messages, this method introduces an additional delay. This is primarily because
accessing these large point cloud messages externally impacts the pipeline’s performance.
Our sensing/perception nodes are designed to run within composable node containers, leveraging intra-process communication. External subscriptions to these messages (like using ros2 topic delay or rviz2) impose extra delays and can even slow down the pipeline by subscribing externally. Therefore, these measurements will not be accurate.
To mitigate this issue, we’ve adopted a method where each node in the pipeline reports its pipeline latency time. This approach ensures the integrity of intra-process communication and provides a more accurate measure of delays in the pipeline.
Benchmarking The Pipeline
The nodes within the pipeline report the pipeline latency time, indicating the duration from the sensor driver’s pointcloud output to the node’s output. This data is crucial for assessing the pipeline’s health and efficiency.
When running Autoware, you can monitor the pipeline latency times for each node in the pipeline by subscribing to the following ROS 2 topics:
/sensing/lidar/LidarX/crop_box_filter_self/debug/pipeline_latency_ms/sensing/lidar/LidarX/crop_box_filter_mirror/debug/pipeline_latency_ms/sensing/lidar/LidarX/distortion_corrector/debug/pipeline_latency_ms/sensing/lidar/LidarX/ring_outlier_filter/debug/pipeline_latency_ms/sensing/lidar/concatenate_data_synchronizer/debug/sensing/lidar/LidarX/pointcloud/pipeline_latency_ms
These topics provide the pipeline latency times, giving insights into the delays at various stages of the pipeline from the sensor output of LidarX to each subsequent node.
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.48.0 (2025-11-18)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
-
feat: limit area for visibility estimation (#11549)
- feat: introduce new thresholds to limit area used for visibility estimation
- feat: introduce HysteresisStateMachine to visibility diag
- docs: update document and schema
- style(pre-commit): autofix
- fix: correct typos
- fix: add newly introduced parameters to the test as well
- docs: replace parameters table by including json
- fix(polar_voxel_outlier_filter): use full range (no filter) for [vivisibility_estimation_(min|max)_(azimuth|elevation)_rad]{.title-ref} as default
- feat(polar_voxel_outlier): support min_(azimuthelevation)_rad case
- refactor(polar_voxel_outlier): re-group some parameters
- refactor(polar_voxel_outlier): move hysteresis_state_machine.hpp under include/autoware/pointcloud_preprocessor/diagnostics
- refactor(polar_voxel_outlier): rename variables
- style(pre-commit): autofix
* fix(polar_voxel_outlier): correct typo ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
feat(autoware_pointcloud_preprocessor): polar voxel filter (#10996)
- feat(pointcloud_preprocessor): add basic polar voxel filter
- feat(pointcloud_preprocessor): add initial dual return logic
- feat(pointcloud_preprocessor): refactor and add return type options, documetation
- feat(pointcloud_preprocessor): add visibility to polar voxel filter
- feat(pointcloud_preprocessor): update documentation
- feat(pointcloud_preprocessor): merge readme and documentation files for polar voxel filter
- chore(pointcloud_preprocessor): pass pre-commit
- refector(polar_voxel_filter): simplify return type classification
- refector(polar_voxel_filter): add suffix to parameters with units, update default values
- refector(polar_voxel_filter): explicity speficy index integer type
- refector(polar_voxel_filter): re-work to be O(n) using hashed unordered map, and reduce allocation overhead with multi-stage pass of a single large vector
- refector(polar_voxel_filter): use custom types for cartesian and polar coordinates
- refector(polar_voxel_filter): snake case for functions
- refector(polar_voxel_filter): std::optional for visibility and filter ratio
* Update sensing/autoware_pointcloud_preprocessor/src/outlier_filter/polar_voxel_outlier_filter_node.cpp Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
- refector(polar_voxel_filter): remove log spam and unneccesary comments
- refector(polar_voxel_filter): rename valid points mask and unnecessary variable
- refector(polar_voxel_filter): style and pre-commit fixes
- refactor(pointcloud_preprocessor): address code complexity, duplication
- feat(pointcloud_preprocessor): make noise pointcloud publishing optional
- refactor(pointcloud_preprocessor): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- refactor(pointcloud_preprocessor): limit range in visibilty calculation
- chore(autoware_pointcloud_preprocessor): code complexity and clang-tidy
- feat(polar_voxel_outlier_filter): add visibility estimation parameters, update documentation to match
- feat(polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility), update documentation to match
- refactor(polar_voxel_outlier_filter): reduce cyclic complexity, code smells
- refactor(polar_voxel_outlier_filter): complex conditionals, code smells
- refactor(polar_voxel_outlier_filter): repeated code refactoring
- refactor(polar_voxel_outlier_filter): some more complex conditionals
- feat(polar_voxel_outlier_filter): add unit tests
- refactor(polar_voxel_outlier_filter): code duplication in tests
- refactor(polar_voxel_outlier_filter): more code duplication in tests
- chore(autoware_pointcloud_preprocessor): re-add tests to
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_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
| Tags | No category tags. |
| Version | 0.48.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 | 2025-12-03 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
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 |
| 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.
Measuring the performance
In Autoware, point cloud data from each LiDAR sensor undergoes preprocessing in the sensing pipeline before being input into the perception pipeline. The preprocessing stages are illustrated in the diagram below:

Each stage in the pipeline incurs a processing delay. Mostly, we’ve used ros2 topic delay /topic_name to measure
the time between the message header and the current time. This approach works well for small-sized messages. However,
when dealing with large point cloud messages, this method introduces an additional delay. This is primarily because
accessing these large point cloud messages externally impacts the pipeline’s performance.
Our sensing/perception nodes are designed to run within composable node containers, leveraging intra-process communication. External subscriptions to these messages (like using ros2 topic delay or rviz2) impose extra delays and can even slow down the pipeline by subscribing externally. Therefore, these measurements will not be accurate.
To mitigate this issue, we’ve adopted a method where each node in the pipeline reports its pipeline latency time. This approach ensures the integrity of intra-process communication and provides a more accurate measure of delays in the pipeline.
Benchmarking The Pipeline
The nodes within the pipeline report the pipeline latency time, indicating the duration from the sensor driver’s pointcloud output to the node’s output. This data is crucial for assessing the pipeline’s health and efficiency.
When running Autoware, you can monitor the pipeline latency times for each node in the pipeline by subscribing to the following ROS 2 topics:
/sensing/lidar/LidarX/crop_box_filter_self/debug/pipeline_latency_ms/sensing/lidar/LidarX/crop_box_filter_mirror/debug/pipeline_latency_ms/sensing/lidar/LidarX/distortion_corrector/debug/pipeline_latency_ms/sensing/lidar/LidarX/ring_outlier_filter/debug/pipeline_latency_ms/sensing/lidar/concatenate_data_synchronizer/debug/sensing/lidar/LidarX/pointcloud/pipeline_latency_ms
These topics provide the pipeline latency times, giving insights into the delays at various stages of the pipeline from the sensor output of LidarX to each subsequent node.
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.48.0 (2025-11-18)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
-
feat: limit area for visibility estimation (#11549)
- feat: introduce new thresholds to limit area used for visibility estimation
- feat: introduce HysteresisStateMachine to visibility diag
- docs: update document and schema
- style(pre-commit): autofix
- fix: correct typos
- fix: add newly introduced parameters to the test as well
- docs: replace parameters table by including json
- fix(polar_voxel_outlier_filter): use full range (no filter) for [vivisibility_estimation_(min|max)_(azimuth|elevation)_rad]{.title-ref} as default
- feat(polar_voxel_outlier): support min_(azimuthelevation)_rad case
- refactor(polar_voxel_outlier): re-group some parameters
- refactor(polar_voxel_outlier): move hysteresis_state_machine.hpp under include/autoware/pointcloud_preprocessor/diagnostics
- refactor(polar_voxel_outlier): rename variables
- style(pre-commit): autofix
* fix(polar_voxel_outlier): correct typo ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
feat(autoware_pointcloud_preprocessor): polar voxel filter (#10996)
- feat(pointcloud_preprocessor): add basic polar voxel filter
- feat(pointcloud_preprocessor): add initial dual return logic
- feat(pointcloud_preprocessor): refactor and add return type options, documetation
- feat(pointcloud_preprocessor): add visibility to polar voxel filter
- feat(pointcloud_preprocessor): update documentation
- feat(pointcloud_preprocessor): merge readme and documentation files for polar voxel filter
- chore(pointcloud_preprocessor): pass pre-commit
- refector(polar_voxel_filter): simplify return type classification
- refector(polar_voxel_filter): add suffix to parameters with units, update default values
- refector(polar_voxel_filter): explicity speficy index integer type
- refector(polar_voxel_filter): re-work to be O(n) using hashed unordered map, and reduce allocation overhead with multi-stage pass of a single large vector
- refector(polar_voxel_filter): use custom types for cartesian and polar coordinates
- refector(polar_voxel_filter): snake case for functions
- refector(polar_voxel_filter): std::optional for visibility and filter ratio
* Update sensing/autoware_pointcloud_preprocessor/src/outlier_filter/polar_voxel_outlier_filter_node.cpp Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
- refector(polar_voxel_filter): remove log spam and unneccesary comments
- refector(polar_voxel_filter): rename valid points mask and unnecessary variable
- refector(polar_voxel_filter): style and pre-commit fixes
- refactor(pointcloud_preprocessor): address code complexity, duplication
- feat(pointcloud_preprocessor): make noise pointcloud publishing optional
- refactor(pointcloud_preprocessor): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- refactor(pointcloud_preprocessor): limit range in visibilty calculation
- chore(autoware_pointcloud_preprocessor): code complexity and clang-tidy
- feat(polar_voxel_outlier_filter): add visibility estimation parameters, update documentation to match
- feat(polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility), update documentation to match
- refactor(polar_voxel_outlier_filter): reduce cyclic complexity, code smells
- refactor(polar_voxel_outlier_filter): complex conditionals, code smells
- refactor(polar_voxel_outlier_filter): repeated code refactoring
- refactor(polar_voxel_outlier_filter): some more complex conditionals
- feat(polar_voxel_outlier_filter): add unit tests
- refactor(polar_voxel_outlier_filter): code duplication in tests
- refactor(polar_voxel_outlier_filter): more code duplication in tests
- chore(autoware_pointcloud_preprocessor): re-add tests to
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_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
| Tags | No category tags. |
| Version | 0.48.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 | 2025-12-03 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
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 |
| 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.
Measuring the performance
In Autoware, point cloud data from each LiDAR sensor undergoes preprocessing in the sensing pipeline before being input into the perception pipeline. The preprocessing stages are illustrated in the diagram below:

Each stage in the pipeline incurs a processing delay. Mostly, we’ve used ros2 topic delay /topic_name to measure
the time between the message header and the current time. This approach works well for small-sized messages. However,
when dealing with large point cloud messages, this method introduces an additional delay. This is primarily because
accessing these large point cloud messages externally impacts the pipeline’s performance.
Our sensing/perception nodes are designed to run within composable node containers, leveraging intra-process communication. External subscriptions to these messages (like using ros2 topic delay or rviz2) impose extra delays and can even slow down the pipeline by subscribing externally. Therefore, these measurements will not be accurate.
To mitigate this issue, we’ve adopted a method where each node in the pipeline reports its pipeline latency time. This approach ensures the integrity of intra-process communication and provides a more accurate measure of delays in the pipeline.
Benchmarking The Pipeline
The nodes within the pipeline report the pipeline latency time, indicating the duration from the sensor driver’s pointcloud output to the node’s output. This data is crucial for assessing the pipeline’s health and efficiency.
When running Autoware, you can monitor the pipeline latency times for each node in the pipeline by subscribing to the following ROS 2 topics:
/sensing/lidar/LidarX/crop_box_filter_self/debug/pipeline_latency_ms/sensing/lidar/LidarX/crop_box_filter_mirror/debug/pipeline_latency_ms/sensing/lidar/LidarX/distortion_corrector/debug/pipeline_latency_ms/sensing/lidar/LidarX/ring_outlier_filter/debug/pipeline_latency_ms/sensing/lidar/concatenate_data_synchronizer/debug/sensing/lidar/LidarX/pointcloud/pipeline_latency_ms
These topics provide the pipeline latency times, giving insights into the delays at various stages of the pipeline from the sensor output of LidarX to each subsequent node.
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.48.0 (2025-11-18)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
-
feat: limit area for visibility estimation (#11549)
- feat: introduce new thresholds to limit area used for visibility estimation
- feat: introduce HysteresisStateMachine to visibility diag
- docs: update document and schema
- style(pre-commit): autofix
- fix: correct typos
- fix: add newly introduced parameters to the test as well
- docs: replace parameters table by including json
- fix(polar_voxel_outlier_filter): use full range (no filter) for [vivisibility_estimation_(min|max)_(azimuth|elevation)_rad]{.title-ref} as default
- feat(polar_voxel_outlier): support min_(azimuthelevation)_rad case
- refactor(polar_voxel_outlier): re-group some parameters
- refactor(polar_voxel_outlier): move hysteresis_state_machine.hpp under include/autoware/pointcloud_preprocessor/diagnostics
- refactor(polar_voxel_outlier): rename variables
- style(pre-commit): autofix
* fix(polar_voxel_outlier): correct typo ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
feat(autoware_pointcloud_preprocessor): polar voxel filter (#10996)
- feat(pointcloud_preprocessor): add basic polar voxel filter
- feat(pointcloud_preprocessor): add initial dual return logic
- feat(pointcloud_preprocessor): refactor and add return type options, documetation
- feat(pointcloud_preprocessor): add visibility to polar voxel filter
- feat(pointcloud_preprocessor): update documentation
- feat(pointcloud_preprocessor): merge readme and documentation files for polar voxel filter
- chore(pointcloud_preprocessor): pass pre-commit
- refector(polar_voxel_filter): simplify return type classification
- refector(polar_voxel_filter): add suffix to parameters with units, update default values
- refector(polar_voxel_filter): explicity speficy index integer type
- refector(polar_voxel_filter): re-work to be O(n) using hashed unordered map, and reduce allocation overhead with multi-stage pass of a single large vector
- refector(polar_voxel_filter): use custom types for cartesian and polar coordinates
- refector(polar_voxel_filter): snake case for functions
- refector(polar_voxel_filter): std::optional for visibility and filter ratio
* Update sensing/autoware_pointcloud_preprocessor/src/outlier_filter/polar_voxel_outlier_filter_node.cpp Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
- refector(polar_voxel_filter): remove log spam and unneccesary comments
- refector(polar_voxel_filter): rename valid points mask and unnecessary variable
- refector(polar_voxel_filter): style and pre-commit fixes
- refactor(pointcloud_preprocessor): address code complexity, duplication
- feat(pointcloud_preprocessor): make noise pointcloud publishing optional
- refactor(pointcloud_preprocessor): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- refactor(pointcloud_preprocessor): limit range in visibilty calculation
- chore(autoware_pointcloud_preprocessor): code complexity and clang-tidy
- feat(polar_voxel_outlier_filter): add visibility estimation parameters, update documentation to match
- feat(polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility), update documentation to match
- refactor(polar_voxel_outlier_filter): reduce cyclic complexity, code smells
- refactor(polar_voxel_outlier_filter): complex conditionals, code smells
- refactor(polar_voxel_outlier_filter): repeated code refactoring
- refactor(polar_voxel_outlier_filter): some more complex conditionals
- feat(polar_voxel_outlier_filter): add unit tests
- refactor(polar_voxel_outlier_filter): code duplication in tests
- refactor(polar_voxel_outlier_filter): more code duplication in tests
- chore(autoware_pointcloud_preprocessor): re-add tests to
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_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
| Tags | No category tags. |
| Version | 0.48.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 | 2025-12-03 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
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 |
| 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.
Measuring the performance
In Autoware, point cloud data from each LiDAR sensor undergoes preprocessing in the sensing pipeline before being input into the perception pipeline. The preprocessing stages are illustrated in the diagram below:

Each stage in the pipeline incurs a processing delay. Mostly, we’ve used ros2 topic delay /topic_name to measure
the time between the message header and the current time. This approach works well for small-sized messages. However,
when dealing with large point cloud messages, this method introduces an additional delay. This is primarily because
accessing these large point cloud messages externally impacts the pipeline’s performance.
Our sensing/perception nodes are designed to run within composable node containers, leveraging intra-process communication. External subscriptions to these messages (like using ros2 topic delay or rviz2) impose extra delays and can even slow down the pipeline by subscribing externally. Therefore, these measurements will not be accurate.
To mitigate this issue, we’ve adopted a method where each node in the pipeline reports its pipeline latency time. This approach ensures the integrity of intra-process communication and provides a more accurate measure of delays in the pipeline.
Benchmarking The Pipeline
The nodes within the pipeline report the pipeline latency time, indicating the duration from the sensor driver’s pointcloud output to the node’s output. This data is crucial for assessing the pipeline’s health and efficiency.
When running Autoware, you can monitor the pipeline latency times for each node in the pipeline by subscribing to the following ROS 2 topics:
/sensing/lidar/LidarX/crop_box_filter_self/debug/pipeline_latency_ms/sensing/lidar/LidarX/crop_box_filter_mirror/debug/pipeline_latency_ms/sensing/lidar/LidarX/distortion_corrector/debug/pipeline_latency_ms/sensing/lidar/LidarX/ring_outlier_filter/debug/pipeline_latency_ms/sensing/lidar/concatenate_data_synchronizer/debug/sensing/lidar/LidarX/pointcloud/pipeline_latency_ms
These topics provide the pipeline latency times, giving insights into the delays at various stages of the pipeline from the sensor output of LidarX to each subsequent node.
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.48.0 (2025-11-18)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
-
feat: limit area for visibility estimation (#11549)
- feat: introduce new thresholds to limit area used for visibility estimation
- feat: introduce HysteresisStateMachine to visibility diag
- docs: update document and schema
- style(pre-commit): autofix
- fix: correct typos
- fix: add newly introduced parameters to the test as well
- docs: replace parameters table by including json
- fix(polar_voxel_outlier_filter): use full range (no filter) for [vivisibility_estimation_(min|max)_(azimuth|elevation)_rad]{.title-ref} as default
- feat(polar_voxel_outlier): support min_(azimuthelevation)_rad case
- refactor(polar_voxel_outlier): re-group some parameters
- refactor(polar_voxel_outlier): move hysteresis_state_machine.hpp under include/autoware/pointcloud_preprocessor/diagnostics
- refactor(polar_voxel_outlier): rename variables
- style(pre-commit): autofix
* fix(polar_voxel_outlier): correct typo ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
feat(autoware_pointcloud_preprocessor): polar voxel filter (#10996)
- feat(pointcloud_preprocessor): add basic polar voxel filter
- feat(pointcloud_preprocessor): add initial dual return logic
- feat(pointcloud_preprocessor): refactor and add return type options, documetation
- feat(pointcloud_preprocessor): add visibility to polar voxel filter
- feat(pointcloud_preprocessor): update documentation
- feat(pointcloud_preprocessor): merge readme and documentation files for polar voxel filter
- chore(pointcloud_preprocessor): pass pre-commit
- refector(polar_voxel_filter): simplify return type classification
- refector(polar_voxel_filter): add suffix to parameters with units, update default values
- refector(polar_voxel_filter): explicity speficy index integer type
- refector(polar_voxel_filter): re-work to be O(n) using hashed unordered map, and reduce allocation overhead with multi-stage pass of a single large vector
- refector(polar_voxel_filter): use custom types for cartesian and polar coordinates
- refector(polar_voxel_filter): snake case for functions
- refector(polar_voxel_filter): std::optional for visibility and filter ratio
* Update sensing/autoware_pointcloud_preprocessor/src/outlier_filter/polar_voxel_outlier_filter_node.cpp Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
- refector(polar_voxel_filter): remove log spam and unneccesary comments
- refector(polar_voxel_filter): rename valid points mask and unnecessary variable
- refector(polar_voxel_filter): style and pre-commit fixes
- refactor(pointcloud_preprocessor): address code complexity, duplication
- feat(pointcloud_preprocessor): make noise pointcloud publishing optional
- refactor(pointcloud_preprocessor): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- refactor(pointcloud_preprocessor): limit range in visibilty calculation
- chore(autoware_pointcloud_preprocessor): code complexity and clang-tidy
- feat(polar_voxel_outlier_filter): add visibility estimation parameters, update documentation to match
- feat(polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility), update documentation to match
- refactor(polar_voxel_outlier_filter): reduce cyclic complexity, code smells
- refactor(polar_voxel_outlier_filter): complex conditionals, code smells
- refactor(polar_voxel_outlier_filter): repeated code refactoring
- refactor(polar_voxel_outlier_filter): some more complex conditionals
- feat(polar_voxel_outlier_filter): add unit tests
- refactor(polar_voxel_outlier_filter): code duplication in tests
- refactor(polar_voxel_outlier_filter): more code duplication in tests
- chore(autoware_pointcloud_preprocessor): re-add tests to
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_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
| Tags | No category tags. |
| Version | 0.48.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 | 2025-12-03 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
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 |
| 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.
Measuring the performance
In Autoware, point cloud data from each LiDAR sensor undergoes preprocessing in the sensing pipeline before being input into the perception pipeline. The preprocessing stages are illustrated in the diagram below:

Each stage in the pipeline incurs a processing delay. Mostly, we’ve used ros2 topic delay /topic_name to measure
the time between the message header and the current time. This approach works well for small-sized messages. However,
when dealing with large point cloud messages, this method introduces an additional delay. This is primarily because
accessing these large point cloud messages externally impacts the pipeline’s performance.
Our sensing/perception nodes are designed to run within composable node containers, leveraging intra-process communication. External subscriptions to these messages (like using ros2 topic delay or rviz2) impose extra delays and can even slow down the pipeline by subscribing externally. Therefore, these measurements will not be accurate.
To mitigate this issue, we’ve adopted a method where each node in the pipeline reports its pipeline latency time. This approach ensures the integrity of intra-process communication and provides a more accurate measure of delays in the pipeline.
Benchmarking The Pipeline
The nodes within the pipeline report the pipeline latency time, indicating the duration from the sensor driver’s pointcloud output to the node’s output. This data is crucial for assessing the pipeline’s health and efficiency.
When running Autoware, you can monitor the pipeline latency times for each node in the pipeline by subscribing to the following ROS 2 topics:
/sensing/lidar/LidarX/crop_box_filter_self/debug/pipeline_latency_ms/sensing/lidar/LidarX/crop_box_filter_mirror/debug/pipeline_latency_ms/sensing/lidar/LidarX/distortion_corrector/debug/pipeline_latency_ms/sensing/lidar/LidarX/ring_outlier_filter/debug/pipeline_latency_ms/sensing/lidar/concatenate_data_synchronizer/debug/sensing/lidar/LidarX/pointcloud/pipeline_latency_ms
These topics provide the pipeline latency times, giving insights into the delays at various stages of the pipeline from the sensor output of LidarX to each subsequent node.
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.48.0 (2025-11-18)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
-
feat: limit area for visibility estimation (#11549)
- feat: introduce new thresholds to limit area used for visibility estimation
- feat: introduce HysteresisStateMachine to visibility diag
- docs: update document and schema
- style(pre-commit): autofix
- fix: correct typos
- fix: add newly introduced parameters to the test as well
- docs: replace parameters table by including json
- fix(polar_voxel_outlier_filter): use full range (no filter) for [vivisibility_estimation_(min|max)_(azimuth|elevation)_rad]{.title-ref} as default
- feat(polar_voxel_outlier): support min_(azimuthelevation)_rad case
- refactor(polar_voxel_outlier): re-group some parameters
- refactor(polar_voxel_outlier): move hysteresis_state_machine.hpp under include/autoware/pointcloud_preprocessor/diagnostics
- refactor(polar_voxel_outlier): rename variables
- style(pre-commit): autofix
* fix(polar_voxel_outlier): correct typo ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
feat(autoware_pointcloud_preprocessor): polar voxel filter (#10996)
- feat(pointcloud_preprocessor): add basic polar voxel filter
- feat(pointcloud_preprocessor): add initial dual return logic
- feat(pointcloud_preprocessor): refactor and add return type options, documetation
- feat(pointcloud_preprocessor): add visibility to polar voxel filter
- feat(pointcloud_preprocessor): update documentation
- feat(pointcloud_preprocessor): merge readme and documentation files for polar voxel filter
- chore(pointcloud_preprocessor): pass pre-commit
- refector(polar_voxel_filter): simplify return type classification
- refector(polar_voxel_filter): add suffix to parameters with units, update default values
- refector(polar_voxel_filter): explicity speficy index integer type
- refector(polar_voxel_filter): re-work to be O(n) using hashed unordered map, and reduce allocation overhead with multi-stage pass of a single large vector
- refector(polar_voxel_filter): use custom types for cartesian and polar coordinates
- refector(polar_voxel_filter): snake case for functions
- refector(polar_voxel_filter): std::optional for visibility and filter ratio
* Update sensing/autoware_pointcloud_preprocessor/src/outlier_filter/polar_voxel_outlier_filter_node.cpp Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
- refector(polar_voxel_filter): remove log spam and unneccesary comments
- refector(polar_voxel_filter): rename valid points mask and unnecessary variable
- refector(polar_voxel_filter): style and pre-commit fixes
- refactor(pointcloud_preprocessor): address code complexity, duplication
- feat(pointcloud_preprocessor): make noise pointcloud publishing optional
- refactor(pointcloud_preprocessor): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- refactor(pointcloud_preprocessor): limit range in visibilty calculation
- chore(autoware_pointcloud_preprocessor): code complexity and clang-tidy
- feat(polar_voxel_outlier_filter): add visibility estimation parameters, update documentation to match
- feat(polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility), update documentation to match
- refactor(polar_voxel_outlier_filter): reduce cyclic complexity, code smells
- refactor(polar_voxel_outlier_filter): complex conditionals, code smells
- refactor(polar_voxel_outlier_filter): repeated code refactoring
- refactor(polar_voxel_outlier_filter): some more complex conditionals
- feat(polar_voxel_outlier_filter): add unit tests
- refactor(polar_voxel_outlier_filter): code duplication in tests
- refactor(polar_voxel_outlier_filter): more code duplication in tests
- chore(autoware_pointcloud_preprocessor): re-add tests to
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_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
| Tags | No category tags. |
| Version | 0.48.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 | 2025-12-03 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Tags | planner ros calibration self-driving-car autonomous-driving autonomous-vehicles ros2 3d-map autoware |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- amc-nu
- Yukihiro Saito
- Kyoichi Sugahara
- Dai Nguyen
- Kenzo Lobos-Tsunekawa
- Yihsiang Fang
- Yoshi Ri
- David Wong
- Melike Tanrikulu
- Max Schmeller
- Kaan Colak
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 |
| 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.
Measuring the performance
In Autoware, point cloud data from each LiDAR sensor undergoes preprocessing in the sensing pipeline before being input into the perception pipeline. The preprocessing stages are illustrated in the diagram below:

Each stage in the pipeline incurs a processing delay. Mostly, we’ve used ros2 topic delay /topic_name to measure
the time between the message header and the current time. This approach works well for small-sized messages. However,
when dealing with large point cloud messages, this method introduces an additional delay. This is primarily because
accessing these large point cloud messages externally impacts the pipeline’s performance.
Our sensing/perception nodes are designed to run within composable node containers, leveraging intra-process communication. External subscriptions to these messages (like using ros2 topic delay or rviz2) impose extra delays and can even slow down the pipeline by subscribing externally. Therefore, these measurements will not be accurate.
To mitigate this issue, we’ve adopted a method where each node in the pipeline reports its pipeline latency time. This approach ensures the integrity of intra-process communication and provides a more accurate measure of delays in the pipeline.
Benchmarking The Pipeline
The nodes within the pipeline report the pipeline latency time, indicating the duration from the sensor driver’s pointcloud output to the node’s output. This data is crucial for assessing the pipeline’s health and efficiency.
When running Autoware, you can monitor the pipeline latency times for each node in the pipeline by subscribing to the following ROS 2 topics:
/sensing/lidar/LidarX/crop_box_filter_self/debug/pipeline_latency_ms/sensing/lidar/LidarX/crop_box_filter_mirror/debug/pipeline_latency_ms/sensing/lidar/LidarX/distortion_corrector/debug/pipeline_latency_ms/sensing/lidar/LidarX/ring_outlier_filter/debug/pipeline_latency_ms/sensing/lidar/concatenate_data_synchronizer/debug/sensing/lidar/LidarX/pointcloud/pipeline_latency_ms
These topics provide the pipeline latency times, giving insights into the delays at various stages of the pipeline from the sensor output of LidarX to each subsequent node.
File truncated at 100 lines see the full file
Changelog for package autoware_pointcloud_preprocessor
0.48.0 (2025-11-18)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix: tf2 uses hpp headers in rolling (and is backported) (#11620)
-
feat: limit area for visibility estimation (#11549)
- feat: introduce new thresholds to limit area used for visibility estimation
- feat: introduce HysteresisStateMachine to visibility diag
- docs: update document and schema
- style(pre-commit): autofix
- fix: correct typos
- fix: add newly introduced parameters to the test as well
- docs: replace parameters table by including json
- fix(polar_voxel_outlier_filter): use full range (no filter) for [vivisibility_estimation_(min|max)_(azimuth|elevation)_rad]{.title-ref} as default
- feat(polar_voxel_outlier): support min_(azimuthelevation)_rad case
- refactor(polar_voxel_outlier): re-group some parameters
- refactor(polar_voxel_outlier): move hysteresis_state_machine.hpp under include/autoware/pointcloud_preprocessor/diagnostics
- refactor(polar_voxel_outlier): rename variables
- style(pre-commit): autofix
* fix(polar_voxel_outlier): correct typo ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
feat(autoware_pointcloud_preprocessor): polar voxel filter (#10996)
- feat(pointcloud_preprocessor): add basic polar voxel filter
- feat(pointcloud_preprocessor): add initial dual return logic
- feat(pointcloud_preprocessor): refactor and add return type options, documetation
- feat(pointcloud_preprocessor): add visibility to polar voxel filter
- feat(pointcloud_preprocessor): update documentation
- feat(pointcloud_preprocessor): merge readme and documentation files for polar voxel filter
- chore(pointcloud_preprocessor): pass pre-commit
- refector(polar_voxel_filter): simplify return type classification
- refector(polar_voxel_filter): add suffix to parameters with units, update default values
- refector(polar_voxel_filter): explicity speficy index integer type
- refector(polar_voxel_filter): re-work to be O(n) using hashed unordered map, and reduce allocation overhead with multi-stage pass of a single large vector
- refector(polar_voxel_filter): use custom types for cartesian and polar coordinates
- refector(polar_voxel_filter): snake case for functions
- refector(polar_voxel_filter): std::optional for visibility and filter ratio
* Update sensing/autoware_pointcloud_preprocessor/src/outlier_filter/polar_voxel_outlier_filter_node.cpp Co-authored-by: Max Schmeller <<6088931+mojomex@users.noreply.github.com>>
- refector(polar_voxel_filter): remove log spam and unneccesary comments
- refector(polar_voxel_filter): rename valid points mask and unnecessary variable
- refector(polar_voxel_filter): style and pre-commit fixes
- refactor(pointcloud_preprocessor): address code complexity, duplication
- feat(pointcloud_preprocessor): make noise pointcloud publishing optional
- refactor(pointcloud_preprocessor): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- refactor(pointcloud_preprocessor): limit range in visibilty calculation
- chore(autoware_pointcloud_preprocessor): code complexity and clang-tidy
- feat(polar_voxel_outlier_filter): add visibility estimation parameters, update documentation to match
- feat(polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility), update documentation to match
- refactor(polar_voxel_outlier_filter): reduce cyclic complexity, code smells
- refactor(polar_voxel_outlier_filter): complex conditionals, code smells
- refactor(polar_voxel_outlier_filter): repeated code refactoring
- refactor(polar_voxel_outlier_filter): some more complex conditionals
- feat(polar_voxel_outlier_filter): add unit tests
- refactor(polar_voxel_outlier_filter): code duplication in tests
- refactor(polar_voxel_outlier_filter): more code duplication in tests
- chore(autoware_pointcloud_preprocessor): re-add tests to
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_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]