8#ifndef GMSF_UNARY_EXPRESSION_LANDMARK_H
9#define GMSF_UNARY_EXPRESSION_LANDMARK_H
15#include <gtsam/base/types.h>
23template <
class GTSAM_MEASUREMENT_TYPE,
char CALIBRATION_CHAR>
28 const std::string& imuFrameName,
const Eigen::Isometry3d& T_I_sensorFrame,
const long landmarkCreationCounter)
30 imuFrameName, T_I_sensorFrame),
45 exp_T_W_I_ = gtsam::Expression<gtsam::Pose3>(gtsam::symbol_shorthand::X(closestGeneralKey));
50 const gtsam::NavState& W_currentPropagatedState,
51 const bool centerMeasurementsAtKeyframePositionBeforeAlignmentFlag)
final {
53 throw std::logic_error(
"GmsfUnaryExpressionLandmark: transformStateFromWorldToFixedFrame not implemented for Landmark Measurements.");
58 const gtsam::NavState& W_currentPropagatedState)
final {
60 std::lock_guard<std::mutex> modifyGraphKeysLock(gtsamDynamicExpressionKeys.get<gtsam::Pose3>().mutex());
70 bool newGraphKeyAddedFlag =
false;
74 this->gmsfBaseUnaryMeasurementPtr_->timeK(), gtsam::Pose3(gtsam::Rot3::Identity(), W_t_W_L_initial), variableType);
79 if (newGraphKeyAddedFlag) {
80 std::ignore = gtsamDynamicExpressionKeys.get<gtsam::Pose3>().removeOrDeactivateTransform(
85 const gtsam::Point3_ exp_W_t_W_L = gtsam::Point3_(newGraphKey.
key());
91 if (newGraphKeyAddedFlag) {
const gtsam::Key key() const
bool isVariableActive() const
virtual gtsam::Point3 computeW_t_W_L_initial(const gtsam::NavState &W_currentPropagatedState)=0
std::shared_ptr< UnaryMeasurementLandmark > gmsfUnaryLandmarkMeasurementPtr_
void generateImuStateInWorldFrameAtKey(const gtsam::Key &closestGeneralKey) final
GmsfUnaryExpressionLandmark(const std::shared_ptr< UnaryMeasurementLandmark > &gmsfUnaryLandmarkMeasurementPtr, const std::string &imuFrameName, const Eigen::Isometry3d &T_I_sensorFrame, const long landmarkCreationCounter)
~GmsfUnaryExpressionLandmark()=default
void transformImuStateFromWorldToReferenceFrame(DynamicDictionaryContainer >samDynamicExpressionKeys, const gtsam::NavState &W_currentPropagatedState, const bool centerMeasurementsAtKeyframePositionBeforeAlignmentFlag) final
void transformLandmarkInWorldToImuFrame(DynamicDictionaryContainer >samDynamicExpressionKeys, const gtsam::NavState &W_currentPropagatedState) final
gtsam::Point3_ exp_sensorFrame_t_sensorFrame_landmark_
const std::string & landmarkName_
const long landmarkCreationCounter_
const std::shared_ptr< UnaryMeasurement > gmsfBaseUnaryMeasurementPtr_
gtsam::Values newOnlineStateValues_
gtsam::Values newOfflineStateValues_
GmsfUnaryExpression(const std::shared_ptr< UnaryMeasurement > &gmsfBaseUnaryMeasurementPtr, const std::string &imuFrameName, const Eigen::Isometry3d &T_I_sensorFrame)
static DynamicVariableType Landmark(const double variableCreationTime)