Skip to content
mit-aclPublic

About

Meridian is package for localizing a ground robot from aerial ortho-imagery, providing meter-level pose estimates without any initial pose information or environmental fine-tuning.

Resources

Stars

21 stars

Watchers

1 watching

Forks

Latest commit

 

History

405 Commits

Folders and files

Repository files navigation

Meridian: Metric-Semantic Primitive Matching for Cross-View Geo-Localization Beyond Urban Environments

Meridian is an algorithm for localizing a ground robot from aerial ortho-imagery, providing meter-level pose estimates without any initial pose information or environmental fine-tuning. To do this, sparse point and line primitives are matched across aerial and ground views, and robust pose graph optimization is employed to find a set of consistent pose measurements over time.

Currently, meridian exists as a stand-alone Python package (with heavy computation implemented in C++ or using GPU via PyTorch). A ROS2 wrapper is coming soon!

This repo contains instructions for running the Meridian pipeline on our self-collected datasets. For now, we have a small sampler for use as a demo, but our full cross-view geo-localization "Camp Dataset" will be released soon.

demo

Citation

If you find this repo useful in your work, please cite our paper:

M. Peterson, Q. Li, Y. Jia, F. Cladera, C. Nieto-Granda, C.J. Taylor, and J.P. How, "Meridian: Metric-Semantic Primitive Matching for Cross-View Geo-Localization Beyond Urban Environments," arXiv preprint arXiv:2606.06312, 2026.

@inproceedings{peterson2025roman,
  title={Meridian: Metric-Semantic Primitive Matching for Cross-View Geo-Localization Beyond Urban Environments},
  author={Peterson, Mason and Qingyuan, Li and Jia, Yixuan and Cladera, Fernando and Nieto-Granda, Carlos and Taylor, Camillo Jose and How, Jonathan P},
  journal={arXiv preprint arXiv:2606.06312},
  year={2026}
}

Install

We recommend using this repo with a Python virtual environment. This software has been tested with Python 3.12 on Ubuntu 24.04.

Prerequisites include CMake, g++, Eigen, python3-dev, and OpenBLAS. If these are not currently installed, run

sudo apt install cmake build-essential libeigen3-dev python3-dev libopenblas-dev

To install Meridian, clone and cd into this repo, activate your environment, and run

source ./install/install.sh

After installation, set the following environment variable in your bashrc or zshrc:

export MERIDIAN_WEIGHTS=<path to meridian repo>/weights

Place recognition weights

Weights ship in third_party/vpr/weights/; $VPR_CKPT overrides with another file.

frame_descriptor bundled weights notes
meridian-vpr cvmnet_k64.pt default; trained for this task
anyloc anyloc_c_centers.pt AnyLoc's urban l31_value_c32 vocabulary
dino-gem — no weights, weakest on large maps

meridian-vpr is a two-tower NetVLAD head trained on VIGOR and CVUSA cross-view pairs, over the frozen DINOv2 ViT-G/14 layer-31 value facet AnyLoc also uses. The checkpoint carries its backbone and head configs, so it is the whole model. From the vpr submodule:

git submodule update --init third_party/vpr
pip install -e third_party/vpr

To switch backends, set segmenter.frame_descriptor and aerial_segmenter.frame_descriptor to the same value.

cross_view_place_recognition.comparison picks what is compared: image (default) uses the frame descriptors, semantic-point-line uses segment cos_features.

Pipeline Demo

Once installed, the full pipeline can be run on our experimental data.

Data Set Up

To make this as easy as possible, we host an aerial image and a minimal ROS bag for use in running our pipeline.

To download the data run (will download ~8 GB):

source ./install/download_demo_data.sh <desired output directory>

Running Pipeline

Next, set an environment variable pointing to Meridian weights and demo data:

export MERIDIAN_WEIGHTS=<path to this repo>/weights
export MERIDIAN_DEMO_DATA=<path to demo data>

Then, the meridian demo can be run with (from the root of the meridian repo)

python3 -m meridian.pipeline.cross_view_incremental \
  -p ./cfg/demo.yaml \
  -o ./demo_output/ \
  -m --live

The -m and --live commands can be removed to run the demo without the visulization which greatly reduces the run-time.

Acknowledgements

This research is supported by ARL DCIST under Cooperative Agreement Number W911NF-17-2-0181 and DSTA.

Portions of this software were written using Claude Code.

About

Meridian is package for localizing a ground robot from aerial ortho-imagery, providing meter-level pose estimates without any initial pose information or environmental fine-tuning.

Resources

Stars

21 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages