diff --git a/demos/hello_wolf/hello_wolf.cpp b/demos/hello_wolf/hello_wolf.cpp index 93e14f38c41ad1639c09810b4a26631e0ddc61e5..68db6b50e0abd0e2be06711df994cecd3dcc4693 100644 --- a/demos/hello_wolf/hello_wolf.cpp +++ b/demos/hello_wolf/hello_wolf.cpp @@ -225,7 +225,7 @@ int main() for (auto& sb : sen->getStateBlockVec()) if (sb && !sb->isFixed()) sb->setState(sb->getState() + VectorXd::Random(sb->getSize()) * 0.5); // We perturb A LOT ! - for (auto& kf : problem->getTrajectory()->getFrameList()) + for (auto& kf : *problem->getTrajectory()) if (kf->isKeyOrAux()) for (auto& pair_key_sb : kf->getStateBlockMap()) if (!pair_key_sb.second->isFixed()) @@ -245,7 +245,7 @@ int main() // GET COVARIANCES of all states WOLF_TRACE("======== COVARIANCES OF SOLVED PROBLEM =======") ceres->computeCovariances(SolverManager::CovarianceBlocksToBeComputed::ALL_MARGINALS); - for (auto& kf : problem->getTrajectory()->getFrameList()) + for (auto& kf : *problem->getTrajectory()) if (kf->isKeyOrAux()) { Eigen::MatrixXd cov; diff --git a/demos/hello_wolf/hello_wolf_autoconf.cpp b/demos/hello_wolf/hello_wolf_autoconf.cpp index 39d5558eb7e2925352a78694531aefdea16ee6f1..9b1e749cda92ff0a039816c63f2c753d144e907b 100644 --- a/demos/hello_wolf/hello_wolf_autoconf.cpp +++ b/demos/hello_wolf/hello_wolf_autoconf.cpp @@ -210,7 +210,7 @@ int main() for (auto& sb : sen->getStateBlockVec()) if (sb && !sb->isFixed()) sb->setState(sb->getState() + VectorXd::Random(sb->getSize()) * 0.5); // We perturb A LOT ! - for (auto& kf : problem->getTrajectory()->getFrameList()) + for (auto& kf : *problem->getTrajectory()) if (kf->isKeyOrAux()) for (auto& pair_key_sb : kf->getStateBlockMap()) if (pair_key_sb.second && !pair_key_sb.second->isFixed()) @@ -230,7 +230,7 @@ int main() // GET COVARIANCES of all states WOLF_TRACE("======== COVARIANCES OF SOLVED PROBLEM =======") ceres->computeCovariances(SolverManager::CovarianceBlocksToBeComputed::ALL_MARGINALS); - for (auto& kf : problem->getTrajectory()->getFrameList()) + for (auto& kf : *problem->getTrajectory()) if (kf->isKeyOrAux()) { Eigen::MatrixXd cov; diff --git a/include/core/capture/capture_base.h b/include/core/capture/capture_base.h index 7eb1a10b19fe6ffcc169468c6feb69dd33aed69c..9914ff93adc0157976dab7efae9baf9397d5b17e 100644 --- a/include/core/capture/capture_base.h +++ b/include/core/capture/capture_base.h @@ -176,6 +176,7 @@ inline unsigned int CaptureBase::id() const inline FrameBasePtr CaptureBase::getFrame() const { + frame_ptr_.expired(); return frame_ptr_.lock(); } diff --git a/include/core/common/wolf.h b/include/core/common/wolf.h index a289c46385155c50c7b8142b3ecec716f356e093..a3ec1b9e9018e041f0ab0aef448894858c265324 100644 --- a/include/core/common/wolf.h +++ b/include/core/common/wolf.h @@ -240,16 +240,14 @@ WOLF_STRUCT_PTR_TYPEDEFS(ParamsProcessorBase); // Trajectory WOLF_PTR_TYPEDEFS(TrajectoryBase); + // - Frame WOLF_PTR_TYPEDEFS(FrameBase); WOLF_LIST_TYPEDEFS(FrameBase); -struct FrameComp{ - bool operator() (const FrameBasePtr& lhs, const FrameBasePtr& rhs) const; -}; -typedef std::set<FrameBasePtr, FrameComp> FrameList; -typedef std::set<FrameBasePtr, FrameComp>::const_iterator FrameListIter; -typedef std::set<FrameBasePtr, FrameComp>::const_reverse_iterator FrameListRevIter; +class TimeStamp; +typedef std::map<TimeStamp, FrameBasePtr> FrameList; + // - Capture WOLF_PTR_TYPEDEFS(CaptureBase); WOLF_LIST_TYPEDEFS(CaptureBase); diff --git a/include/core/factor/factor_base.h b/include/core/factor/factor_base.h index 1c86c0deb339905b6e26bb6d74c3d3ded892b8e8..76572db00a296bb45c84c71a2f1f42c77ef87b64 100644 --- a/include/core/factor/factor_base.h +++ b/include/core/factor/factor_base.h @@ -4,6 +4,8 @@ // Forward declarations for node templates namespace wolf{ class FeatureBase; +class FrameListIter; +class FrameListRevIter; } //Wolf includes @@ -73,7 +75,7 @@ class FactorBase : public NodeBase, public std::enable_shared_from_this<FactorBa FactorStatus _status = FAC_ACTIVE); FactorBase(const std::string& _tp, - const FrameList& _frame_other_list, + const FrameBasePtrList& _frame_other_list, const CaptureBasePtrList& _capture_other_list, const FeatureBasePtrList& _feature_other_list, const LandmarkBasePtrList& _landmark_other_list, diff --git a/include/core/trajectory/trajectory_base.h b/include/core/trajectory/trajectory_base.h index e0b3fe6455f6c88414ec29ed2d5b10796b22f244..75a336731cf3e0599719261d5fb3f850fc67b5b1 100644 --- a/include/core/trajectory/trajectory_base.h +++ b/include/core/trajectory/trajectory_base.h @@ -6,17 +6,50 @@ namespace wolf{ class Problem; class FrameBase; -class TimeStamp; } //Wolf includes #include "core/common/wolf.h" #include "core/common/node_base.h" +#include "core/common/time_stamp.h" //std includes namespace wolf { +class FrameListIter : public std::map<TimeStamp, FrameBasePtr>::const_iterator +{ + public: + FrameListIter(std::map<TimeStamp, FrameBasePtr>::const_iterator src) + : std::map<TimeStamp, FrameBasePtr>::const_iterator(std::move(src)) + { + + } + + // override the indirection operator + const FrameBasePtr& operator*() const { + return std::map<TimeStamp, FrameBasePtr>::const_iterator::operator*().second; + } +}; + +class FrameListRevIter : public std::map<TimeStamp, FrameBasePtr>::const_reverse_iterator +{ + public: + FrameListRevIter(std::map<TimeStamp, FrameBasePtr>::const_reverse_iterator src) + : std::map<TimeStamp, FrameBasePtr>::const_reverse_iterator(std::move(src)) + { + + } + + // override the indirection operator + const FrameBasePtr& operator*() const { + return std::map<TimeStamp, FrameBasePtr>::const_reverse_iterator::operator*().second; + } +}; +// typedef std::map<TimeStamp, FrameBasePtr> FrameList; +// typedef std::map<TimeStamp, FrameBasePtr>::const_iterator FrameListIter; +// typedef std::map<TimeStamp, FrameBasePtr>::const_reverse_iterator FrameListRevIter; + //class TrajectoryBase class TrajectoryBase : public NodeBase, public std::enable_shared_from_this<TrajectoryBase> { @@ -40,11 +73,15 @@ class TrajectoryBase : public NodeBase, public std::enable_shared_from_this<Traj // Frames const FrameList& getFrameList() const; FrameBasePtr getLastFrame() const; + FrameBasePtr getFirstFrame() const; FrameBasePtr getLastKeyFrame() const; FrameBasePtr getLastKeyOrAuxFrame() const; FrameBasePtr closestKeyFrameToTimeStamp(const TimeStamp& _ts) const; FrameBasePtr closestKeyOrAuxFrameToTimeStamp(const TimeStamp& _ts) const; - void sortFrame(FrameBasePtr _frm_ptr); + FrameListIter begin() const; + FrameListIter end() const; + FrameListRevIter rbegin() const; + FrameListRevIter rend() const; void updateLastFrames(); virtual void printHeader(int depth, // @@ -66,10 +103,6 @@ class TrajectoryBase : public NodeBase, public std::enable_shared_from_this<Traj public: // factors void getFactorList(FactorBasePtrList & _fac_list) const; - - protected: - FrameBaseConstIter computeFrameOrder(FrameBasePtr _frame_ptr); - void moveFrame(FrameBasePtr _frm_ptr, FrameBaseConstIter _place); }; inline const FrameList& TrajectoryBase::getFrameList() const @@ -80,7 +113,29 @@ inline const FrameList& TrajectoryBase::getFrameList() const inline FrameBasePtr TrajectoryBase::getLastFrame() const { - return *(frame_list_.rbegin()); + auto it = static_cast<FrameListRevIter>(frame_list_.rbegin()); + return *it; +} +inline FrameBasePtr TrajectoryBase::getFirstFrame() const +{ + auto it = static_cast<FrameListIter>(frame_list_.begin()); + return *it; +} +inline FrameListIter TrajectoryBase::begin() const +{ + return static_cast<FrameListIter>(frame_list_.begin()); +} +inline FrameListIter TrajectoryBase::end() const +{ + return static_cast<FrameListIter>(frame_list_.end()); +} +inline FrameListRevIter TrajectoryBase::rbegin() const +{ + return static_cast<FrameListRevIter>(frame_list_.rbegin()); +} +inline FrameListRevIter TrajectoryBase::rend() const +{ + return static_cast<FrameListRevIter>(frame_list_.rend()); } inline FrameBasePtr TrajectoryBase::getLastKeyFrame() const diff --git a/src/ceres_wrapper/ceres_manager.cpp b/src/ceres_wrapper/ceres_manager.cpp index 0d0c6537fedfc21dec63760d877fb56386885adf..579223b5df36039f1de51542f34fb69ff6958bbc 100644 --- a/src/ceres_wrapper/ceres_manager.cpp +++ b/src/ceres_wrapper/ceres_manager.cpp @@ -88,7 +88,7 @@ void CeresManager::computeCovariances(const CovarianceBlocksToBeComputed _blocks // first create a vector containing all state blocks std::vector<StateBlockPtr> all_state_blocks, landmark_state_blocks; //frame state blocks - for(auto fr_ptr : wolf_problem_->getTrajectory()->getFrameList()) + for(auto fr_ptr : *wolf_problem_->getTrajectory()) if (fr_ptr->isKeyOrAux()) for (const auto& key : fr_ptr->getStructure()) { @@ -115,7 +115,7 @@ void CeresManager::computeCovariances(const CovarianceBlocksToBeComputed _blocks case CovarianceBlocksToBeComputed::ALL_MARGINALS: { // first create a vector containing all state blocks - for(auto fr_ptr : wolf_problem_->getTrajectory()->getFrameList()) + for(auto fr_ptr : *wolf_problem_->getTrajectory()) if (fr_ptr->isKeyOrAux()) for (const auto& key1 : wolf_problem_->getFrameStructure()) for (const auto& key2 : wolf_problem_->getFrameStructure()) diff --git a/src/factor/factor_base.cpp b/src/factor/factor_base.cpp index 675f428cad06b261e47c1f1bf4a4fb29c6bb6edb..0f65ddb4dcd0587fff4cc9cae0d0f6491c10f437 100644 --- a/src/factor/factor_base.cpp +++ b/src/factor/factor_base.cpp @@ -36,7 +36,7 @@ FactorBase::FactorBase(const std::string& _tp, } FactorBase::FactorBase(const std::string& _tp, - const FrameList& _frame_other_list, + const FrameBasePtrList& _frame_other_list, const CaptureBasePtrList& _capture_other_list, const FeatureBasePtrList& _feature_other_list, const LandmarkBasePtrList& _landmark_other_list, diff --git a/src/frame/frame_base.cpp b/src/frame/frame_base.cpp index a36417929bab661538736d837b016683c9597792..3bb108fe048051b5fef7ec59ab32e4b4a4eeda3c 100644 --- a/src/frame/frame_base.cpp +++ b/src/frame/frame_base.cpp @@ -148,8 +148,6 @@ void FrameBase::remove(bool viral_remove_empty_parent) void FrameBase::setTimeStamp(const TimeStamp& _ts) { time_stamp_ = _ts; - if (isKeyOrAux() && getTrajectory() != nullptr) - getTrajectory()->sortFrame(shared_from_this()); } void FrameBase::setNonEstimated() @@ -162,7 +160,6 @@ void FrameBase::setNonEstimated() type_ = NON_ESTIMATED; if (getTrajectory()) { - getTrajectory()->sortFrame(shared_from_this()); getTrajectory()->updateLastFrames(); } } @@ -177,7 +174,6 @@ void FrameBase::setKey() if (getTrajectory()) { - getTrajectory()->sortFrame(shared_from_this()); getTrajectory()->updateLastFrames(); } } @@ -191,7 +187,6 @@ void FrameBase::setAux() if (getTrajectory()) { - getTrajectory()->sortFrame(shared_from_this()); getTrajectory()->updateLastFrames(); } } @@ -206,12 +201,12 @@ FrameBasePtr FrameBase::getPreviousFrame() const assert(getTrajectory() != nullptr && "This Frame is not linked to any trajectory"); //look for the position of this node in the upper list (frame list of trajectory) - for (auto f_it = getTrajectory()->getFrameList().rbegin(); f_it != getTrajectory()->getFrameList().rend(); f_it++ ) + for (auto f_it = getTrajectory()->rbegin(); f_it != getTrajectory()->rend(); f_it++ ) { if ( this->frame_id_ == (*f_it)->id() ) { f_it++; - if (f_it != getTrajectory()->getFrameList().rend()) + if (f_it != getTrajectory()->rend()) { return *f_it; } @@ -227,11 +222,11 @@ FrameBasePtr FrameBase::getPreviousFrame() const FrameBasePtr FrameBase::getNextFrame() const { //std::cout << "finding next frame of " << this->frame_id_ << std::endl; - auto f_it = getTrajectory()->getFrameList().rbegin(); + auto f_it = getTrajectory()->rbegin(); f_it++; //starting from second last frame //look for the position of this node in the frame list of trajectory - while (f_it != getTrajectory()->getFrameList().rend()) + while (f_it != getTrajectory()->rend()) { if ( this->frame_id_ == (*f_it)->id()) { diff --git a/src/problem/problem.cpp b/src/problem/problem.cpp index f2d41a420415f8b0f9fb3ac9f6b5e286036c1160..9218f04206ec627b74a2b88d344c25c2d6c2f63e 100644 --- a/src/problem/problem.cpp +++ b/src/problem/problem.cpp @@ -1161,7 +1161,7 @@ bool Problem::check(bool _verbose, std::ostream& _stream) const // Frames ======================================================================================= - for (auto F : T->getFrameList()) + for (auto F : *(T)) { if (_verbose) { _stream << (F->isKeyOrAux() ? (F->isKey() ? " KFrm" : " EFrm") : " Frm") @@ -1731,7 +1731,7 @@ void Problem::perturb(double amplitude) S->perturb(amplitude); // Frames and Captures - for (auto& F : getTrajectory()->getFrameList()) + for (auto& F : *(getTrajectory())) { if (F->isKeyOrAux()) { diff --git a/src/processor/processor_motion.cpp b/src/processor/processor_motion.cpp index c917f9b7887f6463912101d483f0886d768c81c5..15354ffd1f77f2bc016b3a0e58bfb28774bf49a8 100644 --- a/src/processor/processor_motion.cpp +++ b/src/processor/processor_motion.cpp @@ -301,8 +301,10 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr) // Update state and time stamps last_ptr_->setTimeStamp(getCurrentTimeStamp()); - last_ptr_->getFrame()->setTimeStamp(getCurrentTimeStamp()); - last_ptr_->getFrame()->setState(getProblem()->getState(getCurrentTimeStamp())); + auto test_last = last_ptr_->getFrame(); + WOLF_TRACE("HELLO KITTY ", test_last == nullptr); + test_last->setTimeStamp(getCurrentTimeStamp()); + test_last->setState(getProblem()->getState(getCurrentTimeStamp())); if (permittedKeyFrame() && voteForKeyFrame()) { @@ -600,8 +602,8 @@ CaptureMotionPtr ProcessorMotion::findCaptureContainingTimeStamp(const TimeStamp FrameBasePtr frame = nullptr; CaptureBasePtr capture = nullptr; CaptureMotionPtr capture_motion = nullptr; - for (auto frame_rev_iter = getProblem()->getTrajectory()->getFrameList().rbegin(); - frame_rev_iter != getProblem()->getTrajectory()->getFrameList().rend(); + for (auto frame_rev_iter = getProblem()->getTrajectory()->rbegin(); + frame_rev_iter != getProblem()->getTrajectory()->rend(); ++frame_rev_iter) { frame = *frame_rev_iter; diff --git a/src/sensor/sensor_base.cpp b/src/sensor/sensor_base.cpp index 49d5e0ee9995144cea25f78d3707eb35743cbb5c..96484e62a3857ec14a8f65b45f179429b9f96fd3 100644 --- a/src/sensor/sensor_base.cpp +++ b/src/sensor/sensor_base.cpp @@ -223,9 +223,10 @@ CaptureBasePtr SensorBase::lastCapture(void) const CaptureBasePtr capture = nullptr; if (getProblem()) { - auto frame_list = getProblem()->getTrajectory()->getFrameList(); - FrameListRevIter frame_rev_it = frame_list.rbegin(); - while (frame_rev_it != frame_list.rend()) + // auto frame_list = getProblem()->getTrajectory()->getFrameList(); + auto trajectory = getProblem()->getTrajectory(); + FrameListRevIter frame_rev_it = trajectory->rbegin(); + while (frame_rev_it != trajectory->rend()) { capture = (*frame_rev_it)->getCaptureOf(shared_from_this()); if (capture) @@ -243,9 +244,9 @@ CaptureBasePtr SensorBase::lastKeyCapture(void) const CaptureBasePtr capture = nullptr; if (getProblem()) { - auto frame_list = getProblem()->getTrajectory()->getFrameList(); - FrameListRevIter frame_rev_it = frame_list.rbegin(); - while (frame_rev_it != frame_list.rend()) + auto trajectory = getProblem()->getTrajectory(); + FrameListRevIter frame_rev_it = trajectory->rbegin(); + while (frame_rev_it != trajectory->rend()) { if ((*frame_rev_it)->isKey()) { @@ -266,11 +267,12 @@ CaptureBasePtr SensorBase::lastCapture(const TimeStamp& _ts) const CaptureBasePtr capture = nullptr; if (getProblem()) { - auto frame_list = getProblem()->getTrajectory()->getFrameList(); + // auto frame_list = getProblem()->getTrajectory()->getFrameList(); + auto trajectory = getProblem()->getTrajectory(); // We iterate in reverse since we're likely to find it close to the rbegin() place. - FrameListRevIter frame_rev_it = frame_list.rbegin(); - while (frame_rev_it != frame_list.rend()) + FrameListRevIter frame_rev_it = trajectory->rbegin(); + while (frame_rev_it != trajectory->rend()) { if ((*frame_rev_it)->getTimeStamp() <= _ts) { diff --git a/src/trajectory/trajectory_base.cpp b/src/trajectory/trajectory_base.cpp index 51d164760b35ca82fba8c1b2f39dd48530720bd9..cffa28dcfa965f4dc216808fe0beda9f1de44d12 100644 --- a/src/trajectory/trajectory_base.cpp +++ b/src/trajectory/trajectory_base.cpp @@ -17,21 +17,13 @@ TrajectoryBase::~TrajectoryBase() // } -bool FrameComp::operator() (const FrameBasePtr& lhs, const FrameBasePtr& rhs) const -{ - return lhs->getTimeStamp()<rhs->getTimeStamp(); -} - FrameBasePtr TrajectoryBase::addFrame(FrameBasePtr _frame_ptr) { // add to list - frame_list_.insert(_frame_ptr); + frame_list_.insert(std::pair<TimeStamp, FrameBasePtr>(_frame_ptr->getTimeStamp(), _frame_ptr)); if (_frame_ptr->isKeyOrAux()) { - // sort - sortFrame(_frame_ptr); - // update last_estimated and last_key updateLastFrames(); } @@ -42,7 +34,8 @@ FrameBasePtr TrajectoryBase::addFrame(FrameBasePtr _frame_ptr) void TrajectoryBase::removeFrame(FrameBasePtr _frame_ptr) { // add to list - frame_list_.erase(_frame_ptr); + // frame_list_.erase(_frame_ptr); + frame_list_.erase(_frame_ptr->id()); // update last_estimated and last_key if (_frame_ptr->isKeyOrAux()) @@ -51,39 +44,17 @@ void TrajectoryBase::removeFrame(FrameBasePtr _frame_ptr) void TrajectoryBase::getFactorList(FactorBasePtrList & _fac_list) const { - for(auto fr_ptr : getFrameList()) + for(auto fr_ptr : *this) fr_ptr->getFactorList(_fac_list); } -void TrajectoryBase::sortFrame(FrameBasePtr _frame_ptr) -{ - moveFrame(_frame_ptr, computeFrameOrder(_frame_ptr)); -} - -void TrajectoryBase::moveFrame(FrameBasePtr _frm_ptr, FrameBaseConstIter _place) -{ - if (*_place != _frm_ptr) - { - frame_list_.erase(_frm_ptr->id()); - frame_list_.insert(_place, _frm_ptr); - updateLastFrames(); - } -} - -FrameBaseConstIter TrajectoryBase::computeFrameOrder(FrameBasePtr _frame_ptr) -{ - for (auto frm_rit = getFrameList().rbegin(); frm_rit != getFrameList().rend(); frm_rit++) - if ((*frm_rit)!= _frame_ptr && (*frm_rit)->isKeyOrAux() && (*frm_rit)->getTimeStamp() <= _frame_ptr->getTimeStamp()) - return frm_rit.base(); - return getFrameList().begin(); -} void TrajectoryBase::updateLastFrames() { bool last_estimated_set = false; // NOTE: Assumes estimated (key or auxiliary) frames are sorted by timestamp - for (auto frm_rit = getFrameList().rbegin(); frm_rit != getFrameList().rend(); ++frm_rit) + for (auto frm_rit = rbegin(); frm_rit != rend(); ++frm_rit) if ((*frm_rit)->isKeyOrAux()) { if (!last_estimated_set) @@ -105,7 +76,7 @@ FrameBasePtr TrajectoryBase::closestKeyFrameToTimeStamp(const TimeStamp& _ts) co FrameBasePtr closest_kf = nullptr; double min_dt = 1e9; - for (auto frm_rit = frame_list_.rbegin(); frm_rit != frame_list_.rend(); frm_rit++) + for (auto frm_rit = rbegin(); frm_rit != rend(); frm_rit++) if ((*frm_rit)->isKey()) { double dt = std::fabs((*frm_rit)->getTimeStamp() - _ts); @@ -126,7 +97,7 @@ FrameBasePtr TrajectoryBase::closestKeyOrAuxFrameToTimeStamp(const TimeStamp& _t FrameBasePtr closest_kf = nullptr; double min_dt = 1e9; - for (auto frm_rit = frame_list_.rbegin(); frm_rit != frame_list_.rend(); frm_rit++) + for (auto frm_rit = rbegin(); frm_rit != rend(); frm_rit++) if ((*frm_rit)->isKeyOrAux()) { double dt = std::fabs((*frm_rit)->getTimeStamp() - _ts); @@ -149,7 +120,7 @@ void TrajectoryBase::print(int _depth, bool _constr_by, bool _metric, bool _stat { printHeader(_depth, _constr_by, _metric, _state_blocks, _stream, _tabs); if (_depth >= 1) - for (auto F : getFrameList()) + for (auto F : *this) F->print(_depth, _constr_by, _metric, _state_blocks, _stream, _tabs + " "); } diff --git a/src/tree_manager/tree_manager_sliding_window.cpp b/src/tree_manager/tree_manager_sliding_window.cpp index 5816567557bdd2ca5779615834a3f48a418bbabe..623c7bec91214b55f7d2d8f2034dbba3e01c5ccb 100644 --- a/src/tree_manager/tree_manager_sliding_window.cpp +++ b/src/tree_manager/tree_manager_sliding_window.cpp @@ -7,7 +7,7 @@ void TreeManagerSlidingWindow::keyFrameCallback(FrameBasePtr _key_frame) { int n_kf(0); FrameBasePtr first_KF(nullptr), second_KF(nullptr); - for (auto frm : getProblem()->getTrajectory()->getFrameList()) + for (auto frm : *getProblem()->getTrajectory()) { if (frm->isKey()) { diff --git a/test/gtest_emplace.cpp b/test/gtest_emplace.cpp index 457d41fe43f1adb01345065130f416f8ec785185..8f72b5cfd0a5edfd698bd7a23812443127048f54 100644 --- a/test/gtest_emplace.cpp +++ b/test/gtest_emplace.cpp @@ -43,7 +43,7 @@ TEST(Emplace, Frame) 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)); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getTrajectory()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getTrajectory()->getProblem()); } TEST(Emplace, Processor) @@ -68,11 +68,11 @@ TEST(Emplace, Capture) 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)); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getTrajectory()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getTrajectory()->getProblem()); auto cpt = CaptureBase::emplace<CaptureBase>(frm, "Dummy", TimeStamp(0), nullptr, nullptr, nullptr, nullptr); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getCaptureList().front()->getFrame()->getTrajectory()->getProblem()); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getCaptureList().front()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getCaptureList().front()->getFrame()->getTrajectory()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getCaptureList().front()->getProblem()); ASSERT_EQ(frm, frm->getCaptureList().front()->getFrame()); } @@ -82,16 +82,16 @@ TEST(Emplace, Feature) 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)); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getTrajectory()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getTrajectory()->getProblem()); auto cpt = CaptureBase::emplace<CaptureBase>(frm, "Dummy", TimeStamp(0), nullptr, nullptr, nullptr, nullptr); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getCaptureList().front()->getFrame()->getTrajectory()->getProblem()); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getCaptureList().front()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getCaptureList().front()->getFrame()->getTrajectory()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getCaptureList().front()->getProblem()); ASSERT_EQ(frm, frm->getCaptureList().front()->getFrame()); auto cov = Eigen::MatrixXd::Identity(2,2); FeatureBase::emplace<FeatureBase>(cpt, "Dummy", Eigen::VectorXd(2), cov); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getCaptureList().front()->getFeatureList().front()->getCapture()->getFrame()->getTrajectory()->getProblem()); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getCaptureList().front()->getFeatureList().front()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getCaptureList().front()->getFeatureList().front()->getCapture()->getFrame()->getTrajectory()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getCaptureList().front()->getFeatureList().front()->getProblem()); ASSERT_EQ(cpt, cpt->getFeatureList().front()->getCapture()); } TEST(Emplace, Factor) @@ -100,16 +100,16 @@ TEST(Emplace, Factor) 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)); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getTrajectory()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getTrajectory()->getProblem()); auto cpt = CaptureBase::emplace<CaptureBase>(frm, "Dummy", TimeStamp(0), nullptr, nullptr, nullptr, nullptr); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getCaptureList().front()->getFrame()->getTrajectory()->getProblem()); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getCaptureList().front()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getCaptureList().front()->getFrame()->getTrajectory()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getCaptureList().front()->getProblem()); ASSERT_EQ(frm, frm->getCaptureList().front()->getFrame()); auto cov = Eigen::MatrixXd::Identity(2,2); auto ftr = FeatureBase::emplace<FeatureOdom2d>(cpt, Eigen::VectorXd(2), cov); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getCaptureList().front()->getFeatureList().front()->getCapture()->getFrame()->getTrajectory()->getProblem()); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getCaptureList().front()->getFeatureList().front()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getCaptureList().front()->getFeatureList().front()->getCapture()->getFrame()->getTrajectory()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getCaptureList().front()->getFeatureList().front()->getProblem()); ASSERT_EQ(cpt, cpt->getFeatureList().front()->getCapture()); auto cnt = FactorBase::emplace<FactorOdom2d>(ftr, ftr, frm, nullptr, false); ASSERT_NE(nullptr, ftr->getFactorList().front().get()); @@ -130,7 +130,7 @@ TEST(Emplace, EmplaceDerived) auto ftr = FeatureBase::emplace<FeatureOdom2d>(cpt, Eigen::VectorXd(2), cov); ASSERT_EQ(sen, P->getHardware()->getSensorList().front()); - ASSERT_EQ(P, P->getTrajectory()->getFrameList().front()->getCaptureList().front()->getFeatureList().front()->getProblem()); + ASSERT_EQ(P, P->getTrajectory()->getFirstFrame()->getCaptureList().front()->getFeatureList().front()->getProblem()); } TEST(Emplace, Nullpointer) { diff --git a/test/gtest_factor_base.cpp b/test/gtest_factor_base.cpp index d2c3b622ee5b165c65a40afea6be9bb3a5bef5ef..9e4f2ef10e8bf2fc1fb9a47d48468e254e46d0af 100644 --- a/test/gtest_factor_base.cpp +++ b/test/gtest_factor_base.cpp @@ -53,7 +53,7 @@ class FactorDummy : public FactorBase { // } - FactorDummy(const FrameList& _frame_other_list, + FactorDummy(const FrameBasePtrList& _frame_other_list, const CaptureBasePtrList& _capture_other_list, const FeatureBasePtrList& _feature_other_list, const LandmarkBasePtrList& _landmark_other_list) : diff --git a/test/gtest_odom_2d.cpp b/test/gtest_odom_2d.cpp index 33026ee4b5f72b7ce06cdf79c3c765963e0cb64c..2c29665d486e65a68fe9bf8c8a37bfefac8aa080 100644 --- a/test/gtest_odom_2d.cpp +++ b/test/gtest_odom_2d.cpp @@ -74,7 +74,7 @@ void show(const ProblemPtr& problem) using std::endl; cout << std::setprecision(4); - for (FrameBasePtr F : problem->getTrajectory()->getFrameList()) + for (FrameBasePtr F : *problem->getTrajectory()) { if (F->isKey()) { @@ -299,7 +299,7 @@ TEST(Odom2d, VoteForKfAndSolve) // Check the 3 KFs' states and covariances MatrixXd computed_cov; int n = 0; - for (auto F : problem->getTrajectory()->getFrameList()) + for (auto F : *problem->getTrajectory()) { if (!F->isKey()) break; diff --git a/test/gtest_problem.cpp b/test/gtest_problem.cpp index bf878e87c1cb5a277225ac20be11fce7f1b12c5d..ce90b16ae7aeafaa9acec35aed709e41bc2c80fd 100644 --- a/test/gtest_problem.cpp +++ b/test/gtest_problem.cpp @@ -411,7 +411,7 @@ TEST(Problem, perturb) ASSERT_FALSE(S->getIntrinsic()->getState().isApprox(Vector3d(1,1,1), prec) ); } - for (auto F : problem->getTrajectory()->getFrameList()) + for (auto F : *problem->getTrajectory()) { if (F->isFixed()) // fixed { diff --git a/test/gtest_processor_base.cpp b/test/gtest_processor_base.cpp index 4ac7acf50f3fc066901858db2b34843c58634af3..814ac262a48c196bb291bf10d2af282300cbc57f 100644 --- a/test/gtest_processor_base.cpp +++ b/test/gtest_processor_base.cpp @@ -115,6 +115,7 @@ TEST(ProcessorBase, KeyFrameCallback) capt_odo->setTimeStamp(t); std::cout << "2\n"; + problem->check(1); proc_odo->captureCallback(capt_odo); std::cout << "3\n"; diff --git a/test/gtest_processor_loopclosure.cpp b/test/gtest_processor_loopclosure.cpp index 5d5bb796004cb66a817a5fb546eee22da35e0ba5..760b15d3559ec6d33f2c73cdae3e5c4583c0691c 100644 --- a/test/gtest_processor_loopclosure.cpp +++ b/test/gtest_processor_loopclosure.cpp @@ -34,7 +34,7 @@ protected: virtual bool detectFeatures(CaptureBasePtr cap) { return true;}; virtual CaptureBasePtr findLoopCandidate(CaptureBasePtr _capture) { - for (FrameBasePtr kf : getProblem()->getTrajectory()->getFrameList()) + for (FrameBasePtr kf : *getProblem()->getTrajectory()) if (kf->isKey()) for (CaptureBasePtr cap : kf->getCaptureList()) if (cap != _capture) diff --git a/test/gtest_trajectory.cpp b/test/gtest_trajectory.cpp index 82c65c284c5f06b518943679ac70ae3f2803bc42..e02037d9d110d781ca1dd639bd83b069ccf86b49 100644 --- a/test/gtest_trajectory.cpp +++ b/test/gtest_trajectory.cpp @@ -263,7 +263,7 @@ TEST(TrajectoryBase, KeyFramesAreSorted) // 0.5 1 3 4 time stamps // --+-----+-----+------+---> time if (debug) P->print(2,0,1,0); - ASSERT_EQ(T->getFrameList().front()->id(), F4->id()); + ASSERT_EQ(T->getLastFrame()->id(), F4->id()); auto F5 = P->emplaceFrame(AUXILIARY, Eigen::Vector3d::Zero(), 1.5); // Trajectory status: