diff --git a/src/processor/processor_motion.cpp b/src/processor/processor_motion.cpp index 5a8d56edefd9efb511d5e5a8ca575ef0ff11bc6b..7d7ae85accebb0b627db06b3d133bcb7713d2b00 100644 --- a/src/processor/processor_motion.cpp +++ b/src/processor/processor_motion.cpp @@ -118,28 +118,28 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr) // extract pack elements FrameBasePtr keyframe_from_callback = pack->key_frame; - TimeStamp ts_from_callback = keyframe_from_callback->getTimeStamp(); // find the capture whose buffer is affected by the new keyframe - auto existing_capture = findCaptureContainingTimeStamp(ts_from_callback); // k + auto existing_capture = findCaptureContainingTimeStamp(keyframe_from_callback->getTimeStamp()); // k // Find the frame acting as the capture's origin - auto keyframe_origin = existing_capture->getOriginFrame(); // i + auto keyframe_origin = existing_capture->getOriginFrame(); // i - auto capture_origin = std::static_pointer_cast<CaptureMotion>(keyframe_origin->getCaptureOf(getSensor())); + auto capture_origin = std::static_pointer_cast<CaptureMotion>(keyframe_origin->getCaptureOf(getSensor())); // Get calibration params for preintegration from origin, since it has chances to have optimized values - VectorXs calib_origin = capture_origin->getCalibration(); + VectorXs calib_origin = capture_origin->getCalibration(); // emplace a new motion capture to the new keyframe - auto capture_for_keyframe_callback = emplaceCapture(keyframe_from_callback, // j - getSensor(), - ts_from_callback, - Eigen::VectorXs::Zero(data_size_), - getSensor()->getNoiseCov(), - calib_origin, - calib_origin, - keyframe_origin); + TimeStamp ts_from_callback = keyframe_from_callback->getTimeStamp(); + auto capture_for_keyframe_callback = emplaceCapture(keyframe_from_callback, // j + getSensor(), + ts_from_callback, + Eigen::VectorXs::Zero(data_size_), + getSensor()->getNoiseCov(), + calib_origin, + calib_origin, + keyframe_origin); // split the buffer // and give the part of the buffer before the new keyframe to the capture for the KF callback @@ -202,15 +202,19 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr) // extract pack elements FrameBasePtr keyframe_from_callback = pack->key_frame; - TimeStamp ts_from_callback = keyframe_from_callback->getTimeStamp(); + + auto & existing_capture = last_ptr_; // Find the frame acting as the capture's origin - auto keyframe_origin = last_ptr_->getOriginFrame(); + auto keyframe_origin = existing_capture->getOriginFrame(); + + auto & capture_origin = origin_ptr_; // Get calibration params for preintegration from origin, since it has chances to have optimized values - VectorXs calib_origin = origin_ptr_->getCalibration(); + VectorXs calib_origin = capture_origin->getCalibration(); // 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, @@ -222,7 +226,7 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr) // split the buffer // and give the part of the buffer before the new keyframe to the capture for the KF callback - splitBuffer(last_ptr_, ts_from_callback, keyframe_from_callback, capture_for_keyframe_callback); + splitBuffer(existing_capture, ts_from_callback, keyframe_from_callback, capture_for_keyframe_callback); // create motion feature and add it to the capture auto feature_for_keyframe_callback = emplaceFeature(capture_for_keyframe_callback); @@ -279,40 +283,40 @@ void ProcessorMotion::processCapture(CaptureBasePtr _incoming_ptr) // Set the frame of last_ptr as key - auto key_frame_ptr = last_ptr_->getFrame(); - key_frame_ptr->setKey(); + auto key_frame = last_ptr_->getFrame(); + key_frame ->setKey(); // create motion feature and add it to the key_capture - auto key_feature_ptr = emplaceFeature(last_ptr_); + auto key_feature = emplaceFeature(last_ptr_); // create motion factor and link it to parent feature and other frame (which is origin's frame) - auto fac_ptr = emplaceFactor(key_feature_ptr, origin_ptr_); + auto factor = emplaceFactor(key_feature, origin_ptr_); // create a new frame - auto new_frame_ptr = getProblem()->emplaceFrame(NON_ESTIMATED, + auto new_frame = getProblem()->emplaceFrame(NON_ESTIMATED, getCurrentState(), getCurrentTimeStamp()); // create a new capture - auto new_capture_ptr = emplaceCapture(new_frame_ptr, - getSensor(), - key_frame_ptr->getTimeStamp(), - Eigen::VectorXs::Zero(data_size_), - getSensor()->getNoiseCov(), - last_ptr_->getCalibration(), - last_ptr_->getCalibration(), - key_frame_ptr); + auto new_capture = emplaceCapture(new_frame, + getSensor(), + key_frame->getTimeStamp(), + Eigen::VectorXs::Zero(data_size_), + getSensor()->getNoiseCov(), + last_ptr_->getCalibration(), + last_ptr_->getCalibration(), + key_frame); // reset the new buffer - new_capture_ptr->getBuffer().get().push_back( motionZero(key_frame_ptr->getTimeStamp()) ) ; + new_capture->getBuffer().get().push_back( motionZero(key_frame->getTimeStamp()) ) ; // reset derived things resetDerived(); // Update pointers origin_ptr_ = last_ptr_; - last_ptr_ = new_capture_ptr; + last_ptr_ = new_capture; // callback to other processors - getProblem()->keyFrameCallback(key_frame_ptr, shared_from_this(), params_motion_->time_tolerance); + getProblem()->keyFrameCallback(key_frame, shared_from_this(), params_motion_->time_tolerance); } resetDerived(); @@ -389,9 +393,9 @@ void ProcessorMotion::setOrigin(FrameBasePtr _origin_frame) // ---------- LAST ---------- // Make non-key-frame for last Capture - auto new_frame_ptr = getProblem()->emplaceFrame(NON_ESTIMATED, - _origin_frame->getState(), - _origin_frame->getTimeStamp()); + auto new_frame_ptr = getProblem()->emplaceFrame(NON_ESTIMATED, + _origin_frame->getState(), + _origin_frame->getTimeStamp()); // emplace (emtpy) last Capture last_ptr_ = emplaceCapture(new_frame_ptr, getSensor(), @@ -437,9 +441,11 @@ void ProcessorMotion::integrateOneStep() // integrate Jacobian wrt calib if ( hasCalibration() ) + { jacobian_calib_.noalias() = jacobian_delta_preint_ * getBuffer().get().back().jacobian_calib_ + jacobian_delta_ * jacobian_delta_calib_; + } // Integrate covariance delta_integrated_cov_.noalias() @@ -502,7 +508,7 @@ void ProcessorMotion::reintegrateBuffer(CaptureMotionPtr _capture_ptr) // integrate Jacobian wrt calib if ( hasCalibration() ) motion_it->jacobian_calib_ = motion_it->jacobian_delta_integr_ * jacobian_calib_ - + motion_it->jacobian_delta_ * jacobian_delta_calib_; + + motion_it->jacobian_delta_ * jacobian_delta_calib_; // Integrate covariance motion_it->delta_integr_cov_ = motion_it->jacobian_delta_integr_ * delta_integrated_cov_ * motion_it->jacobian_delta_integr_.transpose()