Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1,127 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

OpenNavMap: Multi-Session Appearance-Based Topometric Mapping for Scalable Visual Navigation

License: MIT Webpage Paper GitHub Stars

OpenNavMap Concept

🏠 Introduction

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:

  1. Multi-Session Mapping & Merging β€” python/map_merge_pipeline.py, python/map_manager.py
  2. Visual Localization β€” LiteVLoc submodule at third_party/litevloc_code (github), performing global VPR β†’ local matching β†’ pose solving on the built map
  3. Navigation & System Integration β€” global planning, pose fusion, and online ROS localization (within the LiteVLoc submodule)

Highlights

  • 🎯 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

πŸ”₯ News

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.

πŸ“‹ Table of Contents


πŸ› οΈ Getting Started

Requirements

Create the workspace:

mkdir -p catkin_ws/src/
cd catkin_ws/src/

Create conda environment:

conda create --name opennavmap python=3.8
conda activate opennavmap

Clone 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/vismatch

Note: third_party/litevloc_code is 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, run git submodule update --init --recursive before proceeding. All scripts must set PYTHONPATH to include both python/ and third_party/litevloc_code/python/, e.g.:

export PYTHONPATH=$(pwd)/python:$(pwd)/third_party/litevloc_code/python

Verify torch installation:

python test_torch_install.py

πŸ“¦ Testing Data

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


πŸ“š Documentation

OpenNavMap:

  1. Instruction in Running Map Merging
  2. Instruction in Processing Dataset
  3. Benchmark Evaluation (datasets ↔ experiments, how to run)
  4. Instruction in Data Collection (Project Aria)

LiteVLoc submodule (third_party/litevloc_code):

  1. Instruction in Running LiteVLoc with Offline Data
  2. Instruction in Running Visual Navigation with Simulated Matterport3d
  3. Instruction in Running Visual Navigation with Real Robots

Additional: 8. Repo Structure Guide


πŸ“Š Multi-Session Mapping Experiment

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.


🎬 Results Gallery

Multi-Session Map Merging

Vineyard Map Merging

Vineyard β€” outdoor multi-session map merging.

HKUST Campus Map Merging

HKUST Campus β€” multi-session submaps aligned and merged into a unified topometric map.

UCL Campus Map Merging

UCL Campus β€” multi-session map merging across heterogeneous devices.

Dataset

Dataset

Overview of our self-collected dataset using multiple devices, spanning diverse environments over 3.5 months, 35 sequences, and 18.7km.

Multi-Session Mapping

HKUST Campus UCL Campus

Multi-session mapping with heterogeneous devices across two regions.

Real-World Image-Goal Navigation

VNav Lab VNav Outdoor

Quadruped robot performing image-goal navigation in lab (left) and outdoor environments (right).


πŸ› Known Issues

Issue: cannot import name 'cache' from 'functools'

Replace the original code with Link

from functools import lru_cache
@lru_cache(maxsize=None)
    def xxx

Issue: /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.7
rm /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.5

Issue: 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


πŸ”— Citation

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

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


πŸ‘ Acknowledgements

Supported by UKRI Future Leaders Fellowship [MR/V025333/1] (RoboHike), built by the Robot Perception and Learning Lab at UCL.


πŸ“ž Contact

About

OpenNavMap: Multi-Session Appearance-Based Topometric Mapping for Scalable Visual Navigation

Resources

Stars

57 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages