30 using namespace gtsam;
69 #ifdef GTSAM_SLOW_BUT_CORRECT_EXPMAP
101 0.0, 0.0, 0.0).finished();
205 Vector xiprime2 =
T.Adjoint(xi2);
218 Matrix3 expected2 =
T.matrix() *
Pose2::Hat(xi2) *
T.matrix().inverse();
227 #ifdef GTSAM_SLOW_BUT_CORRECT_EXPMAP
299 (
Matrix(2, 3) << -1.0, 0.0, 2.0, 0.0, -1.0, -2.0).finished();
300 Matrix expectedH2 = (
Matrix(2, 2) << 0.0, 1.0, -1.0, 0.0).finished();
303 Matrix actualH1, actualH2;
330 Matrix H1_expected = (
Matrix(2, 3) << 0., -1., -2., 1., 0., -1.).finished();
331 Matrix H2_expected = (
Matrix(2, 2) << 0., -1., 1., 0.).finished();
360 Matrix expectedH2 = I_3x3;
369 Point2 expected_point(-1.0, -1.0);
385 Matrix actualDcompose1, actualDcompose2;
406 Matrix actualDcompose1, actualDcompose2;
442 return (
Vector(3) <<
p.x(),
p.y(), 1.0).finished();
450 gRl(0, 0), gRl(0, 1), gt.x(),
451 gRl(1, 0), gRl(1, 1), gt.y(),
452 0.0, 0.0, 1.0).finished();
465 0.0, 0.0, 1.0).finished(),
469 Point2 x_axis(1,0), y_axis(0,1);
472 1.0, 0.0).finished(),
484 0.0, 0.0, 1.0).finished(),
507 Matrix numericalH = numericalDerivative11<Point2, Pose2>(
f,
pose);
518 std::function<
Rot2(
const Pose2&)>
f = [](
const Pose2&
T) {
return T.rotation(); };
519 Matrix numericalH = numericalDerivative11<Rot2, Pose2>(
f,
pose);
572 p1.between(
p2,actualH1,actualH2);
587 p1.between(
p2,actualH1,actualH2);
617 Matrix expectedH1, actualH1, expectedH2, actualH2;
655 Pose2 xl1(1, 0,
M_PI/2.0),
xl2(1, 1,
M_PI),
xl3(2.0, 2.0,-
M_PI/2.0),
xl4(1, 3, 0);
657 Matrix expectedH1, actualH1, expectedH2, actualH2;
694 Matrix expectedH1, actualH1, expectedH2, actualH2;
703 double actual23 =
x2.
range(
l3, actualH1, actualH2);
713 double actual34 =
x3.
range(
l4, actualH1, actualH2);
731 Pose2 xl1(1, 0,
M_PI/2.0),
xl2(1, 1,
M_PI),
xl3(2.0, 2.0,-
M_PI/2.0),
xl4(1, 3, 0);
733 Matrix expectedH1, actualH1, expectedH2, actualH2;
742 double actual23 =
x2.
range(
xl3, actualH1, actualH2);
752 double actual34 =
x3.
range(
xl4, actualH1, actualH2);
810 struct Triangle {
size_t i_, j_, k_;};
813 const pair<Triangle, Triangle>& trianglePair) {
814 const Triangle& t1 = trianglePair.first, t2 = trianglePair.second;
816 {as[t1.j_], bs[t2.j_]},
817 {as[t1.k_], bs[t2.k_]}};
827 Triangle t1; t1.i_=0; t1.j_=1; t1.k_=2;
828 Triangle t2; t2.i_=1; t2.j_=2; t2.k_=0;
830 std::optional<Pose2> actual = align2(as, bs, {t1, t2});
843 EXPECT(check_group_invariants(
id,
id));
844 EXPECT(check_group_invariants(
id,
T1));
845 EXPECT(check_group_invariants(
T2,
id));
848 EXPECT(check_manifold_invariants(
id,
id));
849 EXPECT(check_manifold_invariants(
id,
T1));
850 EXPECT(check_manifold_invariants(
T2,
id));
880 auto cov = FullCovarianceFromSigmas<Pose2>({0.1, 0.3, 0.7});
884 Vector3{cov(1, 1), cov(0, 0), cov(2, 2)},
885 Vector3{transformed.diagonal()}));
887 Vector3{-cov(1, 0), -cov(2, 1), cov(2, 0)},
888 Vector3{transformed(1, 0), transformed(2, 0), transformed(2, 1)}));
893 auto cov = SingleVariableCovarianceFromSigma<Pose2>(0, 0.1);
901 auto cov = SingleVariableCovarianceFromSigma<Pose2>(1, 0.1);
909 auto cov = SingleVariableCovarianceFromSigma<Pose2>(2, 0.1);
912 Vector3{0., 0.1 * 0.1 * 20. * 20., 0.1 * 0.1},
913 Vector3{transformed.diagonal()}));
915 Vector3{0., 0., -0.1 * 0.1 * 20.},
916 Vector3{transformed(1, 0), transformed(2, 0), transformed(2, 1)}));
921 auto cov = SingleVariableCovarianceFromSigma<Pose2>(0, 0.1);
925 Vector3{cov(1, 1), cov(0, 0), cov(2, 2)},
926 Vector3{transformed.diagonal()}));
929 Vector3{transformed(1, 0), transformed(2, 0), transformed(2, 1)}));
934 auto cov = SingleVariableCovarianceFromSigma<Pose2>(2, 0.1);
937 Vector3{0., 0.1 * 0.1 * 20. * 20., 0.1 * 0.1},
938 Vector3{transformed.diagonal()}));
940 Vector3{0., 0., -0.1 * 0.1 * 20.},
941 Vector3{transformed(1, 0), transformed(2, 0), transformed(2, 1)}));
950 string s =
"Planar Pose";
951 string expected_stdout =
"(1, 2, 0)";
952 string expected1 = expected_stdout +
"\n";
953 string expected2 =
s +
" " + expected1;
969 Vector9 actual_vec =
pose.
vec(actualH);
973 std::function<Vector9(
const Pose2&)>
f = [](
const Pose2&
p) {
return p.vec(); };
974 Matrix93 numericalH = numericalDerivative11<Vector9, Pose2>(
f,
pose);