3 #include <pcl/ModelCoefficients.h>
4 #include <pcl/sample_consensus/method_types.h>
5 #include <pcl/sample_consensus/model_types.h>
6 #include <pcl/segmentation/sac_segmentation.h>
15 template <
typename Po
intT,
typename IndicesPtrT = pcl::IndicesPtr>
16 std::optional<PlaneFittingResult>
18 double distanceThreshold = 1.0,
19 const IndicesPtrT&
indices =
nullptr)
23 pcl::ModelCoefficients::Ptr coefficients(
new pcl::ModelCoefficients);
24 pcl::PointIndices::Ptr inliers(
new pcl::PointIndices);
27 pcl::SACSegmentation<PointT> seg;
30 seg.setOptimizeCoefficients(
true);
33 seg.setModelType(pcl::SACMODEL_PLANE);
34 seg.setMethodType(pcl::SAC_RANSAC);
35 seg.setDistanceThreshold(distanceThreshold);
37 seg.setInputCloud(cloud);
42 seg.segment(*inliers, *coefficients);
44 if (inliers->indices.empty())
49 float a = coefficients->values.at(0);
50 float b = coefficients->values.at(1);
51 float c = coefficients->values.at(2);
52 float d = coefficients->values.at(3);
56 if (plane.normal().dot(Eigen::Vector3f::UnitZ()) < 0)