diff --git a/cartographer/io/outlier_removing_points_processor.cc b/cartographer/io/outlier_removing_points_processor.cc index 92c9787..585c36f 100644 --- a/cartographer/io/outlier_removing_points_processor.cc +++ b/cartographer/io/outlier_removing_points_processor.cc @@ -27,13 +27,23 @@ std::unique_ptr OutlierRemovingPointsProcessor::FromDictionary( common::LuaParameterDictionary* const dictionary, PointsProcessor* const next) { + const double miss_per_hit_limit = [&]() { + if (!dictionary->HasKey("miss_per_hit_limit")) { + LOG(INFO) << "Using default value of 3 for miss_per_hit_limit."; + return 3.; + } else { + return dictionary->GetDouble("miss_per_hit_limit"); + } + }(); return absl::make_unique( - dictionary->GetDouble("voxel_size"), next); + dictionary->GetDouble("voxel_size"), miss_per_hit_limit, next); } OutlierRemovingPointsProcessor::OutlierRemovingPointsProcessor( - const double voxel_size, PointsProcessor* next) + const double voxel_size, const double miss_per_hit_limit, + PointsProcessor* next) : voxel_size_(voxel_size), + miss_per_hit_limit_(miss_per_hit_limit), next_(next), state_(State::kPhase1), voxels_(voxel_size_) { @@ -106,12 +116,11 @@ void OutlierRemovingPointsProcessor::ProcessInPhaseTwo( void OutlierRemovingPointsProcessor::ProcessInPhaseThree( std::unique_ptr batch) { - constexpr double kMissPerHitLimit = 3; absl::flat_hash_set to_remove; for (size_t i = 0; i < batch->points.size(); ++i) { const VoxelData voxel = voxels_.value(voxels_.GetCellIndex(batch->points[i].position)); - if (!(voxel.rays < kMissPerHitLimit * voxel.hits)) { + if (!(voxel.rays < miss_per_hit_limit_ * voxel.hits)) { to_remove.insert(i); } } diff --git a/cartographer/io/outlier_removing_points_processor.h b/cartographer/io/outlier_removing_points_processor.h index fefc828..4853c78 100644 --- a/cartographer/io/outlier_removing_points_processor.h +++ b/cartographer/io/outlier_removing_points_processor.h @@ -31,7 +31,8 @@ class OutlierRemovingPointsProcessor : public PointsProcessor { constexpr static const char* kConfigurationFileActionName = "voxel_filter_and_remove_moving_objects"; - OutlierRemovingPointsProcessor(double voxel_size, PointsProcessor* next); + OutlierRemovingPointsProcessor(double voxel_size, double miss_per_hit_limit, + PointsProcessor* next); static std::unique_ptr FromDictionary( common::LuaParameterDictionary* dictionary, PointsProcessor* next); @@ -76,6 +77,7 @@ class OutlierRemovingPointsProcessor : public PointsProcessor { void ProcessInPhaseThree(std::unique_ptr batch); const double voxel_size_; + const double miss_per_hit_limit_; PointsProcessor* const next_; State state_; mapping::HybridGridBase voxels_;