From eff103f66354109f80b6935745ab41fa47a1aa95 Mon Sep 17 00:00:00 2001 From: Michael Grupp Date: Mon, 9 Jul 2018 15:03:40 +0200 Subject: [PATCH] Ignore initial poses on gRPC server side. (#1234) Fixes a crash if a client initializes with an initial pose inside a frozen map that isn't known to the server. --- cartographer/cloud/internal/handlers/add_trajectory_handler.cc | 3 +++ .../cloud/internal/handlers/add_trajectory_handler_test.cc | 2 ++ 2 files changed, 5 insertions(+) diff --git a/cartographer/cloud/internal/handlers/add_trajectory_handler.cc b/cartographer/cloud/internal/handlers/add_trajectory_handler.cc index 237bcf6..8133c91 100644 --- a/cartographer/cloud/internal/handlers/add_trajectory_handler.cc +++ b/cartographer/cloud/internal/handlers/add_trajectory_handler.cc @@ -55,6 +55,9 @@ void AddTrajectoryHandler::OnRequest( // freeze the trajectory on the server. trajectory_builder_options.clear_pure_localization_trimmer(); + // Ignore initial poses in trajectory_builder_options. + trajectory_builder_options.clear_initial_trajectory_pose(); + GetContext() ->local_trajectory_uploader() ->AddTrajectory(trajectory_id, expected_sensor_ids, diff --git a/cartographer/cloud/internal/handlers/add_trajectory_handler_test.cc b/cartographer/cloud/internal/handlers/add_trajectory_handler_test.cc index b392b26..c4f2339 100644 --- a/cartographer/cloud/internal/handlers/add_trajectory_handler_test.cc +++ b/cartographer/cloud/internal/handlers/add_trajectory_handler_test.cc @@ -122,9 +122,11 @@ TEST_F(AddTrajectoryHandlerTest, WithLocalSlamUploader) { .WillOnce(Return(13)); auto upstream_trajectory_builder_options = request.trajectory_builder_options(); + // Reproduce the changes to the request as done by the handler. upstream_trajectory_builder_options.clear_trajectory_builder_2d_options(); upstream_trajectory_builder_options.clear_trajectory_builder_3d_options(); upstream_trajectory_builder_options.clear_pure_localization_trimmer(); + upstream_trajectory_builder_options.clear_initial_trajectory_pose(); EXPECT_CALL(*mock_local_trajectory_uploader_, AddTrajectory(Eq(13), ParseSensorIds(request), Truly(testing::BuildProtoPredicateEquals(