/* * Copyright 2018 The Cartographer Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef CARTOGRAPHER_MAPPING_INTERNAL_2D_OVERLAPPING_SUBMAPS_TRIMMER_H_ #define CARTOGRAPHER_MAPPING_INTERNAL_2D_OVERLAPPING_SUBMAPS_TRIMMER_H_ #include "cartographer/common/port.h" #include "cartographer/mapping/pose_graph_trimmer.h" namespace cartographer { namespace mapping { // Trims submaps that have less than 'min_covered_cells_count' cells not // overlapped by at least 'fresh_submaps_count` submaps. class OverlappingSubmapsTrimmer2D : public PoseGraphTrimmer { public: OverlappingSubmapsTrimmer2D(uint16 fresh_submaps_count, double min_covered_area, uint16 min_added_submaps_count) : fresh_submaps_count_(fresh_submaps_count), min_covered_area_(min_covered_area), min_added_submaps_count_(min_added_submaps_count) {} ~OverlappingSubmapsTrimmer2D() override = default; void Trim(Trimmable* pose_graph) override; bool IsFinished() override { return finished_; } private: // Number of the most recent submaps to keep. const uint16 fresh_submaps_count_; // Minimum area of covered space to keep submap from trimming measured in m^2. const double min_covered_area_; // Number of added submaps before the trimmer is invoked. const uint16 min_added_submaps_count_; // Current finished submap count. uint16 current_submap_count_ = 0; bool finished_ = false; }; } // namespace mapping } // namespace cartographer #endif // CARTOGRAPHER_MAPPING_INTERNAL_2D_OVERLAPPING_SUBMAPS_TRIMMER_H_