My Project 1.0
Holistic Fusion: A Generic Framework for Multimodal Sensor Fusion
Loading...
Searching...
No Matches
DynamicFactorGraphStateKey.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// Workspace
11
12#ifndef FACTOR_GRAPH_STATE_KEY_H
13#define FACTOR_GRAPH_STATE_KEY_H
14
15// Output
16#define REGULAR_COUT std::cout << YELLOW_START << "GMSF-FactorGraphStateKey" << COLOR_END
17
18namespace holistic_fusion {
19
20template <class GTSAM_TRANSFORM_TYPE> // e.g. gtsam::Pose3, gtsam::Point3
22 public:
23 // Constructor
24 DynamicFactorGraphStateKey(const gtsam::Key& key, const double time, const int numberStepsOptimized,
25 const GTSAM_TRANSFORM_TYPE& approximateTransformationBeforeOptimization, DynamicVariableType variableType,
26 const std::string& frame1, const std::string& frame2)
27 : key_(key),
28 time_(time),
29 numberStepsOptimized_(numberStepsOptimized),
30 approximateTransformationBeforeOptimization_(approximateTransformationBeforeOptimization),
31 variableType_(std::move(variableType)),
33 frame1_(frame1),
34 frame2_(frame2) {}
35
36 // Default constructor for creating identity object
38
39 // Destructor
41
42 // Accessors
43 const gtsam::Key key() const { return key_; }
45 double getTime() const { return time_; }
46 [[nodiscard]] GTSAM_TRANSFORM_TYPE getApproximateTransformationBeforeOptimization() const {
48 }
49 [[nodiscard]] Eigen::Vector3d getReferenceFrameKeyframePosition() const { return variableType_.getReferenceFrameKeyframePosition(); }
50 [[nodiscard]] double getVariableCreationTime() const { return variableType_.getVariableCreationTime(); }
51 double computeVariableAge(const double currentTime) const { return currentTime - time_; }
52 double computeKeyframeAge(const double currentTime) const { return currentTime - variableType_.getVariableCreationTime(); }
53 [[nodiscard]] const std::string& getFrame1() const { return frame1_; }
54 [[nodiscard]] const std::string& getFrame2() const { return frame2_; }
55 [[nodiscard]] const DynamicVariableTypeEnum& getVariableTypeEnum() const { return variableType_.getVariableTypeEnum(); }
56 [[nodiscard]] bool isVariableActive() const { return isVariableActive_; }
57 [[nodiscard]] const GTSAM_TRANSFORM_TYPE& getTransformationAfterOptimization() const { return transformationAfterOptimization_; }
58 [[nodiscard]] const gtsam::Matrix66& getCovarianceAfterOptimization() const { return covarianceAfterOptimization_; }
59
60 // Setters
62 void setTimeStamp(const double time) { time_ = time; }
64 void setVariableCreationTime(const double variableCreationTime) { variableType_.setVariableCreationTime(variableCreationTime); }
65
68 isVariableActive_ = true;
69 REGULAR_COUT << " Activated Variable at Key " << gtsam::Symbol(key_) << std::endl;
70 }
72 isVariableActive_ = false;
73 REGULAR_COUT << " Deactivated Variable at Key " << gtsam::Symbol(key_) << " between " << frame1_ << " and " << frame2_ << std::endl;
74 }
75
78
79 void setApproximateTransformationBeforeOptimization(const gtsam::Pose3& approximateTransformationBeforeOptimization) {
80 approximateTransformationBeforeOptimization_ = approximateTransformationBeforeOptimization;
81 }
82
83 void updateLatestEstimate(const GTSAM_TRANSFORM_TYPE& transformationAfterOptimization,
84 const gtsam::Matrix66& covarianceAfterOptimization) {
85 transformationAfterOptimization_ = transformationAfterOptimization;
86 covarianceAfterOptimization_ = covarianceAfterOptimization;
87 }
88
89 private:
90 // Members
91 gtsam::Key key_ = -1;
92 double time_ = 0.0;
93
94 // Variable Type and status
96 bool isVariableActive_ = true; // Always active in the beginning when added
97
98 // Optimization
103
104 // Frames
105 std::string frame1_ = "";
106 std::string frame2_ = "";
107};
108
109} // namespace holistic_fusion
110
111#endif // FACTOR_GRAPH_STATE_KEY_H
#define REGULAR_COUT
void setApproximateTransformationBeforeOptimization(const gtsam::Pose3 &approximateTransformationBeforeOptimization)
GTSAM_TRANSFORM_TYPE getApproximateTransformationBeforeOptimization() const
double computeKeyframeAge(const double currentTime) const
void setVariableCreationTime(const double variableCreationTime)
double computeVariableAge(const double currentTime) const
const gtsam::Matrix66 & getCovarianceAfterOptimization() const
void updateLatestEstimate(const GTSAM_TRANSFORM_TYPE &transformationAfterOptimization, const gtsam::Matrix66 &covarianceAfterOptimization)
const DynamicVariableTypeEnum & getVariableTypeEnum() const
const GTSAM_TRANSFORM_TYPE & getTransformationAfterOptimization() const
DynamicFactorGraphStateKey(const gtsam::Key &key, const double time, const int numberStepsOptimized, const GTSAM_TRANSFORM_TYPE &approximateTransformationBeforeOptimization, DynamicVariableType variableType, const std::string &frame1, const std::string &frame2)
static DynamicVariableType Global(const double variableCreationTime)