diff --git a/src/hello_wolf/processor_range_bearing.cpp b/src/hello_wolf/processor_range_bearing.cpp index b2c66924f2292f30884b0d3dbebf2f31758bfbf7..4f8e0dabf7c410408bfb12e7167c40aab4973402 100644 --- a/src/hello_wolf/processor_range_bearing.cpp +++ b/src/hello_wolf/processor_range_bearing.cpp @@ -28,7 +28,7 @@ void ProcessorRangeBearing::process(CaptureBasePtr _capture) if ( !kf_pack_buffer_.empty() ) { // KeyFrame Callback received - KFPackPtr pack = kf_pack_buffer_.selectPack( _capture->getTimeStamp(), params_->time_tolerance ); + PackKeyFramePtr pack = kf_pack_buffer_.selectPack( _capture->getTimeStamp(), params_->time_tolerance ); if (pack!=nullptr) kf = pack->key_frame; diff --git a/src/processor_base.cpp b/src/processor_base.cpp index ed77aab55d10bf08a3bb155d58c182c31ee7b1a8..28a6f3dde73ebba6bba0e9c632660d9d13180803 100644 --- a/src/processor_base.cpp +++ b/src/processor_base.cpp @@ -78,25 +78,25 @@ void ProcessorBase::remove() ///////////////////////////////////////////////////////////////////////////////////////// -void KFPackBuffer::removeUpTo(const TimeStamp& _time_stamp) +void PackKeyFrameBuffer::removeUpTo(const TimeStamp& _time_stamp) { - KFPackBuffer::Iterator post = container_.upper_bound(_time_stamp); + PackKeyFrameBuffer::Iterator post = container_.upper_bound(_time_stamp); container_.erase(container_.begin(), post); // erasing by range } -void KFPackBuffer::add(const FrameBasePtr& _key_frame, const Scalar& _time_tolerance) +void PackKeyFrameBuffer::add(const FrameBasePtr& _key_frame, const Scalar& _time_tolerance) { TimeStamp time_stamp = _key_frame->getTimeStamp(); - KFPackPtr kfpack = std::make_shared<KFPack>(_key_frame, _time_tolerance); + PackKeyFramePtr kfpack = std::make_shared<PackKeyFrame>(_key_frame, _time_tolerance); container_.emplace(time_stamp, kfpack); } -KFPackPtr KFPackBuffer::selectPack(const TimeStamp& _time_stamp, const Scalar& _time_tolerance) +PackKeyFramePtr PackKeyFrameBuffer::selectPack(const TimeStamp& _time_stamp, const Scalar& _time_tolerance) { if (container_.empty()) return nullptr; - KFPackBuffer::Iterator post = container_.upper_bound(_time_stamp); + PackKeyFrameBuffer::Iterator post = container_.upper_bound(_time_stamp); bool prev_exists = (post != container_.begin()); bool post_exists = (post != container_.end()); @@ -105,7 +105,7 @@ KFPackPtr KFPackBuffer::selectPack(const TimeStamp& _time_stamp, const Scalar& _ if (prev_exists) { - KFPackBuffer::Iterator prev = std::prev(post); + PackKeyFrameBuffer::Iterator prev = std::prev(post); bool prev_ok = checkTimeTolerance(prev->first, prev->second->time_tolerance, _time_stamp, _time_tolerance); @@ -128,17 +128,17 @@ KFPackPtr KFPackBuffer::selectPack(const TimeStamp& _time_stamp, const Scalar& _ return nullptr; } -KFPackPtr KFPackBuffer::selectPack(const CaptureBasePtr _capture, const Scalar& _time_tolerance) +PackKeyFramePtr PackKeyFrameBuffer::selectPack(const CaptureBasePtr _capture, const Scalar& _time_tolerance) { return selectPack(_capture->getTimeStamp(), _time_tolerance); } -KFPackPtr KFPackBuffer::selectPackBefore(const TimeStamp& _time_stamp, const Scalar& _time_tolerance) +PackKeyFramePtr PackKeyFrameBuffer::selectPackBefore(const TimeStamp& _time_stamp, const Scalar& _time_tolerance) { if (container_.empty()) return nullptr; - KFPackBuffer::Iterator post = container_.upper_bound(_time_stamp); + PackKeyFrameBuffer::Iterator post = container_.upper_bound(_time_stamp); bool prev_exists = (post != container_.begin()); @@ -157,12 +157,12 @@ KFPackPtr KFPackBuffer::selectPackBefore(const TimeStamp& _time_stamp, const Sca return nullptr; } -KFPackPtr KFPackBuffer::selectPackBefore(const CaptureBasePtr _capture, const Scalar& _time_tolerance) +PackKeyFramePtr PackKeyFrameBuffer::selectPackBefore(const CaptureBasePtr _capture, const Scalar& _time_tolerance) { return selectPackBefore(_capture->getTimeStamp(), _time_tolerance); } -void KFPackBuffer::print(void) +void PackKeyFrameBuffer::print(void) { std::cout << "[ "; for (auto iter : container_) @@ -172,7 +172,7 @@ void KFPackBuffer::print(void) std::cout << "]" << std::endl; } -bool KFPackBuffer::checkTimeTolerance(const TimeStamp& _time_stamp1, const Scalar& _time_tolerance1, +bool PackKeyFrameBuffer::checkTimeTolerance(const TimeStamp& _time_stamp1, const Scalar& _time_tolerance1, const TimeStamp& _time_stamp2, const Scalar& _time_tolerance2) { Scalar time_diff = std::fabs(_time_stamp1 - _time_stamp2); diff --git a/src/processor_base.h b/src/processor_base.h index 169bc881d26308f02908c154a797fdccc6be49f6..b9dc4b8d6464062e21a91e8d4133462731ac1be6 100644 --- a/src/processor_base.h +++ b/src/processor_base.h @@ -24,16 +24,16 @@ namespace wolf { * * Used in keyframe callbacks as the minimal pack of information needed by the processor receiving the callback. */ -class KFPack +class PackKeyFrame { public: - KFPack(const FrameBasePtr _key_frame, const Scalar _time_tolerance) : key_frame(_key_frame), time_tolerance(_time_tolerance) {}; - ~KFPack(){}; + PackKeyFrame(const FrameBasePtr _key_frame, const Scalar _time_tolerance) : key_frame(_key_frame), time_tolerance(_time_tolerance) {}; + ~PackKeyFrame(){}; FrameBasePtr key_frame; Scalar time_tolerance; }; -WOLF_PTR_TYPEDEFS(KFPack); +WOLF_PTR_TYPEDEFS(PackKeyFrame); @@ -41,25 +41,25 @@ WOLF_PTR_TYPEDEFS(KFPack); * * Object and functions to manage a buffer of KFPack objects. */ -class KFPackBuffer +class PackKeyFrameBuffer { public: - typedef std::map<TimeStamp,KFPackPtr>::iterator Iterator; // buffer iterator + typedef std::map<TimeStamp,PackKeyFramePtr>::iterator Iterator; // buffer iterator - KFPackBuffer(void); - ~KFPackBuffer(void); + PackKeyFrameBuffer(void); + ~PackKeyFrameBuffer(void); /**\brief Select a Pack from the buffer * * Select from the buffer the closest pack (w.r.t. time stamp), * respecting a defined time tolerances */ - KFPackPtr selectPack(const TimeStamp& _time_stamp, const Scalar& _time_tolerance); - KFPackPtr selectPack(const CaptureBasePtr _capture, const Scalar& _time_tolerance); + PackKeyFramePtr selectPack(const TimeStamp& _time_stamp, const Scalar& _time_tolerance); + PackKeyFramePtr selectPack(const CaptureBasePtr _capture, const Scalar& _time_tolerance); - KFPackPtr selectPackBefore(const TimeStamp& _time_stamp, const Scalar& _time_tolerance); - KFPackPtr selectPackBefore(const CaptureBasePtr _capture, const Scalar& _time_tolerance); + PackKeyFramePtr selectPackBefore(const TimeStamp& _time_stamp, const Scalar& _time_tolerance); + PackKeyFramePtr selectPackBefore(const CaptureBasePtr _capture, const Scalar& _time_tolerance); /**\brief Buffer size * @@ -100,7 +100,7 @@ class KFPackBuffer private: - std::map<TimeStamp,KFPackPtr> container_; // Main buffer container + std::map<TimeStamp,PackKeyFramePtr> container_; // Main buffer container }; /** \brief base struct for processor parameters @@ -142,7 +142,7 @@ class ProcessorBase : public NodeBase, public std::enable_shared_from_this<Proce protected: unsigned int processor_id_; ProcessorParamsBasePtr params_; - KFPackBuffer kf_pack_buffer_; + PackKeyFrameBuffer kf_pack_buffer_; private: SensorBaseWPtr sensor_ptr_; @@ -248,27 +248,27 @@ inline void ProcessorBase::setTimeTolerance(Scalar _time_tolerance) params_->time_tolerance = _time_tolerance; } -inline KFPackBuffer::KFPackBuffer(void) +inline PackKeyFrameBuffer::PackKeyFrameBuffer(void) { } -inline KFPackBuffer::~KFPackBuffer(void) +inline PackKeyFrameBuffer::~PackKeyFrameBuffer(void) { } -inline void KFPackBuffer::clear() +inline void PackKeyFrameBuffer::clear() { container_.clear(); } -inline bool KFPackBuffer::empty() +inline bool PackKeyFrameBuffer::empty() { return container_.empty(); } -inline SizeStd KFPackBuffer::size(void) +inline SizeStd PackKeyFrameBuffer::size(void) { return container_.size(); } diff --git a/src/processor_motion.cpp b/src/processor_motion.cpp index d15a942a738fd17dc62c75e12c2fba8d6f7e10ec..450cd9d8c2333e06ef76a269939430fe42a18705 100644 --- a/src/processor_motion.cpp +++ b/src/processor_motion.cpp @@ -51,7 +51,7 @@ void ProcessorMotion::process(CaptureBasePtr _incoming_ptr) preProcess(); // Derived class operations - KFPackPtr pack = computeProcessingStep(); + PackKeyFramePtr pack = computeProcessingStep(); if (pack) kf_pack_buffer_.removeUpTo( pack->key_frame->getTimeStamp() ); @@ -573,7 +573,7 @@ FeatureBasePtr ProcessorMotion::emplaceFeature(CaptureMotionPtr _capture_motion) return feature; } -KFPackPtr ProcessorMotion::computeProcessingStep() +PackKeyFramePtr ProcessorMotion::computeProcessingStep() { if (!getProblem()->priorIsSet()) { @@ -584,7 +584,7 @@ KFPackPtr ProcessorMotion::computeProcessingStep() throw std::runtime_error("ProcessorMotion received data before being initialized."); } - KFPackPtr pack = kf_pack_buffer_.selectPackBefore(last_ptr_, params_motion_->time_tolerance); + PackKeyFramePtr pack = kf_pack_buffer_.selectPackBefore(last_ptr_, params_motion_->time_tolerance); if (pack) { diff --git a/src/processor_motion.h b/src/processor_motion.h index 7087ef593e06106bd1ac8c2dcf21b470420a87d2..4e20cab461bfb9cb5555f3091b1abd5d086d6573 100644 --- a/src/processor_motion.h +++ b/src/processor_motion.h @@ -235,7 +235,7 @@ class ProcessorMotion : public ProcessorBase */ virtual void postProcess() { }; - KFPackPtr computeProcessingStep(); + PackKeyFramePtr computeProcessingStep(); // These are the pure virtual functions doing the mathematics diff --git a/src/processor_tracker.cpp b/src/processor_tracker.cpp index c71c7f9d9d835b73e83e00880b653f7d50dcea45..0b9fbf56106eacd8fbe556a22ae908762298b070 100644 --- a/src/processor_tracker.cpp +++ b/src/processor_tracker.cpp @@ -52,7 +52,7 @@ void ProcessorTracker::process(CaptureBasePtr const _incoming_ptr) { case FIRST_TIME_WITH_PACK : { - KFPackPtr pack = kf_pack_buffer_.selectPack( incoming_ptr_, params_tracker_->time_tolerance); + PackKeyFramePtr pack = kf_pack_buffer_.selectPack( incoming_ptr_, params_tracker_->time_tolerance); kf_pack_buffer_.removeUpTo( incoming_ptr_->getTimeStamp() ); WOLF_DEBUG( "PT ", getName(), ": KF" , pack->key_frame->id() , " callback unpacked with ts= " , pack->key_frame->getTimeStamp().get() ); @@ -93,7 +93,7 @@ void ProcessorTracker::process(CaptureBasePtr const _incoming_ptr) case SECOND_TIME_WITH_PACK : { // No-break case only for debug. Next case will be executed too. - KFPackPtr pack = kf_pack_buffer_.selectPack( incoming_ptr_, params_tracker_->time_tolerance); + PackKeyFramePtr pack = kf_pack_buffer_.selectPack( incoming_ptr_, params_tracker_->time_tolerance); WOLF_DEBUG( "PT ", getName(), ": KF" , pack->key_frame->id() , " callback unpacked with ts= " , pack->key_frame->getTimeStamp().get() ); } case SECOND_TIME_WITHOUT_PACK : @@ -116,7 +116,7 @@ void ProcessorTracker::process(CaptureBasePtr const _incoming_ptr) } case RUNNING_WITH_PACK : { - KFPackPtr pack = kf_pack_buffer_.selectPack( last_ptr_ , params_tracker_->time_tolerance); + PackKeyFramePtr pack = kf_pack_buffer_.selectPack( last_ptr_ , params_tracker_->time_tolerance); kf_pack_buffer_.removeUpTo( last_ptr_->getTimeStamp() ); WOLF_DEBUG( "PT ", getName(), ": KF" , pack->key_frame->id() , " callback unpacked with ts= " , pack->key_frame->getTimeStamp().get() ); diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt index d82115af01812bc97573a99bade059fd5d1df967..985471013c0f232b742259fa2c66af823a5968a1 100644 --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -69,8 +69,8 @@ wolf_add_gtest(gtest_IMU_tools gtest_IMU_tools.cpp) # target_link_libraries(gtest_IMU_tools ${PROJECT_NAME}) // WOLF library not needed # IMU tools test -wolf_add_gtest(gtest_KF_pack_buffer gtest_KF_pack_buffer.cpp) -target_link_libraries(gtest_KF_pack_buffer ${PROJECT_NAME}) +wolf_add_gtest(gtest_pack_KF_buffer gtest_pack_KF_buffer.cpp) +target_link_libraries(gtest_pack_KF_buffer ${PROJECT_NAME}) # LocalParametrizationXxx classes test wolf_add_gtest(gtest_local_param gtest_local_param.cpp) diff --git a/src/test/gtest_KF_pack_buffer.cpp b/src/test/gtest_pack_KF_buffer.cpp similarity index 61% rename from src/test/gtest_KF_pack_buffer.cpp rename to src/test/gtest_pack_KF_buffer.cpp index e96a710ba5683d98046a21ca7cf5ab4ccfaee9b9..dab222c29248b5be35c61d9de10ffb041647217f 100644 --- a/src/test/gtest_KF_pack_buffer.cpp +++ b/src/test/gtest_pack_KF_buffer.cpp @@ -1,5 +1,5 @@ /* - * gtest_KF_pack_buffer.cpp + * gtest_pack_KF_buffer.cpp * * Created on: Mar 5, 2018 * Author: jsola @@ -22,11 +22,11 @@ using namespace wolf; using namespace Eigen; -class KFPackBufferTest : public testing::Test +class BufferPackKeyFrameTest : public testing::Test { public: - KFPackBuffer kfpackbuffer; + PackKeyFrameBuffer pack_kf_buffer; FrameBasePtr f10, f20, f21, f28; Scalar tt10, tt20, tt21, tt28; TimeStamp timestamp; @@ -46,29 +46,29 @@ class KFPackBufferTest : public testing::Test }; }; -TEST_F(KFPackBufferTest, empty) +TEST_F(BufferPackKeyFrameTest, empty) { - ASSERT_TRUE(kfpackbuffer.empty()); + ASSERT_TRUE(pack_kf_buffer.empty()); } -TEST_F(KFPackBufferTest, add) +TEST_F(BufferPackKeyFrameTest, add) { - kfpackbuffer.add(f10, tt10); - ASSERT_EQ(kfpackbuffer.size(), (unsigned int) 1); - kfpackbuffer.add(f20, tt20); - ASSERT_EQ(kfpackbuffer.size(), (unsigned int) 2); + pack_kf_buffer.add(f10, tt10); + ASSERT_EQ(pack_kf_buffer.size(), (unsigned int) 1); + pack_kf_buffer.add(f20, tt20); + ASSERT_EQ(pack_kf_buffer.size(), (unsigned int) 2); } -TEST_F(KFPackBufferTest, clear) +TEST_F(BufferPackKeyFrameTest, clear) { - kfpackbuffer.add(f10, tt10); - kfpackbuffer.add(f20, tt20); - ASSERT_EQ(kfpackbuffer.size(), (unsigned int) 2); - kfpackbuffer.clear(); - ASSERT_TRUE(kfpackbuffer.empty()); + pack_kf_buffer.add(f10, tt10); + pack_kf_buffer.add(f20, tt20); + ASSERT_EQ(pack_kf_buffer.size(), (unsigned int) 2); + pack_kf_buffer.clear(); + ASSERT_TRUE(pack_kf_buffer.empty()); } -//TEST_F(KFPackBufferTest, print) +//TEST_F(BufferPackKeyFrameTest, print) //{ // kfpackbuffer.clear(); // kfpackbuffer.add(f10, tt10); @@ -76,18 +76,18 @@ TEST_F(KFPackBufferTest, clear) // kfpackbuffer.print(); //} -TEST_F(KFPackBufferTest, checkTimeTolerance) +TEST_F(BufferPackKeyFrameTest, checkTimeTolerance) { - kfpackbuffer.clear(); - kfpackbuffer.add(f10, tt10); - kfpackbuffer.add(f20, tt20); + pack_kf_buffer.clear(); + pack_kf_buffer.add(f10, tt10); + pack_kf_buffer.add(f20, tt20); // min time tolerance > diff between time stamps. It should return true - ASSERT_TRUE(kfpackbuffer.checkTimeTolerance(10, 20, 20, 20)); + ASSERT_TRUE(pack_kf_buffer.checkTimeTolerance(10, 20, 20, 20)); // min time tolerance < diff between time stamps. It should return true - ASSERT_FALSE(kfpackbuffer.checkTimeTolerance(10, 1, 20, 20)); + ASSERT_FALSE(pack_kf_buffer.checkTimeTolerance(10, 1, 20, 20)); } -TEST_F(KFPackBufferTest, selectPack) +TEST_F(BufferPackKeyFrameTest, selectPack) { // Evaluation using two packs (p1,p2) // with different time tolerances (tp1,tp2) @@ -111,7 +111,7 @@ TEST_F(KFPackBufferTest, selectPack) // 7 7 5 | 20 // 7 7 7 | 20 - kfpackbuffer.clear(); + pack_kf_buffer.clear(); // input packages std::vector<int> p1 = {2, 7}; // Pack 1 time tolerances @@ -131,26 +131,26 @@ TEST_F(KFPackBufferTest, selectPack) { for (unsigned int ip2=0;ip2<p2.size();++ip2) { - kfpackbuffer.add(f10, p1[ip1]); - kfpackbuffer.add(f20, p2[ip2]); + pack_kf_buffer.add(f10, p1[ip1]); + pack_kf_buffer.add(f20, p2[ip2]); for (unsigned int iq=0;iq<q.size();++iq) { - KFPackPtr packQ = kfpackbuffer.selectPack(16, q[iq]); + PackKeyFramePtr packQ = pack_kf_buffer.selectPack(16, q[iq]); if (packQ!=nullptr) ASSERT_EQ(packQ->key_frame->getTimeStamp(),res(ip1*6+ip2*3+iq)); } - kfpackbuffer.clear(); + pack_kf_buffer.clear(); } } } -TEST_F(KFPackBufferTest, selectPackBefore) +TEST_F(BufferPackKeyFrameTest, selectPackBefore) { - kfpackbuffer.clear(); + pack_kf_buffer.clear(); - kfpackbuffer.add(f10, tt10); - kfpackbuffer.add(f20, tt20); - kfpackbuffer.add(f21, tt21); + pack_kf_buffer.add(f10, tt10); + pack_kf_buffer.add(f20, tt20); + pack_kf_buffer.add(f21, tt21); // input time stamps std::vector<TimeStamp> q_ts = {9.5, 9.995, 10.005, 19.5, 20.5, 21.5}; @@ -190,50 +190,50 @@ TEST_F(KFPackBufferTest, selectPackBefore) for (int i=0; i<3; i++) { - KFPackPtr packQ; + PackKeyFramePtr packQ; int j = 0; for (auto ts : q_ts) { - packQ = kfpackbuffer.selectPackBefore(ts, tt); + packQ = pack_kf_buffer.selectPackBefore(ts, tt); if (packQ) res(i,j) = packQ->key_frame->getTimeStamp().get(); j++; } - kfpackbuffer.removeUpTo(packQ->key_frame->getTimeStamp()); + pack_kf_buffer.removeUpTo(packQ->key_frame->getTimeStamp()); } ASSERT_MATRIX_APPROX(res, truth, 1e-6); } -TEST_F(KFPackBufferTest, removeUpTo) +TEST_F(BufferPackKeyFrameTest, removeUpTo) { // Small time tolerance for all test asserts Scalar tt = 0.1; - kfpackbuffer.clear(); - kfpackbuffer.add(f10, tt10); - kfpackbuffer.add(f20, tt20); - kfpackbuffer.add(f21, tt21); + pack_kf_buffer.clear(); + pack_kf_buffer.add(f10, tt10); + pack_kf_buffer.add(f20, tt20); + pack_kf_buffer.add(f21, tt21); // it should remove f20 and f10, thus size should be 1 after removal // Specifically, only f21 should remain - KFPackPtr pack20 = std::make_shared<KFPack>(f20,tt20); - kfpackbuffer.removeUpTo( pack20->key_frame->getTimeStamp() ); - ASSERT_EQ(kfpackbuffer.size(), (unsigned int) 1); - ASSERT_TRUE(kfpackbuffer.selectPack(f10->getTimeStamp(),tt)==nullptr); - ASSERT_TRUE(kfpackbuffer.selectPack(f20->getTimeStamp(),tt)==nullptr); - ASSERT_TRUE(kfpackbuffer.selectPack(f21->getTimeStamp(),tt)!=nullptr); + PackKeyFramePtr pack20 = std::make_shared<PackKeyFrame>(f20,tt20); + pack_kf_buffer.removeUpTo( pack20->key_frame->getTimeStamp() ); + ASSERT_EQ(pack_kf_buffer.size(), (unsigned int) 1); + ASSERT_TRUE(pack_kf_buffer.selectPack(f10->getTimeStamp(),tt)==nullptr); + ASSERT_TRUE(pack_kf_buffer.selectPack(f20->getTimeStamp(),tt)==nullptr); + ASSERT_TRUE(pack_kf_buffer.selectPack(f21->getTimeStamp(),tt)!=nullptr); // Chech removal of an imprecise time stamp // Specifically, only f28 should remain - kfpackbuffer.add(f28, tt28); - ASSERT_EQ(kfpackbuffer.size(), (unsigned int) 2); + pack_kf_buffer.add(f28, tt28); + ASSERT_EQ(pack_kf_buffer.size(), (unsigned int) 2); FrameBasePtr f22 = std::make_shared<FrameBase>(TimeStamp(22),nullptr,nullptr,nullptr); - KFPackPtr pack22 = std::make_shared<KFPack>(f22,5); - kfpackbuffer.removeUpTo( pack22->key_frame->getTimeStamp() ); - ASSERT_EQ(kfpackbuffer.size(), (unsigned int) 1); - ASSERT_TRUE(kfpackbuffer.selectPack(f21->getTimeStamp(),tt)==nullptr); - ASSERT_TRUE(kfpackbuffer.selectPack(f28->getTimeStamp(),tt)!=nullptr); + PackKeyFramePtr pack22 = std::make_shared<PackKeyFrame>(f22,5); + pack_kf_buffer.removeUpTo( pack22->key_frame->getTimeStamp() ); + ASSERT_EQ(pack_kf_buffer.size(), (unsigned int) 1); + ASSERT_TRUE(pack_kf_buffer.selectPack(f21->getTimeStamp(),tt)==nullptr); + ASSERT_TRUE(pack_kf_buffer.selectPack(f28->getTimeStamp(),tt)!=nullptr); } int main(int argc, char **argv)