diff --git a/include/vision/factor/factor_AHP.h b/include/vision/factor/factor_AHP.h index 41a54be439c7878bca6ceabf5e0c6a3e05b97b76..d8e27a505481130602514c99b0de2b0142d42654 100644 --- a/include/vision/factor/factor_AHP.h +++ b/include/vision/factor/factor_AHP.h @@ -26,10 +26,10 @@ class FactorAHP : public FactorAutodiff<FactorAHP, 2, 3, 4, 3, 4, 4> public: FactorAHP(const FeatureBasePtr& _ftr_ptr, - const LandmarkAHPPtr& _landmark_ptr, - const ProcessorBasePtr& _processor_ptr = nullptr, - bool _apply_loss_function = false, - FactorStatus _status = FAC_ACTIVE); + const LandmarkAHPPtr& _landmark_ptr, + const ProcessorBasePtr& _processor_ptr, + bool _apply_loss_function, + FactorStatus _status = FAC_ACTIVE); virtual ~FactorAHP() = default; @@ -55,34 +55,26 @@ class FactorAHP : public FactorAutodiff<FactorAHP, 2, 3, 4, 3, 4, 4> const T* const _anchor_frame_o, const T* const _lmk_hmg, T* _residuals) const; - - // Static creator method - static FactorAHPPtr create(const FeatureBasePtr& _ftr_ptr, - const LandmarkAHPPtr& _lmk_ahp_ptr, - const ProcessorBasePtr& _processor_ptr = nullptr, - bool _apply_loss_function = false, - FactorStatus _status = FAC_ACTIVE); - }; inline FactorAHP::FactorAHP(const FeatureBasePtr& _ftr_ptr, - const LandmarkAHPPtr& _landmark_ptr, - const ProcessorBasePtr& _processor_ptr, - bool _apply_loss_function, - FactorStatus _status) : + const LandmarkAHPPtr& _landmark_ptr, + const ProcessorBasePtr& _processor_ptr, + bool _apply_loss_function, + FactorStatus _status) : FactorAutodiff<FactorAHP, 2, 3, 4, 3, 4, 4>("AHP", - _landmark_ptr->getAnchorFrame(), - nullptr, - nullptr, - _landmark_ptr, - _processor_ptr, - _apply_loss_function, - _status, - _ftr_ptr->getCapture()->getFrame()->getP(), - _ftr_ptr->getCapture()->getFrame()->getO(), - _landmark_ptr->getAnchorFrame()->getP(), - _landmark_ptr->getAnchorFrame()->getO(), - _landmark_ptr->getP()), + _landmark_ptr->getAnchorFrame(), + nullptr, + nullptr, + _landmark_ptr, + _processor_ptr, + _apply_loss_function, + _status, + _ftr_ptr->getCapture()->getFrame()->getP(), + _ftr_ptr->getCapture()->getFrame()->getO(), + _landmark_ptr->getAnchorFrame()->getP(), + _landmark_ptr->getAnchorFrame()->getO(), + _landmark_ptr->getP()), anchor_sensor_extrinsics_p_(_ftr_ptr->getCapture()->getSensorP()->getState()), anchor_sensor_extrinsics_o_(_ftr_ptr->getCapture()->getSensorO()->getState()), intrinsic_(_ftr_ptr->getCapture()->getSensor()->getIntrinsic()->getState()) @@ -112,11 +104,11 @@ inline Eigen::VectorXd FactorAHP::expectation() const template<typename T> inline void FactorAHP::expectation(const T* const _current_frame_p, - const T* const _current_frame_o, - const T* const _anchor_frame_p, - const T* const _anchor_frame_o, - const T* const _lmk_hmg, - T* _expectation) const + const T* const _current_frame_o, + const T* const _anchor_frame_p, + const T* const _anchor_frame_o, + const T* const _lmk_hmg, + T* _expectation) const { using namespace Eigen; @@ -169,11 +161,11 @@ inline void FactorAHP::expectation(const T* const _current_frame_p, template<typename T> inline bool FactorAHP::operator ()(const T* const _current_frame_p, - const T* const _current_frame_o, - const T* const _anchor_frame_p, - const T* const _anchor_frame_o, - const T* const _lmk_hmg, - T* _residuals) const + const T* const _current_frame_o, + const T* const _anchor_frame_p, + const T* const _anchor_frame_o, + const T* const _lmk_hmg, + T* _residuals) const { // expected Eigen::Matrix<T, 2, 1> expected; @@ -188,18 +180,6 @@ inline bool FactorAHP::operator ()(const T* const _current_frame_p, return true; } -inline FactorAHPPtr FactorAHP::create(const FeatureBasePtr& _ftr_ptr, - const LandmarkAHPPtr& _lmk_ahp_ptr, - const ProcessorBasePtr& _processor_ptr, - bool _apply_loss_function, - FactorStatus _status) -{ - // construct factor - FactorAHPPtr fac_ahp = std::make_shared<FactorAHP>(_ftr_ptr, _lmk_ahp_ptr, _processor_ptr, _apply_loss_function, _status); - - return fac_ahp; -} - } // namespace wolf #endif // FACTOR_AHP_H diff --git a/include/vision/factor/factor_epipolar.h b/include/vision/factor/factor_epipolar.h index a12fe1c128f5c9085a463af2e0628e589a19b30d..d380de5183900dad28a9b811681090403ec7a203 100644 --- a/include/vision/factor/factor_epipolar.h +++ b/include/vision/factor/factor_epipolar.h @@ -14,10 +14,10 @@ class FactorEpipolar : public FactorAutodiff<FactorEpipolar, 1, 3, 4, 3, 4, 3, 4 { public: FactorEpipolar(const FeatureBasePtr& _feature_ptr, - const FeatureBasePtr& _feature_other_ptr, - const ProcessorBasePtr& _processor_ptr = nullptr, - bool _apply_loss_function = false, - FactorStatus _status = FAC_ACTIVE); + const FeatureBasePtr& _feature_other_ptr, + const ProcessorBasePtr& _processor_ptr, + bool _apply_loss_function, + FactorStatus _status = FAC_ACTIVE); virtual ~FactorEpipolar() = default; @@ -35,11 +35,6 @@ class FactorEpipolar : public FactorAutodiff<FactorEpipolar, 1, 3, 4, 3, 4, 3, 4 const T* const _sensor_o, T* _residuals) const; - public: - static FactorBasePtr create(const FeatureBasePtr& _feature_ptr, - const NodeBasePtr& _correspondant_ptr, - const ProcessorBasePtr& _processor_ptr = nullptr); - private: SensorCameraPtr camera_; Eigen::Matrix3d K_inv_; ///< Intrinsic matrix and its inverse @@ -47,9 +42,10 @@ class FactorEpipolar : public FactorAutodiff<FactorEpipolar, 1, 3, 4, 3, 4, 3, 4 }; inline FactorEpipolar::FactorEpipolar(const FeatureBasePtr& _feature_ptr, - const FeatureBasePtr& _feature_other_ptr, - const ProcessorBasePtr& _processor_ptr, - bool _apply_loss_function, FactorStatus _status) : + const FeatureBasePtr& _feature_other_ptr, + const ProcessorBasePtr& _processor_ptr, + bool _apply_loss_function, + FactorStatus _status) : FactorAutodiff<FactorEpipolar, 1, 3, 4, 3, 4, 3, 4>("FEATURE EPIPOLAR", nullptr, nullptr, @@ -72,12 +68,12 @@ inline FactorEpipolar::FactorEpipolar(const FeatureBasePtr& _feature_ptr, template<typename T> inline bool FactorEpipolar::operator ()(const T* const _frame_own_p, - const T* const _frame_own_o, - const T* const _frame_other_p, - const T* const _frame_other_o, - const T* const _sensor_p, - const T* const _sensor_o, - T* _residuals) const + const T* const _frame_own_o, + const T* const _frame_other_p, + const T* const _frame_other_o, + const T* const _sensor_p, + const T* const _sensor_o, + T* _residuals) const { using namespace Eigen; @@ -174,13 +170,6 @@ inline bool FactorEpipolar::operator ()(const T* const _frame_own_p, return true; } -inline FactorBasePtr FactorEpipolar::create(const FeatureBasePtr& _feature_ptr, - const NodeBasePtr& _correspondant_ptr, - const ProcessorBasePtr& _processor_ptr) -{ - return std::make_shared<FactorEpipolar>(_feature_ptr, std::static_pointer_cast<FeatureBase>(_correspondant_ptr), _processor_ptr); -} - } // namespace wolf #endif // FACTOR_EPIPOLAR_H diff --git a/include/vision/factor/factor_pixelHP.h b/include/vision/factor/factor_pixelHP.h index 18e7ee521ae8cba0736c494ea370084fb6faffa9..c9ee85ccb4c1e4c39070568dfb2d5dc1427a84e4 100644 --- a/include/vision/factor/factor_pixelHP.h +++ b/include/vision/factor/factor_pixelHP.h @@ -26,8 +26,8 @@ class FactorPixelHP : public FactorAutodiff<FactorPixelHP, 2, 3, 4, 3, 4, 4> FactorPixelHP(const FeatureBasePtr& _ftr_ptr, const LandmarkHPPtr& _landmark_ptr, - const ProcessorBasePtr& _processor_ptr = nullptr, - bool _apply_loss_function = false, + const ProcessorBasePtr& _processor_ptr, + bool _apply_loss_function, FactorStatus _status = FAC_ACTIVE); virtual ~FactorPixelHP() = default; @@ -54,14 +54,6 @@ class FactorPixelHP : public FactorAutodiff<FactorPixelHP, 2, 3, 4, 3, 4, 4> const T* const _sensor_o, const T* const _lmk_hmg, T* _residuals) const; - - // Static creator method - static FactorPixelHPPtr create(const FeatureBasePtr& _ftr_ptr, - const LandmarkHPPtr& _lmk_ahp_ptr, - const ProcessorBasePtr& _processor_ptr = nullptr, - bool _apply_loss_function = false, - FactorStatus _status = FAC_ACTIVE); - }; inline FactorPixelHP::FactorPixelHP(const FeatureBasePtr& _ftr_ptr, @@ -70,18 +62,18 @@ inline FactorPixelHP::FactorPixelHP(const FeatureBasePtr& _ftr_ptr, bool _apply_loss_function, FactorStatus _status) : FactorAutodiff<FactorPixelHP, 2, 3, 4, 3, 4, 4>("PIXELHP", - nullptr, - nullptr, - nullptr, - _landmark_ptr, - _processor_ptr, - _apply_loss_function, - _status, - _ftr_ptr->getCapture()->getFrame()->getP(), - _ftr_ptr->getCapture()->getFrame()->getO(), - _ftr_ptr->getCapture()->getSensorP(), - _ftr_ptr->getCapture()->getSensorO(), - _landmark_ptr->getP()), + nullptr, + nullptr, + nullptr, + _landmark_ptr, + _processor_ptr, + _apply_loss_function, + _status, + _ftr_ptr->getCapture()->getFrame()->getP(), + _ftr_ptr->getCapture()->getFrame()->getO(), + _ftr_ptr->getCapture()->getSensorP(), + _ftr_ptr->getCapture()->getSensorO(), + _landmark_ptr->getP()), intrinsic_(_ftr_ptr->getCapture()->getSensor()->getIntrinsic()->getState()) //TODO: intrinsic { // std::cout << "FactorPixelHP::Constructor\n"; @@ -184,18 +176,6 @@ inline bool FactorPixelHP::operator ()(const T* const _frame_p, return true; } -inline FactorPixelHPPtr FactorPixelHP::create(const FeatureBasePtr& _ftr_ptr, - const LandmarkHPPtr& _lmk_ahp_ptr, - const ProcessorBasePtr& _processor_ptr, - bool _apply_loss_function, - FactorStatus _status) -{ - // construct factor - FactorPixelHPPtr fac_ahp = std::make_shared<FactorPixelHP>(_ftr_ptr, _lmk_ahp_ptr, _processor_ptr, _apply_loss_function, _status); - - return fac_ahp; -} - } // namespace wolf #endif // FACTOR_AHP_H diff --git a/src/processor/processor_bundle_adjustment.cpp b/src/processor/processor_bundle_adjustment.cpp index c249690b056d6a41539f244f97898fc772075874..627296b8bae01036c90c69a98436e9125b05fc7f 100644 --- a/src/processor/processor_bundle_adjustment.cpp +++ b/src/processor/processor_bundle_adjustment.cpp @@ -759,7 +759,7 @@ void ProcessorBundleAdjustment::establishFactors() lmk_track_map_[trkid] = lmk; //emplace a factor - FactorBase::emplace<FactorPixelHP>(ftr, ftr, lmk_hp, shared_from_this()); + FactorBase::emplace<FactorPixelHP>(ftr, ftr, lmk_hp, shared_from_this(), params_->apply_loss_function); } else @@ -769,7 +769,7 @@ void ProcessorBundleAdjustment::establishFactors() LandmarkHPPtr lmk_hp = std::static_pointer_cast<LandmarkHP>(lmk); //emplace a factor - FactorBase::emplace<FactorPixelHP>(ftr, ftr, lmk_hp, shared_from_this()); + FactorBase::emplace<FactorPixelHP>(ftr, ftr, lmk_hp, shared_from_this(), params_->apply_loss_function); } } diff --git a/src/processor/processor_tracker_feature_image.cpp b/src/processor/processor_tracker_feature_image.cpp index 5b4f95d78b8d31cf5143b71b05e22e92d3943dce..8d8149ba240a2c0ac76eea576289a82c3b4612d7 100644 --- a/src/processor/processor_tracker_feature_image.cpp +++ b/src/processor/processor_tracker_feature_image.cpp @@ -262,7 +262,7 @@ double ProcessorTrackerFeatureImage::match(cv::Mat _target_descriptor, cv::Mat _ FactorBasePtr ProcessorTrackerFeatureImage::emplaceFactor(FeatureBasePtr _feature_ptr, FeatureBasePtr _feature_other_ptr) { - return FactorBase::emplace<FactorEpipolar>(_feature_ptr, _feature_ptr, _feature_other_ptr, shared_from_this()); + return FactorBase::emplace<FactorEpipolar>(_feature_ptr, _feature_ptr, _feature_other_ptr, shared_from_this(), params_->apply_loss_function); } unsigned int ProcessorTrackerFeatureImage::detect(cv::Mat _image, cv::Rect& _roi, std::vector<cv::KeyPoint>& _new_keypoints, diff --git a/src/processor/processor_tracker_feature_trifocal.cpp b/src/processor/processor_tracker_feature_trifocal.cpp index 4201b4890ab62f12773b3160411ac8e82c1005c0..d170ec5313c9d16d7511c60242707720d8e70cdf 100644 --- a/src/processor/processor_tracker_feature_trifocal.cpp +++ b/src/processor/processor_tracker_feature_trifocal.cpp @@ -432,7 +432,7 @@ void ProcessorTrackerFeatureTrifocal::establishFactors() assert(ftr_mid != ftr_last && "Last and middle features are the same!"); // emplace factor - auto ctr = FactorBase::emplace<FactorAutodiffTrifocal>(ftr_last, ftr_first, ftr_mid, ftr_last, shared_from_this(), false, FAC_ACTIVE); + auto ctr = FactorBase::emplace<FactorAutodiffTrifocal>(ftr_last, ftr_first, ftr_mid, ftr_last, shared_from_this(), params_->apply_loss_function, FAC_ACTIVE); } } } diff --git a/src/processor/processor_tracker_landmark_image.cpp b/src/processor/processor_tracker_landmark_image.cpp index 53ea677e7ae6d18da3595da605e6dca3205841f0..841d501c8ca9a62c5adec7dbdd1e808c8a7607f7 100644 --- a/src/processor/processor_tracker_landmark_image.cpp +++ b/src/processor/processor_tracker_landmark_image.cpp @@ -273,7 +273,7 @@ FactorBasePtr ProcessorTrackerLandmarkImage::emplaceFactor(FeatureBasePtr _featu LandmarkAHPPtr landmark_ahp = std::static_pointer_cast<LandmarkAHP>(_landmark_ptr); - return FactorBase::emplace<FactorAHP>(_feature_ptr, _feature_ptr, landmark_ahp, shared_from_this(), true); + return FactorBase::emplace<FactorAHP>(_feature_ptr, _feature_ptr, landmark_ahp, shared_from_this(), params_->apply_loss_function); } } diff --git a/test/gtest_factor_pixelHP.cpp b/test/gtest_factor_pixelHP.cpp index 26607ca275268f2cdb664a0ca1c0409d9461be8a..63c589139ece552e2abb032af413293373423095 100644 --- a/test/gtest_factor_pixelHP.cpp +++ b/test/gtest_factor_pixelHP.cpp @@ -188,9 +188,9 @@ class FactorPixelHPTest : public testing::Test{ L1 = std::static_pointer_cast<LandmarkHP>(LandmarkBase::emplace<LandmarkHP>(problem->getMap(),lmkHP1, camera, des)); // factors - c11 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f11, f11, L1, nullptr /*proc*/)); - c21 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f21, f21, L1, nullptr /*proc*/)); - c31 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f31, f31, L1, nullptr /*proc*/)); + c11 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f11, f11, L1, nullptr /*proc*/, false /*use loss function*/)); + c21 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f21, f21, L1, nullptr /*proc*/, false /*use loss function*/)); + c31 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f31, f31, L1, nullptr /*proc*/, false /*use loss function*/)); } }; @@ -238,7 +238,7 @@ TEST(ProcessorFactorPixelHP, testZeroResidual) LandmarkHPPtr lmk_hp = std::static_pointer_cast<LandmarkHP>(lmk); // Factor - auto fac0 = FactorBase::emplace<FactorPixelHP>(fea0, fea0, lmk_hp, proc); + auto fac0 = FactorBase::emplace<FactorPixelHP>(fea0, fea0, lmk_hp, proc, false); auto fac_ptr = std::static_pointer_cast<FactorPixelHP>(fac0); ASSERT_TRUE(problem_ptr->check(0)); @@ -382,9 +382,9 @@ TEST_F(FactorPixelHPTest, testSolveFramePosition) L4 = std::static_pointer_cast<LandmarkHP>(LandmarkBase::emplace<LandmarkHP>(problem->getMap(),lmkHP4, camera, des)); //create factors - c12 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f12, f12, L2, nullptr /*proc*/)); - c13 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f13, f13, L3, nullptr /*proc*/)); - c14 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f14, f14, L4, nullptr /*proc*/)); + c12 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f12, f12, L2, nullptr /*proc*/, false /*use loss function*/)); + c13 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f13, f13, L3, nullptr /*proc*/, false /*use loss function*/)); + c14 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f14, f14, L4, nullptr /*proc*/, false /*use loss function*/)); ASSERT_TRUE(problem->check()); @@ -528,17 +528,17 @@ TEST_F(FactorPixelHPTest, testSolveBundleAdjustment) L4 = std::static_pointer_cast<LandmarkHP>(LandmarkBase::emplace<LandmarkHP>(problem->getMap(),lmkHP4, camera, des)); //create factors - c12 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f12, f12, L2, nullptr /*proc*/)); - c13 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f13, f13, L3, nullptr /*proc*/)); - c14 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f14, f14, L4, nullptr /*proc*/)); + c12 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f12, f12, L2, nullptr /*proc*/, false /*use loss function*/)); + c13 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f13, f13, L3, nullptr /*proc*/, false /*use loss function*/)); + c14 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f14, f14, L4, nullptr /*proc*/, false /*use loss function*/)); - c22 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f22, f22, L2, nullptr /*proc*/)); - c23 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f23, f23, L3, nullptr /*proc*/)); - c24 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f24, f24, L4, nullptr /*proc*/)); + c22 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f22, f22, L2, nullptr /*proc*/, false /*use loss function*/)); + c23 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f23, f23, L3, nullptr /*proc*/, false /*use loss function*/)); + c24 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f24, f24, L4, nullptr /*proc*/, false /*use loss function*/)); - c32 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f32, f32, L2, nullptr /*proc*/)); - c33 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f33, f33, L3, nullptr /*proc*/)); - c34 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f34, f34, L4, nullptr /*proc*/)); + c32 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f32, f32, L2, nullptr /*proc*/, false /*use loss function*/)); + c33 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f33, f33, L3, nullptr /*proc*/, false /*use loss function*/)); + c34 = std::static_pointer_cast<FactorPixelHP>(FactorBase::emplace<FactorPixelHP>(f34, f34, L4, nullptr /*proc*/, false /*use loss function*/)); ASSERT_TRUE(problem->check());