โ† Back to all work

Registration ยท ICP ยท CUDA ยท Rust

ICP registration, twice: CUDA and Rust

Frame registration by ICP โ€” iterative closest point: align two point clouds by repeatedly matching nearest points and re-solving the pose โ€” built in both CUDA (production GPU path) and Rust (portable, trait-based path).

Challenge

Frame registration has to run in real time on ordinary hardware, stay robust to outliers in noisy real-world scans, and serve several contexts โ€” frame-to-frame tracking, frame-to-model alignment, and loop closure โ€” without duplicating the algorithm.

Contribution

Implemented point-to-plane ICP (minimizing distance to the matched surface rather than between matched points) with Tukey and Huber M-estimators โ€” loss functions that discount outliers instead of letting them dominate the fit โ€” under graduated non-convexity scheduling: start with a forgiving loss and tighten it as the alignment improves. The CUDA version uses warp-level reductions and atomic Jacobian accumulation. The Rust version is trait-based and generic over precision, registration method, and loss kernel โ€” and its CPU and GPU paths compile from the same kernel source, differing only in dispatch: rayon on CPU, wgpu compute on GPU.

Outcome

Real-time registration on commodity hardware โ€” frontend registration at roughly 3 ms per frame โ€” with one generic algorithmic core serving tracking, model alignment, and loop closure across CPU and GPU alike.

Client work is described at a technical, client-agnostic level.