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.