<aside> 💡

This document describes the multiple parameters of the pre-processing step used in config: SLAM and config: Relocalization.

</aside>


Example YAML

pre_process:
		# [optional, default=2] Number of threads used for pre-processing
		num_threads: 2
		
		# [optional, default=32] Number of rows for the spherical subsampling
		num_rows : 32
		# [optional, default=512] Number of cols for the spherical subsampling
		num_cols : 512
		# [optional, default=closest] Keep strategy for each pixel
		#   * closest: keep only the point with lowest range in each pixel
		#   * farthest: keep only the point with highest range in each pixel
		#   * both: keep both points with lowest and highest range in each pixel
		keep_strategy : farthest
		
		# [optional, default=0.2(m)] Minimum range of a point to be preserved in subsampling
		range_min: 2.0
		# [optional, default=250.0(m)] Maximum range of a point to be preserved in subsampling
		range_max: 150.0
		
		# [optional, default=[0.0, 0.0, 0.0](m)] Center of the exclusion axis-aligned box
		center: [0.0, 0.0, 0.0]
		# [optional, default=[0.0, 0.0, 0.0](m)] Size of the exclusion axis-aligned box
		size: [5.0, 5.0, 5.0]
		
		# [optional, default=0.1(m)] Resolution of the final voxel subsampling
		grid_resolution: 0.1
		

Explanation

<aside> ⚠️ The chosen parameters used to produce the images below are not relevant for real processing, their values were selected only to demonstrate the effect of each filter.

</aside>

num_threads

The pre-processing is accelerated by parallelizing some operations through multi-threading. This parameter is the maximum number of threads used for the calculation.

Spherical subsampling

# [optional, default=32] Number of rows for the spherical subsampling
num_rows : 32
# [optional, default=512] Number of cols for the spherical subsampling
num_cols : 512
# [optional, default=closest] Keep strategy for each pixel
#   * closest: keep only the point with lowest range in each pixel
#   * farthest: keep only the point with highest range in each pixel
#   * both: keep both points with lowest and highest range in each pixel
keep_strategy : farthest

The first pre-processing step consists in casting the input point cloud inside a spherical image with parametric number or rows num_rows and columns num_cols. This reduces the information in each “angular” pixel by keeping a single point (the farthest if the keep_strategy is set to farthest for instance, but we could keep the closest or both) which is redundant because of the high accuracy of recent sensors.

Full frame without any pre-processing

Full frame without any pre-processing

Frame after sphercial subsampling with  and

Frame after sphercial subsampling with num_rows = 16 and num_cols = 512

<aside> 💡 The number of points in the resulting sub-sampled point cloud is capped by num_rows * num_cols

</aside>

Range filtering

# [optional, default=0.2(m)] Minimum range of a point to be preserved in subsampling
range_min: 2.0
# [optional, default=250.0(m)] Maximum range of a point to be preserved in subsampling
range_max: 150.0

After performing the spherical subsampling, the points at a greater range than range_max and lower range than range_min are discarded. This is useful to: