8#ifndef GMSF_UNARY_EXPRESSION_POSITION3_H
9#define GMSF_UNARY_EXPRESSION_POSITION3_H
12#include <gtsam/base/types.h>
13#include <gtsam/inference/Symbol.h>
14#include <gtsam/slam/expressions.h>
26 const std::string& imuFrameName,
const Eigen::Isometry3d& T_I_sensorFrame,
27 const double createReferenceAlignmentKeyframeEveryNSeconds)
29 createReferenceAlignmentKeyframeEveryNSeconds),
52 gtsam::translation(gtsam::Expression<gtsam::Pose3>(gtsam::symbol_shorthand::X(closestGeneralKey)));
56 gtsam::rotation(gtsam::Expression<gtsam::Pose3>(gtsam::symbol_shorthand::X(closestGeneralKey)));
62 gtsam::Pose3 T_fixedFrame_sensorFrame_meas_noOrientation =
64 gtsam::Pose3 T_W_sensorFrame_est = W_currentPropagatedState.pose() * gtsam::Pose3(
T_I_sensorFrameInit_.matrix());
65 return T_W_sensorFrame_est * T_fixedFrame_sensorFrame_meas_noOrientation.inverse();
106 gtsam::rotate(exp_R_fixedFrame_sensorFrame,
107 exp_sensorFrame_t_sensorFrame_correctSensorFrame);
110 gtsam::Pose3
convertToPose3(
const gtsam::Point3& measurement)
final {
return gtsam::Pose3(gtsam::Rot3::Identity(), measurement); }
112 gtsam::Point3
convertFromPose3(
const gtsam::Pose3& measurement)
final {
return measurement.translation(); }
GmsfUnaryExpressionAbsolut(const std::shared_ptr< UnaryMeasurementAbsolute > &gmsfUnaryAbsoluteMeasurementPtr, const std::string &imuFrameName, const Eigen::Isometry3d &T_I_sensorFrame, const double createReferenceAlignmentKeyframeEveryNSeconds)
gtsam::Expression< gtsam::Rot3 > exp_R_fixedFrame_I_
void applyExtrinsicCalibrationCorrection(const gtsam::Point3_ &exp_sensorFrame_t_sensorFrame_correctSensorFrame) final
gtsam::Point3 convertFromPose3(const gtsam::Pose3 &measurement) final
gtsam::Expression< gtsam::Point3 > exp_fixedFrame_t_fixedFrame_sensorFrame_
GmsfUnaryExpressionAbsolutePosition3(const std::shared_ptr< UnaryMeasurementXDAbsolute< Eigen::Vector3d, 3 > > &positionUnaryMeasurementPtr, const std::string &imuFrameName, const Eigen::Isometry3d &T_I_sensorFrame, const double createReferenceAlignmentKeyframeEveryNSeconds)
void transformStateToReferenceFrameMeasurement(const gtsam::Pose3_ &exp_T_W_fixedFrame) override
~GmsfUnaryExpressionAbsolutePosition3()=default
const gtsam::Point3 getGtsamMeasurementValue() const override
bool measuresPosition() const final
void transformImuStateToSensorFrameState() final
gtsam::Pose3 computeT_W_fixedFrame_initial(const gtsam::NavState &W_currentPropagatedState) final
void generateImuStateInWorldFrameAtKey(const gtsam::Key &closestGeneralKey) final
void setMeasurementPosition(const Eigen::Vector3d &position) final
const gtsam::Vector getNoiseDensity() const override
std::shared_ptr< UnaryMeasurementXDAbsolute< Eigen::Vector3d, 3 > > positionUnaryMeasurementPtr_
const gtsam::Expression< gtsam::Point3 > getGtsamExpression() const override
const Eigen::Vector3d getMeasurementPosition() final
gtsam::Pose3 convertToPose3(const gtsam::Point3 &measurement) final
Eigen::Isometry3d T_I_sensorFrameInit_
Class to represent x-dimensional absolute unary measurement in the graph.
gtsam::Rot3_ inverseRot3(const gtsam::Rot3_ &R)