10 using FeatureVector = Eigen::VectorXd;
13 FeatureAware(
double overlap_rate,
double feature_weight,
int symmetric_neighbors);
17 void setup()
override;
21 void compute_matches();
23 void compute_features(
const std::vector<icp::Vector>& points,
Vector cm,
24 std::vector<FeatureVector>& features);
26 template<
typename TVector>
27 Eigen::MatrixXd compute_norm_dists(
const std::vector<TVector>& first,
28 const std::vector<TVector>& second) {
29 Eigen::MatrixXd norm_dists(first.size(), second.size());
30 double max_dist = std::numeric_limits<double>::min();
31 for (
size_t i = 0; i < first.size(); i++) {
32 for (
size_t j = 0; j < second.size(); j++) {
33 double dist = (first[i] - second[j]).norm();
34 norm_dists(i, j) = dist;
35 if (dist > max_dist) {
41 norm_dists /= max_dist;
45 std::vector<icp::Vector> a_current;
49 std::vector<FeatureVector> a_features;
50 std::vector<FeatureVector> b_features;
52 Eigen::MatrixXd norm_feature_dists;
55 int symmetric_neighbors;
56 double feature_weight;
57 double neighbor_weight;