mad-icp

It Is All About Matching Data -- Robust and Informed LiDAR Odometry


Keywords
LiDAR, icp, odometry, point-cloud
License
BSD-3-Clause
Install
pip install mad-icp==0.0.3

Documentation

GitHub Repo stars PyPI - Version PyPI - Downloads

MAD-ICP

It Is All About Matching Data -- Robust and Informed LiDAR Odometry


Install using pip

You can download/install MAD-ICP using pip

pip install mad-icp

Usage

We provide a Python launcher for Rosbag1, Rosbag2, and KITTI binary formats. The dataset configuration file is important for the sensor characteristics and extrinsic information (typically, ground truths are not expressed in the LiDAR frame).

The internal parameters are in configurations/params.cfg (at the moment if you install this via pip you need to clone the repo). All the experiments have been run with this same set. To run the pipeline, choose the appropriate dataset configuration file (kitti.cfg for this example) and type:

cd mad-icp/
mad_icp --data-path /input_dir/ \
        --estimate-path /output_dir/ \
        --dataset-config mad-icp/configurations/datasets/kitti.cfg \
        --mad-icp-config mad-icp/configurations/params.cfg

Our runner directly saves the odometry estimate file in KITTI format (homogenous matrix row-major 12 scalars); soon, we will provide more available formats like TUM.

Our pipeline is anytime realtime! You can play with parameters num_keyframes and num_cores and, if you have enough computation capacity, we suggest increasing these (we run demo/experiments with num_keyframes=16 and num_cores=16).


Building from source

Building is tested by our CI/CD pipeline for Ubuntu 20.04 and Ubuntu 22.04 (using g++).

The following external dependencies are required.

Dependency Version(s) known to work
Eigen 3.3
OpenMP
pybind11
yaml (optional for C++ apps)

If your system lacks any dependency (except for OpenMP) we download local copies using FetchContent. If you want to build and install the package, assuming you're inside the repository, you can use pip as follows:

pip install .

Moreover, you can build the C++ library (along with the pybinds) by typing:

mkdir build && cd build && cmake ../mad_icp && make -j8

Building and Running C++ Apps [Optional]

If you want to avoid Python, we provide the bin_runner C++ executable (located in mad_icp/apps/cpp_runners/bin_runner.cpp) that accepts binary cloud format (KITTI, Mulran, etc.). You can build the executable using

mkdir build && cd build && cmake -DCOMPILE_CPP_APPS=ON ../mad_icp && make -j

And run

cd build/apps/cpp_runners
./bin_runner -data_path /path_to_bag_folder/ \
             -estimate_path /path_to_estimate_folder/ \
             -dataset_config ../../../mad_icp/configurations/datasets/kitti.cfg \
             -mad_icp_config ../../../mad_icp/configurations/params.cfg 

Important

If running on the KITTI dataset, enable the flag -kitti for KITTI scan correction (not documented anywhere). We do not (currently) provide a viewer for this executable.

What is missing?

  • ROS/ROS2 optional dependencies

Cite us

Our work is currently under review; in the meantime, if you use any of this code, here is the preprint information:

@article{ferrari2024mad,
  title={MAD-ICP: It Is All About Matching Data--Robust and Informed LiDAR Odometry},
  author={Ferrari, Simone and Di Giammarino, Luca and Brizi, Leonardo and Grisetti, Giorgio},
  journal={arXiv preprint arXiv:2405.05828},
  year={2024}
}