43 #include <pcl/registration/boost.h>
44 #include <pcl/registration/registration.h>
45 #include <pcl/features/ppf.h>
47 #include <unordered_map>
59 struct HashKeyStruct :
public std::pair <int, std::pair <int, std::pair <int, int> > >
66 this->second.first = b;
67 this->second.second.first = c;
68 this->second.second.second = d;
73 const std::size_t h1 = std::hash<int>{} (s.first);
74 const std::size_t h2 = std::hash<int>{} (s.second.first);
75 const std::size_t h3 = std::hash<int>{} (s.second.second.first);
76 const std::size_t h4 = std::hash<int>{} (s.second.second.second);
77 return h1 ^ (h2 << 1) ^ (h3 << 2) ^ (h4 << 3);
82 using Ptr = shared_ptr<PPFHashMapSearch>;
83 using ConstPtr = shared_ptr<const PPFHashMapSearch>;
91 float distance_discretization_step = 0.01f)
93 , internals_initialized_ (false)
94 , angle_discretization_step_ (angle_discretization_step)
95 , distance_discretization_step_ (distance_discretization_step)
115 nearestNeighborSearch (
float &f1,
float &f2,
float &f3,
float &f4,
116 std::vector<std::pair<std::size_t, std::size_t> > &indices);
137 bool internals_initialized_;
139 float angle_discretization_step_, distance_discretization_step_;
154 template <
typename Po
intSource,
typename Po
intTarget>
194 scene_reference_point_sampling_rate_ (5),
195 clustering_position_diff_threshold_ (0.01f),
196 clustering_rotation_diff_threshold_ (20.0f / 180.0f * static_cast<float> (
M_PI))
257 computeTransformation (
PointCloudSource &output,
const Eigen::Matrix4f& guess)
override;
264 unsigned int scene_reference_point_sampling_rate_;
268 float clustering_position_diff_threshold_, clustering_rotation_diff_threshold_;
276 poseWithVotesCompareFunction (
const PoseWithVotes &a,
277 const PoseWithVotes &b);
282 clusterVotesCompareFunction (
const std::pair<std::size_t, unsigned int> &a,
283 const std::pair<std::size_t, unsigned int> &b);
294 posesWithinErrorBounds (Eigen::Affine3f &pose1,
295 Eigen::Affine3f &pose2);
299 #include <pcl/registration/impl/ppf_registration.hpp>