My Project 1.0
Holistic Fusion: A Generic Framework for Multimodal Sensor Fusion
Loading...
Searching...
No Matches
NavState.h
Go to the documentation of this file.
1/*
2Copyright 2024 by Julian Nubert, Robotic Systems Lab, ETH Zurich.
3All rights reserved.
4This file is released under the "BSD-3-Clause License".
5Please see the LICENSE file that has been included as part of this package.
6 */
7
8#ifndef INTERFACE_NavState_H
9#define INTERFACE_NavState_H
10
11// C++
12#include <mutex>
13
14// Eigen
15#include <utility>
16
17// Workspace
19
20namespace holistic_fusion {
21
22// NavStae ---------------------------------------------------------------------
23class NavState {
24 public:
25 // Default Constructor
26 NavState() = default;
27
28 // Copy Constructor
29 NavState(const NavState& navState) = default;
30
31 // Regular Constructor
32 NavState(const Eigen::Isometry3d& T_W_Ik, Eigen::Vector3d I_v_W_I, Eigen::Vector3d I_w_W_I, const double timeK)
33 : T_W_Ik_(T_W_Ik), I_v_W_I_(std::move(I_v_W_I)), I_w_W_I_(std::move(I_w_W_I)), timeK_(timeK) {}
34
35 // Getters
36 const Eigen::Isometry3d& getT_W_Ik() const { return T_W_Ik_; }
37 const Eigen::Vector3d& getI_v_W_I() const { return I_v_W_I_; }
38 const Eigen::Vector3d& getI_w_W_I() const { return I_w_W_I_; }
39 double getTimeK() const { return timeK_; }
40
41 protected:
42 // Updates --> Keep all measurements consistent
43 void updateInWorld(const Eigen::Isometry3d& T_W_Ik, const Eigen::Vector3d& I_v_W_I, const Eigen::Vector3d& I_w_W_I, double timeK);
44 void updateYawInWorld(double yaw_W_Ik);
45 void updatePositionInWorld(const Eigen::Vector3d& W_t_W_Ik);
46
47 // General Update
48 virtual void updateLatestMeasurementTimestamp(double timeK);
49
50 protected:
51 // Transformations
52 Eigen::Isometry3d T_W_Ik_ = Eigen::Isometry3d::Identity();
53 // Corrected Velocities
54 Eigen::Vector3d I_v_W_I_ = Eigen::Vector3d::Zero();
55 Eigen::Vector3d I_w_W_I_ = Eigen::Vector3d::Zero();
56 // Time
57 double timeK_;
58};
59
60// SafeNavState ----------------------------------------------------------------
62 public:
63 // Default Constructor
65
66 // Copy Constructor
67 SafeIntegratedNavState(const SafeIntegratedNavState& safeIntegratedNavState) : NavState(safeIntegratedNavState) {
68 T_W_O_ = safeIntegratedNavState.T_W_O_;
69 T_O_Ik_gravityAligned_ = safeIntegratedNavState.T_O_Ik_gravityAligned_;
70 relocalizedWorldToOdom_ = safeIntegratedNavState.relocalizedWorldToOdom_;
71 }
72
73 // Regular Constructor
74 SafeIntegratedNavState(const Eigen::Isometry3d& T_W_O, const Eigen::Isometry3d& T_O_Ik_gravityAligned, const Eigen::Vector3d& I_v_W_I,
75 const Eigen::Vector3d& I_w_W_I, const double timeK, const bool odomNotJump)
76 : NavState(T_W_O * T_O_Ik_gravityAligned, I_v_W_I, I_w_W_I, timeK),
77 T_W_O_(T_W_O),
78 T_O_Ik_gravityAligned_(T_O_Ik_gravityAligned),
79 relocalizedWorldToOdom_(odomNotJump) {}
80
81 SafeIntegratedNavState(const Eigen::Isometry3d& T_W_Ik, const Eigen::Vector3d& I_v_W_I, const Eigen::Vector3d& I_w_W_I,
82 const double timeK)
83 : NavState(T_W_Ik, I_v_W_I, I_w_W_I, timeK), T_O_Ik_gravityAligned_(T_W_Ik), T_W_O_(Eigen::Isometry3d::Identity()) {}
84
85 // Stters/updaters
86 void update(const Eigen::Isometry3d& T_W_O, const Eigen::Isometry3d& T_O_Ik_gravityAligned, const Eigen::Vector3d& I_v_W_I,
87 const Eigen::Vector3d& I_w_W_I, double timeK, bool odomNotJump);
88 void updateInWorld(const Eigen::Isometry3d& T_W_Ik, const Eigen::Vector3d& I_v_W_I, const Eigen::Vector3d& I_w_W_I, const double timeK,
89 bool odomNotJump);
90 void updateYawInWorld(double yaw_W_Ik, bool odomNotJump);
91 void updatePositionInWorld(const Eigen::Vector3d& W_t_W_Ik, bool odomNotJump);
92
93 // General Update
94 void updateLatestMeasurementTimestamp(const double timeK) override;
95
96 // Getters
97 const Eigen::Isometry3d& getT_W_O() const { return T_W_O_; }
98
99 const Eigen::Isometry3d& getT_O_Ik_gravityAligned() const { return T_O_Ik_gravityAligned_; }
100
102
103 private:
104 // Transformations
105 Eigen::Isometry3d T_W_O_ = Eigen::Isometry3d::Identity();
106 Eigen::Isometry3d T_O_Ik_gravityAligned_ = Eigen::Isometry3d::Identity();
107 // Bool
109 // Mutex
111};
112
113// SafeNavStateWithCovarianceAndBias -------------------------------------------
115 public:
116 // Default Constructor
118
119 // Copy Constructor
121
122 // Regular Constructor
123 SafeNavStateWithCovarianceAndBias(const Eigen::Isometry3d& T_W_Ik, const Eigen::Vector3d& I_v_W_I, const Eigen::Vector3d& I_w_W_I,
124 const double timeK, const Eigen::Matrix<double, 6, 6>& poseCovariance,
125 const Eigen::Matrix<double, 3, 3>& velocityCovariance, Eigen::Vector3d accelerometerBias,
126 Eigen::Vector3d gyroscopeBias, const TransformsDictionary<Eigen::Isometry3d>& fixedFrameTransforms,
127 const TransformsDictionary<Eigen::Matrix<double, 6, 6>>& fixedFrameTransformsCovariance,
128 const TransformsDictionary<Eigen::Isometry3d>& landmarkTransforms,
129 const TransformsDictionary<Eigen::Matrix<double, 6, 6>>& landmarkTransformsCovariance)
130 : NavState(T_W_Ik, I_v_W_I, I_w_W_I, timeK),
131 poseCovariance_(poseCovariance),
132 velocityCovariance_(velocityCovariance),
133 accelerometerBias_(std::move(accelerometerBias)),
134 gyroscopeBias_(std::move(gyroscopeBias)),
135 referenceFrameTransforms_(fixedFrameTransforms),
136 referenceFrameTransformsCovariance_(fixedFrameTransformsCovariance),
137 landmarkTransforms_(landmarkTransforms),
138 landmarkTransformsCovariance_(landmarkTransformsCovariance) {}
139
140 // From Optimized State
143 Eigen::Isometry3d(graphState.navState().pose().matrix()), graphState.navState().velocity(),
144 graphState.angularVelocityCorrected(), graphState.ts(), graphState.poseCovariance(), graphState.velocityCovariance(),
145 graphState.imuBias().accelerometer(), graphState.imuBias().gyroscope(), graphState.referenceFrameTransforms(),
146 graphState.referenceFrameTransformsCovariance(), graphState.landmarkTransforms(), graphState.landmarkTransformsCovariance()) {}
147
148 // Getters
149 const Eigen::Matrix<double, 6, 6>& getPoseCovariance() const { return poseCovariance_; } // yaw, pitch, roll, x, y, z
150 const Eigen::Matrix<double, 3, 3>& getVelocityCovariance() const { return velocityCovariance_; }
151 const Eigen::Vector3d& getAccelerometerBias() const { return accelerometerBias_; }
152 const Eigen::Vector3d& getGyroscopeBias() const { return gyroscopeBias_; }
159
160 private:
161 // Covariance
162 Eigen::Matrix<double, 6, 6> poseCovariance_; // x,y,z,roll,pitch,yaw
163 Eigen::Matrix<double, 3, 3> velocityCovariance_;
164 // Bias
165 Eigen::Vector3d accelerometerBias_;
166 Eigen::Vector3d gyroscopeBias_;
167 // Reference Frame Transforms
170 // Landmark Transforms
173};
174
175} // namespace holistic_fusion
176
177#endif // INTERFACE_NavState_H
virtual void updateLatestMeasurementTimestamp(double timeK)
Definition NavState.cpp:67
Eigen::Vector3d I_v_W_I_
Definition NavState.h:54
double getTimeK() const
Definition NavState.h:39
void updatePositionInWorld(const Eigen::Vector3d &W_t_W_Ik)
Definition NavState.cpp:63
const Eigen::Vector3d & getI_w_W_I() const
Definition NavState.h:38
const Eigen::Vector3d & getI_v_W_I() const
Definition NavState.h:37
Eigen::Isometry3d T_W_Ik_
Definition NavState.h:52
NavState(const NavState &navState)=default
Eigen::Vector3d I_w_W_I_
Definition NavState.h:55
void updateYawInWorld(double yaw_W_Ik)
Definition NavState.cpp:54
void updateInWorld(const Eigen::Isometry3d &T_W_Ik, const Eigen::Vector3d &I_v_W_I, const Eigen::Vector3d &I_w_W_I, double timeK)
Definition NavState.cpp:17
NavState(const Eigen::Isometry3d &T_W_Ik, Eigen::Vector3d I_v_W_I, Eigen::Vector3d I_w_W_I, const double timeK)
Definition NavState.h:32
const Eigen::Isometry3d & getT_W_Ik() const
Definition NavState.h:36
SafeIntegratedNavState(const SafeIntegratedNavState &safeIntegratedNavState)
Definition NavState.h:67
void update(const Eigen::Isometry3d &T_W_O, const Eigen::Isometry3d &T_O_Ik_gravityAligned, const Eigen::Vector3d &I_v_W_I, const Eigen::Vector3d &I_w_W_I, double timeK, bool odomNotJump)
Definition NavState.cpp:72
void updateYawInWorld(double yaw_W_Ik, bool odomNotJump)
Definition NavState.cpp:95
const Eigen::Isometry3d & getT_O_Ik_gravityAligned() const
Definition NavState.h:99
const Eigen::Isometry3d & getT_W_O() const
Definition NavState.h:97
SafeIntegratedNavState(const Eigen::Isometry3d &T_W_Ik, const Eigen::Vector3d &I_v_W_I, const Eigen::Vector3d &I_w_W_I, const double timeK)
Definition NavState.h:81
void updateLatestMeasurementTimestamp(const double timeK) override
Definition NavState.cpp:121
SafeIntegratedNavState(const Eigen::Isometry3d &T_W_O, const Eigen::Isometry3d &T_O_Ik_gravityAligned, const Eigen::Vector3d &I_v_W_I, const Eigen::Vector3d &I_w_W_I, const double timeK, const bool odomNotJump)
Definition NavState.h:74
void updateInWorld(const Eigen::Isometry3d &T_W_Ik, const Eigen::Vector3d &I_v_W_I, const Eigen::Vector3d &I_w_W_I, const double timeK, bool odomNotJump)
Definition NavState.cpp:86
void updatePositionInWorld(const Eigen::Vector3d &W_t_W_Ik, bool odomNotJump)
Definition NavState.cpp:108
const TransformsDictionary< Eigen::Matrix< double, 6, 6 > > & getLandmarkTransformsCovariance() const
Definition NavState.h:158
const Eigen::Vector3d & getGyroscopeBias() const
Definition NavState.h:152
const TransformsDictionary< Eigen::Isometry3d > & getReferenceFrameTransforms() const
Definition NavState.h:153
const TransformsDictionary< Eigen::Isometry3d > & getLandmarkTransforms() const
Definition NavState.h:157
const Eigen::Matrix< double, 6, 6 > & getPoseCovariance() const
Definition NavState.h:149
holistic_fusion::TransformsDictionary< Eigen::Matrix< double, 6, 6 > > landmarkTransformsCovariance_
Definition NavState.h:172
const Eigen::Vector3d & getAccelerometerBias() const
Definition NavState.h:151
holistic_fusion::TransformsDictionary< Eigen::Isometry3d > landmarkTransforms_
Definition NavState.h:171
holistic_fusion::TransformsDictionary< Eigen::Matrix< double, 6, 6 > > referenceFrameTransformsCovariance_
Definition NavState.h:169
SafeNavStateWithCovarianceAndBias(const GraphState &graphState)
Definition NavState.h:141
holistic_fusion::TransformsDictionary< Eigen::Isometry3d > referenceFrameTransforms_
Definition NavState.h:168
Eigen::Matrix< double, 6, 6 > poseCovariance_
Definition NavState.h:162
SafeNavStateWithCovarianceAndBias(const SafeNavStateWithCovarianceAndBias &navState)=default
SafeNavStateWithCovarianceAndBias(const Eigen::Isometry3d &T_W_Ik, const Eigen::Vector3d &I_v_W_I, const Eigen::Vector3d &I_w_W_I, const double timeK, const Eigen::Matrix< double, 6, 6 > &poseCovariance, const Eigen::Matrix< double, 3, 3 > &velocityCovariance, Eigen::Vector3d accelerometerBias, Eigen::Vector3d gyroscopeBias, const TransformsDictionary< Eigen::Isometry3d > &fixedFrameTransforms, const TransformsDictionary< Eigen::Matrix< double, 6, 6 > > &fixedFrameTransformsCovariance, const TransformsDictionary< Eigen::Isometry3d > &landmarkTransforms, const TransformsDictionary< Eigen::Matrix< double, 6, 6 > > &landmarkTransformsCovariance)
Definition NavState.h:123
const TransformsDictionary< Eigen::Matrix< double, 6, 6 > > & getReferenceFrameTransformsCovariance() const
Definition NavState.h:154
Eigen::Matrix< double, 3, 3 > velocityCovariance_
Definition NavState.h:163
const Eigen::Matrix< double, 3, 3 > & getVelocityCovariance() const
Definition NavState.h:150