sm2mm pipelines

This page describes the file format for sm2mm pipelines and lists some useful ready-to-use examples.

1. What does sm2mm mean?

sm2mm stands for the process of transforming a “simple map” file, a “key-frame map” typically generated by a SLAM system and having the .simplemap extension, into a “metric map” file (.mm extension), typically comprising several map layers of different types, semantics, or serving to different purposes.

sm2mm generic diagram

Users may use this through two interfaces: a CLI application sm2mm or the C++ API mp2p_icp_filters::simplemap_to_metricmap().


2. Pipeline file specification

Pipeline configuration files are written in YAML format and define the sequence of operations to be applied to the raw sensor observations stored as map keyframes.

The pipeline can include various filters and generators that process the observations, such as downsampling, noise reduction, or feature extraction. The pipeline file can also specify custom plugins to be loaded, which can define new metric map classes or custom filter algorithms.

Each pipeline file can contain these sections:

  • generators:: A list of generators to create maps from each raw observations in each key-frame. If none is provided, the default mp2p_icp::Generator is used, which generates a point cloud from the observation.

  • filters:: A list of filters to apply to each key-frame observations, after generators have been applied. For example, here one typically removes the robot body, de-skew the scan, downsamples the point cloud, and merges the result into one or several final metric map layers used to accumulate the result.

  • final_filters:: An optional list of filters to apply to the final map layers, after all key-frames have been processed.

Refer to example pipeline files sm2mm_*.yaml under the demos directory. Some of them are explained below with a diagram.


3. Example sm2mm pipelines


Pipeline: sm2mm_no_decim_imu_mls_keyframe_map.yaml

Purpose: Build a dense (no downsampling) point cloud, using IMU-based motion compensation, then filter the map using the MLS filter, and store the resulting map into a mola::KeyframePointCloudMap layer named localmap, suitable for MOLA-LIO localization-only mode.

sm2mm diagram

Example result screenshots
sm2mm example result screenshots
Pipeline YAML code



Pipeline: sm2mm_pointcloud_voxelize.yaml

Purpose: Process point clouds by applying voxelization to downsample the data while preserving spatial structure, creating a more memory-efficient representation.

sm2mm voxelization diagram

Example result screenshots

Overview of voxelized map:

sm2mm voxel overview

Detailed view of voxel structure:

sm2mm voxel detail
Pipeline YAML code



Pipeline: sm2mm_voxels_static_dynamic_points.yaml

Purpose: Separate point clouds into static and dynamic layers using voxel-based analysis, enabling differentiation between stationary map features and moving objects for robust localization and mapping.

sm2mm static/dynamic separation diagram

Example result screenshots

Overview of map with static/dynamic layers:

sm2mm dynamic layer overview

Detailed view of static layer:

sm2mm static layer detail

Voxel representation with dynamic filtering:

sm2mm dynamic voxel detail

Dynamic layer visualization:

sm2mm dynamic layer
Pipeline YAML code