Skip to content

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.