27 using namespace gtsam;
 
   33   return X.translation(
H);
 
   37 TEST(IEKF_Pose2, PredictUpdateSequence) {
 
   40   Pose2 X0(0.0, 0.0, 0.0);
 
   41   Matrix3 
P0 = Matrix3::Identity() * 0.1;
 
   43   Matrix3 
Q = (
Vector3(0.05, 0.05, 0.001)).asDiagonal();
 
   44   Matrix2 
R = I_2x2 * 0.01;
 
   46   Pose2 U1(1.0, 1.0, 0.5), U2(1.0, 1.0, 0.0);
 
   63   Matrix3 P1_expected = Ad_U1_inv * 
P0 * Ad_U1_inv.transpose() + 
Q;
 
   77   Matrix S1 = H1 * P1_expected * H1.transpose() + 
R;
 
   78   Matrix K1 = P1_expected * H1.transpose() * 
S1.inverse(); 
 
   80   Pose2 X1_updated_expected = X1_expected.
retract(delta_xi1);
 
   81   Matrix3 I_KH1 = Matrix3::Identity() - 
K1 * H1;
 
   82   Matrix3 P1_updated_expected = I_KH1 * P1_expected; 
 
   95   Matrix3 P2_expected = Ad_U2_inv * P1_updated_expected * Ad_U2_inv.transpose() + 
Q;
 
  112   Pose2 X2_updated_expected = X2_expected.
retract(delta_xi2);
 
  113   Matrix3 I_KH2 = Matrix3::Identity() - 
K2 * H2;
 
  114   Matrix3 P2_updated_expected = I_KH2 * P2_expected; 
 
  129       H->resize(1, 
p.size());
 
  130       (*H) << 1.0, 0.0, 0.0, 1.0; 
 
  132     return p(0, 0) + 
p(1, 1); 
 
  136 TEST(InvariantEKF_DynamicMatrix, PredictAndUpdate) {
 
  138   Matrix p0Matrix = (
Matrix(2, 2) << 1.0, 2.0, 3.0, 4.0).finished();
 
  139   Matrix p0Covariance = I_4x4 * 0.01;
 
  140   Vector velocityTangent = (
Vector(4) << 0.5, 0.1, -0.1, -0.5).finished();
 
  143   Matrix R = Matrix::Identity(1, 1) * 0.005;
 
  154   Matrix pCovariancePredictedExpected = p0Covariance + 
Q;
 
  164   double zObserved = zTrue - 0.03; 
 
  171   double innovationY_tangent = zObserved - zPredictionManual;
 
  172   Matrix S = 
H * pCovarianceBeforeUpdate * 
H.transpose() + 
R;
 
  173   Matrix kalmanGainK = pCovarianceBeforeUpdate * 
H.transpose() * 
S.inverse();
 
  174   Vector deltaXiTangent = kalmanGainK * innovationY_tangent;
 
  176   Matrix I_KH = I_4x4 - kalmanGainK * 
H;
 
  177   Matrix pUpdatedCovarianceExpected = I_KH * pCovarianceBeforeUpdate * I_KH.transpose() + kalmanGainK * 
R * kalmanGainK.
transpose();