diff --git a/include/core/processor/processor_diff_drive.h b/include/core/processor/processor_diff_drive.h index 60fbf8d295e0dd519e4d5a69cf4dc52e18349811..78ef6ca50c80e653f7143ebe72e310b859d7a18f 100644 --- a/include/core/processor/processor_diff_drive.h +++ b/include/core/processor/processor_diff_drive.h @@ -93,16 +93,19 @@ protected: Motion& _second, TimeStamp& _ts) override; - virtual CaptureMotionPtr createCapture(const TimeStamp& _ts, - const SensorBasePtr& _sensor, - const VectorXs& _data, - const MatrixXs& _data_cov, - const FrameBasePtr& _frame_origin) override; + virtual CaptureMotionPtr emplaceCapture(const FrameBasePtr& _frame_own, + const SensorBasePtr& _sensor, + const TimeStamp& _ts, + const VectorXs& _data, + const MatrixXs& _data_cov, + const VectorXs& _calib, + const VectorXs& _calib_preint, + const FrameBasePtr& _frame_origin) override; virtual FactorBasePtr emplaceFactor(FeatureBasePtr _feature, CaptureBasePtr _capture_origin) override; - virtual FeatureBasePtr createFeature(CaptureMotionPtr _capture_motion) override; + virtual FeatureBasePtr emplaceFeature(CaptureMotionPtr _capture_motion) override; public: diff --git a/include/core/processor/processor_motion.h b/include/core/processor/processor_motion.h index 56269e2041bc18e039dcdd6e64e228dc6aa35cc6..fe77c60535d7124c1c780bf6738a78743e293a1c 100644 --- a/include/core/processor/processor_motion.h +++ b/include/core/processor/processor_motion.h @@ -411,7 +411,7 @@ class ProcessorMotion : public ProcessorBase */ virtual Motion interpolate(const Motion& _ref1, const Motion& _ref2, const TimeStamp& _ts, Motion& _second); - /** \brief create a CaptureMotion and add it to a Frame + /** \brief emplace a CaptureMotion * \param _ts time stamp * \param _sensor Sensor that produced the Capture * \param _data a vector of motion data @@ -419,32 +419,21 @@ class ProcessorMotion : public ProcessorBase * \param _frame_own frame owning the Capture to create * \param _frame_origin frame acting as the origin of motions for the MorionBuffer of the created MotionCapture */ - CaptureMotionPtr emplaceCapture(const FrameBasePtr& _frame_own, - const SensorBasePtr& _sensor, - const TimeStamp& _ts, - const VectorXs& _data, - const MatrixXs& _data_cov, - const VectorXs& _calib, - const VectorXs& _calib_preint, - const FrameBasePtr& _frame_origin); - - virtual CaptureMotionPtr createCapture(const TimeStamp& _ts, - const SensorBasePtr& _sensor, - const VectorXs& _data, - const MatrixXs& _data_cov, - const FrameBasePtr& _frame_origin) = 0; - - /** \brief create a feature corresponding to given capture and add the feature to this capture + virtual CaptureMotionPtr emplaceCapture(const FrameBasePtr& _frame_own, + const SensorBasePtr& _sensor, + const TimeStamp& _ts, + const VectorXs& _data, + const MatrixXs& _data_cov, + const VectorXs& _calib, + const VectorXs& _calib_preint, + const FrameBasePtr& _frame_origin) = 0; + + /** \brief emplace a feature corresponding to given capture and add the feature to this capture * \param _capture_motion: the parent capture */ - FeatureBasePtr emplaceFeature(CaptureMotionPtr _capture_own); + virtual FeatureBasePtr emplaceFeature(CaptureMotionPtr _capture_own) = 0; - /** \brief create a feature corresponding to given capture - * \param _capture_motion: the parent capture - */ - virtual FeatureBasePtr createFeature(CaptureMotionPtr _capture_own) = 0; - - /** \brief create a factor and link it in the wolf tree + /** \brief emplace a factor and link it in the wolf tree * \param _feature_motion: the parent feature * \param _frame_origin: the frame constrained by this motion factor */ diff --git a/include/core/processor/processor_odom_2D.h b/include/core/processor/processor_odom_2D.h index fdcf820856bb061e445273a72334b20698b9564b..37d6c9ee11c6f9c518ccbcdeb01bc9fa3f2c20a5 100644 --- a/include/core/processor/processor_odom_2D.h +++ b/include/core/processor/processor_odom_2D.h @@ -73,12 +73,15 @@ class ProcessorOdom2D : public ProcessorMotion const TimeStamp& _ts, Motion& _second) override; - virtual CaptureMotionPtr createCapture(const TimeStamp& _ts, - const SensorBasePtr& _sensor, - const VectorXs& _data, - const MatrixXs& _data_cov, - const FrameBasePtr& _frame_origin) override; - virtual FeatureBasePtr createFeature(CaptureMotionPtr _capture_motion) override; + virtual CaptureMotionPtr emplaceCapture(const FrameBasePtr& _frame_own, + const SensorBasePtr& _sensor, + const TimeStamp& _ts, + const VectorXs& _data, + const MatrixXs& _data_cov, + const VectorXs& _calib, + const VectorXs& _calib_preint, + const FrameBasePtr& _frame_origin) override; + virtual FeatureBasePtr emplaceFeature(CaptureMotionPtr _capture_motion) override; virtual FactorBasePtr emplaceFactor(FeatureBasePtr _feature, CaptureBasePtr _capture_origin) override; diff --git a/include/core/processor/processor_odom_3D.h b/include/core/processor/processor_odom_3D.h index b5fc2dedf099e74bfbd64e7b28ca313cdd1bd412..1c70a3b3385c82116609fa47d3897ca82d89f800 100644 --- a/include/core/processor/processor_odom_3D.h +++ b/include/core/processor/processor_odom_3D.h @@ -95,14 +95,19 @@ class ProcessorOdom3D : public ProcessorMotion const TimeStamp& _ts, Motion& _second) override; bool voteForKeyFrame() override; - virtual CaptureMotionPtr createCapture(const TimeStamp& _ts, - const SensorBasePtr& _sensor, - const VectorXs& _data, - const MatrixXs& _data_cov, - const FrameBasePtr& _frame_origin) override; + virtual CaptureMotionPtr emplaceCapture(const FrameBasePtr& _frame_own, + const SensorBasePtr& _sensor, + const TimeStamp& _ts, + const VectorXs& _data, + const MatrixXs& _data_cov, + const VectorXs& _calib, + const VectorXs& _calib_preint, + const FrameBasePtr& _frame_origin) override; + + virtual FeatureBasePtr emplaceFeature(CaptureMotionPtr _capture_motion) override; + virtual FactorBasePtr emplaceFactor(FeatureBasePtr _feature_motion, - CaptureBasePtr _capture_origin) override; - virtual FeatureBasePtr createFeature(CaptureMotionPtr _capture_motion) override; + CaptureBasePtr _capture_origin) override; protected: ProcessorParamsOdom3DPtr params_odom_3D_; diff --git a/src/processor/processor_diff_drive.cpp b/src/processor/processor_diff_drive.cpp index 6c508a35a1f25693e7fa350945dab18b0c020cf2..b75dd17e468012c231fd9a8c2ded3fb60fca7588 100644 --- a/src/processor/processor_diff_drive.cpp +++ b/src/processor/processor_diff_drive.cpp @@ -195,41 +195,48 @@ Motion ProcessorDiffDrive::interpolate(const Motion& _ref, } -CaptureMotionPtr ProcessorDiffDrive::createCapture(const TimeStamp& _ts, - const SensorBasePtr& _sensor, - const VectorXs& _data, - const MatrixXs& _data_cov, - const FrameBasePtr& _frame_origin) +CaptureMotionPtr ProcessorDiffDrive::emplaceCapture(const FrameBasePtr& _frame_own, + const SensorBasePtr& _sensor, + const TimeStamp& _ts, + const VectorXs& _data, + const MatrixXs& _data_cov, + const VectorXs& _calib, + const VectorXs& _calib_preint, + const FrameBasePtr& _frame_origin) { - - StateBlockPtr i_ptr = _sensor->isIntrinsicDynamic()? - std::make_shared<StateBlock>(3, false) : nullptr; - - return std::make_shared<CaptureWheelJointPosition>(_ts, _sensor, _data, _data_cov, - _frame_origin, nullptr, nullptr, i_ptr); + StateBlockPtr i_ptr = _sensor->isIntrinsicDynamic()? + std::make_shared<StateBlock>(3, false) : nullptr; + + auto cap_motion = std::static_pointer_cast<CaptureMotion>(CaptureBase::emplace<CaptureWheelJointPosition>(_frame_own, + _ts, + _sensor, + _data, + _data_cov, + _frame_origin, + nullptr, + nullptr, + i_ptr)); + cap_motion->setCalibration(_calib); + cap_motion->setCalibrationPreint(_calib_preint); + + return cap_motion; } FactorBasePtr ProcessorDiffDrive::emplaceFactor(FeatureBasePtr _feature, CaptureBasePtr _capture_origin) { - // FactorOdom2DPtr fac_odom = - // std::make_shared<FactorOdom2D>(_feature, _capture_origin->getFrame(), - // shared_from_this()); - auto fac_odom = FactorBase::emplace<FactorOdom2D>(_feature, _feature, _capture_origin->getFrame(), + auto fac_odom = FactorBase::emplace<FactorOdom2D>(_feature, _feature, _capture_origin->getFrame(), shared_from_this()); - // _feature->addFactor(fac_odom); - // _capture_origin->getFrame()->addConstrainedBy(fac_odom); - - return fac_odom; + return fac_odom; } -FeatureBasePtr ProcessorDiffDrive::createFeature(CaptureMotionPtr _capture_motion) +FeatureBasePtr ProcessorDiffDrive::emplaceFeature(CaptureMotionPtr _capture_motion) { - FeatureBasePtr key_feature_ptr = std::make_shared<FeatureDiffDrive>( - _capture_motion->getBuffer().get().back().delta_integr_, - _capture_motion->getBuffer().get().back().delta_integr_cov_, - _capture_motion->getBuffer().getCalibrationPreint(), - _capture_motion->getBuffer().get().back().jacobian_calib_); + FeatureBasePtr key_feature_ptr = FeatureBase::emplace<FeatureDiffDrive>(_capture_motion, + _capture_motion->getBuffer().get().back().delta_integr_, + _capture_motion->getBuffer().get().back().delta_integr_cov_, + _capture_motion->getBuffer().getCalibrationPreint(), + _capture_motion->getBuffer().get().back().jacobian_calib_); WOLF_INFO(_capture_motion->getBuffer().getCalibrationPreint()); WOLF_INFO(_capture_motion->getBuffer().get().back().jacobian_calib_); diff --git a/src/processor/processor_motion.cpp b/src/processor/processor_motion.cpp index e3a115798c5e01cd3b3385aab38b1f499957f253..55d2c16b52f55c68d66a8494a87b7e7c906c5b64 100644 --- a/src/processor/processor_motion.cpp +++ b/src/processor/processor_motion.cpp @@ -612,38 +612,6 @@ CaptureMotionPtr ProcessorMotion::findCaptureContainingTimeStamp(const TimeStamp return capture_motion; } -CaptureMotionPtr ProcessorMotion::emplaceCapture(const FrameBasePtr& _frame_own, - const SensorBasePtr& _sensor, - const TimeStamp& _ts, - const VectorXs& _data, - const MatrixXs& _data_cov, - const VectorXs& _calib, - const VectorXs& _calib_preint, - const FrameBasePtr& _frame_origin) -{ - CaptureMotionPtr capture = createCapture(_ts, - _sensor, - _data, - _data_cov, - _frame_origin); - - capture->setCalibration(_calib); - capture->setCalibrationPreint(_calib_preint); - - // add to wolf tree - // _frame_own->addCapture(capture); - capture->link(_frame_own); - return capture; -} - -FeatureBasePtr ProcessorMotion::emplaceFeature(CaptureMotionPtr _capture_motion) -{ - FeatureBasePtr feature = createFeature(_capture_motion); - // _capture_motion->addFeature(feature); - feature->link(_capture_motion); - return feature; -} - PackKeyFramePtr ProcessorMotion::computeProcessingStep() { if (!getProblem()->priorIsSet()) diff --git a/src/processor/processor_odom_2D.cpp b/src/processor/processor_odom_2D.cpp index 9b19d4e8c4eda8db40eac71574534f3419880634..38dccacd9bf4d2d1512de442f79734b30d4c02a6 100644 --- a/src/processor/processor_odom_2D.cpp +++ b/src/processor/processor_odom_2D.cpp @@ -144,33 +144,38 @@ bool ProcessorOdom2D::voteForKeyFrame() return false; } -CaptureMotionPtr ProcessorOdom2D::createCapture(const TimeStamp& _ts, const SensorBasePtr& _sensor, - const VectorXs& _data, const MatrixXs& _data_cov, - const FrameBasePtr& _frame_origin) +CaptureMotionPtr ProcessorOdom2D::emplaceCapture(const FrameBasePtr& _frame_own, + const SensorBasePtr& _sensor, + const TimeStamp& _ts, + const VectorXs& _data, + const MatrixXs& _data_cov, + const VectorXs& _calib, + const VectorXs& _calib_preint, + const FrameBasePtr& _frame_origin) { - CaptureOdom2DPtr capture_odom = std::make_shared<CaptureOdom2D>(_ts, _sensor, _data, _data_cov, _frame_origin); - return capture_odom; + auto cap_motion = std::static_pointer_cast<CaptureMotion>(CaptureBase::emplace<CaptureOdom2D>(_frame_own, _ts, _sensor, _data, _data_cov, _frame_origin)); + cap_motion->setCalibration(_calib); + cap_motion->setCalibrationPreint(_calib_preint); + + return cap_motion; } FactorBasePtr ProcessorOdom2D::emplaceFactor(FeatureBasePtr _feature, CaptureBasePtr _capture_origin) { - // FactorOdom2DPtr fac_odom = std::make_shared<FactorOdom2D>(_feature, _capture_origin->getFrame(), - // shared_from_this()); auto fac_odom = FactorBase::emplace<FactorOdom2D>(_feature, _feature, _capture_origin->getFrame(), shared_from_this()); - // _feature->addFactor(fac_odom); - // _capture_origin->getFrame()->addConstrainedBy(fac_odom); return fac_odom; } -FeatureBasePtr ProcessorOdom2D::createFeature(CaptureMotionPtr _capture_motion) +FeatureBasePtr ProcessorOdom2D::emplaceFeature(CaptureMotionPtr _capture_motion) { Eigen::MatrixXs covariance = _capture_motion->getBuffer().get().back().delta_integr_cov_; makePosDef(covariance); - FeatureBasePtr key_feature_ptr = std::make_shared<FeatureBase>("ODOM 2D", - _capture_motion->getBuffer().get().back().delta_integr_, - covariance); + FeatureBasePtr key_feature_ptr = FeatureBase::emplace<FeatureBase>(_capture_motion, + "ODOM 2D", + _capture_motion->getBuffer().get().back().delta_integr_, + covariance); return key_feature_ptr; } diff --git a/src/processor/processor_odom_3D.cpp b/src/processor/processor_odom_3D.cpp index 9c29e0f89fb6dba5d4495fd3a4d2b1241812cb68..76fc35d3bc166eb30e878ab2e61b4f4fbe2950e3 100644 --- a/src/processor/processor_odom_3D.cpp +++ b/src/processor/processor_odom_3D.cpp @@ -395,33 +395,38 @@ bool ProcessorOdom3D::voteForKeyFrame() return false; } -CaptureMotionPtr ProcessorOdom3D::createCapture(const TimeStamp& _ts, const SensorBasePtr& _sensor, - const VectorXs& _data, const MatrixXs& _data_cov, - const FrameBasePtr& _frame_origin) +CaptureMotionPtr ProcessorOdom3D::emplaceCapture(const FrameBasePtr& _frame_own, + const SensorBasePtr& _sensor, + const TimeStamp& _ts, + const VectorXs& _data, + const MatrixXs& _data_cov, + const VectorXs& _calib, + const VectorXs& _calib_preint, + const FrameBasePtr& _frame_origin) { - CaptureOdom3DPtr capture_odom = std::make_shared<CaptureOdom3D>(_ts, _sensor, _data, _data_cov, _frame_origin); - return capture_odom; + auto cap_motion = std::static_pointer_cast<CaptureMotion>(CaptureBase::emplace<CaptureOdom3D>(_frame_own, _ts, _sensor, _data, _data_cov, _frame_origin)); + cap_motion->setCalibration(_calib); + cap_motion->setCalibrationPreint(_calib_preint); + + return cap_motion; +} + +FeatureBasePtr ProcessorOdom3D::emplaceFeature(CaptureMotionPtr _capture_motion) +{ + FeatureBasePtr key_feature_ptr = FeatureBase::emplace<FeatureBase>(_capture_motion, + "ODOM 3D", + _capture_motion->getBuffer().get().back().delta_integr_, + _capture_motion->getBuffer().get().back().delta_integr_cov_); + return key_feature_ptr; } FactorBasePtr ProcessorOdom3D::emplaceFactor(FeatureBasePtr _feature_motion, CaptureBasePtr _capture_origin) { - // FactorOdom3DPtr fac_odom = std::make_shared<FactorOdom3D>(_feature_motion, _capture_origin->getFrame(), - // shared_from_this()); auto fac_odom = FactorBase::emplace<FactorOdom3D>(_feature_motion, _feature_motion, _capture_origin->getFrame(), shared_from_this()); - // _feature_motion->addFactor(fac_odom); - // _capture_origin->getFrame()->addConstrainedBy(fac_odom); return fac_odom; } -FeatureBasePtr ProcessorOdom3D::createFeature(CaptureMotionPtr _capture_motion) -{ - FeatureBasePtr key_feature_ptr = std::make_shared<FeatureBase>( - "ODOM 3D", _capture_motion->getBuffer().get().back().delta_integr_, - _capture_motion->getBuffer().get().back().delta_integr_cov_); - return key_feature_ptr; -} - void ProcessorOdom3D::remap(const Eigen::VectorXs& _x1, const Eigen::VectorXs& _x2, Eigen::VectorXs& _x_out) { new (&p1_) Eigen::Map<const Eigen::Vector3s>(_x1.data());