From 4b53de7f683f23c9bd020d02df4a27016ceabe01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Joan=20Vallv=C3=A9=20Navarro?= <jvallve@iri.upc.edu> Date: Wed, 10 Jul 2019 12:24:15 +0200 Subject: [PATCH] additional parameter in computeBestSqDist --- include/laser/processor/polyline_2D_utils.h | 4 +- src/processor/polyline_2D_utils.cpp | 14 +++++- .../processor_tracker_feature_polyline_2D.cpp | 44 ++++++++++--------- 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/include/laser/processor/polyline_2D_utils.h b/include/laser/processor/polyline_2D_utils.h index c48b12db8..62be7c00d 100644 --- a/include/laser/processor/polyline_2D_utils.h +++ b/include/laser/processor/polyline_2D_utils.h @@ -72,7 +72,9 @@ MatchPolyline2DPtr computeBestSqDist(const Eigen::MatrixXs& _points_A, bool _fir const Scalar& max_sq_error, const Scalar& min_overlapping_dist, const int& min_N_overlapped, - const int& min_N_defined_overlapped ); + const int& min_N_defined_overlapped, + bool both_exceeding_A_allowed_ = true, + bool both_exceeding_B_allowed_ = true); Eigen::Array<Scalar,Eigen::Dynamic,1> computeSqDist(const Eigen::MatrixXs& _points_A, const int& from_A, const int& to_A, bool from_A_defined, bool to_A_defined, const Eigen::MatrixXs& _points_B, const int& from_B, const int& to_B, bool from_B_defined, bool to_B_defined, diff --git a/src/processor/polyline_2D_utils.cpp b/src/processor/polyline_2D_utils.cpp index 5e0c7d5d9..696d2c0ac 100644 --- a/src/processor/polyline_2D_utils.cpp +++ b/src/processor/polyline_2D_utils.cpp @@ -170,7 +170,9 @@ MatchPolyline2DPtr computeBestSqDist(const Eigen::MatrixXs& _points_A, bool _fir const Scalar& sq_error_max, const Scalar& overlap_dist_min, const int& overlap_N_min, - const int& overlap_N_defined_min) + const int& overlap_N_defined_min, + bool both_exceeding_A_allowed_, + bool both_exceeding_B_allowed_) { bool print = false; if (print) @@ -218,7 +220,9 @@ MatchPolyline2DPtr computeBestSqDist(const Eigen::MatrixXs& _points_A, bool _fir sq_error_max, overlap_dist_min, overlap_N_min, - overlap_N_defined_min); + overlap_N_defined_min, + both_exceeding_B_allowed_, + both_exceeding_A_allowed_); // undo switching if (best_match != nullptr) { @@ -277,6 +281,12 @@ MatchPolyline2DPtr computeBestSqDist(const Eigen::MatrixXs& _points_A, bool _fir while (to_A > last_A && _closed_A) to_A -= _points_A.cols(); + // exceeding points for both extremes allowed? + if (!both_exceeding_A_allowed_ && from_A != 0 && to_A != last_A) + continue; + if (!both_exceeding_B_allowed_ && from_B != 0 && to_B != last_B) + continue; + if (print) { std::cout << "\toffset " << offset << std::endl; diff --git a/src/processor/processor_tracker_feature_polyline_2D.cpp b/src/processor/processor_tracker_feature_polyline_2D.cpp index b8d1331f8..4ac02519c 100644 --- a/src/processor/processor_tracker_feature_polyline_2D.cpp +++ b/src/processor/processor_tracker_feature_polyline_2D.cpp @@ -1084,7 +1084,9 @@ void ProcessorTrackerFeaturePolyline2D::tryMatchWithLandmark(LandmarkMatchPolyli 1, params_tracker_feature_polyline_->match_landmark_overlap_dist_min, params_tracker_feature_polyline_->match_landmark_overlap_n_min, - params_tracker_feature_polyline_->match_landmark_overlap_n_defined_min); + params_tracker_feature_polyline_->match_landmark_overlap_n_defined_min, + true, // partial match lmk allowed + false);// partial match ftr allowed } else // not probabilistic match { @@ -1103,7 +1105,9 @@ void ProcessorTrackerFeaturePolyline2D::tryMatchWithLandmark(LandmarkMatchPolyli params_tracker_feature_polyline_->match_landmark_position_sq_norm_max, params_tracker_feature_polyline_->match_landmark_overlap_dist_min, params_tracker_feature_polyline_->match_landmark_overlap_n_min, - params_tracker_feature_polyline_->match_landmark_overlap_n_defined_min); + params_tracker_feature_polyline_->match_landmark_overlap_n_defined_min, + true, // exceeding points in both extremes allowed for landmark + false);// exceeding points in both extremes allowed for feature } //valid match @@ -1139,7 +1143,7 @@ void ProcessorTrackerFeaturePolyline2D::tryMatchWithLandmark(LandmarkMatchPolyli // store in list lmk_matches[lmk_match->normalized_score_]= lmk_match; - WOLF_DEBUG("match stored!"); + //WOLF_DEBUG("match stored!"); assert(lmk_match->check() && "tryMatchWithLandmark: wrong match"); } } @@ -1150,7 +1154,7 @@ void ProcessorTrackerFeaturePolyline2D::tryMatchWithLandmark(LandmarkMatchPolyli */ bool ProcessorTrackerFeaturePolyline2D::updateLandmarkMatch(LandmarkMatchPolyline2DPtr& _lmk_match) const { - WOLF_DEBUG("PTFP ", getName(), "::updateLandmarkMatch: "); + //WOLF_DEBUG("PTFP ", getName(), "::updateLandmarkMatch: "); auto pl_lmk = _lmk_match->pl_landmark_; auto pl_ftr = _lmk_match->pl_feature_; @@ -1180,12 +1184,12 @@ bool ProcessorTrackerFeaturePolyline2D::updateLandmarkMatch(LandmarkMatchPolylin LandmarkMatchPolyline2DPtr ProcessorTrackerFeaturePolyline2D::concatenateFeatureLandmarkMatches(FeatureMatchPolyline2DPtr ftr_match, LandmarkMatchPolyline2DPtr lmk_match_last) const { - WOLF_DEBUG("PTFP ", getName(), "::concatenateFeatureLandmarkMatches: "); + //WOLF_DEBUG("PTFP ", getName(), "::concatenateFeatureLandmarkMatches: "); assert(lmk_match_last->check(false) && "input lmk_match_last wrong"); - WOLF_DEBUG("INCOMING-LAST MATCH:"); - ftr_match->print(); - WOLF_DEBUG("LANDMARK-LAST MATCH:"); - lmk_match_last->print(); + //WOLF_DEBUG("INCOMING-LAST MATCH:"); + //ftr_match->print(); + //WOLF_DEBUG("LANDMARK-LAST MATCH:"); + //lmk_match_last->print(); WOLF_WARN_COND((lmk_match_last->computeSqDistArray() >= 0.5).any(), "before concatenateFeatureLandmarkMatches too much error: ", @@ -1247,8 +1251,8 @@ LandmarkMatchPolyline2DPtr ProcessorTrackerFeaturePolyline2D::concatenateFeature assert(lmk_match_incoming->check(false) && "wrongly concatenated"); // check without partial match - WOLF_DEBUG("LANDMARK-INCOMING MATCH:"); - lmk_match_incoming->print(); + //WOLF_DEBUG("LANDMARK-INCOMING MATCH:"); + //lmk_match_incoming->print(); WOLF_WARN_COND((lmk_match_incoming->computeSqDistArray() >= 0.5).any(), "after concatenateFeatureLandmarkMatches too much error: ", @@ -1260,25 +1264,25 @@ LandmarkMatchPolyline2DPtr ProcessorTrackerFeaturePolyline2D::concatenateFeature bool ProcessorTrackerFeaturePolyline2D::tryUpdateMatchTransformation(LandmarkMatchPolyline2DPtr& lmk_match) const { - WOLF_DEBUG("PTFP ", getName(), "::tryUpdateMatchTransformation: "); + //WOLF_DEBUG("PTFP ", getName(), "::tryUpdateMatchTransformation: "); assert(lmk_match->check()); if (lmk_match->getNDefinedPoints() > 0 && lmk_match->getNPoints() > 1) { - auto T_feature_landmark_prev = lmk_match->T_feature_landmark_; + //auto T_feature_landmark_prev = lmk_match->T_feature_landmark_; lmk_match->T_feature_landmark_ = pose2T2D(computeRigidTrans(lmk_match->pl_feature_->getPoints().middleCols(lmk_match->feature_from_id_,lmk_match->getNPoints()), lmk_match->pl_landmark_->computePointsGlobal(lmk_match->landmark_from_id_,lmk_match->landmark_to_id_), lmk_match->fromDefined(), lmk_match->toDefined())); - WOLF_WARN_COND((T2pose2D(T_feature_landmark_prev)-T2pose2D(lmk_match->T_feature_landmark_)).head(2).norm() > 0.1 || - abs(pi2pi((T2pose2D(T_feature_landmark_prev)-T2pose2D(lmk_match->T_feature_landmark_))(2))) > 0.1, - "tryUpdateMatchTransformation: lmk_match->T_feature_landmark_ changed significantly. \n\tPrev pose: ", - T2pose2D(T_feature_landmark_prev).transpose(), - "\n\tUpdated pose:", - T2pose2D(lmk_match->T_feature_landmark_).transpose()); +// WOLF_WARN_COND((T2pose2D(T_feature_landmark_prev)-T2pose2D(lmk_match->T_feature_landmark_)).head(2).norm() > 0.1 || +// abs(pi2pi((T2pose2D(T_feature_landmark_prev)-T2pose2D(lmk_match->T_feature_landmark_))(2))) > 0.1, +// "tryUpdateMatchTransformation: lmk_match->T_feature_landmark_ changed significantly. \n\tPrev pose: ", +// T2pose2D(T_feature_landmark_prev).transpose(), +// "\n\tUpdated pose:", +// T2pose2D(lmk_match->T_feature_landmark_).transpose()); WOLF_WARN_COND((lmk_match->computeSqDistArray() >= 0.5).any(), "after tryUpdateMatchTransformation too much error: ", @@ -1286,7 +1290,7 @@ bool ProcessorTrackerFeaturePolyline2D::tryUpdateMatchTransformation(LandmarkMat return true; } - WOLF_DEBUG("tryUpdateMatchTransformation: Not enough points: ",lmk_match->getNPoints(), " (should be > 1) or defined points: ", lmk_match->getNDefinedPoints(), " (should be > 0)"); + //WOLF_DEBUG("tryUpdateMatchTransformation: Not enough points: ",lmk_match->getNPoints(), " (should be > 1) or defined points: ", lmk_match->getNDefinedPoints(), " (should be > 0)"); return false; } -- GitLab