Front-End Configuration

The COSMO-Bench datasets consist primarily of the measurements output from our baseline distributed Collaborative Simultaneous Localization and Mapping (C-SLAM) front-end. While this front-end is documented in the COSMO-Bench publication we provide the same documentation here along with the hyper-parameters used for each of the component algorithms.

Odometry: LOAM

Odometry measurements, observed at the rate of LiDAR scans, are derived using LiDAR Odometry and Mapping (LOAM) – a standard baseline for LiDAR-only odometry. We use an open-source implementation of LOAM provided through evalio.

For all trails we use the following LOAM parameters:

# Local Map
num_local_map_scans: 3

# Feature Extraction
neighbor_points: 3
number_sectors: 6
max_edge_feats_per_sector: 5
max_planar_feats_per_sector: 50
edge_feat_threshold: 100.0
planar_feat_threshold: 1.0
occlusion_thresh: 0.5
parallel_thresh: 1.0


# Registration
max_icf_iterations: 20
position_convergence_thresh: 0.001
rotation_convergence_thresh: 0.0001
num_edge_neighbors: 5
max_edge_neighbor_dist: 2.0
min_line_fit_points: 3
min_line_condition_number: 5.0
num_plane_neighbors: 5
max_plane_neighbor_dist: 4.0
max_avg_point_plane_dist: 0.2
min_plane_fit_points: 4

For an explanation of these parameters see the following: Local Map, Feature Extraction, Registration.

Keyframes

From this high-rate odometry, we sub-sample keyframes – a standard practice in SLAM pipelines to reduce the problem size. We use a distance-based keyframe selection metric to sample keyframes when the odometry measurements indicate that the robot has traveled more than a threshold distance $d_{kf} = 2m$. Odometry between keyframes is computed by integrating the LiDAR rate odometry measurements.

Intra-Robot + Inter-Robot Loop-Closure Detection: ScanContext

For each keyframe, we perform intra-robot loop-closure detection using ScanContext. A ScanContext descriptor and RingKey are computed for the keyframe scan and compared against a database of descriptors from all prior keyframes using the “Two-Phase Search” method described in the original work.

To detect and compute inter-robot measurements, robots communicate raw LiDAR scans. When a scan is received from a teammate, we again use ScanContext and perform the “Two-Phase Search” against the database of local keyframe descriptors. We then store the descriptor in a unique database for scans received from the teammate. When a local keyframe is selected, it is also compared against the databases for all teammates.

We use an open-source implementation of the ScanContext descriptor and database that can be found here.

# Descriptor
max_range: FROM_LIDAR
number_rings: 20
number_sectors: 60

# Database
kdtree_rebuild_threshold: 100
number_ring_key_nn: 5
query_distance_threshold: 0.4

For an explanation of these parameters see the following: Descriptor, Database.

Loop Closure Measurements: KISS-Matcher

For each detected loop-closure (both intra-robot and inter-robot), when detected, we attempt to compute a loop-closure measurement using KISS-Matcher. This algorithm does attempt to reject outlier measurements, but as expected, it does compute spurious measurements both due to poor detections as well as limitations in the LiDAR scan alignment, resulting in realistic outliers that we want for our benchmark datasets.

We use the open-source implementation of KISS-Matcher provided by the original authors which can be found here.

# KISS-Matcher
num_max_corr: 2000
rot_inlier_thresh: 10
thr_linearity: 1.0
trans_inlier_thresh: 10
use_quatro: false
use_voxel_sampling: true
voxel_size: 0.3

For an explanation of these parameters see the following: KISS-Matcher. Note: All unlisted params use default values listed in the code.