# multi-mapcher
**Repository Path**: xiaoxinslam/multi-mapcher
## Basic Information
- **Project Name**: multi-mapcher
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: GPL-3.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-11
- **Last Updated**: 2026-08-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Multi-Mapcher
**Loop Closure Detection-Free Heterogeneous LiDAR Multi-Session SLAM**
[](https://arxiv.org/abs/2511.00635) [](https://doi.org/10.1109/TIV.2025.3635064) [](#ros-1-noetic) [](#ros-2-humble) [](LICENSE)
## Build and usage
Prerequisites
| Interface | Tested environment |
|---|---|
| ROS 1 | Ubuntu 20.04, ROS Noetic |
| ROS 2 | Ubuntu 22.04, ROS Humble |
The shared core requires C++17, CMake 3.16+, Eigen3, GTSAM, PCL, and yaml-cpp.
Docker users can skip the native dependency installation.
```bash
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository -y ppa:borglab/gtsam-release-4.2
sudo apt update
sudo apt install git build-essential cmake libeigen3-dev libgtsam-dev \
libpcl-dev libtbb-dev libyaml-cpp-dev
```
Clone the Multi-Mapcher:
```bash
git clone --recurse-submodules https://github.com/url-kaist/multi-mapcher.git
```
ROS 1 Noetic
Place the repository at `/src/multi-mapcher`.
From the catkin workspace root with ROS Noetic sourced:
```bash
rosdep install --from-paths src/multi-mapcher --ignore-src -r -y
catkin_make -DCMAKE_BUILD_TYPE=Release
source devel/setup.bash
roslaunch multi_mapcher run.launch \
dataset_yaml:=/absolute/path/to/dataset.yaml
```
ROS 2 Humble
Place the repository at `/src/multi-mapcher`.
From the colcon workspace root with ROS Humble sourced:
```bash
rosdep install --from-paths src/multi-mapcher --ignore-src -r -y
colcon build --packages-select multi_mapcher \
--cmake-args -DCMAKE_BUILD_TYPE=Release
source install/setup.bash
ros2 launch multi_mapcher run.launch.py \
dataset_yaml:=/absolute/path/to/dataset.yaml
```
The dataset YAML selects `mode: single_session` or `mode: multi_session`.
Both ROS versions use the same YAML files and C++ core.
Workflow and guides
1. Install [AutoDataloader](https://github.com/kimdaebeom/dataloader) with `python3 -m pip install autodataloader`, convert MulRan or HeLiPR, and provide an estimated SLAM trajectory for every LiDAR session.
2. Run `single_session` and inspect each generated `after/` result.
3. Use those verified `after/` directories as the `multi_session` inputs.
4. Enable iSAE in the multi-session YAML when ground truth is available.
- Start with [`config/parameters/s2sub.yaml`](config/parameters/s2sub.yaml).
- [`sub2sub.yaml`](config/parameters/sub2sub.yaml) is an optional, slower preset that uses larger source and target submaps.
- Default values and adjustment ranges are documented directly in both YAML files.
- See the [usage guide](docs/USAGE.md) for MulRan/HeLiPR conversion, dataset YAML, single-to-multi execution, outputs, and iSAE.
- Use `docker/ros1/run_docker.sh` or `docker/ros2/run_docker.sh` for container execution; see [Docker](docs/DOCKER.md).
> [!WARNING]
> Multi-session optimization requires the intra-session loop constraints saved in each `after/pose_graph.g2o`.
> The program rejects a pose-only trajectory because its odometry-only graph can deform or collapse during optimization.
## Citation
If this repository supports your research, please cite our Multi-Mapcher paper:
```bibtex
@article{lim2026tiv,
title = {{Multi-Mapcher: Loop Closure Detection-Free Heterogeneous LiDAR
Multi-Session SLAM Leveraging Outlier-Robust Registration for
Autonomous Vehicles}},
author = {Lim, Hyungtae and Kim, Daebeom and Myung, Hyun},
journal = {IEEE Transactions on Intelligent Vehicles},
volume = {11},
number = {2},
pages = {338--351},
year = {2026},
doi = {10.1109/TIV.2025.3635064}
}
```
Quatro and Quatro++ citations
```bibtex
@inproceedings{Lim22icra-Quatro,
title = {A Single Correspondence Is Enough: Robust Global Registration
to Avoid Degeneracy in Urban Environments},
author = {Lim, Hyungtae and Yeon, Suyong and Ryu, Soohyun and Lee, Yonghan
and Kim, Youngji and Yun, Jaeseong and Jung, Euigon and Lee,
Donghwan and Myung, Hyun},
booktitle = {Proceedings of the IEEE International Conference on Robotics
and Automation (ICRA)},
pages = {8010--8017},
year = {2022}
}
@article{Lim24ijrr-Quatropp,
title = {{Quatro++: Robust Global Registration Exploiting Ground
Segmentation for Loop Closing in LiDAR SLAM}},
author = {Lim, Hyungtae and Kim, Beomsoo and Kim, Daebeom and Lee,
Eungchang Mason and Myung, Hyun},
journal = {The International Journal of Robotics Research},
volume = {43},
number = {5},
pages = {685--715},
year = {2024},
doi = {10.1177/02783649231207654}
}
```
## Acknowledgements
The anchor-node-based pose-graph formulation and the original `BetweenFactorWithAnchoring` implementation were adapted from [LT-mapper](https://github.com/gisbi-kim/lt-mapper).
## License
Multi-Mapcher is released under the [GNU General Public License v3.0 only](LICENSE) (`GPL-3.0-only`).
Bundled and adapted third-party components retain their respective copyright and license notices.