Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Certifiable Range-Aided SLAM on SE(3)

This notebook solves an SE(3)SE(3) range-aided SLAM problem with GTSAM’s Burer-Monteiro Riemannian Staircase and checks an SDP certificate that, when it passes, establishes global optimality. It extends the landmark example with range measurements to fixed beacons.

A raw range residual (∥ℓk−ti∥−dik)2(\lVert \ell_k - t_i \rVert - d_{ik})^2 is not polynomial, so it cannot enter a QCQP. Each range instead gets an auxiliary unit direction umu_m and becomes

νik∥ℓk−ti−dik um∥2subject to∥um∥=1,\nu_{ik}\lVert \ell_k - t_i - d_{ik}\, u_m \rVert^2 \quad\text{subject to}\quad \lVert u_m \rVert = 1,

whose minimum over the unit sphere is the raw residual, so the reformulation is exact. QuadraticRangeFactor3 contributes that term. The auxiliary is a Unit3, which lifts to a 1-by-pp block.

See also the SE(2)SE(2) version.

Open In Colab

A cube world with range beacons

8 poses, 3 beacons
7 odometry edges, 22 range measurements

Generative model

rotation: kappa = 100, sigma = 4.05 deg
odometry: tau   = 25, sigma = 0.20 m
range:    nu    = 40, sigma = 0.16 m
36 factors

Lifted initial values

rotation slice:   (3, 3)
beacon slice:     (1, 3)
auxiliary slice:  (1, 3)

Run and certify

Certified:    True
Final rank:   4
Ranks tried:  [3 4]
Solver time:  0.0185 s

Round back to SE(3)SE(3)

Relaxation lower bound: 4.220448
Rounded objective:      7.886567

The two numbers are far apart, and that is expected here. Certification says the relaxation was solved to global optimality, not that the relaxation is tight. Dropping ∥um∥=1\lVert u_m \rVert = 1 to umu_m free lets every range term shrink toward zero, so the bound can sit well below anything achievable on the sphere. Judge the estimate by its geometry below rather than by the gap; the pose-graph and landmark notebooks, whose relaxations are tight, are where the bound is worth reading as a certificate of the answer itself.

residuals 64 - parameters 51 = 13 dof
Expected optimal cost (0.5 * chi^2): 6.5
Observed optimal cost:               7.9
Ratio:                               1.21

The estimated map

Loading...
RMS position error after alignment: 0.3596 m

Where the time goes

Loading...
  QCQP build: 0.00018 s
 local solve: 0.01767 s
      verify: 0.00060 s