2 GTSAM Copyright 2010-2019, Georgia Tech Research Corporation,
3 Atlanta, Georgia 30332-0415
6 See LICENSE for the license information
9 Author: Frank Dellaert & Duy Nguyen Ta & John Lambert
17 from gtsam
import Point2, Point2Pairs, Pose2
21 """Test selected Pose2 methods."""
24 """Test adjoint method."""
25 xi = np.array([1, 2, 3])
26 expected = np.dot(Pose2.adjointMap_(xi), xi)
27 actual = Pose2.adjoint_(xi, xi)
28 np.testing.assert_array_equal(actual, expected)
31 """Test transformTo method."""
32 pose =
Pose2(2, 4, -math.pi / 2)
33 actual = pose.transformTo(
Point2(3, 2))
39 actual_array = pose.transformTo(points)
40 self.assertEqual(actual_array.shape, (2, 2))
41 expected_array = np.stack([expected, expected]).T
42 np.testing.assert_allclose(actual_array, expected_array, atol=1e-6)
45 """Test transformFrom method."""
46 pose =
Pose2(2, 4, -math.pi / 2)
47 actual = pose.transformFrom(
Point2(2, 1))
53 actual_array = pose.transformFrom(points)
54 self.assertEqual(actual_array.shape, (2, 2))
55 expected_array = np.stack([expected, expected]).T
56 np.testing.assert_allclose(actual_array, expected_array, atol=1e-6)
59 """Ensure estimation of the Pose2 element to align two 2d point clouds succeeds.
61 Two point clouds represent horseshoe-shapes of the same size, just rotated and translated:
87 ab_pairs =
list(zip(pts_a, pts_b))
88 aTb = Pose2.Align(ab_pairs)
89 self.assertIsNotNone(aTb)
91 for pt_a, pt_b
in zip(pts_a, pts_b):
92 pt_a_ = aTb.transformFrom(pt_b)
93 np.testing.assert_allclose(pt_a, pt_a_)
98 aTb = Pose2.Align(A, B)
99 self.assertIsNotNone(aTb)
101 for pt_a, pt_b
in zip(pts_a, pts_b):
102 pt_a_ = aTb.transformFrom(pt_b)
103 np.testing.assert_allclose(pt_a, pt_a_)
106 if __name__ ==
"__main__":