iterative closest points
CEV ICP algorithm library
Loading...
Searching...
No Matches
Feature-Aware ICP
Usage
You can construct a new instance of Feature-Aware ICP with icp::ICP::from_method("feature_aware", config). Supply the following parameters to config (via icp::ICP::Config::set):
Key Description
"overlap_rate" A double between 0.0 and 1.0 for the overlap rate. The default is 1.0.
"feature_weight" A double between 0.0 and 1.0 with default value 0.7. Decides how much to weight feature cost versus point-to-point cost.
"symmetric_neighbors" An int with default value 10. Decides how many neighbors to use on each side of a point when constructing the feature vector.
Description
Builds on top of Trimmed ICP. In addition to matching points based on a point-to-point distance criteria, matches them based on a local "feature vector."
  1. Matching Step:

    Matches are computed based on a weighted average of the point-to-point cost metric and the feature cost metric (with weight feature_weight given to the feature vector cost metric).

    The feature vector for each point is computed as follows. Let \( p_i \) be the i-th point in the scan, ordered by angle from the scan origin (LiDAR center), and let \( c \) be the centroid of the scan. Then, we can define \( q_i = p_i - c \). Also, let \( n \) be the number of symmetric_neighbors. The feature vector for \( p_k \) is then \( f_k = \begin{bmatrix} |q_{k - n}| - |q_k| & \ldots & |q_{k - 1}| - |q_k| & |q_{k+1}| - |q_k| & \ldots & |q_{k + n}| - |q_k| \end{bmatrix} \). The feature cost metric between two feature vectors \( f_a \) and \( f_b \) is simply \( |f_a - f_b| \).

  2. Trimming Step: see Trimmed ICP for details.
  3. SVD: see Vanilla ICP for details.
  4. Reflection Handling: see Vanilla ICP for details.
  5. Transformation Step: see Vanilla ICP for details.

Read ICP Sources for a list of all resources used in this project. This page was automatically generated from feature_aware.cpp with icp_doc_builder.py.