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
- Kenzo Lobos-Tsunekawa
- Amadeusz Szymko
- Max Schmeller
- David Wong
- Manato Hirabayashi
- Yihsiang Fang
Authors
- Kenzo Lobos-Tsunekawa
autoware_cuda_pointcloud_preprocessor
Purpose
The pointcloud preprocessing implemented in autoware_pointcloud_preprocessor has been thoroughly tested in autoware. However, the latency it introduces does not scale well with modern LiDAR devices due to the high number of points they introduce.
To alleviate this issue, this package reimplements most of the pipeline presented in autoware_pointcloud_preprocessor leveraging the use of GPGPUs. In particular, this package makes use of CUDA to provide accelerated versions of the already established implementations, while also maintaining compatibility with normal ROS nodes/topics.
Inner-workings / Algorithms
A detailed description of each filter’s algorithm is available in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| cuda_pointcloud_preprocessor | Implements the cropping, distortion correction, and outlier filtering (ring-based) of the autoware_pointcloud_preprocessor’s CPU versions. |
link |
| cuda_concatenate_and_time_sync_node | Implements pointcloud concatenation an synchronization following autoware_pointcloud_preprocessor’s CPU implementation. |
link |
| cuda_voxel_grid_downsample_filter | Implements voxel downsample filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
| cuda_polar_voxel_outlier_filter | Implements polar voxel outlier filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
(Optional) Future extensions / Unimplemented parts
The subsample filters implemented in autoware_pointcloud_preprocessor will have similar counterparts in this package.
Changelog for package autoware_cuda_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)
-
fix(cuda_pointcloud_preprocessor): use uint64_t and nanoseconds to prevent potential precision loss (#11398)
-
feat(autoware_cuda_pointcloud_preprocessor): cuda/polar voxel filter (#11122)
- feat(cuda_utils): support device memory allocation from memory pool
* feat(cuda_pointcloud_preprocessor): support polar_voxel_outlier_filter WIP: use cuda::std::optional. compile passed wip: version 1 wip: update wip: update launcher
- feat(cuda_pointcloud_preprocessor): add a flag to enable/disable ring outlier filter in cuda_pointcloud_preprocessor
- chore: clean up the code
- docs: update documents briefly
- style(pre-commit): autofix
- style(pre-commit): autofix
- feat(cuda_polar_voxel_outlier_filter): add xyzirc format support
- fix(cuda_polar_voxel_outlier_filter): move sync point to avoid unexpected memory release during async copy
- chore(cuda_polar_voxel_outlier_filter): update parameters
- add SI unit postfix
- deprecate [secondary_return_type]{.title-ref}
- and think points with non-primary return value as points with secondary return
- refactor(cuda_polar_voxel_outlier_filter): explicity specify index integer type
- refactor(cuda_polar_voxel_outlier_filter): snake case for functions
* refactor(cuda_polar_voxel_outlier_filter): std::optional for visibility and filter ratio And update related task functions for diagnostics
- fix(cuda_polar_voxel_outlier_filter): register parameters_callback
- refactor(cuda_polar_voxel_outlier_filter): remove log spam and unneccesary comments
- refactor(cuda_polar_voxel_outlier_filter): rename [valid_points_mask]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): make noise pointcloud publishing optional Because all parameters are now compatible with [autoware_pointcloud_preprocessor::polar_voxel_outlier_filter]{.title-ref}, this commit also removes the parameter files named [cuda_polar_voxel_outlier_filter.param.yaml]{.title-ref} to avoid duplicated file copying.
- refactor(cuda_polar_voxel_outlier_filter): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- feat(cuda_polar_voxel_outlier_filter): limit range in visibility calculation
- refactor(cuda_polar_voxel_outlier_filter): use array of int for return_type instead of int64
* refactor(cuda_polar_voxel_outlier_filter): update parameter callback to align with the CPU implementation And small clean up the codes
* fix(cuda_polar_voxel_outlier_filter): return when invalid index fix the error revealed by [compute-sanitizer --tool memcheck]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): add visibility estimation parameters And update visibility calculation to align with the CPU implementation
- feat(cuda_polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility)
- fix(cuda_polar_voxel_outlier_filter): ensure zero started positive values for indices
- feat(cuda_polar_voxel_outlier_filter): add input validation. align diag format to the CPU implementation
- perf(cuda_polar_voxel_outlier_filter): skip output generation if visualization_estimation_only==true
- refactor(cuda_polar_voxel_outlier_filter): clean up the code
- feat(cuda_polar_voxel_outlier_filter): add intensity parameter for secondary returns
- fix(cuda_polar_voxel_outlier_filter): update param name to align CPU impl.
- feat(cuda_polar_voxel_outlier_filter): update codes to align CPU impl.
- fix(cuda_polar_voxel_outlier_filter): correct unintended comparison
- fix(cuda_polar_voxel_outlier_filter): correct meaningless cast
- refactor(cuda_polar_voxel_outlier_filter): unify common calculation
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/cuda_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/cuda_pointcloud_preprocessor.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw_ex]
- input/imu [default: /sensing/imu/imu_data]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output/pointcloud [default: /sensing/lidar/top/test]
- cuda_pointcloud_preprocessor_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_pointcloud_preprocessor.param.yaml]
- launch/cuda_polar_voxel_outlier_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/filtered]
- debug [default: false]
- use_sim_time [default: false]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/cuda_voxel_grid_downsample_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/downsampled]
- debug [default: false]
- cuda_voxel_gird_downsample_filter_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_voxel_grid_downsample_filter.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_cuda_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
- Kenzo Lobos-Tsunekawa
- Amadeusz Szymko
- Max Schmeller
- David Wong
- Manato Hirabayashi
- Yihsiang Fang
Authors
- Kenzo Lobos-Tsunekawa
autoware_cuda_pointcloud_preprocessor
Purpose
The pointcloud preprocessing implemented in autoware_pointcloud_preprocessor has been thoroughly tested in autoware. However, the latency it introduces does not scale well with modern LiDAR devices due to the high number of points they introduce.
To alleviate this issue, this package reimplements most of the pipeline presented in autoware_pointcloud_preprocessor leveraging the use of GPGPUs. In particular, this package makes use of CUDA to provide accelerated versions of the already established implementations, while also maintaining compatibility with normal ROS nodes/topics.
Inner-workings / Algorithms
A detailed description of each filter’s algorithm is available in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| cuda_pointcloud_preprocessor | Implements the cropping, distortion correction, and outlier filtering (ring-based) of the autoware_pointcloud_preprocessor’s CPU versions. |
link |
| cuda_concatenate_and_time_sync_node | Implements pointcloud concatenation an synchronization following autoware_pointcloud_preprocessor’s CPU implementation. |
link |
| cuda_voxel_grid_downsample_filter | Implements voxel downsample filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
| cuda_polar_voxel_outlier_filter | Implements polar voxel outlier filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
(Optional) Future extensions / Unimplemented parts
The subsample filters implemented in autoware_pointcloud_preprocessor will have similar counterparts in this package.
Changelog for package autoware_cuda_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)
-
fix(cuda_pointcloud_preprocessor): use uint64_t and nanoseconds to prevent potential precision loss (#11398)
-
feat(autoware_cuda_pointcloud_preprocessor): cuda/polar voxel filter (#11122)
- feat(cuda_utils): support device memory allocation from memory pool
* feat(cuda_pointcloud_preprocessor): support polar_voxel_outlier_filter WIP: use cuda::std::optional. compile passed wip: version 1 wip: update wip: update launcher
- feat(cuda_pointcloud_preprocessor): add a flag to enable/disable ring outlier filter in cuda_pointcloud_preprocessor
- chore: clean up the code
- docs: update documents briefly
- style(pre-commit): autofix
- style(pre-commit): autofix
- feat(cuda_polar_voxel_outlier_filter): add xyzirc format support
- fix(cuda_polar_voxel_outlier_filter): move sync point to avoid unexpected memory release during async copy
- chore(cuda_polar_voxel_outlier_filter): update parameters
- add SI unit postfix
- deprecate [secondary_return_type]{.title-ref}
- and think points with non-primary return value as points with secondary return
- refactor(cuda_polar_voxel_outlier_filter): explicity specify index integer type
- refactor(cuda_polar_voxel_outlier_filter): snake case for functions
* refactor(cuda_polar_voxel_outlier_filter): std::optional for visibility and filter ratio And update related task functions for diagnostics
- fix(cuda_polar_voxel_outlier_filter): register parameters_callback
- refactor(cuda_polar_voxel_outlier_filter): remove log spam and unneccesary comments
- refactor(cuda_polar_voxel_outlier_filter): rename [valid_points_mask]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): make noise pointcloud publishing optional Because all parameters are now compatible with [autoware_pointcloud_preprocessor::polar_voxel_outlier_filter]{.title-ref}, this commit also removes the parameter files named [cuda_polar_voxel_outlier_filter.param.yaml]{.title-ref} to avoid duplicated file copying.
- refactor(cuda_polar_voxel_outlier_filter): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- feat(cuda_polar_voxel_outlier_filter): limit range in visibility calculation
- refactor(cuda_polar_voxel_outlier_filter): use array of int for return_type instead of int64
* refactor(cuda_polar_voxel_outlier_filter): update parameter callback to align with the CPU implementation And small clean up the codes
* fix(cuda_polar_voxel_outlier_filter): return when invalid index fix the error revealed by [compute-sanitizer --tool memcheck]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): add visibility estimation parameters And update visibility calculation to align with the CPU implementation
- feat(cuda_polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility)
- fix(cuda_polar_voxel_outlier_filter): ensure zero started positive values for indices
- feat(cuda_polar_voxel_outlier_filter): add input validation. align diag format to the CPU implementation
- perf(cuda_polar_voxel_outlier_filter): skip output generation if visualization_estimation_only==true
- refactor(cuda_polar_voxel_outlier_filter): clean up the code
- feat(cuda_polar_voxel_outlier_filter): add intensity parameter for secondary returns
- fix(cuda_polar_voxel_outlier_filter): update param name to align CPU impl.
- feat(cuda_polar_voxel_outlier_filter): update codes to align CPU impl.
- fix(cuda_polar_voxel_outlier_filter): correct unintended comparison
- fix(cuda_polar_voxel_outlier_filter): correct meaningless cast
- refactor(cuda_polar_voxel_outlier_filter): unify common calculation
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/cuda_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/cuda_pointcloud_preprocessor.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw_ex]
- input/imu [default: /sensing/imu/imu_data]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output/pointcloud [default: /sensing/lidar/top/test]
- cuda_pointcloud_preprocessor_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_pointcloud_preprocessor.param.yaml]
- launch/cuda_polar_voxel_outlier_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/filtered]
- debug [default: false]
- use_sim_time [default: false]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/cuda_voxel_grid_downsample_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/downsampled]
- debug [default: false]
- cuda_voxel_gird_downsample_filter_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_voxel_grid_downsample_filter.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_cuda_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
- Kenzo Lobos-Tsunekawa
- Amadeusz Szymko
- Max Schmeller
- David Wong
- Manato Hirabayashi
- Yihsiang Fang
Authors
- Kenzo Lobos-Tsunekawa
autoware_cuda_pointcloud_preprocessor
Purpose
The pointcloud preprocessing implemented in autoware_pointcloud_preprocessor has been thoroughly tested in autoware. However, the latency it introduces does not scale well with modern LiDAR devices due to the high number of points they introduce.
To alleviate this issue, this package reimplements most of the pipeline presented in autoware_pointcloud_preprocessor leveraging the use of GPGPUs. In particular, this package makes use of CUDA to provide accelerated versions of the already established implementations, while also maintaining compatibility with normal ROS nodes/topics.
Inner-workings / Algorithms
A detailed description of each filter’s algorithm is available in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| cuda_pointcloud_preprocessor | Implements the cropping, distortion correction, and outlier filtering (ring-based) of the autoware_pointcloud_preprocessor’s CPU versions. |
link |
| cuda_concatenate_and_time_sync_node | Implements pointcloud concatenation an synchronization following autoware_pointcloud_preprocessor’s CPU implementation. |
link |
| cuda_voxel_grid_downsample_filter | Implements voxel downsample filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
| cuda_polar_voxel_outlier_filter | Implements polar voxel outlier filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
(Optional) Future extensions / Unimplemented parts
The subsample filters implemented in autoware_pointcloud_preprocessor will have similar counterparts in this package.
Changelog for package autoware_cuda_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)
-
fix(cuda_pointcloud_preprocessor): use uint64_t and nanoseconds to prevent potential precision loss (#11398)
-
feat(autoware_cuda_pointcloud_preprocessor): cuda/polar voxel filter (#11122)
- feat(cuda_utils): support device memory allocation from memory pool
* feat(cuda_pointcloud_preprocessor): support polar_voxel_outlier_filter WIP: use cuda::std::optional. compile passed wip: version 1 wip: update wip: update launcher
- feat(cuda_pointcloud_preprocessor): add a flag to enable/disable ring outlier filter in cuda_pointcloud_preprocessor
- chore: clean up the code
- docs: update documents briefly
- style(pre-commit): autofix
- style(pre-commit): autofix
- feat(cuda_polar_voxel_outlier_filter): add xyzirc format support
- fix(cuda_polar_voxel_outlier_filter): move sync point to avoid unexpected memory release during async copy
- chore(cuda_polar_voxel_outlier_filter): update parameters
- add SI unit postfix
- deprecate [secondary_return_type]{.title-ref}
- and think points with non-primary return value as points with secondary return
- refactor(cuda_polar_voxel_outlier_filter): explicity specify index integer type
- refactor(cuda_polar_voxel_outlier_filter): snake case for functions
* refactor(cuda_polar_voxel_outlier_filter): std::optional for visibility and filter ratio And update related task functions for diagnostics
- fix(cuda_polar_voxel_outlier_filter): register parameters_callback
- refactor(cuda_polar_voxel_outlier_filter): remove log spam and unneccesary comments
- refactor(cuda_polar_voxel_outlier_filter): rename [valid_points_mask]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): make noise pointcloud publishing optional Because all parameters are now compatible with [autoware_pointcloud_preprocessor::polar_voxel_outlier_filter]{.title-ref}, this commit also removes the parameter files named [cuda_polar_voxel_outlier_filter.param.yaml]{.title-ref} to avoid duplicated file copying.
- refactor(cuda_polar_voxel_outlier_filter): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- feat(cuda_polar_voxel_outlier_filter): limit range in visibility calculation
- refactor(cuda_polar_voxel_outlier_filter): use array of int for return_type instead of int64
* refactor(cuda_polar_voxel_outlier_filter): update parameter callback to align with the CPU implementation And small clean up the codes
* fix(cuda_polar_voxel_outlier_filter): return when invalid index fix the error revealed by [compute-sanitizer --tool memcheck]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): add visibility estimation parameters And update visibility calculation to align with the CPU implementation
- feat(cuda_polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility)
- fix(cuda_polar_voxel_outlier_filter): ensure zero started positive values for indices
- feat(cuda_polar_voxel_outlier_filter): add input validation. align diag format to the CPU implementation
- perf(cuda_polar_voxel_outlier_filter): skip output generation if visualization_estimation_only==true
- refactor(cuda_polar_voxel_outlier_filter): clean up the code
- feat(cuda_polar_voxel_outlier_filter): add intensity parameter for secondary returns
- fix(cuda_polar_voxel_outlier_filter): update param name to align CPU impl.
- feat(cuda_polar_voxel_outlier_filter): update codes to align CPU impl.
- fix(cuda_polar_voxel_outlier_filter): correct unintended comparison
- fix(cuda_polar_voxel_outlier_filter): correct meaningless cast
- refactor(cuda_polar_voxel_outlier_filter): unify common calculation
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/cuda_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/cuda_pointcloud_preprocessor.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw_ex]
- input/imu [default: /sensing/imu/imu_data]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output/pointcloud [default: /sensing/lidar/top/test]
- cuda_pointcloud_preprocessor_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_pointcloud_preprocessor.param.yaml]
- launch/cuda_polar_voxel_outlier_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/filtered]
- debug [default: false]
- use_sim_time [default: false]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/cuda_voxel_grid_downsample_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/downsampled]
- debug [default: false]
- cuda_voxel_gird_downsample_filter_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_voxel_grid_downsample_filter.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_cuda_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
- Kenzo Lobos-Tsunekawa
- Amadeusz Szymko
- Max Schmeller
- David Wong
- Manato Hirabayashi
- Yihsiang Fang
Authors
- Kenzo Lobos-Tsunekawa
autoware_cuda_pointcloud_preprocessor
Purpose
The pointcloud preprocessing implemented in autoware_pointcloud_preprocessor has been thoroughly tested in autoware. However, the latency it introduces does not scale well with modern LiDAR devices due to the high number of points they introduce.
To alleviate this issue, this package reimplements most of the pipeline presented in autoware_pointcloud_preprocessor leveraging the use of GPGPUs. In particular, this package makes use of CUDA to provide accelerated versions of the already established implementations, while also maintaining compatibility with normal ROS nodes/topics.
Inner-workings / Algorithms
A detailed description of each filter’s algorithm is available in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| cuda_pointcloud_preprocessor | Implements the cropping, distortion correction, and outlier filtering (ring-based) of the autoware_pointcloud_preprocessor’s CPU versions. |
link |
| cuda_concatenate_and_time_sync_node | Implements pointcloud concatenation an synchronization following autoware_pointcloud_preprocessor’s CPU implementation. |
link |
| cuda_voxel_grid_downsample_filter | Implements voxel downsample filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
| cuda_polar_voxel_outlier_filter | Implements polar voxel outlier filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
(Optional) Future extensions / Unimplemented parts
The subsample filters implemented in autoware_pointcloud_preprocessor will have similar counterparts in this package.
Changelog for package autoware_cuda_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)
-
fix(cuda_pointcloud_preprocessor): use uint64_t and nanoseconds to prevent potential precision loss (#11398)
-
feat(autoware_cuda_pointcloud_preprocessor): cuda/polar voxel filter (#11122)
- feat(cuda_utils): support device memory allocation from memory pool
* feat(cuda_pointcloud_preprocessor): support polar_voxel_outlier_filter WIP: use cuda::std::optional. compile passed wip: version 1 wip: update wip: update launcher
- feat(cuda_pointcloud_preprocessor): add a flag to enable/disable ring outlier filter in cuda_pointcloud_preprocessor
- chore: clean up the code
- docs: update documents briefly
- style(pre-commit): autofix
- style(pre-commit): autofix
- feat(cuda_polar_voxel_outlier_filter): add xyzirc format support
- fix(cuda_polar_voxel_outlier_filter): move sync point to avoid unexpected memory release during async copy
- chore(cuda_polar_voxel_outlier_filter): update parameters
- add SI unit postfix
- deprecate [secondary_return_type]{.title-ref}
- and think points with non-primary return value as points with secondary return
- refactor(cuda_polar_voxel_outlier_filter): explicity specify index integer type
- refactor(cuda_polar_voxel_outlier_filter): snake case for functions
* refactor(cuda_polar_voxel_outlier_filter): std::optional for visibility and filter ratio And update related task functions for diagnostics
- fix(cuda_polar_voxel_outlier_filter): register parameters_callback
- refactor(cuda_polar_voxel_outlier_filter): remove log spam and unneccesary comments
- refactor(cuda_polar_voxel_outlier_filter): rename [valid_points_mask]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): make noise pointcloud publishing optional Because all parameters are now compatible with [autoware_pointcloud_preprocessor::polar_voxel_outlier_filter]{.title-ref}, this commit also removes the parameter files named [cuda_polar_voxel_outlier_filter.param.yaml]{.title-ref} to avoid duplicated file copying.
- refactor(cuda_polar_voxel_outlier_filter): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- feat(cuda_polar_voxel_outlier_filter): limit range in visibility calculation
- refactor(cuda_polar_voxel_outlier_filter): use array of int for return_type instead of int64
* refactor(cuda_polar_voxel_outlier_filter): update parameter callback to align with the CPU implementation And small clean up the codes
* fix(cuda_polar_voxel_outlier_filter): return when invalid index fix the error revealed by [compute-sanitizer --tool memcheck]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): add visibility estimation parameters And update visibility calculation to align with the CPU implementation
- feat(cuda_polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility)
- fix(cuda_polar_voxel_outlier_filter): ensure zero started positive values for indices
- feat(cuda_polar_voxel_outlier_filter): add input validation. align diag format to the CPU implementation
- perf(cuda_polar_voxel_outlier_filter): skip output generation if visualization_estimation_only==true
- refactor(cuda_polar_voxel_outlier_filter): clean up the code
- feat(cuda_polar_voxel_outlier_filter): add intensity parameter for secondary returns
- fix(cuda_polar_voxel_outlier_filter): update param name to align CPU impl.
- feat(cuda_polar_voxel_outlier_filter): update codes to align CPU impl.
- fix(cuda_polar_voxel_outlier_filter): correct unintended comparison
- fix(cuda_polar_voxel_outlier_filter): correct meaningless cast
- refactor(cuda_polar_voxel_outlier_filter): unify common calculation
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/cuda_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/cuda_pointcloud_preprocessor.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw_ex]
- input/imu [default: /sensing/imu/imu_data]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output/pointcloud [default: /sensing/lidar/top/test]
- cuda_pointcloud_preprocessor_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_pointcloud_preprocessor.param.yaml]
- launch/cuda_polar_voxel_outlier_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/filtered]
- debug [default: false]
- use_sim_time [default: false]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/cuda_voxel_grid_downsample_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/downsampled]
- debug [default: false]
- cuda_voxel_gird_downsample_filter_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_voxel_grid_downsample_filter.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_cuda_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
- Kenzo Lobos-Tsunekawa
- Amadeusz Szymko
- Max Schmeller
- David Wong
- Manato Hirabayashi
- Yihsiang Fang
Authors
- Kenzo Lobos-Tsunekawa
autoware_cuda_pointcloud_preprocessor
Purpose
The pointcloud preprocessing implemented in autoware_pointcloud_preprocessor has been thoroughly tested in autoware. However, the latency it introduces does not scale well with modern LiDAR devices due to the high number of points they introduce.
To alleviate this issue, this package reimplements most of the pipeline presented in autoware_pointcloud_preprocessor leveraging the use of GPGPUs. In particular, this package makes use of CUDA to provide accelerated versions of the already established implementations, while also maintaining compatibility with normal ROS nodes/topics.
Inner-workings / Algorithms
A detailed description of each filter’s algorithm is available in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| cuda_pointcloud_preprocessor | Implements the cropping, distortion correction, and outlier filtering (ring-based) of the autoware_pointcloud_preprocessor’s CPU versions. |
link |
| cuda_concatenate_and_time_sync_node | Implements pointcloud concatenation an synchronization following autoware_pointcloud_preprocessor’s CPU implementation. |
link |
| cuda_voxel_grid_downsample_filter | Implements voxel downsample filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
| cuda_polar_voxel_outlier_filter | Implements polar voxel outlier filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
(Optional) Future extensions / Unimplemented parts
The subsample filters implemented in autoware_pointcloud_preprocessor will have similar counterparts in this package.
Changelog for package autoware_cuda_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)
-
fix(cuda_pointcloud_preprocessor): use uint64_t and nanoseconds to prevent potential precision loss (#11398)
-
feat(autoware_cuda_pointcloud_preprocessor): cuda/polar voxel filter (#11122)
- feat(cuda_utils): support device memory allocation from memory pool
* feat(cuda_pointcloud_preprocessor): support polar_voxel_outlier_filter WIP: use cuda::std::optional. compile passed wip: version 1 wip: update wip: update launcher
- feat(cuda_pointcloud_preprocessor): add a flag to enable/disable ring outlier filter in cuda_pointcloud_preprocessor
- chore: clean up the code
- docs: update documents briefly
- style(pre-commit): autofix
- style(pre-commit): autofix
- feat(cuda_polar_voxel_outlier_filter): add xyzirc format support
- fix(cuda_polar_voxel_outlier_filter): move sync point to avoid unexpected memory release during async copy
- chore(cuda_polar_voxel_outlier_filter): update parameters
- add SI unit postfix
- deprecate [secondary_return_type]{.title-ref}
- and think points with non-primary return value as points with secondary return
- refactor(cuda_polar_voxel_outlier_filter): explicity specify index integer type
- refactor(cuda_polar_voxel_outlier_filter): snake case for functions
* refactor(cuda_polar_voxel_outlier_filter): std::optional for visibility and filter ratio And update related task functions for diagnostics
- fix(cuda_polar_voxel_outlier_filter): register parameters_callback
- refactor(cuda_polar_voxel_outlier_filter): remove log spam and unneccesary comments
- refactor(cuda_polar_voxel_outlier_filter): rename [valid_points_mask]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): make noise pointcloud publishing optional Because all parameters are now compatible with [autoware_pointcloud_preprocessor::polar_voxel_outlier_filter]{.title-ref}, this commit also removes the parameter files named [cuda_polar_voxel_outlier_filter.param.yaml]{.title-ref} to avoid duplicated file copying.
- refactor(cuda_polar_voxel_outlier_filter): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- feat(cuda_polar_voxel_outlier_filter): limit range in visibility calculation
- refactor(cuda_polar_voxel_outlier_filter): use array of int for return_type instead of int64
* refactor(cuda_polar_voxel_outlier_filter): update parameter callback to align with the CPU implementation And small clean up the codes
* fix(cuda_polar_voxel_outlier_filter): return when invalid index fix the error revealed by [compute-sanitizer --tool memcheck]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): add visibility estimation parameters And update visibility calculation to align with the CPU implementation
- feat(cuda_polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility)
- fix(cuda_polar_voxel_outlier_filter): ensure zero started positive values for indices
- feat(cuda_polar_voxel_outlier_filter): add input validation. align diag format to the CPU implementation
- perf(cuda_polar_voxel_outlier_filter): skip output generation if visualization_estimation_only==true
- refactor(cuda_polar_voxel_outlier_filter): clean up the code
- feat(cuda_polar_voxel_outlier_filter): add intensity parameter for secondary returns
- fix(cuda_polar_voxel_outlier_filter): update param name to align CPU impl.
- feat(cuda_polar_voxel_outlier_filter): update codes to align CPU impl.
- fix(cuda_polar_voxel_outlier_filter): correct unintended comparison
- fix(cuda_polar_voxel_outlier_filter): correct meaningless cast
- refactor(cuda_polar_voxel_outlier_filter): unify common calculation
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/cuda_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/cuda_pointcloud_preprocessor.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw_ex]
- input/imu [default: /sensing/imu/imu_data]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output/pointcloud [default: /sensing/lidar/top/test]
- cuda_pointcloud_preprocessor_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_pointcloud_preprocessor.param.yaml]
- launch/cuda_polar_voxel_outlier_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/filtered]
- debug [default: false]
- use_sim_time [default: false]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/cuda_voxel_grid_downsample_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/downsampled]
- debug [default: false]
- cuda_voxel_gird_downsample_filter_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_voxel_grid_downsample_filter.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_cuda_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
- Kenzo Lobos-Tsunekawa
- Amadeusz Szymko
- Max Schmeller
- David Wong
- Manato Hirabayashi
- Yihsiang Fang
Authors
- Kenzo Lobos-Tsunekawa
autoware_cuda_pointcloud_preprocessor
Purpose
The pointcloud preprocessing implemented in autoware_pointcloud_preprocessor has been thoroughly tested in autoware. However, the latency it introduces does not scale well with modern LiDAR devices due to the high number of points they introduce.
To alleviate this issue, this package reimplements most of the pipeline presented in autoware_pointcloud_preprocessor leveraging the use of GPGPUs. In particular, this package makes use of CUDA to provide accelerated versions of the already established implementations, while also maintaining compatibility with normal ROS nodes/topics.
Inner-workings / Algorithms
A detailed description of each filter’s algorithm is available in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| cuda_pointcloud_preprocessor | Implements the cropping, distortion correction, and outlier filtering (ring-based) of the autoware_pointcloud_preprocessor’s CPU versions. |
link |
| cuda_concatenate_and_time_sync_node | Implements pointcloud concatenation an synchronization following autoware_pointcloud_preprocessor’s CPU implementation. |
link |
| cuda_voxel_grid_downsample_filter | Implements voxel downsample filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
| cuda_polar_voxel_outlier_filter | Implements polar voxel outlier filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
(Optional) Future extensions / Unimplemented parts
The subsample filters implemented in autoware_pointcloud_preprocessor will have similar counterparts in this package.
Changelog for package autoware_cuda_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)
-
fix(cuda_pointcloud_preprocessor): use uint64_t and nanoseconds to prevent potential precision loss (#11398)
-
feat(autoware_cuda_pointcloud_preprocessor): cuda/polar voxel filter (#11122)
- feat(cuda_utils): support device memory allocation from memory pool
* feat(cuda_pointcloud_preprocessor): support polar_voxel_outlier_filter WIP: use cuda::std::optional. compile passed wip: version 1 wip: update wip: update launcher
- feat(cuda_pointcloud_preprocessor): add a flag to enable/disable ring outlier filter in cuda_pointcloud_preprocessor
- chore: clean up the code
- docs: update documents briefly
- style(pre-commit): autofix
- style(pre-commit): autofix
- feat(cuda_polar_voxel_outlier_filter): add xyzirc format support
- fix(cuda_polar_voxel_outlier_filter): move sync point to avoid unexpected memory release during async copy
- chore(cuda_polar_voxel_outlier_filter): update parameters
- add SI unit postfix
- deprecate [secondary_return_type]{.title-ref}
- and think points with non-primary return value as points with secondary return
- refactor(cuda_polar_voxel_outlier_filter): explicity specify index integer type
- refactor(cuda_polar_voxel_outlier_filter): snake case for functions
* refactor(cuda_polar_voxel_outlier_filter): std::optional for visibility and filter ratio And update related task functions for diagnostics
- fix(cuda_polar_voxel_outlier_filter): register parameters_callback
- refactor(cuda_polar_voxel_outlier_filter): remove log spam and unneccesary comments
- refactor(cuda_polar_voxel_outlier_filter): rename [valid_points_mask]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): make noise pointcloud publishing optional Because all parameters are now compatible with [autoware_pointcloud_preprocessor::polar_voxel_outlier_filter]{.title-ref}, this commit also removes the parameter files named [cuda_polar_voxel_outlier_filter.param.yaml]{.title-ref} to avoid duplicated file copying.
- refactor(cuda_polar_voxel_outlier_filter): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- feat(cuda_polar_voxel_outlier_filter): limit range in visibility calculation
- refactor(cuda_polar_voxel_outlier_filter): use array of int for return_type instead of int64
* refactor(cuda_polar_voxel_outlier_filter): update parameter callback to align with the CPU implementation And small clean up the codes
* fix(cuda_polar_voxel_outlier_filter): return when invalid index fix the error revealed by [compute-sanitizer --tool memcheck]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): add visibility estimation parameters And update visibility calculation to align with the CPU implementation
- feat(cuda_polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility)
- fix(cuda_polar_voxel_outlier_filter): ensure zero started positive values for indices
- feat(cuda_polar_voxel_outlier_filter): add input validation. align diag format to the CPU implementation
- perf(cuda_polar_voxel_outlier_filter): skip output generation if visualization_estimation_only==true
- refactor(cuda_polar_voxel_outlier_filter): clean up the code
- feat(cuda_polar_voxel_outlier_filter): add intensity parameter for secondary returns
- fix(cuda_polar_voxel_outlier_filter): update param name to align CPU impl.
- feat(cuda_polar_voxel_outlier_filter): update codes to align CPU impl.
- fix(cuda_polar_voxel_outlier_filter): correct unintended comparison
- fix(cuda_polar_voxel_outlier_filter): correct meaningless cast
- refactor(cuda_polar_voxel_outlier_filter): unify common calculation
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/cuda_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/cuda_pointcloud_preprocessor.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw_ex]
- input/imu [default: /sensing/imu/imu_data]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output/pointcloud [default: /sensing/lidar/top/test]
- cuda_pointcloud_preprocessor_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_pointcloud_preprocessor.param.yaml]
- launch/cuda_polar_voxel_outlier_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/filtered]
- debug [default: false]
- use_sim_time [default: false]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/cuda_voxel_grid_downsample_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/downsampled]
- debug [default: false]
- cuda_voxel_gird_downsample_filter_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_voxel_grid_downsample_filter.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_cuda_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
- Kenzo Lobos-Tsunekawa
- Amadeusz Szymko
- Max Schmeller
- David Wong
- Manato Hirabayashi
- Yihsiang Fang
Authors
- Kenzo Lobos-Tsunekawa
autoware_cuda_pointcloud_preprocessor
Purpose
The pointcloud preprocessing implemented in autoware_pointcloud_preprocessor has been thoroughly tested in autoware. However, the latency it introduces does not scale well with modern LiDAR devices due to the high number of points they introduce.
To alleviate this issue, this package reimplements most of the pipeline presented in autoware_pointcloud_preprocessor leveraging the use of GPGPUs. In particular, this package makes use of CUDA to provide accelerated versions of the already established implementations, while also maintaining compatibility with normal ROS nodes/topics.
Inner-workings / Algorithms
A detailed description of each filter’s algorithm is available in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| cuda_pointcloud_preprocessor | Implements the cropping, distortion correction, and outlier filtering (ring-based) of the autoware_pointcloud_preprocessor’s CPU versions. |
link |
| cuda_concatenate_and_time_sync_node | Implements pointcloud concatenation an synchronization following autoware_pointcloud_preprocessor’s CPU implementation. |
link |
| cuda_voxel_grid_downsample_filter | Implements voxel downsample filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
| cuda_polar_voxel_outlier_filter | Implements polar voxel outlier filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
(Optional) Future extensions / Unimplemented parts
The subsample filters implemented in autoware_pointcloud_preprocessor will have similar counterparts in this package.
Changelog for package autoware_cuda_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)
-
fix(cuda_pointcloud_preprocessor): use uint64_t and nanoseconds to prevent potential precision loss (#11398)
-
feat(autoware_cuda_pointcloud_preprocessor): cuda/polar voxel filter (#11122)
- feat(cuda_utils): support device memory allocation from memory pool
* feat(cuda_pointcloud_preprocessor): support polar_voxel_outlier_filter WIP: use cuda::std::optional. compile passed wip: version 1 wip: update wip: update launcher
- feat(cuda_pointcloud_preprocessor): add a flag to enable/disable ring outlier filter in cuda_pointcloud_preprocessor
- chore: clean up the code
- docs: update documents briefly
- style(pre-commit): autofix
- style(pre-commit): autofix
- feat(cuda_polar_voxel_outlier_filter): add xyzirc format support
- fix(cuda_polar_voxel_outlier_filter): move sync point to avoid unexpected memory release during async copy
- chore(cuda_polar_voxel_outlier_filter): update parameters
- add SI unit postfix
- deprecate [secondary_return_type]{.title-ref}
- and think points with non-primary return value as points with secondary return
- refactor(cuda_polar_voxel_outlier_filter): explicity specify index integer type
- refactor(cuda_polar_voxel_outlier_filter): snake case for functions
* refactor(cuda_polar_voxel_outlier_filter): std::optional for visibility and filter ratio And update related task functions for diagnostics
- fix(cuda_polar_voxel_outlier_filter): register parameters_callback
- refactor(cuda_polar_voxel_outlier_filter): remove log spam and unneccesary comments
- refactor(cuda_polar_voxel_outlier_filter): rename [valid_points_mask]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): make noise pointcloud publishing optional Because all parameters are now compatible with [autoware_pointcloud_preprocessor::polar_voxel_outlier_filter]{.title-ref}, this commit also removes the parameter files named [cuda_polar_voxel_outlier_filter.param.yaml]{.title-ref} to avoid duplicated file copying.
- refactor(cuda_polar_voxel_outlier_filter): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- feat(cuda_polar_voxel_outlier_filter): limit range in visibility calculation
- refactor(cuda_polar_voxel_outlier_filter): use array of int for return_type instead of int64
* refactor(cuda_polar_voxel_outlier_filter): update parameter callback to align with the CPU implementation And small clean up the codes
* fix(cuda_polar_voxel_outlier_filter): return when invalid index fix the error revealed by [compute-sanitizer --tool memcheck]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): add visibility estimation parameters And update visibility calculation to align with the CPU implementation
- feat(cuda_polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility)
- fix(cuda_polar_voxel_outlier_filter): ensure zero started positive values for indices
- feat(cuda_polar_voxel_outlier_filter): add input validation. align diag format to the CPU implementation
- perf(cuda_polar_voxel_outlier_filter): skip output generation if visualization_estimation_only==true
- refactor(cuda_polar_voxel_outlier_filter): clean up the code
- feat(cuda_polar_voxel_outlier_filter): add intensity parameter for secondary returns
- fix(cuda_polar_voxel_outlier_filter): update param name to align CPU impl.
- feat(cuda_polar_voxel_outlier_filter): update codes to align CPU impl.
- fix(cuda_polar_voxel_outlier_filter): correct unintended comparison
- fix(cuda_polar_voxel_outlier_filter): correct meaningless cast
- refactor(cuda_polar_voxel_outlier_filter): unify common calculation
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/cuda_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/cuda_pointcloud_preprocessor.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw_ex]
- input/imu [default: /sensing/imu/imu_data]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output/pointcloud [default: /sensing/lidar/top/test]
- cuda_pointcloud_preprocessor_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_pointcloud_preprocessor.param.yaml]
- launch/cuda_polar_voxel_outlier_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/filtered]
- debug [default: false]
- use_sim_time [default: false]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/cuda_voxel_grid_downsample_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/downsampled]
- debug [default: false]
- cuda_voxel_gird_downsample_filter_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_voxel_grid_downsample_filter.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_cuda_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
- Kenzo Lobos-Tsunekawa
- Amadeusz Szymko
- Max Schmeller
- David Wong
- Manato Hirabayashi
- Yihsiang Fang
Authors
- Kenzo Lobos-Tsunekawa
autoware_cuda_pointcloud_preprocessor
Purpose
The pointcloud preprocessing implemented in autoware_pointcloud_preprocessor has been thoroughly tested in autoware. However, the latency it introduces does not scale well with modern LiDAR devices due to the high number of points they introduce.
To alleviate this issue, this package reimplements most of the pipeline presented in autoware_pointcloud_preprocessor leveraging the use of GPGPUs. In particular, this package makes use of CUDA to provide accelerated versions of the already established implementations, while also maintaining compatibility with normal ROS nodes/topics.
Inner-workings / Algorithms
A detailed description of each filter’s algorithm is available in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| cuda_pointcloud_preprocessor | Implements the cropping, distortion correction, and outlier filtering (ring-based) of the autoware_pointcloud_preprocessor’s CPU versions. |
link |
| cuda_concatenate_and_time_sync_node | Implements pointcloud concatenation an synchronization following autoware_pointcloud_preprocessor’s CPU implementation. |
link |
| cuda_voxel_grid_downsample_filter | Implements voxel downsample filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
| cuda_polar_voxel_outlier_filter | Implements polar voxel outlier filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
(Optional) Future extensions / Unimplemented parts
The subsample filters implemented in autoware_pointcloud_preprocessor will have similar counterparts in this package.
Changelog for package autoware_cuda_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)
-
fix(cuda_pointcloud_preprocessor): use uint64_t and nanoseconds to prevent potential precision loss (#11398)
-
feat(autoware_cuda_pointcloud_preprocessor): cuda/polar voxel filter (#11122)
- feat(cuda_utils): support device memory allocation from memory pool
* feat(cuda_pointcloud_preprocessor): support polar_voxel_outlier_filter WIP: use cuda::std::optional. compile passed wip: version 1 wip: update wip: update launcher
- feat(cuda_pointcloud_preprocessor): add a flag to enable/disable ring outlier filter in cuda_pointcloud_preprocessor
- chore: clean up the code
- docs: update documents briefly
- style(pre-commit): autofix
- style(pre-commit): autofix
- feat(cuda_polar_voxel_outlier_filter): add xyzirc format support
- fix(cuda_polar_voxel_outlier_filter): move sync point to avoid unexpected memory release during async copy
- chore(cuda_polar_voxel_outlier_filter): update parameters
- add SI unit postfix
- deprecate [secondary_return_type]{.title-ref}
- and think points with non-primary return value as points with secondary return
- refactor(cuda_polar_voxel_outlier_filter): explicity specify index integer type
- refactor(cuda_polar_voxel_outlier_filter): snake case for functions
* refactor(cuda_polar_voxel_outlier_filter): std::optional for visibility and filter ratio And update related task functions for diagnostics
- fix(cuda_polar_voxel_outlier_filter): register parameters_callback
- refactor(cuda_polar_voxel_outlier_filter): remove log spam and unneccesary comments
- refactor(cuda_polar_voxel_outlier_filter): rename [valid_points_mask]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): make noise pointcloud publishing optional Because all parameters are now compatible with [autoware_pointcloud_preprocessor::polar_voxel_outlier_filter]{.title-ref}, this commit also removes the parameter files named [cuda_polar_voxel_outlier_filter.param.yaml]{.title-ref} to avoid duplicated file copying.
- refactor(cuda_polar_voxel_outlier_filter): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- feat(cuda_polar_voxel_outlier_filter): limit range in visibility calculation
- refactor(cuda_polar_voxel_outlier_filter): use array of int for return_type instead of int64
* refactor(cuda_polar_voxel_outlier_filter): update parameter callback to align with the CPU implementation And small clean up the codes
* fix(cuda_polar_voxel_outlier_filter): return when invalid index fix the error revealed by [compute-sanitizer --tool memcheck]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): add visibility estimation parameters And update visibility calculation to align with the CPU implementation
- feat(cuda_polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility)
- fix(cuda_polar_voxel_outlier_filter): ensure zero started positive values for indices
- feat(cuda_polar_voxel_outlier_filter): add input validation. align diag format to the CPU implementation
- perf(cuda_polar_voxel_outlier_filter): skip output generation if visualization_estimation_only==true
- refactor(cuda_polar_voxel_outlier_filter): clean up the code
- feat(cuda_polar_voxel_outlier_filter): add intensity parameter for secondary returns
- fix(cuda_polar_voxel_outlier_filter): update param name to align CPU impl.
- feat(cuda_polar_voxel_outlier_filter): update codes to align CPU impl.
- fix(cuda_polar_voxel_outlier_filter): correct unintended comparison
- fix(cuda_polar_voxel_outlier_filter): correct meaningless cast
- refactor(cuda_polar_voxel_outlier_filter): unify common calculation
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/cuda_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/cuda_pointcloud_preprocessor.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw_ex]
- input/imu [default: /sensing/imu/imu_data]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output/pointcloud [default: /sensing/lidar/top/test]
- cuda_pointcloud_preprocessor_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_pointcloud_preprocessor.param.yaml]
- launch/cuda_polar_voxel_outlier_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/filtered]
- debug [default: false]
- use_sim_time [default: false]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/cuda_voxel_grid_downsample_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/downsampled]
- debug [default: false]
- cuda_voxel_gird_downsample_filter_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_voxel_grid_downsample_filter.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_cuda_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
- Kenzo Lobos-Tsunekawa
- Amadeusz Szymko
- Max Schmeller
- David Wong
- Manato Hirabayashi
- Yihsiang Fang
Authors
- Kenzo Lobos-Tsunekawa
autoware_cuda_pointcloud_preprocessor
Purpose
The pointcloud preprocessing implemented in autoware_pointcloud_preprocessor has been thoroughly tested in autoware. However, the latency it introduces does not scale well with modern LiDAR devices due to the high number of points they introduce.
To alleviate this issue, this package reimplements most of the pipeline presented in autoware_pointcloud_preprocessor leveraging the use of GPGPUs. In particular, this package makes use of CUDA to provide accelerated versions of the already established implementations, while also maintaining compatibility with normal ROS nodes/topics.
Inner-workings / Algorithms
A detailed description of each filter’s algorithm is available in the following links.
| Filter Name | Description | Detail |
|---|---|---|
| cuda_pointcloud_preprocessor | Implements the cropping, distortion correction, and outlier filtering (ring-based) of the autoware_pointcloud_preprocessor’s CPU versions. |
link |
| cuda_concatenate_and_time_sync_node | Implements pointcloud concatenation an synchronization following autoware_pointcloud_preprocessor’s CPU implementation. |
link |
| cuda_voxel_grid_downsample_filter | Implements voxel downsample filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
| cuda_polar_voxel_outlier_filter | Implements polar voxel outlier filtering of the autoware_pointcloud_preprocessor’s CPU version |
link |
(Optional) Future extensions / Unimplemented parts
The subsample filters implemented in autoware_pointcloud_preprocessor will have similar counterparts in this package.
Changelog for package autoware_cuda_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)
-
fix(cuda_pointcloud_preprocessor): use uint64_t and nanoseconds to prevent potential precision loss (#11398)
-
feat(autoware_cuda_pointcloud_preprocessor): cuda/polar voxel filter (#11122)
- feat(cuda_utils): support device memory allocation from memory pool
* feat(cuda_pointcloud_preprocessor): support polar_voxel_outlier_filter WIP: use cuda::std::optional. compile passed wip: version 1 wip: update wip: update launcher
- feat(cuda_pointcloud_preprocessor): add a flag to enable/disable ring outlier filter in cuda_pointcloud_preprocessor
- chore: clean up the code
- docs: update documents briefly
- style(pre-commit): autofix
- style(pre-commit): autofix
- feat(cuda_polar_voxel_outlier_filter): add xyzirc format support
- fix(cuda_polar_voxel_outlier_filter): move sync point to avoid unexpected memory release during async copy
- chore(cuda_polar_voxel_outlier_filter): update parameters
- add SI unit postfix
- deprecate [secondary_return_type]{.title-ref}
- and think points with non-primary return value as points with secondary return
- refactor(cuda_polar_voxel_outlier_filter): explicity specify index integer type
- refactor(cuda_polar_voxel_outlier_filter): snake case for functions
* refactor(cuda_polar_voxel_outlier_filter): std::optional for visibility and filter ratio And update related task functions for diagnostics
- fix(cuda_polar_voxel_outlier_filter): register parameters_callback
- refactor(cuda_polar_voxel_outlier_filter): remove log spam and unneccesary comments
- refactor(cuda_polar_voxel_outlier_filter): rename [valid_points_mask]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): make noise pointcloud publishing optional Because all parameters are now compatible with [autoware_pointcloud_preprocessor::polar_voxel_outlier_filter]{.title-ref}, this commit also removes the parameter files named [cuda_polar_voxel_outlier_filter.param.yaml]{.title-ref} to avoid duplicated file copying.
- refactor(cuda_polar_voxel_outlier_filter): simplify by enforcing use of XYZIRC or XYZIRCAEDT
- feat(cuda_polar_voxel_outlier_filter): limit range in visibility calculation
- refactor(cuda_polar_voxel_outlier_filter): use array of int for return_type instead of int64
* refactor(cuda_polar_voxel_outlier_filter): update parameter callback to align with the CPU implementation And small clean up the codes
* fix(cuda_polar_voxel_outlier_filter): return when invalid index fix the error revealed by [compute-sanitizer --tool memcheck]{.title-ref}
* feat(cuda_polar_voxel_outlier_filter): add visibility estimation parameters And update visibility calculation to align with the CPU implementation
- feat(cuda_polar_voxel_outlier_filter): add option to not publish a filtered pointcloud (only estimate visibility)
- fix(cuda_polar_voxel_outlier_filter): ensure zero started positive values for indices
- feat(cuda_polar_voxel_outlier_filter): add input validation. align diag format to the CPU implementation
- perf(cuda_polar_voxel_outlier_filter): skip output generation if visualization_estimation_only==true
- refactor(cuda_polar_voxel_outlier_filter): clean up the code
- feat(cuda_polar_voxel_outlier_filter): add intensity parameter for secondary returns
- fix(cuda_polar_voxel_outlier_filter): update param name to align CPU impl.
- feat(cuda_polar_voxel_outlier_filter): update codes to align CPU impl.
- fix(cuda_polar_voxel_outlier_filter): correct unintended comparison
- fix(cuda_polar_voxel_outlier_filter): correct meaningless cast
- refactor(cuda_polar_voxel_outlier_filter): unify common calculation
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/cuda_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/cuda_pointcloud_preprocessor.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw_ex]
- input/imu [default: /sensing/imu/imu_data]
- input/twist [default: /sensing/vehicle_velocity_converter/twist_with_covariance]
- output/pointcloud [default: /sensing/lidar/top/test]
- cuda_pointcloud_preprocessor_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_pointcloud_preprocessor.param.yaml]
- launch/cuda_polar_voxel_outlier_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/filtered]
- debug [default: false]
- use_sim_time [default: false]
- polar_voxel_outlier_filter_param_file [default: $(find-pkg-share autoware_pointcloud_preprocessor)/config/polar_voxel_outlier_filter_node.param.yaml]
- launch/cuda_voxel_grid_downsample_filter.launch.xml
-
- input/pointcloud [default: /sensing/lidar/top/pointcloud_raw]
- output/pointcloud [default: /sensing/lidar/top/downsampled]
- debug [default: false]
- cuda_voxel_gird_downsample_filter_param_file [default: $(find-pkg-share autoware_cuda_pointcloud_preprocessor)/config/cuda_voxel_grid_downsample_filter.param.yaml]