LOAM

Zhang 2014 · Paper

One-line summary — LOAM established the foundational LiDAR SLAM recipe — extract edge and planar features, then split estimation into high-frequency scan-to-scan odometry and low-frequency scan-to-map refinement — that virtually every later LiDAR system builds on or reacts against.

Problem

LiDAR SLAM faces two competing requirements: real-time operation demands fast processing, but accuracy demands registering each sweep against a large, consistent global map — while also undoing the motion distortion a moving scanner imprints on every sweep. Naive scan-to-map matching is too slow for real time; pure frame-to-frame odometry drifts. LOAM (RSS 2014) resolves the tension by dividing the problem between two cooperating algorithms running in parallel at different frequencies: coarse, fast odometry and fine, slow mapping.

Method & architecture

Feature extraction. Points in each scan are scored by a local-surface smoothness term over their set SS of same-scan neighbors,

c=1SX(k,i)LjS,ji(X(k,i)LX(k,j)L),c = \frac{1}{|S| \cdot \big\| X^{L}_{(k,i)} \big\|} \, \Big\| \sum_{j \in S,\, j \neq i} \big( X^{L}_{(k,i)} - X^{L}_{(k,j)} \big) \Big\|,

where X(k,i)LX^{L}_{(k,i)} is point ii of sweep kk in the LiDAR frame LL. Maximum-cc points become edge points, minimum-cc points planar points; each scan is split into four subregions providing at most 2 edge and 4 planar points, and points on beam-parallel surfaces or occlusion boundaries are excluded as unreliable.

LiDAR odometry (~10 Hz). The previous sweep’s cloud, reprojected to the sweep boundary, is stored in a KD-tree. Each new edge point is matched to the line through its two nearest edge points j,lj, l (from different scans), and each planar point to the plane through three points j,l,mj, l, m. The residuals are the point-to-line and point-to-plane distances

dE=(X~(k+1,i)LXˉ(k,j)L)×(X~(k+1,i)LXˉ(k,l)L)Xˉ(k,j)LXˉ(k,l)L,dH=(X~(k+1,i)LXˉ(k,j)L)((Xˉ(k,j)LXˉ(k,l)L)×(Xˉ(k,j)LXˉ(k,m)L))(Xˉ(k,j)LXˉ(k,l)L)×(Xˉ(k,j)LXˉ(k,m)L).d_{\mathcal{E}} = \frac{\big| (\tilde{X}^{L}_{(k+1,i)} - \bar{X}^{L}_{(k,j)}) \times (\tilde{X}^{L}_{(k+1,i)} - \bar{X}^{L}_{(k,l)}) \big|}{\big| \bar{X}^{L}_{(k,j)} - \bar{X}^{L}_{(k,l)} \big|}, \qquad d_{\mathcal{H}} = \frac{\big| (\tilde{X}^{L}_{(k+1,i)} - \bar{X}^{L}_{(k,j)}) \cdot \big( (\bar{X}^{L}_{(k,j)} - \bar{X}^{L}_{(k,l)}) \times (\bar{X}^{L}_{(k,j)} - \bar{X}^{L}_{(k,m)}) \big) \big|}{\big| (\bar{X}^{L}_{(k,j)} - \bar{X}^{L}_{(k,l)}) \times (\bar{X}^{L}_{(k,j)} - \bar{X}^{L}_{(k,m)}) \big|}.

Motion within a sweep is modeled with constant angular/linear velocity, so the pose of each point at its own timestamp tit_i is linearly interpolated from the sweep transform Tk+1L=[tx,ty,tz,θx,θy,θz]T^{L}_{k+1} = [t_x, t_y, t_z, \theta_x, \theta_y, \theta_z]^{\top}:

T(k+1,i)L=titk+1ttk+1Tk+1L,T^{L}_{(k+1,i)} = \frac{t_i - t_{k+1}}{t - t_{k+1}} \, T^{L}_{k+1},

which simultaneously de-skews the cloud. Stacking a residual row per feature into f(Tk+1L)=df(T^{L}_{k+1}) = d, the pose is solved by robust Levenberg–Marquardt with bisquare weights (large-residual features are down-weighted, beyond a threshold zeroed):

Tk+1LTk+1L(JJ+λdiag(JJ))1Jd.T^{L}_{k+1} \leftarrow T^{L}_{k+1} - \big( J^{\top} J + \lambda \, \mathrm{diag}(J^{\top} J) \big)^{-1} J^{\top} d.

LiDAR mapping (1 Hz). Once per sweep, the undistorted cloud is registered to the accumulated map using 10x more feature points. The map is stored in 10 m cubes; correspondences come from the eigen-decomposition of the covariance matrix of each feature’s map neighborhood (one dominant eigenvalue = edge line, two = planar patch, with the associated eigenvectors giving the direction), the same distance residuals are minimized, and the map is downsampled with a 5 cm voxel grid. The final pose output fuses the mapping pose TkWT^{W}_{k} with the odometry motion Tk+1LT^{L}_{k+1} at the odometry’s 10 Hz rate. There is no loop closure by design.

Results

Why it matters for SLAM

LOAM is to LiDAR SLAM what PTAM is to visual SLAM: the architectural template. LeGO-LOAM and LIO-SAM inherit its curvature-based edge/planar feature extraction and odometry/mapping split directly; FAST-LIO2 defines itself in opposition to it by dropping feature extraction entirely. Motion de-skewing became a required preprocessing step for every subsequent spinning-LiDAR pipeline, and LOAM held a top KITTI rank for years while remaining the standard baseline. If you read one classical LiDAR paper, read this one — the vocabulary of “edge features,” “planar features,” and “scan-to-map refinement” that pervades the field starts here.