From f117b641bed1b87dd4472c75384b80a29fc823d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Vallv=C3=A9=20Navarro?= <jvallve@iri.upc.edu> Date: Fri, 8 Feb 2019 14:44:35 +0100 Subject: [PATCH] specialized addPrior functions --- src/sensor_base.cpp | 2 +- src/sensor_base.h | 100 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 100 insertions(+), 2 deletions(-) diff --git a/src/sensor_base.cpp b/src/sensor_base.cpp index 1fb338827..a2a4fe226 100644 --- a/src/sensor_base.cpp +++ b/src/sensor_base.cpp @@ -144,7 +144,7 @@ void SensorBase::unfixIntrinsics() updateCalibSize(); } -void SensorBase::addParameterPrior(const StateBlockPtr& _sb, const Eigen::VectorXs& _x, const Eigen::MatrixXs& _cov, unsigned int _start_idx, int _size) +void SensorBase::addStaticParameterPrior(const StateBlockPtr& _sb, const Eigen::VectorXs& _x, const Eigen::MatrixXs& _cov, unsigned int _start_idx, int _size) { bool is_quaternion = (std::dynamic_pointer_cast<StateQuaternion>(_sb) != nullptr); diff --git a/src/sensor_base.h b/src/sensor_base.h index caffcf953..bd64a1e40 100644 --- a/src/sensor_base.h +++ b/src/sensor_base.h @@ -148,12 +148,56 @@ class SensorBase : public NodeBase, public std::enable_shared_from_this<SensorBa * \param _size state segment size (-1: whole state) (not used in quaternions) * **/ - void addParameterPrior(const StateBlockPtr& _sb, + void addParameterStaticPrior(const StateBlockPtr& _sb, + const Eigen::VectorXs& _x, + const Eigen::MatrixXs& _cov, + unsigned int _start_idx = 0, + int _size = -1); + + void addParameterDynamicPrior(const CaptureBase& _cap, + const StateBlockPtr& _sb, + const Eigen::VectorXs& _x, + const Eigen::MatrixXs& _cov, + unsigned int _start_idx = 0, + int _size = -1); + + void addParameterPrior(const unsigned int _i, const Eigen::VectorXs& _x, const Eigen::MatrixXs& _cov, unsigned int _start_idx = 0, int _size = -1); + void addParameterPrior(const unsigned int _i, + const TimeStamp _ts, + const Eigen::VectorXs& _x, + const Eigen::MatrixXs& _cov, + unsigned int _start_idx = 0, + int _size = -1); + + void addPPrior(const TimeStamp _ts, + const Eigen::VectorXs& _x, + const Eigen::MatrixXs& _cov, + unsigned int _start_idx = 0, + int _size = -1); + void addOPrior(const TimeStamp _ts, + const Eigen::VectorXs& _x, + const Eigen::MatrixXs& _cov); + void addIntrinsicsPrior(const TimeStamp _ts, + const Eigen::VectorXs& _x, + const Eigen::MatrixXs& _cov, + unsigned int _start_idx = 0, + int _size = -1); + + void addPPrior(const Eigen::VectorXs& _x, + const Eigen::MatrixXs& _cov, + unsigned int _start_idx = 0, + int _size = -1); + void addOPrior(const Eigen::VectorXs& _x, + const Eigen::MatrixXs& _cov); + void addIntrinsicsPrior(const Eigen::VectorXs& _x, + const Eigen::MatrixXs& _cov, + unsigned int _start_idx = 0, + int _size = -1); SizeEigen getCalibSize() const; Eigen::VectorXs getCalibration() const; @@ -274,6 +318,60 @@ inline void SensorBase::setHardwarePtr(const HardwareBasePtr _hw_ptr) hardware_ptr_ = _hw_ptr; } +inline void SensorBase::addParameterPrior(const unsigned int _i, const TimeStamp _ts, const Eigen::VectorXs& _x, + const Eigen::MatrixXs& _cov, unsigned int _start_idx, int _size) +{ + CaptureBasePtr cap; + // i is dynamic? //TODO + if (isDynamic(_i, _ts, cap)) + addParameterDynamicPrior(cap, cap->getStateBlockPtr(_i), _x, _cov, _start_idx, _size); + else + addParameterStaticPrior(getStateBlockPtrStatic(_i), _x, _cov, _start_idx, _size); +} + +inline void SensorBase::addParameterPrior(const unsigned int _i, const Eigen::VectorXs& _x, const Eigen::MatrixXs& _cov, + unsigned int _start_idx, int _size) +{ + CaptureBasePtr cap; + // i is dynamic? //TODO + if (isDynamic(_i, cap)) + addParameterDynamicPrior(cap, cap->getStateBlockPtr(_i), _x, _cov, _start_idx, _size); + else + addParameterStaticPrior(getStateBlockPtrStatic(_i), _x, _cov, _start_idx, _size); +} + +inline void SensorBase::addPPrior(const TimeStamp _ts, const Eigen::VectorXs& _x, const Eigen::MatrixXs& _cov, unsigned int _start_idx, + int _size) +{ + addParameterPrior(0, _ts, _x, _cov, _start_idx, _size); +} + +inline void SensorBase::addOPrior(const TimeStamp _ts, const Eigen::VectorXs& _x, const Eigen::MatrixXs& _cov) +{ + addParameterPrior(1, _ts, _x, _cov); +} + +inline void SensorBase::addIntrinsicsPrior(const TimeStamp _ts, const Eigen::VectorXs& _x, const Eigen::MatrixXs& _cov, + unsigned int _start_idx, int _size) +{ + addParameterPrior(2,_ts, _x, _cov); +} + +inline void SensorBase::addPPrior(const Eigen::VectorXs& _x, const Eigen::MatrixXs& _cov, unsigned int _start_idx, int _size) +{ + addParameterPrior(0, _x, _cov, _start_idx, _size); +} + +inline void SensorBase::addOPrior(const Eigen::VectorXs& _x, const Eigen::MatrixXs& _cov) +{ + addParameterPrior(1, _x, _cov); +} + +inline void SensorBase::addIntrinsicsPrior(const Eigen::VectorXs& _x, const Eigen::MatrixXs& _cov, unsigned int _start_idx, int _size) +{ + addParameterPrior(2, _x, _cov); +} + inline SizeEigen SensorBase::getCalibSize() const { return calib_size_; -- GitLab