40#include <pcl/cloud_iterator.h>
44namespace registration {
46template <
typename Po
intSource,
typename Po
intTarget,
typename Scalar>
55 PCL_ERROR(
"[pcl::TransformationEstimationSymmetricPointToPlaneLLS::"
56 "estimateRigidTransformation] Number or points in source (%zu) differs "
57 "from target (%zu)!\n",
58 static_cast<std::size_t
>(nr_points),
68template <
typename Po
intSource,
typename Po
intTarget,
typename Scalar>
78 PCL_ERROR(
"[pcl::TransformationEstimationSymmetricPointToPlaneLLS::"
79 "estimateRigidTransformation] Number or points in source (%zu) differs "
80 "than target (%zu)!\n",
91template <
typename Po
intSource,
typename Po
intTarget,
typename Scalar>
102 PCL_ERROR(
"[pcl::TransformationEstimationSymmetricPointToPlaneLLS::"
103 "estimateRigidTransformation] Number or points in source (%zu) differs "
104 "than target (%zu)!\n",
115template <
typename Po
intSource,
typename Po
intTarget,
typename Scalar>
128template <
typename Po
intSource,
typename Po
intTarget,
typename Scalar>
135 const Eigen::AngleAxis<Scalar>
rotation_z(parameters(2),
136 Eigen::Matrix<Scalar, 3, 1>::UnitZ());
137 const Eigen::AngleAxis<Scalar>
rotation_y(parameters(1),
138 Eigen::Matrix<Scalar, 3, 1>::UnitY());
139 const Eigen::AngleAxis<Scalar>
rotation_x(parameters(0),
140 Eigen::Matrix<Scalar, 3, 1>::UnitX());
142 parameters(3), parameters(4), parameters(5));
143 const Eigen::Transform<Scalar, 3, Eigen::Affine> transform =
149template <
typename Po
intSource,
typename Po
intTarget,
typename Scalar>
156 using Matrix6 = Eigen::Matrix<Scalar, 6, 6>;
157 using Vector3 = Eigen::Matrix<Scalar, 3, 1>;
174 if (enforce_same_direction_normals_) {
175 if (n1.dot(n2) >= 0.)
184 if (!p.array().isFinite().all() || !
q.array().isFinite().all() ||
185 !n.array().isFinite().all()) {
190 v << (p +
q).cross(n), n;
193 ATb += v * (
q - p).dot(n);
203template <
typename Po
intSource,
typename Po
intTarget,
typename Scalar>
211template <
typename Po
intSource,
typename Po
intTarget,
typename Scalar>
216 return enforce_same_direction_normals_;
Iterator class for point clouds with or without given indices.
std::size_t size() const
Size of the range the iterator is going through.
std::vector< pcl::Correspondence, Eigen::aligned_allocator< pcl::Correspondence > > Correspondences
IndicesAllocator<> Indices
Type used for indices in PCL.