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

Check factor type in bootstrap operations

parent d8a6b85f
No related branches found
No related tags found
2 merge requests!54devel->main,!53Resolve "Remove bias drift from FactorImu"
......@@ -444,9 +444,12 @@ VectorXd ProcessorImu::bootstrapDelta() const
for (const auto& fac : bootstrap_factor_list_)
// here, we take advantage of the list of IMU factors to recover all deltas
{
dt = fac->getCapture()->getTimeStamp() - fac->getCaptureOther()->getTimeStamp();
const auto& delta = fac->getFeature()->getMeasurement(); // In FeatImu, delta = measurement
delta_int = imu::compose(delta_int, delta, dt);
if (std::dynamic_pointer_cast<FactorImu>(fac) != nullptr)
{
dt = fac->getCapture()->getTimeStamp() - fac->getCaptureOther()->getTimeStamp();
const auto& delta = fac->getFeature()->getMeasurement(); // In FeatImu, delta = measurement
delta_int = imu::compose(delta_int, delta, dt);
}
}
// now compose with delta in last_ptr_
dt = last_ptr_->getBuffer().back().ts_ - origin_ptr_->getTimeStamp();
......@@ -466,16 +469,19 @@ bool ProcessorImu::recomputeStates() const
WOLF_DEBUG("Recomputing IMU keyframe states...");
for (const auto& fac : bootstrap_factor_list_)
{
const auto& ftr = fac->getFeature();
const auto& cap = std::static_pointer_cast<CaptureMotion>(ftr->getCapture());
const auto& frm = cap->getFrame();
const auto& cap_origin = cap->getOriginCapture();
const auto& frm_origin = cap_origin->getFrame();
const auto& delta = VectorComposite(ftr->getMeasurement(), "POV", {3, 4, 3});
const auto& x_origin = frm_origin->getState();
auto dt = cap->getTimeStamp() - cap_origin->getTimeStamp();
auto x = imu::composeOverState(x_origin, delta, dt);
frm->setState(x);
if (std::dynamic_pointer_cast<FactorImu>(fac) != nullptr)
{
const auto& ftr = fac->getFeature();
const auto& cap = std::static_pointer_cast<CaptureMotion>(ftr->getCapture());
const auto& frm = cap->getFrame();
const auto& cap_origin = cap->getOriginCapture();
const auto& frm_origin = cap_origin->getFrame();
const auto& delta = VectorComposite(ftr->getMeasurement(), "POV", {3, 4, 3});
const auto& x_origin = frm_origin->getState();
auto dt = cap->getTimeStamp() - cap_origin->getTimeStamp();
auto x = imu::composeOverState(x_origin, delta, dt);
frm->setState(x);
}
}
return true;
}
......
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