SLAM++

Salas-Moreno 2013 · Paper

One-line summary — The first object-oriented SLAM system: the map is an explicit graph of 6-DoF object poses built by real-time 3D object recognition “in the loop”, giving dense predictive power at a fraction of the storage of raw-geometry maps.

Problem

Before SLAM++, real-time SLAM systems operated on low-level primitives — points, lines, patches, or non-parametric surfaces such as depth maps — which must be robustly matched, geometrically transformed, and optimised. This wastes enormous computation and ignores domain knowledge: many indoor scenes consist of repeated, domain-specific objects and structures (chairs, tables, monitors). If prior knowledge of these objects is exploited in the loop of SLAM operation itself, object recognition from depth data can replace raw geometry processing — yielding compact, semantically meaningful maps, strong loop-closure constraints, and dense surface prediction from an object graph.

Method & architecture

The pipeline (Fig. 2 of the paper): live frame surface measurement (vertex map Dl\mathcal{D}_l + normal map Nl\mathcal{N}_l) → (1) live camera pose estimation by ICP against a dense multi-object scene prediction rendered from the current SLAM graph G\mathcal{G}(2) object detection and insertion into the graph → (3) pose-graph optimisation → (4) surface rendering for the next prediction and for active object search.

Ec(x)=uΩψ(e(u,x)),e(u,x)=Nr(u)(exp(x^)v^l(u)vr(u)),E_c(\mathbf{x}) = \sum_{u\in\Omega} \psi\big(e(u,\mathbf{x})\big), \qquad e(u,\mathbf{x}) = \mathcal{N}_r(u')^\top\big(\exp(\hat{\mathbf{x}})\,\hat{v}_l(u) - v_r(u')\big),

where xR6\mathbf{x}\in\mathbb{R}^6 is an incremental twist, vr,Nrv_r, \mathcal{N}_r are the predicted vertex/normal maps, uu' the projectively-associated pixel, and ψ\psi a robust Huber penalty. Gauss-Newton normal equations (6×66\times6, Cholesky) run for up to 10 iterations. Tracking against the complete, high-quality multi-object prediction — unlike KinectFusion’s partial model — also enables masking already-explained pixels so object search focuses only on undescribed regions (“active search”).

Em=Zi,ojlog(Zi,oj1Twi1Twoj)Σi,oj+Zi,i+1log(Zi,i+11Twi1Twi+1)Σi,i+1,E_m = \sum_{Z_{i,o_j}} \big\lVert \log\big(Z_{i,o_j}^{-1} \cdot T_{wi}^{-1} \cdot T_{wo_j}\big) \big\rVert_{\Sigma_{i,o_j}} + \sum_{Z_{i,i+1}} \big\lVert \log\big(Z_{i,i+1}^{-1} \cdot T_{wi}^{-1} \cdot T_{wi+1}\big) \big\rVert_{\Sigma_{i,i+1}},

with xΣ:=xΣ1x\lVert\mathbf{x}\rVert_\Sigma := \mathbf{x}^\top\Sigma^{-1}\mathbf{x} the Mahalanobis distance, log()\log(\cdot) the SE(3)\mathbf{SE}(3) log map, and inverse covariances approximated by the ICP Hessian Σ1=JJ\Sigma^{-1} = J^\top J. Solved with Levenberg-Marquardt and a sparse Cholesky solver (g2o).

Results

Why it matters for SLAM

SLAM++ opened the research direction of object-level SLAM, showing that maps built from semantic entities can be orders of magnitude more compact than raw geometry while enabling loop closure, relocalisation, and scene understanding at the object level. Its main limitation — a pre-built database of scanned instances — is exactly what its lineage removed: Fusion++ discovers objects on the fly with Mask R-CNN, MoreFusion reasons about multi-object 6D poses, and NodeSLAM and DSP-SLAM replace meshes with learned shape priors. Its core insight, that semantic entities make stronger map elements than raw geometry, resurfaces in modern 3D scene-graph systems.