diff --git a/CMakeLists.txt b/CMakeLists.txt index 41368240328963d68fd2a020ce1376e74b9fa5e9..681ff424bdb66621b50c123fe37ed00ce06d880f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,6 @@ # Pre-requisites about cmake itself -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +MESSAGE("Starting ${PLUGIN_NAME} CMakeLists ...") +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) if(COMMAND cmake_policy) cmake_policy(SET CMP0005 NEW) @@ -72,8 +73,6 @@ if(BUILD_TESTS) enable_testing() endif() -MESSAGE("Starting ${PLUGIN_NAME} CMakeLists ...") -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) #CMAKE modules diff --git a/test/gtest_factor_epipolar.cpp b/test/gtest_factor_epipolar.cpp index ddb6d5db49918ecd233369121cb56776bbe9a996..f468fc3e7ca158dde67a7f7f0a77d0501e15bc78 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 ->emplaceKeyFrame(0.0, pose0); - auto F1 = P ->emplaceKeyFrame(1.0, pose1); + auto F0 = P ->emplaceFrame(0.0, pose0); + auto F1 = P ->emplaceFrame(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()); diff --git a/test/gtest_factor_pixel_hp.cpp b/test/gtest_factor_pixel_hp.cpp index a6e9bd316c6753e7d09ff2fc81849627b0679db6..70875a7c0ff2c70c0408f1749b3ae5627505cedf 100644 --- a/test/gtest_factor_pixel_hp.cpp +++ b/test/gtest_factor_pixel_hp.cpp @@ -169,15 +169,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->emplaceKeyFrame(1.0, pose1); + F1 = problem->emplaceFrame(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->emplaceKeyFrame(2.0, pose2); + F2 = problem->emplaceFrame(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->emplaceKeyFrame(3.0, pose3); + F3 = problem->emplaceFrame(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 @@ -217,7 +217,7 @@ TEST(ProcessorFactorPixelHp, testZeroResidual) ProcessorBundleAdjustmentPtr proc_bundle_adj = std::static_pointer_cast<ProcessorBundleAdjustment>(proc); // Frame - FrameBasePtr frm0 = problem_ptr->emplaceKeyFrame(0.0, problem_ptr->stateZero()); + FrameBasePtr frm0 = problem_ptr->emplaceFrame(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))); @@ -279,7 +279,8 @@ TEST_F(FactorPixelHpTest, testSolveLandmarkAltered) L1->unfix(); auto orig = L1->point(); - L1->getP()->setState(L1->getState().vector("P") + Vector4d::Random()); + L1->getP()->perturb(1.0); + std::string report = solver->solve(wolf::SolverManager::ReportVerbosity::FULL); std::cout << report << std::endl; @@ -341,11 +342,11 @@ TEST_F(FactorPixelHpTest, testSolveFramePosition) //landmarks to camera coordinates Transform<double,3,Isometry> T_w_r - = Translation<double,3>(F1->getP()->getState()) - * Quaterniond(F1->getO()->getState().data()); + = Translation<double,3>(F1->getP()->getState()) + * Quaterniond(F1->getO()->getState().data()); Transform<double,3,Isometry> T_r_c - = Translation<double,3>(I1->getSensorP()->getState()) - * Quaterniond(I1->getSensorO()->getState().data()); + = Translation<double,3>(I1->getSensorP()->getState()) + * Quaterniond(I1->getSensorO()->getState().data()); Eigen::Matrix<double, 4, 1> lmkHP2_c = T_r_c.inverse() * T_w_r.inverse() * lmkHP2; Eigen::Matrix<double, 4, 1> lmkHP3_c = T_r_c.inverse() * T_w_r.inverse() * lmkHP3; Eigen::Matrix<double, 4, 1> lmkHP4_c = T_r_c.inverse() * T_w_r.inverse() * lmkHP4; @@ -395,15 +396,10 @@ TEST_F(FactorPixelHpTest, testSolveFramePosition) auto orig = F1->getP()->getState(); //change state - Vector3d position; - position << Vector3d::Random()*100;//2.0, 2.0, 2.0; - auto ori = F1->getO()->getState(); -// Vector7d state; -// state << position, ori; - F1->setState("PO", {position, ori}); + F1->getP()->unfix(); + F1->getP()->perturb(0.1); F1->getO()->fix(); - F1->getP()->unfix(); std::string report = solver->solve(wolf::SolverManager::ReportVerbosity::FULL); @@ -415,9 +411,7 @@ TEST_F(FactorPixelHpTest, testSolveFramePosition) // This test checks 3 DoF (3doF are observable). ASSERT_MATRIX_APPROX(F1->getP()->getState(), orig, 1e-6); - Eigen::VectorXd expect = c11->expectation(); - ASSERT_FLOAT_EQ(expect(0,0),f11->getMeasurement()(0,0)); - ASSERT_FLOAT_EQ(expect(1,0),f11->getMeasurement()(1,0)); + ASSERT_MATRIX_APPROX(c11->expectation(), f11->getMeasurement(), 1e-3); } @@ -584,26 +578,7 @@ TEST_F(FactorPixelHpTest, testSolveBundleAdjustment) ASSERT_MATRIX_APPROX(L4->getP()->getState(), l4, 1e-6); // perturb states - - // kfs - for (auto kf : *problem->getTrajectory()) - { - if (kf == F1) continue; - - if (!kf->getP()->isFixed()) - kf->getP()->setState(kf->getP()->getState() + 0.2*Vector3d::Random()); - if (!kf->getO()->isFixed()) - kf->getO()->setState((Quaterniond(kf->getO()->getState().data()) * exp_q(0.2*Vector3d::Random())).coeffs()); - } - - // lmks - for (auto lmk : problem->getMap()->getLandmarkList()) - { - if (lmk == L1) continue; - - if (!lmk->isFixed()) - lmk->getP()->setState(lmk->getP()->getState() + 0.2*Vector4d::Random()); - } + problem->perturb(0.1); // solve again problem->print(1,0,1,1); diff --git a/test/gtest_factor_trifocal.cpp b/test/gtest_factor_trifocal.cpp index 4d67f4ecfc625b275f26348cfd9a257853186969..0d15c6bb3d4e17d8e79f159c36d6904276caf533 100644 --- a/test/gtest_factor_trifocal.cpp +++ b/test/gtest_factor_trifocal.cpp @@ -141,15 +141,15 @@ class FactorTrifocalTest : public testing::Test{ Vector2d pix(0,0); Matrix2d pix_cov(Matrix2d::Identity() * pow(pixel_noise_std, 2)); - F1 = problem->emplaceKeyFrame(1.0, pose1); + F1 = problem->emplaceFrame(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->emplaceKeyFrame(2.0, pose2); + F2 = problem->emplaceFrame(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->emplaceKeyFrame(3.0, pose3); + F3 = problem->emplaceFrame(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 @@ -182,7 +182,7 @@ TEST_F(FactorTrifocalTest, InfoMatrix) */ Matrix3d sqrt_info_gt = Matrix3d::Identity() / pixel_noise_std / sqrt(2.0); - ASSERT_MATRIX_APPROX(c123->getSqrtInformationUpper(), sqrt_info_gt, 1e-8); + ASSERT_MATRIX_APPROX(c123->getSqrtInformationUpper(), sqrt_info_gt, 1e-6); } @@ -228,10 +228,10 @@ TEST_F(FactorTrifocalTest, expectation) l2 = c2Ec1 * _m1; // check epipolar lines (check only director vectors for equal direction) - ASSERT_MATRIX_APPROX(l2/l2(1), _l2/_l2(1), 1e-8); + ASSERT_MATRIX_APPROX(l2/l2(1), _l2/_l2(1), 1e-6); // check perpendicular lines (check only director vectors for orthogonal direction) - ASSERT_NEAR(l2(0)*_p2(0) + l2(1)*_p2(1), 0, 1e-8); + ASSERT_NEAR(l2(0)*_p2(0) + l2(1)*_p2(1), 0, 1e-6); // Verify trilinearities @@ -241,18 +241,18 @@ TEST_F(FactorTrifocalTest, expectation) // Point-line-point Vector3d plp = wolf::skew(_m3) * m1Tt * _p2; - ASSERT_MATRIX_APPROX(plp, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(plp, Vector3d::Zero(), 1e-6); // Point-point-line Vector3d ppl = _p3.transpose() * m1Tt * wolf::skew(_m2); - ASSERT_MATRIX_APPROX(ppl, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(ppl, Vector3d::Zero(), 1e-6); // Point-point-point Matrix3d ppp = wolf::skew(_m3) * m1Tt * wolf::skew(_m2); - ASSERT_MATRIX_APPROX(ppp, Matrix3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(ppp, Matrix3d::Zero(), 1e-6); // check epipolars - ASSERT_MATRIX_APPROX(c2Ec1/c2Ec1(0,1), _c2Ec1/_c2Ec1(0,1), 1e-8); + ASSERT_MATRIX_APPROX(c2Ec1/c2Ec1(0,1), _c2Ec1/_c2Ec1(0,1), 1e-6); } TEST_F(FactorTrifocalTest, residual) @@ -265,7 +265,7 @@ TEST_F(FactorTrifocalTest, residual) c123->expectation(pos1, quat1, pos2, quat2, pos3, quat3, pos_cam, quat_cam, tensor, c2Ec1); residual = c123->residual(tensor, c2Ec1); - ASSERT_MATRIX_APPROX(residual, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(residual, Vector3d::Zero(), 1e-6); } TEST_F(FactorTrifocalTest, error_jacobians) @@ -350,7 +350,7 @@ TEST_F(FactorTrifocalTest, operator_parenthesis) pos_cam.data(), vquat_cam.data(), res.data()); - ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-6); } TEST_F(FactorTrifocalTest, solve_F1) @@ -381,15 +381,10 @@ TEST_F(FactorTrifocalTest, solve_F1) WOLF_DEBUG("Initial state: ", F1->getState().transpose()); WOLF_DEBUG("residual before perturbing: ", res.transpose()); - ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-6); // Residual with perturbated state - -// 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(); @@ -432,7 +427,7 @@ TEST_F(FactorTrifocalTest, solve_F1) WOLF_DEBUG(report, " AND UNION"); - ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-6); } @@ -465,7 +460,7 @@ TEST_F(FactorTrifocalTest, solve_F2) WOLF_DEBUG("Initial state: ", F2->getState().vector("PO").transpose()); WOLF_DEBUG("residual before perturbing: ", res.transpose()); - ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-6); // Residual with perturbated state @@ -512,7 +507,7 @@ TEST_F(FactorTrifocalTest, solve_F2) WOLF_DEBUG(report, " AND UNION"); - ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-6); } @@ -545,7 +540,7 @@ TEST_F(FactorTrifocalTest, solve_F3) WOLF_DEBUG("Initial state: ", F3->getState().vector("PO").transpose()); WOLF_DEBUG("residual before perturbing: ", res.transpose()); - ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-6); // Residual with perturbated state @@ -562,7 +557,7 @@ TEST_F(FactorTrifocalTest, solve_F3) 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 + ASSERT_NEAR(res(2), 0, 1e-6); // Epipolar c2-c1 should be respected when perturbing F3 // Residual with solved state @@ -593,7 +588,7 @@ TEST_F(FactorTrifocalTest, solve_F3) WOLF_DEBUG(report, " AND UNION"); - ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-6); } @@ -626,7 +621,7 @@ TEST_F(FactorTrifocalTest, solve_S) WOLF_DEBUG("Initial state: ", S->getP()->getState().transpose(), " ", S->getO()->getState().transpose()); WOLF_DEBUG("residual before perturbing: ", res.transpose()); - ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-6); // Residual with perturbated state @@ -673,7 +668,7 @@ TEST_F(FactorTrifocalTest, solve_S) WOLF_DEBUG(report, " AND UNION"); - ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-6); } @@ -769,12 +764,7 @@ TEST_F(FactorTrifocalMultiPointTest, solve_multi_point) F3->getO()->unfix(); // Estimate Cam 3 ori // Perturbate states, keep scale - F1->getP()->setState( pos1 ); - F1->getO()->setState( vquat1 ); - F2->getP()->setState( pos2 ); // this fixes the scale - F2->getO()->setState((vquat2 + 0.2*Vector4d::Random()).normalized()); - F3->getP()->setState( pos3 + 0.2*Vector3d::Random()); - F3->getO()->setState((vquat3 + 0.2*Vector4d::Random()).normalized()); + problem->perturb(0.1); std::string report = solver->solve(SolverManager::ReportVerbosity::FULL); @@ -807,7 +797,7 @@ TEST_F(FactorTrifocalMultiPointTest, solve_multi_point) S_p. data(), S_o. data(), res.data()); - ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-6); } } @@ -834,12 +824,13 @@ TEST_F(FactorTrifocalMultiPointTest, solve_multi_point_scale) F3->getO()->unfix(); // Estimate Cam 3 ori // Perturbate states, change scale +// problem->perturb(0.1); F1->getP()->setState( 2 * pos1 ); F1->getO()->setState( vquat1 ); F2->getP()->setState( 2 * pos2 ); - F2->getO()->setState(( vquat2 + 0.2*Vector4d::Random()).normalized()); - F3->getP()->setState( 2 * pos3 + 0.2*Vector3d::Random()); - F3->getO()->setState(( vquat3 + 0.2*Vector4d::Random()).normalized()); + F2->getO()->setState(( vquat2 + 0.1*Vector4d::Random()).normalized()); + F3->getP()->setState( 2 * pos3 + 0.1*Vector3d::Random()); + F3->getO()->setState(( vquat3 + 0.1*Vector4d::Random()).normalized()); std::string report = solver->solve(SolverManager::ReportVerbosity::BRIEF); @@ -848,10 +839,10 @@ TEST_F(FactorTrifocalMultiPointTest, solve_multi_point_scale) problem->print(1,0,1,0); // Evaluate final states - ASSERT_MATRIX_APPROX(F2->getP()->getState(), 2 * pos2, 1e-8); - ASSERT_MATRIX_APPROX(F2->getO()->getState(), vquat2, 1e-8); - ASSERT_MATRIX_APPROX(F3->getP()->getState(), 2 * pos3, 1e-8); - ASSERT_MATRIX_APPROX(F3->getO()->getState(), vquat3, 1e-8); + ASSERT_MATRIX_APPROX(F2->getP()->getState(), 2 * pos2, 1e-6); + ASSERT_MATRIX_APPROX(F2->getO()->getState(), vquat2, 1e-6); + ASSERT_MATRIX_APPROX(F3->getP()->getState(), 2 * 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(); @@ -872,7 +863,7 @@ TEST_F(FactorTrifocalMultiPointTest, solve_multi_point_scale) S_p. data(), S_o. data(), res.data()); - ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-6); } } @@ -900,6 +891,7 @@ TEST_F(FactorTrifocalMultiPointTest, solve_multi_point_distance) F3->getO()->unfix(); // Estimate Cam 3 ori // Perturbate states, change scale +// problem->perturb(0.1); F1->getP()->setState( pos1 ); F1->getO()->setState( vquat1 ); F2->getP()->setState( pos2 + 0.2*Vector3d::Random() ); @@ -936,10 +928,10 @@ TEST_F(FactorTrifocalMultiPointTest, solve_multi_point_distance) problem->print(1,0,1,0); // Evaluate final states - ASSERT_MATRIX_APPROX(F2->getP()->getState(), pos2 , 1e-8); - ASSERT_MATRIX_APPROX(F2->getO()->getState(), vquat2, 1e-8); - ASSERT_MATRIX_APPROX(F3->getP()->getState(), pos3 , 1e-8); - ASSERT_MATRIX_APPROX(F3->getO()->getState(), vquat3, 1e-8); + 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(); @@ -960,7 +952,7 @@ TEST_F(FactorTrifocalMultiPointTest, solve_multi_point_distance) S_p. data(), S_o. data(), res.data()); - ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-8); + ASSERT_MATRIX_APPROX(res, Vector3d::Zero(), 1e-6); } } diff --git a/test/gtest_processor_bundle_adjustment.cpp b/test/gtest_processor_bundle_adjustment.cpp index d37e1911e21902c1e7d98e666c531cd6ee4b5e7b..a5a8042adcc92605e3b6cf28228f649059a426ae 100644 --- a/test/gtest_processor_bundle_adjustment.cpp +++ b/test/gtest_processor_bundle_adjustment.cpp @@ -26,7 +26,11 @@ class ProcessorBundleAdjustmentDummy : public ProcessorBundleAdjustment { public: - ProcessorBundleAdjustmentDummy(ParamsProcessorBundleAdjustmentPtr& _params_bundle_adjustment):ProcessorBundleAdjustment(_params_bundle_adjustment){} + ProcessorBundleAdjustmentDummy(ParamsProcessorBundleAdjustmentPtr& _params_bundle_adjustment): + ProcessorBundleAdjustment(_params_bundle_adjustment) + { + + } void setLast(CaptureImagePtr _last_ptr) { @@ -68,11 +72,9 @@ class ProcessorBundleAdjustmentDummy : public ProcessorBundleAdjustment return matches_last_from_incoming_; } - CaptureImagePtr createCaptureImage(std::string _path, SensorCameraPtr _sensor, bool detectAndDescript = false) + CaptureImagePtr createCaptureImage(TimeStamp _ts, std::string _path, SensorCameraPtr _sensor, bool detectAndDescript = false) { - const double time = 0.0; - TimeStamp ts(time); - CaptureImagePtr im = std::make_shared<CaptureImage>(ts, _sensor, cv::imread(_path)); + CaptureImagePtr im = std::make_shared<CaptureImage>(_ts, _sensor, cv::imread(_path)); if (detectAndDescript){ // Detect KeyPoints im->keypoints_ = det_ptr_->detect(im->getImage()); @@ -138,10 +140,10 @@ TEST(ProcessorBundleAdjustment, preProcess) auto proc_dummy = std::make_shared<ProcessorBundleAdjustmentDummy>(params); // Put an image on incoming_ptr_ - CaptureImagePtr image_inc_ptr = proc_dummy->createCaptureImage(wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", nullptr); + CaptureImagePtr image_inc_ptr = proc_dummy->createCaptureImage(0, wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", nullptr); proc_dummy->setInc(image_inc_ptr); // Put an image on last_ptr_ - CaptureImagePtr image_last_ptr = proc_dummy->createCaptureImage(wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", nullptr, true); + CaptureImagePtr image_last_ptr = proc_dummy->createCaptureImage(1, wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", nullptr, true); proc_dummy->setLast(image_last_ptr); // demo dpreProcess proc_dummy->preProcess(); @@ -169,7 +171,7 @@ TEST(ProcessorBundleAdjustment, detectNewFeatures) FeatureBasePtrList feat_list = std::list<FeatureBasePtr>(); // Put an image on last_ptr_ - CaptureImagePtr image_last_ptr = proc_dummy->createCaptureImage(wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", nullptr, true); + CaptureImagePtr image_last_ptr = proc_dummy->createCaptureImage(0, wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", nullptr, true); ASSERT_NE(image_last_ptr->keypoints_.size(), 0); proc_dummy->setLast(image_last_ptr); @@ -178,7 +180,7 @@ TEST(ProcessorBundleAdjustment, detectNewFeatures) ASSERT_EQ(num, 0); // Put an image on incoming_ptr_ - CaptureImagePtr image_inc_ptr = proc_dummy->createCaptureImage(wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", nullptr); + CaptureImagePtr image_inc_ptr = proc_dummy->createCaptureImage(1, wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", nullptr); proc_dummy->setInc(image_inc_ptr); // demo detectNewFeatures @@ -212,9 +214,9 @@ TEST(ProcessorBundleAdjustment, trackFeatures) //fill feat_last list FeatureBasePtrList feat_list = std::list<FeatureBasePtr>(); - CaptureImagePtr image_last_ptr = proc_dummy->createCaptureImage(wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", nullptr, true); + CaptureImagePtr image_last_ptr = proc_dummy->createCaptureImage(0, wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", nullptr, true); proc_dummy->setLast(image_last_ptr); - CaptureImagePtr image_inc_ptr = proc_dummy->createCaptureImage(wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", nullptr); + CaptureImagePtr image_inc_ptr = proc_dummy->createCaptureImage(1, wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", nullptr); proc_dummy->setInc(image_inc_ptr); proc_dummy->preProcess(); CaptureImagePtr last = std::static_pointer_cast<CaptureImage>(proc_dummy->getLast()); @@ -255,7 +257,7 @@ TEST(ProcessorBundleAdjustment, emplaceLandmark) ProcessorBundleAdjustmentPtr proc_bundle_adj = std::static_pointer_cast<ProcessorBundleAdjustment>(proc); //Frame - FrameBasePtr frm0 = problem_ptr->emplaceKeyFrame(0.0, problem_ptr->stateZero()); + FrameBasePtr frm0 = problem_ptr->emplaceFrame(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))); @@ -282,10 +284,10 @@ TEST(ProcessorBundleAdjustment, process) ProblemPtr problem = Problem::create("PO", 3); // Install camera - ParamsSensorCameraPtr intr = std::make_shared<ParamsSensorCamera>(); // TODO init params or read from YAML - intr->pinhole_model_raw = Eigen::Vector4d(0,0,1,1); //TODO: initialize - intr->width = 640; - intr->height = 480; + ParamsSensorCameraPtr intr = std::make_shared<ParamsSensorCamera>(); + intr->pinhole_model_raw = Eigen::Vector4d(640, 480, 640, 640); + intr->width = 1280; + intr->height = 960; SensorCameraPtr sens_cam = std::static_pointer_cast<SensorCamera>(problem->installSensor("SensorCamera", "camera", (Eigen::Vector7d() << 0,0,0, 0,0,0,1).finished(), intr)); // Install processor @@ -303,38 +305,42 @@ TEST(ProcessorBundleAdjustment, process) auto proc_dummy = std::static_pointer_cast<ProcessorBundleAdjustmentDummy>(proc); //1ST TIME - CaptureImagePtr image_inc_ptr = proc_dummy->createCaptureImage(wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", sens_cam); + CaptureImagePtr image_inc_ptr = proc_dummy->createCaptureImage(1, wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", sens_cam); image_inc_ptr->process(); -// proc_dummy->process(image_inc_ptr); + + problem->print(4,0,1,0); + ASSERT_EQ(proc_dummy->getTrackMatrix().numTracks(), 0); ASSERT_EQ(problem->getMap()->getLandmarkList().size(), 0); //2ND TIME - CaptureImagePtr image_inc_ptr2 = proc_dummy->createCaptureImage(wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", sens_cam); -// proc_dummy->setInc(image_inc_ptr2); -// proc_dummy->preProcess(); -// proc_dummy->getProcessKnown(); -// proc_dummy->getProcessNew(params->max_new_features); -// proc_dummy->establishFactors(); + CaptureImagePtr image_inc_ptr2 = proc_dummy->createCaptureImage(2, wolf_vision_root + "/demos/demo_gazebo_x00cm_y-10cm.jpg", sens_cam); image_inc_ptr2->process(); -// proc_dummy->process(image_inc_ptr2); + + problem->print(4,0,1,0); + ASSERT_LE(proc_dummy->getTrackMatrix().numTracks(), params->max_new_features); ASSERT_NE(problem->getMap(), nullptr); - ASSERT_EQ(problem->getMap()->getLandmarkList().empty(), true); //3RD TIME -- RUNNING - CaptureImagePtr image_inc_ptr3 = proc_dummy->createCaptureImage(wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", sens_cam); + CaptureImagePtr image_inc_ptr3 = proc_dummy->createCaptureImage(3, wolf_vision_root + "/demos/demo_gazebo_x00cm_y-20cm.jpg", sens_cam); assert(proc_dummy->getOrigin()!=nullptr); assert(proc_dummy->getLast()!= nullptr && proc_dummy->getLast()!=proc_dummy->getOrigin()); image_inc_ptr3->process(); -// proc_dummy->process(image_inc_ptr3); + + problem->print(4,0,1,0); + + ASSERT_LE(proc_dummy->getTrackMatrix().numTracks(), params->max_new_features); //4TH TIME -- RUNNING - CaptureImagePtr image_inc_ptr4 = proc_dummy->createCaptureImage(wolf_vision_root + "/demos/demo_gazebo_x00cm_y00cm.jpg", sens_cam); + CaptureImagePtr image_inc_ptr4 = proc_dummy->createCaptureImage(4, wolf_vision_root + "/demos/demo_gazebo_x-10cm_y-20cm.jpg", sens_cam); image_inc_ptr4->process(); -// proc_dummy->process(image_inc_ptr4); + + problem->print(4,0,1,0); + + ASSERT_LE(image_inc_ptr4->getFeatureList().size(), params->max_new_features); } @@ -353,6 +359,7 @@ TEST(ProcessorBundleAdjustment, processNew) int main(int argc, char **argv) { testing::InitGoogleTest(&argc, argv); +// ::testing::GTEST_FLAG(filter) = "ProcessorBundleAdjustment.process"; return RUN_ALL_TESTS(); }