Merged in feature/Adjoint_tests (pull request #337)
Just making sure Adjoints are correct Approved-by: Andrei Costinescu <andrei.costinescu@yahoo.com>release/4.3a0
commit
bf1edde6e2
|
@ -172,6 +172,35 @@ TEST(Pose2, expmap_c_full)
|
||||||
EXPECT(assert_equal(xi, Pose2::Logmap(expected),1e-6));
|
EXPECT(assert_equal(xi, Pose2::Logmap(expected),1e-6));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
// assert that T*exp(xi)*T^-1 is equal to exp(Ad_T(xi))
|
||||||
|
TEST(Pose2, Adjoint_full) {
|
||||||
|
Pose2 T(1, 2, 3);
|
||||||
|
Pose2 expected = T * Pose2::Expmap(screwPose2::xi) * T.inverse();
|
||||||
|
Vector xiprime = T.Adjoint(screwPose2::xi);
|
||||||
|
EXPECT(assert_equal(expected, Pose2::Expmap(xiprime), 1e-6));
|
||||||
|
|
||||||
|
Vector3 xi2(4, 5, 6);
|
||||||
|
Pose2 expected2 = T * Pose2::Expmap(xi2) * T.inverse();
|
||||||
|
Vector xiprime2 = T.Adjoint(xi2);
|
||||||
|
EXPECT(assert_equal(expected2, Pose2::Expmap(xiprime2), 1e-6));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
// assert that T*wedge(xi)*T^-1 is equal to wedge(Ad_T(xi))
|
||||||
|
TEST(Pose2, Adjoint_hat) {
|
||||||
|
Pose2 T(1, 2, 3);
|
||||||
|
auto hat = [](const Vector& xi) { return ::wedge<Pose2>(xi); };
|
||||||
|
Matrix3 expected = T.matrix() * hat(screwPose2::xi) * T.matrix().inverse();
|
||||||
|
Matrix3 xiprime = hat(T.Adjoint(screwPose2::xi));
|
||||||
|
EXPECT(assert_equal(expected, xiprime, 1e-6));
|
||||||
|
|
||||||
|
Vector3 xi2(4, 5, 6);
|
||||||
|
Matrix3 expected2 = T.matrix() * hat(xi2) * T.matrix().inverse();
|
||||||
|
Matrix3 xiprime2 = hat(T.Adjoint(xi2));
|
||||||
|
EXPECT(assert_equal(expected2, xiprime2, 1e-6));
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
TEST(Pose2, logmap) {
|
TEST(Pose2, logmap) {
|
||||||
Pose2 pose0(M_PI/2.0, Point2(1, 2));
|
Pose2 pose0(M_PI/2.0, Point2(1, 2));
|
||||||
|
|
|
@ -143,6 +143,24 @@ TEST(Pose3, Adjoint_full)
|
||||||
EXPECT(assert_equal(expected3, Pose3::Expmap(xiprime3), 1e-6));
|
EXPECT(assert_equal(expected3, Pose3::Expmap(xiprime3), 1e-6));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ************************************************************************* */
|
||||||
|
// assert that T*wedge(xi)*T^-1 is equal to wedge(Ad_T(xi))
|
||||||
|
TEST(Pose3, Adjoint_hat)
|
||||||
|
{
|
||||||
|
auto hat = [](const Vector& xi) { return ::wedge<Pose3>(xi); };
|
||||||
|
Matrix4 expected = T.matrix() * hat(screwPose3::xi) * T.matrix().inverse();
|
||||||
|
Matrix4 xiprime = hat(T.Adjoint(screwPose3::xi));
|
||||||
|
EXPECT(assert_equal(expected, xiprime, 1e-6));
|
||||||
|
|
||||||
|
Matrix4 expected2 = T2.matrix() * hat(screwPose3::xi) * T2.matrix().inverse();
|
||||||
|
Matrix4 xiprime2 = hat(T2.Adjoint(screwPose3::xi));
|
||||||
|
EXPECT(assert_equal(expected2, xiprime2, 1e-6));
|
||||||
|
|
||||||
|
Matrix4 expected3 = T3.matrix() * hat(screwPose3::xi) * T3.matrix().inverse();
|
||||||
|
Matrix4 xiprime3 = hat(T3.Adjoint(screwPose3::xi));
|
||||||
|
EXPECT(assert_equal(expected3, xiprime3, 1e-6));
|
||||||
|
}
|
||||||
|
|
||||||
/* ************************************************************************* */
|
/* ************************************************************************* */
|
||||||
/** Agrawal06iros version of exponential map */
|
/** Agrawal06iros version of exponential map */
|
||||||
Pose3 Agrawal06iros(const Vector& xi) {
|
Pose3 Agrawal06iros(const Vector& xi) {
|
||||||
|
|
Loading…
Reference in New Issue