@article{wang2026amb3rslam,
title={AMB3R-SLAM: Kilometer-scale SLAM with Hierarchical Backend},
author={Wang, Hengyi and Agapito, Lourdes},
journal={arXiv preprint arXiv:2609.19518},
year={2026}
}1. Clone the repository
git clone https://github.com/HengyiWang/amb3r-slam.git
cd amb3r-slam2. Create a conda environment
conda create -n amb3r-slam python=3.9 -y
conda activate amb3r-slam
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 # match your CUDA
pip install -r requirements.txt
bash thirdparty/build.sh 3. Download weights
bash checkpoints/download.sh # WITH_SALAD=1 for the SALAD checkpointThis fetches DA3NESTED-GIANT-LARGE-1.1, DA3-SMALL and ORBvoc.txt into ./checkpoints/ (plus dino_salad.ckpt with WITH_SALAD=1). --model_name omega also needs checkpoints/vggt_omega_1b_512.pt.
python run.py --dataset demo --data_path <path-to-image-folder> --save_mapResults are written to outputs/demo_mono_<model>/:
traj_<folder>.npz: the trajectory, one camera-to-world pose per framemap_<folder>.ply: a coloured point cloud of the map, every pixel (with--save_map)map_<folder>_stride.ply: the same map at one pixel in--pixel_stridealong each axis (with--save_map)
--pixel_stride n: the pixel stride of the_stridecloud (default 4)--save_every n: keep one of every n mapped frames (default 2)--map_max_points n: cap the size of the cloud--fps r: the capture rate, if the frames were captured below 10 Hz, please specify it to avoid submap geometry issues (default 10 Hz)--stride n: keep every n-th frame
We keep the command used for each dataset:
bash scripts/run_eval.sh [DATASET ...]You can run each individual dataset like:
# monocular
python run.py --dataset tum --data_path $TUM
python run.py --dataset kitti --data_path $KITTI
# RGB-D / stereo
python run.py --dataset tum --data_path $TUM --sensor rgbd
python run.py --dataset kitti --data_path $KITTI --sensor stereo
# LiDAR
python run.py --dataset kitti --data_path $KITTI --sensor lidar
python run.py --dataset vbr --data_path $VBR --sensor lidar--sensor rgbd|stereo|lidar: the input modality (default monocular)--model_name omega: use VGGT-Ω instead of Depth Anything 3--calib: give the dataset's intrinsics to the system. It runs uncalibrated otherwise
The AMB3R-SLAM pipeline (everything outside thirdparty/) is released under the Apache License 2.0. The third-party packages under thirdparty/ and the model weights are not covered by it; please follow the license of each one respectively.
Our code builds upon several amazing open-source projects:
- Models: AMB3R, Depth Anything 3, VGGT-Ω
- Loop retrieval & matching: DBoW2, DPV-SLAM, SALAD, MegaLoc, ALIKED
- LiDAR & evaluation: KISS-ICP, evo
We sincerely thank the authors for their open-source contributions!
If you find our code or paper useful, please consider citing:
@article{wang2026amb3rslam,
title={AMB3R-SLAM: Kilometer-scale SLAM with Hierarchical Backend},
author={Wang, Hengyi and Agapito, Lourdes},
journal={arXiv preprint arXiv:2609.19518},
year={2026}
}