Adds a CountingPointsProcessor. (#98)

It outputs the number of points processed at its stage in the pipeline
and is useful for understanding how many points a filter removed.
master
Holger Rapp 2016-10-25 16:09:47 +02:00 committed by GitHub
parent 2f42c990f6
commit 915dbd1894
5 changed files with 124 additions and 1 deletions

View File

@ -4,6 +4,18 @@ google_library(io_cairo_types
cairo_types.h cairo_types.h
) )
google_library(io_counting_points_processor
USES_GLOG
SRCS
counting_points_processor.cc
HDRS
counting_points_processor.h
DEPENDS
common_lua_parameter_dictionary
common_make_unique
io_points_processor
)
google_library(io_fixed_ratio_sampling_points_processor google_library(io_fixed_ratio_sampling_points_processor
USES_EIGEN USES_EIGEN
USES_GLOG USES_GLOG
@ -88,6 +100,7 @@ google_library(io_points_processor_pipeline_builder
DEPENDS DEPENDS
common_lua_parameter_dictionary common_lua_parameter_dictionary
common_make_unique common_make_unique
io_counting_points_processor
io_fixed_ratio_sampling_points_processor io_fixed_ratio_sampling_points_processor
io_min_max_range_filtering_points_processor io_min_max_range_filtering_points_processor
io_null_points_processor io_null_points_processor

View File

@ -0,0 +1,55 @@
/*
* Copyright 2016 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.
*/
#include "cartographer/io/counting_points_processor.h"
#include "cartographer/common/make_unique.h"
#include "glog/logging.h"
namespace cartographer {
namespace io {
CountingPointsProcessor::CountingPointsProcessor(PointsProcessor* next)
: num_points_(0), next_(next) {}
std::unique_ptr<CountingPointsProcessor>
CountingPointsProcessor::FromDictionary(
common::LuaParameterDictionary* const dictionary,
PointsProcessor* const next) {
return common::make_unique<CountingPointsProcessor>(next);
}
void CountingPointsProcessor::Process(std::unique_ptr<PointsBatch> batch) {
num_points_ += batch->points.size();
next_->Process(std::move(batch));
}
PointsProcessor::FlushResult CountingPointsProcessor::Flush() {
switch (next_->Flush()) {
case FlushResult::kFinished:
LOG(INFO) << "Processed " << num_points_ << " and finishing.";
return FlushResult::kFinished;
case FlushResult::kRestartStream:
LOG(INFO) << "Processed " << num_points_ << " and restarting stream.";
num_points_ = 0;
return FlushResult::kRestartStream;
}
LOG(FATAL);
}
} // namespace io
} // namespace cartographer

View File

@ -0,0 +1,52 @@
/*
* Copyright 2016 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_IO_COUNTING_POINTS_PROCESSOR_H_
#define CARTOGRAPHER_IO_COUNTING_POINTS_PROCESSOR_H_
#include "cartographer/common/lua_parameter_dictionary.h"
#include "cartographer/io/points_processor.h"
namespace cartographer {
namespace io {
// Passes through points, but keeps track of how many points it saw and output
// that on Flush.
class CountingPointsProcessor : public PointsProcessor {
public:
constexpr static const char* kConfigurationFileActionName = "dump_num_points";
explicit CountingPointsProcessor(PointsProcessor* next);
static std::unique_ptr<CountingPointsProcessor> FromDictionary(
common::LuaParameterDictionary* dictionary, PointsProcessor* next);
~CountingPointsProcessor() override {}
CountingPointsProcessor(const CountingPointsProcessor&) = delete;
CountingPointsProcessor& operator=(const CountingPointsProcessor&) = delete;
void Process(std::unique_ptr<PointsBatch> points) override;
FlushResult Flush() override;
private:
int64 num_points_;
PointsProcessor* next_;
};
} // namespace io
} // namespace cartographer
#endif // CARTOGRAPHER_IO_COUNTING_POINTS_PROCESSOR_H_

View File

@ -27,11 +27,12 @@ class PlyWritingPointsProcessor : public PointsProcessor {
public: public:
constexpr static const char* kConfigurationFileActionName = "write_ply"; constexpr static const char* kConfigurationFileActionName = "write_ply";
PlyWritingPointsProcessor(const string& filename, PointsProcessor* next); PlyWritingPointsProcessor(const string& filename, PointsProcessor* next);
~PlyWritingPointsProcessor() override {}
static std::unique_ptr<PlyWritingPointsProcessor> FromDictionary( static std::unique_ptr<PlyWritingPointsProcessor> FromDictionary(
common::LuaParameterDictionary* dictionary, PointsProcessor* next); common::LuaParameterDictionary* dictionary, PointsProcessor* next);
~PlyWritingPointsProcessor() override {}
PlyWritingPointsProcessor(const PlyWritingPointsProcessor&) = delete; PlyWritingPointsProcessor(const PlyWritingPointsProcessor&) = delete;
PlyWritingPointsProcessor& operator=(const PlyWritingPointsProcessor&) = PlyWritingPointsProcessor& operator=(const PlyWritingPointsProcessor&) =
delete; delete;

View File

@ -17,6 +17,7 @@
#include "cartographer/io/points_processor_pipeline_builder.h" #include "cartographer/io/points_processor_pipeline_builder.h"
#include "cartographer/common/make_unique.h" #include "cartographer/common/make_unique.h"
#include "cartographer/io/counting_points_processor.h"
#include "cartographer/io/fixed_ratio_sampling_points_processor.h" #include "cartographer/io/fixed_ratio_sampling_points_processor.h"
#include "cartographer/io/min_max_range_filtering_points_processor.h" #include "cartographer/io/min_max_range_filtering_points_processor.h"
#include "cartographer/io/null_points_processor.h" #include "cartographer/io/null_points_processor.h"
@ -29,6 +30,7 @@ namespace cartographer {
namespace io { namespace io {
PointsProcessorPipelineBuilder::PointsProcessorPipelineBuilder() { PointsProcessorPipelineBuilder::PointsProcessorPipelineBuilder() {
RegisterNonStatic<CountingPointsProcessor>();
RegisterNonStatic<FixedRatioSamplingPointsProcessor>(); RegisterNonStatic<FixedRatioSamplingPointsProcessor>();
RegisterNonStatic<MinMaxRangeFiteringPointsProcessor>(); RegisterNonStatic<MinMaxRangeFiteringPointsProcessor>();
RegisterNonStatic<PcdWritingPointsProcessor>(); RegisterNonStatic<PcdWritingPointsProcessor>();