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

Explanation

enable_motion_compensation

pre_process

icp

map_local

checks

outputs