Exwayz SLAM algorithm performs a processing pipeline.
Pre processing : aims at reducing the number of points input to the registration algorithm (ICP), mainly discarding troublesome or redundant point on the raw data.
ICP : The ICP (Iterative Closest Point) is the registration algorithm used to compute the relative position of the upcoming frame relatively to the local map being built.
Map update : Exwayz SLAM maintains and updates an internal local map which is used for the upcoming frame registration. This map in an internal data structure and has nothing to do with the point cloud produced at the end of the full mapping pipeline.
<aside> 🧠The parameters here described are only processing parameters. The pre-processing and the map parameter will not affect the written frames or the merged point cloud density ****
</aside>
Below is a sample SLAM configuration file.
__profile_name__: "sample"
odometry:
# [optional, default=true] Enable motion compensation using the frames'
# timestamps
enable_motion_compensation: true
# [optional] Preprocessing settings
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
# [optional] ICP parameters used for initialization
init:
# [optional, default=5] Number of frames on which use the following
# d_max value
num_init: 5
# [optional, default=0.5(m)] Outlier rejection distance
d_max: 0.5
# [optional] ICP parameters used for localization
icp:
# [optional, default=2] Number of threads used for nearest neighbour
# search
num_threads: 2
# [optional, default=10] Maximimum number of iterations
num_iter: 10
# [optional, default=0.2(m)] Outlier rejection distance
d_max: 0.2
# [optional] Local map parameters
map_local:
# [optional, default=0.5(m)] Linear distance to the last added frame
# for triggering map update
d_update: 0.5
# [optional, default=200.0(m)] Pruning radius of the map
d_prune: 200.0
# [optional, default=30] Number of neighbors used to compute map normals
normals_knn: 30
# [optional, default=0.2(m)] Map voxel size
resolution: 0.2
# [optional] Checks on input data
checks:
# [optional, default=0.7] Rejection ratio used to discard incoming
# frames that have suspiciously low nb of points, e.g. less than
# input_rejection_ratio * previous_frame
input_rejection_ratio: 0.7
# [optional] Output settings
output:
# [optional, default=2] Output point cloud mode
# * 0: no output pointcloud
# * 1: process (subsampled) point cloud
# * 2: full frame
pc_mode: 2
enable_motion_compensation
pre_process
icp
map_local
checks
outputs