Iterative Closest Point (ICP)
Goal: Estimate the transformation to move one cloud so that it is aligned with the other.
Resources
Not sure where I got this from, maybe ChatGPT, or F1TENTH, or
Math
I still really don’t understand how ICP work. I need to actually look at the math for this.
Process
- Take two scans of 2D/3D point cloud
- Compute the center of mass and shift the point clouds on top of each other
Use point-to-point metric
Two steps that you repeat over and over until convergence
- Data Association Step
- Minimize the distance between point pairs.
- Compute correspondences from to . For every we search the closest to it.
- Transformation Step
- Compute the rotation and translation
- Compute rotation using SVD to get
Use the previous scan and current scan to align them.
Use Singular Value Decomposition to do this computation.
- Make some initial guess of R
- For each point in new scan (t=k+1), find closest point in previous set (t=k) (Correspondence Search)
- Make another better guess
- Set next guess to current guess, repeat steps 2-4 until convergence
the naive metric is the sum of squared distances. This is sensitive to noise. A better metric point-to-point metric.
Iteratively
ICP can be very slow, you need better estimates.
Point-to-Line ICP (PL-ICP)
Two improvements
- Change from point-to-point to point-to-line metric
- Clever tricks to allow Fast Correspondence Search
From Visual SLAM book
ICP is just a non-linear optimization problem.
The solution can be divided into 2 ways:
- Using Linear Algebra (SVD)
- Nonlinear optimization (similar to Bundle Adjustment)