diff --git a/src/processor_motion.cpp b/src/processor_motion.cpp index dd2104f61922253e81e2a3bcd58cf30789996a29..cd0a2615486677178ad32b03c3e1152901a034a7 100644 --- a/src/processor_motion.cpp +++ b/src/processor_motion.cpp @@ -267,18 +267,21 @@ void ProcessorMotion::getState(const TimeStamp& _ts, Eigen::VectorXs& _x) // We need to search in previous keyframes for the capture containing a motion buffer with the queried time stamp capture_motion = getCaptureMotionContainingTimeStamp(_ts); - if (capture_motion) + if (capture_motion) // We found a CaptureMotion whose buffer contains the time stamp { - // We found a CaptureMotion whose buffer contains the time stamp - VectorXs state_0 = capture_motion->getOriginFramePtr()->getState(); + // Get origin state and calibration + VectorXs state_0 = capture_motion->getOriginFramePtr()->getState(); + CaptureBasePtr cap_orig = capture_motion->getOriginFramePtr()->getCaptureOf(getSensorPtr()); + VectorXs calib = cap_orig->getCalibration(); // Get delta and correct it with new bias - VectorXs calib_preint = capture_motion->getBuffer().getCalibrationPreint(); - Motion motion = capture_motion->getBuffer().getMotion(_ts); - VectorXs delta_error = motion.jacobian_calib_ * (origin_ptr_->getCalibration() - calib_preint); - VectorXs delta = capture_motion->correctDelta( motion.delta_integr_, delta_error); + VectorXs calib_preint = capture_motion->getBuffer().getCalibrationPreint(); + Motion motion = capture_motion->getBuffer().getMotion(_ts); + + VectorXs delta_step = motion.jacobian_calib_ * (calib - calib_preint); + VectorXs delta = capture_motion->correctDelta( motion.delta_integr_, delta_step); - // Compose on top of state using the buffered time stamp, not the query time stamp + // Compose on top of origin state using the buffered time stamp, not the query time stamp // TODO Interpolate the delta to produce a state at the query time stamp _ts Scalar dt = motion.ts_ - capture_motion->getBuffer().get().front().ts_; // = _ts - capture_motion->getOriginPtr()->getTimeStamp(); statePlusDelta(state_0, delta, dt, _x);