15 #include <mrpt/poses/Lie/SE.h>
19 using namespace mrpt::poses::Lie;
32 pp.global = {1, 0, 0};
33 pp.local = groundTruth.inverseComposePoint(pp.global);
36 auto& pp = p.paired_pt2pt.emplace_back();
37 pp.global = {0, 1, 0};
38 pp.local = groundTruth.inverseComposePoint(pp.global);
41 auto& pp = p.paired_pt2pt.emplace_back();
42 pp.global = {0, 0, 1};
43 pp.local = groundTruth.inverseComposePoint(pp.global);
46 std::cout <<
"Input pairings: " << p.contents_summary() << std::endl;
51 mrpt::containers::yaml solverParams;
52 solverParams[
"maxIterations"] = 25;
53 solverParams[
"innerLoopVerbose"] =
true;
57 for (
int Case = 0; Case < 3; Case++)
63 auto& prior = sc.
prior.emplace();
65 mrpt::poses::CPose3D::FromXYZYawPitchRoll(2.0, 3.0, 4.0, 10.0_deg, 10.0_deg, 10.0_deg);
66 prior.cov_inv.fill(0);
68 mrpt::poses::CPose3D expected;
69 std::function<void(
void)> checkFn;
75 expected = groundTruth;
78 mrpt::poses::Lie::SE<3>::log(result.
optimalPose - expected).norm(), 0.0,
83 expected = prior.mean;
84 for (
int i = 0; i < 3; i++) prior.cov_inv(i, i) = 100.0;
87 for (
int i = 0; i < 3; i++)
88 ASSERT_NEAR_(result.
optimalPose[i], prior.mean[i], 0.05);
92 expected = prior.mean;
93 for (
int i = 3; i < 6; i++) prior.cov_inv(i, i) = 100.0;
96 for (
int i = 3; i < 6; i++)
97 ASSERT_NEAR_(result.
optimalPose[i], prior.mean[i], 0.05);
104 std::cout <<
"Case:" << Case <<
"\n"
105 <<
"Found optimalPose: " << result.
optimalPose << std::endl;
106 std::cout <<
"Expected optimalPose: " << expected << std::endl;
117 int main([[maybe_unused]]
int argc, [[maybe_unused]]
char** argv)
119 using mrpt::poses::CPose3D;
120 using namespace mrpt;
124 test_opt_prior(CPose3D::FromXYZYawPitchRoll(1.0, 2.0, 3.0, 5.0_deg, 15.0_deg, 20.0_deg));
126 catch (std::exception& e)
128 std::cerr << mrpt::exception_to_str(e) <<
"\n";