OpenNavMap is a lightweight, structure-free topometric mapping system that enables large-scale collaborative localization across multiple sessions without requiring pre-built 3D models. It builds, aligns, merges, and maintains multi-session topometric maps for image-goal navigation.
The system represents environments using three complementary graph structures:
- Covis Graph (
covis): image keyframes with visual associations and descriptors - Odometry Graph (
odom): sequential pose chain from odometry - Traversability Graph (
trav): connectivity for path planning
The repository consists of three main lines:
- Multi-Session Mapping & Merging β
python/map_merge_pipeline.py,python/map_manager.py - Visual Localization β LiteVLoc submodule at
third_party/litevloc_code(github), performing global VPR β local matching β pose solving on the built map - Navigation & System Integration β global planning, pose fusion, and online ROS localization (within the LiteVLoc submodule)
- π― Structure-free Map: Lightweight graph-based map representation
- π Collaborative Localization: Global registration across sessions in large-scale environments
- π± Cross-Device: Works on various mobile platforms
- π Scalable & Lifelong: Automatic map maintenance
- πΊοΈ Multi-Session: Merge maps from different agents/times
| Time | Update |
|---|---|
| 2026/07 | π¦ Evaluation datasets released on Google Drive (map-free relocalization, VPR, and multi-session mapping; faces anonymized). See Testing Data. |
| 2026/07 | Full codebase released: multi-session mapping, submap merging, and benchmark. |
| Third-party libraries also published: | |
| β’ litevloc_code β visual localization (global VPR β local matching β pose solving) | |
| β’ pose_estimation_models β pose estimation | |
| β’ VPR-methods-evaluation β visual place recognition benchmarking | |
| β’ slam_trajectory_evaluation β trajectory evaluation | |
| β’ vismatch β visual matching | |
| 2026/01 | Paper submitted (Under Review). |
| 2025/05 | LiteVLoc accepted by ICRA 2025. |
- π Introduction
- π₯ News
- π οΈ Getting Started
- π¦ Testing Data
- π Documentation
- π Multi-Session Mapping Experiment
- π¬ Results Gallery
- π Known Issues
- π Citation
- π License
- π Acknowledgements
- π Contact
Create the workspace:
mkdir -p catkin_ws/src/
cd catkin_ws/src/Create conda environment:
conda create --name opennavmap python=3.8
conda activate opennavmapClone with submodules and set up environment (NVIDIA GeForce RTX 4090 and CUDA 11.8):
git clone --recurse-submodules https://github.com/RPL-CS-UCL/OpenNavMap.git
cd OpenNavMap
git remote set-url origin git@github.com:RPL-CS-UCL/OpenNavMap.git
conda install pytorch=2.0.1 torchvision=0.15.2 pytorch-cuda=11.8 numpy=1.24.3 -c pytorch -c nvidia
pip install -r requirements.txt
pip install -e third_party/vismatchNote:
third_party/litevloc_codeis a required submodule, not optional. It provides the core graph structures (image_graph.py,point_graph.py, etc.) and shared utility functions used directly by OpenNavMap. If you cloned without--recurse-submodules, rungit submodule update --init --recursivebefore proceeding. All scripts must setPYTHONPATHto include bothpython/andthird_party/litevloc_code/python/, e.g.:export PYTHONPATH=$(pwd)/python:$(pwd)/third_party/litevloc_code/python
Verify torch installation:
python test_torch_install.pyWe release all evaluation datasets used in the paper on Google Drive (a 19 km, multi-site, cross-device collection; all human faces are anonymized). Each released dataset corresponds to one experiment:
| Dataset | Paper experiment |
|---|---|
vpr_eval |
Topological localization |
map_free_eval |
Metric localization |
map_multisession_eval |
Multi-session map merging |
π Download from Google Drive
See Benchmark Evaluation for the full archive list, the small-subset quick start, download/extract commands, test-time (temporal/spatial) coverage, and how to run each benchmark. The map data format is documented in Instruction in Processing Dataset.
OpenNavMap:
- Instruction in Running Map Merging
- Instruction in Processing Dataset
- Benchmark Evaluation (datasets β experiments, how to run)
- Instruction in Data Collection (Project Aria)
LiteVLoc submodule (third_party/litevloc_code):
- Instruction in Running LiteVLoc with Offline Data
- Instruction in Running Visual Navigation with Simulated Matterport3d
- Instruction in Running Visual Navigation with Real Robots
Additional: 8. Repo Structure Guide
Run the multi-session mapping and submap-merging experiment on the released
map_multisession_eval data (see Testing Data):
conda activate opennavmap
bash scripts/run_map_merging.sh <SCENE> <ORDER> <METHOD> <POSE_EST> [IQA] [IG] [TD] [MAX_SUBMAPS]The pipeline incrementally aligns submaps into a globally consistent map (topological localization β metric localization β PGO β node culling) and reports the ATE against ground truth. See Instruction in Running Map Merging for the full argument reference, and Benchmark Evaluation for how each released dataset maps to a paper experiment.
Vineyard β outdoor multi-session map merging.
HKUST Campus β multi-session submaps aligned and merged into a unified topometric map.
UCL Campus β multi-session map merging across heterogeneous devices.
Overview of our self-collected dataset using multiple devices, spanning diverse environments over 3.5 months, 35 sequences, and 18.7km.
Multi-session mapping with heterogeneous devices across two regions.
Quadruped robot performing image-goal navigation in lab (left) and outdoor environments (right).
Issue: cannot import name 'cache' from 'functools'
Replace the original code with Link
from functools import lru_cache
@lru_cache(maxsize=None)
def xxxIssue: /lib/aarch64-linux-gnu/libp11-kit.so.0: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0 using cv_bridge
Change the
.so. Complete tutorial is shown here
rm /Rocket_ssd/miniconda3/envs/opennavmap/lib/libffi.so.7
ln -s /usr/lib/aarch64-linux-gnu/libffi.so.7 /Rocket_ssd/miniconda3/envs/opennavmap/lib/libffi.so.7rm /Rocket_ssd/miniconda3/envs/opennavmap/lib/libtiff.so.5
ln -s /usr/lib/x86_64-linux-gnu/libtiff.so.5 /Rocket_ssd/miniconda3/envs/opennavmap/lib/libtiff.so.5Issue: ImportError: /lib/aarch64-linux-gnu/libgomp.so.1: cannot allocate memory in static TLS block
Set this in the bash file:
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libgomp.so.1
If this work is helpful to your research, please consider citing OpenNavMap or our related works:
@article{jiao2025opennavmap,
title={OpenNavMap: Multi-Session Appearance-Based Topometric Mapping for Scalable Visual Navigation},
author={Jiao, Jianhao and Liu, Changkun and Yu, Jingwen and Liu, Boyi and Zhang, Qianyi and Wang, Yue and Kanoulas, Dimitrios},
journal={Under Review},
year={2025}
}@inproceedings{jiao2025litevloc,
title={LiteVLoc: Map-lite visual localization for image goal navigation},
author={Jiao, Jianhao and He, Jinhao and Liu, Changkun and Aegidius, Sebastian and Hu, Xiangcheng and Braud, Tristan and Kanoulas, Dimitrios},
booktitle={2025 IEEE International Conference on Robotics and Automation (ICRA)},
pages={5244--5251},
year={2025},
organization={IEEE}
}@article{wei2025fusionportablev2,
title={Fusionportablev2: A unified multi-sensor dataset for generalized slam across diverse platforms and scalable environments},
author={Wei, Hexiang and Jiao, Jianhao and Hu, Xiangcheng and Yu, Jingwen and Xie, Xupeng and Wu, Jin and Zhu, Yilong and Liu, Yuxuan and Wang, Lujia and Liu, Ming},
journal={The International Journal of Robotics Research},
volume={44},
number={7},
pages={1093--1116},
year={2025},
publisher={SAGE Publications Sage UK: London, England}
}This project is licensed under the MIT License - see the LICENSE file for details.
Supported by UKRI Future Leaders Fellowship [MR/V025333/1] (RoboHike), built by the Robot Perception and Learning Lab at UCL.
- Project Page: https://rpl-cs-ucl.github.io/OpenNavMap_page
- Contact: Jianhao Jiao (jiaojh1994@gmail.com), Prof. Dimitrios Kanoulas (d.kanoulas@ucl.ac.uk)








