No re-use of trajectory node proto in SerializeTrajectoryNodes (#1293)

When serializing `TrajectoryNode`, the declared proto is currently re-used. This can lead to unexpected behavior, in particular when the serialization of the proto is performed in an external function.

This PR also relates PR #1277 where exactly that problem occurred in the SerializeSubmaps.
master
Martin Schwörer 2018-07-18 12:22:00 +02:00 committed by Wally B. Feed
parent 0668411d6f
commit ce9c567e3c
1 changed files with 7 additions and 7 deletions

View File

@ -80,9 +80,9 @@ SerializedData SerializeTrajectoryBuilderOptions(
void SerializeSubmaps( void SerializeSubmaps(
const MapById<SubmapId, PoseGraphInterface::SubmapData>& submap_data, const MapById<SubmapId, PoseGraphInterface::SubmapData>& submap_data,
ProtoStreamWriterInterface* const writer) { ProtoStreamWriterInterface* const writer) {
SerializedData proto;
// Next serialize all submaps. // Next serialize all submaps.
for (const auto& submap_id_data : submap_data) { for (const auto& submap_id_data : submap_data) {
SerializedData proto;
auto* const submap_proto = proto.mutable_submap(); auto* const submap_proto = proto.mutable_submap();
submap_proto->mutable_submap_id()->set_trajectory_id( submap_proto->mutable_submap_id()->set_trajectory_id(
submap_id_data.id.trajectory_id); submap_id_data.id.trajectory_id);
@ -99,8 +99,8 @@ void SerializeSubmaps(
void SerializeTrajectoryNodes( void SerializeTrajectoryNodes(
const MapById<NodeId, TrajectoryNode>& trajectory_nodes, const MapById<NodeId, TrajectoryNode>& trajectory_nodes,
ProtoStreamWriterInterface* const writer) { ProtoStreamWriterInterface* const writer) {
SerializedData proto;
for (const auto& node_id_data : trajectory_nodes) { for (const auto& node_id_data : trajectory_nodes) {
SerializedData proto;
auto* const node_proto = proto.mutable_node(); auto* const node_proto = proto.mutable_node();
node_proto->mutable_node_id()->set_trajectory_id( node_proto->mutable_node_id()->set_trajectory_id(
node_id_data.id.trajectory_id); node_id_data.id.trajectory_id);
@ -115,8 +115,8 @@ void SerializeTrajectoryData(
const std::map<int, PoseGraphInterface::TrajectoryData>& const std::map<int, PoseGraphInterface::TrajectoryData>&
all_trajectory_data, all_trajectory_data,
ProtoStreamWriterInterface* const writer) { ProtoStreamWriterInterface* const writer) {
SerializedData proto;
for (const auto& trajectory_data : all_trajectory_data) { for (const auto& trajectory_data : all_trajectory_data) {
SerializedData proto;
auto* const trajectory_data_proto = proto.mutable_trajectory_data(); auto* const trajectory_data_proto = proto.mutable_trajectory_data();
trajectory_data_proto->set_trajectory_id(trajectory_data.first); trajectory_data_proto->set_trajectory_id(trajectory_data.first);
trajectory_data_proto->set_gravity_constant( trajectory_data_proto->set_gravity_constant(
@ -137,9 +137,9 @@ void SerializeTrajectoryData(
void SerializeImuData(const sensor::MapByTime<sensor::ImuData>& all_imu_data, void SerializeImuData(const sensor::MapByTime<sensor::ImuData>& all_imu_data,
ProtoStreamWriterInterface* const writer) { ProtoStreamWriterInterface* const writer) {
SerializedData proto;
for (const int trajectory_id : all_imu_data.trajectory_ids()) { for (const int trajectory_id : all_imu_data.trajectory_ids()) {
for (const auto& imu_data : all_imu_data.trajectory(trajectory_id)) { for (const auto& imu_data : all_imu_data.trajectory(trajectory_id)) {
SerializedData proto;
auto* const imu_data_proto = proto.mutable_imu_data(); auto* const imu_data_proto = proto.mutable_imu_data();
imu_data_proto->set_trajectory_id(trajectory_id); imu_data_proto->set_trajectory_id(trajectory_id);
*imu_data_proto->mutable_imu_data() = sensor::ToProto(imu_data); *imu_data_proto->mutable_imu_data() = sensor::ToProto(imu_data);
@ -151,10 +151,10 @@ void SerializeImuData(const sensor::MapByTime<sensor::ImuData>& all_imu_data,
void SerializeOdometryData( void SerializeOdometryData(
const sensor::MapByTime<sensor::OdometryData>& all_odometry_data, const sensor::MapByTime<sensor::OdometryData>& all_odometry_data,
ProtoStreamWriterInterface* const writer) { ProtoStreamWriterInterface* const writer) {
SerializedData proto;
for (const int trajectory_id : all_odometry_data.trajectory_ids()) { for (const int trajectory_id : all_odometry_data.trajectory_ids()) {
for (const auto& odometry_data : for (const auto& odometry_data :
all_odometry_data.trajectory(trajectory_id)) { all_odometry_data.trajectory(trajectory_id)) {
SerializedData proto;
auto* const odometry_data_proto = proto.mutable_odometry_data(); auto* const odometry_data_proto = proto.mutable_odometry_data();
odometry_data_proto->set_trajectory_id(trajectory_id); odometry_data_proto->set_trajectory_id(trajectory_id);
*odometry_data_proto->mutable_odometry_data() = *odometry_data_proto->mutable_odometry_data() =
@ -168,10 +168,10 @@ void SerializeFixedFramePoseData(
const sensor::MapByTime<sensor::FixedFramePoseData>& const sensor::MapByTime<sensor::FixedFramePoseData>&
all_fixed_frame_pose_data, all_fixed_frame_pose_data,
ProtoStreamWriterInterface* const writer) { ProtoStreamWriterInterface* const writer) {
SerializedData proto;
for (const int trajectory_id : all_fixed_frame_pose_data.trajectory_ids()) { for (const int trajectory_id : all_fixed_frame_pose_data.trajectory_ids()) {
for (const auto& fixed_frame_pose_data : for (const auto& fixed_frame_pose_data :
all_fixed_frame_pose_data.trajectory(trajectory_id)) { all_fixed_frame_pose_data.trajectory(trajectory_id)) {
SerializedData proto;
auto* const fixed_frame_pose_data_proto = auto* const fixed_frame_pose_data_proto =
proto.mutable_fixed_frame_pose_data(); proto.mutable_fixed_frame_pose_data();
fixed_frame_pose_data_proto->set_trajectory_id(trajectory_id); fixed_frame_pose_data_proto->set_trajectory_id(trajectory_id);
@ -186,9 +186,9 @@ void SerializeLandmarkNodes(
const std::map<std::string, PoseGraphInterface::LandmarkNode>& const std::map<std::string, PoseGraphInterface::LandmarkNode>&
all_landmark_nodes, all_landmark_nodes,
ProtoStreamWriterInterface* const writer) { ProtoStreamWriterInterface* const writer) {
SerializedData proto;
for (const auto& node : all_landmark_nodes) { for (const auto& node : all_landmark_nodes) {
for (const auto& observation : node.second.landmark_observations) { for (const auto& observation : node.second.landmark_observations) {
SerializedData proto;
auto* landmark_data_proto = proto.mutable_landmark_data(); auto* landmark_data_proto = proto.mutable_landmark_data();
landmark_data_proto->set_trajectory_id(observation.trajectory_id); landmark_data_proto->set_trajectory_id(observation.trajectory_id);
landmark_data_proto->mutable_landmark_data()->set_timestamp( landmark_data_proto->mutable_landmark_data()->set_timestamp(