diff --git a/include/vision/factor/factor_trifocal.h b/include/vision/factor/factor_trifocal.h index 3781ec621ed91a5efb1f1d3594b60e56d590c8f9..2c5a3f3ee7cea9096e756e98ad69bc16633876b6 100644 --- a/include/vision/factor/factor_trifocal.h +++ b/include/vision/factor/factor_trifocal.h @@ -145,11 +145,11 @@ using namespace Eigen; // Constructor FactorTrifocal::FactorTrifocal(const FeatureBasePtr& _feature_1_ptr, - const FeatureBasePtr& _feature_2_ptr, - const FeatureBasePtr& _feature_own_ptr, - const ProcessorBasePtr& _processor_ptr, - bool _apply_loss_function, - FactorStatus _status) : + const FeatureBasePtr& _feature_2_ptr, + const FeatureBasePtr& _feature_own_ptr, + const ProcessorBasePtr& _processor_ptr, + bool _apply_loss_function, + FactorStatus _status) : FactorAutodiff( "TRIFOCAL PLP", _feature_own_ptr, nullptr, diff --git a/src/processor/processor_bundle_adjustment.cpp b/src/processor/processor_bundle_adjustment.cpp index 19133a326bb90ee466d243d3d437e8c3a2226d3f..4a95b3cbd6b6dbbeb2c83836235b2b96662655f8 100644 --- a/src/processor/processor_bundle_adjustment.cpp +++ b/src/processor/processor_bundle_adjustment.cpp @@ -18,7 +18,7 @@ namespace wolf{ ProcessorBundleAdjustment::ProcessorBundleAdjustment(ParamsProcessorBundleAdjustmentPtr _params_bundle_adjustment) : - ProcessorTrackerFeature("ProcessorBundleAdjustment", 3, _params_bundle_adjustment), + ProcessorTrackerFeature("ProcessorBundleAdjustment", "PO", 3, _params_bundle_adjustment), params_bundle_adjustment_(_params_bundle_adjustment), capture_image_last_(nullptr), capture_image_incoming_(nullptr), diff --git a/src/processor/processor_tracker_feature_image.cpp b/src/processor/processor_tracker_feature_image.cpp index 875be21a085cf95757c2c4649f6ce6f7ac3c34fd..a064c624fe2207dcfec202a40905ccc3c92a2837 100644 --- a/src/processor/processor_tracker_feature_image.cpp +++ b/src/processor/processor_tracker_feature_image.cpp @@ -15,7 +15,7 @@ namespace wolf { ProcessorTrackerFeatureImage::ProcessorTrackerFeatureImage(ParamsProcessorTrackerFeatureImagePtr _params_tracker_feature_image) : - ProcessorTrackerFeature("ProcessorTrackerFeatureImage", 3, _params_tracker_feature_image), + ProcessorTrackerFeature("ProcessorTrackerFeatureImage", "PO", 3, _params_tracker_feature_image), cell_width_(0), cell_height_(0), // These will be initialized to proper values taken from the sensor via function configure() params_tracker_feature_image_(_params_tracker_feature_image) { diff --git a/src/processor/processor_tracker_feature_trifocal.cpp b/src/processor/processor_tracker_feature_trifocal.cpp index 6a58f1d68e3ab291ff57d75afb8f6634a2333bc0..dc079241ca7903e7ec882674ab08524463c99c09 100644 --- a/src/processor/processor_tracker_feature_trifocal.cpp +++ b/src/processor/processor_tracker_feature_trifocal.cpp @@ -30,7 +30,7 @@ namespace wolf { // Constructor ProcessorTrackerFeatureTrifocal::ProcessorTrackerFeatureTrifocal(ParamsProcessorTrackerFeatureTrifocalPtr _params_tracker_feature_trifocal) : - ProcessorTrackerFeature("ProcessorTrackerFeatureTrifocal", 3, _params_tracker_feature_trifocal ), + ProcessorTrackerFeature("ProcessorTrackerFeatureTrifocal", "PO", 3, _params_tracker_feature_trifocal ), params_tracker_feature_trifocal_(_params_tracker_feature_trifocal), capture_image_last_(nullptr), capture_image_incoming_(nullptr), diff --git a/src/processor/processor_tracker_landmark_image.cpp b/src/processor/processor_tracker_landmark_image.cpp index 0f3fa4a1bfbabec978cb7743d20073df76c57eba..ecf37b51aac261fadf4fc4a77d7b9d0d228869c3 100644 --- a/src/processor/processor_tracker_landmark_image.cpp +++ b/src/processor/processor_tracker_landmark_image.cpp @@ -27,7 +27,7 @@ namespace wolf { ProcessorTrackerLandmarkImage::ProcessorTrackerLandmarkImage(ParamsProcessorTrackerLandmarkImagePtr _params_tracker_landmark_image) : - ProcessorTrackerLandmark("ProcessorTrackerLandmarkImage", _params_tracker_landmark_image), + ProcessorTrackerLandmark("ProcessorTrackerLandmarkImage", "PO", _params_tracker_landmark_image), cell_width_(0), cell_height_(0), params_tracker_landmark_image_(_params_tracker_landmark_image), @@ -96,7 +96,7 @@ unsigned int ProcessorTrackerLandmarkImage::findLandmarks(const LandmarkBasePtrL cv::Mat candidate_descriptors; DMatchVector cv_matches; - Eigen::VectorXd current_state = getProblem()->getState(incoming_ptr_->getTimeStamp()); + Eigen::VectorXd current_state = getProblem()->getState(incoming_ptr_->getTimeStamp()).vector("PO"); for (auto landmark_in_ptr : _landmarks_in) { @@ -397,7 +397,7 @@ void ProcessorTrackerLandmarkImage::drawLandmarks(cv::Mat _image) { unsigned int num_lmks_in_img = 0; - Eigen::VectorXd current_state = last_ptr_->getFrame()->getState(); + Eigen::VectorXd current_state = last_ptr_->getFrame()->getState().vector("PO"); SensorCameraPtr camera = std::static_pointer_cast<SensorCamera>(getSensor()); for (auto landmark_base_ptr : getProblem()->getMap()->getLandmarkList()) diff --git a/test/gtest_factor_epipolar.cpp b/test/gtest_factor_epipolar.cpp index 9cda2a79fa4e8cbc0de72ebd40975a4a35ab976e..0bf3c267717c57bdbe6fcaf35192d7c3220f513e 100644 --- a/test/gtest_factor_epipolar.cpp +++ b/test/gtest_factor_epipolar.cpp @@ -41,8 +41,8 @@ TEST(FactorEpipolar, exemple) auto S = P->installSensor("SensorCamera", "camera", posecam, intr); auto camera = std::static_pointer_cast<SensorCamera>(S); - auto F0 = P ->emplaceFrame(KEY, pose0, 0.0); - auto F1 = P ->emplaceFrame(KEY, pose1, 1.0); + auto F0 = P ->emplaceFrame(KEY, 0.0, pose0); + auto F1 = P ->emplaceFrame(KEY, 1.0, pose1); 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()); @@ -60,9 +60,8 @@ TEST(FactorEpipolar, exemple) camera->getO()->getState().data(), &residual_0); - WOLF_TRACE("residual @ 0 pix: ", residual_0); + WOLF_TRACE("residual @ 0 pix : ", residual_0); - ASSERT_NEAR(residual_0, 0.0, 1e-6); // lines 1 pix difference auto f2 = FeatureBase ::emplace<FeaturePointImage>(C1, Vector2d(300, 241), 0, cv::Mat(), Matrix2d::Identity()); @@ -92,7 +91,6 @@ TEST(FactorEpipolar, exemple) 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 auto f4 = FeatureBase ::emplace<FeaturePointImage>(C1, Vector2d(300, 239), 0, cv::Mat(), Matrix2d::Identity()); @@ -108,6 +106,19 @@ TEST(FactorEpipolar, exemple) WOLF_TRACE("residual @ -1 pix : ", residual_n1); + + // all asserts down here: + + // residual zero when nominal + ASSERT_NEAR(residual_0, 0.0, 1e-6); + + // residual positive when camera up + ASSERT_GT(residual_1, 0.0); + + // residual double when camera doubly up + ASSERT_NEAR(residual_2, 2.0 * residual_1, 1e-6); + + // residual opposite when cam down ASSERT_NEAR(residual_1, -residual_n1, 1e-6); } diff --git a/test/gtest_factor_pixel_hp.cpp b/test/gtest_factor_pixel_hp.cpp index 3b8e24c1f58fb10c550d291f1eeedc3103782847..0514ba90052016e001507067d723c7f6d5c75717 100644 --- a/test/gtest_factor_pixel_hp.cpp +++ b/test/gtest_factor_pixel_hp.cpp @@ -172,15 +172,15 @@ class FactorPixelHpTest : public testing::Test{ cv::KeyPoint kp = cv::KeyPoint(p, 32.0f); cv::Mat des = cv::Mat::zeros(1,8, CV_8UC1); - F1 = problem->emplaceFrame(KEY, pose1, 1.0); + F1 = problem->emplaceFrame(KEY, 1.0, pose1); I1 = std::static_pointer_cast<CaptureImage>(CaptureBase::emplace<CaptureImage>(F1, 1.0, camera, cv::Mat(intr->width,intr->height,CV_8UC1))); f11 = std::static_pointer_cast<FeaturePointImage>(FeatureBase::emplace<FeaturePointImage>(I1, kp, 0, des, pix_cov)); // pixel at origin - F2 = problem->emplaceFrame(KEY, pose2, 2.0); + F2 = problem->emplaceFrame(KEY, 2.0, pose2); I2 = std::static_pointer_cast<CaptureImage>((CaptureBase::emplace<CaptureImage>(F2, 2.0, camera, cv::Mat(intr->width,intr->height,CV_8UC1)))); f21 = std::static_pointer_cast<FeaturePointImage>(FeatureBase::emplace<FeaturePointImage>(I2, kp, 0, des, pix_cov)); // pixel at origin - F3 = problem->emplaceFrame(KEY, pose3, 3.0); + F3 = problem->emplaceFrame(KEY, 3.0, pose3); I3 = std::static_pointer_cast<CaptureImage>(CaptureBase::emplace<CaptureImage>(F3, 3.0, camera, cv::Mat(intr->width,intr->height,CV_8UC1))); f31 = std::static_pointer_cast<FeaturePointImage>(FeatureBase::emplace<FeaturePointImage>(I3, kp, 0, des, pix_cov)); // pixel at origin @@ -221,7 +221,7 @@ TEST(ProcessorFactorPixelHp, testZeroResidual) ProcessorBundleAdjustmentPtr proc_bundle_adj = std::static_pointer_cast<ProcessorBundleAdjustment>(proc); // Frame - FrameBasePtr frm0 = problem_ptr->emplaceFrame(KEY, problem_ptr->zeroState(), TimeStamp(0)); + FrameBasePtr frm0 = problem_ptr->emplaceFrame(KEY, 0.0, problem_ptr->stateZero()); // Capture auto cap0 = std::static_pointer_cast<CaptureImage>(CaptureImage::emplace<CaptureImage>(frm0, TimeStamp(0), camera, cv::Mat::zeros(480,640, 1))); @@ -283,7 +283,7 @@ TEST_F(FactorPixelHpTest, testSolveLandmarkAltered) L1->unfix(); auto orig = L1->point(); - L1->getP()->setState(L1->getState() + Vector4d::Random()); + L1->getP()->setState(L1->getState().vector("P") + Vector4d::Random()); std::string report = ceres_manager->solve(wolf::SolverManager::ReportVerbosity::FULL); std::cout << report << std::endl; @@ -312,7 +312,7 @@ TEST_F(FactorPixelHpTest, testSolveFramePosition2ObservableDoF) auto ori = F1->getO()->getState(); Vector7d state; state << position, ori; - F1->setState(state); + F1->setState(VectorComposite(state, "PO", {3,4})); F1->getO()->fix(); F1->getP()->unfix(); @@ -402,9 +402,9 @@ TEST_F(FactorPixelHpTest, testSolveFramePosition) Vector3d position; position << Vector3d::Random()*100;//2.0, 2.0, 2.0; auto ori = F1->getO()->getState(); - Vector7d state; - state << position, ori; - F1->setState(state); +// Vector7d state; +// state << position, ori; + F1->setState("PO", {position, ori}); F1->getO()->fix(); F1->getP()->unfix(); @@ -430,7 +430,7 @@ TEST_F(FactorPixelHpTest, testSolveBundleAdjustment) // Go around a weird bug: if we do not perturbate this LMK then the test fails. - L1->getP()->setState(L1->getState() + Vector4d::Random()*1e-12); + L1->perturb(1e-12); diff --git a/test/gtest_factor_trifocal.cpp b/test/gtest_factor_trifocal.cpp index c331232d9a5b7466cea0b2fef0f42fa1f96768cc..ba1fb43dc727bfdefd5fe3c4fac1231e06243116 100644 --- a/test/gtest_factor_trifocal.cpp +++ b/test/gtest_factor_trifocal.cpp @@ -142,15 +142,15 @@ class FactorTrifocalTest : public testing::Test{ Vector2d pix(0,0); Matrix2d pix_cov(Matrix2d::Identity() * pow(pixel_noise_std, 2)); - F1 = problem->emplaceFrame(KEY, pose1, 1.0); + F1 = problem->emplaceFrame(KEY, 1.0, pose1); I1 = std::static_pointer_cast<CaptureImage>(CaptureBase::emplace<CaptureImage>(F1, 1.0, camera, cv::Mat(2,2,CV_8UC1))); f1 = FeatureBase::emplace<FeatureBase>(I1, "PIXEL", pix, pix_cov); // pixel at origin - F2 = problem->emplaceFrame(KEY, pose2, 2.0); + F2 = problem->emplaceFrame(KEY, 2.0, pose2); I2 = std::static_pointer_cast<CaptureImage>((CaptureBase::emplace<CaptureImage>(F2, 2.0, camera, cv::Mat(2,2,CV_8UC1)))); f2 = FeatureBase::emplace<FeatureBase>(I2, "PIXEL", pix, pix_cov); // pixel at origin - F3 = problem->emplaceFrame(KEY, pose3, 3.0); + F3 = problem->emplaceFrame(KEY, 3.0, pose3); I3 = std::static_pointer_cast<CaptureImage>(CaptureBase::emplace<CaptureImage>(F3, 3.0, camera, cv::Mat(2,2,CV_8UC1))); f3 = FeatureBase::emplace<FeatureBase>(I3, "PIXEL", pix, pix_cov); // pixel at origin @@ -356,9 +356,9 @@ TEST_F(FactorTrifocalTest, operator_parenthesis) TEST_F(FactorTrifocalTest, solve_F1) { - F1->setState(pose1); - F2->setState(pose2); - F3->setState(pose3); + F1->setState("PO", { pose1.head(3), pose1.tail(4) } ); + F2->setState("PO", { pose2.head(3), pose2.tail(4) } ); + F3->setState("PO", { pose3.head(3), pose3.tail(4) } ); S ->getP()->setState(pos_cam); S ->getO()->setState(vquat_cam); // Residual with prior @@ -386,9 +386,11 @@ TEST_F(FactorTrifocalTest, solve_F1) // Residual with perturbated state - Vector7d pose_perturbated = F1->getState() + 0.1 * Vector7d::Random(); - pose_perturbated.segment(3,4).normalize(); - F1->setState(pose_perturbated); +// Vector7d pose_perturbated = F1->getState() + 0.1 * Vector7d::Random(); +// pose_perturbated.segment(3,4).normalize(); +// F1->setState(pose_perturbated); + F1->perturb(0.1); +// VectorXd pose_perturbated = F1->getState().vector("PO"); F1_p = F1->getP()->getState(); F1_o = F1->getO()->getState(); @@ -399,7 +401,7 @@ TEST_F(FactorTrifocalTest, solve_F1) S_p. data(), S_o. data(), res.data()); - WOLF_DEBUG("perturbed state: ", pose_perturbated.transpose()); + WOLF_DEBUG("perturbed state: ", F1->getState().vector("PO").transpose()); WOLF_DEBUG("residual before solve: ", res.transpose()); // Residual with solved state @@ -426,7 +428,7 @@ TEST_F(FactorTrifocalTest, solve_F1) S_p. data(), S_o. data(), res.data()); - WOLF_DEBUG("solved state: ", F1->getState().transpose()); + WOLF_DEBUG("solved state: ", F1->getState().vector("PO").transpose()); WOLF_DEBUG("residual after solve: ", res.transpose()); WOLF_DEBUG(report, " AND UNION"); @@ -437,9 +439,9 @@ TEST_F(FactorTrifocalTest, solve_F1) TEST_F(FactorTrifocalTest, solve_F2) { - F1->setState(pose1); - F2->setState(pose2); - F3->setState(pose3); + F1->setState("PO", { pose1.head(3), pose1.tail(4) } ); + F2->setState("PO", { pose2.head(3), pose2.tail(4) } ); + F3->setState("PO", { pose3.head(3), pose3.tail(4) } ); S ->getP()->setState(pos_cam); S ->getO()->setState(vquat_cam); @@ -462,15 +464,13 @@ TEST_F(FactorTrifocalTest, solve_F2) S_p. data(), S_o. data(), res.data()); - WOLF_DEBUG("Initial state: ", F2->getState().transpose()); + WOLF_DEBUG("Initial state: ", F2->getState().vector("PO").transpose()); WOLF_DEBUG("residual before perturbing: ", res.transpose()); ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); // Residual with perturbated state - Vector7d pose_perturbated = F2->getState() + 0.1 * Vector7d::Random(); - pose_perturbated.segment(3,4).normalize(); - F2->setState(pose_perturbated); + F2->perturb(0.1); F2_p = F2->getP()->getState(); F2_o = F2->getO()->getState(); @@ -481,7 +481,7 @@ TEST_F(FactorTrifocalTest, solve_F2) S_p. data(), S_o. data(), res.data()); - WOLF_DEBUG("perturbed state: ", pose_perturbated.transpose()); + WOLF_DEBUG("perturbed state: ", F2->getState().vector("PO").transpose()); WOLF_DEBUG("residual before solve: ", res.transpose()); // Residual with solved state @@ -508,7 +508,7 @@ TEST_F(FactorTrifocalTest, solve_F2) S_p. data(), S_o. data(), res.data()); - WOLF_DEBUG("solved state: ", F2->getState().transpose()); + WOLF_DEBUG("solved state: ", F2->getState().vector("PO").transpose()); WOLF_DEBUG("residual after solve: ", res.transpose()); WOLF_DEBUG(report, " AND UNION"); @@ -519,9 +519,9 @@ TEST_F(FactorTrifocalTest, solve_F2) TEST_F(FactorTrifocalTest, solve_F3) { - F1->setState(pose1); - F2->setState(pose2); - F3->setState(pose3); + F1->setState("PO", { pose1.head(3), pose1.tail(4) } ); + F2->setState("PO", { pose2.head(3), pose2.tail(4) } ); + F3->setState("PO", { pose3.head(3), pose3.tail(4) } ); S ->getP()->setState(pos_cam); S ->getO()->setState(vquat_cam); @@ -544,15 +544,13 @@ TEST_F(FactorTrifocalTest, solve_F3) S_p. data(), S_o. data(), res.data()); - WOLF_DEBUG("Initial state: ", F3->getState().transpose()); + WOLF_DEBUG("Initial state: ", F3->getState().vector("PO").transpose()); WOLF_DEBUG("residual before perturbing: ", res.transpose()); ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); // Residual with perturbated state - Vector7d pose_perturbated = F3->getState() + 0.1 * Vector7d::Random(); - pose_perturbated.segment(3,4).normalize(); - F3->setState(pose_perturbated); + F3->perturb(0.1); F3_p = F3->getP()->getState(); F3_o = F3->getO()->getState(); @@ -563,7 +561,7 @@ TEST_F(FactorTrifocalTest, solve_F3) S_p. data(), S_o. data(), res.data()); - WOLF_DEBUG("perturbed state: ", pose_perturbated.transpose()); + WOLF_DEBUG("perturbed state: ", F3->getState().vector("PO").transpose()); WOLF_DEBUG("residual before solve: ", res.transpose()); ASSERT_NEAR(res(2), 0, 1e-8); // Epipolar c2-c1 should be respected when perturbing F3 @@ -591,7 +589,7 @@ TEST_F(FactorTrifocalTest, solve_F3) S_p. data(), S_o. data(), res.data()); - WOLF_DEBUG("solved state: ", F3->getState().transpose()); + WOLF_DEBUG("solved state: ", F3->getState().vector("PO").transpose()); WOLF_DEBUG("residual after solve: ", res.transpose()); WOLF_DEBUG(report, " AND UNION"); @@ -602,9 +600,9 @@ TEST_F(FactorTrifocalTest, solve_F3) TEST_F(FactorTrifocalTest, solve_S) { - F1->setState(pose1); - F2->setState(pose2); - F3->setState(pose3); + F1->setState(pose1, "PO", {3,4}); + F2->setState(pose2, "PO", {3,4}); + F3->setState(pose3, "PO", {3,4}); S ->getP()->setState(pos_cam); S ->getO()->setState(vquat_cam); @@ -633,12 +631,7 @@ TEST_F(FactorTrifocalTest, solve_S) // Residual with perturbated state - Vector3d pos_perturbated = pos_cam + 0.1 * Vector3d::Random(); - Vector4d ori_perturbated = vquat_cam + 0.1 * Vector4d::Random(); - ori_perturbated.normalize(); - Vector7d pose_perturbated; pose_perturbated << pos_perturbated, ori_perturbated; - S->getP()->setState(pos_perturbated); - S->getO()->setState(ori_perturbated); + S->perturb(0.1); S_p = S->getP()->getState(); S_o = S->getO()->getState(); @@ -649,7 +642,7 @@ TEST_F(FactorTrifocalTest, solve_S) S_p. data(), S_o. data(), res.data()); - WOLF_DEBUG("perturbed state: ", pose_perturbated.transpose()); + WOLF_DEBUG("perturbed state: ", S->getState().vector("PO").transpose()); WOLF_DEBUG("residual before solve: ", res.transpose()); // Residual with solved state @@ -791,10 +784,10 @@ TEST_F(FactorTrifocalMultiPointTest, solve_multi_point) problem->print(1,0,1,0); // Evaluate final states - ASSERT_MATRIX_APPROX(F2->getP()->getState(), pos2 , 1e-10); - ASSERT_MATRIX_APPROX(F2->getO()->getState(), vquat2, 1e-10); - ASSERT_MATRIX_APPROX(F3->getP()->getState(), pos3 , 1e-10); - ASSERT_MATRIX_APPROX(F3->getO()->getState(), vquat3, 1e-10); + ASSERT_MATRIX_APPROX(F2->getP()->getState(), pos2 , 1e-6); + ASSERT_MATRIX_APPROX(F2->getO()->getState(), vquat2, 1e-6); + ASSERT_MATRIX_APPROX(F3->getP()->getState(), pos3 , 1e-6); + ASSERT_MATRIX_APPROX(F3->getO()->getState(), vquat3, 1e-6); Eigen::VectorXd F1_p = F1->getP()->getState(); Eigen::VectorXd F1_o = F1->getO()->getState(); @@ -815,7 +808,7 @@ TEST_F(FactorTrifocalMultiPointTest, solve_multi_point) S_p. data(), S_o. data(), res.data()); - ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-10); + ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); } } diff --git a/test/gtest_processor_bundle_adjustment.cpp b/test/gtest_processor_bundle_adjustment.cpp index 842c53d74f5b366781a1ddd44d8ed92f78f12e59..ca56702480f2aa295347e6435e57527028d56790 100644 --- a/test/gtest_processor_bundle_adjustment.cpp +++ b/test/gtest_processor_bundle_adjustment.cpp @@ -255,7 +255,7 @@ TEST(ProcessorBundleAdjustment, emplaceLandmark) ProcessorBundleAdjustmentPtr proc_bundle_adj = std::static_pointer_cast<ProcessorBundleAdjustment>(proc); //Frame - FrameBasePtr frm0 = problem_ptr->emplaceFrame(KEY, problem_ptr->zeroState(), TimeStamp(0)); + FrameBasePtr frm0 = problem_ptr->emplaceFrame(KEY, 0.0, problem_ptr->stateZero()); // Capture, feature and factor auto cap0 = std::static_pointer_cast<CaptureImage>(CaptureImage::emplace<CaptureImage>(frm0, TimeStamp(0), camera, cv::Mat::zeros(480,640, 1))); diff --git a/test/gtest_processor_tracker_feature_trifocal.cpp b/test/gtest_processor_tracker_feature_trifocal.cpp index e4ac851dfe5dedf22773d1fa8b4b993bdb383da2..97c244cea83734ef546fbdbd7e04bbea8e2683f8 100644 --- a/test/gtest_processor_tracker_feature_trifocal.cpp +++ b/test/gtest_processor_tracker_feature_trifocal.cpp @@ -78,8 +78,6 @@ TEST(ProcessorTrackerFeatureTrifocal, KeyFrameCallback) ParamsSensorCameraPtr intr = make_shared<ParamsSensorCamera>(); // TODO init params or read from YAML intr->width = 640; intr->height = 480; - // SensorCameraPtr sens_trk = make_shared<SensorCamera>((Eigen::Vector7d()<<0,0,0, 0,0,0,1).finished(), - // intr); auto sens_trk = SensorBase::emplace<SensorCamera>(problem->getHardware(), (Eigen::Vector7d()<<0,0,0, 0,0,0,1).finished(), intr); @@ -120,11 +118,12 @@ TEST(ProcessorTrackerFeatureTrifocal, KeyFrameCallback) // initialize TimeStamp t(0.0); - Vector7d x; x << 0,0,0, 0,0,0,1; - Matrix6d P = Matrix6d::Identity() * 0.000001; - auto KF1 = problem->setPriorFactor(x, P, t, dt/2); // KF1 + VectorComposite x("PO", {Vector3d::Zero(), Quaterniond::Identity().coeffs()}); + VectorComposite s("PO", {1e-3*Vector3d::Ones(), 1e-3*Vector3d::Ones()}); + auto KF1 = problem->setPriorFactor(x, s, t, dt/2); // KF1 std::static_pointer_cast<ProcessorOdom3d>(proc_odo)->setOrigin(KF1); + MatrixXd P = (s.vector("PO").array() * s.vector("PO").array()).matrix().asDiagonal(); CaptureOdom3dPtr capt_odo = make_shared<CaptureOdom3d>(t, sens_odo, Vector6d::Zero(), P); // Track @@ -152,7 +151,7 @@ TEST(ProcessorTrackerFeatureTrifocal, KeyFrameCallback) problem->print(2,0,1,0); // Only odom creating KFs - ASSERT_TRUE( problem->getLastKeyFrame()->getType().compare("PO 3d")==0 ); +// ASSERT_TRUE( problem->getLastKeyFrame()->getType().compare("PO 3d")==0 ); } }