Exwayz SLAM algorithm performs a processing pipeline.
Pre processing : aims at reducing the number of input points of the registration algorithm (ICP), mainly discarding troublesome or redundant point from the raw data.
ICP : ICP (Iterative Closest Point) is the registration algorithm used to calculate the relative position of the upcoming frame with respect to the local map, which is constructed at the same time
Map update : Exwayz SLAM maintains and updates an internal local map which is used for the upcoming frame registration. This map is expressed in an internal data structure and has nothing to do with the point cloud produced at the end of the full mapping pipeline.
Below is the example slam.yaml
configuration file with all parameters open to the user. The comments are the main documentation of each parameters.
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: 5
# [optional, default=0.2(m)] Outlier rejection distance
d_max: 0.2
# [optional] 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: 1
# [required] (ros only) ROS parameters
ros:
# [optional, default=/exwayz/slam] Output namespace, prepends all
# outputs.
namespace: /exwayz/slam
# [required] Input PointCloud2 topic
input_pointcloud2:
# [required] Topic name
topic: <topic-name>
# [optional, default=20] Subscribe queue size
queue_size: 20
# [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: slam
# [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 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: slam
# [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
enable_motion_compensation
pre_process
icp
map_local
checks
outputs
ros
rtmaps