Skip to content

ring_outlier_filter#

Purpose#

The purpose is to remove point cloud noise such as insects and rain.

Inner-workings / Algorithms#

A method of operating scan in chronological order and removing noise based on the rate of change in the distance between points

ring_outlier_filter

Another feature of this node is that it calculates visibility score based on outlier pointcloud and publish score as a topic.

visibility score calculation algorithm#

The pointcloud is divided into vertical bins (rings) and horizontal bins (azimuth divisions). The algorithm starts by splitting the input point cloud into separate rings based on the ring value of each point. Then, for each ring, it iterates through the points and calculates the frequency of points within each horizontal bin. The frequency is determined by incrementing a counter for the corresponding bin based on the point's azimuth value. The frequency values are stored in a frequency image matrix, where each cell represents a specific ring and azimuth bin. After calculating the frequency image, the algorithm applies a noise threshold to create a binary image. Points with frequency values above the noise threshold are considered valid, while points below the threshold are considered noise. Finally, the algorithm calculates the visibility score by counting the number of non-zero pixels in the frequency image and dividing it by the total number of pixels (vertical bins multiplied by horizontal bins).

uml diagram

Inputs / Outputs#

This implementation inherits autoware::pointcloud_preprocessor::Filter class, please refer README.

Parameters#

Node Parameters#

This implementation inherits autoware::pointcloud_preprocessor::Filter class, please refer README.

Core Parameters#

Name Type Description Default Range
distance_ratio float distance_ratio 1.03 ≥0.0
object_length_threshold float object_length_threshold 0.1 ≥0.0
num_points_threshold integer num_points_threshold 4 ≥0
max_rings_num integer max_rings_num 128 ≥1
max_points_num_per_ring integer Set this value large enough such that HFoV / resolution < max_points_num_per_ring 4000 ≥0
publish_outlier_pointcloud boolean Flag to publish outlier pointcloud and visibility score. Due to performance concerns, please set to false during experiments. false N/A
min_azimuth_deg float The left limit of azimuth for visibility score calculation 0.0 ≥0.0
max_azimuth_deg float The right limit of azimuth for visibility score calculation 360.0 ≥0.0
≤360.0
max_distance float The limit distance for visibility score calculation 12.0 ≥0.0
vertical_bins integer The number of vertical bin for visibility histogram 128 ≥1
horizontal_bins integer The number of horizontal bin for visibility histogram 36 ≥1
noise_threshold integer The threshold value for distinguishing noise from valid points in the frequency image 2 ≥0

Assumptions / Known limits#

This nodes requires that the points of the input point cloud are in chronological order and that individual points follow the memory layout specified by PointXYZIRCAEDT.

(Optional) Error detection and handling#

(Optional) Performance characterization#

(Optional) Future extensions / Unimplemented parts#