diff --git a/src/processor/processor_odom_icp.cpp b/src/processor/processor_odom_icp.cpp index 2b75292daf5c0f8e8388fca88d9e9ba786587b78..12838dd0cc239a7c24a62bd5a487b79abd068545 100644 --- a/src/processor/processor_odom_icp.cpp +++ b/src/processor/processor_odom_icp.cpp @@ -185,16 +185,21 @@ inline bool ProcessorOdomIcp::voteForKeyFrameTime() const inline bool ProcessorOdomIcp::voteForKeyFrameMatchQuality() const { - bool vote = trf_origin_incoming_.error/trf_origin_incoming_.nvalid > params_odom_icp_->vfk_min_error || trf_origin_incoming_.nvalid < params_odom_icp_->vfk_max_points || trf_origin_incoming_.valid != 1; - - if (vote) + bool origin_incoming_invalid = trf_origin_incoming_.error/trf_origin_incoming_.nvalid > params_odom_icp_->vfk_min_error || + trf_origin_incoming_.nvalid < params_odom_icp_->vfk_max_points || + trf_origin_incoming_.valid != 1; + bool origin_last_invalid = trf_origin_last_.error/trf_origin_last_.nvalid > params_odom_icp_->vfk_min_error || + trf_origin_last_.nvalid < params_odom_icp_->vfk_max_points || + trf_origin_last_.valid != 1; + + if (origin_incoming_invalid and not origin_last_invalid) { WOLF_DEBUG("ProcessorOdomIcp::voteForKeyFrameMatchQuality: Voting..."); WOLF_DEBUG_COND(trf_origin_incoming_.error / trf_origin_incoming_.nvalid > params_odom_icp_->vfk_min_error, "error greater than min. threshold" ); WOLF_DEBUG_COND(trf_origin_incoming_.nvalid < params_odom_icp_->vfk_max_points, "nvalid points below max" ); WOLF_DEBUG_COND(trf_origin_incoming_.valid != 1, "CSM transform not valid"); } - return vote; + return origin_incoming_invalid and not origin_last_invalid; } void ProcessorOdomIcp::advanceDerived()