Kintinuous

Whelan 2012 · Paper

One-line summary — Extended KinectFusion to unbounded environments with a continuously shifting (cyclical-buffer) TSDF volume that streams departing surface slices into an incrementally built triangular mesh, plus early loop-closure machinery (DBoW+SURF, iSAM) that matured into deformation-based map correction.

Problem

KinectFusion’s fixed-size TSDF volume cannot represent environments larger than a desk or small room — once the camera moves beyond the volume boundary, tracking fails. Its ICP odometry also fails in areas with poor 3D geometry (e.g. straight corridors). Large-scale indoor and outdoor mapping requires extending the reconstruction indefinitely in real time while keeping a path open to correcting accumulated drift.

Method & architecture

Rolling (cyclical) TSDF volume. The TSDF (size vsv_s voxels, dimension dd meters, voxel size vm=d/vsv_m = d/v_s) no longer stays anchored at the starting position. The system continuously checks camera distance from the volume origin; when it exceeds a movement threshold bb, the volume is virtually translated to re-center the camera. The shift is quantized to whole voxels: with camera translation ti+1\mathbf{t}_{i+1},

u=ti+1vm,ti+1=ti+1vmu,gi+1=gi+u\mathbf{u} = \left\lfloor \frac{\mathbf{t}_{i+1}}{v_m} \right\rfloor, \qquad \mathbf{t}'_{i+1} = \mathbf{t}_{i+1} - v_m \mathbf{u}, \qquad \mathbf{g}_{i+1} = \mathbf{g}_i + \mathbf{u}

where ti+1\mathbf{t}'_{i+1} is the new in-volume camera position and gi\mathbf{g}_i tracks the volume’s global position in voxel units. No voxels are moved in memory: the 3D array is treated as cyclical, with lookups remapped as x=(x+gix)modvsx' = (x + g_i^x) \bmod v_s (same for y,zy, z), so re-centering only updates base index offsets.

Slice extraction and meshing. The slice of voxels that leaves the volume is ray-cast orthogonally along each axis to extract zero-crossing vertices, deduplicated with a voxel-grid filter (leaf size vmv_m), zeroed for reuse, and streamed to the CPU. Each boundary crossing adds a pose-graph element Qn=(gi,ti,Ri,Mi)Q_n = (\mathbf{g}_i, \mathbf{t}'_i, R_i, M_i) storing the pose and its associated surface slice MiM_i; slices (extracted with 2-voxel overlap) feed a greedy triangulation algorithm producing a seamless mesh bounded only by system memory.

Multi-threaded architecture. A hierarchical design keeps the GPU front-end unblocked: the TSDF tracking/integration thread signals a CloudSliceProcessor thread (transforms + downsampling), which signals a pool of ComponentThreads (mesh generation, place recognition, …), so map post-processing never stalls 30 Hz tracking.

Odometry alternatives and loop closure. To survive geometrically degenerate scenes, the ICP odometry can be replaced by the feature-based FOVIS visual odometry — trading some local mesh smoothness for robustness in corridors. For loop closure the paper integrates DBoW place recognition with SURF descriptors as a ComponentThread, propagating detected pose constraints back to the TSDF virtual frame via the stored t\mathbf{t}' vectors, and experiments with iSAM pose-graph optimization — observing that a mesh deformation is required alongside pose updates. The mature Kintinuous line implements exactly that with an embedded deformation graph, moving each mesh vertex with its nearby graph nodes: v~i=Rk(vigk)+gk+tk\tilde{\mathbf{v}}_i = R_k(\mathbf{v}_i - \mathbf{g}_k) + \mathbf{g}_k + \mathbf{t}_k, so the dense map bends into consistency instead of being rebuilt.

Results

On a desktop with an Intel i7-2600 (3.4 GHz), 8 GB RAM, and a GTX 560 Ti (2 GB), with vs=512v_s = 512 and 15 FPS handheld/vehicle Kinect captures, four datasets were mapped in real time: a research lab (LAB, 31.07 m pose-to-pose odometry, 6 m volume), two floors of an apartment (APT, 42.31 m), a suburban estate filmed from a car at night (CAR, 136.18 m, 20 m volume, 81.6 x 22.8 x 81.5 m bounding cuboid), and a straight corridor (CORR, 56.08 m, using FOVIS). Final meshes reach 1.5-3.1 million triangles (63-118 MB). TSDF update times of 33.8-41.3 ms show the front-end can sustain the Kinect’s full 30 FPS, unaffected by map growth; the CloudSliceProcessor adds only 2.6-4.7 ms per slice, and mesh generation keeps pace on average. FOVIS odometry costs 14.71 +/- 4.39 ms versus 10.54 +/- 0.21 ms for CUDA ICP — slower but still real-time, with reduced drift in the corridor at the cost of local mesh smoothness (frame-to-frame vs frame-to-model).

Why it matters for SLAM

Kintinuous was the first system to take dense volumetric fusion out of a single fixed volume and into corridors, apartments, and streets, showing that dense RGB-D SLAM could be a genuine large-scale mapping tool rather than a desktop scanning demo. Its cyclical-buffer rolling volume was adopted and refined by later systems (InfiniTAM’s voxel hashing solves the same scalability problem differently), and its loop-closure investigations — pose graph plus mesh deformation — became the core mechanism of ElasticFusion, its direct successor by the same lead author.