autoware_ground_segmentation_cuda#
Purpose#
The autoware_ground_segmentation algorithms have been thoroughly tested with Autoware. However, due to latency and high computational cost when processing large pointcloud, the input pointcloud range has been limited by the crop_box_filter based on the ego-vehicle's base_link. This can cause unwanted object loss, especially before a sloped road.

Recently, GPU and CUDA-supported libraries such as cuda_blackboard and accelerated versions of autoware_pointcloud_preprocessor have been implemented. These can be leveraged to improve the performance of ground segmentation filter algorithms using CUDA/GPU.
This package reimplements the current scan_ground_filter of the ground_segmentation package to reduce latency and avoid the bottleneck caused by processing a large number of point clouds.
Inner-workings / Algorithm#
The detailed algorithm is available in scan-ground-filter.md.
Parameters#
| Name | Type | Description | Default | Range |
|---|---|---|---|---|
| global_slope_max_angle_deg | float | Maximum global ground slope angle [deg]. Larger values reduce false negatives on steep roads but can increase false positives (classifying objects as ground). | 10 | N/A |
| local_slope_max_angle_deg | float | Maximum local slope angle [deg] between adjacent points (used for fine discrimination of small objects or ramps). | 13 | N/A |
| non_ground_height_threshold | float | Absolute vertical distance threshold [m] above estimated ground line to classify a point as non-ground. | 0.2 | N/A |
| grid_size_m | float | Radial cell size in polar grid [m]; larger values smooth ground estimation but may miss small objects. | 0.1 | N/A |
| gnd_cell_buffer_size | integer | Number of previous ground cells used to estimate local ground slope. | 4 | N/A |
| detection_range_z_max | float | Maximum Z height (above base_link) considered in classification [m]. | 2.5 | N/A |
| center_pcl_shift | float | X-axis offset [m] applied to additional LiDAR point clouds relative to vehicle reference (positive forward). | 0 | N/A |
| sector_angle_deg | float | Angular width of each polar sector [deg]. | 1 | N/A |
| use_recheck_ground_cluster | boolean | Enable secondary pass to re-evaluate ground clusters (may reduce false ground on elevated points). | 1 | N/A |
| recheck_start_distance | float | Minimum radial distance [m] at which ground cluster recheck logic begins. | 20 | ≥0.0 |
| use_lowest_point | boolean | Use lowest point in cell as reference during ground recheck (otherwise median-like selection). | 1 | N/A |
| min_x | float | Minimum X range relative to base_link [m] included in processing. | -100 | N/A |
| max_x | float | Maximum X (forward) range relative to base_link [m] included in processing. | 150 | N/A |
| min_y | float | Minimum Y range relative to base_link [m] included in processing. | -70 | N/A |
| max_y | float | Maximum Y range relative to base_link [m] included in processing. | 70 | N/A |
| min_z | float | Minimum Z range relative to base_link [m] included in processing. | -2.5 | N/A |
| max_z | float | Maximum Z range relative to base_link [m] included in processing. | 2.5 | N/A |