V-SLAM: The Architecture

To build a SLAM system that doesn't drift into infinity after 10 meters, we must separate the concerns into a Frontend (Fast, Local) and a Backend (Slow, Global).

1. The Frontend: Visual Odometry

The goal here is speed. We need to track the robot's motion relative to the immediate previous state.

The Heuristic:
Don't process every frame. If the robot hasn't moved, don't update the map.
Define Keyframes:

||tcurrtlast||>δdist||RcurrRlastT||>δangle

2. The Backend: Global Optimization

The goal here is consistency. We accept that the frontend drifts. The backend's job is to "snap" the trajectory back when we recognize a place we've been before.

This is modeled as a Factor Graph (or Pose Graph).

3. Loop Closure Detection

How do we know Node 1000 is the same place as Node 50?

  1. Geometric check:Is ||P1000P50||<radius? (Only works if drift is low).
  2. Appearance check:Use descriptors (FPFH, BoW, NetVLAD).
  3. Verification:Run ICP between Scan 1000 and Scan 50. If fitness > threshold, add a constraint edge.

4. The Algorithm Loop

  1. Receive Scan St.
  2. Predict Pose Tpred using constant velocity model.
  3. Frontend: ICP align St to Slocal_map starting at Tpred. Get Test.
  4. Keyframe Check: Did we move enough?
    • No: Update current pose, wait for next scan.
    • Yes:
      1. Add Node Test to Pose Graph.
      2. Add Odometry Edge from Tlast_key.
      3. Loop Detection: Search for old nodes near Test.
      4. Update Global Map.