diff --git a/include/vision/factor/factor_ahp.h b/include/vision/factor/factor_ahp.h index b45ecbc0498da40eff71a91e885530c12c508e94..b1a58890015ec8f7688307d5eb64359743d9b67c 100644 --- a/include/vision/factor/factor_ahp.h +++ b/include/vision/factor/factor_ahp.h @@ -63,6 +63,7 @@ inline FactorAhp::FactorAhp(const FeatureBasePtr& _ftr_ptr, bool _apply_loss_function, FactorStatus _status) : FactorAutodiff<FactorAhp, 2, 3, 4, 3, 4, 4>("AHP", + _ftr_ptr, _landmark_ptr->getAnchorFrame(), nullptr, nullptr, diff --git a/include/vision/factor/factor_epipolar.h b/include/vision/factor/factor_epipolar.h index 55fd40059e47b7fb9e325d7e15dcc9593e99be66..f6654884dca7183e1264934ee7d95ca90aaea83a 100644 --- a/include/vision/factor/factor_epipolar.h +++ b/include/vision/factor/factor_epipolar.h @@ -47,6 +47,7 @@ inline FactorEpipolar::FactorEpipolar(const FeatureBasePtr& _feature_ptr, bool _apply_loss_function, FactorStatus _status) : FactorAutodiff<FactorEpipolar, 1, 3, 4, 3, 4, 3, 4>("FEATURE EPIPOLAR", + _feature_ptr, nullptr, nullptr, _feature_other_ptr, diff --git a/include/vision/factor/factor_pixel_hp.h b/include/vision/factor/factor_pixel_hp.h index dd52776d393edb285d58ce364d39dd951a903a39..13f3d0cff4241218dd3f4d0e814cda409b741bfc 100644 --- a/include/vision/factor/factor_pixel_hp.h +++ b/include/vision/factor/factor_pixel_hp.h @@ -62,6 +62,7 @@ inline FactorPixelHp::FactorPixelHp(const FeatureBasePtr& _ftr_ptr, bool _apply_loss_function, FactorStatus _status) : FactorAutodiff<FactorPixelHp, 2, 3, 4, 3, 4, 4>("PIXELHP", + _ftr_ptr, nullptr, nullptr, nullptr, diff --git a/include/vision/factor/factor_trifocal.h b/include/vision/factor/factor_trifocal.h index 4d99ae0892b7fe90d671a0f5232c615bca7bc239..3781ec621ed91a5efb1f1d3594b60e56d590c8f9 100644 --- a/include/vision/factor/factor_trifocal.h +++ b/include/vision/factor/factor_trifocal.h @@ -151,6 +151,7 @@ FactorTrifocal::FactorTrifocal(const FeatureBasePtr& _feature_1_ptr, bool _apply_loss_function, FactorStatus _status) : FactorAutodiff( "TRIFOCAL PLP", + _feature_own_ptr, nullptr, nullptr, _feature_2_ptr, //< this sets feature 2 (the one between the oldest and the newest) diff --git a/test/gtest_factor_epipolar.cpp b/test/gtest_factor_epipolar.cpp index ea3d18606081d30668fcec87de8295faa6432d7e..9cda2a79fa4e8cbc0de72ebd40975a4a35ab976e 100644 --- a/test/gtest_factor_epipolar.cpp +++ b/test/gtest_factor_epipolar.cpp @@ -46,59 +46,65 @@ TEST(FactorEpipolar, exemple) auto C0 = CaptureBase ::emplace<CaptureImage>(F0, F0->getTimeStamp(), camera, cv::Mat()); auto C1 = CaptureBase ::emplace<CaptureImage>(F1, F1->getTimeStamp(), camera, cv::Mat()); auto f0 = FeatureBase ::emplace<FeaturePointImage>(C0, pix0, 0, cv::Mat(), Matrix2d::Identity()); - auto f1 = FeatureBase ::emplace<FeaturePointImage>(C1, pix1, 0, cv::Mat(), Matrix2d::Identity()); - auto c = FactorBase ::emplace<FactorEpipolar>(f0, f0, f1, nullptr, false); double residual_0, residual_1, residual_2, residual_n1; // same line - c->operator()(F0->getP()->getState().data(), - F0->getO()->getState().data(), - F1->getP()->getState().data(), - F1->getO()->getState().data(), - camera->getP()->getState().data(), - camera->getO()->getState().data(), - &residual_0); + auto f1 = FeatureBase ::emplace<FeaturePointImage>(C1, pix1, 0, cv::Mat(), Matrix2d::Identity()); + auto c0 = FactorBase ::emplace<FactorEpipolar>(f0, f0, f1, nullptr, false); + c0->operator()(F0->getP()->getState().data(), + F0->getO()->getState().data(), + F1->getP()->getState().data(), + F1->getO()->getState().data(), + camera->getP()->getState().data(), + camera->getO()->getState().data(), + &residual_0); WOLF_TRACE("residual @ 0 pix: ", residual_0); ASSERT_NEAR(residual_0, 0.0, 1e-6); // lines 1 pix difference - f1->setMeasurement(Vector2d(300, 241)); - c->operator()(F0->getP()->getState().data(), - F0->getO()->getState().data(), - F1->getP()->getState().data(), - F1->getO()->getState().data(), - camera->getP()->getState().data(), - camera->getO()->getState().data(), - &residual_1); + auto f2 = FeatureBase ::emplace<FeaturePointImage>(C1, Vector2d(300, 241), 0, cv::Mat(), Matrix2d::Identity()); + auto c1 = FactorBase ::emplace<FactorEpipolar>(f0, f0, f2, nullptr, false); + //f1->setMeasurement(Vector2d(300, 241)); + c1->operator()(F0->getP()->getState().data(), + F0->getO()->getState().data(), + F1->getP()->getState().data(), + F1->getO()->getState().data(), + camera->getP()->getState().data(), + camera->getO()->getState().data(), + &residual_1); WOLF_TRACE("residual @ 1 pix : ", residual_1); // lines 2 pixels difference - f1->setMeasurement(Vector2d(300, 242)); - c->operator()(F0->getP()->getState().data(), - F0->getO()->getState().data(), - F1->getP()->getState().data(), - F1->getO()->getState().data(), - camera->getP()->getState().data(), - camera->getO()->getState().data(), - &residual_2); + auto f3 = FeatureBase ::emplace<FeaturePointImage>(C1, Vector2d(300, 242), 0, cv::Mat(), Matrix2d::Identity()); + auto c2 = FactorBase ::emplace<FactorEpipolar>(f0, f0, f3, nullptr, false); + //f1->setMeasurement(Vector2d(300, 242)); + c2->operator()(F0->getP()->getState().data(), + F0->getO()->getState().data(), + F1->getP()->getState().data(), + F1->getO()->getState().data(), + camera->getP()->getState().data(), + camera->getO()->getState().data(), + &residual_2); WOLF_TRACE("residual @ 2 pix : ", residual_2); ASSERT_NEAR(residual_2, 2.0 * residual_1, 1e-6); // lines 1 pix difference in the other direction - f1->setMeasurement(Vector2d(300, 239)); - c->operator()(F0->getP()->getState().data(), - F0->getO()->getState().data(), - F1->getP()->getState().data(), - F1->getO()->getState().data(), - camera->getP()->getState().data(), - camera->getO()->getState().data(), - &residual_n1); + auto f4 = FeatureBase ::emplace<FeaturePointImage>(C1, Vector2d(300, 239), 0, cv::Mat(), Matrix2d::Identity()); + auto c3 = FactorBase ::emplace<FactorEpipolar>(f0, f0, f4, nullptr, false); + //f1->setMeasurement(Vector2d(300, 239)); + c3->operator()(F0->getP()->getState().data(), + F0->getO()->getState().data(), + F1->getP()->getState().data(), + F1->getO()->getState().data(), + camera->getP()->getState().data(), + camera->getO()->getState().data(), + &residual_n1); WOLF_TRACE("residual @ -1 pix : ", residual_n1);