Skip to content

adityamwagh/SuperSLAM

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

129 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SuperSLAM: Accurate Real-Time SLAM with Deep Learned Features

Alpha software.

SuperSLAM is a real-time stereo and RGB-D visual SLAM system. SuperPoint detects features and LightGlue matches them on a TensorRT FP16 backend, with a GTSAM optimization core and pose-graph loop closure.

Results

Run on an NVIDIA RTX PRO 1000 (Blackwell, laptop, 8 GB) with an Intel Core Ultra 5 235H, TensorRT 10.11, CUDA 12.9, FP16. fps is the per-frame tracking rate (front-end plus window smoother); every sequence runs above its camera rate (KITTI 10 Hz, EuRoC 20 Hz, TUM 30 Hz). ATE is SE3-aligned RMSE. Per-sequence trajectory plots are in PLOTS.md.

KITTI (stereo, window 10)

seqATE RMSE (m)ATE mean (m)RPE RMSE (m)t_rel (%)r_rel (deg/m)fps
001.5821.2380.3980.760.003479
01375.893340.7712.60746.100.032248
027.9085.9450.3951.020.003471
032.2911.6870.2904.660.015379
040.6460.5750.1210.720.001272
054.1872.7190.4381.190.004671
062.2221.9540.4681.560.007968
0715.8578.4213.9356.510.035677
086.9465.8970.2861.340.004773
093.9913.6260.0951.800.006571
102.1131.7450.0890.790.006378

Sequence 01 is the highway: distant features give no parallax, scale drifts, and the run diverges (a known failure for feature SLAM).

EuRoC (stereo)

seqATE RMSE (m)ATE mean (m)ATE max (m)RPE RMSE (m)fps
MH_01_easy0.0590.0480.2250.910145
MH_02_easy0.0670.0620.1330.84887
MH_03_medium0.1040.0920.2571.15523
MH_04_difficult0.2530.2430.4161.18744
MH_05_difficult0.0900.0700.6081.126158
V1_01_easy0.1020.0940.1840.913182
V1_02_medium0.0680.0620.1610.998158
V1_03_difficult0.1260.1030.5850.890173
V2_01_easy0.0930.0790.3000.697162
V2_02_medium0.1290.1100.4050.892122
V2_03_difficultdiverged186

TUM RGB-D

Standard

seqATE RMSE (m)ATE mean (m)ATE max (m)RPE RMSE (m)fps
fr1_desk0.0790.0670.1710.06864
fr2_xyz0.0130.0120.0450.025141
fr3_long_office_household0.0440.0410.1040.027179

Dynamic (moving people)

seqATE RMSE (m)ATE mean (m)ATE max (m)RPE RMSE (m)fps
fr3_sitting_static0.0300.0220.0800.017119
fr3_sitting_xyz0.0600.0530.1710.074112
fr3_sitting_rpy0.0700.0420.3810.096111
fr3_sitting_halfsphere0.0880.0660.3080.128107
fr3_walking_static0.2660.1830.8930.49487
fr3_walking_halfsphere0.4360.3601.2320.52191
fr3_walking_xyz0.5250.3741.4920.49477
fr3_walking_rpy0.6820.5701.3370.55088

Low-motion (sitting) sequences hold; high-motion (walking) sequences degrade, as for any feature SLAM without explicit dynamic-object handling.

TartanAir (stereo)

seqATE RMSE (m)ATE mean (m)RPE RMSE (m)fps
P0000.2250.1851.425165
P0010.5750.5511.300154
P0020.2170.1331.524147
P0030.0680.0611.698145
P0040.0980.0751.698141
P0050.6050.4361.247139
P0060.8130.6371.937157

The KITTI segment metric (t_rel) is undefined here: TartanAir trajectories are too short for the 100-800 m segments.

TartanGround (stereo)

seqATE RMSE (m)ATE mean (m)RPE RMSE (m)t_rel (%)fps
P00002.5821.9341.50520.5898
P00010.2900.2381.40822.36115
P00021.3461.1341.48424.82109
P00030.4000.2541.44417.73127
P00040.9690.8211.55216.9896

Quick start

Install the command-line tools (Ubuntu):

sudo apt install git make docker.io nvidia-container-toolkit gh
curl -LsSf https://astral.sh/uv/install.sh | sh        # uv, the Python tool runner

Then, from a fresh clone on a machine with an NVIDIA GPU:

make build-image-tensorrt10                                        # container (Ubuntu 24.04, TensorRT 10)
uv run python scripts/models/download_onnx_engine_superpoint.py    # prebuilt ONNX models (~90 MB)
uv run python scripts/models/download_onnx_engine_lightglue.py
uv run python scripts/models/download_onnx_engine_eigenplaces.py
make build-engines-tensorrt10                                      # TensorRT engines for this GPU
make build-superslam                                               # compile SuperSLAM

uv run python scripts/datasets/download_kitti.py --out ~/datasets/kitti
make run-superslam-kitti                                           # writes results/kitti/00.txt
make evaluate-superslam-kitti                                      # ATE and RPE

make help lists every target. Every Python step runs through uv, which builds a throwaway environment, so nothing is installed globally.

conda or pipx, Docker Compose version, bare-metal dependencies

uv via conda or pipx:

conda install -c conda-forge git make gh uv
pipx install uv

Docker Compose v2 2.30 or newer is required for the gpus: key in compose.yaml. Check with docker compose version. On an older Compose, edit compose.yaml: comment out gpus: all and uncomment the deploy: block.

A bare-metal build (no Docker) also needs CUDA 12.9, TensorRT 10.11, cuDNN 9, and the C++ libraries. One script installs them:

bash scripts/setup/install_dependencies.sh        # Ubuntu 22.04 or 24.04

Usage

# Datasets, downloaded into ~/datasets/<name>
uv run python scripts/datasets/download_kitti.py --out ~/datasets/kitti
uv run python scripts/datasets/download_euroc.py --out ~/datasets/euroc --area machine_hall
uv run python scripts/datasets/download_tum.py   --out ~/datasets/tum --seq fr2_xyz

# Run, writing the trajectory into results/<dataset>/
make run-superslam-kitti SEQUENCE=00
make run-superslam-euroc EUROC=MH_01_easy
make run-superslam-tum   TUM=rgbd_dataset_freiburg2_xyz

# Evaluate: ATE and RPE
make evaluate-superslam-kitti
make evaluate-superslam-euroc
make evaluate-superslam-tum

Per-dataset tuning knobs (window size, loop thresholds, and others) live in the dataset YAML under examples, in the Backend, Tracking, and loop sections. Each knob also reads a SUPERSLAM_* environment variable; precedence is the environment variable, then the YAML value, then the default.

The GTSAM optimization core builds and tests without a GPU:

make test-superslam
TensorRT 10 or 11, other GPUs, bare-metal build, cleaning

TensorRT 10 or 11. TensorRT 10 is the default and tested path. For 11:

make build-image-tensorrt11
make build-engines-tensorrt11

An engine built for one TensorRT version does not load under the other, so rebuild the engines after switching. TensorRT 10 or newer is required for LightGlue (opset-18 ONNX).

Other GPUs. The code targets Ampere (sm_86), Ada (sm_89), and Blackwell (sm_120). To move to a different NVIDIA GPU, rebuild the engines (they are GPU-architecture specific):

make build-engines-tensorrt10 && make build-superslam

Bare-metal (no Docker).

bash scripts/setup/install_dependencies.sh
source ~/.bashrc
cmake -S . -B build-tensorrt -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_CUDA_ARCHITECTURES="86;89;120"
cmake --build build-tensorrt -j"$(nproc)"
bash scripts/rebuild_engines.sh
./examples/kitti examples/stereo/KITTI00-02.yaml ~/datasets/kitti/dataset/sequences/00 --no-viewer

Cleaning. make clean-engines, clean-weights, clean-build, clean-results, clean-images, or clean-all. Every target is safe to re-run.

The .onnx.data sidecar, and publishing models

.onnx.data. Some models ship as a pair: model.onnx holds the graph, and model.onnx.data holds the large weight tensors. LightGlue and EigenPlaces are stored this way, so both files must sit in weights/ together. The download scripts fetch the sidecar automatically. The SuperPoint ONNX has inline weights and no .data file.

Publishing the prebuilt ONNX (maintainers). The download scripts pull from a GitHub Release. Name each release weights-<YYYYMMDDHHMMSS> and point the downloaders at it by setting DEFAULT_TAG in scripts/models/_release.py:

TAG="weights-$(date +%Y%m%d%H%M%S)"
gh release create "$TAG" weights/superpoint_dense_dynamic_batch.onnx \
  weights/lightglue_superpoint.onnx weights/lightglue_superpoint.onnx.data \
  weights/eigenplaces_resnet18_512.onnx weights/eigenplaces_resnet18_512.onnx.data

To regenerate the ONNX from source, see scripts/models/download_weights_*.py and the converters in utils.

Citation

@software{wagh_superslam,
  author = {Wagh, Aditya},
  title  = {SuperSLAM: Accurate Real-Time SLAM with Deep Learned Features},
  year   = {2026},
  url    = {https://github.com/adityamwagh/SuperSLAM}
}

License

Licensed under the LGPL. For questions or issues, open an issue on GitHub.

Acknowledgements

Code and ideas come from these projects:

Star History

Star History Chart

About

SuperSLAM: Open Source Framework for Deep Learning based Visual SLAM (Work in Progress)

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors