diff --git a/src/processor/processor_tracker_feature.cpp b/src/processor/processor_tracker_feature.cpp index f27d3b9c1bc6f664e135b4ca6893b6a977e7d206..33ec7f2a684c2fd06baa74370720290df29be4d0 100644 --- a/src/processor/processor_tracker_feature.cpp +++ b/src/processor/processor_tracker_feature.cpp @@ -97,19 +97,22 @@ unsigned int ProcessorTrackerFeature::processKnown() // Check/correct incoming-origin correspondences if (origin_ptr_ != nullptr) { - for (auto feature_in_incoming : known_features_incoming_) + auto ftr_inc_it = known_features_incoming_.begin(); + while (ftr_inc_it != known_features_incoming_.end()) { - SizeStd track_id = feature_in_incoming->trackId(); + SizeStd track_id = (*ftr_inc_it)->trackId(); FeatureBasePtr feature_in_last = track_matrix_.feature(track_id, last_ptr_); FeatureBasePtr feature_in_origin = track_matrix_.feature(track_id, origin_ptr_); - if (!correctFeatureDrift(feature_in_origin, feature_in_last, feature_in_incoming)) + if (!correctFeatureDrift(feature_in_origin, feature_in_last, (*ftr_inc_it))) { // Remove this feature from many places: - matches_last_from_incoming_ .erase (feature_in_incoming); // remove match - track_matrix_ .remove(feature_in_incoming); // remove from track matrix - known_features_incoming_ .remove(feature_in_incoming); // remove from known features list - feature_in_incoming ->remove(); // remove from wolf tree + matches_last_from_incoming_ .erase (*ftr_inc_it); // remove match + track_matrix_ .remove(*ftr_inc_it); // remove from track matrix + ftr_inc_it = known_features_incoming_.erase(ftr_inc_it); // remove from known features list + (*ftr_inc_it)-> remove(); // remove from wolf tree } + else + ftr_inc_it++; } }