3rd-party wrappers
For the sake of scientific comparison between different methods, we provide wrappers of other LiDAR odometry methods that mimic the interface of mola-lidar-odometry-cli, so exactly the same input datasets can be processed by different methods.
KISS-ICP
Wrapper for the work [VGM+23].
Repository: https://github.com/MOLAorg/mola_kiss_icp_wrapper
Compile instructions
Clone in your ROS 2 workspace:
mkdir -p ~/ros2_mola_ws/src/
cd ~/ros2_mola_ws/src/
git clone https://github.com/MOLAorg/mola_kiss_icp_wrapper.git --recursive
Install dependencies:
cd ~/ros2_mola_ws/
rosdep install --from-paths src --ignore-src -r -y
Compile:
cd ~/ros2_mola_ws/
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo
CLI reference
USAGE:
mola-lidar-odometry-cli-kiss [--input-mulran-seq <KAIST01>]
[--kitti-correction-angle-deg <0.205
[degrees]>] [--input-kitti-seq <00>]
[--lidar-sensor-label <>] [--input-rosbag2
<dataset.mcap>] [--input-rawlog
<dataset.rawlog>] [--only-first-n <Number
of dataset entries to run>] [--no-deskew]
[--output-tum-path
<output-trajectory.txt>] [--max-range
<max-range>] [--min-range <min-range>]
[--] [--version] [-h]
Where:
--input-mulran-seq <KAIST01>
INPUT DATASET: Use Mulran dataset sequence KAIST01|KAIST01|...
--kitti-correction-angle-deg <0.205 [degrees]>
Correction vertical angle offset (see Deschaud,2018)
--input-kitti-seq <00>
INPUT DATASET: Use KITTI dataset sequence number 00|01|...
--lidar-sensor-label <>
If provided, this supersedes the values in the 'lidar_sensor_labels'
entry of the odometry pipeline, defining the sensorLabel/topic name to
read LIDAR data from. It can be a regular expression (std::regex)
--input-rosbag2 <dataset.mcap>
INPUT DATASET: rosbag2. Input dataset in rosbag2 format (*.mcap)
--input-rawlog <dataset.rawlog>
INPUT DATASET: rawlog. Input dataset in rawlog format (*.rawlog)
--only-first-n <Number of dataset entries to run>
Run for the first N steps only (0=default, not used)
--no-deskew
Skip scan de-skew
--output-tum-path <output-trajectory.txt>
Save the estimated path as a TXT file using the TUM file format (see
evo docs)
--max-range <max-range>
max-range parameter
--min-range <min-range>
min-range parameter
--, --ignore_rest
Ignores the rest of the labeled arguments following this flag.
--version
Displays version information and exits.
-h, --help
Displays usage information and exits.
mola-lidar-odometry-cli-kiss
SiMpLE
Wrapper for the work [BPM24].
Repository: https://github.com/MOLAorg/mola_simple_wrapper
Compile instructions
Clone in your ROS 2 workspace:
mkdir -p ~/ros2_mola_ws/src/
cd ~/ros2_mola_ws/src/
git clone https://github.com/MOLAorg/mola_simple_wrapper.git --recursive
Install dependencies:
cd ~/ros2_mola_ws/
rosdep install --from-paths src --ignore-src -r -y
Compile:
cd ~/ros2_mola_ws/
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo
CLI reference
USAGE:
mola-lidar-odometry-cli-simple [--input-paris-luco] [--input-mulran-seq
<KAIST01>] [--input-kitti360-seq <00>]
[--kitti-correction-angle-deg <0.205
[degrees]>] [--input-kitti-seq <00>]
[--lidar-sensor-label <lidar1>]
[--input-rosbag2 <dataset.mcap>]
[--input-rawlog <dataset.rawlog>]
[--only-first-n <Number of dataset
entries to run>] [--output-tum-path
<output-trajectory.txt>] -c
<config.yaml> [--] [--version] [-h]
Where:
--input-paris-luco
INPUT DATASET: Use Paris Luco dataset (unique sequence=00)
--input-mulran-seq <KAIST01>
INPUT DATASET: Use Mulran dataset sequence KAIST01|KAIST01|...
--input-kitti360-seq <00>
INPUT DATASET: Use KITTI360 dataset sequence number 00|01|...
--kitti-correction-angle-deg <0.205 [degrees]>
Correction vertical angle offset (see Deschaud,2018)
--input-kitti-seq <00>
INPUT DATASET: Use KITTI dataset sequence number 00|01|...
--lidar-sensor-label <lidar1>
If provided, this supersedes the values in the 'lidar_sensor_labels'
entry of the odometry pipeline, defining the sensorLabel/topic name to
read LIDAR data from. It can be a regular expression (std::regex)
--input-rosbag2 <dataset.mcap>
INPUT DATASET: rosbag2. Input dataset in rosbag2 format (*.mcap)
--input-rawlog <dataset.rawlog>
INPUT DATASET: rawlog. Input dataset in rawlog format (*.rawlog)
--only-first-n <Number of dataset entries to run>
Run for the first N steps only (0=default, not used)
--output-tum-path <output-trajectory.txt>
Save the estimated path as a TXT file using the TUM file format (see
evo docs)
-c <config.yaml>, --config-file <config.yaml>
(required) Simple config file
--, --ignore_rest
Ignores the rest of the labeled arguments following this flag.
--version
Displays version information and exits.
-h, --help
Displays usage information and exits.
mola-lidar-odometry-cli-simple
DLIO
Wrapper for the work [CNL23].
Repository: https://github.com/MOLAorg/mola_dlio_wrapper
Unlike the filter-based methods above, DLIO uses no filter and no factor graph: the pose comes from GICP scan-to-submap registration, and the IMU is fused by a nonlinear geometric observer with constant gains. Every point is deskewed against a continuous IMU-integrated trajectory rather than a per-scan linear interpolation, and the local map is a submap selected from keyframes by a hull plus kNN search rather than a voxel or octree structure.
It provides two entry points:
mola::DlioOdometry, an online module loadable from amola-clilaunch YAML (type: mola::DlioOdometry), which publishes localization and submap updates so the MOLA GUI draws the trajectory and the growing map live.mola-dlio-cli, an offline tool that waits for each observation to finish before feeding the next, so no scan is ever dropped. This is the one to use for comparisons: see GUI or offline CLI: which one, and why.
Note
This wrapper currently targets Oxford Spires, read through the generic
mola::Rosbag2Dataset input. It does not cover the full set of dataset
sources that the KISS-ICP and SiMpLE wrappers accept.
Compile instructions
Clone in your ROS 2 workspace:
mkdir -p ~/ros2_mola_ws/src/
cd ~/ros2_mola_ws/src/
git clone https://github.com/MOLAorg/mola_dlio_wrapper.git --recursive
Install dependencies and compile:
cd ~/ros2_mola_ws/
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install --packages-select mola_dlio_wrapper \
--cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo
source install/setup.bash
GLIM
Wrapper for the work [KYOB24].
Repository: https://github.com/MOLAorg/mola_glim_wrapper
Upstream GLIM is a full SLAM system: an odometry front end, a sub-mapping
stage, and a global-mapping back end with loop closure. This wrapper
instantiates the odometry stage only (glim::OdometryEstimationCPU, a
fixed-lag factor-graph estimator over GICP/VGICP scan-to-model factors and
preintegrated IMU factors).
That is deliberate. The wrapper exists for cross-method odometry comparison, and a loop-closed, globally optimized trajectory is not comparable with the odometry-only results the other wrappers on this page produce.
It provides:
mola::GlimOdometry, an online module loadable from amola-clilaunch YAML.mola-glim-cli, an offline, loss-free CLI over the MOLA dataset sources: KITTI, ROS 1 bags, ROS 2 bags, MulRan and rawlog.Pipeline YAMLs for Oxford Spires, KITTI, BotanicGarden and Newer College.
Compile instructions
Everything GLIM needs is vendored in the repository, so the only
prerequisites are system packages: GTSAM >= 4.2 with gtsam_unstable
(ros-$ROS_DISTRO-gtsam on ROS distributions), Eigen 3, Boost (graph,
filesystem, serialization), spdlog, OpenMP, plus MRPT and the MOLA core
packages.
mkdir -p ~/ros2_mola_ws/src/
cd ~/ros2_mola_ws/src/
git clone https://github.com/MOLAorg/mola_glim_wrapper.git --recursive
cd ~/ros2_mola_ws/
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install --packages-select mola_glim_wrapper \
--cmake-args -DCMAKE_BUILD_TYPE=RelWithDebInfo
source install/setup.bash
Example: run on a KITTI sequence
KITTI_BASE_DIR=/path/to/kitti mola-glim-cli \
-c $(ros2 pkg prefix mola_glim_wrapper)/share/mola_glim_wrapper/pipelines/glim-kitti.yaml \
--input-kitti-seq 04 \
--output-tum-path /tmp/glim_kitti04.tum