40 if (
graphConfigPtr_->optimizeReferenceFramePosesWrtWorldFlag_ && fixedFrame != worldFrame &&
41 !
graphMgrPtr_->hasReferenceFrameKeyframe(worldFrame, fixedFrame)) {
43 <<
" has no alignment keyframe yet. A position or pose measurement of this frame creates it." <<
COLOR_END << std::endl;
53 const bool addToOnlineSmootherFlag) {
70 auto gmsfUnaryExpressionPose3Ptr = std::make_shared<GmsfUnaryExpressionAbsolutePose3>(
107 auto gmsfUnaryExpressionPosition3Ptr = std::make_shared<GmsfUnaryExpressionAbsolutePosition3>(
150 auto gmsfUnaryExpressionHeadingPtr = std::make_shared<GmsfUnaryExpressionAbsoluteHeading>(
169 throw std::runtime_error(
"Velocity measurements in fixed frame are not yet supported.");
191 auto gmsfUnaryExpressionVelocity3SensorFramePtr = std::make_shared<GmsfUnaryExpressionLocalVelocity3>(
209 const Eigen::Isometry3d& T_I_sensorFrame,
210 const Eigen::Vector3d& I_w_W_I) {
227 auto gmsfUnaryExpressionVelocity3SensorFramePtr = std::make_shared<GmsfUnaryExpressionLocalVelocity3>(
245 const int landmarkCreationCounter) {
265 auto gmsfUnaryExpressionPosition3LandmarkPtr = std::make_shared<GmsfUnaryExpressionLandmarkPosition3>(
283 throw std::runtime_error(
"Landmark measurements are not yet supported for the holistic MSF.");
void addUnaryPosition3AbsoluteMeasurement(UnaryMeasurementXDAbsolute< Eigen::Vector3d, 3 > &R_t_R_S) override
void addUnaryVelocity3AbsoluteMeasurement(UnaryMeasurementXDAbsolute< Eigen::Vector3d, 3 > &R_v_R_S) override
void addUnaryPose3AbsoluteMeasurement(const UnaryMeasurementXDAbsolute< Eigen::Isometry3d, 6 > &R_T_R_S, const bool addToOnlineSmootherFlag=true) override
Unary Measurements / Absolute Measurements: In reference frame --> systematic drift.
void addUnaryBearing3LandmarkMeasurement(UnaryMeasurementXDLandmark< Eigen::Vector3d, 3 > &S_bearing_S_L) override
void addUnaryVelocity3LocalMeasurement(UnaryMeasurementXD< Eigen::Vector3d, 3 > &S_v_F_S) override
void addUnaryPosition3LandmarkMeasurement(UnaryMeasurementXDLandmark< Eigen::Vector3d, 3 > &S_t_S_L, const int landmarkCreationCounter) override
Landmark Measurements: No systematic drift.
bool hasAlignmentKeyframeForMeasurementWithoutPosition_(const UnaryMeasurementAbsolute &measurement) const
Binary Measurements: Purely relative.
void addUnaryHeadingAbsoluteMeasurement(const UnaryMeasurementXDAbsolute< Eigen::Matrix3d, 1 > &R_M_S)
void addUnaryVelocity3LocalMovingFrameMeasurement(UnaryMeasurementXD< Eigen::Vector3d, 3 > &S_v_F_S, const Eigen::Isometry3d &T_I_sensorFrame, const Eigen::Vector3d &I_w_W_I)
std::shared_ptr< GraphConfig > graphConfigPtr_
std::shared_ptr< holistic_fusion::ImuBuffer > coreImuBufferPtr_
bool validFirstMeasurementReceivedFlag_
std::shared_ptr< GraphManager > graphMgrPtr_
std::mutex optimizeGraphMutex_
std::shared_ptr< StaticTransforms > staticTransformsPtr_
bool checkAndPrintCovarianceViolation_(const std::string &measurementName, const bool violatedFlag)
bool isCovarianceViolated_(const Eigen::Matrix< double, DIM, 1 > &covariance, const double covarianceViolationThreshold)
Convenience functions.
const std::string & sensorFrameName() const
const std::string & measurementName() const
Names.
Class to represent an absolute unary measurement in the graph. Exact dimension is not known.
const std::string & fixedFrameName() const
const std::string & worldFrameName() const
Class to represent x-dimensional absolute unary measurement in the graph.
Class to represent x-dimensional landmark unary measurement in the graph.
Class to represent x-dimensional unary measurement in the graph.
const Eigen::Matrix< double, DIM, 1 > & unaryMeasurementNoiseDensity() const
double covarianceViolationThreshold() const