YeeKal
icp

icp-basic concepts

YeeKal
"#icp"

ICP: Iterative Closest Point

application

  • reconstruct 2D or 3D surface
  • localize robots
  • register bone models

problem summary

  • given: two corresponding point sets
  • wanted: translation t and rotation R that minimizes the sum of the squared error: where $x_i$ and $p_i$ are coresponding points. So this problem actually contains two sub-problem:

  • find the corresponding pairs of points(association);

  • find the transformation.

Iterative Closest Point

iterate to find alignment

Method1: iterative to find the closet point in P for point in X. This does not work so well.

Find the transformation

SVD & optimization

If the correvt correspondences are known, the correct relative rotation/translation can be calculated in closed form by SVD.

centering:

Let: $W=\sum^{N_p}_{i=1}x_i'p_i'^T$. Denote the SVD of W by:

where $U,V\in R^{3\times3}$, are unitary, and $\sigma_1\geq\sigma_2\geq\sigma_3$. Then the optimal solution:

ICP variants

1. points subsets

selecting source points: - use all points - uniform sub-sampling - random sampling - feature based sampling - try to find “important” points - decrease the number of correspondences - higher efficiency and higher accuracy - requires preprocessing feature_based_sampling.png - normal-sapce sampling - Ensure that samples have normals distributed as uniformly as possible - Normal-space sampling better for mostly smooth areas with sparse features

2. weighting the correspondence

3. data association - has greatest effect on convergence and speed - Closest point - Normal shooting - Closest compatible point - Projection - Using kd-trees or oc-trees

4. rejecting

  • TriICP: trimmed ICP

HW

  1. in temp_ws. This work uses the icp algorithm in pcl to math the monkey face.
  2. libpcl in temp_ws. THis work is downloaded from github. This is a simple library for ICP implementation without any third library.

REF