We use reference maps in combination with classical LiDAR odometry to enable drift-free localization/mapping. Our approach is designed for high precision mapping. It enables georeferenced LiDAR-only point cloud mapping without GNSS. A detailed description of our pipeline can be found in the linked paper.
Install
We provide a Docker image on Docker Hub, which will automatically be pulled within the Run section, but you also have the option to build it locally.
./docker/build_docker.sh # (optional)
Run
To use our approach, you need a reference map and an initial guess of the first pose.
More details on reference maps can be found in our paper.
The easiest way to use our approach is with the provided Docker image.
We currently support point cloud files in .bin
(KITTI), .pcd
, .ply
and .xyz
.
./docker/run_docker.sh <map_path> <scan_path> <output_path> <x> <y> <z> <qx> <qy> <qz> <qw>
# Example
./docker/run_docker.sh /datasets/kitti/map.pcd /datasets/data_odometry_velodyne/dataset/sequences/00/velodyne /output/directory 395.5 1696.25 117.55 0 0 0.4848096 0.8746197
The output of the algorithm are poses in the KITTI format.
We also provide Python bindings. Have a look in the python
folder, where we provide a test script.
Configure
The configuration of this pipeline can be changed in the cpp/config
files. The naming suggest the intended usecase for the files. The most important parameters to play with if your results are not as good as expected are:
Parameter | Description | Default | Note |
---|---|---|---|
pipeline_.visualize | Toggle GUI | true |
use false on headless servers |
pipeline_.save_submaps | Toggle submap saving | false |
use to directly save high-resolution PCD submaps |
preprocess_.downsampling_resolution | Scans are voxelized before usage | 1.5 |
Reduce the size for increased robustness |
preprocess_.num_neighbors | Points for covariance calculation | 10 |
Try both directions |
registration_.voxel_resolution | Voxelhashmap voxel size | 1.0 |
Reduce the size for increased robustness |
registration_.lambda | Optimization dampening factor | 1.0 |
Increase to increase the robustness |
Develop
We also provida a Development image, if you like to contribute or adapt or approach.
Open this repository in VSCode -> F1 -> Rebuild and Reopen in Container.
To build the C++ code:
mkdir build
cd build
cmake ../cpp && make -j
To build the Python bindings:
cd python
pip install -e .
- Detailed instructions on how to create refrence maps are missing
Great inspiration has come from the following repositories. If you use our work, please also leave a star in their repositories and cite their work.
@article{kulmer2025openlidarmap,
author = {Kulmer, Dominik and Leitenstern, Maximilian and Weinmann, Marcel and Lienkamp, Markus},
title = {{OpenLiDARMap: Zero-Drift Point Cloud Mapping using Map Priors}},
pages = {1-11},
doi = {10.48550/arXiv.2501.11111},
year = {2025},
url = {https://arxiv.org/abs/2501.11111},
codeurl = {https://github.com/TUMFTM/OpenLiDARMap},
}