← 开源
VSLAM-LAB

VSLAM-LAB

A Comprehensive Framework for Visual SLAM Systems and Datasets

Model DevelopmentDataset engineeringPhysical AIPython
在 GitHub 打开
增长势头
+024 小时新增 Star0.0%
562
Star
74
Fork
+3
本周
13
贡献者
创建于 2024-07-13 · 更新于 2026-10-15 · 今日第 16908 名
主要开发者
README
 ![](docs/header.png) 

A Comprehensive Framework for Visual SLAM Baselines and Datasets

[Alejandro Fontan](https://scholar.google.com/citations?user=SDtnGogAAAAJ&hl=en)
·
[Tobias Fischer](https://scholar.google.com/citations?user=eq46ylAAAAAJ&hl=en)
·
[Nicolas Marticorena](https://nmarticorena.github.io/)





 [Somayeh Hussaini](https://www.linkedin.com/in/somayeh-hussaini/?originalSubdomain=au)
·
 [Ted Vanderfeen ](https://github.com/TedVanderfeen)
·
 [Beverley Gorry ](https://scholar.google.com/citations?hl=es&user=s3eIy0YAAAAJ)
·
[Javier Civera](https://scholar.google.com/citations?user=j_sMzokAAAAJ&hl=en)
·
[Michael Milford](https://scholar.google.com/citations?user=TDSmCKgAAAAJ&hl=en)

Introduction

VSLAM-LAB is designed to simplify the development, evaluation, and application of Visual SLAM (VSLAM) systems. This framework enables users to compile and configure VSLAM systems, download and process datasets, and design, run, and evaluate experiments — all from a single command line!

Why Use VSLAM-LAB?

  • Unified Framework: Streamlines the management of VSLAM systems and datasets.
  • Ease of Use: Run experiments with minimal configuration and single command executions.
  • Broad Compatibility: Supports a wide range of VSLAM systems and datasets.
  • Reproducible Results: Standardized methods for evaluating and analyzing results.

Getting Started

To ensure all dependencies are installed in a reproducible manner, we use the package management tool pixi. If you haven't installed pixi yet, please run the following command in your terminal:

curl -fsSL https://pixi.sh/install.sh | bash

After installation, restart your terminal or source your shell for the changes to take effect. For more details, refer to the pixi documentation.

If you already have pixi remember to update: pixi self-update

Clone the repository and navigate to the project directory:

git clone https://github.com/VSLAM-LAB/VSLAM-LAB.git && cd VSLAM-LAB

Quick Demo

You can now execute any baseline on any sequence from any dataset within VSLAM-LAB using the following command:

pixi run demo    

For a full list of available systems and datasets, see the VSLAM-LAB Supported Baselines and Datasets. Example commands:

pixi run demo mast3rslam eth table_3 mono
pixi run demo droidslam rgbdtum rgbd_dataset_freiburg1_xyz rgbd
pixi run demo orbslam2 kitti 04 stereo
pixi run demo pycuvslam euroc MH_01_easy stereo-vi

To change the paths where VSLAM-LAB-Benchmark and/or VSLAM-LAB-Evaluation data are stored (for example, to /media/${USER}/data), use the following commands:

pixi run set-benchmark-path /media/${USER}/data
pixi run set-evaluation-path /media/${USER}/data

Configure your own experiments

With VSLAM-LAB, you can easily design and configure experiments using a YAML file and run them with a single command. To run the experiment demo, execute the following command:

pixi run vslamlab configs/exp_vslamlab.yaml              # resumes: runs already done are kept
pixi run vslamlab configs/exp_vslamlab.yaml --overwrite  # deletes the previous results first
VSLAMLAB_HEADLESS=1 pixi run vslamlab configs/exp_vslamlab.yaml  # unattended: figures are saved, no plot windows open

Experiments in VSLAM-LAB are sequences of entries in a YAML file (see example configs/exp_vslamlab.yaml):

exp_demo_droidslam:
  Config: config_vslamlab.yaml               # YAML file containing the sequences to be run
  NumRuns: 1                                 # Maximum number of executions per sequence
  Parameters: {verbose: 1, rgb_idx: [0,250]} # Vector with parameters that will be input to the baseline executable
  Module: droidslam                          # droidslam/monogs/orbslam2/mast3rslam/dpvo/...

exp_demo_orbslam2:
  Config: config_vslamlab.yaml
  NumRuns: 1
  Parameters: {verbose: 1, rgb_idx: [0,250]}
  Module: orbslam2

exp_demo_colmap:
  Config: config_vslamlab.yaml
  NumRuns: 1
  Parameters: {verbose: 1, rgb_idx: [0,250], matcher_type: exhaustive, matching_type: aliked_lightglue}  # baseline-specific keys: see Baselines/colmap/README.md
  Module: colmap

Frame selection: Parameters also accepts four optional flags to control which RGB frames of a sequence are fed to the baseline. They are independent and stack in this order — rgb_idx slices the frame range first, rgb_step then keeps 1 frame every n of what remains, rgb_max truncates that result to at most that many frames, and rgb_vpr finally downsamples to at most that many frames by visual dissimilarity (VPR) rather than a fixed stride, so visually redundant frames are dropped preferentially. If none are set, every frame of the sequence is used.

Parameter Effect
rgb_idx: [start, end] Keep only frames start..end (inclusive)
rgb_step: n Keep 1 frame every n frames of what remains
rgb_max: n Truncate the result to at most n frames
rgb_vpr: n Downsample the result to at most n frames, chosen by VPR dissimilarity - computes the sequence's VPR distance matrix via pixi run vpr first if it isn't already cached
exp_vslamlab:
  Config: config_vslamlab.yaml
  NumRuns: 1
  Parameters: {verbose: 1, rgb_idx: [0, 250], rgb_step: 3, rgb_max: 50, rgb_vpr: 30}
  Module: droidslam

Config files are YAML files containing the list of sequences to be executed in the experiment (see example configs/config_vslamlab.yaml):

eth:
- table_3

rgbdtum:
- 'rgbd_dataset_freiburg1_xyz'

For a full list of available VSLAM systems and datasets, refer to the section VSLAM-LAB Supported Baselines and Datasets.

VSLAM-LAB Pipeline Commands

In addition to running the full automated pipeline, VSLAM-LAB provides modular commands to interact directly with datasets and baselines. For a comprehensive list of all available commands consult Wiki: Command-line Interface

pixi run install-baseline                      # Example: pixi run install-baseline droidslam
pixi run download-sequence            # Example: pixi run download-sequence eth table_3
pixi run run-exp                               # Example: pixi run run-exp configs/exp_vslamlab.yaml
pixi run evaluate                              # Example: pixi run evaluate configs/exp_vslamlab.yaml
pixi run compare                               # Example: pixi run compare configs/exp_vslamlab.yaml
pixi run rerun-vis                    # Example: pixi run rerun-vis eth table_3 (Rerun viewer of a sequence)

Run a VSLAM system online from an iPhone

The ARStream app streams RGB, intrinsics and ARKit's pose from an iPhone over USB or Wi-Fi. record-iphone turns a recording into a sequence of the iphone dataset (see the Tools table); stream-iphone relays the live stream over ZeroMQ so any number of subscribers (a baseline's execute-mono-stream, the viewer, your own Python/C++ code) consume it at once:

pixi run stream-iphone --run orbslam3-dev                # relay + ORB-SLAM3-DEV (or orbslam2-dev) online in one go: Ctrl-C stops the stream, the baseline saves ../VSLAM-LAB-Evaluation/stream_orbslam3-dev/00000_KeyFrameTrajectory.csv
pixi run stream-iphone --run orbslam3-dev --view         # ... plus the Rerun viewer as another subscriber (--duration 30, --verbose 0, --exp-folder  are also available)
pixi run stream-iphone --run orbslam2 --mode rgbd        # LiDAR phone: RGB-D online with ARKit's depth (orbslam2/orbslam3 and their -dev variants), results in ../VSLAM-LAB-Evaluation/stream_orbslam2_rgbd
pixi run stream-iphone                                   # relay only: phone over USB (or --wifi / --host ) -> tcp://*:5556, writes ../VSLAM-LAB-Benchmark/IPHONE/stream/calibration.yaml from the first frame
pixi run view-iphone --sub                               # the Rerun viewer as a subscriber
pixi run execute-mono-stream stream_url:tcp://localhost:5556 calibration_yaml: exp_folder: settings_yaml:vslamlab_orbslam3-dev_settings.yaml   # a baseline's stream entry point by hand (runs inside Baselines/ORB-SLAM3-DEV)

Subscribers keep only the newest frame by default, so a system slower than the stream skips frames instead of lagging; the relay sends an end-of-stream message when it stops and the baseline then saves its KeyFrameTrajectory.csv as usual. A baseline joins --run by providing an execute--stream entry point taking stream_url: instead of sequence_path:/rgb_csv: (see BaselineVSLAMLAB.build_stream_command). Writing a subscriber: arstream.Subscriber (Python) or arstream/arstream.hpp (C++, conda package libarstream), see the ARStream README.

Add a new VSLAM Dataset

Expand the evaluation suite by integrating custom datasets. If you're using Claude Code, run the add-dataset skill (/add-dataset ) to walk through the full workflow end to end. Otherwise, follow the instructions in Wiki: Integrate a new VSLAM Dataset.

Add a new VSLAM Baseline

Incorporate new algorithms into the framework. Follow the guide in Wiki: Integrate a new VSLAM Baseline. Benchmark your method against state-of-the-art baselines across all supported datasets.

For a reference implementation, see the VGGT-SLAM integration in commit 259f7ae.

License

VSLAM-LAB is released under a LICENSE.txt. For a list of code dependencies which are not property of the authors of VSLAM-LAB, please check docs/Dependencies.md.

Citation

If you're using VSLAM-LAB in your research, please cite:

@INPROCEEDINGS{fontan2025vslam,
  author={Fontan, Alejandro and Fischer, Tobias and Civera, Javier and Milford, Michael},
  booktitle={2025 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)},
  title={VSLAM-LAB: A Comprehensive Framework for Visual SLAM Methods and Datasets},
  year={2025},
  volume={},
  number={},
  pages={9013-9020},
  keywords={Visualization;Simultaneous localization and mapping;Robot vision systems;Standardization;Benchmark testing;Programming;Reproducibility of results;Intelligent robots;Faces;Software development management},
  doi={10.1109/IROS60139.2025.11247218}
}

VSLAM-LAB Supported Baselines and Datasets

For full per-dataset details — license, access requirements, and publication/BibTeX citation — see Datasets/extra-files/dataset_table.xlsx.

Baselines System Modes License Label Conda Pkg Camera Models
AllFeature-VSLAM VSLAM mono rgbd GPLv3 allfeature ✅ pinhole radtan4 radtan5
VGGT-SLAM 2.0 VSLAM mono BSD-2 vggtslam ✅ pinhole
MASt3R-SLAM VSLAM mono CC BY-NC-SA 4.0 mast3rslam ✅ pinhole radtan4 radtan5
DPVO VSLAM mono License dpvo ✅ pinhole radtan4 radtan5
DROID-SLAM VSLAM mono rgbd stereo BSD-3 droidslam ✅ pinhole radtan4 radtan5
ORB-SLAM2 VSLAM mono rgbd stereo GPLv3 orbslam2 ✅ pinhole radtan4 radtan5
MonoGS VSLAM mono rgbd License monogs-dev ➖ pinhole radtan4 radtan5
---------- ------- ------- ---------- -------- --- ----------
PyCuVSLAM VSLAM rgbd stereo(-vi) NVIDIA pycuvslam ➖ pinhole radtan4 radtan5 equid4
ORB-SLAM3 VSLAM mono(-vi) rgbd(-vi) stereo(-vi) GPLv3 orbslam3 ✅ pinhole radtan4 radtan5 equid4
OKVIS2 VSLAM mono-vi BSD-3 okvis2 ✅ pinhole radtan4 radtan5 radtan8 equid4
---------- ------- ------- ---------- -------- --- ----------
COLMAP
matching_type: SIFT · ALIKED · LoMa features with brute-force or learned matchers · mapper_type: colmap · glomap · dense: 1 with mesher: delaunay · poisson · advancing_front — reference SfM mono BSD colmap ✅ pinhole radtan4 radtan5 radtan8 equid4 unknown
Depth Anything 3 Feed-forward mono Apache-2.0 (giant/nested weights CC BY-NC 4.0) da3 ➖ pinhole
DA3-Streaming VSLAM mono Apache-2.0 da3-streaming ➖ pinhole
MapAnything
module: VGGT · VGGT-Ω · π³ · DUSt3R · MASt3R · MUSt3R · Pow3R (mono, each under its own license) Feed-forward mono rgbd Apache-2.0 (default weights CC BY-NC 4.0) mapanything ➖ pinhole

[!NOTE] -dev variants: orbslam2-dev, orbslam3-dev, droidslam-dev, dpvo-dev, mast3rslam-dev, vggtslam-dev, allfeature-dev, okvis2-dev and monogs-dev clone the baseline's source into Baselines/-DEV/ and build it locally instead of installing the conda package, with the same modes and camera models - use them to modify a baseline. monogs-dev exists only in this form.

Label

Features

Summary

Modes

Camera Models

🏠 Indoor datasets

7scenes

📸🏠🤳

Tracked RGB-D Kinect frames from seven indoor scenes, for camera...

mono rgbd

pinhole

aria-digital-twin

📸🏠🥽

Aria Digital Twin (ADT) - egocentric dataset captured with Meta's Project Aria...

mono(-vi) stereo(-vi) rgbd(-vi)

pinhole

bonn-rgbd

📸🏠🤳

Bonn RGB-D Dynamic Dataset - 24 highly dynamic indoor RGB-D sequences (people...

mono rgbd

radtan5

eth

📸🏠🤳

ETH3D SLAM & Stereo Benchmarks

mono rgbd

pinhole

minimal

📸🏠🤳

Minimal Texture Dataset for RGB-D SLAM - RealSense D435i RGB-D sequences over...

mono rgbd

pinhole

monotum

📸🏠🏞️🤳

Photometrically calibrated monocular visual odometry benchmark with 50...

mono

pinhole

msd

📸🏠🥽

Monado SLAM Dataset - Valve Index

mono(-vi) stereo(-vi)

equid4

newer-college-stereo-vi

📸🏞️🤳

The Newer College Dataset (stereo-inertial collection) - handheld RealSense...

mono(-vi) stereo(-vi)

radtan4

openloris-d400

📸🏠🤳

OpenLORIS-Scene - real-world lifelong SLAM dataset from real robots in real...

mono(-vi) rgbd(-vi)

pinhole

openloris-t265

📸🏠🤳

OpenLORIS-Scene - real-world lifelong SLAM dataset from real robots in real...

mono(-vi) stereo(-vi)

equid4

rgbdtum

📸🏠🤳

RGB-D SLAM benchmark with motion-capture ground-truth trajectories

mono rgbd

radtan5

rvp-handheld

📸🏞️🤳

VBR - A Vision Benchmark in Rome (hand-held sequences) - hardware-synced stereo...

mono(-vi) stereo(-vi)

radtan4

vitum

📸🏠🏞️🤳

TUM Visual-Inertial Dataset - stereo fisheye and IMU sequences from a handheld...

mono(-vi) stereo(-vi)

equid4

💻 Synthetic datasets

drunkards

💻🏠🤳

The Drunkard's Dataset - synthetic RGB-D exploratory camera trajectories with...

mono rgbd

pinhole

endomapper-sim

💻🫀🤳

EndoMapper simulated colon - photorealistic VR-Caps renders of a CT-derived...

mono rgbd

pinhole

nuim

💻🏠🤳

ICL-NUIM RGB-D benchmark with ground-truth trajectories and 3D models for...

mono rgbd

pinhole

replica

💻🏠🤳

Photorealistic 3D indoor scene reconstructions (Replica), with RGB-D SLAM...

mono rgbd

pinhole

tartanair

💻🏞️🤳

Large-scale photorealistic simulation dataset with multimodal ground truth for...

mono

pinhole

tartanair-train

💻🏠🏞️🤳

TartanAir training split - photorealistic simulated stereo+depth sequences over...

mono stereo rgbd

pinhole

🚗 Vehicle datasets

kitti

📸🏞️🚗

KITTI Odometry Benchmark with stereo image sequences and ground-truth poses for...

mono stereo

pinhole

malaga

📸🏞️🚗

The Malaga Urban Dataset - high-rate rectified stereo images from a car driven...

mono stereo

pinhole

nsavp

📸🏞️🚗

Novel Sensors for Autonomous Vehicle Perception - stereo thermal, event,...

mono stereo

radtan4

rvp-car

📸🏞️🚗

VBR - A Vision Benchmark in Rome (car sequences) - hardware-synced stereo...

mono(-vi) stereo(-vi)

radtan4

🚁 UAV datasets

euroc

📸🏞️🚁

EuRoC MAV visual-inertial dataset with stereo images, IMU, and ground-truth...

mono(-vi) stereo(-vi)

radtan4

uzh-fpv

📸🏠🏞️🚁

UZH-FPV Drone Racing Dataset - aggressive quadrotor flight sequences from an...

mono(-vi) stereo(-vi)

equid4

🤖 Robot datasets

blt

📸🏞️🤖

BACCHUS Long-Term (BLT) dataset - a Thorvald II robot driving the same 500 m...

mono rgbd

pinhole

fomo

📸🏞️🤖

FoMo (Forêt Montmorency) - a Clearpath Warthog UGV repeating six on-road,...

mono(-vi) stereo(-vi)

pinhole

grandtour-alphasense

📸🏠🏞️🤖

GrandTour (Alphasense rig) - 48 ANYmal-D quadruped missions across alpine,...

mono(-vi) stereo(-vi)

equid4

grandtour-zed2i

📸🏠🏞️🤖

GrandTour (ZED2i rig) - 47 ANYmal-D quadruped missions across alpine, forest,...

mono stereo

radtan4

rover-d435i

📸🏞️🤖

ROVER: A Multiseason Dataset for Visual SLAM

mono rgbd(-vi)

radtan4

rover-picam

📸🏞️🤖

ROVER: A Multiseason Dataset for Visual SLAM

mono

equid4

rover-t265

📸🏞️🤖

ROVER: A Multiseason Dataset for Visual SLAM

mono(-vi) stereo(-vi)

equid4

ut-coda

📸🏞️🤖

The UT Campus Object Dataset (CODa) - egocentric robot perception dataset...

mono stereo

radtan5

vector

📸🏠🤳🤖

VECtor - a versatile event-centric benchmark for multi-sensor SLAM, with a...

mono(-vi) stereo(-vi)

radtan4

🏗️ Construction Site datasets

hilti2022

📸🏠🏞️🏗️🤳

Hilti-Oxford SLAM Challenge 2022 - multi-camera, IMU and lidar dataset for SLAM...

mono(-vi) stereo(-vi)

equid4

hilti2026

📸🏠🏞️🏗️🤳

Hilti x Trimble 360 Visual-Inertial SLAM Challenge 2026 - construction-site...

mono(-vi)

equid4

🪐 Planetary-analog Terrain datasets

madmax

📸🏞️🪐🤳

The MADMAX data set for visual-inertial rover navigation on Mars

mono(-vi) stereo(-vi)

pinhole

s3li-etna

📸🏞️🪐🤳

S3LI Etna - the DLR Planetary Stereo, Solid-State LiDAR, Inertial dataset,...

mono(-vi) stereo(-vi)

pinhole

s3li-vulcano

📸🏞️🪐🤳

S3LI Vulcano - a multi-modal (RGB stereo, solid-state LiDAR, inertial) dataset...

mono(-vi) stereo(-vi)

pinhole

🌊 Underwater datasets

ariel

📸🏠🏞️🌊🤖

Multi-Camera Underwater Visual-Inertial Dataset - a BlueROV2-based platform...

mono(-vi) stereo(-vi)

equid4

caves

📸🏞️🌊

Underwater Caves Sonar and Vision Data Set - a diver-guided AUV exploration of...

mono

pinhole

eiffel-tower

📸🏞️🌊🤖

Deep-sea hydrothermal vent imagery from four ROV Victor6000 survey campaigns...

mono

radtan4

pamir

📸🌊🤳

Multi-session visual-inertial SLAM dataset of the Pamir shipwreck (Barbados),...

mono(-vi)

unknown

pamir-rig

📸🌊🤳

Multi-session visual-inertial SLAM dataset of the Pamir shipwreck (Barbados),...

mono(-vi) stereo(-vi)

unknown

sesoko

📸🏞️🌊

AUV (TUNA-SAND) coral-reef mapping surveys off Sesoko Island, Okinawa, Japan...

mono

unknown

soneva

📸🏞️🌊🤳

Coral reef time-series photogrammetry (Maldives), from Soneva Conservation and...

mono

pinhole

sweetcorals

📸🏞️🌊🤳

Coral reef 3D photogrammetry (Indonesia), from Wildflow

mono

pinhole unknown

🫀 Intracorporeal datasets

endomapper

📸🫀🤳

EndoMapper - 93 complete calibrated colonoscopy and gastroscopy procedures...

mono

equid4 unknown

hamlyn

📸🫀🤳

Hamlyn rectified stereo endoscopy dataset with depth ground truth, from...

mono rgbd stereo

pinhole

Tools Features Label Modes Camera Models
Stray Scanner App 📸🤳 strayscanner mono rgbd pinhole
Pupil Labs Neon 📸🥽 pupil-labs mono(-vi) pinhole
Local video files 📸 videos mono pinhole unknown
YouTube videos
add one with the add-youtube-video skill 📸 youtube mono pinhole radtan4 unknown
iPhone (ARStream app)
record one with pixi run record-iphone [] (USB or --wifi); ARKit's VIO pose as groundtruth 📸🤳 iphone mono pinhole
iPhone with LiDAR (ARStream app)
pixi run record-iphone --lidar []; ARKit's sceneDepth (256×192, confidence-masked, upsampled to the RGB size) as depth_0 📸🤳 iphone-lidar mono rgbd pinhole

Real / Synthetic : 📸 / 💻

Indoor / Outdoor / Underwater / Intracorporeal : 🏠 / 🏞️ / 🌊 / 🫀

Handheld / Headmounted / Vehicle / UAV / Robot : 🤳 / 🥽 / 🚗 / 🚁 / 🤖

Section dividers only (not per-row features) — Construction Site / Planetary-analog Terrain : 🏗️ / 🪐

排名相邻
同类项目