# 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** [![arXiv](https://img.shields.io/badge/arXiv-2511.00635-B31B1B?logo=arxiv)](https://arxiv.org/abs/2511.00635) [![IEEE T-IV](https://img.shields.io/badge/IEEE%20T--IV-10.1109%2FTIV.2025.3635064-00629B?logo=ieee)](https://doi.org/10.1109/TIV.2025.3635064) [![ROS 1](https://img.shields.io/badge/ROS%201-Noetic-22314E?logo=ros)](#ros-1-noetic) [![ROS 2](https://img.shields.io/badge/ROS%202-Humble-22314E?logo=ros)](#ros-2-humble) [![License](https://img.shields.io/badge/License-GPLv3-blue.svg)](LICENSE)

Multi-Mapcher heterogeneous LiDAR multi-session mapping demo

## 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.