gtsam  4.0.0
gtsam
PreintegrationBase.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 
28 
29 #include <iosfwd>
30 
31 namespace gtsam {
32 
33 #ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V4
34 struct PoseVelocityBias {
36  Pose3 pose;
37  Vector3 velocity;
38  imuBias::ConstantBias bias;
39  PoseVelocityBias(const Pose3& _pose, const Vector3& _velocity,
40  const imuBias::ConstantBias _bias) :
41  pose(_pose), velocity(_velocity), bias(_bias) {
42  }
43  PoseVelocityBias(const NavState& navState, const imuBias::ConstantBias _bias) :
44  pose(navState.pose()), velocity(navState.velocity()), bias(_bias) {
45  }
46  NavState navState() const {
47  return NavState(pose, velocity);
48  }
49 };
50 #endif
51 
59  public:
62 
63  protected:
64 
67 #ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V4
68  mutable
69 #endif
70  boost::shared_ptr<Params> p_;
71 
73  Bias biasHat_;
74 
76  double deltaTij_;
77 
80 
81 public:
84 
90  PreintegrationBase(const boost::shared_ptr<Params>& p,
91  const imuBias::ConstantBias& biasHat = imuBias::ConstantBias());
92 
94 
98  virtual void resetIntegration()=0;
99 
103  void resetIntegrationAndSetBias(const Bias& biasHat);
104 
106  bool matchesParamsWith(const PreintegrationBase& other) const {
107  return p_.get() == other.p_.get();
108  }
109 
111  const boost::shared_ptr<Params>& params() const {
112  return p_;
113  }
114 
116  const Params& p() const {
117  return *boost::static_pointer_cast<Params>(p_);
118  }
119 
120 #ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V4
121  void set_body_P_sensor(const Pose3& body_P_sensor) {
122  p_->body_P_sensor = body_P_sensor;
123  }
124 #endif
125 
129  const imuBias::ConstantBias& biasHat() const { return biasHat_; }
130  double deltaTij() const { return deltaTij_; }
131 
132  virtual Vector3 deltaPij() const=0;
133  virtual Vector3 deltaVij() const=0;
134  virtual Rot3 deltaRij() const=0;
135  virtual NavState deltaXij() const=0;
136 
137  // Exposed for MATLAB
138  Vector6 biasHatVector() const { return biasHat_.vector(); }
140 
143  GTSAM_EXPORT friend std::ostream& operator<<(std::ostream& os, const PreintegrationBase& pim);
144  virtual void print(const std::string& s) const;
146 
149 
153  std::pair<Vector3, Vector3> correctMeasurementsBySensorPose(
154  const Vector3& unbiasedAcc, const Vector3& unbiasedOmega,
155  OptionalJacobian<3, 3> correctedAcc_H_unbiasedAcc = boost::none,
156  OptionalJacobian<3, 3> correctedAcc_H_unbiasedOmega = boost::none,
157  OptionalJacobian<3, 3> correctedOmega_H_unbiasedOmega = boost::none) const;
158 
162  virtual void update(const Vector3& measuredAcc, const Vector3& measuredOmega,
163  const double dt, Matrix9* A, Matrix93* B, Matrix93* C)=0;
164 
166  virtual void integrateMeasurement(const Vector3& measuredAcc,
167  const Vector3& measuredOmega, const double dt);
168 
171  virtual Vector9 biasCorrectedDelta(const imuBias::ConstantBias& bias_i,
172  OptionalJacobian<9, 6> H = boost::none) const=0;
173 
175  NavState predict(const NavState& state_i, const imuBias::ConstantBias& bias_i,
176  OptionalJacobian<9, 9> H1 = boost::none,
177  OptionalJacobian<9, 6> H2 = boost::none) const;
178 
180  Vector9 computeError(const NavState& state_i, const NavState& state_j,
181  const imuBias::ConstantBias& bias_i,
183  OptionalJacobian<9, 6> H3) const;
184 
186  Vector9 computeErrorAndJacobians(const Pose3& pose_i, const Vector3& vel_i,
187  const Pose3& pose_j, const Vector3& vel_j,
189  boost::none, OptionalJacobian<9, 3> H2 = boost::none,
190  OptionalJacobian<9, 6> H3 = boost::none, OptionalJacobian<9, 3> H4 =
191  boost::none, OptionalJacobian<9, 6> H5 = boost::none) const;
192 
193 #ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V4
194 
198  PoseVelocityBias predict(const Pose3& pose_i, const Vector3& vel_i,
199  const imuBias::ConstantBias& bias_i, const Vector3& n_gravity,
200  const Vector3& omegaCoriolis, const bool use2ndOrderCoriolis = false) const;
201 
203 #endif
204 
206 };
207 
208 }
boost::shared_ptr< Params > p_
Parameters.
Definition: PreintegrationBase.h:70
Definition: ImuBias.h:30
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition: Matrix.cpp:140
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition: OptionalJacobian.h:39
Definition: Pose3.h:37
Navigation state composing of attitude, position, and velocity.
Navigation state: Pose (rotation, translation) + velocity NOTE(frank): it does not make sense to make...
Definition: NavState.h:34
Parameters for pre-integration: Usage: Create just a single Params and pass a shared pointer to the c...
Definition: PreintegrationParams.h:26
boost::optional< Pose3 > body_P_sensor
The pose of the sensor in the body frame.
Definition: PreintegratedRotation.h:34
Definition: Rot3.h:56
Bias biasHat_
Acceleration and gyro bias used for preintegration.
Definition: PreintegrationBase.h:73
PreintegrationBase is the base class for PreintegratedMeasurements (in ImuFactor) and CombinedPreinte...
Definition: PreintegrationBase.h:58
const boost::shared_ptr< Params > & params() const
shared pointer to params
Definition: PreintegrationBase.h:111
double deltaTij_
Time interval from i to j.
Definition: PreintegrationBase.h:76
bool matchesParamsWith(const PreintegrationBase &other) const
check parameters equality: checks whether shared pointer points to same Params object.
Definition: PreintegrationBase.h:106
Vector6 vector() const
return the accelerometer and gyro biases in a single vector
Definition: ImuBias.h:52
const Params & p() const
const reference to params
Definition: PreintegrationBase.h:116
Global functions in a separate testing namespace.
Definition: chartTesting.h:28
PreintegrationBase()
Default constructor for serialization.
Definition: PreintegrationBase.h:79