diff --git a/include/core/frame/frame_base.h b/include/core/frame/frame_base.h index 32b582b04f15da321b6dd7710fda60ac9e882cac..14a8f14b799ab39abbccf2e11ded6da84bd2bfda 100644 --- a/include/core/frame/frame_base.h +++ b/include/core/frame/frame_base.h @@ -71,6 +71,9 @@ class FrameBase : public NodeBase, public HasStateBlocks, public std::enable_sha FrameBase(const std::string _frame_structure, const SizeEigen _dim, const FrameType & _tp, const TimeStamp& _ts, const Eigen::VectorXd& _x); + //Auxiliary constructor, needed to put frametype in front + FrameBase(const FrameType & _tp, const std::string _frame_structure, const SizeEigen _dim, const TimeStamp& _ts, const Eigen::VectorXd& _x); + virtual ~FrameBase(); virtual void remove(bool viral_remove_empty_parent=false); @@ -85,7 +88,7 @@ class FrameBase : public NodeBase, public HasStateBlocks, public std::enable_sha // set type void setNonEstimated(); - void setKey(); + void setKey(ProblemPtr _prb); void setAux(); // Frame values ------------------------------------------------ @@ -129,7 +132,9 @@ class FrameBase : public NodeBase, public HasStateBlocks, public std::enable_sha bool isConstrainedBy(const FactorBasePtr& _factor) const; void link(TrajectoryBasePtr); template<typename classType, typename... T> - static std::shared_ptr<classType> emplace(TrajectoryBasePtr _ptr, T&&... all); + static std::shared_ptr<classType> emplaceKeyFrame(TrajectoryBasePtr _ptr, T&&... all); + template<typename classType, typename... T> + static std::shared_ptr<classType> createNonKeyFrame(T&&... all); virtual void printHeader(int depth, // bool constr_by, // @@ -166,13 +171,20 @@ class FrameBase : public NodeBase, public HasStateBlocks, public std::enable_sha namespace wolf { template<typename classType, typename... T> -std::shared_ptr<classType> FrameBase::emplace(TrajectoryBasePtr _ptr, T&&... all) +std::shared_ptr<classType> FrameBase::emplaceKeyFrame(TrajectoryBasePtr _ptr, T&&... all) { - std::shared_ptr<classType> frm = std::make_shared<classType>(std::forward<T>(all)...); + std::shared_ptr<classType> frm = std::make_shared<classType>(KEY, std::forward<T>(all)...); frm->link(_ptr); return frm; } +template<typename classType, typename... T> +std::shared_ptr<classType> FrameBase::createNonKeyFrame(T&&... all) +{ + std::shared_ptr<classType> frm = std::make_shared<classType>(NON_ESTIMATED, std::forward<T>(all)...); + return frm; +} + inline unsigned int FrameBase::id() const { return frame_id_; diff --git a/include/core/problem/problem.h b/include/core/problem/problem.h index 36e5e338bde88d49062931e383929baa005bc9df..ef5bba9a7ad087b08eae31699556af520b71cd32 100644 --- a/include/core/problem/problem.h +++ b/include/core/problem/problem.h @@ -203,9 +203,8 @@ class Problem : public std::enable_shared_from_this<Problem> * - Add it to Trajectory * - If it is key-frame, update state-block lists in Problem */ - FrameBasePtr emplaceFrame(const std::string& _frame_structure, // + FrameBasePtr emplaceKeyFrame(const std::string& _frame_structure, // const SizeEigen _dim, // - FrameType _frame_key_type, // const Eigen::VectorXd& _frame_state, // const TimeStamp& _time_stamp); @@ -220,9 +219,8 @@ class Problem : public std::enable_shared_from_this<Problem> * - Add it to Trajectory * - If it is key-frame, update state-block lists in Problem */ - FrameBasePtr emplaceFrame(const std::string& _frame_structure, // + FrameBasePtr emplaceKeyFrame(const std::string& _frame_structure, // const SizeEigen _dim, // - FrameType _frame_key_type, // const TimeStamp& _time_stamp); /** \brief Emplace frame from string frame_structure without structure @@ -235,9 +233,8 @@ class Problem : public std::enable_shared_from_this<Problem> * - Add it to Trajectory * - If it is key-frame, update state-block lists in Problem */ - FrameBasePtr emplaceFrame(FrameType _frame_key_type, // - const Eigen::VectorXd& _frame_state, // - const TimeStamp& _time_stamp); + FrameBasePtr emplaceKeyFrame(const Eigen::VectorXd& _frame_state, // + const TimeStamp& _time_stamp); /** \brief Emplace frame from string frame_structure without structure nor state * \param _frame_key_type Either KEY, AUXILIARY or NON_ESTIMATED @@ -248,8 +245,7 @@ class Problem : public std::enable_shared_from_this<Problem> * - Add it to Trajectory * - If it is key-frame, update state-block lists in Problem */ - FrameBasePtr emplaceFrame(FrameType _frame_key_type, // - const TimeStamp& _time_stamp); + FrameBasePtr emplaceKeyFrame(const TimeStamp& _time_stamp); // Frame getters FrameBasePtr getLastFrame( ) const; diff --git a/src/frame/frame_base.cpp b/src/frame/frame_base.cpp index 3bb108fe048051b5fef7ec59ab32e4b4a4eeda3c..e39265816f31260a4a3c85dee679447f66788cb6 100644 --- a/src/frame/frame_base.cpp +++ b/src/frame/frame_base.cpp @@ -111,6 +111,11 @@ FrameBase::FrameBase(const std::string _frame_structure, const SizeEigen _dim, c } +FrameBase::FrameBase(const FrameType & _tp, const std::string _frame_structure, const SizeEigen _dim, const TimeStamp& _ts, const Eigen::VectorXd& _x): + FrameBase(_frame_structure, _dim, _tp, _ts, _x) +{ +} + FrameBase::~FrameBase() { } @@ -164,13 +169,11 @@ void FrameBase::setNonEstimated() } } -void FrameBase::setKey() +void FrameBase::setKey(ProblemPtr _prb) { - // register if previously not estimated - if (!isKeyOrAux()) - registerNewStateBlocks(getProblem()); - + assert(_prb != nullptr && "setting Key fram with a null problem pointer"); type_ = KEY; + this->link(_prb->getTrajectory()); if (getTrajectory()) { diff --git a/src/problem/problem.cpp b/src/problem/problem.cpp index 9218f04206ec627b74a2b88d344c25c2d6c2f63e..d0cbfaef5b142e5b122413981fd02f4caabd9b0d 100644 --- a/src/problem/problem.cpp +++ b/src/problem/problem.cpp @@ -321,35 +321,31 @@ SensorBasePtr Problem::getSensor(const std::string& _sensor_name) const return (*sen_it); } -FrameBasePtr Problem::emplaceFrame(const std::string& _frame_structure, // +FrameBasePtr Problem::emplaceKeyFrame(const std::string& _frame_structure, // const SizeEigen _dim, // - FrameType _frame_key_type, // const Eigen::VectorXd& _frame_state, // const TimeStamp& _time_stamp) { - auto frm = FrameBase::emplace<FrameBase>(trajectory_ptr_, _frame_structure, _dim, _frame_key_type, _time_stamp, _frame_state); + auto frm = FrameBase::emplaceKeyFrame<FrameBase>(trajectory_ptr_, _frame_structure, _dim, _time_stamp, _frame_state); return frm; } -FrameBasePtr Problem::emplaceFrame(const std::string& _frame_structure, // +FrameBasePtr Problem::emplaceKeyFrame(const std::string& _frame_structure, // const SizeEigen _dim, // - FrameType _frame_key_type, // const TimeStamp& _time_stamp) { - return emplaceFrame(_frame_structure, _dim, _frame_key_type, getState(_time_stamp), _time_stamp); + return emplaceKeyFrame(_frame_structure, _dim, getState(_time_stamp), _time_stamp); } -FrameBasePtr Problem::emplaceFrame(FrameType _frame_key_type, // - const Eigen::VectorXd& _frame_state, // - const TimeStamp& _time_stamp) +FrameBasePtr Problem::emplaceKeyFrame(const Eigen::VectorXd& _frame_state, // + const TimeStamp& _time_stamp) { - return emplaceFrame(this->getFrameStructure(), this->getDim(), _frame_key_type, _frame_state, _time_stamp); + return emplaceKeyFrame(this->getFrameStructure(), this->getDim(), _frame_state, _time_stamp); } -FrameBasePtr Problem::emplaceFrame(FrameType _frame_key_type, // - const TimeStamp& _time_stamp) +FrameBasePtr Problem::emplaceKeyFrame(const TimeStamp& _time_stamp) { - return emplaceFrame(this->getFrameStructure(), this->getDim(), _frame_key_type, _time_stamp); + return emplaceKeyFrame(this->getFrameStructure(), this->getDim(), _time_stamp); } Eigen::VectorXd Problem::getCurrentState() const @@ -945,9 +941,8 @@ FrameBasePtr Problem::applyPriorOptions(const TimeStamp& _ts) if (prior_options_->mode != "nothing" and prior_options_->mode != "") { - prior_keyframe = emplaceFrame(this->getFrameStructure(), + prior_keyframe = emplaceKeyFrame(this->getFrameStructure(), this->getDim(), - KEY, prior_options_->state, _ts); diff --git a/src/processor/processor_motion.cpp b/src/processor/processor_motion.cpp index d8b3e67446fb83a815c6330c587a0634b8e35b41..233e3c0f1f3130511d7ebcf0debd70107ad45bc6 100644 --- a/src/processor/processor_motion.cpp +++ b/src/processor/processor_motion.cpp @@ -301,10 +301,8 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr) // Update state and time stamps last_ptr_->setTimeStamp(getCurrentTimeStamp()); - auto test_last = last_ptr_->getFrame(); - WOLF_TRACE("Is last_ptr_ null? ", test_last == nullptr); - test_last->setTimeStamp(getCurrentTimeStamp()); - test_last->setState(getProblem()->getState(getCurrentTimeStamp())); + last_ptr_->getFrame()->setTimeStamp(getCurrentTimeStamp()); + last_ptr_->getFrame()->setState(getProblem()->getState(getCurrentTimeStamp())); if (permittedKeyFrame() && voteForKeyFrame()) { @@ -342,7 +340,7 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr) // Set the frame of last_ptr as key auto key_frame = last_ptr_->getFrame(); - key_frame ->setKey(); + key_frame ->setKey(getProblem()); // create motion feature and add it to the key_capture auto key_feature = emplaceFeature(last_ptr_); @@ -351,9 +349,11 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr) auto factor = emplaceFactor(key_feature, origin_ptr_); // create a new frame - auto frame_new = getProblem()->emplaceFrame(NON_ESTIMATED, - getProblem()->getCurrentState(), - getCurrentTimeStamp()); + auto prb_ptr = getProblem(); + auto frame_new = FrameBase::createNonKeyFrame<FrameBase>(prb_ptr->getFrameStructure(), + prb_ptr->getDim(), + getCurrentTimeStamp(), + prb_ptr->getCurrentState()); // create a new capture auto capture_new = emplaceCapture(frame_new, getSensor(), @@ -431,7 +431,7 @@ bool ProcessorMotion::getState(const TimeStamp& _ts, Eigen::VectorXd& _x) const FrameBasePtr ProcessorMotion::setOrigin(const Eigen::VectorXd& _x_origin, const TimeStamp& _ts_origin) { - FrameBasePtr key_frame_ptr = getProblem()->emplaceFrame(KEY, _x_origin, _ts_origin); + FrameBasePtr key_frame_ptr = getProblem()->emplaceKeyFrame(_x_origin, _ts_origin); setOrigin(key_frame_ptr); return key_frame_ptr; @@ -459,10 +459,11 @@ void ProcessorMotion::setOrigin(FrameBasePtr _origin_frame) // ---------- LAST ---------- // Make non-key-frame for last Capture - auto new_ts = origin_ts + 1e-9; - auto new_frame_ptr = getProblem()->emplaceFrame(NON_ESTIMATED, - _origin_frame->getState(), - new_ts); + auto prb_ptr = getProblem(); + auto new_frame_ptr = FrameBase::createNonKeyFrame<FrameBase>(prb_ptr->getFrameStructure(), + prb_ptr->getDim(), + origin_ts, + _origin_frame->getState()); // emplace (emtpy) last Capture last_ptr_ = emplaceCapture(new_frame_ptr, diff --git a/src/processor/processor_tracker.cpp b/src/processor/processor_tracker.cpp index ae9444543bb82649d5a549b86dfa9aeeb2456445..947ca38052ee625d2fbb8452c68b2b2dc565619c 100644 --- a/src/processor/processor_tracker.cpp +++ b/src/processor/processor_tracker.cpp @@ -78,7 +78,7 @@ void ProcessorTracker::processCapture(CaptureBasePtr _incoming_ptr) { WOLF_DEBUG( "PT ", getName(), " FIRST_TIME_WITHOUT_PACK" ); - FrameBasePtr kfrm = getProblem()->emplaceFrame(KEY, incoming_ptr_->getTimeStamp()); + FrameBasePtr kfrm = getProblem()->emplaceKeyFrame(incoming_ptr_->getTimeStamp()); incoming_ptr_->link(kfrm); // Process info @@ -107,9 +107,12 @@ void ProcessorTracker::processCapture(CaptureBasePtr _incoming_ptr) case SECOND_TIME_WITHOUT_PACK : { WOLF_DEBUG( "PT ", getName(), " SECOND_TIME_WITHOUT_PACK" ); -auto test_stamp = incoming_ptr_->getTimeStamp()+2e-9; -WOLF_DEBUG("TIME STAMP ", test_stamp); - FrameBasePtr frm = getProblem()->emplaceFrame(NON_ESTIMATED, incoming_ptr_->getTimeStamp()+2e-9); + auto prb_ptr = getProblem(); + auto incoming_ts = incoming_ptr_->getTimeStamp(); + FrameBasePtr frm = FrameBase::createNonKeyFrame<FrameBase>(prb_ptr->getFrameStructure(), + prb_ptr->getDim(), + incoming_ts, + prb_ptr->getState(incoming_ts)); incoming_ptr_->link(frm); // We have a last_ Capture with no features, so we do not process known features, and we do not vote for KF. @@ -144,7 +147,12 @@ WOLF_DEBUG("TIME STAMP ", test_stamp); last_old_frame->remove(); // Create new frame - FrameBasePtr frm = getProblem()->emplaceFrame(NON_ESTIMATED, incoming_ptr_->getTimeStamp()); + auto prb_ptr = getProblem(); + auto incoming_ts = incoming_ptr_->getTimeStamp(); + FrameBasePtr frm = FrameBase::createNonKeyFrame<FrameBase>(prb_ptr->getFrameStructure(), + prb_ptr->getDim(), + incoming_ts, + prb_ptr->getState(incoming_ts)); incoming_ptr_->link(frm); // Detect new Features, initialize Landmarks, create Factors, ... @@ -177,10 +185,10 @@ WOLF_DEBUG("TIME STAMP ", test_stamp); // We create a KF // set KF on last last_ptr_->getFrame()->setState(getProblem()->getState(last_ptr_->getTimeStamp())); - last_ptr_->getFrame()->setKey(); + last_ptr_->getFrame()->setKey(getProblem()); // // make F; append incoming to new F - // FrameBasePtr frm = getProblem()->emplaceFrame(NON_ESTIMATED, incoming_ptr_->getTimeStamp()); + // FrameBasePtr frm = FrameBase::createNonKeyFrame<FrameBase>(incoming_ptr_->getTimeStamp()); // incoming_ptr_->link(frm); // Establish factors @@ -193,7 +201,11 @@ WOLF_DEBUG("TIME STAMP ", test_stamp); resetDerived(); // make F; append incoming to new F - FrameBasePtr frm = getProblem()->emplaceFrame(NON_ESTIMATED, last_ptr_->getFrame()->getState(), incoming_ptr_->getTimeStamp()); + auto prb_ptr = getProblem(); + FrameBasePtr frm = FrameBase::createNonKeyFrame<FrameBase>(prb_ptr->getFrameStructure(), + prb_ptr->getDim(), + incoming_ptr_->getTimeStamp(), + last_ptr_->getFrame()->getState()); incoming_ptr_->link(frm); origin_ptr_ = last_ptr_; @@ -211,7 +223,7 @@ WOLF_DEBUG("TIME STAMP ", test_stamp); last_ptr_->getFrame()->setAuxiliary(); // make F; append incoming to new F - FrameBasePtr frm = getProblem()->emplaceFrame(NON_ESTIMATED, incoming_ptr_->getTimeStamp()); + FrameBasePtr frm = FrameBase::createNonKeyFrame<FrameBase>(incoming_ptr_->getTimeStamp()); incoming_ptr_->link(frm); // Establish factors @@ -240,7 +252,11 @@ WOLF_DEBUG("TIME STAMP ", test_stamp); advanceDerived(); // Replace last frame for a new one in incoming - FrameBasePtr frm = getProblem()->emplaceFrame(NON_ESTIMATED, last_ptr_->getFrame()->getState(), incoming_ptr_->getTimeStamp()); + auto prb_ptr = getProblem(); + FrameBasePtr frm = FrameBase::createNonKeyFrame<FrameBase>(prb_ptr->getFrameStructure(), + prb_ptr->getDim(), + incoming_ptr_->getTimeStamp(), + last_ptr_->getFrame()->getState()); incoming_ptr_->link(frm); last_ptr_->getFrame()->remove(); // implicitly calling last_ptr_->remove(); diff --git a/test/gtest_ceres_manager.cpp b/test/gtest_ceres_manager.cpp index 7ead2b8f801602e664cae1e2ec4249f21ef916a5..22c7990a5fa638986d82118622275a9363c3af6c 100644 --- a/test/gtest_ceres_manager.cpp +++ b/test/gtest_ceres_manager.cpp @@ -318,7 +318,7 @@ TEST(CeresManager, AddFactor) CeresManagerWrapperPtr ceres_manager_ptr = std::make_shared<CeresManagerWrapper>(P); // Create (and add) factor point 2d - FrameBasePtr F = P->emplaceFrame(KEY, P->zeroState(), TimeStamp(0)); + FrameBasePtr F = P->emplaceKeyFrame(P->zeroState(), TimeStamp(0)); auto C = CaptureBase::emplace<CaptureVoid>(F, 0, nullptr); auto f = FeatureBase::emplace<FeatureBase>(C, "FeatureOdom2d", Vector3d::Zero(), Matrix3d::Identity()); FactorPose2dPtr c = FactorBase::emplace<FactorPose2d>(f,f,nullptr,false); @@ -340,7 +340,7 @@ TEST(CeresManager, DoubleAddFactor) CeresManagerWrapperPtr ceres_manager_ptr = std::make_shared<CeresManagerWrapper>(P); // Create (and add) factor point 2d - FrameBasePtr F = P->emplaceFrame(KEY, P->zeroState(), TimeStamp(0)); + FrameBasePtr F = P->emplaceKeyFrame(P->zeroState(), TimeStamp(0)); auto C = CaptureBase::emplace<CaptureVoid>(F, 0, nullptr); auto f = FeatureBase::emplace<FeatureBase>(C, "FeatureOdom2d", Vector3d::Zero(), Matrix3d::Identity()); FactorPose2dPtr c = FactorBase::emplace<FactorPose2d>(f,f,nullptr,false); @@ -365,7 +365,7 @@ TEST(CeresManager, RemoveFactor) CeresManagerWrapperPtr ceres_manager_ptr = std::make_shared<CeresManagerWrapper>(P); // Create (and add) factor point 2d - FrameBasePtr F = P->emplaceFrame(KEY, P->zeroState(), TimeStamp(0)); + FrameBasePtr F = P->emplaceKeyFrame(P->zeroState(), TimeStamp(0)); auto C = CaptureBase::emplace<CaptureVoid>(F, 0, nullptr); auto f = FeatureBase::emplace<FeatureBase>(C, "FeatureOdom2d", Vector3d::Zero(), Matrix3d::Identity()); FactorPose2dPtr c = FactorBase::emplace<FactorPose2d>(f,f,nullptr,false); @@ -393,7 +393,7 @@ TEST(CeresManager, AddRemoveFactor) CeresManagerWrapperPtr ceres_manager_ptr = std::make_shared<CeresManagerWrapper>(P); // Create (and add) factor point 2d - FrameBasePtr F = P->emplaceFrame(KEY, P->zeroState(), TimeStamp(0)); + FrameBasePtr F = P->emplaceKeyFrame(P->zeroState(), TimeStamp(0)); auto C = CaptureBase::emplace<CaptureVoid>(F, 0, nullptr); auto f = FeatureBase::emplace<FeatureBase>(C, "FeatureOdom2d", Vector3d::Zero(), Matrix3d::Identity()); FactorPose2dPtr c = FactorBase::emplace<FactorPose2d>(f,f,nullptr,false); @@ -420,7 +420,7 @@ TEST(CeresManager, DoubleRemoveFactor) CeresManagerWrapperPtr ceres_manager_ptr = std::make_shared<CeresManagerWrapper>(P); // Create (and add) factor point 2d - FrameBasePtr F = P->emplaceFrame(KEY, P->zeroState(), TimeStamp(0)); + FrameBasePtr F = P->emplaceKeyFrame(P->zeroState(), TimeStamp(0)); auto C = CaptureBase::emplace<CaptureVoid>(F, 0, nullptr); auto f = FeatureBase::emplace<FeatureBase>(C, "FeatureOdom2d", Vector3d::Zero(), Matrix3d::Identity()); FactorPose2dPtr c = FactorBase::emplace<FactorPose2d>(f,f,nullptr,false); @@ -547,7 +547,7 @@ TEST(CeresManager, FactorsRemoveLocalParam) CeresManagerWrapperPtr ceres_manager_ptr = std::make_shared<CeresManagerWrapper>(P); // Create (and add) 2 factors quaternion - FrameBasePtr F = P->emplaceFrame(KEY, P->zeroState(), TimeStamp(0)); + FrameBasePtr F = P->emplaceKeyFrame(P->zeroState(), TimeStamp(0)); auto C = CaptureBase::emplace<CaptureVoid>(F, 0, nullptr); auto f = FeatureBase::emplace<FeatureBase>(C, "FeatureOdom2d", Vector3d::Zero(), Matrix3d::Identity()); FactorQuaternionAbsolutePtr c1 = FactorBase::emplace<FactorQuaternionAbsolute>(f, F->getO(),nullptr,false); @@ -589,7 +589,7 @@ TEST(CeresManager, FactorsUpdateLocalParam) CeresManagerWrapperPtr ceres_manager_ptr = std::make_shared<CeresManagerWrapper>(P); // Create (and add) 2 factors quaternion - FrameBasePtr F = P->emplaceFrame(KEY, P->zeroState(), TimeStamp(0)); + FrameBasePtr F = P->emplaceKeyFrame(P->zeroState(), TimeStamp(0)); auto C = CaptureBase::emplace<CaptureVoid>(F, 0, nullptr); auto f = FeatureBase::emplace<FeatureBase>(C, "FeatureOdom2d", Vector3d::Zero(), Matrix3d::Identity()); FactorQuaternionAbsolutePtr c1 = FactorBase::emplace<FactorQuaternionAbsolute>(f, F->getO(),nullptr,false); diff --git a/test/gtest_emplace.cpp b/test/gtest_emplace.cpp index 8f72b5cfd0a5edfd698bd7a23812443127048f54..c4fa60d9eec6860661fc50c4c8b080cf9c068500 100644 --- a/test/gtest_emplace.cpp +++ b/test/gtest_emplace.cpp @@ -42,7 +42,7 @@ TEST(Emplace, Frame) ProblemPtr P = Problem::create("POV", 3); ASSERT_NE(P->getTrajectory(), nullptr); - FrameBase::emplace<FrameBase>(P->getTrajectory(), KEY, TimeStamp(0), std::make_shared<StateBlock>(2,true), std::make_shared<StateBlock>(2,true)); + FrameBase::emplaceKeyFrame<FrameBase>(P->getTrajectory(), TimeStamp(0), std::make_shared<StateBlock>(2,true), std::make_shared<StateBlock>(2,true)); ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getTrajectory()->getProblem()); } @@ -67,7 +67,7 @@ TEST(Emplace, Capture) ProblemPtr P = Problem::create("POV", 3); ASSERT_NE(P->getTrajectory(), nullptr); - auto frm = FrameBase::emplace<FrameBase>(P->getTrajectory(), KEY, TimeStamp(0), std::make_shared<StateBlock>(2,true), std::make_shared<StateBlock>(2,true)); + auto frm = FrameBase::emplaceKeyFrame<FrameBase>(P->getTrajectory(), TimeStamp(0), std::make_shared<StateBlock>(2,true), std::make_shared<StateBlock>(2,true)); ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getTrajectory()->getProblem()); auto cpt = CaptureBase::emplace<CaptureBase>(frm, "Dummy", TimeStamp(0), nullptr, nullptr, nullptr, nullptr); @@ -81,7 +81,7 @@ TEST(Emplace, Feature) ProblemPtr P = Problem::create("POV", 3); ASSERT_NE(P->getTrajectory(), nullptr); - auto frm = FrameBase::emplace<FrameBase>(P->getTrajectory(), KEY, TimeStamp(0), std::make_shared<StateBlock>(2,true), std::make_shared<StateBlock>(2,true)); + auto frm = FrameBase::emplaceKeyFrame<FrameBase>(P->getTrajectory(), TimeStamp(0), std::make_shared<StateBlock>(2,true), std::make_shared<StateBlock>(2,true)); ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getTrajectory()->getProblem()); auto cpt = CaptureBase::emplace<CaptureBase>(frm, "Dummy", TimeStamp(0), nullptr, nullptr, nullptr, nullptr); @@ -99,7 +99,7 @@ TEST(Emplace, Factor) ProblemPtr P = Problem::create("POV", 3); ASSERT_NE(P->getTrajectory(), nullptr); - auto frm = FrameBase::emplace<FrameBase>(P->getTrajectory(), KEY, TimeStamp(0), std::make_shared<StateBlock>(2,true), std::make_shared<StateBlock>(2,true)); + auto frm = FrameBase::emplaceKeyFrame<FrameBase>(P->getTrajectory(), TimeStamp(0), std::make_shared<StateBlock>(2,true), std::make_shared<StateBlock>(2,true)); ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getTrajectory()->getProblem()); auto cpt = CaptureBase::emplace<CaptureBase>(frm, "Dummy", TimeStamp(0), nullptr, nullptr, nullptr, nullptr); @@ -119,7 +119,7 @@ TEST(Emplace, EmplaceDerived) { ProblemPtr P = Problem::create("POV", 3); - auto frm = FrameBase::emplace<FrameBase>(P->getTrajectory(), KEY, TimeStamp(0), std::make_shared<StateBlock>(2,true), std::make_shared<StateBlock>(2,true)); + auto frm = FrameBase::emplaceKeyFrame<FrameBase>(P->getTrajectory(), TimeStamp(0), std::make_shared<StateBlock>(2,true), std::make_shared<StateBlock>(2,true)); auto sen = SensorBase::emplace<SensorOdom2d>(P->getHardware(), Eigen::VectorXd(3), ParamsSensorOdom2d()); auto cov = Eigen::MatrixXd::Identity(2,2); auto cpt = CaptureBase::emplace<CaptureOdom2d>(frm, TimeStamp(0), sen, Eigen::VectorXd(2), cov, nullptr); @@ -141,7 +141,7 @@ TEST(Emplace, ReturnDerived) ProblemPtr P = Problem::create("POV", 3); ASSERT_NE(P->getTrajectory(), nullptr); - auto frm = FrameBase::emplace<FrameBase>(P->getTrajectory(), KEY, TimeStamp(0), std::make_shared<StateBlock>(2,true), std::make_shared<StateBlock>(2,true)); + auto frm = FrameBase::emplaceKeyFrame<FrameBase>(P->getTrajectory(), TimeStamp(0), std::make_shared<StateBlock>(2,true), std::make_shared<StateBlock>(2,true)); auto cpt = CaptureBase::emplace<CaptureBase>(frm, "Dummy", TimeStamp(0), nullptr, nullptr, nullptr, nullptr); auto cov = Eigen::MatrixXd::Identity(2,2); auto ftr = FeatureBase::emplace<FeatureOdom2d>(cpt, Eigen::VectorXd(2), cov); diff --git a/test/gtest_factor_absolute.cpp b/test/gtest_factor_absolute.cpp index 14dea0d458afbb8fa6223f0bfc8d286bc2a473e6..1e9f1019dba9e192e522b204519964e3790de9fb 100644 --- a/test/gtest_factor_absolute.cpp +++ b/test/gtest_factor_absolute.cpp @@ -35,7 +35,7 @@ ProblemPtr problem_ptr = Problem::create("POV", 3); CeresManager ceres_mgr(problem_ptr); // Two frames -FrameBasePtr frm0 = problem_ptr->emplaceFrame(KEY, problem_ptr->zeroState(), TimeStamp(0)); +FrameBasePtr frm0 = problem_ptr->emplaceKeyFrame(problem_ptr->zeroState(), TimeStamp(0)); // Capture, feature and factor auto cap0 = CaptureBase::emplace<CaptureMotion>(frm0, "IMU ABS", 0, nullptr, pose10, 10, 9, nullptr); diff --git a/test/gtest_factor_autodiff_distance_3d.cpp b/test/gtest_factor_autodiff_distance_3d.cpp index 985e25a23de5f1c6b137d1b477bb9a22b219fb2a..d089b4dbddfe4e6b84334c6ddcc2a3b0fc47ff09 100644 --- a/test/gtest_factor_autodiff_distance_3d.cpp +++ b/test/gtest_factor_autodiff_distance_3d.cpp @@ -55,9 +55,9 @@ class FactorAutodiffDistance3d_Test : public testing::Test problem = Problem::create("PO", 3); ceres_manager = std::make_shared<CeresManager>(problem); - F1 = problem->emplaceFrame (KEY, pose1, 1.0); + F1 = problem->emplaceKeyFrame (pose1, 1.0); - F2 = problem->emplaceFrame (KEY, pose2, 2.0); + F2 = problem->emplaceKeyFrame (pose2, 2.0); C2 = CaptureBase::emplace<CaptureBase>(F2, "Base", 1.0); f2 = FeatureBase::emplace<FeatureBase>(C2, "Dist", dist, dist_cov); c2 = FactorBase::emplace<FactorAutodiffDistance3d>(f2, f2, F1, nullptr, false, FAC_ACTIVE); diff --git a/test/gtest_factor_block_difference.cpp b/test/gtest_factor_block_difference.cpp index 594eb169754b47fb3304536742ea445051e4da85..bc7b92005a0aa81262599264986ae3497dec7241 100644 --- a/test/gtest_factor_block_difference.cpp +++ b/test/gtest_factor_block_difference.cpp @@ -56,7 +56,7 @@ class FixtureFactorBlockDifference : public testing::Test //FeatureBasePtr featV0 = FeatureBase::emplace<FeatureBase>(capV0, "Vel0", x_origin.tail(3), cov_prior.bottomRightCorner<3,3>()); //FactorBasePtr facV0 = FactorBase::emplace<FactorBlockAbsolute>(featV0, KF0_->getV(), nullptr, false); - KF1_ = problem_->emplaceFrame(KEY, problem_->zeroState(), t1); + KF1_ = problem_->emplaceKeyFrame(problem_->zeroState(), t1); Cap_ = CaptureBase::emplace<CaptureBase>(KF1_, "BlockDifference", t1); Eigen::Matrix3d cov = 0.2 * Eigen::Matrix3d::Identity(); diff --git a/test/gtest_factor_diff_drive.cpp b/test/gtest_factor_diff_drive.cpp index fd82dd83817fc2fe6991f0e8ba6bea09bf8c431e..3fb12bb38ca2f3ea4157842aa4c9e6a6348bccf5 100644 --- a/test/gtest_factor_diff_drive.cpp +++ b/test/gtest_factor_diff_drive.cpp @@ -162,18 +162,16 @@ class FactorDiffDriveTest : public testing::Test processor = std::static_pointer_cast<ProcessorDiffDrivePublic>(prc); // frames - F0 = FrameBase::emplace<FrameBase>(trajectory, - "PO", - 2, - KEY, - 0.0, - Vector3d(0,0,0)); - F1 = FrameBase::emplace<FrameBase>(trajectory, - "PO", - 2, - KEY, - 1.0, - Vector3d(1,0,0)); + F0 = FrameBase::emplaceKeyFrame<FrameBase>(trajectory, + "PO", + 2, + 0.0, + Vector3d(0,0,0)); + F1 = FrameBase::emplaceKeyFrame<FrameBase>(trajectory, + "PO", + 2, + 1.0, + Vector3d(1,0,0)); // captures C0 = CaptureBase::emplace<CaptureDiffDrive>(F0, diff --git a/test/gtest_factor_odom_2d.cpp b/test/gtest_factor_odom_2d.cpp index 76d559a767f962ef7e82c41bffdded012dd4d04e..954dcc47b185a30f3c1bdaec54c02069a664a505 100644 --- a/test/gtest_factor_odom_2d.cpp +++ b/test/gtest_factor_odom_2d.cpp @@ -19,8 +19,8 @@ ProblemPtr problem_ptr = Problem::create("PO", 2); CeresManager ceres_mgr(problem_ptr); // Two frames -FrameBasePtr frm0 = problem_ptr->emplaceFrame(KEY, Vector3d::Zero(), TimeStamp(0)); -FrameBasePtr frm1 = problem_ptr->emplaceFrame(KEY, Vector3d::Zero(), TimeStamp(1)); +FrameBasePtr frm0 = problem_ptr->emplaceKeyFrame(Vector3d::Zero(), TimeStamp(0)); +FrameBasePtr frm1 = problem_ptr->emplaceKeyFrame(Vector3d::Zero(), TimeStamp(1)); // Capture, feature and factor from frm1 to frm0 auto cap1 = CaptureBase::emplace<CaptureOdom2d>(frm1, 1, nullptr, Vector3d::Zero(), data_cov); diff --git a/test/gtest_factor_odom_3d.cpp b/test/gtest_factor_odom_3d.cpp index 1315118016ebe3319a04e07b37d0d8438b714ebe..b24a074a3262884d6364df47c6253e98bd2c41a8 100644 --- a/test/gtest_factor_odom_3d.cpp +++ b/test/gtest_factor_odom_3d.cpp @@ -37,8 +37,8 @@ ProblemPtr problem_ptr = Problem::create("PO", 3); CeresManager ceres_mgr(problem_ptr); // Two frames -FrameBasePtr frm0 = problem_ptr->emplaceFrame(KEY, problem_ptr->zeroState(), TimeStamp(0)); -FrameBasePtr frm1 = problem_ptr->emplaceFrame(KEY, delta, TimeStamp(1)); +FrameBasePtr frm0 = problem_ptr->emplaceKeyFrame(problem_ptr->zeroState(), TimeStamp(0)); +FrameBasePtr frm1 = problem_ptr->emplaceKeyFrame(delta, TimeStamp(1)); // Capture, feature and factor from frm1 to frm0 auto cap1 = CaptureBase::emplace<CaptureMotion>(frm1, "CaptureOdom3d", 1, nullptr, delta, 7, 6, nullptr); diff --git a/test/gtest_factor_pose_2d.cpp b/test/gtest_factor_pose_2d.cpp index 5d9cb7f406beef3b95ce1da4add8f2041a20c685..a302bf7721c587762c8566180fa5168ef3bb9095 100644 --- a/test/gtest_factor_pose_2d.cpp +++ b/test/gtest_factor_pose_2d.cpp @@ -30,7 +30,7 @@ ProblemPtr problem = Problem::create("PO", 2); CeresManager ceres_mgr(problem); // Two frames -FrameBasePtr frm0 = problem->emplaceFrame(KEY, problem->zeroState(), TimeStamp(0)); +FrameBasePtr frm0 = problem->emplaceKeyFrame(problem->zeroState(), TimeStamp(0)); // Capture, feature and factor from frm1 to frm0 auto cap0 = CaptureBase::emplace<CaptureMotion>(frm0, "CaptureOdom2d", 0, nullptr, pose, 3, 3, nullptr); diff --git a/test/gtest_factor_pose_3d.cpp b/test/gtest_factor_pose_3d.cpp index 9eeb5dfc14bbc6b185c598a8a17489a44794206e..c9e95cca169bb9db68a82b8742d280dc31b22b40 100644 --- a/test/gtest_factor_pose_3d.cpp +++ b/test/gtest_factor_pose_3d.cpp @@ -36,7 +36,7 @@ ProblemPtr problem = Problem::create("PO", 3); CeresManager ceres_mgr(problem); // Two frames -FrameBasePtr frm0 = problem->emplaceFrame(KEY, problem->zeroState(), TimeStamp(0)); +FrameBasePtr frm0 = problem->emplaceKeyFrame(problem->zeroState(), TimeStamp(0)); // Capture, feature and factor auto cap0 = CaptureBase::emplace<CaptureMotion>(frm0, "CaptureOdom3d", 0, nullptr, pose7, 7, 6, nullptr); diff --git a/test/gtest_factor_relative_2d_analytic.cpp b/test/gtest_factor_relative_2d_analytic.cpp index fd8e2296c887aeb7ce6a07579eec939964d29a92..2a9575ac9e19c72f49fcc9284a47eb9057fe19cd 100644 --- a/test/gtest_factor_relative_2d_analytic.cpp +++ b/test/gtest_factor_relative_2d_analytic.cpp @@ -19,8 +19,8 @@ ProblemPtr problem_ptr = Problem::create("PO", 2); CeresManager ceres_mgr(problem_ptr); // Two frames -FrameBasePtr frm0 = problem_ptr->emplaceFrame(KEY, Vector3d::Zero(), TimeStamp(0)); -FrameBasePtr frm1 = problem_ptr->emplaceFrame(KEY, Vector3d::Zero(), TimeStamp(1)); +FrameBasePtr frm0 = problem_ptr->emplaceKeyFrame(Vector3d::Zero(), TimeStamp(0)); +FrameBasePtr frm1 = problem_ptr->emplaceKeyFrame(Vector3d::Zero(), TimeStamp(1)); // Capture, feature and factor from frm1 to frm0 auto cap1 = CaptureBase::emplace<CaptureOdom2d>(frm1, 1, nullptr, Vector3d::Zero(), data_cov); diff --git a/test/gtest_factor_relative_pose_2d_with_extrinsics.cpp b/test/gtest_factor_relative_pose_2d_with_extrinsics.cpp index 32cff2bd79a00fdcf18850c5f871493584e27865..756e1f9ecc4244756cd60d354270e73ec5196f78 100644 --- a/test/gtest_factor_relative_pose_2d_with_extrinsics.cpp +++ b/test/gtest_factor_relative_pose_2d_with_extrinsics.cpp @@ -27,8 +27,8 @@ auto sensor_odom2d = problem_ptr->installSensor("SensorOdom2d", "odom", Vector3d auto processor_odom2d = problem_ptr->installProcessor("ProcessorOdom2d", "odom", sensor_odom2d, std::make_shared<ParamsProcessorOdom2d>()); // Two frames -FrameBasePtr frm0 = problem_ptr->emplaceFrame(KEY, Vector3d::Zero(), TimeStamp(0)); -FrameBasePtr frm1 = problem_ptr->emplaceFrame(KEY, Vector3d::Zero(), TimeStamp(1)); +FrameBasePtr frm0 = problem_ptr->emplaceKeyFrame(Vector3d::Zero(), TimeStamp(0)); +FrameBasePtr frm1 = problem_ptr->emplaceKeyFrame(Vector3d::Zero(), TimeStamp(1)); // Capture, feature and factor from frm1 to frm0 auto cap1 = CaptureBase::emplace<CaptureOdom2d>(frm1, 1, sensor_odom2d, Vector3d::Zero(), data_cov); diff --git a/test/gtest_frame_base.cpp b/test/gtest_frame_base.cpp index 90ba45c62add57f2f5d222579810d39f69b0cf6b..b8dceb6baa616fb4bced7733ed17da639e9c5082 100644 --- a/test/gtest_frame_base.cpp +++ b/test/gtest_frame_base.cpp @@ -69,8 +69,8 @@ TEST(FrameBase, LinksToTree) intrinsics_odo.k_disp_to_disp = 1; intrinsics_odo.k_rot_to_rot = 1; auto S = SensorBase::emplace<SensorOdom2d>(P->getHardware(), Vector3d::Zero(), intrinsics_odo); - auto F1 = FrameBase::emplace<FrameBase>(T, 1, make_shared<StateBlock>(2), make_shared<StateBlock>(1)); - auto F2 = FrameBase::emplace<FrameBase>(T, 1, make_shared<StateBlock>(2), make_shared<StateBlock>(1)); + auto F1 = FrameBase::emplaceKeyFrame<FrameBase>(T, make_shared<StateBlock>(2), make_shared<StateBlock>(1)); + auto F2 = FrameBase::emplaceKeyFrame<FrameBase>(T, make_shared<StateBlock>(2), make_shared<StateBlock>(1)); auto C = CaptureBase::emplace<CaptureMotion>(F1, "CaptureMotion", 1, S, Vector3d::Zero(), 3, 3, nullptr); auto p = ProcessorBase::emplace<ProcessorOdom2d>(S, std::make_shared<ParamsProcessorOdom2d>()); auto f = FeatureBase::emplace<FeatureBase>(C, "f", Vector1d(1), Matrix<double,1,1>::Identity()*.01); @@ -112,7 +112,7 @@ TEST(FrameBase, LinksToTree) ASSERT_TRUE(F1->isFixed()); // set key - F1->setKey(); + F1->setKey(P); ASSERT_TRUE(F1->isKey()); ASSERT_TRUE(F1->isKeyOrAux()); } diff --git a/test/gtest_has_state_blocks.cpp b/test/gtest_has_state_blocks.cpp index df90859ba57d46382d97e7fa29fa66b23b137580..c32acbd19e304d6b97212f7277616a0b88f426c0 100644 --- a/test/gtest_has_state_blocks.cpp +++ b/test/gtest_has_state_blocks.cpp @@ -59,7 +59,7 @@ TEST_F(HasStateBlocksTest, Notifications_setKey_add) ASSERT_FALSE(problem->getStateBlockNotification(sbp0, n)); - F0->setKey(); + F0->setKey(problem); ASSERT_TRUE(problem->getStateBlockNotification(sbp0, n)); ASSERT_EQ(n, ADD); @@ -83,7 +83,7 @@ TEST_F(HasStateBlocksTest, Notifications_add_makeKF) ASSERT_FALSE(problem->getStateBlockNotification(sbv0, n)); - F0->setKey(); + F0->setKey(problem); ASSERT_TRUE(problem->getStateBlockNotification(sbp0, n)); ASSERT_EQ(n, ADD); @@ -100,7 +100,7 @@ TEST_F(HasStateBlocksTest, Notifications_makeKF_add) // first make KF, then add SB F1->link(problem->getTrajectory()); - F1->setKey(); + F1->setKey(problem); F1->addStateBlock("P", sbp1); @@ -132,7 +132,7 @@ TEST_F(HasStateBlocksTest, Add_solve_notify_solve_add) F0->link(problem->getTrajectory()); F0->addStateBlock("V", sbv0); - F0->setKey(); + F0->setKey(problem); ASSERT_TRUE(problem->getStateBlockNotification(sbv0, n)); ASSERT_EQ(n, ADD); diff --git a/test/gtest_odom_2d.cpp b/test/gtest_odom_2d.cpp index 2c29665d486e65a68fe9bf8c8a37bfefac8aa080..b17170025e860223eec02e3a8cefcc10133f37df 100644 --- a/test/gtest_odom_2d.cpp +++ b/test/gtest_odom_2d.cpp @@ -132,14 +132,14 @@ TEST(Odom2d, FactorFix_and_FactorOdom2d) // KF1 and motion from KF0 t += dt; - FrameBasePtr F1 = Pr->emplaceFrame(KEY, Vector3d::Zero(), t); + FrameBasePtr F1 = Pr->emplaceKeyFrame(Vector3d::Zero(), t); auto C1 = CaptureBase::emplace<CaptureBase>(F1, "CaptureOdom2d", t); auto f1 = FeatureBase::emplace<FeatureBase>(C1, "FeatureOdom2d", delta, delta_cov); auto c1 = FactorBase::emplace<FactorOdom2d>(f1, f1, F0, nullptr, false); // KF2 and motion from KF1 t += dt; - FrameBasePtr F2 = Pr->emplaceFrame(KEY, Vector3d::Zero(), t); + FrameBasePtr F2 = Pr->emplaceKeyFrame(Vector3d::Zero(), t); auto C2 = CaptureBase::emplace<CaptureBase>(F2, "CaptureOdom2d", t); auto f2 = FeatureBase::emplace<FeatureBase>(C2, "FeatureOdom2d", delta, delta_cov); auto c2 = FactorBase::emplace<FactorOdom2d>(f2, f2, F1, nullptr, false); @@ -416,7 +416,7 @@ TEST(Odom2d, KF_callback) std::cout << "-----------------------------\nSplit after last KF; time: " << t_split << std::endl; Vector3d x_split = processor_odom2d->getState(t_split); - FrameBasePtr keyframe_2 = problem->emplaceFrame(KEY, x_split, t_split); + FrameBasePtr keyframe_2 = problem->emplaceKeyFrame(x_split, t_split); // there must be 2KF and one F ASSERT_EQ(problem->getTrajectory()->getFrameList().size(), 3); @@ -453,7 +453,7 @@ TEST(Odom2d, KF_callback) problem->print(4,1,1,1); x_split = processor_odom2d->getState(t_split); - FrameBasePtr keyframe_1 = problem->emplaceFrame(KEY, x_split, t_split); + FrameBasePtr keyframe_1 = problem->emplaceKeyFrame(x_split, t_split); ASSERT_TRUE(problem->check(0)); processor_odom2d->keyFrameCallback(keyframe_1, dt/2); diff --git a/test/gtest_problem.cpp b/test/gtest_problem.cpp index ce90b16ae7aeafaa9acec35aed709e41bc2c80fd..3e7bedc16bf84b9eaa8ca07f8b65723748ac6572 100644 --- a/test/gtest_problem.cpp +++ b/test/gtest_problem.cpp @@ -239,9 +239,9 @@ TEST(Problem, emplaceFrame_factory) { ProblemPtr P = Problem::create("PO", 2); - FrameBasePtr f0 = P->emplaceFrame("PO", 2, KEY, VectorXd(3), TimeStamp(0.0)); - FrameBasePtr f1 = P->emplaceFrame("PO", 3, KEY, VectorXd(7), TimeStamp(1.0)); - FrameBasePtr f2 = P->emplaceFrame("POV", 3, KEY, VectorXd(10), TimeStamp(2.0)); + FrameBasePtr f0 = P->emplaceKeyFrame("PO", 2, VectorXd(3), TimeStamp(0.0)); + FrameBasePtr f1 = P->emplaceKeyFrame("PO", 3, VectorXd(7), TimeStamp(1.0)); + FrameBasePtr f2 = P->emplaceKeyFrame("POV", 3, VectorXd(10), TimeStamp(2.0)); // std::cout << "f0: type PO 2d? " << f0->getType() << std::endl; // std::cout << "f1: type PO 3d? " << f1->getType() << std::endl; @@ -280,7 +280,7 @@ TEST(Problem, StateBlocks) auto pm = P->installProcessor("ProcessorOdom3d", "odom integrator", "odometer", wolf_root + "/test/yaml/processor_odom_3d.yaml"); // 2 state blocks, estimated - auto KF = P->emplaceFrame("PO", 3, KEY, xs3d, 0); + auto KF = P->emplaceKeyFrame("PO", 3, xs3d, 0); ASSERT_EQ(P->getStateBlockNotificationMapSize(), (SizeStd)(2 + 2)); // Notifications @@ -337,7 +337,7 @@ TEST(Problem, Covariances) // 4 state blocks, estimated St->unfixExtrinsics(); - FrameBasePtr F = P->emplaceFrame("PO", 3, KEY, xs3d, 0); + FrameBasePtr F = P->emplaceKeyFrame("PO", 3, xs3d, 0); // set covariance (they are not computed without a solver) P->addCovarianceBlock(F->getP(), Eigen::Matrix3d::Identity()); @@ -373,7 +373,7 @@ TEST(Problem, perturb) int i = 0; for (TimeStamp t = 0.0; t < 2.0; t += 1.0) { - auto F = problem->emplaceFrame(KEY, pose, t); + auto F = problem->emplaceKeyFrame(pose, t); if (i==0) F->fix(); for (int j = 0; j< 2 ; j++) @@ -463,7 +463,7 @@ TEST(Problem, check) int i = 0; for (TimeStamp t = 0.0; t < 2.0; t += 1.0) { - auto F = problem->emplaceFrame(KEY, pose, t); + auto F = problem->emplaceKeyFrame(pose, t); if (i==0) F->fix(); for (int j = 0; j< 2 ; j++) diff --git a/test/gtest_processor_loopclosure.cpp b/test/gtest_processor_loopclosure.cpp index 760b15d3559ec6d33f2c73cdae3e5c4583c0691c..1e8246ee2de40852e7ce3a3df31fec55c32d8619 100644 --- a/test/gtest_processor_loopclosure.cpp +++ b/test/gtest_processor_loopclosure.cpp @@ -84,7 +84,7 @@ TEST(ProcessorLoopClosure, installProcessor) // new KF t += dt; - auto kf = problem->emplaceFrame(KEY, x, t); //KF2 + auto kf = problem->emplaceKeyFrame(x, t); //KF2 // emplace a capture in KF auto capt_lc = CaptureBase::emplace<CaptureVoid>(kf, t, sens_lc); proc_lc->captureCallback(capt_lc); diff --git a/test/gtest_processor_motion.cpp b/test/gtest_processor_motion.cpp index 8f4738dae79311399a88bf15487c729741eba888..fa989be48e578e94046d10702197db0447f24094 100644 --- a/test/gtest_processor_motion.cpp +++ b/test/gtest_processor_motion.cpp @@ -248,7 +248,7 @@ TEST_F(ProcessorMotion_test, splitBufferAutoPrior) SensorBasePtr S = processor->getSensor(); TimeStamp t_target = 8.5; - FrameBasePtr F_target = problem->emplaceFrame(KEY, t_target); + FrameBasePtr F_target = problem->emplaceKeyFrame(t_target); CaptureMotionPtr C_source = std::dynamic_pointer_cast<CaptureMotion>(processor->getLast()); CaptureMotionPtr C_target = CaptureBase::emplace<CaptureMotion>(F_target, "ODOM 2d", @@ -293,7 +293,7 @@ TEST_F(ProcessorMotion_test, splitBufferFactorPrior) SensorBasePtr S = processor->getSensor(); TimeStamp t_target = 8.5; - FrameBasePtr F_target = problem->emplaceFrame(KEY, t_target); + FrameBasePtr F_target = problem->emplaceKeyFrame(t_target); CaptureMotionPtr C_source = std::dynamic_pointer_cast<CaptureMotion>(processor->getLast()); CaptureMotionPtr C_target = CaptureBase::emplace<CaptureMotion>(F_target, "ODOM 2d", @@ -338,7 +338,7 @@ TEST_F(ProcessorMotion_test, splitBufferFixPrior) SensorBasePtr S = processor->getSensor(); TimeStamp t_target = 8.5; - FrameBasePtr F_target = problem->emplaceFrame(KEY, t_target); + FrameBasePtr F_target = problem->emplaceKeyFrame(t_target); CaptureMotionPtr C_source = std::dynamic_pointer_cast<CaptureMotion>(processor->getLast()); CaptureMotionPtr C_target = CaptureBase::emplace<CaptureMotion>(F_target, "ODOM 2d", diff --git a/test/gtest_solver_manager.cpp b/test/gtest_solver_manager.cpp index 640dc71faefcdfcaa937bdc928c904ef618f05d9..fd6e25a8036d4d4c87cd0c39acbdfee9db8b5201 100644 --- a/test/gtest_solver_manager.cpp +++ b/test/gtest_solver_manager.cpp @@ -515,7 +515,7 @@ TEST(SolverManager, AddFactor) StateBlockPtr sb_ptr = std::make_shared<StateBlock>(state); // Create (and add) factor point 2d - FrameBasePtr F = P->emplaceFrame(KEY, P->zeroState(), TimeStamp(0)); + FrameBasePtr F = P->emplaceKeyFrame(P->zeroState(), TimeStamp(0)); auto C = CaptureBase::emplace<CaptureVoid>(F, 0, nullptr); auto f = FeatureBase::emplace<FeatureBase>(C, "FeatureOdom2d", Vector3d::Zero(), Matrix3d::Identity()); FactorPose2dPtr c = FactorBase::emplace<FactorPose2d>(f, f, nullptr, false); @@ -542,7 +542,7 @@ TEST(SolverManager, RemoveFactor) StateBlockPtr sb_ptr = std::make_shared<StateBlock>(state); // Create (and add) factor point 2d - FrameBasePtr F = P->emplaceFrame(KEY, P->zeroState(), TimeStamp(0)); + FrameBasePtr F = P->emplaceKeyFrame(P->zeroState(), TimeStamp(0)); auto C = CaptureBase::emplace<CaptureVoid>(F, 0, nullptr); auto f = FeatureBase::emplace<FeatureBase>(C, "FeatureOdom2d", Vector3d::Zero(), Matrix3d::Identity()); FactorPose2dPtr c = FactorBase::emplace<FactorPose2d>(f, f, nullptr, false); @@ -575,7 +575,7 @@ TEST(SolverManager, AddRemoveFactor) StateBlockPtr sb_ptr = std::make_shared<StateBlock>(state); // Create (and add) factor point 2d - FrameBasePtr F = P->emplaceFrame(KEY, P->zeroState(), TimeStamp(0)); + FrameBasePtr F = P->emplaceKeyFrame(P->zeroState(), TimeStamp(0)); auto C = CaptureBase::emplace<CaptureVoid>(F, 0, nullptr); auto f = FeatureBase::emplace<FeatureBase>(C, "FeatureOdom2d", Vector3d::Zero(), Matrix3d::Identity()); @@ -610,7 +610,7 @@ TEST(SolverManager, DoubleRemoveFactor) StateBlockPtr sb_ptr = std::make_shared<StateBlock>(state); // Create (and add) factor point 2d - FrameBasePtr F = P->emplaceFrame(KEY, P->zeroState(), TimeStamp(0)); + FrameBasePtr F = P->emplaceKeyFrame(P->zeroState(), TimeStamp(0)); auto C = CaptureBase::emplace<CaptureVoid>(F, 0, nullptr); auto f = FeatureBase::emplace<FeatureBase>(C, "FeatureOdom2d", Vector3d::Zero(), Matrix3d::Identity()); diff --git a/test/gtest_track_matrix.cpp b/test/gtest_track_matrix.cpp index 1f641dcf0da9765ddd155b5d35eaf87041879828..66a711db5fb62ad804f8df12211653aa154c6357 100644 --- a/test/gtest_track_matrix.cpp +++ b/test/gtest_track_matrix.cpp @@ -35,11 +35,11 @@ class TrackMatrixTest : public testing::Test // unlinked frames // Some warnings will be thrown "linking with nullptr" for emplacing without providing frame pointer - F0 = FrameBase::emplace<FrameBase>(nullptr, 0.0, nullptr); - F1 = FrameBase::emplace<FrameBase>(nullptr, 1.0, nullptr); - F2 = FrameBase::emplace<FrameBase>(nullptr, 2.0, nullptr); - F3 = FrameBase::emplace<FrameBase>(nullptr, 3.0, nullptr); - F4 = FrameBase::emplace<FrameBase>(nullptr, 4.0, nullptr); + F0 = FrameBase::emplaceKeyFrame<FrameBase>(nullptr, 0.0, nullptr); + F1 = FrameBase::emplaceKeyFrame<FrameBase>(nullptr, 1.0, nullptr); + F2 = FrameBase::emplaceKeyFrame<FrameBase>(nullptr, 2.0, nullptr); + F3 = FrameBase::emplaceKeyFrame<FrameBase>(nullptr, 3.0, nullptr); + F4 = FrameBase::emplaceKeyFrame<FrameBase>(nullptr, 4.0, nullptr); // unlinked features // Some warnings will be thrown "linking with nullptr" for emplacing without providing capture pointer @@ -50,8 +50,8 @@ class TrackMatrixTest : public testing::Test f4 = FeatureBase::emplace<FeatureBase>(nullptr, "FeatureBase", m, m_cov); // F0 and F4 are keyframes - F0->setKey(); - F4->setKey(); + F0->setKey(nullptr); + F4->setKey(nullptr); // link captures C0->link(F0); diff --git a/test/gtest_trajectory.cpp b/test/gtest_trajectory.cpp index e02037d9d110d781ca1dd639bd83b069ccf86b49..e9951c270aab76a84ed56ff08ebfbf977da8afc7 100644 --- a/test/gtest_trajectory.cpp +++ b/test/gtest_trajectory.cpp @@ -57,10 +57,11 @@ TEST(TrajectoryBase, ClosestKeyFrame) // 1 2 3 4 time stamps // --+-----+-----+-----+---> time - FrameBasePtr F1 = P->emplaceFrame(KEY, Eigen::Vector3d::Zero(), 1); - FrameBasePtr F2 = P->emplaceFrame(KEY, Eigen::Vector3d::Zero(), 2); - FrameBasePtr F3 = P->emplaceFrame(AUXILIARY, Eigen::Vector3d::Zero(), 3); - FrameBasePtr F4 = P->emplaceFrame(NON_ESTIMATED, Eigen::Vector3d::Zero(), 4); + FrameBasePtr F1 = P->emplaceKeyFrame(Eigen::Vector3d::Zero(), 1); + FrameBasePtr F2 = P->emplaceKeyFrame(Eigen::Vector3d::Zero(), 2); + //WARNING! MIGHT NEED TO ROLLBACK THIS TO AUXILIARY, FELLA + FrameBasePtr F3 = FrameBase::createNonKeyFrame<FrameBase>(P->getFrameStructure(), P->getDim(), 3, Eigen::Vector3d::Zero()); + FrameBasePtr F4 = FrameBase::createNonKeyFrame<FrameBase>(P->getFrameStructure(), P->getDim(), 4, Eigen::Vector3d::Zero()); FrameBasePtr KF; // closest key-frame queried @@ -94,9 +95,10 @@ TEST(TrajectoryBase, ClosestKeyOrAuxFrame) // 1 2 3 time stamps // --+-----+-----+---> time - FrameBasePtr F1 = P->emplaceFrame(KEY, Eigen::Vector3d::Zero(), 1); - FrameBasePtr F2 = P->emplaceFrame(AUXILIARY, Eigen::Vector3d::Zero(), 2); - FrameBasePtr F3 = P->emplaceFrame(NON_ESTIMATED, Eigen::Vector3d::Zero(), 3); + FrameBasePtr F1 = P->emplaceKeyFrame(Eigen::Vector3d::Zero(), 1); + //WARNING! MIGHT NEED TO ROLLBACK THIS TO AUXILIARY, FELLA + FrameBasePtr F2 = FrameBase::createNonKeyFrame<FrameBase>(P->getFrameStructure(), P->getDim(), 2, Eigen::Vector3d::Zero()); + FrameBasePtr F3 = FrameBase::createNonKeyFrame<FrameBase>(P->getFrameStructure(), P->getDim(), 3, Eigen::Vector3d::Zero()); FrameBasePtr KF; // closest key-frame queried @@ -133,21 +135,21 @@ TEST(TrajectoryBase, Add_Remove_Frame) std::cout << __LINE__ << std::endl; // add F1 - FrameBasePtr F1 = P->emplaceFrame(KEY, Eigen::Vector3d::Zero(), 1); // 2 non-fixed + FrameBasePtr F1 = P->emplaceKeyFrame(Eigen::Vector3d::Zero(), 1); // 2 non-fixed if (debug) P->print(2,0,0,0); ASSERT_EQ(T->getFrameList(). size(), (SizeStd) 1); ASSERT_EQ(P->getStateBlockNotificationMapSize(), (SizeStd) 2); std::cout << __LINE__ << std::endl; // add F2 - FrameBasePtr F2 = P->emplaceFrame(KEY, Eigen::Vector3d::Zero(), 2); // 1 fixed, 1 not + FrameBasePtr F2 = P->emplaceKeyFrame(Eigen::Vector3d::Zero(), 2); // 1 fixed, 1 not if (debug) P->print(2,0,0,0); ASSERT_EQ(T->getFrameList(). size(), (SizeStd) 2); ASSERT_EQ(P->getStateBlockNotificationMapSize(), (SizeStd) 4); std::cout << __LINE__ << std::endl; // add F3 - FrameBasePtr F3 = P->emplaceFrame(NON_ESTIMATED, Eigen::Vector3d::Zero(), 3); + FrameBasePtr F3 = FrameBase::createNonKeyFrame<FrameBase>(P->getFrameStructure(), P->getDim(), 3, Eigen::Vector3d::Zero()); if (debug) P->print(2,0,0,0); ASSERT_EQ(T->getFrameList(). size(), (SizeStd) 3); ASSERT_EQ(P->getStateBlockNotificationMapSize(), (SizeStd) 4); @@ -203,31 +205,31 @@ TEST(TrajectoryBase, KeyFramesAreSorted) // --+-----+-----+---> time // add frames and keyframes in random order --> keyframes must be sorted after that - FrameBasePtr F2 = P->emplaceFrame(KEY, Eigen::Vector3d::Zero(), 2); + FrameBasePtr F2 = P->emplaceKeyFrame(Eigen::Vector3d::Zero(), 2); if (debug) P->print(2,0,0,0); ASSERT_EQ(T->getLastFrame() ->id(), F2->id()); ASSERT_EQ(T->getLastKeyOrAuxFrame()->id(), F2->id()); ASSERT_EQ(T->getLastKeyFrame() ->id(), F2->id()); - FrameBasePtr F3 = P->emplaceFrame(NON_ESTIMATED, Eigen::Vector3d::Zero(), 3); // non-key-frame + FrameBasePtr F3 = FrameBase::createNonKeyFrame<FrameBase>(P->getFrameStructure(), P->getDim(), 3, Eigen::Vector3d::Zero()); // non-key-frame if (debug) P->print(2,0,0,0); ASSERT_EQ(T->getLastFrame() ->id(), F3->id()); ASSERT_EQ(T->getLastKeyOrAuxFrame()->id(), F2->id()); ASSERT_EQ(T->getLastKeyFrame() ->id(), F2->id()); - FrameBasePtr F1 = P->emplaceFrame(KEY, Eigen::Vector3d::Zero(), 1); + FrameBasePtr F1 = P->emplaceKeyFrame(Eigen::Vector3d::Zero(), 1); if (debug) P->print(2,0,0,0); ASSERT_EQ(T->getLastFrame() ->id(), F3->id()); ASSERT_EQ(T->getLastKeyOrAuxFrame()->id(), F2->id()); ASSERT_EQ(T->getLastKeyFrame() ->id(), F2->id()); - F3->setKey(); // set KF3 + F3->setKey(P); // set KF3 if (debug) P->print(2,0,0,0); ASSERT_EQ(T->getLastFrame() ->id(), F3->id()); ASSERT_EQ(T->getLastKeyOrAuxFrame()->id(), F3->id()); ASSERT_EQ(T->getLastKeyFrame() ->id(), F3->id()); - auto F4 = P->emplaceFrame(NON_ESTIMATED, Eigen::Vector3d::Zero(), 1.5); + auto F4 = FrameBase::createNonKeyFrame<FrameBase>(P->getFrameStructure(), P->getDim(), 1.5, Eigen::Vector3d::Zero()); // Trajectory status: // KF1 KF2 KF3 F4 frames // 1 2 3 1.5 time stamps @@ -237,7 +239,7 @@ TEST(TrajectoryBase, KeyFramesAreSorted) ASSERT_EQ(T->getLastKeyOrAuxFrame()->id(), F3->id()); ASSERT_EQ(T->getLastKeyFrame() ->id(), F3->id()); - F4->setKey(); + F4->setKey(P); // Trajectory status: // KF1 KF4 KF2 KF3 frames // 1 1.5 2 3 time stamps @@ -265,7 +267,8 @@ TEST(TrajectoryBase, KeyFramesAreSorted) if (debug) P->print(2,0,1,0); ASSERT_EQ(T->getLastFrame()->id(), F4->id()); - auto F5 = P->emplaceFrame(AUXILIARY, Eigen::Vector3d::Zero(), 1.5); + //WARNING! MIGHT NEED TO ROLLBACK THIS TO AUXILIARY, FELLA + auto F5 = FrameBase::createNonKeyFrame<FrameBase>(P->getFrameStructure(), P->getDim(), 1.5, Eigen::Vector3d::Zero()); // Trajectory status: // KF4 KF2 AuxF5 KF3 KF2 frames // 0.5 1 1.5 3 4 time stamps @@ -285,7 +288,7 @@ TEST(TrajectoryBase, KeyFramesAreSorted) ASSERT_EQ(T->getLastKeyOrAuxFrame()->id(), F5->id()); ASSERT_EQ(T->getLastKeyFrame() ->id(), F2->id()); - auto F6 = P->emplaceFrame(NON_ESTIMATED, Eigen::Vector3d::Zero(), 6); + auto F6 = FrameBase::createNonKeyFrame<FrameBase>(P->getFrameStructure(), P->getDim(), 6, Eigen::Vector3d::Zero()); // Trajectory status: // KF4 KF2 KF3 KF2 AuxF5 F6 frames // 0.5 1 3 4 5 6 time stamps @@ -295,7 +298,7 @@ TEST(TrajectoryBase, KeyFramesAreSorted) ASSERT_EQ(T->getLastKeyOrAuxFrame()->id(), F5->id()); ASSERT_EQ(T->getLastKeyFrame() ->id(), F2->id()); - auto F7 = P->emplaceFrame(NON_ESTIMATED, Eigen::Vector3d::Zero(), 5.5); + auto F7 = FrameBase::createNonKeyFrame<FrameBase>(P->getFrameStructure(), P->getDim(), 5.5, Eigen::Vector3d::Zero()); // Trajectory status: // KF4 KF2 KF3 KF2 AuxF5 F7 F6 frames // 0.5 1 3 4 5 5.5 6 time stamps diff --git a/test/gtest_tree_manager.cpp b/test/gtest_tree_manager.cpp index 4f609da767afb85bbc6cc818906524612aff3ded..08cd9f8cfb240fe58bf94a8c52fb19aad365635f 100644 --- a/test/gtest_tree_manager.cpp +++ b/test/gtest_tree_manager.cpp @@ -94,7 +94,7 @@ TEST(TreeManager, keyFrameCallback) ASSERT_EQ(GM->n_KF_, 0); - auto F0 = P->emplaceFrame("PO", 3, KEY, VectorXd(7), TimeStamp(0.0)); + auto F0 = P->emplaceKeyFrame("PO", 3, VectorXd(7), TimeStamp(0.0)); P->keyFrameCallback(F0, nullptr, 0); ASSERT_EQ(GM->n_KF_, 1); diff --git a/test/gtest_tree_manager_sliding_window.cpp b/test/gtest_tree_manager_sliding_window.cpp index 4cf8cf524ef114f357919661a3aee62a65e34234..f171dbcff79a31e07f71b1045f44ec71f9e62a8f 100644 --- a/test/gtest_tree_manager_sliding_window.cpp +++ b/test/gtest_tree_manager_sliding_window.cpp @@ -87,7 +87,7 @@ TEST(TreeManagerSlidingWindow, slidingWindowFixViral) Matrix6d cov = Matrix6d::Identity(); // FRAME 2 ---------------------------------------------------------- - auto F2 = P->emplaceFrame("PO", 3, KEY, state, TimeStamp(2)); + auto F2 = P->emplaceKeyFrame("PO", 3, state, TimeStamp(2)); P->keyFrameCallback(F2, nullptr, 0); // absolute factor @@ -103,7 +103,7 @@ TEST(TreeManagerSlidingWindow, slidingWindowFixViral) ASSERT_FALSE(F1->isRemoving()); // FRAME 3 ---------------------------------------------------------- - auto F3 = P->emplaceFrame("PO", 3, KEY, state, TimeStamp(3)); + auto F3 = P->emplaceKeyFrame("PO", 3, state, TimeStamp(3)); P->keyFrameCallback(F3, nullptr, 0); // absolute factor @@ -119,7 +119,7 @@ TEST(TreeManagerSlidingWindow, slidingWindowFixViral) ASSERT_FALSE(F1->isRemoving()); // FRAME 4 ---------------------------------------------------------- - auto F4 = P->emplaceFrame("PO", 3, KEY, state, TimeStamp(4)); + auto F4 = P->emplaceKeyFrame("PO", 3, state, TimeStamp(4)); P->keyFrameCallback(F4, nullptr, 0); // absolute factor @@ -139,7 +139,7 @@ TEST(TreeManagerSlidingWindow, slidingWindowFixViral) ASSERT_TRUE(F2->isFixed()); //Fixed // FRAME 5 ---------------------------------------------------------- - auto F5 = P->emplaceFrame("PO", 3, KEY, state, TimeStamp(5)); + auto F5 = P->emplaceKeyFrame("PO", 3, state, TimeStamp(5)); P->keyFrameCallback(F5, nullptr, 0); // absolute factor @@ -183,7 +183,7 @@ TEST(TreeManagerSlidingWindow, slidingWindowNoFixNoViral) Matrix6d cov = Matrix6d::Identity(); // FRAME 2 ---------------------------------------------------------- - auto F2 = P->emplaceFrame("PO", 3, KEY, state, TimeStamp(2)); + auto F2 = P->emplaceKeyFrame("PO", 3, state, TimeStamp(2)); P->keyFrameCallback(F2, nullptr, 0); // absolute factor @@ -199,7 +199,7 @@ TEST(TreeManagerSlidingWindow, slidingWindowNoFixNoViral) ASSERT_FALSE(F1->isRemoving()); // FRAME 3 ---------------------------------------------------------- - auto F3 = P->emplaceFrame("PO", 3, KEY, state, TimeStamp(3)); + auto F3 = P->emplaceKeyFrame("PO", 3, state, TimeStamp(3)); P->keyFrameCallback(F3, nullptr, 0); // absolute factor @@ -215,7 +215,7 @@ TEST(TreeManagerSlidingWindow, slidingWindowNoFixNoViral) ASSERT_FALSE(F1->isRemoving()); // FRAME 4 ---------------------------------------------------------- - auto F4 = P->emplaceFrame("PO", 3, KEY, state, TimeStamp(4)); + auto F4 = P->emplaceKeyFrame("PO", 3, state, TimeStamp(4)); P->keyFrameCallback(F4, nullptr, 0); // absolute factor @@ -235,7 +235,7 @@ TEST(TreeManagerSlidingWindow, slidingWindowNoFixNoViral) ASSERT_FALSE(F2->isFixed()); //Not fixed // FRAME 5 ---------------------------------------------------------- - auto F5 = P->emplaceFrame("PO", 3, KEY, state, TimeStamp(5)); + auto F5 = P->emplaceKeyFrame("PO", 3, state, TimeStamp(5)); P->keyFrameCallback(F5, nullptr, 0); // absolute factor