Skip to content
Snippets Groups Projects
Commit 9f3e5396 authored by Joan Solà Ortega's avatar Joan Solà Ortega
Browse files

Merge branch 'kfpackmanager_alt' into kfpackmanager

parents e5ed7915 e3168a0e
No related branches found
No related tags found
1 merge request!157Kfpackmanager
Pipeline #
...@@ -704,7 +704,7 @@ void Problem::print(int depth, bool constr_by, bool metric, bool state_blocks) ...@@ -704,7 +704,7 @@ void Problem::print(int depth, bool constr_by, bool metric, bool state_blocks)
{ {
if (i==0) cout << " Extr " << (S->isExtrinsicDynamic() ? "[Dyn]" : "[Sta]") << " = ["; if (i==0) cout << " Extr " << (S->isExtrinsicDynamic() ? "[Dyn]" : "[Sta]") << " = [";
if (i==2) cout << " Intr " << (S->isIntrinsicDynamic() ? "[Dyn]" : "[Sta]") << " = ["; if (i==2) cout << " Intr " << (S->isIntrinsicDynamic() ? "[Dyn]" : "[Sta]") << " = [";
auto sb = S->getStateBlockPtrAuto(i); auto sb = S->getStateBlockPtrDynamic(i);
if (sb) if (sb)
{ {
cout << (sb->isFixed() ? " Fix( " : " Est( ") << sb->getState().transpose() << " )"; cout << (sb->isFixed() ? " Fix( " : " Est( ") << sb->getState().transpose() << " )";
......
...@@ -218,6 +218,23 @@ void SensorBase::setNoiseCov(const Eigen::MatrixXs& _noise_cov) { ...@@ -218,6 +218,23 @@ void SensorBase::setNoiseCov(const Eigen::MatrixXs& _noise_cov) {
noise_cov_ = _noise_cov; noise_cov_ = _noise_cov;
} }
CaptureBasePtr SensorBase::lastCapture(void)
{
// we search for the most recent Capture of this sensor
CaptureBasePtr capture = nullptr;
FrameBaseList frame_list = getProblem()->getTrajectoryPtr()->getFrameList();
FrameBaseRevIter frame_rev_it = frame_list.rbegin();
while (frame_rev_it != frame_list.rend())
{
CaptureBasePtr capture = (*frame_rev_it)->getCaptureOf(shared_from_this());
if (capture)
// found the most recent Capture made by this sensor !
break;
frame_rev_it++;
}
return capture;
}
CaptureBasePtr SensorBase::lastCapture(const TimeStamp& _ts) CaptureBasePtr SensorBase::lastCapture(const TimeStamp& _ts)
{ {
// we search for the most recent Capture of this sensor before _ts // we search for the most recent Capture of this sensor before _ts
...@@ -255,44 +272,17 @@ StateBlockPtr SensorBase::getIntrinsicPtr(const TimeStamp _ts) ...@@ -255,44 +272,17 @@ StateBlockPtr SensorBase::getIntrinsicPtr(const TimeStamp _ts)
StateBlockPtr SensorBase::getPPtr() StateBlockPtr SensorBase::getPPtr()
{ {
ProblemPtr P = getProblem(); return getStateBlockPtrDynamic(0);
if (P)
{
FrameBasePtr KF = P->getLastKeyFramePtr();
if (KF)
{
return getPPtr(KF->getTimeStamp());
}
}
return state_block_vec_[0];
} }
StateBlockPtr SensorBase::getOPtr() StateBlockPtr SensorBase::getOPtr()
{ {
ProblemPtr P = getProblem(); return getStateBlockPtrDynamic(1);
if (P)
{
FrameBasePtr KF = P->getLastKeyFramePtr();
if (KF)
{
return getOPtr(KF->getTimeStamp());
}
}
return state_block_vec_[1];
} }
StateBlockPtr SensorBase::getIntrinsicPtr() StateBlockPtr SensorBase::getIntrinsicPtr()
{ {
ProblemPtr P = getProblem(); return getStateBlockPtrDynamic(2);
if (P)
{
FrameBasePtr KF = P->getLastKeyFramePtr();
if (KF)
{
return getIntrinsicPtr(KF->getTimeStamp());
}
}
return state_block_vec_[2];
} }
wolf::Size SensorBase::computeCalibSize() const wolf::Size SensorBase::computeCalibSize() const
...@@ -346,30 +336,32 @@ ProcessorBasePtr SensorBase::addProcessor(ProcessorBasePtr _proc_ptr) ...@@ -346,30 +336,32 @@ ProcessorBasePtr SensorBase::addProcessor(ProcessorBasePtr _proc_ptr)
return _proc_ptr; return _proc_ptr;
} }
StateBlockPtr SensorBase::getStateBlockPtrDynamic(unsigned int _i, const TimeStamp& _ts) StateBlockPtr SensorBase::getStateBlockPtrDynamic(unsigned int _i)
{ {
assert(_i < state_block_vec_.size() && "Requested a state block pointer out of the vector range!"); if ((_i<2 && this->extrinsicsInCaptures()) || (_i>=2 && intrinsicsInCaptures()))
if (((_i < 2) && extrinsicsInCaptures()) || ((_i >= 2) && intrinsicsInCaptures()))
{ {
CaptureBasePtr cap = lastCapture(_ts); CaptureBasePtr cap = lastCapture();
return cap->getStateBlockPtr(_i); if (cap)
return cap->getStateBlockPtr(_i);
else
return getStateBlockPtrStatic(_i);
} }
else else
return state_block_vec_[_i]; return getStateBlockPtrStatic(_i);
} }
StateBlockPtr SensorBase::getStateBlockPtrAuto(unsigned int _i) StateBlockPtr SensorBase::getStateBlockPtrDynamic(unsigned int _i, const TimeStamp& _ts)
{ {
ProblemPtr P = getProblem(); if ((_i<2 && this->extrinsicsInCaptures()) || (_i>=2 && intrinsicsInCaptures()))
if (P)
{ {
FrameBasePtr KF = P->getLastKeyFramePtr(); CaptureBasePtr cap = lastCapture(_ts);
if (KF) if (cap)
{ return cap->getStateBlockPtr(_i);
return getStateBlockPtrDynamic(_i, KF->getTimeStamp()); else
} return getStateBlockPtrStatic(_i);
} }
return state_block_vec_[_i]; else
return getStateBlockPtrStatic(_i);
} }
} // namespace wolf } // namespace wolf
...@@ -102,6 +102,7 @@ class SensorBase : public NodeBase, public std::enable_shared_from_this<SensorBa ...@@ -102,6 +102,7 @@ class SensorBase : public NodeBase, public std::enable_shared_from_this<SensorBa
ProcessorBasePtr addProcessor(ProcessorBasePtr _proc_ptr); ProcessorBasePtr addProcessor(ProcessorBasePtr _proc_ptr);
ProcessorBaseList& getProcessorList(); ProcessorBaseList& getProcessorList();
CaptureBasePtr lastCapture(void);
CaptureBasePtr lastCapture(const TimeStamp& _ts); CaptureBasePtr lastCapture(const TimeStamp& _ts);
bool process(const CaptureBasePtr capture_ptr); bool process(const CaptureBasePtr capture_ptr);
...@@ -110,8 +111,8 @@ class SensorBase : public NodeBase, public std::enable_shared_from_this<SensorBa ...@@ -110,8 +111,8 @@ class SensorBase : public NodeBase, public std::enable_shared_from_this<SensorBa
const std::vector<StateBlockPtr>& getStateBlockVec() const; const std::vector<StateBlockPtr>& getStateBlockVec() const;
std::vector<StateBlockPtr>& getStateBlockVec(); std::vector<StateBlockPtr>& getStateBlockVec();
StateBlockPtr getStateBlockPtrStatic(unsigned int _i) const; StateBlockPtr getStateBlockPtrStatic(unsigned int _i) const;
StateBlockPtr getStateBlockPtrDynamic(unsigned int _i);
StateBlockPtr getStateBlockPtrDynamic(unsigned int _i, const TimeStamp& _ts); StateBlockPtr getStateBlockPtrDynamic(unsigned int _i, const TimeStamp& _ts);
StateBlockPtr getStateBlockPtrAuto(unsigned int _i);
void setStateBlockPtrStatic(unsigned int _i, const StateBlockPtr _sb_ptr); void setStateBlockPtrStatic(unsigned int _i, const StateBlockPtr _sb_ptr);
void resizeStateBlockVec(int _size); void resizeStateBlockVec(int _size);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment