28 using namespace std::placeholders;
30 using namespace gtsam;
43 static const Vector9
kZeroXi = Vector9::Zero();
45 static const
Point3 V(3, 0.4, -2.2);
46 static const
Point3 P(0.2, 0.7, -2);
48 static const
Point3 V2(-6.5, 3.5, 6.2);
49 static const
Point3 P2(3.5, -8.2, 4.2);
65 std::bind(&NavState::Create, std::placeholders::_1, std::placeholders::_2,
66 std::placeholders::_3,
nullptr,
nullptr,
nullptr);
85 std::bind(&NavState::FromPoseVelocity, std::placeholders::_1,
86 std::placeholders::_2,
nullptr,
nullptr);
100 eH = numericalDerivative11<Rot3, NavState>(
110 eH = numericalDerivative11<Point3, NavState>(
121 eH = numericalDerivative11<Velocity3, NavState>(
132 eH = numericalDerivative11<Velocity3, NavState>(
148 xi << 0.1, 0.1, 0.1, 0.2, 0.3, 0.4, -0.1, -0.2, -0.3;
167 std::placeholders::_2,
nullptr,
nullptr);
172 const Vector9 xi2 = -3.0*
xi;
179 std::bind(&NavState::localCoordinates, std::placeholders::_1,
180 std::placeholders::_2,
nullptr,
nullptr);
206 NavState nav_state_a(Rot3::Identity(), {0.0, 1.0, 2.0}, {1.0, -1.0, 1.0});
207 NavState nav_state_b(Rot3::Rx(
M_PI_4), {0.0, 1.0, 3.0}, {1.0, -1.0, 2.0});
208 NavState nav_state_c(Rot3::Ry(
M_PI / 180.0), {1.0, 1.0, 2.0},
211 auto ab_c = (nav_state_a * nav_state_b) * nav_state_c;
212 auto a_bc = nav_state_a * (nav_state_b * nav_state_c);
220 Matrix actualDcompose1, actualDcompose2;
242 Matrix actualDcompose1, actualDcompose2;
257 NavState nav_state_a(Rot3::Identity(), {0.0, 1.0, 2.0}, {1.0, -1.0, 1.0});
258 NavState nav_state_b(Rot3::Rx(
M_PI_4), {0.0, 1.0, 3.0}, {1.0, -1.0, 2.0});
259 NavState nav_state_c(Rot3::Ry(
M_PI / 180.0), {1.0, 1.0, 2.0},
262 auto a_inv = nav_state_a.
inverse();
263 auto a_a_inv = nav_state_a * a_inv;
266 auto b_inv = nav_state_b.inverse();
267 auto b_b_inv = nav_state_b * b_inv;
271 Matrix actual =
T.inverse(actualDinverse).matrix();
282 Rot3 R = Rot3::Rodrigues(0.3, 0.4, -0.5);
289 T.inverse(actualDinverse);
313 Matrix actualDBetween1, actualDBetween2;
314 actual =
T2.
between(
T3, actualDBetween1, actualDBetween2);
333 static const double dt = 2.0;
336 std::placeholders::_2,
nullptr);
371 double dt = 2.0, dt2 =
dt *
dt;
372 Vector3 n_omega(0.0, 0.0, 1.0), n_t(1.0, 0.0, 0.0), n_v(0.0, 1.0, 0.0);
373 Vector3 n_aCorr1 = -2.0 * n_omega.cross(n_v),
374 n_aCorr2 = -n_omega.cross(n_omega.cross(n_t));
375 Rot3 nRb =
Rot3(-1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0),
379 Vector3 n_dP1e = 0.5 * dt2 * n_aCorr1,
380 n_dP2e = 0.5 * dt2 * (n_aCorr1 + n_aCorr2),
381 n_dV1e =
dt * n_aCorr1,
382 n_dV2e =
dt * (n_aCorr1 + n_aCorr2);
386 b_dP1e = bRn * n_dP1e, b_dP2e = bRn * n_dP2e,
387 b_dV1e = bRn * n_dV1e, b_dV2e = bRn * n_dV2e;
391 Vector9 dXi1a = kState2.coriolis(
dt, n_omega,
false),
392 dXi2a = kState2.coriolis(
dt, n_omega,
true);
393 Vector3 dRa = NavState::dR(dXi1a),
394 b_dP1a = NavState::dP(dXi1a), b_dV1a = NavState::dV(dXi1a),
395 b_dP2a = NavState::dP(dXi2a), b_dV2a = NavState::dV(dXi2a);
408 xi << 0.1, 0.1, 0.1, 0.2, 0.3, 0.4, -0.1, -0.2, -0.3;
411 std::function<Vector9(
const NavState&,
const Vector9&)> correctPIM =
412 std::bind(&NavState::correctPIM, std::placeholders::_1,
425 std::ostringstream
os;
429 expected =
"R: [\n\t1, 0, 0;\n\t0, 1, 0;\n\t0, 0, 1\n]\np: 0 0 0\nv: 0 0 0";
439 std::string
R =
"R: [\n\t1, 0, 0;\n\t0, 1, 0;\n\t0, 0, 1\n]\n";
440 std::string
p =
"p: 1 2 3\n";
441 std::string
v =
"v: 1 2 3\n";
448 #ifndef GTSAM_POSE3_EXPMAP
497 (
Vector(9) << 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0).finished());
536 (
Vector(9) << 0.1, 0.1, 0.1, 0.4, 0.2, 0.8, 0.4, 0.2, 0.8).finished();
546 Vector9
v1(1, 2, 3, 4, 5, 6, 7, 8, 9);
547 Vector9
v2(0.1, -0.5, 1.0, -1.0, 0.5, 2.0, 0.3, -0.2, 0.8);
548 Vector9
v3 = Vector9::Zero();
569 const Vector9
xi(0, 0, 0, 14, 24, 34, 15, 25, 35);
574 const Vector9
xi(0.1, 0.2, 0.3, 0, 0, 0, 0, 0, 0);
579 const Vector9
xi(0.1, 0.2, 0.3, 4, 5, 6, 7, 8, 9);
603 d << 1, 2, 3, 4, 5, 6, 7, 8, 9;
605 const Rot3 R = Rot3::Retract(
d.head<3>());
612 d12 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
619 Vector d12 = Vector9::Constant(0.1);
654 (
Vector(9) << 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9).finished();
675 expected << wh, Z_3x3, Z_3x3, vh, wh, Z_3x3, rh, Z_3x3, wh;
683 w << 0.1, 0.2, 0.3, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0;
686 std::function<
NavState(
const Vector9&)>
f = [](
const Vector9&
w) {
690 numericalDerivative21<NavState, Vector9, OptionalJacobian<9, 9> >(
699 w << 0.1, 0.2, 0.3, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0;
704 return NavState::Logmap(
p);
707 numericalDerivative21<Vector9, NavState, OptionalJacobian<9, 9> >(
708 &NavState::Logmap,
p, {});
716 EXPECT(check_group_invariants(
id,
id));
717 EXPECT(check_group_invariants(
id,
T3));
718 EXPECT(check_group_invariants(
T2,
id));
721 EXPECT(check_manifold_invariants(
id,
id));
722 EXPECT(check_manifold_invariants(
id,
T3));
723 EXPECT(check_manifold_invariants(
T2,
id));