Skip to content
Snippets Groups Projects
Commit 2ccbe83e authored by Médéric Fourmy's avatar Médéric Fourmy
Browse files

Proposal to deal with integrateOneStep() before handling KF pack

parent 846ff15f
No related branches found
No related tags found
1 merge request!373Resolve "Processor motion composite state adaptation"
Pipeline #5607 passed
......@@ -484,7 +484,8 @@ class ProcessorMotion : public ProcessorBase, public IsMotion
CaptureMotionPtr origin_ptr_;
CaptureMotionPtr last_ptr_;
CaptureMotionPtr incoming_ptr_;
bool last_nullptr_;
protected:
// helpers to avoid allocation
double dt_; ///< Time step
......
......@@ -33,6 +33,7 @@ ProcessorMotion::ProcessorMotion(const std::string& _type,
origin_ptr_(),
last_ptr_(),
incoming_ptr_(),
last_nullptr_(false),
dt_(0.0),
x_(_state_size),
delta_(_delta_size),
......@@ -95,10 +96,19 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr)
preProcess(); // Derived class operations
// integrate data
if (last_ptr_ != nullptr)
{
integrateOneStep();
}
else {
last_nullptr_ = true;
}
PackKeyFramePtr pack = computeProcessingStep();
if (pack)
buffer_pack_kf_.removeUpTo( pack->key_frame->getTimeStamp() );
switch(processing_step_)
{
case FIRST_TIME_WITHOUT_KF :
......@@ -161,13 +171,15 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr)
// extract pack elements
FrameBasePtr keyframe_from_callback = pack->key_frame;
TimeStamp ts_from_callback = keyframe_from_callback->getTimeStamp();
keyframe_from_callback->setState(getState(ts_from_callback));
// find the capture whose buffer is affected by the new keyframe
auto capture_existing = findCaptureContainingTimeStamp(keyframe_from_callback->getTimeStamp()); // k
auto capture_existing = findCaptureContainingTimeStamp(ts_from_callback); // k
if (!capture_existing)
{
WOLF_WARN("A KF before first motion capture (TS = ", keyframe_from_callback->getTimeStamp(), "). ProcessorMotion cannot do anything.");
WOLF_WARN("A KF before first motion capture (TS = ", ts_from_callback, "). ProcessorMotion cannot do anything.");
break;
}
......@@ -178,7 +190,6 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr)
VectorXd calib_origin = getCalibration(capture_origin);
// emplace a new motion capture to the new keyframe
TimeStamp ts_from_callback = keyframe_from_callback->getTimeStamp();
auto capture_for_keyframe_callback = emplaceCapture(keyframe_from_callback, // j
getSensor(),
ts_from_callback,
......@@ -260,6 +271,8 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr)
// extract pack elements
FrameBasePtr keyframe_from_callback = pack->key_frame;
TimeStamp ts_from_callback = keyframe_from_callback->getTimeStamp();
keyframe_from_callback->setState(getState(ts_from_callback));
auto & capture_existing = last_ptr_;
......@@ -270,7 +283,6 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr)
VectorXd calib_origin = getCalibration(capture_origin);
// emplace a new motion capture to the new keyframe
TimeStamp ts_from_callback = keyframe_from_callback->getTimeStamp();
auto capture_for_keyframe_callback = emplaceCapture(keyframe_from_callback,
getSensor(),
ts_from_callback,
......@@ -300,17 +312,18 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr)
break;
}
////////////////////////////////////////////////////
// NOW on with the received data
if (last_nullptr_){
integrateOneStep();
last_nullptr_ = false;
}
// integrate data
integrateOneStep();
// Update state and time stamps
const auto& ts = getTimeStamp();
last_ptr_->setTimeStamp( ts );
last_ptr_->getFrame()->setTimeStamp( ts );
last_ptr_->getFrame()->setState( getProblem()->getState( ts ) );
VectorComposite state_propa = getState( ts );
last_ptr_->getFrame()->setState( state_propa );
if (permittedKeyFrame() && voteForKeyFrame())
{
......
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