Add support for serializing to a proto stream. (#379)
Also changes the ground truth tools to read from such a file. This resolves #335. Related to #253.master
parent
54bd81a78b
commit
03b9285034
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include "cartographer/common/port.h"
|
#include "cartographer/common/port.h"
|
||||||
#include "cartographer/ground_truth/proto/relations.pb.h"
|
#include "cartographer/ground_truth/proto/relations.pb.h"
|
||||||
|
#include "cartographer/io/proto_stream.h"
|
||||||
#include "cartographer/mapping/proto/sparse_pose_graph.pb.h"
|
#include "cartographer/mapping/proto/sparse_pose_graph.pb.h"
|
||||||
#include "cartographer/transform/transform.h"
|
#include "cartographer/transform/transform.h"
|
||||||
#include "gflags/gflags.h"
|
#include "gflags/gflags.h"
|
||||||
|
@ -27,7 +28,8 @@
|
||||||
|
|
||||||
DEFINE_string(
|
DEFINE_string(
|
||||||
pose_graph_filename, "",
|
pose_graph_filename, "",
|
||||||
"File with the pose graph proto from which to generate ground truth data.");
|
"Proto stream file containing the pose graph used to generate ground truth "
|
||||||
|
"data.");
|
||||||
DEFINE_string(output_filename, "", "File to write the ground truth proto to.");
|
DEFINE_string(output_filename, "", "File to write the ground truth proto to.");
|
||||||
DEFINE_double(min_covered_distance, 100.,
|
DEFINE_double(min_covered_distance, 100.,
|
||||||
"Minimum covered distance in meters before a loop closure is "
|
"Minimum covered distance in meters before a loop closure is "
|
||||||
|
@ -168,8 +170,8 @@ void Run(const string& pose_graph_filename, const string& output_filename,
|
||||||
LOG(INFO) << "Reading pose graph from '" << pose_graph_filename << "'...";
|
LOG(INFO) << "Reading pose graph from '" << pose_graph_filename << "'...";
|
||||||
mapping::proto::SparsePoseGraph pose_graph;
|
mapping::proto::SparsePoseGraph pose_graph;
|
||||||
{
|
{
|
||||||
std::ifstream stream(pose_graph_filename.c_str());
|
io::ProtoStreamReader reader(pose_graph_filename);
|
||||||
CHECK(pose_graph.ParseFromIstream(&stream));
|
CHECK(reader.ReadProto(&pose_graph));
|
||||||
CHECK_EQ(pose_graph.trajectory_size(), 1)
|
CHECK_EQ(pose_graph.trajectory_size(), 1)
|
||||||
<< "Only pose graphs containing a single trajectory are supported.";
|
<< "Only pose graphs containing a single trajectory are supported.";
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "cartographer/common/port.h"
|
#include "cartographer/common/port.h"
|
||||||
#include "cartographer/ground_truth/proto/relations.pb.h"
|
#include "cartographer/ground_truth/proto/relations.pb.h"
|
||||||
#include "cartographer/ground_truth/relations_text_file.h"
|
#include "cartographer/ground_truth/relations_text_file.h"
|
||||||
|
#include "cartographer/io/proto_stream.h"
|
||||||
#include "cartographer/mapping/proto/sparse_pose_graph.pb.h"
|
#include "cartographer/mapping/proto/sparse_pose_graph.pb.h"
|
||||||
#include "cartographer/transform/rigid_transform.h"
|
#include "cartographer/transform/rigid_transform.h"
|
||||||
#include "cartographer/transform/transform.h"
|
#include "cartographer/transform/transform.h"
|
||||||
|
@ -36,7 +37,7 @@
|
||||||
|
|
||||||
DEFINE_string(
|
DEFINE_string(
|
||||||
pose_graph_filename, "",
|
pose_graph_filename, "",
|
||||||
"File with the pose graph proto from which to assess the quality.");
|
"Proto stream file containing the pose graph used to assess quality.");
|
||||||
DEFINE_string(relations_filename, "",
|
DEFINE_string(relations_filename, "",
|
||||||
"Relations file containing the ground truth.");
|
"Relations file containing the ground truth.");
|
||||||
DEFINE_bool(read_text_file_with_unix_timestamps, false,
|
DEFINE_bool(read_text_file_with_unix_timestamps, false,
|
||||||
|
@ -113,8 +114,8 @@ void Run(const string& pose_graph_filename, const string& relations_filename,
|
||||||
LOG(INFO) << "Reading pose graph from '" << pose_graph_filename << "'...";
|
LOG(INFO) << "Reading pose graph from '" << pose_graph_filename << "'...";
|
||||||
mapping::proto::SparsePoseGraph pose_graph;
|
mapping::proto::SparsePoseGraph pose_graph;
|
||||||
{
|
{
|
||||||
std::ifstream stream(pose_graph_filename.c_str());
|
io::ProtoStreamReader reader(pose_graph_filename);
|
||||||
CHECK(pose_graph.ParseFromIstream(&stream));
|
CHECK(reader.ReadProto(&pose_graph));
|
||||||
CHECK_EQ(pose_graph.trajectory_size(), 1)
|
CHECK_EQ(pose_graph.trajectory_size(), 1)
|
||||||
<< "Only pose graphs containing a single trajectory are supported.";
|
<< "Only pose graphs containing a single trajectory are supported.";
|
||||||
}
|
}
|
||||||
|
|
|
@ -132,6 +132,14 @@ string MapBuilder::SubmapToProto(const mapping::SubmapId& submap_id,
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MapBuilder::SerializeState(io::ProtoStreamWriter* const writer) {
|
||||||
|
// We serialize the pose graph followed by all the data referenced in it.
|
||||||
|
writer->WriteProto(sparse_pose_graph_->ToProto());
|
||||||
|
// TODO(whess): Serialize submaps.
|
||||||
|
// TODO(whess): Serialize range data ("scan") for each trajectory node.
|
||||||
|
// TODO(whess): Serialize additional sensor data: IMU, odometry.
|
||||||
|
}
|
||||||
|
|
||||||
int MapBuilder::num_trajectory_builders() const {
|
int MapBuilder::num_trajectory_builders() const {
|
||||||
return trajectory_builders_.size();
|
return trajectory_builders_.size();
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "cartographer/common/lua_parameter_dictionary.h"
|
#include "cartographer/common/lua_parameter_dictionary.h"
|
||||||
#include "cartographer/common/port.h"
|
#include "cartographer/common/port.h"
|
||||||
#include "cartographer/common/thread_pool.h"
|
#include "cartographer/common/thread_pool.h"
|
||||||
|
#include "cartographer/io/proto_stream.h"
|
||||||
#include "cartographer/mapping/id.h"
|
#include "cartographer/mapping/id.h"
|
||||||
#include "cartographer/mapping/proto/map_builder_options.pb.h"
|
#include "cartographer/mapping/proto/map_builder_options.pb.h"
|
||||||
#include "cartographer/mapping/proto/submap_visualization.pb.h"
|
#include "cartographer/mapping/proto/submap_visualization.pb.h"
|
||||||
|
@ -77,6 +78,9 @@ class MapBuilder {
|
||||||
string SubmapToProto(const SubmapId& submap_id,
|
string SubmapToProto(const SubmapId& submap_id,
|
||||||
proto::SubmapQuery::Response* response);
|
proto::SubmapQuery::Response* response);
|
||||||
|
|
||||||
|
// Serializes the current state to a proto stream.
|
||||||
|
void SerializeState(io::ProtoStreamWriter* writer);
|
||||||
|
|
||||||
int num_trajectory_builders() const;
|
int num_trajectory_builders() const;
|
||||||
|
|
||||||
mapping::SparsePoseGraph* sparse_pose_graph();
|
mapping::SparsePoseGraph* sparse_pose_graph();
|
||||||
|
|
Loading…
Reference in New Issue