diff --git a/hello_wolf/processor_range_bearing.h b/hello_wolf/processor_range_bearing.h index 65e87f56e76718036e44d73031329e98c361afe4..4df0ebf96b97a28d4feb0f387cbe08de4814e2cb 100644 --- a/hello_wolf/processor_range_bearing.h +++ b/hello_wolf/processor_range_bearing.h @@ -56,9 +56,9 @@ class ProcessorRangeBearing : public ProcessorBase // Implementation of pure virtuals from ProcessorBase virtual void processCapture (CaptureBasePtr _capture) override; virtual void processKeyFrame (FrameBasePtr _keyframe_ptr, const Scalar& _time_tol_other) override {}; - virtual bool triggerInCapture (CaptureBasePtr) override { return true;}; - virtual bool triggerInKeyFrame (FrameBasePtr _keyframe_ptr, const Scalar& _time_tol_other) override {return false;} - virtual bool voteForKeyFrame () override {return false;} + virtual bool triggerInCapture (CaptureBasePtr) const override { return true;}; + virtual bool triggerInKeyFrame (FrameBasePtr _keyframe_ptr, const Scalar& _time_tol_other) const override {return false;} + virtual bool voteForKeyFrame () const override {return false;} private: // control variables diff --git a/include/core/feature/feature_base.h b/include/core/feature/feature_base.h index 83ec82f21b55bf6991dd7c3a9f0e91b43d10e520..8d4f838d2fade0527e8dde60f82885ca70b419fa 100644 --- a/include/core/feature/feature_base.h +++ b/include/core/feature/feature_base.h @@ -61,9 +61,9 @@ class FeatureBase : public NodeBase, public std::enable_shared_from_this<Feature // properties unsigned int id() const; - unsigned int trackId(){return track_id_;} + unsigned int trackId() const {return track_id_;} void setTrackId(unsigned int _tr_id){track_id_ = _tr_id;} - unsigned int landmarkId(){return landmark_id_;} + unsigned int landmarkId() const {return landmark_id_;} void setLandmarkId(unsigned int _lmk_id){landmark_id_ = _lmk_id;} // values @@ -94,7 +94,7 @@ class FeatureBase : public NodeBase, public std::enable_shared_from_this<Feature const FactorBasePtrList& getConstrainedByList() const; // all factors - void getFactorList(FactorBasePtrList & _fac_list); + void getFactorList(FactorBasePtrList & _fac_list) const; void link(CaptureBasePtr cap_ptr); template<typename classType, typename... T> diff --git a/include/core/frame/frame_base.h b/include/core/frame/frame_base.h index 2ee09400160a1001190a14aa4bc23812d373fe1c..aed6ff774ed52c5d0d4023188515823feca7ffab 100644 --- a/include/core/frame/frame_base.h +++ b/include/core/frame/frame_base.h @@ -137,14 +137,14 @@ class FrameBase : public NodeBase, public std::enable_shared_from_this<FrameBase FrameBasePtr getNextFrame() const; const CaptureBasePtrList& getCaptureList() const; - CaptureBasePtr getCaptureOf(const SensorBasePtr _sensor_ptr); - CaptureBasePtr getCaptureOf(const SensorBasePtr _sensor_ptr, const std::string& type); - CaptureBasePtrList getCapturesOf(const SensorBasePtr _sensor_ptr); + CaptureBasePtr getCaptureOf(const SensorBaseConstPtr _sensor_ptr) const; + CaptureBasePtr getCaptureOf(const SensorBasePtr _sensor_ptr, const std::string& type) const; + CaptureBasePtrList getCapturesOf(const SensorBasePtr _sensor_ptr) const; FactorBasePtr getFactorOf(const ProcessorBasePtr _processor_ptr) const; FactorBasePtr getFactorOf(const ProcessorBasePtr _processor_ptr, const std::string& type) const; - void getFactorList(FactorBasePtrList& _fac_list); + void getFactorList(FactorBasePtrList& _fac_list) const; unsigned int getHits() const; const FactorBasePtrList& getConstrainedByList() const; void link(TrajectoryBasePtr); diff --git a/include/core/problem/problem.h b/include/core/problem/problem.h index aae0dfb0cda3fc03d13b13b5f6c50cc460301a3c..a7432b15148d942630fa470ea79331d0ca074059 100644 --- a/include/core/problem/problem.h +++ b/include/core/problem/problem.h @@ -234,7 +234,7 @@ class Problem : public std::enable_shared_from_this<Problem> * - This decision is made at problem level, not at processor configuration level. * - Therefore, if you want to permanently configure a processor for not creating key frames, see Processor::voting_active_ and its accessors. */ - bool permitKeyFrame(ProcessorBasePtr _processor_ptr); + bool permitKeyFrame(ProcessorBasePtr _processor_ptr) const; /** \brief New key frame callback * @@ -250,7 +250,7 @@ class Problem : public std::enable_shared_from_this<Problem> * - This decision is made at problem level, not at processor configuration level. * - Therefore, if you want to permanently configure a processor for not creating estimated frames, see Processor::voting_active_ and its accessors. */ - bool permitAuxFrame(ProcessorBasePtr _processor_ptr); + bool permitAuxFrame(ProcessorBasePtr _processor_ptr) const; /** \brief New auxiliary frame callback * diff --git a/include/core/processor/processor_base.h b/include/core/processor/processor_base.h index c416ed976e01b3d072c5520a2c31a4e76b7f291b..e9290f5ca9674cfe8eab8df5bad4defadd406247 100644 --- a/include/core/processor/processor_base.h +++ b/include/core/processor/processor_base.h @@ -274,13 +274,13 @@ class ProcessorBase : public NodeBase, public std::enable_shared_from_this<Proce * * Returns true if processCapture() should be called after the provided capture arrived. */ - virtual bool triggerInCapture(CaptureBasePtr) = 0; + virtual bool triggerInCapture(CaptureBasePtr) const = 0; /** \brief trigger in key-frame * * Returns true if processKeyFrame() should be called after the provided KF arrived. */ - virtual bool triggerInKeyFrame(FrameBasePtr _keyframe_ptr, const Scalar& _time_tolerance) = 0; + virtual bool triggerInKeyFrame(FrameBasePtr _keyframe_ptr, const Scalar& _time_tolerance) const = 0; /** \brief Vote for KeyFrame generation * @@ -289,7 +289,7 @@ class ProcessorBase : public NodeBase, public std::enable_shared_from_this<Proce * * WARNING! This function only votes! It does not create KeyFrames! */ - virtual bool voteForKeyFrame() = 0; + virtual bool voteForKeyFrame() const = 0; /** \brief Vote for Auxiliary Frame generation * @@ -298,7 +298,7 @@ class ProcessorBase : public NodeBase, public std::enable_shared_from_this<Proce * * WARNING! This function only votes! It does not create Auxiliary Frames! */ - virtual bool voteForAuxFrame(){return false;}; + virtual bool voteForAuxFrame() const {return false;}; virtual bool permittedKeyFrame() final; @@ -318,7 +318,6 @@ class ProcessorBase : public NodeBase, public std::enable_shared_from_this<Proce */ void captureCallback(CaptureBasePtr _capture_ptr); -// SensorBasePtr getSensor(); SensorBasePtr getSensor() const; private: void setSensor(SensorBasePtr _sen_ptr){sensor_ptr_ = _sen_ptr;} @@ -370,11 +369,6 @@ inline unsigned int ProcessorBase::id() const return processor_id_; } -//inline SensorBasePtr ProcessorBase::getSensor() -//{ -// return sensor_ptr_.lock(); -//} - inline SensorBasePtr ProcessorBase::getSensor() const { return sensor_ptr_.lock(); diff --git a/include/core/processor/processor_diff_drive.h b/include/core/processor/processor_diff_drive.h index 6c8bf6a34605dd5da4c9d4766f619b3c7cbc6941..105ad861187988621cecc7af257950a14acec2c7 100644 --- a/include/core/processor/processor_diff_drive.h +++ b/include/core/processor/processor_diff_drive.h @@ -48,7 +48,7 @@ class ProcessorDiffDrive : public ProcessorOdom2D const Scalar _dt, Eigen::VectorXs& _delta, Eigen::MatrixXs& _delta_cov, - Eigen::MatrixXs& _jacobian_calib) override; + Eigen::MatrixXs& _jacobian_calib) const override; virtual CaptureMotionPtr emplaceCapture(const FrameBasePtr& _frame_own, const SensorBasePtr& _sensor, const TimeStamp& _ts, diff --git a/include/core/processor/processor_loopclosure.h b/include/core/processor/processor_loopclosure.h index 459b8f3d9a123960be1d7b99b3ca322317726bb7..7f3bfa875ff15d870aa6a5793eb62b241308c43a 100644 --- a/include/core/processor/processor_loopclosure.h +++ b/include/core/processor/processor_loopclosure.h @@ -73,13 +73,13 @@ protected: * * The ProcessorLoopClosure only processes incoming KF, then it returns false. */ - virtual bool triggerInCapture(CaptureBasePtr) override {return false;} + virtual bool triggerInCapture(CaptureBasePtr) const override {return false;} /** \brief trigger in key-frame * * Returns true if processKeyFrame() should be called after the provided KF arrived. */ - virtual bool triggerInKeyFrame(FrameBasePtr _keyframe_ptr, const Scalar& _time_tol_other) override; + virtual bool triggerInKeyFrame(FrameBasePtr _keyframe_ptr, const Scalar& _time_tol_other) const override; /** \brief Called by process(). Tells if computeFeatures() will be called */ @@ -160,7 +160,7 @@ protected: * * WARNING! This function only votes! It does not create KeyFrames! */ - virtual bool voteForKeyFrame() override + virtual bool voteForKeyFrame() const override { return false; }; diff --git a/include/core/processor/processor_motion.h b/include/core/processor/processor_motion.h index d8a1361ac8e4f3590c7b569f3de18e6a114fb742..eee6c0e1c41289c54d7a3b81b08fdfb07de7bad4 100644 --- a/include/core/processor/processor_motion.h +++ b/include/core/processor/processor_motion.h @@ -164,13 +164,13 @@ class ProcessorMotion : public ProcessorBase /** \brief Fill a reference to the state integrated so far * \param _x the returned state vector */ - void getCurrentState(Eigen::VectorXs& _x); + void getCurrentState(Eigen::VectorXs& _x) const; void getCurrentTimeStamp(TimeStamp& _ts) const { _ts = getBuffer().get().back().ts_; } /** \brief Get the state integrated so far * \return the state vector */ - Eigen::VectorXs getCurrentState(); + Eigen::VectorXs getCurrentState() const; TimeStamp getCurrentTimeStamp() const; /** \brief Fill the state corresponding to the provided time-stamp @@ -178,13 +178,13 @@ class ProcessorMotion : public ProcessorBase * \param _x the returned state * \return if state in the provided time-stamp could be resolved */ - bool getState(const TimeStamp& _ts, Eigen::VectorXs& _x); + bool getState(const TimeStamp& _ts, Eigen::VectorXs& _x) const; /** \brief Get the state corresponding to the provided time-stamp * \param _ts the time stamp * \return the state vector */ - Eigen::VectorXs getState(const TimeStamp& _ts); + Eigen::VectorXs getState(const TimeStamp& _ts) const; /** \brief Gets the delta preintegrated covariance from all integrations so far * \return the delta preintegrated covariance matrix @@ -241,15 +241,15 @@ class ProcessorMotion : public ProcessorBase * * Returns true if processCapture() should be called after the provided capture arrived. */ - virtual bool triggerInCapture(CaptureBasePtr) override {return true;} + virtual bool triggerInCapture(CaptureBasePtr) const override {return true;} /** \brief trigger in key-frame * * The ProcessorMotion only processes incoming captures, then it returns false. */ - virtual bool triggerInKeyFrame(FrameBasePtr _keyframe_ptr, const Scalar& _time_tol_other) override {return false;} + virtual bool triggerInKeyFrame(FrameBasePtr _keyframe_ptr, const Scalar& _time_tol_other) const override {return false;} - virtual bool voteForKeyFrame() override; + virtual bool voteForKeyFrame() const override; Scalar updateDt(); void integrateOneStep(); @@ -347,7 +347,7 @@ class ProcessorMotion : public ProcessorBase const Scalar _dt, Eigen::VectorXs& _delta, Eigen::MatrixXs& _delta_cov, - Eigen::MatrixXs& _jacobian_calib) = 0; + Eigen::MatrixXs& _jacobian_calib) const = 0; /** \brief composes a delta-state on top of another delta-state * \param _delta1 the first delta-state @@ -360,7 +360,7 @@ class ProcessorMotion : public ProcessorBase virtual void deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen::VectorXs& _delta2, const Scalar _dt2, - Eigen::VectorXs& _delta1_plus_delta2) = 0; + Eigen::VectorXs& _delta1_plus_delta2) const = 0; /** \brief composes a delta-state on top of another delta-state, and computes the Jacobians * \param _delta1 the first delta-state @@ -377,7 +377,7 @@ class ProcessorMotion : public ProcessorBase const Scalar _dt2, Eigen::VectorXs& _delta1_plus_delta2, Eigen::MatrixXs& _jacobian1, - Eigen::MatrixXs& _jacobian2) = 0; + Eigen::MatrixXs& _jacobian2) const = 0; /** \brief composes a delta-state on top of a state * \param _x the initial state @@ -390,7 +390,7 @@ class ProcessorMotion : public ProcessorBase virtual void statePlusDelta(const Eigen::VectorXs& _x, const Eigen::VectorXs& _delta, const Scalar _dt, - Eigen::VectorXs& _x_plus_delta) = 0; + Eigen::VectorXs& _x_plus_delta) const = 0; /** \brief Delta zero * \return a delta state equivalent to the null motion. @@ -431,9 +431,9 @@ class ProcessorMotion : public ProcessorBase */ virtual FactorBasePtr emplaceFactor(FeatureBasePtr _feature_motion, CaptureBasePtr _capture_origin) = 0; - Motion motionZero(const TimeStamp& _ts); + Motion motionZero(const TimeStamp& _ts) const; - bool hasCalibration() {return calib_size_ > 0;} + bool hasCalibration() const {return calib_size_ > 0;} public: //getters @@ -489,12 +489,12 @@ inline void ProcessorMotion::resetDerived() // Blank function, to be implemented in derived classes } -inline bool ProcessorMotion::voteForKeyFrame() +inline bool ProcessorMotion::voteForKeyFrame() const { return false; } -inline Eigen::VectorXs ProcessorMotion::getState(const TimeStamp& _ts) +inline Eigen::VectorXs ProcessorMotion::getState(const TimeStamp& _ts) const { Eigen::VectorXs x(getProblem()->getFrameStructureSize()); getState(_ts, x); @@ -506,14 +506,14 @@ inline TimeStamp ProcessorMotion::getCurrentTimeStamp() const return getBuffer().get().back().ts_; } -inline Eigen::VectorXs ProcessorMotion::getCurrentState() +inline Eigen::VectorXs ProcessorMotion::getCurrentState() const { Eigen::VectorXs x(getProblem()->getFrameStructureSize()); getCurrentState(x); return x; } -inline void ProcessorMotion::getCurrentState(Eigen::VectorXs& _x) +inline void ProcessorMotion::getCurrentState(Eigen::VectorXs& _x) const { // ensure integrity assert(origin_ptr_ && "Trying to access origin_ptr_ but it is nullptr!"); @@ -564,7 +564,7 @@ inline MotionBuffer& ProcessorMotion::getBuffer() return last_ptr_->getBuffer(); } -inline Motion ProcessorMotion::motionZero(const TimeStamp& _ts) +inline Motion ProcessorMotion::motionZero(const TimeStamp& _ts) const { return Motion(_ts, VectorXs::Zero(data_size_), // data diff --git a/include/core/processor/processor_odom_2D.h b/include/core/processor/processor_odom_2D.h index a4f6e3358fc0f71745a3df1ce15cf48cc880a7f6..3de67b9a26f89976b6ef109c880516add6af27f5 100644 --- a/include/core/processor/processor_odom_2D.h +++ b/include/core/processor/processor_odom_2D.h @@ -47,7 +47,7 @@ class ProcessorOdom2D : public ProcessorMotion // Factory method for high level API WOLF_PROCESSOR_CREATE(ProcessorOdom2D, ProcessorParamsOdom2D); - virtual bool voteForKeyFrame() override; + virtual bool voteForKeyFrame() const override; protected: virtual void computeCurrentDelta(const Eigen::VectorXs& _data, @@ -56,21 +56,21 @@ class ProcessorOdom2D : public ProcessorMotion const Scalar _dt, Eigen::VectorXs& _delta, Eigen::MatrixXs& _delta_cov, - Eigen::MatrixXs& _jacobian_calib) override; + Eigen::MatrixXs& _jacobian_calib) const override; virtual void deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen::VectorXs& _delta2, const Scalar _Dt2, - Eigen::VectorXs& _delta1_plus_delta2) override; + Eigen::VectorXs& _delta1_plus_delta2) const override; virtual void deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen::VectorXs& _delta2, const Scalar _Dt2, Eigen::VectorXs& _delta1_plus_delta2, Eigen::MatrixXs& _jacobian1, - Eigen::MatrixXs& _jacobian2) override; + Eigen::MatrixXs& _jacobian2) const override; virtual void statePlusDelta(const Eigen::VectorXs& _x, const Eigen::VectorXs& _delta, const Scalar _Dt, - Eigen::VectorXs& _x_plus_delta) override; + Eigen::VectorXs& _x_plus_delta) const override; virtual Eigen::VectorXs deltaZero() const override; virtual CaptureMotionPtr emplaceCapture(const FrameBasePtr& _frame_own, diff --git a/include/core/processor/processor_odom_3D.h b/include/core/processor/processor_odom_3D.h index 22f4903c209d11bf31f0e08f302c0ce7a6d8d77f..f9c0906865741bc72912af136ae68121e075707c 100644 --- a/include/core/processor/processor_odom_3D.h +++ b/include/core/processor/processor_odom_3D.h @@ -75,23 +75,23 @@ class ProcessorOdom3D : public ProcessorMotion const Scalar _dt, Eigen::VectorXs& _delta, Eigen::MatrixXs& _delta_cov, - Eigen::MatrixXs& _jacobian_calib) override; + Eigen::MatrixXs& _jacobian_calib) const override; void deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen::VectorXs& _delta2, const Scalar _Dt2, - Eigen::VectorXs& _delta1_plus_delta2) override; + Eigen::VectorXs& _delta1_plus_delta2) const override; void deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen::VectorXs& _delta2, const Scalar _Dt2, Eigen::VectorXs& _delta1_plus_delta2, Eigen::MatrixXs& _jacobian1, - Eigen::MatrixXs& _jacobian2) override; + Eigen::MatrixXs& _jacobian2) const override; void statePlusDelta(const Eigen::VectorXs& _x, const Eigen::VectorXs& _delta, const Scalar _Dt, - Eigen::VectorXs& _x_plus_delta) override; + Eigen::VectorXs& _x_plus_delta) const override; Eigen::VectorXs deltaZero() const override; - bool voteForKeyFrame() override; + bool voteForKeyFrame() const override; virtual CaptureMotionPtr emplaceCapture(const FrameBasePtr& _frame_own, const SensorBasePtr& _sensor, const TimeStamp& _ts, @@ -116,13 +116,6 @@ class ProcessorOdom3D : public ProcessorMotion Scalar min_disp_var_; // floor displacement variance when no motion Scalar min_rot_var_; // floor orientation variance when no motion - // Eigen::Map helpers - Eigen::Map<const Eigen::Vector3s> p1_, p2_; - Eigen::Map<Eigen::Vector3s> p_out_; - Eigen::Map<const Eigen::Quaternions> q1_, q2_; - Eigen::Map<Eigen::Quaternions> q_out_; - void remap(const Eigen::VectorXs& _x1, const Eigen::VectorXs& _x2, Eigen::VectorXs& _x_out); - }; inline Eigen::VectorXs ProcessorOdom3D::deltaZero() const diff --git a/include/core/processor/processor_tracker.h b/include/core/processor/processor_tracker.h index 280252a64942995f964e5bc87ec4248da774434d..e275246714cc3b4f73be3dd8548b37bc4b99177c 100644 --- a/include/core/processor/processor_tracker.h +++ b/include/core/processor/processor_tracker.h @@ -139,13 +139,13 @@ class ProcessorTracker : public ProcessorBase * * Returns true if processCapture() should be called after the provided capture arrived. */ - virtual bool triggerInCapture(CaptureBasePtr) override; + virtual bool triggerInCapture(CaptureBasePtr) const override; /** \brief trigger in key-frame * * The ProcessorTracker only processes incoming captures, then it returns false. */ - virtual bool triggerInKeyFrame(FrameBasePtr _keyframe_ptr, const Scalar& _time_tolerance) override {return false;} + virtual bool triggerInKeyFrame(FrameBasePtr _keyframe_ptr, const Scalar& _time_tolerance) const override {return false;} /** Pre-process incoming Capture * @@ -203,7 +203,7 @@ class ProcessorTracker : public ProcessorBase * * WARNING! This function only votes! It does not create KeyFrames! */ - virtual bool voteForKeyFrame() override = 0; + virtual bool voteForKeyFrame() const override = 0; /** \brief Advance the incoming Capture to become the last. * diff --git a/include/core/processor/processor_tracker_feature.h b/include/core/processor/processor_tracker_feature.h index a808a421da22a74ad417b6cdc38024f308ff59bf..32da47d13e3fc0393fb7b8b95098d4f6db0751f0 100644 --- a/include/core/processor/processor_tracker_feature.h +++ b/include/core/processor/processor_tracker_feature.h @@ -147,7 +147,7 @@ class ProcessorTrackerFeature : public ProcessorTracker * * WARNING! This function only votes! It does not create KeyFrames! */ - virtual bool voteForKeyFrame() = 0; + virtual bool voteForKeyFrame() const = 0; // We overload the advance and reset functions to update the lists of matches void advanceDerived(); diff --git a/include/core/processor/processor_tracker_landmark.h b/include/core/processor/processor_tracker_landmark.h index c11adecc7b16a9c0c2d367200af6ee9a55d46c64..8809426f8654803fc7012068ff9d89cd1d70ea4c 100644 --- a/include/core/processor/processor_tracker_landmark.h +++ b/include/core/processor/processor_tracker_landmark.h @@ -129,7 +129,7 @@ class ProcessorTrackerLandmark : public ProcessorTracker * * WARNING! This function only votes! It does not create KeyFrames! */ - virtual bool voteForKeyFrame() = 0; + virtual bool voteForKeyFrame() const = 0; // We overload the advance and reset functions to update the lists of matches void advanceDerived(); diff --git a/include/core/processor/track_matrix.h b/include/core/processor/track_matrix.h index 2615ad411adbe9c32efea2bf543cb24657e5ed97..1d8bfb343d851a7c5890a8442d844d3bc7b44e9e 100644 --- a/include/core/processor/track_matrix.h +++ b/include/core/processor/track_matrix.h @@ -84,23 +84,23 @@ class TrackMatrix void remove (FeatureBasePtr _ftr); void remove (const SizeStd& _track_id); void remove (CaptureBasePtr _cap); - SizeStd numTracks (); - SizeStd trackSize (const SizeStd& _track_id); - Track track (const SizeStd& _track_id); - Snapshot snapshot (CaptureBasePtr _capture); + SizeStd numTracks () const; + SizeStd trackSize (const SizeStd& _track_id) const; + Track track (const SizeStd& _track_id) const; + Snapshot snapshot (CaptureBasePtr _capture) const; vector<FeatureBasePtr> - trackAsVector(const SizeStd& _track_id); + trackAsVector(const SizeStd& _track_id) const; list<FeatureBasePtr> - snapshotAsList(CaptureBasePtr _cap); - TrackMatches matches (CaptureBasePtr _cap_1, CaptureBasePtr _cap_2); - FeatureBasePtr firstFeature(const SizeStd& _track_id); - FeatureBasePtr lastFeature (const SizeStd& _track_id); - FeatureBasePtr feature (const SizeStd& _track_id, CaptureBasePtr _cap); - CaptureBasePtr firstCapture(const SizeStd& _track_id); + snapshotAsList(CaptureBasePtr _cap) const; + TrackMatches matches (CaptureBasePtr _cap_1, CaptureBasePtr _cap_2) const; + FeatureBasePtr firstFeature(const SizeStd& _track_id) const; + FeatureBasePtr lastFeature (const SizeStd& _track_id) const; + FeatureBasePtr feature (const SizeStd& _track_id, CaptureBasePtr _cap) const; + CaptureBasePtr firstCapture(const SizeStd& _track_id) const; // tracks across captures that belong to keyframe // SizeStd numKeyframeTracks(); - Track trackAtKeyframes(size_t _track_id); + Track trackAtKeyframes(size_t _track_id) const; // bool markKeyframe(CaptureBasePtr _capture); // bool unmarkKeyframe(CaptureBasePtr _capture); diff --git a/include/core/sensor/sensor_base.h b/include/core/sensor/sensor_base.h index 012fd71348ae2e3946330486fc856bbb7853726b..9e39b4c290b6c4d0bf9461bf34cd0a7b723a6452 100644 --- a/include/core/sensor/sensor_base.h +++ b/include/core/sensor/sensor_base.h @@ -160,8 +160,8 @@ class SensorBase : public NodeBase, public std::enable_shared_from_this<SensorBa public: const ProcessorBasePtrList& getProcessorList() const; - CaptureBasePtr lastKeyCapture(void); - CaptureBasePtr lastCapture(const TimeStamp& _ts); + CaptureBasePtr lastKeyCapture(void) const; + CaptureBasePtr lastCapture(const TimeStamp& _ts) const; bool process(const CaptureBasePtr capture_ptr); @@ -169,22 +169,22 @@ class SensorBase : public NodeBase, public std::enable_shared_from_this<SensorBa const std::vector<StateBlockPtr>& getStateBlockVec() const; std::vector<StateBlockPtr>& getStateBlockVec(); StateBlockPtr getStateBlockPtrStatic(unsigned int _i) const; - StateBlockPtr getStateBlock(unsigned int _i); - StateBlockPtr getStateBlock(unsigned int _i, const TimeStamp& _ts); + StateBlockPtr getStateBlock(unsigned int _i) const; + StateBlockPtr getStateBlock(unsigned int _i, const TimeStamp& _ts) const; void setStateBlockPtrStatic(unsigned int _i, const StateBlockPtr _sb_ptr); void resizeStateBlockVec(unsigned int _size); - bool isStateBlockDynamic(unsigned int _i, const TimeStamp& _ts, CaptureBasePtr& cap); - bool isStateBlockDynamic(unsigned int _i, CaptureBasePtr& cap); - bool isStateBlockDynamic(unsigned int _i, const TimeStamp& _ts); - bool isStateBlockDynamic(unsigned int _i); - - StateBlockPtr getP(const TimeStamp _ts); - StateBlockPtr getO(const TimeStamp _ts); - StateBlockPtr getIntrinsic(const TimeStamp _ts); - StateBlockPtr getP() ; - StateBlockPtr getO(); - StateBlockPtr getIntrinsic(); + bool isStateBlockDynamic(unsigned int _i, const TimeStamp& _ts, CaptureBasePtr& cap) const; + bool isStateBlockDynamic(unsigned int _i, CaptureBasePtr& cap) const; + bool isStateBlockDynamic(unsigned int _i, const TimeStamp& _ts) const; + bool isStateBlockDynamic(unsigned int _i) const; + + StateBlockPtr getP(const TimeStamp _ts) const; + StateBlockPtr getO(const TimeStamp _ts) const; + StateBlockPtr getIntrinsic(const TimeStamp _ts) const; + StateBlockPtr getP() const; + StateBlockPtr getO() const; + StateBlockPtr getIntrinsic() const; void setP(const StateBlockPtr _p_ptr); void setO(const StateBlockPtr _o_ptr); void setIntrinsic(const StateBlockPtr _intr_ptr); diff --git a/include/core/trajectory/trajectory_base.h b/include/core/trajectory/trajectory_base.h index 0645be841b4dd9c68cc2a6f557146101f199b26e..60f81c58afcb881fe8be35aae225c2ee55ac2c69 100644 --- a/include/core/trajectory/trajectory_base.h +++ b/include/core/trajectory/trajectory_base.h @@ -53,7 +53,7 @@ class TrajectoryBase : public NodeBase, public std::enable_shared_from_this<Traj public: // factors - void getFactorList(FactorBasePtrList & _fac_list); + void getFactorList(FactorBasePtrList & _fac_list) const; protected: FrameBaseConstIter computeFrameOrder(FrameBasePtr _frame_ptr); diff --git a/src/feature/feature_base.cpp b/src/feature/feature_base.cpp index 97ef674f4f6cbd73a9cfb9b3e38b5e74c9344739..2f6ceb15bdd8a478a8cff81ef1fb9ace00db3e0f 100644 --- a/src/feature/feature_base.cpp +++ b/src/feature/feature_base.cpp @@ -96,7 +96,7 @@ const FactorBasePtrList& FeatureBase::getFactorList() const return factor_list_; } -void FeatureBase::getFactorList(FactorBasePtrList & _fac_list) +void FeatureBase::getFactorList(FactorBasePtrList & _fac_list) const { _fac_list.insert(_fac_list.end(), factor_list_.begin(), factor_list_.end()); } diff --git a/src/frame/frame_base.cpp b/src/frame/frame_base.cpp index 633d579eb3f26bfa2305d93e583e71cfd3c7422b..d4202bc490276d0bc8fc858ca6ec54645948619b 100644 --- a/src/frame/frame_base.cpp +++ b/src/frame/frame_base.cpp @@ -344,7 +344,7 @@ void FrameBase::removeCapture(CaptureBasePtr _capt_ptr) capture_list_.remove(_capt_ptr); } -CaptureBasePtr FrameBase::getCaptureOf(const SensorBasePtr _sensor_ptr, const std::string& type) +CaptureBasePtr FrameBase::getCaptureOf(const SensorBasePtr _sensor_ptr, const std::string& type) const { for (CaptureBasePtr capture_ptr : getCaptureList()) if (capture_ptr->getSensor() == _sensor_ptr && capture_ptr->getType() == type) @@ -352,7 +352,7 @@ CaptureBasePtr FrameBase::getCaptureOf(const SensorBasePtr _sensor_ptr, const st return nullptr; } -CaptureBasePtr FrameBase::getCaptureOf(const SensorBasePtr _sensor_ptr) +CaptureBasePtr FrameBase::getCaptureOf(const SensorBaseConstPtr _sensor_ptr) const { for (CaptureBasePtr capture_ptr : getCaptureList()) if (capture_ptr->getSensor() == _sensor_ptr) @@ -360,7 +360,7 @@ CaptureBasePtr FrameBase::getCaptureOf(const SensorBasePtr _sensor_ptr) return nullptr; } -CaptureBasePtrList FrameBase::getCapturesOf(const SensorBasePtr _sensor_ptr) +CaptureBasePtrList FrameBase::getCapturesOf(const SensorBasePtr _sensor_ptr) const { CaptureBasePtrList captures; for (CaptureBasePtr capture_ptr : getCaptureList()) @@ -385,7 +385,7 @@ FactorBasePtr FrameBase::getFactorOf(const ProcessorBasePtr _processor_ptr) cons return nullptr; } -void FrameBase::getFactorList(FactorBasePtrList& _fac_list) +void FrameBase::getFactorList(FactorBasePtrList& _fac_list) const { for (auto c_ptr : getCaptureList()) c_ptr->getFactorList(_fac_list); diff --git a/src/problem/problem.cpp b/src/problem/problem.cpp index 49a9fab6bf8450592dd78e8b6ac69fd4bfe7a0a3..c4b9677728e442846d422071719e4ec22b3c37d7 100644 --- a/src/problem/problem.cpp +++ b/src/problem/problem.cpp @@ -404,7 +404,7 @@ Eigen::VectorXs Problem::zeroState() const return state; } -bool Problem::permitKeyFrame(ProcessorBasePtr _processor_ptr) +bool Problem::permitKeyFrame(ProcessorBasePtr _processor_ptr) const { // This should implement a black list of processors that have forbidden keyframe creation // This decision is made at problem level, not at processor configuration level. @@ -425,7 +425,7 @@ void Problem::keyFrameCallback(FrameBasePtr _keyframe_ptr, ProcessorBasePtr _pro processor->keyFrameCallback(_keyframe_ptr, _time_tolerance); } -bool Problem::permitAuxFrame(ProcessorBasePtr _processor_ptr) +bool Problem::permitAuxFrame(ProcessorBasePtr _processor_ptr) const { // This should implement a black list of processors that have forbidden auxiliary frame creation // This decision is made at problem level, not at processor configuration level. diff --git a/src/processor/processor_diff_drive.cpp b/src/processor/processor_diff_drive.cpp index d4605c6f0ab27ef247dd64885de922eece4b0fc6..79de4b220a5e3ea71233aed1a760936ba28f5042 100644 --- a/src/processor/processor_diff_drive.cpp +++ b/src/processor/processor_diff_drive.cpp @@ -51,7 +51,7 @@ void ProcessorDiffDrive::computeCurrentDelta(const Eigen::VectorXs& _data, const Scalar _dt, Eigen::VectorXs& _delta, Eigen::MatrixXs& _delta_cov, - Eigen::MatrixXs& _jacobian_calib) + Eigen::MatrixXs& _jacobian_calib) const { /* * Differential drive model ----------------------------------------------- diff --git a/src/processor/processor_loopclosure.cpp b/src/processor/processor_loopclosure.cpp index c447def54083db4688aec24215e3a3492aa948b0..49b90b0382cf9d4cefc069d7cde7426cdd0b60d4 100644 --- a/src/processor/processor_loopclosure.cpp +++ b/src/processor/processor_loopclosure.cpp @@ -71,7 +71,7 @@ void ProcessorLoopClosure::processKeyFrame(FrameBasePtr _keyframe_ptr, const Sca postProcess(); } -bool ProcessorLoopClosure::triggerInKeyFrame(FrameBasePtr _keyframe_ptr, const Scalar& _time_tol_other) +bool ProcessorLoopClosure::triggerInKeyFrame(FrameBasePtr _keyframe_ptr, const Scalar& _time_tol_other) const { return true; } diff --git a/src/processor/processor_motion.cpp b/src/processor/processor_motion.cpp index d54036d2d3a9b4a00c80daeceddb836920daed10..862929e78620bcae03b3deed36a64c9909dbf080 100644 --- a/src/processor/processor_motion.cpp +++ b/src/processor/processor_motion.cpp @@ -335,7 +335,7 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr) postProcess(); } -bool ProcessorMotion::getState(const TimeStamp& _ts, Eigen::VectorXs& _x) +bool ProcessorMotion::getState(const TimeStamp& _ts, Eigen::VectorXs& _x) const { CaptureMotionPtr capture_motion; if (origin_ptr_ && _ts >= origin_ptr_->getTimeStamp()) diff --git a/src/processor/processor_odom_2D.cpp b/src/processor/processor_odom_2D.cpp index 0f094674afb3c902dbb3bac9e983929a170f1839..bf825c29f5f994bb09bfbe839ef56c98d37905f4 100644 --- a/src/processor/processor_odom_2D.cpp +++ b/src/processor/processor_odom_2D.cpp @@ -15,7 +15,7 @@ ProcessorOdom2D::~ProcessorOdom2D() void ProcessorOdom2D::computeCurrentDelta(const Eigen::VectorXs& _data, const Eigen::MatrixXs& _data_cov, const Eigen::VectorXs& _calib, const Scalar _dt, Eigen::VectorXs& _delta, - Eigen::MatrixXs& _delta_cov, Eigen::MatrixXs& _jacobian_calib) + Eigen::MatrixXs& _delta_cov, Eigen::MatrixXs& _jacobian_calib) const { assert(_data.size() == data_size_ && "Wrong _data vector size"); assert(_data_cov.rows() == data_size_ && "Wrong _data_cov size"); @@ -44,7 +44,7 @@ void ProcessorOdom2D::computeCurrentDelta(const Eigen::VectorXs& _data, const Ei } void ProcessorOdom2D::deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen::VectorXs& _delta2, const Scalar _Dt2, - Eigen::VectorXs& _delta1_plus_delta2) + Eigen::VectorXs& _delta1_plus_delta2) const { assert(_delta1.size() == delta_size_ && "Wrong _delta1 vector size"); assert(_delta2.size() == delta_size_ && "Wrong _delta2 vector size"); @@ -57,7 +57,7 @@ void ProcessorOdom2D::deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen void ProcessorOdom2D::deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen::VectorXs& _delta2, const Scalar _Dt2, Eigen::VectorXs& _delta1_plus_delta2, Eigen::MatrixXs& _jacobian1, - Eigen::MatrixXs& _jacobian2) + Eigen::MatrixXs& _jacobian2) const { assert(_delta1.size() == delta_size_ && "Wrong _delta1 vector size"); assert(_delta2.size() == delta_size_ && "Wrong _delta2 vector size"); @@ -82,7 +82,7 @@ void ProcessorOdom2D::deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen } void ProcessorOdom2D::statePlusDelta(const Eigen::VectorXs& _x, const Eigen::VectorXs& _delta, const Scalar _Dt, - Eigen::VectorXs& _x_plus_delta) + Eigen::VectorXs& _x_plus_delta) const { assert(_x.size() == x_size_ && "Wrong _x vector size"); assert(_x_plus_delta.size() == x_size_ && "Wrong _x_plus_delta vector size"); @@ -92,7 +92,7 @@ void ProcessorOdom2D::statePlusDelta(const Eigen::VectorXs& _x, const Eigen::Vec _x_plus_delta(2) = pi2pi(_x(2) + _delta(2)); } -bool ProcessorOdom2D::voteForKeyFrame() +bool ProcessorOdom2D::voteForKeyFrame() const { // Distance criterion if (getBuffer().get().back().delta_integr_.head<2>().norm() > params_odom_2D_->dist_traveled) diff --git a/src/processor/processor_odom_3D.cpp b/src/processor/processor_odom_3D.cpp index c2821646896d2573f7bcaa1ed828f63c0d7813d2..180293e74f0c19689e7ca30919a4afb542ab8726 100644 --- a/src/processor/processor_odom_3D.cpp +++ b/src/processor/processor_odom_3D.cpp @@ -9,9 +9,7 @@ ProcessorOdom3D::ProcessorOdom3D(ProcessorParamsOdom3DPtr _params) : k_disp_to_rot_ (0), k_rot_to_rot_ (0), min_disp_var_ (0.1), // around 10cm error - min_rot_var_ (0.1), // around 6 degrees error - p1_(nullptr), p2_(nullptr), p_out_(nullptr), - q1_(nullptr), q2_(nullptr), q_out_(nullptr) + min_rot_var_ (0.1) // around 6 degrees error { // } @@ -40,18 +38,18 @@ void ProcessorOdom3D::computeCurrentDelta(const Eigen::VectorXs& _data, const Scalar _dt, Eigen::VectorXs& _delta, Eigen::MatrixXs& _delta_cov, - Eigen::MatrixXs& _jacobian_calib) + Eigen::MatrixXs& _jacobian_calib) const { assert((_data.size() == 6 || _data.size() == 7) && "Wrong data size. Must be 6 or 7 for 3D."); Scalar disp, rot; // displacement and rotation of this motion step if (_data.size() == (long int)6) { // rotation in vector form - _delta.head<3>() = _data.head<3>(); - new (&q_out_) Eigen::Map<Eigen::Quaternions>(_delta.data() + 3); - q_out_ = v2q(_data.tail<3>()); - disp = _data.head<3>().norm(); - rot = _data.tail<3>().norm(); + _delta.head<3>() = _data.head<3>(); + Eigen::Map<Eigen::Quaternions> q(_delta.data() + 3); + q = v2q(_data.tail<3>()); + disp = _data.head<3>().norm(); + rot = _data.tail<3>().norm(); } else { @@ -85,14 +83,21 @@ void ProcessorOdom3D::computeCurrentDelta(const Eigen::VectorXs& _data, void ProcessorOdom3D::deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen::VectorXs& _delta2, const Scalar _Dt2, Eigen::VectorXs& _delta1_plus_delta2, Eigen::MatrixXs& _jacobian1, - Eigen::MatrixXs& _jacobian2) + Eigen::MatrixXs& _jacobian2) const { assert(_delta1.size() == delta_size_ && "Wrong _delta1 vector size"); assert(_delta2.size() == delta_size_ && "Wrong _delta2 vector size"); assert(_delta1_plus_delta2.size() == delta_size_ && "Wrong _delta1_plus_delta2 vector size"); assert(_jacobian1.rows() == delta_cov_size_ && _jacobian1.cols() == delta_cov_size_ && "Wrong _jacobian1 size"); assert(_jacobian2.rows() == delta_cov_size_ && _jacobian2.cols() == delta_cov_size_ && "Wrong _jacobian2 size"); - remap(_delta1, _delta2, _delta1_plus_delta2); + + Eigen::Map<const Eigen::Vector3s> dp1 (_delta1.data() ); + Eigen::Map<const Eigen::Quaternions> dq1 (_delta1.data() + 3 ); + Eigen::Map<const Eigen::Vector3s> dp2 (_delta2.data() ); + Eigen::Map<const Eigen::Quaternions> dq2 (_delta2.data() + 3 ); + Eigen::Map<Eigen::Vector3s> dp_out (_delta1_plus_delta2.data() ); + Eigen::Map<Eigen::Quaternions> dq_out (_delta1_plus_delta2.data() + 3 ); + /* Jacobians of D' = D (+) d * with: D = [Dp Dq] * d = [dp dq] @@ -109,47 +114,63 @@ void ProcessorOdom3D::deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen */ // temporaries - Eigen::Matrix3s DR = q1_.matrix(); - Eigen::Matrix3s dR = q2_.matrix(); + Eigen::Matrix3s dR1 = dq1.matrix(); + Eigen::Matrix3s dR2 = dq2.matrix(); // fill Jacobians _jacobian1.setIdentity(); - _jacobian1.block<3, 3>(0, 3) = -DR * skew(p2_); // (Sola 16, ex. B.3.2 and Sec. 7.2.3) - _jacobian1.block<3, 3>(3, 3) = dR.transpose(); // (Sola 16, Sec. 7.2.3) + _jacobian1.block<3, 3>(0, 3) = -dR1 * skew(dp2); // (Sola 16, ex. B.3.2 and Sec. 7.2.3) + _jacobian1.block<3, 3>(3, 3) = dR2.transpose(); // (Sola 16, Sec. 7.2.3) _jacobian2.setIdentity(); - _jacobian2.block<3, 3>(0, 0) = DR; // (Sola 16, Sec. 7.2.3) + _jacobian2.block<3, 3>(0, 0) = dR1; // (Sola 16, Sec. 7.2.3) // perform composition here to avoid aliasing problems if _delta1 and _delta_plus_delta share the same storage - p_out_ = p1_ + q1_ * p2_; - q_out_ = q1_ * q2_; + dp_out = dp1 + dq1 * dp2; + dq_out = dq1 * dq2; } void ProcessorOdom3D::deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen::VectorXs& _delta2, const Scalar _Dt2, - Eigen::VectorXs& _delta1_plus_delta2) + Eigen::VectorXs& _delta1_plus_delta2) const { assert(_delta1.size() == delta_size_ && "Wrong _delta1 vector size"); assert(_delta2.size() == delta_size_ && "Wrong _delta2 vector size"); assert(_delta1_plus_delta2.size() == delta_size_ && "Wrong _delta1_plus_delta2 vector size"); - remap(_delta1, _delta2, _delta1_plus_delta2); - p_out_ = p1_ + q1_ * p2_; - q_out_ = q1_ * q2_; + + Eigen::Map<const Eigen::Vector3s> dp1 (_delta1.data() ); + Eigen::Map<const Eigen::Quaternions> dq1 (_delta1.data() + 3 ); + Eigen::Map<const Eigen::Vector3s> dp2 (_delta2.data() ); + Eigen::Map<const Eigen::Quaternions> dq2 (_delta2.data() + 3 ); + Eigen::Map<Eigen::Vector3s> dp_out (_delta1_plus_delta2.data() ); + Eigen::Map<Eigen::Quaternions> dq_out (_delta1_plus_delta2.data() + 3 ); + + + dp_out = dp1 + dq1 * dp2; + dq_out = dq1 * dq2; } void ProcessorOdom3D::statePlusDelta(const Eigen::VectorXs& _x, const Eigen::VectorXs& _delta, const Scalar _Dt, - Eigen::VectorXs& _x_plus_delta) + Eigen::VectorXs& _x_plus_delta) const { assert(_x.size() >= x_size_ && "Wrong _x vector size"); //we need a state vector which size is at least x_size_ assert(_delta.size() == delta_size_ && "Wrong _delta vector size"); assert(_x_plus_delta.size() >= x_size_ && "Wrong _x_plus_delta vector size"); - remap(_x.head(x_size_), _delta, _x_plus_delta); //we take only the x_sixe_ first elements of the state Vectors (Position + Orientation) - p_out_ = p1_ + q1_ * p2_; - q_out_ = q1_ * q2_; + + Eigen::Map<const Eigen::Vector3s> p (_x.data() ); + Eigen::Map<const Eigen::Quaternions> q (_x.data() + 3 ); + Eigen::Map<const Eigen::Vector3s> dp (_delta.data() ); + Eigen::Map<const Eigen::Quaternions> dq (_delta.data() + 3 ); + Eigen::Map<Eigen::Vector3s> p_out (_x_plus_delta.data() ); + Eigen::Map<Eigen::Quaternions> q_out (_x_plus_delta.data() + 3 ); + + + p_out = p + q * dp; + q_out = q * dq; } -bool ProcessorOdom3D::voteForKeyFrame() +bool ProcessorOdom3D::voteForKeyFrame() const { //WOLF_DEBUG( "Time span : " , getBuffer().get().back().ts_ - getBuffer().get().front().ts_ ); //WOLF_DEBUG( " last ts : ", getBuffer().get().back().ts_); @@ -219,15 +240,6 @@ FactorBasePtr ProcessorOdom3D::emplaceFactor(FeatureBasePtr _feature_motion, Cap return fac_odom; } -void ProcessorOdom3D::remap(const Eigen::VectorXs& _x1, const Eigen::VectorXs& _x2, Eigen::VectorXs& _x_out) -{ - new (&p1_) Eigen::Map<const Eigen::Vector3s>(_x1.data()); - new (&q1_) Eigen::Map<const Eigen::Quaternions>(_x1.data() + 3); - new (&p2_) Eigen::Map<const Eigen::Vector3s>(_x2.data()); - new (&q2_) Eigen::Map<const Eigen::Quaternions>(_x2.data() + 3); - new (&p_out_) Eigen::Map<Eigen::Vector3s>(_x_out.data()); - new (&q_out_) Eigen::Map<Eigen::Quaternions>(_x_out.data() + 3); -} } diff --git a/src/processor/processor_tracker.cpp b/src/processor/processor_tracker.cpp index 75659594a9af9cff6da09e9eae9c62ce8d974c83..b18436fd41da8ef3c6f2991bbd2937760ab2eb75 100644 --- a/src/processor/processor_tracker.cpp +++ b/src/processor/processor_tracker.cpp @@ -302,7 +302,7 @@ void ProcessorTracker::computeProcessingStep() } } -bool ProcessorTracker::triggerInCapture(CaptureBasePtr) +bool ProcessorTracker::triggerInCapture(CaptureBasePtr) const { return true; } diff --git a/src/processor/track_matrix.cpp b/src/processor/track_matrix.cpp index 67c0b74964537f3824f13ef6d8b52050535527b9..6d7dd0f50da30dc79e3c5c9cca980bc3364a0349 100644 --- a/src/processor/track_matrix.cpp +++ b/src/processor/track_matrix.cpp @@ -22,7 +22,7 @@ TrackMatrix::~TrackMatrix() // } -Track TrackMatrix::track(const SizeStd& _track_id) +Track TrackMatrix::track(const SizeStd& _track_id) const { if (tracks_.count(_track_id) > 0) return tracks_.at(_track_id); @@ -30,7 +30,7 @@ Track TrackMatrix::track(const SizeStd& _track_id) return Track(); } -Snapshot TrackMatrix::snapshot(CaptureBasePtr _capture) +Snapshot TrackMatrix::snapshot(CaptureBasePtr _capture) const { if (_capture && snapshots_.count(_capture) > 0) return snapshots_.at(_capture); @@ -120,17 +120,17 @@ void TrackMatrix::remove(FeatureBasePtr _ftr) } } -size_t TrackMatrix::numTracks() +size_t TrackMatrix::numTracks() const { return tracks_.size(); } -size_t TrackMatrix::trackSize(const SizeStd& _track_id) +size_t TrackMatrix::trackSize(const SizeStd& _track_id) const { return track(_track_id).size(); } -FeatureBasePtr TrackMatrix::firstFeature(const SizeStd& _track_id) +FeatureBasePtr TrackMatrix::firstFeature(const SizeStd& _track_id) const { if (tracks_.count(_track_id) > 0) return tracks_.at(_track_id).begin()->second; @@ -138,7 +138,7 @@ FeatureBasePtr TrackMatrix::firstFeature(const SizeStd& _track_id) return nullptr; } -FeatureBasePtr TrackMatrix::lastFeature(const SizeStd& _track_id) +FeatureBasePtr TrackMatrix::lastFeature(const SizeStd& _track_id) const { if (tracks_.count(_track_id) > 0) return tracks_.at(_track_id).rbegin()->second; @@ -146,7 +146,7 @@ FeatureBasePtr TrackMatrix::lastFeature(const SizeStd& _track_id) return nullptr; } -vector<FeatureBasePtr> TrackMatrix::trackAsVector(const SizeStd& _track_id) +vector<FeatureBasePtr> TrackMatrix::trackAsVector(const SizeStd& _track_id) const { vector<FeatureBasePtr> vec; if (tracks_.count(_track_id)) @@ -158,7 +158,7 @@ vector<FeatureBasePtr> TrackMatrix::trackAsVector(const SizeStd& _track_id) return vec; } -std::list<FeatureBasePtr> TrackMatrix::snapshotAsList(CaptureBasePtr _cap) +std::list<FeatureBasePtr> TrackMatrix::snapshotAsList(CaptureBasePtr _cap) const { std::list<FeatureBasePtr> lst; if (snapshots_.count(_cap)) @@ -167,7 +167,7 @@ std::list<FeatureBasePtr> TrackMatrix::snapshotAsList(CaptureBasePtr _cap) return lst; } -TrackMatches TrackMatrix::matches(CaptureBasePtr _cap_1, CaptureBasePtr _cap_2) +TrackMatches TrackMatrix::matches(CaptureBasePtr _cap_1, CaptureBasePtr _cap_2) const { TrackMatches pairs; @@ -191,7 +191,7 @@ TrackMatches TrackMatrix::matches(CaptureBasePtr _cap_1, CaptureBasePtr _cap_2) return pairs; } -FeatureBasePtr TrackMatrix::feature(const SizeStd& _track_id, CaptureBasePtr _cap) +FeatureBasePtr TrackMatrix::feature(const SizeStd& _track_id, CaptureBasePtr _cap) const { if (snapshot(_cap).count(_track_id)) return snapshot(_cap).at(_track_id); @@ -199,12 +199,12 @@ FeatureBasePtr TrackMatrix::feature(const SizeStd& _track_id, CaptureBasePtr _ca return nullptr; } -CaptureBasePtr TrackMatrix::firstCapture(const SizeStd& _track_id) +CaptureBasePtr TrackMatrix::firstCapture(const SizeStd& _track_id) const { return firstFeature(_track_id)->getCapture(); } -Track TrackMatrix::trackAtKeyframes(size_t _track_id) +Track TrackMatrix::trackAtKeyframes(size_t _track_id) const { // We assemble a track_kf on the fly by checking each capture's frame. if (tracks_.count(_track_id)) diff --git a/src/sensor/sensor_base.cpp b/src/sensor/sensor_base.cpp index accc54225043d1a4352596f65f4622d8c54464ca..755a5d7e02864db5b180c6e65bb824bedb65e759 100644 --- a/src/sensor/sensor_base.cpp +++ b/src/sensor/sensor_base.cpp @@ -218,7 +218,7 @@ void SensorBase::setNoiseCov(const Eigen::MatrixXs& _noise_cov) { noise_cov_ = _noise_cov; } -CaptureBasePtr SensorBase::lastKeyCapture(void) +CaptureBasePtr SensorBase::lastKeyCapture(void) const { // we search for the most recent Capture of this sensor which belongs to a KeyFrame CaptureBasePtr capture = nullptr; @@ -238,7 +238,7 @@ CaptureBasePtr SensorBase::lastKeyCapture(void) return capture; } -CaptureBasePtr SensorBase::lastCapture(const TimeStamp& _ts) +CaptureBasePtr SensorBase::lastCapture(const TimeStamp& _ts) const { // we search for the most recent Capture of this sensor before _ts CaptureBasePtr capture = nullptr; @@ -260,32 +260,32 @@ CaptureBasePtr SensorBase::lastCapture(const TimeStamp& _ts) return capture; } -StateBlockPtr SensorBase::getP(const TimeStamp _ts) +StateBlockPtr SensorBase::getP(const TimeStamp _ts) const { return getStateBlock(0, _ts); } -StateBlockPtr SensorBase::getO(const TimeStamp _ts) +StateBlockPtr SensorBase::getO(const TimeStamp _ts) const { return getStateBlock(1, _ts); } -StateBlockPtr SensorBase::getIntrinsic(const TimeStamp _ts) +StateBlockPtr SensorBase::getIntrinsic(const TimeStamp _ts) const { return getStateBlock(2, _ts); } -StateBlockPtr SensorBase::getP() +StateBlockPtr SensorBase::getP() const { return getStateBlock(0); } -StateBlockPtr SensorBase::getO() +StateBlockPtr SensorBase::getO() const { return getStateBlock(1); } -StateBlockPtr SensorBase::getIntrinsic() +StateBlockPtr SensorBase::getIntrinsic() const { return getStateBlock(2); } @@ -342,7 +342,7 @@ void SensorBase::removeProcessor(ProcessorBasePtr _proc_ptr) processor_list_.remove(_proc_ptr); } -StateBlockPtr SensorBase::getStateBlock(unsigned int _i) +StateBlockPtr SensorBase::getStateBlock(unsigned int _i) const { CaptureBasePtr cap; @@ -352,7 +352,7 @@ StateBlockPtr SensorBase::getStateBlock(unsigned int _i) return getStateBlockPtrStatic(_i); } -StateBlockPtr SensorBase::getStateBlock(unsigned int _i, const TimeStamp& _ts) +StateBlockPtr SensorBase::getStateBlock(unsigned int _i, const TimeStamp& _ts) const { CaptureBasePtr cap; @@ -362,7 +362,7 @@ StateBlockPtr SensorBase::getStateBlock(unsigned int _i, const TimeStamp& _ts) return getStateBlockPtrStatic(_i); } -bool SensorBase::isStateBlockDynamic(unsigned int _i, CaptureBasePtr& cap) +bool SensorBase::isStateBlockDynamic(unsigned int _i, CaptureBasePtr& cap) const { if ((_i<2 && this->extrinsicsInCaptures()) || (_i>=2 && intrinsicsInCaptures())) { @@ -374,7 +374,7 @@ bool SensorBase::isStateBlockDynamic(unsigned int _i, CaptureBasePtr& cap) return false; } -bool SensorBase::isStateBlockDynamic(unsigned int _i, const TimeStamp& _ts, CaptureBasePtr& cap) +bool SensorBase::isStateBlockDynamic(unsigned int _i, const TimeStamp& _ts, CaptureBasePtr& cap) const { if ((_i<2 && this->extrinsicsInCaptures()) || (_i>=2 && intrinsicsInCaptures())) { @@ -386,14 +386,14 @@ bool SensorBase::isStateBlockDynamic(unsigned int _i, const TimeStamp& _ts, Capt return false; } -bool SensorBase::isStateBlockDynamic(unsigned int _i) +bool SensorBase::isStateBlockDynamic(unsigned int _i) const { CaptureBasePtr cap; return isStateBlockDynamic(_i,cap); } -bool SensorBase::isStateBlockDynamic(unsigned int _i, const TimeStamp& _ts) +bool SensorBase::isStateBlockDynamic(unsigned int _i, const TimeStamp& _ts) const { CaptureBasePtr cap; diff --git a/src/trajectory/trajectory_base.cpp b/src/trajectory/trajectory_base.cpp index 35a1f9997e7ab5bffa8f4dbf4f8ac7c44415b66b..10bb5b1ec1b6c7d3a9f800b7e5f443d8b6fed0ac 100644 --- a/src/trajectory/trajectory_base.cpp +++ b/src/trajectory/trajectory_base.cpp @@ -44,7 +44,7 @@ void TrajectoryBase::removeFrame(FrameBasePtr _frame_ptr) updateLastFrames(); } -void TrajectoryBase::getFactorList(FactorBasePtrList & _fac_list) +void TrajectoryBase::getFactorList(FactorBasePtrList & _fac_list) const { for(auto fr_ptr : getFrameList()) fr_ptr->getFactorList(_fac_list); diff --git a/test/dummy/processor_tracker_feature_dummy.cpp b/test/dummy/processor_tracker_feature_dummy.cpp index d11dcf09f36616d0379945a0bea78a3ad1769b98..05b2f34494472cfa9fde355b91d0b48a6609d25a 100644 --- a/test/dummy/processor_tracker_feature_dummy.cpp +++ b/test/dummy/processor_tracker_feature_dummy.cpp @@ -42,7 +42,7 @@ unsigned int ProcessorTrackerFeatureDummy::trackFeatures(const FeatureBasePtrLis return _features_out.size(); } -bool ProcessorTrackerFeatureDummy::voteForKeyFrame() +bool ProcessorTrackerFeatureDummy::voteForKeyFrame() const { WOLF_INFO("Nbr. of active feature tracks: " , incoming_ptr_->getFeatureList().size() ); diff --git a/test/dummy/processor_tracker_feature_dummy.h b/test/dummy/processor_tracker_feature_dummy.h index 4ba333dfb0bb9ee6009a70781f223efccb316ec6..0590d45758707561cfc86b879b1943011e77ed73 100644 --- a/test/dummy/processor_tracker_feature_dummy.h +++ b/test/dummy/processor_tracker_feature_dummy.h @@ -75,7 +75,7 @@ class ProcessorTrackerFeatureDummy : public ProcessorTrackerFeature * * WARNING! This function only votes! It does not create KeyFrames! */ - virtual bool voteForKeyFrame(); + virtual bool voteForKeyFrame() const; /** \brief Detect new Features * \param _max_features maximum number of features detected (-1: unlimited. 0: none) diff --git a/test/dummy/processor_tracker_landmark_dummy.cpp b/test/dummy/processor_tracker_landmark_dummy.cpp index dd1147fdc1a09b60059bc69047adb46ba24ae16f..532906ac27f319486b619fd6f8e0f882d3676197 100644 --- a/test/dummy/processor_tracker_landmark_dummy.cpp +++ b/test/dummy/processor_tracker_landmark_dummy.cpp @@ -58,7 +58,7 @@ unsigned int ProcessorTrackerLandmarkDummy::findLandmarks(const LandmarkBasePtrL return _features_out.size(); } -bool ProcessorTrackerLandmarkDummy::voteForKeyFrame() +bool ProcessorTrackerLandmarkDummy::voteForKeyFrame() const { std::cout << "N features: " << incoming_ptr_->getFeatureList().size() << std::endl; bool vote = incoming_ptr_->getFeatureList().size() < params_tracker_landmark_dummy_->min_features_for_keyframe; diff --git a/test/dummy/processor_tracker_landmark_dummy.h b/test/dummy/processor_tracker_landmark_dummy.h index 9977abc480ab2c1cff695b732286cd7857f5276d..106f9ba2a1ea683eb763fc76e7f334e2bf8509b3 100644 --- a/test/dummy/processor_tracker_landmark_dummy.h +++ b/test/dummy/processor_tracker_landmark_dummy.h @@ -63,7 +63,7 @@ class ProcessorTrackerLandmarkDummy : public ProcessorTrackerLandmark * * WARNING! This function only votes! It does not create KeyFrames! */ - virtual bool voteForKeyFrame(); + virtual bool voteForKeyFrame() const; /** \brief Detect new Features * \param _max_features maximum number of features detected (-1: unlimited. 0: none) diff --git a/test/gtest_factor_diff_drive.cpp b/test/gtest_factor_diff_drive.cpp index 7302ae4833a94a7aeb0ed9ed304b4ea3026b453c..6caa5f868adceb291690590455bea94520771b0f 100644 --- a/test/gtest_factor_diff_drive.cpp +++ b/test/gtest_factor_diff_drive.cpp @@ -40,7 +40,7 @@ class ProcessorDiffDrivePublic : public ProcessorDiffDrive const Scalar _dt, Eigen::VectorXs& _delta, Eigen::MatrixXs& _delta_cov, - Eigen::MatrixXs& _jacobian_calib) + Eigen::MatrixXs& _jacobian_calib) const { Base::computeCurrentDelta(_data, _data_cov, _calib, _dt, _delta, _delta_cov, _jacobian_calib); } @@ -48,7 +48,7 @@ class ProcessorDiffDrivePublic : public ProcessorDiffDrive virtual void deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen::VectorXs& _delta2, const Scalar _dt2, - Eigen::VectorXs& _delta1_plus_delta2) + Eigen::VectorXs& _delta1_plus_delta2) const { Base::deltaPlusDelta(_delta1, _delta2, _dt2, _delta1_plus_delta2); } @@ -58,7 +58,7 @@ class ProcessorDiffDrivePublic : public ProcessorDiffDrive const Scalar _dt2, Eigen::VectorXs& _delta1_plus_delta2, Eigen::MatrixXs& _jacobian1, - Eigen::MatrixXs& _jacobian2) + Eigen::MatrixXs& _jacobian2) const { Base::deltaPlusDelta(_delta1, _delta2, _dt2, _delta1_plus_delta2, _jacobian1, _jacobian2); } @@ -66,7 +66,7 @@ class ProcessorDiffDrivePublic : public ProcessorDiffDrive virtual void statePlusDelta(const Eigen::VectorXs& _x, const Eigen::VectorXs& _delta, const Scalar _dt, - Eigen::VectorXs& _x_plus_delta) + Eigen::VectorXs& _x_plus_delta) const { Base::statePlusDelta(_x, _delta, _dt, _x_plus_delta); } diff --git a/test/gtest_processor_diff_drive.cpp b/test/gtest_processor_diff_drive.cpp index f697a948afecf8f83b8275220f30497bd6e75130..069f630631f03529da0d7d993f17dacb300f89a2 100644 --- a/test/gtest_processor_diff_drive.cpp +++ b/test/gtest_processor_diff_drive.cpp @@ -35,7 +35,7 @@ class ProcessorDiffDrivePublic : public ProcessorDiffDrive const Scalar _dt, Eigen::VectorXs& _delta, Eigen::MatrixXs& _delta_cov, - Eigen::MatrixXs& _jacobian_calib) + Eigen::MatrixXs& _jacobian_calib) const { Base::computeCurrentDelta(_data, _data_cov, _calib, _dt, _delta, _delta_cov, _jacobian_calib); } @@ -43,7 +43,7 @@ class ProcessorDiffDrivePublic : public ProcessorDiffDrive virtual void deltaPlusDelta(const Eigen::VectorXs& _delta1, const Eigen::VectorXs& _delta2, const Scalar _dt2, - Eigen::VectorXs& _delta1_plus_delta2) + Eigen::VectorXs& _delta1_plus_delta2) const { Base::deltaPlusDelta(_delta1, _delta2, _dt2, _delta1_plus_delta2); } @@ -53,7 +53,7 @@ class ProcessorDiffDrivePublic : public ProcessorDiffDrive const Scalar _dt2, Eigen::VectorXs& _delta1_plus_delta2, Eigen::MatrixXs& _jacobian1, - Eigen::MatrixXs& _jacobian2) + Eigen::MatrixXs& _jacobian2) const { Base::deltaPlusDelta(_delta1, _delta2, _dt2, _delta1_plus_delta2, _jacobian1, _jacobian2); } @@ -61,7 +61,7 @@ class ProcessorDiffDrivePublic : public ProcessorDiffDrive virtual void statePlusDelta(const Eigen::VectorXs& _x, const Eigen::VectorXs& _delta, const Scalar _dt, - Eigen::VectorXs& _x_plus_delta) + Eigen::VectorXs& _x_plus_delta) const { Base::statePlusDelta(_x, _delta, _dt, _x_plus_delta); }