Skip to content

Commit 6f5c9ec

Browse files
committed
write YAML for ROS map_server
1 parent b8228ee commit 6f5c9ec

File tree

2 files changed

+35
-4
lines changed

2 files changed

+35
-4
lines changed

cartographer/io/probability_grid_points_processor.cc

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
#include "Eigen/Core"
2020
#include "absl/memory/memory.h"
21+
#include "absl/strings/str_format.h"
2122
#include "cartographer/common/lua_parameter_dictionary.h"
2223
#include "cartographer/common/math.h"
2324
#include "cartographer/io/draw_trajectories.h"
@@ -84,12 +85,14 @@ ProbabilityGridPointsProcessor::ProbabilityGridPointsProcessor(
8485
probability_grid_range_data_inserter_options,
8586
const DrawTrajectories& draw_trajectories, const OutputType& output_type,
8687
std::unique_ptr<FileWriter> file_writer,
88+
std::unique_ptr<FileWriter> yaml_file_writer,
8789
const std::vector<mapping::proto::Trajectory>& trajectories,
8890
PointsProcessor* const next)
8991
: draw_trajectories_(draw_trajectories),
9092
output_type_(output_type),
9193
trajectories_(trajectories),
9294
file_writer_(std::move(file_writer)),
95+
yaml_file_writer_(std::move(yaml_file_writer)),
9396
next_(next),
9497
range_data_inserter_(probability_grid_range_data_inserter_options),
9598
probability_grid_(
@@ -114,14 +117,16 @@ ProbabilityGridPointsProcessor::FromDictionary(
114117
dictionary->HasKey("output_type")
115118
? OutputTypeFromString(dictionary->GetString("output_type"))
116119
: OutputType::kPng;
120+
121+
std::string filename = dictionary->GetString("filename") +
122+
FileExtensionFromOutputType(output_type);
123+
117124
return absl::make_unique<ProbabilityGridPointsProcessor>(
118125
dictionary->GetDouble("resolution"),
119126
mapping::CreateProbabilityGridRangeDataInserterOptions2D(
120127
dictionary->GetDictionary("range_data_inserter").get()),
121-
draw_trajectories, output_type,
122-
file_writer_factory(dictionary->GetString("filename") +
123-
FileExtensionFromOutputType(output_type)),
124-
trajectories, next);
128+
draw_trajectories, output_type, file_writer_factory(filename),
129+
file_writer_factory(filename + ".yaml"), trajectories, next);
125130
}
126131

127132
void ProbabilityGridPointsProcessor::Process(
@@ -145,6 +150,30 @@ PointsProcessor::FlushResult ProbabilityGridPointsProcessor::Flush() {
145150
}
146151
image->WritePng(file_writer_.get());
147152
CHECK(file_writer_->Close());
153+
154+
// write YAML which confirms to http://wiki.ros.org/map_server
155+
const char* format =
156+
"image: %s\n"
157+
"resolution: %f\n"
158+
"origin: [%f, %f, 0]\n"
159+
"occupied_thresh: 0.65\n"
160+
"free_thresh: 0.196\n"
161+
"negate: 0\n";
162+
163+
const cartographer::mapping::MapLimits& limits =
164+
probability_grid_.limits();
165+
const cartographer::mapping::CellLimits& cell_limits =
166+
limits.cell_limits();
167+
168+
double resolution = limits.resolution();
169+
std::string yaml_str = absl::StrFormat(
170+
format, file_writer_->GetFilename().c_str(), resolution,
171+
limits.max().x() -
172+
resolution * (cell_limits.num_x_cells - offset.x()),
173+
limits.max().y() -
174+
resolution * (cell_limits.num_y_cells - offset.y()));
175+
yaml_file_writer_->Write(yaml_str.c_str(), yaml_str.length());
176+
CHECK(yaml_file_writer_->Close());
148177
}
149178
} else if (output_type_ == OutputType::kPb) {
150179
const auto probability_grid_proto = probability_grid_.ToProto();

cartographer/io/probability_grid_points_processor.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class ProbabilityGridPointsProcessor : public PointsProcessor {
4848
probability_grid_range_data_inserter_options,
4949
const DrawTrajectories& draw_trajectories, const OutputType& output_type,
5050
std::unique_ptr<FileWriter> file_writer,
51+
std::unique_ptr<FileWriter> yaml_file_writer,
5152
const std::vector<mapping::proto::Trajectory>& trajectories,
5253
PointsProcessor* next);
5354
ProbabilityGridPointsProcessor(const ProbabilityGridPointsProcessor&) =
@@ -70,6 +71,7 @@ class ProbabilityGridPointsProcessor : public PointsProcessor {
7071
const OutputType output_type_;
7172
const std::vector<mapping::proto::Trajectory> trajectories_;
7273
std::unique_ptr<FileWriter> file_writer_;
74+
std::unique_ptr<FileWriter> yaml_file_writer_;
7375
PointsProcessor* const next_;
7476
mapping::ProbabilityGridRangeDataInserter2D range_data_inserter_;
7577
mapping::ValueConversionTables conversion_tables_;

0 commit comments

Comments
 (0)