From b32cb1b457a9ed5498f35a3511defa37da5c9d90 Mon Sep 17 00:00:00 2001 From: zatchbell1311 <151542036+zatchbell1311@users.noreply.github.com> Date: Thu, 23 Apr 2026 15:12:20 +0530 Subject: [PATCH 1/9] Fix: use deterministic x_axis for ShapeContext3D azimuth orientation --- features/include/pcl/features/impl/3dsc.hpp | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/features/include/pcl/features/impl/3dsc.hpp b/features/include/pcl/features/impl/3dsc.hpp index 8ce62ab68e1..f9e4fb8d120 100644 --- a/features/include/pcl/features/impl/3dsc.hpp +++ b/features/include/pcl/features/impl/3dsc.hpp @@ -164,17 +164,18 @@ pcl::ShapeContext3DEstimation::computePoint ( } normal = normals[minIndex].getNormalVector3fMap (); - // Compute and store the RF direction - x_axis[0] = rnd (); - x_axis[1] = rnd (); - x_axis[2] = rnd (); - if (!pcl::utils::equal (normal[2], 0.0f)) - x_axis[2] = - (normal[0]*x_axis[0] + normal[1]*x_axis[1]) / normal[2]; - else if (!pcl::utils::equal (normal[1], 0.0f)) - x_axis[1] = - (normal[0]*x_axis[0] + normal[2]*x_axis[2]) / normal[1]; - else if (!pcl::utils::equal (normal[0], 0.0f)) - x_axis[0] = - (normal[1]*x_axis[1] + normal[2]*x_axis[2]) / normal[0]; - + // Compute a deterministic x_axis by projecting the direction to the most + // distant neighbor onto the tangent plane. This replaces the previous + // random axis selection and makes the descriptor stable across runs. + x_axis = (*surface_)[nn_indices.back ()].getVector3fMap () - origin; + x_axis -= x_axis.dot (normal) * normal; + if (x_axis.norm () < 1e-6f) + { + // Fallback: use a fixed global axis projected onto the tangent plane + x_axis = Eigen::Vector3f::UnitX () - Eigen::Vector3f::UnitX ().dot (normal) * normal; + if (x_axis.norm () < 1e-6f) + x_axis = Eigen::Vector3f::UnitY () - Eigen::Vector3f::UnitY ().dot (normal) * normal; + } x_axis.normalize (); // Check if the computed x axis is orthogonal to the normal @@ -279,5 +280,4 @@ pcl::ShapeContext3DEstimation::computeFeature (Poi } } -#define PCL_INSTANTIATE_ShapeContext3DEstimation(T,NT,OutT) template class PCL_EXPORTS pcl::ShapeContext3DEstimation; - +#define PCL_INSTANTIATE_ShapeContext3DEstimation(T,NT,OutT) template class PCL_EXPORTS pcl::ShapeContext3DEstimation; \ No newline at end of file From f0900e317021b0ff72e42141568cc039ac2a2dc5 Mon Sep 17 00:00:00 2001 From: zatchbell1311 <151542036+zatchbell1311@users.noreply.github.com> Date: Tue, 28 Apr 2026 17:29:40 +0530 Subject: [PATCH 2/9] temp: print new 3DSC descriptor values for CI --- test/features/test_shot_estimation.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/test/features/test_shot_estimation.cpp b/test/features/test_shot_estimation.cpp index d84b958578e..d6777a92685 100644 --- a/test/features/test_shot_estimation.cpp +++ b/test/features/test_shot_estimation.cpp @@ -737,7 +737,16 @@ TEST (PCL,3DSCEstimation) EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[8], 0.0f); //EXPECT_EQ ((*sc3ds)[0].descriptor.size (), 64); - + std::cerr << "sc3ds[94][88]=" << (*sc3ds)[94].descriptor[88] << "\n"; + std::cerr << "sc3ds[94][584]=" << (*sc3ds)[94].descriptor[584] << "\n"; + std::cerr << "sc3ds[94][1106]=" << (*sc3ds)[94].descriptor[1106] << "\n"; + std::cerr << "sc3ds[94][1560]=" << (*sc3ds)[94].descriptor[1560] << "\n"; + std::cerr << "sc3ds[94][1929]=" << (*sc3ds)[94].descriptor[1929] << "\n"; + std::cerr << "sc3ds[108][67]=" << (*sc3ds)[108].descriptor[67] << "\n"; + std::cerr << "sc3ds[108][548]=" << (*sc3ds)[108].descriptor[548] << "\n"; + std::cerr << "sc3ds[108][1091]=" << (*sc3ds)[108].descriptor[1091] << "\n"; + std::cerr << "sc3ds[108][1421]=" << (*sc3ds)[108].descriptor[1421] << "\n"; + std::cerr << "sc3ds[108][1900]=" << (*sc3ds)[108].descriptor[1900] << "\n"; EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[88], 55.271168f); EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[584], 71.108765f); EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[1106], 79.5896f); From b53e1e862493921cb485d365e2eb3cf2e58db8e2 Mon Sep 17 00:00:00 2001 From: zatchbell1311 <151542036+zatchbell1311@users.noreply.github.com> Date: Tue, 28 Apr 2026 23:26:26 +0530 Subject: [PATCH 3/9] Fix: keep RF intact so deterministic x_axis is used for azimuth binning --- features/include/pcl/features/impl/3dsc.hpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/features/include/pcl/features/impl/3dsc.hpp b/features/include/pcl/features/impl/3dsc.hpp index f9e4fb8d120..b83fb200f69 100644 --- a/features/include/pcl/features/impl/3dsc.hpp +++ b/features/include/pcl/features/impl/3dsc.hpp @@ -188,7 +188,7 @@ pcl::ShapeContext3DEstimation::computePoint ( for (std::size_t ne = 0; ne < neighb_cnt; ne++) { if (pcl::utils::equal (nn_dists[ne], 0.0f)) - continue; + continue; // Get neighbours coordinates Eigen::Vector3f neighbour = (*surface_)[nn_indices[ne]].getVector3fMap (); @@ -246,8 +246,9 @@ pcl::ShapeContext3DEstimation::computePoint ( assert (desc[(l*elevation_bins_*radius_bins_) + (k*radius_bins_) + j] >= 0); } // end for each neighbour - // 3DSC does not define a repeatable local RF, we set it to zero to signal it to the user - std::fill_n (rf, 9, 0); + // Note: unlike the original 3DSC, we keep the RF intact here because + // we now compute a deterministic x_axis. The original code zeroed the RF + // to signal non-repeatability, but that also destroyed azimuth binning. return (true); } @@ -259,7 +260,7 @@ pcl::ShapeContext3DEstimation::computeFeature (Poi output.is_dense = true; // Iterate over all points and compute the descriptors - for (std::size_t point_index = 0; point_index < indices_->size (); point_index++) + for (std::size_t point_index = 0; point_index < indices_->size (); point_index++) { //output[point_index].descriptor.resize (descriptor_length_); From 65dcc177e384c8fba312c6d1925af7cd2d1ca80b Mon Sep 17 00:00:00 2001 From: zatchbell1311 <151542036+zatchbell1311@users.noreply.github.com> Date: Thu, 30 Apr 2026 01:51:49 +0530 Subject: [PATCH 4/9] Fix: use max_element to correctly find most distant neighbor for deterministic x_axis --- features/include/pcl/features/impl/3dsc.hpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/features/include/pcl/features/impl/3dsc.hpp b/features/include/pcl/features/impl/3dsc.hpp index b83fb200f69..fc9d257c5b6 100644 --- a/features/include/pcl/features/impl/3dsc.hpp +++ b/features/include/pcl/features/impl/3dsc.hpp @@ -167,7 +167,9 @@ pcl::ShapeContext3DEstimation::computePoint ( // Compute a deterministic x_axis by projecting the direction to the most // distant neighbor onto the tangent plane. This replaces the previous // random axis selection and makes the descriptor stable across runs. - x_axis = (*surface_)[nn_indices.back ()].getVector3fMap () - origin; + const auto maxDistIt = std::max_element (nn_dists.begin (), nn_dists.end ()); + const auto maxIndex = nn_indices[std::distance (nn_dists.begin (), maxDistIt)]; + x_axis = (*surface_)[maxIndex].getVector3fMap () - origin; x_axis -= x_axis.dot (normal) * normal; if (x_axis.norm () < 1e-6f) { @@ -281,4 +283,5 @@ pcl::ShapeContext3DEstimation::computeFeature (Poi } } -#define PCL_INSTANTIATE_ShapeContext3DEstimation(T,NT,OutT) template class PCL_EXPORTS pcl::ShapeContext3DEstimation; \ No newline at end of file +#define PCL_INSTANTIATE_ShapeContext3DEstimation(T,NT,OutT) template class PCL_EXPORTS pcl::ShapeContext3DEstimation; + From 233f209720930ce6e4d022554c5dbaabb42a895a Mon Sep 17 00:00:00 2001 From: zatchbell1311-wq Date: Tue, 19 May 2026 14:31:23 +0530 Subject: [PATCH 5/9] ci: retrigger to capture new 3DSC descriptor values From 59d77c49cbd7b1b6665032a94d08afb61b18ec88 Mon Sep 17 00:00:00 2001 From: zatchbell1311-wq Date: Wed, 20 May 2026 20:59:37 +0530 Subject: [PATCH 6/9] fix: update 3DSC test expectations for deterministic azimuth orientation --- test/features/test_shot_estimation.cpp | 55 +++++--------------------- 1 file changed, 10 insertions(+), 45 deletions(-) diff --git a/test/features/test_shot_estimation.cpp b/test/features/test_shot_estimation.cpp index d6777a92685..f5d52ce6642 100644 --- a/test/features/test_shot_estimation.cpp +++ b/test/features/test_shot_estimation.cpp @@ -461,9 +461,6 @@ TYPED_TEST (SHOTShapeTest, Estimation) for (std::size_t i = 0; i < cloud.size (); i+=3) test_indices->push_back (static_cast (i)); - //testSHOTIndicesAndSearchSurface, PointXYZ, Normal, SHOT> (cloud.makeShared (), normals, test_indices); - //testSHOTLocalReferenceFrame, PointXYZ, Normal, SHOT> (cloud.makeShared (), normals, test_indices); - testSHOTIndicesAndSearchSurface (cloud.makeShared (), normals, test_indices); testSHOTLocalReferenceFrame (cloud.makeShared (), normals, test_indices); } @@ -670,9 +667,6 @@ TYPED_TEST (SHOTShapeAndColorTest, Estimation) for (std::size_t i = 0; i < cloud.size (); i+=3) test_indices->push_back (static_cast (i)); - //testSHOTIndicesAndSearchSurface, PointXYZRGBA, Normal, SHOT> (cloudWithColors.makeShared (), normals, test_indices); - //testSHOTLocalReferenceFrame, PointXYZRGBA, Normal, SHOT> (cloudWithColors.makeShared (), normals, test_indices); - testSHOTIndicesAndSearchSurface (cloudWithColors.makeShared (), normals, test_indices); testSHOTLocalReferenceFrame (cloudWithColors.makeShared (), normals, test_indices); } @@ -681,9 +675,6 @@ TYPED_TEST (SHOTShapeAndColorTest, Estimation) TEST (PCL,3DSCEstimation) { float meshRes = 0.002f; - //size_t nBinsL = 4; - //size_t nBinsK = 4; - //size_t nBinsJ = 4; float radius = 20.0f * meshRes; float rmin = radius / 10.0f; float ptDensityRad = radius / 5.0f; @@ -705,9 +696,6 @@ TEST (PCL,3DSCEstimation) sc3d.setInputNormals (normals); sc3d.setSearchMethod (tree); sc3d.setRadiusSearch (radius); - //sc3d.setAzimuthBins (nBinsL); - //sc3d.setElevationBins (nBinsK); - //sc3d.setRadiusBins (nBinsJ); sc3d.setMinimalRadius (rmin); sc3d.setPointDensityRadius (ptDensityRad); // Compute the features @@ -716,16 +704,6 @@ TEST (PCL,3DSCEstimation) EXPECT_EQ (sc3ds->size (), cloud.size ()); // 3DSC does not define a repeatable local RF, we set it to zero to signal it to the user - //EXPECT_NEAR ((*sc3ds)[0].rf[0], 0.2902f, 1e-4f); - //EXPECT_NEAR ((*sc3ds)[0].rf[1], 0.7334f, 1e-4f); - //EXPECT_NEAR ((*sc3ds)[0].rf[2], -0.6146f, 1e-4f); - //EXPECT_NEAR ((*sc3ds)[0].rf[3], 0.9486f, 1e-4f); - //EXPECT_NEAR ((*sc3ds)[0].rf[4], -0.3051f, 1e-4f); - //EXPECT_NEAR ((*sc3ds)[0].rf[5], 0.0838f, 1e-4f); - //EXPECT_NEAR ((*sc3ds)[0].rf[6], -0.1261f, 1e-4f); - //EXPECT_NEAR ((*sc3ds)[0].rf[7], -0.6074f, 1e-4f); - //EXPECT_NEAR ((*sc3ds)[0].rf[8], -0.7843f, 1e-4f); - EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[0], 0.0f); EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[1], 0.0f); EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[2], 0.0f); @@ -736,28 +714,17 @@ TEST (PCL,3DSCEstimation) EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[7], 0.0f); EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[8], 0.0f); - //EXPECT_EQ ((*sc3ds)[0].descriptor.size (), 64); - std::cerr << "sc3ds[94][88]=" << (*sc3ds)[94].descriptor[88] << "\n"; - std::cerr << "sc3ds[94][584]=" << (*sc3ds)[94].descriptor[584] << "\n"; - std::cerr << "sc3ds[94][1106]=" << (*sc3ds)[94].descriptor[1106] << "\n"; - std::cerr << "sc3ds[94][1560]=" << (*sc3ds)[94].descriptor[1560] << "\n"; - std::cerr << "sc3ds[94][1929]=" << (*sc3ds)[94].descriptor[1929] << "\n"; - std::cerr << "sc3ds[108][67]=" << (*sc3ds)[108].descriptor[67] << "\n"; - std::cerr << "sc3ds[108][548]=" << (*sc3ds)[108].descriptor[548] << "\n"; - std::cerr << "sc3ds[108][1091]=" << (*sc3ds)[108].descriptor[1091] << "\n"; - std::cerr << "sc3ds[108][1421]=" << (*sc3ds)[108].descriptor[1421] << "\n"; - std::cerr << "sc3ds[108][1900]=" << (*sc3ds)[108].descriptor[1900] << "\n"; - EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[88], 55.271168f); - EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[584], 71.108765f); - EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[1106], 79.5896f); + EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[88], 27.635588f); + EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[584], 47.405849f); + EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[1106], 39.794807f); EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[1560], 0.f); - EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[1929], 36.063553f); + EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[1929], 36.0636f); - EXPECT_FLOAT_EQ ((*sc3ds)[108].descriptor[67], 0.f); - EXPECT_FLOAT_EQ ((*sc3ds)[108].descriptor[548], 126.14106f); - EXPECT_FLOAT_EQ ((*sc3ds)[108].descriptor[1091], 30.470392f); - EXPECT_FLOAT_EQ ((*sc3ds)[108].descriptor[1421], 38.08799f); - EXPECT_FLOAT_EQ ((*sc3ds)[108].descriptor[1900], 43.799442f); + EXPECT_FLOAT_EQ ((*sc3ds)[108].descriptor[67], 0.f); + EXPECT_FLOAT_EQ ((*sc3ds)[108].descriptor[548], 0.f); + EXPECT_FLOAT_EQ ((*sc3ds)[108].descriptor[1091], 0.f); + EXPECT_FLOAT_EQ ((*sc3ds)[108].descriptor[1421], 0.f); + EXPECT_FLOAT_EQ ((*sc3ds)[108].descriptor[1900], 0.f); // Test results when setIndices and/or setSearchSurface are used pcl::IndicesPtr test_indices (new pcl::Indices (0)); @@ -798,8 +765,6 @@ TEST (PCL, USCEstimation) EXPECT_NEAR ((*uscds)[160].rf[7], 0.105428f, 1e-4f); EXPECT_NEAR ((*uscds)[160].rf[8], -0.972049f, 1e-4f); - //EXPECT_EQ ((*uscds)[0].descriptor.size (), 64); - EXPECT_NEAR ((*uscds)[160].descriptor[355], 123.0733f, 1e-4f); EXPECT_NEAR ((*uscds)[160].descriptor[494], 154.9401f, 1e-4f); EXPECT_NEAR ((*uscds)[160].descriptor[897], 0.f, 1e-4f); @@ -848,4 +813,4 @@ main (int argc, char** argv) testing::InitGoogleTest (&argc, argv); return (RUN_ALL_TESTS ()); } -/* ]--- */ +/* ]--- */ \ No newline at end of file From 4d65387c1f146ec24910a697a5fe5f276cf3f2b9 Mon Sep 17 00:00:00 2001 From: zatchbell1311-wq Date: Thu, 21 May 2026 17:11:04 +0530 Subject: [PATCH 7/9] temp: print rf values and non-zero sc3ds[108] entries --- test/features/test_shot_estimation.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/test/features/test_shot_estimation.cpp b/test/features/test_shot_estimation.cpp index f5d52ce6642..7dea20d97a1 100644 --- a/test/features/test_shot_estimation.cpp +++ b/test/features/test_shot_estimation.cpp @@ -704,21 +704,17 @@ TEST (PCL,3DSCEstimation) EXPECT_EQ (sc3ds->size (), cloud.size ()); // 3DSC does not define a repeatable local RF, we set it to zero to signal it to the user - EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[0], 0.0f); - EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[1], 0.0f); - EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[2], 0.0f); - EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[3], 0.0f); - EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[4], 0.0f); - EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[5], 0.0f); - EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[6], 0.0f); - EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[7], 0.0f); - EXPECT_FLOAT_EQ ((*sc3ds)[0].rf[8], 0.0f); +for (int i = 0; i < 9; i++) + std::cerr << "sc3ds[0].rf[" << i << "]=" << (*sc3ds)[0].rf[i] << "\n"; + for (int idx = 0; idx < 1980; ++idx) + if ((*sc3ds)[108].descriptor[idx] != 0.f) + std::cerr << "sc3ds[108][" << idx << "]=" << (*sc3ds)[108].descriptor[idx] << "\n"; EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[88], 27.635588f); EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[584], 47.405849f); EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[1106], 39.794807f); EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[1560], 0.f); - EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[1929], 36.0636f); + EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[1929], 36.063553f); EXPECT_FLOAT_EQ ((*sc3ds)[108].descriptor[67], 0.f); EXPECT_FLOAT_EQ ((*sc3ds)[108].descriptor[548], 0.f); From 816b23ea2787ed34438db38844895f7ca22d4100 Mon Sep 17 00:00:00 2001 From: zatchbell1311-wq Date: Thu, 28 May 2026 15:34:01 +0530 Subject: [PATCH 8/9] fix: finalize 3DSC test expectations with deterministic RF and descriptor values --- test/features/test_shot_estimation.cpp | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/test/features/test_shot_estimation.cpp b/test/features/test_shot_estimation.cpp index 7dea20d97a1..e895d9256e2 100644 --- a/test/features/test_shot_estimation.cpp +++ b/test/features/test_shot_estimation.cpp @@ -704,11 +704,25 @@ TEST (PCL,3DSCEstimation) EXPECT_EQ (sc3ds->size (), cloud.size ()); // 3DSC does not define a repeatable local RF, we set it to zero to signal it to the user -for (int i = 0; i < 9; i++) - std::cerr << "sc3ds[0].rf[" << i << "]=" << (*sc3ds)[0].rf[i] << "\n"; - for (int idx = 0; idx < 1980; ++idx) - if ((*sc3ds)[108].descriptor[idx] != 0.f) - std::cerr << "sc3ds[108][" << idx << "]=" << (*sc3ds)[108].descriptor[idx] << "\n"; + EXPECT_NEAR ((*sc3ds)[0].rf[0], -0.932515f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[0].rf[1], 0.342274f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[0].rf[2], -0.115173f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[0].rf[3], 0.33841f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[0].rf[4], 0.716871f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[0].rf[5], -0.60957f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[0].rf[6], -0.126076f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[0].rf[7], -0.607408f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[0].rf[8], -0.784321f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[108].descriptor[54], 54.0953f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[108].descriptor[71], 76.176f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[108].descriptor[87], 64.4415f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[108].descriptor[88], 110.542f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[108].descriptor[89], 55.3068f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[108].descriptor[218], 126.141f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[108].descriptor[235], 88.8147f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[108].descriptor[237], 43.5572f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[108].descriptor[238], 56.0383f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[108].descriptor[253], 36.8475f, 1e-4f); EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[88], 27.635588f); EXPECT_FLOAT_EQ ((*sc3ds)[94].descriptor[584], 47.405849f); From c7c55caa1d91bcd883d5312cee2c38072aa68097 Mon Sep 17 00:00:00 2001 From: zatchbell1311-wq Date: Thu, 28 May 2026 17:22:26 +0530 Subject: [PATCH 9/9] fix: use more precise descriptor value per mvieth suggestion --- test/features/test_shot_estimation.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/features/test_shot_estimation.cpp b/test/features/test_shot_estimation.cpp index e895d9256e2..a6156e42a8b 100644 --- a/test/features/test_shot_estimation.cpp +++ b/test/features/test_shot_estimation.cpp @@ -716,7 +716,7 @@ TEST (PCL,3DSCEstimation) EXPECT_NEAR ((*sc3ds)[108].descriptor[54], 54.0953f, 1e-4f); EXPECT_NEAR ((*sc3ds)[108].descriptor[71], 76.176f, 1e-4f); EXPECT_NEAR ((*sc3ds)[108].descriptor[87], 64.4415f, 1e-4f); - EXPECT_NEAR ((*sc3ds)[108].descriptor[88], 110.542f, 1e-4f); + EXPECT_NEAR ((*sc3ds)[108].descriptor[88], 110.54235f, 1e-4f); EXPECT_NEAR ((*sc3ds)[108].descriptor[89], 55.3068f, 1e-4f); EXPECT_NEAR ((*sc3ds)[108].descriptor[218], 126.141f, 1e-4f); EXPECT_NEAR ((*sc3ds)[108].descriptor[235], 88.8147f, 1e-4f);