cuda_polar_voxel_outlier_filter#
Purpose#
This node is a CUDA accelerated version of the PolarVoxelOutlierFilter available in autoware_cuda_pointcloud_preprocessor.
Inner-workings / Algorithms#
This node is an alternative implementation to autoware::pointcloud_preprocessor::PolarVoxelOutlierFilterComponent, which filters outliers based on voxels in polar coordinate space instead of Cartesian coordinate space.
Inputs / Outputs#
Input#
| Name | Type | Description |
|---|---|---|
~/input/pointcloud |
sensor_msgs::msg::PointCloud2 |
Input pointcloud's topic. |
~/input/pointcloud/cuda |
negotiated_interfaces/msg/NegotiatedTopicsInfo |
Input pointcloud's type negotiation topic |
Output#
| Name | Type | Description |
|---|---|---|
~/output/pointcloud |
sensor_msgs::msg::PointCloud2 |
Processed pointcloud's topic |
~/output/pointcloud/cuda |
negotiated_interfaces/msg/NegotiatedTopicsInfo |
Processed pointcloud's negotiation topic |
Additional Debug Topics#
| Name | Type | Description |
|---|---|---|
~/debug/filter_ratio |
autoware_internal_debug_msgs::msg::Float32Stamped |
Ratio of output to input points |
~/debug/visibility |
autoware_internal_debug_msgs::msg::Float32Stamped |
Ratio of voxels passing secondary return threshold test (PointXYZIRCAEDT only) |
~/debug/pointcloud_noise |
sensor_msgs::msg::PointCloud2 |
Processed pointcloud's topic which is categorized as outlier |
~/debug/pointcloud_noise/cuda |
negotiated_interfaces/msg/NegotiatedTopicsInfo |
Negotiation topic |
Parameters#
See the original implementation in autoware_cuda_pointcloud_preprocessor for the detail.
Core Parameters (Schema-based)#
| Name | Type | Description | Default | Range |
|---|---|---|---|---|
| radial_resolution_m | float | The resolution in radial direction [m]. | 0.5 | ≥0 |
| azimuth_resolution_rad | float | The resolution in azimuth direction [rad]. The supplied value is modified to ensure consistent voxel sizes across the whole azimuth range. | 0.0175 | ≥0 ≤6.283185307179586 |
| elevation_resolution_rad | float | The resolution in elevation direction [rad]. The supplied value is modified to ensure consistent voxel sizes across the whole elevation range. | 0.0175 | ≥0 ≤6.283185307179586 |
| voxel_points_threshold | integer | The minimum number of points required per voxel. | 2 | ≥1 |
| min_radius_m | float | The minimum radius to consider [m]. | 0.5 | ≥0 |
| max_radius_m | float | The maximum radius to consider [m]. | 300.0 | ≥0 |
| intensity_threshold | integer | The maximum intensity threshold for secondary returns (primary returns are not affected). | 2 | ≥0 ≤255 |
| visibility_estimation_max_range_m | float | The maximum range to consider for visibility estimation [m] (limits visibility calculations to reliable sensor range). | 20.0 | ≥0 |
| visibility_estimation_min_azimuth_rad | float | The minimum range to consider for visibility estimation [rad] (limits visibility calculations to reliable sensor range). | 0.0 | ≥0.0 ≤6.28 |
| visibility_estimation_max_azimuth_rad | float | The maximum range to consider for visibility estimation [rad] (limits visibility calculations to reliable sensor range). | 6.28 | ≥0.0 ≤6.28 |
| visibility_estimation_min_elevation_rad | float | The minimum range to consider for visibility estimation [rad] (limits visibility calculations to reliable sensor range). | -1.57 | ≥-1.57 ≤1.57 |
| visibility_estimation_max_elevation_rad | float | The maximum range to consider for visibility estimation [rad] (limits visibility calculations to reliable sensor range). | 1.57 | ≥-1.57 ≤1.57 |
| use_return_type_classification | boolean | Whether to use return type classification (if false, all returns are processed). | true | N/A |
| filter_secondary_returns | boolean | Whether to filter secondary returns (if true, only primary returns are kept). | false | N/A |
| secondary_noise_threshold | float | Threshold for classifying primary vs secondary returns. | 4 | ≥0 |
| visibility_estimation_max_secondary_voxel_count | integer | Maximum secondary voxel count for visibility estimation calculations. | 500 | ≥0 |
| primary_return_types | array | List of return type values considered as primary returns (all others are secondary). | [1, 6, 8, 10] | N/A |
| visibility_estimation_only | boolean | Whether to run filter for visibility estimation only without publishing point cloud outputs (for monitoring/diagnostic purposes only). | false | N/A |
| publish_noise_cloud | boolean | Whether to generate and publish noise point cloud for debugging (ignored when visibility_estimation_only=true). | false | N/A |
| filter_ratio_error_threshold | float | The filter ratio threshold for error diagnostics (ratio of output/input points). | 0.5 | ≥0 ≤1 |
| filter_ratio_warn_threshold | float | The filter ratio threshold for warning diagnostics (ratio of output/input points). | 0.7 | ≥0 ≤1 |
| visibility_error_threshold | float | The visibility threshold for error diagnostics. | 0.8 | ≥0 ≤1 |
| visibility_warn_threshold | float | The visibility threshold for warning diagnostics. | 0.9 | ≥0 ≤1 |
| publish_area_marker | boolean | Publish a marker to visualize region used for visibility estimation | false | N/A |
| num_frames_hysteresis_transition | float | The number of frames to be required to transition judgement | 1 | ≥1 |
| immediate_report_error | boolean | Whether to report error state immediately if a single frame categorized as error | false | N/A |
| immediate_relax_state | boolean | Whether to relax state if observed state is better than the current one | false | N/A |
Assumptions / Known limits#
Due to differences in floating-point arithmetic between CPUs and GPUs, the outputs of autoware::pointcloud_preprocessor::PolarVoxelOutlierFilterComponent and this filter may not be identical.
Adding compiler options, such as the following, can reduce numerical discrepancies, though a slight performance impact can also be introduced, and it is still difficult to acquire complete identical results.
list(APPEND CUDA_NVCC_FLAGS "--fmad=false")
To prioritize performance, these compiler options are not enabled.