16 #include <mrpt/containers/yaml.h>
17 #include <mrpt/core/exceptions.h>
18 #include <mrpt/maps/CSimplePointsMap.h>
22 int main([[maybe_unused]]
int argc, [[maybe_unused]]
char** argv)
28 const auto inFile =
std::string(
"happy_buddha_decim.xyz.gz");
30 const auto fileFullPath = datasetDir + inFile;
33 mrpt::containers::yaml params;
35 params[
"ncols"] = 100;
43 params[
"sigma"] = 0.1;
51 const auto viewPose = mrpt::poses::CPose3D(-0.2, 0, 0, 0, 0, 0);
52 pts->changeCoordinatesReference(viewPose);
56 std::vector<std::tuple<mrpt::poses::CPose3D, mrpt::poses::CPose3D, double>> testPairs = {
58 {{.0, .0, .0, .0, .0, .0}, {.0, .0, .0, .0, .0, .0}, 1.0},
60 {{1.0, 1.0, .0, .0, .0, .0}, {1.0, 1.0, .0, .0, .0, .0}, 1.0},
62 {{.1, .1, .2, .0, .0, .0}, {.101, .1, .2, .0, .0, .0}, 0.93},
66 for (
const auto& p : testPairs)
68 const mrpt::poses::CPose3D& relPoseGT = std::get<0>(p);
69 const mrpt::poses::CPose3D& relPoseTest = std::get<1>(p);
70 const double expectedVal = std::get<2>(p);
72 auto p1 = mrpt::maps::CSimplePointsMap::Create();
73 p1->insertAnotherMap(pts.get(), mrpt::poses::CPose3D::Identity());
75 auto p2 = mrpt::maps::CSimplePointsMap::Create();
76 p2->insertAnotherMap(pts.get(), relPoseGT);
84 const auto res =
q.evaluate(pcG, pcL, relPoseTest, {});
85 const double quality =
res.quality;
87 if (std::abs(quality - expectedVal) > 0.1)
89 std::cerr <<
"Failed for test case:\n"
90 <<
" relPoseGT : " << relPoseGT <<
"\n"
91 <<
" relPoseTest : " << relPoseTest <<
"\n"
92 <<
" expectedVal : " << expectedVal <<
"\n"
93 <<
" quality : " << quality <<
"\n";
95 throw std::runtime_error(
"test failed (see cerr above)");
99 catch (std::exception& e)
101 std::cerr << mrpt::exception_to_str(e) <<
"\n";