11 using FeatureVector = Eigen::VectorXd;
14 FeatureAware(
double overlap_rate,
double feature_weight,
int symmetric_neighbors);
18 void setup()
override;
22 void compute_matches();
24 void compute_features(
const std::vector<icp::Vector>& points,
Vector cm,
25 std::vector<FeatureVector>& features);
27 template<
typename TVector>
28 Eigen::MatrixXd compute_norm_dists(
const std::vector<TVector>& first,
29 const std::vector<TVector>& second) {
30 Eigen::MatrixXd norm_dists(first.size(), second.size());
31 double max_dist = std::numeric_limits<double>::min();
32 for (
size_t i = 0; i < first.size(); i++) {
33 for (
size_t j = 0; j < second.size(); j++) {
34 double dist = (first[i] - second[j]).norm();
35 norm_dists(i, j) = dist;
36 if (dist > max_dist) {
42 norm_dists /= max_dist;
46 std::vector<icp::Vector> a_current;
50 std::vector<FeatureVector> a_features;
51 std::vector<FeatureVector> b_features;
53 Eigen::MatrixXd norm_feature_dists;
56 int symmetric_neighbors;
57 double feature_weight;
58 double neighbor_weight;