Exwayz Relocalization algorithm takes in input:

Its goal is to register the incoming LiDAR data on the map using a 3D registration algorithm. This registration algorithm needs an initial guess of where the LiDAR is when the process starts. Once initialized, the initialization pose is not used anymore.

For performing this registration, the relocalization follows a 2 steps pipeline:

Pre processing : aims at reducing the number of points provided 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.

Default YAML

Below is the example relocalization.yaml configuration file with all parameters open to the user. The comments are the main documentation of each parameters.

relocalization:
    # [optional] Minimum number of successful consecutive initialization to 
    # switch to FIX mode
    min_num_init: 20

    # [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
    icp_init:
        # [optional, default=2] Number of threads used for nearest neighbour 
        # search
        num_threads: 2
        # [optional, default=10] Maximimum number of iterations
        num_iter: 5
        # [optional, default=0.5(m)] Outlier rejection distance
        d_max: 0.5

    # [optional] ICP parameters used for localization
    icp:
        num_threads: 2
        num_iter: 5
        d_max: 0.2

    # [optional] Local mapping settings
    local_mapping:
        # [required if local_mapping key found, default=false] Enable / disable 
        # local mapping
        enable: false
        # [optional, default=50] Minimum nb of consecutive FIX before start 
        # building the local map
        min_num_fix: 50
        # [optional] Loacl 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

    # [required] Static map parameters
    map_static:
        # [required] .map file path.
        path: <path-to-map-file>
        # [optional] SHA1 to check the map file specified in 'path' 
        # correspondance.
        sha1: <map-sha1>
        # [optional] Map projection coordinate system (used for navsatfix 
        # output).
        crs: <map-crs>

    # [optional] Transformation made on initiation input settings
    init:
        # [optional] Calibration applied to the initialization pose
        calib:
            # [optional, default=[0.0, 0.0, 0.0](m)] Translation
            translation: [0.0, 0.0, 0.0]
            # [optional, default=[0.0, 0.0, 0.0](rad)] Euler angles [Rx, Ry, Rz]
            # (roll, pitch yaw)
            euler: [0.0, 0.0, 0.0]
            # [optional, default=false] Interprete the angles in degrees
            angles_degrees: true

    # [optional] Checks on input data
    checks:
        # [optional, default=0.25] Minimum expected overlap to the map after 
        # registration. Switch to ERROR mode if not respected
        min_overlap: 0.25
        # [optional, default=0.1(m)] Maximum distance to the map after 
        # registration. Switch to ERROR mode if not respected
        max_distance_to_map: 0.1
        # [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: 1

        # [optional] Calibration applied to the output pose
        calib:
            translation: [1.0, 0.0, 0.0]
            # [optional, default=[1.0, 0.0, 0.0, 0.0]] Orientation as 
            # quaternion interpreted in Hamiltonian convention (qw, qx, qy, qz)
            quaternion: [1.0, 0.0, 0.0, 0.0]

    # [required] (ros only) ROS parameters
    ros:
        # [optional, default=/exwayz/relocalization] Output namespace, prepends 
        # all outputs.
        namespace: /exwayz/relocalization

        # [required] Input PointCloud2 topic
        input_pointcloud2:
            # [required] Topic name
            topic: <topic-name>
            # [optional, default=20] Subscribe queue size
            queue_size: 1

        # [required] Input Odometry topic
        input_odometry:
            # [required] Topic name
            topic: <topic-name>

        # [optional] Output Odometry settings
        output_odometry:
            # [optional, default=/odometry] Output topic
            topic: /odometry
            # [optional, default=xyz_map] Odometry message header.frame_id
            parent_frame_id: xyz_map
            # [optional, default=""] Odometry message child_frame_id. If empty, 
            # input PointCloud2 frame id is used
            child_frame_id: reloc
            # [optional, default=false] Optionally inverts output pose and 
            # frame_ids
            invert: false
            # [optional, default=false] Publish parent->child TF using the 
            # output Odometry
            publish_tf: false

        output_odometry_local:
            # [optional, default=/odometry_local] Output topic
            topic: /odometry_local
            # [optional, default=xyz_map] Odometry message header.frame_id
            parent_frame_id: xyz_map
            # [optional, default=""] Odometry message child_frame_id. If empty, 
            # input PointCloud2 frame id is used
            child_frame_id: reloc
            # [optional, default=false] Optionally inverts output pose and 
            # frame_ids
            invert: false
            # [optional, default=false] Publish parent->child TF using the 
            # output Odometry
            publish_tf: true

        # [optional] Output NavSatFix settings
        output_navsatfix:
            # [optional, default=/navsatfix]
            topic: /navsatfix

        # [optional] Output PointCloud2 settings
        output_pointcloud2:
            # [optional, default=/pointcloud2] Output topic
            topic: /pointcloud2
            # [optional, default=""] Output frame id. If empty, input
            # PointCloud2 frame id is used
            frame_id: reloc

        # [optional] Output ExwayzStatus settings
        output_status:
            # [optional, default=/status]
            topic: /status

    # [optional] (rtmaps only) RTMaps parameters
    rtmaps:
        # [optional, default=5000(Ko)] Point cloud output buffer size
        pc_buffer_size: 5000

Explanation

min_num_init

enable_motion_compensation

preprocess

icp_init

icp

local_mapping

map_static