28#if GTSAM_ENABLE_BOOST_SERIALIZATION
29#include <boost/serialization/base_object.hpp>
48 using LieAlgebra = Matrix5;
49 using Vector25 = Eigen::Matrix<double, 25, 1>;
50 inline constexpr static auto dimension = 9;
58 NavState(
const Base& other) : Base(other) {}
62 : Base(
R, Matrix32{{
t.x(),
v.x()}, {t.y(), v.y()}, {t.z(), v.z()}}) {}
78 OptionalJacobian<9, 3> H2 = {},
82 static NavState FromPoseVelocity(
const Pose3& pose,
const Vector3& vel,
94 const Pose3 pose()
const {
95 return Pose3(attitude(), position());
124 return R_.toQuaternion();
143 friend std::ostream &operator<<(std::ostream &os,
const NavState& state);
146 void print(
const std::string& s =
"")
const;
149 bool equals(
const NavState& other,
double tol = 1e-8)
const;
162 static Eigen::Block<Vector9, 3, 1> dR(Vector9& v) {
163 return v.segment<3>(0);
165 static Eigen::Block<Vector9, 3, 1> dP(Vector9& v) {
166 return v.segment<3>(3);
168 static Eigen::Block<Vector9, 3, 1> dV(Vector9& v) {
169 return v.segment<3>(6);
171 static Eigen::Block<const Vector9, 3, 1> dR(
const Vector9& v) {
172 return v.segment<3>(0);
174 static Eigen::Block<const Vector9, 3, 1> dP(
const Vector9& v) {
175 return v.segment<3>(3);
177 static Eigen::Block<const Vector9, 3, 1> dV(
const Vector9& v) {
178 return v.segment<3>(6);
191 Vector9 localCoordinates(
const NavState& g,
209 Jacobian dIdentity()
const {
210 Jacobian Phi = I_9x9;
211 Phi.template block<3, 3>(3, 6) = I_3x3 * dt;
217 return {X.attitude(), X.position() + X.velocity() * dt, X.velocity()};
223 NavState update(
const Vector3& b_acceleration,
const Vector3& b_omega,
226 OptionalJacobian<9, 3> G2 = {})
const;
228#ifdef GTSAM_ALLOW_DEPRECATED_SINCE_V43
234 Vector9 coriolis(
double dt,
const Vector3& omega,
bool secondOrder =
false,
242 Vector9 correctPIM(
const Vector9& pim,
double dt,
const Vector3& n_gravity,
243 const std::optional<Vector3>& omegaCoriolis,
244 bool use2ndOrderCoriolis =
false,
256 NavState predictPIM(
const Vector9& pim,
double dt,
257 const Vector3& n_gravity,
258 const std::optional<Vector3>& omegaCoriolis,
265#if GTSAM_ENABLE_BOOST_SERIALIZATION
266 friend class boost::serialization::access;
267 template<
class ARCHIVE>
268 void serialize(ARCHIVE & ar,
const unsigned int ) {
269 ar& BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base);
279 const NavState& state,
const Vector9& v,
280 OptionalJacobian<9, 9> H1 = {}, OptionalJacobian<9, 9> H2 = {});
284 const NavState& state,
const NavState& other,
285 OptionalJacobian<9, 9> H1 = {}, OptionalJacobian<9, 9> H2 = {});
Macros for Matrix constants to avoid excessive template instantiation.
Base class and basic functions for Manifold types.
typedef and functions to augment Eigen's VectorXd
Extended pose Lie group SE_k(3), with static or dynamic k.
3D Pose manifold SO(3) x R^3 and group SE(3)
GTSAM_EXPORT Vector9 navStateComponentWiseLocalCoordinates(const NavState &state, const NavState &other, OptionalJacobian< 9, 9 > H1={}, OptionalJacobian< 9, 9 > H2={})
Component-wise NavState local coordinates independent of optimization.
Definition NavState.cpp:181
GTSAM_EXPORT NavState navStateComponentWiseRetract(const NavState &state, const Vector9 &v, OptionalJacobian< 9, 9 > H1={}, OptionalJacobian< 9, 9 > H2={})
Component-wise NavState retraction independent of the optimization chart.
Definition NavState.cpp:147
Global functions in a separate testing namespace.
Definition chartTesting.h:28
Vector3 Point3
As of GTSAM 4, in order to make GTSAM more lean, it is now possible to just typedef Point3 to Vector3...
Definition Point3.h:38
void print(const Matrix &A, const string &s, ostream &stream)
print without optional string, must specify cout yourself
Definition Matrix.cpp:143
Vector3 Velocity3
Velocity is currently typedef'd to Vector3.
Definition Gal3.h:33
A manifold defines a space in which there is a notion of a linear tangent space that can be centered ...
Definition Group.h:37
Both LieGroupTraits and Testable.
Definition MatrixLieGroup.h:350
OptionalJacobian is an Eigen::Ref like class that can take be constructed using either a fixed size o...
Definition OptionalJacobian.h:40
Definition BearingRange.h:36
Definition BearingRange.h:42
Definition BearingRange.h:182
Definition BearingRange.h:196
Rot3 R_
Definition ExtendedPose3.h:80
Matrix3K t_
Definition ExtendedPose3.h:81
ExtendedPose3()
Definition ExtendedPose3.h:99
A 3D pose (R,t) : (Rot3,Point3).
Definition Pose3.h:42
Rot3 is a 3D rotation represented as a rotation matrix if the preprocessor symbol GTSAM_USE_QUATERNIO...
Definition Rot3.h:65
Represents a 3D point on a unit sphere.
Definition Unit3.h:44
Navigation state: Pose (rotation, translation) + velocity Following Barrau20icra, this class belongs ...
Definition NavState.h:45
NavState()
Default constructor.
Definition NavState.h:56
NavState(const Matrix5 &T)
Construct from Matrix5.
Definition NavState.h:73
NavState(const Matrix3 &R, const Vector6 &tv)
Construct from SO(3) and R^6.
Definition NavState.h:69
NavState(const Rot3 &R, const Point3 &t, const Velocity3 &v)
Construct from attitude, position, velocity.
Definition NavState.h:61
Matrix3 R() const
Return rotation matrix. Induces computation in quaternion mode.
Definition NavState.h:119
NavState(const Pose3 &pose, const Velocity3 &v)
Construct from pose and velocity.
Definition NavState.h:65
Vector3 t() const
Return position as Vector3.
Definition NavState.h:127
Vector3 v() const
Return velocity as Vector3.
Definition NavState.h:131
Quaternion quaternion() const
Return quaternion. Induces computation in matrix mode.
Definition NavState.h:123
const Rot3 & rotation(OptionalJacobian< 3, 9 > H={}) const
Syntactic sugar.
Definition NavState.h:156
NavState update(const Vector3 &b_acceleration, const Vector3 &b_omega, const double dt, OptionalJacobian< 9, 9 > F={}, OptionalJacobian< 9, 3 > G1={}, OptionalJacobian< 9, 3 > G2={}) const
Integrate forward in time given angular velocity and acceleration in body frame.
Definition NavState.cpp:223
Definition NavState.h:205
PreintegrationBase is the base class for PreintegratedMeasurements (in ImuFactor) and CombinedPreinte...
Definition PreintegrationBase.h:45