Back to Projects

Monocular SLAM Benchmark — 8 Systems, One Head-to-Head Comparison

We built, patched, ran, and scored eight monocular SLAM and visual-odometry systems — from classical feature tracking to Gaussian-splatting neural mapping — on identical driving sequences and brand-new GPU hardware, to answer the question every robotics client eventually asks: which visual navigation stack should we actually build on?

Dense 3D point-cloud reconstruction of a KITTI street from a single RGB camera, produced by GigaSLAM
A full 3D street reconstruction — 2.1 million points — recovered from nothing but a single moving RGB camera (GigaSLAM, sequence kitti_raw_0095)

The Challenge

Every SLAM paper claims state-of-the-art results — on its own hand-picked benchmark, its own hardware, against its own choice of baselines. That makes it nearly impossible for a team building a real product (a drone, an AGV, an AR headset) to answer a simple engineering question: given our camera, our compute budget, and our accuracy/robustness requirements, which of the dozens of monocular SLAM systems out there should we actually integrate?

We ran that comparison ourselves — 8 named systems spanning classical feature-based tracking, direct photometric odometry, deep recurrent bundle adjustment, and 3D Gaussian-splatting SLAM — evaluated on the same data, the same metrics, and the same brand-new (Blackwell, RTX 5070 Ti) GPU that most of these research repos don't even support out of the box yet.

What We Built

A Build Gauntlet on Unreleased Hardware

Every GPU-accelerated method here pins an old PyTorch/CUDA combination with prebuilt custom kernels — none of them ship support for sm_120 Blackwell silicon. Rather than downgrade the hardware to fit the software, we patched each repo's custom CUDA correlation, rasterization, and bundle-adjustment kernels to compile against a modern PyTorch/CUDA 13.3 stack, built every dependency (Pangolin, DBoW2, UniDepth, custom Gaussian rasterizers) from source, and kept a full build/run log per method for reproducibility.

8/8 methods built and ran successfully:
  ORB-SLAM3   classical, indirect (features)     — CPU only
  DSO         classical, direct (photometric)     — CPU only
  DROID-SLAM  deep, dense recurrent flow + BA     — GPU
  DPVO        deep, sparse patch-based VO         — GPU
  MonoGS      3D Gaussian-splat SLAM               — GPU
  Splat-SLAM  DROID tracking + Gaussian mapping    — GPU
  HI-SLAM2    DROID tracking + Gaussian + depth    — GPU
  GigaSLAM    metric-depth VO + Gaussian + loop closure — GPU

An Apples-to-Apples Evaluation Harness

All 8 methods were run on the same 5 KITTI raw driving sequences, against a common OXTS GPS/IMU-derived reference trajectory, scored with evo's Sim(3)-aligned Absolute Trajectory Error (the standard way to fairly score scale-ambiguous monocular systems), plus per-run speed and GPU-memory profiling. Two methods that don't ship a point-cloud exporter (ORB-SLAM3, DSO) got a small source addition so every system's internal map could be exported and rendered in an identical style for direct visual comparison.

Five KITTI driving routes used as the reference trajectories for the benchmark
The five KITTI driving routes used for evaluation — sequence 0093's sharp turn turned out to be the key stress test

Results

40 benchmark runs (8 methods × 5 sequences) completed, producing a dataset large enough to separate real signal from noise across accuracy, scale behavior, and robustness:

8/8 Methods Built & Benchmarked
40 SLAM Runs Scored
0.27 m Best Mean ATE (DSO)
2.1M Points Reconstructed (GigaSLAM)
Absolute Trajectory Error by method and sequence, log scale
Absolute Trajectory Error by method and sequence — every one of the 8 methods spikes on the same hard turning sequence

All 8 methods — spanning four different algorithm families — land within a tight 50-58 m error band on one specific 439-frame sequence with a sharp turn, while scoring sub-2 m on every other route. That's not a bug in any single implementation; it's cross-validated evidence that this particular route genuinely stresses monocular tracking without loop closure — exactly the kind of case a client needs flagged before it becomes a field failure.

Overall ranking of SLAM methods by mean trajectory error, hard sequence excluded
Ranked by mean ATE with the hard sequence excluded — the oldest, simplest, CPU-only method (DSO) wins outright

DSO — a 2016, CPU-only, classical direct method with zero learned components — has the best or tied-best accuracy on 4 of 5 sequences, ahead of every GPU-accelerated deep-learning method tested. A useful, counter-intuitive data point: "deep learning" isn't a free accuracy upgrade for short, well-conditioned sequences — it buys robustness and dense mapping capability that's worth paying for only when the use case actually needs it.

Recovered Sim(3) scale factor versus ground truth across all 8 methods
Recovered scale factor vs. ground truth — every method except GigaSLAM is 6-100x off, because monocular scale is fundamentally ambiguous without a metric prior

Only GigaSLAM recovers real-world metric scale directly from a single RGB camera (within 10-40% of ground truth), because it grounds tracking in a metric-depth foundation model rather than scale-free epipolar geometry. Every other method's output units are arbitrary and sequence-dependent — meaning a product built on them needs a separate calibration step (a known object size, GPS, or another sensor) before its trajectories mean anything in the real world. That's a distinction that never shows up in a paper's headline accuracy number, but decides whether a system is deployable as-is.

The accuracy table also hides real robustness differences that matter for shipping a product: MonoGS hung once and crashed once mid-sequence; HI-SLAM2 crashed on its densest keyframe buffer; GigaSLAM hit a recoverable CUDA out-of-memory condition; DSO's own initializer needed up to 28 retries on two sequences (documented upstream behavior, not a benchmark artifact). ORB-SLAM3, DROID-SLAM, DPVO, and Splat-SLAM ran clean across all 40 runs with zero crashes, hangs, or retries.

Technology Stack

ORB-SLAM3 DSO DROID-SLAM DPVO MonoGS Splat-SLAM HI-SLAM2 GigaSLAM evo (ATE / RPE) PyTorch (CUDA 13.3, Blackwell) Custom CUDA kernel porting Pangolin / DBoW2 KITTI raw + OXTS GT Point-cloud / Gaussian-splat export

Why It Matters

This benchmark is the exact work a robotics, AR/VR, or autonomy client needs before committing engineering months to a SLAM stack: a rigorous, hardware-matched, apples-to-apples comparison — not a literature review. ROVOQ can run this same evaluation against your camera, your compute budget, and your accuracy requirements, and go further: porting the winning system's CUDA kernels onto whatever GPU architecture your product actually ships on, exactly as we did here for hardware most of these research repos don't yet officially support.

Choosing or Porting a SLAM Stack?

From an apples-to-apples benchmark of the candidates to porting the winner's CUDA kernels onto your target hardware — we take visual navigation systems from research repo to deployed product. Let's talk about your autonomy or perception problem.

Start a Project