ImuFactor.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 
22 #pragma once
23 
24 /* GTSAM includes */
28 #include <gtsam/base/debug.h>
29 
30 namespace gtsam {
31 
32 #ifdef GTSAM_TANGENT_PREINTEGRATION
33 typedef TangentPreintegration PreintegrationType;
34 #else
35 typedef ManifoldPreintegration PreintegrationType;
36 #endif
37 
38 /*
39  * If you are using the factor, please cite:
40  * Christian Forster, Luca Carlone, Frank Dellaert, and Davide Scaramuzza,
41  * "On-Manifold Preintegration for Real-Time Visual-Inertial Odometry", IEEE
42  * Transactions on Robotics, 2017.
43  *
44  * REFERENCES:
45  * [1] G.S. Chirikjian, "Stochastic Models, Information Theory, and Lie Groups",
46  * Volume 2, 2008.
47  * [2] T. Lupton and S.Sukkarieh, "Visual-Inertial-Aided Navigation for
48  * High-Dynamic Motion in Built Environments Without Initial Conditions",
49  * TRO, 28(1):61-76, 2012.
50  * [3] L. Carlone, S. Williams, R. Roberts, "Preintegrated IMU factor:
51  * Computation of the Jacobian Matrices", Tech. Report, 2013.
52  * Available in this repo as "PreintegratedIMUJacobians.pdf".
53  * [4] C. Forster, L. Carlone, F. Dellaert, D. Scaramuzza, "IMU Preintegration
54  * on Manifold for Efficient Visual-Inertial Maximum-a-Posteriori Estimation",
55  * Robotics: Science and Systems (RSS), 2015.
56  */
57 
69 
70  friend class ImuFactor;
71  friend class ImuFactor2;
72 
73 protected:
74 
76 
78 public:
79 
82  resetIntegration();
83  }
84 
90  PreintegratedImuMeasurements(const std::shared_ptr<PreintegrationParams>& p,
91  const imuBias::ConstantBias& biasHat = imuBias::ConstantBias()) :
92  PreintegrationType(p, biasHat) {
93  resetIntegration();
94  }
95 
103  preintMeasCov_(preintMeasCov) {
105  }
106 
109  }
110 
112  void print(const std::string& s = "Preintegrated Measurements:") const override;
113 
115  bool equals(const PreintegratedImuMeasurements& expected, double tol = 1e-9) const;
116 
118  void resetIntegration() override;
119 
130  void integrateMeasurement(const Vector3& measuredAcc,
131  const Vector3& measuredOmega, const double dt) override;
132 
134  void integrateMeasurements(const Matrix& measuredAccs, const Matrix& measuredOmegas,
135  const Matrix& dts);
136 
138  Matrix preintMeasCov() const { return preintMeasCov_; }
139 
140 #ifdef GTSAM_TANGENT_PREINTEGRATION
141  void mergeWith(const PreintegratedImuMeasurements& pim, Matrix9* H1, Matrix9* H2);
143 #endif
144 
145  private:
146 #if GTSAM_ENABLE_BOOST_SERIALIZATION
147  friend class boost::serialization::access;
149  template<class ARCHIVE>
150  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
151  namespace bs = ::boost::serialization;
152  ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(PreintegrationType);
153  ar & BOOST_SERIALIZATION_NVP(preintMeasCov_);
154  }
155 #endif
156 };
157 
170 class GTSAM_EXPORT ImuFactor: public NoiseModelFactorN<Pose3, Vector3, Pose3, Vector3,
171  imuBias::ConstantBias> {
172 private:
173 
174  typedef ImuFactor This;
177 
179 
180 public:
181 
182  // Provide access to the Matrix& version of evaluateError:
183  using Base::evaluateError;
184 
186 #if !defined(_MSC_VER) && __GNUC__ == 4 && __GNUC_MINOR__ > 5
187  typedef typename std::shared_ptr<ImuFactor> shared_ptr;
188 #else
189  typedef std::shared_ptr<ImuFactor> shared_ptr;
190 #endif
191 
194 
205  ImuFactor(Key pose_i, Key vel_i, Key pose_j, Key vel_j, Key bias,
206  const PreintegratedImuMeasurements& preintegratedMeasurements);
207 
208  ~ImuFactor() override {
209  }
210 
212  gtsam::NonlinearFactor::shared_ptr clone() const override;
213 
216  GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const ImuFactor&);
217  void print(const std::string& s = "", const KeyFormatter& keyFormatter =
218  DefaultKeyFormatter) const override;
219  bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
221 
225  return _PIM_;
226  }
227 
230  Vector evaluateError(const Pose3& pose_i, const Vector3& vel_i,
232  const Pose3& pose_j, const Vector3& vel_j,
234  OptionalMatrixType H3, OptionalMatrixType H4, OptionalMatrixType H5) const override;
235 
236 #ifdef GTSAM_TANGENT_PREINTEGRATION
237  static PreintegratedImuMeasurements Merge(
239  const PreintegratedImuMeasurements& pim01,
240  const PreintegratedImuMeasurements& pim12);
241 
243  static shared_ptr Merge(const shared_ptr& f01, const shared_ptr& f12);
244 #endif
245 
246  private:
248 #if GTSAM_ENABLE_BOOST_SERIALIZATION
249  friend class boost::serialization::access;
250  template<class ARCHIVE>
251  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
252  // NoiseModelFactor5 instead of NoiseModelFactorN for backward compatibility
253  ar & boost::serialization::make_nvp("NoiseModelFactor5",
254  boost::serialization::base_object<Base>(*this));
255  ar & BOOST_SERIALIZATION_NVP(_PIM_);
256  }
257 #endif
258 };
259 // class ImuFactor
260 
265 class GTSAM_EXPORT ImuFactor2 : public NoiseModelFactorN<NavState, NavState, imuBias::ConstantBias> {
266 private:
267 
268  typedef ImuFactor2 This;
270 
272 
273 public:
274 
275  // Provide access to the Matrix& version of evaluateError:
276  using Base::evaluateError;
277 
280 
287  ImuFactor2(Key state_i, Key state_j, Key bias,
288  const PreintegratedImuMeasurements& preintegratedMeasurements);
289 
290  ~ImuFactor2() override {
291  }
292 
294  gtsam::NonlinearFactor::shared_ptr clone() const override;
295 
298  GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const ImuFactor2&);
299  void print(const std::string& s = "", const KeyFormatter& keyFormatter =
300  DefaultKeyFormatter) const override;
301  bool equals(const NonlinearFactor& expected, double tol = 1e-9) const override;
303 
307  return _PIM_;
308  }
309 
312  Vector evaluateError(const NavState& state_i, const NavState& state_j,
314  const imuBias::ConstantBias& bias_i, //
316  OptionalMatrixType H3) const override;
317 
318 private:
319 
320 #if GTSAM_ENABLE_BOOST_SERIALIZATION
321 
322  friend class boost::serialization::access;
323  template<class ARCHIVE>
324  void serialize(ARCHIVE & ar, const unsigned int /*version*/) {
325  // NoiseModelFactor3 instead of NoiseModelFactorN for backward compatibility
326  ar & boost::serialization::make_nvp("NoiseModelFactor3",
327  boost::serialization::base_object<Base>(*this));
328  ar & BOOST_SERIALIZATION_NVP(_PIM_);
329  }
330 #endif
331 };
332 // class ImuFactor2
333 
334 template <>
335 struct traits<PreintegratedImuMeasurements> : public Testable<PreintegratedImuMeasurements> {};
336 
337 template <>
338 struct traits<ImuFactor> : public Testable<ImuFactor> {};
339 
340 template <>
341 struct traits<ImuFactor2> : public Testable<ImuFactor2> {};
342 
343 }
gtsam::NonlinearFactor::shared_ptr
std::shared_ptr< This > shared_ptr
Definition: NonlinearFactor.h:79
base
Annotation indicating that a class derives from another given type.
Definition: attr.h:64
gtsam::ImuFactor::Base
NoiseModelFactorN< Pose3, Vector3, Pose3, Vector3, imuBias::ConstantBias > Base
Definition: ImuFactor.h:176
ManifoldPreintegration.h
s
RealScalar s
Definition: level1_cplx_impl.h:126
e
Array< double, 1, 3 > e(1./3., 0.5, 2.)
gtsam::operator<<
std::ostream & operator<<(std::ostream &os, const Dih6 &m)
Definition: testGroup.cpp:109
dt
const double dt
Definition: testVelocityConstraint.cpp:15
biased_x_rotation::bias
const Vector3 bias(1, 2, 3)
gtsam::ImuFactor::shared_ptr
std::shared_ptr< ImuFactor > shared_ptr
Definition: ImuFactor.h:189
gtsam::ImuFactor::ImuFactor
ImuFactor()
Definition: ImuFactor.h:193
gtsam::ImuFactor2::_PIM_
PreintegratedImuMeasurements _PIM_
Definition: ImuFactor.h:271
gtsam::NavState
Definition: NavState.h:38
gtsam::Matrix
Eigen::MatrixXd Matrix
Definition: base/Matrix.h:39
gtsam::ImuFactor2
Definition: ImuFactor.h:265
gtsam::Vector3
Eigen::Vector3d Vector3
Definition: Vector.h:44
gtsam::ImuFactor2::ImuFactor2
ImuFactor2()
Definition: ImuFactor.h:279
gtsam::PreintegratedImuMeasurements::preintMeasCov_
Matrix9 preintMeasCov_
(first-order propagation from measurementCovariance).
Definition: ImuFactor.h:75
os
ofstream os("timeSchurFactors.csv")
testing::integrateMeasurements
void integrateMeasurements(const vector< ImuMeasurement > &measurements, PIM *pim)
Definition: imuFactorTesting.h:59
gtsam::Factor::shared_ptr
std::shared_ptr< Factor > shared_ptr
A shared_ptr to this class.
Definition: Factor.h:76
gtsam::Vector
Eigen::VectorXd Vector
Definition: Vector.h:39
gtsam::PreintegratedImuMeasurements::PreintegratedImuMeasurements
PreintegratedImuMeasurements(const PreintegrationType &base, const Matrix9 &preintMeasCov)
Definition: ImuFactor.h:101
gtsam::DefaultKeyFormatter
KeyFormatter DefaultKeyFormatter
Assign default key formatter.
Definition: Key.cpp:30
gtsam::ImuFactor::_PIM_
PreintegratedImuMeasurements _PIM_
Definition: ImuFactor.h:178
gtsam::PreintegratedImuMeasurements::PreintegratedImuMeasurements
PreintegratedImuMeasurements()
Default constructor for serialization and wrappers.
Definition: ImuFactor.h:81
gtsam::ImuFactor2::~ImuFactor2
~ImuFactor2() override
Definition: ImuFactor.h:290
gtsam::print
void print(const Matrix &A, const string &s, ostream &stream)
Definition: Matrix.cpp:145
biased_x_rotation::measuredOmega
const Vector3 measuredOmega
Definition: testPreintegratedRotation.cpp:35
TangentPreintegration.h
gtsam::KeyFormatter
std::function< std::string(Key)> KeyFormatter
Typedef for a function to format a key, i.e. to convert it to a string.
Definition: Key.h:35
gtsam::Pose3
Definition: Pose3.h:37
gtsam::PreintegratedImuMeasurements::preintMeasCov
Matrix preintMeasCov() const
Return pre-integrated measurement covariance.
Definition: ImuFactor.h:138
gtsam::PreintegratedImuMeasurements
Definition: ImuFactor.h:68
gtsam::NoiseModelFactorN
Definition: NonlinearFactor.h:434
cholesky::expected
Matrix expected
Definition: testMatrix.cpp:916
gtsam::ImuFactor
Definition: ImuFactor.h:170
gtsam::ImuFactor::~ImuFactor
~ImuFactor() override
Definition: ImuFactor.h:208
gtsam::PreintegratedImuMeasurements::PreintegratedImuMeasurements
PreintegratedImuMeasurements(const std::shared_ptr< PreintegrationParams > &p, const imuBias::ConstantBias &biasHat=imuBias::ConstantBias())
Definition: ImuFactor.h:90
gtsam::ImuFactor::This
ImuFactor This
Definition: ImuFactor.h:174
gtsam::PreintegrationType
ManifoldPreintegration PreintegrationType
Definition: CombinedImuFactor.h:33
gtsam::equals
Definition: Testable.h:112
gtsam::ManifoldPreintegration
Definition: ManifoldPreintegration.h:33
NonlinearFactor.h
Non-linear factor base classes.
gtsam::imuBias::ConstantBias
Definition: ImuBias.h:32
gtsam::ManifoldPreintegration::resetIntegration
void resetIntegration() override
Definition: ManifoldPreintegration.cpp:36
gtsam
traits
Definition: SFMdata.h:40
gtsam::Testable
Definition: Testable.h:152
gtsam::traits
Definition: Group.h:36
gtsam::NonlinearFactor
Definition: NonlinearFactor.h:69
p
float * p
Definition: Tutorial_Map_using.cpp:9
gtsam::tol
const G double tol
Definition: Group.h:79
gtsam::OptionalMatrixType
Matrix * OptionalMatrixType
Definition: NonlinearFactor.h:56
common::measuredAcc
static const Vector3 measuredAcc
Definition: testImuFactor.cpp:181
Eigen::Matrix< double, 9, 9 >
gtsam::PreintegratedImuMeasurements::~PreintegratedImuMeasurements
~PreintegratedImuMeasurements() override
Virtual destructor.
Definition: ImuFactor.h:108
gtsam::ImuFactor2::Base
NoiseModelFactorN< NavState, NavState, imuBias::ConstantBias > Base
Definition: ImuFactor.h:269
gtsam::ImuFactor2::This
ImuFactor2 This
Definition: ImuFactor.h:268
gtsam::ImuFactor::preintegratedMeasurements
const PreintegratedImuMeasurements & preintegratedMeasurements() const
Definition: ImuFactor.h:224
gtsam::Key
std::uint64_t Key
Integer nonlinear key type.
Definition: types.h:97
gtsam::ImuFactor2::preintegratedMeasurements
const PreintegratedImuMeasurements & preintegratedMeasurements() const
Definition: ImuFactor.h:306
debug.h
Global debugging flags.


gtsam
Author(s):
autogenerated on Wed Mar 19 2025 03:01:49