My Project 1.0
Holistic Fusion: A Generic Framework for Multimodal Sensor Fusion
Loading...
Searching...
No Matches
GraphState.hpp
Go to the documentation of this file.
1/*
2Copyright 2022 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 GRAPH_STATE_HPP_
9#define GRAPH_STATE_HPP_
10
11// C++
12#include <mutex>
13
14// GTSAM
15#include <gtsam/navigation/ImuBias.h>
16#include <gtsam/navigation/NavState.h>
17
18// Workspace
20
21namespace holistic_fusion {
22
23// Class defining Robot State
25 public:
27 : referenceFrameTransforms_(Eigen::Isometry3d::Identity()),
28 referenceFrameTransformsCovariance_(Eigen::Matrix<double, 6, 6>::Zero()),
29 landmarkTransforms_(Eigen::Isometry3d::Identity()),
30 landmarkTransformsCovariance_(Eigen::Matrix<double, 6, 6>::Zero()){}; // Constructor
31 ~GraphState(){}; // Destructor
32
33 // Accessors
34 bool isOptimized() const { return isOptimizedStatus_; }
35 gtsam::Key key() const { return key_; }
36 double ts() const { return ts_; }
37 const gtsam::NavState& navState() const { return navState_; }
38 const gtsam::Vector3& angularVelocityCorrected() const { return correctedAngularVelocity_; }
39 const gtsam::imuBias::ConstantBias& imuBias() const { return imuBias_; }
42 const auto& landmarkTransforms() const { return landmarkTransforms_; }
44 const gtsam::Matrix66& poseCovariance() const { return poseCovariance_; }
45 const gtsam::Matrix33& velocityCovariance() const { return velocityCovariance_; }
46
47 // Status
49
50 // Update state Graph Key and Timestamp
51 void updateKeyAndTimestamp(const gtsam::Key key, const double ts) {
52 std::lock_guard<std::mutex> lock(stateMutex_);
53 key_ = key;
54 ts_ = ts;
55 }
56
57 // Update state Graph Key, Timestamp and NavState(Pose+Velocity)
58 void updateNavState(const gtsam::Key key, const double ts, const gtsam::NavState& navState,
59 const gtsam::Vector3& correctedAngularVelocity) {
60 std::lock_guard<std::mutex> lock(stateMutex_);
61 key_ = key;
62 ts_ = ts;
64 correctedAngularVelocity_ = correctedAngularVelocity;
65 }
66
67 // Update state Graph Key, Timestamp and IMU Bias estimate
68 void updateImuBias(const gtsam::Key key, const double ts, const gtsam::imuBias::ConstantBias& imuBias) {
69 std::lock_guard<std::mutex> lock(stateMutex_);
70 key_ = key;
71 ts_ = ts;
73 }
74
75 // Update state Graph Key, Timestamp, NavState(Pose+Velocity) and IMU Bias estimate
76 void updateNavStateAndBias(const gtsam::Key key, const double ts, const gtsam::NavState& navState,
77 const gtsam::Vector3& correctedAngularVelocity, const gtsam::imuBias::ConstantBias& imuBias) {
78 std::lock_guard<std::mutex> lock(stateMutex_);
79 key_ = key;
80 ts_ = ts;
82 correctedAngularVelocity_ = correctedAngularVelocity;
84 }
85
87 std::lock_guard<std::mutex> lock(stateMutex_);
88 referenceFrameTransforms_ = fixedFrameTransforms;
89 }
90
92 const holistic_fusion::TransformsDictionary<Eigen::Matrix<double, 6, 6>>& fixedFrameTransformsCovariance) {
93 std::lock_guard<std::mutex> lock(stateMutex_);
94 referenceFrameTransformsCovariance_ = fixedFrameTransformsCovariance;
95 }
96
101
107
108 void updateCovariances(const gtsam::Matrix66& poseCovariance, const gtsam::Matrix33& velocityCovariance) {
109 std::lock_guard<std::mutex> lock(stateMutex_);
112 }
113
114 // Overload assignment operator
116 this->key_ = other.key_;
117 this->ts_ = other.ts_;
118 this->navState_ = other.navState_;
119 this->imuBias_ = other.imuBias_;
120 return *this;
121 }
122
123 private:
124 // Status
125 bool isOptimizedStatus_ = false;
126 // Keys and Times
127 gtsam::Key key_ = 0; // key
128 double ts_ = 0.0; // timestamp
129 // Objects
130 gtsam::NavState navState_; // pose, velocity
131 Eigen::Vector3d correctedAngularVelocity_; // angular velocity
132 gtsam::imuBias::ConstantBias imuBias_; // imu bias
133 // Transformations
136 referenceFrameTransformsCovariance_; // reference frame transforms covariance
139 // Covariances
140 gtsam::Matrix66 poseCovariance_; // pose covariance
141 gtsam::Matrix33 velocityCovariance_; // velocity covariance
142 // Mutex
143 std::mutex stateMutex_;
144};
145
146} // namespace holistic_fusion
147
148#endif // GRAPH_STATE_HPP_
void updateNavStateAndBias(const gtsam::Key key, const double ts, const gtsam::NavState &navState, const gtsam::Vector3 &correctedAngularVelocity, const gtsam::imuBias::ConstantBias &imuBias)
const gtsam::Matrix66 & poseCovariance() const
const auto & landmarkTransformsCovariance() const
void updateReferenceFrameTransformsCovariance(const holistic_fusion::TransformsDictionary< Eigen::Matrix< double, 6, 6 > > &fixedFrameTransformsCovariance)
const gtsam::Matrix33 & velocityCovariance() const
Eigen::Vector3d correctedAngularVelocity_
void updateNavState(const gtsam::Key key, const double ts, const gtsam::NavState &navState, const gtsam::Vector3 &correctedAngularVelocity)
const auto & landmarkTransforms() const
holistic_fusion::TransformsDictionary< Eigen::Isometry3d > landmarkTransforms_
gtsam::Key key() const
const gtsam::Vector3 & angularVelocityCorrected() const
void updateImuBias(const gtsam::Key key, const double ts, const gtsam::imuBias::ConstantBias &imuBias)
const auto & referenceFrameTransforms() const
void updateKeyAndTimestamp(const gtsam::Key key, const double ts)
holistic_fusion::TransformsDictionary< Eigen::Isometry3d > referenceFrameTransforms_
void updateLandmarkTransformsCovariance(const holistic_fusion::TransformsDictionary< Eigen::Matrix< double, 6, 6 > > &landmarkTransformsCovariance)
gtsam::imuBias::ConstantBias imuBias_
const gtsam::NavState & navState() const
void updateReferenceFrameTransforms(const holistic_fusion::TransformsDictionary< Eigen::Isometry3d > &fixedFrameTransforms)
const gtsam::imuBias::ConstantBias & imuBias() const
gtsam::Matrix33 velocityCovariance_
gtsam::Matrix66 poseCovariance_
const auto & referenceFrameTransformsCovariance() const
void updateCovariances(const gtsam::Matrix66 &poseCovariance, const gtsam::Matrix33 &velocityCovariance)
holistic_fusion::TransformsDictionary< Eigen::Matrix< double, 6, 6 > > referenceFrameTransformsCovariance_
holistic_fusion::TransformsDictionary< Eigen::Matrix< double, 6, 6 > > landmarkTransformsCovariance_
GraphState & operator=(GraphState &other)
void updateLandmarkTransforms(const holistic_fusion::TransformsDictionary< Eigen::Isometry3d > &landmarkTransforms)