Skip to content

TUMFTM/OpenLiDARMap

Repository files navigation

OpenLiDARMap

Zero-Drift Point Cloud Mapping using Map Priors


C++ Python Docker License Version arXiv YouTube


openlidarmap

Concept

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.

diagram

Usage

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 .

Limitations

  • Detailed instructions on how to create refrence maps are missing

Acknowledgement

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.

Citation

@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},
}