diff --git a/include/core/processor/processor_base.h b/include/core/processor/processor_base.h index c5078c10fec051901557c67172598714e7e5fe0e..8c61f80b9a72194a2b77e3fdfe9e06dd653ddb2a 100644 --- a/include/core/processor/processor_base.h +++ b/include/core/processor/processor_base.h @@ -154,6 +154,7 @@ public: */ bool empty(); +protected: /**\brief Check time tolerance * * Check if the time distance between two time stamps is smaller than diff --git a/include/core/processor/processor_motion.h b/include/core/processor/processor_motion.h index 847a2fabe1a29fba26f84f512ac29e14050d81aa..5186fb9c4d798aebcf4e6d9dab41677d1d318fd1 100644 --- a/include/core/processor/processor_motion.h +++ b/include/core/processor/processor_motion.h @@ -303,6 +303,13 @@ class ProcessorMotion : public ProcessorBase, public MotionProvider FrameBasePtr computeProcessingStep(); + bool checkTimeTolerance (const TimeStamp& _ts1, const TimeStamp& _ts2); + bool checkTimeTolerance (const CaptureBasePtr _cap, const TimeStamp& _ts); + bool checkTimeTolerance (const FrameBasePtr _frm, const TimeStamp& _ts); + bool checkTimeTolerance (const FrameBasePtr _frm, const CaptureBasePtr _cap); + + + // These are the pure virtual functions doing the mathematics public: @@ -541,6 +548,27 @@ class ProcessorMotion : public ProcessorBase, public MotionProvider Eigen::MatrixXd unmeasured_perturbation_cov_; ///< Covariance of unmeasured DoF to avoid singularity }; +inline bool ProcessorMotion::checkTimeTolerance (const TimeStamp& _ts1, const TimeStamp& _ts2) +{ + auto dt = std::fabs(_ts1 - _ts2); + return dt <= params_motion_->time_tolerance; +} + +inline bool ProcessorMotion::checkTimeTolerance (const CaptureBasePtr _cap, const TimeStamp& _ts) +{ + return checkTimeTolerance(_cap->getTimeStamp(), _ts); +} + +inline bool ProcessorMotion::checkTimeTolerance (const FrameBasePtr _frm, const TimeStamp& _ts) +{ + return checkTimeTolerance(_frm->getTimeStamp(), _ts); +} + +inline bool ProcessorMotion::checkTimeTolerance (const FrameBasePtr _frm, const CaptureBasePtr _cap) +{ + return checkTimeTolerance(_frm->getTimeStamp(), _cap->getTimeStamp()); +} + } #include "core/frame/frame_base.h" diff --git a/include/core/processor/processor_tracker.h b/include/core/processor/processor_tracker.h index b12779a2e8190d7075fb12829248ecd7974edcde..7164a422611ca45f4b446953537d135eafb2cf4d 100644 --- a/include/core/processor/processor_tracker.h +++ b/include/core/processor/processor_tracker.h @@ -138,10 +138,10 @@ class ProcessorTracker : public ProcessorBase StateStructure getStateStructure() const; - bool checkTimeTolerance(const TimeStamp& _ts1, const TimeStamp& _ts2); - bool checkTimeTolerance(const CaptureBasePtr _cap, const TimeStamp& _ts); - bool checkTimeTolerance(const FrameBasePtr _frm, const TimeStamp& _ts); - bool checkTimeTolerance(const FrameBasePtr _frm, const CaptureBasePtr _cap); + bool checkTimeTolerance (const TimeStamp& _ts1, const TimeStamp& _ts2); + bool checkTimeTolerance (const CaptureBasePtr _cap, const TimeStamp& _ts); + bool checkTimeTolerance (const FrameBasePtr _frm, const TimeStamp& _ts); + bool checkTimeTolerance (const FrameBasePtr _frm, const CaptureBasePtr _cap); virtual CaptureBasePtr getOrigin() const; virtual CaptureBasePtr getLast() const; @@ -308,7 +308,8 @@ inline FeatureBasePtrList& ProcessorTracker::getNewFeaturesListIncoming() inline bool ProcessorTracker::checkTimeTolerance(const TimeStamp& _ts1, const TimeStamp& _ts2) { - return buffer_frame_.checkTimeTolerance(_ts1, _ts2, params_tracker_->time_tolerance); + auto dt = std::fabs(_ts1 - _ts2); + return dt <= params_tracker_->time_tolerance; } inline bool ProcessorTracker::checkTimeTolerance(const CaptureBasePtr _cap, const TimeStamp& _ts) diff --git a/src/processor/processor_motion.cpp b/src/processor/processor_motion.cpp index e25430f5fbc428029f54bd16f5d724414bd4de1a..92c6776dce32024b8eea880040f561f760643888 100644 --- a/src/processor/processor_motion.cpp +++ b/src/processor/processor_motion.cpp @@ -930,9 +930,8 @@ FrameBasePtr ProcessorMotion::computeProcessingStep() if (keyframe_from_callback) { - if (buffer_frame_.checkTimeTolerance(keyframe_from_callback->getTimeStamp(), - incoming_ptr_->getTimeStamp(), - params_motion_->time_tolerance)) + if (checkTimeTolerance(keyframe_from_callback, + incoming_ptr_)) { WOLF_DEBUG("First time with a KF compatible.") processing_step_ = FIRST_TIME_WITH_KF_ON_INCOMING; @@ -966,9 +965,8 @@ FrameBasePtr ProcessorMotion::computeProcessingStep() if (keyframe_from_callback) { - if (buffer_frame_.checkTimeTolerance(keyframe_from_callback->getTimeStamp(), - origin_ptr_->getTimeStamp(), - params_motion_->time_tolerance)) + if (checkTimeTolerance(keyframe_from_callback, + origin_ptr_)) processing_step_ = RUNNING_WITH_KF_ON_ORIGIN; diff --git a/src/processor/processor_tracker.cpp b/src/processor/processor_tracker.cpp index 7ead05cd8886cb85308063e07c4cebc4449fe4f9..32c74f2db2116b02c86b746152a949c8374f954b 100644 --- a/src/processor/processor_tracker.cpp +++ b/src/processor/processor_tracker.cpp @@ -333,5 +333,6 @@ void ProcessorTracker::printHeader(int _depth, bool _constr_by, bool _metric, bo if (getIncoming()) _stream << _tabs << " " << "i: Cap" << getIncoming()->id() << std::endl; } + } // namespace wolf diff --git a/test/gtest_buffer_frame.cpp b/test/gtest_buffer_frame.cpp index f314325e629d867ca69e7313b58a9adb5e9f2577..5c5fadc4ce4e3423005296445d753d3482660dc1 100644 --- a/test/gtest_buffer_frame.cpp +++ b/test/gtest_buffer_frame.cpp @@ -97,16 +97,16 @@ TEST_F(BufferFrameTest, clear) // kfpackbuffer.print(); //} -TEST_F(BufferFrameTest, doubleCheckTimeTolerance) -{ - buffer_kf.clear(); - buffer_kf.emplace(10, f10); - buffer_kf.emplace(20, f20); - // min time tolerance > diff between time stamps. It should return true - ASSERT_TRUE(buffer_kf.doubleCheckTimeTolerance(10, 20, 20, 20)); - // min time tolerance < diff between time stamps. It should return true - ASSERT_FALSE(buffer_kf.doubleCheckTimeTolerance(10, 1, 20, 20)); -} +//TEST_F(BufferFrameTest, doubleCheckTimeTolerance) +//{ +// buffer_kf.clear(); +// buffer_kf.emplace(10, f10); +// buffer_kf.emplace(20, f20); +// // min time tolerance > diff between time stamps. It should return true +// ASSERT_TRUE(buffer_kf.doubleCheckTimeTolerance(10, 20, 20, 20)); +// // min time tolerance < diff between time stamps. It should return true +// ASSERT_FALSE(buffer_kf.doubleCheckTimeTolerance(10, 1, 20, 20)); +//} //TEST_F(BufferFrameTest, select) //{