InvariantEKF.h
Go to the documentation of this file.
1 /* ----------------------------------------------------------------------------
2 
3  * GTSAM Copyright 2010, Georgia Tech Research Corporation,
4  * Atlanta, Georgia 30332-0415
5  * All Rights Reserved
6  * Authors: Frank Dellaert, et al. (see THANKS for the full author list)
7 
8  * See LICENSE for the license information
9 
10  * -------------------------------------------------------------------------- */
11 
25 #pragma once
26 
27 #include <gtsam/navigation/LieGroupEKF.h> // Include the base class
28 #include <gtsam/base/Lie.h> // For traits (needed for AdjointMap, Expmap)
29 
30 
31 namespace gtsam {
32 
49  template <typename G>
50  class InvariantEKF : public LieGroupEKF<G> {
51  public:
52  using Base = LieGroupEKF<G>;
54  using Jacobian = typename Base::Jacobian;
57  using Covariance = typename Base::Covariance;
58 
59 
65  InvariantEKF(const G& X0, const Covariance& P0) : Base(X0, P0) {}
66 
67  // We hide state-dependent predict methods from LieGroupEKF by only providing the
68  // invariant predict methods below.
69 
79  void predict(const G& U, const Covariance& Q) {
80  this->X_ = traits<G>::Compose(this->X_, U);
81  const G U_inv = traits<G>::Inverse(U);
82  const Jacobian A = traits<G>::AdjointMap(U_inv);
83  // P_ is Covariance. A is Jacobian. Q is Covariance.
84  // All are Eigen::Matrix<double,Dim,Dim>.
85  this->P_ = A * this->P_ * A.transpose() + Q;
86  }
87 
97  void predict(const TangentVector& u, double dt, const Covariance& Q) {
98  G U;
99  if constexpr (std::is_same_v<G, Matrix>) {
100  // Specialize to Matrix case as its Expmap is not defined.
101  const Matrix& X = static_cast<const Matrix&>(this->X_);
102  U.resize(X.rows(), X.cols());
103  Eigen::Map<Vector>(static_cast<Matrix&>(U).data(), U.size()) = u * dt;
104  }
105  else {
106  U = traits<G>::Expmap(u * dt);
107  }
108  predict(U, Q); // Call the group composition predict
109  }
110 
111  }; // InvariantEKF
112 
113 } // namespace gtsam
gtsam::LieGroupEKF::Covariance
typename Base::Covariance Covariance
Definition: LieGroupEKF.h:56
dt
const double dt
Definition: testVelocityConstraint.cpp:15
gtsam::ManifoldEKF< G >::X_
G X_
Manifold state estimate.
Definition: ManifoldEKF.h:253
gtsam::Matrix
Eigen::MatrixXd Matrix
Definition: base/Matrix.h:39
X
#define X
Definition: icosphere.cpp:20
Q
Quaternion Q
Definition: testQuaternion.cpp:27
gtsam::InvariantEKF::TangentVector
typename Base::TangentVector TangentVector
Definition: InvariantEKF.h:53
LieGroupEKF.h
Extended Kalman Filter derived class for Lie groups G.
Expmap
Pose2_ Expmap(const Vector3_ &xi)
Definition: InverseKinematicsExampleExpressions.cpp:47
A
Definition: test_numpy_dtypes.cpp:300
data
int data[]
Definition: Map_placement_new.cpp:1
gtsam::InvariantEKF::Jacobian
typename Base::Jacobian Jacobian
Jacobian for group-specific operations like AdjointMap. Eigen::Matrix<double, Dim,...
Definition: InvariantEKF.h:55
gtsam::LieGroupEKF
Extended Kalman Filter on a Lie group G, derived from ManifoldEKF.
Definition: LieGroupEKF.h:49
gtsam::LieGroupEKF::TangentVector
typename Base::TangentVector TangentVector
Definition: LieGroupEKF.h:53
gtsam::InvariantEKF::predict
void predict(const TangentVector &u, double dt, const Covariance &Q)
Definition: InvariantEKF.h:97
gtsam::ManifoldEKF< G >::P_
Covariance P_
Covariance (Eigen::Matrix<double, Dim, Dim>).
Definition: ManifoldEKF.h:254
gtsam::InvariantEKF
Left-Invariant Extended Kalman Filter on a Lie group G.
Definition: InvariantEKF.h:50
gtsam::LieGroupEKF::Jacobian
typename Base::Jacobian Jacobian
Jacobian for group operations (Adjoint, Expmap derivatives, F).
Definition: LieGroupEKF.h:55
Eigen::Map
A matrix or vector expression mapping an existing array of data.
Definition: Map.h:94
gtsam::InvariantEKF::InvariantEKF
InvariantEKF(const G &X0, const Covariance &P0)
Definition: InvariantEKF.h:65
Eigen::Quaternion
The quaternion class used to represent 3D orientations and rotations.
Definition: ForwardDeclarations.h:293
Lie.h
Base class and basic functions for Lie types.
gtsam
traits
Definition: ABC.h:17
gtsam::traits
Definition: Group.h:36
G
JacobiRotation< float > G
Definition: Jacobi_makeGivens.cpp:2
gtsam::InvariantEKF::Covariance
typename Base::Covariance Covariance
Covariance matrix type. Eigen::Matrix<double, Dim, Dim>.
Definition: InvariantEKF.h:57
U
@ U
Definition: testDecisionTree.cpp:342
P0
static double P0[5]
Definition: ndtri.c:59
gtsam::InvariantEKF::predict
void predict(const G &U, const Covariance &Q)
Definition: InvariantEKF.h:79


gtsam
Author(s):
autogenerated on Wed May 28 2025 03:01:28